UBUNTU: ubuntu: rtl8192se -- version 2010-0115,0014
authorManoj Iyer <manoj.iyer@canonical.com>
Tue, 2 Mar 2010 06:01:41 +0000 (00:01 -0600)
committerLeann Ogasawara <leann.ogasawara@canonical.com>
Mon, 28 Mar 2011 13:48:33 +0000 (06:48 -0700)
ExternalDriver: rtl8192se_pci
Description:    Driver for RTL8191/92 or RTL8171 wifi nic
Url:            http://www.realtek.com/
Mask:
Version:        2010-0115,0014

Buglink: http://launchpad.net/bugs/530275

Signed-off-by: Manoj Iyer <manoj.iyer@canonical.com>
Signed-off-by: Andy Whitcroft <apw@canonical.com>

95 files changed:
ubuntu/Kconfig
ubuntu/Makefile
ubuntu/rtl8192se/BOM [new file with mode: 0644]
ubuntu/rtl8192se/Kconfig [new file with mode: 0644]
ubuntu/rtl8192se/Makefile [new file with mode: 0644]
ubuntu/rtl8192se/rtl8192s/Makefile [new file with mode: 0644]
ubuntu/rtl8192se/rtl8192s/r8192S_Efuse.c [new file with mode: 0644]
ubuntu/rtl8192se/rtl8192s/r8192S_Efuse.h [new file with mode: 0644]
ubuntu/rtl8192se/rtl8192s/r8192S_def.h [new file with mode: 0644]
ubuntu/rtl8192se/rtl8192s/r8192S_dev.c [new file with mode: 0644]
ubuntu/rtl8192se/rtl8192s/r8192S_dev.h [new file with mode: 0644]
ubuntu/rtl8192se/rtl8192s/r8192S_firmware.c [new file with mode: 0644]
ubuntu/rtl8192se/rtl8192s/r8192S_firmware.h [new file with mode: 0644]
ubuntu/rtl8192se/rtl8192s/r8192S_hw.h [new file with mode: 0644]
ubuntu/rtl8192se/rtl8192s/r8192S_hwimg.c [new file with mode: 0644]
ubuntu/rtl8192se/rtl8192s/r8192S_hwimg.h [new file with mode: 0644]
ubuntu/rtl8192se/rtl8192s/r8192S_hwimg492.c [new file with mode: 0644]
ubuntu/rtl8192se/rtl8192s/r8192S_hwimg492.h [new file with mode: 0644]
ubuntu/rtl8192se/rtl8192s/r8192S_led.c [new file with mode: 0644]
ubuntu/rtl8192se/rtl8192s/r8192S_led.h [new file with mode: 0644]
ubuntu/rtl8192se/rtl8192s/r8192S_mp.c [new file with mode: 0644]
ubuntu/rtl8192se/rtl8192s/r8192S_mp.h [new file with mode: 0644]
ubuntu/rtl8192se/rtl8192s/r8192S_phy.c [new file with mode: 0644]
ubuntu/rtl8192se/rtl8192s/r8192S_phy.h [new file with mode: 0644]
ubuntu/rtl8192se/rtl8192s/r8192S_phyreg.h [new file with mode: 0644]
ubuntu/rtl8192se/rtl8192s/r8192S_rtl6052.c [new file with mode: 0644]
ubuntu/rtl8192se/rtl8192s/r8192S_rtl6052.h [new file with mode: 0644]
ubuntu/rtl8192se/rtl8192s/r8192S_scan.c [new file with mode: 0644]
ubuntu/rtl8192se/rtl8192s/r8192S_scan.h [new file with mode: 0644]
ubuntu/rtl8192se/rtl_cam.c [new file with mode: 0644]
ubuntu/rtl8192se/rtl_cam.h [new file with mode: 0644]
ubuntu/rtl8192se/rtl_core.c [new file with mode: 0644]
ubuntu/rtl8192se/rtl_core.h [new file with mode: 0644]
ubuntu/rtl8192se/rtl_debug.c [new file with mode: 0644]
ubuntu/rtl8192se/rtl_debug.h [new file with mode: 0644]
ubuntu/rtl8192se/rtl_dm.c [new file with mode: 0644]
ubuntu/rtl8192se/rtl_dm.h [new file with mode: 0644]
ubuntu/rtl8192se/rtl_eeprom.c [new file with mode: 0644]
ubuntu/rtl8192se/rtl_eeprom.h [new file with mode: 0644]
ubuntu/rtl8192se/rtl_endianfree.h [new file with mode: 0644]
ubuntu/rtl8192se/rtl_ethtool.c [new file with mode: 0644]
ubuntu/rtl8192se/rtl_mesh.c [new file with mode: 0644]
ubuntu/rtl8192se/rtl_mesh.h [new file with mode: 0644]
ubuntu/rtl8192se/rtl_pm.c [new file with mode: 0644]
ubuntu/rtl8192se/rtl_pm.h [new file with mode: 0644]
ubuntu/rtl8192se/rtl_ps.c [new file with mode: 0644]
ubuntu/rtl8192se/rtl_ps.h [new file with mode: 0644]
ubuntu/rtl8192se/rtl_regd.c [new file with mode: 0644]
ubuntu/rtl8192se/rtl_regd.h [new file with mode: 0644]
ubuntu/rtl8192se/rtl_wx.c [new file with mode: 0644]
ubuntu/rtl8192se/rtl_wx.h [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/EndianFree.h [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/Makefile [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/aes.c [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/api.c [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/arc4.c [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/autoload.c [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/cipher.c [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/compress.c [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/crypto_compat.h [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/digest.c [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/dot11d.c [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/dot11d.h [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/internal.h [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/kmap_types.h [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/license [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/michael_mic.c [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/proc.c [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/readme [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/rtl819x_BA.h [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/rtl819x_BAProc.c [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/rtl819x_HT.h [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/rtl819x_HTProc.c [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/rtl819x_Qos.h [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/rtl819x_TS.h [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/rtl819x_TSProc.c [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/rtl_crypto.h [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/rtllib.h [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/rtllib_crypt.c [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/rtllib_crypt.h [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/rtllib_crypt_ccmp.c [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/rtllib_crypt_tkip.c [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/rtllib_crypt_wep.c [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/rtllib_module.c [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/rtllib_rx.c [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/rtllib_softmac.c [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/rtllib_softmac_wx.c [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/rtllib_tx.c [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/rtllib_wx.c [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/scatterwalk.c [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/scatterwalk.h [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/wapi.c [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/wapi.h [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/wapi_interface.c [new file with mode: 0644]
ubuntu/rtl8192se/rtllib/wapi_interface.h [new file with mode: 0644]

index 5d5815c..437a67e 100644 (file)
@@ -31,6 +31,10 @@ source "ubuntu/iscsitarget/Kconfig"
 ##
 ##
 ##
+source "ubuntu/rtl8192se/Kconfig"
+##
+##
+##
 ##
 ##
 ##
index 7bf5c55..d335129 100644 (file)
@@ -33,6 +33,10 @@ obj-$(CONFIG_SCSI_ISCSITARGET)       += iscsitarget/
 ##
 ##
 ##
+obj-$(CONFIG_RTL8192SE)                += rtl8192se/
+##
+##
+##
 ##
 ##
 ##
diff --git a/ubuntu/rtl8192se/BOM b/ubuntu/rtl8192se/BOM
new file mode 100644 (file)
index 0000000..e7c86c1
--- /dev/null
@@ -0,0 +1,2 @@
+Downloaded from:       http://www.realtek.com/products/productsView.aspx?Langid=1&PFid=48&Level=5&Conn=4&ProdID=230
+Current Version:       2010-0115,0014
diff --git a/ubuntu/rtl8192se/Kconfig b/ubuntu/rtl8192se/Kconfig
new file mode 100644 (file)
index 0000000..8b90d67
--- /dev/null
@@ -0,0 +1,5 @@
+config RTL8192SE
+       tristate "Kernel module for RTL81991/2SE or RTL8171 wireless"
+       depends on X86
+       default m
+       ---help---
diff --git a/ubuntu/rtl8192se/Makefile b/ubuntu/rtl8192se/Makefile
new file mode 100644 (file)
index 0000000..8d87e85
--- /dev/null
@@ -0,0 +1,71 @@
+NIC_SELECT = RTL8192SE
+
+
+EXTRA_CFLAGS = -DRTL8192SE
+EXTRA_CFLAGS += -DEEPROM_OLD_FORMAT_SUPPORT=0          \
+               -DRTL92SE_FPGA_VERIFY=0                 \
+               -DDEMO_BOARD_SUPPORT=1                  \
+               -DRTL8192SU_DISABLE_CCK_RATE=0          \
+               -DRTL8192S_DISABLE_FW_DM=0              \
+               -DHAL_MAC_ENABLE=1                      \
+               -DHAL_BB_ENABLE=1                       \
+               -DHAL_RF_ENABLE=1                       \
+               -DRTL8192S_PREPARE_FOR_NORMAL_RELEASE=1 \
+               -DDISABLE_BB_RF=0                       \
+               -DCONFIG_PM_RTL                         \
+               -DENABLE_GPIO_RADIO_CTL                 \
+               -DRTL8190_Download_Firmware_From_Header=1 \
+               -DCONFIG_PM                             \
+               -DENABLE_LPS                            \
+               -DCONFIG_ASPM_OR_D3                     \
+               -DCONFIG_RX_CMD                         \
+               -DENABLE_IPS                            \
+               -DUSE_FW_SOURCE_IMG_FILE                \
+               -DENABLE_DOT11D                         \
+               -DCONFIG_FW_SETCHAN                     
+
+EXTRA_CFLAGS += -I$(PWD)/ubuntu/rtl8192se
+EXTRA_CFLAGS += -std=gnu89
+EXTRA_CFLAGS += -O2
+EXTRA_CFLAGS += -mhard-float -DCONFIG_FORCE_HARD_FLOAT=y
+EXTRA_CFLAGS += -DTHOMAS_TURBO
+#flag for single module compile
+EXTRA_CFLAGS += -DBUILT_IN_RTLLIB
+
+r8192se_pci-objs := rtl_core.o                 \
+                 rtl_regd.o            \
+                 rtl_eeprom.o  \
+                 rtl_wx.o              \
+                 rtl_cam.o             \
+                 rtl_pm.o              \
+                 rtl_ps.o              \
+                 rtl_dm.o              \
+                 rtl_debug.o           \
+                 rtl_ethtool.o         \
+                 rtl8192s/r8192S_dev.o         \
+                 rtl8192s/r8192S_Efuse.o       \
+                 rtl8192s/r8192S_phy.o         \
+                 rtl8192s/r8192S_firmware.o    \
+                 rtl8192s/r8192S_rtl6052.o     \
+                 rtl8192s/r8192S_hwimg.o       \
+                 rtl8192s/r8192S_led.o         \
+                 rtl8192s/r8192S_mp.o          \
+                 rtl8192s/r8192S_scan.o        \
+                 rtllib/rtllib_rx.o                \
+                 rtllib/rtllib_softmac.o           \
+                 rtllib/rtllib_tx.o                \
+                 rtllib/rtllib_wx.o                \
+                 rtllib/rtllib_module.o            \
+                 rtllib/rtllib_softmac_wx.o        \
+                 rtllib/rtl819x_HTProc.o              \
+                 rtllib/rtl819x_TSProc.o              \
+                 rtllib/rtl819x_BAProc.o              \
+                 rtllib/dot11d.o                      \
+                 rtllib/rtllib_crypt.o             \
+                 rtllib/rtllib_crypt_tkip.o        \
+                 rtllib/rtllib_crypt_ccmp.o        \
+                 rtllib/rtllib_crypt_wep.o             \
+                 rtllib/wapi.o                         \
+                 rtllib/wapi_interface.o
+
+obj-$(CONFIG_RTL8192SE) := r8192se_pci.o
diff --git a/ubuntu/rtl8192se/rtl8192s/Makefile b/ubuntu/rtl8192se/rtl8192s/Makefile
new file mode 100644 (file)
index 0000000..86754af
--- /dev/null
@@ -0,0 +1,10 @@
+.PHONY:clean
+clean:
+       rm -fr *.mod.c *.mod *.o .*.cmd *.ko *~
+       rm -fr .tmp_versions
+       rm -fr Modules.symvers
+       rm -fr Module.symvers
+       rm -fr Module.markers
+       rm -fr modules.order
+       rm -fr tags
+
diff --git a/ubuntu/rtl8192se/rtl8192s/r8192S_Efuse.c b/ubuntu/rtl8192se/rtl8192s/r8192S_Efuse.c
new file mode 100644 (file)
index 0000000..0b7c0d8
--- /dev/null
@@ -0,0 +1,1869 @@
+/******************************************************************************\r
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ * The full GNU General Public License is included in this distribution in the\r
+ * file called LICENSE.\r
+ *\r
+ * Contact Information:\r
+ * wlanfae <wlanfae@realtek.com>\r
+******************************************************************************/\r
+#include "../rtl_core.h"\r
+#include "r8192S_Efuse.h"\r
+\r
+#include <linux/types.h>\r
+\r
+#ifdef RTL8192SE\r
+/*---------------------------Define Local Constant---------------------------*/\r
+#define        _POWERON_DELAY_\r
+#define        _PRE_EXECUTE_READ_CMD_\r
+\r
+#define                EFUSE_REPEAT_THRESHOLD_         3\r
+#define                EFUSE_ERROE_HANDLE              1\r
+\r
+\r
+typedef struct _EFUSE_MAP_A{\r
+       u8 offset;              
+       u8 word_start;  
+       u8 byte_start;  
+       u8 byte_cnts;\r
+       \r
+}EFUSE_MAP, *PEFUSE_MAP;\r
+\r
+typedef struct PG_PKT_STRUCT_A{\r
+       u8 offset;\r
+       u8 word_en;\r
+       u8 data[8];     \r
+}PGPKT_STRUCT,*PPGPKT_STRUCT;\r
+\r
+typedef enum _EFUSE_DATA_ITEM{\r
+       EFUSE_CHIP_ID=0,\r
+       EFUSE_LDO_SETTING,\r
+       EFUSE_CLK_SETTING,\r
+       EFUSE_SDIO_SETTING,\r
+       EFUSE_CCCR,\r
+       EFUSE_SDIO_MODE,\r
+       EFUSE_OCR,\r
+       EFUSE_F0CIS,\r
+       EFUSE_F1CIS,\r
+       EFUSE_MAC_ADDR,\r
+       EFUSE_EEPROM_VER,\r
+       EFUSE_CHAN_PLAN,\r
+       EFUSE_TXPW_TAB\r
+} EFUSE_DATA_ITEM;\r
+\r
+struct efuse_priv \r
+{    \r
+       u8              id[2];\r
+       u8              ldo_setting[2];\r
+       u8              clk_setting[2];\r
+       u8              cccr;\r
+       u8              sdio_mode;\r
+       u8              ocr[3];\r
+       u8              cis0[17];\r
+       u8              cis1[48];       \r
+       u8              mac_addr[6];\r
+       u8              eeprom_verno;   \r
+       u8              channel_plan;\r
+       u8              tx_power_b[14];\r
+       u8              tx_power_g[14]; \r
+};\r
+\r
+/*---------------------------Define Local Constant---------------------------*/\r
+\r
+\r
+/*------------------------Define global variable-----------------------------*/\r
+const u8 MAX_PGPKT_SIZE = 9; 
+const u8 PGPKT_DATA_SIZE = 8; 
+const u32 EFUSE_MAX_SIZE = 512;\r
+\r
+const u8 EFUSE_OOB_PROTECT_BYTES = 15; \r
+\r
+\r
+const EFUSE_MAP RTL8712_SDIO_EFUSE_TABLE[]={\r
+/*ID*/         {0              ,0              ,0                      ,2      }, 
+/*LDO Setting*/        {0              ,1              ,0                      ,2      }, 
+/*CLK Setting*/        {0              ,2              ,0                      ,2      }, 
+/*SDIO Setting*/{1             ,0              ,0                      ,1      }, 
+/*CCCR*/       {1              ,0              ,1                      ,1      }, 
+/*SDIO MODE*/  {1              ,1              ,0                      ,1      }, 
+/*OCR*/                {1              ,1              ,1                      ,3      }, 
+/*CCIS*/       {1              ,3              ,0                      ,17     }, 
+/*F1CIS*/      {3              ,3              ,1                      ,48     }, 
+/*MAC Addr*/   {10             ,0              ,0                      ,6      }, 
+/*EEPROM ver*/ {10             ,3              ,0                      ,1      }, 
+/*Channel plan*/{10            ,3              ,1                      ,1      }, 
+/*TxPwIndex */ {11             ,0              ,0                      ,28     }  
+};\r
+\r
+/*------------------------Define global variable-----------------------------*/\r
+\r
+\r
+/*------------------------Define local variable------------------------------*/\r
+\r
+/*------------------------Define local variable------------------------------*/\r
+\r
+\r
+/*--------------------Define function prototype-----------------------*/\r
+extern void    \r
+EFUSE_Initialize(struct net_device* dev);\r
+extern u8      \r
+EFUSE_Read1Byte(struct net_device* dev, u16 Address);\r
+extern void    \r
+EFUSE_Write1Byte(struct net_device* dev, u16 Address,u8 Value);\r
+\r
+static void\r
+efuse_ShadowRead1Byte(struct net_device* dev,u16 Offset,u8 *Value);\r
+static void\r
+efuse_ShadowRead2Byte(struct net_device* dev,  u16 Offset,u16 *Value   );\r
+static void\r
+efuse_ShadowRead4Byte(struct net_device* dev,  u16 Offset,u32 *Value   );\r
+static void\r
+efuse_ShadowWrite1Byte(struct net_device* dev, u16 Offset, u8 Value);\r
+static void\r
+efuse_ShadowWrite2Byte(struct net_device* dev, u16 Offset,u16 Value);\r
+static void\r
+efuse_ShadowWrite4Byte(struct net_device* dev, u16 Offset,u32 Value);\r
+\r
+static u8\r
+efuse_OneByteRead(struct net_device* dev,u16 addr,u8 *data);\r
+static u8\r
+efuse_OneByteWrite(struct net_device* dev,u16 addr, u8 data);\r
+\r
+static void \r
+efuse_ReadAllMap(struct net_device* dev,u8 *Efuse);\r
+#ifdef TO_DO_LIST\r
+static void\r
+efuse_WriteAllMap(struct net_device* dev,u8 *eeprom,u32 eeprom_size);\r
+static bool    \r
+efuse_ParsingMap(char* szStr,u32* pu4bVal,u32* pu4bMove);\r
+#endif\r
+static u8\r
+efuse_PgPacketRead(    struct net_device* dev,u8       offset,u8 *data);\r
+static u8 \r
+efuse_PgPacketWrite(struct net_device* dev,u8 offset,u8 word_en,u8     *data);\r
+static void\r
+efuse_WordEnableDataRead(      u8 word_en,u8 *sourdata,u8 *targetdata);\r
+static u8\r
+efuse_WordEnableDataWrite(     struct net_device* dev, u16 efuse_addr, u8 word_en, u8 *data);\r
+static void\r
+efuse_PowerSwitch(struct net_device* dev,u8 PwrState);\r
+static u16\r
+efuse_GetCurrentSize(struct net_device* dev);\r
+static u8\r
+efuse_CalculateWordCnts(u8 word_en);\r
+#if 0\r
+static void\r
+efuse_ResetLoader(struct net_device* dev);\r
+#endif\r
+#ifdef TO_DO_LIST\r
+static void efuse_reg_ctrl(struct net_device* dev, u8 bPowerOn);\r
+#endif\r
+/*--------------------Define function prototype-----------------------*/\r
+\r
+\r
+\r
+extern void    \r
+EFUSE_Initialize(struct net_device* dev)\r
+{\r
+       u8      Bytetemp = {0x00};\r
+       u8      temp = {0x00};\r
+\r
+       Bytetemp = read_nic_byte(dev, SYS_FUNC_EN+1);\r
+       temp = Bytetemp | 0x20;\r
+       write_nic_byte(dev, SYS_FUNC_EN+1, temp);\r
+\r
+       Bytetemp = read_nic_byte(dev, SYS_ISO_CTRL+1);\r
+       temp = Bytetemp & 0xFE;\r
+       write_nic_byte(dev, SYS_ISO_CTRL+1, temp);\r
+\r
+       \r
+       Bytetemp = read_nic_byte(dev, EFUSE_TEST+3);\r
+       temp = Bytetemp | 0x80;\r
+       write_nic_byte(dev, EFUSE_TEST+3, temp);\r
+\r
+       write_nic_byte(dev, 0x2F8, 0x3);\r
+       \r
+       write_nic_byte(dev, EFUSE_CTRL+3, 0x72);\r
+       \r
+}      /* EFUSE_Initialize */\r
+\r
+\r
+extern u8      \r
+EFUSE_Read1Byte(struct net_device* dev, u16    Address)\r
+{\r
+       u8      data;\r
+       u8      Bytetemp = {0x00};\r
+       u8      temp = {0x00};\r
+       u32     k=0;\r
+\r
+       if (Address < EFUSE_REAL_CONTENT_LEN)   
+       {\r
+               temp = Address & 0xFF;  \r
+               write_nic_byte(dev, EFUSE_CTRL+1, temp);        \r
+               Bytetemp = read_nic_byte(dev, EFUSE_CTRL+2);    \r
+               temp = ((Address >> 8) & 0x03) | (Bytetemp & 0xFC);     \r
+               write_nic_byte(dev, EFUSE_CTRL+2, temp);        \r
+\r
+               Bytetemp = read_nic_byte(dev, EFUSE_CTRL+3);\r
+               temp = Bytetemp & 0x7F;\r
+               write_nic_byte(dev, EFUSE_CTRL+3, temp);\r
+\r
+               Bytetemp = read_nic_byte(dev, EFUSE_CTRL+3);\r
+               while(!(Bytetemp & 0x80))\r
+               {                               \r
+                       Bytetemp = read_nic_byte(dev, EFUSE_CTRL+3);\r
+                       k++;\r
+                       if(k==1000)\r
+                       {\r
+                               k=0;\r
+                               break;\r
+                       }\r
+               }\r
+               data=read_nic_byte(dev, EFUSE_CTRL);\r
+               return data;\r
+       }\r
+       else\r
+               return 0xFF;\r
+       \r
+}      /* EFUSE_Read1Byte */\r
+\r
+\r
+extern void    \r
+EFUSE_Write1Byte(struct net_device* dev, u16 Address,u8 Value)\r
+{\r
+       u8      Bytetemp = {0x00};\r
+       u8      temp = {0x00};\r
+       u32     k=0;\r
+\r
+       \r
+       if( Address < EFUSE_REAL_CONTENT_LEN)   
+       {\r
+               write_nic_byte(dev, EFUSE_CTRL, Value);\r
+\r
+               temp = Address & 0xFF;  \r
+               write_nic_byte(dev, EFUSE_CTRL+1, temp);        \r
+               Bytetemp = read_nic_byte(dev, EFUSE_CTRL+2);    \r
+               \r
+               temp = ((Address >> 8) & 0x03) | (Bytetemp & 0xFC);     \r
+               write_nic_byte(dev, EFUSE_CTRL+2, temp);        \r
+\r
+               Bytetemp = read_nic_byte(dev, EFUSE_CTRL+3);\r
+               temp = Bytetemp | 0x80;\r
+               write_nic_byte(dev, EFUSE_CTRL+3, temp);\r
+\r
+               Bytetemp = read_nic_byte(dev, EFUSE_CTRL+3);\r
+               while(Bytetemp & 0x80)\r
+               {\r
+                       Bytetemp = read_nic_byte(dev, EFUSE_CTRL+3);                    \r
+                       k++;\r
+                       if(k==100)\r
+                       {\r
+                               k=0;\r
+                               break;\r
+                       }\r
+               }\r
+       }\r
+       \r
+}      /* EFUSE_Write1Byte */\r
+\r
+\r
+#ifdef EFUSE_FOR_92SU\r
+void do_93c46(struct net_device* dev,  u8 addorvalue)\r
+{\r
+       u8  cs[1] = {0x88};        
+       u8  cssk[1] = {0x8c};      
+       u8  csdi[1] = {0x8a};      
+       u8  csskdi[1] = {0x8e};    
+       u8  count;\r
+       \r
+       for(count=0 ; count<8 ; count++)\r
+       {\r
+               if((addorvalue&0x80)!=0)\r
+               {\r
+                       write_nic_byte(dev, EPROM_CMD, csdi[0]);                \r
+                       write_nic_byte(dev, EPROM_CMD, csskdi[0]);              \r
+               }\r
+               else\r
+               {\r
+                       write_nic_byte(dev, EPROM_CMD, cs[0]);                  \r
+                       write_nic_byte(dev, EPROM_CMD, cssk[0]);                \r
+               }\r
+               addorvalue = addorvalue << 1;\r
+       }\r
+}\r
+\r
+\r
+u16 Read93C46(struct net_device*       dev,    u16     Reg     )\r
+{\r
+\r
+       u8      clear[1] = {0x0};      
+       u8      cs[1] = {0x88};        
+       u8      cssk[1] = {0x8c};      
+       u8      csdi[1] = {0x8a};      
+       u8      csskdi[1] = {0x8e};    
+       u8      EepromSEL[1]={0x00};\r
+       u8      address;\r
+       \r
+       u16     storedataF[1] = {0x0};   
+       u8      t,data[1],storedata[1];\r
+       \r
+\r
+       address = (u8)Reg;\r
+       \r
+       *EepromSEL= read_nic_byte(dev, EPROM_CMD);\r
+\r
+       if((*EepromSEL & 0x10) == 0x10) 
+       {\r
+               address = address | 0x80;\r
+\r
+               write_nic_byte(dev, EPROM_CMD, csdi[0]);                \r
+               write_nic_byte(dev, EPROM_CMD, csskdi[0]);              \r
+               do_93c46(dev, address);\r
+       }\r
+\r
+\r
+       for(t=0 ; t<16 ; t++)      
+       {\r
+               write_nic_byte(dev, EPROM_CMD, cs[0]);                  \r
+               write_nic_byte(dev, EPROM_CMD, cssk[0]); \r
+               *data= read_nic_byte(dev, EPROM_CMD);           \r
+               \r
+               if(*data & 0x8d) 
+               {\r
+                       *data = *data & 0x01;\r
+                       *storedata = *data;\r
+               }\r
+               else \r
+               {\r
+                       *data = *data & 0x01 ; \r
+                       *storedata = *data;   \r
+               } \r
+               *storedataF = (*storedataF << 1 ) + *storedata;\r
+       }\r
+       write_nic_byte(dev, EPROM_CMD, cs[0]);     \r
+       write_nic_byte(dev, EPROM_CMD, clear[0]);     \r
+\r
+       return *storedataF;\r
+}\r
+\r
+\r
+void\r
+ReadEFuseByte(struct net_device* dev,u16 _offset, u8 *pbuf) \r
+{\r
+\r
+       u32  value32;\r
+       u8      readbyte;\r
+       u16     retry;\r
+       \r
+\r
+       write_nic_byte(dev, EFUSE_CTRL+1, (_offset & 0xff));            \r
+       readbyte = read_nic_byte(dev, EFUSE_CTRL+2);\r
+       write_nic_byte(dev, EFUSE_CTRL+2, ((_offset >> 8) & 0x03) | (readbyte & 0xfc));                 \r
+\r
+       readbyte = read_nic_byte(dev, EFUSE_CTRL+3);            \r
+       write_nic_byte(dev, EFUSE_CTRL+3, (readbyte & 0x7f));   \r
+       \r
+       retry = 0;\r
+       value32 = read_nic_dword(dev, EFUSE_CTRL);\r
+       while(!(((value32 >> 24) & 0xff) & 0x80)  && (retry<10000))\r
+       {\r
+               value32 = read_nic_dword(dev, EFUSE_CTRL);\r
+               retry++;\r
+       }       \r
+       *pbuf = (u8)(value32 & 0xff);\r
+}\r
+\r
+\r
+#define                EFUSE_READ_SWITCH               1\r
+void\r
+ReadEFuse(struct net_device* dev, u16   _offset, u16 _size_byte, u8 *pbuf)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       u8      efuseTbl[EFUSE_MAP_LEN];\r
+       u8      rtemp8[1];\r
+       u16     eFuse_Addr = 0;\r
+       u8      offset, wren;\r
+       u16     i, j;\r
+       u16     eFuseWord[EFUSE_MAX_SECTION][EFUSE_MAX_WORD_UNIT];
+       u16     efuse_utilized = 0;\r
+       u16     efuse_usage = 0;\r
+#ifdef EFUSE_REPG_WORKAROUND\r
+       u16     sec1_addr = 0, sec5_addr = 0;\r
+#endif\r
+\r
+       if((_offset + _size_byte)>EFUSE_MAP_LEN)\r
+       {
+               printk("ReadEFuse(): Invalid offset with read bytes!!\n");\r
+               return;\r
+       }\r
+\r
+       for (i = 0; i < EFUSE_MAX_SECTION; i++)\r
+               for (j = 0; j < EFUSE_MAX_WORD_UNIT; j++)\r
+                       eFuseWord[i][j]=0xFFFF;\r
+       \r
+       for (i = 0; i < EFUSE_MAP_LEN; i++)\r
+               efuseTbl[i] = 0xFF;\r
+\r
+       ReadEFuseByte(dev, eFuse_Addr, rtemp8); \r
+       if(*rtemp8 != 0xFF)             \r
+       {\r
+               efuse_utilized++;\r
+               eFuse_Addr++;\r
+       }\r
+       while((*rtemp8 != 0xFF) && (eFuse_Addr < EFUSE_REAL_CONTENT_LEN))\r
+       {\r
+               offset = ((*rtemp8 >> 4) & 0x0f);\r
+#ifdef EFUSE_REPG_WORKAROUND\r
+               if (IS_HARDWARE_TYPE_8192SE(dev))\r
+               {\r
+                       if (offset == 1)\r
+                       {\r
+                               sec1_addr = eFuse_Addr; 
+                       }\r
+                       else if (offset == 5)\r
+                       {\r
+                               sec5_addr = eFuse_Addr;\r
+                       }\r
+               \r
+                       if (sec1_addr > sec5_addr)\r
+                       {\r
+                               priv->efuse_RePGSec1Flag = false;\r
+                       }\r
+                       else\r
+                       {\r
+                               priv->efuse_RePGSec1Flag = true;\r
+                      }\r
+               }\r
+#endif\r
+               if(offset < EFUSE_MAX_SECTION){\r
+                       wren = (*rtemp8 & 0x0f);\r
+                       for(i=0; i<4; i++){\r
+                               if(!(wren & 0x01)){\r
+                                       ReadEFuseByte(dev, eFuse_Addr, rtemp8); eFuse_Addr++;\r
+                                       efuse_utilized++;\r
+                                       eFuseWord[offset][i] = (*rtemp8 & 0xff);\r
+                                       if(eFuse_Addr >= EFUSE_REAL_CONTENT_LEN) break;\r
+                                       ReadEFuseByte(dev, eFuse_Addr, rtemp8); eFuse_Addr++;\r
+                                       efuse_utilized++;\r
+                                       eFuseWord[offset][i] |= (((u16)*rtemp8 << 8) & 0xff00);\r
+                                       if(eFuse_Addr >= EFUSE_REAL_CONTENT_LEN) break;\r
+                               }\r
+                               wren >>= 1;\r
+                       }\r
+               }\r
+               ReadEFuseByte(dev, eFuse_Addr, rtemp8); \r
+               if(*rtemp8 != 0xFF && (eFuse_Addr < 512))       \r
+               {\r
+                       efuse_utilized++;\r
+                       eFuse_Addr++;\r
+               }\r
+       }\r
+\r
+       for(i=0; i<EFUSE_MAX_SECTION; i++){\r
+               for(j=0; j<EFUSE_MAX_WORD_UNIT; j++){\r
+                       efuseTbl[(i*8)+(j*2)]=(eFuseWord[i][j] & 0xff);\r
+                       efuseTbl[(i*8)+((j*2)+1)]=((eFuseWord[i][j] >> 8) & 0xff);\r
+#ifdef FUSE_REPG_WORKAROUND\r
+                       if ((i == 1) && (priv->efuse_RePGSec1Flag == true))\r
+                       {\r
+                               priv->efuse_RePGData[j*2]=(eFuseWord[i][j] & 0xff);\r
+                               priv->efuse_RePGData[(j*2)+1]=((eFuseWord[i][j] >> 8) & 0xff);\r
+                       }\r
+#endif\r
+               }\r
+       }\r
+       for(i=0; i<_size_byte; i++)\r
+               pbuf[i] = efuseTbl[_offset+i];\r
+       priv->EfuseUsedBytes = efuse_utilized;\r
+       efuse_usage = (u8)((efuse_utilized*100)/EFUSE_REAL_CONTENT_LEN);\r
+       priv->EfuseUsedPercentage = efuse_usage;        \r
+}\r
+#endif 
+\r
+extern bool EFUSE_ShadowUpdateChk(struct net_device *dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       u8   SectionIdx, i, Base;\r
+       u16  WordsNeed = 0, HdrNum = 0, TotalBytes = 0, EfuseUsed = 0;\r
+       bool bWordChanged, bResult = true;\r
+\r
+       for (SectionIdx = 0; SectionIdx < 16; SectionIdx++) {\r
+               Base = SectionIdx * 8;\r
+               bWordChanged = false;\r
+\r
+               for (i = 0; i < 8; i=i+2) {\r
+                       if((priv->EfuseMap[EFUSE_INIT_MAP][Base+i] !=\r
+                                               priv->EfuseMap[EFUSE_MODIFY_MAP][Base+i]) ||\r
+                                       (priv->EfuseMap[EFUSE_INIT_MAP][Base+i+1] !=\r
+                                        priv->EfuseMap[EFUSE_MODIFY_MAP][Base+i+1])) {\r
+                               WordsNeed++;\r
+                               bWordChanged = true;\r
+                       }\r
+               }\r
+\r
+               if( bWordChanged == true )\r
+                       HdrNum++;\r
+       }\r
+\r
+       TotalBytes = HdrNum + WordsNeed * 2;\r
+       EfuseUsed = priv->EfuseUsedBytes;\r
+\r
+       if ((TotalBytes + EfuseUsed) >= (EFUSE_MAX_SIZE - EFUSE_OOB_PROTECT_BYTES))\r
+               bResult = false;\r
+\r
+       return bResult;\r
+}\r
+\r
+extern void\r
+EFUSE_ShadowRead(      struct net_device*      dev,    u8 Type, u16 Offset, u32 *Value)\r
+{\r
+\r
+       if (Type == 1)\r
+               efuse_ShadowRead1Byte(dev, Offset, (u8 *)Value);\r
+       else if (Type == 2)\r
+               efuse_ShadowRead2Byte(dev, Offset, (u16 *)Value);\r
+       else if (Type == 4)\r
+               efuse_ShadowRead4Byte(dev, Offset, (u32 *)Value);\r
+       \r
+}      
+\r
+\r
+extern void\r
+EFUSE_ShadowWrite(     struct net_device*      dev,    u8 Type, u16 Offset,u32 Value)\r
+{\r
+\r
+       if (Offset >= 0x18 && Offset <= 0x1F)\r
+               return;\r
+\r
+       if (Type == 1)\r
+               efuse_ShadowWrite1Byte(dev, Offset, (u8)Value);\r
+       else if (Type == 2)\r
+               efuse_ShadowWrite2Byte(dev, Offset, (u16)Value);\r
+       else if (Type == 4)\r
+               efuse_ShadowWrite4Byte(dev, Offset, (u32)Value);\r
+       \r
+}      
+\r
+\r
+extern bool EFUSE_ShadowUpdate(struct net_device* dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       u16  i, offset, base = 0;\r
+       u8   word_en = 0x0F;\r
+       bool first_pg = false;\r
+\r
+       if (!EFUSE_ShadowUpdateChk(dev)) {\r
+               efuse_ReadAllMap(dev, &priv->EfuseMap[EFUSE_INIT_MAP][0]);\r
+               memcpy(&priv->EfuseMap[EFUSE_MODIFY_MAP][0],\r
+                               (void *)&priv->EfuseMap[EFUSE_INIT_MAP][0], HWSET_MAX_SIZE_92S);\r
+\r
+               printk("<---EFUSE_ShadowUpdate(): Efuse out of capacity!!\n");\r
+               return false;\r
+       }\r
+\r
+       efuse_PowerSwitch(dev, true);\r
+\r
+       for (offset = 0; offset < 16; offset++)\r
+       {\r
+               if(IS_HARDWARE_TYPE_8192SE(dev)){\r
+                       if (offset == 3)\r
+                               continue;\r
+               }\r
+               word_en = 0x0F;         \r
+               base = offset * 8;\r
+\r
+               for (i = 0; i < 8; i++)\r
+               {\r
+                       if (offset == 0 && priv->EfuseMap[EFUSE_INIT_MAP][base+i] == 0xFF)\r
+                       {\r
+                               first_pg = true;                                \r
+                       }\r
+\r
+                       if (first_pg == true && offset == 1 && IS_HARDWARE_TYPE_8192SE(dev))\r
+                       {\r
+                               continue;\r
+                       }\r
+\r
+                       if (first_pg == true)\r
+                       {\r
+                               word_en &= ~(BIT(i/2)); \r
+                               priv->EfuseMap[EFUSE_INIT_MAP][base+i] = \r
+                               priv->EfuseMap[EFUSE_MODIFY_MAP][base+i];\r
+                       }else\r
+                       {\r
+                               if (    priv->EfuseMap[EFUSE_INIT_MAP][base+i] != \r
+                                       priv->EfuseMap[EFUSE_MODIFY_MAP][base+i])\r
+                               {\r
+                                       word_en &= ~(EFUSE_BIT(i/2));\r
+\r
+                                       priv->EfuseMap[EFUSE_INIT_MAP][base+i] = \r
+                                       priv->EfuseMap[EFUSE_MODIFY_MAP][base+i];\r
+                               }\r
+                       }\r
+               }\r
+               \r
+               if (word_en != 0x0F)\r
+               {\r
+                       u8      tmpdata[8];\r
+\r
+                       memcpy(tmpdata, &(priv->EfuseMap[EFUSE_MODIFY_MAP][base]), 8);\r
+                       efuse_PgPacketWrite(dev,(u8)offset,word_en,tmpdata);\r
+               }\r
+               \r
+       }\r
+       if (first_pg == true && IS_HARDWARE_TYPE_8192SE(dev))\r
+       {\r
+               u8      tmpdata[8];\r
+\r
+               memcpy(tmpdata, (&priv->EfuseMap[EFUSE_MODIFY_MAP][8]), 8);\r
+               efuse_PgPacketWrite(dev, 1, 0x0, tmpdata);              \r
+#if 0\r
+               u1Byte  tmpdata[8] = {0xFF, 0xFF, 0xEC, 0x10, 0xFF, 0xFF, 0xFF, 0xFF};\r
+               \r
+               efuse_PgPacketWrite(pAdapter, 1, 0xD, tmpdata);\r
+#endif         \r
+       }\r
+\r
+\r
+       efuse_PowerSwitch(dev, false);\r
+       efuse_ReadAllMap(dev, &priv->EfuseMap[EFUSE_INIT_MAP][0]);\r
+       memcpy(&priv->EfuseMap[EFUSE_MODIFY_MAP][0],\r
+               (void *)&priv->EfuseMap[EFUSE_INIT_MAP][0], HWSET_MAX_SIZE_92S);\r
+               \r
+       return true;    \r
+}      
+\r
+\r
+extern void EFUSE_ShadowMapUpdate(struct net_device* dev)\r
+{      \r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       \r
+       if (priv->AutoloadFailFlag == true){\r
+               memset(&(priv->EfuseMap[EFUSE_INIT_MAP][0]), 0xff, 128);\r
+       }else{  \r
+               efuse_ReadAllMap(dev, &priv->EfuseMap[EFUSE_INIT_MAP][0]);\r
+       }\r
+       memcpy(&priv->EfuseMap[EFUSE_MODIFY_MAP][0], \r
+               &priv->EfuseMap[EFUSE_INIT_MAP][0], HWSET_MAX_SIZE_92S);\r
+       \r
+}      
+\r
+\r
+extern void \r
+EFUSE_ForceWriteVendorId( struct net_device* dev)\r
+{\r
+       u8 tmpdata[8] = {0xFF, 0xFF, 0xEC, 0x10, 0xFF, 0xFF, 0xFF, 0xFF};\r
+\r
+       efuse_PowerSwitch(dev, true);\r
+               \r
+       efuse_PgPacketWrite(dev, 1, 0xD, tmpdata);\r
+\r
+       efuse_PowerSwitch(dev, false);\r
+       \r
+}      
+\r
+extern void \r
+EFUSE_RePgSection1(struct net_device* dev)\r
+{\r
+#ifdef EFUSE_REPG_WORKAROUND\r
+\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       \r
+       if (priv->efuse_RePGSec1Flag == true)\r
+       {\r
+               efuse_PowerSwitch(dev, true);           \r
+               RT_TRACE(COMP_INIT, "EFUSE REPG: %p, %u\n", priv->efuse_RePGData, 8);\r
+                               \r
+               efuse_PgPacketWrite(dev, 1, 0x0d, priv->efuse_RePGData);        \r
+               efuse_PowerSwitch(dev, false);\r
+               priv->efuse_RePGSec1Flag = false;\r
+       }\r
+#endif \r
+}      
+\r
+\r
+static void\r
+efuse_ShadowRead1Byte(struct net_device*       dev,    u16 Offset,     u8 *Value)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       \r
+       *Value = priv->EfuseMap[EFUSE_MODIFY_MAP][Offset];\r
+       \r
+}      
+\r
+static void\r
+efuse_ShadowRead2Byte(struct net_device*       dev,    u16 Offset,     u16 *Value)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       \r
+       *Value = priv->EfuseMap[EFUSE_MODIFY_MAP][Offset];\r
+       *Value |= priv->EfuseMap[EFUSE_MODIFY_MAP][Offset+1]<<8;\r
+       \r
+}      
+\r
+static void\r
+efuse_ShadowRead4Byte(struct net_device*       dev,    u16 Offset,     u32 *Value)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       \r
+       *Value = priv->EfuseMap[EFUSE_MODIFY_MAP][Offset];\r
+       *Value |= priv->EfuseMap[EFUSE_MODIFY_MAP][Offset+1]<<8;\r
+       *Value |= priv->EfuseMap[EFUSE_MODIFY_MAP][Offset+2]<<16;\r
+       *Value |= priv->EfuseMap[EFUSE_MODIFY_MAP][Offset+3]<<24;\r
+       \r
+}      
+\r
+\r
+\r
+static void\r
+efuse_ShadowWrite1Byte(struct net_device*      dev,    u16 Offset,     u8 Value)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       \r
+       priv->EfuseMap[EFUSE_MODIFY_MAP][Offset] = Value;\r
+       \r
+}      
+\r
+static void\r
+efuse_ShadowWrite2Byte(struct net_device*      dev,    u16 Offset,     u16 Value)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       \r
+       priv->EfuseMap[EFUSE_MODIFY_MAP][Offset] = Value&0x00FF;\r
+       priv->EfuseMap[EFUSE_MODIFY_MAP][Offset+1] = Value>>8;\r
+       \r
+}      
+\r
+static void\r
+efuse_ShadowWrite4Byte(struct net_device*      dev,    u16 Offset,     u32 Value)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       \r
+       priv->EfuseMap[EFUSE_MODIFY_MAP][Offset] = (u8)(Value&0x000000FF);\r
+       priv->EfuseMap[EFUSE_MODIFY_MAP][Offset+1] = (u8)((Value>>8)&0x0000FF);\r
+       priv->EfuseMap[EFUSE_MODIFY_MAP][Offset+2] = (u8)((Value>>16)&0x00FF);\r
+       priv->EfuseMap[EFUSE_MODIFY_MAP][Offset+3] = (u8)((Value>>24)&0xFF);\r
+       \r
+}      
+\r
+\r
+static u8\r
+efuse_OneByteRead(struct net_device* dev, u16 addr,u8 *data)\r
+{\r
+       u8 tmpidx = 0;\r
+       u8 bResult;\r
+       \r
+       write_nic_byte(dev, EFUSE_CTRL+1, (u8)(addr&0xff));             \r
+       write_nic_byte(dev, EFUSE_CTRL+2, ((u8)((addr>>8) &0x03) ) | \r
+       (read_nic_byte(dev, EFUSE_CTRL+2)&0xFC ));      \r
+\r
+       write_nic_byte(dev, EFUSE_CTRL+3,  0x72);
+\r
+       while(!(0x80 &read_nic_byte(dev, EFUSE_CTRL+3))&&(tmpidx<100))\r
+       {\r
+               tmpidx++;\r
+       }\r
+       if(tmpidx<100)\r
+       {                       \r
+               *data=read_nic_byte(dev, EFUSE_CTRL);           \r
+               bResult = true;\r
+       }\r
+       else\r
+       {\r
+               *data = 0xff;   \r
+               bResult = false;\r
+       }\r
+       return bResult;\r
+}      
+               \r
+static u8\r
+efuse_OneByteWrite(struct net_device* dev,  u16 addr, u8 data)\r
+{\r
+       u8 tmpidx = 0;\r
+       u8 bResult;\r
+       \r
+\r
+\r
+       write_nic_byte(dev, EFUSE_CTRL+1, (u8)(addr&0xff));             \r
+       write_nic_byte(dev, EFUSE_CTRL+2, \r
+       read_nic_byte(dev, EFUSE_CTRL+2)|(u8)((addr>>8)&0x03) );\r
+\r
+       write_nic_byte(dev, EFUSE_CTRL, data);
+       write_nic_byte(dev, EFUSE_CTRL+3, 0xF2);
+               \r
+       while((0x80 &  read_nic_byte(dev, EFUSE_CTRL+3)) && (tmpidx<100) ){\r
+               tmpidx++;\r
+       }\r
+       \r
+       if(tmpidx<100)\r
+       {                                       \r
+               bResult = true;\r
+       }\r
+       else\r
+       {                       \r
+               bResult = false;\r
+       }               \r
+       \r
+       return bResult; \r
+}      
+\r
+\r
+static void \r
+efuse_ReadAllMap(struct net_device*    dev, u8 *Efuse)\r
+{      \r
+               \r
+       efuse_PowerSwitch(dev, true);\r
+       ReadEFuse(dev, 0, 128, Efuse);\r
+       efuse_PowerSwitch(dev, false);\r
+#if 0\r
+       RT_TRACE(COMP_INIT, "efuse_ResetLoader\n");\r
+       efuse_ResetLoader(dev);\r
+\r
+       write_nic_byte(dev, EFUSE_CLK, 0x03);\r
+       \r
+       ReadEFuse(dev, 0, 128, Efuse);\r
+\r
+       write_nic_byte(dev, EFUSE_CLK, 0x02);\r
+#if 0  
+       for(offset = 0;offset<16;offset++)      
+       {               \r
+               PlatformFillMemory((PVOID)pg_data, 8, 0xff);\r
+               efuse_PgPacketRead(pAdapter,offset,pg_data);\r
+\r
+               PlatformMoveMemory((PVOID)&Efuse[offset*8], (PVOID)pg_data, 8);\r
+       }\r
+#endif\r
+\r
+       if (Efuse[0] != 0x29 || Efuse[1] != 0x81)\r
+       {\r
+               if (index ++ < 5)\r
+               {\r
+                       RT_TRACE(COMP_INIT, "EFUSE R FAIL %d\n", index);\r
+                       efuse_ReadAllMap(dev, Efuse);\r
+               }\r
+       }\r
+       else\r
+       {\r
+               index = 0;\r
+       }\r
+\r
+#endif \r
+}      
+\r
+\r
+#ifdef TO_DO_LIST\r
+static void\r
+efuse_WriteAllMap(struct net_device* dev,u8 *eeprom, u32 eeprom_size)\r
+{      \r
+       unsigned char word_en = 0x00;\r
+\r
+       unsigned char tmpdata[8];\r
+       unsigned char offset;\r
+\r
+       efuse_PowerSwitch(dev, true);\r
+\r
+       for(offset=0 ; offset< eeprom_size/PGPKT_DATA_SIZE ; offset++)\r
+       {\r
+               if (IS_HARDWARE_TYPE_8192SE(dev))\r
+               {\r
+                       if (offset == 3/* || offset > 9*/)      \r
+                               continue;
+                       else\r
+                               word_en = 0x00;\r
+               }\r
+               \r
+               memcpy(tmpdata, (eeprom+(offset*PGPKT_DATA_SIZE)), 8);\r
+\r
+       \r
+               efuse_PgPacketWrite(dev,offset,word_en,tmpdata);\r
+\r
+               \r
+       }\r
+\r
+       efuse_PowerSwitch(dev, false);\r
+       \r
+}      
+#endif\r
+static u8\r
+efuse_PgPacketRead(    struct net_device*      dev,    u8 offset, u8   *data)\r
+{      \r
+       u8 ReadState = PG_STATE_HEADER; \r
+       \r
+       bool bContinual = true;\r
+       bool  bDataEmpty = true ;       \r
+\r
+       u8 efuse_data,word_cnts=0;\r
+       u16 efuse_addr = 0;\r
+       u8 hoffset=0,hworden=0; \r
+       u8 tmpidx=0;\r
+       u8 tmpdata[8];\r
+       \r
+       if(data==NULL)  return false;\r
+       if(offset>15)           return false;   \r
+       \r
+       memset(data, 0xff, sizeof(u8)*PGPKT_DATA_SIZE);\r
+       memset(tmpdata, 0xff, sizeof(u8)*PGPKT_DATA_SIZE);\r
+       \r
+       \r
+       while(bContinual && (efuse_addr  < EFUSE_MAX_SIZE) )\r
+       {                       \r
+               if(ReadState & PG_STATE_HEADER)\r
+               {\r
+                       if(efuse_OneByteRead(dev, efuse_addr ,&efuse_data)&&(efuse_data!=0xFF)){                                \r
+                               hoffset = (efuse_data>>4) & 0x0F;\r
+                               hworden =  efuse_data & 0x0F;                                                                   \r
+                               word_cnts = efuse_CalculateWordCnts(hworden);\r
+                               bDataEmpty = true ;\r
+\r
+                               if(hoffset==offset){\r
+                                       for(tmpidx = 0;tmpidx< word_cnts*2 ;tmpidx++){\r
+                                               if(efuse_OneByteRead(dev, efuse_addr+1+tmpidx ,&efuse_data) ){\r
+                                                       tmpdata[tmpidx] = efuse_data;\r
+                                                       if(efuse_data!=0xff){                                           \r
+                                                               bDataEmpty = false;\r
+                                                       }\r
+                                               }                                       \r
+                                       }\r
+                                       if(bDataEmpty==false){\r
+                                               ReadState = PG_STATE_DATA;                                                      \r
+                                       }else{
+                                               efuse_addr = efuse_addr + (word_cnts*2)+1;\r
+                                               ReadState = PG_STATE_HEADER; \r
+                                       }\r
+                               }\r
+                               else{
+                                       efuse_addr = efuse_addr + (word_cnts*2)+1;\r
+                                       ReadState = PG_STATE_HEADER; \r
+                               }\r
+                               \r
+                       }\r
+                       else{\r
+                               bContinual = false ;\r
+                       }\r
+               }               \r
+               else if(ReadState & PG_STATE_DATA)\r
+               {\r
+                       efuse_WordEnableDataRead(hworden,tmpdata,data);\r
+                       efuse_addr = efuse_addr + (word_cnts*2)+1;\r
+                       ReadState = PG_STATE_HEADER; \r
+               }\r
+               \r
+       }                       \r
+       \r
+       \r
+       if(     (data[0]==0xff) &&(data[1]==0xff) && (data[2]==0xff)  && (data[3]==0xff) &&\r
+               (data[4]==0xff) &&(data[5]==0xff) && (data[6]==0xff)  && (data[7]==0xff))\r
+               return false;\r
+       else\r
+               return true;\r
+\r
+}      
+\r
+\r
+static u8 efuse_PgPacketWrite(struct net_device* dev, u8 offset, u8 word_en,u8 *data)\r
+{\r
+       u8 WriteState = PG_STATE_HEADER;                \r
+       bool bContinual = true,bDataEmpty=true, bResult = true;\r
+       u16 efuse_addr = 0;\r
+       u8 efuse_data;\r
+\r
+       u8 pg_header = 0;\r
+\r
+       u8 tmp_word_cnts=0,target_word_cnts=0;\r
+       u8 tmp_header,match_word_en,tmp_word_en;\r
+\r
+       PGPKT_STRUCT target_pkt;        \r
+       PGPKT_STRUCT tmp_pkt;\r
+\r
+       u8 originaldata[sizeof(u8)*8];\r
+       u8 tmpindex = 0,badworden = 0x0F;\r
+\r
+       static u32 repeat_times = 0;\r
+\r
+       if (efuse_GetCurrentSize(dev) >= EFUSE_MAX_SIZE - EFUSE_OOB_PROTECT_BYTES) {\r
+               printk("efuse_PgPacketWrite error \n");\r
+               return false;\r
+       }\r
+\r
+       target_pkt.offset = offset;\r
+       target_pkt.word_en= word_en;\r
+\r
+       memset(target_pkt.data,0xFF,sizeof(u8)*8);\r
+       \r
+       efuse_WordEnableDataRead(word_en,data,target_pkt.data);\r
+       target_word_cnts = efuse_CalculateWordCnts(target_pkt.word_en);\r
+\r
+       printk("EFUSE Power ON\n");\r
+\r
+       while (bContinual && (efuse_addr  < (EFUSE_MAX_SIZE - EFUSE_OOB_PROTECT_BYTES)))\r
+       {\r
+               if(WriteState==PG_STATE_HEADER)\r
+               {       \r
+                       bDataEmpty=true;\r
+                       badworden = 0x0F;               \r
+                       printk("EFUSE PG_STATE_HEADER\n");\r
+                       if (    efuse_OneByteRead(dev, efuse_addr ,&efuse_data) &&\r
+                               (efuse_data!=0xFF))\r
+                       {       \r
+                               tmp_header  =  efuse_data;\r
+                               \r
+                               tmp_pkt.offset  = (tmp_header>>4) & 0x0F;\r
+                               tmp_pkt.word_en         = tmp_header & 0x0F;                                    \r
+                               tmp_word_cnts =  efuse_CalculateWordCnts(tmp_pkt.word_en);\r
+\r
+                               if(tmp_pkt.offset  != target_pkt.offset)\r
+                               {\r
+                                       efuse_addr = efuse_addr + (tmp_word_cnts*2) +1; 
+                                       #if (EFUSE_ERROE_HANDLE == 1)\r
+                                       WriteState = PG_STATE_HEADER;\r
+                                       #endif\r
+                               }\r
+                               else\r
+                               {       \r
+                                       for(tmpindex=0 ; tmpindex<(tmp_word_cnts*2) ; tmpindex++)\r
+                                       {\r
+                                               if(efuse_OneByteRead(dev, (efuse_addr+1+tmpindex) ,&efuse_data)&&(efuse_data != 0xFF)){\r
+                                                       bDataEmpty = false;     \r
+                                               }\r
+                                       }       \r
+                                       if(bDataEmpty == false)\r
+                                       {                                               \r
+                                               efuse_addr = efuse_addr + (tmp_word_cnts*2) +1; 
+                                               #if (EFUSE_ERROE_HANDLE == 1)\r
+                                               WriteState=PG_STATE_HEADER;\r
+                                               #endif\r
+                                       }\r
+                                       else\r
+                                       {
+                                               match_word_en = 0x0F;\r
+                                               if(   !( (target_pkt.word_en&BIT0)|(tmp_pkt.word_en&BIT0)  ))\r
+                                               {\r
+                                                        match_word_en &= (~BIT0);\r
+                                               }       \r
+                                               if(   !( (target_pkt.word_en&BIT1)|(tmp_pkt.word_en&BIT1)  ))\r
+                                               {\r
+                                                        match_word_en &= (~BIT1);\r
+                                               }\r
+                                               if(   !( (target_pkt.word_en&BIT2)|(tmp_pkt.word_en&BIT2)  ))\r
+                                               {\r
+                                                        match_word_en &= (~BIT2);\r
+                                               }\r
+                                               if(   !( (target_pkt.word_en&BIT3)|(tmp_pkt.word_en&BIT3)  ))\r
+                                               {\r
+                                                        match_word_en &= (~BIT3);\r
+                                               }                                       \r
+                                                                                               \r
+                                               if((match_word_en&0x0F)!=0x0F)\r
+                                               {                                                       \r
+                                                       badworden = efuse_WordEnableDataWrite(dev,efuse_addr+1, tmp_pkt.word_en ,target_pkt.data);\r
+                                                       \r
+                                                       if(0x0F != (badworden&0x0F))\r
+                                                       {                                                                                                               \r
+                                                               u8 reorg_offset = offset;\r
+                                                               u8 reorg_worden=badworden;                                                              \r
+                                                               efuse_PgPacketWrite(dev,reorg_offset,reorg_worden,originaldata);        \r
+                                                       }       \r
+\r
+                                                       tmp_word_en = 0x0F;     \r
+                                                       if(  (target_pkt.word_en&BIT0)^(match_word_en&BIT0)  )\r
+                                                       {\r
+                                                               tmp_word_en &= (~BIT0);\r
+                                                       }\r
+                                                       if(   (target_pkt.word_en&BIT1)^(match_word_en&BIT1) )\r
+                                                       {\r
+                                                               tmp_word_en &=  (~BIT1);\r
+                                                       }\r
+                                                       if(   (target_pkt.word_en&BIT2)^(match_word_en&BIT2) )\r
+                                                       {\r
+                                                               tmp_word_en &= (~BIT2);\r
+                                                       }                                               \r
+                                                       if(   (target_pkt.word_en&BIT3)^(match_word_en&BIT3) )\r
+                                                       {\r
+                                                               tmp_word_en &=(~BIT3);\r
+                                                       }                                                       \r
+                                               \r
+                                                       if((tmp_word_en&0x0F)!=0x0F){\r
+                                                               efuse_addr = efuse_GetCurrentSize(dev);\r
+                                                               target_pkt.offset = offset;\r
+                                                               target_pkt.word_en= tmp_word_en;                                        \r
+                                                       }else{                                                          \r
+                                                               bContinual = false;\r
+                                                       }\r
+                                                       #if (EFUSE_ERROE_HANDLE == 1)\r
+                                                       WriteState=PG_STATE_HEADER;\r
+                                                       repeat_times++;\r
+                                                       if(repeat_times>EFUSE_REPEAT_THRESHOLD_){\r
+                                                               bContinual = false;\r
+                                                               bResult = false;\r
+                                                       }\r
+                                                       #endif\r
+                                               }\r
+                                               else{
+                                                       efuse_addr = efuse_addr + (2*tmp_word_cnts) +1;
+                                                       target_pkt.offset = offset;\r
+                                                       target_pkt.word_en= target_pkt.word_en;                                 \r
+                                                       #if (EFUSE_ERROE_HANDLE == 1)\r
+                                                       WriteState=PG_STATE_HEADER;\r
+                                                       #endif\r
+                                               }               \r
+                                       }                               \r
+                               }                               \r
+                               printk("EFUSE PG_STATE_HEADER-1\n");\r
+                       }\r
+                       else            
+                       {\r
+                               pg_header = ((target_pkt.offset << 4)&0xf0) |target_pkt.word_en;\r
+\r
+                               efuse_OneByteWrite(dev,efuse_addr, pg_header);\r
+                               efuse_OneByteRead(dev,efuse_addr, &tmp_header);         \r
+               \r
+                               if(tmp_header == pg_header)\r
+                               { 
+                                       WriteState = PG_STATE_DATA;                                             \r
+                               }                               \r
+                               #if (EFUSE_ERROE_HANDLE == 1)\r
+                               else if(tmp_header == 0xFF){
+                                       WriteState = PG_STATE_HEADER;                                   \r
+                                       repeat_times++;\r
+                                       if(repeat_times>EFUSE_REPEAT_THRESHOLD_){\r
+                                               bContinual = false;\r
+                                               bResult = false;\r
+                                       }\r
+                               }\r
+                               #endif\r
+                               else\r
+                               {
+                                       tmp_pkt.offset = (tmp_header>>4) & 0x0F;\r
+                                       tmp_pkt.word_en=  tmp_header & 0x0F;                                    \r
+                                       tmp_word_cnts =  efuse_CalculateWordCnts(tmp_pkt.word_en);\r
+                                                                                                                                                                                                                       \r
+                                       memset(originaldata,0xff,sizeof(u8)*8);\r
+                                       \r
+                                       if(efuse_PgPacketRead( dev, tmp_pkt.offset,originaldata))\r
+                                       {       
+                                               badworden = efuse_WordEnableDataWrite(dev,efuse_addr+1,tmp_pkt.word_en,originaldata);   \r
+                                               if(0x0F != (badworden&0x0F))\r
+                                               {                                                                                                               \r
+                                                       u8 reorg_offset = tmp_pkt.offset;\r
+                                                       u8 reorg_worden=badworden;                                                              \r
+                                                       efuse_PgPacketWrite(dev,reorg_offset,reorg_worden,originaldata);        \r
+                                                       efuse_addr = efuse_GetCurrentSize(dev);  \r
+                                               }\r
+                                               else{\r
+                                                       efuse_addr = efuse_addr + (tmp_word_cnts*2) +1; 
+                                               }\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               efuse_addr = efuse_addr + (tmp_word_cnts*2) +1; 
+                                       }\r
+\r
+                                       #if (EFUSE_ERROE_HANDLE == 1)\r
+                                       WriteState=PG_STATE_HEADER;     \r
+                                       repeat_times++;\r
+                                       if(repeat_times>EFUSE_REPEAT_THRESHOLD_){\r
+                                               bContinual = false;\r
+                                               bResult = false;\r
+                                       }\r
+                                       #endif\r
+                                       \r
+                                       printk("EFUSE PG_STATE_HEADER-2\n");\r
+                               }\r
+\r
+                       }\r
+\r
+               }\r
+               else if(WriteState==PG_STATE_DATA) \r
+               {       
+                       printk("EFUSE PG_STATE_DATA\n");\r
+                       badworden = 0x0f;\r
+                       badworden = efuse_WordEnableDataWrite(dev,efuse_addr+1,target_pkt.word_en,target_pkt.data);     \r
+                       if((badworden&0x0F)==0x0F)\r
+                       { 
+                               bContinual = false;\r
+                       }\r
+                       else\r
+                       {
+                               efuse_addr = efuse_addr + (2*target_word_cnts) +1;
+                                                                               \r
+                               target_pkt.offset = offset;\r
+                               target_pkt.word_en= badworden;          \r
+                               target_word_cnts =  efuse_CalculateWordCnts(target_pkt.word_en); \r
+                               #if (EFUSE_ERROE_HANDLE == 1)\r
+                               WriteState=PG_STATE_HEADER;     \r
+                               repeat_times++;\r
+                               if(repeat_times>EFUSE_REPEAT_THRESHOLD_){\r
+                                       bContinual = false;\r
+                                       bResult = false;\r
+                               }\r
+                               #endif\r
+                               printk("EFUSE PG_STATE_HEADER-3\n");\r
+                       }\r
+               }\r
+       }\r
+\r
+       \r
+       return true;\r
+}      
+\r
+\r
+static void\r
+efuse_WordEnableDataRead(      u8 word_en,u8 *sourdata,u8 *targetdata)\r
+{      \r
+\r
+\r
+\r
+       if (!(word_en&BIT0))\r
+       {\r
+               targetdata[0] = sourdata[0];
+               targetdata[1] = sourdata[1];
+       }\r
+       if (!(word_en&BIT1))\r
+       {\r
+               targetdata[2] = sourdata[2];
+               targetdata[3] = sourdata[3];
+       }\r
+       if (!(word_en&BIT2))\r
+       {\r
+               targetdata[4] = sourdata[4];
+               targetdata[5] = sourdata[5];
+       }\r
+       if (!(word_en&BIT3))\r
+       {\r
+               targetdata[6] = sourdata[6];
+               targetdata[7] = sourdata[7];
+       }\r
+}      
+\r
+\r
+static u8\r
+efuse_WordEnableDataWrite(     struct net_device*      dev,    u16 efuse_addr, u8 word_en, u8 *data)\r
+{              \r
+       u16 tmpaddr = 0;\r
+       u16 start_addr = efuse_addr;\r
+       u8 badworden = 0x0F;\r
+       u8 tmpdata[8]; \r
+       \r
+       memset(tmpdata,0xff,PGPKT_DATA_SIZE);\r
+       \r
+\r
+\r
+       if(!(word_en&BIT0))\r
+       {\r
+               tmpaddr = start_addr;\r
+               efuse_OneByteWrite(dev,start_addr++, data[0]);\r
+               efuse_OneByteWrite(dev,start_addr++, data[1]);\r
+\r
+               efuse_OneByteRead(dev,tmpaddr, &tmpdata[0]);\r
+               efuse_OneByteRead(dev,tmpaddr+1, &tmpdata[1]);\r
+               if((data[0]!=tmpdata[0])||(data[1]!=tmpdata[1])){\r
+                       badworden &= (~BIT0);\r
+               }\r
+       }\r
+       if(!(word_en&BIT1))\r
+       {\r
+               tmpaddr = start_addr;\r
+               efuse_OneByteWrite(dev,start_addr++, data[2]);\r
+               efuse_OneByteWrite(dev,start_addr++, data[3]);\r
+                               \r
+               efuse_OneByteRead(dev,tmpaddr    , &tmpdata[2]);\r
+               efuse_OneByteRead(dev,tmpaddr+1, &tmpdata[3]);\r
+               if((data[2]!=tmpdata[2])||(data[3]!=tmpdata[3])){\r
+                       badworden &=( ~BIT1);\r
+               }\r
+       }\r
+       if(!(word_en&BIT2))\r
+       {\r
+               tmpaddr = start_addr;\r
+               efuse_OneByteWrite(dev,start_addr++, data[4]);\r
+               efuse_OneByteWrite(dev,start_addr++, data[5]);\r
+\r
+               efuse_OneByteRead(dev,tmpaddr, &tmpdata[4]);                                                    \r
+               efuse_OneByteRead(dev,tmpaddr+1, &tmpdata[5]);\r
+               if((data[4]!=tmpdata[4])||(data[5]!=tmpdata[5])){\r
+                       badworden &=( ~BIT2);\r
+               }\r
+       }\r
+       if(!(word_en&BIT3))\r
+       {\r
+               tmpaddr = start_addr;\r
+               efuse_OneByteWrite(dev,start_addr++, data[6]);\r
+               efuse_OneByteWrite(dev,start_addr++, data[7]);\r
+\r
+               efuse_OneByteRead(dev,tmpaddr, &tmpdata[6]);\r
+               efuse_OneByteRead(dev,tmpaddr+1, &tmpdata[7]);\r
+               if((data[6]!=tmpdata[6])||(data[7]!=tmpdata[7])){\r
+                       badworden &=( ~BIT3);\r
+               }\r
+       }\r
+       return badworden;\r
+}      
+\r
+\r
+static void\r
+efuse_PowerSwitch(struct net_device* dev, u8 PwrState)\r
+{\r
+       u8      tempval;\r
+       if (PwrState == true)\r
+       {\r
+               tempval = read_nic_byte(dev, EFUSE_TEST+3);\r
+               write_nic_byte(dev, EFUSE_TEST+3, (tempval | 0x80));\r
+\r
+               write_nic_byte(dev, EFUSE_CLK, 0x03);\r
+       }\r
+       else\r
+       {\r
+               tempval = read_nic_byte(dev, EFUSE_TEST+3);\r
+               write_nic_byte(dev, EFUSE_TEST+3, (tempval & 0x7F));\r
+\r
+               write_nic_byte(dev, EFUSE_CLK, 0x02);\r
+       }       \r
+       \r
+}      /* efuse_PowerSwitch */\r
+\r
+\r
+static u16\r
+efuse_GetCurrentSize(struct net_device*        dev)\r
+{\r
+       bool bContinual = true;\r
+\r
+       u16 efuse_addr = 0;\r
+       u8 hoffset=0,hworden=0; \r
+       u8 efuse_data,word_cnts=0;\r
+               \r
+       \r
+       while ( bContinual && \r
+                       efuse_OneByteRead(dev, efuse_addr ,&efuse_data) && \r
+                       (efuse_addr  < EFUSE_MAX_SIZE) )\r
+       {                       \r
+               if(efuse_data!=0xFF)\r
+               {                                       \r
+                       hoffset = (efuse_data>>4) & 0x0F;\r
+                       hworden =  efuse_data & 0x0F;                                                                   \r
+                       word_cnts = efuse_CalculateWordCnts(hworden);\r
+                       efuse_addr = efuse_addr + (word_cnts*2)+1;                                              \r
+               }\r
+               else\r
+               {\r
+                       bContinual = false ;                    \r
+               }\r
+       }\r
+\r
+       \r
+       return efuse_addr;\r
+       \r
+}      
+\r
+\r
+static u8\r
+efuse_CalculateWordCnts(u8     word_en)\r
+{\r
+       u8 word_cnts = 0;\r
+       if(!(word_en & BIT0))   word_cnts++; 
+       if(!(word_en & BIT1))   word_cnts++;\r
+       if(!(word_en & BIT2))   word_cnts++;\r
+       if(!(word_en & BIT3))   word_cnts++;\r
+       return word_cnts;\r
+}      
+\r
+\r
+#if 0\r
+static void efuse_ResetLoader(struct net_device* dev)\r
+{\r
+       u16     tmpU2b;\r
+\r
+       tmpU2b = read_nic_word(dev, SYS_FUNC_EN);\r
+       write_nic_word(dev, SYS_FUNC_EN, (tmpU2b&~(BIT12)));\r
+       mdelay(10);\r
+       write_nic_word(dev, SYS_FUNC_EN, (tmpU2b|BIT12));\r
+       mdelay(10);\r
+       \r
+}      
+#endif\r
+\r
+ #ifdef TO_DO_LIST\r
+extern bool    
+EFUSE_ProgramMap(struct net_device* dev, char* pFileName,u8    TableType)              \r
+{\r
+       struct r8192_priv       *priv = rtllib_priv(dev);\r
+       s4Byte                  nLinesRead, ithLine;\r
+       RT_STATUS               rtStatus = RT_STATUS_SUCCESS;\r
+       char*                   szLine;\r
+       u32                     u4bRegValue, u4RegMask;\r
+       u32                     u4bMove;\r
+       u16                     index = 0;\r
+       u16                     i;\r
+       u8                      eeprom[HWSET_MAX_SIZE_92S];     \r
+       \r
+       rtStatus = PlatformReadFile(\r
+                                       dev, \r
+                                       pFileName,\r
+                                       (u8*)(priv->BufOfLines),\r
+                                       MAX_LINES_HWCONFIG_TXT,\r
+                                       MAX_BYTES_LINE_HWCONFIG_TXT,\r
+                                       &nLinesRead\r
+                                       );\r
+\r
+       if(rtStatus == RT_STATUS_SUCCESS)\r
+       {       \r
+               memcp(pHalData->BufOfLines3, pHalData->BufOfLines,\r
+                       nLinesRead*MAX_BYTES_LINE_HWCONFIG_TXT);\r
+               pHalData->nLinesRead3 = nLinesRead;\r
+       }\r
+\r
+       if(rtStatus == RT_STATUS_SUCCESS)\r
+       {               \r
+               printk("szEepromFile(): read %s ok\n", pFileName);\r
+               for(ithLine = 0; ithLine < nLinesRead; ithLine++)\r
+               {\r
+                       szLine = pHalData->BufOfLines[ithLine];\r
+                       printk("Line-%d String =%s\n", ithLine, szLine);\r
+                       \r
+                       if(!IsCommentString(szLine))\r
+                       {\r
+                               for (i = 0; i < 8; i++)\r
+                               {\r
+                                       u32     j;\r
+\r
+                                       efuse_ParsingMap(szLine, &u4bRegValue, &u4bMove);\r
+\r
+                                       szLine += u4bMove;\r
+                                       eeprom[index++] = (u8)(u4bRegValue&0xff);\r
+                                       eeprom[index++] = (u8)((u4bRegValue>>8)&0xff);\r
+                                       \r
+                                       printk("Addr-%d = %x\n", (ithLine*8+i), u4bRegValue);\r
+                               }\r
+                       }\r
+                       \r
+               }\r
+       \r
+       }\r
+       else\r
+       {\r
+               printk("szEepromFile(): Fail read%s\n", pFileName);\r
+               return  RT_STATUS_FAILURE;\r
+       }\r
+\r
+\r
+\r
+       if (TableType == 1)\r
+       {\r
+               efuse_WriteAllMap(dev, eeprom, HWSET_MAX_SIZE_92S);\r
+       }\r
+       else\r
+       {\r
+               for (i = 0; i < HWSET_MAX_SIZE_92S; i++)\r
+                       EFUSE_ShadowWrite(dev, 1, i, (u32)eeprom[i]);\r
+       }\r
+       \r
+       return  rtStatus;\r
+}      /* EFUSE_ProgramMap */\r
+\r
+#endif\r
+\r
+bool IsHexDigit(       char chTmp)\r
+{\r
+       if( (chTmp >= '0' && chTmp <= '9') ||  \r
+               (chTmp >= 'a' && chTmp <= 'f') ||\r
+               (chTmp >= 'A' && chTmp <= 'F') )\r
+       {\r
+               return true;\r
+       }\r
+       else\r
+       {\r
+               return false;\r
+       }\r
+}\r
+\r
+u32 MapCharToHexDigit(char chTmp)\r
+{\r
+       if(chTmp >= '0' && chTmp <= '9')\r
+               return (chTmp - '0');\r
+       else if(chTmp >= 'a' && chTmp <= 'f')\r
+               return (10 + (chTmp - 'a'));\r
+       else if(chTmp >= 'A' && chTmp <= 'F') \r
+               return (10 + (chTmp - 'A'));\r
+       else\r
+               return 0;       \r
+}\r
+\r
+#ifdef TO_DO_LIST\r
+static bool    \r
+efuse_ParsingMap(char* szStr,u32* pu4bVal,u32* pu4bMove)\r
+{\r
+       char*           szScan = szStr;\r
+\r
+       if(szStr == NULL || pu4bVal == NULL || pu4bMove == NULL)\r
+       {\r
+               return false;\r
+       }\r
+\r
+       *pu4bMove = 0;\r
+       *pu4bVal = 0;\r
+\r
+       while(  *szScan != '\0' && \r
+                       (*szScan == ' ' || *szScan == '\t') )\r
+       {\r
+               szScan++;\r
+               (*pu4bMove)++;\r
+       }\r
+\r
+       if(!IsHexDigit(*szScan))\r
+       {\r
+               return false;\r
+       }\r
+\r
+       do\r
+       {\r
+               (*pu4bVal) <<= 4;\r
+               *pu4bVal += MapCharToHexDigit(*szScan);\r
+\r
+               szScan++;\r
+               (*pu4bMove)++;\r
+       } while(IsHexDigit(*szScan));\r
+\r
+       return true;\r
+       \r
+}      /* efuse_ParsingMap */\r
+#endif\r
+\r
+int efuse_one_byte_rw(struct net_device* dev, u8 bRead, u16 addr, u8 *data)\r
+{\r
+       u32 bResult;\r
+       u8 tmpidx = 0;\r
+       u8 tmpv8=0;\r
+       \r
+\r
+       write_nic_byte(dev, EFUSE_CTRL+1, (u8)(addr&0xff));             
+       tmpv8 = ((u8)((addr>>8) &0x03) ) | (read_nic_byte(dev, EFUSE_CTRL+2)&0xFC );    \r
+       write_nic_byte(dev, EFUSE_CTRL+2, tmpv8);\r
+\r
+       if(true==bRead){\r
+               \r
+               write_nic_byte(dev, EFUSE_CTRL+3,  0x72);
+\r
+               while(!(0x80 & read_nic_byte(dev, EFUSE_CTRL+3)) && (tmpidx<100) ){\r
+                       tmpidx++;\r
+               }\r
+               if(tmpidx<100){                 \r
+                       *data=read_nic_byte(dev, EFUSE_CTRL);\r
+                       bResult = true;\r
+               }\r
+               else\r
+               {\r
+                       *data = 0;\r
+                       bResult = false;\r
+               }\r
+               \r
+       }\r
+       else{\r
+               write_nic_byte(dev, EFUSE_CTRL, *data);
+               \r
+               write_nic_byte(dev, EFUSE_CTRL+3, 0xF2);
+               \r
+               while((0x80 & read_nic_byte(dev, EFUSE_CTRL+3)) && (tmpidx<100) ){\r
+                       tmpidx++;\r
+               }\r
+               if(tmpidx<100)\r
+               {                       \r
+                       *data=read_nic_byte(dev, EFUSE_CTRL);\r
+                       bResult = true;\r
+               }\r
+               else\r
+               {\r
+                       *data = 0;\r
+                       bResult = false;\r
+               }\r
+               \r
+       }\r
+       return bResult; \r
+}\r
+void efuse_access(struct net_device* dev, u8 bRead,u16 start_addr, u8 cnts, u8 *data)\r
+{\r
+       u8      efuse_clk_ori,efuse_clk_new;
+       u32 i = 0;\r
+\r
+       if(start_addr>0x200) return;\r
+       efuse_clk_ori = read_nic_byte(dev,SYS_FUNC_EN+1);\r
+       efuse_clk_new = efuse_clk_ori|0x20;\r
+       \r
+       if(efuse_clk_new!= efuse_clk_ori){\r
+               write_nic_byte(dev, SYS_FUNC_EN+1, efuse_clk_new);\r
+       }\r
+#ifdef _POWERON_DELAY_\r
+       mdelay(10);\r
+#endif \r
+       write_nic_byte(dev, EFUSE_TEST+3, (read_nic_byte(dev, EFUSE_TEST+3)|0x80));\r
+       write_nic_byte(dev, EFUSE_CLK_CTRL, (read_nic_byte(dev, EFUSE_CLK_CTRL)|0x03));\r
+       \r
+#ifdef _PRE_EXECUTE_READ_CMD_\r
+       {\r
+               unsigned char tmpdata;\r
+               efuse_OneByteRead(dev, 0,&tmpdata);\r
+       }               \r
+#endif \r
+       \r
+       for(i=0;i<cnts;i++){            \r
+               efuse_one_byte_rw(dev,bRead, start_addr+i , data+i);            \r
+       }\r
+       write_nic_byte(dev, EFUSE_TEST+3, read_nic_byte(dev, EFUSE_TEST+3)&0x7f);\r
+       write_nic_byte(dev, EFUSE_CLK_CTRL, read_nic_byte(dev, EFUSE_CLK_CTRL)&0xfd);\r
+                       \r
+       if(efuse_clk_new != efuse_clk_ori)      write_nic_byte(dev, 0x10250003, efuse_clk_ori);\r
+       \r
+}\r
+\r
+#ifdef TO_DO_LIST\r
+static void efuse_reg_ctrl(struct net_device* dev, u8 bPowerOn)\r
+{              \r
+       if(true==bPowerOn){\r
+               write_nic_byte(dev, SYS_FUNC_EN+1,  read_nic_byte(dev,SYS_FUNC_EN+1)|0x20);\r
+#ifdef _POWERON_DELAY_ \r
+               mdelay(10);     \r
+#endif\r
+               write_nic_byte(dev, EFUSE_TEST+4, (read_nic_byte(dev, EFUSE_TEST+4)|0x80));\r
+               write_nic_byte(dev, EFUSE_CLK_CTRL, (read_nic_byte(dev, EFUSE_CLK_CTRL)|0x03));\r
+#ifdef _PRE_EXECUTE_READ_CMD_\r
+               {\r
+                       unsigned char tmpdata;\r
+                       efuse_OneByteRead(dev, 0,&tmpdata);\r
+               }\r
+               \r
+#endif\r
+       }\r
+       else{\r
+               write_nic_byte(dev, EFUSE_TEST+4, read_nic_byte(dev, EFUSE_TEST+4)&0x7f);\r
+               write_nic_byte(dev, EFUSE_CLK_CTRL, read_nic_byte(dev, EFUSE_CLK_CTRL)&0xfd);\r
+\r
+       }\r
+\r
+       \r
+}\r
+#endif\r
+\r
+void efuse_read_data(struct net_device* dev,u8 efuse_read_item,u8 *data,u32 data_size)\r
+{\r
+       u8 offset, word_start,byte_start,byte_cnts;\r
+       u8      efusedata[EFUSE_REAL_CONTENT_LEN];\r
+       u8 *tmpdata = NULL;\r
+\r
+       u8 pg_pkt_cnts ;\r
+       \r
+       u8 tmpidx;\r
+       u8 pg_data[8];\r
+\r
+       if(efuse_read_item>  (sizeof(RTL8712_SDIO_EFUSE_TABLE)/sizeof(EFUSE_MAP))){\r
+               return ;\r
+       }\r
+               \r
+       offset          = RTL8712_SDIO_EFUSE_TABLE[efuse_read_item].offset ;\r
+       word_start      = RTL8712_SDIO_EFUSE_TABLE[efuse_read_item].word_start;\r
+       byte_start      = RTL8712_SDIO_EFUSE_TABLE[efuse_read_item].byte_start;\r
+       byte_cnts       = RTL8712_SDIO_EFUSE_TABLE[efuse_read_item].byte_cnts;\r
+\r
+       if(data_size!=byte_cnts){\r
+               return;         \r
+       }\r
+       \r
+       pg_pkt_cnts = (byte_cnts /PGPKT_DATA_SIZE) +1;          \r
+       \r
+       if(pg_pkt_cnts > 1){\r
+               tmpdata = efusedata;\r
+\r
+               if(tmpdata!=NULL)\r
+               {\r
+                       memset(tmpdata,0xff,pg_pkt_cnts*PGPKT_DATA_SIZE);       \r
+                                               \r
+                       for(tmpidx=0;tmpidx<pg_pkt_cnts;tmpidx++)\r
+                       {                               \r
+                               memset(pg_data,0xff,PGPKT_DATA_SIZE);\r
+                               if(true== efuse_PgPacketRead(dev,offset+tmpidx,pg_data))\r
+                               {       \r
+                                       memcpy(tmpdata+(PGPKT_DATA_SIZE*tmpidx),pg_data,PGPKT_DATA_SIZE);\r
+                               }\r
+                       }\r
+                       memcpy(data,(tmpdata+ (2*word_start)+byte_start ),data_size);                                   \r
+               }               \r
+       }\r
+       else\r
+       {\r
+               memset(pg_data,0xff,PGPKT_DATA_SIZE);\r
+               if(true==efuse_PgPacketRead(dev,offset,pg_data)){       \r
+                       memcpy(data,pg_data+ (2*word_start)+byte_start ,data_size);\r
+               }\r
+       }       \r
+       \r
+}\r
+void efuse_write_data(struct net_device* dev,u8 efuse_write_item,u8 *data,u32 data_size,u32 bWordUnit)\r
+{\r
+       u8 offset, word_start,byte_start,byte_cnts;     \r
+       u8 word_en = 0x0f,word_cnts;\r
+       u8 pg_pkt_cnts ;\r
+       \r
+       u8 tmpidx,tmpbitmask;\r
+       u8 pg_data[8],tmpbytes=0;\r
+\r
+       if(efuse_write_item>  (sizeof(RTL8712_SDIO_EFUSE_TABLE)/sizeof(EFUSE_MAP))){\r
+               return ;\r
+       }\r
+       \r
+       offset          = RTL8712_SDIO_EFUSE_TABLE[efuse_write_item].offset ;\r
+       word_start      = RTL8712_SDIO_EFUSE_TABLE[efuse_write_item].word_start;\r
+       byte_start      = RTL8712_SDIO_EFUSE_TABLE[efuse_write_item].byte_start;\r
+       byte_cnts       = RTL8712_SDIO_EFUSE_TABLE[efuse_write_item].byte_cnts;\r
+       \r
+       if(data_size >  byte_cnts){\r
+               return;         \r
+       }\r
+       pg_pkt_cnts = (byte_cnts /PGPKT_DATA_SIZE) +1;  \r
+       word_cnts = byte_cnts /2 ;\r
+\r
+       if(byte_cnts %2){\r
+               word_cnts+=1;\r
+       }               \r
+       if((byte_start==1)||((byte_cnts%2)==1)){
+\r
+               if((efuse_write_item==EFUSE_F0CIS)||(efuse_write_item==EFUSE_F1CIS)){\r
+                       memset(pg_data,0xff,PGPKT_DATA_SIZE);\r
+                       efuse_PgPacketRead(dev,offset,pg_data);         \r
+                       \r
+                       if(efuse_write_item==EFUSE_F0CIS){\r
+                               word_en = 0x07;\r
+                               memcpy(pg_data+word_start*2+byte_start,data,sizeof(u8)*2);\r
+                               efuse_PgPacketWrite(dev,offset,word_en,pg_data+(word_start*2)); \r
+\r
+                               word_en = 0x00;\r
+                               efuse_PgPacketWrite(dev,(offset+1),word_en,data+2);\r
+\r
+                               word_en = 0x00;\r
+                               efuse_PgPacketRead(dev,offset+2,pg_data);\r
+                               memcpy(pg_data,data+2+8,sizeof(u8)*7);\r
+                               \r
+                               efuse_PgPacketWrite(dev,(offset+2),word_en,pg_data);\r
+                       }\r
+                       else if(efuse_write_item==EFUSE_F1CIS){\r
+                               word_en = 0x07;\r
+                               efuse_PgPacketRead(dev,offset,pg_data);\r
+                               pg_data[7] = data[0];\r
+                               efuse_PgPacketWrite(dev,offset,word_en,pg_data+(word_start*2)); \r
+                               \r
+                               word_en = 0x00;\r
+                               for(tmpidx = 0 ;tmpidx<(word_cnts/4);tmpidx++){\r
+                                       efuse_PgPacketWrite(dev,(offset+1+tmpidx),word_en,data+1+(tmpidx*PGPKT_DATA_SIZE));\r
+                               }                               \r
+                       }\r
+                       \r
+               }\r
+               else{                   \r
+                       memset(pg_data,0xff,PGPKT_DATA_SIZE);\r
+                       if((efuse_write_item==EFUSE_SDIO_SETTING)||(efuse_write_item==EFUSE_CCCR)){\r
+                               word_en = 0x0e ;\r
+                               tmpbytes = 2;\r
+                       }\r
+                       else if(efuse_write_item == EFUSE_SDIO_MODE){\r
+                               word_en = 0x0d ;\r
+                               tmpbytes = 2;\r
+                       }\r
+                       else if(efuse_write_item == EFUSE_OCR){\r
+                               word_en = 0x09 ;\r
+                               tmpbytes = 4;\r
+                       }\r
+                       else if((efuse_write_item == EFUSE_EEPROM_VER)||(efuse_write_item==EFUSE_CHAN_PLAN)){\r
+                               word_en = 0x07 ;\r
+                               tmpbytes = 2;\r
+                       }\r
+                       if(bWordUnit==true){\r
+                               memcpy(pg_data+word_start*2 ,data,sizeof(u8)*tmpbytes);\r
+                       }\r
+                       else{                                                                                                                           \r
+                               efuse_PgPacketRead(dev,offset,pg_data);\r
+                               memcpy(pg_data+(2*word_start)+byte_start,data,sizeof(u8)*byte_cnts);                    \r
+                       }\r
+                                       \r
+                       efuse_PgPacketWrite(dev,offset,word_en,pg_data+(word_start*2)); \r
+                       \r
+               }               \r
+               \r
+       }\r
+       else if(pg_pkt_cnts>1){
+               if(word_start==0){\r
+                       word_en = 0x00;\r
+                       for(tmpidx = 0 ;tmpidx<(word_cnts/4);tmpidx++)\r
+                       {\r
+                               efuse_PgPacketWrite(dev,(offset+tmpidx),word_en,data+(tmpidx*PGPKT_DATA_SIZE));\r
+                       }\r
+                       word_en = 0x0f;\r
+                       for(tmpidx= 0; tmpidx<(word_cnts%4) ; tmpidx++)\r
+                       {\r
+                               tmpbitmask =tmpidx;\r
+                               word_en &= (~(EFUSE_BIT(tmpbitmask)));\r
+                       }               \r
+                       efuse_PgPacketWrite(dev,offset+(word_cnts/4),word_en,data+((word_cnts/4)*PGPKT_DATA_SIZE));\r
+               }else\r
+               {\r
+\r
+               }\r
+       }\r
+       else{
+               word_en = 0x0f;\r
+               for(tmpidx= 0; tmpidx<word_cnts ; tmpidx++)\r
+               {                       \r
+                       tmpbitmask = word_start + tmpidx ;\r
+                       word_en &= (~(EFUSE_BIT(tmpbitmask)));\r
+               }\r
+               efuse_PgPacketWrite(dev,offset,word_en,data);\r
+       }\r
+               \r
+}\r
+\r
+void efuset_test_func_read(struct net_device* dev)\r
+{\r
+       u8 chipid[2];\r
+       u8 ocr[3];\r
+       u8 macaddr[6];  \r
+       u8 txpowertable[28];\r
+       \r
+       memset(chipid,0,sizeof(u8)*2);  \r
+       efuse_read_data(dev,EFUSE_CHIP_ID,chipid,sizeof(chipid));\r
+       \r
+       memset(ocr,0,sizeof(u8)*3);     \r
+       efuse_read_data(dev,EFUSE_CCCR,ocr,sizeof(ocr));\r
+\r
+       memset(macaddr,0,sizeof(u8)*6);\r
+       efuse_read_data(dev,EFUSE_MAC_ADDR,macaddr,sizeof(macaddr));\r
+       \r
+       memset(txpowertable,0,sizeof(u8)*28);\r
+       efuse_read_data(dev,EFUSE_TXPW_TAB,txpowertable,sizeof(txpowertable));\r
+}\r
+\r
+void efuset_test_func_write(struct net_device* dev)\r
+{\r
+       u32 bWordUnit = true;   \r
+       u8 CCCR=0x02,SDIO_SETTING = 0xFF;\r
+       u8 tmpdata[2];\r
+       \r
+       u8 macaddr[6] = {0x00,0xe0,0x4c,0x87,0x12,0x66};        \r
+       efuse_write_data(dev,EFUSE_MAC_ADDR,macaddr,sizeof(macaddr),bWordUnit);\r
+\r
+       bWordUnit = false;\r
+       efuse_write_data(dev,EFUSE_CCCR,&CCCR,sizeof(u8),bWordUnit);\r
+       \r
+       bWordUnit = false;\r
+       efuse_write_data(dev,EFUSE_SDIO_SETTING,&SDIO_SETTING,sizeof(u8),bWordUnit);\r
+\r
+       bWordUnit = true;       \r
+       tmpdata[0] =SDIO_SETTING ;\r
+       tmpdata[1] =CCCR ;\r
+       efuse_write_data(dev,EFUSE_SDIO_SETTING,tmpdata,sizeof(tmpdata),bWordUnit);\r
+       \r
+}\r
+#endif 
diff --git a/ubuntu/rtl8192se/rtl8192s/r8192S_Efuse.h b/ubuntu/rtl8192se/rtl8192s/r8192S_Efuse.h
new file mode 100644 (file)
index 0000000..405f076
--- /dev/null
@@ -0,0 +1,98 @@
+/******************************************************************************\r
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.\r
+ * \r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
+ * more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ * \r
+ * The full GNU General Public License is included in this distribution in the\r
+ * file called LICENSE.\r
+ * \r
+ * Contact Information:\r
+ * wlanfae <wlanfae@realtek.com>\r
+******************************************************************************/\r
+\r
+#ifndef __INC_EFUSE_H\r
+#define __INC_EFUSE_H\r
+\r
+#define                EFUSE_FOR_92SU          1\r
+\r
+/*--------------------------Define Parameters-------------------------------*/\r
+#define                EFUSE_REAL_CONTENT_LEN                  512\r
+#define                EFUSE_MAP_LEN                           128\r
+#define                EFUSE_MAX_SECTION                       16\r
+#define                EFUSE_MAX_WORD_UNIT                     4\r
+#define               EFUSE_IC_ID_OFFSET                       506 
+\r
+#define                EFUSE_INIT_MAP                          0\r
+#define                EFUSE_MODIFY_MAP                                1\r
+\r
+#define                EFUSE_CLK_CTRL                  EFUSE_CTRL\r
+#define        EFUSE_BIT(x)  (1 << (x))\r
+\r
+#define                PG_STATE_HEADER         0x01\r
+#define                PG_STATE_WORD_0         0x02\r
+#define                PG_STATE_WORD_1         0x04\r
+#define                PG_STATE_WORD_2         0x08\r
+#define                PG_STATE_WORD_3         0x10\r
+#define                PG_STATE_DATA           0x20\r
+\r
+#define                PG_SWBYTE_H                     0x01\r
+#define                PG_SWBYTE_L                     0x02\r
+\r
+/*--------------------------Define Parameters-------------------------------*/\r
+\r
+\r
+/*------------------------------Define structure----------------------------*/ \r
+\r
+/*------------------------------Define structure----------------------------*/ \r
+\r
+\r
+/*------------------------Export global variable----------------------------*/\r
+/*------------------------Export global variable----------------------------*/\r
+\r
+/*------------------------Export Marco Definition---------------------------*/\r
+\r
+/*------------------------Export Marco Definition---------------------------*/\r
+\r
+\r
+/*--------------------------Exported Function prototype---------------------*/\r
+extern void    \r
+EFUSE_Initialize(struct net_device* dev);\r
+extern u8      \r
+EFUSE_Read1Byte(struct net_device* dev,u16 Address);\r
+extern void    \r
+EFUSE_Write1Byte(struct net_device* dev,u16 Address,u8 Value);\r
+\r
+#ifdef EFUSE_FOR_92SU \r
+extern         void \r
+ReadEFuse(struct net_device* dev,u16 _offset,u16 _size_byte,u8* pbuf);\r
+extern void\r
+ReadEFuseByte(struct net_device* dev,u16  _offset,u8  *pbuf);\r
+#endif 
+\r
+extern void\r
+EFUSE_ShadowRead(struct net_device* dev,unsigned char Type,unsigned short Offset,u32 *Value);\r
+extern void\r
+EFUSE_ShadowWrite(struct net_device* dev,unsigned char Type,unsigned short Offset,u32 Value);\r
+extern bool\r
+EFUSE_ShadowUpdate(struct net_device* dev);\r
+extern bool\r
+EFUSE_ShadowUpdateChk(struct net_device* dev);\r
+extern void \r
+EFUSE_ShadowMapUpdate(struct net_device* dev);\r
+extern void \r
+EFUSE_RePgSection1(struct net_device* dev);\r
+\r
+extern bool    \r
+EFUSE_ProgramMap(struct net_device* dev,char* pFileName, u8 TableType);                
+/*--------------------------Exported Function prototype---------------------*/\r
+\r
+/* End of Efuse.h */\r
+\r
+#endif 
diff --git a/ubuntu/rtl8192se/rtl8192s/r8192S_def.h b/ubuntu/rtl8192se/rtl8192s/r8192S_def.h
new file mode 100644 (file)
index 0000000..c775b46
--- /dev/null
@@ -0,0 +1,760 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+#ifndef R8192SE_DEF_H
+#define R8192SE_DEF_H
+
+#include <linux/types.h>
+#include "../rtl_endianfree.h"
+
+#define HAL_RETRY_LIMIT_INFRA          48      
+#define HAL_RETRY_LIMIT_AP_ADHOC       7
+
+#define        HAL_DM_DIG_DISABLE                              BIT0    
+#define        HAL_DM_HIPWR_DISABLE                            BIT1    
+
+#define RX_DESC_SIZE                           24
+#define RX_DRV_INFO_SIZE_UNIT  8
+
+
+#define TX_DESC_SIZE                           32
+
+#define SET_TX_DESC_PKT_SIZE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 0, 16, __Value)
+#define SET_TX_DESC_OFFSET(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 16, 8, __Value)
+#define SET_TX_DESC_TYPE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 24, 2, __Value)
+#define SET_TX_DESC_LAST_SEG(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 26, 1, __Value)
+#define SET_TX_DESC_FIRST_SEG(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 27, 1, __Value)
+#define SET_TX_DESC_LINIP(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 28, 1, __Value)
+#define SET_TX_DESC_AMSDU(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 29, 1, __Value)
+#define SET_TX_DESC_GREEN_FIELD(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 30, 1, __Value)
+#define SET_TX_DESC_OWN(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 31, 1, __Value)
+
+#define SET_TX_DESC_MACID(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 0, 5, __Value)
+#define SET_TX_DESC_MORE_DATA(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 5, 1, __Value)
+#define SET_TX_DESC_MORE_FRAG(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 6, 1, __Value)
+#define SET_TX_DESC_PIFS(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 7, 1, __Value)
+#define SET_TX_DESC_QUEUE_SEL(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 8, 5, __Value)
+#define SET_TX_DESC_ACK_POLICY(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 13, 2, __Value)
+#define SET_TX_DESC_NO_ACM(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 15, 1, __Value)
+#define SET_TX_DESC_NON_QOS(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 16, 1, __Value)
+#define SET_TX_DESC_KEY_ID(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 17, 2, __Value)
+#define SET_TX_DESC_OUI(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 19, 1, __Value)
+#define SET_TX_DESC_PKT_TYPE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 20, 1, __Value)
+#define SET_TX_DESC_EN_DESC_ID(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 21, 1, __Value)
+#define SET_TX_DESC_SEC_TYPE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 22, 2, __Value)
+#define SET_TX_DESC_WDS(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 24, 1, __Value)
+#define SET_TX_DESC_HTC(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 25, 1, __Value)
+#define SET_TX_DESC_PKT_OFFSET(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 26, 5, __Value)
+#define SET_TX_DESC_HWPC(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 27, 1, __Value)
+
+#define SET_TX_DESC_DATA_RETRY_LIMIT(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 0, 6, __Value)
+#define SET_TX_DESC_RETRY_LIMIT_ENABLE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 6, 1, __Value)
+#define SET_TX_DESC_TSFL(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 7, 5, __Value)
+#define SET_TX_DESC_RTS_RETRY_COUNT(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 12, 6, __Value)
+#define SET_TX_DESC_DATA_RETRY_COUNT(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 18, 6, __Value)
+#define        SET_TX_DESC_RSVD_MACID(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(((__pTxDesc) + 8), 24, 5, __Value)
+#define SET_TX_DESC_AGG_ENABLE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 29, 1, __Value)
+#define SET_TX_DESC_AGG_BREAK(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 30, 1, __Value)
+#define SET_TX_DESC_OWN_MAC(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 31, 1, __Value)
+
+#define SET_TX_DESC_NEXT_HEAP_PAGE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 0, 8, __Value)
+#define SET_TX_DESC_TAIL_PAGE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 8, 8, __Value)
+#define SET_TX_DESC_SEQ(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 16, 12, __Value)
+#define SET_TX_DESC_FRAG(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 28, 4, __Value)
+
+#define SET_TX_DESC_RTS_RATE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 0, 6, __Value)
+#define SET_TX_DESC_DISABLE_RTS_FB(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 6, 1, __Value)
+#define SET_TX_DESC_RTS_RATE_FB_LIMIT(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 7, 4, __Value)
+#define SET_TX_DESC_CTS_ENABLE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 11, 1, __Value)
+#define SET_TX_DESC_RTS_ENABLE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 12, 1, __Value)
+#define SET_TX_DESC_RA_BRSR_ID(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 13, 3, __Value)
+#define SET_TX_DESC_TXHT(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 16, 1, __Value)
+#define SET_TX_DESC_TX_SHORT(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 17, 1, __Value)
+#define SET_TX_DESC_TX_BANDWIDTH(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 18, 1, __Value)
+#define SET_TX_DESC_TX_SUB_CARRIER(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 19, 2, __Value)
+#define SET_TX_DESC_TX_STBC(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 21, 2, __Value)
+#define SET_TX_DESC_TX_REVERSE_DIRECTION(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 23, 1, __Value)
+#define SET_TX_DESC_RTS_HT(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 24, 1, __Value)
+#define SET_TX_DESC_RTS_SHORT(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 25, 1, __Value)
+#define SET_TX_DESC_RTS_BANDWIDTH(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 26, 1, __Value)
+#define SET_TX_DESC_RTS_SUB_CARRIER(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 27, 2, __Value)
+#define SET_TX_DESC_RTS_STBC(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 29, 2, __Value)
+#define SET_TX_DESC_USER_RATE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 31, 1, __Value)
+
+#define SET_TX_DESC_PACKET_ID(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 0, 9, __Value)
+#define SET_TX_DESC_TX_RATE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 9, 6, __Value)
+#define SET_TX_DESC_DISABLE_FB(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 15, 1, __Value)
+#define SET_TX_DESC_DATA_RATE_FB_LIMIT(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 16, 5, __Value)
+#define SET_TX_DESC_TX_AGC(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 21, 11, __Value)
+
+#define SET_TX_DESC_IP_CHECK_SUM(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+24, 0, 16, __Value)
+#define SET_TX_DESC_TCP_CHECK_SUM(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+24, 16, 16, __Value)
+
+#define SET_TX_DESC_TX_BUFFER_SIZE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+28, 0, 16, __Value)
+#define SET_TX_DESC_IP_HEADER_OFFSET(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+28, 16, 8, __Value)
+#define SET_TX_DESC_TCP_ENABLE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+28, 31, 1, __Value)
+
+#define SET_TX_DESC_TX_BUFFER_ADDRESS(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+32, 0, 32, __Value)
+
+
+#define        TX_DESC_NEXT_DESC_OFFSET        36
+#define        CLEAR_PCI_TX_DESC_CONTENT(__pTxDesc, _size)                                                                                     \
+       {                                                                                                                                                                               \
+               if(_size > TX_DESC_NEXT_DESC_OFFSET)                                                                                            \
+                       memset((void*)__pTxDesc, 0, TX_DESC_NEXT_DESC_OFFSET);                                  \
+               else                                                                                                                                                            \
+                       memset((void*)__pTxDesc, 0, _size);                                                                     \
+               if(_size > (TX_DESC_NEXT_DESC_OFFSET + 4))                                                                                      \
+                       memset((void*)(__pTxDesc + (TX_DESC_NEXT_DESC_OFFSET + 4)), 0, (_size - TX_DESC_NEXT_DESC_OFFSET));     \
+       }
+
+#define        C2H_RX_CMD_HDR_LEN              8 
+#define        GET_C2H_CMD_CMD_LEN(__pRxHeader)        LE_BITS_TO_4BYTE((__pRxHeader), 0, 16)
+#define        GET_C2H_CMD_ELEMENT_ID(__pRxHeader)     LE_BITS_TO_4BYTE((__pRxHeader), 16, 8)
+#define        GET_C2H_CMD_CMD_SEQ(__pRxHeader)        LE_BITS_TO_4BYTE((__pRxHeader), 24, 7)
+#define        GET_C2H_CMD_CONTINUE(__pRxHeader)       LE_BITS_TO_4BYTE((__pRxHeader), 31, 1)
+#define        GET_C2H_CMD_CONTENT(__pRxHeader)        ((u8*)(__pRxHeader) + C2H_RX_CMD_HDR_LEN)
+
+#define        GET_C2H_CMD_FEEDBACK_ELEMENT_ID(__pCmdFBHeader) LE_BITS_TO_4BYTE((__pCmdFBHeader), 0, 8)
+#define        GET_C2H_CMD_FEEDBACK_CCX_LEN(__pCmdFBHeader)    LE_BITS_TO_4BYTE((__pCmdFBHeader), 8, 8)
+#define        GET_C2H_CMD_FEEDBACK_CCX_CMD_CNT(__pCmdFBHeader)        LE_BITS_TO_4BYTE((__pCmdFBHeader), 16, 16)
+#define        GET_C2H_CMD_FEEDBACK_CCX_MAC_ID(__pCmdFBHeader) LE_BITS_TO_4BYTE(((__pCmdFBHeader) + 4), 0, 5)
+#define        GET_C2H_CMD_FEEDBACK_CCX_VALID(__pCmdFBHeader)  LE_BITS_TO_4BYTE(((__pCmdFBHeader) + 4), 7, 1)
+#define        GET_C2H_CMD_FEEDBACK_CCX_RETRY_CNT(__pCmdFBHeader)      LE_BITS_TO_4BYTE(((__pCmdFBHeader) + 4), 8, 5)
+#define        GET_C2H_CMD_FEEDBACK_CCX_TOK(__pCmdFBHeader)    LE_BITS_TO_4BYTE(((__pCmdFBHeader) + 4), 15, 1)
+#define        GET_C2H_CMD_FEEDBACK_CCX_QSEL(__pCmdFBHeader)   LE_BITS_TO_4BYTE(((__pCmdFBHeader) + 4), 16, 4)
+#define        GET_C2H_CMD_FEEDBACK_CCX_SEQ(__pCmdFBHeader)    LE_BITS_TO_4BYTE(((__pCmdFBHeader) + 4), 20, 12)
+
+
+#if 0
+#define BK_QUEUE                                       0               
+#define BE_QUEUE                                       1               
+#define VI_QUEUE                                       2               
+#define VO_QUEUE                               3       
+#define BEACON_QUEUE                   4
+#define TXCMD_QUEUE                            5               
+#define MGNT_QUEUE                             6       
+#define HIGH_QUEUE                             7       
+#define HCCA_QUEUE                             8       
+
+#define LOW_QUEUE                              BE_QUEUE
+#define NORMAL_QUEUE                   MGNT_QUEUE
+#endif
+
+#define RX_MPDU_QUEUE                  0
+#define RX_CMD_QUEUE                   1
+#define RX_MAX_QUEUE                   2
+
+
+typedef enum _rtl819x_loopback{
+       RTL819X_NO_LOOPBACK = 0,
+       RTL819X_MAC_LOOPBACK = 1,
+       RTL819X_DMA_LOOPBACK = 2,
+       RTL819X_CCK_LOOPBACK = 3,
+}rtl819x_loopback_e;
+
+#define RESET_DELAY_8185               20
+
+#define RT_IBSS_INT_MASKS              0
+
+#define DESC92S_RATE1M                 0x00
+#define DESC92S_RATE2M                 0x01
+#define DESC92S_RATE5_5M               0x02
+#define DESC92S_RATE11M                        0x03
+#define DESC92S_RATE6M                 0x04
+#define DESC92S_RATE9M                 0x05
+#define DESC92S_RATE12M                        0x06
+#define DESC92S_RATE18M                        0x07
+#define DESC92S_RATE24M                        0x08
+#define DESC92S_RATE36M                        0x09
+#define DESC92S_RATE48M                        0x0a
+#define DESC92S_RATE54M                        0x0b
+#define DESC92S_RATEMCS0               0x0c
+#define DESC92S_RATEMCS1               0x0d
+#define DESC92S_RATEMCS2               0x0e
+#define DESC92S_RATEMCS3               0x0f
+#define DESC92S_RATEMCS4               0x10
+#define DESC92S_RATEMCS5               0x11
+#define DESC92S_RATEMCS6               0x12
+#define DESC92S_RATEMCS7               0x13
+#define DESC92S_RATEMCS8               0x14
+#define DESC92S_RATEMCS9               0x15
+#define DESC92S_RATEMCS10              0x16
+#define DESC92S_RATEMCS11              0x17
+#define DESC92S_RATEMCS12              0x18
+#define DESC92S_RATEMCS13              0x19
+#define DESC92S_RATEMCS14              0x1a
+#define DESC92S_RATEMCS15              0x1b
+#define DESC92S_RATEMCS15_SG   0x1c
+#define DESC92S_RATEMCS32              0x20    
+
+#define SHORT_SLOT_TIME                        9
+#define NON_SHORT_SLOT_TIME    20
+
+
+#define        MAX_LINES_HWCONFIG_TXT                  1000
+#define MAX_BYTES_LINE_HWCONFIG_TXT            256
+
+#define SW_THREE_WIRE                  0
+#define HW_THREE_WIRE                  2
+
+#define BT_DEMO_BOARD                  0 
+#define BT_QA_BOARD                            1 
+#define BT_FPGA                                        2 
+
+#define        Rx_Smooth_Factor                        20
+
+#define QSLT_BK                                        0x2
+#define QSLT_BE                                        0x0
+#define QSLT_VI                                        0x5
+#define QSLT_VO                                        0x7
+#define QSLT_BEACON                            0x10
+#define QSLT_HIGH                              0x11
+#define QSLT_MGNT                              0x12
+#define QSLT_CMD                               0x13
+
+#define NUM_OF_FIRMWARE_QUEUE                          10
+#define NUM_OF_PAGES_IN_FW                                     0x100
+#define NUM_OF_PAGE_IN_FW_QUEUE_BK             0x07
+#define NUM_OF_PAGE_IN_FW_QUEUE_BE             0x07
+#define NUM_OF_PAGE_IN_FW_QUEUE_VI             0x07
+#define NUM_OF_PAGE_IN_FW_QUEUE_VO             0x07
+#define NUM_OF_PAGE_IN_FW_QUEUE_HCCA           0x0
+#define NUM_OF_PAGE_IN_FW_QUEUE_CMD            0x0
+#define NUM_OF_PAGE_IN_FW_QUEUE_MGNT           0x02
+#define NUM_OF_PAGE_IN_FW_QUEUE_HIGH           0x02
+#define NUM_OF_PAGE_IN_FW_QUEUE_BCN            0x2
+#define NUM_OF_PAGE_IN_FW_QUEUE_PUB            0xA1
+
+#define NUM_OF_PAGE_IN_FW_QUEUE_BK_DTM 0x026
+#define NUM_OF_PAGE_IN_FW_QUEUE_BE_DTM 0x048
+#define NUM_OF_PAGE_IN_FW_QUEUE_VI_DTM 0x048
+#define NUM_OF_PAGE_IN_FW_QUEUE_VO_DTM 0x026
+#define NUM_OF_PAGE_IN_FW_QUEUE_PUB_DTM        0x00
+                                               
+#define HAL_PRIME_CHNL_OFFSET_DONT_CARE        0
+#define HAL_PRIME_CHNL_OFFSET_LOWER            1
+#define HAL_PRIME_CHNL_OFFSET_UPPER            2
+
+
+
+#define        MAX_SILENT_RESET_RX_SLOT_NUM    10
+typedef enum tag_Rf_OpType
+{    
+    RF_OP_By_SW_3wire = 0,
+    RF_OP_By_FW,   
+    RF_OP_MAX
+}RF_OpType_E;
+
+
+typedef        enum _POWER_SAVE_MODE   
+{
+       POWER_SAVE_MODE_ACTIVE,
+       POWER_SAVE_MODE_SAVE,
+}POWER_SAVE_MODE;
+
+typedef        enum _INTERFACE_SELECT_8190PCI{
+       INTF_SEL1_MINICARD      = 0,            
+       INTF_SEL0_PCIE                  = 1,            
+       INTF_SEL2_RSV                   = 2,            
+       INTF_SEL3_RSV                   = 3,            
+} INTERFACE_SELECT_8190PCI, *PINTERFACE_SELECT_8190PCI;
+
+
+typedef struct _BB_REGISTER_DEFINITION{
+       u32 rfintfs;                    
+       u32 rfintfi;                    
+       u32 rfintfo;                    
+       u32 rfintfe;                    
+       u32 rf3wireOffset;              
+       u32 rfLSSI_Select;              
+       u32 rfTxGainStage;              
+       u32 rfHSSIPara1;                
+       u32 rfHSSIPara2;                
+       u32 rfSwitchControl;    
+       u32 rfAGCControl1;      
+       u32 rfAGCControl2;      
+       u32 rfRxIQImbalance;    
+       u32 rfRxAFE;                    
+       u32 rfTxIQImbalance;    
+       u32 rfTxAFE;                    
+       u32 rfLSSIReadBack;     
+       u32 rfLSSIReadBackPi;   
+}BB_REGISTER_DEFINITION_T, *PBB_REGISTER_DEFINITION_T;
+
+
+
+
+typedef struct  _rx_fwinfo_8192s{
+       
+       /*u32                   gain_0:7;
+       u32                     trsw_0:1;
+       u32                     gain_1:7;
+       u32                     trsw_1:1;
+       u32                     gain_2:7;
+       u32                     trsw_2:1;
+       u32                     gain_3:7;
+       u32                     trsw_3:1;       */
+       u8                      gain_trsw[4];
+
+       /*u32                   pwdb_all:8;
+       u32                     cfosho_0:8;
+       u32                     cfosho_1:8;
+       u32                     cfosho_2:8;*/
+       u8                      pwdb_all;
+       u8                      cfosho[4];
+
+       /*u32                   cfosho_3:8;
+       u32                     cfotail_0:8;
+       u32                     cfotail_1:8;
+       u32                     cfotail_2:8;*/
+       u8                      cfotail[4];
+
+       /*u32                   cfotail_3:8;
+       u32                     rxevm_0:8;
+       u32                     rxevm_1:8;
+       u32                     rxsnr_0:8;*/
+       s8                      rxevm[2];
+       s8                      rxsnr[4];
+
+       /*u32                   rxsnr_1:8;
+       u32                     rxsnr_2:8;
+       u32                     rxsnr_3:8;
+       u32                     pdsnr_0:8;*/
+       u8                      pdsnr[2];
+
+       /*u32                   pdsnr_1:8;
+       u32                     csi_current_0:8;
+       u32                     csi_current_1:8;
+       u32                     csi_target_0:8;*/
+       u8                      csi_current[2];
+       u8                      csi_target[2];
+
+       /*u32                   csi_target_1:8;
+       u32                     sigevm:8;
+       u32                     max_ex_pwr:8;
+       u32                     ex_intf_flag:1;
+       u32                     sgi_en:1;
+       u32                     rxsc:2;
+       u32                     reserve:4;*/
+       u8                      sigevm;
+       u8                      max_ex_pwr;
+       u8                      ex_intf_flag:1;
+       u8                      sgi_en:1;
+       u8                      rxsc:2;
+       u8                      reserve:4;
+       
+}rx_fwinfo, *prx_fwinfo;
+
+typedef struct _LOG_INTERRUPT_8190
+{
+       u32     nIMR_COMDOK;
+       u32     nIMR_MGNTDOK;
+       u32     nIMR_HIGH;
+       u32     nIMR_VODOK;
+       u32     nIMR_VIDOK;
+       u32     nIMR_BEDOK;
+       u32     nIMR_BKDOK;
+       u32     nIMR_ROK;
+       u32     nIMR_RCOK;
+       u32     nIMR_TBDOK;
+       u32     nIMR_BDOK;
+       u32     nIMR_RXFOVW;
+} LOG_INTERRUPT_8190_T, *PLOG_INTERRUPT_8190_T;
+
+typedef struct _phy_cck_rx_status_report_819xpci
+{
+       u8      adc_pwdb_X[4];
+       u8      sq_rpt; 
+       u8      cck_agc_rpt;
+}phy_sts_cck_819xpci_t, phy_sts_cck_8192s_t;
+
+#define                PHY_RSSI_SLID_WIN_MAX                           100
+#define                PHY_LINKQUALITY_SLID_WIN_MAX            20
+#define                PHY_Beacon_RSSI_SLID_WIN_MAX            10
+
+typedef struct _tx_desc_8192se{
+
+       u32             PktSize:16;
+       u32             Offset:8;
+       u32             Type:2; 
+       u32             LastSeg:1;
+       u32             FirstSeg:1;
+       u32             LINIP:1;
+       u32             AMSDU:1;
+       u32             GF:1;
+       u32             OWN:1;  
+       
+       u32             MacID:5;                        
+       u32             MoreData:1;
+       u32             MoreFrag:1;
+       u32             PIFS:1;
+       u32             QueueSel:5;
+       u32             AckPolicy:2;
+       u32             NoACM:1;
+       u32             NonQos:1;
+       u32             KeyID:2;
+       u32             OUI:1;
+       u32             PktType:1;
+       u32             EnDescID:1;
+       u32             SecType:2;
+       u32             HTC:1;  
+       u32             WDS:1;  
+       u32             PktOffset:5;    
+       u32             HWPC:1;         
+       
+       u32             DataRetryLmt:6;
+       u32             RetryLmtEn:1;
+       u32             TSFL:5; 
+       u32             RTSRC:6;        
+       u32             DATARC:6;       
+#ifdef _RTL8192_EXT_PATCH_
+       u32             Rsvd_MacID:5;
+#else
+       u32             Rsvd1:5;
+#endif
+       u32             AggEn:1;
+       u32             BK:1;   
+       u32             OwnMAC:1;
+       
+       u32             NextHeadPage:8;
+       u32             TailPage:8;
+       u32             Seq:12;
+       u32             Frag:4; 
+
+       u32             RTSRate:6;
+       u32             DisRTSFB:1;
+       u32             RTSRateFBLmt:4;
+       u32             CTS2Self:1;
+       u32             RTSEn:1;
+       u32             RaBRSRID:3;     
+       u32             TXHT:1;
+       u32             TxShort:1;
+       u32             TxBw:1;
+       u32             TXSC:2;
+       u32             STBC:2;
+       u32             RD:1;
+       u32             RTSHT:1;
+       u32             RTSShort:1;
+       u32             RTSBW:1;
+       u32             RTSSC:2;
+       u32             RTSSTBC:2;
+       u32             UserRate:1;     
+
+       u32             PktID:9;
+       u32             TxRate:6;
+       u32             DISFB:1;
+       u32             DataRateFBLmt:5;
+       u32             TxAGC:11;
+
+       u32             IPChkSum:16;
+       u32             TCPChkSum:16;
+
+       u32             TxBufferSize:16;
+       u32             IPHdrOffset:8;
+       u32             Rsvd3:7;
+       u32             TCPEn:1;
+
+       u32             TxBuffAddr;
+
+       u32             NextDescAddress;
+
+       u32             Reserve_Pass_92S_PCIE_MM_Limit[6];
+       
+} tx_desc, *ptx_desc;
+
+
+typedef struct _tx_desc_cmd_8192se{  
+       u32             PktSize:16;
+       u32             Offset:8;       
+       u32             Rsvd0:2;
+       u32             FirstSeg:1;
+       u32             LastSeg:1;
+       u32             LINIP:1;
+       u32             Rsvd1:2;
+       u32             OWN:1;  
+       
+       u32             Rsvd2;
+       u32             Rsvd3;
+       u32             Rsvd4;
+       u32             Rsvd5;
+       u32             Rsvd6;
+       u32             Rsvd7;  
+
+       u32             TxBufferSize:16;
+       u32             Rsvd8:16;
+
+       u32             TxBufferAddr;
+
+       u32             NextTxDescAddress;
+
+       u32             Reserve_Pass_92S_PCIE_MM_Limit[6];
+       
+}tx_desc_cmd, *ptx_desc_cmd;
+
+
+typedef struct _tx_status_desc_8192se{ 
+
+       u32             PktSize:16;
+       u32             Offset:8;
+       u32             Type:2; 
+       u32             LastSeg:1;
+       u32             FirstSeg:1;
+       u32             LINIP:1;
+       u32             AMSDU:1;
+       u32             GF:1;
+       u32             OWN:1;  
+       
+       u32             MacID:5;                        
+       u32             MoreData:1;
+       u32             MoreFrag:1;
+       u32             PIFS:1;
+       u32             QueueSel:5;
+       u32             AckPolicy:2;
+       u32             NoACM:1;
+       u32             NonQos:1;
+       u32             KeyID:2;
+       u32             OUI:1;
+       u32             PktType:1;
+       u32             EnDescID:1;
+       u32             SecType:2;
+       u32             HTC:1;  
+       u32             WDS:1;  
+       u32             PktOffset:5;    
+       u32             HWPC:1;         
+       
+       u32             DataRetryLmt:6;
+       u32             RetryLmtEn:1;
+       u32             TSFL:5; 
+       u32             RTSRC:6;        
+       u32             DATARC:6;       
+       u32             Rsvd1:5;
+       u32             AggEn:1;
+       u32             BK:1;   
+       u32             OwnMAC:1;
+       
+       u32             NextHeadPage:8;
+       u32             TailPage:8;
+       u32             Seq:12;
+       u32             Frag:4; 
+
+       u32             RTSRate:6;
+       u32             DisRTSFB:1;
+       u32             RTSRateFBLmt:4;
+       u32             CTS2Self:1;
+       u32             RTSEn:1;
+       u32             RaBRSRID:3;     
+       u32             TXHT:1;
+       u32             TxShort:1;
+       u32             TxBw:1;
+       u32             TXSC:2;
+       u32             STBC:2;
+       u32             RD:1;
+       u32             RTSHT:1;
+       u32             RTSShort:1;
+       u32             RTSBW:1;
+       u32             RTSSC:2;
+       u32             RTSSTBC:2;
+       u32             UserRate:1;     
+
+       u32             PktID:9;
+       u32             TxRate:6;
+       u32             DISFB:1;
+       u32             DataRateFBLmt:5;
+       u32             TxAGC:11;       
+
+       u32             IPChkSum:16;
+       u32             TCPChkSum:16;
+
+       u32             TxBufferSize:16;
+       u32             IPHdrOffset:8;
+       u32             Rsvd2:7;
+       u32             TCPEn:1;
+
+       u32             TxBufferAddr;
+
+       u32             NextDescAddress;
+
+       u32             Reserve_Pass_92S_PCIE_MM_Limit[6];
+
+}tx_status_desc, *ptx_status_desc;
+
+
+typedef struct _rx_desc_8192se{
+       u32             Length:14;
+       u32             CRC32:1;
+       u32             ICVError:1;
+       u32             DrvInfoSize:4;
+       u32             Security:3;
+       u32             Qos:1;
+       u32             Shift:2;
+       u32             PHYStatus:1;
+       u32             SWDec:1;
+       u32             LastSeg:1;
+       u32             FirstSeg:1;
+       u32             EOR:1;
+       u32             OWN:1;  
+
+       u32             MACID:5;
+       u32             TID:4;
+       u32             HwRsvd:5;
+       u32             PAGGR:1;
+       u32             FAGGR:1;
+       u32             A1_FIT:4;
+       u32             A2_FIT:4;
+       u32             PAM:1;
+       u32             PWR:1;
+       u32             MoreData:1;
+       u32             MoreFrag:1;
+       u32             Type:2;
+       u32             MC:1;
+       u32             BC:1;
+
+       u32             Seq:12;
+       u32             Frag:4;
+       u32             NextPktLen:14;
+       u32             NextIND:1;
+       u32             Rsvd:1;
+
+       u32             RxMCS:6;
+       u32             RxHT:1;
+       u32             AMSDU:1;
+       u32             SPLCP:1;
+       u32             BandWidth:1;
+       u32             HTC:1;
+       u32             TCPChkRpt:1;
+       u32             IPChkRpt:1;
+       u32             TCPChkValID:1;
+       u32             HwPCErr:1;
+       u32             HwPCInd:1;
+       u32             IV0:16;
+
+       u32             IV1;
+
+       u32             TSFL;
+
+       u32             BufferAddress;
+
+       u32             NextRxDescAddress;
+
+#if 0          
+       u32             BA_SSN:12;
+       u32             BA_VLD:1;
+       u32             RSVD:19;
+#endif
+
+} rx_desc, *prx_desc;
+
+
+
+typedef struct _rx_desc_status_8192se{
+       u32             Length:14;
+       u32             CRC32:1;
+       u32             ICVError:1;
+       u32             DrvInfoSize:4;
+       u32             Security:3;
+       u32             Qos:1;
+       u32             Shift:2;
+       u32             PHYStatus:1;
+       u32             SWDec:1;
+       u32             LastSeg:1;
+       u32             FirstSeg:1;
+       u32             EOR:1;
+       u32             OWN:1;  
+
+       u32             MACID:5;
+       u32             TID:4;
+       u32             HwRsvd:5;
+       u32             PAGGR:1;
+       u32             FAGGR:1;
+       u32             A1_FIT:4;
+       u32             A2_FIT:4;
+       u32             PAM:1;
+       u32             PWR:1;
+       u32             MoreData:1;
+       u32             MoreFrag:1;
+       u32             Type:2;
+       u32             MC:1;
+       u32             BC:1;
+
+       u32             Seq:12;
+       u32             Frag:4;
+       u32             NextPktLen:14;
+       u32             NextIND:1;
+       u32             Rsvd:1;
+
+       u32             RxMCS:6;
+       u32             RxHT:1;
+       u32             AMSDU:1;
+       u32             SPLCP:1;
+       u32             BW:1;
+       u32             HTC:1;
+       u32             TCPChkRpt:1;
+       u32             IPChkRpt:1;
+       u32             TCPChkValID:1;
+       u32             HwPCErr:1;
+       u32             HwPCInd:1;
+       u32             IV0:16;
+
+       u32             IV1;
+
+       u32             TSFL;
+
+
+       u32             BufferAddress;
+
+       u32             NextRxDescAddress;
+
+#if 0          
+       u32             BA_SSN:12;
+       u32             BA_VLD:1;
+       u32             RSVD:19;
+#endif
+}rx_desc_status, *prx_desc_status;
+
+typedef enum _HAL_FW_C2H_CMD_ID
+{
+       HAL_FW_C2H_CMD_Read_MACREG = 0,
+       HAL_FW_C2H_CMD_Read_BBREG = 1,
+       HAL_FW_C2H_CMD_Read_RFREG = 2,
+       HAL_FW_C2H_CMD_Read_EEPROM = 3,
+       HAL_FW_C2H_CMD_Read_EFUSE = 4,
+       HAL_FW_C2H_CMD_Read_CAM = 5,
+       HAL_FW_C2H_CMD_Get_BasicRate = 6,                       
+       HAL_FW_C2H_CMD_Get_DataRate = 7,                                
+       HAL_FW_C2H_CMD_Survey = 8 ,
+       HAL_FW_C2H_CMD_SurveyDone = 9,
+       HAL_FW_C2H_CMD_JoinBss = 10,
+       HAL_FW_C2H_CMD_AddSTA = 11,
+       HAL_FW_C2H_CMD_DelSTA = 12,
+       HAL_FW_C2H_CMD_AtimDone = 13,
+       HAL_FW_C2H_CMD_TX_Report = 14,
+       HAL_FW_C2H_CMD_CCX_Report = 15,
+       HAL_FW_C2H_CMD_DTM_Report = 16,
+       HAL_FW_C2H_CMD_TX_Rate_Statistics = 17,
+       HAL_FW_C2H_CMD_C2HLBK = 18,
+       HAL_FW_C2H_CMD_C2HDBG = 19,
+       HAL_FW_C2H_CMD_C2HFEEDBACK = 20,
+       HAL_FW_C2H_CMD_BT_State = 25,
+       HAL_FW_C2H_CMD_BT_Service = 26,
+       HAL_FW_C2H_CMD_MAX
+}HAL_FW_C2H_CMD_ID;
+
+#define        HAL_FW_C2H_CMD_C2HFEEDBACK_CCX_PER_PKT_RPT                      0x04
+#define        HAL_FW_C2H_CMD_C2HFEEDBACK_DTM_TX_STATISTICS_RPT        0x05
+#endif
diff --git a/ubuntu/rtl8192se/rtl8192s/r8192S_dev.c b/ubuntu/rtl8192se/rtl8192s/r8192S_dev.c
new file mode 100644 (file)
index 0000000..b9d7976
--- /dev/null
@@ -0,0 +1,5256 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * Based on the r8180 driver, which is:
+ * Copyright 2004-2005 Andrea Merello <andreamrl@tiscali.it>, et al.
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+#include "../rtl_core.h"
+#include "../rtl_dm.h"
+#include "../rtl_wx.h"
+#include "r8192S_phy.h"
+#include "r8192S_phyreg.h"
+#include "r8192S_rtl6052.h"
+#include "r8192S_Efuse.h"
+
+#ifdef _RTL8192_EXT_PATCH_
+#include "../../../mshclass/msh_class.h"
+#include "../rtl_mesh.h"
+#endif
+
+extern int WDCAPARA_ADD[];
+
+void rtl8192se_start_beacon(struct net_device *dev)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       struct rtllib_network *net = &priv->rtllib->current_network;
+       u16 BcnTimeCfg = 0;
+        u16 BcnCW = 6;
+        u16 BcnIFS = 0xf;
+
+       DMESG("Enabling beacon TX");
+       rtl8192_irq_disable(dev);
+
+       write_nic_word(dev, ATIMWND, 2);
+
+       write_nic_word(dev, BCN_INTERVAL, net->beacon_interval);
+#ifdef _RTL8192_EXT_PATCH_
+       PHY_SetBeaconHwReg(dev, net->beacon_interval);
+#endif
+#ifdef RTL8192SE
+       write_nic_word(dev, BCN_DRV_EARLY_INT, 10<<4);
+#else
+       write_nic_word(dev, BCN_DRV_EARLY_INT, 10);
+#endif
+       write_nic_word(dev, BCN_DMATIME, 256); 
+
+       write_nic_byte(dev, BCN_ERR_THRESH, 100);       
+       
+       BcnTimeCfg |= BcnCW<<BCN_TCFG_CW_SHIFT;
+       BcnTimeCfg |= BcnIFS<<BCN_TCFG_IFS;
+       write_nic_word(dev, BCN_TCFG, BcnTimeCfg);
+       rtl8192_irq_enable(dev);
+}
+
+void rtl8192se_update_msr(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       u8 msr;
+       LED_CTL_MODE    LedAction = LED_CTL_NO_LINK;
+       msr  = read_nic_byte(dev, MSR);
+       msr &= ~ MSR_LINK_MASK;
+       
+       switch (priv->rtllib->iw_mode) {
+       case IW_MODE_INFRA:
+               if (priv->rtllib->state == RTLLIB_LINKED)
+                       msr |= (MSR_LINK_MANAGED << MSR_LINK_SHIFT);
+               else
+                       msr |= (MSR_LINK_NONE << MSR_LINK_SHIFT);
+               LedAction = LED_CTL_LINK;
+               break;
+       case IW_MODE_ADHOC:
+               if (priv->rtllib->state == RTLLIB_LINKED)
+                       msr |= (MSR_LINK_ADHOC << MSR_LINK_SHIFT);
+               else
+                       msr |= (MSR_LINK_NONE << MSR_LINK_SHIFT);
+               break;
+       case IW_MODE_MASTER:
+               if (priv->rtllib->state == RTLLIB_LINKED)
+                       msr |= (MSR_LINK_MASTER << MSR_LINK_SHIFT);
+               else
+                       msr |= (MSR_LINK_NONE << MSR_LINK_SHIFT);
+               break;
+#ifdef _RTL8192_EXT_PATCH_
+       case IW_MODE_MESH:
+               printk("%s: only_mesh=%d state=%d\n", __FUNCTION__, 
+                               priv->rtllib->only_mesh, priv->rtllib->mesh_state);
+               if (priv->rtllib->only_mesh) {
+                       if (priv->rtllib->mesh_state == RTLLIB_MESH_LINKED)
+                               msr |= (MSR_LINK_MASTER<<MSR_LINK_SHIFT); 
+                       else
+                               msr |= (MSR_LINK_NONE<<MSR_LINK_SHIFT);
+               } else {
+                       if (priv->rtllib->mesh_state == RTLLIB_MESH_LINKED) {
+                               msr |= (MSR_LINK_ADHOC << MSR_LINK_SHIFT);
+                               if (priv->rtllib->state == RTLLIB_LINKED)
+                                       msr |= (MSR_LINK_MANAGED << MSR_LINK_SHIFT);
+                       } else {        
+                               msr |= (MSR_LINK_NONE << MSR_LINK_SHIFT);
+                       }
+               }
+               break;
+#endif                 
+       default:
+               break;
+       }
+
+       write_nic_byte(dev, MSR, msr);
+       if(priv->rtllib->LedControlHandler)
+               priv->rtllib->LedControlHandler(dev, LedAction);
+}
+
+static void rtl8192se_config_hw_for_load_fail(struct net_device* dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       u16                     i;
+       u8                      sMacAddr[6] = {0x00, 0xE0, 0x4C, 0x81, 0x92, 0x00};
+       u8                      rf_path, index;
+       u32                     tmp1111 = 0;
+       u32                     tmp2222 = 0;
+
+       RT_TRACE(COMP_INIT, "====> rtl8192se_config_hw_for_load_fail\n");
+
+       for(;tmp2222<0xff;tmp2222+=4)
+       {
+               tmp1111= read_nic_dword(dev, tmp2222);
+       }
+
+       write_nic_byte(dev, SYS_ISO_CTRL+1, 0xE8); 
+       mdelay(10);
+       write_nic_byte(dev, PMC_FSM, 0x02); 
+       
+       priv->eeprom_vid= 0;
+       priv->eeprom_did= 0;            
+       priv->eeprom_ChannelPlan= 0;
+       priv->eeprom_CustomerID= 0;     
+
+       get_random_bytes(&sMacAddr[5], 1);
+       for(i = 0; i < 6; i++)
+               dev->dev_addr[i] = sMacAddr[i];                 
+
+
+       priv->rf_type= RTL819X_DEFAULT_RF_TYPE; 
+       priv->rf_chip = RF_6052;
+
+#if (EEPROM_OLD_FORMAT_SUPPORT == 1)
+       for(i=0; i<14; i++)
+       {
+               priv->EEPROMTxPowerLevelCCK[i] = (u8)(EEPROM_Default_TxPower & 0xff);
+               RT_TRACE(COMP_INIT, "CCK 2.4G Tx Pwr Index %d = 0x%02x\n", 
+               i, priv->EEPROMTxPowerLevelCCK[i]);
+       }                       
+
+       for(i=0; i<14; i++)
+       {
+               priv->EEPROMTxPowerLevelOFDM24G[i] = (u8)(EEPROM_Default_TxPower & 0xff);
+               RT_TRACE(COMP_INIT, "OFDM 2.4G Tx Pwr Index %d = 0x%02x\n", 
+               i, priv->EEPROMTxPowerLevelOFDM24G[i]);                         
+       }       
+
+       for(i=0; i<14; i++)
+       {                       
+               priv->TxPowerLevelOFDM24G[i] = priv->EEPROMTxPowerLevelOFDM24G[i];
+               priv->TxPowerLevelCCK[i] = priv->EEPROMTxPowerLevelCCK[i];
+       }       
+       for(i=0; i<6; i++)
+       {
+               priv->EEPROMHT2T_TxPwr[i] = EEPROM_Default_HT2T_TxPwr;
+       }
+       
+#else
+       for (rf_path = 0; rf_path < 2; rf_path++)
+       {
+               for (i = 0; i < 3; i++)
+               {
+                       priv->RfCckChnlAreaTxPwr[rf_path][i] = 
+                       priv->RfOfdmChnlAreaTxPwr1T[rf_path][i] = 
+                       priv->RfOfdmChnlAreaTxPwr2T[rf_path][i] = 
+                       EEPROM_Default_TxPowerLevel;
+               }
+       }       
+                               
+       for (rf_path = 0; rf_path < 2; rf_path++)
+       {
+               for(i=0; i<14; i++)     
+               {
+                       if (i < 3)                      
+                               index = 0;
+#ifdef _RTL8192_EXT_PATCH_     
+                       else if (i < 9)         
+#else
+                       else if (i < 8)         
+#endif
+                               index = 1;
+                       else                            
+                               index = 2;
+
+                       priv->RfTxPwrLevelCck[rf_path][i]  = 
+                       priv->RfCckChnlAreaTxPwr[rf_path][index] = 
+                       priv->RfTxPwrLevelOfdm1T[rf_path][i]  = 
+                       priv->RfOfdmChnlAreaTxPwr1T[rf_path][index] = 
+                       priv->RfTxPwrLevelOfdm2T[rf_path][i]  = 
+                       priv->RfOfdmChnlAreaTxPwr2T[rf_path][index] = 
+                       (u8)(EEPROM_Default_TxPower & 0xff);                            
+
+                       if (rf_path == 0)
+                       {
+                               priv->TxPowerLevelOFDM24G[i] = (u8)(EEPROM_Default_TxPower & 0xff);
+                               priv->TxPowerLevelCCK[i] = (u8)(EEPROM_Default_TxPower & 0xff);
+                       }
+               }
+               
+       }
+       
+       RT_TRACE(COMP_INIT, "All TxPwr = 0x%x\n", EEPROM_Default_TxPower);
+
+       for(i=0; i<14; i++)     
+       {                       
+               priv->TxPwrHt20Diff[RF90_PATH_A][i] = DEFAULT_HT20_TXPWR_DIFF;
+               priv->TxPwrHt20Diff[RF90_PATH_B][i] = DEFAULT_HT20_TXPWR_DIFF;
+
+               priv->TxPwrLegacyHtDiff[0][i] = EEPROM_Default_LegacyHTTxPowerDiff;
+               priv->TxPwrLegacyHtDiff[1][i] = EEPROM_Default_LegacyHTTxPowerDiff;
+       }
+       
+       priv->TxPwrSafetyFlag = 0;
+#endif
+       
+       priv->EEPROMTxPowerDiff = EEPROM_Default_LegacyHTTxPowerDiff;
+       priv->LegacyHTTxPowerDiff = priv->EEPROMTxPowerDiff;
+       RT_TRACE(COMP_INIT, "TxPowerDiff = %#x\n", priv->EEPROMTxPowerDiff);
+
+#ifndef _RTL8192_EXT_PATCH_    
+       for (rf_path = 0; rf_path < 2; rf_path++)
+       {
+               for (i = 0; i < 3; i++)
+               {
+                       priv->EEPROMPwrGroup[rf_path][i] = 0;
+               }
+       }
+
+       for (rf_path = 0; rf_path < 2; rf_path++)
+       {
+               for(i=0; i<14; i++)
+               {
+                       if (i < 3)                      
+                               index = 0;
+                       else if (i < 8)         
+                               index = 1;
+                       else                            
+                               index = 2;
+                       priv->PwrGroupHT20[rf_path][i] = (priv->EEPROMPwrGroup[rf_path][index]&0xf);
+                       priv->PwrGroupHT40[rf_path][i] = ((priv->EEPROMPwrGroup[rf_path][index]&0xf0)>>4);
+               }
+       }
+       priv->EEPROMRegulatory = 0;
+
+#endif
+
+       priv->EEPROMTSSI_A = EEPROM_Default_TSSI;
+       priv->EEPROMTSSI_B = EEPROM_Default_TSSI;                       
+
+       for(i=0; i<6; i++)
+       {
+               priv->EEPROMHT2T_TxPwr[i] = EEPROM_Default_HT2T_TxPwr;
+       }
+
+       
+       priv->EEPROMThermalMeter = EEPROM_Default_ThermalMeter;
+       priv->ThermalMeter[0] = (priv->EEPROMThermalMeter&0x1f);        
+       priv->TSSI_13dBm = priv->EEPROMThermalMeter *100;
+
+       priv->BluetoothCoexist = EEPROM_Default_BlueToothCoexist;
+       priv->EEPROMBluetoothType = EEPROM_Default_BlueToothType;
+       priv->EEPROMBluetoothAntNum = EEPROM_Default_BlueToothAntNum;
+       priv->EEPROMBluetoothAntIsolation = EEPROM_Default_BlueToothAntIso;
+       
+       priv->EEPROMCrystalCap = EEPROM_Default_CrystalCap;
+       priv->CrystalCap = priv->EEPROMCrystalCap;
+
+       priv->eeprom_ChannelPlan = 0;
+       priv->eeprom_version = 1;               
+       priv->bTXPowerDataReadFromEEPORM = false;
+
+       priv->rf_type = RTL819X_DEFAULT_RF_TYPE;        
+       priv->rf_chip = RF_6052;
+       priv->eeprom_CustomerID = 0;
+       RT_TRACE(COMP_INIT, "EEPROM Customer ID: 0x%2x\n", priv->eeprom_CustomerID);
+
+                       
+       priv->EEPROMBoardType = EEPROM_Default_BoardType;       
+       RT_TRACE(COMP_INIT, "BoardType = %#x\n", priv->EEPROMBoardType);
+
+#ifdef _RTL8192_EXT_PATCH_     
+       priv->LedStrategy = SW_LED_MODE0;
+#else
+       priv->LedStrategy = SW_LED_MODE7;
+#endif
+
+       
+       RT_TRACE(COMP_INIT,"<==== rtl8192se_config_hw_for_load_fail\n");
+}
+
+static void rtl8192se_get_IC_Inferiority(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       u8  Efuse_ID;
+
+       priv->IC_Class = IC_INFERIORITY_A; 
+       if((priv->epromtype == EEPROM_BOOT_EFUSE) && !priv->AutoloadFailFlag) 
+       {
+               Efuse_ID = EFUSE_Read1Byte(dev, EFUSE_IC_ID_OFFSET);
+
+               if(Efuse_ID == 0xfe)
+               {
+                       priv->IC_Class = IC_INFERIORITY_B;
+
+               }
+       }
+}
+
+#ifdef _RTL8192_EXT_PATCH_     
+void HalCustomizedBehavior8192S(struct net_device* dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       switch(priv->CustomerID)
+       {
+               case RT_CID_DEFAULT:
+                       priv->LedStrategy = SW_LED_MODE7;       
+                       if(     priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 &&
+                               priv->eeprom_svid == 0x1A3B && priv->eeprom_smid == 0x1A07)
+                       {
+                               priv->RegWirelessMode = WIRELESS_MODE_G;
+                       }
+                       else if(        priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8172 &&
+                                       priv->eeprom_svid == 0x1A3B && priv->eeprom_smid == 0x1A04)
+                       {
+                               priv->RegWirelessMode = WIRELESS_MODE_G;        
+                       }
+                       break;
+                       
+               case RT_CID_TOSHIBA:
+                       priv->rtllib->current_network.channel = 10;
+                       priv->LedStrategy = SW_LED_MODE7;               
+                       if(priv->eeprom_smid >= 0x7000 && priv->eeprom_smid < 0x8000)
+                               priv->RegWirelessMode = WIRELESS_MODE_G;
+                       break;
+
+               case RT_CID_CCX:
+                       priv->DMFlag |= (HAL_DM_DIG_DISABLE | HAL_DM_HIPWR_DISABLE);
+                       break;
+
+               case RT_CID_819x_Lenovo:
+                       priv->LedStrategy = SW_LED_MODE7;
+                       break;
+                       
+               case RT_CID_819x_QMI:
+                       priv->LedStrategy = SW_LED_MODE8;                       
+                       break;
+
+               case RT_CID_819x_MSI:   
+                       priv->LedStrategy = SW_LED_MODE9;                       
+                       break;          
+
+               case RT_CID_WHQL:
+                       break;
+       
+               default:
+                       RT_TRACE(COMP_INIT,"Unkown hardware Type \n");
+                       break;
+       }
+}
+#else  
+void
+HalCustomizedBehavior8192S(struct net_device* dev)
+{
+       struct r8192_priv* priv = rtllib_priv(dev);
+       priv->rtllib->bForcedShowRateStill = false;
+       switch(priv->CustomerID)
+       {
+               case RT_CID_DEFAULT:
+                       priv->LedStrategy = SW_LED_MODE7;
+                       if(     priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 &&
+                               priv->eeprom_svid == 0x1A3B && priv->eeprom_smid == 0x1A07)
+                       {
+                               priv->RegWirelessMode = WIRELESS_MODE_G;
+                               priv->rtllib->mode = WIRELESS_MODE_G;
+                               priv->rtllib->bForcedBgMode = true;
+                               priv->rtllib->bForcedShowRateStill = true;
+                       }
+                       else if(        priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8172 &&
+                                       priv->eeprom_svid == 0x1A3B && priv->eeprom_smid == 0x1A04)
+                       {
+                               priv->RegWirelessMode = WIRELESS_MODE_G;        
+                               priv->rtllib->mode = WIRELESS_MODE_G;
+                               priv->rtllib->bForcedBgMode = true;
+                               priv->rtllib->bForcedShowRateStill = true;
+                       }
+                       else if(priv->eeprom_svid == 0x1A3B && (priv->eeprom_smid == 0x1104 ||
+                               priv->eeprom_smid == 0x1107))
+                       {
+                               priv->rtllib->bForcedShowRateStill = true;
+                       }
+                       else if(priv->eeprom_vid == 0x10ec && priv->eeprom_did == 0x8171 &&
+                               priv->eeprom_svid == 0x10ec && priv->eeprom_smid == 0x7171){
+                                priv->RegWirelessMode = WIRELESS_MODE_G;       
+                                priv->rtllib->mode = WIRELESS_MODE_G;
+                               priv->rtllib->bForcedBgMode = true;
+                       }else if(priv->eeprom_vid == 0x10ec && priv->eeprom_did == 0x8174 &&
+                               priv->eeprom_svid == 0x10ec && priv->eeprom_smid == 0x7174){
+                                priv->RegWirelessMode = WIRELESS_MODE_G;       
+                                priv->RegWirelessMode = WIRELESS_MODE_G;       
+                                priv->rtllib->mode = WIRELESS_MODE_G;
+                       }else if(priv->eeprom_vid == 0x10ec && priv->eeprom_did == 0x8174 &&
+                               priv->eeprom_svid == 0x10ec && priv->eeprom_smid == 0x7150){
+                                priv->RegWirelessMode = WIRELESS_MODE_G;       
+                                priv->RegWirelessMode = WIRELESS_MODE_G;       
+                                priv->rtllib->mode = WIRELESS_MODE_G;
+                       }else if(priv->eeprom_vid == 0x10ec && priv->eeprom_did == 0x8172 &&
+                               priv->eeprom_svid == 0x10ec && priv->eeprom_smid == 0x7172){
+                                priv->RegWirelessMode = WIRELESS_MODE_G;       
+                                priv->RegWirelessMode = WIRELESS_MODE_G;       
+                                priv->rtllib->mode = WIRELESS_MODE_G;
+                       }else if(priv->eeprom_vid == 0x10ec && priv->eeprom_did == 0x8172 &&
+                               priv->eeprom_svid == 0x10ec && priv->eeprom_smid == 0x7186){
+                                priv->RegWirelessMode = WIRELESS_MODE_G;       
+                                priv->RegWirelessMode = WIRELESS_MODE_G;       
+                                priv->rtllib->mode = WIRELESS_MODE_G;
+                       }
+                       break;
+                       
+                       break;
+                       
+               case RT_CID_819x_Acer:
+                       priv->LedStrategy = SW_LED_MODE7;       
+                       break;
+                       
+               case RT_CID_TOSHIBA:
+                       priv->rtllib->current_network.channel = 10;
+                       priv->LedStrategy = SW_LED_MODE7;
+                       priv->EEPROMRegulatory = 1;             
+                       if(priv->eeprom_smid >=  0x7000 && priv->eeprom_smid < 0x8000){
+                               priv->RegWirelessMode = WIRELESS_MODE_G;
+                               priv->rtllib->mode = WIRELESS_MODE_G;
+                               priv->rtllib->bForcedBgMode = true;
+                       }
+                       break;
+               case RT_CID_CCX:
+                       priv->DMFlag |= (HAL_DM_DIG_DISABLE | HAL_DM_HIPWR_DISABLE);
+                       break;
+
+               case RT_CID_819x_Lenovo:
+                       priv->LedStrategy = SW_LED_MODE7;
+                       if(priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0xE025){
+                               priv->RegWirelessMode = WIRELESS_MODE_G;
+                                priv->RegWirelessMode = WIRELESS_MODE_G;       
+                                priv->rtllib->mode = WIRELESS_MODE_G;
+                       }
+                       break;
+
+               case RT_CID_819x_QMI:
+                       priv->LedStrategy = SW_LED_MODE8;                       
+                       if(priv->eeprom_svid == 0x1462 && priv->eeprom_smid == 0x897A){
+                               priv->RegWirelessMode = WIRELESS_MODE_G;
+                                priv->RegWirelessMode = WIRELESS_MODE_G;       
+                                priv->rtllib->mode = WIRELESS_MODE_G;
+                       }
+                       break;
+
+               case RT_CID_819x_MSI:   
+                       priv->LedStrategy = SW_LED_MODE9;                       
+                       break;
+
+               case RT_CID_819x_HP:
+                       priv->LedStrategy = SW_LED_MODE7;
+                       priv->bLedOpenDrain = true;
+                       
+               case RT_CID_WHQL:
+                       ;
+                       break;
+       
+               default:
+                       RT_TRACE(COMP_INIT,"Unkown hardware Type \n");
+                       break;
+       }
+}
+#endif
+
+static void rtl8192se_read_eeprom_info(struct net_device* dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       u16                     i,usValue;
+       u16                     EEPROMId;
+#if (EEPROM_OLD_FORMAT_SUPPORT == 1)
+       u8                      tmpBuffer[30];  
+#endif
+       u8                      tempval;
+       u8                      hwinfo[HWSET_MAX_SIZE_92S];
+       u8                      rf_path, index; 
+
+       RT_TRACE(COMP_INIT, "====> rtl8192se_read_eeprom_info\n");
+
+       if (priv->epromtype== EEPROM_93C46)
+       {       
+               write_nic_byte(dev, SYS_ISO_CTRL+1, 0xE8); 
+               mdelay(10);
+               write_nic_byte(dev, PMC_FSM, 0x02); 
+
+               RT_TRACE(COMP_INIT, "EEPROM\n");
+               for(i = 0; i < HWSET_MAX_SIZE_92S; i += 2)
+               {
+                       usValue = eprom_read(dev, (u16) (i>>1));
+                       *((u16*)(&hwinfo[i])) = usValue;                                        
+               }       
+       }
+       else if (priv->epromtype == EEPROM_BOOT_EFUSE)
+       {       
+               RT_TRACE(COMP_INIT, "EFUSE\n");
+
+               EFUSE_ShadowMapUpdate(dev);
+
+               memcpy( hwinfo, &priv->EfuseMap[EFUSE_INIT_MAP][0], HWSET_MAX_SIZE_92S);                
+       }
+
+
+       EEPROMId = *((u16 *)&hwinfo[0]);
+       if( EEPROMId != RTL8190_EEPROM_ID )
+       {
+               RT_TRACE(COMP_ERR, "EEPROM ID(%#x) is invalid!!\n", EEPROMId); 
+               priv->AutoloadFailFlag=true;
+       }
+       else
+       {
+               RT_TRACE(COMP_EPROM, "Autoload OK\n"); 
+               priv->AutoloadFailFlag=false;
+       }       
+
+       if (priv->AutoloadFailFlag == true)
+       {
+               rtl8192se_config_hw_for_load_fail(dev);
+               return;
+       }
+
+       rtl8192se_get_IC_Inferiority(dev);
+       
+       priv->eeprom_vid                = *(u16 *)&hwinfo[EEPROM_VID];
+       priv->eeprom_did         = *(u16 *)&hwinfo[EEPROM_DID];
+       priv->eeprom_svid               = *(u16 *)&hwinfo[EEPROM_SVID];
+       priv->eeprom_smid               = *(u16 *)&hwinfo[EEPROM_SMID];
+       priv->eeprom_version    = *(u16 *)&hwinfo[EEPROM_Version];
+
+       RT_TRACE(COMP_EPROM, "EEPROMId = 0x%4x\n", EEPROMId);
+       RT_TRACE(COMP_EPROM, "EEPROM VID = 0x%4x\n", priv->eeprom_vid);
+       RT_TRACE(COMP_EPROM, "EEPROM DID = 0x%4x\n", priv->eeprom_did);
+       RT_TRACE(COMP_EPROM, "EEPROM SVID = 0x%4x\n", priv->eeprom_svid);
+       RT_TRACE(COMP_EPROM, "EEPROM SMID = 0x%4x\n", priv->eeprom_smid);
+
+       priv->EEPROMOptional = *(u8 *)&hwinfo[EEPROM_Optional]; 
+       priv->ShowRateMode = 2;
+       priv->rtllib->bForcedShowRxRate = false;
+
+       if(priv->ShowRateMode == 0) {
+           if((priv->EEPROMOptional & BIT3) == 0x08/*0000_1000*/) {
+               priv->rtllib->bForcedShowRxRate = true;
+           }
+       } else if(priv->ShowRateMode == 2){
+                 priv->rtllib->bForcedShowRxRate = true;
+       }
+       
+       for(i = 0; i < 6; i += 2)
+       {
+               usValue = *(u16 *)&hwinfo[EEPROM_MAC_ADDR+i];
+               *((u16*)(&dev->dev_addr[i])) = usValue;
+       }
+       for (i=0;i<6;i++)
+               write_nic_byte(dev, MACIDR0+i, dev->dev_addr[i]);       
+
+       RT_TRACE(COMP_EPROM, "ReadAdapterInfo8192S(), Permanent Address = %02x-%02x-%02x-%02x-%02x-%02x\n", 
+       dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2], dev->dev_addr[3], 
+       dev->dev_addr[4], dev->dev_addr[5]);    
+
+#if (EEPROM_OLD_FORMAT_SUPPORT == 1)
+       for(i = 0; i < EEPROM_TX_PWR_INDEX_RANGE; i += 2)
+       {
+               usValue = *(u16 *)&hwinfo[EEPROM_TxPowerBase+i];
+               *((u16 *)(&tmpBuffer[i])) = usValue;                                    
+       }
+       for(i=0; i<14; i++)
+       {
+               priv->EEPROMTxPowerLevelCCK[i] = (u8)tmpBuffer[i];
+               priv->EEPROMTxPowerLevelOFDM24G[i] = (u8)tmpBuffer[i+14];
+       }
+               
+
+       for(i=0; i<14; i++)
+       {
+               priv->TxPowerLevelOFDM24G[i] = priv->EEPROMTxPowerLevelOFDM24G[i];
+               priv->TxPowerLevelCCK[i] = priv->EEPROMTxPowerLevelCCK[i];
+               
+               RT_TRACE(COMP_EPROM, "CH%d CCK Tx PWR IDX = 0x%02x\n", i, priv->EEPROMTxPowerLevelCCK[i]);
+               RT_TRACE(COMP_EPROM, "CH%d OFDM Tx PWR IDX = 0x%02x\n", i, priv->EEPROMTxPowerLevelOFDM24G[i]);
+       }
+
+       for(i = 0; i < 6; i += 2)
+       {
+               usValue = *(u16 *)&hwinfo[EEPROM_HT2T_CH1_A+i];
+               *((u16*)(&priv->EEPROMHT2T_TxPwr[i])) = usValue;
+       }               
+       for(i=0; i<6; i++)
+       {
+               RT_TRACE(COMP_EPROM, "EEPROMHT2T_TxPwr, Index %d = 0x%02x\n", i, priv->EEPROMHT2T_TxPwr[i]);                                    
+       }
+       
+#else  
+
+       for (rf_path = 0; rf_path < 2; rf_path++)
+       {
+               for (i = 0; i < 3; i++)
+               {
+                       priv->RfCckChnlAreaTxPwr[rf_path][i] = 
+                       hwinfo[EEPROM_TxPowerBase+rf_path*3+i];
+
+                       priv->RfOfdmChnlAreaTxPwr1T[rf_path][i] = 
+                       hwinfo[EEPROM_TxPowerBase+6+rf_path*3+i];
+
+                       priv->RfOfdmChnlAreaTxPwr2T[rf_path][i] = 
+                       hwinfo[EEPROM_TxPowerBase+12+rf_path*3+i];
+               }
+       }
+
+       for (rf_path = 0; rf_path < 2; rf_path++)
+       {
+               for (i = 0; i < 3; i++)
+               {
+                       RT_TRACE(COMP_EPROM,"CCK RF-%d CHan_Area-%d = 0x%x\n",  rf_path, i,
+                       priv->RfCckChnlAreaTxPwr[rf_path][i]);
+                       RT_TRACE(COMP_EPROM, "OFDM-1T RF-%d CHan_Area-%d = 0x%x\n",  rf_path, i,
+                       priv->RfOfdmChnlAreaTxPwr1T[rf_path][i]);
+                       RT_TRACE(COMP_EPROM,"OFDM-2T RF-%d CHan_Area-%d = 0x%x\n",  rf_path, i,
+                       priv->RfOfdmChnlAreaTxPwr2T[rf_path][i]);                       
+               }
+
+               for(i=0; i<14; i++)     
+               {
+                       if (i < 3)                      
+                               index = 0;
+#ifdef _RTL8192_EXT_PATCH_     
+                       else if (i < 9)         
+#else
+                       else if (i < 8)         
+#endif
+                               index = 1;
+                       else                            
+                               index = 2;
+
+                       priv->RfTxPwrLevelCck[rf_path][i]  = 
+                       priv->RfCckChnlAreaTxPwr[rf_path][index];
+                       priv->RfTxPwrLevelOfdm1T[rf_path][i]  = 
+                       priv->RfOfdmChnlAreaTxPwr1T[rf_path][index];
+                       priv->RfTxPwrLevelOfdm2T[rf_path][i]  = 
+                       priv->RfOfdmChnlAreaTxPwr2T[rf_path][index];
+
+                       if (rf_path == 0)
+                       {
+                               priv->TxPowerLevelOFDM24G[i] = priv->RfTxPwrLevelOfdm1T[rf_path][i] ;
+                               priv->TxPowerLevelCCK[i] = priv->RfTxPwrLevelCck[rf_path][i];                                   
+                    }
+               }
+
+               for(i=0; i<14; i++)
+               {
+                       RT_TRACE(COMP_EPROM, "Rf-%d TxPwr CH-%d CCK OFDM_1T OFDM_2T= 0x%x/0x%x/0x%x\n", 
+                       rf_path, i, priv->RfTxPwrLevelCck[rf_path][i], 
+                       priv->RfTxPwrLevelOfdm1T[rf_path][i] ,
+                       priv->RfTxPwrLevelOfdm2T[rf_path][i] );
+               }
+       }       
+
+#ifndef _RTL8192_EXT_PATCH_    
+       for (rf_path = 0; rf_path < 2; rf_path++)
+       {
+               for (i = 0; i < 3; i++)
+               {
+                       priv->EEPROMPwrGroup[rf_path][i] = hwinfo[EEPROM_TxPWRGroup+rf_path*3+i];
+               }
+       }
+
+       for (rf_path = 0; rf_path < 2; rf_path++)
+       {
+               for(i=0; i<14; i++)
+               {
+                       if (i < 3)                      
+                               index = 0;
+                       else if (i < 8)         
+                               index = 1;
+                       else                            
+                               index = 2;
+                       priv->PwrGroupHT20[rf_path][i] = (priv->EEPROMPwrGroup[rf_path][index]&0xf);
+                       priv->PwrGroupHT40[rf_path][i] = ((priv->EEPROMPwrGroup[rf_path][index]&0xf0)>>4);
+                       RT_TRACE(COMP_INIT, "RF-%d PwrGroupHT20[%d] = 0x%x\n", rf_path, i, priv->PwrGroupHT20[rf_path][i]);
+                       RT_TRACE(COMP_INIT, "RF-%d PwrGroupHT40[%d] = 0x%x\n", rf_path, i, priv->PwrGroupHT40[rf_path][i]);
+               }
+       }
+#endif
+
+       for(i=0; i<14; i++)     
+       {
+               if (i < 3)                      
+                       index = 0;
+#ifdef _RTL8192_EXT_PATCH_     
+                       else if (i < 9)         
+#else
+                       else if (i < 8)         
+#endif
+                       index = 1;
+               else                            
+                       index = 2;
+               
+               tempval = (*(u8 *)&hwinfo[EEPROM_TX_PWR_HT20_DIFF+index])&0xff;
+               priv->TxPwrHt20Diff[RF90_PATH_A][i] = (tempval&0xF);
+               priv->TxPwrHt20Diff[RF90_PATH_B][i] = ((tempval>>4)&0xF);
+
+               if (i < 3)                      
+                       index = 0;
+#ifdef _RTL8192_EXT_PATCH_     
+                       else if (i < 9)         
+#else
+                       else if (i < 8)         
+#endif
+                       index = 0x11;
+               else                            
+                       index = 1;
+
+               tempval = (*(u8 *)&hwinfo[EEPROM_TX_PWR_OFDM_DIFF+index])&0xff;
+               priv->TxPwrLegacyHtDiff[RF90_PATH_A][i] = (tempval&0xF);
+               priv->TxPwrLegacyHtDiff[RF90_PATH_B][i] = ((tempval>>4)&0xF);
+
+               tempval = (*(u8 *)&hwinfo[TX_PWR_SAFETY_CHK]);
+               priv->TxPwrSafetyFlag = (tempval&0x01);         
+       }
+       
+#ifndef _RTL8192_EXT_PATCH_    
+       priv->EEPROMRegulatory = 0;
+       if(priv->eeprom_version >= 2)
+       {
+               if(priv->eeprom_version >= 4)
+                       priv->EEPROMRegulatory = (hwinfo[EEPROM_Regulatory]&0x7);       
+               else
+                       priv->EEPROMRegulatory = (hwinfo[EEPROM_Regulatory]&0x1);       
+       }
+       RT_TRACE(COMP_INIT, "EEPROMRegulatory = 0x%x\n", priv->EEPROMRegulatory);
+#endif
+       for(i=0; i<14; i++)
+               RT_TRACE(COMP_EPROM, "RF-A Ht20 to HT40 Diff[%d] = 0x%x\n", i, priv->TxPwrHt20Diff[RF90_PATH_A][i]);
+       for(i=0; i<14; i++)
+               RT_TRACE(COMP_EPROM, "RF-A Legacy to Ht40 Diff[%d] = 0x%x\n", i, priv->TxPwrLegacyHtDiff[RF90_PATH_A][i]);
+       for(i=0; i<14; i++)
+               RT_TRACE(COMP_EPROM, "RF-B Ht20 to HT40 Diff[%d] = 0x%x\n", i, priv->TxPwrHt20Diff[RF90_PATH_B][i]);
+       for(i=0; i<14; i++)
+               RT_TRACE(COMP_EPROM, "RF-B Legacy to HT40 Diff[%d] = 0x%x\n", i, priv->TxPwrLegacyHtDiff[RF90_PATH_B][i]);
+#endif 
+       RT_TRACE(COMP_EPROM, "TxPwrSafetyFlag = %d\n", priv->TxPwrSafetyFlag);
+
+       tempval = (*(u8 *)&hwinfo[EEPROM_RFInd_PowerDiff])&0xff;
+       priv->EEPROMTxPowerDiff = tempval;      
+#ifdef _RTL8192_EXT_PATCH_     
+       priv->LegacyHTTxPowerDiff = priv->EEPROMTxPowerDiff;
+#else
+       priv->LegacyHTTxPowerDiff = priv->TxPwrLegacyHtDiff[RF90_PATH_A][0];
+#endif
+
+       RT_TRACE(COMP_EPROM, "TxPowerDiff = %#x\n", priv->EEPROMTxPowerDiff);
+
+       usValue = *(u16 *)&hwinfo[EEPROM_TSSI_A];
+       priv->EEPROMTSSI_A = (u8)((usValue&0xff00)>>8);
+       usValue = *(u8 *)&hwinfo[EEPROM_TSSI_B];
+       priv->EEPROMTSSI_B = (u8)(usValue&0xff);
+       RT_TRACE(COMP_EPROM, "TSSI_A = %#x, TSSI_B = %#x\n", 
+                       priv->EEPROMTSSI_A, priv->EEPROMTSSI_B);
+               
+       tempval = *(u8 *)&hwinfo[EEPROM_ThermalMeter];
+       priv->EEPROMThermalMeter = tempval;                     
+       RT_TRACE(COMP_EPROM, "ThermalMeter = %#x\n", priv->EEPROMThermalMeter);
+       priv->ThermalMeter[0] =(priv->EEPROMThermalMeter&0x1f);
+       priv->TSSI_13dBm = priv->EEPROMThermalMeter *100;
+       
+       tempval = *(u8 *)&hwinfo[EEPROM_BLUETOOTH_COEXIST];
+       priv->EEPROMBluetoothCoexist = ((tempval&0x2)>>1);      
+       priv->BluetoothCoexist = priv->EEPROMBluetoothCoexist;
+       tempval = hwinfo[EEPROM_BLUETOOTH_TYPE];
+       priv->EEPROMBluetoothType = ((tempval&0xe)>>1);
+       priv->EEPROMBluetoothAntNum = (tempval&0x1);
+       priv->EEPROMBluetoothAntIsolation = ((tempval&0x10)>>4);
+       RT_TRACE(COMP_EPROM, "BlueTooth Coexistance = %#x\n", priv->BluetoothCoexist);
+
+#ifdef MERGE_TO_DO
+       BT_VAR_INIT(Adapter);
+
+       tempval = hwinfo[EEPROM_WoWLAN];
+       priv->EEPROMSupportWoWLAN = ((tempval&0x4)>>2); 
+       if (priv->EEPROMSupportWoWLAN)
+               priv->bHwSupportRemoteWakeUp = true;
+       else
+               priv->bHwSupportRemoteWakeUp = false;
+#endif
+#ifdef RTL8192S_WAPI_SUPPORT
+       tempval = *(u8 *)&hwinfo[EEPROM_WAPI_SUPPORT];
+       priv->EEPROMWapiSupport = ((tempval&0x10)>>4);  
+       priv->EEPROMWapiSupport = 1;
+
+       priv->WapiSupport = priv->EEPROMWapiSupport;
+       priv->rtllib->WapiSupport = priv->WapiSupport;          
+       RT_TRACE(COMP_EPROM, "WAPI Support = %#x\n", priv->WapiSupport);
+#endif
+
+       tempval = (*(u8 *)&hwinfo[EEPROM_CrystalCap])>>4;
+       priv->EEPROMCrystalCap =tempval;                
+       RT_TRACE(COMP_EPROM, "CrystalCap = %#x\n", priv->EEPROMCrystalCap);
+       priv->CrystalCap = priv->EEPROMCrystalCap;      
+       
+       priv->eeprom_ChannelPlan = *(u8 *)&hwinfo[EEPROM_ChannelPlan];
+#ifdef _RTL8192_EXT_PATCH_     
+       priv->eeprom_version = *(u16 *)&hwinfo[EEPROM_Version];
+#endif
+       priv->bTXPowerDataReadFromEEPORM = true;
+       RT_TRACE(COMP_EPROM, "EEPROM ChannelPlan = 0x%4x\n", priv->eeprom_ChannelPlan);
+       
+       tempval = *(u8*)&hwinfo[EEPROM_BoardType];  
+       if (tempval == 0)       
+               priv->rf_type= RF_2T2R;
+       else if (tempval == 1)   
+               priv->rf_type = RF_1T2R;
+       else if (tempval == 2)   
+               priv->rf_type = RF_1T2R;
+       else if (tempval == 3)   
+               priv->rf_type = RF_1T1R;
+
+       priv->rtllib->RF_Type = priv->rf_type;
+       priv->rtllib->b1x1RecvCombine = false;
+       if (priv->rf_type == RF_1T2R)
+       {
+               tempval = read_nic_byte(dev, 0x07);
+               if (!(tempval & BIT0))
+               {
+                       priv->rtllib->b1x1RecvCombine = true;
+                       RT_TRACE(COMP_INIT, "RF_TYPE=1T2R but only 1SS\n");
+               }
+       }
+       priv->rtllib->b1SSSupport =     priv->rtllib->b1x1RecvCombine;
+       
+       priv->rf_chip = RF_6052;
+
+       priv->eeprom_CustomerID = *(u8 *)&hwinfo[EEPROM_CustomID];
+
+       RT_TRACE(COMP_EPROM, "EEPROM Customer ID: 0x%2x, rf_chip:%x\n", priv->eeprom_CustomerID, priv->rf_chip);
+       
+       priv->rtllib->b_customer_lenovo_id = false;
+       
+       switch(priv->eeprom_CustomerID)
+       {       
+               case EEPROM_CID_DEFAULT:
+                       if(priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0xE020){
+                               priv->CustomerID = RT_CID_819x_Lenovo;  
+                               priv->rtllib->b_customer_lenovo_id = true;
+                        }
+                       else if(priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0xE025)
+                                       priv->CustomerID = RT_CID_819x_Lenovo;
+                       else if(priv->eeprom_svid == 0x1A32 && priv->eeprom_smid == 0x4308)
+                                       priv->CustomerID = RT_CID_819x_QMI;                                                                                     
+                       else if(priv->eeprom_svid == 0x1A32 && priv->eeprom_smid == 0x0311)
+                                       priv->CustomerID = RT_CID_819x_QMI;
+                       else if(priv->eeprom_svid == 0x1462 && priv->eeprom_smid == 0x6897)
+                               priv->CustomerID = RT_CID_819x_MSI;
+                       else if(priv->eeprom_svid == 0x1462 && priv->eeprom_smid == 0x3821)
+                               priv->CustomerID = RT_CID_819x_MSI;                     
+                       else if(priv->eeprom_svid == 0x1462 && priv->eeprom_smid == 0x897A)
+                               priv->CustomerID = RT_CID_819x_MSI;
+                       else if(        priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 &&
+                                       priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8156)
+                               priv->CustomerID = RT_CID_819x_Acer;
+                       else if(        priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 &&
+                                       priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8157)
+                               priv->CustomerID = RT_CID_819x_Acer;
+                       else if(        priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8172 &&
+                                       priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0xE021)
+                               priv->CustomerID = RT_CID_819x_Acer;
+                       else if(        priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8172 &&
+                                       priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0xE022)
+                               priv->CustomerID = RT_CID_819x_Acer;
+                       else if(        priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8172 &&
+                                       priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8158)
+                               priv->CustomerID = RT_CID_819x_Acer;
+                       else if(        priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8172 &&
+                                       priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8159)
+                               priv->CustomerID = RT_CID_819x_Acer;
+                       else if(        priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8174 &&
+                                       priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8186)
+                               priv->CustomerID = RT_CID_819x_Acer;
+                       else if(        priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8174 &&
+                                       priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8187)
+                               priv->CustomerID = RT_CID_819x_Acer;
+                               else if(        priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8174 &&
+                                       priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8156)
+                               priv->CustomerID = RT_CID_819x_Acer;
+                       else if(        priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8174 &&
+                                       priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8157)
+                               priv->CustomerID = RT_CID_819x_Acer;
+                       else if(        priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 &&
+                                       priv->eeprom_svid == 0x103C && priv->eeprom_smid == 0x1467)
+                        priv->CustomerID = RT_CID_819x_HP;
+                       else
+                       priv->CustomerID = RT_CID_DEFAULT;
+                       break;
+                       
+               case EEPROM_CID_TOSHIBA:       
+                       priv->CustomerID = RT_CID_TOSHIBA;
+                       break;
+
+               case EEPROM_CID_QMI:
+                       priv->CustomerID = RT_CID_819x_QMI;
+                       break;
+                       
+               case EEPROM_CID_WHQL:
+#ifdef TO_DO_LIST                      
+                       priv->bInHctTest = true;
+                       priv->bSupportTurboMode = false;
+                       priv->bAutoTurboBy8186 = false;
+                       priv->PowerSaveControl.bInactivePs = false;
+                       priv->PowerSaveControl.bIPSModeBackup = false;
+                       priv->PowerSaveControl.bLeisurePs = false;
+                       priv->keepAliveLevel = 0;       
+                       priv->bUnloadDriverwhenS3S4 = false;
+#endif
+                       break;
+                               
+               default:
+                       priv->CustomerID = RT_CID_DEFAULT;
+                       break;
+                               
+       }
+       
+#ifdef _RTL8192_EXT_PATCH_     
+       HalCustomizedBehavior8192S(dev);
+#endif
+
+#if defined (RTL8192S_WAPI_SUPPORT)
+       if (priv->rtllib->WapiSupport)
+       {
+            WapiInit(priv->rtllib);
+       }
+#endif 
+       RT_TRACE(COMP_INIT, "<==== rtl8192se_read_eeprom_info\n");
+}
+
+void rtl8192se_get_eeprom_size(struct net_device* dev)
+{
+       struct r8192_priv* priv = rtllib_priv(dev);
+       u8 curCR = 0;
+       curCR = read_nic_byte(dev, EPROM_CMD);
+       PHY_RFShadowRefresh(dev);
+       if (curCR & BIT4){
+               RT_TRACE(COMP_EPROM, "Boot from EEPROM\n");
+               priv->epromtype = EEPROM_93C46;
+       }
+       else{
+               RT_TRACE(COMP_EPROM, "Boot from EFUSE\n");
+               priv->epromtype = EEPROM_BOOT_EFUSE;
+       }
+       if (curCR & BIT5){
+               RT_TRACE(COMP_EPROM,"Autoload OK\n"); 
+               priv->AutoloadFailFlag=false;           
+               rtl8192se_read_eeprom_info(dev);
+       }
+       else{
+               RT_TRACE(COMP_INIT, "AutoLoad Fail reported from CR9346!!\n"); 
+               priv->AutoloadFailFlag=true;            
+               rtl8192se_config_hw_for_load_fail(dev);         
+
+               if (priv->epromtype == EEPROM_BOOT_EFUSE)
+               {
+#if (RTL92SE_FPGA_VERIFY == 0)
+                       EFUSE_ShadowMapUpdate(dev);
+#endif
+               }
+       }                       
+#ifdef TO_DO_LIST
+       if(Adapter->bInHctTest)
+       {
+               pMgntInfo->PowerSaveControl.bInactivePs = false;
+               pMgntInfo->PowerSaveControl.bIPSModeBackup = false;
+               pMgntInfo->PowerSaveControl.bLeisurePs = false;
+               pMgntInfo->keepAliveLevel = 0;
+       }
+       
+       switch(pHalData->eeprom_CustomerID)
+       {
+               case EEPROM_CID_DEFAULT:
+                       pMgntInfo->CustomerID = RT_CID_DEFAULT;
+                       break;
+               case EEPROM_CID_TOSHIBA:       
+                       pMgntInfo->CustomerID = RT_CID_TOSHIBA;
+                       break;
+               default:
+                       break;
+       }
+       
+#ifdef _RTL8192_EXT_PATCH_     
+       if(pHalData->eeprom_svid == 0x10EC && pHalData->eeprom_smid == 0xE020)
+#else
+       if(pHalData->EEPROMSVID == 0x10EC && pHalData->EEPROMSMID == 0xE020)
+#endif
+               pMgntInfo->CustomerID = RT_CID_819x_Lenovo;
+#endif 
+#ifdef ENABLE_DOT11D
+       priv->ChannelPlan = COUNTRY_CODE_WORLD_WIDE_13;
+
+       if(priv->ChannelPlan == COUNTRY_CODE_GLOBAL_DOMAIN) {
+               GET_DOT11D_INFO(priv->rtllib)->bEnabled = 1;
+               RT_TRACE(COMP_INIT, "%s: Enable dot11d when RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN!\n", __FUNCTION__);
+       }
+#endif
+       
+       RT_TRACE(COMP_INIT, "RegChannelPlan(%d) EEPROMChannelPlan(%d)", \
+                       priv->RegChannelPlan, priv->eeprom_ChannelPlan);
+       RT_TRACE(COMP_INIT, "ChannelPlan = %d\n" , priv->ChannelPlan);
+#ifndef _RTL8192_EXT_PATCH_    
+       HalCustomizedBehavior8192S(dev);
+#endif
+}
+
+#if (RTL92SE_FPGA_VERIFY == 1)
+static void MacConfigBeforeFwDownload(struct net_device* dev)
+{
+       struct r8192_priv* priv = rtllib_priv(dev);
+       u8                              i;
+       u8                              tmpU1b;
+       u16                             tmpU2b;
+       u32                             addr;
+       
+       RT_TRACE(COMP_INIT, "Set some register before enable NIC\r\n");
+
+       tmpU1b = read_nic_byte(dev, 0x562);
+       tmpU1b |= 0x08;
+       write_nic_byte(dev, 0x562, tmpU1b);
+       tmpU1b &= ~(BIT3);
+       write_nic_byte(dev, 0x562, tmpU1b);
+       
+       tmpU1b = read_nic_byte(dev, SYS_FUNC_EN+1);
+       tmpU1b &= 0x73;
+       write_nic_byte(dev, SYS_FUNC_EN+1, tmpU1b);
+
+       tmpU1b = read_nic_byte(dev, SYS_CLKR);  
+       tmpU1b &= 0xfa;
+       write_nic_byte(dev, SYS_CLKR, tmpU1b);
+
+       RT_TRACE(COMP_INIT, "Delay 1000ms before reset NIC. I dont know how long should we delay!!!!!\r\n");    
+       ssleep(1);
+
+       write_nic_byte(dev, SYS_CLKR, SYS_CLKSEL_80M);
+       
+       tmpU1b = read_nic_byte(dev, SPS1_CTRL); 
+       write_nic_byte(dev, SPS1_CTRL, (tmpU1b|SPS1_LDEN));
+       
+       tmpU1b = read_nic_byte(dev, AFE_MISC);  
+       write_nic_byte(dev, AFE_MISC, (tmpU1b|AFE_BGEN));
+
+       tmpU1b = read_nic_byte(dev, LDOA15_CTRL);       
+       write_nic_byte(dev, LDOA15_CTRL, (tmpU1b|LDA15_EN));
+
+       tmpU1b = read_nic_byte(dev, SPS1_CTRL); 
+       write_nic_byte(dev, SPS1_CTRL, (tmpU1b|SPS1_SWEN));
+
+       tmpU1b = read_nic_byte(dev, AFE_MISC);  
+       write_nic_byte(dev, AFE_MISC, (tmpU1b|AFE_MBEN));
+
+       tmpU2b = read_nic_word(dev, SYS_ISO_CTRL);      
+       write_nic_word(dev, SYS_ISO_CTRL, (tmpU2b|ISO_PWC_DV2RP));
+
+       tmpU2b = read_nic_word(dev, SYS_ISO_CTRL);      
+       write_nic_word(dev, SYS_ISO_CTRL, (tmpU2b &(~ISO_PWC_RV2RP)));
+
+       tmpU2b = read_nic_word(dev, AFE_XTAL_CTRL);     
+       write_nic_word(dev, AFE_XTAL_CTRL, (tmpU2b &(~XTAL_GATE_AFE)));
+
+       tmpU1b = read_nic_byte(dev, AFE_PLL_CTRL);      
+       write_nic_byte(dev, AFE_PLL_CTRL, (tmpU1b|APLL_EN));
+
+       write_nic_byte(dev, SYS_ISO_CTRL, 0xEE);
+
+       tmpU2b = read_nic_word(dev, SYS_CLKR);  
+       write_nic_word(dev, SYS_CLKR, (tmpU2b|SYS_MAC_CLK_EN));
+
+       tmpU2b = read_nic_word(dev, SYS_FUNC_EN);       
+       write_nic_word(dev, SYS_FUNC_EN, (tmpU2b|FEN_DCORE|FEN_MREGEN));
+
+       tmpU2b = read_nic_word(dev, SYS_CLKR);  
+       write_nic_word(dev, SYS_CLKR, ((tmpU2b|SYS_FWHW_SEL)&(~SYS_SWHW_SEL)));
+
+       write_nic_byte(dev, RF_CTRL, 0);
+       write_nic_byte(dev, RF_CTRL, 7);
+
+       write_nic_word(dev, CMDR, 0x37FC);      
+       
+#if 1
+       write_nic_byte(dev, 0x6, 0x30);
+       write_nic_byte(dev, 0x49, 0xf0);
+
+       write_nic_byte(dev, 0x4b, 0x81);
+
+       write_nic_byte(dev, 0xb5, 0x21);
+
+       write_nic_byte(dev, 0xdc, 0xff);
+       write_nic_byte(dev, 0xdd, 0xff);        
+       write_nic_byte(dev, 0xde, 0xff);
+       write_nic_byte(dev, 0xdf, 0xff);
+
+       write_nic_byte(dev, 0x11a, 0x00);
+       write_nic_byte(dev, 0x11b, 0x00);
+
+       for (i = 0; i < 32; i++)
+               write_nic_byte(dev, INIMCS_SEL+i, 0x1b);        
+
+       write_nic_byte(dev, 0x236, 0xff);
+       
+       write_nic_byte(dev, 0x503, 0x22);
+
+       if(priv->bIntelBridgeExist) {
+               write_nic_byte(dev, 0x560, 0x40);
+#ifndef _RTL8192_EXT_PATCH_    
+       } else {
+               write_nic_byte(dev, 0x560, 0x00);
+#endif
+       }
+
+       write_nic_byte(dev, DBG_PORT, 0x91);    
+#endif
+
+#ifdef CONFIG_RX_CMD 
+       write_nic_dword(dev, RCDA, priv->rx_ring_dma[RX_CMD_QUEUE]);
+#endif
+       write_nic_dword(dev, RDQDA, priv->rx_ring_dma[RX_MPDU_QUEUE]);
+       rtl8192_tx_enable(dev);
+       
+       RT_TRACE(COMP_INIT, "<---MacConfig8192SE()\n");
+
+}      /* MacConfigBeforeFwDownload */
+#else
+void gen_RefreshLedState(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       PLED_8190 pLed0 = &(priv->SwLed0);      
+
+       if(priv->bfirst_init)
+       {
+               RT_TRACE(COMP_INIT, "gen_RefreshLedState first init\n");
+               return;
+       }
+
+       if(priv->rtllib->RfOffReason == RF_CHANGE_BY_IPS )
+       {
+               SwLedOn(dev, pLed0);
+       }
+       else            
+       {
+               SwLedOff(dev, pLed0);           
+       }
+
+}      
+static void MacConfigBeforeFwDownload(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);     
+       u8                              i;
+       u8                              tmpU1b;
+       u16                             tmpU2b;
+       u8                              PollingCnt = 20;
+
+       RT_TRACE(COMP_INIT, "--->MacConfigBeforeFwDownload()\n");
+
+       if(priv->bfirst_init)
+       {
+               tmpU1b = read_nic_byte(dev, SYS_FUNC_EN+1);
+               tmpU1b &= 0xFE;
+               write_nic_byte(dev, SYS_FUNC_EN+1, tmpU1b);
+               udelay(1);
+               write_nic_byte(dev, SYS_FUNC_EN+1, tmpU1b|BIT0);
+       }
+
+       tmpU1b = read_nic_byte(dev, (SYS_CLKR + 1));
+       if(tmpU1b & BIT7)
+       {
+               tmpU1b &= ~(BIT6 | BIT7);
+               if(!HalSetSysClk8192SE(dev, tmpU1b))
+                       return; 
+       }
+
+#ifdef MERGE_TO_DO
+       if( (pHalData->bt_coexist.BluetoothCoexist) &&
+               (pHalData->bt_coexist.BT_CoexistType == BT_CSR) )
+       {
+               write_nic_byte(dev, AFE_PLL_CTRL, 0x0);
+               udelay(50);
+               write_nic_byte(dev, LDOA15_CTRL, 0x34);
+               udelay(50);
+       }
+       else
+#endif
+       {
+        write_nic_byte(dev, AFE_PLL_CTRL, 0x0);
+               udelay(50);
+               write_nic_byte(dev, LDOA15_CTRL, 0x34);
+               udelay(50);
+       }
+       
+
+       write_nic_byte(dev, RPWM, 0x0);
+
+       tmpU1b = read_nic_byte(dev, SYS_FUNC_EN+1);
+       tmpU1b &= 0x73;
+       write_nic_byte(dev, SYS_FUNC_EN+1, tmpU1b);
+       mdelay(1);
+       
+       write_nic_byte(dev, CMDR, 0);
+       write_nic_byte(dev, TCR, 0);
+
+#if (DEMO_BOARD_SUPPORT == 0)
+       tmpU1b = read_nic_byte(dev, SPS1_CTRL);
+       tmpU1b &= 0xfc;
+       write_nic_byte(dev, SPS1_CTRL, tmpU1b);
+#endif
+
+       tmpU1b = read_nic_byte(dev, 0x562);
+       tmpU1b |= 0x08;
+       write_nic_byte(dev, 0x562, tmpU1b);
+       tmpU1b &= ~(BIT3);
+       write_nic_byte(dev, 0x562, tmpU1b);
+       
+
+
+       
+
+       RT_TRACE(COMP_INIT, "Enable AFE clock source\r\n");     
+       tmpU1b = read_nic_byte(dev, AFE_XTAL_CTRL);     
+       write_nic_byte(dev, AFE_XTAL_CTRL, (tmpU1b|0x01));
+       udelay(2000);   
+       tmpU1b = read_nic_byte(dev, AFE_XTAL_CTRL+1);   
+       write_nic_byte(dev, AFE_XTAL_CTRL+1, (tmpU1b&0xfb));
+
+
+       RT_TRACE(COMP_INIT, "Enable AFE Macro Block's Bandgap\r\n");    
+       tmpU1b = read_nic_byte(dev, AFE_MISC);  
+       write_nic_byte(dev, AFE_MISC, (tmpU1b|BIT0));
+       mdelay(1);
+
+       RT_TRACE(COMP_INIT, "Enable AFE Mbias\r\n");    
+       tmpU1b = read_nic_byte(dev, AFE_MISC);  
+       write_nic_byte(dev, AFE_MISC, (tmpU1b|0x02));
+       mdelay(1);
+       
+       tmpU1b = read_nic_byte(dev, LDOA15_CTRL);       
+       write_nic_byte(dev, LDOA15_CTRL, (tmpU1b|BIT0));
+
+
+
+       tmpU2b = read_nic_word(dev, SYS_ISO_CTRL);      
+       write_nic_word(dev, SYS_ISO_CTRL, (tmpU2b|BIT11));
+
+
+       tmpU2b = read_nic_word(dev, SYS_FUNC_EN);
+#ifdef _RTL8192_EXT_PATCH_     
+       write_nic_word(dev, SYS_FUNC_EN, tmpU2b |= BIT13);
+#else
+       write_nic_word(dev, SYS_FUNC_EN, (tmpU2b |BIT13));
+#endif
+
+
+       write_nic_byte(dev, SYS_ISO_CTRL+1, 0x68);
+
+       udelay(200);
+       tmpU1b = read_nic_byte(dev, AFE_PLL_CTRL);      
+       write_nic_byte(dev, AFE_PLL_CTRL, (tmpU1b|BIT0|BIT4));
+
+#if 1 
+       udelay(100);
+       write_nic_byte(dev, AFE_PLL_CTRL, (tmpU1b|BIT0|BIT4|BIT6));
+       udelay(10);
+       write_nic_byte(dev, AFE_PLL_CTRL, (tmpU1b|BIT0|BIT4));
+       udelay(10);
+#endif
+       tmpU1b = read_nic_byte(dev, AFE_PLL_CTRL+1);    
+       write_nic_byte(dev, AFE_PLL_CTRL+1, (tmpU1b|BIT0));
+       mdelay(1);
+
+       write_nic_byte(dev, SYS_ISO_CTRL, 0xA6);
+
+       tmpU2b = read_nic_word(dev, SYS_CLKR);  
+       write_nic_word(dev, SYS_CLKR, (tmpU2b|BIT12|BIT11));
+
+       tmpU2b = read_nic_word(dev, SYS_FUNC_EN);       
+       write_nic_word(dev, SYS_FUNC_EN, (tmpU2b|BIT11));
+
+       tmpU1b = read_nic_byte(dev, SYS_FUNC_EN+1);
+       write_nic_byte(dev, SYS_FUNC_EN+1, tmpU1b&~(BIT7));
+       
+       write_nic_word(dev, SYS_FUNC_EN, (tmpU2b|BIT11|BIT15));
+
+        tmpU2b = read_nic_word(dev, SYS_CLKR); 
+       write_nic_word(dev, SYS_CLKR, (tmpU2b&(~BIT2)));
+
+       tmpU1b = read_nic_byte(dev, (SYS_CLKR + 1));
+       tmpU1b = ((tmpU1b | BIT7) & (~BIT6));
+       if(!HalSetSysClk8192SE(dev, tmpU1b))
+               return; 
+
+#if 0  
+       tmpU2b = read_nic_word(dev, SYS_CLKR);  
+       write_nic_word(dev, SYS_CLKR, ((tmpU2b|BIT15)&(~BIT14)));
+#endif
+
+       write_nic_word(dev, CMDR, 0x07FC);
+       
+#if 1
+       write_nic_byte(dev, 0x6, 0x30);
+       write_nic_byte(dev, 0x49, 0xf0);
+
+       write_nic_byte(dev, 0x4b, 0x81);
+
+       write_nic_byte(dev, 0xb5, 0x21);
+
+       write_nic_byte(dev, 0xdc, 0xff);
+       write_nic_byte(dev, 0xdd, 0xff);        
+       write_nic_byte(dev, 0xde, 0xff);
+       write_nic_byte(dev, 0xdf, 0xff);
+
+       write_nic_byte(dev, 0x11a, 0x00);
+       write_nic_byte(dev, 0x11b, 0x00);
+
+       for (i = 0; i < 32; i++)
+               write_nic_byte(dev, INIMCS_SEL+i, 0x1b);        
+
+       write_nic_byte(dev, 0x236, 0xff);
+       
+       write_nic_byte(dev, 0x503, 0x22);
+       if (priv->pci_bridge_vendor & (PCI_BRIDGE_VENDOR_INTEL | PCI_BRIDGE_VENDOR_SIS)) {
+               write_nic_byte(dev, 0x560, 0x40);
+       } else {
+               write_nic_byte(dev, 0x560, 0x00);
+       }
+
+       write_nic_byte(dev, DBG_PORT, 0x91);    
+#endif
+
+       write_nic_dword(dev, RDQDA, priv->rx_ring_dma[RX_MPDU_QUEUE]);
+#ifdef CONFIG_RX_CMD
+       write_nic_dword(dev, RCDA, priv->rx_ring_dma[RX_CMD_QUEUE]);
+#endif 
+       rtl8192_tx_enable(dev);
+
+       write_nic_word(dev, CMDR, 0x37FC);
+       do {
+               tmpU1b = read_nic_byte(dev, TCR);
+               if((tmpU1b & TXDMA_INIT_VALUE) == TXDMA_INIT_VALUE)
+                       break;  
+
+               udelay(5);
+       } while(PollingCnt--);  
+       
+       if(PollingCnt <= 0 )
+       {
+               RT_TRACE(COMP_ERR, "MacConfigBeforeFwDownloadASIC(): Polling TXDMA_INIT_VALUE timeout!! Current TCR(%#x)\n", tmpU1b);
+               tmpU1b = read_nic_byte(dev, CMDR);                      
+               write_nic_byte(dev, CMDR, tmpU1b&(~TXDMA_EN));
+               udelay(2);
+               write_nic_byte(dev, CMDR, tmpU1b|TXDMA_EN);
+       }
+
+       gen_RefreshLedState(dev);
+
+       RT_TRACE(COMP_INIT, "<---MacConfigBeforeFwDownload()\n");
+
+}      /* MacConfigBeforeFwDownload */
+#endif
+
+static void MacConfigAfterFwDownload(struct net_device* dev)
+{
+       u8                              i;
+       u16                             tmpU2b;
+       struct r8192_priv* priv = rtllib_priv(dev);
+
+       
+#ifdef _RTL8192_EXT_PATCH_     
+       write_nic_word(dev, CMDR, 
+       BBRSTn|BB_GLB_RSTn|SCHEDULE_EN|MACRXEN|MACTXEN|DDMA_EN|FW2HW_EN|
+       RXDMA_EN|TXDMA_EN|HCI_RXDMA_EN|HCI_TXDMA_EN);
+#else
+       write_nic_byte(dev, CMDR, 
+       (u8)(BBRSTn|BB_GLB_RSTn|SCHEDULE_EN|MACRXEN|MACTXEN|DDMA_EN|FW2HW_EN|
+       RXDMA_EN|TXDMA_EN|HCI_RXDMA_EN|HCI_TXDMA_EN));
+#endif
+       write_nic_dword(dev, TCR, 
+       read_nic_dword(dev, TCR)|TXDMAPRE2FULL);
+       write_nic_dword(dev, RCR, priv->ReceiveConfig);
+
+#if 0
+       for (i=0;i<6;i++)
+       write_nic_byte(dev, MACIDR0+i, dev->dev_addr[i]);       
+#endif
+       write_nic_word(dev, SIFS_CCK, 0x0a0a); 
+       write_nic_word(dev, SIFS_OFDM, 0x1010);
+       write_nic_byte(dev, ACK_TIMEOUT, 0x40);
+       
+       write_nic_word(dev, BCN_INTERVAL, 100);
+       write_nic_word(dev, ATIMWND, 2);        
+#ifdef _ENABLE_SW_BEACON
+        write_nic_word(dev, BCN_DRV_EARLY_INT, BIT15);
+#endif        
+
+#if 0
+       write_nic_dword(dev, RQPN1,  
+       NUM_OF_PAGE_IN_FW_QUEUE_BK<<0 | NUM_OF_PAGE_IN_FW_QUEUE_BE<<8 |\
+       NUM_OF_PAGE_IN_FW_QUEUE_VI<<16 | NUM_OF_PAGE_IN_FW_QUEUE_VO<<24);                                                                                               
+       write_nic_dword(dev, RQPN2, 
+       NUM_OF_PAGE_IN_FW_QUEUE_HCCA << 0 | NUM_OF_PAGE_IN_FW_QUEUE_CMD << 8|\
+       NUM_OF_PAGE_IN_FW_QUEUE_MGNT << 16 |NUM_OF_PAGE_IN_FW_QUEUE_HIGH << 24);
+       write_nic_dword(dev, RQPN3, 
+       NUM_OF_PAGE_IN_FW_QUEUE_BCN<<0 | NUM_OF_PAGE_IN_FW_QUEUE_PUB<<8);
+       write_nic_byte(dev, LD_RQPN, BIT7);
+#endif
+
+
+
+
+       write_nic_byte(dev, RXDMA, 
+                                                       read_nic_byte(dev, RXDMA)|BIT6);
+
+       if (priv->card_8192_version== VERSION_8192S_ACUT)
+               write_nic_byte(dev, RRSR, 0xf0);
+#ifdef _RTL8192_EXT_PATCH_     
+#endif
+       write_nic_byte(dev, RRSR+1, 0x01);
+       write_nic_byte(dev, RRSR+2, 0x00);
+
+       for (i = 0; i < 8; i++)
+       {
+
+               if (priv->card_8192_version == VERSION_8192S_ACUT)
+                       write_nic_dword(dev, ARFR0+i*4, 0x1f0ff0f0);
+               else if (priv->card_8192_version == VERSION_8192S_BCUT)
+                       write_nic_dword(dev, ARFR0+i*4, 0x1f0ff0f0);
+       }
+
+       write_nic_byte(dev, AGGLEN_LMT_H, 0x0f);
+       write_nic_word(dev, AGGLEN_LMT_L, 0x7442);
+       write_nic_word(dev, AGGLEN_LMT_L+2, 0xddd7);
+       write_nic_word(dev, AGGLEN_LMT_L+4, 0xd772);
+       write_nic_word(dev, AGGLEN_LMT_L+6, 0xfffd);
+
+       write_nic_dword(dev, DARFRC, 0x04010000);
+       write_nic_dword(dev, DARFRC+4, 0x09070605);
+       write_nic_dword(dev, RARFRC, 0x04010000);
+       write_nic_dword(dev, RARFRC+4, 0x09070605);
+
+       
+       
+       write_nic_word(dev, SG_RATE, 0xFFFF);
+
+
+       write_nic_word(dev, NAV_PROT_LEN, 0x0080);      
+       write_nic_byte(dev, CFEND_TH, 0xFF);    
+       write_nic_byte(dev, AMPDU_MIN_SPACE, 0x07);
+       write_nic_byte(dev, TXOP_STALL_CTRL, 0x00);
+       
+
+       /*write_nic_byte(dev, PCIF, ((MXDMA2_NoLimit<<MXDMA2_RX_SHIFT) | \
+                                                                                       (MXDMA2_NoLimit<<MXDMA2_TX_SHIFT) | \
+                                                                                       (1<<MULRW_SHIFT)));*/
+
+       write_nic_byte(dev, RXDRVINFO_SZ, 4);  
+
+       tmpU2b= read_nic_byte(dev, SYS_FUNC_EN);
+       write_nic_byte(dev, SYS_FUNC_EN, tmpU2b | BIT13);  
+       tmpU2b= read_nic_byte(dev, SYS_ISO_CTRL);
+       write_nic_byte(dev, SYS_ISO_CTRL, tmpU2b & (~BIT8));  
+
+       if (priv->epromtype == EEPROM_BOOT_EFUSE)       
+       {       
+               u8      tempval;                
+               
+               tempval = read_nic_byte(dev, SYS_ISO_CTRL+1); 
+               tempval &= 0xFE;
+               write_nic_byte(dev, SYS_ISO_CTRL+1, tempval); 
+
+
+               
+               write_nic_byte(dev, EFUSE_CTRL+3, 0x72); 
+               RT_TRACE(COMP_INIT, "EFUSE CONFIG OK\n");
+       }
+       RT_TRACE(COMP_INIT, "MacConfigAfterFwDownload OK\n");
+
+}      /* MacConfigAfterFwDownload */
+
+static void rtl8192se_HalDetectPwrDownMode(struct net_device*dev)
+{
+    u8 tmpvalue;
+    struct r8192_priv *priv = rtllib_priv(dev);        
+    EFUSE_ShadowRead(dev, 1, 0x78, (u32 *)&tmpvalue);
+
+    if (tmpvalue & BIT0) {
+        priv->pwrdown = true;
+    } else {
+        priv->pwrdown = false;
+    }
+}
+
+void HwConfigureRTL8192SE(struct net_device *dev)
+{
+
+       struct r8192_priv* priv = rtllib_priv(dev);
+       
+       u8      regBwOpMode = 0;
+       u32     regRATR = 0, regRRSR = 0;
+       u8      regTmp = 0;
+
+
+       switch(priv->rtllib->mode)
+       {
+       case WIRELESS_MODE_B:
+               regBwOpMode = BW_OPMODE_20MHZ;
+               regRATR = RATE_ALL_CCK;
+               regRRSR = RATE_ALL_CCK;
+               break;
+       case WIRELESS_MODE_A:
+               regBwOpMode = BW_OPMODE_5G |BW_OPMODE_20MHZ;
+               regRATR = RATE_ALL_OFDM_AG;
+               regRRSR = RATE_ALL_OFDM_AG;
+               break;
+       case WIRELESS_MODE_G:
+               regBwOpMode = BW_OPMODE_20MHZ;
+               regRATR = RATE_ALL_CCK | RATE_ALL_OFDM_AG;
+               regRRSR = RATE_ALL_CCK | RATE_ALL_OFDM_AG;
+               break;
+       case WIRELESS_MODE_AUTO:
+       case WIRELESS_MODE_N_24G:
+                       regBwOpMode = BW_OPMODE_20MHZ;
+                       regRATR = RATE_ALL_CCK | RATE_ALL_OFDM_AG | RATE_ALL_OFDM_1SS | RATE_ALL_OFDM_2SS;
+                       regRRSR = RATE_ALL_CCK | RATE_ALL_OFDM_AG;
+               break;
+       case WIRELESS_MODE_N_5G:
+               regBwOpMode = BW_OPMODE_5G;
+               regRATR = RATE_ALL_OFDM_AG | RATE_ALL_OFDM_1SS | RATE_ALL_OFDM_2SS;
+               regRRSR = RATE_ALL_OFDM_AG;
+               break;
+       default:
+               regBwOpMode = BW_OPMODE_20MHZ;
+               regRATR = RATE_ALL_CCK | RATE_ALL_OFDM_AG;
+               regRRSR = RATE_ALL_CCK | RATE_ALL_OFDM_AG;
+               break;
+       }
+
+       regTmp = read_nic_byte(dev, INIRTSMCS_SEL);
+#if (RTL8192SU_DISABLE_CCK_RATE == 1)
+       regRRSR = ((regRRSR & 0x000ffff0)<<8) | regTmp;
+#else
+       regRRSR = ((regRRSR & 0x000fffff)<<8) | regTmp;
+#endif
+       write_nic_dword(dev, INIRTSMCS_SEL, regRRSR);
+
+       write_nic_byte(dev, BW_OPMODE, regBwOpMode);
+       priv->rtllib->SetHwRegHandler(dev, HW_VAR_RETRY_LIMIT, (u8*)(&priv->ShortRetryLimit));
+
+       write_nic_byte(dev, MLT, 0x8f);
+
+
+               
+#if 1
+       switch(priv->rf_type)
+       {
+               case RF_1T2R:
+               case RF_1T1R:
+                       RT_TRACE(COMP_INIT, "Initializeadapter: RF_Type%s\n", priv->rf_type==RF_1T1R? "(1T1R)":"(1T2R)");
+                priv->rtllib->MinSpaceCfg = (MAX_MSS_DENSITY_1T<<3);                                           
+                       break;
+               case RF_2T2R:
+               case RF_2T2R_GREEN:
+                       RT_TRACE(COMP_INIT, "Initializeadapter:RF_Type(2T2R)\n");
+                priv->rtllib->MinSpaceCfg = (MAX_MSS_DENSITY_2T<<3);                   
+                       break;
+       }
+       write_nic_byte(dev, AMPDU_MIN_SPACE, priv->rtllib->MinSpaceCfg);
+#else
+       priv->rtllib->MinSpaceCfg = 0x90;       
+       SetHwReg8192SE(dev, HW_VAR_AMPDU_MIN_SPACE, (u8*)(&priv->rtllib->MinSpaceCfg));
+#endif
+}
+
+void 
+RF_RECOVERY(struct net_device*dev      ,u8 Start, u8 End)
+{
+       u8      offset;
+       u8      counter;
+
+
+       for(offset = Start; offset<End; offset++)
+       {
+               PHY_RFShadowCompareFlagSet(dev, (RF90_RADIO_PATH_E)0, offset,true);
+               
+               if(PHY_RFShadowCompare(dev, (RF90_RADIO_PATH_E)0, offset))
+               {
+                       PHY_RFShadowRecorverFlagSet(dev, (RF90_RADIO_PATH_E)0, offset, true);
+
+                       for (counter = 0; counter < 10; counter++)
+                       {
+                               RT_TRACE(COMP_INIT, "PHY_RFShadowCompare OKCNT=%d offset=%0x\n", counter, offset);
+                       PHY_RFShadowRecorver( dev, (RF90_RADIO_PATH_E)0, offset);
+                               if (offset == 0x18)
+                               {
+                                       if (!PHY_RFShadowCompare(dev, (RF90_RADIO_PATH_E)0, offset))
+                                       {
+                                               RT_TRACE(COMP_INIT, "PHY_RFShadowCompare OKCNT=%d\n", counter);
+                                               PHY_RFShadowRecorverFlagSet(dev, (RF90_RADIO_PATH_E)0, offset, false);
+                                               break;
+                                       }
+                               }
+                               else
+                               {
+                                       PHY_RFShadowRecorverFlagSet(dev, (RF90_RADIO_PATH_E)0, offset, false);
+                                       break;
+               }
+       }
+}
+       }
+
+}
+
+bool rtl8192se_adapter_start(struct net_device* dev)
+{      
+       struct r8192_priv *priv = rtllib_priv(dev);     
+       bool rtStatus   = true; 
+       u8                              tmpU1b;
+       u8                              eRFPath;
+       u8                              fw_download_times = 1;
+       u8                              i=0;
+       RT_TRACE(COMP_INIT, "rtl8192se_adapter_start()\n");
+       priv->being_init_adapter = true;        
+#ifdef CONFIG_ASPM_OR_D3
+       RT_DISABLE_ASPM(dev);
+#endif
+start:
+       rtl8192_pci_resetdescring(dev);
+       MacConfigBeforeFwDownload(dev);
+
+       priv->card_8192_version = priv->rtllib->VersionID
+       = (VERSION_8192S)((read_nic_dword(dev, PMC_FSM)>>16)&0xF);
+
+       RT_TRACE(COMP_INIT, "NIC version : %s\n", ((read_nic_dword(dev, PMC_FSM)>>15)&0x1)?"C-cut":"B-cut");
+
+       rtStatus = FirmwareDownload92S((struct net_device*)dev); 
+       if(rtStatus != true)
+       {
+               if(fw_download_times <= 10){
+                       RT_TRACE(COMP_INIT, "rtl8192se_adapter_start(): Download Firmware failed %d times, Download again!!\n",fw_download_times);
+                       fw_download_times = fw_download_times + 1;
+                       goto start;
+               }else{
+                       RT_TRACE(COMP_INIT, "rtl8192se_adapter_start(): Download Firmware failed 10, end!!\n");
+                       goto end;
+               }
+       }
+
+       MacConfigAfterFwDownload(dev);
+
+       priv->FwCmdIOMap =      read_nic_word(dev, LBUS_MON_ADDR);
+       priv->FwCmdIOParam = read_nic_dword(dev, LBUS_ADDR_MASK);
+
+       
+#if (RTL8192S_DISABLE_FW_DM == 1)
+       write_nic_dword(dev, WFM5, FW_DM_DISABLE); 
+       ChkFwCmdIoDone(dev);
+       write_nic_dword(dev, WFM5, FW_TXANT_SWITCH_DISABLE); 
+       ChkFwCmdIoDone(dev);
+#endif
+
+#if (HAL_MAC_ENABLE == 1)
+       RT_TRACE(COMP_INIT, "MAC Config Start!\n");
+       if (PHY_MACConfig8192S(dev) != true)
+       {
+               RT_TRACE(COMP_ERR, "MAC Config failed\n");
+               return rtStatus;
+       }
+       RT_TRACE(COMP_INIT, "MAC Config Finished!\n");
+#endif 
+
+       write_nic_dword(dev, CMDR, 0x37FC); 
+
+#if (HAL_BB_ENABLE == 1)
+       RT_TRACE(COMP_INIT, "BB Config Start!\n");
+       if (PHY_BBConfig8192S(dev) != true)
+       {
+               RT_TRACE(COMP_INIT, "BB Config failed\n");
+               return rtStatus;
+       }
+       RT_TRACE(COMP_INIT, "BB Config Finished!\n");
+#endif 
+
+
+       priv->Rf_Mode = RF_OP_By_SW_3wire;
+#if (HAL_RF_ENABLE == 1)               
+       RT_TRACE(COMP_INIT, "RF Config started!\n");
+
+#if (RTL92SE_FPGA_VERIFY == 0)
+       write_nic_byte(dev, AFE_XTAL_CTRL+1, 0xDB);
+       if(priv->card_8192_version== VERSION_8192S_ACUT)
+               write_nic_byte(dev, SPS1_CTRL+3, 0x07);
+       else
+               write_nic_byte(dev, RF_CTRL, 0x07);
+#endif 
+       if(PHY_RFConfig8192S(dev) != true)
+       {
+               RT_TRACE(COMP_ERR, "RF Config failed\n");
+               return rtStatus;
+       }
+       RT_TRACE(COMP_INIT, "RF Config Finished!\n");   
+#endif 
+
+
+       priv->RfRegChnlVal[0] = rtl8192_phy_QueryRFReg(dev, (RF90_RADIO_PATH_E)0, RF_CHNLBW, bRFRegOffsetMask);
+       priv->RfRegChnlVal[1] = rtl8192_phy_QueryRFReg(dev, (RF90_RADIO_PATH_E)1, RF_CHNLBW, bRFRegOffsetMask);
+
+       rtl8192_setBBreg(dev, rFPGA0_RFMOD, bCCKEn, 0x1);
+       rtl8192_setBBreg(dev, rFPGA0_RFMOD, bOFDMEn, 0x1);
+       
+       HwConfigureRTL8192SE(dev);
+
+       if(priv->ResetProgress == RESET_TYPE_NORESET)
+               rtl8192_SetWirelessMode(dev, priv->rtllib->mode);
+       CamResetAllEntry(dev);
+       {
+               u8 SECR_value = 0x0;
+               SECR_value |= SCR_TxEncEnable;
+               SECR_value |= SCR_RxDecEnable;
+               SECR_value |= SCR_NoSKMC;
+               write_nic_byte(dev, SECR, SECR_value);
+       }
+
+       {
+               int i;
+               for (i=0; i<4; i++)
+                write_nic_dword(dev, WDCAPARA_ADD[i], 0x5e4322); 
+       }
+       {
+               PHY_GetHWRegOriginalValue(dev);
+#ifndef CONFIG_MP
+               rtl8192_phy_setTxPower(dev, priv->chan);
+#endif
+       }
+
+       rtl8192se_HalDetectPwrDownMode(dev);
+#if 1
+       if(priv->RegRfOff == true)
+       { 
+               RT_TRACE((COMP_INIT|COMP_RF), "InitializeAdapter8190(): Turn off RF for RegRfOff ----------\n");
+               MgntActSet_RF_State(dev, eRfOff, RF_CHANGE_BY_SW);
+
+               for(eRFPath = 0; eRFPath <priv->NumTotalRFPath; eRFPath++)
+                       rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, 0x4, 0xC00, 0x0);
+       
+       }
+       else if(priv->rtllib->RfOffReason > RF_CHANGE_BY_PS)
+       { 
+               RT_TRACE((COMP_INIT|COMP_RF), "InitializeAdapter8190(): Turn off RF for RfOffReason(%d) ----------\n", priv->rtllib->RfOffReason);
+               MgntActSet_RF_State(dev, eRfOff, priv->rtllib->RfOffReason);
+       }
+       else
+       {
+            if(priv->bHwRadioOff == false){
+               priv->rtllib->eRFPowerState = eRfOn;
+               priv->rtllib->RfOffReason = 0; 
+               if(priv->rtllib->LedControlHandler)
+                       priv->rtllib->LedControlHandler(dev, LED_CTL_POWER_ON);
+       }               
+       }               
+#endif
+
+
+       
+       {
+               int i;
+               for (i=0;i<6;i++)
+                       write_nic_byte(dev, MACIDR0+i, dev->dev_addr[i]);       
+       }
+
+       tmpU1b = read_nic_byte(dev, MAC_PINMUX_CFG);
+       write_nic_byte(dev, MAC_PINMUX_CFG, tmpU1b&(~BIT3));
+       
+       if(priv->CustomerID == RT_CID_CCX)
+       {
+               RT_TRACE(COMP_INIT ,"InitializeAdapter8192SE(): Set FW Cmd FW_TX_FEEDBACK_CCX_ENABLE\n");
+               write_nic_dword(dev, WFM5, FW_TX_FEEDBACK_CCX_ENABLE); 
+               ChkFwCmdIoDone(dev);
+               
+               write_nic_dword(dev, WFM5, FW_HIGH_PWR_DISABLE); 
+               ChkFwCmdIoDone(dev);
+               write_nic_dword(dev, WFM5, FW_DIG_HALT);
+               ChkFwCmdIoDone(dev);
+
+               write_nic_byte(dev, 0xC50, 0x1C);
+               write_nic_byte(dev, 0xC58, 0x1C);
+       }
+       
+       if(priv->pFirmware->FirmwareVersion >= 0x49){
+               u8 tmp_byte = 0;
+               
+               tmp_byte = read_nic_byte(dev, FW_RSVD_PG_CRTL) & (~BIT4);
+               tmp_byte = tmp_byte | BIT5;
+               write_nic_byte(dev, FW_RSVD_PG_CRTL, tmp_byte); 
+
+               write_nic_dword(dev, TXDESC_MSK, 0xFFFFCFFF); 
+       }
+       
+       if(priv->pFirmware->FirmwareVersion >= 0x35)
+       {
+               priv->rtllib->SetFwCmdHandler(dev, FW_CMD_RA_INIT);
+       }
+       else if(priv->pFirmware->FirmwareVersion >= 0x34) 
+       {
+               write_nic_dword(dev, WFM5, FW_RA_INIT); 
+               ChkFwCmdIoDone(dev);
+       }
+       else
+       {
+       write_nic_dword(dev, WFM5, FW_RA_RESET); 
+       ChkFwCmdIoDone(dev);
+       write_nic_dword(dev, WFM5, FW_RA_ACTIVE); 
+       ChkFwCmdIoDone(dev);
+       write_nic_dword(dev, WFM5, FW_RA_REFRESH); 
+               ChkFwCmdIoDone(dev);
+        }
+       
+       
+
+               PHY_SwitchEphyParameter(dev);
+       RF_RECOVERY(dev, 0x25, 0x29);
+
+       priv->SilentResetRxSlotIndex = 0;
+       for( i=0; i < MAX_SILENT_RESET_RX_SLOT_NUM; i++ )
+       {
+               priv->SilentResetRxStuckEvent[i] = 0;
+       }
+
+       if(priv->BluetoothCoexist)
+       {
+               printk("Write reg 0x%x = 1 for Bluetooth Co-existance\n", SYSF_CFG);
+               write_nic_byte(dev, SYSF_CFG, 0x1);
+       }               
+       
+       priv->bIgnoreSilentReset = true;
+       
+#ifdef CONFIG_FW_PARSEBEACON
+       if (!(priv->rtllib->softmac_features & IEEE_SOFTMAC_SCAN)){
+               write_nic_dword(dev, RXFILTERMAP, 0x0100);
+       }       
+#endif
+       rtl8192_irq_enable(dev);
+end:
+       priv->being_init_adapter = false;
+       return rtStatus;
+
+       
+}
+
+void rtl8192se_net_update(struct net_device *dev)
+{
+
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_network *net = &priv->rtllib->current_network;
+       u16 rate_config = 0;
+       u32 regTmp = 0;
+       u8 rateIndex = 0;
+       u8      RetryLimit = 0x30;
+       u16 cap = net->capability;
+
+       priv->short_preamble = cap & WLAN_CAPABILITY_SHORT_PREAMBLE;
+       
+       {
+       rtl8192_config_rate(dev, &rate_config); 
+       if (priv->card_8192_version== VERSION_8192S_ACUT)
+               priv->basic_rate = rate_config  = rate_config & 0x150;
+       else if (priv->card_8192_version == VERSION_8192S_BCUT)
+               priv->basic_rate= rate_config = rate_config & 0x15f;
+
+#if 1  
+       if(priv->rtllib->pHTInfo->IOTPeer == HT_IOT_PEER_CISCO && ((rate_config &0x150)==0))
+       {
+               rate_config |=0x010;
+       }
+       if(priv->rtllib->pHTInfo->IOTPeer & HT_IOT_ACT_WA_IOT_Broadcom)
+       {       
+               rate_config &= 0x1f0;
+               printk("HW_VAR_BASIC_RATE, HT_IOT_ACT_WA_IOT_Broadcom, BrateCfg = 0x%x\n", rate_config);
+       }
+
+                       write_nic_byte(dev, RRSR, rate_config&0xff);
+                       write_nic_byte(dev, RRSR+1, (rate_config>>8)&0xff);
+
+                       while(rate_config > 0x1)
+                       {
+                               rate_config = (rate_config>> 1);
+                               rateIndex++;
+                       }
+                       write_nic_byte(dev, INIRTSMCS_SEL, rateIndex);
+
+                       regTmp = (priv->nCur40MhzPrimeSC) << 5;
+                       if (priv->short_preamble)
+                               regTmp |= 0x80;
+                       write_nic_byte(dev, RRSR+2, regTmp);
+#endif
+       }
+
+       write_nic_dword(dev,BSSIDR,((u32*)net->bssid)[0]);
+       write_nic_word(dev,BSSIDR+4,((u16*)net->bssid)[2]);
+
+       if (priv->rtllib->iw_mode == IW_MODE_ADHOC){
+               RetryLimit = HAL_RETRY_LIMIT_AP_ADHOC;
+       } else {
+               RetryLimit = (priv->CustomerID == RT_CID_CCX) ? 7 : HAL_RETRY_LIMIT_INFRA;
+       }       
+       priv->rtllib->SetHwRegHandler(dev, HW_VAR_RETRY_LIMIT, (u8*)(&RetryLimit));
+               
+       if (priv->rtllib->iw_mode == IW_MODE_ADHOC){
+               priv->rtllib->SetHwRegHandler( dev, HW_VAR_BEACON_INTERVAL, (u8*)(&net->beacon_interval));
+       }
+                       
+       rtl8192_update_cap(dev, cap);
+}
+
+#ifdef _RTL8192_EXT_PATCH_
+void rtl8192se_mesh_net_update(struct net_device *dev)
+{
+
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_network *net = &priv->rtllib->current_mesh_network;
+       u16 rate_config = 0;
+       u32 regTmp = 0;
+       u8 rateIndex = 0;
+       u8      retrylimit = 0x7;
+       u16 cap = net->capability;
+       /* At the peer mesh mode, the peer MP shall recognize the short preamble */
+       priv->short_preamble = 1;
+       
+       if (priv->card_8192_version== VERSION_8192S_ACUT)
+               priv->basic_rate = rate_config  = 0x150;
+       else if (priv->card_8192_version == VERSION_8192S_BCUT)
+               priv->basic_rate= rate_config = 0x15f;
+
+       write_nic_byte(dev, RRSR, rate_config&0xff);
+       write_nic_byte(dev, RRSR+1, (rate_config>>8)&0xff);
+
+       while(rate_config > 0x1)
+       {
+               rate_config = (rate_config>> 1);
+               rateIndex++;
+       }
+       write_nic_byte(dev, INIRTSMCS_SEL, rateIndex);
+
+       regTmp = (priv->nCur40MhzPrimeSC) << 5;
+       if (priv->short_preamble)
+               regTmp |= 0x80;
+       write_nic_byte(dev, RRSR+2, regTmp);
+
+
+       write_nic_word(dev, BCN_INTERVAL, net->beacon_interval);
+       PHY_SetBeaconHwReg( dev, net->beacon_interval);
+       rtl8192_update_cap(dev, cap);
+       
+       priv->ShortRetryLimit = 
+               priv->LongRetryLimit = retrylimit;
+                       
+       write_nic_word(dev,RETRY_LIMIT, \
+                       retrylimit << RETRY_LIMIT_SHORT_SHIFT | \
+                       retrylimit << RETRY_LIMIT_LONG_SHIFT);  
+}
+#endif
+
+void rtl8192se_link_change(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device* ieee = priv->rtllib;
+       u32 reg = 0;
+       priv->rtllib->GetHwRegHandler(dev, HW_VAR_RCR, (u8*)(&reg));
+       
+#ifdef _RTL8192_EXT_PATCH_
+       printk("===>%s():ieee->iw_mode is %d\n",__FUNCTION__,ieee->iw_mode);
+       if (ieee->state == RTLLIB_LINKED) {
+               if(ieee->pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_HIGH_POWER)
+                       ieee->SetFwCmdHandler(dev, FW_CMD_HIGH_PWR_DISABLE);
+               else
+                       ieee->SetFwCmdHandler(dev, FW_CMD_HIGH_PWR_ENABLE);
+               rtl8192se_net_update(dev);
+               if(ieee->bUseRAMask){
+                       ieee->UpdateHalRAMaskHandler(
+                                                                       dev,
+                                                                       false,
+                                                                       0,
+                                                                       NULL,
+                                                                       ieee->mode,
+                                                                       0);
+                       priv->rssi_level = 0;
+               }
+               else{
+                       rtl8192se_update_ratr_table(dev,ieee->dot11HTOperationalRateSet,NULL);
+               }
+               reg |= RCR_CBSSID;
+       } else if ((ieee->mesh_state == RTLLIB_MESH_LINKED) && ieee->only_mesh) {
+               rtl8192se_mesh_net_update(dev);
+               reg &= ~RCR_CBSSID;
+       } else{
+               reg &= ~RCR_CBSSID;
+       }
+       priv->rtllib->SetHwRegHandler( dev, HW_VAR_RCR, (u8*)(&reg) );
+#else
+       if (ieee->state == RTLLIB_LINKED) {
+#ifdef CONFIG_FW_PARSEBEACON
+               if (!(priv->rtllib->softmac_features & IEEE_SOFTMAC_SCAN)){
+                       write_nic_dword(dev, RXFILTERMAP, 0x0000);
+               }       
+#endif
+
+               if(priv->DM_Type == DM_Type_ByFW) {
+               if(ieee->pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_HIGH_POWER)
+                       ieee->SetFwCmdHandler(dev, FW_CMD_HIGH_PWR_DISABLE);
+               else
+                       ieee->SetFwCmdHandler(dev, FW_CMD_HIGH_PWR_ENABLE);     
+               }
+
+               rtl8192se_net_update(dev);
+               rtl8192se_update_ratr_table(dev,ieee->dot11HTOperationalRateSet,NULL);
+               reg |= RCR_CBSSID;
+       } else {
+#ifdef CONFIG_FW_PARSEBEACON
+               if (!(priv->rtllib->softmac_features & IEEE_SOFTMAC_SCAN)){
+                       write_nic_dword(dev, RXFILTERMAP, 0x0100);
+               }       
+#endif
+
+               reg &= ~RCR_CBSSID;
+       }
+       priv->rtllib->SetHwRegHandler( dev, HW_VAR_RCR, (u8*)(&reg) );
+#endif 
+
+       rtl8192se_update_msr(dev);
+       {               
+               u32     temp = read_nic_dword(dev, TCR);
+               write_nic_dword(dev, TCR, temp&(~BIT8));
+               write_nic_dword(dev, TCR, temp|BIT8);
+       }
+       
+}
+
+u8 MRateToHwRate8192SE(struct net_device*dev, u8 rate)
+{
+       u8      ret = DESC92S_RATE1M;
+       u16     max_sg_rate;
+       static  u16     multibss_sg_old = 0x1234;
+       u16     multibss_sg;
+               
+       switch(rate)
+       {
+       case MGN_1M:    ret = DESC92S_RATE1M;           break;
+       case MGN_2M:    ret = DESC92S_RATE2M;           break;
+       case MGN_5_5M:  ret = DESC92S_RATE5_5M; break;
+       case MGN_11M:   ret = DESC92S_RATE11M;  break;
+       case MGN_6M:    ret = DESC92S_RATE6M;           break;
+       case MGN_9M:    ret = DESC92S_RATE9M;           break;
+       case MGN_12M:   ret = DESC92S_RATE12M;  break;
+       case MGN_18M:   ret = DESC92S_RATE18M;  break;
+       case MGN_24M:   ret = DESC92S_RATE24M;  break;
+       case MGN_36M:   ret = DESC92S_RATE36M;  break;
+       case MGN_48M:   ret = DESC92S_RATE48M;  break;
+       case MGN_54M:   ret = DESC92S_RATE54M;  break;
+
+       case MGN_MCS0:          ret = DESC92S_RATEMCS0; break;
+       case MGN_MCS1:          ret = DESC92S_RATEMCS1; break;
+       case MGN_MCS2:          ret = DESC92S_RATEMCS2; break;
+       case MGN_MCS3:          ret = DESC92S_RATEMCS3; break;
+       case MGN_MCS4:          ret = DESC92S_RATEMCS4; break;
+       case MGN_MCS5:          ret = DESC92S_RATEMCS5; break;
+       case MGN_MCS6:          ret = DESC92S_RATEMCS6; break;
+       case MGN_MCS7:          ret = DESC92S_RATEMCS7; break;
+       case MGN_MCS8:          ret = DESC92S_RATEMCS8; break;
+       case MGN_MCS9:          ret = DESC92S_RATEMCS9; break;
+       case MGN_MCS10: ret = DESC92S_RATEMCS10;        break;
+       case MGN_MCS11: ret = DESC92S_RATEMCS11;        break;
+       case MGN_MCS12: ret = DESC92S_RATEMCS12;        break;
+       case MGN_MCS13: ret = DESC92S_RATEMCS13;        break;
+       case MGN_MCS14: ret = DESC92S_RATEMCS14;        break;
+       case MGN_MCS15: ret = DESC92S_RATEMCS15;        break;  
+
+       case MGN_MCS0_SG:       
+       case MGN_MCS1_SG:
+       case MGN_MCS2_SG:       
+       case MGN_MCS3_SG:       
+       case MGN_MCS4_SG:       
+       case MGN_MCS5_SG:
+       case MGN_MCS6_SG:       
+       case MGN_MCS7_SG:       
+       case MGN_MCS8_SG:       
+       case MGN_MCS9_SG:
+       case MGN_MCS10_SG:
+       case MGN_MCS11_SG:      
+       case MGN_MCS12_SG:      
+       case MGN_MCS13_SG:      
+       case MGN_MCS14_SG:
+       case MGN_MCS15_SG:      
+                       ret = DESC92S_RATEMCS15_SG;
+                       max_sg_rate = rate&0xf;
+                       multibss_sg = max_sg_rate | (max_sg_rate<<4) | (max_sg_rate<<8) | (max_sg_rate<<12);
+                       if (multibss_sg_old != multibss_sg)
+                       {
+                               write_nic_dword(dev, SG_RATE, multibss_sg);
+                               multibss_sg_old = multibss_sg;
+                       }
+                       break;
+
+
+       case (0x80|0x20):       ret = DESC92S_RATEMCS32; break;
+
+       default:                                ret = DESC92S_RATEMCS15;        break;
+
+       }
+
+       return ret;
+}
+
+u8 rtl8192se_MapHwQueueToFirmwareQueue(u8 QueueID, u8 priority)
+{
+       u8 QueueSelect = 0x0;       
+
+       switch(QueueID) {
+#if defined RTL8192E || defined RTL8190P
+               case BE_QUEUE:
+                       QueueSelect = QSLT_BE;  
+                       break;
+
+               case BK_QUEUE:
+                       QueueSelect = QSLT_BK;  
+                       break;
+
+               case VO_QUEUE:
+                       QueueSelect = QSLT_VO;  
+                       break;
+
+               case VI_QUEUE:
+                       QueueSelect = QSLT_VI;  
+                       break;
+               case MGNT_QUEUE:
+                       QueueSelect = QSLT_MGNT;
+                       break;
+               case BEACON_QUEUE:
+                       QueueSelect = QSLT_BEACON;
+                       break;
+               case TXCMD_QUEUE:
+                       QueueSelect = QSLT_CMD;
+                       break;
+               case HIGH_QUEUE:
+                       QueueSelect = QSLT_HIGH;
+                       break;
+#elif defined RTL8192SE
+               case BE_QUEUE:
+                       QueueSelect = priority; 
+                       break;
+               case BK_QUEUE:
+                       QueueSelect = priority; 
+                       break;
+               case VO_QUEUE:
+                       QueueSelect = priority; 
+                       break;
+               case VI_QUEUE:
+                       QueueSelect = priority; 
+                       break;
+               case MGNT_QUEUE:
+                       QueueSelect = QSLT_BE;
+                       break;
+               case BEACON_QUEUE:
+                       QueueSelect = QSLT_BEACON;
+                       break;
+               case TXCMD_QUEUE:
+                       QueueSelect = QSLT_CMD;
+                       break;
+               case HIGH_QUEUE:
+                       QueueSelect = QSLT_HIGH;
+                       break;
+#endif
+               default:
+                       RT_TRACE(COMP_ERR, "TransmitTCB(): Impossible Queue Selection: %d \n", QueueID);
+                       break;
+       }
+       return QueueSelect;
+}
+
+
+void  rtl8192se_tx_fill_desc(struct net_device* dev, tx_desc * pDesc, cb_desc * cb_desc, struct sk_buff* skb)
+{
+       u8                              *pSeq;
+       u16                             Temp;
+       struct r8192_priv* priv = rtllib_priv(dev);
+
+       struct rtllib_hdr_1addr * header = NULL;
+
+       dma_addr_t mapping = pci_map_single(priv->pdev, skb->data, skb->len, PCI_DMA_TODEVICE);
+
+       u16 fc=0, stype=0;
+       header = (struct rtllib_hdr_1addr *)(((u8*)skb->data));
+       fc = header->frame_ctl;
+       stype = WLAN_FC_GET_STYPE(fc);
+       memset((void*)pDesc, 0, 32);            
+
+       {
+               
+#ifdef _RTL8192_EXT_PATCH_
+               if(priv->rtllib->bUseRAMask){
+                       if(cb_desc->macId < 32)
+                       {
+                               pDesc->MacID = cb_desc->macId;
+                               pDesc->Rsvd_MacID = cb_desc->macId;
+                       }
+               }
+#endif                 
+               pDesc->TXHT             = (cb_desc->data_rate&0x80)?1:0;        
+
+#if (RTL92SE_FPGA_VERIFY == 0)
+               if (priv->card_8192_version== VERSION_8192S_ACUT)
+               {
+                       if (cb_desc->data_rate== MGN_1M || cb_desc->data_rate == MGN_2M || 
+                               cb_desc->data_rate == MGN_5_5M || cb_desc->data_rate == MGN_11M)
+                       {
+                               cb_desc->data_rate = MGN_12M;
+                       }
+               }
+#endif                 
+               pDesc->TxRate   = MRateToHwRate8192SE(dev,cb_desc->data_rate);
+               pDesc->TxShort  = QueryIsShort(((cb_desc->data_rate&0x80)?1:0), MRateToHwRate8192SE(dev,cb_desc->data_rate), cb_desc);
+
+               if(cb_desc->bAMPDUEnable)
+               {                       
+                       pDesc->AggEn = 1;
+               }
+               else
+               {                       
+                       pDesc->AggEn = 0;
+               }
+
+               {
+                       pSeq = (u8 *)(skb->data+22);
+                       Temp = pSeq[0];
+                       Temp <<= 12;                    
+                       Temp |= (*(u16 *)pSeq)>>4;
+                       pDesc->Seq = Temp;
+               }
+               
+               pDesc->RTSEn    = (cb_desc->bRTSEnable && cb_desc->bCTSEnable==false)?1:0;                              
+               pDesc->CTS2Self = (cb_desc->bCTSEnable)?1:0;            
+               pDesc->RTSSTBC  = (cb_desc->bRTSSTBC)?1:0;
+               pDesc->RTSHT    = (cb_desc->rts_rate&0x80)?1:0;
+
+#if (RTL92SE_FPGA_VERIFY == 0)
+               if (priv->card_8192_version== VERSION_8192S_ACUT)
+               {
+                       if (cb_desc->rts_rate == MGN_1M || cb_desc->rts_rate == MGN_2M || 
+                               cb_desc->rts_rate == MGN_5_5M || cb_desc->rts_rate == MGN_11M)
+                       {
+                               cb_desc->rts_rate = MGN_12M;
+                       }
+               }
+#endif 
+               pDesc->RTSRate  = MRateToHwRate8192SE(dev,cb_desc->rts_rate);
+               pDesc->RTSRate  = MRateToHwRate8192SE(dev,MGN_24M);
+               pDesc->RTSBW    = 0;
+               pDesc->RTSSC    = cb_desc->RTSSC;
+               pDesc->RTSShort = (pDesc->RTSHT==0)?(cb_desc->bRTSUseShortPreamble?1:0):(cb_desc->bRTSUseShortGI?1:0);
+               if(priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20_40)
+               {
+                       if(cb_desc->bPacketBW)
+                       {
+                               pDesc->TxBw             = 1;
+                               pDesc->TXSC             = 0;
+                       }
+                       else
+                       {                               
+                               pDesc->TxBw             = 0;
+                               pDesc->TXSC             = priv->nCur40MhzPrimeSC;
+                       }
+               }
+               else
+               {
+                       pDesc->TxBw             = 0;
+                       pDesc->TXSC             = 0;
+               }
+
+               pDesc->LINIP = 0;
+               pDesc->Offset = 32;
+               pDesc->PktSize = (u16)skb->len;         
+               
+               pDesc->RaBRSRID = cb_desc->RATRIndex;
+#if 0          
+printk("*************TXDESC:\n");
+printk("\tTxRate: %d\n", pDesc->TxRate);
+printk("\tAMPDUEn: %d\n", pDesc->AggEn);
+printk("\tTxBw: %d\n", pDesc->TxBw);
+printk("\tTXSC: %d\n", pDesc->TXSC);
+printk("\tPktSize: %d\n", pDesc->PktSize);
+printk("\tRatrIdx: %d\n", pDesc->RaBRSRID);
+#endif
+                if (cb_desc->bHwSec) {
+                        static u8 tmp =0;
+                        if (!tmp) {
+                        tmp = 1;
+                       }
+#ifdef _RTL8192_EXT_PATCH_
+                       if(cb_desc->mesh_pkt == 0)
+#endif 
+                       {
+                               switch (priv->rtllib->pairwise_key_type) {
+                                       case KEY_TYPE_WEP40:
+                                       case KEY_TYPE_WEP104:
+                                               pDesc->SecType = 0x1;
+                                               break;
+                                       case KEY_TYPE_TKIP:
+                                               pDesc->SecType = 0x2;
+                                               break;
+                                       case KEY_TYPE_CCMP:
+                                               pDesc->SecType = 0x3;
+                                               break;
+                                       case KEY_TYPE_NA:
+                                               pDesc->SecType = 0x0;
+                                               break;
+                               }
+                       }
+#ifdef _RTL8192_EXT_PATCH_
+                       else if(cb_desc->mesh_pkt == 1)
+                       {
+                               switch (priv->rtllib->mesh_pairwise_key_type) {
+                                       case KEY_TYPE_WEP40:
+                                       case KEY_TYPE_WEP104:
+                                               pDesc->SecType = 0x1;
+                                               break;
+                                       case KEY_TYPE_TKIP:
+                                               pDesc->SecType = 0x2;
+                                               break;
+                                       case KEY_TYPE_CCMP:
+                                               pDesc->SecType = 0x3;
+                                               break;
+                                       case KEY_TYPE_NA:
+                                               pDesc->SecType = 0x0;
+                                               break;
+                               }
+                       }
+#endif                 
+               }
+
+               pDesc->PktID                    = 0x0;          
+               pDesc->QueueSel         = rtl8192se_MapHwQueueToFirmwareQueue(cb_desc->queue_index, cb_desc->priority); 
+               
+               pDesc->DataRateFBLmt    = 0x1F;         
+               pDesc->DISFB    = cb_desc->bTxDisableRateFallBack;
+               pDesc->UserRate = cb_desc->bTxUseDriverAssingedRate;
+
+               if (pDesc->UserRate == true && pDesc->TXHT == true)             
+                       RF_ChangeTxPath(dev, cb_desc->data_rate);
+
+       }
+       
+
+       pDesc->FirstSeg = 1;
+       pDesc->LastSeg  = 1;
+       
+       pDesc->TxBufferSize= (u16)skb->len;     
+       
+       pDesc->TxBuffAddr = cpu_to_le32(mapping);
+
+}
+
+void  rtl8192se_tx_fill_cmd_desc(struct net_device* dev, tx_desc_cmd * entry, cb_desc * cb_desc, struct sk_buff* skb)
+{
+    struct r8192_priv *priv = rtllib_priv(dev);
+
+       if(cb_desc->bCmdOrInit == DESC_PACKET_TYPE_INIT) {
+               
+    dma_addr_t mapping = pci_map_single(priv->pdev, skb->data, skb->len, PCI_DMA_TODEVICE);
+               
+       memset((void*)entry, 0, 32);    
+       
+       entry->LINIP = cb_desc->bLastIniPkt;
+               
+       entry->FirstSeg = 1;
+       entry->LastSeg = 1;
+       
+       entry->TxBufferSize= (u16)(skb->len);
+       entry->TxBufferAddr = cpu_to_le32(mapping);
+       entry->PktSize = (u16)(skb->len);
+       
+       {
+               entry->OWN = 1;
+       }
+       } else { 
+
+               u8*     pDesc = (u8*)entry;
+               
+               dma_addr_t mapping = pci_map_single(priv->pdev, skb->data, skb->len, PCI_DMA_TODEVICE);
+               
+               CLEAR_PCI_TX_DESC_CONTENT(pDesc, sizeof(tx_desc_cmd));
+
+               SET_TX_DESC_FIRST_SEG(pDesc, 1); 
+               SET_TX_DESC_LAST_SEG(pDesc, 1); 
+
+               SET_TX_DESC_OFFSET(pDesc, 0x20); 
+
+               SET_TX_DESC_PKT_SIZE(pDesc, (u16)(skb->len)); 
+               SET_TX_DESC_QUEUE_SEL(pDesc, 0x13); 
+
+               
+               SET_BITS_TO_LE_4BYTE(skb->data, 24, 7, priv->H2CTxCmdSeq);
+
+               SET_TX_DESC_TX_BUFFER_SIZE(pDesc, (u16)(skb->len));
+               SET_TX_DESC_TX_BUFFER_ADDRESS(pDesc, cpu_to_le32(mapping));
+
+               SET_TX_DESC_OWN(pDesc, 1);
+
+               RT_TRACE(COMP_CMD, "TxFillCmdDesc8192SE(): H2C Tx Cmd Content ----->\n");
+       }
+}
+
+u8 HwRateToMRate92S(bool bIsHT,        u8 rate)
+{
+       u8      ret_rate = 0x02;
+
+       if (!bIsHT) {
+               switch (rate) {
+               case DESC92S_RATE1M:            
+                       ret_rate = MGN_1M;              
+                       break;
+               case DESC92S_RATE2M:            
+                       ret_rate = MGN_2M;              
+                       break;
+               case DESC92S_RATE5_5M:          
+                       ret_rate = MGN_5_5M;            
+                       break;
+               case DESC92S_RATE11M:           
+                       ret_rate = MGN_11M;             
+                       break;
+               case DESC92S_RATE6M:            
+                       ret_rate = MGN_6M;              
+                       break;
+               case DESC92S_RATE9M:            
+                       ret_rate = MGN_9M;              
+                       break;
+               case DESC92S_RATE12M:           
+                       ret_rate = MGN_12M;             
+                       break;
+               case DESC92S_RATE18M:           
+                       ret_rate = MGN_18M;             
+                       break;
+               case DESC92S_RATE24M:           
+                       ret_rate = MGN_24M;             
+                       break;
+               case DESC92S_RATE36M:           
+                       ret_rate = MGN_36M;             
+                       break;
+               case DESC92S_RATE48M:           
+                       ret_rate = MGN_48M;             
+                       break;
+               case DESC92S_RATE54M:           
+                       ret_rate = MGN_54M;             
+                       break;
+               default:                                                        
+                       ret_rate = 0xff;
+                       break;
+               }
+       } else {
+               switch (rate) {
+               case DESC92S_RATEMCS0:  
+                       ret_rate = MGN_MCS0;            
+                       break;
+               case DESC92S_RATEMCS1:  
+                       ret_rate = MGN_MCS1;            
+                       break;
+               case DESC92S_RATEMCS2:  
+                       ret_rate = MGN_MCS2;            
+                       break;
+               case DESC92S_RATEMCS3:  
+                       ret_rate = MGN_MCS3;            
+                       break;
+               case DESC92S_RATEMCS4:  
+                       ret_rate = MGN_MCS4;            
+                       break;
+               case DESC92S_RATEMCS5:  
+                       ret_rate = MGN_MCS5;            
+                       break;
+               case DESC92S_RATEMCS6:  
+                       ret_rate = MGN_MCS6;            
+                       break;
+               case DESC92S_RATEMCS7:  
+                       ret_rate = MGN_MCS7;            
+                       break;
+               case DESC92S_RATEMCS8:  
+                       ret_rate = MGN_MCS8;            
+                       break;
+               case DESC92S_RATEMCS9:  
+                       ret_rate = MGN_MCS9;            
+                       break;
+               case DESC92S_RATEMCS10: 
+                       ret_rate = MGN_MCS10;   
+                       break;
+               case DESC92S_RATEMCS11: 
+                       ret_rate = MGN_MCS11;   
+                       break;
+               case DESC92S_RATEMCS12: 
+                       ret_rate = MGN_MCS12;   
+                       break;
+               case DESC92S_RATEMCS13: 
+                       ret_rate = MGN_MCS13;   
+                       break;
+               case DESC92S_RATEMCS14: 
+                       ret_rate = MGN_MCS14;   
+                       break;
+               case DESC92S_RATEMCS15: 
+                       ret_rate = MGN_MCS15;   
+                       break;
+               case DESC92S_RATEMCS32: 
+                       ret_rate = (0x80|0x20); 
+                       break;
+               default:                                                        
+                       ret_rate = 0xff;
+                       break;
+               }
+
+       }       
+       return ret_rate;
+}
+
+long
+rtl8192se_signal_scale_mapping(struct r8192_priv * priv,
+       long currsig
+       )
+{
+       long retsig;
+
+#if defined RTL8192SE || defined RTL8192CE
+       if(priv->CustomerID == RT_CID_819x_Lenovo)
+       {
+               return currsig;
+       }
+       else if(priv->CustomerID == RT_CID_819x_Netcore)
+       {       
+               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;
+               }
+               return retsig;
+       }
+#endif
+
+       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;
+       }
+       
+       return retsig;
+}
+
+
+#define        rx_hal_is_cck_rate(_pdesc)\
+                       (_pdesc->RxMCS == DESC92S_RATE1M ||\
+                        _pdesc->RxMCS == DESC92S_RATE2M ||\
+                        _pdesc->RxMCS == DESC92S_RATE5_5M ||\
+                        _pdesc->RxMCS == DESC92S_RATE11M)
+#ifdef _RTL8192_EXT_PATCH_
+void rtl8192se_query_rxphystatus(
+       struct r8192_priv * priv,
+       struct rtllib_rx_stats * pstats,
+       prx_desc  pdesc,        
+       prx_fwinfo   pDrvInfo,
+       bool bpacket_match_bssid,
+       bool bpacket_toself,
+       bool bPacketBeacon
+       )
+{
+       bool is_cck_rate;
+       phy_sts_cck_8192s_t* cck_buf;
+       u8 rx_pwr_all=0, rx_pwr[4], rf_rx_num=0, EVM, PWDB_ALL;
+       u8 i, max_spatial_stream;
+       u32 rssi, total_rssi = 0;
+       u8 cck_highpwr = 0;
+       is_cck_rate = rx_hal_is_cck_rate(pdesc);
+
+       pstats->bPacketMatchBSSID = bpacket_match_bssid;
+       pstats->bPacketToSelf = bpacket_toself;
+       pstats->bIsCCK = is_cck_rate;
+       pstats->bPacketBeacon = bPacketBeacon;
+
+       pstats->RxMIMOSignalQuality[0] = -1;
+       pstats->RxMIMOSignalQuality[1] = -1;
+
+       if (is_cck_rate){
+               u8 report;
+                       
+               cck_buf = (phy_sts_cck_8192s_t*)pDrvInfo;
+
+               if(priv->rtllib->eRFPowerState == eRfOn)
+                       cck_highpwr = (u8)priv->bCckHighPower;
+               else
+                       cck_highpwr = false;
+               if (!cck_highpwr){
+                       report = cck_buf->cck_agc_rpt & 0xc0;
+                       report = report >> 6;
+                       switch(report){
+                               case 0x3:
+                                       rx_pwr_all = -40 - (cck_buf->cck_agc_rpt&0x3e);
+                                       break;
+                               case 0x2:
+                                       rx_pwr_all = -20 - (cck_buf->cck_agc_rpt&0x3e);
+                                       break;
+                               case 0x1:
+                                       rx_pwr_all = -2 - (cck_buf->cck_agc_rpt&0x3e);
+                                       break;
+                               case 0x0:
+                                       rx_pwr_all = 14 - (cck_buf->cck_agc_rpt&0x3e);
+                                       break;
+                       }
+               }
+               else{
+                       report = pDrvInfo->cfosho[0] & 0x60;
+                       report = report >> 5;
+                       switch(report){
+                               case 0x3:
+                                       rx_pwr_all = -40 - ((cck_buf->cck_agc_rpt & 0x1f)<<1);
+                                       break;
+                               case 0x2:
+                                       rx_pwr_all = -20 - ((cck_buf->cck_agc_rpt & 0x1f)<<1);
+                                       break;
+                               case 0x1:
+                                       rx_pwr_all = -2 - ((cck_buf->cck_agc_rpt & 0x1f)<<1);
+                                       break;
+                               case 0x0:
+                                       rx_pwr_all = 14 - ((cck_buf->cck_agc_rpt & 0x1f)<<1);
+                                       break;
+                       }
+               }
+
+               PWDB_ALL= rtl819x_query_rxpwrpercentage(rx_pwr_all);
+               {
+                       PWDB_ALL+=6;
+                       if(PWDB_ALL > 100)
+                               PWDB_ALL = 100;
+                       if(PWDB_ALL > 34 && PWDB_ALL <= 42)
+                               PWDB_ALL -= 2;
+                       else if(PWDB_ALL > 26 && PWDB_ALL <= 34)
+                               PWDB_ALL -= 6;
+                       else if(PWDB_ALL > 14 && PWDB_ALL <= 26)
+                               PWDB_ALL -= 8;
+                       else if(PWDB_ALL > 4 && PWDB_ALL <= 14)
+                               PWDB_ALL -= 4;
+               }
+               pstats->RxPWDBAll = PWDB_ALL;
+               pstats->RecvSignalPower = rx_pwr_all;
+
+               if (bpacket_match_bssid){
+                       u8 sq;
+                       if(priv->CustomerID == RT_CID_819x_Lenovo)              
+                       {
+                               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
+                       {
+                       if (pstats->RxPWDBAll > 40)
+                               sq = 100;
+                       else{
+                               sq = cck_buf->sq_rpt;
+                               if (sq > 64)
+                                       sq = 0;
+                               else if(sq < 20)
+                                       sq = 100;
+                               else
+                                       sq = ((64-sq)*100)/44;
+                       }
+                       }
+                       pstats->SignalQuality = sq;
+                       pstats->RxMIMOSignalQuality[0] = sq;
+                       pstats->RxMIMOSignalQuality[1] = -1;
+               }
+       }
+       else{
+               priv->brfpath_rxenable[0] = priv->brfpath_rxenable[1] = true;
+
+               for (i=RF90_PATH_A; i<RF90_PATH_MAX; i++){
+                       if (priv->brfpath_rxenable[i])
+                               rf_rx_num ++;
+
+                       rx_pwr[i] = ((pDrvInfo->gain_trsw[i]&0x3f)*2) - 110;
+                       rssi = rtl819x_query_rxpwrpercentage(rx_pwr[i]);
+                       total_rssi += rssi;
+
+                       priv->stats.rxSNRdB[i] = (long)(pDrvInfo->rxsnr[i]/2);
+
+                       if (bpacket_match_bssid){
+                               pstats->RxMIMOSignalStrength[i] = (u8)rssi;
+                               if(priv->CustomerID == RT_CID_819x_Lenovo)
+                               {
+                                       u8      SQ;
+                                       
+                                       if(i == 0)
+                                       {
+                                               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;
+                                               pstats->SignalQuality = SQ;
+                       }
+               }
+                       }
+               }
+               rx_pwr_all = ((pDrvInfo->pwdb_all >> 1) & 0x7f) - 106;
+               PWDB_ALL = rtl819x_query_rxpwrpercentage(rx_pwr_all);
+
+               pstats->RxPWDBAll = PWDB_ALL;
+               pstats->RxPower = rx_pwr_all;
+               pstats->RecvSignalPower = rx_pwr_all;
+
+               if(priv->CustomerID != RT_CID_819x_Lenovo){     
+               if (pdesc->RxHT && pdesc->RxMCS >= DESC92S_RATEMCS8 && pdesc->RxMCS <= DESC92S_RATEMCS15)
+                       max_spatial_stream = 2;
+               else
+                       max_spatial_stream = 1;
+
+               for(i=0; i<max_spatial_stream; i++){
+                       EVM = rtl819x_evm_dbtopercentage(pDrvInfo->rxevm[i]);
+
+                       if (bpacket_match_bssid)
+                       {
+                               if (i==0)
+                                               pstats->SignalQuality = (u8)(EVM & 0xff);
+                                       pstats->RxMIMOSignalQuality[i] = (u8)(EVM&0xff);
+                               }
+                       }
+               }
+#if 1
+               if (pdesc->BandWidth)
+                       priv->stats.received_bwtype[1+pDrvInfo->rxsc]++;
+               else
+                       priv->stats.received_bwtype[0]++;
+#endif
+       }
+
+       if (is_cck_rate){
+               pstats->SignalStrength = (u8)(rtl8192se_signal_scale_mapping(priv,PWDB_ALL));
+       }
+       else {
+               if (rf_rx_num != 0)
+                       pstats->SignalStrength = (u8)(rtl8192se_signal_scale_mapping(priv,total_rssi/=rf_rx_num));
+       }
+}
+#else
+void rtl8192se_query_rxphystatus(
+       struct r8192_priv * priv,
+       struct rtllib_rx_stats * pstats,
+       prx_desc  pdesc,        
+       prx_fwinfo   pDrvInfo,
+       struct rtllib_rx_stats * precord_stats,
+       bool bpacket_match_bssid,
+       bool bpacket_toself,
+       bool bPacketBeacon,
+       bool bToSelfBA
+       )
+{
+       bool is_cck_rate;
+       phy_sts_cck_8192s_t* cck_buf;
+       s8 rx_pwr_all=0, rx_pwr[4]; 
+       u8 rf_rx_num=0, EVM, PWDB_ALL;
+       u8 i, max_spatial_stream;
+       u32 rssi, total_rssi = 0;
+
+       is_cck_rate = rx_hal_is_cck_rate(pdesc);
+
+       memset(precord_stats, 0, sizeof(struct rtllib_rx_stats));
+       pstats->bPacketMatchBSSID = precord_stats->bPacketMatchBSSID = bpacket_match_bssid;
+       pstats->bPacketToSelf = precord_stats->bPacketToSelf = bpacket_toself;
+       pstats->bIsCCK = precord_stats->bIsCCK = is_cck_rate;
+       pstats->bPacketBeacon = precord_stats->bPacketBeacon = bPacketBeacon;
+       pstats->bToSelfBA = precord_stats->bToSelfBA = bToSelfBA;
+       pstats->bIsCCK = precord_stats->bIsCCK = is_cck_rate;
+
+       pstats->RxMIMOSignalQuality[0] = -1;
+       pstats->RxMIMOSignalQuality[1] = -1;
+       precord_stats->RxMIMOSignalQuality[0] = -1;
+       precord_stats->RxMIMOSignalQuality[1] = -1;
+
+       if (is_cck_rate){
+               u8 report, cck_highpwr;
+                       
+               cck_buf = (phy_sts_cck_8192s_t*)pDrvInfo;
+
+               if(!priv->bInPowerSaveMode)
+               cck_highpwr = (u8)rtl8192_QueryBBReg(priv->rtllib->dev, rFPGA0_XA_HSSIParameter2, BIT9);
+               else
+                       cck_highpwr = false;
+               if (!cck_highpwr){
+                       report = cck_buf->cck_agc_rpt & 0xc0;
+                       report = report >> 6;
+                       switch(report){
+                               case 0x3:
+                                       rx_pwr_all = -35 - (cck_buf->cck_agc_rpt&0x3e);
+                                       break;
+                               case 0x2:
+                                       rx_pwr_all = -23 - (cck_buf->cck_agc_rpt&0x3e);
+                                       break;
+                               case 0x1:
+                                       rx_pwr_all = -11 - (cck_buf->cck_agc_rpt&0x3e);
+                                       break;
+                               case 0x0:
+                                       rx_pwr_all = 8 - (cck_buf->cck_agc_rpt&0x3e);
+                                       break;
+                       }
+               }
+               else{
+                       report = pDrvInfo->cfosho[0] & 0x60;
+                       report = report >> 5;
+                       switch(report){
+                               case 0x3:
+                                       rx_pwr_all = -35 - ((cck_buf->cck_agc_rpt & 0x1f)<<1);
+                                       break;
+                               case 0x2:
+                                       rx_pwr_all = -23 - ((cck_buf->cck_agc_rpt & 0x1f)<<1);
+                                       break;
+                               case 0x1:
+                                       rx_pwr_all = -11 - ((cck_buf->cck_agc_rpt & 0x1f)<<1);
+                                       break;
+                               case 0x0:
+                                       rx_pwr_all = -8 - ((cck_buf->cck_agc_rpt & 0x1f)<<1);
+                                       break;
+                       }
+               }
+
+               PWDB_ALL= rtl819x_query_rxpwrpercentage(rx_pwr_all);
+               pstats->RxPWDBAll = precord_stats->RxPWDBAll = PWDB_ALL;
+               pstats->RecvSignalPower = rx_pwr_all;
+
+               if (bpacket_match_bssid){
+                       u8 sq;
+                       if (pstats->RxPWDBAll > 40)
+                               sq = 100;
+                       else{
+                               sq = cck_buf->sq_rpt;
+                               if (sq > 64)
+                                       sq = 0;
+                               else if(sq < 20)
+                                       sq = 100;
+                               else
+                                       sq = ((64-sq)*100)/44;
+                       }
+                       pstats->SignalQuality = precord_stats->SignalQuality = sq;
+                       pstats->RxMIMOSignalQuality[0] = precord_stats->RxMIMOSignalQuality[0] = sq;
+                       pstats->RxMIMOSignalQuality[1] = precord_stats->RxMIMOSignalQuality[1] = -1;
+               }
+       }
+       else{
+               priv->brfpath_rxenable[0] = priv->brfpath_rxenable[1] = true;
+
+               for (i=RF90_PATH_A; i<RF90_PATH_MAX; i++){
+                       if (priv->brfpath_rxenable[i])
+                               rf_rx_num ++;
+
+                       rx_pwr[i] = ((pDrvInfo->gain_trsw[i]&0x3f)*2) - 110;
+                       rssi = rtl819x_query_rxpwrpercentage(rx_pwr[i]);
+                       total_rssi += rssi;
+
+                       priv->stats.rxSNRdB[i] = (long)(pDrvInfo->rxsnr[i]/2);
+
+                       if (bpacket_match_bssid){
+                               pstats->RxMIMOSignalStrength[i] = (u8)rssi;
+                               precord_stats->RxMIMOSignalStrength [i] = (u8)rssi;
+                       }
+               }
+
+               rx_pwr_all = ((pDrvInfo->pwdb_all >> 1) & 0x7f) - 0x106;
+               PWDB_ALL = rtl819x_query_rxpwrpercentage(rx_pwr_all);
+
+               pstats->RxPWDBAll = precord_stats->RxPWDBAll = PWDB_ALL;
+               pstats->RxPower = precord_stats->RxPower = rx_pwr_all;
+               pstats->RecvSignalPower = precord_stats->RecvSignalPower = rx_pwr_all;
+
+               if (pdesc->RxHT && pdesc->RxMCS >= DESC92S_RATEMCS8 && pdesc->RxMCS <= DESC92S_RATEMCS15)
+                       max_spatial_stream = 2;
+               else
+                       max_spatial_stream = 1;
+
+               for(i=0; i<max_spatial_stream; i++){
+                       EVM = rtl819x_evm_dbtopercentage(pDrvInfo->rxevm[i]);
+
+                       if (bpacket_match_bssid)
+                       {
+                               if (i==0)
+                                       pstats->SignalQuality = 
+                                       precord_stats->SignalQuality = (u8)(EVM&0xff);
+                               pstats->RxMIMOSignalQuality[i] =
+                               precord_stats->RxMIMOSignalQuality[i] = (u8)(EVM&0xff);
+                       }
+               }
+#if 0
+               if (pdesc->BW)
+                       priv->stats.received_bwtype[1+pDrvInfo->rxsc]++;
+               else
+                       priv->stats.received_bwtype[0]++;
+#endif
+       }
+
+       if (is_cck_rate)
+               pstats->SignalStrength = 
+               precord_stats->SignalStrength = (u8)(rtl8192se_signal_scale_mapping(priv,PWDB_ALL));
+       else
+               if (rf_rx_num != 0)
+                       pstats->SignalStrength = 
+                       precord_stats->SignalStrength = (u8)(rtl8192se_signal_scale_mapping(priv,total_rssi/=rf_rx_num));
+
+}
+#endif
+
+#ifdef _RTL8192_EXT_PATCH_
+void rtl819x_update_rxsignalstatistics8192S(
+       struct r8192_priv * priv,
+       struct rtllib_rx_stats * pstats
+       )
+{
+       int     weighting = 0;
+
+
+       if(priv->stats.recv_signal_power == 0)
+               priv->stats.recv_signal_power = pstats->RecvSignalPower;
+
+       if(pstats->RecvSignalPower > priv->stats.recv_signal_power)
+               weighting = 5;
+       else if(pstats->RecvSignalPower < priv->stats.recv_signal_power)
+               weighting = (-5);
+       priv->stats.recv_signal_power = (priv->stats.recv_signal_power * 5 + pstats->RecvSignalPower + weighting) / 6;
+
+}      
+
+void Process_UI_RSSI_8192S(struct r8192_priv * priv,struct rtllib_rx_stats * pstats)
+{
+       u8                      rfPath;
+       u32                     last_rssi, tmpVal;
+
+       if(pstats->bPacketToSelf || pstats->bPacketBeacon)
+       {
+               priv->stats.RssiCalculateCnt++; 
+               if(priv->stats.ui_rssi.TotalNum++ >= PHY_RSSI_SLID_WIN_MAX)
+               {
+                       priv->stats.ui_rssi.TotalNum = PHY_RSSI_SLID_WIN_MAX;
+                       last_rssi = priv->stats.ui_rssi.elements[priv->stats.ui_rssi.index];
+                       priv->stats.ui_rssi.TotalVal -= last_rssi;
+               }
+               priv->stats.ui_rssi.TotalVal += pstats->SignalStrength;
+       
+               priv->stats.ui_rssi.elements[priv->stats.ui_rssi.index++] = pstats->SignalStrength;
+               if(priv->stats.ui_rssi.index >= PHY_RSSI_SLID_WIN_MAX)
+                       priv->stats.ui_rssi.index = 0;
+       
+               tmpVal = priv->stats.ui_rssi.TotalVal/priv->stats.ui_rssi.TotalNum;
+               priv->stats.signal_strength = rtl819x_translate_todbm(priv, (u8)tmpVal);
+
+       }
+
+       if(!pstats->bIsCCK && pstats->bPacketToSelf)
+       {
+               for (rfPath = RF90_PATH_A; rfPath < priv->NumTotalRFPath; rfPath++)
+               {
+                       if (!rtl8192_phy_CheckIsLegalRFPath(priv->rtllib->dev, rfPath))
+                               continue;
+                       RT_TRACE(COMP_DBG, "pstats->RxMIMOSignalStrength[%d]  = %d \n", rfPath, pstats->RxMIMOSignalStrength[rfPath] );
+
+                       if(priv->stats.rx_rssi_percentage[rfPath] == 0) 
+                       {
+                               priv->stats.rx_rssi_percentage[rfPath] = pstats->RxMIMOSignalStrength[rfPath];
+                       }
+                       
+                       if(pstats->RxMIMOSignalStrength[rfPath]  > priv->stats.rx_rssi_percentage[rfPath])
+                       {
+                               priv->stats.rx_rssi_percentage[rfPath] = 
+                                       ( (priv->stats.rx_rssi_percentage[rfPath]*(Rx_Smooth_Factor-1)) + 
+                                       (pstats->RxMIMOSignalStrength[rfPath])) /(Rx_Smooth_Factor);
+                               priv->stats.rx_rssi_percentage[rfPath] = priv->stats.rx_rssi_percentage[rfPath] + 1;
+                       }
+                       else
+                       {
+                               priv->stats.rx_rssi_percentage[rfPath] = 
+                                       ( (priv->stats.rx_rssi_percentage[rfPath]*(Rx_Smooth_Factor-1)) + 
+                                       (pstats->RxMIMOSignalStrength[rfPath])) /(Rx_Smooth_Factor);
+                       }
+                       RT_TRACE(COMP_DBG, "priv->stats.rx_rssi_percentage[%d]  = %d \n",rfPath, priv->stats.rx_rssi_percentage[rfPath] );
+               }
+       }
+       
+}      
+
+void Process_PWDB_8192S(struct r8192_priv * priv,struct rtllib_rx_stats * pstats,struct rtllib_network* pnet)
+{
+       long    UndecoratedSmoothedPWDB=0;
+
+       if(pnet){
+               if(priv->mshobj->ext_patch_get_peermp_rssi_param)
+               UndecoratedSmoothedPWDB = priv->mshobj->ext_patch_get_peermp_rssi_param(pnet);
+       }
+       else
+               UndecoratedSmoothedPWDB = priv->undecorated_smoothed_pwdb;
+
+       if(pstats->bPacketToSelf || pstats->bPacketBeacon)
+       {
+               if(UndecoratedSmoothedPWDB < 0) 
+               {
+                       UndecoratedSmoothedPWDB = pstats->RxPWDBAll;
+               }
+               
+               if(pstats->RxPWDBAll > (u32)UndecoratedSmoothedPWDB)
+               {
+                       UndecoratedSmoothedPWDB =       
+                                       ( ((UndecoratedSmoothedPWDB)*(Rx_Smooth_Factor-1)) + 
+                                       (pstats->RxPWDBAll)) /(Rx_Smooth_Factor);
+                       UndecoratedSmoothedPWDB = UndecoratedSmoothedPWDB + 1;
+               }
+               else
+               {
+                       UndecoratedSmoothedPWDB =       
+                                       ( ((UndecoratedSmoothedPWDB)*(Rx_Smooth_Factor-1)) + 
+                                       (pstats->RxPWDBAll)) /(Rx_Smooth_Factor);
+               }
+               if(pnet)
+               {
+                       if(priv->mshobj->ext_patch_set_peermp_rssi_param)
+                               priv->mshobj->ext_patch_set_peermp_rssi_param(pnet,UndecoratedSmoothedPWDB);
+               }
+               else
+               {
+                       priv->undecorated_smoothed_pwdb = UndecoratedSmoothedPWDB;
+               }
+               rtl819x_update_rxsignalstatistics8192S(priv, pstats);
+       }
+}
+
+void Process_UiLinkQuality8192S(struct r8192_priv * priv,struct rtllib_rx_stats * pstats)
+{
+       u32     last_evm=0, nSpatialStream, tmpVal;
+
+       if(pstats->SignalQuality != 0)  
+       {
+               if (pstats->bPacketToSelf || pstats->bPacketBeacon)
+               {
+                       if(priv->stats.ui_link_quality.TotalNum++ >= PHY_LINKQUALITY_SLID_WIN_MAX)
+                       {
+                               priv->stats.ui_link_quality.TotalNum = PHY_LINKQUALITY_SLID_WIN_MAX;
+                               last_evm = priv->stats.ui_link_quality.elements[priv->stats.ui_link_quality.index];
+                               priv->stats.ui_link_quality.TotalVal -= last_evm;
+                       }
+                       priv->stats.ui_link_quality.TotalVal += pstats->SignalQuality;
+
+                       priv->stats.ui_link_quality.elements[priv->stats.ui_link_quality.index++] = pstats->SignalQuality;
+                       if(priv->stats.ui_link_quality.index >= PHY_LINKQUALITY_SLID_WIN_MAX)
+                               priv->stats.ui_link_quality.index = 0;
+
+
+                       tmpVal = priv->stats.ui_link_quality.TotalVal/priv->stats.ui_link_quality.TotalNum;
+                       priv->stats.signal_quality = tmpVal;
+                       priv->stats.last_signal_strength_inpercent = tmpVal;
+               
+                       for(nSpatialStream = 0; nSpatialStream<2 ; nSpatialStream++)    
+                       {
+                               if(pstats->RxMIMOSignalQuality[nSpatialStream] != -1)
+                               {
+                                       if(priv->stats.rx_evm_percentage[nSpatialStream] == 0)  
+                                       {
+                                               priv->stats.rx_evm_percentage[nSpatialStream] = pstats->RxMIMOSignalQuality[nSpatialStream];
+                                       }
+                                       priv->stats.rx_evm_percentage[nSpatialStream] = 
+                                       ( (priv->stats.rx_evm_percentage[nSpatialStream]*(Rx_Smooth_Factor-1)) + 
+                                       (pstats->RxMIMOSignalQuality[nSpatialStream]* 1)) /(Rx_Smooth_Factor);
+                               }
+                       }
+               }
+       }
+       else
+               ;
+       
+}      
+#endif
+
+
+#ifdef _RTL8192_EXT_PATCH_
+void rtl8192se_process_phyinfo(struct r8192_priv * priv, u8* buffer,struct rtllib_rx_stats * pcurrent_stats,struct rtllib_network * pnet)
+#else
+void rtl8192se_process_phyinfo(struct r8192_priv * priv, u8* buffer,struct rtllib_rx_stats * pprevious_stats, struct rtllib_rx_stats * pcurrent_stats)
+#endif
+{
+#ifdef _RTL8192_EXT_PATCH_
+       if(!pcurrent_stats->bPacketMatchBSSID)
+               return;
+       Process_UI_RSSI_8192S(priv, pcurrent_stats);
+       Process_PWDB_8192S(priv, pcurrent_stats, pnet);
+       Process_UiLinkQuality8192S(priv, pcurrent_stats);       
+#else
+       bool bcheck = false;
+       u8      rfpath;
+       u32 nspatial_stream, tmp_val;
+       static u32 slide_rssi_index=0, slide_rssi_statistics=0; 
+       static u32 slide_evm_index=0, slide_evm_statistics=0;
+       static u32 last_rssi=0, last_evm=0;
+       static u32 slide_beacon_adc_pwdb_index=0, slide_beacon_adc_pwdb_statistics=0;
+       static u32 last_beacon_adc_pwdb=0;
+
+       struct rtllib_hdr_3addr *hdr;
+       u16 sc ;
+       unsigned int frag,seq;
+       hdr = (struct rtllib_hdr_3addr *)buffer;
+       sc = le16_to_cpu(hdr->seq_ctl);
+       frag = WLAN_GET_SEQ_FRAG(sc);
+       seq = WLAN_GET_SEQ_SEQ(sc);
+       pcurrent_stats->Seq_Num = seq;
+       if(!pprevious_stats->bIsAMPDU)
+       {
+               bcheck = true;
+       }else 
+       {
+#if 0
+               if( !pcurrent_stats->bIsAMPDU || pcurrent_stats->bFirstMPDU)
+                       bcheck = true;
+#endif
+       }
+               
+       if(slide_rssi_statistics++ >= PHY_RSSI_SLID_WIN_MAX)
+       {
+               slide_rssi_statistics = PHY_RSSI_SLID_WIN_MAX;
+               last_rssi = priv->stats.slide_signal_strength[slide_rssi_index];
+               priv->stats.slide_rssi_total -= last_rssi;
+       }
+       priv->stats.slide_rssi_total += pprevious_stats->SignalStrength;
+       
+       priv->stats.slide_signal_strength[slide_rssi_index++] = pprevious_stats->SignalStrength;
+       if(slide_rssi_index >= PHY_RSSI_SLID_WIN_MAX)
+               slide_rssi_index = 0;
+       
+       tmp_val = priv->stats.slide_rssi_total/slide_rssi_statistics;
+       priv->stats.signal_strength = rtl819x_translate_todbm(priv, (u8)tmp_val);
+       pcurrent_stats->rssi = priv->stats.signal_strength;
+       if(!pprevious_stats->bPacketMatchBSSID)
+       {
+               if(!pprevious_stats->bToSelfBA)
+                       return;
+       }
+       
+       if(!bcheck)
+               return;
+
+       rtl819x_process_cck_rxpathsel(priv,pprevious_stats);
+
+       priv->stats.num_process_phyinfo++;
+#if 0
+       if(slide_rssi_statistics++ >= PHY_RSSI_SLID_WIN_MAX)
+       {
+               slide_rssi_statistics = PHY_RSSI_SLID_WIN_MAX;
+               last_rssi = priv->stats.slide_signal_strength[slide_rssi_index];
+               priv->stats.slide_rssi_total -= last_rssi;
+       }
+       priv->stats.slide_rssi_total += pprevious_stats->SignalStrength;
+       
+       priv->stats.slide_signal_strength[slide_rssi_index++] = pprevious_stats->SignalStrength;
+       if(slide_rssi_index >= PHY_RSSI_SLID_WIN_MAX)
+               slide_rssi_index = 0;
+       
+       tmp_val = priv->stats.slide_rssi_total/slide_rssi_statistics;
+       priv->stats.signal_strength = rtl819x_translate_todbm(priv, (u8)tmp_val);
+
+#endif
+       if(!pprevious_stats->bIsCCK && pprevious_stats->bPacketToSelf)
+       {
+               for (rfpath = RF90_PATH_A; rfpath < RF90_PATH_C; rfpath++)
+               {
+                       if (!rtl8192_phy_CheckIsLegalRFPath(priv->rtllib->dev, rfpath))
+                               continue;
+                       RT_TRACE(COMP_DBG,"Jacken -> pPreviousstats->RxMIMOSignalStrength[rfpath]  = %d \n" ,pprevious_stats->RxMIMOSignalStrength[rfpath] );            
+                       if(priv->stats.rx_rssi_percentage[rfpath] == 0)
+                       {
+                               priv->stats.rx_rssi_percentage[rfpath] = pprevious_stats->RxMIMOSignalStrength[rfpath];
+                       }       
+                       if(pprevious_stats->RxMIMOSignalStrength[rfpath]  > priv->stats.rx_rssi_percentage[rfpath])
+                       {
+                               priv->stats.rx_rssi_percentage[rfpath] = 
+                                       ( (priv->stats.rx_rssi_percentage[rfpath]*(Rx_Smooth_Factor-1)) + 
+                                       (pprevious_stats->RxMIMOSignalStrength[rfpath])) /(Rx_Smooth_Factor);
+                               priv->stats.rx_rssi_percentage[rfpath] = priv->stats.rx_rssi_percentage[rfpath]  + 1;
+                       }
+                       else
+                       {
+                               priv->stats.rx_rssi_percentage[rfpath] = 
+                                       ( (priv->stats.rx_rssi_percentage[rfpath]*(Rx_Smooth_Factor-1)) + 
+                                       (pprevious_stats->RxMIMOSignalStrength[rfpath])) /(Rx_Smooth_Factor);
+                       }       
+                       RT_TRACE(COMP_DBG,"Jacken -> priv->RxStats.RxRSSIPercentage[rfPath]  = %d \n" ,priv->stats.rx_rssi_percentage[rfpath] );
+               }               
+       }
+       
+       
+       if(pprevious_stats->bPacketBeacon)
+       {
+               if(slide_beacon_adc_pwdb_statistics++ >= PHY_Beacon_RSSI_SLID_WIN_MAX)
+               {
+                       slide_beacon_adc_pwdb_statistics = PHY_Beacon_RSSI_SLID_WIN_MAX;        
+                       last_beacon_adc_pwdb = priv->stats.Slide_Beacon_pwdb[slide_beacon_adc_pwdb_index];
+                       priv->stats.Slide_Beacon_Total -= last_beacon_adc_pwdb;
+               }
+               priv->stats.Slide_Beacon_Total += pprevious_stats->RxPWDBAll;
+               priv->stats.Slide_Beacon_pwdb[slide_beacon_adc_pwdb_index] = pprevious_stats->RxPWDBAll;
+               slide_beacon_adc_pwdb_index++;
+               if(slide_beacon_adc_pwdb_index >= PHY_Beacon_RSSI_SLID_WIN_MAX)
+                       slide_beacon_adc_pwdb_index = 0;
+               pprevious_stats->RxPWDBAll = priv->stats.Slide_Beacon_Total/slide_beacon_adc_pwdb_statistics;
+               if(pprevious_stats->RxPWDBAll >= 3)
+                       pprevious_stats->RxPWDBAll -= 3;
+       }
+
+       RT_TRACE(COMP_RXDESC, "Smooth %s PWDB = %d\n", 
+                               pprevious_stats->bIsCCK? "CCK": "OFDM",
+                               pprevious_stats->RxPWDBAll);
+
+       if(pprevious_stats->bPacketToSelf || pprevious_stats->bPacketBeacon || pprevious_stats->bToSelfBA)
+       {
+               if(priv->undecorated_smoothed_pwdb < 0) 
+               {
+                       priv->undecorated_smoothed_pwdb = pprevious_stats->RxPWDBAll;
+               }
+#if 1
+               if(pprevious_stats->RxPWDBAll > (u32)priv->undecorated_smoothed_pwdb)
+               {
+                       priv->undecorated_smoothed_pwdb =       
+                                       ( ((priv->undecorated_smoothed_pwdb)*(Rx_Smooth_Factor-1)) + 
+                                       (pprevious_stats->RxPWDBAll)) /(Rx_Smooth_Factor);
+                       priv->undecorated_smoothed_pwdb = priv->undecorated_smoothed_pwdb + 1;
+               }
+               else
+               {
+                       priv->undecorated_smoothed_pwdb =       
+                                       ( ((priv->undecorated_smoothed_pwdb)*(Rx_Smooth_Factor-1)) + 
+                                       (pprevious_stats->RxPWDBAll)) /(Rx_Smooth_Factor);
+               }
+#else
+               if(pPreviousRfd->Status.RxPWDBAll > (u32)pHalData->UndecoratedSmoothedPWDB)
+               {
+                       pHalData->UndecoratedSmoothedPWDB =     
+                                       ( ((pHalData->UndecoratedSmoothedPWDB)* 5) + (pPreviousRfd->Status.RxPWDBAll)) / 6;
+                       pHalData->UndecoratedSmoothedPWDB = pHalData->UndecoratedSmoothedPWDB + 1;
+               }
+               else
+               {
+                       pHalData->UndecoratedSmoothedPWDB =     
+                                       ( ((pHalData->UndecoratedSmoothedPWDB)* 5) + (pPreviousRfd->Status.RxPWDBAll)) / 6;
+               }               
+#endif
+               rtl819x_update_rxsignalstatistics8190pci(priv,pprevious_stats);
+       }
+
+       if(pprevious_stats->SignalQuality == 0)
+       {
+       }
+       else
+       {
+               if(pprevious_stats->bPacketToSelf || pprevious_stats->bPacketBeacon || pprevious_stats->bToSelfBA){
+                       if(slide_evm_statistics++ >= PHY_RSSI_SLID_WIN_MAX){
+                               slide_evm_statistics = PHY_RSSI_SLID_WIN_MAX;
+                               last_evm = priv->stats.slide_evm[slide_evm_index];
+                               priv->stats.slide_evm_total -= last_evm;
+                       }
+       
+                       priv->stats.slide_evm_total += pprevious_stats->SignalQuality;
+       
+                       priv->stats.slide_evm[slide_evm_index++] = pprevious_stats->SignalQuality;
+                       if(slide_evm_index >= PHY_RSSI_SLID_WIN_MAX)
+                               slide_evm_index = 0;
+       
+                       tmp_val = priv->stats.slide_evm_total/slide_evm_statistics;
+                       priv->stats.signal_quality = tmp_val;
+                       priv->stats.last_signal_strength_inpercent = tmp_val;
+               }
+
+               if(pprevious_stats->bPacketToSelf || pprevious_stats->bPacketBeacon || pprevious_stats->bToSelfBA)
+               {
+                       for(nspatial_stream = 0; nspatial_stream<2 ; nspatial_stream++) 
+                       {
+                               if(pprevious_stats->RxMIMOSignalQuality[nspatial_stream] != -1)
+                               {
+                                       if(priv->stats.rx_evm_percentage[nspatial_stream] == 0) 
+                                       {
+                                               priv->stats.rx_evm_percentage[nspatial_stream] = pprevious_stats->RxMIMOSignalQuality[nspatial_stream];
+                                       }
+                                       priv->stats.rx_evm_percentage[nspatial_stream] = 
+                                               ( (priv->stats.rx_evm_percentage[nspatial_stream]* (Rx_Smooth_Factor-1)) + 
+                                               (pprevious_stats->RxMIMOSignalQuality[nspatial_stream]* 1)) / (Rx_Smooth_Factor);
+                               }
+                       }
+               }
+       }
+#endif
+       
+}
+
+
+
+void rtl8192se_TranslateRxSignalStuff(struct net_device *dev, 
+        struct sk_buff *skb,
+        struct rtllib_rx_stats * pstats,
+        prx_desc pdesc,        
+        prx_fwinfo pdrvinfo)
+{
+    struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+    bool bpacket_match_bssid, bpacket_toself;
+    bool bPacketBeacon=false;
+    struct rtllib_hdr_3addr *hdr;
+#ifdef _RTL8192_EXT_PATCH_
+    struct rtllib_network* pnet=NULL;
+#else
+    bool bToSelfBA=false;
+    static struct rtllib_rx_stats  previous_stats;
+#endif
+    u16 fc,type;
+
+
+    u8* tmp_buf;
+    u8 *praddr;
+#ifdef _RTL8192_EXT_PATCH_
+    u8 *psaddr;
+#endif
+
+    tmp_buf = skb->data + pstats->RxDrvInfoSize + pstats->RxBufShift;
+
+    hdr = (struct rtllib_hdr_3addr *)tmp_buf;
+    fc = le16_to_cpu(hdr->frame_ctl);
+    type = WLAN_FC_GET_TYPE(fc);       
+    praddr = hdr->addr1;
+
+#ifdef _RTL8192_EXT_PATCH_
+    psaddr = hdr->addr2;
+    if((priv->rtllib->iw_mode == IW_MODE_MESH) && (priv->mshobj->ext_patch_get_mpinfo))
+               pnet = priv->mshobj->ext_patch_get_mpinfo(dev,psaddr);  
+#endif
+#ifdef _RTL8192_EXT_PATCH_
+    bpacket_match_bssid = ((RTLLIB_FTYPE_CTL != type) && (!pstats->bHwError) && (!pstats->bCRC)&& (!pstats->bICV));
+    if(pnet){
+        bpacket_match_bssid = bpacket_match_bssid;
+    }
+    else{
+        bpacket_match_bssid = bpacket_match_bssid &&
+            (!compare_ether_addr(priv->rtllib->current_network.bssid, 
+                                (fc & RTLLIB_FCTL_TODS)? hdr->addr1 : 
+                                (fc & RTLLIB_FCTL_FROMDS )? hdr->addr2 : hdr->addr3));
+    }
+#else
+    bpacket_match_bssid = ((RTLLIB_FTYPE_CTL != type) &&
+            (!compare_ether_addr(priv->rtllib->current_network.bssid,  
+                      (fc & RTLLIB_FCTL_TODS)? hdr->addr1 : 
+                      (fc & RTLLIB_FCTL_FROMDS )? hdr->addr2 : hdr->addr3))
+            && (!pstats->bHwError) && (!pstats->bCRC)&& (!pstats->bICV));
+#endif
+    bpacket_toself =  bpacket_match_bssid & (!compare_ether_addr(praddr, priv->rtllib->dev->dev_addr));
+    if(WLAN_FC_GET_FRAMETYPE(fc)== RTLLIB_STYPE_BEACON)
+    {
+        bPacketBeacon = true;
+    }
+#ifndef _RTL8192_EXT_PATCH_
+    if(WLAN_FC_GET_FRAMETYPE(fc) == RTLLIB_STYPE_BLOCKACK)
+    {
+        if ((!compare_ether_addr(praddr,dev->dev_addr)))
+            bToSelfBA = true;
+    }
+
+#endif 
+    if(bpacket_match_bssid)
+    {
+        priv->stats.numpacket_matchbssid++;
+    }
+    if(bpacket_toself){
+        priv->stats.numpacket_toself++;
+    }
+#ifdef _RTL8192_EXT_PATCH_
+    rtl8192se_query_rxphystatus(priv, pstats, pdesc, pdrvinfo, bpacket_match_bssid,
+            bpacket_toself ,bPacketBeacon);
+    rtl8192se_process_phyinfo(priv, tmp_buf,pstats,pnet);
+    
+#else
+    rtl8192se_process_phyinfo(priv, tmp_buf,&previous_stats, pstats);
+    rtl8192se_query_rxphystatus(priv, pstats, pdesc, pdrvinfo, &previous_stats, bpacket_match_bssid,
+            bpacket_toself ,bPacketBeacon, bToSelfBA);
+    rtl8192x_record_rxdesc_forlateruse(pstats, &previous_stats);
+#endif 
+
+}
+
+void rtl8192se_UpdateReceivedRateHistogramStatistics(
+       struct net_device *dev,
+       struct rtllib_rx_stats* pstats
+       )
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       u32 rcvType=1;   
+       u32 rateIndex;
+       u32 preamble_guardinterval;  
+           
+       #if 0
+       if (pRfd->queue_id == CMPK_RX_QUEUE_ID)
+               return;
+       #endif
+       if(pstats->bCRC)
+               rcvType = 2;
+       else if(pstats->bICV)
+               rcvType = 3;
+           
+       if(pstats->bShortPreamble)
+               preamble_guardinterval = 1;
+       else
+               preamble_guardinterval = 0;
+
+       switch(pstats->rate)
+       {
+               case MGN_1M:    rateIndex = 0;  break;
+               case MGN_2M:    rateIndex = 1;  break;
+               case MGN_5_5M:  rateIndex = 2;  break;
+               case MGN_11M:   rateIndex = 3;  break;
+               case MGN_6M:    rateIndex = 4;  break;
+               case MGN_9M:    rateIndex = 5;  break;
+               case MGN_12M:   rateIndex = 6;  break;
+               case MGN_18M:   rateIndex = 7;  break;
+               case MGN_24M:   rateIndex = 8;  break;
+               case MGN_36M:   rateIndex = 9;  break;
+               case MGN_48M:   rateIndex = 10; break;
+               case MGN_54M:   rateIndex = 11; break;
+               case MGN_MCS0:  rateIndex = 12; break;
+               case MGN_MCS1:  rateIndex = 13; break;
+               case MGN_MCS2:  rateIndex = 14; break;
+               case MGN_MCS3:  rateIndex = 15; break;
+               case MGN_MCS4:  rateIndex = 16; break;
+               case MGN_MCS5:  rateIndex = 17; break;
+               case MGN_MCS6:  rateIndex = 18; break;
+               case MGN_MCS7:  rateIndex = 19; break;
+               case MGN_MCS8:  rateIndex = 20; break;
+               case MGN_MCS9:  rateIndex = 21; break;
+               case MGN_MCS10: rateIndex = 22; break;
+               case MGN_MCS11: rateIndex = 23; break;
+               case MGN_MCS12: rateIndex = 24; break;
+               case MGN_MCS13: rateIndex = 25; break;
+               case MGN_MCS14: rateIndex = 26; break;
+               case MGN_MCS15: rateIndex = 27; break;
+               default:        rateIndex = 28; break;
+       }
+       priv->stats.received_preamble_GI[preamble_guardinterval][rateIndex]++;
+       priv->stats.received_rate_histogram[0][rateIndex]++; 
+       priv->stats.received_rate_histogram[rcvType][rateIndex]++;
+}
+
+bool rtl8192se_rx_query_status_desc(struct net_device* dev, struct rtllib_rx_stats*  stats, rx_desc *pdesc, struct sk_buff* skb)
+{
+       struct r8192_priv* priv = rtllib_priv(dev);
+       struct rtllib_device* ieee = priv->rtllib;
+       u32     PHYStatus       = pdesc->PHYStatus;
+       rx_fwinfo*              pDrvInfo;
+       stats->Length           = (u16)pdesc->Length;   
+       stats->RxDrvInfoSize = (u8)pdesc->DrvInfoSize*8;
+       stats->RxBufShift       = (u8)((pdesc->Shift)&0x03);      
+       stats->bICV                     = (u16)pdesc->ICVError;
+       stats->bCRC                     = (u16)pdesc->CRC32;
+       stats->bHwError                 = (u16)(pdesc->CRC32|pdesc->ICVError);  
+       stats->Decrypted        = !pdesc->SWDec;
+       stats->rate = (u8)pdesc->RxMCS;
+       stats->bShortPreamble= (u16)pdesc->SPLCP;
+       stats->bIsAMPDU                 = (bool)(pdesc->PAGGR==1);
+       stats->bFirstMPDU       = (bool)((pdesc->PAGGR==1) && (pdesc->FAGGR==1));
+       stats->TimeStampLow     = pdesc->TSFL;
+       stats->RxIs40MHzPacket= (bool)pdesc->BandWidth;
+       if(IS_UNDER_11N_AES_MODE(ieee))
+       {
+               if(stats->bICV && !stats->bCRC)
+               {
+                       stats->bICV = false;
+                       stats->bHwError = false;
+               }
+       }
+
+       
+       if(stats->Length > 0x2000 || stats->Length < 24)
+       {
+               RT_TRACE(COMP_ERR, "Err RX pkt len = 0x%x\n", stats->Length);
+               stats->bHwError |= 1;
+       }
+       rtl8192se_UpdateReceivedRateHistogramStatistics(dev, stats);
+
+       if(!stats->bHwError)
+               stats->rate = HwRateToMRate92S((bool)(pdesc->RxHT), (u8)(pdesc->RxMCS));
+       else
+       {
+               stats->rate = MGN_1M;
+               return false;
+       }
+
+       rtl819x_UpdateRxPktTimeStamp(dev, stats);       
+
+       if((stats->RxBufShift + stats->RxDrvInfoSize) > 0)
+               stats->bShift = 1;      
+
+       if (PHYStatus == true)
+       {
+               pDrvInfo = (rx_fwinfo*)(skb->data + stats->RxBufShift);
+                       
+               rtl8192se_TranslateRxSignalStuff(dev, skb, stats, pdesc, pDrvInfo); 
+
+       }
+       return true;    
+}
+
+void rtl8192se_halt_adapter(struct net_device *dev, bool bReset)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+        int i;
+       u8      wait = 30;      
+
+       RT_TRACE(COMP_INIT, "==> rtl8192se_halt_adapter()\n");
+       
+#if 1
+       while (wait-- >= 10 && priv->PwrDomainProtect == true)
+       {
+               if (priv->PwrDomainProtect == true)
+               {
+                       RT_TRACE(COMP_INIT, "Delay 20ms to wait PwrDomainProtect\n");
+                       mdelay(20);
+               }
+               else
+                       break;
+       }
+
+       if (wait == 9)
+               RT_TRACE(COMP_INIT, "PwrDomainProtect FAIL\n");
+#endif
+
+       priv->rtllib->state = RTLLIB_NOLINK;
+       rtl8192se_update_msr(dev);
+#if 1
+       PHY_SetRtl8192seRfHalt(dev);
+#endif
+       udelay(100);
+
+#if 0
+       udelay(20);
+       if (!bReset) {
+               mdelay(20);
+       }       
+#endif 
+        for(i = 0; i < MAX_QUEUE_SIZE; i++) {
+                skb_queue_purge(&priv->rtllib->skb_waitQ [i]);
+        }
+        for(i = 0; i < MAX_QUEUE_SIZE; i++) {
+                skb_queue_purge(&priv->rtllib->skb_aggQ [i]);
+        }
+#ifdef _RTL8192_EXT_PATCH_     
+               for(i = 0; i < MAX_QUEUE_SIZE; i++) {
+                skb_queue_purge(&priv->rtllib->skb_meshaggQ [i]);
+        }
+#endif
+
+       skb_queue_purge(&priv->skb_queue);
+       RT_TRACE(COMP_INIT, "<== HaltAdapter8192SE()\n");
+       return;
+}
+
+u8 GetFreeRATRIndex8192SE (struct net_device* dev)
+{
+       struct r8192_priv* priv = rtllib_priv(dev);
+       u8 bitmap = priv->RATRTableBitmap;
+       u8 ratr_index = 0;
+       for(    ;ratr_index<7; ratr_index++)
+       {
+               if((bitmap & BIT0) == 0)
+                       {
+                               priv->RATRTableBitmap |= BIT0<<ratr_index;
+                               return ratr_index;
+                       }
+               bitmap = bitmap >>1;
+       }
+       return ratr_index;
+}
+
+void rtl8192se_update_ratr_table(struct net_device* dev,u8* pMcsRate,struct sta_info* pEntry)
+{
+       struct r8192_priv* priv = rtllib_priv(dev);
+       struct rtllib_device* ieee = priv->rtllib;
+       u32 ratr_value = 0;
+       u8 ratr_index = 0;
+       u8 bNMode = 0;
+       u16 shortGI_rate = 0;
+       u32 tmp_ratr_value = 0;
+       u8 MimoPs;
+       WIRELESS_MODE WirelessMode;
+       u8 bCurTxBW40MHz, bCurShortGI40MHz, bCurShortGI20MHz;
+       
+       if(ieee->iw_mode == IW_MODE_ADHOC){     
+
+               if(pEntry == NULL){
+                       printk("Doesn't have match Entry\n");
+                       return;
+               }       
+
+               if(pEntry->ratr_index != 8)
+                       ratr_index = pEntry->ratr_index;
+               else
+                       ratr_index = GetFreeRATRIndex8192SE(dev);
+               
+               if(ratr_index == 7){
+                       RT_TRACE(COMP_RATE, "Ratrtable are full");
+                       return;
+               }
+               MimoPs = pEntry->htinfo.MimoPs;
+
+               if((ieee->mode == WIRELESS_MODE_G) && (pEntry->wireless_mode == WIRELESS_MODE_N_24G))
+                       WirelessMode = ieee->mode;
+               else    
+                       WirelessMode = pEntry->wireless_mode;
+
+               bCurTxBW40MHz = pEntry->htinfo.bCurTxBW40MHz;
+               bCurShortGI40MHz = pEntry->htinfo.bCurShortGI40MHz;
+               bCurShortGI20MHz = pEntry->htinfo.bCurShortGI20MHz;             
+               pEntry->ratr_index = ratr_index;
+       }
+       else  
+       {
+               ratr_index = 0;
+               WirelessMode = ieee->mode;
+               MimoPs = ieee->pHTInfo->PeerMimoPs;
+               bCurTxBW40MHz = ieee->pHTInfo->bCurTxBW40MHz;
+               bCurShortGI40MHz = ieee->pHTInfo->bCurShortGI40MHz;
+               bCurShortGI20MHz = ieee->pHTInfo->bCurShortGI20MHz;                                     
+       }
+
+       rtl8192_config_rate(dev, (u16*)(&ratr_value));
+       ratr_value |= (*(u16*)(pMcsRate)) << 12;
+       switch (WirelessMode)
+       {
+               case IEEE_A:
+                       ratr_value &= 0x00000FF0;
+                       break;
+               case IEEE_B:
+                       ratr_value &= 0x0000000D;
+                       break;
+               case IEEE_G:
+               case IEEE_G|IEEE_B:
+                       ratr_value &= 0x00000FF5;
+                       break;
+               case IEEE_N_24G:
+               case IEEE_N_5G:
+                       bNMode = 1;
+                       if (MimoPs == 0) 
+                               ratr_value &= 0x0007F005;
+                       else{
+                               if (priv->rf_type == RF_1T2R ||priv->rf_type  == RF_1T1R || (ieee->pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_TX_2SS)){
+                                       if ((bCurTxBW40MHz) && !(ieee->pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_TX_40_MHZ))
+                                               ratr_value &= 0x000FF015;
+                                       else
+                                               ratr_value &= 0x000ff005;
+                               }else{
+                                       if ((bCurTxBW40MHz) && !(ieee->pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_TX_40_MHZ))
+                                               ratr_value &= 0x0f0ff015;
+                                       else
+                                               ratr_value &= 0x0f0ff005;
+                                       }
+                       }
+                       break;
+               default:
+                       printk("====>%s(), mode is not correct:%x\n", __FUNCTION__,WirelessMode);
+                       break; 
+       }
+       if (priv->card_8192_version>= VERSION_8192S_BCUT)
+               ratr_value &= 0x0FFFFFFF;
+       else if (priv->card_8192_version == VERSION_8192S_ACUT)
+               ratr_value &= 0x0FFFFFF0;       
+       
+       if (((ieee->pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_SHORT_GI)==0) &&
+               bNMode && ((bCurTxBW40MHz && bCurShortGI40MHz) ||
+           (!bCurTxBW40MHz && bCurShortGI20MHz)))
+       {
+               ratr_value |= 0x10000000;  
+               tmp_ratr_value = (ratr_value>>12);
+               for(shortGI_rate=15; shortGI_rate>0; shortGI_rate--)
+               {
+                       if((1<<shortGI_rate) & tmp_ratr_value)
+                               break;
+               }       
+               shortGI_rate = (shortGI_rate<<12)|(shortGI_rate<<8)|\
+                              (shortGI_rate<<4)|(shortGI_rate);
+               write_nic_byte(dev, SG_RATE, shortGI_rate);
+       }
+
+       if(ieee->pHTInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom)
+       {
+               ratr_value &= 0xfffffff0; 
+               printk("UpdateHalRATRTable8192SE(), for HT_IOT_ACT_WA_IOT_Broadcom, ratr_value = 0x%x\n", ratr_value);
+       }
+       
+       write_nic_dword(dev, ARFR0+ratr_index*4, ratr_value);
+       if (ratr_value & 0xfffff000){
+               rtl8192se_set_fw_cmd(dev, FW_CMD_RA_REFRESH_N);
+       }
+       else{
+               rtl8192se_set_fw_cmd(dev, FW_CMD_RA_REFRESH_BG);
+       }
+}
+
+int r8192se_resume_firm(struct net_device *dev)
+{
+       write_nic_byte(dev, 0x42, 0xFF);
+       write_nic_word(dev, 0x40, 0x77FC);
+       write_nic_word(dev, 0x40, 0x57FC);
+       write_nic_word(dev, 0x40, 0x37FC);
+       write_nic_word(dev, 0x40, 0x77FC);
+       
+       udelay(100);
+
+       write_nic_word(dev, 0x40, 0x57FC);
+       write_nic_word(dev, 0x40, 0x37FC);
+       write_nic_byte(dev, 0x42, 0x00);
+
+       return 0;
+}
+void PHY_SetRtl8192seRfHalt(struct net_device* dev)
+{
+       struct r8192_priv* priv = rtllib_priv(dev);
+       PRT_POWER_SAVE_CONTROL  pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl));
+       u8 u1bTmp;
+
+       if(priv->rtllib->RfOffReason == RF_CHANGE_BY_IPS && priv->LedStrategy == SW_LED_MODE8)  
+       {
+               SET_RTL8192SE_RF_SLEEP(dev);
+               return;
+       }
+
+#ifdef LOW_DOWN_POWER
+       if(0)
+#else
+       if(priv->bDriverIsGoingToUnload)
+#endif
+               write_nic_byte(dev,0x560,0x0);
+
+       RT_TRACE(COMP_PS, "PHY_SetRtl8192seRfHalt save BB/RF\n");
+       u1bTmp = read_nic_byte(dev, LDOV12D_CTRL);
+       u1bTmp |= BIT0;
+       write_nic_byte(dev, LDOV12D_CTRL, u1bTmp);
+       write_nic_byte(dev, SPS1_CTRL, 0x0);
+       write_nic_byte(dev, TXPAUSE, 0xFF);
+       write_nic_word(dev, CMDR, 0x57FC);
+       udelay(100);
+       write_nic_word(dev, CMDR, 0x77FC);
+       write_nic_byte(dev, PHY_CCA, 0x0);
+       udelay(10);
+       write_nic_word(dev, CMDR, 0x37FC);
+       udelay(10);
+       write_nic_word(dev, CMDR, 0x77FC);                      
+       udelay(10);
+       write_nic_word(dev, CMDR, 0x57FC);
+       write_nic_word(dev, CMDR, 0x0000);
+
+
+#ifdef LOW_DOWN_POWER
+       if(0)
+#else
+       if(priv->bDriverIsGoingToUnload)
+#endif
+        {
+              u1bTmp = read_nic_byte(dev, (SYS_FUNC_EN+ 1));   
+               u1bTmp &= ~(BIT0);
+               write_nic_byte(dev, SYS_FUNC_EN+1, u1bTmp);
+        }
+
+       
+       u1bTmp = read_nic_byte(dev, (SYS_CLKR + 1));
+       
+       if (u1bTmp & BIT7) {
+               u1bTmp &= ~(BIT6 | BIT7);                                       
+               if(!HalSetSysClk8192SE(dev, u1bTmp)) {
+                       printk("Switch ctrl path fail\n");
+                       return;
+               }
+       }
+
+#ifdef LOW_DOWN_POWER
+        if((priv->rtllib->RfOffReason & (RF_CHANGE_BY_IPS | RF_CHANGE_BY_HW)) &&
+                !priv->bDriverIsGoingToUnload)
+#else
+       if(priv->rtllib->RfOffReason==RF_CHANGE_BY_IPS  && !priv->bDriverIsGoingToUnload)
+#endif
+       {
+               write_nic_byte(dev, 0x03, 0xF9);
+       } else          
+       {
+               write_nic_byte(dev, 0x03, 0xF9);
+       }
+       write_nic_byte(dev, SYS_CLKR+1, 0x70);
+       write_nic_byte(dev, AFE_PLL_CTRL+1, 0x68);
+       write_nic_byte(dev,  AFE_PLL_CTRL, 0x00);       
+       write_nic_byte(dev, LDOA15_CTRL, 0x34);
+       write_nic_byte(dev, AFE_XTAL_CTRL, 0x0E);
+       RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC);
+}      
+
+
+/*
+*      Description:
+*              Set RateAdaptive Mask
+*      /param  Adapter         Pionter to Adapter entity
+*      /param  bMulticast      TURE if broadcast or multicast, used for softAP basic rate
+*      /param  macId           macID to set
+*      /param  wirelessMode    wireless mode of associated AP/client
+*      /return void
+*      
+*/
+#ifdef _RTL8192_EXT_PATCH_
+void UpdateHalRAMask8192SE(
+       struct net_device* dev,
+       bool bMulticast,
+       u8   macId,
+       u8*  MacAddr,
+       u8   wirelessMode,
+       u8   rssi_level)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device *ieee = priv->rtllib;
+       PRT_HIGH_THROUGHPUT     pHTInfo =ieee->pHTInfo;
+       u32     ratr_bitmap, RateSet;
+       u8      shortGI_rate = 0;
+       u32     tmp_ratr_value = 0;
+       u32     mask=0, band = 0;
+       u8      bShortGI = 0;
+
+       rtl8192_config_rate(dev, (u16*)(&RateSet));
+       RateSet |= (*((u16*)(ieee->dot11HTOperationalRateSet))) << 12;
+       ratr_bitmap = RateSet;
+       
+       switch (wirelessMode)
+       {
+               case WIRELESS_MODE_B:
+               {
+                       band |= WIRELESS_11B;
+                       ratr_bitmap &= 0x0000000d;
+               }
+               break;
+
+               case WIRELESS_MODE_G:
+               {
+                       band |= (WIRELESS_11G | WIRELESS_11B);
+                       if(rssi_level == 1)
+                               ratr_bitmap &= 0x00000f00;
+                       else if(rssi_level == 2)
+                               ratr_bitmap &= 0x00000ff0;
+                       else
+                               ratr_bitmap &= 0x00000ff5;
+               }
+               break;
+                       
+               case WIRELESS_MODE_A:
+               {
+                       band |= BIT2;
+                       ratr_bitmap &= 0x00000ff0;
+               }
+               break;
+                       
+               case WIRELESS_MODE_N_24G:
+               case WIRELESS_MODE_N_5G:
+               {
+                       band |= (WIRELESS_11N| WIRELESS_11G| WIRELESS_11B);
+                       if(macId == 0)  
+                       {
+                               if(ieee->pHTInfo->PeerMimoPs == MIMO_PS_STATIC)
+                               {
+                                       if(rssi_level == 1)
+                                               ratr_bitmap &= 0x00070000;
+                                       else if(rssi_level == 2)
+                                               ratr_bitmap &= 0x0007f000;
+                                       else
+                                               ratr_bitmap &= 0x0007f005;
+                               }
+                               else
+                               {
+                                       if (    priv->rf_type == RF_1T2R ||
+                                               priv->rf_type == RF_1T1R        )
+                                       {
+                                               if (pHTInfo->bCurTxBW40MHz)
+                                               {
+                                                       if(rssi_level == 1)
+                                                               ratr_bitmap &= 0x000f0000;
+                                                       else if(rssi_level == 2)
+                                                               ratr_bitmap &= 0x000ff000;
+                                                       else
+                                                               ratr_bitmap &= 0x000ff015;
+                                               }
+                                               else
+                                               {
+                                                       if(rssi_level == 1)
+                                                               ratr_bitmap &= 0x000f0000;
+                                                       else if(rssi_level == 2)
+                                                               ratr_bitmap &= 0x000ff000;
+                                                       else
+                                                               ratr_bitmap &= 0x000ff005;
+                                               }       
+                                       }
+                                       else
+                                       {
+                                               if (pHTInfo->bCurTxBW40MHz)
+                                               {
+                                                       if(rssi_level == 1)
+                                                               ratr_bitmap &= 0x0f0f0000;
+                                                       else if(rssi_level == 2)
+                                                               ratr_bitmap &= 0x0f0ff000;
+                                                       else
+                                                               ratr_bitmap &= 0x0f0ff015;
+                                               }
+                                               else
+                                               {
+                                                       if(rssi_level == 1)
+                                                               ratr_bitmap &= 0x0f0f0000;
+                                                       else if(rssi_level == 2)
+                                                               ratr_bitmap &= 0x0f0ff000;
+                                                       else
+                                                               ratr_bitmap &= 0x0f0ff005;
+                                               }
+                                       }
+                               }
+
+                               if( (pHTInfo->bCurTxBW40MHz && pHTInfo->bCurShortGI40MHz) ||
+                                       (!pHTInfo->bCurTxBW40MHz && pHTInfo->bCurShortGI20MHz)  )
+                               {
+                                       bShortGI = true;
+
+                                       tmp_ratr_value = (ratr_bitmap>>12);
+                                       for(shortGI_rate=15; shortGI_rate>0; shortGI_rate--)
+                                       {
+                                               if((1<<shortGI_rate) & tmp_ratr_value)
+                                                       break;
+                                       }       
+                                       shortGI_rate = (shortGI_rate<<12)|(shortGI_rate<<8)|(shortGI_rate<<4)|(shortGI_rate);
+                                       write_nic_byte(dev, SG_RATE, shortGI_rate);
+                               }
+                       }
+                       else if(macId == 1)
+                       {
+                               if ( priv->rf_type == RF_1T2R || priv->rf_type == RF_1T1R )
+                               {
+                                       if (pHTInfo->bCurBW40MHz)
+                                       {
+                                               ratr_bitmap &= 0x000ff015;
+                                       }
+                                       else
+                                       {
+                                               ratr_bitmap &= 0x000ff005;
+                                       }
+                               }
+                               else
+                               {
+                                       if (pHTInfo->bCurBW40MHz)
+                                       {
+                                               ratr_bitmap &= 0x0f0ff015;
+                                       }
+                                       else
+                                       {
+                                               ratr_bitmap &= 0x0f0ff005;
+                                       }                               
+                               }
+                       }
+                       else
+                       {
+                               if(ieee->iw_mode == IW_MODE_MESH)
+                               {
+                                       if(ieee->ext_patch_rtllib_update_ratr_mask)
+                                               ieee->ext_patch_rtllib_update_ratr_mask(dev,MacAddr,rssi_level,&ratr_bitmap,&bShortGI);
+                               }                               
+                       }
+               }
+               break;
+
+               default:
+               {
+                       band |= (WIRELESS_11N| WIRELESS_11G| WIRELESS_11B);
+                       if(priv->rf_type == RF_1T2R)
+                       {
+                               ratr_bitmap &= 0x000ff0ff;
+                       }
+                       else
+                       {
+                               ratr_bitmap &= 0x0f0ff0ff;
+                       }
+               }
+       }
+
+       if (priv->card_8192_version >= VERSION_8192S_BCUT)
+               ratr_bitmap &= 0x0FFFFFFF;
+       else if (priv->card_8192_version == VERSION_8192S_ACUT)
+               ratr_bitmap &= 0x0FFFFFF0;      
+
+       if(bShortGI)
+               ratr_bitmap |= 0x10000000;
+       
+       if(macId == 0)
+       {
+               if(pHTInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom)
+               {
+                       ratr_bitmap &= 0xfffffff0; 
+                       RT_TRACE(COMP_RATE, "UpdateHalRATRTable8192SE(), for HT_IOT_ACT_WA_IOT_Broadcom, ratr_value = 0x%x\n", ratr_bitmap);
+               }
+               if(pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_SHORT_GI)
+               {
+                       ratr_bitmap &=0x0fffffff;
+               }               
+       }
+       mask |= (bMulticast ? 1 : 0)<<9 | (macId & 0x1f)<<4 | (band & 0xf);
+
+       RT_TRACE(COMP_RATE, "UpdateHalRAMask92SE(): mask = %x, bitmap = %x\n", mask, ratr_bitmap);
+       write_nic_dword(dev, 0x2c4, ratr_bitmap);
+       write_nic_dword(dev, WFM5, (FW_RA_UPDATE_MASK | (mask << 8)));
+
+}
+#else
+void
+UpdateHalRAMask8192SE(
+       struct net_device* dev,
+       bool                            bMulticast,
+       u8                              macId, 
+       u8*                             MacAddr, 
+       u8*                             pEntry, 
+       u8                              rssi_level)
+
+{
+       struct r8192_priv*      priv = rtllib_priv(dev);
+       PRT_HIGH_THROUGHPUT     pHTInfo = priv->rtllib->pHTInfo;
+       WIRELESS_MODE           WirelessMode = WIRELESS_MODE_G;
+       u32                     ratr_bitmap, RateSet;
+       u8                      shortGI_rate = 0, MimoPs = 0, ratr_index = 8;
+       u32                     tmp_ratr_value = 0;
+       u32                     mask=0, band = 0;
+       bool                    bShortGI = false, bCurTxBW40MHz = 0;
+       struct  rtllib_device* ieee = priv->rtllib;
+       u8*     pMcsRate = ieee->dot11HTOperationalRateSet;
+
+       if(macId == 0)
+       {
+               MimoPs = pHTInfo->PeerMimoPs;
+               WirelessMode = priv->rtllib->mode;
+               bCurTxBW40MHz = pHTInfo->bCurTxBW40MHz;
+       }       
+       else if (macId == 1)
+       {
+               WirelessMode = WIRELESS_MODE_B;
+       }
+       else
+       {
+#ifdef DO_DO_LIST
+               if(pEntry == NULL)              
+               {
+                       printk("Doesn't have match Entry\n");
+                       return;
+               }
+       
+               MimoPs = pEntry->HTInfo.MimoPs;
+
+               if(IS_WIRELESS_MODE_G(Adapter) && (pEntry->WirelessMode == WIRELESS_MODE_N_24G))
+                       WirelessMode = pMgntInfo->dot11CurrentWirelessMode;
+               else    
+                       WirelessMode = pEntry->WirelessMode;
+               
+               bCurTxBW40MHz = pEntry->HTInfo.bBw40MHz;
+#endif         
+       }
+       rtl8192_config_rate(dev, (u16*)&RateSet);
+       RateSet |= (*(u16*)(pMcsRate)) << 12;
+       ratr_bitmap = RateSet;
+       switch (WirelessMode)
+       {
+               case WIRELESS_MODE_B:
+               {
+                       band |= WIRELESS_11B;
+                       ratr_index = RATR_INX_WIRELESS_B;
+                       ratr_bitmap &= 0x0000000d;
+               }
+               break;
+
+               case WIRELESS_MODE_G:
+               case (WIRELESS_MODE_G |WIRELESS_MODE_B):
+               {
+                       band |= (WIRELESS_11G | WIRELESS_11B);
+                       ratr_index = RATR_INX_WIRELESS_GB;
+                       
+                       if(rssi_level == 1)
+                               ratr_bitmap &= 0x00000f00;
+                       else if(rssi_level == 2)
+                               ratr_bitmap &= 0x00000ff0;
+                       else
+                               ratr_bitmap &= 0x00000ff5;
+               }
+               break;
+                       
+               case WIRELESS_MODE_A:
+               {
+                       band |= WIRELESS_11A;
+                       ratr_index = RATR_INX_WIRELESS_A;
+                       ratr_bitmap &= 0x00000ff0;
+               }
+               break;
+                       
+               case WIRELESS_MODE_N_24G:
+               case WIRELESS_MODE_N_5G:
+               {
+                       band |= (WIRELESS_11N| WIRELESS_11G| WIRELESS_11B);
+                       ratr_index = RATR_INX_WIRELESS_NGB;
+
+                       if(MimoPs == MIMO_PS_STATIC)
+                               {
+                                       if(rssi_level == 1)
+                                               ratr_bitmap &= 0x00070000;
+                                       else if(rssi_level == 2)
+                                               ratr_bitmap &= 0x0007f000;
+                                       else
+                                               ratr_bitmap &= 0x0007f005;
+                               }
+                               else
+                               {
+                               if (    priv->rf_type == RF_1T2R || priv->rf_type == RF_1T1R    )
+                                       {
+                                       if (bCurTxBW40MHz)
+                                               {
+                                                       if(rssi_level == 1)
+                                                               ratr_bitmap &= 0x000f0000;
+                                                       else if(rssi_level == 2)
+                                                               ratr_bitmap &= 0x000ff000;
+                                                       else
+                                                               ratr_bitmap &= 0x000ff015;
+                                               }
+                                               else
+                                               {
+                                                       if(rssi_level == 1)
+                                                               ratr_bitmap &= 0x000f0000;
+                                                       else if(rssi_level == 2)
+                                                               ratr_bitmap &= 0x000ff000;
+                                                       else
+                                                               ratr_bitmap &= 0x000ff005;
+                                               }       
+                                       }
+                                       else
+                                       {
+                                       if (bCurTxBW40MHz)
+                                               {
+                                                       if(rssi_level == 1)
+                                                               ratr_bitmap &= 0x0f0f0000;
+                                                       else if(rssi_level == 2)
+                                                               ratr_bitmap &= 0x0f0ff000;
+                                                       else
+                                                               ratr_bitmap &= 0x0f0ff015;
+                                               }
+                                               else
+                                               {
+                                                       if(rssi_level == 1)
+                                                               ratr_bitmap &= 0x0f0f0000;
+                                                       else if(rssi_level == 2)
+                                                               ratr_bitmap &= 0x0f0ff000;
+                                                       else
+                                                               ratr_bitmap &= 0x0f0ff005;
+                                               }
+                                       }
+                               }
+                               if( (pHTInfo->bCurTxBW40MHz && pHTInfo->bCurShortGI40MHz) ||
+                                       (!pHTInfo->bCurTxBW40MHz && pHTInfo->bCurShortGI20MHz)  )
+                               {
+                               if(macId == 0)
+                                       bShortGI = true;
+                               else
+                                       bShortGI = false;
+                       }
+               }
+               break;
+
+               default:
+                       band |= (WIRELESS_11N| WIRELESS_11G| WIRELESS_11B);
+                       ratr_index = RATR_INX_WIRELESS_NGB;
+                       
+                       if(priv->rf_type == RF_1T2R)
+                               ratr_bitmap &= 0x000ff0ff;
+                       else
+                               ratr_bitmap &= 0x0f0ff0ff;
+                       break;
+       }
+
+       if (priv->card_8192_version >= VERSION_8192S_BCUT)
+               ratr_bitmap &= 0x0FFFFFFF;
+       else if (priv->card_8192_version == VERSION_8192S_ACUT)
+               ratr_bitmap &= 0x0FFFFFF0;      
+
+       if(bShortGI)
+       {
+               ratr_bitmap |= 0x10000000;
+               tmp_ratr_value = (ratr_bitmap>>12);
+               for(shortGI_rate=15; shortGI_rate>0; shortGI_rate--)
+               {
+                       if((1<<shortGI_rate) & tmp_ratr_value)
+                               break;
+               }       
+               shortGI_rate = (shortGI_rate<<12)|(shortGI_rate<<8)|(shortGI_rate<<4)|(shortGI_rate);
+               write_nic_byte(dev, SG_RATE, shortGI_rate);
+       }       
+       
+       if(macId == 0)  {
+               if(priv->rtllib->pHTInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom)
+                       ratr_bitmap &= 0xfffffff0; 
+               if(priv->rtllib->pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_SHORT_GI)
+                       ratr_bitmap &=0x0fffffff;
+       }               
+
+               
+       mask |= (bMulticast ? 1 : 0)<<9 | (macId & 0x1f)<<4 | (band & 0xf);
+
+       RT_TRACE(COMP_RATE, "UpdateHalRAMask92SE(): mask = %x, bitmap = %x ratr_index = %x\n", mask, ratr_bitmap, ratr_index);
+       write_nic_dword(dev, 0x2c4, ratr_bitmap);
+       write_nic_dword(dev, WFM5, (FW_RA_UPDATE_MASK | (mask << 8)));
+
+}
+#endif
+
+u8 HalSetSysClk8192SE( struct net_device *dev, u8 Data)
+{
+#if 0
+       write_nic_byte(dev, (SYS_CLKR + 1), Data);
+       udelay(200);;
+       return 1;
+#else
+       {
+               u8                              WaitCount = 100;
+               bool bResult = false;
+
+#ifdef TO_DO_LIST
+               RT_DISABLE_FUNC(Adapter, DF_IO_BIT);
+
+               do
+               {
+                       if(pDevice->IOCount == 0)
+                               break;
+                       delay_us(10);
+               }while(WaitCount -- > 0);
+
+               if(WaitCount == 0)
+               { 
+                       RT_ENABLE_FUNC(Adapter, DF_IO_BIT);
+                       RT_TRACE(COMP_POWER, DBG_WARNING, ("HalSetSysClk8192SE(): Wait too long! Skip ....\n"));
+                       return false;
+               }
+               #endif
+               write_nic_byte(dev,SYS_CLKR + 1,Data);
+
+               udelay(400);
+
+
+               {
+                       u8 TmpValue;
+                       TmpValue=read_nic_byte(dev,SYS_CLKR + 1);
+                       bResult = ((TmpValue&BIT7)== (Data & BIT7));
+                       if((Data &(BIT6|BIT7)) == false)
+                       {                       
+                               WaitCount = 100;
+                               TmpValue = 0;
+                               while(1) 
+                               {
+                                       WaitCount--;
+                                       TmpValue=read_nic_byte(dev, SYS_CLKR + 1); 
+                                       if((TmpValue &BIT6))
+                                               break;
+                                       printk("wait for BIT6 return value %x\n",TmpValue);     
+                                       if(WaitCount==0)
+                                               break;
+                                       udelay(10);
+                               }
+                               if(WaitCount == 0)
+                                       bResult = false;
+                               else
+                                       bResult = true;
+                       }
+               }
+#ifdef TO_DO_LIST
+               RT_ENABLE_FUNC(Adapter, DF_IO_BIT);
+#endif
+               RT_TRACE(COMP_PS,"HalSetSysClk8192SE():Value = %02X, return: %d\n", Data, bResult);
+               return bResult;
+       }
+#endif
+}
+
+static u8 LegacyRateSet[12] = {0x02 , 0x04 , 0x0b , 0x16 , 0x0c , 0x12 , 0x18 , 0x24 , 0x30 , 0x48 , 0x60 , 0x6c};
+void GetHwReg8192SE(struct net_device *dev,u8 variable,u8* val)
+{
+       struct r8192_priv* priv = rtllib_priv(dev);
+       switch(variable)
+       {
+               case HW_VAR_INIT_TX_RATE: 
+                       {
+                               u8 RateIdx = read_nic_byte(dev, TX_RATE_REG);
+                               if(RateIdx < 76)
+                                       *((u8*)(val)) = (RateIdx<12)?(LegacyRateSet[RateIdx]):((RateIdx-12)|0x80);
+                               else
+                                       *((u8*)(val)) = 0;
+                       }
+                       break;
+
+               case HW_VAR_RCR:
+                       *((u32*)(val)) = priv->ReceiveConfig;
+               break;
+               
+               default:
+                       break;
+       }
+}
+
+void SetHwReg8192SE(struct net_device *dev,u8 variable,u8* val)
+{
+       struct r8192_priv* priv = rtllib_priv(dev);
+       switch(variable)
+       {
+               case HW_VAR_AMPDU_MIN_SPACE:
+               {
+                       u8      MinSpacingToSet;
+                       u8      SecMinSpace;
+
+                       MinSpacingToSet = *((u8*)val);
+                       if(MinSpacingToSet <= 7)
+                       {
+                               if((priv->rtllib->current_network.capability & WLAN_CAPABILITY_PRIVACY) == 0)  
+                                       SecMinSpace = 0;
+                               else if (priv->rtllib->rtllib_ap_sec_type && 
+                                               (priv->rtllib->rtllib_ap_sec_type(priv->rtllib) 
+                                                        & (SEC_ALG_WEP|SEC_ALG_TKIP))) 
+                                       SecMinSpace = 7;
+                               else
+                                       SecMinSpace = 1;
+
+                               if(MinSpacingToSet < SecMinSpace)
+                                       MinSpacingToSet = SecMinSpace;
+                               priv->rtllib->MinSpaceCfg = ((priv->rtllib->MinSpaceCfg&0xf8) |MinSpacingToSet);
+                               RT_TRACE(COMP_MLME, "Set HW_VAR_AMPDU_MIN_SPACE: %#x\n", priv->rtllib->MinSpaceCfg);
+                               write_nic_byte(dev, AMPDU_MIN_SPACE, priv->rtllib->MinSpaceCfg);        
+                       }
+               }
+               break;  
+               case HW_VAR_SHORTGI_DENSITY:
+               {
+                       u8      DensityToSet;
+               
+                       DensityToSet = *((u8*)val);             
+                       priv->rtllib->MinSpaceCfg|= (DensityToSet<<3);          
+                       RT_TRACE(COMP_MLME, "Set HW_VAR_SHORTGI_DENSITY: %#x\n", priv->rtllib->MinSpaceCfg);
+                       write_nic_byte(dev, AMPDU_MIN_SPACE, priv->rtllib->MinSpaceCfg);
+                       break;          
+               }
+               case HW_VAR_AMPDU_FACTOR:
+               {
+                       u8      FactorToSet;
+                       u8      RegToSet;
+                       u8      FactorLevel[18] = {2, 4, 4, 7, 7, 13, 13, 13, 2, 7, 7, 13, 13, 15, 15, 15, 15, 0};
+                       u8      index = 0;
+               
+                       FactorToSet = *((u8*)val);
+                       if(FactorToSet <= 3)
+                       {
+                               FactorToSet = (1<<(FactorToSet + 2));
+                               if(FactorToSet>0xf)
+                                       FactorToSet = 0xf;
+
+                               for(index=0; index<17; index++)
+                               {
+                                       if(FactorLevel[index] > FactorToSet)
+                                               FactorLevel[index] = FactorToSet;
+                               }
+
+                               for(index=0; index<8; index++)
+                               {
+                                       RegToSet = ((FactorLevel[index*2]) | (FactorLevel[index*2+1]<<4));
+                                       write_nic_byte(dev, AGGLEN_LMT_L+index, RegToSet);
+                               }
+                               RegToSet = ((FactorLevel[16]) | (FactorLevel[17]<<4));
+                               write_nic_byte(dev, AGGLEN_LMT_H, RegToSet);
+
+                               RT_TRACE(COMP_MLME, "Set HW_VAR_AMPDU_FACTOR: %#x\n", FactorToSet);
+                       }
+               }
+               break;
+               case HW_VAR_BASIC_RATE:
+               {
+                       u16                             BrateCfg = 0;
+                       u8                              RateIndex = 0;
+
+                       
+                       rtl8192_config_rate(dev, &BrateCfg);
+
+                       if (priv->card_8192_version == VERSION_8192S_ACUT)
+                               priv->basic_rate = BrateCfg = BrateCfg & 0x150;
+                       else if (priv->card_8192_version == VERSION_8192S_BCUT)
+                               priv->basic_rate = BrateCfg = BrateCfg & 0x15f;
+               
+                       if(priv->rtllib->pHTInfo->IOTPeer == HT_IOT_PEER_CISCO && ((BrateCfg &0x150)==0))
+                       {
+                               BrateCfg |=0x010;
+                       }
+                       if(priv->rtllib->pHTInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom)
+                       {       
+                               BrateCfg &= 0x1f0;
+                               printk("HW_VAR_BASIC_RATE, HT_IOT_ACT_WA_IOT_Broadcom, BrateCfg = 0x%x\n", BrateCfg);
+                       }
+                       write_nic_byte(dev, RRSR, BrateCfg&0xff);
+                       write_nic_byte(dev, RRSR+1, (BrateCfg>>8)&0xff);
+
+                       while(BrateCfg > 0x1)
+                       {
+                               BrateCfg = (BrateCfg >> 1);
+                               RateIndex++;
+                       }
+                       write_nic_byte(dev, INIRTSMCS_SEL, RateIndex);
+               }
+               break;
+               case HW_VAR_RETRY_LIMIT:
+               {
+                       u8 RetryLimit = ((u8*)(val))[0];
+                       
+                       priv->ShortRetryLimit = RetryLimit;
+                       priv->LongRetryLimit = RetryLimit;
+                       
+                       write_nic_word(dev, RETRY_LIMIT, 
+                                                       RetryLimit << RETRY_LIMIT_SHORT_SHIFT | \
+                                                       RetryLimit << RETRY_LIMIT_LONG_SHIFT);
+               }                                       
+               break;
+               case HW_VAR_BEACON_INTERVAL:
+               {
+                       write_nic_word(dev, BCN_INTERVAL, *((u16*)val));
+                       PHY_SetBeaconHwReg(dev, *((u16*)val));
+               }
+               break;
+               
+               case HW_VAR_BSSID:
+                       write_nic_dword(dev, BSSIDR, ((u32*)(val))[0]);
+                       write_nic_word(dev, BSSIDR+4, ((u16*)(val+4))[0]);
+               break;
+
+               case HW_VAR_MEDIA_STATUS:
+               {
+                       RT_OP_MODE      OpMode = *((RT_OP_MODE *)(val));
+                       LED_CTL_MODE    LedAction = LED_CTL_NO_LINK;
+                       u8              btMsr = read_nic_byte(dev, MSR);
+
+                       btMsr &= 0xfc;
+                       switch(OpMode)
+                       {
+                       case RT_OP_MODE_INFRASTRUCTURE:
+                               btMsr |= MSR_INFRA;
+                               LedAction = LED_CTL_LINK;
+                               break;
+
+                       case RT_OP_MODE_IBSS:
+                               btMsr |= MSR_ADHOC;
+                               break;
+
+                       case RT_OP_MODE_AP:
+                               btMsr |= MSR_AP;
+                               LedAction = LED_CTL_LINK;
+                               break;
+
+                       default:
+                               btMsr |= MSR_NOLINK;
+                               break;
+                       }
+
+                       write_nic_byte(dev, MSR, btMsr);
+
+                       {
+                               u32     temp = read_nic_dword(dev, TCR);
+                               write_nic_dword(dev, TCR, temp&(~BIT8));
+                               write_nic_dword(dev, TCR, temp|BIT8);
+                       }
+                       priv->rtllib->LedControlHandler(dev, LedAction);
+               }
+               break;
+               
+               case HW_VAR_RCR:
+               {
+                       write_nic_dword(dev, RCR,((u32*)(val))[0]);
+                       priv->ReceiveConfig = ((u32*)(val))[0];
+               }
+               break;
+               
+               case HW_VAR_CECHK_BSSID:
+               {
+                       u32     RegRCR, Type;
+
+                       Type = ((u8*)(val))[0];
+                       priv->rtllib->GetHwRegHandler(dev, HW_VAR_RCR, (u8*)(&RegRCR));
+                       
+#if (RTL92SE_FPGA_VERIFY == 1)
+                       RegRCR &= (~RCR_CBSSID);
+#else
+#if 1
+                       if (Type == true)
+                               RegRCR |= (RCR_CBSSID);
+                       else if (Type == false)
+                               RegRCR &= (~RCR_CBSSID);
+#endif
+                       priv->rtllib->SetHwRegHandler( dev, HW_VAR_RCR, (u8*)(&RegRCR) );
+#endif                 
+               }
+               break;
+               
+               case HW_VAR_SLOT_TIME:
+               {
+
+                       priv->slot_time = val[0];               
+                       write_nic_byte(dev, SLOT_TIME, val[0]);
+
+#ifdef MERGE_TO_DO
+                       if(priv->rtllib->current_network.qos_data.supported !=0)
+                       {
+                               for(eACI = 0; eACI < AC_MAX; eACI++)
+                               {
+                                       priv->rtllib->SetHwRegHandler(dev, HW_VAR_AC_PARAM, GET_WMM_PARAM_ELE_SINGLE_AC_PARAM(pStaQos->WMMParamEle, eACI) );
+                               }
+                       }
+                       else
+                       {
+                               u8      u1bAIFS = aSifsTime + (2 * priv->slot_time);
+                               
+                               write_nic_byte(dev, REG_EDCA_VO_PARAM, u1bAIFS);
+                               write_nic_byte(dev, REG_EDCA_VI_PARAM, u1bAIFS);
+                               write_nic_byte(dev, REG_EDCA_BE_PARAM, u1bAIFS);
+                               write_nic_byte(dev, REG_EDCA_BK_PARAM, u1bAIFS);
+                       }
+#endif
+               }
+               break;
+
+               case HW_VAR_ACK_PREAMBLE:       
+               {
+                       u8      regTmp;
+                       priv->short_preamble = (bool)(*(u8*)val );
+                       regTmp = (priv->nCur40MhzPrimeSC)<<5;           
+                       if(priv->short_preamble)
+                               regTmp |= 0x80;
+
+                       write_nic_byte(dev, RRSR+2, regTmp);
+               }
+               break;  
+
+               default:
+                       break;
+       }
+}
+
+void SetBeaconRelatedRegisters8192SE(struct net_device *dev)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       struct rtllib_network *net = &priv->rtllib->current_network;
+       u16                     BcnTimeCfg = 0;
+       u16                     BcnCW = 6, BcnIFS = 0xf;
+       u16                     AtimWindow = 2; 
+       int                     OpMode = priv->rtllib->iw_mode;
+       u16                     BcnInterval = net->beacon_interval;
+       write_nic_word(dev, ATIMWND, AtimWindow);
+       
+       write_nic_word(dev, BCN_INTERVAL, BcnInterval);
+       PHY_SetBeaconHwReg( dev, BcnInterval);
+
+       write_nic_word(dev, BCN_DRV_EARLY_INT, 10<<4);
+
+       write_nic_word(dev, BCN_DMATIME, 256); 
+
+       write_nic_byte(dev, BCN_ERR_THRESH, 100); 
+
+               
+       switch(OpMode)
+       {
+               case IW_MODE_ADHOC:
+                       BcnTimeCfg |= (BcnCW<<BCN_TCFG_CW_SHIFT);
+                       break;
+               default:
+                       printk("Invalid Operation Mode!!\n");
+                       break;
+       }
+
+       BcnTimeCfg |= BcnIFS<<BCN_TCFG_IFS;
+
+
+       {
+               u8 u1Temp = (u8)(BcnInterval);
+               write_nic_dword(dev, WFM5, 0xF1000000 |((u16)( u1Temp) << 8));
+               ChkFwCmdIoDone(dev);
+       }
+}
+
+void UpdateHalRATRTableIndex(struct net_device *dev)
+{
+       struct r8192_priv* priv = rtllib_priv(dev);
+       struct rtllib_device* ieee = priv->rtllib;
+       u8              bitmap = 0;
+       int             i;
+
+       for (i = 0; i < PEER_MAX_ASSOC; i++) {
+               if (NULL != ieee->peer_assoc_list[i]) {
+                       bitmap |= BIT0 << ieee->peer_assoc_list[i]->ratr_index;
+               }
+       }
+
+       priv->RATRTableBitmap = bitmap;
+       return;
+}
+
+bool rtl8192se_check_ht_cap(struct net_device* dev, struct sta_info *sta, 
+               struct rtllib_network* net)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device *ieee = priv->rtllib;
+       PHT_CAPABILITY_ELE  pHTCapIE = NULL;
+       PHT_INFORMATION_ELE  pPeerHTInfo = NULL;
+       u8 ExtChlOffset=0;
+       u8      *pMcsFilter = NULL;
+       u16     nMaxAMSDUSize = 0;      
+       static u8       EWC11NHTCap[] = {0x00, 0x90, 0x4c, 0x33};       
+       static u8       EWC11NHTInfo[] = {0x00, 0x90, 0x4c, 0x34};
+
+       if ((ieee->mode != WIRELESS_MODE_N_24G) && 
+                       (ieee->mode != WIRELESS_MODE_N_5G)) {
+               printk("%s():i am G mode ,do not need to check Cap IE\n",
+                               __FUNCTION__);
+               if (net->mode == IEEE_N_5G)
+                       sta->wireless_mode = IEEE_A;
+               else if (net->mode == IEEE_N_24G) {
+                       if (net->rates_ex_len > 0)
+                               sta->wireless_mode = IEEE_G;
+                       else
+                               sta->wireless_mode = IEEE_B;
+               } else
+                       sta->wireless_mode = net->mode;
+               return false;
+       }
+       if ((ieee->mode ==WIRELESS_MODE_N_24G) 
+               && ieee->pHTInfo->bRegSuppCCK== false) {
+               if(net->mode == IEEE_B){
+                       sta->wireless_mode = net->mode;
+                       printk("%s(): peer is B MODE return\n", __FUNCTION__);
+                       return false;
+               }
+       }
+       if(net->bssht.bdHTCapLen  != 0)
+       {
+               sta->htinfo.bEnableHT = true;
+               sta->htinfo.bCurRxReorderEnable = ieee->pHTInfo->bRegRxReorderEnable;
+               if(net->mode == IEEE_A)
+                       sta->wireless_mode = IEEE_N_5G;
+               else
+                       sta->wireless_mode = IEEE_N_24G;
+       } else {
+               printk("%s(): have no HTCap IE, mode is %d\n",__FUNCTION__,net->mode);
+               sta->wireless_mode = net->mode;
+               sta->htinfo.bEnableHT = false;
+               return true;
+       }
+
+       if (!memcmp(net->bssht.bdHTCapBuf ,EWC11NHTCap, sizeof(EWC11NHTCap)))
+               pHTCapIE = (PHT_CAPABILITY_ELE)(&(net->bssht.bdHTCapBuf[4]));
+       else
+               pHTCapIE = (PHT_CAPABILITY_ELE)(net->bssht.bdHTCapBuf);
+
+       if (!memcmp(net->bssht.bdHTInfoBuf, EWC11NHTInfo, sizeof(EWC11NHTInfo)))
+               pPeerHTInfo = (PHT_INFORMATION_ELE)(&net->bssht.bdHTInfoBuf[4]);
+       else            
+               pPeerHTInfo = (PHT_INFORMATION_ELE)(net->bssht.bdHTInfoBuf);
+       
+       ExtChlOffset=((ieee->pHTInfo->bRegBW40MHz == false)?HT_EXTCHNL_OFFSET_NO_EXT:
+                                       (ieee->current_network.channel<=6)?
+                                       HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER);
+       printk("******** STA wireless mode %d\n", sta->wireless_mode);
+               
+       if (ieee->pHTInfo->bRegSuppCCK)
+               sta->htinfo.bSupportCck = (pHTCapIE->DssCCk==1)?true:false;
+       else {
+               if(pHTCapIE->DssCCk==1)
+                       return false;
+       }
+
+       sta->htinfo.MimoPs= pHTCapIE->MimoPwrSave;
+
+       printk("******** PEER MP MimoPs %d\n", sta->htinfo.MimoPs);
+       if(ieee->pHTInfo->bRegBW40MHz)
+               sta->htinfo.bBw40MHz= (pHTCapIE->ChlWidth==1)?true:false;
+       else
+               sta->htinfo.bBw40MHz = false;
+
+       if((pPeerHTInfo->ExtChlOffset) != ExtChlOffset)
+               sta->htinfo.bBw40MHz = false;
+       
+       ieee->Peer_bCurBW40M = sta->htinfo.bBw40MHz;
+       printk("******** PEER MP bCurBW40M %d\n", sta->htinfo.bBw40MHz);
+       if(ieee->pHTInfo->bRegBW40MHz == true)
+               sta->htinfo.bCurTxBW40MHz = sta->htinfo.bBw40MHz;
+
+       printk("******** PEER MP bCurTxBW40MHz %d\n", sta->htinfo.bCurTxBW40MHz);
+       sta->htinfo.bCurShortGI20MHz= 
+               ((ieee->pHTInfo->bRegShortGI20MHz)?((pHTCapIE->ShortGI20Mhz==1)?true:false):false);
+       sta->htinfo.bCurShortGI40MHz= 
+               ((ieee->pHTInfo->bRegShortGI40MHz)?((pHTCapIE->ShortGI40Mhz==1)?true:false):false);
+       
+       printk("******** PEER MP bCurShortGI20MHz %d, bCurShortGI40MHz %d\n",sta->htinfo.bCurShortGI20MHz,sta->htinfo.bCurShortGI40MHz);
+       nMaxAMSDUSize = (pHTCapIE->MaxAMSDUSize==0)?3839:7935;
+       if(ieee->pHTInfo->nAMSDU_MaxSize >= nMaxAMSDUSize)      
+               sta->htinfo.AMSDU_MaxSize = nMaxAMSDUSize;
+       else
+               sta->htinfo.AMSDU_MaxSize = ieee->pHTInfo->nAMSDU_MaxSize;
+
+       printk("****************AMSDU_MaxSize=%d\n",sta->htinfo.AMSDU_MaxSize);
+               
+       if(ieee->pHTInfo->AMPDU_Factor >= pHTCapIE->MaxRxAMPDUFactor)
+               sta->htinfo.AMPDU_Factor = pHTCapIE->MaxRxAMPDUFactor;
+       else
+               sta->htinfo.AMPDU_Factor = ieee->pHTInfo->AMPDU_Factor;
+
+       if(ieee->pHTInfo->MPDU_Density >= pHTCapIE->MPDUDensity)
+               sta->htinfo.MPDU_Density = pHTCapIE->MPDUDensity;
+       else
+               sta->htinfo.MPDU_Density = ieee->pHTInfo->MPDU_Density;
+
+       HTFilterMCSRate(ieee, pHTCapIE->MCS, sta->htinfo.McsRateSet);
+       if(sta->htinfo.MimoPs == 0)  
+               pMcsFilter = MCS_FILTER_1SS;
+       else
+               pMcsFilter = MCS_FILTER_ALL;
+
+       sta->htinfo.HTHighestOperaRate = HTGetHighestMCSRate(ieee, sta->htinfo.McsRateSet, pMcsFilter);
+       printk("******** PEER MP HTHighestOperaRate %x\n",sta->htinfo.HTHighestOperaRate);
+
+       return true;
+       
+}
+
+#if LINUX_VERSION_CODE >=KERNEL_VERSION(2,6,20)
+void rtl8192se_check_tsf_wq(struct work_struct * work)
+{
+       struct delayed_work *dwork = container_of(work,struct delayed_work,work);
+       struct rtllib_device *ieee = container_of(dwork, struct rtllib_device, check_tsf_wq);
+       struct net_device *dev = ieee->dev;
+#else
+void rtl8192se_check_tsf_wq(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device *ieee = priv->rtllib;
+#endif
+       u32     CurrTsfHigh,CurrTsfLow;
+       u32     TargetTsfHigh,TargetTsfLow;
+                                       
+       CurrTsfHigh = read_nic_dword(dev, TSFR+4);
+       CurrTsfLow = (u32)(ieee->CurrTsf & 0xffff);
+       TargetTsfHigh = (u32)(ieee->TargetTsf >> 32);
+       TargetTsfLow = (u32)(ieee->TargetTsf & 0xffff);
+
+       printk("Current TSF Low = %x, Hight = %x\n",CurrTsfLow,CurrTsfHigh);
+       printk("Target TSF Low = %x, Hight = %x\n",TargetTsfLow,TargetTsfHigh);
+
+       ieee->CurrTsf |= (u64)CurrTsfHigh << 32;
+
+       if(ieee->CurrTsf < ieee->TargetTsf)
+       {
+               down(&ieee->wx_sem);
+
+               rtllib_stop_protocol(ieee,true);
+
+               ieee->ssid_set = 1;
+
+               rtllib_start_protocol(ieee);
+
+               up(&ieee->wx_sem);
+       }
+}
+
+#if LINUX_VERSION_CODE >=KERNEL_VERSION(2,6,20)
+void rtl8192se_update_peer_ratr_table_wq(struct work_struct * work)
+{
+       struct delayed_work *dwork = container_of(work,struct delayed_work,work);
+       struct rtllib_device *ieee = container_of(dwork, struct rtllib_device, update_assoc_sta_info_wq);
+        struct net_device *dev = ieee->dev;
+        struct r8192_priv *priv = rtllib_priv(dev);
+#else
+void rtl8192se_update_peer_ratr_table_wq(struct net_device *dev)
+{
+        struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device *ieee = priv->rtllib;
+#endif
+       int idx = 0;
+       for(idx=0; idx<PEER_MAX_ASSOC; idx++)
+       {       
+               if(NULL != priv->rtllib->peer_assoc_list[idx])
+               {
+                       u8 * addr = priv->rtllib->peer_assoc_list[idx]->macaddr;
+                       printk("%s: STA:%x:%x:%x:%x:%x:%x\n",__FUNCTION__,addr[0],addr[1],addr[2],addr[3],addr[4],addr[5]);
+                       rtl8192se_update_ratr_table(dev,priv->rtllib->peer_assoc_list[idx]->htinfo.McsRateSet,priv->rtllib->peer_assoc_list[idx]);
+               }
+       }
+       UpdateHalRATRTableIndex(dev);
+
+       if(ieee->Peer_bCurBW40M)
+               HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20_40, (ieee->current_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER);  
+       else
+               HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, (ieee->current_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER);  
+}
+
+bool   
+rtl8192se_RxCommandPacketHandle(
+       struct net_device *dev, 
+       struct sk_buff* skb,
+       rx_desc *pdesc)
+{
+       u8*                     pRxCmdHeader;
+       u8*                     pCmdContent;
+       u16                     total_length, offset;
+       u16                     RxCmdLen;
+       u8                      RxCmdElementID, RxCmdSeq;
+       bool                    RxCmdContinue;
+
+#if 0
+       if ((pRfd->queue_id != CMPK_RX_QUEUE_ID) || (pRfd == NULL))
+       {
+               return 0;
+       }
+#endif
+       
+       
+#if 0
+       if(pdesc->MACID == 0x1e)
+       {       
+               return 0;
+       }
+#endif 
+
+       total_length = pdesc->Length;
+       pRxCmdHeader = skb->data;
+       offset = 0;
+
+       do
+       {
+               RxCmdLen = (u16)GET_C2H_CMD_CMD_LEN(pRxCmdHeader + offset);
+               RxCmdElementID = (u8)GET_C2H_CMD_ELEMENT_ID(pRxCmdHeader + offset);
+               RxCmdSeq = (u8)GET_C2H_CMD_CMD_SEQ(pRxCmdHeader + offset);
+               RxCmdContinue = (bool)GET_C2H_CMD_CONTINUE(pRxCmdHeader + offset);
+               pCmdContent = (u8*)GET_C2H_CMD_CONTENT(pRxCmdHeader + offset);
+
+               if((offset + C2H_RX_CMD_HDR_LEN + RxCmdLen) > total_length)
+               {
+                       printk("Wrong C2H Cmd length!\n");
+                       break;
+               }
+
+               RT_TRACE(COMP_CMD, "RxCmdLen = 0x%x, RxCmdElementID = 0x%x, RxCmdSeq = 0x%x, RxCmdContinue = 0x%x\n", 
+                       RxCmdLen, RxCmdElementID, RxCmdSeq, RxCmdContinue);
+               RT_TRACE(COMP_CMD, "Rx CMD Packet Hex Data :%x\n", total_length);
+               RT_TRACE(COMP_CMD, "Rx CMD Content Hex Data :%x:%x\n", *pCmdContent, RxCmdLen);
+
+               switch(RxCmdElementID)
+               {
+               case HAL_FW_C2H_CMD_C2HFEEDBACK:
+                       {
+                               switch(GET_C2H_CMD_FEEDBACK_ELEMENT_ID(pCmdContent))
+                               {
+                               case HAL_FW_C2H_CMD_C2HFEEDBACK_CCX_PER_PKT_RPT:
+                                       {
+                                               RT_TRACE(COMP_CMD, "HAL_FW_C2H_CMD_C2HFEEDBACK_CCX_PER_PKT_RPT FW_DBG CMD Hex:%x\n", total_length);
+                                       }
+                                       break;
+
+                               case HAL_FW_C2H_CMD_C2HFEEDBACK_DTM_TX_STATISTICS_RPT:
+                                       break;
+
+                               default:
+                                       break;
+                               }
+                       }
+                       break;
+
+               case HAL_FW_C2H_CMD_C2HDBG:
+                       RT_TRACE(COMP_CMD,  "rtl8192se_RxCommandPacketHandle(): %x:%x<*** FW_DBG CMD String ***>\n", *pCmdContent, RxCmdLen);
+                       break;
+
+               case HAL_FW_C2H_CMD_BT_State:
+                       {
+                       }
+                       break;
+               case HAL_FW_C2H_CMD_BT_Service:
+                       {
+                       }
+                       break;          
+               case HAL_FW_C2H_CMD_SurveyDone:
+                       {
+                               rtl8192se_rx_surveydone_cmd(dev);
+                       }
+                       break;
+               default:
+                       RT_TRACE(COMP_CMD, "rtl8192se_RxCommandPacketHandle(): Receive unhandled C2H CMD (%d)\n", RxCmdElementID);
+                       break;
+               }
+
+               offset += (C2H_RX_CMD_HDR_LEN + N_BYTE_ALIGMENT(RxCmdLen, 8));
+
+               if(!RxCmdContinue || ((offset + C2H_RX_CMD_HDR_LEN) > total_length))
+               {
+                       break;
+               }
+       }while(true);
+       RT_TRACE(COMP_RECV, "RxCommandPacketHandle8190Pci(): It is a command packet\n");
+       
+       return 1;
+}
+
+void
+rtl8192se_InitializeVariables(struct net_device  *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+
+       if (priv->rf_type == RF_1T1R) 
+               strcpy(priv->nick, "rtl8191SEVA1");
+       else if (priv->rf_type == RF_1T2R)
+               strcpy(priv->nick, "rtl8191SEVA2");
+       else
+               strcpy(priv->nick, "rtl8192SE");
+
+       priv->rtllib->tx_headroom = 0;
+
+       priv->ShortRetryLimit = 0x30;
+       priv->LongRetryLimit = 0x30;
+       
+       priv->EarlyRxThreshold = 7;
+       priv->pwrGroupCnt = 0;
+
+       priv->bIgnoreSilentReset = false;  
+       priv->enable_gpio0 = 0;
+
+       priv->TransmitConfig = 0;
+
+       priv->ReceiveConfig = 
+       RCR_APPFCS | RCR_APWRMGT | /*RCR_ADD3 |*/
+       RCR_AMF | RCR_ADF | RCR_APP_MIC | RCR_APP_ICV |
+       RCR_AICV        | RCR_ACRC32    |                               
+       RCR_AB          | RCR_AM                |                               
+       RCR_APM         |                                                               
+       /*RCR_AAP               |*/                                                     
+       RCR_APP_PHYST_STAFF | RCR_APP_PHYST_RXFF |      
+       (priv->EarlyRxThreshold<<RCR_FIFO_OFFSET)       ;
+
+#if 0
+       priv->irq_mask[0] = 
+       (IMR_ROK | IMR_VODOK | IMR_VIDOK | IMR_BEDOK | IMR_BKDOK |              \
+       IMR_HCCADOK | IMR_MGNTDOK | IMR_COMDOK | IMR_HIGHDOK |                                  \
+       IMR_BDOK | IMR_RXCMDOK | /*IMR_TIMEOUT0 |*/ IMR_RDU | IMR_RXFOVW/*      |                       \
+       IMR_BcnInt| IMR_TXFOVW | IMR_TBDOK | IMR_TBDER*/);
+#else
+       priv->irq_mask[0] = 
+       (IMR_ROK | IMR_VODOK | IMR_VIDOK | IMR_BEDOK | IMR_BKDOK |              \
+       IMR_HCCADOK | IMR_MGNTDOK | IMR_COMDOK | IMR_HIGHDOK |                                  \
+       IMR_BDOK | IMR_RXCMDOK | /*IMR_TIMEOUT0 |*/ IMR_RDU | IMR_RXFOVW        |               \
+        IMR_BcnInt/*| IMR_TXFOVW*/ /*| IMR_TBDOK | IMR_TBDER*/);
+#endif
+       priv->irq_mask[1] = 0;/* IMR_TBDOK | IMR_TBDER*/
+
+
+       priv->MidHighPwrTHR_L1 = 0x3B;
+       priv->MidHighPwrTHR_L2 = 0x40;
+       priv->PwrDomainProtect = false;
+
+       if (!(priv->rtllib->softmac_features & IEEE_SOFTMAC_SCAN)){
+               if (!priv->scan_cmd) {
+                       priv->scan_cmd = kmalloc(sizeof(H2C_SITESURVEY_PARA) +
+                               RTL_MAX_SCAN_SIZE, GFP_KERNEL);
+               }
+       }
+}
+
+void rtl8192se_EnableInterrupt(struct net_device *dev)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);        
+       priv->irq_enabled = 1;
+       
+#ifdef RTL8192CE
+       write_nic_dword(dev, REG_HIMR, priv->irq_mask[0]&0xFFFFFFFF);   
+#else
+       write_nic_dword(dev,INTA_MASK, priv->irq_mask[0]);
+#endif
+
+#ifdef RTL8192SE       
+       write_nic_dword(dev,INTA_MASK+4, priv->irq_mask[1]&0x3F);
+#endif 
+
+}
+
+void rtl8192se_DisableInterrupt(struct net_device *dev)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);        
+
+#ifdef RTL8192CE
+       write_nic_dword(dev, REG_HIMR, IMR8190_DISABLED);       
+#else
+       write_nic_dword(dev,INTA_MASK,0);
+#endif
+
+#ifdef RTL8192SE       
+       write_nic_dword(dev,INTA_MASK + 4,0);
+#endif 
+       priv->irq_enabled = 0;
+}
+
+void rtl8192se_ClearInterrupt(struct net_device *dev)
+{
+       u32 tmp = 0;
+#ifdef RTL8192CE
+       tmp = read_nic_dword(dev, REG_HISR);    
+       write_nic_dword(dev, REG_HISR, tmp);
+#else
+       tmp = read_nic_dword(dev, ISR); 
+       write_nic_dword(dev, ISR, tmp);
+#endif
+
+#ifdef RTL8192SE       
+       tmp = read_nic_dword(dev, ISR+4);       
+       write_nic_dword(dev, ISR+4, tmp);
+#endif
+}
+
+void rtl8192se_enable_rx(struct net_device *dev)
+{
+    struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+
+    write_nic_dword(dev, RDQDA,priv->rx_ring_dma[RX_MPDU_QUEUE]);
+#ifdef CONFIG_RX_CMD
+    write_nic_dword(dev, RCDA, priv->rx_ring_dma[RX_CMD_QUEUE]);
+#endif
+}
+
+u32 TX_DESC_BASE[] = {TBKDA, TBEDA, TVIDA, TVODA, TBDA, TCDA, TMDA, THPDA, HDA};
+void rtl8192se_enable_tx(struct net_device *dev)
+{
+    struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+    u32 i;
+       
+    for (i = 0; i < MAX_TX_QUEUE_COUNT; i++)
+        write_nic_dword(dev, TX_DESC_BASE[i], priv->tx_ring[i].dma);
+}
+
+
+void rtl8192se_beacon_disable(struct net_device *dev) 
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       u32 reg;
+
+#ifdef RTL8192CE
+       reg = read_nic_dword(priv->rtllib->dev,REG_HIMR);
+
+       reg &= ~(IMR_BcnInt | IMR_BcnInt | IMR_TBDOK | IMR_TBDER);
+       write_nic_dword(priv->rtllib->dev, REG_HIMR, reg);      
+#else
+       reg = read_nic_dword(priv->rtllib->dev,INTA_MASK);
+
+       reg &= ~(IMR_BcnInt | IMR_BcnInt | IMR_TBDOK | IMR_TBDER);
+       write_nic_dword(priv->rtllib->dev, INTA_MASK, reg);     
+#endif
+}
+
+void rtl8192se_interrupt_recognized(struct net_device *dev, u32 *p_inta, u32 *p_intb)
+{
+#ifdef RTL8192SE
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       *p_inta = read_nic_dword(dev, ISR) & priv->irq_mask[0];
+#else
+       *p_inta = read_nic_dword(dev, ISR) ;
+#endif
+       write_nic_dword(dev,ISR,*p_inta); 
+#ifdef RTL8192SE
+       *p_intb = read_nic_dword(dev, ISR+4);
+       write_nic_dword(dev, ISR+4, *p_intb);
+#endif
+}
+
+bool rtl8192se_HalRxCheckStuck(struct net_device *dev)
+{
+       
+       struct r8192_priv *priv = rtllib_priv(dev);
+       u16                             RegRxCounter = (u16)(priv->InterruptLog.nIMR_ROK&0xffff);
+       bool                            bStuck = false;
+       u32                             SlotIndex = 0, TotalRxStuckCount = 0;
+       u8                              i;
+       u8                              SilentResetRxSoltNum = 4;
+
+
+       SlotIndex = (priv->SilentResetRxSlotIndex++)%SilentResetRxSoltNum;
+
+       if(priv->RxCounter==RegRxCounter)
+       {               
+               priv->SilentResetRxStuckEvent[SlotIndex] = 1;
+
+               for( i = 0; i < SilentResetRxSoltNum ; i++ )
+                       TotalRxStuckCount += priv->SilentResetRxStuckEvent[i];
+
+               if(TotalRxStuckCount  == SilentResetRxSoltNum)
+               {
+                       bStuck = true;
+                       for( i = 0; i < SilentResetRxSoltNum ; i++ )
+                               TotalRxStuckCount += priv->SilentResetRxStuckEvent[i];
+               }
+
+
+       } else {
+               priv->SilentResetRxStuckEvent[SlotIndex] = 0;
+       }
+
+       priv->RxCounter = RegRxCounter;
+
+       return bStuck;
+}
+
+bool rtl8192se_HalTxCheckStuck(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       bool    bStuck = false;
+#if defined(RTL8192E) || defined(RTL8190P)
+       u16    RegTxCounter = read_nic_word(dev, 0x128);
+#elif defined (RTL8192SE) || defined (RTL8192CE)
+       u16     RegTxCounter = read_nic_word(dev, 0x366);
+#else
+       u16     RegTxCounter = priv->TxCounter + 1;
+       WARN_ON(1);     
+#endif
+
+       RT_TRACE(COMP_RESET, "%s():RegTxCounter is %d,TxCounter is %d\n", 
+                       __FUNCTION__,RegTxCounter,priv->TxCounter);
+
+       if(priv->TxCounter == RegTxCounter)
+               bStuck = true;
+
+       priv->TxCounter = RegTxCounter;
+
+       return bStuck;
+}
diff --git a/ubuntu/rtl8192se/rtl8192s/r8192S_dev.h b/ubuntu/rtl8192se/rtl8192s/r8192S_dev.h
new file mode 100644 (file)
index 0000000..c0aec68
--- /dev/null
@@ -0,0 +1,64 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * Based on the r8180 driver, which is:
+ * Copyright 2004-2005 Andrea Merello <andreamrl@tiscali.it>, et al.
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+#ifndef _RTL8192SE_H
+#define _RTL8192SE_H
+
+#include "r8192S_def.h"
+
+bool rtl8192se_HalTxCheckStuck(struct net_device *dev);
+bool rtl8192se_HalRxCheckStuck(struct net_device *dev);
+void rtl8192se_interrupt_recognized(struct net_device *dev, u32 *p_inta, u32 *p_intb);
+void rtl8192se_enable_rx(struct net_device *dev);
+void rtl8192se_enable_tx(struct net_device *dev);
+void rtl8192se_EnableInterrupt(struct net_device *dev);
+void rtl8192se_DisableInterrupt(struct net_device *dev);
+void rtl8192se_ClearInterrupt(struct net_device *dev);
+void rtl8192se_InitializeVariables(struct net_device  *dev);
+void rtl8192se_start_beacon(struct net_device *dev);
+u8 MRateToHwRate8192SE(struct net_device*dev, u8 rate);
+void rtl8192se_get_eeprom_size(struct net_device* dev);
+bool rtl8192se_adapter_start(struct net_device* dev);
+void rtl8192se_link_change(struct net_device *dev);
+void rtl8192se_tx_fill_desc(struct net_device *dev, tx_desc *pDesc, cb_desc *cb_desc, struct sk_buff *skb);
+void rtl8192se_tx_fill_cmd_desc(struct net_device *dev, tx_desc_cmd *entry, cb_desc *cb_desc, 
+               struct sk_buff *skb);
+bool rtl8192se_rx_query_status_desc(struct net_device* dev, struct rtllib_rx_stats*  stats, 
+               rx_desc *pdesc, struct sk_buff* skb);
+void rtl8192se_halt_adapter(struct net_device *dev, bool bReset);
+void rtl8192se_update_ratr_table(struct net_device* dev,u8* pMcsRate,struct sta_info* pEntry);
+int r8192se_resume_firm(struct net_device *dev);
+void PHY_SetRtl8192seRfHalt(struct net_device* dev);
+#ifndef _RTL8192_EXT_PATCH_
+void UpdateHalRAMask8192SE(struct net_device* dev,bool bMulticast, u8 macId, u8* MacAddr, u8* pEntry, u8 rssi_level);
+#else
+void UpdateHalRAMask8192SE(struct net_device* dev, bool bMulticast, u8 macId, u8* MacAddr, u8 wirelessMode,     u8 rssi_level);
+#endif
+u8 HalSetSysClk8192SE(struct net_device *dev, u8 Data);
+bool   rtl8192se_RxCommandPacketHandle(struct net_device *dev, struct sk_buff* skb,rx_desc *pdesc);
+bool rtl8192se_check_ht_cap(struct net_device* dev, struct sta_info *sta, 
+               struct rtllib_network* net);
+u8 rtl8192se_MapHwQueueToFirmwareQueue(u8 QueueID, u8 priority);
+#endif
+
diff --git a/ubuntu/rtl8192se/rtl8192s/r8192S_firmware.c b/ubuntu/rtl8192se/rtl8192s/r8192S_firmware.c
new file mode 100644 (file)
index 0000000..78877d8
--- /dev/null
@@ -0,0 +1,856 @@
+/******************************************************************************\r
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ * The full GNU General Public License is included in this distribution in the\r
+ * file called LICENSE.\r
+ *\r
+ * Contact Information:\r
+ * wlanfae <wlanfae@realtek.com>\r
+******************************************************************************/\r
+#if defined(RTL8192SE)\r
+#include "../rtl_core.h"\r
+#include "../rtl_endianfree.h"\r
+#include "r8192S_hwimg.h"\r
+#include "r8192S_dev.h"\r
+\r
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) && defined(USE_FW_SOURCE_IMG_FILE)\r
+#include <linux/firmware.h>\r
+#endif\r
+#define   byte(x,n)  ( (x >> (8 * n)) & 0xff  )\r
+\r
+static void fw_SetRQPN(struct net_device *dev)\r
+{      \r
+\r
+       write_nic_dword(dev,  RQPN, 0xffffffff);\r
+       write_nic_dword(dev,  RQPN+4, 0xffffffff);\r
+       write_nic_byte(dev,  RQPN+8, 0xff);\r
+       write_nic_byte(dev,  RQPN+0xB, 0x80);\r
+\r
+\r
+}      /* fw_SetRQPN */\r
+\r
+bool FirmwareDownloadCode(struct net_device *dev, u8 * code_virtual_address,u32 buffer_len)\r
+{\r
+       struct r8192_priv   *priv = rtllib_priv(dev);\r
+       bool                rt_status = true;\r
+       u16                 frag_threshold = MAX_FIRMWARE_CODE_SIZE; 
+       u16                 frag_length, frag_offset = 0;\r
+       struct sk_buff      *skb;\r
+       unsigned char       *seg_ptr;\r
+       cb_desc             *tcb_desc;  \r
+       u8                          bLastIniPkt = 0;\r
+       u16                         ExtraDescOffset = 0;\r
+       \r
+#ifdef RTL8192SE\r
+       fw_SetRQPN(dev);        
+#endif\r
+\r
+       RT_TRACE(COMP_FIRMWARE, "--->FirmwareDownloadCode()\n" );       \r
+\r
+       if(buffer_len >= MAX_FIRMWARE_CODE_SIZE)\r
+       {\r
+               RT_TRACE(COMP_ERR, "Size over FIRMWARE_CODE_SIZE! \n");\r
+               goto cmdsend_downloadcode_fail;\r
+       }\r
+       \r
+       ExtraDescOffset = 0;\r
+       \r
+       do {\r
+               if((buffer_len-frag_offset) > frag_threshold)\r
+               {\r
+                       frag_length = frag_threshold + ExtraDescOffset;\r
+               }\r
+               else\r
+               {\r
+                       frag_length = (u16)(buffer_len - frag_offset + ExtraDescOffset);\r
+                       bLastIniPkt = 1;\r
+               }\r
+\r
+               skb  = dev_alloc_skb(frag_length); \r
+               memcpy((unsigned char *)(skb->cb),&dev,sizeof(dev));\r
+               \r
+               tcb_desc = (cb_desc*)(skb->cb + MAX_DEV_ADDR_SIZE);\r
+               tcb_desc->queue_index = TXCMD_QUEUE;\r
+               tcb_desc->bCmdOrInit = DESC_PACKET_TYPE_INIT;\r
+               tcb_desc->bLastIniPkt = bLastIniPkt;\r
+               \r
+               skb_reserve(skb, ExtraDescOffset);\r
+               seg_ptr = (u8 *)skb_put(skb, (u32)(frag_length-ExtraDescOffset));\r
+               memcpy(seg_ptr, code_virtual_address+frag_offset, (u32)(frag_length-ExtraDescOffset));\r
+               \r
+               tcb_desc->txbuf_size= frag_length;\r
+\r
+               if(!priv->rtllib->check_nic_enough_desc(dev,tcb_desc->queue_index)||\r
+                       (!skb_queue_empty(&priv->rtllib->skb_waitQ[tcb_desc->queue_index]))||\\r
+                       (priv->rtllib->queue_stop) ) \r
+               {\r
+                       RT_TRACE(COMP_FIRMWARE,"=====================================================> tx full!\n");\r
+                       skb_queue_tail(&priv->rtllib->skb_waitQ[tcb_desc->queue_index], skb);\r
+               } \r
+               else \r
+               {\r
+                       priv->rtllib->softmac_hard_start_xmit(skb,dev);\r
+               }\r
+               \r
+               frag_offset += (frag_length - ExtraDescOffset);\r
+\r
+       }while(frag_offset < buffer_len);\r
+       write_nic_byte(dev, TPPoll, TPPoll_CQ);\r
+       return rt_status ;\r
+\r
+\r
+cmdsend_downloadcode_fail:     \r
+       rt_status = false;\r
+       RT_TRACE(COMP_ERR, "CmdSendDownloadCode fail !!\n");\r
+       return rt_status;\r
+\r
+}\r
+\r
+\r
+\r
+bool\r
+FirmwareEnableCPU(struct net_device *dev)\r
+{\r
+\r
+       bool rtStatus = true;\r
+       u8              tmpU1b, CPUStatus = 0;\r
+       u16             tmpU2b; \r
+       u32             iCheckTime = 200;       \r
+\r
+       RT_TRACE(COMP_FIRMWARE, "-->FirmwareEnableCPU()\n" );\r
+\r
+       fw_SetRQPN(dev);        
+       \r
+       tmpU1b = read_nic_byte(dev, SYS_CLKR);\r
+       write_nic_byte(dev,  SYS_CLKR, (tmpU1b|SYS_CPU_CLKSEL)); 
+\r
+       tmpU2b = read_nic_word(dev, SYS_FUNC_EN);       \r
+       write_nic_word(dev, SYS_FUNC_EN, (tmpU2b|FEN_CPUEN));\r
+\r
+       do\r
+       {\r
+               CPUStatus = read_nic_byte(dev, TCR);\r
+               if(CPUStatus& IMEM_RDY)\r
+               {\r
+                       RT_TRACE(COMP_FIRMWARE, "IMEM Ready after CPU has refilled.\n");        \r
+                       break;          \r
+               }\r
+\r
+               udelay(100);\r
+       }while(iCheckTime--);\r
+\r
+       if(!(CPUStatus & IMEM_RDY))\r
+               return false;\r
+\r
+       RT_TRACE(COMP_FIRMWARE, "<--FirmwareEnableCPU(): rtStatus(%#x)\n", rtStatus);\r
+       return rtStatus;                        \r
+}\r
+\r
+FIRMWARE_8192S_STATUS\r
+FirmwareGetNextStatus(FIRMWARE_8192S_STATUS FWCurrentStatus)\r
+{\r
+       FIRMWARE_8192S_STATUS   NextFWStatus = 0;\r
+       \r
+       switch(FWCurrentStatus)\r
+       {\r
+               case FW_STATUS_INIT:\r
+                       NextFWStatus = FW_STATUS_LOAD_IMEM;\r
+                       break;\r
+\r
+               case FW_STATUS_LOAD_IMEM:\r
+                       NextFWStatus = FW_STATUS_LOAD_EMEM;\r
+                       break;\r
+               \r
+               case FW_STATUS_LOAD_EMEM:\r
+                       NextFWStatus = FW_STATUS_LOAD_DMEM;\r
+                       break;\r
+\r
+               case FW_STATUS_LOAD_DMEM:\r
+                       NextFWStatus = FW_STATUS_READY;\r
+                       break;\r
+\r
+               default:\r
+                       RT_TRACE(COMP_ERR,"Invalid FW Status(%#x)!!\n", FWCurrentStatus);                       \r
+                       break;\r
+       }       \r
+       return  NextFWStatus;\r
+}\r
+\r
+bool FirmwareCheckReady(struct net_device *dev, u8 LoadFWStatus)\r
+{\r
+       struct r8192_priv  *priv = rtllib_priv(dev);\r
+       bool rtStatus = true;\r
+       rt_firmware  *pFirmware = priv->pFirmware;\r
+       short  PollingCnt = 1000;\r
+       u8   CPUStatus = 0;\r
+       u32  tmpU4b;\r
+\r
+       RT_TRACE(COMP_FIRMWARE, "--->%s(): LoadStaus(%d),", __FUNCTION__, LoadFWStatus);\r
+\r
+       pFirmware->FWStatus = (FIRMWARE_8192S_STATUS)LoadFWStatus;      \r
+\r
+       switch (LoadFWStatus) {\r
+       case FW_STATUS_LOAD_IMEM:\r
+               do {
+                       CPUStatus = read_nic_byte(dev, TCR);\r
+                       if(CPUStatus& IMEM_CODE_DONE)\r
+                               break;  \r
+                       udelay(5);\r
+               } while (PollingCnt--);         \r
+               if (!(CPUStatus & IMEM_CHK_RPT) || (PollingCnt <= 0)) {\r
+                       RT_TRACE(COMP_ERR, "FW_STATUS_LOAD_IMEM FAIL CPU, Status=%x\r\n", CPUStatus);\r
+                       goto status_check_fail;                 \r
+               }\r
+               break;\r
+\r
+       case FW_STATUS_LOAD_EMEM:\r
+               do {
+                       CPUStatus = read_nic_byte(dev, TCR);\r
+                       if(CPUStatus& EMEM_CODE_DONE)\r
+                               break;\r
+                       udelay(5);\r
+               } while(PollingCnt--);          \r
+               if (!(CPUStatus & EMEM_CHK_RPT) || (PollingCnt <= 0)) {\r
+                       RT_TRACE(COMP_ERR, "FW_STATUS_LOAD_EMEM FAIL CPU, Status=%x\r\n", CPUStatus);\r
+                       goto status_check_fail;\r
+               }\r
+\r
+               rtStatus = FirmwareEnableCPU(dev);\r
+               if (rtStatus != true) {\r
+                       RT_TRACE(COMP_ERR, "Enable CPU fail ! \n" );\r
+                       goto status_check_fail;\r
+               }               \r
+               break;\r
+\r
+       case FW_STATUS_LOAD_DMEM:\r
+               do {
+                       CPUStatus = read_nic_byte(dev, TCR);\r
+                       if (CPUStatus& DMEM_CODE_DONE)\r
+                               break;          \r
+                       udelay(5);\r
+               } while(PollingCnt--);\r
+\r
+               if (!(CPUStatus & DMEM_CODE_DONE) || (PollingCnt <= 0)) {\r
+                       RT_TRACE(COMP_ERR, "Polling  DMEM code done fail ! CPUStatus(%#x)\n", CPUStatus);\r
+                       goto status_check_fail;\r
+               }\r
+\r
+               RT_TRACE(COMP_FIRMWARE, "DMEM code download success, CPUStatus(%#x)\n", CPUStatus);             \r
+               PollingCnt = 2000; 
+               do {
+                       CPUStatus = read_nic_byte(dev, TCR);\r
+                       if(CPUStatus & FWRDY)\r
+                               break;          \r
+                       udelay(40);\r
+               } while(PollingCnt--);  \r
+\r
+               RT_TRACE(COMP_FIRMWARE, "Polling Load Firmware ready, CPUStatus(%x)\n", CPUStatus);             \r
+               if (((CPUStatus & LOAD_FW_READY) != LOAD_FW_READY) || (PollingCnt <= 0)) {\r
+                       RT_TRACE(COMP_ERR, "Polling Load Firmware ready fail ! CPUStatus(%x)\n", CPUStatus);\r
+                       goto status_check_fail;\r
+               }\r
+\r
+#ifdef RTL8192SE\r
+#endif \r
+\r
+               tmpU4b = read_nic_dword(dev,TCR);\r
+               write_nic_dword(dev, TCR, (tmpU4b&(~TCR_ICV)));\r
+\r
+               tmpU4b = read_nic_dword(dev, RCR);\r
+               write_nic_dword(dev, RCR, \r
+                               (tmpU4b|RCR_APPFCS|RCR_APP_ICV|RCR_APP_MIC));\r
+\r
+               RT_TRACE(COMP_FIRMWARE, "FirmwareCheckReady(): Current RCR settings(%#x)\n", tmpU4b);\r
+\r
+#if 0\r
+               priv->TransmitConfig = read_nic_dword_E(dev, TCR);\r
+               RT_TRACE(COMP_FIRMWARE, "FirmwareCheckReady(): Current TCR settings(%#x)\n", priv->TransmitConfig);\r
+#endif\r
+\r
+               write_nic_byte(dev, LBKMD_SEL, LBK_NORMAL);             \r
+               break;  \r
+       default :\r
+               RT_TRACE(COMP_FIRMWARE, "Unknown status check!\n");\r
+               rtStatus = false;\r
+               break;\r
+       }\r
+\r
+status_check_fail:\r
+       RT_TRACE(COMP_FIRMWARE, "<---%s: LoadFWStatus(%d), rtStatus(%x)\n", __FUNCTION__,\r
+                       LoadFWStatus, rtStatus);\r
+       return rtStatus;\r
+}\r
+u8 FirmwareHeaderMapRfType(struct net_device *dev)\r
+{      \r
+       struct r8192_priv       *priv = rtllib_priv(dev);\r
+       switch(priv->rf_type)\r
+       {\r
+               case RF_1T1R:   return 0x11;\r
+               case RF_1T2R:   return 0x12;\r
+               case RF_2T2R:   return 0x22;\r
+               case RF_2T2R_GREEN:     return 0x92;\r
+               default:\r
+                       RT_TRACE(COMP_INIT, "Unknown RF type(%x)\n",priv->rf_type);\r
+                       break;\r
+       }\r
+       return 0x22;\r
+}\r
+\r
+\r
+void FirmwareHeaderPriveUpdate(struct net_device *dev, PRT_8192S_FIRMWARE_PRIV         pFwPriv)\r
+{\r
+       pFwPriv->rf_config = FirmwareHeaderMapRfType(dev);\r
+}\r
+\r
+\r
+\r
+bool FirmwareDownload92S(struct net_device *dev)\r
+{      \r
+       struct r8192_priv       *priv = rtllib_priv(dev);\r
+       bool                    rtStatus = true;\r
+       u8                      *pucMappedFile = NULL;\r
+       u32                     ulFileLength = 0;       \r
+       u8                      FwHdrSize = RT_8192S_FIRMWARE_HDR_SIZE; \r
+       rt_firmware             *pFirmware = priv->pFirmware;\r
+       u8                      FwStatus = FW_STATUS_INIT;\r
+       PRT_8192S_FIRMWARE_HDR  pFwHdr = NULL;\r
+       PRT_8192S_FIRMWARE_PRIV pFwPriv = NULL;\r
+       \r
+       pFirmware->FWStatus = FW_STATUS_INIT;\r
+\r
+       RT_TRACE(COMP_FIRMWARE, " --->FirmwareDownload92S()\n");\r
+\r
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) && defined(USE_FW_SOURCE_IMG_FILE)\r
+       priv->firmware_source = FW_SOURCE_IMG_FILE;\r
+#else\r
+       priv->firmware_source = FW_SOURCE_HEADER_FILE;\r
+#endif\r
+\r
+       switch( priv->firmware_source )\r
+       {\r
+               case FW_SOURCE_IMG_FILE:                \r
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) && defined(USE_FW_SOURCE_IMG_FILE)                      \r
+                       if(pFirmware->szFwTmpBufferLen == 0)\r
+                       {\r
+#ifdef _RTL8192_EXT_PATCH_\r
+                               const char              *pFwImageFileName[1] = {"RTL8191SE_MESH/rtl8192sfw.bin"};\r
+#else\r
+                               const char              *pFwImageFileName[1] = {"RTL8192SE/rtl8192sfw.bin"};\r
+#endif\r
+                               const struct firmware   *fw_entry = NULL;\r
+                               u32 ulInitStep = 0;\r
+                               int                     rc = 0;\r
+                               u32                     file_length = 0;\r
+                               rc = request_firmware(&fw_entry, pFwImageFileName[ulInitStep],&priv->pdev->dev);
+                               if(rc < 0 ) {\r
+                                       RT_TRACE(COMP_ERR, "request firmware fail!\n");\r
+                                       goto DownloadFirmware_Fail;\r
+                               } \r
+\r
+                               if(fw_entry->size > sizeof(pFirmware->szFwTmpBuffer)) {\r
+                                       RT_TRACE(COMP_ERR, "img file size exceed the container buffer fail!\n");\r
+                                       release_firmware(fw_entry);\r
+                                       goto DownloadFirmware_Fail;\r
+                               }\r
+\r
+                               memcpy(pFirmware->szFwTmpBuffer,fw_entry->data,fw_entry->size);\r
+                               pFirmware->szFwTmpBufferLen = fw_entry->size;\r
+                               release_firmware(fw_entry);\r
+\r
+                               pucMappedFile = pFirmware->szFwTmpBuffer;\r
+                               file_length = pFirmware->szFwTmpBufferLen;\r
+\r
+                               pFirmware->pFwHeader = (PRT_8192S_FIRMWARE_HDR) pucMappedFile;                          \r
+                               pFwHdr = pFirmware->pFwHeader;\r
+                               RT_TRACE(COMP_FIRMWARE,"signature:%x, version:%x, size:%x, imemsize:%x, sram size:%x\n", \\r
+                                               pFwHdr->Signature, pFwHdr->Version, pFwHdr->DMEMSize, \\r
+                                               pFwHdr->IMG_IMEM_SIZE, pFwHdr->IMG_SRAM_SIZE);\r
+                               pFirmware->FirmwareVersion =  byte(pFwHdr->Version ,0);                 \r
+                               if ((pFwHdr->IMG_IMEM_SIZE==0) || (pFwHdr->IMG_IMEM_SIZE > sizeof(pFirmware->FwIMEM)))\r
+                               {\r
+                                       RT_TRACE(COMP_ERR, "%s: memory for data image is less than IMEM required\n",\\r
+                                                       __FUNCTION__);\r
+                                       goto DownloadFirmware_Fail;\r
+                               } else {                                \r
+                                       pucMappedFile+=FwHdrSize;\r
+\r
+                                       memcpy(pFirmware->FwIMEM, pucMappedFile, pFwHdr->IMG_IMEM_SIZE);\r
+                                       pFirmware->FwIMEMLen = pFwHdr->IMG_IMEM_SIZE;                           \r
+                               }\r
+\r
+                               if (pFwHdr->IMG_SRAM_SIZE > sizeof(pFirmware->FwEMEM))\r
+                               {\r
+                                       RT_TRACE(COMP_ERR, "%s: memory for data image is less than EMEM required\n",\\r
+                                                       __FUNCTION__);  \r
+                                       goto DownloadFirmware_Fail;\r
+                               }\r
+                               else\r
+                               {       \r
+                                       pucMappedFile += pFirmware->FwIMEMLen;\r
+\r
+                                       memcpy(pFirmware->FwEMEM, pucMappedFile, pFwHdr->IMG_SRAM_SIZE);
+                                       pFirmware->FwEMEMLen = pFwHdr->IMG_SRAM_SIZE;           \r
+                               }       \r
+                       }\r
+#endif\r
+                       break;  \r
+\r
+               case FW_SOURCE_HEADER_FILE:     \r
+#if 1\r
+#define Rtl819XFwImageArray Rtl8192SEFwImgArray\r
+                       pucMappedFile = Rtl819XFwImageArray;\r
+                       ulFileLength = ImgArrayLength;\r
+\r
+                       RT_TRACE(COMP_INIT,"Fw download from header.\n");\r
+                       pFirmware->pFwHeader = (PRT_8192S_FIRMWARE_HDR) pucMappedFile;                          \r
+                       pFwHdr = pFirmware->pFwHeader;\r
+                       RT_TRACE(COMP_FIRMWARE,"signature:%x, version:%x, size:%x, imemsize:%x, sram size:%x\n", \\r
+                                       pFwHdr->Signature, pFwHdr->Version, pFwHdr->DMEMSize, \\r
+                                       pFwHdr->IMG_IMEM_SIZE, pFwHdr->IMG_SRAM_SIZE);\r
+                       pFirmware->FirmwareVersion =  byte(pFwHdr->Version ,0);                 \r
+\r
+                       if ((pFwHdr->IMG_IMEM_SIZE==0) || (pFwHdr->IMG_IMEM_SIZE > sizeof(pFirmware->FwIMEM)))\r
+                       {\r
+                               printk("FirmwareDownload92S(): memory for data image is less than IMEM required\n");                                    \r
+                               goto DownloadFirmware_Fail;\r
+                       }\r
+                       else\r
+                       {                               \r
+                               pucMappedFile+=FwHdrSize;\r
+\r
+                               memcpy(pFirmware->FwIMEM, pucMappedFile, pFwHdr->IMG_IMEM_SIZE);\r
+                               pFirmware->FwIMEMLen = pFwHdr->IMG_IMEM_SIZE;                           \r
+                       }\r
+\r
+                       if (pFwHdr->IMG_SRAM_SIZE > sizeof(pFirmware->FwEMEM))\r
+                       {\r
+                               printk(" FirmwareDownload92S(): memory for data image is less than EMEM required\n");                                   \r
+                               goto DownloadFirmware_Fail;\r
+                       } else {        \r
+                               pucMappedFile+= pFirmware->FwIMEMLen;\r
+\r
+                               memcpy(pFirmware->FwEMEM, pucMappedFile, pFwHdr->IMG_SRAM_SIZE);\r
+                               pFirmware->FwEMEMLen = pFwHdr->IMG_SRAM_SIZE;           \r
+                       }\r
+#endif\r
+                       break;\r
+               default:\r
+                       break;\r
+       }                       \r
+\r
+       FwStatus = FirmwareGetNextStatus(pFirmware->FWStatus);\r
+       while(FwStatus!= FW_STATUS_READY)\r
+       {\r
+               switch(FwStatus)\r
+               {\r
+                       case FW_STATUS_LOAD_IMEM:                               \r
+                               pucMappedFile = pFirmware->FwIMEM;\r
+                               ulFileLength = pFirmware->FwIMEMLen;                                    \r
+                               break;\r
+\r
+                       case FW_STATUS_LOAD_EMEM:                               \r
+                               pucMappedFile = pFirmware->FwEMEM;\r
+                               ulFileLength = pFirmware->FwEMEMLen;                                    \r
+                               break;\r
+\r
+                       case FW_STATUS_LOAD_DMEM:                       \r
+                               pFwHdr = pFirmware->pFwHeader;\r
+                               pFwPriv = (PRT_8192S_FIRMWARE_PRIV)&pFwHdr->FWPriv;\r
+                               FirmwareHeaderPriveUpdate(dev, pFwPriv);\r
+                               pucMappedFile = (u8*)(pFirmware->pFwHeader)+RT_8192S_FIRMWARE_HDR_EXCLUDE_PRI_SIZE;\r
+                               ulFileLength = FwHdrSize-RT_8192S_FIRMWARE_HDR_EXCLUDE_PRI_SIZE;                                \r
+                               break;\r
+                                       \r
+                       default:\r
+                               RT_TRACE(COMP_ERR, "Unexpected Download step!!\n");\r
+                               goto DownloadFirmware_Fail;\r
+                               break;\r
+               }               \r
+               \r
+               rtStatus = FirmwareDownloadCode(dev, pucMappedFile, ulFileLength);      \r
+               \r
+               if(rtStatus != true)\r
+               {\r
+                       RT_TRACE(COMP_ERR, "FirmwareDownloadCode() fail ! \n" );\r
+                       goto DownloadFirmware_Fail;\r
+               }       \r
+               \r
+               rtStatus = FirmwareCheckReady(dev, FwStatus);\r
+\r
+               if(rtStatus != true)\r
+               {\r
+                       RT_TRACE(COMP_ERR, "FirmwareDownloadCode() fail ! \n");\r
+                       goto DownloadFirmware_Fail;\r
+               }\r
+               \r
+               FwStatus = FirmwareGetNextStatus(pFirmware->FWStatus);\r
+       }\r
+\r
+       RT_TRACE(COMP_FIRMWARE, "Firmware Download Success!!\n");       \r
+       return rtStatus;        \r
+       \r
+       DownloadFirmware_Fail:  \r
+       RT_TRACE(COMP_ERR, "Firmware Download Fail!!%x\n",read_nic_word(dev, TCR));     \r
+       rtStatus = false;\r
+       return rtStatus;        \r
+}\r
+void rtl8192se_dump_skb_data(struct sk_buff *skb)\r
+{\r
+       u8 i = 0;\r
+       u8 *arry = skb->data;\r
+\r
+       printk("\nSCAN_CMD/PROBE_REQ==============>\n");\r
+       for(i = 0; i < skb->len; i ++){\r
+               if((i % 4 == 0)&&(i != 0))\r
+                       printk("\n");\r
+               printk("%2.2x ", arry[i]);\r
+       }\r
+       printk("\nSCAN_CMD/PROBE_REQ<==============\n");\r
+}\r
+\r
+void rtl8192se_dump_cmd_para(u8*SiteSurveyPara)\r
+{\r
+       u8 i = 0;\r
+       u8 desc_size = sizeof(tx_desc_fw);\r
+       u8 para_size = 8+desc_size;\r
+       u8 *arry = SiteSurveyPara;\r
+\r
+       printk("\nSCAN_CMD_PARA==============>\n");\r
+       for(i = 0; i < para_size; i ++){\r
+               if((i % 4 == 0)&&(i != 0))\r
+                       printk("\n");\r
+               printk("%2.2x ", arry[i]);\r
+       }\r
+       printk("\nSCAN_CMD_PARA<==============\n");\r
+}\r
+#if 1 
+RT_STATUS\r
+CmdSendPacket(\r
+       struct net_device       *dev,\r
+       cb_desc                 *pTcb,\r
+       struct sk_buff          *skb,\r
+       u32                             BufferLen,\r
+       u32                             PacketType,\r
+       bool                            bLastInitPacket 
+       )\r
+{\r
+       struct r8192_priv       *priv = rtllib_priv(dev);\r
+\r
+       RT_STATUS               rtStatus = RT_STATUS_SUCCESS;\r
+       \r
+       pTcb->queue_index       = TXCMD_QUEUE;\r
+       pTcb->bCmdOrInit        = PacketType;
+       pTcb->bLastIniPkt       = bLastInitPacket;\r
+       pTcb->txbuf_size        = BufferLen;\r
+\r
+\r
+       if(!priv->rtllib->check_nic_enough_desc(dev,pTcb->queue_index)||\r
+               (!skb_queue_empty(&priv->rtllib->skb_waitQ[pTcb->queue_index]))||\\r
+               (priv->rtllib->queue_stop) )    {\r
+               RT_TRACE(COMP_CMD,"=========================> tx full!\n");\r
+               skb_queue_tail(&priv->rtllib->skb_waitQ[pTcb->queue_index], skb);\r
+       } else {\r
+               priv->rtllib->softmac_hard_start_xmit(skb,dev);\r
+       }\r
+               \r
+       return rtStatus;\r
+}\r
+\r
+u32\r
+FillH2CCmd(\r
+       struct sk_buff  *skb,\r
+       u32                     H2CBufferLen,\r
+       u32                     CmdNum,\r
+       u32*            pElementID,\r
+       u32*            pCmdLen,\r
+       u8**            pCmbBuffer,\r
+       u8*                     CmdStartSeq\r
+       )\r
+{\r
+       u8      i = 0;\r
+       u32     TotalLen = 0, Len = 0, TxDescLen = 0;\r
+       u32     preContinueOffset = 0;\r
+\r
+       u8*     pH2CBuffer;\r
+       \r
+       do\r
+       {\r
+               Len = H2C_TX_CMD_HDR_LEN + N_BYTE_ALIGMENT(pCmdLen[i], 8);\r
+\r
+               if(H2CBufferLen < TotalLen + Len + TxDescLen)\r
+                       break;\r
+               \r
+               pH2CBuffer = (u8 *) skb_put(skb, (u32)Len);\r
+               memset((pH2CBuffer + TotalLen + TxDescLen),0,Len);\r
+\r
+               SET_BITS_TO_LE_4BYTE((pH2CBuffer + TotalLen + TxDescLen), 0, 16, pCmdLen[i]);\r
+\r
+               SET_BITS_TO_LE_4BYTE((pH2CBuffer + TotalLen + TxDescLen), 16, 8, pElementID[i]);\r
+\r
+               *CmdStartSeq = *CmdStartSeq % 0x80;\r
+               SET_BITS_TO_LE_4BYTE((pH2CBuffer + TotalLen + TxDescLen), 24, 7, *CmdStartSeq);\r
+               ++ *CmdStartSeq;\r
+               \r
+               memcpy((pH2CBuffer + TotalLen + TxDescLen + H2C_TX_CMD_HDR_LEN), pCmbBuffer[i], pCmdLen[i]);\r
+\r
+               if(i < CmdNum - 1) 
+                       SET_BITS_TO_LE_4BYTE((pH2CBuffer + preContinueOffset), 31, 1, 1);\r
+\r
+               preContinueOffset = TotalLen;\r
+\r
+               TotalLen += Len;\r
+       }while(++ i < CmdNum);\r
+\r
+       return TotalLen;\r
+}\r
+\r
+u32\r
+GetH2CCmdLen(\r
+       u32             H2CBufferLen,\r
+       u32             CmdNum,\r
+       u32*    pCmdLen\r
+       )\r
+{\r
+       u8      i = 0;\r
+       u32     TotalLen = 0, Len = 0, TxDescLen = 0;\r
+\r
+       do\r
+       {\r
+               Len = H2C_TX_CMD_HDR_LEN + N_BYTE_ALIGMENT(pCmdLen[i], 8);\r
+\r
+               if(H2CBufferLen < TotalLen + Len + TxDescLen)\r
+                       break;\r
+\r
+               TotalLen += Len;\r
+       }while(++ i < CmdNum);\r
+\r
+       return TotalLen + TxDescLen;\r
+}\r
+\r
+/*-----------------------------------------------------------------------------\r
+ * Function:   FirmwareSetH2CCmd()\r
+ *\r
+ * Overview:   Set FW H2C command (Decide ElementID, cmd content length, and get FW buffer)\r
+ *\r
+ * Input:              H2CCmd: H2C command type. \r
+ *                     pCmdBuffer: Pointer of the H2C command content.\r
+ *\r
+ * Output:             NONE\r
+ *\r
+ * Return:             RT_STATUS\r
+ *\r
+ * Revised History:\r
+ *     When            Who             Remark\r
+ *     2009/1/12       tynli           Create the version 0.\r
+ *\r
+ *---------------------------------------------------------------------------*/\r
+RT_STATUS\r
+FirmwareSetH2CCmd( \r
+       struct net_device       *dev, \r
+       u8                              H2CCmd,\r
+       u8*                             pCmdBuffer\r
+       )\r
+{      \r
+       struct r8192_priv   *priv = rtllib_priv(dev);\r
+       u32                             ElementID;\r
+       u32                             Cmd_Len;\r
+       cb_desc                 *pTcb;\r
+       struct sk_buff          *skb;\r
+       u32                             Len;\r
+\r
+       RT_STATUS               rtStatus;\r
+\r
+       switch(H2CCmd){\r
+       case FW_H2C_SETPWRMODE:\r
+               {\r
+                       ElementID = H2C_SetPwrMode_CMD ;\r
+                       Cmd_Len = sizeof(H2C_SETPWRMODE_PARM);\r
+               }\r
+               break;\r
+       case FW_H2C_JOINBSSRPT:\r
+               {\r
+                       ElementID = H2C_JoinbssRpt_CMD;\r
+                       Cmd_Len = sizeof(H2C_JOINBSSRPT_PARM);\r
+               }\r
+               break;\r
+       case FW_H2C_WoWLAN_UPDATE_GTK:\r
+               {\r
+                       ElementID = H2C_WoWLAN_UPDATE_GTK_CMD;\r
+                       Cmd_Len = sizeof(H2C_WPA_TWO_WAY_PARA);\r
+               }\r
+               break;  \r
+       case FW_H2C_WoWLAN_UPDATE_IV:\r
+               {\r
+                       ElementID = H2C_WoWLAN_UPDATE_IV_CMD;\r
+                       Cmd_Len = sizeof(unsigned long long);\r
+               }\r
+               break;\r
+\r
+       case FW_H2C_WoWLAN_OFFLOAD:\r
+               {\r
+                       ElementID = H2C_WoWLAN_FW_OFFLOAD;\r
+                       Cmd_Len = sizeof(u8);\r
+               }\r
+               break;\r
+       case FW_H2C_SITESURVEY:\r
+               {\r
+                       ElementID = H2C_SiteSurvey_CMD;\r
+                       Cmd_Len = sizeof(H2C_SITESURVEY_PARA) + ((PH2C_SITESURVEY_PARA)pCmdBuffer)->probe_req_len - sizeof(tx_desc_fw);\r
+               }\r
+               break;\r
+       default:\r
+               break;\r
+       }\r
+\r
+       RT_TRACE(COMP_CMD, "FirmwareSetH2CCmd() HW_VAR_SET_TX_CMD: ElementID = %d, %d+%d=Cmd_Len = %d\n", ElementID, sizeof(H2C_SITESURVEY_PARA),((PH2C_SITESURVEY_PARA)pCmdBuffer)->probe_req_len, Cmd_Len);\r
+\r
+       {\r
+               Len = GetH2CCmdLen(MAX_TRANSMIT_BUFFER_SIZE, 1, &Cmd_Len);\r
+\r
+               RT_TRACE(COMP_CMD, "---------->%s(), cmdlen:%d,len:%d\n", __func__,Cmd_Len,Len);\r
+               skb  = dev_alloc_skb(Len); \r
+               memcpy((unsigned char *)(skb->cb),&dev,sizeof(dev));\r
+\r
+               pTcb = (cb_desc*)(skb->cb + MAX_DEV_ADDR_SIZE);\r
+               \r
+               FillH2CCmd(skb, MAX_TRANSMIT_BUFFER_SIZE, 1, &ElementID, &Cmd_Len, &pCmdBuffer, &priv->H2CTxCmdSeq);\r
+               \r
+\r
+               rtStatus = CmdSendPacket(dev, pTcb, skb, Len, DESC_PACKET_TYPE_NORMAL, false);\r
+               \r
+       }\r
+       \r
+       write_nic_byte(dev, TPPoll, BIT0<<(TXCMD_QUEUE));
+\r
+       return RT_STATUS_SUCCESS;\r
+}\r
+\r
+\r
+void\r
+rtl8192se_set_scan_cmd(struct net_device *dev, u32 start_flag)\r
+{\r
+       struct r8192_priv                       *priv = rtllib_priv(dev);\r
+       H2C_SITESURVEY_PARA                     *SiteSurveyPara;\r
+\r
+       if (!priv->scan_cmd) {\r
+               priv->scan_cmd = kmalloc(sizeof(H2C_SITESURVEY_PARA) +\r
+                               RTL_MAX_SCAN_SIZE, GFP_KERNEL);\r
+               if (!priv->scan_cmd) {\r
+                       printk("----------->%s() Error!!!\n", __func__);\r
+                       return;\r
+               }\r
+       }\r
+\r
+       SiteSurveyPara = priv->scan_cmd;\r
+       memset(SiteSurveyPara, 0, sizeof(struct _H2C_SITESURVEY_PARA) + RTL_MAX_SCAN_SIZE);\r
+\r
+       if(start_flag){\r
+               struct sk_buff *skb = rtllib_probe_req(priv->rtllib);   \r
+               cb_desc *tcb_desc = (cb_desc *)(skb->cb + 8);\r
+\r
+\r
+               tcb_desc->queue_index = MGNT_QUEUE;\r
+               tcb_desc->data_rate = MgntQuery_MgntFrameTxRate(priv->rtllib);  \r
+               tcb_desc->RATRIndex = 7;\r
+               tcb_desc->bTxDisableRateFallBack = 1;\r
+               tcb_desc->bTxUseDriverAssingedRate = 1;\r
+       \r
+               \r
+               SiteSurveyPara->start_flag      = start_flag;\r
+               SiteSurveyPara->probe_req_len   = skb->len + sizeof(tx_desc_fw);\r
+       \r
+               SiteSurveyPara->desc.MacID      = 0;\r
+               SiteSurveyPara->desc.TXHT               = (tcb_desc->data_rate&0x80)?1:0;       \r
+               SiteSurveyPara->desc.TxRate     = MRateToHwRate8192SE(dev,tcb_desc->data_rate);\r
+               SiteSurveyPara->desc.TxShort    = QueryIsShort(((tcb_desc->data_rate&0x80)?1:0), MRateToHwRate8192SE(dev,tcb_desc->data_rate), tcb_desc);\r
+\r
+               SiteSurveyPara->desc.AggEn      = 0;\r
+               SiteSurveyPara->desc.Seq                = 0; 
+               SiteSurveyPara->desc.RTSEn      = (tcb_desc->bRTSEnable && tcb_desc->bCTSEnable==false)?1:0;                            \r
+               SiteSurveyPara->desc.CTS2Self   = (tcb_desc->bCTSEnable)?1:0;           \r
+               SiteSurveyPara->desc.RTSSTBC    = (tcb_desc->bRTSSTBC)?1:0;\r
+               SiteSurveyPara->desc.RTSHT      = (tcb_desc->rts_rate&0x80)?1:0;\r
+               SiteSurveyPara->desc.RTSRate    = MRateToHwRate8192SE(dev,tcb_desc->rts_rate);\r
+               SiteSurveyPara->desc.RTSRate    = MRateToHwRate8192SE(dev,MGN_24M);\r
+               SiteSurveyPara->desc.RTSBW      = 0;\r
+               SiteSurveyPara->desc.RTSSC      = tcb_desc->RTSSC;\r
+               SiteSurveyPara->desc.RTSShort   = (SiteSurveyPara->desc.RTSHT==0)?(tcb_desc->bRTSUseShortPreamble?1:0):(tcb_desc->bRTSUseShortGI?1:0);\r
+\r
+               if(priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20_40){\r
+                       if(tcb_desc->bPacketBW) {\r
+                               SiteSurveyPara->desc.TxBw = 1;\r
+                               SiteSurveyPara->desc.TXSC        = 0;\r
+                       } else {                                \r
+                               SiteSurveyPara->desc.TxBw = 0;\r
+                               SiteSurveyPara->desc.TXSC        = priv->nCur40MhzPrimeSC;\r
+                       }\r
+               } else {\r
+                       SiteSurveyPara->desc.TxBw       = 0;\r
+                       SiteSurveyPara->desc.TXSC               = 0;\r
+               }\r
+       \r
+               SiteSurveyPara->desc.LINIP              = 0;
+               SiteSurveyPara->desc.Offset             = 32;
+               SiteSurveyPara->desc.PktSize            = (u16)skb->len;                \r
+       \r
+               SiteSurveyPara->desc.RaBRSRID   = tcb_desc->RATRIndex;\r
+       \r
+               SiteSurveyPara->desc.PktID              = 0x0;          \r
+               SiteSurveyPara->desc.QueueSel           = rtl8192se_MapHwQueueToFirmwareQueue(tcb_desc->queue_index, tcb_desc->priority); \r
+       \r
+               SiteSurveyPara->desc.DataRateFBLmt= 0x1F;               
+               SiteSurveyPara->desc.DISFB              = tcb_desc->bTxDisableRateFallBack;\r
+               SiteSurveyPara->desc.UserRate           = tcb_desc->bTxUseDriverAssingedRate;\r
+\r
+       \r
+               SiteSurveyPara->desc.FirstSeg           = 1;
+               SiteSurveyPara->desc.LastSeg            = 1;
+       \r
+               SiteSurveyPara->desc.TxBufferSize       = (u16)skb->len;        \r
+       \r
+               SiteSurveyPara->desc.OWN                        = 1;\r
+\r
+\r
+               memcpy(&SiteSurveyPara->probe_req[0], skb->data, (u16)skb->len);\r
+\r
+               dev_kfree_skb_any(skb);\r
+       } else {\r
+               SiteSurveyPara->start_flag      = start_flag;\r
+               SiteSurveyPara->probe_req_len   = 0;\r
+       }\r
+       \r
+       FirmwareSetH2CCmd( dev ,FW_H2C_SITESURVEY, (u8*)SiteSurveyPara);\r
+}\r
+\r
+int rtl8192se_send_scan_cmd(struct net_device  *dev, bool start)\r
+{\r
+       struct r8192_priv   *priv = rtllib_priv(dev);\r
+       \r
+       if(start){\r
+               priv->rtllib->scan_watch_dog =0;\r
+#if 0\r
+               queue_delayed_work_rsl(priv->priv_wq,&priv->hw_scan_simu_wq,0);\r
+#else\r
+               rtl8192se_set_scan_cmd(dev, start);\r
+#endif\r
+       } else {\r
+#if 0\r
+               rtl8192se_rx_surveydone_cmd(dev);\r
+#else\r
+               rtl8192se_set_scan_cmd(dev, start);\r
+#endif\r
+       }\r
+       return true;\r
+}\r
+#endif\r
+\r
+#endif\r
diff --git a/ubuntu/rtl8192se/rtl8192s/r8192S_firmware.h b/ubuntu/rtl8192se/rtl8192s/r8192S_firmware.h
new file mode 100644 (file)
index 0000000..7784db1
--- /dev/null
@@ -0,0 +1,419 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+#ifndef __INC_FIRMWARE_H
+#define __INC_FIRMWARE_H
+
+#include "r8192S_def.h"
+
+#define        RTL8190_MAX_FIRMWARE_CODE_SIZE  64000   
+#define        RTL8190_CPU_START_OFFSET                        0x80
+#define        MAX_FIRMWARE_CODE_SIZE  0xFF00  
+
+#define                H2C_TX_CMD_HDR_LEN                              8
+
+#define                RTL8192S_FW_PKT_FRAG_SIZE               0x4000  
+
+#ifdef RTL8192SE
+#define GET_COMMAND_PACKET_FRAG_THRESHOLD(v)   4*(v/4) - 8
+#else 
+#define GET_COMMAND_PACKET_FRAG_THRESHOLD(v)   (4*(v/4) - 8 - USB_HWDESC_HEADER_LEN)
+#endif
+
+typedef enum _DESC_PACKET_TYPE{
+       DESC_PACKET_TYPE_INIT = 0,
+       DESC_PACKET_TYPE_NORMAL = 1,    
+}DESC_PACKET_TYPE;
+
+
+#ifdef RTL8192S
+typedef enum _firmware_init_step{
+       FW_INIT_STEP0_IMEM = 0,
+       FW_INIT_STEP1_MAIN = 1,
+       FW_INIT_STEP2_DATA = 2,
+}firmware_init_step_e;
+#else
+typedef enum _firmware_init_step{
+       FW_INIT_STEP0_BOOT = 0,
+       FW_INIT_STEP1_MAIN = 1,
+       FW_INIT_STEP2_DATA = 2,
+}firmware_init_step_e;
+#endif
+
+typedef enum _firmware_source{
+       FW_SOURCE_IMG_FILE = 0,
+       FW_SOURCE_HEADER_FILE = 1,              
+}firmware_source_e, *pfirmware_source_e;
+
+typedef enum _opt_rst_type{
+       OPT_SYSTEM_RESET = 0,
+       OPT_FIRMWARE_RESET = 1,
+}opt_rst_type_e;
+
+typedef enum _FIRMWARE_STATUS{
+       FW_STATUS_0_INIT = 0,
+       FW_STATUS_1_MOVE_BOOT_CODE = 1,
+       FW_STATUS_2_MOVE_MAIN_CODE = 2,
+       FW_STATUS_3_TURNON_CPU = 3,
+       FW_STATUS_4_MOVE_DATA_CODE = 4,
+       FW_STATUS_5_READY = 5,
+}FIRMWARE_STATUS;
+
+typedef enum _H2C_CMD{
+       FW_H2C_SETPWRMODE       = 0,
+       FW_H2C_JOINBSSRPT       = 1,
+       FW_H2C_WoWLAN_UPDATE_GTK = 2,
+       FW_H2C_WoWLAN_UPDATE_IV = 3,
+       FW_H2C_WoWLAN_OFFLOAD = 4,
+       FW_H2C_SITESURVEY=5,
+}H2C_CMD;
+
+ typedef struct _H2C_SETPWRMODE_PARM {
+       u8      mode;
+       u8      flag_low_traffic_en; 
+       u8      flag_lpnav_en;
+       u8      flag_rf_low_snr_en;
+       u8      flag_dps_en; 
+       u8      bcn_rx_en;
+       u8      bcn_pass_cnt;
+       u8      bcn_to;  // beacon TO (ms). Â¡Â§=0¡¨ no limit.
+       u16     bcn_itv;
+       u8      app_itv; 
+       u8      awake_bcn_itvl;
+       u8      smart_ps;
+       u8      bcn_pass_period; 
+ }H2C_SETPWRMODE_PARM, *PH2C_SETPWRMODE_PARM; 
+
+typedef struct _H2C_JOINBSSRPT_PARM {  
+       u8      OpMode; 
+       u8      Ps_Qos_Info;
+       u8      Bssid[6];       
+       u16     BcnItv; 
+       u16     Aid;
+}H2C_JOINBSSRPT_PARM, *PH2C_JOINBSSRPT_PARM;
+
+typedef struct _H2C_WPA_PTK {
+       u8      kck[16]; /* EAPOL-Key Key Confirmation Key (KCK) */
+       u8      kek[16]; /* EAPOL-Key Key Encryption Key (KEK) */
+       u8      tk1[16]; /* Temporal Key 1 (TK1) */
+       union {
+               u8      tk2[16]; 
+               struct {
+                       u8      tx_mic_key[8];
+                       u8      rx_mic_key[8];
+               }Athu;
+       }U;
+}H2C_WPA_PTK;
+
+typedef struct _H2C_WPA_TWO_WAY_PARA{
+       u8                      pairwise_en_alg;
+       u8                      group_en_alg;
+       H2C_WPA_PTK             wpa_ptk_value;
+}H2C_WPA_TWO_WAY_PARA, *PH2C_WPA_TWO_WAY_PARA;
+
+typedef struct _tx_desc_8192se_fw{
+
+        u32             PktSize:16;
+        u32             Offset:8;
+        u32             Type:2; 
+        u32             LastSeg:1;
+        u32             FirstSeg:1;
+        u32             LINIP:1;
+        u32             AMSDU:1;
+        u32             GF:1;
+        u32             OWN:1;
+
+        u32             MacID:5;
+        u32             MoreData:1;
+        u32             MoreFrag:1;
+        u32             PIFS:1;
+        u32             QueueSel:5;
+        u32             AckPolicy:2;
+        u32             NoACM:1;
+        u32             NonQos:1;
+        u32             KeyID:2;
+        u32             OUI:1;
+        u32             PktType:1;
+        u32             EnDescID:1;
+        u32             SecType:2;
+        u32             HTC:1;  
+        u32             WDS:1;  
+        u32             PktOffset:5;    
+        u32             HWPC:1;
+
+        u32             DataRetryLmt:6;
+        u32             RetryLmtEn:1;
+        u32             TSFL:5;
+        u32             RTSRC:6;        
+        u32             DATARC:6;       
+
+        u32             Rsvd1:5;
+        u32             AggEn:1;
+        u32             BK:1;   
+        u32             OwnMAC:1;
+
+        u32             NextHeadPage:8;
+        u32             TailPage:8;
+        u32             Seq:12;
+        u32             Frag:4;
+
+        u32             RTSRate:6;
+        u32             DisRTSFB:1;
+        u32             RTSRateFBLmt:4;
+        u32             CTS2Self:1;
+        u32             RTSEn:1;
+        u32             RaBRSRID:3;     
+        u32             TXHT:1;
+        u32             TxShort:1;
+        u32             TxBw:1;
+        u32             TXSC:2;
+        u32             STBC:2;
+        u32             RD:1;
+        u32             RTSHT:1;
+        u32             RTSShort:1;
+        u32             RTSBW:1;
+        u32             RTSSC:2;
+        u32             RTSSTBC:2;
+        u32             UserRate:1;
+
+        u32             PktID:9;
+        u32             TxRate:6;
+        u32             DISFB:1;
+        u32             DataRateFBLmt:5;
+        u32             TxAGC:11;
+
+        u32             IPChkSum:16;
+        u32             TCPChkSum:16;
+
+        u32             TxBufferSize:16;
+        u32             IPHdrOffset:8;
+        u32             Rsvd3:7;
+        u32             TCPEn:1;
+} tx_desc_fw, *ptx_desc_fw;
+
+typedef struct _H2C_SITESURVEY_PARA {
+       u32             start_flag; 
+       u32             probe_req_len; 
+       tx_desc_fw      desc;           
+       u8              probe_req[0];
+}H2C_SITESURVEY_PARA, *PH2C_SITESURVEY_PARA;
+
+ typedef enum _FIRMWARE_H2C_CMD{
+       H2C_Read_MACREG_CMD ,           /*0*/
+       H2C_Write_MACREG_CMD ,          
+       H2C_ReadBB_CMD ,        
+       H2C_WriteBB_CMD ,               
+       H2C_ReadRF_CMD ,                
+       H2C_WriteRF_CMD ,               /*5*/
+       H2C_Read_EEPROM_CMD ,           
+       H2C_Write_EEPROM_CMD ,          
+       H2C_Read_EFUSE_CMD ,            
+       H2C_Write_EFUSE_CMD ,           
+       H2C_Read_CAM_CMD ,                      /*10*/
+       H2C_Write_CAM_CMD ,                     
+       H2C_setBCNITV_CMD,
+       H2C_setMBIDCFG_CMD,
+       H2C_JoinBss_CMD ,                               
+       H2C_DisConnect_CMD,                     /*15*/
+       H2C_CreateBss_CMD ,
+       H2C_SetOpMode_CMD,      
+       H2C_SiteSurvey_CMD,
+       H2C_SetAuth_CMD,
+       H2C_SetKey_CMD ,                                /*20*/
+       H2C_SetStaKey_CMD ,
+       H2C_SetAssocSta_CMD,
+       H2C_DelAssocSta_CMD ,
+       H2C_SetStaPwrState_CMD ,
+       H2C_SetBasicRate_CMD ,          /*25*/
+       H2C_GetBasicRate_CMD ,
+       H2C_SetDataRate_CMD ,
+       H2C_GetDataRate_CMD ,
+       H2C_SetPhyInfo_CMD ,
+       H2C_GetPhyInfo_CMD ,                    /*30*/
+       H2C_SetPhy_CMD ,
+       H2C_GetPhy_CMD ,
+       H2C_readRssi_CMD ,
+       H2C_readGain_CMD ,
+       H2C_SetAtim_CMD ,                       /*35*/
+       H2C_SetPwrMode_CMD ,
+       H2C_JoinbssRpt_CMD,
+       H2C_SetRaTable_CMD ,    
+       H2C_GetRaTable_CMD ,    
+       H2C_GetCCXReport_CMD,            /*40*/
+       H2C_GetDTMReport_CMD,           
+       H2C_GetTXRateStatistics_CMD,
+       H2C_SetUsbSuspend_CMD,
+       H2C_SetH2cLbk_CMD ,
+       H2C_tmp1 ,                      /*45*/
+       H2C_WoWLAN_UPDATE_GTK_CMD ,     
+       H2C_WoWLAN_FW_OFFLOAD , 
+       H2C_tmp2 , 
+       H2C_tmp3 , 
+       H2C_WoWLAN_UPDATE_IV_CMD ,              /*50*/          
+       H2C_tmp4,       
+       MAX_H2CCMD                                                      /*52*/
+}FIRMWARE_H2C_CMD;
+
+
+typedef  struct _RT_8192S_FIRMWARE_PRIV { 
+
+       u8              signature_0;            
+       u8              signature_1;            
+       u8              hci_sel;                        
+       u8              chip_version;   
+       u8              customer_ID_0;  
+       u8              customer_ID_1;  
+       u8              rf_config;              
+       u8              usb_ep_num;     
+       
+       u8              regulatory_class_0;     
+       u8              regulatory_class_1;     
+       u8              regulatory_class_2;     
+       u8              regulatory_class_3;     
+       u8              rfintfs;                                
+       u8              def_nettype;            
+       u8              rsvd010;
+       u8              rsvd011;
+       
+       
+       u8              lbk_mode;       
+       u8              mp_mode;        
+       u8              rsvd020;
+       u8              rsvd021;
+       u8              rsvd022;
+       u8              rsvd023;
+       u8              rsvd024;
+       u8              rsvd025;
+
+       u8              qos_en;                         
+       u8              bw_40MHz_en;            
+       u8              AMSDU2AMPDU_en; 
+       u8              AMPDU_en;                       
+       u8              rate_control_offload;
+       u8              aggregation_offload;    
+       u8              rsvd030;
+       u8              rsvd031;
+
+       
+       unsigned char           beacon_offload;                 
+       unsigned char           MLME_offload;                   
+       unsigned char           hwpc_offload;                   
+       unsigned char           tcp_checksum_offload;   
+       unsigned char           tcp_offload;                            
+       unsigned char           ps_control_offload;             
+       unsigned char           WWLAN_offload;                  
+       unsigned char           rsvd040;
+
+       u8              tcp_tx_frame_len_L;             
+       u8              tcp_tx_frame_len_H;             
+       u8              tcp_rx_frame_len_L;             
+       u8              tcp_rx_frame_len_H;             
+       u8              rsvd050;
+       u8              rsvd051;
+       u8              rsvd052;
+       u8              rsvd053;
+}RT_8192S_FIRMWARE_PRIV, *PRT_8192S_FIRMWARE_PRIV;
+
+typedef struct _RT_8192S_FIRMWARE_HDR {
+
+       u16             Signature;
+       u16             Version;                  
+       u32             DMEMSize;    
+
+
+       u32             IMG_IMEM_SIZE;    
+       u32             IMG_SRAM_SIZE;    
+
+       u32             FW_PRIV_SIZE;       
+       u32             Rsvd0;  
+
+       u32             Rsvd1;
+       u32             Rsvd2;
+
+       RT_8192S_FIRMWARE_PRIV  FWPriv;
+       
+}RT_8192S_FIRMWARE_HDR, *PRT_8192S_FIRMWARE_HDR;
+
+#define        RT_8192S_FIRMWARE_HDR_SIZE      80
+#define   RT_8192S_FIRMWARE_HDR_EXCLUDE_PRI_SIZE       32
+
+typedef enum _FIRMWARE_8192S_STATUS{
+       FW_STATUS_INIT = 0,
+       FW_STATUS_LOAD_IMEM = 1,
+       FW_STATUS_LOAD_EMEM = 2,
+       FW_STATUS_LOAD_DMEM = 3,
+       FW_STATUS_READY = 4,
+}FIRMWARE_8192S_STATUS;
+
+typedef struct _rt_firmware{   
+       firmware_source_e       eFWSource;      
+       PRT_8192S_FIRMWARE_HDR  pFwHeader;
+       FIRMWARE_8192S_STATUS   FWStatus;
+       u16             FirmwareVersion;
+       u8              FwIMEM[RTL8190_MAX_FIRMWARE_CODE_SIZE];
+       u8              FwEMEM[RTL8190_MAX_FIRMWARE_CODE_SIZE];
+       u32             FwIMEMLen;
+       u32             FwEMEMLen;      
+       u8              szFwTmpBuffer[164000];  
+       u32             szFwTmpBufferLen;
+       u16             CmdPacketFragThresold;          
+}rt_firmware, *prt_firmware;
+
+#define                FW_DIG_ENABLE_CTL                       BIT0
+#define                FW_HIGH_PWR_ENABLE_CTL  BIT1
+#define                FW_SS_CTL                                       BIT2
+#define                FW_RA_INIT_CTL                          BIT3
+#define                FW_RA_BG_CTL                            BIT4
+#define                FW_RA_N_CTL                             BIT5
+#define                FW_PWR_TRK_CTL                  BIT6
+#define                FW_IQK_CTL                                      BIT7
+#define                FW_FA_CTL                                       BIT8
+#define                FW_DRIVER_CTRL_DM_CTL           BIT9
+#define                FW_PAPE_CTL_BY_SW_HW    BIT10
+#define                FW_DISABLE_ALL_DM                       0
+
+#define                FW_PWR_TRK_PARAM_CLR            0x0000ffff
+#define                FW_RA_PARAM_CLR                 0xffff0000
+
+#define FW_CMD_IO_CLR(priv, _Bit)              \
+       udelay(1000);   \
+       priv->FwCmdIOMap &= (~_Bit);
+
+#define FW_CMD_IO_UPDATE(priv, _val)           \
+       priv->FwCmdIOMap = _val;
+
+#define FW_CMD_IO_SET(priv, _val)      \
+       write_nic_word(priv->rtllib->dev, LBUS_MON_ADDR, (u16)_val);    \
+       FW_CMD_IO_UPDATE(priv, _val);\
+
+#define FW_CMD_PARA_SET(priv, _val)            \
+       write_nic_dword(priv->rtllib->dev, LBUS_ADDR_MASK, _val);       \
+       priv->FwCmdIOParam = _val;
+
+#define FW_CMD_IO_QUERY(priv)  (u16)(priv->FwCmdIOMap)
+#define FW_CMD_IO_PARA_QUERY(priv)     ((u32)(priv->FwCmdIOParam))
+
+bool FirmwareEnableCPU(struct net_device *dev);
+bool FirmwareCheckReady(struct net_device *dev, u8 LoadFWStatus);
+
+bool FirmwareDownload92S(struct net_device *dev);
+int rtl8192se_send_scan_cmd(struct net_device  *dev, bool start);
+
+void rtl8192se_dump_skb_data(struct sk_buff *skb);
+#endif
+
diff --git a/ubuntu/rtl8192se/rtl8192s/r8192S_hw.h b/ubuntu/rtl8192se/rtl8192s/r8192S_hw.h
new file mode 100644 (file)
index 0000000..31be6fa
--- /dev/null
@@ -0,0 +1,1070 @@
+/******************************************************************************\r
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ * The full GNU General Public License is included in this distribution in the\r
+ * file called LICENSE.\r
+ *                     \r
+ * Contact Information:\r
+ * wlanfae <wlanfae@realtek.com>\r
+******************************************************************************/\r
+#ifndef __INC_HAL8192SREG_H\r
+#define __INC_HAL8192SREG_H\r
+\r
+\r
+#if 0\r
+typedef enum _RT_RF_TYPE_DEF\r
+{\r
+       RF_1T2R = 0,\r
+       RF_2T4R,\r
+       RF_2T2R,\r
+       RF_1T1R,\r
+       RF_2T2R_GREEN,\r
+       RF_819X_MAX_TYPE\r
+}RT_RF_TYPE_DEF;\r
+#endif\r
+\r
+#define                SYS_ISO_CTRL                    0x0000  
+#define                SYS_FUNC_EN                     0x0002  
+#define                PMC_FSM                         0x0004  
+#define                SYS_CLKR                        0x0008  
+#define                EPROM_CMD                       0x000A  
+#define                EE_VPD                          0x000C  
+#define                AFE_MISC                        0x0010  
+#define                SPS0_CTRL                       0x0011  
+#define                SPS1_CTRL                       0x0018  
+#define                RF_CTRL                         0x001F  
+#define                LDOA15_CTRL                     0x0020  
+#define                LDOV12D_CTRL                    0x0021  
+#define                LDOHCI12_CTRL                   0x0022  
+#define                LDO_USB_SDIO                    0x0023  
+#define                LPLDO_CTRL                      0x0024  
+#define                AFE_XTAL_CTRL                   0x0026  
+#define                AFE_PLL_CTRL                    0x0028  
+#define                EFUSE_CTRL                      0x0030  
+#define                EFUSE_TEST                      0x0034  
+#define                PWR_DATA                        0x0038  
+#define                DBG_PORT                        0x003A  
+#define                DPS_TIMER                       0x003C  
+#define                RCLK_MON                        0x003E  
+\r
+#define                CMDR                            0x0040  
+#define                TXPAUSE                         0x0042  
+#define                LBKMD_SEL                       0x0043  
+#define                TCR                             0x0044  
+#define                RCR                             0x0048  
+#define                MSR                             0x004C  
+#define                SYSF_CFG                        0x004D  
+#define                RX_PKY_LIMIT                    0x004E  
+#define                MBIDCTRL                        0x004F  
+\r
+#define                MACIDR                          0x0050  
+#define                MACIDR0                         0x0050  
+#define                MACIDR4                         0x0054  
+#define                BSSIDR                          0x0058  
+#define                HWVID                           0x005E  
+#define                MAR                             0x0060  
+#define                MBIDCAMCONTENT                  0x0068  
+#define                MBIDCAMCFG                      0x0070  
+#define                BUILDTIME                       0x0074  
+#define                BUILDUSER                       0x0078  
+\r
+#define                IDR0                            MACIDR0\r
+#define                IDR4                            MACIDR4\r
+\r
+#define                TSFR                            0x0080  
+#define                SLOT_TIME                       0x0089  
+#define                USTIME                          0x008A  
+#define                SIFS_CCK                        0x008C  
+#define                SIFS_OFDM                       0x008E  
+#define                PIFS_TIME                       0x0090  
+#define                ACK_TIMEOUT                     0x0091  
+#define                EIFSTR                          0x0092  
+#define                BCN_INTERVAL                    0x0094  
+#define                ATIMWND                         0x0096  
+#define                BCN_DRV_EARLY_INT               0x0098  
+#define                BCN_DMATIME                     0x009A  
+#define                BCN_ERR_THRESH                  0x009C  
+#define                MLT                             0x009D  
+#define                RSVD_MAC_TUNE_US                0x009E  
+\r
+#define        RQPN                            0x00A0\r
+#define                RQPN1                           0x00A0  
+#define                RQPN2                           0x00A1  
+#define                RQPN3                           0x00A2  
+#define                RQPN4                           0x00A3  
+#define                RQPN5                           0x00A4  
+#define                RQPN6                           0x00A5  
+#define                RQPN7                           0x00A6  
+#define                RQPN8                           0x00A7  
+#define                RQPN9                           0x00A8  
+#define                RQPN10                          0x00A9  
+#define                LD_RQPN                         0x00AB  
+#define                RXFF_BNDY                       0x00AC  
+#define                RXRPT_BNDY                      0x00B0  
+#define                TXPKTBUF_PGBNDY                 0x00B4  
+#define                PBP                             0x00B5  
+#define                RXDRVINFO_SZ                    0x00B6  
+#define                TXFF_STATUS                     0x00B7  
+#define                RXFF_STATUS                     0x00B8  
+#define                TXFF_EMPTY_TH                   0x00B9  
+#define                SDIO_RX_BLKSZ                   0x00BC  
+#define                RXDMA                           0x00BD  
+#define                RXPKT_NUM                       0x00BE  
+#define                C2HCMD_UDT_SIZE                 0x00C0  
+#define                C2HCMD_UDT_ADDR                 0x00C2  
+#define                FIFOPAGE1                       0x00C4  
+#define                FIFOPAGE2                       0x00C8  
+#define                FIFOPAGE3                       0x00CC  
+#define                FIFOPAGE4                       0x00D0  
+#define                FIFOPAGE5                       0x00D4  
+#define                FW_RSVD_PG_CRTL                 0x00D8  
+#define                RXDMA_AGG_PG_TH                 0x00D9  
+#define                TXDESC_MSK                      0x00DC  
+#define                TXRPTFF_RDPTR                   0x00E0  
+#define                TXRPTFF_WTPTR                   0x00E4  
+#define                C2HFF_RDPTR                     0x00E8  
+#define                C2HFF_WTPTR                     0x00EC  
+#define                RXFF0_RDPTR                     0x00F0  
+#define                RXFF0_WTPTR                     0x00F4  
+#define                RXFF1_RDPTR                     0x00F8  
+#define                RXFF1_WTPTR                     0x00FC  
+#define                RXRPT0_RDPTR                    0x0100  
+#define                RXRPT0_WTPTR                    0x0104  
+#define                RXRPT1_RDPTR                    0x0108  
+#define                RXRPT1_WTPTR                    0x010C  
+#define                RX0_UDT_SIZE                    0x0110  
+#define                RX1PKTNUM                       0x0114  
+#define                RXFILTERMAP                     0x0116  
+#define                RXFILTERMAP_GP1                 0x0118  
+#define                RXFILTERMAP_GP2                 0x011A  
+#define                RXFILTERMAP_GP3                 0x011C  
+#define                BCNQ_CTRL                       0x0120  
+#define                MGTQ_CTRL                       0x0124  
+#define                HIQ_CTRL                        0x0128  
+#define                VOTID7_CTRL                     0x012c  
+#define                VOTID6_CTRL                     0x0130  
+#define                VITID5_CTRL                     0x0134  
+#define                VITID4_CTRL                     0x0138  
+#define                BETID3_CTRL                     0x013c  
+#define                BETID0_CTRL                     0x0140  
+#define                BKTID2_CTRL                     0x0144  
+#define                BKTID1_CTRL                     0x0148  
+#define                CMDQ_CTRL                       0x014c  
+#define                TXPKT_NUM_CTRL                  0x0150  
+#define                TXQ_PGADD                       0x0152  
+#define                TXFF_PG_NUM                     0x0154  
+#define                TRXDMA_STATUS                   0x0156  
+\r
+#define                INIMCS_SEL                      0x0160  
+#define                TX_RATE_REG                     INIMCS_SEL 
+#define                INIRTSMCS_SEL                   0x0180  
+#define                RRSR                            0x0181  
+#define                ARFR0                           0x0184  
+#define                ARFR1                           0x0188  
+#define                ARFR2                           0x018C  
+#define                ARFR3                           0x0190  
+#define                ARFR4                           0x0194  
+#define                ARFR5                           0x0198  
+#define                ARFR6                           0x019C  
+#define                ARFR7                           0x01A0  
+#define                AGGLEN_LMT_H                    0x01A7  
+#define                AGGLEN_LMT_L                    0x01A8  
+#define                DARFRC                          0x01B0  
+#define                RARFRC                          0x01B8  
+#define                MCS_TXAGC                       0x01C0\r
+#define                CCK_TXAGC                       0x01C8\r
+\r
+#define                EDCAPARA_VO                     0x01D0  
+#define                EDCAPARA_VI                     0x01D4  
+#define                EDCAPARA_BE                     0x01D8  
+#define                EDCAPARA_BK                     0x01DC  
+#define                BCNTCFG                         0x01E0  
+#define                CWRR                            0x01E2  
+#define                ACMAVG                          0x01E4  
+#define                AcmHwCtrl                       0x01E7  \r
+#define                VO_ADMTM                        0x01E8  
+#define                VI_ADMTM                        0x01EC\r
+#define                BE_ADMTM                        0x01F0\r
+#define                RETRY_LIMIT                     0x01F4  
+#define                SG_RATE                         0x01F6  
+\r
+#define                NAV_CTRL                        0x0200\r
+#define                BW_OPMODE                       0x0203\r
+#define                BACAMCMD                        0x0204\r
+#define                BACAMCONTENT                    0x0208  
+\r
+#define                LBDLY                           0x0210  
+#define                FWDLY                           0x0211  
+#define                HWPC_RX_CTRL                    0x0218  
+#define                MQIR                            0x0220  
+#define                MAIR                            0x0222  
+#define                MSIR                            0x0224  
+#define                CLM_RESULT                      0x0227  
+#define                NHM_RPI_CNT                     0x0228  
+#define                RXERR_RPT                       0x0230  
+#define                NAV_PROT_LEN                    0x0234  
+#define                CFEND_TH                        0x0236  
+#define                AMPDU_MIN_SPACE                 0x0237  
+#define                TXOP_STALL_CTRL                 0x0238\r
+\r
+#define                RWCAM                           0x0240  
+#define                WCAMI                           0x0244  
+#define                RCAMO                           0x0248  
+#define                CAMDBG                          0x024C\r
+#define                SECR                            0x0250  
+\r
+#define                WOW_CTRL                        0x0260  
+#define                PSSTATUS                        0x0261  
+#define                PSSWITCH                        0x0262  
+#define                MIMOPS_WAIT_PERIOD              0x0263\r
+#define                LPNAV_CTRL                      0x0264\r
+#define                WFM0                            0x0270  
+#define                WFM1                            0x0280  
+#define                WFM2                            0x0290  
+#define                WFM3                            0x02A0  
+#define                WFM4                            0x02B0  
+#define                WFM5                            0x02C0  
+#define                WFCRC                           0x02D0  
+#define                FW_RPT_REG                      0x02c4\r
+\r
+#define                PSTIME                          0x02E0  
+#define                TIMER0                          0x02E4  
+#define                TIMER1                          0x02E8  
+#define                GPIO_CTRL                       0x02EC  
+#define                GPIO_IN                         0x02EC  
+#define                GPIO_OUT                        0x02ED  
+#define                GPIO_IO_SEL                     0x02EE  
+#define                GPIO_MOD                        0x02EF  
+#define                GPIO_INTCTRL                    0x02F0  
+#define                MAC_PINMUX_CFG                  0x02F1  
+#define                LEDCFG                          0x02F2  
+#define                PHY_REG                         0x02F3  
+#define                PHY_REG_DATA                    0x02F4  
+#define                EFUSE_CLK                       0x02F8  
+\r
+#define                INTA_MASK                               0x0300  
+#define                ISR                             0x0308  
+\r
+#define                DBG_PORT_SWITCH                 0x003A\r
+#define                BIST                            0x0310  
+#define                DBS                             0x0314  
+#define                CPUINST                         0x0318  
+#define                CPUCAUSE                        0x031C  
+#define                LBUS_ERR_ADDR                   0x0320  
+#define                LBUS_ERR_CMD                    0x0324  
+#define                LBUS_ERR_DATA_L                 0x0328  
+#define                LBUS_ERR_DATA_H                 0x032C  
+#define                LX_EXCEPTION_ADDR               0x0330  
+#define                WDG_CTRL                        0x0334  
+#define                INTMTU                          0x0338  
+#define                INTM                            0x033A  
+#define                FDLOCKTURN0                     0x033C  
+#define                FDLOCKTURN1                     0x033D  
+#define                TRXPKTBUF_DBG_DATA              0x0340  
+#define                TRXPKTBUF_DBG_CTRL              0x0348  
+#define                DPLL                            0x034A  
+#define                CBUS_ERR_ADDR                   0x0350  
+#define                CBUS_ERR_CMD                    0x0354  
+#define                CBUS_ERR_DATA_L                 0x0358  
+#define                CBUS_ERR_DATA_H                 0x035C  
+#define                USB_SIE_INTF_ADDR               0x0360  
+#define                USB_SIE_INTF_WD                 0x0361  
+#define                USB_SIE_INTF_RD                 0x0362  
+#define                USB_SIE_INTF_CTRL               0x0363  
+#define                LBUS_MON_ADDR           0x0364  
+#define                LBUS_ADDR_MASK          0x0368  
+\r
+\r
+#define                TPPoll                          0x0500  
+#define                PM_CTRL                         0x0502  
+#define                PCIF                            0x0503  
+\r
+#define                THPDA                           0x0514  
+#define                TMDA                            0x0518  
+#define                TCDA                            0x051C  
+#define                HDA                             0x0520  
+#define                TVODA                           0x0524  
+#define                TVIDA                           0x0528  
+#define                TBEDA                           0x052C  
+#define                TBKDA                           0x0530  
+#define                TBDA                            0x0534  
+#define                RCDA                            0x0538  
+#define                RDQDA                           0x053C  
+#define                DBI_WDATA                       0x0540  
+#define                DBI_RDATA                       0x0544  
+#define                DBI_CTRL                        0x0548  
+#define                MDIO_DATA                       0x0550  
+#define                MDIO_CTRL                       0x0554  
+#define                PCI_RPWM                        0x0561  
+#define                PCI_CPWM                                0x0563  
+\r
+\r
+#define                PHY_CCA                 0x803   
+\r
+\r
+#define        USB_RX_AGG_TIMEOUT                      0xFE5B  \r
+\r
+#define        FW_OFFLOAD_EN                           BIT7\r
+\r
+#define        MAX_MSS_DENSITY_2T                      0x13\r
+#define        MAX_MSS_DENSITY_1T                      0x0A\r
+\r
+#define        RXDMA_AGG_EN                            BIT7\r
+\r
+#define        RXDMA_AGG_TIMEOUT_DISABLE               0x00\r
+#define        RXDMA_AGG_TIMEOUT_17MS                  0x01\r
+#define        RXDMA_AGG_TIMEOUT_17_2_MS               0x02\r
+#define        RXDMA_AGG_TIMEOUT_17_4_MS               0x04\r
+#define        RXDMA_AGG_TIMEOUT_17_10_MS              0x0A\r
+\r
+#define        InvalidBBRFValue                0x12345678\r
+\r
+#define        USB_RPWM                        0xFE58\r
+\r
+#ifdef RTL8192SE \r
+#define        RPWM            PCI_RPWM\r
+#endif\r
+#ifdef RTL8192SU \r
+#define        RPWM            USB_RPWM\r
+#endif\r
+\r
+#if 1  
+#define                AFR                             0x010   
+#define                BCN_TCFG                        0x062   
+#define                RATR0                           0x320   
+#endif\r
+#define                UnusedRegister                  0x0320          \r
+#define                PSR                             UnusedRegister  
+#define                DCAM                            UnusedRegister  
+#define                BBAddr                          UnusedRegister  
+#define                PhyDataR                        UnusedRegister  
+#define                UFWP                            UnusedRegister\r
+\r
+\r
+\r
+#define                ISO_MD2PP                       BIT0    
+#define                ISO_PA2PCIE                     BIT3    
+#define                ISO_PLL2MD                      BIT4    
+#define                ISO_PWC_DV2RP           BIT11   
+#define                ISO_PWC_RV2RP           BIT12   
+\r
+#define                FEN_MREGEN                      BIT15   
+#define                FEN_DCORE                       BIT11   
+#define                FEN_CPUEN                       BIT10   
+\r
+#define                PAD_HWPD_IDN            BIT22   
+\r
+#define                SYS_CLKSEL_80M          BIT0    
+#define                SYS_PS_CLKSEL           BIT1     
+#define                SYS_CPU_CLKSEL          BIT2    
+#define                SYS_MAC_CLK_EN          BIT11   
+#define                SYS_SWHW_SEL            BIT14   
+#define                SYS_FWHW_SEL            BIT15   
+\r
+\r
+#define                CmdEEPROM_En                                            BIT5     
+#define                CmdEERPOMSEL                                            BIT4 
+#define                Cmd9346CR_9356SEL                                       BIT4\r
+#define                AutoLoadEEPROM                                  (CmdEEPROM_En|CmdEERPOMSEL)\r
+#define                AutoLoadEFUSE                                           CmdEEPROM_En\r
+#define EPROM_CMD_OPERATING_MODE_SHIFT 6\r
+#define EPROM_CMD_OPERATING_MODE_MASK ((1<<7)|(1<<6))\r
+#define EPROM_CMD_CONFIG 0x3\r
+#define EPROM_CMD_NORMAL 0 \r
+#define EPROM_CMD_LOAD 1\r
+#define EPROM_CMD_PROGRAM 2\r
+#define EPROM_CS_SHIFT 3\r
+#define EPROM_CK_SHIFT 2\r
+#define EPROM_W_SHIFT 1\r
+#define EPROM_R_SHIFT 0\r
+\r
+#define                AFE_MBEN                        BIT1    
+#define                AFE_BGEN                        BIT0    
+\r
+#define                SPS1_SWEN                       BIT1    
+#define                SPS1_LDEN                       BIT0    
+\r
+#define                RF_EN                           BIT0 
+#define                RF_RSTB                 BIT1 
+#define                RF_SDMRSTB                      BIT2 
+\r
+#define                LDA15_EN                        BIT0    
+\r
+#define                LDV12_EN                        BIT0    
+#define                LDV12_SDBY                      BIT1    
+\r
+#define                XTAL_GATE_AFE           BIT10   \r
+\r
+#define                APLL_EN                         BIT0    
+\r
+#define                AFR_CardBEn                     BIT0\r
+#define                AFR_CLKRUN_SEL          BIT1\r
+#define                AFR_FuncRegEn           BIT2\r
+\r
+#define                APSDOFF_STATUS          BIT15   
+#define                APSDOFF                         BIT14   
+#define                BBRSTn                          BIT13   
+#define                BB_GLB_RSTn                     BIT12   
+#define                SCHEDULE_EN                     BIT10   
+#define                MACRXEN                         BIT9    
+#define                MACTXEN                         BIT8    
+#define                DDMA_EN                         BIT7    
+#define                FW2HW_EN                        BIT6    
+#define                RXDMA_EN                        BIT5    
+#define                TXDMA_EN                        BIT4    
+#define                HCI_RXDMA_EN            BIT3    
+#define                HCI_TXDMA_EN            BIT2    
+\r
+#define                StopHCCA                        BIT6\r
+#define                StopHigh                        BIT5\r
+#define                StopMgt                         BIT4\r
+#define                StopVO                          BIT3\r
+#define                StopVI                          BIT2\r
+#define                StopBE                          BIT1\r
+#define                StopBK                          BIT0\r
+\r
+#define                LBK_NORMAL              0x00\r
+#define                LBK_MAC_LB              (BIT0|BIT1|BIT3)\r
+#define                LBK_MAC_DLB             (BIT0|BIT1)\r
+#define                LBK_DMA_LB              (BIT0|BIT1|BIT2)        \r
+\r
+#define                TCP_OFDL_EN                             BIT25   
+#define                HWPC_TX_EN                              BIT24   
+#define                TXDMAPRE2FULL                   BIT23   
+#define                DISCW                                   BIT20   
+#define                TCRICV                                  BIT19   
+#define                CfendForm                               BIT17   
+#define                TCRCRC                                  BIT16   
+#define                FAKE_IMEM_EN                    BIT15   
+#define                TSFRST                                  BIT9    
+#define                TSFEN                                   BIT8    
+#define                FWALLRDY                                (BIT0|BIT1|BIT2|BIT3|BIT4|BIT5|BIT6|BIT7)\r
+#define                FWRDY                                   BIT7\r
+#define                BASECHG                                 BIT6\r
+#define                IMEM                                    BIT5\r
+#define                DMEM_CODE_DONE                  BIT4\r
+#define                EXT_IMEM_CHK_RPT                BIT3\r
+#define                EXT_IMEM_CODE_DONE              BIT2\r
+#define                IMEM_CHK_RPT                    BIT1\r
+#define                IMEM_CODE_DONE                  BIT0\r
+#define                IMEM_CODE_DONE          BIT0    \r
+#define                IMEM_CHK_RPT            BIT1\r
+#define                EMEM_CODE_DONE          BIT2\r
+#define                EMEM_CHK_RPT            BIT3\r
+#define                DMEM_CODE_DONE          BIT4\r
+#define                IMEM_RDY                        BIT5\r
+#define                BASECHG                         BIT6\r
+#define                FWRDY                           BIT7\r
+#define                LOAD_FW_READY   (IMEM_CODE_DONE|IMEM_CHK_RPT|EMEM_CODE_DONE|\\r
+                                                               EMEM_CHK_RPT|DMEM_CODE_DONE|IMEM_RDY|BASECHG|\\r
+                                                               FWRDY)\r
+#define                TCR_TSFEN                       BIT8            
+#define                TCR_TSFRST                      BIT9            
+#define                TCR_FAKE_IMEM_EN        BIT15\r
+#define                TCR_CRC                         BIT16\r
+#define                TCR_ICV                         BIT19   
+#define                TCR_DISCW                       BIT20   
+#define                TCR_HWPC_TX_EN          BIT24\r
+#define                TCR_TCP_OFDL_EN         BIT25\r
+#define                TXDMA_INIT_VALUE        (IMEM_CHK_RPT|EXT_IMEM_CHK_RPT)\r
+\r
+#define                RCR_APPFCS                      BIT31           
+#define                RCR_DIS_ENC_2BYTE       BIT30       
+#define                RCR_DIS_AES_2BYTE       BIT29       
+#define                RCR_HTC_LOC_CTRL        BIT28       
+#define                RCR_ENMBID                      BIT27           
+#define                RCR_RX_TCPOFDL_EN       BIT26           
+#define                RCR_APP_PHYST_RXFF      BIT25       
+#define                RCR_APP_PHYST_STAFF     BIT24       
+#define                RCR_CBSSID                      BIT23           
+#define                RCR_APWRMGT                     BIT22           
+#define                RCR_ADD3                        BIT21           
+#define                RCR_AMF                         BIT20           
+#define                RCR_ACF                         BIT19           
+#define                RCR_ADF                         BIT18           
+#define                RCR_APP_MIC                     BIT17           
+#define                RCR_APP_ICV                     BIT16       
+#define                RCR_RXFTH                       BIT13           
+#define                RCR_AICV                        BIT12           
+#define                RCR_RXDESC_LK_EN        BIT11           
+#define                RCR_APP_BA_SSN          BIT6            
+#define                RCR_ACRC32                      BIT5            
+#define                RCR_RXSHFT_EN           BIT4            
+#define                RCR_AB                          BIT3            
+#define                RCR_AM                          BIT2            
+#define                RCR_APM                         BIT1            
+#define                RCR_AAP                         BIT0            
+#define                RCR_MXDMA_OFFSET        8\r
+#define                RCR_FIFO_OFFSET         13\r
+\r
+/*\r
+Network Type\r
+00: No link\r
+01: Link in ad hoc network\r
+10: Link in infrastructure network\r
+11: AP mode\r
+Default: 00b.\r
+*/\r
+#define MSR_LINK_MASK      ((1<<0)|(1<<1))\r
+#define MSR_LINK_MANAGED   2\r
+#define MSR_LINK_NONE      0\r
+#define MSR_LINK_SHIFT     0\r
+#define MSR_LINK_ADHOC     1\r
+#define MSR_LINK_MASTER    3\r
+#if 1\r
+#define                MSR_NOLINK                              0x00\r
+#define                MSR_ADHOC                               0x01\r
+#define                MSR_INFRA                               0x02\r
+#define                MSR_AP                                  0x03\r
+#endif\r
+#define                ENUART                                  BIT7\r
+#define                ENJTAG                                  BIT3\r
+#define                BTMODE                                  (BIT2|BIT1)\r
+#define                ENBT                                    BIT0\r
+\r
+#define                ENMBID                                  BIT7\r
+#define                BCNUM                                   (BIT6|BIT5|BIT4)\r
+\r
+\r
+#define                USTIME_EDCA                             0xFF00\r
+#define                USTIME_TSF                              0x00FF\r
+\r
+#define                SIFS_TRX                                0xFF00\r
+#define                SIFS_CTX                                0x00FF\r
+\r
+#define                ENSWBCN                                 BIT15\r
+#define                DRVERLY_TU                              0x0FF0\r
+#define                DRVERLY_US                              0x000F\r
+#define                BCN_TCFG_CW_SHIFT               8\r
+#define                BCN_TCFG_IFS                    0       \r
+\r
+\r
+#define                RRSR_RSC_OFFSET                 21\r
+#define                RRSR_SHORT_OFFSET               23\r
+#define                RRSR_RSC_BW_40M         0x600000\r
+#define                RRSR_RSC_UPSUBCHNL              0x400000\r
+#define                RRSR_RSC_LOWSUBCHNL             0x200000\r
+#define                RRSR_SHORT                              0x800000\r
+#define                RRSR_1M                                 BIT0\r
+#define                RRSR_2M                                 BIT1 \r
+#define                RRSR_5_5M                               BIT2 \r
+#define                RRSR_11M                                BIT3 \r
+#define                RRSR_6M                                 BIT4 \r
+#define                RRSR_9M                                 BIT5 \r
+#define                RRSR_12M                                BIT6 \r
+#define                RRSR_18M                                BIT7 \r
+#define                RRSR_24M                                BIT8 \r
+#define                RRSR_36M                                BIT9 \r
+#define                RRSR_48M                                BIT10 \r
+#define                RRSR_54M                                BIT11\r
+#define                RRSR_MCS0                               BIT12\r
+#define                RRSR_MCS1                               BIT13\r
+#define                RRSR_MCS2                               BIT14\r
+#define                RRSR_MCS3                               BIT15\r
+#define                RRSR_MCS4                               BIT16\r
+#define                RRSR_MCS5                               BIT17\r
+#define                RRSR_MCS6                               BIT18\r
+#define                RRSR_MCS7                               BIT19\r
+#define                BRSR_AckShortPmb                BIT23   \r
+\r
+#define                RATR_1M                                 0x00000001\r
+#define                RATR_2M                                 0x00000002\r
+#define                RATR_55M                                0x00000004\r
+#define                RATR_11M                                0x00000008\r
+#define                RATR_6M                                 0x00000010\r
+#define                RATR_9M                                 0x00000020\r
+#define                RATR_12M                                0x00000040\r
+#define                RATR_18M                                0x00000080\r
+#define                RATR_24M                                0x00000100\r
+#define                RATR_36M                                0x00000200\r
+#define                RATR_48M                                0x00000400\r
+#define                RATR_54M                                0x00000800\r
+#define                RATR_MCS0                               0x00001000\r
+#define                RATR_MCS1                               0x00002000\r
+#define                RATR_MCS2                               0x00004000\r
+#define                RATR_MCS3                               0x00008000\r
+#define                RATR_MCS4                               0x00010000\r
+#define                RATR_MCS5                               0x00020000\r
+#define                RATR_MCS6                               0x00040000\r
+#define                RATR_MCS7                               0x00080000\r
+#define                RATR_MCS8                               0x00100000\r
+#define                RATR_MCS9                               0x00200000\r
+#define                RATR_MCS10                              0x00400000\r
+#define                RATR_MCS11                              0x00800000\r
+#define                RATR_MCS12                              0x01000000\r
+#define                RATR_MCS13                              0x02000000\r
+#define                RATR_MCS14                              0x04000000\r
+#define                RATR_MCS15                              0x08000000\r
+#define        RATE_ALL_CCK                            RATR_1M|RATR_2M|RATR_55M|RATR_11M \r
+#define        RATE_ALL_OFDM_AG                        RATR_6M|RATR_9M|RATR_12M|RATR_18M|RATR_24M|\\r
+                                                                       RATR_36M|RATR_48M|RATR_54M      \r
+#define        RATE_ALL_OFDM_1SS                       RATR_MCS0|RATR_MCS1|RATR_MCS2|RATR_MCS3 |\\r
+                                                                       RATR_MCS4|RATR_MCS5|RATR_MCS6   |RATR_MCS7      \r
+#define        RATE_ALL_OFDM_2SS                       RATR_MCS8|RATR_MCS9     |RATR_MCS10|RATR_MCS11|\\r
+                                                                       RATR_MCS12|RATR_MCS13|RATR_MCS14|RATR_MCS15\r
+                                                                       \r
+#define                AC_PARAM_TXOP_LIMIT_OFFSET              16\r
+#define                AC_PARAM_ECW_MAX_OFFSET                 12\r
+#define                AC_PARAM_ECW_MIN_OFFSET                 8\r
+#define                AC_PARAM_AIFS_OFFSET                    0\r
+\r
+#define                AcmHw_HwEn                              BIT0\r
+#define                AcmHw_BeqEn                             BIT1\r
+#define                AcmHw_ViqEn                             BIT2\r
+#define                AcmHw_VoqEn                             BIT3\r
+#define                AcmHw_BeqStatus                 BIT4\r
+#define                AcmHw_ViqStatus                 BIT5\r
+#define                AcmHw_VoqStatus                 BIT6\r
+\r
+#define                RETRY_LIMIT_SHORT_SHIFT 8\r
+#define                RETRY_LIMIT_LONG_SHIFT  0\r
+\r
+#define                NAV_UPPER_EN                    BIT16\r
+#define                NAV_UPPER                               0xFF00\r
+#define                NAV_RTSRST                              0xFF\r
+#define                BW_OPMODE_20MHZ                 BIT2\r
+#define                BW_OPMODE_5G                    BIT1\r
+#define                BW_OPMODE_11J                   BIT0\r
+\r
+#define                RXERR_RPT_RST                   BIT27 
+#define                RXERR_OFDM_PPDU                 0\r
+#define                RXERR_OFDM_FALSE_ALARM  1\r
+#define                RXERR_OFDM_MPDU_OK              2\r
+#define                RXERR_OFDM_MPDU_FAIL    3\r
+#define                RXERR_CCK_PPDU                  4\r
+#define                RXERR_CCK_FALSE_ALARM   5\r
+#define                RXERR_CCK_MPDU_OK               6\r
+#define                RXERR_CCK_MPDU_FAIL             7\r
+#define                RXERR_HT_PPDU                   8\r
+#define                RXERR_HT_FALSE_ALARM    9\r
+#define                RXERR_HT_MPDU_TOTAL             10\r
+#define                RXERR_HT_MPDU_OK                11\r
+#define                RXERR_HT_MPDU_FAIL              12\r
+#define                RXERR_RX_FULL_DROP              15\r
+\r
+\r
+#define                CAM_CM_SecCAMPolling    BIT31           
+#define                CAM_CM_SecCAMClr                BIT30           
+#define                CAM_CM_SecCAMWE                 BIT16           
+#define                CAM_ADDR                                0xFF            
+\r
+#define                Dbg_CAM_TXSecCAMInfo    BIT31           
+#define                Dbg_CAM_SecKeyFound             BIT30           
+\r
+\r
+#define                SCR_TxUseDK                             BIT0                    
+#define                SCR_RxUseDK                             BIT1                    
+#define                SCR_TxEncEnable                 BIT2                    
+#define                SCR_RxDecEnable                 BIT3                    
+#define                SCR_SKByA2                              BIT4                    
+#define                SCR_NoSKMC                              BIT5                    
+#define                CAM_VALID                               BIT15\r
+#define                CAM_NOTVALID                    0x0000\r
+#define                CAM_USEDK                               BIT5\r
+                               \r
+#define                CAM_NONE                                0x0\r
+#define                CAM_WEP40                               0x01\r
+#define                CAM_TKIP                                0x02\r
+#define                CAM_AES                                 0x04\r
+#define                CAM_WEP104                              0x05\r
+                       \r
+#define                TOTAL_CAM_ENTRY                 32\r
+#define                HALF_CAM_ENTRY                          16\r
+                       \r
+#define                CAM_CONFIG_USEDK                true\r
+#define                CAM_CONFIG_NO_USEDK             false\r
+                       \r
+#define                CAM_WRITE                               BIT16\r
+#define                CAM_READ                                0x00000000\r
+#define                CAM_POLLINIG                    BIT31\r
+                       \r
+#define                SCR_UseDK                               0x01\r
+#define                SCR_TxSecEnable         0x02\r
+#define                SCR_RxSecEnable         0x04\r
+\r
+#define                WOW_PMEN                                BIT0 
+#define                WOW_WOMEN                       BIT1 
+#define                WOW_MAGIC                               BIT2 
+#define                WOW_UWF                         BIT3 
+\r
+#define                GPIOMUX_EN                      BIT3 
+#define                GPIOSEL_GPIO            0       
+#define                GPIOSEL_PHYDBG          1       
+#define                GPIOSEL_BT                      2       
+#define                GPIOSEL_WLANDBG         3       
+#define                GPIOSEL_GPIO_MASK       ~(BIT0|BIT1)\r
+\r
+#define                HST_RDBUSY                              BIT0\r
+#define                CPU_WTBUSY                      BIT1\r
+\r
+#define                IMR8190_DISABLED        0x0\r
+#define                IMR_CPUERR                      BIT5            
+#define                IMR_ATIMEND                     BIT4            
+#define                IMR_TBDOK                       BIT3            
+#define                IMR_TBDER                       BIT2            
+#define                IMR_BCNDMAINT8          BIT1            
+#define                IMR_BCNDMAINT7          BIT0            
+#define                IMR_BCNDMAINT6          BIT31           
+#define                IMR_BCNDMAINT5          BIT30           
+#define                IMR_BCNDMAINT4          BIT29           
+#define                IMR_BCNDMAINT3          BIT28           
+#define                IMR_BCNDMAINT2          BIT27           
+#define                IMR_BCNDMAINT1          BIT26           
+#define                IMR_BCNDOK8                     BIT25           
+#define                IMR_BCNDOK7                     BIT24           
+#define                IMR_BCNDOK6                     BIT23           
+#define                IMR_BCNDOK5                     BIT22           
+#define                IMR_BCNDOK4                     BIT21           
+#define                IMR_BCNDOK3                     BIT20           
+#define                IMR_BCNDOK2                     BIT19           
+#define                IMR_BCNDOK1                     BIT18           
+#define                IMR_TIMEOUT2            BIT17           
+#define                IMR_TIMEOUT1            BIT16           
+#define                IMR_TXFOVW                      BIT15           
+#define                IMR_PSTIMEOUT           BIT14           
+#define                IMR_BcnInt                      BIT13           
+#define                IMR_RXFOVW                      BIT12           
+#define                IMR_RDU                         BIT11           
+#define                IMR_RXCMDOK                     BIT10           
+#define                IMR_BDOK                        BIT9            
+#define                IMR_HIGHDOK                     BIT8            
+#define                IMR_COMDOK                      BIT7            
+#define                IMR_MGNTDOK                     BIT6            
+#define                IMR_HCCADOK                     BIT5            
+#define                IMR_BKDOK                       BIT4            
+#define                IMR_BEDOK                       BIT3            
+#define                IMR_VIDOK                       BIT2            
+#define                IMR_VODOK                       BIT1            
+#define                IMR_ROK                         BIT0            
+\r
+\r
+#define                TPPoll_BKQ                      BIT0                    
+#define                TPPoll_BEQ                      BIT1                    
+#define                TPPoll_VIQ                      BIT2                    
+#define                TPPoll_VOQ                      BIT3                    
+#define                TPPoll_BQ                       BIT4                    
+#define                TPPoll_CQ                       BIT5                    
+#define                TPPoll_MQ                       BIT6                    
+#define                TPPoll_HQ                       BIT7                    
+#define                TPPoll_HCCAQ            BIT8                    
+#define                TPPoll_StopBK           BIT9                    
+#define                TPPoll_StopBE           BIT10                   
+#define                TPPoll_StopVI           BIT11                   
+#define                TPPoll_StopVO           BIT12                   
+#define                TPPoll_StopMgt          BIT13                   
+#define                TPPoll_StopHigh         BIT14                   
+#define                TPPoll_StopHCCA         BIT15                   
+#define                TPPoll_SHIFT            8                               
+\r
+#define                MXDMA2_16bytes          0x000\r
+#define                MXDMA2_32bytes          0x001\r
+#define                MXDMA2_64bytes          0x010\r
+#define                MXDMA2_128bytes         0x011\r
+#define                MXDMA2_256bytes         0x100\r
+#define                MXDMA2_512bytes         0x101\r
+#define                MXDMA2_1024bytes        0x110\r
+#define                MXDMA2_NoLimit          0x7\r
+                       \r
+#define                MULRW_SHIFT                     3\r
+#define                MXDMA2_RX_SHIFT         4\r
+#define                MXDMA2_TX_SHIFT         0\r
+\r
+#define                CCX_CMD_CLM_ENABLE                              BIT0    
+#define                CCX_CMD_NHM_ENABLE                              BIT1    
+#define                CCX_CMD_FUNCTION_ENABLE                 BIT8    \r
+#define                CCX_CMD_IGNORE_CCA                              BIT9    \r
+#define                CCX_CMD_IGNORE_TXON                             BIT10   \r
+#define                CCX_CLM_RESULT_READY                    BIT16   \r
+#define                CCX_NHM_RESULT_READY                    BIT16   \r
+#define                CCX_CMD_RESET                                   0x0             \r
+\r
+\r
+#define                HWSET_MAX_SIZE_92S                              128\r
+\r
+\r
+\r
+#ifdef RTL8192SE \r
+#define        RTL8190_EEPROM_ID               0x8129  
+#define        EEPROM_HPON                     0x02 
+#define        EEPROM_CLK                      0x06 
+#define        EEPROM_TESTR                    0x08 
+\r
+#define        EEPROM_VID                      0x0A 
+#define        EEPROM_DID                      0x0C 
+#define        EEPROM_SVID                     0x0E 
+#define        EEPROM_SMID                     0x10 
+\r
+#define        EEPROM_MAC_ADDR                 0x12 
+#define        EEPROM_NODE_ADDRESS_BYTE_0      0x12 
+\r
+#define        EEPROM_PwDiff                   0x54 
+\r
+#define        EEPROM_TxPowerBase                      0x50 
+#define                EEPROM_TX_PWR_INDEX_RANGE       28              
+\r
+#define        EEPROM_TX_PWR_HT20_DIFF         0x62
+#define        DEFAULT_HT20_TXPWR_DIFF         2       
+#define        EEPROM_TX_PWR_OFDM_DIFF         0x65
+\r
+#define        EEPROM_TxPWRGroup                       0x67
+#define        EEPROM_Regulatory                               0x6D
+\r
+#define        TX_PWR_SAFETY_CHK               0x6D
+#define        EEPROM_TxPwIndex_CCK_24G        0x5D 
+#define        EEPROM_TxPwIndex_OFDM_24G       0x6B 
+#define        EEPROM_HT2T_CH1_A               0x6c 
+#define        EEPROM_HT2T_CH7_A               0x6d 
+#define        EEPROM_HT2T_CH13_A              0x6e 
+#define        EEPROM_HT2T_CH1_B               0x6f 
+#define        EEPROM_HT2T_CH7_B               0x70 
+#define        EEPROM_HT2T_CH13_B              0x71 
+#define        EEPROM_TSSI_A                   0x74 
+#define        EEPROM_TSSI_B                   0x75 
+#define                EEPROM_RFInd_PowerDiff                  0x76\r
+#define                EEPROM_Default_LegacyHTTxPowerDiff      0x3\r
+#define        EEPROM_ThermalMeter                     0x77 
+#define                EEPROM_BLUETOOTH_COEXIST                0x78 
+#define                EEPROM_BLUETOOTH_TYPE           0x4f 
+\r
+#define        EEPROM_Optional 0x78 
+#ifdef RTL8192S_WAPI_SUPPORT\r
+#define                EEPROM_WAPI_SUPPORT                     0x78\r
+#endif\r
+#define                EEPROM_WoWLAN                           0x78 
+\r
+#define        EEPROM_CrystalCap                       0x79 
+#define        EEPROM_ChannelPlan                      0x7B 
+#define        EEPROM_Version                          0x7C 
+#define                EEPROM_CustomID                         0x7A\r
+#define        EEPROM_BoardType                        0x7E \r
+\r
+#define                EEPROM_Default_TSSI                     0x0\r
+#define        EEPROM_Default_TxPowerDiff              0x0\r
+#define        EEPROM_Default_CrystalCap               0x5\r
+#define        EEPROM_Default_BoardType                0x02 
+#define        EEPROM_Default_TxPower                  0x1010\r
+#define                EEPROM_Default_HT2T_TxPwr               0x10\r
+\r
+#define                EEPROM_Default_LegacyHTTxPowerDiff      0x3\r
+#define                EEPROM_Default_ThermalMeter             0x12\r
+#define                EEPROM_Default_BlueToothCoexist         0x0\r
+#define                EEPROM_Default_BlueToothAntNum  0x0\r
+#define                EEPROM_Default_BlueToothAntIso          0x0\r
+#define                EEPROM_Default_BlueToothType            0x0\r
+#define                EEPROM_Default_AntTxPowerDiff           0x0\r
+#define                EEPROM_Default_TxPwDiff_CrystalCap      0x5\r
+#define                EEPROM_Default_TxPowerLevel             0x22\r
+\r
+#define                EEPROM_CHANNEL_PLAN_FCC                 0x0\r
+#define                EEPROM_CHANNEL_PLAN_IC                  0x1\r
+#define                EEPROM_CHANNEL_PLAN_ETSI                0x2\r
+#define                EEPROM_CHANNEL_PLAN_SPAIN               0x3\r
+#define                EEPROM_CHANNEL_PLAN_FRANCE              0x4\r
+#define                EEPROM_CHANNEL_PLAN_MKK                 0x5\r
+#define                EEPROM_CHANNEL_PLAN_MKK1                0x6\r
+#define                EEPROM_CHANNEL_PLAN_ISRAEL              0x7\r
+#define                EEPROM_CHANNEL_PLAN_TELEC               0x8\r
+#define                EEPROM_CHANNEL_PLAN_GLOBAL_DOMAIN       0x9\r
+#define                EEPROM_CHANNEL_PLAN_WORLD_WIDE_13       0xA\r
+#define                EEPROM_CHANNEL_PLAN_NCC                         0xB\r
+#define                EEPROM_CHANNEL_PLAN_BY_HW_MASK  0x80\r
+\r
+\r
+#define        EEPROM_CID_DEFAULT              0x0\r
+#define        EEPROM_CID_TOSHIBA              0x4\r
+#define        EEPROM_CID_CCX                          0x10 
+#define        EEPROM_CID_QMI                          0x0D\r
+#define        EEPROM_CID_WHQL                         0xFE 
+\r
+#else 
+#define        RTL8190_EEPROM_ID               0x8129\r
+#define        EEPROM_HPON                     0x02 
+#define        EEPROM_VID                      0x08 
+#define        EEPROM_PID                      0x0A 
+#define        EEPROM_USB_OPTIONAL             0x0C 
+#define        EEPROM_USB_PHY_PARA1            0x0D 
+#define        EEPROM_NODE_ADDRESS_BYTE_0      0x12 
+#define        EEPROM_Version                  0x50    \r
+#define        EEPROM_ChannelPlan              0x51 
+#define                EEPROM_CustomID                 0x52\r
+#define        EEPROM_SubCustomID              0x53 
+\r
+#if (EEPROM_OLD_FORMAT_SUPPORT ==1)\r
+#define        EEPROM_PwDiff           0x54 
+#define        EEPROM_ThermalMeter             0x55 
+#define        EEPROM_Reserved                 0x56 
+#define        EEPROM_CrystalCap               0x57 
+#define        EEPROM_TxPowerBase              0x58 
+#define        EEPROM_TxPwIndex_CCK_24G        0x59 
+#define        EEPROM_TxPwIndex_OFDM_24G       0x67 
+#define        EEPROM_TSSI_A                   0x75 
+#define        EEPROM_TSSI_B                   0x76 
+#define        EEPROM_TxPwTkMode               0x77 
+#define        EEPROM_HT2T_CH1_A               0x78 
+#define        EEPROM_HT2T_CH7_A               0x79 
+#define        EEPROM_HT2T_CH13_A              0x7a 
+#define        EEPROM_HT2T_CH1_B               0x7b 
+#define        EEPROM_HT2T_CH7_B               0x7c 
+#define        EEPROM_HT2T_CH13_B              0x7d 
+#define        EEPROM_BoardType                0x7e 
+#else\r
+#define        EEPROM_BoardType                        0x54 
+#define                EEPROM_TxPwIndex                        0x55 
+#define        EEPROM_PwDiff                           0x67 
+#define        EEPROM_ThermalMeter                     0x68 
+#define        EEPROM_CrystalCap                       0x69 
+#define        EEPROM_TxPowerBase                      0x6a 
+#define        EEPROM_TSSI_A                           0x6b 
+#define        EEPROM_TSSI_B                           0x6c 
+#define        EEPROM_TxPwTkMode                       0x6d 
+\r
+#define        EEPROM_TX_PWR_HT20_DIFF                 0x6e
+#define        DEFAULT_HT20_TXPWR_DIFF                 2
+#define        EEPROM_TX_PWR_OFDM_DIFF                 0x71
+#define        TX_PWR_SAFETY_CHK                       0x79
+#endif\r
+#define                EEPROM_USB_Default_OPTIONAL_FUNC        0x8\r
+#define                EEPROM_USB_Default_PHY_PARAM            0x0\r
+#define                EEPROM_Default_TSSI                     0x0\r
+#define                EEPROM_Default_TxPwrTkMode              0x0\r
+#define        EEPROM_Default_TxPowerDiff              0x0\r
+#define        EEPROM_Default_TxPowerBase              0x0\r
+#define        EEPROM_Default_ThermalMeter             0x7\r
+#define        EEPROM_Default_PwDiff                   0x4\r
+#define        EEPROM_Default_CrystalCap               0x5\r
+#define        EEPROM_Default_TxPower                  0x1010\r
+#define        EEPROM_Default_BoardType                0x02 
+#define                EEPROM_Default_HT2T_TxPwr                       0x10\r
+#define                EEPROM_USB_SN                                   BIT0\r
+#define                EEPROM_USB_REMOTE_WAKEUP        BIT1\r
+#define                EEPROM_USB_DEVICE_PWR           BIT2\r
+#define                EEPROM_EP_NUMBER                                (BIT3|BIT4)\r
+\r
+\r
+#define                EEPROM_CHANNEL_PLAN_FCC                         0x0\r
+#define                EEPROM_CHANNEL_PLAN_IC                          0x1\r
+#define                EEPROM_CHANNEL_PLAN_ETSI                        0x2\r
+#define                EEPROM_CHANNEL_PLAN_SPAIN                       0x3\r
+#define                EEPROM_CHANNEL_PLAN_FRANCE                      0x4\r
+#define                EEPROM_CHANNEL_PLAN_MKK                         0x5\r
+#define                EEPROM_CHANNEL_PLAN_MKK1                        0x6\r
+#define                EEPROM_CHANNEL_PLAN_ISRAEL                      0x7\r
+#define                EEPROM_CHANNEL_PLAN_TELEC                       0x8\r
+#define                EEPROM_CHANNEL_PLAN_GLOBAL_DOMAIN       0x9\r
+#define                EEPROM_CHANNEL_PLAN_WORLD_WIDE_13       0xA\r
+#define                EEPROM_CHANNEL_PLAN_BY_HW_MASK  0x80\r
+\r
+#define        EEPROM_CID_DEFAULT                              0x0\r
+#define        EEPROM_CID_ALPHA                                0x1\r
+#define        EEPROM_CID_TOSHIBA                              0x4\r
+#define        EEPROM_CID_WHQL                                 0xFE 
+#endif\r
+\r
+\r
+#define                FW_DIG_DISABLE                          0xfd00cc00\r
+#define                FW_DIG_ENABLE                                   0xfd000000\r
+#define                FW_DIG_HALT                                     0xfd000001\r
+#define                FW_DIG_RESUME                                   0xfd000002\r
+#define                FW_HIGH_PWR_DISABLE                     0xfd000008\r
+#define                FW_HIGH_PWR_ENABLE                      0xfd000009\r
+#define                FW_ADD_A2_ENTRY                         0xfd000016\r
+#define                FW_TXPWR_TRACK_ENABLE           0xfd000017\r
+#define                FW_TXPWR_TRACK_DISABLE          0xfd000018\r
+#define                FW_TXPWR_TRACK_THERMAL          0xfd000019\r
+#define                FW_TXANT_SWITCH_ENABLE          0xfd000023\r
+#define                FW_TXANT_SWITCH_DISABLE         0xfd000024\r
+#define                FW_RA_INIT                                              0xfd000026 
+#define                FW_CTRL_DM_BY_DRIVER                    0Xfd00002a 
+#define                FW_RA_IOT_BG_COMB                       0xfd000030 
+#define                FW_RA_IOT_N_COMB                                0xfd000031 
+#define                FW_RA_REFRESH                                   0xfd0000a0\r
+#define                FW_RA_UPDATE_MASK                               0xfd0000a2\r
+#define                FW_RA_DISABLE                                   0xfd0000a4 
+#define                FW_RA_ACTIVE                                    0xfd0000a6\r
+#define                FW_RA_DISABLE_RSSI_MASK         0xfd0000ac 
+#define                FW_RA_ENABLE_RSSI_MASK          0xfd0000ad 
+#define                FW_RA_RESET                                     0xfd0000af\r
+#define                FW_DM_DISABLE                                   0xfd00aa00\r
+#define                FW_IQK_ENABLE                                   0xf0000020\r
+#define                FW_IQK_SUCCESS                          0x0000dddd\r
+#define                FW_IQK_FAIL                                     0x0000ffff\r
+#define                FW_OP_FAILURE                                   0xffffffff\r
+#define                FW_TX_FEEDBACK_NONE                     0xfb000000                                      
+#define                FW_TX_FEEDBACK_DTM_ENABLE       (FW_TX_FEEDBACK_NONE | 0x1)     
+#define                FW_TX_FEEDBACK_CCX_ENABLE       (FW_TX_FEEDBACK_NONE | 0x2) 
+#define                FW_BB_RESET_ENABLE                      0xff00000d\r
+#define                FW_BB_RESET_DISABLE                     0xff00000e\r
+#define                FW_LPS_ENTER                                    0xfe000010\r
+#define                FW_LPS_LEAVE                                    0xfe000011\r
+#define                FW_INDIRECT_READ                                0xf2000000\r
+#define                FW_INDIRECT_WRITE                               0xf2000001\r
+#define                FW_CHAN_SET                                     0xf3000001 
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+#define RFPC                                   0x5F                    
+#define RCR_9356SEL                    BIT6\r
+#define TCR_LRL_OFFSET         0\r
+#define TCR_SRL_OFFSET         8\r
+#define TCR_MXDMA_OFFSET       21\r
+#define TCR_SAT                                BIT24           
+#define RCR_MXDMA_OFFSET       8\r
+#define RCR_FIFO_OFFSET                13\r
+#define RCR_OnlyErlPkt         BIT31                           
+#define CWR                                    0xDC                    
+#define RetryCTR                               0xDE                    
+\r
+\r
+#define                LED1Cfg                         UnusedRegister  
+#define        LED0Cfg                         UnusedRegister  
+#define        GPI                                     UnusedRegister  
+#define        BRSR                            UnusedRegister  
+#define        CPU_GEN                         UnusedRegister  
+#define        SIFS                            UnusedRegister  
+\r
+#define        CPU_GEN_SYSTEM_RESET            0x00000001\r
+\r
+\r
+\r
+\r
+#define                CCX_COMMAND_REG                 0x890   \r
+#define                CLM_PERIOD_REG                  0x894   \r
+#define                NHM_PERIOD_REG                  0x896   \r
+#define                NHM_THRESHOLD0                  0x898   
+#define                NHM_THRESHOLD1                  0x899   
+#define                NHM_THRESHOLD2                  0x89A   
+#define                NHM_THRESHOLD3                  0x89B   
+#define                NHM_THRESHOLD4                  0x89C   
+#define                NHM_THRESHOLD5                  0x89D   
+#define                NHM_THRESHOLD6                  0x89E   
+#define                CLM_RESULT_REG                  0x8D0   \r
+#define                NHM_RESULT_REG                  0x8D4   \r
+#define                NHM_RPI_COUNTER0                0x8D8   \r
+#define                NHM_RPI_COUNTER1                0x8D9   \r
+#define                NHM_RPI_COUNTER2                0x8DA         \r
+#define                NHM_RPI_COUNTER3                0x8DB         \r
+#define                NHM_RPI_COUNTER4                0x8DC         \r
+#define                NHM_RPI_COUNTER5                0x8DD         \r
+#define                NHM_RPI_COUNTER6                0x8DE         \r
+#define                NHM_RPI_COUNTER7                0x8DF         \r
+\r
+\r
+#define                HAL_8192S_HW_GPIO_OFF_BIT       BIT3\r
+#define                HAL_8192S_HW_GPIO_OFF_MASK      0xF7\r
+#define                HAL_8192S_HW_GPIO_WPS_BIT       BIT4\r
+\r
+#endif 
+\r
diff --git a/ubuntu/rtl8192se/rtl8192s/r8192S_hwimg.c b/ubuntu/rtl8192se/rtl8192s/r8192S_hwimg.c
new file mode 100644 (file)
index 0000000..c7bab99
--- /dev/null
@@ -0,0 +1,6398 @@
+/******************************************************************************\r
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ * The full GNU General Public License is included in this distribution in the\r
+ * file called LICENSE.\r
+ *\r
+ * Contact Information:\r
+ * wlanfae <wlanfae@realtek.com>\r
+******************************************************************************/\r
+/*Created on  2009/11/17, 16:15*/\r
+\r
+#ifdef RTL8192SE\r
+#include "r8192S_hwimg.h"\r
+\r
+u8 Rtl8192SEFwImgArray[ImgArrayLength] = {\r
+0x92,0x81,0x4a,0x70,0x30,0x00,0x00,0x00,0x08,0xa4,0x00,0x00,0x88,0xb5,0x00,0x00,\r
+0x30,0x00,0x00,0x00,0x00,0xb4,0x00,0x00,0x4a,0x00,0x00,0x00,0x11,0x17,0x13,0x29,\r
+0x92,0x81,0x01,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x7f,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x1f,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x25,0xb0,0x1a,0x3c,0x80,0x03,0x5a,0x37,0x00,0x80,0x1b,0x3c,0x80,0x00,0x7b,0x37,\r
+0x00,0x00,0x5b,0xaf,0x25,0xb0,0x1a,0x3c,0x18,0x03,0x5a,0x37,0x00,0x80,0x1b,0x3c,\r
+0x80,0x00,0x7b,0x37,0x00,0x00,0x5b,0xaf,0x01,0x80,0x1a,0x3c,0x10,0x9d,0x5a,0x27,\r
+0x08,0x00,0x40,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x04,0x00,0xa1,0xaf,0x08,0x00,0xa2,0xaf,0x0c,0x00,0xa3,0xaf,0x10,0x00,0xa4,0xaf,\r
+0x14,0x00,0xa5,0xaf,0x18,0x00,0xa6,0xaf,0x1c,0x00,0xa7,0xaf,0x20,0x00,0xa8,0xaf,\r
+0x24,0x00,0xa9,0xaf,0x28,0x00,0xaa,0xaf,0x2c,0x00,0xab,0xaf,0x30,0x00,0xac,0xaf,\r
+0x34,0x00,0xad,0xaf,0x38,0x00,0xae,0xaf,0x3c,0x00,0xaf,0xaf,0x12,0x40,0x00,0x00,\r
+0x10,0x48,0x00,0x00,0x00,0x70,0x0a,0x40,0x40,0x00,0xb0,0xaf,0x44,0x00,0xb1,0xaf,\r
+0x48,0x00,0xb2,0xaf,0x4c,0x00,0xb3,0xaf,0x50,0x00,0xb4,0xaf,0x54,0x00,0xb5,0xaf,\r
+0x58,0x00,0xb6,0xaf,0x5c,0x00,0xb7,0xaf,0x60,0x00,0xb8,0xaf,0x64,0x00,0xb9,0xaf,\r
+0x68,0x00,0xbc,0xaf,0x6c,0x00,0xbd,0xaf,0x70,0x00,0xbe,0xaf,0x74,0x00,0xbf,0xaf,\r
+0x78,0x00,0xa8,0xaf,0x7c,0x00,0xa9,0xaf,0x80,0x00,0xaa,0xaf,0xda,0x26,0x00,0x08,\r
+0x21,0x20,0xa0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0xff,0xff,0x88,0x30,0x80,0x28,0x08,0x00,0x2a,0xb0,0x0a,0x3c,0x21,0x38,0xaa,0x00,\r
+0x0c,0x00,0xe6,0x8c,0x02,0x80,0x03,0x3c,0xcc,0x3f,0x63,0x24,0x25,0xb0,0x02,0x3c,\r
+0xb0,0x03,0x42,0x34,0x21,0x28,0xa3,0x00,0xff,0x00,0xc4,0x30,0xff,0x00,0x09,0x24,\r
+0x00,0x00,0x45,0xac,0x00,0x00,0x43,0xac,0x05,0x00,0x89,0x10,0x00,0x00,0x00,0x00,\r
+0x00,0x80,0xc2,0x30,0x04,0x00,0x40,0x10,0x00,0x80,0x02,0x3c,0x0c,0x00,0xe2,0xac,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0xc0,0x00,0x00,0xff,0x02,0x3c,0x24,0x10,0xc2,0x00,\r
+0xfb,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0x21,0x20,0x0a,0x01,0x40,0x00,0x82,0x90,\r
+0x00,0x00,0x00,0x00,0xff,0x00,0x43,0x30,0x12,0x00,0x69,0x10,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0xa3,0xa0,0x40,0x00,0x83,0x90,0x00,0x00,0xa6,0x90,0xff,0x00,0x63,0x30,\r
+0xff,0x00,0xc2,0x30,0xfa,0xff,0x62,0x14,0x00,0x00,0x00,0x00,0x20,0xb0,0x03,0x3c,\r
+0x00,0x12,0x02,0x00,0x21,0x10,0x43,0x00,0x0c,0x00,0x46,0x8c,0x25,0xb0,0x03,0x3c,\r
+0xb0,0x03,0x63,0x34,0x21,0x10,0xc0,0x00,0x00,0x00,0x66,0xac,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0xa6,0x90,0xe7,0x00,0x00,0x08,0xff,0x00,0xc2,0x30,\r
+0xff,0xff,0x84,0x30,0x80,0x20,0x04,0x00,0x2a,0xb0,0x02,0x3c,0x21,0x48,0x82,0x00,\r
+0x00,0x00,0x25,0x8d,0x02,0x80,0x02,0x3c,0xec,0x3f,0x42,0x24,0x21,0x40,0x82,0x00,\r
+0x25,0xb0,0x03,0x3c,0x02,0x80,0x02,0x3c,0xb0,0x03,0x67,0x34,0xcc,0x3f,0x42,0x24,\r
+0xff,0x00,0xa4,0x30,0xff,0x00,0x03,0x24,0x00,0x00,0xe8,0xac,0x00,0x80,0xa6,0x30,\r
+0x00,0x00,0xe2,0xac,0x06,0x00,0x83,0x10,0x00,0x00,0x00,0x00,0x00,0xff,0x02,0x3c,\r
+0x05,0x00,0xc0,0x10,0x24,0x10,0xa2,0x00,0x00,0x80,0x02,0x3c,0x00,0x00,0x22,0xad,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0xa0,0x00,0xfd,0xff,0x40,0x10,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x03,0x91,0x20,0xb0,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,\r
+0x0c,0x00,0x65,0x8c,0x00,0x00,0x00,0x00,0x21,0x10,0xa0,0x00,0x00,0x00,0xe5,0xac,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x25,0xb0,0x05,0x3c,0x00,0x80,0x02,0x3c,\r
+0xe0,0xff,0xbd,0x27,0x18,0x03,0xa3,0x34,0x68,0x04,0x42,0x24,0x18,0x00,0xbf,0xaf,\r
+0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x00,0x00,0x62,0xac,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x42,0xb0,0x02,0x3c,0x03,0x00,0x46,0x34,\r
+0x00,0x00,0xc3,0x90,0x00,0x00,0x00,0x00,0xff,0x00,0x70,0x30,0x10,0x00,0x02,0x32,\r
+0x18,0x00,0x40,0x10,0x02,0x80,0x11,0x3c,0x78,0x1b,0x27,0x26,0xec,0x23,0xe4,0x94,\r
+0x10,0x00,0x02,0x24,0x00,0x00,0xc2,0xa0,0x08,0x00,0x80,0x10,0x1c,0x03,0xa3,0x34,\r
+0xf0,0x23,0xe2,0x94,0xb0,0x03,0xa4,0x34,0x00,0x00,0x62,0xa0,0x00,0x00,0x80,0xac,\r
+0xec,0x23,0xe0,0xa4,0xf0,0x23,0xe0,0xa4,0x00,0x00,0x04,0x24,0x02,0x80,0x05,0x3c,\r
+0x02,0x80,0x06,0x3c,0x8c,0x43,0xa2,0x8c,0xbc,0x44,0xc3,0x8c,0x01,0x00,0x84,0x24,\r
+0x01,0x00,0x42,0x24,0x01,0x00,0x63,0x24,0xec,0x23,0xe4,0xa4,0x8c,0x43,0xa2,0xac,\r
+0xbc,0x44,0xc3,0xac,0x00,0x16,0x10,0x00,0x03,0x16,0x02,0x00,0x71,0x00,0x40,0x04,\r
+0x42,0xb0,0x02,0x3c,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0x40,0x00,0x02,0x32,0x16,0x00,0x40,0x10,0x78,0x1b,0x24,0x26,\r
+0x42,0xb0,0x03,0x3c,0x40,0x00,0x02,0x24,0x03,0x00,0x63,0x34,0x00,0x00,0x62,0xa0,\r
+0x02,0x80,0x03,0x3c,0xb6,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x1a,0x00,0x40,0x10,\r
+0x02,0x80,0x04,0x3c,0xb6,0x44,0x60,0xa0,0x02,0x80,0x04,0x3c,0xb2,0x44,0x83,0x90,\r
+0xfd,0xff,0x02,0x24,0x24,0x18,0x62,0x00,0xb2,0x44,0x83,0xa0,0xb2,0x44,0x82,0x90,\r
+0x00,0x00,0x00,0x00,0x07,0x00,0x42,0x30,0x2c,0x00,0x40,0x10,0x02,0x80,0x02,0x3c,\r
+0x78,0x1b,0x24,0x26,0x18,0x0b,0x83,0x94,0x14,0x0b,0x85,0x94,0x18,0x00,0xbf,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x80,0x00,0x63,0x30,0x41,0xb0,0x02,0x3c,\r
+0x25,0x18,0x65,0x00,0x08,0x00,0x42,0x34,0x20,0x00,0xbd,0x27,0x00,0x00,0x43,0xa4,\r
+0x08,0x00,0xe0,0x03,0x14,0x0b,0x83,0xa4,0x9e,0x44,0x82,0x90,0x02,0x80,0x05,0x3c,\r
+0x01,0x00,0x42,0x24,0x9e,0x44,0x82,0xa0,0xb2,0x44,0xa3,0x90,0xef,0xff,0x02,0x24,\r
+0x24,0x18,0x62,0x00,0xb2,0x44,0xa3,0xa0,0x9e,0x44,0x82,0x90,0x00,0x00,0x00,0x00,\r
+0x02,0x00,0x42,0x2c,0x24,0x00,0x40,0x14,0x78,0x1b,0x23,0x26,0xe8,0x0a,0x62,0x90,\r
+0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30,0x3d,0x00,0x40,0x10,0x02,0x80,0x02,0x3c,\r
+0x02,0x80,0x03,0x3c,0xb9,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0xdc,0xff,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0xb9,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24,\r
+0xb9,0x44,0x62,0xa0,0x65,0x01,0x00,0x08,0x78,0x1b,0x24,0x26,0xb0,0x44,0x40,0xa0,\r
+0x02,0x80,0x03,0x3c,0x99,0x44,0x64,0x90,0xf9,0x1f,0x00,0x0c,0xff,0x00,0x84,0x30,\r
+0x78,0x1b,0x24,0x26,0x18,0x0b,0x83,0x94,0x14,0x0b,0x85,0x94,0x18,0x00,0xbf,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x80,0x00,0x63,0x30,0x41,0xb0,0x02,0x3c,\r
+0x25,0x18,0x65,0x00,0x08,0x00,0x42,0x34,0x20,0x00,0xbd,0x27,0x00,0x00,0x43,0xa4,\r
+0x08,0x00,0xe0,0x03,0x14,0x0b,0x83,0xa4,0x02,0x80,0x05,0x3c,0x02,0x80,0x03,0x3c,\r
+0xac,0x44,0xa2,0x8c,0xa4,0x44,0x64,0x8c,0x02,0x80,0x03,0x3c,0x21,0x10,0x44,0x00,\r
+0xac,0x44,0xa2,0xac,0xac,0x44,0xa4,0x8c,0x25,0xb0,0x02,0x3c,0xe4,0x02,0x42,0x34,\r
+0x00,0x00,0x44,0xac,0xa0,0x44,0x62,0x94,0x02,0x80,0x05,0x3c,0x99,0x44,0xa4,0x90,\r
+0xff,0xff,0x42,0x30,0x40,0x10,0x02,0x00,0xf6,0xff,0x42,0x24,0x02,0x80,0x03,0x3c,\r
+0xff,0x00,0x84,0x30,0xf9,0x1f,0x00,0x0c,0x88,0x44,0x62,0xac,0x95,0x01,0x00,0x08,\r
+0x78,0x1b,0x24,0x26,0x80,0xff,0x03,0x24,0x03,0x00,0x42,0x34,0x00,0x00,0x43,0xa0,\r
+0x1b,0x16,0x00,0x0c,0x00,0x00,0x00,0x00,0x49,0x01,0x00,0x08,0x00,0x00,0x00,0x00,\r
+0xb9,0x44,0x40,0xa0,0x65,0x01,0x00,0x08,0x78,0x1b,0x24,0x26,0xff,0x00,0x84,0x30,\r
+0x0b,0x00,0x82,0x2c,0xff,0xff,0xe7,0x30,0x10,0x00,0xa8,0x93,0x19,0x00,0x40,0x10,\r
+0x21,0x18,0x00,0x00,0x02,0x80,0x03,0x3c,0x80,0x10,0x04,0x00,0x48,0xaf,0x63,0x24,\r
+0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x8c,0x00,0x00,0x00,0x00,0x08,0x00,0x80,0x00,\r
+0x00,0x00,0x00,0x00,0x43,0xb0,0x02,0x3c,0x78,0x00,0x44,0x34,0x07,0x00,0xe2,0x30,\r
+0x00,0x00,0x85,0xac,0x04,0x00,0x86,0xac,0x04,0x00,0x40,0x18,0x00,0x00,0x00,0x00,\r
+0xf8,0xff,0xe2,0x30,0x08,0x00,0x42,0x24,0xff,0xff,0x47,0x30,0x21,0x10,0xe8,0x00,\r
+0x00,0x80,0x03,0x3c,0x08,0x00,0x82,0xac,0x25,0x10,0x43,0x00,0x08,0x00,0x82,0xac,\r
+0x01,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x43,0xb0,0x02,0x3c,\r
+0xd3,0x01,0x00,0x08,0x6c,0x00,0x44,0x34,0x43,0xb0,0x02,0x3c,0xd3,0x01,0x00,0x08,\r
+0x60,0x00,0x44,0x34,0x43,0xb0,0x02,0x3c,0xd3,0x01,0x00,0x08,0x54,0x00,0x44,0x34,\r
+0x43,0xb0,0x02,0x3c,0xd3,0x01,0x00,0x08,0x48,0x00,0x44,0x34,0x43,0xb0,0x02,0x3c,\r
+0xd3,0x01,0x00,0x08,0x3c,0x00,0x44,0x34,0x43,0xb0,0x02,0x3c,0xd3,0x01,0x00,0x08,\r
+0x30,0x00,0x44,0x34,0x43,0xb0,0x02,0x3c,0xd3,0x01,0x00,0x08,0x24,0x00,0x44,0x34,\r
+0x43,0xb0,0x02,0x3c,0xd3,0x01,0x00,0x08,0x18,0x00,0x44,0x34,0x43,0xb0,0x02,0x3c,\r
+0xd3,0x01,0x00,0x08,0x0c,0x00,0x44,0x34,0xd3,0x01,0x00,0x08,0x43,0xb0,0x04,0x3c,\r
+0x01,0x00,0x02,0x24,0x43,0xb0,0x03,0x3c,0x04,0x20,0x82,0x00,0x88,0x00,0x65,0x34,\r
+0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0xff,0x42,0x30,0x05,0x00,0x43,0x2c,\r
+0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x00,0x00,0xa2,0x94,0x00,0x00,0x00,0x00,\r
+0xff,0xff,0x42,0x30,0x24,0x10,0x44,0x00,0xf5,0xff,0x40,0x1c,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x25,0xb0,0x08,0x3c,0x00,0x80,0x02,0x3c,\r
+0xd0,0xff,0xbd,0x27,0x18,0x03,0x03,0x35,0x48,0x08,0x42,0x24,0x00,0x00,0x62,0xac,\r
+0x28,0x00,0xb4,0xaf,0x20,0x00,0xb2,0xaf,0x18,0x00,0xb0,0xaf,0x2c,0x00,0xbf,0xaf,\r
+0x24,0x00,0xb3,0xaf,0x1c,0x00,0xb1,0xaf,0x08,0x00,0xf3,0x8c,0xff,0x00,0xc6,0x30,\r
+0x00,0x01,0x02,0x24,0x0c,0x00,0xf1,0x84,0x23,0x10,0x46,0x00,0xff,0xff,0xa3,0x30,\r
+0xff,0xff,0x50,0x30,0xff,0x00,0x94,0x30,0xd0,0x03,0x08,0x35,0x21,0x30,0xc5,0x00,\r
+0x21,0x20,0x80,0x02,0x21,0x28,0x60,0x02,0x21,0x38,0x00,0x02,0x02,0x92,0x03,0x00,\r
+0x00,0x00,0x11,0xad,0x00,0x00,0x13,0xad,0x42,0x02,0x00,0x08,0x00,0x00,0x00,0x00,\r
+0x01,0x01,0x23,0x2a,0xff,0xff,0x22,0x32,0x21,0x98,0x70,0x02,0x21,0x20,0x80,0x02,\r
+0x00,0x01,0x10,0x24,0x00,0x02,0x00,0x0c,0x0b,0x80,0x43,0x00,0xc0,0x10,0x12,0x00,\r
+0x28,0xb0,0x03,0x3c,0x21,0x10,0x43,0x00,0x00,0x00,0x45,0x90,0x20,0x10,0x06,0x3c,\r
+0x21,0x20,0x80,0x02,0xff,0x00,0xb2,0x30,0x00,0x12,0x12,0x00,0x21,0x30,0x46,0x00,\r
+0x21,0x28,0x60,0x02,0x21,0x38,0x00,0x02,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,\r
+0x23,0x18,0x30,0x02,0x00,0x8c,0x03,0x00,0x03,0x8c,0x11,0x00,0xe8,0xff,0x20,0x1e,\r
+0x00,0x00,0x00,0x00,0x2c,0x00,0xbf,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,\r
+0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,\r
+0x30,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x18,0x00,0xb0,0xaf,0x1c,0x00,0xbf,0xaf,\r
+0x21,0x38,0x80,0x00,0x02,0x80,0x02,0x3c,0x78,0x1b,0x44,0x24,0x00,0x00,0xe8,0x94,\r
+0x28,0x24,0x83,0x8c,0x21,0x80,0xa0,0x00,0x27,0x10,0x08,0x00,0x2b,0x10,0x62,0x00,\r
+0x03,0x00,0x40,0x10,0x21,0x28,0xc0,0x00,0x21,0x10,0x68,0x00,0x28,0x24,0x82,0xac,\r
+0x04,0x24,0x82,0x8c,0x04,0x00,0xe3,0x8c,0x42,0x10,0x02,0x00,0x01,0x00,0x42,0x30,\r
+0x20,0x00,0x40,0x14,0x1f,0x00,0x64,0x30,0x08,0x00,0xe2,0x8c,0xff,0xe0,0x03,0x3c,\r
+0xff,0xff,0x63,0x34,0x00,0x26,0x04,0x00,0x24,0x10,0x43,0x00,0x25,0x18,0x44,0x00,\r
+0x10,0x00,0xe4,0x8c,0x00,0x00,0x00,0x00,0x1a,0x00,0x80,0x04,0x08,0x00,0xe3,0xac,\r
+0x82,0x11,0x03,0x00,0x01,0x00,0x42,0x30,0x05,0x00,0x40,0x14,0x02,0x00,0x04,0x24,\r
+0xc0,0xff,0x02,0x24,0x24,0x10,0x62,0x00,0x0f,0x00,0x42,0x34,0x08,0x00,0xe2,0xac,\r
+0x21,0x30,0x00,0x02,0x01,0x00,0x02,0x24,0x40,0x00,0x07,0x24,0xc3,0x01,0x00,0x0c,\r
+0x10,0x00,0xa2,0xaf,0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0x00,0x00,0x50,0xac,\r
+0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb0,0x8f,0x02,0x00,0x04,0x24,0x00,0x02,0x00,0x08,\r
+0x20,0x00,0xbd,0x27,0x10,0x00,0xe4,0x8c,0x08,0x00,0xe3,0x8c,0xe9,0xff,0x81,0x04,\r
+0x82,0x11,0x03,0x00,0x14,0x00,0xe2,0x8c,0x00,0x00,0x00,0x00,0x42,0x12,0x02,0x00,\r
+0x3f,0x00,0x42,0x30,0x14,0x00,0x42,0x28,0xe2,0xff,0x40,0x14,0x82,0x11,0x03,0x00,\r
+0x9f,0xff,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x10,0x82,0x00,0x70,0x02,0x00,0x08,\r
+0x10,0x00,0xe2,0xac,0xff,0xff,0x84,0x30,0x2a,0xb0,0x02,0x3c,0x0d,0x00,0x42,0x34,\r
+0x80,0x20,0x04,0x00,0x21,0x20,0x82,0x00,0x04,0x00,0x82,0x24,0xff,0xff,0xa5,0x30,\r
+0x0b,0x20,0x45,0x00,0x01,0x00,0x03,0x24,0x02,0x00,0x02,0x24,0x00,0x00,0x83,0xa0,\r
+0x00,0x00,0x82,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xc0,0xff,0xbd,0x27,\r
+0x02,0x80,0x02,0x3c,0x25,0xb0,0x03,0x3c,0x24,0x00,0xb3,0xaf,0x78,0x1b,0x53,0x24,\r
+0x00,0x80,0x02,0x3c,0x38,0x00,0xbe,0xaf,0x8c,0x0a,0x42,0x24,0xb0,0x03,0x7e,0x34,\r
+0x18,0x03,0x63,0x34,0x2c,0x00,0xb5,0xaf,0x3c,0x00,0xbf,0xaf,0x34,0x00,0xb7,0xaf,\r
+0x30,0x00,0xb6,0xaf,0x28,0x00,0xb4,0xaf,0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,\r
+0x18,0x00,0xb0,0xaf,0x00,0x00,0x62,0xac,0x21,0xa8,0x60,0x02,0xc0,0x24,0x62,0x8e,\r
+0x2c,0x25,0x72,0x8e,0x21,0x20,0x00,0x00,0x00,0x00,0xc2,0xaf,0xc4,0x24,0x62,0xae,\r
+0x00,0x00,0xd2,0xaf,0x00,0x02,0x00,0x0c,0x21,0xa0,0xa0,0x02,0x2c,0x25,0x64,0x8e,\r
+0x30,0x25,0x63,0x8e,0x40,0x00,0x84,0x24,0x7f,0x00,0x62,0x24,0x2b,0x10,0x44,0x00,\r
+0x0a,0x18,0x82,0x00,0x02,0x80,0x02,0x3c,0x2c,0x25,0x63,0xae,0x74,0xaf,0x42,0x24,\r
+0x2c,0x25,0xa5,0x8e,0x00,0x00,0x44,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x85,0xac,\r
+0x02,0x80,0x02,0x3c,0xff,0xff,0x43,0x32,0x25,0x80,0x62,0x00,0x00,0x00,0x90,0xac,\r
+0x0c,0x00,0x02,0x92,0xff,0x00,0x16,0x24,0x01,0x00,0x17,0x24,0x00,0x00,0x82,0xac,\r
+0x0c,0x00,0x11,0x92,0x20,0x10,0x02,0x3c,0x21,0x20,0x00,0x00,0x00,0x1a,0x11,0x00,\r
+0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00,0x05,0x00,0x36,0x12,0x40,0x00,0x07,0x24,\r
+0xc0,0x24,0xa3,0xae,0x74,0x24,0xb1,0xa2,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,\r
+0x00,0x00,0x02,0x96,0x24,0x24,0x83,0x8e,0x21,0x28,0x40,0x02,0x27,0x30,0x02,0x00,\r
+0x21,0x10,0x62,0x00,0x2b,0x18,0x66,0x00,0x21,0x20,0x00,0x00,0x02,0x00,0x60,0x10,\r
+0x40,0x00,0x07,0x24,0x24,0x24,0x82,0xae,0x04,0x00,0x06,0x8e,0x08,0x00,0x03,0x8e,\r
+0xff,0xe0,0x02,0x3c,0xff,0xff,0x42,0x34,0x1f,0x00,0xc6,0x30,0x24,0x18,0x62,0x00,\r
+0x00,0x36,0x06,0x00,0xff,0xdf,0x02,0x3c,0x25,0x18,0x66,0x00,0xff,0xff,0x42,0x34,\r
+0x24,0x18,0x62,0x00,0x00,0x40,0x06,0x3c,0x25,0x18,0x66,0x00,0xc0,0xff,0x02,0x24,\r
+0x24,0x18,0x62,0x00,0x08,0x00,0x03,0xae,0xc4,0x24,0xa6,0x8e,0xc3,0x01,0x00,0x0c,\r
+0x10,0x00,0xb7,0xaf,0xc4,0x24,0xa3,0x8e,0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,\r
+0x00,0x00,0x43,0xac,0x00,0x02,0x00,0x0c,0x21,0x20,0x00,0x00,0x2a,0xb0,0x02,0x3c,\r
+0x01,0x00,0x42,0x34,0x02,0x00,0x03,0x24,0x00,0x00,0x57,0xa0,0x00,0x00,0x43,0xa0,\r
+0xae,0xff,0x36,0x16,0x41,0xb0,0x03,0x3c,0x08,0x0b,0xa2,0x8e,0x3c,0x00,0xbf,0x8f,\r
+0x00,0x38,0x42,0x34,0x00,0x00,0x62,0xac,0x38,0x00,0xbe,0x8f,0x08,0x0b,0xa2,0xae,\r
+0x34,0x00,0xb7,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,\r
+0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x40,0x00,0xbd,0x27,0x25,0xb0,0x04,0x3c,0x00,0x80,0x02,0x3c,\r
+0xc0,0xff,0xbd,0x27,0x18,0x03,0x83,0x34,0x68,0x0c,0x42,0x24,0x3c,0x00,0xbf,0xaf,\r
+0x38,0x00,0xbe,0xaf,0x34,0x00,0xb7,0xaf,0x30,0x00,0xb6,0xaf,0x2c,0x00,0xb5,0xaf,\r
+0x28,0x00,0xb4,0xaf,0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,\r
+0x18,0x00,0xb0,0xaf,0x00,0x00,0x62,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x00,0x60,0x81,0x40,0x02,0x80,0x02,0x3c,0x78,0x1b,0x55,0x24,0xb0,0x03,0x96,0x34,\r
+0x4e,0x03,0x00,0x08,0x21,0xf0,0xa0,0x02,0x24,0x10,0x62,0x00,0x04,0x00,0x42,0x34,\r
+0x02,0x80,0x03,0x3c,0x78,0x1b,0x71,0x24,0x08,0x00,0x02,0xae,0xdc,0x24,0x26,0x8e,\r
+0x01,0x00,0x04,0x24,0x21,0x28,0x80,0x02,0x40,0x00,0x07,0x24,0x01,0x00,0x12,0x24,\r
+0xc3,0x01,0x00,0x0c,0x10,0x00,0xb2,0xaf,0xdc,0x24,0x23,0x8e,0x25,0xb0,0x02,0x3c,\r
+0xb0,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x00,0x02,0x00,0x0c,0x01,0x00,0x04,0x24,\r
+0x82,0x0b,0x22,0x92,0x00,0x00,0x00,0x00,0x88,0x00,0x40,0x10,0x2a,0xb0,0x02,0x3c,\r
+0x09,0x00,0x42,0x34,0x02,0x00,0x03,0x24,0x00,0x00,0x52,0xa0,0x00,0x00,0x43,0xa0,\r
+0x9d,0x00,0x77,0x12,0x00,0x00,0x00,0x00,0xd8,0x24,0xa2,0x8e,0x44,0x25,0xb4,0x8e,\r
+0x01,0x00,0x04,0x24,0x00,0x00,0xc2,0xae,0xdc,0x24,0xa2,0xae,0x00,0x00,0xd4,0xae,\r
+0x00,0x02,0x00,0x0c,0x00,0x00,0x00,0x00,0x44,0x25,0xa4,0x8e,0x48,0x25,0xa3,0x8e,\r
+0x40,0x00,0x84,0x24,0x7f,0x00,0x62,0x24,0x2b,0x10,0x44,0x00,0x0a,0x18,0x82,0x00,\r
+0x44,0x25,0xa3,0xae,0x44,0x25,0xc2,0x8f,0x00,0x00,0x00,0x00,0x00,0x00,0xc2,0xae,\r
+0x02,0x80,0x11,0x3c,0xff,0xff,0x82,0x32,0x25,0x80,0x51,0x00,0x00,0x00,0xd0,0xae,\r
+0x0c,0x00,0x03,0x92,0x00,0x00,0x00,0x00,0x00,0x00,0xc3,0xae,0x02,0x00,0x02,0x92,\r
+0x06,0x00,0x03,0x96,0x21,0x10,0x54,0x00,0xff,0xff,0x42,0x30,0x01,0x00,0x63,0x30,\r
+0x12,0x00,0x60,0x10,0x25,0x30,0x51,0x00,0xec,0x0c,0xc3,0x97,0x00,0x00,0x00,0x00,\r
+0x01,0x00,0x62,0x24,0xec,0x0c,0xc2,0xa7,0x0c,0x00,0x04,0x8e,0x00,0xf0,0x02,0x3c,\r
+0xff,0x0f,0x63,0x30,0xff,0xff,0x42,0x34,0x00,0x2c,0x03,0x00,0x24,0x20,0x82,0x00,\r
+0x25,0x20,0x85,0x00,0x0c,0x00,0x04,0xae,0x16,0x00,0xc2,0x94,0x00,0x19,0x03,0x00,\r
+0x0f,0x00,0x42,0x30,0x25,0x10,0x43,0x00,0x16,0x00,0xc2,0xa4,0x02,0x80,0x03,0x3c,\r
+0x98,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x17,0x00,0x40,0x10,0x02,0x80,0x03,0x3c,\r
+0x56,0x43,0x62,0x90,0x00,0x00,0x00,0x00,0x02,0x00,0x42,0x30,0x77,0x00,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0x02,0x80,0x03,0x3c,0x9a,0x44,0x62,0x90,0x00,0x00,0x00,0x00,\r
+0x0f,0x00,0x42,0x30,0x0c,0x00,0x42,0x28,0x0b,0x00,0x40,0x10,0x00,0x00,0x00,0x00,\r
+0x02,0x00,0x02,0x92,0x00,0x00,0x00,0x00,0x21,0x10,0x54,0x00,0xff,0xff,0x42,0x30,\r
+0x25,0x28,0x51,0x00,0x00,0x00,0xa4,0x94,0x08,0x00,0x02,0x24,0x0c,0x00,0x83,0x30,\r
+0x6a,0x00,0x62,0x10,0x02,0x80,0x02,0x3c,0x0c,0x00,0x13,0x92,0xff,0x00,0x17,0x24,\r
+0x0d,0x00,0x77,0x12,0x02,0x80,0x02,0x3c,0x78,0x1b,0x48,0x24,0x00,0x1a,0x13,0x00,\r
+0x20,0x10,0x02,0x3c,0x44,0x25,0x05,0x8d,0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00,\r
+0x01,0x00,0x04,0x24,0x40,0x00,0x07,0x24,0xd8,0x24,0x03,0xad,0x78,0x24,0x13,0xa1,\r
+0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x04,0x00,0x04,0x8e,0x08,0x00,0x03,0x8e,\r
+0xff,0xe0,0x02,0x3c,0xff,0xff,0x42,0x34,0x1f,0x00,0x84,0x30,0x24,0x18,0x62,0x00,\r
+0x00,0x26,0x04,0x00,0xff,0xdf,0x02,0x3c,0x25,0x18,0x64,0x00,0xff,0xff,0x42,0x34,\r
+0x24,0x18,0x62,0x00,0x00,0x40,0x04,0x3c,0x25,0x18,0x64,0x00,0x82,0x11,0x03,0x00,\r
+0x01,0x00,0x42,0x30,0x78,0xff,0x40,0x10,0xc0,0xff,0x02,0x24,0x08,0x00,0x03,0xae,\r
+0x02,0x80,0x03,0x3c,0x78,0x1b,0x71,0x24,0xdc,0x24,0x26,0x8e,0x01,0x00,0x04,0x24,\r
+0x21,0x28,0x80,0x02,0x40,0x00,0x07,0x24,0x01,0x00,0x12,0x24,0xc3,0x01,0x00,0x0c,\r
+0x10,0x00,0xb2,0xaf,0xdc,0x24,0x23,0x8e,0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,\r
+0x00,0x00,0x43,0xac,0x00,0x02,0x00,0x0c,0x01,0x00,0x04,0x24,0x82,0x0b,0x22,0x92,\r
+0x00,0x00,0x00,0x00,0x7a,0xff,0x40,0x14,0x2a,0xb0,0x02,0x3c,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x82,0x0b,0x32,0xa2,\r
+0x02,0x00,0x02,0x92,0x02,0x80,0x03,0x3c,0x21,0x10,0x54,0x00,0xff,0xff,0x42,0x30,\r
+0x25,0x10,0x43,0x00,0x02,0x00,0x45,0x94,0x00,0x00,0x00,0x00,0xff,0x00,0xa4,0x30,\r
+0x00,0xc0,0x84,0x24,0xff,0xff,0x84,0x30,0x2c,0x22,0x00,0x0c,0x83,0x0b,0x25,0xa2,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x2a,0xb0,0x02,0x3c,\r
+0x09,0x00,0x42,0x34,0x02,0x00,0x03,0x24,0x00,0x00,0x52,0xa0,0x00,0x00,0x43,0xa0,\r
+0x65,0xff,0x77,0x16,0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x08,0x0b,0x22,0x8e,0x41,0xb0,0x03,0x3c,\r
+0x3c,0x00,0xbf,0x8f,0x00,0x38,0x42,0x34,0x00,0x00,0x62,0xac,0x38,0x00,0xbe,0x8f,\r
+0x08,0x0b,0x22,0xae,0x34,0x00,0xb7,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,\r
+0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,\r
+0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x40,0x00,0xbd,0x27,0x55,0x1f,0x00,0x0c,\r
+0x01,0x00,0x04,0x24,0x8a,0x03,0x00,0x08,0x02,0x80,0x03,0x3c,0xb1,0x44,0x43,0x90,\r
+0x00,0x00,0x00,0x00,0x94,0xff,0x60,0x14,0x00,0x10,0x82,0x34,0x9a,0x03,0x00,0x08,\r
+0x00,0x00,0xa2,0xa4,0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,0x24,0x10,0x63,0x24,\r
+0x18,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0xc0,0xff,0xbd,0x27,0x2c,0x00,0xb5,0xaf,0x3c,0x00,0xbf,0xaf,0x38,0x00,0xbe,0xaf,\r
+0x34,0x00,0xb7,0xaf,0x30,0x00,0xb6,0xaf,0x28,0x00,0xb4,0xaf,0x24,0x00,0xb3,0xaf,\r
+0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,0x02,0x80,0x06,0x3c,\r
+0x54,0x44,0xc5,0x90,0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,0x18,0x03,0x42,0x34,\r
+0x40,0x10,0x63,0x24,0x40,0x00,0xa4,0x30,0x00,0x00,0x43,0xac,0x21,0xa8,0x00,0x00,\r
+0x03,0x00,0x80,0x10,0x7f,0x00,0xa2,0x30,0xbf,0x00,0xa2,0x30,0x01,0x00,0x15,0x24,\r
+0x54,0x44,0xc2,0xa0,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,\r
+0x02,0x80,0x02,0x3c,0x78,0x1b,0x52,0x24,0x02,0x80,0x17,0x3c,0x02,0x80,0x14,0x3c,\r
+0x21,0xf0,0x40,0x02,0x4c,0x04,0x00,0x08,0x21,0xb0,0x40,0x02,0x58,0x24,0xd0,0xa3,\r
+0xfc,0x24,0x45,0x8e,0x90,0x24,0x46,0x8e,0x03,0x00,0x04,0x24,0x40,0x00,0x07,0x24,\r
+0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x94,0x24,0xc5,0x8e,0x21,0x20,0x20,0x02,\r
+0x51,0x02,0x00,0x0c,0x21,0x30,0x60,0x02,0x21,0x20,0x00,0x00,0x21,0x28,0xa0,0x02,\r
+0x95,0x02,0x00,0x0c,0x21,0x30,0x00,0x02,0x9c,0x43,0x82,0x96,0x25,0xb0,0x05,0x3c,\r
+0x66,0x03,0xa4,0x34,0x01,0x00,0x42,0x24,0x9c,0x43,0x82,0xa6,0x9c,0x43,0x83,0x96,\r
+0xff,0x00,0x02,0x24,0x00,0x00,0x83,0xa4,0x5f,0x00,0x02,0x12,0x00,0x00,0x00,0x00,\r
+0x90,0x24,0x42,0x8e,0x03,0x00,0x04,0x24,0xfc,0x24,0x53,0x8e,0x00,0x02,0x00,0x0c,\r
+0x94,0x24,0x42,0xae,0xfc,0x24,0x44,0x8e,0x00,0x25,0x43,0x8e,0x02,0x80,0x10,0x3c,\r
+0x40,0x00,0x84,0x24,0x7f,0x00,0x62,0x24,0x2b,0x10,0x44,0x00,0x0a,0x18,0x82,0x00,\r
+0xff,0xff,0x65,0x32,0x25,0x88,0xb0,0x00,0xfc,0x24,0x43,0xae,0x02,0x00,0x22,0x92,\r
+0x06,0x00,0x23,0x96,0x21,0x10,0x53,0x00,0xff,0xff,0x42,0x30,0x01,0x00,0x63,0x30,\r
+0x11,0x00,0x60,0x10,0x25,0x28,0x50,0x00,0xec,0x0c,0x44,0x96,0x00,0xf0,0x06,0x3c,\r
+0xff,0xff,0xc6,0x34,0x01,0x00,0x82,0x24,0xec,0x0c,0x42,0xa6,0x0c,0x00,0x23,0x8e,\r
+0xff,0x0f,0x84,0x30,0x00,0x14,0x04,0x00,0x24,0x18,0x66,0x00,0x25,0x18,0x62,0x00,\r
+0x0c,0x00,0x23,0xae,0x16,0x00,0xa2,0x94,0x00,0x21,0x04,0x00,0x0f,0x00,0x42,0x30,\r
+0x25,0x10,0x44,0x00,0x16,0x00,0xa2,0xa4,0x98,0x44,0xe2,0x92,0x00,0x00,0x00,0x00,\r
+0x1c,0x00,0x40,0x10,0x02,0x80,0x03,0x3c,0x56,0x43,0x62,0x90,0x00,0x00,0x00,0x00,\r
+0x02,0x00,0x42,0x30,0x21,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x02,0x80,0x03,0x3c,\r
+0x9a,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x0f,0x00,0x42,0x30,0x0c,0x00,0x42,0x28,\r
+0x0b,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x02,0x00,0x22,0x92,0x00,0x00,0x00,0x00,\r
+0x21,0x10,0x53,0x00,0xff,0xff,0x42,0x30,0x25,0x28,0x50,0x00,0x00,0x00,0xa4,0x94,\r
+0x08,0x00,0x02,0x24,0x0c,0x00,0x83,0x30,0x43,0x00,0x62,0x10,0x02,0x80,0x02,0x3c,\r
+0x98,0x44,0xe2,0x92,0x05,0x00,0x03,0x24,0xff,0x00,0x42,0x30,0x0f,0x00,0x43,0x10,\r
+0x02,0x80,0x03,0x3c,0x0c,0x00,0x30,0x92,0xff,0x00,0x02,0x24,0xa6,0xff,0x02,0x12,\r
+0x00,0x12,0x10,0x00,0x20,0x10,0x03,0x3c,0x21,0x10,0x43,0x00,0x9b,0xff,0xa0,0x16,\r
+0x90,0x24,0xc2,0xaf,0x34,0x04,0x00,0x08,0x54,0x24,0xd0,0xa3,0x55,0x1f,0x00,0x0c,\r
+0x01,0x00,0x04,0x24,0x7c,0x04,0x00,0x08,0x02,0x80,0x03,0x3c,0xb3,0x44,0x62,0x90,\r
+0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30,0xee,0xff,0x40,0x10,0x02,0x80,0x03,0x3c,\r
+0xb2,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x04,0x00,0x42,0x34,0xb2,0x44,0x62,0xa0,\r
+0x91,0x04,0x00,0x08,0x00,0x00,0x00,0x00,0x29,0x00,0xa0,0x12,0x2a,0xb0,0x02,0x3c,\r
+0x58,0x24,0xc3,0x92,0xb0,0x03,0xa5,0x34,0x21,0x20,0x60,0x00,0x41,0x00,0x42,0x34,\r
+0x00,0x00,0x43,0xa0,0x00,0x00,0xa4,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0x02,0x80,0x02,0x3c,0x78,0x1b,0x45,0x24,0x08,0x0b,0xa4,0x8c,\r
+0x01,0x00,0x02,0x3c,0x3c,0x00,0xbf,0x8f,0x38,0x00,0xbe,0x8f,0x34,0x00,0xb7,0x8f,\r
+0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,\r
+0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x00,0x80,0x42,0x34,\r
+0x25,0x20,0x82,0x00,0x41,0xb0,0x03,0x3c,0x40,0x00,0xbd,0x27,0x00,0x00,0x64,0xac,\r
+0x08,0x00,0xe0,0x03,0x08,0x0b,0xa4,0xac,0xb1,0x44,0x43,0x90,0x00,0x00,0x00,0x00,\r
+0xbb,0xff,0x60,0x14,0x00,0x10,0x82,0x34,0x8c,0x04,0x00,0x08,0x00,0x00,0xa2,0xa4,\r
+0x54,0x24,0xc3,0x92,0xb0,0x03,0xa5,0x34,0x21,0x20,0x60,0x00,0x40,0x00,0x42,0x34,\r
+0x00,0x00,0x43,0xa0,0x00,0x00,0xa4,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0x02,0x80,0x02,0x3c,0x78,0x1b,0x45,0x24,0x08,0x0b,0xa4,0x8c,\r
+0x01,0x00,0x02,0x3c,0x3c,0x00,0xbf,0x8f,0x38,0x00,0xbe,0x8f,0x34,0x00,0xb7,0x8f,\r
+0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,\r
+0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x00,0x80,0x42,0x34,\r
+0x25,0x20,0x82,0x00,0x41,0xb0,0x03,0x3c,0x40,0x00,0xbd,0x27,0x00,0x00,0x64,0xac,\r
+0x08,0x00,0xe0,0x03,0x08,0x0b,0xa4,0xac,0xb8,0xff,0xbd,0x27,0x44,0x00,0xbf,0xaf,\r
+0x40,0x00,0xbe,0xaf,0x3c,0x00,0xb7,0xaf,0x38,0x00,0xb6,0xaf,0x34,0x00,0xb5,0xaf,\r
+0x30,0x00,0xb4,0xaf,0x2c,0x00,0xb3,0xaf,0x28,0x00,0xb2,0xaf,0x24,0x00,0xb1,0xaf,\r
+0x20,0x00,0xb0,0xaf,0x02,0x80,0x06,0x3c,0x54,0x44,0xc5,0x90,0x00,0x80,0x03,0x3c,\r
+0x25,0xb0,0x02,0x3c,0x18,0x03,0x42,0x34,0xd8,0x13,0x63,0x24,0x10,0x00,0xa4,0x30,\r
+0x00,0x00,0x43,0xac,0x18,0x00,0xa0,0xaf,0x04,0x00,0x80,0x10,0xdf,0x00,0xa2,0x30,\r
+0x01,0x00,0x03,0x24,0xef,0x00,0xa2,0x30,0x18,0x00,0xa3,0xaf,0x54,0x44,0xc2,0xa0,\r
+0x54,0x44,0xc3,0x90,0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0x00,0x00,0x43,0xac,\r
+0x00,0x00,0x43,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,\r
+0x02,0x80,0x17,0x3c,0x78,0x1b,0xf4,0x26,0x21,0xa8,0x40,0x00,0x02,0x80,0x16,0x3c,\r
+0x39,0x05,0x00,0x08,0x21,0xf0,0x80,0x02,0x60,0x24,0x71,0xa0,0x78,0x1b,0xe2,0x26,\r
+0x9c,0x24,0x46,0x8c,0x08,0x25,0x45,0x8c,0x04,0x00,0x04,0x24,0x40,0x00,0x07,0x24,\r
+0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x78,0x1b,0xf2,0x26,0xa0,0x24,0x45,0x8e,\r
+0x21,0x20,0x00,0x02,0x51,0x02,0x00,0x0c,0x21,0x30,0x60,0x02,0x18,0x00,0xa5,0x8f,\r
+0x02,0x00,0x04,0x24,0x95,0x02,0x00,0x0c,0x21,0x30,0x20,0x02,0x9c,0x43,0xc2,0x96,\r
+0x25,0xb0,0x05,0x3c,0x66,0x03,0xa4,0x34,0x01,0x00,0x42,0x24,0x9c,0x43,0xc2,0xa6,\r
+0x9c,0x43,0xc3,0x96,0xff,0x00,0x02,0x24,0x00,0x00,0x83,0xa4,0x71,0x00,0x22,0x12,\r
+0x00,0x00,0x00,0x00,0x9c,0x24,0x82,0x8e,0x08,0x25,0x93,0x8e,0x04,0x00,0x04,0x24,\r
+0x00,0x00,0xa2,0xae,0xa0,0x24,0x82,0xae,0x00,0x00,0xb3,0xae,0x00,0x02,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x08,0x25,0x84,0x8e,0x0c,0x25,0x83,0x8e,0x40,0x00,0x84,0x24,\r
+0x7f,0x00,0x62,0x24,0x2b,0x10,0x44,0x00,0x0a,0x18,0x82,0x00,0x08,0x25,0x83,0xae,\r
+0x08,0x25,0xc2,0x8f,0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0xae,0x02,0x80,0x11,0x3c,\r
+0xff,0xff,0x62,0x32,0x25,0x80,0x51,0x00,0x00,0x00,0xb0,0xae,0x0c,0x00,0x03,0x92,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0xa3,0xae,0x02,0x00,0x02,0x92,0x06,0x00,0x03,0x96,\r
+0x21,0x10,0x53,0x00,0xff,0xff,0x42,0x30,0x01,0x00,0x63,0x30,0x12,0x00,0x60,0x10,\r
+0x25,0x30,0x51,0x00,0xec,0x0c,0xc3,0x97,0x00,0x00,0x00,0x00,0x01,0x00,0x62,0x24,\r
+0xec,0x0c,0xc2,0xa7,0x0c,0x00,0x04,0x8e,0x00,0xf0,0x02,0x3c,0xff,0x0f,0x63,0x30,\r
+0xff,0xff,0x42,0x34,0x00,0x2c,0x03,0x00,0x24,0x20,0x82,0x00,0x25,0x20,0x85,0x00,\r
+0x0c,0x00,0x04,0xae,0x16,0x00,0xc2,0x94,0x00,0x19,0x03,0x00,0x0f,0x00,0x42,0x30,\r
+0x25,0x10,0x43,0x00,0x16,0x00,0xc2,0xa4,0x02,0x80,0x03,0x3c,0x98,0x44,0x62,0x90,\r
+0x00,0x00,0x00,0x00,0x19,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x02,0x80,0x03,0x3c,\r
+0x56,0x43,0x62,0x90,0x00,0x00,0x00,0x00,0x02,0x00,0x42,0x30,0x31,0x00,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0x02,0x80,0x03,0x3c,0x9a,0x44,0x62,0x90,0x00,0x00,0x00,0x00,\r
+0x0f,0x00,0x42,0x30,0x0c,0x00,0x42,0x28,0x0c,0x00,0x40,0x10,0x02,0x80,0x03,0x3c,\r
+0x02,0x00,0x02,0x92,0x00,0x00,0x00,0x00,0x21,0x10,0x53,0x00,0xff,0xff,0x42,0x30,\r
+0x25,0x28,0x51,0x00,0x00,0x00,0xa4,0x94,0x08,0x00,0x02,0x24,0x0c,0x00,0x83,0x30,\r
+0x48,0x00,0x62,0x10,0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0x98,0x44,0x62,0x90,\r
+0x05,0x00,0x03,0x24,0xff,0x00,0x42,0x30,0x0f,0x00,0x43,0x10,0x02,0x80,0x03,0x3c,\r
+0x0c,0x00,0x11,0x92,0xff,0x00,0x02,0x24,0x97,0xff,0x22,0x12,0x20,0x10,0x03,0x3c,\r
+0x00,0x12,0x11,0x00,0x21,0x10,0x43,0x00,0x78,0x1b,0xe3,0x26,0x9c,0x24,0x62,0xac,\r
+0x18,0x00,0xa2,0x8f,0x00,0x00,0x00,0x00,0x87,0xff,0x40,0x14,0x00,0x00,0x00,0x00,\r
+0x1f,0x05,0x00,0x08,0x5c,0x24,0x71,0xa0,0xb3,0x44,0x62,0x90,0x00,0x00,0x00,0x00,\r
+0x02,0x00,0x42,0x30,0xee,0xff,0x40,0x10,0x02,0x80,0x03,0x3c,0xb2,0x44,0x62,0x90,\r
+0x00,0x00,0x00,0x00,0x04,0x00,0x42,0x34,0xb2,0x44,0x62,0xa0,0x8c,0x05,0x00,0x08,\r
+0x00,0x00,0x00,0x00,0x55,0x1f,0x00,0x0c,0x01,0x00,0x04,0x24,0x76,0x05,0x00,0x08,\r
+0x02,0x80,0x03,0x3c,0x18,0x00,0xa3,0x8f,0x00,0x00,0x00,0x00,0x28,0x00,0x60,0x10,\r
+0x2a,0xb0,0x02,0x3c,0x60,0x24,0x43,0x92,0xb0,0x03,0xa5,0x34,0x21,0x20,0x60,0x00,\r
+0x43,0x00,0x42,0x34,0x00,0x00,0x43,0xa0,0x00,0x00,0xa4,0xac,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x78,0x1b,0xe5,0x26,0x08,0x0b,0xa2,0x8c,\r
+0x44,0x00,0xbf,0x8f,0x40,0x00,0xbe,0x8f,0x3c,0x00,0xb7,0x8f,0x38,0x00,0xb6,0x8f,\r
+0x34,0x00,0xb5,0x8f,0x30,0x00,0xb4,0x8f,0x2c,0x00,0xb3,0x8f,0x28,0x00,0xb2,0x8f,\r
+0x24,0x00,0xb1,0x8f,0x20,0x00,0xb0,0x8f,0x06,0x00,0x03,0x3c,0x25,0x10,0x43,0x00,\r
+0x41,0xb0,0x04,0x3c,0x48,0x00,0xbd,0x27,0x00,0x00,0x82,0xac,0x08,0x00,0xe0,0x03,\r
+0x08,0x0b,0xa2,0xac,0xb1,0x44,0x43,0x90,0x00,0x00,0x00,0x00,0xb7,0xff,0x60,0x14,\r
+0x02,0x80,0x03,0x3c,0x00,0x10,0x82,0x34,0x87,0x05,0x00,0x08,0x00,0x00,0xa2,0xa4,\r
+0x5c,0x24,0x43,0x92,0xb0,0x03,0xa5,0x34,0x21,0x20,0x60,0x00,0x42,0x00,0x42,0x34,\r
+0x00,0x00,0x43,0xa0,0x00,0x00,0xa4,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0x78,0x1b,0xe5,0x26,0x08,0x0b,0xa2,0x8c,0x44,0x00,0xbf,0x8f,\r
+0x40,0x00,0xbe,0x8f,0x3c,0x00,0xb7,0x8f,0x38,0x00,0xb6,0x8f,0x34,0x00,0xb5,0x8f,\r
+0x30,0x00,0xb4,0x8f,0x2c,0x00,0xb3,0x8f,0x28,0x00,0xb2,0x8f,0x24,0x00,0xb1,0x8f,\r
+0x20,0x00,0xb0,0x8f,0x06,0x00,0x03,0x3c,0x25,0x10,0x43,0x00,0x41,0xb0,0x04,0x3c,\r
+0x48,0x00,0xbd,0x27,0x00,0x00,0x82,0xac,0x08,0x00,0xe0,0x03,0x08,0x0b,0xa2,0xac,\r
+0xb8,0xff,0xbd,0x27,0x44,0x00,0xbf,0xaf,0x40,0x00,0xbe,0xaf,0x3c,0x00,0xb7,0xaf,\r
+0x38,0x00,0xb6,0xaf,0x34,0x00,0xb5,0xaf,0x30,0x00,0xb4,0xaf,0x2c,0x00,0xb3,0xaf,\r
+0x28,0x00,0xb2,0xaf,0x24,0x00,0xb1,0xaf,0x20,0x00,0xb0,0xaf,0x02,0x80,0x06,0x3c,\r
+0x54,0x44,0xc5,0x90,0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,0x18,0x03,0x42,0x34,\r
+0xd0,0x17,0x63,0x24,0x01,0x00,0xa4,0x30,0x00,0x00,0x43,0xac,0x18,0x00,0xa0,0xaf,\r
+0x04,0x00,0x80,0x10,0xf7,0x00,0xa2,0x30,0x01,0x00,0x03,0x24,0xfe,0x00,0xa2,0x30,\r
+0x18,0x00,0xa3,0xaf,0x54,0x44,0xc2,0xa0,0x54,0x44,0xc3,0x90,0x25,0xb0,0x02,0x3c,\r
+0xb0,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x00,0x60,0x81,0x40,0x02,0x80,0x17,0x3c,0x78,0x1b,0xf4,0x26,0x21,0xa8,0x40,0x00,\r
+0x02,0x80,0x16,0x3c,0x36,0x06,0x00,0x08,0x21,0xf0,0x80,0x02,0x68,0x24,0x71,0xa0,\r
+0x78,0x1b,0xe2,0x26,0xa8,0x24,0x46,0x8c,0x14,0x25,0x45,0x8c,0x05,0x00,0x04,0x24,\r
+0x40,0x00,0x07,0x24,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x78,0x1b,0xf2,0x26,\r
+0xac,0x24,0x45,0x8e,0x21,0x20,0x00,0x02,0x51,0x02,0x00,0x0c,0x21,0x30,0x60,0x02,\r
+0x18,0x00,0xa5,0x8f,0x04,0x00,0x04,0x24,0x95,0x02,0x00,0x0c,0x21,0x30,0x20,0x02,\r
+0x9c,0x43,0xc2,0x96,0x25,0xb0,0x05,0x3c,0x66,0x03,0xa4,0x34,0x01,0x00,0x42,0x24,\r
+0x9c,0x43,0xc2,0xa6,0x9c,0x43,0xc3,0x96,0xff,0x00,0x02,0x24,0x00,0x00,0x83,0xa4,\r
+0x71,0x00,0x22,0x12,0x00,0x00,0x00,0x00,0xa8,0x24,0x82,0x8e,0x14,0x25,0x93,0x8e,\r
+0x05,0x00,0x04,0x24,0x00,0x00,0xa2,0xae,0xac,0x24,0x82,0xae,0x00,0x00,0xb3,0xae,\r
+0x00,0x02,0x00,0x0c,0x00,0x00,0x00,0x00,0x14,0x25,0x84,0x8e,0x18,0x25,0x83,0x8e,\r
+0x40,0x00,0x84,0x24,0x7f,0x00,0x62,0x24,0x2b,0x10,0x44,0x00,0x0a,0x18,0x82,0x00,\r
+0x14,0x25,0x83,0xae,0x14,0x25,0xc2,0x8f,0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0xae,\r
+0x02,0x80,0x11,0x3c,0xff,0xff,0x62,0x32,0x25,0x80,0x51,0x00,0x00,0x00,0xb0,0xae,\r
+0x0c,0x00,0x03,0x92,0x00,0x00,0x00,0x00,0x00,0x00,0xa3,0xae,0x02,0x00,0x02,0x92,\r
+0x06,0x00,0x03,0x96,0x21,0x10,0x53,0x00,0xff,0xff,0x42,0x30,0x01,0x00,0x63,0x30,\r
+0x12,0x00,0x60,0x10,0x25,0x30,0x51,0x00,0xec,0x0c,0xc3,0x97,0x00,0x00,0x00,0x00,\r
+0x01,0x00,0x62,0x24,0xec,0x0c,0xc2,0xa7,0x0c,0x00,0x04,0x8e,0x00,0xf0,0x02,0x3c,\r
+0xff,0x0f,0x63,0x30,0xff,0xff,0x42,0x34,0x00,0x2c,0x03,0x00,0x24,0x20,0x82,0x00,\r
+0x25,0x20,0x85,0x00,0x0c,0x00,0x04,0xae,0x16,0x00,0xc2,0x94,0x00,0x19,0x03,0x00,\r
+0x0f,0x00,0x42,0x30,0x25,0x10,0x43,0x00,0x16,0x00,0xc2,0xa4,0x02,0x80,0x03,0x3c,\r
+0x98,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x19,0x00,0x40,0x10,0x00,0x00,0x00,0x00,\r
+0x02,0x80,0x03,0x3c,0x56,0x43,0x62,0x90,0x00,0x00,0x00,0x00,0x02,0x00,0x42,0x30,\r
+0x31,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x02,0x80,0x03,0x3c,0x9a,0x44,0x62,0x90,\r
+0x00,0x00,0x00,0x00,0x0f,0x00,0x42,0x30,0x0c,0x00,0x42,0x28,0x0c,0x00,0x40,0x10,\r
+0x02,0x80,0x03,0x3c,0x02,0x00,0x02,0x92,0x00,0x00,0x00,0x00,0x21,0x10,0x53,0x00,\r
+0xff,0xff,0x42,0x30,0x25,0x28,0x51,0x00,0x00,0x00,0xa4,0x94,0x08,0x00,0x02,0x24,\r
+0x0c,0x00,0x83,0x30,0x48,0x00,0x62,0x10,0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,\r
+0x98,0x44,0x62,0x90,0x05,0x00,0x03,0x24,0xff,0x00,0x42,0x30,0x0f,0x00,0x43,0x10,\r
+0x02,0x80,0x03,0x3c,0x0c,0x00,0x11,0x92,0xff,0x00,0x02,0x24,0x97,0xff,0x22,0x12,\r
+0x20,0x10,0x03,0x3c,0x00,0x12,0x11,0x00,0x21,0x10,0x43,0x00,0x78,0x1b,0xe3,0x26,\r
+0xa8,0x24,0x62,0xac,0x18,0x00,0xa2,0x8f,0x00,0x00,0x00,0x00,0x87,0xff,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0x1c,0x06,0x00,0x08,0x64,0x24,0x71,0xa0,0xb3,0x44,0x62,0x90,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0x42,0x30,0xee,0xff,0x40,0x10,0x02,0x80,0x03,0x3c,\r
+0xb2,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x04,0x00,0x42,0x34,0xb2,0x44,0x62,0xa0,\r
+0x89,0x06,0x00,0x08,0x00,0x00,0x00,0x00,0x55,0x1f,0x00,0x0c,0x01,0x00,0x04,0x24,\r
+0x73,0x06,0x00,0x08,0x02,0x80,0x03,0x3c,0x18,0x00,0xa3,0x8f,0x00,0x00,0x00,0x00,\r
+0x28,0x00,0x60,0x10,0x2a,0xb0,0x02,0x3c,0x68,0x24,0x43,0x92,0xb0,0x03,0xa5,0x34,\r
+0x21,0x20,0x60,0x00,0x45,0x00,0x42,0x34,0x00,0x00,0x43,0xa0,0x00,0x00,0xa4,0xac,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x78,0x1b,0xe5,0x26,\r
+0x08,0x0b,0xa2,0x8c,0x44,0x00,0xbf,0x8f,0x40,0x00,0xbe,0x8f,0x3c,0x00,0xb7,0x8f,\r
+0x38,0x00,0xb6,0x8f,0x34,0x00,0xb5,0x8f,0x30,0x00,0xb4,0x8f,0x2c,0x00,0xb3,0x8f,\r
+0x28,0x00,0xb2,0x8f,0x24,0x00,0xb1,0x8f,0x20,0x00,0xb0,0x8f,0x18,0x00,0x03,0x3c,\r
+0x25,0x10,0x43,0x00,0x41,0xb0,0x04,0x3c,0x48,0x00,0xbd,0x27,0x00,0x00,0x82,0xac,\r
+0x08,0x00,0xe0,0x03,0x08,0x0b,0xa2,0xac,0xb1,0x44,0x43,0x90,0x00,0x00,0x00,0x00,\r
+0xb7,0xff,0x60,0x14,0x02,0x80,0x03,0x3c,0x00,0x10,0x82,0x34,0x84,0x06,0x00,0x08,\r
+0x00,0x00,0xa2,0xa4,0x64,0x24,0x43,0x92,0xb0,0x03,0xa5,0x34,0x21,0x20,0x60,0x00,\r
+0x44,0x00,0x42,0x34,0x00,0x00,0x43,0xa0,0x00,0x00,0xa4,0xac,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x78,0x1b,0xe5,0x26,0x08,0x0b,0xa2,0x8c,\r
+0x44,0x00,0xbf,0x8f,0x40,0x00,0xbe,0x8f,0x3c,0x00,0xb7,0x8f,0x38,0x00,0xb6,0x8f,\r
+0x34,0x00,0xb5,0x8f,0x30,0x00,0xb4,0x8f,0x2c,0x00,0xb3,0x8f,0x28,0x00,0xb2,0x8f,\r
+0x24,0x00,0xb1,0x8f,0x20,0x00,0xb0,0x8f,0x18,0x00,0x03,0x3c,0x25,0x10,0x43,0x00,\r
+0x41,0xb0,0x04,0x3c,0x48,0x00,0xbd,0x27,0x00,0x00,0x82,0xac,0x08,0x00,0xe0,0x03,\r
+0x08,0x0b,0xa2,0xac,0xb8,0xff,0xbd,0x27,0x44,0x00,0xbf,0xaf,0x40,0x00,0xbe,0xaf,\r
+0x3c,0x00,0xb7,0xaf,0x38,0x00,0xb6,0xaf,0x34,0x00,0xb5,0xaf,0x30,0x00,0xb4,0xaf,\r
+0x2c,0x00,0xb3,0xaf,0x28,0x00,0xb2,0xaf,0x24,0x00,0xb1,0xaf,0x20,0x00,0xb0,0xaf,\r
+0x02,0x80,0x06,0x3c,0x54,0x44,0xc5,0x90,0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,\r
+0x18,0x03,0x42,0x34,0xc4,0x1b,0x63,0x24,0x02,0x00,0xa4,0x30,0x00,0x00,0x43,0xac,\r
+0x18,0x00,0xa0,0xaf,0x04,0x00,0x80,0x10,0xfb,0x00,0xa2,0x30,0x01,0x00,0x03,0x24,\r
+0xfd,0x00,0xa2,0x30,0x18,0x00,0xa3,0xaf,0x54,0x44,0xc2,0xa0,0x54,0x44,0xc3,0x90,\r
+0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x02,0x80,0x17,0x3c,0x78,0x1b,0xf4,0x26,\r
+0x21,0xa8,0x40,0x00,0x02,0x80,0x16,0x3c,0x33,0x07,0x00,0x08,0x21,0xf0,0x80,0x02,\r
+0x70,0x24,0x71,0xa0,0x78,0x1b,0xe2,0x26,0xb4,0x24,0x46,0x8c,0x20,0x25,0x45,0x8c,\r
+0x06,0x00,0x04,0x24,0x40,0x00,0x07,0x24,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,\r
+0x78,0x1b,0xf2,0x26,0xb8,0x24,0x45,0x8e,0x21,0x20,0x00,0x02,0x51,0x02,0x00,0x0c,\r
+0x21,0x30,0x60,0x02,0x18,0x00,0xa5,0x8f,0x06,0x00,0x04,0x24,0x95,0x02,0x00,0x0c,\r
+0x21,0x30,0x20,0x02,0x9c,0x43,0xc2,0x96,0x25,0xb0,0x05,0x3c,0x66,0x03,0xa4,0x34,\r
+0x01,0x00,0x42,0x24,0x9c,0x43,0xc2,0xa6,0x9c,0x43,0xc3,0x96,0xff,0x00,0x02,0x24,\r
+0x00,0x00,0x83,0xa4,0x71,0x00,0x22,0x12,0x00,0x00,0x00,0x00,0xb4,0x24,0x82,0x8e,\r
+0x20,0x25,0x93,0x8e,0x06,0x00,0x04,0x24,0x00,0x00,0xa2,0xae,0xb8,0x24,0x82,0xae,\r
+0x00,0x00,0xb3,0xae,0x00,0x02,0x00,0x0c,0x00,0x00,0x00,0x00,0x20,0x25,0x84,0x8e,\r
+0x24,0x25,0x83,0x8e,0x40,0x00,0x84,0x24,0x7f,0x00,0x62,0x24,0x2b,0x10,0x44,0x00,\r
+0x0a,0x18,0x82,0x00,0x20,0x25,0x83,0xae,0x20,0x25,0xc2,0x8f,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0xa2,0xae,0x02,0x80,0x11,0x3c,0xff,0xff,0x62,0x32,0x25,0x80,0x51,0x00,\r
+0x00,0x00,0xb0,0xae,0x0c,0x00,0x03,0x92,0x00,0x00,0x00,0x00,0x00,0x00,0xa3,0xae,\r
+0x02,0x00,0x02,0x92,0x06,0x00,0x03,0x96,0x21,0x10,0x53,0x00,0xff,0xff,0x42,0x30,\r
+0x01,0x00,0x63,0x30,0x12,0x00,0x60,0x10,0x25,0x30,0x51,0x00,0xec,0x0c,0xc3,0x97,\r
+0x00,0x00,0x00,0x00,0x01,0x00,0x62,0x24,0xec,0x0c,0xc2,0xa7,0x0c,0x00,0x04,0x8e,\r
+0x00,0xf0,0x02,0x3c,0xff,0x0f,0x63,0x30,0xff,0xff,0x42,0x34,0x00,0x2c,0x03,0x00,\r
+0x24,0x20,0x82,0x00,0x25,0x20,0x85,0x00,0x0c,0x00,0x04,0xae,0x16,0x00,0xc2,0x94,\r
+0x00,0x19,0x03,0x00,0x0f,0x00,0x42,0x30,0x25,0x10,0x43,0x00,0x16,0x00,0xc2,0xa4,\r
+0x02,0x80,0x03,0x3c,0x98,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x19,0x00,0x40,0x10,\r
+0x00,0x00,0x00,0x00,0x02,0x80,0x03,0x3c,0x56,0x43,0x62,0x90,0x00,0x00,0x00,0x00,\r
+0x02,0x00,0x42,0x30,0x31,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x02,0x80,0x03,0x3c,\r
+0x9a,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x0f,0x00,0x42,0x30,0x0c,0x00,0x42,0x28,\r
+0x0c,0x00,0x40,0x10,0x02,0x80,0x03,0x3c,0x02,0x00,0x02,0x92,0x00,0x00,0x00,0x00,\r
+0x21,0x10,0x53,0x00,0xff,0xff,0x42,0x30,0x25,0x28,0x51,0x00,0x00,0x00,0xa4,0x94,\r
+0x08,0x00,0x02,0x24,0x0c,0x00,0x83,0x30,0x48,0x00,0x62,0x10,0x02,0x80,0x02,0x3c,\r
+0x02,0x80,0x03,0x3c,0x98,0x44,0x62,0x90,0x05,0x00,0x03,0x24,0xff,0x00,0x42,0x30,\r
+0x0f,0x00,0x43,0x10,0x02,0x80,0x03,0x3c,0x0c,0x00,0x11,0x92,0xff,0x00,0x02,0x24,\r
+0x97,0xff,0x22,0x12,0x20,0x10,0x03,0x3c,0x00,0x12,0x11,0x00,0x21,0x10,0x43,0x00,\r
+0x78,0x1b,0xe3,0x26,0xb4,0x24,0x62,0xac,0x18,0x00,0xa2,0x8f,0x00,0x00,0x00,0x00,\r
+0x87,0xff,0x40,0x14,0x00,0x00,0x00,0x00,0x19,0x07,0x00,0x08,0x6c,0x24,0x71,0xa0,\r
+0xb3,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x04,0x00,0x42,0x30,0xee,0xff,0x40,0x10,\r
+0x02,0x80,0x03,0x3c,0xb2,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x04,0x00,0x42,0x34,\r
+0xb2,0x44,0x62,0xa0,0x86,0x07,0x00,0x08,0x00,0x00,0x00,0x00,0x55,0x1f,0x00,0x0c,\r
+0x01,0x00,0x04,0x24,0x70,0x07,0x00,0x08,0x02,0x80,0x03,0x3c,0x18,0x00,0xa3,0x8f,\r
+0x00,0x00,0x00,0x00,0x28,0x00,0x60,0x10,0x2a,0xb0,0x02,0x3c,0x70,0x24,0x43,0x92,\r
+0xb0,0x03,0xa5,0x34,0x21,0x20,0x60,0x00,0x47,0x00,0x42,0x34,0x00,0x00,0x43,0xa0,\r
+0x00,0x00,0xa4,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x78,0x1b,0xe5,0x26,0x08,0x0b,0xa2,0x8c,0x44,0x00,0xbf,0x8f,0x40,0x00,0xbe,0x8f,\r
+0x3c,0x00,0xb7,0x8f,0x38,0x00,0xb6,0x8f,0x34,0x00,0xb5,0x8f,0x30,0x00,0xb4,0x8f,\r
+0x2c,0x00,0xb3,0x8f,0x28,0x00,0xb2,0x8f,0x24,0x00,0xb1,0x8f,0x20,0x00,0xb0,0x8f,\r
+0x60,0x00,0x03,0x3c,0x25,0x10,0x43,0x00,0x41,0xb0,0x04,0x3c,0x48,0x00,0xbd,0x27,\r
+0x00,0x00,0x82,0xac,0x08,0x00,0xe0,0x03,0x08,0x0b,0xa2,0xac,0xb1,0x44,0x43,0x90,\r
+0x00,0x00,0x00,0x00,0xb7,0xff,0x60,0x14,0x02,0x80,0x03,0x3c,0x00,0x10,0x82,0x34,\r
+0x81,0x07,0x00,0x08,0x00,0x00,0xa2,0xa4,0x6c,0x24,0x43,0x92,0xb0,0x03,0xa5,0x34,\r
+0x21,0x20,0x60,0x00,0x46,0x00,0x42,0x34,0x00,0x00,0x43,0xa0,0x00,0x00,0xa4,0xac,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x78,0x1b,0xe5,0x26,\r
+0x08,0x0b,0xa2,0x8c,0x44,0x00,0xbf,0x8f,0x40,0x00,0xbe,0x8f,0x3c,0x00,0xb7,0x8f,\r
+0x38,0x00,0xb6,0x8f,0x34,0x00,0xb5,0x8f,0x30,0x00,0xb4,0x8f,0x2c,0x00,0xb3,0x8f,\r
+0x28,0x00,0xb2,0x8f,0x24,0x00,0xb1,0x8f,0x20,0x00,0xb0,0x8f,0x60,0x00,0x03,0x3c,\r
+0x25,0x10,0x43,0x00,0x41,0xb0,0x04,0x3c,0x48,0x00,0xbd,0x27,0x00,0x00,0x82,0xac,\r
+0x08,0x00,0xe0,0x03,0x08,0x0b,0xa2,0xac,0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,\r
+0xb8,0x1f,0x63,0x24,0x18,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x02,0x80,0x05,0x3c,0x78,0x1b,0xa5,0x24,\r
+0x10,0x0b,0xa2,0x8c,0x08,0x0b,0xa4,0x8c,0x00,0x08,0x03,0x3c,0x24,0x10,0x43,0x00,\r
+0x25,0x20,0x82,0x00,0x41,0xb0,0x03,0x3c,0x00,0x00,0x64,0xac,0x08,0x00,0xe0,0x03,\r
+0x08,0x0b,0xa4,0xac,0x25,0xb0,0x04,0x3c,0x00,0x80,0x02,0x3c,0xc8,0xff,0xbd,0x27,\r
+0x18,0x03,0x83,0x34,0x14,0x20,0x42,0x24,0x30,0x00,0xbf,0xaf,0x2c,0x00,0xb5,0xaf,\r
+0x28,0x00,0xb4,0xaf,0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,\r
+0x18,0x00,0xb0,0xaf,0x00,0x00,0x62,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x00,0x60,0x81,0x40,0x02,0x80,0x14,0x3c,0x78,0x1b,0x93,0x26,0xfc,0x00,0x82,0x34,\r
+0x00,0x00,0x45,0x8c,0xe4,0x0a,0x66,0x96,0x94,0x25,0x63,0x96,0x8c,0x25,0x67,0x8e,\r
+0x23,0x28,0xa6,0x00,0x21,0x10,0xa3,0x00,0x23,0x88,0x47,0x00,0xb0,0x03,0x84,0x34,\r
+0x23,0x30,0x23,0x02,0x2b,0x10,0x71,0x00,0x00,0x00,0x83,0xac,0x00,0x00,0x91,0xac,\r
+0x0b,0x88,0xc2,0x00,0x21,0x20,0x20,0x02,0x39,0x15,0x00,0x0c,0x90,0x25,0x65,0xae,\r
+0x4b,0x00,0x40,0x10,0x21,0x90,0x40,0x00,0x0c,0x00,0x51,0xac,0x8c,0x25,0x68,0x8e,\r
+0x90,0x25,0x62,0x8e,0x08,0x00,0x45,0x8e,0x20,0xbd,0x03,0x3c,0x88,0x03,0x63,0x34,\r
+0x2b,0x10,0x48,0x00,0x40,0x10,0x15,0x3c,0x21,0x20,0x00,0x00,0xff,0xff,0x27,0x32,\r
+0x00,0x00,0x65,0xac,0x28,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0xe4,0x0a,0x66,0x96,\r
+0x08,0x00,0x42,0x96,0x40,0x10,0x05,0x3c,0x21,0x20,0x00,0x00,0x21,0x30,0x06,0x01,\r
+0x25,0x28,0x45,0x00,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x02,0x80,0x02,0x3c,\r
+0x68,0x41,0x42,0x24,0x78,0x1b,0x84,0x26,0x90,0x25,0x83,0x8c,0x04,0x00,0x45,0x8c,\r
+0x8c,0x25,0x83,0xac,0x00,0x00,0x42,0xae,0x04,0x00,0x52,0xac,0x00,0x00,0xb2,0xac,\r
+0x04,0x00,0x45,0xae,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0x78,0x1b,0x85,0x26,0x10,0x0b,0xa2,0x8c,0x08,0x0b,0xa3,0x8c,\r
+0x30,0x00,0xbf,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,\r
+0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x04,0x00,0x42,0x30,\r
+0x25,0x18,0x62,0x00,0x41,0xb0,0x04,0x3c,0x38,0x00,0xbd,0x27,0x00,0x00,0x83,0xac,\r
+0x08,0x00,0xe0,0x03,0x08,0x0b,0xa3,0xac,0x94,0x25,0x70,0x8e,0x08,0x00,0x45,0x96,\r
+0xe4,0x0a,0x66,0x96,0x23,0x80,0x08,0x02,0xff,0xff,0x10,0x32,0x21,0x30,0x06,0x01,\r
+0x25,0x28,0xb5,0x00,0x21,0x38,0x00,0x02,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,\r
+0x00,0x02,0x00,0x0c,0x21,0x20,0x00,0x00,0x08,0x00,0x45,0x96,0xe4,0x0a,0x62,0x96,\r
+0x23,0x38,0x30,0x02,0x25,0x28,0xb5,0x00,0x21,0xb0,0x06,0x3c,0x21,0x28,0xb0,0x00,\r
+0x21,0x30,0x46,0x00,0xff,0xff,0xe7,0x30,0x3d,0x08,0x00,0x08,0x21,0x20,0x00,0x00,\r
+0x00,0x60,0x02,0x40,0x01,0x00,0x41,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x02,0x80,0x04,0x3c,0x58,0x44,0x83,0x8c,0x00,0x00,0x00,0x00,0x00,0x10,0x63,0x34,\r
+0x58,0x44,0x83,0xac,0x00,0x60,0x82,0x40,0x49,0x08,0x00,0x08,0x00,0x00,0x00,0x00,\r
+0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,0xc0,0xff,0xbd,0x27,0x00,0x22,0x63,0x24,\r
+0x18,0x03,0x42,0x34,0x2a,0xb0,0x04,0x3c,0x00,0x00,0x43,0xac,0x3c,0x00,0xbf,0xaf,\r
+0x38,0x00,0xbe,0xaf,0x34,0x00,0xb7,0xaf,0x30,0x00,0xb6,0xaf,0x2c,0x00,0xb5,0xaf,\r
+0x28,0x00,0xb4,0xaf,0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,\r
+0x18,0x00,0xb0,0xaf,0x2c,0x00,0x84,0x34,0x00,0x00,0x88,0x8c,0xff,0x00,0x02,0x24,\r
+0xff,0x00,0x03,0x31,0x9e,0x00,0x62,0x10,0x00,0x80,0x02,0x31,0x33,0x00,0x40,0x10,\r
+0x00,0xff,0x02,0x3c,0x00,0x80,0x02,0x3c,0x00,0x00,0x82,0xac,0xff,0x00,0x02,0x24,\r
+0x10,0x00,0x62,0x10,0x02,0x80,0x02,0x3c,0x78,0x1b,0x50,0x24,0xff,0x00,0x03,0x31,\r
+0x50,0x25,0x05,0x8e,0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,\r
+0xe4,0x24,0x03,0xae,0x21,0x30,0x60,0x00,0x80,0x24,0x08,0xa2,0x0a,0x00,0x04,0x24,\r
+0x40,0x00,0x07,0x24,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x01,0x00,0x03,0x24,\r
+0x58,0x25,0x03,0xa2,0x02,0x80,0x02,0x3c,0x78,0x1b,0x44,0x24,0x58,0x25,0x83,0x90,\r
+0x01,0x00,0x02,0x24,0x25,0x00,0x62,0x10,0x02,0x80,0x03,0x3c,0x78,0x1b,0x70,0x24,\r
+0x59,0x25,0x02,0x92,0x00,0x00,0x00,0x00,0x08,0x00,0x40,0x10,0x00,0x04,0x03,0x3c,\r
+0x10,0x0b,0x02,0x8e,0x08,0x0b,0x04,0x8e,0x24,0x10,0x43,0x00,0x25,0x20,0x82,0x00,\r
+0x41,0xb0,0x03,0x3c,0x00,0x00,0x64,0xac,0x08,0x0b,0x04,0xae,0x3c,0x00,0xbf,0x8f,\r
+0x38,0x00,0xbe,0x8f,0x34,0x00,0xb7,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,\r
+0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,\r
+0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x40,0x00,0xbd,0x27,0x24,0x10,0x02,0x01,\r
+0xcf,0xff,0x40,0x10,0xff,0x00,0x02,0x24,0x02,0x80,0x03,0x3c,0x78,0x1b,0x62,0x24,\r
+0x80,0x24,0x43,0x90,0x20,0xb0,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,\r
+0x0c,0x00,0x68,0x8c,0x9b,0x08,0x00,0x08,0xff,0x00,0x03,0x31,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x25,0xb0,0x02,0x3c,0x21,0x88,0x80,0x00,\r
+0x7c,0x03,0x57,0x34,0x1e,0x03,0x5e,0x34,0x21,0x98,0x80,0x00,0xb0,0x03,0x56,0x34,\r
+0x01,0x00,0x15,0x24,0x07,0x09,0x00,0x08,0x01,0x00,0x14,0x24,0xf2,0x23,0x22,0x96,\r
+0x59,0x25,0x35,0xa2,0x01,0x00,0x42,0x34,0x00,0x00,0xc2,0xa7,0xf2,0x23,0x22,0xa6,\r
+0x30,0x00,0x02,0x24,0x06,0x00,0x42,0x12,0x02,0x80,0x02,0x3c,0x78,0xaf,0x42,0x24,\r
+0x00,0x00,0x48,0x8c,0x02,0x00,0x02,0x24,0x01,0x00,0x15,0xa1,0x01,0x00,0x02,0xa1,\r
+0x59,0x25,0x62,0x92,0x00,0x00,0x00,0x00,0x45,0x00,0x54,0x14,0xff,0x00,0x02,0x24,\r
+0x0c,0x00,0x03,0x92,0x00,0x00,0x00,0x00,0xff,0x00,0x69,0x30,0x40,0x00,0x22,0x11,\r
+0x20,0x10,0x02,0x3c,0x80,0x24,0x63,0xa2,0x80,0x24,0x28,0x92,0x50,0x25,0x25,0x8e,\r
+0xff,0x00,0x03,0x31,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x00,0x00,0xc9,0xae,\r
+0x21,0x30,0x60,0x00,0x00,0x00,0xe8,0xa6,0x0a,0x00,0x04,0x24,0xe4,0x24,0x23,0xae,\r
+0x40,0x00,0x07,0x24,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x50,0x25,0x30,0x8e,\r
+0x00,0x02,0x00,0x0c,0x0a,0x00,0x04,0x24,0xff,0xff,0x10,0x32,0x02,0x80,0x02,0x3c,\r
+0x25,0x80,0x02,0x02,0x02,0x00,0x03,0x92,0x20,0x00,0x02,0x24,0xd3,0xff,0x62,0x14,\r
+0x21,0x20,0x03,0x02,0x02,0x80,0x02,0x3c,0x88,0xb5,0x44,0xac,0x20,0x00,0x03,0x26,\r
+0x02,0x00,0x62,0x90,0x59,0x25,0x25,0x92,0x03,0x00,0x64,0x90,0xff,0x00,0x52,0x30,\r
+0x7f,0x00,0x83,0x30,0x10,0x00,0xb4,0x14,0x28,0x00,0x04,0x26,0x02,0x80,0x05,0x3c,\r
+0x91,0x43,0xa2,0x90,0x00,0x00,0x00,0x00,0x7f,0x00,0x42,0x30,0x08,0x00,0x62,0x10,\r
+0x32,0x00,0x42,0x2e,0xf2,0x23,0x22,0x96,0x00,0x00,0x00,0x00,0x10,0x00,0x42,0x34,\r
+0x00,0x00,0xc2,0xa7,0x91,0x43,0xa3,0xa0,0xf2,0x23,0x22,0xa6,0x32,0x00,0x42,0x2e,\r
+0xbf,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,0xc0,0x18,0x12,0x00,\r
+0x94,0x9f,0x42,0x24,0x21,0x18,0x62,0x00,0x04,0x00,0x62,0x8c,0x02,0x80,0x03,0x3c,\r
+0x09,0xf8,0x40,0x00,0x84,0xb5,0x62,0xac,0xe9,0x08,0x00,0x08,0x30,0x00,0x02,0x24,\r
+0x02,0x80,0x03,0x3c,0x78,0x1b,0x62,0x24,0xad,0x08,0x00,0x08,0x58,0x25,0x40,0xa0,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0xb3,0x08,0x00,0x08,0x02,0x80,0x03,0x3c,0xc8,0xff,0xbd,0x27,0xff,0xff,0xa8,0x30,\r
+0x02,0x80,0x02,0x3c,0x25,0x40,0x02,0x01,0x30,0x00,0xb6,0xaf,0x20,0x00,0xb2,0xaf,\r
+0x34,0x00,0xbf,0xaf,0x2c,0x00,0xb5,0xaf,0x28,0x00,0xb4,0xaf,0x24,0x00,0xb3,0xaf,\r
+0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,0x00,0x00,0x03,0x8d,0xff,0xff,0xd2,0x30,\r
+0x21,0xb0,0xa0,0x00,0x00,0xc0,0x02,0x24,0x08,0x00,0x45,0x26,0x04,0x00,0x06,0x8d,\r
+0x24,0x18,0x62,0x00,0xff,0x3f,0xa5,0x30,0xf0,0xff,0x02,0x3c,0x25,0x18,0x65,0x00,\r
+0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0x00,0x80,0x05,0x3c,0x25,0x18,0x65,0x00,\r
+0xff,0x01,0xc6,0x34,0x00,0x00,0x03,0xad,0x04,0x00,0x06,0xad,0x21,0x48,0x80,0x00,\r
+0xff,0xff,0xe7,0x30,0x18,0x00,0x12,0xa5,0x1a,0x00,0x07,0xa1,0x18,0x00,0x03,0x8d,\r
+0xff,0x7f,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0x02,0x80,0x15,0x3c,\r
+0x18,0x00,0x03,0xad,0x78,0x1b,0xa5,0x26,0xee,0x23,0xa3,0x90,0x00,0x00,0x00,0x00,\r
+0x01,0x00,0x62,0x24,0xee,0x23,0xa2,0xa0,0x18,0x00,0x04,0x8d,0xff,0x80,0x02,0x3c,\r
+0x20,0x00,0x45,0x26,0xff,0xff,0x42,0x34,0x7f,0x00,0x63,0x30,0xff,0xff,0xb2,0x30,\r
+0x24,0x20,0x82,0x00,0x00,0x1e,0x03,0x00,0x25,0xb0,0x02,0x3c,0xc0,0x00,0x42,0x34,\r
+0x25,0x20,0x83,0x00,0x07,0x00,0x45,0x32,0x18,0x00,0x04,0xad,0x00,0x00,0x52,0xa4,\r
+0x03,0x00,0xa0,0x10,0xff,0xff,0x42,0x32,0x08,0x00,0x42,0x26,0xff,0xff,0x42,0x30,\r
+0x78,0x1b,0xb4,0x26,0xb4,0x25,0x86,0x8e,0xb8,0x25,0x90,0x8e,0xf8,0xff,0x52,0x30,\r
+0x21,0x10,0xd2,0x00,0x2b,0x10,0x02,0x02,0x31,0x00,0x40,0x10,0xff,0x00,0x33,0x31,\r
+0x23,0x80,0x06,0x02,0x21,0x28,0xc0,0x02,0xff,0xff,0x07,0x32,0x01,0x00,0x11,0x24,\r
+0x21,0x20,0x60,0x02,0xc3,0x01,0x00,0x0c,0x10,0x00,0xb1,0xaf,0x23,0x18,0x50,0x02,\r
+0xff,0xff,0x72,0x30,0x22,0x10,0x02,0x3c,0x21,0x10,0x42,0x02,0x21,0x20,0x60,0x02,\r
+0x00,0x02,0x00,0x0c,0xb4,0x25,0x82,0xae,0x21,0x28,0xd0,0x02,0x21,0x38,0x40,0x02,\r
+0x21,0x20,0x60,0x02,0x10,0x00,0xb1,0xaf,0x22,0x10,0x06,0x3c,0xc3,0x01,0x00,0x0c,\r
+0x78,0x1b,0xb1,0x26,0xb4,0x25,0x23,0x8e,0x25,0xb0,0x10,0x3c,0xb0,0x03,0x02,0x36,\r
+0x21,0x20,0x60,0x02,0x00,0x00,0x43,0xac,0x00,0x02,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0xb4,0x25,0x25,0x8e,0xec,0x00,0x02,0x36,0xbd,0x00,0x04,0x36,0x00,0x00,0x45,0xac,\r
+0x00,0x00,0x83,0x90,0xc2,0x00,0x10,0x36,0x34,0x00,0xbf,0x8f,0x10,0x00,0x63,0x34,\r
+0x00,0x00,0x83,0xa0,0x30,0x00,0xb6,0x8f,0x00,0x00,0x05,0xa6,0x2c,0x00,0xb5,0x8f,\r
+0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,\r
+0x18,0x00,0xb0,0x8f,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27,\r
+0x21,0x28,0xc0,0x02,0x21,0x20,0x60,0x02,0x21,0x38,0x40,0x02,0x01,0x00,0x02,0x24,\r
+0xc3,0x01,0x00,0x0c,0x10,0x00,0xa2,0xaf,0xb4,0x25,0x83,0x8e,0x78,0x1b,0xb1,0x26,\r
+0x25,0xb0,0x10,0x3c,0x21,0x18,0x72,0x00,0xb4,0x25,0x83,0xae,0xb4,0x25,0x23,0x8e,\r
+0xb0,0x03,0x02,0x36,0x21,0x20,0x60,0x02,0x00,0x00,0x43,0xac,0x00,0x02,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0xb4,0x25,0x25,0x8e,0xec,0x00,0x02,0x36,0xbd,0x00,0x04,0x36,\r
+0x00,0x00,0x45,0xac,0x00,0x00,0x83,0x90,0xc2,0x00,0x10,0x36,0x34,0x00,0xbf,0x8f,\r
+0x10,0x00,0x63,0x34,0x00,0x00,0x83,0xa0,0x30,0x00,0xb6,0x8f,0x00,0x00,0x05,0xa6,\r
+0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,\r
+0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,\r
+0x38,0x00,0xbd,0x27,0xc8,0xff,0xbd,0x27,0x1c,0x00,0xb1,0xaf,0x34,0x00,0xbf,0xaf,\r
+0x30,0x00,0xb6,0xaf,0x2c,0x00,0xb5,0xaf,0x28,0x00,0xb4,0xaf,0x24,0x00,0xb3,0xaf,\r
+0x20,0x00,0xb2,0xaf,0x18,0x00,0xb0,0xaf,0x21,0x88,0x80,0x00,0x00,0x60,0x14,0x40,\r
+0x01,0x00,0x81,0x36,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x14,0x00,0x83,0x8c,\r
+0x02,0x80,0x15,0x3c,0x15,0x00,0x02,0x24,0x78,0x1b,0xb3,0x26,0x21,0x28,0x00,0x00,\r
+0x1d,0x00,0x62,0x10,0x08,0x00,0x06,0x24,0x08,0x00,0x82,0x94,0x02,0x80,0x04,0x3c,\r
+0x3e,0x46,0x00,0x0c,0x25,0x20,0x44,0x00,0x08,0x00,0x25,0x8e,0x0c,0x00,0x26,0x96,\r
+0x14,0x00,0x27,0x96,0x3e,0x09,0x00,0x0c,0x09,0x00,0x04,0x24,0x04,0x00,0x22,0x8e,\r
+0x00,0x00,0x23,0x8e,0x21,0x20,0x20,0x02,0x00,0x00,0x43,0xac,0x04,0x00,0x62,0xac,\r
+0x00,0x00,0x31,0xae,0x56,0x15,0x00,0x0c,0x04,0x00,0x31,0xae,0x00,0x60,0x94,0x40,\r
+0x34,0x00,0xbf,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,\r
+0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27,0x0c,0x00,0x90,0x8c,0x25,0xb0,0x02,0x3c,\r
+0xc0,0x00,0x42,0x34,0xb4,0x25,0x68,0x8e,0x07,0x00,0x07,0x32,0x00,0x00,0x50,0xa4,\r
+0x08,0x00,0x05,0x26,0x0b,0x80,0xa7,0x00,0xb8,0x25,0x63,0x8e,0xf8,0xff,0x10,0x32,\r
+0x21,0x10,0x10,0x01,0x23,0x90,0x68,0x00,0x2b,0x18,0x62,0x00,0x01,0x00,0x16,0x24,\r
+0x09,0x00,0x04,0x24,0x21,0x30,0x00,0x01,0x33,0x00,0x60,0x10,0xff,0xff,0x07,0x32,\r
+0x08,0x00,0x25,0x8e,0xff,0xff,0x47,0x32,0x23,0x80,0x12,0x02,0xc3,0x01,0x00,0x0c,\r
+0x10,0x00,0xb6,0xaf,0x22,0x10,0x03,0x3c,0x21,0x18,0x03,0x02,0x09,0x00,0x04,0x24,\r
+0x00,0x02,0x00,0x0c,0xb4,0x25,0x63,0xae,0x08,0x00,0x25,0x8e,0xff,0xff,0x07,0x32,\r
+0x09,0x00,0x04,0x24,0x21,0x28,0xb2,0x00,0x22,0x10,0x06,0x3c,0xc3,0x01,0x00,0x0c,\r
+0x10,0x00,0xb6,0xaf,0x00,0x02,0x00,0x0c,0x09,0x00,0x04,0x24,0x78,0x1b,0xa2,0x26,\r
+0xb4,0x25,0x46,0x8c,0x25,0xb0,0x03,0x3c,0xec,0x00,0x64,0x34,0x00,0x00,0x86,0xac,\r
+0xbd,0x00,0x65,0x34,0x00,0x00,0xa2,0x90,0xc2,0x00,0x63,0x34,0x21,0x20,0x20,0x02,\r
+0x10,0x00,0x42,0x34,0x00,0x00,0xa2,0xa0,0x00,0x00,0x66,0xa4,0x04,0x00,0x22,0x8e,\r
+0x00,0x00,0x23,0x8e,0x00,0x00,0x00,0x00,0x00,0x00,0x43,0xac,0x04,0x00,0x62,0xac,\r
+0x00,0x00,0x31,0xae,0x56,0x15,0x00,0x0c,0x04,0x00,0x31,0xae,0x00,0x60,0x94,0x40,\r
+0x34,0x00,0xbf,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,\r
+0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27,0x08,0x00,0x25,0x8e,0x01,0x00,0x02,0x24,\r
+0x21,0x30,0x00,0x01,0x09,0x00,0x04,0x24,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa2,0xaf,\r
+0xb4,0x25,0x63,0x8e,0x00,0x00,0x00,0x00,0x21,0x18,0x70,0x00,0x2d,0x0a,0x00,0x08,\r
+0xb4,0x25,0x63,0xae,0xe8,0xff,0xbd,0x27,0x14,0x00,0xbf,0xaf,0x10,0x00,0xb0,0xaf,\r
+0x21,0x28,0x80,0x00,0x00,0x60,0x10,0x40,0x01,0x00,0x01,0x36,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0x25,0xb0,0x02,0x3c,0xbf,0x00,0x42,0x34,0x00,0x00,0x43,0x90,\r
+0x00,0x00,0x00,0x00,0x04,0x00,0x63,0x2c,0x05,0x00,0x60,0x10,0x02,0x80,0x06,0x3c,\r
+0x70,0x41,0xc3,0x8c,0x70,0x41,0xc2,0x24,0x0c,0x00,0x62,0x10,0x00,0x00,0x00,0x00,\r
+0x70,0x41,0xc2,0x24,0x04,0x00,0x43,0x8c,0x00,0x00,0xa2,0xac,0x04,0x00,0x45,0xac,\r
+0x00,0x00,0x65,0xac,0x04,0x00,0xa3,0xac,0x00,0x60,0x90,0x40,0x14,0x00,0xbf,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0xd9,0x09,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x00,0x60,0x90,0x40,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,\r
+0xd0,0xff,0xbd,0x27,0x18,0x03,0x42,0x34,0xf8,0x29,0x63,0x24,0x28,0x00,0xbf,0xaf,\r
+0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,\r
+0x00,0x00,0x43,0xac,0x02,0x80,0x04,0x3c,0x98,0x44,0x82,0x90,0x00,0x00,0x00,0x00,\r
+0x09,0x00,0x40,0x10,0x02,0x80,0x02,0x3c,0x02,0x80,0x02,0x3c,0xb1,0x44,0x43,0x90,\r
+0x00,0x00,0x00,0x00,0x61,0x00,0x60,0x10,0x02,0x80,0x02,0x3c,0x9c,0x1e,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,0x78,0x41,0x43,0x8c,0x78,0x41,0x42,0x24,\r
+0x66,0x00,0x62,0x10,0x02,0x80,0x13,0x3c,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x00,0x60,0x81,0x40,0x2a,0xb0,0x02,0x3c,0x36,0x00,0x42,0x34,0x00,0x00,0x43,0x90,\r
+0x78,0x1b,0x66,0x26,0xbc,0x25,0xc5,0x8c,0xc0,0x18,0x03,0x00,0x23,0xb0,0x04,0x3c,\r
+0xf0,0x07,0x63,0x30,0xff,0x1f,0x02,0x3c,0x21,0x18,0x64,0x00,0xff,0xff,0x42,0x34,\r
+0x24,0x20,0x62,0x00,0x23,0x88,0x85,0x00,0x00,0x04,0x22,0x26,0x2b,0x28,0x85,0x00,\r
+0x6c,0x25,0xc3,0x8c,0x0b,0x88,0x45,0x00,0xe1,0x01,0x22,0x2e,0x68,0x25,0xc3,0xac,\r
+0xc0,0x25,0xc4,0xac,0x72,0x25,0xc0,0xa4,0x14,0x00,0x40,0x14,0x71,0x25,0xc0,0xa0,\r
+0x20,0xfe,0x82,0x24,0x20,0x02,0x83,0x24,0x0a,0x18,0x45,0x00,0x23,0x10,0x02,0x3c,\r
+0xff,0x03,0x42,0x34,0x2b,0x10,0x43,0x00,0x21,0x28,0x60,0x00,0x34,0x00,0x40,0x14,\r
+0xbc,0x25,0xc3,0xac,0xc0,0x25,0xc2,0x8c,0x00,0x00,0x00,0x00,0x2b,0x18,0x45,0x00,\r
+0x23,0x88,0x45,0x00,0x03,0x00,0x60,0x10,0xe1,0x01,0x22,0x2e,0x00,0x04,0x31,0x26,\r
+0xe1,0x01,0x22,0x2e,0x0e,0x00,0x40,0x10,0x78,0x1b,0x70,0x26,0x78,0x1b,0x70,0x26,\r
+0xc0,0x25,0x03,0x8e,0xbc,0x25,0x04,0x8e,0x00,0x00,0x00,0x00,0x2b,0x10,0x83,0x00,\r
+0x41,0x00,0x40,0x14,0x2b,0x10,0x64,0x00,0x6d,0x00,0x40,0x14,0x25,0xb0,0x02,0x3c,\r
+0x80,0x00,0x03,0x24,0xd0,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x78,0x1b,0x70,0x26,\r
+0xbc,0x25,0x03,0x96,0x2a,0xb0,0x02,0x3c,0x35,0x00,0x42,0x34,0xc2,0x88,0x03,0x00,\r
+0x00,0x00,0x51,0xa0,0x45,0x18,0x00,0x0c,0x00,0x00,0x00,0x00,0x72,0x25,0x03,0x96,\r
+0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x08,0x0b,0x02,0x8e,\r
+0x80,0x00,0x03,0x3c,0x41,0xb0,0x04,0x3c,0x25,0x10,0x43,0x00,0x00,0x00,0x82,0xac,\r
+0x28,0x00,0xbf,0x8f,0x08,0x0b,0x02,0xae,0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,\r
+0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x30,0x00,0xbd,0x27,\r
+0x00,0xfc,0xa5,0x24,0xbd,0x0a,0x00,0x08,0xbc,0x25,0xc5,0xac,0x01,0x00,0x04,0x24,\r
+0xba,0x44,0x44,0xa0,0x02,0x80,0x03,0x3c,0x99,0x44,0x64,0x90,0x02,0x80,0x13,0x3c,\r
+0xf9,0x1f,0x00,0x0c,0xff,0x00,0x84,0x30,0x02,0x80,0x02,0x3c,0x78,0x41,0x43,0x8c,\r
+0x78,0x41,0x42,0x24,0x9c,0xff,0x62,0x14,0x00,0x00,0x00,0x00,0x90,0x1e,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x98,0xff,0x40,0x10,0x78,0x1b,0x63,0x26,0x82,0x0b,0x62,0x90,\r
+0x00,0x00,0x00,0x00,0x94,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0x98,0x26,0x64,0x94,\r
+0x82,0x0b,0x60,0xa0,0x00,0xc0,0x84,0x24,0x2c,0x22,0x00,0x0c,0xff,0xff,0x84,0x30,\r
+0x9a,0x0a,0x00,0x08,0x00,0x00,0x00,0x00,0x68,0x25,0x05,0x8e,0x21,0x30,0x80,0x00,\r
+0xff,0xff,0x27,0x32,0x09,0x00,0x04,0x24,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,\r
+0x68,0x25,0x03,0x8e,0x72,0x25,0x05,0x96,0xbc,0x25,0x02,0x8e,0x21,0x18,0x71,0x00,\r
+0x21,0x28,0x25,0x02,0x21,0x10,0x51,0x00,0x09,0x00,0x04,0x24,0xbc,0x25,0x02,0xae,\r
+0x68,0x25,0x03,0xae,0x00,0x02,0x00,0x0c,0x72,0x25,0x05,0xa6,0x78,0x1b,0x70,0x26,\r
+0xbc,0x25,0x03,0x96,0x2a,0xb0,0x02,0x3c,0x35,0x00,0x42,0x34,0xc2,0x88,0x03,0x00,\r
+0x00,0x00,0x51,0xa0,0x45,0x18,0x00,0x0c,0x00,0x00,0x00,0x00,0x72,0x25,0x03,0x96,\r
+0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x08,0x0b,0x02,0x8e,\r
+0x80,0x00,0x03,0x3c,0x41,0xb0,0x04,0x3c,0x25,0x10,0x43,0x00,0x00,0x00,0x82,0xac,\r
+0x28,0x00,0xbf,0x8f,0x08,0x0b,0x02,0xae,0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,\r
+0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x30,0x00,0xbd,0x27,\r
+0xc4,0x25,0x02,0x8e,0x68,0x25,0x05,0x8e,0x21,0x30,0x80,0x00,0x23,0x88,0x44,0x00,\r
+0xff,0xff,0x27,0x32,0x09,0x00,0x04,0x24,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,\r
+0x68,0x25,0x03,0x8e,0x72,0x25,0x02,0x96,0xc0,0x25,0x12,0x96,0x21,0x18,0x71,0x00,\r
+0x21,0x10,0x22,0x02,0x23,0x10,0x11,0x3c,0x68,0x25,0x03,0xae,0x72,0x25,0x02,0xa6,\r
+0x06,0x00,0x40,0x16,0xbc,0x25,0x11,0xae,0x09,0x00,0x04,0x24,0x00,0x02,0x00,0x0c,\r
+0x78,0x1b,0x70,0x26,0x20,0x0b,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x0c,\r
+0x09,0x00,0x04,0x24,0x68,0x25,0x05,0x8e,0x09,0x00,0x04,0x24,0x23,0x10,0x06,0x3c,\r
+0x21,0x38,0x40,0x02,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x68,0x25,0x03,0x8e,\r
+0x72,0x25,0x02,0x96,0x21,0x20,0x51,0x02,0x21,0x18,0x72,0x00,0x21,0x10,0x42,0x02,\r
+0xbc,0x25,0x04,0xae,0x09,0x00,0x04,0x24,0x68,0x25,0x03,0xae,0x4f,0x0b,0x00,0x08,\r
+0x72,0x25,0x02,0xa6,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x08,0x00,0x02,0x24,0xfc,0x00,0x84,0x30,\r
+0x50,0x00,0x02,0x24,0x11,0x00,0x82,0x10,0x05,0x00,0x03,0x24,0x51,0x00,0x82,0x28,\r
+0x10,0x00,0x40,0x10,0xa0,0x00,0x02,0x24,0x20,0x00,0x02,0x24,0x0b,0x00,0x82,0x10,\r
+0x02,0x00,0x03,0x24,0x21,0x00,0x82,0x28,0x15,0x00,0x40,0x14,0x30,0x00,0x02,0x24,\r
+0x06,0x00,0x82,0x10,0x03,0x00,0x03,0x24,0x04,0x00,0x03,0x24,0x40,0x00,0x02,0x24,\r
+0x02,0x00,0x82,0x10,0x00,0x00,0x00,0x00,0x0c,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x60,0x00,0xfd,0xff,0x82,0x10,0x08,0x00,0x03,0x24,0xa1,0x00,0x82,0x28,\r
+0x0c,0x00,0x40,0x10,0xc0,0x00,0x02,0x24,0x80,0x00,0x02,0x24,0xf7,0xff,0x82,0x10,\r
+0x06,0x00,0x03,0x24,0x07,0x00,0x03,0x24,0x84,0x0b,0x00,0x08,0x90,0x00,0x02,0x24,\r
+0xf2,0xff,0x80,0x10,0x21,0x18,0x00,0x00,0x01,0x00,0x03,0x24,0x84,0x0b,0x00,0x08,\r
+0x10,0x00,0x02,0x24,0xed,0xff,0x82,0x10,0x0a,0x00,0x03,0x24,0xc1,0x00,0x82,0x28,\r
+0x04,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x09,0x00,0x03,0x24,0x84,0x0b,0x00,0x08,\r
+0xb0,0x00,0x02,0x24,0x0b,0x00,0x03,0x24,0x84,0x0b,0x00,0x08,0xd0,0x00,0x02,0x24,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x3c,0x25,0xb0,0x04,0x3c,\r
+0x98,0x2e,0x63,0x24,0x18,0x03,0x84,0x34,0x00,0x00,0x83,0xac,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x00,0x80,0x03,0x3c,\r
+0x25,0xb0,0x04,0x3c,0xdc,0x2e,0x63,0x24,0x18,0x03,0x84,0x34,0x00,0x00,0x83,0xac,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x3c,0x25,0xb0,0x04,0x3c,\r
+0xf8,0x2e,0x63,0x24,0x18,0x03,0x84,0x34,0x00,0x00,0x83,0xac,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x00,0x80,0x03,0x3c,\r
+0x25,0xb0,0x02,0x3c,0x7c,0x2f,0x63,0x24,0x18,0x03,0x42,0x34,0x00,0x00,0x43,0xac,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x25,0xb0,0x03,0x3c,0x00,0x80,0x02,0x3c,\r
+0xb0,0x03,0x65,0x34,0x98,0x2f,0x42,0x24,0x18,0x03,0x63,0x34,0x00,0x00,0x62,0xac,\r
+0x00,0x00,0xa4,0xac,0x00,0x00,0x83,0x8c,0x21,0x10,0x00,0x00,0xff,0x3f,0x63,0x30,\r
+0x00,0x00,0xa3,0xac,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x98,0xff,0xbd,0x27,0x60,0x00,0xbe,0xaf,0x5c,0x00,0xb7,0xaf,\r
+0x48,0x00,0xb2,0xaf,0x44,0x00,0xb1,0xaf,0x64,0x00,0xbf,0xaf,0x58,0x00,0xb6,0xaf,\r
+0x54,0x00,0xb5,0xaf,0x50,0x00,0xb4,0xaf,0x4c,0x00,0xb3,0xaf,0x40,0x00,0xb0,0xaf,\r
+0x21,0x88,0x80,0x00,0x02,0x00,0x84,0x90,0x21,0xf0,0x00,0x00,0x21,0xb8,0x00,0x00,\r
+0x0f,0x00,0x84,0x30,0xc0,0x20,0x04,0x00,0x21,0x20,0x91,0x00,0x18,0x00,0x92,0x24,\r
+0x00,0x60,0x13,0x40,0x01,0x00,0x61,0x36,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x02,0x80,0x05,0x3c,0x28,0x00,0x84,0x24,0x18,0x42,0xa5,0x24,0x7b,0x46,0x00,0x0c,\r
+0x06,0x00,0x06,0x24,0xa6,0x00,0x40,0x14,0x02,0x80,0x14,0x3c,0x98,0x44,0x82,0x92,\r
+0x00,0x00,0x00,0x00,0xb0,0x00,0x40,0x10,0x02,0x80,0x02,0x3c,0x78,0x1b,0x43,0x24,\r
+0xe8,0x0a,0x62,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30,0xaa,0x00,0x40,0x10,\r
+0x02,0x80,0x09,0x3c,0xb9,0x44,0x22,0x91,0x00,0x00,0x00,0x00,0x06,0x00,0x40,0x10,\r
+0x02,0x80,0x02,0x3c,0xb9,0x44,0x22,0x91,0x00,0x00,0x00,0x00,0xff,0xff,0x42,0x24,\r
+0xb9,0x44,0x22,0xa1,0x02,0x80,0x02,0x3c,0x9e,0x44,0x40,0xa0,0x02,0x80,0x03,0x3c,\r
+0xb2,0x44,0x62,0x90,0xfd,0xff,0x03,0x24,0x42,0xb0,0x04,0x3c,0x24,0x10,0x43,0x00,\r
+0x02,0x80,0x03,0x3c,0xb2,0x44,0x62,0xa0,0x00,0x00,0x83,0x90,0xef,0xff,0x02,0x24,\r
+0x03,0x00,0x85,0x34,0x24,0x18,0x62,0x00,0x40,0x00,0x02,0x24,0x00,0x00,0x83,0xa0,\r
+0x02,0x80,0x16,0x3c,0x00,0x00,0xa2,0xa0,0xa0,0x44,0xc2,0x96,0x20,0x00,0x43,0x96,\r
+0xff,0xff,0x42,0x30,0x0a,0x00,0x43,0x10,0x02,0x80,0x15,0x3c,0x25,0xb0,0x02,0x3c,\r
+0x94,0x00,0x42,0x34,0xa0,0x44,0xc3,0xa6,0x00,0x00,0x43,0xa4,0xa0,0x44,0xc3,0x96,\r
+0x00,0x00,0x00,0x00,0xff,0xff,0x63,0x30,0x80,0x1a,0x03,0x00,0xa4,0x44,0xa3,0xae,\r
+0x25,0xb0,0x10,0x3c,0x84,0x00,0x02,0x36,0x00,0x00,0x44,0x8c,0x80,0x00,0x10,0x36,\r
+0x00,0x00,0x02,0x8e,0xa4,0x44,0xa6,0x8e,0x21,0x18,0x00,0x00,0x00,0x28,0x04,0x00,\r
+0x21,0x20,0x00,0x00,0x25,0x28,0xa3,0x00,0x25,0x20,0x82,0x00,0x24,0x22,0x00,0x0c,\r
+0x38,0x00,0xa9,0xaf,0x02,0x80,0x05,0x3c,0x00,0x00,0x04,0x8e,0xa4,0x44,0xa6,0x8e,\r
+0xa8,0x44,0xa3,0x94,0x23,0x20,0x82,0x00,0x21,0x20,0x86,0x00,0xff,0xff,0x63,0x30,\r
+0x80,0x1a,0x03,0x00,0x23,0x20,0x83,0x00,0x02,0x80,0x08,0x3c,0xac,0x44,0x04,0xad,\r
+0x00,0x00,0x02,0x8e,0x21,0x18,0x00,0x00,0x21,0x38,0x00,0x00,0x00,0x50,0x42,0x24,\r
+0x00,0x50,0x45,0x2c,0x21,0x18,0x65,0x00,0x2b,0x20,0xe3,0x00,0xac,0x44,0x06,0x8d,\r
+0x38,0x00,0xa9,0x8f,0x8f,0x00,0x80,0x14,0x00,0x00,0x00,0x00,0x8b,0x00,0x67,0x10,\r
+0x2b,0x10,0xc2,0x00,0xac,0x44,0x04,0x8d,0x25,0xb0,0x02,0x3c,0xe4,0x02,0x42,0x34,\r
+0x00,0x00,0x44,0xac,0xa0,0x44,0xc3,0x96,0x02,0x80,0x02,0x3c,0x05,0x00,0x05,0x24,\r
+0xff,0xff,0x63,0x30,0x40,0x18,0x03,0x00,0xf6,0xff,0x63,0x24,0x88,0x44,0x43,0xac,\r
+0x00,0x00,0x27,0x8e,0x24,0x00,0x44,0x26,0x30,0x00,0xa6,0x27,0xff,0x3f,0xe7,0x30,\r
+0x8a,0x11,0x00,0x0c,0xdc,0xff,0xe7,0x24,0x2c,0x00,0x40,0x10,0x21,0x28,0x40,0x00,\r
+0x98,0x44,0x82,0x92,0x02,0x00,0x03,0x24,0xff,0x00,0x42,0x30,0x7f,0x00,0x43,0x10,\r
+0x02,0x80,0x04,0x3c,0x02,0x00,0xa2,0x90,0x00,0x00,0x00,0x00,0x08,0x00,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0x04,0x00,0xa3,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x62,0x30,\r
+0x04,0x00,0x40,0x10,0x02,0x80,0x02,0x3c,0x01,0x00,0x17,0x24,0xb6,0x44,0x57,0xa0,\r
+0x04,0x00,0xa3,0x90,0x30,0x00,0xa7,0x8f,0x00,0x00,0x00,0x00,0x04,0x00,0xe2,0x28,\r
+0x16,0x00,0x40,0x14,0xfe,0x00,0x66,0x30,0x02,0x80,0x02,0x3c,0x78,0x1b,0x43,0x24,\r
+0x98,0x26,0x64,0x94,0xc0,0x10,0x06,0x00,0x2a,0x10,0x82,0x00,0x10,0x00,0x40,0x14,\r
+0x02,0x80,0x03,0x3c,0x21,0x10,0xc7,0x00,0xfd,0xff,0x42,0x24,0xc0,0x10,0x02,0x00,\r
+0x2a,0x10,0x44,0x00,0x0a,0x00,0x40,0x14,0xc2,0x10,0x04,0x00,0x23,0x30,0x46,0x00,\r
+0x21,0x18,0xa6,0x00,0x05,0x00,0x62,0x90,0x07,0x00,0x84,0x30,0x01,0x00,0x03,0x24,\r
+0x07,0x10,0x82,0x00,0x01,0x00,0x42,0x30,0x0b,0xf0,0x62,0x00,0x02,0x80,0x03,0x3c,\r
+0xb2,0x44,0x62,0x90,0xef,0xff,0x03,0x24,0x21,0x20,0xe0,0x02,0x24,0x10,0x43,0x00,\r
+0x02,0x80,0x03,0x3c,0xb2,0x44,0x62,0xa0,0x98,0x44,0x83,0x92,0x02,0x80,0x02,0x3c,\r
+0x10,0xaf,0x42,0x24,0xff,0x00,0x63,0x30,0x80,0x18,0x03,0x00,0x21,0x18,0x62,0x00,\r
+0x00,0x00,0x66,0x8c,0x00,0x00,0x00,0x00,0x09,0xf8,0xc0,0x00,0x21,0x28,0xc0,0x03,\r
+0x00,0x60,0x93,0x40,0x64,0x00,0xbf,0x8f,0x60,0x00,0xbe,0x8f,0x5c,0x00,0xb7,0x8f,\r
+0x58,0x00,0xb6,0x8f,0x54,0x00,0xb5,0x8f,0x50,0x00,0xb4,0x8f,0x4c,0x00,0xb3,0x8f,\r
+0x48,0x00,0xb2,0x8f,0x44,0x00,0xb1,0x8f,0x40,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x68,0x00,0xbd,0x27,0x98,0x44,0x82,0x92,0x00,0x00,0x00,0x00,\r
+0xef,0xff,0x40,0x14,0x02,0x80,0x03,0x3c,0x78,0x1b,0x70,0x24,0xe8,0x0a,0x02,0x92,\r
+0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30,0xe9,0xff,0x40,0x10,0x24,0x00,0x44,0x26,\r
+0x00,0x00,0x27,0x8e,0x05,0x00,0x05,0x24,0xff,0x3f,0xe7,0x30,0xdc,0xff,0xe7,0x24,\r
+0x8a,0x11,0x00,0x0c,0x30,0x00,0xa6,0x27,0xe1,0xff,0x40,0x10,0x21,0x28,0x40,0x00,\r
+0x30,0x00,0xa7,0x8f,0x04,0x00,0x42,0x90,0x04,0x00,0xe3,0x28,0xdc,0xff,0x60,0x14,\r
+0xfe,0x00,0x46,0x30,0x98,0x26,0x04,0x96,0xc0,0x10,0x06,0x00,0x2a,0x10,0x82,0x00,\r
+0xd7,0xff,0x40,0x14,0x21,0x10,0xc7,0x00,0xfd,0xff,0x42,0x24,0xc0,0x10,0x02,0x00,\r
+0x2a,0x10,0x44,0x00,0xd2,0xff,0x40,0x14,0xc2,0x10,0x04,0x00,0x23,0x30,0x46,0x00,\r
+0x21,0x18,0xa6,0x00,0x05,0x00,0x62,0x90,0x07,0x00,0x84,0x30,0x07,0x10,0x82,0x00,\r
+0x01,0x00,0x42,0x30,0xca,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0x0e,0x46,0x00,0x0c,\r
+0x21,0x20,0x00,0x00,0xc4,0x0c,0x00,0x08,0x00,0x00,0x00,0x00,0x75,0xff,0x40,0x10,\r
+0x00,0x00,0x00,0x00,0xb9,0x44,0x22,0x91,0x00,0x00,0x00,0x00,0x71,0xff,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0xb9,0x44,0x22,0x91,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24,\r
+0xb9,0x44,0x22,0xa1,0x75,0x0c,0x00,0x08,0x00,0x00,0x00,0x00,0x03,0x00,0xa2,0x90,\r
+0x02,0x80,0x07,0x3c,0xb4,0x44,0xe2,0xa0,0x02,0x00,0xa3,0x90,0x21,0x30,0x80,0x00,\r
+0xb5,0x44,0x83,0xa0,0xb5,0x44,0x82,0x90,0x00,0x00,0x00,0x00,0x06,0x00,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0xb4,0x44,0xe2,0x90,0x00,0x00,0x00,0x00,0xb5,0x44,0xc2,0xa0,\r
+0x8d,0x0c,0x00,0x08,0x00,0x00,0x00,0x00,0xb5,0x44,0x82,0x90,0x00,0x00,0x00,0x00,\r
+0xb5,0x44,0xc2,0xa0,0x8d,0x0c,0x00,0x08,0x00,0x00,0x00,0x00,0x02,0x80,0x09,0x3c,\r
+0x78,0x1b,0x28,0x25,0xf4,0x23,0x06,0x8d,0xff,0xff,0x02,0x34,0x44,0x00,0xc2,0x10,\r
+0x21,0x38,0x80,0x00,0x2b,0x10,0xc7,0x00,0x34,0x00,0x40,0x10,0x02,0x19,0x06,0x00,\r
+0x21,0x10,0xc7,0x00,0x23,0x10,0x43,0x00,0x10,0x00,0x46,0x24,0xf4,0x23,0x06,0xad,\r
+0xf8,0x23,0x02,0xad,0x78,0x1b,0x26,0x25,0x06,0x00,0xc4,0x94,0xff,0xff,0x02,0x34,\r
+0xff,0xff,0x83,0x30,0x33,0x00,0x62,0x10,0x00,0x11,0x07,0x00,0xff,0xff,0x84,0x30,\r
+0x2b,0x10,0x87,0x00,0x20,0x00,0x40,0x10,0x03,0x19,0x04,0x00,0x03,0x11,0x04,0x00,\r
+0x21,0x18,0x87,0x00,0x23,0x18,0x62,0x00,0x10,0x00,0x64,0x24,0x06,0x00,0xc4,0xa4,\r
+0xf8,0x23,0xc3,0xac,0xc0,0x10,0x05,0x00,0x21,0x10,0x45,0x00,0x80,0x10,0x02,0x00,\r
+0x21,0x10,0x45,0x00,0x78,0x1b,0x23,0x25,0x80,0x10,0x02,0x00,0x21,0x28,0x43,0x00,\r
+0x80,0x11,0xa6,0x8c,0x00,0x21,0x07,0x00,0xff,0xff,0xc2,0x38,0x0a,0x30,0x82,0x00,\r
+0x2b,0x18,0xc7,0x00,0x07,0x00,0x60,0x10,0x21,0x10,0xc7,0x00,0x02,0x19,0x06,0x00,\r
+0x23,0x10,0x43,0x00,0x10,0x00,0x46,0x24,0x80,0x11,0xa6,0xac,0x08,0x00,0xe0,0x03,\r
+0x84,0x11,0xa2,0xac,0x02,0x19,0x06,0x00,0x23,0x10,0x43,0x00,0x80,0x11,0xa2,0xac,\r
+0x08,0x00,0xe0,0x03,0x84,0x11,0xa2,0xac,0x21,0x10,0x87,0x00,0x23,0x10,0x43,0x00,\r
+0x06,0x00,0xc2,0xa4,0x3d,0x0d,0x00,0x08,0xf8,0x23,0xc2,0xac,0x21,0x10,0xc7,0x00,\r
+0x23,0x10,0x43,0x00,0xf4,0x23,0x02,0xad,0xf8,0x23,0x02,0xad,0x78,0x1b,0x26,0x25,\r
+0x06,0x00,0xc4,0x94,0xff,0xff,0x02,0x34,0xff,0xff,0x83,0x30,0xcf,0xff,0x62,0x14,\r
+0x00,0x11,0x07,0x00,0x21,0x20,0x40,0x00,0x33,0x0d,0x00,0x08,0x06,0x00,0xc2,0xa4,\r
+0x00,0x31,0x04,0x00,0x25,0x0d,0x00,0x08,0xf4,0x23,0x06,0xad,0x63,0x00,0x82,0x24,\r
+0x77,0x00,0x42,0x2c,0x00,0x00,0x85,0x28,0x04,0x00,0x40,0x10,0x21,0x18,0x00,0x00,\r
+0x64,0x00,0x82,0x24,0x64,0x00,0x03,0x24,0x0b,0x18,0x45,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x60,0x00,0xe8,0xff,0xbd,0x27,0x10,0x00,0xbf,0xaf,0x0c,0x00,0x82,0x8c,\r
+0x00,0x00,0x00,0x00,0x3f,0x00,0x42,0x30,0x04,0x00,0x42,0x28,0x07,0x00,0x40,0x14,\r
+0x25,0xb0,0x02,0x3c,0x04,0x00,0xa4,0x90,0x10,0x00,0xbf,0x8f,0x18,0x00,0xbd,0x27,\r
+0x42,0x20,0x04,0x00,0x6b,0x0d,0x00,0x08,0x96,0xff,0x84,0x24,0x24,0x08,0x42,0x34,\r
+0x00,0x00,0x43,0x8c,0x00,0x00,0x00,0x00,0x00,0x02,0x63,0x30,0x1b,0x00,0x60,0x14,\r
+0x01,0x00,0x02,0x24,0x05,0x00,0xa3,0x90,0x00,0x00,0x00,0x00,0x82,0x21,0x03,0x00,\r
+0x3c,0x00,0x82,0x10,0x02,0x00,0x82,0x28,0x57,0x00,0x40,0x14,0x02,0x00,0x02,0x24,\r
+0x46,0x00,0x82,0x10,0x03,0x00,0x02,0x24,0x2e,0x00,0x82,0x10,0x3e,0x00,0x63,0x30,\r
+0x6b,0x0d,0x00,0x0c,0x21,0x20,0xc0,0x00,0x06,0x00,0x45,0x24,0x65,0x00,0xa4,0x2c,\r
+0x64,0x00,0x03,0x24,0x0a,0x28,0x64,0x00,0xdd,0xff,0xa2,0x24,0x08,0x00,0x42,0x2c,\r
+0x1f,0x00,0x40,0x10,0xe5,0xff,0xa2,0x24,0xfe,0xff,0xa5,0x24,0x10,0x00,0xbf,0x8f,\r
+0x21,0x10,0xa0,0x00,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x05,0x00,0xa3,0x90,\r
+0x00,0x00,0x00,0x00,0x60,0x00,0x64,0x30,0x42,0x21,0x04,0x00,0x25,0x00,0x82,0x10,\r
+0x02,0x00,0x82,0x28,0x36,0x00,0x40,0x14,0x02,0x00,0x02,0x24,0x2f,0x00,0x82,0x10,\r
+0x03,0x00,0x02,0x24,0xe6,0xff,0x82,0x14,0x1f,0x00,0x62,0x30,0x40,0x10,0x02,0x00,\r
+0xd8,0xff,0x03,0x24,0x23,0x30,0x62,0x00,0x6b,0x0d,0x00,0x0c,0x21,0x20,0xc0,0x00,\r
+0x06,0x00,0x45,0x24,0x65,0x00,0xa4,0x2c,0x64,0x00,0x03,0x24,0x0a,0x28,0x64,0x00,\r
+0xdd,0xff,0xa2,0x24,0x08,0x00,0x42,0x2c,0xe3,0xff,0x40,0x14,0xe5,0xff,0xa2,0x24,\r
+0x08,0x00,0x42,0x2c,0x06,0x00,0x40,0x10,0xf1,0xff,0xa2,0x24,0x9f,0x0d,0x00,0x08,\r
+0xfa,0xff,0xa5,0x24,0xd8,0xff,0x02,0x24,0x94,0x0d,0x00,0x08,0x23,0x30,0x43,0x00,\r
+0x0c,0x00,0x42,0x2c,0x0c,0x00,0x40,0x10,0xfb,0xff,0xa2,0x24,0x9f,0x0d,0x00,0x08,\r
+0xf8,0xff,0xa5,0x24,0x3e,0x00,0x63,0x30,0xfe,0xff,0x02,0x24,0x94,0x0d,0x00,0x08,\r
+0x23,0x30,0x43,0x00,0x1f,0x00,0x62,0x30,0x40,0x10,0x02,0x00,0xfe,0xff,0x03,0x24,\r
+0xb2,0x0d,0x00,0x08,0x23,0x30,0x62,0x00,0x0a,0x00,0x42,0x2c,0xcb,0xff,0x40,0x10,\r
+0x00,0x00,0x00,0x00,0x9f,0x0d,0x00,0x08,0xfc,0xff,0xa5,0x24,0x3e,0x00,0x63,0x30,\r
+0xec,0xff,0x02,0x24,0x94,0x0d,0x00,0x08,0x23,0x30,0x43,0x00,0x1f,0x00,0x62,0x30,\r
+0x40,0x10,0x02,0x00,0xec,0xff,0x03,0x24,0xb2,0x0d,0x00,0x08,0x23,0x30,0x62,0x00,\r
+0xb3,0xff,0x80,0x14,0x1f,0x00,0x62,0x30,0x40,0x10,0x02,0x00,0x0e,0x00,0x03,0x24,\r
+0xb2,0x0d,0x00,0x08,0x23,0x30,0x62,0x00,0xad,0xff,0x80,0x14,0x3e,0x00,0x63,0x30,\r
+0x0e,0x00,0x02,0x24,0x94,0x0d,0x00,0x08,0x23,0x30,0x43,0x00,0xa0,0xff,0xbd,0x27,\r
+0x5c,0x00,0xbf,0xaf,0x58,0x00,0xbe,0xaf,0x54,0x00,0xb7,0xaf,0x50,0x00,0xb6,0xaf,\r
+0x4c,0x00,0xb5,0xaf,0x48,0x00,0xb4,0xaf,0x44,0x00,0xb3,0xaf,0x40,0x00,0xb2,0xaf,\r
+0x3c,0x00,0xb1,0xaf,0x38,0x00,0xb0,0xaf,0x02,0x80,0x02,0x3c,0x68,0x41,0x45,0x8c,\r
+0x00,0x80,0x04,0x3c,0xac,0x37,0x83,0x24,0x68,0x41,0x44,0x24,0x25,0xb0,0x02,0x3c,\r
+0x18,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0xbb,0x00,0xa4,0x10,0x02,0x80,0x02,0x3c,\r
+0x02,0x80,0x03,0x3c,0x7c,0xaf,0x42,0x24,0x80,0xaf,0x63,0x24,0x00,0x00,0x5e,0x8c,\r
+0x00,0x00,0x75,0x8c,0xf0,0x25,0xd6,0x8f,0x21,0x20,0x00,0x00,0x21,0xb8,0x00,0x00,\r
+0x08,0x00,0xc2,0x8e,0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0xae,0x08,0x00,0xc3,0x96,\r
+0x02,0x80,0x02,0x3c,0x00,0x02,0x00,0x0c,0x25,0xa0,0x62,0x00,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0xe4,0x0a,0xc3,0x97,\r
+0x8c,0x25,0xc2,0x8f,0x25,0xb0,0x04,0x3c,0xf8,0x00,0x84,0x34,0x21,0x10,0x43,0x00,\r
+0x00,0x00,0x82,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,\r
+0x23,0x0e,0x00,0x08,0x00,0x00,0x00,0x00,0x0c,0x00,0xc2,0x8e,0x00,0x00,0x00,0x00,\r
+0x2b,0x10,0xe2,0x02,0x86,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x8e,\r
+0x21,0x98,0x80,0x02,0x42,0x1b,0x02,0x00,0x78,0x00,0x63,0x30,0x02,0x26,0x02,0x00,\r
+0xff,0x3f,0x42,0x30,0x21,0x10,0x43,0x00,0x03,0x00,0x84,0x30,0x21,0x10,0x44,0x00,\r
+0x18,0x00,0x42,0x24,0xff,0xff,0x52,0x30,0x7f,0x00,0x43,0x32,0x00,0x00,0xb2,0xae,\r
+0x03,0x00,0x60,0x10,0x80,0xff,0x42,0x32,0x80,0x00,0x42,0x26,0x80,0xff,0x42,0x30,\r
+0x00,0x00,0xa2,0xae,0x21,0x90,0x40,0x00,0x02,0x00,0x62,0x96,0x21,0x18,0xf2,0x02,\r
+0xff,0xff,0x77,0x30,0x0f,0x00,0x42,0x30,0x00,0x00,0xa2,0xae,0x00,0x00,0x63,0x8e,\r
+0x21,0xa0,0x92,0x02,0x42,0x13,0x03,0x00,0x78,0x00,0x42,0x30,0x02,0x1e,0x03,0x00,\r
+0x03,0x00,0x63,0x30,0x21,0x10,0x53,0x00,0x21,0x88,0x43,0x00,0x18,0x00,0x25,0x26,\r
+0x00,0x00,0xa5,0xae,0x01,0x00,0xa4,0x90,0x18,0x00,0x22,0x92,0x00,0x22,0x04,0x00,\r
+0x73,0x0b,0x00,0x0c,0x25,0x20,0x82,0x00,0x40,0x18,0x02,0x00,0x21,0x18,0x62,0x00,\r
+0x02,0x80,0x04,0x3c,0x21,0x80,0x40,0x00,0x80,0x18,0x03,0x00,0x98,0xa8,0x82,0x24,\r
+0x21,0x18,0x62,0x00,0x08,0x00,0x62,0x8c,0x00,0x00,0x00,0x00,0x09,0xf8,0x40,0x00,\r
+0x21,0x20,0x60,0x02,0x06,0x00,0x03,0x24,0xc7,0xff,0x03,0x16,0x00,0x00,0x00,0x00,\r
+0xe8,0x0a,0xc2,0x93,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30,0xc2,0xff,0x40,0x10,\r
+0x02,0x80,0x02,0x3c,0x28,0x00,0x24,0x26,0x18,0x42,0x45,0x24,0x7b,0x46,0x00,0x0c,\r
+0x06,0x00,0x06,0x24,0xbc,0xff,0x40,0x14,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,\r
+0xbc,0x44,0x64,0x8c,0x9c,0x44,0x43,0x90,0x02,0x80,0x02,0x3c,0x38,0xa9,0x45,0x8c,\r
+0xff,0x00,0x63,0x30,0x40,0x10,0x03,0x00,0x21,0x10,0x43,0x00,0xc0,0x10,0x02,0x00,\r
+0x21,0x10,0x43,0x00,0x23,0x20,0x85,0x00,0x80,0x10,0x02,0x00,0x2b,0x20,0x82,0x00,\r
+0xad,0xff,0x80,0x14,0x02,0x80,0x03,0x3c,0xbc,0x44,0x62,0x8c,0x21,0x20,0x40,0x02,\r
+0x02,0x80,0x03,0x3c,0x39,0x15,0x00,0x0c,0x38,0xa9,0x62,0xac,0x1d,0x01,0x40,0x10,\r
+0x21,0x88,0x40,0x00,0x00,0x00,0x65,0x8e,0x08,0x00,0x50,0x94,0x04,0x00,0x64,0x8e,\r
+0xf0,0xff,0x02,0x3c,0xff,0xff,0x42,0x34,0xe0,0xff,0x03,0x24,0x24,0x28,0xa2,0x00,\r
+0xff,0xfb,0x02,0x3c,0x24,0x20,0x83,0x00,0xff,0xff,0x42,0x34,0x02,0x80,0x03,0x3c,\r
+0x25,0x80,0x03,0x02,0x24,0x28,0xa2,0x00,0x1e,0x00,0x84,0x34,0x04,0x00,0x64,0xae,\r
+0x00,0x00,0x65,0xae,0x21,0x20,0x00,0x02,0x21,0x28,0x60,0x02,0x52,0x46,0x00,0x0c,\r
+0x06,0x00,0x06,0x24,0xc8,0xff,0x46,0x26,0xcb,0xff,0x43,0x26,0x00,0x00,0xc2,0x28,\r
+0x0b,0x30,0x62,0x00,0x18,0x00,0x04,0x26,0x83,0x30,0x06,0x00,0x52,0x46,0x00,0x0c,\r
+0x38,0x00,0x65,0x26,0x15,0x00,0x03,0x24,0x14,0x00,0x23,0xae,0x00,0x00,0x62,0x8e,\r
+0x21,0x20,0x20,0x02,0x42,0x1b,0x02,0x00,0x78,0x00,0x63,0x30,0x02,0x2e,0x02,0x00,\r
+0xff,0x3f,0x42,0x30,0x21,0x10,0x43,0x00,0x03,0x00,0xa5,0x30,0x21,0x10,0x45,0x00,\r
+0x18,0x00,0x42,0x24,0x59,0x0a,0x00,0x0c,0x0c,0x00,0x22,0xae,0x0c,0x00,0xc2,0x8e,\r
+0x00,0x00,0x00,0x00,0x2b,0x10,0xe2,0x02,0x7c,0xff,0x40,0x14,0x00,0x00,0x00,0x00,\r
+0x00,0x60,0x10,0x40,0x01,0x00,0x01,0x36,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x04,0x00,0xc3,0x8e,0x00,0x00,0xc2,0x8e,0x21,0x20,0xc0,0x02,0x00,0x00,0x62,0xac,\r
+0x04,0x00,0x43,0xac,0x00,0x00,0xd6,0xae,0x56,0x15,0x00,0x0c,0x04,0x00,0xd6,0xae,\r
+0x00,0x60,0x90,0x40,0x02,0x80,0x04,0x3c,0x68,0x41,0x83,0x8c,0x68,0x41,0x82,0x24,\r
+0x4c,0xff,0x62,0x14,0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,0x7c,0xaf,0x42,0x24,\r
+0x00,0x00,0x51,0x8c,0x25,0xb0,0x10,0x3c,0x04,0x01,0x02,0x36,0x00,0x00,0x43,0x8c,\r
+0xa4,0x25,0x27,0x8e,0x00,0x00,0x00,0x00,0xc5,0x00,0xe3,0x10,0xa8,0x25,0x23,0xae,\r
+0x2b,0x10,0x67,0x00,0xe4,0x00,0x40,0x14,0x2b,0x10,0xe3,0x00,0x0c,0x01,0x40,0x14,\r
+0x23,0x10,0x67,0x00,0x02,0x80,0x03,0x3c,0x78,0x1b,0x64,0x24,0x78,0x25,0x83,0x94,\r
+0x02,0x80,0x02,0x3c,0x21,0x90,0x00,0x00,0x22,0x00,0xe0,0x1a,0x25,0x88,0x62,0x00,\r
+0x21,0xa8,0x80,0x00,0x21,0xf0,0x80,0x00,0x21,0x80,0x00,0x00,0x01,0x00,0x14,0x24,\r
+0x21,0x98,0x11,0x02,0x04,0x00,0x62,0x8e,0x02,0x00,0x03,0x24,0x02,0x17,0x02,0x00,\r
+0x03,0x00,0x42,0x30,0x31,0x00,0x43,0x10,0x02,0x80,0x04,0x3c,0x21,0x10,0x11,0x02,\r
+0x00,0x00,0x43,0x8c,0x00,0x00,0x00,0x00,0x08,0x00,0x60,0x10,0x01,0x00,0x42,0x26,\r
+0x04,0x00,0x62,0x8e,0x00,0xf0,0x03,0x3c,0x00,0x20,0x04,0x3c,0x24,0x10,0x43,0x00,\r
+0x10,0x00,0x44,0x10,0x00,0x00,0x00,0x00,0x06,0x00,0x42,0x26,0x00,0x00,0x65,0x8e,\r
+0xff,0xff,0x52,0x30,0x82,0x16,0x05,0x00,0x01,0x00,0x42,0x30,0x4a,0x00,0x54,0x10,\r
+0x02,0x80,0x03,0x3c,0x80,0x80,0x12,0x00,0x2a,0x10,0x17,0x02,0xe4,0xff,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0x56,0x15,0x00,0x0c,0x21,0x20,0xc0,0x02,0x8e,0x0f,0x00,0x08,\r
+0x02,0x80,0x02,0x3c,0xc8,0x0c,0xa2,0x8e,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24,\r
+0xc8,0x0c,0xa2,0xae,0x0c,0x00,0x64,0x8e,0x0c,0x00,0x02,0x24,0x3f,0x00,0x83,0x30,\r
+0xa6,0x00,0x62,0x10,0x21,0x28,0xa0,0x02,0x3f,0x00,0x83,0x30,0x0d,0x00,0x02,0x24,\r
+0x9b,0x00,0x62,0x10,0x00,0x00,0x00,0x00,0x3f,0x00,0x83,0x30,0x0e,0x00,0x02,0x24,\r
+0xe2,0xff,0x62,0x14,0x06,0x00,0x42,0x26,0xd4,0x0c,0xa2,0x8e,0x00,0x00,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xe6,0x0e,0x00,0x08,0xd4,0x0c,0xa2,0xae,0x98,0x44,0x82,0x90,\r
+0x00,0x00,0x00,0x00,0xce,0xff,0x40,0x10,0x21,0x10,0x11,0x02,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x98,0x44,0x82,0x90,\r
+0x02,0x80,0x03,0x3c,0xe4,0xae,0x65,0x24,0xff,0x00,0x42,0x30,0x80,0x10,0x02,0x00,\r
+0x21,0x10,0x45,0x00,0x00,0x00,0x43,0x8c,0x00,0x00,0x64,0x8e,0x04,0x00,0x65,0x8e,\r
+0x09,0xf8,0x60,0x00,0x00,0x00,0x00,0x00,0x02,0x80,0x04,0x3c,0x9a,0x44,0x82,0x90,\r
+0x0c,0x00,0x03,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x10,0x02,0x80,0x03,0x3c,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0xdc,0x0e,0x00,0x08,\r
+0x21,0x10,0x11,0x02,0xb1,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0xf8,0xff,0x40,0x10,\r
+0x02,0x80,0x04,0x3c,0xb7,0x44,0x82,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24,\r
+0xb7,0x44,0x82,0xa0,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,\r
+0xdc,0x0e,0x00,0x08,0x21,0x10,0x11,0x02,0x78,0x1b,0x62,0x8c,0x00,0x00,0x00,0x00,\r
+0x02,0x11,0x02,0x00,0x03,0x00,0x42,0x30,0x05,0x00,0x54,0x10,0xc2,0x13,0x05,0x00,\r
+0x1e,0x00,0x42,0x30,0x21,0x10,0x52,0x00,0xed,0x0e,0x00,0x08,0xff,0xff,0x52,0x30,\r
+0x01,0x00,0xc2,0x93,0x00,0x00,0x00,0x00,0x1c,0x00,0x40,0x14,0x02,0x80,0x04,0x3c,\r
+0x04,0x00,0x64,0x8e,0x00,0x00,0x00,0x00,0x02,0x14,0x04,0x00,0x0f,0x00,0x45,0x30,\r
+0x08,0x00,0xa3,0x28,0x14,0x00,0x60,0x10,0x02,0x17,0x04,0x00,0x03,0x00,0x43,0x30,\r
+0x08,0x00,0x60,0x10,0x00,0xc0,0x02,0x3c,0x24,0x10,0x82,0x00,0x0e,0x00,0x40,0x14,\r
+0x03,0x00,0x02,0x24,0x0d,0x00,0x62,0x10,0x02,0x80,0x04,0x3c,0x0c,0x00,0x60,0x10,\r
+0x78,0x1b,0x82,0x24,0x21,0x10,0xbe,0x00,0xf0,0x04,0x50,0x90,0x80,0x28,0x12,0x00,\r
+0x21,0x28,0xb1,0x00,0x75,0x0d,0x00,0x0c,0x21,0x20,0x60,0x02,0x21,0x20,0x40,0x00,\r
+0x1f,0x0d,0x00,0x0c,0x21,0x28,0x00,0x02,0x02,0x80,0x04,0x3c,0x78,0x1b,0x82,0x24,\r
+0x01,0x00,0x43,0x90,0x00,0x00,0x00,0x00,0x89,0x00,0x74,0x10,0x00,0x00,0x00,0x00,\r
+0x02,0x80,0x04,0x3c,0x78,0x1b,0x84,0x24,0x01,0x00,0x83,0x90,0x02,0x00,0x02,0x24,\r
+0x08,0x00,0x62,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x65,0x8e,0x00,0x00,0x00,0x00,\r
+0xc2,0x13,0x05,0x00,0x1e,0x00,0x42,0x30,0x21,0x10,0x52,0x00,0xed,0x0e,0x00,0x08,\r
+0xff,0xff,0x52,0x30,0x04,0x00,0x64,0x8e,0x00,0x00,0x00,0x00,0x02,0x14,0x04,0x00,\r
+0x0f,0x00,0x45,0x30,0x08,0x00,0xa3,0x28,0xf3,0xff,0x60,0x10,0x02,0x17,0x04,0x00,\r
+0x03,0x00,0x42,0x30,0xf0,0xff,0x40,0x14,0x02,0x80,0x03,0x3c,0x78,0x1b,0x63,0x24,\r
+0x21,0x10,0xa3,0x00,0xf0,0x04,0x50,0x90,0x80,0x28,0x12,0x00,0x21,0x28,0xb1,0x00,\r
+0x75,0x0d,0x00,0x0c,0x21,0x20,0x60,0x02,0x21,0x20,0x40,0x00,0x1f,0x0d,0x00,0x0c,\r
+0x21,0x28,0x00,0x02,0x00,0x00,0x65,0x8e,0x6d,0x0f,0x00,0x08,0xc2,0x13,0x05,0x00,\r
+0x02,0x80,0x04,0x3c,0x00,0x01,0x02,0x36,0x78,0x1b,0x84,0x24,0x00,0x00,0x47,0xac,\r
+0xa4,0x25,0x87,0xac,0x02,0x80,0x02,0x3c,0x08,0x04,0x44,0x24,0x21,0x28,0x00,0x00,\r
+0x21,0x30,0x00,0x00,0x2d,0x28,0x00,0x0c,0x21,0x38,0x00,0x00,0xf7,0x0d,0x00,0x08,\r
+0x02,0x80,0x02,0x3c,0x99,0x99,0x03,0x3c,0x25,0xb0,0x02,0x3c,0x96,0x99,0x63,0x34,\r
+0x18,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x1e,0x0e,0x00,0x08,0x00,0x00,0x00,0x00,\r
+0xd0,0x0c,0xa2,0x8c,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24,0xd0,0x0c,0xa2,0xac,\r
+0x0c,0x00,0x64,0x8e,0x03,0x0f,0x00,0x08,0x3f,0x00,0x83,0x30,0xcc,0x0c,0xa2,0x8e,\r
+0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24,0xcc,0x0c,0xa2,0xae,0x0c,0x00,0x64,0x8e,\r
+0xff,0x0e,0x00,0x08,0x3f,0x00,0x83,0x30,0xac,0x25,0x22,0x8e,0xff,0xff,0x73,0x30,\r
+0x23,0x10,0x47,0x00,0xff,0xff,0x52,0x30,0x21,0x18,0x53,0x02,0xff,0xff,0x77,0x30,\r
+0x39,0x15,0x00,0x0c,0x21,0x20,0xe0,0x02,0xda,0xff,0x40,0x10,0x21,0xb0,0x40,0x00,\r
+0x08,0x00,0x42,0x8c,0xa4,0x25,0x26,0x8e,0x21,0x38,0x40,0x02,0x21,0x18,0x57,0x00,\r
+0x74,0x25,0x23,0xae,0x21,0x28,0x40,0x00,0x08,0x00,0x04,0x24,0x78,0x25,0x22,0xae,\r
+0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x00,0x02,0x00,0x0c,0x08,0x00,0x04,0x24,\r
+0x78,0x25,0x25,0x8e,0x24,0x10,0x02,0x3c,0x00,0x01,0x10,0x36,0x00,0x00,0x02,0xae,\r
+0x21,0x38,0x60,0x02,0x21,0x28,0xb2,0x00,0x08,0x00,0x04,0x24,0x24,0x10,0x06,0x3c,\r
+0xa4,0x25,0x22,0xae,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0xa8,0x25,0x23,0x8e,\r
+0x08,0x00,0x04,0x24,0x00,0x02,0x00,0x0c,0xa4,0x25,0x23,0xae,0xa4,0x25,0x22,0x8e,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x02,0xae,0xca,0x0e,0x00,0x08,0x02,0x80,0x03,0x3c,\r
+0xff,0xff,0x57,0x30,0x39,0x15,0x00,0x0c,0x21,0x20,0xe0,0x02,0x42,0x00,0x40,0x10,\r
+0x21,0xb0,0x40,0x00,0x08,0x00,0x42,0x8c,0xa4,0x25,0x26,0x8e,0x08,0x00,0x04,0x24,\r
+0x21,0x18,0x57,0x00,0x74,0x25,0x23,0xae,0x21,0x28,0x40,0x00,0x21,0x38,0xe0,0x02,\r
+0x78,0x25,0x22,0xae,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0xa8,0x25,0x23,0x8e,\r
+0x08,0x00,0x04,0x24,0x00,0x02,0x00,0x0c,0xa4,0x25,0x23,0xae,0xa4,0x25,0x23,0x8e,\r
+0x00,0x01,0x02,0x36,0x00,0x00,0x43,0xac,0xca,0x0e,0x00,0x08,0x02,0x80,0x03,0x3c,\r
+0x04,0x00,0x64,0x8e,0x00,0x00,0x00,0x00,0x02,0x14,0x04,0x00,0x0f,0x00,0x42,0x30,\r
+0x08,0x00,0x42,0x28,0x06,0x00,0x40,0x10,0x00,0xc0,0x02,0x3c,0x02,0x17,0x04,0x00,\r
+0x03,0x00,0x42,0x30,0x0b,0x00,0x40,0x10,0x02,0x80,0x03,0x3c,0x00,0xc0,0x02,0x3c,\r
+0x24,0x10,0x82,0x00,0x6a,0xff,0x40,0x14,0x02,0x17,0x04,0x00,0x03,0x00,0x42,0x30,\r
+0x03,0x00,0x03,0x24,0x66,0xff,0x43,0x10,0x00,0x00,0x00,0x00,0x64,0xff,0x40,0x10,\r
+0x02,0x80,0x03,0x3c,0x78,0x1b,0x62,0x8c,0x00,0x00,0x00,0x00,0x42,0x10,0x02,0x00,\r
+0x01,0x00,0x42,0x30,0x06,0x00,0x54,0x14,0x21,0x80,0x00,0x00,0x02,0x14,0x04,0x00,\r
+0x0f,0x00,0x42,0x30,0x78,0x1b,0x63,0x24,0x21,0x10,0x43,0x00,0xf0,0x04,0x50,0x90,\r
+0x80,0x28,0x12,0x00,0x21,0x28,0xb1,0x00,0xec,0xff,0xa2,0x8c,0x25,0xb0,0x03,0x3c,\r
+0xd4,0x02,0x63,0x34,0x21,0x20,0x60,0x02,0x00,0x00,0x62,0xac,0x75,0x0d,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x21,0x20,0x40,0x00,0x1f,0x0d,0x00,0x0c,0x21,0x28,0x00,0x02,\r
+0x65,0x0f,0x00,0x08,0x02,0x80,0x04,0x3c,0xa8,0x25,0x23,0x8e,0x00,0x01,0x02,0x36,\r
+0x00,0x00,0x43,0xac,0x8d,0x0f,0x00,0x08,0xa4,0x25,0x23,0xae,0xe0,0xff,0xbd,0x27,\r
+0x10,0x00,0xb0,0xaf,0x18,0x00,0xbf,0xaf,0x14,0x00,0xb1,0xaf,0x0c,0x00,0x82,0x8c,\r
+0x00,0x00,0x00,0x00,0x3f,0x00,0x42,0x30,0x04,0x00,0x42,0x28,0x29,0x00,0x40,0x14,\r
+0x21,0x80,0xa0,0x00,0x00,0x00,0xa4,0x8c,0x02,0x80,0x11,0x3c,0x3f,0x00,0x84,0x30,\r
+0x40,0x20,0x04,0x00,0x6b,0x0d,0x00,0x0c,0x96,0xff,0x84,0x24,0x78,0x1b,0x25,0x26,\r
+0xfc,0x23,0xa4,0x8c,0x21,0x18,0x40,0x00,0xff,0xff,0x02,0x34,0x3c,0x00,0x82,0x10,\r
+0x00,0x00,0x00,0x00,0x2b,0x10,0x83,0x00,0x27,0x00,0x40,0x10,0x21,0x10,0x83,0x00,\r
+0x21,0x18,0x83,0x00,0x02,0x11,0x04,0x00,0x23,0x20,0x62,0x00,0x10,0x00,0x84,0x24,\r
+0xfc,0x23,0xa4,0xac,0x00,0x00,0x04,0x8e,0x00,0x00,0x00,0x00,0xc2,0x21,0x04,0x00,\r
+0x7e,0x00,0x84,0x30,0x6b,0x0d,0x00,0x0c,0x96,0xff,0x84,0x24,0x78,0x1b,0x25,0x26,\r
+0x00,0x24,0xa4,0x8c,0x21,0x18,0x40,0x00,0xff,0xff,0x02,0x34,0x25,0x00,0x82,0x10,\r
+0x00,0x00,0x00,0x00,0x2b,0x10,0x83,0x00,0x0b,0x00,0x40,0x10,0x21,0x10,0x83,0x00,\r
+0x21,0x18,0x83,0x00,0x02,0x11,0x04,0x00,0x23,0x20,0x62,0x00,0x10,0x00,0x84,0x24,\r
+0x00,0x24,0xa4,0xac,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x02,0x19,0x04,0x00,0x23,0x10,0x43,0x00,0x20,0x00,0xbd,0x27,\r
+0x08,0x00,0xe0,0x03,0x00,0x24,0xa2,0xac,0x02,0x19,0x04,0x00,0x23,0x10,0x43,0x00,\r
+0xfc,0x23,0xa2,0xac,0x00,0x00,0x04,0x8e,0x00,0x00,0x00,0x00,0xc2,0x21,0x04,0x00,\r
+0x7e,0x00,0x84,0x30,0x6b,0x0d,0x00,0x0c,0x96,0xff,0x84,0x24,0x78,0x1b,0x25,0x26,\r
+0x00,0x24,0xa4,0x8c,0x21,0x18,0x40,0x00,0xff,0xff,0x02,0x34,0xde,0xff,0x82,0x14,\r
+0x2b,0x10,0x83,0x00,0x00,0x21,0x03,0x00,0x49,0x10,0x00,0x08,0x00,0x24,0xa4,0xac,\r
+0x00,0x21,0x03,0x00,0x35,0x10,0x00,0x08,0xfc,0x23,0xa4,0xac,0xb8,0xff,0xbd,0x27,\r
+0x25,0xb0,0x03,0x3c,0x44,0x00,0xbf,0xaf,0x40,0x00,0xbe,0xaf,0x3c,0x00,0xb7,0xaf,\r
+0x38,0x00,0xb6,0xaf,0x34,0x00,0xb5,0xaf,0x30,0x00,0xb4,0xaf,0x2c,0x00,0xb3,0xaf,\r
+0x28,0x00,0xb2,0xaf,0x24,0x00,0xb1,0xaf,0x20,0x00,0xb0,0xaf,0x44,0x00,0x63,0x34,\r
+0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,0x00,0x16,0x02,0x00,0x03,0x16,0x02,0x00,\r
+0x0e,0x00,0x40,0x04,0x18,0x00,0xa0,0xaf,0x21,0x20,0x60,0x00,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0xff,0x42,0x30,0x64,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x00,0x00,0x82,0x90,0x00,0x00,0x00,0x00,0x00,0x16,0x02,0x00,\r
+0x03,0x16,0x02,0x00,0xf6,0xff,0x41,0x04,0x21,0x10,0x00,0x00,0x02,0x80,0x02,0x3c,\r
+0x78,0x41,0x43,0x8c,0x00,0x80,0x06,0x3c,0xcc,0x41,0xc2,0x24,0x25,0xb0,0x05,0x3c,\r
+0x02,0x80,0x06,0x3c,0x18,0x03,0xa4,0x34,0x78,0x41,0xd1,0x24,0x00,0x00,0x82,0xac,\r
+0x5d,0x00,0x71,0x10,0x01,0x00,0x15,0x24,0x2a,0xb0,0x02,0x3c,0x02,0x80,0x03,0x3c,\r
+0x06,0x00,0x56,0x34,0x78,0x1b,0x74,0x24,0xb0,0x03,0xb7,0x34,0x21,0xf0,0x80,0x00,\r
+0x05,0x00,0x53,0x34,0x01,0x00,0x12,0x24,0x1b,0x00,0xa0,0x12,0x02,0x80,0x03,0x3c,\r
+0x98,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x17,0x00,0x40,0x10,0x21,0xa8,0x00,0x00,\r
+0x01,0x00,0x06,0x24,0x18,0x00,0xa6,0xaf,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x02,0x80,0x03,0x3c,0x9a,0x44,0x62,0x90,\r
+0x00,0x00,0x00,0x00,0x0f,0x00,0x42,0x30,0x04,0x00,0x42,0x28,0x57,0x00,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0x02,0x80,0x06,0x3c,0x56,0x43,0xc2,0x90,0x00,0x00,0x00,0x00,\r
+0x02,0x00,0x42,0x30,0x4d,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x00,0x00,0xc2,0x96,0x00,0x26,0x90,0x8e,\r
+0x00,0xff,0x42,0x30,0x00,0x00,0xf0,0xae,0x0d,0x00,0x40,0x18,0x02,0x80,0x02,0x3c,\r
+0x84,0xaf,0x42,0x24,0x21,0x28,0xc0,0x03,0x00,0x00,0x44,0x8c,0x02,0x80,0x06,0x3c,\r
+0x88,0xaf,0xc6,0x24,0x00,0x00,0xc3,0x8c,0x00,0x00,0xa4,0xac,0x00,0x00,0x62,0x94,\r
+0x00,0x00,0x00,0x00,0x00,0xff,0x42,0x30,0xfb,0xff,0x40,0x1c,0x00,0x00,0x00,0x00,\r
+0x0c,0x00,0x03,0x8e,0x00,0x00,0x00,0x00,0x07,0x00,0x62,0x30,0x48,0x00,0x40,0x14,\r
+0x08,0x00,0x62,0x24,0xc2,0x10,0x03,0x00,0x08,0x00,0x05,0x8e,0xcc,0x24,0x86,0x8e,\r
+0xc0,0x10,0x02,0x00,0x20,0x00,0x42,0x24,0xff,0xff,0x47,0x30,0x01,0x00,0x04,0x24,\r
+0xc3,0x01,0x00,0x0c,0x10,0x00,0xb2,0xaf,0x00,0x02,0x00,0x0c,0x01,0x00,0x04,0x24,\r
+0x02,0x00,0x02,0x24,0x00,0x00,0x72,0xa2,0x00,0x00,0x62,0xa2,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x04,0x00,0x03,0x8e,\r
+0x00,0x00,0x02,0x8e,0x21,0x20,0x00,0x02,0x00,0x00,0x62,0xac,0x04,0x00,0x43,0xac,\r
+0x00,0x00,0x10,0xae,0x56,0x15,0x00,0x0c,0x04,0x00,0x10,0xae,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x00,0x00,0x22,0x8e,0x00,0x00,0x00,0x00,\r
+0xad,0xff,0x51,0x14,0x00,0x00,0x00,0x00,0x18,0x00,0xa2,0x8f,0x00,0x00,0x00,0x00,\r
+0x07,0x00,0x40,0x10,0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0x98,0x44,0x62,0x90,\r
+0x00,0x00,0x00,0x00,0x11,0x00,0x40,0x14,0x18,0x00,0xa0,0xaf,0x02,0x80,0x02,0x3c,\r
+0x08,0x08,0x44,0x24,0x21,0x28,0x00,0x00,0x21,0x30,0x00,0x00,0x2d,0x28,0x00,0x0c,\r
+0x21,0x38,0x00,0x00,0x94,0x10,0x00,0x08,0x02,0x80,0x02,0x3c,0x55,0x1f,0x00,0x0c,\r
+0x01,0x00,0x04,0x24,0xbf,0x10,0x00,0x08,0x00,0x00,0x00,0x00,0xf9,0x1f,0x00,0x0c,\r
+0x04,0x00,0x04,0x24,0xba,0x10,0x00,0x08,0x02,0x80,0x06,0x3c,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x02,0x80,0x06,0x3c,\r
+0x99,0x44,0xc4,0x90,0xf9,0x1f,0x00,0x0c,0xff,0x00,0x84,0x30,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x04,0x11,0x00,0x08,0x02,0x80,0x02,0x3c,\r
+0xda,0x10,0x00,0x08,0xc2,0x10,0x02,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00,\r
+0x08,0x00,0xe0,0x03,0x08,0x00,0x82,0x24,0xe0,0xff,0xbd,0x27,0x18,0x00,0xbf,0xaf,\r
+0x24,0x11,0x00,0x0c,0x74,0x00,0x84,0x24,0x21,0x28,0x40,0x00,0x10,0x00,0xa4,0x27,\r
+0x46,0x46,0x00,0x0c,0x02,0x00,0x06,0x24,0x10,0x00,0xa2,0x97,0x18,0x00,0xbf,0x8f,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,\r
+0x18,0x00,0xbf,0xaf,0x24,0x11,0x00,0x0c,0x10,0x00,0xa5,0xa7,0x21,0x20,0x40,0x00,\r
+0x10,0x00,0xa5,0x27,0x46,0x46,0x00,0x0c,0x02,0x00,0x06,0x24,0x18,0x00,0xbf,0x8f,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03,\r
+0x0a,0x00,0x82,0x24,0xe0,0xff,0xbd,0x27,0x18,0x00,0xbf,0xaf,0x3f,0x11,0x00,0x0c,\r
+0x74,0x00,0x84,0x24,0x21,0x28,0x40,0x00,0x10,0x00,0xa4,0x27,0x46,0x46,0x00,0x0c,\r
+0x02,0x00,0x06,0x24,0x10,0x00,0xa2,0x97,0x18,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,\r
+0x21,0x80,0x80,0x00,0x00,0x00,0x05,0xa2,0x01,0x00,0x06,0xa2,0x18,0x00,0xb2,0xaf,\r
+0x14,0x00,0xb1,0xaf,0x1c,0x00,0xbf,0xaf,0x21,0x88,0xc0,0x00,0x02,0x00,0x84,0x24,\r
+0x30,0x00,0xb2,0x8f,0x0d,0x00,0xc0,0x14,0x21,0x28,0xe0,0x00,0x00,0x00,0x43,0x8e,\r
+0x21,0x10,0x11,0x02,0x1c,0x00,0xbf,0x8f,0x21,0x18,0x71,0x00,0x02,0x00,0x63,0x24,\r
+0x00,0x00,0x43,0xae,0x14,0x00,0xb1,0x8f,0x18,0x00,0xb2,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x02,0x00,0x42,0x24,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x46,0x46,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x43,0x8e,0x21,0x10,0x11,0x02,0x1c,0x00,0xbf,0x8f,\r
+0x21,0x18,0x71,0x00,0x02,0x00,0x63,0x24,0x00,0x00,0x43,0xae,0x14,0x00,0xb1,0x8f,\r
+0x18,0x00,0xb2,0x8f,0x10,0x00,0xb0,0x8f,0x02,0x00,0x42,0x24,0x08,0x00,0xe0,0x03,\r
+0x20,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,0x21,0x80,0xa0,0x00,\r
+0x18,0x00,0xb2,0xaf,0x21,0x28,0xc0,0x00,0x21,0x90,0xe0,0x00,0x21,0x30,0x00,0x02,\r
+0x1c,0x00,0xbf,0xaf,0x14,0x00,0xb1,0xaf,0x46,0x46,0x00,0x0c,0x21,0x88,0x80,0x00,\r
+0x00,0x00,0x43,0x8e,0x21,0x10,0x30,0x02,0x1c,0x00,0xbf,0x8f,0x21,0x18,0x70,0x00,\r
+0x00,0x00,0x43,0xae,0x14,0x00,0xb1,0x8f,0x18,0x00,0xb2,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x10,0x00,0xe0,0x18,0x21,0x18,0x00,0x00,\r
+0x00,0x00,0xc0,0xac,0x21,0x40,0x00,0x00,0x00,0x00,0x82,0x90,0x00,0x00,0x00,0x00,\r
+0x0c,0x00,0x45,0x10,0x21,0x18,0x80,0x00,0x01,0x00,0x82,0x90,0x00,0x00,0x00,0x00,\r
+0x21,0x18,0x48,0x00,0x02,0x00,0x68,0x24,0x21,0x10,0x82,0x00,0x2b,0x18,0x07,0x01,\r
+0xf5,0xff,0x60,0x14,0x02,0x00,0x44,0x24,0x21,0x18,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x60,0x00,0x01,0x00,0x82,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0xc2,0xac,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x7f,0x00,0x84,0x30,0x0c,0x00,0x82,0x2c,\r
+0x0a,0x00,0x40,0x10,0x21,0x18,0x00,0x00,0x02,0x80,0x03,0x3c,0x80,0x10,0x04,0x00,\r
+0x8c,0xaf,0x63,0x24,0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x8c,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x6c,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x60,0x00,0x60,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,\r
+0x48,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x30,0x00,0x03,0x24,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x24,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x60,0x00,0x18,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,\r
+0x12,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x0c,0x00,0x03,0x24,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x16,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x60,0x00,0x0b,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,\r
+0x04,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x02,0x00,0x03,0x24,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0xc8,0xff,0xbd,0x27,0x24,0x00,0xb5,0xaf,\r
+0x02,0x80,0x15,0x3c,0x2c,0x00,0xb7,0xaf,0x28,0x00,0xb6,0xaf,0x20,0x00,0xb4,0xaf,\r
+0x1c,0x00,0xb3,0xaf,0x30,0x00,0xbf,0xaf,0x18,0x00,0xb2,0xaf,0x14,0x00,0xb1,0xaf,\r
+0x10,0x00,0xb0,0xaf,0x21,0xb8,0x80,0x00,0x21,0xa0,0x00,0x00,0x21,0x98,0x00,0x00,\r
+0x78,0x1b,0xb6,0x26,0x78,0x1b,0xa2,0x26,0x21,0x10,0x62,0x02,0x44,0x0b,0x51,0x90,\r
+0xfe,0x00,0x03,0x24,0x1e,0x00,0x23,0x12,0xff,0x00,0x02,0x24,0x21,0x00,0x22,0x12,\r
+0x21,0x10,0x80,0x02,0xa2,0x11,0x00,0x0c,0x21,0x20,0x20,0x02,0x21,0x88,0x40,0x00,\r
+0x21,0x80,0x00,0x00,0x21,0x90,0xc0,0x02,0x21,0x10,0x12,0x02,0x26,0x0b,0x44,0x90,\r
+0x00,0x00,0x00,0x00,0x02,0x00,0x82,0x24,0xff,0x00,0x42,0x30,0x02,0x00,0x42,0x2c,\r
+0x05,0x00,0x40,0x14,0x01,0x00,0x10,0x26,0xa2,0x11,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x05,0x00,0x51,0x10,0x01,0x00,0x03,0x24,0x1e,0x00,0x02,0x2a,0xf3,0xff,0x40,0x14,\r
+0x21,0x10,0x12,0x02,0x21,0x18,0x00,0x00,0x01,0x00,0x02,0x24,0x14,0x00,0x62,0x10,\r
+0xff,0x00,0x22,0x32,0x21,0x10,0xf4,0x02,0x00,0x00,0x51,0xa0,0x01,0x00,0x94,0x26,\r
+0x01,0x00,0x73,0x26,0x1e,0x00,0x62,0x2a,0xdb,0xff,0x40,0x14,0x78,0x1b,0xa2,0x26,\r
+0x21,0x10,0x80,0x02,0x30,0x00,0xbf,0x8f,0x2c,0x00,0xb7,0x8f,0x28,0x00,0xb6,0x8f,\r
+0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27,\r
+0x01,0x12,0x00,0x08,0x80,0x00,0x51,0x34,0xb8,0xff,0xbd,0x27,0x3c,0x00,0xb3,0xaf,\r
+0x38,0x00,0xb2,0xaf,0x30,0x00,0xb0,0xaf,0x21,0x90,0xc0,0x00,0x21,0x98,0xa0,0x00,\r
+0x1e,0x00,0x06,0x24,0x21,0x28,0x00,0x00,0x21,0x80,0x80,0x00,0x10,0x00,0xa4,0x27,\r
+0x40,0x00,0xbf,0xaf,0x35,0x46,0x00,0x0c,0x34,0x00,0xb1,0xaf,0x10,0x00,0xa4,0x27,\r
+0xd2,0x11,0x00,0x0c,0x00,0x00,0x40,0xae,0x21,0x88,0x40,0x00,0x09,0x00,0x43,0x28,\r
+0x21,0x38,0x40,0x00,0x08,0x00,0x02,0x24,0x0a,0x88,0x43,0x00,0x01,0x00,0x02,0x24,\r
+0x21,0x20,0x60,0x02,0x10,0x00,0xa5,0x27,0x0e,0x00,0x02,0x12,0x21,0x30,0x20,0x02,\r
+0x05,0x00,0x60,0x14,0xf8,0xff,0xf1,0x24,0x21,0x20,0x60,0x02,0x18,0x00,0xa5,0x27,\r
+0x08,0x00,0x20,0x16,0x21,0x30,0x20,0x02,0x40,0x00,0xbf,0x8f,0x3c,0x00,0xb3,0x8f,\r
+0x38,0x00,0xb2,0x8f,0x34,0x00,0xb1,0x8f,0x30,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,\r
+0x48,0x00,0xbd,0x27,0x46,0x46,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x51,0xae,\r
+0x40,0x00,0xbf,0x8f,0x3c,0x00,0xb3,0x8f,0x38,0x00,0xb2,0x8f,0x34,0x00,0xb1,0x8f,\r
+0x30,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x48,0x00,0xbd,0x27,0x00,0x00,0x82,0x94,\r
+0x21,0x30,0x80,0x00,0x10,0x00,0x85,0x24,0x42,0x1a,0x02,0x00,0xc2,0x11,0x02,0x00,\r
+0x02,0x00,0x42,0x30,0x01,0x00,0x63,0x30,0x25,0x18,0x43,0x00,0x01,0x00,0x04,0x24,\r
+0x07,0x00,0x64,0x10,0x00,0x00,0x00,0x00,0x05,0x00,0x60,0x10,0x0a,0x00,0xc5,0x24,\r
+0x02,0x00,0x02,0x24,0x02,0x00,0x62,0x10,0x00,0x00,0x00,0x00,0x18,0x00,0xc5,0x24,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0xa0,0x00,0x00,0x00,0x82,0x94,0x21,0x30,0x80,0x00,\r
+0x04,0x00,0x85,0x24,0x42,0x1a,0x02,0x00,0xc2,0x11,0x02,0x00,0x02,0x00,0x42,0x30,\r
+0x01,0x00,0x63,0x30,0x25,0x18,0x43,0x00,0x01,0x00,0x04,0x24,0x04,0x00,0x64,0x10,\r
+0x00,0x00,0x00,0x00,0x02,0x00,0x60,0x10,0x00,0x00,0x00,0x00,0x10,0x00,0xc5,0x24,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0xa0,0x00,0x13,0x00,0xa0,0x18,0x21,0x30,0x00,0x00,\r
+0x02,0x00,0x07,0x24,0x04,0x00,0x08,0x24,0x0b,0x00,0x09,0x24,0x16,0x00,0x0a,0x24,\r
+0x21,0x10,0x86,0x00,0x00,0x00,0x43,0x90,0x01,0x00,0xc6,0x24,0x7f,0x00,0x63,0x30,\r
+0x07,0x00,0x67,0x10,0x2a,0x10,0xc5,0x00,0x05,0x00,0x68,0x10,0x00,0x00,0x00,0x00,\r
+0x03,0x00,0x69,0x10,0x00,0x00,0x00,0x00,0x05,0x00,0x6a,0x14,0x00,0x00,0x00,0x00,\r
+0xf3,0xff,0x40,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0xe8,0xff,0xbd,0x27,0x10,0x00,0xbf,0xaf,\r
+0x6a,0x12,0x00,0x0c,0x00,0x00,0x00,0x00,0x10,0x00,0xbf,0x8f,0x01,0x00,0x44,0x38,\r
+0x03,0x00,0x03,0x24,0x01,0x00,0x02,0x24,0x0b,0x10,0x64,0x00,0x08,0x00,0xe0,0x03,\r
+0x18,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x60,0x02,0x40,\r
+0x01,0x00,0x41,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x02,0x80,0x03,0x3c,\r
+0xfc,0xa9,0x64,0xac,0x00,0x60,0x82,0x40,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x02,0x80,0x02,0x3c,0xfc,0xa9,0x45,0x8c,0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,\r
+0x18,0x03,0x42,0x34,0x70,0x4a,0x63,0x24,0x00,0x00,0x43,0xac,0x04,0x00,0x02,0x24,\r
+0x1e,0x00,0xa2,0x10,0x05,0x00,0xa2,0x2c,0x10,0x00,0x40,0x10,0x05,0x00,0x02,0x24,\r
+0x03,0x00,0x02,0x24,0x08,0x00,0xa2,0x10,0x00,0x19,0x04,0x00,0x80,0x10,0x04,0x00,\r
+0x21,0x10,0x44,0x00,0xc0,0x10,0x02,0x00,0x23,0x10,0x44,0x00,0x00,0x11,0x02,0x00,\r
+0x21,0x10,0x44,0x00,0x40,0x19,0x02,0x00,0xff,0xff,0x63,0x24,0xfe,0xff,0x60,0x14,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xf3,0xff,0xa2,0x10,\r
+0x06,0x00,0x02,0x24,0xf2,0xff,0xa2,0x14,0x80,0x10,0x04,0x00,0x40,0x11,0x04,0x00,\r
+0x23,0x10,0x44,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x44,0x00,0x00,0x19,0x02,0x00,\r
+0x23,0x18,0x62,0x00,0xb2,0x12,0x00,0x08,0x00,0x19,0x03,0x00,0x80,0x10,0x04,0x00,\r
+0x21,0x10,0x44,0x00,0xc0,0x10,0x02,0x00,0x23,0x10,0x44,0x00,0x00,0x11,0x02,0x00,\r
+0x21,0x10,0x44,0x00,0xb2,0x12,0x00,0x08,0x00,0x19,0x02,0x00,0x02,0x80,0x02,0x3c,\r
+0xfc,0xa9,0x45,0x8c,0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,0x18,0x03,0x42,0x34,\r
+0x2c,0x4b,0x63,0x24,0x00,0x00,0x43,0xac,0x05,0x00,0x02,0x24,0x06,0x00,0xa2,0x10,\r
+0x06,0x00,0xa2,0x2c,0x0c,0x00,0x40,0x10,0x06,0x00,0x02,0x24,0x04,0x00,0x02,0x24,\r
+0x0e,0x00,0xa2,0x10,0x80,0x10,0x04,0x00,0x80,0x10,0x04,0x00,0x21,0x10,0x44,0x00,\r
+0x80,0x10,0x02,0x00,0xff,0xff,0x42,0x24,0xfe,0xff,0x40,0x14,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xf7,0xff,0xa2,0x14,0x00,0x11,0x04,0x00,\r
+0x23,0x10,0x44,0x00,0xdd,0x12,0x00,0x08,0x40,0x10,0x02,0x00,0x21,0x10,0x44,0x00,\r
+0xdd,0x12,0x00,0x08,0x40,0x10,0x02,0x00,0xff,0xff,0x85,0x30,0x21,0x30,0x00,0x00,\r
+0x25,0xb0,0x03,0x3c,0x2a,0xb0,0x04,0x3c,0xb4,0x00,0x63,0x34,0x01,0x00,0xa2,0x24,\r
+0x31,0x00,0x84,0x34,0x00,0x00,0x65,0xa0,0x00,0x00,0x85,0xa0,0xff,0xff,0x45,0x30,\r
+0x12,0x00,0xa0,0x10,0x01,0x00,0x03,0x24,0x28,0xb0,0x07,0x3c,0xff,0x12,0x00,0x08,\r
+0xff,0xff,0x08,0x24,0x00,0x00,0x83,0xa0,0x01,0x00,0x63,0x24,0xff,0xff,0x63,0x30,\r
+0x2b,0x10,0xa3,0x00,0x09,0x00,0x40,0x14,0x08,0x00,0xc6,0x24,0xf9,0xff,0x65,0x14,\r
+0x21,0x20,0xc7,0x00,0x01,0x00,0x63,0x24,0xff,0xff,0x63,0x30,0x2b,0x10,0xa3,0x00,\r
+0x00,0x00,0x88,0xa0,0xf9,0xff,0x40,0x10,0x08,0x00,0xc6,0x24,0x00,0x01,0xa2,0x2c,\r
+0x13,0x00,0x40,0x10,0x21,0x18,0xa0,0x00,0xff,0x00,0x08,0x24,0x28,0xb0,0x07,0x3c,\r
+0x13,0x13,0x00,0x08,0xff,0xff,0x09,0x24,0xff,0xff,0x43,0x30,0x00,0x00,0xa2,0xa0,\r
+0x00,0x01,0x62,0x2c,0x0a,0x00,0x40,0x10,0x08,0x00,0xc6,0x24,0x01,0x00,0x62,0x24,\r
+0xf9,0xff,0x68,0x14,0x21,0x28,0xc7,0x00,0x00,0x01,0x02,0x24,0xff,0xff,0x43,0x30,\r
+0x00,0x01,0x62,0x2c,0x00,0x00,0xa9,0xa0,0xf8,0xff,0x40,0x14,0x08,0x00,0xc6,0x24,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xd0,0xff,0xbd,0x27,0x28,0x00,0xbf,0xaf,\r
+0x24,0x00,0xb5,0xaf,0x20,0x00,0xb4,0xaf,0x1c,0x00,0xb3,0xaf,0x18,0x00,0xb2,0xaf,\r
+0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x00,0x60,0x12,0x40,0x01,0x00,0x41,0x36,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x25,0xb0,0x10,0x3c,0x42,0x00,0x15,0x36,\r
+0xff,0xff,0x02,0x24,0x00,0x00,0xa2,0xa2,0xd8,0x00,0x05,0x36,0x40,0x00,0x11,0x36,\r
+0xa8,0x00,0x14,0x36,0xa0,0x00,0x13,0x36,0x00,0x10,0x03,0x24,0xa4,0x00,0x10,0x36,\r
+0x00,0x80,0x02,0x3c,0x00,0x00,0x23,0xa6,0x00,0x00,0xa0,0xa0,0x00,0x00,0x60,0xae,\r
+0x00,0x00,0x00,0xae,0x00,0x00,0x82,0xae,0x00,0x00,0xa3,0x90,0x80,0xff,0x02,0x24,\r
+0xfd,0x00,0x04,0x24,0x25,0x18,0x62,0x00,0xfc,0x17,0x02,0x24,0x00,0x00,0xa3,0xa0,\r
+0x00,0x00,0x22,0xa6,0xea,0x12,0x00,0x0c,0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,\r
+0x78,0x1b,0x42,0x24,0x74,0x0b,0x45,0x8c,0x6c,0x0b,0x43,0x8c,0x70,0x0b,0x44,0x8c,\r
+0xfc,0x37,0x02,0x24,0x00,0x00,0x63,0xae,0x00,0x00,0x04,0xae,0x00,0x00,0x85,0xae,\r
+0x00,0x00,0x22,0xa6,0x00,0x00,0xa0,0xa2,0x00,0x60,0x92,0x40,0x28,0x00,0xbf,0x8f,\r
+0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x30,0x00,0xbd,0x27,\r
+0xc8,0xff,0xbd,0x27,0x34,0x00,0xbf,0xaf,0x30,0x00,0xbe,0xaf,0x2c,0x00,0xb7,0xaf,\r
+0x28,0x00,0xb6,0xaf,0x24,0x00,0xb5,0xaf,0x20,0x00,0xb4,0xaf,0x1c,0x00,0xb3,0xaf,\r
+0x18,0x00,0xb2,0xaf,0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x00,0x60,0x16,0x40,\r
+0x01,0x00,0xc1,0x36,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x25,0xb0,0x11,0x3c,\r
+0x40,0x00,0x30,0x36,0xff,0xff,0x02,0x24,0x42,0x00,0x3e,0x36,0xfc,0x77,0x13,0x24,\r
+0x00,0x00,0xc2,0xa3,0xfc,0x57,0x12,0x24,0x00,0x00,0x13,0xa6,0xcb,0x12,0x00,0x0c,\r
+0x32,0x00,0x04,0x24,0xfc,0x37,0x17,0x24,0x32,0x00,0x04,0x24,0x00,0x00,0x12,0xa6,\r
+0xcb,0x12,0x00,0x0c,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x24,0x00,0x00,0x17,0xa6,\r
+0xcb,0x12,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0xa6,0xcb,0x12,0x00,0x0c,\r
+0x32,0x00,0x04,0x24,0x32,0x00,0x04,0x24,0x00,0x00,0x12,0xa6,0xcb,0x12,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x96,0x24,0xfa,0x03,0x24,0xd8,0x00,0x25,0x36,\r
+0x24,0x10,0x43,0x00,0x00,0x00,0x02,0xa6,0x00,0x00,0xa3,0x90,0xa0,0x00,0x34,0x36,\r
+0xa4,0x00,0x35,0x36,0xa8,0x00,0x33,0x36,0x7f,0x00,0x63,0x30,0x00,0x80,0x02,0x3c,\r
+0x00,0x00,0xa3,0xa0,0x00,0x00,0x80,0xae,0x00,0x00,0xa0,0xae,0x00,0x00,0x62,0xae,\r
+0x00,0x00,0xa3,0x90,0x80,0xff,0x02,0x24,0xfd,0x00,0x04,0x24,0x25,0x18,0x62,0x00,\r
+0x00,0x00,0xa3,0xa0,0x00,0x00,0x12,0xa6,0xea,0x12,0x00,0x0c,0x56,0x01,0x31,0x36,\r
+0x02,0x80,0x02,0x3c,0x78,0x1b,0x42,0x24,0x74,0x0b,0x45,0x8c,0x6c,0x0b,0x43,0x8c,\r
+0x70,0x0b,0x44,0x8c,0xff,0x0f,0x02,0x24,0x00,0x00,0x83,0xae,0x00,0x00,0xa4,0xae,\r
+0x00,0x00,0x65,0xae,0x00,0x00,0x17,0xa6,0x00,0x00,0x22,0xa6,0x00,0x00,0xc0,0xa3,\r
+0x00,0x60,0x96,0x40,0x34,0x00,0xbf,0x8f,0x30,0x00,0xbe,0x8f,0x2c,0x00,0xb7,0x8f,\r
+0x28,0x00,0xb6,0x8f,0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f,\r
+0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,\r
+0x38,0x00,0xbd,0x27,0xd0,0xff,0xbd,0x27,0x2c,0x00,0xbf,0xaf,0x28,0x00,0xb6,0xaf,\r
+0x24,0x00,0xb5,0xaf,0x20,0x00,0xb4,0xaf,0x1c,0x00,0xb3,0xaf,0x18,0x00,0xb2,0xaf,\r
+0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x25,0xb0,0x10,0x3c,0x40,0x00,0x05,0x36,\r
+0x00,0x00,0xa2,0x94,0xaf,0xff,0x03,0x24,0xa8,0x00,0x13,0x36,0x24,0x10,0x43,0x00,\r
+0x00,0x00,0xa2,0xa4,0xa0,0x00,0x12,0x36,0xa4,0x00,0x10,0x36,0x00,0x00,0x55,0x8e,\r
+0x00,0x00,0x16,0x8e,0x00,0x00,0x71,0x8e,0x00,0x80,0x14,0x3c,0xfc,0x37,0x02,0x24,\r
+0x00,0x00,0x40,0xae,0xfd,0x00,0x04,0x24,0x00,0x00,0x00,0xae,0x21,0x88,0x34,0x02,\r
+0x00,0x00,0x74,0xae,0x00,0x00,0xa2,0xa4,0xea,0x12,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x55,0xae,0x00,0x00,0x16,0xae,0x00,0x00,0x71,0xae,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x2c,0x00,0xbf,0x8f,0x28,0x00,0xb6,0x8f,\r
+0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x30,0x00,0xbd,0x27,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x25,0xb0,0x04,0x3c,0x40,0x00,0x84,0x34,0x00,0x00,0x82,0x94,0xd8,0xfd,0x03,0x24,\r
+0x24,0x10,0x43,0x00,0xfc,0x37,0x03,0x24,0x00,0x00,0x82,0xa4,0x00,0x00,0x83,0xa4,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0xc8,0xff,0xbd,0x27,0x25,0xb0,0x03,0x3c,0x1c,0x00,0xb3,0xaf,\r
+0x18,0x00,0xb2,0xaf,0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x34,0x00,0xbf,0xaf,\r
+0x30,0x00,0xbe,0xaf,0x2c,0x00,0xb7,0xaf,0x28,0x00,0xb6,0xaf,0x24,0x00,0xb5,0xaf,\r
+0x20,0x00,0xb4,0xaf,0x0a,0x00,0x67,0x34,0x00,0x00,0xe2,0x90,0xff,0xff,0xb2,0x30,\r
+0x21,0x98,0xc0,0x00,0xff,0x00,0x91,0x30,0x20,0x00,0x40,0x12,0xff,0x00,0x50,0x30,\r
+0x21,0xa0,0xe0,0x00,0x0c,0x00,0x77,0x34,0x0b,0x00,0x76,0x34,0x21,0xf0,0xe0,0x00,\r
+0xc0,0xff,0x15,0x24,0x25,0x10,0x15,0x02,0xff,0x00,0x50,0x30,0x00,0x00,0xd1,0xa2,\r
+0x00,0x00,0x90,0xa2,0x00,0x00,0x82,0x92,0x00,0x00,0x00,0x00,0xff,0x00,0x50,0x30,\r
+0xc0,0x00,0x03,0x32,0x07,0x00,0x60,0x10,0x21,0x20,0xc0,0x03,0x00,0x00,0x82,0x90,\r
+0x00,0x00,0x00,0x00,0xff,0x00,0x50,0x30,0xc0,0x00,0x03,0x32,0xfb,0xff,0x60,0x14,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0xe2,0x8e,0x04,0x00,0x23,0x26,0x64,0x00,0x04,0x24,\r
+0x00,0x00,0x62,0xae,0x9c,0x12,0x00,0x0c,0xff,0x00,0x71,0x30,0xfc,0xff,0x42,0x26,\r
+0xff,0xff,0x52,0x30,0xe7,0xff,0x40,0x16,0x04,0x00,0x73,0x26,0x34,0x00,0xbf,0x8f,\r
+0x30,0x00,0xbe,0x8f,0x2c,0x00,0xb7,0x8f,0x28,0x00,0xb6,0x8f,0x24,0x00,0xb5,0x8f,\r
+0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27,0xff,0x00,0x84,0x30,\r
+0xff,0xff,0xac,0x30,0xc0,0x48,0x04,0x00,0x00,0x60,0x0e,0x40,0x01,0x00,0xc1,0x35,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x25,0xb0,0x02,0x3c,0x40,0x02,0x4d,0x34,\r
+0xf8,0xff,0xe7,0x24,0x21,0x40,0x00,0x00,0x01,0x00,0x0f,0x24,0x44,0x02,0x4b,0x34,\r
+0x57,0x14,0x00,0x08,0x01,0x80,0x0a,0x3c,0x28,0x00,0x0f,0x11,0x00,0x00,0x00,0x00,\r
+0x01,0x00,0xe2,0x90,0x00,0x00,0xe4,0x90,0x02,0x00,0xe3,0x90,0x03,0x00,0xe5,0x90,\r
+0x00,0x12,0x02,0x00,0x25,0x20,0x82,0x00,0x00,0x1c,0x03,0x00,0x25,0x20,0x83,0x00,\r
+0x21,0x10,0x28,0x01,0x00,0x2e,0x05,0x00,0x01,0x00,0x08,0x25,0x25,0x20,0x85,0x00,\r
+0x25,0x10,0x4a,0x00,0x06,0x00,0x03,0x2d,0x00,0x00,0x64,0xad,0x04,0x00,0xe7,0x24,\r
+0x00,0x00,0xa2,0xad,0x12,0x00,0x60,0x10,0x00,0x00,0x00,0x00,0xea,0xff,0x00,0x15,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0xc2,0x90,0x01,0x00,0xc3,0x90,0x04,0x00,0xe7,0x24,\r
+0x00,0x14,0x02,0x00,0x25,0x10,0x82,0x01,0x00,0x1e,0x03,0x00,0x25,0x20,0x43,0x00,\r
+0x21,0x10,0x28,0x01,0x01,0x00,0x08,0x25,0x25,0x10,0x4a,0x00,0x06,0x00,0x03,0x2d,\r
+0x00,0x00,0x64,0xad,0x00,0x00,0xa2,0xad,0xf0,0xff,0x60,0x14,0x00,0x00,0x00,0x00,\r
+0x00,0x60,0x8e,0x40,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x03,0x00,0xc2,0x90,\r
+0x02,0x00,0xc4,0x90,0x04,0x00,0xc3,0x90,0x05,0x00,0xc5,0x90,0x49,0x14,0x00,0x08,\r
+0x00,0x12,0x02,0x00,0xff,0xff,0x84,0x30,0x42,0xb0,0x08,0x3c,0x80,0x10,0x04,0x00,\r
+0x21,0x10,0x48,0x00,0x04,0x00,0x46,0xac,0x00,0x00,0x07,0x91,0x40,0x18,0x04,0x00,\r
+0x03,0x00,0x06,0x24,0xff,0x00,0xe7,0x30,0x04,0x30,0x66,0x00,0x01,0x00,0x02,0x24,\r
+0x04,0x10,0x62,0x00,0x25,0x30,0xc7,0x00,0xff,0xff,0xa5,0x30,0x25,0x10,0x47,0x00,\r
+0x02,0x00,0xa0,0x14,0xff,0x00,0xc7,0x30,0xff,0x00,0x47,0x30,0x42,0xb0,0x02,0x3c,\r
+0x00,0x00,0x47,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x42,0xb0,0x02,0x3c,\r
+0x03,0x00,0x47,0x34,0x00,0x00,0xe3,0x90,0xff,0x00,0x84,0x30,0x04,0x00,0x84,0x24,\r
+0xff,0x00,0x65,0x30,0x01,0x00,0x02,0x24,0x04,0x30,0x82,0x00,0x07,0x18,0x85,0x00,\r
+0x25,0xb0,0x02,0x3c,0xe8,0x03,0x42,0x34,0x01,0x00,0x63,0x30,0x21,0x20,0xc0,0x00,\r
+0x00,0x00,0x45,0xa0,0x02,0x00,0x60,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xe6,0xa0,\r
+0x08,0x00,0xe0,0x03,0x24,0x10,0x85,0x00,0x00,0x60,0x03,0x40,0x01,0x00,0x61,0x34,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x02,0x80,0x02,0x3c,0x00,0xaa,0x42,0x24,\r
+0x04,0x00,0x45,0x8c,0x00,0x00,0x82,0xac,0x04,0x00,0x44,0xac,0x00,0x00,0xa4,0xac,\r
+0x04,0x00,0x85,0xac,0x00,0x60,0x83,0x40,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x14,0x00,0x83,0x90,0x01,0x00,0x02,0x24,0x08,0x00,0x86,0xac,0x18,0x00,0x85,0xac,\r
+0x00,0x00,0x84,0xac,0x03,0x00,0x62,0x10,0x04,0x00,0x84,0xac,0x9a,0x14,0x00,0x08,\r
+0x0c,0x00,0x80,0xac,0x0c,0x00,0x82,0x8c,0x9a,0x14,0x00,0x08,0x10,0x00,0x82,0xac,\r
+0x00,0x60,0x03,0x40,0x01,0x00,0x61,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x04,0x00,0x85,0x8c,0x00,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0xac,\r
+0x04,0x00,0x45,0xac,0x00,0x00,0x84,0xac,0x04,0x00,0x84,0xac,0x00,0x60,0x83,0x40,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xc8,0xff,0xbd,0x27,0x28,0x00,0xb6,0xaf,\r
+0x25,0xb0,0x02,0x3c,0x02,0x80,0x16,0x3c,0x2c,0x00,0xb7,0xaf,0x24,0x00,0xb5,0xaf,\r
+0x20,0x00,0xb4,0xaf,0x1c,0x00,0xb3,0xaf,0x18,0x00,0xb2,0xaf,0x30,0x00,0xbf,0xaf,\r
+0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x18,0x03,0x55,0x34,0x00,0x80,0x17,0x3c,\r
+0x02,0x80,0x13,0x3c,0x02,0x80,0x14,0x3c,0x00,0xaa,0xd2,0x26,0x08,0x53,0xe2,0x26,\r
+0x00,0x00,0xa2,0xae,0x00,0xaa,0xd0,0x8e,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x8c,0x43,0x71,0x8e,0x00,0x00,0x00,0x00,\r
+0x25,0x00,0x20,0x12,0x00,0x00,0x00,0x00,0x8c,0x43,0x60,0xae,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x23,0x00,0x12,0x12,0x08,0x0c,0x84,0x26,\r
+0x14,0x00,0x03,0x92,0x01,0x00,0x02,0x24,0x2b,0x00,0x62,0x10,0x00,0x00,0x00,0x00,\r
+0x0a,0x00,0x60,0x14,0x02,0x00,0x02,0x24,0x0c,0x00,0x03,0x8e,0x00,0x00,0x00,0x00,\r
+0x2b,0x10,0x23,0x02,0x1e,0x00,0x40,0x10,0x23,0x10,0x71,0x00,0x0c,0x00,0x02,0xae,\r
+0x00,0x00,0x10,0x8e,0xe2,0x14,0x00,0x08,0x00,0x00,0x00,0x00,0xfc,0xff,0x62,0x14,\r
+0x00,0x00,0x00,0x00,0x0c,0x00,0x03,0x8e,0x00,0x00,0x00,0x00,0xf8,0xff,0x60,0x10,\r
+0x2b,0x10,0x23,0x02,0xf5,0xff,0x40,0x14,0x23,0x10,0x71,0x00,0x08,0x00,0x02,0x8e,\r
+0x18,0x00,0x04,0x8e,0x09,0xf8,0x40,0x00,0x0c,0x00,0x00,0xae,0x00,0x00,0x10,0x8e,\r
+0xe2,0x14,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x00,0x60,0x81,0x40,0x08,0x0c,0x84,0x26,0x21,0x28,0x00,0x00,0x21,0x30,0x00,0x00,\r
+0x2d,0x28,0x00,0x0c,0x21,0x38,0x00,0x00,0xd4,0x14,0x00,0x08,0x08,0x53,0xe2,0x26,\r
+0x08,0x00,0x02,0x8e,0x18,0x00,0x04,0x8e,0x09,0xf8,0x40,0x00,0x00,0x00,0x00,0x00,\r
+0xf0,0x14,0x00,0x08,0x0c,0x00,0x02,0xae,0x0c,0x00,0x03,0x8e,0x00,0x00,0x00,0x00,\r
+0x2b,0x10,0x23,0x02,0xd9,0xff,0x40,0x14,0x23,0x10,0x71,0x00,0x08,0x00,0x02,0x8e,\r
+0x18,0x00,0x04,0x8e,0x09,0xf8,0x40,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x03,0x8e,\r
+0x00,0x00,0x00,0x00,0x0c,0x00,0x03,0xae,0x00,0x00,0x10,0x8e,0xe2,0x14,0x00,0x08,\r
+0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,0x80,0x41,0x42,0x24,0xc0,0x20,0x04,0x00,\r
+0x21,0x20,0x82,0x00,0x21,0x28,0x00,0x00,0x00,0x60,0x06,0x40,0x01,0x00,0xc1,0x34,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x00,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,\r
+0x09,0x00,0x44,0x10,0x00,0x00,0x00,0x00,0x04,0x00,0x43,0x8c,0x21,0x28,0x40,0x00,\r
+0x00,0x00,0x42,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0xac,0x04,0x00,0x43,0xac,\r
+0x00,0x00,0xa5,0xac,0x04,0x00,0xa5,0xac,0x00,0x60,0x86,0x40,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0xa0,0x00,0xe8,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,0x21,0x80,0x80,0x00,\r
+0x01,0x01,0x02,0x2e,0x14,0x00,0xbf,0xaf,0x01,0x00,0x04,0x24,0x01,0x02,0x03,0x2e,\r
+0x0b,0x00,0x40,0x14,0x21,0x28,0x00,0x00,0x02,0x00,0x04,0x24,0x08,0x00,0x60,0x14,\r
+0x01,0x08,0x02,0x2e,0x06,0x00,0x40,0x14,0x03,0x00,0x04,0x24,0x14,0x00,0xbf,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x21,0x10,0xa0,0x00,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,\r
+0x21,0x15,0x00,0x0c,0x00,0x00,0x00,0x00,0xf8,0xff,0x40,0x10,0x21,0x28,0x40,0x00,\r
+0x0c,0x00,0x50,0xac,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0xa0,0x00,\r
+0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x00,0x60,0x06,0x40,0x01,0x00,0xc1,0x34,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x10,0x00,0x83,0x8c,0x02,0x80,0x02,0x3c,\r
+0x80,0x41,0x42,0x24,0xc0,0x18,0x03,0x00,0x21,0x18,0x62,0x00,0x00,0x00,0x65,0x8c,\r
+0x02,0x80,0x07,0x3c,0x02,0x80,0x08,0x3c,0x00,0x00,0x85,0xac,0x04,0x00,0xa4,0xac,\r
+0x04,0x00,0x83,0xac,0x58,0x44,0xe5,0x8c,0x00,0x00,0x00,0x00,0x05,0x00,0xa0,0x10,\r
+0x00,0x00,0x64,0xac,0x44,0x44,0x02,0x8d,0x58,0x44,0xe0,0xac,0x25,0x10,0x45,0x00,\r
+0x44,0x44,0x02,0xad,0x00,0x60,0x86,0x40,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x02,0x80,0x02,0x3c,0x7c,0x3f,0x43,0x8c,0xff,0x00,0xa5,0x30,0x25,0xb0,0x02,0x3c,\r
+0x42,0x18,0x03,0x00,0x21,0x30,0xa2,0x00,0x01,0x00,0x63,0x30,0x01,0x00,0x02,0x24,\r
+0x10,0x00,0xa7,0x2c,0x04,0x00,0x62,0x10,0xff,0x00,0x84,0x30,0x60,0x01,0xc4,0xa0,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x25,0xb0,0x03,0x3c,0x10,0x00,0xa2,0x34,\r
+0xfa,0xff,0xe0,0x10,0x21,0x40,0x43,0x00,0x60,0x01,0xc4,0xa0,0x60,0x01,0x04,0xa1,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xff,0x00,0x84,0x30,0x01,0x00,0x03,0x24,\r
+0x10,0x00,0x02,0x3c,0x04,0x18,0x83,0x00,0xf0,0x70,0x42,0x34,0x15,0x00,0x84,0x2c,\r
+0x06,0x00,0x80,0x10,0x24,0x28,0x62,0x00,0x0f,0x00,0x63,0x30,0x04,0x00,0xa0,0x14,\r
+0x01,0x00,0x02,0x24,0x02,0x00,0x60,0x14,0x02,0x00,0x02,0x24,0x21,0x10,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xc0,0x40,0x04,0x00,0x21,0x18,0x04,0x01,\r
+0x80,0x18,0x03,0x00,0x21,0x18,0x64,0x00,0x02,0x80,0x02,0x3c,0x80,0x18,0x03,0x00,\r
+0x78,0x1b,0x42,0x24,0x21,0x18,0x62,0x00,0x8c,0x11,0x66,0x8c,0x21,0x38,0x60,0x00,\r
+0x92,0x11,0x60,0xa0,0x93,0x11,0x60,0xa0,0x1c,0x00,0x05,0x24,0xa7,0x15,0x00,0x08,\r
+0x01,0x00,0x03,0x24,0x08,0x00,0xa0,0x04,0x21,0x10,0x04,0x01,0x04,0x10,0xa3,0x00,\r
+0x24,0x10,0xc2,0x00,0xfb,0xff,0x40,0x10,0xff,0xff,0xa5,0x24,0x01,0x00,0xa5,0x24,\r
+0x92,0x11,0xe5,0xa0,0x21,0x10,0x04,0x01,0x80,0x10,0x02,0x00,0x21,0x10,0x44,0x00,\r
+0x02,0x80,0x03,0x3c,0x80,0x10,0x02,0x00,0x78,0x1b,0x63,0x24,0x21,0x18,0x43,0x00,\r
+0x8c,0x11,0x66,0x8c,0x21,0x28,0x00,0x00,0xbb,0x15,0x00,0x08,0x01,0x00,0x07,0x24,\r
+0x1d,0x00,0xa2,0x28,0x08,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x04,0x10,0xa7,0x00,\r
+0x24,0x10,0xc2,0x00,0xfa,0xff,0x40,0x10,0x01,0x00,0xa5,0x24,0xff,0xff,0xa5,0x24,\r
+0x08,0x00,0xe0,0x03,0x93,0x11,0x65,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xd8,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,\r
+0xc0,0x80,0x04,0x00,0x21,0x80,0x04,0x02,0x80,0x80,0x10,0x00,0x21,0x80,0x04,0x02,\r
+0x02,0x80,0x02,0x3c,0x78,0x1b,0x42,0x24,0x80,0x80,0x10,0x00,0x20,0x00,0xbf,0xaf,\r
+0x1c,0x00,0xb3,0xaf,0x18,0x00,0xb2,0xaf,0x21,0x80,0x02,0x02,0x14,0x00,0xb1,0xaf,\r
+0x90,0x11,0x03,0x8e,0x25,0xb0,0x02,0x3c,0x80,0x01,0x53,0x34,0x07,0x00,0x63,0x30,\r
+0x80,0x18,0x03,0x00,0x21,0x18,0x62,0x00,0x00,0x00,0x71,0x92,0x88,0x11,0x05,0x8e,\r
+0x84,0x01,0x62,0x8c,0x21,0x90,0x80,0x00,0xff,0x00,0x31,0x32,0x24,0x10,0x45,0x00,\r
+0x96,0x15,0x00,0x0c,0x8c,0x11,0x02,0xae,0x92,0x11,0x04,0x92,0x70,0x15,0x00,0x0c,\r
+0xff,0x00,0x45,0x32,0x92,0x11,0x04,0x92,0x86,0x15,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x01,0x00,0x42,0x38,0x04,0x00,0x03,0x24,0x0a,0x88,0x62,0x00,0x00,0x00,0x71,0xa2,\r
+0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27,0xff,0xff,0x84,0x30,\r
+0x00,0x02,0x82,0x30,0x07,0x00,0x03,0x24,0x0d,0x00,0x40,0x14,0x0b,0x00,0x84,0x30,\r
+0x0c,0x00,0x82,0x2c,0x0a,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x02,0x80,0x03,0x3c,\r
+0x80,0x10,0x04,0x00,0xe0,0xaf,0x63,0x24,0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x8c,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x03,0x24,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x06,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x60,0x00,0x05,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,\r
+0x04,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x03,0x00,0x03,0x24,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x02,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x60,0x00,0x01,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,\r
+0x21,0x18,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x90,0xff,0xbd,0x27,\r
+0x02,0x80,0x02,0x3c,0x68,0x00,0xbe,0xaf,0x64,0x00,0xb7,0xaf,0x60,0x00,0xb6,0xaf,\r
+0x5c,0x00,0xb5,0xaf,0x54,0x00,0xb3,0xaf,0x50,0x00,0xb2,0xaf,0x6c,0x00,0xbf,0xaf,\r
+0x58,0x00,0xb4,0xaf,0x4c,0x00,0xb1,0xaf,0x48,0x00,0xb0,0xaf,0x10,0xb0,0x42,0x24,\r
+0x00,0x00,0x54,0x8c,0x08,0x00,0x03,0x24,0x10,0x00,0xa3,0xaf,0x21,0x98,0x00,0x00,\r
+0x21,0xa8,0x00,0x00,0x21,0xb8,0x00,0x00,0x21,0xf0,0x00,0x00,0x14,0x00,0xa0,0xaf,\r
+0x18,0x00,0xa0,0xaf,0x1c,0x00,0xa0,0xaf,0x20,0x00,0xa0,0xaf,0x21,0xb0,0x00,0x00,\r
+0x24,0x00,0xa0,0xaf,0x28,0x00,0xa0,0xaf,0x2c,0x00,0xa0,0xaf,0x30,0x00,0xa0,0xaf,\r
+0x34,0x00,0xa0,0xaf,0x38,0x00,0xa0,0xaf,0x3c,0x00,0xa0,0xaf,0x40,0x00,0xa0,0xaf,\r
+0x21,0x90,0x80,0x02,0x90,0x11,0x42,0x8e,0x00,0x00,0x00,0x00,0x02,0x13,0x02,0x00,\r
+0x01,0x00,0x42,0x30,0x6c,0x00,0x40,0x10,0x25,0xb0,0x02,0x3c,0x21,0x10,0x62,0x02,\r
+0x60,0x01,0x44,0x90,0x78,0x11,0x43,0x8e,0x74,0x11,0x46,0x8e,0xff,0x00,0x91,0x30,\r
+0x02,0x80,0x04,0x3c,0x78,0x1b,0x84,0x24,0x21,0x10,0x24,0x02,0x77,0x04,0x44,0x90,\r
+0x5a,0x04,0x45,0x90,0x5c,0x11,0x47,0x8e,0x18,0x00,0x64,0x00,0x12,0x18,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0xc5,0x00,0x12,0x30,0x00,0x00,\r
+0x21,0x30,0xc3,0x00,0x2b,0x10,0xe6,0x00,0x25,0x01,0x40,0x14,0x23,0x10,0xe6,0x00,\r
+0x5c,0x11,0x42,0xae,0x78,0x11,0x44,0x8e,0x74,0x11,0x47,0x8e,0x60,0x11,0x48,0x8e,\r
+0x64,0x11,0x45,0x8e,0x6c,0x11,0x46,0x8e,0x70,0x11,0x43,0x8e,0x21,0x38,0xe4,0x00,\r
+0x02,0x80,0x04,0x3c,0x78,0x1b,0x84,0x24,0x21,0x10,0x24,0x02,0x21,0x40,0x05,0x01,\r
+0x21,0x30,0xc3,0x00,0xce,0x04,0x42,0x90,0x5c,0x11,0x4a,0x8e,0x0c,0x00,0xe0,0x10,\r
+0x21,0x48,0x00,0x00,0x2b,0x48,0x47,0x00,0x0b,0x00,0x20,0x15,0x02,0x80,0x02,0x3c,\r
+0x07,0x00,0x22,0x2e,0x93,0x01,0x40,0x14,0xc0,0x10,0x07,0x00,0x0c,0x00,0x02,0x24,\r
+0x8f,0x01,0x22,0x12,0x0d,0x00,0x02,0x24,0x8e,0x01,0x22,0x12,0xc0,0x10,0x07,0x00,\r
+0x81,0x00,0x20,0x11,0x02,0x80,0x02,0x3c,0x78,0x1b,0x42,0x24,0x80,0x18,0x11,0x00,\r
+0x21,0x18,0x62,0x00,0x21,0x20,0x51,0x02,0xce,0x11,0x85,0x90,0xf8,0x04,0x62,0x8c,\r
+0x00,0x00,0x00,0x00,0x04,0x10,0xa2,0x00,0x2b,0x10,0x4a,0x00,0x76,0x00,0x40,0x10,\r
+0x00,0x00,0x00,0x00,0xec,0x11,0x42,0x8e,0x01,0x00,0x07,0x24,0x04,0x18,0x27,0x02,\r
+0x24,0x10,0x43,0x00,0x04,0x01,0x40,0x10,0x1c,0x00,0x22,0x2e,0x21,0x28,0x51,0x02,\r
+0x94,0x11,0xa6,0x90,0xce,0x11,0xa2,0x90,0x0a,0x00,0x04,0x24,0xff,0x00,0xc3,0x30,\r
+0x04,0x20,0x44,0x00,0x2a,0x18,0x64,0x00,0xfb,0x00,0x60,0x10,0x1c,0x00,0x22,0x2e,\r
+0x01,0x00,0xc2,0x24,0xff,0x00,0x43,0x30,0x8c,0x01,0x64,0x10,0x94,0x11,0xa2,0xa0,\r
+0x02,0x80,0x04,0x3c,0x78,0x1b,0x85,0x24,0x80,0x10,0x11,0x00,0x21,0x10,0x45,0x00,\r
+0x6c,0x05,0x44,0x8c,0xf8,0x04,0x43,0x8c,0x21,0x30,0xc5,0x02,0x40,0x10,0x04,0x00,\r
+0x21,0x10,0x44,0x00,0x21,0x18,0x62,0x00,0x82,0x50,0x03,0x00,0x5c,0x11,0xca,0xac,\r
+0xec,0x25,0xa3,0x8c,0xff,0xff,0x02,0x34,0x03,0x00,0x62,0x10,0x21,0x20,0x20,0x02,\r
+0x70,0x15,0x00,0x0c,0xff,0x00,0x65,0x32,0x86,0x15,0x00,0x0c,0x21,0x20,0x20,0x02,\r
+0x10,0x00,0xa4,0x8f,0x01,0x00,0x42,0x38,0x04,0x00,0x03,0x24,0x0a,0x20,0x62,0x00,\r
+0xbc,0x00,0x60,0x12,0x10,0x00,0xa4,0xaf,0x02,0x80,0x03,0x3c,0x78,0x1b,0x62,0x24,\r
+0x21,0x10,0xa2,0x02,0x70,0x11,0x40,0xac,0x74,0x11,0x40,0xac,0x78,0x11,0x40,0xac,\r
+0x60,0x11,0x40,0xac,0x64,0x11,0x40,0xac,0x68,0x11,0x40,0xac,0x6c,0x11,0x40,0xac,\r
+0x40,0x00,0xa4,0x8f,0x3c,0x00,0xa2,0x8f,0x01,0x00,0x73,0x26,0x94,0x00,0x84,0x24,\r
+0x94,0x00,0x42,0x24,0x40,0x00,0xa4,0xaf,0x3c,0x00,0xa2,0xaf,0x38,0x00,0xa4,0x8f,\r
+0x34,0x00,0xa2,0x8f,0x20,0x00,0x63,0x2a,0x94,0x00,0x84,0x24,0x94,0x00,0x42,0x24,\r
+0x38,0x00,0xa4,0xaf,0x34,0x00,0xa2,0xaf,0x30,0x00,0xa4,0x8f,0x2c,0x00,0xa2,0x8f,\r
+0x94,0x00,0x52,0x26,0x94,0x00,0x84,0x24,0x94,0x00,0x42,0x24,0x30,0x00,0xa4,0xaf,\r
+0x2c,0x00,0xa2,0xaf,0x28,0x00,0xa4,0x8f,0x24,0x00,0xa2,0x8f,0x94,0x00,0xd6,0x26,\r
+0x94,0x00,0x84,0x24,0x94,0x00,0x42,0x24,0x28,0x00,0xa4,0xaf,0x24,0x00,0xa2,0xaf,\r
+0x20,0x00,0xa4,0x8f,0x1c,0x00,0xa2,0x8f,0x94,0x00,0xde,0x27,0x94,0x00,0x84,0x24,\r
+0x94,0x00,0x42,0x24,0x20,0x00,0xa4,0xaf,0x1c,0x00,0xa2,0xaf,0x18,0x00,0xa4,0x8f,\r
+0x14,0x00,0xa2,0x8f,0x94,0x00,0x94,0x26,0x94,0x00,0x84,0x24,0x94,0x00,0x42,0x24,\r
+0x18,0x00,0xa4,0xaf,0x14,0x00,0xa2,0xaf,0x94,0x00,0xf7,0x26,0x59,0xff,0x60,0x14,\r
+0x94,0x00,0xb5,0x26,0x10,0x00,0xa3,0x8f,0x6c,0x00,0xbf,0x8f,0x68,0x00,0xbe,0x8f,\r
+0x64,0x00,0xb7,0x8f,0x60,0x00,0xb6,0x8f,0x5c,0x00,0xb5,0x8f,0x58,0x00,0xb4,0x8f,\r
+0x54,0x00,0xb3,0x8f,0x50,0x00,0xb2,0x8f,0x4c,0x00,0xb1,0x8f,0x48,0x00,0xb0,0x8f,\r
+0x25,0xb0,0x02,0x3c,0x80,0x01,0x42,0x34,0x70,0x00,0xbd,0x27,0x00,0x00,0x43,0xa0,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x87,0x00,0xe0,0x10,0x00,0x00,0x00,0x00,\r
+0x87,0x00,0x20,0x15,0x02,0x80,0x03,0x3c,0x40,0x10,0x07,0x00,0x21,0x10,0x47,0x00,\r
+0x82,0x10,0x02,0x00,0x2b,0x10,0x46,0x00,0xa7,0xff,0x40,0x10,0x00,0x00,0x00,0x00,\r
+0x20,0x00,0xa2,0x8f,0x02,0x80,0x04,0x3c,0x78,0x1b,0x88,0x24,0x21,0x20,0x48,0x00,\r
+0x21,0x30,0x91,0x00,0xec,0x11,0x83,0x8c,0x01,0x00,0x05,0x24,0x04,0x10,0x25,0x02,\r
+0xb1,0x11,0xc7,0x90,0x27,0x10,0x02,0x00,0x24,0x18,0x62,0x00,0xec,0x11,0x83,0xac,\r
+0x09,0x00,0xe5,0x10,0x94,0x11,0xc0,0xa0,0x1c,0x00,0xa3,0x8f,0x21,0x38,0x00,0x00,\r
+0x21,0x20,0x68,0x00,0x21,0x18,0x87,0x00,0x01,0x00,0xe7,0x24,0x1d,0x00,0xe2,0x28,\r
+0xfc,0xff,0x40,0x14,0xce,0x11,0x60,0xa0,0x02,0x80,0x04,0x3c,0x78,0x1b,0x83,0x24,\r
+0x18,0x00,0xa4,0x8f,0x21,0x50,0x60,0x00,0x21,0x38,0x00,0x00,0x21,0x10,0x83,0x00,\r
+0x21,0x10,0x51,0x00,0xb1,0x11,0x40,0xa0,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,\r
+0x70,0xae,0x49,0x24,0xfc,0xad,0x68,0x24,0x80,0x18,0x07,0x00,0x21,0x10,0x69,0x00,\r
+0x21,0x20,0x68,0x00,0x00,0x00,0x46,0x8c,0x00,0x00,0x85,0x8c,0x01,0x00,0xe7,0x24,\r
+0x21,0x18,0x6a,0x00,0x1d,0x00,0xe2,0x28,0xf8,0x04,0x65,0xac,0xf6,0xff,0x40,0x14,\r
+0x6c,0x05,0x66,0xac,0x15,0x00,0x20,0x12,0x02,0x80,0x05,0x3c,0x93,0x11,0x82,0x92,\r
+0xff,0xff,0x27,0x26,0x2a,0x10,0xe2,0x00,0x10,0x00,0x40,0x14,0x02,0x80,0x03,0x3c,\r
+0x14,0x00,0xa4,0x8f,0x78,0x1b,0x62,0x24,0x21,0x10,0x82,0x00,0x93,0x11,0x45,0x90,\r
+0x8c,0x11,0x44,0x8c,0x01,0x00,0x06,0x24,0x04,0x18,0xe6,0x00,0x24,0x10,0x83,0x00,\r
+0x06,0x01,0x43,0x10,0x00,0x00,0x00,0x00,0xff,0xff,0xe7,0x24,0x2a,0x10,0xe5,0x00,\r
+0xfa,0xff,0x40,0x10,0x04,0x18,0xe6,0x00,0x02,0x80,0x05,0x3c,0x56,0x43,0xa3,0x90,\r
+0x22,0x00,0x02,0x24,0xe8,0x00,0x62,0x10,0x02,0x80,0x03,0x3c,0x02,0x80,0x04,0x3c,\r
+0x78,0x1b,0x83,0x24,0x80,0x10,0x11,0x00,0x21,0x10,0x43,0x00,0x6c,0x05,0x44,0x8c,\r
+0xf8,0x04,0x43,0x8c,0x56,0x43,0xa5,0x90,0x40,0x10,0x04,0x00,0x21,0x10,0x44,0x00,\r
+0x21,0x18,0x62,0x00,0x22,0x00,0x02,0x24,0xd6,0x00,0xa2,0x10,0x82,0x50,0x03,0x00,\r
+0xec,0x11,0x83,0x8e,0x01,0x00,0x02,0x24,0x04,0x10,0x22,0x02,0x25,0x18,0x62,0x00,\r
+0xec,0x11,0x83,0xae,0x02,0x80,0x02,0x3c,0x78,0x1b,0x43,0x24,0x21,0x10,0xe3,0x02,\r
+0x5c,0x11,0x4a,0xac,0xec,0x25,0x64,0x8c,0xff,0xff,0x02,0x34,0x44,0xff,0x82,0x14,\r
+0x21,0x20,0x20,0x02,0x86,0x15,0x00,0x0c,0x21,0x20,0x20,0x02,0x10,0x00,0xa4,0x8f,\r
+0x01,0x00,0x42,0x38,0x04,0x00,0x03,0x24,0x0a,0x20,0x62,0x00,0x46,0xff,0x60,0x16,\r
+0x10,0x00,0xa4,0xaf,0x02,0x80,0x02,0x3c,0x78,0x1b,0x50,0x24,0x64,0x11,0x05,0x96,\r
+0x60,0x11,0x02,0x96,0x25,0xb0,0x11,0x3c,0x00,0x2c,0x05,0x00,0x21,0x28,0x45,0x00,\r
+0x10,0x50,0x00,0x0c,0x68,0x0c,0x24,0x36,0x70,0x11,0x02,0x8e,0x6c,0x11,0x05,0x8e,\r
+0x68,0x11,0x03,0x96,0x6c,0x0c,0x24,0x36,0x21,0x28,0xa2,0x00,0x00,0x2c,0x05,0x00,\r
+0x10,0x50,0x00,0x0c,0x21,0x28,0x65,0x00,0xaf,0x16,0x00,0x08,0x02,0x80,0x03,0x3c,\r
+0x59,0x16,0x00,0x08,0x5c,0x11,0x40,0xae,0x27,0xff,0x20,0x11,0x02,0x80,0x03,0x3c,\r
+0x78,0x1b,0x62,0x24,0x80,0x18,0x11,0x00,0x21,0x18,0x62,0x00,0x6c,0x05,0x64,0x8c,\r
+0x00,0x00,0x00,0x00,0x2b,0x20,0x44,0x01,0x1f,0xff,0x80,0x10,0x00,0x00,0x00,0x00,\r
+0x00,0x17,0x00,0x08,0x00,0x00,0x00,0x00,0x0a,0xff,0x40,0x10,0x02,0x80,0x04,0x3c,\r
+0x21,0x20,0x51,0x02,0xb1,0x11,0x83,0x90,0x01,0x00,0x02,0x24,0x78,0x00,0x62,0x10,\r
+0x02,0x80,0x02,0x3c,0x40,0x00,0xa3,0x8f,0x78,0x1b,0x42,0x24,0x21,0x20,0x62,0x00,\r
+0x21,0x38,0x00,0x00,0x21,0x18,0x87,0x00,0x01,0x00,0xe7,0x24,0x1d,0x00,0xe2,0x28,\r
+0xfc,0xff,0x40,0x14,0xce,0x11,0x60,0xa0,0x3c,0x00,0xa2,0x8f,0x02,0x80,0x04,0x3c,\r
+0x78,0x1b,0x85,0x24,0x21,0x30,0x45,0x00,0xec,0x11,0xc2,0x8c,0x01,0x00,0x03,0x24,\r
+0x04,0x18,0x23,0x02,0x27,0x18,0x03,0x00,0x21,0x20,0xd1,0x00,0x24,0x10,0x43,0x00,\r
+0xb1,0x11,0x80,0xa0,0xec,0x11,0xc2,0xac,0x12,0x00,0x20,0x16,0x94,0x11,0x80,0xa0,\r
+0x92,0x11,0xc2,0x90,0x00,0x00,0x00,0x00,0x0e,0x00,0x40,0x10,0x01,0x00,0x07,0x24,\r
+0x38,0x00,0xa3,0x8f,0x01,0x00,0x06,0x24,0x21,0x10,0x65,0x00,0x92,0x11,0x44,0x90,\r
+0x8c,0x11,0x45,0x8c,0x04,0x18,0xe6,0x00,0x24,0x10,0xa3,0x00,0x8d,0x00,0x43,0x10,\r
+0x00,0x00,0x00,0x00,0x01,0x00,0xe7,0x24,0x2a,0x10,0x87,0x00,0xfa,0xff,0x40,0x10,\r
+0x04,0x18,0xe6,0x00,0x02,0x80,0x02,0x3c,0x78,0x1b,0x44,0x24,0x34,0x00,0xa2,0x8f,\r
+0x01,0x00,0x27,0x26,0x21,0x18,0x44,0x00,0x92,0x11,0x62,0x90,0x00,0x00,0x00,0x00,\r
+0x2a,0x10,0x47,0x00,0x0f,0x00,0x40,0x14,0x02,0x80,0x05,0x3c,0x30,0x00,0xa3,0x8f,\r
+0x01,0x00,0x06,0x24,0x21,0x10,0x64,0x00,0x92,0x11,0x45,0x90,0x8c,0x11,0x44,0x8c,\r
+0x04,0x18,0xe6,0x00,0x24,0x10,0x83,0x00,0x73,0x00,0x43,0x10,0x00,0x00,0x00,0x00,\r
+0x01,0x00,0xe7,0x24,0x2a,0x10,0xa7,0x00,0xfa,0xff,0x40,0x10,0x04,0x18,0xe6,0x00,\r
+0x02,0x80,0x05,0x3c,0x56,0x43,0xa3,0x90,0x22,0x00,0x02,0x24,0x3e,0x00,0x62,0x10,\r
+0xee,0xff,0x22,0x26,0x56,0x43,0xa3,0x90,0x22,0x00,0x02,0x24,0xbd,0xfe,0x62,0x14,\r
+0x02,0x80,0x04,0x3c,0x28,0x00,0xa2,0x8f,0x78,0x1b,0x86,0x24,0x21,0x20,0x46,0x00,\r
+0x90,0x11,0x85,0x8c,0x01,0x00,0x03,0x24,0x42,0x13,0x05,0x00,0x07,0x00,0x42,0x30,\r
+0xb3,0xfe,0x43,0x10,0x14,0x00,0x22,0x2e,0xb1,0xfe,0x40,0x14,0x1c,0x00,0x22,0x2e,\r
+0xaf,0xfe,0x40,0x10,0xff,0xff,0x02,0x3c,0xff,0x1f,0x42,0x34,0x24,0x10,0xa2,0x00,\r
+0x00,0x20,0x42,0x34,0x90,0x11,0x82,0xac,0x93,0x11,0x83,0x90,0xff,0xff,0x27,0x26,\r
+0x2a,0x18,0xe3,0x00,0xa6,0xfe,0x60,0x14,0x00,0x00,0x00,0x00,0x24,0x00,0xa3,0x8f,\r
+0x00,0x00,0x00,0x00,0x21,0x10,0x66,0x00,0x93,0x11,0x45,0x90,0x8c,0x11,0x44,0x8c,\r
+0xf9,0x17,0x00,0x08,0x01,0x00,0x06,0x24,0x2a,0x10,0xe5,0x00,0x9c,0xfe,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0x04,0x18,0xe6,0x00,0x24,0x10,0x83,0x00,0xfa,0xff,0x43,0x14,\r
+0xff,0xff,0xe7,0x24,0x01,0x00,0xe7,0x24,0x94,0x16,0x00,0x08,0xff,0x00,0xf1,0x30,\r
+0xc0,0x10,0x07,0x00,0x23,0x10,0x47,0x00,0xc2,0x10,0x02,0x00,0x2b,0x10,0x48,0x00,\r
+0x7c,0xfe,0x40,0x14,0x00,0x00,0x00,0x00,0x74,0x16,0x00,0x08,0x00,0x00,0x00,0x00,\r
+0x18,0x00,0x22,0x2e,0x17,0x00,0x40,0x14,0x05,0x00,0x22,0x2e,0xce,0x11,0x83,0x90,\r
+0x00,0x00,0x00,0x00,0x05,0x00,0x62,0x2c,0x8b,0xff,0x40,0x10,0x01,0x00,0x62,0x24,\r
+0x9a,0x17,0x00,0x08,0xce,0x11,0x82,0xa0,0xff,0x00,0x42,0x30,0x02,0x00,0x42,0x2c,\r
+0xc0,0xff,0x40,0x10,0x02,0x80,0x04,0x3c,0x2c,0x00,0xa3,0x8f,0x78,0x1b,0x82,0x24,\r
+0x21,0x10,0x62,0x00,0x8c,0x11,0x43,0x8c,0x00,0x01,0x04,0x3c,0x18,0x00,0x02,0x24,\r
+0x24,0x18,0x64,0x00,0xd5,0x17,0x00,0x08,0x0b,0x88,0x43,0x00,0x94,0x16,0x00,0x08,\r
+0xb1,0x11,0xa7,0xa0,0x04,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0xce,0x11,0x83,0x90,\r
+0x0e,0x18,0x00,0x08,0x03,0x00,0x62,0x2c,0xce,0x11,0x83,0x90,0x0e,0x18,0x00,0x08,\r
+0x04,0x00,0x62,0x2c,0x13,0x00,0x02,0x24,0x29,0xff,0x22,0x16,0x02,0x80,0x02,0x3c,\r
+0x5b,0x17,0x00,0x08,0x78,0x1b,0x43,0x24,0x78,0x1b,0x62,0x24,0x21,0x20,0xc2,0x03,\r
+0x90,0x11,0x83,0x8c,0x00,0x00,0x00,0x00,0x42,0x13,0x03,0x00,0x07,0x00,0x42,0x30,\r
+0x12,0xff,0x40,0x10,0x14,0x00,0x22,0x2e,0x10,0xff,0x40,0x10,0x0c,0x00,0x22,0x2e,\r
+0x0e,0xff,0x40,0x14,0xff,0xff,0x02,0x3c,0xff,0x1f,0x42,0x34,0x24,0x10,0x62,0x00,\r
+0x47,0x17,0x00,0x08,0x90,0x11,0x82,0xac,0xff,0x00,0xf1,0x30,0xd1,0x17,0x00,0x08,\r
+0x02,0x80,0x05,0x3c,0xb9,0x17,0x00,0x08,0xff,0x00,0xf1,0x30,0x42,0x17,0x00,0x08,\r
+0xff,0x00,0xf1,0x30,0xa8,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c,0x38,0x00,0xb2,0xaf,\r
+0x54,0x00,0xbf,0xaf,0x50,0x00,0xbe,0xaf,0x4c,0x00,0xb7,0xaf,0x48,0x00,0xb6,0xaf,\r
+0x44,0x00,0xb5,0xaf,0x40,0x00,0xb4,0xaf,0x3c,0x00,0xb3,0xaf,0x34,0x00,0xb1,0xaf,\r
+0x30,0x00,0xb0,0xaf,0x78,0x1b,0x46,0x24,0x71,0x25,0xc4,0x90,0x6c,0x25,0xc3,0x8c,\r
+0x68,0x25,0xc2,0x8c,0x21,0x90,0x64,0x00,0x2b,0x10,0x42,0x02,0x7e,0x00,0x40,0x10,\r
+0x21,0x88,0xc0,0x00,0x02,0x80,0x1e,0x3c,0x02,0x80,0x17,0x3c,0x21,0xa8,0xc0,0x00,\r
+0x21,0xb0,0xc0,0x00,0x64,0x18,0x00,0x08,0x01,0x00,0x14,0x24,0x68,0x25,0xc2,0x8e,\r
+0x10,0x00,0x52,0x26,0x2b,0x10,0x42,0x02,0x73,0x00,0x40,0x10,0x21,0x88,0xc0,0x02,\r
+0x71,0x25,0x22,0x92,0xff,0xff,0x45,0x32,0x25,0x28,0xb7,0x00,0x10,0x00,0x42,0x24,\r
+0x71,0x25,0x22,0xa2,0x54,0x3f,0xc4,0x27,0x46,0x46,0x00,0x0c,0x10,0x00,0x06,0x24,\r
+0x04,0x24,0x23,0x8e,0x00,0x00,0x00,0x00,0x42,0x18,0x03,0x00,0x01,0x00,0x63,0x30,\r
+0x71,0x00,0x74,0x10,0x02,0x80,0x03,0x3c,0x78,0x1b,0x63,0x24,0xe0,0x23,0x62,0x8c,\r
+0x00,0x00,0x00,0x00,0x42,0x84,0x02,0x00,0x1f,0x00,0x10,0x32,0xc0,0x48,0x10,0x00,\r
+0x21,0x10,0x30,0x01,0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00,0x80,0x10,0x02,0x00,\r
+0x21,0x10,0x55,0x00,0x90,0x11,0x45,0x8c,0x00,0x00,0x00,0x00,0x02,0x1b,0x05,0x00,\r
+0x01,0x00,0x63,0x30,0xdd,0xff,0x60,0x10,0x21,0x30,0xa0,0x02,0x25,0xb0,0x02,0x3c,\r
+0x21,0x40,0x02,0x02,0xdc,0x23,0xa7,0x8e,0x04,0x24,0xa2,0x8e,0x60,0x01,0x03,0x91,\r
+0x82,0x25,0x07,0x00,0x01,0x00,0x42,0x30,0xff,0x00,0x6b,0x30,0x9a,0x00,0x54,0x10,\r
+0x3f,0x00,0x8a,0x30,0x02,0x80,0x04,0x3c,0x14,0xb0,0x84,0x24,0x00,0x00,0x86,0x8c,\r
+0x04,0x00,0x04,0x24,0xdc,0x23,0xc3,0x8c,0x00,0x00,0x00,0x00,0x82,0x15,0x03,0x00,\r
+0x3f,0x00,0x42,0x30,0x05,0x00,0x42,0x28,0x0a,0x00,0x60,0x04,0x0a,0x50,0x82,0x00,\r
+0x21,0x10,0x30,0x01,0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00,0x80,0x10,0x02,0x00,\r
+0x21,0x10,0x46,0x00,0x7c,0x11,0x43,0x8c,0x04,0x00,0x0a,0x24,0x01,0x00,0x63,0x24,\r
+0x7c,0x11,0x43,0xac,0xe0,0x23,0xc2,0x8c,0x00,0x00,0x00,0x00,0x02,0x13,0x02,0x00,\r
+0x1f,0x00,0x42,0x30,0x08,0x00,0x42,0x28,0xb8,0xff,0x40,0x10,0x00,0x00,0x00,0x00,\r
+0xdc,0x23,0xc2,0x8c,0x00,0x00,0x00,0x00,0x3f,0x00,0x42,0x30,0xb3,0xff,0x4b,0x14,\r
+0x00,0x00,0x00,0x00,0x9f,0x00,0x40,0x11,0x21,0x10,0x30,0x01,0xa8,0x00,0x54,0x11,\r
+0x80,0x10,0x02,0x00,0x02,0x00,0x02,0x24,0xb0,0x00,0x42,0x11,0x21,0x10,0x30,0x01,\r
+0x03,0x00,0x02,0x24,0xb8,0x00,0x42,0x11,0x21,0x10,0x30,0x01,0xc0,0x00,0x44,0x11,\r
+0x21,0x10,0x30,0x01,0x21,0x10,0x30,0x01,0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00,\r
+0x80,0x10,0x02,0x00,0x21,0x28,0x46,0x00,0x80,0x11,0xa3,0x8c,0x21,0x10,0x66,0x01,\r
+0x94,0x04,0x44,0x90,0x02,0x19,0x03,0x00,0x2b,0x18,0x64,0x00,0xc8,0x00,0x60,0x14,\r
+0x00,0x00,0x00,0x00,0x74,0x11,0xa3,0x8c,0x80,0x10,0x0b,0x00,0x21,0x10,0x4b,0x00,\r
+0x01,0x00,0x63,0x24,0x21,0x10,0x46,0x00,0x74,0x11,0xa3,0xac,0x21,0x10,0x4a,0x00,\r
+0x38,0x03,0x44,0x90,0x5c,0x11,0xa3,0x8c,0x00,0x00,0x00,0x00,0x21,0x18,0x64,0x00,\r
+0x5c,0x11,0xa3,0xac,0x68,0x25,0xc2,0x8e,0x10,0x00,0x52,0x26,0x2b,0x10,0x42,0x02,\r
+0x8f,0xff,0x40,0x14,0x21,0x88,0xc0,0x02,0x54,0x00,0xbf,0x8f,0x50,0x00,0xbe,0x8f,\r
+0x4c,0x00,0xb7,0x8f,0x48,0x00,0xb6,0x8f,0x44,0x00,0xb5,0x8f,0x40,0x00,0xb4,0x8f,\r
+0x3c,0x00,0xb3,0x8f,0x38,0x00,0xb2,0x8f,0x34,0x00,0xb1,0x8f,0x30,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x58,0x00,0xbd,0x27,0xe0,0x23,0x22,0x8e,0x00,0x00,0x00,0x00,\r
+0x42,0x14,0x02,0x00,0x10,0x00,0x43,0x30,0x90,0xff,0x60,0x10,0x0f,0x00,0x50,0x30,\r
+0x39,0x15,0x00,0x0c,0x48,0x00,0x04,0x24,0x74,0xff,0x40,0x10,0x21,0x98,0x40,0x00,\r
+0x14,0x00,0x02,0x24,0x28,0x00,0x04,0x24,0x14,0x00,0x62,0xae,0x0c,0x00,0x64,0xae,\r
+0x14,0x00,0xa3,0x8f,0xe0,0xff,0x04,0x24,0x08,0x00,0x07,0x24,0x80,0x00,0x63,0x34,\r
+0x14,0x00,0xa3,0xaf,0xe0,0x23,0x26,0x8e,0x24,0x18,0x64,0x00,0xff,0xe0,0x04,0x24,\r
+0x42,0x14,0x06,0x00,0x1f,0x00,0x42,0x30,0x25,0x18,0x62,0x00,0x14,0x00,0xa3,0xaf,\r
+0xdc,0x23,0x25,0x8e,0x24,0x18,0x64,0x00,0x02,0x23,0x06,0x00,0x82,0x13,0x05,0x00,\r
+0x00,0x1f,0x42,0x30,0x25,0x18,0x62,0x00,0xff,0xff,0x02,0x3c,0xff,0x7f,0x42,0x34,\r
+0xc2,0x2f,0x05,0x00,0x24,0x18,0x62,0x00,0xc0,0x2b,0x05,0x00,0x0f,0x00,0x02,0x3c,\r
+0x25,0x18,0x65,0x00,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0x00,0x35,0x06,0x00,\r
+0xf0,0xff,0x02,0x3c,0x25,0x18,0x66,0x00,0xff,0xff,0x42,0x34,0x0f,0x00,0x84,0x30,\r
+0x24,0x18,0x62,0x00,0x00,0x24,0x04,0x00,0x25,0x18,0x64,0x00,0x02,0x80,0x04,0x3c,\r
+0x10,0x00,0xa5,0x27,0xa8,0x3f,0x84,0x24,0x02,0x00,0x06,0x24,0x04,0x00,0x02,0x24,\r
+0x11,0x00,0xa7,0xa3,0x14,0x00,0xa3,0xaf,0x52,0x46,0x00,0x0c,0x10,0x00,0xa2,0xa3,\r
+0x08,0x00,0x64,0x96,0x10,0x00,0xa5,0x27,0x02,0x00,0x06,0x24,0x25,0x20,0x97,0x00,\r
+0x52,0x46,0x00,0x0c,0x20,0x00,0x84,0x24,0x59,0x0a,0x00,0x0c,0x21,0x20,0x60,0x02,\r
+0x78,0x18,0x00,0x08,0xc0,0x48,0x10,0x00,0x02,0x12,0x05,0x00,0x01,0x00,0x42,0x30,\r
+0x14,0x00,0x54,0x10,0xc2,0x10,0x05,0x00,0x01,0x00,0x42,0x30,0x76,0x00,0x54,0x10,\r
+0x00,0x00,0x00,0x00,0x10,0x24,0xa2,0x96,0x60,0x01,0x03,0x91,0xc2,0x27,0x07,0x00,\r
+0x21,0x10,0x42,0x01,0x2c,0x24,0xa3,0xa2,0x13,0x00,0x80,0x10,0x10,0x24,0xa2,0xa6,\r
+0x59,0xff,0x94,0x14,0x02,0x80,0x04,0x3c,0x0c,0x24,0xa2,0x96,0x16,0x24,0xa3,0x96,\r
+0x01,0x00,0x42,0x24,0x01,0x00,0x63,0x24,0x0c,0x24,0xa2,0xa6,0x8e,0x18,0x00,0x08,\r
+0x16,0x24,0xa3,0xa6,0x5d,0x00,0xe0,0x04,0x00,0x00,0x00,0x00,0x0e,0x24,0xa3,0x96,\r
+0x1a,0x24,0xa2,0x96,0x01,0x00,0x63,0x24,0x01,0x00,0x42,0x24,0x1a,0x24,0xa2,0xa6,\r
+0x8d,0x18,0x00,0x08,0x0e,0x24,0xc3,0xa4,0x0e,0x24,0xa3,0x96,0x1c,0x24,0xa2,0x96,\r
+0x01,0x00,0x63,0x24,0x01,0x00,0x42,0x24,0x1c,0x24,0xa2,0xa6,0x8d,0x18,0x00,0x08,\r
+0x0e,0x24,0xc3,0xa4,0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00,0x80,0x10,0x02,0x00,\r
+0x21,0x10,0x46,0x00,0x60,0x11,0x43,0x8c,0x00,0x00,0x00,0x00,0x01,0x00,0x63,0x24,\r
+0x5c,0xff,0x54,0x15,0x60,0x11,0x43,0xac,0x21,0x10,0x30,0x01,0x80,0x10,0x02,0x00,\r
+0x21,0x10,0x50,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x46,0x00,0x64,0x11,0x43,0x8c,\r
+0x00,0x00,0x00,0x00,0x01,0x00,0x63,0x24,0x64,0x11,0x43,0xac,0x02,0x00,0x02,0x24,\r
+0x54,0xff,0x42,0x15,0x03,0x00,0x02,0x24,0x21,0x10,0x30,0x01,0x80,0x10,0x02,0x00,\r
+0x21,0x10,0x50,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x46,0x00,0x68,0x11,0x43,0x8c,\r
+0x00,0x00,0x00,0x00,0x01,0x00,0x63,0x24,0x68,0x11,0x43,0xac,0x03,0x00,0x02,0x24,\r
+0x4a,0xff,0x42,0x15,0x21,0x10,0x30,0x01,0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00,\r
+0x80,0x10,0x02,0x00,0x21,0x10,0x46,0x00,0x6c,0x11,0x43,0x8c,0x00,0x00,0x00,0x00,\r
+0x01,0x00,0x63,0x24,0x43,0xff,0x44,0x15,0x6c,0x11,0x43,0xac,0x21,0x10,0x30,0x01,\r
+0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x46,0x00,\r
+0x70,0x11,0x43,0x8c,0x00,0x00,0x00,0x00,0x01,0x00,0x63,0x24,0x70,0x11,0x43,0xac,\r
+0x21,0x10,0x30,0x01,0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00,0x80,0x10,0x02,0x00,\r
+0x21,0x28,0x46,0x00,0x80,0x11,0xa3,0x8c,0x21,0x10,0x66,0x01,0x94,0x04,0x44,0x90,\r
+0x02,0x19,0x03,0x00,0x2b,0x18,0x64,0x00,0x3a,0xff,0x60,0x10,0x00,0x00,0x00,0x00,\r
+0x78,0x11,0xa3,0x8c,0x80,0x10,0x0b,0x00,0x02,0x80,0x04,0x3c,0x78,0x1b,0x84,0x24,\r
+0x21,0x10,0x4b,0x00,0x01,0x00,0x63,0x24,0x21,0x10,0x44,0x00,0x78,0x11,0xa3,0xac,\r
+0x21,0x10,0x4a,0x00,0xc9,0x03,0x44,0x90,0x5c,0x11,0xa3,0x8c,0x00,0x00,0x00,0x00,\r
+0x21,0x18,0x64,0x00,0xd1,0x18,0x00,0x08,0x5c,0x11,0xa3,0xac,0x0c,0x24,0xa3,0x96,\r
+0x14,0x24,0xa2,0x96,0x01,0x00,0x63,0x24,0x01,0x00,0x42,0x24,0x14,0x24,0xa2,0xa6,\r
+0x8d,0x18,0x00,0x08,0x0c,0x24,0xc3,0xa4,0x08,0x00,0xe0,0x04,0x00,0x00,0x00,0x00,\r
+0x0e,0x24,0xa3,0x96,0x18,0x24,0xa2,0x96,0x01,0x00,0x63,0x24,0x01,0x00,0x42,0x24,\r
+0x18,0x24,0xa2,0xa6,0x8d,0x18,0x00,0x08,0x0e,0x24,0xc3,0xa4,0x0c,0x24,0xa3,0x96,\r
+0x12,0x24,0xa2,0x96,0x01,0x00,0x63,0x24,0x01,0x00,0x42,0x24,0x12,0x24,0xa2,0xa6,\r
+0x8d,0x18,0x00,0x08,0x0c,0x24,0xc3,0xa4,0x02,0x80,0x0a,0x3c,0x78,0x1b,0x42,0x8d,\r
+0xe8,0xff,0xbd,0x27,0x42,0x10,0x02,0x00,0x01,0x00,0x42,0x30,0x11,0x00,0x40,0x14,\r
+0x10,0x00,0xbf,0xaf,0x25,0xb0,0x05,0x3c,0x4c,0x00,0xa2,0x34,0x00,0x00,0x43,0x90,\r
+0x78,0x1b,0x46,0x25,0xf9,0x0a,0xc2,0x90,0x03,0x00,0x67,0x30,0x09,0x00,0x47,0x10,\r
+0x58,0x00,0xa2,0x34,0x00,0x00,0x44,0x8c,0x29,0xb0,0x03,0x3c,0x5c,0x00,0xa2,0x34,\r
+0x00,0x00,0x64,0xac,0x00,0x00,0x44,0x8c,0x04,0x00,0x63,0x34,0xf9,0x0a,0xc7,0xa0,\r
+0x00,0x00,0x64,0xac,0x78,0x1b,0x42,0x25,0xcb,0x02,0x43,0x90,0x25,0xb0,0x02,0x3c,\r
+0x90,0x0c,0x42,0x34,0x0f,0x00,0x63,0x30,0x00,0x00,0x43,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x78,0x1b,0x42,0x25,0xc9,0x02,0x44,0x90,0x25,0xb0,0x03,0x3c,\r
+0x91,0x0c,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,\r
+0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,\r
+0x78,0x1b,0x42,0x25,0xca,0x02,0x44,0x90,0x25,0xb0,0x03,0x3c,0x92,0x0c,0x63,0x34,\r
+0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x78,0x1b,0x42,0x25,\r
+0xc8,0x02,0x43,0x8c,0x25,0xb0,0x02,0x3c,0x93,0x0c,0x42,0x34,0x02,0x1f,0x03,0x00,\r
+0x00,0x00,0x43,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x78,0x1b,0x42,0x25,\r
+0xea,0x02,0x44,0x90,0x25,0xb0,0x03,0x3c,0x98,0x0c,0x63,0x34,0x00,0x00,0x64,0xa0,\r
+0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,\r
+0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x25,0xb0,0x02,0x3c,0x2d,0x0a,0x46,0x34,\r
+0xa2,0x0d,0x43,0x34,0xa4,0x0d,0x44,0x34,0xa6,0x0d,0x45,0x34,0xa8,0x0d,0x42,0x34,\r
+0x00,0x00,0x67,0x94,0x00,0x00,0x88,0x94,0x00,0x00,0xa9,0x94,0x00,0x00,0x44,0x94,\r
+0x00,0x00,0xc3,0x90,0x78,0x1b,0x42,0x25,0xe2,0x02,0x44,0xa4,0x40,0x00,0x63,0x34,\r
+0xff,0x00,0x63,0x30,0x00,0x00,0xc3,0xa0,0xdc,0x02,0x47,0xa4,0xde,0x02,0x48,0xa4,\r
+0xe0,0x02,0x49,0xa4,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x25,0xb0,0x07,0x3c,\r
+0x5b,0x0a,0xe2,0x34,0x00,0x00,0x44,0x90,0x78,0x1b,0x46,0x25,0x5c,0x0a,0xe2,0x34,\r
+0x00,0x00,0x45,0x90,0xdc,0x02,0xc3,0x94,0xde,0x02,0xc2,0x94,0xe0,0x02,0xc9,0x94,\r
+0xe2,0x02,0xc8,0x94,0xff,0x00,0x84,0x30,0x21,0x18,0x62,0x00,0x00,0x22,0x04,0x00,\r
+0xff,0x00,0xa5,0x30,0x21,0x20,0x85,0x00,0x21,0x18,0x69,0x00,0xff,0xff,0x82,0x30,\r
+0x21,0x18,0x68,0x00,0x21,0x18,0x62,0x00,0x64,0x0c,0xe7,0x34,0xff,0xff,0x42,0x30,\r
+0xe4,0x02,0xc3,0xac,0x00,0x00,0xe2,0xa4,0xe8,0x02,0xc4,0xa4,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x78,0x1b,0x42,0x8d,0x01,0x00,0x03,0x24,0x01,0x00,0x44,0x30,\r
+0x07,0x00,0x83,0x10,0x78,0x1b,0x45,0x25,0x24,0x5a,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x10,0x00,0xbf,0x8f,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,\r
+0xe8,0x02,0xa2,0x8c,0x00,0x00,0x00,0x00,0x02,0x17,0x02,0x00,0x01,0x00,0x42,0x30,\r
+0xf5,0xff,0x40,0x14,0x25,0xb0,0x02,0x3c,0x4c,0x00,0x42,0x34,0x00,0x00,0x43,0x90,\r
+0x00,0x00,0x00,0x00,0x03,0x00,0x63,0x30,0x4e,0x00,0x64,0x10,0x00,0x00,0x00,0x00,\r
+0x78,0x1b,0x45,0x25,0xea,0x02,0xa2,0x90,0x00,0x00,0x00,0x00,0x07,0x00,0x40,0x14,\r
+0x78,0x1b,0x46,0x25,0x78,0x1b,0x42,0x8d,0x01,0x00,0x03,0x24,0x02,0x11,0x02,0x00,\r
+0x03,0x00,0x42,0x30,0x49,0x00,0x43,0x10,0x3e,0x00,0x02,0x24,0xea,0x02,0xc3,0x90,\r
+0xff,0x00,0x02,0x24,0xe0,0xff,0x62,0x14,0x25,0xb0,0x02,0x3c,0x50,0x0c,0x42,0x34,\r
+0x00,0x00,0x45,0x90,0xcc,0x02,0xc4,0x94,0xe4,0x02,0xc7,0x8c,0x32,0x00,0x02,0x24,\r
+0x20,0x00,0x03,0x24,0x7f,0x00,0xa5,0x30,0x2b,0x20,0xe4,0x00,0xd4,0x02,0xc2,0xa0,\r
+0xd5,0x02,0xc3,0xa0,0x0c,0x00,0x80,0x14,0xff,0xff,0xa2,0x24,0xce,0x02,0xc2,0x94,\r
+0x00,0x00,0x00,0x00,0x2b,0x10,0xe2,0x00,0x09,0x00,0x40,0x14,0x78,0x1b,0x44,0x25,\r
+0xd0,0x02,0xc2,0x94,0x00,0x00,0x00,0x00,0x2b,0x10,0xe2,0x00,0x02,0x00,0x40,0x10,\r
+0x02,0x00,0xa2,0x24,0x01,0x00,0xa2,0x24,0xff,0x00,0x45,0x30,0x78,0x1b,0x44,0x25,\r
+0xd4,0x02,0x83,0x90,0x00,0x00,0x00,0x00,0x2b,0x10,0x65,0x00,0x7e,0x00,0x40,0x10,\r
+0x00,0x00,0x00,0x00,0x21,0x28,0x60,0x00,0x78,0x1b,0x43,0x25,0xe4,0x02,0x62,0x8c,\r
+0x00,0x00,0x00,0x00,0x11,0x27,0x42,0x2c,0x73,0x00,0x40,0x14,0x3a,0x00,0xa2,0x2c,\r
+0x32,0x00,0x05,0x24,0x44,0x00,0x03,0x24,0x25,0xb0,0x02,0x3c,0x30,0x0c,0x42,0x34,\r
+0x00,0x00,0x43,0xa0,0x25,0xb0,0x02,0x3c,0x50,0x0c,0x42,0x34,0x00,0x00,0x45,0xa0,\r
+0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,\r
+0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x25,0xb0,0x02,0x3c,0x58,0x0c,0x42,0x34,\r
+0x00,0x00,0x45,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x3e,0x1a,0x00,0x08,\r
+0x00,0x00,0x00,0x00,0xea,0x02,0xa2,0x90,0x00,0x00,0x00,0x00,0xb0,0xff,0x40,0x14,\r
+0xff,0xff,0x02,0x24,0x50,0x1a,0x00,0x08,0xea,0x02,0xa2,0xa0,0x02,0x00,0xa4,0x90,\r
+0xd4,0x02,0xa2,0xa0,0x1c,0x00,0x03,0x24,0x06,0x00,0x02,0x24,0x57,0x00,0x82,0x10,\r
+0xd5,0x02,0xa3,0xa0,0x25,0xb0,0x02,0x3c,0x4c,0x00,0x42,0x34,0x00,0x00,0x43,0x90,\r
+0x00,0x00,0x00,0x00,0x03,0x00,0x63,0x30,0x8f,0xff,0x60,0x10,0x78,0x1b,0x44,0x25,\r
+0x80,0x11,0x83,0x8c,0xff,0xff,0x02,0x34,0x8b,0xff,0x62,0x10,0x00,0x00,0x00,0x00,\r
+0xe4,0x02,0x83,0x8c,0x00,0x00,0x00,0x00,0xe9,0x03,0x62,0x2c,0x5c,0x00,0x40,0x14,\r
+0x90,0x01,0x62,0x2c,0xd6,0x02,0x83,0x90,0x00,0x00,0x00,0x00,0x00,0x16,0x03,0x00,\r
+0x03,0x16,0x02,0x00,0xfe,0xff,0x42,0x24,0xfc,0xff,0x42,0x28,0x02,0x00,0x40,0x10,\r
+0xfe,0xff,0x62,0x24,0xfc,0xff,0x02,0x24,0xd6,0x02,0x82,0xa0,0x78,0x1b,0x44,0x25,\r
+0x80,0x11,0x82,0x8c,0xd6,0x02,0x83,0x90,0xd2,0x02,0x85,0x90,0x02,0x11,0x02,0x00,\r
+0x7f,0x00,0x42,0x30,0x0a,0x00,0x47,0x24,0x23,0x18,0xe3,0x00,0x00,0x3e,0x03,0x00,\r
+0x03,0x3e,0x07,0x00,0xff,0x00,0xa2,0x30,0x2a,0x10,0x47,0x00,0x3e,0x00,0x40,0x10,\r
+0x00,0x00,0x00,0x00,0x00,0x3e,0x05,0x00,0x03,0x3e,0x07,0x00,0x78,0x1b,0x43,0x25,\r
+0xe4,0x02,0x62,0x8c,0x00,0x00,0x00,0x00,0x11,0x27,0x42,0x2c,0x32,0x00,0x40,0x14,\r
+0x3a,0x00,0xe2,0x28,0x32,0x00,0xe2,0x28,0x2f,0x00,0x40,0x10,0x3a,0x00,0xe2,0x28,\r
+0x32,0x00,0x07,0x24,0x44,0x00,0x03,0x24,0x25,0xb0,0x02,0x3c,0x30,0x0c,0x42,0x34,\r
+0x00,0x00,0x43,0xa0,0x25,0xb0,0x02,0x3c,0x50,0x0c,0x42,0x34,0xff,0x00,0xe4,0x30,\r
+0x00,0x00,0x44,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x25,0xb0,0x02,0x3c,\r
+0x58,0x0c,0x42,0x34,0x00,0x00,0x44,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,\r
+0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,\r
+0x3e,0x1a,0x00,0x08,0x00,0x00,0x00,0x00,0x8f,0xff,0x40,0x10,0x48,0x00,0x03,0x24,\r
+0x86,0x1a,0x00,0x08,0x44,0x00,0x03,0x24,0xd5,0x02,0x83,0x90,0x00,0x00,0x00,0x00,\r
+0x2b,0x10,0xa3,0x00,0x7e,0x1a,0x00,0x08,0x0b,0x28,0x62,0x00,0x25,0xb0,0x02,0x3c,\r
+0x00,0x08,0x42,0x34,0x00,0x00,0x43,0x90,0x00,0x00,0x00,0x00,0x27,0x18,0x03,0x00,\r
+0x01,0x00,0x63,0x30,0xa4,0xff,0x60,0x10,0x25,0xb0,0x02,0x3c,0x36,0x00,0x02,0x24,\r
+0xa9,0x1a,0x00,0x08,0xd2,0x02,0xa2,0xa0,0xd3,0xff,0x40,0x10,0x48,0x00,0x03,0x24,\r
+0xde,0x1a,0x00,0x08,0x44,0x00,0x03,0x24,0xd3,0x02,0x83,0x80,0x00,0x00,0x00,0x00,\r
+0xff,0x00,0x62,0x30,0x2a,0x10,0xe2,0x00,0xd3,0x1a,0x00,0x08,0x0b,0x38,0x62,0x00,\r
+0xae,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0xd6,0x02,0x83,0x90,0x00,0x00,0x00,0x00,\r
+0x00,0x16,0x03,0x00,0x03,0x16,0x02,0x00,0x02,0x00,0x42,0x24,0x0d,0x00,0x42,0x28,\r
+0x03,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0xc2,0x1a,0x00,0x08,0x0c,0x00,0x02,0x24,\r
+0xc2,0x1a,0x00,0x08,0x02,0x00,0x62,0x24,0xc0,0xff,0xbd,0x27,0x28,0x00,0xb4,0xaf,\r
+0x25,0xb0,0x14,0x3c,0x24,0x00,0xb3,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,\r
+0x3c,0x00,0xbf,0xaf,0x38,0x00,0xbe,0xaf,0x34,0x00,0xb7,0xaf,0x30,0x00,0xb6,0xaf,\r
+0x2c,0x00,0xb5,0xaf,0x20,0x00,0xb2,0xaf,0xd8,0x00,0x86,0x36,0x00,0x00,0xc3,0x90,\r
+0x02,0x80,0x02,0x3c,0x78,0x1b,0x51,0x24,0x2a,0xb0,0x10,0x3c,0xa0,0xff,0x02,0x24,\r
+0x25,0x18,0x62,0x00,0x34,0x00,0x05,0x36,0xfe,0xff,0x02,0x24,0xbc,0x02,0x32,0x92,\r
+0x40,0x00,0x04,0x24,0x00,0x00,0xc3,0xa0,0x00,0x00,0xa2,0xa0,0x39,0x15,0x00,0x0c,\r
+0x00,0x96,0x12,0x00,0x21,0x98,0x40,0x00,0x8d,0x00,0x60,0x12,0x00,0x40,0x02,0x3c,\r
+0x08,0x00,0x63,0x8e,0xb0,0x03,0x82,0x36,0x25,0xb0,0x1e,0x3c,0x21,0x20,0x60,0x02,\r
+0x00,0x00,0x43,0xac,0x02,0x45,0x00,0x0c,0x21,0xb8,0x20,0x02,0x42,0x00,0xd5,0x37,\r
+0x03,0x0c,0xd1,0x37,0x17,0x0e,0xd6,0x37,0x04,0x00,0x14,0x24,0x2a,0xb0,0x03,0x3c,\r
+0x06,0x00,0x63,0x34,0x00,0x00,0x62,0x94,0x00,0x00,0x00,0x00,0x00,0xff,0x42,0x30,\r
+0x0a,0x00,0x40,0x18,0x00,0x00,0x00,0x00,0x02,0x80,0x04,0x3c,0xd4,0xb2,0x84,0x24,\r
+0x00,0x00,0x83,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x94,0x00,0x00,0x00,0x00,\r
+0x00,0xff,0x42,0x30,0xfc,0xff,0x40,0x1c,0x00,0x00,0x00,0x00,0x08,0x00,0x65,0x8e,\r
+0x20,0x10,0x06,0x3c,0x01,0x00,0x04,0x24,0x00,0xfe,0xc6,0x34,0x40,0x00,0x07,0x24,\r
+0xc3,0x01,0x00,0x0c,0x10,0x00,0xa4,0xaf,0x00,0x02,0x00,0x0c,0x01,0x00,0x04,0x24,\r
+0x02,0x80,0x02,0x3c,0xd8,0xb2,0x42,0x24,0x00,0x00,0x45,0x8c,0x01,0x00,0x03,0x24,\r
+0x21,0x20,0x00,0x00,0x00,0x00,0xa3,0xa0,0xff,0xff,0x03,0x24,0x00,0x00,0xa3,0xa2,\r
+0x00,0x00,0x22,0x92,0x00,0x00,0x00,0x00,0xff,0x00,0x42,0x30,0x40,0x00,0x42,0x34,\r
+0x00,0x00,0x22,0xa2,0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,\r
+0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24,0x02,0x00,0x02,0x24,0x02,0x80,0x04,0x3c,\r
+0x00,0x00,0xa2,0xa0,0x78,0x1b,0x83,0x24,0xc1,0x02,0x62,0x90,0x00,0x00,0xc4,0x92,\r
+0x21,0x28,0x00,0x00,0x00,0x00,0xc2,0xa2,0xff,0x00,0x90,0x30,0x01,0x00,0xa2,0x24,\r
+0xff,0x00,0x45,0x30,0x06,0x00,0xa3,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0xa2,0x24,\r
+0xef,0xff,0x02,0x24,0x64,0x00,0x04,0x24,0x00,0x00,0xa2,0xa2,0xcb,0x12,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x92,0x21,0x20,0x00,0x00,0xbf,0x00,0x42,0x30,\r
+0x00,0x00,0x22,0xa2,0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,\r
+0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24,0xcb,0x12,0x00,0x0c,0x84,0x03,0x04,0x24,\r
+0xf4,0x08,0xc2,0x37,0x00,0x00,0x43,0x8c,0x00,0x80,0x04,0x3c,0xdf,0x07,0x84,0x34,\r
+0x00,0x00,0xd0,0xa2,0x21,0x10,0x00,0x00,0x24,0x28,0x64,0x00,0x01,0x00,0x42,0x24,\r
+0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,\r
+0x00,0x00,0xa0,0xa2,0x00,0x00,0x22,0x92,0x21,0x20,0x00,0x00,0xff,0x00,0x42,0x30,\r
+0x40,0x00,0x42,0x34,0x00,0x00,0x22,0xa2,0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30,\r
+0x06,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24,0xbe,0x02,0xe2,0x92,\r
+0x1f,0x00,0xa3,0x30,0x2b,0x10,0x62,0x00,0x0a,0x00,0x40,0x10,0x02,0x80,0x02,0x3c,\r
+0xbf,0x02,0xe2,0x92,0x00,0x00,0x00,0x00,0x2b,0x10,0x43,0x00,0x05,0x00,0x40,0x10,\r
+0x02,0x80,0x02,0x3c,0x01,0x00,0x02,0x3c,0x25,0x10,0x62,0x00,0x21,0x90,0x42,0x02,\r
+0x02,0x80,0x02,0x3c,0x56,0x43,0x43,0x90,0x22,0x00,0x02,0x24,0x1c,0x00,0x62,0x10,\r
+0x92,0x00,0x02,0x24,0x1b,0x00,0x62,0x10,0x02,0x80,0x03,0x3c,0xff,0xff,0x94,0x26,\r
+0xcb,0x12,0x00,0x0c,0xf4,0x01,0x04,0x24,0x89,0xff,0x81,0x06,0x2a,0xb0,0x03,0x3c,\r
+0x04,0x00,0x60,0x12,0x25,0xb0,0x02,0x3c,0x56,0x15,0x00,0x0c,0x21,0x20,0x60,0x02,\r
+0x25,0xb0,0x02,0x3c,0xd8,0x02,0x42,0x34,0x00,0x00,0x52,0xac,0x21,0x10,0x40,0x02,\r
+0x3c,0x00,0xbf,0x8f,0x38,0x00,0xbe,0x8f,0x34,0x00,0xb7,0x8f,0x30,0x00,0xb6,0x8f,\r
+0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,\r
+0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x40,0x00,0xbd,0x27,\r
+0x02,0x80,0x03,0x3c,0x78,0x1b,0x63,0x24,0xbe,0x02,0x62,0x90,0xc0,0x07,0xa3,0x30,\r
+0x82,0x19,0x03,0x00,0x2b,0x10,0x62,0x00,0xe0,0xff,0x40,0x10,0x02,0x80,0x04,0x3c,\r
+0x78,0x1b,0x84,0x24,0xbf,0x02,0x82,0x90,0x00,0x00,0x00,0x00,0x2b,0x10,0x43,0x00,\r
+0xda,0xff,0x40,0x10,0x00,0x12,0x03,0x00,0x10,0x00,0x03,0x3c,0x25,0x10,0x43,0x00,\r
+0xbf,0x1b,0x00,0x08,0x21,0x90,0x42,0x02,0xe0,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,\r
+0x0f,0x00,0x10,0x3c,0xff,0xff,0x05,0x36,0xf0,0xf8,0x06,0x34,0x15,0x00,0x04,0x24,\r
+0x1c,0x00,0xbf,0xaf,0x18,0x00,0xb2,0xaf,0xb8,0x44,0x00,0x0c,0x14,0x00,0xb1,0xaf,\r
+0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,0x02,0x80,0x12,0x3c,0xff,0xff,0x05,0x36,\r
+0x56,0x30,0x06,0x24,0xb8,0x44,0x00,0x0c,0x1a,0x00,0x04,0x24,0x78,0x1b,0x51,0x26,\r
+0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,0x08,0x03,0x23,0x92,0x04,0x00,0x02,0x24,\r
+0x20,0x00,0x62,0x10,0x25,0xb0,0x02,0x3c,0x18,0x03,0x25,0x8e,0x25,0xb0,0x10,0x3c,\r
+0xb1,0x5a,0x00,0x0c,0x00,0x0e,0x04,0x36,0x18,0x03,0x25,0x8e,0xb1,0x5a,0x00,0x0c,\r
+0x04,0x0e,0x04,0x36,0x1c,0x03,0x25,0x8e,0xb1,0x5a,0x00,0x0c,0x08,0x0e,0x04,0x36,\r
+0x18,0x03,0x25,0x8e,0xb1,0x5a,0x00,0x0c,0x10,0x0e,0x04,0x36,0x18,0x03,0x25,0x8e,\r
+0xb1,0x5a,0x00,0x0c,0x14,0x0e,0x04,0x36,0x18,0x03,0x25,0x8e,0xb1,0x5a,0x00,0x0c,\r
+0x18,0x0e,0x04,0x36,0x18,0x03,0x25,0x8e,0xb1,0x5a,0x00,0x0c,0x1c,0x0e,0x04,0x36,\r
+0x78,0x1b,0x43,0x26,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x04,0x00,0x02,0x24,0x20,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03,\r
+0x08,0x03,0x62,0xa0,0x00,0x0e,0x42,0x34,0x00,0x00,0x43,0x8c,0x18,0x03,0x25,0x8e,\r
+0x00,0x00,0x00,0x00,0xde,0xff,0x65,0x14,0x25,0xb0,0x10,0x3c,0x19,0x1c,0x00,0x08,\r
+0x78,0x1b,0x43,0x26,0xe0,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,0x0f,0x00,0x10,0x3c,\r
+0xff,0xff,0x05,0x36,0xf0,0xf8,0x06,0x34,0x15,0x00,0x04,0x24,0x1c,0x00,0xbf,0xaf,\r
+0x18,0x00,0xb2,0xaf,0xb8,0x44,0x00,0x0c,0x14,0x00,0xb1,0xaf,0xcb,0x12,0x00,0x0c,\r
+0x64,0x00,0x04,0x24,0xff,0xff,0x05,0x36,0x56,0x30,0x06,0x24,0xb8,0x44,0x00,0x0c,\r
+0x1a,0x00,0x04,0x24,0x02,0x80,0x10,0x3c,0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,\r
+0x78,0x1b,0x02,0x26,0x08,0x03,0x46,0x90,0x25,0xb0,0x11,0x3c,0x10,0x10,0x12,0x3c,\r
+0x01,0x00,0x03,0x24,0x00,0x0e,0x24,0x36,0x1e,0x00,0xc3,0x10,0x10,0x10,0x45,0x36,\r
+0xb1,0x5a,0x00,0x0c,0x00,0x00,0x00,0x00,0x04,0x0e,0x24,0x36,0xb1,0x5a,0x00,0x0c,\r
+0x10,0x10,0x45,0x36,0x08,0x0e,0x24,0x36,0xb1,0x5a,0x00,0x0c,0x10,0x10,0x05,0x24,\r
+0x10,0x0e,0x24,0x36,0xb1,0x5a,0x00,0x0c,0x10,0x10,0x45,0x36,0x14,0x0e,0x24,0x36,\r
+0xb1,0x5a,0x00,0x0c,0x10,0x10,0x45,0x36,0x18,0x0e,0x24,0x36,0xb1,0x5a,0x00,0x0c,\r
+0x10,0x10,0x45,0x36,0x1c,0x0e,0x24,0x36,0xb1,0x5a,0x00,0x0c,0x10,0x10,0x45,0x36,\r
+0x78,0x1b,0x03,0x26,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x01,0x00,0x02,0x24,0x20,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03,\r
+0x08,0x03,0x62,0xa0,0x00,0x00,0x86,0x8c,0x00,0x00,0x00,0x00,0xe0,0xff,0xc5,0x14,\r
+0x78,0x1b,0x03,0x26,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x01,0x00,0x02,0x24,0x20,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03,\r
+0x08,0x03,0x62,0xa0,0xd8,0xff,0xbd,0x27,0x1c,0x00,0xb3,0xaf,0x02,0x80,0x13,0x3c,\r
+0x14,0x00,0xb1,0xaf,0x78,0x1b,0x71,0x26,0x10,0x03,0x26,0x8e,0x10,0x00,0xb0,0xaf,\r
+0x0f,0x00,0x10,0x3c,0xff,0xff,0x05,0x36,0x15,0x00,0x04,0x24,0x20,0x00,0xbf,0xaf,\r
+0xb8,0x44,0x00,0x0c,0x18,0x00,0xb2,0xaf,0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,\r
+0x14,0x03,0x26,0x8e,0xff,0xff,0x05,0x36,0xb8,0x44,0x00,0x0c,0x1a,0x00,0x04,0x24,\r
+0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,0x08,0x03,0x22,0x92,0x25,0xb0,0x12,0x3c,\r
+0x08,0x00,0x40,0x14,0x08,0x0e,0x44,0x36,0x25,0xb0,0x02,0x3c,0x00,0x0e,0x42,0x34,\r
+0x00,0x00,0x45,0x8c,0xf0,0x02,0x23,0x8e,0x00,0x00,0x00,0x00,0x17,0x00,0xa3,0x10,\r
+0x78,0x1b,0x62,0x26,0xec,0x02,0x25,0x8e,0xb1,0x5a,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0xf0,0x02,0x25,0x8e,0xb1,0x5a,0x00,0x0c,0x00,0x0e,0x44,0x36,0xf4,0x02,0x25,0x8e,\r
+0xb1,0x5a,0x00,0x0c,0x04,0x0e,0x44,0x36,0xf8,0x02,0x25,0x8e,0xb1,0x5a,0x00,0x0c,\r
+0x10,0x0e,0x44,0x36,0xfc,0x02,0x25,0x8e,0xb1,0x5a,0x00,0x0c,0x14,0x0e,0x44,0x36,\r
+0x00,0x03,0x25,0x8e,0xb1,0x5a,0x00,0x0c,0x18,0x0e,0x44,0x36,0x04,0x03,0x25,0x8e,\r
+0xb1,0x5a,0x00,0x0c,0x1c,0x0e,0x44,0x36,0x78,0x1b,0x62,0x26,0x20,0x00,0xbf,0x8f,\r
+0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x28,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03,0x08,0x03,0x40,0xa0,0xe0,0xff,0xbd,0x27,\r
+0x18,0x00,0xb2,0xaf,0x02,0x80,0x12,0x3c,0x14,0x00,0xb1,0xaf,0x78,0x1b,0x51,0x26,\r
+0x10,0x03,0x26,0x8e,0x10,0x00,0xb0,0xaf,0x0f,0x00,0x10,0x3c,0xff,0xff,0x05,0x36,\r
+0x1c,0x00,0xbf,0xaf,0xb8,0x44,0x00,0x0c,0x15,0x00,0x04,0x24,0xcb,0x12,0x00,0x0c,\r
+0x64,0x00,0x04,0x24,0x14,0x03,0x26,0x8e,0xff,0xff,0x05,0x36,0xb8,0x44,0x00,0x0c,\r
+0x1a,0x00,0x04,0x24,0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,0x08,0x03,0x23,0x92,\r
+0x03,0x00,0x02,0x24,0x2c,0x00,0x62,0x10,0x25,0xb0,0x02,0x3c,0xf0,0x02,0x25,0x8e,\r
+0x25,0xb0,0x10,0x3c,0xb1,0x5a,0x00,0x0c,0x00,0x0e,0x04,0x36,0xf4,0x02,0x25,0x8e,\r
+0xb1,0x5a,0x00,0x0c,0x04,0x0e,0x04,0x36,0xf8,0x02,0x25,0x8e,0xb1,0x5a,0x00,0x0c,\r
+0x10,0x0e,0x04,0x36,0xfc,0x02,0x25,0x8e,0xb1,0x5a,0x00,0x0c,0x14,0x0e,0x04,0x36,\r
+0x00,0x03,0x25,0x8e,0xb1,0x5a,0x00,0x0c,0x18,0x0e,0x04,0x36,0x04,0x03,0x25,0x8e,\r
+0xb1,0x5a,0x00,0x0c,0x1c,0x0e,0x04,0x36,0x0c,0x03,0x24,0x8e,0xec,0x02,0x22,0x8e,\r
+0x00,0x00,0x00,0x00,0x21,0x28,0x44,0x00,0x00,0xff,0xa3,0x30,0xff,0xff,0x02,0x3c,\r
+0xff,0x00,0x42,0x34,0x01,0x3f,0x63,0x2c,0x24,0x10,0xa2,0x00,0x0c,0x00,0x60,0x10,\r
+0x08,0x0e,0x04,0x36,0xb1,0x5a,0x00,0x0c,0x00,0x00,0x00,0x00,0x78,0x1b,0x43,0x26,\r
+0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x03,0x00,0x02,0x24,0x20,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03,0x08,0x03,0x62,0xa0,\r
+0xe1,0x1c,0x00,0x08,0x00,0x3f,0x45,0x34,0x00,0x0e,0x42,0x34,0x00,0x00,0x43,0x8c,\r
+0xf0,0x02,0x25,0x8e,0x00,0x00,0x00,0x00,0xd2,0xff,0x65,0x14,0x25,0xb0,0x10,0x3c,\r
+0xe4,0x1c,0x00,0x08,0x78,0x1b,0x43,0x26,0xd8,0xff,0xbd,0x27,0x18,0x00,0xb2,0xaf,\r
+0x02,0x80,0x12,0x3c,0x20,0x00,0xb4,0xaf,0x24,0x00,0xbf,0xaf,0x1c,0x00,0xb3,0xaf,\r
+0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x78,0x1b,0x44,0x26,0x80,0x11,0x82,0x8c,\r
+0x78,0x1b,0x43,0x8e,0x08,0x03,0x93,0x90,0x02,0x11,0x02,0x00,0x7f,0x00,0x54,0x30,\r
+0xcc,0x00,0x63,0x30,0x40,0x00,0x02,0x24,0x68,0x00,0x62,0x10,0x01,0x00,0x02,0x24,\r
+0x25,0xb0,0x08,0x3c,0x4c,0x00,0x03,0x35,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,\r
+0x03,0x00,0x42,0x30,0x07,0x00,0x40,0x10,0x78,0x1b,0x45,0x26,0x78,0x1b,0x42,0x92,\r
+0x00,0x00,0x00,0x00,0x82,0x11,0x02,0x00,0x2f,0x00,0x40,0x10,0x00,0x0e,0x05,0x35,\r
+0x78,0x1b,0x45,0x26,0x08,0x03,0xa2,0x8c,0x00,0x00,0x00,0x00,0x02,0x12,0x02,0x00,\r
+0x0f,0x00,0x40,0x14,0x78,0x1b,0x42,0x26,0x25,0xb0,0x02,0x3c,0x84,0x01,0x42,0x34,\r
+0x00,0x00,0x44,0x8c,0x0d,0x00,0x03,0x24,0x7b,0x00,0x83,0x10,0x3e,0x00,0x02,0x24,\r
+0x4a,0x00,0x03,0x24,0x23,0x03,0xa2,0xa0,0x20,0x03,0xa3,0xa0,0x45,0x00,0x02,0x24,\r
+0x43,0x00,0x03,0x24,0x21,0x03,0xa2,0xa0,0x22,0x03,0xa3,0xa0,0x78,0x1b,0x42,0x26,\r
+0x80,0x11,0x43,0x8c,0x25,0xb0,0x02,0x3c,0x60,0x0c,0x42,0x34,0x02,0x19,0x03,0x00,\r
+0xff,0x00,0x63,0x30,0x00,0x00,0x43,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,\r
+0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,\r
+0x78,0x1b,0x45,0x8e,0x44,0x00,0x02,0x24,0xcc,0x00,0xa3,0x30,0x3e,0x00,0x62,0x10,\r
+0x78,0x1b,0x44,0x26,0x24,0x00,0xbf,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f,\r
+0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27,0x00,0x00,0xa2,0x8c,0x00,0x00,0x00,0x00,\r
+0x5e,0x00,0x40,0x10,0x10,0x0e,0x07,0x35,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x08,0x0e,0x02,0x35,0x04,0x0e,0x03,0x35,\r
+0x00,0x00,0x44,0x8c,0x00,0x00,0xa5,0x8c,0x00,0x00,0x66,0x8c,0x02,0x80,0x02,0x3c,\r
+0x78,0x1b,0x49,0x24,0xec,0x02,0x24,0xad,0xf0,0x02,0x25,0xad,0xf4,0x02,0x26,0xad,\r
+0x14,0x0e,0x04,0x35,0x02,0x80,0x02,0x3c,0x18,0x0e,0x05,0x35,0x00,0x00,0xe7,0x8c,\r
+0x1c,0x0e,0x06,0x35,0x00,0x00,0x83,0x8c,0x56,0x43,0x4a,0x90,0x00,0x00,0xa2,0x8c,\r
+0x00,0x00,0xc4,0x8c,0xf8,0x02,0x27,0xad,0x00,0x03,0x22,0xad,0x22,0x00,0x02,0x24,\r
+0xfc,0x02,0x23,0xad,0x5a,0x00,0x42,0x11,0x04,0x03,0x24,0xad,0x92,0x00,0x02,0x24,\r
+0x58,0x00,0x42,0x11,0x0d,0x08,0x02,0x35,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x00,0x60,0x81,0x40,0x78,0x1b,0x42,0x8e,0x3f,0xff,0x03,0x24,0x24,0x10,0x43,0x00,\r
+0x40,0x00,0x42,0x34,0x14,0x1d,0x00,0x08,0x78,0x1b,0x42,0xae,0x3a,0x00,0x62,0x12,\r
+0x04,0x00,0x02,0x24,0x38,0x00,0x62,0x12,0x78,0x1b,0x43,0x26,0xff,0xff,0x02,0x24,\r
+0x08,0x1d,0x00,0x08,0x08,0x03,0x62,0xa0,0x80,0x11,0x83,0x8c,0xff,0xff,0x02,0x34,\r
+0xc0,0xff,0x62,0x10,0x02,0x11,0x05,0x00,0x03,0x00,0x45,0x30,0x01,0x00,0x03,0x24,\r
+0xbc,0xff,0xa3,0x14,0x25,0xb0,0x02,0x3c,0x4c,0x00,0x42,0x34,0x00,0x00,0x43,0x90,\r
+0x00,0x00,0x00,0x00,0x03,0x00,0x63,0x30,0xb6,0xff,0x60,0x10,0x03,0x00,0x02,0x24,\r
+0x65,0x00,0x62,0x12,0x04,0x00,0x62,0x2a,0x47,0x00,0x40,0x10,0x00,0x00,0x00,0x00,\r
+0x6a,0x00,0x60,0x12,0x00,0x00,0x00,0x00,0xae,0xff,0x65,0x16,0x00,0x00,0x00,0x00,\r
+0x20,0x03,0x82,0x90,0x00,0x00,0x00,0x00,0x2b,0x10,0x82,0x02,0x56,0x00,0x40,0x10,\r
+0x00,0x00,0x00,0x00,0x23,0x03,0x82,0x90,0x00,0x00,0x00,0x00,0x2b,0x10,0x54,0x00,\r
+0x48,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x6d,0x1c,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x39,0x1d,0x00,0x08,0x00,0x00,0x00,0x00,0x3b,0x00,0x02,0x24,0x46,0x00,0x03,0x24,\r
+0x23,0x03,0xa2,0xa0,0x20,0x03,0xa3,0xa0,0x41,0x00,0x02,0x24,0x40,0x00,0x03,0x24,\r
+0x21,0x03,0xa2,0xa0,0x27,0x1d,0x00,0x08,0x22,0x03,0xa3,0xa0,0x00,0x00,0xe3,0x8c,\r
+0x3f,0x3f,0x02,0x3c,0x3f,0x3f,0x42,0x34,0x9f,0xff,0x62,0x14,0x00,0x00,0x00,0x00,\r
+0x15,0x1d,0x00,0x08,0x78,0x1b,0x45,0x26,0x0f,0x00,0x10,0x3c,0x01,0x00,0x11,0x3c,\r
+0xff,0xff,0x05,0x36,0xf4,0x98,0x26,0x36,0xb8,0x44,0x00,0x0c,0x15,0x00,0x04,0x24,\r
+0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,0xff,0xff,0x05,0x36,0x56,0x30,0x26,0x36,\r
+0xb8,0x44,0x00,0x0c,0x1a,0x00,0x04,0x24,0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,\r
+0x78,0x1b,0x43,0x26,0xff,0xff,0x02,0x24,0x08,0x1d,0x00,0x08,0x08,0x03,0x62,0xa0,\r
+0x0d,0x08,0x02,0x35,0x00,0x00,0x43,0x90,0x00,0x00,0x00,0x00,0x0f,0x00,0x63,0x30,\r
+0x08,0x00,0x62,0x2c,0x0f,0x00,0x63,0x38,0xa3,0xff,0x40,0x14,0x01,0x00,0x65,0x24,\r
+0x00,0x16,0x05,0x00,0x00,0x24,0x05,0x00,0x00,0x1a,0x05,0x00,0x25,0x10,0x44,0x00,\r
+0x25,0x10,0x43,0x00,0x25,0x10,0x45,0x00,0x25,0x18,0x65,0x00,0x1c,0x03,0x23,0xad,\r
+0x66,0x1d,0x00,0x08,0x18,0x03,0x22,0xad,0x04,0x00,0x02,0x24,0x11,0x00,0x62,0x12,\r
+0xff,0x00,0x02,0x24,0x67,0xff,0x62,0x16,0x00,0x00,0x00,0x00,0x22,0x03,0x82,0x90,\r
+0x00,0x00,0x00,0x00,0x2b,0x10,0x82,0x02,0x21,0x00,0x40,0x14,0x00,0x00,0x00,0x00,\r
+0x20,0x03,0x82,0x90,0x00,0x00,0x00,0x00,0x2b,0x10,0x82,0x02,0x0a,0x00,0x40,0x10,\r
+0x00,0x00,0x00,0x00,0x29,0x1c,0x00,0x0c,0x00,0x00,0x00,0x00,0x39,0x1d,0x00,0x08,\r
+0x00,0x00,0x00,0x00,0x21,0x03,0x82,0x90,0x00,0x00,0x00,0x00,0x2b,0x10,0x54,0x00,\r
+0xf8,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0xea,0x1b,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x39,0x1d,0x00,0x08,0x00,0x00,0x00,0x00,0x24,0x03,0x82,0x90,0x00,0x00,0x00,0x00,\r
+0x2b,0x10,0x82,0x02,0xa8,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0xab,0x1c,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x39,0x1d,0x00,0x08,0x00,0x00,0x00,0x00,0x22,0x03,0x82,0x90,\r
+0x00,0x00,0x00,0x00,0x2b,0x10,0x82,0x02,0xe6,0xff,0x40,0x10,0x00,0x00,0x00,0x00,\r
+0x25,0x03,0x82,0x90,0x00,0x00,0x00,0x00,0x2b,0x10,0x54,0x00,0x9a,0xff,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0xab,0x1c,0x00,0x0c,0x00,0x00,0x00,0x00,0x39,0x1d,0x00,0x08,\r
+0x00,0x00,0x00,0x00,0x02,0x80,0x08,0x3c,0x78,0x1b,0x05,0x25,0x80,0x11,0xa4,0x8c,\r
+0xea,0x02,0xa3,0x90,0x02,0x11,0x04,0x00,0x26,0x00,0x60,0x14,0x7f,0x00,0x46,0x30,\r
+0x25,0xb0,0x07,0x3c,0x4c,0x00,0xe2,0x34,0x00,0x00,0x43,0x90,0x00,0x00,0x00,0x00,\r
+0x20,0x00,0x60,0x10,0x00,0x00,0x00,0x00,0xff,0xff,0x02,0x34,0x1d,0x00,0x82,0x10,\r
+0x00,0x00,0x00,0x00,0x00,0x08,0xe3,0x34,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,\r
+0x01,0x00,0x42,0x30,0x19,0x00,0x40,0x10,0x4b,0x00,0xc2,0x2c,0x3e,0x00,0x40,0x10,\r
+0x01,0x00,0x04,0x24,0xd8,0xff,0xc2,0x24,0x1e,0x00,0x42,0x2c,0x49,0x00,0x40,0x10,\r
+0x23,0x00,0xc2,0x2c,0x78,0x1b,0x04,0x25,0xd7,0x02,0x82,0x90,0x00,0x00,0x00,0x00,\r
+0x44,0x00,0x40,0x10,0x23,0x00,0xc2,0x2c,0x25,0xb0,0x02,0x3c,0x87,0x0c,0x42,0x34,\r
+0x20,0x00,0x03,0x24,0x00,0x00,0x43,0xa0,0xd7,0x02,0x80,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x17,0x00,0x40,0x10,\r
+0x01,0x00,0x04,0x24,0xd8,0xff,0xc2,0x24,0x1e,0x00,0x42,0x2c,0x44,0x00,0x40,0x10,\r
+0x23,0x00,0xc2,0x2c,0x78,0x1b,0x04,0x25,0xd7,0x02,0x82,0x90,0x00,0x00,0x00,0x00,\r
+0x3f,0x00,0x40,0x10,0x23,0x00,0xc2,0x2c,0x25,0xb0,0x02,0x3c,0x30,0x0c,0x42,0x34,\r
+0x44,0x00,0x03,0x24,0x00,0x00,0x43,0xa0,0xd7,0x02,0x80,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0xd7,0x02,0xa2,0x90,\r
+0x00,0x00,0x00,0x00,0xe7,0xff,0x44,0x10,0x43,0x00,0x02,0x24,0x30,0x0c,0xe3,0x34,\r
+0xd7,0x02,0xa4,0xa0,0x00,0x00,0x62,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,\r
+0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0xd7,0x02,0xa2,0x90,0x00,0x00,0x00,0x00,\r
+0xc0,0xff,0x44,0x10,0x10,0x00,0x02,0x24,0x87,0x0c,0xe3,0x34,0xd7,0x02,0xa4,0xa0,\r
+0x00,0x00,0x62,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0xc7,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0x78,0x1b,0x04,0x25,\r
+0xd7,0x02,0x82,0x90,0x02,0x00,0x03,0x24,0xc2,0xff,0x43,0x10,0x00,0x00,0x00,0x00,\r
+0x25,0xb0,0x02,0x3c,0x87,0x0c,0x42,0x34,0xd7,0x02,0x83,0xa0,0x00,0x00,0x40,0xa0,\r
+0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,\r
+0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,\r
+0xb4,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0x78,0x1b,0x04,0x25,0xd7,0x02,0x82,0x90,\r
+0x02,0x00,0x03,0x24,0xaf,0xff,0x43,0x10,0x00,0x00,0x00,0x00,0x25,0xb0,0x02,0x3c,\r
+0xd7,0x02,0x83,0xa0,0x30,0x0c,0x42,0x34,0x42,0x00,0x03,0x24,0x00,0x00,0x43,0xa0,\r
+0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,\r
+0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x2a,0xb0,0x04,0x3c,0x28,0x00,0x85,0x34,0x02,0x00,0x82,0x94,0x04,0x00,0x84,0x24,\r
+0x05,0x00,0x40,0x14,0x2b,0x18,0xa4,0x00,0xfb,0xff,0x60,0x10,0x01,0x00,0x02,0x24,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,\r
+0xe8,0xff,0xbd,0x27,0x10,0x00,0xbf,0xaf,0x90,0x1e,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0x40,0x10,0x01,0x00,0x03,0x24,0x02,0x80,0x02,0x3c,0xb8,0x44,0x43,0xa0,\r
+0x14,0x00,0x04,0x24,0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0x6c,0x44,0x44,0xac,\r
+0xb7,0x44,0x60,0xa0,0x10,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x18,0x00,0xbd,0x27,0x02,0x80,0x02,0x3c,0x9e,0x44,0x40,0xa0,0xff,0x00,0x85,0x30,\r
+0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0xb0,0x44,0x60,0xa0,0x08,0x00,0xa4,0x2c,\r
+0xb2,0x44,0x40,0xa0,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0xba,0x44,0x60,0xa0,\r
+0x98,0x44,0x45,0xa0,0x11,0x00,0x80,0x10,0x02,0x80,0x03,0x3c,0x80,0x10,0x05,0x00,\r
+0xdc,0xb2,0x63,0x24,0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x8c,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x02,0x80,0x05,0x3c,0x78,0x1b,0xa5,0x24,\r
+0x08,0x0b,0xa4,0x8c,0x00,0x70,0x02,0x3c,0x08,0x00,0x42,0x34,0x25,0x20,0x82,0x00,\r
+0x41,0xb0,0x03,0x3c,0x00,0x00,0x64,0xac,0x08,0x0b,0xa4,0xac,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x02,0x80,0x05,0x3c,0x78,0x1b,0xa5,0x24,0x08,0x0b,0xa4,0x8c,\r
+0x00,0x70,0x02,0x3c,0x08,0x00,0x42,0x34,0x27,0x10,0x02,0x00,0x24,0x20,0x82,0x00,\r
+0x41,0xb0,0x03,0x3c,0x00,0x00,0x64,0xac,0x08,0x00,0xe0,0x03,0x08,0x0b,0xa4,0xac,\r
+0x02,0x80,0x05,0x3c,0x78,0x1b,0xa5,0x24,0x08,0x0b,0xa2,0x8c,0x14,0x0b,0xa6,0x94,\r
+0x00,0x70,0x04,0x3c,0x41,0xb0,0x03,0x3c,0x08,0x00,0x42,0x34,0x27,0x20,0x04,0x00,\r
+0x00,0x00,0x62,0xac,0x24,0x20,0x44,0x00,0x10,0x00,0xc6,0x34,0x08,0x00,0x67,0x34,\r
+0x02,0x80,0x08,0x3c,0x01,0x00,0x02,0x24,0x00,0x00,0x64,0xac,0x00,0x00,0xe6,0xa4,\r
+0xb4,0x44,0x02,0xa1,0xb4,0x44,0x03,0x91,0x02,0x80,0x02,0x3c,0x14,0x0b,0xa6,0xa4,\r
+0xb5,0x44,0x43,0xa0,0x08,0x00,0xe0,0x03,0x08,0x0b,0xa4,0xac,0x02,0x80,0x05,0x3c,\r
+0x78,0x1b,0xa5,0x24,0x08,0x0b,0xa3,0x8c,0x14,0x0b,0xa6,0x94,0x00,0x70,0x02,0x3c,\r
+0x41,0xb0,0x04,0x3c,0x08,0x00,0x63,0x34,0x27,0x10,0x02,0x00,0x24,0x10,0x62,0x00,\r
+0x10,0x00,0xc6,0x34,0x08,0x00,0x87,0x34,0x14,0x0b,0xa6,0xa4,0x00,0x00,0x83,0xac,\r
+0x00,0x00,0x82,0xac,0x00,0x00,0xe6,0xa4,0x08,0x00,0xe0,0x03,0x08,0x0b,0xa2,0xac,\r
+0x25,0xb0,0x03,0x3c,0xbe,0x00,0x63,0x34,0x00,0x00,0x62,0x94,0x08,0x00,0xe0,0x03,\r
+0x01,0x00,0x42,0x2c,0xe8,0xff,0xbd,0x27,0x10,0x00,0xbf,0xaf,0x90,0x1e,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x02,0x80,0x03,0x3c,0x15,0x00,0x40,0x10,0x78,0x41,0x64,0x24,\r
+0x78,0x41,0x62,0x8c,0x00,0x00,0x00,0x00,0x11,0x00,0x44,0x14,0x02,0x80,0x02,0x3c,\r
+0xb8,0x44,0x43,0x90,0x01,0x00,0x02,0x24,0xff,0x00,0x63,0x30,0x0c,0x00,0x62,0x10,\r
+0x01,0x00,0x04,0x24,0x02,0x80,0x03,0x3c,0x99,0x44,0x62,0x90,0x00,0x00,0x00,0x00,\r
+0x0f,0x00,0x42,0x30,0x05,0x00,0x42,0x28,0x05,0x00,0x40,0x10,0x21,0x10,0x80,0x00,\r
+0x10,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,\r
+0x10,0x00,0xbf,0x8f,0x21,0x20,0x00,0x00,0x21,0x10,0x80,0x00,0x08,0x00,0xe0,0x03,\r
+0x18,0x00,0xbd,0x27,0xe8,0xff,0xbd,0x27,0x10,0x00,0xbf,0xaf,0x90,0x1e,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x02,0x80,0x03,0x3c,0x25,0x00,0x40,0x10,0x78,0x41,0x64,0x24,\r
+0x78,0x41,0x62,0x8c,0x00,0x00,0x00,0x00,0x21,0x00,0x44,0x14,0x01,0x00,0x05,0x24,\r
+0x02,0x80,0x03,0x3c,0xb0,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0xff,0x00,0x42,0x30,\r
+0x1b,0x00,0x45,0x10,0x02,0x80,0x03,0x3c,0x99,0x44,0x62,0x90,0x00,0x00,0x00,0x00,\r
+0x0f,0x00,0x42,0x30,0x03,0x00,0x42,0x28,0x15,0x00,0x40,0x10,0x02,0x80,0x03,0x3c,\r
+0xb2,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x04,0x00,0x42,0x30,0x10,0x00,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0xb2,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x10,0x00,0x42,0x30,\r
+0x0b,0x00,0x40,0x14,0x02,0x80,0x03,0x3c,0xb8,0x44,0x62,0x90,0x00,0x00,0x00,0x00,\r
+0xff,0x00,0x42,0x30,0x06,0x00,0x45,0x10,0x01,0x00,0x04,0x24,0x02,0x80,0x02,0x3c,\r
+0xb9,0x44,0x43,0x90,0x00,0x00,0x00,0x00,0x02,0x00,0x60,0x10,0x00,0x00,0x00,0x00,\r
+0x21,0x20,0x00,0x00,0x10,0x00,0xbf,0x8f,0x21,0x10,0x80,0x00,0x08,0x00,0xe0,0x03,\r
+0x18,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0xff,0x00,0x84,0x30,0x18,0x00,0xbf,0xaf,\r
+0x14,0x00,0xb1,0xaf,0x29,0x00,0x80,0x10,0x10,0x00,0xb0,0xaf,0x25,0xb0,0x03,0x3c,\r
+0x04,0x0c,0x62,0x90,0x21,0x20,0x00,0x00,0xff,0x00,0x42,0x30,0x02,0x00,0x42,0x34,\r
+0x04,0x0c,0x62,0xa0,0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,\r
+0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24,0x25,0xb0,0x03,0x3c,0x04,0x0d,0x62,0x90,\r
+0x21,0x20,0x00,0x00,0xff,0x00,0x42,0x30,0x02,0x00,0x42,0x34,0x04,0x0d,0x62,0xa0,\r
+0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x82,0x24,0x25,0xb0,0x10,0x3c,0x70,0x0e,0x05,0x8e,0x80,0x01,0x11,0x3c,\r
+0x70,0x0e,0x04,0x24,0x34,0x5b,0x00,0x0c,0x25,0x28,0xb1,0x00,0x8c,0x0e,0x05,0x8e,\r
+0x8c,0x0e,0x04,0x24,0x34,0x5b,0x00,0x0c,0x25,0x28,0xb1,0x00,0x03,0x00,0x05,0x3c,\r
+0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x59,0x01,0xa5,0x34,\r
+0x44,0x08,0x04,0x24,0x34,0x5b,0x00,0x08,0x20,0x00,0xbd,0x27,0x44,0x08,0x04,0x24,\r
+0x34,0x5b,0x00,0x0c,0x21,0x28,0x00,0x00,0x25,0xb0,0x03,0x3c,0x04,0x0c,0x62,0x90,\r
+0x21,0x20,0x00,0x00,0xfd,0x00,0x42,0x30,0x04,0x0c,0x62,0xa0,0x01,0x00,0x82,0x24,\r
+0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24,\r
+0x25,0xb0,0x03,0x3c,0x04,0x0d,0x62,0x90,0x21,0x20,0x00,0x00,0xfd,0x00,0x42,0x30,\r
+0x04,0x0d,0x62,0xa0,0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,\r
+0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24,0x25,0xb0,0x11,0x3c,0x70,0x0e,0x25,0x8e,\r
+0x7f,0xfe,0x10,0x3c,0xff,0xff,0x10,0x36,0x24,0x28,0xb0,0x00,0x34,0x5b,0x00,0x0c,\r
+0x70,0x0e,0x04,0x24,0x8c,0x0e,0x25,0x8e,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,\r
+0x24,0x28,0xb0,0x00,0x8c,0x0e,0x04,0x24,0x10,0x00,0xb0,0x8f,0x34,0x5b,0x00,0x08,\r
+0x20,0x00,0xbd,0x27,0x25,0xb0,0x03,0x3c,0xfc,0x37,0x02,0x24,0x40,0x00,0x64,0x34,\r
+0x00,0x00,0x82,0xa4,0x42,0x00,0x65,0x34,0x03,0x00,0x02,0x24,0x00,0x00,0xa0,0xa0,\r
+0x03,0x08,0x62,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0xe0,0xff,0xbd,0x27,0x18,0x00,0xbf,0xaf,0x14,0x00,0xb1,0xaf,\r
+0x10,0x00,0xb0,0xaf,0x02,0x80,0x02,0x3c,0x98,0x44,0x43,0x90,0x00,0x00,0x00,0x00,\r
+0x07,0x00,0x60,0x10,0x25,0xb0,0x10,0x3c,0x02,0x80,0x03,0x3c,0x56,0x43,0x62,0x90,\r
+0x00,0x00,0x00,0x00,0x02,0x00,0x42,0x30,0x2e,0x00,0x40,0x14,0x00,0x00,0x00,0x00,\r
+0x21,0x00,0x06,0x36,0x00,0x00,0xc2,0x90,0x18,0x00,0x03,0x36,0x42,0x00,0x05,0x36,\r
+0x01,0x00,0x42,0x34,0x00,0x00,0xc2,0xa0,0x40,0x00,0x11,0x36,0x00,0x00,0x60,0xa0,\r
+0xff,0xff,0x02,0x24,0xfc,0x57,0x03,0x24,0x00,0x00,0xa2,0xa0,0x64,0x00,0x04,0x24,\r
+0x00,0x00,0x23,0xa6,0xcb,0x12,0x00,0x0c,0x00,0x00,0x00,0x00,0xfc,0x77,0x02,0x24,\r
+0x00,0x00,0x22,0xa6,0xcb,0x12,0x00,0x0c,0x0a,0x00,0x04,0x24,0x03,0x08,0x00,0xa2,\r
+0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,\r
+0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x0a,0x00,0x04,0x24,0xcb,0x12,0x00,0x0c,\r
+0x25,0xb0,0x10,0x3c,0x40,0x00,0x10,0x36,0xfc,0x37,0x02,0x24,0x00,0x00,0x02,0xa6,\r
+0xcb,0x12,0x00,0x0c,0x0a,0x00,0x04,0x24,0xfc,0x77,0x02,0x24,0x00,0x00,0x02,0xa6,\r
+0xcb,0x12,0x00,0x0c,0x0a,0x00,0x04,0x24,0xfc,0x57,0x02,0x24,0x00,0x00,0x02,0xa6,\r
+0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,\r
+0x20,0x00,0xbd,0x27,0x55,0x1f,0x00,0x0c,0x21,0x20,0x00,0x00,0xc8,0x1f,0x00,0x08,\r
+0x25,0xb0,0x10,0x3c,0xd8,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,0x20,0x00,0xbf,0xaf,\r
+0x1c,0x00,0xb3,0xaf,0x18,0x00,0xb2,0xaf,0x14,0x00,0xb1,0xaf,0xff,0x00,0x90,0x30,\r
+0x00,0x60,0x13,0x40,0x01,0x00,0x61,0x36,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x02,0x80,0x11,0x3c,0x9a,0x44,0x22,0x92,0x0f,0x00,0x12,0x32,0x0f,0x00,0x42,0x30,\r
+0x0d,0x00,0x52,0x10,0x04,0x00,0x02,0x32,0x13,0x00,0x40,0x14,0x00,0x00,0x00,0x00,\r
+0x9a,0x44,0x22,0x92,0x0c,0x00,0x03,0x24,0x0f,0x00,0x42,0x30,0x2f,0x00,0x43,0x10,\r
+0x08,0x00,0x02,0x32,0x9a,0x44,0x22,0x92,0x04,0x00,0x03,0x24,0x0f,0x00,0x42,0x30,\r
+0x5a,0x00,0x43,0x10,0x00,0x00,0x00,0x00,0x00,0x60,0x93,0x40,0x20,0x00,0xbf,0x8f,\r
+0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27,0x9a,0x44,0x22,0x92,0x00,0x00,0x00,0x00,\r
+0x04,0x00,0x42,0x30,0x33,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x9a,0x44,0x22,0x92,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0x42,0x30,0x32,0x00,0x40,0x10,0x08,0x00,0x02,0x32,\r
+0x30,0x00,0x40,0x14,0x02,0x80,0x03,0x3c,0x60,0x26,0x62,0x90,0x00,0x00,0x00,0x00,\r
+0x01,0x00,0x42,0x30,0x3d,0x00,0x40,0x14,0x01,0x00,0x04,0x24,0x9a,0x44,0x22,0x92,\r
+0xf0,0xff,0x03,0x24,0x24,0x10,0x43,0x00,0x9a,0x44,0x22,0xa2,0x9a,0x44,0x23,0x92,\r
+0x00,0x00,0x00,0x00,0x25,0x18,0x43,0x02,0x9a,0x44,0x23,0xa2,0x00,0x60,0x93,0x40,\r
+0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27,0xd1,0xff,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0x05,0x1f,0x00,0x0c,0x00,0x00,0x00,0x00,0xd2,0xff,0x40,0x10,\r
+0x00,0x00,0x00,0x00,0x9a,0x44,0x22,0x92,0xf0,0xff,0x03,0x24,0x24,0x10,0x43,0x00,\r
+0x9a,0x44,0x22,0xa2,0x02,0x80,0x03,0x3c,0x9a,0x44,0x22,0x92,0x60,0x26,0x64,0x90,\r
+0x04,0x00,0x42,0x34,0x01,0x00,0x84,0x30,0x9a,0x44,0x22,0xa2,0xc1,0xff,0x80,0x10,\r
+0x00,0x00,0x00,0x00,0x0e,0x46,0x00,0x0c,0x01,0x00,0x04,0x24,0x11,0x20,0x00,0x08,\r
+0x00,0x00,0x00,0x00,0xa9,0x1f,0x00,0x0c,0x00,0x00,0x00,0x00,0x23,0x20,0x00,0x08,\r
+0x00,0x00,0x00,0x00,0x9a,0x44,0x22,0x92,0x00,0x00,0x00,0x00,0x08,0x00,0x42,0x30,\r
+0xd2,0xff,0x40,0x14,0x08,0x00,0x02,0x32,0xd0,0xff,0x40,0x10,0x02,0x80,0x02,0x3c,\r
+0xb1,0x44,0x43,0x90,0x01,0x00,0x02,0x24,0xff,0x00,0x63,0x30,0x1b,0x00,0x62,0x10,\r
+0x02,0x80,0x03,0x3c,0x60,0x26,0x62,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30,\r
+0xc6,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0x21,0x20,0x00,0x00,0x0e,0x46,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x2f,0x20,0x00,0x08,0x00,0x00,0x00,0x00,0x25,0x1f,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0xa4,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0xb9,0x1f,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x9a,0x44,0x22,0x92,0xf0,0xff,0x03,0x24,0x24,0x10,0x43,0x00,\r
+0x9a,0x44,0x22,0xa2,0x9a,0x44,0x23,0x92,0x00,0x00,0x00,0x00,0x02,0x00,0x63,0x34,\r
+0x9a,0x44,0x23,0xa2,0x37,0x20,0x00,0x08,0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,\r
+0x98,0x44,0x43,0x90,0x00,0x00,0x00,0x00,0xac,0xff,0x60,0x14,0x02,0x80,0x03,0x3c,\r
+0x65,0x20,0x00,0x08,0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,0x98,0x44,0x43,0x90,\r
+0x00,0x00,0x00,0x00,0x0c,0x00,0x60,0x10,0x02,0x80,0x02,0x3c,0xb1,0x44,0x43,0x90,\r
+0x00,0x00,0x00,0x00,0x0a,0x00,0x60,0x14,0x0c,0x00,0x04,0x24,0x02,0x80,0x03,0x3c,\r
+0x9a,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x0f,0x00,0x42,0x30,0x04,0x00,0x42,0x28,\r
+0x03,0x00,0x40,0x14,0x04,0x00,0x04,0x24,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0xf9,0x1f,0x00,0x08,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,\r
+0xe8,0xff,0xbd,0x27,0x68,0x82,0x63,0x24,0x18,0x03,0x42,0x34,0x14,0x00,0xbf,0xaf,\r
+0x10,0x00,0xb0,0xaf,0x00,0x00,0x43,0xac,0x00,0x60,0x10,0x40,0x01,0x00,0x01,0x36,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x02,0x80,0x03,0x3c,0x60,0x26,0x62,0x90,\r
+0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30,0x17,0x00,0x40,0x10,0x02,0x80,0x02,0x3c,\r
+0x02,0x80,0x02,0x3c,0x9a,0x44,0x43,0x90,0x00,0x00,0x00,0x00,0x0f,0x00,0x63,0x30,\r
+0x04,0x00,0x63,0x28,0x17,0x00,0x60,0x14,0x04,0x00,0x04,0x24,0x02,0x80,0x03,0x3c,\r
+0xb9,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x0c,0x00,0x40,0x14,0x00,0x00,0x00,0x00,\r
+0xb9,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24,0xb9,0x44,0x62,0xa0,\r
+0x00,0x60,0x90,0x40,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0xb9,0x44,0x40,0xa0,0x00,0x60,0x90,0x40,\r
+0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x18,0x00,0xbd,0x27,0xf9,0x1f,0x00,0x0c,0x00,0x00,0x00,0x00,0xb4,0x20,0x00,0x08,\r
+0x02,0x80,0x03,0x3c,0x01,0x80,0x02,0x3c,0x25,0xb0,0x03,0x3c,0xe8,0xff,0xbd,0x27,\r
+0x34,0x83,0x42,0x24,0x18,0x03,0x63,0x34,0x14,0x00,0xbf,0xaf,0x10,0x00,0xb0,0xaf,\r
+0x00,0x00,0x62,0xac,0x00,0x60,0x10,0x40,0x01,0x00,0x01,0x36,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0x02,0x80,0x04,0x3c,0xb7,0x44,0x82,0x90,0x00,0x00,0x00,0x00,\r
+0x0a,0x00,0x40,0x10,0x14,0x00,0x03,0x24,0x02,0x80,0x02,0x3c,0x6c,0x44,0x43,0xac,\r
+0xb7,0x44,0x80,0xa0,0x00,0x60,0x90,0x40,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x02,0x80,0x03,0x3c,\r
+0x01,0x00,0x04,0x24,0x02,0x80,0x02,0x3c,0xba,0x44,0x44,0xa0,0xb8,0x44,0x60,0xa0,\r
+0x02,0x80,0x02,0x3c,0x99,0x44,0x44,0x90,0xf9,0x1f,0x00,0x0c,0xff,0x00,0x84,0x30,\r
+0x00,0x60,0x90,0x40,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x42,0x11,0x05,0x00,0x0f,0x00,0x46,0x30,\r
+0xe8,0xff,0xbd,0x27,0x09,0x00,0xc3,0x28,0x14,0x00,0xbf,0xaf,0x15,0x00,0x60,0x10,\r
+0x10,0x00,0xb0,0xaf,0x82,0x16,0x05,0x00,0x01,0x00,0x42,0x30,0x15,0x00,0x40,0x10,\r
+0x00,0xc0,0x02,0x3c,0x24,0x10,0xa2,0x00,0x47,0x00,0x40,0x14,0xc2,0x15,0x04,0x00,\r
+0x01,0x00,0x42,0x30,0x54,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x02,0x80,0x03,0x3c,\r
+0x3c,0xaf,0x63,0x24,0x21,0x18,0xc3,0x00,0x02,0x80,0x04,0x3c,0xb3,0x44,0x85,0x90,\r
+0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,0x24,0x10,0x45,0x00,0x4a,0x00,0x40,0x10,\r
+0x00,0x00,0x00,0x00,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,\r
+0x18,0x00,0xbd,0x27,0x24,0x10,0xa2,0x00,0x1f,0x00,0x40,0x14,0xc2,0x15,0x04,0x00,\r
+0x01,0x00,0x42,0x30,0x0b,0x00,0x40,0x10,0x02,0x80,0x04,0x3c,0x02,0x80,0x03,0x3c,\r
+0x3c,0xaf,0x63,0x24,0x21,0x18,0xc3,0x00,0x02,0x80,0x04,0x3c,0xb3,0x44,0x85,0x90,\r
+0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,0x24,0x10,0x45,0x00,0x3b,0x00,0x40,0x14,\r
+0x02,0x80,0x04,0x3c,0xb2,0x44,0x82,0x90,0xfe,0xff,0x03,0x24,0x24,0x10,0x43,0x00,\r
+0xb2,0x44,0x82,0xa0,0xb2,0x44,0x82,0x90,0x00,0x00,0x00,0x00,0x07,0x00,0x42,0x30,\r
+0xe4,0xff,0x40,0x14,0x02,0x80,0x02,0x3c,0xb0,0x44,0x40,0xa0,0x02,0x80,0x03,0x3c,\r
+0x99,0x44,0x64,0x90,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0xff,0x00,0x84,0x30,\r
+0xf9,0x1f,0x00,0x08,0x18,0x00,0xbd,0x27,0x02,0x80,0x04,0x3c,0xb2,0x44,0x82,0x90,\r
+0xfd,0xff,0x03,0x24,0x14,0x00,0xbf,0x8f,0x24,0x10,0x43,0x00,0x02,0x80,0x03,0x3c,\r
+0xb2,0x44,0x82,0xa0,0xb6,0x44,0x60,0xa0,0x42,0xb0,0x04,0x3c,0x00,0x00,0x82,0x90,\r
+0x10,0x00,0xb0,0x8f,0xef,0xff,0x03,0x24,0x24,0x10,0x43,0x00,0x03,0x00,0x85,0x34,\r
+0x40,0x00,0x03,0x24,0x18,0x00,0xbd,0x27,0x00,0x00,0x82,0xa0,0x00,0x00,0xa3,0xa0,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x42,0xb0,0x07,0x3c,0x00,0x00,0xe3,0x90,\r
+0xef,0xff,0x02,0x24,0x03,0x00,0xf0,0x34,0x24,0x18,0x62,0x00,0x40,0x00,0x02,0x24,\r
+0x00,0x00,0xe3,0xa0,0x02,0x00,0x04,0x24,0x00,0x00,0x02,0xa2,0x21,0x28,0x00,0x00,\r
+0x71,0x14,0x00,0x0c,0x00,0x03,0x06,0x24,0x44,0x00,0x02,0x24,0x00,0x00,0x02,0xa2,\r
+0x11,0x21,0x00,0x08,0x00,0x00,0x00,0x00,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x01,0x00,0x04,0x24,0x1c,0x46,0x00,0x08,0x18,0x00,0xbd,0x27,0xb2,0x44,0x82,0x90,\r
+0x27,0x21,0x00,0x08,0xfb,0xff,0x03,0x24,0x82,0x26,0x05,0x00,0xe8,0xff,0xbd,0x27,\r
+0x00,0xc0,0x02,0x3c,0x01,0x00,0x84,0x30,0x14,0x00,0xbf,0xaf,0x10,0x00,0xb0,0xaf,\r
+0x0c,0x00,0x80,0x10,0x24,0x10,0xa2,0x00,0x42,0xb0,0x07,0x3c,0x03,0x00,0xf0,0x34,\r
+0x02,0x00,0x04,0x24,0x21,0x28,0x00,0x00,0x31,0x00,0x40,0x14,0x00,0x03,0x06,0x24,\r
+0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x01,0x00,0x04,0x24,0x1c,0x46,0x00,0x08,\r
+0x18,0x00,0xbd,0x27,0x42,0xb0,0x04,0x3c,0x02,0x80,0x06,0x3c,0x0f,0x00,0x40,0x14,\r
+0x03,0x00,0x87,0x34,0x02,0x80,0x06,0x3c,0xb2,0x44,0xc3,0x90,0xfe,0xff,0x02,0x24,\r
+0x24,0x18,0x62,0x00,0xb2,0x44,0xc3,0xa0,0xb2,0x44,0xc2,0x90,0x00,0x00,0x00,0x00,\r
+0x07,0x00,0x42,0x30,0x16,0x00,0x40,0x10,0x02,0x80,0x02,0x3c,0x14,0x00,0xbf,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0xb2,0x44,0xc3,0x90,\r
+0xfd,0xff,0x02,0x24,0x24,0x18,0x62,0x00,0x02,0x80,0x02,0x3c,0xb2,0x44,0xc3,0xa0,\r
+0xb6,0x44,0x40,0xa0,0x00,0x00,0x83,0x90,0xef,0xff,0x02,0x24,0x24,0x18,0x62,0x00,\r
+0x40,0x00,0x02,0x24,0x00,0x00,0x83,0xa0,0x00,0x00,0xe2,0xa0,0xb2,0x44,0xc2,0x90,\r
+0x00,0x00,0x00,0x00,0x07,0x00,0x42,0x30,0xec,0xff,0x40,0x14,0x02,0x80,0x02,0x3c,\r
+0xb0,0x44,0x40,0xa0,0x02,0x80,0x03,0x3c,0x99,0x44,0x64,0x90,0x14,0x00,0xbf,0x8f,\r
+0x10,0x00,0xb0,0x8f,0xff,0x00,0x84,0x30,0xf9,0x1f,0x00,0x08,0x18,0x00,0xbd,0x27,\r
+0x00,0x00,0xe3,0x90,0xef,0xff,0x02,0x24,0x24,0x18,0x62,0x00,0x40,0x00,0x02,0x24,\r
+0x00,0x00,0xe3,0xa0,0x00,0x00,0x02,0xa2,0x71,0x14,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x44,0x00,0x02,0x24,0x00,0x00,0x02,0xa2,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0xff,0x00,0xa5,0x30,\r
+0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x18,0x00,0xbf,0xaf,0x02,0x80,0x10,0x3c,\r
+0x03,0x00,0xa0,0x14,0xff,0x00,0x91,0x30,0x19,0x00,0x20,0x12,0x02,0x80,0x02,0x3c,\r
+0xb2,0x44,0x03,0x92,0xfb,0xff,0x02,0x24,0x01,0x00,0x04,0x24,0x24,0x18,0x62,0x00,\r
+0xb2,0x44,0x03,0xa2,0x2e,0x00,0xa0,0x14,0x01,0x00,0x02,0x24,0xb2,0x44,0x02,0x92,\r
+0xfe,0xff,0x03,0x24,0x24,0x10,0x43,0x00,0xb2,0x44,0x02,0xa2,0x02,0x00,0x04,0x24,\r
+0x21,0x28,0x00,0x00,0x13,0x00,0x20,0x16,0x00,0x03,0x06,0x24,0xb2,0x44,0x02,0x92,\r
+0xfd,0xff,0x03,0x24,0x18,0x00,0xbf,0x8f,0x24,0x10,0x43,0x00,0xb2,0x44,0x02,0xa2,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,\r
+0xb0,0x44,0x40,0xa0,0x02,0x80,0x03,0x3c,0x99,0x44,0x64,0x90,0x18,0x00,0xbf,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0xff,0x00,0x84,0x30,0xf9,0x1f,0x00,0x08,\r
+0x20,0x00,0xbd,0x27,0x02,0x80,0x02,0x3c,0x01,0x00,0x07,0x24,0xb0,0x44,0x47,0xa0,\r
+0xb2,0x44,0x03,0x92,0x00,0x00,0x00,0x00,0x02,0x00,0x63,0x34,0xb2,0x44,0x03,0xa2,\r
+0x71,0x14,0x00,0x0c,0x00,0x00,0x00,0x00,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x42,0xb0,0x02,0x3c,0x44,0x00,0x03,0x24,0x03,0x00,0x42,0x34,\r
+0x20,0x00,0xbd,0x27,0x00,0x00,0x43,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x02,0x80,0x03,0x3c,0xb0,0x44,0x62,0xa0,0xb2,0x44,0x05,0x92,0x00,0x00,0x00,0x00,\r
+0x01,0x00,0xa5,0x34,0xb2,0x44,0x05,0xa2,0x1c,0x46,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0xc4,0x21,0x00,0x08,0x02,0x00,0x04,0x24,0x01,0x80,0x02,0x3c,0x25,0xb0,0x03,0x3c,\r
+0xe8,0xff,0xbd,0x27,0xd8,0x87,0x42,0x24,0x18,0x03,0x63,0x34,0x10,0x00,0xb0,0xaf,\r
+0x00,0x00,0x62,0xac,0x02,0x80,0x10,0x3c,0x99,0x44,0x02,0x92,0x00,0x00,0x00,0x00,\r
+0x0f,0x00,0x42,0x30,0x03,0x00,0x42,0x28,0x05,0x00,0x40,0x10,0x14,0x00,0xbf,0xaf,\r
+0x25,0x1f,0x00,0x0c,0x00,0x00,0x00,0x00,0x04,0x00,0x40,0x10,0x00,0x00,0x00,0x00,\r
+0x99,0x44,0x04,0x92,0xf9,0x1f,0x00,0x0c,0xff,0x00,0x84,0x30,0x02,0x80,0x04,0x3c,\r
+0x78,0x1b,0x84,0x24,0x18,0x0b,0x83,0x94,0x14,0x0b,0x85,0x94,0x14,0x00,0xbf,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x02,0x00,0x63,0x30,0x41,0xb0,0x02,0x3c,0x25,0x18,0x65,0x00,\r
+0x08,0x00,0x42,0x34,0x18,0x00,0xbd,0x27,0x00,0x00,0x43,0xa4,0x08,0x00,0xe0,0x03,\r
+0x14,0x0b,0x83,0xa4,0xe8,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,0x14,0x00,0xbf,0xaf,\r
+0x02,0x80,0x10,0x3c,0x08,0x14,0x04,0x26,0x21,0x28,0x00,0x00,0x21,0x30,0x00,0x00,\r
+0x2d,0x28,0x00,0x0c,0x21,0x38,0x00,0x00,0x1e,0x22,0x00,0x08,0x08,0x14,0x04,0x26,\r
+0xe8,0xff,0xbd,0x27,0x10,0x00,0xbf,0xaf,0x82,0x5b,0x00,0x0c,0x21,0x38,0x00,0x00,\r
+0x10,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,\r
+0xff,0xff,0x8d,0x30,0x00,0x60,0x0f,0x40,0x01,0x00,0xe1,0x35,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0x02,0x80,0x06,0x3c,0x78,0x1b,0xce,0x24,0x82,0x0b,0xc2,0x91,\r
+0x00,0x00,0x00,0x00,0x1d,0x00,0x40,0x10,0x25,0xb0,0x03,0x3c,0x38,0x02,0x64,0x34,\r
+0x80,0xff,0x02,0x24,0x00,0x00,0x82,0xa0,0x34,0x02,0x6a,0x34,0xd2,0x01,0x65,0x34,\r
+0xd6,0x01,0x66,0x34,0xda,0x01,0x67,0x34,0xde,0x01,0x63,0x34,0x00,0x00,0xa8,0x94,\r
+0x00,0x00,0xc9,0x94,0x00,0x00,0xeb,0x94,0x00,0x00,0x6c,0x94,0x00,0x00,0x44,0x95,\r
+0xb0,0xfe,0xa2,0x25,0xff,0xff,0x4d,0x30,0x80,0x0b,0xc4,0xa5,0x00,0x00,0xa0,0xa4,\r
+0x78,0x0b,0xc8,0xa5,0x00,0x00,0xc0,0xa4,0x7a,0x0b,0xc9,0xa5,0x00,0x00,0xe0,0xa4,\r
+0x7c,0x0b,0xcb,0xa5,0x00,0x00,0x60,0xa4,0x00,0x00,0x4d,0xa5,0x7e,0x0b,0xcc,0xa5,\r
+0x00,0x60,0x8f,0x40,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x2a,0xb0,0x02,0x3c,\r
+0x0a,0x00,0x45,0x34,0x63,0x00,0x03,0x24,0xff,0xff,0x04,0x34,0x00,0x00,0xa2,0x90,\r
+0x00,0x00,0x00,0x00,0x0a,0x00,0x40,0x10,0x78,0x1b,0xc2,0x24,0x64,0x00,0x02,0x24,\r
+0xff,0xff,0x42,0x24,0xff,0xff,0x42,0x30,0xfe,0xff,0x40,0x14,0xff,0xff,0x42,0x24,\r
+0xff,0xff,0x62,0x24,0xff,0xff,0x43,0x30,0xf4,0xff,0x64,0x14,0x78,0x1b,0xc2,0x24,\r
+0x80,0x0b,0x48,0x94,0x7e,0x0b,0x47,0x94,0x78,0x0b,0x49,0x94,0x7a,0x0b,0x4a,0x94,\r
+0x7c,0x0b,0x4b,0x94,0x25,0xb0,0x03,0x3c,0x38,0x02,0x6c,0x34,0x34,0x02,0x62,0x34,\r
+0xd2,0x01,0x64,0x34,0xd6,0x01,0x65,0x34,0xda,0x01,0x66,0x34,0xde,0x01,0x63,0x34,\r
+0x00,0x00,0x48,0xa4,0x00,0x00,0x89,0xa4,0x00,0x00,0xaa,0xa4,0x00,0x00,0xcb,0xa4,\r
+0x00,0x00,0x67,0xa4,0x00,0x00,0x80,0xa1,0x00,0x60,0x8f,0x40,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x25,0xb0,0x04,0x3c,0x08,0x00,0x83,0x34,0x00,0x00,0x62,0x94,\r
+0x00,0x00,0x00,0x00,0x00,0x14,0x02,0x00,0x03,0x14,0x02,0x00,0x1a,0x00,0x40,0x04,\r
+0x60,0x02,0x85,0x34,0x00,0x00,0xa3,0x90,0x05,0x00,0x02,0x24,0x00,0x03,0x8b,0x34,\r
+0xff,0x00,0x63,0x30,0x04,0x03,0x8c,0x34,0xbd,0x00,0x8a,0x34,0x03,0x00,0x86,0x34,\r
+0x40,0x00,0x85,0x34,0xfc,0x77,0x09,0x24,0x11,0x00,0x62,0x10,0x23,0x00,0x84,0x34,\r
+0x00,0x00,0xc2,0x90,0xfe,0xff,0x03,0x24,0x24,0x10,0x43,0x00,0x00,0x00,0xc2,0xa0,\r
+0x22,0x00,0x02,0x24,0x00,0x00,0x60,0xad,0x00,0x00,0x80,0xad,0x00,0x00,0x82,0xa0,\r
+0xfc,0x37,0x02,0x24,0x00,0x00,0xa9,0xa4,0x00,0x00,0xa2,0xa4,0x00,0x00,0xa9,0xa4,\r
+0x00,0x00,0xa0,0xa4,0x00,0x00,0xa0,0xa4,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x60,0xad,0x00,0x00,0x80,0xad,0x00,0x00,0x42,0x91,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0x42,0x34,0x00,0x00,0x42,0xa1,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0xd0,0xff,0xbd,0x27,0x28,0x00,0xb4,0xaf,0x2c,0x00,0xbf,0xaf,0x24,0x00,0xb3,0xaf,\r
+0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,0xff,0xff,0x14,0x24,\r
+0x02,0x80,0x13,0x3c,0x41,0xb0,0x02,0x3c,0x78,0x1b,0x66,0x26,0x04,0x00,0x42,0x34,\r
+0x00,0x00,0x47,0x8c,0x0c,0x0b,0xc5,0x8c,0x02,0x80,0x03,0x3c,0x5e,0x43,0x64,0x90,\r
+0x08,0x0b,0xc8,0x8c,0x02,0x80,0x02,0x3c,0x80,0x43,0x49,0x90,0x25,0xb0,0x0a,0x3c,\r
+0x25,0x88,0xa7,0x00,0xb0,0x03,0x42,0x35,0x00,0x00,0x51,0xac,0x00,0x24,0x04,0x00,\r
+0x00,0x00,0x48,0xac,0x84,0x02,0x43,0x35,0x8c,0x02,0x45,0x35,0x01,0x00,0x02,0x24,\r
+0x00,0x00,0x71,0xac,0x00,0x00,0xa4,0xac,0x0a,0x03,0x22,0x11,0x0c,0x0b,0xd1,0xac,\r
+0x78,0x1b,0x64,0x26,0x08,0x0b,0x82,0x8c,0x00,0x00,0x00,0x00,0x24,0x10,0x51,0x00,\r
+0x01,0x00,0x42,0x30,0x0e,0x00,0x40,0x10,0x78,0x1b,0x67,0x26,0x25,0xb0,0x0b,0x3c,\r
+0xb0,0x03,0x63,0x35,0x01,0x00,0x06,0x24,0x00,0x00,0x66,0xac,0x04,0x00,0x62,0x35,\r
+0x00,0x00,0x4a,0x8c,0x0c,0x0b,0x83,0x8c,0x40,0x00,0x02,0x3c,0x24,0x10,0x42,0x01,\r
+0x01,0x00,0x63,0x38,0x18,0x01,0x40,0x10,0x0c,0x0b,0x83,0xac,0x78,0x1b,0x67,0x26,\r
+0x08,0x0b,0xe8,0x8c,0x00,0x00,0x00,0x00,0x24,0x10,0x11,0x01,0x04,0x00,0x42,0x30,\r
+0x18,0x00,0x40,0x10,0x78,0x1b,0x70,0x26,0x25,0xb0,0x03,0x3c,0xb0,0x03,0x64,0x34,\r
+0x04,0x00,0x02,0x24,0x00,0x00,0x82,0xac,0x0c,0x0b,0xe2,0x8c,0xfc,0x00,0x63,0x34,\r
+0xe4,0x0a,0xe5,0x94,0x8c,0x25,0xe4,0x8c,0x00,0x00,0x66,0x8c,0x04,0x00,0x42,0x38,\r
+0x21,0x50,0x85,0x00,0x0a,0x00,0xca,0x10,0x0c,0x0b,0xe2,0xac,0x02,0x80,0x05,0x3c,\r
+0x44,0x44,0xa2,0x8c,0xfb,0xff,0x04,0x24,0x24,0x20,0x04,0x01,0x00,0x10,0x42,0x34,\r
+0x41,0xb0,0x03,0x3c,0x44,0x44,0xa2,0xac,0x00,0x00,0x64,0xac,0x08,0x0b,0xe4,0xac,\r
+0x78,0x1b,0x70,0x26,0x08,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,0x24,0x20,0x51,0x00,\r
+0x08,0x00,0x83,0x30,0x06,0x00,0x60,0x10,0x10,0x00,0x82,0x30,0x0c,0x0b,0x02,0x8e,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0x42,0x38,0x0c,0x0b,0x02,0xae,0x10,0x00,0x82,0x30,\r
+0x06,0x00,0x40,0x10,0x20,0x00,0x82,0x30,0x0c,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,\r
+0x10,0x00,0x42,0x38,0x0c,0x0b,0x02,0xae,0x20,0x00,0x82,0x30,0x06,0x00,0x40,0x10,\r
+0x40,0x00,0x82,0x30,0x0c,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,0x20,0x00,0x42,0x38,\r
+0x0c,0x0b,0x02,0xae,0x40,0x00,0x82,0x30,0x06,0x00,0x40,0x10,0x80,0x00,0x82,0x30,\r
+0x0c,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,0x40,0x00,0x42,0x38,0x0c,0x0b,0x02,0xae,\r
+0x80,0x00,0x82,0x30,0x06,0x00,0x40,0x10,0x00,0x01,0x82,0x30,0x0c,0x0b,0x02,0x8e,\r
+0x00,0x00,0x00,0x00,0x80,0x00,0x42,0x38,0x0c,0x0b,0x02,0xae,0x00,0x01,0x82,0x30,\r
+0x06,0x00,0x40,0x10,0x00,0x02,0x82,0x30,0x0c,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,\r
+0x00,0x01,0x42,0x38,0x0c,0x0b,0x02,0xae,0x00,0x02,0x82,0x30,0x06,0x00,0x40,0x10,\r
+0x00,0x04,0x82,0x30,0x0c,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,0x00,0x02,0x42,0x38,\r
+0x0c,0x0b,0x02,0xae,0x00,0x04,0x82,0x30,0x05,0x00,0x40,0x10,0x00,0x00,0x00,0x00,\r
+0x0c,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,0x00,0x04,0x42,0x38,0x0c,0x0b,0x02,0xae,\r
+0x00,0x08,0x82,0x30,0x7a,0x02,0x40,0x14,0x00,0x00,0x00,0x00,0x78,0x1b,0x70,0x26,\r
+0x08,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,0x24,0x10,0x51,0x00,0x00,0x10,0x42,0x30,\r
+0x50,0x02,0x40,0x14,0x00,0x00,0x00,0x00,0x78,0x1b,0x70,0x26,0x08,0x0b,0x03,0x8e,\r
+0x00,0x00,0x00,0x00,0x24,0x10,0x71,0x00,0x00,0x20,0x42,0x30,0x42,0x02,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0x24,0x10,0x71,0x00,0x00,0x80,0x42,0x30,0xf6,0x00,0x40,0x14,\r
+0x01,0x00,0x12,0x3c,0x78,0x1b,0x70,0x26,0x08,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,\r
+0x24,0x10,0x51,0x00,0x24,0x10,0x54,0x00,0x24,0x10,0x52,0x00,0x20,0x01,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0x08,0x0b,0x02,0x8e,0x02,0x00,0x12,0x3c,0x24,0x10,0x51,0x00,\r
+0x24,0x10,0x52,0x00,0x48,0x01,0x40,0x14,0x00,0x00,0x00,0x00,0x78,0x1b,0x70,0x26,\r
+0x08,0x0b,0x02,0x8e,0x04,0x00,0x12,0x3c,0x24,0x10,0x51,0x00,0x24,0x10,0x54,0x00,\r
+0x24,0x10,0x52,0x00,0x71,0x01,0x40,0x14,0x00,0x00,0x00,0x00,0x78,0x1b,0x70,0x26,\r
+0x08,0x0b,0x02,0x8e,0x08,0x00,0x12,0x3c,0x24,0x10,0x51,0x00,0x24,0x10,0x52,0x00,\r
+0x98,0x01,0x40,0x14,0x00,0x00,0x00,0x00,0x78,0x1b,0x70,0x26,0x08,0x0b,0x02,0x8e,\r
+0x10,0x00,0x12,0x3c,0x24,0x10,0x51,0x00,0x24,0x10,0x54,0x00,0x24,0x10,0x52,0x00,\r
+0xc1,0x01,0x40,0x14,0x00,0x00,0x00,0x00,0x78,0x1b,0x70,0x26,0x08,0x0b,0x02,0x8e,\r
+0x20,0x00,0x12,0x3c,0x24,0x10,0x51,0x00,0x24,0x10,0x52,0x00,0xe8,0x01,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0x78,0x1b,0x70,0x26,0x08,0x0b,0x02,0x8e,0x40,0x00,0x12,0x3c,\r
+0x24,0x10,0x51,0x00,0x24,0x10,0x54,0x00,0x24,0x10,0x52,0x00,0x9a,0x00,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0x78,0x1b,0x68,0x26,0x08,0x0b,0x07,0x8d,0x00,0x04,0x05,0x3c,\r
+0x24,0x10,0xf1,0x00,0x24,0x10,0x45,0x00,0x1b,0x00,0x40,0x10,0x78,0x1b,0x66,0x26,\r
+0x2a,0xb0,0x02,0x3c,0x2c,0x00,0x42,0x34,0x00,0x00,0x4a,0x8c,0xff,0x00,0x02,0x24,\r
+0xff,0x00,0x43,0x31,0x58,0x02,0x62,0x10,0x02,0x80,0x06,0x3c,0x44,0x44,0xc4,0x8c,\r
+0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0x00,0x80,0x84,0x34,0x27,0x28,0x05,0x00,\r
+0x00,0x00,0x44,0xac,0x24,0x28,0xe5,0x00,0x41,0xb0,0x03,0x3c,0x02,0x80,0x02,0x3c,\r
+0x00,0x00,0x65,0xac,0x44,0x44,0xc4,0xac,0x08,0x0b,0x05,0xad,0x9a,0x43,0x40,0xa4,\r
+0x78,0x1b,0x62,0x26,0x0c,0x0b,0x43,0x8c,0x00,0x04,0x04,0x3c,0x26,0x18,0x64,0x00,\r
+0x0c,0x0b,0x43,0xac,0x78,0x1b,0x66,0x26,0x08,0x0b,0xc7,0x8c,0x00,0x08,0x04,0x3c,\r
+0x24,0x28,0xf1,0x00,0x24,0x10,0xa4,0x00,0x08,0x00,0x40,0x10,0x80,0x00,0x08,0x3c,\r
+0x0c,0x0b,0xc3,0x8c,0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0x26,0x18,0x64,0x00,\r
+0x00,0x00,0x44,0xac,0x0c,0x0b,0xc3,0xac,0x80,0x00,0x08,0x3c,0x24,0x10,0xa8,0x00,\r
+0x21,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x0c,0x0b,0xc3,0x8c,0x25,0xb0,0x09,0x3c,\r
+0xb0,0x03,0x2a,0x35,0x2a,0xb0,0x02,0x3c,0x00,0x00,0x43,0xad,0x36,0x00,0x42,0x34,\r
+0x00,0x00,0x43,0x90,0x23,0xb0,0x04,0x3c,0xff,0x1f,0x02,0x3c,0xc0,0x18,0x03,0x00,\r
+0xf0,0x07,0x63,0x30,0xbc,0x25,0xc5,0x8c,0x21,0x18,0x64,0x00,0xff,0xff,0x42,0x34,\r
+0x24,0x18,0x62,0x00,0x2a,0x02,0x65,0x10,0xc0,0x25,0xc3,0xac,0x02,0x80,0x05,0x3c,\r
+0x44,0x44,0xa3,0x8c,0x27,0x20,0x08,0x00,0x24,0x20,0xe4,0x00,0x00,0x08,0x63,0x34,\r
+0x41,0xb0,0x02,0x3c,0x00,0x00,0x43,0xad,0x00,0x00,0x44,0xac,0x44,0x44,0xa3,0xac,\r
+0x08,0x0b,0xc4,0xac,0x78,0x1b,0x62,0x26,0x0c,0x0b,0x43,0x8c,0x80,0x00,0x04,0x3c,\r
+0x26,0x18,0x64,0x00,0x0c,0x0b,0x43,0xac,0x78,0x1b,0x66,0x26,0x08,0x0b,0xc3,0x8c,\r
+0x00,0x01,0x04,0x3c,0x24,0x28,0x71,0x00,0x24,0x10,0xa4,0x00,0x06,0x00,0x40,0x10,\r
+0x25,0xb0,0x02,0x3c,0x0c,0x0b,0xc3,0x8c,0xb0,0x03,0x42,0x34,0x26,0x18,0x64,0x00,\r
+0x00,0x00,0x44,0xac,0x0c,0x0b,0xc3,0xac,0x00,0x02,0x04,0x3c,0x24,0x10,0xa4,0x00,\r
+0x08,0x00,0x40,0x10,0x02,0x80,0x02,0x3c,0x0c,0x0b,0xc2,0x8c,0x25,0xb0,0x03,0x3c,\r
+0xb0,0x03,0x63,0x34,0x26,0x10,0x44,0x00,0x0c,0x0b,0xc2,0xac,0x00,0x00,0x64,0xac,\r
+0x02,0x80,0x02,0x3c,0x52,0x43,0x43,0x90,0x01,0x00,0x02,0x24,0x0f,0x00,0x63,0x30,\r
+0xf1,0x01,0x62,0x10,0x00,0x00,0x00,0x00,0x2c,0x00,0xbf,0x8f,0x28,0x00,0xb4,0x8f,\r
+0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x30,0x00,0xbd,0x27,0x20,0xbd,0x02,0x3c,0xec,0x02,0x65,0x35,\r
+0x4d,0x00,0x68,0x35,0xf1,0x02,0x69,0x35,0x08,0x00,0x07,0x24,0x78,0x02,0x42,0x34,\r
+0x00,0x00,0x46,0xa4,0x00,0x00,0x00,0xa1,0x00,0x00,0x27,0xa1,0x00,0x00,0xa0,0xac,\r
+0x00,0x00,0xa2,0x8c,0xff,0x00,0x03,0x3c,0x80,0x00,0x04,0x3c,0xff,0x00,0x4a,0x30,\r
+0x25,0x50,0x43,0x01,0x24,0x20,0x44,0x01,0xf2,0x02,0x66,0x35,0x0a,0x00,0x6a,0x35,\r
+0x80,0xff,0x02,0x24,0x00,0x00,0x00,0xa1,0x00,0x00,0x27,0xa1,0x00,0x00,0xa3,0xac,\r
+0x00,0x00,0xa3,0xac,0x00,0x00,0xc0,0xa0,0x00,0x00,0x42,0xa1,0x04,0x00,0x80,0x10,\r
+0x02,0x00,0x62,0x35,0x84,0xff,0x02,0x24,0x00,0x00,0x42,0xa1,0x02,0x00,0x62,0x35,\r
+0x00,0x00,0x43,0x94,0xff,0xbf,0x04,0x24,0x24,0x18,0x64,0x00,0x00,0x00,0x43,0xa4,\r
+0xd8,0x22,0x00,0x08,0x78,0x1b,0x67,0x26,0x86,0x20,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0xc0,0x00,0x00,0x0c,0x07,0x00,0x04,0x24,0x21,0x50,0x40,0x00,0xff,0x00,0x43,0x30,\r
+0xff,0x00,0x02,0x24,0x1b,0x00,0x62,0x10,0xff,0x00,0x43,0x31,0x20,0x25,0x05,0x8e,\r
+0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00,\r
+0xb4,0x24,0x03,0xae,0x06,0x00,0x04,0x24,0x40,0x00,0x07,0x24,0x70,0x24,0x0a,0xa2,\r
+0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x02,0x80,0x06,0x3c,0x02,0x80,0x07,0x3c,\r
+0x44,0x44,0xc3,0x8c,0x54,0x44,0xe4,0x90,0x08,0x0b,0x05,0x8e,0x60,0x00,0x02,0x3c,\r
+0x27,0x10,0x02,0x00,0x24,0x28,0xa2,0x00,0x00,0x04,0x63,0x34,0x02,0x00,0x84,0x34,\r
+0x41,0xb0,0x02,0x3c,0x44,0x44,0xc3,0xac,0x54,0x44,0xe4,0xa0,0x00,0x00,0x45,0xac,\r
+0x08,0x0b,0x05,0xae,0x0c,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,0x26,0x10,0x52,0x00,\r
+0x79,0x23,0x00,0x08,0x0c,0x0b,0x02,0xae,0x86,0x20,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0xc0,0x00,0x00,0x0c,0x21,0x20,0x00,0x00,0x21,0x50,0x40,0x00,0xff,0x00,0x43,0x30,\r
+0xff,0x00,0x02,0x24,0x1e,0x00,0x62,0x10,0xff,0x00,0x43,0x31,0xfc,0x24,0x05,0x8e,\r
+0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00,\r
+0x90,0x24,0x03,0xae,0x03,0x00,0x04,0x24,0x40,0x00,0x07,0x24,0x54,0x24,0x0a,0xa2,\r
+0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x02,0x80,0x07,0x3c,0x02,0x80,0x08,0x3c,\r
+0x44,0x44,0xe5,0x8c,0x54,0x44,0x06,0x91,0x08,0x0b,0x04,0x8e,0x01,0x00,0x09,0x3c,\r
+0x00,0x80,0x22,0x35,0x27,0x10,0x02,0x00,0x80,0xff,0x03,0x24,0x24,0x20,0x82,0x00,\r
+0x25,0x30,0xc3,0x00,0x80,0x00,0xa5,0x34,0x41,0xb0,0x02,0x3c,0x44,0x44,0xe5,0xac,\r
+0x54,0x44,0x06,0xa1,0x27,0xa0,0x09,0x00,0x00,0x00,0x44,0xac,0x08,0x0b,0x04,0xae,\r
+0x0c,0x0b,0x02,0x8e,0x01,0x00,0x12,0x3c,0x00,0x80,0x42,0x38,0x0c,0x0b,0x02,0xae,\r
+0x78,0x1b,0x70,0x26,0x08,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,0x24,0x10,0x51,0x00,\r
+0x24,0x10,0x54,0x00,0x24,0x10,0x52,0x00,0xe2,0xfe,0x40,0x10,0x00,0x00,0x00,0x00,\r
+0x86,0x20,0x00,0x0c,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x0c,0x01,0x00,0x04,0x24,\r
+0x21,0x50,0x40,0x00,0xff,0x00,0x43,0x30,0xff,0x00,0x02,0x24,0x1b,0x00,0x62,0x10,\r
+0xff,0x00,0x43,0x31,0xfc,0x24,0x05,0x8e,0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,\r
+0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00,0x90,0x24,0x03,0xae,0x03,0x00,0x04,0x24,\r
+0x40,0x00,0x07,0x24,0x58,0x24,0x0a,0xa2,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,\r
+0x02,0x80,0x06,0x3c,0x02,0x80,0x07,0x3c,0x44,0x44,0xc3,0x8c,0x54,0x44,0xe4,0x90,\r
+0x08,0x0b,0x05,0x8e,0x00,0x80,0x42,0x36,0x27,0x10,0x02,0x00,0x24,0x28,0xa2,0x00,\r
+0x80,0x00,0x63,0x34,0x40,0x00,0x84,0x34,0x41,0xb0,0x02,0x3c,0x44,0x44,0xc3,0xac,\r
+0x54,0x44,0xe4,0xa0,0x00,0x00,0x45,0xac,0x08,0x0b,0x05,0xae,0x0c,0x0b,0x02,0x8e,\r
+0x00,0x00,0x00,0x00,0x26,0x10,0x52,0x00,0x0c,0x0b,0x02,0xae,0x78,0x1b,0x70,0x26,\r
+0x08,0x0b,0x02,0x8e,0x02,0x00,0x12,0x3c,0x24,0x10,0x51,0x00,0x24,0x10,0x52,0x00,\r
+0xbb,0xfe,0x40,0x10,0x00,0x00,0x00,0x00,0x86,0x20,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0xc0,0x00,0x00,0x0c,0x02,0x00,0x04,0x24,0x21,0x50,0x40,0x00,0xff,0x00,0x43,0x30,\r
+0xff,0x00,0x02,0x24,0x1d,0x00,0x62,0x10,0xff,0x00,0x43,0x31,0x08,0x25,0x05,0x8e,\r
+0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00,\r
+0x9c,0x24,0x03,0xae,0x04,0x00,0x04,0x24,0x40,0x00,0x07,0x24,0x5c,0x24,0x0a,0xa2,\r
+0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x02,0x80,0x06,0x3c,0x44,0x44,0xc3,0x8c,\r
+0x02,0x80,0x07,0x3c,0x54,0x44,0xe4,0x90,0x08,0x0b,0x05,0x8e,0x06,0x00,0x02,0x3c,\r
+0x27,0x10,0x02,0x00,0x00,0x01,0x63,0x34,0x24,0x28,0xa2,0x00,0x44,0x44,0xc3,0xac,\r
+0x20,0x00,0x84,0x34,0x41,0xb0,0x02,0x3c,0x04,0x00,0x03,0x3c,0x54,0x44,0xe4,0xa0,\r
+0x26,0xa0,0x83,0x02,0x00,0x00,0x45,0xac,0x08,0x0b,0x05,0xae,0x0c,0x0b,0x02,0x8e,\r
+0x00,0x00,0x00,0x00,0x26,0x10,0x52,0x00,0x0c,0x0b,0x02,0xae,0x78,0x1b,0x70,0x26,\r
+0x08,0x0b,0x02,0x8e,0x04,0x00,0x12,0x3c,0x24,0x10,0x51,0x00,0x24,0x10,0x54,0x00,\r
+0x24,0x10,0x52,0x00,0x92,0xfe,0x40,0x10,0x00,0x00,0x00,0x00,0x86,0x20,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x0c,0x03,0x00,0x04,0x24,0x21,0x50,0x40,0x00,\r
+0xff,0x00,0x43,0x30,0xff,0x00,0x02,0x24,0x1b,0x00,0x62,0x10,0xff,0x00,0x43,0x31,\r
+0x08,0x25,0x05,0x8e,0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,\r
+0x21,0x30,0x60,0x00,0x9c,0x24,0x03,0xae,0x04,0x00,0x04,0x24,0x40,0x00,0x07,0x24,\r
+0x60,0x24,0x0a,0xa2,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x02,0x80,0x06,0x3c,\r
+0x02,0x80,0x07,0x3c,0x44,0x44,0xc3,0x8c,0x54,0x44,0xe4,0x90,0x08,0x0b,0x05,0x8e,\r
+0x06,0x00,0x02,0x3c,0x27,0x10,0x02,0x00,0x24,0x28,0xa2,0x00,0x00,0x01,0x63,0x34,\r
+0x10,0x00,0x84,0x34,0x41,0xb0,0x02,0x3c,0x44,0x44,0xc3,0xac,0x54,0x44,0xe4,0xa0,\r
+0x00,0x00,0x45,0xac,0x08,0x0b,0x05,0xae,0x0c,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,\r
+0x26,0x10,0x52,0x00,0x0c,0x0b,0x02,0xae,0x78,0x1b,0x70,0x26,0x08,0x0b,0x02,0x8e,\r
+0x08,0x00,0x12,0x3c,0x24,0x10,0x51,0x00,0x24,0x10,0x52,0x00,0x6b,0xfe,0x40,0x10,\r
+0x00,0x00,0x00,0x00,0x86,0x20,0x00,0x0c,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x0c,\r
+0x04,0x00,0x04,0x24,0x21,0x50,0x40,0x00,0xff,0x00,0x43,0x30,0xff,0x00,0x02,0x24,\r
+0x1d,0x00,0x62,0x10,0xff,0x00,0x43,0x31,0x14,0x25,0x05,0x8e,0x20,0x10,0x02,0x3c,\r
+0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00,0xa8,0x24,0x03,0xae,\r
+0x05,0x00,0x04,0x24,0x40,0x00,0x07,0x24,0x64,0x24,0x0a,0xa2,0xc3,0x01,0x00,0x0c,\r
+0x10,0x00,0xa0,0xaf,0x02,0x80,0x06,0x3c,0x44,0x44,0xc3,0x8c,0x02,0x80,0x07,0x3c,\r
+0x54,0x44,0xe4,0x90,0x08,0x0b,0x05,0x8e,0x18,0x00,0x02,0x3c,0x27,0x10,0x02,0x00,\r
+0x00,0x02,0x63,0x34,0x24,0x28,0xa2,0x00,0x44,0x44,0xc3,0xac,0x08,0x00,0x84,0x34,\r
+0x41,0xb0,0x02,0x3c,0x10,0x00,0x03,0x3c,0x54,0x44,0xe4,0xa0,0x26,0xa0,0x83,0x02,\r
+0x00,0x00,0x45,0xac,0x08,0x0b,0x05,0xae,0x0c,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,\r
+0x26,0x10,0x52,0x00,0x0c,0x0b,0x02,0xae,0x78,0x1b,0x70,0x26,0x08,0x0b,0x02,0x8e,\r
+0x10,0x00,0x12,0x3c,0x24,0x10,0x51,0x00,0x24,0x10,0x54,0x00,0x24,0x10,0x52,0x00,\r
+0x42,0xfe,0x40,0x10,0x00,0x00,0x00,0x00,0x86,0x20,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0xc0,0x00,0x00,0x0c,0x05,0x00,0x04,0x24,0x21,0x50,0x40,0x00,0xff,0x00,0x43,0x30,\r
+0xff,0x00,0x02,0x24,0x1b,0x00,0x62,0x10,0xff,0x00,0x43,0x31,0x14,0x25,0x05,0x8e,\r
+0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00,\r
+0xa8,0x24,0x03,0xae,0x05,0x00,0x04,0x24,0x40,0x00,0x07,0x24,0x68,0x24,0x0a,0xa2,\r
+0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x02,0x80,0x06,0x3c,0x02,0x80,0x07,0x3c,\r
+0x44,0x44,0xc3,0x8c,0x54,0x44,0xe4,0x90,0x08,0x0b,0x05,0x8e,0x18,0x00,0x02,0x3c,\r
+0x27,0x10,0x02,0x00,0x24,0x28,0xa2,0x00,0x00,0x02,0x63,0x34,0x01,0x00,0x84,0x34,\r
+0x41,0xb0,0x02,0x3c,0x44,0x44,0xc3,0xac,0x54,0x44,0xe4,0xa0,0x00,0x00,0x45,0xac,\r
+0x08,0x0b,0x05,0xae,0x0c,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,0x26,0x10,0x52,0x00,\r
+0x0c,0x0b,0x02,0xae,0x78,0x1b,0x70,0x26,0x08,0x0b,0x02,0x8e,0x20,0x00,0x12,0x3c,\r
+0x24,0x10,0x51,0x00,0x24,0x10,0x52,0x00,0x1b,0xfe,0x40,0x10,0x00,0x00,0x00,0x00,\r
+0x86,0x20,0x00,0x0c,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x0c,0x06,0x00,0x04,0x24,\r
+0x21,0x50,0x40,0x00,0xff,0x00,0x43,0x30,0xff,0x00,0x02,0x24,0x1d,0x00,0x62,0x10,\r
+0xff,0x00,0x43,0x31,0x20,0x25,0x05,0x8e,0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,\r
+0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00,0xb4,0x24,0x03,0xae,0x06,0x00,0x04,0x24,\r
+0x40,0x00,0x07,0x24,0x6c,0x24,0x0a,0xa2,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,\r
+0x02,0x80,0x06,0x3c,0x44,0x44,0xc3,0x8c,0x02,0x80,0x07,0x3c,0x54,0x44,0xe4,0x90,\r
+0x08,0x0b,0x05,0x8e,0x60,0x00,0x02,0x3c,0x27,0x10,0x02,0x00,0x00,0x04,0x63,0x34,\r
+0x24,0x28,0xa2,0x00,0x44,0x44,0xc3,0xac,0x04,0x00,0x84,0x34,0x41,0xb0,0x02,0x3c,\r
+0x40,0x00,0x03,0x3c,0x54,0x44,0xe4,0xa0,0x26,0xa0,0x83,0x02,0x00,0x00,0x45,0xac,\r
+0x08,0x0b,0x05,0xae,0x0c,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,0x26,0x10,0x52,0x00,\r
+0x71,0x23,0x00,0x08,0x0c,0x0b,0x02,0xae,0x86,0x20,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x0c,0x0b,0x02,0x8e,0x08,0x0b,0x03,0x8e,0x00,0x20,0x42,0x38,0x41,0x23,0x00,0x08,\r
+0x0c,0x0b,0x02,0xae,0x86,0x20,0x00,0x0c,0x00,0x00,0x00,0x00,0xf4,0x00,0x00,0x0c,\r
+0x01,0x00,0x04,0x24,0x21,0x50,0x40,0x00,0xff,0x00,0x43,0x30,0xff,0x00,0x02,0x24,\r
+0x16,0x00,0x62,0x10,0xff,0x00,0x43,0x31,0x44,0x25,0x05,0x8e,0x20,0x10,0x02,0x3c,\r
+0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0xd8,0x24,0x03,0xae,0x21,0x30,0x60,0x00,\r
+0x01,0x00,0x04,0x24,0x78,0x24,0x0a,0xa2,0x40,0x00,0x07,0x24,0xc3,0x01,0x00,0x0c,\r
+0x10,0x00,0xa0,0xaf,0x02,0x80,0x05,0x3c,0x44,0x44,0xa3,0x8c,0x08,0x0b,0x04,0x8e,\r
+0xff,0xc7,0x02,0x24,0x10,0x00,0x63,0x34,0x24,0x20,0x82,0x00,0x41,0xb0,0x02,0x3c,\r
+0x44,0x44,0xa3,0xac,0x00,0x00,0x44,0xac,0x08,0x0b,0x04,0xae,0x0c,0x0b,0x02,0x8e,\r
+0x00,0x00,0x00,0x00,0x00,0x10,0x42,0x38,0x3a,0x23,0x00,0x08,0x0c,0x0b,0x02,0xae,\r
+0xf4,0x00,0x00,0x0c,0x21,0x20,0x00,0x00,0x21,0x50,0x40,0x00,0xff,0x00,0x43,0x30,\r
+0xff,0x00,0x02,0x24,0x16,0x00,0x62,0x10,0xff,0x00,0x43,0x31,0x2c,0x25,0x05,0x8e,\r
+0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0xc0,0x24,0x03,0xae,\r
+0x21,0x30,0x60,0x00,0x21,0x20,0x00,0x00,0x74,0x24,0x0a,0xa2,0x40,0x00,0x07,0x24,\r
+0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x02,0x80,0x05,0x3c,0x44,0x44,0xa3,0x8c,\r
+0x08,0x0b,0x04,0x8e,0xff,0xc7,0x02,0x24,0x04,0x00,0x63,0x34,0x24,0x20,0x82,0x00,\r
+0x41,0xb0,0x02,0x3c,0x44,0x44,0xa3,0xac,0x00,0x00,0x44,0xac,0x08,0x0b,0x04,0xae,\r
+0x0c,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,0x00,0x08,0x42,0x38,0x33,0x23,0x00,0x08,\r
+0x0c,0x0b,0x02,0xae,0x56,0x01,0x42,0x35,0x00,0x00,0x43,0x94,0x00,0x00,0x00,0x00,\r
+0xf3,0xfc,0x60,0x10,0x00,0x00,0x00,0x00,0xde,0x4f,0x00,0x0c,0x07,0x00,0x04,0x24,\r
+0xc5,0x22,0x00,0x08,0x78,0x1b,0x64,0x26,0x2c,0x00,0xbf,0x8f,0x28,0x00,0xb4,0x8f,\r
+0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,\r
+0x79,0x22,0x00,0x08,0x30,0x00,0xbd,0x27,0x25,0xb0,0x02,0x3c,0x01,0x00,0x03,0x24,\r
+0x90,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x95,0x23,0x00,0x08,0x78,0x1b,0x62,0x26,\r
+0xd0,0x03,0x23,0x35,0x80,0x00,0x02,0x24,0x00,0x00,0x62,0xac,0xc6,0x23,0x00,0x08,\r
+0x78,0x1b,0x62,0x26,0xe0,0xff,0xbd,0x27,0x18,0x00,0xbf,0xaf,0x14,0x00,0xb1,0xaf,\r
+0x10,0x00,0xb0,0xaf,0x25,0xb0,0x0c,0x3c,0x01,0x80,0x02,0x3c,0x18,0x03,0x83,0x35,\r
+0xa4,0x97,0x42,0x24,0x02,0x80,0x11,0x3c,0x41,0xb0,0x0b,0x3c,0x00,0x00,0x62,0xac,\r
+0x78,0x1b,0x2a,0x26,0x0a,0x00,0x62,0x35,0x00,0x00,0x44,0x94,0x16,0x0b,0x43,0x95,\r
+0x14,0x0b,0x49,0x95,0x25,0x30,0x64,0x00,0xff,0xff,0xd0,0x30,0x24,0x10,0x09,0x02,\r
+0x02,0x00,0x42,0x30,0x9e,0x00,0x40,0x10,0xc0,0x03,0x83,0x35,0x02,0x00,0x02,0x24,\r
+0x00,0x00,0x62,0xac,0x02,0x80,0x08,0x3c,0x44,0x44,0x04,0x8d,0xdc,0x02,0x82,0x35,\r
+0x00,0x00,0x47,0x90,0xfd,0xff,0x03,0x24,0x00,0x80,0x02,0x3c,0x24,0x18,0x23,0x01,\r
+0x25,0x20,0x82,0x00,0x02,0x00,0xc6,0x38,0x08,0x00,0x65,0x35,0x02,0x80,0x02,0x3c,\r
+0x99,0x44,0x47,0xa0,0x44,0x44,0x04,0xad,0x16,0x0b,0x46,0xa5,0x21,0x48,0x60,0x00,\r
+0x00,0x00,0xa3,0xa4,0x14,0x0b,0x43,0xa5,0x24,0x38,0x09,0x02,0x04,0x00,0xe2,0x30,\r
+0x0a,0x00,0x40,0x10,0x08,0x00,0xe2,0x30,0x16,0x0b,0x43,0x95,0x0c,0x00,0x64,0x35,\r
+0xc0,0x03,0x85,0x35,0x04,0x00,0x63,0x38,0x04,0x00,0x02,0x24,0x00,0x00,0x86,0x8c,\r
+0x00,0x00,0xa2,0xac,0x16,0x0b,0x43,0xa5,0x08,0x00,0xe2,0x30,0x08,0x00,0x40,0x10,\r
+0x10,0x00,0xe2,0x30,0x16,0x0b,0x42,0x95,0xc0,0x03,0x84,0x35,0x08,0x00,0x03,0x24,\r
+0x08,0x00,0x42,0x38,0x00,0x00,0x83,0xac,0x16,0x0b,0x42,0xa5,0x10,0x00,0xe2,0x30,\r
+0x3a,0x00,0x40,0x10,0x78,0x1b,0x29,0x26,0xc0,0x03,0x84,0x35,0x10,0x00,0x02,0x24,\r
+0x00,0x00,0x82,0xac,0x16,0x0b,0x43,0x95,0x02,0x80,0x05,0x3c,0xba,0x44,0xa4,0x90,\r
+0x10,0x00,0x63,0x38,0x02,0x80,0x02,0x3c,0x16,0x0b,0x43,0xa5,0x7c,0x44,0x47,0x24,\r
+0x69,0x00,0x80,0x14,0x21,0x30,0x00,0x00,0xe8,0x0a,0x42,0x91,0x00,0x00,0x00,0x00,\r
+0x01,0x00,0x42,0x30,0x69,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x02,0x80,0x04,0x3c,\r
+0x98,0x44,0x82,0x90,0x00,0x00,0x00,0x00,0x64,0x00,0x40,0x10,0x00,0x00,0x00,0x00,\r
+0x98,0x44,0x82,0x90,0x02,0x00,0x03,0x24,0xff,0x00,0x42,0x30,0x66,0x00,0x43,0x10,\r
+0x00,0x00,0x00,0x00,0x98,0x44,0x82,0x90,0x03,0x00,0x03,0x24,0xff,0x00,0x42,0x30,\r
+0x61,0x00,0x43,0x10,0x02,0x80,0x05,0x3c,0xb2,0x44,0xa2,0x90,0x02,0x80,0x03,0x3c,\r
+0x02,0x00,0x04,0x24,0x10,0x00,0x42,0x34,0xb2,0x44,0xa2,0xa0,0x9d,0x44,0x66,0x90,\r
+0x21,0x28,0x00,0x00,0x0c,0x00,0xe0,0xac,0xff,0x00,0xc6,0x30,0x71,0x14,0x00,0x0c,\r
+0x00,0x32,0x06,0x00,0x42,0xb0,0x02,0x3c,0x03,0x00,0x42,0x34,0x44,0x00,0x04,0x24,\r
+0x00,0x00,0x44,0xa0,0x02,0x80,0x03,0x3c,0x9a,0x44,0x62,0x90,0x00,0x00,0x00,0x00,\r
+0x0f,0x00,0x42,0x30,0x04,0x00,0x42,0x28,0x04,0x00,0x40,0x10,0x78,0x1b,0x29,0x26,\r
+0xf9,0x1f,0x00,0x0c,0x04,0x00,0x04,0x24,0x78,0x1b,0x29,0x26,0x14,0x0b,0x27,0x95,\r
+0x00,0x00,0x00,0x00,0x24,0x28,0x07,0x02,0x20,0x00,0xa2,0x30,0x09,0x00,0x40,0x10,\r
+0x80,0x00,0xa2,0x30,0x16,0x0b,0x22,0x95,0x25,0xb0,0x03,0x3c,0x20,0x00,0x04,0x24,\r
+0x20,0x00,0x42,0x38,0xc0,0x03,0x63,0x34,0x00,0x00,0x64,0xac,0x16,0x0b,0x22,0xa5,\r
+0x80,0x00,0xa2,0x30,0x17,0x00,0x40,0x10,0x24,0x10,0x07,0x02,0x02,0x80,0x08,0x3c,\r
+0x44,0x44,0x04,0x8d,0x16,0x0b,0x26,0x95,0x25,0xb0,0x03,0x3c,0x10,0x00,0x02,0x3c,\r
+0x7f,0xff,0x05,0x24,0x24,0x28,0xe5,0x00,0x25,0x20,0x82,0x00,0xb0,0x03,0x67,0x34,\r
+0x80,0x00,0x02,0x24,0xc0,0x03,0x63,0x34,0x00,0x00,0x62,0xac,0x41,0xb0,0x02,0x3c,\r
+0x80,0x00,0xc6,0x38,0x08,0x00,0x42,0x34,0x00,0x00,0xe4,0xac,0x16,0x0b,0x26,0xa5,\r
+0x44,0x44,0x04,0xad,0x21,0x38,0xa0,0x00,0x00,0x00,0x45,0xa4,0x14,0x0b,0x25,0xa5,\r
+0x24,0x10,0x07,0x02,0x00,0x30,0x42,0x30,0x07,0x00,0x40,0x10,0x02,0x80,0x02,0x3c,\r
+0x16,0x0b,0x22,0x95,0x00,0x00,0x00,0x00,0x00,0x10,0x42,0x38,0x00,0x20,0x42,0x34,\r
+0x16,0x0b,0x22,0xa5,0x02,0x80,0x02,0x3c,0x52,0x43,0x43,0x90,0x01,0x00,0x02,0x24,\r
+0x0f,0x00,0x63,0x30,0x0f,0x00,0x62,0x10,0x00,0x00,0x00,0x00,0x18,0x00,0xbf,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,\r
+0x12,0x26,0x00,0x08,0x16,0x0b,0x46,0xa5,0xe8,0x0a,0x42,0x91,0xba,0x44,0xa0,0xa0,\r
+0x01,0x00,0x42,0x30,0x99,0xff,0x40,0x14,0x01,0x00,0x06,0x24,0x62,0x26,0x00,0x08,\r
+0x0c,0x00,0xe0,0xac,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x79,0x22,0x00,0x08,0x20,0x00,0xbd,0x27,0x02,0x80,0x04,0x3c,0xb5,0x44,0x82,0x90,\r
+0x00,0x00,0x00,0x00,0xff,0xff,0x42,0x24,0xb5,0x44,0x82,0xa0,0xb5,0x44,0x83,0x90,\r
+0x00,0x00,0x00,0x00,0x07,0x00,0x60,0x10,0x02,0x80,0x02,0x3c,0x9e,0x44,0x43,0x90,\r
+0x00,0x00,0x00,0x00,0x03,0x00,0x60,0x14,0x00,0x00,0x00,0x00,0x12,0x00,0xc0,0x10,\r
+0x02,0x80,0x02,0x3c,0xb5,0x44,0x82,0x90,0x00,0x00,0x00,0x00,0x05,0x00,0x40,0x14,\r
+0x0c,0x00,0xe0,0xac,0x02,0x80,0x02,0x3c,0xb4,0x44,0x43,0x90,0x00,0x00,0x00,0x00,\r
+0xb5,0x44,0x83,0xa0,0x02,0x80,0x05,0x3c,0xb2,0x44,0xa2,0x90,0x02,0x80,0x03,0x3c,\r
+0x02,0x00,0x04,0x24,0x10,0x00,0x42,0x34,0xb2,0x44,0xa2,0xa0,0x9d,0x44,0x66,0x90,\r
+0x52,0x26,0x00,0x08,0x21,0x28,0x00,0x00,0x02,0x80,0x04,0x3c,0xac,0x44,0x83,0x8c,\r
+0xa4,0x44,0x45,0x8c,0xe4,0x02,0x86,0x35,0x21,0x18,0x65,0x00,0xac,0x44,0x83,0xac,\r
+0xac,0x44,0x82,0x8c,0x02,0x80,0x03,0x3c,0x00,0x00,0xc2,0xac,0xa0,0x44,0x62,0x94,\r
+0x00,0x00,0x00,0x00,0xff,0xff,0x42,0x30,0x40,0x10,0x02,0x00,0xf6,0xff,0x42,0x24,\r
+0x62,0x26,0x00,0x08,0x0c,0x00,0xe2,0xac,0xf8,0xff,0xbd,0x27,0x04,0x00,0xb1,0xaf,\r
+0x00,0x00,0xb0,0xaf,0x00,0x40,0x09,0x40,0x00,0x68,0x0a,0x40,0x00,0x70,0x02,0x40,\r
+0x00,0x60,0x0b,0x40,0x25,0xb0,0x05,0x3c,0x18,0x03,0xa7,0x34,0x00,0x00,0xe6,0x8c,\r
+0x01,0x80,0x02,0x3c,0x1c,0x03,0xa3,0x34,0x68,0x9b,0x42,0x24,0x00,0x00,0x66,0xac,\r
+0x00,0x00,0xe2,0xac,0x80,0x00,0x83,0x8c,0x7c,0x02,0xa2,0x34,0x80,0x02,0xa6,0x34,\r
+0x84,0x02,0xa7,0x34,0x88,0x02,0xa8,0x34,0x00,0x00,0x43,0xac,0x00,0x00,0xc9,0xac,\r
+0x00,0x00,0xea,0xac,0x00,0x00,0x0b,0xad,0x74,0x00,0x83,0x8c,0x8c,0x02,0xa2,0x34,\r
+0x90,0x02,0xa7,0x34,0x00,0x00,0x43,0xac,0x08,0x00,0x86,0x8c,0x94,0x02,0xa8,0x34,\r
+0x98,0x02,0xa9,0x34,0x00,0x00,0xe6,0xac,0x0c,0x00,0x82,0x8c,0x9c,0x02,0xa6,0x34,\r
+0xa0,0x02,0xa7,0x34,0x00,0x00,0x02,0xad,0x10,0x00,0x83,0x8c,0xa4,0x02,0xa8,0x34,\r
+0xa8,0x02,0xaa,0x34,0x00,0x00,0x23,0xad,0x14,0x00,0x82,0x8c,0xac,0x02,0xa9,0x34,\r
+0xb0,0x02,0xab,0x34,0x00,0x00,0xc2,0xac,0x18,0x00,0x83,0x8c,0xb4,0x02,0xa6,0x34,\r
+0xb8,0x02,0xac,0x34,0x00,0x00,0xe3,0xac,0x1c,0x00,0x82,0x8c,0xbc,0x02,0xa7,0x34,\r
+0xc0,0x02,0xad,0x34,0x00,0x00,0x02,0xad,0x20,0x00,0x83,0x8c,0xc4,0x02,0xa8,0x34,\r
+0xc8,0x02,0xae,0x34,0x00,0x00,0x43,0xad,0x24,0x00,0x82,0x8c,0xcc,0x02,0xaa,0x34,\r
+0xd0,0x02,0xaf,0x34,0x00,0x00,0x22,0xad,0x28,0x00,0x83,0x8c,0xd4,0x02,0xa9,0x34,\r
+0xd8,0x02,0xb0,0x34,0x00,0x00,0x63,0xad,0x2c,0x00,0x82,0x8c,0x70,0x02,0xab,0x34,\r
+0x74,0x02,0xb1,0x34,0x00,0x00,0xc2,0xac,0x30,0x00,0x83,0x8c,0x78,0x02,0xa5,0x34,\r
+0x00,0x00,0x83,0xad,0x34,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0xe2,0xac,\r
+0x38,0x00,0x83,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0xa3,0xad,0x3c,0x00,0x82,0x8c,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x02,0xad,0x40,0x00,0x83,0x8c,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0xc3,0xad,0x44,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0xad,\r
+0x48,0x00,0x83,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0xe3,0xad,0x4c,0x00,0x82,0x8c,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x22,0xad,0x50,0x00,0x83,0x8c,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x03,0xae,0x54,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0xad,\r
+0x58,0x00,0x83,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0xae,0x5c,0x00,0x82,0x8c,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0xac,0x42,0x27,0x00,0x08,0x00,0x00,0x00,0x00,\r
+0x01,0x80,0x1b,0x3c,0x10,0x9d,0x7b,0x27,0x25,0xb0,0x1a,0x3c,0x18,0x03,0x5a,0x27,\r
+0x00,0x00,0x5b,0xaf,0x21,0xd8,0xa0,0x03,0x82,0xda,0x1b,0x00,0x80,0xda,0x1b,0x00,\r
+0x08,0x00,0x7b,0x27,0x04,0x00,0x61,0xaf,0x08,0x00,0x62,0xaf,0x0c,0x00,0x63,0xaf,\r
+0x10,0x00,0x64,0xaf,0x14,0x00,0x65,0xaf,0x18,0x00,0x66,0xaf,0x1c,0x00,0x67,0xaf,\r
+0x20,0x00,0x68,0xaf,0x24,0x00,0x69,0xaf,0x28,0x00,0x6a,0xaf,0x2c,0x00,0x6b,0xaf,\r
+0x30,0x00,0x6c,0xaf,0x34,0x00,0x6d,0xaf,0x38,0x00,0x6e,0xaf,0x3c,0x00,0x6f,0xaf,\r
+0x12,0x40,0x00,0x00,0x10,0x48,0x00,0x00,0x00,0x70,0x0a,0x40,0x40,0x00,0x70,0xaf,\r
+0x44,0x00,0x71,0xaf,0x48,0x00,0x72,0xaf,0x4c,0x00,0x73,0xaf,0x50,0x00,0x74,0xaf,\r
+0x54,0x00,0x75,0xaf,0x58,0x00,0x76,0xaf,0x5c,0x00,0x77,0xaf,0x60,0x00,0x78,0xaf,\r
+0x64,0x00,0x79,0xaf,0x68,0x00,0x7c,0xaf,0x6c,0x00,0x7d,0xaf,0x70,0x00,0x7e,0xaf,\r
+0x74,0x00,0x7f,0xaf,0x78,0x00,0x68,0xaf,0x7c,0x00,0x69,0xaf,0x80,0x00,0x6a,0xaf,\r
+0x00,0x68,0x1a,0x40,0x7f,0x00,0x5b,0x33,0x30,0x00,0x60,0x13,0x00,0x00,0x00,0x00,\r
+0x25,0xb0,0x1b,0x3c,0x30,0x03,0x7b,0x37,0x00,0x00,0x00,0x00,0x00,0x00,0x7a,0xaf,\r
+0x00,0x00,0x00,0x00,0x21,0xd8,0xa0,0x03,0x82,0xda,0x1b,0x00,0x80,0xda,0x1b,0x00,\r
+0x08,0x00,0x7b,0x27,0x04,0x00,0x61,0xaf,0x08,0x00,0x62,0xaf,0x0c,0x00,0x63,0xaf,\r
+0x10,0x00,0x64,0xaf,0x14,0x00,0x65,0xaf,0x18,0x00,0x66,0xaf,0x1c,0x00,0x67,0xaf,\r
+0x20,0x00,0x68,0xaf,0x24,0x00,0x69,0xaf,0x28,0x00,0x6a,0xaf,0x2c,0x00,0x6b,0xaf,\r
+0x30,0x00,0x6c,0xaf,0x34,0x00,0x6d,0xaf,0x38,0x00,0x6e,0xaf,0x3c,0x00,0x6f,0xaf,\r
+0x12,0x40,0x00,0x00,0x10,0x48,0x00,0x00,0x00,0x70,0x0a,0x40,0x40,0x00,0x70,0xaf,\r
+0x44,0x00,0x71,0xaf,0x48,0x00,0x72,0xaf,0x4c,0x00,0x73,0xaf,0x50,0x00,0x74,0xaf,\r
+0x54,0x00,0x75,0xaf,0x58,0x00,0x76,0xaf,0x5c,0x00,0x77,0xaf,0x60,0x00,0x78,0xaf,\r
+0x64,0x00,0x79,0xaf,0x68,0x00,0x7c,0xaf,0x6c,0x00,0x7d,0xaf,0x70,0x00,0x7e,0xaf,\r
+0x74,0x00,0x7f,0xaf,0x78,0x00,0x68,0xaf,0x7c,0x00,0x69,0xaf,0x80,0x00,0x6a,0xaf,\r
+0xda,0x26,0x00,0x08,0x21,0x20,0x60,0x03,0x00,0x00,0x00,0x00,0x25,0xb0,0x08,0x3c,\r
+0x20,0x03,0x08,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x1a,0xad,0x00,0x04,0x5b,0x33,\r
+0x0a,0x00,0x60,0x13,0x00,0x00,0x00,0x00,0x01,0x80,0x08,0x3c,0x90,0x8a,0x08,0x25,\r
+0x00,0x00,0x00,0x00,0x25,0xb0,0x1b,0x3c,0x24,0x03,0x7b,0x37,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x68,0xaf,0x09,0xf8,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x08,0x5b,0x33,\r
+0x25,0xb0,0x08,0x3c,0x28,0x03,0x08,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x1b,0xad,\r
+0x06,0x00,0x60,0x13,0x00,0x00,0x00,0x00,0x01,0x80,0x08,0x3c,0xa4,0x97,0x08,0x25,\r
+0x00,0x00,0x00,0x00,0x09,0xf8,0x00,0x01,0x00,0x00,0x00,0x00,0x02,0x80,0x1a,0x3c,\r
+0x44,0x44,0x5a,0x27,0x04,0x00,0x5b,0x97,0x25,0xb0,0x08,0x3c,0x30,0x03,0x08,0x35,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x1b,0xad,0x18,0x00,0x60,0x13,0x00,0x00,0x00,0x00,\r
+0x08,0xe8,0x9b,0x27,0x00,0x00,0x00,0x00,0x04,0x00,0x61,0x8f,0xfc,0x03,0x70,0x7b,\r
+0x7c,0x00,0x62,0x7b,0xbc,0x00,0x64,0x7b,0xfc,0x00,0x66,0x7b,0x3c,0x01,0x68,0x7b,\r
+0x13,0x00,0x00,0x02,0x11,0x00,0x20,0x02,0x7c,0x01,0x6a,0x7b,0xbc,0x01,0x6c,0x7b,\r
+0xfc,0x01,0x6e,0x7b,0x3c,0x02,0x70,0x7b,0x7c,0x02,0x72,0x7b,0xbc,0x02,0x74,0x7b,\r
+0xfc,0x02,0x76,0x7b,0x3c,0x03,0x78,0x7b,0x7c,0x03,0x7c,0x7b,0xbc,0x03,0x7e,0x7b,\r
+0x80,0x00,0x7b,0x8f,0x2b,0x28,0x00,0x08,0x00,0x00,0x00,0x00,0x21,0xd8,0xa0,0x03,\r
+0x82,0xda,0x1b,0x00,0x80,0xda,0x1b,0x00,0x08,0x00,0x7b,0x27,0x08,0x00,0x5b,0xaf,\r
+0xfc,0xeb,0x9d,0x27,0x00,0x00,0x4a,0x8f,0x00,0x00,0x00,0x00,0x21,0x00,0x40,0x11,\r
+0x00,0x00,0x00,0x00,0x02,0x80,0x08,0x3c,0xa4,0x43,0x08,0x25,0x21,0x48,0x00,0x00,\r
+0x21,0x58,0x00,0x00,0x01,0x00,0x6b,0x25,0x1a,0x00,0x40,0x11,0x24,0x70,0x4b,0x01,\r
+0x14,0x00,0xc0,0x11,0x01,0x00,0x04,0x24,0x00,0x00,0x00,0x00,0x04,0x00,0x44,0xa3,\r
+0x26,0x50,0x4b,0x01,0x00,0x00,0x4a,0xaf,0x80,0x80,0x09,0x00,0x21,0x80,0x08,0x02,\r
+0x00,0x00,0x10,0x8e,0x00,0x00,0x00,0x00,0x09,0xf8,0x00,0x02,0x00,0x00,0x00,0x00,\r
+0x01,0x80,0x1b,0x3c,0xd8,0x9f,0x7b,0x27,0x25,0xb0,0x1a,0x3c,0x18,0x03,0x5a,0x27,\r
+0x00,0x00,0x5b,0xaf,0x02,0x80,0x1a,0x3c,0x44,0x44,0x5a,0x27,0xe1,0xff,0x00,0x10,\r
+0x00,0x00,0x00,0x00,0x01,0x00,0x29,0x25,0x40,0x58,0x0b,0x00,0xee,0x27,0x00,0x08,\r
+0x00,0x00,0x00,0x00,0x02,0x80,0x1b,0x3c,0x44,0x44,0x7b,0x27,0x21,0x60,0x00,0x00,\r
+0x04,0x00,0x6c,0xa7,0x08,0x00,0x7a,0x8f,0x00,0x00,0x00,0x00,0xf8,0xff,0x5a,0x27,\r
+0x00,0x00,0x5a,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0x5a,0x27,0x84,0x00,0x44,0x8f,\r
+0x00,0x00,0x00,0x00,0xf9,0xff,0x80,0x10,0x00,0x00,0x00,0x00,0x04,0x00,0x41,0x8f,\r
+0xfc,0x03,0x50,0x7b,0x7c,0x00,0x42,0x7b,0xbc,0x00,0x44,0x7b,0xfc,0x00,0x46,0x7b,\r
+0x3c,0x01,0x48,0x7b,0x13,0x00,0x00,0x02,0x11,0x00,0x20,0x02,0x7c,0x01,0x4a,0x7b,\r
+0xbc,0x01,0x4c,0x7b,0xfc,0x01,0x4e,0x7b,0x3c,0x02,0x50,0x7b,0x7c,0x02,0x52,0x7b,\r
+0xbc,0x02,0x54,0x7b,0xfc,0x02,0x56,0x7b,0x3c,0x03,0x58,0x7b,0x7c,0x03,0x5c,0x7b,\r
+0xbc,0x03,0x5e,0x7b,0x80,0x00,0x5b,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0x60,0x03,\r
+0x10,0x00,0x00,0x42,0x00,0x60,0x05,0x40,0x42,0x28,0x05,0x00,0x40,0x28,0x05,0x00,\r
+0x00,0x60,0x85,0x40,0x04,0x00,0x81,0xac,0x08,0x00,0x82,0xac,0x0c,0x00,0x83,0xac,\r
+0x20,0x00,0x88,0xac,0x24,0x00,0x89,0xac,0x28,0x00,0x8a,0xac,0x2c,0x00,0x8b,0xac,\r
+0x30,0x00,0x8c,0xac,0x34,0x00,0x8d,0xac,0x38,0x00,0x8e,0xac,0x3c,0x00,0x8f,0xac,\r
+0x12,0x40,0x00,0x00,0x10,0x48,0x00,0x00,0x40,0x00,0x90,0xac,0x44,0x00,0x91,0xac,\r
+0x48,0x00,0x92,0xac,0x4c,0x00,0x93,0xac,0x50,0x00,0x94,0xac,0x54,0x00,0x95,0xac,\r
+0x58,0x00,0x96,0xac,0x5c,0x00,0x97,0xac,0x60,0x00,0x98,0xac,0x64,0x00,0x99,0xac,\r
+0x68,0x00,0x9c,0xac,0x6c,0x00,0x9d,0xac,0x70,0x00,0x9e,0xac,0x74,0x00,0x9f,0xac,\r
+0x78,0x00,0x88,0xac,0x7c,0x00,0x89,0xac,0x80,0x00,0x9f,0xac,0xf8,0xff,0x84,0x24,\r
+0x00,0x00,0x84,0x8c,0x00,0x00,0x00,0x00,0x08,0x00,0x84,0x24,0x84,0x00,0x86,0x8c,\r
+0x00,0x00,0x00,0x00,0xf9,0xff,0xc0,0x10,0x00,0x00,0x00,0x00,0x21,0xd8,0x80,0x00,\r
+0x01,0x00,0xba,0x24,0x04,0x00,0x61,0x8f,0xfc,0x03,0x70,0x7b,0x7c,0x00,0x62,0x7b,\r
+0xbc,0x00,0x64,0x7b,0xfc,0x00,0x66,0x7b,0x3c,0x01,0x68,0x7b,0x13,0x00,0x00,0x02,\r
+0x11,0x00,0x20,0x02,0x7c,0x01,0x6a,0x7b,0xbc,0x01,0x6c,0x7b,0xfc,0x01,0x6e,0x7b,\r
+0x3c,0x02,0x70,0x7b,0x7c,0x02,0x72,0x7b,0xbc,0x02,0x74,0x7b,0xfc,0x02,0x76,0x7b,\r
+0x3c,0x03,0x78,0x7b,0x7c,0x03,0x7c,0x7b,0xbc,0x03,0x7e,0x7b,0x80,0x00,0x7b,0x8f,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0x60,0x03,0x00,0x60,0x9a,0x40,0x00,0x60,0x05,0x40,\r
+0x42,0x28,0x05,0x00,0x40,0x28,0x05,0x00,0x00,0x60,0x85,0x40,0x04,0x00,0x81,0xac,\r
+0x08,0x00,0x82,0xac,0x0c,0x00,0x83,0xac,0x20,0x00,0x88,0xac,0x24,0x00,0x89,0xac,\r
+0x28,0x00,0x8a,0xac,0x2c,0x00,0x8b,0xac,0x30,0x00,0x8c,0xac,0x34,0x00,0x8d,0xac,\r
+0x38,0x00,0x8e,0xac,0x3c,0x00,0x8f,0xac,0x12,0x40,0x00,0x00,0x10,0x48,0x00,0x00,\r
+0x40,0x00,0x90,0xac,0x44,0x00,0x91,0xac,0x48,0x00,0x92,0xac,0x4c,0x00,0x93,0xac,\r
+0x50,0x00,0x94,0xac,0x54,0x00,0x94,0xac,0x58,0x00,0x96,0xac,0x5c,0x00,0x96,0xac,\r
+0x60,0x00,0x98,0xac,0x64,0x00,0x99,0xac,0x68,0x00,0x9c,0xac,0x6c,0x00,0x9d,0xac,\r
+0x70,0x00,0x9e,0xac,0x78,0x00,0x88,0xac,0x7c,0x00,0x89,0xac,0x80,0x00,0x9f,0xac,\r
+0x84,0x00,0x80,0xac,0xf8,0xff,0x84,0x24,0x00,0x00,0x84,0x8c,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0x84,0x24,0x84,0x00,0x86,0x8c,0xfa,0xff,0xc0,0x10,0x00,0x00,0x00,0x00,\r
+0x21,0xd8,0x80,0x00,0x01,0x00,0xba,0x24,0x04,0x00,0x61,0x8f,0xfc,0x03,0x70,0x7b,\r
+0x7c,0x00,0x62,0x7b,0xbc,0x00,0x64,0x7b,0xfc,0x00,0x66,0x7b,0x3c,0x01,0x68,0x7b,\r
+0x13,0x00,0x00,0x02,0x11,0x00,0x20,0x02,0x7c,0x01,0x6a,0x7b,0xbc,0x01,0x6c,0x7b,\r
+0xfc,0x01,0x6e,0x7b,0x3c,0x02,0x70,0x7b,0x7c,0x02,0x72,0x7b,0xbc,0x02,0x74,0x7b,\r
+0xfc,0x02,0x76,0x7b,0x3c,0x03,0x78,0x7b,0x7c,0x03,0x7c,0x7b,0xbc,0x03,0x7e,0x7b,\r
+0x80,0x00,0x7b,0x8f,0x08,0x00,0x60,0x03,0x00,0x60,0x9a,0x40,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0xd7,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x1b,0x3c,0x00,0x00,0x7b,0x27,\r
+0x25,0xb0,0x1a,0x3c,0x18,0x03,0x5a,0x27,0x00,0x00,0x5b,0xaf,0x00,0x00,0x05,0x24,\r
+0x03,0x00,0xa4,0x24,0x00,0xa0,0x80,0x40,0x00,0xa0,0x84,0x40,0x01,0x80,0x04,0x3c,\r
+0x98,0x03,0x84,0x24,0x08,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x01,0x80,0x1b,0x3c,0x98,0x03,0x7b,0x27,0x25,0xb0,0x1a,0x3c,0x18,0x03,0x5a,0x27,\r
+0x00,0x00,0x5b,0xaf,0x02,0x80,0x1a,0x3c,0x00,0x00,0x5a,0x27,0xfc,0x03,0x5d,0x27,\r
+0x02,0x80,0x1c,0x3c,0x00,0x18,0x9c,0x27,0x00,0xf0,0x08,0x3c,0x00,0x0c,0x08,0x35,\r
+0x00,0x60,0x88,0x40,0x02,0x80,0x04,0x3c,0x00,0x00,0x84,0x24,0xff,0x7f,0x05,0x3c,\r
+0xff,0xff,0xa5,0x34,0x24,0x20,0x85,0x00,0x00,0x20,0x84,0x4c,0xff,0xff,0x05,0x34,\r
+0x21,0x28,0xa4,0x00,0x00,0x28,0x85,0x4c,0x02,0x80,0x08,0x3c,0x00,0x00,0x08,0x25,\r
+0x00,0x00,0x00,0xad,0x03,0x80,0x09,0x3c,0x7c,0xc3,0x29,0x25,0x04,0x00,0x08,0x25,\r
+0xfe,0xff,0x09,0x15,0x00,0x00,0x00,0xad,0x00,0x80,0x04,0x3c,0x00,0x00,0x84,0x24,\r
+0xff,0x7f,0x05,0x3c,0xff,0xff,0xa5,0x34,0x24,0x20,0x85,0x00,0x00,0x00,0x84,0x4c,\r
+0xff,0xff,0x06,0x34,0x21,0x30,0xc4,0x00,0x24,0x30,0xc5,0x00,0x00,0x08,0x86,0x4c,\r
+0x00,0xa0,0x04,0x40,0x10,0x00,0x84,0x34,0x00,0xa0,0x84,0x40,0x01,0x80,0x1b,0x3c,\r
+0x44,0x04,0x7b,0x27,0x25,0xb0,0x1a,0x3c,0x18,0x03,0x5a,0x27,0x00,0x00,0x5b,0xaf,\r
+0x00,0x00,0x00,0x00,0x25,0xb0,0x04,0x3c,0x44,0x00,0x84,0x34,0x00,0x00,0x85,0x84,\r
+0x20,0x00,0x06,0x24,0x25,0x28,0xa6,0x00,0x00,0x00,0x85,0xa4,0x01,0x80,0x1b,0x3c,\r
+0x74,0x04,0x7b,0x27,0x25,0xb0,0x1a,0x3c,0x18,0x03,0x5a,0x27,0x00,0x00,0x5b,0xaf,\r
+0x25,0xb0,0x04,0x3c,0x44,0x00,0x84,0x34,0x00,0x00,0x85,0x8c,0x00,0x00,0x00,0x00,\r
+0x10,0x00,0xa5,0x30,0xfc,0xff,0xa0,0x10,0x00,0x00,0x00,0x00,0xff,0x1f,0x07,0x3c,\r
+0xff,0xff,0xe7,0x34,0x02,0x80,0x05,0x3c,0x50,0x43,0xa5,0x24,0xff,0xff,0xa5,0x30,\r
+0x40,0xb0,0x04,0x3c,0x25,0x28,0xa4,0x00,0x24,0x28,0xa7,0x00,0x21,0x30,0x00,0x00,\r
+0x43,0xb0,0x02,0x3c,0x00,0x80,0x04,0x3c,0x40,0x00,0x84,0x34,0x00,0x00,0x45,0xac,\r
+0x04,0x00,0x46,0xac,0x08,0x00,0x44,0xac,0x7e,0x5e,0x00,0x08,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x09,0x00,0x02,0x24,0xff,0xff,0x42,0x24,\r
+0xff,0xff,0x41,0x04,0xff,0xff,0x42,0x24,0x08,0x00,0xe0,0x03,0x01,0x00,0x42,0x24,\r
+0x00,0x60,0x02,0x40,0x01,0x00,0x41,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x82,0xac,0x00,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,\r
+0x21,0x18,0x40,0x00,0x00,0x60,0x83,0x40,0x08,0x00,0xe0,0x03,0x00,0x00,0x82,0xac,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,\r
+0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,\r
+0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0xe0,0xff,0xbd,0x27,0x18,0x00,0xb2,0xaf,0x1c,0x00,0xbf,0xaf,\r
+0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x21,0x30,0x80,0x00,0x21,0x90,0x00,0x00,\r
+0x00,0x60,0x11,0x40,0x01,0x00,0x21,0x36,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x0d,0x00,0x83,0x90,0x00,0x00,0x00,0x00,0x02,0x00,0x60,0x14,0x02,0x80,0x02,0x3c,\r
+0x01,0x00,0x03,0x24,0x9c,0x44,0x43,0xa0,0x0c,0x00,0xc2,0x90,0x02,0x80,0x05,0x3c,\r
+0xb1,0x44,0xa2,0xa0,0x00,0x00,0xc4,0x90,0x05,0x00,0x02,0x24,0xff,0x00,0x83,0x30,\r
+0x4b,0x00,0x62,0x10,0x00,0x00,0x00,0x00,0x03,0x00,0x02,0x24,0x3b,0x00,0x62,0x10,\r
+0xff,0x00,0x84,0x30,0x09,0x00,0x82,0x2c,0x2f,0x00,0x40,0x10,0x02,0x80,0x10,0x3c,\r
+0x98,0x44,0x02,0x92,0x00,0x00,0x00,0x00,0xff,0x00,0x42,0x30,0x2b,0x00,0x82,0x10,\r
+0x00,0x00,0x00,0x00,0xad,0x1e,0x00,0x0c,0x00,0x00,0x00,0x00,0x98,0x44,0x02,0x92,\r
+0x00,0x00,0x00,0x00,0x3e,0x00,0x40,0x10,0x02,0x80,0x03,0x3c,0x60,0x26,0x62,0x90,\r
+0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30,0x5a,0x00,0x40,0x10,0x02,0x80,0x02,0x3c,\r
+0x02,0x80,0x03,0x3c,0xb9,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x0f,0x00,0x40,0x14,\r
+0x25,0xb0,0x02,0x3c,0xb9,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24,\r
+0xb9,0x44,0x62,0xa0,0x02,0x80,0x03,0x3c,0x9a,0x44,0x62,0x90,0x00,0x00,0x00,0x00,\r
+0x0f,0x00,0x42,0x30,0x04,0x00,0x42,0x28,0x04,0x00,0x40,0x10,0x25,0xb0,0x02,0x3c,\r
+0xf9,0x1f,0x00,0x0c,0x04,0x00,0x04,0x24,0x25,0xb0,0x02,0x3c,0x00,0x01,0x03,0x24,\r
+0x16,0x01,0x42,0x34,0x00,0x00,0x43,0xa4,0x00,0x60,0x91,0x40,0x21,0x10,0x40,0x02,\r
+0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x04,0x00,0x12,0x24,0x00,0x60,0x91,0x40,\r
+0x21,0x10,0x40,0x02,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x0b,0x00,0xc2,0x90,\r
+0x00,0x00,0x00,0x00,0x03,0x00,0x40,0x14,0x02,0x80,0x03,0x3c,0x02,0x80,0x03,0x3c,\r
+0x01,0x00,0x02,0x24,0xb4,0x44,0x62,0xa0,0xb4,0x44,0x63,0x90,0x02,0x80,0x02,0x3c,\r
+0xb5,0x44,0x43,0xa0,0x00,0x00,0xc4,0x90,0xb7,0x41,0x00,0x08,0xff,0x00,0x84,0x30,\r
+0xb1,0x44,0xa0,0xa0,0x00,0x00,0xc4,0x90,0xb4,0x41,0x00,0x08,0xff,0x00,0x83,0x30,\r
+0x42,0xb0,0x05,0x3c,0x00,0x00,0xa3,0x90,0xef,0xff,0x02,0x24,0x03,0x00,0xa6,0x34,\r
+0x24,0x18,0x62,0x00,0x40,0x00,0x02,0x24,0x00,0x00,0xa3,0xa0,0x0c,0x00,0x04,0x24,\r
+0x00,0x00,0xc2,0xa0,0x02,0x80,0x03,0x3c,0xf9,0x1f,0x00,0x0c,0x88,0x44,0x60,0xac,\r
+0x02,0x80,0x03,0x3c,0x56,0x43,0x62,0x90,0x00,0x00,0x00,0x00,0x02,0x00,0x42,0x30,\r
+0x17,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,0x78,0x1b,0x45,0x24,\r
+0x82,0x0b,0xa3,0x90,0x25,0xb0,0x02,0x3c,0x16,0x01,0x42,0x34,0x00,0x00,0x40,0xa4,\r
+0xce,0xff,0x60,0x10,0x00,0x00,0x00,0x00,0x98,0x26,0xa4,0x94,0x82,0x0b,0xa0,0xa0,\r
+0x00,0xc0,0x84,0x24,0x2c,0x22,0x00,0x0c,0xff,0xff,0x84,0x30,0xe9,0x41,0x00,0x08,\r
+0x00,0x00,0x00,0x00,0xb9,0x44,0x40,0xa0,0x25,0xb0,0x02,0x3c,0x00,0x01,0x03,0x24,\r
+0x16,0x01,0x42,0x34,0x00,0x00,0x43,0xa4,0xe0,0x41,0x00,0x08,0x00,0x00,0x00,0x00,\r
+0x55,0x1f,0x00,0x0c,0x01,0x00,0x04,0x24,0x15,0x42,0x00,0x08,0x02,0x80,0x02,0x3c,\r
+0xe0,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,0x1c,0x00,0xbf,0xaf,0x18,0x00,0xb2,0xaf,\r
+0x14,0x00,0xb1,0xaf,0x21,0x80,0x80,0x00,0x00,0x60,0x11,0x40,0x01,0x00,0x21,0x36,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x00,0x00,0x02,0x92,0x02,0x80,0x04,0x3c,\r
+0x25,0xb0,0x05,0x3c,0x02,0x80,0x07,0x3c,0x98,0x26,0x84,0x24,0x50,0x00,0xa5,0x34,\r
+0x06,0x00,0x06,0x24,0x13,0x00,0x40,0x14,0x78,0x1b,0xe3,0x24,0xe8,0x0a,0x62,0x90,\r
+0x78,0x1b,0xf2,0x24,0x02,0x80,0x04,0x3c,0xfe,0x00,0x42,0x30,0xe8,0x0a,0x62,0xa0,\r
+0xe8,0x0a,0x42,0x92,0x18,0x42,0x84,0x24,0x01,0x00,0x42,0x30,0x18,0x00,0x40,0x14,\r
+0x02,0x00,0x05,0x26,0x00,0x60,0x91,0x40,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x20,0x00,0xbd,0x27,0x46,0x46,0x00,0x0c,0x00,0x00,0x00,0x00,0x02,0x80,0x07,0x3c,\r
+0x78,0x1b,0xe3,0x24,0xe8,0x0a,0x62,0x90,0x78,0x1b,0xf2,0x24,0x02,0x80,0x04,0x3c,\r
+0x01,0x00,0x42,0x34,0xe8,0x0a,0x62,0xa0,0xe8,0x0a,0x42,0x92,0x18,0x42,0x84,0x24,\r
+0x02,0x00,0x05,0x26,0x01,0x00,0x42,0x30,0xea,0xff,0x40,0x10,0x06,0x00,0x06,0x24,\r
+0x01,0x00,0x03,0x92,0x02,0x80,0x02,0x3c,0xb3,0x44,0x43,0xa0,0x46,0x46,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0x04,0x96,0x02,0x80,0x03,0x3c,0xa0,0x44,0x64,0xa4,\r
+0xa0,0x44,0x62,0x94,0x02,0x80,0x03,0x3c,0xff,0xff,0x42,0x30,0x80,0x12,0x02,0x00,\r
+0xa4,0x44,0x62,0xac,0x0a,0x00,0x04,0x96,0x14,0x00,0x03,0x24,0x02,0x80,0x02,0x3c,\r
+0xb9,0x44,0x43,0xa0,0x98,0x26,0x44,0xa6,0x00,0x60,0x91,0x40,0x1c,0x00,0xbf,0x8f,\r
+0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,\r
+0x25,0xb0,0x02,0x3c,0x21,0x20,0x82,0x00,0x00,0x00,0x85,0xac,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,\r
+0x25,0xb0,0x06,0x3c,0x78,0x1b,0x45,0x24,0x01,0x80,0x02,0x3c,0x18,0x03,0xc3,0x34,\r
+0x54,0x0a,0x42,0x24,0x20,0x08,0xc8,0x34,0x21,0x38,0x80,0x00,0x60,0x08,0x09,0x24,\r
+0x00,0x00,0x62,0xac,0x07,0x00,0x80,0x10,0x70,0x08,0x02,0x24,0x01,0x00,0x02,0x24,\r
+0x28,0x08,0xc3,0x34,0x2a,0x00,0x82,0x10,0x64,0x08,0x06,0x24,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x8d,0xe0,0x08,0x03,0x24,0x8c,0x0b,0xa2,0xac,\r
+0x40,0x08,0x02,0x24,0x90,0x0b,0xa3,0xac,0x9c,0x0b,0xa2,0xac,0x78,0x08,0x03,0x24,\r
+0x0c,0x08,0x02,0x24,0xa0,0x0b,0xa3,0xac,0xa4,0x0b,0xa2,0xac,0x10,0x08,0x03,0x24,\r
+0x20,0x08,0x02,0x24,0xa8,0x0b,0xa3,0xac,0xac,0x0b,0xa2,0xac,0x24,0x08,0x03,0x24,\r
+0x58,0x08,0x02,0x24,0xb0,0x0b,0xa3,0xac,0xb4,0x0b,0xa2,0xac,0x50,0x0c,0x03,0x24,\r
+0x54,0x0c,0x02,0x24,0xb8,0x0b,0xa3,0xac,0xbc,0x0b,0xa2,0xac,0x14,0x0c,0x03,0x24,\r
+0x10,0x0c,0x02,0x24,0xc0,0x0b,0xa3,0xac,0xc4,0x0b,0xa2,0xac,0x80,0x0c,0x03,0x24,\r
+0x84,0x0c,0x02,0x24,0x00,0x01,0x84,0x30,0xcc,0x0b,0xa2,0xac,0x98,0x0b,0xa9,0xac,\r
+0xc8,0x0b,0xa3,0xac,0x89,0x0b,0xa0,0xa0,0x94,0x0b,0xa9,0xac,0x02,0x00,0x80,0x10,\r
+0xa0,0x08,0x02,0x24,0xb8,0x08,0x02,0x24,0x08,0x00,0xe0,0x03,0xd0,0x0b,0xa2,0xac,\r
+0x70,0x08,0x02,0x24,0x00,0x00,0x64,0x8c,0xe0,0x08,0x03,0x24,0x8c,0x0b,0xa2,0xac,\r
+0x44,0x08,0x02,0x24,0x90,0x0b,0xa3,0xac,0x9c,0x0b,0xa2,0xac,0x78,0x08,0x03,0x24,\r
+0x0c,0x08,0x02,0x24,0xa0,0x0b,0xa3,0xac,0xa4,0x0b,0xa2,0xac,0x14,0x08,0x03,0x24,\r
+0x28,0x08,0x02,0x24,0xa8,0x0b,0xa3,0xac,0xac,0x0b,0xa2,0xac,0x2c,0x08,0x03,0x24,\r
+0x58,0x08,0x02,0x24,0xb0,0x0b,0xa3,0xac,0xb4,0x0b,0xa2,0xac,0x58,0x0c,0x03,0x24,\r
+0x5c,0x0c,0x02,0x24,0xb8,0x0b,0xa3,0xac,0xbc,0x0b,0xa2,0xac,0x1c,0x0c,0x03,0x24,\r
+0x18,0x0c,0x02,0x24,0xc0,0x0b,0xa3,0xac,0xc4,0x0b,0xa2,0xac,0x88,0x0c,0x03,0x24,\r
+0x8c,0x0c,0x02,0x24,0x00,0x01,0x84,0x30,0xcc,0x0b,0xa2,0xac,0x89,0x0b,0xa7,0xa0,\r
+0x98,0x0b,0xa6,0xac,0xc8,0x0b,0xa3,0xac,0x94,0x0b,0xa6,0xac,0xda,0xff,0x80,0x10,\r
+0xa4,0x08,0x02,0x24,0xbc,0x08,0x02,0x24,0x08,0x00,0xe0,0x03,0xd0,0x0b,0xa2,0xac,\r
+0xfb,0x42,0x00,0x08,0x21,0x18,0x00,0x00,0x20,0x00,0x62,0x2c,0x06,0x00,0x40,0x10,\r
+0x00,0x00,0x00,0x00,0x06,0x10,0x64,0x00,0x01,0x00,0x42,0x30,0xfa,0xff,0x40,0x10,\r
+0x01,0x00,0x63,0x24,0xff,0xff,0x63,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,\r
+0xd8,0xff,0xbd,0x27,0x14,0x00,0xb1,0xaf,0x25,0xb0,0x02,0x3c,0x21,0x88,0xa0,0x00,\r
+0xff,0xff,0x03,0x24,0x1c,0x00,0xb3,0xaf,0x18,0x00,0xb2,0xaf,0x10,0x00,0xb0,0xaf,\r
+0x20,0x00,0xbf,0xaf,0x21,0x98,0xc0,0x00,0x21,0x28,0xc0,0x00,0x21,0x90,0x80,0x00,\r
+0x09,0x00,0x23,0x12,0x21,0x80,0x82,0x00,0x00,0x00,0x10,0x8e,0xf6,0x42,0x00,0x0c,\r
+0x21,0x20,0x20,0x02,0x27,0x28,0x11,0x00,0x24,0x28,0xb0,0x00,0x04,0x10,0x53,0x00,\r
+0x25,0x28,0xa2,0x00,0x21,0x20,0x40,0x02,0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb3,0x8f,\r
+0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x8a,0x42,0x00,0x08,\r
+0x28,0x00,0xbd,0x27,0x02,0x80,0x02,0x3c,0x21,0x30,0x80,0x00,0x14,0x27,0x44,0x8c,\r
+0x02,0x43,0x00,0x08,0xff,0xff,0x05,0x24,0xe0,0xff,0xbd,0x27,0x25,0xb0,0x02,0x3c,\r
+0x18,0x00,0xbf,0xaf,0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x21,0x20,0x82,0x00,\r
+0x00,0x00,0x90,0x8c,0x21,0x88,0xa0,0x00,0xf6,0x42,0x00,0x0c,0x21,0x20,0xa0,0x00,\r
+0x24,0x80,0x11,0x02,0x06,0x10,0x50,0x00,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xd8,0xff,0xbd,0x27,\r
+0x14,0x00,0xb1,0xaf,0x02,0x80,0x11,0x3c,0x20,0x00,0xbf,0xaf,0x18,0x00,0xb2,0xaf,\r
+0x1c,0x00,0xb3,0xaf,0x10,0x00,0xb0,0xaf,0x78,0x1b,0x31,0x26,0xb0,0x0b,0x23,0x8e,\r
+0x25,0xb0,0x02,0x3c,0x24,0x08,0x53,0x8c,0x21,0x18,0x62,0x00,0x00,0x00,0x70,0x8c,\r
+0x7f,0x80,0x02,0x3c,0xff,0xff,0x42,0x34,0xff,0x7f,0x05,0x3c,0x24,0x80,0x02,0x02,\r
+0xc0,0x25,0x04,0x00,0xff,0xff,0xa5,0x34,0x24,0x28,0x65,0x02,0x25,0x80,0x04,0x02,\r
+0x8a,0x42,0x00,0x0c,0x24,0x08,0x04,0x24,0x9c,0x12,0x00,0x0c,0x01,0x00,0x04,0x24,\r
+0x00,0x80,0x12,0x3c,0xb0,0x0b,0x24,0x8e,0x25,0x80,0x12,0x02,0x8a,0x42,0x00,0x0c,\r
+0x21,0x28,0x00,0x02,0x9c,0x12,0x00,0x0c,0x01,0x00,0x04,0x24,0x25,0x28,0x72,0x02,\r
+0x8a,0x42,0x00,0x0c,0x24,0x08,0x04,0x24,0x9c,0x12,0x00,0x0c,0x01,0x00,0x04,0x24,\r
+0xd0,0x0b,0x24,0x8e,0x0f,0x00,0x05,0x3c,0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb3,0x8f,\r
+0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0xff,0xff,0xa5,0x34,\r
+0x24,0x43,0x00,0x08,0x28,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x14,0x00,0xb1,0xaf,\r
+0x02,0x80,0x11,0x3c,0x10,0x00,0xb0,0xaf,0x18,0x00,0xbf,0xaf,0x78,0x1b,0x27,0x26,\r
+0x8b,0x0b,0xe5,0x90,0x01,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,0x90,0x0d,0x63,0x24,\r
+0x18,0x03,0x42,0x34,0x02,0x00,0x06,0x24,0x00,0x00,0x43,0xac,0x34,0x00,0xa6,0x10,\r
+0x21,0x80,0x80,0x00,0x03,0x00,0x03,0x24,0x3a,0x00,0xa3,0x10,0x2e,0x00,0x02,0x2e,\r
+0x10,0x00,0x02,0x2e,0x07,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0xff,0x00,0x04,0x32,\r
+0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x35,0x43,0x00,0x08,\r
+0x20,0x00,0xbd,0x27,0xfa,0xff,0xa6,0x14,0xff,0x00,0x04,0x32,0x89,0x0b,0xe4,0x90,\r
+0x01,0x00,0x02,0x24,0x33,0x00,0x82,0x10,0x02,0x00,0x82,0x28,0x38,0x00,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0x38,0x00,0x85,0x10,0x78,0x1b,0x22,0x26,0x2e,0x00,0x83,0x10,\r
+0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x24,0x24,0x43,0x00,0x0c,0xff,0xff,0x05,0x24,\r
+0xff,0xfc,0x06,0x3c,0xff,0xff,0xc6,0x34,0x24,0x30,0x46,0x00,0x00,0x08,0x04,0x24,\r
+0x02,0x43,0x00,0x0c,0xff,0xff,0x05,0x24,0x78,0x1b,0x22,0x26,0x89,0x0b,0x44,0x90,\r
+0x01,0x00,0x03,0x24,0x07,0x00,0x83,0x10,0x02,0x00,0x82,0x28,0x2c,0x00,0x40,0x14,\r
+0x02,0x00,0x02,0x24,0x2c,0x00,0x82,0x10,0x03,0x00,0x02,0x24,0xdb,0xff,0x82,0x14,\r
+0x00,0x00,0x00,0x00,0x78,0x1b,0x22,0x26,0x8c,0x0b,0x44,0x8c,0x0f,0x00,0x05,0x3c,\r
+0x02,0x43,0x00,0x0c,0x21,0x30,0x00,0x00,0x7a,0x43,0x00,0x08,0xff,0x00,0x04,0x32,\r
+0x25,0x00,0x82,0x2c,0xcc,0xff,0x40,0x14,0x03,0x00,0x03,0x24,0x18,0x00,0xbf,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x20,0x00,0xbd,0x27,0xc7,0xff,0x40,0x14,0x10,0x00,0x02,0x2e,0x18,0x00,0xbf,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x20,0x00,0xbd,0x27,0x78,0x1b,0x22,0x26,0x8c,0x0b,0x44,0x8c,0x0f,0x00,0x05,0x3c,\r
+0x02,0x43,0x00,0x0c,0x0f,0x00,0x06,0x24,0x8c,0x43,0x00,0x08,0x00,0x08,0x04,0x24,\r
+0xcc,0xff,0x80,0x14,0x78,0x1b,0x22,0x26,0x8c,0x0b,0x44,0x8c,0x0f,0x00,0x05,0x24,\r
+0x02,0x43,0x00,0x0c,0x0f,0x00,0x06,0x24,0x8c,0x43,0x00,0x08,0x00,0x08,0x04,0x24,\r
+0xb2,0xff,0x80,0x14,0x00,0x00,0x00,0x00,0x78,0x1b,0x22,0x26,0x8c,0x0b,0x44,0x8c,\r
+0x0f,0x00,0x05,0x24,0x02,0x43,0x00,0x0c,0x21,0x30,0x00,0x00,0x7a,0x43,0x00,0x08,\r
+0xff,0x00,0x04,0x32,0xe0,0xff,0xbd,0x27,0x14,0x00,0xb1,0xaf,0x02,0x80,0x11,0x3c,\r
+0x78,0x1b,0x28,0x26,0x8b,0x0b,0x06,0x91,0x01,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,\r
+0x3c,0x0f,0x63,0x24,0x18,0x03,0x42,0x34,0x02,0x00,0x07,0x24,0x18,0x00,0xb2,0xaf,\r
+0x10,0x00,0xb0,0xaf,0x1c,0x00,0xbf,0xaf,0x00,0x00,0x43,0xac,0x21,0x90,0xa0,0x00,\r
+0x39,0x00,0xc7,0x10,0xff,0x00,0x90,0x30,0x03,0x00,0x03,0x24,0x3f,0x00,0xc3,0x10,\r
+0x2e,0x00,0x02,0x2e,0x10,0x00,0x02,0x2e,0x0c,0x00,0x40,0x10,0x00,0x00,0x00,0x00,\r
+0x0f,0x00,0x04,0x3c,0xff,0xff,0x84,0x34,0x24,0x20,0x44,0x02,0x00,0x15,0x10,0x00,\r
+0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x25,0x20,0x44,0x00,0x1f,0x43,0x00,0x08,0x20,0x00,0xbd,0x27,0xf5,0xff,0xc7,0x14,\r
+0x0f,0x00,0x04,0x3c,0x89,0x0b,0x04,0x91,0x01,0x00,0x02,0x24,0x33,0x00,0x82,0x10,\r
+0x02,0x00,0x82,0x28,0x38,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x38,0x00,0x86,0x10,\r
+0x78,0x1b,0x22,0x26,0x2e,0x00,0x83,0x10,0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x24,\r
+0x24,0x43,0x00,0x0c,0xff,0xff,0x05,0x24,0xff,0xfc,0x06,0x3c,0xff,0xff,0xc6,0x34,\r
+0x24,0x30,0x46,0x00,0x00,0x08,0x04,0x24,0x02,0x43,0x00,0x0c,0xff,0xff,0x05,0x24,\r
+0x78,0x1b,0x22,0x26,0x89,0x0b,0x44,0x90,0x01,0x00,0x03,0x24,0x07,0x00,0x83,0x10,\r
+0x02,0x00,0x82,0x28,0x2c,0x00,0x40,0x14,0x02,0x00,0x02,0x24,0x2c,0x00,0x82,0x10,\r
+0x03,0x00,0x02,0x24,0xd6,0xff,0x82,0x14,0x00,0x00,0x00,0x00,0x78,0x1b,0x22,0x26,\r
+0x8c,0x0b,0x44,0x8c,0x0f,0x00,0x05,0x3c,0x02,0x43,0x00,0x0c,0x21,0x30,0x00,0x00,\r
+0xe7,0x43,0x00,0x08,0x0f,0x00,0x04,0x3c,0x25,0x00,0x02,0x2e,0xc7,0xff,0x40,0x14,\r
+0x03,0x00,0x03,0x24,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xc1,0xff,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x78,0x1b,0x22,0x26,\r
+0x8c,0x0b,0x44,0x8c,0x0f,0x00,0x05,0x3c,0x02,0x43,0x00,0x0c,0x0f,0x00,0x06,0x24,\r
+0xfe,0x43,0x00,0x08,0x00,0x08,0x04,0x24,0xcc,0xff,0x80,0x14,0x78,0x1b,0x22,0x26,\r
+0x8c,0x0b,0x44,0x8c,0x0f,0x00,0x05,0x24,0x02,0x43,0x00,0x0c,0x0f,0x00,0x06,0x24,\r
+0xfe,0x43,0x00,0x08,0x00,0x08,0x04,0x24,0xad,0xff,0x80,0x14,0x00,0x00,0x00,0x00,\r
+0x78,0x1b,0x22,0x26,0x8c,0x0b,0x44,0x8c,0x0f,0x00,0x05,0x24,0x02,0x43,0x00,0x0c,\r
+0x21,0x30,0x00,0x00,0xe7,0x43,0x00,0x08,0x0f,0x00,0x04,0x3c,0xe8,0xff,0xbd,0x27,\r
+0x10,0x00,0xb0,0xaf,0x21,0x80,0x80,0x00,0x14,0x00,0xbf,0xaf,0x35,0x43,0x00,0x0c,\r
+0x21,0x20,0x00,0x00,0x40,0x01,0x44,0x34,0x21,0x18,0x40,0x00,0x1f,0x00,0x02,0x2e,\r
+0x00,0x23,0x04,0x00,0x10,0x00,0x40,0x10,0x10,0x00,0x05,0x2e,0x00,0x01,0x64,0x34,\r
+0x06,0x00,0xa0,0x10,0x00,0x23,0x04,0x00,0x21,0x10,0x00,0x02,0x14,0x00,0xbf,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x1f,0x43,0x00,0x0c,\r
+0xf1,0xff,0x10,0x26,0x21,0x10,0x00,0x02,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x1f,0x43,0x00,0x0c,0xe2,0xff,0x10,0x26,\r
+0x21,0x10,0x00,0x02,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,\r
+0x18,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x25,0xb0,0x02,0x3c,0x18,0x00,0xbf,0xaf,\r
+0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x21,0x20,0x82,0x00,0x00,0x00,0x90,0x8c,\r
+0x21,0x88,0xa0,0x00,0xf6,0x42,0x00,0x0c,0x21,0x20,0xa0,0x00,0x24,0x80,0x11,0x02,\r
+0x06,0x10,0x50,0x00,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xd8,0xff,0xbd,0x27,0x25,0xb0,0x02,0x3c,\r
+0x18,0x00,0xb2,0xaf,0x21,0x90,0x82,0x00,0xff,0xff,0x02,0x24,0x1c,0x00,0xb3,0xaf,\r
+0x14,0x00,0xb1,0xaf,0x20,0x00,0xbf,0xaf,0x10,0x00,0xb0,0xaf,0x21,0x88,0xa0,0x00,\r
+0x21,0x20,0xa0,0x00,0x21,0x18,0x40,0x02,0x10,0x00,0xa2,0x10,0x21,0x98,0xc0,0x00,\r
+0x00,0x00,0x50,0x8e,0xf6,0x42,0x00,0x0c,0x00,0x00,0x00,0x00,0x27,0x18,0x11,0x00,\r
+0x24,0x18,0x70,0x00,0x04,0x10,0x53,0x00,0x25,0x18,0x62,0x00,0x00,0x00,0x43,0xae,\r
+0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27,0x20,0x00,0xbf,0x8f,\r
+0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x28,0x00,0xbd,0x27,0x00,0x00,0x66,0xac,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x25,0xb0,0x02,0x3c,0x21,0x38,0x82,0x00,0xff,0xff,0x02,0x24,0x27,0x40,0x05,0x00,\r
+0x08,0x00,0xa2,0x10,0x24,0x18,0xc5,0x00,0x00,0x00,0xe2,0x8c,0x00,0x00,0x00,0x00,\r
+0x24,0x10,0x02,0x01,0x25,0x10,0x43,0x00,0x00,0x00,0xe2,0xac,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0xe6,0xac,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x21,0x38,0xa0,0x00,0x25,0xb0,0x02,0x3c,0xff,0xff,0x03,0x24,0x27,0x48,0x05,0x00,\r
+0x24,0x40,0xc7,0x00,0x21,0x28,0xc0,0x00,0x05,0x00,0xe3,0x10,0x21,0x30,0x82,0x00,\r
+0x00,0x00,0xc5,0x8c,0x00,0x00,0x00,0x00,0x24,0x28,0x25,0x01,0x25,0x28,0xa8,0x00,\r
+0x8a,0x42,0x00,0x08,0x00,0x00,0x00,0x00,0x01,0x80,0x02,0x3c,0x25,0xb0,0x03,0x3c,\r
+0xd8,0xff,0xbd,0x27,0xe0,0x12,0x42,0x24,0x18,0x03,0x63,0x34,0x20,0x00,0xb4,0xaf,\r
+0x1c,0x00,0xb3,0xaf,0x14,0x00,0xb1,0xaf,0x24,0x00,0xbf,0xaf,0x18,0x00,0xb2,0xaf,\r
+0x10,0x00,0xb0,0xaf,0x00,0x00,0x62,0xac,0x21,0x88,0xa0,0x00,0x21,0x98,0xc0,0x00,\r
+0x21,0xa0,0x80,0x00,0x00,0x60,0x12,0x40,0x01,0x00,0x41,0x36,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0x0f,0x00,0x02,0x3c,0xff,0xff,0x42,0x34,0x0a,0x00,0x22,0x12,\r
+0x21,0x28,0xc0,0x00,0x64,0x43,0x00,0x0c,0x00,0x00,0x00,0x00,0x21,0x20,0x20,0x02,\r
+0xf6,0x42,0x00,0x0c,0x21,0x80,0x40,0x00,0x27,0x28,0x11,0x00,0x24,0x28,0xb0,0x00,\r
+0x04,0x10,0x53,0x00,0x25,0x28,0xa2,0x00,0xcf,0x43,0x00,0x0c,0xff,0x00,0x84,0x32,\r
+0x00,0x60,0x92,0x40,0x24,0x00,0xbf,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f,\r
+0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,\r
+0x28,0x00,0xbd,0x27,0x01,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,0x8c,0x13,0x63,0x24,\r
+0x18,0x03,0x42,0x34,0xe0,0xff,0xbd,0x27,0x00,0x00,0x43,0xac,0x18,0x00,0xbf,0xaf,\r
+0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x64,0x43,0x00,0x0c,0x21,0x88,0xa0,0x00,\r
+0x21,0x80,0x40,0x00,0xf6,0x42,0x00,0x0c,0x21,0x20,0x20,0x02,0x24,0x80,0x11,0x02,\r
+0x06,0x10,0x50,0x00,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xe8,0xff,0xbd,0x27,0x10,0x00,0xbf,0xaf,\r
+0x95,0x42,0x00,0x0c,0xff,0x00,0x84,0x30,0x10,0x00,0xbf,0x8f,0x01,0x00,0x02,0x24,\r
+0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0xc8,0xff,0xbd,0x27,0x2c,0x00,0xb1,0xaf,0xff,0xff,0x05,0x24,0x21,0x88,0x80,0x00,\r
+0x02,0x00,0x06,0x24,0x10,0x00,0xa4,0x27,0x34,0x00,0xbf,0xaf,0x30,0x00,0xb2,0xaf,\r
+0x3e,0x46,0x00,0x0c,0x28,0x00,0xb0,0xaf,0x08,0x00,0x30,0x96,0x02,0x80,0x02,0x3c,\r
+0x21,0x28,0x00,0x00,0x25,0x80,0x02,0x02,0x21,0x20,0x00,0x02,0x3e,0x46,0x00,0x0c,\r
+0x10,0x00,0x06,0x24,0x20,0x00,0x02,0x96,0x24,0x00,0x04,0x26,0x10,0x00,0xa5,0x27,\r
+0x03,0xff,0x42,0x30,0xc8,0x00,0x42,0x34,0x20,0x00,0x02,0xa6,0x46,0x46,0x00,0x0c,\r
+0x06,0x00,0x06,0x24,0x25,0xb0,0x03,0x3c,0x50,0x00,0x62,0x34,0x00,0x00,0x44,0x8c,\r
+0x54,0x00,0x65,0x34,0x58,0x00,0x66,0x34,0x18,0x00,0xa4,0xaf,0x00,0x00,0xa2,0x8c,\r
+0x5c,0x00,0x63,0x34,0x2a,0x00,0x04,0x26,0x1c,0x00,0xa2,0xaf,0x00,0x00,0xc7,0x8c,\r
+0x18,0x00,0xa5,0x27,0x06,0x00,0x06,0x24,0x20,0x00,0xa7,0xaf,0x00,0x00,0x62,0x8c,\r
+0x1a,0x00,0x12,0x24,0x46,0x46,0x00,0x0c,0x24,0x00,0xa2,0xaf,0x30,0x00,0x04,0x26,\r
+0x20,0x00,0xa5,0x27,0x46,0x46,0x00,0x0c,0x06,0x00,0x06,0x24,0x13,0x00,0x03,0x24,\r
+0x14,0x00,0x23,0xae,0x0c,0x00,0x32,0xae,0x08,0x00,0x05,0x8e,0x04,0x00,0x04,0x8e,\r
+0xff,0xdf,0x02,0x3c,0x14,0x00,0x06,0x8e,0xff,0xff,0x42,0x34,0x10,0x00,0x07,0x8e,\r
+0xff,0xe0,0x03,0x24,0x24,0x28,0xa2,0x00,0x00,0x40,0x02,0x3c,0x24,0x20,0x83,0x00,\r
+0x25,0x28,0xa2,0x00,0xff,0x81,0x03,0x24,0xfe,0xff,0x02,0x3c,0x24,0x30,0xc3,0x00,\r
+0xff,0xff,0x42,0x34,0x00,0x12,0x84,0x34,0x00,0x80,0x03,0x3c,0x24,0x20,0x82,0x00,\r
+0x25,0x38,0xe3,0x00,0x00,0x26,0xc6,0x34,0x80,0x00,0xa5,0x34,0x20,0x00,0x02,0x24,\r
+0x00,0x00,0x12,0xa6,0x10,0x00,0x07,0xae,0x02,0x00,0x02,0xa2,0x14,0x00,0x06,0xae,\r
+0x04,0x00,0x04,0xae,0x08,0x00,0x05,0xae,0x34,0x00,0xbf,0x8f,0x30,0x00,0xb2,0x8f,\r
+0x2c,0x00,0xb1,0x8f,0x28,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27,\r
+0xc8,0xff,0xbd,0x27,0x28,0x00,0xb4,0xaf,0x18,0x00,0xb0,0xaf,0xff,0xff,0xf4,0x30,\r
+0x25,0xb0,0x10,0x3c,0x01,0x80,0x02,0x3c,0x1c,0x00,0xb1,0xaf,0x18,0x03,0x03,0x36,\r
+0x58,0x15,0x42,0x24,0x20,0x00,0x91,0x26,0x30,0x00,0xb6,0xaf,0x24,0x00,0xb3,0xaf,\r
+0x21,0xb0,0x80,0x00,0x48,0x00,0xb3,0x93,0x21,0x20,0x20,0x02,0x00,0x00,0x62,0xac,\r
+0x2c,0x00,0xb5,0xaf,0x20,0x00,0xb2,0xaf,0x34,0x00,0xbf,0xaf,0xff,0x00,0xb5,0x30,\r
+0x39,0x15,0x00,0x0c,0xff,0x00,0xd2,0x30,0x0b,0x00,0x40,0x14,0x10,0x00,0xa2,0xaf,\r
+0x34,0x00,0xbf,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,\r
+0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27,0x08,0x00,0x43,0x8c,0xb0,0x03,0x02,0x36,\r
+0x02,0x80,0x10,0x3c,0x00,0x00,0x43,0xac,0x10,0x00,0xa2,0x8f,0x21,0x30,0x20,0x02,\r
+0x21,0x28,0x00,0x00,0x08,0x00,0x44,0x94,0x35,0x46,0x00,0x0c,0x25,0x20,0x90,0x00,\r
+0x10,0x00,0xa3,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0x62,0x94,0x00,0x00,0x00,0x00,\r
+0x25,0x88,0x50,0x00,0x50,0x00,0x60,0x16,0x20,0x00,0x30,0x26,0x20,0x00,0x32,0xa6,\r
+0x48,0x00,0x02,0x24,0x6b,0x00,0x42,0x12,0x00,0x00,0x00,0x00,0x04,0x00,0x02,0x24,\r
+0x4c,0x00,0xa2,0x16,0x21,0x28,0xc0,0x02,0xa4,0x00,0x02,0x24,0x6a,0x00,0x42,0x12,\r
+0x02,0x80,0x02,0x3c,0x10,0x00,0xa2,0x8f,0x25,0xb0,0x10,0x3c,0xb0,0x03,0x10,0x36,\r
+0x0c,0x00,0x54,0xac,0x10,0x00,0xa2,0x8f,0x12,0x00,0x03,0x24,0x21,0x28,0x00,0x00,\r
+0x14,0x00,0x43,0xac,0x00,0x00,0x14,0xae,0x10,0x00,0xa2,0x8f,0x08,0x00,0x06,0x24,\r
+0x08,0x00,0x43,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xae,0x10,0x00,0xa2,0x8f,\r
+0x02,0x80,0x03,0x3c,0x08,0x00,0x44,0x94,0x00,0x00,0x00,0x00,0x25,0x88,0x83,0x00,\r
+0x3e,0x46,0x00,0x0c,0x21,0x20,0x20,0x02,0x04,0x00,0x25,0x8e,0x08,0x00,0x26,0x8e,\r
+0x14,0x00,0x27,0x8e,0x10,0x00,0x24,0x8e,0xff,0xe0,0x03,0x24,0xff,0xdf,0x02,0x3c,\r
+0x24,0x28,0xa3,0x00,0xff,0xff,0x42,0x34,0xff,0x81,0x03,0x24,0x24,0x38,0xe3,0x00,\r
+0x24,0x30,0xc2,0x00,0x00,0x80,0x03,0x3c,0x00,0x40,0x02,0x3c,0x25,0x30,0xc2,0x00,\r
+0x25,0x20,0x83,0x00,0x00,0x12,0xa5,0x34,0x20,0x00,0x02,0x24,0x10,0x00,0x24,0xae,\r
+0x00,0x00,0x34,0xa6,0x02,0x00,0x22,0xa2,0x04,0x00,0x25,0xae,0x14,0x00,0x27,0xae,\r
+0x08,0x00,0x26,0xae,0x00,0x60,0x05,0x40,0x01,0x00,0xa1,0x34,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0x02,0x80,0x02,0x3c,0x10,0x00,0xa3,0x8f,0x78,0x41,0x42,0x24,\r
+0x04,0x00,0x44,0x8c,0x00,0x00,0x62,0xac,0x04,0x00,0x43,0xac,0x10,0x00,0xa2,0x27,\r
+0x00,0x00,0x83,0xac,0x04,0x00,0x64,0xac,0x00,0x00,0x02,0xae,0x00,0x60,0x85,0x40,\r
+0x34,0x00,0xbf,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,\r
+0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27,0x00,0x10,0x42,0x36,0x8a,0x45,0x00,0x08,\r
+0x20,0x00,0x22,0xa6,0x24,0x00,0x24,0x26,0x46,0x46,0x00,0x0c,0x06,0x00,0x06,0x24,\r
+0x02,0x80,0x05,0x3c,0x98,0x26,0xa5,0x24,0x2a,0x00,0x24,0x26,0x46,0x46,0x00,0x0c,\r
+0x06,0x00,0x06,0x24,0x02,0x80,0x05,0x3c,0x30,0x00,0x24,0x26,0x18,0x42,0xa5,0x24,\r
+0x46,0x46,0x00,0x0c,0x06,0x00,0x06,0x24,0x02,0x80,0x05,0x3c,0x78,0x1b,0xa5,0x24,\r
+0xec,0x0c,0xa6,0x94,0x00,0x00,0x00,0x00,0x01,0x00,0xc2,0x24,0x00,0x21,0x06,0x00,\r
+0xff,0xff,0x46,0x30,0xff,0xff,0x84,0x30,0x00,0x10,0xc2,0x2c,0x0a,0x30,0x02,0x00,\r
+0x02,0x1a,0x04,0x00,0x17,0x00,0x03,0xa2,0x16,0x00,0x04,0xa2,0x93,0x45,0x00,0x08,\r
+0xec,0x0c,0xa6,0xa4,0x20,0x00,0x22,0x96,0x00,0x00,0x00,0x00,0x00,0x01,0x42,0x34,\r
+0x8d,0x45,0x00,0x08,0x20,0x00,0x22,0xa6,0x10,0x42,0x43,0x94,0x02,0x80,0x05,0x3c,\r
+0x24,0x00,0x24,0x26,0x00,0xc0,0x63,0x24,0xff,0xff,0x63,0x30,0x02,0x12,0x03,0x00,\r
+0x18,0x42,0xa5,0x24,0x03,0x00,0x02,0xa2,0x02,0x00,0x03,0xa2,0x46,0x46,0x00,0x0c,\r
+0x06,0x00,0x06,0x24,0x02,0x80,0x05,0x3c,0x2a,0x00,0x24,0x26,0x98,0x26,0xa5,0x24,\r
+0x46,0x46,0x00,0x0c,0x06,0x00,0x06,0x24,0x93,0x45,0x00,0x08,0x00,0x00,0x00,0x00,\r
+0xff,0x00,0x82,0x30,0x02,0x80,0x04,0x3c,0xe0,0xff,0xbd,0x27,0x18,0x42,0x84,0x24,\r
+0x08,0x00,0x05,0x24,0x48,0x00,0x06,0x24,0x18,0x00,0x07,0x24,0x18,0x00,0xbf,0xaf,\r
+0x56,0x45,0x00,0x0c,0x10,0x00,0xa2,0xaf,0x18,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x02,0x80,0x05,0x3c,\r
+0x1c,0x00,0xbf,0xaf,0x18,0x00,0xb0,0xaf,0x78,0x1b,0xa5,0x24,0x98,0x26,0xa2,0x94,\r
+0x01,0x00,0x03,0x24,0xff,0x00,0x90,0x30,0x00,0xc0,0x42,0x24,0xff,0xff,0x44,0x30,\r
+0x2c,0x22,0x00,0x0c,0x82,0x0b,0xa3,0xa0,0x02,0x80,0x04,0x3c,0x18,0x42,0x84,0x24,\r
+0x04,0x00,0x05,0x24,0xa4,0x00,0x06,0x24,0x10,0x00,0x07,0x24,0x56,0x45,0x00,0x0c,\r
+0x10,0x00,0xb0,0xaf,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,\r
+0x20,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x3a,0x46,0x00,0x08,\r
+0xff,0x00,0xa5,0x30,0x00,0x00,0x85,0xa0,0xff,0xff,0xc6,0x24,0x01,0x00,0x84,0x24,\r
+0xfc,0xff,0xc0,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x05,0x00,0xc0,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x85,0xac,0xff,0xff,0xc6,0x24,\r
+0xfd,0xff,0xc0,0x14,0x04,0x00,0x84,0x24,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x21,0x38,0x80,0x00,0x08,0x00,0xc0,0x10,0xff,0xff,0xc3,0x24,0xff,0xff,0x06,0x24,\r
+0x00,0x00,0xa2,0x90,0xff,0xff,0x63,0x24,0x01,0x00,0xa5,0x24,0x00,0x00,0xe2,0xa0,\r
+0xfb,0xff,0x66,0x14,0x01,0x00,0xe7,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00,\r
+0x21,0x38,0x80,0x00,0x08,0x00,0xc0,0x10,0xff,0xff,0xc3,0x24,0xff,0xff,0x06,0x24,\r
+0x00,0x00,0xa2,0x8c,0xff,0xff,0x63,0x24,0x04,0x00,0xa5,0x24,0x00,0x00,0xe2,0xac,\r
+0xfb,0xff,0x66,0x14,0x04,0x00,0xe7,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00,\r
+0x2b,0x10,0xa4,0x00,0x0d,0x00,0x40,0x14,0xff,0xff,0x02,0x24,0xff,0xff,0xc6,0x24,\r
+0x08,0x00,0xc2,0x10,0x21,0x18,0x80,0x00,0xff,0xff,0x07,0x24,0x00,0x00,0xa2,0x90,\r
+0xff,0xff,0xc6,0x24,0x01,0x00,0xa5,0x24,0x00,0x00,0x62,0xa0,0xfb,0xff,0xc7,0x14,\r
+0x01,0x00,0x63,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00,0x21,0x28,0xa6,0x00,\r
+0x21,0x18,0x86,0x00,0xff,0xff,0xc6,0x24,0xfa,0xff,0xc2,0x10,0x00,0x00,0x00,0x00,\r
+0xff,0xff,0x07,0x24,0xff,0xff,0xa5,0x24,0x00,0x00,0xa2,0x90,0xff,0xff,0x63,0x24,\r
+0xff,0xff,0xc6,0x24,0xfb,0xff,0xc7,0x14,0x00,0x00,0x62,0xa0,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x80,0x00,0x0c,0x00,0xc0,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x90,\r
+0x00,0x00,0xa3,0x90,0x01,0x00,0x84,0x24,0x23,0x10,0x43,0x00,0x00,0x16,0x02,0x00,\r
+0x03,0x16,0x02,0x00,0x04,0x00,0x40,0x14,0x01,0x00,0xa5,0x24,0xff,0xff,0xc6,0x24,\r
+0xf6,0xff,0xc0,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0xc0,0x00,\r
+0x91,0x46,0x00,0x08,0x21,0x18,0x86,0x00,0x00,0x00,0x82,0x90,0x00,0x00,0x00,0x00,\r
+0x04,0x00,0x45,0x10,0x00,0x00,0x00,0x00,0x01,0x00,0x84,0x24,0xfa,0xff,0x83,0x14,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00,0x09,0x00,0xc0,0x10,\r
+0xff,0xff,0xc3,0x24,0xff,0x00,0xa5,0x30,0xff,0xff,0x06,0x24,0x00,0x00,0x82,0x90,\r
+0xff,0xff,0x63,0x24,0x05,0x00,0x45,0x10,0x01,0x00,0x84,0x24,0xfb,0xff,0x66,0x14,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0xff,0xff,0x82,0x24,0x21,0x38,0x00,0x00,0x1f,0x00,0xc0,0x10,0x21,0x18,0x00,0x00,\r
+0x02,0x80,0x02,0x3c,0x80,0xb4,0x4b,0x24,0x00,0x00,0x87,0x90,0x00,0x00,0xa3,0x90,\r
+0xff,0xff,0xc6,0x24,0x01,0x00,0x84,0x24,0x21,0x10,0xeb,0x00,0x16,0x00,0xe0,0x10,\r
+0x01,0x00,0xa5,0x24,0x14,0x00,0x60,0x10,0x21,0x48,0x6b,0x00,0x10,0x00,0xe3,0x10,\r
+0x20,0x00,0xe8,0x24,0x00,0x00,0x42,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30,\r
+0x02,0x00,0x40,0x10,0x20,0x00,0x6a,0x24,0xff,0x00,0x07,0x31,0x00,0x00,0x22,0x91,\r
+0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30,0x02,0x00,0x40,0x10,0xff,0x00,0xe7,0x30,\r
+0xff,0x00,0x43,0x31,0xff,0x00,0x63,0x30,0x03,0x00,0xe3,0x14,0x00,0x00,0x00,0x00,\r
+0xe5,0xff,0xc0,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x23,0x10,0xe3,0x00,\r
+0x21,0x18,0x80,0x00,0x00,0x00,0xa2,0x90,0x01,0x00,0xa5,0x24,0x00,0x00,0x82,0xa0,\r
+0xfc,0xff,0x40,0x14,0x01,0x00,0x84,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,\r
+0x21,0x38,0x80,0x00,0xff,0xff,0x03,0x24,0xff,0xff,0xc6,0x24,0x06,0x00,0xc3,0x10,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0x90,0x01,0x00,0xa5,0x24,0x00,0x00,0x82,0xa0,\r
+0xf9,0xff,0x40,0x14,0x01,0x00,0x84,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0xe0,0x00,\r
+0x00,0x00,0x82,0x80,0xe0,0x46,0x00,0x08,0x21,0x18,0x80,0x00,0x01,0x00,0x84,0x24,\r
+0x00,0x00,0x82,0x80,0x00,0x00,0x00,0x00,0xfc,0xff,0x40,0x14,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0xa2,0x90,0x01,0x00,0xa5,0x24,0x00,0x00,0x82,0xa0,0xfc,0xff,0x40,0x14,\r
+0x01,0x00,0x84,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x12,0x00,0xc0,0x10,\r
+0x21,0x18,0x80,0x00,0x00,0x00,0x82,0x80,0xf1,0x46,0x00,0x08,0x00,0x00,0x00,0x00,\r
+0x01,0x00,0x84,0x24,0x00,0x00,0x82,0x80,0x00,0x00,0x00,0x00,0xfc,0xff,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0x90,0x01,0x00,0xa5,0x24,0x00,0x00,0x82,0xa0,\r
+0x05,0x00,0x40,0x10,0x01,0x00,0x84,0x24,0xff,0xff,0xc6,0x24,0xf9,0xff,0xc0,0x14,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xa0,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,\r
+0x00,0x00,0x83,0x90,0x00,0x00,0xa2,0x90,0x01,0x00,0x84,0x24,0x23,0x10,0x62,0x00,\r
+0x00,0x16,0x02,0x00,0x03,0x16,0x02,0x00,0x03,0x00,0x40,0x14,0x01,0x00,0xa5,0x24,\r
+0xf7,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x21,0x10,0x00,0x00,0x0b,0x00,0xc0,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0x90,\r
+0x00,0x00,0x83,0x90,0xff,0xff,0xc6,0x24,0x23,0x10,0x62,0x00,0x00,0x16,0x02,0x00,\r
+0x03,0x16,0x02,0x00,0x03,0x00,0x40,0x14,0x01,0x00,0xa5,0x24,0xf5,0xff,0x60,0x14,\r
+0x01,0x00,0x84,0x24,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x83,0x80,\r
+0x00,0x2e,0x05,0x00,0x21,0x10,0x80,0x00,0x22,0x47,0x00,0x08,0x03,0x2e,0x05,0x00,\r
+0x07,0x00,0x60,0x10,0x01,0x00,0x42,0x24,0x00,0x00,0x43,0x80,0x00,0x00,0x00,0x00,\r
+0xfb,0xff,0x65,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x00,0x00,0x82,0x80,0x2e,0x47,0x00,0x08,\r
+0x21,0x18,0x80,0x00,0x01,0x00,0x63,0x24,0x00,0x00,0x62,0x80,0x00,0x00,0x00,0x00,\r
+0xfc,0xff,0x40,0x14,0x23,0x10,0x64,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0xe0,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,0x21,0x80,0xa0,0x00,0x14,0x00,0xb1,0xaf,\r
+0x18,0x00,0xbf,0xaf,0x21,0x88,0x80,0x00,0x28,0x47,0x00,0x0c,0x00,0x86,0x10,0x00,\r
+0x21,0x18,0x51,0x00,0x03,0x86,0x10,0x00,0x00,0x00,0x62,0x80,0x00,0x00,0x00,0x00,\r
+0x0a,0x00,0x50,0x10,0x21,0x10,0x60,0x00,0xff,0xff,0x63,0x24,0x2b,0x10,0x71,0x00,\r
+0xf9,0xff,0x40,0x10,0x21,0x10,0x00,0x00,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x18,0x00,0xbf,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,\r
+0x21,0x30,0x80,0x00,0x0d,0x00,0xa0,0x10,0xff,0xff,0xa3,0x24,0x00,0x00,0x82,0x80,\r
+0x00,0x00,0x00,0x00,0x09,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0x24,\r
+0xff,0xff,0x63,0x24,0x05,0x00,0x65,0x10,0x01,0x00,0xc6,0x24,0x00,0x00,0xc2,0x80,\r
+0x00,0x00,0x00,0x00,0xfa,0xff,0x40,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x23,0x10,0xc4,0x00,0x00,0x00,0x82,0x90,0x00,0x00,0x00,0x00,0x19,0x00,0x40,0x10,\r
+0x21,0x40,0x00,0x00,0x00,0x00,0xa9,0x80,0x00,0x00,0x00,0x00,0x17,0x00,0x20,0x11,\r
+0x21,0x30,0xa0,0x00,0x00,0x3e,0x02,0x00,0x03,0x3e,0x07,0x00,0x21,0x18,0x20,0x01,\r
+0x15,0x00,0xe3,0x10,0x00,0x00,0x00,0x00,0x01,0x00,0xc6,0x24,0x00,0x00,0xc2,0x90,\r
+0x00,0x00,0x00,0x00,0x00,0x1e,0x02,0x00,0x03,0x1e,0x03,0x00,0xf8,0xff,0x60,0x14,\r
+0x00,0x16,0x02,0x00,0x03,0x16,0x02,0x00,0x06,0x00,0x40,0x10,0x00,0x00,0x00,0x00,\r
+0x01,0x00,0x84,0x24,0x00,0x00,0x82,0x90,0x00,0x00,0x00,0x00,0xeb,0xff,0x40,0x14,\r
+0x01,0x00,0x08,0x25,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x01,0x00,0x00,0xa2,0x90,\r
+0x73,0x47,0x00,0x08,0x00,0x16,0x02,0x00,0x00,0x00,0xc2,0x90,0x73,0x47,0x00,0x08,\r
+0x00,0x16,0x02,0x00,0x00,0x00,0x87,0x90,0x00,0x00,0x00,0x00,0x14,0x00,0xe0,0x10,\r
+0x21,0x10,0x80,0x00,0x00,0x00,0xa4,0x90,0x00,0x00,0x00,0x00,0x00,0x1e,0x04,0x00,\r
+0x03,0x1e,0x03,0x00,0x09,0x00,0x60,0x10,0x21,0x30,0xa0,0x00,0x00,0x3e,0x07,0x00,\r
+0x03,0x3e,0x07,0x00,0x0b,0x00,0xe3,0x10,0x01,0x00,0xc6,0x24,0x00,0x00,0xc3,0x80,\r
+0x00,0x00,0x00,0x00,0xfb,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24,\r
+0x00,0x00,0x47,0x90,0x00,0x00,0x00,0x00,0xf0,0xff,0xe0,0x14,0x00,0x00,0x00,0x00,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xe0,0xff,0xbd,0x27,\r
+0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x18,0x00,0xbf,0xaf,0x21,0x80,0x80,0x00,\r
+0x1d,0x00,0x80,0x10,0x21,0x88,0xa0,0x00,0x5f,0x47,0x00,0x0c,0x21,0x20,0x00,0x02,\r
+0x21,0x80,0x02,0x02,0x00,0x00,0x02,0x82,0x21,0x28,0x20,0x02,0x21,0x20,0x00,0x02,\r
+0x22,0x00,0x40,0x10,0x21,0x18,0x00,0x00,0x83,0x47,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x05,0x00,0x40,0x10,0x21,0x18,0x40,0x00,0x00,0x00,0x42,0x80,0x00,0x00,0x00,0x00,\r
+0x0a,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,0xa8,0xb5,0x43,0xac,\r
+0x21,0x18,0x00,0x02,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x21,0x10,0x60,0x00,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x00,0x00,0x60,0xa0,\r
+0xb4,0x47,0x00,0x08,0x01,0x00,0x63,0x24,0x02,0x80,0x02,0x3c,0xa8,0xb5,0x50,0x8c,\r
+0x00,0x00,0x00,0x00,0xf3,0xff,0x00,0x12,0x21,0x18,0x00,0x00,0x5f,0x47,0x00,0x0c,\r
+0x21,0x20,0x00,0x02,0x21,0x80,0x02,0x02,0x00,0x00,0x02,0x82,0x21,0x28,0x20,0x02,\r
+0x21,0x20,0x00,0x02,0xe0,0xff,0x40,0x14,0x21,0x18,0x00,0x00,0x18,0x00,0xbf,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x02,0x80,0x02,0x3c,0xa8,0xb5,0x40,0xac,\r
+0x20,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0xe0,0xff,0xbd,0x27,\r
+0x18,0x00,0xb2,0xaf,0x14,0x00,0xb1,0xaf,0x1c,0x00,0xbf,0xaf,0x10,0x00,0xb0,0xaf,\r
+0x00,0x00,0x90,0x8c,0x21,0x90,0x80,0x00,0x21,0x88,0xa0,0x00,0x21,0x18,0x00,0x00,\r
+0x0f,0x00,0x00,0x12,0x21,0x20,0x00,0x02,0x5f,0x47,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x21,0x80,0x02,0x02,0x00,0x00,0x02,0x82,0x21,0x28,0x20,0x02,0x21,0x20,0x00,0x02,\r
+0x07,0x00,0x40,0x10,0x21,0x18,0x00,0x00,0x83,0x47,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x21,0x18,0x40,0x00,0x09,0x00,0x40,0x14,0x00,0x00,0x42,0xae,0x21,0x18,0x00,0x02,\r
+0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x21,0x10,0x60,0x00,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x00,0x00,0x42,0x80,\r
+0x00,0x00,0x00,0x00,0xf5,0xff,0x40,0x10,0x01,0x00,0x64,0x24,0x00,0x00,0x60,0xa0,\r
+0xed,0x47,0x00,0x08,0x00,0x00,0x44,0xae,0xd8,0xff,0xbd,0x27,0x14,0x00,0xb1,0xaf,\r
+0x21,0x88,0x80,0x00,0x21,0x20,0xa0,0x00,0x1c,0x00,0xb3,0xaf,0x18,0x00,0xb2,0xaf,\r
+0x20,0x00,0xbf,0xaf,0x10,0x00,0xb0,0xaf,0x28,0x47,0x00,0x0c,0x21,0x98,0xa0,0x00,\r
+0x21,0x90,0x40,0x00,0x08,0x00,0x40,0x16,0x21,0x10,0x20,0x02,0x20,0x00,0xbf,0x8f,\r
+0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27,0x28,0x47,0x00,0x0c,0x21,0x20,0x20,0x02,\r
+0x21,0x80,0x40,0x00,0x2a,0x10,0x52,0x00,0x0a,0x00,0x40,0x14,0x00,0x00,0x00,0x00,\r
+0x21,0x20,0x20,0x02,0x21,0x28,0x60,0x02,0x21,0x30,0x40,0x02,0x7b,0x46,0x00,0x0c,\r
+0xff,0xff,0x10,0x26,0x0b,0x00,0x40,0x10,0x2a,0x18,0x12,0x02,0xf8,0xff,0x60,0x10,\r
+0x01,0x00,0x31,0x26,0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x28,0x00,0xbd,0x27,0x09,0x48,0x00,0x08,0x21,0x10,0x20,0x02,0x01,0x80,0x02,0x3c,\r
+0xa4,0x20,0x43,0x24,0x25,0xb0,0x02,0x3c,0xc0,0xff,0xbd,0x27,0x18,0x03,0x42,0x34,\r
+0x34,0x00,0xb7,0xaf,0x30,0x00,0xb6,0xaf,0x2c,0x00,0xb5,0xaf,0x28,0x00,0xb4,0xaf,\r
+0x24,0x00,0xb3,0xaf,0x3c,0x00,0xbf,0xaf,0x38,0x00,0xbe,0xaf,0x20,0x00,0xb2,0xaf,\r
+0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,0x00,0x00,0x43,0xac,0x21,0xa0,0x00,0x00,\r
+0x02,0x80,0x13,0x3c,0x02,0x80,0x15,0x3c,0x02,0x80,0x17,0x3c,0x02,0x80,0x16,0x3c,\r
+0x78,0x1b,0x67,0x26,0xf0,0x23,0xe3,0x94,0x25,0xb0,0x11,0x3c,0x01,0x80,0x05,0x3c,\r
+0x18,0x03,0x24,0x36,0x01,0x00,0x63,0x24,0xa4,0x20,0xa2,0x24,0x00,0x00,0x82,0xac,\r
+0xf0,0x23,0xe3,0xa4,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0xc6,0x00,0x23,0x36,0x00,0x00,0x62,0x94,0x00,0x00,0x00,0x00,\r
+0x11,0x00,0x42,0x2c,0x08,0x00,0x40,0x14,0x02,0x80,0x03,0x3c,0x02,0x80,0x04,0x3c,\r
+0x44,0x44,0x62,0x8c,0x5c,0x44,0x83,0x8c,0x02,0x80,0x05,0x3c,0x5c,0x44,0x80,0xac,\r
+0x25,0x10,0x43,0x00,0x44,0x44,0xa2,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x00,0x60,0x81,0x40,0xc0,0x02,0x26,0x36,0x00,0x00,0xd2,0x8c,0x00,0x00,0x00,0x00,\r
+0x03,0x00,0x40,0x12,0xff,0x00,0x03,0x3c,0x01,0x00,0x82,0x26,0xff,0xff,0x54,0x30,\r
+0xff,0xff,0x62,0x34,0x2b,0x10,0x52,0x00,0x1d,0x02,0x40,0x10,0x00,0x50,0x82,0x2e,\r
+0x00,0xff,0x02,0x3c,0xff,0x00,0x42,0x34,0x00,0xfd,0x06,0x3c,0x24,0x28,0x42,0x02,\r
+0x14,0x00,0xc2,0x34,0xf7,0x04,0xa2,0x10,0x2b,0x10,0x45,0x00,0x33,0x02,0x40,0x14,\r
+0x00,0xfd,0x04,0x3c,0x00,0xf2,0x08,0x3c,0x01,0x00,0x02,0x35,0x0b,0x05,0xa2,0x10,\r
+0x2b,0x10,0x45,0x00,0xd3,0x02,0x40,0x14,0x00,0xfb,0x04,0x3c,0x00,0xf0,0x04,0x3c,\r
+0x20,0x00,0x82,0x34,0x59,0x05,0xa2,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x45,0x00,\r
+0xfe,0x02,0x40,0x14,0x01,0x00,0x82,0x34,0x68,0x05,0xa2,0x10,0x00,0x00,0x00,0x00,\r
+0x2b,0x10,0x45,0x00,0x07,0x04,0x40,0x14,0x03,0x00,0x82,0x34,0x00,0xe0,0x02,0x3c,\r
+0xb7,0x05,0xa2,0x10,0x00,0xff,0x48,0x32,0xb3,0x04,0xa4,0x10,0xff,0x00,0x02,0x3c,\r
+0x25,0xb0,0x02,0x3c,0xc0,0x02,0x42,0x34,0x21,0xa0,0x00,0x00,0x00,0x00,0x40,0xac,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x25,0xb0,0x08,0x3c,0x64,0x03,0x02,0x35,0x00,0x00,0x43,0x94,0x68,0x03,0x04,0x35,\r
+0x90,0x43,0xa3,0xa6,0x00,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,0xa0,0x43,0xe2,0xae,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x90,0x43,0xa2,0x96,\r
+0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30,0xd2,0x01,0x40,0x10,0x78,0x1b,0x66,0x26,\r
+0x78,0x1b,0x67,0x26,0x78,0x1b,0x64,0x8e,0xd8,0x02,0xe5,0x8c,0xe8,0x02,0xe6,0x8c,\r
+0xf0,0xff,0x02,0x3c,0xff,0xff,0x42,0x34,0x00,0x50,0x03,0x3c,0x24,0x28,0xa2,0x00,\r
+0x01,0x00,0x84,0x34,0x24,0x30,0xc3,0x00,0x00,0x10,0x02,0x3c,0x78,0x1b,0x64,0xae,\r
+0x9b,0x04,0xc2,0x10,0xd8,0x02,0xe5,0xac,0x90,0x43,0xa2,0x96,0x00,0x00,0x00,0x00,\r
+0x02,0x00,0x42,0x30,0xbc,0x01,0x40,0x10,0xf3,0xff,0x03,0x24,0x78,0x1b,0x62,0x8e,\r
+0x00,0x00,0x00,0x00,0x24,0x10,0x43,0x00,0x04,0x00,0x42,0x34,0x78,0x1b,0x62,0xae,\r
+0x90,0x43,0xa2,0x96,0x00,0x00,0x00,0x00,0x04,0x00,0x42,0x30,0x49,0x01,0x40,0x10,\r
+0xcf,0xff,0x03,0x24,0x78,0x1b,0x62,0x8e,0x00,0x00,0x00,0x00,0x24,0x10,0x43,0x00,\r
+0x10,0x00,0x42,0x34,0x78,0x1b,0x62,0xae,0x90,0x43,0xa2,0x96,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0x42,0x30,0x48,0x01,0x40,0x14,0x00,0x00,0x00,0x00,0x90,0x43,0xa2,0x96,\r
+0x00,0x00,0x00,0x00,0x10,0x00,0x42,0x30,0x26,0x00,0x40,0x10,0x78,0x1b,0x64,0x26,\r
+0xc9,0x02,0x82,0x90,0xa0,0x43,0xe3,0x8e,0x01,0x00,0x42,0x24,0xc9,0x02,0x82,0xa0,\r
+0x0f,0x00,0x63,0x30,0x01,0x00,0x02,0x24,0xa6,0x04,0x62,0x10,0x02,0x80,0x04,0x3c,\r
+0xa0,0x43,0x82,0x8c,0x02,0x00,0x03,0x24,0x0f,0x00,0x42,0x30,0xa5,0x04,0x43,0x10,\r
+0x00,0x00,0x00,0x00,0xa0,0x43,0x82,0x8c,0x03,0x00,0x03,0x24,0x0f,0x00,0x42,0x30,\r
+0x02,0x00,0x43,0x10,0x03,0x00,0x04,0x24,0x21,0x20,0x00,0x00,0x15,0x51,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0xa0,0x43,0xe3,0x8e,0x90,0x43,0xa5,0x96,0x25,0xb0,0x02,0x3c,\r
+0xf0,0x00,0x63,0x30,0x64,0x03,0x42,0x34,0x02,0x19,0x03,0x00,0xef,0x00,0xa5,0x30,\r
+0x78,0x1b,0x64,0x26,0x02,0x00,0x83,0xa0,0x00,0x00,0x45,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x90,0x43,0xa2,0x96,0x00,0x00,0x00,0x00,0x20,0x00,0x42,0x30,\r
+0x26,0x00,0x40,0x10,0x78,0x1b,0x64,0x26,0xca,0x02,0x82,0x90,0xa0,0x43,0xe3,0x8e,\r
+0x01,0x00,0x42,0x24,0xca,0x02,0x82,0xa0,0x0f,0x00,0x63,0x30,0x01,0x00,0x02,0x24,\r
+0x7a,0x04,0x62,0x10,0x02,0x80,0x04,0x3c,0xa0,0x43,0x82,0x8c,0x02,0x00,0x03,0x24,\r
+0x0f,0x00,0x42,0x30,0x79,0x04,0x43,0x10,0x00,0x00,0x00,0x00,0xa0,0x43,0x82,0x8c,\r
+0x03,0x00,0x03,0x24,0x0f,0x00,0x42,0x30,0x02,0x00,0x43,0x10,0x03,0x00,0x04,0x24,\r
+0x21,0x20,0x00,0x00,0x15,0x51,0x00,0x0c,0x00,0x00,0x00,0x00,0xa0,0x43,0xe3,0x8e,\r
+0x90,0x43,0xa5,0x96,0x25,0xb0,0x02,0x3c,0xf0,0x00,0x63,0x30,0x64,0x03,0x42,0x34,\r
+0x02,0x19,0x03,0x00,0xdf,0x00,0xa5,0x30,0x78,0x1b,0x64,0x26,0x02,0x00,0x83,0xa0,\r
+0x00,0x00,0x45,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x90,0x43,0xa2,0x96,\r
+0x00,0x00,0x00,0x00,0x40,0x00,0x42,0x30,0xc4,0x00,0x40,0x10,0x78,0x1b,0x64,0x26,\r
+0x78,0x1b,0x6f,0x26,0x08,0x00,0xe4,0x8d,0x00,0x00,0x00,0x00,0x42,0x17,0x04,0x00,\r
+0x03,0x00,0x42,0x30,0x71,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0xa0,0x43,0xe2,0x8e,\r
+0xff,0x9f,0x03,0x3c,0xff,0xff,0x63,0x34,0x24,0x18,0x83,0x00,0x00,0xff,0x11,0x3c,\r
+0x00,0x20,0x04,0x3c,0x25,0x18,0x64,0x00,0x24,0x10,0x51,0x00,0x08,0x00,0xe3,0xad,\r
+0x98,0x01,0x40,0x14,0x02,0x80,0x10,0x3c,0x25,0xb0,0x0e,0x3c,0x03,0x0d,0xc2,0x35,\r
+0x00,0x00,0x43,0x90,0x10,0x00,0xe4,0x8d,0xff,0x3f,0x02,0x3c,0xff,0xff,0x42,0x34,\r
+0x24,0x58,0x82,0x00,0x70,0x00,0x63,0x30,0x00,0x40,0x02,0x3c,0x56,0x04,0x60,0x10,\r
+0x25,0x58,0x62,0x01,0x94,0x0e,0xc2,0x35,0x9c,0x0e,0xc3,0x35,0xa4,0x0e,0xc4,0x35,\r
+0xac,0x0e,0xc5,0x35,0x00,0x00,0x47,0x8c,0x00,0x00,0x6a,0x8c,0x00,0x00,0x8c,0x8c,\r
+0x00,0x00,0xa6,0x8c,0x0c,0x00,0xe4,0x8d,0xb4,0x0e,0xc2,0x35,0x00,0x00,0x49,0x8c,\r
+0xff,0x03,0x05,0x3c,0x00,0xfc,0x08,0x24,0xbc,0x0e,0xc2,0x35,0x24,0x38,0xe5,0x00,\r
+0x24,0x30,0xc5,0x00,0x24,0x18,0x68,0x01,0x02,0x3c,0x07,0x00,0x00,0x00,0x4b,0x8c,\r
+0x24,0x20,0x88,0x00,0x02,0x34,0x06,0x00,0xcc,0x0e,0xcd,0x35,0xc4,0x0e,0xc8,0x35,\r
+0xf0,0xff,0x02,0x3c,0xff,0x03,0x42,0x34,0x25,0x20,0x87,0x00,0x25,0x18,0x66,0x00,\r
+0x00,0x00,0x07,0x8d,0x24,0x50,0x45,0x01,0x00,0x00,0xa6,0x8d,0x24,0x48,0x25,0x01,\r
+0x24,0x18,0x62,0x00,0x24,0x20,0x82,0x00,0x82,0x51,0x0a,0x00,0x82,0x49,0x09,0x00,\r
+0x0f,0xc0,0x02,0x3c,0xff,0xff,0x42,0x34,0x25,0x20,0x8a,0x00,0x25,0x18,0x69,0x00,\r
+0x24,0x60,0x85,0x01,0x24,0x58,0x65,0x01,0x24,0x18,0x62,0x00,0x24,0x30,0xc5,0x00,\r
+0x00,0x61,0x0c,0x00,0x24,0x20,0x82,0x00,0x00,0x59,0x0b,0x00,0x24,0x38,0xe5,0x00,\r
+0x25,0x20,0x8c,0x00,0x25,0x18,0x6b,0x00,0x02,0x3c,0x07,0x00,0x02,0x34,0x06,0x00,\r
+0x16,0x00,0xe6,0xa5,0x0c,0x00,0xe4,0xad,0x10,0x00,0xe3,0xad,0x14,0x00,0xe7,0xa5,\r
+0x78,0x1b,0x63,0x26,0x0c,0x00,0x62,0x8c,0x00,0x00,0x00,0x00,0x16,0x04,0x40,0x04,\r
+0x00,0x00,0x00,0x00,0xa0,0x43,0xe2,0x8e,0xff,0x00,0x04,0x3c,0x24,0x10,0x44,0x00,\r
+0x05,0x00,0x40,0x10,0x12,0x00,0x02,0x24,0xa0,0x43,0xe2,0x8e,0x00,0x00,0x00,0x00,\r
+0x24,0x10,0x44,0x00,0x02,0x14,0x02,0x00,0xc3,0x02,0x62,0xa0,0x6c,0x56,0x00,0x0c,\r
+0x10,0x00,0xa4,0x27,0xa7,0x55,0x00,0x0c,0x00,0x00,0x00,0x00,0x78,0x1b,0x62,0x26,\r
+0x0c,0x00,0x43,0x8c,0x00,0x80,0x04,0x3c,0x25,0x18,0x64,0x00,0x0c,0x00,0x43,0xac,\r
+0x78,0x1b,0x62,0x26,0xc3,0x02,0x44,0x90,0x25,0xb0,0x03,0x3c,0x61,0x0c,0x63,0x34,\r
+0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x90,0x43,0xa2,0x96,\r
+0x00,0x00,0x00,0x00,0x80,0x00,0x42,0x30,0x52,0x00,0x40,0x14,0x00,0x00,0x00,0x00,\r
+0x78,0x1b,0x62,0x8e,0x00,0x00,0x00,0x00,0x42,0x10,0x02,0x00,0x01,0x00,0x42,0x30,\r
+0x08,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x90,0x43,0xa2,0x96,0x00,0x00,0x00,0x00,\r
+0x00,0x01,0x42,0x30,0xe6,0x00,0x40,0x14,0x02,0x80,0x02,0x3c,0x78,0x1b,0x62,0x26,\r
+0xea,0x02,0x40,0xa0,0x90,0x43,0xa2,0x96,0x01,0x00,0x03,0x24,0x00,0x02,0x42,0x30,\r
+0xe7,0x00,0x43,0x10,0x00,0x00,0x00,0x00,0x78,0x1b,0x62,0x8e,0xfd,0xff,0x03,0x24,\r
+0x24,0x10,0x43,0x00,0x78,0x1b,0x62,0xae,0x25,0xb0,0x04,0x3c,0x4c,0x00,0x83,0x34,\r
+0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,0x03,0x00,0x42,0x30,0x05,0x00,0x40,0x14,\r
+0x01,0x80,0x05,0x3c,0x78,0x1b,0x62,0x8e,0x3f,0xff,0x03,0x24,0x24,0x10,0x43,0x00,\r
+0x78,0x1b,0x62,0xae,0x18,0x03,0x82,0x34,0xa4,0x21,0xa3,0x24,0x00,0x00,0x43,0xac,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x70,0x41,0xc2,0x8e,0x70,0x41,0xc3,0x26,0x11,0x00,0x43,0x10,0x02,0x80,0x02,0x3c,\r
+0xbf,0x00,0x92,0x34,0x78,0x1b,0x51,0x24,0x21,0x80,0x60,0x00,0x21,0xf0,0x00,0x00,\r
+0x00,0x00,0x42,0x92,0x00,0x00,0x00,0x00,0x04,0x00,0x42,0x2c,0x08,0x00,0x40,0x10,\r
+0x00,0x00,0x00,0x00,0xf8,0x25,0x24,0x8e,0xd9,0x09,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x70,0x41,0xc3,0x8e,0x00,0x00,0x00,0x00,0xf5,0xff,0x70,0x14,0x00,0x00,0x00,0x00,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x02,0x80,0x02,0x3c,\r
+0x21,0x28,0x00,0x00,0x08,0x10,0x44,0x24,0x21,0x30,0x00,0x00,0x2d,0x28,0x00,0x0c,\r
+0x21,0x38,0x00,0x00,0x3f,0x48,0x00,0x08,0x78,0x1b,0x67,0x26,0x08,0x00,0x83,0x8c,\r
+0xff,0x9f,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0x08,0x00,0x83,0xac,\r
+0x90,0x43,0xa2,0x96,0x00,0x00,0x00,0x00,0x80,0x00,0x42,0x30,0xb0,0xff,0x40,0x10,\r
+0x00,0x00,0x00,0x00,0x78,0x1b,0x65,0x26,0xc8,0x02,0xa4,0x8c,0xff,0x0f,0x02,0x3c,\r
+0xff,0xff,0x42,0x34,0x02,0x1f,0x04,0x00,0x01,0x00,0x63,0x24,0x24,0x20,0x82,0x00,\r
+0x00,0x1f,0x03,0x00,0x25,0x20,0x83,0x00,0x76,0x52,0x00,0x0c,0xc8,0x02,0xa4,0xac,\r
+0x90,0x43,0xa3,0x96,0x25,0xb0,0x02,0x3c,0x64,0x03,0x42,0x34,0x7f,0x00,0x63,0x30,\r
+0x00,0x00,0x43,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x9a,0x49,0x00,0x08,\r
+0x00,0x00,0x00,0x00,0x78,0x1b,0x62,0x8e,0x00,0x00,0x00,0x00,0x24,0x10,0x43,0x00,\r
+0x78,0x1b,0x62,0xae,0x90,0x43,0xa2,0x96,0x00,0x00,0x00,0x00,0x08,0x00,0x42,0x30,\r
+0xba,0xfe,0x40,0x10,0x00,0x00,0x00,0x00,0x78,0x1b,0x65,0x26,0xc8,0x02,0xa4,0x8c,\r
+0xff,0xf0,0x02,0x3c,0xff,0xff,0x42,0x34,0x02,0x1e,0x04,0x00,0x0f,0x00,0x63,0x30,\r
+0x01,0x00,0x63,0x24,0x0f,0x00,0x63,0x30,0x24,0x20,0x82,0x00,0x00,0x1e,0x03,0x00,\r
+0x25,0x20,0x83,0x00,0xe5,0x50,0x00,0x0c,0xc8,0x02,0xa4,0xac,0x5d,0x52,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0xa0,0x43,0xe2,0x8e,0x01,0x00,0x03,0x24,0x0f,0x00,0x42,0x30,\r
+0x86,0x05,0x43,0x10,0x02,0x80,0x04,0x3c,0xa0,0x43,0x82,0x8c,0x02,0x00,0x03,0x24,\r
+0x0f,0x00,0x42,0x30,0x83,0x05,0x43,0x10,0x00,0x00,0x00,0x00,0xa0,0x43,0x82,0x8c,\r
+0x03,0x00,0x03,0x24,0x0f,0x00,0x42,0x30,0x02,0x00,0x43,0x10,0x03,0x00,0x04,0x24,\r
+0x21,0x20,0x00,0x00,0x15,0x51,0x00,0x0c,0x00,0x00,0x00,0x00,0x29,0xb0,0x02,0x3c,\r
+0x00,0x00,0x40,0xac,0x08,0x00,0x44,0x34,0x0c,0x00,0x45,0x34,0x10,0x00,0x46,0x34,\r
+0x3c,0x00,0x51,0x34,0x04,0x00,0x43,0x34,0x14,0x00,0x47,0x34,0x18,0x00,0x48,0x34,\r
+0x1c,0x00,0x49,0x34,0x20,0x00,0x4a,0x34,0x24,0x00,0x4b,0x34,0x28,0x00,0x4c,0x34,\r
+0x2c,0x00,0x4d,0x34,0x30,0x00,0x4e,0x34,0x34,0x00,0x4f,0x34,0x38,0x00,0x50,0x34,\r
+0x02,0x80,0x02,0x3c,0x00,0x00,0x60,0xac,0x00,0x00,0x80,0xac,0x00,0x00,0xa0,0xac,\r
+0xff,0xff,0x04,0x24,0x00,0x00,0xc0,0xac,0x21,0x28,0x00,0x00,0x00,0x00,0xe0,0xac,\r
+0x78,0x1b,0x46,0x24,0x00,0x00,0x00,0xad,0x00,0x00,0x20,0xad,0x00,0x00,0x40,0xad,\r
+0x00,0x00,0x60,0xad,0x00,0x00,0x80,0xad,0x00,0x00,0xa0,0xad,0x00,0x00,0xc0,0xad,\r
+0x00,0x00,0xe0,0xad,0x00,0x00,0x00,0xae,0x00,0x00,0x20,0xae,0x21,0x18,0xa6,0x00,\r
+0x01,0x00,0xa5,0x24,0x08,0x00,0xa2,0x28,0xfc,0xff,0x40,0x14,0xf0,0x04,0x64,0xa0,\r
+0x02,0x80,0x02,0x3c,0x78,0x1b,0x43,0x24,0x1f,0x00,0x05,0x24,0x90,0x11,0x62,0x8c,\r
+0xff,0xff,0xa5,0x24,0xf0,0x00,0x42,0x34,0x90,0x11,0x62,0xac,0xfb,0xff,0xa1,0x04,\r
+0x94,0x00,0x63,0x24,0x90,0x43,0xa3,0x96,0x25,0xb0,0x02,0x3c,0x64,0x03,0x42,0x34,\r
+0xf7,0x00,0x63,0x30,0x00,0x00,0x43,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,\r
+0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,\r
+0xc5,0x48,0x00,0x08,0x00,0x00,0x00,0x00,0x78,0x1b,0x62,0x8e,0xb5,0x48,0x00,0x08,\r
+0x24,0x10,0x43,0x00,0x78,0x1b,0x64,0x8e,0xe8,0x02,0xc5,0x8c,0xfe,0xff,0x02,0x24,\r
+0x00,0x90,0x03,0x3c,0x24,0x20,0x82,0x00,0x24,0x18,0xa3,0x00,0x00,0x10,0x02,0x3c,\r
+0x35,0xfe,0x62,0x14,0x78,0x1b,0x64,0xae,0x50,0x0c,0x03,0x35,0xff,0xbf,0x02,0x3c,\r
+0x00,0x00,0x64,0x90,0xff,0xff,0x42,0x34,0x24,0x10,0xa2,0x00,0x00,0x80,0x03,0x3c,\r
+0x25,0x10,0x43,0x00,0xe8,0x02,0xc2,0xac,0xac,0x48,0x00,0x08,0xdb,0x02,0xc4,0xa0,\r
+0x07,0xfe,0x40,0x14,0xc4,0x02,0x23,0x36,0xff,0xff,0x02,0x24,0x21,0xa0,0x00,0x00,\r
+0x00,0x00,0xc0,0xac,0x00,0x00,0x62,0xac,0x8a,0x48,0x00,0x08,0x00,0x00,0x00,0x00,\r
+0xff,0xff,0x03,0x24,0x78,0x1b,0x42,0x24,0xea,0x02,0x43,0xa0,0x90,0x43,0xa2,0x96,\r
+0x01,0x00,0x03,0x24,0x00,0x02,0x42,0x30,0x1b,0xff,0x43,0x14,0x00,0x00,0x00,0x00,\r
+0x78,0x1b,0x62,0x8e,0x25,0xb0,0x03,0x3c,0x77,0x00,0x04,0x24,0x02,0x00,0x42,0x34,\r
+0x99,0x0c,0x63,0x34,0x00,0x00,0x64,0xa0,0x78,0x1b,0x62,0xae,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0xb1,0x49,0x00,0x08,0x25,0xb0,0x04,0x3c,0xa5,0x00,0x82,0x34,\r
+0xf1,0x02,0xa2,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x45,0x00,0x77,0x00,0x40,0x14,\r
+0x00,0xfe,0x06,0x3c,0x28,0x00,0x82,0x34,0x0b,0x03,0xa2,0x10,0x0f,0x00,0x10,0x3c,\r
+0x2b,0x10,0x45,0x00,0xb4,0x00,0x40,0x14,0xa1,0x00,0x82,0x34,0x18,0x00,0x82,0x34,\r
+0x1c,0x03,0xa2,0x10,0x2b,0x10,0x45,0x00,0x41,0x01,0x40,0x14,0x23,0x00,0x82,0x34,\r
+0x16,0x00,0x82,0x34,0xf2,0x03,0xa2,0x10,0x02,0x14,0x12,0x00,0x17,0x00,0x82,0x34,\r
+0xcf,0xfd,0xa2,0x14,0x25,0xb0,0x04,0x3c,0x68,0x03,0x85,0x34,0x00,0x00,0xa3,0x8c,\r
+0x00,0xff,0x42,0x32,0x00,0x12,0x02,0x00,0xff,0xff,0x74,0x30,0x25,0x10,0x54,0x00,\r
+0x00,0x00,0xa2,0xac,0x64,0x03,0x84,0x34,0x00,0x00,0x82,0x90,0x00,0x00,0x00,0x00,\r
+0xff,0x00,0x54,0x30,0x40,0x00,0x83,0x36,0x00,0x00,0x83,0xa0,0x87,0x48,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0x25,0xb0,0x04,0x3c,0x94,0x0e,0x82,0x34,0x9c,0x0e,0x83,0x34,\r
+0xa4,0x0e,0x85,0x34,0xac,0x0e,0x86,0x34,0x00,0x00,0x49,0x8c,0x00,0x00,0x6c,0x8c,\r
+0xb4,0x0e,0x82,0x34,0x00,0x00,0xae,0x8c,0x10,0x00,0xe3,0x8d,0x00,0x00,0xc8,0x8c,\r
+0x0c,0x00,0xe5,0x8d,0x00,0x00,0x4a,0x8c,0xff,0x3f,0x02,0x3c,0xff,0x03,0x06,0x3c,\r
+0xff,0xff,0x42,0x34,0x00,0xfc,0x07,0x24,0x24,0x18,0x62,0x00,0x24,0x48,0x26,0x01,\r
+0xbc,0x0e,0x82,0x34,0x24,0x40,0x06,0x01,0x00,0x00,0x4b,0x8c,0x24,0x18,0x67,0x00,\r
+0x24,0x28,0xa7,0x00,0x02,0x44,0x08,0x00,0xcc,0x0e,0x8d,0x34,0x02,0x4c,0x09,0x00,\r
+0xc4,0x0e,0x84,0x34,0xf0,0xff,0x02,0x3c,0x00,0x00,0x87,0x8c,0xff,0x03,0x42,0x34,\r
+0x00,0x00,0xa4,0x8d,0x25,0x18,0x68,0x00,0x25,0x28,0xa9,0x00,0x24,0x60,0x86,0x01,\r
+0x24,0x50,0x46,0x01,0xa0,0x43,0x08,0x8e,0x24,0x18,0x62,0x00,0x24,0x28,0xa2,0x00,\r
+0x82,0x61,0x0c,0x00,0x82,0x51,0x0a,0x00,0x0f,0xc0,0x02,0x3c,0xff,0xff,0x42,0x34,\r
+0x25,0x28,0xac,0x00,0x25,0x18,0x6a,0x00,0x24,0x70,0xc6,0x01,0x24,0x58,0x66,0x01,\r
+0x24,0x18,0x62,0x00,0x24,0x28,0xa2,0x00,0x24,0x20,0x86,0x00,0x00,0x71,0x0e,0x00,\r
+0x00,0x59,0x0b,0x00,0x24,0x38,0xe6,0x00,0xff,0xff,0x02,0x3c,0x25,0x28,0xae,0x00,\r
+0x25,0x18,0x6b,0x00,0x02,0x3c,0x07,0x00,0x02,0x24,0x04,0x00,0x24,0x40,0x02,0x01,\r
+0x0c,0x00,0xe5,0xad,0x10,0x00,0xe3,0xad,0x14,0x00,0xe7,0xa5,0x56,0x00,0x00,0x11,\r
+0x16,0x00,0xe4,0xa5,0xa0,0x43,0x03,0x8e,0xa0,0x43,0x02,0x8e,0x02,0x1c,0x03,0x00,\r
+0x24,0x10,0x51,0x00,0x02,0x16,0x02,0x00,0xc7,0x02,0xe2,0xa1,0xc3,0x02,0xe3,0xa1,\r
+0x6c,0x56,0x00,0x0c,0x10,0x00,0xa4,0x27,0x90,0x43,0xa3,0x96,0x25,0xb0,0x02,0x3c,\r
+0x64,0x03,0x42,0x34,0xbf,0x00,0x63,0x30,0x00,0x00,0x43,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,\r
+0x00,0x00,0x00,0x00,0x8b,0x49,0x00,0x08,0x78,0x1b,0x62,0x26,0x10,0x00,0xc2,0x34,\r
+0x7a,0x02,0xa2,0x10,0x2b,0x10,0x45,0x00,0x9a,0x00,0x40,0x14,0x19,0x00,0xc2,0x34,\r
+0xaa,0x00,0x82,0x34,0x12,0x03,0xa2,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x45,0x00,\r
+0x2d,0x01,0x40,0x14,0xae,0x00,0x82,0x34,0xa6,0x00,0x82,0x34,0xdf,0x03,0xa2,0x10,\r
+0x00,0x00,0x00,0x00,0xa7,0x00,0x82,0x34,0x5a,0xfd,0xa2,0x14,0x25,0xb0,0x02,0x3c,\r
+0x00,0xff,0x42,0x32,0x02,0xa2,0x02,0x00,0x02,0x1c,0x12,0x00,0x01,0x00,0x02,0x24,\r
+0x50,0x04,0x82,0x12,0xff,0x00,0x68,0x30,0x02,0x00,0x02,0x24,0x41,0x04,0x82,0x12,\r
+0xc0,0x10,0x08,0x00,0x03,0x00,0x02,0x24,0x4d,0xfd,0x82,0x16,0xc0,0x10,0x08,0x00,\r
+0x21,0x10,0x48,0x00,0x80,0x10,0x02,0x00,0x02,0x80,0x04,0x3c,0x21,0x10,0x48,0x00,\r
+0x08,0x2d,0x83,0x24,0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x8c,\r
+0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,0x87,0x48,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0x02,0x00,0x82,0x34,0x65,0x02,0xa2,0x10,0x2b,0x10,0x45,0x00,\r
+0x8b,0x00,0x40,0x14,0x10,0x00,0xc2,0x34,0x00,0xf8,0x03,0x3c,0x17,0x00,0x62,0x34,\r
+0x4b,0x03,0xa2,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x45,0x00,0x0e,0x01,0x40,0x14,\r
+0x15,0x00,0x62,0x34,0x3c,0x04,0xa2,0x10,0x00,0x00,0x00,0x00,0x16,0x00,0x62,0x34,\r
+0x2f,0xfd,0xa2,0x14,0x00,0x00,0x00,0x00,0x58,0x13,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x12,0x00,0x02,0x24,0xc7,0x02,0xe2,0xa1,\r
+0x0e,0x4b,0x00,0x08,0xc3,0x02,0xe2,0xa1,0xd0,0x02,0xa2,0x10,0x00,0x00,0x00,0x00,\r
+0x2b,0x10,0x45,0x00,0x7f,0x00,0x40,0x14,0xa3,0x00,0x82,0x34,0x29,0x00,0x82,0x34,\r
+0xa6,0x03,0xa2,0x10,0xa0,0x00,0x82,0x34,0x1e,0xfd,0xa2,0x14,0x25,0xb0,0x02,0x3c,\r
+0x00,0x0f,0x42,0x32,0x02,0x22,0x02,0x00,0x01,0x00,0x03,0x24,0x3b,0x04,0x83,0x10,\r
+0x00,0x00,0x00,0x00,0x02,0x00,0x02,0x24,0x45,0x04,0x82,0x10,0x00,0x00,0x00,0x00,\r
+0x03,0x00,0x02,0x24,0xff,0x03,0x82,0x10,0x00,0x00,0x00,0x00,0x15,0x51,0x00,0x0c,\r
+0x21,0x20,0x00,0x00,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0xf1,0x04,0x3c,\r
+0x02,0x00,0x82,0x34,0x0a,0xfd,0xa2,0x10,0x2b,0x10,0x45,0x00,0x1c,0x01,0x40,0x14,\r
+0x04,0x00,0x82,0x34,0x44,0x03,0xa4,0x10,0x26,0xb0,0x06,0x3c,0x01,0x00,0x82,0x34,\r
+0x04,0xfd,0xa2,0x14,0x25,0xb0,0x02,0x3c,0x00,0xff,0x42,0x32,0x02,0xf2,0x02,0x00,\r
+0xba,0x03,0xc0,0x13,0x25,0xb0,0x05,0x3c,0x94,0x00,0xa2,0x34,0x00,0x00,0x43,0x94,\r
+0xb0,0x03,0xa6,0x34,0xff,0xff,0xca,0x27,0xff,0xff,0x74,0x30,0x1b,0x00,0x9e,0x02,\r
+0x02,0x00,0xc0,0x17,0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00,0x00,0x00,0xd4,0xac,\r
+0x78,0x1b,0x68,0x26,0x01,0x00,0x02,0x24,0xef,0x0a,0x02,0xa1,0x80,0xff,0x02,0x24,\r
+0x4f,0x00,0xab,0x34,0x9e,0x00,0xac,0x34,0xf2,0x0a,0x09,0x95,0x44,0x00,0xa7,0x34,\r
+0xd8,0x00,0xa5,0x34,0x12,0xa0,0x00,0x00,0x80,0x22,0x14,0x00,0x00,0xf8,0x84,0x24,\r
+0x18,0x00,0xd4,0x03,0xff,0xff,0x5e,0x31,0x00,0x19,0x1e,0x00,0x25,0x18,0x62,0x00,\r
+0x26,0xb0,0x02,0x3c,0x00,0x00,0xde,0xac,0x7c,0x00,0x42,0x34,0x00,0x00,0x63,0xa1,\r
+0x00,0x00,0xd4,0xac,0x00,0x00,0x94,0xa5,0x42,0xa1,0x04,0x00,0x00,0x00,0xd4,0xac,\r
+0x00,0x00,0x54,0xa4,0x00,0x00,0xe3,0x94,0xff,0xfd,0x02,0x24,0x24,0x18,0x62,0x00,\r
+0x00,0x00,0xe3,0xa4,0x00,0x00,0xe4,0x94,0x12,0x68,0x00,0x00,0x23,0x48,0x2d,0x01,\r
+0x00,0x02,0x84,0x34,0xf4,0x0a,0x09,0xa5,0x00,0x00,0xe4,0xa4,0x00,0x00,0xa2,0x90,\r
+0x00,0x00,0x00,0x00,0x40,0x00,0x42,0x34,0x00,0x00,0xa2,0xa0,0x87,0x48,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0x35,0x02,0xa2,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x45,0x00,\r
+0xac,0x00,0x40,0x14,0x12,0x00,0xc2,0x34,0xac,0x02,0xa2,0x10,0x00,0x00,0x00,0x00,\r
+0x2b,0x10,0xa2,0x00,0x2d,0x03,0x40,0x14,0x00,0x00,0x00,0x00,0x18,0x00,0xc2,0x34,\r
+0xbf,0xfc,0xa2,0x14,0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x78,0x1b,0x62,0x26,0x83,0x0b,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x26,0x02,0xa2,0x10,0x2b,0x10,0x45,0x00,0xd7,0x00,0x40,0x14,0x12,0x00,0xc2,0x34,\r
+0x03,0x00,0x82,0x34,0x23,0x03,0xa2,0x10,0x07,0x00,0xc2,0x34,0xa8,0xfc,0xa2,0x14,\r
+0x00,0x00,0x00,0x00,0x34,0x59,0x00,0x0c,0x21,0x20,0x40,0x02,0x87,0x48,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0x5f,0x01,0xa2,0x10,0x2b,0x10,0x45,0x00,0x01,0x01,0x40,0x14,\r
+0x78,0x1b,0x63,0x26,0x25,0xb0,0x02,0x3c,0xff,0x00,0x03,0x3c,0xc4,0x02,0x42,0x34,\r
+0x00,0xff,0x63,0x34,0x24,0x18,0x43,0x02,0x00,0x00,0x45,0x8c,0x02,0xf2,0x03,0x00,\r
+0x21,0x52,0x00,0x0c,0x21,0x20,0xc0,0x03,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x9e,0x02,0xa2,0x10,0x2b,0x10,0x45,0x00,0xfb,0x00,0x40,0x14,0x24,0x00,0x82,0x34,\r
+0x19,0x00,0x82,0x34,0x8f,0xfc,0xa2,0x14,0x25,0xb0,0x02,0x3c,0x25,0xb0,0x03,0x3c,\r
+0xc0,0x02,0x62,0x34,0x00,0x00,0x40,0xac,0x94,0x0e,0x64,0x34,0x9c,0x0e,0x62,0x34,\r
+0xa4,0x0e,0x65,0x34,0xac,0x0e,0x66,0x34,0x00,0x00,0x89,0x8c,0x78,0x1b,0x6f,0x26,\r
+0x00,0x00,0x4b,0x8c,0x00,0x00,0xac,0x8c,0x00,0x00,0xc4,0x8c,0xb4,0x0e,0x62,0x34,\r
+0x0c,0x00,0xe5,0x8d,0x10,0x00,0xe6,0x8d,0x00,0x00,0x4a,0x8c,0xff,0x03,0x07,0x3c,\r
+0x00,0xfc,0x08,0x24,0xbc,0x0e,0x62,0x34,0x24,0x48,0x27,0x01,0x24,0x20,0x87,0x00,\r
+0x00,0x00,0x4d,0x8c,0x24,0x30,0xc8,0x00,0x02,0x4c,0x09,0x00,0x24,0x28,0xa8,0x00,\r
+0x02,0x24,0x04,0x00,0xcc,0x0e,0x68,0x34,0xf0,0xff,0x02,0x3c,0xc4,0x0e,0x63,0x34,\r
+0xff,0x03,0x42,0x34,0x25,0x28,0xa9,0x00,0x25,0x30,0xc4,0x00,0x00,0x00,0x69,0x8c,\r
+0x08,0x00,0xe4,0x8d,0x00,0x00,0x0e,0x8d,0x24,0x58,0x67,0x01,0x24,0x50,0x47,0x01,\r
+0x24,0x30,0xc2,0x00,0x24,0x28,0xa2,0x00,0x82,0x59,0x0b,0x00,0x82,0x51,0x0a,0x00,\r
+0x0f,0xc0,0x03,0x3c,0xff,0x9f,0x02,0x3c,0xff,0xff,0x63,0x34,0xff,0xff,0x42,0x34,\r
+0x25,0x28,0xab,0x00,0x25,0x30,0xca,0x00,0x24,0x60,0x87,0x01,0x24,0x68,0xa7,0x01,\r
+0xff,0x00,0x08,0x3c,0x24,0x20,0x82,0x00,0x24,0x30,0xc3,0x00,0x24,0x28,0xa3,0x00,\r
+0x24,0x70,0xc7,0x01,0x00,0x61,0x0c,0x00,0x00,0x69,0x0d,0x00,0x24,0x48,0x27,0x01,\r
+0x00,0xff,0x03,0x35,0x00,0x20,0x02,0x3c,0x25,0x20,0x82,0x00,0x25,0x28,0xac,0x00,\r
+0x25,0x30,0xcd,0x00,0x02,0x4c,0x09,0x00,0x02,0x74,0x0e,0x00,0x24,0x18,0x43,0x02,\r
+0x08,0x00,0xe4,0xad,0x0c,0x00,0xe5,0xad,0x10,0x00,0xe6,0xad,0x14,0x00,0xe9,0xa5,\r
+0x55,0x03,0x60,0x10,0x16,0x00,0xee,0xa5,0x24,0x10,0x48,0x02,0x02,0x14,0x02,0x00,\r
+0x02,0x1a,0x12,0x00,0xc7,0x02,0xe2,0xa1,0xc3,0x02,0xe3,0xa1,0x78,0x1b,0x62,0x26,\r
+0xc3,0x02,0x44,0x90,0x25,0xb0,0x03,0x3c,0x61,0x0c,0x63,0x34,0x00,0x00,0x64,0xa0,\r
+0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,\r
+0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x6c,0x56,0x00,0x0c,0x10,0x00,0xa4,0x27,\r
+0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x92,0x02,0xa2,0x10,0x00,0x00,0x00,0x00,\r
+0x2b,0x10,0x45,0x00,0x82,0x00,0x40,0x14,0xaf,0x00,0x82,0x34,0xab,0x00,0x82,0x34,\r
+0x2b,0xfc,0xa2,0x14,0x00,0x00,0x00,0x00,0x54,0x5a,0x00,0x0c,0x21,0x20,0x40,0x02,\r
+0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x3d,0x02,0xa4,0x10,0x2b,0x10,0x85,0x00,\r
+0x87,0x00,0x40,0x14,0x78,0x1b,0x62,0x26,0x18,0x00,0x62,0x34,0x20,0xfc,0xa2,0x14,\r
+0x00,0x00,0x00,0x00,0xb1,0x13,0x00,0x0c,0x00,0x00,0x00,0x00,0x87,0x48,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0x00,0xff,0x03,0x3c,0x0f,0x00,0x62,0x34,0x0d,0x02,0xa2,0x10,\r
+0x2b,0x10,0x45,0x00,0x70,0x00,0x40,0x14,0x10,0x00,0x62,0x34,0x1a,0x00,0xc2,0x34,\r
+0x14,0xfc,0xa2,0x14,0x25,0xb0,0x02,0x3c,0xff,0x00,0x02,0x3c,0x00,0xff,0x42,0x34,\r
+0x24,0x10,0x42,0x02,0x02,0xf2,0x02,0x00,0x01,0x00,0x03,0x24,0x28,0x03,0xc3,0x13,\r
+0x78,0x1b,0x62,0x26,0x02,0x00,0xc2,0x2b,0x1f,0x03,0x40,0x14,0x03,0x00,0x02,0x24,\r
+0x19,0x03,0xc2,0x13,0x00,0x00,0x00,0x00,0x78,0x1b,0x62,0x26,0x7c,0x0b,0x44,0x94,\r
+0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,0x87,0x48,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0xcd,0x01,0xa2,0x10,0x2b,0x10,0xa2,0x00,0x7b,0x00,0x40,0x14,\r
+0x02,0x14,0x12,0x00,0x08,0x00,0x82,0x34,0xfa,0xfb,0xa2,0x14,0x25,0xb0,0x02,0x3c,\r
+0x00,0xff,0x42,0x32,0x02,0x92,0x02,0x00,0x05,0x00,0x40,0x12,0x21,0x20,0x00,0x00,\r
+0x01,0x00,0x02,0x24,0x02,0x00,0x42,0x12,0x01,0x00,0x04,0x24,0x21,0x20,0x00,0x00,\r
+0x95,0x42,0x00,0x0c,0x00,0x00,0x00,0x00,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0xe8,0x01,0xa2,0x10,0x2b,0x10,0xa2,0x00,0x68,0x02,0x40,0x14,0x00,0x00,0x00,0x00,\r
+0xe8,0xfb,0xa8,0x14,0x25,0xb0,0x02,0x3c,0x25,0xb0,0x05,0x3c,0xc4,0x02,0xa3,0x34,\r
+0x00,0x00,0x64,0x8c,0xff,0x0f,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x90,0x82,0x00,\r
+0x01,0x00,0x03,0x3c,0x2b,0x18,0x72,0x00,0xdd,0xfb,0x60,0x10,0x00,0xb0,0x02,0x3c,\r
+0x25,0x90,0x42,0x02,0x00,0x00,0x54,0x8e,0xc8,0x02,0xa2,0x34,0x00,0x00,0x54,0xac,\r
+0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x75,0x02,0xa2,0x10,0x2b,0x10,0x45,0x00,\r
+0x66,0x00,0x40,0x14,0x02,0x1c,0x12,0x00,0x1f,0x00,0x68,0x30,0xc0,0x10,0x08,0x00,\r
+0x21,0x10,0x48,0x00,0x80,0x10,0x02,0x00,0x25,0xb0,0x04,0x3c,0x21,0x10,0x48,0x00,\r
+0x02,0x80,0x03,0x3c,0xc8,0x02,0x85,0x34,0x78,0x1b,0x63,0x24,0xc4,0x02,0x84,0x34,\r
+0x80,0x10,0x02,0x00,0x00,0x00,0x94,0x8c,0x21,0x48,0x43,0x00,0x00,0x00,0xa7,0x8c,\r
+0x21,0x58,0x80,0x00,0x21,0x28,0x00,0x00,0xff,0x00,0x0a,0x24,0x29,0xb0,0x06,0x3c,\r
+0x21,0x20,0xa3,0x00,0xf0,0x04,0x82,0x90,0x00,0x00,0x00,0x00,0x6a,0x02,0x4a,0x10,\r
+0x00,0x00,0x00,0x00,0x68,0x02,0x48,0x10,0x00,0x00,0x00,0x00,0x01,0x00,0xa5,0x24,\r
+0x08,0x00,0xa2,0x28,0xf6,0xff,0x40,0x14,0x08,0x00,0xc6,0x24,0x08,0x00,0x02,0x24,\r
+0xb3,0xfb,0xa2,0x14,0x00,0x00,0x00,0x00,0x25,0xb0,0x02,0x3c,0xff,0xff,0x03,0x24,\r
+0xc4,0x02,0x42,0x34,0x00,0x00,0x43,0xac,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0xab,0xfb,0xa2,0x14,0x00,0x00,0x00,0x00,0xe5,0x50,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0xa6,0xfb,0xa2,0x14,0x25,0xb0,0x02,0x3c,\r
+0x00,0xff,0x43,0x32,0x00,0xff,0x02,0x34,0x5f,0x00,0x62,0x14,0x78,0x1b,0x62,0x26,\r
+0x78,0x1b,0x63,0x26,0xff,0xff,0x02,0x34,0x86,0x48,0x00,0x08,0xec,0x25,0x62,0xac,\r
+0x04,0x24,0x43,0x8c,0xfd,0xff,0x04,0x24,0x24,0x18,0x64,0x00,0x01,0x00,0x63,0x34,\r
+0x86,0x48,0x00,0x08,0x04,0x24,0x43,0xac,0x96,0xfb,0xa2,0x14,0x25,0xb0,0x02,0x3c,\r
+0x78,0x1b,0x65,0x26,0xd8,0x02,0xa3,0x8c,0x0f,0xff,0x02,0x3c,0xff,0xff,0x42,0x34,\r
+0x24,0x18,0x62,0x00,0x12,0x01,0x04,0x3c,0x25,0xb0,0x02,0x3c,0x0c,0x09,0x42,0x34,\r
+0x13,0x13,0x84,0x34,0xd8,0x02,0xa3,0xac,0x00,0x00,0x44,0xac,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,\r
+0x00,0x00,0x00,0x00,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0xff,0x43,0x32,\r
+0xff,0x00,0x5e,0x30,0x04,0x00,0xc0,0x13,0x02,0x92,0x03,0x00,0x01,0x00,0x02,0x24,\r
+0x02,0x00,0xc2,0x13,0x01,0x00,0x04,0x24,0x21,0x20,0x00,0x00,0x95,0x42,0x00,0x0c,\r
+0x0f,0x00,0x10,0x3c,0xff,0xff,0x05,0x36,0xe3,0x44,0x00,0x0c,0x21,0x20,0x40,0x02,\r
+0xff,0xff,0x10,0x36,0x24,0xa0,0x50,0x00,0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34,\r
+0x00,0x00,0x54,0xac,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x1f,0x00,0x68,0x30,\r
+0xc0,0x10,0x08,0x00,0x21,0x10,0x48,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x48,0x00,\r
+0x80,0x10,0x02,0x00,0x78,0x1b,0x64,0x26,0x21,0x30,0x44,0x00,0x90,0x11,0xc3,0x90,\r
+0x0f,0x00,0x02,0x24,0x02,0x29,0x03,0x00,0xaf,0xff,0xa2,0x10,0x21,0x18,0xa4,0x00,\r
+0xf0,0x04,0x62,0x90,0x00,0x00,0x00,0x00,0xab,0xff,0x48,0x14,0xc0,0x20,0x05,0x00,\r
+0xff,0xff,0x02,0x24,0xf0,0x04,0x62,0xa0,0x90,0x11,0xc3,0x8c,0x29,0xb0,0x02,0x3c,\r
+0x21,0x20,0x82,0x00,0x25,0xb0,0x02,0x3c,0xf0,0x00,0x63,0x34,0xc4,0x02,0x42,0x34,\r
+0x90,0x11,0xc3,0xac,0x00,0x00,0x80,0xac,0x04,0x00,0x80,0xac,0x00,0x00,0x45,0xac,\r
+0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0xff,0x42,0x34,0x24,0x10,0x42,0x02,\r
+0x25,0xb0,0x03,0x3c,0x02,0x92,0x02,0x00,0x21,0x10,0x43,0x02,0x00,0x00,0x54,0x8c,\r
+0xc4,0x02,0x63,0x34,0x00,0x00,0x74,0xac,0x00,0x00,0x54,0x8c,0x87,0x48,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0x78,0x1b,0x62,0x26,0x86,0x48,0x00,0x08,0xec,0x25,0x40,0xac,\r
+0xdb,0x02,0xe3,0x90,0x50,0x0c,0x02,0x35,0x21,0x28,0x00,0x00,0x00,0x00,0x43,0xa0,\r
+0x01,0x00,0xa2,0x24,0xff,0x00,0x45,0x30,0x06,0x00,0xa3,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0xa2,0x24,0x78,0x1b,0x62,0x26,0xdb,0x02,0x44,0x90,0x25,0xb0,0x03,0x3c,\r
+0x58,0x0c,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,\r
+0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,\r
+0x78,0x1b,0x65,0x26,0xe8,0x02,0xa3,0x8c,0x00,0x40,0x04,0x3c,0xff,0x7f,0x02,0x3c,\r
+0x25,0x18,0x64,0x00,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0xac,0x48,0x00,0x08,\r
+0xe8,0x02,0xa3,0xac,0x00,0xff,0x62,0x34,0x24,0x10,0x42,0x02,0x21,0xfb,0x40,0x10,\r
+0x25,0xb0,0x02,0x3c,0x08,0x03,0xe5,0x90,0x24,0x18,0x43,0x02,0x00,0xff,0x44,0x32,\r
+0x02,0x1c,0x03,0x00,0x02,0x22,0x04,0x00,0x00,0x01,0xa5,0x34,0xfb,0xff,0x66,0x24,\r
+0xfb,0xff,0x82,0x24,0x23,0x03,0xe2,0xa0,0x08,0x03,0xe5,0xac,0x21,0x03,0xe6,0xa0,\r
+0x20,0x03,0xe3,0xa0,0x86,0x48,0x00,0x08,0x22,0x03,0xe4,0xa0,0x07,0x49,0x00,0x08,\r
+0x01,0x00,0x04,0x24,0xdd,0x48,0x00,0x08,0x01,0x00,0x04,0x24,0x07,0x49,0x00,0x08,\r
+0x02,0x00,0x04,0x24,0xdd,0x48,0x00,0x08,0x02,0x00,0x04,0x24,0xc4,0x02,0x23,0x36,\r
+0x00,0x00,0x64,0x8c,0xff,0x0f,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x90,0x82,0x00,\r
+0x01,0x00,0x03,0x3c,0x2b,0x18,0x72,0x00,0x01,0xfb,0x60,0x10,0xc8,0x02,0x22,0x36,\r
+0x00,0x00,0x54,0x8c,0x00,0xb0,0x03,0x3c,0x25,0x90,0x43,0x02,0x00,0x00,0x54,0xae,\r
+0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x6c,0x56,0x00,0x0c,0x10,0x00,0xa4,0x27,\r
+0x8b,0x49,0x00,0x08,0x78,0x1b,0x62,0x26,0x76,0x52,0x00,0x0c,0x10,0x00,0xeb,0xad,\r
+0x73,0x49,0x00,0x08,0x78,0x1b,0x63,0x26,0x24,0x20,0x43,0x02,0x5b,0x52,0x00,0x0c,\r
+0x02,0x24,0x04,0x00,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x82,0x0b,0xe2,0x90,\r
+0x00,0x00,0x00,0x00,0x31,0xfe,0x40,0x14,0x00,0x00,0x00,0x00,0x00,0xff,0x62,0x34,\r
+0x24,0x10,0x42,0x02,0x02,0xf2,0x02,0x00,0x01,0x00,0x02,0x24,0x21,0x20,0xc0,0x03,\r
+0x82,0x0b,0xe2,0xa0,0x2c,0x22,0x00,0x0c,0x83,0x0b,0xfe,0xa0,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x04,0x24,0xe2,0x8c,0xfe,0xff,0x03,0x24,0x02,0x00,0x42,0x34,0x24,0x10,0x43,0x00,\r
+0x86,0x48,0x00,0x08,0x04,0x24,0xe2,0xac,0xff,0xff,0x05,0x36,0x60,0x00,0x06,0x24,\r
+0xb8,0x44,0x00,0x0c,0x24,0x00,0x04,0x24,0x9c,0x12,0x00,0x0c,0xe8,0x03,0x04,0x24,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x24,0x00,0x04,0x24,0xe3,0x44,0x00,0x0c,0xff,0xff,0x05,0x36,0x1f,0x00,0x54,0x30,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0xcb,0x12,0x00,0x0c,\r
+0x64,0x00,0x04,0x24,0xc4,0x02,0x22,0x36,0x00,0x00,0x54,0xa0,0x87,0x48,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0x08,0x00,0xe3,0x8c,0xff,0x9f,0x02,0x3c,0xff,0xff,0x42,0x34,\r
+0x24,0x18,0x62,0x00,0x86,0x48,0x00,0x08,0x08,0x00,0xe3,0xac,0xc8,0x02,0xe4,0x8c,\r
+0xff,0x0f,0x02,0x3c,0xff,0xff,0x42,0x34,0x02,0x1f,0x04,0x00,0x01,0x00,0x63,0x24,\r
+0x24,0x20,0x82,0x00,0x00,0x1f,0x03,0x00,0x25,0x20,0x83,0x00,0xc8,0x02,0xe4,0xac,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x76,0x52,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x00,0x60,0x81,0x40,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0xff,0x62,0x34,\r
+0xc4,0x02,0x24,0x36,0x00,0x00,0x94,0x8c,0x24,0x10,0x42,0x02,0x02,0x92,0x02,0x00,\r
+0x21,0x18,0x51,0x02,0x00,0x00,0x74,0xac,0x00,0x00,0x74,0x8c,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x94,0xac,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x82,0x0b,0xe3,0x90,\r
+0xc4,0x02,0x22,0x36,0x00,0x00,0x43,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x00,0x60,0x81,0x40,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x29,0xb0,0x02,0x3c,\r
+0x00,0x00,0x40,0xac,0x04,0x00,0x44,0x34,0x08,0x00,0x45,0x34,0x0c,0x00,0x46,0x34,\r
+0x3c,0x00,0x43,0x34,0x10,0x00,0x47,0x34,0x14,0x00,0x48,0x34,0x18,0x00,0x49,0x34,\r
+0x1c,0x00,0x4a,0x34,0x20,0x00,0x4b,0x34,0x24,0x00,0x4c,0x34,0x28,0x00,0x4d,0x34,\r
+0x2c,0x00,0x4e,0x34,0x30,0x00,0x4f,0x34,0x34,0x00,0x50,0x34,0x38,0x00,0x51,0x34,\r
+0x02,0x80,0x02,0x3c,0x00,0x00,0x80,0xac,0x00,0x00,0xa0,0xac,0xff,0xff,0x04,0x24,\r
+0x00,0x00,0xc0,0xac,0x21,0x28,0x00,0x00,0x00,0x00,0xe0,0xac,0x78,0x1b,0x46,0x24,\r
+0x00,0x00,0x00,0xad,0x00,0x00,0x20,0xad,0x00,0x00,0x40,0xad,0x00,0x00,0x60,0xad,\r
+0x00,0x00,0x80,0xad,0x00,0x00,0xa0,0xad,0x00,0x00,0xc0,0xad,0x00,0x00,0xe0,0xad,\r
+0x00,0x00,0x00,0xae,0x00,0x00,0x20,0xae,0x00,0x00,0x60,0xac,0x21,0x18,0xa6,0x00,\r
+0x01,0x00,0xa5,0x24,0x08,0x00,0xa2,0x28,0xfc,0xff,0x40,0x14,0xf0,0x04,0x64,0xa0,\r
+0x02,0x80,0x02,0x3c,0x78,0x1b,0x43,0x24,0x1f,0x00,0x05,0x24,0x90,0x11,0x62,0x8c,\r
+0xff,0xff,0xa5,0x24,0xf0,0x00,0x42,0x34,0x90,0x11,0x62,0xac,0xfb,0xff,0xa1,0x04,\r
+0x94,0x00,0x63,0x24,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x24,0x20,0x43,0x02,\r
+0xc6,0x15,0x00,0x0c,0x02,0x24,0x04,0x00,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x6e,0x5a,0x00,0x0c,0x00,0x00,0x00,0x00,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x02,0x1a,0x08,0x00,0xff,0x00,0x02,0x24,0x2b,0x01,0x62,0x10,0x25,0xb0,0x05,0x3c,\r
+0x0e,0x00,0x60,0x14,0x00,0xcc,0x02,0x34,0x25,0xb0,0x04,0x3c,0x64,0x03,0x84,0x34,\r
+0x78,0x1b,0x67,0x26,0x00,0x00,0x85,0x94,0xe8,0x02,0xe6,0x8c,0xff,0xef,0x02,0x3c,\r
+0xff,0xfe,0x03,0x24,0xff,0xff,0x42,0x34,0x24,0x28,0xa3,0x00,0x24,0x30,0xc2,0x00,\r
+0x00,0x00,0x85,0xa4,0xe8,0x02,0xe6,0xac,0x00,0xcc,0x02,0x34,0x39,0xfa,0x02,0x15,\r
+0x25,0xb0,0x02,0x3c,0x78,0x1b,0x62,0x26,0xe8,0x02,0x43,0x8c,0x00,0x10,0x04,0x3c,\r
+0x25,0x18,0x64,0x00,0x86,0x48,0x00,0x08,0xe8,0x02,0x43,0xac,0x24,0x10,0x43,0x02,\r
+0x02,0xf4,0x02,0x00,0x00,0xff,0x43,0x32,0x04,0x00,0xc0,0x13,0x02,0x92,0x03,0x00,\r
+0x01,0x00,0x02,0x24,0x02,0x00,0xc2,0x13,0x01,0x00,0x04,0x24,0x21,0x20,0x00,0x00,\r
+0x25,0xb0,0x10,0x3c,0x95,0x42,0x00,0x0c,0xc4,0x02,0x10,0x36,0x00,0x00,0x14,0x8e,\r
+0x0f,0x00,0x11,0x3c,0x21,0x20,0x40,0x02,0x21,0x30,0x80,0x02,0xb8,0x44,0x00,0x0c,\r
+0xff,0xff,0x25,0x36,0x21,0x20,0x40,0x02,0xe3,0x44,0x00,0x0c,0xff,0xff,0x25,0x36,\r
+0x00,0x00,0x02,0xae,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x00,0xff,0x62,0x34,\r
+0x24,0x10,0x42,0x02,0x02,0xf2,0x02,0x00,0x78,0x1b,0x63,0x26,0x83,0x0b,0x7e,0xa0,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x87,0x48,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0x25,0xb0,0x03,0x3c,0xff,0x00,0x02,0x24,0x56,0x01,0x63,0x34,\r
+0x00,0x00,0x62,0xa4,0x01,0x00,0x04,0x24,0x02,0x80,0x02,0x3c,0x86,0x48,0x00,0x08,\r
+0x80,0x43,0x44,0xa0,0x24,0x10,0x43,0x02,0x02,0xa4,0x02,0x00,0x00,0xff,0x43,0x32,\r
+0x07,0x00,0x82,0x2e,0xfe,0xf9,0x40,0x10,0x02,0xf2,0x03,0x00,0x02,0x80,0x04,0x3c,\r
+0xbc,0xaf,0x83,0x24,0x80,0x10,0x14,0x00,0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x8c,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x78,0x1b,0x65,0x26,\r
+0xd8,0x02,0xa3,0x8c,0x0f,0xff,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,\r
+0x10,0x00,0x04,0x3c,0x25,0x18,0x64,0x00,0x86,0x48,0x00,0x08,0xd8,0x02,0xa3,0xac,\r
+0xe4,0x13,0x00,0x0c,0x00,0x00,0x00,0x00,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x78,0x1b,0x65,0x26,0x04,0x24,0xa2,0x8c,0xfd,0xff,0x03,0x24,0xfe,0xff,0x04,0x24,\r
+0x24,0x10,0x43,0x00,0x24,0x10,0x44,0x00,0x86,0x48,0x00,0x08,0x04,0x24,0xa2,0xac,\r
+0x1f,0x00,0x48,0x30,0xc0,0x18,0x08,0x00,0x21,0x18,0x68,0x00,0x00,0x0f,0x45,0x32,\r
+0x80,0x18,0x03,0x00,0x02,0x2a,0x05,0x00,0x78,0x1b,0x64,0x26,0x25,0xb0,0x02,0x3c,\r
+0x21,0x18,0x68,0x00,0x21,0x30,0xa4,0x00,0xc8,0x02,0x47,0x34,0x80,0x18,0x03,0x00,\r
+0xc4,0x02,0x42,0x34,0x00,0x00,0x54,0x8c,0x21,0x18,0x64,0x00,0x00,0x00,0xe7,0x8c,\r
+0xf0,0x04,0xc8,0xa0,0x90,0x11,0x64,0x8c,0x0f,0xff,0x02,0x24,0xc0,0x30,0x05,0x00,\r
+0x24,0x20,0x82,0x00,0x00,0x29,0x05,0x00,0x29,0xb0,0x02,0x3c,0x21,0x30,0xc2,0x00,\r
+0x25,0x20,0x85,0x00,0x90,0x11,0x64,0xac,0x00,0x00,0xd4,0xac,0x04,0x00,0xc7,0xac,\r
+0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0xff,0x65,0x34,0x24,0x28,0x45,0x02,\r
+0x25,0xb0,0x04,0x3c,0x02,0x2a,0x05,0x00,0x94,0x00,0x83,0x34,0x40,0x11,0x05,0x00,\r
+0x00,0x00,0x65,0xa4,0xc0,0xff,0x54,0x24,0x7c,0x00,0xcc,0x34,0x04,0x00,0x07,0x24,\r
+0x9a,0x00,0x88,0x34,0x98,0x00,0x89,0x34,0x96,0x00,0x8a,0x34,0x7a,0x00,0xc6,0x34,\r
+0xb0,0x03,0x8b,0x34,0x00,0x04,0x02,0x24,0xa0,0x00,0x03,0x24,0x00,0x00,0x02,0xa5,\r
+0x44,0x00,0x84,0x34,0x00,0x00,0x23,0xa5,0x00,0x00,0x47,0xa5,0x00,0x00,0xc7,0xa0,\r
+0x00,0x00,0x74,0xad,0x00,0x00,0x94,0xa5,0x00,0x00,0x83,0x94,0xff,0xfd,0x02,0x24,\r
+0x78,0x1b,0x66,0x26,0x24,0x18,0x62,0x00,0x00,0x00,0x83,0xa4,0x00,0x00,0x82,0x94,\r
+0xf2,0x0a,0xc5,0xa4,0x00,0x02,0x42,0x34,0x00,0x00,0x82,0xa4,0x87,0x48,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0x24,0x20,0x43,0x02,0x00,0xff,0x45,0x32,0x02,0x24,0x04,0x00,\r
+0x97,0x50,0x00,0x0c,0x02,0x2a,0x05,0x00,0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,\r
+0x00,0x00,0x62,0xa0,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0xff,0x00,0x02,0x3c,\r
+0x00,0xff,0x42,0x34,0x24,0x10,0x42,0x02,0x02,0xf2,0x02,0x00,0x78,0x1b,0x63,0x26,\r
+0x21,0x20,0xc0,0x03,0x2c,0x22,0x00,0x0c,0x82,0x0b,0x60,0xa0,0xa9,0x4d,0x00,0x08,\r
+0x00,0x00,0x00,0x00,0x78,0x1b,0x63,0x26,0x04,0x24,0x62,0x8c,0x00,0x00,0x00,0x00,\r
+0x03,0x00,0x42,0x34,0x86,0x48,0x00,0x08,0x04,0x24,0x62,0xac,0x6f,0x0b,0x00,0x0c,\r
+0x21,0x20,0xc0,0x03,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x5d,0x52,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x02,0x1c,0x12,0x00,\r
+0x00,0x1f,0x42,0x32,0x78,0x1b,0x70,0x26,0x02,0xa2,0x02,0x00,0x3f,0x00,0x67,0x30,\r
+0xc1,0x02,0x07,0xa2,0xbc,0x02,0x14,0xa2,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x22,0x1b,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x21,0xa0,0x40,0x00,0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34,0x00,0x00,0x54,0xac,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x03,0x00,0x02,0x92,\r
+0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24,0x86,0x48,0x00,0x08,0x03,0x00,0x02,0xa2,\r
+0x24,0x18,0x43,0x02,0x02,0x44,0x03,0x00,0xc0,0x10,0x08,0x00,0x21,0x10,0x48,0x00,\r
+0x80,0x10,0x02,0x00,0x21,0x10,0x48,0x00,0x00,0xff,0x44,0x32,0x80,0x10,0x02,0x00,\r
+0x78,0x1b,0x63,0x26,0x21,0x10,0x43,0x00,0x02,0xa1,0x04,0x00,0x80,0x11,0x54,0xac,\r
+0x86,0x48,0x00,0x08,0x84,0x11,0x54,0xac,0xf0,0x04,0x88,0xa0,0x90,0x11,0x22,0x8d,\r
+0x0f,0x00,0xa3,0x30,0x0f,0xff,0x04,0x24,0x00,0x19,0x03,0x00,0x24,0x10,0x44,0x00,\r
+0x25,0x10,0x43,0x00,0x90,0x11,0x22,0xad,0x00,0x00,0xd4,0xac,0x04,0x00,0xc7,0xac,\r
+0x00,0x00,0x65,0xad,0xd2,0x4c,0x00,0x08,0x08,0x00,0x02,0x24,0x4f,0x00,0xa2,0x34,\r
+0x9e,0x00,0xa3,0x34,0x00,0x00,0x40,0xa0,0x00,0x00,0x60,0xa4,0x94,0x00,0xa2,0x34,\r
+0x00,0x00,0x43,0x94,0x9a,0x00,0xa4,0x34,0x98,0x00,0xa6,0x34,0xff,0xff,0x74,0x30,\r
+0x80,0x12,0x14,0x00,0x00,0xf8,0x42,0x24,0x42,0xa1,0x02,0x00,0x00,0x14,0x02,0x24,\r
+0x00,0x00,0x82,0xa4,0x26,0xb0,0x02,0x3c,0xb0,0x03,0xa7,0x34,0xa0,0x80,0x03,0x24,\r
+0x7c,0x00,0x42,0x34,0x00,0x00,0xc3,0xa4,0x44,0x00,0xa4,0x34,0x00,0x00,0xf4,0xac,\r
+0x00,0x00,0x54,0xa4,0x00,0x00,0x83,0x94,0xff,0xfd,0x02,0x24,0xd8,0x00,0xa5,0x34,\r
+0x24,0x18,0x62,0x00,0x00,0x00,0x83,0xa4,0x00,0x00,0x82,0x94,0x78,0x1b,0x66,0x26,\r
+0x00,0x02,0x42,0x34,0x00,0x00,0x82,0xa4,0x00,0x00,0xa3,0x90,0xbf,0xff,0x02,0x24,\r
+0xf4,0x0a,0xc0,0xa4,0x24,0x18,0x62,0x00,0xef,0x0a,0xc0,0xa0,0x00,0x00,0xa3,0xa0,\r
+0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x64,0x03,0xa5,0x34,0x78,0x1b,0x66,0x26,\r
+0x00,0x00,0xa3,0x94,0xe8,0x02,0xc4,0x8c,0xff,0xef,0x02,0x3c,0xff,0xff,0x42,0x34,\r
+0x24,0x20,0x82,0x00,0x00,0x01,0x63,0x34,0x00,0x00,0xa3,0xa4,0x4c,0x4e,0x00,0x08,\r
+0xe8,0x02,0xc4,0xac,0x15,0x51,0x00,0x0c,0x03,0x00,0x04,0x24,0x87,0x48,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0x21,0x10,0x48,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x48,0x00,\r
+0x78,0x1b,0x63,0x26,0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,0x8c,0x11,0x44,0x8c,\r
+0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,0x87,0x48,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0xc0,0x10,0x08,0x00,0x21,0x10,0x48,0x00,0x80,0x10,0x02,0x00,\r
+0x21,0x10,0x48,0x00,0x78,0x1b,0x63,0x26,0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,\r
+0x88,0x11,0x44,0x8c,0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,\r
+0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x1e,0x13,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x12,0x00,0x02,0x24,0xc7,0x02,0xe2,0xa1,\r
+0x45,0x4c,0x00,0x08,0xc3,0x02,0xe2,0xa1,0x78,0x1b,0x62,0x26,0x7e,0x0b,0x44,0x94,\r
+0x43,0x4b,0x00,0x08,0x25,0xb0,0x03,0x3c,0xe3,0xfc,0xc0,0x17,0x25,0xb0,0x03,0x3c,\r
+0x78,0x1b,0x62,0x26,0x78,0x0b,0x44,0x94,0x44,0x4b,0x00,0x08,0xc4,0x02,0x63,0x34,\r
+0x7a,0x0b,0x44,0x94,0x43,0x4b,0x00,0x08,0x25,0xb0,0x03,0x3c,0x2b,0x4a,0x00,0x08,\r
+0x01,0x00,0x04,0x24,0x2b,0x4a,0x00,0x08,0x02,0x00,0x04,0x24,0x15,0x51,0x00,0x0c,\r
+0x01,0x00,0x04,0x24,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0x19,0x1e,0x00,\r
+0x78,0x1b,0x62,0x26,0x21,0x18,0x62,0x00,0x36,0x03,0x64,0x94,0x25,0xb0,0x02,0x3c,\r
+0xc4,0x02,0x42,0x34,0x00,0x00,0x44,0xac,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x15,0x51,0x00,0x0c,0x02,0x00,0x04,0x24,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x00,0x19,0x1e,0x00,0x78,0x1b,0x62,0x26,0x21,0x18,0x62,0x00,0x35,0x03,0x64,0x90,\r
+0xb2,0x4f,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0x19,0x1e,0x00,0x78,0x1b,0x62,0x26,\r
+0x21,0x18,0x62,0x00,0x34,0x03,0x64,0x90,0xb2,0x4f,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x00,0x19,0x1e,0x00,0x78,0x1b,0x62,0x26,0x21,0x18,0x62,0x00,0x32,0x03,0x64,0x94,\r
+0xb2,0x4f,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0x19,0x1e,0x00,0x78,0x1b,0x62,0x26,\r
+0x21,0x18,0x62,0x00,0x30,0x03,0x64,0x94,0xb2,0x4f,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x00,0x11,0x1e,0x00,0x78,0x1b,0x63,0x26,0x21,0x10,0x43,0x00,0x2c,0x03,0x44,0x8c,\r
+0xb1,0x4f,0x00,0x08,0x42,0x26,0x04,0x00,0x00,0x11,0x1e,0x00,0x78,0x1b,0x63,0x26,\r
+0x21,0x10,0x43,0x00,0x2f,0x03,0x44,0x90,0xb1,0x4f,0x00,0x08,0x01,0x00,0x84,0x30,\r
+0x25,0xb0,0x05,0x3c,0x01,0x00,0x06,0x24,0x01,0x80,0x02,0x3c,0x04,0x30,0x86,0x00,\r
+0xf1,0x02,0xa7,0x34,0xed,0x02,0xa4,0x34,0x78,0x3f,0x42,0x24,0x18,0x03,0xa5,0x34,\r
+0x08,0x00,0x03,0x24,0x00,0x00,0xa2,0xac,0x00,0x00,0xe3,0xa0,0x00,0x00,0x80,0xa0,\r
+0x00,0x00,0x86,0xa0,0x00,0x00,0x80,0xa0,0x00,0x00,0x86,0xa0,0x00,0x00,0x80,0xa0,\r
+0x00,0x00,0x86,0xa0,0x00,0x00,0x80,0xa0,0x00,0x00,0x86,0xa0,0x00,0x00,0x80,0xa0,\r
+0x00,0x00,0xe0,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x01,0x80,0x02,0x3c,\r
+0x25,0xb0,0x03,0x3c,0xd4,0x3f,0x42,0x24,0x18,0x03,0x63,0x34,0x00,0x00,0x62,0xac,\r
+0x00,0x00,0x83,0x90,0x30,0x00,0x02,0x24,0x05,0x00,0x62,0x10,0x21,0x20,0x00,0x00,\r
+0x31,0x00,0x02,0x24,0x02,0x00,0x62,0x10,0x01,0x00,0x04,0x24,0x07,0x00,0x04,0x24,\r
+0xde,0x4f,0x00,0x08,0x00,0x00,0x00,0x00,0x01,0x80,0x02,0x3c,0x25,0xb0,0x03,0x3c,\r
+0x10,0x40,0x42,0x24,0x18,0x03,0x63,0x34,0x02,0x80,0x04,0x3c,0x00,0x00,0x62,0xac,\r
+0x08,0x00,0xe0,0x03,0x8c,0x43,0x80,0xac,0x02,0x80,0x03,0x3c,0x98,0x41,0x62,0x8c,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x85,0xac,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xe0,0xff,0xbd,0x27,\r
+0x10,0x00,0xb0,0xaf,0xc0,0x80,0x04,0x00,0x21,0x80,0x04,0x02,0x80,0x80,0x10,0x00,\r
+0x21,0x80,0x04,0x02,0x02,0x80,0x02,0x3c,0x78,0x1b,0x42,0x24,0x80,0x80,0x10,0x00,\r
+0x21,0x80,0x02,0x02,0x1c,0x00,0xbf,0xaf,0x18,0x00,0xb2,0xaf,0x14,0x00,0xb1,0xaf,\r
+0x90,0x11,0x05,0x8e,0xff,0x1f,0x02,0x3c,0x25,0xb0,0x12,0x3c,0xff,0xff,0x42,0x34,\r
+0xf8,0xff,0x03,0x24,0x88,0x11,0x02,0xae,0x84,0x01,0x46,0x36,0x24,0x28,0xa3,0x00,\r
+0xff,0xfe,0x02,0x24,0x00,0x00,0xc7,0x8c,0x24,0x28,0xa2,0x00,0xff,0xef,0x03,0x24,\r
+0xff,0xff,0x02,0x3c,0xff,0x1f,0x42,0x34,0x24,0x28,0xa3,0x00,0x24,0x28,0xa2,0x00,\r
+0x8c,0x11,0x07,0xae,0x90,0x11,0x05,0xae,0x96,0x15,0x00,0x0c,0x21,0x88,0x80,0x00,\r
+0x92,0x11,0x02,0x92,0x21,0x88,0x32,0x02,0x1c,0x00,0xbf,0x8f,0x60,0x01,0x22,0xa2,\r
+0x18,0x00,0xb2,0x8f,0x7c,0x11,0x00,0xae,0x60,0x11,0x00,0xae,0x64,0x11,0x00,0xae,\r
+0x68,0x11,0x00,0xae,0x6c,0x11,0x00,0xae,0x70,0x11,0x00,0xae,0x74,0x11,0x00,0xae,\r
+0x78,0x11,0x00,0xae,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,\r
+0x20,0x00,0xbd,0x27,0xff,0x00,0xa5,0x30,0xc0,0x10,0x05,0x00,0x21,0x10,0x45,0x00,\r
+0x80,0x10,0x02,0x00,0x21,0x10,0x45,0x00,0x02,0x80,0x03,0x3c,0x78,0x1b,0x63,0x24,\r
+0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,0x90,0x11,0x43,0x8c,0x25,0xb0,0x05,0x3c,\r
+0xff,0x00,0xc6,0x30,0x21,0x30,0xc5,0x00,0xaf,0x01,0xc2,0x90,0x07,0x00,0x63,0x30,\r
+0x80,0x18,0x03,0x00,0x21,0x18,0x65,0x00,0xff,0x00,0x88,0x30,0xff,0x00,0x49,0x30,\r
+0x84,0x01,0x66,0x8c,0x21,0x50,0x00,0x00,0x21,0x58,0x00,0x00,0x2b,0x00,0x20,0x11,\r
+0x21,0x20,0x00,0x01,0x2b,0x00,0xc0,0x10,0x2b,0x10,0x09,0x01,0x21,0x28,0x00,0x00,\r
+0x6c,0x50,0x00,0x08,0x01,0x00,0x07,0x24,0xff,0x00,0x65,0x30,0x1d,0x00,0xa2,0x2c,\r
+0x07,0x00,0x40,0x10,0xff,0xff,0x02,0x25,0x04,0x10,0xa7,0x00,0x24,0x10,0x46,0x00,\r
+0xf9,0xff,0x40,0x10,0x01,0x00,0xa3,0x24,0x21,0x58,0xa0,0x00,0xff,0xff,0x02,0x25,\r
+0xff,0x00,0x45,0x30,0x2b,0x18,0xab,0x00,0x0f,0x00,0x60,0x14,0x2b,0x10,0x49,0x01,\r
+0x01,0x00,0x04,0x24,0x04,0x10,0xa4,0x00,0x24,0x10,0x46,0x00,0xff,0xff,0xa7,0x24,\r
+0x04,0x00,0x40,0x10,0x01,0x00,0x43,0x25,0x17,0x00,0x49,0x11,0xff,0x00,0x6a,0x30,\r
+0x21,0x40,0xa0,0x00,0xff,0x00,0xe5,0x30,0x2b,0x10,0xab,0x00,0xf6,0xff,0x40,0x10,\r
+0x04,0x10,0xa4,0x00,0x2b,0x10,0x49,0x01,0x08,0x00,0x40,0x10,0x21,0x20,0x00,0x01,\r
+0x23,0x10,0x2a,0x01,0x2a,0x10,0x62,0x01,0x04,0x00,0x40,0x14,0x21,0x20,0x00,0x00,\r
+0x23,0x10,0x69,0x01,0x21,0x10,0x4a,0x00,0xff,0x00,0x44,0x30,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x80,0x00,0xfd,0xff,0x40,0x14,0x21,0x20,0x00,0x00,0x23,0x10,0x09,0x01,\r
+0x8d,0x50,0x00,0x08,0xff,0x00,0x44,0x30,0x21,0x20,0x00,0x01,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x80,0x00,0xff,0x00,0x84,0x30,0xc0,0x10,0x04,0x00,0x21,0x10,0x44,0x00,\r
+0x80,0x10,0x02,0x00,0x21,0x10,0x44,0x00,0x02,0x80,0x03,0x3c,0x78,0x1b,0x63,0x24,\r
+0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,0x25,0xb0,0x06,0x3c,0x90,0x11,0x43,0x8c,\r
+0xff,0x00,0xa5,0x30,0x21,0x20,0x86,0x00,0x21,0x28,0xa6,0x00,0x60,0x01,0x82,0x90,\r
+0xaf,0x01,0xa4,0x90,0x07,0x00,0x63,0x30,0x80,0x18,0x03,0x00,0x21,0x18,0x66,0x00,\r
+0xff,0x00,0x48,0x30,0xff,0x00,0x89,0x30,0x84,0x01,0x66,0x8c,0x21,0x50,0x00,0x00,\r
+0x21,0x58,0x00,0x00,0x2b,0x00,0x20,0x11,0x21,0x20,0x00,0x01,0x2b,0x00,0xc0,0x10,\r
+0x2b,0x10,0x09,0x01,0x21,0x28,0x00,0x00,0xba,0x50,0x00,0x08,0x01,0x00,0x07,0x24,\r
+0xff,0x00,0x65,0x30,0x1d,0x00,0xa2,0x2c,0x07,0x00,0x40,0x10,0xff,0xff,0x02,0x25,\r
+0x04,0x10,0xa7,0x00,0x24,0x10,0x46,0x00,0xf9,0xff,0x40,0x10,0x01,0x00,0xa3,0x24,\r
+0x21,0x58,0xa0,0x00,0xff,0xff,0x02,0x25,0xff,0x00,0x45,0x30,0x2b,0x18,0xab,0x00,\r
+0x0f,0x00,0x60,0x14,0x2b,0x10,0x49,0x01,0x01,0x00,0x04,0x24,0x04,0x10,0xa4,0x00,\r
+0x24,0x10,0x46,0x00,0xff,0xff,0xa7,0x24,0x04,0x00,0x40,0x10,0x01,0x00,0x43,0x25,\r
+0x17,0x00,0x49,0x11,0xff,0x00,0x6a,0x30,0x21,0x40,0xa0,0x00,0xff,0x00,0xe5,0x30,\r
+0x2b,0x10,0xab,0x00,0xf6,0xff,0x40,0x10,0x04,0x10,0xa4,0x00,0x2b,0x10,0x49,0x01,\r
+0x08,0x00,0x40,0x10,0x21,0x20,0x00,0x01,0x23,0x10,0x2a,0x01,0x2a,0x10,0x62,0x01,\r
+0x04,0x00,0x40,0x14,0x21,0x20,0x00,0x00,0x23,0x10,0x69,0x01,0x21,0x10,0x4a,0x00,\r
+0xff,0x00,0x44,0x30,0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00,0xfd,0xff,0x40,0x14,\r
+0x21,0x20,0x00,0x00,0x23,0x10,0x09,0x01,0xdb,0x50,0x00,0x08,0xff,0x00,0x44,0x30,\r
+0x21,0x20,0x00,0x01,0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00,0xd8,0xff,0xbd,0x27,\r
+0x02,0x80,0x02,0x3c,0x18,0x00,0xb2,0xaf,0xff,0xff,0x03,0x3c,0x78,0x1b,0x52,0x24,\r
+0x1c,0x00,0xb3,0xaf,0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x20,0x00,0xbf,0xaf,\r
+0xff,0x1f,0x73,0x34,0x21,0x88,0x00,0x00,0x21,0x80,0x40,0x02,0x19,0x50,0x00,0x0c,\r
+0x21,0x20,0x20,0x02,0x90,0x11,0x02,0x8e,0x21,0x28,0x00,0x00,0x24,0x10,0x53,0x00,\r
+0x00,0x20,0x42,0x34,0x90,0x11,0x02,0xae,0x92,0x11,0x03,0x92,0x00,0x00,0x00,0x00,\r
+0x80,0x18,0x03,0x00,0x21,0x18,0x72,0x00,0xf8,0x04,0x64,0x8c,0x6c,0x05,0x62,0x8c,\r
+0x00,0x00,0x00,0x00,0x21,0x10,0x44,0x00,0x42,0x10,0x02,0x00,0x5c,0x11,0x02,0xae,\r
+0x21,0x10,0x05,0x02,0x01,0x00,0xa5,0x24,0x1d,0x00,0xa3,0x28,0xce,0x11,0x40,0xa0,\r
+0x94,0x11,0x40,0xa0,0xfa,0xff,0x60,0x14,0xb1,0x11,0x40,0xa0,0x01,0x00,0x31,0x26,\r
+0x20,0x00,0x22,0x2a,0xec,0x11,0x00,0xae,0xe4,0xff,0x40,0x14,0x94,0x00,0x10,0x26,\r
+0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27,0xc0,0xff,0xbd,0x27,\r
+0x02,0x80,0x02,0x3c,0x2c,0x00,0xb5,0xaf,0x78,0x1b,0x46,0x24,0x3c,0x00,0xbf,0xaf,\r
+0x38,0x00,0xbe,0xaf,0x34,0x00,0xb7,0xaf,0x30,0x00,0xb6,0xaf,0x28,0x00,0xb4,0xaf,\r
+0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,\r
+0xec,0x25,0xc2,0x8c,0xff,0x00,0x03,0x24,0xff,0x00,0x8d,0x30,0xff,0xff,0x42,0x38,\r
+0x0b,0x18,0x02,0x00,0xff,0xff,0x04,0x34,0x10,0x00,0xa3,0xaf,0xec,0x25,0xc4,0xac,\r
+0xb9,0x00,0xa0,0x11,0x08,0x00,0x15,0x24,0x02,0x80,0x02,0x3c,0xdc,0xad,0x45,0x24,\r
+0x94,0x04,0xc4,0x24,0x36,0x51,0x00,0x08,0x21,0x88,0x00,0x00,0x01,0x00,0x31,0x26,\r
+0x00,0x00,0x82,0xa0,0x1d,0x00,0x22,0x2a,0x0b,0x00,0x40,0x10,0x01,0x00,0x84,0x24,\r
+0x21,0x10,0x25,0x02,0x00,0x00,0x42,0x90,0x00,0x00,0x00,0x00,0xf7,0xff,0x40,0x10,\r
+0xfd,0xff,0x43,0x24,0x01,0x00,0x31,0x26,0x1d,0x00,0x22,0x2a,0x00,0x00,0x83,0xa0,\r
+0xf7,0xff,0x40,0x14,0x01,0x00,0x84,0x24,0x02,0x80,0x02,0x3c,0x78,0x1b,0x4a,0x24,\r
+0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0x74,0xab,0x6c,0x24,0xfc,0xaa,0x4b,0x24,\r
+0x21,0x88,0x00,0x00,0x21,0x48,0x00,0x00,0x21,0x30,0x00,0x00,0x21,0x40,0x2a,0x01,\r
+0x21,0x38,0x2c,0x01,0x21,0x10,0xe6,0x00,0x91,0x00,0x44,0x90,0x00,0x00,0x45,0x90,\r
+0x21,0x18,0x06,0x01,0x01,0x00,0xc6,0x24,0x05,0x00,0xc2,0x28,0xc9,0x03,0x64,0xa0,\r
+0xf8,0xff,0x40,0x14,0x38,0x03,0x65,0xa0,0x21,0x10,0x2b,0x02,0x1d,0x00,0x44,0x90,\r
+0x00,0x00,0x45,0x90,0x21,0x18,0x2a,0x02,0x01,0x00,0x31,0x26,0x1d,0x00,0x22,0x2a,\r
+0x77,0x04,0x64,0xa0,0x5a,0x04,0x65,0xa0,0xeb,0xff,0x40,0x14,0x05,0x00,0x29,0x25,\r
+0xaf,0x00,0xa0,0x11,0x02,0x80,0x02,0x3c,0x78,0x1b,0x48,0x24,0x02,0x80,0x03,0x3c,\r
+0x02,0x80,0x02,0x3c,0x70,0xae,0x69,0x24,0xfc,0xad,0x47,0x24,0x21,0x88,0x00,0x00,\r
+0x80,0x18,0x11,0x00,0x21,0x10,0x69,0x00,0x21,0x20,0x67,0x00,0x00,0x00,0x46,0x8c,\r
+0x00,0x00,0x85,0x8c,0x01,0x00,0x31,0x26,0x21,0x18,0x68,0x00,0x04,0x00,0x22,0x2a,\r
+0xf8,0x04,0x65,0xac,0xf6,0xff,0x40,0x14,0x6c,0x05,0x66,0xac,0x02,0x80,0x02,0x3c,\r
+0x78,0x1b,0x49,0x24,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0x70,0xae,0x68,0x24,\r
+0xfc,0xad,0x47,0x24,0x04,0x00,0x11,0x24,0x80,0x20,0x11,0x00,0x21,0x10,0x88,0x00,\r
+0x21,0x30,0x87,0x00,0x00,0x00,0x45,0x8c,0x00,0x00,0xc3,0x8c,0x01,0x00,0x31,0x26,\r
+0x21,0x20,0x89,0x00,0x82,0x28,0x05,0x00,0x82,0x18,0x03,0x00,0x1d,0x00,0x22,0x2a,\r
+0xf8,0x04,0x83,0xac,0xf4,0xff,0x40,0x14,0x6c,0x05,0x85,0xac,0x02,0x80,0x02,0x3c,\r
+0x78,0x1b,0x56,0x24,0xff,0xff,0x02,0x3c,0x21,0xf0,0xc0,0x02,0xff,0x1f,0x57,0x34,\r
+0x21,0x88,0x00,0x00,0x21,0xa0,0x00,0x00,0x93,0x51,0x00,0x08,0x21,0x90,0xc0,0x02,\r
+0x01,0x00,0x31,0x26,0x20,0x00,0x22,0x2a,0x94,0x00,0x52,0x26,0x3d,0x00,0x40,0x10,\r
+0x94,0x00,0x94,0x26,0x90,0x11,0x44,0x8e,0x01,0x00,0x03,0x24,0x02,0x13,0x04,0x00,\r
+0x01,0x00,0x53,0x30,0xf6,0xff,0x63,0x16,0x07,0x00,0x82,0x30,0x25,0xb0,0x03,0x3c,\r
+0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,0x84,0x01,0x45,0x8c,0x88,0x11,0x43,0x8e,\r
+0x21,0x20,0x20,0x02,0x24,0x28,0xa3,0x00,0x96,0x15,0x00,0x0c,0x8c,0x11,0x45,0xae,\r
+0x92,0x11,0x44,0x92,0x70,0x15,0x00,0x0c,0xff,0x00,0x25,0x32,0x90,0x11,0x42,0x8e,\r
+0x00,0x00,0x00,0x00,0x24,0x10,0x57,0x00,0x00,0x20,0x42,0x34,0x90,0x11,0x42,0xae,\r
+0x92,0x11,0x50,0x92,0x00,0x00,0x00,0x00,0x21,0x20,0x00,0x02,0x86,0x15,0x00,0x0c,\r
+0x80,0x80,0x10,0x00,0x21,0x80,0x16,0x02,0x60,0x11,0x40,0xae,0x64,0x11,0x40,0xae,\r
+0x68,0x11,0x40,0xae,0x6c,0x11,0x40,0xae,0x70,0x11,0x40,0xae,0x74,0x11,0x40,0xae,\r
+0x78,0x11,0x40,0xae,0x7c,0x11,0x40,0xae,0xf8,0x04,0x04,0x8e,0x6c,0x05,0x03,0x8e,\r
+0x26,0x10,0x53,0x00,0x21,0x30,0x00,0x00,0x21,0x18,0x64,0x00,0x42,0x18,0x03,0x00,\r
+0x04,0x00,0x04,0x24,0x0a,0xa8,0x82,0x00,0x5c,0x11,0x43,0xae,0x21,0x20,0x9e,0x02,\r
+0x21,0x10,0x86,0x00,0x01,0x00,0xc6,0x24,0x1d,0x00,0xc3,0x28,0xce,0x11,0x40,0xa0,\r
+0x94,0x11,0x40,0xa0,0xfa,0xff,0x60,0x14,0xb1,0x11,0x40,0xa0,0x01,0x00,0x31,0x26,\r
+0x20,0x00,0x22,0x2a,0xec,0x11,0x80,0xac,0x94,0x00,0x52,0x26,0xc5,0xff,0x40,0x14,\r
+0x94,0x00,0x94,0x26,0x25,0xb0,0x02,0x3c,0x80,0x01,0x42,0x34,0x00,0x00,0x55,0xa0,\r
+0x10,0x00,0xa3,0x8f,0x00,0x00,0x00,0x00,0x03,0x00,0x60,0x14,0x02,0x80,0x03,0x3c,\r
+0x78,0x1b,0x62,0x24,0xec,0x25,0x40,0xac,0x3c,0x00,0xbf,0x8f,0x38,0x00,0xbe,0x8f,\r
+0x34,0x00,0xb7,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,\r
+0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x40,0x00,0xbd,0x27,0x02,0x80,0x02,0x3c,0xdc,0xad,0x45,0x24,\r
+0x94,0x04,0xc4,0x24,0x21,0x88,0x00,0x00,0x21,0x10,0x25,0x02,0x00,0x00,0x43,0x90,\r
+0x01,0x00,0x31,0x26,0x1d,0x00,0x22,0x2a,0x00,0x00,0x83,0xa0,0xfa,0xff,0x40,0x14,\r
+0x01,0x00,0x84,0x24,0x02,0x80,0x02,0x3c,0x78,0x1b,0x4a,0x24,0x02,0x80,0x03,0x3c,\r
+0x02,0x80,0x02,0x3c,0x98,0xac,0x6c,0x24,0x38,0xab,0x4b,0x24,0x21,0x88,0x00,0x00,\r
+0x21,0x48,0x00,0x00,0x21,0x30,0x00,0x00,0x21,0x40,0x2a,0x01,0x21,0x38,0x2c,0x01,\r
+0x21,0x10,0xe6,0x00,0x91,0x00,0x44,0x90,0x00,0x00,0x45,0x90,0x21,0x18,0x06,0x01,\r
+0x01,0x00,0xc6,0x24,0x05,0x00,0xc2,0x28,0xc9,0x03,0x64,0xa0,0xf8,0xff,0x40,0x14,\r
+0x38,0x03,0x65,0xa0,0x21,0x10,0x2b,0x02,0x1d,0x00,0x44,0x90,0x00,0x00,0x45,0x90,\r
+0x21,0x18,0x2a,0x02,0x01,0x00,0x31,0x26,0x1d,0x00,0x22,0x2a,0x77,0x04,0x64,0xa0,\r
+0x5a,0x04,0x65,0xa0,0xeb,0xff,0x40,0x14,0x05,0x00,0x29,0x25,0x02,0x80,0x02,0x3c,\r
+0x78,0x1b,0x49,0x24,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0x70,0xae,0x68,0x24,\r
+0xfc,0xad,0x47,0x24,0x21,0x88,0x00,0x00,0x80,0x18,0x11,0x00,0x21,0x10,0x68,0x00,\r
+0x21,0x20,0x67,0x00,0x00,0x00,0x46,0x8c,0x00,0x00,0x85,0x8c,0x01,0x00,0x31,0x26,\r
+0x21,0x18,0x69,0x00,0x1d,0x00,0x22,0x2a,0xf8,0x04,0x65,0xac,0xf6,0xff,0x40,0x14,\r
+0x6c,0x05,0x66,0xac,0x86,0x51,0x00,0x08,0x02,0x80,0x02,0x3c,0xd8,0xff,0xbd,0x27,\r
+0xff,0xff,0x84,0x30,0x18,0x00,0xb2,0xaf,0xf0,0x01,0x92,0x30,0x02,0x91,0x12,0x00,\r
+0x14,0x00,0xb1,0xaf,0xc0,0x88,0x12,0x00,0x21,0x88,0x32,0x02,0x80,0x88,0x11,0x00,\r
+0x21,0x88,0x32,0x02,0x02,0x80,0x02,0x3c,0x78,0x1b,0x42,0x24,0x80,0x88,0x11,0x00,\r
+0x21,0x88,0x22,0x02,0x20,0x00,0xbf,0xaf,0x1c,0x00,0xb3,0xaf,0x10,0x00,0xb0,0xaf,\r
+0x90,0x11,0x30,0x8e,0x00,0x02,0x83,0x30,0xff,0xfe,0x02,0x24,0x2b,0x18,0x03,0x00,\r
+0x00,0x10,0x10,0x36,0x24,0x80,0x02,0x02,0x00,0x1a,0x03,0x00,0x00,0x04,0x82,0x30,\r
+0x25,0x80,0x03,0x02,0x2b,0x10,0x02,0x00,0xf7,0xff,0x03,0x24,0x24,0x80,0x03,0x02,\r
+0xc0,0x10,0x02,0x00,0x25,0x80,0x02,0x02,0x88,0x11,0x25,0xae,0x90,0x11,0x30,0xae,\r
+0xf3,0x15,0x00,0x0c,0x21,0x98,0xa0,0x00,0xf8,0xff,0x03,0x24,0x24,0x80,0x03,0x02,\r
+0x07,0x00,0x42,0x30,0x25,0x80,0x02,0x02,0x07,0x00,0x03,0x32,0x25,0xb0,0x02,0x3c,\r
+0x80,0x18,0x03,0x00,0x90,0x11,0x30,0xae,0x21,0x18,0x62,0x00,0x84,0x01,0x62,0x8c,\r
+0x21,0x20,0x40,0x02,0x24,0x10,0x53,0x00,0x96,0x15,0x00,0x0c,0x8c,0x11,0x22,0xae,\r
+0x92,0x11,0x24,0x92,0x21,0x28,0x40,0x02,0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb3,0x8f,\r
+0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x70,0x15,0x00,0x08,\r
+0x28,0x00,0xbd,0x27,0x19,0x50,0x00,0x08,0xff,0x00,0x84,0x30,0x02,0x80,0x02,0x3c,\r
+0x78,0x1b,0x43,0x24,0x1f,0x00,0x04,0x24,0x90,0x11,0x62,0x8c,0xff,0xff,0x84,0x24,\r
+0x00,0x10,0x42,0x34,0x90,0x11,0x62,0xac,0xfb,0xff,0x81,0x04,0x94,0x00,0x63,0x24,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x85,0xac,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x23,0x10,0xa4,0x00,\r
+0x2b,0x18,0xa4,0x00,0x23,0x20,0x85,0x00,0x08,0x00,0xe0,0x03,0x0b,0x10,0x83,0x00,\r
+0x20,0xff,0xbd,0x27,0xcc,0x00,0xb5,0xaf,0xdc,0x00,0xbf,0xaf,0xd8,0x00,0xbe,0xaf,\r
+0xd4,0x00,0xb7,0xaf,0xd0,0x00,0xb6,0xaf,0xc8,0x00,0xb4,0xaf,0xc4,0x00,0xb3,0xaf,\r
+0xc0,0x00,0xb2,0xaf,0xbc,0x00,0xb1,0xaf,0xb8,0x00,0xb0,0xaf,0x21,0xa8,0x00,0x00,\r
+0x40,0x11,0x15,0x00,0x10,0x00,0xa3,0x27,0x21,0x10,0x43,0x00,0x07,0x00,0x16,0x24,\r
+0xff,0xff,0xd6,0x26,0x00,0x00,0x40,0xac,0xfd,0xff,0xc1,0x06,0x04,0x00,0x42,0x24,\r
+0x01,0x00,0xb5,0x26,0x03,0x00,0xa2,0x2e,0xf6,0xff,0x40,0x14,0x40,0x11,0x15,0x00,\r
+0x25,0xb0,0x10,0x3c,0xc4,0x02,0x02,0x36,0x00,0x00,0x40,0xac,0x04,0x00,0x03,0x36,\r
+0x00,0x00,0x62,0x8c,0x04,0x0c,0x03,0x36,0x00,0x00,0x63,0x8c,0x08,0x0c,0x04,0x36,\r
+0x0f,0x00,0x11,0x3c,0xac,0x00,0xa3,0xaf,0x00,0x00,0x84,0x8c,0x24,0x10,0x51,0x00,\r
+0x02,0xf4,0x02,0x00,0xb0,0x00,0xa4,0xaf,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x21,0x20,0x00,0x00,0xe3,0x44,0x00,0x0c,\r
+0xff,0xff,0x25,0x36,0x70,0x00,0xa2,0xaf,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x00,0x60,0x81,0x40,0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,0x95,0x42,0x00,0x0c,\r
+0x01,0x00,0x04,0x24,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0x21,0x20,0x00,0x00,0xe3,0x44,0x00,0x0c,0xff,0xff,0x25,0x36,\r
+0x74,0x00,0xa2,0xaf,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,\r
+0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,0x95,0x42,0x00,0x0c,0x21,0x20,0x00,0x00,\r
+0xe0,0x0e,0x02,0x36,0x21,0x20,0x40,0x00,0x00,0x00,0x42,0x8c,0xdc,0x0e,0x12,0x36,\r
+0x70,0x0e,0x13,0x36,0x78,0x00,0xa2,0xaf,0x00,0x00,0x42,0x8e,0x74,0x0e,0x14,0x36,\r
+0x78,0x0e,0x15,0x36,0x7c,0x00,0xa2,0xaf,0x00,0x00,0x63,0x8e,0x7c,0x0e,0x16,0x36,\r
+0x80,0x0e,0x17,0x36,0x80,0x00,0xa3,0xaf,0x00,0x00,0x82,0x8e,0xd4,0x0e,0x10,0x36,\r
+0xed,0x3f,0x11,0x3c,0x84,0x00,0xa2,0xaf,0x00,0x00,0xa3,0x8e,0xfb,0x92,0x25,0x36,\r
+0x88,0x00,0xa3,0xaf,0x00,0x00,0xc2,0x8e,0x00,0x00,0x00,0x00,0x8c,0x00,0xa2,0xaf,\r
+0x00,0x00,0xe3,0x8e,0x25,0xb0,0x02,0x3c,0x84,0x0e,0x42,0x34,0x90,0x00,0xa3,0xaf,\r
+0x00,0x00,0x42,0x8c,0x25,0xb0,0x03,0x3c,0x88,0x0e,0x63,0x34,0x94,0x00,0xa2,0xaf,\r
+0x00,0x00,0x63,0x8c,0x25,0xb0,0x02,0x3c,0x8c,0x0e,0x42,0x34,0x98,0x00,0xa3,0xaf,\r
+0x00,0x00,0x42,0x8c,0x25,0xb0,0x03,0x3c,0xd0,0x0e,0x63,0x34,0x9c,0x00,0xa2,0xaf,\r
+0x00,0x00,0x63,0x8c,0x00,0x00,0x00,0x00,0xa0,0x00,0xa3,0xaf,0x00,0x00,0x02,0x8e,\r
+0x25,0xb0,0x03,0x3c,0xd8,0x0e,0x63,0x34,0xa4,0x00,0xa2,0xaf,0x00,0x00,0x63,0x8c,\r
+0x68,0x52,0x00,0x0c,0xa8,0x00,0xa3,0xaf,0x21,0x20,0x40,0x02,0x68,0x52,0x00,0x0c,\r
+0xfb,0x92,0x25,0x36,0x21,0x20,0x60,0x02,0x68,0x52,0x00,0x0c,0xfb,0x92,0x25,0x36,\r
+0x21,0x20,0x80,0x02,0x68,0x52,0x00,0x0c,0xfb,0x92,0x25,0x36,0x21,0x20,0xa0,0x02,\r
+0x68,0x52,0x00,0x0c,0xfb,0x92,0x25,0x36,0x21,0x20,0xc0,0x02,0x68,0x52,0x00,0x0c,\r
+0xfb,0x92,0x25,0x36,0x21,0x20,0xe0,0x02,0x68,0x52,0x00,0x0c,0xfb,0x92,0x25,0x36,\r
+0x02,0x80,0x02,0x3c,0x18,0xb0,0x42,0x24,0x00,0x00,0x44,0x8c,0xfb,0x92,0x25,0x36,\r
+0x68,0x52,0x00,0x0c,0x25,0xb0,0x13,0x3c,0x02,0x80,0x03,0x3c,0x1c,0xb0,0x63,0x24,\r
+0x00,0x00,0x64,0x8c,0xfb,0x92,0x25,0x36,0x68,0x52,0x00,0x0c,0x21,0xb0,0x00,0x00,\r
+0x02,0x80,0x02,0x3c,0x20,0xb0,0x42,0x24,0x00,0x00,0x44,0x8c,0xfb,0x92,0x25,0x36,\r
+0x68,0x52,0x00,0x0c,0xff,0x03,0x14,0x3c,0x02,0x80,0x03,0x3c,0x24,0xb0,0x63,0x24,\r
+0x00,0x00,0x64,0x8c,0xfb,0x92,0x25,0x36,0x68,0x52,0x00,0x0c,0x10,0x00,0xb7,0x27,\r
+0x21,0x20,0x00,0x02,0x68,0x52,0x00,0x0c,0xfb,0x92,0x25,0x36,0x02,0x80,0x02,0x3c,\r
+0x28,0xb0,0x42,0x24,0x00,0x00,0x44,0x8c,0x68,0x52,0x00,0x0c,0xfb,0x92,0x25,0x36,\r
+0x54,0x53,0x00,0x08,0x21,0xa8,0x00,0x00,0x6e,0x00,0xc2,0x13,0x02,0x80,0x02,0x3c,\r
+0xac,0x0e,0x62,0x36,0x94,0x0e,0x63,0x36,0x00,0x00,0x48,0x8c,0x00,0x00,0x64,0x8c,\r
+0xb4,0x0e,0x62,0x36,0x9c,0x0e,0x63,0x36,0x00,0x00,0x45,0x8c,0x00,0x00,0x66,0x8c,\r
+0x25,0xb0,0x03,0x3c,0xbc,0x0e,0x63,0x34,0x00,0x00,0x67,0x8c,0x24,0x20,0x94,0x00,\r
+0x00,0xd8,0x02,0x3c,0x24,0x10,0x02,0x01,0x24,0x28,0xb4,0x00,0x24,0x30,0xd4,0x00,\r
+0x24,0x38,0xf4,0x00,0x02,0x24,0x04,0x00,0x20,0x01,0x03,0x24,0x01,0x00,0x42,0x2c,\r
+0x02,0x2c,0x05,0x00,0x02,0x34,0x06,0x00,0xe8,0x00,0x83,0x10,0x02,0x3c,0x07,0x00,\r
+0xe6,0x00,0xa3,0x10,0x20,0x00,0x03,0x24,0xe4,0x00,0xc3,0x10,0x00,0x00,0x00,0x00,\r
+0xe2,0x00,0xe3,0x10,0x01,0x00,0x08,0x24,0x80,0x00,0x03,0x24,0x08,0x00,0x83,0x10,\r
+0x21,0x20,0x00,0x00,0x06,0x00,0xa3,0x10,0x21,0x20,0x00,0x00,0xe0,0x03,0x03,0x24,\r
+0x03,0x00,0xc3,0x10,0x00,0x00,0x00,0x00,0xdb,0x00,0xe3,0x10,0x01,0x00,0x04,0x24,\r
+0x05,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x11,0x00,0x00,0x00,0x00,\r
+0xd7,0x00,0x80,0x14,0x94,0x0e,0x63,0x36,0x01,0x00,0xb5,0x26,0x0a,0x00,0xa2,0x2e,\r
+0x01,0x01,0x40,0x10,0x00,0x00,0x00,0x00,0xcb,0xff,0xc0,0x17,0x01,0x00,0x02,0x24,\r
+0xa0,0x00,0x03,0x3c,0x30,0x54,0x65,0x34,0x68,0x52,0x00,0x0c,0x04,0x0c,0x64,0x36,\r
+0x08,0x00,0x05,0x3c,0xe4,0x00,0xa5,0x34,0x68,0x52,0x00,0x0c,0x08,0x0c,0x64,0x36,\r
+0x28,0x0e,0x64,0x36,0x68,0x52,0x00,0x0c,0x80,0x80,0x05,0x3c,0x14,0x02,0x02,0x3c,\r
+0x48,0x01,0x45,0x34,0x68,0x52,0x00,0x0c,0x40,0x0e,0x64,0x36,0x16,0x68,0x05,0x3c,\r
+0xa2,0x04,0xa5,0x34,0x68,0x52,0x00,0x0c,0x44,0x0e,0x64,0x36,0x4c,0x0e,0x64,0x36,\r
+0x68,0x52,0x00,0x0c,0xd1,0x28,0x05,0x24,0x14,0x02,0x03,0x3c,0x4d,0x01,0x65,0x34,\r
+0x68,0x52,0x00,0x0c,0x60,0x0e,0x64,0x36,0x16,0x28,0x05,0x3c,0xba,0x08,0xa5,0x34,\r
+0x68,0x52,0x00,0x0c,0x64,0x0e,0x64,0x36,0x6c,0x0e,0x64,0x36,0x68,0x52,0x00,0x0c,\r
+0xd1,0x28,0x05,0x24,0x00,0xfb,0x05,0x3c,0x01,0x00,0xa5,0x34,0x68,0x52,0x00,0x0c,\r
+0x48,0x0e,0x64,0x36,0x00,0xf8,0x05,0x3c,0x01,0x00,0xa5,0x34,0x68,0x52,0x00,0x0c,\r
+0x48,0x0e,0x64,0x36,0x9c,0x12,0x00,0x0c,0x03,0x00,0x04,0x24,0xa0,0x00,0x02,0x3c,\r
+0x33,0x54,0x45,0x34,0x68,0x52,0x00,0x0c,0x04,0x0c,0x64,0x36,0x08,0x0c,0x64,0x36,\r
+0x68,0x52,0x00,0x0c,0xe4,0x00,0x05,0x24,0x28,0x0e,0x64,0x36,0x68,0x52,0x00,0x0c,\r
+0x21,0x28,0x00,0x00,0x01,0x00,0x02,0x24,0x96,0xff,0xc2,0x17,0xac,0x0e,0x62,0x36,\r
+0x02,0x80,0x02,0x3c,0x2c,0xb0,0x42,0x24,0x25,0xb0,0x03,0x3c,0x00,0x00,0x44,0x8c,\r
+0x20,0x08,0x63,0x34,0x00,0x00,0x71,0x8c,0x00,0x01,0x03,0x3c,0x00,0x01,0x65,0x34,\r
+0x68,0x52,0x00,0x0c,0x25,0xb0,0x12,0x3c,0x00,0x01,0x02,0x3c,0x00,0x01,0x45,0x34,\r
+0x68,0x52,0x00,0x0c,0x28,0x08,0x44,0x36,0xa0,0x00,0x03,0x3c,0x30,0x54,0x65,0x34,\r
+0x68,0x52,0x00,0x0c,0x04,0x0c,0x44,0x36,0x08,0x00,0x05,0x3c,0xe4,0x00,0xa5,0x34,\r
+0x68,0x52,0x00,0x0c,0x08,0x0c,0x44,0x36,0x28,0x0e,0x44,0x36,0x68,0x52,0x00,0x0c,\r
+0x80,0x80,0x05,0x3c,0x00,0x01,0x02,0x3c,0x00,0x7c,0x45,0x34,0x68,0x52,0x00,0x0c,\r
+0x30,0x0e,0x44,0x36,0x00,0x01,0x03,0x3c,0x00,0x48,0x65,0x34,0x68,0x52,0x00,0x0c,\r
+0x34,0x0e,0x44,0x36,0x00,0x10,0x02,0x3c,0x1f,0xdc,0x45,0x34,0x68,0x52,0x00,0x0c,\r
+0x38,0x0e,0x44,0x36,0x00,0x10,0x03,0x3c,0x1f,0x8c,0x65,0x34,0x68,0x52,0x00,0x0c,\r
+0x3c,0x0e,0x44,0x36,0x14,0x02,0x02,0x3c,0x02,0x01,0x45,0x34,0x68,0x52,0x00,0x0c,\r
+0x40,0x0e,0x44,0x36,0x16,0x68,0x05,0x3c,0xc7,0x04,0xa5,0x34,0x68,0x52,0x00,0x0c,\r
+0x44,0x0e,0x44,0x36,0x4c,0x0e,0x44,0x36,0x68,0x52,0x00,0x0c,0xd1,0x28,0x05,0x24,\r
+0x6c,0x0e,0x44,0x36,0x68,0x52,0x00,0x0c,0xd1,0x28,0x05,0x24,0x00,0x01,0x03,0x3c,\r
+0x00,0x7c,0x65,0x34,0x68,0x52,0x00,0x0c,0x50,0x0e,0x44,0x36,0x00,0x01,0x02,0x3c,\r
+0x00,0x48,0x45,0x34,0x68,0x52,0x00,0x0c,0x54,0x0e,0x44,0x36,0x00,0x10,0x03,0x3c,\r
+0x23,0xdc,0x65,0x34,0x68,0x52,0x00,0x0c,0x58,0x0e,0x44,0x36,0x00,0x10,0x02,0x3c,\r
+0x23,0x8c,0x45,0x34,0x68,0x52,0x00,0x0c,0x5c,0x0e,0x44,0x36,0x14,0x02,0x03,0x3c,\r
+0x02,0x01,0x65,0x34,0x68,0x52,0x00,0x0c,0x60,0x0e,0x44,0x36,0x16,0x28,0x05,0x3c,\r
+0x07,0x0d,0xa5,0x34,0x68,0x52,0x00,0x0c,0x64,0x0e,0x44,0x36,0x48,0x0e,0x44,0x36,\r
+0x68,0x52,0x00,0x0c,0x00,0xfb,0x05,0x3c,0x00,0xf8,0x05,0x3c,0x68,0x52,0x00,0x0c,\r
+0x48,0x0e,0x44,0x36,0x00,0x02,0x10,0x3c,0x9c,0x12,0x00,0x0c,0x03,0x00,0x04,0x24,\r
+0x4c,0x0e,0x44,0x36,0x68,0x52,0x00,0x0c,0xd1,0x28,0x05,0x36,0xd1,0x28,0x05,0x36,\r
+0x68,0x52,0x00,0x0c,0x6c,0x0e,0x44,0x36,0x48,0x0e,0x44,0x36,0x68,0x52,0x00,0x0c,\r
+0x00,0xfb,0x05,0x3c,0x00,0xf8,0x05,0x3c,0x68,0x52,0x00,0x0c,0x48,0x0e,0x44,0x36,\r
+0x9c,0x12,0x00,0x0c,0x03,0x00,0x04,0x24,0xac,0x00,0xa5,0x8f,0x04,0x0c,0x44,0x36,\r
+0x68,0x52,0x00,0x0c,0x00,0x01,0x31,0x32,0xb0,0x00,0xa5,0x8f,0x08,0x0c,0x44,0x36,\r
+0x68,0x52,0x00,0x0c,0x2b,0x88,0x11,0x00,0x28,0x0e,0x44,0x36,0x68,0x52,0x00,0x0c,\r
+0x21,0x28,0x00,0x00,0x23,0xff,0x20,0x16,0xac,0x0e,0x62,0x36,0x02,0x80,0x02,0x3c,\r
+0x2c,0xb0,0x42,0x24,0x00,0x00,0x44,0x8c,0x68,0x52,0x00,0x0c,0x00,0x01,0x05,0x3c,\r
+0x28,0x08,0x44,0x36,0x68,0x52,0x00,0x0c,0x00,0x01,0x05,0x3c,0xac,0x0e,0x62,0x36,\r
+0x94,0x0e,0x63,0x36,0x00,0x00,0x48,0x8c,0x00,0x00,0x64,0x8c,0xb4,0x0e,0x62,0x36,\r
+0x9c,0x0e,0x63,0x36,0x00,0x00,0x45,0x8c,0x00,0x00,0x66,0x8c,0x25,0xb0,0x03,0x3c,\r
+0xbc,0x0e,0x63,0x34,0x00,0x00,0x67,0x8c,0x24,0x20,0x94,0x00,0x00,0xd8,0x02,0x3c,\r
+0x24,0x10,0x02,0x01,0x24,0x28,0xb4,0x00,0x24,0x30,0xd4,0x00,0x24,0x38,0xf4,0x00,\r
+0x02,0x24,0x04,0x00,0x20,0x01,0x03,0x24,0x01,0x00,0x42,0x2c,0x02,0x2c,0x05,0x00,\r
+0x02,0x34,0x06,0x00,0x1a,0xff,0x83,0x14,0x02,0x3c,0x07,0x00,0x80,0x00,0x03,0x24,\r
+0x20,0xff,0x83,0x14,0x21,0x40,0x00,0x00,0x4a,0x53,0x00,0x08,0x21,0x20,0x00,0x00,\r
+0x00,0x00,0x62,0x8c,0x9c,0x0e,0x65,0x36,0xa4,0x0e,0x66,0x36,0x24,0x10,0x54,0x00,\r
+0x02,0x14,0x02,0x00,0x00,0x00,0xe2,0xae,0x00,0x00,0xa4,0x8c,0xac,0x0e,0x67,0x36,\r
+0xb4,0x0e,0x65,0x36,0x24,0x20,0x94,0x00,0x02,0x24,0x04,0x00,0x04,0x00,0xe4,0xae,\r
+0x00,0x00,0xc3,0x8c,0xc4,0x0e,0x64,0x36,0x24,0x18,0x74,0x00,0x02,0x1c,0x03,0x00,\r
+0x08,0x00,0xe3,0xae,0x00,0x00,0xe2,0x8c,0x00,0x00,0x00,0x00,0x24,0x10,0x54,0x00,\r
+0x02,0x14,0x02,0x00,0x0c,0x00,0xe2,0xae,0x00,0x00,0xa3,0x8c,0x00,0x00,0x00,0x00,\r
+0x24,0x18,0x74,0x00,0x02,0x1c,0x03,0x00,0x10,0x00,0xe3,0xae,0x25,0xb0,0x03,0x3c,\r
+0xbc,0x0e,0x63,0x34,0x00,0x00,0x62,0x8c,0x00,0x00,0x00,0x00,0x24,0x10,0x54,0x00,\r
+0x02,0x14,0x02,0x00,0x14,0x00,0xe2,0xae,0x00,0x00,0x83,0x8c,0x00,0x00,0x00,0x00,\r
+0x24,0x18,0x74,0x00,0x02,0x1c,0x03,0x00,0x18,0x00,0xe3,0xae,0x25,0xb0,0x03,0x3c,\r
+0xcc,0x0e,0x63,0x34,0x00,0x00,0x62,0x8c,0x00,0x00,0x00,0x00,0x24,0x10,0x54,0x00,\r
+0x02,0x14,0x02,0x00,0x1c,0x00,0xe2,0xae,0x01,0x00,0xd6,0x26,0x03,0x00,0xc2,0x2e,\r
+0xc7,0xfe,0x40,0x14,0x20,0x00,0xf7,0x26,0x10,0x00,0xb0,0x8f,0x00,0x00,0x00,0x00,\r
+0x49,0x01,0x00,0x16,0x00,0x00,0x00,0x00,0x30,0x00,0xb1,0x8f,0x00,0x00,0x00,0x00,\r
+0x06,0x00,0x20,0x16,0x21,0x20,0x00,0x02,0x50,0x00,0xa2,0x8f,0x00,0x00,0x00,0x00,\r
+0x29,0x00,0x40,0x10,0xff,0x00,0x05,0x24,0x21,0x20,0x00,0x02,0x71,0x52,0x00,0x0c,\r
+0x21,0x28,0x20,0x02,0x03,0x00,0x42,0x2c,0x08,0x00,0x40,0x10,0x00,0x00,0x00,0x00,\r
+0x34,0x00,0xa5,0x8f,0x14,0x00,0xa4,0x8f,0x71,0x52,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x03,0x00,0x42,0x2c,0x1c,0x00,0x40,0x14,0x21,0x28,0x00,0x00,0x50,0x00,0xb2,0x8f,\r
+0x21,0x20,0x00,0x02,0x71,0x52,0x00,0x0c,0x21,0x28,0x40,0x02,0x03,0x00,0x42,0x2c,\r
+0x09,0x00,0x40,0x10,0x21,0x20,0x20,0x02,0x54,0x00,0xa5,0x8f,0x14,0x00,0xa4,0x8f,\r
+0x71,0x52,0x00,0x0c,0x00,0x00,0x00,0x00,0x03,0x00,0x42,0x2c,0x0e,0x00,0x40,0x14,\r
+0x21,0x28,0x00,0x00,0x21,0x20,0x20,0x02,0x71,0x52,0x00,0x0c,0x21,0x28,0x40,0x02,\r
+0x03,0x00,0x42,0x2c,0xe0,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x54,0x00,0xa5,0x8f,\r
+0x34,0x00,0xa4,0x8f,0x71,0x52,0x00,0x0c,0x00,0x00,0x00,0x00,0x03,0x00,0x42,0x2c,\r
+0xd9,0x00,0x40,0x10,0x01,0x00,0x05,0x24,0xff,0x00,0x02,0x24,0xdb,0x00,0xa2,0x10,\r
+0x25,0xb0,0x03,0x3c,0x10,0x00,0xa2,0x27,0x40,0x29,0x05,0x00,0x02,0x80,0x0f,0x3c,\r
+0x21,0x28,0xa2,0x00,0x78,0x1b,0xec,0x25,0x00,0x00,0xa6,0x8c,0x0c,0x00,0xa7,0x8c,\r
+0x0c,0x00,0x83,0x8d,0x10,0x00,0x84,0x8d,0x04,0x00,0xa8,0x8c,0x10,0x00,0xa9,0x8c,\r
+0x00,0xfc,0x02,0x24,0x08,0x00,0xaa,0x8c,0x14,0x00,0xab,0x8c,0x24,0x20,0x82,0x00,\r
+0xff,0x03,0xc6,0x30,0x24,0x18,0x62,0x00,0xff,0x03,0xe7,0x30,0xf0,0xff,0x02,0x3c,\r
+0xff,0x03,0x42,0x34,0x25,0x18,0x66,0x00,0x25,0x20,0x87,0x00,0xff,0x03,0x08,0x31,\r
+0xff,0x03,0x29,0x31,0x24,0x20,0x82,0x00,0x24,0x18,0x62,0x00,0x80,0x42,0x08,0x00,\r
+0x80,0x4a,0x09,0x00,0x0f,0xc0,0x02,0x3c,0x1c,0x00,0xa6,0x8c,0x18,0x00,0xa7,0x8c,\r
+0xff,0xff,0x42,0x34,0x25,0x18,0x68,0x00,0x25,0x20,0x89,0x00,0xff,0x03,0x4a,0x31,\r
+0xff,0x03,0x6b,0x31,0x24,0x20,0x82,0x00,0x00,0x55,0x0a,0x00,0x24,0x18,0x62,0x00,\r
+0x00,0x5d,0x0b,0x00,0x25,0x18,0x6a,0x00,0x25,0x20,0x8b,0x00,0x16,0x00,0x86,0xa5,\r
+0x0c,0x00,0x83,0xad,0x10,0x00,0x84,0xad,0x14,0x00,0x87,0xa5,0x78,0x1b,0xf1,0x25,\r
+0x10,0x00,0x22,0x8e,0x01,0x00,0x03,0x24,0x82,0x17,0x02,0x00,0x4d,0x00,0x43,0x10,\r
+0x25,0xb0,0x12,0x3c,0x0c,0x00,0x23,0x8e,0x80,0x0c,0x44,0x36,0x00,0x00,0x88,0x8c,\r
+0x00,0x02,0x62,0x30,0xc0,0xff,0x13,0x3c,0x82,0x6d,0x08,0x00,0x03,0x00,0x40,0x10,\r
+0xff,0x03,0x65,0x30,0x00,0xfc,0x02,0x24,0x25,0x28,0xa2,0x00,0x18,0x00,0xad,0x00,\r
+0x82,0x62,0x03,0x00,0xff,0x03,0x8c,0x31,0x00,0x02,0x83,0x31,0x12,0x10,0x00,0x00,\r
+0x02,0x12,0x02,0x00,0x03,0x00,0x60,0x10,0xff,0x03,0x46,0x30,0x00,0xfc,0x02,0x24,\r
+0x25,0x60,0x82,0x01,0x18,0x00,0x8d,0x01,0x00,0xfc,0x74,0x36,0x24,0x28,0x14,0x01,\r
+0x12,0x80,0x00,0x00,0x02,0x82,0x10,0x00,0x3f,0x00,0x02,0x32,0x00,0x14,0x02,0x00,\r
+0x25,0x28,0xa2,0x00,0x68,0x52,0x00,0x0c,0x25,0x28,0xa6,0x00,0x94,0x0c,0x44,0x36,\r
+0x00,0x00,0x85,0x8c,0xff,0x0f,0x02,0x3c,0xff,0xff,0x55,0x34,0xc0,0x03,0x10,0x32,\r
+0x24,0x28,0xb5,0x00,0x80,0x85,0x10,0x00,0x68,0x52,0x00,0x0c,0x25,0x28,0xb0,0x00,\r
+0x10,0x00,0x2c,0x8e,0x88,0x0c,0x44,0x36,0x00,0x00,0x88,0x8c,0x82,0x2a,0x0c,0x00,\r
+0xff,0x03,0xa5,0x30,0x24,0x10,0x13,0x01,0x00,0x02,0xa3,0x30,0x03,0x00,0x60,0x10,\r
+0x82,0x6d,0x02,0x00,0x00,0xfc,0x02,0x24,0x25,0x28,0xa2,0x00,0x18,0x00,0xad,0x00,\r
+0x02,0x65,0x0c,0x00,0xff,0x03,0x8c,0x31,0x00,0x02,0x83,0x31,0x12,0x10,0x00,0x00,\r
+0x02,0x12,0x02,0x00,0x03,0x00,0x60,0x10,0xff,0x03,0x46,0x30,0x00,0xfc,0x02,0x24,\r
+0x25,0x60,0x82,0x01,0x18,0x00,0x8d,0x01,0x24,0x28,0x14,0x01,0x12,0x80,0x00,0x00,\r
+0x02,0x82,0x10,0x00,0x3f,0x00,0x02,0x32,0x00,0x14,0x02,0x00,0x25,0x28,0xa2,0x00,\r
+0x68,0x52,0x00,0x0c,0x25,0x28,0xa6,0x00,0x9c,0x0c,0x44,0x36,0x00,0x00,0x85,0x8c,\r
+0xc0,0x03,0x10,0x32,0x80,0x85,0x10,0x00,0x24,0x28,0xb5,0x00,0x68,0x52,0x00,0x0c,\r
+0x25,0x28,0xb0,0x00,0x78,0x00,0xa5,0x8f,0x25,0xb0,0x10,0x3c,0x68,0x52,0x00,0x0c,\r
+0xe0,0x0e,0x04,0x36,0x7c,0x00,0xa5,0x8f,0x68,0x52,0x00,0x0c,0xdc,0x0e,0x04,0x36,\r
+0x80,0x00,0xa5,0x8f,0x68,0x52,0x00,0x0c,0x70,0x0e,0x04,0x36,0x84,0x00,0xa5,0x8f,\r
+0x68,0x52,0x00,0x0c,0x74,0x0e,0x04,0x36,0x88,0x00,0xa5,0x8f,0x68,0x52,0x00,0x0c,\r
+0x78,0x0e,0x04,0x36,0x8c,0x00,0xa5,0x8f,0x68,0x52,0x00,0x0c,0x7c,0x0e,0x04,0x36,\r
+0x90,0x00,0xa5,0x8f,0x68,0x52,0x00,0x0c,0x80,0x0e,0x04,0x36,0x94,0x00,0xa5,0x8f,\r
+0x68,0x52,0x00,0x0c,0x84,0x0e,0x04,0x36,0x98,0x00,0xa5,0x8f,0x68,0x52,0x00,0x0c,\r
+0x88,0x0e,0x04,0x36,0x9c,0x00,0xa5,0x8f,0x68,0x52,0x00,0x0c,0x8c,0x0e,0x04,0x36,\r
+0xa0,0x00,0xa5,0x8f,0x68,0x52,0x00,0x0c,0xd0,0x0e,0x04,0x36,0xa4,0x00,0xa5,0x8f,\r
+0x68,0x52,0x00,0x0c,0xd4,0x0e,0x04,0x36,0xa8,0x00,0xa5,0x8f,0x88,0x0e,0x04,0x36,\r
+0x68,0x52,0x00,0x0c,0x0f,0x00,0x10,0x3c,0x70,0x00,0xa6,0x8f,0xff,0xff,0x05,0x36,\r
+0xb8,0x44,0x00,0x0c,0x21,0x20,0x00,0x00,0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,\r
+0x95,0x42,0x00,0x0c,0x01,0x00,0x04,0x24,0x74,0x00,0xa6,0x8f,0xff,0xff,0x05,0x36,\r
+0xb8,0x44,0x00,0x0c,0x21,0x20,0x00,0x00,0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,\r
+0x95,0x42,0x00,0x0c,0x21,0x20,0x00,0x00,0xff,0xff,0x05,0x36,0xe3,0x44,0x00,0x0c,\r
+0x1e,0x00,0x04,0x24,0x21,0x88,0x40,0x00,0xfd,0xff,0x06,0x24,0x01,0x00,0x42,0x34,\r
+0x24,0x30,0x46,0x00,0xff,0xff,0x05,0x36,0xb8,0x44,0x00,0x0c,0x1e,0x00,0x04,0x24,\r
+0x9c,0x12,0x00,0x0c,0x03,0x00,0x04,0x24,0xff,0xff,0x05,0x36,0x03,0x00,0x26,0x36,\r
+0xb8,0x44,0x00,0x0c,0x1e,0x00,0x04,0x24,0xdc,0x00,0xbf,0x8f,0xd8,0x00,0xbe,0x8f,\r
+0xd4,0x00,0xb7,0x8f,0xd0,0x00,0xb6,0x8f,0xcc,0x00,0xb5,0x8f,0xc8,0x00,0xb4,0x8f,\r
+0xc4,0x00,0xb3,0x8f,0xc0,0x00,0xb2,0x8f,0xbc,0x00,0xb1,0x8f,0xb8,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0xe0,0x00,0xbd,0x27,0xff,0x00,0x05,0x24,0xff,0x00,0x02,0x24,\r
+0x29,0xff,0xa2,0x14,0x10,0x00,0xa2,0x27,0x25,0xb0,0x03,0x3c,0x94,0x0e,0x62,0x34,\r
+0x9c,0x0e,0x64,0x34,0xa4,0x0e,0x65,0x34,0xac,0x0e,0x66,0x34,0x02,0x80,0x0f,0x3c,\r
+0x00,0x00,0x49,0x8c,0x78,0x1b,0xed,0x25,0x00,0x00,0x8c,0x8c,0x00,0x00,0xae,0x8c,\r
+0x00,0x00,0xc7,0x8c,0xb4,0x0e,0x62,0x34,0x0c,0x00,0xa4,0x8d,0x10,0x00,0xa5,0x8d,\r
+0x00,0x00,0x4a,0x8c,0xff,0x03,0x06,0x3c,0x00,0xfc,0x08,0x24,0xbc,0x0e,0x62,0x34,\r
+0x24,0x48,0x26,0x01,0x24,0x38,0xe6,0x00,0x00,0x00,0x4b,0x8c,0x24,0x28,0xa8,0x00,\r
+0x24,0x20,0x88,0x00,0x02,0x3c,0x07,0x00,0xcc,0x0e,0x68,0x34,0x02,0x4c,0x09,0x00,\r
+0xc4,0x0e,0x63,0x34,0xf0,0xff,0x02,0x3c,0xff,0x03,0x42,0x34,0x25,0x28,0xa7,0x00,\r
+0x25,0x20,0x89,0x00,0x00,0x00,0x67,0x8c,0x24,0x60,0x86,0x01,0x00,0x00,0x03,0x8d,\r
+0x24,0x50,0x46,0x01,0x24,0x28,0xa2,0x00,0x24,0x20,0x82,0x00,0x82,0x61,0x0c,0x00,\r
+0x82,0x51,0x0a,0x00,0x0f,0xc0,0x02,0x3c,0xff,0xff,0x42,0x34,0x25,0x20,0x8c,0x00,\r
+0x25,0x28,0xaa,0x00,0x24,0x70,0xc6,0x01,0x24,0x58,0x66,0x01,0x24,0x28,0xa2,0x00,\r
+0x24,0x18,0x66,0x00,0x00,0x71,0x0e,0x00,0x24,0x20,0x82,0x00,0x00,0x59,0x0b,0x00,\r
+0x24,0x38,0xe6,0x00,0x25,0x20,0x8e,0x00,0x25,0x28,0xab,0x00,0x02,0x3c,0x07,0x00,\r
+0x02,0x1c,0x03,0x00,0x16,0x00,0xa3,0xa5,0x0c,0x00,0xa4,0xad,0x10,0x00,0xa5,0xad,\r
+0xbd,0x54,0x00,0x08,0x14,0x00,0xa7,0xa5,0x30,0x00,0xb1,0x8f,0x65,0x54,0x00,0x08,\r
+0x21,0x20,0x00,0x02,0xe0,0xff,0xbd,0x27,0x44,0x00,0x02,0x24,0x10,0x00,0xa2,0xa3,\r
+0x49,0x00,0x03,0x24,0x47,0x00,0x02,0x24,0x02,0x80,0x07,0x3c,0x1c,0xb6,0xe7,0x24,\r
+0x11,0x00,0xa3,0xa3,0x12,0x00,0xa2,0xa3,0x10,0x27,0x03,0x24,0x01,0x00,0x02,0x24,\r
+0x01,0x80,0x06,0x3c,0x10,0x00,0xa5,0x27,0x21,0x20,0xe0,0x00,0xb0,0x59,0xc6,0x24,\r
+0x0c,0x00,0xe3,0xac,0x14,0x00,0xe2,0xa0,0x18,0x00,0xbf,0xaf,0xa8,0x14,0x00,0x0c,\r
+0x13,0x00,0xa0,0xa3,0x18,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x20,0x00,0xbd,0x27,0xd0,0xff,0xbd,0x27,0x25,0xb0,0x03,0x3c,0x20,0x00,0xb4,0xaf,\r
+0x1c,0x00,0xb3,0xaf,0x2c,0x00,0xbf,0xaf,0x28,0x00,0xb6,0xaf,0x24,0x00,0xb5,0xaf,\r
+0x18,0x00,0xb2,0xaf,0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x03,0x0d,0x64,0x34,\r
+0x00,0x00,0x82,0x90,0x00,0x00,0x00,0x00,0xff,0x00,0x54,0x30,0x70,0x00,0x93,0x32,\r
+0x63,0x00,0x60,0x12,0x42,0x00,0x63,0x34,0x8f,0x00,0x82,0x32,0x00,0x00,0x82,0xa0,\r
+0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,\r
+0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x5b,0x00,0x60,0x12,0x00,0x00,0x00,0x00,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x0f,0x00,0x11,0x3c,0x21,0x20,0x00,0x00,0xe3,0x44,0x00,0x0c,0xff,0xff,0x25,0x36,\r
+0x21,0xa8,0x40,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,\r
+0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,0x95,0x42,0x00,0x0c,0x01,0x00,0x04,0x24,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x21,0x20,0x00,0x00,0xe3,0x44,0x00,0x0c,0xff,0xff,0x25,0x36,0x21,0xb0,0x40,0x00,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x64,0x00,0x04,0x24,\r
+0xcb,0x12,0x00,0x0c,0x08,0x00,0x10,0x3c,0xff,0xff,0x10,0x36,0x95,0x42,0x00,0x0c,\r
+0x21,0x20,0x00,0x00,0x01,0x00,0x12,0x3c,0x24,0x30,0xb0,0x02,0x25,0x30,0xd2,0x00,\r
+0xff,0xff,0x25,0x36,0xb8,0x44,0x00,0x0c,0x21,0x20,0x00,0x00,0xcb,0x12,0x00,0x0c,\r
+0x64,0x00,0x04,0x24,0x24,0x80,0xd0,0x02,0x95,0x42,0x00,0x0c,0x01,0x00,0x04,0x24,\r
+0x25,0x30,0x12,0x02,0xff,0xff,0x25,0x36,0xb8,0x44,0x00,0x0c,0x21,0x20,0x00,0x00,\r
+0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,0x95,0x42,0x00,0x0c,0x21,0x20,0x00,0x00,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x0f,0x00,0x11,0x3c,0x18,0x00,0x04,0x24,0xe3,0x44,0x00,0x0c,0xff,0xff,0x25,0x36,\r
+0x21,0x80,0x40,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,\r
+0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,0x18,0x00,0x04,0x24,0xff,0xff,0x25,0x36,\r
+0xb8,0x44,0x00,0x0c,0x00,0x80,0x06,0x36,0x9c,0x12,0x00,0x0c,0x03,0x00,0x04,0x24,\r
+0x27,0x00,0x60,0x16,0x25,0xb0,0x02,0x3c,0x2c,0x00,0xbf,0x8f,0x28,0x00,0xb6,0x8f,\r
+0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x25,0xb0,0x02,0x3c,0x42,0x00,0x42,0x34,\r
+0x30,0x00,0xbd,0x27,0x00,0x00,0x40,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0xff,0xff,0x02,0x24,0x00,0x00,0x62,0xa0,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x0f,0x00,0x11,0x3c,0x18,0x00,0x04,0x24,\r
+0xe3,0x44,0x00,0x0c,0xff,0xff,0x25,0x36,0x21,0x80,0x40,0x00,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,\r
+0x18,0x00,0x04,0x24,0xff,0xff,0x25,0x36,0xb8,0x44,0x00,0x0c,0x00,0x80,0x06,0x36,\r
+0x9c,0x12,0x00,0x0c,0x03,0x00,0x04,0x24,0xdb,0xff,0x60,0x12,0x25,0xb0,0x02,0x3c,\r
+0x03,0x0d,0x42,0x34,0x00,0x00,0x54,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,\r
+0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,\r
+0x0f,0x00,0x10,0x3c,0x21,0x30,0xa0,0x02,0xff,0xff,0x05,0x36,0xb8,0x44,0x00,0x0c,\r
+0x21,0x20,0x00,0x00,0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,0x95,0x42,0x00,0x0c,\r
+0x01,0x00,0x04,0x24,0xff,0xff,0x05,0x36,0x21,0x30,0xc0,0x02,0xb8,0x44,0x00,0x0c,\r
+0x21,0x20,0x00,0x00,0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,0x2c,0x00,0xbf,0x8f,\r
+0x28,0x00,0xb6,0x8f,0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f,\r
+0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x20,0x00,0x00,\r
+0x95,0x42,0x00,0x08,0x30,0x00,0xbd,0x27,0xc0,0xff,0xbd,0x27,0x28,0x00,0xb4,0xaf,\r
+0x02,0x80,0x14,0x3c,0x78,0x1b,0x85,0x26,0x38,0x00,0xbf,0xaf,0x34,0x00,0xb7,0xaf,\r
+0x30,0x00,0xb6,0xaf,0x2c,0x00,0xb5,0xaf,0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,\r
+0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,0xc8,0x02,0xa3,0x90,0x25,0xb0,0x02,0x3c,\r
+0x9a,0x0c,0x42,0x34,0x01,0x00,0x63,0x24,0xff,0x00,0x64,0x30,0x00,0x00,0x44,0xa0,\r
+0xc8,0x02,0xa3,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x78,0x1b,0x85,0x26,\r
+0x0c,0x00,0xa2,0x8c,0x00,0x00,0x00,0x00,0x82,0x17,0x02,0x00,0x01,0x00,0x42,0x30,\r
+0x08,0x00,0x40,0x14,0x06,0x00,0x16,0x24,0x08,0x00,0xa2,0x8c,0x01,0x00,0x03,0x24,\r
+0x42,0x17,0x02,0x00,0x03,0x00,0x42,0x30,0x4e,0x01,0x43,0x10,0x25,0xb0,0x02,0x3c,\r
+0x78,0x1b,0x85,0x26,0x0c,0x00,0xa2,0x8c,0x01,0x00,0x03,0x24,0x82,0x17,0x02,0x00,\r
+0x01,0x00,0x44,0x30,0x0d,0x00,0x83,0x10,0x00,0x00,0x00,0x00,0x38,0x00,0xbf,0x8f,\r
+0x34,0x00,0xb7,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,\r
+0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x40,0x00,0xbd,0x27,0x08,0x00,0xa2,0x8c,\r
+0x00,0x00,0x00,0x00,0x42,0x17,0x02,0x00,0x03,0x00,0x43,0x30,0xef,0xff,0x64,0x14,\r
+0x00,0x00,0x00,0x00,0x10,0x00,0xa2,0x8c,0x00,0x00,0x00,0x00,0x82,0x17,0x02,0x00,\r
+0x60,0x02,0x43,0x10,0x0f,0x00,0x10,0x3c,0xc7,0x02,0xb3,0x90,0x25,0xb0,0x02,0x3c,\r
+0x62,0x0c,0x42,0x34,0xff,0x00,0x63,0x32,0x00,0x00,0x43,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x78,0x1b,0x90,0x26,0xc6,0x02,0x02,0x92,0x00,0x00,0x00,0x00,\r
+0x6f,0x01,0x40,0x10,0x01,0x00,0x02,0x24,0x25,0xb0,0x11,0x3c,0x03,0x0d,0x23,0x36,\r
+0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,0x70,0x00,0x42,0x30,0x95,0x01,0x40,0x14,\r
+0xcc,0x00,0x02,0x24,0xc4,0x02,0x02,0x96,0x00,0x00,0x00,0x00,0x23,0x20,0x53,0x00,\r
+0x2b,0x18,0x53,0x00,0x23,0x10,0x62,0x02,0x0a,0x10,0x83,0x00,0x03,0x00,0x42,0x2c,\r
+0x62,0x01,0x40,0x10,0x00,0x00,0x00,0x00,0xc4,0x02,0x03,0x92,0x63,0x0c,0x22,0x36,\r
+0x21,0x20,0x00,0x00,0x00,0x00,0x43,0xa0,0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30,\r
+0x06,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24,0x78,0x1b,0x83,0x26,\r
+0xc3,0x02,0x62,0x90,0x08,0x00,0x66,0x8c,0xc2,0x02,0x73,0xa0,0x23,0x20,0x53,0x00,\r
+0x2b,0x38,0x62,0x02,0x23,0x90,0x62,0x02,0x02,0x2c,0x06,0x00,0x0b,0x90,0x87,0x00,\r
+0x3f,0x00,0xa5,0x30,0x3f,0x00,0xc4,0x30,0x24,0x00,0x02,0x24,0x20,0x00,0x03,0x24,\r
+0x23,0x10,0x44,0x00,0x7d,0x01,0x40,0x16,0x23,0x18,0x65,0x00,0x21,0x40,0x80,0x00,\r
+0x21,0xa8,0xa0,0x00,0x02,0x80,0x17,0x3c,0x2b,0x28,0xc8,0x02,0xf3,0x01,0xa0,0x10,\r
+0x78,0x1b,0x82,0x26,0x80,0x10,0x08,0x00,0x78,0x1b,0x83,0x26,0x21,0x10,0x43,0x00,\r
+0x18,0x00,0x44,0x8c,0x00,0x00,0x00,0x00,0x82,0x25,0x04,0x00,0x78,0x1b,0x86,0x26,\r
+0x0c,0x00,0xc3,0x8c,0x00,0x00,0x00,0x00,0xff,0x03,0x67,0x30,0x7b,0x01,0xe0,0x10,\r
+0x00,0x02,0x62,0x30,0x04,0x00,0x40,0x10,0x18,0x00,0xe4,0x00,0x00,0xfc,0x02,0x24,\r
+0x25,0x38,0xe2,0x00,0x18,0x00,0xe4,0x00,0x82,0x82,0x03,0x00,0xff,0x03,0x10,0x32,\r
+0x00,0x02,0x03,0x32,0x12,0x10,0x00,0x00,0x02,0x12,0x02,0x00,0x03,0x00,0x60,0x10,\r
+0xff,0x03,0x45,0x30,0x00,0xfc,0x02,0x24,0x25,0x80,0x02,0x02,0x18,0x00,0x04,0x02,\r
+0x80,0x1d,0x04,0x00,0x25,0xb0,0x11,0x3c,0x80,0x0c,0x24,0x36,0x94,0x0c,0x31,0x36,\r
+0x12,0x80,0x00,0x00,0x02,0x82,0x10,0x00,0x3f,0x00,0x02,0x32,0x00,0x14,0x02,0x00,\r
+0x25,0x18,0x62,0x00,0x25,0x18,0x65,0x00,0x21,0x28,0x60,0x00,0x68,0x52,0x00,0x0c,\r
+0x10,0x00,0xa3,0xaf,0x00,0x00,0x23,0x8e,0xff,0x0f,0x02,0x3c,0xc0,0x03,0x10,0x32,\r
+0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0x80,0x85,0x10,0x00,0x25,0x18,0x70,0x00,\r
+0x21,0x20,0x20,0x02,0x21,0x28,0x60,0x00,0x10,0x00,0xa3,0xaf,0x68,0x52,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x78,0x1b,0x83,0x26,0x08,0x00,0x62,0x8c,0x00,0x00,0x00,0x00,\r
+0x59,0x01,0x40,0x04,0xc0,0x28,0x15,0x00,0x21,0x10,0xa3,0x00,0xac,0x00,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0x22,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xad,0x00,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0x23,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xae,0x00,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0x24,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xaf,0x00,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0x25,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xb0,0x00,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0x26,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xb1,0x00,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0x27,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xb2,0x00,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0x28,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xb3,0x00,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0x29,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x56,0x43,0xe3,0x92,0x22,0x00,0x02,0x24,0x03,0x00,0x62,0x10,\r
+0x92,0x00,0x02,0x24,0x0d,0xff,0x62,0x14,0x00,0x00,0x00,0x00,0x78,0x1b,0x82,0x26,\r
+0x08,0x00,0x43,0x8c,0x01,0x00,0x44,0x3a,0x24,0x00,0x02,0x24,0x02,0x1a,0x03,0x00,\r
+0x3f,0x00,0x63,0x30,0x01,0x00,0x84,0x30,0x71,0x01,0x80,0x10,0x23,0x28,0x43,0x00,\r
+0x42,0x18,0x12,0x00,0x40,0x10,0x03,0x00,0x21,0x90,0x43,0x00,0x78,0x1b,0x83,0x26,\r
+0xc3,0x02,0x62,0x90,0x00,0x00,0x00,0x00,0x2b,0x10,0x62,0x02,0x46,0x01,0x40,0x10,\r
+0x2b,0x10,0x45,0x02,0x06,0x00,0x40,0x10,0x24,0x00,0x06,0x24,0x08,0x00,0x62,0x8c,\r
+0x00,0x00,0x00,0x00,0x02,0x12,0x02,0x00,0x3f,0x00,0x42,0x30,0x21,0x30,0x52,0x00,\r
+0x2b,0x28,0xc6,0x02,0x46,0x01,0xa0,0x10,0x78,0x1b,0x82,0x26,0x80,0x10,0x06,0x00,\r
+0x78,0x1b,0x83,0x26,0x21,0x10,0x43,0x00,0x18,0x00,0x44,0x8c,0x00,0x00,0x00,0x00,\r
+0x82,0x25,0x04,0x00,0x78,0x1b,0x83,0x26,0x10,0x00,0x70,0x8c,0x00,0x00,0x00,0x00,\r
+0x82,0x3a,0x10,0x00,0xff,0x03,0xe7,0x30,0x3c,0x01,0xe0,0x10,0x00,0x02,0xe2,0x30,\r
+0x04,0x00,0x40,0x10,0x18,0x00,0xe4,0x00,0x00,0xfc,0x02,0x24,0x25,0x38,0xe2,0x00,\r
+0x18,0x00,0xe4,0x00,0x02,0x85,0x10,0x00,0xff,0x03,0x10,0x32,0x00,0x02,0x03,0x32,\r
+0x12,0x10,0x00,0x00,0x02,0x12,0x02,0x00,0x03,0x00,0x60,0x10,0xff,0x03,0x45,0x30,\r
+0x00,0xfc,0x02,0x24,0x25,0x80,0x02,0x02,0x18,0x00,0x04,0x02,0x80,0x1d,0x04,0x00,\r
+0x25,0xb0,0x11,0x3c,0x88,0x0c,0x24,0x36,0x9c,0x0c,0x31,0x36,0x12,0x80,0x00,0x00,\r
+0x02,0x82,0x10,0x00,0x3f,0x00,0x02,0x32,0x00,0x14,0x02,0x00,0x25,0x18,0x62,0x00,\r
+0x25,0x18,0x65,0x00,0x21,0x28,0x60,0x00,0x68,0x52,0x00,0x0c,0x10,0x00,0xa3,0xaf,\r
+0x00,0x00,0x23,0x8e,0xff,0x0f,0x02,0x3c,0xff,0xff,0x42,0x34,0xc0,0x03,0x10,0x32,\r
+0x24,0x18,0x62,0x00,0x80,0x85,0x10,0x00,0x25,0x18,0x70,0x00,0x21,0x20,0x20,0x02,\r
+0x21,0x28,0x60,0x00,0x68,0x52,0x00,0x0c,0x10,0x00,0xa3,0xaf,0x99,0x56,0x00,0x08,\r
+0x00,0x00,0x00,0x00,0x80,0x0c,0x42,0x34,0x00,0x00,0x43,0x8c,0x21,0x30,0xa0,0x00,\r
+0xc0,0xff,0x02,0x3c,0x24,0x20,0x62,0x00,0x21,0x88,0x00,0x00,0xc0,0xff,0x05,0x3c,\r
+0xec,0x57,0x00,0x08,0x18,0x00,0xc3,0x24,0x01,0x00,0x31,0x26,0x25,0x00,0x22,0x2e,\r
+0x0d,0x00,0x40,0x10,0x02,0x80,0x17,0x3c,0x00,0x00,0x62,0x8c,0x00,0x00,0x00,0x00,\r
+0x24,0x10,0x45,0x00,0xf8,0xff,0x44,0x14,0x04,0x00,0x63,0x24,0x08,0x00,0xc2,0x8c,\r
+0xc0,0xff,0x03,0x24,0x3f,0x00,0x24,0x32,0x24,0x10,0x43,0x00,0x25,0x10,0x44,0x00,\r
+0x08,0x00,0xc2,0xac,0x02,0x80,0x17,0x3c,0x56,0x43,0xe3,0x92,0x22,0x00,0x02,0x24,\r
+0x3a,0x00,0x62,0x10,0x92,0x00,0x02,0x24,0x39,0x00,0x62,0x10,0x25,0xb0,0x02,0x3c,\r
+0x25,0xb0,0x02,0x3c,0x24,0x0a,0x42,0x34,0x00,0x00,0x44,0x8c,0x3f,0x3f,0x03,0x3c,\r
+0x3f,0x3f,0x63,0x34,0x24,0x20,0x83,0x00,0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,\r
+0x26,0x1c,0x53,0x24,0x2e,0x1d,0x72,0x24,0x21,0x88,0x00,0x00,0x13,0x58,0x00,0x08,\r
+0x10,0x00,0xa4,0xaf,0x7b,0x46,0x00,0x0c,0x00,0x00,0x00,0x00,0x43,0x00,0x40,0x10,\r
+0x78,0x1b,0x85,0x26,0x01,0x00,0x31,0x26,0x21,0x00,0x22,0x2e,0x17,0x00,0x40,0x10,\r
+0x78,0x1b,0x82,0x26,0xc0,0x80,0x11,0x00,0x10,0x00,0xa4,0x27,0x21,0x28,0x13,0x02,\r
+0x7b,0x46,0x00,0x0c,0x04,0x00,0x06,0x24,0x21,0x28,0x12,0x02,0x10,0x00,0xa4,0x27,\r
+0xf0,0xff,0x40,0x14,0x04,0x00,0x06,0x24,0x78,0x1b,0x85,0x26,0x08,0x00,0xa3,0x8c,\r
+0xc0,0xff,0x02,0x3c,0xff,0xff,0x42,0x34,0x3f,0x00,0x24,0x32,0x24,0x18,0x62,0x00,\r
+0x00,0x24,0x04,0x00,0xff,0x7f,0x02,0x3c,0x25,0x18,0x64,0x00,0xff,0xff,0x42,0x34,\r
+0x24,0x18,0x62,0x00,0x08,0x00,0xa3,0xac,0x78,0x1b,0x82,0x26,0x0c,0x00,0x43,0x8c,\r
+0x00,0x40,0x04,0x3c,0x25,0x18,0x64,0x00,0x92,0x56,0x00,0x08,0x0c,0x00,0x43,0xac,\r
+0xc6,0x02,0x02,0xa2,0xc0,0x56,0x00,0x08,0xc4,0x02,0x13,0xa6,0xbf,0x55,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0xd0,0x56,0x00,0x08,0xc4,0x02,0x13,0xa6,0x25,0xb0,0x02,0x3c,\r
+0x88,0x0c,0x42,0x34,0x00,0x00,0x44,0x8c,0x02,0x80,0x03,0x3c,0x78,0x1b,0x66,0x24,\r
+0xc0,0xff,0x02,0x3c,0x24,0x20,0x82,0x00,0x21,0x88,0x00,0x00,0xc0,0xff,0x05,0x3c,\r
+0x44,0x58,0x00,0x08,0x18,0x00,0xc3,0x24,0x01,0x00,0x31,0x26,0x25,0x00,0x22,0x2e,\r
+0xbc,0xff,0x40,0x10,0x25,0xb0,0x02,0x3c,0x00,0x00,0x62,0x8c,0x00,0x00,0x00,0x00,\r
+0x24,0x10,0x45,0x00,0xf8,0xff,0x44,0x14,0x04,0x00,0x63,0x24,0x08,0x00,0xc2,0x8c,\r
+0x3f,0x00,0x23,0x32,0xff,0xc0,0x04,0x24,0x24,0x10,0x44,0x00,0x00,0x1a,0x03,0x00,\r
+0x25,0x10,0x43,0x00,0xfe,0x57,0x00,0x08,0x08,0x00,0xc2,0xac,0x08,0x00,0xa3,0x8c,\r
+0xc0,0xff,0x02,0x3c,0xff,0xff,0x42,0x34,0x3f,0x00,0x24,0x32,0x24,0x18,0x62,0x00,\r
+0x00,0x24,0x04,0x00,0x25,0x18,0x64,0x00,0x00,0x80,0x02,0x3c,0x27,0x58,0x00,0x08,\r
+0x25,0x18,0x62,0x00,0x63,0x0c,0x23,0x36,0x00,0x00,0x62,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0xda,0x56,0x00,0x08,0x78,0x1b,0x83,0x26,0x98,0x00,0xe0,0x10,\r
+0x21,0x40,0x00,0x00,0x2b,0x10,0x42,0x02,0x21,0x20,0x92,0x00,0x00,0x00,0x42,0x38,\r
+0x24,0x00,0x08,0x24,0x2b,0x18,0x43,0x02,0x0b,0x40,0x82,0x00,0x7d,0xfe,0x60,0x10,\r
+0x20,0x00,0x15,0x24,0x78,0x1b,0x83,0x26,0x0a,0x00,0x62,0x94,0x02,0x80,0x17,0x3c,\r
+0x3f,0x00,0x42,0x30,0xec,0x56,0x00,0x08,0x21,0xa8,0x52,0x00,0x96,0x00,0xa0,0x10,\r
+0x80,0x10,0x08,0x00,0x21,0x10,0x46,0x00,0x18,0x00,0x45,0x8c,0x25,0xb0,0x04,0x3c,\r
+0x68,0x52,0x00,0x0c,0x80,0x0c,0x84,0x34,0x25,0xb0,0x04,0x3c,0x94,0x0c,0x84,0x34,\r
+0x21,0x57,0x00,0x08,0x21,0x28,0x00,0x00,0x21,0x10,0xa3,0x00,0xb4,0x01,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0x22,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xb5,0x01,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0x23,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xb6,0x01,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0x24,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xb7,0x01,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0x25,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xb8,0x01,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0x26,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xb9,0x01,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0x27,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xba,0x01,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0x28,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xbb,0x01,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0x29,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x87,0x57,0x00,0x08,0x00,0x00,0x00,0x00,0x30,0x00,0x43,0x8c,\r
+0xf5,0x56,0x00,0x08,0x82,0x25,0x03,0x00,0x08,0x00,0x62,0x8c,0x00,0x00,0x00,0x00,\r
+0x02,0x12,0x02,0x00,0x3f,0x00,0x42,0x30,0x2b,0x18,0x42,0x02,0xbc,0xfe,0x60,0x14,\r
+0x23,0x30,0x52,0x00,0x21,0x30,0x00,0x00,0x21,0x28,0x00,0x00,0x78,0x1b,0x82,0x26,\r
+0x30,0x00,0x43,0x8c,0xaf,0x57,0x00,0x08,0x82,0x25,0x03,0x00,0x32,0x00,0xa0,0x10,\r
+0x80,0x10,0x06,0x00,0x21,0x10,0x43,0x00,0x18,0x00,0x45,0x8c,0x25,0xb0,0x04,0x3c,\r
+0x68,0x52,0x00,0x0c,0x88,0x0c,0x84,0x34,0x25,0xb0,0x04,0x3c,0x9c,0x0c,0x84,0x34,\r
+0x68,0x52,0x00,0x0c,0x21,0x28,0x00,0x00,0x99,0x56,0x00,0x08,0x00,0x00,0x00,0x00,\r
+0x23,0x10,0x92,0x00,0x2b,0x18,0x44,0x02,0x2b,0x20,0x45,0x02,0x0b,0x40,0x43,0x00,\r
+0xe8,0xfd,0x80,0x14,0x23,0xa8,0xb2,0x00,0xeb,0x56,0x00,0x08,0x21,0xa8,0x00,0x00,\r
+0xff,0xff,0x43,0x26,0x42,0x18,0x03,0x00,0x40,0x10,0x03,0x00,0x21,0x10,0x43,0x00,\r
+0x99,0x57,0x00,0x08,0x01,0x00,0x52,0x24,0x30,0x00,0xc5,0x8c,0x7a,0x58,0x00,0x08,\r
+0x25,0xb0,0x04,0x3c,0xff,0xff,0x05,0x36,0x60,0x00,0x06,0x24,0xb8,0x44,0x00,0x0c,\r
+0x24,0x00,0x04,0x24,0x9c,0x12,0x00,0x0c,0xe8,0x03,0x04,0x24,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x24,0x00,0x04,0x24,\r
+0xe3,0x44,0x00,0x0c,0xff,0xff,0x05,0x36,0x1f,0x00,0x53,0x30,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,\r
+0xb2,0x56,0x00,0x08,0x25,0xb0,0x02,0x3c,0x30,0x00,0x65,0x8c,0xf6,0x58,0x00,0x08,\r
+0x25,0xb0,0x04,0x3c,0x00,0xff,0x84,0x30,0x02,0x22,0x04,0x00,0x08,0x00,0x80,0x10,\r
+0x02,0x80,0x02,0x3c,0xff,0x00,0x02,0x24,0x04,0x00,0x82,0x10,0xcc,0xff,0x03,0x24,\r
+0x02,0x80,0x02,0x3c,0x08,0x00,0xe0,0x03,0x62,0x1e,0x43,0xa0,0x02,0x80,0x02,0x3c,\r
+0x08,0x00,0xe0,0x03,0x62,0x1e,0x44,0xa0,0x02,0x24,0x04,0x00,0xff,0x00,0x84,0x30,\r
+0xc0,0x10,0x04,0x00,0x21,0x10,0x44,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x44,0x00,\r
+0x02,0x80,0x03,0x3c,0x80,0x10,0x02,0x00,0x78,0x1b,0x63,0x24,0x20,0x00,0x84,0x2c,\r
+0x09,0x00,0x80,0x10,0x21,0x10,0x43,0x00,0x80,0x11,0x43,0x8c,0x25,0xb0,0x02,0x3c,\r
+0xc4,0x02,0x42,0x34,0x02,0x19,0x03,0x00,0x7f,0x00,0x63,0x30,0x00,0x00,0x43,0xac,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,0x6c,0x3f,0x43,0x8c,\r
+0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34,0x02,0x19,0x03,0x00,0x7f,0x00,0x63,0x30,\r
+0x00,0x00,0x43,0xac,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xff,0x00,0x85,0x30,\r
+0xd2,0xff,0xa3,0x24,0xfe,0xff,0xa2,0x24,0xda,0xff,0xa4,0x24,0x04,0x00,0x63,0x2c,\r
+0x08,0x00,0x84,0x2c,0x06,0x00,0x60,0x14,0xff,0x00,0x42,0x30,0xf0,0xff,0xa2,0x24,\r
+0xfc,0xff,0xa3,0x24,0x16,0x00,0x46,0x2c,0x03,0x00,0x80,0x10,0xff,0x00,0x62,0x30,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xfa,0xff,0xa3,0x24,0xfc,0xff,0xc0,0x10,\r
+0x21,0x10,0xa0,0x00,0x08,0x00,0xe0,0x03,0xff,0x00,0x62,0x30,0xe0,0xff,0xbd,0x27,\r
+0x02,0x80,0x08,0x3c,0x78,0x1b,0x08,0x25,0x18,0x00,0xbf,0xaf,0xe8,0x02,0x07,0x8d,\r
+0x02,0x80,0x02,0x3c,0x56,0x43,0x49,0x90,0x00,0x03,0x02,0x3c,0x25,0x38,0xe2,0x00,\r
+0xff,0xf3,0x02,0x3c,0x02,0x80,0x03,0x3c,0xff,0xff,0x42,0x34,0xe4,0xb5,0x6a,0x24,\r
+0x24,0x38,0xe2,0x00,0xff,0xff,0x03,0x34,0x01,0x80,0x06,0x3c,0x22,0x00,0x02,0x24,\r
+0x21,0x20,0x40,0x01,0x44,0x66,0xc6,0x24,0x10,0x00,0xa5,0x27,0xe8,0x02,0x07,0xad,\r
+0x00,0x24,0x03,0xad,0x05,0x00,0x22,0x11,0xfc,0x23,0x03,0xad,0x18,0x00,0xbf,0x8f,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x44,0x00,0x02,0x24,\r
+0x10,0x00,0xa2,0xa3,0x49,0x00,0x03,0x24,0x47,0x00,0x02,0x24,0x11,0x00,0xa3,0xa3,\r
+0x12,0x00,0xa2,0xa3,0xd0,0x07,0x03,0x24,0x01,0x00,0x02,0x24,0x13,0x00,0xa0,0xa3,\r
+0x0c,0x00,0x43,0xad,0xa8,0x14,0x00,0x0c,0x14,0x00,0x42,0xa1,0x18,0x00,0xbf,0x8f,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,\r
+0x10,0x00,0xb0,0xaf,0x02,0x80,0x10,0x3c,0x18,0x00,0xbf,0xaf,0x14,0x00,0xb1,0xaf,\r
+0x78,0x1b,0x04,0x26,0xd8,0x02,0x82,0x8c,0x01,0x00,0x03,0x24,0x02,0x15,0x02,0x00,\r
+0x0f,0x00,0x42,0x30,0x07,0x00,0x43,0x10,0x25,0xb0,0x06,0x3c,0x18,0x00,0xbf,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x20,0x00,0xbd,0x27,0x4c,0x00,0xc3,0x34,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,\r
+0x03,0x00,0x42,0x30,0x45,0x00,0x40,0x10,0xff,0xf3,0x02,0x3c,0xe8,0x02,0x85,0x8c,\r
+0x00,0x00,0x00,0x00,0x82,0x16,0x05,0x00,0x03,0x00,0x42,0x30,0x17,0x00,0x40,0x14,\r
+0x78,0x1b,0x11,0x26,0x0c,0x09,0xc3,0x34,0x00,0x00,0x63,0x8c,0x12,0x01,0x02,0x3c,\r
+0x13,0x13,0x42,0x34,0x6b,0x00,0x62,0x10,0xff,0xfc,0x02,0x3c,0x22,0x02,0x02,0x3c,\r
+0x23,0x13,0x42,0x34,0x52,0x00,0x62,0x10,0xff,0xfc,0x02,0x3c,0x00,0x03,0x02,0x3c,\r
+0x25,0x10,0xa2,0x00,0xe8,0x02,0x82,0xac,0x78,0x1b,0x05,0x26,0xe8,0x02,0xa3,0x8c,\r
+0xff,0xf3,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0x00,0x04,0x04,0x3c,\r
+0x25,0x18,0x64,0x00,0xe8,0x02,0xa3,0xac,0x78,0x1b,0x11,0x26,0xfc,0x23,0x24,0x8e,\r
+0xff,0xff,0x02,0x34,0xd5,0xff,0x82,0x10,0x00,0x00,0x00,0x00,0x80,0x11,0x22,0x8e,\r
+0x00,0x00,0x00,0x00,0x02,0x11,0x02,0x00,0x7f,0x00,0x42,0x30,0x3f,0x00,0x43,0x2c,\r
+0x28,0x00,0x60,0x14,0x3b,0x00,0x42,0x2c,0x00,0x24,0x22,0x8e,0x02,0x19,0x04,0x00,\r
+0x02,0x11,0x02,0x00,0x23,0x18,0x62,0x00,0x3a,0x00,0x60,0x18,0x01,0x00,0x03,0x24,\r
+0xeb,0x02,0x22,0x92,0x00,0x00,0x00,0x00,0x03,0x00,0x42,0x30,0x0e,0x00,0x43,0x10,\r
+0x78,0x1b,0x02,0x26,0x25,0xb0,0x04,0x3c,0x12,0x01,0x05,0x3c,0x0c,0x09,0x84,0x34,\r
+0x68,0x52,0x00,0x0c,0x13,0x13,0xa5,0x34,0xe8,0x02,0x23,0x8e,0xff,0xfc,0x02,0x3c,\r
+0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0x00,0x01,0x04,0x3c,0x25,0x18,0x64,0x00,\r
+0xe8,0x02,0x23,0xae,0x78,0x1b,0x02,0x26,0xe8,0x02,0x43,0x8c,0x00,0x20,0x04,0x3c,\r
+0x25,0x18,0x64,0x00,0x9d,0x59,0x00,0x08,0xe8,0x02,0x43,0xac,0xe8,0x02,0x83,0x8c,\r
+0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0xff,0xff,0x42,0x34,\r
+0x24,0x18,0x62,0x00,0x20,0x00,0xbd,0x27,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0xe8,0x02,0x83,0xac,0xa5,0xff,0x40,0x10,0x03,0x00,0x03,0x24,0xeb,0x02,0x22,0x92,\r
+0x00,0x00,0x00,0x00,0x03,0x00,0x42,0x30,0xa0,0xff,0x43,0x10,0x32,0x03,0x05,0x3c,\r
+0x25,0xb0,0x04,0x3c,0x0c,0x09,0x84,0x34,0x68,0x52,0x00,0x0c,0x33,0x13,0xa5,0x34,\r
+0xe8,0x02,0x23,0x8e,0xff,0xdf,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,\r
+0x00,0x03,0x04,0x3c,0x25,0x18,0x64,0x00,0x9d,0x59,0x00,0x08,0xe8,0x02,0x23,0xae,\r
+0xff,0xff,0x42,0x34,0x24,0x10,0xa2,0x00,0x00,0x02,0x03,0x3c,0xbb,0x59,0x00,0x08,\r
+0x25,0x10,0x43,0x00,0xeb,0x02,0x22,0x92,0x02,0x00,0x03,0x24,0x03,0x00,0x42,0x30,\r
+0xd5,0xff,0x43,0x10,0x78,0x1b,0x02,0x26,0x25,0xb0,0x04,0x3c,0x22,0x02,0x05,0x3c,\r
+0x0c,0x09,0x84,0x34,0x68,0x52,0x00,0x0c,0x23,0x13,0xa5,0x34,0xe8,0x02,0x23,0x8e,\r
+0xff,0xfc,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0xe5,0x59,0x00,0x08,\r
+0x00,0x02,0x04,0x3c,0xff,0xff,0x42,0x34,0x24,0x10,0xa2,0x00,0x00,0x01,0x03,0x3c,\r
+0xbb,0x59,0x00,0x08,0x25,0x10,0x43,0x00,0x25,0xb0,0x03,0x3c,0x03,0x0d,0x63,0x34,\r
+0x00,0x00,0x62,0x90,0x21,0x20,0x00,0x00,0xff,0x00,0x42,0x30,0x08,0x00,0x42,0x34,\r
+0x00,0x00,0x62,0xa0,0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,\r
+0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24,0x25,0xb0,0x03,0x3c,0x03,0x0d,0x63,0x34,\r
+0x00,0x00,0x62,0x90,0x21,0x20,0x00,0x00,0xf7,0x00,0x42,0x30,0x00,0x00,0x62,0xa0,\r
+0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x82,0x24,0x25,0xb0,0x03,0x3c,0x2d,0x0a,0x63,0x34,0x00,0x00,0x62,0x90,\r
+0x21,0x20,0x00,0x00,0x3f,0x00,0x42,0x30,0x00,0x00,0x62,0xa0,0x01,0x00,0x82,0x24,\r
+0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24,\r
+0x25,0xb0,0x03,0x3c,0x2d,0x0a,0x63,0x34,0x00,0x00,0x62,0x90,0x21,0x20,0x00,0x00,\r
+0xff,0x00,0x42,0x30,0x80,0x00,0x42,0x34,0x00,0x00,0x62,0xa0,0x01,0x00,0x82,0x24,\r
+0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x25,0xb0,0x02,0x3c,0xff,0x00,0x03,0x3c,\r
+0x82,0x01,0x49,0x34,0x81,0x01,0x48,0x34,0x24,0x10,0x83,0x00,0x02,0x3c,0x02,0x00,\r
+0x00,0xff,0x63,0x34,0x02,0x80,0x02,0x3c,0x78,0x1b,0x45,0x24,0x02,0x32,0x04,0x00,\r
+0x01,0x00,0x02,0x24,0x24,0x20,0x83,0x00,0xda,0x0c,0xa2,0xa0,0xc8,0x0c,0xa0,0xac,\r
+0xcc,0x0c,0xa0,0xac,0xd0,0x0c,0xa0,0xac,0x06,0x00,0x80,0x14,0xd4,0x0c,0xa0,0xac,\r
+0x00,0x00,0x02,0x91,0x00,0x00,0x23,0x91,0xd8,0x0c,0xa2,0xa0,0x08,0x00,0xe0,0x03,\r
+0xd9,0x0c,0xa3,0xa0,0xd9,0x0c,0xa7,0xa0,0x08,0x00,0xe0,0x03,0xd8,0x0c,0xa6,0xa0,\r
+0x02,0x80,0x03,0x3c,0x78,0x1b,0x63,0x24,0xd9,0x0c,0x66,0x90,0xd8,0x0c,0x65,0x90,\r
+0x25,0xb0,0x02,0x3c,0x82,0x01,0x44,0x34,0x81,0x01,0x42,0x34,0x00,0x00,0x45,0xa0,\r
+0x00,0x00,0x86,0xa0,0x08,0x00,0xe0,0x03,0xda,0x0c,0x60,0xa0,0x02,0x80,0x08,0x3c,\r
+0x78,0x1b,0x04,0x25,0xda,0x0c,0x82,0x90,0x00,0x00,0x00,0x00,0x15,0x00,0x40,0x10,\r
+0x21,0x18,0x00,0x00,0xcc,0x0c,0x82,0x8c,0xc8,0x0c,0x85,0x8c,0x25,0xb0,0x03,0x3c,\r
+0x40,0x11,0x02,0x00,0x2b,0x10,0xa2,0x00,0x82,0x01,0x67,0x34,0x0f,0x00,0x40,0x10,\r
+0x81,0x01,0x66,0x34,0xd9,0x0c,0x83,0x90,0xd8,0x0c,0x82,0x90,0xf0,0x00,0x63,0x30,\r
+0x1f,0x00,0x42,0x30,0x00,0x00,0xc2,0xa0,0x00,0x00,0xe3,0xa0,0x78,0x1b,0x02,0x25,\r
+0x01,0x00,0x03,0x24,0xd4,0x0c,0x40,0xac,0xc8,0x0c,0x40,0xac,0xcc,0x0c,0x40,0xac,\r
+0xd0,0x0c,0x40,0xac,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0xd0,0x0c,0x82,0x8c,\r
+0x25,0xb0,0x03,0x3c,0x82,0x01,0x69,0x34,0x40,0x11,0x02,0x00,0x2b,0x10,0xa2,0x00,\r
+0x0e,0x00,0x40,0x14,0x81,0x01,0x66,0x34,0xd4,0x0c,0x82,0x8c,0x00,0x00,0x00,0x00,\r
+0x40,0x11,0x02,0x00,0x2b,0x10,0xa2,0x00,0x08,0x00,0x40,0x14,0x00,0x00,0x00,0x00,\r
+0xd9,0x0c,0x83,0x90,0xd8,0x0c,0x82,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0xc2,0xa0,\r
+0x00,0x00,0x23,0xa1,0x8e,0x5a,0x00,0x08,0x78,0x1b,0x02,0x25,0xd9,0x0c,0x83,0x90,\r
+0xd8,0x0c,0x82,0x90,0xf0,0x00,0x63,0x30,0x7f,0x00,0x42,0x30,0x00,0x00,0xc2,0xa0,\r
+0x00,0x00,0x23,0xa1,0x8e,0x5a,0x00,0x08,0x78,0x1b,0x02,0x25,0x00,0x00,0x85,0xac,\r
+0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,\r
+0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x25,0xb0,0x03,0x3c,0x33,0x02,0x65,0x34,0x00,0x11,0x04,0x00,0x00,0x00,0xa2,0xa0,\r
+0x30,0x02,0x63,0x34,0x00,0x00,0x65,0x8c,0x0f,0x00,0x02,0x3c,0xff,0xff,0x42,0x34,\r
+0x24,0x28,0xa2,0x00,0x01,0x00,0x03,0x24,0x04,0x18,0x83,0x00,0x02,0x00,0xa0,0x10,\r
+0x21,0x10,0x00,0x00,0xff,0xff,0x62,0x30,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0xe0,0xff,0xbd,0x27,0x14,0x00,0xb1,0xaf,0x25,0xb0,0x11,0x3c,0x18,0x00,0xb2,0xaf,\r
+0x4c,0x00,0x22,0x36,0x1c,0x00,0xbf,0xaf,0x10,0x00,0xb0,0xaf,0x00,0x00,0x44,0x90,\r
+0x02,0x80,0x03,0x3c,0x02,0x00,0x02,0x24,0xff,0x00,0x84,0x30,0x07,0x00,0x82,0x10,\r
+0x78,0x1b,0x72,0x24,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x52,0x24,0x43,0x96,\r
+0x01,0x00,0x02,0x24,0xf7,0xff,0x62,0x14,0x21,0x20,0x00,0x00,0xba,0x5a,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x24,0xba,0x5a,0x00,0x0c,0x21,0x80,0x40,0x00,\r
+0x25,0x80,0x02,0x02,0x33,0x02,0x23,0x36,0x08,0x00,0x02,0x24,0xff,0xff,0x10,0x32,\r
+0x40,0x00,0x25,0x36,0x00,0x00,0x62,0xa0,0xea,0xff,0x00,0x16,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0xa2,0x94,0x50,0x24,0x43,0x96,0xff,0xdf,0x42,0x30,0x00,0x20,0x44,0x34,\r
+0x01,0x00,0x63,0x24,0x50,0x24,0x43,0xa6,0x00,0x00,0xa2,0xa4,0x00,0x00,0xa4,0xa4,\r
+0xd7,0x5a,0x00,0x08,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xb8,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c,\r
+0x3c,0x00,0xb1,0xaf,0x38,0x00,0xb0,0xaf,0x40,0x00,0xbf,0xaf,0x78,0x1b,0x50,0x24,\r
+0x04,0x24,0x03,0x8e,0x02,0x80,0x11,0x3c,0x01,0x00,0x02,0x24,0x01,0x00,0x63,0x30,\r
+0x10,0x00,0xa4,0x27,0x80,0x3f,0x25,0x26,0x07,0x00,0x62,0x10,0x0a,0x00,0x06,0x24,\r
+0x40,0x00,0xbf,0x8f,0x3c,0x00,0xb1,0x8f,0x38,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x48,0x00,0xbd,0x27,0x52,0x46,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x21,0x28,0x00,0x00,0x80,0x3f,0x24,0x26,0x3e,0x46,0x00,0x0c,0x0a,0x00,0x06,0x24,\r
+0x28,0x00,0x03,0x24,0x05,0x00,0x02,0x24,0x09,0x24,0x03,0xa2,0x08,0x24,0x02,0xa2,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x39,0x15,0x00,0x0c,\r
+0x48,0x00,0x04,0x24,0x21,0x80,0x40,0x00,0x10,0x00,0xa5,0x27,0xe4,0xff,0x40,0x10,\r
+0x0a,0x00,0x06,0x24,0x08,0x00,0x44,0x94,0x14,0x00,0x02,0x24,0x14,0x00,0x02,0xae,\r
+0x02,0x80,0x02,0x3c,0x28,0x00,0x03,0x24,0x25,0x20,0x82,0x00,0x0c,0x00,0x03,0xae,\r
+0x52,0x46,0x00,0x0c,0x20,0x00,0x84,0x24,0x59,0x0a,0x00,0x0c,0x21,0x20,0x00,0x02,\r
+0x0a,0x5b,0x00,0x08,0x00,0x00,0x00,0x00,0x25,0xb0,0x02,0x3c,0x21,0x20,0x82,0x00,\r
+0x00,0x00,0x85,0xac,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0xe8,0xff,0xbd,0x27,0xff,0x00,0xa5,0x30,0x10,0x00,0xb0,0xaf,\r
+0x14,0x00,0xbf,0xaf,0x18,0x00,0xa0,0x14,0xff,0x00,0x90,0x30,0x2c,0x00,0x00,0x12,\r
+0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0x01,0x00,0x07,0x24,0xb0,0x44,0x67,0xa0,\r
+0x02,0x80,0x08,0x3c,0xb2,0x44,0x02,0x91,0x02,0x00,0x04,0x24,0x21,0x28,0x00,0x00,\r
+0x02,0x00,0x42,0x34,0x00,0x03,0x06,0x24,0xb2,0x44,0x02,0xa1,0x71,0x14,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x42,0xb0,0x02,0x3c,\r
+0x44,0x00,0x03,0x24,0x03,0x00,0x42,0x34,0x18,0x00,0xbd,0x27,0x00,0x00,0x43,0xa0,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x01,0x00,0x03,0x24,0x02,0x80,0x02,0x3c,\r
+0xb0,0x44,0x43,0xa0,0x02,0x80,0x02,0x3c,0xb3,0x44,0x43,0x90,0x0f,0x00,0x02,0x24,\r
+0x02,0x80,0x05,0x3c,0x0f,0x00,0x63,0x30,0x07,0x00,0x62,0x10,0x01,0x00,0x04,0x24,\r
+0xb2,0x44,0xa2,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x34,0xb2,0x44,0xa2,0xa0,\r
+0x1c,0x46,0x00,0x0c,0x00,0x00,0x00,0x00,0xdb,0xff,0x00,0x16,0x02,0x80,0x03,0x3c,\r
+0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,\r
+0xb0,0x44,0x40,0xa0,0x02,0x80,0x03,0x3c,0x99,0x44,0x64,0x90,0x14,0x00,0xbf,0x8f,\r
+0x10,0x00,0xb0,0x8f,0xff,0x00,0x84,0x30,0xf9,0x1f,0x00,0x08,0x18,0x00,0xbd,0x27,\r
+0xe8,0xff,0xbd,0x27,0x10,0x00,0xb2,0xaf,0x0c,0x00,0xb1,0xaf,0x08,0x00,0xb0,0xaf,\r
+0x21,0x40,0xe0,0x00,0x21,0x90,0xa0,0x03,0x21,0x60,0xc0,0x00,0x21,0x78,0x80,0x00,\r
+0x45,0x00,0xe0,0x14,0x21,0x50,0xa0,0x00,0x2b,0x10,0xa6,0x00,0x78,0x00,0x40,0x10,\r
+0xff,0xff,0x02,0x34,0x2b,0x10,0x46,0x00,0x8f,0x01,0x40,0x10,0x21,0x28,0xc0,0x00,\r
+0xff,0x00,0x02,0x3c,0xff,0xff,0x42,0x34,0x10,0x00,0x03,0x24,0x2b,0x10,0x46,0x00,\r
+0x18,0x00,0x04,0x24,0x21,0x30,0x60,0x00,0x0b,0x30,0x82,0x00,0x02,0x80,0x03,0x3c,\r
+0x06,0x10,0xc5,0x00,0xfc,0xb2,0x63,0x24,0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x90,\r
+0x20,0x00,0x02,0x24,0x21,0x20,0x86,0x00,0x23,0x30,0x44,0x00,0x08,0x00,0xc0,0x10,\r
+0x02,0x4c,0x0c,0x00,0x23,0x10,0x46,0x00,0x06,0x10,0x4f,0x00,0x04,0x18,0xca,0x00,\r
+0x25,0x50,0x62,0x00,0x04,0x60,0xcc,0x00,0x04,0x78,0xcf,0x00,0x02,0x4c,0x0c,0x00,\r
+0x1b,0x00,0x49,0x01,0x02,0x00,0x20,0x15,0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00,\r
+0xff,0xff,0x87,0x31,0x02,0x24,0x0f,0x00,0x12,0x18,0x00,0x00,0x10,0x28,0x00,0x00,\r
+0x00,0x14,0x05,0x00,0x25,0x28,0x44,0x00,0x18,0x00,0x67,0x00,0x12,0x58,0x00,0x00,\r
+0x2b,0x18,0xab,0x00,0x00,0x00,0x00,0x00,0x1b,0x00,0x49,0x01,0x02,0x00,0x20,0x15,\r
+0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00,0x08,0x00,0x60,0x10,0x00,0x00,0x00,0x00,\r
+0x21,0x28,0xac,0x00,0x2b,0x10,0xac,0x00,0x04,0x00,0x40,0x14,0x2b,0x10,0xab,0x00,\r
+0x00,0x00,0x42,0x38,0x21,0x18,0xac,0x00,0x0b,0x28,0x62,0x00,0x23,0x28,0xab,0x00,\r
+0x1b,0x00,0xa9,0x00,0x02,0x00,0x20,0x15,0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00,\r
+0xff,0xff,0xe4,0x31,0x12,0x18,0x00,0x00,0x10,0x40,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x42,0x5c,0x00,0x08,0x18,0x00,0x67,0x00,0x2b,0x10,0xa7,0x00,0x0a,0x00,0x40,0x10,\r
+0xff,0xff,0x02,0x34,0x10,0x00,0xb2,0x8f,0x0c,0x00,0xb1,0x8f,0x08,0x00,0xb0,0x8f,\r
+0x21,0x10,0x80,0x00,0x21,0x18,0xa0,0x00,0x00,0x00,0xa4,0xaf,0x04,0x00,0xa5,0xaf,\r
+0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x2b,0x10,0x47,0x00,0xd2,0x00,0x40,0x10,\r
+0x00,0x01,0xe3,0x2c,0xff,0x00,0x02,0x3c,0x10,0x00,0x03,0x24,0xff,0xff,0x42,0x34,\r
+0x2b,0x10,0x47,0x00,0x18,0x00,0x04,0x24,0x21,0x28,0x60,0x00,0x0b,0x28,0x82,0x00,\r
+0x06,0x10,0xa8,0x00,0x02,0x80,0x03,0x3c,0xfc,0xb2,0x63,0x24,0x21,0x10,0x43,0x00,\r
+0x00,0x00,0x44,0x90,0x20,0x00,0x02,0x24,0x21,0x20,0x85,0x00,0x23,0x30,0x44,0x00,\r
+0xce,0x00,0xc0,0x14,0x23,0x38,0x46,0x00,0x2b,0x10,0x0a,0x01,0x04,0x00,0x40,0x14,\r
+0x23,0x20,0xec,0x01,0x2b,0x10,0xec,0x01,0x05,0x00,0x40,0x14,0x00,0x00,0x00,0x00,\r
+0x2b,0x10,0xe4,0x01,0x23,0x18,0x48,0x01,0x23,0x50,0x62,0x00,0x21,0x78,0x80,0x00,\r
+0x04,0x00,0x40,0x12,0x21,0xc0,0xe0,0x01,0x21,0xc8,0x40,0x01,0x00,0x00,0x58,0xae,\r
+0x04,0x00,0x59,0xae,0x00,0x00,0xa2,0x8f,0x04,0x00,0xa3,0x8f,0x10,0x00,0xb2,0x8f,\r
+0x0c,0x00,0xb1,0x8f,0x08,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,\r
+0x53,0x00,0xc0,0x10,0x01,0x00,0x02,0x24,0xff,0xff,0x02,0x34,0x2b,0x10,0x4c,0x00,\r
+0x59,0x00,0x40,0x14,0xff,0x00,0x02,0x3c,0x00,0x01,0x83,0x2d,0x08,0x00,0x02,0x24,\r
+0x21,0x28,0x00,0x00,0x0a,0x28,0x43,0x00,0x06,0x10,0xac,0x00,0x02,0x80,0x03,0x3c,\r
+0xfc,0xb2,0x63,0x24,0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x90,0x20,0x00,0x02,0x24,\r
+0x21,0x20,0x85,0x00,0x23,0x30,0x44,0x00,0x5b,0x00,0xc0,0x14,0x00,0x00,0x00,0x00,\r
+0x23,0x50,0x4c,0x01,0x02,0x4c,0x0c,0x00,0xff,0xff,0x8d,0x31,0x1b,0x00,0x49,0x01,\r
+0x02,0x00,0x20,0x15,0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00,0x02,0x24,0x0f,0x00,\r
+0x12,0x18,0x00,0x00,0x10,0x28,0x00,0x00,0x00,0x14,0x05,0x00,0x25,0x28,0x44,0x00,\r
+0x18,0x00,0x6d,0x00,0x12,0x58,0x00,0x00,0x2b,0x18,0xab,0x00,0x00,0x00,0x00,0x00,\r
+0x1b,0x00,0x49,0x01,0x02,0x00,0x20,0x15,0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00,\r
+0x08,0x00,0x60,0x10,0x00,0x00,0x00,0x00,0x21,0x28,0xac,0x00,0x2b,0x10,0xac,0x00,\r
+0x04,0x00,0x40,0x14,0x2b,0x10,0xab,0x00,0x00,0x00,0x42,0x38,0x21,0x18,0xac,0x00,\r
+0x0b,0x28,0x62,0x00,0x23,0x28,0xab,0x00,0x1b,0x00,0xa9,0x00,0x02,0x00,0x20,0x15,\r
+0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00,0xff,0xff,0xe4,0x31,0x12,0x18,0x00,0x00,\r
+0x10,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x6d,0x00,\r
+0x00,0x14,0x08,0x00,0x12,0x58,0x00,0x00,0x25,0x40,0x44,0x00,0x2b,0x18,0x0b,0x01,\r
+0x1b,0x00,0xa9,0x00,0x02,0x00,0x20,0x15,0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00,\r
+0x08,0x00,0x60,0x10,0x00,0x00,0x00,0x00,0x21,0x40,0x0c,0x01,0x2b,0x10,0x0c,0x01,\r
+0x04,0x00,0x40,0x14,0x2b,0x10,0x0b,0x01,0x21,0x18,0x0c,0x01,0x00,0x00,0x42,0x38,\r
+0x0b,0x40,0x62,0x00,0xab,0xff,0x40,0x12,0x23,0x78,0x0b,0x01,0x06,0xc0,0xcf,0x00,\r
+0x21,0xc8,0x00,0x00,0x00,0x00,0x58,0xae,0xff,0x5b,0x00,0x08,0x04,0x00,0x59,0xae,\r
+0x1b,0x00,0x47,0x00,0x02,0x00,0xe0,0x14,0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00,\r
+0xff,0xff,0x02,0x34,0x12,0x60,0x00,0x00,0x2b,0x10,0x4c,0x00,0xab,0xff,0x40,0x10,\r
+0x00,0x01,0x83,0x2d,0xff,0x00,0x02,0x3c,0x10,0x00,0x03,0x24,0xff,0xff,0x42,0x34,\r
+0x2b,0x10,0x4c,0x00,0x18,0x00,0x04,0x24,0x21,0x28,0x60,0x00,0x0b,0x28,0x82,0x00,\r
+0x02,0x80,0x03,0x3c,0x06,0x10,0xac,0x00,0xfc,0xb2,0x63,0x24,0x21,0x10,0x43,0x00,\r
+0x00,0x00,0x44,0x90,0x20,0x00,0x02,0x24,0x21,0x20,0x85,0x00,0x23,0x30,0x44,0x00,\r
+0xa7,0xff,0xc0,0x10,0x00,0x00,0x00,0x00,0x23,0x38,0x46,0x00,0x04,0x60,0xcc,0x00,\r
+0x06,0x58,0xea,0x00,0x02,0x4c,0x0c,0x00,0x1b,0x00,0x69,0x01,0x02,0x00,0x20,0x15,\r
+0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00,0xff,0xff,0x8d,0x31,0x06,0x18,0xef,0x00,\r
+0x04,0x10,0xca,0x00,0x25,0x50,0x43,0x00,0x02,0x24,0x0a,0x00,0x12,0x28,0x00,0x00,\r
+0x10,0x40,0x00,0x00,0x00,0x14,0x08,0x00,0x25,0x40,0x44,0x00,0x18,0x00,0xad,0x00,\r
+0x12,0x28,0x00,0x00,0x2b,0x18,0x05,0x01,0x00,0x00,0x00,0x00,0x1b,0x00,0x69,0x01,\r
+0x02,0x00,0x20,0x15,0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00,0x05,0x00,0x60,0x10,\r
+0x04,0x78,0xcf,0x00,0x21,0x40,0x0c,0x01,0x2b,0x10,0x0c,0x01,0x93,0x00,0x40,0x10,\r
+0x2b,0x10,0x05,0x01,0x23,0x40,0x05,0x01,0x1b,0x00,0x09,0x01,0x02,0x00,0x20,0x15,\r
+0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00,0xff,0xff,0x44,0x31,0x12,0x18,0x00,0x00,\r
+0x10,0x58,0x00,0x00,0x00,0x14,0x0b,0x00,0x25,0x58,0x44,0x00,0x18,0x00,0x6d,0x00,\r
+0x12,0x28,0x00,0x00,0x2b,0x18,0x65,0x01,0x00,0x00,0x00,0x00,0x1b,0x00,0x09,0x01,\r
+0x02,0x00,0x20,0x15,0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00,0x77,0xff,0x60,0x10,\r
+0x23,0x50,0x65,0x01,0x21,0x58,0x6c,0x01,0x2b,0x10,0x6c,0x01,0x04,0x00,0x40,0x14,\r
+0x2b,0x10,0x65,0x01,0x00,0x00,0x42,0x38,0x21,0x18,0x6c,0x01,0x0b,0x58,0x62,0x00,\r
+0x1d,0x5c,0x00,0x08,0x23,0x50,0x65,0x01,0x08,0x00,0x02,0x24,0x21,0x28,0x00,0x00,\r
+0x0a,0x28,0x43,0x00,0x02,0x80,0x03,0x3c,0x06,0x10,0xa8,0x00,0xfc,0xb2,0x63,0x24,\r
+0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x90,0x20,0x00,0x02,0x24,0x21,0x20,0x85,0x00,\r
+0x23,0x30,0x44,0x00,0x34,0xff,0xc0,0x10,0x23,0x38,0x46,0x00,0x06,0x10,0xec,0x00,\r
+0x04,0x18,0xc8,0x00,0x25,0x40,0x62,0x00,0x06,0x58,0xea,0x00,0x02,0x6c,0x08,0x00,\r
+0x1b,0x00,0x6d,0x01,0x02,0x00,0xa0,0x15,0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00,\r
+0xff,0xff,0x11,0x31,0x06,0x10,0xef,0x00,0x04,0x18,0xca,0x00,0x25,0x50,0x62,0x00,\r
+0x02,0x24,0x0a,0x00,0x04,0x60,0xcc,0x00,0x12,0x80,0x00,0x00,0x10,0x48,0x00,0x00,\r
+0x00,0x14,0x09,0x00,0x25,0x48,0x44,0x00,0x12,0x28,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x18,0x00,0x11,0x02,0x12,0x70,0x00,0x00,0x2b,0x18,0x2e,0x01,\r
+0x00,0x00,0x00,0x00,0x1b,0x00,0x6d,0x01,0x02,0x00,0xa0,0x15,0x00,0x00,0x00,0x00,\r
+0x0d,0x00,0x07,0x00,0x0a,0x00,0x60,0x10,0x04,0x78,0xcf,0x00,0x21,0x48,0x28,0x01,\r
+0x2b,0x10,0x28,0x01,0x06,0x00,0x40,0x14,0xff,0xff,0xb0,0x24,0x2b,0x10,0x2e,0x01,\r
+0x03,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0xff,0xff,0x10,0x26,0x21,0x48,0x28,0x01,\r
+0x23,0x48,0x2e,0x01,0x1b,0x00,0x2d,0x01,0x02,0x00,0xa0,0x15,0x00,0x00,0x00,0x00,\r
+0x0d,0x00,0x07,0x00,0xff,0xff,0x44,0x31,0x12,0x28,0x00,0x00,0x10,0x58,0x00,0x00,\r
+0x00,0x14,0x0b,0x00,0x25,0x58,0x44,0x00,0x18,0x00,0xb1,0x00,0x12,0x70,0x00,0x00,\r
+0x2b,0x18,0x6e,0x01,0x00,0x00,0x00,0x00,0x1b,0x00,0x2d,0x01,0x02,0x00,0xa0,0x15,\r
+0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00,0x0b,0x00,0x60,0x10,0x00,0x14,0x10,0x00,\r
+0x21,0x58,0x68,0x01,0x2b,0x10,0x68,0x01,0x06,0x00,0x40,0x14,0xff,0xff,0xa5,0x24,\r
+0x2b,0x10,0x6e,0x01,0x04,0x00,0x40,0x10,0x00,0x14,0x10,0x00,0xff,0xff,0xa5,0x24,\r
+0x21,0x58,0x68,0x01,0x00,0x14,0x10,0x00,0x25,0x10,0x45,0x00,0x23,0x58,0x6e,0x01,\r
+0x19,0x00,0x4c,0x00,0x10,0x28,0x00,0x00,0x2b,0x18,0x65,0x01,0x12,0x48,0x00,0x00,\r
+0x05,0x00,0x60,0x14,0x23,0x20,0x2c,0x01,0x07,0x00,0xab,0x14,0x2b,0x10,0xe9,0x01,\r
+0x05,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x24,0x01,0x23,0x18,0xa8,0x00,\r
+0x23,0x28,0x62,0x00,0x21,0x48,0x80,0x00,0xea,0xfe,0x40,0x12,0x23,0x18,0xe9,0x01,\r
+0x23,0x20,0x65,0x01,0x2b,0x10,0xe3,0x01,0x23,0x50,0x82,0x00,0x04,0x28,0xea,0x00,\r
+0x06,0x18,0xc3,0x00,0x25,0xc0,0xa3,0x00,0x06,0xc8,0xca,0x00,0x00,0x00,0x58,0xae,\r
+0xff,0x5b,0x00,0x08,0x04,0x00,0x59,0xae,0x00,0x01,0xc3,0x2c,0x08,0x00,0x02,0x24,\r
+0x21,0x30,0x00,0x00,0x99,0x5b,0x00,0x08,0x0a,0x30,0x43,0x00,0x00,0x00,0x42,0x38,\r
+0x21,0x18,0x0c,0x01,0x93,0x5c,0x00,0x08,0x0b,0x40,0x62,0x00,0x25,0xb0,0x02,0x3c,\r
+0x4d,0x00,0x44,0x34,0xff,0x00,0x03,0x3c,0xec,0x02,0x42,0x34,0x00,0x00,0x43,0xac,\r
+0x00,0x00,0x80,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0x3c,\r
+0x25,0xb0,0x02,0x3c,0xc4,0x74,0x63,0x24,0x18,0x03,0x42,0x34,0x00,0x00,0x43,0xac,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x7f,0x00,0x02,0x3c,0x0d,0xb8,0x46,0x34,\r
+0x80,0x00,0x03,0x3c,0x25,0x30,0xc3,0x00,0x00,0x04,0x02,0x3c,0x25,0x30,0xc2,0x00,\r
+0x00,0x08,0x03,0x3c,0x25,0x30,0xc3,0x00,0x02,0x80,0x04,0x3c,0x01,0x80,0x03,0x3c,\r
+0x25,0xb0,0x02,0x3c,0x78,0x1b,0x84,0x24,0x41,0xb0,0x05,0x3c,0xe0,0x74,0x63,0x24,\r
+0x18,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x00,0x00,0xa6,0xac,0x10,0x0b,0x86,0xac,\r
+0x08,0x0b,0x86,0xac,0x08,0x00,0xa5,0x34,0x86,0x00,0x06,0x24,0x00,0x00,0xa6,0xa4,\r
+0x14,0x0b,0x86,0xa4,0x0c,0x0b,0x80,0xac,0x16,0x0b,0x80,0xa4,0x08,0x00,0xe0,0x03,\r
+0x18,0x0b,0x86,0xa4,0x53,0x5d,0x00,0x08,0x00,0x00,0x00,0x00,0x42,0xb0,0x02,0x3c,\r
+0xa0,0xff,0x03,0x24,0x01,0x00,0x42,0x34,0xe8,0xff,0xbd,0x27,0x21,0x20,0x00,0x00,\r
+0x01,0x00,0x05,0x24,0x00,0x01,0x06,0x24,0x00,0x00,0x43,0xa0,0x10,0x00,0xbf,0xaf,\r
+0x71,0x14,0x00,0x0c,0x00,0x00,0x00,0x00,0x10,0x00,0xbf,0x8f,0x03,0x00,0x04,0x24,\r
+0x01,0x00,0x05,0x24,0x40,0x1f,0x06,0x24,0x71,0x14,0x00,0x08,0x18,0x00,0xbd,0x27,\r
+0x25,0xb0,0x03,0x3c,0x01,0x80,0x02,0x3c,0xe0,0xff,0xbd,0x27,0x18,0x03,0x64,0x34,\r
+0x98,0x75,0x42,0x24,0x00,0x00,0x82,0xac,0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,\r
+0x18,0x00,0xbf,0xaf,0xb6,0x00,0x63,0x34,0x00,0x00,0x62,0x90,0x02,0x80,0x10,0x3c,\r
+0x78,0x1b,0x10,0x26,0xe3,0x0a,0x02,0xa2,0x34,0x61,0x00,0x0c,0xee,0x23,0x00,0xa2,\r
+0xff,0xff,0x02,0x34,0x21,0x88,0x00,0x02,0xf8,0x23,0x02,0xae,0xf0,0x23,0x00,0xa6,\r
+0xf2,0x23,0x00,0xa6,0xf4,0x23,0x02,0xae,0x21,0x28,0x00,0x00,0x21,0x20,0x00,0x02,\r
+0x04,0x00,0xa2,0x24,0x01,0x00,0xa5,0x24,0x20,0x00,0xa3,0x28,0xee,0x0c,0x82,0xa4,\r
+0xdc,0x0c,0x80,0xa4,0xde,0x0c,0x80,0xa4,0xe0,0x0c,0x80,0xa4,0xe2,0x0c,0x80,0xa4,\r
+0xe4,0x0c,0x80,0xa4,0xe6,0x0c,0x80,0xa4,0xe8,0x0c,0x80,0xa4,0xea,0x0c,0x80,0xa4,\r
+0xec,0x0c,0x80,0xa4,0xf0,0x0c,0x80,0xa0,0xf1,0xff,0x60,0x14,0x24,0x00,0x84,0x24,\r
+0x25,0xb0,0x02,0x3c,0x10,0x00,0x03,0x24,0xb0,0x03,0x42,0x34,0x02,0x80,0x04,0x3c,\r
+0xa0,0x1e,0x84,0x24,0x00,0x00,0x43,0xac,0x21,0x28,0x00,0x00,0x3e,0x46,0x00,0x0c,\r
+0x04,0x00,0x06,0x24,0x11,0x62,0x00,0x0c,0x00,0x00,0x00,0x00,0x84,0x62,0x00,0x0c,\r
+0xec,0x25,0x20,0xae,0xe6,0x63,0x00,0x0c,0x00,0x00,0x00,0x00,0x02,0x80,0x03,0x3c,\r
+0x56,0x43,0x64,0x90,0x92,0x00,0x02,0x24,0x03,0x00,0x82,0x10,0x00,0x00,0x00,0x00,\r
+0x5c,0x64,0x00,0x0c,0x00,0x00,0x00,0x00,0x42,0x64,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0xbd,0x62,0x00,0x0c,0x00,0x00,0x00,0x00,0xc9,0x64,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x50,0x24,0x20,0xa6,0xaf,0x64,0x00,0x0c,0x52,0x24,0x20,0xa6,0xf3,0x64,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x02,0x80,0x05,0x3c,0x02,0x80,0x06,0x3c,0x02,0x80,0x07,0x3c,0x68,0x41,0xa2,0x24,\r
+0x70,0x41,0xc3,0x24,0x78,0x41,0xe4,0x24,0x20,0x00,0xbd,0x27,0x04,0x00,0x42,0xac,\r
+0x68,0x41,0xa2,0xac,0x04,0x00,0x63,0xac,0x70,0x41,0xc3,0xac,0x78,0x41,0xe4,0xac,\r
+0x08,0x00,0xe0,0x03,0x04,0x00,0x84,0xac,0x01,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,\r
+0xe8,0xff,0xbd,0x27,0x00,0x77,0x63,0x24,0x18,0x03,0x42,0x34,0x14,0x00,0xbf,0xaf,\r
+0x10,0x00,0xb0,0xaf,0x00,0x00,0x43,0xac,0x21,0x20,0x00,0x00,0x01,0x00,0x82,0x24,\r
+0xff,0xff,0x44,0x30,0x64,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24,\r
+0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0x52,0x43,0x48,0x90,0x50,0x43,0x65,0x94,\r
+0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0x53,0x43,0x46,0x90,0x60,0x43,0x67,0x90,\r
+0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0x6b,0x43,0x49,0x90,0x6d,0x43,0x6a,0x90,\r
+0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0x70,0x43,0x4b,0x90,0x72,0x43,0x6c,0x90,\r
+0x02,0x80,0x02,0x3c,0x07,0x00,0x03,0x24,0x25,0xb0,0x04,0x3c,0x5d,0x43,0x43,0xa0,\r
+0xb0,0x03,0x84,0x34,0x02,0x80,0x02,0x3c,0x00,0x00,0x85,0xac,0x5e,0x43,0x40,0xa0,\r
+0x02,0x80,0x02,0x3c,0x00,0x00,0x86,0xac,0x5f,0x43,0x40,0xa0,0x02,0x80,0x02,0x3c,\r
+0x00,0x00,0x87,0xac,0x02,0x80,0x03,0x3c,0x80,0x43,0x40,0xa0,0x02,0x80,0x10,0x3c,\r
+0x02,0x80,0x02,0x3c,0x78,0x1b,0x0d,0x26,0x7e,0x43,0x60,0xa4,0x7c,0x43,0x40,0xa4,\r
+0x01,0x00,0x03,0x24,0xfd,0xff,0x02,0x24,0xe0,0x0a,0xa3,0xa1,0xe2,0x0a,0xa2,0xa1,\r
+0xff,0x07,0x03,0x24,0x00,0x78,0x02,0x24,0xe6,0x0a,0xa3,0xa5,0xe4,0x0a,0xa2,0xa5,\r
+0xff,0xff,0x03,0x24,0x02,0x80,0x02,0x3c,0x00,0x00,0x88,0xac,0x0f,0x00,0x0e,0x31,\r
+0x00,0x00,0x89,0xac,0x00,0x00,0x8a,0xac,0x00,0x00,0x8b,0xac,0x00,0x00,0x8c,0xac,\r
+0x91,0x43,0x43,0xa0,0x02,0x00,0x02,0x24,0xe8,0x0a,0xa0,0xa1,0x31,0x00,0xc2,0x11,\r
+0x82,0x0b,0xa0,0xa1,0x00,0x80,0x02,0x3c,0x15,0x15,0x03,0x3c,0x02,0xbc,0x42,0x34,\r
+0x07,0x07,0x63,0x34,0x74,0x0b,0xa2,0xad,0x6c,0x0b,0xa3,0xad,0x02,0x02,0x02,0x3c,\r
+0x70,0x0b,0xa2,0xad,0x02,0x80,0x02,0x3c,0x25,0xb0,0x04,0x3c,0x9c,0x43,0x40,0xa4,\r
+0x0a,0x00,0x83,0x34,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,0x20,0x00,0x42,0x30,\r
+0x12,0x00,0x40,0x10,0x4c,0x87,0x02,0x3c,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,\r
+0x10,0x00,0x42,0x30,0x38,0x00,0x40,0x14,0x21,0x20,0x00,0x00,0x08,0x00,0x82,0x24,\r
+0xff,0xff,0x44,0x30,0x80,0x00,0x83,0x2c,0xfc,0xff,0x60,0x14,0x78,0x1b,0x03,0x26,\r
+0x01,0x00,0x02,0x24,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x05,0x00,0x04,0x24,\r
+0x8b,0x0b,0x62,0xa0,0x93,0x12,0x00,0x08,0x18,0x00,0xbd,0x27,0x54,0x00,0x85,0x34,\r
+0x00,0xe0,0x42,0x34,0x50,0x00,0x84,0x34,0x12,0x01,0x03,0x24,0x00,0x00,0x82,0xac,\r
+0x00,0x00,0xa3,0xac,0x01,0x00,0x02,0x24,0x78,0x1b,0x03,0x26,0x14,0x00,0xbf,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x05,0x00,0x04,0x24,0x8b,0x0b,0x62,0xa0,0x93,0x12,0x00,0x08,\r
+0x18,0x00,0xbd,0x27,0x02,0x80,0x02,0x3c,0x57,0x43,0x44,0x90,0x06,0x00,0x03,0x24,\r
+0x25,0x00,0x83,0x10,0x0b,0x00,0x02,0x24,0x10,0x00,0x82,0x10,0x00,0x80,0x02,0x3c,\r
+0x02,0x80,0x02,0x3c,0x6a,0x43,0x43,0x90,0x00,0x00,0x00,0x00,0x2c,0x00,0x60,0x10,\r
+0x00,0xe0,0x02,0x3c,0x04,0xe0,0x02,0x3c,0x78,0x1b,0x04,0x26,0x00,0x8e,0x42,0x34,\r
+0x00,0x15,0x03,0x3c,0x74,0x0b,0x82,0xac,0x00,0x15,0x63,0x34,0x00,0x42,0x02,0x24,\r
+0x6c,0x0b,0x83,0xac,0x0f,0x5e,0x00,0x08,0x70,0x0b,0x82,0xac,0x00,0xbc,0x42,0x34,\r
+0x15,0x15,0x03,0x3c,0x74,0x0b,0xa2,0xad,0x07,0x07,0x63,0x34,0x03,0x03,0x02,0x3c,\r
+0x0e,0x5e,0x00,0x08,0x6c,0x0b,0xa3,0xad,0x02,0x80,0x06,0x3c,0x00,0xb4,0xc6,0x24,\r
+0xf5,0x13,0x00,0x0c,0x80,0x00,0x05,0x24,0x78,0x1b,0x03,0x26,0x01,0x00,0x02,0x24,\r
+0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x05,0x00,0x04,0x24,0x8b,0x0b,0x62,0xa0,\r
+0x93,0x12,0x00,0x08,0x18,0x00,0xbd,0x27,0x02,0x80,0x02,0x3c,0x6a,0x43,0x43,0x90,\r
+0x00,0x00,0x00,0x00,0x13,0x00,0x60,0x10,0x1c,0x1c,0x03,0x3c,0x04,0xc0,0x02,0x3c,\r
+0x00,0xb8,0x42,0x34,0x74,0x0b,0xa2,0xad,0x00,0x15,0x03,0x3c,0x02,0x02,0x02,0x3c,\r
+0x00,0x07,0x63,0x34,0x00,0x22,0x42,0x34,0x0e,0x5e,0x00,0x08,0x6c,0x0b,0xa3,0xad,\r
+0x78,0x1b,0x04,0x26,0x00,0xb2,0x42,0x34,0x00,0x1c,0x03,0x3c,0x74,0x0b,0x82,0xac,\r
+0x00,0x1c,0x63,0x34,0x00,0x04,0x02,0x24,0x6c,0x0b,0x83,0xac,0x0f,0x5e,0x00,0x08,\r
+0x70,0x0b,0x82,0xac,0x00,0xc0,0x02,0x3c,0x00,0xb2,0x42,0x34,0x74,0x0b,0xa2,0xad,\r
+0x07,0x07,0x63,0x34,0x00,0x04,0x02,0x24,0x0e,0x5e,0x00,0x08,0x6c,0x0b,0xa3,0xad,\r
+0xe8,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,0x01,0x80,0x02,0x3c,0x25,0xb0,0x10,0x3c,\r
+0x18,0x03,0x03,0x36,0xf8,0x79,0x42,0x24,0x00,0x00,0x62,0xac,0x14,0x00,0xbf,0xaf,\r
+0xc0,0x5d,0x00,0x0c,0x00,0x00,0x00,0x00,0xff,0x5e,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x25,0x61,0x00,0x0c,0x00,0x00,0x00,0x00,0x29,0x5d,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x3a,0x41,0x00,0x0c,0x00,0x00,0x00,0x00,0x66,0x5d,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x44,0x00,0x03,0x36,0x00,0x00,0x62,0x94,0x00,0x00,0x00,0x00,0x40,0x00,0x42,0x34,\r
+0x00,0x00,0x62,0xa4,0x31,0x5d,0x00,0x0c,0x00,0x00,0x00,0x00,0x55,0x5d,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0xf1,0x60,0x00,0x0c,0x00,0x00,0x00,0x00,0xaf,0x60,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x00,0x80,0x04,0x3c,0xac,0x37,0x84,0x24,0x0e,0x61,0x00,0x0c,\r
+0x01,0x00,0x05,0x24,0x00,0x80,0x04,0x3c,0xcc,0x41,0x84,0x24,0x0e,0x61,0x00,0x0c,\r
+0x02,0x00,0x05,0x24,0x01,0x80,0x04,0x3c,0xa4,0x20,0x84,0x24,0x0e,0x61,0x00,0x0c,\r
+0x04,0x00,0x05,0x24,0x04,0x50,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x80,0x04,0x3c,\r
+0x08,0x53,0x84,0x24,0x0e,0x61,0x00,0x0c,0x03,0x00,0x05,0x24,0x02,0x80,0x02,0x3c,\r
+0x60,0x43,0x43,0x90,0x43,0x00,0x04,0x36,0x2a,0x00,0x60,0x10,0xd8,0x00,0x10,0x36,\r
+0x07,0x00,0x02,0x24,0x2c,0x00,0x62,0x10,0x25,0xb0,0x04,0x3c,0x43,0x00,0x85,0x34,\r
+0x10,0x02,0x86,0x34,0x03,0x00,0x02,0x24,0x10,0x00,0x03,0x24,0x00,0x00,0xa2,0xa0,\r
+0xd8,0x00,0x84,0x34,0x00,0x00,0xc3,0xa0,0x00,0x00,0x82,0x90,0x80,0xff,0x03,0x24,\r
+0x25,0x10,0x43,0x00,0x00,0x00,0x82,0xa0,0x32,0x61,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x42,0xb0,0x03,0x3c,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x34,\r
+0x00,0x00,0x62,0xa0,0x38,0x5d,0x00,0x0c,0x00,0x00,0x00,0x00,0x25,0xb0,0x03,0x3c,\r
+0x44,0x00,0x63,0x34,0x00,0x00,0x62,0x94,0x02,0x80,0x04,0x3c,0x08,0x00,0x84,0x24,\r
+0xc0,0x00,0x42,0x34,0x00,0x00,0x62,0xa4,0x21,0x28,0x00,0x00,0x21,0x30,0x00,0x00,\r
+0x2d,0x28,0x00,0x0c,0x21,0x38,0x00,0x00,0x53,0x5d,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,\r
+0x18,0x00,0xbd,0x27,0x00,0x00,0x80,0xa0,0x00,0x00,0x03,0x92,0x80,0xff,0x02,0x24,\r
+0x25,0x18,0x62,0x00,0x00,0x00,0x03,0xa2,0x32,0x61,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x42,0xb0,0x03,0x3c,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x34,\r
+0x00,0x00,0x62,0xa0,0x38,0x5d,0x00,0x0c,0x00,0x00,0x00,0x00,0x25,0xb0,0x03,0x3c,\r
+0x44,0x00,0x63,0x34,0x00,0x00,0x62,0x94,0x02,0x80,0x04,0x3c,0x08,0x00,0x84,0x24,\r
+0xc0,0x00,0x42,0x34,0x00,0x00,0x62,0xa4,0x21,0x28,0x00,0x00,0x21,0x30,0x00,0x00,\r
+0x2d,0x28,0x00,0x0c,0x21,0x38,0x00,0x00,0x53,0x5d,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,\r
+0x18,0x00,0xbd,0x27,0xb0,0xff,0xbd,0x27,0x02,0x80,0x03,0x3c,0x4c,0x00,0xbf,0xaf,\r
+0x48,0x00,0xbe,0xaf,0x3c,0x00,0xb5,0xaf,0x38,0x00,0xb4,0xaf,0x34,0x00,0xb3,0xaf,\r
+0x30,0x00,0xb2,0xaf,0x2c,0x00,0xb1,0xaf,0x28,0x00,0xb0,0xaf,0x44,0x00,0xb7,0xaf,\r
+0x40,0x00,0xb6,0xaf,0x78,0x1b,0x62,0x24,0xe2,0x0a,0x43,0x90,0xe4,0x0a,0x45,0x94,\r
+0xe6,0x0a,0x46,0x94,0x1c,0x00,0xa3,0xa3,0x6c,0x0b,0x43,0x8c,0x24,0xb0,0x04,0x3c,\r
+0x21,0xb0,0x07,0x3c,0x10,0x00,0xa3,0xaf,0x70,0x0b,0x43,0x8c,0x25,0xb0,0x1e,0x3c,\r
+0x01,0x00,0x88,0x34,0x14,0x00,0xa3,0xaf,0x74,0x0b,0x42,0x8c,0x21,0x38,0xa7,0x00,\r
+0xff,0x1f,0x03,0x3c,0x18,0x00,0xa2,0xaf,0x20,0xb0,0x02,0x3c,0xff,0xff,0x42,0x34,\r
+0x21,0x28,0xa2,0x00,0x4c,0x81,0x02,0x3c,0xff,0xff,0x63,0x34,0x21,0x40,0xc8,0x00,\r
+0x58,0x00,0xc9,0x37,0x21,0x30,0xc4,0x00,0x00,0xe0,0x42,0x34,0x00,0x00,0x22,0xad,\r
+0xff,0xff,0x04,0x24,0x24,0x40,0x03,0x01,0x24,0x28,0xa3,0x00,0x24,0x38,0xe3,0x00,\r
+0x24,0x30,0xc3,0x00,0x5c,0x00,0xca,0x37,0x60,0x00,0xcb,0x37,0x64,0x00,0xcc,0x37,\r
+0x8a,0x00,0xcd,0x37,0x96,0x01,0x03,0x24,0x28,0x28,0x02,0x24,0x00,0x00,0x43,0xad,\r
+0x89,0x00,0xce,0x37,0x00,0x00,0x64,0xad,0x8c,0x00,0xcf,0x37,0x00,0x00,0x84,0xad,\r
+0x09,0x00,0x03,0x24,0x00,0x00,0xa2,0xa5,0x0a,0x0a,0x02,0x24,0x00,0x00,0xc3,0xa1,\r
+0x00,0x00,0xe2,0xa5,0x25,0xb0,0x02,0x3c,0x0e,0x0e,0x03,0x24,0x8e,0x00,0x42,0x34,\r
+0x00,0x00,0x43,0xa4,0x90,0x00,0xd1,0x37,0x13,0x00,0x02,0x24,0x00,0x00,0x22,0xa2,\r
+0x40,0x00,0x03,0x24,0x3a,0x01,0x02,0x24,0x91,0x00,0xd2,0x37,0x92,0x00,0xd3,0x37,\r
+0x00,0x00,0x43,0xa2,0x00,0x00,0x62,0xa6,0x25,0xb0,0x02,0x3c,0x21,0x00,0x03,0x24,\r
+0xb5,0x00,0x42,0x34,0x00,0x00,0x43,0xa0,0x10,0x00,0xa3,0x8f,0xa0,0x00,0xd5,0x37,\r
+0x25,0xb0,0x02,0x3c,0x00,0x00,0xa3,0xae,0x14,0x00,0xa3,0x8f,0xa4,0x00,0x42,0x34,\r
+0xb0,0x00,0xdf,0x37,0x00,0x00,0x43,0xac,0x18,0x00,0xa3,0x8f,0x25,0xb0,0x02,0x3c,\r
+0xa8,0x00,0x42,0x34,0x00,0x00,0x43,0xac,0x25,0xb0,0x02,0x3c,0x25,0xb0,0x03,0x3c,\r
+0xac,0x00,0x42,0x34,0xf8,0x00,0x63,0x34,0x00,0x00,0x45,0xac,0x00,0x00,0x67,0xac,\r
+0x25,0xb0,0x02,0x3c,0x25,0xb0,0x03,0x3c,0x08,0x01,0x42,0x34,0xd8,0x00,0x63,0x34,\r
+0x00,0x00,0xe6,0xaf,0x00,0x00,0x48,0xac,0x00,0x00,0x60,0xa0,0x1c,0x00,0xa3,0x93,\r
+0x25,0xb0,0x02,0x3c,0xb4,0x00,0x42,0x34,0x00,0x00,0x43,0xa0,0x25,0xb0,0x02,0x3c,\r
+0x04,0x00,0x03,0x24,0xb6,0x00,0x42,0x34,0x00,0x00,0x43,0xa0,0x25,0xb0,0x02,0x3c,\r
+0xb9,0x00,0x42,0x34,0x25,0xb0,0x03,0x3c,0x00,0x00,0x44,0xa0,0xba,0x00,0x63,0x34,\r
+0x0f,0x00,0x02,0x24,0x00,0x00,0x62,0xa4,0x25,0xb0,0x02,0x3c,0x1a,0x01,0x42,0x34,\r
+0x16,0x01,0xd4,0x37,0x18,0x01,0xd0,0x37,0x25,0xb0,0x03,0x3c,0x00,0x00,0x80,0xa6,\r
+0xdc,0x00,0x63,0x34,0x00,0x00,0x00,0xa6,0x00,0x00,0x40,0xa4,0xff,0xcf,0x02,0x24,\r
+0x00,0x00,0x62,0xac,0x02,0x80,0x02,0x3c,0x56,0x43,0x42,0x90,0xd0,0x01,0xc4,0x37,\r
+0x5e,0x00,0x03,0x3c,0x20,0x00,0xa2,0xaf,0x2f,0x00,0x02,0x3c,0x32,0x32,0x42,0x34,\r
+0x00,0x00,0x82,0xac,0x08,0x00,0x02,0x3c,0x32,0x43,0x63,0x34,0x30,0xa5,0x42,0x34,\r
+0xd4,0x01,0xc5,0x37,0xd8,0x01,0xc6,0x37,0x00,0x00,0xa3,0xac,0xdc,0x01,0xc7,0x37,\r
+0x00,0x00,0xc2,0xac,0x49,0xa5,0x03,0x34,0x1a,0x06,0x02,0x24,0xe0,0x01,0xc8,0x37,\r
+0x00,0x00,0xe3,0xac,0xf4,0x01,0xc9,0x37,0x00,0x00,0x02,0xa5,0x07,0x07,0x03,0x24,\r
+0xc2,0x00,0x02,0x3c,0x00,0x00,0x23,0xa5,0x51,0x10,0x42,0x34,0x26,0x00,0x03,0x24,\r
+0xf8,0x01,0xca,0x37,0x00,0x02,0xcb,0x37,0x00,0x00,0x42,0xad,0x03,0x02,0xcc,0x37,\r
+0x00,0x00,0x63,0xa5,0x0c,0x00,0x02,0x24,0x04,0x00,0x03,0x24,0x36,0x02,0xcd,0x37,\r
+0x00,0x00,0x83,0xa1,0x34,0x02,0xce,0x37,0x00,0x00,0xa2,0xa1,0xc0,0x01,0x03,0x24,\r
+0x03,0x00,0x02,0x24,0x37,0x02,0xcf,0x37,0x00,0x00,0xc3,0xa5,0x00,0x00,0xe2,0xa1,\r
+0x20,0x00,0xa2,0x8f,0x22,0x00,0x03,0x24,0xd2,0x00,0x43,0x10,0x1b,0x1b,0x02,0x3c,\r
+0x13,0x13,0x02,0x3c,0x13,0x13,0x42,0x34,0x60,0x01,0xc3,0x37,0x64,0x01,0xc4,0x37,\r
+0x68,0x01,0xc5,0x37,0x7c,0x01,0xca,0x37,0x6c,0x01,0xc6,0x37,0x70,0x01,0xc7,0x37,\r
+0x74,0x01,0xc8,0x37,0x78,0x01,0xc9,0x37,0x00,0x00,0x62,0xac,0x00,0x00,0x82,0xac,\r
+0x02,0x80,0x03,0x3c,0x00,0x00,0xa2,0xac,0x00,0x00,0xc2,0xac,0x00,0x00,0xe2,0xac,\r
+0x00,0x00,0x02,0xad,0x00,0x00,0x22,0xad,0x00,0x00,0x42,0xad,0x56,0x43,0x65,0x90,\r
+0x25,0xb0,0x0c,0x3c,0x01,0x70,0x03,0x3c,0x80,0x01,0x82,0x35,0x08,0x5f,0x63,0x34,\r
+0x22,0x00,0x04,0x24,0x00,0x00,0x43,0xac,0xb1,0x00,0xa4,0x10,0x0f,0x1f,0x02,0x3c,\r
+0x92,0x00,0x02,0x24,0xae,0x00,0xa2,0x10,0x0f,0x1f,0x02,0x3c,0x0f,0x10,0x02,0x3c,\r
+0x00,0xf0,0x4f,0x34,0xf7,0x01,0x91,0x35,0x15,0xf0,0x4d,0x34,0x77,0x00,0x0e,0x24,\r
+0x84,0x01,0x87,0x35,0x88,0x01,0x88,0x35,0x10,0xf0,0x44,0x34,0x8c,0x01,0x85,0x35,\r
+0x05,0xf0,0x42,0x34,0x00,0x00,0xed,0xac,0x90,0x01,0x83,0x35,0x00,0x00,0x04,0xad,\r
+0x94,0x01,0x86,0x35,0x00,0x00,0xa2,0xac,0xf5,0x0f,0x02,0x24,0x00,0x00,0x6f,0xac,\r
+0x25,0xb0,0x05,0x3c,0x00,0x00,0xc2,0xac,0x98,0x01,0x89,0x35,0x9c,0x01,0x8a,0x35,\r
+0xf0,0x0f,0x03,0x24,0x0d,0x00,0x02,0x24,0x00,0x00,0x23,0xad,0xa0,0x01,0x8b,0x35,\r
+0x00,0x00,0x42,0xad,0xa7,0x01,0xb7,0x34,0xf6,0x01,0x8c,0x35,0xff,0xff,0x02,0x24,\r
+0x00,0x00,0x6d,0xad,0x03,0x04,0x04,0x3c,0x00,0x00,0x8e,0xa1,0x07,0x08,0x03,0x3c,\r
+0x00,0x00,0x2e,0xa2,0x00,0x00,0xe2,0xa2,0x25,0xb0,0x02,0x3c,0x01,0x02,0x84,0x34,\r
+0x05,0x06,0x63,0x34,0xa8,0x01,0xb6,0x34,0xff,0xff,0x09,0x24,0xac,0x01,0xaf,0x34,\r
+0xb4,0x01,0xb1,0x34,0xb8,0x01,0xb2,0x34,0xbc,0x01,0xb3,0x34,0xb0,0x01,0x42,0x34,\r
+0x00,0x00,0xc9,0xae,0x00,0x00,0xe9,0xad,0x00,0x00,0x44,0xac,0x00,0x00,0x23,0xae,\r
+0x00,0x00,0x44,0xae,0x00,0x00,0x63,0xae,0x25,0xb0,0x03,0x3c,0x0c,0x00,0x06,0x24,\r
+0xc0,0x01,0x63,0x34,0x25,0xb0,0x02,0x3c,0x00,0x00,0x66,0xa0,0xc1,0x01,0xb5,0x34,\r
+0xc2,0x01,0x42,0x34,0x25,0xb0,0x03,0x3c,0x00,0x00,0xa6,0xa2,0x0d,0x00,0x08,0x24,\r
+0x00,0x00,0x46,0xa0,0xc4,0x01,0xab,0x34,0xc5,0x01,0xac,0x34,0x0e,0x00,0x07,0x24,\r
+0xc6,0x01,0xaa,0x34,0xc7,0x01,0xad,0x34,0xc3,0x01,0x63,0x34,0x0f,0x00,0x02,0x24,\r
+0x00,0x00,0x68,0xa0,0x00,0x00,0x68,0xa1,0x00,0x00,0x87,0xa1,0x00,0x00,0x47,0xa1,\r
+0x00,0x00,0xa2,0xa1,0x57,0x01,0x02,0x3c,0x48,0x00,0xbf,0x34,0x46,0x00,0xae,0x34,\r
+0x0e,0xe2,0x42,0x34,0x00,0x00,0xc0,0xa5,0x4c,0x00,0xbe,0x34,0x00,0x00,0xe2,0xaf,\r
+0x4d,0x00,0xb9,0x34,0x80,0xff,0x02,0x24,0x00,0x00,0xc0,0xa3,0x00,0x00,0x22,0xa3,\r
+0x25,0xb0,0x02,0x3c,0xbc,0x00,0x03,0x24,0x40,0x00,0x42,0x34,0x00,0x00,0x43,0xa4,\r
+0x25,0xb0,0x03,0x3c,0x64,0x03,0xb8,0x34,0xfc,0x37,0x02,0x24,0x40,0x00,0x63,0x34,\r
+0x00,0x00,0x00,0xa3,0x00,0x00,0x62,0xa4,0x02,0x80,0x02,0x3c,0xd8,0x00,0xaa,0x34,\r
+0x78,0x1b,0x43,0x24,0xe2,0x0a,0x64,0x90,0x00,0x00,0x47,0x91,0x2a,0xb0,0x06,0x3c,\r
+0xa0,0xff,0x02,0x24,0x25,0x38,0xe2,0x00,0x34,0x00,0xc9,0x34,0x01,0x00,0x83,0x24,\r
+0x00,0x00,0x47,0xa1,0x26,0xb0,0x08,0x3c,0x00,0x00,0x23,0xa1,0x30,0x00,0xce,0x34,\r
+0x20,0x20,0x02,0x24,0x38,0x00,0xc6,0x34,0x40,0x00,0x03,0x24,0x00,0x00,0xc2,0xa4,\r
+0x79,0x00,0x0b,0x35,0x00,0x00,0xc3,0xa1,0x94,0x00,0xac,0x34,0x16,0x00,0x02,0x24,\r
+0x64,0x00,0x03,0x24,0x00,0x00,0x62,0xa1,0x7c,0x00,0x15,0x35,0x00,0x00,0x83,0xa5,\r
+0x98,0x00,0xad,0x34,0x7a,0x00,0x08,0x35,0x22,0x00,0x02,0x24,0x04,0x00,0x03,0x24,\r
+0x00,0x00,0xa2,0xa5,0x9c,0x00,0xaf,0x34,0x00,0x00,0x03,0xa1,0x20,0x0c,0x02,0x24,\r
+0x0a,0x00,0x03,0x24,0x00,0x00,0xa2,0xa6,0x00,0x00,0xe3,0xa1,0x25,0xb0,0x03,0x3c,\r
+0xff,0x03,0x02,0x24,0x9a,0x00,0x63,0x34,0x00,0x00,0x62,0xa4,0x96,0x00,0xb1,0x34,\r
+0x02,0x00,0x03,0x24,0x00,0x00,0x23,0xa6,0xb7,0x00,0xb2,0x34,0x89,0x00,0xb3,0x34,\r
+0x20,0x00,0x02,0x24,0x09,0x00,0x03,0x24,0x00,0x00,0x42,0xa2,0x44,0x00,0xa5,0x34,\r
+0x00,0x00,0x63,0xa2,0x00,0x00,0xa2,0x94,0xff,0xfd,0x03,0x24,0x04,0x02,0x06,0x24,\r
+0x24,0x10,0x43,0x00,0x00,0x00,0xa2,0xa4,0x00,0x00,0xa3,0x94,0x29,0xb0,0x02,0x3c,\r
+0x40,0x00,0x42,0x34,0x00,0x02,0x63,0x34,0x00,0x00,0xa3,0xa4,0xff,0x00,0x84,0x30,\r
+0x00,0x00,0x46,0xa4,0xea,0x12,0x00,0x0c,0x00,0x00,0x00,0x00,0x4c,0x00,0xbf,0x8f,\r
+0x48,0x00,0xbe,0x8f,0x44,0x00,0xb7,0x8f,0x40,0x00,0xb6,0x8f,0x3c,0x00,0xb5,0x8f,\r
+0x38,0x00,0xb4,0x8f,0x34,0x00,0xb3,0x8f,0x30,0x00,0xb2,0x8f,0x2c,0x00,0xb1,0x8f,\r
+0x28,0x00,0xb0,0x8f,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x50,0x00,0xbd,0x27,\r
+0x00,0xf0,0x4f,0x34,0xf7,0x01,0x91,0x35,0x15,0xf0,0x4d,0x34,0xd2,0x5f,0x00,0x08,\r
+0xff,0xff,0x0e,0x24,0xb0,0x5f,0x00,0x08,0x1b,0x1b,0x42,0x34,0x25,0xb0,0x03,0x3c,\r
+0x25,0xb0,0x08,0x3c,0xfc,0x37,0x02,0x24,0x40,0x00,0x63,0x34,0x02,0x80,0x04,0x3c,\r
+0x00,0x00,0x62,0xa4,0x34,0x9b,0x84,0x24,0xff,0x00,0x07,0x24,0xb0,0x03,0x06,0x35,\r
+0x00,0x00,0x83,0x94,0x00,0x00,0x00,0x00,0xff,0x00,0x62,0x30,0x21,0x18,0x68,0x00,\r
+0x0a,0x00,0x47,0x10,0xff,0x00,0x65,0x30,0x04,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x62,0xac,0x00,0x00,0xc3,0xac,0x04,0x00,0x82,0x8c,0x08,0x00,0x84,0x24,\r
+0x00,0x00,0xc2,0xac,0xf2,0xff,0xa7,0x14,0x00,0x00,0x00,0x00,0x25,0xb0,0x08,0x3c,\r
+0x02,0x80,0x02,0x3c,0x2c,0x95,0x44,0x24,0xff,0x00,0x07,0x24,0xb0,0x03,0x06,0x35,\r
+0x00,0x00,0x83,0x94,0x00,0x00,0x00,0x00,0xff,0x00,0x62,0x30,0x21,0x18,0x68,0x00,\r
+0x0a,0x00,0x47,0x10,0xff,0x00,0x65,0x30,0x04,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x62,0xac,0x00,0x00,0xc3,0xac,0x04,0x00,0x82,0x8c,0x08,0x00,0x84,0x24,\r
+0x00,0x00,0xc2,0xac,0xf2,0xff,0xa7,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,0x02,0x80,0x05,0x3c,0xb0,0x83,0x42,0x24,\r
+0x02,0x80,0x03,0x3c,0xa4,0x43,0xa2,0xac,0x00,0x80,0x02,0x3c,0x44,0x44,0x60,0xac,\r
+0xa4,0x43,0xa4,0x24,0x02,0x80,0x03,0x3c,0x8c,0x0a,0x42,0x24,0x48,0x44,0x60,0xa4,\r
+0x08,0x00,0x82,0xac,0x02,0x80,0x03,0x3c,0x00,0x80,0x02,0x3c,0x4a,0x44,0x60,0xa4,\r
+0x02,0x80,0x06,0x3c,0x24,0x10,0x42,0x24,0x00,0x80,0x03,0x3c,0x4c,0x44,0xc7,0x24,\r
+0x14,0x00,0x82,0xac,0x68,0x0c,0x63,0x24,0x02,0x80,0x02,0x3c,0x4c,0x44,0xc0,0xac,\r
+0x10,0x00,0x83,0xac,0x04,0x00,0xe0,0xac,0x02,0x80,0x03,0x3c,0x54,0x44,0x40,0xa0,\r
+0x02,0x80,0x02,0x3c,0x58,0x44,0x60,0xac,0x5c,0x44,0x40,0xac,0x01,0x80,0x02,0x3c,\r
+0x00,0x80,0x03,0x3c,0xd8,0x87,0x42,0x24,0x40,0x10,0x63,0x24,0x7c,0x00,0x82,0xac,\r
+0x1c,0x00,0x83,0xac,0x00,0x80,0x02,0x3c,0x00,0x80,0x03,0x3c,0xd8,0x13,0x42,0x24,\r
+0xd0,0x17,0x63,0x24,0x20,0x00,0x82,0xac,0x24,0x00,0x83,0xac,0x00,0x80,0x02,0x3c,\r
+0x00,0x80,0x03,0x3c,0xc4,0x1b,0x42,0x24,0xf8,0x29,0x63,0x24,0x28,0x00,0x82,0xac,\r
+0x2c,0x00,0x83,0xac,0x00,0x80,0x02,0x3c,0x00,0x80,0x03,0x3c,0x14,0x20,0x42,0x24,\r
+0x00,0x22,0x63,0x24,0x30,0x00,0x82,0xac,0x3c,0x00,0x83,0xac,0x00,0x80,0x02,0x3c,\r
+0x00,0x80,0x03,0x3c,0x68,0x04,0x42,0x24,0xb8,0x1f,0x63,0x24,0x50,0x00,0x82,0xac,\r
+0x08,0x00,0xe0,0x03,0x40,0x00,0x83,0xac,0x25,0xb0,0x02,0x3c,0x08,0x00,0x42,0x34,\r
+0x00,0x00,0x43,0x8c,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x02,0x80,0x0e,0x3c,\r
+0x02,0x80,0x08,0x3c,0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0xf8,0x03,0x4d,0x24,\r
+0x00,0x18,0x6c,0x24,0x01,0x00,0x07,0x24,0x00,0x00,0xcb,0x25,0xff,0xff,0x0a,0x24,\r
+0x00,0x04,0x09,0x25,0x80,0x1a,0x07,0x00,0x21,0x10,0x6b,0x00,0x00,0x00,0x42,0xac,\r
+0x90,0x00,0x4a,0xac,0x00,0x04,0x04,0x8d,0x01,0x00,0xe7,0x24,0x08,0x00,0x45,0x24,\r
+0x21,0x18,0x6d,0x00,0x06,0x00,0xe6,0x28,0x04,0x00,0x82,0xac,0x00,0x00,0x44,0xac,\r
+0x04,0x00,0x49,0xac,0x00,0x04,0x02,0xad,0x8c,0x00,0x40,0xac,0x6c,0x00,0xa3,0xac,\r
+0xf0,0xff,0xc0,0x14,0x68,0x00,0xac,0xac,0x08,0x00,0xe0,0x03,0x00,0x00,0xc9,0xad,\r
+0x06,0x00,0xa2,0x2c,0x13,0x00,0x40,0x10,0xff,0xff,0x07,0x24,0x02,0x80,0x02,0x3c,\r
+0x80,0x1a,0x05,0x00,0x00,0x00,0x42,0x24,0x0e,0x00,0xa0,0x10,0x21,0x30,0x62,0x00,\r
+0x90,0x00,0xc3,0x8c,0xff,0xff,0x02,0x24,0x0a,0x00,0x62,0x14,0x00,0x00,0x00,0x00,\r
+0x8c,0x00,0xc2,0x8c,0x00,0x00,0x00,0x00,0x06,0x00,0x40,0x14,0x00,0x00,0x00,0x00,\r
+0x01,0x00,0x02,0x24,0x88,0x00,0xc4,0xac,0x8c,0x00,0xc2,0xac,0x90,0x00,0xc5,0xac,\r
+0x21,0x38,0xa0,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0xe0,0x00,0x02,0x80,0x03,0x3c,\r
+0x25,0xb0,0x02,0x3c,0x18,0x03,0x42,0x34,0x94,0x84,0x63,0x24,0xe8,0xff,0xbd,0x27,\r
+0x00,0x00,0x43,0xac,0x10,0x00,0xbf,0xaf,0x95,0x42,0x00,0x0c,0x21,0x20,0x00,0x00,\r
+0x10,0x00,0xbf,0x8f,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x03,0x80,0x05,0x3c,0x00,0x80,0xa5,0x24,\r
+0x40,0x10,0x0c,0x3c,0xff,0xff,0xa5,0x30,0x02,0x80,0x04,0x3c,0x78,0x1b,0x84,0x24,\r
+0x25,0xc8,0xac,0x00,0x00,0x25,0x99,0xac,0x80,0x00,0x39,0x27,0xe0,0xff,0xbd,0x27,\r
+0x0c,0x25,0x99,0xac,0x80,0x00,0x39,0x27,0x1c,0x00,0xb7,0xaf,0x18,0x00,0xb6,0xaf,\r
+0x14,0x00,0xb5,0xaf,0x10,0x00,0xb4,0xaf,0x0c,0x00,0xb3,0xaf,0x08,0x00,0xb2,0xaf,\r
+0x04,0x00,0xb1,0xaf,0x00,0x00,0xb0,0xaf,0x18,0x25,0x99,0xac,0x80,0x00,0x39,0x27,\r
+0x24,0x25,0x99,0xac,0xe2,0x0a,0x86,0x90,0x80,0x00,0x39,0x27,0x30,0x25,0x99,0xac,\r
+0x80,0x00,0x39,0x27,0x3c,0x25,0x99,0xac,0x20,0xb0,0x02,0x3c,0x0c,0x25,0x87,0x8c,\r
+0x18,0x25,0x88,0x8c,0x24,0x25,0x89,0x8c,0x30,0x25,0x8a,0x8c,0x3c,0x25,0x8b,0x8c,\r
+0x00,0x01,0x42,0x34,0x00,0x32,0x06,0x00,0xff,0x1f,0x03,0x3c,0x80,0x00,0x39,0x27,\r
+0x21,0x30,0xc2,0x00,0xff,0xff,0x63,0x34,0x24,0x30,0xc3,0x00,0x48,0x25,0x99,0xac,\r
+0x20,0x10,0x03,0x3c,0x21,0x68,0x20,0x03,0x25,0x28,0xac,0x00,0x25,0xb0,0x0e,0x3c,\r
+0x80,0x00,0x39,0x27,0xfc,0x24,0x85,0xac,0x08,0x25,0x87,0xac,0x14,0x25,0x88,0xac,\r
+0x20,0x25,0x89,0xac,0x2c,0x25,0x8a,0xac,0xcc,0x24,0x86,0xac,0x38,0x25,0x8b,0xac,\r
+0xac,0x00,0xc2,0x35,0x94,0x24,0x83,0xac,0x90,0x24,0x83,0xac,0xa0,0x24,0x83,0xac,\r
+0x9c,0x24,0x83,0xac,0xac,0x24,0x83,0xac,0xa8,0x24,0x83,0xac,0x54,0x25,0x99,0xac,\r
+0xd0,0x24,0x86,0xac,0x44,0x25,0x8d,0xac,0xb8,0x24,0x83,0xac,0xb4,0x24,0x83,0xac,\r
+0xc4,0x24,0x83,0xac,0xc0,0x24,0x83,0xac,0xdc,0x24,0x83,0xac,0xd8,0x24,0x83,0xac,\r
+0x00,0x02,0x39,0x27,0x00,0x00,0x48,0x8c,0xe4,0x0a,0x87,0x94,0x6c,0x25,0x99,0xac,\r
+0xb0,0x00,0xc2,0x35,0x00,0x00,0x56,0x8c,0x21,0x10,0x06,0x3c,0x54,0x25,0x92,0x8c,\r
+0x23,0x10,0x0b,0x3c,0x22,0x10,0x0f,0x3c,0x02,0x80,0x14,0x3c,0x02,0x80,0x15,0x3c,\r
+0x02,0x80,0x17,0x3c,0x02,0x80,0x18,0x3c,0x00,0x80,0xc5,0x34,0x21,0x98,0x20,0x03,\r
+0x23,0x28,0xa7,0x00,0x00,0x02,0x39,0x27,0x24,0x10,0x07,0x3c,0x80,0x41,0x89,0x26,\r
+0x88,0x41,0xaa,0x26,0x90,0x41,0xec,0x26,0x98,0x41,0x0d,0x27,0x00,0x04,0x70,0x35,\r
+0x01,0x00,0x08,0x25,0x00,0x40,0xf1,0x35,0x00,0x01,0xce,0x35,0x01,0x00,0x02,0x24,\r
+0x50,0x25,0x92,0xac,0x59,0x25,0x82,0xa0,0x68,0x25,0x93,0xac,0xc4,0x25,0x90,0xac,\r
+0x88,0x25,0x88,0xac,0x94,0x25,0x85,0xac,0xb8,0x25,0x91,0xac,0xac,0x25,0x96,0xac,\r
+0x00,0x00,0xc7,0xad,0xa8,0x25,0x87,0xac,0xc8,0x25,0x83,0xac,0xe8,0x24,0x83,0xac,\r
+0xe4,0x24,0x83,0xac,0x72,0x25,0x80,0xa4,0x71,0x25,0x80,0xa0,0x70,0x25,0x80,0xa0,\r
+0xbc,0x25,0x8b,0xac,0xc0,0x25,0x8b,0xac,0x80,0x25,0x86,0xac,0x84,0x25,0x86,0xac,\r
+0x8c,0x25,0x86,0xac,0x90,0x25,0x86,0xac,0xb0,0x25,0x8f,0xac,0xb4,0x25,0x8f,0xac,\r
+0xa4,0x25,0x87,0xac,0xcc,0x25,0x83,0xac,0xd8,0x25,0x99,0xac,0xd4,0x25,0x99,0xac,\r
+0x04,0x00,0x4a,0xad,0x80,0x41,0x89,0xae,0x04,0x00,0x8c,0xad,0x88,0x41,0xaa,0xae,\r
+0x04,0x00,0xad,0xad,0x90,0x41,0xec,0xae,0x98,0x41,0x0d,0xaf,0x04,0x00,0x29,0xad,\r
+0x02,0x80,0x02,0x3c,0x00,0x18,0x43,0x24,0x21,0x20,0x20,0x01,0x03,0x00,0x06,0x24,\r
+0x21,0x10,0x80,0x00,0xff,0xff,0xc6,0x24,0x08,0x00,0x79,0xac,0x00,0x00,0x63,0xac,\r
+0x10,0x00,0x60,0xac,0x00,0x00,0x69,0xac,0x21,0x20,0x60,0x00,0x04,0x00,0x62,0xac,\r
+0x00,0x00,0x43,0xac,0x00,0x01,0x39,0x27,0xf5,0xff,0xc1,0x04,0x18,0x00,0x63,0x24,\r
+0x02,0x80,0x02,0x3c,0x88,0x41,0x48,0x24,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,\r
+0x04,0x00,0x07,0x8d,0x60,0x18,0x4b,0x24,0x04,0x00,0x24,0xad,0x00,0x18,0x6a,0x24,\r
+0x01,0x00,0x09,0x24,0x21,0x28,0x00,0x00,0x0f,0x00,0x06,0x24,0x21,0x20,0xab,0x00,\r
+0x21,0x10,0xaa,0x00,0xff,0xff,0xc6,0x24,0x68,0x00,0x59,0xac,0x70,0x00,0x49,0xac,\r
+0x18,0x00,0xa5,0x24,0x00,0x00,0x88,0xac,0x04,0x00,0x87,0xac,0x00,0x00,0xe4,0xac,\r
+0x00,0x01,0x39,0x27,0xf5,0xff,0xc1,0x04,0x21,0x38,0x80,0x00,0x02,0x80,0x02,0x3c,\r
+0x90,0x41,0x49,0x24,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0x04,0x00,0x25,0x8d,\r
+0xe0,0x19,0x4b,0x24,0x04,0x00,0x04,0xad,0x00,0x18,0x6a,0x24,0x02,0x00,0x07,0x24,\r
+0x21,0x20,0x00,0x00,0x0f,0x00,0x06,0x24,0x21,0x40,0x8b,0x00,0x21,0x10,0x8a,0x00,\r
+0xff,0xff,0xc6,0x24,0xe8,0x01,0x59,0xac,0xf0,0x01,0x47,0xac,0x18,0x00,0x84,0x24,\r
+0x00,0x00,0x09,0xad,0x04,0x00,0x05,0xad,0x00,0x00,0xa8,0xac,0x00,0x02,0x39,0x27,\r
+0xf5,0xff,0xc1,0x04,0x21,0x28,0x00,0x01,0x02,0x80,0x05,0x3c,0x98,0x41,0xa5,0x24,\r
+0x04,0x00,0xa6,0x8c,0x1c,0x00,0xb7,0x8f,0x18,0x00,0xb6,0x8f,0x14,0x00,0xb5,0x8f,\r
+0x10,0x00,0xb4,0x8f,0x0c,0x00,0xb3,0x8f,0x08,0x00,0xb2,0x8f,0x04,0x00,0xb1,0x8f,\r
+0x00,0x00,0xb0,0x8f,0x02,0x80,0x07,0x3c,0x02,0x80,0x03,0x3c,0x60,0x1b,0xe4,0x24,\r
+0x00,0x18,0x63,0x24,0x03,0x00,0x02,0x24,0x20,0x00,0xbd,0x27,0x68,0x03,0x79,0xac,\r
+0x04,0x00,0x28,0xad,0x04,0x00,0xa4,0xac,0x70,0x03,0x62,0xac,0x60,0x1b,0xe5,0xac,\r
+0x04,0x00,0x86,0xac,0x08,0x00,0xe0,0x03,0x00,0x00,0xc4,0xac,0xc8,0xff,0xbd,0x27,\r
+0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,\r
+0xfc,0xad,0x73,0x24,0x70,0xae,0x52,0x24,0x02,0x80,0x03,0x3c,0xff,0xff,0x02,0x3c,\r
+0x2c,0x00,0xb5,0xaf,0x28,0x00,0xb4,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,\r
+0x30,0x00,0xbf,0xaf,0xff,0x1f,0x54,0x34,0x78,0x1b,0x70,0x24,0x21,0x88,0x00,0x00,\r
+0x02,0x80,0x15,0x3c,0x19,0x50,0x00,0x0c,0x21,0x20,0x20,0x02,0x90,0x11,0x05,0x8e,\r
+0x6c,0x00,0x66,0x8e,0x6c,0x00,0x43,0x8e,0xdc,0xad,0xa2,0x26,0x1b,0x00,0x44,0x90,\r
+0x21,0x18,0x66,0x00,0x24,0x28,0xb4,0x00,0x00,0x21,0x04,0x00,0x42,0x18,0x03,0x00,\r
+0x00,0x20,0xa5,0x34,0x5c,0x11,0x03,0xae,0x80,0x11,0x04,0xae,0x90,0x11,0x05,0xae,\r
+0x84,0x11,0x04,0xae,0x21,0x30,0x00,0x00,0x21,0x10,0x06,0x02,0x01,0x00,0xc6,0x24,\r
+0x1d,0x00,0xc3,0x28,0xb1,0x11,0x40,0xa0,0x94,0x11,0x40,0xa0,0xfa,0xff,0x60,0x14,\r
+0xce,0x11,0x40,0xa0,0x01,0x00,0x31,0x26,0x20,0x00,0x22,0x2a,0xec,0x11,0x00,0xae,\r
+0xe4,0xff,0x40,0x14,0x94,0x00,0x10,0x26,0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,\r
+0x78,0x1b,0x4b,0x24,0x02,0x80,0x02,0x3c,0x70,0xae,0x6f,0x24,0xfc,0xad,0x4d,0x24,\r
+0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0xdc,0xad,0x6e,0x24,0xbc,0xad,0x4c,0x24,\r
+0x21,0x88,0x00,0x00,0x80,0x18,0x11,0x00,0x21,0x20,0x6d,0x00,0x21,0x10,0x6f,0x00,\r
+0x21,0x28,0x2e,0x02,0x21,0x30,0x2c,0x02,0x00,0x00,0x88,0x8c,0x00,0x00,0xa9,0x90,\r
+0x00,0x00,0xc7,0x90,0x00,0x00,0x4a,0x8c,0x21,0x10,0x2b,0x02,0x01,0x00,0x31,0x26,\r
+0x21,0x18,0x6b,0x00,0x1d,0x00,0x24,0x2a,0xf8,0x04,0x68,0xac,0xce,0x04,0x47,0xa0,\r
+0x6c,0x05,0x6a,0xac,0xef,0xff,0x80,0x14,0x94,0x04,0x49,0xa0,0x02,0x80,0x02,0x3c,\r
+0x78,0x1b,0x4a,0x24,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0x98,0xac,0x6b,0x24,\r
+0x38,0xab,0x4c,0x24,0x21,0x88,0x00,0x00,0x21,0x48,0x00,0x00,0x21,0x30,0x00,0x00,\r
+0x21,0x40,0x2a,0x01,0x21,0x38,0x2b,0x01,0x21,0x10,0xe6,0x00,0x91,0x00,0x44,0x90,\r
+0x00,0x00,0x45,0x90,0x21,0x18,0x06,0x01,0x01,0x00,0xc6,0x24,0x05,0x00,0xc2,0x28,\r
+0xc9,0x03,0x64,0xa0,0xf8,0xff,0x40,0x14,0x38,0x03,0x65,0xa0,0x21,0x10,0x2c,0x02,\r
+0x1d,0x00,0x44,0x90,0x00,0x00,0x45,0x90,0x21,0x18,0x2a,0x02,0x01,0x00,0x31,0x26,\r
+0x1d,0x00,0x22,0x2a,0x77,0x04,0x64,0xa0,0x5a,0x04,0x65,0xa0,0xeb,0xff,0x40,0x14,\r
+0x05,0x00,0x29,0x25,0x30,0x00,0xbf,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,\r
+0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27,0x29,0xb0,0x02,0x3c,0xf8,0xff,0xbd,0x27,\r
+0x00,0x00,0x40,0xac,0x08,0x00,0x44,0x34,0x0c,0x00,0x45,0x34,0x10,0x00,0x46,0x34,\r
+0x04,0x00,0x43,0x34,0x14,0x00,0x47,0x34,0x18,0x00,0x48,0x34,0x1c,0x00,0x49,0x34,\r
+0x20,0x00,0x4a,0x34,0x24,0x00,0x4b,0x34,0x28,0x00,0x4c,0x34,0x2c,0x00,0x4d,0x34,\r
+0x30,0x00,0x4e,0x34,0x34,0x00,0x4f,0x34,0x04,0x00,0xb1,0xaf,0x00,0x00,0xb0,0xaf,\r
+0x3c,0x00,0x51,0x34,0x38,0x00,0x50,0x34,0x02,0x80,0x02,0x3c,0x00,0x00,0x60,0xac,\r
+0x00,0x00,0x80,0xac,0x00,0x00,0xa0,0xac,0x21,0x20,0x00,0x00,0x00,0x00,0xc0,0xac,\r
+0xff,0xff,0x05,0x24,0x00,0x00,0xe0,0xac,0x78,0x1b,0x46,0x24,0x00,0x00,0x00,0xad,\r
+0x00,0x00,0x20,0xad,0x00,0x00,0x40,0xad,0x00,0x00,0x60,0xad,0x00,0x00,0x80,0xad,\r
+0x00,0x00,0xa0,0xad,0x00,0x00,0xc0,0xad,0x00,0x00,0xe0,0xad,0x00,0x00,0x00,0xae,\r
+0x00,0x00,0x20,0xae,0x21,0x18,0x86,0x00,0x01,0x00,0x84,0x24,0x08,0x00,0x82,0x28,\r
+0xfc,0xff,0x40,0x14,0xf0,0x04,0x65,0xa0,0x02,0x80,0x02,0x3c,0x78,0x1b,0x43,0x24,\r
+0x1f,0x00,0x04,0x24,0x90,0x11,0x62,0x8c,0xff,0xff,0x84,0x24,0xf0,0x00,0x42,0x34,\r
+0x90,0x11,0x62,0xac,0xfb,0xff,0x81,0x04,0x94,0x00,0x63,0x24,0x04,0x00,0xb1,0x8f,\r
+0x00,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x08,0x00,0xbd,0x27,0x48,0xfd,0xbd,0x27,\r
+0xb4,0x02,0xb3,0xaf,0x02,0x80,0x02,0x3c,0x02,0x80,0x13,0x3c,0x30,0xb0,0x46,0x24,\r
+0x78,0x1b,0x63,0x26,0xb0,0x02,0xb2,0xaf,0xac,0x02,0xb1,0xaf,0xa8,0x02,0xb0,0xaf,\r
+0x03,0x00,0x60,0xa0,0x21,0x38,0xa0,0x03,0x90,0x00,0xc8,0x24,0x00,0x00,0xc2,0x8c,\r
+0x04,0x00,0xc3,0x8c,0x08,0x00,0xc4,0x8c,0x0c,0x00,0xc5,0x8c,0x10,0x00,0xc6,0x24,\r
+0x00,0x00,0xe2,0xac,0x04,0x00,0xe3,0xac,0x08,0x00,0xe4,0xac,0x0c,0x00,0xe5,0xac,\r
+0xf6,0xff,0xc8,0x14,0x10,0x00,0xe7,0x24,0x00,0x00,0xc3,0x8c,0x02,0x80,0x02,0x3c,\r
+0xc4,0xb0,0x58,0x24,0x00,0x00,0xe3,0xac,0x98,0x00,0xb9,0x27,0x00,0x01,0x12,0x27,\r
+0x01,0x00,0x02,0x93,0x05,0x00,0x03,0x93,0x09,0x00,0x04,0x93,0x0d,0x00,0x05,0x93,\r
+0x00,0x00,0x11,0x93,0x02,0x00,0x0d,0x93,0x04,0x00,0x10,0x93,0x06,0x00,0x0c,0x93,\r
+0x08,0x00,0x0f,0x93,0x0a,0x00,0x07,0x93,0x0c,0x00,0x0e,0x93,0x0e,0x00,0x06,0x93,\r
+0x03,0x00,0x08,0x93,0x07,0x00,0x09,0x93,0x0b,0x00,0x0a,0x93,0x0f,0x00,0x0b,0x93,\r
+0x00,0x12,0x02,0x00,0x00,0x1a,0x03,0x00,0x00,0x22,0x04,0x00,0x00,0x2a,0x05,0x00,\r
+0x25,0x10,0x51,0x00,0x25,0x18,0x70,0x00,0x25,0x20,0x8f,0x00,0x25,0x28,0xae,0x00,\r
+0x00,0x6c,0x0d,0x00,0x00,0x64,0x0c,0x00,0x00,0x3c,0x07,0x00,0x00,0x34,0x06,0x00,\r
+0x25,0x68,0xa2,0x01,0x25,0x60,0x83,0x01,0x25,0x38,0xe4,0x00,0x25,0x30,0xc5,0x00,\r
+0x00,0x46,0x08,0x00,0x00,0x4e,0x09,0x00,0x00,0x56,0x0a,0x00,0x00,0x5e,0x0b,0x00,\r
+0x25,0x40,0x0d,0x01,0x25,0x48,0x2c,0x01,0x25,0x50,0x47,0x01,0x25,0x58,0x66,0x01,\r
+0x10,0x00,0x18,0x27,0x00,0x00,0x28,0xaf,0x04,0x00,0x29,0xaf,0x08,0x00,0x2a,0xaf,\r
+0x0c,0x00,0x2b,0xaf,0xd2,0xff,0x12,0x17,0x10,0x00,0x39,0x27,0x01,0x00,0x02,0x93,\r
+0x05,0x00,0x03,0x93,0x00,0x00,0x09,0x93,0x02,0x00,0x04,0x93,0x04,0x00,0x08,0x93,\r
+0x06,0x00,0x05,0x93,0x07,0x00,0x06,0x93,0x03,0x00,0x07,0x93,0x00,0x12,0x02,0x00,\r
+0x00,0x1a,0x03,0x00,0x25,0x10,0x49,0x00,0x25,0x18,0x68,0x00,0x00,0x24,0x04,0x00,\r
+0x00,0x2c,0x05,0x00,0x25,0x20,0x82,0x00,0x25,0x28,0xa3,0x00,0x00,0x3e,0x07,0x00,\r
+0x00,0x36,0x06,0x00,0x02,0x80,0x02,0x3c,0x25,0x38,0xe4,0x00,0x25,0x30,0xc5,0x00,\r
+0xcc,0xb1,0x58,0x24,0x04,0x00,0x26,0xaf,0x00,0x00,0x27,0xaf,0x00,0x01,0x12,0x27,\r
+0xa0,0x01,0xb9,0x27,0x01,0x00,0x02,0x93,0x05,0x00,0x03,0x93,0x09,0x00,0x04,0x93,\r
+0x0d,0x00,0x05,0x93,0x00,0x00,0x11,0x93,0x02,0x00,0x0d,0x93,0x04,0x00,0x10,0x93,\r
+0x06,0x00,0x0c,0x93,0x08,0x00,0x0f,0x93,0x0a,0x00,0x07,0x93,0x0c,0x00,0x0e,0x93,\r
+0x0e,0x00,0x06,0x93,0x03,0x00,0x08,0x93,0x07,0x00,0x09,0x93,0x0b,0x00,0x0a,0x93,\r
+0x0f,0x00,0x0b,0x93,0x00,0x12,0x02,0x00,0x00,0x1a,0x03,0x00,0x00,0x22,0x04,0x00,\r
+0x00,0x2a,0x05,0x00,0x25,0x10,0x51,0x00,0x25,0x18,0x70,0x00,0x25,0x20,0x8f,0x00,\r
+0x25,0x28,0xae,0x00,0x00,0x6c,0x0d,0x00,0x00,0x64,0x0c,0x00,0x00,0x3c,0x07,0x00,\r
+0x00,0x34,0x06,0x00,0x25,0x68,0xa2,0x01,0x25,0x60,0x83,0x01,0x25,0x38,0xe4,0x00,\r
+0x25,0x30,0xc5,0x00,0x00,0x46,0x08,0x00,0x00,0x4e,0x09,0x00,0x00,0x56,0x0a,0x00,\r
+0x00,0x5e,0x0b,0x00,0x25,0x40,0x0d,0x01,0x25,0x48,0x2c,0x01,0x25,0x50,0x47,0x01,\r
+0x25,0x58,0x66,0x01,0x10,0x00,0x18,0x27,0x00,0x00,0x28,0xaf,0x04,0x00,0x29,0xaf,\r
+0x08,0x00,0x2a,0xaf,0x0c,0x00,0x2b,0xaf,0xd2,0xff,0x12,0x17,0x10,0x00,0x39,0x27,\r
+0x01,0x00,0x02,0x93,0x05,0x00,0x03,0x93,0x00,0x00,0x09,0x93,0x02,0x00,0x04,0x93,\r
+0x04,0x00,0x08,0x93,0x06,0x00,0x05,0x93,0x07,0x00,0x06,0x93,0x03,0x00,0x07,0x93,\r
+0x00,0x12,0x02,0x00,0x00,0x1a,0x03,0x00,0x25,0x10,0x49,0x00,0x25,0x18,0x68,0x00,\r
+0x00,0x24,0x04,0x00,0x00,0x2c,0x05,0x00,0x25,0x20,0x82,0x00,0x25,0x28,0xa3,0x00,\r
+0x00,0x3e,0x07,0x00,0x00,0x36,0x06,0x00,0x25,0x30,0xc5,0x00,0x25,0x38,0xe4,0x00,\r
+0x02,0x80,0x02,0x3c,0x04,0x00,0x26,0xaf,0x00,0x00,0x27,0xaf,0x78,0x1b,0x46,0x24,\r
+0x21,0x50,0x00,0x00,0x80,0x20,0x0a,0x00,0x21,0x10,0x9d,0x00,0x00,0x00,0x45,0x8c,\r
+0x01,0x00,0x43,0x25,0xff,0x00,0x6a,0x30,0x21,0x20,0x86,0x00,0x25,0x00,0x42,0x2d,\r
+0xf8,0xff,0x40,0x14,0x18,0x00,0x85,0xac,0x02,0x80,0x02,0x3c,0x78,0x1b,0x4b,0x24,\r
+0x21,0x50,0x00,0x00,0xc0,0x10,0x0a,0x00,0x21,0x48,0x5d,0x00,0x21,0x38,0x00,0x00,\r
+0x21,0x40,0x4b,0x00,0x21,0x10,0x27,0x01,0xa0,0x01,0x46,0x90,0x98,0x00,0x45,0x90,\r
+0x01,0x00,0xe4,0x24,0x21,0x18,0x07,0x01,0xff,0x00,0x87,0x30,0x08,0x00,0xe2,0x2c,\r
+0xb4,0x01,0x66,0xa0,0xf7,0xff,0x40,0x14,0xac,0x00,0x65,0xa0,0x01,0x00,0x42,0x25,\r
+0xff,0x00,0x4a,0x30,0x21,0x00,0x43,0x2d,0xef,0xff,0x60,0x14,0xc0,0x10,0x0a,0x00,\r
+0x25,0xb0,0x02,0x3c,0x0a,0x00,0x42,0x34,0x00,0x00,0x43,0x90,0x00,0x00,0x00,0x00,\r
+0x20,0x00,0x63,0x30,0x4f,0x00,0x60,0x10,0x78,0x1b,0x64,0x26,0x33,0x00,0x02,0x24,\r
+0xc1,0x02,0x62,0xa1,0x1c,0x00,0x03,0x24,0x0f,0x00,0x02,0x24,0xbc,0x02,0x63,0xa1,\r
+0xbd,0x02,0x62,0xa1,0x78,0x1b,0x65,0x26,0x08,0x00,0xa4,0x8c,0xff,0x7f,0x09,0x3c,\r
+0xff,0xff,0x29,0x35,0xc0,0xff,0x02,0x24,0x24,0x20,0x89,0x00,0x24,0x20,0x82,0x00,\r
+0x0c,0x00,0x84,0x34,0xff,0xc0,0x02,0x24,0xc8,0x02,0xa0,0xa0,0x24,0x20,0x82,0x00,\r
+0xc0,0xff,0x02,0x3c,0xc8,0x02,0xa6,0x8c,0xff,0xff,0x42,0x34,0x00,0x18,0x84,0x34,\r
+0x24,0x20,0x82,0x00,0xff,0x0f,0x02,0x3c,0xff,0xff,0x42,0x34,0xbf,0xff,0x03,0x3c,\r
+0x24,0x30,0xc2,0x00,0xff,0xff,0x63,0x34,0x7f,0xff,0x02,0x3c,0x24,0x20,0x83,0x00,\r
+0xff,0xff,0x42,0x34,0x24,0x20,0x82,0x00,0x7f,0xff,0x03,0x24,0x40,0x40,0x84,0x34,\r
+0xff,0xff,0x02,0x3c,0x24,0x20,0x83,0x00,0xff,0x7f,0x42,0x34,0xc8,0x02,0xa6,0xac,\r
+0x24,0x20,0x82,0x00,0xc9,0x02,0xa0,0xa0,0x0c,0x00,0xa6,0x8c,0xff,0x9f,0x02,0x3c,\r
+0xc8,0x02,0xa7,0x8c,0xff,0xff,0x42,0x34,0xff,0xbf,0x03,0x3c,0x10,0x00,0xa8,0x8c,\r
+0xff,0xff,0x63,0x34,0x24,0x20,0x82,0x00,0xff,0xf0,0x02,0x3c,0x24,0x30,0xc3,0x00,\r
+0xff,0xff,0x42,0x34,0xff,0x3f,0x03,0x3c,0xff,0xff,0x63,0x34,0x24,0x38,0xe2,0x00,\r
+0xb4,0x02,0xb3,0x8f,0x1f,0x00,0x02,0x24,0xb0,0x02,0xb2,0x8f,0xac,0x02,0xb1,0x8f,\r
+0xa8,0x02,0xb0,0x8f,0x24,0x40,0x03,0x01,0xbe,0x02,0xa2,0xa0,0x01,0x00,0x03,0x24,\r
+0xff,0xff,0x02,0x24,0x24,0x30,0xc9,0x00,0xc0,0x02,0xa3,0xa0,0xc2,0x02,0xa2,0xa0,\r
+0xff,0x00,0x03,0x24,0x12,0x00,0x02,0x24,0xb8,0x02,0xbd,0x27,0xc8,0x02,0xa7,0xac,\r
+0x08,0x00,0xa4,0xac,0x10,0x00,0xa8,0xac,0x0c,0x00,0xa6,0xac,0xc4,0x02,0xa3,0xa4,\r
+0xc7,0x02,0xa2,0xa0,0xca,0x02,0xa0,0xa0,0xbf,0x02,0xa0,0xa0,0x08,0x00,0xe0,0x03,\r
+0xc6,0x02,0xa0,0xa0,0x33,0x00,0x02,0x24,0xc1,0x02,0x82,0xa0,0x0d,0x00,0x03,0x24,\r
+0x03,0x00,0x02,0x24,0xbc,0x02,0x83,0xa0,0x97,0x63,0x00,0x08,0xbd,0x02,0x82,0xa0,\r
+0x02,0x80,0x19,0x3c,0x78,0x1b,0x22,0x27,0xe0,0xff,0xbd,0x27,0xff,0xff,0x03,0x34,\r
+0x18,0x00,0xbf,0xaf,0x21,0xc0,0x40,0x00,0xf4,0x23,0x43,0xac,0xea,0x02,0x40,0xa0,\r
+0x1f,0x00,0x0f,0x24,0xff,0xff,0xef,0x25,0x80,0x11,0x43,0xac,0x84,0x11,0x43,0xac,\r
+0xfc,0xff,0xe1,0x05,0x94,0x00,0x42,0x24,0x78,0x1b,0x24,0x8f,0xd8,0x02,0x05,0x8f,\r
+0xf0,0xff,0x02,0x3c,0xe8,0x02,0x07,0x8f,0xfd,0xff,0x03,0x24,0xff,0xff,0x42,0x34,\r
+0x24,0x20,0x83,0x00,0x24,0x28,0xa2,0x00,0x20,0x00,0x0f,0x24,0xff,0xff,0x0e,0x24,\r
+0xff,0xef,0x02,0x3c,0x78,0x1b,0x24,0xaf,0xff,0xff,0x42,0x34,0xd8,0x02,0x05,0xaf,\r
+0x02,0x00,0x0e,0xa3,0xdb,0x02,0x0f,0xa3,0xd8,0x02,0x00,0xa3,0xff,0xbf,0x03,0x3c,\r
+0x78,0x1b,0x28,0x8f,0xd8,0x02,0x09,0x8f,0x24,0x38,0xe2,0x00,0xff,0xff,0x63,0x34,\r
+0x24,0x38,0xe3,0x00,0xff,0x7f,0x02,0x3c,0x0f,0xff,0x03,0x3c,0xfe,0xff,0x04,0x24,\r
+0xff,0xff,0x42,0x34,0xff,0xff,0x63,0x34,0x24,0x40,0x04,0x01,0x24,0x38,0xe2,0x00,\r
+0x24,0x48,0x23,0x01,0xff,0xdf,0x02,0x3c,0xcf,0xff,0x03,0x24,0x24,0x40,0x03,0x01,\r
+0xff,0xff,0x42,0x34,0x10,0x00,0x03,0x3c,0x24,0x38,0xe2,0x00,0x25,0x48,0x23,0x01,\r
+0x0a,0x00,0x02,0x24,0x00,0x02,0x03,0x24,0x78,0x1b,0x28,0xaf,0x02,0x80,0x0a,0x3c,\r
+0xd6,0x02,0x02,0xa3,0xd0,0x02,0x03,0xa7,0x00,0x01,0x02,0x24,0x49,0x00,0x03,0x24,\r
+0xe8,0x02,0x07,0xaf,0xd8,0x02,0x09,0xaf,0xac,0xb5,0x4a,0x25,0x3e,0x00,0x0c,0x24,\r
+0x1c,0x00,0x0d,0x24,0x01,0x00,0x0b,0x24,0x11,0x00,0xa3,0xa3,0xce,0x02,0x02,0xa7,\r
+0xd0,0x07,0x03,0x24,0x44,0x00,0x02,0x24,0x00,0x80,0x06,0x3c,0x10,0x00,0xa2,0xa3,\r
+0x10,0x00,0xa5,0x27,0x47,0x00,0x02,0x24,0x21,0x20,0x40,0x01,0xc8,0x66,0xc6,0x24,\r
+0xd4,0x02,0x0c,0xa3,0xd5,0x02,0x0d,0xa3,0xcc,0x02,0x0f,0xa7,0x01,0x00,0x0b,0xa3,\r
+0x0c,0x00,0x43,0xad,0x14,0x00,0x4b,0xa1,0x06,0x00,0x0e,0xa7,0xd2,0x02,0x0c,0xa3,\r
+0xd3,0x02,0x0d,0xa3,0x12,0x00,0xa2,0xa3,0xa8,0x14,0x00,0x0c,0x13,0x00,0xa0,0xa3,\r
+0x18,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,\r
+0xe0,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c,0x50,0x00,0x03,0x24,0x10,0x00,0xa3,0xa3,\r
+0x52,0x28,0x40,0xa0,0x41,0x00,0x03,0x24,0x52,0x00,0x02,0x24,0x02,0x80,0x07,0x3c,\r
+0x54,0xb6,0xe7,0x24,0x11,0x00,0xa2,0xa3,0x12,0x00,0xa3,0xa3,0xd0,0x07,0x02,0x24,\r
+0x01,0x00,0x03,0x24,0x01,0x80,0x06,0x3c,0x10,0x00,0xa5,0x27,0x21,0x20,0xe0,0x00,\r
+0xe4,0x69,0xc6,0x24,0x0c,0x00,0xe2,0xac,0x14,0x00,0xe3,0xa0,0x18,0x00,0xbf,0xaf,\r
+0xa8,0x14,0x00,0x0c,0x13,0x00,0xa0,0xa3,0x18,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x02,0x80,0x09,0x3c,0x78,0x1b,0x23,0x8d,\r
+0xff,0xff,0x02,0x24,0xff,0x00,0x4b,0x30,0xf3,0xff,0x02,0x24,0x24,0x18,0x62,0x00,\r
+0x3f,0xff,0x02,0x24,0x24,0x18,0x62,0x00,0xd8,0xff,0xbd,0x27,0x78,0x1b,0x23,0xad,\r
+0x47,0x00,0x02,0x24,0x3b,0x00,0x03,0x24,0x02,0x80,0x08,0x3c,0x70,0xb6,0x08,0x25,\r
+0x18,0x00,0xb0,0xaf,0x10,0x00,0xa2,0xa3,0x78,0x1b,0x30,0x25,0x11,0x00,0xa3,0xa3,\r
+0xd0,0x07,0x02,0x24,0x01,0x00,0x03,0x24,0x01,0x00,0x07,0x3c,0x00,0x80,0x06,0x3c,\r
+0x08,0x03,0x0b,0xae,0x1c,0x00,0xb1,0xaf,0x56,0x30,0xea,0x34,0x43,0x00,0x11,0x24,\r
+0xf4,0x98,0xe7,0x34,0x10,0x00,0xa5,0x27,0x0c,0x00,0x02,0xad,0x14,0x00,0x03,0xa1,\r
+0x21,0x20,0x00,0x01,0xd8,0x73,0xc6,0x24,0x20,0x00,0xbf,0xaf,0x12,0x00,0xb1,0xa3,\r
+0x10,0x03,0x07,0xae,0x14,0x03,0x0a,0xae,0x13,0x00,0xa0,0xa3,0x0c,0x03,0x00,0xae,\r
+0x18,0x03,0x00,0xae,0xa8,0x14,0x00,0x0c,0x1c,0x03,0x00,0xae,0x1e,0x00,0x02,0x24,\r
+0x25,0x03,0x02,0xa2,0x4a,0x00,0x03,0x24,0x45,0x00,0x02,0x24,0x20,0x03,0x03,0xa2,\r
+0x21,0x03,0x02,0xa2,0x23,0x00,0x03,0x24,0x3e,0x00,0x02,0x24,0x22,0x03,0x11,0xa2,\r
+0x23,0x03,0x02,0xa2,0x24,0x03,0x03,0xa2,0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb1,0x8f,\r
+0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,\r
+0x3b,0x00,0x02,0x24,0x43,0x00,0x03,0x24,0x10,0x00,0xa2,0xa3,0x11,0x00,0xa3,0xa3,\r
+0x36,0x00,0x02,0x24,0x02,0x80,0x03,0x3c,0x02,0x80,0x07,0x3c,0x8c,0xb6,0xe7,0x24,\r
+0x12,0x00,0xa2,0xa3,0x4f,0x1e,0x60,0xa0,0xd0,0x07,0x02,0x24,0x01,0x00,0x03,0x24,\r
+0x00,0x80,0x06,0x3c,0x10,0x00,0xa5,0x27,0x21,0x20,0xe0,0x00,0x04,0x78,0xc6,0x24,\r
+0x0c,0x00,0xe2,0xac,0x14,0x00,0xe3,0xa0,0x18,0x00,0xbf,0xaf,0xa8,0x14,0x00,0x0c,\r
+0x13,0x00,0xa0,0xa3,0x18,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x20,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c,0x52,0x00,0x03,0x24,\r
+0x10,0x00,0xa3,0xa3,0xc8,0x3f,0x40,0xa4,0x54,0x00,0x03,0x24,0x53,0x00,0x02,0x24,\r
+0x02,0x80,0x07,0x3c,0xc4,0xb6,0xe7,0x24,0x11,0x00,0xa2,0xa3,0x12,0x00,0xa3,0xa3,\r
+0xf4,0x01,0x02,0x24,0x01,0x00,0x03,0x24,0x01,0x80,0x06,0x3c,0x10,0x00,0xa5,0x27,\r
+0x21,0x20,0xe0,0x00,0x28,0x6b,0xc6,0x24,0x0c,0x00,0xe2,0xac,0x14,0x00,0xe3,0xa0,\r
+0x18,0x00,0xbf,0xaf,0xa8,0x14,0x00,0x0c,0x13,0x00,0xa0,0xa3,0x18,0x00,0xbf,0x8f,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x02,0x80,0x04,0x3c,\r
+0xd8,0xff,0xbd,0x27,0x80,0x3f,0x84,0x24,0x21,0x28,0x00,0x00,0x20,0x00,0xbf,0xaf,\r
+0x3e,0x46,0x00,0x0c,0x0a,0x00,0x06,0x24,0x02,0x80,0x07,0x3c,0x78,0x1b,0xe7,0x24,\r
+0x04,0x24,0xe3,0x8c,0xfd,0xff,0x02,0x24,0x02,0x80,0x08,0x3c,0x24,0x18,0x62,0x00,\r
+0xfe,0xff,0x02,0x24,0x24,0x18,0x62,0x00,0x05,0x00,0x02,0x24,0x04,0x24,0xe3,0xac,\r
+0x08,0x24,0xe2,0xa0,0x28,0x00,0x03,0x24,0x46,0x00,0x02,0x24,0x10,0x00,0xa2,0xa3,\r
+0x09,0x24,0xe3,0xa0,0x4b,0x00,0x02,0x24,0x42,0x00,0x03,0x24,0xe0,0xb6,0x08,0x25,\r
+0x11,0x00,0xa3,0xa3,0x12,0x00,0xa2,0xa3,0xd0,0x07,0x03,0x24,0x01,0x00,0x02,0x24,\r
+0x01,0x80,0x06,0x3c,0x10,0x00,0xa5,0x27,0x21,0x20,0x00,0x01,0xf0,0x6b,0xc6,0x24,\r
+0x06,0x24,0xe0,0xa4,0x0c,0x00,0x03,0xad,0x14,0x00,0x02,0xa1,0xa8,0x14,0x00,0x0c,\r
+0x13,0x00,0xa0,0xa3,0x20,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x28,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x02,0x80,0x03,0x3c,0x1c,0x00,0xbf,0xaf,\r
+0x18,0x00,0xb0,0xaf,0x44,0xaf,0x62,0x24,0x02,0x00,0x48,0x90,0x44,0xaf,0x67,0x94,\r
+0x02,0x80,0x02,0x3c,0x60,0x44,0x42,0x24,0x02,0x00,0x10,0x24,0x01,0x80,0x06,0x3c,\r
+0x21,0x20,0x40,0x00,0x10,0x00,0xa5,0x27,0x14,0x00,0x50,0xa0,0x34,0x83,0xc6,0x24,\r
+0x10,0x00,0xa7,0xa7,0x12,0x00,0xa8,0xa3,0xa8,0x14,0x00,0x0c,0x13,0x00,0xa0,0xa3,\r
+0x02,0x80,0x02,0x3c,0x7c,0x44,0x42,0x24,0x01,0x80,0x06,0x3c,0x21,0x20,0x40,0x00,\r
+0x10,0x00,0xa5,0x27,0x14,0x00,0x50,0xa0,0xa8,0x14,0x00,0x0c,0x68,0x82,0xc6,0x24,\r
+0x02,0x80,0x02,0x3c,0x98,0x44,0x40,0xa0,0x0c,0x00,0x04,0x24,0x02,0x80,0x03,0x3c,\r
+0x02,0x80,0x02,0x3c,0x99,0x44,0x64,0xa0,0x9a,0x44,0x44,0xa0,0x02,0x80,0x03,0x3c,\r
+0x02,0x80,0x02,0x3c,0xb1,0x44,0x60,0xa0,0x01,0x00,0x06,0x24,0xb7,0x44,0x40,0xa0,\r
+0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0xb8,0x44,0x60,0xa0,0x9c,0x44,0x46,0xa0,\r
+0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0xb9,0x44,0x60,0xa0,0x08,0x00,0x04,0x24,\r
+0x9b,0x44,0x46,0xa0,0x02,0x80,0x02,0x3c,0x9d,0x44,0x44,0xa0,0x01,0x00,0x05,0x24,\r
+0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0x9e,0x44,0x60,0xa0,0x64,0x00,0x04,0x24,\r
+0xa8,0x44,0x45,0xa4,0x02,0x80,0x03,0x3c,0x01,0x00,0x02,0x3c,0xa0,0x44,0x64,0xa4,\r
+0x00,0x90,0x42,0x34,0x02,0x80,0x03,0x3c,0xa4,0x44,0x62,0xac,0x02,0x80,0x04,0x3c,\r
+0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0xac,0x44,0x80,0xac,0x1c,0x00,0xbf,0x8f,\r
+0xb0,0x44,0x40,0xa0,0x18,0x00,0xb0,0x8f,0xb2,0x44,0x60,0xa0,0x02,0x80,0x02,0x3c,\r
+0x02,0x80,0x03,0x3c,0xba,0x44,0x40,0xa0,0xb3,0x44,0x60,0xa0,0x02,0x80,0x02,0x3c,\r
+0x02,0x80,0x03,0x3c,0xb4,0x44,0x45,0xa0,0x20,0x00,0xbd,0x27,0xb5,0x44,0x65,0xa0,\r
+0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0xb6,0x44,0x40,0xa0,0xbc,0x44,0x60,0xac,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x78,0x0c,0x00,0x00,0x01,0x00,0x00,0x5e,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x01,0x5e,0x78,0x0c,0x00,0x00,0x01,0x00,0x02,0x5e,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x03,0x5e,0x78,0x0c,0x00,0x00,0x01,0x00,0x04,0x5d,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x05,0x5b,0x78,0x0c,0x00,0x00,0x01,0x00,0x06,0x59,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x07,0x57,0x78,0x0c,0x00,0x00,0x01,0x00,0x08,0x55,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x09,0x53,0x78,0x0c,0x00,0x00,0x01,0x00,0x0a,0x51,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x0b,0x4f,0x78,0x0c,0x00,0x00,0x01,0x00,0x0c,0x4d,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x0d,0x4b,0x78,0x0c,0x00,0x00,0x01,0x00,0x0e,0x49,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x0f,0x47,0x78,0x0c,0x00,0x00,0x01,0x00,0x10,0x45,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x11,0x43,0x78,0x0c,0x00,0x00,0x01,0x00,0x12,0x41,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x13,0x3f,0x78,0x0c,0x00,0x00,0x01,0x00,0x14,0x3d,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x15,0x3b,0x78,0x0c,0x00,0x00,0x01,0x00,0x16,0x39,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x17,0x37,0x78,0x0c,0x00,0x00,0x01,0x00,0x18,0x35,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x19,0x33,0x78,0x0c,0x00,0x00,0x01,0x00,0x1a,0x31,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x1b,0x2f,0x78,0x0c,0x00,0x00,0x01,0x00,0x1c,0x2d,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x1d,0x2b,0x78,0x0c,0x00,0x00,0x01,0x00,0x1e,0x29,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x1f,0x27,0x78,0x0c,0x00,0x00,0x01,0x00,0x20,0x25,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x21,0x23,0x78,0x0c,0x00,0x00,0x01,0x00,0x22,0x21,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x23,0x1f,0x78,0x0c,0x00,0x00,0x01,0x00,0x24,0x1d,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x25,0x1b,0x78,0x0c,0x00,0x00,0x01,0x00,0x26,0x19,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x27,0x17,0x78,0x0c,0x00,0x00,0x01,0x00,0x28,0x15,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x29,0x13,0x78,0x0c,0x00,0x00,0x01,0x00,0x2a,0x11,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x2b,0x0f,0x78,0x0c,0x00,0x00,0x01,0x00,0x2c,0x0d,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x2d,0x0b,0x78,0x0c,0x00,0x00,0x01,0x00,0x2e,0x09,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x2f,0x07,0x78,0x0c,0x00,0x00,0x01,0x00,0x30,0x05,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x31,0x03,0x78,0x0c,0x00,0x00,0x01,0x00,0x32,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x33,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x34,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x35,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x36,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x37,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x38,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x39,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x3a,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x3b,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x3c,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x3d,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x3e,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x3f,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x40,0x5e,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x41,0x5e,0x78,0x0c,0x00,0x00,0x01,0x00,0x42,0x5e,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x43,0x5e,0x78,0x0c,0x00,0x00,0x01,0x00,0x44,0x5d,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x45,0x5b,0x78,0x0c,0x00,0x00,0x01,0x00,0x46,0x59,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x47,0x57,0x78,0x0c,0x00,0x00,0x01,0x00,0x48,0x55,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x49,0x53,0x78,0x0c,0x00,0x00,0x01,0x00,0x4a,0x51,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x4b,0x4f,0x78,0x0c,0x00,0x00,0x01,0x00,0x4c,0x4d,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x4d,0x4b,0x78,0x0c,0x00,0x00,0x01,0x00,0x4e,0x49,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x4f,0x47,0x78,0x0c,0x00,0x00,0x01,0x00,0x50,0x45,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x51,0x43,0x78,0x0c,0x00,0x00,0x01,0x00,0x52,0x41,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x53,0x3f,0x78,0x0c,0x00,0x00,0x01,0x00,0x54,0x3d,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x55,0x3b,0x78,0x0c,0x00,0x00,0x01,0x00,0x56,0x39,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x57,0x37,0x78,0x0c,0x00,0x00,0x01,0x00,0x58,0x35,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x59,0x33,0x78,0x0c,0x00,0x00,0x01,0x00,0x5a,0x31,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x5b,0x2f,0x78,0x0c,0x00,0x00,0x01,0x00,0x5c,0x2d,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x5d,0x2b,0x78,0x0c,0x00,0x00,0x01,0x00,0x5e,0x29,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x5f,0x27,0x78,0x0c,0x00,0x00,0x01,0x00,0x60,0x25,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x61,0x23,0x78,0x0c,0x00,0x00,0x01,0x00,0x62,0x21,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x63,0x1f,0x78,0x0c,0x00,0x00,0x01,0x00,0x64,0x1d,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x65,0x1b,0x78,0x0c,0x00,0x00,0x01,0x00,0x66,0x19,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x67,0x17,0x78,0x0c,0x00,0x00,0x01,0x00,0x68,0x15,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x69,0x13,0x78,0x0c,0x00,0x00,0x01,0x00,0x6a,0x11,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x6b,0x0f,0x78,0x0c,0x00,0x00,0x01,0x00,0x6c,0x0d,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x6d,0x0b,0x78,0x0c,0x00,0x00,0x01,0x00,0x6e,0x09,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x6f,0x07,0x78,0x0c,0x00,0x00,0x01,0x00,0x70,0x05,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x71,0x03,0x78,0x0c,0x00,0x00,0x01,0x00,0x72,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x73,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x74,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x75,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x76,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x77,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x78,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x79,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x7a,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x7b,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x7c,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x7d,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x7e,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x7f,0x01,0x78,0x0c,0x00,0x00,0x1e,0x00,0x00,0x30,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x01,0x30,0x78,0x0c,0x00,0x00,0x1e,0x00,0x02,0x30,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x03,0x30,0x78,0x0c,0x00,0x00,0x1e,0x00,0x04,0x30,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x05,0x30,0x78,0x0c,0x00,0x00,0x1e,0x00,0x06,0x30,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x07,0x30,0x78,0x0c,0x00,0x00,0x1e,0x00,0x08,0x3e,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x09,0x40,0x78,0x0c,0x00,0x00,0x1e,0x00,0x0a,0x42,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x0b,0x44,0x78,0x0c,0x00,0x00,0x1e,0x00,0x0c,0x46,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x0d,0x48,0x78,0x0c,0x00,0x00,0x1e,0x00,0x0e,0x48,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x0f,0x4a,0x78,0x0c,0x00,0x00,0x1e,0x00,0x10,0x4a,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x11,0x4c,0x78,0x0c,0x00,0x00,0x1e,0x00,0x12,0x4c,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x13,0x4e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x14,0x50,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x15,0x50,0x78,0x0c,0x00,0x00,0x1e,0x00,0x16,0x50,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x17,0x52,0x78,0x0c,0x00,0x00,0x1e,0x00,0x18,0x52,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x19,0x52,0x78,0x0c,0x00,0x00,0x1e,0x00,0x1a,0x54,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x1b,0x54,0x78,0x0c,0x00,0x00,0x1e,0x00,0x1c,0x54,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x1d,0x56,0x78,0x0c,0x00,0x00,0x1e,0x00,0x1e,0x56,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x1f,0x56,0x78,0x0c,0x00,0x00,0x1e,0x00,0x20,0x56,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x21,0x58,0x78,0x0c,0x00,0x00,0x1e,0x00,0x22,0x58,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x23,0x58,0x78,0x0c,0x00,0x00,0x1e,0x00,0x24,0x58,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x25,0x5a,0x78,0x0c,0x00,0x00,0x1e,0x00,0x26,0x5a,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x27,0x5a,0x78,0x0c,0x00,0x00,0x1e,0x00,0x28,0x5c,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x29,0x5c,0x78,0x0c,0x00,0x00,0x1e,0x00,0x2a,0x5e,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x2b,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x2c,0x5e,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x2d,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x2e,0x5e,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x2f,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x30,0x5e,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x31,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x32,0x5e,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x33,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x34,0x5e,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x35,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x36,0x5e,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x37,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x38,0x5e,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x39,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x3a,0x5e,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x3b,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x3c,0x5e,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x3d,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x3e,0x5e,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x3f,0x5e,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x08,0x00,0x00,\r
+0x00,0x00,0x04,0x03,0x04,0x08,0x00,0x00,0x03,0x00,0x00,0x00,0x08,0x08,0x00,0x00,\r
+0x00,0xfc,0x00,0x00,0x0c,0x08,0x00,0x00,0x0a,0x00,0x00,0x04,0x10,0x08,0x00,0x00,\r
+0xff,0x10,0x10,0x80,0x14,0x08,0x00,0x00,0x10,0x3d,0x0c,0x02,0x18,0x08,0x00,0x00,\r
+0xc5,0x03,0x00,0x00,0x1c,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x08,0x00,0x00,\r
+0x04,0x00,0x00,0x00,0x24,0x08,0x00,0x00,0x00,0x02,0x69,0x00,0x28,0x08,0x00,0x00,\r
+0x04,0x00,0x00,0x00,0x2c,0x08,0x00,0x00,0x00,0x02,0x69,0x00,0x30,0x08,0x00,0x00,\r
+0x04,0x00,0x00,0x00,0x34,0x08,0x00,0x00,0x00,0x02,0x69,0x00,0x38,0x08,0x00,0x00,\r
+0x04,0x00,0x00,0x00,0x3c,0x08,0x00,0x00,0x00,0x02,0x69,0x00,0x40,0x08,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x44,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x08,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x4c,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x08,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x54,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x08,0x00,0x00,\r
+0x65,0xa9,0x65,0xa9,0x5c,0x08,0x00,0x00,0x65,0xa9,0x65,0xa9,0x60,0x08,0x00,0x00,\r
+0x30,0x01,0x7f,0x0f,0x64,0x08,0x00,0x00,0x30,0x01,0x7f,0x0f,0x68,0x08,0x00,0x00,\r
+0x30,0x01,0x7f,0x0f,0x6c,0x08,0x00,0x00,0x30,0x01,0x7f,0x0f,0x70,0x08,0x00,0x00,\r
+0x00,0x03,0x00,0x03,0x74,0x08,0x00,0x00,0x00,0x03,0x00,0x03,0x78,0x08,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x7c,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x08,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x94,0x08,0x00,0x00,0xfe,0xff,0xff,0xff,0x98,0x08,0x00,0x00,\r
+0x10,0x20,0x30,0x40,0x9c,0x08,0x00,0x00,0x50,0x60,0x70,0x00,0xb0,0x08,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0xe0,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0xe4,0x08,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x03,0x03,0x03,0x03,0x04,0x0e,0x00,0x00,\r
+0x03,0x03,0x03,0x03,0x08,0x0e,0x00,0x00,0x03,0x03,0x00,0x00,0x0c,0x0e,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x10,0x0e,0x00,0x00,0x03,0x03,0x03,0x03,0x14,0x0e,0x00,0x00,\r
+0x03,0x03,0x03,0x03,0x18,0x0e,0x00,0x00,0x03,0x03,0x03,0x03,0x1c,0x0e,0x00,0x00,\r
+0x03,0x03,0x03,0x03,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x09,0x00,0x00,\r
+0x23,0x00,0x00,0x00,0x08,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x09,0x00,0x00,\r
+0x33,0x13,0x32,0x03,0x08,0x0a,0x00,0x00,0x00,0x86,0x88,0x8f,0x2c,0x0a,0x00,0x00,\r
+0x00,0x00,0x92,0x00,0x00,0x0c,0x00,0x00,0x80,0x00,0x00,0x00,0x04,0x0c,0x00,0x00,\r
+0x33,0x54,0x00,0x00,0x08,0x0c,0x00,0x00,0xe4,0x00,0x00,0x00,0x0c,0x0c,0x00,0x00,\r
+0x6c,0x6c,0x6c,0x6c,0x10,0x0c,0x00,0x00,0x00,0x00,0x00,0x08,0x14,0x0c,0x00,0x00,\r
+0x00,0x01,0x00,0x40,0x18,0x0c,0x00,0x00,0x00,0x00,0x00,0x08,0x1c,0x0c,0x00,0x00,\r
+0x00,0x01,0x00,0x40,0x20,0x0c,0x00,0x00,0x00,0x00,0x00,0x08,0x24,0x0c,0x00,0x00,\r
+0x00,0x01,0x00,0x40,0x28,0x0c,0x00,0x00,0x00,0x00,0x00,0x08,0x2c,0x0c,0x00,0x00,\r
+0x00,0x01,0x00,0x40,0x30,0x0c,0x00,0x00,0x44,0x6a,0xe9,0x8d,0x34,0x0c,0x00,0x00,\r
+0xcd,0x52,0x96,0x46,0x38,0x0c,0x00,0x00,0x90,0x5a,0x01,0x48,0x3c,0x0c,0x00,0x00,\r
+0x64,0x97,0x97,0x1a,0x40,0x0c,0x00,0x00,0x3f,0x42,0x7c,0x1f,0x44,0x0c,0x00,0x00,\r
+0xb7,0x00,0x01,0x00,0x48,0x0c,0x00,0x00,0x00,0x00,0x02,0xec,0x4c,0x0c,0x00,0x00,\r
+0x03,0x03,0xfc,0x00,0x50,0x0c,0x00,0x00,0x1c,0x34,0x54,0x69,0x54,0x0c,0x00,0x00,\r
+0x94,0x00,0x3c,0x43,0x58,0x0c,0x00,0x00,0x1c,0x34,0x54,0x69,0x5c,0x0c,0x00,0x00,\r
+0x94,0x00,0x3c,0x43,0x60,0x0c,0x00,0x00,0x1c,0x34,0x54,0x69,0x64,0x0c,0x00,0x00,\r
+0x94,0x00,0x3c,0x43,0x68,0x0c,0x00,0x00,0x1c,0x34,0x54,0x69,0x6c,0x0c,0x00,0x00,\r
+0x94,0x00,0x3c,0x43,0x70,0x0c,0x00,0x00,0x0d,0x00,0x5a,0x2c,0x74,0x0c,0x00,0x00,\r
+0x1b,0x15,0x86,0x01,0x78,0x0c,0x00,0x00,0x1f,0x00,0x00,0x00,0x7c,0x0c,0x00,0x00,\r
+0x12,0x16,0xb9,0x00,0x80,0x0c,0x00,0x00,0x80,0x00,0x00,0x20,0x84,0x0c,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x88,0x0c,0x00,0x00,0x80,0x00,0x00,0x20,0x8c,0x0c,0x00,0x00,\r
+0x00,0x00,0x20,0x08,0x90,0x0c,0x00,0x00,0x00,0x01,0x00,0x40,0x94,0x0c,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x98,0x0c,0x00,0x00,0x00,0x01,0x00,0x40,0x9c,0x0c,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0xa0,0x0c,0x00,0x00,0x92,0x24,0x49,0x00,0xa4,0x0c,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0xa8,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0xac,0x0c,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0xb0,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0xb4,0x0c,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0xb8,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0xbc,0x0c,0x00,0x00,\r
+0x92,0x24,0x49,0x00,0xc0,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0x0c,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0xc8,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0xcc,0x0c,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0xd0,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0xd4,0x0c,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0xd8,0x0c,0x00,0x00,0x27,0x24,0xb2,0x64,0xdc,0x0c,0x00,0x00,\r
+0x32,0x69,0x76,0x00,0xe0,0x0c,0x00,0x00,0x22,0x22,0x22,0x00,0xe4,0x0c,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0xe8,0x0c,0x00,0x00,0x02,0x43,0x64,0x07,0x00,0x0d,0x00,0x00,\r
+0x80,0x07,0x00,0x00,0x04,0x0d,0x00,0x00,0x03,0x04,0x00,0x00,0x08,0x0d,0x00,0x00,\r
+0x7f,0x90,0x00,0x00,0x0c,0x0d,0x00,0x00,0x01,0x00,0x00,0x00,0x10,0x0d,0x00,0x00,\r
+0x99,0x99,0x69,0xa0,0x14,0x0d,0x00,0x00,0x67,0x3c,0x99,0x99,0x18,0x0d,0x00,0x00,\r
+0x6b,0x5b,0x8f,0x6a,0x1c,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x0d,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x24,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x0d,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x2c,0x0d,0x00,0x00,0x75,0x19,0x97,0xcc,0x30,0x0d,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x34,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x0d,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x3c,0x0d,0x00,0x00,0x93,0x72,0x02,0x00,0x40,0x0d,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x44,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x0d,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x50,0x0d,0x00,0x00,0x0a,0x14,0x37,0x64,0x54,0x0d,0x00,0x00,\r
+0x02,0xbd,0x4d,0x02,0x58,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x5c,0x0d,0x00,0x00,\r
+0x64,0x20,0x03,0x30,0x60,0x0d,0x00,0x00,0x68,0xde,0x53,0x46,0x64,0x0d,0x00,0x00,\r
+0x3c,0x8a,0x51,0x00,0x68,0x0d,0x00,0x00,0x06,0x01,0x00,0x00,0xff,0x00,0x00,0x00,\r
+0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,\r
+0x64,0x05,0x01,0x80,0x10,0x00,0x00,0x00,0x6c,0x05,0x01,0x80,0x10,0x00,0x00,0x00,\r
+0x74,0x05,0x01,0x80,0x10,0x00,0x00,0x00,0x7c,0x05,0x01,0x80,0x10,0x00,0x00,0x00,\r
+0x84,0x05,0x01,0x80,0x10,0x00,0x00,0x00,0x8c,0x05,0x01,0x80,0x10,0x00,0x00,0x00,\r
+0x94,0x05,0x01,0x80,0x10,0x00,0x00,0x00,0x9c,0x05,0x01,0x80,0x10,0x00,0x00,0x00,\r
+0xa4,0x05,0x01,0x80,0x10,0x00,0x00,0x00,0xac,0x05,0x01,0x80,0x10,0x00,0x00,0x00,\r
+0x9c,0x2d,0x00,0x80,0x10,0x00,0x00,0x00,0x94,0x2d,0x00,0x80,0x10,0x00,0x00,0x00,\r
+0xb4,0x05,0x01,0x80,0x10,0x00,0x00,0x00,0xbc,0x05,0x01,0x80,0x34,0x01,0x00,0x00,\r
+0xc4,0x05,0x01,0x80,0x04,0x00,0x00,0x00,0xcc,0x05,0x01,0x80,0x34,0x01,0x00,0x00,\r
+0xc4,0x05,0x01,0x80,0x04,0x00,0x00,0x00,0xd4,0x05,0x01,0x80,0x30,0x00,0x00,0x00,\r
+0xdc,0x05,0x01,0x80,0x04,0x00,0x00,0x00,0xe4,0x05,0x01,0x80,0x13,0x00,0x00,0x00,\r
+0xec,0x05,0x01,0x80,0x17,0x00,0x00,0x00,0xf4,0x05,0x01,0x80,0x06,0x00,0x00,0x00,\r
+0xfc,0x05,0x01,0x80,0x06,0x00,0x00,0x00,0x04,0x06,0x01,0x80,0x08,0x00,0x00,0x00,\r
+0x0c,0x06,0x01,0x80,0x0c,0x00,0x00,0x00,0x14,0x06,0x01,0x80,0x04,0x00,0x00,0x00,\r
+0x1c,0x06,0x01,0x80,0x1f,0x00,0x00,0x00,0x24,0x06,0x01,0x80,0x01,0x00,0x00,0x00,\r
+0x2c,0x06,0x01,0x80,0x38,0x00,0x00,0x00,0x34,0x06,0x01,0x80,0x04,0x00,0x00,0x00,\r
+0x3c,0x06,0x01,0x80,0x02,0x00,0x00,0x00,0x44,0x06,0x01,0x80,0x04,0x00,0x00,0x00,\r
+0x4c,0x06,0x01,0x80,0x01,0x00,0x00,0x00,0x54,0x06,0x01,0x80,0x01,0x00,0x00,0x00,\r
+0x5c,0x06,0x01,0x80,0x0c,0x00,0x00,0x00,0x64,0x06,0x01,0x80,0x0e,0x00,0x00,0x00,\r
+0x6c,0x06,0x01,0x80,0x0c,0x00,0x00,0x00,0xb8,0x08,0x01,0x80,0x78,0x00,0x00,0x00,\r
+0xf0,0x09,0x01,0x80,0x04,0x00,0x00,0x00,0xf8,0x09,0x01,0x80,0x04,0x00,0x00,0x00,\r
+0xa4,0x2d,0x00,0x80,0x04,0x00,0x00,0x00,0xac,0x2d,0x00,0x80,0x04,0x00,0x00,0x00,\r
+0xb4,0x2d,0x00,0x80,0x04,0x00,0x00,0x00,0x00,0x0a,0x01,0x80,0x08,0x00,0x00,0x00,\r
+0x08,0x0a,0x01,0x80,0x10,0x00,0x00,0x00,0x10,0x0a,0x01,0x80,0x01,0x00,0x00,0x00,\r
+0x18,0x0a,0x01,0x80,0x01,0x00,0x00,0x00,0x20,0x0a,0x01,0x80,0x10,0x00,0x00,0x00,\r
+0xc4,0x2d,0x00,0x80,0x00,0xb7,0x00,0x00,0x01,0xe0,0x0e,0x00,0x02,0x4d,0x04,0x00,\r
+0x03,0x41,0x04,0x00,0x04,0xc3,0x08,0x00,0x05,0x72,0x0c,0x00,0x06,0xe6,0x00,0x00,\r
+0x07,0x2a,0x08,0x00,0x08,0x3f,0x00,0x00,0x09,0x35,0x03,0x00,0x0a,0xd4,0x09,0x00,\r
+0x0b,0xbb,0x07,0x00,0x0c,0x50,0x08,0x00,0x0d,0xdf,0x0c,0x00,0x0e,0x2b,0x00,0x00,\r
+0x0f,0x14,0x01,0x00,0x00,0xb7,0x01,0x00,0x01,0x01,0x00,0x00,0x02,0x00,0x04,0x00,\r
+0x01,0x02,0x00,0x00,0x02,0x01,0x04,0x00,0x01,0x03,0x00,0x00,0x02,0x02,0x04,0x00,\r
+0x01,0x04,0x00,0x00,0x02,0x03,0x04,0x00,0x01,0x05,0x00,0x00,0x02,0x04,0x04,0x00,\r
+0x01,0x06,0x00,0x00,0x02,0x05,0x04,0x00,0x01,0x07,0x00,0x00,0x02,0x08,0x04,0x00,\r
+0x01,0x08,0x00,0x00,0x02,0x09,0x04,0x00,0x01,0x09,0x00,0x00,0x02,0x0a,0x04,0x00,\r
+0x01,0x0a,0x00,0x00,0x02,0x0b,0x04,0x00,0x01,0x0b,0x00,0x00,0x02,0x02,0x05,0x00,\r
+0x01,0x0c,0x00,0x00,0x02,0x03,0x05,0x00,0x01,0x0d,0x00,0x00,0x02,0x04,0x05,0x00,\r
+0x01,0x0e,0x00,0x00,0x02,0x05,0x05,0x00,0x01,0x0f,0x00,0x00,0x02,0x40,0x05,0x00,\r
+0x01,0x10,0x00,0x00,0x02,0x41,0x05,0x00,0x01,0x11,0x00,0x00,0x02,0x42,0x05,0x00,\r
+0x01,0x12,0x00,0x00,0x02,0x43,0x05,0x00,0x01,0x13,0x00,0x00,0x02,0x44,0x05,0x00,\r
+0x01,0x14,0x00,0x00,0x02,0x45,0x05,0x00,0x01,0x15,0x00,0x00,0x02,0x80,0x05,0x00,\r
+0x01,0x16,0x00,0x00,0x02,0x81,0x05,0x00,0x01,0x17,0x00,0x00,0x02,0x82,0x05,0x00,\r
+0x01,0x18,0x00,0x00,0x02,0x83,0x05,0x00,0x01,0x19,0x00,0x00,0x02,0x84,0x05,0x00,\r
+0x01,0x1a,0x00,0x00,0x02,0x85,0x05,0x00,0x01,0x1b,0x00,0x00,0x02,0x88,0x05,0x00,\r
+0x01,0x1c,0x00,0x00,0x02,0x89,0x05,0x00,0x01,0x1d,0x00,0x00,0x02,0x8a,0x05,0x00,\r
+0x01,0x1e,0x00,0x00,0x02,0x8b,0x05,0x00,0x01,0x1f,0x00,0x00,0x02,0x43,0x06,0x00,\r
+0x01,0x20,0x00,0x00,0x02,0x44,0x06,0x00,0x01,0x21,0x00,0x00,0x02,0x45,0x06,0x00,\r
+0x01,0x22,0x00,0x00,0x02,0x80,0x06,0x00,0x01,0x23,0x00,0x00,0x02,0x81,0x06,0x00,\r
+0x01,0x24,0x00,0x00,0x02,0x82,0x06,0x00,0x01,0x25,0x00,0x00,0x02,0x83,0x06,0x00,\r
+0x01,0x26,0x00,0x00,0x02,0x84,0x06,0x00,0x01,0x27,0x00,0x00,0x02,0x85,0x06,0x00,\r
+0x01,0x28,0x00,0x00,0x02,0x88,0x06,0x00,0x01,0x29,0x00,0x00,0x02,0x89,0x06,0x00,\r
+0x01,0x2a,0x00,0x00,0x02,0x8a,0x06,0x00,0x01,0x2b,0x00,0x00,0x02,0x8b,0x06,0x00,\r
+0x01,0x2c,0x00,0x00,0x02,0x8c,0x06,0x00,0x01,0x2d,0x00,0x00,0x02,0x42,0x07,0x00,\r
+0x01,0x2e,0x00,0x00,0x02,0x43,0x07,0x00,0x01,0x2f,0x00,0x00,0x02,0x44,0x07,0x00,\r
+0x01,0x30,0x00,0x00,0x02,0x45,0x07,0x00,0x01,0x31,0x00,0x00,0x02,0x80,0x07,0x00,\r
+0x01,0x32,0x00,0x00,0x02,0x81,0x07,0x00,0x01,0x33,0x00,0x00,0x02,0x82,0x07,0x00,\r
+0x01,0x34,0x00,0x00,0x02,0x83,0x07,0x00,0x01,0x35,0x00,0x00,0x02,0x84,0x07,0x00,\r
+0x01,0x36,0x00,0x00,0x02,0x85,0x07,0x00,0x01,0x37,0x00,0x00,0x02,0x88,0x07,0x00,\r
+0x01,0x38,0x00,0x00,0x02,0x89,0x07,0x00,0x01,0x39,0x00,0x00,0x02,0x8a,0x07,0x00,\r
+0x01,0x3a,0x00,0x00,0x02,0x8b,0x07,0x00,0x01,0x3b,0x00,0x00,0x02,0x8c,0x07,0x00,\r
+0x01,0x3c,0x00,0x00,0x02,0x8d,0x07,0x00,0x01,0x3d,0x00,0x00,0x02,0x90,0x07,0x00,\r
+0x01,0x3e,0x00,0x00,0x02,0x91,0x07,0x00,0x01,0x3f,0x00,0x00,0x02,0x92,0x07,0x00,\r
+0x01,0x40,0x00,0x00,0x02,0x93,0x07,0x00,0x01,0x41,0x00,0x00,0x02,0x94,0x07,0x00,\r
+0x01,0x42,0x00,0x00,0x02,0x95,0x07,0x00,0x01,0x43,0x00,0x00,0x02,0x98,0x07,0x00,\r
+0x01,0x44,0x00,0x00,0x02,0x99,0x07,0x00,0x01,0x45,0x00,0x00,0x02,0x9a,0x07,0x00,\r
+0x01,0x46,0x00,0x00,0x02,0x9b,0x07,0x00,0x01,0x47,0x00,0x00,0x02,0x9c,0x07,0x00,\r
+0x01,0x48,0x00,0x00,0x02,0x9d,0x07,0x00,0x01,0x49,0x00,0x00,0x02,0xa0,0x07,0x00,\r
+0x01,0x4a,0x00,0x00,0x02,0xa1,0x07,0x00,0x01,0x4b,0x00,0x00,0x02,0xa2,0x07,0x00,\r
+0x01,0x4c,0x00,0x00,0x02,0xa3,0x07,0x00,0x01,0x4d,0x00,0x00,0x02,0xa4,0x07,0x00,\r
+0x01,0x4e,0x00,0x00,0x02,0xa5,0x07,0x00,0x01,0x4f,0x00,0x00,0x02,0xa8,0x07,0x00,\r
+0x01,0x50,0x00,0x00,0x02,0xa9,0x07,0x00,0x01,0x51,0x00,0x00,0x02,0xaa,0x03,0x00,\r
+0x01,0x52,0x00,0x00,0x02,0xab,0x03,0x00,0x01,0x53,0x00,0x00,0x02,0xac,0x03,0x00,\r
+0x01,0x54,0x00,0x00,0x02,0xad,0x03,0x00,0x01,0x55,0x00,0x00,0x02,0xb0,0x03,0x00,\r
+0x01,0x56,0x00,0x00,0x02,0xb1,0x03,0x00,0x01,0x57,0x00,0x00,0x02,0xb2,0x03,0x00,\r
+0x01,0x58,0x00,0x00,0x02,0xb3,0x03,0x00,0x01,0x59,0x00,0x00,0x02,0xb4,0x03,0x00,\r
+0x01,0x5a,0x00,0x00,0x02,0xb5,0x03,0x00,0x01,0x5b,0x00,0x00,0x02,0xb8,0x03,0x00,\r
+0x01,0x5c,0x00,0x00,0x02,0xb9,0x03,0x00,0x01,0x5d,0x00,0x00,0x02,0xba,0x03,0x00,\r
+0x01,0x5e,0x00,0x00,0x02,0xbb,0x03,0x00,0x01,0x5f,0x00,0x00,0x02,0xbb,0x03,0x00,\r
+0x03,0x80,0x00,0x00,0x05,0x04,0x00,0x00,0x00,0xb7,0x00,0x00,0xfe,0x00,0x00,0x00,\r
+0xfe,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x02,0x4d,0x0c,0x00,0xfe,0x00,0x00,0x00,\r
+0xfe,0x00,0x00,0x00,0x02,0x4d,0x04,0x00,0x00,0xbf,0x02,0x00,0xff,0xff,0xff,0x00,\r
+0xff,0xff,0xff,0x00,0x00,0xb7,0x00,0x00,0x01,0xe0,0x0e,0x00,0x02,0x4d,0x04,0x00,\r
+0x03,0x41,0x04,0x00,0x04,0xc3,0x08,0x00,0x05,0x72,0x0c,0x00,0x06,0xe6,0x00,0x00,\r
+0x07,0x2a,0x08,0x00,0x08,0x3f,0x00,0x00,0x09,0x35,0x03,0x00,0x0a,0xd4,0x09,0x00,\r
+0x0b,0xbb,0x07,0x00,0x0c,0x50,0x08,0x00,0x0d,0xdf,0x0c,0x00,0x0e,0x2b,0x00,0x00,\r
+0x0f,0x14,0x01,0x00,0x00,0xb7,0x01,0x00,0x01,0x01,0x00,0x00,0x02,0x00,0x04,0x00,\r
+0x01,0x02,0x00,0x00,0x02,0x01,0x04,0x00,0x01,0x03,0x00,0x00,0x02,0x02,0x04,0x00,\r
+0x01,0x04,0x00,0x00,0x02,0x03,0x04,0x00,0x01,0x05,0x00,0x00,0x02,0x04,0x04,0x00,\r
+0x01,0x06,0x00,0x00,0x02,0x05,0x04,0x00,0x01,0x07,0x00,0x00,0x02,0x08,0x04,0x00,\r
+0x01,0x08,0x00,0x00,0x02,0x09,0x04,0x00,0x01,0x09,0x00,0x00,0x02,0x0a,0x04,0x00,\r
+0x01,0x0a,0x00,0x00,0x02,0x0b,0x04,0x00,0x01,0x0b,0x00,0x00,0x02,0x02,0x05,0x00,\r
+0x01,0x0c,0x00,0x00,0x02,0x03,0x05,0x00,0x01,0x0d,0x00,0x00,0x02,0x04,0x05,0x00,\r
+0x01,0x0e,0x00,0x00,0x02,0x05,0x05,0x00,0x01,0x0f,0x00,0x00,0x02,0x40,0x05,0x00,\r
+0x01,0x10,0x00,0x00,0x02,0x41,0x05,0x00,0x01,0x11,0x00,0x00,0x02,0x42,0x05,0x00,\r
+0x01,0x12,0x00,0x00,0x02,0x43,0x05,0x00,0x01,0x13,0x00,0x00,0x02,0x44,0x05,0x00,\r
+0x01,0x14,0x00,0x00,0x02,0x45,0x05,0x00,0x01,0x15,0x00,0x00,0x02,0x80,0x05,0x00,\r
+0x01,0x16,0x00,0x00,0x02,0x81,0x05,0x00,0x01,0x17,0x00,0x00,0x02,0x82,0x05,0x00,\r
+0x01,0x18,0x00,0x00,0x02,0x83,0x05,0x00,0x01,0x19,0x00,0x00,0x02,0x84,0x05,0x00,\r
+0x01,0x1a,0x00,0x00,0x02,0x85,0x05,0x00,0x01,0x1b,0x00,0x00,0x02,0x88,0x05,0x00,\r
+0x01,0x1c,0x00,0x00,0x02,0x89,0x05,0x00,0x01,0x1d,0x00,0x00,0x02,0x8a,0x05,0x00,\r
+0x01,0x1e,0x00,0x00,0x02,0x8b,0x05,0x00,0x01,0x1f,0x00,0x00,0x02,0x43,0x06,0x00,\r
+0x01,0x20,0x00,0x00,0x02,0x44,0x06,0x00,0x01,0x21,0x00,0x00,0x02,0x45,0x06,0x00,\r
+0x01,0x22,0x00,0x00,0x02,0x80,0x06,0x00,0x01,0x23,0x00,0x00,0x02,0x81,0x06,0x00,\r
+0x01,0x24,0x00,0x00,0x02,0x82,0x06,0x00,0x01,0x25,0x00,0x00,0x02,0x83,0x06,0x00,\r
+0x01,0x26,0x00,0x00,0x02,0x84,0x06,0x00,0x01,0x27,0x00,0x00,0x02,0x85,0x06,0x00,\r
+0x01,0x28,0x00,0x00,0x02,0x88,0x06,0x00,0x01,0x29,0x00,0x00,0x02,0x89,0x06,0x00,\r
+0x01,0x2a,0x00,0x00,0x02,0x8a,0x06,0x00,0x01,0x2b,0x00,0x00,0x02,0x8b,0x06,0x00,\r
+0x01,0x2c,0x00,0x00,0x02,0x8c,0x06,0x00,0x01,0x2d,0x00,0x00,0x02,0x42,0x07,0x00,\r
+0x01,0x2e,0x00,0x00,0x02,0x43,0x07,0x00,0x01,0x2f,0x00,0x00,0x02,0x44,0x07,0x00,\r
+0x01,0x30,0x00,0x00,0x02,0x45,0x07,0x00,0x01,0x31,0x00,0x00,0x02,0x80,0x07,0x00,\r
+0x01,0x32,0x00,0x00,0x02,0x81,0x07,0x00,0x01,0x33,0x00,0x00,0x02,0x82,0x07,0x00,\r
+0x01,0x34,0x00,0x00,0x02,0x83,0x07,0x00,0x01,0x35,0x00,0x00,0x02,0x84,0x07,0x00,\r
+0x01,0x36,0x00,0x00,0x02,0x85,0x07,0x00,0x01,0x37,0x00,0x00,0x02,0x88,0x07,0x00,\r
+0x01,0x38,0x00,0x00,0x02,0x89,0x07,0x00,0x01,0x39,0x00,0x00,0x02,0x8a,0x07,0x00,\r
+0x01,0x3a,0x00,0x00,0x02,0x8b,0x07,0x00,0x01,0x3b,0x00,0x00,0x02,0x8c,0x07,0x00,\r
+0x01,0x3c,0x00,0x00,0x02,0x8d,0x07,0x00,0x01,0x3d,0x00,0x00,0x02,0x90,0x07,0x00,\r
+0x01,0x3e,0x00,0x00,0x02,0x91,0x07,0x00,0x01,0x3f,0x00,0x00,0x02,0x92,0x07,0x00,\r
+0x01,0x40,0x00,0x00,0x02,0x93,0x07,0x00,0x01,0x41,0x00,0x00,0x02,0x94,0x07,0x00,\r
+0x01,0x42,0x00,0x00,0x02,0x95,0x07,0x00,0x01,0x43,0x00,0x00,0x02,0x98,0x07,0x00,\r
+0x01,0x44,0x00,0x00,0x02,0x99,0x07,0x00,0x01,0x45,0x00,0x00,0x02,0x9a,0x07,0x00,\r
+0x01,0x46,0x00,0x00,0x02,0x9b,0x07,0x00,0x01,0x47,0x00,0x00,0x02,0x9c,0x07,0x00,\r
+0x01,0x48,0x00,0x00,0x02,0x9d,0x07,0x00,0x01,0x49,0x00,0x00,0x02,0xa0,0x07,0x00,\r
+0x01,0x4a,0x00,0x00,0x02,0xa1,0x07,0x00,0x01,0x4b,0x00,0x00,0x02,0xa2,0x07,0x00,\r
+0x01,0x4c,0x00,0x00,0x02,0xa3,0x07,0x00,0x01,0x4d,0x00,0x00,0x02,0xa4,0x07,0x00,\r
+0x01,0x4e,0x00,0x00,0x02,0xa5,0x07,0x00,0x01,0x4f,0x00,0x00,0x02,0xa8,0x07,0x00,\r
+0x01,0x50,0x00,0x00,0x02,0xa9,0x07,0x00,0x01,0x51,0x00,0x00,0x02,0xaa,0x03,0x00,\r
+0x01,0x52,0x00,0x00,0x02,0xab,0x03,0x00,0x01,0x53,0x00,0x00,0x02,0xac,0x03,0x00,\r
+0x01,0x54,0x00,0x00,0x02,0xad,0x03,0x00,0x01,0x55,0x00,0x00,0x02,0xb0,0x03,0x00,\r
+0x01,0x56,0x00,0x00,0x02,0xb1,0x03,0x00,0x01,0x57,0x00,0x00,0x02,0xb2,0x03,0x00,\r
+0x01,0x58,0x00,0x00,0x02,0xb3,0x03,0x00,0x01,0x59,0x00,0x00,0x02,0xb4,0x03,0x00,\r
+0x01,0x5a,0x00,0x00,0x02,0xb5,0x03,0x00,0x01,0x5b,0x00,0x00,0x02,0xb8,0x03,0x00,\r
+0x01,0x5c,0x00,0x00,0x02,0xb9,0x03,0x00,0x01,0x5d,0x00,0x00,0x02,0xba,0x03,0x00,\r
+0x01,0x5e,0x00,0x00,0x02,0xbb,0x03,0x00,0x01,0x5f,0x00,0x00,0x02,0xbb,0x03,0x00,\r
+0x03,0x80,0x00,0x00,0x05,0x04,0x00,0x00,0x00,0xb7,0x00,0x00,0xfe,0x00,0x00,0x00,\r
+0xfe,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x02,0x4d,0x0c,0x00,0xfe,0x00,0x00,0x00,\r
+0xfe,0x00,0x00,0x00,0x02,0x4d,0x04,0x00,0x00,0xbf,0x02,0x00,0xff,0xff,0xff,0x00,\r
+0xff,0xff,0xff,0x00,0x4f,0x6e,0x41,0x73,0x73,0x6f,0x63,0x52,0x65,0x71,0x00,0x00,\r
+0x4f,0x6e,0x41,0x73,0x73,0x6f,0x63,0x52,0x73,0x70,0x00,0x00,0x4f,0x6e,0x52,0x65,\r
+0x41,0x73,0x73,0x6f,0x63,0x52,0x65,0x71,0x00,0x00,0x00,0x00,0x4f,0x6e,0x52,0x65,\r
+0x41,0x73,0x73,0x6f,0x63,0x52,0x73,0x70,0x00,0x00,0x00,0x00,0x4f,0x6e,0x50,0x72,\r
+0x6f,0x62,0x65,0x52,0x65,0x71,0x00,0x00,0x4f,0x6e,0x50,0x72,0x6f,0x62,0x65,0x52,\r
+0x73,0x70,0x00,0x00,0x4f,0x6e,0x42,0x65,0x61,0x63,0x6f,0x6e,0x00,0x00,0x00,0x00,\r
+0x4f,0x6e,0x41,0x54,0x49,0x4d,0x00,0x00,0x4f,0x6e,0x44,0x69,0x73,0x61,0x73,0x73,\r
+0x6f,0x63,0x00,0x00,0x4f,0x6e,0x41,0x75,0x74,0x68,0x00,0x00,0x4f,0x6e,0x44,0x65,\r
+0x41,0x75,0x74,0x68,0x00,0x00,0x00,0x00,0x4f,0x6e,0x41,0x63,0x74,0x69,0x6f,0x6e,\r
+0x00,0x00,0x00,0x00,0x4f,0x6e,0x45,0x78,0x63,0x65,0x70,0x74,0x69,0x6f,0x6e,0x00,\r
+0x00,0x00,0x00,0x00,0xfc,0xa7,0x01,0x80,0x24,0x2f,0x00,0x80,0x10,0x00,0x00,0x00,\r
+0x08,0xa8,0x01,0x80,0x2c,0x2f,0x00,0x80,0x20,0x00,0x00,0x00,0x14,0xa8,0x01,0x80,\r
+0x24,0x2f,0x00,0x80,0x30,0x00,0x00,0x00,0x24,0xa8,0x01,0x80,0x2c,0x2f,0x00,0x80,\r
+0x40,0x00,0x00,0x00,0x34,0xa8,0x01,0x80,0x34,0x2f,0x00,0x80,0x50,0x00,0x00,0x00,\r
+0x40,0xa8,0x01,0x80,0x54,0x2f,0x00,0x80,0x80,0x00,0x00,0x00,0x4c,0xa8,0x01,0x80,\r
+0x04,0x30,0x00,0x80,0x90,0x00,0x00,0x00,0x58,0xa8,0x01,0x80,0x5c,0x2f,0x00,0x80,\r
+0xa0,0x00,0x00,0x00,0x60,0xa8,0x01,0x80,0x6c,0x2f,0x00,0x80,0xb0,0x00,0x00,0x00,\r
+0x6c,0xa8,0x01,0x80,0x64,0x2f,0x00,0x80,0xc0,0x00,0x00,0x00,0x74,0xa8,0x01,0x80,\r
+0x74,0x2f,0x00,0x80,0xd0,0x00,0x00,0x00,0x80,0xa8,0x01,0x80,0x7c,0x2f,0x00,0x80,\r
+0x0c,0x00,0x00,0x00,0x8c,0xa8,0x01,0x80,0x98,0x2f,0x00,0x80,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,\r
+0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0xff,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x04,0x05,0x06,0x07,0x08,0xff,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xaa,0x01,0x80,0x00,0xaa,0x01,0x80,\r
+0x31,0x10,0x10,0x00,0x00,0x30,0x00,0x00,0x31,0x20,0x10,0x00,0x00,0x30,0x00,0x00,\r
+0x31,0x28,0x10,0x00,0x00,0x30,0x00,0x00,0x31,0x2c,0x10,0x10,0x00,0x30,0x00,0x00,\r
+0x31,0x2f,0x10,0x10,0x00,0x30,0x00,0x00,0x31,0x30,0x18,0x00,0x00,0x30,0x00,0x00,\r
+0x31,0x30,0x20,0x10,0x00,0x30,0x00,0x00,0x22,0x20,0x18,0x08,0x00,0x20,0x00,0x00,\r
+0x22,0x21,0x14,0x08,0x00,0x20,0x00,0x00,0x22,0x21,0x1c,0x08,0x00,0x20,0x00,0x00,\r
+0x22,0x21,0x20,0x08,0x00,0x20,0x00,0x00,0x22,0x21,0x20,0x10,0x00,0x20,0x00,0x00,\r
+0x22,0x21,0x20,0x18,0x00,0x20,0x00,0x00,0x1a,0x19,0x18,0x10,0x00,0x18,0x00,0x00,\r
+0x12,0x11,0x10,0x08,0x00,0x10,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x08,0x00,0x00,\r
+0x0a,0x09,0x08,0x02,0x00,0x08,0x00,0x00,0x0a,0x09,0x08,0x04,0x00,0x08,0x00,0x00,\r
+0x0a,0x09,0x08,0x06,0x00,0x08,0x00,0x00,0x08,0x07,0x06,0x04,0x00,0x06,0x00,0x00,\r
+0x06,0x05,0x04,0x02,0x00,0x04,0x00,0x00,0x06,0x05,0x04,0x03,0x00,0x04,0x00,0x00,\r
+0x05,0x04,0x03,0x02,0x00,0x03,0x00,0x00,0x09,0x08,0x07,0x06,0x07,0x06,0x06,0x05,\r
+0x05,0x04,0x04,0x03,0x06,0x05,0x05,0x04,0x04,0x03,0x03,0x03,0x05,0x04,0x04,0x03,\r
+0x03,0x02,0x02,0x02,0x00,0x09,0x08,0x07,0x06,0x07,0x06,0x06,0x05,0x05,0x04,0x04,\r
+0x03,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x02,0x04,0x03,0x03,0x02,0x02,0x01,0x01,\r
+0x01,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x10,0x10,0x20,\r
+0x08,0x08,0x08,0x08,0x20,0x20,0x20,0x20,0x08,0x08,0x08,0x08,0x08,0x20,0x20,0x20,\r
+0x30,0x08,0x08,0x08,0x08,0x18,0x18,0x18,0x18,0x18,0x20,0x30,0x30,0x10,0x20,0x20,\r
+0x20,0x20,0x20,0x30,0x30,0x08,0x10,0x20,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,\r
+0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x10,0x10,0x20,0x08,0x08,0x08,0x08,\r
+0x08,0x20,0x20,0x20,0x08,0x08,0x08,0x08,0x08,0x20,0x20,0x20,0x20,0x08,0x08,0x08,\r
+0x08,0x18,0x18,0x18,0x18,0x18,0x20,0x30,0x30,0x10,0x20,0x20,0x20,0x20,0x20,0x30,\r
+0x30,0x08,0x10,0x20,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x0a,0x09,0x08,0x04,\r
+0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,\r
+0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,\r
+0x09,0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x12,0x11,0x10,0x08,0x00,0x12,0x11,\r
+0x10,0x08,0x00,0x22,0x21,0x20,0x18,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,0x08,\r
+0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x22,0x21,0x20,0x18,\r
+0x00,0x22,0x21,0x20,0x18,0x00,0x22,0x21,0x1c,0x08,0x00,0x22,0x20,0x18,0x08,0x00,\r
+0x0a,0x09,0x08,0x02,0x00,0x0a,0x09,0x08,0x02,0x00,0x0a,0x09,0x08,0x02,0x00,0x0a,\r
+0x09,0x08,0x02,0x00,0x0a,0x09,0x08,0x00,0x00,0x22,0x21,0x20,0x10,0x00,0x22,0x21,\r
+0x20,0x08,0x00,0x22,0x21,0x1c,0x08,0x00,0x31,0x30,0x18,0x00,0x00,0x0a,0x09,0x08,\r
+0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,\r
+0x00,0x1a,0x19,0x18,0x10,0x00,0x1a,0x19,0x18,0x10,0x00,0x1a,0x19,0x18,0x10,0x00,\r
+0x1a,0x19,0x18,0x10,0x00,0x1a,0x19,0x18,0x10,0x00,0x22,0x21,0x20,0x08,0x00,0x31,\r
+0x2c,0x10,0x10,0x00,0x31,0x28,0x10,0x00,0x00,0x12,0x11,0x10,0x08,0x00,0x22,0x21,\r
+0x20,0x18,0x00,0x22,0x21,0x20,0x18,0x00,0x22,0x21,0x20,0x08,0x00,0x22,0x21,0x14,\r
+0x08,0x00,0x22,0x20,0x18,0x08,0x00,0x31,0x30,0x20,0x10,0x00,0x31,0x2c,0x10,0x10,\r
+0x00,0x0a,0x09,0x08,0x00,0x00,0x12,0x11,0x10,0x08,0x00,0x22,0x21,0x20,0x18,0x00,\r
+0x22,0x21,0x20,0x18,0x00,0x31,0x30,0x20,0x10,0x00,0x31,0x2f,0x10,0x10,0x00,0x31,\r
+0x2f,0x10,0x10,0x00,0x31,0x10,0x10,0x00,0x00,0x31,0x2c,0x10,0x10,0x00,0x00,0x00,\r
+0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,\r
+0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,\r
+0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x12,0x11,0x10,\r
+0x08,0x00,0x12,0x11,0x10,0x08,0x00,0x22,0x21,0x20,0x18,0x00,0x0a,0x09,0x08,0x04,\r
+0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x02,0x00,0x0a,0x09,0x08,0x00,0x00,\r
+0x0a,0x09,0x08,0x00,0x00,0x22,0x21,0x20,0x18,0x00,0x22,0x21,0x1c,0x08,0x00,0x22,\r
+0x21,0x14,0x08,0x00,0x0a,0x09,0x08,0x02,0x00,0x0a,0x09,0x08,0x02,0x00,0x0a,0x09,\r
+0x08,0x02,0x00,0x0a,0x09,0x08,0x02,0x00,0x0a,0x09,0x08,0x00,0x00,0x22,0x21,0x20,\r
+0x10,0x00,0x22,0x21,0x20,0x08,0x00,0x22,0x21,0x14,0x08,0x00,0x22,0x21,0x14,0x08,\r
+0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,\r
+0x0a,0x09,0x08,0x04,0x00,0x1a,0x19,0x18,0x10,0x00,0x1a,0x19,0x18,0x10,0x00,0x1a,\r
+0x19,0x18,0x10,0x00,0x1a,0x19,0x18,0x10,0x00,0x1a,0x19,0x18,0x10,0x00,0x22,0x21,\r
+0x20,0x08,0x00,0x31,0x2c,0x10,0x10,0x00,0x31,0x28,0x10,0x00,0x00,0x12,0x11,0x10,\r
+0x08,0x00,0x22,0x21,0x20,0x18,0x00,0x22,0x21,0x20,0x18,0x00,0x22,0x21,0x20,0x08,\r
+0x00,0x22,0x21,0x14,0x08,0x00,0x22,0x20,0x18,0x08,0x00,0x31,0x30,0x20,0x10,0x00,\r
+0x31,0x2c,0x10,0x10,0x00,0x0a,0x09,0x08,0x00,0x00,0x12,0x11,0x10,0x08,0x00,0x22,\r
+0x21,0x20,0x18,0x00,0x22,0x21,0x20,0x18,0x00,0x31,0x30,0x20,0x10,0x00,0x31,0x2f,\r
+0x10,0x10,0x00,0x31,0x2f,0x10,0x10,0x00,0x31,0x10,0x10,0x00,0x00,0x31,0x2c,0x10,\r
+0x10,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x02,0x04,0x08,0x0c,0x10,0x18,0x20,0x30,\r
+0x02,0x04,0x08,0x0c,0x10,0x18,0x20,0x30,0x06,0x0c,0x10,0x18,0x24,0x30,0x3c,0x48,\r
+0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x27,0x2c,\r
+0x19,0x1b,0x1e,0x20,0x23,0x29,0x2a,0x2b,0x00,0x00,0x00,0x00,0x25,0x29,0x2b,0x2e,\r
+0x2e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x00,\r
+0x10,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x30,0x00,0x00,0x00,\r
+0x48,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,\r
+0xd8,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,\r
+0xc8,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,\r
+0x30,0x02,0x00,0x00,0x2c,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,\r
+0xd0,0x02,0x00,0x00,0x80,0x0c,0x00,0x00,0x80,0x0c,0x00,0x00,0x80,0x0c,0x00,0x00,\r
+0xa0,0x0f,0x00,0x00,0xa0,0x0f,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,\r
+0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x12,0x00,0x00,0x00,\r
+0x18,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x00,0x00,\r
+0x60,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,\r
+0x50,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,\r
+0xf0,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x64,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,\r
+0xf0,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x40,0x06,0x00,0x00,0x40,0x06,0x00,0x00,\r
+0x40,0x06,0x00,0x00,0xd0,0x07,0x00,0x00,0xd0,0x07,0x00,0x00,0x30,0x7a,0x00,0x80,\r
+0x88,0x85,0x00,0x80,0x88,0x85,0x00,0x80,0x88,0x85,0x00,0x80,0x88,0x85,0x00,0x80,\r
+0xd8,0x83,0x00,0x80,0x38,0x7a,0x00,0x80,0x30,0x7a,0x00,0x80,0x30,0x7a,0x00,0x80,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xb8,0x86,0x00,0x80,0xb8,0x86,0x00,0x80,\r
+0xb8,0x86,0x00,0x80,0xb8,0x86,0x00,0x80,0xfc,0x6c,0x01,0x80,0x1c,0x6d,0x01,0x80,\r
+0x04,0x6d,0x01,0x80,0x0c,0x6d,0x01,0x80,0x14,0x6d,0x01,0x80,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x08,0x04,0x04,0x08,0x02,0x02,0x01,0x01,0x50,0x53,0x00,0x00,\r
+0xf8,0x07,0x00,0x80,0xec,0x07,0x00,0x80,0xe0,0x07,0x00,0x80,0xd4,0x07,0x00,0x80,\r
+0xc8,0x07,0x00,0x80,0xbc,0x07,0x00,0x80,0xb0,0x07,0x00,0x80,0xa4,0x07,0x00,0x80,\r
+0x98,0x07,0x00,0x80,0x8c,0x07,0x00,0x80,0x44,0x07,0x00,0x80,0xb0,0x03,0x25,0xb0,\r
+0x2c,0x00,0x2a,0xb0,0x78,0x1b,0x02,0x80,0xb0,0x03,0x25,0xb0,0x44,0x44,0x33,0x33,\r
+0x06,0x00,0x2a,0xb0,0x3c,0x47,0x00,0x80,0x30,0x47,0x00,0x80,0x24,0x47,0x00,0x80,\r
+0x18,0x47,0x00,0x80,0x0c,0x47,0x00,0x80,0x00,0x47,0x00,0x80,0xf4,0x46,0x00,0x80,\r
+0xe8,0x46,0x00,0x80,0xdc,0x46,0x00,0x80,0xd0,0x46,0x00,0x80,0xc4,0x46,0x00,0x80,\r
+0xb8,0x46,0x00,0x80,0x60,0x3f,0x01,0x80,0x48,0x3f,0x01,0x80,0x30,0x3f,0x01,0x80,\r
+0x18,0x3f,0x01,0x80,0x00,0x3f,0x01,0x80,0xe8,0x3e,0x01,0x80,0xb4,0x3e,0x01,0x80,\r
+0x00,0x02,0x00,0x00,0x08,0x09,0x00,0x00,0x0c,0x58,0x00,0x80,0x18,0x58,0x00,0x80,\r
+0x24,0x58,0x00,0x80,0x30,0x58,0x00,0x80,0x0c,0x58,0x00,0x80,0x0c,0x58,0x00,0x80,\r
+0x0c,0x58,0x00,0x80,0x0c,0x58,0x00,0x80,0x3c,0x58,0x00,0x80,0x48,0x58,0x00,0x80,\r
+0x54,0x58,0x00,0x80,0x60,0x58,0x00,0x80,0x78,0x1b,0x02,0x80,0x78,0x1b,0x02,0x80,\r
+0x84,0x0e,0x25,0xb0,0x88,0x0e,0x25,0xb0,0x8c,0x0e,0x25,0xb0,0xd0,0x0e,0x25,0xb0,\r
+0xd8,0x0e,0x25,0xb0,0x20,0x08,0x25,0xb0,0xfe,0x01,0x80,0x7f,0xe2,0x01,0x80,0x78,\r
+0xc7,0x01,0xc0,0x71,0xae,0x01,0x80,0x6b,0x95,0x01,0x40,0x65,0x7f,0x01,0xc0,0x5f,\r
+0x69,0x01,0x40,0x5a,0x55,0x01,0x40,0x55,0x42,0x01,0x80,0x50,0x30,0x01,0x00,0x4c,\r
+0x1f,0x01,0xc0,0x47,0x0f,0x01,0xc0,0x43,0x00,0x01,0x00,0x40,0xf2,0x00,0x80,0x3c,\r
+0xe4,0x00,0x00,0x39,0xd7,0x00,0xc0,0x35,0xcb,0x00,0xc0,0x32,0xc0,0x00,0x00,0x30,\r
+0xb5,0x00,0x40,0x2d,0xab,0x00,0xc0,0x2a,0xa2,0x00,0x80,0x28,0x98,0x00,0x00,0x26,\r
+0x90,0x00,0x00,0x24,0x88,0x00,0x00,0x22,0x80,0x00,0x00,0x20,0x79,0x00,0x40,0x1e,\r
+0x72,0x00,0x80,0x1c,0x6c,0x00,0x00,0x1b,0x66,0x00,0x80,0x19,0x60,0x00,0x00,0x18,\r
+0x5b,0x00,0xc0,0x16,0x56,0x00,0x80,0x15,0x51,0x00,0x40,0x14,0x4c,0x00,0x00,0x13,\r
+0x48,0x00,0x00,0x12,0x44,0x00,0x00,0x11,0x40,0x00,0x00,0x10,0x36,0x35,0x2e,0x25,\r
+0x1c,0x12,0x09,0x04,0x33,0x32,0x2b,0x23,0x1a,0x11,0x08,0x04,0x30,0x2f,0x29,0x21,\r
+0x19,0x10,0x08,0x03,0x2d,0x2d,0x27,0x1f,0x18,0x0f,0x08,0x03,0x2b,0x2a,0x25,0x1e,\r
+0x16,0x0e,0x07,0x03,0x28,0x28,0x22,0x1c,0x15,0x0d,0x07,0x03,0x26,0x25,0x21,0x1b,\r
+0x14,0x0d,0x06,0x03,0x24,0x23,0x1f,0x19,0x13,0x0c,0x06,0x03,0x22,0x21,0x1d,0x18,\r
+0x11,0x0b,0x06,0x02,0x20,0x20,0x1b,0x16,0x11,0x08,0x05,0x02,0x1f,0x1e,0x1a,0x15,\r
+0x10,0x0a,0x05,0x02,0x1d,0x1c,0x18,0x14,0x0f,0x0a,0x05,0x02,0x1b,0x1a,0x17,0x13,\r
+0x0e,0x09,0x04,0x02,0x1a,0x19,0x16,0x12,0x0d,0x09,0x04,0x02,0x18,0x17,0x15,0x11,\r
+0x0c,0x08,0x04,0x02,0x17,0x16,0x13,0x10,0x0c,0x08,0x04,0x02,0x16,0x15,0x12,0x0f,\r
+0x0b,0x07,0x04,0x01,0x14,0x14,0x11,0x0e,0x0b,0x07,0x03,0x02,0x13,0x13,0x10,0x0d,\r
+0x0a,0x06,0x03,0x01,0x12,0x12,0x0f,0x0c,0x09,0x06,0x03,0x01,0x11,0x11,0x0f,0x0c,\r
+0x09,0x06,0x03,0x01,0x10,0x10,0x0e,0x0b,0x08,0x05,0x03,0x01,0x0f,0x0f,0x0d,0x0b,\r
+0x08,0x05,0x03,0x01,0x0e,0x0e,0x0c,0x0a,0x08,0x05,0x02,0x01,0x0d,0x0d,0x0c,0x0a,\r
+0x07,0x05,0x02,0x01,0x0d,0x0c,0x0b,0x09,0x07,0x04,0x02,0x01,0x0c,0x0c,0x0a,0x09,\r
+0x06,0x04,0x02,0x01,0x0b,0x0b,0x0a,0x08,0x06,0x04,0x02,0x01,0x0b,0x0a,0x09,0x08,\r
+0x06,0x04,0x02,0x01,0x0a,0x0a,0x09,0x07,0x05,0x03,0x02,0x01,0x0a,0x09,0x08,0x07,\r
+0x05,0x03,0x02,0x01,0x09,0x09,0x08,0x06,0x05,0x03,0x01,0x01,0x09,0x08,0x07,0x06,\r
+0x04,0x03,0x01,0x01,0x36,0x35,0x2e,0x1b,0x00,0x00,0x00,0x00,0x33,0x32,0x2b,0x19,\r
+0x00,0x00,0x00,0x00,0x30,0x2f,0x29,0x18,0x00,0x00,0x00,0x00,0x2d,0x2d,0x17,0x17,\r
+0x00,0x00,0x00,0x00,0x2b,0x2a,0x25,0x15,0x00,0x00,0x00,0x00,0x28,0x28,0x24,0x14,\r
+0x00,0x00,0x00,0x00,0x26,0x25,0x21,0x13,0x00,0x00,0x00,0x00,0x24,0x23,0x1f,0x12,\r
+0x00,0x00,0x00,0x00,0x22,0x21,0x1d,0x11,0x00,0x00,0x00,0x00,0x20,0x20,0x1b,0x10,\r
+0x00,0x00,0x00,0x00,0x1f,0x1e,0x1a,0x0f,0x00,0x00,0x00,0x00,0x1d,0x1c,0x18,0x0e,\r
+0x00,0x00,0x00,0x00,0x1b,0x1a,0x17,0x0e,0x00,0x00,0x00,0x00,0x1a,0x19,0x16,0x0d,\r
+0x00,0x00,0x00,0x00,0x18,0x17,0x15,0x0c,0x00,0x00,0x00,0x00,0x17,0x16,0x13,0x0b,\r
+0x00,0x00,0x00,0x00,0x16,0x15,0x12,0x0b,0x00,0x00,0x00,0x00,0x14,0x14,0x11,0x0a,\r
+0x00,0x00,0x00,0x00,0x13,0x13,0x10,0x0a,0x00,0x00,0x00,0x00,0x12,0x12,0x0f,0x09,\r
+0x00,0x00,0x00,0x00,0x11,0x11,0x0f,0x09,0x00,0x00,0x00,0x00,0x10,0x10,0x0e,0x08,\r
+0x00,0x00,0x00,0x00,0x0f,0x0f,0x0d,0x08,0x00,0x00,0x00,0x00,0x0e,0x0e,0x0c,0x07,\r
+0x00,0x00,0x00,0x00,0x0d,0x0d,0x0c,0x07,0x00,0x00,0x00,0x00,0x0d,0x0c,0x0b,0x06,\r
+0x00,0x00,0x00,0x00,0x0c,0x0c,0x0a,0x06,0x00,0x00,0x00,0x00,0x0b,0x0b,0x0a,0x06,\r
+0x00,0x00,0x00,0x00,0x0b,0x0a,0x09,0x05,0x00,0x00,0x00,0x00,0x0a,0x0a,0x09,0x05,\r
+0x00,0x00,0x00,0x00,0x0a,0x09,0x08,0x05,0x00,0x00,0x00,0x00,0x09,0x09,0x08,0x05,\r
+0x00,0x00,0x00,0x00,0x09,0x08,0x07,0x04,0x00,0x00,0x00,0x00,0x06,0x00,0x2a,0xb0,\r
+0x05,0x00,0x2a,0xb0,0x34,0x7b,0x00,0x80,0xbc,0x7b,0x00,0x80,0x60,0x7b,0x00,0x80,\r
+0xbc,0x7b,0x00,0x80,0xbc,0x7b,0x00,0x80,0xbc,0x7b,0x00,0x80,0xbc,0x7b,0x00,0x80,\r
+0x08,0x7b,0x00,0x80,0x00,0x01,0x02,0x02,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x04,\r
+0x04,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,\r
+0x05,0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,\r
+0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,\r
+0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,\r
+0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,\r
+0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,\r
+0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,\r
+0x07,0x07,0x07,0x07,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,\r
+0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,\r
+0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,\r
+0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,\r
+0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,\r
+0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,\r
+0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,\r
+0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,\r
+0x08,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,\r
+0x08,0x28,0x28,0x28,0x28,0x28,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,\r
+0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xa0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,\r
+0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,\r
+0x04,0x04,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x41,0x41,0x41,0x41,0x41,0x41,0x01,\r
+0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,\r
+0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10,0x10,0x42,0x42,0x42,0x42,0x42,0x42,0x02,\r
+0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,\r
+0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,\r
+0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,\r
+0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,\r
+0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,\r
+0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,\r
+0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,\r
+0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x36,0xc2,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x45,0xc4,0xf0,0x00,0x45,0xc4,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x45,0xb5,0x60,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x02,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0xc7,0x00,0xb8,0xff,0xff,0xff,0xff,\r
+};\r
+\r
+u8 Rtl8192SEFwMainArray[MainArrayLength] = {\r
+0x0, };\r
+\r
+u8 Rtl8192SEFwDataArray[DataArrayLength] = {\r
+0x0, };\r
+\r
+u32 Rtl8192SEPHY_REG_2T2RArray[PHY_REG_2T2RArrayLength] = {\r
+0x01c,0x07000000,\r
+0x800,0x00040000,\r
+0x804,0x00008003,\r
+0x808,0x0000fc00,\r
+0x80c,0x0000000a,\r
+0x810,0x10005088,\r
+0x814,0x020c3d10,\r
+0x818,0x00200185,\r
+0x81c,0x00000000,\r
+0x820,0x01000000,\r
+0x824,0x00390004,\r
+0x828,0x01000000,\r
+0x82c,0x00390004,\r
+0x830,0x00000004,\r
+0x834,0x00690200,\r
+0x838,0x00000004,\r
+0x83c,0x00690200,\r
+0x840,0x00010000,\r
+0x844,0x00010000,\r
+0x848,0x00000000,\r
+0x84c,0x00000000,\r
+0x850,0x00000000,\r
+0x854,0x00000000,\r
+0x858,0x48484848,\r
+0x85c,0x65a965a9,\r
+0x860,0x0f7f0130,\r
+0x864,0x0f7f0130,\r
+0x868,0x0f7f0130,\r
+0x86c,0x0f7f0130,\r
+0x870,0x03000700,\r
+0x874,0x03000300,\r
+0x878,0x00020002,\r
+0x87c,0x004f0201,\r
+0x880,0xa8300ac1,\r
+0x884,0x00000058,\r
+0x888,0x00000008,\r
+0x88c,0x00000004,\r
+0x890,0x00000000,\r
+0x894,0xfffffffe,\r
+0x898,0x40302010,\r
+0x89c,0x00706050,\r
+0x8b0,0x00000000,\r
+0x8e0,0x00000000,\r
+0x8e4,0x00000000,\r
+0xe00,0x30333333,\r
+0xe04,0x2a2d2e2f,\r
+0xe08,0x00003232,\r
+0xe10,0x30333333,\r
+0xe14,0x2a2d2e2f,\r
+0xe18,0x30333333,\r
+0xe1c,0x2a2d2e2f,\r
+0xe30,0x01007c00,\r
+0xe34,0x01004800,\r
+0xe38,0x1000dc1f,\r
+0xe3c,0x10008c1f,\r
+0xe40,0x021400a0,\r
+0xe44,0x281600a0,\r
+0xe48,0xf8000001,\r
+0xe4c,0x00002910,\r
+0xe50,0x01007c00,\r
+0xe54,0x01004800,\r
+0xe58,0x1000dc1f,\r
+0xe5c,0x10008c1f,\r
+0xe60,0x021400a0,\r
+0xe64,0x281600a0,\r
+0xe6c,0x00002910,\r
+0xe70,0x31ed92fb,\r
+0xe74,0x361536fb,\r
+0xe78,0x361536fb,\r
+0xe7c,0x361536fb,\r
+0xe80,0x361536fb,\r
+0xe84,0x000d92fb,\r
+0xe88,0x000d92fb,\r
+0xe8c,0x31ed92fb,\r
+0xed0,0x31ed92fb,\r
+0xed4,0x31ed92fb,\r
+0xed8,0x000d92fb,\r
+0xedc,0x000d92fb,\r
+0xee0,0x000d92fb,\r
+0xee4,0x015e5448,\r
+0xee8,0x21555448,\r
+0x900,0x00000000,\r
+0x904,0x00000023,\r
+0x908,0x00000000,\r
+0x90c,0x01121313,\r
+0xa00,0x00d047c8,\r
+0xa04,0x80ff0008,\r
+0xa08,0x88cd8300,\r
+0xa0c,0x2e62120f,\r
+0xa10,0x9500bb78,\r
+0xa14,0x11144028,\r
+0xa18,0x00881117,\r
+0xa1c,0x89140f00,\r
+0xa20,0x1a1b0000,\r
+0xa24,0x090e1317,\r
+0xa28,0x00000204,\r
+0xa2c,0x10d30000,\r
+0xc00,0x40071d40,\r
+0xc04,0x00a05633,\r
+0xc08,0x000000e4,\r
+0xc0c,0x6c6c6c6c,\r
+0xc10,0x08800000,\r
+0xc14,0x40000100,\r
+0xc18,0x08000000,\r
+0xc1c,0x40000100,\r
+0xc20,0x08000000,\r
+0xc24,0x40000100,\r
+0xc28,0x08000000,\r
+0xc2c,0x40000100,\r
+0xc30,0x6de9ac44,\r
+0xc34,0x469652cf,\r
+0xc38,0x49795994,\r
+0xc3c,0x0a979764,\r
+0xc40,0x1f7c403f,\r
+0xc44,0x000100b7,\r
+0xc48,0xec020000,\r
+0xc4c,0x007f037f,\r
+0xc50,0x69543420,\r
+0xc54,0x433c0094,\r
+0xc58,0x69543420,\r
+0xc5c,0x433c0094,\r
+0xc60,0x69543420,\r
+0xc64,0x433c0094,\r
+0xc68,0x69543420,\r
+0xc6c,0x433c0094,\r
+0xc70,0x2c7f000d,\r
+0xc74,0x0186175b,\r
+0xc78,0x0000001f,\r
+0xc7c,0x00b91612,\r
+0xc80,0x40000100,\r
+0xc84,0x20f60000,\r
+0xc88,0x20000080,\r
+0xc8c,0x20200000,\r
+0xc90,0x40000100,\r
+0xc94,0x00000000,\r
+0xc98,0x40000100,\r
+0xc9c,0x00000000,\r
+0xca0,0x00492492,\r
+0xca4,0x00000000,\r
+0xca8,0x00000000,\r
+0xcac,0x00000000,\r
+0xcb0,0x00000000,\r
+0xcb4,0x00000000,\r
+0xcb8,0x00000000,\r
+0xcbc,0x28000000,\r
+0xcc0,0x00000000,\r
+0xcc4,0x00000000,\r
+0xcc8,0x00000000,\r
+0xccc,0x00000000,\r
+0xcd0,0x00000000,\r
+0xcd4,0x00000000,\r
+0xcd8,0x64b22427,\r
+0xcdc,0x00766932,\r
+0xce0,0x00222222,\r
+0xce4,0x00000000,\r
+0xce8,0x37644302,\r
+0xcec,0x2f97d40c,\r
+0xd00,0x00000750,\r
+0xd04,0x00000403,\r
+0xd08,0x0000907f,\r
+0xd0c,0x00000001,\r
+0xd10,0xa0633333,\r
+0xd14,0x33333c63,\r
+0xd18,0x6a8f5b6b,\r
+0xd1c,0x00000000,\r
+0xd20,0x00000000,\r
+0xd24,0x00000000,\r
+0xd28,0x00000000,\r
+0xd2c,0xcc979975,\r
+0xd30,0x00000000,\r
+0xd34,0x00000000,\r
+0xd38,0x00000000,\r
+0xd3c,0x00027293,\r
+0xd40,0x00000000,\r
+0xd44,0x00000000,\r
+0xd48,0x00000000,\r
+0xd50,0x6437140a,\r
+0xd54,0x024dbd02,\r
+0xd58,0x00000000,\r
+0xd5c,0x30032064,\r
+0xd60,0x4653de68,\r
+0xd64,0x00518a3c,\r
+0xd68,0x00002101,\r
+0xf14,0x00000003,\r
+0xf4c,0x00000000,\r
+0xf00,0x00000300,\r
+};\r
+\r
+u32 Rtl8192SEPHY_REG_1T2RArray[PHY_REG_1T2RArrayLength] = {\r
+0x0, };\r
+\r
+u32 Rtl8192SEPHY_ChangeTo_1T1RArray[PHY_ChangeTo_1T1RArrayLength] = {\r
+0x844,0xffffffff,0x00010000,\r
+0x804,0x0000000f,0x00000001,\r
+0x824,0x00f0000f,0x00300004,\r
+0x82c,0x00f0000f,0x00100002,\r
+0x870,0x04000000,0x00000001,\r
+0x864,0x00000400,0x00000000,\r
+0x878,0x000f000f,0x00000002,\r
+0xe74,0x0f000000,0x00000002,\r
+0xe78,0x0f000000,0x00000002,\r
+0xe7c,0x0f000000,0x00000002,\r
+0xe80,0x0f000000,0x00000002,\r
+0x90c,0x000000ff,0x00000011,\r
+0xc04,0x000000ff,0x00000011,\r
+0xd04,0x0000000f,0x00000001,\r
+0x1f4,0xffff0000,0x00007777,\r
+0x234,0xf8000000,0x0000000a,\r
+};\r
+\r
+u32 Rtl8192SEPHY_ChangeTo_1T2RArray[PHY_ChangeTo_1T2RArrayLength] = {\r
+0x804,0x0000000f,0x00000003,\r
+0x824,0x00f0000f,0x00300004,\r
+0x82c,0x00f0000f,0x00300002,\r
+0x870,0x04000000,0x00000001,\r
+0x864,0x00000400,0x00000000,\r
+0x878,0x000f000f,0x00000002,\r
+0xe74,0x0f000000,0x00000002,\r
+0xe78,0x0f000000,0x00000002,\r
+0xe7c,0x0f000000,0x00000002,\r
+0xe80,0x0f000000,0x00000002,\r
+0x90c,0x000000ff,0x00000011,\r
+0xc04,0x000000ff,0x00000033,\r
+0xd04,0x0000000f,0x00000003,\r
+0x1f4,0xffff0000,0x00007777,\r
+0x234,0xf8000000,0x0000000a,\r
+};\r
+\r
+u32 Rtl8192SEPHY_ChangeTo_2T2RArray[PHY_ChangeTo_2T2RArrayLength] = {\r
+0x804,0x0000000f,0x00000003,\r
+0x824,0x00f0000f,0x00300004,\r
+0x82c,0x00f0000f,0x00300004,\r
+0x870,0x04000000,0x00000001,\r
+0x864,0x00000400,0x00000001,\r
+0x878,0x000f000f,0x00020002,\r
+0xe74,0x0f000000,0x00000006,\r
+0xe78,0x0f000000,0x00000006,\r
+0xe7c,0x0f000000,0x00000006,\r
+0xe80,0x0f000000,0x00000006,\r
+0x90c,0x000000ff,0x00000033,\r
+0xc04,0x000000ff,0x00000033,\r
+0xd04,0x0000000f,0x00000003,\r
+0x1f4,0xffff0000,0x0000ffff,\r
+0x234,0xf8000000,0x00000013,\r
+};\r
+\r
+u32 Rtl8192SEPHY_REG_Array_PG[PHY_REG_Array_PGLength] = {\r
+0xe00,0xffffffff,0x06090909,\r
+0xe04,0xffffffff,0x00030406,\r
+0xe08,0x0000ff00,0x00000000,\r
+0xe10,0xffffffff,0x0a0c0d0e,\r
+0xe14,0xffffffff,0x03040508,\r
+0xe18,0xffffffff,0x0a0c0d0e,\r
+0xe1c,0xffffffff,0x03040508,\r
+0xe00,0xffffffff,0x04040404,\r
+0xe04,0xffffffff,0x00020204,\r
+0xe08,0x0000ff00,0x00000000,\r
+0xe10,0xffffffff,0x02040404,\r
+0xe14,0xffffffff,0x00000002,\r
+0xe18,0xffffffff,0x02040404,\r
+0xe1c,0xffffffff,0x00000002,\r
+0xe00,0xffffffff,0x04040404,\r
+0xe04,0xffffffff,0x00020204,\r
+0xe08,0x0000ff00,0x00000000,\r
+0xe10,0xffffffff,0x02040404,\r
+0xe14,0xffffffff,0x00000002,\r
+0xe18,0xffffffff,0x02040404,\r
+0xe1c,0xffffffff,0x00000002,\r
+0xe00,0xffffffff,0x02020202,\r
+0xe04,0xffffffff,0x00020202,\r
+0xe08,0x0000ff00,0x00000000,\r
+0xe10,0xffffffff,0x02020202,\r
+0xe14,0xffffffff,0x00000002,\r
+0xe18,0xffffffff,0x02020202,\r
+0xe1c,0xffffffff,0x00000002,\r
+};\r
+\r
+u32 Rtl8192SERadioA_1T_Array[RadioA_1T_ArrayLength] = {\r
+0x000,0x00030159,\r
+0x001,0x00030250,\r
+0x002,0x00010000,\r
+0x010,0x0008000f,\r
+0x011,0x000231fc,\r
+0x010,0x000c000f,\r
+0x011,0x0003f9f8,\r
+0x010,0x0002000f,\r
+0x011,0x00020101,\r
+0x014,0x0001093e,\r
+0x014,0x0009093e,\r
+0x015,0x0000f8f4,\r
+0x017,0x000f6500,\r
+0x01a,0x00013056,\r
+0x01b,0x00060000,\r
+0x01c,0x00000300,\r
+0x01e,0x00031059,\r
+0x021,0x00054000,\r
+0x022,0x0000083c,\r
+0x023,0x00001558,\r
+0x024,0x00000060,\r
+0x025,0x00022583,\r
+0x026,0x0000f200,\r
+0x027,0x000eacf1,\r
+0x028,0x0009bd54,\r
+0x029,0x00004582,\r
+0x02a,0x00000001,\r
+0x02b,0x00021334,\r
+0x02a,0x00000000,\r
+0x02b,0x0000000a,\r
+0x02a,0x00000001,\r
+0x02b,0x00000808,\r
+0x02b,0x00053333,\r
+0x02c,0x0000000c,\r
+0x02a,0x00000002,\r
+0x02b,0x00000808,\r
+0x02b,0x0005b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000003,\r
+0x02b,0x00000808,\r
+0x02b,0x00063333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000004,\r
+0x02b,0x00000808,\r
+0x02b,0x0006b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000005,\r
+0x02b,0x00000709,\r
+0x02b,0x00053333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000006,\r
+0x02b,0x00000709,\r
+0x02b,0x0005b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000007,\r
+0x02b,0x00000709,\r
+0x02b,0x00063333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000008,\r
+0x02b,0x00000709,\r
+0x02b,0x0006b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000009,\r
+0x02b,0x0000060a,\r
+0x02b,0x00053333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000a,\r
+0x02b,0x0000060a,\r
+0x02b,0x0005b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000b,\r
+0x02b,0x0000060a,\r
+0x02b,0x00063333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000c,\r
+0x02b,0x0000060a,\r
+0x02b,0x0006b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000d,\r
+0x02b,0x0000050b,\r
+0x02b,0x00053333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000e,\r
+0x02b,0x0000050b,\r
+0x02b,0x00066623,\r
+0x02c,0x0000001a,\r
+0x02a,0x000e4000,\r
+0x030,0x00020000,\r
+0x031,0x000b9631,\r
+0x032,0x0000130d,\r
+0x033,0x00000187,\r
+0x013,0x00019e6c,\r
+0x013,0x00015e94,\r
+0x000,0x00010159,\r
+0x018,0x0000f401,\r
+0x0fe,0x00000000,\r
+0x01e,0x0003105b,\r
+0x0fe,0x00000000,\r
+0x000,0x00030159,\r
+0x010,0x0004000f,\r
+0x011,0x000203f9,\r
+};\r
+\r
+u32 Rtl8192SERadioB_Array[RadioB_ArrayLength] = {\r
+0x000,0x00030159,\r
+0x001,0x00001041,\r
+0x002,0x00011000,\r
+0x005,0x00080fc0,\r
+0x007,0x000fc803,\r
+0x013,0x00017cb0,\r
+0x013,0x00011cc0,\r
+0x013,0x0000dc60,\r
+0x013,0x00008c60,\r
+0x013,0x00004450,\r
+0x013,0x00000020,\r
+};\r
+\r
+u32 Rtl8192SERadioA_to1T_Array[RadioA_to1T_ArrayLength] = {\r
+0x000,0x00030159,\r
+0x001,0x00030250,\r
+0x002,0x00010000,\r
+0x010,0x0008000f,\r
+0x011,0x000231fc,\r
+0x010,0x000c000f,\r
+0x011,0x0003f9f8,\r
+0x014,0x0001093e,\r
+0x014,0x0009093e,\r
+0x015,0x000198f4,\r
+0x017,0x000f6500,\r
+0x01a,0x00013056,\r
+0x01b,0x00060000,\r
+0x01c,0x00000300,\r
+0x01e,0x00031059,\r
+0x021,0x00054000,\r
+0x022,0x0000083c,\r
+0x023,0x00001558,\r
+0x024,0x00000060,\r
+0x025,0x00022583,\r
+0x026,0x0000f200,\r
+0x027,0x000eacf1,\r
+0x028,0x000dbd54,\r
+0x029,0x00004582,\r
+0x02a,0x00000001,\r
+0x02b,0x00021334,\r
+0x02a,0x00000000,\r
+0x02b,0x0000000a,\r
+0x02a,0x00000001,\r
+0x02b,0x00000808,\r
+0x02b,0x00053333,\r
+0x02c,0x0000000c,\r
+0x02a,0x00000002,\r
+0x02b,0x00000808,\r
+0x02b,0x0005b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000003,\r
+0x02b,0x00000808,\r
+0x02b,0x00063333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000004,\r
+0x02b,0x00000808,\r
+0x02b,0x0006b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000005,\r
+0x02b,0x00000709,\r
+0x02b,0x00053333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000006,\r
+0x02b,0x00000709,\r
+0x02b,0x0005b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000007,\r
+0x02b,0x00000709,\r
+0x02b,0x00063333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000008,\r
+0x02b,0x00000709,\r
+0x02b,0x0006b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000009,\r
+0x02b,0x0000060a,\r
+0x02b,0x00053333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000a,\r
+0x02b,0x0000060a,\r
+0x02b,0x0005b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000b,\r
+0x02b,0x0000060a,\r
+0x02b,0x00063333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000c,\r
+0x02b,0x0000060a,\r
+0x02b,0x0006b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000d,\r
+0x02b,0x0000050b,\r
+0x02b,0x00053333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000e,\r
+0x02b,0x0000050b,\r
+0x02b,0x00066623,\r
+0x02c,0x0000001a,\r
+0x02a,0x000e4000,\r
+0x030,0x00020000,\r
+0x031,0x000b9631,\r
+0x033,0x00000187,\r
+0x013,0x00019e6c,\r
+0x013,0x00015e94,\r
+0x000,0x00010159,\r
+0x018,0x0000f401,\r
+0x0fe,0x00000000,\r
+0x01e,0x0003105b,\r
+0x0fe,0x00000000,\r
+0x000,0x00030159,\r
+0x010,0x0004000f,\r
+0x011,0x000203f9,\r
+};\r
+\r
+u32 Rtl8192SERadioA_to2T_Array[RadioA_to2T_ArrayLength] = {\r
+0x000,0x00030159,\r
+0x001,0x00030250,\r
+0x002,0x00010000,\r
+0x010,0x0008000f,\r
+0x011,0x000231fc,\r
+0x010,0x000c000f,\r
+0x011,0x0003f9f8,\r
+0x014,0x0001093e,\r
+0x014,0x0009093e,\r
+0x015,0x000198f4,\r
+0x017,0x000f6500,\r
+0x01a,0x00013056,\r
+0x01b,0x00060000,\r
+0x01c,0x00000300,\r
+0x01e,0x00031059,\r
+0x021,0x00054000,\r
+0x022,0x0000083c,\r
+0x023,0x00001558,\r
+0x024,0x00000060,\r
+0x025,0x00022583,\r
+0x026,0x0000f200,\r
+0x027,0x000eacf1,\r
+0x028,0x000dbd54,\r
+0x029,0x00004582,\r
+0x02a,0x00000001,\r
+0x02b,0x00021334,\r
+0x02a,0x00000000,\r
+0x02b,0x0000000a,\r
+0x02a,0x00000001,\r
+0x02b,0x00000808,\r
+0x02b,0x00053333,\r
+0x02c,0x0000000c,\r
+0x02a,0x00000002,\r
+0x02b,0x00000808,\r
+0x02b,0x0005b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000003,\r
+0x02b,0x00000808,\r
+0x02b,0x00063333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000004,\r
+0x02b,0x00000808,\r
+0x02b,0x0006b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000005,\r
+0x02b,0x00000709,\r
+0x02b,0x00053333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000006,\r
+0x02b,0x00000709,\r
+0x02b,0x0005b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000007,\r
+0x02b,0x00000709,\r
+0x02b,0x00063333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000008,\r
+0x02b,0x00000709,\r
+0x02b,0x0006b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000009,\r
+0x02b,0x0000060a,\r
+0x02b,0x00053333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000a,\r
+0x02b,0x0000060a,\r
+0x02b,0x0005b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000b,\r
+0x02b,0x0000060a,\r
+0x02b,0x00063333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000c,\r
+0x02b,0x0000060a,\r
+0x02b,0x0006b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000d,\r
+0x02b,0x0000050b,\r
+0x02b,0x00053333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000e,\r
+0x02b,0x0000050b,\r
+0x02b,0x00066623,\r
+0x02c,0x0000001a,\r
+0x02a,0x000e4000,\r
+0x030,0x00020000,\r
+0x031,0x000b9631,\r
+0x033,0x00000187,\r
+0x013,0x00019e6c,\r
+0x013,0x00015e94,\r
+0x000,0x00010159,\r
+0x018,0x0000f401,\r
+0x0fe,0x00000000,\r
+0x01e,0x0003105b,\r
+0x0fe,0x00000000,\r
+0x000,0x00030159,\r
+0x010,0x0004000f,\r
+0x011,0x000203f9,\r
+};\r
+\r
+u32 Rtl8192SERadioB_GM_Array[RadioB_GM_ArrayLength] = {\r
+0x000,0x00030159,\r
+0x001,0x00001041,\r
+0x002,0x00011000,\r
+0x005,0x00080fc0,\r
+0x007,0x000fc803,\r
+};\r
+\r
+u32 Rtl8192SEMAC_2T_Array[MAC_2T_ArrayLength] = {\r
+0x020,0x00000035,\r
+0x048,0x0000000e,\r
+0x049,0x000000f0,\r
+0x04a,0x00000077,\r
+0x04b,0x00000083,\r
+0x0b5,0x00000021,\r
+0x0dc,0x000000ff,\r
+0x0dd,0x000000ff,\r
+0x0de,0x000000ff,\r
+0x0df,0x000000ff,\r
+0x116,0x00000000,\r
+0x117,0x00000000,\r
+0x118,0x00000000,\r
+0x119,0x00000000,\r
+0x11a,0x00000000,\r
+0x11b,0x00000000,\r
+0x11c,0x00000000,\r
+0x11d,0x00000000,\r
+0x160,0x0000000b,\r
+0x161,0x0000000b,\r
+0x162,0x0000000b,\r
+0x163,0x0000000b,\r
+0x164,0x0000000b,\r
+0x165,0x0000000b,\r
+0x166,0x0000000b,\r
+0x167,0x0000000b,\r
+0x168,0x0000000b,\r
+0x169,0x0000000b,\r
+0x16a,0x0000000b,\r
+0x16b,0x0000000b,\r
+0x16c,0x0000000b,\r
+0x16d,0x0000000b,\r
+0x16e,0x0000000b,\r
+0x16f,0x0000000b,\r
+0x170,0x0000000b,\r
+0x171,0x0000000b,\r
+0x172,0x0000000b,\r
+0x173,0x0000000b,\r
+0x174,0x0000000b,\r
+0x175,0x0000000b,\r
+0x176,0x0000000b,\r
+0x177,0x0000000b,\r
+0x178,0x0000000b,\r
+0x179,0x0000000b,\r
+0x17a,0x0000000b,\r
+0x17b,0x0000000b,\r
+0x17c,0x0000000b,\r
+0x17d,0x0000000b,\r
+0x17e,0x0000000b,\r
+0x17f,0x0000000b,\r
+0x236,0x0000000c,\r
+0x503,0x00000022,\r
+0x560,0x00000000,\r
+};\r
+\r
+u32 Rtl8192SEMACPHY_Array_PG[MACPHY_Array_PGLength] = {\r
+0x0, };\r
+\r
+u32 Rtl8192SEAGCTAB_Array[AGCTAB_ArrayLength] = {\r
+0xc78,0x7f000001,\r
+0xc78,0x7f010001,\r
+0xc78,0x7e020001,\r
+0xc78,0x7d030001,\r
+0xc78,0x7c040001,\r
+0xc78,0x7b050001,\r
+0xc78,0x7a060001,\r
+0xc78,0x79070001,\r
+0xc78,0x78080001,\r
+0xc78,0x77090001,\r
+0xc78,0x760a0001,\r
+0xc78,0x750b0001,\r
+0xc78,0x740c0001,\r
+0xc78,0x730d0001,\r
+0xc78,0x720e0001,\r
+0xc78,0x710f0001,\r
+0xc78,0x70100001,\r
+0xc78,0x6f110001,\r
+0xc78,0x6f120001,\r
+0xc78,0x6e130001,\r
+0xc78,0x6d140001,\r
+0xc78,0x6d150001,\r
+0xc78,0x6c160001,\r
+0xc78,0x6b170001,\r
+0xc78,0x6a180001,\r
+0xc78,0x6a190001,\r
+0xc78,0x691a0001,\r
+0xc78,0x681b0001,\r
+0xc78,0x671c0001,\r
+0xc78,0x661d0001,\r
+0xc78,0x651e0001,\r
+0xc78,0x641f0001,\r
+0xc78,0x63200001,\r
+0xc78,0x4c210001,\r
+0xc78,0x4b220001,\r
+0xc78,0x4a230001,\r
+0xc78,0x49240001,\r
+0xc78,0x48250001,\r
+0xc78,0x47260001,\r
+0xc78,0x46270001,\r
+0xc78,0x45280001,\r
+0xc78,0x44290001,\r
+0xc78,0x2c2a0001,\r
+0xc78,0x2b2b0001,\r
+0xc78,0x2a2c0001,\r
+0xc78,0x292d0001,\r
+0xc78,0x282e0001,\r
+0xc78,0x272f0001,\r
+0xc78,0x26300001,\r
+0xc78,0x25310001,\r
+0xc78,0x24320001,\r
+0xc78,0x23330001,\r
+0xc78,0x22340001,\r
+0xc78,0x09350001,\r
+0xc78,0x08360001,\r
+0xc78,0x07370001,\r
+0xc78,0x06380001,\r
+0xc78,0x05390001,\r
+0xc78,0x043a0001,\r
+0xc78,0x033b0001,\r
+0xc78,0x023c0001,\r
+0xc78,0x013d0001,\r
+0xc78,0x003e0001,\r
+0xc78,0x003f0001,\r
+0xc78,0x7f400001,\r
+0xc78,0x7f410001,\r
+0xc78,0x7e420001,\r
+0xc78,0x7d430001,\r
+0xc78,0x7c440001,\r
+0xc78,0x7b450001,\r
+0xc78,0x7a460001,\r
+0xc78,0x79470001,\r
+0xc78,0x78480001,\r
+0xc78,0x77490001,\r
+0xc78,0x764a0001,\r
+0xc78,0x754b0001,\r
+0xc78,0x744c0001,\r
+0xc78,0x734d0001,\r
+0xc78,0x724e0001,\r
+0xc78,0x714f0001,\r
+0xc78,0x70500001,\r
+0xc78,0x6f510001,\r
+0xc78,0x6f520001,\r
+0xc78,0x6e530001,\r
+0xc78,0x6d540001,\r
+0xc78,0x6d550001,\r
+0xc78,0x6c560001,\r
+0xc78,0x6b570001,\r
+0xc78,0x6a580001,\r
+0xc78,0x6a590001,\r
+0xc78,0x695a0001,\r
+0xc78,0x685b0001,\r
+0xc78,0x675c0001,\r
+0xc78,0x665d0001,\r
+0xc78,0x655e0001,\r
+0xc78,0x645f0001,\r
+0xc78,0x63600001,\r
+0xc78,0x4c610001,\r
+0xc78,0x4b620001,\r
+0xc78,0x4a630001,\r
+0xc78,0x49640001,\r
+0xc78,0x48650001,\r
+0xc78,0x47660001,\r
+0xc78,0x46670001,\r
+0xc78,0x45680001,\r
+0xc78,0x44690001,\r
+0xc78,0x2c6a0001,\r
+0xc78,0x2b6b0001,\r
+0xc78,0x2a6c0001,\r
+0xc78,0x296d0001,\r
+0xc78,0x286e0001,\r
+0xc78,0x276f0001,\r
+0xc78,0x26700001,\r
+0xc78,0x25710001,\r
+0xc78,0x24720001,\r
+0xc78,0x23730001,\r
+0xc78,0x22740001,\r
+0xc78,0x09750001,\r
+0xc78,0x08760001,\r
+0xc78,0x07770001,\r
+0xc78,0x06780001,\r
+0xc78,0x05790001,\r
+0xc78,0x047a0001,\r
+0xc78,0x037b0001,\r
+0xc78,0x027c0001,\r
+0xc78,0x017d0001,\r
+0xc78,0x007e0001,\r
+0xc78,0x007f0001,\r
+0xc78,0x3000001e,\r
+0xc78,0x3001001e,\r
+0xc78,0x3002001e,\r
+0xc78,0x3003001e,\r
+0xc78,0x3004001e,\r
+0xc78,0x3405001e,\r
+0xc78,0x3806001e,\r
+0xc78,0x3e07001e,\r
+0xc78,0x3e08001e,\r
+0xc78,0x4409001e,\r
+0xc78,0x460a001e,\r
+0xc78,0x480b001e,\r
+0xc78,0x480c001e,\r
+0xc78,0x4e0d001e,\r
+0xc78,0x560e001e,\r
+0xc78,0x5a0f001e,\r
+0xc78,0x5e10001e,\r
+0xc78,0x6211001e,\r
+0xc78,0x6c12001e,\r
+0xc78,0x7213001e,\r
+0xc78,0x7214001e,\r
+0xc78,0x7215001e,\r
+0xc78,0x7216001e,\r
+0xc78,0x7217001e,\r
+0xc78,0x7218001e,\r
+0xc78,0x7219001e,\r
+0xc78,0x721a001e,\r
+0xc78,0x721b001e,\r
+0xc78,0x721c001e,\r
+0xc78,0x721d001e,\r
+0xc78,0x721e001e,\r
+0xc78,0x721f001e,\r
+};\r
+\r
+#endif\r
diff --git a/ubuntu/rtl8192se/rtl8192s/r8192S_hwimg.h b/ubuntu/rtl8192se/rtl8192s/r8192S_hwimg.h
new file mode 100644 (file)
index 0000000..fef006c
--- /dev/null
@@ -0,0 +1,60 @@
+/******************************************************************************\r
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ * The full GNU General Public License is included in this distribution in the\r
+ * file called LICENSE.\r
+ *\r
+ * Contact Information:\r
+ * wlanfae <wlanfae@realtek.com>\r
+******************************************************************************/\r
+#ifndef __INC_HAL8192SE_FW_IMG_H\r
+#define __INC_HAL8192SE_FW_IMG_H\r
+\r
+/*Created on  2009/11/17, 16:15*/\r
+\r
+#include <linux/types.h>\r
+#define ImgArrayLength 88592\r
+extern u8 Rtl8192SEFwImgArray[ImgArrayLength];\r
+#define MainArrayLength 1\r
+extern u8 Rtl8192SEFwMainArray[MainArrayLength];\r
+#define DataArrayLength 1\r
+extern u8 Rtl8192SEFwDataArray[DataArrayLength];\r
+#define PHY_REG_2T2RArrayLength 372\r
+extern u32 Rtl8192SEPHY_REG_2T2RArray[PHY_REG_2T2RArrayLength];\r
+#define PHY_REG_1T2RArrayLength 1\r
+extern u32 Rtl8192SEPHY_REG_1T2RArray[PHY_REG_1T2RArrayLength];\r
+#define PHY_ChangeTo_1T1RArrayLength 48\r
+extern u32 Rtl8192SEPHY_ChangeTo_1T1RArray[PHY_ChangeTo_1T1RArrayLength];\r
+#define PHY_ChangeTo_1T2RArrayLength 45\r
+extern u32 Rtl8192SEPHY_ChangeTo_1T2RArray[PHY_ChangeTo_1T2RArrayLength];\r
+#define PHY_ChangeTo_2T2RArrayLength 45\r
+extern u32 Rtl8192SEPHY_ChangeTo_2T2RArray[PHY_ChangeTo_2T2RArrayLength];\r
+#define PHY_REG_Array_PGLength 84\r
+extern u32 Rtl8192SEPHY_REG_Array_PG[PHY_REG_Array_PGLength];\r
+#define RadioA_1T_ArrayLength 202\r
+extern u32 Rtl8192SERadioA_1T_Array[RadioA_1T_ArrayLength];\r
+#define RadioB_ArrayLength 22\r
+extern u32 Rtl8192SERadioB_Array[RadioB_ArrayLength];\r
+#define RadioA_to1T_ArrayLength 196\r
+extern u32 Rtl8192SERadioA_to1T_Array[RadioA_to1T_ArrayLength];\r
+#define RadioA_to2T_ArrayLength 196\r
+extern u32 Rtl8192SERadioA_to2T_Array[RadioA_to2T_ArrayLength];\r
+#define RadioB_GM_ArrayLength 10\r
+extern u32 Rtl8192SERadioB_GM_Array[RadioB_GM_ArrayLength];\r
+#define MAC_2T_ArrayLength 106\r
+extern u32 Rtl8192SEMAC_2T_Array[MAC_2T_ArrayLength];\r
+#define MACPHY_Array_PGLength 1\r
+extern u32 Rtl8192SEMACPHY_Array_PG[MACPHY_Array_PGLength];\r
+#define AGCTAB_ArrayLength 320\r
+extern u32 Rtl8192SEAGCTAB_Array[AGCTAB_ArrayLength];\r
+\r
+#endif 
diff --git a/ubuntu/rtl8192se/rtl8192s/r8192S_hwimg492.c b/ubuntu/rtl8192se/rtl8192s/r8192S_hwimg492.c
new file mode 100644 (file)
index 0000000..e41d3b9
--- /dev/null
@@ -0,0 +1,5610 @@
+/******************************************************************************\r
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ * The full GNU General Public License is included in this distribution in the\r
+ * file called LICENSE.\r
+ *\r
+ * Contact Information:\r
+ * wlanfae <wlanfae@realtek.com>\r
+******************************************************************************/\r
+/*Created on  2009/ 7/23,  5: 4*/\r
+\r
+#ifdef RTL8192SE\r
+#include "r8192S_hwimg.h"\r
+\r
+u8 Rtl8192SEFwImgArray[ImgArrayLength] = {\r
+0x92,0x81,0x31,0x70,0x30,0x00,0x00,0x00,0x08,0x84,0x00,0x00,0x48,0xa4,0x00,0x00,\r
+0x30,0x00,0x00,0x00,0xc0,0xa2,0x00,0x00,0x31,0x00,0x02,0x00,0x07,0x20,0x16,0x06,\r
+0x92,0x81,0x01,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x7f,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x1f,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x25,0xb0,0x1a,0x3c,0x80,0x03,0x5a,0x37,0x00,0x80,0x1b,0x3c,0x80,0x00,0x7b,0x37,\r
+0x00,0x00,0x5b,0xaf,0x25,0xb0,0x1a,0x3c,0x18,0x03,0x5a,0x37,0x00,0x80,0x1b,0x3c,\r
+0x80,0x00,0x7b,0x37,0x00,0x00,0x5b,0xaf,0x00,0x80,0x1a,0x3c,0x44,0x7c,0x5a,0x27,\r
+0x08,0x00,0x40,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x04,0x00,0xa1,0xaf,0x08,0x00,0xa2,0xaf,0x0c,0x00,0xa3,0xaf,0x10,0x00,0xa4,0xaf,\r
+0x14,0x00,0xa5,0xaf,0x18,0x00,0xa6,0xaf,0x1c,0x00,0xa7,0xaf,0x20,0x00,0xa8,0xaf,\r
+0x24,0x00,0xa9,0xaf,0x28,0x00,0xaa,0xaf,0x2c,0x00,0xab,0xaf,0x30,0x00,0xac,0xaf,\r
+0x34,0x00,0xad,0xaf,0x38,0x00,0xae,0xaf,0x3c,0x00,0xaf,0xaf,0x12,0x40,0x00,0x00,\r
+0x10,0x48,0x00,0x00,0x00,0x70,0x0a,0x40,0x40,0x00,0xb0,0xaf,0x44,0x00,0xb1,0xaf,\r
+0x48,0x00,0xb2,0xaf,0x4c,0x00,0xb3,0xaf,0x50,0x00,0xb4,0xaf,0x54,0x00,0xb5,0xaf,\r
+0x58,0x00,0xb6,0xaf,0x5c,0x00,0xb7,0xaf,0x60,0x00,0xb8,0xaf,0x64,0x00,0xb9,0xaf,\r
+0x68,0x00,0xbc,0xaf,0x6c,0x00,0xbd,0xaf,0x70,0x00,0xbe,0xaf,0x74,0x00,0xbf,0xaf,\r
+0x78,0x00,0xa8,0xaf,0x7c,0x00,0xa9,0xaf,0x80,0x00,0xaa,0xaf,0xac,0x1e,0x00,0x08,\r
+0x21,0x20,0xa0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x25,0xb0,0x06,0x3c,0x00,0x80,0x02,0x3c,0xe8,0xff,0xbd,0x27,0x18,0x03,0xc3,0x34,\r
+0x00,0x03,0x42,0x24,0x14,0x00,0xbf,0xaf,0x10,0x00,0xb0,0xaf,0x00,0x00,0x62,0xac,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x42,0xb0,0x03,0x3c,\r
+0x03,0x00,0x63,0x34,0x00,0x00,0x62,0x90,0x02,0x80,0x0a,0x3c,0x02,0x80,0x10,0x3c,\r
+0xff,0x00,0x42,0x30,0x00,0x46,0x02,0x00,0x10,0x00,0x42,0x30,0x13,0x00,0x40,0x10,\r
+0x03,0x46,0x08,0x00,0x24,0x7e,0x42,0x8d,0x68,0x15,0x05,0x26,0xe0,0x63,0xa4,0x94,\r
+0x01,0x00,0x47,0x24,0x10,0x00,0x02,0x24,0xb0,0x03,0xc9,0x34,0x00,0x00,0x62,0xa0,\r
+0x07,0x00,0x80,0x10,0x1c,0x03,0xc6,0x34,0xe4,0x63,0xa2,0x94,0xe0,0x63,0xa0,0xa4,\r
+0xe4,0x63,0xa0,0xa4,0x00,0x00,0x04,0x24,0x00,0x00,0xc2,0xac,0x00,0x00,0x20,0xad,\r
+0x01,0x00,0x82,0x24,0x24,0x7e,0x47,0xad,0xe0,0x63,0xa2,0xa4,0x12,0x00,0x00,0x05,\r
+0x42,0xb0,0x02,0x3c,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0x68,0x15,0x04,0x26,0x0c,0x4b,0x83,0x94,0x08,0x4b,0x85,0x94,\r
+0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x80,0x00,0x63,0x30,0x41,0xb0,0x02,0x3c,\r
+0x25,0x18,0x65,0x00,0x08,0x00,0x42,0x34,0x18,0x00,0xbd,0x27,0x00,0x00,0x43,0xa4,\r
+0x08,0x00,0xe0,0x03,0x08,0x4b,0x83,0xa4,0x80,0xff,0x03,0x24,0x03,0x00,0x42,0x34,\r
+0x00,0x00,0x43,0xa0,0x64,0x10,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x68,0x15,0x04,0x26,\r
+0x0c,0x4b,0x83,0x94,0x08,0x4b,0x85,0x94,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x80,0x00,0x63,0x30,0x41,0xb0,0x02,0x3c,0x25,0x18,0x65,0x00,0x08,0x00,0x42,0x34,\r
+0x18,0x00,0xbd,0x27,0x00,0x00,0x43,0xa4,0x08,0x00,0xe0,0x03,0x08,0x4b,0x83,0xa4,\r
+0xff,0x00,0x84,0x30,0x0b,0x00,0x82,0x2c,0xff,0xff,0xe7,0x30,0x10,0x00,0xa8,0x93,\r
+0x19,0x00,0x40,0x10,0x21,0x18,0x00,0x00,0x02,0x80,0x03,0x3c,0x80,0x10,0x04,0x00,\r
+0x58,0x9f,0x63,0x24,0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x8c,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x43,0xb0,0x02,0x3c,0x78,0x00,0x44,0x34,\r
+0x07,0x00,0xe2,0x30,0x00,0x00,0x85,0xac,0x04,0x00,0x86,0xac,0x04,0x00,0x40,0x18,\r
+0x00,0x00,0x00,0x00,0xf8,0xff,0xe2,0x30,0x08,0x00,0x42,0x24,0xff,0xff,0x47,0x30,\r
+0x21,0x10,0xe8,0x00,0x00,0x80,0x03,0x3c,0x08,0x00,0x82,0xac,0x25,0x10,0x43,0x00,\r
+0x08,0x00,0x82,0xac,0x01,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,\r
+0x43,0xb0,0x02,0x3c,0x20,0x01,0x00,0x08,0x6c,0x00,0x44,0x34,0x43,0xb0,0x02,0x3c,\r
+0x20,0x01,0x00,0x08,0x60,0x00,0x44,0x34,0x43,0xb0,0x02,0x3c,0x20,0x01,0x00,0x08,\r
+0x54,0x00,0x44,0x34,0x43,0xb0,0x02,0x3c,0x20,0x01,0x00,0x08,0x48,0x00,0x44,0x34,\r
+0x43,0xb0,0x02,0x3c,0x20,0x01,0x00,0x08,0x3c,0x00,0x44,0x34,0x43,0xb0,0x02,0x3c,\r
+0x20,0x01,0x00,0x08,0x30,0x00,0x44,0x34,0x43,0xb0,0x02,0x3c,0x20,0x01,0x00,0x08,\r
+0x24,0x00,0x44,0x34,0x43,0xb0,0x02,0x3c,0x20,0x01,0x00,0x08,0x18,0x00,0x44,0x34,\r
+0x43,0xb0,0x02,0x3c,0x20,0x01,0x00,0x08,0x0c,0x00,0x44,0x34,0x20,0x01,0x00,0x08,\r
+0x43,0xb0,0x04,0x3c,0x01,0x00,0x02,0x24,0x25,0xb0,0x03,0x3c,0x04,0x20,0x82,0x00,\r
+0x18,0x03,0x67,0x34,0x00,0x80,0x02,0x3c,0x43,0xb0,0x03,0x3c,0x34,0x05,0x46,0x24,\r
+0x88,0x00,0x65,0x34,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0xff,0x42,0x30,\r
+0x05,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x00,0x00,0xe6,0xac,\r
+0x00,0x00,0xa2,0x94,0x00,0x00,0x00,0x00,0xff,0xff,0x42,0x30,0x24,0x10,0x44,0x00,\r
+0xf4,0xff,0x40,0x1c,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x25,0xb0,0x08,0x3c,0x00,0x80,0x02,0x3c,0xc8,0xff,0xbd,0x27,0x18,0x03,0x03,0x35,\r
+0x90,0x05,0x42,0x24,0x00,0x00,0x62,0xac,0x30,0x00,0xb6,0xaf,0x28,0x00,0xb4,0xaf,\r
+0x24,0x00,0xb3,0xaf,0x1c,0x00,0xb1,0xaf,0x34,0x00,0xbf,0xaf,0x2c,0x00,0xb5,0xaf,\r
+0x20,0x00,0xb2,0xaf,0x18,0x00,0xb0,0xaf,0x0c,0x00,0xf2,0x84,0x08,0x00,0xf5,0x8c,\r
+0xff,0x00,0xc6,0x30,0x00,0x01,0x02,0x24,0x23,0x10,0x46,0x00,0xff,0xff,0x51,0x30,\r
+0xd0,0x03,0x08,0x35,0xff,0x00,0x96,0x30,0x00,0x00,0x12,0xad,0x21,0xa0,0xa0,0x00,\r
+0x21,0x30,0xc5,0x00,0x00,0x00,0x15,0xad,0x21,0x20,0xc0,0x02,0x21,0x28,0xa0,0x02,\r
+0x21,0x38,0x20,0x02,0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x23,0x18,0x51,0x02,\r
+0xff,0xff,0x82,0x32,0x00,0x94,0x03,0x00,0x03,0x94,0x12,0x00,0xa6,0x01,0x00,0x08,\r
+0x02,0x9a,0x02,0x00,0x28,0xb0,0x03,0x3c,0xc0,0x10,0x13,0x00,0x21,0x10,0x43,0x00,\r
+0x00,0x00,0x44,0x90,0x25,0xb0,0x10,0x3c,0x20,0x10,0x02,0x3c,0xff,0x00,0x93,0x30,\r
+0x00,0x22,0x13,0x00,0xff,0xff,0x43,0x32,0x01,0x01,0x45,0x2a,0x21,0xa0,0x82,0x00,\r
+0x21,0xa8,0xb1,0x02,0xd0,0x03,0x02,0x36,0x00,0x01,0x11,0x24,0x0b,0x88,0x65,0x00,\r
+0x21,0x20,0xc0,0x02,0x00,0x00,0x53,0xac,0x4d,0x01,0x00,0x0c,0xb0,0x03,0x10,0x36,\r
+0x21,0x30,0x80,0x02,0x21,0x20,0xc0,0x02,0x21,0x28,0xa0,0x02,0x21,0x38,0x20,0x02,\r
+0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x23,0x18,0x51,0x02,0x00,0x94,0x03,0x00,\r
+0x03,0x94,0x12,0x00,0x00,0x00,0x12,0xae,0xe2,0xff,0x40,0x1e,0x00,0x00,0x00,0x00,\r
+0x34,0x00,0xbf,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,\r
+0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27,0xc8,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c,\r
+0x25,0xb0,0x04,0x3c,0x20,0x00,0xb2,0xaf,0x68,0x15,0x52,0x24,0x00,0x80,0x02,0x3c,\r
+0x18,0x03,0x83,0x34,0xc8,0x06,0x42,0x24,0x28,0x00,0xb4,0xaf,0x24,0x00,0xb3,0xaf,\r
+0x30,0x00,0xbf,0xaf,0x2c,0x00,0xb5,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,\r
+0x00,0x00,0x62,0xac,0xb0,0x03,0x93,0x34,0x21,0xa0,0x40,0x02,0xb4,0x64,0x42,0x8e,\r
+0x20,0x65,0x50,0x8e,0x21,0x20,0x00,0x00,0x00,0x00,0x62,0xae,0xb8,0x64,0x42,0xae,\r
+0x00,0x00,0x70,0xae,0x4d,0x01,0x00,0x0c,0x00,0x00,0x00,0x00,0x20,0x65,0x44,0x8e,\r
+0x24,0x65,0x43,0x8e,0x20,0x00,0x84,0x24,0x3f,0x00,0x62,0x24,0x2b,0x10,0x44,0x00,\r
+0x0a,0x18,0x82,0x00,0x20,0x65,0x43,0xae,0x20,0x65,0x85,0x8e,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x65,0xae,0x02,0x80,0x02,0x3c,0xff,0xff,0x10,0x32,0x25,0x80,0x02,0x02,\r
+0x00,0x00,0x70,0xae,0x0c,0x00,0x02,0x92,0xff,0x00,0x15,0x24,0x21,0x20,0x00,0x00,\r
+0x00,0x00,0x62,0xae,0x0c,0x00,0x11,0x92,0x20,0x10,0x02,0x3c,0x20,0x00,0x07,0x24,\r
+0x00,0x1a,0x11,0x00,0x21,0x18,0x62,0x00,0x05,0x00,0x35,0x12,0x21,0x30,0x60,0x00,\r
+0x68,0x64,0x91,0xa2,0xb4,0x64,0x83,0xae,0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,\r
+0x00,0x00,0x05,0x96,0x18,0x64,0x83,0x8e,0x2a,0xb0,0x02,0x3c,0x27,0x20,0x05,0x00,\r
+0x01,0x00,0x46,0x34,0x21,0x10,0x65,0x00,0x2b,0x18,0x64,0x00,0x02,0x00,0x60,0x10,\r
+0x00,0x00,0x00,0x00,0x18,0x64,0x82,0xae,0x04,0x00,0x04,0x8e,0x08,0x00,0x03,0x8e,\r
+0xff,0xe0,0x02,0x3c,0xff,0xff,0x42,0x34,0x1f,0x00,0x84,0x30,0x24,0x18,0x62,0x00,\r
+0x00,0x26,0x04,0x00,0xff,0xdf,0x02,0x3c,0x25,0x18,0x64,0x00,0xff,0xff,0x42,0x34,\r
+0x24,0x18,0x62,0x00,0x00,0x40,0x04,0x3c,0xc0,0xff,0x02,0x24,0x25,0x18,0x64,0x00,\r
+0x24,0x18,0x62,0x00,0x08,0x00,0x03,0xae,0x01,0x00,0x02,0x24,0x02,0x00,0x03,0x24,\r
+0x00,0x00,0xc2,0xa0,0x00,0x00,0xc3,0xa0,0xbc,0xff,0x35,0x16,0x41,0xb0,0x03,0x3c,\r
+0xfc,0x4a,0x82,0x8e,0x30,0x00,0xbf,0x8f,0x00,0x38,0x42,0x34,0x00,0x00,0x62,0xac,\r
+0x2c,0x00,0xb5,0x8f,0xfc,0x4a,0x82,0xae,0x24,0x00,0xb3,0x8f,0x28,0x00,0xb4,0x8f,\r
+0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,\r
+0x38,0x00,0xbd,0x27,0x25,0xb0,0x04,0x3c,0x00,0x80,0x02,0x3c,0xc0,0xff,0xbd,0x27,\r
+0x18,0x03,0x83,0x34,0x54,0x08,0x42,0x24,0x3c,0x00,0xbf,0xaf,0x38,0x00,0xbe,0xaf,\r
+0x34,0x00,0xb7,0xaf,0x30,0x00,0xb6,0xaf,0x2c,0x00,0xb5,0xaf,0x28,0x00,0xb4,0xaf,\r
+0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,\r
+0x00,0x00,0x62,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,\r
+0x02,0x80,0x02,0x3c,0x68,0x15,0x52,0x24,0xb0,0x03,0x95,0x34,0x39,0x02,0x00,0x08,\r
+0x21,0xf0,0x40,0x02,0x08,0x00,0x04,0xae,0x76,0x4b,0x82,0x92,0x00,0x00,0x00,0x00,\r
+0x45,0x00,0x40,0x10,0x2a,0xb0,0x02,0x3c,0x09,0x00,0x42,0x34,0x01,0x00,0x03,0x24,\r
+0x02,0x00,0x04,0x24,0x00,0x00,0x43,0xa0,0x00,0x00,0x44,0xa0,0x5a,0x00,0x36,0x12,\r
+0x00,0x00,0x00,0x00,0xcc,0x64,0x42,0x8e,0x38,0x65,0x53,0x8e,0x01,0x00,0x04,0x24,\r
+0x00,0x00,0xa2,0xae,0xd0,0x64,0x42,0xae,0x00,0x00,0xb3,0xae,0x4d,0x01,0x00,0x0c,\r
+0x21,0xa0,0xc0,0x03,0x38,0x65,0x44,0x8e,0x3c,0x65,0x43,0x8e,0x20,0x00,0x84,0x24,\r
+0x3f,0x00,0x62,0x24,0x2b,0x10,0x44,0x00,0x0a,0x18,0x82,0x00,0x38,0x65,0x43,0xae,\r
+0x38,0x65,0xc5,0x8f,0x00,0x00,0x00,0x00,0x00,0x00,0xa5,0xae,0x02,0x80,0x17,0x3c,\r
+0xff,0xff,0x62,0x32,0x25,0x80,0x57,0x00,0x00,0x00,0xb0,0xae,0x0c,0x00,0x02,0x92,\r
+0xff,0x00,0x16,0x24,0x01,0x00,0x04,0x24,0x00,0x00,0xa2,0xae,0x0c,0x00,0x11,0x92,\r
+0x20,0x10,0x02,0x3c,0x20,0x00,0x07,0x24,0x00,0x1a,0x11,0x00,0x21,0x18,0x62,0x00,\r
+0x05,0x00,0x36,0x12,0x21,0x30,0x60,0x00,0xcc,0x64,0xc3,0xaf,0x70,0x64,0xd1,0xa3,\r
+0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x04,0x00,0x04,0x8e,0x08,0x00,0x03,0x8e,\r
+0xff,0xe0,0x02,0x3c,0xff,0xff,0x42,0x34,0x1f,0x00,0x84,0x30,0x24,0x18,0x62,0x00,\r
+0x00,0x26,0x04,0x00,0xff,0xdf,0x02,0x3c,0x25,0x18,0x64,0x00,0xff,0xff,0x42,0x34,\r
+0x24,0x18,0x62,0x00,0x00,0x40,0x04,0x3c,0x25,0x18,0x64,0x00,0xc0,0xff,0x05,0x24,\r
+0x82,0x11,0x03,0x00,0x24,0x20,0x65,0x00,0x01,0x00,0x42,0x30,0xbd,0xff,0x40,0x10,\r
+0x04,0x00,0x84,0x34,0x08,0x00,0x03,0xae,0x76,0x4b,0x82,0x92,0x00,0x00,0x00,0x00,\r
+0xbd,0xff,0x40,0x14,0x2a,0xb0,0x02,0x3c,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x01,0x00,0x03,0x24,0x76,0x4b,0x83,0xa2,\r
+0x02,0x00,0x02,0x92,0x00,0x00,0x00,0x00,0x21,0x10,0x53,0x00,0xff,0xff,0x42,0x30,\r
+0x25,0x10,0x57,0x00,0x02,0x00,0x43,0x94,0x00,0x00,0x00,0x00,0xff,0xc0,0x64,0x30,\r
+0x00,0xc0,0x84,0x34,0xe3,0x18,0x00,0x0c,0x77,0x4b,0x83,0xa2,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x2a,0xb0,0x02,0x3c,0x09,0x00,0x42,0x34,\r
+0x01,0x00,0x03,0x24,0x02,0x00,0x04,0x24,0x00,0x00,0x43,0xa0,0x00,0x00,0x44,0xa0,\r
+0xa8,0xff,0x36,0x16,0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x02,0x80,0x03,0x3c,0x68,0x15,0x62,0x24,\r
+0xfc,0x4a,0x43,0x8c,0x3c,0x00,0xbf,0x8f,0x38,0x00,0xbe,0x8f,0x34,0x00,0xb7,0x8f,\r
+0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,\r
+0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x00,0x38,0x63,0x34,\r
+0x41,0xb0,0x04,0x3c,0x40,0x00,0xbd,0x27,0x00,0x00,0x83,0xac,0x08,0x00,0xe0,0x03,\r
+0xfc,0x4a,0x43,0xac,0x25,0xb0,0x04,0x3c,0x00,0x80,0x02,0x3c,0xc0,0xff,0xbd,0x27,\r
+0x18,0x03,0x83,0x34,0xa4,0x0a,0x42,0x24,0x38,0x00,0xbf,0xaf,0x34,0x00,0xb7,0xaf,\r
+0x30,0x00,0xb6,0xaf,0x2c,0x00,0xb5,0xaf,0x28,0x00,0xb4,0xaf,0x24,0x00,0xb3,0xaf,\r
+0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,0x00,0x00,0x62,0xac,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x02,0x80,0x16,0x3c,\r
+0x68,0x15,0xd3,0x26,0xb0,0x03,0x94,0x34,0x02,0x80,0x15,0x3c,0x21,0xb8,0x60,0x02,\r
+0xc0,0x64,0x62,0x8e,0x2c,0x65,0x70,0x8e,0x01,0x00,0x04,0x24,0x00,0x00,0x82,0xae,\r
+0xc4,0x64,0x62,0xae,0x00,0x00,0x90,0xae,0x4d,0x01,0x00,0x0c,0x21,0x88,0xe0,0x02,\r
+0x2c,0x65,0x64,0x8e,0x30,0x65,0x63,0x8e,0x20,0x00,0x84,0x24,0x3f,0x00,0x62,0x24,\r
+0x2b,0x10,0x44,0x00,0x0a,0x18,0x82,0x00,0x2c,0x65,0x63,0xae,0x2c,0x65,0xe5,0x8e,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x85,0xae,0x02,0x80,0x02,0x3c,0xff,0xff,0x10,0x32,\r
+0x25,0x80,0x02,0x02,0x00,0x00,0x90,0xae,0x0c,0x00,0x02,0x92,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x82,0xae,0x0c,0x00,0x12,0x92,0xff,0x00,0x02,0x24,0x0a,0x00,0x42,0x12,\r
+0x00,0x1a,0x12,0x00,0x20,0x10,0x02,0x3c,0x21,0x18,0x62,0x00,0xc0,0x64,0xe3,0xae,\r
+0x6c,0x64,0xf2,0xa2,0x21,0x30,0x60,0x00,0x01,0x00,0x04,0x24,0x20,0x00,0x07,0x24,\r
+0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0xf8,0x63,0x22,0x8e,0x04,0x00,0x03,0x8e,\r
+0x42,0x10,0x02,0x00,0x01,0x00,0x42,0x30,0x5d,0x00,0x40,0x14,0x1f,0x00,0x64,0x30,\r
+0x08,0x00,0x02,0x8e,0xff,0xe0,0x03,0x3c,0xff,0xff,0x63,0x34,0x24,0x10,0x43,0x00,\r
+0x00,0x26,0x04,0x00,0x25,0x28,0x44,0x00,0x08,0x00,0x05,0xae,0xc2,0x11,0x05,0x00,\r
+0x01,0x00,0x43,0x30,0x47,0x00,0x60,0x14,0x01,0x00,0x02,0x24,0x00,0x00,0x04,0x96,\r
+0x1c,0x64,0x23,0x8e,0x27,0x10,0x04,0x00,0x2b,0x10,0x62,0x00,0x05,0x00,0x40,0x10,\r
+0xff,0xdf,0x02,0x3c,0x21,0x10,0x64,0x00,0x1c,0x64,0x22,0xae,0x08,0x00,0x05,0x8e,\r
+0xff,0xdf,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x28,0xa2,0x00,0x00,0x40,0x03,0x3c,\r
+0x25,0x28,0xa3,0x00,0x82,0x11,0x05,0x00,0x01,0x00,0x42,0x30,0x03,0x00,0x40,0x14,\r
+0xc0,0xff,0x02,0x24,0x24,0x10,0xa2,0x00,0x04,0x00,0x45,0x34,0x08,0x00,0x05,0xae,\r
+0x68,0x15,0xc2,0x26,0x76,0x4b,0x44,0x90,0x01,0x00,0x03,0x24,0x3b,0x00,0x83,0x10,\r
+0x7f,0xff,0x02,0x24,0x24,0x10,0xa2,0x00,0x08,0x00,0x02,0xae,0x68,0x15,0xc5,0x26,\r
+0xc4,0x64,0xa2,0x8c,0x20,0x00,0x10,0x8e,0x00,0x80,0x03,0x3c,0x25,0x10,0x43,0x00,\r
+0x2a,0xb0,0x03,0x3c,0x08,0x00,0x50,0xac,0x05,0x00,0x70,0x34,0x01,0x00,0x02,0x24,\r
+0x02,0x00,0x03,0x24,0x00,0x00,0x02,0xa2,0x00,0x00,0x03,0xa2,0x2a,0x7e,0xa2,0x96,\r
+0xff,0x00,0x03,0x24,0x01,0x00,0x42,0x24,0x2a,0x7e,0xa2,0xa6,0x2a,0x7e,0xa4,0x96,\r
+0x25,0xb0,0x02,0x3c,0x66,0x03,0x42,0x34,0x00,0x00,0x44,0xa4,0x98,0xff,0x43,0x16,\r
+0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0xfc,0x4a,0xa2,0x8c,0x38,0x00,0xbf,0x8f,0x34,0x00,0xb7,0x8f,\r
+0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,\r
+0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x00,0x38,0x42,0x34,\r
+0x41,0xb0,0x03,0x3c,0x40,0x00,0xbd,0x27,0x00,0x00,0x62,0xac,0x08,0x00,0xe0,0x03,\r
+0xfc,0x4a,0xa2,0xac,0xc3,0xff,0x62,0x14,0xff,0xdf,0x02,0x3c,0x00,0x00,0x04,0x96,\r
+0x18,0x64,0x23,0x8e,0x27,0x10,0x04,0x00,0x2b,0x10,0x62,0x00,0xbd,0xff,0x40,0x10,\r
+0xff,0xdf,0x02,0x3c,0x21,0x10,0x64,0x00,0xff,0x02,0x00,0x08,0x18,0x64,0x22,0xae,\r
+0x08,0x00,0x05,0x8e,0xf4,0x02,0x00,0x08,0xc2,0x11,0x05,0x00,0x80,0x00,0xa5,0x34,\r
+0x13,0x03,0x00,0x08,0x08,0x00,0x05,0xae,0xc0,0xff,0xbd,0x27,0x30,0x00,0xb6,0xaf,\r
+0x38,0x00,0xbf,0xaf,0x34,0x00,0xb7,0xaf,0x2c,0x00,0xb5,0xaf,0x28,0x00,0xb4,0xaf,\r
+0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,\r
+0x02,0x80,0x06,0x3c,0xdc,0x7e,0xc5,0x90,0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,\r
+0x18,0x03,0x42,0x34,0x38,0x0d,0x63,0x24,0x40,0x00,0xa4,0x30,0x00,0x00,0x43,0xac,\r
+0x21,0xb0,0x00,0x00,0x03,0x00,0x80,0x10,0x7f,0x00,0xa2,0x30,0xbf,0x00,0xa2,0x30,\r
+0x01,0x00,0x16,0x24,0xdc,0x7e,0xc2,0xa0,0xdc,0x7e,0xc2,0x90,0x25,0xb0,0x04,0x3c,\r
+0x88,0x02,0x83,0x34,0x00,0x00,0x62,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x00,0x60,0x81,0x40,0x02,0x80,0x15,0x3c,0x68,0x15,0xb2,0x26,0xb0,0x03,0x93,0x34,\r
+0x02,0x80,0x14,0x3c,0xc0,0x03,0x00,0x08,0x21,0xb8,0x40,0x02,0x4c,0x64,0xf1,0xa2,\r
+0x68,0x15,0xa2,0x26,0x84,0x64,0x46,0x8c,0xf0,0x64,0x45,0x8c,0x03,0x00,0x04,0x24,\r
+0x20,0x00,0x07,0x24,0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x68,0x15,0xa5,0x26,\r
+0xf8,0x63,0xa2,0x8c,0x04,0x00,0x03,0x8e,0x42,0x10,0x02,0x00,0x01,0x00,0x42,0x30,\r
+0x08,0x00,0x40,0x14,0x1f,0x00,0x64,0x30,0x08,0x00,0x02,0x8e,0xff,0xe0,0x03,0x3c,\r
+0xff,0xff,0x63,0x34,0x24,0x10,0x43,0x00,0x00,0x26,0x04,0x00,0x25,0x18,0x44,0x00,\r
+0x08,0x00,0x03,0xae,0x00,0x00,0x04,0x96,0x1c,0x64,0xa3,0x8c,0x27,0x10,0x04,0x00,\r
+0x2b,0x10,0x62,0x00,0x02,0x00,0x40,0x10,0x21,0x10,0x64,0x00,0x1c,0x64,0xa2,0xac,\r
+0x10,0x00,0x04,0x8e,0x00,0x00,0x00,0x00,0x53,0x00,0x80,0x04,0x00,0x00,0x00,0x00,\r
+0x14,0x00,0x03,0x8e,0x00,0x00,0x00,0x00,0x42,0x12,0x03,0x00,0x3f,0x00,0x42,0x30,\r
+0x0c,0x00,0x42,0x28,0x06,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x96,\r
+0x00,0x00,0x00,0x00,0xfd,0x0f,0x42,0x28,0x44,0x00,0x40,0x14,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0x02,0x8e,0xff,0xdf,0x03,0x3c,0xff,0xff,0x63,0x34,0x24,0x18,0x43,0x00,\r
+0x00,0x40,0x04,0x3c,0x25,0x18,0x64,0x00,0x08,0x00,0x03,0xae,0x82,0x11,0x03,0x00,\r
+0x01,0x00,0x42,0x30,0x05,0x00,0x40,0x14,0x2a,0xb0,0x07,0x3c,0xc0,0xff,0x02,0x24,\r
+0x24,0x10,0x62,0x00,0x04,0x00,0x42,0x34,0x08,0x00,0x02,0xae,0x0d,0x00,0xe2,0x34,\r
+0x04,0x00,0x43,0x24,0x0b,0x10,0x76,0x00,0x01,0x00,0x04,0x24,0x02,0x00,0x03,0x24,\r
+0x00,0x00,0x44,0xa0,0x00,0x00,0x43,0xa0,0x2a,0x7e,0x84,0x96,0x25,0xb0,0x06,0x3c,\r
+0x66,0x03,0xc5,0x34,0x01,0x00,0x84,0x24,0x2a,0x7e,0x84,0xa6,0x2a,0x7e,0x82,0x96,\r
+0xff,0x00,0x03,0x24,0x00,0x00,0xa2,0xa4,0x33,0x00,0x23,0x12,0x00,0x00,0x00,0x00,\r
+0x84,0x64,0x42,0x8e,0xf0,0x64,0x50,0x8e,0x03,0x00,0x04,0x24,0x00,0x00,0x62,0xae,\r
+0x88,0x64,0x42,0xae,0x00,0x00,0x70,0xae,0x4d,0x01,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0xf0,0x64,0x44,0x8e,0xf4,0x64,0x43,0x8e,0x20,0x00,0x84,0x24,0x3f,0x00,0x62,0x24,\r
+0x2b,0x10,0x44,0x00,0x0a,0x18,0x82,0x00,0xf0,0x64,0x43,0xae,0xf0,0x64,0xe2,0x8e,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x62,0xae,0x02,0x80,0x02,0x3c,0xff,0xff,0x10,0x32,\r
+0x25,0x80,0x02,0x02,0x00,0x00,0x70,0xae,0x0c,0x00,0x02,0x92,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x62,0xae,0x0c,0x00,0x11,0x92,0xff,0x00,0x02,0x24,0x9f,0xff,0x22,0x12,\r
+0x00,0x12,0x11,0x00,0x20,0x10,0x03,0x3c,0x21,0x10,0x43,0x00,0x93,0xff,0xc0,0x16,\r
+0x84,0x64,0xe2,0xae,0x74,0x03,0x00,0x08,0x48,0x64,0xf1,0xa2,0x08,0x00,0x03,0x8e,\r
+0xa8,0x03,0x00,0x08,0x82,0x11,0x03,0x00,0x14,0x00,0x03,0x8e,0x00,0x00,0x00,0x00,\r
+0x42,0x12,0x03,0x00,0x3f,0x00,0x42,0x30,0x14,0x00,0x42,0x28,0xab,0xff,0x40,0x14,\r
+0x42,0x12,0x03,0x00,0x9f,0xff,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x10,0x82,0x00,\r
+0x96,0x03,0x00,0x08,0x10,0x00,0x02,0xae,0x20,0x00,0xc0,0x12,0x68,0x15,0xa2,0x26,\r
+0x4c,0x64,0x43,0x90,0x41,0x00,0xe4,0x34,0xb0,0x03,0xc5,0x34,0x00,0x00,0x83,0xa0,\r
+0x00,0x00,0xa3,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x68,0x15,0xa5,0x26,0xfc,0x4a,0xa4,0x8c,0x01,0x00,0x02,0x3c,0x38,0x00,0xbf,0x8f,\r
+0x34,0x00,0xb7,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,\r
+0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,\r
+0x00,0x80,0x42,0x34,0x25,0x20,0x82,0x00,0x41,0xb0,0x03,0x3c,0x40,0x00,0xbd,0x27,\r
+0x00,0x00,0x64,0xac,0x08,0x00,0xe0,0x03,0xfc,0x4a,0xa4,0xac,0x48,0x64,0x43,0x90,\r
+0x40,0x00,0xe4,0x34,0xb0,0x03,0xc5,0x34,0x00,0x00,0x83,0xa0,0x00,0x00,0xa3,0xac,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x68,0x15,0xa5,0x26,\r
+0xfc,0x4a,0xa4,0x8c,0x01,0x00,0x02,0x3c,0x38,0x00,0xbf,0x8f,0x34,0x00,0xb7,0x8f,\r
+0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,\r
+0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x00,0x80,0x42,0x34,\r
+0x25,0x20,0x82,0x00,0x41,0xb0,0x03,0x3c,0x40,0x00,0xbd,0x27,0x00,0x00,0x64,0xac,\r
+0x08,0x00,0xe0,0x03,0xfc,0x4a,0xa4,0xac,0xc0,0xff,0xbd,0x27,0x30,0x00,0xb6,0xaf,\r
+0x38,0x00,0xbf,0xaf,0x34,0x00,0xb7,0xaf,0x2c,0x00,0xb5,0xaf,0x28,0x00,0xb4,0xaf,\r
+0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,\r
+0x02,0x80,0x06,0x3c,0xdc,0x7e,0xc5,0x90,0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,\r
+0x18,0x03,0x42,0x34,0xc8,0x10,0x63,0x24,0x10,0x00,0xa4,0x30,0x00,0x00,0x43,0xac,\r
+0x21,0xb0,0x00,0x00,0x03,0x00,0x80,0x10,0xdf,0x00,0xa2,0x30,0xef,0x00,0xa2,0x30,\r
+0x01,0x00,0x16,0x24,0xdc,0x7e,0xc2,0xa0,0xdc,0x7e,0xc3,0x90,0x25,0xb0,0x02,0x3c,\r
+0xb0,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x00,0x00,0x43,0xac,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x02,0x80,0x15,0x3c,0x68,0x15,0xb2,0x26,\r
+0x21,0x98,0x40,0x00,0x02,0x80,0x14,0x3c,0xa5,0x04,0x00,0x08,0x21,0xb8,0x40,0x02,\r
+0x54,0x64,0xf1,0xa2,0x68,0x15,0xa2,0x26,0x90,0x64,0x46,0x8c,0xfc,0x64,0x45,0x8c,\r
+0x04,0x00,0x04,0x24,0x20,0x00,0x07,0x24,0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,\r
+0x68,0x15,0xa5,0x26,0xf8,0x63,0xa2,0x8c,0x04,0x00,0x03,0x8e,0x42,0x10,0x02,0x00,\r
+0x01,0x00,0x42,0x30,0x08,0x00,0x40,0x14,0x1f,0x00,0x64,0x30,0x08,0x00,0x02,0x8e,\r
+0xff,0xe0,0x03,0x3c,0xff,0xff,0x63,0x34,0x24,0x10,0x43,0x00,0x00,0x26,0x04,0x00,\r
+0x25,0x18,0x44,0x00,0x08,0x00,0x03,0xae,0x00,0x00,0x04,0x96,0x1c,0x64,0xa3,0x8c,\r
+0x27,0x10,0x04,0x00,0x2b,0x10,0x62,0x00,0x02,0x00,0x40,0x10,0x21,0x10,0x64,0x00,\r
+0x1c,0x64,0xa2,0xac,0x10,0x00,0x04,0x8e,0x00,0x00,0x00,0x00,0x53,0x00,0x80,0x04,\r
+0x00,0x00,0x00,0x00,0x14,0x00,0x03,0x8e,0x00,0x00,0x00,0x00,0x42,0x12,0x03,0x00,\r
+0x3f,0x00,0x42,0x30,0x0c,0x00,0x42,0x28,0x06,0x00,0x40,0x14,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x02,0x96,0x00,0x00,0x00,0x00,0xfd,0x0f,0x42,0x28,0x44,0x00,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0x02,0x8e,0xff,0xdf,0x03,0x3c,0xff,0xff,0x63,0x34,\r
+0x24,0x18,0x43,0x00,0x00,0x40,0x04,0x3c,0x25,0x18,0x64,0x00,0x08,0x00,0x03,0xae,\r
+0x82,0x11,0x03,0x00,0x01,0x00,0x42,0x30,0x05,0x00,0x40,0x14,0x2a,0xb0,0x07,0x3c,\r
+0xc0,0xff,0x02,0x24,0x24,0x10,0x62,0x00,0x04,0x00,0x42,0x34,0x08,0x00,0x02,0xae,\r
+0x15,0x00,0xe2,0x34,0x04,0x00,0x43,0x24,0x0b,0x10,0x76,0x00,0x01,0x00,0x04,0x24,\r
+0x02,0x00,0x03,0x24,0x00,0x00,0x44,0xa0,0x00,0x00,0x43,0xa0,0x2a,0x7e,0x84,0x96,\r
+0x25,0xb0,0x06,0x3c,0x66,0x03,0xc5,0x34,0x01,0x00,0x84,0x24,0x2a,0x7e,0x84,0xa6,\r
+0x2a,0x7e,0x82,0x96,0xff,0x00,0x03,0x24,0x00,0x00,0xa2,0xa4,0x33,0x00,0x23,0x12,\r
+0x00,0x00,0x00,0x00,0x90,0x64,0x42,0x8e,0xfc,0x64,0x50,0x8e,0x04,0x00,0x04,0x24,\r
+0x00,0x00,0x62,0xae,0x94,0x64,0x42,0xae,0x00,0x00,0x70,0xae,0x4d,0x01,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0xfc,0x64,0x44,0x8e,0x00,0x65,0x43,0x8e,0x20,0x00,0x84,0x24,\r
+0x3f,0x00,0x62,0x24,0x2b,0x10,0x44,0x00,0x0a,0x18,0x82,0x00,0xfc,0x64,0x43,0xae,\r
+0xfc,0x64,0xe2,0x8e,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0xae,0x02,0x80,0x02,0x3c,\r
+0xff,0xff,0x10,0x32,0x25,0x80,0x02,0x02,0x00,0x00,0x70,0xae,0x0c,0x00,0x02,0x92,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x62,0xae,0x0c,0x00,0x11,0x92,0xff,0x00,0x02,0x24,\r
+0x9f,0xff,0x22,0x12,0x00,0x12,0x11,0x00,0x20,0x10,0x03,0x3c,0x21,0x10,0x43,0x00,\r
+0x93,0xff,0xc0,0x16,0x90,0x64,0xe2,0xae,0x59,0x04,0x00,0x08,0x50,0x64,0xf1,0xa2,\r
+0x08,0x00,0x03,0x8e,0x8d,0x04,0x00,0x08,0x82,0x11,0x03,0x00,0x14,0x00,0x03,0x8e,\r
+0x00,0x00,0x00,0x00,0x42,0x12,0x03,0x00,0x3f,0x00,0x42,0x30,0x14,0x00,0x42,0x28,\r
+0xab,0xff,0x40,0x14,0x42,0x12,0x03,0x00,0x9f,0xff,0x02,0x3c,0xff,0xff,0x42,0x34,\r
+0x24,0x10,0x82,0x00,0x7b,0x04,0x00,0x08,0x10,0x00,0x02,0xae,0x1f,0x00,0xc0,0x12,\r
+0x68,0x15,0xa2,0x26,0x54,0x64,0x43,0x90,0x43,0x00,0xe4,0x34,0xb0,0x03,0xc5,0x34,\r
+0x00,0x00,0x83,0xa0,0x00,0x00,0xa3,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0x68,0x15,0xa5,0x26,0xfc,0x4a,0xa2,0x8c,0x38,0x00,0xbf,0x8f,\r
+0x34,0x00,0xb7,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,\r
+0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,\r
+0x06,0x00,0x03,0x3c,0x25,0x10,0x43,0x00,0x41,0xb0,0x04,0x3c,0x40,0x00,0xbd,0x27,\r
+0x00,0x00,0x82,0xac,0x08,0x00,0xe0,0x03,0xfc,0x4a,0xa2,0xac,0x50,0x64,0x43,0x90,\r
+0x42,0x00,0xe4,0x34,0xb0,0x03,0xc5,0x34,0x00,0x00,0x83,0xa0,0x00,0x00,0xa3,0xac,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x68,0x15,0xa5,0x26,\r
+0xfc,0x4a,0xa2,0x8c,0x38,0x00,0xbf,0x8f,0x34,0x00,0xb7,0x8f,0x30,0x00,0xb6,0x8f,\r
+0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,\r
+0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x06,0x00,0x03,0x3c,0x25,0x10,0x43,0x00,\r
+0x41,0xb0,0x04,0x3c,0x40,0x00,0xbd,0x27,0x00,0x00,0x82,0xac,0x08,0x00,0xe0,0x03,\r
+0xfc,0x4a,0xa2,0xac,0xc0,0xff,0xbd,0x27,0x30,0x00,0xb6,0xaf,0x38,0x00,0xbf,0xaf,\r
+0x34,0x00,0xb7,0xaf,0x2c,0x00,0xb5,0xaf,0x28,0x00,0xb4,0xaf,0x24,0x00,0xb3,0xaf,\r
+0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,0x02,0x80,0x06,0x3c,\r
+0xdc,0x7e,0xc5,0x90,0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,0x18,0x03,0x42,0x34,\r
+0x54,0x14,0x63,0x24,0x01,0x00,0xa4,0x30,0x00,0x00,0x43,0xac,0x21,0xb0,0x00,0x00,\r
+0x03,0x00,0x80,0x10,0xf7,0x00,0xa2,0x30,0xfe,0x00,0xa2,0x30,0x01,0x00,0x16,0x24,\r
+0xdc,0x7e,0xc2,0xa0,0xdc,0x7e,0xc3,0x90,0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,\r
+0x00,0x00,0x43,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,\r
+0x02,0x80,0x15,0x3c,0x68,0x15,0xb2,0x26,0x21,0x98,0x40,0x00,0x02,0x80,0x14,0x3c,\r
+0x5c,0x05,0x00,0x08,0x21,0xb8,0x40,0x02,0x00,0x00,0x02,0x96,0x00,0x00,0x00,0x00,\r
+0xfd,0x0f,0x42,0x28,0x67,0x00,0x40,0x10,0x00,0x20,0x02,0x3c,0x08,0x00,0x03,0x8e,\r
+0x00,0x00,0x00,0x00,0x25,0x18,0x62,0x00,0x82,0x11,0x03,0x00,0x01,0x00,0x42,0x30,\r
+0x6b,0x00,0x40,0x14,0x2a,0xb0,0x07,0x3c,0xc0,0xff,0x02,0x24,0x24,0x10,0x62,0x00,\r
+0x04,0x00,0x42,0x34,0x2a,0xb0,0x07,0x3c,0x08,0x00,0x02,0xae,0x1d,0x00,0xe2,0x34,\r
+0x04,0x00,0x43,0x24,0x0b,0x10,0x76,0x00,0x01,0x00,0x04,0x24,0x02,0x00,0x03,0x24,\r
+0x00,0x00,0x44,0xa0,0x00,0x00,0x43,0xa0,0x2a,0x7e,0x84,0x96,0x25,0xb0,0x06,0x3c,\r
+0x66,0x03,0xc5,0x34,0x01,0x00,0x84,0x24,0x2a,0x7e,0x84,0xa6,0x2a,0x7e,0x82,0x96,\r
+0xff,0x00,0x03,0x24,0x00,0x00,0xa2,0xa4,0x67,0x00,0x23,0x12,0x00,0x00,0x00,0x00,\r
+0x9c,0x64,0x42,0x8e,0x08,0x65,0x50,0x8e,0x05,0x00,0x04,0x24,0x00,0x00,0x62,0xae,\r
+0xa0,0x64,0x42,0xae,0x00,0x00,0x70,0xae,0x4d,0x01,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x08,0x65,0x44,0x8e,0x0c,0x65,0x43,0x8e,0x20,0x00,0x84,0x24,0x3f,0x00,0x62,0x24,\r
+0x2b,0x10,0x44,0x00,0x0a,0x18,0x82,0x00,0x08,0x65,0x43,0xae,0x08,0x65,0xe2,0x8e,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x62,0xae,0x02,0x80,0x02,0x3c,0xff,0xff,0x10,0x32,\r
+0x25,0x80,0x02,0x02,0x00,0x00,0x70,0xae,0x0c,0x00,0x02,0x92,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x62,0xae,0x0c,0x00,0x11,0x92,0xff,0x00,0x02,0x24,0x0d,0x00,0x22,0x12,\r
+0x00,0x12,0x11,0x00,0x20,0x10,0x03,0x3c,0x21,0x10,0x43,0x00,0x66,0x00,0xc0,0x12,\r
+0x9c,0x64,0xe2,0xae,0x64,0x64,0xf1,0xa2,0x68,0x15,0xa2,0x26,0x9c,0x64,0x46,0x8c,\r
+0x08,0x65,0x45,0x8c,0x05,0x00,0x04,0x24,0x20,0x00,0x07,0x24,0x10,0x01,0x00,0x0c,\r
+0x10,0x00,0xa0,0xaf,0x68,0x15,0xa5,0x26,0xf8,0x63,0xa2,0x8c,0x04,0x00,0x03,0x8e,\r
+0x42,0x10,0x02,0x00,0x01,0x00,0x42,0x30,0x08,0x00,0x40,0x14,0x1f,0x00,0x64,0x30,\r
+0x08,0x00,0x02,0x8e,0xff,0xe0,0x03,0x3c,0xff,0xff,0x63,0x34,0x24,0x10,0x43,0x00,\r
+0x00,0x26,0x04,0x00,0x25,0x10,0x44,0x00,0x08,0x00,0x02,0xae,0x00,0x00,0x04,0x96,\r
+0x1c,0x64,0xa3,0x8c,0x27,0x10,0x04,0x00,0x2b,0x10,0x62,0x00,0x02,0x00,0x40,0x10,\r
+0x21,0x10,0x64,0x00,0x1c,0x64,0xa2,0xac,0x10,0x00,0x04,0x8e,0x00,0x00,0x00,0x00,\r
+0x47,0x00,0x80,0x04,0x00,0x00,0x00,0x00,0x14,0x00,0x03,0x8e,0x00,0x00,0x00,0x00,\r
+0x42,0x12,0x03,0x00,0x3f,0x00,0x42,0x30,0x0c,0x00,0x42,0x28,0x96,0xff,0x40,0x10,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0x02,0x8e,0xff,0xdf,0x03,0x3c,0xff,0xff,0x63,0x34,\r
+0x24,0x10,0x43,0x00,0x00,0x40,0x04,0x3c,0x25,0x18,0x44,0x00,0x82,0x11,0x03,0x00,\r
+0x01,0x00,0x42,0x30,0x99,0xff,0x40,0x10,0xc0,0xff,0x02,0x24,0x2a,0xb0,0x07,0x3c,\r
+0x1d,0x00,0xe2,0x34,0x08,0x00,0x03,0xae,0x04,0x00,0x43,0x24,0x0b,0x10,0x76,0x00,\r
+0x01,0x00,0x04,0x24,0x02,0x00,0x03,0x24,0x00,0x00,0x44,0xa0,0x00,0x00,0x43,0xa0,\r
+0x2a,0x7e,0x84,0x96,0x25,0xb0,0x06,0x3c,0x66,0x03,0xc5,0x34,0x01,0x00,0x84,0x24,\r
+0x2a,0x7e,0x84,0xa6,0x2a,0x7e,0x82,0x96,0xff,0x00,0x03,0x24,0x00,0x00,0xa2,0xa4,\r
+0x9b,0xff,0x23,0x16,0x00,0x00,0x00,0x00,0x2d,0x00,0xc0,0x12,0x68,0x15,0xa2,0x26,\r
+0x64,0x64,0x43,0x90,0x45,0x00,0xe4,0x34,0xb0,0x03,0xc5,0x34,0x00,0x00,0x83,0xa0,\r
+0x00,0x00,0xa3,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x68,0x15,0xa5,0x26,0xfc,0x4a,0xa2,0x8c,0x38,0x00,0xbf,0x8f,0x34,0x00,0xb7,0x8f,\r
+0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,\r
+0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x18,0x00,0x03,0x3c,\r
+0x25,0x10,0x43,0x00,0x41,0xb0,0x04,0x3c,0x40,0x00,0xbd,0x27,0x00,0x00,0x82,0xac,\r
+0x08,0x00,0xe0,0x03,0xfc,0x4a,0xa2,0xac,0x7e,0x05,0x00,0x08,0x58,0x64,0xf1,0xa2,\r
+0x14,0x00,0x03,0x8e,0x00,0x00,0x00,0x00,0x42,0x12,0x03,0x00,0x3f,0x00,0x42,0x30,\r
+0x14,0x00,0x42,0x28,0xb7,0xff,0x40,0x14,0x42,0x12,0x03,0x00,0x9f,0xff,0x02,0x3c,\r
+0xff,0xff,0x42,0x34,0x24,0x10,0x82,0x00,0xa0,0x05,0x00,0x08,0x10,0x00,0x02,0xae,\r
+0x58,0x64,0x43,0x90,0x44,0x00,0xe4,0x34,0xb0,0x03,0xc5,0x34,0x00,0x00,0x83,0xa0,\r
+0x00,0x00,0xa3,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x68,0x15,0xa5,0x26,0xfc,0x4a,0xa2,0x8c,0x38,0x00,0xbf,0x8f,0x34,0x00,0xb7,0x8f,\r
+0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,\r
+0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x18,0x00,0x03,0x3c,\r
+0x25,0x10,0x43,0x00,0x41,0xb0,0x04,0x3c,0x40,0x00,0xbd,0x27,0x00,0x00,0x82,0xac,\r
+0x08,0x00,0xe0,0x03,0xfc,0x4a,0xa2,0xac,0xc0,0xff,0xbd,0x27,0x30,0x00,0xb6,0xaf,\r
+0x38,0x00,0xbf,0xaf,0x34,0x00,0xb7,0xaf,0x2c,0x00,0xb5,0xaf,0x28,0x00,0xb4,0xaf,\r
+0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,\r
+0x02,0x80,0x06,0x3c,0xdc,0x7e,0xc5,0x90,0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,\r
+0x18,0x03,0x42,0x34,0x38,0x18,0x63,0x24,0x02,0x00,0xa4,0x30,0x00,0x00,0x43,0xac,\r
+0x21,0xb0,0x00,0x00,0x03,0x00,0x80,0x10,0xfb,0x00,0xa2,0x30,0xfd,0x00,0xa2,0x30,\r
+0x01,0x00,0x16,0x24,0xdc,0x7e,0xc2,0xa0,0xdc,0x7e,0xc3,0x90,0x25,0xb0,0x02,0x3c,\r
+0xb0,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x00,0x60,0x81,0x40,0x02,0x80,0x15,0x3c,0x68,0x15,0xb2,0x26,0x21,0x98,0x40,0x00,\r
+0x02,0x80,0x14,0x3c,0x55,0x06,0x00,0x08,0x21,0xb8,0x40,0x02,0x00,0x00,0x02,0x96,\r
+0x00,0x00,0x00,0x00,0xfd,0x0f,0x42,0x28,0x67,0x00,0x40,0x10,0x00,0x20,0x02,0x3c,\r
+0x08,0x00,0x03,0x8e,0x00,0x00,0x00,0x00,0x25,0x18,0x62,0x00,0x82,0x11,0x03,0x00,\r
+0x01,0x00,0x42,0x30,0x6b,0x00,0x40,0x14,0x2a,0xb0,0x07,0x3c,0xc0,0xff,0x02,0x24,\r
+0x24,0x10,0x62,0x00,0x04,0x00,0x42,0x34,0x2a,0xb0,0x07,0x3c,0x08,0x00,0x02,0xae,\r
+0x25,0x00,0xe2,0x34,0x04,0x00,0x43,0x24,0x0b,0x10,0x76,0x00,0x01,0x00,0x04,0x24,\r
+0x02,0x00,0x03,0x24,0x00,0x00,0x44,0xa0,0x00,0x00,0x43,0xa0,0x2a,0x7e,0x84,0x96,\r
+0x25,0xb0,0x06,0x3c,0x66,0x03,0xc5,0x34,0x01,0x00,0x84,0x24,0x2a,0x7e,0x84,0xa6,\r
+0x2a,0x7e,0x82,0x96,0xff,0x00,0x03,0x24,0x00,0x00,0xa2,0xa4,0x67,0x00,0x23,0x12,\r
+0x00,0x00,0x00,0x00,0xa8,0x64,0x42,0x8e,0x14,0x65,0x50,0x8e,0x06,0x00,0x04,0x24,\r
+0x00,0x00,0x62,0xae,0xac,0x64,0x42,0xae,0x00,0x00,0x70,0xae,0x4d,0x01,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x14,0x65,0x44,0x8e,0x18,0x65,0x43,0x8e,0x20,0x00,0x84,0x24,\r
+0x3f,0x00,0x62,0x24,0x2b,0x10,0x44,0x00,0x0a,0x18,0x82,0x00,0x14,0x65,0x43,0xae,\r
+0x14,0x65,0xe2,0x8e,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0xae,0x02,0x80,0x02,0x3c,\r
+0xff,0xff,0x10,0x32,0x25,0x80,0x02,0x02,0x00,0x00,0x70,0xae,0x0c,0x00,0x02,0x92,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x62,0xae,0x0c,0x00,0x11,0x92,0xff,0x00,0x02,0x24,\r
+0x0d,0x00,0x22,0x12,0x00,0x12,0x11,0x00,0x20,0x10,0x03,0x3c,0x21,0x10,0x43,0x00,\r
+0x66,0x00,0xc0,0x12,0xa8,0x64,0xe2,0xae,0x60,0x64,0xf1,0xa2,0x68,0x15,0xa2,0x26,\r
+0xa8,0x64,0x46,0x8c,0x14,0x65,0x45,0x8c,0x06,0x00,0x04,0x24,0x20,0x00,0x07,0x24,\r
+0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x68,0x15,0xa5,0x26,0xf8,0x63,0xa2,0x8c,\r
+0x04,0x00,0x03,0x8e,0x42,0x10,0x02,0x00,0x01,0x00,0x42,0x30,0x08,0x00,0x40,0x14,\r
+0x1f,0x00,0x64,0x30,0x08,0x00,0x02,0x8e,0xff,0xe0,0x03,0x3c,0xff,0xff,0x63,0x34,\r
+0x24,0x10,0x43,0x00,0x00,0x26,0x04,0x00,0x25,0x10,0x44,0x00,0x08,0x00,0x02,0xae,\r
+0x00,0x00,0x04,0x96,0x1c,0x64,0xa3,0x8c,0x27,0x10,0x04,0x00,0x2b,0x10,0x62,0x00,\r
+0x02,0x00,0x40,0x10,0x21,0x10,0x64,0x00,0x1c,0x64,0xa2,0xac,0x10,0x00,0x04,0x8e,\r
+0x00,0x00,0x00,0x00,0x47,0x00,0x80,0x04,0x00,0x00,0x00,0x00,0x14,0x00,0x03,0x8e,\r
+0x00,0x00,0x00,0x00,0x42,0x12,0x03,0x00,0x3f,0x00,0x42,0x30,0x0c,0x00,0x42,0x28,\r
+0x96,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0x08,0x00,0x02,0x8e,0xff,0xdf,0x03,0x3c,\r
+0xff,0xff,0x63,0x34,0x24,0x10,0x43,0x00,0x00,0x40,0x04,0x3c,0x25,0x18,0x44,0x00,\r
+0x82,0x11,0x03,0x00,0x01,0x00,0x42,0x30,0x99,0xff,0x40,0x10,0xc0,0xff,0x02,0x24,\r
+0x2a,0xb0,0x07,0x3c,0x25,0x00,0xe2,0x34,0x08,0x00,0x03,0xae,0x04,0x00,0x43,0x24,\r
+0x0b,0x10,0x76,0x00,0x01,0x00,0x04,0x24,0x02,0x00,0x03,0x24,0x00,0x00,0x44,0xa0,\r
+0x00,0x00,0x43,0xa0,0x2a,0x7e,0x84,0x96,0x25,0xb0,0x06,0x3c,0x66,0x03,0xc5,0x34,\r
+0x01,0x00,0x84,0x24,0x2a,0x7e,0x84,0xa6,0x2a,0x7e,0x82,0x96,0xff,0x00,0x03,0x24,\r
+0x00,0x00,0xa2,0xa4,0x9b,0xff,0x23,0x16,0x00,0x00,0x00,0x00,0x2d,0x00,0xc0,0x12,\r
+0x68,0x15,0xa2,0x26,0x60,0x64,0x43,0x90,0x47,0x00,0xe4,0x34,0xb0,0x03,0xc5,0x34,\r
+0x00,0x00,0x83,0xa0,0x00,0x00,0xa3,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0x68,0x15,0xa5,0x26,0xfc,0x4a,0xa2,0x8c,0x38,0x00,0xbf,0x8f,\r
+0x34,0x00,0xb7,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,\r
+0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,\r
+0x60,0x00,0x03,0x3c,0x25,0x10,0x43,0x00,0x41,0xb0,0x04,0x3c,0x40,0x00,0xbd,0x27,\r
+0x00,0x00,0x82,0xac,0x08,0x00,0xe0,0x03,0xfc,0x4a,0xa2,0xac,0x77,0x06,0x00,0x08,\r
+0x5c,0x64,0xf1,0xa2,0x14,0x00,0x03,0x8e,0x00,0x00,0x00,0x00,0x42,0x12,0x03,0x00,\r
+0x3f,0x00,0x42,0x30,0x14,0x00,0x42,0x28,0xb7,0xff,0x40,0x14,0x42,0x12,0x03,0x00,\r
+0x9f,0xff,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x10,0x82,0x00,0x99,0x06,0x00,0x08,\r
+0x10,0x00,0x02,0xae,0x5c,0x64,0x43,0x90,0x46,0x00,0xe4,0x34,0xb0,0x03,0xc5,0x34,\r
+0x00,0x00,0x83,0xa0,0x00,0x00,0xa3,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0x68,0x15,0xa5,0x26,0xfc,0x4a,0xa2,0x8c,0x38,0x00,0xbf,0x8f,\r
+0x34,0x00,0xb7,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,\r
+0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,\r
+0x60,0x00,0x03,0x3c,0x25,0x10,0x43,0x00,0x41,0xb0,0x04,0x3c,0x40,0x00,0xbd,0x27,\r
+0x00,0x00,0x82,0xac,0x08,0x00,0xe0,0x03,0xfc,0x4a,0xa2,0xac,0x00,0x80,0x03,0x3c,\r
+0x25,0xb0,0x02,0x3c,0x1c,0x1c,0x63,0x24,0x18,0x03,0x42,0x34,0x00,0x00,0x43,0xac,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x02,0x80,0x05,0x3c,\r
+0x68,0x15,0xa5,0x24,0x04,0x4b,0xa2,0x8c,0xfc,0x4a,0xa4,0x8c,0x00,0x08,0x03,0x3c,\r
+0x24,0x10,0x43,0x00,0x25,0x20,0x82,0x00,0x41,0xb0,0x03,0x3c,0x00,0x00,0x64,0xac,\r
+0x08,0x00,0xe0,0x03,0xfc,0x4a,0xa4,0xac,0x25,0xb0,0x04,0x3c,0x00,0x80,0x02,0x3c,\r
+0xc0,0xff,0xbd,0x27,0x18,0x03,0x83,0x34,0x78,0x1c,0x42,0x24,0x3c,0x00,0xbf,0xaf,\r
+0x38,0x00,0xbe,0xaf,0x34,0x00,0xb7,0xaf,0x30,0x00,0xb6,0xaf,0x2c,0x00,0xb5,0xaf,\r
+0x28,0x00,0xb4,0xaf,0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,\r
+0x18,0x00,0xb0,0xaf,0x00,0x00,0x62,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x00,0x60,0x81,0x40,0x02,0x80,0x02,0x3c,0x2a,0xb0,0x03,0x3c,0x68,0x15,0x51,0x24,\r
+0xb0,0x03,0x93,0x34,0x2c,0x00,0x77,0x34,0x02,0x80,0x15,0x3c,0x02,0x80,0x16,0x3c,\r
+0x41,0x07,0x00,0x08,0x02,0x80,0x1e,0x3c,0x74,0x64,0x26,0x92,0x44,0x65,0x25,0x8e,\r
+0x00,0x32,0x06,0x00,0x21,0x30,0xc2,0x00,0xd8,0x64,0x26,0xae,0x10,0x01,0x00,0x0c,\r
+0x10,0x00,0xa0,0xaf,0x44,0x65,0x30,0x8e,0x0a,0x00,0x04,0x24,0x21,0x90,0x00,0x00,\r
+0x00,0x00,0x70,0xae,0x4d,0x01,0x00,0x0c,0xff,0xff,0x10,0x32,0x02,0x80,0x02,0x3c,\r
+0x25,0x80,0x02,0x02,0x0c,0x00,0x05,0x92,0x02,0x00,0x04,0x92,0xff,0x00,0x02,0x24,\r
+0xff,0x00,0xa3,0x30,0x04,0x00,0x62,0x10,0x21,0x80,0x04,0x02,0x00,0x00,0x63,0xae,\r
+0x01,0x00,0x12,0x24,0x74,0x64,0x25,0xa2,0x48,0xa4,0xb0,0xae,0x21,0x28,0x00,0x02,\r
+0x02,0x00,0xa2,0x90,0x08,0x00,0x10,0x26,0x21,0x20,0x00,0x02,0xff,0x00,0x42,0x30,\r
+0x00,0x00,0x62,0xae,0x03,0x00,0xa3,0x90,0x00,0x00,0x00,0x00,0x7f,0x00,0x63,0x30,\r
+0x00,0x00,0x63,0xae,0x00,0x00,0x72,0xae,0x03,0x00,0xa2,0x90,0x44,0xa4,0xc3,0x92,\r
+0x02,0x00,0xa2,0x90,0x00,0x00,0x00,0x00,0xff,0x00,0x42,0x30,0x2f,0x00,0x42,0x28,\r
+0x11,0x00,0x40,0x10,0x08,0x00,0x02,0x24,0x03,0x00,0xa2,0x90,0x00,0x00,0x00,0x00,\r
+0x7f,0x00,0x42,0x30,0x44,0xa4,0xc2,0xa2,0x02,0x00,0xa3,0x90,0x02,0x80,0x02,0x3c,\r
+0xf4,0x91,0x42,0x24,0xff,0x00,0x63,0x30,0xc0,0x18,0x03,0x00,0x21,0x18,0x62,0x00,\r
+0x04,0x00,0x62,0x8c,0x00,0x00,0x00,0x00,0x09,0xf8,0x40,0x00,0x40,0xa4,0xc2,0xaf,\r
+0x21,0xa0,0x40,0x00,0x08,0x00,0x02,0x24,0x0a,0x00,0x04,0x24,0x05,0x00,0x82,0x12,\r
+0x00,0x01,0x07,0x24,0x01,0x00,0x02,0x24,0x02,0x00,0x03,0x24,0x01,0x00,0xe2,0xa2,\r
+0x01,0x00,0xe3,0xa2,0xbc,0xff,0x40,0x16,0x20,0x10,0x02,0x3c,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0xfc,0x4a,0x22,0x8e,\r
+0x00,0x04,0x03,0x3c,0x41,0xb0,0x04,0x3c,0x25,0x10,0x43,0x00,0x00,0x00,0x82,0xac,\r
+0x3c,0x00,0xbf,0x8f,0xfc,0x4a,0x22,0xae,0x38,0x00,0xbe,0x8f,0x34,0x00,0xb7,0x8f,\r
+0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,\r
+0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,\r
+0x40,0x00,0xbd,0x27,0xc8,0xff,0xbd,0x27,0xff,0xff,0xa8,0x30,0x02,0x80,0x02,0x3c,\r
+0x25,0x40,0x02,0x01,0x30,0x00,0xb6,0xaf,0x20,0x00,0xb2,0xaf,0x34,0x00,0xbf,0xaf,\r
+0x2c,0x00,0xb5,0xaf,0x28,0x00,0xb4,0xaf,0x24,0x00,0xb3,0xaf,0x1c,0x00,0xb1,0xaf,\r
+0x18,0x00,0xb0,0xaf,0x00,0x00,0x03,0x8d,0xff,0xff,0xd2,0x30,0x21,0xb0,0xa0,0x00,\r
+0x00,0xc0,0x02,0x24,0x08,0x00,0x45,0x26,0x04,0x00,0x06,0x8d,0x24,0x18,0x62,0x00,\r
+0xff,0x3f,0xa5,0x30,0xf0,0xff,0x02,0x3c,0x25,0x18,0x65,0x00,0xff,0xff,0x42,0x34,\r
+0x24,0x18,0x62,0x00,0x00,0x80,0x05,0x3c,0x25,0x18,0x65,0x00,0xff,0x01,0xc6,0x34,\r
+0x00,0x00,0x03,0xad,0x04,0x00,0x06,0xad,0x21,0x48,0x80,0x00,0xff,0xff,0xe7,0x30,\r
+0x18,0x00,0x12,0xa5,0x1a,0x00,0x07,0xa1,0x18,0x00,0x03,0x8d,0xff,0x7f,0x02,0x3c,\r
+0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0x02,0x80,0x15,0x3c,0x18,0x00,0x03,0xad,\r
+0x68,0x15,0xa5,0x26,0xe2,0x63,0xa3,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x62,0x24,\r
+0xe2,0x63,0xa2,0xa0,0x18,0x00,0x04,0x8d,0xff,0x80,0x02,0x3c,0x20,0x00,0x45,0x26,\r
+0xff,0xff,0x42,0x34,0x7f,0x00,0x63,0x30,0xff,0xff,0xb2,0x30,0x24,0x20,0x82,0x00,\r
+0x00,0x1e,0x03,0x00,0x25,0xb0,0x02,0x3c,0xc0,0x00,0x42,0x34,0x25,0x20,0x83,0x00,\r
+0x07,0x00,0x45,0x32,0x18,0x00,0x04,0xad,0x00,0x00,0x52,0xa4,0x03,0x00,0xa0,0x10,\r
+0xff,0xff,0x42,0x32,0x08,0x00,0x42,0x26,0xff,0xff,0x42,0x30,0x68,0x15,0xb4,0x26,\r
+0xb4,0x65,0x86,0x8e,0xb8,0x65,0x90,0x8e,0xf8,0xff,0x52,0x30,0x21,0x10,0xd2,0x00,\r
+0x2b,0x10,0x02,0x02,0x31,0x00,0x40,0x10,0xff,0x00,0x33,0x31,0x23,0x80,0x06,0x02,\r
+0x21,0x28,0xc0,0x02,0xff,0xff,0x07,0x32,0x01,0x00,0x11,0x24,0x21,0x20,0x60,0x02,\r
+0x10,0x01,0x00,0x0c,0x10,0x00,0xb1,0xaf,0x23,0x18,0x50,0x02,0xff,0xff,0x72,0x30,\r
+0x22,0x10,0x02,0x3c,0x21,0x10,0x42,0x02,0x21,0x20,0x60,0x02,0x4d,0x01,0x00,0x0c,\r
+0xb4,0x65,0x82,0xae,0x21,0x28,0xd0,0x02,0x21,0x38,0x40,0x02,0x21,0x20,0x60,0x02,\r
+0x10,0x00,0xb1,0xaf,0x22,0x10,0x06,0x3c,0x10,0x01,0x00,0x0c,0x68,0x15,0xb1,0x26,\r
+0xb4,0x65,0x23,0x8e,0x25,0xb0,0x10,0x3c,0xb0,0x03,0x02,0x36,0x21,0x20,0x60,0x02,\r
+0x00,0x00,0x43,0xac,0x4d,0x01,0x00,0x0c,0x00,0x00,0x00,0x00,0xb4,0x65,0x25,0x8e,\r
+0xec,0x00,0x02,0x36,0xbd,0x00,0x04,0x36,0x00,0x00,0x45,0xac,0x00,0x00,0x83,0x90,\r
+0xc2,0x00,0x10,0x36,0x34,0x00,0xbf,0x8f,0x10,0x00,0x63,0x34,0x00,0x00,0x83,0xa0,\r
+0x30,0x00,0xb6,0x8f,0x00,0x00,0x05,0xa6,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,\r
+0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,\r
+0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27,0x21,0x28,0xc0,0x02,\r
+0x21,0x20,0x60,0x02,0x21,0x38,0x40,0x02,0x01,0x00,0x02,0x24,0x10,0x01,0x00,0x0c,\r
+0x10,0x00,0xa2,0xaf,0xb4,0x65,0x83,0x8e,0x68,0x15,0xb1,0x26,0x25,0xb0,0x10,0x3c,\r
+0x21,0x18,0x72,0x00,0xb4,0x65,0x83,0xae,0xb4,0x65,0x23,0x8e,0xb0,0x03,0x02,0x36,\r
+0x21,0x20,0x60,0x02,0x00,0x00,0x43,0xac,0x4d,0x01,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0xb4,0x65,0x25,0x8e,0xec,0x00,0x02,0x36,0xbd,0x00,0x04,0x36,0x00,0x00,0x45,0xac,\r
+0x00,0x00,0x83,0x90,0xc2,0x00,0x10,0x36,0x34,0x00,0xbf,0x8f,0x10,0x00,0x63,0x34,\r
+0x00,0x00,0x83,0xa0,0x30,0x00,0xb6,0x8f,0x00,0x00,0x05,0xa6,0x2c,0x00,0xb5,0x8f,\r
+0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,\r
+0x18,0x00,0xb0,0x8f,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27,\r
+0xe0,0xff,0xbd,0x27,0x25,0xb0,0x02,0x3c,0x14,0x00,0xb1,0xaf,0x18,0x00,0xbf,0xaf,\r
+0x10,0x00,0xb0,0xaf,0xbf,0x00,0x42,0x34,0x00,0x00,0x43,0x90,0x21,0x28,0x00,0x00,\r
+0x08,0x00,0x06,0x24,0x04,0x00,0x63,0x2c,0x12,0x00,0x60,0x14,0x21,0x88,0x80,0x00,\r
+0x00,0x60,0x02,0x40,0x01,0x00,0x41,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x02,0x80,0x03,0x3c,0x60,0x7b,0x63,0x24,0x04,0x00,0x64,0x8c,0x00,0x00,0x23,0xae,\r
+0x04,0x00,0x71,0xac,0x00,0x00,0x91,0xac,0x04,0x00,0x24,0xae,0x00,0x60,0x82,0x40,\r
+0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,\r
+0x20,0x00,0xbd,0x27,0x08,0x00,0x82,0x94,0x02,0x80,0x04,0x3c,0x58,0x45,0x00,0x0c,\r
+0x25,0x20,0x44,0x00,0x00,0x60,0x10,0x40,0x01,0x00,0x01,0x36,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0x08,0x00,0x25,0x8e,0x0c,0x00,0x26,0x96,0x14,0x00,0x27,0x96,\r
+0x95,0x07,0x00,0x0c,0x09,0x00,0x04,0x24,0x04,0x00,0x23,0x8e,0x00,0x00,0x22,0x8e,\r
+0x21,0x20,0x20,0x02,0x00,0x00,0x62,0xac,0x04,0x00,0x43,0xac,0x00,0x00,0x31,0xae,\r
+0x70,0x4f,0x00,0x0c,0x04,0x00,0x31,0xae,0x00,0x60,0x90,0x40,0x18,0x00,0xbf,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,\r
+0x02,0x80,0x02,0x3c,0x68,0x15,0x47,0x24,0xec,0x64,0xe3,0x90,0xff,0xff,0xa5,0x30,\r
+0x09,0x00,0xa3,0x10,0x21,0x20,0xc0,0x00,0x5c,0x65,0xe2,0x8c,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xc2,0xac,0x66,0x65,0xe3,0x94,0x0e,0x00,0x02,0x24,0x14,0x00,0xc2,0xac,\r
+0x30,0x08,0x00,0x08,0x0c,0x00,0xc3,0xac,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x2a,0xb0,0x04,0x3c,0x28,0x00,0x85,0x34,0x03,0x00,0x82,0x90,0x04,0x00,0x84,0x24,\r
+0x05,0x00,0x40,0x14,0x2b,0x18,0xa4,0x00,0xfb,0xff,0x60,0x10,0x01,0x00,0x02,0x24,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,\r
+0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,0x10,0x22,0x63,0x24,0x18,0x03,0x42,0x34,\r
+0xd0,0xff,0xbd,0x27,0x00,0x00,0x43,0xac,0x24,0x00,0xb3,0xaf,0x28,0x00,0xbf,0xaf,\r
+0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,0x78,0x08,0x00,0x0c,0x18,0x00,0xb0,0xaf,\r
+0x06,0x00,0x40,0x10,0x02,0x80,0x13,0x3c,0x68,0x15,0x63,0x26,0x76,0x4b,0x62,0x90,\r
+0x00,0x00,0x00,0x00,0x9b,0x00,0x40,0x14,0x00,0xc0,0x04,0x34,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x2a,0xb0,0x02,0x3c,0x36,0x00,0x42,0x34,\r
+0x00,0x00,0x43,0x90,0x68,0x15,0x66,0x26,0xbc,0x65,0xc5,0x8c,0xc0,0x18,0x03,0x00,\r
+0x23,0xb0,0x04,0x3c,0xf0,0x07,0x63,0x30,0xff,0x1f,0x02,0x3c,0x21,0x18,0x64,0x00,\r
+0xff,0xff,0x42,0x34,0x24,0x20,0x62,0x00,0x23,0x88,0x85,0x00,0x2b,0x38,0x85,0x00,\r
+0x00,0x04,0x22,0x26,0x60,0x65,0xc3,0x8c,0x0b,0x88,0x47,0x00,0x01,0x04,0x25,0x2e,\r
+0x5c,0x65,0xc3,0xac,0xc0,0x65,0xc4,0xac,0x66,0x65,0xc0,0xa4,0x11,0x00,0xa0,0x14,\r
+0x65,0x65,0xc0,0xa0,0x00,0xfc,0x83,0x24,0x23,0x10,0x02,0x3c,0x0b,0x18,0x87,0x00,\r
+0xff,0x03,0x42,0x34,0x2b,0x10,0x43,0x00,0x33,0x00,0x40,0x14,0x00,0x00,0x00,0x00,\r
+0x23,0x88,0x83,0x00,0x2b,0x10,0x83,0x00,0xbc,0x65,0xc3,0xac,0x03,0x00,0x40,0x10,\r
+0x01,0x04,0x25,0x2e,0x00,0x04,0x31,0x26,0x01,0x04,0x25,0x2e,0x0e,0x00,0xa0,0x10,\r
+0x68,0x15,0x70,0x26,0x68,0x15,0x70,0x26,0xc0,0x65,0x03,0x8e,0xbc,0x65,0x04,0x8e,\r
+0x00,0x00,0x00,0x00,0x2b,0x10,0x83,0x00,0x25,0x00,0x40,0x14,0x2b,0x10,0x64,0x00,\r
+0x51,0x00,0x40,0x14,0x25,0xb0,0x02,0x3c,0x80,0x00,0x03,0x24,0xd0,0x03,0x42,0x34,\r
+0x00,0x00,0x43,0xac,0x68,0x15,0x70,0x26,0xbc,0x65,0x03,0x96,0x2a,0xb0,0x02,0x3c,\r
+0x35,0x00,0x42,0x34,0xc2,0x88,0x03,0x00,0x00,0x00,0x51,0xa0,0x8e,0x12,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x66,0x65,0x03,0x96,0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,\r
+0x00,0x00,0x43,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0xfc,0x4a,0x02,0x8e,0x80,0x00,0x03,0x3c,0x41,0xb0,0x04,0x3c,\r
+0x25,0x10,0x43,0x00,0x00,0x00,0x82,0xac,0x28,0x00,0xbf,0x8f,0xfc,0x4a,0x02,0xae,\r
+0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x30,0x00,0xbd,0x27,0xb8,0x08,0x00,0x08,0x00,0xfc,0x63,0x24,\r
+0x5c,0x65,0x05,0x8e,0x21,0x30,0x80,0x00,0xff,0xff,0x27,0x32,0x09,0x00,0x04,0x24,\r
+0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x5c,0x65,0x03,0x8e,0x66,0x65,0x05,0x96,\r
+0xbc,0x65,0x02,0x8e,0x21,0x18,0x71,0x00,0x21,0x28,0x25,0x02,0x21,0x10,0x51,0x00,\r
+0x09,0x00,0x04,0x24,0xbc,0x65,0x02,0xae,0x5c,0x65,0x03,0xae,0x4d,0x01,0x00,0x0c,\r
+0x66,0x65,0x05,0xa6,0x68,0x15,0x70,0x26,0xbc,0x65,0x03,0x96,0x2a,0xb0,0x02,0x3c,\r
+0x35,0x00,0x42,0x34,0xc2,0x88,0x03,0x00,0x00,0x00,0x51,0xa0,0x8e,0x12,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x66,0x65,0x03,0x96,0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,\r
+0x00,0x00,0x43,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0xfc,0x4a,0x02,0x8e,0x80,0x00,0x03,0x3c,0x41,0xb0,0x04,0x3c,\r
+0x25,0x10,0x43,0x00,0x00,0x00,0x82,0xac,0x28,0x00,0xbf,0x8f,0xfc,0x4a,0x02,0xae,\r
+0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x30,0x00,0xbd,0x27,0xc4,0x65,0x02,0x8e,0x5c,0x65,0x05,0x8e,\r
+0x21,0x30,0x80,0x00,0x23,0x88,0x44,0x00,0xff,0xff,0x27,0x32,0x09,0x00,0x04,0x24,\r
+0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x5c,0x65,0x03,0x8e,0x66,0x65,0x02,0x96,\r
+0xc0,0x65,0x12,0x96,0x21,0x18,0x71,0x00,0x21,0x10,0x22,0x02,0x23,0x10,0x11,0x3c,\r
+0x5c,0x65,0x03,0xae,0x66,0x65,0x02,0xa6,0x0c,0x00,0x40,0x16,0xbc,0x65,0x11,0xae,\r
+0x09,0x00,0x04,0x24,0x4d,0x01,0x00,0x0c,0x68,0x15,0x70,0x26,0xfe,0x08,0x00,0x08,\r
+0x00,0x00,0x00,0x00,0x44,0x67,0x62,0x94,0x76,0x4b,0x60,0xa0,0xe3,0x18,0x00,0x0c,\r
+0x21,0x20,0x44,0x00,0x97,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x4d,0x01,0x00,0x0c,\r
+0x09,0x00,0x04,0x24,0x5c,0x65,0x05,0x8e,0x09,0x00,0x04,0x24,0x23,0x10,0x06,0x3c,\r
+0x21,0x38,0x40,0x02,0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x5c,0x65,0x03,0x8e,\r
+0x66,0x65,0x02,0x96,0x21,0x20,0x51,0x02,0x21,0x18,0x72,0x00,0x21,0x10,0x42,0x02,\r
+0xbc,0x65,0x04,0xae,0x09,0x00,0x04,0x24,0x5c,0x65,0x03,0xae,0x2d,0x09,0x00,0x08,\r
+0x66,0x65,0x02,0xa6,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x05,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x02,0x80,0x09,0x3c,\r
+0x68,0x15,0x28,0x25,0xe8,0x63,0x06,0x8d,0xff,0xff,0x02,0x34,0x3f,0x00,0xc2,0x10,\r
+0x21,0x38,0x80,0x00,0x2b,0x10,0xc7,0x00,0x30,0x00,0x40,0x10,0x02,0x19,0x06,0x00,\r
+0x21,0x10,0xc7,0x00,0x23,0x10,0x43,0x00,0x10,0x00,0x46,0x24,0xe8,0x63,0x06,0xad,\r
+0x68,0x15,0x26,0x25,0x04,0x40,0xc4,0x8c,0xec,0x63,0x02,0xad,0xff,0xff,0x02,0x34,\r
+0x2f,0x00,0x82,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x87,0x00,0x1f,0x00,0x40,0x10,\r
+0x02,0x19,0x04,0x00,0x21,0x10,0x87,0x00,0x23,0x10,0x43,0x00,0x10,0x00,0x44,0x24,\r
+0x04,0x40,0xc4,0xac,0xec,0x63,0xc2,0xac,0xc0,0x10,0x05,0x00,0x21,0x10,0x45,0x00,\r
+0x80,0x10,0x02,0x00,0x21,0x10,0x45,0x00,0x68,0x15,0x23,0x25,0x80,0x10,0x02,0x00,\r
+0x21,0x28,0x43,0x00,0x74,0x51,0xa6,0x8c,0x00,0x21,0x07,0x00,0xff,0xff,0xc2,0x38,\r
+0x0a,0x30,0x82,0x00,0x2b,0x18,0xc7,0x00,0x07,0x00,0x60,0x10,0x21,0x10,0xc7,0x00,\r
+0x02,0x19,0x06,0x00,0x23,0x10,0x43,0x00,0x10,0x00,0x46,0x24,0x74,0x51,0xa6,0xac,\r
+0x08,0x00,0xe0,0x03,0x78,0x51,0xa2,0xac,0x02,0x19,0x06,0x00,0x23,0x10,0x43,0x00,\r
+0x74,0x51,0xa2,0xac,0x08,0x00,0xe0,0x03,0x78,0x51,0xa2,0xac,0x21,0x10,0x87,0x00,\r
+0x23,0x10,0x43,0x00,0x69,0x09,0x00,0x08,0x04,0x40,0xc2,0xac,0x21,0x10,0xc7,0x00,\r
+0x68,0x15,0x26,0x25,0x04,0x40,0xc4,0x8c,0x23,0x10,0x43,0x00,0xe8,0x63,0x02,0xad,\r
+0xec,0x63,0x02,0xad,0xff,0xff,0x02,0x34,0xd4,0xff,0x82,0x14,0x2b,0x10,0x87,0x00,\r
+0x00,0x21,0x07,0x00,0x62,0x09,0x00,0x08,0x04,0x40,0xc4,0xac,0x00,0x31,0x04,0x00,\r
+0x55,0x09,0x00,0x08,0xe8,0x63,0x06,0xad,0x63,0x00,0x82,0x24,0x77,0x00,0x42,0x2c,\r
+0x00,0x00,0x85,0x28,0x04,0x00,0x40,0x10,0x21,0x18,0x00,0x00,0x64,0x00,0x82,0x24,\r
+0x64,0x00,0x03,0x24,0x0b,0x18,0x45,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,\r
+0x0c,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,0x3f,0x00,0x42,0x30,0x04,0x00,0x42,0x28,\r
+0x17,0x00,0x40,0x10,0x25,0xb0,0x02,0x3c,0x24,0x08,0x42,0x34,0x00,0x00,0x43,0x8c,\r
+0x00,0x00,0x00,0x00,0x00,0x02,0x63,0x30,0x16,0x00,0x60,0x14,0x01,0x00,0x02,0x24,\r
+0x05,0x00,0xa3,0x90,0x00,0x00,0x00,0x00,0x82,0x21,0x03,0x00,0x28,0x00,0x82,0x10,\r
+0xf5,0xff,0x02,0x24,0x02,0x00,0x82,0x28,0x39,0x00,0x40,0x14,0x02,0x00,0x02,0x24,\r
+0x2e,0x00,0x82,0x10,0xe9,0xff,0x02,0x24,0x03,0x00,0x02,0x24,0x24,0x00,0x82,0x10,\r
+0x3e,0x00,0x63,0x30,0x05,0x00,0xc4,0x24,0x96,0x09,0x00,0x08,0x00,0x00,0x00,0x00,\r
+0x04,0x00,0xa4,0x90,0x00,0x00,0x00,0x00,0x42,0x20,0x04,0x00,0x96,0x09,0x00,0x08,\r
+0x96,0xff,0x84,0x24,0x05,0x00,0xa3,0x90,0x00,0x00,0x00,0x00,0x60,0x00,0x64,0x30,\r
+0x42,0x21,0x04,0x00,0x0e,0x00,0x82,0x10,0x1f,0x00,0x62,0x30,0x02,0x00,0x82,0x28,\r
+0x1d,0x00,0x40,0x14,0x02,0x00,0x02,0x24,0x14,0x00,0x82,0x10,0x1f,0x00,0x62,0x30,\r
+0x03,0x00,0x02,0x24,0xeb,0xff,0x82,0x14,0x1f,0x00,0x62,0x30,0x40,0x10,0x02,0x00,\r
+0xdd,0xff,0x03,0x24,0x23,0x30,0x62,0x00,0xba,0x09,0x00,0x08,0x05,0x00,0xc4,0x24,\r
+0x40,0x10,0x02,0x00,0xf5,0xff,0x03,0x24,0xd2,0x09,0x00,0x08,0x23,0x30,0x62,0x00,\r
+0x3e,0x00,0x63,0x30,0x23,0x30,0x43,0x00,0xba,0x09,0x00,0x08,0x05,0x00,0xc4,0x24,\r
+0xdd,0xff,0x02,0x24,0xda,0x09,0x00,0x08,0x23,0x30,0x43,0x00,0x40,0x10,0x02,0x00,\r
+0xe9,0xff,0x03,0x24,0xd2,0x09,0x00,0x08,0x23,0x30,0x62,0x00,0x3e,0x00,0x63,0x30,\r
+0xda,0x09,0x00,0x08,0x23,0x30,0x43,0x00,0xd2,0xff,0x80,0x14,0x1f,0x00,0x62,0x30,\r
+0x40,0x10,0x02,0x00,0xf8,0xff,0x03,0x24,0xd2,0x09,0x00,0x08,0x23,0x30,0x62,0x00,\r
+0xcc,0xff,0x80,0x14,0x3e,0x00,0x63,0x30,0xf8,0xff,0x02,0x24,0xda,0x09,0x00,0x08,\r
+0x23,0x30,0x43,0x00,0xe0,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,0x18,0x00,0xbf,0xaf,\r
+0x14,0x00,0xb1,0xaf,0x0c,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,0x3f,0x00,0x42,0x30,\r
+0x04,0x00,0x42,0x28,0x29,0x00,0x40,0x14,0x21,0x80,0xa0,0x00,0x00,0x00,0xa4,0x8c,\r
+0x02,0x80,0x11,0x3c,0x3f,0x00,0x84,0x30,0x40,0x20,0x04,0x00,0x96,0x09,0x00,0x0c,\r
+0x96,0xff,0x84,0x24,0x68,0x15,0x25,0x26,0xf0,0x63,0xa4,0x8c,0x21,0x18,0x40,0x00,\r
+0xff,0xff,0x02,0x34,0x3c,0x00,0x82,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x83,0x00,\r
+0x27,0x00,0x40,0x10,0x21,0x10,0x83,0x00,0x21,0x18,0x83,0x00,0x02,0x11,0x04,0x00,\r
+0x23,0x20,0x62,0x00,0x10,0x00,0x84,0x24,0xf0,0x63,0xa4,0xac,0x00,0x00,0x04,0x8e,\r
+0x00,0x00,0x00,0x00,0xc2,0x21,0x04,0x00,0x7e,0x00,0x84,0x30,0x96,0x09,0x00,0x0c,\r
+0x96,0xff,0x84,0x24,0x68,0x15,0x25,0x26,0xf4,0x63,0xa4,0x8c,0x21,0x18,0x40,0x00,\r
+0xff,0xff,0x02,0x34,0x25,0x00,0x82,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x83,0x00,\r
+0x0b,0x00,0x40,0x10,0x21,0x10,0x83,0x00,0x21,0x18,0x83,0x00,0x02,0x11,0x04,0x00,\r
+0x23,0x20,0x62,0x00,0x10,0x00,0x84,0x24,0xf4,0x63,0xa4,0xac,0x18,0x00,0xbf,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,\r
+0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x02,0x19,0x04,0x00,\r
+0x23,0x10,0x43,0x00,0x20,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03,0xf4,0x63,0xa2,0xac,\r
+0x02,0x19,0x04,0x00,0x23,0x10,0x43,0x00,0xf0,0x63,0xa2,0xac,0x00,0x00,0x04,0x8e,\r
+0x00,0x00,0x00,0x00,0xc2,0x21,0x04,0x00,0x7e,0x00,0x84,0x30,0x96,0x09,0x00,0x0c,\r
+0x96,0xff,0x84,0x24,0x68,0x15,0x25,0x26,0xf4,0x63,0xa4,0x8c,0x21,0x18,0x40,0x00,\r
+0xff,0xff,0x02,0x34,0xde,0xff,0x82,0x14,0x2b,0x10,0x83,0x00,0x00,0x21,0x03,0x00,\r
+0x1b,0x0a,0x00,0x08,0xf4,0x63,0xa4,0xac,0x00,0x21,0x03,0x00,0x07,0x0a,0x00,0x08,\r
+0xf0,0x63,0xa4,0xac,0x98,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c,0x58,0x00,0xb6,0xaf,\r
+0x64,0x00,0xbf,0xaf,0x60,0x00,0xbe,0xaf,0x5c,0x00,0xb7,0xaf,0x54,0x00,0xb5,0xaf,\r
+0x50,0x00,0xb4,0xaf,0x4c,0x00,0xb3,0xaf,0x48,0x00,0xb2,0xaf,0x44,0x00,0xb1,0xaf,\r
+0x40,0x00,0xb0,0xaf,0x68,0x15,0x56,0x24,0x25,0xb0,0x03,0x3c,0x04,0x01,0x62,0x34,\r
+0x00,0x00,0x43,0x8c,0xa4,0x65,0xc7,0x8e,0x00,0x00,0x00,0x00,0x34,0x00,0xe3,0x10,\r
+0xa8,0x65,0xc3,0xae,0x2b,0x10,0x67,0x00,0xaa,0x00,0x40,0x14,0x2b,0x10,0xe3,0x00,\r
+0xd4,0x00,0x40,0x14,0x02,0x80,0x02,0x3c,0x68,0x15,0x44,0x24,0x78,0x65,0x83,0x94,\r
+0x02,0x80,0x02,0x3c,0x21,0x88,0x00,0x00,0x19,0x00,0x40,0x1a,0x25,0x98,0x62,0x00,\r
+0x21,0xf0,0x80,0x00,0x21,0xb8,0x80,0x00,0x01,0x00,0x15,0x24,0x21,0x20,0x00,0x00,\r
+0x21,0x80,0x93,0x00,0x00,0x00,0x05,0x8e,0x00,0x00,0x00,0x00,0x07,0x00,0xa0,0x10,\r
+0x01,0x00,0x22,0x26,0x04,0x00,0x02,0x8e,0x00,0xf0,0x03,0x3c,0x00,0x20,0x04,0x3c,\r
+0x24,0x10,0x43,0x00,0x1f,0x00,0x44,0x10,0x06,0x00,0x22,0x26,0xff,0xff,0x51,0x30,\r
+0x82,0x16,0x05,0x00,0x01,0x00,0x42,0x30,0x35,0x00,0x55,0x10,0x00,0x00,0x00,0x00,\r
+0x80,0x20,0x11,0x00,0x2a,0x10,0x92,0x00,0xed,0xff,0x40,0x14,0x00,0x00,0x00,0x00,\r
+0x38,0x00,0xa4,0x8f,0x70,0x4f,0x00,0x0c,0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,\r
+0x08,0x04,0x44,0x24,0x21,0x28,0x00,0x00,0x21,0x30,0x00,0x00,0xfe,0x1f,0x00,0x0c,\r
+0x21,0x38,0x00,0x00,0x25,0xb0,0x03,0x3c,0x04,0x01,0x62,0x34,0x00,0x00,0x43,0x8c,\r
+0xa4,0x65,0xc7,0x8e,0x00,0x00,0x00,0x00,0xce,0xff,0xe3,0x14,0xa8,0x65,0xc3,0xae,\r
+0x25,0xb0,0x03,0x3c,0x00,0x01,0x62,0x34,0x00,0x00,0x47,0xac,0x7f,0x0a,0x00,0x08,\r
+0xa4,0x65,0xc7,0xae,0xbc,0x4c,0xc2,0x8f,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24,\r
+0xbc,0x4c,0xc2,0xaf,0x0c,0x00,0x04,0x8e,0x0c,0x00,0x02,0x24,0x3f,0x00,0x83,0x30,\r
+0x65,0x00,0x62,0x10,0x21,0x28,0xc0,0x03,0x3f,0x00,0x83,0x30,0x0d,0x00,0x02,0x24,\r
+0x5a,0x00,0x62,0x10,0x00,0x00,0x00,0x00,0x3f,0x00,0x83,0x30,0x0e,0x00,0x02,0x24,\r
+0x04,0x00,0x62,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x8e,0x73,0x0a,0x00,0x08,\r
+0x06,0x00,0x22,0x26,0xc8,0x4c,0xc2,0x8f,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24,\r
+0xc8,0x4c,0xc2,0xaf,0x00,0x00,0x05,0x8e,0x73,0x0a,0x00,0x08,0x06,0x00,0x22,0x26,\r
+0x00,0x40,0xe2,0x8e,0x00,0x00,0x00,0x00,0x02,0x12,0x02,0x00,0x0f,0x00,0x42,0x30,\r
+0x05,0x00,0x55,0x10,0xc2,0x13,0x05,0x00,0x1e,0x00,0x42,0x30,0x21,0x10,0x51,0x00,\r
+0x78,0x0a,0x00,0x08,0xff,0xff,0x51,0x30,0x02,0x40,0xe2,0x92,0x00,0x00,0x00,0x00,\r
+0x1f,0x00,0x40,0x14,0x02,0x80,0x03,0x3c,0x04,0x00,0x03,0x8e,0x00,0x00,0x00,0x00,\r
+0x02,0x14,0x03,0x00,0x0f,0x00,0x42,0x30,0x18,0x00,0x40,0x14,0x02,0x17,0x03,0x00,\r
+0x03,0x00,0x44,0x30,0x08,0x00,0x80,0x10,0x00,0xc0,0x02,0x3c,0x24,0x10,0x62,0x00,\r
+0x12,0x00,0x40,0x14,0x03,0x00,0x02,0x24,0x11,0x00,0x82,0x10,0x02,0x80,0x03,0x3c,\r
+0x10,0x00,0x80,0x10,0x68,0x15,0x63,0x24,0x80,0x10,0x11,0x00,0x21,0xa0,0x53,0x00,\r
+0xec,0xff,0x83,0x8e,0x25,0xb0,0x02,0x3c,0xd4,0x02,0x42,0x34,0x21,0x28,0x80,0x02,\r
+0x21,0x20,0x00,0x02,0x00,0x00,0x43,0xac,0xa0,0x09,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x21,0x20,0x40,0x00,0x4f,0x09,0x00,0x0c,0x21,0x28,0x00,0x00,0x02,0x80,0x03,0x3c,\r
+0x68,0x15,0x63,0x24,0x02,0x40,0x62,0x90,0x00,0x00,0x00,0x00,0x88,0x00,0x55,0x10,\r
+0x00,0x00,0x00,0x00,0x02,0x80,0x04,0x3c,0x68,0x15,0x84,0x24,0x02,0x40,0x83,0x90,\r
+0x02,0x00,0x02,0x24,0x6a,0x00,0x62,0x10,0x00,0x00,0x00,0x00,0x25,0xb0,0x03,0x3c,\r
+0x4c,0x00,0x63,0x34,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,0x03,0x00,0x42,0x30,\r
+0x08,0x00,0x55,0x10,0x02,0x80,0x04,0x3c,0x00,0x00,0x05,0x8e,0x00,0x00,0x00,0x00,\r
+0xc2,0x13,0x05,0x00,0x1e,0x00,0x42,0x30,0x21,0x10,0x51,0x00,0x78,0x0a,0x00,0x08,\r
+0xff,0xff,0x51,0x30,0xd0,0x02,0x02,0x24,0x68,0x15,0x84,0x24,0xe8,0x63,0x82,0xac,\r
+0x00,0x00,0x05,0x8e,0xed,0x0a,0x00,0x08,0xc2,0x13,0x05,0x00,0xc4,0x4c,0xa2,0x8c,\r
+0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24,0xc4,0x4c,0xa2,0xac,0x0c,0x00,0x04,0x8e,\r
+0x9f,0x0a,0x00,0x08,0x3f,0x00,0x83,0x30,0xc0,0x4c,0xc2,0x8f,0x00,0x00,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xc0,0x4c,0xc2,0xaf,0x0c,0x00,0x04,0x8e,0x9b,0x0a,0x00,0x08,\r
+0x3f,0x00,0x83,0x30,0xac,0x65,0xc2,0x8e,0xff,0xff,0x71,0x30,0x23,0x10,0x47,0x00,\r
+0xff,0xff,0x50,0x30,0x21,0x18,0x11,0x02,0xff,0xff,0x72,0x30,0x54,0x4f,0x00,0x0c,\r
+0x21,0x20,0x40,0x02,0x7d,0x00,0x40,0x10,0x38,0x00,0xa2,0xaf,0x38,0x00,0xa3,0x8f,\r
+0xa4,0x65,0xc6,0x8e,0x21,0x38,0x00,0x02,0x08,0x00,0x62,0x8c,0x08,0x00,0x04,0x24,\r
+0x10,0x00,0xa0,0xaf,0x21,0x18,0x52,0x00,0x21,0x28,0x40,0x00,0x74,0x65,0xc3,0xae,\r
+0x10,0x01,0x00,0x0c,0x78,0x65,0xc2,0xae,0x4d,0x01,0x00,0x0c,0x08,0x00,0x04,0x24,\r
+0x78,0x65,0xc5,0x8e,0x25,0xb0,0x04,0x3c,0x24,0x10,0x02,0x3c,0x21,0x28,0xb0,0x00,\r
+0x00,0x01,0x90,0x34,0x00,0x00,0x02,0xae,0x21,0x38,0x20,0x02,0x08,0x00,0x04,0x24,\r
+0x24,0x10,0x06,0x3c,0xa4,0x65,0xc2,0xae,0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,\r
+0xa8,0x65,0xc3,0x8e,0x08,0x00,0x04,0x24,0x4d,0x01,0x00,0x0c,0xa4,0x65,0xc3,0xae,\r
+0xa4,0x65,0xc2,0x8e,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0xae,0x5e,0x0a,0x00,0x08,\r
+0x02,0x80,0x02,0x3c,0x23,0x10,0x67,0x00,0xff,0xff,0x52,0x30,0x54,0x4f,0x00,0x0c,\r
+0x21,0x20,0x40,0x02,0x5c,0x00,0x40,0x10,0x38,0x00,0xa2,0xaf,0x38,0x00,0xa3,0x8f,\r
+0xa4,0x65,0xc6,0x8e,0x08,0x00,0x04,0x24,0x08,0x00,0x62,0x8c,0x21,0x38,0x40,0x02,\r
+0x10,0x00,0xa0,0xaf,0x21,0x18,0x52,0x00,0x21,0x28,0x40,0x00,0x74,0x65,0xc3,0xae,\r
+0x10,0x01,0x00,0x0c,0x78,0x65,0xc2,0xae,0xa8,0x65,0xc3,0x8e,0x08,0x00,0x04,0x24,\r
+0x4d,0x01,0x00,0x0c,0xa4,0x65,0xc3,0xae,0xa4,0x65,0xc3,0x8e,0x25,0xb0,0x04,0x3c,\r
+0x00,0x01,0x82,0x34,0x00,0x00,0x43,0xac,0x5e,0x0a,0x00,0x08,0x02,0x80,0x02,0x3c,\r
+0x04,0x00,0x03,0x8e,0x00,0x00,0x00,0x00,0x02,0x14,0x03,0x00,0x0f,0x00,0x42,0x30,\r
+0x08,0x00,0x42,0x28,0x91,0xff,0x40,0x10,0x02,0x17,0x03,0x00,0x03,0x00,0x42,0x30,\r
+0x8e,0xff,0x40,0x14,0x80,0x10,0x11,0x00,0x21,0xa0,0x53,0x00,0xec,0xff,0x83,0x8e,\r
+0x25,0xb0,0x02,0x3c,0xd4,0x02,0x42,0x34,0x21,0x28,0x80,0x02,0x21,0x20,0x00,0x02,\r
+0x00,0x00,0x43,0xac,0xa0,0x09,0x00,0x0c,0x00,0x00,0x00,0x00,0x21,0x20,0x40,0x00,\r
+0x4f,0x09,0x00,0x0c,0x21,0x28,0x00,0x00,0xe4,0x0a,0x00,0x08,0x25,0xb0,0x03,0x3c,\r
+0x04,0x00,0x03,0x8e,0x00,0x00,0x00,0x00,0x02,0x14,0x03,0x00,0x0f,0x00,0x42,0x30,\r
+0x08,0x00,0x42,0x28,0x06,0x00,0x40,0x10,0x00,0xc0,0x02,0x3c,0x02,0x17,0x03,0x00,\r
+0x03,0x00,0x42,0x30,0x0c,0x00,0x40,0x10,0x80,0x10,0x11,0x00,0x00,0xc0,0x02,0x3c,\r
+0x24,0x10,0x62,0x00,0x6c,0xff,0x40,0x14,0x02,0x80,0x04,0x3c,0x02,0x17,0x03,0x00,\r
+0x03,0x00,0x42,0x30,0x03,0x00,0x03,0x24,0x68,0xff,0x43,0x10,0x68,0x15,0x84,0x24,\r
+0x64,0xff,0x40,0x10,0x80,0x10,0x11,0x00,0x21,0xa0,0x53,0x00,0xec,0xff,0x83,0x8e,\r
+0x25,0xb0,0x02,0x3c,0xd4,0x02,0x42,0x34,0x21,0x20,0x00,0x02,0x21,0x28,0x80,0x02,\r
+0x00,0x00,0x43,0xac,0xa0,0x09,0x00,0x0c,0x00,0x00,0x00,0x00,0x21,0x20,0x40,0x00,\r
+0x4f,0x09,0x00,0x0c,0x21,0x28,0x00,0x00,0x21,0x20,0x00,0x02,0xf1,0x09,0x00,0x0c,\r
+0x21,0x28,0x80,0x02,0xde,0x0a,0x00,0x08,0x02,0x80,0x04,0x3c,0x25,0xb0,0x04,0x3c,\r
+0x44,0x44,0x02,0x3c,0xbc,0x02,0x83,0x34,0x44,0x44,0x42,0x34,0x00,0x00,0x62,0xac,\r
+0x80,0x0a,0x00,0x08,0x02,0x80,0x02,0x3c,0xa8,0x65,0xc5,0x8e,0x25,0xb0,0x02,0x3c,\r
+0x00,0x01,0x43,0x34,0xbc,0x02,0x44,0x34,0x66,0x66,0x02,0x3c,0x66,0x66,0x42,0x34,\r
+0x00,0x00,0x65,0xac,0x00,0x00,0x82,0xac,0x7f,0x0a,0x00,0x08,0xa4,0x65,0xc5,0xae,\r
+0x25,0xb0,0x06,0x3c,0x00,0x80,0x02,0x3c,0x2a,0xb0,0x04,0x3c,0x18,0x03,0xc5,0x34,\r
+0x70,0x2e,0x42,0x24,0x00,0x00,0xa2,0xac,0x22,0x00,0x83,0x34,0x1a,0x00,0x85,0x34,\r
+0x00,0x00,0x67,0x94,0x06,0x00,0x84,0x34,0x00,0x00,0xa2,0x94,0x00,0x00,0x83,0x94,\r
+0xff,0x00,0xed,0x30,0xff,0x00,0x42,0x30,0x21,0x68,0x4d,0x00,0xff,0x00,0x63,0x30,\r
+0x21,0x68,0x6d,0x00,0x68,0x03,0xc2,0x34,0x02,0x80,0x07,0x3c,0x00,0x00,0x4d,0xa4,\r
+0x68,0x15,0xe7,0x24,0xc6,0x00,0xc3,0x34,0xca,0x00,0xc4,0x34,0x00,0x00,0x6b,0x90,\r
+0x60,0x4b,0xe5,0x8c,0x00,0x00,0x82,0x90,0xcc,0x00,0xc3,0x34,0x00,0x00,0x68,0x90,\r
+0xd4,0x00,0xc4,0x34,0x64,0x4b,0xe3,0x8c,0x00,0x00,0x8a,0x90,0x61,0x4b,0xec,0x90,\r
+0xff,0x00,0x04,0x3c,0x00,0x4a,0x0d,0x00,0x23,0x48,0x2d,0x01,0x24,0x28,0xa4,0x00,\r
+0xff,0x00,0x6d,0x31,0xff,0x00,0x42,0x30,0x21,0x10,0xa2,0x01,0x24,0x18,0x64,0x00,\r
+0x02,0x2c,0x05,0x00,0x69,0x4b,0xe4,0x90,0xff,0x00,0x08,0x31,0x21,0x60,0x85,0x01,\r
+0x02,0x1c,0x03,0x00,0x21,0x10,0x48,0x00,0xff,0x00,0x4a,0x31,0x21,0x10,0x4a,0x00,\r
+0x21,0x60,0x83,0x01,0x21,0x60,0x84,0x01,0xff,0xff,0x4d,0x30,0x23,0x18,0x8d,0x01,\r
+0xff,0xff,0x6c,0x30,0xff,0xff,0x29,0x31,0x6a,0x03,0xc2,0x34,0x6c,0x03,0xc3,0x34,\r
+0x1f,0x03,0xc5,0x34,0x2b,0x20,0x2c,0x01,0x6e,0x03,0xc6,0x34,0x00,0x00,0x49,0xa4,\r
+0x00,0x00,0x6d,0xa4,0x00,0x00,0xcc,0xa4,0x05,0x00,0x80,0x10,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0xa3,0x90,0x80,0xff,0x02,0x24,0x25,0x18,0x62,0x00,0x00,0x00,0xa3,0xa0,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x60,0x02,0x40,0x01,0x00,0x41,0x34,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x02,0x80,0x03,0x3c,0x70,0x9a,0x64,0xac,\r
+0x00,0x60,0x82,0x40,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,\r
+0x70,0x9a,0x45,0x8c,0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,0x18,0x03,0x42,0x34,\r
+0xac,0x2f,0x63,0x24,0x00,0x00,0x43,0xac,0x04,0x00,0x02,0x24,0x1e,0x00,0xa2,0x10,\r
+0x05,0x00,0xa2,0x2c,0x10,0x00,0x40,0x10,0x05,0x00,0x02,0x24,0x03,0x00,0x02,0x24,\r
+0x08,0x00,0xa2,0x10,0x00,0x19,0x04,0x00,0x80,0x10,0x04,0x00,0x21,0x10,0x44,0x00,\r
+0xc0,0x10,0x02,0x00,0x23,0x10,0x44,0x00,0x00,0x11,0x02,0x00,0x21,0x10,0x44,0x00,\r
+0x40,0x19,0x02,0x00,0xff,0xff,0x63,0x24,0xfe,0xff,0x60,0x14,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xf3,0xff,0xa2,0x10,0x06,0x00,0x02,0x24,\r
+0xf2,0xff,0xa2,0x14,0x80,0x10,0x04,0x00,0x40,0x11,0x04,0x00,0x23,0x10,0x44,0x00,\r
+0x80,0x10,0x02,0x00,0x21,0x10,0x44,0x00,0x00,0x19,0x02,0x00,0x23,0x18,0x62,0x00,\r
+0x01,0x0c,0x00,0x08,0x00,0x19,0x03,0x00,0x80,0x10,0x04,0x00,0x21,0x10,0x44,0x00,\r
+0xc0,0x10,0x02,0x00,0x23,0x10,0x44,0x00,0x00,0x11,0x02,0x00,0x21,0x10,0x44,0x00,\r
+0x01,0x0c,0x00,0x08,0x00,0x19,0x02,0x00,0x02,0x80,0x02,0x3c,0x70,0x9a,0x45,0x8c,\r
+0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,0x18,0x03,0x42,0x34,0x68,0x30,0x63,0x24,\r
+0x00,0x00,0x43,0xac,0x05,0x00,0x02,0x24,0x10,0x00,0xa2,0x10,0x06,0x00,0xa2,0x2c,\r
+0x09,0x00,0x40,0x14,0x04,0x00,0x02,0x24,0x06,0x00,0x02,0x24,0x0f,0x00,0xa2,0x10,\r
+0x00,0x11,0x04,0x00,0xff,0xff,0x84,0x24,0xfe,0xff,0x80,0x14,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xfa,0xff,0xa2,0x14,0x80,0x10,0x04,0x00,\r
+0x21,0x10,0x44,0x00,0x29,0x0c,0x00,0x08,0x40,0x20,0x02,0x00,0x80,0x10,0x04,0x00,\r
+0x21,0x10,0x44,0x00,0x29,0x0c,0x00,0x08,0x80,0x20,0x02,0x00,0x23,0x10,0x44,0x00,\r
+0x29,0x0c,0x00,0x08,0x40,0x20,0x02,0x00,0xff,0xff,0x85,0x30,0x21,0x30,0x00,0x00,\r
+0x25,0xb0,0x03,0x3c,0x2a,0xb0,0x04,0x3c,0xb4,0x00,0x63,0x34,0x01,0x00,0xa2,0x24,\r
+0x31,0x00,0x84,0x34,0x00,0x00,0x65,0xa0,0x00,0x00,0x85,0xa0,0xff,0xff,0x45,0x30,\r
+0x12,0x00,0xa0,0x10,0x01,0x00,0x03,0x24,0x28,0xb0,0x07,0x3c,0x4f,0x0c,0x00,0x08,\r
+0xff,0xff,0x08,0x24,0x00,0x00,0x83,0xa0,0x01,0x00,0x63,0x24,0xff,0xff,0x63,0x30,\r
+0x2b,0x10,0xa3,0x00,0x09,0x00,0x40,0x14,0x08,0x00,0xc6,0x24,0xf9,0xff,0x65,0x14,\r
+0x21,0x20,0xc7,0x00,0x01,0x00,0x63,0x24,0xff,0xff,0x63,0x30,0x2b,0x10,0xa3,0x00,\r
+0x00,0x00,0x88,0xa0,0xf9,0xff,0x40,0x10,0x08,0x00,0xc6,0x24,0x00,0x01,0xa2,0x2c,\r
+0x13,0x00,0x40,0x10,0x21,0x18,0xa0,0x00,0xff,0x00,0x08,0x24,0x28,0xb0,0x07,0x3c,\r
+0x63,0x0c,0x00,0x08,0xff,0xff,0x09,0x24,0xff,0xff,0x43,0x30,0x00,0x00,0xa2,0xa0,\r
+0x00,0x01,0x62,0x2c,0x0a,0x00,0x40,0x10,0x08,0x00,0xc6,0x24,0x01,0x00,0x62,0x24,\r
+0xf9,0xff,0x68,0x14,0x21,0x28,0xc7,0x00,0x00,0x01,0x02,0x24,0xff,0xff,0x43,0x30,\r
+0x00,0x01,0x62,0x2c,0x00,0x00,0xa9,0xa0,0xf8,0xff,0x40,0x14,0x08,0x00,0xc6,0x24,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xd0,0xff,0xbd,0x27,0x28,0x00,0xbf,0xaf,\r
+0x24,0x00,0xb5,0xaf,0x20,0x00,0xb4,0xaf,0x1c,0x00,0xb3,0xaf,0x18,0x00,0xb2,0xaf,\r
+0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x00,0x60,0x12,0x40,0x01,0x00,0x41,0x36,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x25,0xb0,0x10,0x3c,0x42,0x00,0x15,0x36,\r
+0xff,0xff,0x02,0x24,0x00,0x00,0xa2,0xa2,0xd8,0x00,0x05,0x36,0x40,0x00,0x11,0x36,\r
+0xa8,0x00,0x14,0x36,0xa0,0x00,0x13,0x36,0x00,0x10,0x03,0x24,0xa4,0x00,0x10,0x36,\r
+0x00,0x80,0x02,0x3c,0x00,0x00,0x23,0xa6,0x00,0x00,0xa0,0xa0,0x00,0x00,0x60,0xae,\r
+0x00,0x00,0x00,0xae,0x00,0x00,0x82,0xae,0x00,0x00,0xa3,0x90,0x80,0xff,0x02,0x24,\r
+0xfd,0x00,0x04,0x24,0x25,0x18,0x62,0x00,0xfc,0x17,0x02,0x24,0x00,0x00,0xa3,0xa0,\r
+0x00,0x00,0x22,0xa6,0x3a,0x0c,0x00,0x0c,0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,\r
+0x68,0x15,0x42,0x24,0x68,0x4b,0x45,0x8c,0x60,0x4b,0x43,0x8c,0x64,0x4b,0x44,0x8c,\r
+0xfc,0x37,0x02,0x24,0x00,0x00,0x63,0xae,0x00,0x00,0x04,0xae,0x00,0x00,0x85,0xae,\r
+0x00,0x00,0x22,0xa6,0x00,0x00,0xa0,0xa2,0x00,0x60,0x92,0x40,0x28,0x00,0xbf,0x8f,\r
+0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x30,0x00,0xbd,0x27,\r
+0xc8,0xff,0xbd,0x27,0x34,0x00,0xbf,0xaf,0x30,0x00,0xbe,0xaf,0x2c,0x00,0xb7,0xaf,\r
+0x28,0x00,0xb6,0xaf,0x24,0x00,0xb5,0xaf,0x20,0x00,0xb4,0xaf,0x1c,0x00,0xb3,0xaf,\r
+0x18,0x00,0xb2,0xaf,0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x00,0x60,0x16,0x40,\r
+0x01,0x00,0xc1,0x36,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x25,0xb0,0x11,0x3c,\r
+0x40,0x00,0x30,0x36,0xff,0xff,0x02,0x24,0x42,0x00,0x3e,0x36,0xfc,0x77,0x13,0x24,\r
+0x00,0x00,0xc2,0xa3,0xfc,0x57,0x12,0x24,0x00,0x00,0x13,0xa6,0x1a,0x0c,0x00,0x0c,\r
+0x32,0x00,0x04,0x24,0xfc,0x37,0x17,0x24,0x32,0x00,0x04,0x24,0x00,0x00,0x12,0xa6,\r
+0x1a,0x0c,0x00,0x0c,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x24,0x00,0x00,0x17,0xa6,\r
+0x1a,0x0c,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0xa6,0x1a,0x0c,0x00,0x0c,\r
+0x32,0x00,0x04,0x24,0x32,0x00,0x04,0x24,0x00,0x00,0x12,0xa6,0x1a,0x0c,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x96,0x24,0xfa,0x03,0x24,0xd8,0x00,0x25,0x36,\r
+0x24,0x10,0x43,0x00,0x00,0x00,0x02,0xa6,0x00,0x00,0xa3,0x90,0xa0,0x00,0x34,0x36,\r
+0xa4,0x00,0x35,0x36,0xa8,0x00,0x33,0x36,0x7f,0x00,0x63,0x30,0x00,0x80,0x02,0x3c,\r
+0x00,0x00,0xa3,0xa0,0x00,0x00,0x80,0xae,0x00,0x00,0xa0,0xae,0x00,0x00,0x62,0xae,\r
+0x00,0x00,0xa3,0x90,0x80,0xff,0x02,0x24,0xfd,0x00,0x04,0x24,0x25,0x18,0x62,0x00,\r
+0x00,0x00,0xa3,0xa0,0x00,0x00,0x12,0xa6,0x3a,0x0c,0x00,0x0c,0x56,0x01,0x31,0x36,\r
+0x02,0x80,0x02,0x3c,0x68,0x15,0x42,0x24,0x68,0x4b,0x45,0x8c,0x60,0x4b,0x43,0x8c,\r
+0x64,0x4b,0x44,0x8c,0xff,0x0f,0x02,0x24,0x00,0x00,0x83,0xae,0x00,0x00,0xa4,0xae,\r
+0x00,0x00,0x65,0xae,0x00,0x00,0x17,0xa6,0x00,0x00,0x22,0xa6,0x00,0x00,0xc0,0xa3,\r
+0x00,0x60,0x96,0x40,0x34,0x00,0xbf,0x8f,0x30,0x00,0xbe,0x8f,0x2c,0x00,0xb7,0x8f,\r
+0x28,0x00,0xb6,0x8f,0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f,\r
+0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,\r
+0x38,0x00,0xbd,0x27,0xd0,0xff,0xbd,0x27,0x2c,0x00,0xbf,0xaf,0x28,0x00,0xb6,0xaf,\r
+0x24,0x00,0xb5,0xaf,0x20,0x00,0xb4,0xaf,0x1c,0x00,0xb3,0xaf,0x18,0x00,0xb2,0xaf,\r
+0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x25,0xb0,0x10,0x3c,0x40,0x00,0x05,0x36,\r
+0x00,0x00,0xa2,0x94,0xaf,0xff,0x03,0x24,0xa8,0x00,0x13,0x36,0x24,0x10,0x43,0x00,\r
+0x00,0x00,0xa2,0xa4,0xa0,0x00,0x12,0x36,0xa4,0x00,0x10,0x36,0x00,0x00,0x55,0x8e,\r
+0x00,0x00,0x16,0x8e,0x00,0x00,0x71,0x8e,0x00,0x80,0x14,0x3c,0xfc,0x37,0x02,0x24,\r
+0x00,0x00,0x40,0xae,0xfd,0x00,0x04,0x24,0x00,0x00,0x00,0xae,0x21,0x88,0x34,0x02,\r
+0x00,0x00,0x74,0xae,0x00,0x00,0xa2,0xa4,0x3a,0x0c,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x55,0xae,0x00,0x00,0x16,0xae,0x00,0x00,0x71,0xae,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x2c,0x00,0xbf,0x8f,0x28,0x00,0xb6,0x8f,\r
+0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x30,0x00,0xbd,0x27,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x25,0xb0,0x04,0x3c,0x40,0x00,0x84,0x34,0x00,0x00,0x82,0x94,0xd8,0xfd,0x03,0x24,\r
+0x24,0x10,0x43,0x00,0xfc,0x37,0x03,0x24,0x00,0x00,0x82,0xa4,0x00,0x00,0x83,0xa4,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x8c,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0xff,0xff,0xc6,0x30,0x10,0x00,0x02,0x24,0x0c,0x00,0xc2,0x10,0x11,0x00,0xc3,0x28,\r
+0x06,0x00,0x60,0x10,0x20,0x00,0x02,0x24,0x08,0x00,0x02,0x24,0x0d,0x00,0xc2,0x10,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x06,0x00,0xc2,0x10,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x85,0xa4,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x85,0xac,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x85,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,\r
+0x25,0xb0,0x02,0x3c,0x0a,0x00,0x42,0x34,0x00,0x00,0x43,0x90,0xff,0xff,0xa5,0x24,\r
+0x00,0x2c,0x05,0x00,0xfd,0x00,0x63,0x30,0x03,0x2c,0x05,0x00,0xff,0xff,0x87,0x30,\r
+0x00,0x00,0x43,0xa0,0x1a,0x00,0xa0,0x04,0x00,0x00,0x00,0x00,0x21,0x30,0x40,0x00,\r
+0x07,0x10,0xa7,0x00,0x01,0x00,0x42,0x30,0xfd,0x00,0x64,0x30,0x00,0x00,0x42,0x38,\r
+0x02,0x00,0x63,0x34,0x0a,0x18,0x82,0x00,0x00,0x00,0xc3,0xa0,0x04,0x00,0x63,0x34,\r
+0x00,0x00,0xc3,0xa0,0x09,0x00,0x02,0x24,0xff,0xff,0x42,0x24,0xff,0xff,0x41,0x04,\r
+0xff,0xff,0x42,0x24,0xfb,0x00,0x63,0x30,0x00,0x00,0xc3,0xa0,0x04,0x00,0x02,0x24,\r
+0xff,0xff,0x42,0x24,0xff,0xff,0x41,0x04,0xff,0xff,0x42,0x24,0xff,0xff,0xa2,0x24,\r
+0x00,0x2c,0x02,0x00,0x03,0x2c,0x05,0x00,0xea,0xff,0xa1,0x04,0x07,0x10,0xa7,0x00,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x25,0xb0,0x02,0x3c,0x0a,0x00,0x42,0x34,\r
+0x00,0x00,0x43,0x90,0xff,0xff,0x84,0x24,0x00,0x24,0x04,0x00,0x03,0x24,0x04,0x00,\r
+0xff,0x00,0x65,0x30,0x1d,0x00,0x80,0x04,0x21,0x38,0x00,0x00,0x21,0x30,0x40,0x00,\r
+0x01,0x00,0x08,0x24,0x04,0x00,0xa5,0x34,0x00,0x00,0xc5,0xa0,0x00,0x00,0xc2,0x90,\r
+0x00,0x00,0x00,0x00,0xff,0x00,0x45,0x30,0x01,0x00,0xa3,0x30,0x05,0x00,0x60,0x10,\r
+0x04,0x00,0x02,0x24,0x04,0x10,0x88,0x00,0x25,0x10,0x47,0x00,0xff,0xff,0x47,0x30,\r
+0x04,0x00,0x02,0x24,0xff,0xff,0x42,0x24,0xff,0xff,0x41,0x04,0xff,0xff,0x42,0x24,\r
+0xfb,0x00,0xa5,0x30,0x00,0x00,0xc5,0xa0,0x09,0x00,0x02,0x24,0xff,0xff,0x42,0x24,\r
+0xff,0xff,0x41,0x04,0xff,0xff,0x42,0x24,0xff,0xff,0x82,0x24,0x00,0x24,0x02,0x00,\r
+0x03,0x24,0x04,0x00,0xe7,0xff,0x81,0x04,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0xe0,0x00,0xe0,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,0x25,0xb0,0x10,0x3c,\r
+0x0a,0x00,0x10,0x36,0x18,0x00,0xbf,0xaf,0x14,0x00,0xb1,0xaf,0x00,0x00,0x02,0x92,\r
+0xff,0xff,0x91,0x30,0x03,0x00,0x05,0x24,0xc0,0x00,0x42,0x30,0x80,0x00,0x43,0x34,\r
+0x00,0x00,0x03,0xa2,0x04,0x00,0x63,0x34,0x00,0x00,0x03,0xa2,0xfb,0x00,0x63,0x30,\r
+0x00,0x00,0x03,0xa2,0x08,0x00,0x63,0x34,0x00,0x00,0x03,0xa2,0x04,0x00,0x63,0x34,\r
+0x00,0x00,0x03,0xa2,0xfb,0x00,0x63,0x30,0x00,0x00,0x03,0xa2,0x64,0x0d,0x00,0x0c,\r
+0x06,0x00,0x04,0x24,0x42,0x20,0x11,0x00,0x64,0x0d,0x00,0x0c,0x06,0x00,0x05,0x24,\r
+0x8a,0x0d,0x00,0x0c,0x10,0x00,0x04,0x24,0x00,0x00,0x03,0x92,0x18,0x00,0xbf,0x8f,\r
+0x14,0x00,0xb1,0x8f,0xc0,0x00,0x63,0x30,0x00,0x00,0x03,0xa2,0x10,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x14,0x00,0xb1,0xaf,\r
+0xff,0xff,0xb1,0x30,0x18,0x00,0xb2,0xaf,0x10,0x00,0xb0,0xaf,0x1c,0x00,0xbf,0xaf,\r
+0x21,0x90,0xc0,0x00,0x0a,0x00,0x20,0x12,0xff,0xff,0x90,0x30,0xb1,0x0d,0x00,0x0c,\r
+0x21,0x20,0x00,0x02,0xfe,0xff,0x23,0x26,0x02,0x00,0x04,0x26,0x00,0x00,0x42,0xa6,\r
+0xff,0xff,0x71,0x30,0xff,0xff,0x90,0x30,0xf8,0xff,0x20,0x16,0x02,0x00,0x52,0x26,\r
+0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x25,0xb0,0x03,0x3c,0x0a,0x00,0x68,0x34,\r
+0x00,0x00,0x02,0x91,0xff,0xff,0xa5,0x30,0xff,0x00,0x84,0x30,0x1f,0x00,0xa0,0x10,\r
+0xff,0x00,0x47,0x30,0x21,0x48,0x00,0x01,0x0c,0x00,0x6c,0x34,0x0b,0x00,0x6b,0x34,\r
+0xc0,0xff,0x0a,0x24,0x21,0x68,0x00,0x01,0x25,0x10,0xea,0x00,0xff,0x00,0x47,0x30,\r
+0x00,0x00,0x64,0xa1,0x00,0x00,0x27,0xa1,0x00,0x00,0x22,0x91,0x00,0x00,0x00,0x00,\r
+0xff,0x00,0x47,0x30,0xc0,0x00,0xe3,0x30,0x08,0x00,0x60,0x10,0x00,0x00,0x00,0x00,\r
+0x21,0x40,0xa0,0x01,0x00,0x00,0x02,0x91,0x00,0x00,0x00,0x00,0xff,0x00,0x47,0x30,\r
+0xc0,0x00,0xe3,0x30,0xfb,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x8d,\r
+0xfc,0xff,0xa3,0x24,0x04,0x00,0x84,0x24,0xff,0xff,0x65,0x30,0x00,0x00,0xc2,0xac,\r
+0xff,0x00,0x84,0x30,0xe8,0xff,0xa0,0x14,0x04,0x00,0xc6,0x24,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0xff,0x00,0x84,0x30,0x21,0x68,0xe0,0x00,0xff,0xff,0xa5,0x30,\r
+0xc0,0x50,0x04,0x00,0x00,0x60,0x0c,0x40,0x01,0x00,0x81,0x35,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0x00,0x00,0xc2,0x90,0x01,0x00,0xc3,0x90,0x25,0xb0,0x07,0x3c,\r
+0x00,0x14,0x02,0x00,0x25,0x28,0xa2,0x00,0x00,0x1e,0x03,0x00,0x01,0x80,0x08,0x3c,\r
+0x25,0x20,0xa3,0x00,0x40,0x02,0xe9,0x34,0x25,0x18,0x48,0x01,0x44,0x02,0xe7,0x34,\r
+0x00,0x00,0xe4,0xac,0x00,0x00,0x23,0xad,0x03,0x00,0xc2,0x90,0x02,0x00,0xc4,0x90,\r
+0x04,0x00,0xc3,0x90,0x05,0x00,0xc5,0x90,0x00,0x12,0x02,0x00,0x25,0x20,0x82,0x00,\r
+0x00,0x1c,0x03,0x00,0x01,0x00,0x4a,0x25,0x25,0x20,0x83,0x00,0x00,0x2e,0x05,0x00,\r
+0x25,0x40,0x48,0x01,0x25,0x20,0x85,0x00,0x00,0x00,0xe4,0xac,0x01,0x00,0x4a,0x25,\r
+0x00,0x00,0x28,0xad,0x01,0x80,0x0b,0x3c,0x21,0x40,0x00,0x00,0x21,0x10,0xa8,0x01,\r
+0x01,0x00,0x43,0x90,0x00,0x00,0x45,0x90,0x02,0x00,0x44,0x90,0x03,0x00,0x46,0x90,\r
+0x00,0x1a,0x03,0x00,0x25,0x28,0xa3,0x00,0x00,0x24,0x04,0x00,0x25,0x28,0xa4,0x00,\r
+0x00,0x36,0x06,0x00,0x04,0x00,0x08,0x25,0x25,0x10,0x4b,0x01,0x25,0x20,0xa6,0x00,\r
+0x10,0x00,0x03,0x2d,0x00,0x00,0xe4,0xac,0x01,0x00,0x4a,0x25,0x00,0x00,0x22,0xad,\r
+0xee,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x00,0x60,0x8c,0x40,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0xff,0xff,0x84,0x30,0x42,0xb0,0x08,0x3c,0x80,0x10,0x04,0x00,\r
+0x21,0x10,0x48,0x00,0x04,0x00,0x46,0xac,0x00,0x00,0x07,0x91,0x40,0x18,0x04,0x00,\r
+0x03,0x00,0x06,0x24,0xff,0x00,0xe7,0x30,0x04,0x30,0x66,0x00,0x01,0x00,0x02,0x24,\r
+0x04,0x10,0x62,0x00,0x25,0x30,0xc7,0x00,0xff,0xff,0xa5,0x30,0x25,0x10,0x47,0x00,\r
+0x02,0x00,0xa0,0x14,0xff,0x00,0xc7,0x30,0xff,0x00,0x47,0x30,0x42,0xb0,0x02,0x3c,\r
+0x00,0x00,0x47,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x42,0xb0,0x02,0x3c,\r
+0x03,0x00,0x47,0x34,0x00,0x00,0xe3,0x90,0xff,0x00,0x84,0x30,0x04,0x00,0x84,0x24,\r
+0xff,0x00,0x65,0x30,0x01,0x00,0x02,0x24,0x04,0x30,0x82,0x00,0x07,0x18,0x85,0x00,\r
+0x25,0xb0,0x02,0x3c,0xe8,0x03,0x42,0x34,0x01,0x00,0x63,0x30,0x21,0x20,0xc0,0x00,\r
+0x00,0x00,0x45,0xa0,0x02,0x00,0x60,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xe6,0xa0,\r
+0x08,0x00,0xe0,0x03,0x24,0x10,0x85,0x00,0x00,0x60,0x03,0x40,0x01,0x00,0x61,0x34,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x02,0x80,0x02,0x3c,0x74,0x9a,0x42,0x24,\r
+0x04,0x00,0x45,0x8c,0x00,0x00,0x82,0xac,0x04,0x00,0x44,0xac,0x00,0x00,0xa4,0xac,\r
+0x04,0x00,0x85,0xac,0x00,0x60,0x83,0x40,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x14,0x00,0x83,0x90,0x01,0x00,0x02,0x24,0x08,0x00,0x86,0xac,0x18,0x00,0x85,0xac,\r
+0x00,0x00,0x84,0xac,0x03,0x00,0x62,0x10,0x04,0x00,0x84,0xac,0x7a,0x0e,0x00,0x08,\r
+0x0c,0x00,0x80,0xac,0x0c,0x00,0x82,0x8c,0x7a,0x0e,0x00,0x08,0x10,0x00,0x82,0xac,\r
+0x00,0x60,0x03,0x40,0x01,0x00,0x61,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x04,0x00,0x85,0x8c,0x00,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0xac,\r
+0x04,0x00,0x45,0xac,0x00,0x00,0x84,0xac,0x04,0x00,0x84,0xac,0x00,0x60,0x83,0x40,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xd0,0xff,0xbd,0x27,0x28,0x00,0xb6,0xaf,\r
+0x24,0x00,0xb5,0xaf,0x20,0x00,0xb4,0xaf,0x14,0x00,0xb1,0xaf,0x2c,0x00,0xbf,0xaf,\r
+0x1c,0x00,0xb3,0xaf,0x18,0x00,0xb2,0xaf,0x10,0x00,0xb0,0xaf,0x00,0x80,0x16,0x3c,\r
+0x02,0x80,0x14,0x3c,0x02,0x80,0x11,0x3c,0x02,0x80,0x15,0x3c,0x24,0x7e,0x24,0x8e,\r
+0x25,0xb0,0x02,0x3c,0x88,0x3a,0xc3,0x26,0x18,0x03,0x42,0x34,0x00,0x00,0x43,0xac,\r
+0x74,0x9a,0x90,0x8e,0x18,0x00,0x80,0x10,0x74,0x9a,0x82,0x26,0x15,0x00,0x02,0x12,\r
+0x00,0x00,0x00,0x00,0x21,0x98,0x40,0x00,0x01,0x00,0x12,0x24,0x14,0x00,0x02,0x92,\r
+0x00,0x00,0x00,0x00,0x1d,0x00,0x52,0x10,0x00,0x00,0x00,0x00,0x09,0x00,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0x0c,0x00,0x03,0x8e,0x24,0x7e,0x22,0x8e,0x00,0x00,0x00,0x00,\r
+0x23,0x20,0x62,0x00,0x2b,0x10,0x43,0x00,0x0e,0x00,0x40,0x10,0x00,0x00,0x00,0x00,\r
+0x0c,0x00,0x04,0xae,0x00,0x00,0x10,0x8e,0x00,0x00,0x00,0x00,0xef,0xff,0x13,0x16,\r
+0x00,0x00,0x00,0x00,0x24,0x7e,0x20,0xae,0x08,0x0c,0xa4,0x26,0x21,0x28,0x00,0x00,\r
+0x21,0x30,0x00,0x00,0xfe,0x1f,0x00,0x0c,0x21,0x38,0x00,0x00,0xaf,0x0e,0x00,0x08,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0x02,0x8e,0x18,0x00,0x04,0x8e,0x09,0xf8,0x40,0x00,\r
+0x00,0x00,0x00,0x00,0xc9,0x0e,0x00,0x08,0x0c,0x00,0x02,0xae,0x0c,0x00,0x03,0x8e,\r
+0x24,0x7e,0x22,0x8e,0x00,0x00,0x00,0x00,0x23,0x20,0x62,0x00,0x2b,0x10,0x43,0x00,\r
+0xe7,0xff,0x40,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0x02,0x8e,0x18,0x00,0x04,0x8e,\r
+0x09,0xf8,0x40,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x03,0x8e,0xc9,0x0e,0x00,0x08,\r
+0x0c,0x00,0x03,0xae,0x02,0x80,0x02,0x3c,0x60,0x79,0x43,0x8c,0xff,0x00,0xa5,0x30,\r
+0x25,0xb0,0x02,0x3c,0x42,0x18,0x03,0x00,0x21,0x30,0xa2,0x00,0x01,0x00,0x63,0x30,\r
+0x01,0x00,0x02,0x24,0x10,0x00,0xa7,0x2c,0x04,0x00,0x62,0x10,0xff,0x00,0x84,0x30,\r
+0x60,0x01,0xc4,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x25,0xb0,0x03,0x3c,\r
+0x10,0x00,0xa2,0x34,0xfa,0xff,0xe0,0x10,0x21,0x40,0x43,0x00,0x60,0x01,0xc4,0xa0,\r
+0x60,0x01,0x04,0xa1,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xff,0x00,0x84,0x30,\r
+0x01,0x00,0x03,0x24,0x10,0x00,0x02,0x3c,0x04,0x18,0x83,0x00,0xf0,0x70,0x42,0x34,\r
+0x15,0x00,0x84,0x2c,0x06,0x00,0x80,0x10,0x24,0x28,0x62,0x00,0x0f,0x00,0x63,0x30,\r
+0x04,0x00,0xa0,0x14,0x01,0x00,0x02,0x24,0x02,0x00,0x60,0x14,0x02,0x00,0x02,0x24,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xff,0x00,0xa5,0x30,\r
+0x04,0x00,0xa2,0x2c,0x14,0x00,0x40,0x10,0xff,0x00,0x84,0x30,0x02,0x80,0x03,0x3c,\r
+0xee,0x7d,0x62,0x90,0x00,0x00,0x00,0x00,0xef,0xff,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x02,0x00,0x42,0x2c,0x0e,0x00,0x40,0x10,0x02,0x00,0x03,0x24,0x24,0x00,0x83,0x10,\r
+0x0f,0x10,0x02,0x3c,0x03,0x00,0x82,0x28,0x14,0x00,0x40,0x10,0x03,0x00,0x02,0x24,\r
+0x01,0x00,0x02,0x24,0x2f,0x00,0x82,0x10,0x00,0x00,0x00,0x00,0xff,0x1f,0x02,0x3c,\r
+0x08,0x00,0xe0,0x03,0xff,0xff,0x42,0x34,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x35,0x00,0x83,0x10,0x0f,0x1f,0x02,0x3c,0x03,0x00,0x82,0x28,0x16,0x00,0x40,0x10,\r
+0x03,0x00,0x02,0x24,0x01,0x00,0x02,0x24,0xf4,0xff,0x82,0x14,0x00,0x00,0x00,0x00,\r
+0x0f,0x1f,0x02,0x3c,0x08,0x00,0xe0,0x03,0x00,0x80,0x42,0x34,0xf0,0xff,0x82,0x14,\r
+0xff,0x1f,0x02,0x3c,0x01,0x00,0x02,0x24,0x29,0x00,0xa2,0x10,0x0f,0x10,0x02,0x3c,\r
+0x02,0x00,0xa2,0x28,0x1f,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x28,0x00,0xa3,0x10,\r
+0x00,0x00,0x00,0x00,0xe5,0xff,0xa4,0x14,0x00,0x00,0x00,0x00,0x0f,0x10,0x02,0x3c,\r
+0x08,0x00,0xe0,0x03,0x00,0xf0,0x42,0x34,0xe1,0xff,0x82,0x14,0xff,0x1f,0x02,0x3c,\r
+0x01,0x00,0x02,0x24,0x1c,0x00,0xa2,0x10,0x0f,0x00,0x02,0x3c,0x02,0x00,0xa2,0x28,\r
+0x0b,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x1c,0x00,0xa3,0x10,0x00,0x00,0x00,0x00,\r
+0xd6,0xff,0xa4,0x14,0x00,0x00,0x00,0x00,0x0f,0x00,0x02,0x3c,0x08,0x00,0xe0,0x03,\r
+0x00,0xf0,0x42,0x34,0x0f,0x10,0x02,0x3c,0x08,0x00,0xe0,0x03,0x00,0x80,0x42,0x34,\r
+0xce,0xff,0xa0,0x14,0x00,0x00,0x00,0x00,0x0f,0x00,0x02,0x3c,0x08,0x00,0xe0,0x03,\r
+0x15,0xf0,0x42,0x34,0xc9,0xff,0xa0,0x14,0x00,0x00,0x00,0x00,0x0f,0x10,0x02,0x3c,\r
+0x08,0x00,0xe0,0x03,0x15,0xf0,0x42,0x34,0x08,0x00,0xe0,0x03,0x00,0xf0,0x42,0x34,\r
+0x08,0x00,0xe0,0x03,0x10,0xf0,0x42,0x34,0x08,0x00,0xe0,0x03,0x10,0xf0,0x42,0x34,\r
+0x0f,0x10,0x02,0x3c,0x08,0x00,0xe0,0x03,0x05,0xf0,0x42,0x34,0x0f,0x00,0x02,0x3c,\r
+0x08,0x00,0xe0,0x03,0x05,0xf0,0x42,0x34,0xc0,0x40,0x04,0x00,0x21,0x18,0x04,0x01,\r
+0x80,0x18,0x03,0x00,0x21,0x18,0x64,0x00,0x02,0x80,0x02,0x3c,0x80,0x18,0x03,0x00,\r
+0x68,0x15,0x42,0x24,0x21,0x18,0x62,0x00,0x80,0x51,0x66,0x8c,0x21,0x38,0x60,0x00,\r
+0x86,0x51,0x60,0xa0,0x87,0x51,0x60,0xa0,0x1c,0x00,0x05,0x24,0x7b,0x0f,0x00,0x08,\r
+0x01,0x00,0x03,0x24,0x08,0x00,0xa0,0x04,0x21,0x10,0x04,0x01,0x04,0x10,0xa3,0x00,\r
+0x24,0x10,0xc2,0x00,0xfb,0xff,0x40,0x10,0xff,0xff,0xa5,0x24,0x01,0x00,0xa5,0x24,\r
+0x86,0x51,0xe5,0xa0,0x21,0x10,0x04,0x01,0x80,0x10,0x02,0x00,0x21,0x10,0x44,0x00,\r
+0x02,0x80,0x03,0x3c,0x80,0x10,0x02,0x00,0x68,0x15,0x63,0x24,0x21,0x18,0x43,0x00,\r
+0x80,0x51,0x66,0x8c,0x21,0x28,0x00,0x00,0x8f,0x0f,0x00,0x08,0x01,0x00,0x07,0x24,\r
+0x1d,0x00,0xa2,0x28,0x08,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x04,0x10,0xa7,0x00,\r
+0x24,0x10,0xc2,0x00,0xfa,0xff,0x40,0x10,0x01,0x00,0xa5,0x24,0xff,0xff,0xa5,0x24,\r
+0x08,0x00,0xe0,0x03,0x87,0x51,0x65,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0xc8,0xff,0xbd,0x27,0x28,0x00,0xb6,0xaf,0x02,0x80,0x16,0x3c,0x30,0x00,0xbe,0xaf,\r
+0x2c,0x00,0xb7,0xaf,0x24,0x00,0xb5,0xaf,0x20,0x00,0xb4,0xaf,0x18,0x00,0xb2,0xaf,\r
+0x14,0x00,0xb1,0xaf,0x01,0x00,0x15,0x24,0x21,0x88,0x00,0x00,0x68,0x15,0xde,0x26,\r
+0x21,0xa0,0x00,0x00,0x21,0x90,0x00,0x00,0x25,0xb0,0x17,0x3c,0x34,0x00,0xbf,0xaf,\r
+0x1c,0x00,0xb3,0xaf,0xb0,0x0f,0x00,0x08,0x10,0x00,0xb0,0xaf,0x01,0x00,0x31,0x26,\r
+0x20,0x00,0x22,0x2e,0x94,0x00,0x52,0x26,0x2e,0x00,0x40,0x10,0x94,0x00,0x94,0x26,\r
+0x68,0x15,0xc2,0x26,0x21,0x30,0x42,0x02,0x84,0x51,0xc5,0x8c,0x00,0x00,0x00,0x00,\r
+0x02,0x13,0x05,0x00,0x01,0x00,0x42,0x30,0xf4,0xff,0x55,0x14,0x42,0x1a,0x05,0x00,\r
+0x74,0x51,0xc2,0x8c,0x07,0x00,0x64,0x30,0x02,0x11,0x02,0x00,0x7f,0x00,0x43,0x30,\r
+0x2d,0x00,0x95,0x10,0x07,0x00,0xb3,0x30,0x02,0x00,0x82,0x28,0x3a,0x00,0x40,0x14,\r
+0x02,0x00,0x02,0x24,0x30,0x00,0x82,0x10,0x03,0x00,0x02,0x24,0x3c,0x00,0x82,0x10,\r
+0x1a,0x00,0x62,0x2c,0x21,0x80,0x9e,0x02,0x84,0x51,0x02,0x8e,0x04,0x00,0x63,0x2e,\r
+0x42,0x12,0x02,0x00,0x0a,0x00,0x60,0x10,0x07,0x00,0x44,0x30,0x0f,0x0f,0x00,0x0c,\r
+0x21,0x28,0x60,0x02,0x80,0x20,0x13,0x00,0x7c,0x51,0x02,0xae,0x21,0x20,0x97,0x00,\r
+0x84,0x01,0x83,0x8c,0x00,0x00,0x00,0x00,0x24,0x18,0x62,0x00,0x80,0x51,0x03,0xae,\r
+0x6a,0x0f,0x00,0x0c,0x21,0x20,0x20,0x02,0x21,0x10,0x37,0x02,0x01,0x00,0x31,0x26,\r
+0x60,0x01,0x43,0x90,0x20,0x00,0x22,0x2e,0x94,0x00,0x52,0x26,0xd4,0xff,0x40,0x14,\r
+0x94,0x00,0x94,0x26,0x34,0x00,0xbf,0x8f,0x30,0x00,0xbe,0x8f,0x2c,0x00,0xb7,0x8f,\r
+0x28,0x00,0xb6,0x8f,0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f,\r
+0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27,0x32,0x00,0x62,0x2c,0xda,0xff,0x40,0x10,\r
+0x21,0x80,0x9e,0x02,0xff,0xf1,0x03,0x24,0x24,0x10,0xa3,0x00,0x00,0x04,0x42,0x34,\r
+0xc5,0x0f,0x00,0x08,0x84,0x51,0xc2,0xac,0x38,0x00,0x62,0x2c,0x12,0x00,0x40,0x14,\r
+0x14,0x00,0x62,0x2c,0xff,0xf1,0x03,0x24,0x24,0x10,0xa3,0x00,0x00,0x02,0x42,0x34,\r
+0xc5,0x0f,0x00,0x08,0x84,0x51,0xc2,0xac,0xcb,0xff,0x80,0x14,0x21,0x80,0x9e,0x02,\r
+0xff,0xf1,0x03,0x24,0x24,0x10,0xa3,0x00,0xc6,0x0f,0x00,0x08,0x84,0x51,0xc2,0xac,\r
+0xc5,0xff,0x40,0x14,0x21,0x80,0x9e,0x02,0xff,0xf1,0x03,0x24,0x24,0x10,0xa3,0x00,\r
+0xf0,0x0f,0x00,0x08,0x00,0x04,0x42,0x34,0xbf,0xff,0x40,0x10,0x21,0x80,0x9e,0x02,\r
+0xff,0xf1,0x03,0x24,0x24,0x10,0xa3,0x00,0x00,0x06,0x42,0x34,0xc6,0x0f,0x00,0x08,\r
+0x84,0x51,0xc2,0xac,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xd8,0xff,0xbd,0x27,\r
+0x10,0x00,0xb0,0xaf,0xc0,0x80,0x04,0x00,0x21,0x80,0x04,0x02,0x80,0x80,0x10,0x00,\r
+0x21,0x80,0x04,0x02,0x02,0x80,0x02,0x3c,0x68,0x15,0x42,0x24,0x80,0x80,0x10,0x00,\r
+0x20,0x00,0xbf,0xaf,0x1c,0x00,0xb3,0xaf,0x18,0x00,0xb2,0xaf,0x21,0x80,0x02,0x02,\r
+0x14,0x00,0xb1,0xaf,0x84,0x51,0x03,0x8e,0x25,0xb0,0x02,0x3c,0x80,0x01,0x53,0x34,\r
+0x07,0x00,0x63,0x30,0x80,0x18,0x03,0x00,0x21,0x18,0x62,0x00,0x00,0x00,0x71,0x92,\r
+0x7c,0x51,0x05,0x8e,0x84,0x01,0x62,0x8c,0x21,0x90,0x80,0x00,0xff,0x00,0x31,0x32,\r
+0x24,0x10,0x45,0x00,0x6a,0x0f,0x00,0x0c,0x80,0x51,0x02,0xae,0x86,0x51,0x04,0x92,\r
+0xe9,0x0e,0x00,0x0c,0xff,0x00,0x45,0x32,0x86,0x51,0x04,0x92,0xff,0x0e,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x38,0x04,0x00,0x03,0x24,0x0a,0x88,0x62,0x00,\r
+0x00,0x00,0x71,0xa2,0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27,\r
+0xff,0xff,0x84,0x30,0x00,0x02,0x82,0x30,0x07,0x00,0x03,0x24,0x0d,0x00,0x40,0x14,\r
+0x0b,0x00,0x84,0x30,0x0c,0x00,0x82,0x2c,0x0a,0x00,0x40,0x10,0x00,0x00,0x00,0x00,\r
+0x02,0x80,0x03,0x3c,0x80,0x10,0x04,0x00,0xa0,0x9f,0x63,0x24,0x21,0x10,0x43,0x00,\r
+0x00,0x00,0x44,0x8c,0x00,0x00,0x00,0x00,0x08,0x00,0x80,0x00,0x00,0x00,0x00,0x00,\r
+0x07,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x06,0x00,0x03,0x24,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x05,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x60,0x00,0x04,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,\r
+0x03,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x02,0x00,0x03,0x24,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x01,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x60,0x00,0x21,0x18,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,\r
+0x90,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c,0x68,0x00,0xbe,0xaf,0x64,0x00,0xb7,0xaf,\r
+0x60,0x00,0xb6,0xaf,0x5c,0x00,0xb5,0xaf,0x54,0x00,0xb3,0xaf,0x50,0x00,0xb2,0xaf,\r
+0x6c,0x00,0xbf,0xaf,0x58,0x00,0xb4,0xaf,0x4c,0x00,0xb1,0xaf,0x48,0x00,0xb0,0xaf,\r
+0xd0,0x9f,0x42,0x24,0x00,0x00,0x54,0x8c,0x08,0x00,0x03,0x24,0x10,0x00,0xa3,0xaf,\r
+0x21,0x98,0x00,0x00,0x21,0xa8,0x00,0x00,0x21,0xb8,0x00,0x00,0x21,0xf0,0x00,0x00,\r
+0x14,0x00,0xa0,0xaf,0x18,0x00,0xa0,0xaf,0x1c,0x00,0xa0,0xaf,0x20,0x00,0xa0,0xaf,\r
+0x21,0xb0,0x00,0x00,0x24,0x00,0xa0,0xaf,0x28,0x00,0xa0,0xaf,0x2c,0x00,0xa0,0xaf,\r
+0x30,0x00,0xa0,0xaf,0x34,0x00,0xa0,0xaf,0x38,0x00,0xa0,0xaf,0x3c,0x00,0xa0,0xaf,\r
+0x40,0x00,0xa0,0xaf,0x21,0x90,0x80,0x02,0x84,0x51,0x42,0x8e,0x00,0x00,0x00,0x00,\r
+0x02,0x13,0x02,0x00,0x01,0x00,0x42,0x30,0x6c,0x00,0x40,0x10,0x25,0xb0,0x02,0x3c,\r
+0x21,0x10,0x62,0x02,0x60,0x01,0x44,0x90,0x6c,0x51,0x43,0x8e,0x68,0x51,0x46,0x8e,\r
+0xff,0x00,0x91,0x30,0x02,0x80,0x04,0x3c,0x68,0x15,0x84,0x24,0x21,0x10,0x24,0x02,\r
+0x73,0x44,0x44,0x90,0x56,0x44,0x45,0x90,0x50,0x51,0x47,0x8e,0x18,0x00,0x64,0x00,\r
+0x12,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0xc5,0x00,\r
+0x12,0x30,0x00,0x00,0x21,0x30,0xc3,0x00,0x2b,0x10,0xe6,0x00,0x25,0x01,0x40,0x14,\r
+0x23,0x10,0xe6,0x00,0x50,0x51,0x42,0xae,0x6c,0x51,0x44,0x8e,0x68,0x51,0x47,0x8e,\r
+0x54,0x51,0x48,0x8e,0x58,0x51,0x45,0x8e,0x60,0x51,0x46,0x8e,0x64,0x51,0x43,0x8e,\r
+0x21,0x38,0xe4,0x00,0x02,0x80,0x04,0x3c,0x68,0x15,0x84,0x24,0x21,0x10,0x24,0x02,\r
+0x21,0x40,0x05,0x01,0x21,0x30,0xc3,0x00,0xca,0x44,0x42,0x90,0x50,0x51,0x4a,0x8e,\r
+0x0c,0x00,0xe0,0x10,0x21,0x48,0x00,0x00,0x2b,0x48,0x47,0x00,0x0b,0x00,0x20,0x15,\r
+0x02,0x80,0x02,0x3c,0x07,0x00,0x22,0x2e,0x93,0x01,0x40,0x14,0xc0,0x10,0x07,0x00,\r
+0x0c,0x00,0x02,0x24,0x8f,0x01,0x22,0x12,0x0d,0x00,0x02,0x24,0x8e,0x01,0x22,0x12,\r
+0xc0,0x10,0x07,0x00,0x81,0x00,0x20,0x11,0x02,0x80,0x02,0x3c,0x68,0x15,0x42,0x24,\r
+0x80,0x18,0x11,0x00,0x21,0x18,0x62,0x00,0x21,0x20,0x51,0x02,0xc2,0x51,0x85,0x90,\r
+0xec,0x44,0x62,0x8c,0x00,0x00,0x00,0x00,0x04,0x10,0xa2,0x00,0x2b,0x10,0x4a,0x00,\r
+0x76,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0xe0,0x51,0x42,0x8e,0x01,0x00,0x07,0x24,\r
+0x04,0x18,0x27,0x02,0x24,0x10,0x43,0x00,0x04,0x01,0x40,0x10,0x1c,0x00,0x22,0x2e,\r
+0x21,0x28,0x51,0x02,0x88,0x51,0xa6,0x90,0xc2,0x51,0xa2,0x90,0x0a,0x00,0x04,0x24,\r
+0xff,0x00,0xc3,0x30,0x04,0x20,0x44,0x00,0x2a,0x18,0x64,0x00,0xfb,0x00,0x60,0x10,\r
+0x1c,0x00,0x22,0x2e,0x01,0x00,0xc2,0x24,0xff,0x00,0x43,0x30,0x8c,0x01,0x64,0x10,\r
+0x88,0x51,0xa2,0xa0,0x02,0x80,0x04,0x3c,0x68,0x15,0x85,0x24,0x80,0x10,0x11,0x00,\r
+0x21,0x10,0x45,0x00,0x60,0x45,0x44,0x8c,0xec,0x44,0x43,0x8c,0x21,0x30,0xc5,0x02,\r
+0x40,0x10,0x04,0x00,0x21,0x10,0x44,0x00,0x21,0x18,0x62,0x00,0x82,0x50,0x03,0x00,\r
+0x50,0x51,0xca,0xac,0xec,0x65,0xa3,0x8c,0xff,0xff,0x02,0x34,0x03,0x00,0x62,0x10,\r
+0x21,0x20,0x20,0x02,0xe9,0x0e,0x00,0x0c,0xff,0x00,0x65,0x32,0xff,0x0e,0x00,0x0c,\r
+0x21,0x20,0x20,0x02,0x10,0x00,0xa4,0x8f,0x01,0x00,0x42,0x38,0x04,0x00,0x03,0x24,\r
+0x0a,0x20,0x62,0x00,0xbc,0x00,0x60,0x12,0x10,0x00,0xa4,0xaf,0x02,0x80,0x03,0x3c,\r
+0x68,0x15,0x62,0x24,0x21,0x10,0xa2,0x02,0x64,0x51,0x40,0xac,0x68,0x51,0x40,0xac,\r
+0x6c,0x51,0x40,0xac,0x54,0x51,0x40,0xac,0x58,0x51,0x40,0xac,0x5c,0x51,0x40,0xac,\r
+0x60,0x51,0x40,0xac,0x40,0x00,0xa4,0x8f,0x3c,0x00,0xa2,0x8f,0x01,0x00,0x73,0x26,\r
+0x94,0x00,0x84,0x24,0x94,0x00,0x42,0x24,0x40,0x00,0xa4,0xaf,0x3c,0x00,0xa2,0xaf,\r
+0x38,0x00,0xa4,0x8f,0x34,0x00,0xa2,0x8f,0x20,0x00,0x63,0x2a,0x94,0x00,0x84,0x24,\r
+0x94,0x00,0x42,0x24,0x38,0x00,0xa4,0xaf,0x34,0x00,0xa2,0xaf,0x30,0x00,0xa4,0x8f,\r
+0x2c,0x00,0xa2,0x8f,0x94,0x00,0x52,0x26,0x94,0x00,0x84,0x24,0x94,0x00,0x42,0x24,\r
+0x30,0x00,0xa4,0xaf,0x2c,0x00,0xa2,0xaf,0x28,0x00,0xa4,0x8f,0x24,0x00,0xa2,0x8f,\r
+0x94,0x00,0xd6,0x26,0x94,0x00,0x84,0x24,0x94,0x00,0x42,0x24,0x28,0x00,0xa4,0xaf,\r
+0x24,0x00,0xa2,0xaf,0x20,0x00,0xa4,0x8f,0x1c,0x00,0xa2,0x8f,0x94,0x00,0xde,0x27,\r
+0x94,0x00,0x84,0x24,0x94,0x00,0x42,0x24,0x20,0x00,0xa4,0xaf,0x1c,0x00,0xa2,0xaf,\r
+0x18,0x00,0xa4,0x8f,0x14,0x00,0xa2,0x8f,0x94,0x00,0x94,0x26,0x94,0x00,0x84,0x24,\r
+0x94,0x00,0x42,0x24,0x18,0x00,0xa4,0xaf,0x14,0x00,0xa2,0xaf,0x94,0x00,0xf7,0x26,\r
+0x59,0xff,0x60,0x14,0x94,0x00,0xb5,0x26,0x10,0x00,0xa3,0x8f,0x6c,0x00,0xbf,0x8f,\r
+0x68,0x00,0xbe,0x8f,0x64,0x00,0xb7,0x8f,0x60,0x00,0xb6,0x8f,0x5c,0x00,0xb5,0x8f,\r
+0x58,0x00,0xb4,0x8f,0x54,0x00,0xb3,0x8f,0x50,0x00,0xb2,0x8f,0x4c,0x00,0xb1,0x8f,\r
+0x48,0x00,0xb0,0x8f,0x25,0xb0,0x02,0x3c,0x80,0x01,0x42,0x34,0x70,0x00,0xbd,0x27,\r
+0x00,0x00,0x43,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x87,0x00,0xe0,0x10,\r
+0x00,0x00,0x00,0x00,0x87,0x00,0x20,0x15,0x02,0x80,0x03,0x3c,0x40,0x10,0x07,0x00,\r
+0x21,0x10,0x47,0x00,0x82,0x10,0x02,0x00,0x2b,0x10,0x46,0x00,0xa7,0xff,0x40,0x10,\r
+0x00,0x00,0x00,0x00,0x20,0x00,0xa2,0x8f,0x02,0x80,0x04,0x3c,0x68,0x15,0x88,0x24,\r
+0x21,0x20,0x48,0x00,0x21,0x30,0x91,0x00,0xe0,0x51,0x83,0x8c,0x01,0x00,0x05,0x24,\r
+0x04,0x10,0x25,0x02,0xa5,0x51,0xc7,0x90,0x27,0x10,0x02,0x00,0x24,0x18,0x62,0x00,\r
+0xe0,0x51,0x83,0xac,0x09,0x00,0xe5,0x10,0x88,0x51,0xc0,0xa0,0x1c,0x00,0xa3,0x8f,\r
+0x21,0x38,0x00,0x00,0x21,0x20,0x68,0x00,0x21,0x18,0x87,0x00,0x01,0x00,0xe7,0x24,\r
+0x1d,0x00,0xe2,0x28,0xfc,0xff,0x40,0x14,0xc2,0x51,0x60,0xa0,0x02,0x80,0x04,0x3c,\r
+0x68,0x15,0x83,0x24,0x18,0x00,0xa4,0x8f,0x21,0x50,0x60,0x00,0x21,0x38,0x00,0x00,\r
+0x21,0x10,0x83,0x00,0x21,0x10,0x51,0x00,0xa5,0x51,0x40,0xa0,0x02,0x80,0x03,0x3c,\r
+0x02,0x80,0x02,0x3c,0xe4,0x9e,0x49,0x24,0x70,0x9e,0x68,0x24,0x80,0x18,0x07,0x00,\r
+0x21,0x10,0x69,0x00,0x21,0x20,0x68,0x00,0x00,0x00,0x46,0x8c,0x00,0x00,0x85,0x8c,\r
+0x01,0x00,0xe7,0x24,0x21,0x18,0x6a,0x00,0x1d,0x00,0xe2,0x28,0xec,0x44,0x65,0xac,\r
+0xf6,0xff,0x40,0x14,0x60,0x45,0x66,0xac,0x15,0x00,0x20,0x12,0x02,0x80,0x05,0x3c,\r
+0x87,0x51,0x82,0x92,0xff,0xff,0x27,0x26,0x2a,0x10,0xe2,0x00,0x10,0x00,0x40,0x14,\r
+0x02,0x80,0x03,0x3c,0x14,0x00,0xa4,0x8f,0x68,0x15,0x62,0x24,0x21,0x10,0x82,0x00,\r
+0x87,0x51,0x45,0x90,0x80,0x51,0x44,0x8c,0x01,0x00,0x06,0x24,0x04,0x18,0xe6,0x00,\r
+0x24,0x10,0x83,0x00,0x06,0x01,0x43,0x10,0x00,0x00,0x00,0x00,0xff,0xff,0xe7,0x24,\r
+0x2a,0x10,0xe5,0x00,0xfa,0xff,0x40,0x10,0x04,0x18,0xe6,0x00,0x02,0x80,0x05,0x3c,\r
+0xee,0x7d,0xa3,0x90,0x22,0x00,0x02,0x24,0xe8,0x00,0x62,0x10,0x02,0x80,0x03,0x3c,\r
+0x02,0x80,0x04,0x3c,0x68,0x15,0x83,0x24,0x80,0x10,0x11,0x00,0x21,0x10,0x43,0x00,\r
+0x60,0x45,0x44,0x8c,0xec,0x44,0x43,0x8c,0xee,0x7d,0xa5,0x90,0x40,0x10,0x04,0x00,\r
+0x21,0x10,0x44,0x00,0x21,0x18,0x62,0x00,0x22,0x00,0x02,0x24,0xd6,0x00,0xa2,0x10,\r
+0x82,0x50,0x03,0x00,0xe0,0x51,0x83,0x8e,0x01,0x00,0x02,0x24,0x04,0x10,0x22,0x02,\r
+0x25,0x18,0x62,0x00,0xe0,0x51,0x83,0xae,0x02,0x80,0x02,0x3c,0x68,0x15,0x43,0x24,\r
+0x21,0x10,0xe3,0x02,0x50,0x51,0x4a,0xac,0xec,0x65,0x64,0x8c,0xff,0xff,0x02,0x34,\r
+0x44,0xff,0x82,0x14,0x21,0x20,0x20,0x02,0xff,0x0e,0x00,0x0c,0x21,0x20,0x20,0x02,\r
+0x10,0x00,0xa4,0x8f,0x01,0x00,0x42,0x38,0x04,0x00,0x03,0x24,0x0a,0x20,0x62,0x00,\r
+0x46,0xff,0x60,0x16,0x10,0x00,0xa4,0xaf,0x02,0x80,0x02,0x3c,0x68,0x15,0x50,0x24,\r
+0x58,0x51,0x05,0x96,0x54,0x51,0x02,0x96,0x25,0xb0,0x11,0x3c,0x00,0x2c,0x05,0x00,\r
+0x21,0x28,0x45,0x00,0x82,0x4f,0x00,0x0c,0x68,0x0c,0x24,0x36,0x64,0x51,0x02,0x8e,\r
+0x60,0x51,0x05,0x8e,0x5c,0x51,0x03,0x96,0x6c,0x0c,0x24,0x36,0x21,0x28,0xa2,0x00,\r
+0x00,0x2c,0x05,0x00,0x82,0x4f,0x00,0x0c,0x21,0x28,0x65,0x00,0xf8,0x10,0x00,0x08,\r
+0x02,0x80,0x03,0x3c,0xa2,0x10,0x00,0x08,0x50,0x51,0x40,0xae,0x27,0xff,0x20,0x11,\r
+0x02,0x80,0x03,0x3c,0x68,0x15,0x62,0x24,0x80,0x18,0x11,0x00,0x21,0x18,0x62,0x00,\r
+0x60,0x45,0x64,0x8c,0x00,0x00,0x00,0x00,0x2b,0x20,0x44,0x01,0x1f,0xff,0x80,0x10,\r
+0x00,0x00,0x00,0x00,0x49,0x11,0x00,0x08,0x00,0x00,0x00,0x00,0x0a,0xff,0x40,0x10,\r
+0x02,0x80,0x04,0x3c,0x21,0x20,0x51,0x02,0xa5,0x51,0x83,0x90,0x01,0x00,0x02,0x24,\r
+0x78,0x00,0x62,0x10,0x02,0x80,0x02,0x3c,0x40,0x00,0xa3,0x8f,0x68,0x15,0x42,0x24,\r
+0x21,0x20,0x62,0x00,0x21,0x38,0x00,0x00,0x21,0x18,0x87,0x00,0x01,0x00,0xe7,0x24,\r
+0x1d,0x00,0xe2,0x28,0xfc,0xff,0x40,0x14,0xc2,0x51,0x60,0xa0,0x3c,0x00,0xa2,0x8f,\r
+0x02,0x80,0x04,0x3c,0x68,0x15,0x85,0x24,0x21,0x30,0x45,0x00,0xe0,0x51,0xc2,0x8c,\r
+0x01,0x00,0x03,0x24,0x04,0x18,0x23,0x02,0x27,0x18,0x03,0x00,0x21,0x20,0xd1,0x00,\r
+0x24,0x10,0x43,0x00,0xa5,0x51,0x80,0xa0,0xe0,0x51,0xc2,0xac,0x12,0x00,0x20,0x16,\r
+0x88,0x51,0x80,0xa0,0x86,0x51,0xc2,0x90,0x00,0x00,0x00,0x00,0x0e,0x00,0x40,0x10,\r
+0x01,0x00,0x07,0x24,0x38,0x00,0xa3,0x8f,0x01,0x00,0x06,0x24,0x21,0x10,0x65,0x00,\r
+0x86,0x51,0x44,0x90,0x80,0x51,0x45,0x8c,0x04,0x18,0xe6,0x00,0x24,0x10,0xa3,0x00,\r
+0x8d,0x00,0x43,0x10,0x00,0x00,0x00,0x00,0x01,0x00,0xe7,0x24,0x2a,0x10,0x87,0x00,\r
+0xfa,0xff,0x40,0x10,0x04,0x18,0xe6,0x00,0x02,0x80,0x02,0x3c,0x68,0x15,0x44,0x24,\r
+0x34,0x00,0xa2,0x8f,0x01,0x00,0x27,0x26,0x21,0x18,0x44,0x00,0x86,0x51,0x62,0x90,\r
+0x00,0x00,0x00,0x00,0x2a,0x10,0x47,0x00,0x0f,0x00,0x40,0x14,0x02,0x80,0x05,0x3c,\r
+0x30,0x00,0xa3,0x8f,0x01,0x00,0x06,0x24,0x21,0x10,0x64,0x00,0x86,0x51,0x45,0x90,\r
+0x80,0x51,0x44,0x8c,0x04,0x18,0xe6,0x00,0x24,0x10,0x83,0x00,0x73,0x00,0x43,0x10,\r
+0x00,0x00,0x00,0x00,0x01,0x00,0xe7,0x24,0x2a,0x10,0xa7,0x00,0xfa,0xff,0x40,0x10,\r
+0x04,0x18,0xe6,0x00,0x02,0x80,0x05,0x3c,0xee,0x7d,0xa3,0x90,0x22,0x00,0x02,0x24,\r
+0x3e,0x00,0x62,0x10,0xee,0xff,0x22,0x26,0xee,0x7d,0xa3,0x90,0x22,0x00,0x02,0x24,\r
+0xbd,0xfe,0x62,0x14,0x02,0x80,0x04,0x3c,0x28,0x00,0xa2,0x8f,0x68,0x15,0x86,0x24,\r
+0x21,0x20,0x46,0x00,0x84,0x51,0x85,0x8c,0x01,0x00,0x03,0x24,0x42,0x13,0x05,0x00,\r
+0x07,0x00,0x42,0x30,0xb3,0xfe,0x43,0x10,0x14,0x00,0x22,0x2e,0xb1,0xfe,0x40,0x14,\r
+0x1c,0x00,0x22,0x2e,0xaf,0xfe,0x40,0x10,0xff,0xff,0x02,0x3c,0xff,0x1f,0x42,0x34,\r
+0x24,0x10,0xa2,0x00,0x00,0x20,0x42,0x34,0x84,0x51,0x82,0xac,0x87,0x51,0x83,0x90,\r
+0xff,0xff,0x27,0x26,0x2a,0x18,0xe3,0x00,0xa6,0xfe,0x60,0x14,0x00,0x00,0x00,0x00,\r
+0x24,0x00,0xa3,0x8f,0x00,0x00,0x00,0x00,0x21,0x10,0x66,0x00,0x87,0x51,0x45,0x90,\r
+0x80,0x51,0x44,0x8c,0x42,0x12,0x00,0x08,0x01,0x00,0x06,0x24,0x2a,0x10,0xe5,0x00,\r
+0x9c,0xfe,0x40,0x14,0x00,0x00,0x00,0x00,0x04,0x18,0xe6,0x00,0x24,0x10,0x83,0x00,\r
+0xfa,0xff,0x43,0x14,0xff,0xff,0xe7,0x24,0x01,0x00,0xe7,0x24,0xdd,0x10,0x00,0x08,\r
+0xff,0x00,0xf1,0x30,0xc0,0x10,0x07,0x00,0x23,0x10,0x47,0x00,0xc2,0x10,0x02,0x00,\r
+0x2b,0x10,0x48,0x00,0x7c,0xfe,0x40,0x14,0x00,0x00,0x00,0x00,0xbd,0x10,0x00,0x08,\r
+0x00,0x00,0x00,0x00,0x18,0x00,0x22,0x2e,0x17,0x00,0x40,0x14,0x05,0x00,0x22,0x2e,\r
+0xc2,0x51,0x83,0x90,0x00,0x00,0x00,0x00,0x05,0x00,0x62,0x2c,0x8b,0xff,0x40,0x10,\r
+0x01,0x00,0x62,0x24,0xe3,0x11,0x00,0x08,0xc2,0x51,0x82,0xa0,0xff,0x00,0x42,0x30,\r
+0x02,0x00,0x42,0x2c,0xc0,0xff,0x40,0x10,0x02,0x80,0x04,0x3c,0x2c,0x00,0xa3,0x8f,\r
+0x68,0x15,0x82,0x24,0x21,0x10,0x62,0x00,0x80,0x51,0x43,0x8c,0x00,0x01,0x04,0x3c,\r
+0x18,0x00,0x02,0x24,0x24,0x18,0x64,0x00,0x1e,0x12,0x00,0x08,0x0b,0x88,0x43,0x00,\r
+0xdd,0x10,0x00,0x08,0xa5,0x51,0xa7,0xa0,0x04,0x00,0x40,0x10,0x00,0x00,0x00,0x00,\r
+0xc2,0x51,0x83,0x90,0x57,0x12,0x00,0x08,0x03,0x00,0x62,0x2c,0xc2,0x51,0x83,0x90,\r
+0x57,0x12,0x00,0x08,0x04,0x00,0x62,0x2c,0x13,0x00,0x02,0x24,0x29,0xff,0x22,0x16,\r
+0x02,0x80,0x02,0x3c,0xa4,0x11,0x00,0x08,0x68,0x15,0x43,0x24,0x68,0x15,0x62,0x24,\r
+0x21,0x20,0xc2,0x03,0x84,0x51,0x83,0x8c,0x00,0x00,0x00,0x00,0x42,0x13,0x03,0x00,\r
+0x07,0x00,0x42,0x30,0x12,0xff,0x40,0x10,0x14,0x00,0x22,0x2e,0x10,0xff,0x40,0x10,\r
+0x0c,0x00,0x22,0x2e,0x0e,0xff,0x40,0x14,0xff,0xff,0x02,0x3c,0xff,0x1f,0x42,0x34,\r
+0x24,0x10,0x62,0x00,0x90,0x11,0x00,0x08,0x84,0x51,0x82,0xac,0xff,0x00,0xf1,0x30,\r
+0x1a,0x12,0x00,0x08,0x02,0x80,0x05,0x3c,0x02,0x12,0x00,0x08,0xff,0x00,0xf1,0x30,\r
+0x8b,0x11,0x00,0x08,0xff,0x00,0xf1,0x30,0xa8,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c,\r
+0x38,0x00,0xb2,0xaf,0x54,0x00,0xbf,0xaf,0x50,0x00,0xbe,0xaf,0x4c,0x00,0xb7,0xaf,\r
+0x48,0x00,0xb6,0xaf,0x44,0x00,0xb5,0xaf,0x40,0x00,0xb4,0xaf,0x3c,0x00,0xb3,0xaf,\r
+0x34,0x00,0xb1,0xaf,0x30,0x00,0xb0,0xaf,0x68,0x15,0x46,0x24,0x65,0x65,0xc4,0x90,\r
+0x60,0x65,0xc3,0x8c,0x5c,0x65,0xc2,0x8c,0x21,0x90,0x64,0x00,0x2b,0x10,0x42,0x02,\r
+0x7e,0x00,0x40,0x10,0x21,0x88,0xc0,0x00,0x02,0x80,0x1e,0x3c,0x02,0x80,0x17,0x3c,\r
+0x21,0xa8,0xc0,0x00,0x21,0xb0,0xc0,0x00,0xad,0x12,0x00,0x08,0x01,0x00,0x14,0x24,\r
+0x5c,0x65,0xc2,0x8e,0x10,0x00,0x52,0x26,0x2b,0x10,0x42,0x02,0x73,0x00,0x40,0x10,\r
+0x21,0x88,0xc0,0x02,0x65,0x65,0x22,0x92,0xff,0xff,0x45,0x32,0x25,0x28,0xb7,0x00,\r
+0x10,0x00,0x42,0x24,0x65,0x65,0x22,0xa2,0x38,0x79,0xc4,0x27,0x60,0x45,0x00,0x0c,\r
+0x10,0x00,0x06,0x24,0xf8,0x63,0x23,0x8e,0x00,0x00,0x00,0x00,0x42,0x18,0x03,0x00,\r
+0x01,0x00,0x63,0x30,0x71,0x00,0x74,0x10,0x02,0x80,0x03,0x3c,0x68,0x15,0x63,0x24,\r
+0xd4,0x63,0x62,0x8c,0x00,0x00,0x00,0x00,0x42,0x84,0x02,0x00,0x1f,0x00,0x10,0x32,\r
+0xc0,0x48,0x10,0x00,0x21,0x10,0x30,0x01,0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00,\r
+0x80,0x10,0x02,0x00,0x21,0x10,0x55,0x00,0x84,0x51,0x45,0x8c,0x00,0x00,0x00,0x00,\r
+0x02,0x1b,0x05,0x00,0x01,0x00,0x63,0x30,0xdd,0xff,0x60,0x10,0x21,0x30,0xa0,0x02,\r
+0x25,0xb0,0x02,0x3c,0x21,0x40,0x02,0x02,0xd0,0x63,0xa7,0x8e,0xf8,0x63,0xa2,0x8e,\r
+0x60,0x01,0x03,0x91,0x82,0x25,0x07,0x00,0x01,0x00,0x42,0x30,0xff,0x00,0x6b,0x30,\r
+0x9a,0x00,0x54,0x10,0x3f,0x00,0x8a,0x30,0x02,0x80,0x04,0x3c,0xd4,0x9f,0x84,0x24,\r
+0x00,0x00,0x86,0x8c,0x04,0x00,0x04,0x24,0xd0,0x63,0xc3,0x8c,0x00,0x00,0x00,0x00,\r
+0x82,0x15,0x03,0x00,0x3f,0x00,0x42,0x30,0x05,0x00,0x42,0x28,0x0a,0x00,0x60,0x04,\r
+0x0a,0x50,0x82,0x00,0x21,0x10,0x30,0x01,0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00,\r
+0x80,0x10,0x02,0x00,0x21,0x10,0x46,0x00,0x70,0x51,0x43,0x8c,0x04,0x00,0x0a,0x24,\r
+0x01,0x00,0x63,0x24,0x70,0x51,0x43,0xac,0xd4,0x63,0xc2,0x8c,0x00,0x00,0x00,0x00,\r
+0x02,0x13,0x02,0x00,0x1f,0x00,0x42,0x30,0x08,0x00,0x42,0x28,0xb8,0xff,0x40,0x10,\r
+0x00,0x00,0x00,0x00,0xd0,0x63,0xc2,0x8c,0x00,0x00,0x00,0x00,0x3f,0x00,0x42,0x30,\r
+0xb3,0xff,0x4b,0x14,0x00,0x00,0x00,0x00,0x9f,0x00,0x40,0x11,0x21,0x10,0x30,0x01,\r
+0xa8,0x00,0x54,0x11,0x80,0x10,0x02,0x00,0x02,0x00,0x02,0x24,0xb0,0x00,0x42,0x11,\r
+0x21,0x10,0x30,0x01,0x03,0x00,0x02,0x24,0xb8,0x00,0x42,0x11,0x21,0x10,0x30,0x01,\r
+0xc0,0x00,0x44,0x11,0x21,0x10,0x30,0x01,0x21,0x10,0x30,0x01,0x80,0x10,0x02,0x00,\r
+0x21,0x10,0x50,0x00,0x80,0x10,0x02,0x00,0x21,0x28,0x46,0x00,0x74,0x51,0xa3,0x8c,\r
+0x21,0x10,0x66,0x01,0x90,0x44,0x44,0x90,0x02,0x19,0x03,0x00,0x2b,0x18,0x64,0x00,\r
+0xc8,0x00,0x60,0x14,0x00,0x00,0x00,0x00,0x68,0x51,0xa3,0x8c,0x80,0x10,0x0b,0x00,\r
+0x21,0x10,0x4b,0x00,0x01,0x00,0x63,0x24,0x21,0x10,0x46,0x00,0x68,0x51,0xa3,0xac,\r
+0x21,0x10,0x4a,0x00,0x34,0x43,0x44,0x90,0x50,0x51,0xa3,0x8c,0x00,0x00,0x00,0x00,\r
+0x21,0x18,0x64,0x00,0x50,0x51,0xa3,0xac,0x5c,0x65,0xc2,0x8e,0x10,0x00,0x52,0x26,\r
+0x2b,0x10,0x42,0x02,0x8f,0xff,0x40,0x14,0x21,0x88,0xc0,0x02,0x54,0x00,0xbf,0x8f,\r
+0x50,0x00,0xbe,0x8f,0x4c,0x00,0xb7,0x8f,0x48,0x00,0xb6,0x8f,0x44,0x00,0xb5,0x8f,\r
+0x40,0x00,0xb4,0x8f,0x3c,0x00,0xb3,0x8f,0x38,0x00,0xb2,0x8f,0x34,0x00,0xb1,0x8f,\r
+0x30,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x58,0x00,0xbd,0x27,0xd4,0x63,0x22,0x8e,\r
+0x00,0x00,0x00,0x00,0x42,0x14,0x02,0x00,0x10,0x00,0x43,0x30,0x90,0xff,0x60,0x10,\r
+0x0f,0x00,0x50,0x30,0x54,0x4f,0x00,0x0c,0x48,0x00,0x04,0x24,0x74,0xff,0x40,0x10,\r
+0x21,0x98,0x40,0x00,0x14,0x00,0x02,0x24,0x28,0x00,0x04,0x24,0x14,0x00,0x62,0xae,\r
+0x0c,0x00,0x64,0xae,0x14,0x00,0xa3,0x8f,0xe0,0xff,0x04,0x24,0x08,0x00,0x07,0x24,\r
+0x80,0x00,0x63,0x34,0x14,0x00,0xa3,0xaf,0xd4,0x63,0x26,0x8e,0x24,0x18,0x64,0x00,\r
+0xff,0xe0,0x04,0x24,0x42,0x14,0x06,0x00,0x1f,0x00,0x42,0x30,0x25,0x18,0x62,0x00,\r
+0x14,0x00,0xa3,0xaf,0xd0,0x63,0x25,0x8e,0x24,0x18,0x64,0x00,0x02,0x23,0x06,0x00,\r
+0x82,0x13,0x05,0x00,0x00,0x1f,0x42,0x30,0x25,0x18,0x62,0x00,0xff,0xff,0x02,0x3c,\r
+0xff,0x7f,0x42,0x34,0xc2,0x2f,0x05,0x00,0x24,0x18,0x62,0x00,0xc0,0x2b,0x05,0x00,\r
+0x0f,0x00,0x02,0x3c,0x25,0x18,0x65,0x00,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,\r
+0x00,0x35,0x06,0x00,0xf0,0xff,0x02,0x3c,0x25,0x18,0x66,0x00,0xff,0xff,0x42,0x34,\r
+0x0f,0x00,0x84,0x30,0x24,0x18,0x62,0x00,0x00,0x24,0x04,0x00,0x25,0x18,0x64,0x00,\r
+0x02,0x80,0x04,0x3c,0x10,0x00,0xa5,0x27,0x8c,0x79,0x84,0x24,0x02,0x00,0x06,0x24,\r
+0x04,0x00,0x02,0x24,0x11,0x00,0xa7,0xa3,0x14,0x00,0xa3,0xaf,0x6c,0x45,0x00,0x0c,\r
+0x10,0x00,0xa2,0xa3,0x08,0x00,0x64,0x96,0x10,0x00,0xa5,0x27,0x02,0x00,0x06,0x24,\r
+0x25,0x20,0x97,0x00,0x6c,0x45,0x00,0x0c,0x20,0x00,0x84,0x24,0x30,0x08,0x00,0x0c,\r
+0x21,0x20,0x60,0x02,0xc1,0x12,0x00,0x08,0xc0,0x48,0x10,0x00,0x02,0x12,0x05,0x00,\r
+0x01,0x00,0x42,0x30,0x14,0x00,0x54,0x10,0xc2,0x10,0x05,0x00,0x01,0x00,0x42,0x30,\r
+0x76,0x00,0x54,0x10,0x00,0x00,0x00,0x00,0x04,0x64,0xa2,0x96,0x60,0x01,0x03,0x91,\r
+0xc2,0x27,0x07,0x00,0x21,0x10,0x42,0x01,0x20,0x64,0xa3,0xa2,0x13,0x00,0x80,0x10,\r
+0x04,0x64,0xa2,0xa6,0x59,0xff,0x94,0x14,0x02,0x80,0x04,0x3c,0x00,0x64,0xa2,0x96,\r
+0x0a,0x64,0xa3,0x96,0x01,0x00,0x42,0x24,0x01,0x00,0x63,0x24,0x00,0x64,0xa2,0xa6,\r
+0xd7,0x12,0x00,0x08,0x0a,0x64,0xa3,0xa6,0x5d,0x00,0xe0,0x04,0x00,0x00,0x00,0x00,\r
+0x02,0x64,0xa3,0x96,0x0e,0x64,0xa2,0x96,0x01,0x00,0x63,0x24,0x01,0x00,0x42,0x24,\r
+0x0e,0x64,0xa2,0xa6,0xd6,0x12,0x00,0x08,0x02,0x64,0xc3,0xa4,0x02,0x64,0xa3,0x96,\r
+0x10,0x64,0xa2,0x96,0x01,0x00,0x63,0x24,0x01,0x00,0x42,0x24,0x10,0x64,0xa2,0xa6,\r
+0xd6,0x12,0x00,0x08,0x02,0x64,0xc3,0xa4,0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00,\r
+0x80,0x10,0x02,0x00,0x21,0x10,0x46,0x00,0x54,0x51,0x43,0x8c,0x00,0x00,0x00,0x00,\r
+0x01,0x00,0x63,0x24,0x5c,0xff,0x54,0x15,0x54,0x51,0x43,0xac,0x21,0x10,0x30,0x01,\r
+0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x46,0x00,\r
+0x58,0x51,0x43,0x8c,0x00,0x00,0x00,0x00,0x01,0x00,0x63,0x24,0x58,0x51,0x43,0xac,\r
+0x02,0x00,0x02,0x24,0x54,0xff,0x42,0x15,0x03,0x00,0x02,0x24,0x21,0x10,0x30,0x01,\r
+0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x46,0x00,\r
+0x5c,0x51,0x43,0x8c,0x00,0x00,0x00,0x00,0x01,0x00,0x63,0x24,0x5c,0x51,0x43,0xac,\r
+0x03,0x00,0x02,0x24,0x4a,0xff,0x42,0x15,0x21,0x10,0x30,0x01,0x80,0x10,0x02,0x00,\r
+0x21,0x10,0x50,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x46,0x00,0x60,0x51,0x43,0x8c,\r
+0x00,0x00,0x00,0x00,0x01,0x00,0x63,0x24,0x43,0xff,0x44,0x15,0x60,0x51,0x43,0xac,\r
+0x21,0x10,0x30,0x01,0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00,0x80,0x10,0x02,0x00,\r
+0x21,0x10,0x46,0x00,0x64,0x51,0x43,0x8c,0x00,0x00,0x00,0x00,0x01,0x00,0x63,0x24,\r
+0x64,0x51,0x43,0xac,0x21,0x10,0x30,0x01,0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00,\r
+0x80,0x10,0x02,0x00,0x21,0x28,0x46,0x00,0x74,0x51,0xa3,0x8c,0x21,0x10,0x66,0x01,\r
+0x90,0x44,0x44,0x90,0x02,0x19,0x03,0x00,0x2b,0x18,0x64,0x00,0x3a,0xff,0x60,0x10,\r
+0x00,0x00,0x00,0x00,0x6c,0x51,0xa3,0x8c,0x80,0x10,0x0b,0x00,0x02,0x80,0x04,0x3c,\r
+0x68,0x15,0x84,0x24,0x21,0x10,0x4b,0x00,0x01,0x00,0x63,0x24,0x21,0x10,0x44,0x00,\r
+0x6c,0x51,0xa3,0xac,0x21,0x10,0x4a,0x00,0xc5,0x43,0x44,0x90,0x50,0x51,0xa3,0x8c,\r
+0x00,0x00,0x00,0x00,0x21,0x18,0x64,0x00,0x1a,0x13,0x00,0x08,0x50,0x51,0xa3,0xac,\r
+0x00,0x64,0xa3,0x96,0x08,0x64,0xa2,0x96,0x01,0x00,0x63,0x24,0x01,0x00,0x42,0x24,\r
+0x08,0x64,0xa2,0xa6,0xd6,0x12,0x00,0x08,0x00,0x64,0xc3,0xa4,0x08,0x00,0xe0,0x04,\r
+0x00,0x00,0x00,0x00,0x02,0x64,0xa3,0x96,0x0c,0x64,0xa2,0x96,0x01,0x00,0x63,0x24,\r
+0x01,0x00,0x42,0x24,0x0c,0x64,0xa2,0xa6,0xd6,0x12,0x00,0x08,0x02,0x64,0xc3,0xa4,\r
+0x00,0x64,0xa3,0x96,0x06,0x64,0xa2,0x96,0x01,0x00,0x63,0x24,0x01,0x00,0x42,0x24,\r
+0x06,0x64,0xa2,0xa6,0xd6,0x12,0x00,0x08,0x00,0x64,0xc3,0xa4,0x25,0xb0,0x05,0x3c,\r
+0x4c,0x00,0xa2,0x34,0x02,0x80,0x07,0x3c,0x00,0x00,0x43,0x90,0x68,0x15,0xe4,0x24,\r
+0xed,0x4a,0x82,0x90,0x03,0x00,0x66,0x30,0x24,0x00,0x46,0x10,0x00,0x00,0x00,0x00,\r
+0x18,0x00,0xc0,0x14,0x25,0xb0,0x03,0x3c,0xe6,0x42,0x82,0x90,0x00,0x00,0x00,0x00,\r
+0x15,0x00,0x40,0x14,0x58,0x00,0x62,0x34,0x1c,0x00,0x02,0x24,0x50,0x0c,0xa3,0x34,\r
+0x00,0x00,0x62,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x25,0xb0,0x02,0x3c,\r
+0x58,0x0c,0x42,0x34,0x1c,0x00,0x03,0x24,0x00,0x00,0x43,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,\r
+0x25,0xb0,0x03,0x3c,0x58,0x00,0x62,0x34,0x00,0x00,0x45,0x8c,0x29,0xb0,0x04,0x3c,\r
+0x5c,0x00,0x63,0x34,0x00,0x00,0x85,0xac,0x00,0x00,0x65,0x8c,0x68,0x15,0xe2,0x24,\r
+0x04,0x00,0x84,0x34,0xed,0x4a,0x46,0xa0,0x00,0x00,0x85,0xac,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0x25,0xb0,0x02,0x3c,0xe8,0xff,0xbd,0x27,0x10,0x00,0xbf,0xaf,\r
+0x2d,0x0a,0x46,0x34,0xa2,0x0d,0x43,0x34,0xa4,0x0d,0x44,0x34,0xa6,0x0d,0x45,0x34,\r
+0xa8,0x0d,0x42,0x34,0x00,0x00,0x67,0x94,0x00,0x00,0x88,0x94,0x00,0x00,0xa9,0x94,\r
+0x00,0x00,0x44,0x94,0x00,0x00,0xc3,0x90,0x02,0x80,0x0a,0x3c,0x68,0x15,0x42,0x25,\r
+0x40,0x00,0x63,0x34,0xff,0x00,0x63,0x30,0xde,0x42,0x44,0xa4,0x00,0x00,0xc3,0xa0,\r
+0xd8,0x42,0x47,0xa4,0xda,0x42,0x48,0xa4,0xdc,0x42,0x49,0xa4,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x25,0xb0,0x07,0x3c,0x5b,0x0a,0xe2,0x34,0x00,0x00,0x44,0x90,\r
+0x68,0x15,0x46,0x25,0x5c,0x0a,0xe2,0x34,0x00,0x00,0x45,0x90,0xd8,0x42,0xc3,0x94,\r
+0xda,0x42,0xc2,0x94,0xdc,0x42,0xc9,0x94,0xde,0x42,0xc8,0x94,0xff,0x00,0x84,0x30,\r
+0x21,0x18,0x62,0x00,0x00,0x22,0x04,0x00,0xff,0x00,0xa5,0x30,0x21,0x20,0x85,0x00,\r
+0x21,0x18,0x69,0x00,0xff,0xff,0x82,0x30,0x21,0x18,0x68,0x00,0x21,0x18,0x62,0x00,\r
+0x64,0x0c,0xe7,0x34,0xff,0xff,0x42,0x30,0xe0,0x42,0xc3,0xac,0x00,0x00,0xe2,0xa4,\r
+0xe4,0x42,0xc4,0xa4,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x45,0x25,\r
+0x00,0x40,0xa2,0x8c,0x01,0x00,0x03,0x24,0x0f,0x00,0x44,0x30,0x07,0x00,0x83,0x10,\r
+0x00,0x00,0x00,0x00,0x88,0x59,0x00,0x0c,0x00,0x00,0x00,0x00,0x10,0x00,0xbf,0x8f,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0xe4,0x42,0xa2,0x8c,\r
+0x00,0x00,0x00,0x00,0x02,0x17,0x02,0x00,0x01,0x00,0x42,0x30,0xf5,0xff,0x40,0x14,\r
+0x25,0xb0,0x02,0x3c,0x4c,0x00,0x42,0x34,0x00,0x00,0x43,0x90,0x00,0x00,0x00,0x00,\r
+0x03,0x00,0x63,0x30,0x3f,0x00,0x64,0x10,0x68,0x15,0x44,0x25,0xe6,0x42,0x82,0x90,\r
+0x00,0x00,0x00,0x00,0x07,0x00,0x40,0x14,0x01,0x00,0x03,0x24,0x00,0x40,0x82,0x8c,\r
+0x00,0x00,0x00,0x00,0x02,0x12,0x02,0x00,0x0f,0x00,0x42,0x30,0x3c,0x00,0x43,0x10,\r
+0x25,0xb0,0x02,0x3c,0x68,0x15,0x45,0x25,0xe6,0x42,0xa3,0x90,0xff,0x00,0x02,0x24,\r
+0xe0,0xff,0x62,0x14,0x25,0xb0,0x03,0x3c,0xc8,0x42,0xa2,0x94,0xe0,0x42,0xa6,0x8c,\r
+0x50,0x0c,0x63,0x34,0x00,0x00,0x64,0x90,0x2b,0x10,0xc2,0x00,0x85,0x00,0x40,0x10,\r
+0x7f,0x00,0x84,0x30,0xff,0xff,0x82,0x24,0xff,0x00,0x44,0x30,0x68,0x15,0x45,0x25,\r
+0xd0,0x42,0xa3,0x90,0x00,0x00,0x00,0x00,0x2b,0x10,0x64,0x00,0x78,0x00,0x40,0x10,\r
+0x00,0x00,0x00,0x00,0x21,0x20,0x60,0x00,0x68,0x15,0x43,0x25,0xe0,0x42,0x62,0x8c,\r
+0x00,0x00,0x00,0x00,0x11,0x27,0x42,0x2c,0x6d,0x00,0x40,0x14,0x3a,0x00,0x82,0x2c,\r
+0x32,0x00,0x04,0x24,0x44,0x00,0x03,0x24,0x25,0xb0,0x02,0x3c,0x30,0x0c,0x42,0x34,\r
+0x00,0x00,0x43,0xa0,0x25,0xb0,0x02,0x3c,0x50,0x0c,0x42,0x34,0x00,0x00,0x44,0xa0,\r
+0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,\r
+0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x25,0xb0,0x02,0x3c,0x58,0x0c,0x42,0x34,\r
+0x00,0x00,0x44,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x69,0x14,0x00,0x08,\r
+0x00,0x00,0x00,0x00,0xe6,0x42,0xa2,0x90,0x00,0x00,0x00,0x00,0xbf,0xff,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0xff,0xff,0x02,0x24,0x7b,0x14,0x00,0x08,0xe6,0x42,0xa2,0xa0,\r
+0x4c,0x00,0x42,0x34,0x00,0x00,0x43,0x90,0x00,0x00,0x00,0x00,0x03,0x00,0x63,0x30,\r
+0xa4,0xff,0x60,0x10,0xff,0xff,0x02,0x34,0xe8,0x63,0x83,0x8c,0x00,0x00,0x00,0x00,\r
+0xa0,0xff,0x62,0x10,0x00,0x00,0x00,0x00,0xe0,0x42,0x83,0x8c,0x00,0x00,0x00,0x00,\r
+0x65,0x00,0x62,0x2c,0x59,0x00,0x40,0x14,0x28,0x00,0x62,0x2c,0xd2,0x42,0x83,0x90,\r
+0x00,0x00,0x00,0x00,0x00,0x16,0x03,0x00,0x03,0x16,0x02,0x00,0xfe,0xff,0x42,0x24,\r
+0xfc,0xff,0x42,0x28,0x02,0x00,0x40,0x10,0xfe,0xff,0x62,0x24,0xfc,0xff,0x02,0x24,\r
+0xd2,0x42,0x82,0xa0,0x68,0x15,0x45,0x25,0xe8,0x63,0xa2,0x8c,0xd2,0x42,0xa3,0x90,\r
+0xce,0x42,0xa6,0x90,0x02,0x11,0x02,0x00,0x7f,0x00,0x42,0x30,0x0a,0x00,0x44,0x24,\r
+0x23,0x18,0x83,0x00,0x00,0x26,0x03,0x00,0x03,0x26,0x04,0x00,0xff,0x00,0xc2,0x30,\r
+0x2a,0x10,0x44,0x00,0x4d,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x00,0x26,0x06,0x00,\r
+0x03,0x26,0x04,0x00,0x68,0x15,0x43,0x25,0xe0,0x42,0x62,0x8c,0x00,0x00,0x00,0x00,\r
+0x11,0x27,0x42,0x2c,0x33,0x00,0x40,0x14,0x3a,0x00,0x82,0x28,0x32,0x00,0x82,0x28,\r
+0x30,0x00,0x40,0x10,0x3a,0x00,0x82,0x28,0x32,0x00,0x04,0x24,0x44,0x00,0x03,0x24,\r
+0x25,0xb0,0x02,0x3c,0x30,0x0c,0x42,0x34,0x00,0x00,0x43,0xa0,0x25,0xb0,0x02,0x3c,\r
+0x50,0x0c,0x42,0x34,0xff,0x00,0x84,0x30,0x00,0x00,0x44,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x25,0xb0,0x02,0x3c,0x58,0x0c,0x42,0x34,0x00,0x00,0x44,0xa0,\r
+0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,\r
+0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x69,0x14,0x00,0x08,0x00,0x00,0x00,0x00,\r
+0x95,0xff,0x40,0x10,0x48,0x00,0x03,0x24,0xa2,0x14,0x00,0x08,0x44,0x00,0x03,0x24,\r
+0xd1,0x42,0xa3,0x90,0x00,0x00,0x00,0x00,0x2b,0x10,0x83,0x00,0x9a,0x14,0x00,0x08,\r
+0x0b,0x20,0x62,0x00,0xca,0x42,0xa2,0x94,0x00,0x00,0x00,0x00,0x2b,0x10,0xc2,0x00,\r
+0x7a,0xff,0x40,0x14,0x00,0x00,0x00,0x00,0xcc,0x42,0xa2,0x94,0x00,0x00,0x00,0x00,\r
+0x2b,0x10,0xc2,0x00,0x07,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x92,0x14,0x00,0x08,\r
+0x01,0x00,0x82,0x24,0xd2,0xff,0x40,0x10,0x48,0x00,0x03,0x24,0xf4,0x14,0x00,0x08,\r
+0x44,0x00,0x03,0x24,0x92,0x14,0x00,0x08,0x02,0x00,0x82,0x24,0xb2,0xff,0x40,0x10,\r
+0x68,0x15,0x45,0x25,0xd2,0x42,0x83,0x90,0x00,0x00,0x00,0x00,0x00,0x16,0x03,0x00,\r
+0x03,0x16,0x02,0x00,0x02,0x00,0x42,0x24,0x0d,0x00,0x42,0x28,0x09,0x00,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0xd8,0x14,0x00,0x08,0x0c,0x00,0x02,0x24,0xcf,0x42,0xa3,0x80,\r
+0x00,0x00,0x00,0x00,0xff,0x00,0x62,0x30,0x2a,0x10,0x82,0x00,0xe9,0x14,0x00,0x08,\r
+0x0b,0x20,0x62,0x00,0xd8,0x14,0x00,0x08,0x02,0x00,0x62,0x24,0xc0,0xff,0xbd,0x27,\r
+0x28,0x00,0xb4,0xaf,0x25,0xb0,0x14,0x3c,0x24,0x00,0xb3,0xaf,0x1c,0x00,0xb1,0xaf,\r
+0x18,0x00,0xb0,0xaf,0x3c,0x00,0xbf,0xaf,0x38,0x00,0xbe,0xaf,0x34,0x00,0xb7,0xaf,\r
+0x30,0x00,0xb6,0xaf,0x2c,0x00,0xb5,0xaf,0x20,0x00,0xb2,0xaf,0xd8,0x00,0x86,0x36,\r
+0x00,0x00,0xc3,0x90,0x02,0x80,0x02,0x3c,0x68,0x15,0x51,0x24,0x2a,0xb0,0x10,0x3c,\r
+0xa0,0xff,0x02,0x24,0x25,0x18,0x62,0x00,0x34,0x00,0x05,0x36,0xfe,0xff,0x02,0x24,\r
+0xbc,0x42,0x32,0x92,0x40,0x00,0x04,0x24,0x00,0x00,0xc3,0xa0,0x00,0x00,0xa2,0xa0,\r
+0x54,0x4f,0x00,0x0c,0x00,0x96,0x12,0x00,0x21,0x98,0x40,0x00,0x8d,0x00,0x60,0x12,\r
+0x00,0x40,0x02,0x3c,0x08,0x00,0x63,0x8e,0xb0,0x03,0x82,0x36,0x25,0xb0,0x1e,0x3c,\r
+0x21,0x20,0x60,0x02,0x00,0x00,0x43,0xac,0xfb,0x44,0x00,0x0c,0x21,0xb8,0x20,0x02,\r
+0x42,0x00,0xd5,0x37,0x03,0x0c,0xd1,0x37,0x17,0x0e,0xd6,0x37,0x04,0x00,0x14,0x24,\r
+0x2a,0xb0,0x03,0x3c,0x06,0x00,0x63,0x34,0x00,0x00,0x62,0x94,0x00,0x00,0x00,0x00,\r
+0x00,0xff,0x42,0x30,0x0a,0x00,0x40,0x18,0x00,0x00,0x00,0x00,0x02,0x80,0x04,0x3c,\r
+0x94,0xa2,0x84,0x24,0x00,0x00,0x83,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x94,\r
+0x00,0x00,0x00,0x00,0x00,0xff,0x42,0x30,0xfc,0xff,0x40,0x1c,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0x65,0x8e,0x20,0x10,0x06,0x3c,0x01,0x00,0x04,0x24,0x00,0xfe,0xc6,0x34,\r
+0x40,0x00,0x07,0x24,0x10,0x01,0x00,0x0c,0x10,0x00,0xa4,0xaf,0x4d,0x01,0x00,0x0c,\r
+0x01,0x00,0x04,0x24,0x02,0x80,0x02,0x3c,0x98,0xa2,0x42,0x24,0x00,0x00,0x45,0x8c,\r
+0x01,0x00,0x03,0x24,0x21,0x20,0x00,0x00,0x00,0x00,0xa3,0xa0,0xff,0xff,0x03,0x24,\r
+0x00,0x00,0xa3,0xa2,0x00,0x00,0x22,0x92,0x00,0x00,0x00,0x00,0xff,0x00,0x42,0x30,\r
+0x40,0x00,0x42,0x34,0x00,0x00,0x22,0xa2,0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30,\r
+0x06,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24,0x02,0x00,0x02,0x24,\r
+0x02,0x80,0x04,0x3c,0x00,0x00,0xa2,0xa0,0x68,0x15,0x83,0x24,0xc1,0x42,0x62,0x90,\r
+0x00,0x00,0xc4,0x92,0x21,0x28,0x00,0x00,0x00,0x00,0xc2,0xa2,0xff,0x00,0x90,0x30,\r
+0x01,0x00,0xa2,0x24,0xff,0x00,0x45,0x30,0x06,0x00,0xa3,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0xa2,0x24,0xef,0xff,0x02,0x24,0x64,0x00,0x04,0x24,0x00,0x00,0xa2,0xa2,\r
+0x1a,0x0c,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x92,0x21,0x20,0x00,0x00,\r
+0xbf,0x00,0x42,0x30,0x00,0x00,0x22,0xa2,0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30,\r
+0x06,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24,0x1a,0x0c,0x00,0x0c,\r
+0x84,0x03,0x04,0x24,0xf4,0x08,0xc2,0x37,0x00,0x00,0x43,0x8c,0x00,0x80,0x04,0x3c,\r
+0xdf,0x07,0x84,0x34,0x00,0x00,0xd0,0xa2,0x21,0x10,0x00,0x00,0x24,0x28,0x64,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x00,0x00,0xa0,0xa2,0x00,0x00,0x22,0x92,0x21,0x20,0x00,0x00,\r
+0xff,0x00,0x42,0x30,0x40,0x00,0x42,0x34,0x00,0x00,0x22,0xa2,0x01,0x00,0x82,0x24,\r
+0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24,\r
+0xbe,0x42,0xe2,0x92,0x1f,0x00,0xa3,0x30,0x2b,0x10,0x62,0x00,0x0a,0x00,0x40,0x10,\r
+0x02,0x80,0x02,0x3c,0xbf,0x42,0xe2,0x92,0x00,0x00,0x00,0x00,0x2b,0x10,0x43,0x00,\r
+0x05,0x00,0x40,0x10,0x02,0x80,0x02,0x3c,0x01,0x00,0x02,0x3c,0x25,0x10,0x62,0x00,\r
+0x21,0x90,0x42,0x02,0x02,0x80,0x02,0x3c,0xee,0x7d,0x43,0x90,0x22,0x00,0x02,0x24,\r
+0x1c,0x00,0x62,0x10,0x92,0x00,0x02,0x24,0x1b,0x00,0x62,0x10,0x02,0x80,0x03,0x3c,\r
+0xff,0xff,0x94,0x26,0x1a,0x0c,0x00,0x0c,0xf4,0x01,0x04,0x24,0x89,0xff,0x81,0x06,\r
+0x2a,0xb0,0x03,0x3c,0x04,0x00,0x60,0x12,0x25,0xb0,0x02,0x3c,0x70,0x4f,0x00,0x0c,\r
+0x21,0x20,0x60,0x02,0x25,0xb0,0x02,0x3c,0xd8,0x02,0x42,0x34,0x00,0x00,0x52,0xac,\r
+0x21,0x10,0x40,0x02,0x3c,0x00,0xbf,0x8f,0x38,0x00,0xbe,0x8f,0x34,0x00,0xb7,0x8f,\r
+0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,\r
+0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,\r
+0x40,0x00,0xbd,0x27,0x02,0x80,0x03,0x3c,0x68,0x15,0x63,0x24,0xbe,0x42,0x62,0x90,\r
+0xc0,0x07,0xa3,0x30,0x82,0x19,0x03,0x00,0x2b,0x10,0x62,0x00,0xe0,0xff,0x40,0x10,\r
+0x02,0x80,0x04,0x3c,0x68,0x15,0x84,0x24,0xbf,0x42,0x82,0x90,0x00,0x00,0x00,0x00,\r
+0x2b,0x10,0x43,0x00,0xda,0xff,0x40,0x10,0x00,0x12,0x03,0x00,0x10,0x00,0x03,0x3c,\r
+0x25,0x10,0x43,0x00,0xd8,0x15,0x00,0x08,0x21,0x90,0x42,0x02,0xe0,0xff,0xbd,0x27,\r
+0x10,0x00,0xb0,0xaf,0x0f,0x00,0x10,0x3c,0xff,0xff,0x05,0x36,0xf0,0xf8,0x06,0x34,\r
+0x15,0x00,0x04,0x24,0x1c,0x00,0xbf,0xaf,0x18,0x00,0xb2,0xaf,0x6a,0x44,0x00,0x0c,\r
+0x14,0x00,0xb1,0xaf,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,0x02,0x80,0x12,0x3c,\r
+0xff,0xff,0x05,0x36,0x56,0x30,0x06,0x24,0x6a,0x44,0x00,0x0c,0x1a,0x00,0x04,0x24,\r
+0x68,0x15,0x51,0x26,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,0x04,0x43,0x23,0x92,\r
+0x04,0x00,0x02,0x24,0x20,0x00,0x62,0x10,0x25,0xb0,0x02,0x3c,0x14,0x43,0x25,0x8e,\r
+0x25,0xb0,0x10,0x3c,0x15,0x5a,0x00,0x0c,0x00,0x0e,0x04,0x36,0x14,0x43,0x25,0x8e,\r
+0x15,0x5a,0x00,0x0c,0x04,0x0e,0x04,0x36,0x18,0x43,0x25,0x8e,0x15,0x5a,0x00,0x0c,\r
+0x08,0x0e,0x04,0x36,0x14,0x43,0x25,0x8e,0x15,0x5a,0x00,0x0c,0x10,0x0e,0x04,0x36,\r
+0x14,0x43,0x25,0x8e,0x15,0x5a,0x00,0x0c,0x14,0x0e,0x04,0x36,0x14,0x43,0x25,0x8e,\r
+0x15,0x5a,0x00,0x0c,0x18,0x0e,0x04,0x36,0x14,0x43,0x25,0x8e,0x15,0x5a,0x00,0x0c,\r
+0x1c,0x0e,0x04,0x36,0x68,0x15,0x43,0x26,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x04,0x00,0x02,0x24,0x20,0x00,0xbd,0x27,\r
+0x08,0x00,0xe0,0x03,0x04,0x43,0x62,0xa0,0x00,0x0e,0x42,0x34,0x00,0x00,0x43,0x8c,\r
+0x14,0x43,0x25,0x8e,0x00,0x00,0x00,0x00,0xde,0xff,0x65,0x14,0x25,0xb0,0x10,0x3c,\r
+0x32,0x16,0x00,0x08,0x68,0x15,0x43,0x26,0xe0,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,\r
+0x0f,0x00,0x10,0x3c,0xff,0xff,0x05,0x36,0xf0,0xf8,0x06,0x34,0x15,0x00,0x04,0x24,\r
+0x1c,0x00,0xbf,0xaf,0x18,0x00,0xb2,0xaf,0x6a,0x44,0x00,0x0c,0x14,0x00,0xb1,0xaf,\r
+0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,0xff,0xff,0x05,0x36,0x56,0x30,0x06,0x24,\r
+0x6a,0x44,0x00,0x0c,0x1a,0x00,0x04,0x24,0x02,0x80,0x10,0x3c,0x1a,0x0c,0x00,0x0c,\r
+0x64,0x00,0x04,0x24,0x68,0x15,0x02,0x26,0x04,0x43,0x46,0x90,0x25,0xb0,0x11,0x3c,\r
+0x10,0x10,0x12,0x3c,0x01,0x00,0x03,0x24,0x00,0x0e,0x24,0x36,0x1e,0x00,0xc3,0x10,\r
+0x10,0x10,0x45,0x36,0x15,0x5a,0x00,0x0c,0x00,0x00,0x00,0x00,0x04,0x0e,0x24,0x36,\r
+0x15,0x5a,0x00,0x0c,0x10,0x10,0x45,0x36,0x08,0x0e,0x24,0x36,0x15,0x5a,0x00,0x0c,\r
+0x10,0x10,0x05,0x24,0x10,0x0e,0x24,0x36,0x15,0x5a,0x00,0x0c,0x10,0x10,0x45,0x36,\r
+0x14,0x0e,0x24,0x36,0x15,0x5a,0x00,0x0c,0x10,0x10,0x45,0x36,0x18,0x0e,0x24,0x36,\r
+0x15,0x5a,0x00,0x0c,0x10,0x10,0x45,0x36,0x1c,0x0e,0x24,0x36,0x15,0x5a,0x00,0x0c,\r
+0x10,0x10,0x45,0x36,0x68,0x15,0x03,0x26,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x01,0x00,0x02,0x24,0x20,0x00,0xbd,0x27,\r
+0x08,0x00,0xe0,0x03,0x04,0x43,0x62,0xa0,0x00,0x00,0x86,0x8c,0x00,0x00,0x00,0x00,\r
+0xe0,0xff,0xc5,0x14,0x68,0x15,0x03,0x26,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x01,0x00,0x02,0x24,0x20,0x00,0xbd,0x27,\r
+0x08,0x00,0xe0,0x03,0x04,0x43,0x62,0xa0,0xe0,0xff,0xbd,0x27,0x14,0x00,0xb1,0xaf,\r
+0x10,0x00,0xb0,0xaf,0x0f,0x00,0x11,0x3c,0x01,0x00,0x10,0x3c,0xff,0xff,0x25,0x36,\r
+0xf4,0x98,0x06,0x36,0x15,0x00,0x04,0x24,0x1c,0x00,0xbf,0xaf,0x6a,0x44,0x00,0x0c,\r
+0x18,0x00,0xb2,0xaf,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,0x56,0x30,0x06,0x36,\r
+0xff,0xff,0x25,0x36,0x1a,0x00,0x04,0x24,0x6a,0x44,0x00,0x0c,0x02,0x80,0x11,0x3c,\r
+0x68,0x15,0x30,0x26,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,0x04,0x43,0x02,0x92,\r
+0x25,0xb0,0x12,0x3c,0x08,0x00,0x40,0x14,0x08,0x0e,0x44,0x36,0x25,0xb0,0x02,0x3c,\r
+0x00,0x0e,0x42,0x34,0x00,0x00,0x45,0x8c,0xec,0x42,0x03,0x8e,0x00,0x00,0x00,0x00,\r
+0x17,0x00,0xa3,0x10,0x68,0x15,0x22,0x26,0xe8,0x42,0x05,0x8e,0x15,0x5a,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0xec,0x42,0x05,0x8e,0x15,0x5a,0x00,0x0c,0x00,0x0e,0x44,0x36,\r
+0xf0,0x42,0x05,0x8e,0x15,0x5a,0x00,0x0c,0x04,0x0e,0x44,0x36,0xf4,0x42,0x05,0x8e,\r
+0x15,0x5a,0x00,0x0c,0x10,0x0e,0x44,0x36,0xf8,0x42,0x05,0x8e,0x15,0x5a,0x00,0x0c,\r
+0x14,0x0e,0x44,0x36,0xfc,0x42,0x05,0x8e,0x15,0x5a,0x00,0x0c,0x18,0x0e,0x44,0x36,\r
+0x00,0x43,0x05,0x8e,0x15,0x5a,0x00,0x0c,0x1c,0x0e,0x44,0x36,0x68,0x15,0x22,0x26,\r
+0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x20,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03,0x04,0x43,0x40,0xa0,0xe0,0xff,0xbd,0x27,\r
+0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x0f,0x00,0x11,0x3c,0x01,0x00,0x10,0x3c,\r
+0xff,0xff,0x25,0x36,0xf4,0x98,0x06,0x36,0x15,0x00,0x04,0x24,0x1c,0x00,0xbf,0xaf,\r
+0x6a,0x44,0x00,0x0c,0x18,0x00,0xb2,0xaf,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,\r
+0x02,0x80,0x12,0x3c,0xff,0xff,0x25,0x36,0x56,0x30,0x06,0x36,0x6a,0x44,0x00,0x0c,\r
+0x1a,0x00,0x04,0x24,0x68,0x15,0x51,0x26,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,\r
+0x04,0x43,0x23,0x92,0x03,0x00,0x02,0x24,0x2c,0x00,0x62,0x10,0x25,0xb0,0x02,0x3c,\r
+0xec,0x42,0x25,0x8e,0x25,0xb0,0x10,0x3c,0x15,0x5a,0x00,0x0c,0x00,0x0e,0x04,0x36,\r
+0xf0,0x42,0x25,0x8e,0x15,0x5a,0x00,0x0c,0x04,0x0e,0x04,0x36,0xf4,0x42,0x25,0x8e,\r
+0x15,0x5a,0x00,0x0c,0x10,0x0e,0x04,0x36,0xf8,0x42,0x25,0x8e,0x15,0x5a,0x00,0x0c,\r
+0x14,0x0e,0x04,0x36,0xfc,0x42,0x25,0x8e,0x15,0x5a,0x00,0x0c,0x18,0x0e,0x04,0x36,\r
+0x00,0x43,0x25,0x8e,0x15,0x5a,0x00,0x0c,0x1c,0x0e,0x04,0x36,0x08,0x43,0x24,0x8e,\r
+0xe8,0x42,0x22,0x8e,0x00,0x00,0x00,0x00,0x21,0x28,0x44,0x00,0x00,0xff,0xa3,0x30,\r
+0xff,0xff,0x02,0x3c,0xff,0x00,0x42,0x34,0x01,0x3f,0x63,0x2c,0x24,0x10,0xa2,0x00,\r
+0x0c,0x00,0x60,0x10,0x08,0x0e,0x04,0x36,0x15,0x5a,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x68,0x15,0x43,0x26,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x03,0x00,0x02,0x24,0x20,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03,\r
+0x04,0x43,0x62,0xa0,0xfa,0x16,0x00,0x08,0x00,0x3f,0x45,0x34,0x00,0x0e,0x42,0x34,\r
+0x00,0x00,0x43,0x8c,0xec,0x42,0x25,0x8e,0x00,0x00,0x00,0x00,0xd2,0xff,0x65,0x14,\r
+0x25,0xb0,0x10,0x3c,0xfd,0x16,0x00,0x08,0x68,0x15,0x43,0x26,0xd0,0xff,0xbd,0x27,\r
+0x18,0x00,0xb2,0xaf,0x02,0x80,0x12,0x3c,0x24,0x00,0xb5,0xaf,0x20,0x00,0xb4,0xaf,\r
+0x68,0x15,0x42,0x26,0x28,0x00,0xbf,0xaf,0x1c,0x00,0xb3,0xaf,0x14,0x00,0xb1,0xaf,\r
+0x10,0x00,0xb0,0xaf,0xe8,0x63,0x43,0x8c,0x02,0x80,0x15,0x3c,0xee,0x7d,0xa4,0x92,\r
+0x04,0x43,0x53,0x90,0x25,0xb0,0x02,0x3c,0x0f,0x0c,0x42,0x34,0x02,0x19,0x03,0x00,\r
+0x00,0x00,0x44,0xa0,0x7f,0x00,0x74,0x30,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,\r
+0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,\r
+0x68,0x15,0x42,0x26,0x00,0x40,0x43,0x8c,0x00,0x10,0x02,0x24,0xf0,0xf0,0x63,0x30,\r
+0x98,0x00,0x62,0x10,0x01,0x00,0x02,0x24,0x25,0xb0,0x09,0x3c,0x4c,0x00,0x23,0x35,\r
+0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,0x03,0x00,0x42,0x30,0x3f,0x00,0x40,0x10,\r
+0x68,0x15,0x45,0x26,0x68,0x15,0x4a,0x26,0x00,0x40,0x42,0x8d,0x00,0x00,0x00,0x00,\r
+0x02,0x13,0x02,0x00,0x0f,0x00,0x42,0x30,0x38,0x00,0x40,0x14,0x00,0x00,0x00,0x00,\r
+0x00,0x0e,0x25,0x35,0x00,0x00,0xa2,0x8c,0x00,0x00,0x00,0x00,0x8c,0x00,0x40,0x10,\r
+0x10,0x0e,0x26,0x35,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0x08,0x0e,0x22,0x35,0x04,0x0e,0x24,0x35,0x00,0x00,0x43,0x8c,\r
+0x00,0x00,0xa5,0x8c,0x00,0x00,0x82,0x8c,0xe8,0x42,0x43,0xad,0xec,0x42,0x45,0xad,\r
+0xf0,0x42,0x42,0xad,0x14,0x0e,0x24,0x35,0x18,0x0e,0x22,0x35,0x1c,0x0e,0x25,0x35,\r
+0x00,0x00,0xc6,0x8c,0x00,0x00,0x87,0x8c,0x00,0x00,0x48,0x8c,0x00,0x00,0xa4,0x8c,\r
+0x00,0xff,0x63,0x30,0x9a,0x0c,0x22,0x35,0x02,0x1a,0x03,0x00,0x00,0x43,0x44,0xad,\r
+0x00,0x00,0x43,0xa0,0xf4,0x42,0x46,0xad,0xf8,0x42,0x47,0xad,0xfc,0x42,0x48,0xad,\r
+0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,\r
+0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0xee,0x7d,0xa3,0x92,0x22,0x00,0x02,0x24,\r
+0xac,0x00,0x62,0x10,0x92,0x00,0x02,0x24,0xab,0x00,0x62,0x10,0x25,0xb0,0x02,0x3c,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x68,0x15,0x44,0x26,\r
+0x00,0x40,0x83,0x8c,0xff,0xff,0x02,0x3c,0xff,0x0f,0x42,0x34,0x24,0x18,0x62,0x00,\r
+0x00,0x10,0x63,0x34,0x00,0x40,0x83,0xac,0x68,0x15,0x45,0x26,0x04,0x43,0xa2,0x8c,\r
+0x00,0x00,0x00,0x00,0x02,0x12,0x02,0x00,0x0f,0x00,0x40,0x14,0x68,0x15,0x42,0x26,\r
+0x25,0xb0,0x02,0x3c,0x84,0x01,0x42,0x34,0x00,0x00,0x44,0x8c,0x0d,0x00,0x03,0x24,\r
+0x8c,0x00,0x83,0x10,0x3e,0x00,0x02,0x24,0x4a,0x00,0x03,0x24,0x1f,0x43,0xa2,0xa0,\r
+0x45,0x00,0x02,0x24,0x1c,0x43,0xa3,0xa0,0x1d,0x43,0xa2,0xa0,0x43,0x00,0x03,0x24,\r
+0x1e,0x43,0xa3,0xa0,0x68,0x15,0x42,0x26,0xe8,0x63,0x43,0x8c,0x25,0xb0,0x02,0x3c,\r
+0x60,0x0c,0x42,0x34,0x02,0x19,0x03,0x00,0xff,0x00,0x63,0x30,0x00,0x00,0x43,0xa0,\r
+0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,\r
+0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x42,0x26,0x04,0x40,0x43,0x8c,\r
+0x25,0xb0,0x02,0x3c,0x98,0x0c,0x42,0x34,0x02,0x19,0x03,0x00,0xff,0x00,0x63,0x30,\r
+0x00,0x00,0x43,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x42,0x26,\r
+0x1e,0x43,0x44,0x90,0x25,0xb0,0x03,0x3c,0x66,0x0c,0x63,0x34,0x00,0x00,0x64,0xa0,\r
+0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,\r
+0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x42,0x26,0x1c,0x43,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0x67,0x0c,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x68,0x15,0x44,0x26,0x00,0x40,0x85,0x8c,0x10,0x10,0x02,0x24,\r
+0xf0,0xf0,0xa3,0x30,0x2b,0x00,0x62,0x10,0xff,0xff,0x02,0x34,0x28,0x00,0xbf,0x8f,\r
+0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x30,0x00,0xbd,0x27,0x0d,0x00,0x62,0x12,0x04,0x00,0x02,0x24,0x0b,0x00,0x62,0x12,\r
+0x68,0x15,0x43,0x26,0xff,0xff,0x02,0x24,0x2e,0x17,0x00,0x08,0x04,0x43,0x62,0xa0,\r
+0x00,0x00,0xc3,0x8c,0x3f,0x3f,0x02,0x3c,0x3f,0x3f,0x42,0x34,0x71,0xff,0x62,0x14,\r
+0x00,0x00,0x00,0x00,0x73,0x17,0x00,0x08,0x68,0x15,0x45,0x26,0x0f,0x00,0x10,0x3c,\r
+0x01,0x00,0x11,0x3c,0xff,0xff,0x05,0x36,0xf4,0x98,0x26,0x36,0x6a,0x44,0x00,0x0c,\r
+0x15,0x00,0x04,0x24,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,0xff,0xff,0x05,0x36,\r
+0x56,0x30,0x26,0x36,0x6a,0x44,0x00,0x0c,0x1a,0x00,0x04,0x24,0x1a,0x0c,0x00,0x0c,\r
+0x64,0x00,0x04,0x24,0x68,0x15,0x43,0x26,0xff,0xff,0x02,0x24,0x2e,0x17,0x00,0x08,\r
+0x04,0x43,0x62,0xa0,0xe8,0x63,0x83,0x8c,0x00,0x00,0x00,0x00,0xd3,0xff,0x62,0x10,\r
+0x02,0x12,0x05,0x00,0x0f,0x00,0x45,0x30,0x01,0x00,0x03,0x24,0xcf,0xff,0xa3,0x14,\r
+0x25,0xb0,0x02,0x3c,0x4c,0x00,0x42,0x34,0x00,0x00,0x43,0x90,0x00,0x00,0x00,0x00,\r
+0x03,0x00,0x63,0x30,0xc9,0xff,0x60,0x10,0x03,0x00,0x02,0x24,0x4d,0x00,0x62,0x12,\r
+0x04,0x00,0x62,0x2a,0x2f,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x52,0x00,0x60,0x12,\r
+0x00,0x00,0x00,0x00,0xc1,0xff,0x65,0x16,0x00,0x00,0x00,0x00,0x1c,0x43,0x82,0x90,\r
+0x00,0x00,0x00,0x00,0x2b,0x10,0x82,0x02,0x3e,0x00,0x40,0x10,0x00,0x00,0x00,0x00,\r
+0x1f,0x43,0x82,0x90,0x00,0x00,0x00,0x00,0x2b,0x10,0x54,0x00,0x30,0x00,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0x86,0x16,0x00,0x0c,0x00,0x00,0x00,0x00,0xbb,0x17,0x00,0x08,\r
+0x00,0x00,0x00,0x00,0x3b,0x00,0x02,0x24,0x46,0x00,0x03,0x24,0x1f,0x43,0xa2,0xa0,\r
+0x1c,0x43,0xa3,0xa0,0x41,0x00,0x02,0x24,0x40,0x00,0x03,0x24,0x84,0x17,0x00,0x08,\r
+0x1d,0x43,0xa2,0xa0,0x25,0xb0,0x02,0x3c,0x0d,0x08,0x42,0x34,0x00,0x00,0x43,0x90,\r
+0x00,0x00,0x00,0x00,0x0f,0x00,0x63,0x30,0x08,0x00,0x62,0x2c,0x0f,0x00,0x63,0x38,\r
+0x4f,0xff,0x40,0x14,0x01,0x00,0x65,0x24,0x00,0x1c,0x05,0x00,0x00,0x16,0x05,0x00,\r
+0x25,0x10,0x43,0x00,0x00,0x22,0x05,0x00,0x25,0x10,0x44,0x00,0x68,0x15,0x43,0x26,\r
+0x25,0x20,0x85,0x00,0x25,0x10,0x45,0x00,0x18,0x43,0x64,0xac,0x68,0x17,0x00,0x08,\r
+0x14,0x43,0x62,0xac,0x04,0x00,0x02,0x24,0x11,0x00,0x62,0x12,0xff,0x00,0x02,0x24,\r
+0x92,0xff,0x62,0x16,0x00,0x00,0x00,0x00,0x1e,0x43,0x82,0x90,0x00,0x00,0x00,0x00,\r
+0x2b,0x10,0x82,0x02,0x21,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x1c,0x43,0x82,0x90,\r
+0x00,0x00,0x00,0x00,0x2b,0x10,0x82,0x02,0x0a,0x00,0x40,0x10,0x00,0x00,0x00,0x00,\r
+0x42,0x16,0x00,0x0c,0x00,0x00,0x00,0x00,0xbb,0x17,0x00,0x08,0x00,0x00,0x00,0x00,\r
+0x1d,0x43,0x82,0x90,0x00,0x00,0x00,0x00,0x2b,0x10,0x54,0x00,0xf8,0xff,0x40,0x10,\r
+0x00,0x00,0x00,0x00,0x03,0x16,0x00,0x0c,0x00,0x00,0x00,0x00,0xbb,0x17,0x00,0x08,\r
+0x00,0x00,0x00,0x00,0x20,0x43,0x82,0x90,0x00,0x00,0x00,0x00,0x2b,0x10,0x82,0x02,\r
+0xc0,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0xc3,0x16,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0xbb,0x17,0x00,0x08,0x00,0x00,0x00,0x00,0x1e,0x43,0x82,0x90,0x00,0x00,0x00,0x00,\r
+0x2b,0x10,0x82,0x02,0xe6,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0x21,0x43,0x82,0x90,\r
+0x00,0x00,0x00,0x00,0x2b,0x10,0x54,0x00,0xb2,0xff,0x40,0x14,0x00,0x00,0x00,0x00,\r
+0xc3,0x16,0x00,0x0c,0x00,0x00,0x00,0x00,0xbb,0x17,0x00,0x08,0x00,0x00,0x00,0x00,\r
+0x02,0x80,0x08,0x3c,0x68,0x15,0x05,0x25,0xe8,0x63,0xa4,0x8c,0xe6,0x42,0xa3,0x90,\r
+0x02,0x11,0x04,0x00,0x26,0x00,0x60,0x14,0x7f,0x00,0x46,0x30,0x25,0xb0,0x07,0x3c,\r
+0x4c,0x00,0xe2,0x34,0x00,0x00,0x43,0x90,0x00,0x00,0x00,0x00,0x20,0x00,0x60,0x10,\r
+0x00,0x00,0x00,0x00,0xff,0xff,0x02,0x34,0x1d,0x00,0x82,0x10,0x00,0x00,0x00,0x00,\r
+0x00,0x08,0xe3,0x34,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30,\r
+0x19,0x00,0x40,0x10,0x4b,0x00,0xc2,0x2c,0x3e,0x00,0x40,0x10,0x01,0x00,0x04,0x24,\r
+0xd8,0xff,0xc2,0x24,0x1e,0x00,0x42,0x2c,0x49,0x00,0x40,0x10,0x23,0x00,0xc2,0x2c,\r
+0x68,0x15,0x04,0x25,0xd3,0x42,0x82,0x90,0x00,0x00,0x00,0x00,0x44,0x00,0x40,0x10,\r
+0x23,0x00,0xc2,0x2c,0x25,0xb0,0x02,0x3c,0x87,0x0c,0x42,0x34,0x20,0x00,0x03,0x24,\r
+0x00,0x00,0x43,0xa0,0xd3,0x42,0x80,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,\r
+0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x17,0x00,0x40,0x10,0x01,0x00,0x04,0x24,\r
+0xd8,0xff,0xc2,0x24,0x1e,0x00,0x42,0x2c,0x44,0x00,0x40,0x10,0x23,0x00,0xc2,0x2c,\r
+0x68,0x15,0x04,0x25,0xd3,0x42,0x82,0x90,0x00,0x00,0x00,0x00,0x3f,0x00,0x40,0x10,\r
+0x23,0x00,0xc2,0x2c,0x25,0xb0,0x02,0x3c,0x30,0x0c,0x42,0x34,0x44,0x00,0x03,0x24,\r
+0x00,0x00,0x43,0xa0,0xd3,0x42,0x80,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,\r
+0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0xd3,0x42,0xa2,0x90,0x00,0x00,0x00,0x00,\r
+0xe7,0xff,0x44,0x10,0x43,0x00,0x02,0x24,0x30,0x0c,0xe3,0x34,0xd3,0x42,0xa4,0xa0,\r
+0x00,0x00,0x62,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0xd3,0x42,0xa2,0x90,0x00,0x00,0x00,0x00,0xc0,0xff,0x44,0x10,\r
+0x10,0x00,0x02,0x24,0x87,0x0c,0xe3,0x34,0xd3,0x42,0xa4,0xa0,0x00,0x00,0x62,0xa0,\r
+0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,\r
+0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,\r
+0xc7,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0x68,0x15,0x04,0x25,0xd3,0x42,0x82,0x90,\r
+0x02,0x00,0x03,0x24,0xc2,0xff,0x43,0x10,0x00,0x00,0x00,0x00,0x25,0xb0,0x02,0x3c,\r
+0x87,0x0c,0x42,0x34,0xd3,0x42,0x83,0xa0,0x00,0x00,0x40,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0xb4,0xff,0x40,0x10,\r
+0x00,0x00,0x00,0x00,0x68,0x15,0x04,0x25,0xd3,0x42,0x82,0x90,0x02,0x00,0x03,0x24,\r
+0xaf,0xff,0x43,0x10,0x00,0x00,0x00,0x00,0x25,0xb0,0x02,0x3c,0xd3,0x42,0x83,0xa0,\r
+0x30,0x0c,0x42,0x34,0x42,0x00,0x03,0x24,0x00,0x00,0x43,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0xff,0xff,0x8d,0x30,\r
+0x00,0x60,0x0f,0x40,0x01,0x00,0xe1,0x35,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x02,0x80,0x06,0x3c,0x68,0x15,0xce,0x24,0x76,0x4b,0xc2,0x91,0x00,0x00,0x00,0x00,\r
+0x1d,0x00,0x40,0x10,0x25,0xb0,0x03,0x3c,0x38,0x02,0x64,0x34,0x80,0xff,0x02,0x24,\r
+0x00,0x00,0x82,0xa0,0x34,0x02,0x6a,0x34,0xd2,0x01,0x65,0x34,0xd6,0x01,0x66,0x34,\r
+0xda,0x01,0x67,0x34,0xde,0x01,0x63,0x34,0x00,0x00,0xa8,0x94,0x00,0x00,0xc9,0x94,\r
+0x00,0x00,0xeb,0x94,0x00,0x00,0x6c,0x94,0x00,0x00,0x44,0x95,0xb0,0xfe,0xa2,0x25,\r
+0xff,0xff,0x4d,0x30,0x74,0x4b,0xc4,0xa5,0x00,0x00,0xa0,0xa4,0x6c,0x4b,0xc8,0xa5,\r
+0x00,0x00,0xc0,0xa4,0x6e,0x4b,0xc9,0xa5,0x00,0x00,0xe0,0xa4,0x70,0x4b,0xcb,0xa5,\r
+0x00,0x00,0x60,0xa4,0x00,0x00,0x4d,0xa5,0x72,0x4b,0xcc,0xa5,0x00,0x60,0x8f,0x40,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x2a,0xb0,0x02,0x3c,0x0a,0x00,0x45,0x34,\r
+0x63,0x00,0x03,0x24,0xff,0xff,0x04,0x34,0x00,0x00,0xa2,0x90,0x00,0x00,0x00,0x00,\r
+0x0a,0x00,0x40,0x10,0x68,0x15,0xc2,0x24,0x64,0x00,0x02,0x24,0xff,0xff,0x42,0x24,\r
+0xff,0xff,0x42,0x30,0xfe,0xff,0x40,0x14,0xff,0xff,0x42,0x24,0xff,0xff,0x62,0x24,\r
+0xff,0xff,0x43,0x30,0xf4,0xff,0x64,0x14,0x68,0x15,0xc2,0x24,0x74,0x4b,0x48,0x94,\r
+0x72,0x4b,0x47,0x94,0x6c,0x4b,0x49,0x94,0x6e,0x4b,0x4a,0x94,0x70,0x4b,0x4b,0x94,\r
+0x25,0xb0,0x03,0x3c,0x38,0x02,0x6c,0x34,0x34,0x02,0x62,0x34,0xd2,0x01,0x64,0x34,\r
+0xd6,0x01,0x65,0x34,0xda,0x01,0x66,0x34,0xde,0x01,0x63,0x34,0x00,0x00,0x48,0xa4,\r
+0x00,0x00,0x89,0xa4,0x00,0x00,0xaa,0xa4,0x00,0x00,0xcb,0xa4,0x00,0x00,0x67,0xa4,\r
+0x00,0x00,0x80,0xa1,0x00,0x60,0x8f,0x40,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x25,0xb0,0x02,0x3c,0x08,0x00,0x43,0x34,0x00,0x00,0x64,0x94,0x03,0x00,0x49,0x34,\r
+0x40,0x00,0x45,0x34,0x00,0x24,0x04,0x00,0x03,0x24,0x04,0x00,0xfc,0x77,0x0a,0x24,\r
+0x00,0x03,0x46,0x34,0x04,0x03,0x47,0x34,0x0f,0x00,0x80,0x04,0x23,0x00,0x48,0x34,\r
+0x00,0x00,0x22,0x91,0xfe,0xff,0x03,0x24,0x24,0x10,0x43,0x00,0x00,0x00,0x22,0xa1,\r
+0x22,0x00,0x02,0x24,0x00,0x00,0xc0,0xac,0x00,0x00,0xe0,0xac,0x00,0x00,0x02,0xa1,\r
+0xfc,0x37,0x02,0x24,0x00,0x00,0xaa,0xa4,0x00,0x00,0xa2,0xa4,0x00,0x00,0xaa,0xa4,\r
+0x00,0x00,0xa0,0xa4,0x00,0x00,0xa0,0xa4,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0xd0,0xff,0xbd,0x27,0x1c,0x00,0xb1,0xaf,0x28,0x00,0xbf,0xaf,0x24,0x00,0xb3,0xaf,\r
+0x20,0x00,0xb2,0xaf,0x18,0x00,0xb0,0xaf,0xff,0xff,0x11,0x24,0x02,0x80,0x13,0x3c,\r
+0x41,0xb0,0x02,0x3c,0x68,0x15,0x66,0x26,0x04,0x00,0x42,0x34,0x00,0x00,0x47,0x8c,\r
+0x00,0x4b,0xc5,0x8c,0x02,0x80,0x03,0x3c,0xf6,0x7d,0x64,0x90,0xfc,0x4a,0xc8,0x8c,\r
+0x02,0x80,0x02,0x3c,0x18,0x7e,0x49,0x90,0x25,0xb0,0x0a,0x3c,0x25,0x90,0xa7,0x00,\r
+0xb0,0x03,0x42,0x35,0x00,0x00,0x52,0xac,0x00,0x24,0x04,0x00,0x00,0x00,0x48,0xac,\r
+0x84,0x02,0x43,0x35,0x8c,0x02,0x45,0x35,0x01,0x00,0x02,0x24,0x00,0x00,0x72,0xac,\r
+0x00,0x00,0xa4,0xac,0x88,0x04,0x22,0x11,0x00,0x4b,0xd2,0xac,0x68,0x15,0x64,0x26,\r
+0xfc,0x4a,0x82,0x8c,0x00,0x00,0x00,0x00,0x24,0x10,0x52,0x00,0x01,0x00,0x42,0x30,\r
+0x0e,0x00,0x40,0x10,0x68,0x15,0x66,0x26,0x25,0xb0,0x0b,0x3c,0xb0,0x03,0x63,0x35,\r
+0x01,0x00,0x06,0x24,0x00,0x00,0x66,0xac,0x04,0x00,0x62,0x35,0x00,0x00,0x4a,0x8c,\r
+0x00,0x4b,0x83,0x8c,0x40,0x00,0x02,0x3c,0x24,0x10,0x42,0x01,0x01,0x00,0x63,0x38,\r
+0x47,0x04,0x40,0x10,0x00,0x4b,0x83,0xac,0x68,0x15,0x66,0x26,0xfc,0x4a,0xc2,0x8c,\r
+0x00,0x00,0x00,0x00,0x24,0x28,0x52,0x00,0x04,0x00,0xa3,0x30,0x09,0x00,0x60,0x10,\r
+0x08,0x00,0xa2,0x30,0x00,0x4b,0xc2,0x8c,0x25,0xb0,0x03,0x3c,0x04,0x00,0x04,0x24,\r
+0x04,0x00,0x42,0x38,0xb0,0x03,0x63,0x34,0x00,0x00,0x64,0xac,0x00,0x4b,0xc2,0xac,\r
+0x08,0x00,0xa2,0x30,0x06,0x00,0x40,0x10,0x10,0x00,0xa2,0x30,0x00,0x4b,0xc2,0x8c,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0x42,0x38,0x00,0x4b,0xc2,0xac,0x10,0x00,0xa2,0x30,\r
+0x06,0x00,0x40,0x10,0x20,0x00,0xa2,0x30,0x00,0x4b,0xc2,0x8c,0x00,0x00,0x00,0x00,\r
+0x10,0x00,0x42,0x38,0x00,0x4b,0xc2,0xac,0x20,0x00,0xa2,0x30,0x06,0x00,0x40,0x10,\r
+0x40,0x00,0xa2,0x30,0x00,0x4b,0xc2,0x8c,0x00,0x00,0x00,0x00,0x20,0x00,0x42,0x38,\r
+0x00,0x4b,0xc2,0xac,0x40,0x00,0xa2,0x30,0x06,0x00,0x40,0x10,0x80,0x00,0xa2,0x30,\r
+0x00,0x4b,0xc2,0x8c,0x00,0x00,0x00,0x00,0x40,0x00,0x42,0x38,0x00,0x4b,0xc2,0xac,\r
+0x80,0x00,0xa2,0x30,0x06,0x00,0x40,0x10,0x00,0x01,0xa2,0x30,0x00,0x4b,0xc2,0x8c,\r
+0x00,0x00,0x00,0x00,0x80,0x00,0x42,0x38,0x00,0x4b,0xc2,0xac,0x00,0x01,0xa2,0x30,\r
+0x06,0x00,0x40,0x10,0x00,0x02,0xa2,0x30,0x00,0x4b,0xc2,0x8c,0x00,0x00,0x00,0x00,\r
+0x00,0x01,0x42,0x38,0x00,0x4b,0xc2,0xac,0x00,0x02,0xa2,0x30,0x06,0x00,0x40,0x10,\r
+0x00,0x04,0xa2,0x30,0x00,0x4b,0xc2,0x8c,0x00,0x00,0x00,0x00,0x00,0x02,0x42,0x38,\r
+0x00,0x4b,0xc2,0xac,0x00,0x04,0xa2,0x30,0x05,0x00,0x40,0x10,0x00,0x00,0x00,0x00,\r
+0x00,0x4b,0xc2,0x8c,0x00,0x00,0x00,0x00,0x00,0x04,0x42,0x38,0x00,0x4b,0xc2,0xac,\r
+0x00,0x08,0xa2,0x30,0x36,0x00,0x40,0x10,0x2a,0xb0,0x03,0x3c,0x00,0x00,0x6a,0x8c,\r
+0xff,0x00,0x02,0x24,0xff,0x00,0x44,0x31,0x2c,0x00,0x82,0x10,0x00,0x80,0x42,0x31,\r
+0x35,0x04,0x40,0x14,0x00,0x80,0x02,0x3c,0x00,0xff,0x02,0x3c,0x24,0x10,0x42,0x01,\r
+0x0b,0x00,0x40,0x10,0xff,0x00,0x02,0x24,0x68,0x64,0xc2,0x90,0x20,0xb0,0x03,0x3c,\r
+0x00,0x12,0x02,0x00,0x21,0x10,0x43,0x00,0x0c,0x00,0x4a,0x8c,0x25,0xb0,0x03,0x3c,\r
+0xb0,0x03,0x63,0x34,0x00,0x00,0x6a,0xac,0xff,0x00,0x44,0x31,0xff,0x00,0x02,0x24,\r
+0x1a,0x00,0x82,0x10,0x68,0x15,0x70,0x26,0xff,0x00,0x43,0x31,0x20,0x65,0x05,0x8e,\r
+0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00,\r
+0xb4,0x64,0x03,0xae,0x21,0x20,0x00,0x00,0x68,0x64,0x0a,0xa2,0x20,0x00,0x07,0x24,\r
+0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0xfc,0x4a,0x05,0x8e,0x02,0x80,0x06,0x3c,\r
+0xcc,0x7e,0xc4,0x8c,0xff,0xc7,0x02,0x24,0x24,0x28,0xa2,0x00,0x25,0xb0,0x02,0x3c,\r
+0x04,0x00,0x84,0x34,0x80,0x03,0x42,0x34,0x41,0xb0,0x03,0x3c,0x00,0x00,0x44,0xac,\r
+0x00,0x00,0x65,0xac,0xcc,0x7e,0xc4,0xac,0xfc,0x4a,0x05,0xae,0x68,0x15,0x63,0x26,\r
+0x00,0x4b,0x62,0x8c,0x00,0x00,0x00,0x00,0x00,0x08,0x42,0x38,0x00,0x4b,0x62,0xac,\r
+0x68,0x15,0x65,0x26,0xfc,0x4a,0xa2,0x8c,0x00,0x00,0x00,0x00,0x24,0x10,0x52,0x00,\r
+0x00,0x10,0x42,0x30,0x38,0x00,0x40,0x10,0x2a,0xb0,0x02,0x3c,0x08,0x00,0x43,0x34,\r
+0x00,0x00,0x6a,0x8c,0xff,0x00,0x02,0x24,0xff,0x00,0x44,0x31,0x2c,0x00,0x82,0x10,\r
+0x00,0x80,0x42,0x31,0xfb,0x03,0x40,0x14,0x00,0x80,0x02,0x3c,0x00,0xff,0x02,0x3c,\r
+0x24,0x10,0x42,0x01,0x0b,0x00,0x40,0x10,0xff,0x00,0x02,0x24,0x70,0x64,0xa2,0x90,\r
+0x20,0xb0,0x03,0x3c,0x00,0x12,0x02,0x00,0x21,0x10,0x43,0x00,0x0c,0x00,0x4a,0x8c,\r
+0x25,0xb0,0x03,0x3c,0xb0,0x03,0x63,0x34,0x00,0x00,0x6a,0xac,0xff,0x00,0x44,0x31,\r
+0xff,0x00,0x02,0x24,0x1a,0x00,0x82,0x10,0x68,0x15,0x70,0x26,0xff,0x00,0x43,0x31,\r
+0x38,0x65,0x05,0x8e,0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,\r
+0x21,0x30,0x60,0x00,0xcc,0x64,0x03,0xae,0x01,0x00,0x04,0x24,0x70,0x64,0x0a,0xa2,\r
+0x20,0x00,0x07,0x24,0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0xfc,0x4a,0x05,0x8e,\r
+0x02,0x80,0x06,0x3c,0xcc,0x7e,0xc4,0x8c,0xff,0xc7,0x02,0x24,0x24,0x28,0xa2,0x00,\r
+0x25,0xb0,0x02,0x3c,0x10,0x00,0x84,0x34,0x80,0x03,0x42,0x34,0x41,0xb0,0x03,0x3c,\r
+0x00,0x00,0x44,0xac,0x00,0x00,0x65,0xac,0xcc,0x7e,0xc4,0xac,0xfc,0x4a,0x05,0xae,\r
+0x68,0x15,0x63,0x26,0x00,0x4b,0x62,0x8c,0x00,0x00,0x00,0x00,0x00,0x10,0x42,0x38,\r
+0x00,0x4b,0x62,0xac,0x68,0x15,0x65,0x26,0xfc,0x4a,0xa2,0x8c,0x00,0x00,0x00,0x00,\r
+0x24,0x10,0x52,0x00,0x00,0x20,0x42,0x30,0x37,0x00,0x40,0x10,0x2a,0xb0,0x02,0x3c,\r
+0x04,0x00,0x43,0x34,0x00,0x00,0x6a,0x8c,0xff,0x00,0x02,0x24,0xff,0x00,0x44,0x31,\r
+0xe9,0x03,0x82,0x10,0x00,0x80,0x42,0x31,0xc1,0x03,0x40,0x14,0x00,0x80,0x02,0x3c,\r
+0x00,0xff,0x02,0x3c,0x24,0x10,0x42,0x01,0x0b,0x00,0x40,0x10,0xff,0x00,0x02,0x24,\r
+0x6c,0x64,0xa2,0x90,0x20,0xb0,0x03,0x3c,0x00,0x12,0x02,0x00,0x21,0x10,0x43,0x00,\r
+0x0c,0x00,0x4a,0x8c,0x25,0xb0,0x03,0x3c,0xb0,0x03,0x63,0x34,0x00,0x00,0x6a,0xac,\r
+0xff,0x00,0x44,0x31,0xff,0x00,0x02,0x24,0x1a,0x00,0x82,0x10,0x68,0x15,0x70,0x26,\r
+0xff,0x00,0x43,0x31,0x2c,0x65,0x05,0x8e,0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,\r
+0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00,0xc0,0x64,0x03,0xae,0x01,0x00,0x04,0x24,\r
+0x6c,0x64,0x0a,0xa2,0x20,0x00,0x07,0x24,0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,\r
+0xfc,0x4a,0x05,0x8e,0x02,0x80,0x06,0x3c,0xcc,0x7e,0xc4,0x8c,0xff,0xc7,0x02,0x24,\r
+0x24,0x28,0xa2,0x00,0x25,0xb0,0x02,0x3c,0x20,0x00,0x84,0x34,0x80,0x03,0x42,0x34,\r
+0x41,0xb0,0x03,0x3c,0x00,0x00,0x44,0xac,0x00,0x00,0x65,0xac,0xcc,0x7e,0xc4,0xac,\r
+0xfc,0x4a,0x05,0xae,0x68,0x15,0x63,0x26,0x00,0x4b,0x62,0x8c,0x00,0x00,0x00,0x00,\r
+0x00,0x20,0x42,0x38,0x00,0x4b,0x62,0xac,0x68,0x15,0x65,0x26,0xfc,0x4a,0xa2,0x8c,\r
+0x00,0x00,0x00,0x00,0x24,0x10,0x52,0x00,0x00,0x80,0x42,0x30,0x58,0x00,0x40,0x10,\r
+0x2a,0xb0,0x06,0x3c,0x0c,0x00,0xc3,0x34,0x00,0x00,0x6a,0x8c,0xff,0x00,0x07,0x24,\r
+0xff,0x00,0x44,0x31,0x9d,0x03,0x87,0x10,0x00,0x80,0x42,0x31,0x23,0x00,0x40,0x14,\r
+0x00,0x80,0x02,0x3c,0x00,0xff,0x02,0x3c,0x24,0x10,0x42,0x01,0x21,0x00,0x40,0x10,\r
+0xff,0x00,0x02,0x24,0x40,0x00,0xc6,0x34,0x00,0x00,0xc2,0x90,0x00,0x00,0x00,0x00,\r
+0xff,0x00,0x44,0x30,0x0e,0x00,0x87,0x10,0x68,0x15,0x62,0x26,0x48,0x64,0xa4,0xa0,\r
+0x00,0x00,0xc2,0x90,0xff,0x00,0x83,0x30,0xff,0x00,0x44,0x30,0x07,0x00,0x83,0x10,\r
+0x21,0x38,0xa0,0x00,0x21,0x28,0xc0,0x00,0x00,0x00,0xa2,0x90,0x21,0x18,0x80,0x00,\r
+0xfd,0xff,0x62,0x14,0xff,0x00,0x44,0x30,0x48,0x64,0xe3,0xa0,0x68,0x15,0x62,0x26,\r
+0x48,0x64,0x43,0x90,0x20,0xb0,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,\r
+0x0c,0x00,0x6a,0x8c,0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0xff,0x00,0x44,0x31,\r
+0x00,0x00,0x4a,0xac,0xa9,0x1a,0x00,0x08,0xff,0x00,0x02,0x24,0x00,0x00,0x62,0xac,\r
+0xff,0x00,0x02,0x24,0x24,0x00,0x82,0x10,0x68,0x15,0x70,0x26,0xff,0x00,0x43,0x31,\r
+0xf0,0x64,0x05,0x8e,0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,\r
+0x21,0x30,0x60,0x00,0x48,0x64,0x0a,0xa2,0x84,0x64,0x03,0xae,0x03,0x00,0x04,0x24,\r
+0x20,0x00,0x07,0x24,0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x02,0x80,0x0a,0x3c,\r
+0xdc,0x7e,0x47,0x91,0x02,0x80,0x09,0x3c,0xcc,0x7e,0x25,0x8d,0xfc,0x4a,0x06,0x8e,\r
+0x01,0x00,0x08,0x3c,0x80,0xff,0x02,0x24,0x25,0x38,0xe2,0x00,0x00,0x80,0x03,0x35,\r
+0x80,0x00,0xa5,0x34,0x27,0x18,0x03,0x00,0x00,0x26,0x07,0x00,0x25,0xb0,0x02,0x3c,\r
+0x24,0x30,0xc3,0x00,0x25,0x20,0x85,0x00,0x80,0x03,0x42,0x34,0x41,0xb0,0x03,0x3c,\r
+0x00,0x00,0x44,0xac,0x27,0x88,0x08,0x00,0x00,0x00,0x66,0xac,0xcc,0x7e,0x25,0xad,\r
+0xdc,0x7e,0x47,0xa1,0xfc,0x4a,0x06,0xae,0x68,0x15,0x63,0x26,0x00,0x4b,0x62,0x8c,\r
+0x00,0x00,0x00,0x00,0x00,0x80,0x42,0x38,0x00,0x4b,0x62,0xac,0x68,0x15,0x65,0x26,\r
+0xfc,0x4a,0xa2,0x8c,0x01,0x00,0x03,0x3c,0x24,0x10,0x52,0x00,0x24,0x10,0x51,0x00,\r
+0x24,0x10,0x43,0x00,0x56,0x00,0x40,0x10,0x2a,0xb0,0x06,0x3c,0x10,0x00,0xc3,0x34,\r
+0x00,0x00,0x6a,0x8c,0xff,0x00,0x07,0x24,0xff,0x00,0x44,0x31,0x49,0x03,0x87,0x10,\r
+0x25,0xb0,0x02,0x3c,0x00,0x80,0x42,0x31,0x23,0x00,0x40,0x14,0x00,0x80,0x02,0x3c,\r
+0x00,0xff,0x02,0x3c,0x24,0x10,0x42,0x01,0x21,0x00,0x40,0x10,0xff,0x00,0x02,0x24,\r
+0x41,0x00,0xc6,0x34,0x00,0x00,0xc2,0x90,0x00,0x00,0x00,0x00,0xff,0x00,0x44,0x30,\r
+0x0e,0x00,0x87,0x10,0x68,0x15,0x62,0x26,0x4c,0x64,0xa4,0xa0,0x00,0x00,0xc2,0x90,\r
+0xff,0x00,0x83,0x30,0xff,0x00,0x44,0x30,0x07,0x00,0x83,0x10,0x21,0x38,0xa0,0x00,\r
+0x21,0x28,0xc0,0x00,0x00,0x00,0xa2,0x90,0x21,0x18,0x80,0x00,0xfd,0xff,0x62,0x14,\r
+0xff,0x00,0x44,0x30,0x4c,0x64,0xe3,0xa0,0x68,0x15,0x62,0x26,0x4c,0x64,0x43,0x90,\r
+0x20,0xb0,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x0c,0x00,0x6a,0x8c,\r
+0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0xff,0x00,0x44,0x31,0x00,0x00,0x4a,0xac,\r
+0x08,0x1b,0x00,0x08,0xff,0x00,0x02,0x24,0x00,0x00,0x62,0xac,0xff,0x00,0x02,0x24,\r
+0x22,0x00,0x82,0x10,0x68,0x15,0x70,0x26,0xff,0x00,0x43,0x31,0xf0,0x64,0x05,0x8e,\r
+0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00,\r
+0x84,0x64,0x03,0xae,0x03,0x00,0x04,0x24,0x20,0x00,0x07,0x24,0x4c,0x64,0x0a,0xa2,\r
+0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x02,0x80,0x09,0x3c,0xdc,0x7e,0x27,0x91,\r
+0x02,0x80,0x08,0x3c,0xcc,0x7e,0x05,0x8d,0xfc,0x4a,0x06,0x8e,0x01,0x00,0x02,0x3c,\r
+0x00,0x80,0x42,0x34,0x40,0x00,0xe7,0x34,0x27,0x10,0x02,0x00,0x24,0x30,0xc2,0x00,\r
+0x80,0x00,0xa5,0x34,0x00,0x26,0x07,0x00,0x25,0xb0,0x02,0x3c,0x25,0x20,0x85,0x00,\r
+0x80,0x03,0x42,0x34,0x41,0xb0,0x03,0x3c,0x00,0x00,0x44,0xac,0x00,0x00,0x66,0xac,\r
+0xcc,0x7e,0x05,0xad,0xdc,0x7e,0x27,0xa1,0xfc,0x4a,0x06,0xae,0x68,0x15,0x62,0x26,\r
+0x00,0x4b,0x43,0x8c,0x01,0x00,0x04,0x3c,0x26,0x18,0x64,0x00,0x00,0x4b,0x43,0xac,\r
+0x68,0x15,0x65,0x26,0xfc,0x4a,0xa2,0x8c,0x02,0x00,0x03,0x3c,0x24,0x10,0x52,0x00,\r
+0x24,0x10,0x43,0x00,0x5a,0x00,0x40,0x10,0x2a,0xb0,0x06,0x3c,0x14,0x00,0xc3,0x34,\r
+0x00,0x00,0x6a,0x8c,0xff,0x00,0x07,0x24,0xff,0x00,0x44,0x31,0xcf,0x02,0x87,0x10,\r
+0x25,0xb0,0x02,0x3c,0x00,0x80,0x42,0x31,0x23,0x00,0x40,0x14,0x00,0x80,0x02,0x3c,\r
+0x00,0xff,0x02,0x3c,0x24,0x10,0x42,0x01,0x21,0x00,0x40,0x10,0xff,0x00,0x02,0x24,\r
+0x42,0x00,0xc6,0x34,0x00,0x00,0xc2,0x90,0x00,0x00,0x00,0x00,0xff,0x00,0x44,0x30,\r
+0x0e,0x00,0x87,0x10,0x68,0x15,0x62,0x26,0x50,0x64,0xa4,0xa0,0x00,0x00,0xc2,0x90,\r
+0xff,0x00,0x83,0x30,0xff,0x00,0x44,0x30,0x07,0x00,0x83,0x10,0x21,0x38,0xa0,0x00,\r
+0x21,0x28,0xc0,0x00,0x00,0x00,0xa2,0x90,0x21,0x18,0x80,0x00,0xfd,0xff,0x62,0x14,\r
+0xff,0x00,0x44,0x30,0x50,0x64,0xe3,0xa0,0x68,0x15,0x62,0x26,0x50,0x64,0x43,0x90,\r
+0x20,0xb0,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x0c,0x00,0x6a,0x8c,\r
+0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0xff,0x00,0x44,0x31,0x00,0x00,0x4a,0xac,\r
+0x64,0x1b,0x00,0x08,0xff,0x00,0x02,0x24,0x00,0x00,0x62,0xac,0xff,0x00,0x02,0x24,\r
+0x25,0x00,0x82,0x10,0x68,0x15,0x70,0x26,0xff,0x00,0x43,0x31,0xfc,0x64,0x05,0x8e,\r
+0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00,\r
+0x50,0x64,0x0a,0xa2,0x90,0x64,0x03,0xae,0x04,0x00,0x04,0x24,0x20,0x00,0x07,0x24,\r
+0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x02,0x80,0x0a,0x3c,0xdc,0x7e,0x47,0x91,\r
+0x02,0x80,0x09,0x3c,0xcc,0x7e,0x25,0x8d,0xfc,0x4a,0x06,0x8e,0x06,0x00,0x02,0x3c,\r
+0x20,0x00,0xe7,0x34,0x27,0x10,0x02,0x00,0x24,0x30,0xc2,0x00,0x00,0x01,0xa5,0x34,\r
+0x25,0xb0,0x03,0x3c,0x04,0x00,0x02,0x3c,0x00,0x26,0x07,0x00,0x26,0x88,0x22,0x02,\r
+0xb0,0x03,0x68,0x34,0x25,0x20,0x85,0x00,0x80,0x03,0x63,0x34,0x41,0xb0,0x02,0x3c,\r
+0x00,0x00,0x64,0xac,0x00,0x00,0x46,0xac,0xcc,0x7e,0x25,0xad,0xdc,0x7e,0x47,0xa1,\r
+0xfc,0x4a,0x06,0xae,0x00,0x00,0x11,0xad,0x68,0x15,0x62,0x26,0x00,0x4b,0x43,0x8c,\r
+0x02,0x00,0x04,0x3c,0x26,0x18,0x64,0x00,0x00,0x4b,0x43,0xac,0x68,0x15,0x65,0x26,\r
+0xfc,0x4a,0xa2,0x8c,0x04,0x00,0x03,0x3c,0x24,0x10,0x52,0x00,0x24,0x10,0x51,0x00,\r
+0x24,0x10,0x43,0x00,0x58,0x00,0x40,0x10,0x25,0xb0,0x03,0x3c,0xb0,0x03,0x62,0x34,\r
+0x2a,0xb0,0x08,0x3c,0x00,0x00,0x51,0xac,0x18,0x00,0x06,0x35,0x00,0x00,0xca,0x8c,\r
+0xff,0x00,0x07,0x24,0xff,0x00,0x44,0x31,0xa1,0x02,0x87,0x10,0x04,0x00,0x02,0x24,\r
+0x00,0x80,0x42,0x31,0x23,0x00,0x40,0x14,0x00,0x80,0x02,0x3c,0x00,0xff,0x02,0x3c,\r
+0x24,0x10,0x42,0x01,0x21,0x00,0x40,0x10,0xff,0x00,0x02,0x24,0x43,0x00,0x06,0x35,\r
+0x00,0x00,0xc2,0x90,0x00,0x00,0x00,0x00,0xff,0x00,0x44,0x30,0x0e,0x00,0x87,0x10,\r
+0x68,0x15,0x62,0x26,0x54,0x64,0xa4,0xa0,0x00,0x00,0xc2,0x90,0xff,0x00,0x83,0x30,\r
+0xff,0x00,0x44,0x30,0x07,0x00,0x83,0x10,0x21,0x38,0xa0,0x00,0x21,0x28,0xc0,0x00,\r
+0x00,0x00,0xa2,0x90,0x21,0x18,0x80,0x00,0xfd,0xff,0x62,0x14,0xff,0x00,0x44,0x30,\r
+0x54,0x64,0xe3,0xa0,0x68,0x15,0x62,0x26,0x54,0x64,0x43,0x90,0x20,0xb0,0x02,0x3c,\r
+0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x0c,0x00,0x6a,0x8c,0x25,0xb0,0x02,0x3c,\r
+0xb0,0x03,0x42,0x34,0xff,0x00,0x44,0x31,0x00,0x00,0x4a,0xac,0xc7,0x1b,0x00,0x08,\r
+0xff,0x00,0x02,0x24,0x00,0x00,0xc2,0xac,0xff,0x00,0x02,0x24,0x21,0x00,0x82,0x10,\r
+0x68,0x15,0x70,0x26,0xff,0x00,0x43,0x31,0xfc,0x64,0x05,0x8e,0x20,0x10,0x02,0x3c,\r
+0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00,0x90,0x64,0x03,0xae,\r
+0x04,0x00,0x04,0x24,0x20,0x00,0x07,0x24,0x54,0x64,0x0a,0xa2,0x10,0x01,0x00,0x0c,\r
+0x10,0x00,0xa0,0xaf,0x02,0x80,0x09,0x3c,0xdc,0x7e,0x27,0x91,0x02,0x80,0x08,0x3c,\r
+0xcc,0x7e,0x05,0x8d,0xfc,0x4a,0x06,0x8e,0x06,0x00,0x02,0x3c,0x10,0x00,0xe7,0x34,\r
+0x27,0x10,0x02,0x00,0x24,0x30,0xc2,0x00,0x00,0x01,0xa5,0x34,0x00,0x26,0x07,0x00,\r
+0x25,0xb0,0x02,0x3c,0x25,0x20,0x85,0x00,0x80,0x03,0x42,0x34,0x41,0xb0,0x03,0x3c,\r
+0x00,0x00,0x44,0xac,0x00,0x00,0x66,0xac,0xcc,0x7e,0x05,0xad,0xdc,0x7e,0x27,0xa1,\r
+0xfc,0x4a,0x06,0xae,0x68,0x15,0x62,0x26,0x00,0x4b,0x43,0x8c,0x04,0x00,0x04,0x3c,\r
+0x26,0x18,0x64,0x00,0x00,0x4b,0x43,0xac,0x68,0x15,0x65,0x26,0xfc,0x4a,0xa2,0x8c,\r
+0x08,0x00,0x03,0x3c,0x24,0x10,0x52,0x00,0x24,0x10,0x43,0x00,0x5a,0x00,0x40,0x10,\r
+0x2a,0xb0,0x06,0x3c,0x1c,0x00,0xc3,0x34,0x00,0x00,0x6a,0x8c,0xff,0x00,0x07,0x24,\r
+0xff,0x00,0x44,0x31,0x3e,0x02,0x87,0x10,0x25,0xb0,0x02,0x3c,0x00,0x80,0x42,0x31,\r
+0x23,0x00,0x40,0x14,0x00,0x80,0x02,0x3c,0x00,0xff,0x02,0x3c,0x24,0x10,0x42,0x01,\r
+0x21,0x00,0x40,0x10,0xff,0x00,0x02,0x24,0x44,0x00,0xc6,0x34,0x00,0x00,0xc2,0x90,\r
+0x00,0x00,0x00,0x00,0xff,0x00,0x44,0x30,0x0e,0x00,0x87,0x10,0x68,0x15,0x62,0x26,\r
+0x58,0x64,0xa4,0xa0,0x00,0x00,0xc2,0x90,0xff,0x00,0x83,0x30,0xff,0x00,0x44,0x30,\r
+0x07,0x00,0x83,0x10,0x21,0x38,0xa0,0x00,0x21,0x28,0xc0,0x00,0x00,0x00,0xa2,0x90,\r
+0x21,0x18,0x80,0x00,0xfd,0xff,0x62,0x14,0xff,0x00,0x44,0x30,0x58,0x64,0xe3,0xa0,\r
+0x68,0x15,0x62,0x26,0x58,0x64,0x43,0x90,0x20,0xb0,0x02,0x3c,0x00,0x1a,0x03,0x00,\r
+0x21,0x18,0x62,0x00,0x0c,0x00,0x6a,0x8c,0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,\r
+0xff,0x00,0x44,0x31,0x00,0x00,0x4a,0xac,0x22,0x1c,0x00,0x08,0xff,0x00,0x02,0x24,\r
+0x00,0x00,0x62,0xac,0xff,0x00,0x02,0x24,0x25,0x00,0x82,0x10,0x68,0x15,0x70,0x26,\r
+0xff,0x00,0x43,0x31,0x08,0x65,0x05,0x8e,0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,\r
+0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00,0x58,0x64,0x0a,0xa2,0x9c,0x64,0x03,0xae,\r
+0x05,0x00,0x04,0x24,0x20,0x00,0x07,0x24,0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,\r
+0x02,0x80,0x0a,0x3c,0xdc,0x7e,0x47,0x91,0x02,0x80,0x09,0x3c,0xcc,0x7e,0x25,0x8d,\r
+0xfc,0x4a,0x06,0x8e,0x18,0x00,0x02,0x3c,0x08,0x00,0xe7,0x34,0x27,0x10,0x02,0x00,\r
+0x24,0x30,0xc2,0x00,0x00,0x02,0xa5,0x34,0x25,0xb0,0x03,0x3c,0x10,0x00,0x02,0x3c,\r
+0x00,0x26,0x07,0x00,0x26,0x88,0x22,0x02,0xb0,0x03,0x68,0x34,0x25,0x20,0x85,0x00,\r
+0x80,0x03,0x63,0x34,0x41,0xb0,0x02,0x3c,0x00,0x00,0x64,0xac,0x00,0x00,0x46,0xac,\r
+0xcc,0x7e,0x25,0xad,0xdc,0x7e,0x47,0xa1,0xfc,0x4a,0x06,0xae,0x00,0x00,0x11,0xad,\r
+0x68,0x15,0x62,0x26,0x00,0x4b,0x43,0x8c,0x08,0x00,0x04,0x3c,0x26,0x18,0x64,0x00,\r
+0x00,0x4b,0x43,0xac,0x68,0x15,0x65,0x26,0xfc,0x4a,0xa2,0x8c,0x10,0x00,0x03,0x3c,\r
+0x24,0x10,0x52,0x00,0x24,0x10,0x51,0x00,0x24,0x10,0x43,0x00,0x58,0x00,0x40,0x10,\r
+0x25,0xb0,0x06,0x3c,0xb0,0x03,0xc2,0x34,0x2a,0xb0,0x08,0x3c,0x00,0x00,0x51,0xac,\r
+0x20,0x00,0x03,0x35,0x00,0x00,0x6a,0x8c,0xff,0x00,0x07,0x24,0xff,0x00,0x44,0x31,\r
+0xe0,0x01,0x87,0x10,0x90,0x03,0xc2,0x34,0x00,0x80,0x42,0x31,0x23,0x00,0x40,0x14,\r
+0x00,0x80,0x02,0x3c,0x00,0xff,0x02,0x3c,0x24,0x10,0x42,0x01,0x21,0x00,0x40,0x10,\r
+0xff,0x00,0x02,0x24,0x45,0x00,0x06,0x35,0x00,0x00,0xc2,0x90,0x00,0x00,0x00,0x00,\r
+0xff,0x00,0x44,0x30,0x0e,0x00,0x87,0x10,0x68,0x15,0x62,0x26,0x64,0x64,0xa4,0xa0,\r
+0x00,0x00,0xc2,0x90,0xff,0x00,0x83,0x30,0xff,0x00,0x44,0x30,0x07,0x00,0x83,0x10,\r
+0x21,0x38,0xa0,0x00,0x21,0x28,0xc0,0x00,0x00,0x00,0xa2,0x90,0x21,0x18,0x80,0x00,\r
+0xfd,0xff,0x62,0x14,0xff,0x00,0x44,0x30,0x64,0x64,0xe3,0xa0,0x68,0x15,0x62,0x26,\r
+0x64,0x64,0x43,0x90,0x20,0xb0,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,\r
+0x0c,0x00,0x6a,0x8c,0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0xff,0x00,0x44,0x31,\r
+0x00,0x00,0x4a,0xac,0x85,0x1c,0x00,0x08,0xff,0x00,0x02,0x24,0x00,0x00,0x62,0xac,\r
+0xff,0x00,0x02,0x24,0x21,0x00,0x82,0x10,0x68,0x15,0x70,0x26,0xff,0x00,0x43,0x31,\r
+0x08,0x65,0x05,0x8e,0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,\r
+0x21,0x30,0x60,0x00,0x9c,0x64,0x03,0xae,0x05,0x00,0x04,0x24,0x20,0x00,0x07,0x24,\r
+0x64,0x64,0x0a,0xa2,0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x02,0x80,0x09,0x3c,\r
+0xdc,0x7e,0x27,0x91,0x02,0x80,0x08,0x3c,0xcc,0x7e,0x05,0x8d,0xfc,0x4a,0x06,0x8e,\r
+0x18,0x00,0x02,0x3c,0x01,0x00,0xe7,0x34,0x27,0x10,0x02,0x00,0x24,0x30,0xc2,0x00,\r
+0x00,0x02,0xa5,0x34,0x00,0x26,0x07,0x00,0x25,0xb0,0x02,0x3c,0x25,0x20,0x85,0x00,\r
+0x80,0x03,0x42,0x34,0x41,0xb0,0x03,0x3c,0x00,0x00,0x44,0xac,0x00,0x00,0x66,0xac,\r
+0xcc,0x7e,0x05,0xad,0xdc,0x7e,0x27,0xa1,0xfc,0x4a,0x06,0xae,0x68,0x15,0x62,0x26,\r
+0x00,0x4b,0x43,0x8c,0x10,0x00,0x04,0x3c,0x26,0x18,0x64,0x00,0x00,0x4b,0x43,0xac,\r
+0x68,0x15,0x65,0x26,0xfc,0x4a,0xa2,0x8c,0x20,0x00,0x03,0x3c,0x24,0x10,0x52,0x00,\r
+0x24,0x10,0x43,0x00,0x5a,0x00,0x40,0x10,0x2a,0xb0,0x06,0x3c,0x24,0x00,0xc3,0x34,\r
+0x00,0x00,0x6a,0x8c,0xff,0x00,0x07,0x24,0xff,0x00,0x44,0x31,0x58,0x01,0x87,0x10,\r
+0x25,0xb0,0x02,0x3c,0x00,0x80,0x42,0x31,0x23,0x00,0x40,0x14,0x00,0x80,0x02,0x3c,\r
+0x00,0xff,0x02,0x3c,0x24,0x10,0x42,0x01,0x21,0x00,0x40,0x10,0xff,0x00,0x02,0x24,\r
+0x46,0x00,0xc6,0x34,0x00,0x00,0xc2,0x90,0x00,0x00,0x00,0x00,0xff,0x00,0x44,0x30,\r
+0x0e,0x00,0x87,0x10,0x68,0x15,0x62,0x26,0x5c,0x64,0xa4,0xa0,0x00,0x00,0xc2,0x90,\r
+0xff,0x00,0x83,0x30,0xff,0x00,0x44,0x30,0x07,0x00,0x83,0x10,0x21,0x38,0xa0,0x00,\r
+0x21,0x28,0xc0,0x00,0x00,0x00,0xa2,0x90,0x21,0x18,0x80,0x00,0xfd,0xff,0x62,0x14,\r
+0xff,0x00,0x44,0x30,0x5c,0x64,0xe3,0xa0,0x68,0x15,0x62,0x26,0x5c,0x64,0x43,0x90,\r
+0x20,0xb0,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x0c,0x00,0x6a,0x8c,\r
+0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0xff,0x00,0x44,0x31,0x00,0x00,0x4a,0xac,\r
+0xe0,0x1c,0x00,0x08,0xff,0x00,0x02,0x24,0x00,0x00,0x62,0xac,0xff,0x00,0x02,0x24,\r
+0x25,0x00,0x82,0x10,0x68,0x15,0x70,0x26,0xff,0x00,0x43,0x31,0x14,0x65,0x05,0x8e,\r
+0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00,\r
+0x5c,0x64,0x0a,0xa2,0xa8,0x64,0x03,0xae,0x06,0x00,0x04,0x24,0x20,0x00,0x07,0x24,\r
+0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x02,0x80,0x0a,0x3c,0xdc,0x7e,0x47,0x91,\r
+0x02,0x80,0x09,0x3c,0xcc,0x7e,0x25,0x8d,0xfc,0x4a,0x06,0x8e,0x60,0x00,0x02,0x3c,\r
+0x04,0x00,0xe7,0x34,0x27,0x10,0x02,0x00,0x24,0x30,0xc2,0x00,0x00,0x04,0xa5,0x34,\r
+0x25,0xb0,0x03,0x3c,0x40,0x00,0x02,0x3c,0x00,0x26,0x07,0x00,0x26,0x88,0x22,0x02,\r
+0xb0,0x03,0x68,0x34,0x25,0x20,0x85,0x00,0x80,0x03,0x63,0x34,0x41,0xb0,0x02,0x3c,\r
+0x00,0x00,0x64,0xac,0x00,0x00,0x46,0xac,0xcc,0x7e,0x25,0xad,0xdc,0x7e,0x47,0xa1,\r
+0xfc,0x4a,0x06,0xae,0x00,0x00,0x11,0xad,0x68,0x15,0x62,0x26,0x00,0x4b,0x43,0x8c,\r
+0x20,0x00,0x04,0x3c,0x26,0x18,0x64,0x00,0x00,0x4b,0x43,0xac,0x68,0x15,0x65,0x26,\r
+0xfc,0x4a,0xa2,0x8c,0x40,0x00,0x03,0x3c,0x24,0x10,0x52,0x00,0x24,0x10,0x51,0x00,\r
+0x24,0x10,0x43,0x00,0x5a,0x00,0x40,0x10,0x68,0x15,0x70,0x26,0x25,0xb0,0x02,0x3c,\r
+0x2a,0xb0,0x07,0x3c,0xb0,0x03,0x42,0x34,0x00,0x00,0x51,0xac,0x28,0x00,0xe3,0x34,\r
+0x00,0x00,0x6a,0x8c,0xff,0x00,0x06,0x24,0xff,0x00,0x44,0x31,0xfe,0x00,0x86,0x10,\r
+0x25,0xbd,0x02,0x3c,0x00,0x80,0x42,0x31,0x23,0x00,0x40,0x14,0x00,0x80,0x02,0x3c,\r
+0x00,0xff,0x02,0x3c,0x24,0x10,0x42,0x01,0x21,0x00,0x40,0x10,0xff,0x00,0x02,0x24,\r
+0x47,0x00,0xe7,0x34,0x00,0x00,0xe2,0x90,0x00,0x00,0x00,0x00,0xff,0x00,0x44,0x30,\r
+0x0e,0x00,0x86,0x10,0x68,0x15,0x62,0x26,0x60,0x64,0xa4,0xa0,0x00,0x00,0xe2,0x90,\r
+0xff,0x00,0x83,0x30,0xff,0x00,0x44,0x30,0x07,0x00,0x83,0x10,0x21,0x30,0xa0,0x00,\r
+0x21,0x28,0xe0,0x00,0x00,0x00,0xa2,0x90,0x21,0x18,0x80,0x00,0xfd,0xff,0x62,0x14,\r
+0xff,0x00,0x44,0x30,0x60,0x64,0xc3,0xa0,0x68,0x15,0x62,0x26,0x60,0x64,0x43,0x90,\r
+0x20,0xb0,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x0c,0x00,0x6a,0x8c,\r
+0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0xff,0x00,0x44,0x31,0x00,0x00,0x4a,0xac,\r
+0x44,0x1d,0x00,0x08,0xff,0x00,0x02,0x24,0x00,0x00,0x62,0xac,0xff,0x00,0x02,0x24,\r
+0x21,0x00,0x82,0x10,0x68,0x15,0x70,0x26,0xff,0x00,0x43,0x31,0x14,0x65,0x05,0x8e,\r
+0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00,\r
+0xa8,0x64,0x03,0xae,0x06,0x00,0x04,0x24,0x20,0x00,0x07,0x24,0x60,0x64,0x0a,0xa2,\r
+0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x02,0x80,0x09,0x3c,0xdc,0x7e,0x27,0x91,\r
+0x02,0x80,0x08,0x3c,0xcc,0x7e,0x05,0x8d,0xfc,0x4a,0x06,0x8e,0x60,0x00,0x02,0x3c,\r
+0x02,0x00,0xe7,0x34,0x27,0x10,0x02,0x00,0x24,0x30,0xc2,0x00,0x00,0x04,0xa5,0x34,\r
+0x00,0x26,0x07,0x00,0x25,0xb0,0x02,0x3c,0x25,0x20,0x85,0x00,0x80,0x03,0x42,0x34,\r
+0x41,0xb0,0x03,0x3c,0x00,0x00,0x44,0xac,0x00,0x00,0x66,0xac,0xcc,0x7e,0x05,0xad,\r
+0xdc,0x7e,0x27,0xa1,0xfc,0x4a,0x06,0xae,0x68,0x15,0x62,0x26,0x00,0x4b,0x43,0x8c,\r
+0x40,0x00,0x04,0x3c,0x26,0x18,0x64,0x00,0x00,0x4b,0x43,0xac,0x68,0x15,0x70,0x26,\r
+0xfc,0x4a,0x06,0x8e,0x00,0x04,0x11,0x3c,0x24,0x10,0xd2,0x00,0x24,0x10,0x51,0x00,\r
+0x77,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x24,0x28,0xd2,0x00,0x00,0x08,0x04,0x3c,\r
+0x24,0x10,0xa4,0x00,0x08,0x00,0x40,0x10,0x80,0x00,0x07,0x3c,0x00,0x4b,0x03,0x8e,\r
+0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0x26,0x18,0x64,0x00,0x00,0x00,0x44,0xac,\r
+0x00,0x4b,0x03,0xae,0x80,0x00,0x07,0x3c,0x24,0x10,0xa7,0x00,0x21,0x00,0x40,0x10,\r
+0x00,0x00,0x00,0x00,0x00,0x4b,0x03,0x8e,0x25,0xb0,0x08,0x3c,0xb0,0x03,0x09,0x35,\r
+0x2a,0xb0,0x02,0x3c,0x00,0x00,0x23,0xad,0x36,0x00,0x42,0x34,0x00,0x00,0x43,0x90,\r
+0x23,0xb0,0x04,0x3c,0xff,0x1f,0x02,0x3c,0xc0,0x18,0x03,0x00,0xf0,0x07,0x63,0x30,\r
+0xbc,0x65,0x05,0x8e,0x21,0x18,0x64,0x00,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,\r
+0x84,0x00,0x65,0x10,0xc0,0x65,0x03,0xae,0x02,0x80,0x05,0x3c,0xcc,0x7e,0xa3,0x8c,\r
+0x27,0x20,0x07,0x00,0x24,0x20,0xc4,0x00,0x00,0x08,0x63,0x34,0x41,0xb0,0x02,0x3c,\r
+0x00,0x00,0x23,0xad,0x00,0x00,0x44,0xac,0xcc,0x7e,0xa3,0xac,0xfc,0x4a,0x04,0xae,\r
+0x68,0x15,0x62,0x26,0x00,0x4b,0x43,0x8c,0x80,0x00,0x04,0x3c,0x26,0x18,0x64,0x00,\r
+0x00,0x4b,0x43,0xac,0x68,0x15,0x66,0x26,0xfc,0x4a,0xc3,0x8c,0x00,0x01,0x04,0x3c,\r
+0x24,0x28,0x72,0x00,0x24,0x10,0xa4,0x00,0x06,0x00,0x40,0x10,0x25,0xb0,0x02,0x3c,\r
+0x00,0x4b,0xc3,0x8c,0xb0,0x03,0x42,0x34,0x26,0x18,0x64,0x00,0x00,0x00,0x44,0xac,\r
+0x00,0x4b,0xc3,0xac,0x00,0x02,0x04,0x3c,0x24,0x10,0xa4,0x00,0x08,0x00,0x40,0x10,\r
+0x02,0x80,0x02,0x3c,0x00,0x4b,0xc2,0x8c,0x25,0xb0,0x03,0x3c,0xb0,0x03,0x63,0x34,\r
+0x26,0x10,0x44,0x00,0x00,0x4b,0xc2,0xac,0x00,0x00,0x64,0xac,0x02,0x80,0x02,0x3c,\r
+0xea,0x7d,0x43,0x90,0x01,0x00,0x02,0x24,0x0f,0x00,0x63,0x30,0x3f,0x00,0x62,0x10,\r
+0x00,0x00,0x00,0x00,0x28,0x00,0xbf,0x8f,0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,\r
+0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x30,0x00,0xbd,0x27,\r
+0x20,0xbd,0x02,0x3c,0xec,0x02,0x65,0x35,0x4d,0x00,0x68,0x35,0xf1,0x02,0x69,0x35,\r
+0x08,0x00,0x07,0x24,0x78,0x02,0x42,0x34,0x00,0x00,0x46,0xa4,0x00,0x00,0x00,0xa1,\r
+0x00,0x00,0x27,0xa1,0x00,0x00,0xa0,0xac,0x00,0x00,0xa2,0x8c,0xff,0x00,0x03,0x3c,\r
+0x80,0x00,0x04,0x3c,0xff,0x00,0x4a,0x30,0x25,0x50,0x43,0x01,0x24,0x20,0x44,0x01,\r
+0xf2,0x02,0x66,0x35,0x0a,0x00,0x6a,0x35,0x80,0xff,0x02,0x24,0x00,0x00,0x00,0xa1,\r
+0x00,0x00,0x27,0xa1,0x00,0x00,0xa3,0xac,0x00,0x00,0xa3,0xac,0x00,0x00,0xc0,0xa0,\r
+0x00,0x00,0x42,0xa1,0x04,0x00,0x80,0x10,0x02,0x00,0x62,0x35,0x84,0xff,0x02,0x24,\r
+0x00,0x00,0x42,0xa1,0x02,0x00,0x62,0x35,0x00,0x00,0x43,0x94,0xff,0xbf,0x04,0x24,\r
+0x24,0x18,0x64,0x00,0x00,0x00,0x43,0xa4,0x7f,0x19,0x00,0x08,0x68,0x15,0x66,0x26,\r
+0x0e,0x4f,0x00,0x0c,0x07,0x00,0x04,0x24,0x00,0x4b,0x03,0x8e,0xfc,0x4a,0x06,0x8e,\r
+0x25,0xb0,0x02,0x3c,0x26,0x18,0x71,0x00,0xb0,0x03,0x42,0x34,0x00,0x00,0x43,0xac,\r
+0x72,0x1d,0x00,0x08,0x00,0x4b,0x03,0xae,0x56,0x01,0x42,0x35,0x00,0x00,0x43,0x94,\r
+0x00,0x00,0x00,0x00,0x75,0xfb,0x60,0x10,0x00,0x00,0x00,0x00,0x0e,0x4f,0x00,0x0c,\r
+0x07,0x00,0x04,0x24,0x6c,0x19,0x00,0x08,0x68,0x15,0x64,0x26,0x28,0x00,0xbf,0x8f,\r
+0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,\r
+0x30,0x19,0x00,0x08,0x30,0x00,0xbd,0x27,0x00,0x00,0x62,0xac,0xdc,0x19,0x00,0x08,\r
+0xff,0x00,0x02,0x24,0x00,0x00,0x62,0xac,0x19,0x1a,0x00,0x08,0xff,0x00,0x02,0x24,\r
+0x00,0x00,0x62,0xac,0x56,0x1a,0x00,0x08,0xff,0x00,0x02,0x24,0x05,0x00,0x03,0x24,\r
+0x90,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x8b,0x1b,0x00,0x08,0x68,0x15,0x62,0x26,\r
+0x02,0x00,0x03,0x24,0x90,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x07,0x1d,0x00,0x08,\r
+0x68,0x15,0x62,0x26,0xd0,0x03,0x03,0x35,0x80,0x00,0x02,0x24,0x00,0x00,0x62,0xac,\r
+0x9d,0x1d,0x00,0x08,0x68,0x15,0x62,0x26,0x01,0x00,0x03,0x24,0x90,0x03,0x42,0x34,\r
+0x00,0x00,0x43,0xac,0x67,0x1d,0x00,0x08,0x68,0x15,0x62,0x26,0x25,0xb0,0x02,0x3c,\r
+0x07,0x00,0x03,0x24,0x90,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x68,0x15,0x63,0x26,\r
+0x00,0x4b,0x62,0x8c,0x00,0x00,0x00,0x00,0x00,0x80,0x42,0x38,0xd3,0x1a,0x00,0x08,\r
+0x00,0x4b,0x62,0xac,0x06,0x00,0x03,0x24,0x90,0x03,0x42,0x34,0x00,0x00,0x43,0xac,\r
+0x2c,0x1b,0x00,0x08,0x68,0x15,0x62,0x26,0x25,0xb0,0x02,0x3c,0x07,0x00,0x03,0x24,\r
+0x90,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x68,0x15,0x63,0x26,0x00,0x4b,0x62,0x8c,\r
+0x00,0x00,0x00,0x00,0x00,0x20,0x42,0x38,0x76,0x1a,0x00,0x08,0x00,0x4b,0x62,0xac,\r
+0x03,0x00,0x03,0x24,0x90,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x49,0x1c,0x00,0x08,\r
+0x68,0x15,0x62,0x26,0x00,0x00,0x40,0xac,0xa8,0x1c,0x00,0x08,0x68,0x15,0x62,0x26,\r
+0x90,0x03,0x63,0x34,0x00,0x00,0x62,0xac,0xea,0x1b,0x00,0x08,0x68,0x15,0x62,0x26,\r
+0x25,0xb0,0x0d,0x3c,0x00,0x80,0x02,0x3c,0x18,0x03,0xa4,0x35,0x10,0x79,0x42,0x24,\r
+0x02,0x80,0x03,0x3c,0x41,0xb0,0x08,0x3c,0x00,0x00,0x82,0xac,0x68,0x15,0x6a,0x24,\r
+0x0a,0x00,0x02,0x35,0x00,0x00,0x44,0x94,0x0a,0x4b,0x43,0x95,0x08,0x4b,0x4b,0x95,\r
+0x25,0x18,0x64,0x00,0xff,0xff,0x6c,0x30,0x24,0x10,0x8b,0x01,0x02,0x00,0x42,0x30,\r
+0x53,0x00,0x40,0x10,0x02,0x00,0x64,0x38,0x02,0x00,0x02,0x24,0xc0,0x03,0xa3,0x35,\r
+0x00,0x00,0x62,0xac,0x0a,0x4b,0x44,0xa5,0x24,0x38,0x8b,0x01,0x04,0x00,0xe2,0x30,\r
+0x0a,0x00,0x40,0x10,0x08,0x00,0xe2,0x30,0x0a,0x4b,0x43,0x95,0x0c,0x00,0x04,0x35,\r
+0xc0,0x03,0xa5,0x35,0x04,0x00,0x63,0x38,0x04,0x00,0x02,0x24,0x00,0x00,0x86,0x8c,\r
+0x00,0x00,0xa2,0xac,0x0a,0x4b,0x43,0xa5,0x08,0x00,0xe2,0x30,0x08,0x00,0x40,0x10,\r
+0x10,0x00,0xe2,0x30,0x0a,0x4b,0x42,0x95,0xc0,0x03,0xa4,0x35,0x08,0x00,0x03,0x24,\r
+0x08,0x00,0x42,0x38,0x00,0x00,0x83,0xac,0x0a,0x4b,0x42,0xa5,0x10,0x00,0xe2,0x30,\r
+0x08,0x00,0x40,0x10,0x20,0x00,0xe2,0x30,0x0a,0x4b,0x42,0x95,0xc0,0x03,0xa4,0x35,\r
+0x10,0x00,0x03,0x24,0x10,0x00,0x42,0x38,0x00,0x00,0x83,0xac,0x0a,0x4b,0x42,0xa5,\r
+0x20,0x00,0xe2,0x30,0x08,0x00,0x40,0x10,0x80,0x00,0xe2,0x30,0x0a,0x4b,0x42,0x95,\r
+0xc0,0x03,0xa4,0x35,0x20,0x00,0x03,0x24,0x20,0x00,0x42,0x38,0x00,0x00,0x83,0xac,\r
+0x0a,0x4b,0x42,0xa5,0x80,0x00,0xe2,0x30,0x15,0x00,0x40,0x10,0x24,0x10,0x8b,0x01,\r
+0x02,0x80,0x09,0x3c,0x0a,0x4b,0x46,0x95,0xcc,0x7e,0x25,0x8d,0x08,0x00,0x02,0x3c,\r
+0x7f,0xff,0x04,0x24,0x24,0x20,0x64,0x01,0x25,0x28,0xa2,0x00,0x80,0x00,0xc6,0x38,\r
+0xb0,0x03,0xa7,0x35,0x08,0x00,0x08,0x35,0xc0,0x03,0xa3,0x35,0x80,0x00,0x02,0x24,\r
+0x00,0x00,0x62,0xac,0x21,0x58,0x80,0x00,0x00,0x00,0xe5,0xac,0x0a,0x4b,0x46,0xa5,\r
+0xcc,0x7e,0x25,0xad,0x00,0x00,0x04,0xa5,0x08,0x4b,0x44,0xa5,0x24,0x10,0x8b,0x01,\r
+0x00,0x30,0x42,0x30,0x07,0x00,0x40,0x10,0x02,0x80,0x02,0x3c,0x0a,0x4b,0x42,0x95,\r
+0x00,0x00,0x00,0x00,0x00,0x10,0x42,0x38,0x00,0x20,0x42,0x34,0x0a,0x4b,0x42,0xa5,\r
+0x02,0x80,0x02,0x3c,0xea,0x7d,0x43,0x90,0x01,0x00,0x02,0x24,0x0f,0x00,0x63,0x30,\r
+0x05,0x00,0x62,0x10,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x5a,0x1e,0x00,0x08,0x0a,0x4b,0x43,0xa5,0x30,0x19,0x00,0x08,0x00,0x00,0x00,0x00,\r
+0xf8,0xff,0xbd,0x27,0x04,0x00,0xb1,0xaf,0x00,0x00,0xb0,0xaf,0x00,0x40,0x02,0x40,\r
+0x00,0x68,0x08,0x40,0x00,0x70,0x02,0x40,0x00,0x60,0x09,0x40,0x25,0xb0,0x05,0x3c,\r
+0x00,0x80,0x02,0x3c,0x18,0x03,0xa3,0x34,0xb0,0x7a,0x42,0x24,0x00,0x00,0x62,0xac,\r
+0x80,0x00,0x87,0x8c,0x7c,0x02,0xa2,0x34,0x84,0x02,0xa3,0x34,0x88,0x02,0xa6,0x34,\r
+0x00,0x00,0x47,0xac,0x00,0x00,0x68,0xac,0x00,0x00,0xc9,0xac,0x74,0x00,0x83,0x8c,\r
+0x8c,0x02,0xa2,0x34,0x90,0x02,0xa7,0x34,0x00,0x00,0x43,0xac,0x08,0x00,0x86,0x8c,\r
+0x94,0x02,0xa8,0x34,0x98,0x02,0xa9,0x34,0x00,0x00,0xe6,0xac,0x0c,0x00,0x82,0x8c,\r
+0x9c,0x02,0xa6,0x34,0xa0,0x02,0xa7,0x34,0x00,0x00,0x02,0xad,0x10,0x00,0x83,0x8c,\r
+0xa4,0x02,0xa8,0x34,0xa8,0x02,0xaa,0x34,0x00,0x00,0x23,0xad,0x14,0x00,0x82,0x8c,\r
+0xac,0x02,0xa9,0x34,0xb0,0x02,0xab,0x34,0x00,0x00,0xc2,0xac,0x18,0x00,0x83,0x8c,\r
+0xb4,0x02,0xa6,0x34,0xb8,0x02,0xac,0x34,0x00,0x00,0xe3,0xac,0x1c,0x00,0x82,0x8c,\r
+0xbc,0x02,0xa7,0x34,0xc0,0x02,0xad,0x34,0x00,0x00,0x02,0xad,0x20,0x00,0x83,0x8c,\r
+0xc4,0x02,0xa8,0x34,0xc8,0x02,0xae,0x34,0x00,0x00,0x43,0xad,0x24,0x00,0x82,0x8c,\r
+0xcc,0x02,0xaa,0x34,0xd0,0x02,0xaf,0x34,0x00,0x00,0x22,0xad,0x28,0x00,0x83,0x8c,\r
+0xd4,0x02,0xa9,0x34,0xd8,0x02,0xb0,0x34,0x00,0x00,0x63,0xad,0x2c,0x00,0x82,0x8c,\r
+0x70,0x02,0xab,0x34,0x74,0x02,0xb1,0x34,0x00,0x00,0xc2,0xac,0x30,0x00,0x83,0x8c,\r
+0x78,0x02,0xa5,0x34,0x00,0x00,0x83,0xad,0x34,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0xe2,0xac,0x38,0x00,0x83,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0xa3,0xad,\r
+0x3c,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0xad,0x40,0x00,0x83,0x8c,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0xc3,0xad,0x44,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x42,0xad,0x48,0x00,0x83,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0xe3,0xad,\r
+0x4c,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0xad,0x50,0x00,0x83,0x8c,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xae,0x54,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x62,0xad,0x58,0x00,0x83,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0xae,\r
+0x5c,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0xac,0x0f,0x1f,0x00,0x08,\r
+0x00,0x00,0x00,0x00,0x00,0x80,0x1b,0x3c,0x44,0x7c,0x7b,0x27,0x25,0xb0,0x1a,0x3c,\r
+0x18,0x03,0x5a,0x27,0x00,0x00,0x5b,0xaf,0x21,0xd8,0xa0,0x03,0x82,0xda,0x1b,0x00,\r
+0x80,0xda,0x1b,0x00,0x08,0x00,0x7b,0x27,0x04,0x00,0x61,0xaf,0x08,0x00,0x62,0xaf,\r
+0x0c,0x00,0x63,0xaf,0x10,0x00,0x64,0xaf,0x14,0x00,0x65,0xaf,0x18,0x00,0x66,0xaf,\r
+0x1c,0x00,0x67,0xaf,0x20,0x00,0x68,0xaf,0x24,0x00,0x69,0xaf,0x28,0x00,0x6a,0xaf,\r
+0x2c,0x00,0x6b,0xaf,0x30,0x00,0x6c,0xaf,0x34,0x00,0x6d,0xaf,0x38,0x00,0x6e,0xaf,\r
+0x3c,0x00,0x6f,0xaf,0x12,0x40,0x00,0x00,0x10,0x48,0x00,0x00,0x00,0x70,0x0a,0x40,\r
+0x40,0x00,0x70,0xaf,0x44,0x00,0x71,0xaf,0x48,0x00,0x72,0xaf,0x4c,0x00,0x73,0xaf,\r
+0x50,0x00,0x74,0xaf,0x54,0x00,0x75,0xaf,0x58,0x00,0x76,0xaf,0x5c,0x00,0x77,0xaf,\r
+0x60,0x00,0x78,0xaf,0x64,0x00,0x79,0xaf,0x68,0x00,0x7c,0xaf,0x6c,0x00,0x7d,0xaf,\r
+0x70,0x00,0x7e,0xaf,0x74,0x00,0x7f,0xaf,0x78,0x00,0x68,0xaf,0x7c,0x00,0x69,0xaf,\r
+0x80,0x00,0x6a,0xaf,0x00,0x68,0x1a,0x40,0x25,0xb0,0x1b,0x3c,0x1c,0x03,0x7b,0x37,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x7a,0xaf,0x7f,0x00,0x5b,0x33,0x30,0x00,0x60,0x13,\r
+0x00,0x00,0x00,0x00,0x25,0xb0,0x1b,0x3c,0x30,0x03,0x7b,0x37,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x7a,0xaf,0x00,0x00,0x00,0x00,0x21,0xd8,0xa0,0x03,0x82,0xda,0x1b,0x00,\r
+0x80,0xda,0x1b,0x00,0x08,0x00,0x7b,0x27,0x04,0x00,0x61,0xaf,0x08,0x00,0x62,0xaf,\r
+0x0c,0x00,0x63,0xaf,0x10,0x00,0x64,0xaf,0x14,0x00,0x65,0xaf,0x18,0x00,0x66,0xaf,\r
+0x1c,0x00,0x67,0xaf,0x20,0x00,0x68,0xaf,0x24,0x00,0x69,0xaf,0x28,0x00,0x6a,0xaf,\r
+0x2c,0x00,0x6b,0xaf,0x30,0x00,0x6c,0xaf,0x34,0x00,0x6d,0xaf,0x38,0x00,0x6e,0xaf,\r
+0x3c,0x00,0x6f,0xaf,0x12,0x40,0x00,0x00,0x10,0x48,0x00,0x00,0x00,0x70,0x0a,0x40,\r
+0x40,0x00,0x70,0xaf,0x44,0x00,0x71,0xaf,0x48,0x00,0x72,0xaf,0x4c,0x00,0x73,0xaf,\r
+0x50,0x00,0x74,0xaf,0x54,0x00,0x75,0xaf,0x58,0x00,0x76,0xaf,0x5c,0x00,0x77,0xaf,\r
+0x60,0x00,0x78,0xaf,0x64,0x00,0x79,0xaf,0x68,0x00,0x7c,0xaf,0x6c,0x00,0x7d,0xaf,\r
+0x70,0x00,0x7e,0xaf,0x74,0x00,0x7f,0xaf,0x78,0x00,0x68,0xaf,0x7c,0x00,0x69,0xaf,\r
+0x80,0x00,0x6a,0xaf,0xac,0x1e,0x00,0x08,0x21,0x20,0x60,0x03,0x00,0x00,0x00,0x00,\r
+0x25,0xb0,0x08,0x3c,0x20,0x03,0x08,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x1a,0xad,\r
+0x00,0x04,0x5b,0x33,0x0a,0x00,0x60,0x13,0x00,0x00,0x00,0x00,0x00,0x80,0x08,0x3c,\r
+0x30,0x65,0x08,0x25,0x00,0x00,0x00,0x00,0x25,0xb0,0x1b,0x3c,0x24,0x03,0x7b,0x37,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x68,0xaf,0x09,0xf8,0x00,0x01,0x00,0x00,0x00,0x00,\r
+0x00,0x08,0x5b,0x33,0x25,0xb0,0x08,0x3c,0x28,0x03,0x08,0x35,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x1b,0xad,0x06,0x00,0x60,0x13,0x00,0x00,0x00,0x00,0x00,0x80,0x08,0x3c,\r
+0x10,0x79,0x08,0x25,0x00,0x00,0x00,0x00,0x09,0xf8,0x00,0x01,0x00,0x00,0x00,0x00,\r
+0x02,0x80,0x1a,0x3c,0xcc,0x7e,0x5a,0x27,0x04,0x00,0x5b,0x97,0x25,0xb0,0x08,0x3c,\r
+0x30,0x03,0x08,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x1b,0xad,0x18,0x00,0x60,0x13,\r
+0x00,0x00,0x00,0x00,0x08,0xec,0x9b,0x27,0x00,0x00,0x00,0x00,0x04,0x00,0x61,0x8f,\r
+0xfc,0x03,0x70,0x7b,0x7c,0x00,0x62,0x7b,0xbc,0x00,0x64,0x7b,0xfc,0x00,0x66,0x7b,\r
+0x3c,0x01,0x68,0x7b,0x13,0x00,0x00,0x02,0x11,0x00,0x20,0x02,0x7c,0x01,0x6a,0x7b,\r
+0xbc,0x01,0x6c,0x7b,0xfc,0x01,0x6e,0x7b,0x3c,0x02,0x70,0x7b,0x7c,0x02,0x72,0x7b,\r
+0xbc,0x02,0x74,0x7b,0xfc,0x02,0x76,0x7b,0x3c,0x03,0x78,0x7b,0x7c,0x03,0x7c,0x7b,\r
+0xbc,0x03,0x7e,0x7b,0x80,0x00,0x7b,0x8f,0xfc,0x1f,0x00,0x08,0x00,0x00,0x00,0x00,\r
+0x21,0xd8,0xa0,0x03,0x82,0xda,0x1b,0x00,0x80,0xda,0x1b,0x00,0x08,0x00,0x7b,0x27,\r
+0x08,0x00,0x5b,0xaf,0xfc,0xef,0x9d,0x27,0x00,0x00,0x4a,0x8f,0x00,0x00,0x00,0x00,\r
+0x21,0x00,0x40,0x11,0x00,0x00,0x00,0x00,0x02,0x80,0x08,0x3c,0x2c,0x7e,0x08,0x25,\r
+0x21,0x48,0x00,0x00,0x21,0x58,0x00,0x00,0x01,0x00,0x6b,0x25,0x1a,0x00,0x40,0x11,\r
+0x24,0x70,0x4b,0x01,0x14,0x00,0xc0,0x11,0x01,0x00,0x04,0x24,0x00,0x00,0x00,0x00,\r
+0x04,0x00,0x44,0xa3,0x26,0x50,0x4b,0x01,0x00,0x00,0x4a,0xaf,0x80,0x80,0x09,0x00,\r
+0x21,0x80,0x08,0x02,0x00,0x00,0x10,0x8e,0x00,0x00,0x00,0x00,0x09,0xf8,0x00,0x02,\r
+0x00,0x00,0x00,0x00,0x00,0x80,0x1b,0x3c,0x1c,0x7f,0x7b,0x27,0x25,0xb0,0x1a,0x3c,\r
+0x18,0x03,0x5a,0x27,0x00,0x00,0x5b,0xaf,0x02,0x80,0x1a,0x3c,0xcc,0x7e,0x5a,0x27,\r
+0xe1,0xff,0x00,0x10,0x00,0x00,0x00,0x00,0x01,0x00,0x29,0x25,0x40,0x58,0x0b,0x00,\r
+0xbf,0x1f,0x00,0x08,0x00,0x00,0x00,0x00,0x02,0x80,0x1b,0x3c,0xcc,0x7e,0x7b,0x27,\r
+0x21,0x60,0x00,0x00,0x04,0x00,0x6c,0xa7,0x08,0x00,0x7a,0x8f,0x00,0x00,0x00,0x00,\r
+0xf8,0xff,0x5a,0x27,0x00,0x00,0x5a,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0x5a,0x27,\r
+0x84,0x00,0x44,0x8f,0x00,0x00,0x00,0x00,0xf9,0xff,0x80,0x10,0x00,0x00,0x00,0x00,\r
+0x04,0x00,0x41,0x8f,0xfc,0x03,0x50,0x7b,0x7c,0x00,0x42,0x7b,0xbc,0x00,0x44,0x7b,\r
+0xfc,0x00,0x46,0x7b,0x3c,0x01,0x48,0x7b,0x13,0x00,0x00,0x02,0x11,0x00,0x20,0x02,\r
+0x7c,0x01,0x4a,0x7b,0xbc,0x01,0x4c,0x7b,0xfc,0x01,0x4e,0x7b,0x3c,0x02,0x50,0x7b,\r
+0x7c,0x02,0x52,0x7b,0xbc,0x02,0x54,0x7b,0xfc,0x02,0x56,0x7b,0x3c,0x03,0x58,0x7b,\r
+0x7c,0x03,0x5c,0x7b,0xbc,0x03,0x5e,0x7b,0x80,0x00,0x5b,0x8f,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0x60,0x03,0x10,0x00,0x00,0x42,0x00,0x60,0x05,0x40,0x42,0x28,0x05,0x00,\r
+0x40,0x28,0x05,0x00,0x00,0x60,0x85,0x40,0x04,0x00,0x81,0xac,0x08,0x00,0x82,0xac,\r
+0x0c,0x00,0x83,0xac,0x20,0x00,0x88,0xac,0x24,0x00,0x89,0xac,0x28,0x00,0x8a,0xac,\r
+0x2c,0x00,0x8b,0xac,0x30,0x00,0x8c,0xac,0x34,0x00,0x8d,0xac,0x38,0x00,0x8e,0xac,\r
+0x3c,0x00,0x8f,0xac,0x12,0x40,0x00,0x00,0x10,0x48,0x00,0x00,0x40,0x00,0x90,0xac,\r
+0x44,0x00,0x91,0xac,0x48,0x00,0x92,0xac,0x4c,0x00,0x93,0xac,0x50,0x00,0x94,0xac,\r
+0x54,0x00,0x95,0xac,0x58,0x00,0x96,0xac,0x5c,0x00,0x97,0xac,0x60,0x00,0x98,0xac,\r
+0x64,0x00,0x99,0xac,0x68,0x00,0x9c,0xac,0x6c,0x00,0x9d,0xac,0x70,0x00,0x9e,0xac,\r
+0x74,0x00,0x9f,0xac,0x78,0x00,0x88,0xac,0x7c,0x00,0x89,0xac,0x80,0x00,0x9f,0xac,\r
+0xf8,0xff,0x84,0x24,0x00,0x00,0x84,0x8c,0x00,0x00,0x00,0x00,0x08,0x00,0x84,0x24,\r
+0x84,0x00,0x86,0x8c,0x00,0x00,0x00,0x00,0xf9,0xff,0xc0,0x10,0x00,0x00,0x00,0x00,\r
+0x21,0xd8,0x80,0x00,0x01,0x00,0xba,0x24,0x04,0x00,0x61,0x8f,0xfc,0x03,0x70,0x7b,\r
+0x7c,0x00,0x62,0x7b,0xbc,0x00,0x64,0x7b,0xfc,0x00,0x66,0x7b,0x3c,0x01,0x68,0x7b,\r
+0x13,0x00,0x00,0x02,0x11,0x00,0x20,0x02,0x7c,0x01,0x6a,0x7b,0xbc,0x01,0x6c,0x7b,\r
+0xfc,0x01,0x6e,0x7b,0x3c,0x02,0x70,0x7b,0x7c,0x02,0x72,0x7b,0xbc,0x02,0x74,0x7b,\r
+0xfc,0x02,0x76,0x7b,0x3c,0x03,0x78,0x7b,0x7c,0x03,0x7c,0x7b,0xbc,0x03,0x7e,0x7b,\r
+0x80,0x00,0x7b,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0x60,0x03,0x00,0x60,0x9a,0x40,\r
+0x00,0x60,0x05,0x40,0x42,0x28,0x05,0x00,0x40,0x28,0x05,0x00,0x00,0x60,0x85,0x40,\r
+0x04,0x00,0x81,0xac,0x08,0x00,0x82,0xac,0x0c,0x00,0x83,0xac,0x20,0x00,0x88,0xac,\r
+0x24,0x00,0x89,0xac,0x28,0x00,0x8a,0xac,0x2c,0x00,0x8b,0xac,0x30,0x00,0x8c,0xac,\r
+0x34,0x00,0x8d,0xac,0x38,0x00,0x8e,0xac,0x3c,0x00,0x8f,0xac,0x12,0x40,0x00,0x00,\r
+0x10,0x48,0x00,0x00,0x40,0x00,0x90,0xac,0x44,0x00,0x91,0xac,0x48,0x00,0x92,0xac,\r
+0x4c,0x00,0x93,0xac,0x50,0x00,0x94,0xac,0x54,0x00,0x94,0xac,0x58,0x00,0x96,0xac,\r
+0x5c,0x00,0x96,0xac,0x60,0x00,0x98,0xac,0x64,0x00,0x99,0xac,0x68,0x00,0x9c,0xac,\r
+0x6c,0x00,0x9d,0xac,0x70,0x00,0x9e,0xac,0x78,0x00,0x88,0xac,0x7c,0x00,0x89,0xac,\r
+0x80,0x00,0x9f,0xac,0x84,0x00,0x80,0xac,0xf8,0xff,0x84,0x24,0x00,0x00,0x84,0x8c,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0x84,0x24,0x84,0x00,0x86,0x8c,0xfa,0xff,0xc0,0x10,\r
+0x00,0x00,0x00,0x00,0x21,0xd8,0x80,0x00,0x01,0x00,0xba,0x24,0x04,0x00,0x61,0x8f,\r
+0xfc,0x03,0x70,0x7b,0x7c,0x00,0x62,0x7b,0xbc,0x00,0x64,0x7b,0xfc,0x00,0x66,0x7b,\r
+0x3c,0x01,0x68,0x7b,0x13,0x00,0x00,0x02,0x11,0x00,0x20,0x02,0x7c,0x01,0x6a,0x7b,\r
+0xbc,0x01,0x6c,0x7b,0xfc,0x01,0x6e,0x7b,0x3c,0x02,0x70,0x7b,0x7c,0x02,0x72,0x7b,\r
+0xbc,0x02,0x74,0x7b,0xfc,0x02,0x76,0x7b,0x3c,0x03,0x78,0x7b,0x7c,0x03,0x7c,0x7b,\r
+0xbc,0x03,0x7e,0x7b,0x80,0x00,0x7b,0x8f,0x08,0x00,0x60,0x03,0x00,0x60,0x9a,0x40,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x60,0xb9,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x1b,0x3c,0x00,0x00,0x7b,0x27,\r
+0x25,0xb0,0x1a,0x3c,0x18,0x03,0x5a,0x27,0x00,0x00,0x5b,0xaf,0x00,0x00,0x05,0x24,\r
+0x03,0x00,0xa4,0x24,0x00,0xa0,0x80,0x40,0x00,0xa0,0x84,0x40,0x01,0x80,0x04,0x3c,\r
+0x98,0x03,0x84,0x24,0x08,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x01,0x80,0x1b,0x3c,0x98,0x03,0x7b,0x27,0x25,0xb0,0x1a,0x3c,0x18,0x03,0x5a,0x27,\r
+0x00,0x00,0x5b,0xaf,0x02,0x80,0x1a,0x3c,0x00,0x00,0x5a,0x27,0xfc,0x03,0x5d,0x27,\r
+0x02,0x80,0x1c,0x3c,0x00,0x14,0x9c,0x27,0x00,0xf0,0x08,0x3c,0x00,0x0c,0x08,0x35,\r
+0x00,0x60,0x88,0x40,0x02,0x80,0x04,0x3c,0x00,0x00,0x84,0x24,0xff,0x7f,0x05,0x3c,\r
+0xff,0xff,0xa5,0x34,0x24,0x20,0x85,0x00,0x00,0x20,0x84,0x4c,0xff,0xff,0x05,0x34,\r
+0x21,0x28,0xa4,0x00,0x00,0x28,0x85,0x4c,0x00,0x80,0x04,0x3c,0x00,0x00,0x84,0x24,\r
+0xff,0x7f,0x05,0x3c,0xff,0xff,0xa5,0x34,0x24,0x20,0x85,0x00,0x00,0x00,0x84,0x4c,\r
+0xff,0xff,0x06,0x34,0x21,0x30,0xc4,0x00,0x24,0x30,0xc5,0x00,0x00,0x08,0x86,0x4c,\r
+0x00,0xa0,0x04,0x40,0x10,0x00,0x84,0x34,0x00,0xa0,0x84,0x40,0x01,0x80,0x1b,0x3c,\r
+0x24,0x04,0x7b,0x27,0x25,0xb0,0x1a,0x3c,0x18,0x03,0x5a,0x27,0x00,0x00,0x5b,0xaf,\r
+0x00,0x00,0x00,0x00,0x25,0xb0,0x04,0x3c,0x44,0x00,0x84,0x34,0x00,0x00,0x85,0x84,\r
+0x20,0x00,0x06,0x24,0x25,0x28,0xa6,0x00,0x00,0x00,0x85,0xa4,0x01,0x80,0x1b,0x3c,\r
+0x54,0x04,0x7b,0x27,0x25,0xb0,0x1a,0x3c,0x18,0x03,0x5a,0x27,0x00,0x00,0x5b,0xaf,\r
+0x25,0xb0,0x04,0x3c,0x44,0x00,0x84,0x34,0x00,0x00,0x85,0x8c,0x00,0x00,0x00,0x00,\r
+0x10,0x00,0xa5,0x30,0xfc,0xff,0xa0,0x10,0x00,0x00,0x00,0x00,0xff,0x1f,0x07,0x3c,\r
+0xff,0xff,0xe7,0x34,0x02,0x80,0x05,0x3c,0xe8,0x7d,0xa5,0x24,0xff,0xff,0xa5,0x30,\r
+0x40,0xb0,0x04,0x3c,0x25,0x28,0xa4,0x00,0x24,0x28,0xa7,0x00,0x21,0x30,0x00,0x00,\r
+0x43,0xb0,0x02,0x3c,0x00,0x80,0x04,0x3c,0x40,0x00,0x84,0x34,0x00,0x00,0x45,0xac,\r
+0x04,0x00,0x46,0xac,0x08,0x00,0x44,0xac,0x8b,0x5b,0x00,0x08,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x09,0x00,0x02,0x24,0xff,0xff,0x42,0x24,\r
+0xff,0xff,0x41,0x04,0xff,0xff,0x42,0x24,0x08,0x00,0xe0,0x03,0x01,0x00,0x42,0x24,\r
+0x00,0x60,0x02,0x40,0x01,0x00,0x41,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x82,0xac,0x00,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,\r
+0x21,0x18,0x40,0x00,0x00,0x60,0x83,0x40,0x08,0x00,0xe0,0x03,0x00,0x00,0x82,0xac,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0x3c,\r
+0x25,0xb0,0x02,0x3c,0x44,0x05,0x63,0x24,0x18,0x03,0x42,0x34,0x00,0x00,0x43,0xac,\r
+0x04,0x00,0x85,0x8c,0x00,0x80,0x03,0x3c,0x01,0x00,0x02,0x24,0x25,0x28,0xa3,0x00,\r
+0x00,0x00,0xa4,0x8c,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0x3c,\r
+0x25,0xb0,0x02,0x3c,0x74,0x05,0x63,0x24,0x18,0x03,0x42,0x34,0x00,0x00,0x43,0xac,\r
+0x04,0x00,0x82,0x8c,0x02,0x00,0x83,0x94,0x00,0x80,0x07,0x3c,0x25,0x28,0x47,0x00,\r
+0x00,0x00,0xa2,0x8c,0x10,0x00,0x02,0x24,0x13,0x00,0x62,0x10,0x11,0x00,0x66,0x28,\r
+0x06,0x00,0xc0,0x10,0x20,0x00,0x02,0x24,0x08,0x00,0x02,0x24,0x17,0x00,0x62,0x10,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,0xfd,0xff,0x62,0x14,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0x83,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0xa3,0xac,\r
+0x04,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,0x25,0x10,0x47,0x00,0x00,0x00,0x42,0x8c,\r
+0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,0x08,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0xa2,0xa4,0x04,0x00,0x83,0x8c,0x00,0x00,0x00,0x00,0x25,0x18,0x67,0x00,\r
+0x00,0x00,0x62,0x94,0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,0x08,0x00,0x82,0x8c,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0xa0,0x04,0x00,0x83,0x8c,0x00,0x00,0x00,0x00,\r
+0x25,0x18,0x67,0x00,0x00,0x00,0x62,0x90,0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,\r
+0xe0,0xff,0xbd,0x27,0x14,0x00,0xb1,0xaf,0x02,0x80,0x11,0x3c,0x1c,0x00,0xbf,0xaf,\r
+0x18,0x00,0xb2,0xaf,0x10,0x00,0xb0,0xaf,0x68,0x15,0x31,0x26,0x44,0x65,0x30,0x96,\r
+0x02,0x80,0x02,0x3c,0x01,0x80,0x03,0x3c,0x25,0x80,0x02,0x02,0x25,0xb0,0x02,0x3c,\r
+0x38,0x06,0x63,0x24,0x18,0x03,0x42,0x34,0x60,0x00,0x04,0x26,0x80,0x00,0x05,0x26,\r
+0x00,0x00,0x43,0xac,0x6c,0x45,0x00,0x0c,0x03,0x00,0x06,0x24,0x21,0x20,0x00,0x02,\r
+0x21,0x28,0x00,0x00,0x58,0x45,0x00,0x0c,0x08,0x00,0x06,0x24,0x44,0x65,0x22,0x8e,\r
+0x0c,0x00,0x03,0x24,0x0c,0x00,0x43,0xae,0x08,0x00,0x42,0xae,0x12,0x00,0x02,0x24,\r
+0x14,0x00,0x42,0xae,0x21,0x20,0x40,0x02,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x30,0x08,0x00,0x08,0x20,0x00,0xbd,0x27,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,\r
+0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,0x02,0x80,0x02,0x3c,0x21,0x48,0x80,0x00,\r
+0x68,0x15,0x48,0x24,0x21,0x38,0x00,0x00,0x21,0x28,0x27,0x01,0x00,0x00,0xa2,0x90,\r
+0x21,0x20,0xe8,0x00,0x01,0x00,0xe7,0x24,0x44,0x4c,0x82,0xa0,0x1e,0x00,0xa3,0x90,\r
+0x1e,0x00,0xe6,0x28,0x62,0x4c,0x83,0xa0,0x3c,0x00,0xa2,0x90,0x00,0x00,0x00,0x00,\r
+0x80,0x4c,0x82,0xa0,0x5a,0x00,0xa3,0x90,0xf3,0xff,0xc0,0x14,0x9e,0x4c,0x83,0xa0,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,\r
+0x20,0xbd,0x03,0x3c,0x58,0x00,0x63,0x34,0x00,0x00,0x62,0x90,0x0f,0x27,0x07,0x24,\r
+0x20,0x00,0x42,0x34,0x00,0x00,0x62,0xa0,0xff,0xff,0xe7,0x24,0xff,0xff,0xe1,0x04,\r
+0xff,0xff,0xe7,0x24,0x62,0xbd,0x04,0x3c,0x24,0x10,0x82,0x34,0x00,0x00,0x40,0xa0,\r
+0x28,0x10,0x83,0x34,0x0c,0x11,0x86,0x34,0x0e,0x00,0x02,0x24,0x00,0x00,0x60,0xa0,\r
+0x00,0x11,0x85,0x34,0x00,0x00,0xc2,0xa0,0x00,0x00,0xa7,0x8c,0xdf,0xff,0x02,0x24,\r
+0x10,0x00,0x86,0x34,0x24,0x38,0xe2,0x00,0x49,0x0c,0x03,0x24,0xcf,0xff,0x02,0x24,\r
+0x00,0x00,0xc3,0xac,0x04,0x00,0x84,0x34,0x00,0x00,0xa7,0xac,0x24,0x38,0xe2,0x00,\r
+0x41,0x0c,0x02,0x24,0x00,0x00,0xa7,0xac,0x00,0x00,0x80,0xac,0x00,0x00,0xc2,0xac,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,\r
+0x25,0xb0,0x05,0x3c,0x01,0x80,0x03,0x3c,0x21,0x38,0x80,0x00,0x18,0x03,0xa2,0x34,\r
+0xa8,0x08,0x63,0x24,0x01,0x00,0x04,0x24,0x00,0x00,0x43,0xac,0x35,0x00,0xe4,0x10,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x10,0x20,0x08,0xa2,0x34,0x02,0x00,0x02,0x24,\r
+0x83,0x00,0xe2,0x10,0x03,0x00,0x02,0x24,0x5a,0x00,0xe2,0x10,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x02,0x80,0x03,0x3c,0x00,0x00,0x44,0x8c,\r
+0x68,0x15,0x66,0x24,0x70,0x08,0x02,0x24,0xe0,0x08,0x03,0x24,0x80,0x4b,0xc2,0xac,\r
+0x40,0x08,0x02,0x24,0x84,0x4b,0xc3,0xac,0x90,0x4b,0xc2,0xac,0x78,0x08,0x03,0x24,\r
+0x0c,0x08,0x02,0x24,0x94,0x4b,0xc3,0xac,0x98,0x4b,0xc2,0xac,0x10,0x08,0x03,0x24,\r
+0x20,0x08,0x02,0x24,0x9c,0x4b,0xc3,0xac,0xa0,0x4b,0xc2,0xac,0x24,0x08,0x03,0x24,\r
+0x58,0x08,0x02,0x24,0xa4,0x4b,0xc3,0xac,0xa8,0x4b,0xc2,0xac,0x50,0x0c,0x03,0x24,\r
+0x54,0x0c,0x02,0x24,0xac,0x4b,0xc3,0xac,0xb0,0x4b,0xc2,0xac,0x14,0x0c,0x03,0x24,\r
+0x10,0x0c,0x02,0x24,0x60,0x08,0x05,0x24,0xb4,0x4b,0xc3,0xac,0xb8,0x4b,0xc2,0xac,\r
+0x80,0x0c,0x03,0x24,0x84,0x0c,0x02,0x24,0x00,0x01,0x84,0x30,0xc0,0x4b,0xc2,0xac,\r
+0x8c,0x4b,0xc5,0xac,0xbc,0x4b,0xc3,0xac,0x7d,0x4b,0xc0,0xa0,0x88,0x4b,0xc5,0xac,\r
+0x02,0x00,0x80,0x10,0xa0,0x08,0x02,0x24,0xb8,0x08,0x02,0x24,0x08,0x00,0xe0,0x03,\r
+0xc4,0x4b,0xc2,0xac,0x28,0x08,0xa2,0x34,0x02,0x80,0x03,0x3c,0x00,0x00,0x44,0x8c,\r
+0x68,0x15,0x66,0x24,0x70,0x08,0x02,0x24,0xe0,0x08,0x03,0x24,0x80,0x4b,0xc2,0xac,\r
+0x44,0x08,0x02,0x24,0x84,0x4b,0xc3,0xac,0x90,0x4b,0xc2,0xac,0x78,0x08,0x03,0x24,\r
+0x0c,0x08,0x02,0x24,0x94,0x4b,0xc3,0xac,0x98,0x4b,0xc2,0xac,0x14,0x08,0x03,0x24,\r
+0x28,0x08,0x02,0x24,0x9c,0x4b,0xc3,0xac,0xa0,0x4b,0xc2,0xac,0x2c,0x08,0x03,0x24,\r
+0x58,0x08,0x02,0x24,0xa4,0x4b,0xc3,0xac,0xa8,0x4b,0xc2,0xac,0x58,0x0c,0x03,0x24,\r
+0x5c,0x0c,0x02,0x24,0xac,0x4b,0xc3,0xac,0xb0,0x4b,0xc2,0xac,0x1c,0x0c,0x03,0x24,\r
+0x18,0x0c,0x02,0x24,0x64,0x08,0x05,0x24,0xb4,0x4b,0xc3,0xac,0xb8,0x4b,0xc2,0xac,\r
+0x88,0x0c,0x03,0x24,0x8c,0x0c,0x02,0x24,0x00,0x01,0x84,0x30,0xc0,0x4b,0xc2,0xac,\r
+0x7d,0x4b,0xc7,0xa0,0x8c,0x4b,0xc5,0xac,0xbc,0x4b,0xc3,0xac,0x88,0x4b,0xc5,0xac,\r
+0xd6,0xff,0x80,0x10,0xa4,0x08,0x02,0x24,0xbc,0x08,0x02,0x24,0x08,0x00,0xe0,0x03,\r
+0xc4,0x4b,0xc2,0xac,0x02,0x80,0x02,0x3c,0x68,0x15,0x42,0x24,0xac,0x08,0x03,0x24,\r
+0xc4,0x4b,0x43,0xac,0x74,0x08,0x03,0x24,0xe4,0x08,0x04,0x24,0x80,0x4b,0x43,0xac,\r
+0x4c,0x08,0x03,0x24,0x84,0x4b,0x44,0xac,0x90,0x4b,0x43,0xac,0x7c,0x08,0x04,0x24,\r
+0x0c,0x08,0x03,0x24,0x94,0x4b,0x44,0xac,0x98,0x4b,0x43,0xac,0x1c,0x08,0x04,0x24,\r
+0x38,0x08,0x03,0x24,0x9c,0x4b,0x44,0xac,0xa0,0x4b,0x43,0xac,0x3c,0x08,0x04,0x24,\r
+0x5c,0x08,0x03,0x24,0xa4,0x4b,0x44,0xac,0xa8,0x4b,0x43,0xac,0x68,0x0c,0x04,0x24,\r
+0x6c,0x0c,0x03,0x24,0xac,0x4b,0x44,0xac,0xb0,0x4b,0x43,0xac,0x2c,0x0c,0x04,0x24,\r
+0x28,0x0c,0x03,0x24,0x6c,0x08,0x05,0x24,0xb4,0x4b,0x44,0xac,0xb8,0x4b,0x43,0xac,\r
+0x98,0x0c,0x04,0x24,0x9c,0x0c,0x03,0x24,0x7d,0x4b,0x47,0xa0,0x8c,0x4b,0x45,0xac,\r
+0xbc,0x4b,0x44,0xac,0xc0,0x4b,0x43,0xac,0x08,0x00,0xe0,0x03,0x88,0x4b,0x45,0xac,\r
+0x02,0x80,0x02,0x3c,0x68,0x15,0x42,0x24,0xa8,0x08,0x03,0x24,0xc4,0x4b,0x43,0xac,\r
+0x74,0x08,0x03,0x24,0xe4,0x08,0x04,0x24,0x80,0x4b,0x43,0xac,0x48,0x08,0x03,0x24,\r
+0x84,0x4b,0x44,0xac,0x90,0x4b,0x43,0xac,0x7c,0x08,0x04,0x24,0x0c,0x08,0x03,0x24,\r
+0x94,0x4b,0x44,0xac,0x98,0x4b,0x43,0xac,0x18,0x08,0x04,0x24,0x30,0x08,0x03,0x24,\r
+0x9c,0x4b,0x44,0xac,0xa0,0x4b,0x43,0xac,0x34,0x08,0x04,0x24,0x5c,0x08,0x03,0x24,\r
+0xa4,0x4b,0x44,0xac,0xa8,0x4b,0x43,0xac,0x60,0x0c,0x04,0x24,0x64,0x0c,0x03,0x24,\r
+0xac,0x4b,0x44,0xac,0xb0,0x4b,0x43,0xac,0x24,0x0c,0x04,0x24,0x20,0x0c,0x03,0x24,\r
+0x68,0x08,0x05,0x24,0xb4,0x4b,0x44,0xac,0xb8,0x4b,0x43,0xac,0x90,0x0c,0x04,0x24,\r
+0x94,0x0c,0x03,0x24,0x7d,0x4b,0x47,0xa0,0x8c,0x4b,0x45,0xac,0xbc,0x4b,0x44,0xac,\r
+0xc0,0x4b,0x43,0xac,0x08,0x00,0xe0,0x03,0x88,0x4b,0x45,0xac,0xe6,0x42,0x00,0x08,\r
+0x21,0x18,0x00,0x00,0x20,0x00,0x62,0x2c,0x06,0x00,0x40,0x10,0x00,0x00,0x00,0x00,\r
+0x06,0x10,0x64,0x00,0x01,0x00,0x42,0x30,0xfa,0xff,0x40,0x10,0x01,0x00,0x63,0x24,\r
+0xff,0xff,0x63,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0xd8,0xff,0xbd,0x27,\r
+0x25,0xb0,0x02,0x3c,0x18,0x00,0xb2,0xaf,0x21,0x90,0x82,0x00,0xff,0xff,0x02,0x24,\r
+0x1c,0x00,0xb3,0xaf,0x14,0x00,0xb1,0xaf,0x20,0x00,0xbf,0xaf,0x10,0x00,0xb0,0xaf,\r
+0x21,0x88,0xa0,0x00,0x21,0x20,0xa0,0x00,0x21,0x18,0x40,0x02,0x10,0x00,0xa2,0x10,\r
+0x21,0x98,0xc0,0x00,0x00,0x00,0x50,0x8e,0xe1,0x42,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x04,0x10,0x53,0x00,0x27,0x18,0x11,0x00,0x25,0x18,0x62,0x00,0x24,0x18,0x70,0x00,\r
+0x00,0x00,0x43,0xae,0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27,\r
+0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x28,0x00,0xbd,0x27,0x00,0x00,0x66,0xac,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,0x21,0x30,0x80,0x00,0xf8,0x60,0x44,0x8c,\r
+0xed,0x42,0x00,0x08,0xff,0xff,0x05,0x24,0xe0,0xff,0xbd,0x27,0x25,0xb0,0x02,0x3c,\r
+0x18,0x00,0xbf,0xaf,0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x21,0x20,0x82,0x00,\r
+0x00,0x00,0x90,0x8c,0x21,0x88,0xa0,0x00,0xe1,0x42,0x00,0x0c,0x21,0x20,0xa0,0x00,\r
+0x24,0x80,0x11,0x02,0x06,0x10,0x50,0x00,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xd0,0xff,0xbd,0x27,\r
+0x14,0x00,0xb1,0xaf,0x02,0x80,0x11,0x3c,0x28,0x00,0xbf,0xaf,0x20,0x00,0xb4,0xaf,\r
+0x1c,0x00,0xb3,0xaf,0x18,0x00,0xb2,0xaf,0x24,0x00,0xb5,0xaf,0x10,0x00,0xb0,0xaf,\r
+0x68,0x15,0x31,0x26,0xa4,0x4b,0x22,0x8e,0x25,0xb0,0x12,0x3c,0x24,0x08,0x53,0x36,\r
+0x21,0x10,0x52,0x00,0x00,0x00,0x70,0x8e,0x00,0x00,0x55,0x8c,0x7f,0x80,0x03,0x3c,\r
+0xff,0x7f,0x02,0x3c,0xff,0xff,0x63,0x34,0xff,0xff,0x42,0x34,0x24,0x10,0x02,0x02,\r
+0x24,0x18,0xa3,0x02,0xc0,0x25,0x04,0x00,0x25,0x18,0x64,0x00,0x00,0x80,0x14,0x3c,\r
+0x00,0x00,0x62,0xae,0x01,0x00,0x04,0x24,0xeb,0x0b,0x00,0x0c,0x25,0xa8,0x74,0x00,\r
+0xa4,0x4b,0x22,0x8e,0x25,0x80,0x14,0x02,0x01,0x00,0x04,0x24,0x21,0x10,0x52,0x00,\r
+0x00,0x00,0x55,0xac,0xeb,0x0b,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0xae,\r
+0xeb,0x0b,0x00,0x0c,0x01,0x00,0x04,0x24,0xc4,0x4b,0x24,0x8e,0x0f,0x00,0x05,0x3c,\r
+0x28,0x00,0xbf,0x8f,0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f,\r
+0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0xff,0xff,0xa5,0x34,\r
+0x18,0x43,0x00,0x08,0x30,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x14,0x00,0xb1,0xaf,\r
+0x02,0x80,0x11,0x3c,0x10,0x00,0xb0,0xaf,0x18,0x00,0xbf,0xaf,0x68,0x15,0x27,0x26,\r
+0x7f,0x4b,0xe5,0x90,0x01,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,0x70,0x0d,0x63,0x24,\r
+0x18,0x03,0x42,0x34,0x02,0x00,0x06,0x24,0x00,0x00,0x43,0xac,0x34,0x00,0xa6,0x10,\r
+0x21,0x80,0x80,0x00,0x03,0x00,0x03,0x24,0x3a,0x00,0xa3,0x10,0x2e,0x00,0x02,0x2e,\r
+0x10,0x00,0x02,0x2e,0x07,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0xff,0x00,0x04,0x32,\r
+0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x29,0x43,0x00,0x08,\r
+0x20,0x00,0xbd,0x27,0xfa,0xff,0xa6,0x14,0xff,0x00,0x04,0x32,0x7d,0x4b,0xe4,0x90,\r
+0x01,0x00,0x02,0x24,0x33,0x00,0x82,0x10,0x02,0x00,0x82,0x28,0x38,0x00,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0x38,0x00,0x85,0x10,0x68,0x15,0x22,0x26,0x2e,0x00,0x83,0x10,\r
+0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x24,0x18,0x43,0x00,0x0c,0xff,0xff,0x05,0x24,\r
+0xff,0xfc,0x06,0x3c,0xff,0xff,0xc6,0x34,0x24,0x30,0x46,0x00,0x00,0x08,0x04,0x24,\r
+0xed,0x42,0x00,0x0c,0xff,0xff,0x05,0x24,0x68,0x15,0x22,0x26,0x7d,0x4b,0x44,0x90,\r
+0x01,0x00,0x03,0x24,0x07,0x00,0x83,0x10,0x02,0x00,0x82,0x28,0x2c,0x00,0x40,0x14,\r
+0x02,0x00,0x02,0x24,0x2c,0x00,0x82,0x10,0x03,0x00,0x02,0x24,0xdb,0xff,0x82,0x14,\r
+0x00,0x00,0x00,0x00,0x68,0x15,0x22,0x26,0x80,0x4b,0x44,0x8c,0x0f,0x00,0x05,0x3c,\r
+0xed,0x42,0x00,0x0c,0x21,0x30,0x00,0x00,0x72,0x43,0x00,0x08,0xff,0x00,0x04,0x32,\r
+0x25,0x00,0x82,0x2c,0xcc,0xff,0x40,0x14,0x03,0x00,0x03,0x24,0x18,0x00,0xbf,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x20,0x00,0xbd,0x27,0xc7,0xff,0x40,0x14,0x10,0x00,0x02,0x2e,0x18,0x00,0xbf,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x20,0x00,0xbd,0x27,0x68,0x15,0x22,0x26,0x80,0x4b,0x44,0x8c,0x0f,0x00,0x05,0x3c,\r
+0xed,0x42,0x00,0x0c,0x0f,0x00,0x06,0x24,0x84,0x43,0x00,0x08,0x00,0x08,0x04,0x24,\r
+0xcc,0xff,0x80,0x14,0x68,0x15,0x22,0x26,0x80,0x4b,0x44,0x8c,0x0f,0x00,0x05,0x24,\r
+0xed,0x42,0x00,0x0c,0x0f,0x00,0x06,0x24,0x84,0x43,0x00,0x08,0x00,0x08,0x04,0x24,\r
+0xb2,0xff,0x80,0x14,0x00,0x00,0x00,0x00,0x68,0x15,0x22,0x26,0x80,0x4b,0x44,0x8c,\r
+0x0f,0x00,0x05,0x24,0xed,0x42,0x00,0x0c,0x21,0x30,0x00,0x00,0x72,0x43,0x00,0x08,\r
+0xff,0x00,0x04,0x32,0xe0,0xff,0xbd,0x27,0x14,0x00,0xb1,0xaf,0x02,0x80,0x11,0x3c,\r
+0x68,0x15,0x28,0x26,0x7f,0x4b,0x06,0x91,0x01,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,\r
+0x1c,0x0f,0x63,0x24,0x18,0x03,0x42,0x34,0x02,0x00,0x07,0x24,0x18,0x00,0xb2,0xaf,\r
+0x10,0x00,0xb0,0xaf,0x1c,0x00,0xbf,0xaf,0x00,0x00,0x43,0xac,0x21,0x90,0xa0,0x00,\r
+0x39,0x00,0xc7,0x10,0xff,0x00,0x90,0x30,0x03,0x00,0x03,0x24,0x3f,0x00,0xc3,0x10,\r
+0x2e,0x00,0x02,0x2e,0x10,0x00,0x02,0x2e,0x0c,0x00,0x40,0x10,0x00,0x00,0x00,0x00,\r
+0x0f,0x00,0x04,0x3c,0xff,0xff,0x84,0x34,0x24,0x20,0x44,0x02,0x00,0x15,0x10,0x00,\r
+0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x25,0x20,0x44,0x00,0x13,0x43,0x00,0x08,0x20,0x00,0xbd,0x27,0xf5,0xff,0xc7,0x14,\r
+0x0f,0x00,0x04,0x3c,0x7d,0x4b,0x04,0x91,0x01,0x00,0x02,0x24,0x33,0x00,0x82,0x10,\r
+0x02,0x00,0x82,0x28,0x38,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x38,0x00,0x86,0x10,\r
+0x68,0x15,0x22,0x26,0x2e,0x00,0x83,0x10,0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x24,\r
+0x18,0x43,0x00,0x0c,0xff,0xff,0x05,0x24,0xff,0xfc,0x06,0x3c,0xff,0xff,0xc6,0x34,\r
+0x24,0x30,0x46,0x00,0x00,0x08,0x04,0x24,0xed,0x42,0x00,0x0c,0xff,0xff,0x05,0x24,\r
+0x68,0x15,0x22,0x26,0x7d,0x4b,0x44,0x90,0x01,0x00,0x03,0x24,0x07,0x00,0x83,0x10,\r
+0x02,0x00,0x82,0x28,0x2c,0x00,0x40,0x14,0x02,0x00,0x02,0x24,0x2c,0x00,0x82,0x10,\r
+0x03,0x00,0x02,0x24,0xd6,0xff,0x82,0x14,0x00,0x00,0x00,0x00,0x68,0x15,0x22,0x26,\r
+0x80,0x4b,0x44,0x8c,0x0f,0x00,0x05,0x3c,0xed,0x42,0x00,0x0c,0x21,0x30,0x00,0x00,\r
+0xdf,0x43,0x00,0x08,0x0f,0x00,0x04,0x3c,0x25,0x00,0x02,0x2e,0xc7,0xff,0x40,0x14,\r
+0x03,0x00,0x03,0x24,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xc1,0xff,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x68,0x15,0x22,0x26,\r
+0x80,0x4b,0x44,0x8c,0x0f,0x00,0x05,0x3c,0xed,0x42,0x00,0x0c,0x0f,0x00,0x06,0x24,\r
+0xf6,0x43,0x00,0x08,0x00,0x08,0x04,0x24,0xcc,0xff,0x80,0x14,0x68,0x15,0x22,0x26,\r
+0x80,0x4b,0x44,0x8c,0x0f,0x00,0x05,0x24,0xed,0x42,0x00,0x0c,0x0f,0x00,0x06,0x24,\r
+0xf6,0x43,0x00,0x08,0x00,0x08,0x04,0x24,0xad,0xff,0x80,0x14,0x00,0x00,0x00,0x00,\r
+0x68,0x15,0x22,0x26,0x80,0x4b,0x44,0x8c,0x0f,0x00,0x05,0x24,0xed,0x42,0x00,0x0c,\r
+0x21,0x30,0x00,0x00,0xdf,0x43,0x00,0x08,0x0f,0x00,0x04,0x3c,0xe8,0xff,0xbd,0x27,\r
+0x10,0x00,0xb0,0xaf,0x21,0x80,0x80,0x00,0x14,0x00,0xbf,0xaf,0x29,0x43,0x00,0x0c,\r
+0x21,0x20,0x00,0x00,0x40,0x01,0x44,0x34,0x21,0x18,0x40,0x00,0x1f,0x00,0x02,0x2e,\r
+0x00,0x23,0x04,0x00,0x10,0x00,0x40,0x10,0x10,0x00,0x05,0x2e,0x00,0x01,0x64,0x34,\r
+0x06,0x00,0xa0,0x10,0x00,0x23,0x04,0x00,0x21,0x10,0x00,0x02,0x14,0x00,0xbf,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x13,0x43,0x00,0x0c,\r
+0xf1,0xff,0x10,0x26,0x21,0x10,0x00,0x02,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x13,0x43,0x00,0x0c,0xe2,0xff,0x10,0x26,\r
+0x21,0x10,0x00,0x02,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,\r
+0x18,0x00,0xbd,0x27,0x25,0xb0,0x02,0x3c,0x27,0x38,0x05,0x00,0x21,0x40,0x82,0x00,\r
+0xff,0xff,0x02,0x24,0x07,0x00,0xa2,0x10,0x25,0x38,0xe6,0x00,0x00,0x00,0x02,0x8d,\r
+0x00,0x00,0x00,0x00,0x24,0x10,0xe2,0x00,0x00,0x00,0x02,0xad,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x06,0xad,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x01,0x80,0x02,0x3c,0x25,0xb0,0x03,0x3c,0xd8,0xff,0xbd,0x27,0xa8,0x11,0x42,0x24,\r
+0x18,0x03,0x63,0x34,0x20,0x00,0xb4,0xaf,0x1c,0x00,0xb3,0xaf,0x14,0x00,0xb1,0xaf,\r
+0x24,0x00,0xbf,0xaf,0x18,0x00,0xb2,0xaf,0x10,0x00,0xb0,0xaf,0x00,0x00,0x62,0xac,\r
+0x21,0x88,0xa0,0x00,0x21,0x98,0xc0,0x00,0x21,0xa0,0x80,0x00,0x00,0x60,0x12,0x40,\r
+0x01,0x00,0x41,0x36,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x0f,0x00,0x02,0x3c,\r
+0xff,0xff,0x42,0x34,0x0a,0x00,0x22,0x12,0x21,0x28,0xc0,0x00,0x5c,0x43,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x21,0x20,0x20,0x02,0xe1,0x42,0x00,0x0c,0x21,0x80,0x40,0x00,\r
+0x04,0x10,0x53,0x00,0x27,0x28,0x11,0x00,0x25,0x28,0xa2,0x00,0x24,0x28,0xb0,0x00,\r
+0xc7,0x43,0x00,0x0c,0xff,0x00,0x84,0x32,0x00,0x60,0x92,0x40,0x24,0x00,0xbf,0x8f,\r
+0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27,0x01,0x80,0x03,0x3c,\r
+0x25,0xb0,0x02,0x3c,0xe0,0xff,0xbd,0x27,0x54,0x12,0x63,0x24,0x18,0x03,0x42,0x34,\r
+0x18,0x00,0xb2,0xaf,0x1c,0x00,0xbf,0xaf,0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,\r
+0x00,0x00,0x43,0xac,0x21,0x90,0xa0,0x00,0x00,0x60,0x11,0x40,0x01,0x00,0x21,0x36,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x5c,0x43,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x21,0x80,0x40,0x00,0xe1,0x42,0x00,0x0c,0x21,0x20,0x40,0x02,0x24,0x80,0x12,0x02,\r
+0x06,0x80,0x50,0x00,0x00,0x60,0x91,0x40,0x21,0x10,0x00,0x02,0x1c,0x00,0xbf,0x8f,\r
+0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,\r
+0x20,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0xc8,0xff,0xbd,0x27,0x2c,0x00,0xb1,0xaf,0xff,0xff,0x05,0x24,\r
+0x21,0x88,0x80,0x00,0x02,0x00,0x06,0x24,0x10,0x00,0xa4,0x27,0x34,0x00,0xbf,0xaf,\r
+0x30,0x00,0xb2,0xaf,0x58,0x45,0x00,0x0c,0x28,0x00,0xb0,0xaf,0x08,0x00,0x30,0x96,\r
+0x02,0x80,0x02,0x3c,0x21,0x28,0x00,0x00,0x25,0x80,0x02,0x02,0x21,0x20,0x00,0x02,\r
+0x58,0x45,0x00,0x0c,0x10,0x00,0x06,0x24,0x20,0x00,0x02,0x96,0x24,0x00,0x04,0x26,\r
+0x10,0x00,0xa5,0x27,0x03,0xff,0x42,0x30,0xc8,0x00,0x42,0x34,0x20,0x00,0x02,0xa6,\r
+0x60,0x45,0x00,0x0c,0x06,0x00,0x06,0x24,0x25,0xb0,0x03,0x3c,0x50,0x00,0x62,0x34,\r
+0x00,0x00,0x44,0x8c,0x54,0x00,0x65,0x34,0x58,0x00,0x66,0x34,0x18,0x00,0xa4,0xaf,\r
+0x00,0x00,0xa2,0x8c,0x5c,0x00,0x63,0x34,0x2a,0x00,0x04,0x26,0x1c,0x00,0xa2,0xaf,\r
+0x00,0x00,0xc7,0x8c,0x18,0x00,0xa5,0x27,0x06,0x00,0x06,0x24,0x20,0x00,0xa7,0xaf,\r
+0x00,0x00,0x62,0x8c,0x1a,0x00,0x12,0x24,0x60,0x45,0x00,0x0c,0x24,0x00,0xa2,0xaf,\r
+0x30,0x00,0x04,0x26,0x20,0x00,0xa5,0x27,0x60,0x45,0x00,0x0c,0x06,0x00,0x06,0x24,\r
+0x13,0x00,0x03,0x24,0x14,0x00,0x23,0xae,0x0c,0x00,0x32,0xae,0x08,0x00,0x05,0x8e,\r
+0x04,0x00,0x04,0x8e,0xff,0xdf,0x02,0x3c,0x14,0x00,0x06,0x8e,0xff,0xff,0x42,0x34,\r
+0x10,0x00,0x07,0x8e,0xff,0xe0,0x03,0x24,0x24,0x28,0xa2,0x00,0x00,0x40,0x02,0x3c,\r
+0x24,0x20,0x83,0x00,0x25,0x28,0xa2,0x00,0xff,0x81,0x03,0x24,0xfe,0xff,0x02,0x3c,\r
+0x24,0x30,0xc3,0x00,0xff,0xff,0x42,0x34,0x00,0x12,0x84,0x34,0x00,0x80,0x03,0x3c,\r
+0x24,0x20,0x82,0x00,0x25,0x38,0xe3,0x00,0x00,0x26,0xc6,0x34,0x80,0x00,0xa5,0x34,\r
+0x20,0x00,0x02,0x24,0x00,0x00,0x12,0xa6,0x10,0x00,0x07,0xae,0x02,0x00,0x02,0xa2,\r
+0x14,0x00,0x06,0xae,0x04,0x00,0x04,0xae,0x08,0x00,0x05,0xae,0x34,0x00,0xbf,0x8f,\r
+0x30,0x00,0xb2,0x8f,0x2c,0x00,0xb1,0x8f,0x28,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,\r
+0x38,0x00,0xbd,0x27,0x54,0x45,0x00,0x08,0xff,0x00,0xa5,0x30,0x00,0x00,0x85,0xa0,\r
+0xff,0xff,0xc6,0x24,0x01,0x00,0x84,0x24,0xfc,0xff,0xc0,0x14,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x05,0x00,0xc0,0x10,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x85,0xac,0xff,0xff,0xc6,0x24,0xfd,0xff,0xc0,0x14,0x04,0x00,0x84,0x24,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x21,0x38,0x80,0x00,0x08,0x00,0xc0,0x10,\r
+0xff,0xff,0xc3,0x24,0xff,0xff,0x06,0x24,0x00,0x00,0xa2,0x90,0xff,0xff,0x63,0x24,\r
+0x01,0x00,0xa5,0x24,0x00,0x00,0xe2,0xa0,0xfb,0xff,0x66,0x14,0x01,0x00,0xe7,0x24,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00,0x21,0x38,0x80,0x00,0x08,0x00,0xc0,0x10,\r
+0xff,0xff,0xc3,0x24,0xff,0xff,0x06,0x24,0x00,0x00,0xa2,0x8c,0xff,0xff,0x63,0x24,\r
+0x04,0x00,0xa5,0x24,0x00,0x00,0xe2,0xac,0xfb,0xff,0x66,0x14,0x04,0x00,0xe7,0x24,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00,0x2b,0x10,0xa4,0x00,0x0d,0x00,0x40,0x14,\r
+0xff,0xff,0x02,0x24,0xff,0xff,0xc6,0x24,0x08,0x00,0xc2,0x10,0x21,0x18,0x80,0x00,\r
+0xff,0xff,0x07,0x24,0x00,0x00,0xa2,0x90,0xff,0xff,0xc6,0x24,0x01,0x00,0xa5,0x24,\r
+0x00,0x00,0x62,0xa0,0xfb,0xff,0xc7,0x14,0x01,0x00,0x63,0x24,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x80,0x00,0x21,0x28,0xa6,0x00,0x21,0x18,0x86,0x00,0xff,0xff,0xc6,0x24,\r
+0xfa,0xff,0xc2,0x10,0x00,0x00,0x00,0x00,0xff,0xff,0x07,0x24,0xff,0xff,0xa5,0x24,\r
+0x00,0x00,0xa2,0x90,0xff,0xff,0x63,0x24,0xff,0xff,0xc6,0x24,0xfb,0xff,0xc7,0x14,\r
+0x00,0x00,0x62,0xa0,0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00,0x0c,0x00,0xc0,0x10,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x90,0x00,0x00,0xa3,0x90,0x01,0x00,0x84,0x24,\r
+0x23,0x10,0x43,0x00,0x00,0x16,0x02,0x00,0x03,0x16,0x02,0x00,0x04,0x00,0x40,0x14,\r
+0x01,0x00,0xa5,0x24,0xff,0xff,0xc6,0x24,0xf6,0xff,0xc0,0x14,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0xc0,0x00,0xab,0x45,0x00,0x08,0x21,0x18,0x86,0x00,\r
+0x00,0x00,0x82,0x90,0x00,0x00,0x00,0x00,0x04,0x00,0x45,0x10,0x00,0x00,0x00,0x00,\r
+0x01,0x00,0x84,0x24,0xfa,0xff,0x83,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x80,0x00,0x09,0x00,0xc0,0x10,0xff,0xff,0xc3,0x24,0xff,0x00,0xa5,0x30,\r
+0xff,0xff,0x06,0x24,0x00,0x00,0x82,0x90,0xff,0xff,0x63,0x24,0x05,0x00,0x45,0x10,\r
+0x01,0x00,0x84,0x24,0xfb,0xff,0x66,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0xff,0xff,0x82,0x24,0x21,0x38,0x00,0x00,\r
+0x1f,0x00,0xc0,0x10,0x21,0x18,0x00,0x00,0x02,0x80,0x02,0x3c,0x40,0xa3,0x4b,0x24,\r
+0x00,0x00,0x87,0x90,0x00,0x00,0xa3,0x90,0xff,0xff,0xc6,0x24,0x01,0x00,0x84,0x24,\r
+0x21,0x10,0xeb,0x00,0x16,0x00,0xe0,0x10,0x01,0x00,0xa5,0x24,0x14,0x00,0x60,0x10,\r
+0x21,0x48,0x6b,0x00,0x10,0x00,0xe3,0x10,0x20,0x00,0xe8,0x24,0x00,0x00,0x42,0x90,\r
+0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30,0x02,0x00,0x40,0x10,0x20,0x00,0x6a,0x24,\r
+0xff,0x00,0x07,0x31,0x00,0x00,0x22,0x91,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30,\r
+0x02,0x00,0x40,0x10,0xff,0x00,0xe7,0x30,0xff,0x00,0x43,0x31,0xff,0x00,0x63,0x30,\r
+0x03,0x00,0xe3,0x14,0x00,0x00,0x00,0x00,0xe5,0xff,0xc0,0x14,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x23,0x10,0xe3,0x00,0x21,0x18,0x80,0x00,0x00,0x00,0xa2,0x90,\r
+0x01,0x00,0xa5,0x24,0x00,0x00,0x82,0xa0,0xfc,0xff,0x40,0x14,0x01,0x00,0x84,0x24,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x21,0x38,0x80,0x00,0xff,0xff,0x03,0x24,\r
+0xff,0xff,0xc6,0x24,0x06,0x00,0xc3,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0x90,\r
+0x01,0x00,0xa5,0x24,0x00,0x00,0x82,0xa0,0xf9,0xff,0x40,0x14,0x01,0x00,0x84,0x24,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0xe0,0x00,0x00,0x00,0x82,0x80,0xfa,0x45,0x00,0x08,\r
+0x21,0x18,0x80,0x00,0x01,0x00,0x84,0x24,0x00,0x00,0x82,0x80,0x00,0x00,0x00,0x00,\r
+0xfc,0xff,0x40,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0x90,0x01,0x00,0xa5,0x24,\r
+0x00,0x00,0x82,0xa0,0xfc,0xff,0x40,0x14,0x01,0x00,0x84,0x24,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x60,0x00,0x12,0x00,0xc0,0x10,0x21,0x18,0x80,0x00,0x00,0x00,0x82,0x80,\r
+0x0b,0x46,0x00,0x08,0x00,0x00,0x00,0x00,0x01,0x00,0x84,0x24,0x00,0x00,0x82,0x80,\r
+0x00,0x00,0x00,0x00,0xfc,0xff,0x40,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0x90,\r
+0x01,0x00,0xa5,0x24,0x00,0x00,0x82,0xa0,0x05,0x00,0x40,0x10,0x01,0x00,0x84,0x24,\r
+0xff,0xff,0xc6,0x24,0xf9,0xff,0xc0,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xa0,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x00,0x00,0x83,0x90,0x00,0x00,0xa2,0x90,\r
+0x01,0x00,0x84,0x24,0x23,0x10,0x62,0x00,0x00,0x16,0x02,0x00,0x03,0x16,0x02,0x00,\r
+0x03,0x00,0x40,0x14,0x01,0x00,0xa5,0x24,0xf7,0xff,0x60,0x14,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x21,0x10,0x00,0x00,0x0b,0x00,0xc0,0x10,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0x90,0x00,0x00,0x83,0x90,0xff,0xff,0xc6,0x24,\r
+0x23,0x10,0x62,0x00,0x00,0x16,0x02,0x00,0x03,0x16,0x02,0x00,0x03,0x00,0x40,0x14,\r
+0x01,0x00,0xa5,0x24,0xf5,0xff,0x60,0x14,0x01,0x00,0x84,0x24,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x83,0x80,0x00,0x2e,0x05,0x00,0x21,0x10,0x80,0x00,\r
+0x3c,0x46,0x00,0x08,0x03,0x2e,0x05,0x00,0x07,0x00,0x60,0x10,0x01,0x00,0x42,0x24,\r
+0x00,0x00,0x43,0x80,0x00,0x00,0x00,0x00,0xfb,0xff,0x65,0x14,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,\r
+0x00,0x00,0x82,0x80,0x48,0x46,0x00,0x08,0x21,0x18,0x80,0x00,0x01,0x00,0x63,0x24,\r
+0x00,0x00,0x62,0x80,0x00,0x00,0x00,0x00,0xfc,0xff,0x40,0x14,0x23,0x10,0x64,0x00,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xe0,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,\r
+0x21,0x80,0xa0,0x00,0x14,0x00,0xb1,0xaf,0x18,0x00,0xbf,0xaf,0x21,0x88,0x80,0x00,\r
+0x42,0x46,0x00,0x0c,0x00,0x86,0x10,0x00,0x21,0x18,0x51,0x00,0x03,0x86,0x10,0x00,\r
+0x00,0x00,0x62,0x80,0x00,0x00,0x00,0x00,0x0a,0x00,0x50,0x10,0x21,0x10,0x60,0x00,\r
+0xff,0xff,0x63,0x24,0x2b,0x10,0x71,0x00,0xf9,0xff,0x40,0x10,0x21,0x10,0x00,0x00,\r
+0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,\r
+0x20,0x00,0xbd,0x27,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x21,0x30,0x80,0x00,0x0d,0x00,0xa0,0x10,\r
+0xff,0xff,0xa3,0x24,0x00,0x00,0x82,0x80,0x00,0x00,0x00,0x00,0x09,0x00,0x40,0x10,\r
+0x00,0x00,0x00,0x00,0xff,0xff,0x05,0x24,0xff,0xff,0x63,0x24,0x05,0x00,0x65,0x10,\r
+0x01,0x00,0xc6,0x24,0x00,0x00,0xc2,0x80,0x00,0x00,0x00,0x00,0xfa,0xff,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x23,0x10,0xc4,0x00,0x00,0x00,0x82,0x90,\r
+0x00,0x00,0x00,0x00,0x19,0x00,0x40,0x10,0x21,0x40,0x00,0x00,0x00,0x00,0xa9,0x80,\r
+0x00,0x00,0x00,0x00,0x17,0x00,0x20,0x11,0x21,0x30,0xa0,0x00,0x00,0x3e,0x02,0x00,\r
+0x03,0x3e,0x07,0x00,0x21,0x18,0x20,0x01,0x15,0x00,0xe3,0x10,0x00,0x00,0x00,0x00,\r
+0x01,0x00,0xc6,0x24,0x00,0x00,0xc2,0x90,0x00,0x00,0x00,0x00,0x00,0x1e,0x02,0x00,\r
+0x03,0x1e,0x03,0x00,0xf8,0xff,0x60,0x14,0x00,0x16,0x02,0x00,0x03,0x16,0x02,0x00,\r
+0x06,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x01,0x00,0x84,0x24,0x00,0x00,0x82,0x90,\r
+0x00,0x00,0x00,0x00,0xeb,0xff,0x40,0x14,0x01,0x00,0x08,0x25,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x00,0x01,0x00,0x00,0xa2,0x90,0x8d,0x46,0x00,0x08,0x00,0x16,0x02,0x00,\r
+0x00,0x00,0xc2,0x90,0x8d,0x46,0x00,0x08,0x00,0x16,0x02,0x00,0x00,0x00,0x87,0x90,\r
+0x00,0x00,0x00,0x00,0x14,0x00,0xe0,0x10,0x21,0x10,0x80,0x00,0x00,0x00,0xa4,0x90,\r
+0x00,0x00,0x00,0x00,0x00,0x1e,0x04,0x00,0x03,0x1e,0x03,0x00,0x09,0x00,0x60,0x10,\r
+0x21,0x30,0xa0,0x00,0x00,0x3e,0x07,0x00,0x03,0x3e,0x07,0x00,0x0b,0x00,0xe3,0x10,\r
+0x01,0x00,0xc6,0x24,0x00,0x00,0xc3,0x80,0x00,0x00,0x00,0x00,0xfb,0xff,0x60,0x14,\r
+0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24,0x00,0x00,0x47,0x90,0x00,0x00,0x00,0x00,\r
+0xf0,0xff,0xe0,0x14,0x00,0x00,0x00,0x00,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0xe0,0xff,0xbd,0x27,0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,\r
+0x18,0x00,0xbf,0xaf,0x21,0x80,0x80,0x00,0x1d,0x00,0x80,0x10,0x21,0x88,0xa0,0x00,\r
+0x79,0x46,0x00,0x0c,0x21,0x20,0x00,0x02,0x21,0x80,0x02,0x02,0x00,0x00,0x02,0x82,\r
+0x21,0x28,0x20,0x02,0x21,0x20,0x00,0x02,0x22,0x00,0x40,0x10,0x21,0x18,0x00,0x00,\r
+0x9d,0x46,0x00,0x0c,0x00,0x00,0x00,0x00,0x05,0x00,0x40,0x10,0x21,0x18,0x40,0x00,\r
+0x00,0x00,0x42,0x80,0x00,0x00,0x00,0x00,0x0a,0x00,0x40,0x14,0x00,0x00,0x00,0x00,\r
+0x02,0x80,0x02,0x3c,0x68,0xa4,0x43,0xac,0x21,0x18,0x00,0x02,0x18,0x00,0xbf,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x60,0x00,0x08,0x00,0xe0,0x03,\r
+0x20,0x00,0xbd,0x27,0x00,0x00,0x60,0xa0,0xce,0x46,0x00,0x08,0x01,0x00,0x63,0x24,\r
+0x02,0x80,0x02,0x3c,0x68,0xa4,0x50,0x8c,0x00,0x00,0x00,0x00,0xf3,0xff,0x00,0x12,\r
+0x21,0x18,0x00,0x00,0x79,0x46,0x00,0x0c,0x21,0x20,0x00,0x02,0x21,0x80,0x02,0x02,\r
+0x00,0x00,0x02,0x82,0x21,0x28,0x20,0x02,0x21,0x20,0x00,0x02,0xe0,0xff,0x40,0x14,\r
+0x21,0x18,0x00,0x00,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x02,0x80,0x02,0x3c,0x68,0xa4,0x40,0xac,0x20,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03,\r
+0x21,0x10,0x60,0x00,0xe0,0xff,0xbd,0x27,0x18,0x00,0xb2,0xaf,0x14,0x00,0xb1,0xaf,\r
+0x1c,0x00,0xbf,0xaf,0x10,0x00,0xb0,0xaf,0x00,0x00,0x90,0x8c,0x21,0x90,0x80,0x00,\r
+0x21,0x88,0xa0,0x00,0x21,0x18,0x00,0x00,0x0f,0x00,0x00,0x12,0x21,0x20,0x00,0x02,\r
+0x79,0x46,0x00,0x0c,0x00,0x00,0x00,0x00,0x21,0x80,0x02,0x02,0x00,0x00,0x02,0x82,\r
+0x21,0x28,0x20,0x02,0x21,0x20,0x00,0x02,0x07,0x00,0x40,0x10,0x21,0x18,0x00,0x00,\r
+0x9d,0x46,0x00,0x0c,0x00,0x00,0x00,0x00,0x21,0x18,0x40,0x00,0x09,0x00,0x40,0x14,\r
+0x00,0x00,0x42,0xae,0x21,0x18,0x00,0x02,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x60,0x00,0x08,0x00,0xe0,0x03,\r
+0x20,0x00,0xbd,0x27,0x00,0x00,0x42,0x80,0x00,0x00,0x00,0x00,0xf5,0xff,0x40,0x10,\r
+0x01,0x00,0x64,0x24,0x00,0x00,0x60,0xa0,0x07,0x47,0x00,0x08,0x00,0x00,0x44,0xae,\r
+0xd8,0xff,0xbd,0x27,0x14,0x00,0xb1,0xaf,0x21,0x88,0x80,0x00,0x21,0x20,0xa0,0x00,\r
+0x1c,0x00,0xb3,0xaf,0x18,0x00,0xb2,0xaf,0x20,0x00,0xbf,0xaf,0x10,0x00,0xb0,0xaf,\r
+0x42,0x46,0x00,0x0c,0x21,0x98,0xa0,0x00,0x21,0x90,0x40,0x00,0x08,0x00,0x40,0x16,\r
+0x21,0x10,0x20,0x02,0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27,\r
+0x42,0x46,0x00,0x0c,0x21,0x20,0x20,0x02,0x21,0x80,0x40,0x00,0x2a,0x10,0x52,0x00,\r
+0x0a,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x21,0x20,0x20,0x02,0x21,0x28,0x60,0x02,\r
+0x21,0x30,0x40,0x02,0x95,0x45,0x00,0x0c,0xff,0xff,0x10,0x26,0x0b,0x00,0x40,0x10,\r
+0x2a,0x18,0x12,0x02,0xf8,0xff,0x60,0x10,0x01,0x00,0x31,0x26,0x20,0x00,0xbf,0x8f,\r
+0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27,0x23,0x47,0x00,0x08,\r
+0x21,0x10,0x20,0x02,0x01,0x80,0x02,0x3c,0x0c,0x1d,0x43,0x24,0x25,0xb0,0x02,0x3c,\r
+0xc0,0xff,0xbd,0x27,0x18,0x03,0x42,0x34,0x38,0x00,0xbe,0xaf,0x34,0x00,0xb7,0xaf,\r
+0x30,0x00,0xb6,0xaf,0x2c,0x00,0xb5,0xaf,0x3c,0x00,0xbf,0xaf,0x28,0x00,0xb4,0xaf,\r
+0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,\r
+0x00,0x00,0x43,0xac,0x21,0xf0,0x00,0x00,0x02,0x80,0x15,0x3c,0x02,0x80,0x17,0x3c,\r
+0x02,0x80,0x16,0x3c,0x25,0xb0,0x05,0x3c,0x01,0x80,0x04,0x3c,0x0c,0x1d,0x82,0x24,\r
+0x18,0x03,0xa3,0x34,0x00,0x00,0x62,0xac,0xa0,0x02,0xa8,0x34,0x68,0x15,0xae,0x26,\r
+0x00,0x00,0x04,0x8d,0xe4,0x63,0xc3,0x95,0xff,0x0f,0x02,0x3c,0xff,0xff,0x47,0x34,\r
+0x24,0x98,0x87,0x00,0x01,0x00,0x06,0x3c,0x01,0x00,0x63,0x24,0x2b,0x10,0xd3,0x00,\r
+0x07,0x00,0x40,0x10,0xe4,0x63,0xc3,0xa5,0xa4,0x02,0xa2,0x34,0x00,0x00,0x54,0x8c,\r
+0x00,0xb0,0x03,0x3c,0x25,0x98,0x63,0x02,0x00,0x00,0x74,0xae,0x00,0x00,0x00,0xad,\r
+0xb0,0x02,0xa4,0x34,0x00,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,0x24,0x98,0x47,0x00,\r
+0x2b,0x18,0xd3,0x00,0x08,0x00,0x60,0x10,0x25,0xb0,0x02,0x3c,0x00,0xb0,0x02,0x3c,\r
+0x25,0x98,0x62,0x02,0x00,0x00,0x74,0x8e,0xb4,0x02,0xa2,0x34,0x00,0x00,0x54,0xac,\r
+0x00,0x00,0x80,0xac,0x25,0xb0,0x02,0x3c,0xc0,0x02,0x4a,0x34,0x00,0x00,0x53,0x8d,\r
+0xff,0x00,0x05,0x3c,0xff,0xff,0xa2,0x34,0x2b,0x10,0x53,0x00,0x4f,0x00,0x40,0x10,\r
+0x00,0x00,0x00,0x00,0x25,0xb0,0x11,0x3c,0x00,0x00,0x23,0x8e,0x00,0xff,0x09,0x3c,\r
+0xff,0x00,0x22,0x35,0x00,0xfd,0x08,0x3c,0x01,0x00,0x66,0x24,0x24,0x38,0x62,0x02,\r
+0xac,0x02,0x24,0x36,0xbc,0x02,0x23,0x36,0x05,0x00,0x02,0x35,0x00,0x00,0x86,0xac,\r
+0x2b,0x10,0x47,0x00,0x00,0x00,0x73,0xac,0x00,0x00,0x86,0x8c,0xb7,0x00,0x40,0x14,\r
+0xa6,0x00,0x02,0x35,0x04,0x00,0x02,0x35,0x2b,0x10,0xe2,0x00,0x39,0x00,0x40,0x10,\r
+0x25,0xb0,0x02,0x3c,0x00,0xf8,0x03,0x3c,0x15,0x00,0x62,0x34,0x1d,0x04,0xe2,0x10,\r
+0x00,0x00,0x00,0x00,0x2b,0x10,0x47,0x00,0x1e,0x01,0x40,0x14,0x00,0xf9,0x04,0x3c,\r
+0x00,0xf1,0x04,0x3c,0x20,0x04,0xe4,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x87,0x00,\r
+0x82,0x01,0x40,0x14,0x10,0x00,0x62,0x34,0x00,0xf0,0x03,0x3c,0x01,0x00,0x62,0x34,\r
+0x5b,0x04,0xe2,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x47,0x00,0x59,0x02,0x40,0x14,\r
+0x03,0x00,0x62,0x34,0x00,0xd0,0x02,0x3c,0x36,0x04,0xe2,0x10,0x2b,0x10,0x47,0x00,\r
+0x71,0x03,0x40,0x14,0x00,0xe0,0x02,0x3c,0x00,0xc0,0x02,0x3c,0x4b,0x05,0xe2,0x10,\r
+0x00,0x00,0x00,0x00,0x00,0xf0,0x02,0x3c,0x24,0x38,0x62,0x02,0x18,0x00,0xe2,0x10,\r
+0x0f,0x00,0x03,0x3c,0x00,0x70,0x09,0x3c,0x24,0x10,0x69,0x02,0x02,0x25,0x13,0x00,\r
+0xff,0xff,0x63,0x34,0x00,0x50,0x08,0x3c,0x24,0x28,0x63,0x02,0x02,0x57,0x02,0x00,\r
+0xff,0x00,0x84,0x30,0xa7,0x01,0xe8,0x10,0xff,0x00,0x66,0x32,0x2b,0x10,0x07,0x01,\r
+0x9b,0x01,0x40,0x14,0x00,0x80,0x02,0x3c,0x00,0x20,0x02,0x3c,0xb5,0x03,0xe2,0x10,\r
+0x2b,0x10,0x47,0x00,0xa3,0x02,0x40,0x14,0x00,0x30,0x02,0x3c,0xb2,0x03,0xe0,0x10,\r
+0x80,0x10,0x04,0x00,0x00,0x10,0x02,0x3c,0xaf,0x03,0xe2,0x10,0x80,0x10,0x04,0x00,\r
+0x25,0xb0,0x02,0x3c,0xc0,0x02,0x42,0x34,0x00,0x00,0x40,0xac,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x25,0xb0,0x07,0x3c,\r
+0x64,0x03,0xe2,0x34,0x00,0x00,0x43,0x90,0x00,0x00,0x00,0x00,0x28,0x7e,0xe3,0xa2,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x28,0x7e,0xe2,0x92,\r
+0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30,0x55,0x00,0x40,0x10,0x68,0x15,0xa5,0x26,\r
+0x68,0x15,0xa6,0x26,0x00,0x40,0xc4,0x8c,0xe4,0x42,0xc5,0x8c,0xf0,0xff,0x02,0x24,\r
+0x24,0x20,0x82,0x00,0x00,0x50,0x03,0x3c,0x01,0x00,0x84,0x34,0x24,0x28,0xa3,0x00,\r
+0x00,0x10,0x02,0x3c,0x00,0x40,0xc4,0xac,0x95,0x03,0xa2,0x10,0xd6,0x42,0xc0,0xa0,\r
+0x28,0x7e,0xe2,0x92,0x00,0x00,0x00,0x00,0x02,0x00,0x42,0x30,0x40,0x00,0x40,0x10,\r
+0x68,0x15,0xa2,0x26,0x00,0x40,0x43,0x8c,0x0f,0xff,0x04,0x24,0x24,0x18,0x64,0x00,\r
+0x10,0x00,0x63,0x34,0x00,0x40,0x43,0xac,0x28,0x7e,0xe2,0x92,0x00,0x00,0x00,0x00,\r
+0x04,0x00,0x42,0x30,0x32,0x00,0x40,0x10,0x68,0x15,0xa2,0x26,0x00,0x40,0x43,0x8c,\r
+0xff,0xf0,0x04,0x24,0x24,0x18,0x64,0x00,0x00,0x01,0x63,0x34,0x25,0xb0,0x05,0x3c,\r
+0x00,0x40,0x43,0xac,0x4c,0x00,0xa3,0x34,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,\r
+0x03,0x00,0x42,0x30,0x06,0x00,0x40,0x14,0x68,0x15,0xa4,0x26,0x00,0x40,0x83,0x8c,\r
+0xff,0xff,0x02,0x3c,0xff,0x0f,0x42,0x34,0x24,0x18,0x62,0x00,0x00,0x40,0x83,0xac,\r
+0x60,0x7b,0xc4,0x8e,0x01,0x80,0x06,0x3c,0x0c,0x1e,0xc2,0x24,0x18,0x03,0xa3,0x34,\r
+0x60,0x7b,0xc6,0x26,0x00,0x00,0x62,0xac,0x11,0x00,0x86,0x10,0x02,0x80,0x02,0x3c,\r
+0xbf,0x00,0xb2,0x34,0x68,0x15,0x51,0x24,0x21,0x80,0xc0,0x00,0x21,0xf0,0x00,0x00,\r
+0x00,0x00,0x42,0x92,0x00,0x00,0x00,0x00,0x04,0x00,0x42,0x2c,0x09,0x00,0x40,0x10,\r
+0x02,0x80,0x02,0x3c,0xf8,0x65,0x24,0x8e,0x30,0x08,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x60,0x7b,0xc2,0x8e,0x00,0x00,0x00,0x00,0xf5,0xff,0x50,0x14,0x00,0x00,0x00,0x00,\r
+0x02,0x80,0x02,0x3c,0x08,0x08,0x44,0x24,0x21,0x28,0x00,0x00,0x21,0x30,0x00,0x00,\r
+0xfe,0x1f,0x00,0x0c,0x21,0x38,0x00,0x00,0x58,0x47,0x00,0x08,0x25,0xb0,0x05,0x3c,\r
+0x00,0x40,0x43,0x8c,0xff,0xf0,0x04,0x24,0x01,0x48,0x00,0x08,0x24,0x18,0x64,0x00,\r
+0x00,0x40,0x43,0x8c,0x0f,0xff,0x04,0x24,0xf7,0x47,0x00,0x08,0x24,0x18,0x64,0x00,\r
+0x00,0x40,0xa4,0x8c,0xe4,0x42,0xa6,0x8c,0xf0,0xff,0x02,0x24,0x00,0x90,0x03,0x3c,\r
+0x24,0x20,0x82,0x00,0x24,0x18,0xc3,0x00,0x00,0x10,0x02,0x3c,0xb0,0xff,0x62,0x14,\r
+0x00,0x40,0xa4,0xac,0x50,0x0c,0xe3,0x34,0xff,0xbf,0x02,0x3c,0x00,0x00,0x64,0x90,\r
+0xff,0xff,0x42,0x34,0x24,0x10,0xc2,0x00,0x00,0x80,0x03,0x3c,0x25,0x10,0x43,0x00,\r
+0xe4,0x42,0xa2,0xac,0xee,0x47,0x00,0x08,0xd7,0x42,0xa4,0xa0,0x55,0x03,0xe2,0x10,\r
+0x00,0x00,0x00,0x00,0x2b,0x10,0x47,0x00,0x18,0x00,0x40,0x14,0x00,0xfe,0x03,0x3c,\r
+0x20,0x00,0x02,0x35,0x53,0x03,0xe2,0x10,0x2b,0x10,0x47,0x00,0x85,0x00,0x40,0x14,\r
+0xa0,0x00,0x02,0x35,0x15,0x00,0x02,0x35,0x9d,0x03,0xe2,0x10,0x2b,0x10,0x47,0x00,\r
+0x17,0x01,0x40,0x14,0x17,0x00,0x02,0x35,0x08,0x00,0x02,0x35,0x16,0x04,0xe2,0x10,\r
+0x64,0x03,0x23,0x36,0x2b,0x10,0x47,0x00,0x24,0x02,0x40,0x14,0x09,0x00,0x02,0x35,\r
+0x07,0x00,0x02,0x35,0x53,0xff,0xe2,0x14,0x00,0x00,0x00,0x00,0xd9,0x58,0x00,0x0c,\r
+0x21,0x20,0x60,0x02,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x18,0x00,0x62,0x34,\r
+0x42,0x03,0xe2,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x47,0x00,0x95,0x00,0x40,0x14,\r
+0x07,0x00,0x22,0x35,0xad,0x00,0x02,0x35,0x8c,0x03,0xe2,0x10,0x00,0x00,0x00,0x00,\r
+0x2b,0x10,0x47,0x00,0xd2,0x00,0x40,0x14,0x10,0x00,0x62,0x34,0xaa,0x00,0x02,0x35,\r
+0x75,0x04,0xe2,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x47,0x00,0x6e,0x01,0x40,0x14,\r
+0xab,0x00,0x02,0x35,0xa7,0x00,0x02,0x35,0x3b,0xff,0xe2,0x14,0x00,0xf0,0x02,0x3c,\r
+0x00,0xff,0x62,0x32,0x02,0xa2,0x02,0x00,0x02,0x1c,0x13,0x00,0x01,0x00,0x02,0x24,\r
+0xbd,0x05,0x82,0x12,0xff,0x00,0x65,0x30,0x02,0x00,0x02,0x24,0xae,0x05,0x82,0x12,\r
+0xc0,0x10,0x05,0x00,0x03,0x00,0x02,0x24,0x9e,0x05,0x82,0x12,0xc0,0x10,0x05,0x00,\r
+0x04,0x00,0x02,0x24,0xc5,0x05,0x82,0x12,0xc0,0x10,0x05,0x00,0x08,0x00,0x02,0x24,\r
+0x29,0x06,0x82,0x12,0xc0,0x10,0x05,0x00,0x09,0x00,0x02,0x24,0x19,0x06,0x82,0x12,\r
+0xc0,0x10,0x05,0x00,0x0a,0x00,0x02,0x24,0x09,0x06,0x82,0x12,0xc0,0x10,0x05,0x00,\r
+0x0b,0x00,0x02,0x24,0xf9,0x05,0x82,0x12,0xc0,0x10,0x05,0x00,0x0c,0x00,0x02,0x24,\r
+0xe9,0x05,0x82,0x12,0xc0,0x10,0x05,0x00,0x0d,0x00,0x02,0x24,0xd9,0x05,0x82,0x12,\r
+0xc0,0x10,0x05,0x00,0x0e,0x00,0x02,0x24,0xc9,0x05,0x82,0x12,0xc0,0x10,0x05,0x00,\r
+0x0f,0x00,0x02,0x24,0xb9,0x05,0x82,0x12,0xc0,0x10,0x05,0x00,0x10,0x00,0x02,0x24,\r
+0x2b,0xff,0x82,0x16,0xc0,0x10,0x05,0x00,0x21,0x10,0x45,0x00,0x80,0x10,0x02,0x00,\r
+0x21,0x10,0x45,0x00,0x68,0x15,0xa3,0x26,0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,\r
+0x58,0x51,0x44,0x94,0x54,0x51,0x45,0x94,0x25,0xb0,0x06,0x3c,0x00,0x24,0x04,0x00,\r
+0xc4,0x02,0xc3,0x34,0x21,0x28,0xa4,0x00,0x00,0x00,0x65,0xac,0x64,0x51,0x47,0x8c,\r
+0x60,0x51,0x43,0x8c,0x5c,0x51,0x44,0x94,0xc8,0x02,0xc6,0x34,0x21,0x18,0x67,0x00,\r
+0x00,0x1c,0x03,0x00,0x21,0x20,0x83,0x00,0x00,0x00,0xc4,0xac,0xcf,0x47,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0x06,0x00,0x82,0x34,0xfe,0x02,0xe2,0x10,0x00,0x00,0x00,0x00,\r
+0x2b,0x10,0x47,0x00,0x52,0x00,0x40,0x14,0x01,0x00,0x82,0x34,0x3b,0x03,0xe2,0x10,\r
+0x00,0x00,0x00,0x00,0x2b,0x10,0x47,0x00,0x6a,0x01,0x40,0x14,0x03,0x00,0x82,0x34,\r
+0x17,0x00,0x62,0x34,0xaa,0x04,0xe2,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0xe2,0x00,\r
+0x7d,0x04,0x40,0x14,0x00,0x00,0x00,0x00,0x18,0x00,0x62,0x34,0x40,0x05,0xe2,0x10,\r
+0x00,0x00,0x00,0x00,0xe3,0xfe,0xe4,0x14,0x68,0x15,0xa2,0x26,0x64,0x64,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0x0b,0x03,0xe2,0x10,0x2b,0x10,0x47,0x00,0xf8,0x00,0x40,0x14,\r
+0xa3,0x00,0x02,0x35,0x22,0x00,0x02,0x35,0x8b,0x03,0xe2,0x10,0x2b,0x10,0xe2,0x00,\r
+0xbb,0x01,0x40,0x14,0x68,0x15,0xa4,0x26,0x28,0x00,0x02,0x35,0xe7,0x04,0xe2,0x10,\r
+0x0f,0x00,0x10,0x3c,0x29,0x00,0x02,0x35,0xcf,0xfe,0xe2,0x14,0x00,0xf0,0x02,0x3c,\r
+0x02,0x1c,0x13,0x00,0x00,0x1f,0x62,0x32,0x68,0x15,0xb0,0x26,0x02,0xa2,0x02,0x00,\r
+0x3f,0x00,0x66,0x30,0xc1,0x42,0x06,0xa2,0xbc,0x42,0x14,0xa2,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x3b,0x15,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x21,0xa0,0x40,0x00,0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34,\r
+0x00,0x00,0x54,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,\r
+0x03,0x40,0x02,0x92,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24,0xce,0x47,0x00,0x08,\r
+0x03,0x40,0x02,0xa2,0xf5,0x02,0xe2,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x47,0x00,\r
+0x4d,0x00,0x40,0x14,0x0e,0x00,0x22,0x35,0x1a,0x00,0x62,0x34,0x43,0x03,0xe2,0x10,\r
+0x2b,0x10,0xe2,0x00,0x38,0x01,0x40,0x14,0x00,0x00,0x00,0x00,0xf0,0x04,0xe9,0x10,\r
+0x00,0x00,0x00,0x00,0x01,0x00,0x22,0x35,0xa6,0xfe,0xe2,0x14,0x00,0x00,0x00,0x00,\r
+0x0e,0x4f,0x00,0x0c,0x01,0x00,0x04,0x24,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x00,0xfb,0x03,0x3c,0x02,0x00,0x62,0x34,0x14,0x03,0xe2,0x10,0x2b,0x10,0x47,0x00,\r
+0xd6,0x00,0x40,0x14,0x01,0x00,0x02,0x35,0x20,0x00,0x82,0x34,0xd2,0x03,0xe2,0x10,\r
+0x2b,0x10,0x47,0x00,0x25,0x02,0x40,0x14,0x07,0x00,0x82,0x34,0x95,0xfe,0xe2,0x14,\r
+0x68,0x15,0xa2,0x26,0x48,0x64,0x44,0x90,0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,\r
+0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0xea,0x02,0xe2,0x10,\r
+0x2b,0x10,0x47,0x00,0xef,0x00,0x40,0x14,0x12,0x00,0x62,0x34,0x02,0x00,0x82,0x34,\r
+0xa3,0xfe,0xe2,0x10,0x2b,0x10,0xe2,0x00,0xa4,0x01,0x40,0x14,0x00,0xff,0x62,0x32,\r
+0x03,0x00,0x82,0x34,0xd6,0x04,0xe2,0x10,0x00,0x00,0x00,0x00,0x04,0x00,0x82,0x34,\r
+0x81,0xfe,0xe2,0x14,0x00,0xf0,0x02,0x3c,0x02,0x14,0x13,0x00,0xff,0x00,0x54,0x30,\r
+0x00,0xff,0x63,0x32,0x07,0x00,0x82,0x2e,0x95,0xfe,0x40,0x10,0x02,0xf2,0x03,0x00,\r
+0x02,0x80,0x04,0x3c,0x84,0x9f,0x83,0x24,0x80,0x10,0x14,0x00,0x21,0x10,0x43,0x00,\r
+0x00,0x00,0x44,0x8c,0x00,0x00,0x00,0x00,0x08,0x00,0x80,0x00,0x00,0x00,0x00,0x00,\r
+0xec,0x02,0xe2,0x10,0x2b,0x10,0x47,0x00,0x12,0x01,0x40,0x14,0x11,0x00,0x62,0x34,\r
+0xae,0x00,0x02,0x35,0x9e,0x04,0xe2,0x10,0x02,0x24,0x13,0x00,0xaf,0x00,0x02,0x35,\r
+0x68,0xfe,0xe2,0x14,0x00,0x00,0x00,0x00,0x76,0x50,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x0d,0x03,0xe2,0x10,0x2b,0x10,0x47,0x00,\r
+0xfa,0x00,0x40,0x14,0x0f,0x00,0x22,0x35,0x0c,0x00,0x22,0x35,0xf6,0x03,0xe2,0x10,\r
+0x68,0x15,0xa2,0x26,0x0d,0x00,0x22,0x35,0x5b,0xfe,0xe2,0x14,0x00,0xf0,0x02,0x3c,\r
+0x68,0x15,0xa3,0x26,0x01,0x00,0x02,0x24,0xce,0x47,0x00,0x08,0x46,0x64,0x62,0xa4,\r
+0x02,0x03,0xe2,0x10,0x2b,0x10,0x47,0x00,0x15,0x01,0x40,0x14,0x00,0xa0,0x02,0x3c,\r
+0x00,0x60,0x02,0x3c,0x04,0x00,0xe2,0x10,0x80,0x10,0x04,0x00,0x69,0xfe,0xe9,0x14,\r
+0x25,0xb0,0x02,0x3c,0x80,0x10,0x04,0x00,0x21,0x10,0x44,0x00,0x68,0x15,0xa3,0x26,\r
+0x21,0x10,0x43,0x00,0x21,0x10,0x4a,0x00,0xce,0x47,0x00,0x08,0xc1,0x43,0x46,0xa0,\r
+0x07,0x03,0xe2,0x10,0x2b,0x10,0xe2,0x00,0x37,0x01,0x40,0x14,0x00,0xff,0x62,0x32,\r
+0x18,0x00,0x02,0x35,0xe3,0x03,0xe2,0x10,0x19,0x00,0x02,0x35,0x3e,0xfe,0xe2,0x14,\r
+0x00,0xf0,0x02,0x3c,0x25,0xb0,0x03,0x3c,0xc0,0x02,0x62,0x34,0x00,0x00,0x40,0xac,\r
+0x94,0x0e,0x64,0x34,0x9c,0x0e,0x62,0x34,0xa4,0x0e,0x65,0x34,0xac,0x0e,0x66,0x34,\r
+0x00,0x00,0x89,0x8c,0x68,0x15,0xaf,0x26,0x00,0x00,0x4b,0x8c,0x00,0x00,0xac,0x8c,\r
+0x00,0x00,0xc4,0x8c,0xb4,0x0e,0x62,0x34,0x0c,0x40,0xe5,0x8d,0x10,0x40,0xe6,0x8d,\r
+0x00,0x00,0x4a,0x8c,0xff,0x03,0x07,0x3c,0x00,0xfc,0x08,0x24,0xbc,0x0e,0x62,0x34,\r
+0x24,0x48,0x27,0x01,0x24,0x20,0x87,0x00,0x00,0x00,0x4d,0x8c,0x24,0x30,0xc8,0x00,\r
+0x02,0x4c,0x09,0x00,0x24,0x28,0xa8,0x00,0x02,0x24,0x04,0x00,0xcc,0x0e,0x68,0x34,\r
+0xf0,0xff,0x02,0x3c,0xc4,0x0e,0x63,0x34,0xff,0x03,0x42,0x34,0x25,0x28,0xa9,0x00,\r
+0x25,0x30,0xc4,0x00,0x00,0x00,0x69,0x8c,0x08,0x40,0xe4,0x8d,0x00,0x00,0x0e,0x8d,\r
+0x24,0x58,0x67,0x01,0x24,0x50,0x47,0x01,0x24,0x30,0xc2,0x00,0x24,0x28,0xa2,0x00,\r
+0x82,0x59,0x0b,0x00,0x82,0x51,0x0a,0x00,0x0f,0xc0,0x03,0x3c,0xff,0x9f,0x02,0x3c,\r
+0xff,0xff,0x63,0x34,0xff,0xff,0x42,0x34,0x25,0x28,0xab,0x00,0x25,0x30,0xca,0x00,\r
+0x24,0x60,0x87,0x01,0x24,0x68,0xa7,0x01,0xff,0x00,0x08,0x3c,0x24,0x20,0x82,0x00,\r
+0x24,0x30,0xc3,0x00,0x24,0x28,0xa3,0x00,0x24,0x70,0xc7,0x01,0x00,0x61,0x0c,0x00,\r
+0x00,0x69,0x0d,0x00,0x24,0x48,0x27,0x01,0x00,0xff,0x03,0x35,0x00,0x20,0x02,0x3c,\r
+0x25,0x20,0x82,0x00,0x25,0x28,0xac,0x00,0x25,0x30,0xcd,0x00,0x02,0x4c,0x09,0x00,\r
+0x02,0x74,0x0e,0x00,0x24,0x18,0x63,0x02,0x08,0x40,0xe4,0xad,0x0c,0x40,0xe5,0xad,\r
+0x10,0x40,0xe6,0xad,0x14,0x40,0xe9,0xa5,0x4d,0x04,0x60,0x10,0x16,0x40,0xee,0xa5,\r
+0x24,0x10,0x68,0x02,0x02,0x14,0x02,0x00,0x02,0x1a,0x13,0x00,0xc7,0x42,0xe2,0xa1,\r
+0xc3,0x42,0xe3,0xa1,0x68,0x15,0xa2,0x26,0xc3,0x42,0x44,0x90,0x25,0xb0,0x03,0x3c,\r
+0x61,0x0c,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,\r
+0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,\r
+0xfd,0x55,0x00,0x0c,0x10,0x00,0xa4,0x27,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x92,0x02,0xe2,0x10,0x2b,0x10,0x47,0x00,0xda,0x00,0x40,0x14,0xa4,0x00,0x02,0x35,\r
+0xa1,0x00,0x02,0x35,0x26,0x03,0xe2,0x10,0x02,0x24,0x13,0x00,0xa2,0x00,0x02,0x35,\r
+0xd8,0xfd,0xe2,0x14,0xc4,0x02,0x22,0x36,0x00,0xff,0xa3,0x34,0x24,0x18,0x63,0x02,\r
+0x00,0x00,0x45,0x8c,0x02,0xf2,0x03,0x00,0xb2,0x51,0x00,0x0c,0x21,0x20,0xc0,0x03,\r
+0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x11,0x04,0xe2,0x10,0x00,0x00,0x00,0x00,\r
+0xac,0x00,0x02,0x35,0xcb,0xfd,0xe2,0x14,0x00,0x00,0x00,0x00,0x8b,0x4f,0x00,0x0c,\r
+0x21,0x20,0x60,0x02,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x46,0x03,0xe2,0x10,\r
+0x00,0x00,0x00,0x00,0x2b,0x10,0x47,0x00,0x3e,0x01,0x40,0x14,0x02,0x00,0x02,0x35,\r
+0x03,0x00,0x62,0x34,0xfb,0x03,0xe2,0x10,0x68,0x15,0xa3,0x26,0xbe,0xfd,0xe8,0x14,\r
+0x00,0xf0,0x02,0x3c,0xcc,0x58,0x00,0x0c,0x21,0x20,0x60,0x02,0x00,0xff,0x63,0x32,\r
+0x00,0xcc,0x02,0x34,0xd3,0xfd,0x62,0x14,0x25,0xb0,0x02,0x3c,0x68,0x15,0xa2,0x26,\r
+0xe4,0x42,0x43,0x8c,0x00,0x10,0x04,0x3c,0x25,0x18,0x64,0x00,0xce,0x47,0x00,0x08,\r
+0xe4,0x42,0x43,0xac,0x04,0x03,0xe2,0x10,0x2b,0x10,0xe2,0x00,0x04,0x01,0x40,0x14,\r
+0x24,0x10,0x65,0x02,0x08,0x00,0x62,0x34,0x7b,0x03,0xe2,0x10,0x20,0x00,0x62,0x34,\r
+0xa8,0xfd,0xe2,0x14,0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x07,0x52,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0xcf,0x47,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0x0c,0x03,0xe2,0x10,0x2b,0x10,0xe2,0x00,0x9e,0x00,0x40,0x14,\r
+0x00,0xff,0x62,0x32,0x13,0x00,0x62,0x34,0x75,0x03,0xe2,0x10,0x14,0x00,0x62,0x34,\r
+0x94,0xfd,0xe2,0x14,0x00,0x00,0x00,0x00,0x3a,0x0c,0x00,0x0c,0xfd,0x00,0x04,0x24,\r
+0x25,0xb0,0x03,0x3c,0x10,0x10,0x02,0x3c,0xa0,0x00,0x64,0x34,0x10,0x10,0x42,0x34,\r
+0x00,0x00,0x82,0xac,0x00,0xc0,0x02,0x3c,0xa8,0x00,0x65,0x34,0x00,0xa1,0x42,0x34,\r
+0xa4,0x00,0x63,0x34,0x00,0x00,0x60,0xac,0x00,0x00,0xa2,0xac,0xcf,0x47,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0xd2,0x02,0xe2,0x10,0xc4,0x02,0x23,0x36,0x2b,0x10,0xe2,0x00,\r
+0x09,0x01,0x40,0x14,0x68,0x15,0xa2,0x26,0x04,0x00,0x82,0x34,0xaa,0x03,0xe2,0x10,\r
+0x68,0x15,0xa2,0x26,0x05,0x00,0x82,0x34,0x7a,0xfd,0xe2,0x14,0x68,0x15,0xa2,0x26,\r
+0x50,0x64,0x44,0x90,0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,\r
+0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x68,0x15,0xa2,0x26,0x76,0x4b,0x44,0x90,\r
+0xc4,0x02,0x23,0x36,0x00,0x00,0x64,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x00,0x60,0x81,0x40,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0xf2,0x02,0xe2,0x10,\r
+0x10,0x00,0x22,0x35,0x64,0xfd,0xe2,0x14,0x00,0xf0,0x02,0x3c,0x00,0xff,0x63,0x32,\r
+0x00,0xff,0x02,0x34,0xbe,0x03,0x62,0x10,0x68,0x15,0xa2,0x26,0xce,0x47,0x00,0x08,\r
+0xec,0x65,0x40,0xac,0x5c,0x03,0xe2,0x10,0x00,0x00,0x00,0x00,0x12,0x00,0x62,0x34,\r
+0x58,0xfd,0xe2,0x14,0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0xff,0x00,0x02,0x3c,0x00,0xff,0x42,0x34,\r
+0x24,0x10,0x62,0x02,0x02,0xf2,0x02,0x00,0x68,0x15,0xa3,0x26,0x77,0x4b,0x7e,0xa0,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0xcf,0x47,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0x0f,0x01,0xe2,0x10,0x00,0x40,0x02,0x3c,0x61,0xfd,0xe2,0x14,\r
+0x25,0xb0,0x02,0x3c,0x80,0x10,0x04,0x00,0x21,0x10,0x44,0x00,0x68,0x15,0xa3,0x26,\r
+0x21,0x10,0x43,0x00,0x21,0x10,0x4a,0x00,0xce,0x47,0x00,0x08,0xc1,0x43,0x46,0xa0,\r
+0xc4,0x02,0xe2,0x10,0x2b,0x10,0x47,0x00,0xd3,0x00,0x40,0x14,0x00,0xb0,0x02,0x3c,\r
+0x00,0x90,0x02,0x3c,0x53,0xfd,0xe2,0x14,0x25,0xb0,0x02,0x3c,0x68,0x15,0xa2,0x26,\r
+0x21,0x10,0x82,0x00,0xce,0x47,0x00,0x08,0x73,0x44,0x46,0xa0,0xe0,0x02,0xe2,0x10,\r
+0x25,0xb0,0x02,0x3c,0x14,0x00,0x02,0x35,0x2f,0xfd,0xe2,0x14,0x00,0xf0,0x02,0x3c,\r
+0xff,0x00,0x04,0x3c,0x00,0xff,0x82,0x34,0x24,0x10,0x62,0x02,0x45,0xfd,0x40,0x10,\r
+0x25,0xb0,0x02,0x3c,0x68,0x15,0xa3,0x26,0x04,0x43,0x66,0x90,0x24,0x20,0x64,0x02,\r
+0x00,0xff,0x65,0x32,0x02,0x24,0x04,0x00,0x02,0x2a,0x05,0x00,0x00,0x01,0xc6,0x34,\r
+0xfb,0xff,0x87,0x24,0xfb,0xff,0xa2,0x24,0x1f,0x43,0x62,0xa0,0x04,0x43,0x66,0xac,\r
+0x1d,0x43,0x67,0xa0,0x1c,0x43,0x64,0xa0,0xce,0x47,0x00,0x08,0x1e,0x43,0x65,0xa0,\r
+0x08,0x40,0x83,0x8c,0xff,0x9f,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,\r
+0x02,0x34,0x13,0x00,0x00,0x1f,0x65,0x32,0x00,0x20,0x02,0x3c,0x25,0x18,0x62,0x00,\r
+0x02,0xa2,0x05,0x00,0x3f,0x00,0xc6,0x30,0xc1,0x42,0x86,0xa0,0x08,0x40,0x83,0xac,\r
+0xce,0x47,0x00,0x08,0xbc,0x42,0x94,0xa0,0x02,0x22,0x02,0x00,0x03,0x00,0x83,0x2c,\r
+0x24,0xfd,0x60,0x10,0x25,0xb0,0x02,0x3c,0x68,0x15,0xa2,0x26,0xce,0x47,0x00,0x08,\r
+0x02,0x40,0x44,0xa0,0xae,0x02,0xe2,0x10,0xa5,0x00,0x02,0x35,0x01,0xfd,0xe2,0x14,\r
+0x00,0x00,0x00,0x00,0x02,0x24,0x13,0x00,0xec,0x51,0x00,0x0c,0xff,0x00,0x84,0x30,\r
+0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x02,0x22,0x02,0x00,0x21,0xa0,0x00,0x00,\r
+0xbf,0x4a,0x00,0x08,0x27,0xb0,0x07,0x3c,0x00,0x01,0x82,0x2e,0x0b,0x00,0x40,0x10,\r
+0x08,0x00,0xe7,0x24,0x00,0x00,0xe2,0x94,0x00,0x00,0x00,0x00,0xff,0xff,0x5e,0x30,\r
+0xff,0x00,0xc3,0x33,0xf8,0xff,0x64,0x14,0x01,0x00,0x94,0x26,0xff,0xff,0x94,0x26,\r
+0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34,0x00,0x00,0x54,0xa4,0xff,0x00,0x82,0x2e,\r
+0x03,0xfd,0x40,0x14,0x25,0xb0,0x02,0x3c,0x12,0x87,0x03,0x3c,0xc4,0x02,0x42,0x34,\r
+0x00,0x00,0x43,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x02,0xf2,0x02,0x00,\r
+0x80,0x00,0xc0,0x13,0x00,0x00,0x00,0x00,0x94,0x00,0x22,0x36,0x00,0x00,0x43,0x94,\r
+0xb0,0x03,0x25,0x36,0x68,0x15,0xa6,0x26,0xff,0xff,0x74,0x30,0x1b,0x00,0x9e,0x02,\r
+0x02,0x00,0xc0,0x17,0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00,0x00,0x00,0xb4,0xac,\r
+0xe6,0x4a,0xc7,0x94,0xff,0xff,0xc3,0x27,0x01,0x00,0x02,0x24,0xe3,0x4a,0xc2,0xa0,\r
+0x80,0xff,0x02,0x24,0x6a,0x03,0x2a,0x36,0x4f,0x00,0x2b,0x36,0x9e,0x00,0x2c,0x36,\r
+0x44,0x00,0x28,0x36,0xd8,0x00,0x2d,0x36,0x12,0xa0,0x00,0x00,0x80,0x22,0x14,0x00,\r
+0x00,0xf8,0x84,0x24,0x18,0x00,0xd4,0x03,0xff,0xff,0x7e,0x30,0x00,0x19,0x1e,0x00,\r
+0x25,0x18,0x62,0x00,0x26,0xb0,0x02,0x3c,0x7c,0x00,0x42,0x34,0x12,0x48,0x00,0x00,\r
+0x23,0x38,0xe9,0x00,0x00,0x00,0x47,0xa5,0x00,0x00,0xbe,0xac,0x00,0x00,0x63,0xa1,\r
+0x00,0x00,0xb4,0xac,0x00,0x00,0x94,0xa5,0x42,0xa1,0x04,0x00,0x00,0x00,0xb4,0xac,\r
+0x00,0x00,0x54,0xa4,0x00,0x00,0x03,0x95,0xff,0xfd,0x02,0x24,0xe8,0x4a,0xc7,0xa4,\r
+0x24,0x18,0x62,0x00,0x00,0x00,0x03,0xa5,0x00,0x00,0x02,0x95,0x00,0x00,0x00,0x00,\r
+0x00,0x02,0x42,0x34,0x00,0x00,0x02,0xa5,0x00,0x00,0xa3,0x91,0x00,0x00,0x00,0x00,\r
+0x40,0x00,0x63,0x34,0x00,0x00,0xa3,0xa1,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0xcc,0x02,0x23,0x36,0x00,0xff,0x64,0x32,0x02,0xf4,0x02,0x00,0x00,0x00,0x73,0xac,\r
+0x04,0x00,0xc0,0x13,0x02,0x9a,0x04,0x00,0x01,0x00,0x02,0x24,0x02,0x00,0xc2,0x13,\r
+0x01,0x00,0x04,0x24,0x21,0x20,0x00,0x00,0x2a,0x42,0x00,0x0c,0x0f,0x00,0x10,0x3c,\r
+0xff,0xff,0x05,0x36,0x95,0x44,0x00,0x0c,0x21,0x20,0x60,0x02,0xff,0xff,0x10,0x36,\r
+0x24,0xa0,0x50,0x00,0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34,0x00,0x00,0x54,0xac,\r
+0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0xd6,0xfe,0xe2,0x10,0x00,0x00,0x00,0x00,\r
+0x90,0xfc,0xe3,0x14,0x00,0xff,0xa2,0x34,0x24,0x10,0x62,0x02,0x02,0x9a,0x02,0x00,\r
+0xcc,0x02,0x23,0x36,0x00,0x00,0x73,0xac,0x21,0x20,0x71,0x02,0x00,0x00,0x94,0x8c,\r
+0xc4,0x02,0x22,0x36,0x00,0x00,0x54,0xac,0x00,0x00,0x94,0x8c,0xcf,0x47,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0x7c,0x02,0xe2,0x10,0x25,0xb0,0x02,0x3c,0x03,0x00,0x02,0x35,\r
+0x81,0xfc,0xe2,0x14,0x00,0xf0,0x02,0x3c,0x68,0x15,0xa4,0x26,0xe4,0x42,0x83,0x8c,\r
+0xff,0xef,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0xe4,0x42,0x83,0xac,\r
+0xce,0x47,0x00,0x08,0xe6,0x42,0x80,0xa0,0x5c,0x64,0x44,0x90,0xc4,0x02,0x23,0x36,\r
+0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x28,0x02,0xe3,0x10,\r
+0x01,0x00,0x62,0x34,0x70,0xfc,0xe2,0x14,0x00,0xf0,0x02,0x3c,0x68,0x15,0xa2,0x26,\r
+0xf8,0x63,0x43,0x8c,0xfd,0xff,0x04,0x24,0x24,0x18,0x64,0x00,0x01,0x00,0x63,0x34,\r
+0xce,0x47,0x00,0x08,0xf8,0x63,0x43,0xac,0x82,0xfc,0xe2,0x14,0x25,0xb0,0x02,0x3c,\r
+0x80,0x10,0x04,0x00,0x68,0x15,0xa3,0x26,0x21,0x10,0x43,0x00,0xce,0x47,0x00,0x08,\r
+0x60,0x45,0x45,0xac,0x25,0xb0,0x05,0x3c,0x4f,0x00,0xa2,0x34,0x9e,0x00,0xa3,0x34,\r
+0x00,0x00,0x40,0xa0,0x00,0x00,0x60,0xa4,0x94,0x00,0xa2,0x34,0x00,0x00,0x43,0x94,\r
+0x9a,0x00,0xa4,0x34,0x98,0x00,0xa6,0x34,0xff,0xff,0x74,0x30,0x80,0x12,0x14,0x00,\r
+0x00,0xf8,0x42,0x24,0x42,0xa1,0x02,0x00,0x00,0x14,0x02,0x24,0x00,0x00,0x82,0xa4,\r
+0x26,0xb0,0x02,0x3c,0xb0,0x03,0xa7,0x34,0xa0,0x80,0x03,0x24,0x7c,0x00,0x42,0x34,\r
+0x00,0x00,0xc3,0xa4,0x44,0x00,0xa4,0x34,0x00,0x00,0xf4,0xac,0x00,0x00,0x54,0xa4,\r
+0x00,0x00,0x83,0x94,0xff,0xfd,0x02,0x24,0xd8,0x00,0xa5,0x34,0x24,0x18,0x62,0x00,\r
+0x00,0x00,0x83,0xa4,0x00,0x00,0x82,0x94,0x68,0x15,0xa6,0x26,0x00,0x02,0x42,0x34,\r
+0x00,0x00,0x82,0xa4,0x00,0x00,0xa3,0x90,0xbf,0xff,0x02,0x24,0xe8,0x4a,0xc0,0xa4,\r
+0x24,0x18,0x62,0x00,0xe3,0x4a,0xc0,0xa0,0x00,0x00,0xa3,0xa0,0xcf,0x47,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0x80,0x10,0x04,0x00,0x21,0x10,0x44,0x00,0x68,0x15,0xa3,0x26,\r
+0x21,0x10,0x43,0x00,0x21,0x10,0x4a,0x00,0xce,0x47,0x00,0x08,0x34,0x43,0x46,0xa0,\r
+0xd7,0x42,0xc3,0x90,0x50,0x0c,0xe2,0x34,0x21,0x20,0x00,0x00,0x00,0x00,0x43,0xa0,\r
+0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x82,0x24,0x68,0x15,0xa2,0x26,0xd7,0x42,0x44,0x90,0x25,0xb0,0x03,0x3c,\r
+0x58,0x0c,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,\r
+0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,\r
+0x68,0x15,0xa5,0x26,0xe4,0x42,0xa3,0x8c,0x00,0x40,0x04,0x3c,0xff,0x7f,0x02,0x3c,\r
+0x25,0x18,0x64,0x00,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0xee,0x47,0x00,0x08,\r
+0xe4,0x42,0xa3,0xac,0xee,0x51,0x00,0x0c,0x00,0x00,0x00,0x00,0xcf,0x47,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0x08,0x40,0xc3,0x8d,0xff,0x9f,0x02,0x3c,0xff,0xff,0x42,0x34,\r
+0x24,0x18,0x62,0x00,0xce,0x47,0x00,0x08,0x08,0x40,0xc3,0xad,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x77,0x4b,0xc4,0x91,\r
+0xc4,0x02,0x23,0x36,0xcc,0x02,0x22,0x36,0x00,0x00,0x53,0xac,0x00,0x00,0x64,0xac,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0xcf,0x47,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0x6e,0x0c,0x00,0x0c,0x00,0x00,0x00,0x00,0xcf,0x47,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0x4c,0x64,0xc3,0x91,0xc4,0x02,0x22,0x36,0x00,0x00,0x43,0xac,\r
+0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0xff,0xa5,0x34,0x24,0x28,0x65,0x02,\r
+0x02,0x2a,0x05,0x00,0x40,0x11,0x05,0x00,0x26,0xb0,0x04,0x3c,0x94,0x00,0x23,0x36,\r
+0x00,0x00,0x65,0xa4,0xc0,0xff,0x54,0x24,0x7c,0x00,0x8b,0x34,0x04,0x00,0x07,0x24,\r
+0x7a,0x00,0x84,0x34,0x00,0x04,0x02,0x24,0xa0,0x80,0x03,0x24,0x9a,0x00,0x26,0x36,\r
+0x98,0x00,0x28,0x36,0x96,0x00,0x29,0x36,0xb0,0x03,0x2a,0x36,0x00,0x00,0xc2,0xa4,\r
+0x00,0x00,0x03,0xa5,0x00,0x00,0x27,0xa5,0x00,0x00,0x87,0xa0,0x00,0x00,0x54,0xad,\r
+0x44,0x00,0x24,0x36,0x00,0x00,0x74,0xa5,0x00,0x00,0x83,0x94,0xff,0xfd,0x02,0x24,\r
+0xe6,0x4a,0xc5,0xa5,0x24,0x18,0x62,0x00,0x00,0x00,0x83,0xa4,0x00,0x00,0x82,0x94,\r
+0x00,0x00,0x00,0x00,0x00,0x02,0x42,0x34,0x00,0x00,0x82,0xa4,0xcf,0x47,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0x00,0x0f,0x62,0x32,0x02,0x22,0x02,0x00,0x01,0x00,0x03,0x24,\r
+0xda,0x02,0x83,0x10,0x00,0x00,0x00,0x00,0x02,0x00,0x02,0x24,0xdb,0x02,0x82,0x10,\r
+0x00,0x00,0x00,0x00,0x03,0x00,0x02,0x24,0xf7,0x00,0x82,0x10,0x00,0x00,0x00,0x00,\r
+0xa6,0x50,0x00,0x0c,0x21,0x20,0x00,0x00,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x04,0x43,0xc2,0x91,0xce,0x47,0x00,0x08,0x04,0x43,0xc2,0xad,0x0e,0x4f,0x00,0x0c,\r
+0x07,0x00,0x04,0x24,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x9a,0x4f,0x00,0x0c,\r
+0x21,0x20,0x60,0x02,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x60,0x64,0xc3,0x91,\r
+0xc4,0x02,0x22,0x36,0x00,0x00,0x43,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x00,0xff,0xa2,0x34,0x24,0x10,0x62,0x02,0x02,0x9a,0x02,0x00,0xcc,0x02,0x23,0x36,\r
+0x00,0x00,0x73,0xac,0xc4,0x02,0x24,0x36,0x00,0x00,0x94,0x8c,0x21,0x10,0x71,0x02,\r
+0x00,0x00,0x54,0xac,0x00,0x00,0x54,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x94,0xac,\r
+0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x21,0xa0,0x00,0x00,0x16,0x4c,0x00,0x08,\r
+0x27,0xb0,0x04,0x3c,0x00,0x01,0x82,0x2e,0x0c,0x00,0x40,0x10,0x08,0x00,0x84,0x24,\r
+0x00,0x00,0x83,0x94,0x00,0x00,0x00,0x00,0xff,0xff,0x7e,0x30,0xff,0x00,0xc2,0x33,\r
+0xf0,0x00,0x42,0x28,0xf7,0xff,0x40,0x14,0x01,0x00,0x94,0x26,0xff,0xff,0x94,0x26,\r
+0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34,0x00,0x00,0x5e,0xa4,0xff,0x00,0x82,0x2e,\r
+0xab,0xfb,0x40,0x14,0x25,0xb0,0x02,0x3c,0x12,0x87,0x03,0x3c,0xc4,0x02,0x42,0x34,\r
+0x00,0x00,0x43,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0xf8,0x63,0xc2,0x8d,\r
+0xfe,0xff,0x03,0x24,0x02,0x00,0x42,0x34,0x24,0x10,0x43,0x00,0xce,0x47,0x00,0x08,\r
+0xf8,0x63,0xc2,0xad,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0x68,0x15,0xae,0x26,0x76,0x4b,0xc2,0x91,0x00,0x00,0x00,0x00,\r
+0x97,0xfb,0x40,0x14,0x00,0xff,0xa2,0x34,0x24,0x10,0x62,0x02,0x02,0xf2,0x02,0x00,\r
+0xcc,0x02,0x22,0x36,0x00,0x00,0x5e,0xac,0xc8,0x02,0x25,0x36,0xff,0x00,0xc3,0x33,\r
+0x01,0x00,0x02,0x24,0x00,0x00,0xa3,0xac,0x21,0x20,0xc0,0x03,0x76,0x4b,0xc2,0xa1,\r
+0xe3,0x18,0x00,0x0c,0x77,0x4b,0xde,0xa1,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x00,0x60,0x81,0x40,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0xff,0xa2,0x34,\r
+0x24,0x10,0x62,0x02,0x25,0xb0,0x05,0x3c,0x02,0xf2,0x02,0x00,0xcc,0x02,0xa3,0x34,\r
+0x01,0x00,0x02,0x24,0x00,0x00,0x7e,0xac,0x01,0x01,0xc2,0x13,0x68,0x15,0xa2,0x26,\r
+0x02,0x00,0xc2,0x2b,0x28,0x01,0x40,0x14,0x03,0x00,0x02,0x24,0x20,0x01,0xc2,0x13,\r
+0xc4,0x02,0xa3,0x34,0x68,0x15,0xa2,0x26,0x70,0x4b,0x44,0x94,0x25,0xb0,0x03,0x3c,\r
+0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x68,0x15,0xa2,0x26,0xce,0x47,0x00,0x08,0x46,0x64,0x40,0xa4,0x68,0x15,0xa2,0x26,\r
+0x21,0x10,0x82,0x00,0xce,0x47,0x00,0x08,0x56,0x44,0x46,0xa0,0x68,0x15,0xa2,0x26,\r
+0xce,0x47,0x00,0x08,0xec,0x65,0x40,0xac,0x00,0x1f,0x63,0x32,0x02,0x14,0x13,0x00,\r
+0x02,0xa2,0x03,0x00,0x3f,0x00,0x46,0x30,0x68,0x15,0xa3,0x26,0xc1,0x42,0x66,0xa0,\r
+0xce,0x47,0x00,0x08,0xbc,0x42,0x74,0xa0,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,\r
+0xfd,0x00,0x42,0x30,0x00,0x00,0x62,0xa0,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x68,0x15,0xae,0x26,0x08,0x40,0xc7,0x8d,0x00,0x00,0x40,0xad,0x42,0x17,0x07,0x00,\r
+0x03,0x00,0x42,0x30,0x5c,0x00,0x40,0x14,0x68,0x15,0xa2,0x26,0x03,0x0d,0x22,0x36,\r
+0x00,0x00,0x45,0x90,0x10,0x40,0xc6,0x8d,0xff,0x9f,0x03,0x3c,0xff,0xff,0x63,0x34,\r
+0xff,0x3f,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x18,0xe3,0x00,0x00,0x20,0x04,0x3c,\r
+0x24,0x60,0xc2,0x00,0x25,0x18,0x64,0x00,0x00,0x40,0x02,0x3c,0x70,0x00,0xa5,0x30,\r
+0x25,0x60,0x82,0x01,0x93,0x01,0xa0,0x10,0x08,0x40,0xc3,0xad,0x94,0x0e,0x22,0x36,\r
+0x9c,0x0e,0x23,0x36,0xa4,0x0e,0x24,0x36,0xac,0x0e,0x27,0x36,0x00,0x00,0x45,0x8c,\r
+0x00,0x00,0x69,0x8c,0x00,0x00,0x8b,0x8c,0x00,0x00,0xe6,0x8c,0x0c,0x40,0xc3,0x8d,\r
+0xb4,0x0e,0x22,0x36,0x00,0x00,0x4a,0x8c,0xff,0x03,0x07,0x3c,0x00,0xfc,0x08,0x24,\r
+0xbc,0x0e,0x22,0x36,0x24,0x28,0xa7,0x00,0x24,0x30,0xc7,0x00,0x24,0x20,0x88,0x01,\r
+0x02,0x2c,0x05,0x00,0x00,0x00,0x4c,0x8c,0x24,0x18,0x68,0x00,0x02,0x34,0x06,0x00,\r
+0xcc,0x0e,0x2d,0x36,0xc4,0x0e,0x28,0x36,0xf0,0xff,0x02,0x3c,0xff,0x03,0x42,0x34,\r
+0x25,0x18,0x65,0x00,0x25,0x20,0x86,0x00,0x00,0x00,0x05,0x8d,0x24,0x48,0x27,0x01,\r
+0x00,0x00,0xa6,0x8d,0x24,0x50,0x47,0x01,0x24,0x20,0x82,0x00,0x24,0x18,0x62,0x00,\r
+0x82,0x49,0x09,0x00,0x82,0x51,0x0a,0x00,0x0f,0xc0,0x02,0x3c,0xff,0xff,0x42,0x34,\r
+0x25,0x18,0x69,0x00,0x25,0x20,0x8a,0x00,0x24,0x58,0x67,0x01,0x24,0x60,0x87,0x01,\r
+0x24,0x20,0x82,0x00,0x24,0x30,0xc7,0x00,0x00,0x59,0x0b,0x00,0x24,0x18,0x62,0x00,\r
+0x00,0x61,0x0c,0x00,0x24,0x28,0xa7,0x00,0x25,0x18,0x6b,0x00,0x25,0x20,0x8c,0x00,\r
+0x02,0x2c,0x05,0x00,0x02,0x34,0x06,0x00,0x16,0x40,0xc6,0xa5,0x0c,0x40,0xc3,0xad,\r
+0x10,0x40,0xc4,0xad,0x14,0x40,0xc5,0xa5,0x68,0x15,0xa3,0x26,0x0c,0x40,0x62,0x8c,\r
+0x00,0x00,0x00,0x00,0x53,0x01,0x40,0x04,0x00,0x00,0x00,0x00,0x00,0xff,0x62,0x32,\r
+0x29,0x01,0x40,0x10,0x00,0x00,0x00,0x00,0x02,0x12,0x02,0x00,0xc3,0x42,0x62,0xa0,\r
+0xfd,0x55,0x00,0x0c,0x10,0x00,0xa4,0x27,0x38,0x55,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x68,0x15,0xa2,0x26,0x0c,0x40,0x43,0x8c,0x00,0x80,0x04,0x3c,0x25,0x18,0x64,0x00,\r
+0x0c,0x40,0x43,0xac,0x68,0x15,0xa2,0x26,0xc3,0x42,0x44,0x90,0x25,0xb0,0x03,0x3c,\r
+0x61,0x0c,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,\r
+0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,\r
+0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0xa6,0x50,0x00,0x0c,0x03,0x00,0x04,0x24,\r
+0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0xd2,0x59,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0xff,0xa2,0x34,0x24,0x10,0x62,0x02,\r
+0x02,0xf2,0x02,0x00,0x07,0x00,0x03,0x24,0x25,0x01,0xc3,0x13,0x02,0x80,0x04,0x3c,\r
+0x08,0x00,0xc2,0x2b,0x0a,0x01,0x40,0x10,0x20,0x00,0x02,0x24,0xd8,0xfa,0xc0,0x17,\r
+0x02,0x80,0x02,0x3c,0xe8,0x7d,0x43,0x94,0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34,\r
+0x00,0x00,0x43,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x02,0x24,0x13,0x00,\r
+0x0f,0x10,0x00,0x0c,0xff,0x00,0x84,0x30,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x68,0x15,0xa2,0x26,0x58,0x64,0x44,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0xac,\r
+0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x24,0x10,0x65,0x02,0xcc,0x02,0x23,0x36,\r
+0x00,0xff,0x64,0x32,0x02,0xf4,0x02,0x00,0x00,0x00,0x73,0xac,0x04,0x00,0xc0,0x13,\r
+0x02,0x9a,0x04,0x00,0x01,0x00,0x02,0x24,0x02,0x00,0xc2,0x13,0x01,0x00,0x04,0x24,\r
+0x21,0x20,0x00,0x00,0x25,0xb0,0x10,0x3c,0x2a,0x42,0x00,0x0c,0xc4,0x02,0x12,0x36,\r
+0x00,0x00,0x54,0x8e,0x0f,0x00,0x11,0x3c,0x21,0x20,0x60,0x02,0x21,0x30,0x80,0x02,\r
+0x6a,0x44,0x00,0x0c,0xff,0xff,0x25,0x36,0x21,0x20,0x60,0x02,0x95,0x44,0x00,0x0c,\r
+0xff,0xff,0x25,0x36,0xc8,0x02,0x10,0x36,0x00,0x00,0x42,0xae,0x00,0x00,0x02,0xae,\r
+0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x28,0xb0,0x02,0x3c,0x00,0x00,0x43,0x90,\r
+0xff,0x00,0x02,0x24,0xff,0x00,0x73,0x30,0xa5,0xfa,0x62,0x12,0xff,0x00,0x04,0x24,\r
+0x28,0xb0,0x05,0x3c,0xc0,0x10,0x13,0x00,0x21,0x10,0x45,0x00,0x00,0x00,0x43,0x90,\r
+0x00,0x00,0x00,0x00,0xff,0x00,0x73,0x30,0xfa,0xff,0x64,0x16,0x25,0xb0,0x02,0x3c,\r
+0xd0,0x47,0x00,0x08,0xc0,0x02,0x42,0x34,0x64,0x03,0x23,0x36,0x00,0x00,0x62,0x90,\r
+0x00,0x00,0x00,0x00,0xfa,0x00,0x42,0x30,0x00,0x00,0x62,0xa0,0xcf,0x47,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0x80,0x10,0x04,0x00,0x68,0x15,0xa3,0x26,0x21,0x10,0x43,0x00,\r
+0xce,0x47,0x00,0x08,0xec,0x44,0x45,0xac,0x25,0xb0,0x03,0x3c,0xff,0x00,0x02,0x24,\r
+0x56,0x01,0x63,0x34,0x01,0x00,0x04,0x24,0x02,0x80,0x06,0x3c,0x00,0x00,0x62,0xa4,\r
+0xce,0x47,0x00,0x08,0x18,0x7e,0xc4,0xa0,0xa8,0x0c,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x44,0x64,0x44,0x94,0x25,0xb0,0x03,0x3c,\r
+0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xa4,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x6e,0x4b,0x44,0x94,0xc4,0x02,0xa3,0x34,0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0x68,0x15,0xa4,0x26,0x08,0x40,0x83,0x8c,0xff,0x9f,0x02,0x3c,\r
+0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0xce,0x47,0x00,0x08,0x08,0x40,0x83,0xac,\r
+0x68,0x15,0xa3,0x26,0xff,0xff,0x02,0x34,0xce,0x47,0x00,0x08,0xec,0x65,0x62,0xac,\r
+0x64,0x03,0x42,0x34,0x00,0x00,0x43,0x90,0x00,0x00,0x00,0x00,0xff,0x00,0x74,0x30,\r
+0x02,0x00,0x84,0x36,0x00,0x00,0x44,0xa0,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x68,0x15,0xa5,0x26,0xf8,0x63,0xa2,0x8c,0xfd,0xff,0x03,0x24,0xfe,0xff,0x04,0x24,\r
+0x24,0x10,0x43,0x00,0x24,0x10,0x44,0x00,0xce,0x47,0x00,0x08,0xf8,0x63,0xa2,0xac,\r
+0x34,0x0d,0x00,0x0c,0x00,0x00,0x00,0x00,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x68,0x15,0xa2,0x26,0x72,0x4b,0x44,0x94,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0xac,\r
+0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0xda,0xfe,0xc0,0x17,0xc4,0x02,0xa3,0x34,\r
+0x68,0x15,0xa2,0x26,0x6c,0x4b,0x44,0x94,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0xac,\r
+0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0xff,0x63,0x32,0x25,0xb0,0x02,0x3c,\r
+0x02,0x9a,0x03,0x00,0xcc,0x02,0x42,0x34,0x00,0x00,0x53,0xac,0xbf,0x00,0x60,0x12,\r
+0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x24,0x59,0x01,0x62,0x12,0x00,0x00,0x00,0x00,\r
+0x2a,0x42,0x00,0x0c,0x21,0x20,0x00,0x00,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x28,0xb0,0x14,0x3c,0x00,0x00,0x82,0x96,0x02,0x1c,0x13,0x00,0xff,0x00,0x64,0x30,\r
+0xff,0xff,0x5e,0x30,0xff,0x00,0xc3,0x33,0x0c,0x00,0x83,0x10,0xff,0x7f,0x03,0x3c,\r
+0x08,0x00,0x94,0x26,0x00,0x00,0x82,0x96,0x00,0x00,0x00,0x00,0xff,0xff,0x5e,0x30,\r
+0xff,0x00,0xc3,0x33,0x05,0x00,0x83,0x10,0xff,0x7f,0x03,0x3c,0xff,0xff,0x82,0x32,\r
+0x00,0x08,0x42,0x2c,0xf6,0xff,0x40,0x14,0x00,0x00,0x00,0x00,0xff,0xff,0x63,0x34,\r
+0x25,0xb0,0x02,0x3c,0x24,0x18,0x83,0x02,0xc4,0x02,0x42,0x34,0x00,0x00,0x43,0xac,\r
+0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x64,0x03,0x42,0x34,0x00,0x00,0x43,0x90,\r
+0x00,0x00,0x00,0x00,0xff,0x00,0x74,0x30,0x05,0x00,0x84,0x36,0x00,0x00,0x44,0xa0,\r
+0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0xff,0x00,0x02,0x3c,0x00,0xff,0x42,0x34,\r
+0x24,0x10,0x62,0x02,0x02,0xf2,0x02,0x00,0x25,0xb0,0x02,0x3c,0x68,0x15,0xa3,0x26,\r
+0xcc,0x02,0x42,0x34,0x76,0x4b,0x60,0xa0,0x21,0x20,0xc0,0x03,0x00,0x00,0x5e,0xac,\r
+0xe3,0x18,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x00,0x60,0x81,0x40,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0xff,0xff,0x05,0x36,\r
+0x60,0x00,0x06,0x24,0x6a,0x44,0x00,0x0c,0x24,0x00,0x04,0x24,0xeb,0x0b,0x00,0x0c,\r
+0xe8,0x03,0x04,0x24,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0x24,0x00,0x04,0x24,0x95,0x44,0x00,0x0c,0xff,0xff,0x05,0x36,\r
+0x1f,0x00,0x54,0x30,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,\r
+0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,0xc4,0x02,0x22,0x36,0x00,0x00,0x54,0xa0,\r
+0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x54,0x64,0x44,0x90,0x25,0xb0,0x03,0x3c,\r
+0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x00,0xff,0x65,0x32,0xff,0x00,0x84,0x30,0x28,0x50,0x00,0x0c,0x02,0x2a,0x05,0x00,\r
+0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x62,0xa0,0xcf,0x47,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0xf8,0x63,0x62,0x8c,0x00,0x00,0x00,0x00,0x03,0x00,0x42,0x34,\r
+0xce,0x47,0x00,0x08,0xf8,0x63,0x62,0xac,0xcd,0x4c,0x00,0x08,0x12,0x00,0x02,0x24,\r
+0xb8,0x59,0x00,0x0c,0x21,0x20,0x60,0x02,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x0e,0x4f,0x00,0x0c,0x21,0x20,0x00,0x00,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0xcf,0xf9,0xc2,0x17,0x02,0x80,0x06,0x3c,0x08,0x7e,0xc3,0x90,0x25,0xb0,0x02,0x3c,\r
+0xc4,0x02,0x42,0x34,0x00,0x00,0x43,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x49,0x09,0x00,0x0c,0x21,0x20,0xc0,0x03,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x12,0x00,0x02,0x24,0xc7,0x42,0xe2,0xa1,0xc3,0x49,0x00,0x08,0xc3,0x42,0xe2,0xa1,\r
+0x01,0x0d,0x00,0x0c,0x00,0x00,0x00,0x00,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x68,0x15,0xa3,0x26,0xff,0xff,0x02,0x34,0xce,0x47,0x00,0x08,0xec,0x65,0x62,0xac,\r
+0xef,0x7d,0x83,0x90,0xc4,0x02,0x22,0x36,0x00,0x00,0x43,0xac,0xcf,0x47,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0xfd,0x55,0x00,0x0c,0x10,0x00,0xa4,0x27,0xd8,0x4c,0x00,0x08,\r
+0x68,0x15,0xa2,0x26,0x07,0x52,0x00,0x0c,0x10,0x40,0xcc,0xad,0xc5,0x4c,0x00,0x08,\r
+0x68,0x15,0xa3,0x26,0x21,0x10,0x45,0x00,0x80,0x10,0x02,0x00,0x02,0x80,0x04,0x3c,\r
+0x21,0x10,0x45,0x00,0xec,0x66,0x83,0x24,0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,\r
+0x00,0x00,0x44,0x8c,0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,\r
+0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x21,0x10,0x45,0x00,0x80,0x10,0x02,0x00,\r
+0x21,0x10,0x45,0x00,0x68,0x15,0xa3,0x26,0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,\r
+0x80,0x51,0x44,0x8c,0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,\r
+0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0xc0,0x10,0x05,0x00,0x21,0x10,0x45,0x00,\r
+0x80,0x10,0x02,0x00,0x21,0x10,0x45,0x00,0x68,0x15,0xa3,0x26,0x80,0x10,0x02,0x00,\r
+0x21,0x10,0x43,0x00,0x7c,0x51,0x44,0x8c,0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,\r
+0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x2a,0x42,0x00,0x0c,\r
+0x21,0x20,0x00,0x00,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x21,0x10,0x45,0x00,\r
+0x80,0x10,0x02,0x00,0x21,0x10,0x45,0x00,0x68,0x15,0xa3,0x26,0x80,0x10,0x02,0x00,\r
+0x21,0x10,0x43,0x00,0xe0,0x51,0x44,0x8c,0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,\r
+0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x21,0x10,0x45,0x00,\r
+0x80,0x10,0x02,0x00,0x02,0x80,0x04,0x3c,0x21,0x10,0x45,0x00,0x0c,0x67,0x83,0x24,\r
+0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x8c,0x25,0xb0,0x03,0x3c,\r
+0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x21,0x10,0x45,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x45,0x00,0x02,0x80,0x06,0x3c,\r
+0x08,0x67,0xc3,0x24,0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x8c,\r
+0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0x21,0x10,0x45,0x00,0x80,0x10,0x02,0x00,0x02,0x80,0x04,0x3c,\r
+0x21,0x10,0x45,0x00,0x04,0x67,0x83,0x24,0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,\r
+0x00,0x00,0x44,0x8c,0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,\r
+0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x21,0x10,0x45,0x00,0x80,0x10,0x02,0x00,\r
+0x21,0x10,0x45,0x00,0x02,0x80,0x06,0x3c,0x00,0x67,0xc3,0x24,0x80,0x10,0x02,0x00,\r
+0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x8c,0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,\r
+0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x21,0x10,0x45,0x00,\r
+0x80,0x10,0x02,0x00,0x02,0x80,0x04,0x3c,0x21,0x10,0x45,0x00,0xfc,0x66,0x83,0x24,\r
+0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x8c,0x25,0xb0,0x03,0x3c,\r
+0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x21,0x10,0x45,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x45,0x00,0x02,0x80,0x06,0x3c,\r
+0xf8,0x66,0xc3,0x24,0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x8c,\r
+0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0x21,0x10,0x45,0x00,0x80,0x10,0x02,0x00,0x02,0x80,0x04,0x3c,\r
+0x21,0x10,0x45,0x00,0xf4,0x66,0x83,0x24,0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,\r
+0x00,0x00,0x44,0x8c,0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,\r
+0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x21,0x10,0x45,0x00,0x80,0x10,0x02,0x00,\r
+0x21,0x10,0x45,0x00,0x02,0x80,0x06,0x3c,0xf0,0x66,0xc3,0x24,0x80,0x10,0x02,0x00,\r
+0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x8c,0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,\r
+0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0xa6,0x50,0x00,0x0c,\r
+0x01,0x00,0x04,0x24,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0xa6,0x50,0x00,0x0c,\r
+0x02,0x00,0x04,0x24,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x68,0x15,0xa2,0x26,\r
+0x00,0x19,0x1e,0x00,0x21,0x18,0x62,0x00,0x2c,0x43,0x64,0x94,0x25,0xb0,0x02,0x3c,\r
+0xc4,0x02,0x42,0x34,0x00,0x00,0x44,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x00,0x11,0x1e,0x00,0x68,0x15,0xa3,0x26,0x21,0x10,0x43,0x00,0x28,0x43,0x44,0x8c,\r
+0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34,0x42,0x26,0x04,0x00,0x00,0x00,0x44,0xac,\r
+0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0x11,0x1e,0x00,0x68,0x15,0xa3,0x26,\r
+0x21,0x10,0x43,0x00,0x2b,0x43,0x44,0x90,0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34,\r
+0x01,0x00,0x84,0x30,0x00,0x00,0x44,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x2a,0x42,0x00,0x0c,0x01,0x00,0x04,0x24,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x68,0x15,0xa2,0x26,0x00,0x19,0x1e,0x00,0x21,0x18,0x62,0x00,0x32,0x43,0x64,0x94,\r
+0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34,0x00,0x00,0x44,0xac,0xcf,0x47,0x00,0x08,\r
+0x25,0xb0,0x02,0x3c,0x68,0x15,0xa2,0x26,0x00,0x19,0x1e,0x00,0x21,0x18,0x62,0x00,\r
+0x31,0x43,0x64,0x90,0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34,0x00,0x00,0x44,0xac,\r
+0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x68,0x15,0xa2,0x26,0x00,0x19,0x1e,0x00,\r
+0x21,0x18,0x62,0x00,0x30,0x43,0x64,0x90,0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34,\r
+0x00,0x00,0x44,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x68,0x15,0xa2,0x26,\r
+0x00,0x19,0x1e,0x00,0x21,0x18,0x62,0x00,0x2e,0x43,0x64,0x94,0x25,0xb0,0x02,0x3c,\r
+0xc4,0x02,0x42,0x34,0x00,0x00,0x44,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,\r
+0x25,0xb0,0x05,0x3c,0x01,0x00,0x06,0x24,0x01,0x80,0x02,0x3c,0x04,0x30,0x86,0x00,\r
+0xf1,0x02,0xa7,0x34,0xed,0x02,0xa4,0x34,0x38,0x3c,0x42,0x24,0x18,0x03,0xa5,0x34,\r
+0x08,0x00,0x03,0x24,0x00,0x00,0xa2,0xac,0x00,0x00,0xe3,0xa0,0x00,0x00,0x80,0xa0,\r
+0x00,0x00,0x86,0xa0,0x00,0x00,0x80,0xa0,0x00,0x00,0x86,0xa0,0x00,0x00,0x80,0xa0,\r
+0x00,0x00,0x86,0xa0,0x00,0x00,0x80,0xa0,0x00,0x00,0x86,0xa0,0x00,0x00,0x80,0xa0,\r
+0x00,0x00,0xe0,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x01,0x80,0x02,0x3c,\r
+0x25,0xb0,0x03,0x3c,0x94,0x3c,0x42,0x24,0x18,0x03,0x63,0x34,0x00,0x00,0x62,0xac,\r
+0x00,0x00,0x83,0x90,0x30,0x00,0x02,0x24,0x05,0x00,0x62,0x10,0x21,0x20,0x00,0x00,\r
+0x31,0x00,0x02,0x24,0x02,0x00,0x62,0x10,0x01,0x00,0x04,0x24,0x07,0x00,0x04,0x24,\r
+0x0e,0x4f,0x00,0x08,0x00,0x00,0x00,0x00,0x01,0x80,0x02,0x3c,0x25,0xb0,0x03,0x3c,\r
+0xd0,0x3c,0x42,0x24,0x18,0x03,0x63,0x34,0x02,0x80,0x04,0x3c,0x00,0x00,0x62,0xac,\r
+0x08,0x00,0xe0,0x03,0x24,0x7e,0x80,0xac,0x02,0x80,0x02,0x3c,0x68,0x7b,0x42,0x24,\r
+0xc0,0x20,0x04,0x00,0x21,0x20,0x82,0x00,0x21,0x28,0x00,0x00,0x00,0x60,0x06,0x40,\r
+0x01,0x00,0xc1,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x00,0x00,0x82,0x8c,\r
+0x00,0x00,0x00,0x00,0x09,0x00,0x44,0x10,0x00,0x00,0x00,0x00,0x04,0x00,0x43,0x8c,\r
+0x21,0x28,0x40,0x00,0x00,0x00,0x42,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0xac,\r
+0x04,0x00,0x43,0xac,0x00,0x00,0xa5,0xac,0x04,0x00,0xa5,0xac,0x00,0x60,0x86,0x40,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0xa0,0x00,0x21,0x18,0x80,0x00,0xe8,0xff,0xbd,0x27,\r
+0x01,0x01,0x62,0x2c,0x10,0x00,0xbf,0xaf,0x01,0x00,0x04,0x24,0x01,0x02,0x65,0x2c,\r
+0x0a,0x00,0x40,0x14,0x21,0x30,0x00,0x00,0x02,0x00,0x04,0x24,0x07,0x00,0xa0,0x14,\r
+0x01,0x08,0x62,0x2c,0x05,0x00,0x40,0x14,0x03,0x00,0x04,0x24,0x10,0x00,0xbf,0x8f,\r
+0x21,0x10,0xc0,0x00,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x3c,0x4f,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x10,0x00,0xbf,0x8f,0x21,0x30,0x40,0x00,0x21,0x10,0xc0,0x00,\r
+0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x02,0x80,0x03,0x3c,0x80,0x7b,0x62,0x8c,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x60,0x06,0x40,0x01,0x00,0xc1,0x34,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x10,0x00,0x83,0x8c,0x02,0x80,0x02,0x3c,\r
+0x68,0x7b,0x42,0x24,0xc0,0x18,0x03,0x00,0x21,0x18,0x62,0x00,0x00,0x00,0x65,0x8c,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x85,0xac,0x04,0x00,0xa4,0xac,0x00,0x00,0x64,0xac,\r
+0x04,0x00,0x83,0xac,0x00,0x60,0x86,0x40,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x85,0xac,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x02,0x24,0x04,0x00,0xff,0x00,0x84,0x30,0xc0,0x18,0x04,0x00,\r
+0x21,0x18,0x64,0x00,0x80,0x18,0x03,0x00,0x21,0x18,0x64,0x00,0x02,0x80,0x02,0x3c,\r
+0x68,0x15,0x42,0x24,0x80,0x18,0x03,0x00,0x21,0x18,0x62,0x00,0x84,0x51,0x64,0x8c,\r
+0xff,0xf1,0x02,0x24,0x24,0x20,0x82,0x00,0x08,0x00,0xe0,0x03,0x84,0x51,0x64,0xac,\r
+0x02,0x24,0x04,0x00,0xff,0x00,0x84,0x30,0xc0,0x18,0x04,0x00,0x21,0x18,0x64,0x00,\r
+0x80,0x18,0x03,0x00,0x21,0x18,0x64,0x00,0x02,0x80,0x02,0x3c,0x68,0x15,0x42,0x24,\r
+0x80,0x18,0x03,0x00,0x21,0x18,0x62,0x00,0x84,0x51,0x64,0x8c,0xff,0xf1,0x02,0x24,\r
+0x24,0x20,0x82,0x00,0x00,0x02,0x84,0x34,0x08,0x00,0xe0,0x03,0x84,0x51,0x64,0xac,\r
+0xe0,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,0xc0,0x80,0x04,0x00,0x21,0x80,0x04,0x02,\r
+0x80,0x80,0x10,0x00,0x21,0x80,0x04,0x02,0x02,0x80,0x02,0x3c,0x68,0x15,0x42,0x24,\r
+0x80,0x80,0x10,0x00,0x21,0x80,0x02,0x02,0x1c,0x00,0xbf,0xaf,0x18,0x00,0xb2,0xaf,\r
+0x14,0x00,0xb1,0xaf,0x84,0x51,0x05,0x8e,0xff,0x1f,0x02,0x3c,0x25,0xb0,0x12,0x3c,\r
+0xff,0xff,0x42,0x34,0xf8,0xff,0x03,0x24,0x7c,0x51,0x02,0xae,0x84,0x01,0x46,0x36,\r
+0x24,0x28,0xa3,0x00,0xff,0xfe,0x02,0x24,0x00,0x00,0xc7,0x8c,0x24,0x28,0xa2,0x00,\r
+0xff,0xef,0x03,0x24,0xff,0xff,0x02,0x3c,0xff,0x1f,0x42,0x34,0x24,0x28,0xa3,0x00,\r
+0x24,0x28,0xa2,0x00,0x80,0x51,0x07,0xae,0x84,0x51,0x05,0xae,0x6a,0x0f,0x00,0x0c,\r
+0x21,0x88,0x80,0x00,0x86,0x51,0x02,0x92,0x21,0x88,0x32,0x02,0x1c,0x00,0xbf,0x8f,\r
+0x60,0x01,0x22,0xa2,0x18,0x00,0xb2,0x8f,0x70,0x51,0x00,0xae,0x54,0x51,0x00,0xae,\r
+0x58,0x51,0x00,0xae,0x5c,0x51,0x00,0xae,0x60,0x51,0x00,0xae,0x64,0x51,0x00,0xae,\r
+0x68,0x51,0x00,0xae,0x6c,0x51,0x00,0xae,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xff,0x00,0xa5,0x30,0xc0,0x10,0x05,0x00,\r
+0x21,0x10,0x45,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x45,0x00,0x02,0x80,0x03,0x3c,\r
+0x68,0x15,0x63,0x24,0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,0x84,0x51,0x43,0x8c,\r
+0x25,0xb0,0x05,0x3c,0xff,0x00,0xc6,0x30,0x21,0x30,0xc5,0x00,0xaf,0x01,0xc2,0x90,\r
+0x07,0x00,0x63,0x30,0x80,0x18,0x03,0x00,0x21,0x18,0x65,0x00,0xff,0x00,0x88,0x30,\r
+0xff,0x00,0x49,0x30,0x84,0x01,0x66,0x8c,0x21,0x50,0x00,0x00,0x21,0x58,0x00,0x00,\r
+0x2b,0x00,0x20,0x11,0x21,0x20,0x00,0x01,0x2b,0x00,0xc0,0x10,0x2b,0x10,0x09,0x01,\r
+0x21,0x28,0x00,0x00,0xfd,0x4f,0x00,0x08,0x01,0x00,0x07,0x24,0xff,0x00,0x65,0x30,\r
+0x1d,0x00,0xa2,0x2c,0x07,0x00,0x40,0x10,0xff,0xff,0x02,0x25,0x04,0x10,0xa7,0x00,\r
+0x24,0x10,0x46,0x00,0xf9,0xff,0x40,0x10,0x01,0x00,0xa3,0x24,0x21,0x58,0xa0,0x00,\r
+0xff,0xff,0x02,0x25,0xff,0x00,0x45,0x30,0x2b,0x18,0xab,0x00,0x0f,0x00,0x60,0x14,\r
+0x2b,0x10,0x49,0x01,0x01,0x00,0x04,0x24,0x04,0x10,0xa4,0x00,0x24,0x10,0x46,0x00,\r
+0xff,0xff,0xa7,0x24,0x04,0x00,0x40,0x10,0x01,0x00,0x43,0x25,0x17,0x00,0x49,0x11,\r
+0xff,0x00,0x6a,0x30,0x21,0x40,0xa0,0x00,0xff,0x00,0xe5,0x30,0x2b,0x10,0xab,0x00,\r
+0xf6,0xff,0x40,0x10,0x04,0x10,0xa4,0x00,0x2b,0x10,0x49,0x01,0x08,0x00,0x40,0x10,\r
+0x21,0x20,0x00,0x01,0x23,0x10,0x2a,0x01,0x2a,0x10,0x62,0x01,0x04,0x00,0x40,0x14,\r
+0x21,0x20,0x00,0x00,0x23,0x10,0x69,0x01,0x21,0x10,0x4a,0x00,0xff,0x00,0x44,0x30,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00,0xfd,0xff,0x40,0x14,0x21,0x20,0x00,0x00,\r
+0x23,0x10,0x09,0x01,0x1e,0x50,0x00,0x08,0xff,0x00,0x44,0x30,0x21,0x20,0x00,0x01,\r
+0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00,0xff,0x00,0x84,0x30,0xc0,0x10,0x04,0x00,\r
+0x21,0x10,0x44,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x44,0x00,0x02,0x80,0x03,0x3c,\r
+0x68,0x15,0x63,0x24,0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,0x25,0xb0,0x06,0x3c,\r
+0x84,0x51,0x43,0x8c,0xff,0x00,0xa5,0x30,0x21,0x20,0x86,0x00,0x21,0x28,0xa6,0x00,\r
+0x60,0x01,0x82,0x90,0xaf,0x01,0xa4,0x90,0x07,0x00,0x63,0x30,0x80,0x18,0x03,0x00,\r
+0x21,0x18,0x66,0x00,0xff,0x00,0x48,0x30,0xff,0x00,0x89,0x30,0x84,0x01,0x66,0x8c,\r
+0x21,0x50,0x00,0x00,0x21,0x58,0x00,0x00,0x2b,0x00,0x20,0x11,0x21,0x20,0x00,0x01,\r
+0x2b,0x00,0xc0,0x10,0x2b,0x10,0x09,0x01,0x21,0x28,0x00,0x00,0x4b,0x50,0x00,0x08,\r
+0x01,0x00,0x07,0x24,0xff,0x00,0x65,0x30,0x1d,0x00,0xa2,0x2c,0x07,0x00,0x40,0x10,\r
+0xff,0xff,0x02,0x25,0x04,0x10,0xa7,0x00,0x24,0x10,0x46,0x00,0xf9,0xff,0x40,0x10,\r
+0x01,0x00,0xa3,0x24,0x21,0x58,0xa0,0x00,0xff,0xff,0x02,0x25,0xff,0x00,0x45,0x30,\r
+0x2b,0x18,0xab,0x00,0x0f,0x00,0x60,0x14,0x2b,0x10,0x49,0x01,0x01,0x00,0x04,0x24,\r
+0x04,0x10,0xa4,0x00,0x24,0x10,0x46,0x00,0xff,0xff,0xa7,0x24,0x04,0x00,0x40,0x10,\r
+0x01,0x00,0x43,0x25,0x17,0x00,0x49,0x11,0xff,0x00,0x6a,0x30,0x21,0x40,0xa0,0x00,\r
+0xff,0x00,0xe5,0x30,0x2b,0x10,0xab,0x00,0xf6,0xff,0x40,0x10,0x04,0x10,0xa4,0x00,\r
+0x2b,0x10,0x49,0x01,0x08,0x00,0x40,0x10,0x21,0x20,0x00,0x01,0x23,0x10,0x2a,0x01,\r
+0x2a,0x10,0x62,0x01,0x04,0x00,0x40,0x14,0x21,0x20,0x00,0x00,0x23,0x10,0x69,0x01,\r
+0x21,0x10,0x4a,0x00,0xff,0x00,0x44,0x30,0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00,\r
+0xfd,0xff,0x40,0x14,0x21,0x20,0x00,0x00,0x23,0x10,0x09,0x01,0x6c,0x50,0x00,0x08,\r
+0xff,0x00,0x44,0x30,0x21,0x20,0x00,0x01,0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00,\r
+0xd8,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c,0x18,0x00,0xb2,0xaf,0xff,0xff,0x03,0x3c,\r
+0x68,0x15,0x52,0x24,0x1c,0x00,0xb3,0xaf,0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,\r
+0x20,0x00,0xbf,0xaf,0xff,0x1f,0x73,0x34,0x21,0x88,0x00,0x00,0x21,0x80,0x40,0x02,\r
+0xaa,0x4f,0x00,0x0c,0x21,0x20,0x20,0x02,0x84,0x51,0x02,0x8e,0x21,0x28,0x00,0x00,\r
+0x24,0x10,0x53,0x00,0x00,0x20,0x42,0x34,0x84,0x51,0x02,0xae,0x86,0x51,0x03,0x92,\r
+0x00,0x00,0x00,0x00,0x80,0x18,0x03,0x00,0x21,0x18,0x72,0x00,0xec,0x44,0x64,0x8c,\r
+0x60,0x45,0x62,0x8c,0x00,0x00,0x00,0x00,0x21,0x10,0x44,0x00,0x42,0x10,0x02,0x00,\r
+0x50,0x51,0x02,0xae,0x21,0x10,0x05,0x02,0x01,0x00,0xa5,0x24,0x1d,0x00,0xa3,0x28,\r
+0xc2,0x51,0x40,0xa0,0x88,0x51,0x40,0xa0,0xfa,0xff,0x60,0x14,0xa5,0x51,0x40,0xa0,\r
+0x01,0x00,0x31,0x26,0x20,0x00,0x22,0x2a,0xe0,0x51,0x00,0xae,0xe4,0xff,0x40,0x14,\r
+0x94,0x00,0x10,0x26,0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,\r
+0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27,\r
+0xc0,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c,0x2c,0x00,0xb5,0xaf,0x68,0x15,0x46,0x24,\r
+0x3c,0x00,0xbf,0xaf,0x38,0x00,0xbe,0xaf,0x34,0x00,0xb7,0xaf,0x30,0x00,0xb6,0xaf,\r
+0x28,0x00,0xb4,0xaf,0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,\r
+0x18,0x00,0xb0,0xaf,0xec,0x65,0xc2,0x8c,0xff,0x00,0x03,0x24,0xff,0x00,0x8d,0x30,\r
+0xff,0xff,0x42,0x38,0x0b,0x18,0x02,0x00,0xff,0xff,0x04,0x34,0x10,0x00,0xa3,0xaf,\r
+0xec,0x65,0xc4,0xac,0xb9,0x00,0xa0,0x11,0x08,0x00,0x15,0x24,0x02,0x80,0x02,0x3c,\r
+0x50,0x9e,0x45,0x24,0x90,0x44,0xc4,0x24,0xc7,0x50,0x00,0x08,0x21,0x88,0x00,0x00,\r
+0x01,0x00,0x31,0x26,0x00,0x00,0x82,0xa0,0x1d,0x00,0x22,0x2a,0x0b,0x00,0x40,0x10,\r
+0x01,0x00,0x84,0x24,0x21,0x10,0x25,0x02,0x00,0x00,0x42,0x90,0x00,0x00,0x00,0x00,\r
+0xf7,0xff,0x40,0x10,0xfd,0xff,0x43,0x24,0x01,0x00,0x31,0x26,0x1d,0x00,0x22,0x2a,\r
+0x00,0x00,0x83,0xa0,0xf7,0xff,0x40,0x14,0x01,0x00,0x84,0x24,0x02,0x80,0x02,0x3c,\r
+0x68,0x15,0x4a,0x24,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0xe8,0x9b,0x6c,0x24,\r
+0x70,0x9b,0x4b,0x24,0x21,0x88,0x00,0x00,0x21,0x48,0x00,0x00,0x21,0x30,0x00,0x00,\r
+0x21,0x40,0x2a,0x01,0x21,0x38,0x2c,0x01,0x21,0x10,0xe6,0x00,0x91,0x00,0x44,0x90,\r
+0x00,0x00,0x45,0x90,0x21,0x18,0x06,0x01,0x01,0x00,0xc6,0x24,0x05,0x00,0xc2,0x28,\r
+0xc5,0x43,0x64,0xa0,0xf8,0xff,0x40,0x14,0x34,0x43,0x65,0xa0,0x21,0x10,0x2b,0x02,\r
+0x1d,0x00,0x44,0x90,0x00,0x00,0x45,0x90,0x21,0x18,0x2a,0x02,0x01,0x00,0x31,0x26,\r
+0x1d,0x00,0x22,0x2a,0x73,0x44,0x64,0xa0,0x56,0x44,0x65,0xa0,0xeb,0xff,0x40,0x14,\r
+0x05,0x00,0x29,0x25,0xaf,0x00,0xa0,0x11,0x02,0x80,0x02,0x3c,0x68,0x15,0x48,0x24,\r
+0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0xe4,0x9e,0x69,0x24,0x70,0x9e,0x47,0x24,\r
+0x21,0x88,0x00,0x00,0x80,0x18,0x11,0x00,0x21,0x10,0x69,0x00,0x21,0x20,0x67,0x00,\r
+0x00,0x00,0x46,0x8c,0x00,0x00,0x85,0x8c,0x01,0x00,0x31,0x26,0x21,0x18,0x68,0x00,\r
+0x04,0x00,0x22,0x2a,0xec,0x44,0x65,0xac,0xf6,0xff,0x40,0x14,0x60,0x45,0x66,0xac,\r
+0x02,0x80,0x02,0x3c,0x68,0x15,0x49,0x24,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,\r
+0xe4,0x9e,0x68,0x24,0x70,0x9e,0x47,0x24,0x04,0x00,0x11,0x24,0x80,0x20,0x11,0x00,\r
+0x21,0x10,0x88,0x00,0x21,0x30,0x87,0x00,0x00,0x00,0x45,0x8c,0x00,0x00,0xc3,0x8c,\r
+0x01,0x00,0x31,0x26,0x21,0x20,0x89,0x00,0x82,0x28,0x05,0x00,0x82,0x18,0x03,0x00,\r
+0x1d,0x00,0x22,0x2a,0xec,0x44,0x83,0xac,0xf4,0xff,0x40,0x14,0x60,0x45,0x85,0xac,\r
+0x02,0x80,0x02,0x3c,0x68,0x15,0x56,0x24,0xff,0xff,0x02,0x3c,0x21,0xf0,0xc0,0x02,\r
+0xff,0x1f,0x57,0x34,0x21,0x88,0x00,0x00,0x21,0xa0,0x00,0x00,0x24,0x51,0x00,0x08,\r
+0x21,0x90,0xc0,0x02,0x01,0x00,0x31,0x26,0x20,0x00,0x22,0x2a,0x94,0x00,0x52,0x26,\r
+0x3d,0x00,0x40,0x10,0x94,0x00,0x94,0x26,0x84,0x51,0x44,0x8e,0x01,0x00,0x03,0x24,\r
+0x02,0x13,0x04,0x00,0x01,0x00,0x53,0x30,0xf6,0xff,0x63,0x16,0x07,0x00,0x82,0x30,\r
+0x25,0xb0,0x03,0x3c,0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,0x84,0x01,0x45,0x8c,\r
+0x7c,0x51,0x43,0x8e,0x21,0x20,0x20,0x02,0x24,0x28,0xa3,0x00,0x6a,0x0f,0x00,0x0c,\r
+0x80,0x51,0x45,0xae,0x86,0x51,0x44,0x92,0xe9,0x0e,0x00,0x0c,0xff,0x00,0x25,0x32,\r
+0x84,0x51,0x42,0x8e,0x00,0x00,0x00,0x00,0x24,0x10,0x57,0x00,0x00,0x20,0x42,0x34,\r
+0x84,0x51,0x42,0xae,0x86,0x51,0x50,0x92,0x00,0x00,0x00,0x00,0x21,0x20,0x00,0x02,\r
+0xff,0x0e,0x00,0x0c,0x80,0x80,0x10,0x00,0x21,0x80,0x16,0x02,0x54,0x51,0x40,0xae,\r
+0x58,0x51,0x40,0xae,0x5c,0x51,0x40,0xae,0x60,0x51,0x40,0xae,0x64,0x51,0x40,0xae,\r
+0x68,0x51,0x40,0xae,0x6c,0x51,0x40,0xae,0x70,0x51,0x40,0xae,0xec,0x44,0x04,0x8e,\r
+0x60,0x45,0x03,0x8e,0x26,0x10,0x53,0x00,0x21,0x30,0x00,0x00,0x21,0x18,0x64,0x00,\r
+0x42,0x18,0x03,0x00,0x04,0x00,0x04,0x24,0x0a,0xa8,0x82,0x00,0x50,0x51,0x43,0xae,\r
+0x21,0x20,0x9e,0x02,0x21,0x10,0x86,0x00,0x01,0x00,0xc6,0x24,0x1d,0x00,0xc3,0x28,\r
+0xc2,0x51,0x40,0xa0,0x88,0x51,0x40,0xa0,0xfa,0xff,0x60,0x14,0xa5,0x51,0x40,0xa0,\r
+0x01,0x00,0x31,0x26,0x20,0x00,0x22,0x2a,0xe0,0x51,0x80,0xac,0x94,0x00,0x52,0x26,\r
+0xc5,0xff,0x40,0x14,0x94,0x00,0x94,0x26,0x25,0xb0,0x02,0x3c,0x80,0x01,0x42,0x34,\r
+0x00,0x00,0x55,0xa0,0x10,0x00,0xa3,0x8f,0x00,0x00,0x00,0x00,0x03,0x00,0x60,0x14,\r
+0x02,0x80,0x03,0x3c,0x68,0x15,0x62,0x24,0xec,0x65,0x40,0xac,0x3c,0x00,0xbf,0x8f,\r
+0x38,0x00,0xbe,0x8f,0x34,0x00,0xb7,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,\r
+0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,\r
+0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x40,0x00,0xbd,0x27,0x02,0x80,0x02,0x3c,\r
+0x50,0x9e,0x45,0x24,0x90,0x44,0xc4,0x24,0x21,0x88,0x00,0x00,0x21,0x10,0x25,0x02,\r
+0x00,0x00,0x43,0x90,0x01,0x00,0x31,0x26,0x1d,0x00,0x22,0x2a,0x00,0x00,0x83,0xa0,\r
+0xfa,0xff,0x40,0x14,0x01,0x00,0x84,0x24,0x02,0x80,0x02,0x3c,0x68,0x15,0x4a,0x24,\r
+0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0x0c,0x9d,0x6c,0x24,0xac,0x9b,0x4b,0x24,\r
+0x21,0x88,0x00,0x00,0x21,0x48,0x00,0x00,0x21,0x30,0x00,0x00,0x21,0x40,0x2a,0x01,\r
+0x21,0x38,0x2c,0x01,0x21,0x10,0xe6,0x00,0x91,0x00,0x44,0x90,0x00,0x00,0x45,0x90,\r
+0x21,0x18,0x06,0x01,0x01,0x00,0xc6,0x24,0x05,0x00,0xc2,0x28,0xc5,0x43,0x64,0xa0,\r
+0xf8,0xff,0x40,0x14,0x34,0x43,0x65,0xa0,0x21,0x10,0x2b,0x02,0x1d,0x00,0x44,0x90,\r
+0x00,0x00,0x45,0x90,0x21,0x18,0x2a,0x02,0x01,0x00,0x31,0x26,0x1d,0x00,0x22,0x2a,\r
+0x73,0x44,0x64,0xa0,0x56,0x44,0x65,0xa0,0xeb,0xff,0x40,0x14,0x05,0x00,0x29,0x25,\r
+0x02,0x80,0x02,0x3c,0x68,0x15,0x49,0x24,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,\r
+0xe4,0x9e,0x68,0x24,0x70,0x9e,0x47,0x24,0x21,0x88,0x00,0x00,0x80,0x18,0x11,0x00,\r
+0x21,0x10,0x68,0x00,0x21,0x20,0x67,0x00,0x00,0x00,0x46,0x8c,0x00,0x00,0x85,0x8c,\r
+0x01,0x00,0x31,0x26,0x21,0x18,0x69,0x00,0x1d,0x00,0x22,0x2a,0xec,0x44,0x65,0xac,\r
+0xf6,0xff,0x40,0x14,0x60,0x45,0x66,0xac,0x17,0x51,0x00,0x08,0x02,0x80,0x02,0x3c,\r
+0xd8,0xff,0xbd,0x27,0xff,0xff,0x84,0x30,0x18,0x00,0xb2,0xaf,0xf0,0x01,0x92,0x30,\r
+0x02,0x91,0x12,0x00,0x14,0x00,0xb1,0xaf,0xc0,0x88,0x12,0x00,0x21,0x88,0x32,0x02,\r
+0x80,0x88,0x11,0x00,0x21,0x88,0x32,0x02,0x02,0x80,0x02,0x3c,0x68,0x15,0x42,0x24,\r
+0x80,0x88,0x11,0x00,0x21,0x88,0x22,0x02,0x20,0x00,0xbf,0xaf,0x1c,0x00,0xb3,0xaf,\r
+0x10,0x00,0xb0,0xaf,0x84,0x51,0x30,0x8e,0x00,0x02,0x83,0x30,0xff,0xfe,0x02,0x24,\r
+0x2b,0x18,0x03,0x00,0x00,0x10,0x10,0x36,0x24,0x80,0x02,0x02,0x00,0x1a,0x03,0x00,\r
+0x00,0x04,0x82,0x30,0x25,0x80,0x03,0x02,0x2b,0x10,0x02,0x00,0xf7,0xff,0x03,0x24,\r
+0x24,0x80,0x03,0x02,0xc0,0x10,0x02,0x00,0x25,0x80,0x02,0x02,0x7c,0x51,0x25,0xae,\r
+0x84,0x51,0x30,0xae,0x3c,0x10,0x00,0x0c,0x21,0x98,0xa0,0x00,0xf8,0xff,0x03,0x24,\r
+0x24,0x80,0x03,0x02,0x07,0x00,0x42,0x30,0x25,0x80,0x02,0x02,0x07,0x00,0x03,0x32,\r
+0x25,0xb0,0x02,0x3c,0x80,0x18,0x03,0x00,0x84,0x51,0x30,0xae,0x21,0x18,0x62,0x00,\r
+0x84,0x01,0x62,0x8c,0x21,0x20,0x40,0x02,0x24,0x10,0x53,0x00,0x6a,0x0f,0x00,0x0c,\r
+0x80,0x51,0x22,0xae,0x86,0x51,0x24,0x92,0x21,0x28,0x40,0x02,0x20,0x00,0xbf,0x8f,\r
+0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,\r
+0xe9,0x0e,0x00,0x08,0x28,0x00,0xbd,0x27,0xaa,0x4f,0x00,0x08,0xff,0x00,0x84,0x30,\r
+0x02,0x80,0x02,0x3c,0x68,0x15,0x43,0x24,0x1f,0x00,0x04,0x24,0x84,0x51,0x62,0x8c,\r
+0xff,0xff,0x84,0x24,0x00,0x10,0x42,0x34,0x84,0x51,0x62,0xac,0xfb,0xff,0x81,0x04,\r
+0x94,0x00,0x63,0x24,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x85,0xac,\r
+0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,\r
+0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x23,0x10,0xa4,0x00,0x2b,0x18,0xa4,0x00,0x23,0x20,0x85,0x00,0x08,0x00,0xe0,0x03,\r
+0x0b,0x10,0x83,0x00,0x20,0xff,0xbd,0x27,0xcc,0x00,0xb5,0xaf,0xdc,0x00,0xbf,0xaf,\r
+0xd8,0x00,0xbe,0xaf,0xd4,0x00,0xb7,0xaf,0xd0,0x00,0xb6,0xaf,0xc8,0x00,0xb4,0xaf,\r
+0xc4,0x00,0xb3,0xaf,0xc0,0x00,0xb2,0xaf,0xbc,0x00,0xb1,0xaf,0xb8,0x00,0xb0,0xaf,\r
+0x21,0xa8,0x00,0x00,0x40,0x11,0x15,0x00,0x10,0x00,0xa3,0x27,0x21,0x10,0x43,0x00,\r
+0x07,0x00,0x16,0x24,0xff,0xff,0xd6,0x26,0x00,0x00,0x40,0xac,0xfd,0xff,0xc1,0x06,\r
+0x04,0x00,0x42,0x24,0x01,0x00,0xb5,0x26,0x03,0x00,0xa2,0x2e,0xf6,0xff,0x40,0x14,\r
+0x40,0x11,0x15,0x00,0x25,0xb0,0x10,0x3c,0xc4,0x02,0x02,0x36,0x00,0x00,0x40,0xac,\r
+0x04,0x00,0x03,0x36,0x00,0x00,0x62,0x8c,0x04,0x0c,0x03,0x36,0x00,0x00,0x63,0x8c,\r
+0x08,0x0c,0x04,0x36,0x0f,0x00,0x11,0x3c,0xac,0x00,0xa3,0xaf,0x00,0x00,0x84,0x8c,\r
+0x24,0x10,0x51,0x00,0x02,0xf4,0x02,0x00,0xb0,0x00,0xa4,0xaf,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x21,0x20,0x00,0x00,\r
+0x95,0x44,0x00,0x0c,0xff,0xff,0x25,0x36,0x70,0x00,0xa2,0xaf,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,\r
+0x2a,0x42,0x00,0x0c,0x01,0x00,0x04,0x24,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x21,0x20,0x00,0x00,0x95,0x44,0x00,0x0c,\r
+0xff,0xff,0x25,0x36,0x74,0x00,0xa2,0xaf,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x00,0x60,0x81,0x40,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,0x2a,0x42,0x00,0x0c,\r
+0x21,0x20,0x00,0x00,0xe0,0x0e,0x02,0x36,0x21,0x20,0x40,0x00,0x00,0x00,0x42,0x8c,\r
+0xdc,0x0e,0x12,0x36,0x70,0x0e,0x13,0x36,0x78,0x00,0xa2,0xaf,0x00,0x00,0x42,0x8e,\r
+0x74,0x0e,0x14,0x36,0x78,0x0e,0x15,0x36,0x7c,0x00,0xa2,0xaf,0x00,0x00,0x63,0x8e,\r
+0x7c,0x0e,0x16,0x36,0x80,0x0e,0x17,0x36,0x80,0x00,0xa3,0xaf,0x00,0x00,0x82,0x8e,\r
+0xd4,0x0e,0x10,0x36,0xed,0x3f,0x11,0x3c,0x84,0x00,0xa2,0xaf,0x00,0x00,0xa3,0x8e,\r
+0xfb,0x92,0x25,0x36,0x88,0x00,0xa3,0xaf,0x00,0x00,0xc2,0x8e,0x00,0x00,0x00,0x00,\r
+0x8c,0x00,0xa2,0xaf,0x00,0x00,0xe3,0x8e,0x25,0xb0,0x02,0x3c,0x84,0x0e,0x42,0x34,\r
+0x90,0x00,0xa3,0xaf,0x00,0x00,0x42,0x8c,0x25,0xb0,0x03,0x3c,0x88,0x0e,0x63,0x34,\r
+0x94,0x00,0xa2,0xaf,0x00,0x00,0x63,0x8c,0x25,0xb0,0x02,0x3c,0x8c,0x0e,0x42,0x34,\r
+0x98,0x00,0xa3,0xaf,0x00,0x00,0x42,0x8c,0x25,0xb0,0x03,0x3c,0xd0,0x0e,0x63,0x34,\r
+0x9c,0x00,0xa2,0xaf,0x00,0x00,0x63,0x8c,0x00,0x00,0x00,0x00,0xa0,0x00,0xa3,0xaf,\r
+0x00,0x00,0x02,0x8e,0x25,0xb0,0x03,0x3c,0xd8,0x0e,0x63,0x34,0xa4,0x00,0xa2,0xaf,\r
+0x00,0x00,0x63,0x8c,0xf9,0x51,0x00,0x0c,0xa8,0x00,0xa3,0xaf,0x21,0x20,0x40,0x02,\r
+0xf9,0x51,0x00,0x0c,0xfb,0x92,0x25,0x36,0x21,0x20,0x60,0x02,0xf9,0x51,0x00,0x0c,\r
+0xfb,0x92,0x25,0x36,0x21,0x20,0x80,0x02,0xf9,0x51,0x00,0x0c,0xfb,0x92,0x25,0x36,\r
+0x21,0x20,0xa0,0x02,0xf9,0x51,0x00,0x0c,0xfb,0x92,0x25,0x36,0x21,0x20,0xc0,0x02,\r
+0xf9,0x51,0x00,0x0c,0xfb,0x92,0x25,0x36,0x21,0x20,0xe0,0x02,0xf9,0x51,0x00,0x0c,\r
+0xfb,0x92,0x25,0x36,0x02,0x80,0x02,0x3c,0xd8,0x9f,0x42,0x24,0x00,0x00,0x44,0x8c,\r
+0xfb,0x92,0x25,0x36,0xf9,0x51,0x00,0x0c,0x25,0xb0,0x13,0x3c,0x02,0x80,0x03,0x3c,\r
+0xdc,0x9f,0x63,0x24,0x00,0x00,0x64,0x8c,0xfb,0x92,0x25,0x36,0xf9,0x51,0x00,0x0c,\r
+0x21,0xb0,0x00,0x00,0x02,0x80,0x02,0x3c,0xe0,0x9f,0x42,0x24,0x00,0x00,0x44,0x8c,\r
+0xfb,0x92,0x25,0x36,0xf9,0x51,0x00,0x0c,0xff,0x03,0x14,0x3c,0x02,0x80,0x03,0x3c,\r
+0xe4,0x9f,0x63,0x24,0x00,0x00,0x64,0x8c,0xfb,0x92,0x25,0x36,0xf9,0x51,0x00,0x0c,\r
+0x10,0x00,0xb7,0x27,0x21,0x20,0x00,0x02,0xf9,0x51,0x00,0x0c,0xfb,0x92,0x25,0x36,\r
+0x02,0x80,0x02,0x3c,0xe8,0x9f,0x42,0x24,0x00,0x00,0x44,0x8c,0xf9,0x51,0x00,0x0c,\r
+0xfb,0x92,0x25,0x36,0xe5,0x52,0x00,0x08,0x21,0xa8,0x00,0x00,0x6e,0x00,0xc2,0x13,\r
+0x02,0x80,0x02,0x3c,0xac,0x0e,0x62,0x36,0x94,0x0e,0x63,0x36,0x00,0x00,0x48,0x8c,\r
+0x00,0x00,0x64,0x8c,0xb4,0x0e,0x62,0x36,0x9c,0x0e,0x63,0x36,0x00,0x00,0x45,0x8c,\r
+0x00,0x00,0x66,0x8c,0x25,0xb0,0x03,0x3c,0xbc,0x0e,0x63,0x34,0x00,0x00,0x67,0x8c,\r
+0x24,0x20,0x94,0x00,0x00,0xd8,0x02,0x3c,0x24,0x10,0x02,0x01,0x24,0x28,0xb4,0x00,\r
+0x24,0x30,0xd4,0x00,0x24,0x38,0xf4,0x00,0x02,0x24,0x04,0x00,0x20,0x01,0x03,0x24,\r
+0x01,0x00,0x42,0x2c,0x02,0x2c,0x05,0x00,0x02,0x34,0x06,0x00,0xe8,0x00,0x83,0x10,\r
+0x02,0x3c,0x07,0x00,0xe6,0x00,0xa3,0x10,0x20,0x00,0x03,0x24,0xe4,0x00,0xc3,0x10,\r
+0x00,0x00,0x00,0x00,0xe2,0x00,0xe3,0x10,0x01,0x00,0x08,0x24,0x80,0x00,0x03,0x24,\r
+0x08,0x00,0x83,0x10,0x21,0x20,0x00,0x00,0x06,0x00,0xa3,0x10,0x21,0x20,0x00,0x00,\r
+0xe0,0x03,0x03,0x24,0x03,0x00,0xc3,0x10,0x00,0x00,0x00,0x00,0xdb,0x00,0xe3,0x10,\r
+0x01,0x00,0x04,0x24,0x05,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x11,\r
+0x00,0x00,0x00,0x00,0xd7,0x00,0x80,0x14,0x94,0x0e,0x63,0x36,0x01,0x00,0xb5,0x26,\r
+0x0a,0x00,0xa2,0x2e,0x01,0x01,0x40,0x10,0x00,0x00,0x00,0x00,0xcb,0xff,0xc0,0x17,\r
+0x01,0x00,0x02,0x24,0xa0,0x00,0x03,0x3c,0x30,0x54,0x65,0x34,0xf9,0x51,0x00,0x0c,\r
+0x04,0x0c,0x64,0x36,0x08,0x00,0x05,0x3c,0xe4,0x00,0xa5,0x34,0xf9,0x51,0x00,0x0c,\r
+0x08,0x0c,0x64,0x36,0x28,0x0e,0x64,0x36,0xf9,0x51,0x00,0x0c,0x80,0x80,0x05,0x3c,\r
+0x14,0x02,0x02,0x3c,0x48,0x01,0x45,0x34,0xf9,0x51,0x00,0x0c,0x40,0x0e,0x64,0x36,\r
+0x16,0x68,0x05,0x3c,0xa2,0x04,0xa5,0x34,0xf9,0x51,0x00,0x0c,0x44,0x0e,0x64,0x36,\r
+0x4c,0x0e,0x64,0x36,0xf9,0x51,0x00,0x0c,0xd1,0x28,0x05,0x24,0x14,0x02,0x03,0x3c,\r
+0x4d,0x01,0x65,0x34,0xf9,0x51,0x00,0x0c,0x60,0x0e,0x64,0x36,0x16,0x28,0x05,0x3c,\r
+0xba,0x08,0xa5,0x34,0xf9,0x51,0x00,0x0c,0x64,0x0e,0x64,0x36,0x6c,0x0e,0x64,0x36,\r
+0xf9,0x51,0x00,0x0c,0xd1,0x28,0x05,0x24,0x00,0xfb,0x05,0x3c,0x01,0x00,0xa5,0x34,\r
+0xf9,0x51,0x00,0x0c,0x48,0x0e,0x64,0x36,0x00,0xf8,0x05,0x3c,0x01,0x00,0xa5,0x34,\r
+0xf9,0x51,0x00,0x0c,0x48,0x0e,0x64,0x36,0xeb,0x0b,0x00,0x0c,0x03,0x00,0x04,0x24,\r
+0xa0,0x00,0x02,0x3c,0x33,0x54,0x45,0x34,0xf9,0x51,0x00,0x0c,0x04,0x0c,0x64,0x36,\r
+0x08,0x0c,0x64,0x36,0xf9,0x51,0x00,0x0c,0xe4,0x00,0x05,0x24,0x28,0x0e,0x64,0x36,\r
+0xf9,0x51,0x00,0x0c,0x21,0x28,0x00,0x00,0x01,0x00,0x02,0x24,0x96,0xff,0xc2,0x17,\r
+0xac,0x0e,0x62,0x36,0x02,0x80,0x02,0x3c,0xec,0x9f,0x42,0x24,0x25,0xb0,0x03,0x3c,\r
+0x00,0x00,0x44,0x8c,0x20,0x08,0x63,0x34,0x00,0x00,0x71,0x8c,0x00,0x01,0x03,0x3c,\r
+0x00,0x01,0x65,0x34,0xf9,0x51,0x00,0x0c,0x25,0xb0,0x12,0x3c,0x00,0x01,0x02,0x3c,\r
+0x00,0x01,0x45,0x34,0xf9,0x51,0x00,0x0c,0x28,0x08,0x44,0x36,0xa0,0x00,0x03,0x3c,\r
+0x30,0x54,0x65,0x34,0xf9,0x51,0x00,0x0c,0x04,0x0c,0x44,0x36,0x08,0x00,0x05,0x3c,\r
+0xe4,0x00,0xa5,0x34,0xf9,0x51,0x00,0x0c,0x08,0x0c,0x44,0x36,0x28,0x0e,0x44,0x36,\r
+0xf9,0x51,0x00,0x0c,0x80,0x80,0x05,0x3c,0x00,0x01,0x02,0x3c,0x00,0x7c,0x45,0x34,\r
+0xf9,0x51,0x00,0x0c,0x30,0x0e,0x44,0x36,0x00,0x01,0x03,0x3c,0x00,0x48,0x65,0x34,\r
+0xf9,0x51,0x00,0x0c,0x34,0x0e,0x44,0x36,0x00,0x10,0x02,0x3c,0x1f,0xdc,0x45,0x34,\r
+0xf9,0x51,0x00,0x0c,0x38,0x0e,0x44,0x36,0x00,0x10,0x03,0x3c,0x1f,0x8c,0x65,0x34,\r
+0xf9,0x51,0x00,0x0c,0x3c,0x0e,0x44,0x36,0x14,0x02,0x02,0x3c,0x02,0x01,0x45,0x34,\r
+0xf9,0x51,0x00,0x0c,0x40,0x0e,0x44,0x36,0x16,0x68,0x05,0x3c,0xc7,0x04,0xa5,0x34,\r
+0xf9,0x51,0x00,0x0c,0x44,0x0e,0x44,0x36,0x4c,0x0e,0x44,0x36,0xf9,0x51,0x00,0x0c,\r
+0xd1,0x28,0x05,0x24,0x6c,0x0e,0x44,0x36,0xf9,0x51,0x00,0x0c,0xd1,0x28,0x05,0x24,\r
+0x00,0x01,0x03,0x3c,0x00,0x7c,0x65,0x34,0xf9,0x51,0x00,0x0c,0x50,0x0e,0x44,0x36,\r
+0x00,0x01,0x02,0x3c,0x00,0x48,0x45,0x34,0xf9,0x51,0x00,0x0c,0x54,0x0e,0x44,0x36,\r
+0x00,0x10,0x03,0x3c,0x23,0xdc,0x65,0x34,0xf9,0x51,0x00,0x0c,0x58,0x0e,0x44,0x36,\r
+0x00,0x10,0x02,0x3c,0x23,0x8c,0x45,0x34,0xf9,0x51,0x00,0x0c,0x5c,0x0e,0x44,0x36,\r
+0x14,0x02,0x03,0x3c,0x02,0x01,0x65,0x34,0xf9,0x51,0x00,0x0c,0x60,0x0e,0x44,0x36,\r
+0x16,0x28,0x05,0x3c,0x07,0x0d,0xa5,0x34,0xf9,0x51,0x00,0x0c,0x64,0x0e,0x44,0x36,\r
+0x48,0x0e,0x44,0x36,0xf9,0x51,0x00,0x0c,0x00,0xfb,0x05,0x3c,0x00,0xf8,0x05,0x3c,\r
+0xf9,0x51,0x00,0x0c,0x48,0x0e,0x44,0x36,0x00,0x02,0x10,0x3c,0xeb,0x0b,0x00,0x0c,\r
+0x03,0x00,0x04,0x24,0x4c,0x0e,0x44,0x36,0xf9,0x51,0x00,0x0c,0xd1,0x28,0x05,0x36,\r
+0xd1,0x28,0x05,0x36,0xf9,0x51,0x00,0x0c,0x6c,0x0e,0x44,0x36,0x48,0x0e,0x44,0x36,\r
+0xf9,0x51,0x00,0x0c,0x00,0xfb,0x05,0x3c,0x00,0xf8,0x05,0x3c,0xf9,0x51,0x00,0x0c,\r
+0x48,0x0e,0x44,0x36,0xeb,0x0b,0x00,0x0c,0x03,0x00,0x04,0x24,0xac,0x00,0xa5,0x8f,\r
+0x04,0x0c,0x44,0x36,0xf9,0x51,0x00,0x0c,0x00,0x01,0x31,0x32,0xb0,0x00,0xa5,0x8f,\r
+0x08,0x0c,0x44,0x36,0xf9,0x51,0x00,0x0c,0x2b,0x88,0x11,0x00,0x28,0x0e,0x44,0x36,\r
+0xf9,0x51,0x00,0x0c,0x21,0x28,0x00,0x00,0x23,0xff,0x20,0x16,0xac,0x0e,0x62,0x36,\r
+0x02,0x80,0x02,0x3c,0xec,0x9f,0x42,0x24,0x00,0x00,0x44,0x8c,0xf9,0x51,0x00,0x0c,\r
+0x00,0x01,0x05,0x3c,0x28,0x08,0x44,0x36,0xf9,0x51,0x00,0x0c,0x00,0x01,0x05,0x3c,\r
+0xac,0x0e,0x62,0x36,0x94,0x0e,0x63,0x36,0x00,0x00,0x48,0x8c,0x00,0x00,0x64,0x8c,\r
+0xb4,0x0e,0x62,0x36,0x9c,0x0e,0x63,0x36,0x00,0x00,0x45,0x8c,0x00,0x00,0x66,0x8c,\r
+0x25,0xb0,0x03,0x3c,0xbc,0x0e,0x63,0x34,0x00,0x00,0x67,0x8c,0x24,0x20,0x94,0x00,\r
+0x00,0xd8,0x02,0x3c,0x24,0x10,0x02,0x01,0x24,0x28,0xb4,0x00,0x24,0x30,0xd4,0x00,\r
+0x24,0x38,0xf4,0x00,0x02,0x24,0x04,0x00,0x20,0x01,0x03,0x24,0x01,0x00,0x42,0x2c,\r
+0x02,0x2c,0x05,0x00,0x02,0x34,0x06,0x00,0x1a,0xff,0x83,0x14,0x02,0x3c,0x07,0x00,\r
+0x80,0x00,0x03,0x24,0x20,0xff,0x83,0x14,0x21,0x40,0x00,0x00,0xdb,0x52,0x00,0x08,\r
+0x21,0x20,0x00,0x00,0x00,0x00,0x62,0x8c,0x9c,0x0e,0x65,0x36,0xa4,0x0e,0x66,0x36,\r
+0x24,0x10,0x54,0x00,0x02,0x14,0x02,0x00,0x00,0x00,0xe2,0xae,0x00,0x00,0xa4,0x8c,\r
+0xac,0x0e,0x67,0x36,0xb4,0x0e,0x65,0x36,0x24,0x20,0x94,0x00,0x02,0x24,0x04,0x00,\r
+0x04,0x00,0xe4,0xae,0x00,0x00,0xc3,0x8c,0xc4,0x0e,0x64,0x36,0x24,0x18,0x74,0x00,\r
+0x02,0x1c,0x03,0x00,0x08,0x00,0xe3,0xae,0x00,0x00,0xe2,0x8c,0x00,0x00,0x00,0x00,\r
+0x24,0x10,0x54,0x00,0x02,0x14,0x02,0x00,0x0c,0x00,0xe2,0xae,0x00,0x00,0xa3,0x8c,\r
+0x00,0x00,0x00,0x00,0x24,0x18,0x74,0x00,0x02,0x1c,0x03,0x00,0x10,0x00,0xe3,0xae,\r
+0x25,0xb0,0x03,0x3c,0xbc,0x0e,0x63,0x34,0x00,0x00,0x62,0x8c,0x00,0x00,0x00,0x00,\r
+0x24,0x10,0x54,0x00,0x02,0x14,0x02,0x00,0x14,0x00,0xe2,0xae,0x00,0x00,0x83,0x8c,\r
+0x00,0x00,0x00,0x00,0x24,0x18,0x74,0x00,0x02,0x1c,0x03,0x00,0x18,0x00,0xe3,0xae,\r
+0x25,0xb0,0x03,0x3c,0xcc,0x0e,0x63,0x34,0x00,0x00,0x62,0x8c,0x00,0x00,0x00,0x00,\r
+0x24,0x10,0x54,0x00,0x02,0x14,0x02,0x00,0x1c,0x00,0xe2,0xae,0x01,0x00,0xd6,0x26,\r
+0x03,0x00,0xc2,0x2e,0xc7,0xfe,0x40,0x14,0x20,0x00,0xf7,0x26,0x10,0x00,0xb0,0x8f,\r
+0x00,0x00,0x00,0x00,0x49,0x01,0x00,0x16,0x00,0x00,0x00,0x00,0x30,0x00,0xb1,0x8f,\r
+0x00,0x00,0x00,0x00,0x06,0x00,0x20,0x16,0x21,0x20,0x00,0x02,0x50,0x00,0xa2,0x8f,\r
+0x00,0x00,0x00,0x00,0x29,0x00,0x40,0x10,0xff,0x00,0x05,0x24,0x21,0x20,0x00,0x02,\r
+0x02,0x52,0x00,0x0c,0x21,0x28,0x20,0x02,0x03,0x00,0x42,0x2c,0x08,0x00,0x40,0x10,\r
+0x00,0x00,0x00,0x00,0x34,0x00,0xa5,0x8f,0x14,0x00,0xa4,0x8f,0x02,0x52,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x03,0x00,0x42,0x2c,0x1c,0x00,0x40,0x14,0x21,0x28,0x00,0x00,\r
+0x50,0x00,0xb2,0x8f,0x21,0x20,0x00,0x02,0x02,0x52,0x00,0x0c,0x21,0x28,0x40,0x02,\r
+0x03,0x00,0x42,0x2c,0x09,0x00,0x40,0x10,0x21,0x20,0x20,0x02,0x54,0x00,0xa5,0x8f,\r
+0x14,0x00,0xa4,0x8f,0x02,0x52,0x00,0x0c,0x00,0x00,0x00,0x00,0x03,0x00,0x42,0x2c,\r
+0x0e,0x00,0x40,0x14,0x21,0x28,0x00,0x00,0x21,0x20,0x20,0x02,0x02,0x52,0x00,0x0c,\r
+0x21,0x28,0x40,0x02,0x03,0x00,0x42,0x2c,0xe0,0x00,0x40,0x10,0x00,0x00,0x00,0x00,\r
+0x54,0x00,0xa5,0x8f,0x34,0x00,0xa4,0x8f,0x02,0x52,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x03,0x00,0x42,0x2c,0xd9,0x00,0x40,0x10,0x01,0x00,0x05,0x24,0xff,0x00,0x02,0x24,\r
+0xdb,0x00,0xa2,0x10,0x25,0xb0,0x03,0x3c,0x10,0x00,0xa2,0x27,0x40,0x29,0x05,0x00,\r
+0x02,0x80,0x0f,0x3c,0x21,0x28,0xa2,0x00,0x68,0x15,0xec,0x25,0x00,0x00,0xa6,0x8c,\r
+0x0c,0x00,0xa7,0x8c,0x0c,0x40,0x83,0x8d,0x10,0x40,0x84,0x8d,0x04,0x00,0xa8,0x8c,\r
+0x10,0x00,0xa9,0x8c,0x00,0xfc,0x02,0x24,0x08,0x00,0xaa,0x8c,0x14,0x00,0xab,0x8c,\r
+0x24,0x20,0x82,0x00,0xff,0x03,0xc6,0x30,0x24,0x18,0x62,0x00,0xff,0x03,0xe7,0x30,\r
+0xf0,0xff,0x02,0x3c,0xff,0x03,0x42,0x34,0x25,0x18,0x66,0x00,0x25,0x20,0x87,0x00,\r
+0xff,0x03,0x08,0x31,0xff,0x03,0x29,0x31,0x24,0x20,0x82,0x00,0x24,0x18,0x62,0x00,\r
+0x80,0x42,0x08,0x00,0x80,0x4a,0x09,0x00,0x0f,0xc0,0x02,0x3c,0x1c,0x00,0xa6,0x8c,\r
+0x18,0x00,0xa7,0x8c,0xff,0xff,0x42,0x34,0x25,0x18,0x68,0x00,0x25,0x20,0x89,0x00,\r
+0xff,0x03,0x4a,0x31,0xff,0x03,0x6b,0x31,0x24,0x20,0x82,0x00,0x00,0x55,0x0a,0x00,\r
+0x24,0x18,0x62,0x00,0x00,0x5d,0x0b,0x00,0x25,0x18,0x6a,0x00,0x25,0x20,0x8b,0x00,\r
+0x16,0x40,0x86,0xa5,0x0c,0x40,0x83,0xad,0x10,0x40,0x84,0xad,0x14,0x40,0x87,0xa5,\r
+0x68,0x15,0xf1,0x25,0x10,0x40,0x22,0x8e,0x01,0x00,0x03,0x24,0x82,0x17,0x02,0x00,\r
+0x4d,0x00,0x43,0x10,0x25,0xb0,0x12,0x3c,0x0c,0x40,0x23,0x8e,0x80,0x0c,0x44,0x36,\r
+0x00,0x00,0x88,0x8c,0x00,0x02,0x62,0x30,0xc0,0xff,0x13,0x3c,0x82,0x6d,0x08,0x00,\r
+0x03,0x00,0x40,0x10,0xff,0x03,0x65,0x30,0x00,0xfc,0x02,0x24,0x25,0x28,0xa2,0x00,\r
+0x18,0x00,0xad,0x00,0x82,0x62,0x03,0x00,0xff,0x03,0x8c,0x31,0x00,0x02,0x83,0x31,\r
+0x12,0x10,0x00,0x00,0x02,0x12,0x02,0x00,0x03,0x00,0x60,0x10,0xff,0x03,0x46,0x30,\r
+0x00,0xfc,0x02,0x24,0x25,0x60,0x82,0x01,0x18,0x00,0x8d,0x01,0x00,0xfc,0x74,0x36,\r
+0x24,0x28,0x14,0x01,0x12,0x80,0x00,0x00,0x02,0x82,0x10,0x00,0x3f,0x00,0x02,0x32,\r
+0x00,0x14,0x02,0x00,0x25,0x28,0xa2,0x00,0xf9,0x51,0x00,0x0c,0x25,0x28,0xa6,0x00,\r
+0x94,0x0c,0x44,0x36,0x00,0x00,0x85,0x8c,0xff,0x0f,0x02,0x3c,0xff,0xff,0x55,0x34,\r
+0xc0,0x03,0x10,0x32,0x24,0x28,0xb5,0x00,0x80,0x85,0x10,0x00,0xf9,0x51,0x00,0x0c,\r
+0x25,0x28,0xb0,0x00,0x10,0x40,0x2c,0x8e,0x88,0x0c,0x44,0x36,0x00,0x00,0x88,0x8c,\r
+0x82,0x2a,0x0c,0x00,0xff,0x03,0xa5,0x30,0x24,0x10,0x13,0x01,0x00,0x02,0xa3,0x30,\r
+0x03,0x00,0x60,0x10,0x82,0x6d,0x02,0x00,0x00,0xfc,0x02,0x24,0x25,0x28,0xa2,0x00,\r
+0x18,0x00,0xad,0x00,0x02,0x65,0x0c,0x00,0xff,0x03,0x8c,0x31,0x00,0x02,0x83,0x31,\r
+0x12,0x10,0x00,0x00,0x02,0x12,0x02,0x00,0x03,0x00,0x60,0x10,0xff,0x03,0x46,0x30,\r
+0x00,0xfc,0x02,0x24,0x25,0x60,0x82,0x01,0x18,0x00,0x8d,0x01,0x24,0x28,0x14,0x01,\r
+0x12,0x80,0x00,0x00,0x02,0x82,0x10,0x00,0x3f,0x00,0x02,0x32,0x00,0x14,0x02,0x00,\r
+0x25,0x28,0xa2,0x00,0xf9,0x51,0x00,0x0c,0x25,0x28,0xa6,0x00,0x9c,0x0c,0x44,0x36,\r
+0x00,0x00,0x85,0x8c,0xc0,0x03,0x10,0x32,0x80,0x85,0x10,0x00,0x24,0x28,0xb5,0x00,\r
+0xf9,0x51,0x00,0x0c,0x25,0x28,0xb0,0x00,0x78,0x00,0xa5,0x8f,0x25,0xb0,0x10,0x3c,\r
+0xf9,0x51,0x00,0x0c,0xe0,0x0e,0x04,0x36,0x7c,0x00,0xa5,0x8f,0xf9,0x51,0x00,0x0c,\r
+0xdc,0x0e,0x04,0x36,0x80,0x00,0xa5,0x8f,0xf9,0x51,0x00,0x0c,0x70,0x0e,0x04,0x36,\r
+0x84,0x00,0xa5,0x8f,0xf9,0x51,0x00,0x0c,0x74,0x0e,0x04,0x36,0x88,0x00,0xa5,0x8f,\r
+0xf9,0x51,0x00,0x0c,0x78,0x0e,0x04,0x36,0x8c,0x00,0xa5,0x8f,0xf9,0x51,0x00,0x0c,\r
+0x7c,0x0e,0x04,0x36,0x90,0x00,0xa5,0x8f,0xf9,0x51,0x00,0x0c,0x80,0x0e,0x04,0x36,\r
+0x94,0x00,0xa5,0x8f,0xf9,0x51,0x00,0x0c,0x84,0x0e,0x04,0x36,0x98,0x00,0xa5,0x8f,\r
+0xf9,0x51,0x00,0x0c,0x88,0x0e,0x04,0x36,0x9c,0x00,0xa5,0x8f,0xf9,0x51,0x00,0x0c,\r
+0x8c,0x0e,0x04,0x36,0xa0,0x00,0xa5,0x8f,0xf9,0x51,0x00,0x0c,0xd0,0x0e,0x04,0x36,\r
+0xa4,0x00,0xa5,0x8f,0xf9,0x51,0x00,0x0c,0xd4,0x0e,0x04,0x36,0xa8,0x00,0xa5,0x8f,\r
+0x88,0x0e,0x04,0x36,0xf9,0x51,0x00,0x0c,0x0f,0x00,0x10,0x3c,0x70,0x00,0xa6,0x8f,\r
+0xff,0xff,0x05,0x36,0x6a,0x44,0x00,0x0c,0x21,0x20,0x00,0x00,0x1a,0x0c,0x00,0x0c,\r
+0x64,0x00,0x04,0x24,0x2a,0x42,0x00,0x0c,0x01,0x00,0x04,0x24,0x74,0x00,0xa6,0x8f,\r
+0xff,0xff,0x05,0x36,0x6a,0x44,0x00,0x0c,0x21,0x20,0x00,0x00,0x1a,0x0c,0x00,0x0c,\r
+0x64,0x00,0x04,0x24,0x2a,0x42,0x00,0x0c,0x21,0x20,0x00,0x00,0xff,0xff,0x05,0x36,\r
+0x95,0x44,0x00,0x0c,0x1e,0x00,0x04,0x24,0x21,0x88,0x40,0x00,0xfd,0xff,0x06,0x24,\r
+0x01,0x00,0x42,0x34,0x24,0x30,0x46,0x00,0xff,0xff,0x05,0x36,0x6a,0x44,0x00,0x0c,\r
+0x1e,0x00,0x04,0x24,0xeb,0x0b,0x00,0x0c,0x03,0x00,0x04,0x24,0xff,0xff,0x05,0x36,\r
+0x03,0x00,0x26,0x36,0x6a,0x44,0x00,0x0c,0x1e,0x00,0x04,0x24,0xdc,0x00,0xbf,0x8f,\r
+0xd8,0x00,0xbe,0x8f,0xd4,0x00,0xb7,0x8f,0xd0,0x00,0xb6,0x8f,0xcc,0x00,0xb5,0x8f,\r
+0xc8,0x00,0xb4,0x8f,0xc4,0x00,0xb3,0x8f,0xc0,0x00,0xb2,0x8f,0xbc,0x00,0xb1,0x8f,\r
+0xb8,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0xe0,0x00,0xbd,0x27,0xff,0x00,0x05,0x24,\r
+0xff,0x00,0x02,0x24,0x29,0xff,0xa2,0x14,0x10,0x00,0xa2,0x27,0x25,0xb0,0x03,0x3c,\r
+0x94,0x0e,0x62,0x34,0x9c,0x0e,0x64,0x34,0xa4,0x0e,0x65,0x34,0xac,0x0e,0x66,0x34,\r
+0x02,0x80,0x0f,0x3c,0x00,0x00,0x49,0x8c,0x68,0x15,0xed,0x25,0x00,0x00,0x8c,0x8c,\r
+0x00,0x00,0xae,0x8c,0x00,0x00,0xc7,0x8c,0xb4,0x0e,0x62,0x34,0x0c,0x40,0xa4,0x8d,\r
+0x10,0x40,0xa5,0x8d,0x00,0x00,0x4a,0x8c,0xff,0x03,0x06,0x3c,0x00,0xfc,0x08,0x24,\r
+0xbc,0x0e,0x62,0x34,0x24,0x48,0x26,0x01,0x24,0x38,0xe6,0x00,0x00,0x00,0x4b,0x8c,\r
+0x24,0x28,0xa8,0x00,0x24,0x20,0x88,0x00,0x02,0x3c,0x07,0x00,0xcc,0x0e,0x68,0x34,\r
+0x02,0x4c,0x09,0x00,0xc4,0x0e,0x63,0x34,0xf0,0xff,0x02,0x3c,0xff,0x03,0x42,0x34,\r
+0x25,0x28,0xa7,0x00,0x25,0x20,0x89,0x00,0x00,0x00,0x67,0x8c,0x24,0x60,0x86,0x01,\r
+0x00,0x00,0x03,0x8d,0x24,0x50,0x46,0x01,0x24,0x28,0xa2,0x00,0x24,0x20,0x82,0x00,\r
+0x82,0x61,0x0c,0x00,0x82,0x51,0x0a,0x00,0x0f,0xc0,0x02,0x3c,0xff,0xff,0x42,0x34,\r
+0x25,0x20,0x8c,0x00,0x25,0x28,0xaa,0x00,0x24,0x70,0xc6,0x01,0x24,0x58,0x66,0x01,\r
+0x24,0x28,0xa2,0x00,0x24,0x18,0x66,0x00,0x00,0x71,0x0e,0x00,0x24,0x20,0x82,0x00,\r
+0x00,0x59,0x0b,0x00,0x24,0x38,0xe6,0x00,0x25,0x20,0x8e,0x00,0x25,0x28,0xab,0x00,\r
+0x02,0x3c,0x07,0x00,0x02,0x1c,0x03,0x00,0x16,0x40,0xa3,0xa5,0x0c,0x40,0xa4,0xad,\r
+0x10,0x40,0xa5,0xad,0x4e,0x54,0x00,0x08,0x14,0x40,0xa7,0xa5,0x30,0x00,0xb1,0x8f,\r
+0xf6,0x53,0x00,0x08,0x21,0x20,0x00,0x02,0xe0,0xff,0xbd,0x27,0x44,0x00,0x02,0x24,\r
+0x10,0x00,0xa2,0xa3,0x49,0x00,0x03,0x24,0x47,0x00,0x02,0x24,0x02,0x80,0x07,0x3c,\r
+0x68,0xa5,0xe7,0x24,0x11,0x00,0xa3,0xa3,0x12,0x00,0xa2,0xa3,0x10,0x27,0x03,0x24,\r
+0x01,0x00,0x02,0x24,0x01,0x80,0x06,0x3c,0x10,0x00,0xa5,0x27,0x21,0x20,0xe0,0x00,\r
+0xf4,0x57,0xc6,0x24,0x0c,0x00,0xe3,0xac,0x14,0x00,0xe2,0xa0,0x18,0x00,0xbf,0xaf,\r
+0x88,0x0e,0x00,0x0c,0x13,0x00,0xa0,0xa3,0x18,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xd0,0xff,0xbd,0x27,0x25,0xb0,0x03,0x3c,\r
+0x20,0x00,0xb4,0xaf,0x1c,0x00,0xb3,0xaf,0x2c,0x00,0xbf,0xaf,0x28,0x00,0xb6,0xaf,\r
+0x24,0x00,0xb5,0xaf,0x18,0x00,0xb2,0xaf,0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,\r
+0x03,0x0d,0x64,0x34,0x00,0x00,0x82,0x90,0x00,0x00,0x00,0x00,0xff,0x00,0x54,0x30,\r
+0x70,0x00,0x93,0x32,0x63,0x00,0x60,0x12,0x42,0x00,0x63,0x34,0x8f,0x00,0x82,0x32,\r
+0x00,0x00,0x82,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x5b,0x00,0x60,0x12,\r
+0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0x0f,0x00,0x11,0x3c,0x21,0x20,0x00,0x00,0x95,0x44,0x00,0x0c,\r
+0xff,0xff,0x25,0x36,0x21,0xa8,0x40,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x00,0x60,0x81,0x40,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,0x2a,0x42,0x00,0x0c,\r
+0x01,0x00,0x04,0x24,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0x21,0x20,0x00,0x00,0x95,0x44,0x00,0x0c,0xff,0xff,0x25,0x36,\r
+0x21,0xb0,0x40,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,\r
+0x64,0x00,0x04,0x24,0x1a,0x0c,0x00,0x0c,0x08,0x00,0x10,0x3c,0xff,0xff,0x10,0x36,\r
+0x2a,0x42,0x00,0x0c,0x21,0x20,0x00,0x00,0x01,0x00,0x12,0x3c,0x24,0x30,0xb0,0x02,\r
+0x25,0x30,0xd2,0x00,0xff,0xff,0x25,0x36,0x6a,0x44,0x00,0x0c,0x21,0x20,0x00,0x00,\r
+0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,0x24,0x80,0xd0,0x02,0x2a,0x42,0x00,0x0c,\r
+0x01,0x00,0x04,0x24,0x25,0x30,0x12,0x02,0xff,0xff,0x25,0x36,0x6a,0x44,0x00,0x0c,\r
+0x21,0x20,0x00,0x00,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,0x2a,0x42,0x00,0x0c,\r
+0x21,0x20,0x00,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,\r
+0x00,0x60,0x81,0x40,0x0f,0x00,0x11,0x3c,0x18,0x00,0x04,0x24,0x95,0x44,0x00,0x0c,\r
+0xff,0xff,0x25,0x36,0x21,0x80,0x40,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,\r
+0x00,0x60,0x81,0x40,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,0x18,0x00,0x04,0x24,\r
+0xff,0xff,0x25,0x36,0x6a,0x44,0x00,0x0c,0x00,0x80,0x06,0x36,0xeb,0x0b,0x00,0x0c,\r
+0x03,0x00,0x04,0x24,0x27,0x00,0x60,0x16,0x25,0xb0,0x02,0x3c,0x2c,0x00,0xbf,0x8f,\r
+0x28,0x00,0xb6,0x8f,0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f,\r
+0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x25,0xb0,0x02,0x3c,\r
+0x42,0x00,0x42,0x34,0x30,0x00,0xbd,0x27,0x00,0x00,0x40,0xa0,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0xff,0xff,0x02,0x24,0x00,0x00,0x62,0xa0,0x00,0x60,0x01,0x40,\r
+0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x0f,0x00,0x11,0x3c,\r
+0x18,0x00,0x04,0x24,0x95,0x44,0x00,0x0c,0xff,0xff,0x25,0x36,0x21,0x80,0x40,0x00,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x1a,0x0c,0x00,0x0c,\r
+0x64,0x00,0x04,0x24,0x18,0x00,0x04,0x24,0xff,0xff,0x25,0x36,0x6a,0x44,0x00,0x0c,\r
+0x00,0x80,0x06,0x36,0xeb,0x0b,0x00,0x0c,0x03,0x00,0x04,0x24,0xdb,0xff,0x60,0x12,\r
+0x25,0xb0,0x02,0x3c,0x03,0x0d,0x42,0x34,0x00,0x00,0x54,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x0f,0x00,0x10,0x3c,0x21,0x30,0xa0,0x02,0xff,0xff,0x05,0x36,\r
+0x6a,0x44,0x00,0x0c,0x21,0x20,0x00,0x00,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,\r
+0x2a,0x42,0x00,0x0c,0x01,0x00,0x04,0x24,0xff,0xff,0x05,0x36,0x21,0x30,0xc0,0x02,\r
+0x6a,0x44,0x00,0x0c,0x21,0x20,0x00,0x00,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,\r
+0x2c,0x00,0xbf,0x8f,0x28,0x00,0xb6,0x8f,0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,\r
+0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x21,0x20,0x00,0x00,0x2a,0x42,0x00,0x08,0x30,0x00,0xbd,0x27,0xc0,0xff,0xbd,0x27,\r
+0x28,0x00,0xb4,0xaf,0x02,0x80,0x14,0x3c,0x30,0x00,0xb6,0xaf,0x38,0x00,0xbf,0xaf,\r
+0x34,0x00,0xb7,0xaf,0x2c,0x00,0xb5,0xaf,0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,\r
+0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,0x68,0x15,0x85,0x26,0x0c,0x40,0xa2,0x8c,\r
+0x00,0x00,0x00,0x00,0x82,0x17,0x02,0x00,0x01,0x00,0x42,0x30,0x08,0x00,0x40,0x14,\r
+0x06,0x00,0x16,0x24,0x08,0x40,0xa2,0x8c,0x01,0x00,0x03,0x24,0x42,0x17,0x02,0x00,\r
+0x03,0x00,0x42,0x30,0x5d,0x01,0x43,0x10,0x25,0xb0,0x02,0x3c,0x68,0x15,0x85,0x26,\r
+0x0c,0x40,0xa2,0x8c,0x01,0x00,0x03,0x24,0x82,0x17,0x02,0x00,0x01,0x00,0x44,0x30,\r
+0x0d,0x00,0x83,0x10,0x00,0x00,0x00,0x00,0x38,0x00,0xbf,0x8f,0x34,0x00,0xb7,0x8f,\r
+0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,\r
+0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x40,0x00,0xbd,0x27,0x08,0x40,0xa2,0x8c,0x00,0x00,0x00,0x00,\r
+0x42,0x17,0x02,0x00,0x03,0x00,0x42,0x30,0xef,0xff,0x44,0x14,0x25,0xb0,0x02,0x3c,\r
+0x0e,0x0c,0x44,0x34,0x00,0x00,0x83,0x90,0x00,0x01,0x02,0x24,0xff,0x00,0x63,0x30,\r
+0x01,0x00,0x63,0x24,0x59,0x02,0x62,0x10,0xff,0x00,0x62,0x30,0x00,0x00,0x82,0xa0,\r
+0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,\r
+0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x84,0x26,0x10,0x40,0x82,0x8c,\r
+0x01,0x00,0x03,0x24,0x82,0x17,0x02,0x00,0x73,0x02,0x43,0x10,0x0f,0x00,0x10,0x3c,\r
+0xc7,0x42,0x93,0x90,0x25,0xb0,0x02,0x3c,0x62,0x0c,0x42,0x34,0xff,0x00,0x63,0x32,\r
+0x00,0x00,0x43,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x90,0x26,\r
+0xc6,0x42,0x02,0x92,0x00,0x00,0x00,0x00,0x79,0x01,0x40,0x10,0x01,0x00,0x02,0x24,\r
+0x25,0xb0,0x11,0x3c,0x03,0x0d,0x23,0x36,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,\r
+0x70,0x00,0x42,0x30,0x9f,0x01,0x40,0x14,0xcc,0x00,0x02,0x24,0xc4,0x42,0x02,0x96,\r
+0x00,0x00,0x00,0x00,0x23,0x20,0x53,0x00,0x2b,0x18,0x53,0x00,0x23,0x10,0x62,0x02,\r
+0x0a,0x10,0x83,0x00,0x03,0x00,0x42,0x2c,0x6c,0x01,0x40,0x10,0x00,0x00,0x00,0x00,\r
+0xc4,0x42,0x03,0x92,0x63,0x0c,0x22,0x36,0x21,0x20,0x00,0x00,0x00,0x00,0x43,0xa0,\r
+0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x82,0x24,0x68,0x15,0x83,0x26,0xc3,0x42,0x62,0x90,0x08,0x40,0x66,0x8c,\r
+0xc2,0x42,0x73,0xa0,0x23,0x20,0x53,0x00,0x2b,0x38,0x62,0x02,0x23,0x90,0x62,0x02,\r
+0x02,0x2c,0x06,0x00,0x0b,0x90,0x87,0x00,0x3f,0x00,0xa5,0x30,0x3f,0x00,0xc4,0x30,\r
+0x24,0x00,0x02,0x24,0x20,0x00,0x03,0x24,0x23,0x10,0x44,0x00,0x8a,0x01,0x40,0x16,\r
+0x23,0x18,0x65,0x00,0x21,0x40,0x80,0x00,0x21,0xa8,0xa0,0x00,0x02,0x80,0x17,0x3c,\r
+0x2b,0x28,0xc8,0x02,0x81,0x01,0xa0,0x10,0x68,0x15,0x82,0x26,0x80,0x10,0x08,0x00,\r
+0x68,0x15,0x83,0x26,0x21,0x10,0x43,0x00,0x18,0x40,0x44,0x8c,0x00,0x00,0x00,0x00,\r
+0x82,0x25,0x04,0x00,0x68,0x15,0x86,0x26,0x0c,0x40,0xc3,0x8c,0x00,0x00,0x00,0x00,\r
+0xff,0x03,0x67,0x30,0xe9,0x01,0xe0,0x10,0x00,0x02,0x62,0x30,0x04,0x00,0x40,0x10,\r
+0x18,0x00,0xe4,0x00,0x00,0xfc,0x02,0x24,0x25,0x38,0xe2,0x00,0x18,0x00,0xe4,0x00,\r
+0x82,0x82,0x03,0x00,0xff,0x03,0x10,0x32,0x00,0x02,0x03,0x32,0x12,0x10,0x00,0x00,\r
+0x02,0x12,0x02,0x00,0x03,0x00,0x60,0x10,0xff,0x03,0x45,0x30,0x00,0xfc,0x02,0x24,\r
+0x25,0x80,0x02,0x02,0x18,0x00,0x04,0x02,0x80,0x1d,0x04,0x00,0x25,0xb0,0x11,0x3c,\r
+0x80,0x0c,0x24,0x36,0x94,0x0c,0x31,0x36,0x12,0x80,0x00,0x00,0x02,0x82,0x10,0x00,\r
+0x3f,0x00,0x02,0x32,0x00,0x14,0x02,0x00,0x25,0x18,0x62,0x00,0x25,0x18,0x65,0x00,\r
+0x21,0x28,0x60,0x00,0xf9,0x51,0x00,0x0c,0x10,0x00,0xa3,0xaf,0x00,0x00,0x23,0x8e,\r
+0xff,0x0f,0x02,0x3c,0xc0,0x03,0x10,0x32,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,\r
+0x80,0x85,0x10,0x00,0x25,0x18,0x70,0x00,0x21,0x20,0x20,0x02,0x21,0x28,0x60,0x00,\r
+0x10,0x00,0xa3,0xaf,0xf9,0x51,0x00,0x0c,0x00,0x00,0x00,0x00,0x68,0x15,0x83,0x26,\r
+0x08,0x40,0x62,0x8c,0x00,0x00,0x00,0x00,0x5b,0x01,0x40,0x04,0xc0,0x28,0x15,0x00,\r
+0x21,0x10,0xa3,0x00,0xac,0x40,0x44,0x90,0x25,0xb0,0x03,0x3c,0x22,0x0a,0x63,0x34,\r
+0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26,\r
+0x21,0x10,0xa2,0x00,0xad,0x40,0x44,0x90,0x25,0xb0,0x03,0x3c,0x23,0x0a,0x63,0x34,\r
+0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26,\r
+0x21,0x10,0xa2,0x00,0xae,0x40,0x44,0x90,0x25,0xb0,0x03,0x3c,0x24,0x0a,0x63,0x34,\r
+0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26,\r
+0x21,0x10,0xa2,0x00,0xaf,0x40,0x44,0x90,0x25,0xb0,0x03,0x3c,0x25,0x0a,0x63,0x34,\r
+0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26,\r
+0x21,0x10,0xa2,0x00,0xb0,0x40,0x44,0x90,0x25,0xb0,0x03,0x3c,0x26,0x0a,0x63,0x34,\r
+0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26,\r
+0x21,0x10,0xa2,0x00,0xb1,0x40,0x44,0x90,0x25,0xb0,0x03,0x3c,0x27,0x0a,0x63,0x34,\r
+0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26,\r
+0x21,0x10,0xa2,0x00,0xb2,0x40,0x44,0x90,0x25,0xb0,0x03,0x3c,0x28,0x0a,0x63,0x34,\r
+0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26,\r
+0x21,0x10,0xa2,0x00,0xb3,0x40,0x44,0x90,0x25,0xb0,0x03,0x3c,0x29,0x0a,0x63,0x34,\r
+0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0xee,0x7d,0xe3,0x92,\r
+0x22,0x00,0x02,0x24,0x03,0x00,0x62,0x10,0x92,0x00,0x02,0x24,0xfe,0xfe,0x62,0x14,\r
+0x00,0x00,0x00,0x00,0x68,0x15,0x82,0x26,0x08,0x40,0x43,0x8c,0x01,0x00,0x44,0x3a,\r
+0x24,0x00,0x02,0x24,0x02,0x1a,0x03,0x00,0x3f,0x00,0x63,0x30,0x01,0x00,0x84,0x30,\r
+0x87,0x01,0x80,0x10,0x23,0x28,0x43,0x00,0x42,0x18,0x12,0x00,0x40,0x10,0x03,0x00,\r
+0x21,0x90,0x43,0x00,0x68,0x15,0x83,0x26,0xc3,0x42,0x62,0x90,0x00,0x00,0x00,0x00,\r
+0x2b,0x10,0x62,0x02,0x50,0x01,0x40,0x10,0x2b,0x10,0x45,0x02,0x06,0x00,0x40,0x10,\r
+0x24,0x00,0x06,0x24,0x08,0x40,0x62,0x8c,0x00,0x00,0x00,0x00,0x02,0x12,0x02,0x00,\r
+0x3f,0x00,0x42,0x30,0x21,0x30,0x52,0x00,0x2b,0x28,0xc6,0x02,0x50,0x01,0xa0,0x10,\r
+0x68,0x15,0x82,0x26,0x80,0x10,0x06,0x00,0x68,0x15,0x83,0x26,0x21,0x10,0x43,0x00,\r
+0x18,0x40,0x44,0x8c,0x00,0x00,0x00,0x00,0x82,0x25,0x04,0x00,0x68,0x15,0x83,0x26,\r
+0x10,0x40,0x70,0x8c,0x00,0x00,0x00,0x00,0x82,0x3a,0x10,0x00,0xff,0x03,0xe7,0x30,\r
+0x5a,0x01,0xe0,0x10,0x00,0x02,0xe2,0x30,0x04,0x00,0x40,0x10,0x18,0x00,0xe4,0x00,\r
+0x00,0xfc,0x02,0x24,0x25,0x38,0xe2,0x00,0x18,0x00,0xe4,0x00,0x02,0x85,0x10,0x00,\r
+0xff,0x03,0x10,0x32,0x00,0x02,0x03,0x32,0x12,0x10,0x00,0x00,0x02,0x12,0x02,0x00,\r
+0x03,0x00,0x60,0x10,0xff,0x03,0x45,0x30,0x00,0xfc,0x02,0x24,0x25,0x80,0x02,0x02,\r
+0x18,0x00,0x04,0x02,0x80,0x1d,0x04,0x00,0x25,0xb0,0x11,0x3c,0x88,0x0c,0x24,0x36,\r
+0x9c,0x0c,0x31,0x36,0x12,0x80,0x00,0x00,0x02,0x82,0x10,0x00,0x3f,0x00,0x02,0x32,\r
+0x00,0x14,0x02,0x00,0x25,0x18,0x62,0x00,0x25,0x18,0x65,0x00,0x21,0x28,0x60,0x00,\r
+0xf9,0x51,0x00,0x0c,0x10,0x00,0xa3,0xaf,0x00,0x00,0x23,0x8e,0xff,0x0f,0x02,0x3c,\r
+0xff,0xff,0x42,0x34,0xc0,0x03,0x10,0x32,0x24,0x18,0x62,0x00,0x80,0x85,0x10,0x00,\r
+0x25,0x18,0x70,0x00,0x21,0x20,0x20,0x02,0x21,0x28,0x60,0x00,0xf9,0x51,0x00,0x0c,\r
+0x10,0x00,0xa3,0xaf,0x1c,0x56,0x00,0x08,0x00,0x00,0x00,0x00,0x80,0x0c,0x42,0x34,\r
+0x00,0x00,0x43,0x8c,0x21,0x30,0xa0,0x00,0xc0,0xff,0x02,0x3c,0x24,0x20,0x62,0x00,\r
+0x21,0x88,0x00,0x00,0xc0,0xff,0x05,0x3c,0x7e,0x57,0x00,0x08,0x18,0x40,0xc3,0x24,\r
+0x01,0x00,0x31,0x26,0x25,0x00,0x22,0x2e,0x0d,0x00,0x40,0x10,0x02,0x80,0x17,0x3c,\r
+0x00,0x00,0x62,0x8c,0x00,0x00,0x00,0x00,0x24,0x10,0x45,0x00,0xf8,0xff,0x44,0x14,\r
+0x04,0x00,0x63,0x24,0x08,0x40,0xc2,0x8c,0xc0,0xff,0x03,0x24,0x3f,0x00,0x24,0x32,\r
+0x24,0x10,0x43,0x00,0x25,0x10,0x44,0x00,0x08,0x40,0xc2,0xac,0x02,0x80,0x17,0x3c,\r
+0xee,0x7d,0xe3,0x92,0x22,0x00,0x02,0x24,0x44,0x00,0x62,0x10,0x92,0x00,0x02,0x24,\r
+0x43,0x00,0x62,0x10,0x25,0xb0,0x02,0x3c,0x25,0xb0,0x02,0x3c,0x24,0x0a,0x42,0x34,\r
+0x00,0x00,0x44,0x8c,0x3f,0x3f,0x03,0x3c,0x3f,0x3f,0x63,0x34,0x24,0x20,0x83,0x00,\r
+0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0x16,0x56,0x53,0x24,0x1e,0x57,0x72,0x24,\r
+0x21,0x88,0x00,0x00,0xa5,0x57,0x00,0x08,0x10,0x00,0xa4,0xaf,0x95,0x45,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x4d,0x00,0x40,0x10,0x68,0x15,0x85,0x26,0x01,0x00,0x31,0x26,\r
+0x21,0x00,0x22,0x2e,0x17,0x00,0x40,0x10,0x68,0x15,0x84,0x26,0xc0,0x80,0x11,0x00,\r
+0x10,0x00,0xa4,0x27,0x21,0x28,0x13,0x02,0x95,0x45,0x00,0x0c,0x04,0x00,0x06,0x24,\r
+0x21,0x28,0x12,0x02,0x10,0x00,0xa4,0x27,0xf0,0xff,0x40,0x14,0x04,0x00,0x06,0x24,\r
+0x68,0x15,0x85,0x26,0x08,0x40,0xa3,0x8c,0xc0,0xff,0x02,0x3c,0xff,0xff,0x42,0x34,\r
+0x3f,0x00,0x24,0x32,0x24,0x18,0x62,0x00,0x00,0x24,0x04,0x00,0xff,0x7f,0x02,0x3c,\r
+0x25,0x18,0x64,0x00,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0x08,0x40,0xa3,0xac,\r
+0x68,0x15,0x84,0x26,0x0c,0x40,0x83,0x8c,0x00,0x40,0x02,0x3c,0x25,0x18,0x62,0x00,\r
+0x25,0xb0,0x02,0x3c,0x0e,0x0c,0x42,0x34,0x0c,0x40,0x83,0xac,0x00,0x00,0x40,0xa0,\r
+0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,\r
+0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x16,0x56,0x00,0x08,0x68,0x15,0x85,0x26,\r
+0xc6,0x42,0x02,0xa2,0x52,0x56,0x00,0x08,0xc4,0x42,0x13,0xa6,0x50,0x55,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x62,0x56,0x00,0x08,0xc4,0x42,0x13,0xa6,0x25,0xb0,0x02,0x3c,\r
+0x88,0x0c,0x42,0x34,0x00,0x00,0x44,0x8c,0x02,0x80,0x03,0x3c,0x68,0x15,0x66,0x24,\r
+0xc0,0xff,0x02,0x3c,0x24,0x20,0x82,0x00,0x21,0x88,0x00,0x00,0xc0,0xff,0x05,0x3c,\r
+0xe0,0x57,0x00,0x08,0x18,0x40,0xc3,0x24,0x01,0x00,0x31,0x26,0x25,0x00,0x22,0x2e,\r
+0xb2,0xff,0x40,0x10,0x25,0xb0,0x02,0x3c,0x00,0x00,0x62,0x8c,0x00,0x00,0x00,0x00,\r
+0x24,0x10,0x45,0x00,0xf8,0xff,0x44,0x14,0x04,0x00,0x63,0x24,0x08,0x40,0xc2,0x8c,\r
+0x3f,0x00,0x23,0x32,0xff,0xc0,0x04,0x24,0x24,0x10,0x44,0x00,0x00,0x1a,0x03,0x00,\r
+0x25,0x10,0x43,0x00,0x90,0x57,0x00,0x08,0x08,0x40,0xc2,0xac,0x08,0x40,0xa3,0x8c,\r
+0xc0,0xff,0x02,0x3c,0xff,0xff,0x42,0x34,0x3f,0x00,0x24,0x32,0x24,0x18,0x62,0x00,\r
+0x00,0x24,0x04,0x00,0x25,0x18,0x64,0x00,0x00,0x80,0x02,0x3c,0xb9,0x57,0x00,0x08,\r
+0x25,0x18,0x62,0x00,0x63,0x0c,0x23,0x36,0x00,0x00,0x62,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x6c,0x56,0x00,0x08,0x68,0x15,0x83,0x26,0x30,0x40,0x43,0x8c,\r
+0x87,0x56,0x00,0x08,0x82,0x25,0x03,0x00,0x91,0x00,0xe0,0x10,0x21,0x40,0x00,0x00,\r
+0x2b,0x10,0x42,0x02,0x21,0x20,0x92,0x00,0x00,0x00,0x42,0x38,0x24,0x00,0x08,0x24,\r
+0x2b,0x18,0x43,0x02,0x0b,0x40,0x82,0x00,0x70,0xfe,0x60,0x10,0x20,0x00,0x15,0x24,\r
+0x68,0x15,0x83,0x26,0x0a,0x40,0x62,0x94,0x02,0x80,0x17,0x3c,0x3f,0x00,0x42,0x30,\r
+0x7e,0x56,0x00,0x08,0x21,0xa8,0x52,0x00,0x21,0x10,0xa3,0x00,0xb4,0x41,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0x22,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26,0x21,0x10,0xa2,0x00,0xb5,0x41,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0x23,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26,0x21,0x10,0xa2,0x00,0xb6,0x41,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0x24,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26,0x21,0x10,0xa2,0x00,0xb7,0x41,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0x25,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26,0x21,0x10,0xa2,0x00,0xb8,0x41,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0x26,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26,0x21,0x10,0xa2,0x00,0xb9,0x41,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0x27,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26,0x21,0x10,0xa2,0x00,0xba,0x41,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0x28,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26,0x21,0x10,0xa2,0x00,0xbb,0x41,0x44,0x90,\r
+0x25,0xb0,0x03,0x3c,0x29,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,\r
+0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x42,0x24,0x19,0x57,0x00,0x08,0x00,0x00,0x00,0x00,0x28,0x00,0xa0,0x10,\r
+0x80,0x10,0x08,0x00,0x21,0x10,0x46,0x00,0x18,0x40,0x45,0x8c,0x25,0xb0,0x04,0x3c,\r
+0xf9,0x51,0x00,0x0c,0x80,0x0c,0x84,0x34,0x25,0xb0,0x04,0x3c,0x94,0x0c,0x84,0x34,\r
+0xb3,0x56,0x00,0x08,0x21,0x28,0x00,0x00,0x08,0x40,0x62,0x8c,0x00,0x00,0x00,0x00,\r
+0x02,0x12,0x02,0x00,0x3f,0x00,0x42,0x30,0x2b,0x18,0x42,0x02,0xb2,0xfe,0x60,0x14,\r
+0x23,0x30,0x52,0x00,0x21,0x30,0x00,0x00,0x21,0x28,0x00,0x00,0x68,0x15,0x82,0x26,\r
+0x30,0x40,0x43,0x8c,0x41,0x57,0x00,0x08,0x82,0x25,0x03,0x00,0x00,0x00,0x80,0xa0,\r
+0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,\r
+0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x3d,0x56,0x00,0x08,0x68,0x15,0x84,0x26,\r
+0x23,0x10,0x92,0x00,0x2b,0x18,0x44,0x02,0x2b,0x20,0x45,0x02,0x0b,0x40,0x43,0x00,\r
+0xe2,0xfd,0x80,0x14,0x23,0xa8,0xb2,0x00,0x7d,0x56,0x00,0x08,0x21,0xa8,0x00,0x00,\r
+0x30,0x40,0xc5,0x8c,0x7a,0x58,0x00,0x08,0x25,0xb0,0x04,0x3c,0x27,0x00,0xa0,0x10,\r
+0x80,0x10,0x06,0x00,0x21,0x10,0x43,0x00,0x18,0x40,0x45,0x8c,0x25,0xb0,0x04,0x3c,\r
+0xf9,0x51,0x00,0x0c,0x88,0x0c,0x84,0x34,0x25,0xb0,0x04,0x3c,0x9c,0x0c,0x84,0x34,\r
+0xf9,0x51,0x00,0x0c,0x21,0x28,0x00,0x00,0x1c,0x56,0x00,0x08,0x00,0x00,0x00,0x00,\r
+0xff,0xff,0x43,0x26,0x42,0x18,0x03,0x00,0x40,0x10,0x03,0x00,0x21,0x10,0x43,0x00,\r
+0x2b,0x57,0x00,0x08,0x01,0x00,0x52,0x24,0xff,0xff,0x05,0x36,0x60,0x00,0x06,0x24,\r
+0x6a,0x44,0x00,0x0c,0x24,0x00,0x04,0x24,0xeb,0x0b,0x00,0x0c,0xe8,0x03,0x04,0x24,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x24,0x00,0x04,0x24,0x95,0x44,0x00,0x0c,0xff,0xff,0x05,0x36,0x1f,0x00,0x53,0x30,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x1a,0x0c,0x00,0x0c,\r
+0x64,0x00,0x04,0x24,0x44,0x56,0x00,0x08,0x25,0xb0,0x02,0x3c,0x30,0x40,0x65,0x8c,\r
+0xa6,0x58,0x00,0x08,0x25,0xb0,0x04,0x3c,0x00,0xff,0x84,0x30,0x02,0x22,0x04,0x00,\r
+0x08,0x00,0x80,0x10,0x02,0x80,0x02,0x3c,0xff,0x00,0x02,0x24,0x04,0x00,0x82,0x10,\r
+0xcc,0xff,0x03,0x24,0x02,0x80,0x02,0x3c,0x08,0x00,0xe0,0x03,0x4e,0x58,0x43,0xa0,\r
+0x02,0x80,0x02,0x3c,0x08,0x00,0xe0,0x03,0x4e,0x58,0x44,0xa0,0x02,0x24,0x04,0x00,\r
+0xff,0x00,0x84,0x30,0xc0,0x10,0x04,0x00,0x21,0x10,0x44,0x00,0x80,0x10,0x02,0x00,\r
+0x21,0x10,0x44,0x00,0x02,0x80,0x03,0x3c,0x80,0x10,0x02,0x00,0x68,0x15,0x63,0x24,\r
+0x20,0x00,0x84,0x2c,0x09,0x00,0x80,0x10,0x21,0x10,0x43,0x00,0x74,0x51,0x43,0x8c,\r
+0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34,0x02,0x19,0x03,0x00,0x7f,0x00,0x63,0x30,\r
+0x00,0x00,0x43,0xac,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,\r
+0x50,0x79,0x43,0x8c,0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34,0x02,0x19,0x03,0x00,\r
+0x7f,0x00,0x63,0x30,0x00,0x00,0x43,0xac,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0xff,0x00,0x85,0x30,0xd2,0xff,0xa3,0x24,0xfe,0xff,0xa2,0x24,0xda,0xff,0xa4,0x24,\r
+0x04,0x00,0x63,0x2c,0x08,0x00,0x84,0x2c,0x06,0x00,0x60,0x14,0xff,0x00,0x42,0x30,\r
+0xf0,0xff,0xa2,0x24,0xfc,0xff,0xa3,0x24,0x16,0x00,0x46,0x2c,0x03,0x00,0x80,0x10,\r
+0xff,0x00,0x62,0x30,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xfa,0xff,0xa3,0x24,\r
+0xfc,0xff,0xc0,0x10,0x21,0x10,0xa0,0x00,0x08,0x00,0xe0,0x03,0xff,0x00,0x62,0x30,\r
+0xe0,0xff,0xbd,0x27,0x44,0x00,0x02,0x24,0x10,0x00,0xa2,0xa3,0x49,0x00,0x03,0x24,\r
+0x47,0x00,0x02,0x24,0x02,0x80,0x07,0x3c,0x02,0x80,0x08,0x3c,0x30,0xa5,0xe7,0x24,\r
+0x68,0x15,0x08,0x25,0xff,0xff,0x09,0x34,0x11,0x00,0xa3,0xa3,0x12,0x00,0xa2,0xa3,\r
+0xf4,0x01,0x03,0x24,0x01,0x00,0x02,0x24,0x01,0x80,0x06,0x3c,0x10,0x00,0xa5,0x27,\r
+0x21,0x20,0xe0,0x00,0x9c,0x64,0xc6,0x24,0xf4,0x63,0x09,0xad,0x0c,0x00,0xe3,0xac,\r
+0x14,0x00,0xe2,0xa0,0xf0,0x63,0x09,0xad,0x18,0x00,0xbf,0xaf,0x88,0x0e,0x00,0x0c,\r
+0x13,0x00,0xa0,0xa3,0x18,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x20,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x18,0x00,0xbf,0xaf,0x14,0x00,0xb1,0xaf,\r
+0x10,0x00,0xb0,0xaf,0x02,0x80,0x02,0x3c,0xee,0x7d,0x44,0x90,0x22,0x00,0x03,0x24,\r
+0x07,0x00,0x83,0x10,0x25,0xb0,0x04,0x3c,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,\r
+0x4c,0x00,0x83,0x34,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,0x03,0x00,0x42,0x30,\r
+0xf5,0xff,0x40,0x10,0x02,0x80,0x11,0x3c,0x68,0x15,0x22,0x26,0xf0,0x63,0x43,0x8c,\r
+0x98,0x0c,0x84,0x34,0x21,0x10,0x00,0x00,0x02,0x19,0x03,0x00,0xff,0x00,0x63,0x30,\r
+0x00,0x00,0x83,0xa0,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,\r
+0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x22,0x26,0xf4,0x63,0x43,0x8c,\r
+0x25,0xb0,0x02,0x3c,0x99,0x0c,0x42,0x34,0x02,0x19,0x03,0x00,0xff,0x00,0x63,0x30,\r
+0x00,0x00,0x43,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,\r
+0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x30,0x26,\r
+0xf0,0x63,0x04,0x8e,0xff,0xff,0x02,0x34,0xd7,0xff,0x82,0x10,0x00,0x00,0x00,0x00,\r
+0xe8,0x63,0x02,0x8e,0x00,0x00,0x00,0x00,0x02,0x11,0x02,0x00,0x7f,0x00,0x42,0x30,\r
+0x3f,0x00,0x43,0x2c,0x12,0x00,0x60,0x14,0x3b,0x00,0x42,0x2c,0xf4,0x63,0x02,0x8e,\r
+0x02,0x19,0x04,0x00,0x02,0x11,0x02,0x00,0x23,0x18,0x62,0x00,0x1e,0x00,0x60,0x18,\r
+0x25,0xb0,0x04,0x3c,0x12,0x01,0x05,0x3c,0x0c,0x09,0x84,0x34,0x13,0x13,0xa5,0x34,\r
+0xf9,0x51,0x00,0x0c,0x00,0x00,0x00,0x00,0x68,0x15,0x22,0x26,0xe4,0x42,0x43,0x8c,\r
+0x00,0x20,0x04,0x3c,0x25,0x18,0x64,0x00,0x30,0x59,0x00,0x08,0xe4,0x42,0x43,0xac,\r
+0xbd,0xff,0x40,0x10,0x01,0x00,0x03,0x24,0xe4,0x42,0x02,0x8e,0x00,0x00,0x00,0x00,\r
+0x42,0x17,0x02,0x00,0x01,0x00,0x42,0x30,0xb7,0xff,0x43,0x14,0x25,0xb0,0x04,0x3c,\r
+0x32,0x03,0x05,0x3c,0x0c,0x09,0x84,0x34,0xf9,0x51,0x00,0x0c,0x33,0x13,0xa5,0x34,\r
+0xe4,0x42,0x03,0x8e,0xff,0xdf,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,\r
+0x30,0x59,0x00,0x08,0xe4,0x42,0x03,0xae,0x22,0x02,0x05,0x3c,0x0c,0x09,0x84,0x34,\r
+0x6a,0x59,0x00,0x08,0x23,0x13,0xa5,0x34,0x25,0xb0,0x03,0x3c,0x03,0x0d,0x63,0x34,\r
+0x00,0x00,0x62,0x90,0x21,0x20,0x00,0x00,0xff,0x00,0x42,0x30,0x08,0x00,0x42,0x34,\r
+0x00,0x00,0x62,0xa0,0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,\r
+0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24,0x25,0xb0,0x03,0x3c,0x03,0x0d,0x63,0x34,\r
+0x00,0x00,0x62,0x90,0x21,0x20,0x00,0x00,0xf7,0x00,0x42,0x30,0x00,0x00,0x62,0xa0,\r
+0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14,\r
+0x01,0x00,0x82,0x24,0x25,0xb0,0x03,0x3c,0x2d,0x0a,0x63,0x34,0x00,0x00,0x62,0x90,\r
+0x21,0x20,0x00,0x00,0x3f,0x00,0x42,0x30,0x00,0x00,0x62,0xa0,0x01,0x00,0x82,0x24,\r
+0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24,\r
+0x25,0xb0,0x03,0x3c,0x2d,0x0a,0x63,0x34,0x00,0x00,0x62,0x90,0x21,0x20,0x00,0x00,\r
+0xff,0x00,0x42,0x30,0x80,0x00,0x42,0x34,0x00,0x00,0x62,0xa0,0x01,0x00,0x82,0x24,\r
+0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x25,0xb0,0x02,0x3c,0xff,0x00,0x03,0x3c,\r
+0x82,0x01,0x49,0x34,0x81,0x01,0x48,0x34,0x24,0x10,0x83,0x00,0x02,0x3c,0x02,0x00,\r
+0x00,0xff,0x63,0x34,0x02,0x80,0x02,0x3c,0x68,0x15,0x45,0x24,0x02,0x32,0x04,0x00,\r
+0x01,0x00,0x02,0x24,0x24,0x20,0x83,0x00,0xce,0x4c,0xa2,0xa0,0xbc,0x4c,0xa0,0xac,\r
+0xc0,0x4c,0xa0,0xac,0xc4,0x4c,0xa0,0xac,0x06,0x00,0x80,0x14,0xc8,0x4c,0xa0,0xac,\r
+0x00,0x00,0x02,0x91,0x00,0x00,0x23,0x91,0xcc,0x4c,0xa2,0xa0,0x08,0x00,0xe0,0x03,\r
+0xcd,0x4c,0xa3,0xa0,0xcd,0x4c,0xa7,0xa0,0x08,0x00,0xe0,0x03,0xcc,0x4c,0xa6,0xa0,\r
+0x02,0x80,0x03,0x3c,0x68,0x15,0x63,0x24,0xcd,0x4c,0x66,0x90,0xcc,0x4c,0x65,0x90,\r
+0x25,0xb0,0x02,0x3c,0x82,0x01,0x44,0x34,0x81,0x01,0x42,0x34,0x00,0x00,0x45,0xa0,\r
+0x00,0x00,0x86,0xa0,0x08,0x00,0xe0,0x03,0xce,0x4c,0x60,0xa0,0x02,0x80,0x08,0x3c,\r
+0x68,0x15,0x04,0x25,0xce,0x4c,0x82,0x90,0x00,0x00,0x00,0x00,0x15,0x00,0x40,0x10,\r
+0x21,0x18,0x00,0x00,0xc0,0x4c,0x82,0x8c,0xbc,0x4c,0x85,0x8c,0x25,0xb0,0x03,0x3c,\r
+0x40,0x11,0x02,0x00,0x2b,0x10,0xa2,0x00,0x82,0x01,0x67,0x34,0x0f,0x00,0x40,0x10,\r
+0x81,0x01,0x66,0x34,0xcd,0x4c,0x83,0x90,0xcc,0x4c,0x82,0x90,0xf0,0x00,0x63,0x30,\r
+0x1f,0x00,0x42,0x30,0x00,0x00,0xc2,0xa0,0x00,0x00,0xe3,0xa0,0x68,0x15,0x02,0x25,\r
+0x01,0x00,0x03,0x24,0xc8,0x4c,0x40,0xac,0xbc,0x4c,0x40,0xac,0xc0,0x4c,0x40,0xac,\r
+0xc4,0x4c,0x40,0xac,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0xc4,0x4c,0x82,0x8c,\r
+0x25,0xb0,0x03,0x3c,0x82,0x01,0x69,0x34,0x40,0x11,0x02,0x00,0x2b,0x10,0xa2,0x00,\r
+0x0e,0x00,0x40,0x14,0x81,0x01,0x66,0x34,0xc8,0x4c,0x82,0x8c,0x00,0x00,0x00,0x00,\r
+0x40,0x11,0x02,0x00,0x2b,0x10,0xa2,0x00,0x08,0x00,0x40,0x14,0x00,0x00,0x00,0x00,\r
+0xcd,0x4c,0x83,0x90,0xcc,0x4c,0x82,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0xc2,0xa0,\r
+0x00,0x00,0x23,0xa1,0xf2,0x59,0x00,0x08,0x68,0x15,0x02,0x25,0xcd,0x4c,0x83,0x90,\r
+0xcc,0x4c,0x82,0x90,0xf0,0x00,0x63,0x30,0x7f,0x00,0x42,0x30,0x00,0x00,0xc2,0xa0,\r
+0x00,0x00,0x23,0xa1,0xf2,0x59,0x00,0x08,0x68,0x15,0x02,0x25,0x00,0x00,0x85,0xac,\r
+0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,\r
+0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x25,0xb0,0x03,0x3c,0x33,0x02,0x65,0x34,0x00,0x11,0x04,0x00,0x00,0x00,0xa2,0xa0,\r
+0x30,0x02,0x63,0x34,0x00,0x00,0x65,0x8c,0x0f,0x00,0x02,0x3c,0xff,0xff,0x42,0x34,\r
+0x24,0x28,0xa2,0x00,0x01,0x00,0x03,0x24,0x04,0x18,0x83,0x00,0x02,0x00,0xa0,0x10,\r
+0x21,0x10,0x00,0x00,0xff,0xff,0x62,0x30,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0xe0,0xff,0xbd,0x27,0x14,0x00,0xb1,0xaf,0x25,0xb0,0x11,0x3c,0x18,0x00,0xb2,0xaf,\r
+0x4c,0x00,0x22,0x36,0x1c,0x00,0xbf,0xaf,0x10,0x00,0xb0,0xaf,0x00,0x00,0x44,0x90,\r
+0x02,0x80,0x03,0x3c,0x02,0x00,0x02,0x24,0xff,0x00,0x84,0x30,0x07,0x00,0x82,0x10,\r
+0x68,0x15,0x72,0x24,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x46,0x64,0x43,0x96,\r
+0x01,0x00,0x02,0x24,0xf7,0xff,0x62,0x14,0x21,0x20,0x00,0x00,0x1e,0x5a,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x24,0x1e,0x5a,0x00,0x0c,0x21,0x80,0x40,0x00,\r
+0x25,0x80,0x02,0x02,0x33,0x02,0x23,0x36,0x08,0x00,0x02,0x24,0xff,0xff,0x10,0x32,\r
+0x40,0x00,0x25,0x36,0x00,0x00,0x62,0xa0,0xea,0xff,0x00,0x16,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0xa2,0x94,0x44,0x64,0x43,0x96,0xff,0xdf,0x42,0x30,0x00,0x20,0x44,0x34,\r
+0x01,0x00,0x63,0x24,0x44,0x64,0x43,0xa6,0x00,0x00,0xa2,0xa4,0x00,0x00,0xa4,0xa4,\r
+0x3b,0x5a,0x00,0x08,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xb8,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c,\r
+0x3c,0x00,0xb1,0xaf,0x38,0x00,0xb0,0xaf,0x40,0x00,0xbf,0xaf,0x68,0x15,0x50,0x24,\r
+0xf8,0x63,0x03,0x8e,0x02,0x80,0x11,0x3c,0x01,0x00,0x02,0x24,0x01,0x00,0x63,0x30,\r
+0x10,0x00,0xa4,0x27,0x64,0x79,0x25,0x26,0x07,0x00,0x62,0x10,0x0a,0x00,0x06,0x24,\r
+0x40,0x00,0xbf,0x8f,0x3c,0x00,0xb1,0x8f,0x38,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,\r
+0x08,0x00,0xe0,0x03,0x48,0x00,0xbd,0x27,0x6c,0x45,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,\r
+0x21,0x28,0x00,0x00,0x64,0x79,0x24,0x26,0x58,0x45,0x00,0x0c,0x0a,0x00,0x06,0x24,\r
+0x28,0x00,0x03,0x24,0x05,0x00,0x02,0x24,0xfd,0x63,0x03,0xa2,0xfc,0x63,0x02,0xa2,\r
+0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x54,0x4f,0x00,0x0c,\r
+0x48,0x00,0x04,0x24,0x21,0x80,0x40,0x00,0x10,0x00,0xa5,0x27,0xe4,0xff,0x40,0x10,\r
+0x0a,0x00,0x06,0x24,0x08,0x00,0x44,0x94,0x14,0x00,0x02,0x24,0x14,0x00,0x02,0xae,\r
+0x02,0x80,0x02,0x3c,0x28,0x00,0x03,0x24,0x25,0x20,0x82,0x00,0x0c,0x00,0x03,0xae,\r
+0x6c,0x45,0x00,0x0c,0x20,0x00,0x84,0x24,0x30,0x08,0x00,0x0c,0x21,0x20,0x00,0x02,\r
+0x6e,0x5a,0x00,0x08,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,\r
+0x18,0x03,0x42,0x34,0x60,0x6a,0x63,0x24,0x00,0x00,0x43,0xac,0x63,0x00,0x02,0x24,\r
+0xff,0xff,0x42,0x24,0xff,0xff,0x41,0x04,0xff,0xff,0x42,0x24,0x02,0x80,0x02,0x3c,\r
+0xe8,0x7d,0x45,0x94,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0xeb,0x7d,0x66,0x90,\r
+0xf8,0x7d,0x47,0x90,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0x03,0x7e,0x69,0x90,\r
+0x05,0x7e,0x4a,0x90,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0x08,0x7e,0x6b,0x90,\r
+0x0a,0x7e,0x4c,0x90,0x07,0x00,0x03,0x24,0x02,0x80,0x02,0x3c,0x25,0xb0,0x04,0x3c,\r
+0xf5,0x7d,0x43,0xa0,0xb0,0x03,0x84,0x34,0x02,0x80,0x02,0x3c,0x02,0x80,0x18,0x3c,\r
+0xea,0x7d,0x08,0x93,0x00,0x00,0x85,0xac,0xf6,0x7d,0x40,0xa0,0x02,0x80,0x02,0x3c,\r
+0x00,0x00,0x86,0xac,0x02,0x80,0x0f,0x3c,0xf7,0x7d,0x40,0xa0,0x02,0x80,0x02,0x3c,\r
+0x00,0x00,0x87,0xac,0x68,0x15,0xee,0x25,0x18,0x7e,0x40,0xa0,0xfd,0xff,0x02,0x24,\r
+0xd5,0x4a,0xc2,0xa1,0x01,0x00,0x03,0x24,0x00,0x78,0x02,0x24,0xd4,0x4a,0xc3,0xa1,\r
+0xd8,0x4a,0xc2,0xa5,0xff,0x07,0x03,0x24,0x0f,0x00,0x0d,0x31,0x02,0x00,0x02,0x24,\r
+0xda,0x4a,0xc3,0xa5,0x00,0x00,0x88,0xac,0x00,0x00,0x89,0xac,0x00,0x00,0x8a,0xac,\r
+0x00,0x00,0x8b,0xac,0x00,0x00,0x8c,0xac,0x17,0x00,0xa2,0x11,0x02,0x80,0x02,0x3c,\r
+0xea,0x7d,0x02,0x93,0x01,0x00,0x03,0x24,0x0f,0x00,0x42,0x30,0x05,0x00,0x43,0x10,\r
+0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,0x2a,0x7e,0x40,0xa4,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x00,0x80,0x02,0x3c,0x68,0x15,0xe4,0x25,0x02,0xbc,0x42,0x34,\r
+0x68,0x4b,0x82,0xac,0x15,0x15,0x03,0x3c,0x02,0x02,0x02,0x3c,0x07,0x07,0x63,0x34,\r
+0x64,0x4b,0x82,0xac,0x02,0x80,0x02,0x3c,0x60,0x4b,0x83,0xac,0x2a,0x7e,0x40,0xa4,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xef,0x7d,0x44,0x90,0x06,0x00,0x03,0x24,\r
+0x15,0x00,0x83,0x10,0x0b,0x00,0x02,0x24,0x0a,0x00,0x82,0x10,0x00,0xe0,0x02,0x3c,\r
+0x68,0x15,0xe4,0x25,0x00,0xb2,0x42,0x34,0x00,0x1c,0x03,0x3c,0x68,0x4b,0x82,0xac,\r
+0x00,0x1c,0x63,0x34,0x00,0x04,0x02,0x24,0x60,0x4b,0x83,0xac,0xd2,0x5a,0x00,0x08,\r
+0x64,0x4b,0x82,0xac,0x00,0x80,0x02,0x3c,0x00,0xbc,0x42,0x34,0x15,0x15,0x03,0x3c,\r
+0x68,0x4b,0xc2,0xad,0x07,0x07,0x63,0x34,0x03,0x03,0x02,0x3c,0x60,0x4b,0xc3,0xad,\r
+0xd2,0x5a,0x00,0x08,0x64,0x4b,0xc2,0xad,0x00,0xc0,0x02,0x3c,0x00,0xb2,0x42,0x34,\r
+0x1c,0x1c,0x03,0x3c,0x68,0x4b,0xc2,0xad,0x07,0x07,0x63,0x34,0x00,0x04,0x02,0x24,\r
+0x60,0x4b,0xc3,0xad,0xd2,0x5a,0x00,0x08,0x64,0x4b,0xc2,0xad,0x25,0xb0,0x02,0x3c,\r
+0x4d,0x00,0x44,0x34,0xff,0x00,0x03,0x3c,0xec,0x02,0x42,0x34,0x00,0x00,0x43,0xac,\r
+0x00,0x00,0x80,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0x3c,\r
+0x25,0xb0,0x02,0x3c,0x44,0x6c,0x63,0x24,0x18,0x03,0x42,0x34,0x00,0x00,0x43,0xac,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x7f,0x00,0x02,0x3c,0xfd,0xbf,0x45,0x34,\r
+0x80,0x04,0x03,0x3c,0x25,0x28,0xa3,0x00,0x00,0x08,0x04,0x3c,0x02,0x80,0x02,0x3c,\r
+0x68,0x15,0x42,0x24,0x25,0x28,0xa4,0x00,0x41,0xb0,0x03,0x3c,0x00,0x00,0x65,0xac,\r
+0x04,0x4b,0x45,0xac,0xfc,0x4a,0x45,0xac,0x08,0x00,0x63,0x34,0x86,0x00,0x05,0x24,\r
+0x00,0x00,0x65,0xa4,0x08,0x4b,0x45,0xa4,0x00,0x4b,0x40,0xac,0x0a,0x4b,0x40,0xa4,\r
+0x0c,0x4b,0x45,0xa4,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x30,0x5b,0x00,0x08,0x00,0x00,0x00,0x00,\r
+0x42,0xb0,0x02,0x3c,0xa0,0xff,0x03,0x24,0x01,0x00,0x42,0x34,0xe8,0xff,0xbd,0x27,\r
+0x21,0x20,0x00,0x00,0x01,0x00,0x05,0x24,0x00,0x01,0x06,0x24,0x00,0x00,0x43,0xa0,\r
+0x10,0x00,0xbf,0xaf,0x51,0x0e,0x00,0x0c,0x00,0x00,0x00,0x00,0x10,0x00,0xbf,0x8f,\r
+0x03,0x00,0x04,0x24,0x01,0x00,0x05,0x24,0x40,0x1f,0x06,0x24,0x51,0x0e,0x00,0x08,\r
+0x18,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,0x02,0x80,0x10,0x3c,\r
+0x68,0x15,0x10,0x26,0x76,0x4b,0x00,0xa2,0x14,0x00,0xb1,0xaf,0x18,0x00,0xbf,0xaf,\r
+0x5e,0x5e,0x00,0x0c,0x21,0x88,0x00,0x02,0x48,0x01,0x02,0x24,0xec,0x63,0x02,0xae,\r
+0xe8,0x63,0x02,0xae,0x21,0x10,0x00,0x02,0x1f,0x00,0x03,0x24,0xff,0xff,0x63,0x24,\r
+0xd0,0x4c,0x40,0xa4,0xd2,0x4c,0x40,0xa4,0xd4,0x4c,0x40,0xa4,0xd6,0x4c,0x40,0xa4,\r
+0xd8,0x4c,0x40,0xa4,0xda,0x4c,0x40,0xa4,0xdc,0x4c,0x40,0xa4,0xde,0x4c,0x40,0xa4,\r
+0xe0,0x4c,0x40,0xa4,0xf5,0xff,0x61,0x04,0x24,0x00,0x42,0x24,0x25,0xb0,0x02,0x3c,\r
+0x10,0x00,0x03,0x24,0xb0,0x03,0x42,0x34,0x02,0x80,0x04,0x3c,0x8c,0x58,0x84,0x24,\r
+0x00,0x00,0x43,0xac,0x21,0x28,0x00,0x00,0x58,0x45,0x00,0x0c,0x04,0x00,0x06,0x24,\r
+0x2c,0x5f,0x00,0x0c,0x00,0x00,0x00,0x00,0xb4,0x5f,0x00,0x0c,0xec,0x65,0x20,0xae,\r
+0xea,0x60,0x00,0x0c,0x00,0x00,0x00,0x00,0x0a,0x59,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x02,0x80,0x03,0x3c,0xee,0x7d,0x64,0x90,0x92,0x00,0x02,0x24,0x03,0x00,0x82,0x10,\r
+0x00,0x00,0x00,0x00,0x49,0x61,0x00,0x0c,0x00,0x00,0x00,0x00,0x2f,0x61,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0xce,0x5f,0x00,0x0c,0x00,0x00,0x00,0x00,0xb7,0x61,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x44,0x64,0x20,0xa6,0x9d,0x61,0x00,0x0c,0x46,0x64,0x20,0xa6,\r
+0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x02,0x80,0x04,0x3c,\r
+0x02,0x80,0x05,0x3c,0x58,0x7b,0x82,0x24,0x60,0x7b,0xa3,0x24,0x20,0x00,0xbd,0x27,\r
+0x04,0x00,0x42,0xac,0x58,0x7b,0x82,0xac,0x60,0x7b,0xa3,0xac,0x08,0x00,0xe0,0x03,\r
+0x04,0x00,0x63,0xac,0xe8,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,0x01,0x80,0x02,0x3c,\r
+0x25,0xb0,0x10,0x3c,0x18,0x03,0x03,0x36,0x2c,0x6e,0x42,0x24,0x00,0x00,0x62,0xac,\r
+0x14,0x00,0xbf,0xaf,0x98,0x5a,0x00,0x0c,0x00,0x00,0x00,0x00,0x12,0x5c,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x01,0x00,0x03,0x24,0x02,0x80,0x02,0x3c,0x3a,0x5e,0x00,0x0c,\r
+0xe7,0x60,0x43,0xa0,0x09,0x5b,0x00,0x0c,0x00,0x00,0x00,0x00,0x32,0x41,0x00,0x0c,\r
+0x00,0x00,0x00,0x00,0x43,0x5b,0x00,0x0c,0x00,0x00,0x00,0x00,0x44,0x00,0x03,0x36,\r
+0x00,0x00,0x62,0x94,0x00,0x00,0x00,0x00,0x40,0x00,0x42,0x34,0x00,0x00,0x62,0xa4,\r
+0x11,0x5b,0x00,0x0c,0x00,0x00,0x00,0x00,0x32,0x5b,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x06,0x5e,0x00,0x0c,0x00,0x00,0x00,0x00,0xcb,0x5d,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x00,0x80,0x04,0x3c,0x14,0x29,0x84,0x24,0x23,0x5e,0x00,0x0c,0x01,0x00,0x05,0x24,\r
+0x01,0x80,0x04,0x3c,0x0c,0x1d,0x84,0x24,0x23,0x5e,0x00,0x0c,0x02,0x00,0x05,0x24,\r
+0x34,0x4f,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x80,0x04,0x3c,0x88,0x3a,0x84,0x24,\r
+0x23,0x5e,0x00,0x0c,0x03,0x00,0x05,0x24,0x02,0x80,0x02,0x3c,0xf8,0x7d,0x43,0x90,\r
+0x43,0x00,0x04,0x36,0x29,0x00,0x60,0x10,0xd8,0x00,0x10,0x36,0x07,0x00,0x02,0x24,\r
+0x2b,0x00,0x62,0x10,0x25,0xb0,0x04,0x3c,0x10,0x02,0x86,0x34,0x43,0x00,0x85,0x34,\r
+0x03,0x00,0x02,0x24,0x10,0x00,0x03,0x24,0x00,0x00,0xa2,0xa0,0xd8,0x00,0x84,0x34,\r
+0x00,0x00,0xc3,0xa0,0x00,0x00,0x82,0x90,0x80,0xff,0x03,0x24,0x42,0xb0,0x05,0x3c,\r
+0x25,0x10,0x43,0x00,0x00,0x00,0x82,0xa0,0x25,0xb0,0x04,0x3c,0x44,0x00,0x84,0x34,\r
+0x00,0x00,0x82,0x94,0x00,0x00,0x00,0x00,0xc0,0x00,0x42,0x34,0x00,0x00,0x82,0xa4,\r
+0x00,0x00,0xa3,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x63,0x34,0x00,0x00,0xa3,0xa0,\r
+0x18,0x5b,0x00,0x0c,0x00,0x00,0x00,0x00,0x02,0x80,0x04,0x3c,0x08,0x00,0x84,0x24,\r
+0x21,0x28,0x00,0x00,0x21,0x30,0x00,0x00,0xfe,0x1f,0x00,0x0c,0x21,0x38,0x00,0x00,\r
+0x30,0x5b,0x00,0x0c,0x00,0x00,0x00,0x00,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,\r
+0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x00,0x00,0x80,0xa0,\r
+0x00,0x00,0x03,0x92,0x80,0xff,0x02,0x24,0x25,0x18,0x62,0x00,0x00,0x00,0x03,0xa2,\r
+0x25,0xb0,0x04,0x3c,0x44,0x00,0x84,0x34,0x00,0x00,0x82,0x94,0x42,0xb0,0x05,0x3c,\r
+0xc0,0x00,0x42,0x34,0x00,0x00,0x82,0xa4,0x00,0x00,0xa3,0x90,0x00,0x00,0x00,0x00,\r
+0x01,0x00,0x63,0x34,0x00,0x00,0xa3,0xa0,0x18,0x5b,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x02,0x80,0x04,0x3c,0x08,0x00,0x84,0x24,0x21,0x28,0x00,0x00,0x21,0x30,0x00,0x00,\r
+0xfe,0x1f,0x00,0x0c,0x21,0x38,0x00,0x00,0x30,0x5b,0x00,0x0c,0x00,0x00,0x00,0x00,\r
+0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,\r
+0x18,0x00,0xbd,0x27,0x21,0x20,0x00,0x00,0x20,0xb0,0x06,0x3c,0xff,0xff,0x05,0x34,\r
+0x21,0x18,0x86,0x00,0x04,0x00,0x84,0x24,0x2a,0x10,0xa4,0x00,0x00,0x00,0x60,0xac,\r
+0xfb,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0xb8,0xff,0xbd,0x27,0x25,0xb0,0x04,0x3c,0x44,0x00,0xbf,0xaf,0x40,0x00,0xbe,0xaf,\r
+0x3c,0x00,0xb7,0xaf,0x38,0x00,0xb6,0xaf,0x34,0x00,0xb5,0xaf,0x30,0x00,0xb4,0xaf,\r
+0x2c,0x00,0xb3,0xaf,0x28,0x00,0xb2,0xaf,0x24,0x00,0xb1,0xaf,0x20,0x00,0xb0,0xaf,\r
+0x0a,0x00,0x83,0x34,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,0x20,0x00,0x42,0x30,\r
+0x0c,0x00,0x40,0x10,0x4c,0x87,0x02,0x3c,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,\r
+0x10,0x00,0x42,0x30,0x66,0x01,0x40,0x10,0x4c,0x87,0x02,0x3c,0x54,0x00,0x83,0x34,\r
+0x50,0x00,0x82,0x34,0x00,0x00,0x45,0xac,0x00,0x00,0x65,0xa4,0x36,0x5c,0x00,0x08,\r
+0x02,0x80,0x03,0x3c,0x54,0x00,0x85,0x34,0x00,0xe0,0x42,0x34,0x50,0x00,0x84,0x34,\r
+0x12,0x01,0x03,0x24,0x00,0x00,0x82,0xac,0x00,0x00,0xa3,0xac,0x02,0x80,0x03,0x3c,\r
+0x68,0x15,0x62,0x24,0xd5,0x4a,0x43,0x90,0xda,0x4a,0x45,0x94,0x25,0xb0,0x1e,0x3c,\r
+0x1c,0x00,0xa3,0xa3,0x60,0x4b,0x43,0x8c,0x58,0x00,0xc6,0x37,0xff,0xff,0x04,0x24,\r
+0x10,0x00,0xa3,0xaf,0x64,0x4b,0x43,0x8c,0x5c,0x00,0xc7,0x37,0x60,0x00,0xc8,0x37,\r
+0x14,0x00,0xa3,0xaf,0x68,0x4b,0x42,0x8c,0x64,0x00,0xc9,0x37,0x8a,0x00,0xca,0x37,\r
+0x18,0x00,0xa2,0xaf,0x24,0x10,0x02,0x3c,0x21,0x28,0xa2,0x00,0x4c,0x81,0x02,0x3c,\r
+0x00,0xe0,0x42,0x34,0x00,0x00,0xc2,0xac,0x96,0x01,0x03,0x24,0x28,0x28,0x02,0x24,\r
+0x00,0x00,0xe3,0xac,0x89,0x00,0xcb,0x37,0x00,0x00,0x04,0xad,0x8c,0x00,0xcc,0x37,\r
+0x00,0x00,0x24,0xad,0x09,0x00,0x03,0x24,0x00,0x00,0x42,0xa5,0x10,0x10,0x02,0x24,\r
+0x00,0x00,0x63,0xa1,0x8e,0x00,0xcd,0x37,0x00,0x00,0x82,0xa5,0x0a,0x0a,0x03,0x24,\r
+0x13,0x00,0x02,0x24,0x90,0x00,0xce,0x37,0x00,0x00,0xa3,0xa5,0x00,0x00,0xc2,0xa1,\r
+0x25,0xb0,0x02,0x3c,0x40,0x00,0x03,0x24,0x91,0x00,0x42,0x34,0x00,0x00,0x43,0xa0,\r
+0x25,0xb0,0x03,0x3c,0x3a,0x01,0x02,0x24,0x92,0x00,0x63,0x34,0x00,0x00,0x62,0xa4,\r
+0xb5,0x00,0xd1,0x37,0x21,0x00,0x03,0x24,0x00,0x00,0x23,0xa2,0x10,0x00,0xa2,0x8f,\r
+0xa0,0x00,0xd2,0x37,0xa4,0x00,0xd3,0x37,0x00,0x00,0x42,0xae,0x14,0x00,0xa3,0x8f,\r
+0xa8,0x00,0xd4,0x37,0xac,0x00,0xd5,0x37,0x00,0x00,0x63,0xae,0x18,0x00,0xa2,0x8f,\r
+0x25,0xb0,0x03,0x3c,0xb0,0x00,0x63,0x34,0x00,0x00,0x82,0xae,0x21,0x10,0x02,0x3c,\r
+0xff,0x77,0x42,0x34,0x00,0x00,0xa2,0xae,0x25,0xb0,0x02,0x3c,0xd8,0x00,0x42,0x34,\r
+0x00,0x00,0x65,0xac,0x00,0x00,0x40,0xa0,0x1c,0x00,0xa2,0x93,0x25,0xb0,0x03,0x3c,\r
+0xb4,0x00,0x63,0x34,0x00,0x00,0x62,0xa0,0x25,0xb0,0x03,0x3c,0x04,0x00,0x02,0x24,\r
+0xb6,0x00,0x63,0x34,0x00,0x00,0x62,0xa0,0x25,0xb0,0x03,0x3c,0x0f,0x00,0x02,0x24,\r
+0xba,0x00,0x63,0x34,0xb9,0x00,0xdf,0x37,0x00,0x00,0xe4,0xa3,0x00,0x00,0x62,0xa4,\r
+0x25,0xb0,0x02,0x3c,0x1a,0x01,0x42,0x34,0x16,0x01,0xd0,0x37,0x18,0x01,0xcf,0x37,\r
+0x00,0x00,0x00,0xa6,0x25,0xb0,0x03,0x3c,0x00,0x00,0xe0,0xa5,0x00,0x00,0x40,0xa4,\r
+0xff,0xff,0x02,0x3c,0xff,0x0f,0x42,0x34,0xdc,0x00,0x63,0x34,0x00,0x00,0x62,0xac,\r
+0x2f,0x00,0x03,0x3c,0x25,0xb0,0x02,0x3c,0x32,0x32,0x63,0x34,0xd0,0x01,0x42,0x34,\r
+0x00,0x00,0x43,0xac,0x5e,0x00,0x02,0x3c,0x25,0xb0,0x03,0x3c,0x32,0x43,0x42,0x34,\r
+0xd4,0x01,0x63,0x34,0x00,0x00,0x62,0xac,0x08,0x00,0x03,0x3c,0x25,0xb0,0x02,0x3c,\r
+0x30,0xa5,0x63,0x34,0xd8,0x01,0x42,0x34,0x00,0x00,0x43,0xac,0xdc,0x01,0xc4,0x37,\r
+0x02,0x80,0x03,0x3c,0x49,0xa5,0x02,0x34,0xee,0x7d,0x6d,0x90,0x00,0x00,0x82,0xac,\r
+0xc2,0x00,0x02,0x3c,0x1a,0x06,0x03,0x24,0x51,0x10,0x42,0x34,0xe0,0x01,0xc5,0x37,\r
+0xf4,0x01,0xc6,0x37,0xf8,0x01,0xc7,0x37,0x07,0x07,0x04,0x24,0x00,0x00,0xa3,0xa4,\r
+0x00,0x02,0xc8,0x37,0x00,0x00,0xc4,0xa4,0x26,0x00,0x03,0x24,0x00,0x00,0xe2,0xac,\r
+0x03,0x02,0xc9,0x37,0x04,0x00,0x02,0x24,0x00,0x00,0x03,0xa5,0x36,0x02,0xca,0x37,\r
+0x00,0x00,0x22,0xa1,0xc0,0x01,0x03,0x24,0x0c,0x00,0x02,0x24,0x34,0x02,0xcb,0x37,\r
+0x00,0x00,0x42,0xa1,0x37,0x02,0xcc,0x37,0x00,0x00,0x63,0xa5,0x03,0x00,0x02,0x24,\r
+0x22,0x00,0x03,0x24,0x00,0x00,0x82,0xa1,0xd6,0x00,0xa3,0x11,0x1b,0x1b,0x02,0x3c,\r
+0x13,0x13,0x02,0x3c,0x13,0x13,0x42,0x34,0x60,0x01,0xc3,0x37,0x64,0x01,0xc4,0x37,\r
+0x68,0x01,0xc5,0x37,0x7c,0x01,0xca,0x37,0x6c,0x01,0xc6,0x37,0x70,0x01,0xc7,0x37,\r
+0x74,0x01,0xc8,0x37,0x78,0x01,0xc9,0x37,0x00,0x00,0x62,0xac,0x00,0x00,0x82,0xac,\r
+0x02,0x80,0x03,0x3c,0x00,0x00,0xa2,0xac,0x00,0x00,0xc2,0xac,0x00,0x00,0xe2,0xac,\r
+0x00,0x00,0x02,0xad,0x00,0x00,0x22,0xad,0x00,0x00,0x42,0xad,0xee,0x7d,0x65,0x90,\r
+0x25,0xb0,0x0c,0x3c,0x01,0x70,0x03,0x3c,0x80,0x01,0x82,0x35,0x08,0x5f,0x63,0x34,\r
+0x22,0x00,0x04,0x24,0x00,0x00,0x43,0xac,0xb5,0x00,0xa4,0x10,0x0f,0x1f,0x02,0x3c,\r
+0x92,0x00,0x02,0x24,0xb2,0x00,0xa2,0x10,0x0f,0x1f,0x02,0x3c,0x0f,0x10,0x02,0x3c,\r
+0x00,0xf0,0x51,0x34,0xf7,0x01,0x92,0x35,0x15,0xf0,0x4d,0x34,0x77,0x00,0x0e,0x24,\r
+0x84,0x01,0x87,0x35,0x88,0x01,0x88,0x35,0x10,0xf0,0x44,0x34,0x8c,0x01,0x85,0x35,\r
+0x05,0xf0,0x42,0x34,0x00,0x00,0xed,0xac,0x90,0x01,0x83,0x35,0x00,0x00,0x04,0xad,\r
+0x94,0x01,0x86,0x35,0x00,0x00,0xa2,0xac,0xf5,0x0f,0x02,0x24,0x00,0x00,0x71,0xac,\r
+0x25,0xb0,0x05,0x3c,0x00,0x00,0xc2,0xac,0x98,0x01,0x89,0x35,0x9c,0x01,0x8a,0x35,\r
+0xf0,0x0f,0x03,0x24,0x0d,0x00,0x02,0x24,0x00,0x00,0x23,0xad,0xa0,0x01,0x8b,0x35,\r
+0x00,0x00,0x42,0xad,0xa7,0x01,0xb7,0x34,0xf6,0x01,0x8c,0x35,0xff,0xff,0x02,0x24,\r
+0x00,0x00,0x6d,0xad,0x00,0x00,0x8e,0xa1,0x00,0x00,0x4e,0xa2,0x00,0x00,0xe2,0xa2,\r
+0x25,0xb0,0x02,0x3c,0xa8,0x01,0xb6,0x34,0xff,0xff,0x09,0x24,0xac,0x01,0x42,0x34,\r
+0x00,0x00,0xc9,0xae,0x03,0x04,0x04,0x3c,0x00,0x00,0x49,0xac,0x07,0x08,0x03,0x3c,\r
+0x25,0xb0,0x02,0x3c,0x01,0x02,0x84,0x34,0x05,0x06,0x63,0x34,0xb4,0x01,0xb1,0x34,\r
+0xb8,0x01,0xb2,0x34,0xbc,0x01,0xb3,0x34,0xb0,0x01,0x42,0x34,0x00,0x00,0x44,0xac,\r
+0x00,0x00,0x23,0xae,0x25,0xb0,0x02,0x3c,0x00,0x00,0x44,0xae,0x00,0x00,0x63,0xae,\r
+0x25,0xb0,0x03,0x3c,0x0c,0x00,0x06,0x24,0xc0,0x01,0xb4,0x34,0xc1,0x01,0xb5,0x34,\r
+0x0d,0x00,0x08,0x24,0xc2,0x01,0x63,0x34,0xc3,0x01,0x42,0x34,0x00,0x00,0x86,0xa2,\r
+0xc4,0x01,0xab,0x34,0x00,0x00,0xa6,0xa2,0xc5,0x01,0xac,0x34,0x00,0x00,0x66,0xa0,\r
+0x0e,0x00,0x07,0x24,0x00,0x00,0x48,0xa0,0xc6,0x01,0xaa,0x34,0xc7,0x01,0xad,0x34,\r
+0x0f,0x00,0x02,0x24,0x00,0x00,0x68,0xa1,0x00,0x00,0x87,0xa1,0x00,0x00,0x47,0xa1,\r
+0x00,0x00,0xa2,0xa1,0x57,0x01,0x02,0x3c,0x48,0x00,0xbf,0x34,0x46,0x00,0xae,0x34,\r
+0x0e,0xe2,0x42,0x34,0x00,0x00,0xc0,0xa5,0x4c,0x00,0xbe,0x34,0x00,0x00,0xe2,0xaf,\r
+0x4d,0x00,0xb9,0x34,0x80,0xff,0x02,0x24,0x00,0x00,0xc0,0xa3,0x00,0x00,0x22,0xa3,\r
+0x25,0xb0,0x02,0x3c,0xbc,0x00,0x03,0x24,0x40,0x00,0x42,0x34,0x00,0x00,0x43,0xa4,\r
+0x25,0xb0,0x03,0x3c,0x64,0x03,0xb8,0x34,0xfc,0x37,0x02,0x24,0x40,0x00,0x63,0x34,\r
+0x00,0x00,0x00,0xa3,0xd8,0x00,0xa7,0x34,0x00,0x00,0x62,0xa4,0x00,0x00,0xe3,0x90,\r
+0x80,0xff,0x02,0x24,0x2a,0xb0,0x04,0x3c,0x25,0x18,0x62,0x00,0x00,0x00,0xe3,0xa0,\r
+0x26,0xb0,0x06,0x3c,0x30,0x00,0x89,0x34,0x20,0x20,0x02,0x24,0x38,0x00,0x84,0x34,\r
+0x40,0x00,0x03,0x24,0x00,0x00,0x82,0xa4,0x79,0x00,0xc8,0x34,0x00,0x00,0x23,0xa1,\r
+0x94,0x00,0xaa,0x34,0x16,0x00,0x02,0x24,0x64,0x00,0x03,0x24,0x00,0x00,0x02,0xa1,\r
+0x7c,0x00,0xd2,0x34,0x00,0x00,0x43,0xa5,0x98,0x00,0xab,0x34,0x7a,0x00,0xc6,0x34,\r
+0x22,0x00,0x02,0x24,0x04,0x00,0x03,0x24,0x00,0x00,0x62,0xa5,0x9c,0x00,0xac,0x34,\r
+0x00,0x00,0xc3,0xa0,0x20,0x0c,0x02,0x24,0x0a,0x00,0x03,0x24,0x00,0x00,0x42,0xa6,\r
+0x9a,0x00,0xad,0x34,0x00,0x00,0x83,0xa1,0x96,0x00,0xae,0x34,0xff,0x03,0x02,0x24,\r
+0x02,0x00,0x03,0x24,0x00,0x00,0xa2,0xa5,0x00,0x00,0xc3,0xa5,0x25,0xb0,0x03,0x3c,\r
+0x20,0x00,0x02,0x24,0xb7,0x00,0x63,0x34,0x00,0x00,0x62,0xa0,0x89,0x00,0xb1,0x34,\r
+0x09,0x00,0x03,0x24,0x00,0x00,0x23,0xa2,0x44,0x00,0xa5,0x34,0x00,0x00,0xa3,0x94,\r
+0x02,0x80,0x02,0x3c,0x68,0x15,0x46,0x24,0xff,0xfd,0x02,0x24,0x24,0x18,0x62,0x00,\r
+0x00,0x00,0xa3,0xa4,0x00,0x00,0xa2,0x94,0xd5,0x4a,0xc4,0x90,0x04,0x02,0x03,0x24,\r
+0x00,0x02,0x42,0x34,0x00,0x00,0xa2,0xa4,0x29,0xb0,0x02,0x3c,0x40,0x00,0x42,0x34,\r
+0x00,0x00,0x43,0xa4,0x3a,0x0c,0x00,0x0c,0x00,0x00,0x00,0x00,0x44,0x00,0xbf,0x8f,\r
+0x40,0x00,0xbe,0x8f,0x3c,0x00,0xb7,0x8f,0x38,0x00,0xb6,0x8f,0x34,0x00,0xb5,0x8f,\r
+0x30,0x00,0xb4,0x8f,0x2c,0x00,0xb3,0x8f,0x28,0x00,0xb2,0x8f,0x24,0x00,0xb1,0x8f,\r
+0x20,0x00,0xb0,0x8f,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x48,0x00,0xbd,0x27,\r
+0x54,0x00,0x85,0x34,0x00,0xe0,0x42,0x34,0x50,0x00,0x84,0x34,0x12,0x01,0x03,0x24,\r
+0x00,0x00,0x82,0xac,0x00,0x00,0xa3,0xa4,0x36,0x5c,0x00,0x08,0x02,0x80,0x03,0x3c,\r
+0x00,0xf0,0x51,0x34,0xf7,0x01,0x92,0x35,0x15,0xf0,0x4d,0x34,0xea,0x5c,0x00,0x08,\r
+0xff,0xff,0x0e,0x24,0xc8,0x5c,0x00,0x08,0x1b,0x1b,0x42,0x34,0x25,0xb0,0x03,0x3c,\r
+0x25,0xb0,0x08,0x3c,0xfc,0x37,0x02,0x24,0x40,0x00,0x63,0x34,0x02,0x80,0x04,0x3c,\r
+0x00,0x00,0x62,0xa4,0x94,0x8d,0x84,0x24,0xff,0x00,0x07,0x24,0xb0,0x03,0x06,0x35,\r
+0x00,0x00,0x83,0x94,0x00,0x00,0x00,0x00,0xff,0x00,0x62,0x30,0x21,0x18,0x68,0x00,\r
+0x0a,0x00,0x47,0x10,0xff,0x00,0x65,0x30,0x04,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x62,0xac,0x00,0x00,0xc3,0xac,0x04,0x00,0x82,0x8c,0x08,0x00,0x84,0x24,\r
+0x00,0x00,0xc2,0xac,0xf2,0xff,0xa7,0x14,0x00,0x00,0x00,0x00,0x25,0xb0,0x08,0x3c,\r
+0x02,0x80,0x02,0x3c,0x8c,0x87,0x44,0x24,0xff,0x00,0x07,0x24,0xb0,0x03,0x06,0x35,\r
+0x00,0x00,0x83,0x94,0x00,0x00,0x00,0x00,0xff,0x00,0x62,0x30,0x21,0x18,0x68,0x00,\r
+0x0a,0x00,0x47,0x10,0xff,0x00,0x65,0x30,0x04,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x62,0xac,0x00,0x00,0xc3,0xac,0x04,0x00,0x82,0x8c,0x08,0x00,0x84,0x24,\r
+0x00,0x00,0xc2,0xac,0xf2,0xff,0xa7,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0x00,0x00,0x01,0x80,0x02,0x3c,0x02,0x80,0x05,0x3c,0x04,0x78,0x42,0x24,\r
+0x02,0x80,0x03,0x3c,0x2c,0x7e,0xa2,0xac,0x00,0x80,0x02,0x3c,0xcc,0x7e,0x60,0xac,\r
+0x2c,0x7e,0xa4,0x24,0x02,0x80,0x03,0x3c,0xc8,0x06,0x42,0x24,0xd0,0x7e,0x60,0xa4,\r
+0x08,0x00,0x82,0xac,0x02,0x80,0x03,0x3c,0x00,0x80,0x02,0x3c,0xd2,0x7e,0x60,0xa4,\r
+0x02,0x80,0x06,0x3c,0xa4,0x0a,0x42,0x24,0x00,0x80,0x03,0x3c,0xd4,0x7e,0xc7,0x24,\r
+0x14,0x00,0x82,0xac,0x54,0x08,0x63,0x24,0x02,0x80,0x02,0x3c,0xd4,0x7e,0xc0,0xac,\r
+0x10,0x00,0x83,0xac,0x04,0x00,0xe0,0xac,0xdc,0x7e,0x40,0xa0,0x00,0x80,0x02,0x3c,\r
+0x1c,0x1c,0x42,0x24,0x3c,0x00,0x82,0xac,0x00,0x80,0x03,0x3c,0x00,0x80,0x02,0x3c,\r
+0x38,0x0d,0x63,0x24,0xc8,0x10,0x42,0x24,0x1c,0x00,0x83,0xac,0x20,0x00,0x82,0xac,\r
+0x00,0x80,0x03,0x3c,0x00,0x80,0x02,0x3c,0x54,0x14,0x63,0x24,0x38,0x18,0x42,0x24,\r
+0x24,0x00,0x83,0xac,0x28,0x00,0x82,0xac,0x00,0x80,0x03,0x3c,0x01,0x80,0x02,0x3c,\r
+0x10,0x22,0x63,0x24,0xd0,0x04,0x42,0x24,0x2c,0x00,0x83,0xac,0x30,0x00,0x82,0xac,\r
+0x00,0x80,0x03,0x3c,0x00,0x80,0x02,0x3c,0x78,0x1c,0x63,0x24,0x00,0x03,0x42,0x24,\r
+0x38,0x00,0x83,0xac,0x08,0x00,0xe0,0x03,0x4c,0x00,0x82,0xac,0x25,0xb0,0x02,0x3c,\r
+0x08,0x00,0x42,0x34,0x00,0x00,0x43,0x8c,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x02,0x80,0x0e,0x3c,0x02,0x80,0x08,0x3c,0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,\r
+0xf8,0x03,0x4d,0x24,0x00,0x14,0x6c,0x24,0x01,0x00,0x07,0x24,0x00,0x00,0xcb,0x25,\r
+0xff,0xff,0x0a,0x24,0x00,0x04,0x09,0x25,0x80,0x1a,0x07,0x00,0x21,0x10,0x6b,0x00,\r
+0x00,0x00,0x42,0xac,0x90,0x00,0x4a,0xac,0x00,0x04,0x04,0x8d,0x01,0x00,0xe7,0x24,\r
+0x08,0x00,0x45,0x24,0x21,0x18,0x6d,0x00,0x05,0x00,0xe6,0x28,0x04,0x00,0x82,0xac,\r
+0x00,0x00,0x44,0xac,0x04,0x00,0x49,0xac,0x00,0x04,0x02,0xad,0x8c,0x00,0x40,0xac,\r
+0x6c,0x00,0xa3,0xac,0xf0,0xff,0xc0,0x14,0x68,0x00,0xac,0xac,0x08,0x00,0xe0,0x03,\r
+0x00,0x00,0xc9,0xad,0x05,0x00,0xa2,0x2c,0x13,0x00,0x40,0x10,0xff,0xff,0x07,0x24,\r
+0x02,0x80,0x02,0x3c,0x80,0x1a,0x05,0x00,0x00,0x00,0x42,0x24,0x0e,0x00,0xa0,0x10,\r
+0x21,0x30,0x62,0x00,0x90,0x00,0xc3,0x8c,0xff,0xff,0x02,0x24,0x0a,0x00,0x62,0x14,\r
+0x00,0x00,0x00,0x00,0x8c,0x00,0xc2,0x8c,0x00,0x00,0x00,0x00,0x06,0x00,0x40,0x14,\r
+0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x24,0x88,0x00,0xc4,0xac,0x8c,0x00,0xc2,0xac,\r
+0x90,0x00,0xc5,0xac,0x21,0x38,0xa0,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0xe0,0x00,\r
+0x25,0xb0,0x04,0x3c,0x01,0x80,0x02,0x3c,0x18,0x03,0x85,0x34,0xe8,0x78,0x42,0x24,\r
+0xe0,0xff,0xbd,0x27,0x00,0x00,0xa2,0xac,0x1b,0x00,0x86,0x34,0xdb,0xff,0x03,0x24,\r
+0x27,0x00,0x84,0x34,0x07,0x00,0x02,0x24,0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,\r
+0x00,0x00,0x83,0xa0,0x18,0x00,0xbf,0xaf,0x00,0x00,0xc2,0xa0,0x01,0x00,0x11,0x24,\r
+0x21,0x80,0x00,0x00,0x2a,0x42,0x00,0x0c,0x21,0x20,0x00,0x02,0x01,0x00,0x02,0x26,\r
+0xff,0x00,0x50,0x30,0x2b,0x18,0x30,0x02,0xfa,0xff,0x60,0x10,0x00,0x00,0x00,0x00,\r
+0x2a,0x42,0x00,0x0c,0x21,0x20,0x00,0x00,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,\r
+0x10,0x00,0xb0,0x8f,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,\r
+0x02,0x80,0x02,0x3c,0x68,0x15,0x42,0x24,0x40,0x10,0x03,0x3c,0xff,0xff,0x44,0x30,\r
+0x25,0xc0,0x83,0x00,0xf4,0x64,0x58,0xac,0x40,0x00,0x18,0x27,0x00,0x65,0x58,0xac,\r
+0x40,0x00,0x18,0x27,0x0c,0x65,0x58,0xac,0x40,0x00,0x18,0x27,0x18,0x65,0x58,0xac,\r
+0x40,0x00,0x18,0x27,0xe0,0xff,0xbd,0x27,0x24,0x65,0x58,0xac,0x40,0x00,0x18,0x27,\r
+0x1c,0x00,0xb7,0xaf,0x18,0x00,0xb6,0xaf,0x14,0x00,0xb5,0xaf,0x10,0x00,0xb4,0xaf,\r
+0x0c,0x00,0xb3,0xaf,0x08,0x00,0xb2,0xaf,0x04,0x00,0xb1,0xaf,0x00,0x00,0xb0,0xaf,\r
+0x30,0x65,0x58,0xac,0x00,0x65,0x45,0x8c,0x0c,0x65,0x46,0x8c,0x18,0x65,0x47,0x8c,\r
+0x24,0x65,0x48,0x8c,0x30,0x65,0x49,0x8c,0x40,0x00,0x18,0x27,0x3c,0x65,0x58,0xac,\r
+0x21,0x50,0x00,0x03,0x25,0x20,0x83,0x00,0x40,0x00,0x18,0x27,0x20,0x10,0x03,0x3c,\r
+0xf0,0x64,0x44,0xac,0xfc,0x64,0x45,0xac,0x08,0x65,0x46,0xac,0x14,0x65,0x47,0xac,\r
+0x20,0x65,0x48,0xac,0x2c,0x65,0x49,0xac,0x25,0xb0,0x06,0x3c,0x88,0x64,0x43,0xac,\r
+0x84,0x64,0x43,0xac,0x94,0x64,0x43,0xac,0x90,0x64,0x43,0xac,0xa0,0x64,0x43,0xac,\r
+0x9c,0x64,0x43,0xac,0xac,0x64,0x43,0xac,0xa8,0x64,0x43,0xac,0x48,0x65,0x58,0xac,\r
+0x00,0x02,0x18,0x27,0x38,0x65,0x4a,0xac,0x60,0x65,0x58,0xac,0xb8,0x64,0x43,0xac,\r
+0xb4,0x64,0x43,0xac,0xc4,0x64,0x43,0xac,0xc0,0x64,0x43,0xac,0xd0,0x64,0x43,0xac,\r
+0xcc,0x64,0x43,0xac,0xac,0x00,0xc4,0x34,0xb0,0x00,0xc5,0x34,0x00,0x00,0x92,0x8c,\r
+0x48,0x65,0x50,0x8c,0x00,0x00,0xb3,0x8c,0x21,0x10,0x04,0x3c,0x23,0x10,0x09,0x3c,\r
+0x22,0x10,0x0c,0x3c,0x02,0x80,0x14,0x3c,0x02,0x80,0x15,0x3c,0x02,0x80,0x16,0x3c,\r
+0x02,0x80,0x17,0x3c,0x24,0x10,0x05,0x3c,0x21,0x88,0x00,0x03,0x68,0x7b,0x87,0x26,\r
+0x00,0x04,0x18,0x27,0x70,0x7b,0xa8,0x26,0x78,0x7b,0xca,0x26,0x80,0x7b,0xeb,0x26,\r
+0x00,0x04,0x2d,0x35,0x00,0x40,0x8e,0x34,0x00,0x80,0x8f,0x35,0x00,0x01,0xc6,0x34,\r
+0x44,0x65,0x50,0xac,0x5c,0x65,0x51,0xac,0xc4,0x65,0x4d,0xac,0x88,0x65,0x52,0xac,\r
+0x94,0x65,0x4e,0xac,0xb8,0x65,0x4f,0xac,0xac,0x65,0x53,0xac,0x00,0x00,0xc5,0xac,\r
+0xa8,0x65,0x45,0xac,0xc8,0x65,0x43,0xac,0xd4,0x65,0x58,0xac,0xdc,0x64,0x43,0xac,\r
+0xd8,0x64,0x43,0xac,0x66,0x65,0x40,0xa4,0x65,0x65,0x40,0xa0,0x64,0x65,0x40,0xa0,\r
+0xbc,0x65,0x49,0xac,0xc0,0x65,0x49,0xac,0x80,0x65,0x44,0xac,0x84,0x65,0x44,0xac,\r
+0x8c,0x65,0x44,0xac,0x90,0x65,0x44,0xac,0xb0,0x65,0x4c,0xac,0xb4,0x65,0x4c,0xac,\r
+0xa4,0x65,0x45,0xac,0xcc,0x65,0x43,0xac,0xd8,0x65,0x58,0xac,0x04,0x00,0x08,0xad,\r
+0x68,0x7b,0x87,0xae,0x04,0x00,0x4a,0xad,0x70,0x7b,0xa8,0xae,0x04,0x00,0x6b,0xad,\r
+0x78,0x7b,0xca,0xae,0x80,0x7b,0xeb,0xae,0x04,0x00,0xe7,0xac,0x02,0x80,0x02,0x3c,\r
+0x00,0x14,0x43,0x24,0x21,0x20,0xe0,0x00,0x03,0x00,0x06,0x24,0x21,0x10,0x80,0x00,\r
+0xff,0xff,0xc6,0x24,0x08,0x00,0x78,0xac,0x00,0x00,0x63,0xac,0x10,0x00,0x60,0xac,\r
+0x00,0x00,0x67,0xac,0x21,0x20,0x60,0x00,0x04,0x00,0x62,0xac,0x00,0x00,0x43,0xac,\r
+0x00,0x01,0x18,0x27,0xf5,0xff,0xc1,0x04,0x18,0x00,0x63,0x24,0x02,0x80,0x02,0x3c,\r
+0x70,0x7b,0x49,0x24,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0x04,0x00,0x28,0x8d,\r
+0x60,0x14,0x4b,0x24,0x04,0x00,0xe4,0xac,0x00,0x14,0x6a,0x24,0x01,0x00,0x07,0x24,\r
+0x21,0x28,0x00,0x00,0x07,0x00,0x06,0x24,0x21,0x20,0xab,0x00,0x21,0x10,0xaa,0x00,\r
+0xff,0xff,0xc6,0x24,0x68,0x00,0x58,0xac,0x70,0x00,0x47,0xac,0x18,0x00,0xa5,0x24,\r
+0x00,0x00,0x89,0xac,0x04,0x00,0x88,0xac,0x00,0x00,0x04,0xad,0x00,0x01,0x18,0x27,\r
+0xf5,0xff,0xc1,0x04,0x21,0x40,0x80,0x00,0x02,0x80,0x02,0x3c,0x78,0x7b,0x4a,0x24,\r
+0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0x04,0x00,0x45,0x8d,0x20,0x15,0x4b,0x24,\r
+0x04,0x00,0x24,0xad,0x02,0x00,0x07,0x24,0x00,0x14,0x69,0x24,0x21,0x20,0x00,0x00,\r
+0x01,0x00,0x06,0x24,0x21,0x40,0x8b,0x00,0x21,0x10,0x89,0x00,0xff,0xff,0xc6,0x24,\r
+0x28,0x01,0x58,0xac,0x30,0x01,0x47,0xac,0x18,0x00,0x84,0x24,0x00,0x00,0x0a,0xad,\r
+0x04,0x00,0x05,0xad,0x00,0x00,0xa8,0xac,0x00,0x02,0x18,0x27,0xf5,0xff,0xc1,0x04,\r
+0x21,0x28,0x00,0x01,0x02,0x80,0x05,0x3c,0x80,0x7b,0xa5,0x24,0x04,0x00,0xa6,0x8c,\r
+0x1c,0x00,0xb7,0x8f,0x18,0x00,0xb6,0x8f,0x14,0x00,0xb5,0x8f,0x10,0x00,0xb4,0x8f,\r
+0x0c,0x00,0xb3,0x8f,0x08,0x00,0xb2,0x8f,0x04,0x00,0xb1,0x8f,0x00,0x00,0xb0,0x8f,\r
+0x02,0x80,0x07,0x3c,0x02,0x80,0x03,0x3c,0x50,0x15,0xe4,0x24,0x00,0x14,0x63,0x24,\r
+0x03,0x00,0x02,0x24,0x20,0x00,0xbd,0x27,0x58,0x01,0x78,0xac,0x04,0x00,0x48,0xad,\r
+0x04,0x00,0xa4,0xac,0x60,0x01,0x62,0xac,0x50,0x15,0xe5,0xac,0x04,0x00,0x86,0xac,\r
+0x08,0x00,0xe0,0x03,0x00,0x00,0xc4,0xac,0xc8,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c,\r
+0x02,0x80,0x03,0x3c,0x28,0x00,0xb4,0xaf,0x24,0x00,0xb3,0xaf,0x70,0x9e,0x74,0x24,\r
+0xe4,0x9e,0x53,0x24,0x02,0x80,0x03,0x3c,0xff,0xff,0x02,0x3c,0x2c,0x00,0xb5,0xaf,\r
+0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,0x30,0x00,0xbf,0xaf,\r
+0xff,0x1f,0x55,0x34,0x68,0x15,0x70,0x24,0x21,0x88,0x00,0x00,0x02,0x80,0x12,0x3c,\r
+0xaa,0x4f,0x00,0x0c,0x21,0x20,0x20,0x02,0x84,0x51,0x02,0x8e,0x6c,0x00,0x86,0x8e,\r
+0x50,0x9e,0x43,0x26,0x6c,0x00,0x64,0x8e,0x1b,0x00,0x65,0x90,0x24,0x10,0x55,0x00,\r
+0x00,0x20,0x42,0x34,0xff,0xf1,0x03,0x24,0x21,0x20,0x86,0x00,0x24,0x10,0x43,0x00,\r
+0x00,0x29,0x05,0x00,0x42,0x20,0x04,0x00,0x00,0x02,0x42,0x34,0x50,0x51,0x04,0xae,\r
+0x74,0x51,0x05,0xae,0x84,0x51,0x02,0xae,0x78,0x51,0x05,0xae,0x21,0x30,0x00,0x00,\r
+0x21,0x10,0x06,0x02,0x01,0x00,0xc6,0x24,0x1d,0x00,0xc3,0x28,0xa5,0x51,0x40,0xa0,\r
+0x88,0x51,0x40,0xa0,0xfa,0xff,0x60,0x14,0xc2,0x51,0x40,0xa0,0x01,0x00,0x31,0x26,\r
+0x20,0x00,0x22,0x2a,0xe0,0x51,0x00,0xae,0xe1,0xff,0x40,0x14,0x94,0x00,0x10,0x26,\r
+0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0x68,0x15,0x4b,0x24,0x02,0x80,0x02,0x3c,\r
+0xe4,0x9e,0x6f,0x24,0x70,0x9e,0x4d,0x24,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,\r
+0x50,0x9e,0x6e,0x24,0x30,0x9e,0x4c,0x24,0x21,0x88,0x00,0x00,0x80,0x18,0x11,0x00,\r
+0x21,0x20,0x6d,0x00,0x21,0x10,0x6f,0x00,0x21,0x28,0x2e,0x02,0x21,0x30,0x2c,0x02,\r
+0x00,0x00,0x88,0x8c,0x00,0x00,0xa9,0x90,0x00,0x00,0xc7,0x90,0x00,0x00,0x4a,0x8c,\r
+0x21,0x10,0x2b,0x02,0x01,0x00,0x31,0x26,0x21,0x18,0x6b,0x00,0x1d,0x00,0x24,0x2a,\r
+0xec,0x44,0x68,0xac,0xca,0x44,0x47,0xa0,0x60,0x45,0x6a,0xac,0xef,0xff,0x80,0x14,\r
+0x90,0x44,0x49,0xa0,0x02,0x80,0x02,0x3c,0x68,0x15,0x4a,0x24,0x02,0x80,0x03,0x3c,\r
+0x02,0x80,0x02,0x3c,0x0c,0x9d,0x6b,0x24,0xac,0x9b,0x4c,0x24,0x21,0x88,0x00,0x00,\r
+0x21,0x48,0x00,0x00,0x21,0x30,0x00,0x00,0x21,0x40,0x2a,0x01,0x21,0x38,0x2b,0x01,\r
+0x21,0x10,0xe6,0x00,0x91,0x00,0x44,0x90,0x00,0x00,0x45,0x90,0x21,0x18,0x06,0x01,\r
+0x01,0x00,0xc6,0x24,0x05,0x00,0xc2,0x28,0xc5,0x43,0x64,0xa0,0xf8,0xff,0x40,0x14,\r
+0x34,0x43,0x65,0xa0,0x21,0x10,0x2c,0x02,0x1d,0x00,0x44,0x90,0x00,0x00,0x45,0x90,\r
+0x21,0x18,0x2a,0x02,0x01,0x00,0x31,0x26,0x1d,0x00,0x22,0x2a,0x73,0x44,0x64,0xa0,\r
+0x56,0x44,0x65,0xa0,0xeb,0xff,0x40,0x14,0x05,0x00,0x29,0x25,0x52,0x00,0x02,0x24,\r
+0x10,0x00,0xa2,0xa3,0x41,0x00,0x03,0x24,0x4d,0x00,0x02,0x24,0x02,0x80,0x07,0x3c,\r
+0xdc,0xa4,0xe7,0x24,0x11,0x00,0xa3,0xa3,0x12,0x00,0xa2,0xa3,0xe8,0x03,0x03,0x24,\r
+0x01,0x00,0x02,0x24,0x00,0x80,0x06,0x3c,0x10,0x00,0xa5,0x27,0x21,0x20,0xe0,0x00,\r
+0x60,0x3e,0xc6,0x24,0x0c,0x00,0xe3,0xac,0x14,0x00,0xe2,0xa0,0x88,0x0e,0x00,0x0c,\r
+0x13,0x00,0xa0,0xa3,0x30,0x00,0xbf,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,\r
+0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,\r
+0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c,\r
+0x42,0x00,0x03,0x24,0x10,0x00,0xa3,0xa3,0x55,0x60,0x40,0xa0,0x4e,0x00,0x03,0x24,\r
+0x43,0x00,0x02,0x24,0x02,0x80,0x07,0x3c,0x14,0xa5,0xe7,0x24,0x11,0x00,0xa2,0xa3,\r
+0x12,0x00,0xa3,0xa3,0xd0,0x07,0x02,0x24,0x01,0x00,0x03,0x24,0x00,0x80,0x06,0x3c,\r
+0x10,0x00,0xa5,0x27,0x21,0x20,0xe0,0x00,0xec,0x4f,0xc6,0x24,0x0c,0x00,0xe2,0xac,\r
+0x14,0x00,0xe3,0xa0,0x18,0x00,0xbf,0xaf,0x88,0x0e,0x00,0x0c,0x13,0x00,0xa0,0xa3,\r
+0x18,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,\r
+0x48,0xfd,0xbd,0x27,0xb4,0x02,0xb3,0xaf,0x02,0x80,0x02,0x3c,0x02,0x80,0x13,0x3c,\r
+0xf0,0x9f,0x46,0x24,0x68,0x15,0x63,0x26,0xb0,0x02,0xb2,0xaf,0xac,0x02,0xb1,0xaf,\r
+0xa8,0x02,0xb0,0xaf,0x03,0x40,0x60,0xa0,0x21,0x38,0xa0,0x03,0x90,0x00,0xc8,0x24,\r
+0x00,0x00,0xc2,0x8c,0x04,0x00,0xc3,0x8c,0x08,0x00,0xc4,0x8c,0x0c,0x00,0xc5,0x8c,\r
+0x10,0x00,0xc6,0x24,0x00,0x00,0xe2,0xac,0x04,0x00,0xe3,0xac,0x08,0x00,0xe4,0xac,\r
+0x0c,0x00,0xe5,0xac,0xf6,0xff,0xc8,0x14,0x10,0x00,0xe7,0x24,0x00,0x00,0xc3,0x8c,\r
+0x02,0x80,0x02,0x3c,0x84,0xa0,0x58,0x24,0x00,0x00,0xe3,0xac,0x98,0x00,0xb9,0x27,\r
+0x00,0x01,0x12,0x27,0x01,0x00,0x02,0x93,0x05,0x00,0x03,0x93,0x09,0x00,0x04,0x93,\r
+0x0d,0x00,0x05,0x93,0x00,0x00,0x11,0x93,0x02,0x00,0x0d,0x93,0x04,0x00,0x10,0x93,\r
+0x06,0x00,0x0c,0x93,0x08,0x00,0x0f,0x93,0x0a,0x00,0x07,0x93,0x0c,0x00,0x0e,0x93,\r
+0x0e,0x00,0x06,0x93,0x03,0x00,0x08,0x93,0x07,0x00,0x09,0x93,0x0b,0x00,0x0a,0x93,\r
+0x0f,0x00,0x0b,0x93,0x00,0x12,0x02,0x00,0x00,0x1a,0x03,0x00,0x00,0x22,0x04,0x00,\r
+0x00,0x2a,0x05,0x00,0x25,0x10,0x51,0x00,0x25,0x18,0x70,0x00,0x25,0x20,0x8f,0x00,\r
+0x25,0x28,0xae,0x00,0x00,0x6c,0x0d,0x00,0x00,0x64,0x0c,0x00,0x00,0x3c,0x07,0x00,\r
+0x00,0x34,0x06,0x00,0x25,0x68,0xa2,0x01,0x25,0x60,0x83,0x01,0x25,0x38,0xe4,0x00,\r
+0x25,0x30,0xc5,0x00,0x00,0x46,0x08,0x00,0x00,0x4e,0x09,0x00,0x00,0x56,0x0a,0x00,\r
+0x00,0x5e,0x0b,0x00,0x25,0x40,0x0d,0x01,0x25,0x48,0x2c,0x01,0x25,0x50,0x47,0x01,\r
+0x25,0x58,0x66,0x01,0x10,0x00,0x18,0x27,0x00,0x00,0x28,0xaf,0x04,0x00,0x29,0xaf,\r
+0x08,0x00,0x2a,0xaf,0x0c,0x00,0x2b,0xaf,0xd2,0xff,0x12,0x17,0x10,0x00,0x39,0x27,\r
+0x01,0x00,0x02,0x93,0x05,0x00,0x03,0x93,0x00,0x00,0x09,0x93,0x02,0x00,0x04,0x93,\r
+0x04,0x00,0x08,0x93,0x06,0x00,0x05,0x93,0x07,0x00,0x06,0x93,0x03,0x00,0x07,0x93,\r
+0x00,0x12,0x02,0x00,0x00,0x1a,0x03,0x00,0x25,0x10,0x49,0x00,0x25,0x18,0x68,0x00,\r
+0x00,0x24,0x04,0x00,0x00,0x2c,0x05,0x00,0x25,0x20,0x82,0x00,0x25,0x28,0xa3,0x00,\r
+0x00,0x3e,0x07,0x00,0x00,0x36,0x06,0x00,0x02,0x80,0x02,0x3c,0x25,0x38,0xe4,0x00,\r
+0x25,0x30,0xc5,0x00,0x8c,0xa1,0x58,0x24,0x04,0x00,0x26,0xaf,0x00,0x00,0x27,0xaf,\r
+0x00,0x01,0x12,0x27,0xa0,0x01,0xb9,0x27,0x01,0x00,0x02,0x93,0x05,0x00,0x03,0x93,\r
+0x09,0x00,0x04,0x93,0x0d,0x00,0x05,0x93,0x00,0x00,0x11,0x93,0x02,0x00,0x0d,0x93,\r
+0x04,0x00,0x10,0x93,0x06,0x00,0x0c,0x93,0x08,0x00,0x0f,0x93,0x0a,0x00,0x07,0x93,\r
+0x0c,0x00,0x0e,0x93,0x0e,0x00,0x06,0x93,0x03,0x00,0x08,0x93,0x07,0x00,0x09,0x93,\r
+0x0b,0x00,0x0a,0x93,0x0f,0x00,0x0b,0x93,0x00,0x12,0x02,0x00,0x00,0x1a,0x03,0x00,\r
+0x00,0x22,0x04,0x00,0x00,0x2a,0x05,0x00,0x25,0x10,0x51,0x00,0x25,0x18,0x70,0x00,\r
+0x25,0x20,0x8f,0x00,0x25,0x28,0xae,0x00,0x00,0x6c,0x0d,0x00,0x00,0x64,0x0c,0x00,\r
+0x00,0x3c,0x07,0x00,0x00,0x34,0x06,0x00,0x25,0x68,0xa2,0x01,0x25,0x60,0x83,0x01,\r
+0x25,0x38,0xe4,0x00,0x25,0x30,0xc5,0x00,0x00,0x46,0x08,0x00,0x00,0x4e,0x09,0x00,\r
+0x00,0x56,0x0a,0x00,0x00,0x5e,0x0b,0x00,0x25,0x40,0x0d,0x01,0x25,0x48,0x2c,0x01,\r
+0x25,0x50,0x47,0x01,0x25,0x58,0x66,0x01,0x10,0x00,0x18,0x27,0x00,0x00,0x28,0xaf,\r
+0x04,0x00,0x29,0xaf,0x08,0x00,0x2a,0xaf,0x0c,0x00,0x2b,0xaf,0xd2,0xff,0x12,0x17,\r
+0x10,0x00,0x39,0x27,0x01,0x00,0x02,0x93,0x05,0x00,0x03,0x93,0x00,0x00,0x09,0x93,\r
+0x02,0x00,0x04,0x93,0x04,0x00,0x08,0x93,0x06,0x00,0x05,0x93,0x07,0x00,0x06,0x93,\r
+0x03,0x00,0x07,0x93,0x00,0x12,0x02,0x00,0x00,0x1a,0x03,0x00,0x25,0x10,0x49,0x00,\r
+0x25,0x18,0x68,0x00,0x00,0x24,0x04,0x00,0x00,0x2c,0x05,0x00,0x25,0x20,0x82,0x00,\r
+0x25,0x28,0xa3,0x00,0x00,0x3e,0x07,0x00,0x00,0x36,0x06,0x00,0x25,0x30,0xc5,0x00,\r
+0x25,0x38,0xe4,0x00,0x02,0x80,0x02,0x3c,0x04,0x00,0x26,0xaf,0x00,0x00,0x27,0xaf,\r
+0x68,0x15,0x46,0x24,0x21,0x50,0x00,0x00,0x80,0x20,0x0a,0x00,0x21,0x10,0x9d,0x00,\r
+0x00,0x00,0x45,0x8c,0x01,0x00,0x43,0x25,0xff,0x00,0x6a,0x30,0x21,0x20,0x86,0x00,\r
+0x25,0x00,0x42,0x2d,0xf8,0xff,0x40,0x14,0x18,0x40,0x85,0xac,0x02,0x80,0x02,0x3c,\r
+0x68,0x15,0x4b,0x24,0x21,0x50,0x00,0x00,0xc0,0x10,0x0a,0x00,0x21,0x48,0x5d,0x00,\r
+0x21,0x38,0x00,0x00,0x21,0x40,0x4b,0x00,0x21,0x10,0x27,0x01,0xa0,0x01,0x46,0x90,\r
+0x98,0x00,0x45,0x90,0x01,0x00,0xe4,0x24,0x21,0x18,0x07,0x01,0xff,0x00,0x87,0x30,\r
+0x08,0x00,0xe2,0x2c,0xb4,0x41,0x66,0xa0,0xf7,0xff,0x40,0x14,0xac,0x40,0x65,0xa0,\r
+0x01,0x00,0x42,0x25,0xff,0x00,0x4a,0x30,0x21,0x00,0x43,0x2d,0xef,0xff,0x60,0x14,\r
+0xc0,0x10,0x0a,0x00,0x25,0xb0,0x02,0x3c,0x0a,0x00,0x42,0x34,0x00,0x00,0x43,0x90,\r
+0x00,0x00,0x00,0x00,0x20,0x00,0x63,0x30,0x42,0x00,0x60,0x10,0x68,0x15,0x64,0x26,\r
+0x33,0x00,0x02,0x24,0xc1,0x42,0x62,0xa1,0x1c,0x00,0x03,0x24,0x0f,0x00,0x02,0x24,\r
+0xbc,0x42,0x63,0xa1,0xbd,0x42,0x62,0xa1,0x68,0x15,0x65,0x26,0x08,0x40,0xa4,0x8c,\r
+0xff,0x7f,0x08,0x3c,0xff,0xff,0x08,0x35,0xc0,0xff,0x02,0x24,0x24,0x20,0x88,0x00,\r
+0x24,0x20,0x82,0x00,0x0c,0x00,0x84,0x34,0xff,0xc0,0x02,0x24,0x24,0x20,0x82,0x00,\r
+0xc0,0xff,0x02,0x3c,0xff,0xff,0x42,0x34,0x00,0x18,0x84,0x34,0xbf,0xff,0x03,0x3c,\r
+0x24,0x20,0x82,0x00,0xff,0xff,0x63,0x34,0x7f,0xff,0x02,0x3c,0x24,0x20,0x83,0x00,\r
+0xff,0xff,0x42,0x34,0x24,0x20,0x82,0x00,0x0c,0x40,0xa6,0x8c,0x7f,0xff,0x03,0x24,\r
+0x40,0x40,0x84,0x34,0xff,0xff,0x02,0x3c,0x24,0x20,0x83,0x00,0xff,0x7f,0x42,0x34,\r
+0xff,0xbf,0x03,0x3c,0x10,0x40,0xa7,0x8c,0x24,0x20,0x82,0x00,0xff,0xff,0x63,0x34,\r
+0xff,0x9f,0x02,0x3c,0x24,0x30,0xc3,0x00,0xff,0xff,0x42,0x34,0xff,0x3f,0x03,0x3c,\r
+0x24,0x20,0x82,0x00,0xff,0xff,0x63,0x34,0x12,0x00,0x02,0x24,0xb4,0x02,0xb3,0x8f,\r
+0xb0,0x02,0xb2,0x8f,0xac,0x02,0xb1,0x8f,0xa8,0x02,0xb0,0x8f,0x24,0x38,0xe3,0x00,\r
+0xc7,0x42,0xa2,0xa0,0x1f,0x00,0x03,0x24,0x01,0x00,0x02,0x24,0x24,0x30,0xc8,0x00,\r
+0xbe,0x42,0xa3,0xa0,0xc0,0x42,0xa2,0xa0,0xff,0x00,0x03,0x24,0xff,0xff,0x02,0x24,\r
+0xb8,0x02,0xbd,0x27,0x08,0x40,0xa4,0xac,0x10,0x40,0xa7,0xac,0x0c,0x40,0xa6,0xac,\r
+0xc2,0x42,0xa2,0xa0,0xc4,0x42,0xa3,0xa4,0xbf,0x42,0xa0,0xa0,0x08,0x00,0xe0,0x03,\r
+0xc6,0x42,0xa0,0xa0,0x33,0x00,0x02,0x24,0xc1,0x42,0x82,0xa0,0x0d,0x00,0x03,0x24,\r
+0x03,0x00,0x02,0x24,0xbc,0x42,0x83,0xa0,0xa8,0x60,0x00,0x08,0xbd,0x42,0x82,0xa0,\r
+0x02,0x80,0x07,0x3c,0x68,0x15,0xe7,0x24,0xe0,0xff,0xbd,0x27,0x18,0x00,0xbf,0xaf,\r
+0xe6,0x42,0xe0,0xa0,0xe4,0x42,0xe8,0x8c,0xff,0xef,0x02,0x3c,0xff,0xff,0x42,0x34,\r
+0xff,0xbf,0x03,0x3c,0x00,0x40,0xe9,0x8c,0x24,0x40,0x02,0x01,0xff,0xff,0x63,0x34,\r
+0xff,0x7f,0x02,0x3c,0x24,0x40,0x03,0x01,0xff,0xff,0x42,0x34,0xf0,0xff,0x04,0x24,\r
+0x24,0x40,0x02,0x01,0xff,0xdf,0x02,0x3c,0x24,0x48,0x24,0x01,0xff,0xf0,0x03,0x24,\r
+0xff,0xff,0x42,0x34,0x24,0x48,0x23,0x01,0x24,0x40,0x02,0x01,0x20,0x00,0x03,0x24,\r
+0x0a,0x00,0x02,0x24,0xd2,0x42,0xe2,0xa0,0xd7,0x42,0xe3,0xa0,0x20,0x00,0x02,0x24,\r
+0x00,0x01,0x03,0x24,0xc8,0x42,0xe2,0xa4,0xca,0x42,0xe3,0xa4,0x00,0x02,0x02,0x24,\r
+0x49,0x00,0x03,0x24,0x02,0x80,0x0a,0x3c,0x00,0x40,0xe9,0xac,0xe4,0x42,0xe8,0xac,\r
+0xf8,0xa4,0x4a,0x25,0xff,0xff,0x0c,0x34,0x3e,0x00,0x0d,0x24,0x1c,0x00,0x0e,0x24,\r
+0x01,0x00,0x0b,0x24,0x11,0x00,0xa3,0xa3,0xcc,0x42,0xe2,0xa4,0xd0,0x07,0x03,0x24,\r
+0x44,0x00,0x02,0x24,0x00,0x80,0x06,0x3c,0x10,0x00,0xa2,0xa3,0x10,0x00,0xa5,0x27,\r
+0x47,0x00,0x02,0x24,0x21,0x20,0x40,0x01,0xa4,0x50,0xc6,0x24,0x04,0x40,0xec,0xac,\r
+0xd0,0x42,0xed,0xa0,0xd1,0x42,0xee,0xa0,0x02,0x40,0xeb,0xa0,0x0c,0x00,0x43,0xad,\r
+0x14,0x00,0x4b,0xa1,0xe8,0x63,0xec,0xac,0xce,0x42,0xed,0xa0,0xcf,0x42,0xee,0xa0,\r
+0xd6,0x42,0xe0,0xa0,0xd4,0x42,0xe0,0xa0,0x12,0x00,0xa2,0xa3,0x88,0x0e,0x00,0x0c,\r
+0x13,0x00,0xa0,0xa3,0x18,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x20,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c,0x50,0x00,0x03,0x24,\r
+0x10,0x00,0xa3,0xa3,0x36,0x62,0x40,0xa0,0x41,0x00,0x03,0x24,0x52,0x00,0x02,0x24,\r
+0x02,0x80,0x07,0x3c,0xa0,0xa5,0xe7,0x24,0x11,0x00,0xa2,0xa3,0x12,0x00,0xa3,0xa3,\r
+0xd0,0x07,0x02,0x24,0x01,0x00,0x03,0x24,0x01,0x80,0x06,0x3c,0x10,0x00,0xa5,0x27,\r
+0x21,0x20,0xe0,0x00,0x74,0x67,0xc6,0x24,0x0c,0x00,0xe2,0xac,0x14,0x00,0xe3,0xa0,\r
+0x18,0x00,0xbf,0xaf,0x88,0x0e,0x00,0x0c,0x13,0x00,0xa0,0xa3,0x18,0x00,0xbf,0x8f,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xd8,0xff,0xbd,0x27,\r
+0x18,0x00,0xb0,0xaf,0x02,0x80,0x10,0x3c,0x68,0x15,0x10,0x26,0x20,0x00,0xbf,0xaf,\r
+0x1c,0x00,0xb1,0xaf,0x00,0x40,0x09,0x8e,0xff,0xff,0x02,0x24,0xff,0x00,0x4b,0x30,\r
+0x0f,0xff,0x02,0x24,0x24,0x48,0x22,0x01,0xff,0xff,0x02,0x3c,0xff,0x0f,0x42,0x34,\r
+0x24,0x48,0x22,0x01,0x01,0x00,0x07,0x3c,0x47,0x00,0x02,0x24,0x3b,0x00,0x03,0x24,\r
+0x02,0x80,0x08,0x3c,0x10,0x00,0xa2,0xa3,0x11,0x00,0xa3,0xa3,0xbc,0xa5,0x08,0x25,\r
+0x56,0x30,0xea,0x34,0xd0,0x07,0x02,0x24,0x01,0x00,0x03,0x24,0xf4,0x98,0xe7,0x34,\r
+0x00,0x80,0x06,0x3c,0x04,0x43,0x0b,0xae,0x00,0x40,0x09,0xae,0x43,0x00,0x11,0x24,\r
+0x10,0x00,0xa5,0x27,0x0c,0x43,0x07,0xae,0x10,0x43,0x0a,0xae,0x0c,0x00,0x02,0xad,\r
+0x14,0x00,0x03,0xa1,0x08,0x43,0x00,0xae,0x14,0x43,0x00,0xae,0x18,0x43,0x00,0xae,\r
+0x21,0x20,0x00,0x01,0x3c,0x5c,0xc6,0x24,0x12,0x00,0xb1,0xa3,0x88,0x0e,0x00,0x0c,\r
+0x13,0x00,0xa0,0xa3,0x1e,0x00,0x02,0x24,0x21,0x43,0x02,0xa2,0x4a,0x00,0x03,0x24,\r
+0x45,0x00,0x02,0x24,0x1c,0x43,0x03,0xa2,0x1d,0x43,0x02,0xa2,0x23,0x00,0x03,0x24,\r
+0x3e,0x00,0x02,0x24,0x1e,0x43,0x11,0xa2,0x1f,0x43,0x02,0xa2,0x20,0x43,0x03,0xa2,\r
+0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,\r
+0x28,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x3b,0x00,0x02,0x24,0x43,0x00,0x03,0x24,\r
+0x10,0x00,0xa2,0xa3,0x11,0x00,0xa3,0xa3,0x36,0x00,0x02,0x24,0x02,0x80,0x03,0x3c,\r
+0x02,0x80,0x07,0x3c,0xd8,0xa5,0xe7,0x24,0x12,0x00,0xa2,0xa3,0x3b,0x58,0x60,0xa0,\r
+0xd0,0x07,0x02,0x24,0x01,0x00,0x03,0x24,0x00,0x80,0x06,0x3c,0x10,0x00,0xa5,0x27,\r
+0x21,0x20,0xe0,0x00,0x60,0x61,0xc6,0x24,0x0c,0x00,0xe2,0xac,0x14,0x00,0xe3,0xa0,\r
+0x18,0x00,0xbf,0xaf,0x88,0x0e,0x00,0x0c,0x13,0x00,0xa0,0xa3,0x18,0x00,0xbf,0x8f,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,\r
+0x02,0x80,0x02,0x3c,0x52,0x00,0x03,0x24,0x10,0x00,0xa3,0xa3,0xac,0x79,0x40,0xa4,\r
+0x54,0x00,0x03,0x24,0x53,0x00,0x02,0x24,0x02,0x80,0x07,0x3c,0x10,0xa6,0xe7,0x24,\r
+0x11,0x00,0xa2,0xa3,0x12,0x00,0xa3,0xa3,0xf4,0x01,0x02,0x24,0x01,0x00,0x03,0x24,\r
+0x01,0x80,0x06,0x3c,0x10,0x00,0xa5,0x27,0x21,0x20,0xe0,0x00,0xb8,0x68,0xc6,0x24,\r
+0x0c,0x00,0xe2,0xac,0x14,0x00,0xe3,0xa0,0x18,0x00,0xbf,0xaf,0x88,0x0e,0x00,0x0c,\r
+0x13,0x00,0xa0,0xa3,0x18,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,\r
+0x20,0x00,0xbd,0x27,0x02,0x80,0x04,0x3c,0xd8,0xff,0xbd,0x27,0x64,0x79,0x84,0x24,\r
+0x21,0x28,0x00,0x00,0x20,0x00,0xbf,0xaf,0x58,0x45,0x00,0x0c,0x0a,0x00,0x06,0x24,\r
+0x02,0x80,0x07,0x3c,0x68,0x15,0xe7,0x24,0xf8,0x63,0xe3,0x8c,0xfd,0xff,0x02,0x24,\r
+0x02,0x80,0x08,0x3c,0x24,0x18,0x62,0x00,0xfe,0xff,0x02,0x24,0x24,0x18,0x62,0x00,\r
+0x05,0x00,0x02,0x24,0xf8,0x63,0xe3,0xac,0xfc,0x63,0xe2,0xa0,0x28,0x00,0x03,0x24,\r
+0x46,0x00,0x02,0x24,0x10,0x00,0xa2,0xa3,0xfd,0x63,0xe3,0xa0,0x4b,0x00,0x02,0x24,\r
+0x42,0x00,0x03,0x24,0x2c,0xa6,0x08,0x25,0x11,0x00,0xa3,0xa3,0x12,0x00,0xa2,0xa3,\r
+0xd0,0x07,0x03,0x24,0x01,0x00,0x02,0x24,0x01,0x80,0x06,0x3c,0x10,0x00,0xa5,0x27,\r
+0x21,0x20,0x00,0x01,0x80,0x69,0xc6,0x24,0xfa,0x63,0xe0,0xa4,0x0c,0x00,0x03,0xad,\r
+0x14,0x00,0x02,0xa1,0x88,0x0e,0x00,0x0c,0x13,0x00,0xa0,0xa3,0x20,0x00,0xbf,0x8f,\r
+0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x78,0x0c,0x00,0x00,0x01,0x00,0x00,0x5e,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x01,0x5e,0x78,0x0c,0x00,0x00,0x01,0x00,0x02,0x5e,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x03,0x5e,0x78,0x0c,0x00,0x00,0x01,0x00,0x04,0x5d,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x05,0x5b,0x78,0x0c,0x00,0x00,0x01,0x00,0x06,0x59,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x07,0x57,0x78,0x0c,0x00,0x00,0x01,0x00,0x08,0x55,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x09,0x53,0x78,0x0c,0x00,0x00,0x01,0x00,0x0a,0x51,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x0b,0x4f,0x78,0x0c,0x00,0x00,0x01,0x00,0x0c,0x4d,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x0d,0x4b,0x78,0x0c,0x00,0x00,0x01,0x00,0x0e,0x49,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x0f,0x47,0x78,0x0c,0x00,0x00,0x01,0x00,0x10,0x45,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x11,0x43,0x78,0x0c,0x00,0x00,0x01,0x00,0x12,0x41,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x13,0x3f,0x78,0x0c,0x00,0x00,0x01,0x00,0x14,0x3d,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x15,0x3b,0x78,0x0c,0x00,0x00,0x01,0x00,0x16,0x39,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x17,0x37,0x78,0x0c,0x00,0x00,0x01,0x00,0x18,0x35,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x19,0x33,0x78,0x0c,0x00,0x00,0x01,0x00,0x1a,0x31,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x1b,0x2f,0x78,0x0c,0x00,0x00,0x01,0x00,0x1c,0x2d,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x1d,0x2b,0x78,0x0c,0x00,0x00,0x01,0x00,0x1e,0x29,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x1f,0x27,0x78,0x0c,0x00,0x00,0x01,0x00,0x20,0x25,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x21,0x23,0x78,0x0c,0x00,0x00,0x01,0x00,0x22,0x21,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x23,0x1f,0x78,0x0c,0x00,0x00,0x01,0x00,0x24,0x1d,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x25,0x1b,0x78,0x0c,0x00,0x00,0x01,0x00,0x26,0x19,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x27,0x17,0x78,0x0c,0x00,0x00,0x01,0x00,0x28,0x15,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x29,0x13,0x78,0x0c,0x00,0x00,0x01,0x00,0x2a,0x11,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x2b,0x0f,0x78,0x0c,0x00,0x00,0x01,0x00,0x2c,0x0d,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x2d,0x0b,0x78,0x0c,0x00,0x00,0x01,0x00,0x2e,0x09,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x2f,0x07,0x78,0x0c,0x00,0x00,0x01,0x00,0x30,0x05,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x31,0x03,0x78,0x0c,0x00,0x00,0x01,0x00,0x32,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x33,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x34,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x35,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x36,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x37,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x38,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x39,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x3a,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x3b,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x3c,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x3d,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x3e,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x3f,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x40,0x5e,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x41,0x5e,0x78,0x0c,0x00,0x00,0x01,0x00,0x42,0x5e,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x43,0x5e,0x78,0x0c,0x00,0x00,0x01,0x00,0x44,0x5d,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x45,0x5b,0x78,0x0c,0x00,0x00,0x01,0x00,0x46,0x59,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x47,0x57,0x78,0x0c,0x00,0x00,0x01,0x00,0x48,0x55,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x49,0x53,0x78,0x0c,0x00,0x00,0x01,0x00,0x4a,0x51,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x4b,0x4f,0x78,0x0c,0x00,0x00,0x01,0x00,0x4c,0x4d,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x4d,0x4b,0x78,0x0c,0x00,0x00,0x01,0x00,0x4e,0x49,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x4f,0x47,0x78,0x0c,0x00,0x00,0x01,0x00,0x50,0x45,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x51,0x43,0x78,0x0c,0x00,0x00,0x01,0x00,0x52,0x41,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x53,0x3f,0x78,0x0c,0x00,0x00,0x01,0x00,0x54,0x3d,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x55,0x3b,0x78,0x0c,0x00,0x00,0x01,0x00,0x56,0x39,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x57,0x37,0x78,0x0c,0x00,0x00,0x01,0x00,0x58,0x35,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x59,0x33,0x78,0x0c,0x00,0x00,0x01,0x00,0x5a,0x31,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x5b,0x2f,0x78,0x0c,0x00,0x00,0x01,0x00,0x5c,0x2d,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x5d,0x2b,0x78,0x0c,0x00,0x00,0x01,0x00,0x5e,0x29,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x5f,0x27,0x78,0x0c,0x00,0x00,0x01,0x00,0x60,0x25,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x61,0x23,0x78,0x0c,0x00,0x00,0x01,0x00,0x62,0x21,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x63,0x1f,0x78,0x0c,0x00,0x00,0x01,0x00,0x64,0x1d,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x65,0x1b,0x78,0x0c,0x00,0x00,0x01,0x00,0x66,0x19,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x67,0x17,0x78,0x0c,0x00,0x00,0x01,0x00,0x68,0x15,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x69,0x13,0x78,0x0c,0x00,0x00,0x01,0x00,0x6a,0x11,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x6b,0x0f,0x78,0x0c,0x00,0x00,0x01,0x00,0x6c,0x0d,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x6d,0x0b,0x78,0x0c,0x00,0x00,0x01,0x00,0x6e,0x09,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x6f,0x07,0x78,0x0c,0x00,0x00,0x01,0x00,0x70,0x05,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x71,0x03,0x78,0x0c,0x00,0x00,0x01,0x00,0x72,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x73,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x74,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x75,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x76,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x77,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x78,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x79,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x7a,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x7b,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x7c,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x7d,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x7e,0x01,0x78,0x0c,0x00,0x00,\r
+0x01,0x00,0x7f,0x01,0x78,0x0c,0x00,0x00,0x1e,0x00,0x00,0x30,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x01,0x30,0x78,0x0c,0x00,0x00,0x1e,0x00,0x02,0x30,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x03,0x30,0x78,0x0c,0x00,0x00,0x1e,0x00,0x04,0x30,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x05,0x30,0x78,0x0c,0x00,0x00,0x1e,0x00,0x06,0x30,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x07,0x30,0x78,0x0c,0x00,0x00,0x1e,0x00,0x08,0x3e,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x09,0x40,0x78,0x0c,0x00,0x00,0x1e,0x00,0x0a,0x42,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x0b,0x44,0x78,0x0c,0x00,0x00,0x1e,0x00,0x0c,0x46,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x0d,0x48,0x78,0x0c,0x00,0x00,0x1e,0x00,0x0e,0x48,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x0f,0x4a,0x78,0x0c,0x00,0x00,0x1e,0x00,0x10,0x4a,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x11,0x4c,0x78,0x0c,0x00,0x00,0x1e,0x00,0x12,0x4c,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x13,0x4e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x14,0x50,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x15,0x50,0x78,0x0c,0x00,0x00,0x1e,0x00,0x16,0x50,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x17,0x52,0x78,0x0c,0x00,0x00,0x1e,0x00,0x18,0x52,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x19,0x52,0x78,0x0c,0x00,0x00,0x1e,0x00,0x1a,0x54,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x1b,0x54,0x78,0x0c,0x00,0x00,0x1e,0x00,0x1c,0x54,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x1d,0x56,0x78,0x0c,0x00,0x00,0x1e,0x00,0x1e,0x56,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x1f,0x56,0x78,0x0c,0x00,0x00,0x1e,0x00,0x20,0x56,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x21,0x58,0x78,0x0c,0x00,0x00,0x1e,0x00,0x22,0x58,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x23,0x58,0x78,0x0c,0x00,0x00,0x1e,0x00,0x24,0x58,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x25,0x5a,0x78,0x0c,0x00,0x00,0x1e,0x00,0x26,0x5a,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x27,0x5a,0x78,0x0c,0x00,0x00,0x1e,0x00,0x28,0x5c,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x29,0x5c,0x78,0x0c,0x00,0x00,0x1e,0x00,0x2a,0x5e,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x2b,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x2c,0x5e,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x2d,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x2e,0x5e,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x2f,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x30,0x5e,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x31,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x32,0x5e,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x33,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x34,0x5e,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x35,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x36,0x5e,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x37,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x38,0x5e,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x39,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x3a,0x5e,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x3b,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x3c,0x5e,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x3d,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x3e,0x5e,0x78,0x0c,0x00,0x00,\r
+0x1e,0x00,0x3f,0x5e,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x08,0x00,0x00,\r
+0x00,0x00,0x04,0x03,0x04,0x08,0x00,0x00,0x03,0x00,0x00,0x00,0x08,0x08,0x00,0x00,\r
+0x00,0xfc,0x00,0x00,0x0c,0x08,0x00,0x00,0x0a,0x00,0x00,0x04,0x10,0x08,0x00,0x00,\r
+0xff,0x10,0x10,0x80,0x14,0x08,0x00,0x00,0x10,0x3d,0x0c,0x02,0x18,0x08,0x00,0x00,\r
+0xc5,0x03,0x00,0x00,0x1c,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x08,0x00,0x00,\r
+0x04,0x00,0x00,0x00,0x24,0x08,0x00,0x00,0x00,0x02,0x69,0x00,0x28,0x08,0x00,0x00,\r
+0x04,0x00,0x00,0x00,0x2c,0x08,0x00,0x00,0x00,0x02,0x69,0x00,0x30,0x08,0x00,0x00,\r
+0x04,0x00,0x00,0x00,0x34,0x08,0x00,0x00,0x00,0x02,0x69,0x00,0x38,0x08,0x00,0x00,\r
+0x04,0x00,0x00,0x00,0x3c,0x08,0x00,0x00,0x00,0x02,0x69,0x00,0x40,0x08,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x44,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x08,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x4c,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x08,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x54,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x08,0x00,0x00,\r
+0x65,0xa9,0x65,0xa9,0x5c,0x08,0x00,0x00,0x65,0xa9,0x65,0xa9,0x60,0x08,0x00,0x00,\r
+0x30,0x01,0x7f,0x0f,0x64,0x08,0x00,0x00,0x30,0x01,0x7f,0x0f,0x68,0x08,0x00,0x00,\r
+0x30,0x01,0x7f,0x0f,0x6c,0x08,0x00,0x00,0x30,0x01,0x7f,0x0f,0x70,0x08,0x00,0x00,\r
+0x00,0x03,0x00,0x03,0x74,0x08,0x00,0x00,0x00,0x03,0x00,0x03,0x78,0x08,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x7c,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x08,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x94,0x08,0x00,0x00,0xfe,0xff,0xff,0xff,0x98,0x08,0x00,0x00,\r
+0x10,0x20,0x30,0x40,0x9c,0x08,0x00,0x00,0x50,0x60,0x70,0x00,0xb0,0x08,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0xe0,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0xe4,0x08,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x03,0x03,0x03,0x03,0x04,0x0e,0x00,0x00,\r
+0x03,0x03,0x03,0x03,0x08,0x0e,0x00,0x00,0x03,0x03,0x00,0x00,0x0c,0x0e,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x10,0x0e,0x00,0x00,0x03,0x03,0x03,0x03,0x14,0x0e,0x00,0x00,\r
+0x03,0x03,0x03,0x03,0x18,0x0e,0x00,0x00,0x03,0x03,0x03,0x03,0x1c,0x0e,0x00,0x00,\r
+0x03,0x03,0x03,0x03,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x09,0x00,0x00,\r
+0x23,0x00,0x00,0x00,0x08,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x09,0x00,0x00,\r
+0x33,0x13,0x32,0x03,0x08,0x0a,0x00,0x00,0x00,0x86,0x88,0x8f,0x2c,0x0a,0x00,0x00,\r
+0x00,0x00,0x92,0x00,0x00,0x0c,0x00,0x00,0x80,0x00,0x00,0x00,0x04,0x0c,0x00,0x00,\r
+0x33,0x54,0x00,0x00,0x08,0x0c,0x00,0x00,0xe4,0x00,0x00,0x00,0x0c,0x0c,0x00,0x00,\r
+0x6c,0x6c,0x6c,0x6c,0x10,0x0c,0x00,0x00,0x00,0x00,0x00,0x08,0x14,0x0c,0x00,0x00,\r
+0x00,0x01,0x00,0x40,0x18,0x0c,0x00,0x00,0x00,0x00,0x00,0x08,0x1c,0x0c,0x00,0x00,\r
+0x00,0x01,0x00,0x40,0x20,0x0c,0x00,0x00,0x00,0x00,0x00,0x08,0x24,0x0c,0x00,0x00,\r
+0x00,0x01,0x00,0x40,0x28,0x0c,0x00,0x00,0x00,0x00,0x00,0x08,0x2c,0x0c,0x00,0x00,\r
+0x00,0x01,0x00,0x40,0x30,0x0c,0x00,0x00,0x44,0x6a,0xe9,0x8d,0x34,0x0c,0x00,0x00,\r
+0xcd,0x52,0x96,0x46,0x38,0x0c,0x00,0x00,0x90,0x5a,0x01,0x48,0x3c,0x0c,0x00,0x00,\r
+0x64,0x97,0x97,0x1a,0x40,0x0c,0x00,0x00,0x3f,0x42,0x7c,0x1f,0x44,0x0c,0x00,0x00,\r
+0xb7,0x00,0x01,0x00,0x48,0x0c,0x00,0x00,0x00,0x00,0x02,0xec,0x4c,0x0c,0x00,0x00,\r
+0x03,0x03,0xfc,0x00,0x50,0x0c,0x00,0x00,0x1c,0x34,0x54,0x69,0x54,0x0c,0x00,0x00,\r
+0x94,0x00,0x3c,0x43,0x58,0x0c,0x00,0x00,0x1c,0x34,0x54,0x69,0x5c,0x0c,0x00,0x00,\r
+0x94,0x00,0x3c,0x43,0x60,0x0c,0x00,0x00,0x1c,0x34,0x54,0x69,0x64,0x0c,0x00,0x00,\r
+0x94,0x00,0x3c,0x43,0x68,0x0c,0x00,0x00,0x1c,0x34,0x54,0x69,0x6c,0x0c,0x00,0x00,\r
+0x94,0x00,0x3c,0x43,0x70,0x0c,0x00,0x00,0x0d,0x00,0x5a,0x2c,0x74,0x0c,0x00,0x00,\r
+0x1b,0x15,0x86,0x01,0x78,0x0c,0x00,0x00,0x1f,0x00,0x00,0x00,0x7c,0x0c,0x00,0x00,\r
+0x12,0x16,0xb9,0x00,0x80,0x0c,0x00,0x00,0x80,0x00,0x00,0x20,0x84,0x0c,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x88,0x0c,0x00,0x00,0x80,0x00,0x00,0x20,0x8c,0x0c,0x00,0x00,\r
+0x00,0x00,0x20,0x08,0x90,0x0c,0x00,0x00,0x00,0x01,0x00,0x40,0x94,0x0c,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x98,0x0c,0x00,0x00,0x00,0x01,0x00,0x40,0x9c,0x0c,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0xa0,0x0c,0x00,0x00,0x92,0x24,0x49,0x00,0xa4,0x0c,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0xa8,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0xac,0x0c,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0xb0,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0xb4,0x0c,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0xb8,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0xbc,0x0c,0x00,0x00,\r
+0x92,0x24,0x49,0x00,0xc0,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0x0c,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0xc8,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0xcc,0x0c,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0xd0,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0xd4,0x0c,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0xd8,0x0c,0x00,0x00,0x27,0x24,0xb2,0x64,0xdc,0x0c,0x00,0x00,\r
+0x32,0x69,0x76,0x00,0xe0,0x0c,0x00,0x00,0x22,0x22,0x22,0x00,0xe4,0x0c,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0xe8,0x0c,0x00,0x00,0x02,0x43,0x64,0x07,0x00,0x0d,0x00,0x00,\r
+0x80,0x07,0x00,0x00,0x04,0x0d,0x00,0x00,0x03,0x04,0x00,0x00,0x08,0x0d,0x00,0x00,\r
+0x7f,0x90,0x00,0x00,0x0c,0x0d,0x00,0x00,0x01,0x00,0x00,0x00,0x10,0x0d,0x00,0x00,\r
+0x99,0x99,0x69,0xa0,0x14,0x0d,0x00,0x00,0x67,0x3c,0x99,0x99,0x18,0x0d,0x00,0x00,\r
+0x6b,0x5b,0x8f,0x6a,0x1c,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x0d,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x24,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x0d,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x2c,0x0d,0x00,0x00,0x75,0x19,0x97,0xcc,0x30,0x0d,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x34,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x0d,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x3c,0x0d,0x00,0x00,0x93,0x72,0x02,0x00,0x40,0x0d,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x44,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x0d,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x50,0x0d,0x00,0x00,0x0a,0x14,0x37,0x64,0x54,0x0d,0x00,0x00,\r
+0x02,0xbd,0x4d,0x02,0x58,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x5c,0x0d,0x00,0x00,\r
+0x64,0x20,0x03,0x30,0x60,0x0d,0x00,0x00,0x68,0xde,0x53,0x46,0x64,0x0d,0x00,0x00,\r
+0x3c,0x8a,0x51,0x00,0x68,0x0d,0x00,0x00,0x06,0x01,0x00,0x00,0xff,0x00,0x00,0x00,\r
+0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,\r
+0x44,0x05,0x01,0x80,0x10,0x00,0x00,0x00,0x74,0x05,0x01,0x80,0x10,0x00,0x00,0x00,\r
+0x14,0x35,0x00,0x80,0x10,0x00,0x00,0x00,0x20,0x35,0x00,0x80,0x10,0x00,0x00,0x00,\r
+0xa0,0x08,0x01,0x80,0x10,0x00,0x00,0x00,0x2c,0x25,0x00,0x80,0x10,0x00,0x00,0x00,\r
+0x24,0x25,0x00,0x80,0x10,0x00,0x00,0x00,0x34,0x25,0x00,0x80,0x08,0x00,0x00,0x00,\r
+0x38,0x06,0x01,0x80,0x00,0xb7,0x00,0x00,0x01,0xe0,0x0e,0x00,0x02,0x4d,0x04,0x00,\r
+0x03,0x41,0x04,0x00,0x04,0xc3,0x08,0x00,0x05,0x72,0x0c,0x00,0x06,0xe6,0x00,0x00,\r
+0x07,0x2a,0x08,0x00,0x08,0x3f,0x00,0x00,0x09,0x35,0x03,0x00,0x0a,0xd4,0x09,0x00,\r
+0x0b,0xbb,0x07,0x00,0x0c,0x50,0x08,0x00,0x0d,0xdf,0x0c,0x00,0x0e,0x2b,0x00,0x00,\r
+0x0f,0x14,0x01,0x00,0x00,0xb7,0x01,0x00,0x01,0x01,0x00,0x00,0x02,0x00,0x04,0x00,\r
+0x01,0x02,0x00,0x00,0x02,0x01,0x04,0x00,0x01,0x03,0x00,0x00,0x02,0x02,0x04,0x00,\r
+0x01,0x04,0x00,0x00,0x02,0x03,0x04,0x00,0x01,0x05,0x00,0x00,0x02,0x04,0x04,0x00,\r
+0x01,0x06,0x00,0x00,0x02,0x05,0x04,0x00,0x01,0x07,0x00,0x00,0x02,0x08,0x04,0x00,\r
+0x01,0x08,0x00,0x00,0x02,0x09,0x04,0x00,0x01,0x09,0x00,0x00,0x02,0x0a,0x04,0x00,\r
+0x01,0x0a,0x00,0x00,0x02,0x0b,0x04,0x00,0x01,0x0b,0x00,0x00,0x02,0x02,0x05,0x00,\r
+0x01,0x0c,0x00,0x00,0x02,0x03,0x05,0x00,0x01,0x0d,0x00,0x00,0x02,0x04,0x05,0x00,\r
+0x01,0x0e,0x00,0x00,0x02,0x05,0x05,0x00,0x01,0x0f,0x00,0x00,0x02,0x40,0x05,0x00,\r
+0x01,0x10,0x00,0x00,0x02,0x41,0x05,0x00,0x01,0x11,0x00,0x00,0x02,0x42,0x05,0x00,\r
+0x01,0x12,0x00,0x00,0x02,0x43,0x05,0x00,0x01,0x13,0x00,0x00,0x02,0x44,0x05,0x00,\r
+0x01,0x14,0x00,0x00,0x02,0x45,0x05,0x00,0x01,0x15,0x00,0x00,0x02,0x80,0x05,0x00,\r
+0x01,0x16,0x00,0x00,0x02,0x81,0x05,0x00,0x01,0x17,0x00,0x00,0x02,0x82,0x05,0x00,\r
+0x01,0x18,0x00,0x00,0x02,0x83,0x05,0x00,0x01,0x19,0x00,0x00,0x02,0x84,0x05,0x00,\r
+0x01,0x1a,0x00,0x00,0x02,0x85,0x05,0x00,0x01,0x1b,0x00,0x00,0x02,0x88,0x05,0x00,\r
+0x01,0x1c,0x00,0x00,0x02,0x89,0x05,0x00,0x01,0x1d,0x00,0x00,0x02,0x8a,0x05,0x00,\r
+0x01,0x1e,0x00,0x00,0x02,0x8b,0x05,0x00,0x01,0x1f,0x00,0x00,0x02,0x43,0x06,0x00,\r
+0x01,0x20,0x00,0x00,0x02,0x44,0x06,0x00,0x01,0x21,0x00,0x00,0x02,0x45,0x06,0x00,\r
+0x01,0x22,0x00,0x00,0x02,0x80,0x06,0x00,0x01,0x23,0x00,0x00,0x02,0x81,0x06,0x00,\r
+0x01,0x24,0x00,0x00,0x02,0x82,0x06,0x00,0x01,0x25,0x00,0x00,0x02,0x83,0x06,0x00,\r
+0x01,0x26,0x00,0x00,0x02,0x84,0x06,0x00,0x01,0x27,0x00,0x00,0x02,0x85,0x06,0x00,\r
+0x01,0x28,0x00,0x00,0x02,0x88,0x06,0x00,0x01,0x29,0x00,0x00,0x02,0x89,0x06,0x00,\r
+0x01,0x2a,0x00,0x00,0x02,0x8a,0x06,0x00,0x01,0x2b,0x00,0x00,0x02,0x8b,0x06,0x00,\r
+0x01,0x2c,0x00,0x00,0x02,0x8c,0x06,0x00,0x01,0x2d,0x00,0x00,0x02,0x42,0x07,0x00,\r
+0x01,0x2e,0x00,0x00,0x02,0x43,0x07,0x00,0x01,0x2f,0x00,0x00,0x02,0x44,0x07,0x00,\r
+0x01,0x30,0x00,0x00,0x02,0x45,0x07,0x00,0x01,0x31,0x00,0x00,0x02,0x80,0x07,0x00,\r
+0x01,0x32,0x00,0x00,0x02,0x81,0x07,0x00,0x01,0x33,0x00,0x00,0x02,0x82,0x07,0x00,\r
+0x01,0x34,0x00,0x00,0x02,0x83,0x07,0x00,0x01,0x35,0x00,0x00,0x02,0x84,0x07,0x00,\r
+0x01,0x36,0x00,0x00,0x02,0x85,0x07,0x00,0x01,0x37,0x00,0x00,0x02,0x88,0x07,0x00,\r
+0x01,0x38,0x00,0x00,0x02,0x89,0x07,0x00,0x01,0x39,0x00,0x00,0x02,0x8a,0x07,0x00,\r
+0x01,0x3a,0x00,0x00,0x02,0x8b,0x07,0x00,0x01,0x3b,0x00,0x00,0x02,0x8c,0x07,0x00,\r
+0x01,0x3c,0x00,0x00,0x02,0x8d,0x07,0x00,0x01,0x3d,0x00,0x00,0x02,0x90,0x07,0x00,\r
+0x01,0x3e,0x00,0x00,0x02,0x91,0x07,0x00,0x01,0x3f,0x00,0x00,0x02,0x92,0x07,0x00,\r
+0x01,0x40,0x00,0x00,0x02,0x93,0x07,0x00,0x01,0x41,0x00,0x00,0x02,0x94,0x07,0x00,\r
+0x01,0x42,0x00,0x00,0x02,0x95,0x07,0x00,0x01,0x43,0x00,0x00,0x02,0x98,0x07,0x00,\r
+0x01,0x44,0x00,0x00,0x02,0x99,0x07,0x00,0x01,0x45,0x00,0x00,0x02,0x9a,0x07,0x00,\r
+0x01,0x46,0x00,0x00,0x02,0x9b,0x07,0x00,0x01,0x47,0x00,0x00,0x02,0x9c,0x07,0x00,\r
+0x01,0x48,0x00,0x00,0x02,0x9d,0x07,0x00,0x01,0x49,0x00,0x00,0x02,0xa0,0x07,0x00,\r
+0x01,0x4a,0x00,0x00,0x02,0xa1,0x07,0x00,0x01,0x4b,0x00,0x00,0x02,0xa2,0x07,0x00,\r
+0x01,0x4c,0x00,0x00,0x02,0xa3,0x07,0x00,0x01,0x4d,0x00,0x00,0x02,0xa4,0x07,0x00,\r
+0x01,0x4e,0x00,0x00,0x02,0xa5,0x07,0x00,0x01,0x4f,0x00,0x00,0x02,0xa8,0x07,0x00,\r
+0x01,0x50,0x00,0x00,0x02,0xa9,0x07,0x00,0x01,0x51,0x00,0x00,0x02,0xaa,0x03,0x00,\r
+0x01,0x52,0x00,0x00,0x02,0xab,0x03,0x00,0x01,0x53,0x00,0x00,0x02,0xac,0x03,0x00,\r
+0x01,0x54,0x00,0x00,0x02,0xad,0x03,0x00,0x01,0x55,0x00,0x00,0x02,0xb0,0x03,0x00,\r
+0x01,0x56,0x00,0x00,0x02,0xb1,0x03,0x00,0x01,0x57,0x00,0x00,0x02,0xb2,0x03,0x00,\r
+0x01,0x58,0x00,0x00,0x02,0xb3,0x03,0x00,0x01,0x59,0x00,0x00,0x02,0xb4,0x03,0x00,\r
+0x01,0x5a,0x00,0x00,0x02,0xb5,0x03,0x00,0x01,0x5b,0x00,0x00,0x02,0xb8,0x03,0x00,\r
+0x01,0x5c,0x00,0x00,0x02,0xb9,0x03,0x00,0x01,0x5d,0x00,0x00,0x02,0xba,0x03,0x00,\r
+0x01,0x5e,0x00,0x00,0x02,0xbb,0x03,0x00,0x01,0x5f,0x00,0x00,0x02,0xbb,0x03,0x00,\r
+0x03,0x80,0x00,0x00,0x05,0x04,0x00,0x00,0x00,0xb7,0x00,0x00,0xfe,0x00,0x00,0x00,\r
+0xfe,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x02,0x4d,0x0c,0x00,0xfe,0x00,0x00,0x00,\r
+0xfe,0x00,0x00,0x00,0x02,0x4d,0x04,0x00,0x00,0xbf,0x02,0x00,0xff,0xff,0xff,0x00,\r
+0xff,0xff,0xff,0x00,0x00,0xb7,0x00,0x00,0x01,0xe0,0x0e,0x00,0x02,0x4d,0x04,0x00,\r
+0x03,0x41,0x04,0x00,0x04,0xc3,0x08,0x00,0x05,0x72,0x0c,0x00,0x06,0xe6,0x00,0x00,\r
+0x07,0x2a,0x08,0x00,0x08,0x3f,0x00,0x00,0x09,0x35,0x03,0x00,0x0a,0xd4,0x09,0x00,\r
+0x0b,0xbb,0x07,0x00,0x0c,0x50,0x08,0x00,0x0d,0xdf,0x0c,0x00,0x0e,0x2b,0x00,0x00,\r
+0x0f,0x14,0x01,0x00,0x00,0xb7,0x01,0x00,0x01,0x01,0x00,0x00,0x02,0x00,0x04,0x00,\r
+0x01,0x02,0x00,0x00,0x02,0x01,0x04,0x00,0x01,0x03,0x00,0x00,0x02,0x02,0x04,0x00,\r
+0x01,0x04,0x00,0x00,0x02,0x03,0x04,0x00,0x01,0x05,0x00,0x00,0x02,0x04,0x04,0x00,\r
+0x01,0x06,0x00,0x00,0x02,0x05,0x04,0x00,0x01,0x07,0x00,0x00,0x02,0x08,0x04,0x00,\r
+0x01,0x08,0x00,0x00,0x02,0x09,0x04,0x00,0x01,0x09,0x00,0x00,0x02,0x0a,0x04,0x00,\r
+0x01,0x0a,0x00,0x00,0x02,0x0b,0x04,0x00,0x01,0x0b,0x00,0x00,0x02,0x02,0x05,0x00,\r
+0x01,0x0c,0x00,0x00,0x02,0x03,0x05,0x00,0x01,0x0d,0x00,0x00,0x02,0x04,0x05,0x00,\r
+0x01,0x0e,0x00,0x00,0x02,0x05,0x05,0x00,0x01,0x0f,0x00,0x00,0x02,0x40,0x05,0x00,\r
+0x01,0x10,0x00,0x00,0x02,0x41,0x05,0x00,0x01,0x11,0x00,0x00,0x02,0x42,0x05,0x00,\r
+0x01,0x12,0x00,0x00,0x02,0x43,0x05,0x00,0x01,0x13,0x00,0x00,0x02,0x44,0x05,0x00,\r
+0x01,0x14,0x00,0x00,0x02,0x45,0x05,0x00,0x01,0x15,0x00,0x00,0x02,0x80,0x05,0x00,\r
+0x01,0x16,0x00,0x00,0x02,0x81,0x05,0x00,0x01,0x17,0x00,0x00,0x02,0x82,0x05,0x00,\r
+0x01,0x18,0x00,0x00,0x02,0x83,0x05,0x00,0x01,0x19,0x00,0x00,0x02,0x84,0x05,0x00,\r
+0x01,0x1a,0x00,0x00,0x02,0x85,0x05,0x00,0x01,0x1b,0x00,0x00,0x02,0x88,0x05,0x00,\r
+0x01,0x1c,0x00,0x00,0x02,0x89,0x05,0x00,0x01,0x1d,0x00,0x00,0x02,0x8a,0x05,0x00,\r
+0x01,0x1e,0x00,0x00,0x02,0x8b,0x05,0x00,0x01,0x1f,0x00,0x00,0x02,0x43,0x06,0x00,\r
+0x01,0x20,0x00,0x00,0x02,0x44,0x06,0x00,0x01,0x21,0x00,0x00,0x02,0x45,0x06,0x00,\r
+0x01,0x22,0x00,0x00,0x02,0x80,0x06,0x00,0x01,0x23,0x00,0x00,0x02,0x81,0x06,0x00,\r
+0x01,0x24,0x00,0x00,0x02,0x82,0x06,0x00,0x01,0x25,0x00,0x00,0x02,0x83,0x06,0x00,\r
+0x01,0x26,0x00,0x00,0x02,0x84,0x06,0x00,0x01,0x27,0x00,0x00,0x02,0x85,0x06,0x00,\r
+0x01,0x28,0x00,0x00,0x02,0x88,0x06,0x00,0x01,0x29,0x00,0x00,0x02,0x89,0x06,0x00,\r
+0x01,0x2a,0x00,0x00,0x02,0x8a,0x06,0x00,0x01,0x2b,0x00,0x00,0x02,0x8b,0x06,0x00,\r
+0x01,0x2c,0x00,0x00,0x02,0x8c,0x06,0x00,0x01,0x2d,0x00,0x00,0x02,0x42,0x07,0x00,\r
+0x01,0x2e,0x00,0x00,0x02,0x43,0x07,0x00,0x01,0x2f,0x00,0x00,0x02,0x44,0x07,0x00,\r
+0x01,0x30,0x00,0x00,0x02,0x45,0x07,0x00,0x01,0x31,0x00,0x00,0x02,0x80,0x07,0x00,\r
+0x01,0x32,0x00,0x00,0x02,0x81,0x07,0x00,0x01,0x33,0x00,0x00,0x02,0x82,0x07,0x00,\r
+0x01,0x34,0x00,0x00,0x02,0x83,0x07,0x00,0x01,0x35,0x00,0x00,0x02,0x84,0x07,0x00,\r
+0x01,0x36,0x00,0x00,0x02,0x85,0x07,0x00,0x01,0x37,0x00,0x00,0x02,0x88,0x07,0x00,\r
+0x01,0x38,0x00,0x00,0x02,0x89,0x07,0x00,0x01,0x39,0x00,0x00,0x02,0x8a,0x07,0x00,\r
+0x01,0x3a,0x00,0x00,0x02,0x8b,0x07,0x00,0x01,0x3b,0x00,0x00,0x02,0x8c,0x07,0x00,\r
+0x01,0x3c,0x00,0x00,0x02,0x8d,0x07,0x00,0x01,0x3d,0x00,0x00,0x02,0x90,0x07,0x00,\r
+0x01,0x3e,0x00,0x00,0x02,0x91,0x07,0x00,0x01,0x3f,0x00,0x00,0x02,0x92,0x07,0x00,\r
+0x01,0x40,0x00,0x00,0x02,0x93,0x07,0x00,0x01,0x41,0x00,0x00,0x02,0x94,0x07,0x00,\r
+0x01,0x42,0x00,0x00,0x02,0x95,0x07,0x00,0x01,0x43,0x00,0x00,0x02,0x98,0x07,0x00,\r
+0x01,0x44,0x00,0x00,0x02,0x99,0x07,0x00,0x01,0x45,0x00,0x00,0x02,0x9a,0x07,0x00,\r
+0x01,0x46,0x00,0x00,0x02,0x9b,0x07,0x00,0x01,0x47,0x00,0x00,0x02,0x9c,0x07,0x00,\r
+0x01,0x48,0x00,0x00,0x02,0x9d,0x07,0x00,0x01,0x49,0x00,0x00,0x02,0xa0,0x07,0x00,\r
+0x01,0x4a,0x00,0x00,0x02,0xa1,0x07,0x00,0x01,0x4b,0x00,0x00,0x02,0xa2,0x07,0x00,\r
+0x01,0x4c,0x00,0x00,0x02,0xa3,0x07,0x00,0x01,0x4d,0x00,0x00,0x02,0xa4,0x07,0x00,\r
+0x01,0x4e,0x00,0x00,0x02,0xa5,0x07,0x00,0x01,0x4f,0x00,0x00,0x02,0xa8,0x07,0x00,\r
+0x01,0x50,0x00,0x00,0x02,0xa9,0x07,0x00,0x01,0x51,0x00,0x00,0x02,0xaa,0x03,0x00,\r
+0x01,0x52,0x00,0x00,0x02,0xab,0x03,0x00,0x01,0x53,0x00,0x00,0x02,0xac,0x03,0x00,\r
+0x01,0x54,0x00,0x00,0x02,0xad,0x03,0x00,0x01,0x55,0x00,0x00,0x02,0xb0,0x03,0x00,\r
+0x01,0x56,0x00,0x00,0x02,0xb1,0x03,0x00,0x01,0x57,0x00,0x00,0x02,0xb2,0x03,0x00,\r
+0x01,0x58,0x00,0x00,0x02,0xb3,0x03,0x00,0x01,0x59,0x00,0x00,0x02,0xb4,0x03,0x00,\r
+0x01,0x5a,0x00,0x00,0x02,0xb5,0x03,0x00,0x01,0x5b,0x00,0x00,0x02,0xb8,0x03,0x00,\r
+0x01,0x5c,0x00,0x00,0x02,0xb9,0x03,0x00,0x01,0x5d,0x00,0x00,0x02,0xba,0x03,0x00,\r
+0x01,0x5e,0x00,0x00,0x02,0xbb,0x03,0x00,0x01,0x5f,0x00,0x00,0x02,0xbb,0x03,0x00,\r
+0x03,0x80,0x00,0x00,0x05,0x04,0x00,0x00,0x00,0xb7,0x00,0x00,0xfe,0x00,0x00,0x00,\r
+0xfe,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x02,0x4d,0x0c,0x00,0xfe,0x00,0x00,0x00,\r
+0xfe,0x00,0x00,0x00,0x02,0x4d,0x04,0x00,0x00,0xbf,0x02,0x00,0xff,0xff,0xff,0x00,\r
+0xff,0xff,0xff,0x00,0x0a,0x00,0x00,0x00,0x4f,0x6e,0x41,0x73,0x73,0x6f,0x63,0x52,\r
+0x65,0x71,0x00,0x00,0x4f,0x6e,0x41,0x73,0x73,0x6f,0x63,0x52,0x73,0x70,0x00,0x00,\r
+0x4f,0x6e,0x52,0x65,0x41,0x73,0x73,0x6f,0x63,0x52,0x65,0x71,0x00,0x00,0x00,0x00,\r
+0x4f,0x6e,0x52,0x65,0x41,0x73,0x73,0x6f,0x63,0x52,0x73,0x70,0x00,0x00,0x00,0x00,\r
+0x4f,0x6e,0x50,0x72,0x6f,0x62,0x65,0x52,0x65,0x71,0x00,0x00,0x4f,0x6e,0x50,0x72,\r
+0x6f,0x62,0x65,0x52,0x73,0x70,0x00,0x00,0x44,0x6f,0x52,0x65,0x73,0x65,0x72,0x76,\r
+0x65,0x64,0x00,0x00,0x44,0x6f,0x52,0x65,0x73,0x65,0x72,0x76,0x65,0x64,0x00,0x00,\r
+0x4f,0x6e,0x42,0x65,0x61,0x63,0x6f,0x6e,0x00,0x00,0x00,0x00,0x4f,0x6e,0x41,0x54,\r
+0x49,0x4d,0x00,0x00,0x4f,0x6e,0x44,0x69,0x73,0x61,0x73,0x73,0x6f,0x63,0x00,0x00,\r
+0x4f,0x6e,0x41,0x75,0x74,0x68,0x00,0x00,0x4f,0x6e,0x44,0x65,0x41,0x75,0x74,0x68,\r
+0x00,0x00,0x00,0x00,0x4f,0x6e,0x41,0x63,0x74,0x69,0x6f,0x6e,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x20,0x99,0x01,0x80,0x2c,0x13,0x01,0x80,0x10,0x00,0x00,0x00,\r
+0x2c,0x99,0x01,0x80,0x34,0x13,0x01,0x80,0x20,0x00,0x00,0x00,0x38,0x99,0x01,0x80,\r
+0x2c,0x13,0x01,0x80,0x30,0x00,0x00,0x00,0x48,0x99,0x01,0x80,0x34,0x13,0x01,0x80,\r
+0x40,0x00,0x00,0x00,0x58,0x99,0x01,0x80,0x3c,0x13,0x01,0x80,0x50,0x00,0x00,0x00,\r
+0x64,0x99,0x01,0x80,0x44,0x13,0x01,0x80,0x00,0x00,0x00,0x00,0x70,0x99,0x01,0x80,\r
+0xac,0x13,0x01,0x80,0x00,0x00,0x00,0x00,0x7c,0x99,0x01,0x80,0xac,0x13,0x01,0x80,\r
+0x80,0x00,0x00,0x00,0x88,0x99,0x01,0x80,0x4c,0x13,0x01,0x80,0x90,0x00,0x00,0x00,\r
+0x94,0x99,0x01,0x80,0x54,0x13,0x01,0x80,0xa0,0x00,0x00,0x00,0x9c,0x99,0x01,0x80,\r
+0x5c,0x13,0x01,0x80,0xb0,0x00,0x00,0x00,0xa8,0x99,0x01,0x80,0x94,0x13,0x01,0x80,\r
+0xc0,0x00,0x00,0x00,0xb0,0x99,0x01,0x80,0x9c,0x13,0x01,0x80,0xd0,0x00,0x00,0x00,\r
+0xbc,0x99,0x01,0x80,0xa4,0x13,0x01,0x80,0x00,0x00,0x00,0x00,0x74,0x9a,0x01,0x80,\r
+0x74,0x9a,0x01,0x80,0x31,0x10,0x10,0x00,0x00,0x30,0x00,0x00,0x31,0x20,0x10,0x00,\r
+0x00,0x30,0x00,0x00,0x31,0x28,0x10,0x00,0x00,0x30,0x00,0x00,0x31,0x2c,0x10,0x10,\r
+0x00,0x30,0x00,0x00,0x31,0x2f,0x10,0x10,0x00,0x30,0x00,0x00,0x31,0x30,0x18,0x00,\r
+0x00,0x30,0x00,0x00,0x31,0x30,0x20,0x10,0x00,0x30,0x00,0x00,0x22,0x20,0x18,0x08,\r
+0x00,0x20,0x00,0x00,0x22,0x21,0x14,0x08,0x00,0x20,0x00,0x00,0x22,0x21,0x1c,0x08,\r
+0x00,0x20,0x00,0x00,0x22,0x21,0x20,0x08,0x00,0x20,0x00,0x00,0x22,0x21,0x20,0x10,\r
+0x00,0x20,0x00,0x00,0x22,0x21,0x20,0x18,0x00,0x20,0x00,0x00,0x1a,0x19,0x18,0x10,\r
+0x00,0x18,0x00,0x00,0x12,0x11,0x10,0x08,0x00,0x10,0x00,0x00,0x0a,0x09,0x08,0x00,\r
+0x00,0x08,0x00,0x00,0x0a,0x09,0x08,0x02,0x00,0x08,0x00,0x00,0x0a,0x09,0x08,0x04,\r
+0x00,0x08,0x00,0x00,0x0a,0x09,0x08,0x06,0x00,0x08,0x00,0x00,0x08,0x07,0x06,0x04,\r
+0x00,0x06,0x00,0x00,0x06,0x05,0x04,0x02,0x00,0x04,0x00,0x00,0x06,0x05,0x04,0x03,\r
+0x00,0x04,0x00,0x00,0x05,0x04,0x03,0x02,0x00,0x03,0x00,0x00,0x09,0x08,0x07,0x06,\r
+0x07,0x06,0x06,0x05,0x05,0x04,0x04,0x03,0x06,0x05,0x05,0x04,0x04,0x03,0x03,0x03,\r
+0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x02,0x00,0x09,0x08,0x07,0x06,0x07,0x06,0x06,\r
+0x05,0x05,0x04,0x04,0x03,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x02,0x04,0x03,0x03,\r
+0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,\r
+0x08,0x10,0x10,0x20,0x08,0x08,0x08,0x08,0x20,0x20,0x20,0x20,0x08,0x08,0x08,0x08,\r
+0x08,0x20,0x20,0x20,0x30,0x08,0x08,0x08,0x08,0x18,0x18,0x18,0x18,0x18,0x20,0x30,\r
+0x30,0x10,0x20,0x20,0x20,0x20,0x20,0x30,0x30,0x08,0x10,0x20,0x30,0x30,0x30,0x30,\r
+0x30,0x30,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x10,0x10,0x20,\r
+0x08,0x08,0x08,0x08,0x08,0x20,0x20,0x20,0x08,0x08,0x08,0x08,0x08,0x20,0x20,0x20,\r
+0x20,0x08,0x08,0x08,0x08,0x18,0x18,0x18,0x18,0x18,0x20,0x30,0x30,0x10,0x20,0x20,\r
+0x20,0x20,0x20,0x30,0x30,0x08,0x10,0x20,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,\r
+0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,\r
+0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,\r
+0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x12,0x11,0x10,\r
+0x08,0x00,0x12,0x11,0x10,0x08,0x00,0x22,0x21,0x20,0x18,0x00,0x0a,0x09,0x08,0x00,\r
+0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,\r
+0x22,0x21,0x20,0x18,0x00,0x22,0x21,0x20,0x18,0x00,0x22,0x21,0x1c,0x08,0x00,0x22,\r
+0x20,0x18,0x08,0x00,0x0a,0x09,0x08,0x02,0x00,0x0a,0x09,0x08,0x02,0x00,0x0a,0x09,\r
+0x08,0x02,0x00,0x0a,0x09,0x08,0x02,0x00,0x0a,0x09,0x08,0x00,0x00,0x22,0x21,0x20,\r
+0x10,0x00,0x22,0x21,0x20,0x08,0x00,0x22,0x21,0x1c,0x08,0x00,0x31,0x30,0x18,0x00,\r
+0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,\r
+0x0a,0x09,0x08,0x04,0x00,0x1a,0x19,0x18,0x10,0x00,0x1a,0x19,0x18,0x10,0x00,0x1a,\r
+0x19,0x18,0x10,0x00,0x1a,0x19,0x18,0x10,0x00,0x1a,0x19,0x18,0x10,0x00,0x22,0x21,\r
+0x20,0x08,0x00,0x31,0x2c,0x10,0x10,0x00,0x31,0x28,0x10,0x00,0x00,0x12,0x11,0x10,\r
+0x08,0x00,0x22,0x21,0x20,0x18,0x00,0x22,0x21,0x20,0x18,0x00,0x22,0x21,0x20,0x08,\r
+0x00,0x22,0x21,0x14,0x08,0x00,0x22,0x20,0x18,0x08,0x00,0x31,0x30,0x20,0x10,0x00,\r
+0x31,0x2c,0x10,0x10,0x00,0x0a,0x09,0x08,0x00,0x00,0x12,0x11,0x10,0x08,0x00,0x22,\r
+0x21,0x20,0x18,0x00,0x22,0x21,0x20,0x18,0x00,0x31,0x30,0x20,0x10,0x00,0x31,0x2f,\r
+0x10,0x10,0x00,0x31,0x2f,0x10,0x10,0x00,0x31,0x10,0x10,0x00,0x00,0x31,0x2c,0x10,\r
+0x10,0x00,0x00,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,\r
+0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,0x08,\r
+0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,0x08,0x00,\r
+0x00,0x12,0x11,0x10,0x08,0x00,0x12,0x11,0x10,0x08,0x00,0x22,0x21,0x20,0x18,0x00,\r
+0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x02,0x00,0x0a,\r
+0x09,0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x22,0x21,0x20,0x18,0x00,0x22,0x21,\r
+0x1c,0x08,0x00,0x22,0x21,0x14,0x08,0x00,0x0a,0x09,0x08,0x02,0x00,0x0a,0x09,0x08,\r
+0x02,0x00,0x0a,0x09,0x08,0x02,0x00,0x0a,0x09,0x08,0x02,0x00,0x0a,0x09,0x08,0x00,\r
+0x00,0x22,0x21,0x20,0x10,0x00,0x22,0x21,0x20,0x08,0x00,0x22,0x21,0x14,0x08,0x00,\r
+0x22,0x21,0x14,0x08,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,\r
+0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x1a,0x19,0x18,0x10,0x00,0x1a,0x19,\r
+0x18,0x10,0x00,0x1a,0x19,0x18,0x10,0x00,0x1a,0x19,0x18,0x10,0x00,0x1a,0x19,0x18,\r
+0x10,0x00,0x22,0x21,0x20,0x08,0x00,0x31,0x2c,0x10,0x10,0x00,0x31,0x28,0x10,0x00,\r
+0x00,0x12,0x11,0x10,0x08,0x00,0x22,0x21,0x20,0x18,0x00,0x22,0x21,0x20,0x18,0x00,\r
+0x22,0x21,0x20,0x08,0x00,0x22,0x21,0x14,0x08,0x00,0x22,0x20,0x18,0x08,0x00,0x31,\r
+0x30,0x20,0x10,0x00,0x31,0x2c,0x10,0x10,0x00,0x0a,0x09,0x08,0x00,0x00,0x12,0x11,\r
+0x10,0x08,0x00,0x22,0x21,0x20,0x18,0x00,0x22,0x21,0x20,0x18,0x00,0x31,0x30,0x20,\r
+0x10,0x00,0x31,0x2f,0x10,0x10,0x00,0x31,0x2f,0x10,0x10,0x00,0x31,0x10,0x10,0x00,\r
+0x00,0x31,0x2c,0x10,0x10,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x02,0x04,0x08,0x0c,\r
+0x10,0x18,0x20,0x30,0x02,0x04,0x08,0x0c,0x10,0x18,0x20,0x30,0x06,0x0c,0x10,0x18,\r
+0x24,0x30,0x3c,0x48,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x25,0x27,0x2c,0x19,0x1b,0x1e,0x20,0x23,0x29,0x2a,0x2b,0x00,0x00,0x00,0x00,\r
+0x25,0x29,0x2b,0x2e,0x2e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,\r
+0x08,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x24,0x00,0x00,0x00,\r
+0x30,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x90,0x00,0x00,0x00,\r
+0xc0,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x78,0x00,0x00,0x00,\r
+0xa0,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x90,0x01,0x00,0x00,\r
+0xe0,0x01,0x00,0x00,0x30,0x02,0x00,0x00,0x2c,0x01,0x00,0x00,0x40,0x01,0x00,0x00,\r
+0xe0,0x01,0x00,0x00,0xd0,0x02,0x00,0x00,0x80,0x0c,0x00,0x00,0x80,0x0c,0x00,0x00,\r
+0x80,0x0c,0x00,0x00,0xa0,0x0f,0x00,0x00,0xa0,0x0f,0x00,0x00,0x02,0x00,0x00,0x00,\r
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,\r
+0x12,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x30,0x00,0x00,0x00,\r
+0x48,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x28,0x00,0x00,0x00,\r
+0x3c,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,\r
+0xc8,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x64,0x00,0x00,0x00,\r
+0xa0,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x40,0x06,0x00,0x00,\r
+0x40,0x06,0x00,0x00,0x40,0x06,0x00,0x00,0xd0,0x07,0x00,0x00,0xd0,0x07,0x00,0x00,\r
+0x2c,0x05,0x00,0x80,0x20,0x05,0x00,0x80,0x14,0x05,0x00,0x80,0x08,0x05,0x00,0x80,\r
+0xfc,0x04,0x00,0x80,0xf0,0x04,0x00,0x80,0xe4,0x04,0x00,0x80,0xd8,0x04,0x00,0x80,\r
+0xcc,0x04,0x00,0x80,0xc0,0x04,0x00,0x80,0x78,0x04,0x00,0x80,0x70,0x3b,0x01,0x80,\r
+0x48,0x3b,0x01,0x80,0x24,0x3b,0x01,0x80,0x14,0x3c,0x01,0x80,0xf0,0x3b,0x01,0x80,\r
+0xcc,0x3b,0x01,0x80,0xa8,0x3b,0x01,0x80,0x30,0x41,0x00,0x80,0x3c,0x41,0x00,0x80,\r
+0x48,0x41,0x00,0x80,0x54,0x41,0x00,0x80,0x30,0x41,0x00,0x80,0x30,0x41,0x00,0x80,\r
+0x30,0x41,0x00,0x80,0x30,0x41,0x00,0x80,0x60,0x41,0x00,0x80,0x6c,0x41,0x00,0x80,\r
+0x78,0x41,0x00,0x80,0x84,0x41,0x00,0x80,0x68,0x15,0x02,0x80,0x68,0x15,0x02,0x80,\r
+0x84,0x0e,0x25,0xb0,0x88,0x0e,0x25,0xb0,0x8c,0x0e,0x25,0xb0,0xd0,0x0e,0x25,0xb0,\r
+0xd8,0x0e,0x25,0xb0,0x20,0x08,0x25,0xb0,0xfe,0x01,0x80,0x7f,0xe2,0x01,0x80,0x78,\r
+0xc7,0x01,0xc0,0x71,0xae,0x01,0x80,0x6b,0x95,0x01,0x40,0x65,0x7f,0x01,0xc0,0x5f,\r
+0x69,0x01,0x40,0x5a,0x55,0x01,0x40,0x55,0x42,0x01,0x80,0x50,0x30,0x01,0x00,0x4c,\r
+0x1f,0x01,0xc0,0x47,0x0f,0x01,0xc0,0x43,0x00,0x01,0x00,0x40,0xf2,0x00,0x80,0x3c,\r
+0xe4,0x00,0x00,0x39,0xd7,0x00,0xc0,0x35,0xcb,0x00,0xc0,0x32,0xc0,0x00,0x00,0x30,\r
+0xb5,0x00,0x40,0x2d,0xab,0x00,0xc0,0x2a,0xa2,0x00,0x80,0x28,0x98,0x00,0x00,0x26,\r
+0x90,0x00,0x00,0x24,0x88,0x00,0x00,0x22,0x80,0x00,0x00,0x20,0x79,0x00,0x40,0x1e,\r
+0x72,0x00,0x80,0x1c,0x6c,0x00,0x00,0x1b,0x66,0x00,0x80,0x19,0x60,0x00,0x00,0x18,\r
+0x5b,0x00,0xc0,0x16,0x56,0x00,0x80,0x15,0x51,0x00,0x40,0x14,0x4c,0x00,0x00,0x13,\r
+0x48,0x00,0x00,0x12,0x44,0x00,0x00,0x11,0x40,0x00,0x00,0x10,0x36,0x35,0x2e,0x25,\r
+0x1c,0x12,0x09,0x04,0x33,0x32,0x2b,0x23,0x1a,0x11,0x08,0x04,0x30,0x2f,0x29,0x21,\r
+0x19,0x10,0x08,0x03,0x2d,0x2d,0x27,0x1f,0x18,0x0f,0x08,0x03,0x2b,0x2a,0x25,0x1e,\r
+0x16,0x0e,0x07,0x03,0x28,0x28,0x22,0x1c,0x15,0x0d,0x07,0x03,0x26,0x25,0x21,0x1b,\r
+0x14,0x0d,0x06,0x03,0x24,0x23,0x1f,0x19,0x13,0x0c,0x06,0x03,0x22,0x21,0x1d,0x18,\r
+0x11,0x0b,0x06,0x02,0x20,0x20,0x1b,0x16,0x11,0x08,0x05,0x02,0x1f,0x1e,0x1a,0x15,\r
+0x10,0x0a,0x05,0x02,0x1d,0x1c,0x18,0x14,0x0f,0x0a,0x05,0x02,0x1b,0x1a,0x17,0x13,\r
+0x0e,0x09,0x04,0x02,0x1a,0x19,0x16,0x12,0x0d,0x09,0x04,0x02,0x18,0x17,0x15,0x11,\r
+0x0c,0x08,0x04,0x02,0x17,0x16,0x13,0x10,0x0c,0x08,0x04,0x02,0x16,0x15,0x12,0x0f,\r
+0x0b,0x07,0x04,0x01,0x14,0x14,0x11,0x0e,0x0b,0x07,0x03,0x02,0x13,0x13,0x10,0x0d,\r
+0x0a,0x06,0x03,0x01,0x12,0x12,0x0f,0x0c,0x09,0x06,0x03,0x01,0x11,0x11,0x0f,0x0c,\r
+0x09,0x06,0x03,0x01,0x10,0x10,0x0e,0x0b,0x08,0x05,0x03,0x01,0x0f,0x0f,0x0d,0x0b,\r
+0x08,0x05,0x03,0x01,0x0e,0x0e,0x0c,0x0a,0x08,0x05,0x02,0x01,0x0d,0x0d,0x0c,0x0a,\r
+0x07,0x05,0x02,0x01,0x0d,0x0c,0x0b,0x09,0x07,0x04,0x02,0x01,0x0c,0x0c,0x0a,0x09,\r
+0x06,0x04,0x02,0x01,0x0b,0x0b,0x0a,0x08,0x06,0x04,0x02,0x01,0x0b,0x0a,0x09,0x08,\r
+0x06,0x04,0x02,0x01,0x0a,0x0a,0x09,0x07,0x05,0x03,0x02,0x01,0x0a,0x09,0x08,0x07,\r
+0x05,0x03,0x02,0x01,0x09,0x09,0x08,0x06,0x05,0x03,0x01,0x01,0x09,0x08,0x07,0x06,\r
+0x04,0x03,0x01,0x01,0x36,0x35,0x2e,0x1b,0x00,0x00,0x00,0x00,0x33,0x32,0x2b,0x19,\r
+0x00,0x00,0x00,0x00,0x30,0x2f,0x29,0x18,0x00,0x00,0x00,0x00,0x2d,0x2d,0x17,0x17,\r
+0x00,0x00,0x00,0x00,0x2b,0x2a,0x25,0x15,0x00,0x00,0x00,0x00,0x28,0x28,0x24,0x14,\r
+0x00,0x00,0x00,0x00,0x26,0x25,0x21,0x13,0x00,0x00,0x00,0x00,0x24,0x23,0x1f,0x12,\r
+0x00,0x00,0x00,0x00,0x22,0x21,0x1d,0x11,0x00,0x00,0x00,0x00,0x20,0x20,0x1b,0x10,\r
+0x00,0x00,0x00,0x00,0x1f,0x1e,0x1a,0x0f,0x00,0x00,0x00,0x00,0x1d,0x1c,0x18,0x0e,\r
+0x00,0x00,0x00,0x00,0x1b,0x1a,0x17,0x0e,0x00,0x00,0x00,0x00,0x1a,0x19,0x16,0x0d,\r
+0x00,0x00,0x00,0x00,0x18,0x17,0x15,0x0c,0x00,0x00,0x00,0x00,0x17,0x16,0x13,0x0b,\r
+0x00,0x00,0x00,0x00,0x16,0x15,0x12,0x0b,0x00,0x00,0x00,0x00,0x14,0x14,0x11,0x0a,\r
+0x00,0x00,0x00,0x00,0x13,0x13,0x10,0x0a,0x00,0x00,0x00,0x00,0x12,0x12,0x0f,0x09,\r
+0x00,0x00,0x00,0x00,0x11,0x11,0x0f,0x09,0x00,0x00,0x00,0x00,0x10,0x10,0x0e,0x08,\r
+0x00,0x00,0x00,0x00,0x0f,0x0f,0x0d,0x08,0x00,0x00,0x00,0x00,0x0e,0x0e,0x0c,0x07,\r
+0x00,0x00,0x00,0x00,0x0d,0x0d,0x0c,0x07,0x00,0x00,0x00,0x00,0x0d,0x0c,0x0b,0x06,\r
+0x00,0x00,0x00,0x00,0x0c,0x0c,0x0a,0x06,0x00,0x00,0x00,0x00,0x0b,0x0b,0x0a,0x06,\r
+0x00,0x00,0x00,0x00,0x0b,0x0a,0x09,0x05,0x00,0x00,0x00,0x00,0x0a,0x0a,0x09,0x05,\r
+0x00,0x00,0x00,0x00,0x0a,0x09,0x08,0x05,0x00,0x00,0x00,0x00,0x09,0x09,0x08,0x05,\r
+0x00,0x00,0x00,0x00,0x09,0x08,0x07,0x04,0x00,0x00,0x00,0x00,0x06,0x00,0x2a,0xb0,\r
+0x05,0x00,0x2a,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,\r
+0x08,0x28,0x28,0x28,0x28,0x28,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,\r
+0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xa0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,\r
+0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,\r
+0x04,0x04,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x41,0x41,0x41,0x41,0x41,0x41,0x01,\r
+0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,\r
+0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10,0x10,0x42,0x42,0x42,0x42,0x42,0x42,0x02,\r
+0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,\r
+0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,\r
+0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,\r
+0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,\r
+0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,\r
+0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,\r
+0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,\r
+0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0xa5,0x76,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x26,0x72,0xb0,0x00,0x26,0x72,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+0x00,0x00,0x00,0x00,0x00,0x26,0x65,0x60,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x02,\r
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x5a,0x00,0xb8,0xff,0xff,0xff,0xff,\r
+};\r
+\r
+u8 Rtl8192SEFwMainArray[MainArrayLength] = {\r
+0x0, };\r
+\r
+u8 Rtl8192SEFwDataArray[DataArrayLength] = {\r
+0x0, };\r
+\r
+u32 Rtl8192SEPHY_REG_2T2RArray[PHY_REG_2T2RArrayLength] = {\r
+0x01c,0x07000000,\r
+0x800,0x00040000,\r
+0x804,0x00008003,\r
+0x808,0x0000fc00,\r
+0x80c,0x0000000a,\r
+0x810,0x10005088,\r
+0x814,0x020c3d10,\r
+0x818,0x00200185,\r
+0x81c,0x00000000,\r
+0x820,0x01000000,\r
+0x824,0x00390004,\r
+0x828,0x01000000,\r
+0x82c,0x00390004,\r
+0x830,0x00000004,\r
+0x834,0x00690200,\r
+0x838,0x00000004,\r
+0x83c,0x00690200,\r
+0x840,0x00010000,\r
+0x844,0x00010000,\r
+0x848,0x00000000,\r
+0x84c,0x00000000,\r
+0x850,0x00000000,\r
+0x854,0x00000000,\r
+0x858,0x48484848,\r
+0x85c,0x65a965a9,\r
+0x860,0x0f7f0130,\r
+0x864,0x0f7f0130,\r
+0x868,0x0f7f0130,\r
+0x86c,0x0f7f0130,\r
+0x870,0x03000700,\r
+0x874,0x03000300,\r
+0x878,0x00020002,\r
+0x87c,0x004f0201,\r
+0x880,0xa8300ac1,\r
+0x884,0x00000058,\r
+0x888,0x00000008,\r
+0x88c,0x00000004,\r
+0x890,0x00000000,\r
+0x894,0xfffffffe,\r
+0x898,0x40302010,\r
+0x89c,0x00706050,\r
+0x8b0,0x00000000,\r
+0x8e0,0x00000000,\r
+0x8e4,0x00000000,\r
+0xe00,0x30333333,\r
+0xe04,0x2a2d2e2f,\r
+0xe08,0x00003232,\r
+0xe10,0x30333333,\r
+0xe14,0x2a2d2e2f,\r
+0xe18,0x30333333,\r
+0xe1c,0x2a2d2e2f,\r
+0xe30,0x01007c00,\r
+0xe34,0x01004800,\r
+0xe38,0x1000dc1f,\r
+0xe3c,0x10008c1f,\r
+0xe40,0x021400a0,\r
+0xe44,0x281600a0,\r
+0xe48,0xf8000001,\r
+0xe4c,0x00002910,\r
+0xe50,0x01007c00,\r
+0xe54,0x01004800,\r
+0xe58,0x1000dc1f,\r
+0xe5c,0x10008c1f,\r
+0xe60,0x021400a0,\r
+0xe64,0x281600a0,\r
+0xe6c,0x00002910,\r
+0xe70,0x31ed92fb,\r
+0xe74,0x361536fb,\r
+0xe78,0x361536fb,\r
+0xe7c,0x361536fb,\r
+0xe80,0x361536fb,\r
+0xe84,0x000d92fb,\r
+0xe88,0x000d92fb,\r
+0xe8c,0x31ed92fb,\r
+0xed0,0x31ed92fb,\r
+0xed4,0x31ed92fb,\r
+0xed8,0x000d92fb,\r
+0xedc,0x000d92fb,\r
+0xee0,0x000d92fb,\r
+0xee4,0x015e5448,\r
+0xee8,0x21555448,\r
+0x900,0x00000000,\r
+0x904,0x00000023,\r
+0x908,0x00000000,\r
+0x90c,0x01121313,\r
+0xa00,0x00d047c8,\r
+0xa04,0x80ff0008,\r
+0xa08,0x8ccd8300,\r
+0xa0c,0x2e62120f,\r
+0xa10,0x9500bb78,\r
+0xa14,0x11144028,\r
+0xa18,0x00881117,\r
+0xa1c,0x89140f00,\r
+0xa20,0x1a1b0000,\r
+0xa24,0x090e1317,\r
+0xa28,0x00000204,\r
+0xa2c,0x10d30000,\r
+0xc00,0x40071d40,\r
+0xc04,0x00a05633,\r
+0xc08,0x000000e4,\r
+0xc0c,0x6c6c6c6c,\r
+0xc10,0x08800000,\r
+0xc14,0x40000100,\r
+0xc18,0x08000000,\r
+0xc1c,0x40000100,\r
+0xc20,0x08000000,\r
+0xc24,0x40000100,\r
+0xc28,0x08000000,\r
+0xc2c,0x40000100,\r
+0xc30,0x6de9ac44,\r
+0xc34,0x469652cf,\r
+0xc38,0x49795994,\r
+0xc3c,0x0a979764,\r
+0xc40,0x1f7c403f,\r
+0xc44,0x000100b7,\r
+0xc48,0xec020000,\r
+0xc4c,0x007f037f,\r
+0xc50,0x69543420,\r
+0xc54,0x433c0094,\r
+0xc58,0x69543420,\r
+0xc5c,0x433c0094,\r
+0xc60,0x69543420,\r
+0xc64,0x433c0094,\r
+0xc68,0x69543420,\r
+0xc6c,0x433c0094,\r
+0xc70,0x2c7f000d,\r
+0xc74,0x0186155b,\r
+0xc78,0x0000001f,\r
+0xc7c,0x00b91612,\r
+0xc80,0x40000100,\r
+0xc84,0x20f60000,\r
+0xc88,0x20000080,\r
+0xc8c,0x20200000,\r
+0xc90,0x40000100,\r
+0xc94,0x00000000,\r
+0xc98,0x40000100,\r
+0xc9c,0x00000000,\r
+0xca0,0x00492492,\r
+0xca4,0x00000000,\r
+0xca8,0x00000000,\r
+0xcac,0x00000000,\r
+0xcb0,0x00000000,\r
+0xcb4,0x00000000,\r
+0xcb8,0x00000000,\r
+0xcbc,0x28000000,\r
+0xcc0,0x00000000,\r
+0xcc4,0x00000000,\r
+0xcc8,0x00000000,\r
+0xccc,0x00000000,\r
+0xcd0,0x00000000,\r
+0xcd4,0x00000000,\r
+0xcd8,0x64b22427,\r
+0xcdc,0x00766932,\r
+0xce0,0x00222222,\r
+0xce4,0x00000000,\r
+0xce8,0x37644302,\r
+0xcec,0x2f97d40c,\r
+0xd00,0x00000750,\r
+0xd04,0x00000403,\r
+0xd08,0x0000907f,\r
+0xd0c,0x00000001,\r
+0xd10,0xa0633333,\r
+0xd14,0x33333c63,\r
+0xd18,0x6a8f5b6b,\r
+0xd1c,0x00000000,\r
+0xd20,0x00000000,\r
+0xd24,0x00000000,\r
+0xd28,0x00000000,\r
+0xd2c,0xcc979975,\r
+0xd30,0x00000000,\r
+0xd34,0x00000000,\r
+0xd38,0x00000000,\r
+0xd3c,0x00027293,\r
+0xd40,0x00000000,\r
+0xd44,0x00000000,\r
+0xd48,0x00000000,\r
+0xd50,0x6437140a,\r
+0xd54,0x024dbd02,\r
+0xd58,0x00000000,\r
+0xd5c,0x30032064,\r
+0xd60,0x4653de68,\r
+0xd64,0x00518a3c,\r
+0xd68,0x00002101,\r
+0xf14,0x00000003,\r
+0xf4c,0x00000000,\r
+0xf00,0x00000300,\r
+};\r
+\r
+u32 Rtl8192SEPHY_REG_1T2RArray[PHY_REG_1T2RArrayLength] = {\r
+0x0, };\r
+\r
+u32 Rtl8192SEPHY_ChangeTo_1T1RArray[PHY_ChangeTo_1T1RArrayLength] = {\r
+0x844,0xffffffff,0x00010000,\r
+0x804,0x0000000f,0x00000001,\r
+0x824,0x00f0000f,0x00300004,\r
+0x82c,0x00f0000f,0x00100002,\r
+0x870,0x04000000,0x00000001,\r
+0x864,0x00000400,0x00000000,\r
+0x878,0x000f000f,0x00000002,\r
+0xe74,0x0f000000,0x00000002,\r
+0xe78,0x0f000000,0x00000002,\r
+0xe7c,0x0f000000,0x00000002,\r
+0xe80,0x0f000000,0x00000002,\r
+0x90c,0x000000ff,0x00000011,\r
+0xc04,0x000000ff,0x00000011,\r
+0xd04,0x0000000f,0x00000001,\r
+0x1f4,0xffff0000,0x00007777,\r
+0x234,0xf8000000,0x0000000a,\r
+};\r
+\r
+u32 Rtl8192SEPHY_ChangeTo_1T2RArray[PHY_ChangeTo_1T2RArrayLength] = {\r
+0x804,0x0000000f,0x00000003,\r
+0x824,0x00f0000f,0x00300004,\r
+0x82c,0x00f0000f,0x00300002,\r
+0x870,0x04000000,0x00000001,\r
+0x864,0x00000400,0x00000000,\r
+0x878,0x000f000f,0x00000002,\r
+0xe74,0x0f000000,0x00000002,\r
+0xe78,0x0f000000,0x00000002,\r
+0xe7c,0x0f000000,0x00000002,\r
+0xe80,0x0f000000,0x00000002,\r
+0x90c,0x000000ff,0x00000011,\r
+0xc04,0x000000ff,0x00000033,\r
+0xd04,0x0000000f,0x00000003,\r
+0x1f4,0xffff0000,0x00007777,\r
+0x234,0xf8000000,0x0000000a,\r
+};\r
+\r
+u32 Rtl8192SEPHY_ChangeTo_2T2RArray[PHY_ChangeTo_2T2RArrayLength] = {\r
+0x804,0x0000000f,0x00000003,\r
+0x824,0x00f0000f,0x00300004,\r
+0x82c,0x00f0000f,0x00300004,\r
+0x870,0x04000000,0x00000001,\r
+0x864,0x00000400,0x00000001,\r
+0x878,0x000f000f,0x00020002,\r
+0xe74,0x0f000000,0x00000006,\r
+0xe78,0x0f000000,0x00000006,\r
+0xe7c,0x0f000000,0x00000006,\r
+0xe80,0x0f000000,0x00000006,\r
+0x90c,0x000000ff,0x00000033,\r
+0xc04,0x000000ff,0x00000033,\r
+0xd04,0x0000000f,0x00000003,\r
+0x1f4,0xffff0000,0x0000ffff,\r
+0x234,0xf8000000,0x00000013,\r
+};\r
+\r
+u32 Rtl8192SEPHY_REG_Array_PG[PHY_REG_Array_PGLength] = {\r
+0xe00,0xffffffff,0x06090909,\r
+0xe04,0xffffffff,0x00030406,\r
+0xe08,0x0000ff00,0x00000000,\r
+0xe10,0xffffffff,0x0a0c0d0e,\r
+0xe14,0xffffffff,0x04070809,\r
+0xe18,0xffffffff,0x0a0c0d0e,\r
+0xe1c,0xffffffff,0x04070809,\r
+0xe00,0xffffffff,0x04040404,\r
+0xe04,0xffffffff,0x00020204,\r
+0xe08,0x0000ff00,0x00000000,\r
+0xe10,0xffffffff,0x02040404,\r
+0xe14,0xffffffff,0x00000002,\r
+0xe18,0xffffffff,0x02040404,\r
+0xe1c,0xffffffff,0x00000002,\r
+0xe00,0xffffffff,0x04040404,\r
+0xe04,0xffffffff,0x00020204,\r
+0xe08,0x0000ff00,0x00000000,\r
+0xe10,0xffffffff,0x02040404,\r
+0xe14,0xffffffff,0x00000002,\r
+0xe18,0xffffffff,0x02040404,\r
+0xe1c,0xffffffff,0x00000002,\r
+0xe00,0xffffffff,0x02020202,\r
+0xe04,0xffffffff,0x00020202,\r
+0xe08,0x0000ff00,0x00000000,\r
+0xe10,0xffffffff,0x02020202,\r
+0xe14,0xffffffff,0x00000002,\r
+0xe18,0xffffffff,0x02020202,\r
+0xe1c,0xffffffff,0x00000002,\r
+};\r
+\r
+u32 Rtl8192SERadioA_1T_Array[RadioA_1T_ArrayLength] = {\r
+0x000,0x00030159,\r
+0x001,0x00030250,\r
+0x002,0x00010000,\r
+0x010,0x0008000f,\r
+0x011,0x000231fc,\r
+0x010,0x000c000f,\r
+0x011,0x0003f9f8,\r
+0x010,0x0002000f,\r
+0x011,0x00020101,\r
+0x014,0x0001093e,\r
+0x014,0x0009093e,\r
+0x015,0x0000f8f4,\r
+0x017,0x000f6500,\r
+0x01a,0x00013056,\r
+0x01b,0x00060000,\r
+0x01c,0x00000300,\r
+0x01e,0x00031059,\r
+0x021,0x00054000,\r
+0x022,0x0000083c,\r
+0x023,0x00001558,\r
+0x024,0x00000060,\r
+0x025,0x00022583,\r
+0x026,0x0000f200,\r
+0x027,0x000eacf1,\r
+0x028,0x0009bd54,\r
+0x029,0x00004582,\r
+0x02a,0x00000001,\r
+0x02b,0x00021334,\r
+0x02a,0x00000000,\r
+0x02b,0x0000000a,\r
+0x02a,0x00000001,\r
+0x02b,0x00000808,\r
+0x02b,0x00053333,\r
+0x02c,0x0000000c,\r
+0x02a,0x00000002,\r
+0x02b,0x00000808,\r
+0x02b,0x0005b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000003,\r
+0x02b,0x00000808,\r
+0x02b,0x00063333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000004,\r
+0x02b,0x00000808,\r
+0x02b,0x0006b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000005,\r
+0x02b,0x00000709,\r
+0x02b,0x00053333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000006,\r
+0x02b,0x00000709,\r
+0x02b,0x0005b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000007,\r
+0x02b,0x00000709,\r
+0x02b,0x00063333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000008,\r
+0x02b,0x00000709,\r
+0x02b,0x0006b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000009,\r
+0x02b,0x0000060a,\r
+0x02b,0x00053333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000a,\r
+0x02b,0x0000060a,\r
+0x02b,0x0005b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000b,\r
+0x02b,0x0000060a,\r
+0x02b,0x00063333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000c,\r
+0x02b,0x0000060a,\r
+0x02b,0x0006b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000d,\r
+0x02b,0x0000050b,\r
+0x02b,0x00053333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000e,\r
+0x02b,0x0000050b,\r
+0x02b,0x00066623,\r
+0x02c,0x0000001a,\r
+0x02a,0x000e4000,\r
+0x030,0x00020000,\r
+0x031,0x000b9631,\r
+0x032,0x0000130d,\r
+0x033,0x00000187,\r
+0x013,0x00019e6c,\r
+0x013,0x00015e94,\r
+0x000,0x00010159,\r
+0x018,0x0000f401,\r
+0x0fe,0x00000000,\r
+0x01e,0x0003105b,\r
+0x0fe,0x00000000,\r
+0x000,0x00030159,\r
+0x010,0x0004000f,\r
+0x011,0x000203f9,\r
+};\r
+\r
+u32 Rtl8192SERadioB_Array[RadioB_ArrayLength] = {\r
+0x000,0x00030159,\r
+0x001,0x00001041,\r
+0x002,0x00011000,\r
+0x005,0x00080fc0,\r
+0x007,0x000fc803,\r
+0x013,0x00017cb0,\r
+0x013,0x00011cc0,\r
+0x013,0x0000dc60,\r
+0x013,0x00008c60,\r
+0x013,0x00004450,\r
+0x013,0x00000020,\r
+};\r
+\r
+u32 Rtl8192SERadioA_to1T_Array[RadioA_to1T_ArrayLength] = {\r
+0x000,0x00030159,\r
+0x001,0x00030250,\r
+0x002,0x00010000,\r
+0x010,0x0008000f,\r
+0x011,0x000231fc,\r
+0x010,0x000c000f,\r
+0x011,0x0003f9f8,\r
+0x014,0x0001093e,\r
+0x014,0x0009093e,\r
+0x015,0x000198f4,\r
+0x017,0x000f6500,\r
+0x01a,0x00013056,\r
+0x01b,0x00060000,\r
+0x01c,0x00000300,\r
+0x01e,0x00031059,\r
+0x021,0x00054000,\r
+0x022,0x0000083c,\r
+0x023,0x00001558,\r
+0x024,0x00000060,\r
+0x025,0x00022583,\r
+0x026,0x0000f200,\r
+0x027,0x000eacf1,\r
+0x028,0x000dbd54,\r
+0x029,0x00004582,\r
+0x02a,0x00000001,\r
+0x02b,0x00021334,\r
+0x02a,0x00000000,\r
+0x02b,0x0000000a,\r
+0x02a,0x00000001,\r
+0x02b,0x00000808,\r
+0x02b,0x00053333,\r
+0x02c,0x0000000c,\r
+0x02a,0x00000002,\r
+0x02b,0x00000808,\r
+0x02b,0x0005b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000003,\r
+0x02b,0x00000808,\r
+0x02b,0x00063333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000004,\r
+0x02b,0x00000808,\r
+0x02b,0x0006b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000005,\r
+0x02b,0x00000709,\r
+0x02b,0x00053333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000006,\r
+0x02b,0x00000709,\r
+0x02b,0x0005b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000007,\r
+0x02b,0x00000709,\r
+0x02b,0x00063333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000008,\r
+0x02b,0x00000709,\r
+0x02b,0x0006b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000009,\r
+0x02b,0x0000060a,\r
+0x02b,0x00053333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000a,\r
+0x02b,0x0000060a,\r
+0x02b,0x0005b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000b,\r
+0x02b,0x0000060a,\r
+0x02b,0x00063333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000c,\r
+0x02b,0x0000060a,\r
+0x02b,0x0006b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000d,\r
+0x02b,0x0000050b,\r
+0x02b,0x00053333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000e,\r
+0x02b,0x0000050b,\r
+0x02b,0x00066623,\r
+0x02c,0x0000001a,\r
+0x02a,0x000e4000,\r
+0x030,0x00020000,\r
+0x031,0x000b9631,\r
+0x033,0x00000187,\r
+0x013,0x00019e6c,\r
+0x013,0x00015e94,\r
+0x000,0x00010159,\r
+0x018,0x0000f401,\r
+0x0fe,0x00000000,\r
+0x01e,0x0003105b,\r
+0x0fe,0x00000000,\r
+0x000,0x00030159,\r
+0x010,0x0004000f,\r
+0x011,0x000203f9,\r
+};\r
+\r
+u32 Rtl8192SERadioA_to2T_Array[RadioA_to2T_ArrayLength] = {\r
+0x000,0x00030159,\r
+0x001,0x00030250,\r
+0x002,0x00010000,\r
+0x010,0x0008000f,\r
+0x011,0x000231fc,\r
+0x010,0x000c000f,\r
+0x011,0x0003f9f8,\r
+0x014,0x0001093e,\r
+0x014,0x0009093e,\r
+0x015,0x000198f4,\r
+0x017,0x000f6500,\r
+0x01a,0x00013056,\r
+0x01b,0x00060000,\r
+0x01c,0x00000300,\r
+0x01e,0x00031059,\r
+0x021,0x00054000,\r
+0x022,0x0000083c,\r
+0x023,0x00001558,\r
+0x024,0x00000060,\r
+0x025,0x00022583,\r
+0x026,0x0000f200,\r
+0x027,0x000eacf1,\r
+0x028,0x000dbd54,\r
+0x029,0x00004582,\r
+0x02a,0x00000001,\r
+0x02b,0x00021334,\r
+0x02a,0x00000000,\r
+0x02b,0x0000000a,\r
+0x02a,0x00000001,\r
+0x02b,0x00000808,\r
+0x02b,0x00053333,\r
+0x02c,0x0000000c,\r
+0x02a,0x00000002,\r
+0x02b,0x00000808,\r
+0x02b,0x0005b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000003,\r
+0x02b,0x00000808,\r
+0x02b,0x00063333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000004,\r
+0x02b,0x00000808,\r
+0x02b,0x0006b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000005,\r
+0x02b,0x00000709,\r
+0x02b,0x00053333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000006,\r
+0x02b,0x00000709,\r
+0x02b,0x0005b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000007,\r
+0x02b,0x00000709,\r
+0x02b,0x00063333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000008,\r
+0x02b,0x00000709,\r
+0x02b,0x0006b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x00000009,\r
+0x02b,0x0000060a,\r
+0x02b,0x00053333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000a,\r
+0x02b,0x0000060a,\r
+0x02b,0x0005b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000b,\r
+0x02b,0x0000060a,\r
+0x02b,0x00063333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000c,\r
+0x02b,0x0000060a,\r
+0x02b,0x0006b333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000d,\r
+0x02b,0x0000050b,\r
+0x02b,0x00053333,\r
+0x02c,0x0000000d,\r
+0x02a,0x0000000e,\r
+0x02b,0x0000050b,\r
+0x02b,0x00066623,\r
+0x02c,0x0000001a,\r
+0x02a,0x000e4000,\r
+0x030,0x00020000,\r
+0x031,0x000b9631,\r
+0x033,0x00000187,\r
+0x013,0x00019e6c,\r
+0x013,0x00015e94,\r
+0x000,0x00010159,\r
+0x018,0x0000f401,\r
+0x0fe,0x00000000,\r
+0x01e,0x0003105b,\r
+0x0fe,0x00000000,\r
+0x000,0x00030159,\r
+0x010,0x0004000f,\r
+0x011,0x000203f9,\r
+};\r
+\r
+u32 Rtl8192SERadioB_GM_Array[RadioB_GM_ArrayLength] = {\r
+0x000,0x00030159,\r
+0x001,0x00001041,\r
+0x002,0x00011000,\r
+0x005,0x00080fc0,\r
+0x007,0x000fc803,\r
+};\r
+\r
+u32 Rtl8192SEMAC_2T_Array[MAC_2T_ArrayLength] = {\r
+0x020,0x00000035,\r
+0x048,0x0000000e,\r
+0x049,0x000000f0,\r
+0x04a,0x00000077,\r
+0x04b,0x00000083,\r
+0x0b5,0x00000021,\r
+0x0dc,0x000000ff,\r
+0x0dd,0x000000ff,\r
+0x0de,0x000000ff,\r
+0x0df,0x000000ff,\r
+0x116,0x00000000,\r
+0x117,0x00000000,\r
+0x118,0x00000000,\r
+0x119,0x00000000,\r
+0x11a,0x00000000,\r
+0x11b,0x00000000,\r
+0x11c,0x00000000,\r
+0x11d,0x00000000,\r
+0x160,0x0000000b,\r
+0x161,0x0000000b,\r
+0x162,0x0000000b,\r
+0x163,0x0000000b,\r
+0x164,0x0000000b,\r
+0x165,0x0000000b,\r
+0x166,0x0000000b,\r
+0x167,0x0000000b,\r
+0x168,0x0000000b,\r
+0x169,0x0000000b,\r
+0x16a,0x0000000b,\r
+0x16b,0x0000000b,\r
+0x16c,0x0000000b,\r
+0x16d,0x0000000b,\r
+0x16e,0x0000000b,\r
+0x16f,0x0000000b,\r
+0x170,0x0000000b,\r
+0x171,0x0000000b,\r
+0x172,0x0000000b,\r
+0x173,0x0000000b,\r
+0x174,0x0000000b,\r
+0x175,0x0000000b,\r
+0x176,0x0000000b,\r
+0x177,0x0000000b,\r
+0x178,0x0000000b,\r
+0x179,0x0000000b,\r
+0x17a,0x0000000b,\r
+0x17b,0x0000000b,\r
+0x17c,0x0000000b,\r
+0x17d,0x0000000b,\r
+0x17e,0x0000000b,\r
+0x17f,0x0000000b,\r
+0x236,0x0000000c,\r
+0x503,0x00000022,\r
+0x560,0x00000000,\r
+};\r
+\r
+u32 Rtl8192SEMACPHY_Array_PG[MACPHY_Array_PGLength] = {\r
+0x0, };\r
+\r
+u32 Rtl8192SEAGCTAB_Array[AGCTAB_ArrayLength] = {\r
+0xc78,0x7f000001,\r
+0xc78,0x7f010001,\r
+0xc78,0x7e020001,\r
+0xc78,0x7d030001,\r
+0xc78,0x7c040001,\r
+0xc78,0x7b050001,\r
+0xc78,0x7a060001,\r
+0xc78,0x79070001,\r
+0xc78,0x78080001,\r
+0xc78,0x77090001,\r
+0xc78,0x760a0001,\r
+0xc78,0x750b0001,\r
+0xc78,0x740c0001,\r
+0xc78,0x730d0001,\r
+0xc78,0x720e0001,\r
+0xc78,0x710f0001,\r
+0xc78,0x70100001,\r
+0xc78,0x6f110001,\r
+0xc78,0x6f120001,\r
+0xc78,0x6e130001,\r
+0xc78,0x6d140001,\r
+0xc78,0x6d150001,\r
+0xc78,0x6c160001,\r
+0xc78,0x6b170001,\r
+0xc78,0x6a180001,\r
+0xc78,0x6a190001,\r
+0xc78,0x691a0001,\r
+0xc78,0x681b0001,\r
+0xc78,0x671c0001,\r
+0xc78,0x661d0001,\r
+0xc78,0x651e0001,\r
+0xc78,0x641f0001,\r
+0xc78,0x63200001,\r
+0xc78,0x4c210001,\r
+0xc78,0x4b220001,\r
+0xc78,0x4a230001,\r
+0xc78,0x49240001,\r
+0xc78,0x48250001,\r
+0xc78,0x47260001,\r
+0xc78,0x46270001,\r
+0xc78,0x45280001,\r
+0xc78,0x44290001,\r
+0xc78,0x2c2a0001,\r
+0xc78,0x2b2b0001,\r
+0xc78,0x2a2c0001,\r
+0xc78,0x292d0001,\r
+0xc78,0x282e0001,\r
+0xc78,0x272f0001,\r
+0xc78,0x26300001,\r
+0xc78,0x25310001,\r
+0xc78,0x24320001,\r
+0xc78,0x23330001,\r
+0xc78,0x22340001,\r
+0xc78,0x09350001,\r
+0xc78,0x08360001,\r
+0xc78,0x07370001,\r
+0xc78,0x06380001,\r
+0xc78,0x05390001,\r
+0xc78,0x043a0001,\r
+0xc78,0x033b0001,\r
+0xc78,0x023c0001,\r
+0xc78,0x013d0001,\r
+0xc78,0x003e0001,\r
+0xc78,0x003f0001,\r
+0xc78,0x7f400001,\r
+0xc78,0x7f410001,\r
+0xc78,0x7e420001,\r
+0xc78,0x7d430001,\r
+0xc78,0x7c440001,\r
+0xc78,0x7b450001,\r
+0xc78,0x7a460001,\r
+0xc78,0x79470001,\r
+0xc78,0x78480001,\r
+0xc78,0x77490001,\r
+0xc78,0x764a0001,\r
+0xc78,0x754b0001,\r
+0xc78,0x744c0001,\r
+0xc78,0x734d0001,\r
+0xc78,0x724e0001,\r
+0xc78,0x714f0001,\r
+0xc78,0x70500001,\r
+0xc78,0x6f510001,\r
+0xc78,0x6f520001,\r
+0xc78,0x6e530001,\r
+0xc78,0x6d540001,\r
+0xc78,0x6d550001,\r
+0xc78,0x6c560001,\r
+0xc78,0x6b570001,\r
+0xc78,0x6a580001,\r
+0xc78,0x6a590001,\r
+0xc78,0x695a0001,\r
+0xc78,0x685b0001,\r
+0xc78,0x675c0001,\r
+0xc78,0x665d0001,\r
+0xc78,0x655e0001,\r
+0xc78,0x645f0001,\r
+0xc78,0x63600001,\r
+0xc78,0x4c610001,\r
+0xc78,0x4b620001,\r
+0xc78,0x4a630001,\r
+0xc78,0x49640001,\r
+0xc78,0x48650001,\r
+0xc78,0x47660001,\r
+0xc78,0x46670001,\r
+0xc78,0x45680001,\r
+0xc78,0x44690001,\r
+0xc78,0x2c6a0001,\r
+0xc78,0x2b6b0001,\r
+0xc78,0x2a6c0001,\r
+0xc78,0x296d0001,\r
+0xc78,0x286e0001,\r
+0xc78,0x276f0001,\r
+0xc78,0x26700001,\r
+0xc78,0x25710001,\r
+0xc78,0x24720001,\r
+0xc78,0x23730001,\r
+0xc78,0x22740001,\r
+0xc78,0x09750001,\r
+0xc78,0x08760001,\r
+0xc78,0x07770001,\r
+0xc78,0x06780001,\r
+0xc78,0x05790001,\r
+0xc78,0x047a0001,\r
+0xc78,0x037b0001,\r
+0xc78,0x027c0001,\r
+0xc78,0x017d0001,\r
+0xc78,0x007e0001,\r
+0xc78,0x007f0001,\r
+0xc78,0x3000001e,\r
+0xc78,0x3001001e,\r
+0xc78,0x3002001e,\r
+0xc78,0x3003001e,\r
+0xc78,0x3004001e,\r
+0xc78,0x3405001e,\r
+0xc78,0x3806001e,\r
+0xc78,0x3e07001e,\r
+0xc78,0x3e08001e,\r
+0xc78,0x4409001e,\r
+0xc78,0x460a001e,\r
+0xc78,0x480b001e,\r
+0xc78,0x480c001e,\r
+0xc78,0x4e0d001e,\r
+0xc78,0x560e001e,\r
+0xc78,0x5a0f001e,\r
+0xc78,0x5e10001e,\r
+0xc78,0x6211001e,\r
+0xc78,0x6c12001e,\r
+0xc78,0x7213001e,\r
+0xc78,0x7214001e,\r
+0xc78,0x7215001e,\r
+0xc78,0x7216001e,\r
+0xc78,0x7217001e,\r
+0xc78,0x7218001e,\r
+0xc78,0x7219001e,\r
+0xc78,0x721a001e,\r
+0xc78,0x721b001e,\r
+0xc78,0x721c001e,\r
+0xc78,0x721d001e,\r
+0xc78,0x721e001e,\r
+0xc78,0x721f001e,\r
+};\r
+\r
+#endif\r
diff --git a/ubuntu/rtl8192se/rtl8192s/r8192S_hwimg492.h b/ubuntu/rtl8192se/rtl8192s/r8192S_hwimg492.h
new file mode 100644 (file)
index 0000000..b8f541b
--- /dev/null
@@ -0,0 +1,60 @@
+/******************************************************************************\r
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ * The full GNU General Public License is included in this distribution in the\r
+ * file called LICENSE.\r
+ *\r
+ * Contact Information:\r
+ * wlanfae <wlanfae@realtek.com>\r
+******************************************************************************/\r
+#ifndef __INC_HAL8192SE_FW_IMG_H\r
+#define __INC_HAL8192SE_FW_IMG_H\r
+\r
+/*Created on  2009/ 7/23,  5: 4*/\r
+\r
+#include <linux/types.h>\r
+#define ImgArrayLength 75984\r
+extern u8 Rtl8192SEFwImgArray[ImgArrayLength];\r
+#define MainArrayLength 1\r
+extern u8 Rtl8192SEFwMainArray[MainArrayLength];\r
+#define DataArrayLength 1\r
+extern u8 Rtl8192SEFwDataArray[DataArrayLength];\r
+#define PHY_REG_2T2RArrayLength 372\r
+extern u32 Rtl8192SEPHY_REG_2T2RArray[PHY_REG_2T2RArrayLength];\r
+#define PHY_REG_1T2RArrayLength 1\r
+extern u32 Rtl8192SEPHY_REG_1T2RArray[PHY_REG_1T2RArrayLength];\r
+#define PHY_ChangeTo_1T1RArrayLength 48\r
+extern u32 Rtl8192SEPHY_ChangeTo_1T1RArray[PHY_ChangeTo_1T1RArrayLength];\r
+#define PHY_ChangeTo_1T2RArrayLength 45\r
+extern u32 Rtl8192SEPHY_ChangeTo_1T2RArray[PHY_ChangeTo_1T2RArrayLength];\r
+#define PHY_ChangeTo_2T2RArrayLength 45\r
+extern u32 Rtl8192SEPHY_ChangeTo_2T2RArray[PHY_ChangeTo_2T2RArrayLength];\r
+#define PHY_REG_Array_PGLength 84\r
+extern u32 Rtl8192SEPHY_REG_Array_PG[PHY_REG_Array_PGLength];\r
+#define RadioA_1T_ArrayLength 202\r
+extern u32 Rtl8192SERadioA_1T_Array[RadioA_1T_ArrayLength];\r
+#define RadioB_ArrayLength 22\r
+extern u32 Rtl8192SERadioB_Array[RadioB_ArrayLength];\r
+#define RadioA_to1T_ArrayLength 196\r
+extern u32 Rtl8192SERadioA_to1T_Array[RadioA_to1T_ArrayLength];\r
+#define RadioA_to2T_ArrayLength 196\r
+extern u32 Rtl8192SERadioA_to2T_Array[RadioA_to2T_ArrayLength];\r
+#define RadioB_GM_ArrayLength 10\r
+extern u32 Rtl8192SERadioB_GM_Array[RadioB_GM_ArrayLength];\r
+#define MAC_2T_ArrayLength 106\r
+extern u32 Rtl8192SEMAC_2T_Array[MAC_2T_ArrayLength];\r
+#define MACPHY_Array_PGLength 1\r
+extern u32 Rtl8192SEMACPHY_Array_PG[MACPHY_Array_PGLength];\r
+#define AGCTAB_ArrayLength 320\r
+extern u32 Rtl8192SEAGCTAB_Array[AGCTAB_ArrayLength];\r
+\r
+#endif 
diff --git a/ubuntu/rtl8192se/rtl8192s/r8192S_led.c b/ubuntu/rtl8192se/rtl8192s/r8192S_led.c
new file mode 100644 (file)
index 0000000..7403a8c
--- /dev/null
@@ -0,0 +1,1361 @@
+/******************************************************************************\r
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ * The full GNU General Public License is included in this distribution in the\r
+ * file called LICENSE.\r
+ *\r
+ * Contact Information:\r
+ * wlanfae <wlanfae@realtek.com>\r
+******************************************************************************/\r
+#include "../rtl_core.h"\r
+#ifdef RTL8192SE\r
+#define LED_BLINK_NORMAL_INTERVAL      100\r
+#define LED_BLINK_SLOWLY_INTERVAL              200\r
+\r
+#define LED_BLINK_NORMAL_INTERVAL_NETTRONIX  100\r
+#define LED_BLINK_SLOWLY_INTERVAL_NETTRONIX  2000\r
+\r
+#define LED_BLINK_SLOWLY_INTERVAL_PORNET 1000\r
+#define LED_BLINK_NORMAL_INTERVAL_PORNET 100\r
+\r
+\r
+#define LED_CM2_BLINK_ON_INTERVAL                      250\r
+#define LED_CM2_BLINK_OFF_INTERVAL             4750\r
+\r
+#define LED_CM8_BLINK_OFF_INTERVAL             3750    
+\r
+#define LED_RunTop_BLINK_INTERVAL                      300\r
+\r
+#define LED_CM3_BLINK_INTERVAL                 1500\r
+\r
+\r
+\r
+static void BlinkTimerCallback(unsigned long data);\r
+\r
+\r
+void InitLed8190Pci(struct net_device *dev, PLED_8190  pLed,LED_PIN_8190 LedPin)\r
+{\r
+       pLed->dev = dev;\r
+       pLed->LedPin = LedPin;\r
+\r
+       pLed->CurrLedState = LED_OFF;\r
+       pLed->bLedOn = false;\r
+       pLed->bLedBlinkInProgress = false;\r
+       pLed->BlinkTimes = 0;\r
+       pLed->BlinkingLedState = LED_OFF;\r
+\r
+       setup_timer(&pLed->BlinkTimer,\r
+                   BlinkTimerCallback,\r
+                   (unsigned long) pLed);\r
+}\r
+\r
+void DeInitLed8190Pci(PLED_8190 pLed)\r
+{\r
+       del_timer_sync(&(pLed->BlinkTimer));\r
+       pLed->bLedBlinkInProgress = false;\r
+}\r
+\r
+void SwLedOn(  struct net_device *dev , PLED_8190 pLed)\r
+{\r
+       u8      LedCfg;\r
+\r
+       LedCfg = read_nic_byte(dev, LEDCFG);\r
+       \r
+       switch(pLed->LedPin)\r
+       {\r
+       case LED_PIN_GPIO0:\r
+               break;\r
+\r
+       case LED_PIN_LED0:\r
+               write_nic_byte(dev, LEDCFG, LedCfg&0xf0); 
+               break;\r
+\r
+       case LED_PIN_LED1:\r
+               write_nic_byte(dev, LEDCFG, LedCfg&0x0f); 
+               break;\r
+\r
+       default:\r
+               break;\r
+       }\r
+\r
+       pLed->bLedOn = true;\r
+}\r
+\r
+void SwLedOff(struct net_device *dev, PLED_8190 pLed)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       u8      LedCfg;\r
+       \r
+       LedCfg = read_nic_byte(dev, LEDCFG);\r
+       \r
+       switch(pLed->LedPin)\r
+       {\r
+       case LED_PIN_GPIO0:\r
+               break;\r
+\r
+       case LED_PIN_LED0:\r
+               LedCfg &= 0xf0; 
+\r
+               if(priv->bLedOpenDrain == true) 
+                       write_nic_byte(dev, LEDCFG, (LedCfg|BIT1));\r
+               else\r
+                       write_nic_byte(dev, LEDCFG, (LedCfg|BIT3));\r
+               break;\r
+\r
+       case LED_PIN_LED1:\r
+               LedCfg &= 0x0f; 
+               write_nic_byte(dev, LEDCFG, (LedCfg|BIT7));\r
+               break;\r
+\r
+       default:\r
+               break;\r
+       }\r
+\r
+       pLed->bLedOn = false;\r
+}\r
+\r
+\r
+void InitSwLeds(struct net_device *dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+\r
+       InitLed8190Pci(\r
+               dev,\r
+               &(priv->SwLed0), \r
+               LED_PIN_LED0);\r
+\r
+       InitLed8190Pci(\r
+               dev,\r
+               &(priv->SwLed1), \r
+               LED_PIN_LED1);\r
+}\r
+\r
+\r
+void DeInitSwLeds(struct net_device *dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+\r
+       DeInitLed8190Pci( &(priv->SwLed0) );\r
+       DeInitLed8190Pci( &(priv->SwLed1) );\r
+}\r
+\r
+void HwLedBlink(struct net_device *dev, PLED_8190 pLed)\r
+{\r
+\r
+       \r
+       switch(pLed->LedPin)\r
+       {\r
+       case LED_PIN_GPIO0:\r
+               break;\r
+\r
+       case LED_PIN_LED0:\r
+               break;\r
+\r
+       case LED_PIN_LED1:\r
+               break;\r
+\r
+       default:\r
+               break;\r
+       }\r
+\r
+       pLed->bLedOn = true;\r
+}\r
+\r
+\r
+\r
+void SwLedBlink(PLED_8190 pLed)\r
+{\r
+       struct net_device *dev = (struct net_device *)pLed->dev;\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       bool bStopBlinking = false;\r
+       \r
+       if( pLed->BlinkingLedState == LED_ON ) \r
+       {\r
+               SwLedOn(dev, pLed);\r
+               RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes);\r
+       }       \r
+       else \r
+       {\r
+               SwLedOff(dev, pLed);\r
+               RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes);\r
+       }\r
+\r
+       pLed->BlinkTimes--;\r
+       switch(pLed->CurrLedState)\r
+       {\r
+       case LED_BLINK_NORMAL: \r
+       case LED_BLINK_TXRX:\r
+       case LED_BLINK_RUNTOP:\r
+               if(pLed->BlinkTimes == 0)\r
+               {\r
+                       bStopBlinking = true;\r
+               }\r
+               break;\r
+\r
+       case LED_SCAN_BLINK:\r
+               if( (priv->rtllib->state == RTLLIB_LINKED) &&  
+                       (!rtllib_act_scanning(priv->rtllib,true))&& 
+                       (pLed->BlinkTimes % 2 == 0)) 
+               {\r
+                       bStopBlinking = true;\r
+               }\r
+               break;\r
+\r
+       case LED_NO_LINK_BLINK:\r
+       case LED_BLINK_StartToBlink:    \r
+               if( (priv->rtllib->state == RTLLIB_LINKED) && (priv->rtllib->iw_mode == IW_MODE_INFRA)) \r
+               {\r
+                       bStopBlinking = true;\r
+               }\r
+               else if((priv->rtllib->state == RTLLIB_LINKED) && (priv->rtllib->iw_mode == IW_MODE_ADHOC))\r
+               {\r
+                       bStopBlinking = true;\r
+               }\r
+               else if(pLed->BlinkTimes == 0)\r
+               {\r
+                       bStopBlinking = true;\r
+               }\r
+               break;\r
+               \r
+       case LED_BLINK_CAMEO:\r
+               if((priv->rtllib->state == RTLLIB_LINKED) && (priv->rtllib->iw_mode == IW_MODE_INFRA)) \r
+               {\r
+                       bStopBlinking = true;\r
+               }\r
+               else if((priv->rtllib->state == RTLLIB_LINKED) && (priv->rtllib->iw_mode == IW_MODE_ADHOC) )\r
+               {\r
+                       bStopBlinking = true;\r
+               }\r
+               break;\r
+               \r
+       default:\r
+               bStopBlinking = true;\r
+               break;\r
+       }\r
+\r
+       if(bStopBlinking)\r
+       {\r
+               if( priv->rtllib->eRFPowerState != eRfOn )\r
+               {\r
+                       SwLedOff(dev, pLed);\r
+               }\r
+               else if(pLed->CurrLedState == LED_BLINK_TXRX)\r
+               {\r
+                       SwLedOff(dev, pLed);\r
+               }\r
+               else if(pLed->CurrLedState == LED_BLINK_RUNTOP)\r
+               {\r
+                       SwLedOff(dev, pLed);\r
+               }\r
+               else if( (priv->rtllib->state == RTLLIB_LINKED) && (pLed->bLedOn == false))\r
+               {\r
+                       SwLedOn(dev, pLed);\r
+               }\r
+               else if( (priv->rtllib->state != RTLLIB_LINKED) &&  pLed->bLedOn == true)\r
+               {\r
+                       SwLedOff(dev, pLed);\r
+               }\r
+\r
+               pLed->BlinkTimes = 0;\r
+               pLed->bLedBlinkInProgress = false;      \r
+       }\r
+       else\r
+       {\r
+               if( pLed->BlinkingLedState == LED_ON ) \r
+                       pLed->BlinkingLedState = LED_OFF;\r
+               else \r
+                       pLed->BlinkingLedState = LED_ON;\r
+\r
+               switch( pLed->CurrLedState )\r
+               {\r
+               case LED_BLINK_NORMAL:\r
+               case LED_BLINK_TXRX:\r
+               case LED_BLINK_StartToBlink:\r
+                       mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));\r
+                       break;\r
+\r
+               case LED_BLINK_SLOWLY:\r
+                       mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL));\r
+                       break;\r
+\r
+               case LED_SCAN_BLINK:\r
+               case LED_NO_LINK_BLINK:\r
+                       if( pLed->bLedOn )\r
+                               mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM2_BLINK_ON_INTERVAL));\r
+                       else\r
+                               mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM2_BLINK_OFF_INTERVAL));\r
+                       break;\r
+                       \r
+               case LED_BLINK_RUNTOP:\r
+                       mod_timer(&(pLed->BlinkTimer),jiffies + MSECS(LED_RunTop_BLINK_INTERVAL));\r
+                       break;\r
+                       \r
+               case LED_BLINK_CAMEO:\r
+                       mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL_PORNET));\r
+                       break;\r
+                       \r
+               default:\r
+                       RT_TRACE(COMP_ERR, "SwLedCm2Blink(): unexpected state!\n");\r
+                       mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL));\r
+                       break;\r
+               }               \r
+       }\r
+}\r
+\r
+void SwLedBlink5(PLED_8190 pLed)\r
+{\r
+       struct net_device *dev = (struct net_device *)pLed->dev;\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       bool bStopBlinking = false;\r
+\r
+       if( pLed->BlinkingLedState == LED_ON ) \r
+       {\r
+               SwLedOn(dev, pLed);\r
+               RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes);\r
+       }       \r
+       else \r
+       {\r
+               SwLedOff(dev, pLed);\r
+               RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes);\r
+       }\r
+\r
+       switch(pLed->CurrLedState)\r
+       {\r
+               case LED_OFF:\r
+                       SwLedOff(dev, pLed);\r
+                       break;\r
+\r
+               case LED_BLINK_SLOWLY:\r
+                       if( pLed->bLedOn )\r
+                               pLed->BlinkingLedState = LED_OFF; \r
+                       else\r
+                               pLed->BlinkingLedState = LED_ON; \r
+                       mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL_NETTRONIX));\r
+                       break;\r
+\r
+               case LED_BLINK_NORMAL:\r
+                       pLed->BlinkTimes--;\r
+                       if( pLed->BlinkTimes == 0 )\r
+                       {\r
+                               bStopBlinking = true;\r
+                       }\r
+                       if(bStopBlinking)\r
+                       {\r
+                               if( priv->rtllib->eRFPowerState != eRfOn )\r
+                               {\r
+                                       SwLedOff(dev, pLed);\r
+                               }\r
+                               else \r
+                               {\r
+                                       pLed->bLedSlowBlinkInProgress = true;\r
+                                       pLed->CurrLedState = LED_BLINK_SLOWLY;\r
+                                       if( pLed->bLedOn )\r
+                                               pLed->BlinkingLedState = LED_OFF; \r
+                                       else\r
+                                               pLed->BlinkingLedState = LED_ON; \r
+                                       mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL_NETTRONIX));\r
+                               }\r
+                               pLed->BlinkTimes = 0;\r
+                               pLed->bLedBlinkInProgress = false;      \r
+                       }\r
+                       else\r
+                       {\r
+                               if( priv->rtllib->eRFPowerState != eRfOn )\r
+                               {\r
+                                       SwLedOff(dev, pLed);\r
+                               }\r
+                               else\r
+                               {\r
+                                       if( pLed->bLedOn )\r
+                                               pLed->BlinkingLedState = LED_OFF; \r
+                                       else\r
+                                               pLed->BlinkingLedState = LED_ON; \r
+\r
+                                       mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL_NETTRONIX));\r
+                               }\r
+                       }\r
+                       break;\r
+                       \r
+               default:\r
+                       break;  \r
+               }\r
+\r
+}\r
+\r
+\r
+void SwLedBlink6(PLED_8190 pLed)\r
+{\r
+       struct net_device *dev = (struct net_device *)pLed->dev;\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       bool bStopBlinking = false;\r
+\r
+       if( pLed->BlinkingLedState == LED_ON ) \r
+       {\r
+               SwLedOn(dev, pLed);\r
+               RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes);\r
+       }       \r
+       else \r
+       {\r
+               SwLedOff(dev, pLed);\r
+               RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes);\r
+       }\r
+       \r
+       switch(pLed->CurrLedState)\r
+       {\r
+               case LED_OFF:\r
+                       SwLedOff(dev, pLed);\r
+                       break;\r
+\r
+               case LED_BLINK_SLOWLY:\r
+                       if( pLed->bLedOn )\r
+                               pLed->BlinkingLedState = LED_OFF; \r
+                       else\r
+                               pLed->BlinkingLedState = LED_ON; \r
+                       mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL_PORNET));\r
+                       break;\r
+\r
+               case LED_BLINK_NORMAL:\r
+                       pLed->BlinkTimes--;\r
+                       if( pLed->BlinkTimes == 0 )\r
+                       {\r
+                               bStopBlinking = true;\r
+                       }\r
+                       if(bStopBlinking)\r
+                       {\r
+                               if( priv->rtllib->eRFPowerState != eRfOn )\r
+                               {\r
+                                       SwLedOff(dev, pLed);\r
+                               }\r
+                               else \r
+                               {\r
+                                       pLed->bLedSlowBlinkInProgress = true;\r
+                                       pLed->CurrLedState = LED_BLINK_SLOWLY;\r
+                                       if( pLed->bLedOn )\r
+                                               pLed->BlinkingLedState = LED_OFF; \r
+                                       else\r
+                                               pLed->BlinkingLedState = LED_ON; \r
+                                       mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL_PORNET));\r
+                               }\r
+                               pLed->BlinkTimes = 0;\r
+                               pLed->bLedBlinkInProgress = false;      \r
+                       }\r
+                       else\r
+                       {\r
+                               if( priv->rtllib->eRFPowerState != eRfOn )\r
+                               {\r
+                                       SwLedOff(dev, pLed);\r
+                               }\r
+                               else\r
+                               {\r
+                                       if( pLed->bLedOn )\r
+                                               pLed->BlinkingLedState = LED_OFF; \r
+                                       else\r
+                                               pLed->BlinkingLedState = LED_ON; \r
+\r
+                                       mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL_PORNET));\r
+                               }\r
+                       }\r
+                       break;\r
+                       \r
+               default:\r
+                       break;  \r
+               }\r
+       \r
+}\r
+\r
+void SwLedBlink7(      PLED_8190 pLed)\r
+{\r
+       struct net_device *dev = (struct net_device *)pLed->dev;\r
+\r
+       SwLedOn(dev, pLed);\r
+       RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes);     \r
+}\r
+\r
+void BlinkTimerCallback(unsigned long data)\r
+{      \r
+       PLED_8190       pLed = (PLED_8190)data;\r
+       struct net_device *dev = (struct net_device *)pLed->dev;\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+               \r
+       switch(priv->LedStrategy)\r
+       {\r
+       case SW_LED_MODE1:\r
+               break;\r
+       case SW_LED_MODE2:\r
+               break;\r
+       case SW_LED_MODE3:\r
+               break;\r
+       case SW_LED_MODE5:\r
+               break;\r
+       case SW_LED_MODE6:\r
+               break;\r
+\r
+       case SW_LED_MODE7:\r
+               SwLedBlink7(pLed);\r
+               break;\r
+\r
+       default:\r
+               break;\r
+       }       \r
+}\r
+\r
+void SwLedControlMode0(struct net_device *dev,LED_CTL_MODE LedAction)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       PLED_8190 pLed0 = &(priv->SwLed0);\r
+       PLED_8190 pLed1 = &(priv->SwLed1);\r
+\r
+       switch(LedAction)\r
+       {\r
+       case LED_CTL_TX:\r
+       case LED_CTL_RX:        \r
+               break;\r
+\r
+       case LED_CTL_LINK:\r
+               pLed0->CurrLedState = LED_ON;\r
+               SwLedOn(dev, pLed0);\r
+\r
+               pLed1->CurrLedState = LED_BLINK_NORMAL;\r
+               HwLedBlink(dev, pLed1);\r
+               break;\r
+\r
+       case LED_CTL_POWER_ON:\r
+               pLed0->CurrLedState = LED_OFF;\r
+               SwLedOff(dev, pLed0);\r
+\r
+               pLed1->CurrLedState = LED_BLINK_NORMAL;\r
+               HwLedBlink(dev, pLed1);\r
+\r
+               break;\r
+\r
+       case LED_CTL_POWER_OFF:\r
+               pLed0->CurrLedState = LED_OFF;\r
+               SwLedOff(dev, pLed0);\r
+\r
+               pLed1->CurrLedState = LED_OFF;\r
+               SwLedOff(dev, pLed1);\r
+               break;\r
+\r
+       case LED_CTL_SITE_SURVEY:\r
+               break;\r
+\r
+       case LED_CTL_NO_LINK:\r
+               pLed0->CurrLedState = LED_OFF;\r
+               SwLedOff(dev, pLed0);\r
+\r
+               pLed1->CurrLedState = LED_BLINK_NORMAL;\r
+               HwLedBlink(dev, pLed1);\r
+               break;  \r
+\r
+       default:\r
+               break;\r
+       }\r
+\r
+       RT_TRACE(COMP_LED, "Led0 %d Led1 %d\n", pLed0->CurrLedState, pLed1->CurrLedState);\r
+}\r
+\r
+\r
+void SwLedControlMode1(struct net_device *dev, LED_CTL_MODE LedAction)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       PLED_8190       pLed = &(priv->SwLed1);\r
+       \r
+       switch(LedAction)\r
+       {\r
+       case LED_CTL_TX:\r
+       case LED_CTL_RX:\r
+               if( pLed->bLedBlinkInProgress == false )\r
+               {\r
+                       pLed->bLedBlinkInProgress = true;\r
+\r
+                       pLed->CurrLedState = LED_BLINK_NORMAL;\r
+                       pLed->BlinkTimes = 2;\r
+\r
+                       if( pLed->bLedOn )\r
+                               pLed->BlinkingLedState = LED_OFF; \r
+                       else\r
+                               pLed->BlinkingLedState = LED_ON; \r
+                       mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));\r
+               }\r
+               break;\r
+\r
+       case LED_CTL_SITE_SURVEY:\r
+               if( pLed->bLedBlinkInProgress == false )\r
+               {\r
+                       pLed->bLedBlinkInProgress = true;\r
+\r
+                       if(priv->rtllib->state == RTLLIB_LINKED)\r
+                       {\r
+                               pLed->CurrLedState = LED_SCAN_BLINK;\r
+                               pLed->BlinkTimes = 4;\r
+                       }\r
+                       else\r
+                       {\r
+                               pLed->CurrLedState = LED_NO_LINK_BLINK;\r
+                               pLed->BlinkTimes = 24;\r
+                       }\r
+\r
+                       if( pLed->bLedOn )\r
+                       {\r
+                               pLed->BlinkingLedState = LED_OFF; \r
+                               mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM2_BLINK_ON_INTERVAL));\r
+                       }\r
+                       else\r
+                       {\r
+                               pLed->BlinkingLedState = LED_ON; \r
+                               mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM2_BLINK_OFF_INTERVAL));\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       if(pLed->CurrLedState != LED_NO_LINK_BLINK)\r
+                       {\r
+                               if(priv->rtllib->state == RTLLIB_LINKED)\r
+                               {\r
+                                       pLed->CurrLedState = LED_SCAN_BLINK;\r
+                               }\r
+                               else\r
+                               {\r
+                                       pLed->CurrLedState = LED_NO_LINK_BLINK;\r
+                               }\r
+                       }\r
+               }\r
+               break;\r
+\r
+       case LED_CTL_NO_LINK:\r
+               if( pLed->bLedBlinkInProgress == false )\r
+               {\r
+                       pLed->bLedBlinkInProgress = true;\r
+\r
+                       pLed->CurrLedState = LED_NO_LINK_BLINK;\r
+                       pLed->BlinkTimes = 24;\r
+\r
+                       if( pLed->bLedOn )\r
+                       {\r
+                               pLed->BlinkingLedState = LED_OFF; \r
+                               mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM2_BLINK_ON_INTERVAL));\r
+                       }\r
+                       else\r
+                       {\r
+                               pLed->BlinkingLedState = LED_ON; \r
+                               mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM2_BLINK_OFF_INTERVAL));\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       pLed->CurrLedState = LED_NO_LINK_BLINK;\r
+               }\r
+               break;\r
+\r
+       case LED_CTL_LINK:\r
+               pLed->CurrLedState = LED_ON;\r
+               if( pLed->bLedBlinkInProgress == false )\r
+               {\r
+                       SwLedOn(dev, pLed);\r
+               }\r
+               break;\r
+\r
+       case LED_CTL_POWER_OFF:\r
+               pLed->CurrLedState = LED_OFF;\r
+               if(pLed->bLedBlinkInProgress)\r
+               {\r
+                       del_timer_sync(&(pLed->BlinkTimer));\r
+                       pLed->bLedBlinkInProgress = false;\r
+               }\r
+               SwLedOff(dev, pLed);\r
+               break;\r
+\r
+       default:\r
+               break;\r
+       }\r
+       \r
+       RT_TRACE(COMP_LED, "Led %d \n", pLed->CurrLedState);\r
+}\r
+\r
+void SwLedControlMode2(struct net_device *dev, LED_CTL_MODE LedAction)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       PLED_8190 pLed0 = &(priv->SwLed0);\r
+       PLED_8190 pLed1 = &(priv->SwLed1);\r
+       \r
+       switch(LedAction)\r
+       {\r
+       case LED_CTL_POWER_ON:\r
+               pLed0->CurrLedState = LED_OFF;\r
+               SwLedOff(dev, pLed0);\r
+               \r
+               pLed1->CurrLedState = LED_BLINK_CAMEO;\r
+               if( pLed1->bLedBlinkInProgress == false )\r
+               {\r
+                       pLed1->bLedBlinkInProgress = true;\r
+\r
+                       pLed1->BlinkTimes = 6;\r
+               \r
+                       if( pLed1->bLedOn )\r
+                               pLed1->BlinkingLedState = LED_OFF; \r
+                       else\r
+                               pLed1->BlinkingLedState = LED_ON; \r
+                       mod_timer(&(pLed1->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL_PORNET));\r
+               }\r
+               break;\r
+\r
+       case LED_CTL_TX:\r
+       case LED_CTL_RX:\r
+               if( pLed0->bLedBlinkInProgress == false )\r
+               {\r
+                       pLed0->bLedBlinkInProgress = true;\r
+\r
+                       pLed0->CurrLedState = LED_BLINK_TXRX;\r
+                       pLed0->BlinkTimes = 2;\r
+\r
+                       if( pLed0->bLedOn )\r
+                               pLed0->BlinkingLedState = LED_OFF; \r
+                       else\r
+                               pLed0->BlinkingLedState = LED_ON; \r
+                       \r
+                       mod_timer(&(pLed0->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));\r
+               }\r
+               break;\r
+\r
+       case LED_CTL_NO_LINK:\r
+               pLed1->CurrLedState = LED_BLINK_CAMEO;\r
+               if( pLed1->bLedBlinkInProgress == false )\r
+               {\r
+                       pLed1->bLedBlinkInProgress = true;\r
+                       \r
+                       pLed1->BlinkTimes = 6;\r
+\r
+                       if( pLed1->bLedOn )\r
+                               pLed1->BlinkingLedState = LED_OFF; \r
+                       else\r
+                               pLed1->BlinkingLedState = LED_ON; \r
+                       mod_timer(&(pLed1->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL_PORNET));\r
+               }\r
+               break;\r
+\r
+       case LED_CTL_LINK:\r
+               pLed1->CurrLedState = LED_ON;\r
+               if( pLed1->bLedBlinkInProgress == false )\r
+               {\r
+                       SwLedOn(dev, pLed1);\r
+               }\r
+               break;\r
+\r
+       case LED_CTL_POWER_OFF:\r
+               pLed0->CurrLedState = LED_OFF;\r
+               pLed1->CurrLedState = LED_OFF;\r
+               if(pLed0->bLedBlinkInProgress)\r
+               {\r
+                       del_timer_sync(&(pLed0->BlinkTimer));\r
+                       pLed0->bLedBlinkInProgress = false;\r
+               }\r
+               if(pLed1->bLedBlinkInProgress)\r
+               {\r
+                       del_timer_sync(&(pLed1->BlinkTimer));\r
+                       pLed1->bLedBlinkInProgress = false;\r
+               }\r
+               SwLedOff(dev, pLed0);\r
+               SwLedOff(dev, pLed1);\r
+               break;\r
+\r
+       default:\r
+               break;\r
+       }\r
+       \r
+       RT_TRACE(COMP_LED, "Led0 %d, Led1 %d \n", pLed0->CurrLedState, pLed1->CurrLedState);\r
+}\r
+\r
+\r
+\r
+void SwLedControlMode3(struct net_device *dev, LED_CTL_MODE LedAction)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       PLED_8190 pLed0 = &(priv->SwLed0);\r
+       PLED_8190 pLed1 = &(priv->SwLed1);\r
+       \r
+       switch(LedAction)\r
+       {\r
+       case LED_CTL_POWER_ON:\r
+               pLed0->CurrLedState = LED_ON;\r
+               SwLedOn(dev, pLed0);\r
+               pLed1->CurrLedState = LED_OFF;\r
+               SwLedOff(dev, pLed1);\r
+               break;\r
+               \r
+       case LED_CTL_TX:\r
+       case LED_CTL_RX:\r
+               if( pLed1->bLedBlinkInProgress == false )\r
+               {\r
+                       pLed1->bLedBlinkInProgress = true;\r
+\r
+                       pLed1->CurrLedState = LED_BLINK_RUNTOP;\r
+                       pLed1->BlinkTimes = 2;\r
+               \r
+                       if( pLed1->bLedOn )\r
+                               pLed1->BlinkingLedState = LED_OFF; \r
+                       else\r
+                               pLed1->BlinkingLedState = LED_ON; \r
+                       \r
+                       mod_timer(&(pLed1->BlinkTimer), jiffies + MSECS(LED_RunTop_BLINK_INTERVAL));\r
+               }\r
+               break;\r
+\r
+       case LED_CTL_POWER_OFF:\r
+               pLed0->CurrLedState = LED_OFF;\r
+               pLed1->CurrLedState = LED_OFF;\r
+               if(pLed0->bLedBlinkInProgress)\r
+               {\r
+                       del_timer_sync(&(pLed0->BlinkTimer));\r
+                       pLed0->bLedBlinkInProgress = false;\r
+               }\r
+               if(pLed1->bLedBlinkInProgress)\r
+               {\r
+                       del_timer_sync(&(pLed1->BlinkTimer));\r
+                       pLed1->bLedBlinkInProgress = false;\r
+               }\r
+               SwLedOff(dev, pLed0);\r
+               SwLedOff(dev, pLed1);\r
+               break;\r
+\r
+       default:\r
+               break;\r
+       }\r
+       \r
+       RT_TRACE(COMP_LED, "Led0 %d, Led1 %d \n", pLed0->CurrLedState, pLed1->CurrLedState);\r
+}\r
+\r
+\r
+void SwLedControlMode4(struct net_device *dev, LED_CTL_MODE LedAction)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       PLED_8190 pLed0 = &(priv->SwLed0);\r
+       PLED_8190 pLed1 = &(priv->SwLed1);\r
+       \r
+       switch(LedAction)\r
+       {\r
+       case LED_CTL_POWER_ON:\r
+               pLed1->CurrLedState = LED_ON;\r
+               SwLedOn(dev, pLed1);\r
+               pLed0->CurrLedState = LED_OFF;\r
+               SwLedOff(dev, pLed0);\r
+               break;\r
+               \r
+       case LED_CTL_TX:\r
+       case LED_CTL_RX:\r
+               if( pLed0->bLedBlinkInProgress == false )\r
+               {\r
+                       pLed0->bLedBlinkInProgress = true;\r
+\r
+                       pLed0->CurrLedState = LED_BLINK_RUNTOP;\r
+                       pLed0->BlinkTimes = 2;\r
+               \r
+                       if( pLed0->bLedOn )\r
+                               pLed0->BlinkingLedState = LED_OFF; \r
+                       else\r
+                               pLed0->BlinkingLedState = LED_ON; \r
+                       \r
+                       mod_timer(&(pLed0->BlinkTimer), jiffies + MSECS(LED_RunTop_BLINK_INTERVAL));\r
+               }\r
+               break;\r
+\r
+       case LED_CTL_POWER_OFF:\r
+               pLed0->CurrLedState = LED_OFF;\r
+               pLed1->CurrLedState = LED_OFF;\r
+               if(pLed0->bLedBlinkInProgress)\r
+               {\r
+                       del_timer_sync(&(pLed0->BlinkTimer));\r
+                       pLed0->bLedBlinkInProgress = false;\r
+               }\r
+               if(pLed1->bLedBlinkInProgress)\r
+               {\r
+                       del_timer_sync(&(pLed1->BlinkTimer));\r
+                       pLed1->bLedBlinkInProgress = false;\r
+               }\r
+               SwLedOff(dev, pLed0);\r
+               SwLedOff(dev, pLed1);\r
+               break;\r
+\r
+       default:\r
+               break;\r
+       }\r
+       \r
+       RT_TRACE(COMP_LED, "Led0 %d, Led1 %d \n", pLed0->CurrLedState, pLed1->CurrLedState);\r
+}\r
+\r
+void SwLedControlMode5(struct net_device *dev, LED_CTL_MODE LedAction)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       PLED_8190 pLed0 = &(priv->SwLed0);\r
+       PLED_8190 pLed1 = &(priv->SwLed1);\r
+       switch(LedAction)\r
+       {\r
+       case LED_CTL_POWER_ON:\r
+       case LED_CTL_START_TO_LINK:\r
+       case LED_CTL_NO_LINK:\r
+               pLed1->CurrLedState = LED_OFF;\r
+               SwLedOff(dev, pLed1);\r
+\r
+\r
+               if( pLed0->bLedSlowBlinkInProgress == false )\r
+               {\r
+                       pLed0->bLedSlowBlinkInProgress = true;\r
+                       pLed0->CurrLedState = LED_BLINK_SLOWLY;\r
+                       if( pLed0->bLedOn )\r
+                               pLed0->BlinkingLedState = LED_OFF; \r
+                       else\r
+                               pLed0->BlinkingLedState = LED_ON; \r
+                       mod_timer(&(pLed0->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL_NETTRONIX));\r
+               }\r
+               \r
+               break;\r
+       \r
+       case LED_CTL_TX:\r
+       case LED_CTL_RX:        \r
+               pLed1->CurrLedState = LED_ON;\r
+               SwLedOn(dev, pLed1);\r
+\r
+               if( pLed0->bLedBlinkInProgress == false )\r
+               {\r
+                       del_timer_sync(&(pLed0->BlinkTimer));\r
+                       pLed0->bLedSlowBlinkInProgress = false;\r
+                       pLed0->bLedBlinkInProgress = true;\r
+                       pLed0->CurrLedState = LED_BLINK_NORMAL;\r
+                       pLed0->BlinkTimes = 2;\r
+\r
+                       if( pLed0->bLedOn )\r
+                               pLed0->BlinkingLedState = LED_OFF; \r
+                       else\r
+                               pLed0->BlinkingLedState = LED_ON; \r
+                               mod_timer(&(pLed0->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL_NETTRONIX));\r
+               }               \r
+               break;\r
+\r
+       case LED_CTL_LINK:\r
+               pLed1->CurrLedState = LED_ON;\r
+               SwLedOn(dev, pLed1);\r
+\r
+               if( pLed0->bLedSlowBlinkInProgress == false )\r
+               {\r
+                       pLed0->bLedSlowBlinkInProgress = true;\r
+                       pLed0->CurrLedState = LED_BLINK_SLOWLY;\r
+                       if( pLed0->bLedOn )\r
+                               pLed0->BlinkingLedState = LED_OFF; \r
+                       else\r
+                               pLed0->BlinkingLedState = LED_ON; \r
+                       mod_timer(&(pLed0->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL_NETTRONIX));\r
+               }\r
+               break;\r
+\r
+\r
+       case LED_CTL_POWER_OFF:\r
+               pLed0->CurrLedState = LED_OFF;\r
+               pLed1->CurrLedState = LED_OFF;\r
+               if( pLed0->bLedSlowBlinkInProgress == true )\r
+               {\r
+                       del_timer_sync(&(pLed0->BlinkTimer));\r
+                       pLed0->bLedSlowBlinkInProgress = false;\r
+               }\r
+               if(pLed0->bLedBlinkInProgress == true)\r
+               {\r
+                       del_timer_sync(&(pLed0->BlinkTimer));\r
+                       pLed0->bLedBlinkInProgress = false;\r
+               }\r
+               SwLedOff(dev, pLed0);\r
+               SwLedOff(dev, pLed1);\r
+               break;\r
+\r
+       default:\r
+               break;\r
+               }\r
+\r
+       \r
+}\r
+\r
+void SwLedControlMode6(struct net_device *dev, LED_CTL_MODE LedAction)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       PLED_8190 pLed0 = &(priv->SwLed0);\r
+       PLED_8190 pLed1 = &(priv->SwLed1);\r
+       \r
+\r
+       switch(LedAction)\r
+       {\r
+       case LED_CTL_POWER_ON:\r
+       case LED_CTL_START_TO_LINK:\r
+       case LED_CTL_NO_LINK:\r
+       case LED_CTL_LINK:\r
+       case LED_CTL_SITE_SURVEY:\r
+               pLed1->CurrLedState = LED_OFF;\r
+               SwLedOff(dev, pLed1);\r
+               \r
+               if( pLed0->bLedSlowBlinkInProgress == false )\r
+               {\r
+                       pLed0->bLedSlowBlinkInProgress = true;\r
+                       pLed0->CurrLedState = LED_BLINK_SLOWLY;\r
+                       if( pLed0->bLedOn )\r
+                               pLed0->BlinkingLedState = LED_OFF; \r
+                       else\r
+                               pLed0->BlinkingLedState = LED_ON; \r
+                       mod_timer(&(pLed0->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL_PORNET));\r
+               }\r
+               break;\r
+\r
+       case LED_CTL_TX:\r
+       case LED_CTL_RX:\r
+               pLed1->CurrLedState = LED_OFF;\r
+               SwLedOff(dev, pLed1);\r
+               if( pLed0->bLedBlinkInProgress == false )\r
+               {\r
+                       del_timer_sync(&(pLed0->BlinkTimer));\r
+                       pLed0->bLedSlowBlinkInProgress = false;\r
+                       pLed0->bLedBlinkInProgress = true;\r
+                       pLed0->CurrLedState = LED_BLINK_NORMAL;\r
+                       pLed0->BlinkTimes = 2;\r
+                       if( pLed0->bLedOn )\r
+                               pLed0->BlinkingLedState = LED_OFF; \r
+                       else\r
+                               pLed0->BlinkingLedState = LED_ON; \r
+                       mod_timer(&(pLed0->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL_PORNET));\r
+               }               \r
+               break;\r
+\r
+       case LED_CTL_POWER_OFF:\r
+               pLed1->CurrLedState = LED_OFF;\r
+               SwLedOff(dev, pLed1);\r
+               \r
+               pLed0->CurrLedState = LED_OFF;\r
+               if( pLed0->bLedSlowBlinkInProgress == true )\r
+               {\r
+                       del_timer_sync(&(pLed0->BlinkTimer));\r
+                       pLed0->bLedSlowBlinkInProgress = false;\r
+               }\r
+               if(pLed0->bLedBlinkInProgress == true)\r
+               {\r
+                       del_timer_sync(&(pLed0->BlinkTimer));\r
+                       pLed0->bLedBlinkInProgress = false;\r
+               }\r
+               SwLedOff(dev, pLed0);\r
+               break;\r
+\r
+       default:\r
+               break;\r
+               \r
+               }\r
+}\r
+\r
+\r
+void SwLedControlMode7(struct net_device *dev, LED_CTL_MODE LedAction)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       PLED_8190 pLed0 = &(priv->SwLed0);      \r
+\r
+       switch(LedAction)\r
+       {\r
+               case LED_CTL_POWER_ON:\r
+               case LED_CTL_LINK:\r
+               case LED_CTL_NO_LINK:                   \r
+                       SwLedOn(dev, pLed0);\r
+                       break;\r
+\r
+               case LED_CTL_POWER_OFF:\r
+                               SwLedOff(dev, pLed0);\r
+                       break;\r
+\r
+               default:\r
+                       break;\r
+                       \r
+               }\r
+}\r
+\r
+void\r
+SwLedControlMode8(struct net_device *dev, LED_CTL_MODE LedAction)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       PLED_8190 pLed = &(priv->SwLed0);       \r
+\r
+       switch(LedAction)\r
+       {\r
+               case LED_CTL_TX:\r
+               case LED_CTL_RX:\r
+                       if( pLed->bLedBlinkInProgress == false && priv->rtllib->state == RTLLIB_LINKED)\r
+                       {\r
+                               pLed->bLedBlinkInProgress = true;\r
+\r
+                               pLed->CurrLedState = LED_BLINK_NORMAL;\r
+                               pLed->BlinkTimes = 2;\r
+\r
+                               if( pLed->bLedOn )\r
+                                       pLed->BlinkingLedState = LED_OFF; \r
+                               else\r
+                                       pLed->BlinkingLedState = LED_ON; \r
+                               mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));\r
+                       }\r
+                       break;\r
+\r
+               case LED_CTL_SITE_SURVEY:\r
+                       if( pLed->bLedBlinkInProgress == false )\r
+                       {\r
+                               pLed->bLedBlinkInProgress = true;\r
+                               pLed->CurrLedState = LED_SCAN_BLINK;\r
+                               pLed->BlinkTimes = 2;\r
+                       \r
+                               if( pLed->bLedOn )\r
+                               {\r
+                                       pLed->BlinkingLedState = LED_OFF; \r
+                                       mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM2_BLINK_ON_INTERVAL));\r
+                               }\r
+                               else\r
+                               {\r
+                                       pLed->BlinkingLedState = LED_ON; \r
+                                       mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM8_BLINK_OFF_INTERVAL));\r
+                               }                               \r
+                       }\r
+                       else if(pLed->CurrLedState != LED_SCAN_BLINK)\r
+                       {\r
+                               del_timer_sync(&(pLed->BlinkTimer));\r
+                               pLed->CurrLedState = LED_SCAN_BLINK;\r
+                               pLed->BlinkTimes = 2;\r
+\r
+                               if( pLed->bLedOn )\r
+                               {\r
+                                       pLed->BlinkingLedState = LED_OFF; \r
+                                       mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM2_BLINK_ON_INTERVAL));\r
+                               }\r
+                               else\r
+                               {\r
+                                       pLed->BlinkingLedState = LED_ON; \r
+                                       mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM8_BLINK_OFF_INTERVAL));\r
+                               }                               \r
+                       }                       \r
+                       break;\r
+\r
+               case LED_CTL_POWER_ON:\r
+               case LED_CTL_NO_LINK:\r
+                       if( pLed->bLedBlinkInProgress == false )\r
+                       {\r
+                               pLed->bLedBlinkInProgress = true;\r
+\r
+                               pLed->CurrLedState = LED_NO_LINK_BLINK;\r
+                               pLed->BlinkTimes = 24;\r
+\r
+                               if( pLed->bLedOn )\r
+                               {\r
+                                       pLed->BlinkingLedState = LED_OFF; \r
+                                       mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM2_BLINK_ON_INTERVAL));\r
+                               }\r
+                               else\r
+                               {\r
+                                       pLed->BlinkingLedState = LED_ON; \r
+                                       mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM8_BLINK_OFF_INTERVAL));\r
+                               }\r
+                       }\r
+                       else if(pLed->CurrLedState != LED_SCAN_BLINK && pLed->CurrLedState != LED_NO_LINK_BLINK)\r
+                       {\r
+                               pLed->CurrLedState = LED_NO_LINK_BLINK;\r
+                               pLed->BlinkTimes = 24;\r
+\r
+                               if( pLed->bLedOn )\r
+                               {\r
+                                       pLed->BlinkingLedState = LED_OFF; \r
+                                       mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM2_BLINK_ON_INTERVAL));\r
+                               }\r
+                               else\r
+                               {\r
+                                       pLed->BlinkingLedState = LED_ON; \r
+                                       mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM8_BLINK_OFF_INTERVAL));\r
+                               }\r
+                       }\r
+                       break;\r
+\r
+               case LED_CTL_LINK:\r
+                       pLed->CurrLedState = LED_ON;\r
+                       if(pLed->bLedBlinkInProgress)\r
+                       {\r
+                               del_timer_sync(&(pLed->BlinkTimer));\r
+                               pLed->bLedBlinkInProgress = false;\r
+                       }\r
+                       SwLedOn(dev, pLed);\r
+                       break;\r
+\r
+               case LED_CTL_POWER_OFF:\r
+                       pLed->CurrLedState = LED_OFF;\r
+                       if(pLed->bLedBlinkInProgress)\r
+                       {\r
+                               del_timer_sync(&(pLed->BlinkTimer));\r
+                               pLed->bLedBlinkInProgress = false;\r
+                       }\r
+                       SwLedOff(dev, pLed);\r
+                       break;\r
+\r
+               default:\r
+                       break;\r
+               }\r
+}\r
+\r
+void\r
+SwLedControlMode9(struct net_device *dev, LED_CTL_MODE LedAction)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       PLED_8190 pLed = &(priv->SwLed0);       \r
+       \r
+               switch(LedAction)\r
+               {\r
+               case LED_CTL_TX:\r
+               case LED_CTL_RX:\r
+                       if( pLed->bLedBlinkInProgress == false )\r
+                       {\r
+                               pLed->bLedBlinkInProgress = true;\r
+       \r
+                               pLed->CurrLedState = LED_BLINK_NORMAL;\r
+                               pLed->BlinkTimes = 2;\r
+       \r
+                               if( pLed->bLedOn )\r
+                                       pLed->BlinkingLedState = LED_OFF; \r
+                               else\r
+                                       pLed->BlinkingLedState = LED_ON; \r
+                               mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));\r
+                       }\r
+                       break;\r
+       \r
+               case LED_CTL_SITE_SURVEY:\r
+                       if(priv->rtllib->LinkDetectInfo.bBusyTraffic && priv->rtllib->state == RTLLIB_LINKED)\r
+                               ;                       \r
+                       else \r
+                       {\r
+                               if( pLed->bLedBlinkInProgress == true )                 \r
+                                       del_timer_sync(&(pLed->BlinkTimer));\r
+                               else            \r
+                                       pLed->bLedBlinkInProgress = true;\r
+       \r
+                               pLed->CurrLedState = LED_SCAN_BLINK;\r
+                               pLed->BlinkTimes = 24;\r
+       \r
+                               if( pLed->bLedOn )\r
+                               {\r
+                                       pLed->BlinkingLedState = LED_OFF; \r
+                                       mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL));\r
+                               }\r
+                               else\r
+                               {\r
+                                       pLed->BlinkingLedState = LED_ON; \r
+                                       mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL));\r
+                               }\r
+                       }       \r
+                       break;\r
+       \r
+               case LED_CTL_POWER_ON:\r
+               case LED_CTL_NO_LINK:\r
+               case LED_CTL_LINK:\r
+                       if( pLed->bLedBlinkInProgress == false )\r
+                       {\r
+                               pLed->CurrLedState = LED_ON;            \r
+                               SwLedOn(dev, pLed);\r
+                       }\r
+                       break;\r
+       \r
+               case LED_CTL_POWER_OFF:\r
+                       pLed->CurrLedState = LED_OFF;\r
+                       if(pLed->bLedBlinkInProgress)\r
+                       {\r
+                               del_timer_sync(&(pLed->BlinkTimer));\r
+                               pLed->bLedBlinkInProgress = false;\r
+                       }\r
+                       SwLedOff(dev, pLed);\r
+                       break;\r
+       \r
+               default:\r
+                       break;\r
+               }\r
+       \r
+               RT_TRACE(COMP_LED, "LED9 CurrLedState %d\n", pLed->CurrLedState);\r
+               \r
+}\r
+\r
+\r
+\r
+void LedControl8192SE(struct net_device *dev, LED_CTL_MODE LedAction)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+\r
+       \r
+#ifdef _RTL8192_EXT_PATCH_\r
+       if((!priv->up)&& (!priv->mesh_up))\r
+#else\r
+       if(!priv->up)\r
+#endif\r
+               return;\r
+\r
+#ifdef TO_DO_LIST\r
+       if(Adapter->bInHctTest)\r
+               return;\r
+#endif\r
+\r
+       if(     priv->rtllib->eRFPowerState != eRfOn && \r
+               (LedAction == LED_CTL_TX || LedAction == LED_CTL_RX || \r
+                LedAction == LED_CTL_SITE_SURVEY || \r
+                LedAction == LED_CTL_LINK || \r
+                LedAction == LED_CTL_NO_LINK||\r
+                LedAction == LED_CTL_START_TO_LINK ||\r
+                LedAction == LED_CTL_POWER_ON) )\r
+       {\r
+               return;\r
+       }\r
+\r
+       RT_TRACE(COMP_LED, "LedAction %d, \n", LedAction);\r
+\r
+       switch(priv->LedStrategy)\r
+       {\r
+       case SW_LED_MODE0:\r
+               break;\r
+       case SW_LED_MODE1:\r
+               break;\r
+       case SW_LED_MODE2:\r
+               break;\r
+       case SW_LED_MODE3:\r
+               break;\r
+       case SW_LED_MODE4:\r
+               break;\r
+       case SW_LED_MODE5: \r
+               break;\r
+               \r
+       case SW_LED_MODE6: \r
+               break;\r
+\r
+       case SW_LED_MODE7:\r
+               SwLedControlMode7(dev, LedAction);\r
+               break;\r
+       case SW_LED_MODE8:\r
+               SwLedControlMode8(dev, LedAction);\r
+               break;\r
+\r
+       case SW_LED_MODE9:\r
+               SwLedControlMode9(dev, LedAction);\r
+               break;\r
+\r
+       default:\r
+               break;\r
+       }       \r
+}\r
+\r
+#ifdef TO_DO_LIST\r
+#ifdef NDIS50_MINIPORT\r
+void LedBlinkTimerStallCheck(struct net_device *dev)\r
+{      \r
+}\r
+\r
+\r
+void DoLedTimerStallCheck(PLED_8190 pLed)\r
+{      \r
+}\r
+#endif 
+#endif\r
+#endif\r
diff --git a/ubuntu/rtl8192se/rtl8192s/r8192S_led.h b/ubuntu/rtl8192se/rtl8192s/r8192S_led.h
new file mode 100644 (file)
index 0000000..9467187
--- /dev/null
@@ -0,0 +1,84 @@
+/******************************************************************************\r
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ * The full GNU General Public License is included in this distribution in the\r
+ * file called LICENSE.\r
+ *\r
+ * Contact Information:\r
+ * wlanfae <wlanfae@realtek.com>\r
+******************************************************************************/\r
+#ifndef __INC_HAL8192SELED_H\r
+#define __INC_HAL8192SELED_H\r
+\r
+\r
+\r
+typedef        enum _LED_STATE_8190{\r
+       LED_UNKNOWN = 0,\r
+       LED_ON = 1,\r
+       LED_OFF = 2,\r
+       LED_BLINK_NORMAL = 3,\r
+       LED_BLINK_SLOWLY = 4,\r
+       LED_POWER_ON_BLINK = 5,\r
+       LED_SCAN_BLINK = 6, 
+       LED_NO_LINK_BLINK = 7, 
+       LED_BLINK_StartToBlink = 8, \r
+       LED_BLINK_TXRX = 9,\r
+       LED_BLINK_RUNTOP = 10, 
+       LED_BLINK_CAMEO = 11,\r
+}LED_STATE_8190;\r
+\r
+typedef enum _LED_PIN_8190{\r
+       LED_PIN_GPIO0,\r
+       LED_PIN_LED0,\r
+       LED_PIN_LED1\r
+}LED_PIN_8190;\r
+\r
+typedef struct _LED_8190{\r
+       void *                  dev;\r
+\r
+       LED_PIN_8190    LedPin; 
+\r
+       LED_STATE_8190  CurrLedState; 
+       bool                            bLedOn; 
+\r
+       bool                            bLedBlinkInProgress; 
+\r
+       bool                            bLedSlowBlinkInProgress;
+       u32                             BlinkTimes; 
+       LED_STATE_8190  BlinkingLedState; 
+\r
+       struct timer_list       BlinkTimer; 
+} LED_8190, *PLED_8190;\r
+\r
+\r
+\r
+\r
+typedef        enum _LED_STRATEGY_8190{\r
+       SW_LED_MODE0, 
+       SW_LED_MODE1, 
+       SW_LED_MODE2, 
+       SW_LED_MODE3, 
+       SW_LED_MODE4, 
+       SW_LED_MODE5, 
+       SW_LED_MODE6, 
+       SW_LED_MODE7, 
+       SW_LED_MODE8,
+       SW_LED_MODE9, 
+       HW_LED, 
+}LED_STRATEGY_8190, *PLED_STRATEGY_8190;\r
+\r
+\r
+void InitSwLeds(struct net_device *dev);\r
+void DeInitSwLeds(struct net_device *dev);\r
+void LedControl8192SE(struct net_device *dev, LED_CTL_MODE LedAction);\r
+\r
+#endif /*__INC_HAL8190PCILED_H*/\r
diff --git a/ubuntu/rtl8192se/rtl8192s/r8192S_mp.c b/ubuntu/rtl8192se/rtl8192s/r8192S_mp.c
new file mode 100644 (file)
index 0000000..8bd5396
--- /dev/null
@@ -0,0 +1,1256 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * Based on the r8180 driver, which is:
+ * Copyright 2004-2005 Andrea Merello <andreamrl@tiscali.it>, et al.
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+
+#ifdef CONFIG_MP
+#include "../rtl_core.h"
+#include "r8192S_phy.h"
+#include "r8192S_phyreg.h"
+#include "r8192S_mp.h"
+
+void rtl8192_init_mp(struct net_device* dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+
+       priv->chan_forced = false;
+
+       priv->bSingleCarrier = false;
+       priv->RegBoard = 0;
+       priv->bCckContTx = false; 
+       priv->bOfdmContTx = false; 
+       priv->bStartContTx = false; 
+       priv->RegPaModel = 0; 
+       priv->btMpCckTxPower = 0; 
+       priv->btMpOfdmTxPower = 0; 
+}
+
+static bool r8192_MgntIsRateValidForWirelessMode(u8 rate, u8 wirelessmode)
+{
+       bool bReturn = false;
+
+       switch(wirelessmode)
+       {
+       case WIRELESS_MODE_A:
+       case WIRELESS_MODE_N_5G:
+               if((rate >= 12) && (rate <= 108) && (rate != 22) && (rate != 44))
+               {
+                       bReturn = true;
+               }
+               break;
+
+       case WIRELESS_MODE_B:
+               if( ((rate <= 22) && (rate != 12) && (rate != 18)) || 
+                       (rate == 44) )
+               {
+                       bReturn = true;
+               }
+               break;
+
+       case WIRELESS_MODE_G:
+       case WIRELESS_MODE_G | WIRELESS_MODE_B:
+       case WIRELESS_MODE_N_24G:
+               if((rate >= 2) && (rate <= 108))
+               {
+                       bReturn = true;
+               }
+               break;
+
+       case WIRELESS_MODE_AUTO:
+               printk("MgntIsRateValidForWirelessMode(): wirelessmode should not be WIRELESS_MODE_AUTO\n");
+               break;
+
+       default:
+               printk("MgntIsRateValidForWirelessMode(): Unknown wirelessmode: %d\n", wirelessmode);
+               break;
+       }
+
+       if(!bReturn)
+       {
+               if(wirelessmode&(WIRELESS_MODE_N_24G|WIRELESS_MODE_N_5G))
+               {
+                       if((rate>=0x80) && (rate<=MGN_MCS15_SG)) 
+                               bReturn = true;
+               }
+       }
+       return bReturn;
+}
+
+inline u8 r8192_is_wireless_b_mode(u16 rate)
+{
+       if( ((rate <= 110) && (rate != 60) && (rate != 90)) || (rate == 220) )
+               return 1;
+       else return 0;
+}
+
+static void r8192_XmitOnePacket(struct net_device* dev)
+{
+       struct r8192_priv* priv = rtllib_priv(dev);
+       struct rtllib_device* ieee = priv->rtllib;
+       struct sk_buff* skb = rtllib_get_beacon(ieee);
+       
+       if (unlikely(!skb)){
+               printk("========>error alloc skb\n");
+               return;
+       }
+
+       priv->rtllib->softmac_data_hard_start_xmit(skb, dev, ieee->rate);
+}
+
+int r8192_wx_mp_set_chan(struct net_device *dev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device *ieee = priv->rtllib;
+        int ret = -1;
+       u8 channel;
+
+       down(&priv->wx_sem);
+
+       channel = *extra;
+       
+       rtllib_stop_scan(ieee);
+
+        printk("####RTL819X MP####set channel[1-11] %d\n",channel);
+
+       if((channel > 11) || (channel < 1)) {
+       up(&priv->wx_sem);
+                       return ret;
+       }
+
+       priv->rtllib->current_network.channel = channel;
+       priv->MptChannelToSw = channel; 
+
+       priv->chan_forced = false;
+       MPT_ProSwChannel(dev);
+       priv->chan_forced = true;
+
+       ret = 0;
+        up(&priv->wx_sem);
+               
+        return ret;
+        
+}
+
+int r8192_wx_mp_set_txrate(struct net_device *dev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+        struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device* ieee = priv->rtllib;
+       int ret = -1;
+       u32 data_rate_index = 0;
+
+        down(&priv->wx_sem);
+             
+       data_rate_index = *extra;
+
+       printk("####RTL819X MP####set tx rate index %d\n",data_rate_index);
+       
+       priv->MptRateIndex = data_rate_index;
+
+       if((data_rate_index > 27) || (data_rate_index < 0)) {
+               up(&priv->wx_sem);              
+                       return ret;
+       } else if(data_rate_index <= 3) {
+               ieee->mode = WIRELESS_MODE_B;
+       } else if (data_rate_index <= 11) {
+               ieee->mode = WIRELESS_MODE_G;
+       } else {
+               ieee->mode = WIRELESS_MODE_N_24G;
+       }       
+
+       MPT_ProSetDataRate819x(dev);
+       
+       printk("####RTL819X MP####set tx rate %d\n",ieee->rate);
+       
+       ret = 0;
+        up(&priv->wx_sem);
+
+       return ret;
+}
+
+int r8192_wx_mp_set_txpower(struct net_device *dev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       int ret = -1;
+       u8 power_index = 0;
+       
+       down(&priv->wx_sem);
+
+       power_index = *extra;
+
+        printk("####RTL819X MP####set tx power index %d\n",power_index);
+
+       if((power_index > 0x3F) || (power_index < 0x00)) {
+               up(&priv->wx_sem);              
+                       return ret;
+       }
+
+       mpt_ProSetTxPower(dev, power_index);
+
+       ret = 0;
+       up(&priv->wx_sem);
+       
+       return ret;
+       
+}
+
+int r8192_wx_mp_set_bw(struct net_device *dev,
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+        struct r8192_priv *priv = rtllib_priv(dev);
+       int ret = -1;
+       u8 bw_index = 0;
+
+        down(&priv->wx_sem);
+
+       bw_index = *extra;
+
+        printk("####RTL819X MP####set bandwith  index %d [0: 20MHz 1: 40MHz]\n",bw_index);
+
+       priv->MptBandWidth = bw_index;
+
+#if 0
+       if((bw_index > 1) || (bw_index < 0)) {
+       up(&priv->wx_sem);
+                       return ret;
+       } else if(bw_index == 1) {
+               HTSetConnectBwMode(priv->rtllib, HT_CHANNEL_WIDTH_20_40, 
+                       (priv->rtllib->current_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER);  
+       } else {
+               HTSetConnectBwMode(priv->rtllib, HT_CHANNEL_WIDTH_20, 
+                       (priv->rtllib->current_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER);  
+       }
+#else
+       MPT_ProSetBandWidth819x(dev);
+#endif
+
+       ret = 0;
+       up(&priv->wx_sem);
+       
+       return ret;
+       
+}
+
+
+
+int r8192_wx_mp_set_txstart(struct net_device *dev,
+                               struct iw_request_info *info,
+                               union iwreq_data *wrqu, char *extra)
+{
+        struct r8192_priv *priv = rtllib_priv(dev);
+    struct rtllib_device *ieee = priv->rtllib;
+    int ret = -1;
+    u8 start_flag = 0;
+
+        down(&priv->wx_sem);
+
+    start_flag = *extra;
+
+    if(start_flag == 1) { 
+       if (priv->bCckContTx || priv->bOfdmContTx) {
+           printk("####RTL819X MP####continious Tx is undergoing, please close it first\n");
+           ret = -EBUSY;
+        up(&priv->wx_sem);
+           return ret;
+       }
+
+       if(r8192_is_wireless_b_mode(ieee->rate)) {
+           printk("####RTL819X MP####start cck continious TX, rate:%d\n", ieee->rate);
+           mpt_StartCckContTx(dev, true);
+           r8192_XmitOnePacket(dev);
+       } else {
+           printk("####RTL819X MP####start  ofdm continious TX, rate:%d\n", ieee->rate);
+           mpt_StartOfdmContTx(dev);
+           r8192_XmitOnePacket(dev);
+       } 
+    } else if(start_flag == 2) {
+       bool    bCckContTx = priv->bCckContTx;
+       bool    bOfdmContTx = priv->bOfdmContTx;
+
+       if(bCckContTx && !bOfdmContTx) {
+           printk("####RTL819X MP####stop cck continious TX\n");
+           mpt_StopCckCoNtTx(dev);
+       } else if (!bCckContTx && bOfdmContTx) {
+           printk("####RTL819X MP####stop ofdm continious TX\n");
+           mpt_StopOfdmContTx(dev);
+       } else if(!bCckContTx && !bOfdmContTx) { 
+           ;
+       } else { 
+           printk("####RTL819X MP#### Unexpected case! bCckContTx: %d , bOfdmContTx: %d\n",
+                   bCckContTx, bOfdmContTx);
+}
+    } else {
+       ret = -1;
+       up(&priv->wx_sem);
+       return ret;
+    }
+
+
+    ret = 0;
+    up(&priv->wx_sem);
+
+    return ret;
+
+}
+
+int r8192_wx_mp_set_singlecarrier(struct net_device *dev,
+                               struct iw_request_info *info,
+                               union iwreq_data *wrqu, char *extra)
+{
+        struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device *ieee = priv->rtllib;
+        int ret = -1;
+       u8 start_flag = 0;
+
+       if((ieee->rate > 108) || (ieee->rate < 12))
+               printk("####RTL819X MP#### we did not do singlecarrier when rate not in [6M-54M] tmp, see StartTesting_SingleCarrierTx to get more\n");
+
+        down(&priv->wx_sem);
+       
+       start_flag = *extra;
+
+       if(start_flag == 1){ 
+               if (priv->bCckContTx || priv->bOfdmContTx || priv->bSingleCarrier){
+                       printk("####RTL819X MP#### single carrier continious Tx is undergoing, please close it first\n");
+                       ret = -EBUSY;
+        up(&priv->wx_sem);
+                       return ret;
+               }       
+
+               printk("####RTL819X MP####start single carrier cck continious TX\n");
+               mpt_StartOfdmContTx(dev);
+               r8192_XmitOnePacket(dev);
+               
+       } else if(start_flag == 2) {
+                if (priv->bCckContTx) {
+                       printk("####RTL819X MP####stop single cck continious TX\n");
+                       mpt_StopCckCoNtTx(dev);
+               } 
+                if (priv->bOfdmContTx) {
+                       printk("####RTL819X MP####stop single ofdm continious TX\n");
+                       mpt_StopOfdmContTx(dev);
+               } 
+                if (priv->bSingleCarrier) {
+                       printk("####RTL819X MP####stop single carrier mode\n");
+                       MPT_ProSetSingleCarrier(dev, false);
+               }
+       } else {
+               ret = -1;
+               up(&priv->wx_sem);
+
+               return ret;
+       }
+
+       ret = 0;
+        up(&priv->wx_sem);
+               
+        return ret;
+
+}
+int r8192_wx_mp_write_rf(struct net_device *dev,
+                               struct iw_request_info *info,
+                               union iwreq_data *wrqu, char *extra)
+{
+        struct r8192_priv *priv = rtllib_priv(dev);
+       u32     ulIoType, INulRegOffset, INulRegValue;
+       u32 *info_buf = (u32*)(&wrqu->freq.m);
+        u32 ulRegOffset = info_buf[0];
+       u32 ulRegValue = info_buf[1];
+       u32 RF_PATH = info_buf[2];
+
+        down(&priv->wx_sem);
+       printk("####RTL819X MP####%s :ulRegOffset %x, ulRegValue %x, RF_PATH:%x\n", 
+               __func__, ulRegOffset, ulRegValue, RF_PATH);
+
+       ulIoType = MPT_WRITE_RF;
+       INulRegOffset = ulRegOffset & bRFRegOffsetMask;
+       INulRegValue = ulRegValue & bRFRegOffsetMask;
+
+
+       priv->MptIoOffset = INulRegOffset;
+       priv->MptIoValue = INulRegValue;
+       priv->MptRfPath = RF_PATH;
+       priv->MptActType = ulIoType;
+
+       mpt_Pro819xIoCallback(dev);
+
+        up(&priv->wx_sem);
+        return 0;
+
+}
+
+int r8192_wx_mp_write_mac(struct net_device *dev,
+                               struct iw_request_info *info,
+                               union iwreq_data *wrqu, char *extra)
+{
+        struct r8192_priv *priv = rtllib_priv(dev);
+       u32 *info_buf = (u32*)(&wrqu->freq.m);
+        u32 ulRegOffset = info_buf[0];
+       u32 ulRegValue = info_buf[1];
+       u32 ulRegDataWidth = info_buf[2];
+       u32 ulIoType = 0;
+
+        down(&priv->wx_sem);
+
+       printk("####RTL819X MP####%s :ulRegOffset %x, ulRegValue %x, ulRegDataWidth:%x\n", 
+               __func__, ulRegOffset, ulRegValue, ulRegDataWidth);
+               
+       switch(ulRegDataWidth)
+       {
+       case 1:
+               ulIoType = MPT_WRITE_MAC_1BYTE;
+               break;
+
+       case 2:
+               ulIoType = MPT_WRITE_MAC_2BYTE;
+               break;
+       case 4:
+               ulIoType = MPT_WRITE_MAC_4BYTE;
+               break;
+       default:
+               printk("####RTL819X MP####%s :error ulRegDataWidth:%x\n", __func__, ulRegDataWidth);
+               break;
+                }
+
+       if(ulIoType != 0){
+               priv->MptIoOffset = ulRegOffset;
+               priv->MptIoValue = ulRegValue;
+               priv->MptActType = ulIoType;
+               mpt_Pro819xIoCallback(dev);
+        }
+
+        up(&priv->wx_sem);
+
+       return 0;
+
+}
+
+/*-----------------------------------------------------------------------------
+ * Function:   mpt_StartCckContTx()
+ *
+ * Overview:   Start CCK Continuous Tx.
+ *
+ * Input:              PADAPTER        pAdapter
+ *                             BOOLEAN         bScrambleOn
+ *
+ * Output:             NONE
+ *
+ * Return:             NONE
+ *
+ * Revised History:
+ *     When            Who             Remark
+ *     05/16/2007      MHC             Create Version 0.  
+ *
+ *---------------------------------------------------------------------------*/
+void mpt_StartCckContTx(struct net_device *dev,bool bScrambleOn)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       u32                     cckrate;
+
+       if(!rtl8192_QueryBBReg(dev, rFPGA0_RFMOD, bCCKEn))
+               rtl8192_setBBreg(dev, rFPGA0_RFMOD, bCCKEn, bEnable);
+
+       rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMContinueTx, bDisable);
+       rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMSingleCarrier, bDisable);
+       rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMSingleTone, bDisable);
+       switch(priv->rtllib->rate)
+       {
+               case 2:
+                       cckrate = 0;
+                       break;
+               case 4:
+                       cckrate = 1;
+                       break;
+               case 11:
+                       cckrate = 2;
+                       break;
+               case 22:
+                       cckrate = 3;
+                       break;
+               default:
+                       cckrate = 0;
+                       break;
+       }
+       rtl8192_setBBreg(dev, rCCK0_System, bCCKTxRate, cckrate);
+
+       rtl8192_setBBreg(dev, rCCK0_System, bCCKBBMode, 0x2);    
+       rtl8192_setBBreg(dev, rCCK0_System, bCCKScramble, 0x1);  
+
+       priv->bCckContTx = true;
+       priv->bOfdmContTx = false;
+       
+}      /* mpt_StartCckContTx */
+
+/*-----------------------------------------------------------------------------
+ * Function:   mpt_StartOfdmContTx()
+ *
+ * Overview:   Start OFDM Continuous Tx.
+ *
+ * Input:              PADAPTER        pAdapter
+ *
+ * Output:             NONE
+ *
+ * Return:             NONE
+ *
+ * Revised History:
+ *     When            Who             Remark
+ *     05/16/2007      MHC             Create Version 0.  
+ *
+ *---------------------------------------------------------------------------*/
+void mpt_StartOfdmContTx(struct net_device *dev)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+
+       if(!rtl8192_QueryBBReg(dev, rFPGA0_RFMOD, bOFDMEn))
+               rtl8192_setBBreg(dev, rFPGA0_RFMOD, bOFDMEn, bEnable);
+
+       rtl8192_setBBreg(dev, rCCK0_System, bCCKBBMode, bDisable);
+
+       rtl8192_setBBreg(dev, rCCK0_System, bCCKScramble, bEnable);
+
+       rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMContinueTx, bEnable);
+       rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMSingleCarrier, bDisable);
+       rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMSingleTone, bDisable);
+
+       priv->bCckContTx = false;
+       priv->bOfdmContTx = true;
+
+}      /* mpt_StartOfdmContTx */
+
+/*-----------------------------------------------------------------------------
+ * Function:   mpt_StopCckCoNtTx()
+ *
+ * Overview:   Stop CCK Continuous Tx.
+ *
+ * Input:              PADAPTER        pAdapter
+ *
+ * Output:             NONE
+ *
+ * Return:             NONE
+ *
+ * Revised History:
+ *     When            Who             Remark
+ *     05/16/2007      MHC             Create Version 0.  
+ *
+ *---------------------------------------------------------------------------*/
+void mpt_StopCckCoNtTx(struct net_device *dev)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+
+       priv->bCckContTx = false;
+       priv->bOfdmContTx = false;
+
+       rtl8192_setBBreg(dev, rCCK0_System, bCCKBBMode, 0x0);    
+       rtl8192_setBBreg(dev, rCCK0_System, bCCKScramble, 0x1);  
+
+       rtl8192_setBBreg(dev, rPMAC_Reset, bBBResetB, 0x0);
+       rtl8192_setBBreg(dev, rPMAC_Reset, bBBResetB, 0x1);
+       
+}      /* mpt_StopCckCoNtTx */
+
+/*-----------------------------------------------------------------------------
+ * Function:   mpt_StopOfdmContTx()
+ *
+ * Overview:   Stop 818xB OFDM Continuous Tx.
+ *
+ * Input:              PADAPTER        pAdapter
+ *
+ * Output:             NONE
+ *
+ * Return:             NONE
+ *
+ * Revised History:
+ *     When            Who             Remark
+ *     05/16/2007      MHC             Create Version 0.  
+ *
+ *---------------------------------------------------------------------------*/
+void mpt_StopOfdmContTx(struct net_device *dev)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+
+       priv->bCckContTx = false;
+       priv->bOfdmContTx = false;
+
+       rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMContinueTx, bDisable);
+       rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMSingleCarrier, bDisable);
+       rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMSingleTone, bDisable);
+       mdelay(10);
+       rtl8192_setBBreg(dev, rPMAC_Reset, bBBResetB, 0x0);
+       rtl8192_setBBreg(dev, rPMAC_Reset, bBBResetB, 0x1);
+
+}      /* mpt_StopOfdmContTx */
+
+/*-----------------------------------------------------------------------------
+ * Function:   mpt_SwitchRfSetting92S
+ *
+ * Overview:   Change RF Setting when we siwthc channel/rate/BW for 92S series 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.
+ *
+ *---------------------------------------------------------------------------*/
+ void mpt_SwitchRfSetting92S(struct net_device *dev)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       u8      ChannelToSw = priv->MptChannelToSw;
+       u32     ulRateIdx = priv->MptRateIndex;
+       u32     ulbandwidth = priv->MptBandWidth;
+
+       if (ulbandwidth == BAND_20MHZ_MODE)
+       {
+               if (ChannelToSw == 1)
+               {
+                       rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)0, RF_IPA, 0xFFFFF, 0x0A8F4);
+               }
+               else if (ChannelToSw == 11)
+               {
+                       rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)0, RF_IPA, 0xFFFFF, 0x0F8F5);
+               }
+               else    
+               {
+                       rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)0, RF_IPA, 0xFFFFF, 0x0F8F4);
+               }
+       }
+       else    
+       {
+               if (ChannelToSw == 3)
+               {
+                       rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)0, RF_IPA, 0xFFFFF, 0x0A8F4);
+               }
+               else if (ChannelToSw == 9 || ChannelToSw == 10 || ChannelToSw == 11)
+               {
+                       rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)0, RF_IPA, 0xFFFFF, 0x0F8F5);
+               }
+               else    
+               {
+                       rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)0, RF_IPA, 0xFFFFF, 0x0F8F4);
+               }
+       }
+
+
+       if (ulRateIdx < MPT_RATE_6M)    
+               rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)0, RF_SYN_G2, 0xFFFFF, 0x04440);
+       else            
+               rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)0, RF_SYN_G2, 0xFFFFF, 0x0F200);
+}      
+
+/*-----------------------------------------------------------------------------
+ * Function:   mpt_ProSetTxPower()
+ *
+ * Overview:   Change Tx Power of current channel for 
+ *                             OID_RT_PRO_SET_TX_POWER_CONTROL.
+ *
+ * Input:              NONE
+ *
+ * Output:             NONE
+ *
+ * Return:             NONE
+ *
+ * Revised History:
+ *     When            Who             Remark
+ *     05/16/2007      MHC             Create Version 0.  
+ *
+ *---------------------------------------------------------------------------*/
+bool mpt_ProSetTxPower(        struct net_device *dev, u32 ulTxPower)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       u8              CurrChannel = priv->rtllib->current_network.channel;
+       bool            bResult = true;
+       
+       CurrChannel = priv->MptChannelToSw;
+       
+       if(CurrChannel > 11 || CurrChannel < 1)
+       {
+               printk("mpt_ProSetTxPower(): CurrentChannel:%d is not valid\n", CurrChannel);           
+               return false;
+       }
+
+       if(ulTxPower > MAX_TX_PWR_INDEX_N_MODE)
+       {
+               printk("mpt_ProSetTxPower(): TxPWR:%d is invalid\n", ulTxPower);                
+               return false;
+       }
+
+       if( priv->MptRateIndex >= MPT_RATE_1M &&
+               priv->MptRateIndex <= MPT_RATE_11M )
+       {
+               priv->TxPowerLevelCCK[CurrChannel-1] = (u8)ulTxPower;
+               
+               priv->RfTxPwrLevelCck[0][CurrChannel-1] = (u8)ulTxPower;
+       }
+       else if(priv->MptRateIndex >= MPT_RATE_6M &&
+                       priv->MptRateIndex <= MPT_RATE_MCS15 )
+       {
+               priv->TxPowerLevelOFDM24G[CurrChannel-1] = (u8)ulTxPower;
+
+               priv->RfTxPwrLevelOfdm1T[0][CurrChannel-1] = (u8)ulTxPower;
+               priv->RfTxPwrLevelOfdm2T[0][CurrChannel-1] = (u8)ulTxPower;
+       }
+
+        rtl8192_phy_setTxPower(dev,CurrChannel);
+
+       return bResult;
+
+}      /* mpt_ProSetTxPower */
+
+/*-----------------------------------------------------------------------------
+ * Function:   mpt_ProSetTxAGCOffset()
+ *
+ * Overview:   Change Tx AGC Offset 
+ *                             OID_RT_PRO_SET_TX_AGC_OFFSET.
+ *
+ * Input:                      NONE
+ *
+ * Output:             NONE
+ *
+ * Return:             NONE
+ *
+ * Revised History:
+ *     When            Who             Remark
+ *     08/09/2007      Cosa    Create Version 0.  
+ *
+ *---------------------------------------------------------------------------*/
+bool mpt_ProSetTxAGCOffset(struct net_device *dev,     u32     ulTxAGCOffset)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       bool    bResult = true;
+       u32     TxAGCOffset_B, TxAGCOffset_C, TxAGCOffset_D;
+
+       TxAGCOffset_B = (ulTxAGCOffset&0x000000ff);
+       TxAGCOffset_C = ((ulTxAGCOffset&0x0000ff00)>>8);
+       TxAGCOffset_D = ((ulTxAGCOffset&0x00ff0000)>>16);
+
+       if( TxAGCOffset_B > TxAGC_Offset_neg1 ||
+               TxAGCOffset_C > TxAGC_Offset_neg1 ||
+               TxAGCOffset_D > TxAGC_Offset_neg1 )
+       {
+               printk("mpt_ProSetTxAGCOffset(): TxAGCOffset:%d is invalid\n", ulTxAGCOffset);
+               return false;
+       }
+
+       priv->AntennaTxPwDiff[0] = TxAGCOffset_B;
+       priv->AntennaTxPwDiff[1] = TxAGCOffset_C;
+       priv->AntennaTxPwDiff[2] = TxAGCOffset_D;
+       
+       MPT_ProSetTxAGCOffset(dev);
+
+       return bResult;
+
+}      /* mpt_ProSetTxPower */
+
+/*-----------------------------------------------------------------------------
+ * Function:   mpt_ProSetTxAGCOffset()
+ *
+ * Overview:   Change Tx AGC Offset 
+ *                             OID_RT_PRO_SET_TX_AGC_OFFSET.
+ *
+ * Input:                      NONE
+ *
+ * Output:             NONE
+ *
+ * Return:             NONE
+ *
+ * Revised History:
+ *     When            Who             Remark
+ *     08/09/2007      Cosa    Create Version 0.  
+ *
+ *---------------------------------------------------------------------------*/
+bool mpt_ProSetRxFilter(struct net_device *dev, u32    RCRMode)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+
+       if(RCRMode == 1)
+       { 
+               priv->MptRCR &= ~(RCR_AAP|RCR_AM|RCR_AB);
+               priv->MptRCR |= RCR_APM;
+               write_nic_dword(dev, RCR, priv->MptRCR);
+       }
+       else
+       { 
+               priv->MptRCR |= (RCR_AAP|RCR_APM|RCR_AM|RCR_AB);
+               write_nic_dword(dev, RCR, priv->MptRCR);
+       }
+
+       return 1;
+}      /* mpt_ProSetTxPower */
+
+/*-----------------------------------------------------------------------------
+ * Function:   mpt_ProSetModulation()
+ *
+ * Overview:   Switch wireless mode for OID_RT_PRO_SET_MODULATION.
+ *
+ * Input:              PADAPTER        pAdapter
+ *                             ULONG           ulWirelessMode
+ *
+ * Output:             NONE
+ *
+ * Return:             NONE
+ *
+ * Revised History:
+ *     When            Who             Remark
+ *     05/16/2007      MHC             Create Version 0.  
+ *
+ *---------------------------------------------------------------------------*/
+bool mpt_ProSetModulation(struct net_device *dev, u32 ulWirelessMode)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       WIRELESS_MODE   WirelessMode;
+       bool                            bResult = false;
+
+       switch(ulWirelessMode)
+       {
+       case WIRELESS_MODE_A: 
+               WirelessMode = WIRELESS_MODE_A;
+               break;
+
+       case WIRELESS_MODE_B: 
+               WirelessMode = WIRELESS_MODE_B;
+               break;
+
+       case WIRELESS_MODE_G: 
+       case WIRELESS_MODE_G |WIRELESS_MODE_B: 
+               WirelessMode = WIRELESS_MODE_G;
+               break;
+
+       case WIRELESS_MODE_N_24G:
+               WirelessMode = WIRELESS_MODE_N_24G;
+               break;
+
+       case WIRELESS_MODE_N_5G:
+               WirelessMode = WIRELESS_MODE_N_5G;
+               break;
+
+       case WIRELESS_MODE_AUTO: 
+       default:
+               bResult = false;
+               return bResult;
+               break;
+       }
+
+       priv->rtllib->mode = WirelessMode;
+       priv->RegWirelessMode = WirelessMode;
+       rtl8192_SetWirelessMode(dev, priv->rtllib->mode);
+       HTUseDefaultSetting(priv->rtllib);
+       
+
+       if (IS_HARDWARE_TYPE_8192SE(dev))
+       {               
+               mpt_SwitchRfSetting92S(dev);
+       }
+       
+       bResult = true;
+       
+       return bResult;
+
+}
+
+/*-----------------------------------------------------------------------------
+ * Function:   mpt_Pro819xIoCallback()
+ *
+ * Overview:   Callback function of a workitem for IO. 
+ *
+ * Input:              NONE
+ *
+ * Output:             NONE
+ *
+ * Return:             NONE
+ *
+ * Revised History:
+ *     When            Who             Remark
+ *     05/16/2007      MHC             Create Version 0.  
+ *
+ *---------------------------------------------------------------------------*/
+void mpt_Pro819xIoCallback(struct net_device *dev)
+{
+
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       u32 MptActType = priv->MptActType;
+
+       printk("####RTL819X MP####%s :ulRegOffset %x, ulRegValue %x, MptActType:%x, MptRfPath:%x\n", 
+               __func__, priv->MptIoOffset, priv->MptIoValue, MptActType, priv->MptRfPath);
+
+       switch(MptActType)
+       {
+       case MPT_WRITE_MAC_1BYTE:
+               write_nic_byte(dev, priv->MptIoOffset, (u8)(priv->MptIoValue));
+               break;
+
+       case MPT_WRITE_MAC_2BYTE:
+               write_nic_word(dev, priv->MptIoOffset, (u16)(priv->MptIoValue));
+               break;
+
+       case MPT_WRITE_MAC_4BYTE:
+               write_nic_dword(dev, priv->MptIoOffset, (u32)(priv->MptIoValue));
+               break;
+
+       case MPT_WRITE_RF:
+               rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)priv->MptRfPath, 
+                       priv->MptIoOffset, bRFRegOffsetMask, priv->MptIoValue);
+               break;
+
+       default:
+               break;
+       }
+}
+
+void MPT_ProSetSingleCarrier(struct net_device *dev, bool ulMode)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+
+       if(ulMode == 1) { 
+               priv->bSingleCarrier = true;
+       } else { 
+               priv->bSingleCarrier = false;
+       }
+       
+       if(priv->bSingleCarrier)
+       {
+               if(!rtl8192_QueryBBReg(dev, rFPGA0_RFMOD, bOFDMEn))
+                       rtl8192_setBBreg(dev, rFPGA0_RFMOD, bOFDMEn, bEnable);
+
+               rtl8192_setBBreg(dev, rCCK0_System, bCCKBBMode, bDisable);
+
+               rtl8192_setBBreg(dev, rCCK0_System, bCCKScramble, bEnable);
+
+               rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMContinueTx, bDisable);
+               rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMSingleCarrier, bEnable);
+               rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMSingleTone, bDisable);
+       }
+       else
+       { 
+           rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMContinueTx, bDisable);
+           rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMSingleCarrier, bDisable);
+           rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMSingleTone, bDisable);
+           mdelay(10);
+           rtl8192_setBBreg(dev, rPMAC_Reset, bBBResetB, 0x0);
+           rtl8192_setBBreg(dev, rPMAC_Reset, bBBResetB, 0x1);
+       }
+}
+
+/*-----------------------------------------------------------------------------
+ * Function:   MPT_ProSetBandWidth819x()
+ *
+ * Overview:   None
+ *
+ * Input:              PADAPTER                        pAdapter
+ *
+ * Output:             NONE
+ *
+ * Return:             NONE
+ *
+ * Revised History:
+ *     When            Who             Remark
+ *     01/03/2007      Cosa    Create Version 0.  
+ *
+ *---------------------------------------------------------------------------*/
+void MPT_ProSetBandWidth819x(struct net_device *dev)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       PRT_HIGH_THROUGHPUT     pHTInfo = priv->rtllib->pHTInfo;
+       u32     ulbandwidth = priv->MptBandWidth;
+
+       printk("##################MPT_ProSetBandWidth819x() is start. \n");
+       /* 2007/06/07 MH Call normal driver API and set 40MHZ mode. */                  
+       if (ulbandwidth == BAND_20MHZ_MODE) {
+               /* 20 MHZ sub-carrier mode --> dont care. */
+               pHTInfo->bCurBW40MHz = false;
+               pHTInfo->CurSTAExtChnlOffset = HT_EXTCHNL_OFFSET_NO_EXT;
+               priv->rtllib->SetBWModeHandler(dev, HT_CHANNEL_WIDTH_20, pHTInfo->CurSTAExtChnlOffset);
+       } else if (ulbandwidth == BAND_40MHZ_DUPLICATE_MODE) {
+               /* Sub-Carrier mode is defined in MAC data sheet chapter 12.3. */       
+               /* 40MHX sub-carrier mode --> duplicate. */
+               pHTInfo->bCurBW40MHz = true;                            
+               pHTInfo->bCurTxBW40MHz = true;                                                          
+               pHTInfo->CurSTAExtChnlOffset = HT_EXTCHNL_OFFSET_NO_DEF;                        
+               
+               priv->rtllib->SetBWModeHandler(dev, HT_CHANNEL_WIDTH_20_40, pHTInfo->CurSTAExtChnlOffset);
+       } else if (ulbandwidth == BAND_40MHZ_LOWER_MODE) {
+               /* 40MHX sub-carrier mode --> lower mode  */
+               pHTInfo->bCurBW40MHz = true;                            
+               pHTInfo->bCurTxBW40MHz = true;                                                          
+               pHTInfo->CurSTAExtChnlOffset = HT_EXTCHNL_OFFSET_LOWER;
+               
+               /* Extention channel is lower. Current channel must > 3. */
+               /*if (pMgntInfo->dot11CurrentChannelNumber < 3)                         
+                       DbgPrint("Illegal Current_Chl=%d\r\n", pMgntInfo->dot11CurrentChannelNumber);
+               else
+                       pAdapter->HalFunc.SwChnlByTimerHandler(pAdapter, pMgntInfo->dot11CurrentChannelNumber-2);*/
+               
+               priv->rtllib->SetBWModeHandler(dev, HT_CHANNEL_WIDTH_20_40, pHTInfo->CurSTAExtChnlOffset);
+       } else if (ulbandwidth == BAND_40MHZ_UPPER_MODE)        {
+               /* 40MHX sub-carrier mode --> upper mode  */
+               pHTInfo->bCurBW40MHz = true;                            
+               pHTInfo->bCurTxBW40MHz = true;
+               pHTInfo->CurSTAExtChnlOffset = HT_EXTCHNL_OFFSET_UPPER;
+               
+               /* Extention channel is upper. Current channel must < 12. */
+               /*if (pMgntInfo->dot11CurrentChannelNumber > 12)
+                       DbgPrint("Illegal Current_Chl=%d", pMgntInfo->dot11CurrentChannelNumber);
+               else
+                       pAdapter->HalFunc.SwChnlByTimerHandler(pAdapter, pMgntInfo->dot11CurrentChannelNumber+2);*/
+               
+               priv->rtllib->SetBWModeHandler(dev, HT_CHANNEL_WIDTH_20_40, pHTInfo->CurSTAExtChnlOffset);
+       } else if (ulbandwidth == BAND_40MHZ_DONTCARE_MODE) {
+               /* 40MHX sub-carrier mode --> dont care mode  */
+               pHTInfo->bCurBW40MHz = true;
+               pHTInfo->bCurTxBW40MHz = true;
+               pHTInfo->CurSTAExtChnlOffset = HT_EXTCHNL_OFFSET_LOWER;
+               
+               priv->rtllib->SetBWModeHandler(dev, HT_CHANNEL_WIDTH_20_40, pHTInfo->CurSTAExtChnlOffset);
+       } else {
+               printk("##################MPT_ProSetBandWidth819x() error BW. \n");
+               return;
+       }
+
+{
+               mpt_SwitchRfSetting92S(dev);
+               return;
+       }
+       
+       printk("##################MPT_ProSetBandWidth819x() is finished. \n");
+}
+
+/*-----------------------------------------------------------------------------
+ * Function:   MPT_ProSwChannel()
+ *
+ * Overview:   Callback function of a work item to switch channel for 
+ *                             OID_RT_PRO_SET_CHANNEL_DIRECT_CALL
+ *
+ * Input:              PVOID   Context
+ *
+ * Output:             NONE
+ *
+ * Return:             NONE
+ *
+ * Revised History:
+ *     When            Who             Remark
+ *     05/16/2007      MHC             Create Version 0.  
+ *     06/07/2007      MHC             Normal driver change switch channel handler. 
+ *     09/03/2008      MHC             RF channel register for 92S.
+ *     01/08/2008      MHC             For MP verification for 92S,weneed to change setting according
+ *                                             to SD3 Willis's document.
+ *
+ *---------------------------------------------------------------------------*/
+void MPT_ProSwChannel(struct net_device *dev)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       u8      ChannelToSw = priv->MptChannelToSw;
+       u8      eRFPath;
+
+       priv->rtllib->current_network.channel = ChannelToSw;
+       priv->MptChannelToSw = ChannelToSw;     
+
+       if (IS_HARDWARE_TYPE_8192SE(dev))
+       {
+               for(eRFPath = 0; eRFPath <priv->NumTotalRFPath; eRFPath++)
+               {
+                       rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, rRfChannel, 0x3FF, ChannelToSw);
+               }
+
+               if (IS_HARDWARE_TYPE_8192SE(dev))
+               {
+                       mpt_SwitchRfSetting92S(dev);
+               }
+       }
+
+#ifdef MP_DEVELOP_READY 
+       for(eRFPath = 0; eRFPath <priv->NumTotalRFPath; eRFPath++)
+       {
+               if (IS_HARDWARE_TYPE_8192SE(dev))
+                       rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, rRfChannel, 0x3FF, ChannelToSw);          
+
+               udelay(100);
+       }
+
+       
+       for(eRFPath = 0; eRFPath <priv->NumTotalRFPath; eRFPath++)
+       {
+               if (IS_HARDWARE_TYPE_8192SE(dev))
+                       rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, rRfChannel, 0x3FF, ChannelToSw);          
+
+               udelay(100);
+       }
+#endif
+       
+       /* 2007/06/07 MH Normal driver change sw channel handler. It does not 
+          support SwChnlByDelayHandler ans replace with SwChnlByTimerHandler. */
+       priv->rtllib->set_chan(dev, ChannelToSw);
+
+#if 0 
+       if(pHalData->CurrentChannel == 14 && !pHalData->bCCKinCH14){
+               pHalData->bCCKinCH14 = true;
+               MPT_CCKTxPowerAdjust(pAdapter,pHalData->bCCKinCH14);
+       }
+       else if(pHalData->CurrentChannel != 14 && pHalData->bCCKinCH14){
+               pHalData->bCCKinCH14 = false;
+               MPT_CCKTxPowerAdjust(pAdapter,pHalData->bCCKinCH14);
+       }
+#endif
+}      /* MPT_ProSwChannel */
+
+/*-----------------------------------------------------------------------------
+ * Function:   MPT_ProSetDataRate819x()
+ *
+ * Overview:   None
+ *
+ * Input:              PADAPTER                        pAdapter
+ *
+ * Output:             NONE
+ *
+ * Return:             NONE
+ *
+ * Revised History:
+ *     When            Who             Remark
+ *     01/03/2007      Cosa    Create Version 0.  
+ *
+ *---------------------------------------------------------------------------*/
+void MPT_ProSetDataRate819x(struct net_device *dev)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       u8      DataRate = 0xFF;
+       u32     ulRateIdx = priv->MptRateIndex;
+
+
+       printk("################MPT_ProSetDataRate819x():Rate=%d\n", ulRateIdx);
+       switch(ulRateIdx)
+       {
+               /* CCK rate. */
+               case    MPT_RATE_1M:            DataRate = 2;           break;
+               case    MPT_RATE_2M:            DataRate = 4;           break;
+               case    MPT_RATE_55M:   DataRate = 11;          break;
+               case    MPT_RATE_11M:   DataRate = 22;          break;
+       
+               /* OFDM rate. */
+               case    MPT_RATE_6M:            DataRate = 12;          break;
+               case    MPT_RATE_9M:            DataRate = 18;          break;
+               case    MPT_RATE_12M:   DataRate = 24;          break;
+               case    MPT_RATE_18M:   DataRate = 36;          break;
+               case    MPT_RATE_24M:   DataRate = 48;          break;                  
+               case    MPT_RATE_36M:   DataRate = 72;          break;
+               case    MPT_RATE_48M:   DataRate = 96;          break;
+               case    MPT_RATE_54M:   DataRate = 108; break;
+       
+               /* HT rate. */
+               case    MPT_RATE_MCS0:  DataRate = 0x80;        break;
+               case    MPT_RATE_MCS1:  DataRate = 0x81;        break;
+               case    MPT_RATE_MCS2:  DataRate = 0x82;        break;
+               case    MPT_RATE_MCS3:  DataRate = 0x83;        break;
+               case    MPT_RATE_MCS4:  DataRate = 0x84;        break;
+               case    MPT_RATE_MCS5:  DataRate = 0x85;        break;
+               case    MPT_RATE_MCS6:  DataRate = 0x86;        break;
+               case    MPT_RATE_MCS7:  DataRate = 0x87;        break;
+               case    MPT_RATE_MCS8:  DataRate = 0x88;        break;
+               case    MPT_RATE_MCS9:  DataRate = 0x89;        break;
+               case    MPT_RATE_MCS10: DataRate = 0x8A;        break;
+               case    MPT_RATE_MCS11: DataRate = 0x8B;        break;
+               case    MPT_RATE_MCS12: DataRate = 0x8C;        break;
+               case    MPT_RATE_MCS13: DataRate = 0x8D;        break;
+               case    MPT_RATE_MCS14: DataRate = 0x8E;        break;
+               case    MPT_RATE_MCS15: DataRate = 0x8F;        break;
+               case MPT_RATE_LAST:
+               break;
+
+       default:
+               break;
+       }
+       
+       {
+               mpt_SwitchRfSetting92S(dev);
+       }
+       
+#ifdef MP_DEVELOP_READY        
+       if (IS_HARDWARE_TYPE_8192SE(dev))
+       {
+               for(eRFPath = 0; eRFPath <priv->NumTotalRFPath; eRFPath++)
+               {
+                       if (ulbandwidth == BAND_20MHZ_MODE)
+                               rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, rRfChannel, (BIT11|BIT10), 0x01);         
+                       else
+                               rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, rRfChannel, (BIT11|BIT10), 0x00);         
+
+                       delay_us(100);
+               }
+       }       
+#endif
+
+
+       if(!r8192_MgntIsRateValidForWirelessMode(DataRate,      priv->rtllib->mode) &&  DataRate != 0 ) 
+       {
+               printk("[MPT]: unknow wmode=%d", priv->rtllib->mode);
+       }       
+       if (DataRate != 0xFF)
+       {
+               printk("[MPT]: Force rate=0x%02x", DataRate);
+               priv->rtllib->rate = (int)DataRate;
+       }
+
+}
+
+/*-----------------------------------------------------------------------------
+ * Function:   MPT_ProSetTxAGCOffset()
+ *
+ * Overview:   Set Tx power level for
+ *                             OID_RT_PRO_SET_TX_AGC_OFFSET
+ *
+ * Input:                      PVOID   Context
+ *
+ * Output:             NONE
+ *
+ * Return:             NONE
+ *
+ * Revised History:
+ *     When            Who             Remark
+ *     08/09/2007      Cosa    Create Version 0.
+ *
+ *---------------------------------------------------------------------------*/
+void MPT_ProSetTxAGCOffset(struct net_device *dev)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       u32     u4RegValue, TxAGCOffset_B, TxAGCOffset_C, TxAGCOffset_D;
+
+       TxAGCOffset_B = priv->AntennaTxPwDiff[0];
+       TxAGCOffset_C = priv->AntennaTxPwDiff[1];
+       TxAGCOffset_D = priv->AntennaTxPwDiff[2];
+
+
+       u4RegValue = (TxAGCOffset_D<<8 | TxAGCOffset_C<<4 | TxAGCOffset_B);
+       rtl8192_setBBreg(dev, rFPGA0_TxGainStage, (bXBTxAGC|bXCTxAGC|bXDTxAGC), u4RegValue);
+       printk("##################MPT_ProSetTxAGCOffset() is finished \n");
+}
+
+#endif
+
diff --git a/ubuntu/rtl8192se/rtl8192s/r8192S_mp.h b/ubuntu/rtl8192se/rtl8192s/r8192S_mp.h
new file mode 100644 (file)
index 0000000..29be7e9
--- /dev/null
@@ -0,0 +1,185 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * Based on the r8180 driver, which is:
+ * Copyright 2004-2005 Andrea Merello <andreamrl@tiscali.it>, et al.
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+
+#ifndef __INC_HAL8192S_MP_H
+#define __INC_HAL8192S_MP_H
+
+/*--------------------------Define Parameters-------------------------------*/
+
+#define MPT_NOOP                               0
+#define MPT_READ_MAC_1BYTE                     1
+#define MPT_READ_MAC_2BYTE                     2
+#define MPT_READ_MAC_4BYTE                     3
+#define MPT_WRITE_MAC_1BYTE                    4
+#define MPT_WRITE_MAC_2BYTE                    5
+#define MPT_WRITE_MAC_4BYTE                    6
+#define MPT_READ_BB_CCK                                7
+#define MPT_WRITE_BB_CCK                               8
+#define MPT_READ_BB_OFDM                               9
+#define MPT_WRITE_BB_OFDM                              10
+#define MPT_READ_RF                                    11
+#define MPT_WRITE_RF                                   12
+#define MPT_READ_EEPROM_1BYTE                  13
+#define MPT_WRITE_EEPROM_1BYTE         14
+#define MPT_READ_EEPROM_2BYTE                  15
+#define MPT_WRITE_EEPROM_2BYTE         16
+#define MPT_SET_CSTHRESHOLD                    21
+#define MPT_SET_INITGAIN                               22
+#define MPT_SWITCH_BAND                                23
+#define MPT_SWITCH_CHANNEL                     24
+#define MPT_SET_DATARATE                               25
+#define MPT_SWITCH_ANTENNA                     26
+#define MPT_SET_TX_POWER                               27
+#define MPT_SET_CONT_TX                                28
+#define MPT_SET_SINGLE_CARRIER         29
+#define MPT_SET_CARRIER_SUPPRESSION    30
+
+#define MPT_SET_ANTENNA_GAIN_OFFSET    40
+#define MPT_SET_CRYSTAL_CAP                    41
+#define MPT_TRIGGER_RF_THERMAL_METER   42              
+#define MPT_SET_SINGLE_TONE                    43              
+#define MPT_READ_RF_THERMAL_METER      44              
+#define MPT_SWITCH_BAND_WIDTH          45              
+#define MPT_QUERY_TSSI_VALUE                   46          
+#define MPT_SET_TX_POWER_ADJUST          47
+#define MPT_DO_TX_POWER_TRACK          48
+#define MPT_QUERY_NIC_TYPE                             49
+#define MPT_QUERY_WPS_PUSHED                   50
+#define MPT_SET_LED_CONTROL                    51
+#define MPT_TX_POWER_TRACK_CONTROL     52              
+
+#define MPT_WRITE_EFUSE_1BYTE                  53
+#define MPT_READ_EFUSE_1BYTE                   54
+#define MPT_READ_EFUSE_2BYTE                   55
+#define MPT_READ_EFUSE_4BYTE                   56
+#define MPT_UPDATE_EFUSE                               57
+#define MPT_UPDATE_EFUSE_UTILIZE               58
+#define MPT_UPDATE_AUTOLOAD_STS                59
+
+#define MAX_TX_PWR_INDEX_N_MODE                64
+/*--------------------------Define Parameters-------------------------------*/
+
+/*------------------------------Define structure----------------------------*/ 
+/* MP set force data rate base on the definition. */
+typedef enum _MPT_RATE_INDEX{
+       /* CCK rate. */
+       MPT_RATE_1M = 1, 
+       MPT_RATE_2M,
+       MPT_RATE_55M,
+       MPT_RATE_11M,
+
+       /* OFDM rate. */
+       MPT_RATE_6M,
+       MPT_RATE_9M,
+       MPT_RATE_12M,
+       MPT_RATE_18M,
+       MPT_RATE_24M,
+       MPT_RATE_36M,
+       MPT_RATE_48M,
+       MPT_RATE_54M,
+       
+       /* HT rate. */
+       MPT_RATE_MCS0,
+       MPT_RATE_MCS1,
+       MPT_RATE_MCS2,
+       MPT_RATE_MCS3,
+       MPT_RATE_MCS4,
+       MPT_RATE_MCS5,
+       MPT_RATE_MCS6,
+       MPT_RATE_MCS7,
+       MPT_RATE_MCS8,
+       MPT_RATE_MCS9,
+       MPT_RATE_MCS10,
+       MPT_RATE_MCS11,
+       MPT_RATE_MCS12,
+       MPT_RATE_MCS13,
+       MPT_RATE_MCS14,
+       MPT_RATE_MCS15,
+       MPT_RATE_LAST
+        
+}MPT_RATE_E, *PMPT_RATE_E;
+
+typedef enum _MPT_Bandwidth_Switch_Mode{
+       BAND_20MHZ_MODE = 0,
+       BAND_40MHZ_DUPLICATE_MODE = 1,
+       BAND_40MHZ_LOWER_MODE = 2,
+       BAND_40MHZ_UPPER_MODE = 3,
+       BAND_40MHZ_DONTCARE_MODE = 4
+}MPT_BANDWIDTH_MODE_E, *PMPT_BANDWIDTH_MODE_E;
+
+typedef enum _TxAGC_Offset{
+        TxAGC_Offset_0         = 0x00,
+        TxAGC_Offset_1,
+        TxAGC_Offset_2,
+        TxAGC_Offset_3,
+        TxAGC_Offset_4,
+        TxAGC_Offset_5,
+        TxAGC_Offset_6,
+        TxAGC_Offset_7,
+        TxAGC_Offset_neg8,
+        TxAGC_Offset_neg7,
+        TxAGC_Offset_neg6,
+        TxAGC_Offset_neg5,
+        TxAGC_Offset_neg4,
+        TxAGC_Offset_neg3,
+        TxAGC_Offset_neg2,
+        TxAGC_Offset_neg1
+} TxAGC_Offset;
+/*------------------------------Define structure----------------------------*/ 
+void rtl8192_init_mp(struct net_device* dev);
+int r8192_wx_mp_set_chan(struct net_device *dev, struct iw_request_info *info, 
+               union iwreq_data *wrqu, char *extra);
+int r8192_wx_mp_set_txrate(struct net_device *dev, struct iw_request_info *info, 
+               union iwreq_data *wrqu, char *extra);
+int r8192_wx_mp_set_txpower(struct net_device *dev, struct iw_request_info *info, 
+               union iwreq_data *wrqu, char *extra);
+int r8192_wx_mp_set_bw(struct net_device *dev,struct iw_request_info *info, 
+               union iwreq_data *wrqu, char *extra);
+int r8192_wx_mp_set_txstart(struct net_device *dev, struct iw_request_info *info, 
+               union iwreq_data *wrqu, char *extra);
+int r8192_wx_mp_set_singlecarrier(struct net_device *dev, struct iw_request_info *info, 
+               union iwreq_data *wrqu, char *extra);
+int r8192_wx_mp_write_rf(struct net_device *dev, struct iw_request_info *info, 
+               union iwreq_data *wrqu, char *extra);
+int r8192_wx_mp_write_mac(struct net_device *dev, struct iw_request_info *info, 
+               union iwreq_data *wrqu, char *extra);
+
+void mpt_StartCckContTx(struct net_device *dev,bool bScrambleOn);
+void mpt_StartOfdmContTx(struct net_device *dev);
+void mpt_StopCckCoNtTx(struct net_device *dev);
+void mpt_StopOfdmContTx(struct net_device *dev);
+void mpt_SwitchRfSetting92S(struct net_device *dev);
+bool mpt_ProSetTxPower(        struct net_device *dev, u32 ulTxPower);
+bool mpt_ProSetTxAGCOffset(struct net_device *dev,     u32     ulTxAGCOffset);
+bool mpt_ProSetRxFilter(struct net_device *dev, u32    RCRMode);
+bool mpt_ProSetRxFilter(struct net_device *dev, u32    RCRMode);
+bool mpt_ProSetModulation(struct net_device *dev, u32 ulWirelessMode);
+void mpt_Pro819xIoCallback(struct net_device *dev);
+void MPT_ProSetSingleCarrier(struct net_device *dev, bool ulMode);
+void MPT_ProSetBandWidth819x(struct net_device *dev);
+void MPT_ProSwChannel(struct net_device *dev);
+void MPT_ProSetDataRate819x(struct net_device *dev);
+void MPT_ProSetTxAGCOffset(struct net_device *dev);
+#endif
diff --git a/ubuntu/rtl8192se/rtl8192s/r8192S_phy.c b/ubuntu/rtl8192se/rtl8192s/r8192S_phy.c
new file mode 100644 (file)
index 0000000..fbec7a9
--- /dev/null
@@ -0,0 +1,3527 @@
+/******************************************************************************\r
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ * The full GNU General Public License is included in this distribution in the\r
+ * file called LICENSE.\r
+ *\r
+ * Contact Information:\r
+ * wlanfae <wlanfae@realtek.com>\r
+******************************************************************************/\r
+#ifdef RTL8192SE\r
+\r
+#include "../rtl_core.h"\r
+#include "../rtl_dm.h"\r
+#include "r8192S_phy.h"\r
+#include "r8192S_phyreg.h"\r
+#include "r8192S_rtl6052.h"\r
+#include "r8192S_hwimg.h"\r
+\r
+#ifdef ENABLE_DOT11D\r
+#include "../rtllib/dot11d.h"\r
+#endif\r
+\r
+/*---------------------------Define Local Constant---------------------------*/\r
+#define MAX_PRECMD_CNT 16\r
+#define MAX_RFDEPENDCMD_CNT 16\r
+#define MAX_POSTCMD_CNT 16\r
+\r
+#define MAX_DOZE_WAITING_TIMES_9x 64\r
+\r
+#define        PHY_STOP_SWITCH_CLKREQ                  0\r
+/*---------------------------Define Local Constant---------------------------*/\r
+\r
+/*------------------------Define global variable-----------------------------*/\r
+\r
+#define Rtl819XMAC_Array                       Rtl8192SEMAC_2T_Array\r
+#define Rtl819XAGCTAB_Array                    Rtl8192SEAGCTAB_Array\r
+#define Rtl819XPHY_REG_Array                   Rtl8192SEPHY_REG_2T2RArray\r
+#define Rtl819XPHY_REG_to1T1R_Array            Rtl8192SEPHY_ChangeTo_1T1RArray\r
+#define Rtl819XPHY_REG_to1T2R_Array            Rtl8192SEPHY_ChangeTo_1T2RArray\r
+#define Rtl819XPHY_REG_to2T2R_Array            Rtl8192SEPHY_ChangeTo_2T2RArray\r
+#define Rtl819XPHY_REG_Array_PG                        Rtl8192SEPHY_REG_Array_PG\r
+#define Rtl819XRadioA_Array                    Rtl8192SERadioA_1T_Array\r
+#define Rtl819XRadioB_Array                    Rtl8192SERadioB_Array\r
+#define Rtl819XRadioB_GM_Array                                 Rtl8192SERadioB_GM_Array\r
+#define Rtl819XRadioA_to1T_Array               Rtl8192SERadioA_to1T_Array\r
+#define Rtl819XRadioA_to2T_Array               Rtl8192SERadioA_to2T_Array\r
+\r
+/*------------------------Define local variable------------------------------*/\r
+#if 0\r
+static u32     RF_CHANNEL_TABLE_ZEBRA[]={\r
+               0,\r
+               0x085c,
+               0x08dc,
+               0x095c,
+               0x09dc,
+               0x0a5c,
+               0x0adc,
+               0x0b5c,
+               0x0bdc,
+               0x0c5c,
+               0x0cdc,
+               0x0d5c,
+               0x0ddc,
+               0x0e5c,
+               0x0f72,
+};\r
+#endif\r
+\r
+/*------------------------Define local variable------------------------------*/\r
+\r
+\r
+/*--------------------Define export function prototype-----------------------*/\r
+/*--------------------Define export function prototype-----------------------*/\r
+\r
+\r
+/*---------------------Define local function prototype-----------------------*/\r
+\r
+static  u32 phy_FwRFSerialRead( struct net_device* dev, RF90_RADIO_PATH_E eRFPath, u32 Offset); \r
+static void phy_FwRFSerialWrite( struct net_device* dev, RF90_RADIO_PATH_E eRFPath, u32 Offset, u32 Data);\r
+\r
+static u32 phy_RFSerialRead(struct net_device* dev,RF90_RADIO_PATH_E eRFPath,u32 Offset);\r
+static void phy_RFSerialWrite( struct net_device* dev, RF90_RADIO_PATH_E eRFPath, u32 Offset, u32 Data);\r
+static u32 phy_CalculateBitShift(u32 BitMask);\r
+static bool    phy_BB8190_Config_HardCode(struct net_device* dev);\r
+static bool    phy_BB8192S_Config_ParaFile(struct net_device* dev);\r
+       \r
+static bool phy_ConfigMACWithHeaderFile(struct net_device* dev);\r
+       \r
+static bool phy_ConfigBBWithHeaderFile(struct net_device* dev,u8 ConfigType);\r
+\r
+static bool phy_ConfigBBWithPgHeaderFile(struct net_device* dev,u8 ConfigType);\r
+\r
+static bool phy_SetBBtoDiffRFWithHeaderFile(struct net_device* dev,u8 ConfigType);\r
+\r
+static void phy_InitBBRFRegisterDefinition(struct net_device* dev);\r
+static bool phy_SetSwChnlCmdArray(     SwChnlCmd*              CmdTable,\r
+               u32                     CmdTableIdx,\r
+               u32                     CmdTableSz,\r
+               SwChnlCmdID             CmdID,\r
+               u32                     Para1,\r
+               u32                     Para2,\r
+               u32                     msDelay );\r
+\r
+static bool phy_SwChnlStepByStep(\r
+       struct net_device* dev,\r
+       u8              channel,\r
+       u8              *stage,\r
+       u8              *step,\r
+       u32             *delay\r
+       );\r
+\r
+static void phy_FinishSwChnlNow(struct net_device* dev,u8 channel);\r
+\r
+static u8 phy_DbmToTxPwrIdx( struct net_device* dev, WIRELESS_MODE WirelessMode, long PowerInDbm);\r
+static bool phy_SetRFPowerState8192SE(struct net_device* dev,RT_RF_POWER_STATE eRFPowerState);\r
+static void phy_CheckEphySwitchReady( struct net_device* dev);\r
+\r
+static long phy_TxPwrIdxToDbm( struct net_device* dev, WIRELESS_MODE   WirelessMode, u8 TxPwrIdx);\r
+void rtl8192_SetFwCmdIOCallback(struct net_device* dev);\r
+\r
+                                               \r
+/*---------------------Define local function prototype-----------------------*/\r
+\r
+\r
+/*----------------------------Function Body----------------------------------*/\r
+u32 rtl8192_QueryBBReg(struct net_device* dev, u32 RegAddr, u32 BitMask)\r
+{\r
+\r
+       u32     ReturnValue = 0, OriginalValue, BitShift;\r
+\r
+#if (DISABLE_BB_RF == 1)\r
+       return 0;\r
+#endif\r
+\r
+       RT_TRACE(COMP_RF, "--->PHY_QueryBBReg(): RegAddr(%#x), BitMask(%#x)\n", RegAddr, BitMask);\r
+\r
+       OriginalValue = read_nic_dword(dev, RegAddr);\r
+\r
+       BitShift = phy_CalculateBitShift(BitMask);\r
+       ReturnValue = (OriginalValue & BitMask) >> BitShift;\r
+\r
+       RT_TRACE(COMP_RF, "<---PHY_QueryBBReg(): RegAddr(%#x), BitMask(%#x), OriginalValue(%#x)\n", RegAddr, BitMask, OriginalValue);\r
+       return (ReturnValue);\r
+}\r
+\r
+void rtl8192_setBBreg(struct net_device* dev, u32 RegAddr, u32 BitMask, u32 Data)\r
+{\r
+       u32     OriginalValue, BitShift, NewValue;\r
+\r
+#if (DISABLE_BB_RF == 1)\r
+       return;\r
+#endif\r
+\r
+\r
+       {\r
+               if(BitMask!= bMaskDWord)\r
+               {
+                       OriginalValue = read_nic_dword(dev, RegAddr);\r
+                       BitShift = phy_CalculateBitShift(BitMask);\r
+                       NewValue = (((OriginalValue) & (~BitMask)) | (Data << BitShift));\r
+                       write_nic_dword(dev, RegAddr, NewValue);        \r
+               }else\r
+                       write_nic_dword(dev, RegAddr, Data);    \r
+       }\r
+\r
+       return;\r
+}\r
+\r
+\r
+u32 rtl8192_phy_QueryRFReg(struct net_device* dev, RF90_RADIO_PATH_E eRFPath, u32 RegAddr, u32 BitMask)\r
+{\r
+       u32 Original_Value, Readback_Value, BitShift;
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+        unsigned long flags;\r
+       \r
+#if (DISABLE_BB_RF == 1) \r
+       return 0;\r
+#endif\r
+       \r
+       RT_TRACE(COMP_RF, "--->PHY_QueryRFReg(): RegAddr(%#x), eRFPath(%#x), BitMask(%#x)\n", RegAddr, eRFPath,BitMask);\r
+       \r
+       if (!((priv->rf_pathmap >> eRFPath) & 0x1))\r
+               return 0;\r
+       \r
+       if (!rtl8192_phy_CheckIsLegalRFPath(dev, eRFPath))\r
+               return  0;\r
+       \r
+       spin_lock_irqsave(&priv->rf_lock, flags);       \r
+       if (priv->Rf_Mode == RF_OP_By_FW)\r
+       {       \r
+               Original_Value = phy_FwRFSerialRead(dev, eRFPath, RegAddr);\r
+       }\r
+       else\r
+       {       \r
+               Original_Value = phy_RFSerialRead(dev, eRFPath, RegAddr);               \r
+       }\r
+       \r
+       BitShift =  phy_CalculateBitShift(BitMask);\r
+       Readback_Value = (Original_Value & BitMask) >> BitShift;        \r
+       spin_unlock_irqrestore(&priv->rf_lock, flags);\r
+\r
+       \r
+       return (Readback_Value);\r
+}\r
+\r
+\r
+void rtl8192_phy_SetRFReg(struct net_device* dev, RF90_RADIO_PATH_E eRFPath, u32 RegAddr, u32 BitMask, u32 Data)\r
+{\r
+\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       u32 Original_Value, BitShift, New_Value;
+        unsigned long flags;\r
+#if (DISABLE_BB_RF == 1)\r
+       return;\r
+#endif\r
+       \r
+       RT_TRACE(COMP_RF, "--->PHY_SetRFReg(): RegAddr(%#x), BitMask(%#x), Data(%#x), eRFPath(%#x)\n", \r
+               RegAddr, BitMask, Data, eRFPath);\r
+\r
+       if (!((priv->rf_pathmap >> eRFPath) & 0x1))\r
+               return ;\r
+       if (!rtl8192_phy_CheckIsLegalRFPath(dev, eRFPath))\r
+       {\r
+               return;\r
+       }\r
+       \r
+       spin_lock_irqsave(&priv->rf_lock, flags);       \r
+       if (priv->Rf_Mode == RF_OP_By_FW)       \r
+       {               \r
+               if (BitMask != bRFRegOffsetMask) 
+               {\r
+                       Original_Value = phy_FwRFSerialRead(dev, eRFPath, RegAddr);\r
+                       BitShift =  phy_CalculateBitShift(BitMask);\r
+                       New_Value = (((Original_Value) & (~BitMask)) | (Data<< BitShift));\r
+               \r
+                       phy_FwRFSerialWrite(dev, eRFPath, RegAddr, New_Value);\r
+               }\r
+               else\r
+                       phy_FwRFSerialWrite(dev, eRFPath, RegAddr, Data);               \r
+       }\r
+       else\r
+       {               \r
+               if (BitMask != bRFRegOffsetMask) 
+               {\r
+                       Original_Value = phy_RFSerialRead(dev, eRFPath, RegAddr);\r
+                       BitShift =  phy_CalculateBitShift(BitMask);\r
+                       New_Value = (((Original_Value) & (~BitMask)) | (Data<< BitShift));\r
+               \r
+                       phy_RFSerialWrite(dev, eRFPath, RegAddr, New_Value);\r
+               }\r
+               else\r
+                       phy_RFSerialWrite(dev, eRFPath, RegAddr, Data);\r
+       \r
+       }\r
+       spin_unlock_irqrestore(&priv->rf_lock, flags);\r
+       RT_TRACE(COMP_RF, "<---PHY_SetRFReg(): RegAddr(%#x), BitMask(%#x), Data(%#x), eRFPath(%#x)\n", \r
+                       RegAddr, BitMask, Data, eRFPath);\r
+       \r
+}\r
+\r
+static u32\r
+phy_FwRFSerialRead(\r
+       struct net_device* dev,\r
+       RF90_RADIO_PATH_E       eRFPath,\r
+       u32                             Offset  )\r
+{\r
+       u32             retValue = 0;           \r
+#if 0  \r
+       u32             Data = 0;\r
+       u8              time = 0;\r
+       Data |= ((Offset&0xFF)<<12);\r
+       Data |= ((eRFPath&0x3)<<20);\r
+       Data |= 0x80000000;             \r
+       while (PlatformIORead4Byte(dev, QPNR)&0x80000000)\r
+       {\r
+               if (time++ < 100)\r
+               {\r
+                       delay_us(10);\r
+               }\r
+               else\r
+                       break;\r
+       }\r
+       PlatformIOWrite4Byte(dev, QPNR, Data);          \r
+       while (PlatformIORead4Byte(dev, QPNR)&0x80000000)\r
+       {\r
+               if (time++ < 100)\r
+               {\r
+                       delay_us(10);\r
+               }\r
+               else\r
+                       return  (0);\r
+       }\r
+       retValue = PlatformIORead4Byte(dev, RF_DATA);\r
+#endif \r
+       return  (retValue);\r
+\r
+}      /* phy_FwRFSerialRead */\r
+\r
+static void\r
+phy_FwRFSerialWrite(\r
+       struct net_device* dev,\r
+       RF90_RADIO_PATH_E       eRFPath,\r
+       u32                             Offset,\r
+       u32                             Data    )\r
+{\r
+#if 0  \r
+       u8      time = 0;\r
+       DbgPrint("N FW RF CTRL RF-%d OF%02x DATA=%03x\n\r", eRFPath, Offset, Data);\r
+       \r
+       Data |= ((Offset&0xFF)<<12);\r
+       Data |= ((eRFPath&0x3)<<20);\r
+       Data |= 0x400000;\r
+       Data |= 0x80000000;\r
+       \r
+       while (PlatformIORead4Byte(dev, QPNR)&0x80000000)\r
+       {\r
+               if (time++ < 100)\r
+               {\r
+                       delay_us(10);\r
+               }\r
+               else\r
+                       break;\r
+       }\r
+       PlatformIOWrite4Byte(dev, QPNR, Data);\r
+#endif         \r
+}      /* phy_FwRFSerialWrite */\r
+\r
+#if (RTL92SE_FPGA_VERIFY == 1)\r
+static u32 phy_RFSerialRead(struct net_device* dev,RF90_RADIO_PATH_E eRFPath,u32 Offset)\r
+{\r
+\r
+       u32                                             retValue = 0;\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       BB_REGISTER_DEFINITION_T        *pPhyReg = &priv->PHYRegDef[eRFPath];\r
+       u32                                             NewOffset;\r
+\r
+       Offset &= 0x3f;\r
+\r
+       if(     priv->rf_chip == RF_8256 || \r
+               priv->rf_chip == RF_8225 ||     \r
+               priv->rf_chip == RF_6052)\r
+       {\r
+               rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xf00, 0x0);
+\r
+               if(Offset>=31)\r
+               {\r
+                       priv->RFReadPageCnt[2]++;
+                       priv->RfReg0Value[eRFPath] |= 0x140;\r
+\r
+                       rtl8192_setBBreg(dev, \r
+                               pPhyReg->rf3wireOffset, \r
+                               bMaskDWord, \r
+                               (priv->RfReg0Value[eRFPath] << 16)      );\r
+\r
+                       NewOffset = Offset - 30;\r
+                       \r
+               }else if(Offset>=16)\r
+               {\r
+                       priv->RFReadPageCnt[1]++;
+                       priv->RfReg0Value[eRFPath] |= 0x100;\r
+                       priv->RfReg0Value[eRFPath] &= (~0x40);\r
+\r
+                       rtl8192_setBBreg(dev, \r
+                               pPhyReg->rf3wireOffset, \r
+                               bMaskDWord, \r
+                               (priv->RfReg0Value[eRFPath] << 16)      );\r
+\r
+                       NewOffset = Offset - 15;\r
+               }\r
+               else\r
+               {\r
+                       priv->RFReadPageCnt[0]++;
+                       NewOffset = Offset;\r
+       }       \r
+       }       \r
+       else\r
+               NewOffset = Offset;\r
+\r
+#if (RTL92SE_FPGA_VERIFY == 1)\r
+       {\r
+               u32     temp1, temp2;\r
+\r
+               temp1 = rtl8192_QueryBBReg(dev, rFPGA0_XA_HSSIParameter2, 0xffffffff);\r
+               temp2 = rtl8192_QueryBBReg(dev, pPhyReg->rfHSSIPara2, 0xffffffff);\r
+               temp2 = temp2 & (~bLSSIReadAddress) | (NewOffset<<24) | bLSSIReadEdge;\r
+\r
+               rtl8192_setBBreg(dev, rFPGA0_XA_HSSIParameter2, 0xffffffff, temp1&(~bLSSIReadEdge));\r
+               msleep(1);\r
+               rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, 0xffffffff, temp2);\r
+               msleep(1);\r
+               rtl8192_setBBreg(dev, rFPGA0_XA_HSSIParameter2, 0xffffffff, temp1|bLSSIReadEdge);\r
+               msleep(1);\r
+               \r
+       }\r
+#else\r
+       rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, bLSSIReadAddress, NewOffset);\r
+\r
+       rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2,  bLSSIReadEdge, 0x0);       \r
+       rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2,  bLSSIReadEdge, 0x1);       \r
+#endif\r
+       \r
+       mdelay(1);\r
+\r
+       retValue = rtl8192_QueryBBReg(dev, pPhyReg->rfLSSIReadBack, bLSSIReadBackData);\r
+       \r
+       if(     priv->rf_chip == RF_8256 || \r
+               priv->rf_chip == RF_8225 ||\r
+               priv->rf_chip == RF_6052)\r
+       {\r
+               if (Offset >= 0x10)\r
+               {\r
+                       priv->RfReg0Value[eRFPath] &= 0xebf;\r
+               \r
+                       rtl8192_setBBreg(\r
+                               dev, \r
+                               pPhyReg->rf3wireOffset, \r
+                               bMaskDWord, \r
+                               (priv->RfReg0Value[eRFPath] << 16)      );\r
+               }\r
+\r
+               rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xf00, 0xf);
+       }\r
+       \r
+       return retValue;        \r
+}\r
+\r
+\r
+static void\r
+phy_RFSerialWrite(\r
+       struct net_device* dev,\r
+       RF90_RADIO_PATH_E       eRFPath,\r
+       u32                             Offset,\r
+       u32                             Data\r
+       )\r
+{\r
+       u32                                     DataAndAddr = 0;\r
+       struct r8192_priv                       *priv = rtllib_priv(dev);\r
+       BB_REGISTER_DEFINITION_T        *pPhyReg = &priv->PHYRegDef[eRFPath];\r
+       u32                                     NewOffset;\r
+\r
+       Offset &= 0x3f;\r
+\r
+       PHY_RFShadowWrite(dev, eRFPath, Offset, Data);  \r
+\r
+       if(     priv->rf_chip == RF_8256 || \r
+               priv->rf_chip == RF_8225 ||\r
+               priv->rf_chip == RF_6052)\r
+       {\r
+               rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xf00, 0x0);
+                               \r
+               if(Offset>=31)\r
+               {\r
+                       priv->RFWritePageCnt[2]++;
+                       priv->RfReg0Value[eRFPath] |= 0x140;\r
+                       \r
+                       rtl8192_setBBreg(dev, \r
+                               pPhyReg->rf3wireOffset, \r
+                               bMaskDWord, \r
+                               (priv->RfReg0Value[eRFPath] << 16)      );\r
+\r
+                       NewOffset = Offset - 30;\r
+                       \r
+               }else if(Offset>=16)\r
+               {\r
+                       priv->RFWritePageCnt[1]++;
+                       priv->RfReg0Value[eRFPath] |= 0x100;\r
+                       priv->RfReg0Value[eRFPath] &= (~0x40);                  \r
+                                                       \r
+\r
+                       rtl8192_setBBreg(dev, \r
+                               pPhyReg->rf3wireOffset, \r
+                               bMaskDWord, \r
+                               (priv->RfReg0Value[eRFPath] << 16)      );\r
+\r
+                       NewOffset = Offset - 15;\r
+               }\r
+               else\r
+               {\r
+                       priv->RFWritePageCnt[0]++;
+                       NewOffset = Offset;\r
+       }\r
+       }\r
+       else\r
+               NewOffset = Offset;\r
+\r
+       DataAndAddr = (Data<<16) | (NewOffset&0x3f);\r
+\r
+       rtl8192_setBBreg(dev, pPhyReg->rf3wireOffset, bMaskDWord, DataAndAddr);\r
+\r
+\r
+       if(Offset==0x0)\r
+               priv->RfReg0Value[eRFPath] = Data;\r
+\r
+       if(     priv->rf_chip == RF_8256 || \r
+               priv->rf_chip == RF_8225 ||\r
+               priv->rf_chip == RF_6052)\r
+       {\r
+               if (Offset >= 0x10)\r
+               {\r
+                       if(Offset != 0)\r
+                       {\r
+                               priv->RfReg0Value[eRFPath] &= 0xebf;\r
+                               rtl8192_setBBreg(\r
+                               dev, \r
+                               pPhyReg->rf3wireOffset, \r
+                               bMaskDWord, \r
+                               (priv->RfReg0Value[eRFPath] << 16)      );\r
+                       }\r
+               }       \r
+               rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xf00, 0xf);
+       }\r
+       \r
+}\r
+#else\r
+static u32\r
+phy_RFSerialRead(\r
+       struct net_device* dev,\r
+       RF90_RADIO_PATH_E       eRFPath,\r
+       u32                             Offset\r
+       )\r
+{\r
+\r
+       u32                                     retValue = 0;\r
+       struct r8192_priv                       *priv = rtllib_priv(dev);\r
+       BB_REGISTER_DEFINITION_T        *pPhyReg = &priv->PHYRegDef[eRFPath];\r
+       u32                                     NewOffset;\r
+       u32                                     tmplong,tmplong2;\r
+       u8                                      RfPiEnable=0;\r
+#if 0\r
+       if(priv->rf_chip == RF_8225 && Offset > 0x24) 
+               return  retValue;\r
+       if(priv->rf_chip == RF_8256 && Offset > 0x2D) 
+               return  retValue;\r
+#endif\r
+       Offset &= 0x3f;\r
+\r
+       NewOffset = Offset;\r
+\r
+       tmplong = rtl8192_QueryBBReg(dev, rFPGA0_XA_HSSIParameter2, bMaskDWord);\r
+       if(eRFPath == RF90_PATH_A)\r
+               tmplong2 = tmplong;\r
+       else\r
+       tmplong2 = rtl8192_QueryBBReg(dev, pPhyReg->rfHSSIPara2, bMaskDWord);\r
+       tmplong2 = (tmplong2 & (~bLSSIReadAddress)) | (NewOffset<<23) | bLSSIReadEdge;  
+\r
+       rtl8192_setBBreg(dev, rFPGA0_XA_HSSIParameter2, bMaskDWord, tmplong&(~bLSSIReadEdge));\r
+       udelay(1000);\r
+       \r
+       rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, bMaskDWord, tmplong2);\r
+       udelay(1000);\r
+       \r
+       rtl8192_setBBreg(dev, rFPGA0_XA_HSSIParameter2, bMaskDWord, tmplong|bLSSIReadEdge);\r
+\r
+       if(eRFPath == RF90_PATH_A)\r
+               RfPiEnable = (u8)rtl8192_QueryBBReg(dev, rFPGA0_XA_HSSIParameter1, BIT8);\r
+       else if(eRFPath == RF90_PATH_B)\r
+               RfPiEnable = (u8)rtl8192_QueryBBReg(dev, rFPGA0_XB_HSSIParameter1, BIT8);\r
+       \r
+       if(RfPiEnable)\r
+       {       
+               retValue = rtl8192_QueryBBReg(dev, pPhyReg->rfLSSIReadBackPi, bLSSIReadBackData);\r
+       }\r
+       else\r
+       {       
+               retValue = rtl8192_QueryBBReg(dev, pPhyReg->rfLSSIReadBack, bLSSIReadBackData);\r
+       }\r
+       \r
+       retValue = rtl8192_QueryBBReg(dev, pPhyReg->rfLSSIReadBack, bLSSIReadBackData);\r
+       \r
+       return retValue;        \r
+               \r
+}\r
+\r
+static void\r
+phy_RFSerialWrite(\r
+       struct net_device* dev,\r
+       RF90_RADIO_PATH_E       eRFPath,\r
+       u32                             Offset,\r
+       u32                             Data\r
+       )\r
+{\r
+       u32                                     DataAndAddr = 0;\r
+       struct r8192_priv                       *priv = rtllib_priv(dev);\r
+       BB_REGISTER_DEFINITION_T        *pPhyReg = &priv->PHYRegDef[eRFPath];\r
+       u32                                     NewOffset;\r
+       \r
+#if 0\r
+       if(priv->rf_chip == RF_8225 && Offset > 0x24) 
+               return;\r
+       if(priv->rf_chip == RF_8256 && Offset > 0x2D) 
+               return;\r
+#endif\r
+\r
+       Offset &= 0x3f;\r
+\r
+       PHY_RFShadowWrite(dev, eRFPath, Offset, Data);  \r
+\r
+               NewOffset = Offset;\r
+\r
+       DataAndAddr = ((NewOffset<<20) | (Data&0x000fffff)) & 0x0fffffff;       
+\r
+       rtl8192_setBBreg(dev, pPhyReg->rf3wireOffset, bMaskDWord, DataAndAddr);\r
+       \r
+}\r
+\r
+#endif\r
+\r
+static u32 phy_CalculateBitShift(u32 BitMask)\r
+{\r
+       u32 i;\r
+\r
+       for(i=0; i<=31; i++)\r
+       {\r
+               if ( ((BitMask>>i) &  0x1 ) == 1)\r
+                       break;\r
+       }\r
+\r
+       return (i);\r
+}\r
+\r
+\r
+extern bool PHY_MACConfig8192S(struct net_device* dev)\r
+{\r
+       bool rtStatus = true;\r
+\r
+#if RTL8190_Download_Firmware_From_Header\r
+       rtStatus = phy_ConfigMACWithHeaderFile(dev);\r
+#else\r
+       \r
+       RT_TRACE(COMP_INIT, "Read MACREG.txt\n");\r
+#endif\r
+       return (rtStatus == true) ? 1:0;\r
+\r
+}\r
+\r
+extern bool\r
+PHY_BBConfig8192S(struct net_device* dev)\r
+{\r
+       bool rtStatus = true;\r
+       u8 PathMap = 0, index = 0, rf_num = 0;\r
+       struct r8192_priv       *priv = rtllib_priv(dev);\r
+       u8 bRegHwParaFile = 1;\r
+       \r
+       phy_InitBBRFRegisterDefinition(dev);\r
+\r
+       switch(bRegHwParaFile)\r
+       {\r
+               case 0:\r
+                       phy_BB8190_Config_HardCode(dev);\r
+                       break;\r
+\r
+               case 1:\r
+                       rtStatus = phy_BB8192S_Config_ParaFile(dev);\r
+                       break;\r
+\r
+               case 2:\r
+                       phy_BB8190_Config_HardCode(dev);\r
+                       phy_BB8192S_Config_ParaFile(dev);\r
+                       break;\r
+\r
+               default:\r
+                       phy_BB8190_Config_HardCode(dev);\r
+                       break;\r
+       }\r
+\r
+       PathMap = (u8)(rtl8192_QueryBBReg(dev, rFPGA0_TxInfo, 0xf) |\r
+                               rtl8192_QueryBBReg(dev, rOFDM0_TRxPathEnable, 0xf));\r
+       priv->rf_pathmap = PathMap;\r
+       for(index = 0; index<4; index++)\r
+       {\r
+               if((PathMap>>index)&0x1)\r
+                       rf_num++;\r
+       }\r
+\r
+       if((priv->rf_type==RF_1T1R && rf_num!=1) ||\r
+               (priv->rf_type==RF_1T2R && rf_num!=2) ||\r
+               (priv->rf_type==RF_2T2R && rf_num!=2) ||\r
+               (priv->rf_type==RF_2T2R_GREEN && rf_num!=2) ||\r
+               (priv->rf_type==RF_2T4R && rf_num!=4))\r
+       {\r
+               RT_TRACE( COMP_INIT, "PHY_BBConfig8192S: RF_Type(%x) does not match RF_Num(%x)!!\n", priv->rf_type, rf_num);\r
+       }\r
+       return rtStatus;\r
+}\r
+\r
+extern bool\r
+PHY_RFConfig8192S(struct net_device* dev)\r
+{\r
+       struct r8192_priv       *priv = rtllib_priv(dev);\r
+       bool                    rtStatus = true;\r
+\r
+\r
+       if (IS_HARDWARE_TYPE_8192SE(dev))\r
+               priv->rf_chip = RF_6052;\r
+\r
+       switch(priv->rf_chip)\r
+       {\r
+       case RF_8225:\r
+       case RF_6052:\r
+               rtStatus = PHY_RF6052_Config(dev);\r
+               break;\r
+               \r
+       case RF_8256:                   \r
+               break;\r
+               \r
+       case RF_8258:\r
+               break;\r
+               \r
+       case RF_PSEUDO_11N:\r
+               break;\r
+        default:\r
+            break;\r
+       }\r
+\r
+       return rtStatus;\r
+}\r
+\r
+\r
+static bool  \r
+phy_BB8190_Config_HardCode(struct net_device* dev)\r
+{\r
+       return true;\r
+}\r
+\r
+\r
+static bool    \r
+phy_BB8192S_Config_ParaFile(struct net_device* dev)\r
+{\r
+       struct r8192_priv       *priv = rtllib_priv(dev);\r
+       bool rtStatus = true;   \r
+       \r
+       RT_TRACE(COMP_INIT, "==>phy_BB8192S_Config_ParaFile\n");\r
+\r
+#if    RTL8190_Download_Firmware_From_Header\r
+       if (priv->rf_type == RF_1T2R || priv->rf_type == RF_2T2R ||\r
+           priv->rf_type == RF_1T1R ||priv->rf_type == RF_2T2R_GREEN)\r
+       {\r
+               rtStatus = phy_ConfigBBWithHeaderFile(dev,BaseBand_Config_PHY_REG);\r
+               if(priv->rf_type != RF_2T2R && priv->rf_type != RF_2T2R_GREEN)\r
+               {
+                       rtStatus = phy_SetBBtoDiffRFWithHeaderFile(dev,BaseBand_Config_PHY_REG);\r
+               }\r
+       }else\r
+               rtStatus = false;\r
+#else\r
+       RT_TRACE(COMP_INIT, "RF_Type == %d\n", priv->rf_type);          \r
+       if (priv->rf_type == RF_1T2R || priv->rf_type == RF_2T2R ||\r
+           priv->rf_type == RF_1T1R ||priv->rf_type == RF_2T2R_GREEN)\r
+       {\r
+               rtStatus = phy_ConfigBBWithParaFile(dev, (char* )&szBBRegFile);\r
+               if(priv->rf_type != RF_2T2R && priv->rf_type != RF_2T2R_GREEN)\r
+               {
+                       if(priv->rf_type == RF_1T1R)\r
+                               rtStatus = phy_SetBBtoDiffRFWithParaFile(dev, (char* )&szBBRegto1T1RFile);\r
+                       else if(priv->rf_type == RF_1T2R)\r
+                               rtStatus = phy_SetBBtoDiffRFWithParaFile(dev, (char* )&szBBRegto1T2RFile);\r
+               }\r
+\r
+       }else\r
+               rtStatus = false;\r
+#endif\r
+\r
+       if(rtStatus != true){\r
+               RT_TRACE(COMP_INIT, "phy_BB8192S_Config_ParaFile():Write BB Reg Fail!!");\r
+               goto phy_BB8190_Config_ParaFile_Fail;\r
+       }\r
+\r
+       if (priv->AutoloadFailFlag == false)\r
+       {\r
+               priv->pwrGroupCnt = 0;\r
+\r
+#if    RTL8190_Download_Firmware_From_Header\r
+               rtStatus = phy_ConfigBBWithPgHeaderFile(dev,BaseBand_Config_PHY_REG);\r
+#else\r
+               rtStatus = phy_ConfigBBWithPgParaFile(dev, (char* )&szBBRegPgFile);\r
+#endif\r
+       }\r
+       if(rtStatus != true){\r
+               RT_TRACE(COMP_INIT, "phy_BB8192S_Config_ParaFile():BB_PG Reg Fail!!");\r
+               goto phy_BB8190_Config_ParaFile_Fail;\r
+       }\r
+       \r
+#if RTL8190_Download_Firmware_From_Header\r
+       rtStatus = phy_ConfigBBWithHeaderFile(dev,BaseBand_Config_AGC_TAB);\r
+#else\r
+       RT_TRACE(COMP_INIT, "phy_BB8192S_Config_ParaFile AGC_TAB.txt\n");\r
+       rtStatus = phy_ConfigBBWithParaFile(dev, (char* )&szAGCTableFile);\r
+#endif\r
+\r
+       if(rtStatus != true){\r
+               printk( "phy_BB8192S_Config_ParaFile():AGC Table Fail\n");\r
+               goto phy_BB8190_Config_ParaFile_Fail;\r
+       }\r
+\r
+\r
+#if 0  
+       if(pHalData->VersionID > VERSION_8190_BD)\r
+       {\r
+               u4RegValue = (  pHalData->AntennaTxPwDiff[2]<<8 | \r
+                                               pHalData->AntennaTxPwDiff[1]<<4 | \r
+                                               pHalData->AntennaTxPwDiff[0]);\r
+               \r
+               PHY_SetBBReg(dev, rFPGA0_TxGainStage, \r
+                       (bXBTxAGC|bXCTxAGC|bXDTxAGC), u4RegValue);\r
+       \r
+               u4RegValue = pHalData->CrystalCap;\r
+               PHY_SetBBReg(dev, rFPGA0_AnalogParameter1, bXtalCap92x, u4RegValue);\r
+\r
+       }\r
+#endif\r
+\r
+       priv->bCckHighPower = (bool)(rtl8192_QueryBBReg(dev, rFPGA0_XA_HSSIParameter2, 0x200));\r
+\r
+\r
+phy_BB8190_Config_ParaFile_Fail:       \r
+       return rtStatus;\r
+}\r
+\r
+static bool    \r
+phy_ConfigMACWithHeaderFile(struct net_device* dev)\r
+{\r
+       u32                                     i = 0;\r
+       u32                                     ArrayLength = 0;\r
+       u32*                                    ptrArray;       \r
+       \r
+       /*if(dev->bInHctTest)\r
+       {\r
+               RT_TRACE(COMP_INIT, DBG_LOUD, ("Rtl819XMACPHY_ArrayDTM\n"));\r
+               ArrayLength = MACPHY_ArrayLengthDTM;\r
+               ptrArray = Rtl819XMACPHY_ArrayDTM;\r
+       }\r
+       else if(pHalData->bTXPowerDataReadFromEEPORM)\r
+       {\r
+\r
+       }else*/\r
+       { 
+               RT_TRACE(COMP_INIT, "Read Rtl819XMACPHY_Array\n");\r
+               ArrayLength = MAC_2T_ArrayLength;\r
+               ptrArray = Rtl819XMAC_Array;    \r
+       }\r
+               \r
+       /*for(i = 0 ;i < ArrayLength;i=i+3){\r
+               RT_TRACE(COMP_SEND, DBG_LOUD, ("The Rtl819XMACPHY_Array[0] is %lx Rtl819XMACPHY_Array[1] is %lx Rtl819XMACPHY_Array[2] is %lx\n",ptrArray[i], ptrArray[i+1], ptrArray[i+2]));\r
+               if(ptrArray[i] == 0x318)\r
+               {\r
+                       ptrArray[i+2] = 0x00000800;\r
+               }\r
+               PHY_SetBBReg(dev, ptrArray[i], ptrArray[i+1], ptrArray[i+2]);\r
+       }*/\r
+       for(i = 0 ;i < ArrayLength;i=i+2){ 
+               write_nic_byte(dev, ptrArray[i], (u8)ptrArray[i+1]);\r
+       }\r
+       return true;\r
+}\r
+\r
+\r
+static bool    \r
+phy_ConfigBBWithHeaderFile(struct net_device* dev,u8 ConfigType)\r
+{\r
+       int             i;\r
+       u32*    Rtl819XPHY_REGArray_Table;\r
+       u32*    Rtl819XAGCTAB_Array_Table;\r
+       u16             PHY_REGArrayLen, AGCTAB_ArrayLen;\r
+       /*if(dev->bInHctTest)\r
+       {       \r
+       \r
+               AGCTAB_ArrayLen = AGCTAB_ArrayLengthDTM;\r
+               Rtl819XAGCTAB_Array_Table = Rtl819XAGCTAB_ArrayDTM;\r
+\r
+               if(pHalData->RF_Type == RF_2T4R)\r
+               {\r
+                       PHY_REGArrayLen = PHY_REGArrayLengthDTM;\r
+                       Rtl819XPHY_REGArray_Table = Rtl819XPHY_REGArrayDTM;\r
+               }\r
+               else if (pHalData->RF_Type == RF_1T2R)\r
+               {\r
+                       PHY_REGArrayLen = PHY_REG_1T2RArrayLengthDTM;\r
+                       Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_1T2RArrayDTM;\r
+               }               \r
+       \r
+       }\r
+       else\r
+       */\r
+       AGCTAB_ArrayLen = AGCTAB_ArrayLength;\r
+       Rtl819XAGCTAB_Array_Table = Rtl819XAGCTAB_Array;\r
+       PHY_REGArrayLen = PHY_REG_2T2RArrayLength; 
+       Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_Array;\r
+\r
+       if(ConfigType == BaseBand_Config_PHY_REG)\r
+       {\r
+               for(i=0;i<PHY_REGArrayLen;i=i+2)\r
+               {\r
+                       if (Rtl819XPHY_REGArray_Table[i] == 0xfe)\r
+                               mdelay(50);\r
+                       else if (Rtl819XPHY_REGArray_Table[i] == 0xfd)\r
+                               mdelay(5);\r
+                       else if (Rtl819XPHY_REGArray_Table[i] == 0xfc)\r
+                               mdelay(1);\r
+                       else if (Rtl819XPHY_REGArray_Table[i] == 0xfb)\r
+                               udelay(50);\r
+                       else if (Rtl819XPHY_REGArray_Table[i] == 0xfa)\r
+                               udelay(5);\r
+                       else if (Rtl819XPHY_REGArray_Table[i] == 0xf9)\r
+                               udelay(1);\r
+#ifdef ECS_T20_INIT_DELAY \r
+                               udelay(1);\r
+#endif\r
+                       rtl8192_setBBreg(dev, Rtl819XPHY_REGArray_Table[i], bMaskDWord, Rtl819XPHY_REGArray_Table[i+1]);                \r
+\r
+               }\r
+       }\r
+       else if(ConfigType == BaseBand_Config_AGC_TAB){\r
+               for(i=0;i<AGCTAB_ArrayLen;i=i+2)\r
+               {\r
+                       rtl8192_setBBreg(dev, Rtl819XAGCTAB_Array_Table[i], bMaskDWord, Rtl819XAGCTAB_Array_Table[i+1]);                \r
+#ifdef ECS_T20_INIT_DELAY \r
+                       udelay(1);\r
+#endif\r
+               }\r
+       }\r
+       return true;\r
+}\r
+\r
+\r
+static bool  \r
+phy_SetBBtoDiffRFWithHeaderFile(struct net_device* dev, u8 ConfigType)\r
+{\r
+       int i;\r
+       struct r8192_priv       *priv = rtllib_priv(dev);\r
+       u32*                    Rtl819XPHY_REGArraytoXTXR_Table;\r
+       u16                             PHY_REGArraytoXTXRLen;\r
+       \r
+       if(priv->rf_type == RF_1T1R)\r
+       {\r
+               Rtl819XPHY_REGArraytoXTXR_Table = Rtl819XPHY_REG_to1T1R_Array;\r
+               PHY_REGArraytoXTXRLen = PHY_ChangeTo_1T1RArrayLength;\r
+       } \r
+       else if(priv->rf_type == RF_1T2R)\r
+       {\r
+               Rtl819XPHY_REGArraytoXTXR_Table = Rtl819XPHY_REG_to1T2R_Array;\r
+               PHY_REGArraytoXTXRLen = PHY_ChangeTo_1T2RArrayLength;\r
+       }\r
+       else\r
+       {\r
+               return false;\r
+       }\r
+\r
+       if(ConfigType == BaseBand_Config_PHY_REG)\r
+       {\r
+               for(i=0;i<PHY_REGArraytoXTXRLen;i=i+3)\r
+               {\r
+                       if (Rtl819XPHY_REGArraytoXTXR_Table[i] == 0xfe)\r
+                               mdelay(50);\r
+                       else if (Rtl819XPHY_REGArraytoXTXR_Table[i] == 0xfd)\r
+                               mdelay(5);\r
+                       else if (Rtl819XPHY_REGArraytoXTXR_Table[i] == 0xfc)\r
+                               mdelay(1);\r
+                       else if (Rtl819XPHY_REGArraytoXTXR_Table[i] == 0xfb)\r
+                               udelay(50);\r
+                       else if (Rtl819XPHY_REGArraytoXTXR_Table[i] == 0xfa)\r
+                               udelay(5);\r
+                       else if (Rtl819XPHY_REGArraytoXTXR_Table[i] == 0xf9)\r
+                               udelay(1);\r
+                       rtl8192_setBBreg(dev, Rtl819XPHY_REGArraytoXTXR_Table[i], Rtl819XPHY_REGArraytoXTXR_Table[i+1], Rtl819XPHY_REGArraytoXTXR_Table[i+2]);          \r
+               }\r
+       }\r
+       else {\r
+               RT_TRACE(COMP_SEND, "phy_SetBBtoDiffRFWithHeaderFile(): ConfigType != BaseBand_Config_PHY_REG\n");\r
+       }\r
+       return true;\r
+}\r
+\r
+void\r
+storePwrIndexDiffRateOffset(\r
+       struct net_device* dev,\r
+       u32             RegAddr,\r
+       u32             BitMask,\r
+       u32             Data\r
+       )\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       \r
+       if(RegAddr == rTxAGC_Rate18_06)\r
+       {\r
+               priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][0] = Data;\r
+       }\r
+       if(RegAddr == rTxAGC_Rate54_24)\r
+       {\r
+               priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][1] = Data;\r
+       }\r
+       if(RegAddr == rTxAGC_CCK_Mcs32)\r
+       {\r
+               priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][6] = Data;\r
+       }\r
+       if(RegAddr == rTxAGC_Mcs03_Mcs00)\r
+       {\r
+               priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][2] = Data;\r
+       }\r
+       if(RegAddr == rTxAGC_Mcs07_Mcs04)\r
+       {\r
+               priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][3] = Data;\r
+       }\r
+       if(RegAddr == rTxAGC_Mcs11_Mcs08)\r
+       {\r
+               priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][4] = Data;\r
+       }\r
+       if(RegAddr == rTxAGC_Mcs15_Mcs12)\r
+       {\r
+               priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][5] = Data;\r
+               priv->pwrGroupCnt++;\r
+       }\r
+}\r
+\r
+static bool \r
+phy_ConfigBBWithPgHeaderFile(struct net_device* dev,u8 ConfigType)\r
+{\r
+       int i;\r
+       u32*    Rtl819XPHY_REGArray_Table_PG;\r
+       u16     PHY_REGArrayPGLen;\r
+\r
+       PHY_REGArrayPGLen = PHY_REG_Array_PGLength;\r
+       Rtl819XPHY_REGArray_Table_PG = Rtl819XPHY_REG_Array_PG;\r
+\r
+       if(ConfigType == BaseBand_Config_PHY_REG)\r
+       {\r
+               for(i=0;i<PHY_REGArrayPGLen;i=i+3)\r
+               {\r
+                       if (Rtl819XPHY_REGArray_Table_PG[i] == 0xfe)\r
+                               mdelay(50);\r
+                       else if (Rtl819XPHY_REGArray_Table_PG[i] == 0xfd)\r
+                               mdelay(5);\r
+                       else if (Rtl819XPHY_REGArray_Table_PG[i] == 0xfc)\r
+                               mdelay(1);\r
+                       else if (Rtl819XPHY_REGArray_Table_PG[i] == 0xfb)\r
+                               udelay(50);\r
+                       else if (Rtl819XPHY_REGArray_Table_PG[i] == 0xfa)\r
+                               udelay(5);\r
+                       else if (Rtl819XPHY_REGArray_Table_PG[i] == 0xf9)\r
+                               udelay(1);\r
+                       storePwrIndexDiffRateOffset(dev, Rtl819XPHY_REGArray_Table_PG[i], \r
+                               Rtl819XPHY_REGArray_Table_PG[i+1], \r
+                               Rtl819XPHY_REGArray_Table_PG[i+2]);\r
+                       rtl8192_setBBreg(dev, Rtl819XPHY_REGArray_Table_PG[i], Rtl819XPHY_REGArray_Table_PG[i+1], Rtl819XPHY_REGArray_Table_PG[i+2]);           \r
+               }\r
+       }\r
+       else{\r
+               RT_TRACE(COMP_SEND, "phy_ConfigBBWithPgHeaderFile(): ConfigType != BaseBand_Config_PHY_REG\n");\r
+       }\r
+       return true;\r
+       \r
+}      /* phy_ConfigBBWithPgHeaderFile */\r
+\r
+RT_STATUS rtl8192_phy_configRFPABiascurrent(struct net_device *dev, RF90_RADIO_PATH_E eRFPath)\r
+{\r
+       struct r8192_priv  *priv = rtllib_priv(dev);\r
+       RT_STATUS       rtStatus = RT_STATUS_SUCCESS;\r
+       u32          tmpval=0;\r
+\r
+       if(priv->IC_Class != IC_INFERIORITY_A)\r
+       {\r
+               tmpval = rtl8192_phy_QueryRFReg(dev, eRFPath, RF_IPA, 0xf);\r
+               rtl8192_phy_SetRFReg(dev, eRFPath, RF_IPA, 0xf, tmpval+1);\r
+       }\r
+\r
+       return rtStatus;\r
+}\r
+\r
+u8 rtl8192_phy_ConfigRFWithHeaderFile(struct net_device* dev, RF90_RADIO_PATH_E        eRFPath)\r
+{\r
+       struct r8192_priv       *priv = rtllib_priv(dev);\r
+       int                     i;\r
+       bool            rtStatus = true;\r
+       u32                     *Rtl819XRadioA_Array_Table;\r
+       u32                     *Rtl819XRadioB_Array_Table;\r
+       u16                     RadioA_ArrayLen,RadioB_ArrayLen;\r
+\r
+       RadioA_ArrayLen = RadioA_1T_ArrayLength;\r
+       Rtl819XRadioA_Array_Table=Rtl819XRadioA_Array;\r
+\r
+       if(priv->rf_type == RF_2T2R_GREEN)\r
+       {\r
+               Rtl819XRadioB_Array_Table = Rtl819XRadioB_GM_Array;\r
+               RadioB_ArrayLen = RadioB_GM_ArrayLength;\r
+       }\r
+       else\r
+       {               \r
+               Rtl819XRadioB_Array_Table=Rtl819XRadioB_Array;\r
+               RadioB_ArrayLen = RadioB_ArrayLength;   \r
+       }\r
+\r
+\r
+       RT_TRACE(COMP_INIT, "PHY_ConfigRFWithHeaderFile: Radio No %x\n", eRFPath);\r
+       rtStatus = true;\r
+\r
+       switch(eRFPath){\r
+               case RF90_PATH_A:\r
+                       for(i = 0;i<RadioA_ArrayLen; i=i+2)\r
+                       {\r
+                               if(Rtl819XRadioA_Array_Table[i] == 0xfe)\r
+                               { 
+                                       mdelay(50);\r
+                               }\r
+                               else if (Rtl819XRadioA_Array_Table[i] == 0xfd)\r
+                                       mdelay(5);\r
+                               else if (Rtl819XRadioA_Array_Table[i] == 0xfc)\r
+                                       mdelay(1);\r
+                               else if (Rtl819XRadioA_Array_Table[i] == 0xfb)\r
+                                       udelay(50);\r
+                               else if (Rtl819XRadioA_Array_Table[i] == 0xfa)\r
+                                       udelay(5);\r
+                               else if (Rtl819XRadioA_Array_Table[i] == 0xf9)\r
+                                       udelay(1);\r
+                               else {\r
+                                       rtl8192_phy_SetRFReg(dev, eRFPath, Rtl819XRadioA_Array_Table[i], \r
+                                                       bMask20Bits, Rtl819XRadioA_Array_Table[i+1]);\r
+                               }\r
+                       }\r
+                       rtl8192_phy_configRFPABiascurrent(dev, eRFPath);\r
+                       break;\r
+               case RF90_PATH_B:\r
+                       for(i = 0;i<RadioB_ArrayLen; i=i+2){\r
+                               if(Rtl819XRadioB_Array_Table[i] == 0xfe)\r
+                               { 
+                                       mdelay(50);\r
+                               }\r
+                               else if (Rtl819XRadioB_Array_Table[i] == 0xfd)\r
+                                       mdelay(5);\r
+                               else if (Rtl819XRadioB_Array_Table[i] == 0xfc)\r
+                                       mdelay(1);\r
+                               else if (Rtl819XRadioB_Array_Table[i] == 0xfb)\r
+                                       udelay(50);\r
+                               else if (Rtl819XRadioB_Array_Table[i] == 0xfa)\r
+                                       udelay(5);\r
+                               else if (Rtl819XRadioB_Array_Table[i] == 0xf9)\r
+                                       udelay(1);\r
+                               else\r
+                               {\r
+                                       rtl8192_phy_SetRFReg(dev, eRFPath, Rtl819XRadioB_Array_Table[i], bMask20Bits, Rtl819XRadioB_Array_Table[i+1]);\r
+                               }\r
+#ifdef ECS_T20_INIT_DELAY \r
+                       udelay(1);\r
+#endif\r
+                       }                       \r
+                       break;\r
+               case RF90_PATH_C:\r
+                       break;\r
+               case RF90_PATH_D:\r
+                       break;\r
+               default:\r
+                       break;\r
+       }\r
+       return rtStatus;\r
+\r
+}\r
+\r
+bool rtl8192_phy_checkBBAndRF(\r
+       struct net_device* dev,\r
+       HW90_BLOCK_E            CheckBlock,\r
+       RF90_RADIO_PATH_E       eRFPath\r
+       )\r
+{\r
+       bool rtStatus = true;\r
+       u32                             i, CheckTimes = 4,ulRegRead = 0;\r
+       u32                             WriteAddr[4];\r
+       u32                             WriteData[] = {0xfffff027, 0xaa55a02f, 0x00000027, 0x55aa502f};\r
+\r
+       WriteAddr[HW90_BLOCK_MAC] = 0x100;\r
+       WriteAddr[HW90_BLOCK_PHY0] = 0x900;\r
+       WriteAddr[HW90_BLOCK_PHY1] = 0x800;\r
+       WriteAddr[HW90_BLOCK_RF] = 0x3;\r
+       \r
+       for(i=0 ; i < CheckTimes ; i++)\r
+       {\r
+\r
+               switch(CheckBlock)\r
+               {\r
+               case HW90_BLOCK_MAC:\r
+                       RT_TRACE(COMP_INIT, "PHY_CheckBBRFOK(): Never Write 0x100 here!\n");\r
+                       break;\r
+                       \r
+               case HW90_BLOCK_PHY0:\r
+               case HW90_BLOCK_PHY1:\r
+                       write_nic_dword(dev, WriteAddr[CheckBlock], WriteData[i]);\r
+                       ulRegRead = read_nic_dword(dev, WriteAddr[CheckBlock]);\r
+                       break;\r
+\r
+               case HW90_BLOCK_RF:\r
+                       WriteData[i] &= 0xfff;\r
+                       rtl8192_phy_SetRFReg(dev, eRFPath, WriteAddr[HW90_BLOCK_RF], bMask20Bits, WriteData[i]);\r
+                       mdelay(10);\r
+                       ulRegRead = rtl8192_phy_QueryRFReg(dev, eRFPath, WriteAddr[HW90_BLOCK_RF], bMaskDWord);                         \r
+                       mdelay(10);\r
+                       break;\r
+                       \r
+               default:\r
+                       rtStatus = false;\r
+                       break;\r
+               }\r
+\r
+\r
+               if(ulRegRead != WriteData[i])\r
+               {\r
+                       RT_TRACE(COMP_ERR, "read back error(read:%x, write:%x)\n", ulRegRead, WriteData[i]);\r
+                       rtStatus = false;                       \r
+                       break;\r
+               }\r
+       }\r
+\r
+       return rtStatus;\r
+}\r
+\r
+#ifdef TO_DO_LIST\r
+void\r
+PHY_SetRFPowerState8192SUsb(\r
+       struct net_device* dev,\r
+       RF_POWER_STATE  RFPowerState\r
+       )\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       bool                    WaitShutDown = false;\r
+       u32                     DWordContent;\r
+       u8                              eRFPath;\r
+       BB_REGISTER_DEFINITION_T        *pPhyReg;\r
+       \r
+       if(priv->SetRFPowerStateInProgress == true)\r
+               return;\r
+       \r
+       priv->SetRFPowerStateInProgress = true;\r
+       \r
+\r
+       if(RFPowerState==RF_SHUT_DOWN)\r
+       {\r
+               RFPowerState=RF_OFF;\r
+               WaitShutDown=true;\r
+       }\r
+       \r
+       \r
+       priv->RFPowerState = RFPowerState;\r
+       switch( priv->rf_chip )\r
+       {\r
+       case RF_8225:\r
+       case RF_6052:\r
+               switch( RFPowerState )\r
+               {\r
+               case RF_ON:\r
+                       break;\r
+       \r
+               case RF_SLEEP:\r
+                       break;\r
+       \r
+               case RF_OFF:\r
+                       break;\r
+               }\r
+               break;\r
+\r
+       case RF_8256:\r
+               switch( RFPowerState )\r
+               {\r
+               case RF_ON:\r
+                       break;\r
+       \r
+               case RF_SLEEP:\r
+                       break;\r
+       \r
+               case RF_OFF:\r
+                       for(eRFPath=(RF90_RADIO_PATH_E)RF90_PATH_A; eRFPath < RF90_PATH_MAX; eRFPath++)\r
+                       {\r
+                               if (!rtl8192_phy_CheckIsLegalRFPath(dev, eRFPath))              \r
+                                       continue;       \r
+                               \r
+                               pPhyReg = &priv->PHYRegDef[eRFPath];\r
+                               rtl8192_setBBreg(dev, pPhyReg->rfintfs, bRFSI_RFENV, bRFSI_RFENV);\r
+                               rtl8192_setBBreg(dev, pPhyReg->rfintfo, bRFSI_RFENV, 0);\r
+                       }\r
+                       break;\r
+               }\r
+               break;\r
+               \r
+       case RF_8258:\r
+               break;\r
+       }
+\r
+       priv->SetRFPowerStateInProgress = false;\r
+}\r
+#endif\r
+\r
+void PHY_GetHWRegOriginalValue(struct net_device* dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+#if 0
+       priv->MCSTxPowerLevelOriginalOffset[0] =\r
+               rtl8192_QueryBBReg(dev, rTxAGC_Rate18_06, bMaskDWord);\r
+       priv->MCSTxPowerLevelOriginalOffset[1] =\r
+               rtl8192_QueryBBReg(dev, rTxAGC_Rate54_24, bMaskDWord);\r
+       priv->MCSTxPowerLevelOriginalOffset[2] =\r
+               rtl8192_QueryBBReg(dev, rTxAGC_Mcs03_Mcs00, bMaskDWord);\r
+       priv->MCSTxPowerLevelOriginalOffset[3] =\r
+               rtl8192_QueryBBReg(dev, rTxAGC_Mcs07_Mcs04, bMaskDWord);\r
+       priv->MCSTxPowerLevelOriginalOffset[4] =\r
+               rtl8192_QueryBBReg(dev, rTxAGC_Mcs11_Mcs08, bMaskDWord);\r
+       priv->MCSTxPowerLevelOriginalOffset[5] =\r
+               rtl8192_QueryBBReg(dev, rTxAGC_Mcs15_Mcs12, bMaskDWord);\r
+\r
+       priv->CCKTxPowerLevelOriginalOffset=\r
+               rtl8192_QueryBBReg(dev, rTxAGC_CCK_Mcs32, bMaskDWord);\r
+       RT_TRACE(COMP_INIT, "Legacy OFDM =%08x/%08x HT_OFDM=%08x/%08x/%08x/%08x\n", \r
+       priv->MCSTxPowerLevelOriginalOffset[0], priv->MCSTxPowerLevelOriginalOffset[1] ,\r
+       priv->MCSTxPowerLevelOriginalOffset[2], priv->MCSTxPowerLevelOriginalOffset[3] ,\r
+       priv->MCSTxPowerLevelOriginalOffset[4], priv->MCSTxPowerLevelOriginalOffset[5] );\r
+#endif\r
+\r
+       priv->DefaultInitialGain[0] = rtl8192_QueryBBReg(dev, rOFDM0_XAAGCCore1, bMaskByte0);\r
+       priv->DefaultInitialGain[1] = rtl8192_QueryBBReg(dev, rOFDM0_XBAGCCore1, bMaskByte0);\r
+       priv->DefaultInitialGain[2] = rtl8192_QueryBBReg(dev, rOFDM0_XCAGCCore1, bMaskByte0);\r
+       priv->DefaultInitialGain[3] = rtl8192_QueryBBReg(dev, rOFDM0_XDAGCCore1, bMaskByte0);\r
+       RT_TRACE(COMP_INIT, "Default initial gain (c50=0x%x, c58=0x%x, c60=0x%x, c68=0x%x) \n", \r
+                       priv->DefaultInitialGain[0], priv->DefaultInitialGain[1], \r
+                       priv->DefaultInitialGain[2], priv->DefaultInitialGain[3]);\r
+\r
+       priv->framesync = rtl8192_QueryBBReg(dev, rOFDM0_RxDetector3, bMaskByte0);\r
+       priv->framesyncC34 = rtl8192_QueryBBReg(dev, rOFDM0_RxDetector2, bMaskDWord);\r
+       RT_TRACE(COMP_INIT, "Default framesync (0x%x) = 0x%x \n", \r
+                               rOFDM0_RxDetector3, priv->framesync);\r
+\r
+}\r
+\r
+\r
+\r
+static void phy_InitBBRFRegisterDefinition(    struct net_device* dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       \r
+       priv->PHYRegDef[RF90_PATH_A].rfintfs = rFPGA0_XAB_RFInterfaceSW; 
+       priv->PHYRegDef[RF90_PATH_B].rfintfs = rFPGA0_XAB_RFInterfaceSW; 
+       priv->PHYRegDef[RF90_PATH_C].rfintfs = rFPGA0_XCD_RFInterfaceSW;
+       priv->PHYRegDef[RF90_PATH_D].rfintfs = rFPGA0_XCD_RFInterfaceSW;
+\r
+       priv->PHYRegDef[RF90_PATH_A].rfintfi = rFPGA0_XAB_RFInterfaceRB; 
+       priv->PHYRegDef[RF90_PATH_B].rfintfi = rFPGA0_XAB_RFInterfaceRB;
+       priv->PHYRegDef[RF90_PATH_C].rfintfi = rFPGA0_XCD_RFInterfaceRB;
+       priv->PHYRegDef[RF90_PATH_D].rfintfi = rFPGA0_XCD_RFInterfaceRB;
+\r
+       priv->PHYRegDef[RF90_PATH_A].rfintfo = rFPGA0_XA_RFInterfaceOE; 
+       priv->PHYRegDef[RF90_PATH_B].rfintfo = rFPGA0_XB_RFInterfaceOE; 
+       priv->PHYRegDef[RF90_PATH_C].rfintfo = rFPGA0_XC_RFInterfaceOE;
+       priv->PHYRegDef[RF90_PATH_D].rfintfo = rFPGA0_XD_RFInterfaceOE;
+\r
+       priv->PHYRegDef[RF90_PATH_A].rfintfe = rFPGA0_XA_RFInterfaceOE; 
+       priv->PHYRegDef[RF90_PATH_B].rfintfe = rFPGA0_XB_RFInterfaceOE; 
+       priv->PHYRegDef[RF90_PATH_C].rfintfe = rFPGA0_XC_RFInterfaceOE;
+       priv->PHYRegDef[RF90_PATH_D].rfintfe = rFPGA0_XD_RFInterfaceOE;
+\r
+       priv->PHYRegDef[RF90_PATH_A].rf3wireOffset = rFPGA0_XA_LSSIParameter; 
+       priv->PHYRegDef[RF90_PATH_B].rf3wireOffset = rFPGA0_XB_LSSIParameter;\r
+       priv->PHYRegDef[RF90_PATH_C].rf3wireOffset = rFPGA0_XC_LSSIParameter;\r
+       priv->PHYRegDef[RF90_PATH_D].rf3wireOffset = rFPGA0_XD_LSSIParameter;\r
+\r
+       priv->PHYRegDef[RF90_PATH_A].rfLSSI_Select = rFPGA0_XAB_RFParameter;  
+       priv->PHYRegDef[RF90_PATH_B].rfLSSI_Select = rFPGA0_XAB_RFParameter;\r
+       priv->PHYRegDef[RF90_PATH_C].rfLSSI_Select = rFPGA0_XCD_RFParameter;\r
+       priv->PHYRegDef[RF90_PATH_D].rfLSSI_Select = rFPGA0_XCD_RFParameter;\r
+\r
+       priv->PHYRegDef[RF90_PATH_A].rfTxGainStage = rFPGA0_TxGainStage; 
+       priv->PHYRegDef[RF90_PATH_B].rfTxGainStage = rFPGA0_TxGainStage; 
+       priv->PHYRegDef[RF90_PATH_C].rfTxGainStage = rFPGA0_TxGainStage; 
+       priv->PHYRegDef[RF90_PATH_D].rfTxGainStage = rFPGA0_TxGainStage; 
+\r
+       priv->PHYRegDef[RF90_PATH_A].rfHSSIPara1 = rFPGA0_XA_HSSIParameter1;  
+       priv->PHYRegDef[RF90_PATH_B].rfHSSIPara1 = rFPGA0_XB_HSSIParameter1;  
+       priv->PHYRegDef[RF90_PATH_C].rfHSSIPara1 = rFPGA0_XC_HSSIParameter1;  
+       priv->PHYRegDef[RF90_PATH_D].rfHSSIPara1 = rFPGA0_XD_HSSIParameter1;  
+\r
+       priv->PHYRegDef[RF90_PATH_A].rfHSSIPara2 = rFPGA0_XA_HSSIParameter2;  
+       priv->PHYRegDef[RF90_PATH_B].rfHSSIPara2 = rFPGA0_XB_HSSIParameter2;  
+       priv->PHYRegDef[RF90_PATH_C].rfHSSIPara2 = rFPGA0_XC_HSSIParameter2;  
+       priv->PHYRegDef[RF90_PATH_D].rfHSSIPara2 = rFPGA0_XD_HSSIParameter2;  
+\r
+       priv->PHYRegDef[RF90_PATH_A].rfSwitchControl = rFPGA0_XAB_SwitchControl; 
+       priv->PHYRegDef[RF90_PATH_B].rfSwitchControl = rFPGA0_XAB_SwitchControl;\r
+       priv->PHYRegDef[RF90_PATH_C].rfSwitchControl = rFPGA0_XCD_SwitchControl;\r
+       priv->PHYRegDef[RF90_PATH_D].rfSwitchControl = rFPGA0_XCD_SwitchControl;\r
+\r
+       priv->PHYRegDef[RF90_PATH_A].rfAGCControl1 = rOFDM0_XAAGCCore1;\r
+       priv->PHYRegDef[RF90_PATH_B].rfAGCControl1 = rOFDM0_XBAGCCore1;\r
+       priv->PHYRegDef[RF90_PATH_C].rfAGCControl1 = rOFDM0_XCAGCCore1;\r
+       priv->PHYRegDef[RF90_PATH_D].rfAGCControl1 = rOFDM0_XDAGCCore1;\r
+\r
+       priv->PHYRegDef[RF90_PATH_A].rfAGCControl2 = rOFDM0_XAAGCCore2;\r
+       priv->PHYRegDef[RF90_PATH_B].rfAGCControl2 = rOFDM0_XBAGCCore2;\r
+       priv->PHYRegDef[RF90_PATH_C].rfAGCControl2 = rOFDM0_XCAGCCore2;\r
+       priv->PHYRegDef[RF90_PATH_D].rfAGCControl2 = rOFDM0_XDAGCCore2;\r
+\r
+       priv->PHYRegDef[RF90_PATH_A].rfRxIQImbalance = rOFDM0_XARxIQImbalance;\r
+       priv->PHYRegDef[RF90_PATH_B].rfRxIQImbalance = rOFDM0_XBRxIQImbalance;\r
+       priv->PHYRegDef[RF90_PATH_C].rfRxIQImbalance = rOFDM0_XCRxIQImbalance;\r
+       priv->PHYRegDef[RF90_PATH_D].rfRxIQImbalance = rOFDM0_XDRxIQImbalance;  \r
+\r
+       priv->PHYRegDef[RF90_PATH_A].rfRxAFE = rOFDM0_XARxAFE;\r
+       priv->PHYRegDef[RF90_PATH_B].rfRxAFE = rOFDM0_XBRxAFE;\r
+       priv->PHYRegDef[RF90_PATH_C].rfRxAFE = rOFDM0_XCRxAFE;\r
+       priv->PHYRegDef[RF90_PATH_D].rfRxAFE = rOFDM0_XDRxAFE;  \r
+\r
+       priv->PHYRegDef[RF90_PATH_A].rfTxIQImbalance = rOFDM0_XATxIQImbalance;\r
+       priv->PHYRegDef[RF90_PATH_B].rfTxIQImbalance = rOFDM0_XBTxIQImbalance;\r
+       priv->PHYRegDef[RF90_PATH_C].rfTxIQImbalance = rOFDM0_XCTxIQImbalance;\r
+       priv->PHYRegDef[RF90_PATH_D].rfTxIQImbalance = rOFDM0_XDTxIQImbalance;  \r
+\r
+       priv->PHYRegDef[RF90_PATH_A].rfTxAFE = rOFDM0_XATxAFE;\r
+       priv->PHYRegDef[RF90_PATH_B].rfTxAFE = rOFDM0_XBTxAFE;\r
+       priv->PHYRegDef[RF90_PATH_C].rfTxAFE = rOFDM0_XCTxAFE;\r
+       priv->PHYRegDef[RF90_PATH_D].rfTxAFE = rOFDM0_XDTxAFE;  \r
+\r
+       priv->PHYRegDef[RF90_PATH_A].rfLSSIReadBack = rFPGA0_XA_LSSIReadBack;\r
+       priv->PHYRegDef[RF90_PATH_B].rfLSSIReadBack = rFPGA0_XB_LSSIReadBack;\r
+       priv->PHYRegDef[RF90_PATH_C].rfLSSIReadBack = rFPGA0_XC_LSSIReadBack;\r
+       priv->PHYRegDef[RF90_PATH_D].rfLSSIReadBack = rFPGA0_XD_LSSIReadBack;   \r
+\r
+       priv->PHYRegDef[RF90_PATH_A].rfLSSIReadBackPi = TransceiverA_HSPI_Readback;\r
+       priv->PHYRegDef[RF90_PATH_B].rfLSSIReadBackPi = TransceiverB_HSPI_Readback;\r
+\r
+}\r
+\r
+\r
+bool PHY_SetRFPowerState(struct net_device* dev, RT_RF_POWER_STATE eRFPowerState)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       bool                    bResult = false;\r
+\r
+       RT_TRACE((COMP_PS | COMP_RF), "---------> PHY_SetRFPowerState(): eRFPowerState(%d)\n", eRFPowerState);\r
+\r
+       if(eRFPowerState == priv->rtllib->eRFPowerState)\r
+       {\r
+               ;
+               return bResult;\r
+       }\r
+\r
+       bResult = phy_SetRFPowerState8192SE(dev, eRFPowerState);\r
+       \r
+       RT_TRACE((COMP_PS | COMP_RF), "<--------- PHY_SetRFPowerState(): bResult(%d)\n", bResult);\r
+\r
+       return bResult;\r
+}\r
+\r
+static bool phy_SetRFPowerState8192SE(struct net_device* dev,RT_RF_POWER_STATE eRFPowerState)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       PRT_POWER_SAVE_CONTROL  pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl));\r
+       bool    bResult = true;\r
+       u8              i, QueueID;\r
+       struct rtl8192_tx_ring  *ring = NULL;\r
+       priv->SetRFPowerStateInProgress = true;\r
+       \r
+       switch(priv->rf_chip )\r
+       {\r
+               default:        
+               switch( eRFPowerState )\r
+               {\r
+                       case eRfOn:\r
+                                RT_TRACE(COMP_PS,"========>%s():eRfOn\n", __func__);\r
+                               {\r
+                                                                       if((priv->rtllib->eRFPowerState == eRfOff) && RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC))\r
+                                       { 
+                                               bool rtstatus = true;\r
+                                               u32 InitializeCount = 0;\r
+                                               do\r
+                                               {       \r
+                                                       InitializeCount++;\r
+                                                       rtstatus = NicIFEnableNIC(dev);\r
+                                               }while( (rtstatus != true) &&(InitializeCount < 10) );\r
+                                               if(rtstatus != true)\r
+                                               {\r
+                                                       RT_TRACE(COMP_ERR,"%s():Initialize Adapter fail,return\n",__FUNCTION__);\r
+                                                       priv->SetRFPowerStateInProgress = false;\r
+                                                       return false;\r
+                                               }\r
+                                               RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC);\r
+                                       }\r
+                                       else\r
+                                       { 
+                                               write_nic_word(dev, CMDR, 0x37FC);\r
+                                               write_nic_byte(dev, TXPAUSE, 0x00);\r
+                                               write_nic_byte(dev, PHY_CCA, 0x3);\r
+                                       }\r
+\r
+#if 1\r
+                                       if(priv->rtllib->state == RTLLIB_LINKED)\r
+                                       {\r
+                                               LedControl8192SE(dev, LED_CTL_LINK); \r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               LedControl8192SE(dev, LED_CTL_NO_LINK); \r
+                                       }\r
+#endif\r
+                               }\r
+                               break;\r
+                       case eRfOff:  \r
+                                RT_TRACE(COMP_PS,"========>%s():eRfOff\n", __func__);\r
+                               {                                       \r
+                                       for(QueueID = 0, i = 0; QueueID < MAX_TX_QUEUE; )\r
+                                       {\r
+                                               ring = &priv->tx_ring[QueueID];\r
+                                               if(skb_queue_len(&ring->queue) == 0)\r
+                                               {\r
+                                                       QueueID++;\r
+                                                       continue;\r
+                                               }\r
+                                       #ifdef TO_DO_LIST\r
+                                       #if( DEV_BUS_TYPE==PCI_INTERFACE)\r
+                                               else if(IsLowPowerState(Adapter))\r
+                                               {\r
+                                                       RT_TRACE(COMP_PS, DBG_LOUD, \r
+                                                       ("eRf Off/Sleep: %d times TcbBusyQueue[%d] !=0 but lower power state!\n", (i+1), QueueID));\r
+                                                       break;\r
+                                               }\r
+                                       #endif\r
+                                       #endif\r
+                                               else\r
+                                               {\r
+                                                       RT_TRACE(COMP_PS, "eRf Off/Sleep: %d times TcbBusyQueue[%d] !=0 before doze!\n", (i+1), QueueID);\r
+                                                       udelay(10);\r
+                                                       i++;\r
+                                               }\r
+                                               \r
+                                               if(i >= MAX_DOZE_WAITING_TIMES_9x)\r
+                                               {\r
+                                                       RT_TRACE(COMP_PS, "\n\n\n %s(): eRfOff: %d times TcbBusyQueue[%d] != 0 !!!\n\n\n", __FUNCTION__,MAX_DOZE_WAITING_TIMES_9x, QueueID);\r
+                                                       break;\r
+                                               }\r
+                                       }\r
+\r
+                                       if(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_HALT_NIC && !RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC))\r
+                                       { 
+                                               NicIFDisableNIC(dev);\r
+                                               RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC);\r
+                                               if(priv->pwrdown && priv->rtllib->RfOffReason>= RF_CHANGE_BY_HW)\r
+                                                       write_nic_byte(dev,0x03,0x31);\r
+                                       }\r
+                                       else  if(!(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_HALT_NIC))\r
+                                       { 
+                                               SET_RTL8192SE_RF_SLEEP(dev);\r
+\r
+#if 1\r
+                                               if(priv->rtllib->RfOffReason == RF_CHANGE_BY_IPS )\r
+                                               {\r
+                                                       LedControl8192SE(dev,LED_CTL_NO_LINK); \r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       LedControl8192SE(dev, LED_CTL_POWER_OFF); \r
+                                               }\r
+#endif\r
+                                       }\r
+                               }\r
+                               break;\r
+\r
+                       case eRfSleep:\r
+                                RT_TRACE(COMP_PS,"========>%s():eRfSleep\n", __func__);\r
+                               {\r
+                                       if(priv->rtllib->eRFPowerState == eRfOff)\r
+                                               break;\r
+                                       \r
+                                       for(QueueID = 0, i = 0; QueueID < MAX_TX_QUEUE; )\r
+                                       {\r
+                                               ring = &priv->tx_ring[QueueID];\r
+                                               if(skb_queue_len(&ring->queue) == 0)\r
+                                               {\r
+                                                       QueueID++;\r
+                                                       continue;\r
+                                               }\r
+                                               #ifdef TO_DO_LIST\r
+                                               #if( DEV_BUS_TYPE==PCI_INTERFACE)\r
+                                                       else if(IsLowPowerState(Adapter))\r
+                                                       {\r
+                                                               RT_TRACE(COMP_PS, "eRf Off/Sleep: %d times TcbBusyQueue[%d] !=0 but lower power state!\n", (i+1), QueueID);\r
+                                                               break;\r
+                                                       }\r
+                                               #endif\r
+                                               #endif\r
+                                               else\r
+                                               {\r
+                                                       RT_TRACE(COMP_PS, "eRf Off/Sleep: %d times TcbBusyQueue[%d] !=0 before doze!\n", (i+1), QueueID);\r
+                                                       udelay(10);\r
+                                                       i++;\r
+                                               }\r
+                                               \r
+                                               if(i >= MAX_DOZE_WAITING_TIMES_9x)\r
+                                               {\r
+                                                       RT_TRACE(COMP_PS, "\n\n\n %s(): eRfOff: %d times TcbBusyQueue[%d] != 0 !!!\n\n\n", __FUNCTION__,MAX_DOZE_WAITING_TIMES_9x, QueueID);\r
+                                                       break;\r
+                                               }\r
+                                       }               \r
+\r
+                                       SET_RTL8192SE_RF_SLEEP(dev);\r
+                               }\r
+                               break;\r
+\r
+                       default:\r
+                               bResult = false;\r
+                               RT_TRACE(COMP_ERR, "phy_SetRFPowerState8192S(): unknow state to set: 0x%X!!!\n", eRFPowerState);\r
+                               break;\r
+               } \r
+               break;\r
+       }\r
+\r
+       if(bResult)\r
+       {\r
+               priv->rtllib->eRFPowerState = eRFPowerState;\r
+       }\r
+       \r
+       priv->SetRFPowerStateInProgress = false;\r
+\r
+       return bResult;\r
+}\r
+\r
+\r
+void\r
+PHY_SwitchEphyParameter(struct net_device* dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       \r
+       write_nic_dword(dev, 0x540, 0x73c11);\r
+       write_nic_dword(dev, 0x548, 0x2407c);\r
+       \r
+       write_nic_word(dev, 0x550, 0x1000);\r
+       write_nic_byte(dev, 0x554, 0x20);       \r
+       phy_CheckEphySwitchReady(dev);\r
+\r
+       write_nic_word(dev, 0x550, 0xa0eb);\r
+       write_nic_byte(dev, 0x554, 0x3e);\r
+       phy_CheckEphySwitchReady(dev);\r
+       \r
+       write_nic_word(dev, 0x550, 0xff80);\r
+       write_nic_byte(dev, 0x554, 0x39);\r
+       phy_CheckEphySwitchReady(dev);\r
+\r
+       if (priv->pci_bridge_vendor & (PCI_BRIDGE_VENDOR_INTEL | PCI_BRIDGE_VENDOR_SIS))\r
+               write_nic_byte(dev, 0x560, 0x40);\r
+       else\r
+               write_nic_byte(dev, 0x560, 0x00);\r
+       \r
+}      
+\r
+\r
+ void\r
+PHY_GetTxPowerLevel8192S(\r
+       struct net_device* dev,\r
+        long*                  powerlevel\r
+       )\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       u8                      TxPwrLevel = 0;\r
+       long                    TxPwrDbm;\r
+\r
+       TxPwrLevel = priv->CurrentCckTxPwrIdx;\r
+       TxPwrDbm = phy_TxPwrIdxToDbm(dev, WIRELESS_MODE_B, TxPwrLevel);\r
+\r
+       TxPwrLevel = priv->CurrentOfdm24GTxPwrIdx + priv->LegacyHTTxPowerDiff;\r
+\r
+       if(phy_TxPwrIdxToDbm(dev, WIRELESS_MODE_G, TxPwrLevel) > TxPwrDbm)\r
+               TxPwrDbm = phy_TxPwrIdxToDbm(dev, WIRELESS_MODE_G, TxPwrLevel);\r
+       TxPwrLevel = priv->CurrentOfdm24GTxPwrIdx;\r
+\r
+       if(phy_TxPwrIdxToDbm(dev, WIRELESS_MODE_N_24G, TxPwrLevel) > TxPwrDbm)\r
+               TxPwrDbm = phy_TxPwrIdxToDbm(dev, WIRELESS_MODE_N_24G, TxPwrLevel);\r
+       *powerlevel = TxPwrDbm;\r
+}\r
+\r
+#if 1\r
+void getTxPowerIndex(\r
+       struct net_device*      dev,\r
+       u8                              channel,\r
+       u8*                             cckPowerLevel,\r
+       u8*                             ofdmPowerLevel\r
+       )\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       u8                              index = (channel -1);\r
+       cckPowerLevel[0] = priv->RfTxPwrLevelCck[0][index];     
+       cckPowerLevel[1] = priv->RfTxPwrLevelCck[1][index];     
+\r
+       if (priv->rf_type == RF_1T2R || priv->rf_type == RF_1T1R)\r
+       {\r
+               ofdmPowerLevel[0] = priv->RfTxPwrLevelOfdm1T[0][index];\r
+               ofdmPowerLevel[1] = priv->RfTxPwrLevelOfdm1T[1][index];\r
+       }\r
+       else if (priv->rf_type == RF_2T2R)\r
+       {\r
+               ofdmPowerLevel[0] = priv->RfTxPwrLevelOfdm2T[0][index];\r
+               ofdmPowerLevel[1] = priv->RfTxPwrLevelOfdm2T[1][index];\r
+       }\r
+       RT_TRACE(COMP_POWER,"Channel-%d, set tx power index !!\n", channel);\r
+}\r
+\r
+void ccxPowerIndexCheck(\r
+       struct net_device*      dev,\r
+       u8                              channel,\r
+       u8*                             cckPowerLevel,\r
+       u8*                             ofdmPowerLevel\r
+       )\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       \r
+#ifdef TODO 
+       if(     priv->rtllib->iw_mode != IW_MODE_INFRA && priv->bWithCcxCellPwr &&\r
+               channel == priv->rtllib->current_network.channel)\r
+       {\r
+               u8      CckCellPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_B, priv->CcxCellPwr);\r
+               u8      LegacyOfdmCellPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_G, priv->CcxCellPwr);\r
+               u8      OfdmCellPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_N_24G, priv->CcxCellPwr);\r
+\r
+               RT_TRACE(COMP_TXAGC,  \r
+               "CCX Cell Limit: %d dbm => CCK Tx power index : %d, Legacy OFDM Tx power index : %d, OFDM Tx power index: %d\n", \r
+               priv->CcxCellPwr, CckCellPwrIdx, LegacyOfdmCellPwrIdx, OfdmCellPwrIdx);\r
+               RT_TRACE(COMP_TXAGC, \r
+               "EEPROM channel(%d) => CCK Tx power index: %d, Legacy OFDM Tx power index : %d, OFDM Tx power index: %d\n",\r
+               channel, cckPowerLevel[0], ofdmPowerLevel[0] + priv->LegacyHTTxPowerDiff, ofdmPowerLevel[0]); \r
+\r
+               if(cckPowerLevel[0] > CckCellPwrIdx)\r
+                       cckPowerLevel[0] = CckCellPwrIdx;\r
+               if(ofdmPowerLevel[0] + priv->LegacyHTTxPowerDiff > LegacyOfdmCellPwrIdx)\r
+               {\r
+                       if((OfdmCellPwrIdx - priv->LegacyHTTxPowerDiff) > 0)\r
+                       {\r
+                               ofdmPowerLevel[0] = OfdmCellPwrIdx - priv->LegacyHTTxPowerDiff;\r
+                       }\r
+                       else\r
+                       {\r
+                               ofdmPowerLevel[0] = 0;\r
+                       }\r
+               }\r
+\r
+               RT_TRACE(COMP_TXAGC,  \r
+               "Altered CCK Tx power index : %d, Legacy OFDM Tx power index: %d, OFDM Tx power index: %d\n", \r
+               cckPowerLevel[0], ofdmPowerLevel[0] + priv->LegacyHTTxPowerDiff, ofdmPowerLevel[0]);\r
+       }\r
+\r
+#endif\r
+       priv->CurrentCckTxPwrIdx = cckPowerLevel[0];\r
+       priv->CurrentOfdm24GTxPwrIdx = ofdmPowerLevel[0];\r
+\r
+       RT_TRACE(COMP_TXAGC,  \r
+               "PHY_SetTxPowerLevel8192S(): CCK Tx power index : %d, Legacy OFDM Tx power index: %d, OFDM Tx power index: %d\n", \r
+               cckPowerLevel[0], ofdmPowerLevel[0] + priv->LegacyHTTxPowerDiff, ofdmPowerLevel[0]);\r
+\r
+}\r
+/*-----------------------------------------------------------------------------\r
+ * Function:    SetTxPowerLevel8190()\r
+ *\r
+ * Overview:    This function is export to "HalCommon" moudule\r
+ *                     We must consider RF path later!!!!!!!\r
+ *\r
+ * Input:       PADAPTER               Adapter\r
+ *                     u1Byte          channel\r
+ *\r
+ * Output:      NONE\r
+ *\r
+ * Return:      NONE\r
+ *     2008/11/04      MHC             We remove EEPROM_93C56.\r
+ *                                             We need to move CCX relative code to independet file.\r
+ *     2009/01/21      MHC             Support new EEPROM format from SD3 requirement.\r
+ *\r
+ *---------------------------------------------------------------------------*/\r
+void rtl8192_phy_setTxPower(struct net_device* dev, u8 channel)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       u8      cckPowerLevel[2], ofdmPowerLevel[2];    
+\r
+       if(priv->bTXPowerDataReadFromEEPORM == false)\r
+               return;\r
+       getTxPowerIndex(dev, channel, &cckPowerLevel[0], &ofdmPowerLevel[0]);\r
+       RT_TRACE(COMP_POWER, "Channel-%d, cckPowerLevel (A / B) = 0x%x / 0x%x,   ofdmPowerLevel (A / B) = 0x%x / 0x%x\n", \r
+               channel, cckPowerLevel[0], cckPowerLevel[1], ofdmPowerLevel[0], ofdmPowerLevel[1]);\r
+\r
+       ccxPowerIndexCheck(dev, channel, &cckPowerLevel[0], &ofdmPowerLevel[0]);\r
+\r
+       switch(priv->rf_chip)\r
+       {\r
+               case RF_8225:\r
+               break;\r
+\r
+               case RF_8256:\r
+                       ;
+                       break;\r
+\r
+               case RF_6052:\r
+                       PHY_RF6052SetCckTxPower(dev, cckPowerLevel[0]);\r
+                       PHY_RF6052SetOFDMTxPower(dev, &ofdmPowerLevel[0], channel);\r
+                       break;\r
+\r
+               case RF_8258:\r
+                       break;\r
+               default:\r
+                       break;\r
+       }\r
+}\r
+#else\r
+void rtl8192_phy_setTxPower(struct net_device* dev, u8 channel)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       u8      powerlevel = (u8)EEPROM_Default_TxPower, powerlevelOFDM24G = 0x10;\r
+       s8 ant_pwr_diff = 0;\r
+       u32     u4RegValue;\r
+       u8      index = (channel -1);\r
+       u8      pwrdiff[2] = {0};\r
+       u8      ht20pwr[2] = {0}, ht40pwr[2] = {0};\r
+       u8      rfpath = 0, rfpathnum = 2;\r
+\r
+       if(priv->bTXPowerDataReadFromEEPORM == false)\r
+               return;\r
+\r
+\r
+       powerlevel = priv->RfTxPwrLevelCck[0][index];\r
+               \r
+       if (priv->rf_type == RF_1T2R || priv->rf_type == RF_1T1R)\r
+       {\r
+               powerlevelOFDM24G = priv->RfTxPwrLevelOfdm1T[0][index];\r
+               \r
+               \r
+               rfpathnum = 1;\r
+               ht20pwr[0] = ht40pwr[0] = priv->RfTxPwrLevelOfdm1T[0][index];\r
+       }\r
+       else if (priv->rf_type == RF_2T2R)\r
+       {\r
+               powerlevelOFDM24G = priv->RfTxPwrLevelOfdm2T[0][index];\r
+               ant_pwr_diff =  priv->RfTxPwrLevelOfdm2T[1][index] - \r
+                                               priv->RfTxPwrLevelOfdm2T[0][index];\r
+       \r
+               RT_TRACE(COMP_POWER, "CH-%d HT40 A/B Pwr index = %x/%x(%d/%d)\n", \r
+                       channel, priv->RfTxPwrLevelOfdm2T[0][index], \r
+                       priv->RfTxPwrLevelOfdm2T[1][index],\r
+                       priv->RfTxPwrLevelOfdm2T[0][index],\r
+                       priv->RfTxPwrLevelOfdm2T[1][index]);    \r
+\r
+               ht20pwr[0] = ht40pwr[0] = priv->RfTxPwrLevelOfdm2T[0][index];\r
+               ht20pwr[1] = ht40pwr[1] = priv->RfTxPwrLevelOfdm2T[1][index];\r
+       }\r
+       RT_TRACE(COMP_POWER, "Channel-%d, set tx power index\n", channel);\r
+                               \r
+       if (priv->eeprom_version >= 2)  
+       {               \r
+               if (priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20)\r
+               {\r
+                       for (rfpath = 0; rfpath < rfpathnum; rfpath++)\r
+                       {\r
+                               pwrdiff[rfpath] = priv->TxPwrHt20Diff[rfpath][index];\r
+\r
+                               if (pwrdiff[rfpath] < 8)        
+                               {\r
+                                       ht20pwr[rfpath] += pwrdiff[rfpath];\r
+                               }\r
+                               else                            
+                               {\r
+                                       ht20pwr[rfpath] -= (16-pwrdiff[rfpath]);\r
+                               }\r
+                       }\r
+\r
+                       if (priv->rf_type == RF_2T2R)\r
+                               ant_pwr_diff = ht20pwr[1] - ht20pwr[0];\r
+\r
+                       RT_TRACE(COMP_POWER, "HT20 to HT40 pwrdiff[A/B]=%d/%d, ant_pwr_diff=%d(B-A=%d-%d)\n", \r
+                               pwrdiff[0], pwrdiff[1], ant_pwr_diff, ht20pwr[1], ht20pwr[0]);  \r
+               }\r
+       }\r
+                               \r
+       if(ant_pwr_diff > 7)\r
+               ant_pwr_diff = 7;\r
+       if(ant_pwr_diff < -8)\r
+               ant_pwr_diff = -8;\r
+                               \r
+       RT_TRACE(COMP_POWER, "CCK/HT Power index = %x/%x(%d/%d), ant_pwr_diff=%d\n", \r
+               powerlevel, powerlevelOFDM24G, powerlevel, powerlevelOFDM24G, ant_pwr_diff);\r
+               \r
+       ant_pwr_diff &= 0xf;    \r
+\r
+       priv->AntennaTxPwDiff[2] = 0;
+       priv->AntennaTxPwDiff[1] = 0;
+       priv->AntennaTxPwDiff[0] = (u8)(ant_pwr_diff);          
+       RT_TRACE(COMP_POWER, "pHalData->AntennaTxPwDiff[0]/[1]/[2] = 0x%x/0x%x/0x%x\n", \r
+               priv->AntennaTxPwDiff[0], priv->AntennaTxPwDiff[1], priv->AntennaTxPwDiff[2]);\r
+       u4RegValue = (  priv->AntennaTxPwDiff[2]<<8 | \r
+                                       priv->AntennaTxPwDiff[1]<<4 | \r
+                                       priv->AntennaTxPwDiff[0]        );\r
+       RT_TRACE(COMP_POWER, "BCD-Diff=0x%x\n", u4RegValue);\r
+\r
+       rtl8192_setBBreg(dev, rFPGA0_TxGainStage, (bXBTxAGC|bXCTxAGC|bXDTxAGC), u4RegValue);\r
+               \r
+#ifdef TODO 
+       if(     priv->rtllib->iw_mode != IW_MODE_INFRA && priv->bWithCcxCellPwr &&\r
+               channel == priv->rtllib->current_network.channel)\r
+       {\r
+               u8      CckCellPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_B, priv->CcxCellPwr);\r
+               u8      LegacyOfdmCellPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_G, priv->CcxCellPwr);\r
+               u8      OfdmCellPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_N_24G, priv->CcxCellPwr);\r
+\r
+               RT_TRACE(COMP_TXAGC,  \r
+               ("CCX Cell Limit: %d dbm => CCK Tx power index : %d, Legacy OFDM Tx power index : %d, OFDM Tx power index: %d\n", \r
+               priv->CcxCellPwr, CckCellPwrIdx, LegacyOfdmCellPwrIdx, OfdmCellPwrIdx));\r
+               RT_TRACE(COMP_TXAGC,  \r
+               ("EEPROM channel(%d) => CCK Tx power index: %d, Legacy OFDM Tx power index : %d, OFDM Tx power index: %d\n",\r
+               channel, powerlevel, powerlevelOFDM24G + priv->LegacyHTTxPowerDiff, powerlevelOFDM24G)); \r
+\r
+               if(powerlevel > CckCellPwrIdx)\r
+                       powerlevel = CckCellPwrIdx;\r
+               if(powerlevelOFDM24G + priv->LegacyHTTxPowerDiff > LegacyOfdmCellPwrIdx)\r
+               {\r
+                       if((OfdmCellPwrIdx - priv->LegacyHTTxPowerDiff) > 0)\r
+                       {\r
+                               powerlevelOFDM24G = OfdmCellPwrIdx - priv->LegacyHTTxPowerDiff;\r
+                       }\r
+                       else\r
+                       {\r
+                               powerlevelOFDM24G = 0;\r
+                       }\r
+               }\r
+\r
+               RT_TRACE(COMP_TXAGC, \r
+               ("Altered CCK Tx power index : %d, Legacy OFDM Tx power index: %d, OFDM Tx power index: %d\n", \r
+               powerlevel, powerlevelOFDM24G + priv->LegacyHTTxPowerDiff, powerlevelOFDM24G));\r
+       }\r
+#endif\r
+       priv->CurrentCckTxPwrIdx = powerlevel;\r
+       priv->CurrentOfdm24GTxPwrIdx = powerlevelOFDM24G;\r
+\r
+       RT_TRACE(COMP_POWER, "PHY_SetTxPowerLevel8192S(): CCK Tx power index : %d, Legacy OFDM Tx power index: %d, OFDM Tx power index: %d\n", \r
+               powerlevel, powerlevelOFDM24G + priv->LegacyHTTxPowerDiff, powerlevelOFDM24G);\r
+       \r
+       switch(priv->rf_chip)\r
+       {\r
+               case RF_8225:\r
+                       break;\r
+\r
+               case RF_8256:\r
+                       break;\r
+\r
+               case RF_6052:\r
+                       PHY_RF6052SetCckTxPower(dev, powerlevel);\r
+                       PHY_RF6052SetOFDMTxPower(dev, powerlevelOFDM24G, channel);\r
+                       break;\r
+\r
+               case RF_8258:\r
+                       break;\r
+               default:\r
+                       break;\r
+       }       \r
+\r
+}\r
+#endif\r
+\r
+bool PHY_UpdateTxPowerDbm8192S(struct net_device* dev, long powerInDbm)\r
+{\r
+       struct r8192_priv       *priv = rtllib_priv(dev);\r
+       u8                              idx;\r
+       u8                              rf_path;\r
+\r
+       u8      CckTxPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_B, powerInDbm);\r
+       u8      OfdmTxPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_N_24G, powerInDbm);\r
+\r
+       if(OfdmTxPwrIdx - priv->LegacyHTTxPowerDiff > 0)\r
+               OfdmTxPwrIdx -= priv->LegacyHTTxPowerDiff;\r
+       else\r
+               OfdmTxPwrIdx = 0;\r
+\r
+       RT_TRACE(COMP_POWER, "PHY_UpdateTxPowerDbm8192S(): %ld dBm , CckTxPwrIdx = %d, OfdmTxPwrIdx = %d\n", powerInDbm, CckTxPwrIdx, OfdmTxPwrIdx);\r
+\r
+       for(idx = 0; idx < 14; idx++)\r
+       {\r
+               priv->TxPowerLevelCCK[idx] = CckTxPwrIdx;\r
+               priv->TxPowerLevelCCK_A[idx] = CckTxPwrIdx;\r
+               priv->TxPowerLevelCCK_C[idx] = CckTxPwrIdx;\r
+               priv->TxPowerLevelOFDM24G[idx] = OfdmTxPwrIdx;\r
+               priv->TxPowerLevelOFDM24G_A[idx] = OfdmTxPwrIdx;\r
+               priv->TxPowerLevelOFDM24G_C[idx] = OfdmTxPwrIdx;\r
+               for (rf_path = 0; rf_path < 2; rf_path++)\r
+               {\r
+                       priv->RfTxPwrLevelCck[rf_path][idx] = CckTxPwrIdx;\r
+                       priv->RfTxPwrLevelOfdm1T[rf_path][idx] = \r
+                       priv->RfTxPwrLevelOfdm2T[rf_path][idx] = OfdmTxPwrIdx;\r
+               }\r
+       }\r
+\r
+       rtl8192_phy_setTxPower(dev, priv->chan);\r
+\r
+       return true;    \r
+}\r
+\r
+extern void PHY_SetBeaconHwReg(        struct net_device* dev, u16 BeaconInterval)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       u32 NewBeaconNum;       \r
+\r
+       if(priv->pFirmware->FirmwareVersion >= 0x33) 
+       {\r
+               write_nic_dword(dev,WFM5,0xF1000000|(BeaconInterval<<8));\r
+       }\r
+       else\r
+       {\r
+       NewBeaconNum = BeaconInterval *32 - 64;\r
+       write_nic_dword(dev, WFM3+4, NewBeaconNum);\r
+       write_nic_dword(dev, WFM3, 0xB026007C);\r
+}\r
+}\r
+\r
+static u8 phy_DbmToTxPwrIdx(\r
+       struct net_device* dev, \r
+       WIRELESS_MODE   WirelessMode,\r
+       long                    PowerInDbm\r
+       )\r
+{\r
+       u8                              TxPwrIdx = 0;\r
+       long                            Offset = 0;\r
+       \r
+\r
+       switch(WirelessMode)\r
+       {\r
+       case WIRELESS_MODE_B:\r
+               Offset = -7;\r
+               break;\r
+\r
+       case WIRELESS_MODE_G:\r
+               Offset = -8;\r
+               break;\r
+\r
+       case WIRELESS_MODE_N_24G:\r
+       default:\r
+               Offset = -8;\r
+               break;\r
+       }\r
+\r
+       if((PowerInDbm - Offset) > 0)\r
+       {\r
+               TxPwrIdx = (u8)((PowerInDbm - Offset) * 2);\r
+       }\r
+       else\r
+       {\r
+               TxPwrIdx = 0;\r
+       }\r
+\r
+       if(TxPwrIdx > MAX_TXPWR_IDX_NMODE_92S)\r
+               TxPwrIdx = MAX_TXPWR_IDX_NMODE_92S;\r
+\r
+       return TxPwrIdx;\r
+}\r
+\r
+static long phy_TxPwrIdxToDbm(\r
+       struct net_device* dev,\r
+       WIRELESS_MODE   WirelessMode,\r
+       u8                      TxPwrIdx\r
+       )\r
+{\r
+       long                            Offset = 0;\r
+       long                            PwrOutDbm = 0;\r
+       \r
+       switch(WirelessMode)\r
+       {\r
+       case WIRELESS_MODE_B:\r
+               Offset = -7;\r
+               break;\r
+\r
+       case WIRELESS_MODE_G:\r
+       case WIRELESS_MODE_N_24G:\r
+               Offset = -8;\r
+               break;\r
+       default:\r
+               Offset = -8;\r
+               break;\r
+       }\r
+\r
+       PwrOutDbm = TxPwrIdx / 2 + Offset; 
+\r
+       return PwrOutDbm;\r
+}\r
+\r
+#ifdef TO_DO_LIST\r
+extern void \r
+PHY_ScanOperationBackup8192S(\r
+       struct net_device* dev,\r
+       u8 Operation\r
+       )\r
+{\r
+#if(RTL8192S_DISABLE_FW_DM == 0)\r
+\r
+       if(!Adapter->bDriverStopped)\r
+       {\r
+               switch(Operation)\r
+               {\r
+                       case SCAN_OPT_BACKUP:\r
+                               Adapter->HalFunc.SetFwCmdHandler(Adapter, FW_CMD_PAUSE_DM_BY_SCAN);\r
+                               break;\r
+\r
+                       case SCAN_OPT_RESTORE:\r
+                               Adapter->HalFunc.SetFwCmdHandler(Adapter, FW_CMD_RESUME_DM_BY_SCAN);\r
+                               break;\r
+\r
+                       default:\r
+                               RT_TRACE(COMP_SCAN, DBG_LOUD, ("Unknown Scan Backup Operation. \n"));\r
+                               break;\r
+               }\r
+       }\r
+#endif\r
+}\r
+#endif\r
+void PHY_SetBWModeCallback8192S(struct net_device *dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       u8                              regBwOpMode, regRRSR_RSC;\r
+\r
+\r
+\r
+       RT_TRACE(COMP_SWBW, "==>SetBWModeCallback8192s()  Switch to %s bandwidth\n", \\r
+                                       priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20?"20MHz":"40MHz");\r
+\r
+       if(priv->rf_chip == RF_PSEUDO_11N)\r
+       {\r
+               priv->SetBWModeInProgress= false;\r
+               return;\r
+       }\r
+#ifdef _RTL8192_EXT_PATCH_\r
+       if((!priv->up) && (!priv->mesh_up))\r
+#else\r
+       if(!priv->up)\r
+#endif\r
+       {\r
+               priv->SwChnlInProgress = priv->SetBWModeInProgress = false;\r
+               return;\r
+       }\r
+               \r
+       regBwOpMode = read_nic_byte(dev, BW_OPMODE);\r
+       regRRSR_RSC = read_nic_byte(dev, RRSR+2);\r
+       \r
+       switch(priv->CurrentChannelBW)\r
+       {\r
+               case HT_CHANNEL_WIDTH_20:\r
+                       regBwOpMode |= BW_OPMODE_20MHZ;\r
+                       write_nic_byte(dev, BW_OPMODE, regBwOpMode);\r
+                       break;\r
+                          \r
+               case HT_CHANNEL_WIDTH_20_40:\r
+                       regBwOpMode &= ~BW_OPMODE_20MHZ;\r
+                       write_nic_byte(dev, BW_OPMODE, regBwOpMode);\r
+\r
+                       break;\r
+\r
+               default:\r
+                       RT_TRACE(COMP_DBG, "SetBWModeCallback8192s():\\r
+                                               unknown Bandwidth: %#X\n",priv->CurrentChannelBW);\r
+                       break;\r
+       }\r
+       \r
+       switch(priv->CurrentChannelBW)\r
+       {\r
+               case HT_CHANNEL_WIDTH_20:\r
+                       rtl8192_setBBreg(dev, rFPGA0_RFMOD, bRFMOD, 0x0);\r
+                       rtl8192_setBBreg(dev, rFPGA1_RFMOD, bRFMOD, 0x0);\r
+\r
+                       if(priv->card_8192_version >= VERSION_8192S_BCUT)\r
+                               write_nic_byte(dev, rFPGA0_AnalogParameter2, 0x58);\r
+                       break;\r
+\r
+               case HT_CHANNEL_WIDTH_20_40:\r
+                       rtl8192_setBBreg(dev, rFPGA0_RFMOD, bRFMOD, 0x1);\r
+                       rtl8192_setBBreg(dev, rFPGA1_RFMOD, bRFMOD, 0x1);\r
+                       \r
+\r
+                       rtl8192_setBBreg(dev, rCCK0_System, bCCKSideBand, (priv->nCur40MhzPrimeSC>>1));\r
+                       rtl8192_setBBreg(dev, rOFDM1_LSTF, 0xC00, priv->nCur40MhzPrimeSC);                      \r
+                       \r
+                       if(priv->card_8192_version >= VERSION_8192S_BCUT)\r
+                               write_nic_byte(dev, rFPGA0_AnalogParameter2, 0x18);\r
+                       break;\r
+                       \r
+               default:\r
+                       RT_TRACE(COMP_DBG, "SetBWModeCallback8192s(): unknown Bandwidth: %#X\n"\\r
+                                               ,priv->CurrentChannelBW);\r
+                       break;\r
+                       \r
+       }\r
+\r
+\r
+       switch( priv->rf_chip )\r
+       {\r
+               case RF_8225:           \r
+                       break;  \r
+                       \r
+               case RF_8256:\r
+                       break;\r
+                       \r
+               case RF_8258:\r
+                       break;\r
+\r
+               case RF_PSEUDO_11N:\r
+                       break;\r
+\r
+               case RF_6052:\r
+                       PHY_RF6052SetBandwidth(dev, priv->CurrentChannelBW);\r
+                       break;\r
+               default:\r
+                       printk("Unknown rf_chip: %d\n", priv->rf_chip);\r
+                       break;\r
+       }\r
+\r
+       priv->SetBWModeInProgress= false;\r
+\r
+       RT_TRACE(COMP_SWBW, "<==SetBWModeCallback8192s() \n" );\r
+}\r
+\r
+\r
+void rtl8192_SetBWMode(struct net_device *dev, HT_CHANNEL_WIDTH        Bandwidth, HT_EXTCHNL_OFFSET Offset)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       \r
+\r
+       \r
+\r
+\r
+       if(priv->SetBWModeInProgress)\r
+               return;\r
+\r
+       priv->SetBWModeInProgress= true;\r
+       \r
+       priv->CurrentChannelBW = Bandwidth;\r
+       \r
+       if(Offset==HT_EXTCHNL_OFFSET_LOWER)\r
+               priv->nCur40MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_UPPER;\r
+       else if(Offset==HT_EXTCHNL_OFFSET_UPPER)\r
+               priv->nCur40MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_LOWER;\r
+       else\r
+               priv->nCur40MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_DONT_CARE;\r
+\r
+#if 0\r
+       if(!priv->bDriverStopped)\r
+       {\r
+#ifdef USE_WORKITEM    \r
+               PlatformScheduleWorkItem(&(priv->SetBWModeWorkItem));
+#else\r
+               PlatformSetTimer(dev, &(priv->SetBWModeTimer), 0);
+#endif         \r
+       }\r
+#endif\r
+#ifdef _RTL8192_EXT_PATCH_\r
+       if(priv->up || priv->mesh_up)\r
+#else\r
+       if (priv->up) \r
+#endif\r
+       {\r
+               PHY_SetBWModeCallback8192S(dev);\r
+       } else {\r
+               priv->SetBWModeInProgress= false;\r
+       }\r
+}\r
+\r
+void PHY_SwChnlCallback8192S(struct net_device *dev)\r
+{\r
+\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       u32             delay;\r
+       \r
+        RT_TRACE(COMP_CH, "==>SwChnlCallback8190Pci(), switch to channel %d\n", priv->chan);\r
+       \r
+#ifdef _RTL8192_EXT_PATCH_\r
+       if((!priv->up) && (!priv->mesh_up))\r
+#else\r
+       if(!priv->up)\r
+#endif\r
+       {       \r
+               printk("%s: driver is not up\n", __FUNCTION__);\r
+               priv->SwChnlInProgress = priv->SetBWModeInProgress = false;\r
+               return;\r
+       }       \r
+       if(priv->rf_chip == RF_PSEUDO_11N)\r
+       {\r
+               printk("%s: rt chip is RF_PSEUDO_11N\n", __FUNCTION__);\r
+               priv->SwChnlInProgress=false;\r
+               return;                                                                 
+       }\r
+       \r
+       do{\r
+               if(!priv->SwChnlInProgress)\r
+                       break;\r
+\r
+               if(!phy_SwChnlStepByStep(dev, priv->chan, &priv->SwChnlStage, &priv->SwChnlStep, &delay))\r
+               {\r
+                       if(delay>0)\r
+                       {\r
+                               mdelay(delay);\r
+                       }\r
+                       else\r
+                       continue;\r
+               }\r
+               else\r
+               {\r
+                       priv->SwChnlInProgress=false;\r
+                       break;\r
+               }\r
+       }while(true);\r
+}\r
+\r
+u8 rtl8192_phy_SwChnl(struct net_device* dev, u8 channel)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+\r
+#ifdef _RTL8192_EXT_PATCH_\r
+       if((!priv->up) && (!priv->mesh_up))\r
+#else\r
+       if(!priv->up)\r
+#endif\r
+       {\r
+               printk("%s: driver is not up.\n",__FUNCTION__);\r
+               priv->SwChnlInProgress = priv->SetBWModeInProgress = false;\r
+               return false;\r
+       }       \r
+       if(priv->SwChnlInProgress){\r
+               printk("%s: SwChnl is in progress\n",__FUNCTION__);\r
+               return false;\r
+       }\r
+\r
+       if(priv->SetBWModeInProgress){\r
+               printk("%s: Set BWMode is in progress\n",__FUNCTION__);\r
+               return false;\r
+       }\r
+       if (0)\r
+       {\r
+               u8 path;\r
+               for(path=0; path<2; path++){\r
+               printk("============>to set channel:%x\n", rtl8192_phy_QueryRFReg(dev, path, 0x18, 0x3ff));\r
+               udelay(10);\r
+               }\r
+       }\r
+       switch(priv->rtllib->mode)\r
+       {\r
+       case WIRELESS_MODE_A:\r
+       case WIRELESS_MODE_N_5G:\r
+               if (channel<=14){\r
+                       RT_TRACE(COMP_ERR, "WIRELESS_MODE_A but channel<=14");\r
+                       return false;\r
+               }\r
+               break;\r
+               \r
+       case WIRELESS_MODE_B:\r
+               if (channel>14){\r
+                       RT_TRACE(COMP_ERR, "WIRELESS_MODE_B but channel>14");\r
+                       return false;\r
+               }\r
+               break;\r
+               \r
+       case WIRELESS_MODE_G:\r
+       case WIRELESS_MODE_N_24G:\r
+               if (channel>14){\r
+                       RT_TRACE(COMP_ERR, "WIRELESS_MODE_G but channel>14");\r
+                       return false;\r
+               }\r
+               break;\r
+\r
+       default:\r
+               break;\r
+       }\r
+       \r
+       priv->SwChnlInProgress = true;\r
+       if( channel == 0)\r
+               channel = 1;\r
+       \r
+       priv->chan=channel;\r
+\r
+       priv->SwChnlStage=0;\r
+       priv->SwChnlStep=0;\r
+\r
+#if 0\r
+       if(!dev->bDriverStopped)\r
+       {\r
+#ifdef USE_WORKITEM    \r
+               PlatformScheduleWorkItem(&(priv->SwChnlWorkItem));
+#else\r
+               PlatformSetTimer(dev, &(priv->SwChnlTimer), 0);
+#endif\r
+       }\r
+#endif\r
+\r
+#ifdef _RTL8192_EXT_PATCH_\r
+       if(priv->up || priv->mesh_up)\r
+#else\r
+       if(priv->up) \r
+#endif\r
+       {\r
+               PHY_SwChnlCallback8192S(dev);\r
+       } else {\r
+               priv->SwChnlInProgress = false;\r
+       }\r
+       return true;    \r
+}\r
+\r
+\r
+void PHY_SwChnlPhy8192S(       
+       struct net_device* dev,\r
+       u8              channel\r
+       )\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       \r
+       RT_TRACE(COMP_SCAN, "==>PHY_SwChnlPhy8192S(), switch to channel %d.\n", priv->chan);\r
+\r
+#ifdef TO_DO_LIST\r
+       if(RT_CANNOT_IO(dev))\r
+               return;\r
+#endif\r
+\r
+       if(priv->SwChnlInProgress)\r
+               return;\r
+       \r
+       if(priv->rf_chip == RF_PSEUDO_11N)\r
+       {\r
+               priv->SwChnlInProgress=false;\r
+               return;\r
+       }\r
+       \r
+       priv->SwChnlInProgress = true;\r
+       if( channel == 0)\r
+               channel = 1;\r
+       \r
+       priv->chan=channel;\r
+       \r
+       priv->SwChnlStage = 0;\r
+       priv->SwChnlStep = 0;\r
+       \r
+       phy_FinishSwChnlNow(dev,channel);\r
+       \r
+       priv->SwChnlInProgress = false;\r
+}\r
+\r
+static bool\r
+phy_SwChnlStepByStep(\r
+       struct net_device* dev,\r
+       u8              channel,\r
+       u8              *stage,\r
+       u8              *step,\r
+       u32             *delay\r
+       )\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       SwChnlCmd                               PreCommonCmd[MAX_PRECMD_CNT];\r
+       u32                                     PreCommonCmdCnt;\r
+       SwChnlCmd                               PostCommonCmd[MAX_POSTCMD_CNT];\r
+       u32                                     PostCommonCmdCnt;\r
+       SwChnlCmd                               RfDependCmd[MAX_RFDEPENDCMD_CNT];\r
+       u32                                     RfDependCmdCnt;\r
+       SwChnlCmd                               *CurrentCmd = NULL;     \r
+       u8                                      eRFPath;        \r
+       u16                                     u2Channel = 0;\r
+       \r
+       RT_TRACE(COMP_CH, "===========>%s(), channel:%d, stage:%d, step:%d\n", __FUNCTION__, channel, *stage, *step);           \r
+       if (!IsLegalChannel(priv->rtllib, channel))\r
+       {\r
+               RT_TRACE(COMP_ERR, "=============>set to illegal channel:%d\n", channel);\r
+               return true; 
+       }               \r
+\r
+       \r
+       PreCommonCmdCnt = 0;\r
+       phy_SetSwChnlCmdArray(PreCommonCmd, PreCommonCmdCnt++, MAX_PRECMD_CNT, \r
+                               CmdID_SetTxPowerLevel, 0, 0, 0);\r
+       phy_SetSwChnlCmdArray(PreCommonCmd, PreCommonCmdCnt++, MAX_PRECMD_CNT, \r
+                               CmdID_End, 0, 0, 0);\r
+       \r
+       PostCommonCmdCnt = 0;\r
+\r
+       phy_SetSwChnlCmdArray(PostCommonCmd, PostCommonCmdCnt++, MAX_POSTCMD_CNT, \r
+                               CmdID_End, 0, 0, 0);\r
+       \r
+       RfDependCmdCnt = 0;\r
+       switch( priv->rf_chip )\r
+       {\r
+               case RF_8225:           \r
+               if (channel < 1 || channel > 14)\r
+                       RT_TRACE(COMP_ERR, "illegal channel for zebra:%d\n", channel);\r
+               phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT, \r
+                       CmdID_RF_WriteReg, rRfChannel, channel, 10);\r
+               phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT, \r
+               CmdID_End, 0, 0, 0);\r
+               break;  \r
+               \r
+       case RF_8256:\r
+               if (channel < 1 || channel > 14)\r
+                       RT_TRACE(COMP_ERR, "illegal channel for zebra:%d\n", channel);\r
+               phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT, \r
+                       CmdID_RF_WriteReg, rRfChannel, channel, 10);\r
+               phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT, \r
+               CmdID_End, 0, 0, 0);\r
+               break;\r
+               \r
+       case RF_6052:\r
+               if (channel < 1 || channel > 14)\r
+                       RT_TRACE(COMP_ERR, "illegal channel for zebra:%d\n", channel);\r
+               \r
+               u2Channel = channel;\r
+               \r
+               switch(priv->CurrentChannelBW)\r
+               {\r
+               case HT_CHANNEL_WIDTH_20:\r
+                       u2Channel |= BIT10;\r
+                       break;\r
+                       \r
+               case HT_CHANNEL_WIDTH_20_40:\r
+                       u2Channel &= ~BIT10;\r
+                       break;\r
+               default:\r
+                       u2Channel |= BIT10; 
+                       break;\r
+               }       \r
+               u2Channel |= BIT12|BIT13|BIT14;\r
+               \r
+               phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT, \r
+                       CmdID_RF_WriteReg, RF_CHNLBW, u2Channel, 10);\r
+               phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT, \r
+                       CmdID_End, 0, 0, 0);            \r
+               break;\r
+\r
+       case RF_8258:\r
+               break;\r
+               \r
+       default:\r
+               return false;\r
+               break;\r
+       }\r
+\r
+       \r
+       do{\r
+               switch(*stage)\r
+               {\r
+               case 0:\r
+                       CurrentCmd=&PreCommonCmd[*step];\r
+                       break;\r
+               case 1:\r
+                       CurrentCmd=&RfDependCmd[*step];\r
+                       break;\r
+               case 2:\r
+                       CurrentCmd=&PostCommonCmd[*step];\r
+                       break;\r
+               }\r
+               \r
+               if(CurrentCmd->CmdID==CmdID_End)\r
+               {\r
+                       if((*stage)==2)\r
+                       {\r
+                               return true;\r
+                       }\r
+                       else\r
+                       {\r
+                               (*stage)++;\r
+                               (*step)=0;\r
+                               continue;\r
+                       }\r
+               }\r
+               \r
+               switch(CurrentCmd->CmdID)\r
+               {\r
+               case CmdID_SetTxPowerLevel:\r
+#ifndef CONFIG_MP\r
+                               rtl8192_phy_setTxPower(dev,channel);\r
+#endif\r
+                       break;\r
+               case CmdID_WritePortUlong:\r
+                       write_nic_dword(dev, CurrentCmd->Para1, CurrentCmd->Para2);\r
+                       break;\r
+               case CmdID_WritePortUshort:\r
+                       write_nic_word(dev, CurrentCmd->Para1, (u16)CurrentCmd->Para2);\r
+                       break;\r
+               case CmdID_WritePortUchar:\r
+                       write_nic_byte(dev, CurrentCmd->Para1, (u8)CurrentCmd->Para2);\r
+                       break;\r
+               case CmdID_RF_WriteReg: 
+                       for(eRFPath = 0; eRFPath <priv->NumTotalRFPath; eRFPath++)\r
+                       {\r
+                               if (IS_HARDWARE_TYPE_8192SE(dev)) {\r
+#ifdef CONFIG_FW_SETCHAN\r
+                                       u32 rf_bw = ((priv->RfRegChnlVal[eRFPath] & 0xfffffc00) | (CurrentCmd->Para2 & 0xFF00));\r
+#endif\r
+                                       priv->RfRegChnlVal[eRFPath] = ((priv->RfRegChnlVal[eRFPath] & 0xfffffc00) | CurrentCmd->Para2);\r
+\r
+#ifdef CONFIG_FW_SETCHAN\r
+                                       rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, CurrentCmd->Para1, bRFRegOffsetMask, rf_bw);                              \r
+#else\r
+                                       rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, CurrentCmd->Para1, bRFRegOffsetMask, priv->RfRegChnlVal[eRFPath]);                                \r
+#endif\r
+                               } else {\r
+                                       rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, CurrentCmd->Para1, bRFRegOffsetMask, (CurrentCmd->Para2));\r
+                               }\r
+                       }\r
+                       break;\r
+                default:\r
+                        break;\r
+               }\r
+               \r
+               break;\r
+       }while(true);\r
+\r
+       (*delay)=CurrentCmd->msDelay;\r
+       (*step)++;\r
+       RT_TRACE(COMP_CH, "<===========%s(), channel:%d, stage:%d, step:%d\n", __FUNCTION__, channel, *stage, *step);           \r
+       return false;\r
+}\r
+\r
+static bool\r
+phy_SetSwChnlCmdArray(\r
+       SwChnlCmd*              CmdTable,\r
+       u32                     CmdTableIdx,\r
+       u32                     CmdTableSz,\r
+       SwChnlCmdID             CmdID,\r
+       u32                     Para1,\r
+       u32                     Para2,\r
+       u32                     msDelay\r
+       )\r
+{\r
+       SwChnlCmd* pCmd;\r
+\r
+       if(CmdTable == NULL)\r
+       {\r
+               return false;\r
+       }\r
+       if(CmdTableIdx >= CmdTableSz)\r
+       {\r
+               return false;\r
+       }\r
+\r
+       pCmd = CmdTable + CmdTableIdx;\r
+       pCmd->CmdID = CmdID;\r
+       pCmd->Para1 = Para1;\r
+       pCmd->Para2 = Para2;\r
+       pCmd->msDelay = msDelay;\r
+\r
+       return true;\r
+}\r
+\r
+static void\r
+phy_FinishSwChnlNow(   
+       struct net_device* dev,\r
+       u8              channel\r
+               )\r
+{\r
+       struct r8192_priv       *priv = rtllib_priv(dev);\r
+       u32                     delay;\r
+  \r
+       while(!phy_SwChnlStepByStep(dev,channel,&priv->SwChnlStage,&priv->SwChnlStep,&delay))\r
+       {\r
+               if(delay>0)\r
+                       mdelay(delay);\r
+#ifdef _RTL8192_EXT_PATCH_\r
+               if((!priv->up) && (!priv->mesh_up))\r
+#else\r
+               if(!priv->up)\r
+#endif\r
+                       break;\r
+       }\r
+}\r
+\r
+#ifdef TO_DO_LIST\r
+extern VOID\r
+PHY_SetMonitorMode8192S(\r
+       IN      PADAPTER                        pAdapter,\r
+       IN      BOOLEAN                         bEnableMonitorMode\r
+       )\r
+{\r
+       HAL_DATA_TYPE           *pHalData       = GET_HAL_DATA(pAdapter);\r
+       BOOLEAN                         bFilterOutNonAssociatedBSSID = false;\r
+\r
+       if(bEnableMonitorMode)\r
+       {\r
+               bFilterOutNonAssociatedBSSID = false;\r
+               RT_TRACE(COMP_RM, DBG_LOUD, ("PHY_SetMonitorMode8192S(): enable monitor mode\n"));\r
+\r
+               pHalData->bInMonitorMode = true;\r
+               pAdapter->HalFunc.AllowAllDestAddrHandler(pAdapter, true, true);\r
+               pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_CECHK_BSSID, (pu1Byte)&bFilterOutNonAssociatedBSSID);\r
+       }\r
+       else\r
+       {\r
+               bFilterOutNonAssociatedBSSID = true;\r
+               RT_TRACE(COMP_RM, DBG_LOUD, ("PHY_SetMonitorMode8192S(): disable monitor mode\n"));\r
+\r
+               pAdapter->HalFunc.AllowAllDestAddrHandler(pAdapter, false, true);\r
+               pHalData->bInMonitorMode = false;\r
+               pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_CECHK_BSSID, (pu1Byte)&bFilterOutNonAssociatedBSSID);\r
+       }\r
+}\r
+#endif\r
+\r
+\r
+u8 rtl8192_phy_CheckIsLegalRFPath(struct net_device* dev, u32 eRFPath)\r
+{\r
+       bool                            rtValue = true;\r
+\r
+#if 0  \r
+       if (priv->rf_type == RF_1T2R && eRFPath != RF90_PATH_A)\r
+       {               \r
+               rtValue = false;\r
+       }\r
+       if (priv->rf_type == RF_1T2R && eRFPath != RF90_PATH_A)\r
+       {\r
+\r
+       }\r
+#endif\r
+       return  rtValue;\r
+\r
+}      /* PHY_CheckIsLegalRfPath8192S */\r
+\r
+\r
+\r
+void   \r
+PHY_IQCalibrate(       struct net_device* dev)\r
+{\r
+       u32                             i, reg;\r
+       u32                             old_value;\r
+       long                            X, Y, TX0[4];\r
+       u32                             TXA[4];\r
+       \r
+\r
+       for (i = 0; i < 10; i++)\r
+       {\r
+               rtl8192_setBBreg(dev, 0xc04, bMaskDWord, 0x00a05430);\r
+               udelay(5);\r
+               rtl8192_setBBreg(dev, 0xc08, bMaskDWord, 0x000800e4);\r
+               udelay(5);\r
+               rtl8192_setBBreg(dev, 0xe28, bMaskDWord, 0x80800000);\r
+               udelay(5);\r
+               rtl8192_setBBreg(dev, 0xe40, bMaskDWord, 0x02140148);\r
+               udelay(5);\r
+               rtl8192_setBBreg(dev, 0xe44, bMaskDWord, 0x681604a2);\r
+               udelay(5);\r
+               rtl8192_setBBreg(dev, 0xe4c, bMaskDWord, 0x000028d1);\r
+               udelay(5);\r
+               rtl8192_setBBreg(dev, 0xe60, bMaskDWord, 0x0214014d);\r
+               udelay(5);\r
+               rtl8192_setBBreg(dev, 0xe64, bMaskDWord, 0x281608ba);\r
+               udelay(5);\r
+               rtl8192_setBBreg(dev, 0xe6c, bMaskDWord, 0x000028d1);\r
+               udelay(5);\r
+               rtl8192_setBBreg(dev, 0xe48, bMaskDWord, 0xfb000001);\r
+               udelay(5);\r
+               rtl8192_setBBreg(dev, 0xe48, bMaskDWord, 0xf8000001);\r
+               udelay(2000);\r
+               rtl8192_setBBreg(dev, 0xc04, bMaskDWord, 0x00a05433);\r
+               udelay(5);\r
+               rtl8192_setBBreg(dev, 0xc08, bMaskDWord, 0x000000e4);\r
+               udelay(5);\r
+               rtl8192_setBBreg(dev, 0xe28, bMaskDWord, 0x0);          \r
+\r
+       \r
+               reg = rtl8192_QueryBBReg(dev, 0xeac, bMaskDWord);\r
+\r
+               if (!(reg&(BIT27|BIT28|BIT30|BIT31)))\r
+               {\r
+                       old_value = (rtl8192_QueryBBReg(dev, 0xc80, bMaskDWord) & 0x3FF);\r
+\r
+                       X = (rtl8192_QueryBBReg(dev, 0xe94, bMaskDWord) & 0x03FF0000)>>16;\r
+                       TXA[RF90_PATH_A] = (X * old_value)/0x100;\r
+                       reg = rtl8192_QueryBBReg(dev, 0xc80, bMaskDWord);\r
+                       reg = (reg & 0xFFFFFC00) | (u32)TXA[RF90_PATH_A];\r
+                       rtl8192_setBBreg(dev, 0xc80, bMaskDWord, reg);\r
+                       udelay(5);\r
+\r
+                       Y = ( rtl8192_QueryBBReg(dev, 0xe9C, bMaskDWord) & 0x03FF0000)>>16;\r
+                       TX0[RF90_PATH_C] = ((Y * old_value)/0x100);\r
+                       reg = rtl8192_QueryBBReg(dev, 0xc80, bMaskDWord);\r
+                       reg = (reg & 0xffc0ffff) |((u32) (TX0[RF90_PATH_C]&0x3F)<<16);                  \r
+                       rtl8192_setBBreg(dev, 0xc80, bMaskDWord, reg);\r
+                       reg = rtl8192_QueryBBReg(dev, 0xc94, bMaskDWord);               \r
+                       reg = (reg & 0x0fffffff) |(((Y&0x3c0)>>6)<<28);\r
+                       rtl8192_setBBreg(dev, 0xc94, bMaskDWord, reg);\r
+                       udelay(5);\r
+\r
+                       reg = rtl8192_QueryBBReg(dev, 0xc14, bMaskDWord);\r
+                       X = (rtl8192_QueryBBReg(dev, 0xea4, bMaskDWord) & 0x03FF0000)>>16;                      \r
+                       reg = (reg & 0xFFFFFC00) |X;\r
+                       rtl8192_setBBreg(dev, 0xc14, bMaskDWord, reg);\r
+                       Y = (rtl8192_QueryBBReg(dev, 0xeac, bMaskDWord) & 0x003F0000)>>16;\r
+                       reg = (reg & 0xFFFF03FF) |Y<<10;\r
+                       rtl8192_setBBreg(dev, 0xc14, bMaskDWord, reg);\r
+                       udelay(5);\r
+                       old_value = (rtl8192_QueryBBReg(dev, 0xc88, bMaskDWord) & 0x3FF);\r
+                       \r
+                       X = (rtl8192_QueryBBReg(dev, 0xeb4, bMaskDWord) & 0x03FF0000)>>16;\r
+                       reg = rtl8192_QueryBBReg(dev, 0xc88, bMaskDWord);\r
+                       TXA[RF90_PATH_A] = (X * old_value) / 0x100;\r
+                       reg = (reg & 0xFFFFFC00) | TXA[RF90_PATH_A];\r
+                       rtl8192_setBBreg(dev, 0xc88, bMaskDWord, reg);\r
+                       udelay(5);\r
+\r
+                       Y = (rtl8192_QueryBBReg(dev, 0xebc, bMaskDWord)& 0x03FF0000)>>16;\r
+                       TX0[RF90_PATH_C] = ((Y * old_value)/0x100);\r
+                       reg = rtl8192_QueryBBReg(dev, 0xc88, bMaskDWord);\r
+                       reg = (reg & 0xffc0ffff) |( (TX0[RF90_PATH_C]&0x3F)<<16);\r
+                       rtl8192_setBBreg(dev, 0xc88, bMaskDWord, reg);\r
+                       reg = rtl8192_QueryBBReg(dev, 0xc9c, bMaskDWord);\r
+                       reg = (reg & 0x0fffffff) |(((Y&0x3c0)>>6)<<28);\r
+                       rtl8192_setBBreg(dev, 0xc9c, bMaskDWord, reg);\r
+                       udelay(5);\r
+\r
+                       reg = rtl8192_QueryBBReg(dev, 0xc1c, bMaskDWord);\r
+                       X = (rtl8192_QueryBBReg(dev, 0xec4, bMaskDWord) & 0x03FF0000)>>16;                      \r
+                       reg = (reg & 0xFFFFFC00) |X;\r
+                       rtl8192_setBBreg(dev, 0xc1c, bMaskDWord, reg);\r
+                       \r
+                       Y = (rtl8192_QueryBBReg(dev, 0xecc, bMaskDWord) & 0x003F0000)>>16;\r
+                       reg = (reg & 0xFFFF03FF) |Y<<10;\r
+                       rtl8192_setBBreg(dev, 0xc1c, bMaskDWord, reg);\r
+                       udelay(5);\r
+                       \r
+                       RT_TRACE(COMP_INIT, "PHY_IQCalibrate OK\n");\r
+                       break;\r
+               }\r
+\r
+       }\r
+       \r
+       \r
+\r
+\r
+}\r
+\r
+extern void PHY_IQCalibrateBcut(struct net_device* dev)\r
+{\r
+       u32                             i, reg;\r
+       u32                             old_value;\r
+       long                            X, Y, TX0[4];\r
+       u32                             TXA[4]; \r
+       u32                             calibrate_set[13] = {0};\r
+       u32                             load_value[13];\r
+       u8                      RfPiEnable=0;\r
+       \r
+       /*\r
+       0xee0[31:0]=0x3fed92fb;   \r
+       0xedc[31:0] =0x3fed92fb;   \r
+       0xe70[31:0] =0x3fed92fb;   \r
+       0xe74[31:0] =0x3fed92fb;   \r
+       0xe78[31:0] =0x3fed92fb;   \r
+       0xe7c[31:0]= 0x3fed92fb;   \r
+       0xe80[31:0]= 0x3fed92fb;   \r
+       0xe84[31:0]= 0x3fed92fb; \r
+       0xe88[31:0]= 0x3fed92fb;  \r
+       0xe8c[31:0]= 0x3fed92fb;   \r
+       0xed0[31:0]= 0x3fed92fb;   \r
+       0xed4[31:0]= 0x3fed92fb;  \r
+       0xed8[31:0]= 0x3fed92fb;\r
+       */\r
+       calibrate_set [0] = 0xee0;\r
+       calibrate_set [1] = 0xedc;\r
+       calibrate_set [2] = 0xe70;\r
+       calibrate_set [3] = 0xe74;\r
+       calibrate_set [4] = 0xe78;\r
+       calibrate_set [5] = 0xe7c;\r
+       calibrate_set [6] = 0xe80;\r
+       calibrate_set [7] = 0xe84;\r
+       calibrate_set [8] = 0xe88;\r
+       calibrate_set [9] = 0xe8c;\r
+       calibrate_set [10] = 0xed0;\r
+       calibrate_set [11] = 0xed4;\r
+       calibrate_set [12] = 0xed8;\r
+       for (i = 0; i < 13; i++)\r
+       {\r
+               load_value[i] = rtl8192_QueryBBReg(dev, calibrate_set[i], bMaskDWord);\r
+               rtl8192_setBBreg(dev, calibrate_set[i], bMaskDWord, 0x3fed92fb);                \r
+               \r
+       }\r
+       \r
+       RfPiEnable = (u8)rtl8192_QueryBBReg(dev, rFPGA0_XA_HSSIParameter1, BIT8);\r
+       for (i = 0; i < 10; i++)\r
+       {\r
+               RT_TRACE(COMP_INIT, "IQK -%d\n", i);    \r
+               if (!RfPiEnable)        
+               {\r
+                       rtl8192_setBBreg(dev, 0x820, bMaskDWord, 0x01000100);\r
+                       rtl8192_setBBreg(dev, 0x828, bMaskDWord, 0x01000100);\r
+               }\r
+       \r
+               rtl8192_setBBreg(dev, 0xc04, bMaskDWord, 0x00a05430);\r
+               udelay(5);\r
+               rtl8192_setBBreg(dev, 0xc08, bMaskDWord, 0x000800e4);\r
+               udelay(5);\r
+               rtl8192_setBBreg(dev, 0xe28, bMaskDWord, 0x80800000);\r
+               udelay(5);\r
+               rtl8192_setBBreg(dev, 0xe40, bMaskDWord, 0x02140102);\r
+               udelay(5);\r
+               rtl8192_setBBreg(dev, 0xe44, bMaskDWord, 0x681604c2);\r
+               udelay(5);\r
+               rtl8192_setBBreg(dev, 0xe4c, bMaskDWord, 0x000028d1);\r
+               udelay(5);\r
+               rtl8192_setBBreg(dev, 0xe60, bMaskDWord, 0x02140102);\r
+               udelay(5);\r
+               rtl8192_setBBreg(dev, 0xe64, bMaskDWord, 0x28160d05);\r
+               udelay(5);\r
+               rtl8192_setBBreg(dev, 0xe48, bMaskDWord, 0xfb000000);\r
+               udelay(5);\r
+               rtl8192_setBBreg(dev, 0xe48, bMaskDWord, 0xf8000000);\r
+               udelay(5);\r
+\r
+               udelay(2000);\r
+\r
+               rtl8192_setBBreg(dev, 0xe6c, bMaskDWord, 0x020028d1);\r
+               udelay(5);\r
+               rtl8192_setBBreg(dev, 0xe48, bMaskDWord, 0xfb000000);\r
+               udelay(5);\r
+               rtl8192_setBBreg(dev, 0xe48, bMaskDWord, 0xf8000000);\r
+\r
+               udelay(2000);\r
+\r
+               rtl8192_setBBreg(dev, 0xc04, bMaskDWord, 0x00a05433);\r
+               udelay(5);\r
+               rtl8192_setBBreg(dev, 0xc08, bMaskDWord, 0x000000e4);\r
+               udelay(5);\r
+               rtl8192_setBBreg(dev, 0xe28, bMaskDWord, 0x0);          \r
+\r
+               if (!RfPiEnable)        
+               {\r
+                       rtl8192_setBBreg(dev, 0x820, bMaskDWord, 0x01000000);\r
+                       rtl8192_setBBreg(dev, 0x828, bMaskDWord, 0x01000000);\r
+               }\r
+\r
+       \r
+               reg = rtl8192_QueryBBReg(dev, 0xeac, bMaskDWord);\r
+\r
+               if (!(reg&(BIT27|BIT28|BIT30|BIT31)))\r
+               {                       \r
+                       old_value = (rtl8192_QueryBBReg(dev, 0xc80, bMaskDWord) & 0x3FF);\r
+\r
+                       X = (rtl8192_QueryBBReg(dev, 0xe94, bMaskDWord) & 0x03FF0000)>>16;\r
+                       TXA[RF90_PATH_A] = (X * old_value)/0x100;\r
+                       reg = rtl8192_QueryBBReg(dev, 0xc80, bMaskDWord);\r
+                       reg = (reg & 0xFFFFFC00) | (u32)TXA[RF90_PATH_A];\r
+                       rtl8192_setBBreg(dev, 0xc80, bMaskDWord, reg);\r
+                       udelay(5);\r
+\r
+                       Y = ( rtl8192_QueryBBReg(dev, 0xe9C, bMaskDWord) & 0x03FF0000)>>16;\r
+                       TX0[RF90_PATH_C] = ((Y * old_value)/0x100);\r
+                       reg = rtl8192_QueryBBReg(dev, 0xc80, bMaskDWord);\r
+                       reg = (reg & 0xffc0ffff) |((u32) (TX0[RF90_PATH_C]&0x3F)<<16);                  \r
+                       rtl8192_setBBreg(dev, 0xc80, bMaskDWord, reg);\r
+                       reg = rtl8192_QueryBBReg(dev, 0xc94, bMaskDWord);               \r
+                       reg = (reg & 0x0fffffff) |(((Y&0x3c0)>>6)<<28);\r
+                       rtl8192_setBBreg(dev, 0xc94, bMaskDWord, reg);\r
+                       udelay(5);\r
+\r
+                       reg = rtl8192_QueryBBReg(dev, 0xc14, bMaskDWord);\r
+                       X = (rtl8192_QueryBBReg(dev, 0xea4, bMaskDWord) & 0x03FF0000)>>16;                      \r
+                       reg = (reg & 0xFFFFFC00) |X;\r
+                       rtl8192_setBBreg(dev, 0xc14, bMaskDWord, reg);\r
+                       Y = (rtl8192_QueryBBReg(dev, 0xeac, bMaskDWord) & 0x003F0000)>>16;\r
+                       reg = (reg & 0xFFFF03FF) |Y<<10;\r
+                       rtl8192_setBBreg(dev, 0xc14, bMaskDWord, reg);\r
+                       udelay(5);\r
+                       old_value = (rtl8192_QueryBBReg(dev, 0xc88, bMaskDWord) & 0x3FF);\r
+                       \r
+                       X = (rtl8192_QueryBBReg(dev, 0xeb4, bMaskDWord) & 0x03FF0000)>>16;\r
+                       reg = rtl8192_QueryBBReg(dev, 0xc88, bMaskDWord);\r
+                       TXA[RF90_PATH_A] = (X * old_value) / 0x100;\r
+                       reg = (reg & 0xFFFFFC00) | TXA[RF90_PATH_A];\r
+                       rtl8192_setBBreg(dev, 0xc88, bMaskDWord, reg);\r
+                       udelay(5);\r
+\r
+                       Y = (rtl8192_QueryBBReg(dev, 0xebc, bMaskDWord)& 0x03FF0000)>>16;\r
+                       TX0[RF90_PATH_C] = ((Y * old_value)/0x100);\r
+                       reg = rtl8192_QueryBBReg(dev, 0xc88, bMaskDWord);\r
+                       reg = (reg & 0xffc0ffff) |( (TX0[RF90_PATH_C]&0x3F)<<16);\r
+                       rtl8192_setBBreg(dev, 0xc88, bMaskDWord, reg);\r
+                       reg = rtl8192_QueryBBReg(dev, 0xc9c, bMaskDWord);\r
+                       reg = (reg & 0x0fffffff) |(((Y&0x3c0)>>6)<<28);\r
+                       rtl8192_setBBreg(dev, 0xc9c, bMaskDWord, reg);\r
+                       udelay(5);\r
+\r
+                       reg = rtl8192_QueryBBReg(dev, 0xc1c, bMaskDWord);\r
+                       X = (rtl8192_QueryBBReg(dev, 0xec4, bMaskDWord) & 0x03FF0000)>>16;                      \r
+                       reg = (reg & 0xFFFFFC00) |X;\r
+                       rtl8192_setBBreg(dev, 0xc1c, bMaskDWord, reg);\r
+                       \r
+                       Y = (rtl8192_QueryBBReg(dev, 0xecc, bMaskDWord) & 0x003F0000)>>16;\r
+                       reg = (reg & 0xFFFF03FF) |Y<<10;\r
+                       rtl8192_setBBreg(dev, 0xc1c, bMaskDWord, reg);\r
+                       udelay(5);\r
+                       \r
+                       RT_TRACE(COMP_INIT, "PHY_IQCalibrate OK\n");\r
+                       break;\r
+               }\r
+\r
+       }\r
+       \r
+       for (i = 0; i < 13; i++)\r
+               rtl8192_setBBreg(dev, calibrate_set[i], bMaskDWord, load_value[i]);\r
+       \r
+       \r
+       \r
+\r
+\r
+}      
+\r
+#define HalGetFirmwareVerison(priv) (priv->pFirmware->FirmwareVersion )\r
+bool rtl8192se_set_fw_cmd(struct net_device* dev, FW_CMD_IO_TYPE               FwCmdIO)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       u32     FwParam = FW_CMD_IO_PARA_QUERY(priv);\r
+       u16     FwCmdMap = FW_CMD_IO_QUERY(priv);\r
+       bool    bPostProcessing = false;\r
+\r
+       RT_TRACE(COMP_CMD, "-->HalSetFwCmd8192S(): Set FW Cmd(%#x), SetFwCmdInProgress(%d)\n", FwCmdIO, priv->SetFwCmdInProgress);\r
+\r
+\r
+\r
+\r
+\r
+       RT_TRACE(COMP_CMD, "-->HalSetFwCmd8192S(): Set FW Cmd(%#x), SetFwCmdInProgress(%d)\n", \r
+               FwCmdIO, priv->SetFwCmdInProgress);\r
+\r
+       do{\r
+\r
+               if(HalGetFirmwareVerison(priv) >= 0x35)\r
+       {\r
+                       switch(FwCmdIO)\r
+                       {\r
+                               case FW_CMD_RA_REFRESH_N:\r
+                                       FwCmdIO = FW_CMD_RA_REFRESH_N_COMB;\r
+                                       break;\r
+                               case FW_CMD_RA_REFRESH_BG:\r
+                                       FwCmdIO = FW_CMD_RA_REFRESH_BG_COMB;\r
+                                       break;\r
+                               default:\r
+                                       break;\r
+                       }\r
+               }\r
+               else\r
+               {                       \r
+                       if((FwCmdIO == FW_CMD_IQK_ENABLE) ||\r
+                               (FwCmdIO == FW_CMD_RA_REFRESH_N) ||\r
+                               (FwCmdIO == FW_CMD_RA_REFRESH_BG))\r
+                       {\r
+                               bPostProcessing = true;\r
+                               break;\r
+                       }\r
+       }\r
+\r
+               if(HalGetFirmwareVerison(priv) >= 0x3E)\r
+       {\r
+                       if(FwCmdIO == FW_CMD_CTRL_DM_BY_DRIVER)\r
+                               FwCmdIO = FW_CMD_CTRL_DM_BY_DRIVER_NEW;\r
+       }\r
+\r
+\r
+               switch(FwCmdIO)\r
+       {\r
+\r
+                       case FW_CMD_RA_INIT:\r
+                               RT_TRACE(COMP_CMD, "[FW CMD] [New Version] RA init!!\n");\r
+                               FwCmdMap |= FW_RA_INIT_CTL;\r
+                               FW_CMD_IO_SET(priv, FwCmdMap);  \r
+                               FW_CMD_IO_CLR(priv, FW_RA_INIT_CTL);     
+                               break;\r
+\r
+                       case FW_CMD_DIG_DISABLE:\r
+                               RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set DIG disable!!\n");\r
+                               FwCmdMap &= ~FW_DIG_ENABLE_CTL;\r
+                               FW_CMD_IO_SET(priv, FwCmdMap);                  \r
+                               break;\r
+                               \r
+                       case FW_CMD_DIG_ENABLE:\r
+                       case FW_CMD_DIG_RESUME:\r
+                               if(!(priv->DMFlag & HAL_DM_DIG_DISABLE))\r
+                               {\r
+                                       RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set DIG enable or resume!!\n");\r
+                                       FwCmdMap |= (FW_DIG_ENABLE_CTL|FW_SS_CTL);\r
+                                       FW_CMD_IO_SET(priv, FwCmdMap);  \r
+       }\r
+                               break;\r
+\r
+                       case FW_CMD_DIG_HALT:\r
+                               RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set DIG halt!!\n");\r
+                               FwCmdMap &= ~(FW_DIG_ENABLE_CTL|FW_SS_CTL);\r
+                               FW_CMD_IO_SET(priv, FwCmdMap);                          \r
+                               break;\r
+                               \r
+                       case FW_CMD_TXPWR_TRACK_THERMAL:\r
+       {\r
+                                       u8      ThermalVal = 0;\r
+                                       FwCmdMap |= FW_PWR_TRK_CTL;\r
+                                       FwParam &= FW_PWR_TRK_PARAM_CLR; 
+                                       ThermalVal = priv->ThermalValue;\r
+                                       FwParam |= ((ThermalVal<<24) |(priv->ThermalMeter[0]<<16));                                     \r
+                                       RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set TxPwr tracking!! FwCmdMap(%#x), FwParam(%#x)\n", FwCmdMap, FwParam);\r
+                                       FW_CMD_PARA_SET(priv, FwParam);\r
+                                       FW_CMD_IO_SET(priv, FwCmdMap);\r
+                                       FW_CMD_IO_CLR(priv, FW_PWR_TRK_CTL);     
+       }\r
+                               break;\r
+                               \r
+                       case FW_CMD_RA_REFRESH_N_COMB:\r
+                               FwCmdMap |= FW_RA_N_CTL;\r
+                               FwCmdMap &= ~(FW_RA_BG_CTL |FW_RA_INIT_CTL);
+                               FwParam &= FW_RA_PARAM_CLR; 
+                               if(!(priv->rtllib->pHTInfo->IOTRaFunc & HT_IOT_RAFUNC_DISABLE_ALL))\r
+                                       FwParam |= ((priv->rtllib->pHTInfo->IOTRaFunc)&0xf);\r
+                               FwParam |= ((priv->rtllib->pHTInfo->IOTPeer & 0xf) <<4);\r
+                               RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set RA/IOT Comb in n mode!! FwCmdMap(%#x), FwParam(%#x)\n", FwCmdMap, FwParam);\r
+                               FW_CMD_PARA_SET(priv, FwParam);\r
+                               FW_CMD_IO_SET(priv, FwCmdMap);  \r
+                               FW_CMD_IO_CLR(priv, FW_RA_N_CTL); 
+                               break;  \r
+\r
+                       case FW_CMD_RA_REFRESH_BG_COMB:                         \r
+                               FwCmdMap |= FW_RA_BG_CTL;\r
+                               FwCmdMap &= ~(FW_RA_N_CTL|FW_RA_INIT_CTL); 
+                               FwParam &= FW_RA_PARAM_CLR; 
+                               if(!(priv->rtllib->pHTInfo->IOTRaFunc & HT_IOT_RAFUNC_DISABLE_ALL))\r
+                                       FwParam |= ((priv->rtllib->pHTInfo->IOTRaFunc)&0xf);\r
+                               FwParam |= ((priv->rtllib->pHTInfo->IOTPeer & 0xf) <<4);\r
+                               RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set RA/IOT Comb in BG mode!! FwCmdMap(%#x), FwParam(%#x)\n", FwCmdMap, FwParam);\r
+                               FW_CMD_PARA_SET(priv, FwParam);\r
+                               FW_CMD_IO_SET(priv, FwCmdMap);  \r
+                               FW_CMD_IO_CLR(priv, FW_RA_BG_CTL); 
+                               break;\r
+\r
+                       case FW_CMD_IQK_ENABLE:\r
+                               RT_TRACE(COMP_CMD, "[FW CMD] [New Version] IQK enable.\n");\r
+                               FwCmdMap |= FW_IQK_CTL;\r
+                               FW_CMD_IO_SET(priv, FwCmdMap);  \r
+                               FW_CMD_IO_CLR(priv, FW_IQK_CTL); 
+                               break;\r
+\r
+                       case FW_CMD_CTRL_DM_BY_DRIVER_NEW:\r
+                               RT_TRACE(COMP_CMD, "[FW CMD][New Version] Inform FW driver control some DM!! FwCmdMap(%#x), FwParam(%#x)\n", FwCmdMap, FwParam);\r
+                               FwCmdMap |= FW_DRIVER_CTRL_DM_CTL;\r
+                               FW_CMD_IO_SET(priv, FwCmdMap);\r
+                               break;\r
+\r
+                       case FW_CMD_RESUME_DM_BY_SCAN:\r
+                               RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Resume DM after scan.\n");\r
+                               FwCmdMap |= (FW_DIG_ENABLE_CTL|FW_HIGH_PWR_ENABLE_CTL|FW_SS_CTL);\r
+                               \r
+                               if(priv->DMFlag & HAL_DM_DIG_DISABLE || !dm_digtable.dig_enable_flag)\r
+                                       FwCmdMap &= ~FW_DIG_ENABLE_CTL; \r
+\r
+                               if((priv->DMFlag & HAL_DM_HIPWR_DISABLE) ||\r
+                                       (priv->rtllib->pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_HIGH_POWER) ||\r
+                                       (priv->rtllib->bdynamic_txpower_enable == true))\r
+                                       FwCmdMap &= ~FW_HIGH_PWR_ENABLE_CTL;\r
+                               \r
+                               if(     (dm_digtable.Dig_Ext_Port_Stage == DIG_EXT_PORT_STAGE_0) ||\r
+                                       (dm_digtable.Dig_Ext_Port_Stage == DIG_EXT_PORT_STAGE_1))\r
+                                       FwCmdMap &= ~FW_DIG_ENABLE_CTL;\r
+                               \r
+                               FW_CMD_IO_SET(priv, FwCmdMap);          \r
+                               bPostProcessing = true;\r
+                               break;\r
+               \r
+                       case FW_CMD_PAUSE_DM_BY_SCAN:\r
+                               RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Pause DM before scan.\n");\r
+                               FwCmdMap &= ~(FW_DIG_ENABLE_CTL|FW_HIGH_PWR_ENABLE_CTL|FW_SS_CTL);\r
+                               FW_CMD_IO_SET(priv, FwCmdMap);  \r
+                               bPostProcessing = true;\r
+                               break;\r
+\r
+                       case FW_CMD_HIGH_PWR_DISABLE:\r
+                               RT_TRACE(COMP_CMD, "[FW CMD] [New Version]  Set HighPwr disable!!\n");\r
+                               FwCmdMap &= ~FW_HIGH_PWR_ENABLE_CTL;\r
+                               FW_CMD_IO_SET(priv, FwCmdMap);          \r
+                               bPostProcessing = true;\r
+                               break;                  \r
+\r
+                       case FW_CMD_HIGH_PWR_ENABLE:    \r
+                               if(((priv->rtllib->pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_HIGH_POWER)==0) &&\r
+                                       !(priv->DMFlag & HAL_DM_HIPWR_DISABLE) &&\r
+                                       (priv->rtllib->bdynamic_txpower_enable != true))\r
+                               {\r
+                                       RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set HighPwr enable!!\n");\r
+                                       FwCmdMap |= (FW_HIGH_PWR_ENABLE_CTL|FW_SS_CTL);\r
+                                       FW_CMD_IO_SET(priv, FwCmdMap);          \r
+                                       bPostProcessing = true;\r
+                               }\r
+                               break;\r
+                               \r
+                       case FW_CMD_DIG_MODE_FA:\r
+                               RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set DIG Mode to FA.\n");\r
+                               FwCmdMap |= FW_FA_CTL;\r
+                               FW_CMD_IO_SET(priv, FwCmdMap);\r
+                               break;\r
+\r
+                       case FW_CMD_DIG_MODE_SS:\r
+                               RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set DIG Mode to SS.\n");\r
+                               FwCmdMap &= ~FW_FA_CTL;\r
+                               FW_CMD_IO_SET(priv, FwCmdMap);\r
+                               break;\r
+                               \r
+                       case FW_CMD_PAPE_CONTROL:\r
+                               RT_TRACE(COMP_CMD, "[FW CMD] Set PAPE Control \n");\r
+#ifdef MERGE_TO_DO\r
+                               if(pHalData->bt_coexist.BT_PapeCtrl)\r
+                               {\r
+                                       RTPRINT(FBT, BT_TRACE, ("BT set PAPE Control to SW/HW dynamically. \n"));\r
+                                       FwCmdMap |= FW_PAPE_CTL_BY_SW_HW;\r
+                               }\r
+                               else\r
+#endif\r
+                               {\r
+                                       printk("BT set PAPE Control to SW\n");\r
+                                       FwCmdMap &= ~FW_PAPE_CTL_BY_SW_HW;\r
+                               }\r
+                               FW_CMD_IO_SET(priv, FwCmdMap);\r
+                               break;\r
+\r
+                       default:                                \r
+                               bPostProcessing = true; 
+                               break;\r
+               }\r
+       }while(false);\r
+\r
+       RT_TRACE(COMP_CMD, "[FW CMD] Current FwCmdMap(%#x)\n", priv->FwCmdIOMap);\r
+       RT_TRACE(COMP_CMD, "[FW CMD] Current FwCmdIOParam(%#x)\n", priv->FwCmdIOParam);\r
+\r
+       if(bPostProcessing && !priv->SetFwCmdInProgress)\r
+       {\r
+       priv->SetFwCmdInProgress = true;\r
+       priv->CurrentFwCmdIO = FwCmdIO; 
+       }\r
+       else\r
+       {\r
+               return false;\r
+       }\r
+\r
+#if 0\r
+#ifdef USE_WORKITEM                    \r
+       PlatformScheduleWorkItem(&(pHalData->FwCmdIOWorkItem));\r
+#else\r
+       PlatformSetTimer(Adapter, &(pHalData->SetFwCmdIOTimer), 0);\r
+#endif\r
+#endif\r
+       rtl8192_SetFwCmdIOCallback(dev);\r
+       return true;\r
+}\r
+void ChkFwCmdIoDone(struct net_device* dev)\r
+{\r
+       u16 PollingCnt = 10000;         \r
+       u32 tmpValue;\r
+       \r
+       do\r
+       {
+               \r
+               udelay(10); 
+               \r
+               tmpValue = read_nic_dword(dev, WFM5);\r
+               if(tmpValue == 0)\r
+               {\r
+                       RT_TRACE(COMP_CMD, "[FW CMD] Set FW Cmd success!!\n");\r
+                       break;\r
+               }                       \r
+               else\r
+               {\r
+                       RT_TRACE(COMP_CMD, "[FW CMD] Polling FW Cmd PollingCnt(%d)!!\n", PollingCnt);\r
+               }\r
+       }while( --PollingCnt );\r
+\r
+       if(PollingCnt == 0)\r
+       {\r
+               RT_TRACE(COMP_ERR, "[FW CMD] Set FW Cmd fail!!\n");\r
+       }\r
+}\r
+void rtl8192_SetFwCmdIOCallback(struct net_device* dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       u32             input,CurrentAID = 0;\r
+       \r
+#ifdef _RTL8192_EXT_PATCH_\r
+       if((!priv->up) && (!priv->mesh_up))\r
+#else\r
+       if(!priv->up)\r
+#endif\r
+       {\r
+               RT_TRACE(COMP_CMD, "SetFwCmdIOTimerCallback(): driver is going to unload\n");\r
+               return;\r
+       }\r
+       \r
+       RT_TRACE(COMP_CMD, "--->SetFwCmdIOTimerCallback(): Cmd(%#x), SetFwCmdInProgress(%d)\n", priv->CurrentFwCmdIO, priv->SetFwCmdInProgress);\r
+\r
+       if(HalGetFirmwareVerison(priv) >= 0x34)\r
+                        {\r
+               switch(priv->CurrentFwCmdIO)\r
+               {\r
+                       case FW_CMD_RA_REFRESH_N:\r
+                               priv->CurrentFwCmdIO = FW_CMD_RA_REFRESH_N_COMB;\r
+                       break;\r
+                       case FW_CMD_RA_REFRESH_BG:\r
+                               priv->CurrentFwCmdIO = FW_CMD_RA_REFRESH_BG_COMB;\r
+                       break;\r
+                       default:\r
+                       break;\r
+               }\r
+       }\r
+                       \r
+       switch(priv->CurrentFwCmdIO)\r
+       {\r
+\r
+               case FW_CMD_RA_RESET:\r
+                       RT_TRACE(COMP_CMD, "[FW CMD] Set RA Reset!!\n");\r
+                       write_nic_dword(dev, WFM5, FW_RA_RESET);        \r
+                       ChkFwCmdIoDone(dev);    \r
+                       break;\r
+                       \r
+               case FW_CMD_RA_ACTIVE:\r
+                       RT_TRACE(COMP_CMD, "[FW CMD] Set RA Active!!\n");\r
+                       write_nic_dword(dev, WFM5, FW_RA_ACTIVE); \r
+                       ChkFwCmdIoDone(dev);    \r
+                       break;\r
+\r
+               case FW_CMD_RA_REFRESH_N:\r
+                       RT_TRACE(COMP_CMD, "[FW CMD] Set RA n refresh!!\n");\r
+                       if(priv->rtllib->pHTInfo->IOTRaFunc & HT_IOT_RAFUNC_DISABLE_ALL)\r
+                               input = FW_RA_REFRESH;\r
+                       else\r
+                               input = FW_RA_REFRESH | (priv->rtllib->pHTInfo->IOTRaFunc << 8);\r
+                       write_nic_dword(dev, WFM5, input); \r
+                       ChkFwCmdIoDone(dev);\r
+                       write_nic_dword(dev, WFM5, FW_RA_ENABLE_RSSI_MASK); \r
+                       ChkFwCmdIoDone(dev);    \r
+                       break;\r
+                       \r
+               case FW_CMD_RA_REFRESH_BG:\r
+                       RT_TRACE(COMP_CMD, "[FW CMD] Set RA BG refresh!!\n");\r
+                       write_nic_dword(dev, WFM5, FW_RA_REFRESH); \r
+                       ChkFwCmdIoDone(dev);\r
+                       write_nic_dword(dev, WFM5, FW_RA_DISABLE_RSSI_MASK);                    \r
+                       ChkFwCmdIoDone(dev);    \r
+                       break;\r
+\r
+               case FW_CMD_RA_REFRESH_N_COMB:\r
+                       RT_TRACE(COMP_CMD, "[FW CMD] Set RA n Combo refresh!!\n");\r
+                       if(priv->rtllib->pHTInfo->IOTRaFunc & HT_IOT_RAFUNC_DISABLE_ALL)\r
+                               input = FW_RA_IOT_N_COMB;\r
+                       else\r
+                               input = FW_RA_IOT_N_COMB | (((priv->rtllib->pHTInfo->IOTRaFunc)&0x0f) << 8);\r
+                       input = input |((priv->rtllib->pHTInfo->IOTPeer & 0xf) <<12);\r
+                       RT_TRACE(COMP_CMD, "[FW CMD] Set RA/IOT Comb in n mode!! input(%#x)\n", input);\r
+                       write_nic_dword(dev, WFM5, input);                      \r
+                       ChkFwCmdIoDone(dev);    \r
+                       break;          \r
+\r
+               case FW_CMD_RA_REFRESH_BG_COMB:         \r
+                       RT_TRACE(COMP_CMD, "[FW CMD] Set RA B/G Combo refresh!!\n");\r
+                       if(priv->rtllib->pHTInfo->IOTRaFunc & HT_IOT_RAFUNC_DISABLE_ALL)\r
+                               input = FW_RA_IOT_BG_COMB;\r
+                       else\r
+                               input = FW_RA_IOT_BG_COMB | (((priv->rtllib->pHTInfo->IOTRaFunc)&0x0f) << 8);\r
+                       input = input |((priv->rtllib->pHTInfo->IOTPeer & 0xf) <<12);\r
+                       RT_TRACE(COMP_CMD, "[FW CMD] Set RA/IOT Comb in B/G mode!! input(%#x)\n", input);\r
+                       write_nic_dword(dev, WFM5, input); \r
+                       ChkFwCmdIoDone(dev);    \r
+                       break;\r
+\r
+               case FW_CMD_IQK_ENABLE:\r
+                       RT_TRACE(COMP_CMD, "[FW CMD] IQK Enable!!\n");\r
+                       write_nic_dword(dev, WFM5, FW_IQK_ENABLE); \r
+                       ChkFwCmdIoDone(dev);    \r
+                       break;\r
+\r
+               case FW_CMD_PAUSE_DM_BY_SCAN:\r
+                       RT_TRACE(COMP_CMD, "[FW CMD] Pause DM by Scan!!\n");\r
+                       rtl8192_setBBreg(dev, rOFDM0_XAAGCCore1, bMaskByte0, 0x17);\r
+                       rtl8192_setBBreg(dev, rOFDM0_XBAGCCore1, bMaskByte0, 0x17);\r
+                       rtl8192_setBBreg(dev, rCCK0_CCA, bMaskByte2, 0x40);\r
+                       break;\r
+\r
+               case FW_CMD_RESUME_DM_BY_SCAN:          \r
+                       RT_TRACE(COMP_CMD, "[FW CMD] Resume DM by Scan!!\n");\r
+                       rtl8192_setBBreg(dev, rCCK0_CCA, bMaskByte2, 0x83);     \r
+                       rtl8192_phy_setTxPower(dev, priv->rtllib->current_network.channel);\r
+                       break;\r
+               \r
+               case FW_CMD_HIGH_PWR_DISABLE:\r
+                       RT_TRACE(COMP_CMD, "[FW CMD] High Pwr Disable!!\n");\r
+                       if(priv->DMFlag & HAL_DM_HIPWR_DISABLE)\r
+                               break;\r
+                       rtl8192_setBBreg(dev, rOFDM0_XAAGCCore1, bMaskByte0, 0x17);\r
+                       rtl8192_setBBreg(dev, rOFDM0_XBAGCCore1, bMaskByte0, 0x17);\r
+                       rtl8192_setBBreg(dev, rCCK0_CCA, bMaskByte2, 0x40);\r
+                       break;\r
+                       \r
+               case FW_CMD_HIGH_PWR_ENABLE:\r
+                       RT_TRACE(COMP_CMD, "[FW CMD] High Pwr Enable!!\n");\r
+                       if((priv->DMFlag & HAL_DM_HIPWR_DISABLE) ||\r
+                               (priv->rtllib->bdynamic_txpower_enable == true))\r
+                               break;\r
+                       rtl8192_setBBreg(dev, rCCK0_CCA, bMaskByte2, 0x83);                             \r
+                       break;\r
+\r
+               case FW_CMD_LPS_ENTER:\r
+                       RT_TRACE(COMP_CMD, "[FW CMD] Enter LPS mode!!\n");\r
+                       CurrentAID = priv->rtllib->assoc_id;\r
+                       write_nic_dword(dev, WFM5, (FW_LPS_ENTER| ((CurrentAID|0xc000)<<8))    );\r
+                       ChkFwCmdIoDone(dev);    \r
+                       priv->rtllib->pHTInfo->IOTAction |=  HT_IOT_ACT_DISABLE_EDCA_TURBO;\r
+                       break;\r
+\r
+               case FW_CMD_LPS_LEAVE:\r
+                       RT_TRACE(COMP_CMD, "[FW CMD] Leave LPS mode!!\n");\r
+                       write_nic_dword(dev, WFM5, FW_LPS_LEAVE );\r
+                       ChkFwCmdIoDone(dev);    \r
+                       priv->rtllib->pHTInfo->IOTAction &=  (~HT_IOT_ACT_DISABLE_EDCA_TURBO);\r
+                       break;\r
+\r
+               case FW_CMD_ADD_A2_ENTRY:\r
+                       RT_TRACE(COMP_CMD, "[FW CMD] ADD A2 entry!!\n");\r
+                       write_nic_dword(dev, WFM5, FW_ADD_A2_ENTRY);\r
+                       ChkFwCmdIoDone(dev);\r
+                       break;\r
+               \r
+               case FW_CMD_CTRL_DM_BY_DRIVER:\r
+                       RT_TRACE(COMP_CMD, "[FW CMD] Inform fw driver will do some dm at driver\n");\r
+                       write_nic_dword(dev, WFM5, FW_CTRL_DM_BY_DRIVER);\r
+                       ChkFwCmdIoDone(dev);            \r
+                       break;\r
+               case FW_CMD_CHAN_SET:\r
+                       input = FW_CHAN_SET | (((priv->chan)&0xff) << 8);\r
+                       RT_TRACE(COMP_CMD, "[FW CMD] Inform fw to set channel to %x!!, input(%#x):\n", priv->chan,input);\r
+                       write_nic_dword(dev, WFM5, input);\r
+                       ChkFwCmdIoDone(dev);            \r
+                       break;\r
+                       \r
+               default:\r
+                       break;\r
+       }\r
+       \r
+                       \r
+       ChkFwCmdIoDone(dev);            \r
+       \r
+       \r
+       priv->SetFwCmdInProgress = false;
+       RT_TRACE(COMP_CMD, "<---SetFwCmdIOWorkItemCallback()\n");\r
+}\r
+\r
+static void\r
+phy_CheckEphySwitchReady(struct net_device* dev)\r
+{\r
+       u32     delay = 100;    
+       u8      regu1;\r
+\r
+       regu1 = read_nic_byte(dev, 0x554);\r
+       while ((regu1 & BIT5) && (delay > 0))\r
+       {\r
+               regu1 = read_nic_byte(dev, 0x554);\r
+               delay--;\r
+               udelay(50);\r
+       }       \r
+       RT_TRACE(COMP_INIT, "regu1=%02x  delay = %d\n", regu1, delay);  \r
+       \r
+}      
+\r
+#ifdef TO_DO_LIST\r
+void\r
+HW_RadioGpioChk92SE(\r
+       IN      PADAPTER        pAdapter\r
+       )\r
+{\r
+       PMGNT_INFO              pMgntInfo = &(pAdapter->MgntInfo);\r
+       u1Byte                          u1Tmp = 0;\r
+       HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(pAdapter);\r
+       RT_RF_POWER_STATE       eRfPowerStateToSet;\r
+       BOOLEAN                         bActuallySet = false;\r
+\r
+#if 0\r
+       if (!RT_IN_PS_LEVEL(pAdapter, RT_RF_OFF_LEVL_PCI_D3) &&\r
+               pMgntInfo->RfOffReason != RF_CHANGE_BY_HW)\r
+       {\r
+               return;\r
+       }\r
+       \r
+               PlatformSwitchClkReq(pAdapter, 0x00);\r
+\r
+       if (RT_IN_PS_LEVEL(pAdapter, RT_RF_OFF_LEVL_PCI_D3))\r
+       {               \r
+               RT_LEAVE_D3(pAdapter, false);\r
+               RT_CLEAR_PS_LEVEL(pAdapter, RT_RF_OFF_LEVL_PCI_D3);\r
+               Power_DomainInit92SE(pAdapter);\r
+       }\r
+\r
+       PlatformEFIOWrite1Byte(pAdapter, MAC_PINMUX_CFG, (GPIOMUX_EN | GPIOSEL_GPIO));\r
+\r
+       u1Tmp = PlatformEFIORead1Byte(pAdapter, GPIO_IO_SEL);\r
+       u1Tmp &= HAL_8192S_HW_GPIO_OFF_MASK;\r
+       PlatformEFIOWrite1Byte(pAdapter, GPIO_IO_SEL, u1Tmp);\r
+\r
+       RT_TRACE(COMP_CMD, DBG_LOUD, \r
+       ("HW_RadioGpioChk92SE HW_RadioGpioChk92SE=%02x\n", HW_RadioGpioChk92SE));\r
+       \r
+       u1Tmp = PlatformEFIORead1Byte(pAdapter, GPIO_IN);\r
+\r
+       eRfPowerStateToSet = (u1Tmp & HAL_8192S_HW_GPIO_OFF_BIT) ? eRfOn : eRfOff;\r
+\r
+       if( (pHalData->bHwRadioOff == true) && (eRfPowerStateToSet == eRfOn))\r
+       {\r
+               RT_TRACE(COMP_RF, DBG_LOUD, ("HW_RadioGpioChk92SE  - HW Radio ON\n"));\r
+               pHalData->bHwRadioOff = false;\r
+               bActuallySet = true;\r
+       }\r
+       else if ( (pHalData->bHwRadioOff == false) && (eRfPowerStateToSet == eRfOff))\r
+       {\r
+               RT_TRACE(COMP_RF, DBG_LOUD, ("HW_RadioGpioChk92SE  - HW Radio OFF\n"));\r
+               pHalData->bHwRadioOff = true;\r
+               bActuallySet = true;\r
+       }\r
+                       \r
+       if(bActuallySet)\r
+       {\r
+               pHalData->bHwRfOffAction = 1;\r
+               MgntActSet_RF_State(pAdapter, eRfPowerStateToSet, RF_CHANGE_BY_HW);\r
+               DrvIFIndicateCurrentPhyStatus(pAdapter);\r
+\r
+       \r
+               {\r
+                       PMP_ADAPTER             pDevice = &(pAdapter->NdisAdapter);\r
+                       if(pDevice->RegHwSwRfOffD3 == 1 || pDevice->RegHwSwRfOffD3 == 2) 
+                               (eRfPowerStateToSet == eRfOff) ? RT_ENABLE_ASPM(pAdapter) : RT_DISABLE_ASPM(pAdapter);\r
+               }\r
+       }\r
+       RT_TRACE(COMP_RF, DBG_TRACE, ("HW_RadioGpioChk92SE() <--------- \n"));\r
+#endif\r
+}/* HW_RadioGpioChk92SE */\r
+#endif\r
+#endif 
diff --git a/ubuntu/rtl8192se/rtl8192s/r8192S_phy.h b/ubuntu/rtl8192se/rtl8192s/r8192S_phy.h
new file mode 100644 (file)
index 0000000..acd9cab
--- /dev/null
@@ -0,0 +1,202 @@
+/******************************************************************************\r
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ * The full GNU General Public License is included in this distribution in the\r
+ * file called LICENSE.\r
+ *\r
+ * Contact Information:\r
+ * wlanfae <wlanfae@realtek.com>\r
+******************************************************************************/\r
+/* Check to see if the file has been included already.  */\r
+#ifndef _R8192S_PHY_H\r
+#define _R8192S_PHY_H\r
+\r
+\r
+/*--------------------------Define Parameters-------------------------------*/\r
+#define LOOP_LIMIT                             5\r
+#define MAX_STALL_TIME                 50              
+#define AntennaDiversityValue          0x80    
+#define MAX_TXPWR_IDX_NMODE_92S        63\r
+#define Reset_Cnt_Limit                        3\r
+\r
+\r
+#define MAX_PRECMD_CNT                         16\r
+#define MAX_RFDEPENDCMD_CNT    16\r
+#define MAX_POSTCMD_CNT                16\r
+#ifdef RTL8192SE\r
+#define        SET_RTL8192SE_RF_SLEEP(dev)                                                     \\r
+{                                                                                                                                      \\r
+       u8              u1bTmp;                                                                                         \\r
+       u1bTmp = read_nic_byte (dev, LDOV12D_CTRL);             \\r
+       u1bTmp |= BIT0;                                                                                                 \\r
+       write_nic_byte(dev, LDOV12D_CTRL, u1bTmp);              \\r
+       write_nic_byte(dev, SPS1_CTRL, 0x0);                            \\r
+       write_nic_byte(dev, TXPAUSE, 0xFF);                             \\r
+       write_nic_word(dev, CMDR, 0x57FC);                              \\r
+       udelay(100);                                                                                                    \\r
+       write_nic_word(dev, CMDR, 0x77FC);                              \\r
+       write_nic_byte(dev, PHY_CCA, 0x0);                              \\r
+       udelay(10);                                                                                                     \\r
+       write_nic_word(dev, CMDR, 0x37FC);                              \\r
+       udelay(10);                                                                                                     \\r
+       write_nic_word(dev, CMDR, 0x77FC);                              \\r
+       udelay(10);                                                                                                     \\r
+       write_nic_word(dev, CMDR, 0x57FC);                              \\r
+}\r
+\r
+\r
+#endif\r
+\r
+/*--------------------------Define Parameters-------------------------------*/\r
+\r
+\r
+/*------------------------------Define structure----------------------------*/ \r
+typedef enum _SwChnlCmdID{\r
+       CmdID_End,\r
+       CmdID_SetTxPowerLevel,\r
+       CmdID_BBRegWrite10,\r
+       CmdID_WritePortUlong,\r
+       CmdID_WritePortUshort,\r
+       CmdID_WritePortUchar,\r
+       CmdID_RF_WriteReg,\r
+}SwChnlCmdID;\r
+\r
+\r
+typedef struct _SwChnlCmd{\r
+       SwChnlCmdID     CmdID;\r
+       u32                     Para1;\r
+       u32                     Para2;\r
+       u32                     msDelay;\r
+}__attribute__ ((packed)) SwChnlCmd;\r
+\r
+extern u32 rtl819XMACPHY_Array_PG[];\r
+extern u32 rtl819XPHY_REG_1T2RArray[];\r
+extern u32 rtl819XAGCTAB_Array[];\r
+extern u32 rtl819XRadioA_Array[];\r
+extern u32 rtl819XRadioB_Array[];\r
+extern u32 rtl819XRadioC_Array[];\r
+extern u32 rtl819XRadioD_Array[];\r
+\r
+typedef enum _HW90_BLOCK{\r
+       HW90_BLOCK_MAC = 0,\r
+       HW90_BLOCK_PHY0 = 1,\r
+       HW90_BLOCK_PHY1 = 2,\r
+       HW90_BLOCK_RF = 3,\r
+       HW90_BLOCK_MAXIMUM = 4, 
+}HW90_BLOCK_E, *PHW90_BLOCK_E;\r
+\r
+typedef enum _RF90_RADIO_PATH{\r
+       RF90_PATH_A = 0,                        
+       RF90_PATH_B = 1,                        
+       RF90_PATH_C = 2,                        
+       RF90_PATH_D = 3,                        
+#ifndef _RTL8192_EXT_PATCH_\r
+       RF90_PATH_MAX   = 4,                    
+#endif\r
+}RF90_RADIO_PATH_E, *PRF90_RADIO_PATH_E;\r
+#ifdef _RTL8192_EXT_PATCH_\r
+#define        RF90_PATH_MAX                   2\r
+#endif\r
+\r
+#define bMaskByte0                0xff\r
+#define bMaskByte1                0xff00\r
+#define bMaskByte2                0xff0000\r
+#define bMaskByte3                0xff000000\r
+#define bMaskHWord                0xffff0000\r
+#define bMaskLWord                0x0000ffff\r
+#define bMaskDWord                0xffffffff\r
+\r
+typedef enum _BaseBand_Config_Type{\r
+       BaseBand_Config_PHY_REG = 0,                    
+       BaseBand_Config_AGC_TAB = 1,                    
+}BaseBand_Config_Type, *PBaseBand_Config_Type;\r
+\r
+typedef enum _VERSION_8190{\r
+       VERSION_8190_BD=0x3,\r
+       VERSION_8190_BE\r
+}VERSION_8190,*PVERSION_8190;\r
+\r
+\r
+typedef enum _VERSION_8192S{\r
+       VERSION_8192S_ACUT,\r
+       VERSION_8192S_BCUT,\r
+       VERSION_8192S_CCUT\r
+}VERSION_8192S,*PVERSION_8192S;\r
+\r
+typedef enum _PHY_Rate_Tx_Power_Offset_Area{\r
+       RA_OFFSET_LEGACY_OFDM1,\r
+       RA_OFFSET_LEGACY_OFDM2,\r
+       RA_OFFSET_HT_OFDM1,\r
+       RA_OFFSET_HT_OFDM2,\r
+       RA_OFFSET_HT_OFDM3,\r
+       RA_OFFSET_HT_OFDM4,\r
+       RA_OFFSET_HT_CCK,\r
+}RA_OFFSET_AREA,*PRA_OFFSET_AREA;\r
+\r
+typedef enum _RATR_TABLE_MODE_8192S{\r
+       RATR_INX_WIRELESS_NGB = 0,\r
+       RATR_INX_WIRELESS_NG = 1,\r
+       RATR_INX_WIRELESS_NB = 2,\r
+       RATR_INX_WIRELESS_N = 3,\r
+       RATR_INX_WIRELESS_GB = 4,\r
+       RATR_INX_WIRELESS_G = 5,\r
+       RATR_INX_WIRELESS_B = 6,\r
+       RATR_INX_WIRELESS_MC = 7,\r
+       RATR_INX_WIRELESS_A = 8,\r
+}RATR_TABLE_MODE_8192S, *PRATR_TABLE_MODE_8192S;\r
+\r
+/*------------------------------Define structure----------------------------*/ \r
+\r
+\r
+/*------------------------Export global variable----------------------------*/\r
+/*------------------------Export global variable----------------------------*/\r
+\r
+\r
+/*------------------------Export Marco Definition---------------------------*/\r
+/*------------------------Export Marco Definition---------------------------*/\r
+\r
+\r
+/*--------------------------Exported Function prototype---------------------*/\r
+\r
+extern u32     rtl8192_QueryBBReg(struct net_device* dev,u32 RegAddr, u32 BitMask);\r
+extern void    rtl8192_setBBreg(struct net_device* dev,u32 RegAddr, u32 BitMask,u32 Data);\r
+extern u32     rtl8192_phy_QueryRFReg(struct net_device* dev,RF90_RADIO_PATH_E eRFPath, u32 RegAddr, u32 BitMask);\r
+extern void    rtl8192_phy_SetRFReg(struct net_device* dev,RF90_RADIO_PATH_E eRFPath, u32 RegAddr,u32 BitMask,u32 Data);\r
+\r
+bool rtl8192_phy_checkBBAndRF(struct net_device* dev, HW90_BLOCK_E CheckBlock, RF90_RADIO_PATH_E eRFPath);\r
+\r
+\r
+extern bool    PHY_MACConfig8192S(struct net_device* dev);\r
+extern bool    PHY_BBConfig8192S(struct net_device* dev);\r
+extern bool    PHY_RFConfig8192S(struct net_device* dev);\r
+\r
+extern u8      rtl8192_phy_ConfigRFWithHeaderFile(struct net_device* dev,RF90_RADIO_PATH_E eRFPath);\r
+extern void    rtl8192_SetBWMode(struct net_device* dev,HT_CHANNEL_WIDTH ChnlWidth,HT_EXTCHNL_OFFSET Offset    );\r
+extern u8      rtl8192_phy_SwChnl(struct net_device* dev,u8 channel);  \r
+extern u8      rtl8192_phy_CheckIsLegalRFPath(struct net_device* dev,u32 eRFPath       );\r
+extern void    rtl8192_BBConfig(struct net_device* dev);\r
+extern void    PHY_IQCalibrateBcut(struct net_device* dev);\r
+extern void    PHY_IQCalibrate(struct net_device* dev);\r
+extern void    PHY_GetHWRegOriginalValue(struct net_device* dev);\r
+\r
+extern void    InitialGainOperateWorkItemCallBack(void *data);\r
+void rtl8192_phy_setTxPower(struct net_device* dev, u8  channel);\r
+\r
+/*--------------------------Exported Function prototype---------------------*/\r
+bool rtl8192se_set_fw_cmd(struct net_device* dev, FW_CMD_IO_TYPE                FwCmdIO);\r
+extern void PHY_SetBeaconHwReg( struct net_device* dev, u16 BeaconInterval);\r
+void ChkFwCmdIoDone(struct net_device* dev);\r
+void PHY_SwitchEphyParameter(struct net_device* dev);\r
+bool PHY_SetRFPowerState(struct net_device* dev, RT_RF_POWER_STATE eRFPowerState);\r
+\r
+#endif 
+\r
diff --git a/ubuntu/rtl8192se/rtl8192s/r8192S_phyreg.h b/ubuntu/rtl8192se/rtl8192s/r8192S_phyreg.h
new file mode 100644 (file)
index 0000000..28e82f2
--- /dev/null
@@ -0,0 +1,954 @@
+/******************************************************************************\r
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ * The full GNU General Public License is included in this distribution in the\r
+ * file called LICENSE.\r
+ *\r
+ * Contact Information:\r
+ * wlanfae <wlanfae@realtek.com>\r
+******************************************************************************/\r
+#ifndef __INC_HAL8192SPHYREG_H\r
+#define __INC_HAL8192SPHYREG_H\r
+\r
+\r
+/*--------------------------Define Parameters-------------------------------*/\r
+\r
+\r
+\r
+\r
+#define                rPMAC_Reset                                     0x100\r
+#define                rPMAC_TxStart                                   0x104\r
+#define                rPMAC_TxLegacySIG                               0x108\r
+#define                rPMAC_TxHTSIG1                          0x10c\r
+#define                rPMAC_TxHTSIG2                          0x110\r
+#define                rPMAC_PHYDebug                          0x114\r
+#define                rPMAC_TxPacketNum                               0x118\r
+#define                rPMAC_TxIdle                                    0x11c\r
+#define                rPMAC_TxMACHeader0                      0x120\r
+#define                rPMAC_TxMACHeader1                      0x124\r
+#define                rPMAC_TxMACHeader2                      0x128\r
+#define                rPMAC_TxMACHeader3                      0x12c\r
+#define                rPMAC_TxMACHeader4                      0x130\r
+#define                rPMAC_TxMACHeader5                      0x134\r
+#define                rPMAC_TxDataType                                0x138\r
+#define                rPMAC_TxRandomSeed                      0x13c\r
+#define                rPMAC_CCKPLCPPreamble                   0x140\r
+#define                rPMAC_CCKPLCPHeader                     0x144\r
+#define                rPMAC_CCKCRC16                          0x148\r
+#define                rPMAC_OFDMRxCRC32OK                     0x170\r
+#define                rPMAC_OFDMRxCRC32Er                     0x174\r
+#define                rPMAC_OFDMRxParityEr                    0x178\r
+#define                rPMAC_OFDMRxCRC8Er                      0x17c\r
+#define                rPMAC_CCKCRxRC16Er                      0x180\r
+#define                rPMAC_CCKCRxRC32Er                      0x184\r
+#define                rPMAC_CCKCRxRC32OK                      0x188\r
+#define                rPMAC_TxStatus                                  0x18c\r
+\r
+#define                RF_BB_CMD_ADDR                          0x02c0  
+#define                RF_BB_CMD_DATA                          0x02c4  
+\r
+#define                rFPGA0_RFMOD                            0x800   
+\r
+#define                rFPGA0_TxInfo                           0x804   
+#define                rFPGA0_PSDFunction                      0x808\r
+\r
+#define                rFPGA0_TxGainStage                      0x80c   
+\r
+#define                rFPGA0_RFTiming1                        0x810   
+#define                rFPGA0_RFTiming2                        0x814\r
+\r
+#define                rFPGA0_XA_HSSIParameter1                0x820   
+#define                rFPGA0_XA_HSSIParameter2                0x824\r
+#define                rFPGA0_XB_HSSIParameter1                0x828\r
+#define                rFPGA0_XB_HSSIParameter2                0x82c\r
+#define                rFPGA0_XC_HSSIParameter1                0x830\r
+#define                rFPGA0_XC_HSSIParameter2                0x834\r
+#define                rFPGA0_XD_HSSIParameter1                0x838\r
+#define                rFPGA0_XD_HSSIParameter2                0x83c\r
+#define                rFPGA0_XA_LSSIParameter         0x840\r
+#define                rFPGA0_XB_LSSIParameter         0x844\r
+#define                rFPGA0_XC_LSSIParameter         0x848\r
+#define                rFPGA0_XD_LSSIParameter         0x84c\r
+\r
+#define                rFPGA0_RFWakeUpParameter                0x850   
+#define                rFPGA0_RFSleepUpParameter               0x854\r
+\r
+#define                rFPGA0_XAB_SwitchControl                0x858   
+#define                rFPGA0_XCD_SwitchControl                0x85c\r
+\r
+#define                rFPGA0_XA_RFInterfaceOE         0x860   
+#define                rFPGA0_XB_RFInterfaceOE         0x864\r
+#define                rFPGA0_XC_RFInterfaceOE         0x868\r
+#define                rFPGA0_XD_RFInterfaceOE         0x86c\r
+\r
+#define                rFPGA0_XAB_RFInterfaceSW                0x870   
+#define                rFPGA0_XCD_RFInterfaceSW                0x874\r
+\r
+#define                rFPGA0_XAB_RFParameter          0x878   
+#define                rFPGA0_XCD_RFParameter          0x87c\r
+\r
+#define                rFPGA0_AnalogParameter1         0x880   
+#define                rFPGA0_AnalogParameter2         0x884\r
+#define                rFPGA0_AnalogParameter3         0x888   
+#define                rFPGA0_AnalogParameter4         0x88c\r
+\r
+#define                rFPGA0_XA_LSSIReadBack          0x8a0   
+#define                rFPGA0_XB_LSSIReadBack          0x8a4\r
+#define                rFPGA0_XC_LSSIReadBack          0x8a8\r
+#define                rFPGA0_XD_LSSIReadBack          0x8ac\r
+\r
+#define                rFPGA0_PSDReport                                0x8b4   
+#define                TransceiverA_HSPI_Readback      0x8b8   
+#define                TransceiverB_HSPI_Readback      0x8bc   
+#define                rFPGA0_XAB_RFInterfaceRB                0x8e0   
+#define                rFPGA0_XCD_RFInterfaceRB                0x8e4   
+\r
+#define                rFPGA1_RFMOD                            0x900   
+\r
+#define                rFPGA1_TxBlock                          0x904   
+#define                rFPGA1_DebugSelect                      0x908   
+#define                rFPGA1_TxInfo                           0x90c   
+\r
+#define                rCCK0_System                            0xa00\r
+\r
+#define                rCCK0_AFESetting                        0xa04   
+#define                rCCK0_CCA                                       0xa08   
+\r
+#define                rCCK0_RxAGC1                            0xa0c   
+#define                rCCK0_RxAGC2                            0xa10   
+\r
+#define                rCCK0_RxHP                                      0xa14\r
+\r
+#define                rCCK0_DSPParameter1             0xa18   
+#define                rCCK0_DSPParameter2             0xa1c   
+\r
+#define                rCCK0_TxFilter1                         0xa20\r
+#define                rCCK0_TxFilter2                         0xa24\r
+#define                rCCK0_DebugPort                 0xa28   
+#define                rCCK0_FalseAlarmReport          0xa2c   
+#define                rCCK0_TRSSIReport                       0xa50\r
+#define                rCCK0_RxReport                          0xa54  
+#define                rCCK0_FACounterLower            0xa5c  
+#define                rCCK0_FACounterUpper            0xa58  
+\r
+#define                rOFDM0_LSTF                             0xc00\r
+\r
+#define                rOFDM0_TRxPathEnable            0xc04\r
+#define                rOFDM0_TRMuxPar                 0xc08\r
+#define                rOFDM0_TRSWIsolation            0xc0c\r
+\r
+#define                rOFDM0_XARxAFE                  0xc10  
+#define                rOFDM0_XARxIQImbalance          0xc14  
+#define                rOFDM0_XBRxAFE                          0xc18\r
+#define                rOFDM0_XBRxIQImbalance          0xc1c\r
+#define                rOFDM0_XCRxAFE                          0xc20\r
+#define                rOFDM0_XCRxIQImbalance          0xc24\r
+#define                rOFDM0_XDRxAFE                          0xc28\r
+#define                rOFDM0_XDRxIQImbalance          0xc2c\r
+\r
+#define                rOFDM0_RxDetector1                      0xc30  
+#define                rOFDM0_RxDetector2                      0xc34  
+#define                rOFDM0_RxDetector3                      0xc38  
+#define                rOFDM0_RxDetector4                      0xc3c  
+\r
+#define                rOFDM0_RxDSP                            0xc40  
+#define                rOFDM0_CFOandDAGC               0xc44  
+#define                rOFDM0_CCADropThreshold 0xc48 
+#define                rOFDM0_ECCAThreshold            0xc4c 
+\r
+#define                rOFDM0_XAAGCCore1                       0xc50   
+#define                rOFDM0_XAAGCCore2                       0xc54\r
+#define                rOFDM0_XBAGCCore1                       0xc58\r
+#define                rOFDM0_XBAGCCore2                       0xc5c\r
+#define                rOFDM0_XCAGCCore1                       0xc60\r
+#define                rOFDM0_XCAGCCore2                       0xc64\r
+#define                rOFDM0_XDAGCCore1                       0xc68\r
+#define                rOFDM0_XDAGCCore2                       0xc6c\r
+\r
+#define                rOFDM0_AGCParameter1                    0xc70\r
+#define                rOFDM0_AGCParameter2                    0xc74\r
+#define                rOFDM0_AGCRSSITable                     0xc78\r
+#define                rOFDM0_HTSTFAGC                         0xc7c\r
+\r
+#define                rOFDM0_XATxIQImbalance          0xc80   
+#define                rOFDM0_XATxAFE                          0xc84\r
+#define                rOFDM0_XBTxIQImbalance          0xc88\r
+#define                rOFDM0_XBTxAFE                          0xc8c\r
+#define                rOFDM0_XCTxIQImbalance          0xc90\r
+#define                rOFDM0_XCTxAFE                                  0xc94\r
+#define                rOFDM0_XDTxIQImbalance          0xc98\r
+#define                rOFDM0_XDTxAFE                          0xc9c\r
+\r
+#define                rOFDM0_RxHPParameter                    0xce0\r
+#define                rOFDM0_TxPseudoNoiseWgt         0xce4\r
+#define                rOFDM0_FrameSync                                0xcf0\r
+#define                rOFDM0_DFSReport                                0xcf4\r
+#define                rOFDM0_TxCoeff1                         0xca4\r
+#define                rOFDM0_TxCoeff2                         0xca8\r
+#define                rOFDM0_TxCoeff3                         0xcac\r
+#define                rOFDM0_TxCoeff4                         0xcb0\r
+#define                rOFDM0_TxCoeff5                         0xcb4\r
+#define                rOFDM0_TxCoeff6                         0xcb8\r
+\r
+\r
+#define                rOFDM1_LSTF                                     0xd00\r
+#define                rOFDM1_TRxPathEnable                    0xd04\r
+\r
+#define                rOFDM1_CFO                                              0xd08   
+#define                rOFDM1_CSI1                                     0xd10\r
+#define                rOFDM1_SBD                                              0xd14\r
+#define                rOFDM1_CSI2                                     0xd18\r
+#define                rOFDM1_CFOTracking                      0xd2c\r
+#define                rOFDM1_TRxMesaure1                      0xd34\r
+#define                rOFDM1_IntfDet                                  0xd3c\r
+#define                rOFDM1_PseudoNoiseStateAB               0xd50\r
+#define                rOFDM1_PseudoNoiseStateCD               0xd54\r
+#define                rOFDM1_RxPseudoNoiseWgt         0xd58\r
+\r
+#define                rOFDM_PHYCounter1                               0xda0  
+#define                rOFDM_PHYCounter2                               0xda4  
+#define                rOFDM_PHYCounter3                               0xda8  
+\r
+#define                rOFDM_ShortCFOAB                                0xdac   
+#define                rOFDM_ShortCFOCD                                0xdb0\r
+#define                rOFDM_LongCFOAB                         0xdb4\r
+#define                rOFDM_LongCFOCD                         0xdb8\r
+#define                rOFDM_TailCFOAB                         0xdbc\r
+#define                rOFDM_TailCFOCD                         0xdc0\r
+#define                rOFDM_PWMeasure1                        0xdc4\r
+#define                rOFDM_PWMeasure2                        0xdc8\r
+#define                rOFDM_BWReport                          0xdcc\r
+#define                rOFDM_AGCReport                         0xdd0\r
+#define                rOFDM_RxSNR                                     0xdd4\r
+#define                rOFDM_RxEVMCSI                          0xdd8\r
+#define                rOFDM_SIGReport                         0xddc\r
+\r
+\r
+#define                rTxAGC_Rate18_06                                0xe00\r
+#define                rTxAGC_Rate54_24                                0xe04\r
+#define                rTxAGC_CCK_Mcs32                                0xe08\r
+#define                rTxAGC_Mcs03_Mcs00                      0xe10\r
+#define                rTxAGC_Mcs07_Mcs04                      0xe14\r
+#define                rTxAGC_Mcs11_Mcs08                      0xe18\r
+#define                rTxAGC_Mcs15_Mcs12                      0xe1c\r
+\r
+#define                rZebra1_HSSIEnable                              0x0     
+#define                rZebra1_TRxEnable1                              0x1\r
+#define                rZebra1_TRxEnable2                              0x2\r
+#define                rZebra1_AGC                                     0x4\r
+#define                rZebra1_ChargePump                      0x5\r
+#define                rZebra1_Channel                         0x7     
+\r
+#define                rZebra1_TxGain                                  0x8     
+#define                rZebra1_TxLPF                                   0x9\r
+#define                rZebra1_RxLPF                                   0xb\r
+#define                rZebra1_RxHPFCorner                     0xc\r
+\r
+#define                rGlobalCtrl                                             0       
+#define                rRTL8256_TxLPF                                  19\r
+#define                rRTL8256_RxLPF                                  11\r
+\r
+#define                rRTL8258_TxLPF                                  0x11    
+#define                rRTL8258_RxLPF                                  0x13\r
+#define                rRTL8258_RSSILPF                                0xa\r
+\r
+#define                RF_AC                                           0x00    
+\r
+#define                RF_IQADJ_G1                             0x01    
+#define                RF_IQADJ_G2                             0x02    
+#define                RF_POW_TRSW                             0x05    
+\r
+#define                RF_GAIN_RX                                      0x06    
+#define                RF_GAIN_TX                                      0x07    
+\r
+#define                RF_TXM_IDAC                             0x08    
+#define                RF_BS_IQGEN                             0x0F    
+\r
+#define                RF_MODE1                                        0x10    
+#define                RF_MODE2                                        0x11    
+\r
+#define                RF_RX_AGC_HP                            0x12    
+#define                RF_TX_AGC                                       0x13    
+#define                RF_BIAS                                         0x14    
+#define                RF_IPA                                          0x15    
+#define                RF_POW_ABILITY                  0x17    
+#define                RF_MODE_AG                              0x18    
+#define                rRfChannel                                      0x18    
+#define                RF_CHNLBW                                       0x18    
+#define                RF_TOP                                          0x19    
+\r
+#define                RF_RX_G1                                        0x1A    
+#define                RF_RX_G2                                        0x1B    
+\r
+#define                RF_RX_BB2                                       0x1C    
+#define                RF_RX_BB1                                       0x1D    
+\r
+#define                RF_RCK1                                 0x1E    
+#define                RF_RCK2                                 0x1F    
+\r
+#define                RF_TX_G1                                        0x20    
+#define                RF_TX_G2                                        0x21    
+#define                RF_TX_G3                                        0x22    
+\r
+#define                RF_TX_BB1                                       0x23    
+\r
+#define                RF_T_METER                                      0x24    
+\r
+#define                RF_SYN_G1                                       0x25    
+#define                RF_SYN_G2                                       0x26    
+#define                RF_SYN_G3                                       0x27    
+#define                RF_SYN_G4                                       0x28    
+#define                RF_SYN_G5                                       0x29    
+#define                RF_SYN_G6                                       0x2A    
+#define                RF_SYN_G7                                       0x2B    
+#define                RF_SYN_G8                                       0x2C    
+\r
+#define                RF_RCK_OS                                       0x30    
+\r
+#define                RF_TXPA_G1                                      0x31    
+#define                RF_TXPA_G2                                      0x32    
+#define                RF_TXPA_G3                                      0x33    
+\r
+#define                bBBResetB                                               0x100   
+#define                bGlobalResetB                                   0x200\r
+#define                bOFDMTxStart                                    0x4\r
+#define                bCCKTxStart                                             0x8\r
+#define                bCRC32Debug                                     0x100\r
+#define                bPMACLoopback                                   0x10\r
+#define                bTxLSIG                                                 0xffffff\r
+#define                bOFDMTxRate                                     0xf\r
+#define                bOFDMTxReserved                         0x10\r
+#define                bOFDMTxLength                                   0x1ffe0\r
+#define                bOFDMTxParity                                   0x20000\r
+#define                bTxHTSIG1                                               0xffffff\r
+#define                bTxHTMCSRate                                    0x7f\r
+#define                bTxHTBW                                         0x80\r
+#define                bTxHTLength                                     0xffff00\r
+#define                bTxHTSIG2                                               0xffffff\r
+#define                bTxHTSmoothing                                  0x1\r
+#define                bTxHTSounding                                   0x2\r
+#define                bTxHTReserved                                   0x4\r
+#define                bTxHTAggreation                         0x8\r
+#define                bTxHTSTBC                                               0x30\r
+#define                bTxHTAdvanceCoding                      0x40\r
+#define                bTxHTShortGI                                    0x80\r
+#define                bTxHTNumberHT_LTF                       0x300\r
+#define                bTxHTCRC8                                               0x3fc00\r
+#define                bCounterReset                                   0x10000\r
+#define                bNumOfOFDMTx                                    0xffff\r
+#define                bNumOfCCKTx                                     0xffff0000\r
+#define                bTxIdleInterval                                 0xffff\r
+#define                bOFDMService                                    0xffff0000\r
+#define                bTxMACHeader                                    0xffffffff\r
+#define                bTxDataInit                                             0xff\r
+#define                bTxHTMode                                               0x100\r
+#define                bTxDataType                                     0x30000\r
+#define                bTxRandomSeed                                   0xffffffff\r
+#define                bCCKTxPreamble                                  0x1\r
+#define                bCCKTxSFD                                               0xffff0000\r
+#define                bCCKTxSIG                                               0xff\r
+#define                bCCKTxService                                   0xff00\r
+#define                bCCKLengthExt                                   0x8000\r
+#define                bCCKTxLength                                    0xffff0000\r
+#define                bCCKTxCRC16                                     0xffff\r
+#define                bCCKTxStatus                                    0x1\r
+#define                bOFDMTxStatus                                   0x2\r
+\r
+#define        IS_BB_REG_OFFSET_92S(_Offset)           ((_Offset >= 0x800) && (_Offset <= 0xfff))\r
+\r
+#define                bRFMOD                                                  0x1     
+#define                bJapanMode                                              0x2\r
+#define                bCCKTxSC                                                0x30\r
+#define                bCCKEn                                                  0x1000000\r
+#define                bOFDMEn                                         0x2000000\r
+\r
+#define                bOFDMRxADCPhase                         0x10000 
+#define                bOFDMTxDACPhase                         0x40000\r
+#define                bXATxAGC                                        0x3f\r
+\r
+#define                bXBTxAGC                                        0xf00   
+#define                bXCTxAGC                                        0xf000\r
+#define                bXDTxAGC                                        0xf0000\r
+                       \r
+#define                bPAStart                                        0xf0000000      
+#define                bTRStart                                        0x00f00000\r
+#define                bRFStart                                        0x0000f000\r
+#define                bBBStart                                        0x000000f0\r
+#define                bBBCCKStart                             0x0000000f\r
+#define                bPAEnd                                          0xf          
+#define                bTREnd                                          0x0f000000\r
+#define                bRFEnd                                          0x000f0000\r
+#define                bCCAMask                                        0x000000f0   
+#define                bR2RCCAMask                             0x00000f00\r
+#define                bHSSI_R2TDelay                          0xf8000000\r
+#define                bHSSI_T2RDelay                          0xf80000\r
+#define                bContTxHSSI                             0x400     
+#define                bIGFromCCK                              0x200\r
+#define                bAGCAddress                             0x3f\r
+#define                bRxHPTx                                         0x7000\r
+#define                bRxHPT2R                                        0x38000\r
+#define                bRxHPCCKIni                             0xc0000\r
+#define                bAGCTxCode                              0xc00000\r
+#define                bAGCRxCode                              0x300000\r
+\r
+#define                b3WireDataLength                        0x800   
+#define                b3WireAddressLength                     0x400\r
+\r
+#define                b3WireRFPowerDown                       0x1     
+#define                b5GPAPEPolarity                         0x40000000\r
+#define                b2GPAPEPolarity                         0x80000000\r
+#define                bRFSW_TxDefaultAnt                      0x3\r
+#define                bRFSW_TxOptionAnt                       0x30\r
+#define                bRFSW_RxDefaultAnt                      0x300\r
+#define                bRFSW_RxOptionAnt                       0x3000\r
+#define                bRFSI_3WireData                         0x1\r
+#define                bRFSI_3WireClock                        0x2\r
+#define                bRFSI_3WireLoad                         0x4\r
+#define                bRFSI_3WireRW                           0x8\r
+#define                bRFSI_3Wire                                     0xf\r
+\r
+#define                bRFSI_RFENV                             0x10    
+\r
+#define                bRFSI_TRSW                              0x20    
+#define                bRFSI_TRSWB                             0x40\r
+#define                bRFSI_ANTSW                             0x100\r
+#define                bRFSI_ANTSWB                            0x200\r
+#define                bRFSI_PAPE                                      0x400\r
+#define                bRFSI_PAPE5G                            0x800 \r
+#define                bBandSelect                                     0x1\r
+#define                bHTSIG2_GI                                      0x80\r
+#define                bHTSIG2_Smoothing                       0x01\r
+#define                bHTSIG2_Sounding                        0x02\r
+#define                bHTSIG2_Aggreaton                       0x08\r
+#define                bHTSIG2_STBC                            0x30\r
+#define                bHTSIG2_AdvCoding                       0x40\r
+#define                bHTSIG2_NumOfHTLTF              0x300\r
+#define                bHTSIG2_CRC8                            0x3fc\r
+#define                bHTSIG1_MCS                             0x7f\r
+#define                bHTSIG1_BandWidth                       0x80\r
+#define                bHTSIG1_HTLength                        0xffff\r
+#define                bLSIG_Rate                                      0xf\r
+#define                bLSIG_Reserved                          0x10\r
+#define                bLSIG_Length                            0x1fffe\r
+#define                bLSIG_Parity                                    0x20\r
+#define                bCCKRxPhase                             0x4\r
+#if (RTL92SE_FPGA_VERIFY == 1)\r
+#define                bLSSIReadAddress                        0x3f000000   
+#else\r
+#define                bLSSIReadAddress                        0x7f800000   
+#endif\r
+#define                bLSSIReadEdge                           0x80000000   
+#if (RTL92SE_FPGA_VERIFY == 1)\r
+#define                bLSSIReadBackData                       0xfff           
+#else\r
+#define                bLSSIReadBackData                       0xfffff         
+#endif\r
+#define                bLSSIReadOKFlag                         0x1000  
+#define                bCCKSampleRate                          0x8       
+#define                bRegulator0Standby                      0x1\r
+#define                bRegulatorPLLStandby                    0x2\r
+#define                bRegulator1Standby                      0x4\r
+#define                bPLLPowerUp                             0x8\r
+#define                bDPLLPowerUp                            0x10\r
+#define                bDA10PowerUp                            0x20\r
+#define                bAD7PowerUp                             0x200\r
+#define                bDA6PowerUp                             0x2000\r
+#define                bXtalPowerUp                            0x4000\r
+#define                b40MDClkPowerUP                         0x8000\r
+#define                bDA6DebugMode                           0x20000\r
+#define                bDA6Swing                                       0x380000\r
+\r
+#define                bADClkPhase                             0x4000000       
+\r
+#define                b80MClkDelay                            0x18000000      
+#define                bAFEWatchDogEnable                      0x20000000\r
+\r
+#define                bXtalCap01                                      0xc0000000      
+#define                bXtalCap23                                      0x3\r
+#define                bXtalCap92x                                     0x0f000000\r
+#define                bXtalCap                                        0x0f000000\r
+\r
+#define                bIntDifClkEnable                        0x400   
+#define                bExtSigClkEnable                        0x800\r
+#define                bBandgapMbiasPowerUp            0x10000\r
+#define                bAD11SHGain                             0xc0000\r
+#define                bAD11InputRange                         0x700000\r
+#define                bAD11OPCurrent                          0x3800000\r
+#define                bIPathLoopback                          0x4000000\r
+#define                bQPathLoopback                          0x8000000\r
+#define                bAFELoopback                            0x10000000\r
+#define                bDA10Swing                              0x7e0\r
+#define                bDA10Reverse                            0x800\r
+#define                bDAClkSource                            0x1000\r
+#define                bAD7InputRange                          0x6000\r
+#define                bAD7Gain                                        0x38000\r
+#define                bAD7OutputCMMode                        0x40000\r
+#define                bAD7InputCMMode                         0x380000\r
+#define                bAD7Current                                     0xc00000\r
+#define                bRegulatorAdjust                        0x7000000\r
+#define                bAD11PowerUpAtTx                        0x1\r
+#define                bDA10PSAtTx                             0x10\r
+#define                bAD11PowerUpAtRx                        0x100\r
+#define                bDA10PSAtRx                             0x1000                  \r
+#define                bCCKRxAGCFormat                         0x200                   \r
+#define                bPSDFFTSamplepPoint                     0xc000\r
+#define                bPSDAverageNum                          0x3000\r
+#define                bIQPathControl                          0xc00\r
+#define                bPSDFreq                                        0x3ff\r
+#define                bPSDAntennaPath                         0x30\r
+#define                bPSDIQSwitch                            0x40\r
+#define                bPSDRxTrigger                           0x400000\r
+#define                bPSDTxTrigger                           0x80000000\r
+#define                bPSDSineToneScale                       0x7f000000\r
+#define                bPSDReport                                      0xffff\r
+\r
+#define                bOFDMTxSC                               0x30000000      
+#define                bCCKTxOn                                        0x1\r
+#define                bOFDMTxOn                               0x2\r
+#define                bDebugPage                              0xfff  
+#define                bDebugItem                              0xff   
+#define                bAntL                                   0x10\r
+#define                bAntNonHT                                       0x100\r
+#define                bAntHT1                                 0x1000\r
+#define                bAntHT2                                         0x10000\r
+#define                bAntHT1S1                                       0x100000\r
+#define                bAntNonHTS1                             0x1000000\r
+\r
+#define                bCCKBBMode                              0x3     
+#define                bCCKTxPowerSaving                       0x80\r
+#define                bCCKRxPowerSaving                       0x40\r
+\r
+#define                bCCKSideBand                            0x10    
+\r
+#define                bCCKScramble                            0x8     
+#define                bCCKAntDiversity                        0x8000\r
+#define                bCCKCarrierRecovery             0x4000\r
+#define                bCCKTxRate                              0x3000\r
+#define                bCCKDCCancel                            0x0800\r
+#define                bCCKISICancel                           0x0400\r
+#define                bCCKMatchFilter                         0x0200\r
+#define                bCCKEqualizer                           0x0100\r
+#define                bCCKPreambleDetect                      0x800000\r
+#define                bCCKFastFalseCCA                        0x400000\r
+#define                bCCKChEstStart                          0x300000\r
+#define                bCCKCCACount                            0x080000\r
+#define                bCCKcs_lim                                      0x070000\r
+#define                bCCKBistMode                            0x80000000\r
+#define                bCCKCCAMask                             0x40000000\r
+#define                bCCKTxDACPhase                  0x4\r
+#define                bCCKRxADCPhase                  0x20000000   
+#define                bCCKr_cp_mode0                  0x0100\r
+#define                bCCKTxDCOffset                          0xf0\r
+#define                bCCKRxDCOffset                          0xf\r
+#define                bCCKCCAMode                             0xc000\r
+#define                bCCKFalseCS_lim                         0x3f00\r
+#define                bCCKCS_ratio                            0xc00000\r
+#define                bCCKCorgBit_sel                         0x300000\r
+#define                bCCKPD_lim                                      0x0f0000\r
+#define                bCCKNewCCA                              0x80000000\r
+#define                bCCKRxHPofIG                            0x8000\r
+#define                bCCKRxIG                                        0x7f00\r
+#define                bCCKLNAPolarity                         0x800000\r
+#define                bCCKRx1stGain                           0x7f0000\r
+#define                bCCKRFExtend                            0x20000000 
+#define                bCCKRxAGCSatLevel                       0x1f000000\r
+#define                bCCKRxAGCSatCount                       0xe0\r
+#define                bCCKRxRFSettle                          0x1f       
+#define                bCCKFixedRxAGC                          0x8000\r
+#define                bCCKAntennaPolarity                     0x2000\r
+#define                bCCKTxFilterType                        0x0c00\r
+#define                bCCKRxAGCReportType             0x0300\r
+#define                bCCKRxDAGCEn                            0x80000000\r
+#define                bCCKRxDAGCPeriod                        0x20000000\r
+#define                bCCKRxDAGCSatLevel              0x1f000000\r
+#define                bCCKTimingRecovery                      0x800000\r
+#define                bCCKTxC0                                        0x3f0000\r
+#define                bCCKTxC1                                        0x3f000000\r
+#define                bCCKTxC2                                        0x3f\r
+#define                bCCKTxC3                                        0x3f00\r
+#define                bCCKTxC4                                        0x3f0000\r
+#define                bCCKTxC5                                        0x3f000000\r
+#define                bCCKTxC6                                        0x3f\r
+#define                bCCKTxC7                                        0x3f00\r
+#define                bCCKDebugPort                           0xff0000\r
+#define                bCCKDACDebug                            0x0f000000\r
+#define                bCCKFalseAlarmEnable                    0x8000\r
+#define                bCCKFalseAlarmRead                      0x4000\r
+#define                bCCKTRSSI                                       0x7f\r
+#define                bCCKRxAGCReport                         0xfe\r
+#define                bCCKRxReport_AntSel                     0x80000000\r
+#define                bCCKRxReport_MFOff                      0x40000000\r
+#define                bCCKRxRxReport_SQLoss           0x20000000\r
+#define                bCCKRxReport_Pktloss                    0x10000000\r
+#define                bCCKRxReport_Lockedbit          0x08000000\r
+#define                bCCKRxReport_RateError          0x04000000\r
+#define                bCCKRxReport_RxRate                     0x03000000\r
+#define                bCCKRxFACounterLower            0xff\r
+#define                bCCKRxFACounterUpper            0xff000000\r
+#define                bCCKRxHPAGCStart                        0xe000\r
+#define                bCCKRxHPAGCFinal                        0x1c00                  \r
+#define                bCCKRxFalseAlarmEnable          0x8000\r
+#define                bCCKFACounterFreeze                     0x4000                  \r
+#define                bCCKTxPathSel                           0x10000000\r
+#define                bCCKDefaultRxPath                       0xc000000\r
+#define                bCCKOptionRxPath                        0x3000000\r
+\r
+#define                bNumOfSTF                                       0x3     
+#define                bShift_L                                        0xc0\r
+#define                bGI_TH                                          0xc\r
+#define                bRxPathA                                        0x1\r
+#define                bRxPathB                                        0x2\r
+#define                bRxPathC                                        0x4\r
+#define                bRxPathD                                        0x8\r
+#define                bTxPathA                                        0x1\r
+#define                bTxPathB                                        0x2\r
+#define                bTxPathC                                        0x4\r
+#define                bTxPathD                                        0x8\r
+#define                bTRSSIFreq                                      0x200\r
+#define                bADCBackoff                                     0x3000\r
+#define                bDFIRBackoff                                    0xc000\r
+#define                bTRSSILatchPhase                        0x10000\r
+#define                bRxIDCOffset                                    0xff\r
+#define                bRxQDCOffset                                    0xff00\r
+#define                bRxDFIRMode                             0x1800000\r
+#define                bRxDCNFType                             0xe000000\r
+#define                bRXIQImb_A                                      0x3ff\r
+#define                bRXIQImb_B                                      0xfc00\r
+#define                bRXIQImb_C                                      0x3f0000\r
+#define                bRXIQImb_D                                      0xffc00000\r
+#define                bDC_dc_Notch                            0x60000\r
+#define                bRxNBINotch                                     0x1f000000\r
+#define                bPD_TH                                          0xf\r
+#define                bPD_TH_Opt2                             0xc000\r
+#define                bPWED_TH                                        0x700\r
+#define                bIfMF_Win_L                                     0x800\r
+#define                bPD_Option                                      0x1000\r
+#define                bMF_Win_L                                       0xe000\r
+#define                bBW_Search_L                            0x30000\r
+#define                bwin_enh_L                                      0xc0000\r
+#define                bBW_TH                                          0x700000\r
+#define                bED_TH2                                         0x3800000\r
+#define                bBW_option                                      0x4000000\r
+#define                bRatio_TH                                       0x18000000\r
+#define                bWindow_L                                       0xe0000000\r
+#define                bSBD_Option                                     0x1\r
+#define                bFrame_TH                                       0x1c\r
+#define                bFS_Option                                      0x60\r
+#define                bDC_Slope_check                         0x80\r
+#define                bFGuard_Counter_DC_L                    0xe00\r
+#define                bFrame_Weight_Short                     0x7000\r
+#define                bSub_Tune                                       0xe00000\r
+#define                bFrame_DC_Length                        0xe000000\r
+#define                bSBD_start_offset                       0x30000000\r
+#define                bFrame_TH_2                             0x7\r
+#define                bFrame_GI2_TH                           0x38\r
+#define                bGI2_Sync_en                            0x40\r
+#define                bSarch_Short_Early                      0x300\r
+#define                bSarch_Short_Late                       0xc00\r
+#define                bSarch_GI2_Late                         0x70000\r
+#define                bCFOAntSum                              0x1\r
+#define                bCFOAcc                                         0x2\r
+#define                bCFOStartOffset                         0xc\r
+#define                bCFOLookBack                            0x70\r
+#define                bCFOSumWeight                           0x80\r
+#define                bDAGCEnable                                     0x10000\r
+#define                bTXIQImb_A                                      0x3ff\r
+#define                bTXIQImb_B                                      0xfc00\r
+#define                bTXIQImb_C                                      0x3f0000\r
+#define                bTXIQImb_D                                      0xffc00000\r
+#define                bTxIDCOffset                                    0xff\r
+#define                bTxQDCOffset                                    0xff00\r
+#define                bTxDFIRMode                             0x10000\r
+#define                bTxPesudoNoiseOn                        0x4000000\r
+#define                bTxPesudoNoise_A                        0xff\r
+#define                bTxPesudoNoise_B                        0xff00\r
+#define                bTxPesudoNoise_C                        0xff0000\r
+#define                bTxPesudoNoise_D                        0xff000000\r
+#define                bCCADropOption                          0x20000\r
+#define                bCCADropThres                           0xfff00000\r
+#define                bEDCCA_H                                        0xf\r
+#define                bEDCCA_L                                        0xf0\r
+#define                bLambda_ED               0x300\r
+#define                bRxInitialGain           0x7f\r
+#define                bRxAntDivEn              0x80\r
+#define                bRxAGCAddressForLNA      0x7f00\r
+#define                bRxHighPowerFlow         0x8000\r
+#define                bRxAGCFreezeThres        0xc0000\r
+#define                bRxFreezeStep_AGC1       0x300000\r
+#define                bRxFreezeStep_AGC2       0xc00000\r
+#define                bRxFreezeStep_AGC3       0x3000000\r
+#define                bRxFreezeStep_AGC0       0xc000000\r
+#define                bRxRssi_Cmp_En           0x10000000\r
+#define                bRxQuickAGCEn            0x20000000\r
+#define                bRxAGCFreezeThresMode    0x40000000\r
+#define                bRxOverFlowCheckType     0x80000000\r
+#define                bRxAGCShift              0x7f\r
+#define                bTRSW_Tri_Only           0x80\r
+#define                bPowerThres              0x300\r
+#define                bRxAGCEn                 0x1\r
+#define                bRxAGCTogetherEn         0x2\r
+#define                bRxAGCMin                0x4\r
+#define                bRxHP_Ini                0x7\r
+#define                bRxHP_TRLNA              0x70\r
+#define                bRxHP_RSSI               0x700\r
+#define                bRxHP_BBP1               0x7000\r
+#define                bRxHP_BBP2               0x70000\r
+#define                bRxHP_BBP3               0x700000\r
+#define                bRSSI_H                  0x7f0000     
+#define                bRSSI_Gen                0x7f000000   
+#define                bRxSettle_TRSW           0x7\r
+#define                bRxSettle_LNA            0x38\r
+#define                bRxSettle_RSSI           0x1c0\r
+#define                bRxSettle_BBP            0xe00\r
+#define                bRxSettle_RxHP           0x7000\r
+#define                bRxSettle_AntSW_RSSI     0x38000\r
+#define                bRxSettle_AntSW          0xc0000\r
+#define                bRxProcessTime_DAGC      0x300000\r
+#define                bRxSettle_HSSI           0x400000\r
+#define                bRxProcessTime_BBPPW     0x800000\r
+#define                bRxAntennaPowerShift     0x3000000\r
+#define                bRSSITableSelect         0xc000000\r
+#define                bRxHP_Final              0x7000000\r
+#define                bRxHTSettle_BBP          0x7\r
+#define                bRxHTSettle_HSSI         0x8\r
+#define                bRxHTSettle_RxHP         0x70\r
+#define                bRxHTSettle_BBPPW        0x80\r
+#define                bRxHTSettle_Idle         0x300\r
+#define                bRxHTSettle_Reserved     0x1c00\r
+#define                bRxHTRxHPEn              0x8000\r
+#define                bRxHTAGCFreezeThres      0x30000\r
+#define                bRxHTAGCTogetherEn       0x40000\r
+#define                bRxHTAGCMin              0x80000\r
+#define                bRxHTAGCEn               0x100000\r
+#define                bRxHTDAGCEn              0x200000\r
+#define                bRxHTRxHP_BBP            0x1c00000\r
+#define                bRxHTRxHP_Final          0xe0000000\r
+#define                bRxPWRatioTH             0x3\r
+#define                bRxPWRatioEn             0x4\r
+#define                bRxMFHold                0x3800\r
+#define                bRxPD_Delay_TH1          0x38\r
+#define                bRxPD_Delay_TH2          0x1c0\r
+#define                bRxPD_DC_COUNT_MAX       0x600\r
+#define                bRxPD_Delay_TH           0x8000\r
+#define                bRxProcess_Delay         0xf0000\r
+#define                bRxSearchrange_GI2_Early 0x700000\r
+#define                bRxFrame_Guard_Counter_L 0x3800000\r
+#define                bRxSGI_Guard_L           0xc000000\r
+#define                bRxSGI_Search_L          0x30000000\r
+#define                bRxSGI_TH                0xc0000000\r
+#define                bDFSCnt0                 0xff\r
+#define                bDFSCnt1                 0xff00\r
+#define                bDFSFlag                 0xf0000                \r
+#define                bMFWeightSum             0x300000\r
+#define                bMinIdxTH                0x7f000000                     \r
+#define                bDAFormat                0x40000                \r
+#define                bTxChEmuEnable           0x01000000                     \r
+#define                bTRSWIsolation_A         0x7f\r
+#define                bTRSWIsolation_B         0x7f00\r
+#define                bTRSWIsolation_C         0x7f0000\r
+#define                bTRSWIsolation_D         0x7f000000                     \r
+#define                bExtLNAGain              0x7c00          \r
+\r
+#define                bSTBCEn                  0x4    
+#define                bAntennaMapping          0x10\r
+#define                bNss                     0x20\r
+#define                bCFOAntSumD              0x200\r
+#define                bPHYCounterReset         0x8000000\r
+#define                bCFOReportGet            0x4000000\r
+#define                bOFDMContinueTx          0x10000000\r
+#define                bOFDMSingleCarrier       0x20000000\r
+#define                bOFDMSingleTone          0x40000000\r
+#define                bHTDetect                0x100\r
+#define                bCFOEn                   0x10000\r
+#define                bCFOValue                0xfff00000\r
+#define                bSigTone_Re              0x3f\r
+#define                bSigTone_Im              0x7f00\r
+#define                bCounter_CCA             0xffff\r
+#define                bCounter_ParityFail      0xffff0000\r
+#define                bCounter_RateIllegal     0xffff\r
+#define                bCounter_CRC8Fail        0xffff0000\r
+#define                bCounter_MCSNoSupport    0xffff\r
+#define                bCounter_FastSync        0xffff\r
+#define                bShortCFO                0xfff\r
+#define                bShortCFOTLength         12   
+#define                bShortCFOFLength         11   
+#define                bLongCFO                 0x7ff\r
+#define                bLongCFOTLength          11\r
+#define                bLongCFOFLength          11\r
+#define                bTailCFO                 0x1fff\r
+#define                bTailCFOTLength          13\r
+#define                bTailCFOFLength          12                     \r
+#define                bmax_en_pwdB             0xffff\r
+#define                bCC_power_dB             0xffff0000\r
+#define                bnoise_pwdB              0xffff\r
+#define                bPowerMeasTLength        10\r
+#define                bPowerMeasFLength        3\r
+#define                bRx_HT_BW                0x1\r
+#define                bRxSC                    0x6\r
+#define                bRx_HT                   0x8                    \r
+#define                bNB_intf_det_on          0x1\r
+#define                bIntf_win_len_cfg        0x30\r
+#define                bNB_Intf_TH_cfg          0x1c0                  \r
+#define                bRFGain                  0x3f\r
+#define                bTableSel                0x40\r
+#define                bTRSW                    0x80                   \r
+#define                bRxSNR_A                 0xff\r
+#define                bRxSNR_B                 0xff00\r
+#define                bRxSNR_C                 0xff0000\r
+#define                bRxSNR_D                 0xff000000\r
+#define                bSNREVMTLength           8\r
+#define                bSNREVMFLength           1                      \r
+#define                bCSI1st                  0xff\r
+#define                bCSI2nd                  0xff00\r
+#define                bRxEVM1st                0xff0000\r
+#define                bRxEVM2nd                0xff000000                     \r
+#define                bSIGEVM                  0xff\r
+#define                bPWDB                    0xff00\r
+#define                bSGIEN                   0x10000\r
+                       \r
+#define                bSFactorQAM1             0xf    
+#define                bSFactorQAM2             0xf0\r
+#define                bSFactorQAM3             0xf00\r
+#define                bSFactorQAM4             0xf000\r
+#define                bSFactorQAM5             0xf0000\r
+#define                bSFactorQAM6             0xf0000\r
+#define                bSFactorQAM7             0xf00000\r
+#define                bSFactorQAM8             0xf000000\r
+#define                bSFactorQAM9             0xf0000000\r
+#define                bCSIScheme               0x100000\r
+                       \r
+#define                bNoiseLvlTopSet          0x3    
+#define                bChSmooth                0x4\r
+#define                bChSmoothCfg1            0x38\r
+#define                bChSmoothCfg2            0x1c0\r
+#define                bChSmoothCfg3            0xe00\r
+#define                bChSmoothCfg4            0x7000\r
+#define                bMRCMode                 0x800000\r
+#define                bTHEVMCfg                0x7000000\r
+                       \r
+#define                bLoopFitType             0x1    
+#define                bUpdCFO                  0x40\r
+#define                bUpdCFOOffData           0x80\r
+#define                bAdvUpdCFO               0x100\r
+#define                bAdvTimeCtrl             0x800\r
+#define                bUpdClko                 0x1000\r
+#define                bFC                      0x6000\r
+#define                bTrackingMode            0x8000\r
+#define                bPhCmpEnable             0x10000\r
+#define                bUpdClkoLTF              0x20000\r
+#define                bComChCFO                0x40000\r
+#define                bCSIEstiMode             0x80000\r
+#define                bAdvUpdEqz               0x100000\r
+#define                bUChCfg                  0x7000000\r
+#define                bUpdEqz                  0x8000000\r
+\r
+#define                bTxAGCRate18_06                 0x7f7f7f7f      
+#define                bTxAGCRate54_24                 0x7f7f7f7f\r
+#define                bTxAGCRateMCS32                 0x7f\r
+#define                bTxAGCRateCCK                   0x7f00\r
+#define                bTxAGCRateMCS3_MCS0             0x7f7f7f7f\r
+#define                bTxAGCRateMCS7_MCS4             0x7f7f7f7f\r
+#define                bTxAGCRateMCS11_MCS8    0x7f7f7f7f\r
+#define                bTxAGCRateMCS15_MCS12   0x7f7f7f7f\r
+\r
+#define                bRxPesudoNoiseOn         0x20000000     
+#define                bRxPesudoNoise_A         0xff\r
+#define                bRxPesudoNoise_B         0xff00\r
+#define                bRxPesudoNoise_C         0xff0000\r
+#define                bRxPesudoNoise_D         0xff000000\r
+#define                bPesudoNoiseState_A      0xffff\r
+#define                bPesudoNoiseState_B      0xffff0000\r
+#define                bPesudoNoiseState_C      0xffff\r
+#define                bPesudoNoiseState_D      0xffff0000\r
+\r
+#define                bZebra1_HSSIEnable        0x8           
+#define                bZebra1_TRxControl        0xc00\r
+#define                bZebra1_TRxGainSetting    0x07f\r
+#define                bZebra1_RxCorner          0xc00\r
+#define                bZebra1_TxChargePump      0x38\r
+#define                bZebra1_RxChargePump      0x7\r
+#define                bZebra1_ChannelNum        0xf80\r
+#define                bZebra1_TxLPFBW           0x400\r
+#define                bZebra1_RxLPFBW           0x600\r
+\r
+#define                bRTL8256RegModeCtrl1      0x100 
+#define                bRTL8256RegModeCtrl0      0x40\r
+#define                bRTL8256_TxLPFBW          0x18\r
+#define                bRTL8256_RxLPFBW          0x600\r
+\r
+#define                bRTL8258_TxLPFBW          0xc   
+#define                bRTL8258_RxLPFBW          0xc00\r
+#define                bRTL8258_RSSILPFBW        0xc0\r
+\r
+\r
+\r
+#define                bByte0                    0x1   
+#define                bByte1                    0x2\r
+#define                bByte2                    0x4\r
+#define                bByte3                    0x8\r
+#define                bWord0                    0x3\r
+#define                bWord1                    0xc\r
+#define                bDWord                    0xf\r
+\r
+#define                bMaskByte0                0xff  
+#define                bMaskByte1                0xff00\r
+#define                bMaskByte2                0xff0000\r
+#define                bMaskByte3                0xff000000\r
+#define                bMaskHWord                0xffff0000\r
+#define                bMaskLWord                0x0000ffff\r
+#define                bMaskDWord                0xffffffff\r
+\r
+#if (RTL92SE_FPGA_VERIFY == 1)\r
+#define                bMask12Bits               0xfff 
+#define                bMask20Bits               0xfff 
+#define                bRFRegOffsetMask        0xfff           \r
+#else\r
+#define                bMask12Bits               0xfffff       
+#define                bMask20Bits               0xfffff       
+#define                bRFRegOffsetMask        0xfffff         \r
+#endif                 \r
+#define                bEnable                   0x1   
+#define                bDisable                  0x0\r
+                       \r
+#define                LeftAntenna               0x0   
+#define                RightAntenna              0x1\r
+                       \r
+#define                tCheckTxStatus            500   
+#define                tUpdateRxCounter          100   
+                       \r
+#define                rateCCK     0   
+#define                rateOFDM    1\r
+#define                rateHT      2\r
+\r
+#define                bPMAC_End                 0x1ff 
+#define                bFPGAPHY0_End             0x8ff\r
+#define                bFPGAPHY1_End             0x9ff\r
+#define                bCCKPHY0_End              0xaff\r
+#define                bOFDMPHY0_End             0xcff\r
+#define                bOFDMPHY1_End             0xdff\r
+\r
+\r
+#define                bPMACControl              0x0           
+#define                bWMACControl              0x1\r
+#define                bWNICControl              0x2\r
+                       \r
+#define                PathA                     0x0   
+#define                PathB                     0x1\r
+#define                PathC                     0x2\r
+#define                PathD                     0x3\r
+\r
+/*--------------------------Define Parameters-------------------------------*/\r
+\r
+\r
+#endif 
+\r
+\r
diff --git a/ubuntu/rtl8192se/rtl8192s/r8192S_rtl6052.c b/ubuntu/rtl8192se/rtl8192s/r8192S_rtl6052.c
new file mode 100644 (file)
index 0000000..15ab5eb
--- /dev/null
@@ -0,0 +1,974 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+
+#ifdef RTL8192SE
+#include "../rtl_core.h"
+#include "../rtl_dm.h"
+#include "r8192S_phyreg.h"
+#include "r8192S_phy.h"
+#include "r8192S_rtl6052.h"
+
+/*---------------------------Define Local Constant---------------------------*/
+typedef struct RF_Shadow_Compare_Map {
+       u32             Value;
+       u8              Compare;
+       u8              ErrorOrNot;
+       u8              Recorver;
+       u8              Driver_Write;
+}RF_SHADOW_T;
+/*---------------------------Define Local Constant---------------------------*/
+
+
+/*------------------------Define global variable-----------------------------*/
+/*------------------------Define global variable-----------------------------*/
+
+
+
+
+/*---------------------Define local function prototype-----------------------*/
+void phy_RF6052_Config_HardCode(struct net_device* dev);
+
+bool phy_RF6052_Config_ParaFile(struct net_device* dev);
+/*---------------------Define local function prototype-----------------------*/
+
+/*------------------------Define function prototype--------------------------*/
+extern void RF_ChangeTxPath(struct net_device* dev,  u16 DataRate);
+
+/*------------------------Define function prototype--------------------------*/
+
+/*------------------------Define local variable------------------------------*/
+static RF_SHADOW_T     RF_Shadow[RF6052_MAX_PATH][RF6052_MAX_REG];
+/*------------------------Define local variable------------------------------*/
+
+/*------------------------Define function prototype--------------------------*/
+extern void RF_ChangeTxPath(struct net_device* dev,  u16 DataRate)
+{
+#if 0
+       static  u1Byte  RF_Path_Type = 2;       
+       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)
+       {
+               PHY_SetRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_A, 
+                                       RF_TXPA_G2, bMask20Bits, 0x0f000);
+               PHY_SetRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_A, 
+                                       RF_TXPA_G3, bMask20Bits, 0xeacf1);
+
+               for (i = 0; i < 6; i++)                                 
+                       PHY_SetRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_A, 
+                                               RF_TX_AGC, bMask20Bits, tx_gain_tbl1[i]);
+
+               PHY_SetRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_A, 
+                                       RF_TXPA_G2, bMask20Bits, 0x01e39);
+       }
+       else if (RF_Path_Type == 1 && (DataRate&0xF) >= 0x8)
+       {
+               PHY_SetRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_A, 
+                                       RF_TXPA_G2, bMask20Bits, 0x04440);
+               PHY_SetRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_A, 
+                                       RF_TXPA_G3, bMask20Bits, 0xea4f1);
+
+               for (i = 0; i < 6; i++)
+                       PHY_SetRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_A, 
+                                               RF_TX_AGC, bMask20Bits, tx_gain_tbl2[i]);
+
+               PHY_SetRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_A, 
+                                       RF_TXPA_G2, bMask20Bits, 0x01e19);
+       }
+#endif 
+       
+}      /* RF_ChangeTxPath */
+
+
+void PHY_RF6052SetBandwidth(struct net_device* dev, HT_CHANNEL_WIDTH Bandwidth)        
+{      
+       u8                              eRFPath;        
+       struct r8192_priv       *priv = rtllib_priv(dev);
+       
+
+       if (IS_HARDWARE_TYPE_8192SE(dev))
+       {               
+#if (RTL92SE_FPGA_VERIFY == 0)
+               switch(Bandwidth)
+               {
+                       case HT_CHANNEL_WIDTH_20:
+#if 1
+                               priv->RfRegChnlVal[0] = ((priv->RfRegChnlVal[0] & 0xfffff3ff) | 0x0400);
+                               rtl8192_phy_SetRFReg(dev, RF90_PATH_A, RF_CHNLBW, bRFRegOffsetMask, priv->RfRegChnlVal[0]);
+#else
+                               rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_A, RF_CHNLBW, BIT10|BIT11, 0x01);
+#endif
+                               break;
+                       case HT_CHANNEL_WIDTH_20_40:
+#if 1
+                               priv->RfRegChnlVal[0] = ((priv->RfRegChnlVal[0] & 0xfffff3ff));
+                               rtl8192_phy_SetRFReg(dev, RF90_PATH_A, RF_CHNLBW, bRFRegOffsetMask, priv->RfRegChnlVal[0]);
+#else
+                               rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_A, RF_CHNLBW, BIT10|BIT11, 0x00);
+#endif
+                               break;
+                       default:
+                               RT_TRACE(COMP_DBG, "PHY_SetRF6052Bandwidth(): unknown Bandwidth: %#X\n",Bandwidth);
+                               break;                  
+               }
+#endif 
+       }
+       else
+       {
+               for(eRFPath = 0; eRFPath <priv->NumTotalRFPath; eRFPath++)
+               {
+                       switch(Bandwidth)
+                       {
+                               case HT_CHANNEL_WIDTH_20:
+                                       break;
+                               case HT_CHANNEL_WIDTH_20_40:
+                                       break;
+                               default:
+                                       RT_TRACE(COMP_DBG, "PHY_SetRF8225Bandwidth(): unknown Bandwidth: %#X\n",Bandwidth );
+                                       break;
+                                       
+                       }
+               }
+       }
+}
+
+
+extern void PHY_RF6052SetCckTxPower(struct net_device* dev, u8 powerlevel)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       u32                             TxAGC=0;
+       bool                            dontIncCCKOrTurboScanOff=false;
+
+       if (((priv->eeprom_version >= 2) && (priv->TxPwrSafetyFlag == 1)) ||
+            ((priv->eeprom_version >= 2) && (priv->EEPROMRegulatory != 0))) {
+               dontIncCCKOrTurboScanOff = true;
+       }
+
+       if(rtllib_act_scanning(priv->rtllib,true) == true){
+               TxAGC = 0x3f;
+
+               if(dontIncCCKOrTurboScanOff )
+                       TxAGC = powerlevel;
+       } else {
+               TxAGC = powerlevel;
+
+               if(priv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level1)
+                       TxAGC = 0x10;
+               else if(priv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level2)
+                       TxAGC = 0x0;
+       }
+       
+       if(TxAGC > RF6052_MAX_TX_PWR)
+               TxAGC = RF6052_MAX_TX_PWR;
+
+       rtl8192_setBBreg(dev, rTxAGC_CCK_Mcs32, bTxAGCRateCCK, TxAGC);
+
+}      /* PHY_RF6052SetCckTxPower */
+
+
+#if 0
+extern void PHY_RF6052SetOFDMTxPower(struct net_device* dev, u8 powerlevel, u8 Channel)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       u32     writeVal, powerBase0, powerBase1;
+       u8      index = 0;
+       u16     RegOffset[6] = {0xe00, 0xe04, 0xe10, 0xe14, 0xe18, 0xe1c};
+       u8      rfa_pwr[4];
+       u8      rfa_lower_bound = 0, rfa_upper_bound = 0;
+       u8      i;
+       u8      rf_pwr_diff = 0, chnlGroup = 0;
+       u8      Legacy_pwrdiff=0, HT20_pwrdiff=0;
+
+       if (priv->eeprom_version < 2)
+               powerBase0 = powerlevel + (priv->LegacyHTTxPowerDiff & 0xf); 
+       else if (priv->eeprom_version >= 2)     
+       {
+               Legacy_pwrdiff = priv->TxPwrLegacyHtDiff[RF90_PATH_A][Channel-1];
+               powerBase0 = powerlevel + Legacy_pwrdiff; 
+               RT_TRACE(COMP_POWER, " [LagacyToHT40 pwr diff = %d]\n", Legacy_pwrdiff);                
+               RT_TRACE(COMP_POWER, " [OFDM power base index = 0x%x]\n", powerBase0);
+       }
+       powerBase0 = (powerBase0<<24) | (powerBase0<<16) |(powerBase0<<8) |powerBase0;
+       
+       if(priv->eeprom_version >= 2)
+       {       
+       
+               if (priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20)
+               {
+                       HT20_pwrdiff = priv->TxPwrHt20Diff[RF90_PATH_A][Channel-1];
+
+                       if (HT20_pwrdiff < 8)   
+                               powerlevel += HT20_pwrdiff;     
+                       else                            
+                               powerlevel -= (16-HT20_pwrdiff);
+
+                       RT_TRACE(COMP_POWER, " [HT20 to HT40 pwrdiff = %d]\n", HT20_pwrdiff);
+                       RT_TRACE(COMP_POWER, " [MCS power base index = 0x%x]\n", powerlevel);
+               }
+       }
+       powerBase1 = powerlevel;                                                        
+       powerBase1 = (powerBase1<<24) | (powerBase1<<16) |(powerBase1<<8) |powerBase1;
+
+       RT_TRACE(COMP_POWER, " [Legacy/HT power index= %x/%x]\n", powerBase0, powerBase1);
+       
+       for(index=0; index<6; index++)
+       {
+
+               if (priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20_40)
+               {
+                       writeVal = ((index<2)?powerBase0:powerBase1);
+               }
+               else
+               {
+                       if(priv->pwrGroupCnt == 0)
+                               chnlGroup = 0;
+                       if(priv->pwrGroupCnt >= 3)
+                       {
+                               if(Channel <= 3)
+                                       chnlGroup = 0;
+                               else if(Channel >= 4 && Channel <= 9)
+                                       chnlGroup = 1;
+                               else if(Channel >= 10)
+                                       chnlGroup = 2;
+                               if(priv->pwrGroupCnt == 4)
+                                       chnlGroup ++;
+                       }
+               else
+                               chnlGroup = 0;
+                       writeVal = priv->MCSTxPowerLevelOriginalOffset[chnlGroup][index] + 
+                                       ((index<2)?powerBase0:powerBase1);
+               }
+               RT_TRACE(COMP_POWER, "Reg 0x%x, chnlGroup = %d, Original=%x writeVal=%x\n", 
+                       RegOffset[index], chnlGroup, priv->MCSTxPowerLevelOriginalOffset[chnlGroup][index], 
+                       writeVal);
+
+               if (priv->rf_type == RF_2T2R)
+               {                       
+                       rf_pwr_diff = priv->AntennaTxPwDiff[0];
+                       RT_TRACE(COMP_POWER, "2T2R RF-B to RF-A PWR DIFF=%d\n", rf_pwr_diff);
+
+                       if (rf_pwr_diff >= 8)           
+                       {       
+                               rfa_lower_bound = 0x10-rf_pwr_diff;
+                               RT_TRACE(COMP_POWER, "rfa_lower_bound= %d\n", rfa_lower_bound);
+                       }
+                       else if (rf_pwr_diff >= 0)      
+                       {
+                               rfa_upper_bound = RF6052_MAX_TX_PWR-rf_pwr_diff;
+                               RT_TRACE(COMP_POWER, "rfa_upper_bound= %d\n", rfa_upper_bound);
+                       }                       
+               }
+
+               for (i=  0; i <4; i++)
+               {
+                       rfa_pwr[i] = (u8)((writeVal & (0x7f<<(i*8)))>>(i*8));
+                       if (rfa_pwr[i]  > RF6052_MAX_TX_PWR)
+                               rfa_pwr[i]  = RF6052_MAX_TX_PWR;
+
+                       if (priv->rf_type == RF_2T2R)
+                       {
+                               if (rf_pwr_diff >= 8)           
+                               {       
+                                       if (rfa_pwr[i] <rfa_lower_bound)
+                                       {
+                                               RT_TRACE(COMP_POWER, "Underflow");
+                                               rfa_pwr[i] = rfa_lower_bound;
+                                       }
+                               }
+                               else if (rf_pwr_diff >= 1)      
+                               {       
+                                       if (rfa_pwr[i] > rfa_upper_bound)
+                                       {
+                                               RT_TRACE(COMP_POWER, "Overflow");
+                                               rfa_pwr[i] = rfa_upper_bound;
+                                       }
+                               }
+                               RT_TRACE(COMP_POWER, "rfa_pwr[%d]=%x\n", i, rfa_pwr[i]);
+                       }
+
+               }
+
+#if 1
+               writeVal = (rfa_pwr[3]<<24) | (rfa_pwr[2]<<16) |(rfa_pwr[1]<<8) |rfa_pwr[0];
+               RT_TRACE(COMP_POWER, "WritePower=%08x\n", writeVal);
+#else
+               if(priv->bDynamicTxHighPower == true)     
+               {       
+                       if(index > 1)   
+                       {
+                               writeVal = 0x03030303;
+                       }
+                       else
+                       {
+                               writeVal = (rfa_pwr[3]<<24) | (rfa_pwr[2]<<16) |(rfa_pwr[1]<<8) |rfa_pwr[0];
+                       }
+                       RT_TRACE(COMP_POWER, "HighPower=%08x\n", writeVal);
+               }
+               else
+               {
+                       writeVal = (rfa_pwr[3]<<24) | (rfa_pwr[2]<<16) |(rfa_pwr[1]<<8) |rfa_pwr[0];
+                       RT_TRACE(COMP_POWER, "NormalPower=%08x\n", writeVal);
+               }
+#endif
+               rtl8192_setBBreg(dev, RegOffset[index], 0x7f7f7f7f, writeVal);
+       }
+
+}      /* PHY_RF6052SetOFDMTxPower */
+#endif
+
+void getPowerBase(
+       struct net_device* dev,
+       u8*             pPowerLevel,
+       u8              Channel,
+       u32*    OfdmBase,
+       u32*    MCSBase,
+       u8*             pFinalPowerIndex
+       )
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       u32                     powerBase0, powerBase1;
+       u8                      Legacy_pwrdiff=0, HT20_pwrdiff=0;
+       u8                      i, powerlevel[4];
+       
+       for(i=0; i<2; i++)
+               powerlevel[i] = pPowerLevel[i];
+       if (priv->eeprom_version < 2)
+               powerBase0 = powerlevel[0] + (priv->LegacyHTTxPowerDiff & 0xf); 
+       else if (priv->eeprom_version >= 2)
+       {
+               Legacy_pwrdiff = priv->TxPwrLegacyHtDiff[RF90_PATH_A][Channel-1];
+               powerBase0 = powerlevel[0] + Legacy_pwrdiff; 
+       }
+       powerBase0 = (powerBase0<<24) | (powerBase0<<16) |(powerBase0<<8) |powerBase0;
+       *OfdmBase = powerBase0;
+       RT_TRACE(COMP_POWER, " [OFDM power base index = 0x%x]\n", powerBase0);
+       
+       if(priv->eeprom_version >= 2)
+       {
+               if (priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20)
+               {
+                       for(i=0; i<2; i++)      
+                       {       
+                               HT20_pwrdiff = priv->TxPwrHt20Diff[i][Channel-1];
+                               if (HT20_pwrdiff < 8)   
+                                       powerlevel[i] += HT20_pwrdiff;  
+                               else                            
+                                       powerlevel[i] -= (16-HT20_pwrdiff);
+                       }
+               }
+       }
+       powerBase1 = powerlevel[0];     
+       powerBase1 = (powerBase1<<24) | (powerBase1<<16) |(powerBase1<<8) |powerBase1;
+       *MCSBase = powerBase1;
+       
+       RT_TRACE(COMP_POWER, " [MCS power base index = 0x%x]\n", powerBase1);
+
+       pFinalPowerIndex[0] = powerlevel[0];
+       pFinalPowerIndex[1] = powerlevel[1];
+       switch(priv->EEPROMRegulatory)
+       {
+               case 3:
+                       if (priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20_40)
+                       {
+                               pFinalPowerIndex[0] += priv->PwrGroupHT40[RF90_PATH_A][Channel-1];
+                               pFinalPowerIndex[1] += priv->PwrGroupHT40[RF90_PATH_B][Channel-1];
+                       }
+                       else
+                       {
+                               pFinalPowerIndex[0] += priv->PwrGroupHT20[RF90_PATH_A][Channel-1];
+                               pFinalPowerIndex[1] += priv->PwrGroupHT20[RF90_PATH_B][Channel-1];
+                       }
+                       break;
+               default:
+                       break;
+       }
+       if (priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20_40)
+       {
+               RT_TRACE(COMP_POWER, "40MHz finalPowerIndex (A / B) = 0x%x / 0x%x\n", 
+                       pFinalPowerIndex[0], pFinalPowerIndex[1]);
+       }
+       else
+       {
+               RT_TRACE(COMP_POWER, "20MHz finalPowerIndex (A / B) = 0x%x / 0x%x\n", 
+                       pFinalPowerIndex[0], pFinalPowerIndex[1]);
+       }
+}
+
+void getTxPowerWriteValByRegulatory(
+       struct net_device* dev,
+       u8              Channel,
+       u8              index,
+       u32             powerBase0,
+       u32             powerBase1,
+       u32*    pOutWriteVal
+       )
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       u8              i, chnlGroup, pwr_diff_limit[4];
+       u32             writeVal, customer_limit;
+       
+       switch(priv->EEPROMRegulatory)
+       {
+               case 0: 
+                       chnlGroup = 0;
+                       RT_TRACE(COMP_POWER,"MCSTxPowerLevelOriginalOffset[%d][%d] = 0x%x\n", 
+                               chnlGroup, index, priv->MCSTxPowerLevelOriginalOffset[chnlGroup][index]);
+                       writeVal = priv->MCSTxPowerLevelOriginalOffset[chnlGroup][index] + 
+                               ((index<2)?powerBase0:powerBase1);
+                       RT_TRACE(COMP_POWER,"RTK better performance, writeVal = 0x%x\n", writeVal);
+                       break;
+               case 1: 
+                       if (priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20_40)
+                       {
+                               writeVal = ((index<2)?powerBase0:powerBase1);
+                               RT_TRACE(COMP_POWER,"Realtek regulatory, 40MHz, writeVal = 0x%x\n", writeVal);
+                       }
+                       else
+                       {
+                               if(priv->pwrGroupCnt == 1)
+                                       chnlGroup = 0;
+                               if(priv->pwrGroupCnt >= 3)
+                               {
+                                       if(Channel <= 3)
+                                               chnlGroup = 0;
+                                       else if(Channel >= 4 && Channel <= 8)
+                                               chnlGroup = 1;
+                                       else if(Channel > 8)
+                                               chnlGroup = 2;
+                                       if(priv->pwrGroupCnt == 4)
+                                               chnlGroup++;
+                               }
+                               RT_TRACE(COMP_POWER,"MCSTxPowerLevelOriginalOffset[%d][%d] = 0x%x\n", 
+                               chnlGroup, index, priv->MCSTxPowerLevelOriginalOffset[chnlGroup][index]);
+                               writeVal = priv->MCSTxPowerLevelOriginalOffset[chnlGroup][index] + 
+                                               ((index<2)?powerBase0:powerBase1);
+                               RT_TRACE(COMP_POWER,"Realtek regulatory, 20MHz, writeVal = 0x%x\n", writeVal);
+                       }
+                       break;
+               case 2: 
+                       writeVal = ((index<2)?powerBase0:powerBase1);
+                       RT_TRACE(COMP_POWER,"Better regulatory, writeVal = 0x%x\n", writeVal);
+                       break;
+               case 3: 
+                       chnlGroup = 0;
+                       RT_TRACE(COMP_POWER,"MCSTxPowerLevelOriginalOffset[%d][%d] = 0x%x\n", 
+                               chnlGroup, index, priv->MCSTxPowerLevelOriginalOffset[chnlGroup][index]);
+
+                       if (priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20_40)
+                       {
+                               RT_TRACE(COMP_POWER,"customer's limit, 40MHz = 0x%x\n", 
+                                       priv->PwrGroupHT40[RF90_PATH_A][Channel-1]);
+                       }
+                       else
+                       {
+                               RT_TRACE(COMP_POWER,"customer's limit, 20MHz = 0x%x\n", 
+                                       priv->PwrGroupHT20[RF90_PATH_A][Channel-1]);
+                       }
+                       for (i=0; i<4; i++)
+                       {
+                               pwr_diff_limit[i] = (u8)((priv->MCSTxPowerLevelOriginalOffset[chnlGroup][index]&(0x7f<<(i*8)))>>(i*8));
+                               if (priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20_40)
+                               {
+                                       if(pwr_diff_limit[i] > priv->PwrGroupHT40[RF90_PATH_A][Channel-1])
+                                       {
+                                               pwr_diff_limit[i] = priv->PwrGroupHT40[RF90_PATH_A][Channel-1];
+                                       }
+                               }
+                               else
+                               {
+                                       if(pwr_diff_limit[i] > priv->PwrGroupHT20[RF90_PATH_A][Channel-1])
+                                       {
+                                               pwr_diff_limit[i] = priv->PwrGroupHT20[RF90_PATH_A][Channel-1];
+                                       }
+                               }
+                       }
+                       customer_limit = (pwr_diff_limit[3]<<24) | (pwr_diff_limit[2]<<16) |
+                                                       (pwr_diff_limit[1]<<8) | (pwr_diff_limit[0]);
+                       RT_TRACE(COMP_POWER,"Customer's limit = 0x%x\n", customer_limit);
+
+                       writeVal = customer_limit + ((index<2)?powerBase0:powerBase1);
+                       RT_TRACE(COMP_POWER,"Customer, writeVal = 0x%x\n", writeVal);
+                       break;
+               default:
+                       chnlGroup = 0;
+                       writeVal = priv->MCSTxPowerLevelOriginalOffset[chnlGroup][index] + 
+                               ((index<2)?powerBase0:powerBase1);
+                       RT_TRACE(COMP_POWER,"RTK better performance, writeVal = 0x%x\n", writeVal);
+                       break;
+       }
+
+       if(priv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level1)
+               writeVal = 0x10101010;
+       else if(priv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level2)
+               writeVal = 0x0;
+
+       *pOutWriteVal = writeVal;
+
+}
+
+void setAntennaDiff(
+       struct net_device* dev,
+       u8*             pFinalPowerIndex
+       )
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       char    ant_pwr_diff=0;
+       u32     u4RegValue=0;
+
+       if (priv->rf_type == RF_2T2R)
+       {
+               ant_pwr_diff = pFinalPowerIndex[1] - pFinalPowerIndex[0];
+               
+               if(ant_pwr_diff > 7)
+                       ant_pwr_diff = 7;
+               if(ant_pwr_diff < -8)
+                       ant_pwr_diff = -8;
+               RT_TRACE(COMP_POWER,"Antenna Diff from RF-B to RF-A = %d (0x%x)\n", 
+                       ant_pwr_diff, ant_pwr_diff&0xf);
+               ant_pwr_diff &= 0xf;
+       }
+       priv->AntennaTxPwDiff[2] = 0;
+       priv->AntennaTxPwDiff[1] = 0;
+       priv->AntennaTxPwDiff[0] = (u8)(ant_pwr_diff);          
+
+       u4RegValue = (priv->AntennaTxPwDiff[2]<<8 | 
+                               priv->AntennaTxPwDiff[1]<<4 | 
+                               priv->AntennaTxPwDiff[0]        );
+
+       rtl8192_setBBreg(dev, rFPGA0_TxGainStage, 
+               (bXBTxAGC|bXCTxAGC|bXDTxAGC), u4RegValue);
+
+       RT_TRACE(COMP_POWER,"Write BCD-Diff(0x%x) = 0x%x\n", 
+               rFPGA0_TxGainStage, u4RegValue);
+}
+
+void writeOFDMPowerReg(
+       struct net_device* dev,
+       u8              index,
+       u32             Value
+       )
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       u16 RegOffset[6] = {0xe00, 0xe04, 0xe10, 0xe14, 0xe18, 0xe1c};
+       u8 i, rfa_pwr[4];
+       u8 rfa_lower_bound = 0, rfa_upper_bound = 0, rf_pwr_diff = 0;
+       u32 writeVal=Value;
+       if (priv->rf_type == RF_2T2R)
+       {                       
+               rf_pwr_diff = priv->AntennaTxPwDiff[0];
+
+               if (rf_pwr_diff >= 8)           
+               {       
+                       rfa_lower_bound = 0x10-rf_pwr_diff;
+                       RT_TRACE(COMP_POWER,"rfa_lower_bound= %d\n", rfa_lower_bound);
+               }
+               else if (rf_pwr_diff >= 0)      
+               {
+                       rfa_upper_bound = RF6052_MAX_TX_PWR-rf_pwr_diff;
+                       RT_TRACE(COMP_POWER,"rfa_upper_bound= %d\n", rfa_upper_bound);
+               }                       
+       }
+
+       for (i=0; i<4; i++)
+       {
+               rfa_pwr[i] = (u8)((writeVal & (0x7f<<(i*8)))>>(i*8));
+               if (rfa_pwr[i]  > RF6052_MAX_TX_PWR)
+                       rfa_pwr[i]  = RF6052_MAX_TX_PWR;
+
+               if (priv->rf_type == RF_2T2R)
+               {
+                       if (rf_pwr_diff >= 8)           
+                       {       
+                               if (rfa_pwr[i] <rfa_lower_bound)
+                               {
+                                       RT_TRACE(COMP_POWER,"Underflow");
+                                       rfa_pwr[i] = rfa_lower_bound;
+                               }
+                       }
+                       else if (rf_pwr_diff >= 1)      
+                       {       
+                               if (rfa_pwr[i] > rfa_upper_bound)
+                               {
+                                       RT_TRACE(COMP_POWER,"Overflow");
+                                       rfa_pwr[i] = rfa_upper_bound;
+                               }
+                       }
+                       RT_TRACE(COMP_POWER,"rfa_pwr[%d]=%x\n", i, rfa_pwr[i]);
+               }
+
+       }
+
+       writeVal = (rfa_pwr[3]<<24) | (rfa_pwr[2]<<16) |(rfa_pwr[1]<<8) |rfa_pwr[0];
+
+       rtl8192_setBBreg(dev, RegOffset[index], 0x7f7f7f7f, writeVal);
+       RT_TRACE(COMP_POWER,"Set 0x%x = %08x\n",RegOffset[index], 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.
+ *
+ *---------------------------------------------------------------------------*/
+extern void 
+PHY_RF6052SetOFDMTxPower(struct net_device* dev, u8* pPowerLevel, u8 Channel)
+{
+       u32 writeVal, powerBase0, powerBase1;
+       u8 index = 0;
+       u8 finalPowerIndex[4];
+
+       getPowerBase(dev, pPowerLevel, Channel, &powerBase0, &powerBase1, &finalPowerIndex[0]);
+       setAntennaDiff(dev, &finalPowerIndex[0] );
+       
+       for(index=0; index<6; index++)
+       {
+               getTxPowerWriteValByRegulatory(dev, Channel, index, 
+                       powerBase0, powerBase1, &writeVal);
+
+               writeOFDMPowerReg(dev, index, writeVal);
+       }
+}
+
+bool PHY_RF6052_Config(struct net_device* dev)
+{
+       struct r8192_priv                       *priv = rtllib_priv(dev);
+       bool rtStatus = true;   
+       u8 bRegHwParaFile = 1;
+       
+       if(priv->rf_type == RF_1T1R)
+               priv->NumTotalRFPath = 1;
+       else
+       priv->NumTotalRFPath = 2;
+
+       switch(bRegHwParaFile)
+       {
+               case 0:
+                       phy_RF6052_Config_HardCode(dev);
+                       break;
+
+               case 1:
+                       rtStatus = phy_RF6052_Config_ParaFile(dev);
+                       break;
+
+               case 2:
+                       phy_RF6052_Config_HardCode(dev);
+                       phy_RF6052_Config_ParaFile(dev);
+                       break;
+
+               default:
+                       phy_RF6052_Config_HardCode(dev);
+                       break;
+       }
+       return rtStatus;
+               
+}
+
+void phy_RF6052_Config_HardCode(struct net_device* dev)
+{
+       
+
+       
+}
+
+bool phy_RF6052_Config_ParaFile(struct net_device* dev)
+{
+       u32                     u4RegValue = 0;
+       u8                      eRFPath;
+       bool rtStatus = true;
+       struct r8192_priv       *priv = rtllib_priv(dev);
+       BB_REGISTER_DEFINITION_T        *pPhyReg;       
+
+
+       for(eRFPath = 0; eRFPath <priv->NumTotalRFPath; eRFPath++)
+       {
+
+               pPhyReg = &priv->PHYRegDef[eRFPath];
+               
+               switch(eRFPath)
+               {
+               case RF90_PATH_A:
+               case RF90_PATH_C:
+                       u4RegValue = rtl8192_QueryBBReg(dev, pPhyReg->rfintfs, bRFSI_RFENV);
+                       break;
+               case RF90_PATH_B :
+               case RF90_PATH_D:
+                       u4RegValue = rtl8192_QueryBBReg(dev, pPhyReg->rfintfs, bRFSI_RFENV<<16);
+                       break;
+               }
+
+               rtl8192_setBBreg(dev, pPhyReg->rfintfe, bRFSI_RFENV<<16, 0x1);
+               
+               rtl8192_setBBreg(dev, pPhyReg->rfintfo, bRFSI_RFENV, 0x1);
+
+               rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, b3WireAddressLength, 0x0);  
+               rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, b3WireDataLength, 0x0);     
+
+
+               switch(eRFPath)
+               {
+               case RF90_PATH_A:
+#if    RTL8190_Download_Firmware_From_Header
+                       rtStatus= rtl8192_phy_ConfigRFWithHeaderFile(dev,(RF90_RADIO_PATH_E)eRFPath);
+#else
+                       rtStatus = PHY_ConfigRFWithParaFile(dev, (char* )&szRadioAFile, (RF90_RADIO_PATH_E)eRFPath);
+#endif
+                       break;
+               case RF90_PATH_B:
+#if    RTL8190_Download_Firmware_From_Header
+                       rtStatus= rtl8192_phy_ConfigRFWithHeaderFile(dev,(RF90_RADIO_PATH_E)eRFPath);
+#else
+                       if(priv->rf_type == RF_2T2R_GREEN)
+                               rtStatus = PHY_ConfigRFWithParaFile(dev, (char *)&szRadioBGMFile, (RF90_RADIO_PATH_E)eRFPath);
+                       else
+                               rtStatus = PHY_ConfigRFWithParaFile(dev, (char* )&szRadioBFile, (RF90_RADIO_PATH_E)eRFPath);
+#endif
+                       break;
+               case RF90_PATH_C:
+                       break;
+               case RF90_PATH_D:
+                       break;
+               }
+
+               switch(eRFPath)
+               {
+               case RF90_PATH_A:
+               case RF90_PATH_C:
+                       rtl8192_setBBreg(dev, pPhyReg->rfintfs, bRFSI_RFENV, u4RegValue);
+                       break;
+               case RF90_PATH_B :
+               case RF90_PATH_D:
+                       rtl8192_setBBreg(dev, pPhyReg->rfintfs, bRFSI_RFENV<<16, u4RegValue);
+                       break;
+               }
+
+               if(rtStatus != true){
+                       printk("phy_RF6052_Config_ParaFile():Radio[%d] Fail!!", eRFPath);
+                       goto phy_RF6052_Config_ParaFile_Fail;
+               }
+
+       }
+
+       RT_TRACE(COMP_INIT, "<---phy_RF6052_Config_ParaFile()\n");
+       return rtStatus;
+       
+phy_RF6052_Config_ParaFile_Fail:       
+       return rtStatus;
+}
+
+
+extern u32 PHY_RFShadowRead(
+       struct net_device               * dev,
+       RF90_RADIO_PATH_E       eRFPath,
+       u32                                     Offset)
+{
+       return  RF_Shadow[eRFPath][Offset].Value;
+       
+}      /* PHY_RFShadowRead */
+
+
+extern void PHY_RFShadowWrite(
+       struct net_device               * dev,
+       RF90_RADIO_PATH_E       eRFPath,
+       u32                                     Offset,
+       u32                                     Data)
+{
+       RF_Shadow[eRFPath][Offset].Value = (Data & bMask20Bits);
+       RF_Shadow[eRFPath][Offset].Driver_Write = true;
+       
+}      /* PHY_RFShadowWrite */
+
+
+extern bool PHY_RFShadowCompare(
+       struct net_device               * dev,
+       RF90_RADIO_PATH_E       eRFPath,
+       u32                                     Offset)
+{
+       u32     reg;
+       
+       if (RF_Shadow[eRFPath][Offset].Compare == true)
+       {
+               reg = rtl8192_phy_QueryRFReg(dev, eRFPath, Offset, bMask20Bits);
+               if (RF_Shadow[eRFPath][Offset].Value != reg)
+               {
+                       RF_Shadow[eRFPath][Offset].ErrorOrNot = true;
+                       RT_TRACE(COMP_INIT, "PHY_RFShadowCompare RF-%d Addr%02xErr = %05x", eRFPath, Offset, reg);
+               }
+               else
+               {
+                       RT_TRACE(COMP_INIT, "PHY_RFShadowCompare RF-%d Addr%02x Err = %05x return false\n", eRFPath, Offset, reg);
+                       RF_Shadow[eRFPath][Offset].ErrorOrNot = false;
+               }
+               return RF_Shadow[eRFPath][Offset].ErrorOrNot;
+       }
+       return false;
+}      /* PHY_RFShadowCompare */
+
+extern void PHY_RFShadowRecorver(
+       struct net_device               * dev,
+       RF90_RADIO_PATH_E       eRFPath,
+       u32                                     Offset)
+{
+       if (RF_Shadow[eRFPath][Offset].ErrorOrNot == true)
+       {
+               if (RF_Shadow[eRFPath][Offset].Recorver == true)
+               {
+                       rtl8192_phy_SetRFReg(dev, eRFPath, Offset, bMask20Bits, RF_Shadow[eRFPath][Offset].Value);
+                       RT_TRACE(COMP_INIT, "PHY_RFShadowRecorver RF-%d Addr%02x=%05x", 
+                       eRFPath, Offset, RF_Shadow[eRFPath][Offset].Value);
+               }
+       }
+       
+}      /* PHY_RFShadowRecorver */
+
+
+extern void PHY_RFShadowCompareAll(struct net_device * dev)
+{
+       u32             eRFPath;
+       u32             Offset;
+
+       for (eRFPath = 0; eRFPath < RF6052_MAX_PATH; eRFPath++)
+       {
+               for (Offset = 0; Offset <= RF6052_MAX_REG; Offset++)
+               {
+                       PHY_RFShadowCompare(dev, (RF90_RADIO_PATH_E)eRFPath, Offset);
+               }
+       }
+       
+}      /* PHY_RFShadowCompareAll */
+
+
+extern void PHY_RFShadowRecorverAll(struct net_device * dev)
+{
+       u32             eRFPath;
+       u32             Offset;
+
+       for (eRFPath = 0; eRFPath < RF6052_MAX_PATH; eRFPath++)
+       {
+               for (Offset = 0; Offset <= RF6052_MAX_REG; Offset++)
+               {
+                       PHY_RFShadowRecorver(dev, (RF90_RADIO_PATH_E)eRFPath, Offset);
+               }
+       }
+       
+}      /* PHY_RFShadowRecorverAll */
+
+
+extern void PHY_RFShadowCompareFlagSet(
+       struct net_device               * dev,
+       RF90_RADIO_PATH_E       eRFPath,
+       u32                                     Offset,
+       u8                                      Type)
+{
+       RF_Shadow[eRFPath][Offset].Compare = Type;
+               
+}      /* PHY_RFShadowCompareFlagSet */
+
+
+extern void PHY_RFShadowRecorverFlagSet(
+       struct net_device               * dev,
+       RF90_RADIO_PATH_E       eRFPath,
+       u32                                     Offset,
+       u8                                      Type)
+{
+       RF_Shadow[eRFPath][Offset].Recorver= Type;
+               
+}      /* PHY_RFShadowRecorverFlagSet */
+
+
+extern void PHY_RFShadowCompareFlagSetAll(struct net_device  * dev)
+{
+       u32             eRFPath;
+       u32             Offset;
+
+       for (eRFPath = 0; eRFPath < RF6052_MAX_PATH; eRFPath++)
+       {
+               for (Offset = 0; Offset <= RF6052_MAX_REG; Offset++)
+               {
+                       if (Offset != 0x26 && Offset != 0x27)
+                               PHY_RFShadowCompareFlagSet(dev, (RF90_RADIO_PATH_E)eRFPath, Offset, false);
+                       else
+                               PHY_RFShadowCompareFlagSet(dev, (RF90_RADIO_PATH_E)eRFPath, Offset, true);
+               }
+       }
+               
+}      /* PHY_RFShadowCompareFlagSetAll */
+
+
+extern void PHY_RFShadowRecorverFlagSetAll(struct net_device  * dev)
+{
+       u32             eRFPath;
+       u32             Offset;
+
+       for (eRFPath = 0; eRFPath < RF6052_MAX_PATH; eRFPath++)
+       {
+               for (Offset = 0; Offset <= RF6052_MAX_REG; Offset++)
+               {
+                       if (Offset != 0x26 && Offset != 0x27)
+                               PHY_RFShadowRecorverFlagSet(dev, (RF90_RADIO_PATH_E)eRFPath, Offset, false);
+                       else
+                               PHY_RFShadowRecorverFlagSet(dev, (RF90_RADIO_PATH_E)eRFPath, Offset, true);
+               }
+       }
+               
+}      /* PHY_RFShadowCompareFlagSetAll */
+
+
+
+extern void PHY_RFShadowRefresh(struct net_device  * dev)
+{
+       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 */
+
+#endif
diff --git a/ubuntu/rtl8192se/rtl8192s/r8192S_rtl6052.h b/ubuntu/rtl8192se/rtl8192s/r8192S_rtl6052.h
new file mode 100644 (file)
index 0000000..78614ba
--- /dev/null
@@ -0,0 +1,116 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ * 
+ * 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
+ * 
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ * 
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+
+
+/*--------------------------Define Parameters-------------------------------*/
+
+#define        RF6052_MAX_TX_PWR       0x3F
+#define        RF6052_MAX_REG          0x3F
+#define        RF6052_MAX_PATH         4
+/*--------------------------Define Parameters-------------------------------*/
+
+
+/*------------------------------Define structure----------------------------*/ 
+
+/*------------------------------Define structure----------------------------*/ 
+
+
+/*------------------------Export global variable----------------------------*/
+/*------------------------Export global variable----------------------------*/
+
+/*------------------------Export Marco Definition---------------------------*/
+
+/*------------------------Export Marco Definition---------------------------*/
+
+
+/*--------------------------Exported Function prototype---------------------*/
+#if 1
+extern void PHY_SetRF0222DBandwidth(struct net_device* dev , HT_CHANNEL_WIDTH Bandwidth);      
+extern void PHY_SetRF8225Bandwidth(    struct net_device* dev ,        HT_CHANNEL_WIDTH Bandwidth);
+extern bool PHY_RF8225_Config(struct net_device* dev );
+extern void phy_RF8225_Config_HardCode(struct net_device*      dev);
+extern bool phy_RF8225_Config_ParaFile(struct net_device* dev);
+extern void PHY_SetRF8225CckTxPower(struct net_device* dev ,u8 powerlevel);
+extern void PHY_SetRF8225OfdmTxPower(struct net_device* dev ,u8        powerlevel);
+extern void PHY_SetRF0222DOfdmTxPower(struct net_device* dev ,u8 powerlevel);
+extern void PHY_SetRF0222DCckTxPower(struct net_device* dev ,u8        powerlevel);
+
+extern void PHY_SetRF8256Bandwidth(struct net_device* dev , HT_CHANNEL_WIDTH Bandwidth);
+extern void PHY_RF8256_Config(struct net_device* dev);
+extern void phy_RF8256_Config_ParaFile(struct net_device* dev);
+extern void PHY_SetRF8256CCKTxPower(struct net_device* dev, u8 powerlevel);
+extern void PHY_SetRF8256OFDMTxPower(struct net_device* dev, u8 powerlevel);
+#endif
+
+extern void            RF_ChangeTxPath(struct net_device  * dev, u16 DataRate);
+extern void            PHY_RF6052SetBandwidth(struct net_device  * dev,HT_CHANNEL_WIDTH        Bandwidth);     
+extern void            PHY_RF6052SetCckTxPower(struct net_device  * dev, u8    powerlevel);
+extern void            PHY_RF6052SetOFDMTxPower(struct net_device  * dev, u8* pPowerLevel, u8 Channel);
+extern bool PHY_RF6052_Config(struct net_device  * dev);
+extern void PHY_RFShadowRefresh( struct net_device             * dev);
+extern void PHY_RFShadowWrite( struct net_device* dev, RF90_RADIO_PATH_E eRFPath, u32 Offset, u32 Data);
+
+extern bool
+PHY_RFShadowCompare(
+       struct net_device               * dev,
+       RF90_RADIO_PATH_E       eRFPath,
+       u32                                     Offset);
+extern void
+PHY_RFShadowRecorver(
+       struct net_device               * dev,
+       RF90_RADIO_PATH_E       eRFPath,
+       u32                                     Offset);
+extern void
+PHY_RFShadowCompareFlagSet(
+       struct net_device               * dev,
+       RF90_RADIO_PATH_E       eRFPath,
+       u32                                     Offset,
+       u8                                      Type);
+extern void
+PHY_RFShadowRecorverFlagSet(
+       struct net_device               * dev,
+       RF90_RADIO_PATH_E       eRFPath,
+       u32                                     Offset,
+       u8                                      Type);
+#if 0
+extern u32
+PHY_RFShadowRead(
+       struct net_device               * dev,
+       RF90_RADIO_PATH_E       eRFPath,
+       u32                                     Offset);
+extern void
+PHY_RFShadowCompareAll(
+       struct net_device               * dev);
+extern void
+PHY_RFShadowRecorverAll(
+       struct net_device               * dev);
+extern void
+PHY_RFShadowCompareFlagSetAll(
+       struct net_device               * dev);
+extern void
+PHY_RFShadowRecorverFlagSetAll(
+       struct net_device               * dev);
+extern void
+PHY_RFShadowRefresh(
+       struct net_device               * dev);
+#endif
+/*--------------------------Exported Function prototype---------------------*/
+
+
+/* End of HalRf.h */
diff --git a/ubuntu/rtl8192se/rtl8192s/r8192S_scan.c b/ubuntu/rtl8192se/rtl8192s/r8192S_scan.c
new file mode 100644 (file)
index 0000000..5b0f44b
--- /dev/null
@@ -0,0 +1,414 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * Based on the r8180 driver, which is:
+ * Copyright 2004-2005 Andrea Merello <andreamrl@tiscali.it>, et al.
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+#include "../rtl_core.h"
+
+#define IWL_SCAN_CHECK_WATCHDOG (7 * HZ)
+
+void rtl8192se_hw_scan_simu(void *data)
+{
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20))
+       struct r8192_priv *priv = container_of_dwork_rsl(data,struct r8192_priv,hw_scan_simu_wq);
+       struct net_device *dev = priv->rtllib->dev;
+#else
+       struct net_device *dev = (struct net_device *)data;
+       struct r8192_priv *priv = rtllib_priv(dev);
+#endif
+
+       rtllib_update_active_chan_map(priv->rtllib);
+
+       priv->rtllib->current_network.channel = (priv->rtllib->current_network.channel + 1) % 12;
+       if (priv->rtllib->scan_watch_dog++ > 12)
+       {
+               goto out; /* no good chans */
+       }
+
+       if ((!test_bit(STATUS_SCANNING, &priv->rtllib->status)) || 
+                       (test_bit(STATUS_SCAN_ABORTING, &priv->rtllib->status))){
+               goto out;
+       }
+
+       if(priv->rtllib->current_network.channel != 0){
+               priv->rtllib->set_chan(dev,priv->rtllib->current_network.channel);
+#ifdef _RTL8192_EXT_PATCH_
+               rtllib_send_probe_requests(priv->rtllib, 1);
+#else
+               rtllib_send_probe_requests(priv->rtllib);
+#endif
+       }
+
+       queue_delayed_work_rsl(priv->priv_wq, &priv->hw_scan_simu_wq, MSECS(RTLLIB_SOFTMAC_SCAN_TIME));
+
+       return;
+out:
+       priv->rtllib->scan_watch_dog =0;
+       rtl8192se_rx_surveydone_cmd(dev);
+
+       if(priv->rtllib->state == RTLLIB_LINKED_SCANNING){
+               priv->rtllib->current_network.channel = priv->rtllib->hwscan_ch_bk;
+               printk("%s():back to linked chan:%d\n", __func__,priv->rtllib->current_network.channel);
+               priv->rtllib->set_chan(dev,priv->rtllib->current_network.channel);
+       }
+}
+
+void rtl8192se_before_hw_scan(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       HT_EXTCHNL_OFFSET chan_offset=0;
+       HT_CHANNEL_WIDTH bandwidth=0;
+       struct rtllib_device *ieee = priv->rtllib;
+
+       if(priv->rtllib->state != RTLLIB_LINKED)
+               return;
+
+
+#ifdef ENABLE_LPS
+       if (ieee->LeisurePSLeave) {
+               ieee->LeisurePSLeave(ieee->dev);
+       }
+       /* notify AP to be in PS mode */
+       rtllib_sta_ps_send_null_frame(ieee, 1);
+       rtllib_sta_ps_send_null_frame(ieee, 1);
+#endif
+
+       netif_carrier_off(ieee->dev);
+       if (ieee->data_hard_stop)
+               ieee->data_hard_stop(ieee->dev);
+       rtllib_stop_send_beacons(ieee);
+       ieee->state = RTLLIB_LINKED_SCANNING;
+       ieee->link_change(ieee->dev);
+       /* wait for ps packet to be kicked out successfully */
+       //msleep(50);
+       mdelay(50);
+
+#if(RTL8192S_DISABLE_FW_DM == 0)
+       if (ieee->SetFwCmdHandler) {
+               ieee->SetFwCmdHandler(ieee->dev, FW_CMD_PAUSE_DM_BY_SCAN);
+       }
+#endif
+
+       if (ieee->pHTInfo->bCurrentHTSupport && ieee->pHTInfo->bEnableHT && ieee->pHTInfo->bCurBW40MHz) {
+               priv->hwscan_bw_40 = 1;
+               priv->rtllib->chan_offset_bk = chan_offset = ieee->pHTInfo->CurSTAExtChnlOffset;
+               priv->rtllib->bandwidth_bk = bandwidth = (HT_CHANNEL_WIDTH)ieee->pHTInfo->bCurBW40MHz;
+               printk("-------------->%s():before scan force BW to 20M:%d, %d\n", __func__,chan_offset, bandwidth);
+               ieee->SetBWModeHandler(ieee->dev, HT_CHANNEL_WIDTH_20, HT_EXTCHNL_OFFSET_NO_EXT);
+       }
+}
+void rtl8192se_after_hw_scan(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       HT_EXTCHNL_OFFSET chan_offset = priv->rtllib->chan_offset_bk;
+       HT_CHANNEL_WIDTH bandwidth = priv->rtllib->bandwidth_bk;
+       struct rtllib_device *ieee = priv->rtllib;
+
+       if(priv->rtllib->state != RTLLIB_LINKED_SCANNING){
+               goto out;
+       }
+
+       if (ieee->LinkDetectInfo.NumRecvBcnInPeriod == 0 || 
+                       ieee->LinkDetectInfo.NumRecvDataInPeriod == 0 ) {
+               ieee->LinkDetectInfo.NumRecvBcnInPeriod = 1;
+               ieee->LinkDetectInfo.NumRecvDataInPeriod= 1;    
+       }
+
+       if (priv->hwscan_bw_40) {
+               priv->hwscan_bw_40 = 0;
+               printk("-------------->%s():after scan back BW to 40M:%d, %d\n", __func__, chan_offset, bandwidth);
+#if 1
+               if (chan_offset == HT_EXTCHNL_OFFSET_UPPER){
+                       ieee->set_chan(ieee->dev, priv->rtllib->hwscan_ch_bk + 2);
+               }else if (chan_offset == HT_EXTCHNL_OFFSET_LOWER){
+                       ieee->set_chan(ieee->dev, priv->rtllib->hwscan_ch_bk - 2);
+               }else{
+                       priv->rtllib->current_network.channel = priv->rtllib->hwscan_ch_bk;
+                       ieee->set_chan(ieee->dev, priv->rtllib->hwscan_ch_bk);
+               }
+#endif
+               ieee->SetBWModeHandler(ieee->dev, bandwidth, chan_offset);
+       } else {
+               ieee->set_chan(ieee->dev, priv->rtllib->hwscan_ch_bk);
+       }
+       
+#if(RTL8192S_DISABLE_FW_DM == 0)
+       if (ieee->SetFwCmdHandler) {
+               ieee->SetFwCmdHandler(ieee->dev, FW_CMD_RESUME_DM_BY_SCAN);
+       }
+#endif
+       ieee->state = RTLLIB_LINKED;
+       ieee->link_change(ieee->dev);
+
+#ifdef ENABLE_LPS
+       /* Notify AP that I wake up again */
+       rtllib_sta_ps_send_null_frame(ieee, 0);
+#endif
+
+       if (ieee->data_hard_resume)
+               ieee->data_hard_resume(ieee->dev);
+       
+       if(ieee->iw_mode == IW_MODE_ADHOC || ieee->iw_mode == IW_MODE_MASTER)
+               rtllib_start_send_beacons(ieee);
+       
+       netif_carrier_on(ieee->dev);
+       
+out:
+       return;
+}
+/* Service HAL_FW_C2H_CMD_SurveyDone (0x9) */
+void rtl8192se_rx_surveydone_cmd(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       
+       
+
+       cancel_delayed_work(&priv->check_hw_scan_wq);
+
+       /* If a request to abort was given, or the scan did not succeed
+        * then we reset the scan state machine and terminate,
+        * re-queuing another scan if one has been requested */
+       if (test_bit(STATUS_SCAN_ABORTING, &priv->rtllib->status)) {
+               RT_TRACE(COMP_ERR, "Aborted scan completed.\n");
+               clear_bit(STATUS_SCAN_ABORTING, &priv->rtllib->status);
+       } 
+       
+       rtl8192se_after_hw_scan(dev);
+
+#ifdef CONFIG_FW_PARSEBEACON
+       if(priv->rtllib->state < RTLLIB_LINKED)
+       write_nic_dword(dev, RXFILTERMAP, 0x0100);
+#endif
+
+       mdelay(1);
+
+       clear_bit(STATUS_SCANNING, &priv->rtllib->status);
+
+       {
+               union iwreq_data wrqu;
+               memset(&wrqu, 0, sizeof(wrqu));
+               wireless_send_event(priv->rtllib->dev,SIOCGIWSCAN,&wrqu,NULL);
+       }
+
+       if(priv->rtllib->hwscan_sem_up == 0){
+               up(&priv->wx_sem);
+               priv->rtllib->hwscan_sem_up = 1;
+       }
+
+
+       return;
+}
+
+
+void   rtl8192se_check_hw_scan(void *data)
+{
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20))
+       struct r8192_priv *priv = container_of_dwork_rsl(data,struct r8192_priv,check_hw_scan_wq);
+       struct net_device *dev = priv->rtllib->dev;
+#else
+       struct net_device *dev = (struct net_device *)data;
+       struct r8192_priv *priv = rtllib_priv(dev);
+#endif
+       unsigned long flags;
+
+
+       spin_lock_irqsave(&priv->fw_scan_lock,flags);
+       printk("----------->%s()\n", __func__);
+
+       if (test_bit(STATUS_SCANNING, &priv->rtllib->status) ||
+           test_bit(STATUS_SCAN_ABORTING, &priv->rtllib->status)) {
+               printk("FW Scan long time without stop, stop hw scan\n");
+               rtl8192se_send_scan_abort(dev);
+       }
+       
+
+       if(priv->rtllib->hwscan_sem_up == 0){
+               up(&priv->wx_sem);
+               priv->rtllib->hwscan_sem_up = 1;
+       }
+
+       printk("<-----------%s()\n", __func__);
+       spin_unlock_irqrestore(&priv->fw_scan_lock,flags);
+}
+
+void rtl8192se_start_hw_scan(void *data)
+{
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20))
+       struct r8192_priv *priv = container_of_dwork_rsl(data,struct r8192_priv,start_hw_scan_wq);
+       struct net_device *dev = priv->rtllib->dev;
+#else
+       struct net_device *dev = (struct net_device *)data;
+       struct r8192_priv *priv = rtllib_priv(dev);
+#endif
+       bool start_flag =true;
+       unsigned long flags;
+
+       down(&priv->wx_sem);
+       priv->rtllib->hwscan_sem_up = 0;
+
+       spin_lock_irqsave(&priv->fw_scan_lock,flags);
+
+
+       cancel_delayed_work(&priv->check_hw_scan_wq);
+
+       /* Make sure the scan wasn't canceled before this queued work
+        * was given the chance to run... */
+       if (!test_bit(STATUS_SCANNING, &priv->rtllib->status)){
+               RT_TRACE(COMP_ERR,"not in scanning. Ignoring second request.\n");
+               goto done;
+       }
+
+       if (test_bit(STATUS_SCAN_ABORTING, &priv->rtllib->status)) {
+               RT_TRACE(COMP_ERR, "Scan request while abort pending.  Queuing.\n");
+               goto done;
+       }
+       
+       
+#ifdef CONFIG_FW_PARSEBEACON
+       if(priv->rtllib->state < RTLLIB_LINKED)
+       write_nic_dword(dev, RXFILTERMAP, 0x0000);
+#endif
+
+       rtl8192se_before_hw_scan(dev);
+       rtl8192se_send_scan_cmd(dev,start_flag);
+
+       queue_delayed_work_rsl(priv->priv_wq,&priv->check_hw_scan_wq,MSECS(7000));
+
+       
+       spin_unlock_irqrestore(&priv->fw_scan_lock,flags);
+       
+       return;
+
+ done:
+       up(&priv->wx_sem);
+       priv->rtllib->hwscan_sem_up = 1;
+       /* Cannot perform scan. Make sure we clear scanning
+       * bits from status so next scan request can be performed.
+       * If we don't clear scanning status bit here all next scan
+       * will fail
+       */
+       clear_bit(STATUS_SCANNING, &priv->rtllib->status);
+       
+       /* inform mac80211 scan aborted */
+       
+       //printk("<-------------%s() failed\n", __func__);
+       spin_unlock_irqrestore(&priv->fw_scan_lock,flags);
+
+       return;
+}
+
+void rtl8192se_hw_scan_initiate(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       unsigned long flags;
+
+       spin_lock_irqsave(&priv->fw_scan_lock,flags);
+
+
+       if (test_bit(STATUS_SCANNING, &priv->rtllib->status)) {
+               printk("Scan already in progress.\n");
+               goto done;
+       }
+
+       if (test_bit(STATUS_SCAN_ABORTING, &priv->rtllib->status)) {
+               printk("Scan request while abort pending\n");
+               goto done;
+       }
+
+       
+       set_bit(STATUS_SCANNING, &priv->rtllib->status);
+
+       queue_delayed_work_rsl(priv->priv_wq,&priv->start_hw_scan_wq,0);
+
+done:
+       spin_unlock_irqrestore(&priv->fw_scan_lock,flags);
+
+       return;
+}
+
+void rtl8192se_send_scan_abort(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       int ret = true;
+       bool start_flag =false;
+
+
+       /* If there isn't a scan actively going on in the hardware
+        * then we are in between scan bands and not actually
+        * actively scanning, so don't send the abort command */
+       if (!test_bit(STATUS_SCANNING, &priv->rtllib->status)) {
+               goto done;
+       }
+
+       ret = rtl8192se_send_scan_cmd(dev, start_flag);
+       mdelay(1); 
+
+#ifdef CONFIG_FW_PARSEBEACON
+       if(priv->rtllib->state < RTLLIB_LINKED)
+       write_nic_dword(dev, RXFILTERMAP, 0x0100);
+#endif
+
+       if (ret) {
+               goto done;
+       }
+       
+
+done:  
+       clear_bit(STATUS_SCAN_ABORTING, &priv->rtllib->status);
+       clear_bit(STATUS_SCANNING, &priv->rtllib->status);
+       
+       return;
+}
+
+/**
+ * rtl8192se_cancel_hw_scan - Cancel any currently executing HW scan
+ *
+ * NOTE: priv->mutex is not required before calling this function
+ */
+void rtl8192se_cancel_hw_scan(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       unsigned long flags;
+       
+       spin_lock_irqsave(&priv->fw_scan_lock,flags);
+
+       if (test_bit(STATUS_SCANNING, &priv->rtllib->status)) {
+               if (!test_bit(STATUS_SCAN_ABORTING, &priv->rtllib->status)) {
+                       printk("-------------->%s()scan abort start...\n", __func__);
+                       cancel_delayed_work(&priv->check_hw_scan_wq);
+
+                       set_bit(STATUS_SCAN_ABORTING, &priv->rtllib->status);
+                       rtl8192se_send_scan_abort(dev);
+               } else {
+                       printk("-------------->%s()Scan abort already in progress.\n", __func__);
+               }
+       }
+
+       if(priv->rtllib->hwscan_sem_up == 0){
+               up(&priv->wx_sem);
+               priv->rtllib->hwscan_sem_up = 1;
+       }
+
+       spin_unlock_irqrestore(&priv->fw_scan_lock,flags);
+       return;
+}
+
diff --git a/ubuntu/rtl8192se/rtl8192s/r8192S_scan.h b/ubuntu/rtl8192se/rtl8192s/r8192S_scan.h
new file mode 100644 (file)
index 0000000..35ddc1c
--- /dev/null
@@ -0,0 +1,38 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * Based on the r8180 driver, which is:
+ * Copyright 2004-2005 Andrea Merello <andreamrl@tiscali.it>, et al.
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+#ifndef _RTL8192SE_SCAN
+#define _RTL8192SE_SCAN
+
+void rtl8192se_hw_scan_simu(void *data);
+void rtl8192se_rx_surveydone_cmd(struct net_device *dev);
+void   rtl8192se_check_hw_scan(void *data);
+void rtl8192se_start_hw_scan(void *data);
+void rtl8192se_abort_hw_scan(struct net_device *dev);
+void rtl8192se_hw_scan_initiate(struct net_device *dev);
+void rtl8192se_send_scan_abort(struct net_device *dev);
+void rtl8192se_cancel_hw_scan(struct net_device *dev);
+
+#endif
+
diff --git a/ubuntu/rtl8192se/rtl_cam.c b/ubuntu/rtl8192se/rtl_cam.c
new file mode 100644 (file)
index 0000000..bb15cc6
--- /dev/null
@@ -0,0 +1,583 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * Based on the r8180 driver, which is:
+ * Copyright 2004-2005 Andrea Merello <andreamrl@tiscali.it>, et al.
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+#include "rtl_core.h"
+#if defined RTL8192CE
+#include "rtl8192c/r8192C_phy.h"
+#include "rtl8192c/r8192C_phyreg.h"
+#include "rtl8192c/r8192C_rtl6052.h"
+#include "rtl8192c/r8192C_Efuse.h"
+#elif defined RTL8192SE  
+#include "rtl8192s/r8192S_phy.h"
+#include "rtl8192s/r8192S_phyreg.h"
+#include "rtl8192s/r8192S_rtl6052.h"
+#include "rtl8192s/r8192S_Efuse.h"
+#else
+#include "rtl8192e/r8192E_phy.h"
+#include "rtl8192e/r8192E_phyreg.h"
+#include "rtl8192e/r8190P_rtl8256.h" /* RTL8225 Radio frontend */
+#include "rtl8192e/r8192E_cmdpkt.h"
+#endif
+
+extern int hwwep;
+void CamResetAllEntry(struct net_device *dev)
+{
+       u32 ulcommand = 0;
+
+       ulcommand |= BIT31|BIT30;
+       write_nic_dword(dev, RWCAM, ulcommand); 
+}
+
+#ifdef _RTL8192_EXT_PATCH_
+void CamDeleteOneEntry(struct net_device *dev, u8 EntryNo)
+{
+       u32 ulCommand = EntryNo * CAM_CONTENT_COUNT;
+       u32 ulContent = 0;
+
+       ulCommand = ulCommand | BIT31 | BIT16;
+
+       write_nic_dword(dev,WCAMI,ulContent);
+       write_nic_dword(dev,RWCAM,ulCommand);
+}
+
+void CamRestoreEachIFEntry(struct net_device* dev,u8 is_mesh)
+{
+       u32 i;
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device *ieee = priv->rtllib;
+       for( i = 0 ; i< TOTAL_CAM_ENTRY; i++) {
+
+               if (is_mesh) {
+#ifdef _RTL8192_EXT_PATCH_     
+                       if(ieee->swmeshcamtable[i].bused )
+                       {
+                               setKey(dev,
+                                               i,
+                                               ieee->swmeshcamtable[i].key_index,
+                                               ieee->swmeshcamtable[i].key_type,
+                                               ieee->swmeshcamtable[i].macaddr,
+                                               ieee->swmeshcamtable[i].useDK,
+                                               (u32*)(&ieee->swmeshcamtable[i].key_buf[0])                                     
+                                     );
+                       }
+#endif
+               } else {
+                       if(ieee->swcamtable[i].bused )
+                       {
+                               setKey(dev,
+                                               i,
+                                               ieee->swcamtable[i].key_index,
+                                               ieee->swcamtable[i].key_type,
+                                               ieee->swcamtable[i].macaddr,
+                                               ieee->swcamtable[i].useDK,
+                                               (u32*)(&ieee->swcamtable[i].key_buf[0]));
+                       }
+               }
+       }
+}
+#endif
+
+void write_cam(struct net_device *dev, u8 addr, u32 data)
+{
+       write_nic_dword(dev, WCAMI, data);
+       write_nic_dword(dev, RWCAM, BIT31|BIT16|(addr&0xff) );
+}
+
+u32 read_cam(struct net_device *dev, u8 addr)
+{
+       write_nic_dword(dev, RWCAM, 0x80000000|(addr&0xff) );
+       return read_nic_dword(dev, 0xa8);
+}
+
+void EnableHWSecurityConfig8192(struct net_device *dev)
+{
+       u8 SECR_value = 0x0;
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       struct rtllib_device* ieee = priv->rtllib; 
+       SECR_value = SCR_TxEncEnable | SCR_RxDecEnable;
+#ifdef _RTL8192_EXT_PATCH_
+       if ((((KEY_TYPE_WEP40 == ieee->pairwise_key_type) || (KEY_TYPE_WEP104 == ieee->pairwise_key_type)) && (priv->rtllib->auth_mode != 2)) 
+                       &&(ieee->iw_mode != IW_MODE_MESH))
+#else
+               if (((KEY_TYPE_WEP40 == ieee->pairwise_key_type) || (KEY_TYPE_WEP104 == ieee->pairwise_key_type)) && (priv->rtllib->auth_mode != 2))
+#endif
+               {
+                       SECR_value |= SCR_RxUseDK;
+                       SECR_value |= SCR_TxUseDK;
+               }
+               else if ((ieee->iw_mode == IW_MODE_ADHOC) && (ieee->pairwise_key_type & (KEY_TYPE_CCMP | KEY_TYPE_TKIP)))
+               {
+                       SECR_value |= SCR_RxUseDK;
+                       SECR_value |= SCR_TxUseDK;
+               }
+
+
+       ieee->hwsec_active = 1;
+#ifdef _RTL8192_EXT_PATCH_     
+       if ((ieee->pHTInfo->IOTAction&HT_IOT_ACT_PURE_N_MODE) || !hwwep )
+       {
+               ieee->hwsec_active = 0;
+               SECR_value &= ~SCR_RxDecEnable;
+               SECR_value &= ~SCR_TxUseDK;
+               SECR_value &= ~SCR_RxUseDK;
+               SECR_value &= ~SCR_TxEncEnable;
+       }
+#else
+       if ((ieee->pHTInfo->IOTAction&HT_IOT_ACT_PURE_N_MODE) || !hwwep)
+       {
+               ieee->hwsec_active = 0;
+               SECR_value &= ~SCR_RxDecEnable;
+       }
+#endif
+
+#ifdef RTL8192CE
+       write_nic_byte(dev, REG_CR+1,0x02); 
+#endif
+       RT_TRACE(COMP_SEC,"%s:, hwsec:%d, pairwise_key:%d, SECR_value:%x\n", __FUNCTION__, \
+                       ieee->hwsec_active, ieee->pairwise_key_type, SECR_value);       
+       {
+               write_nic_byte(dev, SECR,  SECR_value);
+       }
+
+}
+#ifdef _RTL8192_EXT_PATCH_     
+void set_swcam(struct net_device *dev, 
+               u8 EntryNo,
+               u8 KeyIndex, 
+               u16 KeyType, 
+               u8 *MacAddr, 
+               u8 DefaultKey, 
+               u32 *KeyContent, 
+               u8 is_mesh)
+#else
+void set_swcam(struct net_device *dev, 
+               u8 EntryNo,
+               u8 KeyIndex, 
+               u16 KeyType, 
+               u8 *MacAddr, 
+               u8 DefaultKey, 
+               u32 *KeyContent)
+#endif
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device *ieee = priv->rtllib;
+#ifdef _RTL8192_EXT_PATCH_     
+       printk("===========>%s():EntryNo is %d,KeyIndex is %d,KeyType is %d,is_mesh is %d\n",__FUNCTION__,EntryNo,KeyIndex,KeyType,is_mesh);
+       if(is_mesh){
+               ieee->swmeshcamtable[EntryNo].bused=true;
+               ieee->swmeshcamtable[EntryNo].key_index=KeyIndex;
+               ieee->swmeshcamtable[EntryNo].key_type=KeyType;
+               memcpy(ieee->swmeshcamtable[EntryNo].macaddr,MacAddr,6);
+               ieee->swmeshcamtable[EntryNo].useDK=DefaultKey;
+               memcpy(ieee->swmeshcamtable[EntryNo].key_buf,(u8*)KeyContent,16);
+       }
+       else
+#endif 
+       {
+               ieee->swcamtable[EntryNo].bused=true;
+               ieee->swcamtable[EntryNo].key_index=KeyIndex;
+               ieee->swcamtable[EntryNo].key_type=KeyType;
+               memcpy(ieee->swcamtable[EntryNo].macaddr,MacAddr,6);
+               ieee->swcamtable[EntryNo].useDK=DefaultKey;
+               memcpy(ieee->swcamtable[EntryNo].key_buf,(u8*)KeyContent,16);
+       }
+}
+#ifdef _RTL8192_EXT_PATCH_     
+void reset_IFswcam(struct net_device *dev, u8 is_mesh)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device *ieee = priv->rtllib;
+       if(is_mesh){
+#ifdef _RTL8192_EXT_PATCH_     
+               memset(ieee->swmeshcamtable,0,sizeof(SW_CAM_TABLE)*32);
+#endif
+       }
+       else{
+               memset(ieee->swcamtable,0,sizeof(SW_CAM_TABLE)*32);
+       }
+}
+#endif 
+void setKey(struct net_device *dev, 
+               u8 EntryNo,
+               u8 KeyIndex, 
+               u16 KeyType, 
+               u8 *MacAddr, 
+               u8 DefaultKey, 
+               u32 *KeyContent )
+{
+       u32 TargetCommand = 0;
+       u32 TargetContent = 0;
+       u16 usConfig = 0;
+       u8 i;
+#ifdef ENABLE_IPS
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       RT_RF_POWER_STATE       rtState;
+       rtState = priv->rtllib->eRFPowerState;
+       if(priv->rtllib->PowerSaveControl.bInactivePs){ 
+               if(rtState == eRfOff){
+                       if(priv->rtllib->RfOffReason > RF_CHANGE_BY_IPS)
+                       {
+                               RT_TRACE(COMP_ERR, "%s(): RF is OFF.\n",__FUNCTION__);
+                               return ;
+                       }
+                       else{
+                               down(&priv->rtllib->ips_sem);
+                               IPSLeave(dev);
+                               up(&priv->rtllib->ips_sem);                     }
+               }
+       }
+       priv->rtllib->is_set_key = true;
+#endif
+       if (EntryNo >= TOTAL_CAM_ENTRY)
+               RT_TRACE(COMP_ERR, "cam entry exceeds in setKey()\n");
+
+       RT_TRACE(COMP_SEC, "====>to setKey(), dev:%p, EntryNo:%d, KeyIndex:%d, KeyType:%d, MacAddr"MAC_FMT"\n", dev,EntryNo, KeyIndex, KeyType, MAC_ARG(MacAddr));
+
+       if (DefaultKey)
+               usConfig |= BIT15 | (KeyType<<2);
+       else
+               usConfig |= BIT15 | (KeyType<<2) | KeyIndex;
+
+
+       for(i=0 ; i<CAM_CONTENT_COUNT; i++){
+               TargetCommand  = i+CAM_CONTENT_COUNT*EntryNo;
+               TargetCommand |= BIT31|BIT16;
+
+               if(i==0){
+                       TargetContent = (u32)(*(MacAddr+0)) << 16|
+                               (u32)(*(MacAddr+1)) << 24|
+                               (u32)usConfig;
+
+                       write_nic_dword(dev, WCAMI, TargetContent); 
+                       write_nic_dword(dev, RWCAM, TargetCommand);
+               }
+               else if(i==1){
+                       TargetContent = (u32)(*(MacAddr+2))      |
+                               (u32)(*(MacAddr+3)) <<  8|
+                               (u32)(*(MacAddr+4)) << 16|
+                               (u32)(*(MacAddr+5)) << 24;
+                       write_nic_dword(dev, WCAMI, TargetContent); 
+                       write_nic_dword(dev, RWCAM, TargetCommand);
+               }
+               else {  
+                       if(KeyContent != NULL)
+                       {
+                               write_nic_dword(dev, WCAMI, (u32)(*(KeyContent+i-2)) ); 
+                               write_nic_dword(dev, RWCAM, TargetCommand);
+                       }
+               }
+       }
+       RT_TRACE(COMP_SEC,"=========>after set key, usconfig:%x\n", usConfig);
+}
+#if 0
+void CamPrintDbgReg(struct net_device* dev)
+{
+       unsigned long rvalue;
+       unsigned char ucValue;
+       write_nic_dword(dev, DCAM, 0x80000000);
+       msleep(40);
+       rvalue = read_nic_dword(dev, DCAM);     
+       RT_TRACE(COMP_SEC, " TX CAM=%8lX ",rvalue);
+       if((rvalue & 0x40000000) != 0x4000000) 
+               RT_TRACE(COMP_SEC, "-->TX Key Not Found      ");
+       msleep(20);
+       write_nic_dword(dev, DCAM, 0x00000000); 
+       rvalue = read_nic_dword(dev, DCAM);     
+       RT_TRACE(COMP_SEC, "RX CAM=%8lX ",rvalue);
+       if((rvalue & 0x40000000) != 0x4000000) 
+               RT_TRACE(COMP_SEC, "-->CAM Key Not Found   ");
+       ucValue = read_nic_byte(dev, SECR);
+       RT_TRACE(COMP_SEC, "WPA_Config=%x \n",ucValue);
+}
+#endif
+void CAM_read_entry(struct net_device *dev, u32 iIndex)
+{
+       u32 target_command=0;
+       u32 target_content=0;
+       u8 entry_i=0;
+       u32 ulStatus;
+       s32 i=100;
+       for(entry_i=0;entry_i<CAM_CONTENT_COUNT;entry_i++)
+       {
+               target_command= entry_i+CAM_CONTENT_COUNT*iIndex;
+               target_command= target_command | BIT31;
+
+#if 1
+               while((i--)>=0)
+               {
+                       ulStatus = read_nic_dword(dev, RWCAM);
+                       if(ulStatus & BIT31){
+                               continue;
+                       }
+                       else{
+                               break;
+                       }
+               }
+#endif
+               write_nic_dword(dev, RWCAM, target_command);
+               RT_TRACE(COMP_SEC,"CAM_read_entry(): WRITE A0: %x \n",target_command);
+               target_content = read_nic_dword(dev, RCAMO);
+               RT_TRACE(COMP_SEC, "CAM_read_entry(): WRITE A8: %x \n",target_content);
+       }
+       printk("\n");
+}
+
+void CamRestoreAllEntry(       struct net_device *dev)
+{
+       u8 EntryId = 0;
+       struct r8192_priv *priv = rtllib_priv(dev);
+       u8*     MacAddr = priv->rtllib->current_network.bssid;
+
+       static u8       CAM_CONST_ADDR[4][6] = {
+               {0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+               {0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
+               {0x00, 0x00, 0x00, 0x00, 0x00, 0x02},
+               {0x00, 0x00, 0x00, 0x00, 0x00, 0x03}};
+       static u8       CAM_CONST_BROAD[] = 
+       {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
+
+       RT_TRACE(COMP_SEC, "CamRestoreAllEntry: \n");
+
+
+       if ((priv->rtllib->pairwise_key_type == KEY_TYPE_WEP40)||
+                       (priv->rtllib->pairwise_key_type == KEY_TYPE_WEP104))
+       {
+
+               for(EntryId=0; EntryId<4; EntryId++)
+               {
+                       {
+                               MacAddr = CAM_CONST_ADDR[EntryId];
+                               if(priv->rtllib->swcamtable[EntryId].bused )
+                               {
+                                       setKey(dev, 
+                                                       EntryId ,
+                                                       EntryId,
+                                                       priv->rtllib->pairwise_key_type,
+                                                       MacAddr, 
+                                                       0,
+                                                       (u32*)(&priv->rtllib->swcamtable[EntryId].key_buf[0])                                   
+                                             );
+                               }               
+                       }       
+               }       
+
+       }
+       else if(priv->rtllib->pairwise_key_type == KEY_TYPE_TKIP)
+       {
+
+               {
+                       if(priv->rtllib->iw_mode == IW_MODE_ADHOC)
+                       {
+                               setKey(dev, 
+                                               4,
+                                               0,
+                                               priv->rtllib->pairwise_key_type, 
+                                               (u8*)dev->dev_addr, 
+                                               0,
+                                               (u32*)(&priv->rtllib->swcamtable[4].key_buf[0])                                 
+                                     );
+                       }       
+                       else
+                       {
+                               setKey(dev, 
+                                               4,
+                                               0,
+                                               priv->rtllib->pairwise_key_type, 
+                                               MacAddr, 
+                                               0,
+                                               (u32*)(&priv->rtllib->swcamtable[4].key_buf[0])                                 
+                                     );
+                       }
+
+               }
+       }
+       else if(priv->rtllib->pairwise_key_type == KEY_TYPE_CCMP)
+       {
+
+               {
+                       if(priv->rtllib->iw_mode == IW_MODE_ADHOC)
+                       {
+                               setKey(dev, 
+                                               4,
+                                               0,
+                                               priv->rtllib->pairwise_key_type,
+                                               (u8*)dev->dev_addr, 
+                                               0,
+                                               (u32*)(&priv->rtllib->swcamtable[4].key_buf[0])                                 
+                                     );
+                       }
+                       else
+                       {
+                               setKey(dev, 
+                                               4,
+                                               0,
+                                               priv->rtllib->pairwise_key_type,
+                                               MacAddr, 
+                                               0,
+                                               (u32*)(&priv->rtllib->swcamtable[4].key_buf[0])                                 
+                                     );
+                       }                       
+               }
+       }
+
+
+
+       if(priv->rtllib->group_key_type == KEY_TYPE_TKIP)
+       {
+               MacAddr = CAM_CONST_BROAD;
+               for(EntryId=1 ; EntryId<4 ; EntryId++)
+               {
+                       if(priv->rtllib->swcamtable[EntryId].bused )
+                       {
+                               setKey(dev, 
+                                               EntryId, 
+                                               EntryId,
+                                               priv->rtllib->group_key_type,
+                                               MacAddr, 
+                                               0,
+                                               (u32*)(&priv->rtllib->swcamtable[EntryId].key_buf[0])                                   
+                                     );
+                       }       
+               }
+               if(priv->rtllib->iw_mode == IW_MODE_ADHOC)
+               {
+                       if(priv->rtllib->swcamtable[0].bused ){
+                               setKey(dev, 
+                                               0,
+                                               0,
+                                               priv->rtllib->group_key_type,
+                                               CAM_CONST_ADDR[0], 
+                                               0,
+                                               (u32*)(&priv->rtllib->swcamtable[0].key_buf[0])                                 
+                                     );
+                       }
+                       else
+                       {
+                               RT_TRACE(COMP_ERR,"===>%s():ERR!! ADHOC TKIP ,but 0 entry is have no data\n",__FUNCTION__);
+                               return;
+                       }
+               }                       
+       } else if(priv->rtllib->group_key_type == KEY_TYPE_CCMP) {
+               MacAddr = CAM_CONST_BROAD;
+               for(EntryId=1; EntryId<4 ; EntryId++)
+               {
+                       if(priv->rtllib->swcamtable[EntryId].bused )
+                       {       
+                               setKey(dev, 
+                                      EntryId , 
+                                      EntryId,
+                                      priv->rtllib->group_key_type,
+                                      MacAddr, 
+                                      0,
+                                      (u32*)(&priv->rtllib->swcamtable[EntryId].key_buf[0]));
+                       }       
+               }
+
+               if (priv->rtllib->iw_mode == IW_MODE_ADHOC) {
+                       if (priv->rtllib->swcamtable[0].bused) {
+                               setKey(dev, 
+                                       0 , 
+                                       0,
+                                       priv->rtllib->group_key_type,
+                                       CAM_CONST_ADDR[0], 
+                                       0,
+                                       (u32*)(&priv->rtllib->swcamtable[0].key_buf[0]));
+                       } else {
+                               RT_TRACE(COMP_ERR,"===>%s():ERR!! ADHOC CCMP ,but 0 entry is have no data\n", 
+                                               __FUNCTION__);
+                               return;
+                       }
+               }
+       }
+}
+
+
+#ifdef _RTL8192_EXT_PATCH_
+u8 rtl8192_get_free_hwsec_cam_entry(struct rtllib_device *ieee, u8 *sta_addr)
+{
+       u32 bitmap = (ieee->HwSecCamBitMap)>>4;
+       u8 entry_idx = 0;
+       u8 i, *addr;
+
+       if ((NULL == ieee) || (NULL == sta_addr)) {
+               printk("%s: ieee or sta_addr is NULL.\n", __FUNCTION__);
+               return TOTAL_CAM_ENTRY;
+       }
+
+       /* Does STA already exist? */
+       /* CAM Index 31 is for AP */
+       for (i = 4; i < TOTAL_CAM_ENTRY-1; i++) {
+               addr = ieee->HwSecCamStaAddr[i];
+               if(memcmp(addr, sta_addr, ETH_ALEN) == 0)
+                       return i;
+       }
+
+       /* Get a free CAM entry. */
+       for (entry_idx = 4; entry_idx < TOTAL_CAM_ENTRY - 1; entry_idx++) {
+               if ((bitmap & BIT0) == 0) {
+                       printk("-----HwSecCamBitMap: 0x%x entry_idx=%d\n",ieee->HwSecCamBitMap, entry_idx);
+                       ieee->HwSecCamBitMap |= BIT0<<entry_idx;
+                       memcpy(ieee->HwSecCamStaAddr[entry_idx], sta_addr, ETH_ALEN);
+                       return entry_idx;
+               }
+               bitmap = bitmap >>1;
+       }
+
+       return TOTAL_CAM_ENTRY;
+}
+
+void rtl8192_del_hwsec_cam_entry(struct rtllib_device *ieee, u8 *sta_addr)
+{
+       u32 bitmap;
+       u8 i, *addr;
+
+       if ((NULL == ieee) || (NULL == sta_addr)) {
+               printk("%s: ieee or sta_addr is NULL.\n", __FUNCTION__);
+               return;
+       }
+
+       if ((sta_addr[0]|sta_addr[1]|sta_addr[2]|sta_addr[3]|\
+            sta_addr[4]|sta_addr[5]) == 0) {
+               printk("%s: sta_addr is 00:00:00:00:00:00.\n", __FUNCTION__);
+               return;
+       }
+       
+       /* Does STA already exist? */
+       for (i = 4; i < TOTAL_CAM_ENTRY; i++) {
+               addr = ieee->HwSecCamStaAddr[i];
+               bitmap = (ieee->HwSecCamBitMap)>>i;
+               if (((bitmap & BIT0) == BIT0) && (memcmp(addr, sta_addr, ETH_ALEN) == 0)) {
+                       /* Remove from HW Security CAM */       
+                       CamDeleteOneEntry(ieee->dev, i);
+                       memset(ieee->HwSecCamStaAddr[i], 0, ETH_ALEN);
+                       ieee->HwSecCamBitMap &= ~(BIT0<<i);
+                       memset(&(ieee->swmeshcamtable[i]), 0, sizeof(SW_CAM_TABLE));
+                       RT_TRACE(COMP_SEC, "====>del sw entry, EntryNo:%d, MacAddr:"MAC_FMT"\n", 
+                                       i, MAC_ARG(sta_addr));
+               }
+       }
+       return;
+}
+#endif
+
diff --git a/ubuntu/rtl8192se/rtl_cam.h b/ubuntu/rtl8192se/rtl_cam.h
new file mode 100644 (file)
index 0000000..2ccb8c0
--- /dev/null
@@ -0,0 +1,64 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * Based on the r8180 driver, which is:
+ * Copyright 2004-2005 Andrea Merello <andreamrl@tiscali.it>, et al.
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+#ifndef _RTL_CAM_H
+#define _RTL_CAM_H
+
+#include <linux/types.h>
+struct net_device;
+
+void CamResetAllEntry(struct net_device* dev);
+void EnableHWSecurityConfig8192(struct net_device *dev);
+void setKey(struct net_device *dev, u8 EntryNo, u8 KeyIndex, u16 KeyType, u8 *MacAddr, u8 DefaultKey, u32 *KeyContent );
+#ifdef _RTL8192_EXT_PATCH_
+void set_swcam(struct net_device *dev, u8 EntryNo, u8 KeyIndex, u16 KeyType, u8 *MacAddr, u8 DefaultKey, u32 *KeyContent, u8 is_mesh);
+#else
+void set_swcam(struct net_device *dev, u8 EntryNo, u8 KeyIndex, u16 KeyType, u8 *MacAddr, u8 DefaultKey, u32 *KeyContent );
+#endif
+void CamPrintDbgReg(struct net_device* dev);
+
+#ifdef _RTL8192_EXT_PATCH_
+void CamDeleteOneEntry(struct net_device *dev, u8 EntryNo);
+void CamRestoreEachIFEntry(struct net_device* dev,u8 is_mesh);
+#endif
+
+u32 read_cam(struct net_device *dev, u8 addr);
+void write_cam(struct net_device *dev, u8 addr, u32 data);
+
+void CamRestoreAllEntry(struct net_device *dev);
+#ifdef _RTL8192_EXT_PATCH_
+void reset_IFswcam(struct net_device *dev, u8 is_mesh);
+void CamRestoreEachIFEntry(struct net_device* dev,u8 is_mesh);
+int rtl8192_set_key_for_AP(struct rtllib_device *ieee);
+#endif
+
+void CAM_read_entry(struct net_device *dev, u32 iIndex);
+
+#ifdef _RTL8192_EXT_PATCH_
+u8 rtl8192_get_free_hwsec_cam_entry(struct rtllib_device *ieee, u8 *sta_addr);
+void rtl8192_del_hwsec_cam_entry(struct rtllib_device *ieee, u8 *sta_addr);
+int meshdev_set_key_for_peer(struct net_device *dev, u8 *Addr, u8 KeyIndex, u16 KeyType, u32 *KeyContent);
+#endif
+
+#endif
diff --git a/ubuntu/rtl8192se/rtl_core.c b/ubuntu/rtl8192se/rtl_core.c
new file mode 100644 (file)
index 0000000..253f76b
--- /dev/null
@@ -0,0 +1,5660 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * Based on the r8180 driver, which is:
+ * Copyright 2004-2005 Andrea Merello <andreamrl@tiscali.it>, et al.
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+#undef LOOP_TEST
+#undef RX_DONT_PASS_UL
+#undef DEBUG_EPROM
+#undef DEBUG_RX_VERBOSE
+#undef DUMMY_RX
+#undef DEBUG_ZERO_RX
+#undef DEBUG_RX_SKB
+#undef DEBUG_TX_FRAG
+#undef DEBUG_RX_FRAG
+#undef DEBUG_TX_FILLDESC
+#undef DEBUG_TX
+#undef DEBUG_IRQ
+#undef DEBUG_RX
+#undef DEBUG_RXALLOC
+#undef DEBUG_REGISTERS
+#undef DEBUG_RING
+#undef DEBUG_IRQ_TASKLET
+#undef DEBUG_TX_ALLOC
+#undef DEBUG_TX_DESC
+
+#include <asm/uaccess.h>
+#include <linux/pci.h>
+#include "rtl_core.h"
+#if defined RTL8192CE
+#include "rtl8192c/r8192C_phy.h" 
+#include "rtl8192c/r8192C_phyreg.h"
+#include "rtl8192c/r8192C_rtl6052.h"
+#include "rtl8192c/r8192C_Efuse.h"
+#include "rtl8192c/r8192C_dm.h"
+#elif defined RTL8192SE
+#include "rtl8192s/r8192S_phy.h" 
+#include "rtl8192s/r8192S_phyreg.h"
+#include "rtl8192s/r8192S_rtl6052.h"
+#include "rtl8192s/r8192S_Efuse.h"
+#else
+#include "rtl8192e/r8192E_phy.h" 
+#include "rtl8192e/r8192E_phyreg.h"
+#include "rtl8192e/r8190P_rtl8256.h" 
+#include "rtl8192e/r8192E_cmdpkt.h"
+#endif
+
+#include "rtl_wx.h"
+#ifndef RTL8192CE
+#include "rtl_dm.h"
+#endif
+
+#ifdef CONFIG_PM_RTL
+#include "rtl_pm.h"
+#endif
+
+#ifdef _RTL8192_EXT_PATCH_
+#include "../../mshclass/msh_class.h"
+#include "rtl_mesh.h"
+#endif
+
+#ifdef RTL8192S_WAPI_SUPPORT
+#include "../../rtllib/wapi.h"
+#include "../../rtllib/wapi_interface.h"
+#endif
+
+int hwwep = 1; 
+static int channels = 0x3fff;
+#ifdef _RTL8192_EXT_PATCH_
+char* ifname = "ra%d";
+#else
+char* ifname = "wlan%d";
+#endif
+
+u32 rt_global_debug_component = \
+                               COMP_ERR ; 
+
+#ifdef RTL8192SE
+struct rtl819x_ops rtl8192se_ops = {
+       .nic_type = NIC_8192SE,
+       .get_eeprom_size                        = rtl8192se_get_eeprom_size,
+       .init_adapter_variable          = rtl8192se_InitializeVariables,
+       .initialize_adapter                     = rtl8192se_adapter_start,
+       .link_change                            = rtl8192se_link_change,
+       .tx_fill_descriptor                     = rtl8192se_tx_fill_desc,
+       .tx_fill_cmd_descriptor                 = rtl8192se_tx_fill_cmd_desc,
+       .rx_query_status_descriptor     = rtl8192se_rx_query_status_desc,
+       .rx_command_packet_handler = rtl8192se_RxCommandPacketHandle,
+       .stop_adapter                           = rtl8192se_halt_adapter,
+       .update_ratr_table                      = rtl8192se_update_ratr_table,
+       .irq_enable                             = rtl8192se_EnableInterrupt,
+       .irq_disable                            = rtl8192se_DisableInterrupt,
+       .irq_clear                                      = rtl8192se_ClearInterrupt,
+       .rx_enable                              = rtl8192se_enable_rx,
+       .tx_enable                              = rtl8192se_enable_tx,
+       .interrupt_recognized           = rtl8192se_interrupt_recognized,
+       .TxCheckStuckHandler            = rtl8192se_HalTxCheckStuck,
+       .RxCheckStuckHandler            = rtl8192se_HalRxCheckStuck,
+};
+#elif defined RTL8192CE
+struct rtl819x_ops rtl8192ce_ops = {
+       .nic_type                                       = NIC_8192CE,
+       .get_eeprom_size                        = rtl8192ce_get_eeprom_size,
+       .init_adapter_variable          = rtl8192ce_InitializeVariables,
+       .initialize_adapter                     = rtl8192ce_adapter_start,
+       .link_change                            = rtl8192ce_link_change,
+       .tx_fill_descriptor                     = rtl8192ce_tx_fill_desc,
+       .tx_fill_cmd_descriptor                 = rtl8192ce_tx_fill_cmd_desc,
+       .rx_query_status_descriptor     = rtl8192ce_rx_query_status_desc,
+       .rx_command_packet_handler = NULL,
+       .stop_adapter                           = rtl8192ce_halt_adapter,
+       .update_ratr_table                      = rtl8192ce_UpdateHalRATRTable,
+       .irq_enable                             = rtl8192ce_EnableInterrupt,
+       .irq_disable                            = rtl8192ce_DisableInterrupt,
+       .irq_clear                                      = rtl8192ce_ClearInterrupt,
+       .rx_enable                              = rtl8192ce_enable_rx,
+       .tx_enable                              = rtl8192ce_enable_tx,
+       .interrupt_recognized           = rtl8192ce_interrupt_recognized,
+       .TxCheckStuckHandler            = rtl8192ce_HalTxCheckStuck,
+       .RxCheckStuckHandler            = rtl8192ce_HalRxCheckStuck,
+};
+#else
+struct rtl819x_ops rtl819xp_ops = {
+       .nic_type                                       = NIC_UNKNOWN,
+       .get_eeprom_size                        = rtl8192_get_eeprom_size,
+       .init_adapter_variable          = rtl8192_InitializeVariables,
+       .initialize_adapter                     = rtl8192_adapter_start,
+       .link_change                            = rtl8192_link_change,
+       .tx_fill_descriptor                     = rtl8192_tx_fill_desc,
+       .tx_fill_cmd_descriptor                 = rtl8192_tx_fill_cmd_desc,
+       .rx_query_status_descriptor     = rtl8192_rx_query_status_desc,
+       .rx_command_packet_handler = NULL,
+       .stop_adapter                           = rtl8192_halt_adapter,
+       .update_ratr_table                      = rtl8192_update_ratr_table,
+       .irq_enable                             = rtl8192_EnableInterrupt,
+       .irq_disable                            = rtl8192_DisableInterrupt,
+       .irq_clear                                      = rtl8192_ClearInterrupt,
+       .rx_enable                              = rtl8192_enable_rx,
+       .tx_enable                              = rtl8192_enable_tx,
+       .interrupt_recognized           = rtl8192_interrupt_recognized,
+       .TxCheckStuckHandler            = rtl8192_HalTxCheckStuck,
+       .RxCheckStuckHandler            = rtl8192_HalRxCheckStuck,
+};
+#endif
+
+static struct pci_device_id rtl8192_pci_id_tbl[] __devinitdata = {
+#ifdef RTL8190P
+       /* Realtek */
+       /* Dlink */
+       {RTL_PCI_DEVICE(0x10ec, 0x8190, rtl819xp_ops)},
+       /* Corega */
+       {RTL_PCI_DEVICE(0x07aa, 0x0045, rtl819xp_ops)},
+       {RTL_PCI_DEVICE(0x07aa, 0x0046, rtl819xp_ops)},
+#elif defined(RTL8192E)
+       /* Realtek */
+       {RTL_PCI_DEVICE(0x10ec, 0x8192, rtl819xp_ops)},
+       /* Corega */
+       {RTL_PCI_DEVICE(0x07aa, 0x0044, rtl819xp_ops)},
+       {RTL_PCI_DEVICE(0x07aa, 0x0047, rtl819xp_ops)},
+#elif defined(RTL8192SE)       /*8192SE*/
+       {RTL_PCI_DEVICE(0x10ec, 0x8171, rtl8192se_ops)},
+       {RTL_PCI_DEVICE(0x10ec, 0x8172, rtl8192se_ops)},
+       {RTL_PCI_DEVICE(0x10ec, 0x8173, rtl8192se_ops)},
+       {RTL_PCI_DEVICE(0x10ec, 0x8174, rtl8192se_ops)},
+#elif defined(RTL8192CE)       /*8192CE*/
+       {RTL_PCI_DEVICE(0x10ec, 0x8191, rtl8192ce_ops)},
+       {RTL_PCI_DEVICE(0x10ec, 0x8178, rtl8192ce_ops)},
+       {RTL_PCI_DEVICE(0x10ec, 0x8177, rtl8192ce_ops)},
+       {RTL_PCI_DEVICE(0x10ec, 0x8176, rtl8192ce_ops)},
+       {RTL_PCI_DEVICE(0x10ec, 0x092D, rtl8192ce_ops)},
+#endif
+       {}
+};
+MODULE_DEVICE_TABLE(pci, rtl8192_pci_id_tbl);
+
+static int __devinit rtl8192_pci_probe(struct pci_dev *pdev,
+                        const struct pci_device_id *id);
+static void __devexit rtl8192_pci_disconnect(struct pci_dev *pdev);
+
+static struct pci_driver rtl8192_pci_driver = {
+       .name           = DRV_NAME,               /* Driver name   */
+       .id_table       = rtl8192_pci_id_tbl,             /* PCI_ID table  */
+       .probe          = rtl8192_pci_probe,              /* probe fn      */
+       .remove         = __devexit_p(rtl8192_pci_disconnect),    /* remove fn     */
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0)
+#ifdef CONFIG_PM_RTL
+       .suspend        = rtl8192E_suspend,               /* PM suspend fn */
+       .resume         = rtl8192E_resume,                 /* PM resume fn  */
+#else
+       .suspend        = NULL,                           /* PM suspend fn */
+       .resume         = NULL,                           /* PM resume fn  */
+#endif
+#endif
+};
+
+/****************************************************************************
+   -----------------------------IO STUFF-------------------------
+*****************************************************************************/
+#ifdef CONFIG_RTL8192_IO_MAP
+u8 read_nic_byte(struct net_device *dev, int x) 
+{
+        return 0xff&inb(dev->base_addr +x);
+}
+
+u32 read_nic_dword(struct net_device *dev, int x) 
+{
+        return inl(dev->base_addr +x);
+}
+
+u16 read_nic_word(struct net_device *dev, int x) 
+{
+        return inw(dev->base_addr +x);
+}
+
+void write_nic_byte(struct net_device *dev, int x,u8 y)
+{
+        outb(y&0xff,dev->base_addr +x);
+}
+
+void write_nic_word(struct net_device *dev, int x,u16 y)
+{
+        outw(y,dev->base_addr +x);
+}
+
+void write_nic_dword(struct net_device *dev, int x,u32 y)
+{
+        outl(y,dev->base_addr +x);
+}
+#else /* RTL_IO_MAP */
+u8 read_nic_byte(struct net_device *dev, int x) 
+{
+#ifdef CONFIG_LOCK_READ_AND_WRITE
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);        
+       unsigned long flags;
+       u8 val = 0;     
+
+       spin_lock_irqsave(&priv->rw_lock, flags);
+       val = 0xff&readb((u8*)dev->mem_start +x);
+       spin_unlock_irqrestore(&priv->rw_lock, flags);
+       
+       return val;
+#else
+        return 0xff&readb((u8*)dev->mem_start +x);
+#endif
+}
+
+u32 read_nic_dword(struct net_device *dev, int x) 
+{
+#ifdef CONFIG_LOCK_READ_AND_WRITE
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);        
+       unsigned long flags;
+       u32 val = 0;    
+       
+       spin_lock_irqsave(&priv->rw_lock, flags);
+       val = readl((u8*)dev->mem_start +x);
+       spin_unlock_irqrestore(&priv->rw_lock, flags);
+
+       return val;
+#else
+        return readl((u8*)dev->mem_start +x);
+#endif
+}
+
+u16 read_nic_word(struct net_device *dev, int x) 
+{
+#ifdef CONFIG_LOCK_READ_AND_WRITE
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);        
+       unsigned long flags;
+       u16 val = 0;    
+       
+       spin_lock_irqsave(&priv->rw_lock, flags);
+       val = readw((u8*)dev->mem_start +x);
+       spin_unlock_irqrestore(&priv->rw_lock, flags);
+
+       return val;
+#else
+        return readw((u8*)dev->mem_start +x);
+#endif
+}
+
+void write_nic_byte(struct net_device *dev, int x,u8 y)
+{
+#ifdef CONFIG_LOCK_READ_AND_WRITE
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);        
+       unsigned long flags;
+       
+       spin_lock_irqsave(&priv->rw_lock, flags);
+        writeb(y,(u8*)dev->mem_start +x);
+       spin_unlock_irqrestore(&priv->rw_lock, flags);
+#else
+        writeb(y,(u8*)dev->mem_start +x);
+#if !(defined RTL8192SE || defined RTL8192CE)  
+       udelay(20);
+#endif 
+#endif
+}
+
+void write_nic_dword(struct net_device *dev, int x,u32 y)
+{
+#ifdef CONFIG_LOCK_READ_AND_WRITE
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);        
+       unsigned long flags;
+       
+       spin_lock_irqsave(&priv->rw_lock, flags);
+        writel(y,(u8*)dev->mem_start +x);
+       spin_unlock_irqrestore(&priv->rw_lock, flags);
+#else
+        writel(y,(u8*)dev->mem_start +x);
+#if !(defined RTL8192SE || defined RTL8192CE)  
+       udelay(20);
+#endif 
+#endif
+}
+
+void write_nic_word(struct net_device *dev, int x,u16 y) 
+{
+#ifdef CONFIG_LOCK_READ_AND_WRITE
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);        
+       unsigned long flags;
+       
+       spin_lock_irqsave(&priv->rw_lock, flags);
+        writew(y,(u8*)dev->mem_start +x);
+       spin_unlock_irqrestore(&priv->rw_lock, flags);
+#else
+        writew(y,(u8*)dev->mem_start +x);
+#if !(defined RTL8192SE || defined RTL8192CE)  
+       udelay(20);
+#endif 
+#endif
+}
+#endif /* RTL_IO_MAP */
+
+/****************************************************************************
+   -----------------------------GENERAL FUNCTION-------------------------
+*****************************************************************************/
+
+void
+MgntDisconnectIBSS(
+       struct net_device* dev
+) 
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       u8      OpMode;
+       u8                      i;
+       bool    bFilterOutNonAssociatedBSSID = false;
+
+
+       priv->rtllib->state = RTLLIB_NOLINK;
+
+       for(i=0;i<6;i++)  priv->rtllib->current_network.bssid[i]= 0x55;
+
+       priv->OpMode = RT_OP_MODE_NO_LINK;
+       priv->rtllib->SetHwRegHandler(dev, HW_VAR_BSSID, priv->rtllib->current_network.bssid);
+       OpMode = RT_OP_MODE_NO_LINK;
+       priv->rtllib->SetHwRegHandler(dev, HW_VAR_MEDIA_STATUS, &OpMode);
+       rtllib_stop_send_beacons(priv->rtllib);
+       
+       bFilterOutNonAssociatedBSSID = false;
+       priv->rtllib->SetHwRegHandler(dev, HW_VAR_CECHK_BSSID, (u8*)(&bFilterOutNonAssociatedBSSID));
+       notify_wx_assoc_event(priv->rtllib);
+
+}
+
+void
+MlmeDisassociateRequest(
+       struct net_device* dev,
+       u8*             asSta,
+       u8              asRsn
+       )
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       u8 i;
+       u8      OpMode;
+
+       RemovePeerTS(priv->rtllib, asSta);
+       
+       
+       if(memcpy(priv->rtllib->current_network.bssid,asSta,6) == 0)
+       {
+               priv->rtllib->state = RTLLIB_NOLINK;
+               
+               for(i=0;i<6;i++)  priv->rtllib->current_network.bssid[i] = 0x22;
+               OpMode = RT_OP_MODE_NO_LINK;
+               priv->OpMode = RT_OP_MODE_NO_LINK;
+               priv->rtllib->SetHwRegHandler(dev, HW_VAR_MEDIA_STATUS, (u8 *)(&OpMode) );
+               rtllib_disassociate(priv->rtllib);
+
+               priv->rtllib->SetHwRegHandler(dev, HW_VAR_BSSID, priv->rtllib->current_network.bssid);
+               
+       }
+
+}
+
+void
+MgntDisconnectAP(
+       struct net_device* dev,
+       u8 asRsn
+) 
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       bool bFilterOutNonAssociatedBSSID = false;
+
+
+#ifdef TO_DO
+       if(   pMgntInfo->SecurityInfo.AuthMode > RT_802_11AuthModeAutoSwitch ||
+               (pMgntInfo->bAPSuportCCKM && pMgntInfo->bCCX8021xenable) )      
+       {
+               SecClearAllKeys(dev);
+               RT_TRACE(COMP_SEC, DBG_LOUD,("======>CCKM clear key..."))
+       }
+#endif
+       bFilterOutNonAssociatedBSSID = false;
+       priv->rtllib->SetHwRegHandler(dev, HW_VAR_CECHK_BSSID, (u8*)(&bFilterOutNonAssociatedBSSID));
+       MlmeDisassociateRequest( dev, priv->rtllib->current_network.bssid, asRsn );
+
+       priv->rtllib->state = RTLLIB_NOLINK;
+}
+
+bool
+MgntDisconnect(
+       struct net_device* dev,
+       u8 asRsn
+) 
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+
+#if 1
+       if(priv->rtllib->ps != RTLLIB_PS_DISABLED)
+       {
+#ifndef RTL8190P
+                rtl8192_hw_wakeup(dev);
+#endif
+       }
+#endif
+#ifdef TO_DO
+       if(pMgntInfo->mActingAsAp)
+       {
+               RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntDisconnect() ===> AP_DisassociateAllStation\n"));
+               AP_DisassociateAllStation(dev, unspec_reason);
+               return true;
+       }       
+#endif
+
+       if( priv->rtllib->state == RTLLIB_LINKED )
+       {
+               if( priv->rtllib->iw_mode == IW_MODE_ADHOC )
+               {
+                       MgntDisconnectIBSS(dev);
+               }
+#ifdef _RTL8192_EXT_PATCH_
+               if((priv->rtllib->iw_mode == IW_MODE_INFRA ) || ((priv->rtllib->iw_mode == IW_MODE_MESH) && (priv->rtllib->only_mesh == 0)))
+#else
+               if( priv->rtllib->iw_mode == IW_MODE_INFRA )
+#endif
+               {
+#ifdef TO_DO_LIST
+                       SecClearAllKeys(Adapter); 
+#endif
+                       MgntDisconnectAP(dev, asRsn);
+               }
+
+       }
+
+       return true;
+}
+bool
+MgntActSet_RF_State(
+       struct net_device* dev,
+       RT_RF_POWER_STATE       StateToSet,
+       RT_RF_CHANGE_SOURCE ChangeSource
+       )
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device * ieee = priv->rtllib;
+       bool                    bActionAllowed = false; 
+       bool                    bConnectBySSID = false;
+       RT_RF_POWER_STATE       rtState;
+       u16                     RFWaitCounter = 0;
+       unsigned long flag;
+       RT_TRACE((COMP_PS | COMP_RF), "===>MgntActSet_RF_State(): StateToSet(%d)\n",StateToSet);
+
+
+       while(true)
+       {
+               spin_lock_irqsave(&priv->rf_ps_lock,flag);
+               if(priv->RFChangeInProgress)
+               {
+                       spin_unlock_irqrestore(&priv->rf_ps_lock,flag);
+                       RT_TRACE((COMP_PS | COMP_RF), "MgntActSet_RF_State(): RF Change in progress! Wait to set..StateToSet(%d).\n", StateToSet);
+                       printk("MgntActSet_RF_State(): RF Change in progress! Wait to set..StateToSet(%d).\n", StateToSet);
+                       #if 1   
+                       while(priv->RFChangeInProgress)
+                       {
+                               RFWaitCounter ++;
+                               RT_TRACE((COMP_PS | COMP_RF), "MgntActSet_RF_State(): Wait 1 ms (%d times)...\n", RFWaitCounter);
+                               mdelay(1);
+
+                               if(RFWaitCounter > 100)
+                               {
+                                       RT_TRACE(COMP_ERR, "MgntActSet_RF_State(): Wait too logn to set RF\n");
+                                       return false;
+                               }
+                       }
+                       #endif
+               }
+               else
+               {
+                       priv->RFChangeInProgress = true;
+                       spin_unlock_irqrestore(&priv->rf_ps_lock,flag);
+                       break;
+               }
+       }
+
+       rtState = priv->rtllib->eRFPowerState;
+
+       switch(StateToSet) 
+       {
+       case eRfOn:
+
+               priv->rtllib->RfOffReason &= (~ChangeSource);
+
+               if((ChangeSource == RF_CHANGE_BY_HW) && (priv->bHwRadioOff == true)){
+                       priv->bHwRadioOff = false;
+               }
+
+               if(! priv->rtllib->RfOffReason)
+               {
+                       priv->rtllib->RfOffReason = 0;
+                       bActionAllowed = true;
+
+                       
+                       if(rtState == eRfOff && ChangeSource >=RF_CHANGE_BY_HW )
+                       {
+                               bConnectBySSID = true;
+                       }
+               }
+               else{
+                       RT_TRACE((COMP_PS | COMP_RF), "MgntActSet_RF_State - eRfon reject pMgntInfo->RfOffReason= 0x%x, ChangeSource=0x%X\n", priv->rtllib->RfOffReason, ChangeSource);
+                }
+
+               break;
+
+       case eRfOff:
+
+               if(priv->rtllib->iw_mode != IW_MODE_MASTER)
+               {
+                       if ((priv->rtllib->RfOffReason > RF_CHANGE_BY_IPS) || (ChangeSource > RF_CHANGE_BY_IPS))
+                       {
+                               if(ieee->state == RTLLIB_LINKED)
+                                       priv->blinked_ingpio = true;
+                               else
+                                       priv->blinked_ingpio = false;   
+                               MgntDisconnect(dev, disas_lv_ss);
+       
+       
+                               
+                       }
+               }
+               if((ChangeSource == RF_CHANGE_BY_HW) && (priv->bHwRadioOff == false)){
+                       priv->bHwRadioOff = true;
+               }
+               priv->rtllib->RfOffReason |= ChangeSource;
+               bActionAllowed = true;
+               break;
+
+       case eRfSleep:
+               priv->rtllib->RfOffReason |= ChangeSource;
+               bActionAllowed = true;
+               break;
+
+       default:
+               break;
+       }
+
+       if(bActionAllowed)
+       {
+               RT_TRACE((COMP_PS | COMP_RF), "MgntActSet_RF_State(): Action is allowed.... StateToSet(%d), RfOffReason(%#X)\n", StateToSet, priv->rtllib->RfOffReason);
+               PHY_SetRFPowerState(dev, StateToSet);   
+               if(StateToSet == eRfOn) 
+               {                               
+
+                       if(bConnectBySSID && (priv->blinked_ingpio == true))
+                       {                               
+                               queue_delayed_work_rsl(ieee->wq, &ieee->associate_procedure_wq, 0);
+                               priv->blinked_ingpio = false;
+
+                       }
+               }
+               else if(StateToSet == eRfOff)
+               {               
+               }               
+       }
+       else
+       {
+               RT_TRACE((COMP_PS | COMP_RF), "MgntActSet_RF_State(): Action is rejected.... StateToSet(%d), ChangeSource(%#X), RfOffReason(%#X)\n", StateToSet, ChangeSource, priv->rtllib->RfOffReason);
+       }
+
+       spin_lock_irqsave(&priv->rf_ps_lock,flag);
+       priv->RFChangeInProgress = false;
+       spin_unlock_irqrestore(&priv->rf_ps_lock,flag);
+       
+       RT_TRACE((COMP_PS && COMP_RF), "<===MgntActSet_RF_State()\n");
+       return bActionAllowed;
+}
+
+
+short get_nic_desc_num(struct net_device *dev, int prio)
+{
+    struct r8192_priv *priv = rtllib_priv(dev);
+    struct rtl8192_tx_ring *ring = &priv->tx_ring[prio];
+
+    /* For now, we reserved two free descriptor as a safety boundary 
+     * between the tail and the head 
+     */
+    if((prio == MGNT_QUEUE) &&(skb_queue_len(&ring->queue)>10))
+       printk("-----[%d]---------ring->idx=%d queue_len=%d---------\n",
+                       prio,ring->idx, skb_queue_len(&ring->queue));
+    return skb_queue_len(&ring->queue);
+}
+
+short check_nic_enough_desc(struct net_device *dev, int prio)
+{
+    struct r8192_priv *priv = rtllib_priv(dev);
+    struct rtl8192_tx_ring *ring = &priv->tx_ring[prio];
+
+    if (ring->entries - skb_queue_len(&ring->queue) >= 2) {
+        return 1;
+    } else {
+        return 0;
+    }
+}
+
+void tx_timeout(struct net_device *dev)
+{
+    struct r8192_priv *priv = rtllib_priv(dev);
+
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
+    schedule_work(&priv->reset_wq);
+#else
+    schedule_task(&priv->reset_wq);
+#endif
+    printk("TXTIMEOUT");
+}
+
+void rtl8192_irq_enable(struct net_device *dev)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);        
+       priv->irq_enabled = 1;
+       
+       priv->ops->irq_enable(dev);
+}
+
+void rtl8192_irq_disable(struct net_device *dev)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);        
+
+       priv->ops->irq_disable(dev);
+
+       priv->irq_enabled = 0;
+}
+
+void rtl8192_irq_clear(struct net_device *dev)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);        
+
+       priv->ops->irq_clear(dev);
+}
+
+
+void rtl8192_set_chan(struct net_device *dev,short ch)
+{
+    struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+
+    RT_TRACE(COMP_CH, "=====>%s()====ch:%d\n", __FUNCTION__, ch);      
+    if (priv->chan_forced)
+               return;
+
+    priv->chan = ch;
+
+
+#ifndef LOOP_TEST      
+
+
+    if (priv->rf_set_chan)
+        priv->rf_set_chan(dev,priv->chan);
+
+#ifdef CONFIG_FW_SETCHAN
+    priv->rtllib->SetFwCmdHandler(dev, FW_CMD_CHAN_SET);       
+#endif
+
+#endif
+}
+
+void rtl8192_update_cap(struct net_device* dev, u16 cap)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_network *net = &priv->rtllib->current_network;
+
+       priv->short_preamble = cap & WLAN_CAPABILITY_SHORT_PREAMBLE;
+       
+       {
+               bool            ShortPreamble;
+                       
+               if(cap & WLAN_CAPABILITY_SHORT_PREAMBLE)
+               { 
+                       {
+                               ShortPreamble = true;
+                               priv->rtllib->SetHwRegHandler( dev, HW_VAR_ACK_PREAMBLE, (unsigned char *)&ShortPreamble );
+                       }
+               }
+               else
+               { 
+                       {
+                               ShortPreamble = false;
+                               priv->rtllib->SetHwRegHandler( dev, HW_VAR_ACK_PREAMBLE, (unsigned char *)&ShortPreamble );
+                       }
+               }
+       }
+
+#ifdef RTL8192CE
+       if( net->mode & IEEE_G)
+#elif defined RTL8192SE || defined RTL8192E || defined RTL8190P
+       if (net->mode & (IEEE_G|IEEE_N_24G)) 
+#endif
+       {
+               u8      slot_time_val;
+               u8      CurSlotTime = priv->slot_time;
+               
+#ifdef RTL8192CE
+               if( (cap & WLAN_CAPABILITY_SHORT_SLOT_TIME) && (!(priv->rtllib->pHTInfo->RT2RT_HT_Mode & RT_HT_CAP_USE_LONG_PREAMBLE)))
+#elif defined RTL8192SE || defined RTL8192E || defined RTL8190P
+               if ((cap & WLAN_CAPABILITY_SHORT_SLOT_TIME) && (!priv->rtllib->pHTInfo->bCurrentRT2RTLongSlotTime)) 
+#endif
+               { 
+                       if(CurSlotTime != SHORT_SLOT_TIME)
+                       {
+                               slot_time_val = SHORT_SLOT_TIME;
+                               priv->rtllib->SetHwRegHandler( dev, HW_VAR_SLOT_TIME, &slot_time_val );
+                       }
+               }
+               else
+               { 
+                       if(CurSlotTime != NON_SHORT_SLOT_TIME)
+                       {
+                               slot_time_val = NON_SHORT_SLOT_TIME;
+                               priv->rtllib->SetHwRegHandler( dev, HW_VAR_SLOT_TIME, &slot_time_val );
+                       }
+               }
+       }
+}
+
+static struct rtllib_qos_parameters def_qos_parameters = {
+        {3,3,3,3},
+        {7,7,7,7},
+        {2,2,2,2},
+        {0,0,0,0},
+        {0,0,0,0} 
+};
+
+void rtl8192_update_beacon(void *data)
+{
+#if LINUX_VERSION_CODE >=KERNEL_VERSION(2,6,20)
+       struct r8192_priv *priv = container_of_work_rsl(data, struct r8192_priv, update_beacon_wq.work);
+       struct net_device *dev = priv->rtllib->dev;
+#else
+       struct net_device *dev = (struct net_device *)data;
+        struct r8192_priv *priv = rtllib_priv(dev);
+#endif
+       struct rtllib_device* ieee = priv->rtllib;
+       struct rtllib_network* net = &ieee->current_network;
+
+       if (ieee->pHTInfo->bCurrentHTSupport)
+               HTUpdateSelfAndPeerSetting(ieee, net);
+       ieee->pHTInfo->bCurrentRT2RTLongSlotTime = net->bssht.bdRT2RTLongSlotTime;
+       ieee->pHTInfo->RT2RT_HT_Mode = net->bssht.RT2RT_HT_Mode;
+       rtl8192_update_cap(dev, net->capability);
+}
+
+#ifdef RTL8192CE
+int WDCAPARA_ADD[] = {REG_EDCA_BE_PARAM,REG_EDCA_BK_PARAM,REG_EDCA_VI_PARAM,REG_EDCA_VO_PARAM};
+#else
+int WDCAPARA_ADD[] = {EDCAPARA_BE,EDCAPARA_BK,EDCAPARA_VI,EDCAPARA_VO};
+#endif
+void rtl8192_qos_activate(void *data)
+{
+#if LINUX_VERSION_CODE >=KERNEL_VERSION(2,6,20)
+       struct r8192_priv *priv = container_of_work_rsl(data, struct r8192_priv, qos_activate);
+       struct net_device *dev = priv->rtllib->dev;
+#else
+       struct net_device *dev = (struct net_device *)data;
+       struct r8192_priv *priv = rtllib_priv(dev);
+#endif
+#ifndef RTL8192CE
+        struct rtllib_qos_parameters *qos_parameters = &priv->rtllib->current_network.qos_data.parameters;
+        u8 mode = priv->rtllib->current_network.mode;
+       u8  u1bAIFS;
+       u32 u4bAcParam;
+#endif
+        int i;
+
+        if (priv == NULL)
+                return;
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16))
+       down(&priv->mutex);
+#else
+        mutex_lock(&priv->mutex);
+#endif
+        if(priv->rtllib->state != RTLLIB_LINKED)
+               goto success;
+       RT_TRACE(COMP_QOS,"qos active process with associate response received\n");
+       
+       for (i = 0; i <  QOS_QUEUE_NUM; i++) {
+#ifdef RTL8192CE
+               priv->rtllib->SetHwRegHandler(dev, HW_VAR_AC_PARAM, (u8*)(&i));
+#else 
+               u1bAIFS = qos_parameters->aifs[i] * ((mode&(IEEE_G|IEEE_N_24G)) ?9:20) + aSifsTime; 
+               u4bAcParam = ((((u32)(qos_parameters->tx_op_limit[i]))<< AC_PARAM_TXOP_LIMIT_OFFSET)|
+                               (((u32)(qos_parameters->cw_max[i]))<< AC_PARAM_ECW_MAX_OFFSET)|
+                               (((u32)(qos_parameters->cw_min[i]))<< AC_PARAM_ECW_MIN_OFFSET)|
+                               ((u32)u1bAIFS << AC_PARAM_AIFS_OFFSET));
+               write_nic_dword(dev, WDCAPARA_ADD[i], u4bAcParam);
+#endif
+       }
+
+success:
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16))
+       up(&priv->mutex);
+#else
+        mutex_unlock(&priv->mutex);
+#endif
+}
+
+static int rtl8192_qos_handle_probe_response(struct r8192_priv *priv,
+               int active_network,
+               struct rtllib_network *network)
+{
+       int ret = 0;
+       u32 size = sizeof(struct rtllib_qos_parameters);
+
+       if(priv->rtllib->state !=RTLLIB_LINKED)
+                return ret;
+
+#ifdef _RTL8192_EXT_PATCH_
+       if (!((priv->rtllib->iw_mode == IW_MODE_INFRA ) || 
+             ((priv->rtllib->iw_mode == IW_MODE_MESH) && (priv->rtllib->only_mesh == 0))))
+#else
+       if ((priv->rtllib->iw_mode != IW_MODE_INFRA)) 
+#endif
+               return ret;
+
+       if (network->flags & NETWORK_HAS_QOS_MASK) {
+               if (active_network &&
+                               (network->flags & NETWORK_HAS_QOS_PARAMETERS))
+                       network->qos_data.active = network->qos_data.supported;
+
+               if ((network->qos_data.active == 1) && (active_network == 1) &&
+                               (network->flags & NETWORK_HAS_QOS_PARAMETERS) &&
+                               (network->qos_data.old_param_count !=
+                                network->qos_data.param_count)) {
+                       network->qos_data.old_param_count =
+                               network->qos_data.param_count;
+                         priv->rtllib->wmm_acm = network->qos_data.wmm_acm;
+                       queue_work_rsl(priv->priv_wq, &priv->qos_activate);
+                       RT_TRACE (COMP_QOS, "QoS parameters change call "
+                                       "qos_activate\n");
+               }
+       } else {
+               memcpy(&priv->rtllib->current_network.qos_data.parameters,\
+                      &def_qos_parameters, size);
+
+               if ((network->qos_data.active == 1) && (active_network == 1)) {
+                       queue_work_rsl(priv->priv_wq, &priv->qos_activate);
+                       RT_TRACE(COMP_QOS, "QoS was disabled call qos_activate \n");
+               }
+               network->qos_data.active = 0;
+               network->qos_data.supported = 0;
+       }
+
+       return 0;
+}
+
+static int rtl8192_handle_beacon(struct net_device * dev,
+                              struct rtllib_beacon * beacon,
+                              struct rtllib_network * network)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+
+       rtl8192_qos_handle_probe_response(priv,1,network);
+
+       queue_delayed_work_rsl(priv->priv_wq, &priv->update_beacon_wq, 0);
+       return 0;
+
+}
+
+static int rtl8192_qos_association_resp(struct r8192_priv *priv,
+                                    struct rtllib_network *network)
+{
+        int ret = 0;
+        unsigned long flags;
+        u32 size = sizeof(struct rtllib_qos_parameters);
+        int set_qos_param = 0;
+
+        if ((priv == NULL) || (network == NULL))
+                return ret;
+
+       if(priv->rtllib->state !=RTLLIB_LINKED)
+                return ret;
+
+#ifdef _RTL8192_EXT_PATCH_
+       if (!((priv->rtllib->iw_mode == IW_MODE_INFRA ) || 
+             ((priv->rtllib->iw_mode == IW_MODE_MESH) && (priv->rtllib->only_mesh == 0))))
+#else
+       if ((priv->rtllib->iw_mode != IW_MODE_INFRA)) 
+#endif
+                return ret;
+
+        spin_lock_irqsave(&priv->rtllib->lock, flags);
+       if (network->flags & NETWORK_HAS_QOS_PARAMETERS) {
+               memcpy(&priv->rtllib->current_network.qos_data.parameters,\
+                        &network->qos_data.parameters,\
+                       sizeof(struct rtllib_qos_parameters));
+               priv->rtllib->current_network.qos_data.active = 1;
+                priv->rtllib->wmm_acm = network->qos_data.wmm_acm;
+#if 0
+               if((priv->rtllib->current_network.qos_data.param_count != \
+                                       network->qos_data.param_count))
+#endif
+                {
+                        set_qos_param = 1;
+                       priv->rtllib->current_network.qos_data.old_param_count = \
+                                priv->rtllib->current_network.qos_data.param_count;
+                       priv->rtllib->current_network.qos_data.param_count = \
+                                network->qos_data.param_count;
+               }
+        } else {
+               memcpy(&priv->rtllib->current_network.qos_data.parameters,\
+                      &def_qos_parameters, size);
+               priv->rtllib->current_network.qos_data.active = 0;
+               priv->rtllib->current_network.qos_data.supported = 0;
+                set_qos_param = 1;
+        }
+
+        spin_unlock_irqrestore(&priv->rtllib->lock, flags);
+
+       RT_TRACE(COMP_QOS, "%s: network->flags = %d,%d\n", __FUNCTION__,
+                       network->flags ,priv->rtllib->current_network.qos_data.active);
+       if (set_qos_param == 1) {
+               dm_init_edca_turbo(priv->rtllib->dev);
+               queue_work_rsl(priv->priv_wq, &priv->qos_activate);
+       }
+        return ret;
+}
+
+static int rtl8192_handle_assoc_response(struct net_device *dev,
+                                     struct rtllib_assoc_response_frame *resp,
+                                     struct rtllib_network *network)
+{
+        struct r8192_priv *priv = rtllib_priv(dev);
+        rtl8192_qos_association_resp(priv, network);
+        return 0;
+}
+
+void rtl8192_prepare_beacon(struct r8192_priv *priv)
+{
+#ifdef _RTL8192_EXT_PATCH_
+       struct net_device *dev = priv->rtllib->dev;
+#endif
+       struct sk_buff *skb;
+       cb_desc *tcb_desc; 
+
+#ifdef _RTL8192_EXT_PATCH_
+       if((priv->rtllib->iw_mode == IW_MODE_MESH) && (priv->rtllib->mesh_state == RTLLIB_NOLINK))
+               return;
+#endif
+       skb = rtllib_get_beacon(priv->rtllib);
+       tcb_desc = (cb_desc *)(skb->cb + 8);
+#ifdef _RTL8192_EXT_PATCH_
+       memset(skb->cb, 0, sizeof(skb->cb));
+#endif
+       tcb_desc->queue_index = BEACON_QUEUE;
+       tcb_desc->data_rate = 2;
+       tcb_desc->RATRIndex = 7;
+       tcb_desc->bTxDisableRateFallBack = 1;
+       tcb_desc->bTxUseDriverAssingedRate = 1;
+#ifdef _RTL8192_EXT_PATCH_
+       tcb_desc->bTxEnableFwCalcDur = 0;
+       memcpy((unsigned char *)(skb->cb),&dev,sizeof(dev));
+#endif
+       skb_push(skb, priv->rtllib->tx_headroom);       
+       if(skb){
+               rtl8192_tx(priv->rtllib->dev,skb);
+       }
+}
+
+void rtl8192_stop_beacon(struct net_device *dev)
+{
+}
+
+void rtl8192_config_rate(struct net_device* dev, u16* rate_config)
+{
+        struct r8192_priv *priv = rtllib_priv(dev);
+        struct rtllib_network *net;
+        u8 i=0, basic_rate = 0;
+#ifdef _RTL8192_EXT_PATCH_     
+       if(priv->rtllib->iw_mode == IW_MODE_MESH)
+               net = & priv->rtllib->current_mesh_network;
+       else
+               net = & priv->rtllib->current_network;
+#else  
+       net = & priv->rtllib->current_network;
+#endif
+
+        for (i = 0; i < net->rates_len; i++) {
+                basic_rate = net->rates[i] & 0x7f;
+                switch (basic_rate) {
+                case MGN_1M:   
+                        *rate_config |= RRSR_1M;       
+                        break;
+                case MGN_2M:   
+                        *rate_config |= RRSR_2M;       
+                        break;
+                case MGN_5_5M: 
+                        *rate_config |= RRSR_5_5M;     
+                        break;
+                case MGN_11M:  
+                        *rate_config |= RRSR_11M;      
+                        break;
+                case MGN_6M:   
+                        *rate_config |= RRSR_6M;       
+                        break;
+                case MGN_9M:   
+                        *rate_config |= RRSR_9M;       
+                        break;
+                case MGN_12M:  
+                        *rate_config |= RRSR_12M;      
+                        break;
+                case MGN_18M:  
+                        *rate_config |= RRSR_18M;      
+                        break;
+                case MGN_24M:  
+                        *rate_config |= RRSR_24M;      
+                        break;
+                case MGN_36M:  
+                        *rate_config |= RRSR_36M;      
+                        break;
+                case MGN_48M:  
+                        *rate_config |= RRSR_48M;      
+                        break;
+                case MGN_54M:  
+                        *rate_config |= RRSR_54M;      
+                        break;
+                }
+        }
+
+        for (i = 0; i < net->rates_ex_len; i++) {
+                basic_rate = net->rates_ex[i] & 0x7f;
+                switch (basic_rate) {
+                case MGN_1M:   
+                        *rate_config |= RRSR_1M;       
+                        break;
+                case MGN_2M:   
+                        *rate_config |= RRSR_2M;       
+                        break;
+                case MGN_5_5M: 
+                        *rate_config |= RRSR_5_5M;     
+                        break;
+                case MGN_11M:  
+                        *rate_config |= RRSR_11M;      
+                        break;
+                case MGN_6M:   
+                        *rate_config |= RRSR_6M;       
+                        break;
+                case MGN_9M:   
+                        *rate_config |= RRSR_9M;       
+                        break;
+                case MGN_12M:  
+                        *rate_config |= RRSR_12M;      
+                        break;
+                case MGN_18M:  
+                        *rate_config |= RRSR_18M;      
+                        break;
+                case MGN_24M:  
+                        *rate_config |= RRSR_24M;      
+                        break;
+                case MGN_36M:  
+                        *rate_config |= RRSR_36M;      
+                        break;
+                case MGN_48M:  
+                        *rate_config |= RRSR_48M;      
+                        break;
+                case MGN_54M:  
+                        *rate_config |= RRSR_54M;      
+                        break;
+                }
+        }
+}
+
+bool GetNmodeSupportBySecCfg8190Pci(struct net_device *dev)
+{
+#ifdef RTL8192SE
+       return true;
+#else
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device *ieee = priv->rtllib;
+       if (ieee->rtllib_ap_sec_type && 
+          (ieee->rtllib_ap_sec_type(priv->rtllib)&(SEC_ALG_WEP|SEC_ALG_TKIP))) {
+               return false;
+       } else {
+               return true;
+       }
+#endif
+}
+
+void rtl8192_refresh_supportrate(struct r8192_priv* priv)
+{
+       struct rtllib_device* ieee = priv->rtllib;
+       if (ieee->mode == WIRELESS_MODE_N_24G || ieee->mode == WIRELESS_MODE_N_5G) {
+               memcpy(ieee->Regdot11HTOperationalRateSet, ieee->RegHTSuppRateSet, 16);
+               memcpy(ieee->Regdot11TxHTOperationalRateSet, ieee->RegHTSuppRateSet, 16);
+               
+#ifdef RTL8192CE
+               if(priv->rf_type == RF_1T1R) {
+                       ieee->Regdot11HTOperationalRateSet[1] = 0;
+               }
+#endif
+
+#ifdef RTL8192SE
+               if(priv->rf_type == RF_1T1R) {
+                       ieee->Regdot11HTOperationalRateSet[1] = 0;
+               }
+               if(priv->rf_type == RF_1T1R || priv->rf_type == RF_1T2R)
+               {
+                       ieee->Regdot11TxHTOperationalRateSet[1] = 0;
+               }
+
+            if(priv->rtllib->b1SSSupport == true) {
+                ieee->Regdot11HTOperationalRateSet[1] = 0;
+            }
+#endif
+       } else {
+               memset(ieee->Regdot11HTOperationalRateSet, 0, 16);
+       }
+       return;
+}
+
+u8 rtl8192_getSupportedWireleeMode(struct net_device*dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       u8 ret = 0;
+
+       switch(priv->rf_chip) {
+       case RF_8225:
+       case RF_8256:
+       case RF_6052:
+       case RF_PSEUDO_11N:
+               ret = (WIRELESS_MODE_N_24G|WIRELESS_MODE_G | WIRELESS_MODE_B);
+               break;
+       case RF_8258:
+               ret = (WIRELESS_MODE_A | WIRELESS_MODE_N_5G);
+               break;
+       default:
+               ret = WIRELESS_MODE_B;
+               break;
+       }
+       return ret;
+}
+
+void rtl8192_SetWirelessMode(struct net_device* dev, u8 wireless_mode)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       u8 bSupportMode = rtl8192_getSupportedWireleeMode(dev);
+
+#if 0
+       if(     (wireless_mode != WIRELESS_MODE_B) && 
+               (wireless_mode != WIRELESS_MODE_G) &&
+               (wireless_mode != WIRELESS_MODE_A) &&
+               (wireless_mode != WIRELESS_MODE_AUTO) &&
+               (wireless_mode != WIRELESS_MODE_N_24G) &&
+               (wireless_mode != WIRELESS_MODE_N_5G) ) 
+       {
+               wireless_mode = WIRELESS_MODE_AUTO;
+       }
+#endif
+       if ((wireless_mode == WIRELESS_MODE_AUTO) || ((wireless_mode & bSupportMode) == 0)) {
+               if (bSupportMode & WIRELESS_MODE_N_24G) {
+                       wireless_mode = WIRELESS_MODE_N_24G;
+               } else if (bSupportMode & WIRELESS_MODE_N_5G) {
+                       wireless_mode = WIRELESS_MODE_N_5G;
+               } else if((bSupportMode & WIRELESS_MODE_A)) {
+                       wireless_mode = WIRELESS_MODE_A;
+               } else if((bSupportMode & WIRELESS_MODE_G)) {
+                       wireless_mode = WIRELESS_MODE_G;
+               } else if((bSupportMode & WIRELESS_MODE_B)) {
+                       wireless_mode = WIRELESS_MODE_B;
+               } else {
+                       RT_TRACE(COMP_ERR, "%s(), No valid wireless mode supported (%x)!!!\n",
+                                       __FUNCTION__, bSupportMode);
+                       wireless_mode = WIRELESS_MODE_B;
+               }
+       }
+
+#ifdef _RTL8192_EXT_PATCH_
+       if ((wireless_mode & WIRELESS_MODE_N_24G) == WIRELESS_MODE_N_24G)
+               wireless_mode = WIRELESS_MODE_N_24G;
+       else if((wireless_mode & WIRELESS_MODE_N_5G) == WIRELESS_MODE_N_5G)
+               wireless_mode = WIRELESS_MODE_N_5G;
+       else if ((wireless_mode & WIRELESS_MODE_A) == WIRELESS_MODE_A)
+               wireless_mode = WIRELESS_MODE_A;
+       else if ((wireless_mode & WIRELESS_MODE_G) == WIRELESS_MODE_G)
+               wireless_mode = WIRELESS_MODE_G;
+       else
+               wireless_mode = WIRELESS_MODE_B;
+#else
+       if ((wireless_mode & (WIRELESS_MODE_B | WIRELESS_MODE_G)) == (WIRELESS_MODE_G | WIRELESS_MODE_B))
+               wireless_mode = WIRELESS_MODE_G;
+#endif
+
+#ifdef RTL8192SE
+       write_nic_word(dev, SIFS_OFDM, 0x0e0e); 
+#endif
+#ifdef RTL8192CE
+       {
+               u16 SIFS_Timer = 0x0a0a;
+               
+               if(wireless_mode == WIRELESS_MODE_G)
+                       SIFS_Timer = 0x0a0a;
+               else
+                       SIFS_Timer = 0x1010;
+
+               priv->rtllib->SetHwRegHandler( dev, HW_VAR_SIFS,  (u8*)&SIFS_Timer);
+       }
+#endif
+       priv->rtllib->mode = wireless_mode;
+       
+       if ((wireless_mode == WIRELESS_MODE_N_24G) ||  (wireless_mode == WIRELESS_MODE_N_5G)){
+               priv->rtllib->pHTInfo->bEnableHT = 1;   
+                printk("%s(), wireless_mode:%x, bEnableHT = 1\n", __FUNCTION__,wireless_mode);
+        }else{
+               priv->rtllib->pHTInfo->bEnableHT = 0;
+                printk("%s(), wireless_mode:%x, bEnableHT = 0\n", __FUNCTION__,wireless_mode);
+        }
+       RT_TRACE(COMP_INIT, "Current Wireless Mode is %x\n", wireless_mode);
+       rtl8192_refresh_supportrate(priv);
+}
+
+bool GetHalfNmodeSupportByAPs819xPci(struct net_device* dev)
+{
+#ifdef RTL8192SE
+       return false;
+#else  
+       bool                    Reval;
+       struct r8192_priv* priv = rtllib_priv(dev);
+       struct rtllib_device* ieee = priv->rtllib;
+       
+       if(ieee->bHalfWirelessN24GMode == true)
+               Reval = true;
+       else
+               Reval =  false;
+
+       return Reval;
+#endif
+}
+
+#ifdef _RTL8192_EXT_PATCH_
+#define KEEP_ALIVE_INTERVAL                            20 
+#define DEFAULT_KEEP_ALIVE_LEVEL                       1
+#endif
+
+#if 1
+static void rtl8192_init_priv_handler(struct net_device* dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+
+       priv->rtllib->softmac_hard_start_xmit   = rtl8192_hard_start_xmit;
+       priv->rtllib->set_chan                          = rtl8192_set_chan;
+       priv->rtllib->link_change                       = priv->ops->link_change;
+       priv->rtllib->softmac_data_hard_start_xmit = rtl8192_hard_data_xmit;
+       priv->rtllib->data_hard_stop            = rtl8192_data_hard_stop;
+       priv->rtllib->data_hard_resume          = rtl8192_data_hard_resume;
+       priv->rtllib->check_nic_enough_desc     = check_nic_enough_desc;        
+       priv->rtllib->get_nic_desc_num          = get_nic_desc_num;     
+#ifdef _RTL8192_EXT_PATCH_
+       priv->rtllib->set_mesh_key                      = r8192_mesh_set_enc_ext;
+#endif
+
+       
+       priv->rtllib->handle_assoc_response     = rtl8192_handle_assoc_response;
+       priv->rtllib->handle_beacon             = rtl8192_handle_beacon;
+       priv->rtllib->SetWirelessMode           = rtl8192_SetWirelessMode;
+       
+#ifdef ENABLE_LPS
+       priv->rtllib->LeisurePSLeave            = LeisurePSLeave;
+#endif
+
+#ifdef RTL8192CE
+       priv->rtllib->SetBWModeHandler          = PHY_SetBWMode8192C;
+       priv->rf_set_chan                                               = PHY_SwChnl8192C;
+       
+#ifdef _ENABLE_SW_BEACON
+       priv->rtllib->start_send_beacons        = NULL;
+       priv->rtllib->stop_send_beacons         = NULL;
+#else
+       priv->rtllib->start_send_beacons        = rtl8192ce_SetBeaconRelatedRegisters;
+       priv->rtllib->stop_send_beacons         = rtl8192_stop_beacon;
+#endif
+       
+       priv->rtllib->sta_wake_up                       = rtl8192_hw_wakeup;
+       priv->rtllib->enter_sleep_state                 = rtl8192_hw_to_sleep;
+       priv->rtllib->ps_is_queue_empty         = rtl8192_is_tx_queue_empty;
+       
+       priv->rtllib->GetNmodeSupportBySecCfg = rtl8192ce_GetNmodeSupportBySecCfg;
+       priv->rtllib->GetHalfNmodeSupportByAPsHandler = rtl8192ce_GetHalfNmodeSupportByAPs;
+
+       priv->rtllib->SetHwRegHandler           = rtl8192ce_SetHwReg;
+       priv->rtllib->GetHwRegHandler           = rtl8192ce_GetHwReg;
+       priv->rtllib->SetFwCmdHandler           = rtl8192ce_phy_SetFwCmdIO;
+       priv->rtllib->UpdateHalRAMaskHandler    = rtl8192ce_UpdateHalRAMask;
+       priv->rtllib->UpdateBeaconInterruptHandler = rtl8192ce_UpdateInterruptMask;
+       priv->rtllib->rtl_11n_user_show_rates = rtl8192_11n_user_show_rates;
+#ifdef ENABLE_IPS
+       priv->rtllib->rtllib_ips_leave_wq = rtllib_ips_leave_wq;
+       priv->rtllib->rtllib_ips_leave  = rtllib_ips_leave;
+#endif
+
+       priv->rtllib->LedControlHandler                 = LedControl8192CE;
+       priv->rtllib->ScanOperationBackupHandler = PHY_ScanOperationBackup8192C;
+#endif
+
+#ifdef RTL8192SE
+       priv->rtllib->SetBWModeHandler          = rtl8192_SetBWMode;
+       priv->rf_set_chan                                               = rtl8192_phy_SwChnl;
+       
+#ifdef _RTL8192_EXT_PATCH_
+       priv->rtllib->start_send_beacons = NULL;
+       priv->rtllib->stop_send_beacons = NULL;
+#else  
+#ifdef _ENABLE_SW_BEACON
+       priv->rtllib->start_send_beacons = NULL;
+       priv->rtllib->stop_send_beacons = NULL;
+#else
+       priv->rtllib->start_send_beacons = rtl8192se_start_beacon;
+       priv->rtllib->stop_send_beacons = rtl8192_stop_beacon;
+#endif 
+#endif 
+
+       priv->rtllib->sta_wake_up = rtl8192_hw_wakeup;
+       priv->rtllib->enter_sleep_state = rtl8192_hw_to_sleep;
+       priv->rtllib->ps_is_queue_empty = rtl8192_is_tx_queue_empty;
+
+       priv->rtllib->GetNmodeSupportBySecCfg = GetNmodeSupportBySecCfg8190Pci;
+       priv->rtllib->GetHalfNmodeSupportByAPsHandler = GetHalfNmodeSupportByAPs819xPci;
+
+       priv->rtllib->SetBeaconRelatedRegistersHandler = SetBeaconRelatedRegisters8192SE;
+       priv->rtllib->Adhoc_InitRateAdaptive = Adhoc_InitRateAdaptive;
+       priv->rtllib->check_ht_cap = rtl8192se_check_ht_cap;
+       priv->rtllib->SetHwRegHandler = SetHwReg8192SE;
+#ifndef _RTL8192_EXT_PATCH_
+       priv->rtllib->GetHwRegHandler = GetHwReg8192SE;
+#endif
+       priv->rtllib->SetFwCmdHandler = rtl8192se_set_fw_cmd;
+       priv->rtllib->UpdateHalRAMaskHandler = UpdateHalRAMask8192SE;
+       priv->rtllib->UpdateBeaconInterruptHandler = NULL;
+       priv->rtllib->rtl_11n_user_show_rates = rtl8192_11n_user_show_rates;
+#ifdef ENABLE_IPS
+       priv->rtllib->rtllib_ips_leave_wq = rtllib_ips_leave_wq;
+       priv->rtllib->rtllib_ips_leave = rtllib_ips_leave;
+#endif
+
+       priv->rtllib->LedControlHandler = LedControl8192SE;
+
+       priv->rtllib->rtllib_start_hw_scan = rtl8192se_hw_scan_initiate;
+       priv->rtllib->rtllib_stop_hw_scan = rtl8192se_cancel_hw_scan;
+#endif
+
+#ifdef RTL8192E
+       priv->rtllib->SetBWModeHandler          = rtl8192_SetBWMode;
+       priv->rf_set_chan                                               = rtl8192_phy_SwChnl;
+       
+#ifdef _ENABLE_SW_BEACON
+       priv->rtllib->start_send_beacons = NULL;
+       priv->rtllib->stop_send_beacons = NULL;
+#else
+       priv->rtllib->start_send_beacons = rtl8192e_start_beacon;
+       priv->rtllib->stop_send_beacons = rtl8192_stop_beacon;
+#endif
+       
+       priv->rtllib->sta_wake_up = rtl8192_hw_wakeup;
+       priv->rtllib->enter_sleep_state = rtl8192_hw_to_sleep;
+       priv->rtllib->ps_is_queue_empty = rtl8192_is_tx_queue_empty;
+
+       priv->rtllib->GetNmodeSupportBySecCfg = GetNmodeSupportBySecCfg8190Pci;
+       priv->rtllib->GetHalfNmodeSupportByAPsHandler = GetHalfNmodeSupportByAPs819xPci;
+
+       priv->rtllib->SetHwRegHandler = rtl8192e_SetHwReg;
+       priv->rtllib->SetFwCmdHandler = NULL;
+       priv->rtllib->InitialGainHandler = InitialGain819xPci;
+#ifdef ENABLE_IPS
+       priv->rtllib->rtllib_ips_leave_wq = rtllib_ips_leave_wq;
+       priv->rtllib->rtllib_ips_leave = rtllib_ips_leave;
+#endif
+
+       priv->rtllib->LedControlHandler = NULL;
+       priv->rtllib->UpdateBeaconInterruptHandler = NULL;
+#endif
+
+#ifdef RTL8190P
+       priv->rtllib->SetBWModeHandler          = rtl8192_SetBWMode;
+       priv->rf_set_chan                                               = rtl8192_phy_SwChnl;
+       
+#ifdef _ENABLE_SW_BEACON
+       priv->rtllib->start_send_beacons = NULL;
+       priv->rtllib->stop_send_beacons = NULL;
+#else
+       priv->rtllib->start_send_beacons = rtl8192e_start_beacon;
+       priv->rtllib->stop_send_beacons = rtl8192_stop_beacon;
+#endif
+       
+       priv->rtllib->GetNmodeSupportBySecCfg = GetNmodeSupportBySecCfg8190Pci;
+       priv->rtllib->GetHalfNmodeSupportByAPsHandler = GetHalfNmodeSupportByAPs819xPci;
+
+       priv->rtllib->SetHwRegHandler = rtl8192e_SetHwReg;
+       priv->rtllib->SetFwCmdHandler = NULL;
+       priv->rtllib->InitialGainHandler = InitialGain819xPci;
+#ifdef ENABLE_IPS
+       priv->rtllib->rtllib_ips_leave_wq = rtllib_ips_leave_wq;
+       priv->rtllib->rtllib_ips_leave = rtllib_ips_leave;
+#endif
+
+       priv->rtllib->LedControlHandler = NULL;
+       priv->rtllib->UpdateBeaconInterruptHandler = NULL;
+#endif
+}
+#endif
+
+static void rtl8192_init_aspm(struct net_device* dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+#ifdef CONFIG_ASPM_OR_D3
+       int pos;
+       u8 value;
+#endif
+
+       priv->bridge_pdev = priv->pdev->bus->self;
+       switch (priv->bridge_pdev->vendor) {
+       case PCI_VENDOR_ID_INTEL:
+               priv->pci_bridge_vendor = PCI_BRIDGE_VENDOR_INTEL;
+                       break;
+       case PCI_VENDOR_ID_SI:
+               priv->pci_bridge_vendor = PCI_BRIDGE_VENDOR_SIS;
+                       break;
+       default:
+               priv->pci_bridge_vendor = 0;
+               break;
+       }
+       
+#ifdef CONFIG_ASPM_OR_D3
+       if (priv->pci_bridge_vendor & (PCI_BRIDGE_VENDOR_INTEL | PCI_BRIDGE_VENDOR_SIS)) {
+               priv->aspm_clkreq_enable = true;
+               priv->RegHostPciASPMSetting = 0x02;
+               pos = pci_find_capability(priv->bridge_pdev, PCI_CAP_ID_EXP);
+               priv->PciBridgeASPMRegOffset = pos + PCI_EXP_LNKCTL;
+               pci_read_config_byte(priv->bridge_pdev, pos + PCI_EXP_LNKCTL, &value);
+               priv->PciBridgeLinkCtrlReg = value;
+
+               priv->RegDevicePciASPMSetting = 0x03;
+               pos = pci_find_capability(priv->pdev, PCI_CAP_ID_EXP);
+               priv->ASPMRegOffset = pos + PCI_EXP_LNKCTL;
+               priv->ClkReqOffset = pos + PCI_EXP_LNKCTL + 1;
+               pci_read_config_byte(priv->pdev, pos + PCI_EXP_LNKCTL, &value);
+               priv->LinkCtrlReg = value;
+       } else {
+               priv->aspm_clkreq_enable = false;
+       }
+#endif 
+}
+
+static void rtl8192_init_priv_variable(struct net_device* dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+#if defined RTL8192SE || defined RTL8192CE || defined RTL8192E 
+       PRT_POWER_SAVE_CONTROL  pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl));
+#endif
+       u8 i;
+
+       priv->rtllib->hwscan_sem_up = 1;
+       priv->rtllib->status = 0;
+       priv->H2CTxCmdSeq = 0;
+       priv->bDisableFrameBursting = 0;
+       priv->bDMInitialGainEnable = 1; 
+       priv->polling_timer_on = 0;
+       priv->up_first_time = 1;
+       priv->blinked_ingpio = false;
+       priv->bDriverIsGoingToUnload = false;
+       priv->being_init_adapter = false;
+        priv->sw_radio_on = true;
+       priv->bdisable_nic = false;
+       priv->bfirst_init = false;
+       priv->txringcount = 64;
+       priv->rxbuffersize = 9100;
+       priv->rxringcount = MAX_RX_COUNT;
+       priv->irq_enabled=0;
+       priv->chan = 1; 
+       priv->RegWirelessMode = WIRELESS_MODE_AUTO;
+       priv->RegChannelPlan = 0xf;
+       priv->nrxAMPDU_size = 0;
+       priv->nrxAMPDU_aggr_num = 0;
+       priv->last_rxdesc_tsf_high = 0;
+       priv->last_rxdesc_tsf_low = 0;
+       priv->rtllib->mode = WIRELESS_MODE_AUTO; 
+       priv->rtllib->iw_mode = IW_MODE_INFRA;
+       priv->rtllib->ieee_up=0;
+       priv->retry_rts = DEFAULT_RETRY_RTS;
+       priv->retry_data = DEFAULT_RETRY_DATA;
+       priv->rtllib->rts = DEFAULT_RTS_THRESHOLD;
+       priv->rtllib->rate = 110; 
+       priv->rtllib->short_slot = 1;
+       priv->promisc = (dev->flags & IFF_PROMISC) ? 1:0;
+       priv->bcck_in_ch14 = false;
+       priv->bfsync_processing  = false;
+       priv->CCKPresentAttentuation = 0;
+       priv->rfa_txpowertrackingindex = 0;
+       priv->rfc_txpowertrackingindex = 0;
+       priv->CckPwEnl = 6;
+       priv->ScanDelay = 50;
+       priv->ResetProgress = RESET_TYPE_NORESET;
+       priv->bForcedSilentReset = 0;
+       priv->bDisableNormalResetCheck = false;
+       priv->force_reset = false;
+       memset(priv->rtllib->swcamtable,0,sizeof(SW_CAM_TABLE)*32);
+#ifdef _RTL8192_EXT_PATCH_
+       priv->rtllib->mesh_security_setting = 0;
+       memset(priv->rtllib->swmeshcamtable,0,sizeof(SW_CAM_TABLE)*32);
+       priv->rtllib->mesh_sec_type = 0;
+#endif
+       memset(&priv->InterruptLog,0,sizeof(LOG_INTERRUPT_8190_T));
+       priv->RxCounter = 0;
+        priv->rtllib->wx_set_enc = 0;
+       priv->bHwRadioOff = false;
+       priv->RegRfOff = 0;
+       priv->isRFOff = false;
+       priv->bInPowerSaveMode = false;
+       priv->rtllib->RfOffReason = 0;
+       priv->RFChangeInProgress = false;
+       priv->bHwRfOffAction = 0;
+       priv->SetRFPowerStateInProgress = false;
+       priv->rtllib->PowerSaveControl.bInactivePs = true;
+       priv->rtllib->PowerSaveControl.bIPSModeBackup = false;
+       priv->rtllib->PowerSaveControl.bLeisurePs = true;
+       priv->rtllib->PowerSaveControl.bFwCtrlLPS = false;
+       priv->rtllib->LPSDelayCnt = 0;
+        priv->rtllib->sta_sleep = 0;
+       priv->rtllib->eRFPowerState = eRfOn;
+#ifdef _RTL8192_EXT_PATCH_
+       priv->NumTxUnicast = 0;
+       priv->keepAliveLevel = DEFAULT_KEEP_ALIVE_LEVEL;
+#endif
+       priv->txpower_checkcnt = 0;
+       priv->thermal_readback_index =0;
+       priv->txpower_tracking_callback_cnt = 0;
+       priv->ccktxpower_adjustcnt_ch14 = 0;
+       priv->ccktxpower_adjustcnt_not_ch14 = 0;
+#ifdef _RTL8192_EXT_PATCH_
+       priv->FwCmdIOMap = 0;
+       priv->FwCmdIOParam = 0;
+       priv->ThermalValue = 0;
+       priv->DMFlag = 0;
+       priv->rssi_level = 0;
+       priv->rtllib->bUseRAMask = 0;
+#endif
+#if defined RTL8192SE 
+       for(i = 0; i<PEER_MAX_ASSOC; i++)
+               priv->rtllib->peer_assoc_list[i]=NULL;
+       priv->RATRTableBitmap = 0;
+       priv->rtllib->amsdu_in_process = 0;
+#endif 
+       
+       rtl8192_init_aspm(dev);
+
+       priv->rtllib->current_network.beacon_interval = DEFAULT_BEACONINTERVAL; 
+       priv->rtllib->iw_mode = IW_MODE_INFRA;
+#ifdef _ENABLE_SW_BEACON
+       priv->rtllib->softmac_features  = IEEE_SOFTMAC_SCAN | 
+               IEEE_SOFTMAC_ASSOCIATE | IEEE_SOFTMAC_PROBERQ | 
+               IEEE_SOFTMAC_PROBERS | IEEE_SOFTMAC_TX_QUEUE  |
+               IEEE_SOFTMAC_BEACONS;
+#else  
+       priv->rtllib->softmac_features  = 
+               IEEE_SOFTMAC_ASSOCIATE | IEEE_SOFTMAC_PROBERQ | 
+               IEEE_SOFTMAC_PROBERS | IEEE_SOFTMAC_TX_QUEUE /* |
+               IEEE_SOFTMAC_BEACONS*/;
+#endif
+       priv->rtllib->active_scan = 1;
+       priv->rtllib->be_scan_inprogress = false;
+       priv->rtllib->modulation = RTLLIB_CCK_MODULATION | RTLLIB_OFDM_MODULATION;
+       priv->rtllib->host_encrypt = 1;
+       priv->rtllib->host_decrypt = 1;
+
+       priv->rtllib->qos_support = 1;
+       priv->rtllib->dot11PowerSaveMode = eActive;
+#if defined (RTL8192S_WAPI_SUPPORT)
+       priv->rtllib->wapiInfo.bWapiPSK = false;
+#endif
+       priv->rtllib->fts = DEFAULT_FRAG_THRESHOLD;
+       priv->rtllib->MaxMssDensity = 0;
+       priv->rtllib->MinSpaceCfg = 0;
+       
+       priv->card_type = PCI;
+
+#if defined RTL8192SE || defined RTL8192CE || defined RTL8192E 
+       pPSC->RegRfPsLevel |= RT_RF_OFF_LEVL_HALT_NIC;
+       pPSC->RegRfPsLevel |= RT_RF_OFF_LEVL_CLK_REQ;
+       pPSC->RegRfPsLevel |= RT_RF_OFF_LEVL_ASPM;
+       pPSC->RegRfPsLevel |= RT_RF_LPS_LEVEL_ASPM;
+
+       pPSC->RegMaxLPSAwakeIntvl = 5;
+#endif
+
+       priv->AcmControl = 0;   
+       priv->pFirmware = (rt_firmware*)vmalloc(sizeof(rt_firmware));
+       if (priv->pFirmware)
+       memset(priv->pFirmware, 0, sizeof(rt_firmware));
+
+        skb_queue_head_init(&priv->rx_queue);
+       skb_queue_head_init(&priv->skb_queue);
+
+       for(i = 0; i < MAX_QUEUE_SIZE; i++) {
+               skb_queue_head_init(&priv->rtllib->skb_waitQ [i]);
+       }
+       for(i = 0; i < MAX_QUEUE_SIZE; i++) {
+               skb_queue_head_init(&priv->rtllib->skb_aggQ [i]);
+       }
+
+#ifdef _RTL8192_EXT_PATCH_
+       priv->rtllib->set_key_for_AP = rtl8192_set_key_for_AP;
+       memset(priv->rtllib->swmeshratrtable,0,8*(sizeof(SW_RATR_TABLE)));
+       priv->rtllib->mesh_amsdu_in_process = 0;
+       priv->rtllib->HwSecCamBitMap = 0;
+       memset(priv->rtllib->HwSecCamStaAddr,0,TOTAL_CAM_ENTRY * ETH_ALEN); 
+       priv->rtllib->LinkingPeerBitMap = 0;
+       memset(priv->rtllib->LinkingPeerAddr,0,(MAX_MP-1) * ETH_ALEN); 
+       memset(priv->rtllib->LinkingPeerSecState, 0, (MAX_MP-1));
+       memset(priv->rtllib->peer_AID_Addr,0,30 * ETH_ALEN);
+       priv->rtllib->peer_AID_bitmap = 0;
+       priv->rtllib->backup_channel = 1;
+       priv->rtllib->del_hwsec_cam_entry = rtl8192_del_hwsec_cam_entry; 
+       priv->rtllib->set_key_for_peer = meshdev_set_key_for_peer;
+       priv->rtllib->hostname_len = 0;
+       memset(priv->rtllib->hostname, 0, sizeof(priv->rtllib->hostname));
+       priv->rtllib->meshScanMode = 0;
+       priv->rtllib->currentRate = 0xffffffff;
+       priv->mshobj = alloc_mshobj(priv);
+       printk("priv is %p,mshobj is %p\n",priv,priv->mshobj);
+
+       if (priv->mshobj) {
+               priv->rtllib->ext_patch_rtllib_start_protocol = 
+                       priv->mshobj->ext_patch_rtllib_start_protocol;
+               priv->rtllib->ext_patch_rtllib_stop_protocol = 
+                       priv->mshobj->ext_patch_rtllib_stop_protocol;
+               priv->rtllib->ext_patch_rtllib_start_mesh = 
+                       priv->mshobj->ext_patch_rtllib_start_mesh;
+               priv->rtllib->ext_patch_rtllib_probe_req_1 = 
+                       priv->mshobj->ext_patch_rtllib_probe_req_1;
+               priv->rtllib->ext_patch_rtllib_probe_req_2 = 
+                       priv->mshobj->ext_patch_rtllib_probe_req_2;
+               priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_auth = 
+                       priv->mshobj->ext_patch_rtllib_rx_frame_softmac_on_auth;
+               priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_deauth = 
+                       priv->mshobj->ext_patch_rtllib_rx_frame_softmac_on_deauth;
+               priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_peerlink_open = 
+                       priv->mshobj->ext_patch_rtllib_rx_frame_softmac_on_peerlink_open;
+               priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_peerlink_confirm = 
+                       priv->mshobj->ext_patch_rtllib_rx_frame_softmac_on_peerlink_confirm;
+               priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_peerlink_close = 
+                       priv->mshobj->ext_patch_rtllib_rx_frame_softmac_on_peerlink_close;
+               priv->rtllib->ext_patch_rtllib_close_all_peerlink = 
+                       priv->mshobj->ext_patch_rtllib_close_all_peerlink;
+               priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_linkmetric_report = 
+                       priv->mshobj->ext_patch_rtllib_rx_frame_softmac_on_linkmetric_report;
+               priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_linkmetric_req = 
+                       priv->mshobj->ext_patch_rtllib_rx_frame_softmac_on_linkmetric_req;
+               priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_pathselect_preq = 
+                       priv->mshobj->ext_patch_rtllib_rx_frame_softmac_on_pathselect_preq;
+               priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_pathselect_prep = 
+                       priv->mshobj->ext_patch_rtllib_rx_frame_softmac_on_pathselect_prep;
+               priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_pathselect_perr = 
+                       priv->mshobj->ext_patch_rtllib_rx_frame_softmac_on_pathselect_perr;
+               priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_pathselect_rann = 
+                       priv->mshobj->ext_patch_rtllib_rx_frame_softmac_on_pathselect_rann;
+               priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_pathselect_pann = 
+                       priv->mshobj->ext_patch_rtllib_rx_frame_softmac_on_pathselect_pann;
+               priv->rtllib->ext_patch_rtllib_ext_stop_scan_wq_set_channel = 
+                       priv->mshobj->ext_patch_rtllib_ext_stop_scan_wq_set_channel;
+               priv->rtllib->ext_patch_r819x_wx_set_mesh_chan = 
+                       priv->mshobj->ext_patch_r819x_wx_set_mesh_chan;
+               priv->rtllib->ext_patch_r819x_wx_set_channel = 
+                       priv->mshobj->ext_patch_r819x_wx_set_channel;
+               priv->rtllib->ext_patch_rtllib_process_probe_response_1 = 
+                       priv->mshobj->ext_patch_rtllib_process_probe_response_1;
+               priv->rtllib->ext_patch_rtllib_rx_mgt_on_probe_req = 
+                       priv->mshobj->ext_patch_rtllib_rx_mgt_on_probe_req;
+               priv->rtllib->ext_patch_rtllib_rx_mgt_update_expire = 
+                       priv->mshobj->ext_patch_rtllib_rx_mgt_update_expire;
+               priv->rtllib->ext_patch_get_beacon_get_probersp = 
+                       priv->mshobj->ext_patch_get_beacon_get_probersp;
+               priv->rtllib->ext_patch_rtllib_rx_on_rx = 
+                       priv->mshobj->ext_patch_rtllib_rx_on_rx;                
+               priv->rtllib->ext_patch_rtllib_rx_frame_get_hdrlen = 
+                       priv->mshobj->ext_patch_rtllib_rx_frame_get_hdrlen;
+               priv->rtllib->ext_patch_rtllib_rx_frame_get_mac_hdrlen = 
+                       priv->mshobj->ext_patch_rtllib_rx_frame_get_mac_hdrlen;
+               priv->rtllib->ext_patch_rtllib_rx_frame_get_mesh_hdrlen_llc = 
+                       priv->mshobj->ext_patch_rtllib_rx_frame_get_mesh_hdrlen_llc;
+               priv->rtllib->ext_patch_rtllib_rx_is_valid_framectl = 
+                       priv->mshobj->ext_patch_rtllib_rx_is_valid_framectl;
+               priv->rtllib->ext_patch_rtllib_softmac_xmit_get_rate = 
+                       priv->mshobj->ext_patch_rtllib_softmac_xmit_get_rate;
+               /* added by david for setting acl dynamically */
+               priv->rtllib->ext_patch_rtllib_acl_query = 
+                       priv->mshobj->ext_patch_rtllib_acl_query;
+               priv->rtllib->ext_patch_rtllib_tx_data = 
+                       priv->mshobj->ext_patch_rtllib_tx_data;
+               priv->rtllib->ext_patch_rtllib_is_mesh = 
+                       priv->mshobj->ext_patch_rtllib_is_mesh;
+               priv->rtllib->ext_patch_rtllib_create_crypt_for_peer = 
+                       priv->mshobj->ext_patch_rtllib_create_crypt_for_peer;
+               priv->rtllib->ext_patch_rtllib_get_peermp_htinfo = 
+                       priv->mshobj->ext_patch_rtllib_get_peermp_htinfo;
+               priv->rtllib->ext_patch_rtllib_update_ratr_mask = 
+                       priv->mshobj->ext_patch_rtllib_update_ratr_mask;
+               priv->rtllib->ext_patch_rtllib_send_ath_commit = 
+                       priv->mshobj->ext_patch_rtllib_send_ath_commit;
+               priv->rtllib->ext_patch_rtllib_send_ath_confirm = 
+                       priv->mshobj->ext_patch_rtllib_send_ath_confirm;
+               priv->rtllib->ext_patch_rtllib_rx_ath_commit = 
+                       priv->mshobj->ext_patch_rtllib_rx_ath_commit;
+               priv->rtllib->ext_patch_rtllib_rx_ath_confirm = 
+                       priv->mshobj->ext_patch_rtllib_rx_ath_confirm;
+       }
+       for (i = 0; i < MAX_QUEUE_SIZE; i++) {
+               skb_queue_head_init(&priv->rtllib->skb_meshaggQ[i]);
+       }
+#endif 
+
+}      
+
+static void rtl8192_init_priv_lock(struct r8192_priv* priv)
+{
+       spin_lock_init(&priv->fw_scan_lock);
+       spin_lock_init(&priv->tx_lock);
+       spin_lock_init(&priv->irq_lock);
+       spin_lock_init(&priv->irq_th_lock);
+       spin_lock_init(&priv->rf_ps_lock);
+       spin_lock_init(&priv->ps_lock);
+       spin_lock_init(&priv->rf_lock);
+       spin_lock_init(&priv->rt_h2c_lock);
+#ifdef CONFIG_ASPM_OR_D3
+       spin_lock_init(&priv->D3_lock);
+#endif
+       sema_init(&priv->wx_sem,1);
+       sema_init(&priv->rf_sem,1);
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16))
+       sema_init(&priv->mutex, 1);
+#else
+       mutex_init(&priv->mutex);
+#endif
+}
+
+static void rtl8192_init_priv_task(struct net_device* dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);     
+
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) 
+#ifdef PF_SYNCTHREAD
+       priv->priv_wq = create_workqueue(DRV_NAME,0);
+#else  
+       priv->priv_wq = create_workqueue(DRV_NAME);
+#endif
+#endif
+       INIT_WORK_RSL(&priv->reset_wq,  (void*)rtl8192_restart, dev);
+#ifdef ENABLE_IPS
+       INIT_WORK_RSL(&priv->rtllib->ips_leave_wq, (void*)IPSLeave_wq, dev);  
+#endif
+       INIT_DELAYED_WORK_RSL(&priv->watch_dog_wq, (void*)rtl819x_watchdog_wqcallback, dev);
+       INIT_DELAYED_WORK_RSL(&priv->txpower_tracking_wq,  (void*)dm_txpower_trackingcallback, dev);
+       INIT_DELAYED_WORK_RSL(&priv->rfpath_check_wq,  (void*)dm_rf_pathcheck_workitemcallback, dev);
+       INIT_DELAYED_WORK_RSL(&priv->update_beacon_wq, (void*)rtl8192_update_beacon, dev);
+       INIT_WORK_RSL(&priv->qos_activate, (void*)rtl8192_qos_activate, dev);
+#ifndef RTL8190P       
+       INIT_DELAYED_WORK_RSL(&priv->rtllib->hw_wakeup_wq,(void*) rtl8192_hw_wakeup_wq, dev);
+       INIT_DELAYED_WORK_RSL(&priv->rtllib->hw_sleep_wq,(void*) rtl8192_hw_sleep_wq, dev);
+#endif
+#if defined RTL8192SE 
+       INIT_DELAYED_WORK_RSL(&priv->check_hw_scan_wq, (void*)rtl8192se_check_hw_scan, dev);
+       INIT_DELAYED_WORK_RSL(&priv->hw_scan_simu_wq, (void*)rtl8192se_hw_scan_simu, dev);
+       INIT_DELAYED_WORK_RSL(&priv->start_hw_scan_wq, (void*)rtl8192se_start_hw_scan, dev);
+       INIT_DELAYED_WORK_RSL(&priv->rtllib->check_tsf_wq,(void*)rtl8192se_check_tsf_wq, dev);
+       INIT_DELAYED_WORK_RSL(&priv->rtllib->update_assoc_sta_info_wq, 
+                       (void*)rtl8192se_update_peer_ratr_table_wq, dev);
+#endif
+#ifdef _RTL8192_EXT_PATCH_
+       INIT_WORK_RSL(&priv->rtllib->ext_create_crypt_for_peers_wq, (void*)msh_create_crypt_for_peers_wq, dev);
+       INIT_WORK_RSL(&priv->rtllib->ext_path_sel_ops_wq,(void*) path_sel_ops_wq, dev);
+       INIT_WORK_RSL(&priv->rtllib->ext_update_extchnloffset_wq, 
+                       (void*) meshdev_update_ext_chnl_offset_as_client, dev);
+       INIT_DELAYED_WORK_RSL(&priv->rtllib->ext_wx_set_key_wq, (void*)ext_mesh_set_key_wq,priv->rtllib);
+#endif
+       tasklet_init(&priv->irq_rx_tasklet,
+            (void(*)(unsigned long))rtl8192_irq_rx_tasklet,
+            (unsigned long)priv);
+       tasklet_init(&priv->irq_tx_tasklet,
+            (void(*)(unsigned long))rtl8192_irq_tx_tasklet,
+            (unsigned long)priv);
+        tasklet_init(&priv->irq_prepare_beacon_tasklet,
+                (void(*)(unsigned long))rtl8192_prepare_beacon,
+                (unsigned long)priv);
+}
+
+short rtl8192_get_channel_map(struct net_device * dev)
+{
+       int i;
+
+#ifdef ENABLE_DOT11D
+       struct r8192_priv *priv = rtllib_priv(dev);
+       if ((priv->rf_chip != RF_8225) && (priv->rf_chip != RF_8256) 
+                       && (priv->rf_chip != RF_6052)) {
+               RT_TRACE(COMP_ERR, "%s: unknown rf chip, can't set channel map\n", __FUNCTION__);
+               return -1;
+       }
+               
+       if (priv->ChannelPlan > COUNTRY_CODE_MAX) {
+               printk("rtl819x_init:Error channel plan! Set to default.\n");
+               priv->ChannelPlan= COUNTRY_CODE_FCC;
+       }
+       RT_TRACE(COMP_INIT, "Channel plan is %d\n",priv->ChannelPlan);
+       Dot11d_Init(priv->rtllib);
+#if !(defined CONFIG_CRDA && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30)))
+       Dot11d_Channelmap(priv->ChannelPlan, priv->rtllib);
+#endif 
+#else
+       struct r8192_priv *priv = rtllib_priv(dev);
+       int ch;
+       if(!channels){
+               DMESG("No channels, aborting");
+               return -1;
+       }
+
+       ch = channels;
+       priv->ChannelPlan = 0;
+       for (i = 1; i <= 14; i++) {
+               (priv->rtllib->channel_map)[i] = (u8)(ch & 0x01);
+               ch >>= 1;
+       }
+       priv->rtllib->IbssStartChnl= 10;
+       priv->rtllib->ibss_maxjoin_chal = 11;
+#endif
+       for (i = 1; i <= 11; i++) {
+               (priv->rtllib->active_channel_map)[i] = 1;
+       }
+       (priv->rtllib->active_channel_map)[12] = 2;
+       (priv->rtllib->active_channel_map)[13] = 2;
+
+       return 0;
+}
+
+void check_rfctrl_gpio_timer(unsigned long data);
+short rtl8192_init(struct net_device *dev)
+{              
+       struct r8192_priv *priv = rtllib_priv(dev);
+
+       memset(&(priv->stats),0,sizeof(struct Stats));
+#ifdef CONFIG_MP
+       rtl8192_init_mp(dev);
+#endif 
+       
+       rtl8192_init_priv_handler(dev);
+       rtl8192_init_priv_variable(dev);
+       rtl8192_init_priv_lock(priv);
+       rtl8192_init_priv_task(dev);
+       priv->ops->get_eeprom_size(dev);
+       priv->ops->init_adapter_variable(dev);
+       rtl8192_get_channel_map(dev);
+
+#if defined CONFIG_CRDA && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30))
+       /* channel map setting for the cfg80211 style */
+       {
+               struct r8192_priv* priv = rtllib_priv(dev);
+               rtllib_set_geo(priv);   
+       }
+
+#endif
+
+       init_hal_dm(dev);
+
+#if defined RTL8192SE || defined RTL8192CE
+       InitSwLeds(dev);
+#endif
+       setup_timer(&priv->watch_dog_timer,
+                   watch_dog_timer_callback, 
+                   (unsigned long) dev);
+
+       setup_timer(&priv->gpio_polling_timer, 
+                   check_rfctrl_gpio_timer,
+                   (unsigned long)dev);
+
+       rtl8192_irq_disable(dev);
+#if defined(IRQF_SHARED)
+        if (request_irq(dev->irq, (void*)rtl8192_interrupt_rsl, IRQF_SHARED, dev->name, dev)) 
+#else
+        if (request_irq(dev->irq, (void *)rtl8192_interrupt_rsl, SA_SHIRQ, dev->name, dev)) 
+#endif
+       {
+               printk("Error allocating IRQ %d",dev->irq);
+               return -1;
+       } else { 
+               priv->irq=dev->irq;
+               RT_TRACE(COMP_INIT, "IRQ %d\n",dev->irq);
+       }
+
+       if (rtl8192_pci_initdescring(dev) != 0) { 
+               printk("Endopoints initialization failed");
+               return -1;
+       }
+
+       return 0;
+}
+
+/***************************************************************************
+    -------------------------------WATCHDOG STUFF---------------------------
+***************************************************************************/
+short rtl8192_is_tx_queue_empty(struct net_device *dev)
+{
+       int i=0;
+       struct r8192_priv *priv = rtllib_priv(dev);
+       for (i=0; i<=MGNT_QUEUE; i++)
+       {
+               if ((i== TXCMD_QUEUE) || (i == HCCA_QUEUE) )
+                       continue;
+               if (skb_queue_len(&(&priv->tx_ring[i])->queue) > 0){
+                       printk("===>tx queue is not empty:%d, %d\n", i, skb_queue_len(&(&priv->tx_ring[i])->queue));
+                       return 0;
+               }
+       }
+       return 1;
+}
+
+RESET_TYPE
+rtl819x_TxCheckStuck(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       u8                      QueueID;
+       u8                      ResetThreshold = NIC_SEND_HANG_THRESHOLD_POWERSAVE;
+       bool                    bCheckFwTxCnt = false;
+       struct rtl8192_tx_ring  *ring = NULL;
+       struct sk_buff* skb = NULL;
+       cb_desc * tcb_desc = NULL;
+       unsigned long flags = 0;
+       
+#if 0
+       switch (priv->rtllib->dot11PowerSaveMode)
+       {
+               case eActive:           
+                       ResetThreshold = NIC_SEND_HANG_THRESHOLD_NORMAL;
+                       break;
+               case eMaxPs:            
+                       ResetThreshold = NIC_SEND_HANG_THRESHOLD_POWERSAVE;
+                       break;
+               case eFastPs:   
+                       ResetThreshold = NIC_SEND_HANG_THRESHOLD_POWERSAVE;
+                       break;
+               default:
+                       break;
+       }
+#else
+       switch (priv->rtllib->ps)
+       {
+               case RTLLIB_PS_DISABLED:                
+                       ResetThreshold = NIC_SEND_HANG_THRESHOLD_NORMAL;
+                       break;
+               case (RTLLIB_PS_MBCAST|RTLLIB_PS_UNICAST):              
+                       ResetThreshold = NIC_SEND_HANG_THRESHOLD_POWERSAVE;
+                       break;
+               default:
+                       ResetThreshold = NIC_SEND_HANG_THRESHOLD_POWERSAVE;
+                       break;
+       }
+#endif
+       spin_lock_irqsave(&priv->irq_th_lock,flags);
+       for(QueueID = 0; QueueID < MAX_TX_QUEUE; QueueID++)
+       {
+
+       
+               if(QueueID == TXCMD_QUEUE)
+                       continue;
+#ifdef RTL8192CE
+               if((QueueID == 8) || (QueueID == 5))
+                       continue;
+#endif
+
+               ring = &priv->tx_ring[QueueID];
+
+               if(skb_queue_len(&ring->queue) == 0)
+                       continue;
+               else
+               {
+                       skb = (&ring->queue)->next;
+                       tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE);
+                       tcb_desc->nStuckCount++;
+                       bCheckFwTxCnt = true;
+#if defined RTL8192SE || defined RTL8192CE
+                       if(tcb_desc->nStuckCount > ResetThreshold)
+                       {
+                               RT_TRACE( COMP_RESET, "TxCheckStuck(): Need silent reset because nStuckCount > ResetThreshold.\n" );
+                                spin_unlock_irqrestore(&priv->irq_th_lock,flags);                              
+                               return RESET_TYPE_SILENT;
+                       }
+                       bCheckFwTxCnt = false;
+                       #endif
+               }
+       }
+       spin_unlock_irqrestore(&priv->irq_th_lock,flags);
+       
+       if(bCheckFwTxCnt) {
+               if (priv->ops->TxCheckStuckHandler(dev))
+               {
+                       RT_TRACE(COMP_RESET, "TxCheckStuck(): Fw indicates no Tx condition! \n");
+                       return RESET_TYPE_SILENT;
+               }
+       }
+
+       return RESET_TYPE_NORESET;
+}
+
+RESET_TYPE rtl819x_RxCheckStuck(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+
+       if(priv->ops->RxCheckStuckHandler(dev))
+       {
+               RT_TRACE(COMP_RESET, "RxStuck Condition\n");
+               return RESET_TYPE_SILENT;
+       }
+       
+       return RESET_TYPE_NORESET;
+}
+
+RESET_TYPE
+rtl819x_ifcheck_resetornot(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       RESET_TYPE      TxResetType = RESET_TYPE_NORESET;
+       RESET_TYPE      RxResetType = RESET_TYPE_NORESET;
+       RT_RF_POWER_STATE       rfState;
+       
+       rfState = priv->rtllib->eRFPowerState;
+       
+       if(rfState == eRfOn)
+       TxResetType = rtl819x_TxCheckStuck(dev);
+       
+       if( rfState == eRfOn && 
+           (priv->rtllib->iw_mode == IW_MODE_INFRA) && 
+           (priv->rtllib->state == RTLLIB_LINKED)) {
+
+               RxResetType = rtl819x_RxCheckStuck(dev);
+       }
+       
+       RT_TRACE(COMP_RESET,"%s(): TxResetType is %d, RxResetType is %d\n",__FUNCTION__,TxResetType,RxResetType);
+       if(TxResetType==RESET_TYPE_NORMAL || RxResetType==RESET_TYPE_NORMAL){
+               printk("%s(): TxResetType is %d, RxResetType is %d\n",__FUNCTION__,TxResetType,RxResetType);
+               return RESET_TYPE_NORMAL;
+       } else if(TxResetType==RESET_TYPE_SILENT || RxResetType==RESET_TYPE_SILENT){
+               printk("%s(): TxResetType is %d, RxResetType is %d\n",__FUNCTION__,TxResetType,RxResetType);
+               return RESET_TYPE_SILENT;
+       } else {
+               return RESET_TYPE_NORESET;
+       }
+
+}
+
+void rtl819x_ifsilentreset(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       u8      reset_times = 0;
+       int reset_status = 0;
+       struct rtllib_device *ieee = priv->rtllib;
+       unsigned long flag;
+#ifdef _RTL8192_EXT_PATCH_
+       bool wlansilentreset = false,meshsilentreset = false;
+       u8 backup_channel_wlan = 1,backup_channel_mesh = 1;
+       u8 updateBW = 0;
+       u8 bserverHT = 0;
+       int i=0;
+#endif 
+               
+       if(priv->ResetProgress==RESET_TYPE_NORESET) {
+
+               RT_TRACE(COMP_RESET,"=========>Reset progress!! \n");
+               
+               priv->ResetProgress = RESET_TYPE_SILENT;
+               spin_lock_irqsave(&priv->rf_ps_lock,flag);
+               if(priv->RFChangeInProgress)
+               {
+                       spin_unlock_irqrestore(&priv->rf_ps_lock,flag);
+                       goto END;
+               }
+               priv->RFChangeInProgress = true;
+               priv->bResetInProgress = true;
+               spin_unlock_irqrestore(&priv->rf_ps_lock,flag);
+RESET_START:   
+               down(&priv->wx_sem);    
+#ifdef ENABLE_LPS
+                if(priv->rtllib->state == RTLLIB_LINKED)
+                    LeisurePSLeave(dev);
+#endif
+#ifdef _RTL8192_EXT_PATCH_
+               if((priv->up == 0) && (priv->mesh_up == 0))
+#else
+               if(priv->up == 0) 
+#endif
+               {
+                       RT_TRACE(COMP_ERR,"%s():the driver is not up! return\n",__FUNCTION__);
+                       up(&priv->wx_sem);
+                       return ;
+               }
+#ifdef _RTL8192_EXT_PATCH_
+               if(priv->up == 1)
+               {
+                       printk("================>wlansilentreset is true\n");
+                       wlansilentreset = true;
+                       priv->up = 0;
+               }
+               if(priv->mesh_up == 1)
+               {
+                       printk("================>meshsilentreset is true\n");
+                       meshsilentreset = true;
+                       priv->mesh_up = 0;
+               }
+#else
+               priv->up = 0;
+#endif
+               RT_TRACE(COMP_RESET,"%s():======>start to down the driver\n",__FUNCTION__);
+               mdelay(1000);
+               RT_TRACE(COMP_RESET,"%s():111111111111111111111111======>start to down the driver\n",__FUNCTION__);
+               if(!netif_queue_stopped(dev))
+                       netif_stop_queue(dev);
+#if !(defined RTL8192SE || defined RTL8192CE)
+               dm_backup_dynamic_mechanism_state(dev);
+#endif
+               rtl8192_irq_disable(dev);
+               del_timer_sync(&priv->watch_dog_timer); 
+               rtl8192_cancel_deferred_work(priv);
+               deinit_hal_dm(dev);
+               rtllib_stop_scan_syncro(ieee);
+#ifdef _RTL8192_EXT_PATCH_
+               backup_channel_wlan = ieee->current_network.channel;
+               backup_channel_mesh = ieee->current_mesh_network.channel;
+               if((ieee->state == RTLLIB_LINKED) && ((ieee->iw_mode == IW_MODE_INFRA) || (ieee->iw_mode == IW_MODE_ADHOC)))
+               {
+                       printk("====>down, infra or adhoc\n");
+                       SEM_DOWN_IEEE_WX(&ieee->wx_sem);
+                       printk("ieee->state is RTLLIB_LINKED\n");
+                       rtllib_stop_send_beacons(priv->rtllib);
+                       del_timer_sync(&ieee->associate_timer);
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) 
+                       cancel_delayed_work(&ieee->associate_retry_wq); 
+#endif 
+                       rtllib_stop_scan(ieee);
+                       netif_carrier_off(dev);
+                       SEM_UP_IEEE_WX(&ieee->wx_sem);
+               }
+               else if((ieee->state == RTLLIB_LINKED) && (ieee->iw_mode == IW_MODE_MESH) && (!ieee->only_mesh))
+               {
+                       printk("====>down, wlan server\n");
+                       SEM_DOWN_IEEE_WX(&ieee->wx_sem);
+                       printk("ieee->state is RTLLIB_LINKED\n");
+                       rtllib_stop_send_beacons(priv->rtllib);
+                       del_timer_sync(&ieee->associate_timer);
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) 
+                       cancel_delayed_work(&ieee->associate_retry_wq); 
+#endif 
+                       rtllib_stop_scan(ieee);
+                       netif_carrier_off(dev);
+                       SEM_UP_IEEE_WX(&ieee->wx_sem);
+                       if(priv->mshobj->ext_patch_rtllib_stop_protocol)
+                               priv->mshobj->ext_patch_rtllib_stop_protocol(ieee,1);
+               }
+               else if((ieee->iw_mode == IW_MODE_MESH) && (!ieee->only_mesh))
+               {
+                       printk("====>down, eth0 server\n");
+                       if(priv->mshobj->ext_patch_rtllib_stop_protocol)
+                               priv->mshobj->ext_patch_rtllib_stop_protocol(ieee,1);
+               }
+               else if((ieee->iw_mode == IW_MODE_MESH) && (ieee->only_mesh))
+               {
+                       printk("====>down, p2p or client\n");
+                       if(priv->mshobj->ext_patch_rtllib_stop_protocol)
+                               priv->mshobj->ext_patch_rtllib_stop_protocol(ieee,1);
+               }
+               else{
+                       printk("====>down, no link\n");
+                       printk("ieee->state is NOT LINKED\n");
+                       rtllib_softmac_stop_protocol(priv->rtllib,0,true);              
+               }
+#else
+               if(ieee->state == RTLLIB_LINKED)
+               {
+                       SEM_DOWN_IEEE_WX(&ieee->wx_sem);
+                       printk("ieee->state is RTLLIB_LINKED\n");
+                       rtllib_stop_send_beacons(priv->rtllib);
+                       del_timer_sync(&ieee->associate_timer);
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) 
+                       cancel_delayed_work(&ieee->associate_retry_wq); 
+#endif 
+                       rtllib_stop_scan(ieee);
+                       netif_carrier_off(dev);
+                       SEM_UP_IEEE_WX(&ieee->wx_sem);
+               }
+               else{
+                       printk("ieee->state is NOT LINKED\n");
+                       rtllib_softmac_stop_protocol(priv->rtllib,true);                
+               }
+#endif
+#ifdef RTL8190P
+               priv->ops->stop_adapter(dev, true);
+#endif
+               up(&priv->wx_sem);
+               RT_TRACE(COMP_RESET,"%s():<==========down process is finished\n",__FUNCTION__); 
+               RT_TRACE(COMP_RESET,"%s():===========>start to up the driver\n",__FUNCTION__);
+#ifdef _RTL8192_EXT_PATCH_
+               if(wlansilentreset == true){
+                       reset_status = _rtl8192_up(dev,true);
+               }
+               if(meshsilentreset == true)
+                       reset_status = meshdev_up(ieee->meshdev,true);
+#else
+               reset_status = _rtl8192_up(dev);
+#endif         
+               RT_TRACE(COMP_RESET,"%s():<===========up process is finished\n",__FUNCTION__);
+               if(reset_status == -1)
+               {
+                       if(reset_times < 3)
+                       {
+                               reset_times++;
+                               goto RESET_START;
+                       }
+                       else
+                       {
+                               RT_TRACE(COMP_ERR," ERR!!! %s():  Reset Failed!!\n",__FUNCTION__);
+                       }
+               }
+               ieee->is_silent_reset = 1;
+               spin_lock_irqsave(&priv->rf_ps_lock,flag);
+               priv->RFChangeInProgress = false;
+               spin_unlock_irqrestore(&priv->rf_ps_lock,flag);
+               EnableHWSecurityConfig8192(dev);
+#ifdef _RTL8192_EXT_PATCH_
+               ieee->current_network.channel = backup_channel_wlan;
+               ieee->current_mesh_network.channel = backup_channel_mesh;
+#endif
+               if(ieee->state == RTLLIB_LINKED && ieee->iw_mode == IW_MODE_INFRA)
+               {
+                       ieee->set_chan(ieee->dev, ieee->current_network.channel);
+               
+                       queue_work_rsl(ieee->wq, &ieee->associate_complete_wq);
+       
+               }
+               else if(ieee->state == RTLLIB_LINKED && ieee->iw_mode == IW_MODE_ADHOC)
+               {
+                       ieee->set_chan(ieee->dev, ieee->current_network.channel);
+                       ieee->link_change(ieee->dev);
+       
+                       notify_wx_assoc_event(ieee);
+       
+                       rtllib_start_send_beacons(ieee);
+       
+                       if (ieee->data_hard_resume)
+                               ieee->data_hard_resume(ieee->dev);
+                       netif_carrier_on(ieee->dev);
+               }
+#ifdef _RTL8192_EXT_PATCH_
+               else if((ieee->state == RTLLIB_LINKED) && (ieee->iw_mode == IW_MODE_MESH) && (!ieee->only_mesh))
+               {       
+                       printk("===>up, wlan0 server\n");
+                       ieee->set_chan(ieee->dev, ieee->current_network.channel);
+               
+                       queue_work_rsl(ieee->wq, &ieee->associate_complete_wq);
+                       if (ieee->current_mesh_network.beacon_interval == 0)
+                               ieee->current_mesh_network.beacon_interval = 100;
+                       ieee->link_change(ieee->dev);
+                       if(priv->mshobj->ext_patch_rtllib_start_protocol)
+                               priv->mshobj->ext_patch_rtllib_start_protocol(ieee);
+               }
+               else if((ieee->iw_mode == IW_MODE_MESH) && (!ieee->only_mesh))
+               {
+                       printk("===>up, eth0 server\n");
+                       if (ieee->current_mesh_network.beacon_interval == 0)
+                               ieee->current_mesh_network.beacon_interval = 100;
+                       ieee->link_change(ieee->dev);
+                       if(priv->mshobj->ext_patch_rtllib_start_protocol)
+                               priv->mshobj->ext_patch_rtllib_start_protocol(ieee);
+                       ieee->current_network.channel = ieee->current_mesh_network.channel; 
+                       if(ieee->pHTInfo->bCurBW40MHz)
+                               HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20_40, (ieee->current_mesh_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER);  
+                       else
+                               HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, (ieee->current_mesh_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER);  
+               }
+               else if((ieee->iw_mode == IW_MODE_MESH) && (ieee->only_mesh))
+               {
+                       printk("===>up, p2p or client\n");
+                       if (ieee->current_mesh_network.beacon_interval == 0)
+                               ieee->current_mesh_network.beacon_interval = 100;
+                       ieee->link_change(ieee->dev);
+                       if(priv->mshobj->ext_patch_rtllib_start_protocol)
+                               priv->mshobj->ext_patch_rtllib_start_protocol(ieee);
+                       if(ieee->p2pmode)
+                       {
+                               ieee->current_network.channel = ieee->current_mesh_network.channel; 
+                               if(ieee->pHTInfo->bCurBW40MHz)
+                                       HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20_40, (ieee->current_mesh_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER);  
+                               else
+                                       HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, (ieee->current_mesh_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER);  
+                       }
+                       else
+                       {
+                               updateBW=priv->mshobj->ext_patch_r819x_wx_update_beacon(dev,&bserverHT);
+                               printk("$$$$$$ Cur_networ.chan=%d, cur_mesh_net.chan=%d,bserverHT=%d\n", ieee->current_network.channel,ieee->current_mesh_network.channel,bserverHT);
+                               if(updateBW == 1)
+                               {
+                                       if(bserverHT == 0)
+                                       {
+                                               printk("===>server is not HT supported,set 20M\n");
+                                               HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, HT_EXTCHNL_OFFSET_NO_EXT);  
+                                       }
+                                       else
+                                       {
+                                               printk("===>updateBW is 1,bCurBW40MHz is %d,ieee->serverExtChlOffset is %d\n",ieee->pHTInfo->bCurBW40MHz,ieee->serverExtChlOffset);             
+                                               if(ieee->pHTInfo->bCurBW40MHz)
+                                                       HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20_40, ieee->serverExtChlOffset);  
+                                               else
+                                                       HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, ieee->serverExtChlOffset);  
+                                       }
+                               }
+                               else
+                               {
+                                       printk("===>there is no same hostname server, ERR!!!\n");
+                               }
+                       }
+                               
+               }
+#endif
+#ifdef TO_DO_LIST
+               else if(Adapter->MgntInfo.mActingAsAp)
+               {
+                       AP_StartApRequest((PVOID)Adapter);
+                       Adapter->HalFunc.ResetHalRATRTableHandler(Adapter);
+               }
+#endif
+               
+#ifdef TO_DO_LIST
+               if(Adapter->MgntInfo.mActingAsAp)
+                       AP_CamRestoreAllEntry(Adapter);
+               else
+#endif
+#ifdef _RTL8192_EXT_PATCH_
+               if(wlansilentreset){
+                       printk("==========>wlansilentreset\n");
+                       CamRestoreEachIFEntry(dev,0);
+               }
+               if(meshsilentreset){
+                       printk("==========>meshsilentreset\n");
+                       CamRestoreEachIFEntry(dev,1);
+                       for(i=0;i<8;i++)
+                       {
+                               if(ieee->swmeshratrtable[i].bused == true)
+                               {
+                                       printk("====>restore ratr table: index=%d,value=%x\n",i,ieee->swmeshratrtable[i].ratr_value);
+                                       write_nic_dword(dev,ARFR0+i*4,ieee->swmeshratrtable[i].ratr_value);
+                               }
+                       }
+               }
+#else
+               CamRestoreAllEntry(dev);
+#endif
+#if !(defined RTL8192SE || defined RTL8192CE)
+               dm_restore_dynamic_mechanism_state(dev);
+#endif
+END:
+               priv->ResetProgress = RESET_TYPE_NORESET;
+               priv->reset_count++;
+
+               priv->bForcedSilentReset =false;
+               priv->bResetInProgress = false;
+
+#ifdef RTL8190P
+               write_nic_byte(dev, UFWP, 1);   
+#endif
+               RT_TRACE(COMP_RESET, "Reset finished!! ====>[%d]\n", priv->reset_count);
+       }
+}
+
+void rtl819x_update_rxcounts(struct r8192_priv *priv,
+                            u32 *TotalRxBcnNum,
+                            u32 *TotalRxDataNum)       
+{
+       u16                     SlotIndex;
+       u8                      i;
+
+       *TotalRxBcnNum = 0;
+       *TotalRxDataNum = 0;
+
+       SlotIndex = (priv->rtllib->LinkDetectInfo.SlotIndex++)%(priv->rtllib->LinkDetectInfo.SlotNum);
+       priv->rtllib->LinkDetectInfo.RxBcnNum[SlotIndex] = priv->rtllib->LinkDetectInfo.NumRecvBcnInPeriod;
+       priv->rtllib->LinkDetectInfo.RxDataNum[SlotIndex] = priv->rtllib->LinkDetectInfo.NumRecvDataInPeriod;
+       for (i = 0; i < priv->rtllib->LinkDetectInfo.SlotNum; i++) {    
+               *TotalRxBcnNum += priv->rtllib->LinkDetectInfo.RxBcnNum[i];
+               *TotalRxDataNum += priv->rtllib->LinkDetectInfo.RxDataNum[i];
+       }
+}
+
+#ifdef _RTL8192_EXT_PATCH_
+static void MgntLinkKeepAlive(struct r8192_priv *priv )
+{
+       if (priv->keepAliveLevel == 0)
+               return;
+
+       if((priv->rtllib->state == RTLLIB_LINKED) && (!priv->rtllib->is_roaming))
+       {
+               
+               if ( (priv->keepAliveLevel== 2) ||
+                       (priv->rtllib->LinkDetectInfo.LastNumTxUnicast == priv->NumTxUnicast && 
+                       priv->rtllib->LinkDetectInfo.NumRxUnicastOkInPeriod == 0)
+                       )
+               {
+                       priv->rtllib->LinkDetectInfo.IdleCount++;       
+
+                       if(priv->rtllib->LinkDetectInfo.IdleCount >= ((KEEP_ALIVE_INTERVAL / RT_CHECK_FOR_HANG_PERIOD)-1) )
+                       {
+                               priv->rtllib->LinkDetectInfo.IdleCount = 0;
+                               rtllib_sta_ps_send_null_frame(priv->rtllib, false);
+                       }
+               }
+               else
+               {
+                       priv->rtllib->LinkDetectInfo.IdleCount = 0;
+               }
+               priv->rtllib->LinkDetectInfo.LastNumTxUnicast = priv->NumTxUnicast; 
+               priv->rtllib->LinkDetectInfo.LastNumRxUnicast = priv->rtllib->LinkDetectInfo.NumRxUnicastOkInPeriod;
+       }
+}
+#endif
+
+void   rtl819x_watchdog_wqcallback(void *data)
+{
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20))
+       struct r8192_priv *priv = container_of_dwork_rsl(data,struct r8192_priv,watch_dog_wq);
+       struct net_device *dev = priv->rtllib->dev;
+#else
+       struct net_device *dev = (struct net_device *)data;
+       struct r8192_priv *priv = rtllib_priv(dev);
+#endif
+       struct rtllib_device* ieee = priv->rtllib;
+       RESET_TYPE      ResetType = RESET_TYPE_NORESET;
+       static u8       check_reset_cnt = 0;
+#ifdef _RTL8192_EXT_PATCH_
+       static u8       last_reset_count = 0;
+#endif
+       unsigned long flags;
+       PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl));
+       bool bBusyTraffic = false;
+#ifdef ENABLE_LPS
+       bool bEnterPS = false;
+#endif
+#ifdef _RTL8192_EXT_PATCH_
+       if(((!priv->up) && (!priv->mesh_up)) || (priv->bHwRadioOff == true))
+#else
+       if((!priv->up) || (priv->bHwRadioOff == true))
+#endif
+               return;
+
+       if(priv->rtllib->state >= RTLLIB_LINKED)
+       {
+               if(priv->rtllib->CntAfterLink<2)
+                       priv->rtllib->CntAfterLink++;
+       }
+       else
+       {
+               priv->rtllib->CntAfterLink = 0;
+       }
+       
+       hal_dm_watchdog(dev);
+
+#ifdef ENABLE_IPS
+       if(rtllib_act_scanning(priv->rtllib,false) == false){
+               if((ieee->iw_mode == IW_MODE_INFRA) && (ieee->state == RTLLIB_NOLINK) &&\
+                   (ieee->eRFPowerState == eRfOn)&&!ieee->is_set_key &&\
+                   (!ieee->proto_stoppping) && !ieee->wx_set_enc
+#ifdef CONFIG_RTLWIFI_DEBUGFS      
+                   && (!priv->debug->hw_holding)
+#endif             
+                ){
+                       if(ieee->PowerSaveControl.ReturnPoint == IPS_CALLBACK_NONE){
+                               RT_TRACE(COMP_PS, "====================>haha:IPSEnter()\n");
+                               IPSEnter(dev);  
+                       }
+               }
+       }
+#endif
+#ifdef _RTL8192_EXT_PATCH_
+#endif
+       {
+               if((ieee->state == RTLLIB_LINKED) && (ieee->iw_mode == IW_MODE_INFRA))
+               {
+                       if(     ieee->LinkDetectInfo.NumRxOkInPeriod> 100 ||
+                               ieee->LinkDetectInfo.NumTxOkInPeriod> 100 ) {
+                               bBusyTraffic = true;
+                       }
+                       
+#ifdef ENABLE_LPS
+                       if(     ((ieee->LinkDetectInfo.NumRxUnicastOkInPeriod + ieee->LinkDetectInfo.NumTxOkInPeriod) > 8 ) ||
+                               (ieee->LinkDetectInfo.NumRxUnicastOkInPeriod > 2) )
+                       {
+                               bEnterPS= false;
+                       }
+                       else
+                       {
+                               bEnterPS= true;
+                       }
+
+                       if (ieee->current_network.beacon_interval < 95)
+                               bEnterPS= false;
+
+                       if(bEnterPS)
+                       {
+                               LeisurePSEnter(dev);
+                       }
+                       else
+                       {
+                               LeisurePSLeave(dev);
+                       }
+#endif
+               
+               }
+               else
+               {
+#ifdef ENABLE_LPS
+                       RT_TRACE(COMP_LPS,"====>no link LPS leave\n");
+                       LeisurePSLeave(dev);
+#endif
+               }
+
+              ieee->LinkDetectInfo.NumRxOkInPeriod = 0;
+              ieee->LinkDetectInfo.NumTxOkInPeriod = 0;
+              ieee->LinkDetectInfo.NumRxUnicastOkInPeriod = 0;
+              ieee->LinkDetectInfo.bBusyTraffic = bBusyTraffic;
+       }
+
+       {
+#if defined RTL8192SE 
+               if(priv->rtllib->iw_mode == IW_MODE_ADHOC)
+                       IbssAgeFunction(ieee);
+#endif
+                       
+               if(ieee->state == RTLLIB_LINKED && ieee->iw_mode == IW_MODE_INFRA)
+               {
+                       u32     TotalRxBcnNum = 0;
+                       u32     TotalRxDataNum = 0;     
+
+                       rtl819x_update_rxcounts(priv, &TotalRxBcnNum, &TotalRxDataNum);
+
+                       if((TotalRxBcnNum+TotalRxDataNum) == 0)
+                               priv->check_roaming_cnt ++;
+                       else
+                               priv->check_roaming_cnt = 0;
+
+
+                       if(priv->check_roaming_cnt > 2)
+                       {
+                               if( ieee->eRFPowerState == eRfOff)
+                                       RT_TRACE(COMP_ERR,"========>%s()\n",__FUNCTION__);
+
+                               printk("===>%s(): AP is power off,chan:%d, connect another one\n",__FUNCTION__, priv->chan);
+
+                               ieee->state = RTLLIB_ASSOCIATING;
+
+                               RemovePeerTS(priv->rtllib,priv->rtllib->current_network.bssid);
+                               ieee->is_roaming = true;
+                               ieee->is_set_key = false;
+                                ieee->link_change(dev);
+                               if(ieee->LedControlHandler)
+                                  ieee->LedControlHandler(ieee->dev, LED_CTL_START_TO_LINK); 
+                               queue_delayed_work_rsl(ieee->wq, &ieee->associate_procedure_wq, 0);
+
+                               priv->check_roaming_cnt = 0;
+                       }
+               }
+             ieee->LinkDetectInfo.NumRecvBcnInPeriod=0;
+              ieee->LinkDetectInfo.NumRecvDataInPeriod=0;
+               
+       }
+
+       spin_lock_irqsave(&priv->tx_lock,flags);
+       if((check_reset_cnt++ >= 3) && (!ieee->is_roaming) && 
+                       (!priv->RFChangeInProgress) && (!pPSC->bSwRfProcessing))
+       {
+               ResetType = rtl819x_ifcheck_resetornot(dev);
+#ifdef _RTL8192_EXT_PATCH_
+               if(check_reset_cnt == 0xFF)
+#endif
+               check_reset_cnt = 3;
+       }
+       spin_unlock_irqrestore(&priv->tx_lock,flags);
+       
+       if(!priv->bDisableNormalResetCheck && ResetType == RESET_TYPE_NORMAL)
+       {
+               priv->ResetProgress = RESET_TYPE_NORMAL;
+               RT_TRACE(COMP_RESET,"%s(): NOMAL RESET\n",__FUNCTION__);
+               return;
+       }
+
+#ifdef _RTL8192_EXT_PATCH_
+       if( ((priv->force_reset) || (!priv->bDisableNormalResetCheck && ResetType==RESET_TYPE_SILENT))) 
+       {
+                       if(check_reset_cnt != (last_reset_count + 1)){
+                               printk("=======================>%s: Resume firmware\n", __FUNCTION__);
+                               r8192se_resume_firm(dev);       
+                               last_reset_count = check_reset_cnt;
+                       }else{
+                               printk("=======================>%s: Silent Reset\n", __FUNCTION__);
+                               rtl819x_ifsilentreset(dev);
+                       }
+       }
+#else
+       if( ((priv->force_reset) || (!priv->bDisableNormalResetCheck && ResetType==RESET_TYPE_SILENT))) 
+       {
+               rtl819x_ifsilentreset(dev);
+       }
+#endif
+       priv->force_reset = false;
+       priv->bForcedSilentReset = false;
+       priv->bResetInProgress = false;
+       RT_TRACE(COMP_TRACE, " <==RtUsbCheckForHangWorkItemCallback()\n");
+       
+}
+
+void watch_dog_timer_callback(unsigned long data)
+{
+       struct r8192_priv *priv = rtllib_priv((struct net_device *) data);
+       queue_delayed_work_rsl(priv->priv_wq,&priv->watch_dog_wq,0);
+       mod_timer(&priv->watch_dog_timer, jiffies + MSECS(RTLLIB_WATCH_DOG_TIME));
+}
+
+/****************************************************************************
+ ---------------------------- NIC TX/RX STUFF---------------------------
+*****************************************************************************/
+void rtl8192_rx_enable(struct net_device *dev)
+{
+    struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       priv->ops->rx_enable(dev);
+}
+
+void rtl8192_tx_enable(struct net_device *dev)
+{
+    struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       
+       priv->ops->tx_enable(dev);
+
+    rtllib_reset_queue(priv->rtllib);
+}
+
+
+static void rtl8192_free_rx_ring(struct net_device *dev)
+{
+    struct r8192_priv *priv = rtllib_priv(dev);
+       int i,rx_queue_idx;
+
+       for(rx_queue_idx = 0; rx_queue_idx < MAX_RX_QUEUE; rx_queue_idx ++){
+    for (i = 0; i < priv->rxringcount; i++) {
+                       struct sk_buff *skb = priv->rx_buf[rx_queue_idx][i];
+        if (!skb)
+            continue;
+
+        pci_unmap_single(priv->pdev,
+                *((dma_addr_t *)skb->cb),
+                priv->rxbuffersize, PCI_DMA_FROMDEVICE);
+        kfree_skb(skb);
+    }
+
+               pci_free_consistent(priv->pdev, sizeof(*priv->rx_ring[rx_queue_idx]) * priv->rxringcount,
+                       priv->rx_ring[rx_queue_idx], priv->rx_ring_dma[rx_queue_idx]);
+               priv->rx_ring[rx_queue_idx] = NULL;
+       }
+}
+
+static void rtl8192_free_tx_ring(struct net_device *dev, unsigned int prio)
+{
+    struct r8192_priv *priv = rtllib_priv(dev);
+    struct rtl8192_tx_ring *ring = &priv->tx_ring[prio];
+
+    while (skb_queue_len(&ring->queue)) {
+        tx_desc *entry = &ring->desc[ring->idx];
+        struct sk_buff *skb = __skb_dequeue(&ring->queue);
+
+        pci_unmap_single(priv->pdev, le32_to_cpu(entry->TxBuffAddr),
+                skb->len, PCI_DMA_TODEVICE);
+        kfree_skb(skb);
+        ring->idx = (ring->idx + 1) % ring->entries;
+    }
+
+    pci_free_consistent(priv->pdev, sizeof(*ring->desc)*ring->entries,
+            ring->desc, ring->dma);
+    ring->desc = NULL;
+}
+
+void rtl8192_data_hard_stop(struct net_device *dev)
+{
+       #if 0
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       priv->dma_poll_mask |= (1<<TX_DMA_STOP_LOWPRIORITY_SHIFT);
+       rtl8192_set_mode(dev,EPROM_CMD_CONFIG);
+       write_nic_byte(dev,TX_DMA_POLLING,priv->dma_poll_mask);
+       rtl8192_set_mode(dev,EPROM_CMD_NORMAL);
+       #endif
+}
+
+
+void rtl8192_data_hard_resume(struct net_device *dev)
+{
+       #if 0
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       priv->dma_poll_mask &= ~(1<<TX_DMA_STOP_LOWPRIORITY_SHIFT);
+       rtl8192_set_mode(dev,EPROM_CMD_CONFIG);
+       write_nic_byte(dev,TX_DMA_POLLING,priv->dma_poll_mask);
+       rtl8192_set_mode(dev,EPROM_CMD_NORMAL);
+       #endif
+}
+
+void rtl8192_hard_data_xmit(struct sk_buff *skb, struct net_device *dev, int rate)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       int ret;
+       cb_desc *tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE);
+       u8 queue_index = tcb_desc->queue_index;
+       
+#ifdef _RTL8192_EXT_PATCH_
+       if((priv->bHwRadioOff == true)||((!priv->up)&& (!priv->mesh_up)))
+#else
+       if((priv->bHwRadioOff == true) || (!priv->up) || priv->bResetInProgress || priv->rtllib->eRFPowerState != eRfOn)
+#endif
+       {
+               kfree_skb(skb);
+               return; 
+       }
+       
+       assert(queue_index != TXCMD_QUEUE);
+
+
+        memcpy((unsigned char *)(skb->cb),&dev,sizeof(dev));
+#if 0
+       tcb_desc->RATRIndex = 7;
+       tcb_desc->bTxDisableRateFallBack = 1;
+       tcb_desc->bTxUseDriverAssingedRate = 1;
+       tcb_desc->bTxEnableFwCalcDur = 1;
+#endif
+       skb_push(skb, priv->rtllib->tx_headroom);
+       ret = rtl8192_tx(dev, skb);
+       if(ret != 0) {
+               kfree_skb(skb);
+       };
+
+       if(queue_index!=MGNT_QUEUE) {
+       priv->rtllib->stats.tx_bytes+=(skb->len - priv->rtllib->tx_headroom);
+       priv->rtllib->stats.tx_packets++;
+       }
+
+
+       return;
+}
+
+int rtl8192_hard_start_xmit(struct sk_buff *skb,struct net_device *dev)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+
+       
+       int ret;
+        cb_desc *tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE);
+        u8 queue_index = tcb_desc->queue_index;
+
+        if(queue_index != TXCMD_QUEUE){
+#ifdef _RTL8192_EXT_PATCH_
+               if((priv->bHwRadioOff == true)||((!priv->up)&& (!priv->mesh_up)))
+#else
+               if((priv->bHwRadioOff == true) || (!priv->up) || priv->bResetInProgress || priv->rtllib->eRFPowerState != eRfOn)
+#endif
+               {
+                kfree_skb(skb);
+                return 0;      
+            }
+        }
+
+       
+        memcpy((unsigned char *)(skb->cb),&dev,sizeof(dev));
+       if(queue_index == TXCMD_QUEUE) {
+               rtl819xE_tx_cmd(dev, skb);
+               ret = 0;
+               return ret;
+       } else {
+               tcb_desc->RATRIndex = 7;
+               tcb_desc->bTxDisableRateFallBack = 1;
+               tcb_desc->bTxUseDriverAssingedRate = 1;
+               tcb_desc->bTxEnableFwCalcDur = 1;
+               skb_push(skb, priv->rtllib->tx_headroom);
+               ret = rtl8192_tx(dev, skb);
+               if(ret != 0) {
+                       kfree_skb(skb);
+               };
+       }
+       
+       
+       
+       return ret;
+
+}
+
+void rtl8192_tx_isr(struct net_device *dev, int prio)
+{
+    struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+
+    struct rtl8192_tx_ring *ring = &priv->tx_ring[prio];
+
+    while (skb_queue_len(&ring->queue)) {
+        tx_desc *entry = &ring->desc[ring->idx];
+        struct sk_buff *skb;
+
+        if(prio != BEACON_QUEUE) {
+            if(entry->OWN)
+                return;
+            ring->idx = (ring->idx + 1) % ring->entries;
+        }
+
+        skb = __skb_dequeue(&ring->queue);
+        pci_unmap_single(priv->pdev, le32_to_cpu(entry->TxBuffAddr),
+                skb->len, PCI_DMA_TODEVICE);
+
+        kfree_skb(skb);
+    }
+    if(prio == MGNT_QUEUE)
+             ;
+    if(prio != BEACON_QUEUE) {
+        tasklet_schedule(&priv->irq_tx_tasklet);
+    }
+
+}
+
+void rtl819xE_tx_cmd(struct net_device *dev, struct sk_buff *skb)
+{
+    struct r8192_priv *priv = rtllib_priv(dev);
+    struct rtl8192_tx_ring *ring;
+    tx_desc_cmd* entry;
+    unsigned int idx;
+    cb_desc *tcb_desc;
+    unsigned long flags;
+
+    spin_lock_irqsave(&priv->irq_th_lock,flags);
+    ring = &priv->tx_ring[TXCMD_QUEUE];
+
+    idx = (ring->idx + skb_queue_len(&ring->queue)) % ring->entries;
+    entry = (tx_desc_cmd*) &ring->desc[idx];
+
+    tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE);
+    
+    priv->ops->tx_fill_cmd_descriptor(dev, entry, tcb_desc, skb);
+
+    __skb_queue_tail(&ring->queue, skb);
+    spin_unlock_irqrestore(&priv->irq_th_lock,flags);
+
+#if !(defined RTL8192SE || defined RTL8192CE)
+    write_nic_byte(dev, TPPoll, TPPoll_CQ);
+#endif
+    return;
+}
+
+short rtl8192_tx(struct net_device *dev, struct sk_buff* skb)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtl8192_tx_ring  *ring;
+       unsigned long flags;
+       cb_desc *tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE);
+       tx_desc *pdesc = NULL;
+       struct rtllib_hdr_1addr * header = NULL;
+       u16 fc=0, type=0,stype=0;
+       bool  multi_addr=false,broad_addr=false,uni_addr=false;
+       u8*   pda_addr = NULL;
+       int   idx;
+       u32 fwinfo_size = 0;
+
+       if(priv->bdisable_nic){
+               RT_TRACE(COMP_ERR,"%s: ERR!! Nic is disabled! Can't tx packet len=%d qidx=%d!!!\n", __FUNCTION__, skb->len, tcb_desc->queue_index);
+                       return skb->len;
+       }
+
+       priv->rtllib->bAwakePktSent = true;
+       
+#if defined RTL8192SE || defined RTL8192CE
+       fwinfo_size = 0;
+#else
+       fwinfo_size = sizeof(TX_FWINFO_8190PCI);
+#endif
+
+       header = (struct rtllib_hdr_1addr *)(((u8*)skb->data) + fwinfo_size);
+       fc = header->frame_ctl;
+       type = WLAN_FC_GET_TYPE(fc);
+       stype = WLAN_FC_GET_STYPE(fc);
+       pda_addr = header->addr1;
+               
+       if(is_multicast_ether_addr(pda_addr))
+               multi_addr = true;
+       else if(is_broadcast_ether_addr(pda_addr))
+               broad_addr = true;
+       else {
+#ifdef _RTL8192_EXT_PATCH_
+               priv->NumTxUnicast++;
+#endif
+               uni_addr = true;
+       }
+               
+       if(uni_addr)
+               priv->stats.txbytesunicast += skb->len - fwinfo_size;
+       else if(multi_addr)
+               priv->stats.txbytesmulticast += skb->len - fwinfo_size;
+       else 
+               priv->stats.txbytesbroadcast += skb->len - fwinfo_size;
+
+       spin_lock_irqsave(&priv->irq_th_lock,flags);
+       ring = &priv->tx_ring[tcb_desc->queue_index];
+       if (tcb_desc->queue_index != BEACON_QUEUE) {
+               idx = (ring->idx + skb_queue_len(&ring->queue)) % ring->entries;
+       } else {
+               idx = 0;
+       }
+
+       pdesc = &ring->desc[idx];
+       if((pdesc->OWN == 1) && (tcb_desc->queue_index != BEACON_QUEUE)) {
+               RT_TRACE(COMP_ERR,"No more TX desc@%d, ring->idx = %d,idx = %d, skblen = 0x%x", \
+                           tcb_desc->queue_index,ring->idx, idx,skb->len);
+               spin_unlock_irqrestore(&priv->irq_th_lock,flags);
+               return skb->len;
+       } 
+               
+       if(tcb_desc->queue_index == MGNT_QUEUE)
+       {
+       }
+
+       if(type == RTLLIB_FTYPE_DATA){
+               if(priv->rtllib->LedControlHandler)
+                       priv->rtllib->LedControlHandler(dev, LED_CTL_TX);
+       }
+       priv->ops->tx_fill_descriptor(dev, pdesc, tcb_desc, skb);
+       __skb_queue_tail(&ring->queue, skb);
+       pdesc->OWN = 1;
+       spin_unlock_irqrestore(&priv->irq_th_lock,flags);
+       dev->trans_start = jiffies;
+       
+#ifdef _RTL8192_EXT_PATCH_
+       if(tcb_desc->queue_index != BEACON_QUEUE)
+#endif
+#ifdef RTL8192CE 
+       if(tcb_desc->queue_index == BEACON_QUEUE){
+               write_nic_word(dev, REG_PCIE_CTRL_REG, BIT4);
+       }else{
+               write_nic_word(dev, REG_PCIE_CTRL_REG, BIT0<<(tcb_desc->queue_index));
+       }
+#else
+       write_nic_word(dev,TPPoll,0x01<<tcb_desc->queue_index);
+#endif
+       return 0;       
+}
+
+short rtl8192_alloc_rx_desc_ring(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       rx_desc *entry = NULL;
+       int i, rx_queue_idx;
+
+       for(rx_queue_idx = 0; rx_queue_idx < MAX_RX_QUEUE; rx_queue_idx ++){
+               priv->rx_ring[rx_queue_idx] = pci_alloc_consistent(priv->pdev,
+               sizeof(*priv->rx_ring[rx_queue_idx]) * priv->rxringcount, &priv->rx_ring_dma[rx_queue_idx]);
+
+               if (!priv->rx_ring[rx_queue_idx] || (unsigned long)priv->rx_ring[rx_queue_idx] & 0xFF) {
+                       RT_TRACE(COMP_ERR,"Cannot allocate RX ring\n");
+                       return -ENOMEM;
+               }
+
+               memset(priv->rx_ring[rx_queue_idx], 0, sizeof(*priv->rx_ring[rx_queue_idx]) * priv->rxringcount);
+               priv->rx_idx[rx_queue_idx] = 0;
+
+               for (i = 0; i < priv->rxringcount; i++) {
+                       struct sk_buff *skb = dev_alloc_skb(priv->rxbuffersize);
+                       dma_addr_t *mapping;
+                       entry = &priv->rx_ring[rx_queue_idx][i];
+                       if (!skb)
+                               return 0;
+                       skb->dev = dev;
+                       priv->rx_buf[rx_queue_idx][i] = skb;
+                       mapping = (dma_addr_t *)skb->cb;
+                       *mapping = pci_map_single(priv->pdev, skb_tail_pointer_rtl(skb),
+                       priv->rxbuffersize, PCI_DMA_FROMDEVICE);
+
+                       entry->BufferAddress = cpu_to_le32(*mapping);
+
+                       entry->Length = priv->rxbuffersize;
+                       entry->OWN = 1;
+               }
+
+               entry->EOR = 1;
+       }
+       return 0;
+}
+
+static int rtl8192_alloc_tx_desc_ring(struct net_device *dev,
+        unsigned int prio, unsigned int entries)
+{
+    struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+    tx_desc *ring;
+    dma_addr_t dma;
+    int i;
+
+    ring = pci_alloc_consistent(priv->pdev, sizeof(*ring) * entries, &dma);
+    if (!ring || (unsigned long)ring & 0xFF) {
+        RT_TRACE(COMP_ERR, "Cannot allocate TX ring (prio = %d)\n", prio);
+        return -ENOMEM;
+    }
+
+    memset(ring, 0, sizeof(*ring)*entries);
+    priv->tx_ring[prio].desc = ring;
+    priv->tx_ring[prio].dma = dma;
+    priv->tx_ring[prio].idx = 0;
+    priv->tx_ring[prio].entries = entries;
+    skb_queue_head_init(&priv->tx_ring[prio].queue);
+
+    for (i = 0; i < entries; i++)
+        ring[i].NextDescAddress =
+            cpu_to_le32((u32)dma + ((i + 1) % entries) * sizeof(*ring));
+
+    return 0;
+}
+
+                    
+short rtl8192_pci_initdescring(struct net_device *dev)
+{
+    u32 ret;
+    int i;
+    struct r8192_priv *priv = rtllib_priv(dev);
+
+    ret = rtl8192_alloc_rx_desc_ring(dev);
+    if (ret) {
+        return ret;
+    }
+    
+
+    for (i = 0; i < MAX_TX_QUEUE_COUNT; i++) {
+        if ((ret = rtl8192_alloc_tx_desc_ring(dev, i, priv->txringcount)))
+            goto err_free_rings;
+    }
+
+#if 0
+    if ((ret = rtl8192_alloc_tx_desc_ring(dev, MAX_TX_QUEUE_COUNT - 1, 2)))
+        goto err_free_rings;
+#endif    
+
+    return 0;
+
+err_free_rings:
+    rtl8192_free_rx_ring(dev);
+    for (i = 0; i < MAX_TX_QUEUE_COUNT; i++)
+        if (priv->tx_ring[i].desc)
+            rtl8192_free_tx_ring(dev, i);
+    return 1;
+}
+
+void rtl8192_pci_resetdescring(struct net_device *dev)
+{
+    struct r8192_priv *priv = rtllib_priv(dev);
+       int i,rx_queue_idx;
+    unsigned long flags = 0;
+
+       for(rx_queue_idx = 0; rx_queue_idx < MAX_RX_QUEUE; rx_queue_idx ++){    
+               if(priv->rx_ring[rx_queue_idx]) {
+                       rx_desc *entry = NULL;
+                       for (i = 0; i < priv->rxringcount; i++) {
+                               entry = &priv->rx_ring[rx_queue_idx][i];
+                               entry->OWN = 1;
+                       }
+                       priv->rx_idx[rx_queue_idx] = 0;
+               }
+       }
+
+    spin_lock_irqsave(&priv->irq_th_lock,flags);
+    for (i = 0; i < MAX_TX_QUEUE_COUNT; i++) {
+        if (priv->tx_ring[i].desc) {
+            struct rtl8192_tx_ring *ring = &priv->tx_ring[i];
+
+            while (skb_queue_len(&ring->queue)) {
+                tx_desc *entry = &ring->desc[ring->idx];
+                struct sk_buff *skb = __skb_dequeue(&ring->queue);
+
+                pci_unmap_single(priv->pdev, le32_to_cpu(entry->TxBuffAddr),
+                        skb->len, PCI_DMA_TODEVICE);
+                kfree_skb(skb);
+                ring->idx = (ring->idx + 1) % ring->entries;
+            }
+            ring->idx = 0;
+        }
+    }
+    spin_unlock_irqrestore(&priv->irq_th_lock,flags);
+}
+
+void rtl819x_UpdateRxPktTimeStamp (struct net_device *dev, struct rtllib_rx_stats *stats)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+
+       if(stats->bIsAMPDU && !stats->bFirstMPDU) {
+               stats->mac_time[0] = priv->LastRxDescTSFLow;
+               stats->mac_time[1] = priv->LastRxDescTSFHigh;
+       } else {
+               priv->LastRxDescTSFLow = stats->mac_time[0];
+               priv->LastRxDescTSFHigh = stats->mac_time[1];
+       }
+}
+
+long rtl819x_translate_todbm(struct r8192_priv * priv, u8 signal_strength_index        )
+{
+       long    signal_power; 
+
+#ifdef _RTL8192_EXT_PATCH_
+       if(priv->CustomerID == RT_CID_819x_Lenovo)
+       {       
+               signal_power = (long)signal_strength_index;
+               if(signal_power >= 45)
+                       signal_power -= 110;
+               else
+               {
+                       signal_power = ((signal_power*6)/10);
+                       signal_power -= 93;
+               }
+               return signal_power;
+       }
+#endif
+       signal_power = (long)((signal_strength_index + 1) >> 1); 
+       signal_power -= 95; 
+
+       return signal_power;
+}
+
+
+void
+rtl819x_update_rxsignalstatistics8190pci(
+       struct r8192_priv * priv,
+       struct rtllib_rx_stats * pprevious_stats
+       )
+{
+       int weighting = 0;
+
+
+       if(priv->stats.recv_signal_power == 0)
+               priv->stats.recv_signal_power = pprevious_stats->RecvSignalPower;
+
+       if(pprevious_stats->RecvSignalPower > priv->stats.recv_signal_power)
+               weighting = 5;
+       else if(pprevious_stats->RecvSignalPower < priv->stats.recv_signal_power)
+               weighting = (-5);
+       priv->stats.recv_signal_power = (priv->stats.recv_signal_power * 5 + pprevious_stats->RecvSignalPower + weighting) / 6;
+}
+
+void
+rtl819x_process_cck_rxpathsel(
+       struct r8192_priv * priv,
+       struct rtllib_rx_stats * pprevious_stats
+       )
+{
+#ifdef RTL8190P        
+       char                            last_cck_adc_pwdb[4]={0,0,0,0};
+       u8                              i;
+               if(priv->rf_type == RF_2T4R && DM_RxPathSelTable.Enable)
+               {
+                       if(pprevious_stats->bIsCCK && 
+                               (pprevious_stats->bPacketToSelf ||pprevious_stats->bPacketBeacon))
+                       {
+                               if(priv->stats.cck_adc_pwdb.TotalNum++ >= PHY_RSSI_SLID_WIN_MAX)
+                               {
+                                       priv->stats.cck_adc_pwdb.TotalNum = PHY_RSSI_SLID_WIN_MAX;
+                                       for(i=RF90_PATH_A; i<RF90_PATH_MAX; i++)
+                                       {
+                                               last_cck_adc_pwdb[i] = priv->stats.cck_adc_pwdb.elements[i][priv->stats.cck_adc_pwdb.index];
+                                               priv->stats.cck_adc_pwdb.TotalVal[i] -= last_cck_adc_pwdb[i];
+                                       }
+                               }
+                               for(i=RF90_PATH_A; i<RF90_PATH_MAX; i++)
+                               {
+                                       priv->stats.cck_adc_pwdb.TotalVal[i] += pprevious_stats->cck_adc_pwdb[i];
+                                       priv->stats.cck_adc_pwdb.elements[i][priv->stats.cck_adc_pwdb.index] = pprevious_stats->cck_adc_pwdb[i];
+                               }
+                               priv->stats.cck_adc_pwdb.index++;
+                               if(priv->stats.cck_adc_pwdb.index >= PHY_RSSI_SLID_WIN_MAX)
+                                       priv->stats.cck_adc_pwdb.index = 0;
+
+                               for(i=RF90_PATH_A; i<RF90_PATH_MAX; i++)
+                               {
+                                       DM_RxPathSelTable.cck_pwdb_sta[i] = priv->stats.cck_adc_pwdb.TotalVal[i]/priv->stats.cck_adc_pwdb.TotalNum;
+                               }
+
+                               for(i=RF90_PATH_A; i<RF90_PATH_MAX; i++)
+                               {
+                                       if(pprevious_stats->cck_adc_pwdb[i]  > (char)priv->undecorated_smoothed_cck_adc_pwdb[i])
+                                       {
+                                               priv->undecorated_smoothed_cck_adc_pwdb[i] = 
+                                                       ( (priv->undecorated_smoothed_cck_adc_pwdb[i]*(Rx_Smooth_Factor-1)) + 
+                                                       (pprevious_stats->cck_adc_pwdb[i])) /(Rx_Smooth_Factor);
+                                               priv->undecorated_smoothed_cck_adc_pwdb[i] = priv->undecorated_smoothed_cck_adc_pwdb[i] + 1;
+                                       }
+                                       else
+                                       {
+                                               priv->undecorated_smoothed_cck_adc_pwdb[i] = 
+                                                       ( (priv->undecorated_smoothed_cck_adc_pwdb[i]*(Rx_Smooth_Factor-1)) + 
+                                                       (pprevious_stats->cck_adc_pwdb[i])) /(Rx_Smooth_Factor);
+                                       }
+                               }
+                       }
+               }
+#endif
+}
+
+
+u8 rtl819x_query_rxpwrpercentage(
+       char            antpower
+       )
+{
+       if ((antpower <= -100) || (antpower >= 20))
+       {
+               return  0;
+       }
+       else if (antpower >= 0)
+       {
+               return  100;
+       }
+       else
+       {
+               return  (100+antpower);
+       }
+       
+}      /* QueryRxPwrPercentage */
+
+u8 
+rtl819x_evm_dbtopercentage(
+       char value
+       )
+{
+       char ret_val;
+       
+       ret_val = value;
+       
+       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
+rtl8192x_record_rxdesc_forlateruse(
+       struct rtllib_rx_stats * psrc_stats,
+       struct rtllib_rx_stats * ptarget_stats
+)
+{
+       ptarget_stats->bIsAMPDU = psrc_stats->bIsAMPDU;
+       ptarget_stats->bFirstMPDU = psrc_stats->bFirstMPDU;
+}
+
+
+
+void rtl8192_rx_normal(struct net_device *dev)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       struct rtllib_hdr_1addr *rtllib_hdr = NULL;
+       bool unicast_packet = false;
+       bool bLedBlinking=true;
+       u16 fc=0, type=0;
+       u32 skb_len = 0;
+       int rx_queue_idx = RX_MPDU_QUEUE;
+       
+       struct rtllib_rx_stats stats = {
+               .signal = 0,
+               .noise = -98,
+               .rate = 0,
+               .freq = RTLLIB_24GHZ_BAND,
+       };
+       unsigned int count = priv->rxringcount;
+
+       stats.nic_type = NIC_8192E;
+
+       while (count--) {
+               rx_desc *pdesc = &priv->rx_ring[rx_queue_idx][priv->rx_idx[rx_queue_idx]];
+               struct sk_buff *skb = priv->rx_buf[rx_queue_idx][priv->rx_idx[rx_queue_idx]];
+
+               if (pdesc->OWN){
+                       return;
+               } else {
+
+                       struct sk_buff *new_skb = NULL;
+                       if (!priv->ops->rx_query_status_descriptor(dev, &stats, pdesc, skb))
+                               goto done;
+
+                       pci_unmap_single(priv->pdev,
+                                       *((dma_addr_t *)skb->cb), 
+                                       priv->rxbuffersize, 
+                                       PCI_DMA_FROMDEVICE);
+
+                       skb_put(skb, pdesc->Length);
+                       skb_reserve(skb, stats.RxDrvInfoSize + stats.RxBufShift);
+                       skb_trim(skb, skb->len - 4/*sCrcLng*/);
+                       rtllib_hdr = (struct rtllib_hdr_1addr *)skb->data;
+                       if(is_broadcast_ether_addr(rtllib_hdr->addr1)) {
+                       }else if(is_multicast_ether_addr(rtllib_hdr->addr1)){
+                       }else {
+                               /* unicast packet */
+                               unicast_packet = true;
+                       }
+                       fc = le16_to_cpu(rtllib_hdr->frame_ctl);
+                       type = WLAN_FC_GET_TYPE(fc);
+                       if(type == RTLLIB_FTYPE_MGMT)
+                       {
+                               bLedBlinking = false;
+                       }
+                       if(bLedBlinking)
+                               if(priv->rtllib->LedControlHandler)
+                               priv->rtllib->LedControlHandler(dev, LED_CTL_RX);
+
+                       if(stats.bCRC) {
+                               if(type != RTLLIB_FTYPE_MGMT)
+                                       priv->stats.rxdatacrcerr ++;
+                               else
+                                       priv->stats.rxmgmtcrcerr ++;
+                       }
+
+                       skb_len = skb->len;
+                       
+#ifdef RTL8192CE
+                       if (!stats.bCRC)
+#else
+                       if (1)
+#endif
+                       {
+                       if(!rtllib_rx(priv->rtllib, skb, &stats)){
+                               dev_kfree_skb_any(skb);
+                       } else {
+                               priv->stats.rxok++;
+                               if(unicast_packet) {
+                                       priv->stats.rxbytesunicast += skb_len;
+                               }
+                       }
+                       }else{
+                               dev_kfree_skb_any(skb);
+                       }
+#if 1
+                       new_skb = dev_alloc_skb(priv->rxbuffersize);
+                       if (unlikely(!new_skb))
+                       {
+                               printk("==========>can't alloc skb for rx\n");
+                               goto done;
+                       }
+                       skb=new_skb;
+                        skb->dev = dev;
+#endif
+                       priv->rx_buf[rx_queue_idx][priv->rx_idx[rx_queue_idx]] = skb;
+                       *((dma_addr_t *) skb->cb) = pci_map_single(priv->pdev, skb_tail_pointer_rtl(skb), priv->rxbuffersize, PCI_DMA_FROMDEVICE);
+
+               }
+done:
+               pdesc->BufferAddress = cpu_to_le32(*((dma_addr_t *)skb->cb));
+               pdesc->OWN = 1;
+               pdesc->Length = priv->rxbuffersize;
+               if (priv->rx_idx[rx_queue_idx] == priv->rxringcount-1)
+                       pdesc->EOR = 1;
+               priv->rx_idx[rx_queue_idx] = (priv->rx_idx[rx_queue_idx] + 1) % priv->rxringcount;
+       }
+
+}
+
+void rtl8192_rx_cmd(struct net_device *dev)
+{
+#ifdef RTL8192SE
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+
+       unsigned int count = priv->rxringcount;
+       int rx_queue_idx = RX_CMD_QUEUE;
+
+       struct rtllib_rx_stats stats = {
+               .signal = 0,
+               .noise = -98,
+               .rate = 0,
+               .freq = RTLLIB_24GHZ_BAND,
+       };
+       stats.nic_type = NIC_8192E;
+
+       while (count--) {
+               rx_desc *pdesc = &priv->rx_ring[rx_queue_idx][priv->rx_idx[rx_queue_idx]];
+               struct sk_buff *skb = priv->rx_buf[rx_queue_idx][priv->rx_idx[rx_queue_idx]];
+
+               if (pdesc->OWN){
+                       return;
+               } else {
+                       struct sk_buff *new_skb = NULL;
+
+                       pci_unmap_single(priv->pdev,
+                                       *((dma_addr_t *)skb->cb), 
+                                       priv->rxbuffersize, 
+                                       PCI_DMA_FROMDEVICE);
+
+                       skb_put(skb, pdesc->Length);
+
+                       if(pdesc->MACID == 0x1e){
+
+                               pdesc->Length = pdesc->Length - 32;
+                               pdesc->DrvInfoSize = 4; 
+                               printk(">>>>%s()CMD PKT RX, beacon_len:%d payload_len:%d\n",__func__, pdesc->Length,skb->len);
+                               
+                               
+                               priv->ops->rx_query_status_descriptor(dev, &stats, pdesc, skb);
+                               skb_reserve(skb, stats.RxDrvInfoSize + stats.RxBufShift);
+                                if(0)
+                               {
+                                       u8 i = 0;
+                                       u8 *arry = (u8*) skb->data;
+
+                                       printk("\n==============>\n");
+                                       for(i = 0; i < 32; i ++){
+                                               if((i % 4 == 0)&&(i != 0))
+                                                       printk("\n");
+                                               printk("%2.2x ", arry[i]);
+                                       }
+                                       printk("\n<==============\n");
+                               }
+                       }
+
+                       skb_trim(skb, skb->len - 4/*sCrcLng*/);
+
+                       if(pdesc->MACID == 0x1e){
+                               if(!rtllib_rx(priv->rtllib, skb, &stats)){
+                                       dev_kfree_skb_any(skb);
+                               } 
+                       }else{
+                       if(priv->ops->rx_command_packet_handler != NULL)
+                               priv->ops->rx_command_packet_handler(dev, skb, pdesc);
+                       dev_kfree_skb_any(skb);
+                       }
+
+               
+                       new_skb = dev_alloc_skb(priv->rxbuffersize);
+                       if (unlikely(!new_skb))
+                       {
+                               printk("==========>can't alloc skb for rx\n");
+                               goto done;
+                       }
+                       skb=new_skb;
+                        skb->dev = dev;
+
+                       priv->rx_buf[rx_queue_idx][priv->rx_idx[rx_queue_idx]] = skb;
+                       *((dma_addr_t *) skb->cb) = pci_map_single(priv->pdev, skb_tail_pointer_rtl(skb), priv->rxbuffersize, PCI_DMA_FROMDEVICE);
+
+               }
+done:
+               pdesc->BufferAddress = cpu_to_le32(*((dma_addr_t *)skb->cb));
+               pdesc->OWN = 1;
+               pdesc->Length = priv->rxbuffersize;
+               if (priv->rx_idx[rx_queue_idx] == priv->rxringcount-1)
+                       pdesc->EOR = 1;
+               priv->rx_idx[rx_queue_idx] = (priv->rx_idx[rx_queue_idx] + 1) % priv->rxringcount;
+       }
+#endif
+}
+
+
+void rtl8192_tx_resume(struct net_device *dev)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       struct rtllib_device *ieee = priv->rtllib;
+       struct sk_buff *skb;
+       int queue_index;
+
+       for(queue_index = BK_QUEUE; queue_index < TXCMD_QUEUE;queue_index++) {
+               while((!skb_queue_empty(&ieee->skb_waitQ[queue_index]))&&
+                               (priv->rtllib->check_nic_enough_desc(dev,queue_index) > 0)) {
+                       skb = skb_dequeue(&ieee->skb_waitQ[queue_index]);
+                       ieee->softmac_data_hard_start_xmit(skb,dev,0/* rate useless now*/);
+                       #if 0
+                       if(queue_index!=MGNT_QUEUE) {
+                               ieee->stats.tx_packets++;
+                               ieee->stats.tx_bytes += skb->len;
+                       }
+                       #endif
+               }
+#ifdef ENABLE_AMSDU
+               while((skb_queue_len(&priv->rtllib->skb_aggQ[queue_index]) > 0)&&\
+                               (!(priv->rtllib->queue_stop)) && \
+                               (priv->rtllib->check_nic_enough_desc(dev,queue_index) > 0)){
+
+                       struct sk_buff_head pSendList;
+                       u8 dst[ETH_ALEN];
+                       cb_desc *tcb_desc = NULL;
+                       int qos_actived = priv->rtllib->current_network.qos_data.active;
+                       struct sta_info *psta = NULL;
+                       u8 bIsSptAmsdu = false;
+
+#ifdef WIFI_TEST 
+                       if (queue_index <= VO_QUEUE)
+                               queue_index = wmm_queue_select(priv, queue_index, priv->rtllib->skb_aggQ);
+#endif
+                       priv->rtllib->amsdu_in_process = true;
+
+                       skb = skb_dequeue(&(priv->rtllib->skb_aggQ[queue_index]));
+                       if(skb == NULL)
+                       {
+                               printk("In %s:Skb is NULL\n",__FUNCTION__);
+                               return;
+                       }
+                       tcb_desc = (pcb_desc)(skb->cb + MAX_DEV_ADDR_SIZE);
+                       if(tcb_desc->bFromAggrQ)
+                       {
+                               rtllib_xmit_inter(skb, dev);
+                               return;
+                       }
+
+                       memcpy(dst, skb->data, ETH_ALEN);
+                       if(priv->rtllib->iw_mode == IW_MODE_ADHOC)
+                       {
+                               psta = GetStaInfo(priv->rtllib, dst);
+                               if(psta) {
+                                       if(psta->htinfo.bEnableHT)
+                                               bIsSptAmsdu = true;
+                               }
+                       }
+                       else if(priv->rtllib->iw_mode == IW_MODE_INFRA)
+                               bIsSptAmsdu = true;
+                       else
+                               bIsSptAmsdu = true;
+                       bIsSptAmsdu = true;
+
+                       bIsSptAmsdu = bIsSptAmsdu && priv->rtllib->pHTInfo->bCurrent_AMSDU_Support && qos_actived;
+
+                       if(qos_actived &&       !is_broadcast_ether_addr(dst) &&
+                                       !is_multicast_ether_addr(dst) &&
+                                       bIsSptAmsdu)
+                       {
+                               skb_queue_head_init(&pSendList);
+                               if(AMSDU_GetAggregatibleList(priv->rtllib, skb, &pSendList,queue_index))
+                               {
+                                       struct sk_buff * pAggrSkb = AMSDU_Aggregation(priv->rtllib, &pSendList);
+                                       if(NULL != pAggrSkb)
+                                               rtllib_xmit_inter(pAggrSkb, dev);
+                               }
+                       }
+                       else
+                       {
+                               memset(skb->cb,0,sizeof(skb->cb));
+                               tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE);
+                               tcb_desc->bFromAggrQ = true;
+                               rtllib_xmit_inter(skb, dev);
+                       }
+               }
+#endif
+#ifdef _RTL8192_EXT_PATCH_
+               while((!skb_queue_empty(&priv->rtllib->skb_meshaggQ[queue_index]) )&&\
+                       (priv->rtllib->check_nic_enough_desc(dev,queue_index)> 0))
+               {
+                       struct sk_buff_head pSendList;
+                       u8 dst[ETH_ALEN];
+                       cb_desc *tcb_desc = NULL;
+                       u8 IsHTEnable = false;
+                       int qos_actived = 1; 
+                       priv->rtllib->mesh_amsdu_in_process = true;
+                       skb = skb_dequeue(&(priv->rtllib->skb_meshaggQ[queue_index]));
+                       if(skb == NULL)
+                       {
+                               priv->rtllib->mesh_amsdu_in_process = false;
+                               printk("In %s:Skb is NULL\n",__FUNCTION__);
+                               return;
+                       }
+                       tcb_desc = (pcb_desc)(skb->cb + MAX_DEV_ADDR_SIZE);
+                       if(tcb_desc->bFromAggrQ)
+                       {
+                               rtllib_mesh_xmit(skb, dev);
+                               continue;
+                       }
+                       memcpy(dst, skb->data, ETH_ALEN);
+                       
+#if 0
+                       ppeerMP_htinfo phtinfo = NULL;
+                       bool is_mesh = false;
+                       if(priv->mshobj->ext_patch_rtllib_is_mesh)
+                               is_mesh = priv->mshobj->ext_patch_rtllib_is_mesh(priv->rtllib,dst);
+                       if(is_mesh){
+                               if(priv->rtllib->ext_patch_rtllib_get_peermp_htinfo)
+                               {
+                                       phtinfo = priv->rtllib->ext_patch_rtllib_get_peermp_htinfo(ieee,dst);
+                                       if(phtinfo == NULL)
+                                       {
+                                               RT_TRACE(COMP_ERR,"%s(): No htinfo\n",__FUNCTION__);
+                                       }
+                                       else
+                                       {
+                                               if(phtinfo->bEnableHT)
+                                                       IsHTEnable = true;
+                                       }       
+                               }
+                       }
+                       else 
+                       {
+                               printk("===>%s():tx AMSDU data has not entry,dst: "MAC_FMT"\n",__FUNCTION__,MAC_ARG(dst));
+                               IsHTEnable = true;
+                       }
+#else
+                       IsHTEnable = true;
+#endif
+                       IsHTEnable = (IsHTEnable && ieee->pHTInfo->bCurrent_Mesh_AMSDU_Support && qos_actived);
+                       if( !is_broadcast_ether_addr(dst) && 
+                               !is_multicast_ether_addr(dst) &&
+                               IsHTEnable) 
+                       {
+                               skb_queue_head_init(&pSendList);
+                               if(msh_AMSDU_GetAggregatibleList(priv->rtllib, skb, &pSendList,queue_index))
+                               {                               
+                                       struct sk_buff * pAggrSkb = msh_AMSDU_Aggregation(priv->rtllib, &pSendList);
+                                       if(NULL != pAggrSkb)
+                                               rtllib_mesh_xmit(pAggrSkb, dev);
+                               }else{
+                                       priv->rtllib->mesh_amsdu_in_process = false;
+                                       return;
+                               }
+                       }
+                       else
+                       {
+                               memset(skb->cb,0,sizeof(skb->cb));
+                               tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE);
+                               tcb_desc->bFromAggrQ = true;
+                               rtllib_mesh_xmit(skb, dev);
+                       }
+               }
+#endif         
+       }
+}
+
+void rtl8192_irq_tx_tasklet(struct r8192_priv *priv)
+{
+       rtl8192_tx_resume(priv->rtllib->dev);
+}
+
+void rtl8192_irq_rx_tasklet(struct r8192_priv *priv)
+{
+               rtl8192_rx_normal(priv->rtllib->dev);
+
+       if(MAX_RX_QUEUE > 1)
+               rtl8192_rx_cmd(priv->rtllib->dev);
+       
+#ifndef RTL8192CE
+       write_nic_dword(priv->rtllib->dev, INTA_MASK,read_nic_dword(priv->rtllib->dev, INTA_MASK) | IMR_RDU); 
+#endif
+}
+
+/****************************************************************************
+ ---------------------------- NIC START/CLOSE STUFF---------------------------
+*****************************************************************************/
+void rtl8192_cancel_deferred_work(struct r8192_priv* priv)
+{
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
+       cancel_delayed_work(&priv->watch_dog_wq);
+       cancel_delayed_work(&priv->update_beacon_wq);
+#ifndef RTL8190P
+       cancel_delayed_work(&priv->rtllib->hw_sleep_wq);
+#endif
+#if defined RTL8192SE 
+       cancel_delayed_work(&priv->check_hw_scan_wq);
+       cancel_delayed_work(&priv->hw_scan_simu_wq);
+       cancel_delayed_work(&priv->start_hw_scan_wq);
+       cancel_delayed_work(&priv->rtllib->update_assoc_sta_info_wq);
+       cancel_delayed_work(&priv->rtllib->check_tsf_wq);
+#endif
+#endif
+
+#if LINUX_VERSION_CODE >=KERNEL_VERSION(2,6,22)
+       cancel_work_sync(&priv->reset_wq);
+       cancel_work_sync(&priv->qos_activate);
+#elif ((LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)))
+       cancel_delayed_work(&priv->reset_wq);
+       cancel_delayed_work(&priv->qos_activate);
+#if defined RTL8192SE 
+       cancel_delayed_work(&priv->rtllib->update_assoc_sta_info_wq);
+       cancel_delayed_work(&priv->rtllib->check_tsf_wq);
+#endif
+#endif
+
+}
+
+#ifdef _RTL8192_EXT_PATCH_
+int _rtl8192_up(struct net_device *dev,bool is_silent_reset)
+#else
+int _rtl8192_up(struct net_device *dev)
+#endif
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl));
+       bool init_status = true;
+       priv->bDriverIsGoingToUnload = false;
+       priv->bdisable_nic = false;  
+#ifdef _RTL8192_EXT_PATCH_
+       if(priv->mesh_up){
+               RT_TRACE(COMP_ERR,"%s(): since mesh0 is already up, ra0 is forbidden to open.\n",__FUNCTION__);
+               return -1;
+       }
+       RT_TRACE(COMP_DOWN, "==========>%s()\n", __FUNCTION__);
+       if(!is_silent_reset)
+               priv->rtllib->iw_mode = IW_MODE_INFRA;
+       if(priv->up){
+               RT_TRACE(COMP_ERR,"%s():%s is up,return\n",__FUNCTION__,DRV_NAME);
+               return -1;
+       }
+#ifdef RTL8192SE        
+       priv->ReceiveConfig =
+                               RCR_APPFCS | RCR_APWRMGT | /*RCR_ADD3 |*/
+                               RCR_AMF | RCR_ADF | RCR_APP_MIC | RCR_APP_ICV |
+                               RCR_AICV | RCR_ACRC32    |                               
+                               RCR_AB          | RCR_AM                |                               
+                               RCR_APM         |                                                               
+                               /*RCR_AAP               |*/                                                     
+                               RCR_APP_PHYST_STAFF | RCR_APP_PHYST_RXFF |      
+                               (priv->EarlyRxThreshold<<RCR_FIFO_OFFSET)       ;
+#endif
+
+       if(!priv->mesh_up)
+       {
+               RT_TRACE(COMP_INIT, "Bringing up iface");
+               priv->bfirst_init = true;
+               init_status = priv->ops->initialize_adapter(dev);
+               if(init_status != true)
+               {
+                       RT_TRACE(COMP_ERR,"ERR!!! %s(): initialization is failed!\n",__FUNCTION__);
+                       return -1;
+               }
+               RT_TRACE(COMP_INIT, "start adapter finished\n");
+               RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC);
+               priv->rtllib->ieee_up=1;
+               priv->bfirst_init = false;
+#ifdef ENABLE_GPIO_RADIO_CTL
+               if(priv->polling_timer_on == 0){
+                       check_rfctrl_gpio_timer((unsigned long)dev);
+               }
+#endif
+               priv->rtllib->current_network.channel = INIT_DEFAULT_CHAN;
+               priv->rtllib->current_mesh_network.channel = INIT_DEFAULT_CHAN;
+               if((priv->mshobj->ext_patch_r819x_wx_set_mesh_chan) && (!is_silent_reset))
+                       priv->mshobj->ext_patch_r819x_wx_set_mesh_chan(dev,INIT_DEFAULT_CHAN);
+               if((priv->mshobj->ext_patch_r819x_wx_set_channel) && (!is_silent_reset))
+               {
+                       priv->mshobj->ext_patch_r819x_wx_set_channel(priv->rtllib, INIT_DEFAULT_CHAN);
+               }
+               dm_InitRateAdaptiveMask(dev);
+       }       
+       else
+       {
+               rtllib_stop_scan_syncro(priv->rtllib);
+       }
+       priv->up=1; 
+       printk("%s():set chan %d\n",__FUNCTION__,INIT_DEFAULT_CHAN);
+       priv->rtllib->set_chan(dev, INIT_DEFAULT_CHAN); 
+       priv->up_first_time = 0;
+       if(!priv->rtllib->proto_started) 
+       {
+#ifdef RTL8192E
+               if(priv->rtllib->eRFPowerState!=eRfOn)
+                       MgntActSet_RF_State(dev, eRfOn, priv->rtllib->RfOffReason);     
+#endif
+               if(priv->rtllib->state != RTLLIB_LINKED)
+                       rtllib_softmac_start_protocol(priv->rtllib, 0);
+       }
+       if(!priv->mesh_up)
+               watch_dog_timer_callback((unsigned long) dev);
+       rtllib_reset_queue(priv->rtllib);
+       if(!netif_queue_stopped(dev))
+               netif_start_queue(dev);
+       else
+               netif_wake_queue(dev);
+       RT_TRACE(COMP_DOWN, "<==========%s()\n", __FUNCTION__);
+#else
+       priv->up=1;
+       priv->rtllib->ieee_up=1;        
+       
+       priv->up_first_time = 0;
+       RT_TRACE(COMP_INIT, "Bringing up iface");
+       priv->bfirst_init = true;
+       init_status = priv->ops->initialize_adapter(dev);
+       if(init_status != true)
+       {
+               RT_TRACE(COMP_ERR,"ERR!!! %s(): initialization is failed!\n",__FUNCTION__);
+               priv->bfirst_init = false;
+               return -1;
+       }
+
+       RT_TRACE(COMP_INIT, "start adapter finished\n");
+       RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC);
+       priv->bfirst_init = false;
+#if defined RTL8192SE || defined RTL8192CE
+       if(priv->rtllib->eRFPowerState!=eRfOn)
+               MgntActSet_RF_State(dev, eRfOn, priv->rtllib->RfOffReason);     
+#endif
+
+#ifdef ENABLE_GPIO_RADIO_CTL
+       if(priv->polling_timer_on == 0){
+               check_rfctrl_gpio_timer((unsigned long)dev);
+       }
+#endif
+
+       if(priv->rtllib->state != RTLLIB_LINKED)
+#ifndef CONFIG_MP
+       rtllib_softmac_start_protocol(priv->rtllib);
+#endif
+       rtllib_reset_queue(priv->rtllib);
+#ifndef CONFIG_MP
+       watch_dog_timer_callback((unsigned long) dev);
+#endif
+
+
+       if(!netif_queue_stopped(dev))
+               netif_start_queue(dev);
+       else
+               netif_wake_queue(dev);
+#endif
+       return 0;
+}
+
+
+int rtl8192_open(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       int ret;
+       
+       down(&priv->wx_sem);
+       ret = rtl8192_up(dev);
+       up(&priv->wx_sem);
+       return ret;
+       
+}
+
+
+int rtl8192_up(struct net_device *dev)
+{
+#ifndef _RTL8192_EXT_PATCH_
+       struct r8192_priv *priv = rtllib_priv(dev);
+
+       if (priv->up == 1) return -1;
+       return _rtl8192_up(dev);
+#else  
+       return _rtl8192_up(dev,false);
+#endif 
+}
+
+
+int rtl8192_close(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       int ret;
+       
+       if ((rtllib_act_scanning(priv->rtllib, false)) && 
+               !(priv->rtllib->softmac_features & IEEE_SOFTMAC_SCAN)){
+               rtllib_stop_scan(priv->rtllib);
+       }
+
+       down(&priv->wx_sem);
+
+       ret = rtl8192_down(dev,true);
+       
+       up(&priv->wx_sem);
+       
+       return ret;
+
+}
+
+int rtl8192_down(struct net_device *dev, bool shutdownrf)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       unsigned long flags = 0;
+       u8 RFInProgressTimeOut = 0;
+
+#ifdef _RTL8192_EXT_PATCH_
+       if (priv->up == 0) 
+               return -1;
+
+       RT_TRACE(COMP_DOWN, "==========>%s()\n", __FUNCTION__);
+#ifdef ENABLE_LPS
+       if(priv->rtllib->state == RTLLIB_LINKED)
+               LeisurePSLeave(dev);
+#endif
+       priv->up=0; 
+
+       /* FIXME */
+       if (!netif_queue_stopped(dev))
+               netif_stop_queue(dev);  
+       if(!priv->mesh_up)
+       {
+               printk("===>%s():mesh is not up\n",__FUNCTION__);
+               priv->bDriverIsGoingToUnload = true;    
+               priv->rtllib->ieee_up = 0;  
+               /* mesh stack has also be closed, then disalbe the hardware function at 
+                * the same time */
+               priv->rtllib->wpa_ie_len = 0;
+               if(priv->rtllib->wpa_ie)
+                       kfree(priv->rtllib->wpa_ie);
+               priv->rtllib->wpa_ie = NULL;
+               CamResetAllEntry(dev);
+               memset(priv->rtllib->swcamtable,0,sizeof(SW_CAM_TABLE)*32);
+               rtl8192_irq_disable(dev);
+               rtl8192_cancel_deferred_work(priv);
+#ifndef RTL8190P
+               cancel_delayed_work(&priv->rtllib->hw_wakeup_wq);
+#endif
+               deinit_hal_dm(dev);
+               del_timer_sync(&priv->watch_dog_timer); 
+
+               rtllib_softmac_stop_protocol(priv->rtllib, 0, true);
+               SPIN_LOCK_PRIV_RFPS(&priv->rf_ps_lock);
+               while(priv->RFChangeInProgress)
+               {
+                       SPIN_UNLOCK_PRIV_RFPS(&priv->rf_ps_lock);
+                       if(RFInProgressTimeOut > 100)
+                       {
+                               SPIN_LOCK_PRIV_RFPS(&priv->rf_ps_lock);
+                               break;
+                       }
+                       printk("===>%s():RF is in progress, need to wait until rf chang is done.\n",__FUNCTION__);
+                       mdelay(1);
+                       RFInProgressTimeOut ++;
+                       SPIN_LOCK_PRIV_RFPS(&priv->rf_ps_lock);
+               }
+               printk("=====>%s(): priv->RFChangeInProgress = true\n",__FUNCTION__);
+               priv->RFChangeInProgress = true;
+               SPIN_UNLOCK_PRIV_RFPS(&priv->rf_ps_lock);
+               priv->ops->stop_adapter(dev, false);
+               SPIN_LOCK_PRIV_RFPS(&priv->rf_ps_lock);
+               printk("=====>%s(): priv->RFChangeInProgress = false\n",__FUNCTION__);
+               priv->RFChangeInProgress = false;
+               SPIN_UNLOCK_PRIV_RFPS(&priv->rf_ps_lock);
+               udelay(100);
+               memset(&priv->rtllib->current_network, 0 , offsetof(struct rtllib_network, list));
+               priv->rtllib->wap_set = 0; 
+               priv->rtllib->current_network.channel = INIT_DEFAULT_CHAN;
+#ifdef CONFIG_ASPM_OR_D3
+               RT_ENABLE_ASPM(dev);
+#endif
+       } else {
+               priv->rtllib->wpa_ie_len = 0;
+               if(priv->rtllib->wpa_ie)
+                       kfree(priv->rtllib->wpa_ie);
+               priv->rtllib->wpa_ie = NULL;
+               CamResetAllEntry(dev);
+               CamRestoreEachIFEntry(dev,1);   
+               memset(priv->rtllib->swcamtable,0,sizeof(SW_CAM_TABLE)*32);
+
+               rtllib_softmac_stop_protocol(priv->rtllib, 0, true);
+               memset(&priv->rtllib->current_network, 0 , offsetof(struct rtllib_network, list));
+               priv->rtllib->current_network.channel = INIT_DEFAULT_CHAN;
+               priv->rtllib->wap_set = 0; 
+       }
+
+       RT_TRACE(COMP_DOWN, "<==========%s()\n", __FUNCTION__);
+#else
+       if (priv->up == 0) return -1;
+
+#ifdef ENABLE_LPS
+       if(priv->rtllib->state == RTLLIB_LINKED)
+               LeisurePSLeave(dev);
+#endif
+
+       priv->bDriverIsGoingToUnload = true;
+       priv->up=0;
+       priv->rtllib->ieee_up = 0;
+       RT_TRACE(COMP_DOWN, "==========>%s()\n", __FUNCTION__);
+       if (!netif_queue_stopped(dev))
+               netif_stop_queue(dev);
+
+       priv->rtllib->wpa_ie_len = 0;
+       if(priv->rtllib->wpa_ie)
+               kfree(priv->rtllib->wpa_ie);
+       priv->rtllib->wpa_ie = NULL;
+       CamResetAllEntry(dev);  
+       memset(priv->rtllib->swcamtable,0,sizeof(SW_CAM_TABLE)*32);
+       rtl8192_irq_disable(dev);
+
+       del_timer_sync(&priv->watch_dog_timer); 
+       rtl8192_cancel_deferred_work(priv);
+#ifndef RTL8190P
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) 
+       cancel_delayed_work(&priv->rtllib->hw_wakeup_wq);
+#endif
+#endif
+
+       rtllib_softmac_stop_protocol(priv->rtllib,true);
+       spin_lock_irqsave(&priv->rf_ps_lock,flags);
+       while(priv->RFChangeInProgress)
+       {
+               spin_unlock_irqrestore(&priv->rf_ps_lock,flags);
+               if(RFInProgressTimeOut > 100)
+               {
+                       spin_lock_irqsave(&priv->rf_ps_lock,flags);
+                       break;
+               }
+               printk("===>%s():RF is in progress, need to wait until rf chang is done.\n",__FUNCTION__);
+               mdelay(1);
+               RFInProgressTimeOut ++;
+               spin_lock_irqsave(&priv->rf_ps_lock,flags);
+       }
+       priv->RFChangeInProgress = true;
+       spin_unlock_irqrestore(&priv->rf_ps_lock,flags);
+       priv->ops->stop_adapter(dev, false);
+       spin_lock_irqsave(&priv->rf_ps_lock,flags);
+       priv->RFChangeInProgress = false;
+       spin_unlock_irqrestore(&priv->rf_ps_lock,flags);
+       udelay(100);
+       memset(&priv->rtllib->current_network, 0 , offsetof(struct rtllib_network, list));
+#ifdef CONFIG_ASPM_OR_D3
+       RT_ENABLE_ASPM(dev);
+#endif
+       RT_TRACE(COMP_DOWN, "<==========%s()\n", __FUNCTION__);
+#endif
+
+#ifdef CONFIG_MP
+       if (priv->bCckContTx) {
+               printk("####RTL819X MP####stop single cck continious TX\n");
+               mpt_StopCckCoNtTx(dev);
+       } 
+       if (priv->bOfdmContTx) {
+               printk("####RTL819X MP####stop single ofdm continious TX\n");
+               mpt_StopOfdmContTx(dev);
+       } 
+       if (priv->bSingleCarrier) {
+               printk("####RTL819X MP####stop single carrier mode\n");
+               MPT_ProSetSingleCarrier(dev, false);
+       }
+#endif
+       return 0;
+}
+
+void rtl8192_commit(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+
+#ifdef _RTL8192_EXT_PATCH_
+       if ((priv->up == 0) && (priv->mesh_up == 0)) return ;
+       rtllib_softmac_stop_protocol(priv->rtllib,0,true);
+       rtl8192_irq_disable(dev);
+       priv->ops->stop_adapter(dev, true);
+       priv->up = 0;
+       _rtl8192_up(dev,false);
+#else
+       if (priv->up == 0) return ;
+       rtllib_softmac_stop_protocol(priv->rtllib,true);
+       rtl8192_irq_disable(dev);
+       priv->ops->stop_adapter(dev, true);
+       _rtl8192_up(dev);
+#endif
+       
+}
+
+void rtl8192_restart(void *data)
+{
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20))
+       struct r8192_priv *priv = container_of_work_rsl(data, struct r8192_priv, reset_wq);
+       struct net_device *dev = priv->rtllib->dev;
+#else
+       struct net_device *dev = (struct net_device *)data;
+        struct r8192_priv *priv = rtllib_priv(dev);
+#endif
+
+       down(&priv->wx_sem);
+       
+       rtl8192_commit(dev);
+       
+       up(&priv->wx_sem);
+}
+
+static void r8192_set_multicast(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       short promisc;
+
+       
+       
+       promisc = (dev->flags & IFF_PROMISC) ? 1:0;
+       
+       if (promisc != priv->promisc) {
+               ;
+       }
+       
+       priv->promisc = promisc;
+       
+}
+
+
+int r8192_set_mac_adr(struct net_device *dev, void *mac)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct sockaddr *addr = mac;
+       
+       down(&priv->wx_sem);
+       
+       memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
+               
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
+       schedule_work(&priv->reset_wq);
+#else
+       schedule_task(&priv->reset_wq);
+#endif 
+       up(&priv->wx_sem);
+       
+       return 0;
+}
+
+#if defined (RTL8192S_WAPI_SUPPORT)
+extern int wapi_ioctl_set_mode(struct net_device *dev, struct iw_request_info *a,union iwreq_data *wrqu, char *b);
+int WAPI_Ioctl(struct net_device *dev, struct iwreq *wrq, int cmd)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       struct rtllib_device *ieee = priv->rtllib;
+       static u8 QueueData[WAPI_MAX_BUFF_LEN];
+#define DATAQUEUE_EMPTY        "Queue is empty"
+       int ret = 0;
+
+       switch(cmd){
+               case WAPI_CMD_GET_WAPI_SUPPORT:
+                       WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_GET_WAPI_SUPPORT!\n",__FUNCTION__);
+                       if(copy_to_user((u8 *)(wrq->u.data.pointer), &ieee->WapiSupport, sizeof(u8))==0)
+                               wrq->u.data.length = sizeof(u8);
+                       break;
+               case WAPI_CMD_SET_WAPI_ENABLE:
+               {
+                       u8 wapi_enable = *(u8 *)wrq->u.data.pointer;
+                       WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_SET_WAPI_ENABLE!\n",__FUNCTION__);
+                       if((ieee->WapiSupport) && (wapi_enable == 1)){
+                               ieee->wapiInfo.bWapiEnable = true;
+                               ieee->pairwise_key_type = KEY_TYPE_SMS4;
+                               ieee->group_key_type = KEY_TYPE_SMS4;
+                               ieee->wapiInfo.extra_prefix_len = WAPI_EXT_LEN;
+                               ieee->wapiInfo.extra_postfix_len = SMS4_MIC_LEN;
+                       }
+                       else if (wapi_enable == 0) {
+                               ieee->wapiInfo.bWapiEnable = false;
+                               ieee->pairwise_key_type = KEY_TYPE_NA;
+                               ieee->group_key_type = KEY_TYPE_NA;
+                       }
+                       break;
+               }
+               case WAPI_CMD_SET_WAPI_PSK:
+               {
+                       u8 wapi_psk = *(u8 *)wrq->u.data.pointer;
+                       WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_SET_WAPI_PSK!\n",__FUNCTION__);
+                       if(ieee->wapiInfo.bWapiEnable){
+                               ieee->wapiInfo.bWapiPSK = (wapi_psk > 0)?1:0; 
+                               WAPI_TRACE(WAPI_API, "%s(): bWapiPSK=%d!\n",__FUNCTION__, ieee->wapiInfo.bWapiPSK);
+                       }
+                       break;
+               }
+               case WAPI_CMD_SET_KEY:
+               { /*Data: keyType(1) + bTxEnable(1) + bAuthenticator(1) + bUpdate(1) + PeerAddr(6) + DataKey(16) + MicKey(16) + KeyId(1)*/
+                       PRT_WAPI_T                      pWapiInfo = &ieee->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_API, "%s(): WAPI_CMD_SET_KEY!\n",__FUNCTION__);
+                       if (!ieee->WapiSupport){
+                               ret = -1;
+                               break;    
+                       }
+                       if(wrq->u.data.length < 26){
+                               ret = -1;
+                               break;
+                       }
+
+                       copy_from_user(data, (u8 *)wrq->u.data.pointer, wrq->u.data.length);
+                       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);
+                                       list_add_tail(&pWapiBkid->list, &pWapiInfo->wapiBKIDStoreList);
+                                       WAPI_DATA(WAPI_API, "SetKey - BKID", pWapiBkid->bkid, 16);
+                               }
+                       }else{
+                               list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) {
+                                       if(!memcmp(pWapiSta->PeerMacAddr,PeerAddr,6)){
+                                               pWapiSta->bAuthenticatorInUpdata = false;
+                                               switch(data[0]){
+                                               case 1:              
+                                                       if(bAuthenticator){         
+                                                               memcpy(pWapiSta->lastTxUnicastPN,WapiAEPNInitialValueSrc,16);
+                                                               if(!bUpdate) {     
+                                                                       WAPI_TRACE(WAPI_API, "%s(): AE fisrt set usk!\n",__FUNCTION__);
+                                                                       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_API, "SetKey - AE Usk Data Key", pWapiSta->wapiUsk.dataKey, 16);
+                                                                       WAPI_DATA(WAPI_API, "SetKey - AE Usk Mic Key", pWapiSta->wapiUsk.micKey, 16);
+                                                               }
+                                                               else               
+                                                               {
+                                                                       WAPI_TRACE(WAPI_API, "%s(): AE update usk!\n",__FUNCTION__);
+                                                                       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;
+                                                                       WAPI_TRACE(WAPI_API, "%s(): keyid=%d\n",__FUNCTION__, pWapiSta->wapiUskUpdate.keyId);
+                                                                       WAPI_DATA(WAPI_API, "SetKey - AE Usk Data Key", pWapiSta->wapiUskUpdate.dataKey, 16);
+                                                                       WAPI_DATA(WAPI_API, "SetKey - AE Usk Mic Key", pWapiSta->wapiUskUpdate.micKey, 16);
+                                                               }
+                                                       }
+                                                       else{
+                                                               if(!bUpdate){
+                                                                       WAPI_TRACE(WAPI_API, "%s(): ASUE fisrt set usk!\n",__FUNCTION__);
+                                                                       if(bTxEnable){
+                                                                               pWapiSta->wapiUsk.bTxEnable = true;
+                                                                               memcpy(pWapiSta->lastTxUnicastPN,WapiASUEPNInitialValueSrc,16);
+                                                                               WAPI_TRACE(WAPI_API, "%s(): Tx enable!\n",__FUNCTION__);
+                                                                       }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;
+                                                                               WAPI_TRACE(WAPI_API, "%s(): Tx disable!\n",__FUNCTION__);
+                                                                               WAPI_DATA(WAPI_API, "SetKey - AE Usk Data Key", pWapiSta->wapiUsk.dataKey, 16);
+                                                                               WAPI_DATA(WAPI_API, "SetKey - AE Usk Mic Key", pWapiSta->wapiUsk.micKey, 16);
+                                                                       }
+                                                               }else{
+                                                                       WAPI_TRACE(WAPI_API, "%s(): ASUE update usk!\n",__FUNCTION__);
+                                                                       if(bTxEnable){
+                                                                               pWapiSta->wapiUskUpdate.bTxEnable = true;
+                                                                               if(pWapiSta->wapiUskUpdate.bSet){
+                                                                                       WAPI_TRACE(WAPI_API, "%s(): ASUE set usk!\n",__FUNCTION__);
+                                                                                       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{
+                                                                               WAPI_TRACE(WAPI_API, "%s(): ASUE set update usk!\n",__FUNCTION__);
+                                                                               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;
+                                                                               WAPI_TRACE(WAPI_API, "%s(): keyid=%d\n",__FUNCTION__, pWapiSta->wapiUskUpdate.keyId);
+                                                                               WAPI_DATA(WAPI_API, "SetKey - AE Usk Data Key", pWapiSta->wapiUskUpdate.dataKey, 16);
+                                                                               WAPI_DATA(WAPI_API, "SetKey - AE Usk Mic Key", pWapiSta->wapiUskUpdate.micKey, 16);
+                                                                       }
+                                                               }
+                                                       }
+                                                       break;
+                                               case 2:         
+                                                       if(bAuthenticator){          
+                                                               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){      
+                                                                       WAPI_TRACE(WAPI_API, "%s(): AE fisrt set msk!\n",__FUNCTION__);
+                                                                       if(!pWapiSta->bSetkeyOk)
+                                                                               pWapiSta->bSetkeyOk = true;
+                                                                       pWapiInfo->bFirstAuthentiateInProgress= false;
+                                                               }else{               
+                                                                       WAPI_TRACE(WAPI_API, "%s():AE update msk!\n",__FUNCTION__);
+                                                               }
+                                                               WAPI_TRACE(WAPI_API, "%s(): keyid=%d\n",__FUNCTION__, pWapiInfo->wapiTxMsk.keyId);
+                                                               WAPI_DATA(WAPI_API, "SetKey - AE Msk Data Key", pWapiInfo->wapiTxMsk.dataKey, 16);
+                                                               WAPI_DATA(WAPI_API, "SetKey - AE Msk Mic Key", pWapiInfo->wapiTxMsk.micKey, 16);
+                                                       }
+                                                       else{
+                                                               if(!bUpdate){
+                                                                       WAPI_TRACE(WAPI_API, "%s(): ASUE fisrt set msk!\n",__FUNCTION__);
+                                                                       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_API, "SetKey - ASUE Msk Data Key", pWapiSta->wapiMsk.dataKey, 16);
+                                                                       WAPI_DATA(WAPI_API, "SetKey - ASUE Msk Mic Key", pWapiSta->wapiMsk.micKey, 16);
+                                                               }else{
+                                                                       WAPI_TRACE(WAPI_API, "%s(): ASUE update msk!\n",__FUNCTION__);
+                                                                       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;
+                                                                       WAPI_TRACE(WAPI_API, "%s(): keyid=%d\n",__FUNCTION__, pWapiSta->wapiMskUpdate.keyId);
+                                                                       WAPI_DATA(WAPI_API, "SetKey - ASUE Msk Data Key", pWapiSta->wapiMskUpdate.dataKey, 16);
+                                                                       WAPI_DATA(WAPI_API, "SetKey - ASUE Msk Mic Key", pWapiSta->wapiMskUpdate.micKey, 16);
+                                                               }
+                                                       }
+                                                       break;
+                                               default:
+                                                       WAPI_TRACE(WAPI_ERR, "%s(): Unknown Flag!\n",__FUNCTION__);
+                                                       break;
+                                               }
+                                       }
+                               }
+                       }
+                       break;
+               }
+               case WAPI_CMD_SET_MULTICAST_PN:
+               {
+                       PRT_WAPI_T                      pWapiInfo = &ieee->wapiInfo;
+                       PRT_WAPI_STA_INFO       pWapiSta;
+                       u8                              data[22];
+                       u8                              k;
+
+                       WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_SET_MULTICAST_PN!\n",__FUNCTION__);
+                       if (!ieee->WapiSupport)
+                       {
+                               ret = -1;
+                               break;    
+                       }
+                       if(wrq->u.data.length < 22){
+                               ret = -1;
+                               break;
+                       }
+
+                       memcpy(data, (u8 *)wrq->u.data.pointer, 22);
+                       list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) {
+                               if(!memcmp(pWapiSta->PeerMacAddr,data,6))
+                               {
+                                       for(k=0;k<16;k++)
+                                               pWapiSta->lastRxMulticastPN[k] = data[21-k];
+                                       break;
+                               }
+                       }
+                       break;
+               }
+               case WAPI_CMD_GET_PN:
+               {
+                       PRT_WAPI_T              pWapiInfo = &ieee->wapiInfo;
+                       
+                       WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_GET_PN!\n",__FUNCTION__);
+                       if (!ieee->WapiSupport){
+                               ret = -1;
+                               break;    
+                       }
+                       if(wrq->u.data.length<16){
+                               ret = -1;
+                               break;
+                       }
+                       if(copy_to_user((void *)(wrq->u.data.pointer), pWapiInfo->lastTxMulticastPN, 16)==0)
+                               wrq->u.data.length = 16;
+                       break;
+               }
+               case WAPI_CMD_GET_WAPIIE:
+               {
+                       PRT_WAPI_T              pWapiInfo = &ieee->wapiInfo;
+                       u8                              data[512];
+                       u8                              Length = 0;
+                       
+                       WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_GET_WAPIIE!\n",__FUNCTION__);
+                       if (!ieee->WapiSupport){
+                               ret = -1;
+                               break;    
+                       }
+                       if(wrq->u.data.length<257){
+                               ret = -1;
+                               break;
+                       }
+
+                       if(ieee->iw_mode == IW_MODE_INFRA){
+                               data[0]= pWapiInfo->assoReqWapiIELength;
+                               Length ++;
+                               memcpy(data+Length,pWapiInfo->assoReqWapiIE,pWapiInfo->assoReqWapiIELength);
+                               Length += pWapiInfo->assoReqWapiIELength;
+                       }
+                       else if(ieee->iw_mode == IW_MODE_ADHOC){
+                               WAPI_DATA(WAPI_API, "GetWapiIE - ADHOC", pWapiInfo->sendbeaconWapiIE, pWapiInfo->sendbeaconWapiIELength);
+                               data[0] = pWapiInfo->sendbeaconWapiIELength;
+                               Length++;
+                               memcpy(data+Length,pWapiInfo->sendbeaconWapiIE,pWapiInfo->sendbeaconWapiIELength);
+                               Length += pWapiInfo->sendbeaconWapiIELength;
+                       }
+                       
+                       if(copy_to_user((void *)(wrq->u.data.pointer), data, Length)==0)
+                               wrq->u.data.length = Length;
+                       break;
+               }
+               case WAPI_CMD_SET_SSID:
+               {
+                       u8 ssid[IW_ESSID_MAX_SIZE + 1];
+                       
+                       WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_SET_SSID!\n",__FUNCTION__);
+                       if (!ieee->WapiSupport){
+                               ret = -1;
+                               break;    
+                       }
+                       if((wrq->u.data.length == 0) || (NULL == wrq->u.data.pointer)){
+                               ret = -1;
+                               break;
+                       }
+                       if(wrq->u.data.length > IW_ESSID_MAX_SIZE){
+                               ret = -1;
+                               break;
+                       }
+                       printk("===>%s(): wrq->u.essid.flags is %d\n",__FUNCTION__,wrq->u.essid.flags);
+                       copy_from_user(ssid, (u8 *)wrq->u.essid.pointer, wrq->u.essid.length);
+
+#ifdef TO_DO_LIST
+                       if(!ieee->wapiInfo.bWapiEnable)
+                               SetEncryptState(dev);
+#endif                 
+                       if((priv->bHwRadioOff == true) || (!priv->up)){
+                               ret = -1;
+                               break;
+                       }
+                       ret = rtllib_wx_set_essid(ieee,NULL,(union iwreq_data *)&(wrq->u),ssid);
+                       
+                       break;
+               }
+               case WAPI_CMD_GET_BSSID:
+                       WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_GET_BSSID!\n",__FUNCTION__);
+                       if (!ieee->WapiSupport){
+                               ret = -1;
+                               break;    
+                       }
+                       if((ieee->iw_mode == IW_MODE_INFRA) || (ieee->iw_mode == IW_MODE_ADHOC) ){
+                               if(copy_to_user((void *)(wrq->u.data.pointer), ieee->current_network.bssid, ETH_ALEN)==0)
+                                       wrq->u.data.length = ETH_ALEN;
+                       }else{
+                               ret = -1;
+                       }
+                       break;
+#if 0                  
+               case WAPI_CMD_GET_LINK_STATUS:
+               {
+                       u8 connect_status = 0;  
+                       
+                       WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_GET_LINK_STATUS!\n",__FUNCTION__);
+                       if(ieee->state == IEEE80211_LINKED)
+                               connect_status = 1;
+                       if(copy_to_user((void *)(wrq->u.data.pointer), &connect_status, sizeof(u8))==0)
+                               wrq->u.data.length = sizeof(u8);
+                       break;
+               }
+#endif
+               case WAPI_CMD_SET_IW_MODE:
+               {
+                       union iwreq_data *wrqu = (union iwreq_data *)&(wrq->u);
+                       WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_SET_IW_MODE!\n",__FUNCTION__);
+                       if (!ieee->WapiSupport){
+                               ret = -1;
+                               break;    
+                       }
+                       WAPI_TRACE(WAPI_API, "%s(): Set iw_mode %d!\n",__FUNCTION__, wrqu->mode);
+                       wapi_ioctl_set_mode(dev, NULL, wrqu, NULL);
+                       if(wrqu->mode == IW_MODE_ADHOC)
+                               ConstructWapiIEForInit(ieee);
+                       break;
+               }
+               case WAPI_CMD_SET_DISASSOCIATE:
+               {
+                       u8 destAddr[6];
+                       
+                       WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_SET_DISASSOCIATE!\n",__FUNCTION__);
+                       if (!ieee->WapiSupport){
+                               ret = -1;
+                               break;    
+                       }
+                       if(wrq->u.data.length != 6){
+                               ret = -1;
+                               break;
+                       }
+                       copy_from_user(destAddr, (u8 *)(wrq->u.data.pointer), wrq->u.data.length);
+
+                       if(ieee->iw_mode == IW_MODE_INFRA){
+                               SendDisassociation(ieee,1,deauth_lv_ss);
+                               ieee80211_disassociate_from_app(ieee);
+                       }else if(ieee->iw_mode == IW_MODE_ADHOC){
+                               WAPI_TRACE(WAPI_API, "%s(): Disassociate "MAC_FMT"!\n",__FUNCTION__, MAC_ARG(destAddr));
+                               WapiReturnOneStaInfo(ieee, destAddr, 1);
+                               DelStaInfo(ieee, destAddr);
+                       }
+                       break;
+               }
+               case WAPI_CMD_SAVE_PID:
+               {
+                       u8 strPID[10];
+                       u32 len = 0;
+                       int i = 0;
+
+                       WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_SAVE_PID!\n",__FUNCTION__);
+                       if (!ieee->WapiSupport){
+                               ret = -1;
+                               break;    
+                       }
+                       if ( !wrq->u.data.pointer ){
+                               ret = -1;
+                               break;
+                       }
+
+                       len = wrq->u.data.length;
+                       memset(strPID, 0, sizeof(strPID));
+                       if(copy_from_user(strPID, (void *)wrq->u.data.pointer, len)){
+                               ret = -1;
+                               break;
+                       }
+
+                       pid_wapi = 0;
+                       for(i = 0; i < len; i++) {
+                               pid_wapi = pid_wapi * 10 + (strPID[i] - 48);
+                       }               
+                       WAPI_TRACE(WAPI_API, "%s(): strPID=%s pid_wapi=%d!\n",__FUNCTION__, strPID, pid_wapi);
+                       break;  
+               }
+               case WAPI_CMD_DEQUEUE:
+               {
+                       int QueueDataLen = 0;
+
+                       WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_DEQUEUE!\n",__FUNCTION__);
+                       if((ret = WAPI_DeQueue(&ieee->wapi_queue_lock, ieee->wapi_queue, QueueData, &QueueDataLen)) != 0){
+                               if(copy_to_user((void *)(wrq->u.data.pointer), DATAQUEUE_EMPTY, sizeof(DATAQUEUE_EMPTY))==0)
+                                       wrq->u.data.length = sizeof(DATAQUEUE_EMPTY);
+                       }else{
+                               if(copy_to_user((void *)wrq->u.data.pointer, (void *)QueueData, QueueDataLen)==0)
+                                       wrq->u.data.length = QueueDataLen;
+                       }       
+                       break;
+               }
+               default:
+                       WAPI_TRACE(WAPI_ERR, "%s(): Error CMD!\n",__FUNCTION__);
+                       break;
+       }
+       
+       return ret;
+}
+#endif
+
+/* based on ipw2200 driver */
+int rtl8192_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       struct iwreq *wrq = (struct iwreq *)rq;
+       int ret=-1;
+       struct rtllib_device *ieee = priv->rtllib;
+       u32 key[4];
+       u8 broadcast_addr[6] = {0xff,0xff,0xff,0xff,0xff,0xff};
+       u8 zero_addr[6] = {0};
+       struct iw_point *p = &wrq->u.data;
+
+       down(&priv->wx_sem);
+
+       switch (cmd) {
+               case RTL_IOCTL_WPA_SUPPLICANT:
+               {
+                       struct ieee_param *ipw = NULL;
+       if (p->length < sizeof(struct ieee_param) || !p->pointer){
+               ret = -EINVAL;
+               goto out;
+       }
+
+       ipw = (struct ieee_param *)kmalloc(p->length, GFP_KERNEL);
+       if (ipw == NULL){
+               ret = -ENOMEM;
+               goto out;
+       }
+       if (copy_from_user(ipw, p->pointer, p->length)) {
+               kfree(ipw);
+               ret = -EFAULT;
+               goto out;
+       }
+
+                       if (ipw->cmd == IEEE_CMD_SET_ENCRYPTION)
+                       {
+                               if (ipw->u.crypt.set_tx)
+                               {
+                                       if (strcmp(ipw->u.crypt.alg, "CCMP") == 0)
+                                               ieee->pairwise_key_type = KEY_TYPE_CCMP;
+                                       else if (strcmp(ipw->u.crypt.alg, "TKIP") == 0)
+                                               ieee->pairwise_key_type = KEY_TYPE_TKIP;
+                                       else if (strcmp(ipw->u.crypt.alg, "WEP") == 0)
+                                       {
+                                               if (ipw->u.crypt.key_len == 13)
+                                                       ieee->pairwise_key_type = KEY_TYPE_WEP104;
+                                               else if (ipw->u.crypt.key_len == 5)
+                                                       ieee->pairwise_key_type = KEY_TYPE_WEP40;
+                                       }
+                                       else
+                                               ieee->pairwise_key_type = KEY_TYPE_NA;
+
+                                       if (ieee->pairwise_key_type)
+                                       {
+                                               if (memcmp(ieee->ap_mac_addr, zero_addr, 6) == 0)
+                                                       ieee->iw_mode = IW_MODE_ADHOC;
+
+                                               memcpy((u8*)key, ipw->u.crypt.key, 16);
+                                               EnableHWSecurityConfig8192(dev);
+#ifdef _RTL8192_EXT_PATCH_
+                                               set_swcam(dev, 4, ipw->u.crypt.idx, ieee->pairwise_key_type, (u8*)ieee->ap_mac_addr, 0, key,0);
+#else
+                                               set_swcam(dev, 4, ipw->u.crypt.idx, ieee->pairwise_key_type, (u8*)ieee->ap_mac_addr, 0, key);
+#endif
+                                               setKey(dev, 4, ipw->u.crypt.idx, ieee->pairwise_key_type, (u8*)ieee->ap_mac_addr, 0, key);
+                                               if (ieee->iw_mode == IW_MODE_ADHOC){  
+#ifdef _RTL8192_EXT_PATCH_
+                                                       set_swcam(dev, ipw->u.crypt.idx, ipw->u.crypt.idx, ieee->pairwise_key_type, (u8*)ieee->ap_mac_addr, 0, key,0);
+#else
+                                                       set_swcam(dev, ipw->u.crypt.idx, ipw->u.crypt.idx, ieee->pairwise_key_type, (u8*)ieee->ap_mac_addr, 0, key);
+#endif
+                                                       setKey(dev, ipw->u.crypt.idx, ipw->u.crypt.idx, ieee->pairwise_key_type, (u8*)ieee->ap_mac_addr, 0, key);
+                                               }
+                                       }
+#ifdef RTL8192E
+                                       if ((ieee->pairwise_key_type == KEY_TYPE_CCMP) && ieee->pHTInfo->bCurrentHTSupport){
+                                               write_nic_byte(dev, 0x173, 1); 
+                                       }
+#endif
+
+                               }
+                               else 
+                               {
+                                       memcpy((u8*)key, ipw->u.crypt.key, 16);
+                                       if (strcmp(ipw->u.crypt.alg, "CCMP") == 0)
+                                               ieee->group_key_type= KEY_TYPE_CCMP;
+                                       else if (strcmp(ipw->u.crypt.alg, "TKIP") == 0)
+                                               ieee->group_key_type = KEY_TYPE_TKIP;
+                                       else if (strcmp(ipw->u.crypt.alg, "WEP") == 0)
+                                       {
+                                               if (ipw->u.crypt.key_len == 13)
+                                                       ieee->group_key_type = KEY_TYPE_WEP104;
+                                               else if (ipw->u.crypt.key_len == 5)
+                                                       ieee->group_key_type = KEY_TYPE_WEP40;
+                                       }
+                                       else
+                                               ieee->group_key_type = KEY_TYPE_NA;
+
+                                       if (ieee->group_key_type)
+                                       {
+#ifdef _RTL8192_EXT_PATCH_
+                                               set_swcam(      dev, 
+                                                               ipw->u.crypt.idx,
+                                                               ipw->u.crypt.idx,               
+                                                               ieee->group_key_type,   
+                                                               broadcast_addr, 
+                                                               0,              
+                                                               key,            
+                                                               0);
+#else
+                                               set_swcam(      dev, 
+                                                               ipw->u.crypt.idx,
+                                                               ipw->u.crypt.idx,               
+                                                               ieee->group_key_type,   
+                                                               broadcast_addr, 
+                                                               0,              
+                                                               key);           
+#endif
+                                               setKey( dev, 
+                                                               ipw->u.crypt.idx,
+                                                               ipw->u.crypt.idx,               
+                                                               ieee->group_key_type,   
+                                                               broadcast_addr, 
+                                                               0,              
+                                                               key);           
+                                       }
+                               }
+                       }
+#ifdef JOHN_DEBUG
+                       {
+                               int i;
+                               printk("@@ wrq->u pointer = ");
+                               for(i=0;i<wrq->u.data.length;i++){
+                                       if(i%10==0) printk("\n");
+                                       printk( "%8x|", ((u32*)wrq->u.data.pointer)[i] );
+                               }
+                               printk("\n");
+                       }
+#endif 
+#ifdef _RTL8192_EXT_PATCH_
+                       ret = rtllib_wpa_supplicant_ioctl(priv->rtllib, &wrq->u.data,0);
+#else
+                       ret = rtllib_wpa_supplicant_ioctl(priv->rtllib, &wrq->u.data);
+#endif
+                       kfree(ipw);
+                       break; 
+               }
+#if defined (RTL8192S_WAPI_SUPPORT)
+               case WAPI_CMD_GET_WAPI_SUPPORT:
+               case WAPI_CMD_SET_WAPI_ENABLE:
+               case WAPI_CMD_SET_WAPI_PSK:
+               case WAPI_CMD_SET_KEY:
+               case WAPI_CMD_SET_MULTICAST_PN:
+               case WAPI_CMD_GET_PN:
+               case WAPI_CMD_GET_WAPIIE:
+               case WAPI_CMD_SET_SSID:
+               case WAPI_CMD_GET_BSSID:
+               case WAPI_CMD_SET_IW_MODE:
+               case WAPI_CMD_SET_DISASSOCIATE:
+               case WAPI_CMD_SAVE_PID:
+               case WAPI_CMD_DEQUEUE:
+                       ret = WAPI_Ioctl(dev, wrq, cmd);
+                       break;
+#endif
+               default:
+                       ret = -EOPNOTSUPP;
+                       break;
+       }
+
+out:
+       up(&priv->wx_sem);
+
+       return ret;
+}
+
+irqreturn_type rtl8192_interrupt(int irq, void *netdev, struct pt_regs *regs)
+{
+    struct net_device *dev = (struct net_device *) netdev;
+    struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+#ifdef _RTL8192_EXT_PATCH_
+    struct net_device *meshdev = ((struct rtllib_device *)netdev_priv_rsl(dev))->meshdev;
+#endif
+    unsigned long flags;
+    u32 inta;
+    u32 intb;
+    intb = 0;
+    if(priv->irq_enabled == 0){
+               goto done;
+    }
+
+    spin_lock_irqsave(&priv->irq_th_lock,flags);
+
+    priv->ops->interrupt_recognized(dev, &inta, &intb);
+    priv->stats.shints++;
+
+    if (!inta) {
+        spin_unlock_irqrestore(&priv->irq_th_lock,flags);
+               goto done;
+    }
+
+    if (inta == 0xffff) {
+        spin_unlock_irqrestore(&priv->irq_th_lock,flags);
+               goto done;
+    }
+
+    priv->stats.ints++;
+
+#ifdef _RTL8192_EXT_PATCH_
+       if (!netif_running(dev) && !netif_running(meshdev)) 
+#else
+       if (!netif_running(dev)) 
+#endif
+       {
+        spin_unlock_irqrestore(&priv->irq_th_lock,flags);
+               goto done;
+    }
+
+#if defined RTL8192SE 
+    if(intb & IMR_TBDOK){
+        RT_TRACE(COMP_INTR, "beacon ok interrupt!\n");
+        priv->stats.txbeaconokint++;
+    }
+
+    if(intb & IMR_TBDER){
+        RT_TRACE(COMP_INTR, "beacon ok interrupt!\n");
+        priv->stats.txbeaconerr++;
+    }
+#else
+    if(inta & IMR_TBDOK){
+        RT_TRACE(COMP_INTR, "beacon ok interrupt!\n");
+        priv->stats.txbeaconokint++;
+    }
+
+    if(inta & IMR_TBDER){
+        RT_TRACE(COMP_INTR, "beacon ok interrupt!\n");
+        priv->stats.txbeaconerr++;
+    }
+#endif
+
+    if(inta & IMR_BDOK) {
+        RT_TRACE(COMP_INTR, "beacon interrupt!\n");
+        rtl8192_tx_isr(dev, BEACON_QUEUE);
+    }
+
+    if(inta  & IMR_MGNTDOK ) {
+        RT_TRACE(COMP_INTR, "Manage ok interrupt!\n");
+        priv->stats.txmanageokint++;
+        rtl8192_tx_isr(dev,MGNT_QUEUE);
+        spin_unlock_irqrestore(&priv->irq_th_lock,flags);
+
+             if (priv->rtllib->ack_tx_to_ieee){
+                 if (rtl8192_is_tx_queue_empty(dev)){
+                     priv->rtllib->ack_tx_to_ieee = 0;
+                     rtllib_ps_tx_ack(priv->rtllib, 1);
+                 }
+             }
+
+        spin_lock_irqsave(&priv->irq_th_lock,flags);
+    }
+
+#ifndef RTL8192CE
+    if (inta & IMR_COMDOK) {
+        priv->stats.txcmdpktokint++;
+        rtl8192_tx_isr(dev,TXCMD_QUEUE);
+    }
+#endif
+
+    if (inta & IMR_HIGHDOK) {
+        rtl8192_tx_isr(dev,HIGH_QUEUE);
+    }
+
+#ifdef RTL8192SE
+    if ((inta & IMR_ROK) || (inta & IMR_RXCMDOK)){
+#else
+    if (inta & IMR_ROK) {
+#endif
+        priv->stats.rxint++;
+       priv->InterruptLog.nIMR_ROK++;
+        tasklet_schedule(&priv->irq_rx_tasklet);
+    }
+
+    if (inta & IMR_BcnInt) {
+        RT_TRACE(COMP_INTR, "prepare beacon for interrupt!\n");
+        tasklet_schedule(&priv->irq_prepare_beacon_tasklet);
+    }
+
+    if (inta & IMR_RDU) {
+        RT_TRACE(COMP_INTR, "rx descriptor unavailable!\n");
+        priv->stats.rxrdu++;
+#ifndef RTL8192CE
+        write_nic_dword(dev,INTA_MASK,read_nic_dword(dev, INTA_MASK) & ~IMR_RDU); 
+#endif    
+        tasklet_schedule(&priv->irq_rx_tasklet);
+    }
+
+    if (inta & IMR_RXFOVW) {
+        RT_TRACE(COMP_INTR, "rx overflow !\n");
+        priv->stats.rxoverflow++;
+        tasklet_schedule(&priv->irq_rx_tasklet);
+    }
+
+    if (inta & IMR_TXFOVW) priv->stats.txoverflow++;
+
+    if (inta & IMR_BKDOK) { 
+        RT_TRACE(COMP_INTR, "BK Tx OK interrupt!\n");
+        priv->stats.txbkokint++;
+        priv->rtllib->LinkDetectInfo.NumTxOkInPeriod++;
+        rtl8192_tx_isr(dev,BK_QUEUE);
+    }
+
+    if (inta & IMR_BEDOK) { 
+        RT_TRACE(COMP_INTR, "BE TX OK interrupt!\n");
+        priv->stats.txbeokint++;
+        priv->rtllib->LinkDetectInfo.NumTxOkInPeriod++;
+        rtl8192_tx_isr(dev,BE_QUEUE);
+    }
+
+    if (inta & IMR_VIDOK) { 
+        RT_TRACE(COMP_INTR, "VI TX OK interrupt!\n");
+        priv->stats.txviokint++;
+        priv->rtllib->LinkDetectInfo.NumTxOkInPeriod++;
+        rtl8192_tx_isr(dev,VI_QUEUE);
+    }
+
+    if (inta & IMR_VODOK) { 
+        priv->stats.txvookint++;
+        RT_TRACE(COMP_INTR, "Vo TX OK interrupt!\n");
+        priv->rtllib->LinkDetectInfo.NumTxOkInPeriod++;
+        rtl8192_tx_isr(dev,VO_QUEUE);
+    }
+
+    spin_unlock_irqrestore(&priv->irq_th_lock,flags);
+
+done:
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
+    return;
+#else
+    return IRQ_HANDLED;
+#endif
+}
+
+bool rtl8192_pci_findadapter(struct pci_dev *pdev, struct net_device *dev)
+{
+       u16  DeviceID;
+       u8 RevisionID = 0;
+       
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+
+       pci_read_config_word(pdev, 0x2, &DeviceID);
+       pci_read_config_byte(pdev, 0x8, &RevisionID);
+       if (DeviceID == HAL_HW_PCI_8190_DEVICE_ID ||DeviceID == HAL_HW_PCI_0045_DEVICE_ID ||
+               DeviceID == HAL_HW_PCI_0046_DEVICE_ID ||DeviceID == HAL_HW_PCI_DLINK_DEVICE_ID){
+               printk("Adapter(8190 PCI) is found - DeviceID=%x\n", DeviceID);
+               priv->ops->nic_type = priv->card_8192 = NIC_8190P;
+       } else if (DeviceID == HAL_HW_PCI_8192_DEVICE_ID ||DeviceID == HAL_HW_PCI_0044_DEVICE_ID ||
+               DeviceID == HAL_HW_PCI_0047_DEVICE_ID || DeviceID == HAL_HW_PCI_8192SE_DEVICE_ID ||
+               DeviceID == HAL_HW_PCI_8174_DEVICE_ID || DeviceID == HAL_HW_PCI_8173_DEVICE_ID ||
+               DeviceID == HAL_HW_PCI_8172_DEVICE_ID || DeviceID == HAL_HW_PCI_8171_DEVICE_ID) {
+               
+               switch(RevisionID)
+               {
+                       case HAL_HW_PCI_REVISION_ID_8192PCIE:
+                               printk("Adapter(8192 PCI-E) is found - DeviceID=%x\n", DeviceID);
+                               priv->ops->nic_type = priv->card_8192 = NIC_8192E;
+                               break;
+                       case HAL_HW_PCI_REVISION_ID_8192SE:
+                               printk("Adapter(8192SE) is found - DeviceID=%x\n", DeviceID);
+                               priv->card_8192 = NIC_8192SE;
+                               break;
+                       default:
+                               printk("UNKNOWN nic type(%4x:%4x)\n", pdev->vendor, pdev->device);
+                               priv->card_8192 = NIC_UNKNOWN;
+
+                       return false;
+                       break;
+                               
+               }
+       } else 
+               if (DeviceID == HAL_HW_PCI_8192CET_DEVICE_ID ||DeviceID == HAL_HW_PCI_8192CE_DEVICE_ID ||
+               DeviceID == HAL_HW_PCI_8191CE_DEVICE_ID ||DeviceID == HAL_HW_PCI_8188CE_DEVICE_ID) {
+                       printk("Adapter(8192CE) is found - DeviceID=%x\n", DeviceID);
+                       priv->ops->nic_type = priv->card_8192 = NIC_8192CE;
+       } else {
+               printk("Unknown device - DeviceID=%x\n", DeviceID);
+               priv->ops->nic_type = priv->card_8192 = NIC_8192DE;
+       }
+               
+       return true;
+}
+
+/****************************************************************************
+     ---------------------------- PCI_STUFF---------------------------
+*****************************************************************************/
+#ifdef HAVE_NET_DEVICE_OPS
+static const struct net_device_ops rtl8192_netdev_ops = {
+       .ndo_open = rtl8192_open,
+       .ndo_stop = rtl8192_close,
+       .ndo_tx_timeout = tx_timeout,
+       .ndo_do_ioctl = rtl8192_ioctl,
+       .ndo_set_multicast_list = r8192_set_multicast,
+       .ndo_set_mac_address = r8192_set_mac_adr,
+       .ndo_validate_addr = eth_validate_addr,
+       .ndo_change_mtu = eth_change_mtu,
+       .ndo_start_xmit = rtllib_xmit,
+};
+#endif
+
+static int __devinit rtl8192_pci_probe(struct pci_dev *pdev,
+                        const struct pci_device_id *id)
+{
+       unsigned long ioaddr = 0;
+       struct net_device *dev = NULL;
+       struct r8192_priv *priv= NULL;
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
+       struct rtl819x_ops *ops = (struct rtl819x_ops *)(id->driver_data);
+#endif
+       
+#ifdef CONFIG_RTL8192_IO_MAP
+       unsigned long pio_start, pio_len, pio_flags;
+#else
+       unsigned long pmem_start, pmem_len, pmem_flags;
+#endif 
+       int err = 0;
+#ifdef _RTL8192_EXT_PATCH_
+       int result;
+       struct net_device *meshdev = NULL;
+       struct meshdev_priv *mpriv;
+       char meshifname[]="mesh0";
+#endif 
+       bool bdma64 = false;
+
+       RT_TRACE(COMP_INIT,"Configuring chip resources");
+       
+       if( pci_enable_device (pdev) ){
+               RT_TRACE(COMP_ERR,"Failed to enable PCI device");
+               return -EIO;
+       }
+
+       pci_set_master(pdev);
+
+#ifdef CONFIG_64BIT_DMA
+       if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
+               printk("RTL819xCE: Using 64bit DMA\n");
+               if (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64))) {
+                       printk( "Unable to obtain 64bit DMA for consistent allocations\n");
+                       pci_disable_device(pdev);
+                       return -ENOMEM;
+               }
+               bdma64 = true;
+       } 
+       else 
+#endif
+       {
+       pci_set_dma_mask(pdev, 0xffffff00ULL);
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
+       pci_set_consistent_dma_mask(pdev,0xffffff00ULL);
+#endif 
+       }
+       dev = alloc_rtllib(sizeof(struct r8192_priv));
+       if (!dev)
+               return -ENOMEM;
+       
+       if(bdma64){
+               dev->features |= NETIF_F_HIGHDMA;
+       }
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
+       SET_MODULE_OWNER(dev);
+#endif
+
+       pci_set_drvdata(pdev, dev);     
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
+       SET_NETDEV_DEV(dev, &pdev->dev);
+#endif
+       priv = rtllib_priv(dev);
+       priv->rtllib = (struct rtllib_device *)netdev_priv_rsl(dev);
+       priv->pdev=pdev;
+       priv->rtllib->pdev=pdev;
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
+       if((pdev->subsystem_vendor == PCI_VENDOR_ID_DLINK)&&(pdev->subsystem_device == 0x3304)){
+               priv->rtllib->bSupportRemoteWakeUp = 1;
+       } else 
+#endif
+       {
+               priv->rtllib->bSupportRemoteWakeUp = 0;
+       }
+
+#ifdef CONFIG_RTL8192_IO_MAP
+       pio_start = (unsigned long)pci_resource_start (pdev, 0);
+       pio_len = (unsigned long)pci_resource_len (pdev, 0);
+       pio_flags = (unsigned long)pci_resource_flags (pdev, 0);
+       
+       if (!(pio_flags & IORESOURCE_IO)) {
+               RT_TRACE(COMP_ERR,"region #0 not a PIO resource, aborting");
+               goto fail;
+       }
+       
+       if( ! request_region( pio_start, pio_len, DRV_NAME ) ){
+               RT_TRACE(COMP_ERR,"request_region failed!");
+               goto fail;
+       }
+       
+       ioaddr = pio_start;
+       dev->base_addr = ioaddr; 
+#else
+#ifdef RTL8192CE
+       pmem_start = pci_resource_start(pdev, 2);
+       pmem_len = pci_resource_len(pdev, 2);
+       pmem_flags = pci_resource_flags (pdev, 2);
+#else
+       pmem_start = pci_resource_start(pdev, 1);
+       pmem_len = pci_resource_len(pdev, 1);
+       pmem_flags = pci_resource_flags (pdev, 1);
+#endif
+       
+       if (!(pmem_flags & IORESOURCE_MEM)) {
+               RT_TRACE(COMP_ERR,"region #1 not a MMIO resource, aborting");
+               goto fail;
+       }
+       
+       if (!request_mem_region(pmem_start, pmem_len, DRV_NAME)) {
+               RT_TRACE(COMP_ERR,"request_mem_region failed!");
+               goto fail;
+       }
+       
+       
+       ioaddr = (unsigned long)ioremap_nocache( pmem_start, pmem_len); 
+       if( ioaddr == (unsigned long)NULL ){
+               RT_TRACE(COMP_ERR,"ioremap failed!");
+               goto fail1;
+       }
+       
+       dev->mem_start = ioaddr; 
+       dev->mem_end = ioaddr + pci_resource_len(pdev, 0); 
+       
+#endif 
+#if defined RTL8192SE || defined RTL8192CE
+        pci_write_config_byte(pdev, 0x81,0);
+        pci_write_config_byte(pdev,0x44,0);
+        pci_write_config_byte(pdev,0x04,0x06);
+        pci_write_config_byte(pdev,0x04,0x07);
+#endif        
+
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
+       priv->ops = ops;
+#else
+#if defined RTL8190P || defined RTL8192E
+       priv->ops = &rtl819xp_ops;
+#else
+       priv->ops = &rtl8192se_ops;
+#endif
+#endif
+
+       if(rtl8192_pci_findadapter(pdev, dev) == false)
+               goto fail1;
+
+       dev->irq = pdev->irq;
+       priv->irq = 0;
+
+#ifdef HAVE_NET_DEVICE_OPS
+       dev->netdev_ops = &rtl8192_netdev_ops;
+#else  
+       dev->open = rtl8192_open;
+       dev->stop = rtl8192_close;
+       dev->tx_timeout = tx_timeout;
+       dev->do_ioctl = rtl8192_ioctl;
+       dev->set_multicast_list = r8192_set_multicast;
+       dev->set_mac_address = r8192_set_mac_adr;
+       dev->hard_start_xmit = rtllib_xmit;
+#endif 
+
+#if WIRELESS_EXT >= 12
+#if WIRELESS_EXT < 17
+        dev->get_wireless_stats = r8192_get_wireless_stats;
+#endif
+        dev->wireless_handlers = (struct iw_handler_def *) &r8192_wx_handlers_def;
+#endif
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) 
+       dev->ethtool_ops = &rtl819x_ethtool_ops;
+#endif
+
+       dev->type = ARPHRD_ETHER;
+       dev->watchdog_timeo = HZ*3;     
+
+       if (dev_alloc_name(dev, ifname) < 0){
+                RT_TRACE(COMP_INIT, "Oops: devname already taken! Trying wlan%%d...\n");
+               dev_alloc_name(dev, ifname);
+        }
+       
+       RT_TRACE(COMP_INIT, "Driver probe completed1\n");
+       if(rtl8192_init(dev)!=0){ 
+               RT_TRACE(COMP_ERR, "Initialization failed");
+               goto fail1;
+       }
+
+#if defined CONFIG_CRDA && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30))
+       if(!rtl8192_register_wiphy_dev(dev))
+               return -1;
+#endif
+
+       netif_carrier_off(dev);
+       netif_stop_queue(dev);
+       
+       register_netdev(dev);
+       RT_TRACE(COMP_INIT, "dev name: %s\n",dev->name);
+       err = rtl_debug_module_init(priv, dev->name);
+       if (err) {
+               RT_TRACE(COMP_DBG, "failed to create debugfs files. Ignoring error: %d\n", err);        
+       }
+       rtl8192_proc_init_one(dev);
+       
+#ifdef ENABLE_GPIO_RADIO_CTL
+       if(priv->polling_timer_on == 0){
+               check_rfctrl_gpio_timer((unsigned long)dev);
+       }
+#endif
+#ifdef _RTL8192_EXT_PATCH_
+       meshdev = alloc_netdev(sizeof(struct meshdev_priv),meshifname,meshdev_init);
+       netif_stop_queue(meshdev);
+       memcpy(meshdev->dev_addr, dev->dev_addr, ETH_ALEN);
+       DMESG("Card MAC address for meshdev is "MAC_FMT, MAC_ARG(meshdev->dev_addr));
+
+       meshdev->base_addr = dev->base_addr;
+       meshdev->irq = dev->irq;
+       meshdev->mem_start = dev->mem_start;
+       meshdev->mem_end = dev->mem_end;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)
+       SET_NETDEV_DEV(meshdev, dev->dev.parent);
+#endif
+
+       if ((result = register_netdev(meshdev)))
+       {
+               printk("Error %i registering device %s",result, meshdev->name);
+               goto fail;      
+       }
+       else
+       {
+               mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+               priv->rtllib->meshdev=meshdev;
+               priv->rtllib->meshstats=meshdev_stats(meshdev);
+               priv->rtllib->only_mesh = 1;  
+               priv->rtllib->p2pmode = 0;
+               priv->rtllib->is_server_eth0 = 0;
+               priv->rtllib->serverExtChlOffset = 0;
+               priv->rtllib->APExtChlOffset = 0;
+               mpriv->rtllib = priv->rtllib;
+               mpriv->priv = priv;
+       }
+#endif
+       
+#ifdef RTL8192CE
+       mdelay(1000);
+#endif
+       RT_TRACE(COMP_INIT, "Driver probe completed\n");
+       return 0;       
+
+fail1:
+#ifdef CONFIG_RTL8192_IO_MAP
+               
+       if( dev->base_addr != 0 ){
+                       
+               release_region(dev->base_addr, 
+              pci_resource_len(pdev, 0) );
+       }
+#else
+       if( dev->mem_start != (unsigned long)NULL ){
+               iounmap( (void *)dev->mem_start );
+#ifdef RTL8192CE
+               release_mem_region( pci_resource_start(pdev, 2), 
+                                   pci_resource_len(pdev, 2) );
+#else
+               release_mem_region( pci_resource_start(pdev, 1), 
+                                   pci_resource_len(pdev, 1) );
+#endif
+       }
+#endif 
+       
+fail:
+       if(dev){
+               
+               if (priv->irq) {
+                       free_irq(dev->irq, dev);
+                       dev->irq=0;
+               }
+               free_rtllib(dev);
+       }
+       
+       pci_disable_device(pdev);
+       
+       DMESG("wlan driver load failed\n");
+       pci_set_drvdata(pdev, NULL);
+       return -ENODEV;
+       
+}
+
+static void __devexit rtl8192_pci_disconnect(struct pci_dev *pdev)
+{
+       struct net_device *dev = pci_get_drvdata(pdev);
+       struct r8192_priv *priv ;
+#ifdef _RTL8192_EXT_PATCH_
+       struct net_device *meshdev;
+#endif
+
+       if(dev){
+               
+               unregister_netdev(dev);
+               
+               priv = rtllib_priv(dev);
+#ifdef _RTL8192_EXT_PATCH_
+               if(priv && priv->mshobj)
+               {
+                       if(priv->mshobj->ext_patch_remove_proc)
+                               priv->mshobj->ext_patch_remove_proc(priv);
+                       priv->rtllib->ext_patch_rtllib_start_protocol = 0;
+                       priv->rtllib->ext_patch_rtllib_stop_protocol = 0;
+                       priv->rtllib->ext_patch_rtllib_probe_req_1 = 0;
+                       priv->rtllib->ext_patch_rtllib_probe_req_2 = 0;
+                       priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_auth =0;
+                       priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_deauth =0;
+                       priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_peerlink_open = 0;
+                       priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_peerlink_confirm = 0;
+                       priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_peerlink_close = 0;
+                       priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_linkmetric_report= 0;
+                       priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_linkmetric_req= 0;
+                       priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_pathselect_preq = 0;
+                       priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_pathselect_prep=0;
+                       priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_pathselect_perr = 0;
+                       priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_pathselect_rann=0;
+                       priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_pathselect_pann=0;
+                       priv->rtllib->ext_patch_rtllib_ext_stop_scan_wq_set_channel = 0;
+                       priv->rtllib->ext_patch_rtllib_process_probe_response_1 = 0;
+                       priv->rtllib->ext_patch_rtllib_rx_mgt_on_probe_req = 0;
+                       priv->rtllib->ext_patch_rtllib_rx_mgt_update_expire = 0;
+                       priv->rtllib->ext_patch_rtllib_rx_on_rx = 0;
+                       priv->rtllib->ext_patch_get_beacon_get_probersp = 0;
+                       priv->rtllib->ext_patch_rtllib_rx_frame_get_hdrlen = 0;
+                       priv->rtllib->ext_patch_rtllib_rx_frame_get_mac_hdrlen = 0;
+                       priv->rtllib->ext_patch_rtllib_rx_frame_get_mesh_hdrlen_llc = 0;
+                       priv->rtllib->ext_patch_rtllib_rx_is_valid_framectl = 0;
+                       priv->rtllib->ext_patch_rtllib_softmac_xmit_get_rate = 0;
+                       priv->rtllib->ext_patch_rtllib_tx_data = 0;
+                       priv->rtllib->ext_patch_rtllib_is_mesh = 0;
+                       priv->rtllib->ext_patch_rtllib_create_crypt_for_peer = 0;
+                       priv->rtllib->ext_patch_rtllib_get_peermp_htinfo = 0;
+                       priv->rtllib->ext_patch_rtllib_update_ratr_mask = 0;
+                       priv->rtllib->ext_patch_rtllib_send_ath_commit = 0;
+                       priv->rtllib->ext_patch_rtllib_send_ath_confirm = 0;
+                       priv->rtllib->ext_patch_rtllib_rx_ath_commit = 0;
+                       priv->rtllib->ext_patch_rtllib_rx_ath_confirm = 0;
+                        free_mshobj(&priv->mshobj);
+               }
+#endif 
+#ifdef ENABLE_GPIO_RADIO_CTL
+               del_timer_sync(&priv->gpio_polling_timer);
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) 
+               cancel_delayed_work(&priv->gpio_change_rf_wq);
+#endif
+               priv->polling_timer_on = 0;
+#endif
+               rtl_debug_module_remove(priv);
+               rtl8192_proc_remove_one(dev);
+#ifdef _RTL8192_EXT_PATCH_
+               rtl8192_down(dev,true);
+               if(priv && priv->rtllib->meshdev)
+               {
+                       meshdev = priv->rtllib->meshdev;
+                       priv->rtllib->meshdev = NULL;
+               
+                       if(meshdev){
+                               meshdev_down(meshdev);
+                               unregister_netdev(meshdev);
+                       }
+               }
+#else          
+               rtl8192_down(dev,true);
+#endif
+               deinit_hal_dm(dev);
+#ifdef CONFIG_ASPM_OR_D3
+               ;
+#endif
+#ifdef RTL8192SE
+               DeInitSwLeds(dev);
+#endif
+               if (priv->pFirmware)
+               {
+                       vfree(priv->pFirmware);
+                       priv->pFirmware = NULL;
+               }
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
+               destroy_workqueue(priv->priv_wq);
+#endif
+                {
+                    u32 i;
+                    rtl8192_free_rx_ring(dev);
+                    for (i = 0; i < MAX_TX_QUEUE_COUNT; i++) {
+                        rtl8192_free_tx_ring(dev, i);
+                    }
+                }
+
+               if(priv->irq){
+                       
+                       printk("Freeing irq %d\n",dev->irq);
+                       free_irq(dev->irq, dev);
+                       priv->irq=0;
+                       
+               }
+#ifdef CONFIG_RTL8192_IO_MAP
+               if( dev->base_addr != 0 ){
+                       
+                       release_region(dev->base_addr, 
+                                      pci_resource_len(pdev, 0) );
+               }
+#else
+               if( dev->mem_start != (unsigned long)NULL ){
+                       iounmap( (void *)dev->mem_start );
+#ifdef RTL8192CE
+                       release_mem_region( pci_resource_start(pdev, 2), 
+                                   pci_resource_len(pdev, 2) );
+#else
+                       release_mem_region( pci_resource_start(pdev, 1), 
+                                           pci_resource_len(pdev, 1) );
+#endif
+               }
+#endif /*end #ifdef RTL_IO_MAP*/
+               free_rtllib(dev);
+
+               if(priv->scan_cmd)
+                       kfree(priv->scan_cmd);
+
+       } else{
+               priv=rtllib_priv(dev);
+        }
+
+       pci_disable_device(pdev);
+#ifdef RTL8192SE   
+        pci_write_config_byte(pdev, 0x81,1);
+        pci_write_config_byte(pdev,0x44,3);
+#endif
+       RT_TRACE(COMP_DOWN, "wlan driver removed\n");
+}
+
+bool NicIFEnableNIC(struct net_device* dev)
+{
+       bool init_status = true;
+       struct r8192_priv* priv = rtllib_priv(dev);
+       PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl));
+
+       if (priv->up == 0){
+               RT_TRACE(COMP_ERR, "ERR!!! %s(): Driver is already down!\n",__FUNCTION__);
+               priv->bdisable_nic = false;  
+               return RT_STATUS_FAILURE;
+       }
+
+       RT_TRACE(COMP_PS, "===========>%s()\n",__FUNCTION__);
+       priv->bfirst_init = true;
+       init_status = priv->ops->initialize_adapter(dev);
+       if (init_status != true) {
+               RT_TRACE(COMP_ERR,"ERR!!! %s(): initialization is failed!\n",__FUNCTION__);
+               priv->bdisable_nic = false;  
+               return -1;
+       }
+       RT_TRACE(COMP_INIT, "start adapter finished\n");
+       RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC);
+       priv->bfirst_init = false;
+
+       rtl8192_irq_enable(dev);
+       priv->bdisable_nic = false;
+       RT_TRACE(COMP_PS,"<===========%s()\n",__FUNCTION__);
+       return init_status;
+}
+bool NicIFDisableNIC(struct net_device* dev)
+{
+       bool    status = true;
+       struct r8192_priv* priv = rtllib_priv(dev);
+       u8 tmp_state = 0;
+       RT_TRACE(COMP_PS, "=========>%s()\n",__FUNCTION__);
+       priv->bdisable_nic = true;      
+       tmp_state = priv->rtllib->state;
+#ifdef _RTL8192_EXT_PATCH_
+       rtllib_softmac_stop_protocol(priv->rtllib,0,false);
+#else
+       rtllib_softmac_stop_protocol(priv->rtllib,false);
+#endif
+       priv->rtllib->state = tmp_state;
+       rtl8192_cancel_deferred_work(priv);
+       rtl8192_irq_disable(dev);
+
+       priv->ops->stop_adapter(dev, false);
+       RT_TRACE(COMP_PS, "<=========%s()\n",__FUNCTION__);
+
+       return status;
+}
+#ifdef BUILT_IN_MSHCLASS
+extern int msh_init(void);
+extern int msh_exit(void);
+#endif
+
+static int __init rtl8192_pci_module_init(void)
+{
+       int ret;
+       int error;
+
+#ifdef BUILT_IN_CRYPTO
+        ret = arc4_init();
+        if (ret) {
+                printk(KERN_ERR "arc4_init() failed %d\n", ret);
+                return ret;
+        }
+
+
+        ret = michael_mic_init();
+        if (ret) {
+                printk(KERN_ERR "michael_mic_init() failed %d\n", ret);
+                return ret;
+        }
+
+        ret = aes_init();
+        if (ret) {
+                printk(KERN_ERR "aes_init() failed %d\n", ret);
+                return ret;
+        }
+#endif
+#ifdef BUILT_IN_RTLLIB
+       ret = rtllib_init();
+       if (ret) {
+               printk(KERN_ERR "rtllib_init() failed %d\n", ret);
+               return ret;
+       }
+       ret = rtllib_crypto_init();
+       if (ret) {
+               printk(KERN_ERR "rtllib_crypto_init() failed %d\n", ret);
+               return ret;
+       }
+       ret = rtllib_crypto_tkip_init();
+       if (ret) {
+               printk(KERN_ERR "rtllib_crypto_tkip_init() failed %d\n", ret);
+               return ret;
+       }
+       ret = rtllib_crypto_ccmp_init();
+       if (ret) {
+               printk(KERN_ERR "rtllib_crypto_ccmp_init() failed %d\n", ret);
+               return ret;
+       }
+       ret = rtllib_crypto_wep_init();
+       if (ret) {
+               printk(KERN_ERR "rtllib_crypto_wep_init() failed %d\n", ret);
+               return ret;
+       }
+#endif
+#ifdef BUILT_IN_MSHCLASS
+       ret = msh_init();
+       if (ret) {
+               printk(KERN_ERR "msh_init() failed %d\n", ret);
+               return ret;
+       }
+#endif
+       printk(KERN_INFO "\nLinux kernel driver for RTL8192 based WLAN cards\n");
+       printk(KERN_INFO "Copyright (c) 2007-2008, Realsil Wlan Driver\n");
+       RT_TRACE(COMP_INIT, "Initializing module");
+       RT_TRACE(COMP_INIT, "Wireless extensions version %d", WIRELESS_EXT);
+
+       error = rtl_create_debugfs_root();
+       if (error) {
+               RT_TRACE(COMP_DBG, "Create debugfs root fail: %d\n", error);
+               goto err_out;
+       }
+
+       rtl8192_proc_module_init();
+#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22))
+      if(0!=pci_module_init(&rtl8192_pci_driver))
+#else
+      if(0!=pci_register_driver(&rtl8192_pci_driver))
+#endif
+       {
+               DMESG("No device found");
+               /*pci_unregister_driver (&rtl8192_pci_driver);*/
+               return -ENODEV;
+       }
+       return 0;
+err_out:
+        return error;
+
+}
+
+static void __exit rtl8192_pci_module_exit(void)
+{
+       pci_unregister_driver(&rtl8192_pci_driver);
+
+       RT_TRACE(COMP_DOWN, "Exiting");
+       rtl8192_proc_module_remove();
+       rtl_remove_debugfs_root();
+#ifdef BUILT_IN_RTLLIB
+       rtllib_crypto_tkip_exit();
+       rtllib_crypto_ccmp_exit();
+       rtllib_crypto_wep_exit();
+       rtllib_crypto_deinit();
+       rtllib_exit();
+#endif 
+#ifdef BUILT_IN_CRYPTO
+        arc4_exit();
+        michael_mic_exit();
+        aes_fini();
+#endif
+#ifdef BUILT_IN_MSHCLASS
+       msh_exit();
+#endif
+
+}
+
+u8 QueryIsShort(u8 TxHT, u8 TxRate, cb_desc *tcb_desc)
+{
+       u8   tmp_Short;
+
+       tmp_Short = (TxHT==1)?((tcb_desc->bUseShortGI)?1:0):((tcb_desc->bUseShortPreamble)?1:0);
+#if defined RTL8192SE || defined RTL8192CE
+       if(TxHT==1 && TxRate != DESC92S_RATEMCS15)
+#elif defined RTL8192E || defined RTL8190P
+       if(TxHT==1 && TxRate != DESC90_RATEMCS15)
+#endif
+               tmp_Short = 0;
+
+       return tmp_Short;
+}
+
+void check_rfctrl_gpio_timer(unsigned long data)
+{
+       struct r8192_priv* priv = rtllib_priv((struct net_device *)data);
+
+       priv->polling_timer_on = 1;
+
+       queue_delayed_work_rsl(priv->priv_wq,&priv->gpio_change_rf_wq,0);
+
+       mod_timer(&priv->gpio_polling_timer, jiffies + MSECS(RTLLIB_WATCH_DOG_TIME));
+}
+
+/***************************************************************************
+     ------------------- module init / exit stubs ----------------
+****************************************************************************/
+module_init(rtl8192_pci_module_init);
+module_exit(rtl8192_pci_module_exit);
+
+MODULE_DESCRIPTION("Linux driver for Realtek RTL819x WiFi cards");
+MODULE_AUTHOR(DRV_COPYRIGHT " " DRV_AUTHOR);
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
+MODULE_VERSION(DRV_VERSION);
+#endif
+MODULE_LICENSE("GPL");
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 9)
+module_param(ifname, charp, S_IRUGO|S_IWUSR );
+module_param(hwwep,int, S_IRUGO|S_IWUSR);
+module_param(channels,int, S_IRUGO|S_IWUSR);
+#else
+MODULE_PARM(ifname, "s");
+MODULE_PARM(hwwep,"i");
+MODULE_PARM(channels,"i");
+#endif
+
+MODULE_PARM_DESC(ifname," Net interface name, wlan%d=default");
+MODULE_PARM_DESC(hwwep," Try to use hardware WEP support(default use hw. set 0 to use software security)");
+MODULE_PARM_DESC(channels," Channel bitmask for specific locales. NYI");
diff --git a/ubuntu/rtl8192se/rtl_core.h b/ubuntu/rtl8192se/rtl_core.h
new file mode 100644 (file)
index 0000000..d68e425
--- /dev/null
@@ -0,0 +1,1425 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * Based on the r8180 driver, which is:
+ * Copyright 2004-2005 Andrea Merello <andreamrl@tiscali.it>, et al.
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+
+#ifndef _RTL_CORE_H
+#define _RTL_CORE_H
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/ioport.h>
+#include <linux/sched.h>
+#include <linux/types.h>
+#include <linux/slab.h>
+#include <linux/netdevice.h>
+#include <linux/pci.h>
+#include <linux/etherdevice.h>
+#include <linux/delay.h>
+#include <linux/rtnetlink.h>   
+#include <linux/wireless.h>
+#include <linux/timer.h>
+#include <linux/proc_fs.h>     
+#include <linux/if_arp.h>
+#include <linux/random.h>
+#include <linux/version.h>
+#include <asm/io.h>
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27))
+#include <asm/semaphore.h>
+#endif
+#include "rtllib/rtllib.h"
+
+#ifdef ENABLE_DOT11D
+#include "rtllib/dot11d.h"
+#endif
+
+#ifdef RTL8192SE
+#include "rtl8192s/r8192S_phy.h"
+#include "rtl8192s/r8192S_phyreg.h"
+#include "rtl8192s/r8192S_firmware.h"
+#include "rtl8192s/r8192S_hw.h"
+#elif defined RTL8190P || defined RTL8192E
+#include "rtl8192e/r8192E_firmware.h"
+#include "rtl8192e/r8192E_hw.h"
+#endif
+
+#ifdef RTL8192SE
+#include "rtl8192s/r8192S_scan.h"
+#include "rtl8192s/r8192S_dev.h"
+#include "rtl8192s/r8192S_led.h"
+#include "rtl8192s/r8192S_def.h"
+#include "rtl8192s/r8192S_mp.h"
+#elif defined RTL8190P || defined RTL8192E
+#include "rtl8192e/r8190P_def.h"
+#include "rtl8192e/r8192E_dev.h"
+#elif defined RTL8192CE
+#include "rtl8192c/r8192C_dev.h"
+#include "rtl8192c/r8192C_led.h"
+#include "rtl8192c/r8192C_def.h"
+#include "rtl8192c/r8192C_phy.h"
+#include "rtl8192c/r8192C_phyreg.h"
+#include "rtl8192c/r8192C_firmware.h"
+#include "rtl8192c/r8192C_hw.h"
+#include "rtl8192c/r8192C_rtl6052.h"
+#include "rtl8192c/r8192C_Efuse.h"
+#include "rtl8192c/r8192C_com.h"
+#endif
+
+#if defined CONFIG_CRDA && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30))
+#include "rtl_regd.h"
+#endif
+#include "rtl_debug.h"
+#include "rtl_eeprom.h"
+#include "rtl_ps.h"
+#include "rtl_cam.h"
+
+#define DRV_COPYRIGHT  "Copyright(c) 2008 - 2010 Realsil Semiconductor Corporation"
+#define DRV_AUTHOR  "<wlanfae@realtek.com>"
+#define DRV_VERSION  "0014.0115.2010"
+
+#ifdef RTL8190P
+#define DRV_NAME "rtl819xP"
+#elif defined RTL8192E
+#define DRV_NAME "rtl819xE"
+#elif defined RTL8192SE
+#define DRV_NAME "rtl819xSE"
+#elif defined RTL8192CE
+#define DRV_NAME "rtl8192CE"
+#endif
+
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
+#define RTL_PCI_DEVICE(vend, dev, cfg) \
+       .vendor = (vend), .device = (dev), \
+       .subvendor = PCI_ANY_ID, .subdevice =PCI_ANY_ID , \
+       .driver_data = (kernel_ulong_t)&(cfg)
+#else
+#define RTL_PCI_DEVICE(vend, dev, cfg) \
+       .vendor = (vend), .device = (dev), \
+       .subvendor = PCI_ANY_ID, .subdevice =PCI_ANY_ID
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
+       typedef void irqreturn_type; 
+#else
+       typedef irqreturn_t irqreturn_type; 
+#endif
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10))
+
+#if !defined(PCI_CAP_ID_EXP)
+#define PCI_CAP_ID_EXP                     0x10
+#endif
+#if !defined(PCI_EXP_LNKCTL)
+#define PCI_EXP_LNKCTL                     0x10
+#endif
+
+typedef int __bitwise pci_power_t; 
+#define PCI_D0         ((pci_power_t __force) 0)
+#define PCI_D1         ((pci_power_t __force) 1)
+#define PCI_D2         ((pci_power_t __force) 2)
+#define PCI_D3hot      ((pci_power_t __force) 3)
+#define PCI_D3cold     ((pci_power_t __force) 4)
+#define PCI_UNKNOWN    ((pci_power_t __force) 5)
+#define PCI_POWER_ERROR        ((pci_power_t __force) -1)
+
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)
+       #define rtl8192_interrupt(x,y,z) rtl8192_interrupt_rsl(x,y,z)
+#else
+       #define rtl8192_interrupt(x,y,z) rtl8192_interrupt_rsl(x,y)
+#endif
+
+#define RTL_MAX_SCAN_SIZE 128 
+
+#define RTL_RATE_MAX           30
+
+#define TOTAL_CAM_ENTRY        32
+#define CAM_CONTENT_COUNT      8
+
+#ifndef BIT
+#define BIT(_i)                                (1<<(_i))
+#endif
+
+#define DMESG(x,a...)
+#define DMESGW(x,a...)
+#define DMESGE(x,a...)
+extern u32 rt_global_debug_component;
+#define RT_TRACE(component, x, args...) \
+do { if(rt_global_debug_component & component) \
+       printk(KERN_DEBUG DRV_NAME ":" x "\n" , \
+              ##args);\
+}while(0);
+
+#ifdef RTL8192CE
+#define RT_ASSERT(_Exp,Fmt)                            \
+               if(!(_Exp))                                             \
+               {                                                               \
+                       printk("Rtl819x: ");                            \
+                       printk Fmt;                                     \
+               }
+#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 different debug flag for dedicated service modules in debug flag array. */
+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,
+       FDBGCtrl                        = 14,
+       FC2H                            = 15,
+       FBT                                     = 16,
+       FINIT                           = 17,
+       DBGP_TYPE_MAX
+}DBGP_FLAG_E;
+#define                INIT_EEPROM                             BIT0
+#define                INIT_TxPower                            BIT1
+#define                INIT_IQK                                        BIT2
+#define                EFUSE_READ_ALL                  BIT2
+#define                EFUSE_PG                                        BIT1
+#define                DM_Monitor                      BIT2
+#define                TX_DESC                         BIT3
+#define RTPRINT(dbgtype, dbgflag, printstr)    \
+               {                                                                       \
+                       if(dbgflag == TX_DESC) \
+                       {                                                               \
+                               printk printstr;                                \
+                       }                                                               \
+               }
+
+#define RT_PRINT_DATA(_Comp, _TitleString, _HexData, _HexDataLen)                      \
+               do {\
+                       if((_Comp) & rt_global_debug_component )        \
+                       {                                                                       \
+                               int __i;                                                                \
+                               u8*     ptr = (u8*)_HexData;                            \
+                               printk("Rtl819x: ");                                            \
+                               printk(_TitleString);                                           \
+                               for( __i=0; __i<(int)_HexDataLen; __i++ )                               \
+                               {                                                               \
+                                       printk("%02X%s", ptr[__i], (((__i + 1) % 4) == 0)?"  ":" ");    \
+                                       if (((__i + 1) % 16) == 0)      printk("\n");                   \
+                               }                                                               \
+                               printk("\n");                                                   \
+                       } \
+               }while(0);                      
+#endif
+                                       
+#define RTL819x_DEBUG                  
+#ifdef RTL819x_DEBUG                   
+#define assert(expr) \
+        if (!(expr)) {                                  \
+                printk( "Assertion failed! %s,%s,%s,line=%d\n", \
+                #expr,__FILE__,__FUNCTION__,__LINE__);          \
+        }
+#define RT_DEBUG_DATA(level, data, datalen)      \
+        do{ if ((rt_global_debug_component & (level)) == (level))   \
+                {       \
+                        int _i;                                  \
+                        u8* _pdata = (u8*) data;                 \
+                        printk(KERN_DEBUG DRV_NAME ": %s()\n", __FUNCTION__);   \
+                        for(_i=0; _i<(int)(datalen); _i++)                 \
+                        {                                               \
+                                printk("%2x ", _pdata[_i]);               \
+                                if ((_i+1)%16 == 0) printk("\n");        \
+                        }                               \
+                        printk("\n");                   \
+                }                                       \
+        } while (0)  
+#else
+#define assert(expr) do {} while (0)
+#define RT_DEBUG_DATA(level, data, datalen) do {} while(0)
+#endif 
+
+#ifdef _RTL8192_EXT_PATCH_
+#define IS_UNDER_11N_AES_MODE(_rtllib)  ((_rtllib->pHTInfo->bCurrentHTSupport == true) &&\
+                                       ((_rtllib->pairwise_key_type == KEY_TYPE_CCMP) || \
+                                        (_rtllib->mesh_pairwise_key_type == KEY_TYPE_CCMP)))
+#else
+#define IS_UNDER_11N_AES_MODE(_rtllib)  ((_rtllib->pHTInfo->bCurrentHTSupport == true) &&\
+                                       (_rtllib->pairwise_key_type == KEY_TYPE_CCMP))
+#endif
+
+#define HAL_MEMORY_MAPPED_IO_RANGE_8190PCI     0x1000     
+#define HAL_HW_PCI_REVISION_ID_8190PCI                 0x00
+#define HAL_MEMORY_MAPPED_IO_RANGE_8192PCIE    0x4000  
+#define HAL_HW_PCI_REVISION_ID_8192PCIE                0x01
+#define HAL_MEMORY_MAPPED_IO_RANGE_8192SE      0x4000  
+#define HAL_HW_PCI_REVISION_ID_8192SE  0x10
+#define HAL_HW_PCI_REVISION_ID_8192CE                  0x1
+#define HAL_MEMORY_MAPPED_IO_RANGE_8192CE      0x4000  
+#define HAL_HW_PCI_REVISION_ID_8192DE                  0x0
+#define HAL_MEMORY_MAPPED_IO_RANGE_8192DE      0x4000  
+
+#define HAL_HW_PCI_8180_DEVICE_ID                      0x8180
+#define HAL_HW_PCI_8185_DEVICE_ID                      0x8185  
+#define HAL_HW_PCI_8188_DEVICE_ID                      0x8188  
+#define HAL_HW_PCI_8198_DEVICE_ID                      0x8198  
+#define HAL_HW_PCI_8190_DEVICE_ID                      0x8190  
+#define HAL_HW_PCI_8192_DEVICE_ID                      0x8192  
+#define HAL_HW_PCI_8192SE_DEVICE_ID                            0x8192  
+#define HAL_HW_PCI_8174_DEVICE_ID                      0x8174  
+#define HAL_HW_PCI_8173_DEVICE_ID                      0x8173  
+#define HAL_HW_PCI_8172_DEVICE_ID                      0x8172  
+#define HAL_HW_PCI_8171_DEVICE_ID                      0x8171  
+#define HAL_HW_PCI_0045_DEVICE_ID                              0x0045  
+#define HAL_HW_PCI_0046_DEVICE_ID                              0x0046  
+#define HAL_HW_PCI_0044_DEVICE_ID                              0x0044  
+#define HAL_HW_PCI_0047_DEVICE_ID                              0x0047  
+#define HAL_HW_PCI_700F_DEVICE_ID                              0x700F
+#define HAL_HW_PCI_701F_DEVICE_ID                              0x701F
+#define HAL_HW_PCI_DLINK_DEVICE_ID                             0x3304
+#define HAL_HW_PCI_8192CET_DEVICE_ID                   0x8191  
+#define HAL_HW_PCI_8192CE_DEVICE_ID                            0x8178  
+#define HAL_HW_PCI_8191CE_DEVICE_ID                            0x8177  
+#define HAL_HW_PCI_8188CE_DEVICE_ID                            0x8176  
+#define HAL_HW_PCI_8192CU_DEVICE_ID                            0x8191  
+#define HAL_HW_PCI_8192DE_DEVICE_ID                            0x092D  
+#define HAL_HW_PCI_8192DU_DEVICE_ID                            0x092D  
+
+#ifdef RTL8192CE
+#define RTL819X_DEFAULT_RF_TYPE        RF_2T2R
+#else
+#define RTL819X_DEFAULT_RF_TYPE        RF_1T2R
+#endif
+
+#define RTLLIB_WATCH_DOG_TIME          2000
+
+#define MAX_DEV_ADDR_SIZE              8  /* support till 64 bit bus width OS */
+#define MAX_FIRMWARE_INFORMATION_SIZE   32 
+#define MAX_802_11_HEADER_LENGTH               (40 + MAX_FIRMWARE_INFORMATION_SIZE)
+#define ENCRYPTION_MAX_OVERHEAD                128
+#define MAX_FRAGMENT_COUNT             8
+#define MAX_TRANSMIT_BUFFER_SIZE       (1600+(MAX_802_11_HEADER_LENGTH+ENCRYPTION_MAX_OVERHEAD)*MAX_FRAGMENT_COUNT) 
+
+#define scrclng                                4               
+
+#define DEFAULT_FRAG_THRESHOLD         2342U
+#define MIN_FRAG_THRESHOLD             256U
+#define DEFAULT_BEACONINTERVAL         0x64U
+
+#define DEFAULT_SSID           ""
+#define DEFAULT_RETRY_RTS      7
+#define DEFAULT_RETRY_DATA     7
+#define PRISM_HDR_SIZE                 64
+
+#define        PHY_RSSI_SLID_WIN_MAX                   100
+
+#define RTL_IOCTL_WPA_SUPPLICANT               SIOCIWFIRSTPRIV+30
+
+#define TxBBGainTableLength                    37
+#define CCKTxBBGainTableLength                         23
+
+#define CHANNEL_PLAN_LEN                       10
+#define sCrcLng                                4
+
+#define NIC_SEND_HANG_THRESHOLD_NORMAL         4        
+#define NIC_SEND_HANG_THRESHOLD_POWERSAVE      8
+
+#define MAX_TX_QUEUE                           9 
+
+#if defined RTL8192SE || defined RTL8192CE
+#define MAX_RX_QUEUE                           2
+#else 
+#define MAX_RX_QUEUE                           1
+#endif
+
+#define MAX_RX_COUNT                            64
+#define MAX_TX_QUEUE_COUNT                      9        
+
+enum RTL819x_PHY_PARAM {
+       RTL819X_PHY_MACPHY_REG          = 0,            
+       RTL819X_PHY_MACPHY_REG_PG       = 1,            
+       RTL8188C_PHY_MACREG                     =2,             
+       RTL8192C_PHY_MACREG                     =3,             
+       RTL819X_PHY_REG                         = 4,            
+       RTL819X_PHY_REG_1T2R                    = 5,            
+       RTL819X_PHY_REG_to1T1R          = 6,            
+       RTL819X_PHY_REG_to1T2R          = 7,            
+       RTL819X_PHY_REG_to2T2R          = 8,            
+       RTL819X_PHY_REG_PG                      = 9,            
+       RTL819X_AGC_TAB                         = 10,           
+       RTL819X_PHY_RADIO_A                     =11,            
+       RTL819X_PHY_RADIO_A_1T          =12,            
+       RTL819X_PHY_RADIO_A_2T          =13,            
+       RTL819X_PHY_RADIO_B                     =14,            
+       RTL819X_PHY_RADIO_B_GM          =15,            
+       RTL819X_PHY_RADIO_C                     =16,            
+       RTL819X_PHY_RADIO_D                     =17,            
+       RTL819X_EEPROM_MAP                      =18,            
+       RTL819X_EFUSE_MAP                               =19,            
+};
+
+enum RTL_DEBUG {
+       COMP_TRACE              = BIT0,  
+       COMP_DBG                = BIT1,  
+       COMP_INIT               = BIT2,  
+       COMP_RECV               = BIT3,  
+       COMP_SEND               = BIT4,  
+       COMP_CMD                = BIT5,  
+       COMP_POWER              = BIT6,  
+       COMP_EPROM              = BIT7,  
+       COMP_SWBW               = BIT8,  
+       COMP_SEC                = BIT9,  
+       COMP_LPS                = BIT10, 
+       COMP_QOS                = BIT11, 
+       COMP_RATE               = BIT12, 
+       COMP_RXDESC             = BIT13, 
+       COMP_PHY                = BIT14, 
+       COMP_DIG                = BIT15, 
+       COMP_TXAGC              = BIT16, 
+       COMP_HALDM              = BIT17, 
+       COMP_POWER_TRACKING     = BIT18, 
+       COMP_CH                 = BIT19, 
+       COMP_RF                 = BIT20, 
+       COMP_FIRMWARE           = BIT21, 
+       COMP_HT                 = BIT22, 
+       COMP_RESET              = BIT23,
+       COMP_CMDPKT             = BIT24,
+       COMP_SCAN               = BIT25,
+       COMP_PS                 = BIT26,
+       COMP_DOWN               = BIT27, 
+       COMP_INTR               = BIT28, 
+       COMP_LED                = BIT29, 
+       COMP_MLME               = BIT30, 
+       COMP_ERR                = BIT31  
+};
+
+typedef enum{
+       NIC_UNKNOWN     = 0,
+       NIC_8192E       = 1,
+       NIC_8190P       = 2,
+       NIC_8192SE      = 4,
+       NIC_8192CE              = 5,
+       NIC_8192CU              = 6,
+       NIC_8192DE              = 7,
+       NIC_8192DU              = 8,
+       } nic_t;
+
+typedef        enum _RT_EEPROM_TYPE{
+       EEPROM_93C46,
+       EEPROM_93C56,
+       EEPROM_BOOT_EFUSE,
+}RT_EEPROM_TYPE,*PRT_EEPROM_TYPE;
+
+typedef enum _tag_TxCmd_Config_Index{
+       TXCMD_TXRA_HISTORY_CTRL         = 0xFF900000,
+       TXCMD_RESET_TX_PKT_BUFF         = 0xFF900001,
+       TXCMD_RESET_RX_PKT_BUFF         = 0xFF900002,
+       TXCMD_SET_TX_DURATION           = 0xFF900003,
+       TXCMD_SET_RX_RSSI               = 0xFF900004,
+       TXCMD_SET_TX_PWR_TRACKING       = 0xFF900005,
+       TXCMD_XXXX_CTRL,
+}DCMD_TXCMD_OP;
+
+typedef enum _RT_RF_TYPE_819xU{
+        RF_TYPE_MIN = 0,
+        RF_8225,
+        RF_8256,
+        RF_8258,
+        RF_6052=4,             
+        RF_PSEUDO_11N = 5,
+}RT_RF_TYPE_819xU, *PRT_RF_TYPE_819xU;
+
+typedef enum tag_Rf_Operatetion_State
+{    
+    RF_STEP_INIT = 0,
+    RF_STEP_NORMAL,   
+    RF_STEP_MAX
+}RF_STEP_E;
+
+typedef enum _RT_STATUS{
+       RT_STATUS_SUCCESS,
+       RT_STATUS_FAILURE,
+       RT_STATUS_PENDING,
+       RT_STATUS_RESOURCE
+}RT_STATUS,*PRT_STATUS;
+
+typedef enum _RT_CUSTOMER_ID
+{
+       RT_CID_DEFAULT          = 0,
+       RT_CID_8187_ALPHA0      = 1,
+       RT_CID_8187_SERCOMM_PS  = 2,
+       RT_CID_8187_HW_LED      = 3,
+       RT_CID_8187_NETGEAR     = 4,
+       RT_CID_WHQL             = 5,
+       RT_CID_819x_CAMEO       = 6, 
+       RT_CID_819x_RUNTOP      = 7,
+       RT_CID_819x_Senao       = 8,
+       RT_CID_TOSHIBA          = 9,    
+       RT_CID_819x_Netcore     = 10,
+       RT_CID_Nettronix        = 11,
+       RT_CID_DLINK            = 12,
+       RT_CID_PRONET           = 13,
+       RT_CID_COREGA           = 14,
+       RT_CID_819x_ALPHA       = 15,
+       RT_CID_819x_Sitecom     = 16,
+       RT_CID_CCX              = 17, 
+       RT_CID_819x_Lenovo      = 18,   
+       RT_CID_819x_QMI         = 19,
+       RT_CID_819x_Edimax_Belkin = 20,         
+       RT_CID_819x_Sercomm_Belkin = 21,                        
+       RT_CID_819x_CAMEO1 = 22,
+       RT_CID_819x_MSI = 23,
+       RT_CID_819x_Acer = 24,
+       RT_CID_819x_HP  =27,
+}RT_CUSTOMER_ID, *PRT_CUSTOMER_ID;
+
+typedef enum _RT_OP_MODE{
+       RT_OP_MODE_AP,
+       RT_OP_MODE_INFRASTRUCTURE,
+       RT_OP_MODE_IBSS,
+       RT_OP_MODE_NO_LINK,
+}RT_OP_MODE, *PRT_OP_MODE;
+
+typedef enum _RESET_TYPE {
+       RESET_TYPE_NORESET = 0x00,
+       RESET_TYPE_NORMAL = 0x01,
+       RESET_TYPE_SILENT = 0x02
+} RESET_TYPE;
+
+typedef enum _IC_INFERIORITY_8192S{
+       IC_INFERIORITY_A            = 0, 
+       IC_INFERIORITY_B            = 1, 
+}IC_INFERIORITY_8192S, *PIC_INFERIORITY_8192S;
+
+typedef enum _PCI_BRIDGE_VENDOR {
+       PCI_BRIDGE_VENDOR_INTEL = 0x01,
+       PCI_BRIDGE_VENDOR_ATI = 0x02,
+       PCI_BRIDGE_VENDOR_AMD = 0x04,
+       PCI_BRIDGE_VENDOR_SIS = 0x08,
+       PCI_BRIDGE_VENDOR_UNKNOWN = 0x40,
+       PCI_BRIDGE_VENDOR_MAX = 0x80
+} PCI_BRIDGE_VENDOR;
+
+typedef struct buffer
+{
+       struct buffer *next;
+       u32 *buf;
+       dma_addr_t dma;
+       
+} buffer;
+
+typedef struct rtl_reg_debug{
+        unsigned int  cmd;
+        struct {
+                unsigned char type;
+                unsigned char addr;
+                unsigned char page;
+                unsigned char length;
+        } head;
+        unsigned char buf[0xff];
+}rtl_reg_debug;
+
+typedef struct _rt_9x_tx_rate_history {
+       u32             cck[4];
+       u32             ofdm[8];
+       u32             ht_mcs[4][16];
+}rt_tx_rahis_t, *prt_tx_rahis_t;
+
+typedef        struct _RT_SMOOTH_DATA_4RF {
+       char    elements[4][100];
+       u32     index;                  
+       u32     TotalNum;               
+       u32     TotalVal[4];            
+}RT_SMOOTH_DATA_4RF, *PRT_SMOOTH_DATA_4RF;
+
+#ifdef _RTL8192_EXT_PATCH_
+typedef        struct _RT_SMOOTH_DATA {
+       u32     elements[100];  
+       u32     index;                  
+       u32     TotalNum;               
+       u32     TotalVal;               
+}RT_SMOOTH_DATA, *PRT_SMOOTH_DATA;
+#endif
+typedef struct Stats
+{
+       unsigned long txrdu;
+       unsigned long rxrdu;
+       unsigned long rxok;
+       unsigned long rxframgment;
+       unsigned long rxcmdpkt[4];              
+       unsigned long rxurberr;
+       unsigned long rxstaterr;
+       unsigned long rxdatacrcerr;
+       unsigned long rxmgmtcrcerr;
+       unsigned long rxcrcerrmin;
+       unsigned long rxcrcerrmid;
+       unsigned long rxcrcerrmax;
+       unsigned long received_rate_histogram[4][32];   
+       unsigned long received_preamble_GI[2][32];              
+       unsigned long   rx_AMPDUsize_histogram[5]; 
+       unsigned long rx_AMPDUnum_histogram[5]; 
+       unsigned long numpacket_matchbssid;     
+       unsigned long numpacket_toself;         
+       unsigned long num_process_phyinfo;              
+       unsigned long numqry_phystatus;
+       unsigned long numqry_phystatusCCK;
+       unsigned long numqry_phystatusHT;
+       unsigned long received_bwtype[5];              
+       unsigned long txnperr;
+       unsigned long txnpdrop;
+       unsigned long txresumed;
+       unsigned long rxoverflow;
+       unsigned long rxint;
+       unsigned long txnpokint;
+       unsigned long ints;
+       unsigned long shints;
+       unsigned long txoverflow;
+       unsigned long txlpokint;
+       unsigned long txlpdrop;
+       unsigned long txlperr;
+       unsigned long txbeokint;
+       unsigned long txbedrop;
+       unsigned long txbeerr;
+       unsigned long txbkokint;
+       unsigned long txbkdrop;
+       unsigned long txbkerr;
+       unsigned long txviokint;
+       unsigned long txvidrop;
+       unsigned long txvierr;
+       unsigned long txvookint;
+       unsigned long txvodrop;
+       unsigned long txvoerr;
+       unsigned long txbeaconokint;
+       unsigned long txbeacondrop;
+       unsigned long txbeaconerr;
+       unsigned long txmanageokint;
+       unsigned long txmanagedrop;
+       unsigned long txmanageerr;
+       unsigned long txcmdpktokint;
+       unsigned long txdatapkt;
+       unsigned long txfeedback;
+       unsigned long txfeedbackok;
+       unsigned long txoktotal;
+       unsigned long txokbytestotal;
+       unsigned long txokinperiod;
+       unsigned long txmulticast;
+       unsigned long txbytesmulticast;
+       unsigned long txbroadcast;
+       unsigned long txbytesbroadcast;
+       unsigned long txunicast;
+       unsigned long txbytesunicast;
+       unsigned long rxbytesunicast;
+       unsigned long txfeedbackfail;
+       unsigned long txerrtotal;
+       unsigned long txerrbytestotal;
+       unsigned long txerrmulticast;
+       unsigned long txerrbroadcast;
+       unsigned long txerrunicast;
+       unsigned long txretrycount;
+       unsigned long txfeedbackretry;
+       u8                      last_packet_rate;
+       unsigned long slide_signal_strength[100];
+       unsigned long slide_evm[100];
+       unsigned long   slide_rssi_total;       
+       unsigned long slide_evm_total;  
+       long signal_strength; 
+       long signal_quality;
+       long last_signal_strength_inpercent;
+       long    recv_signal_power;      
+       u8 rx_rssi_percentage[4];
+       u8 rx_evm_percentage[2];
+       long rxSNRdB[4];
+       rt_tx_rahis_t txrate;
+       u32 Slide_Beacon_pwdb[100];     
+       u32 Slide_Beacon_Total;         
+       RT_SMOOTH_DATA_4RF              cck_adc_pwdb;
+       u32     CurrentShowTxate;
+#ifdef _RTL8192_EXT_PATCH_
+       u32 RssiCalculateCnt;
+       RT_SMOOTH_DATA  ui_rssi;
+       RT_SMOOTH_DATA ui_link_quality;
+#endif
+} Stats;
+
+typedef struct         ChnlAccessSetting {
+       u16 SIFS_Timer;
+       u16 DIFS_Timer; 
+       u16 SlotTimeTimer;
+       u16 EIFS_Timer;
+       u16 CWminIndex;
+       u16 CWmaxIndex;
+}*PCHANNEL_ACCESS_SETTING,CHANNEL_ACCESS_SETTING;
+
+typedef enum _TWO_PORT_STATUS
+{
+       TWO_PORT_STATUS__DEFAULT_ONLY,                          
+       TWO_PORT_STATUS__EXTENSION_ONLY,                        
+       TWO_PORT_STATUS__EXTENSION_FOLLOW_DEFAULT,      
+       TWO_PORT_STATUS__DEFAULT_G_EXTENSION_N20,       
+       TWO_PORT_STATUS__ADHOC,                                         
+       TWO_PORT_STATUS__WITHOUT_ANY_ASSOCIATE          
+}TWO_PORT_STATUS;
+
+typedef struct _txbbgain_struct
+{
+       long    txbb_iq_amplifygain;
+       u32     txbbgain_value;
+} txbbgain_struct, *ptxbbgain_struct;
+
+typedef struct _ccktxbbgain_struct
+{
+       u8      ccktxbb_valuearray[8];
+} ccktxbbgain_struct,*pccktxbbgain_struct;
+
+typedef struct _init_gain
+{
+       u8                              xaagccore1;
+       u8                              xbagccore1;
+       u8                              xcagccore1;
+       u8                              xdagccore1;
+       u8                              cca;
+
+} init_gain, *pinit_gain;
+
+typedef struct _tx_ring{
+       u32 * desc;
+       u8 nStuckCount;
+       struct _tx_ring * next;
+}__attribute__ ((packed)) tx_ring, * ptx_ring;
+
+struct rtl8192_tx_ring {
+    tx_desc *desc;
+    dma_addr_t dma;
+    unsigned int idx;
+    unsigned int entries;
+    struct sk_buff_head queue;
+};
+
+
+
+struct rtl819x_ops{
+       nic_t nic_type;
+       void (* get_eeprom_size)(struct net_device* dev);
+       void (* init_adapter_variable)(struct net_device* dev);
+       bool (* initialize_adapter)(struct net_device* dev);
+       void (*link_change)(struct net_device* dev);
+       void (* tx_fill_descriptor)(struct net_device* dev, tx_desc * tx_desc, cb_desc * cb_desc, struct sk_buff *skb);
+       void (* tx_fill_cmd_descriptor)(struct net_device* dev, tx_desc_cmd * entry, cb_desc * cb_desc, struct sk_buff *skb); 
+       bool (* rx_query_status_descriptor)(struct net_device* dev, struct rtllib_rx_stats*  stats, rx_desc *pdesc, struct sk_buff* skb);
+       bool (* rx_command_packet_handler)(struct net_device *dev, struct sk_buff* skb, rx_desc *pdesc);
+       void (* stop_adapter)(struct net_device *dev, bool reset);
+#if defined RTL8192SE || defined RTL8192CE
+       void (* update_ratr_table)(struct net_device* dev,u8* pMcsRate,struct sta_info* pEntry);
+#else
+       void (* update_ratr_table)(struct net_device* dev);
+#endif
+       void (* irq_enable)(struct net_device* dev);
+       void (* irq_disable)(struct net_device* dev);
+       void (* irq_clear)(struct net_device* dev);
+       void (* rx_enable)(struct net_device* dev);
+       void (* tx_enable)(struct net_device* dev);     
+       void (* interrupt_recognized)(struct net_device *dev, u32 *p_inta, u32 *p_intb);
+       bool (* TxCheckStuckHandler)(struct net_device* dev);
+       bool (* RxCheckStuckHandler)(struct net_device* dev);
+};
+
+typedef struct r8192_priv
+{
+       struct pci_dev *pdev;
+       struct pci_dev *bridge_pdev;
+
+#ifdef _RTL8192_EXT_PATCH_
+       u8      rssi_level;
+#endif 
+       void *scan_cmd;
+
+       u8 check_roaming_cnt;
+       struct rtl819x_ops* ops;
+       bool bfirst_init;
+       LOG_INTERRUPT_8190_T InterruptLog;
+       bool bIgnoreSilentReset;
+       u32     SilentResetRxSoltNum;
+       u32     SilentResetRxSlotIndex;
+#if defined RTL8192SE || defined RTL8192CE
+       u32     SilentResetRxStuckEvent[MAX_SILENT_RESET_RX_SLOT_NUM];
+#endif
+       RT_CUSTOMER_ID CustomerID;
+       bool    being_init_adapter;
+       bool    sw_radio_on;
+       u8      IC_Cut;
+       int irq;
+       short irq_enabled;
+       struct rtllib_device *rtllib;
+       u8 Rf_Mode;
+       nic_t card_8192; 
+       u8 card_8192_version; 
+       short enable_gpio0;
+       enum card_type {PCI,MINIPCI,CARDBUS,USB}card_type;
+       short hw_plcp_len;
+       short plcp_preamble_mode;
+       u8 ScanDelay;   
+
+       spinlock_t fw_scan_lock;
+       spinlock_t irq_lock;
+       spinlock_t irq_th_lock;
+       spinlock_t tx_lock;
+       spinlock_t rf_ps_lock;
+       spinlock_t rw_lock;
+       spinlock_t rt_h2c_lock;
+#ifdef CONFIG_ASPM_OR_D3
+       spinlock_t D3_lock;
+#endif
+
+#if defined CONFIG_CRDA && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30))
+       struct ieee80211_rate rates[IEEE80211_NUM_BANDS][RTL_RATE_MAX];
+       struct ieee80211_supported_band bands[IEEE80211_NUM_BANDS];
+#endif 
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16))
+       struct semaphore mutex;
+#else
+       struct mutex mutex;
+#endif
+       bool ps_force;
+       spinlock_t rf_lock; 
+       spinlock_t ps_lock;
+
+       u32 irq_mask[2];
+       short chan;
+       u8    hwscan_bw_40;
+       short sens;
+       short max_sens;
+       u32 rx_prevlen;
+       
+       rx_desc *rx_ring[MAX_RX_QUEUE];
+       dma_addr_t rx_ring_dma[MAX_RX_QUEUE];
+       unsigned int rx_idx[MAX_RX_QUEUE];
+       struct sk_buff *rx_buf[MAX_RX_QUEUE][MAX_RX_COUNT];
+       int rxringcount;
+       u16 rxbuffersize;
+
+       struct sk_buff *rx_skb;
+       u32 *rxring;
+       u32 *rxringtail;
+       dma_addr_t rxringdma;
+       struct buffer *rxbuffer;
+       struct buffer *rxbufferhead;
+       short rx_skb_complete;
+       struct rtl8192_tx_ring tx_ring[MAX_TX_QUEUE_COUNT];
+       int txringcount;
+       int txbuffsize;
+       int txfwbuffersize;
+       struct tasklet_struct irq_rx_tasklet;
+       struct tasklet_struct irq_tx_tasklet;
+       struct tasklet_struct irq_prepare_beacon_tasklet;
+
+       struct buffer *txmapbufs;
+       struct buffer *txbkpbufs;
+       struct buffer *txbepbufs;
+       struct buffer *txvipbufs;       
+       struct buffer *txvopbufs;
+       struct buffer *txcmdbufs;
+       struct buffer *txmapbufstail;
+       struct buffer *txbkpbufstail;
+       struct buffer *txbepbufstail;
+       struct buffer *txvipbufstail;      
+       struct buffer *txvopbufstail;
+       struct buffer *txcmdbufstail;
+       ptx_ring txbeaconringtail;
+       dma_addr_t txbeaconringdma;
+       ptx_ring txbeaconring;
+       int txbeaconcount;
+       struct buffer *txbeaconbufs;
+       struct buffer *txbeaconbufstail;
+       ptx_ring txmapring;
+       ptx_ring txbkpring;
+       ptx_ring txbepring;
+       ptx_ring txvipring;
+       ptx_ring txvopring;
+       ptx_ring txcmdring;
+       ptx_ring txmapringtail;
+       ptx_ring txbkpringtail;
+       ptx_ring txbepringtail;
+       ptx_ring txvipringtail;
+       ptx_ring txvopringtail;
+       ptx_ring txcmdringtail;
+       ptx_ring txmapringhead;
+       ptx_ring txbkpringhead;
+       ptx_ring txbepringhead;
+       ptx_ring txvipringhead;
+       ptx_ring txvopringhead;
+       ptx_ring txcmdringhead;
+       dma_addr_t txmapringdma;
+       dma_addr_t txbkpringdma;
+       dma_addr_t txbepringdma;
+       dma_addr_t txvipringdma;
+       dma_addr_t txvopringdma;
+       dma_addr_t txcmdringdma;
+
+       short up;
+       short up_first_time;
+#ifdef _RTL8192_EXT_PATCH_
+       short mesh_up;
+#endif
+       short crcmon; 
+       struct semaphore wx_sem;
+       struct semaphore rf_sem; 
+       u8 rf_type; 
+       RT_RF_TYPE_819xU rf_chip;
+       char nick[IW_ESSID_MAX_SIZE + 1];
+
+       short (*rf_set_sens)(struct net_device *dev,short sens);
+       u8 (*rf_set_chan)(struct net_device *dev,u8 ch);
+       void (*rf_close)(struct net_device *dev);
+       void (*rf_init)(struct net_device *dev);
+       short promisc;  
+       /*stats*/
+       struct Stats stats;
+       struct iw_statistics wstats;
+       struct proc_dir_entry *dir_dev;
+
+       struct sk_buff_head rx_queue;
+       struct sk_buff_head skb_queue;
+       work_struct_rsl qos_activate;
+       atomic_t tx_pending[0x10];
+
+       u16     ShortRetryLimit;
+       u16     LongRetryLimit;
+       u32     TransmitConfig;
+       u8      RegCWinMin;             
+#ifdef _RTL8192_EXT_PATCH_
+       u32     NumTxUnicast; 
+       u8      keepAliveLevel; 
+#endif 
+
+       u32     LastRxDescTSFHigh;
+       u32     LastRxDescTSFLow;
+
+
+       u16     EarlyRxThreshold;
+       u32     ReceiveConfig;
+       u8      AcmControl;
+
+       u8      RFProgType;
+
+       u8 retry_data;
+       u8 retry_rts;
+       u16 rts;
+
+       struct  ChnlAccessSetting  ChannelAccessSetting;
+
+       work_struct_rsl reset_wq;
+
+#ifdef CONFIG_RTLWIFI_DEBUGFS
+       rtl_fs_debug *debug;
+#endif /* CONFIG_IWLWIFI_DEBUGFS */
+
+       /**********************************************************/
+       u16     basic_rate;
+       u8      short_preamble;
+       u8      slot_time;
+       u16 SifsTime;
+       u8 RegWirelessMode;
+       prt_firmware            pFirmware;
+       rtl819x_loopback_e      LoopbackMode;
+       firmware_source_e       firmware_source;
+       u8 firmware_version;
+       u16 rf_pathmap;
+       bool AutoloadFailFlag;
+       short epromtype;
+       u16 eeprom_vid;
+       u16 eeprom_did;
+       u16 eeprom_svid;
+       u16 eeprom_smid;
+       u8  eeprom_CustomerID;
+       u16  eeprom_ChannelPlan;
+       u8 eeprom_version;
+       u8  EfuseMap[2][HWSET_MAX_SIZE_92S];
+       u16 EfuseUsedBytes;
+       u8  EfuseUsedPercentage;
+
+#ifdef EFUSE_REPG_WORKAROUND 
+       bool efuse_RePGSec1Flag;
+       u8   efuse_RePGData[8];
+#endif
+       u8 EEPROMRegulatory;
+       u8 EEPROMPwrGroup[2][3];
+       u8 EEPROMOptional;      
+       u8 ThermalValue;
+       long EntryMinUndecoratedSmoothedPWDB;
+       long EntryMaxUndecoratedSmoothedPWDB;
+       u8 DynamicTxHighPowerLvl;  
+       u8 LastDTPLvl;
+       u32 CurrentRATR0;
+       FALSE_ALARM_STATISTICS FalseAlmCnt;
+
+       bool bInformFWDriverControlDM;
+       u8 PwrGroupHT20[2][14];
+       u8 PwrGroupHT40[2][14];
+       u16 FwCmdIOMap;
+       u32 FwCmdIOParam;
+       bool bSupportASPM; 
+       u32 RfRegChnlVal[2];
+       u8 DMFlag; 
+       u8 DM_Type; 
+       u8 ShowRateMode;
+       u8 RATRTableBitmap;
+
+#if (EEPROM_OLD_FORMAT_SUPPORT == 1)
+       u8 EEPROMTxPowerLevelCCK[14];           
+       u8 EEPROMTxPowerLevelOFDM24G[14];       
+       u8 EEPROMTxPowerLevelOFDM5G[24];        
+#else
+       u8 RfCckChnlAreaTxPwr[2][3];    
+       u8 RfOfdmChnlAreaTxPwr1T[2][3]; 
+       u8 RfOfdmChnlAreaTxPwr2T[2][3]; 
+#endif 
+       u8 EEPROMRfACCKChnl1TxPwLevel[3];       
+       u8 EEPROMRfAOfdmChnlTxPwLevel[3];
+       u8 EEPROMRfCCCKChnl1TxPwLevel[3];       
+       u8 EEPROMRfCOfdmChnlTxPwLevel[3];
+#if defined (RTL8192S_WAPI_SUPPORT)
+       u8 EEPROMWapiSupport;
+       u8 WapiSupport;
+#endif
+       u16 EEPROMTxPowerDiff;
+       u16 EEPROMAntPwDiff;            
+       u8 EEPROMThermalMeter;
+       u8 EEPROMPwDiff;
+       u8 EEPROMCrystalCap;
+
+       u8 EEPROMBluetoothCoexist;      
+       u8 EEPROMBluetoothType;
+       u8 EEPROMBluetoothAntNum;
+       u8 EEPROMBluetoothAntIsolation;
+       u8 EEPROMBluetoothRadioShared;
+
+       
+       u8 EEPROMSupportWoWLAN;
+       u8 EEPROMBoardType;
+       u8 EEPROM_Def_Ver;
+       u8 EEPROMHT2T_TxPwr[6];                 
+       u8 EEPROMTSSI_A;
+       u8 EEPROMTSSI_B;
+       u8 EEPROMTxPowerLevelCCK_V1[3];
+       u8 EEPROMLegacyHTTxPowerDiff;   
+       bool bTXPowerDataReadFromEEPORM;
+       u16 RegChannelPlan; 
+       u16 ChannelPlan;
+       bool bChnlPlanFromHW;
+       bool RegRfOff;
+       bool isRFOff;
+       bool bInPowerSaveMode;
+       u8      bHwRfOffAction; 
+       BB_REGISTER_DEFINITION_T        PHYRegDef[4];   
+       u8                                      pwrGroupCnt;
+#if  defined RTL8192CE
+       u32     MCSTxPowerLevelOriginalOffset[4][16];   
+#elif defined RTL8192SE 
+       u32     MCSTxPowerLevelOriginalOffset[4][7];
+#else
+       u32     MCSTxPowerLevelOriginalOffset[6];
+#endif
+       u32     CCKTxPowerLevelOriginalOffset;
+       u8      TxPowerLevelCCK[14];                    
+       u8      TxPowerLevelCCK_A[14];                  
+       u8      TxPowerLevelCCK_C[14];
+       u8      TxPowerLevelOFDM24G[14];                
+       u8      TxPowerLevelOFDM5G[14];                 
+       u8      TxPowerLevelOFDM24G_A[14];      
+       u8      TxPowerLevelOFDM24G_C[14];      
+       u8      LegacyHTTxPowerDiff;                    
+       u8      TxPowerDiff;
+       s8      RF_C_TxPwDiff;                                  
+       s8      RF_B_TxPwDiff;
+       u8      RfTxPwrLevelCck[2][14];
+       u8      RfTxPwrLevelOfdm1T[2][14];
+       u8      RfTxPwrLevelOfdm2T[2][14];
+       u8      AntennaTxPwDiff[3];                             
+       u8      TxPwrHt20Diff[2][14];                           
+       u8      TxPwrLegacyHtDiff[2][14];               
+#if 0
+       u8      TxPwrbandEdgeHt40[2][2];                
+       u8      TxPwrbandEdgeHt20[2][2];                
+       u8      TxPwrbandEdgeLegacyOfdm[2][2];  
+#endif
+       u8      TxPwrSafetyFlag;                                
+       u8      HT2T_TxPwr_A[14];                               
+       u8      HT2T_TxPwr_B[14];                               
+       u8      CurrentCckTxPwrIdx;
+       u8      CurrentOfdm24GTxPwrIdx;
+
+       u8      CrystalCap;                                             
+       u8      ThermalMeter[2];        
+       u8      BluetoothCoexist;
+       IC_INFERIORITY_8192S IC_Class;
+
+       u8      CckPwEnl;
+       u16     TSSI_13dBm;
+       u32     Pwr_Track;
+       u8      CCKPresentAttentuation_20Mdefault;
+       u8      CCKPresentAttentuation_40Mdefault;
+       char    CCKPresentAttentuation_difference;
+       char    CCKPresentAttentuation;
+       u8      bCckHighPower;
+       long    undecorated_smoothed_pwdb;
+       long    undecorated_smoothed_cck_adc_pwdb[4];
+       u8      SwChnlInProgress;
+       u8      SwChnlStage;
+       u8      SwChnlStep;
+       u8      SetBWModeInProgress;
+       HT_CHANNEL_WIDTH                CurrentChannelBW;
+
+       u8      nCur40MhzPrimeSC;       
+       u32     RfReg0Value[4];
+       u8      NumTotalRFPath; 
+       bool    brfpath_rxenable[4];
+       struct timer_list watch_dog_timer;      
+
+       bool    bdynamic_txpower;  
+       bool    bDynamicTxHighPower;  
+       bool    bDynamicTxLowPower;  
+       bool    bLastDTPFlag_High;
+       bool    bLastDTPFlag_Low;
+
+       bool    bstore_last_dtpflag;
+       bool    bstart_txctrl_bydtp;   
+       rate_adaptive rate_adaptive;
+       txbbgain_struct txbbgain_table[TxBBGainTableLength];
+       u8   txpower_count;
+       bool btxpower_trackingInit;
+       u8   OFDM_index;
+       u8   CCK_index;
+       u8   Record_CCK_20Mindex;
+       u8   Record_CCK_40Mindex;
+       ccktxbbgain_struct      cck_txbbgain_table[CCKTxBBGainTableLength];
+       ccktxbbgain_struct      cck_txbbgain_ch14_table[CCKTxBBGainTableLength];
+       u8 rfa_txpowertrackingindex;
+       u8 rfa_txpowertrackingindex_real;
+       u8 rfa_txpowertracking_default;
+       u8 rfc_txpowertrackingindex;
+       u8 rfc_txpowertrackingindex_real;
+       u8 rfc_txpowertracking_default;
+       bool btxpower_tracking;
+       bool bcck_in_ch14;
+
+       init_gain initgain_backup;
+       u8   DefaultInitialGain[4];
+       bool bis_any_nonbepkts;
+       bool bcurrent_turbo_EDCA;
+
+       bool SetFwCmdInProgress; 
+       u8 CurrentFwCmdIO;
+
+       u8      MidHighPwrTHR_L1;
+       u8      MidHighPwrTHR_L2;
+
+
+       bool    bis_cur_rdlstate;
+       struct timer_list fsync_timer;
+       bool bfsync_processing; 
+       u32     rate_record;
+       u32     rateCountDiffRecord;
+       u32     ContiuneDiffCount;
+       bool bswitch_fsync;
+
+       u8      framesync;
+       u32     framesyncC34;
+       u8      framesyncMonitor;
+       u16     nrxAMPDU_size;
+       u8      nrxAMPDU_aggr_num;
+
+       u32 last_rxdesc_tsf_high;
+       u32 last_rxdesc_tsf_low;
+
+       bool bHwRadioOff;
+       bool pwrdown;
+       bool blinked_ingpio;
+       bool aspm_clkreq_enable;
+       u32 pci_bridge_vendor;
+       u8 RegHostPciASPMSetting;
+       int PciBridgeASPMRegOffset;
+       u8 PciBridgeLinkCtrlReg;
+       u8 RegDevicePciASPMSetting;
+       int ASPMRegOffset;
+       int ClkReqOffset;
+       u8 LinkCtrlReg;
+
+       bool RFChangeInProgress; 
+       bool SetRFPowerStateInProgress;
+       bool bdisable_nic;
+       RT_OP_MODE OpMode;
+       u32 reset_count;
+       bool bpbc_pressed;
+       u32 txpower_checkcnt;
+       u32 txpower_tracking_callback_cnt;
+       u8 thermal_read_val[40];
+       u8 thermal_readback_index;
+       u32 ccktxpower_adjustcnt_not_ch14;
+       u32 ccktxpower_adjustcnt_ch14;
+       u8 tx_fwinfo_force_subcarriermode;
+       u8 tx_fwinfo_force_subcarrierval;
+
+       RESET_TYPE      ResetProgress;
+       bool            bForcedSilentReset;
+       bool            bDisableNormalResetCheck;
+       u16             TxCounter;
+       u16             RxCounter;
+       int             IrpPendingCount;
+       bool            bResetInProgress;
+       bool            force_reset;
+       bool            force_lps;
+       u8              InitialGainOperateType;
+#if defined RTL8192SE || defined RTL8192CE
+       LED_STRATEGY_8190       LedStrategy;  
+       LED_8190                        SwLed0;
+       LED_8190                        SwLed1;
+#endif
+       delayed_work_struct_rsl update_beacon_wq;
+       delayed_work_struct_rsl watch_dog_wq;    
+       delayed_work_struct_rsl txpower_tracking_wq;
+       delayed_work_struct_rsl rfpath_check_wq;
+       delayed_work_struct_rsl gpio_change_rf_wq;
+       delayed_work_struct_rsl initialgain_operate_wq;
+       delayed_work_struct_rsl check_hw_scan_wq; 
+       delayed_work_struct_rsl hw_scan_simu_wq; 
+       delayed_work_struct_rsl start_hw_scan_wq;       
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)  
+       struct workqueue_struct *priv_wq;
+#else
+       u32 *priv_wq;
+#endif
+       struct timer_list gpio_polling_timer;
+       u8     polling_timer_on;
+       bool bDriverIsGoingToUnload;
+#ifdef _RTL8192_EXT_PATCH_
+       struct mshclass                 *mshobj;
+#endif
+
+       bool chan_forced;
+       bool bSingleCarrier;
+       bool RegBoard;
+       bool bCckContTx; 
+       bool bOfdmContTx; 
+       bool bStartContTx; 
+       u8   RegPaModel; 
+       u8   btMpCckTxPower; 
+       u8   btMpOfdmTxPower; 
+
+       u32     MptActType;     
+       u32     MptIoOffset; 
+       u32     MptIoValue; 
+       u32     MptRfPath;
+
+       u32     MptBandWidth;                   
+       u32     MptRateIndex;                   
+       u8      MptChannelToSw;                 
+       u32  MptRCR;
+
+       u8      PwrDomainProtect;       
+       u8      H2CTxCmdSeq; 
+
+#ifdef RTL8192CE
+       u8      EEPROMTSSI[2];
+       u8      EEPROMPwrLimitHT20[3];
+       u8      EEPROMPwrLimitHT40[3];
+       u8      EEPROMChnlAreaTxPwrCCK[2][3];   
+       u8      EEPROMChnlAreaTxPwrHT40_1S[2][3];       
+       u8      EEPROMChnlAreaTxPwrHT40_2SDiff[2][3];   
+       u8      TxPwrLevelCck[2][14];
+       u8      TxPwrLevelHT40_1S[2][14];               
+       u8      TxPwrLevelHT40_2S[2][14];               
+       bool    bRPDownloadFinished;
+       bool    bH2CSetInProgress;
+       u8      SetIOInProgress;
+       IO_TYPE CurrentIOType;
+       BT_COEXIST_STR  bt_coexist;     
+       
+       u8      CurFwCmdRegSet;
+       u8      LastHMEBoxNum;
+#endif
+       bool    bDMInitialGainEnable;
+        bool    MutualAuthenticationFail;
+       bool    bDisableFrameBursting;
+       bool    bLedOpenDrain; 
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10))
+       u32     pci_state;
+#endif
+}r8192_priv;
+
+
+#ifdef _RTL8192_EXT_PATCH_
+struct meshdev_priv {
+       struct net_device_stats stats;
+       struct rtllib_device *rtllib;
+       struct r8192_priv * priv;
+};
+#endif
+
+extern const struct ethtool_ops rtl819x_ethtool_ops;
+
+#ifdef RTL8192CE
+#define Rtl819XFwImageArray                            Rtl8192CEFwImgArray
+#define Rtl819XMAC_Array                                       Rtl8192CEMAC_2T_Array
+#define Rtl819XAGCTAB_2TArray                  Rtl8192CEAGCTAB_2TArray
+#define Rtl819XAGCTAB_1TArray                  Rtl8192CEAGCTAB_1TArray
+#define Rtl819XPHY_REG_2TArray                 Rtl8192CEPHY_REG_2TArray                        
+#define Rtl819XPHY_REG_1TArray                 Rtl8192CEPHY_REG_1TArray
+#define Rtl819XRadioA_2TArray                          Rtl8192CERadioA_2TArray
+#define Rtl819XRadioA_1TArray                          Rtl8192CERadioA_1TArray
+#define Rtl819XRadioB_2TArray                          Rtl8192CERadioB_2TArray
+#define Rtl819XRadioB_1TArray                          Rtl8192CERadioB_1TArray
+#define Rtl819XMAC_Array                                       Rtl8192CEMAC_2T_Array
+#define Rtl819XPHY_REG_Array_PG                        Rtl8192CEPHY_REG_Array_PG
+#endif
+
+bool init_firmware(struct net_device *dev);
+void rtl819xE_tx_cmd(struct net_device *dev, struct sk_buff *skb);
+short rtl8192_tx(struct net_device *dev, struct sk_buff* skb);
+u8 read_nic_byte(struct net_device *dev, int x);
+u8 read_nic_byte_E(struct net_device *dev, int x);
+u32 read_nic_dword(struct net_device *dev, int x);
+u16 read_nic_word(struct net_device *dev, int x) ;
+void write_nic_byte(struct net_device *dev, int x,u8 y);
+void write_nic_byte_E(struct net_device *dev, int x,u8 y);
+void write_nic_word(struct net_device *dev, int x,u16 y);
+void write_nic_dword(struct net_device *dev, int x,u32 y);
+void force_pci_posting(struct net_device *dev);
+
+void rtl8192_rx_enable(struct net_device *);
+void rtl8192_tx_enable(struct net_device *);
+
+void rtl8192_disassociate(struct net_device *dev);
+void rtl8185_set_rf_pins_enable(struct net_device *dev,u32 a);
+
+int rtl8192_hard_start_xmit(struct sk_buff *skb,struct net_device *dev);
+void rtl8192_hard_data_xmit(struct sk_buff *skb, struct net_device *dev, int rate);
+void rtl8192_data_hard_stop(struct net_device *dev);
+void rtl8192_data_hard_resume(struct net_device *dev);
+void rtl8192_restart(void *data);
+void rtl819x_watchdog_wqcallback(void *data);
+void rtl8192_hw_sleep_wq (void *data);
+void watch_dog_timer_callback(unsigned long data);
+void rtl8192_irq_rx_tasklet(struct r8192_priv *priv);
+void rtl8192_irq_tx_tasklet(struct r8192_priv *priv);
+int rtl8192_down(struct net_device *dev,bool shutdownrf);
+int rtl8192_up(struct net_device *dev);
+void rtl8192_commit(struct net_device *dev);
+void rtl8192_set_chan(struct net_device *dev,short ch);
+
+
+extern void firmware_init_param(struct net_device *dev);
+extern bool cmpk_message_handle_tx(struct net_device *dev, u8* codevirtualaddress, u32 packettype, u32 buffer_len);
+void rtl8192_hw_wakeup_wq(void *data);
+
+irqreturn_type rtl8192_interrupt(int irq, void *netdev, struct pt_regs *regs);
+
+short rtl8192_pci_initdescring(struct net_device *dev);
+
+void rtl8192_cancel_deferred_work(struct r8192_priv* priv);
+
+#ifdef _RTL8192_EXT_PATCH_
+int _rtl8192_up(struct net_device *dev,bool is_silent_reset);
+#else
+int _rtl8192_up(struct net_device *dev);
+#endif
+
+short rtl8192_is_tx_queue_empty(struct net_device *dev);
+#ifdef RTL8192SE
+void rtl8192_irq_disable(struct net_device *dev);
+void GetHwReg8192SE(struct net_device *dev,u8 variable,u8* val);
+void SetHwReg8192SE(struct net_device *dev,u8 variable,u8* val);
+void SwLedOn(struct net_device *dev , PLED_8190 pLed);
+void SwLedOff(struct net_device *dev, PLED_8190 pLed);
+void Adhoc_InitRateAdaptive(struct net_device *dev,struct sta_info  *pEntry);
+void SetBeaconRelatedRegisters8192SE(struct net_device *dev);
+
+#if LINUX_VERSION_CODE >=KERNEL_VERSION(2,6,20)
+void rtl8192se_check_tsf_wq(struct work_struct * work);
+void rtl8192se_update_peer_ratr_table_wq(struct work_struct * work);
+#else
+void rtl8192se_check_tsf_wq(struct net_device *dev);
+void rtl8192se_update_peer_ratr_table_wq(struct net_device *dev);
+#endif
+#endif
+
+void check_rfctrl_gpio_timer(unsigned long data);
+u8 HalSetSysClk8192SE(struct net_device *dev, u8 Data);
+void gen_RefreshLedState(struct net_device *dev);
+#ifdef _RTL8192_EXT_PATCH_
+extern int r8192_mesh_set_enc_ext(struct net_device *dev, struct iw_point *encoding, struct iw_encode_ext *ext, u8 *addr);
+#endif
+#define IS_HARDWARE_TYPE_819xP(_priv) ((((struct r8192_priv*)rtllib_priv(dev))->card_8192==NIC_8190P)||\
+                                       (((struct r8192_priv*)rtllib_priv(dev))->card_8192==NIC_8192E))
+#define IS_HARDWARE_TYPE_8192SE(_priv) (((struct r8192_priv*)rtllib_priv(dev))->card_8192==NIC_8192SE)
+#define IS_HARDWARE_TYPE_8192CE(_priv) (((struct r8192_priv*)rtllib_priv(dev))->card_8192==NIC_8192CE)
+#define IS_HARDWARE_TYPE_8192CU(_priv) (((struct r8192_priv*)rtllib_priv(dev))->card_8192==NIC_8192CU)
+#define IS_HARDWARE_TYPE_8192DE(_priv) (((struct r8192_priv*)rtllib_priv(dev))->card_8192==NIC_8192DE)
+#define IS_HARDWARE_TYPE_8192DU(_priv) (((struct r8192_priv*)rtllib_priv(dev))->card_8192==NIC_8192DU)
+extern void dm_InitRateAdaptiveMask(struct net_device * dev);
+
+void tx_timeout(struct net_device *dev);
+void rtl8192_pci_resetdescring(struct net_device *dev);
+void rtl8192_SetWirelessMode(struct net_device* dev, u8 wireless_mode);
+void rtl8192_irq_enable(struct net_device *dev);
+void rtl8192_config_rate(struct net_device* dev, u16* rate_config);
+void rtl8192_update_cap(struct net_device* dev, u16 cap);
+u8 QueryIsShort(u8 TxHT, u8 TxRate, cb_desc *tcb_desc);
+void rtl8192_irq_disable(struct net_device *dev);
+
+void rtl819x_UpdateRxPktTimeStamp (struct net_device *dev, struct rtllib_rx_stats *stats);
+long rtl819x_translate_todbm(struct r8192_priv * priv, u8 signal_strength_index        );
+void rtl819x_update_rxsignalstatistics8190pci(struct r8192_priv * priv,struct rtllib_rx_stats * pprevious_stats);
+u8 rtl819x_evm_dbtopercentage(char value);
+void rtl819x_process_cck_rxpathsel(struct r8192_priv * priv,struct rtllib_rx_stats * pprevious_stats);
+u8 rtl819x_query_rxpwrpercentage(      char            antpower        );
+void rtl8192x_record_rxdesc_forlateruse(struct rtllib_rx_stats * psrc_stats,struct rtllib_rx_stats * ptarget_stats);
+
+bool NicIFEnableNIC(struct net_device* dev);
+bool NicIFDisableNIC(struct net_device* dev);
+
+bool
+MgntActSet_RF_State(
+       struct net_device* dev,
+       RT_RF_POWER_STATE       StateToSet,
+       RT_RF_CHANGE_SOURCE ChangeSource
+       );
+#if defined CONFIG_CRDA && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30))
+struct net_device *wiphy_to_net_device(struct wiphy *wiphy);
+#endif
+
+#endif
+
+
diff --git a/ubuntu/rtl8192se/rtl_debug.c b/ubuntu/rtl8192se/rtl_debug.c
new file mode 100644 (file)
index 0000000..9d78aac
--- /dev/null
@@ -0,0 +1,1384 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * Based on the r8180 driver, which is:
+ * Copyright 2004-2005 Andrea Merello <andreamrl@tiscali.it>, et al.
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+#include "rtl_debug.h"
+#include "rtl_core.h"
+#ifdef RTL8192CE
+#include "rtl8192c/r8192C_phy.h"
+#include "rtl8192c/r8192C_phyreg.h"
+#include "rtl8192c/r8192C_rtl6052.h"
+#include "rtl8192c/r8192C_Efuse.h"
+#elif defined RTL8192SE
+#include "rtl8192s/r8192S_phy.h"
+#include "rtl8192s/r8192S_phyreg.h"
+#include "rtl8192s/r8192S_rtl6052.h"
+#include "rtl8192s/r8192S_Efuse.h"
+#else
+#include "rtl8192e/r8192E_phy.h" 
+#include "rtl8192e/r8192E_phyreg.h"
+#include "rtl8192e/r8190P_rtl8256.h" /* RTL8225 Radio frontend */
+#include "rtl8192e/r8192E_cmdpkt.h"
+#endif
+
+#ifdef _RTL8192_EXT_PATCH_
+#include "../../mshclass/msh_class.h"
+#endif
+/* this is only for debugging */
+void print_buffer(u32 *buffer, int len)
+{
+       int i;
+       u8 *buf =(u8*)buffer;
+       
+       printk("ASCII BUFFER DUMP (len: %x):\n",len);
+       
+       for(i=0;i<len;i++)
+               printk("%c",buf[i]);
+               
+       printk("\nBINARY BUFFER DUMP (len: %x):\n",len);
+       
+       for(i=0;i<len;i++)
+               printk("%x",buf[i]);
+
+       printk("\n");
+}
+
+/* this is only for debug */
+void dump_eprom(struct net_device *dev)
+{
+       int i;
+
+       for (i = 0; i < 0xff; i++) {
+               RT_TRACE(COMP_INIT, "EEPROM addr %x : %x", i, eprom_read(dev,i));
+       }
+}
+
+/* this is only for debug */
+void rtl8192_dump_reg(struct net_device *dev)
+{
+       int i;
+       int n;
+       int max = 0x5ff;
+
+       RT_TRACE(COMP_INIT, "Dumping NIC register map");
+
+       for (n = 0; n <= max; ) {
+               printk( "\nD: %2x> ", n);
+               for (i = 0; i < 16 && n <= max; i++, n++)
+                       printk("%2x ", read_nic_byte(dev, n));
+       }
+       printk("\n");
+}
+
+#ifdef RTL8192CE
+void rtl8192ce_dump_tx_desc(tx_desc *pDesc)
+{      
+#if 0
+       RTPRINT(FTX, TX_DESC, ("DW 0 =========\r\n"));
+       RTPRINT(FTX, TX_DESC, ("Own = %d\n", pDesc->OWN));
+       RTPRINT(FTX, TX_DESC, ("GF = %d\n", pDesc->GF));
+       RTPRINT(FTX, TX_DESC, ("LINIP = %d\n", pDesc->LINIP));
+       RTPRINT(FTX, TX_DESC, ("FS = %d\n", pDesc->FirstSeg));
+       RTPRINT(FTX, TX_DESC, ("LS = %d\n", pDesc->LastSeg));
+       RTPRINT(FTX, TX_DESC, ("Offset = %d\n", pDesc->Offset));
+       RTPRINT(FTX, TX_DESC, ("PktSize = %d\r\n", pDesc->PktSize));
+
+       RTPRINT(FTX, TX_DESC, ("DW 1 ==========\r\n"));
+       RTPRINT(FTX, TX_DESC, ("PKTOFFSET = %d\n", pDesc->PktOffset));
+       RTPRINT(FTX, TX_DESC, ("HTC = %d\n", pDesc->HTC));
+       RTPRINT(FTX, TX_DESC, ("SecType = %d\n", pDesc->SecType));
+       RTPRINT(FTX, TX_DESC, ("EnDescID = %d\n", pDesc->EnDescID));
+       RTPRINT(FTX, TX_DESC, ("NoACM = %d\n", pDesc->NOACM));
+       RTPRINT(FTX, TX_DESC, ("QueueSelect = %d\n", pDesc->QueueSel));
+       RTPRINT(FTX, TX_DESC, ("PIFS = %d\n", pDesc->PIFS));
+       RTPRINT(FTX, TX_DESC, ("MoreFrag = %d\n", pDesc->MoreFrag));
+       RTPRINT(FTX, TX_DESC, ("MacID = %d\r\n", pDesc->MacID));
+
+       RTPRINT(FTX, TX_DESC, ("DW 2 ==========\r\n"));
+       RTPRINT(FTX, TX_DESC, ("BK = %d\n", pDesc->Bk));
+       RTPRINT(FTX, TX_DESC, ("AGG_EN = %d\n", pDesc->AggEn));
+       RTPRINT(FTX, TX_DESC, ("Data Retry CNT = %d\n", pDesc->DATARC));
+       RTPRINT(FTX, TX_DESC, ("RTS Retry CNT = %d\n", pDesc->RTSRC));
+       RTPRINT(FTX, TX_DESC, ("TSFL = %d\n", pDesc->TSFL));
+       RTPRINT(FTX, TX_DESC, ("RetryLmtEn = %d\n", pDesc->RetryLmtEn));
+       RTPRINT(FTX, TX_DESC, ("DataRetryLmt = %d\r\n", pDesc->TxRetryLmt));
+
+       RTPRINT(FTX, TX_DESC, ("DW 3 ==========\r\n"));
+       RTPRINT(FTX, TX_DESC, ("Seq = %d\n", pDesc->Seq));
+       RTPRINT(FTX, TX_DESC, ("TailPage = %d\n", pDesc->TailPage));
+       RTPRINT(FTX, TX_DESC, ("NextHeadPage = %d\r\n", pDesc->NextHeadPage));
+
+       RTPRINT(FTX, TX_DESC, ("DW 4 ==========\r\n"));
+       RTPRINT(FTX, TX_DESC, ("UserRate = %d\n", pDesc->UserRate));
+       RTPRINT(FTX, TX_DESC, ("RTS STBC = %d\n", pDesc->RTSSTBC));
+       RTPRINT(FTX, TX_DESC, ("RTSSC = %d\n", pDesc->RTSSC));
+       RTPRINT(FTX, TX_DESC, ("STBC = %d\n", pDesc->STBC));
+       RTPRINT(FTX, TX_DESC, ("TXSC = %d\n", pDesc->TxSc));
+       RTPRINT(FTX, TX_DESC, ("TxBw = %d\n", pDesc->TxBW));
+       RTPRINT(FTX, TX_DESC, ("TxShort = %d\n", pDesc->TxShort));
+       RTPRINT(FTX, TX_DESC, ("RTSEn = %d\n", pDesc->RTSEn));
+       RTPRINT(FTX, TX_DESC, ("CTS2Self = %d\n", pDesc->CTS2Self));
+       RTPRINT(FTX, TX_DESC, ("RTSRateFBLmt = %d\n", pDesc->RTSRateFBLmt));
+       RTPRINT(FTX, TX_DESC, ("DisRTSFB = %d\n", pDesc->DisRTSFB));
+       RTPRINT(FTX, TX_DESC, ("RTSRate = %d\r\n", pDesc->RTSRate));
+
+       RTPRINT(FTX, TX_DESC, ("DW 5 ==========\r\n"));
+       RTPRINT(FTX, TX_DESC, ("TxAGC = %d\n", pDesc->TXAGCA));
+       RTPRINT(FTX, TX_DESC, ("TxAGC = %d\n", pDesc->TXAGCB));
+       RTPRINT(FTX, TX_DESC, ("DataRateFBLmt = %d\n", pDesc->TxRateFBLmt));
+       RTPRINT(FTX, TX_DESC, ("Disable Feedback = %d\n", pDesc->DisDataFB));
+       RTPRINT(FTX, TX_DESC, ("TX_Rate = %d\n", pDesc->TxRate));
+       RTPRINT(FTX, TX_DESC, ("PktID = %d\r\n", pDesc->PktID));
+
+       RTPRINT(FTX, TX_DESC, ("DW 6 ==========\r\n"));
+
+       RTPRINT(FTX, TX_DESC, ("DW 7-9 ==========\r\n"));
+       RTPRINT(FTX, TX_DESC, ("TxBufferSize = %d\r\n", pDesc->TxBufferSize));
+
+       RTPRINT(FTX, TX_DESC, ("PhyAddressLow = %08x\n", pDesc->TxBuffAddr));
+
+       RTPRINT(FTX, TX_DESC, ("NextDescAddress= %08X\n", pDesc->NextDescAddress));
+#else
+       u32* desc = (u32*)pDesc;
+       u8 i=0;
+       printk("#########################\n");  
+       for(i=0;i<=9;i++){
+               printk("#########>%x\n", desc[i]);      
+       }
+       printk("#########################\n\n");        
+#endif
+}
+#endif
+
+#ifdef RTL8192SE
+void rtl8192se_dump_tx_desc(tx_desc* pDesc)
+{      
+    printk("DW 0 =========\r\n");
+    printk("Own = %d\n", pDesc->OWN);
+    printk("GF = %d\n", pDesc->GF);
+    printk("LINIP = %d\n", pDesc->LINIP);
+    printk("FS = %d\n", pDesc->FirstSeg);
+    printk("LS = %d\n", pDesc->LastSeg);
+    printk("Offset = %d\n", pDesc->Offset);
+    printk("PktSize = %d\r\n", pDesc->PktSize);
+
+    printk("DW 1 ==========\r\n");
+    printk("HWPC = %d\n", pDesc->HWPC);
+    printk("PKTOFFSET = %d\n", pDesc->PktOffset);
+    printk("WDS = %d\n", pDesc->WDS);
+    printk("HTC = %d\n", pDesc->HTC);
+    printk("SecType = %d\n", pDesc->SecType);
+    printk("EnDescID = %d\n", pDesc->EnDescID);
+    printk("PktType = %d\n", pDesc->PktType);
+    printk("OUI = %d\n", pDesc->OUI);
+    printk("SecKeyId = %d\n", pDesc->KeyID);
+    printk("NonQos = %d\n", pDesc->NonQos);
+    printk("NoACM = %d\n", pDesc->NoACM);
+    printk("AckPolicy = %d\n", pDesc->AckPolicy);
+    printk("QueueSelect = %d\n", pDesc->QueueSel);
+    printk("PIFS = %d\n", pDesc->PIFS);
+    printk("MoreFrag = %d\n", pDesc->MoreFrag);
+    printk("MoreData = %d\n", pDesc->MoreData);
+    printk("MacID = %d\r\n", pDesc->MacID);
+
+    printk("DW 2 ==========\r\n");
+    printk("OwnMAC = %d\n", pDesc->OwnMAC);
+    printk("BK = %d\n", pDesc->BK);
+    printk("AGG_EN = %d\n", pDesc->AggEn);
+    printk("Data Retry CNT = %d\n", pDesc->DATARC);
+    printk("RTS Retry CNT = %d\n", pDesc->RTSRC);
+    printk("TSFL = %d\n", pDesc->TSFL);
+    printk("RetryLmtEn = %d\n", pDesc->RetryLmtEn);
+    printk("DataRetryLmt = %d\r\n", pDesc->DataRetryLmt);
+
+    printk("DW 3 ==========\r\n");
+    printk("Frag = %d\n", pDesc->Frag);
+    printk("Seq = %d\n", pDesc->Seq);
+    printk("TailPage = %d\n", pDesc->TailPage);
+    printk("NextHeadPage = %d\r\n", pDesc->NextHeadPage);
+
+    printk("DW 4 ==========\r\n");
+    printk("UserRate = %d\n", pDesc->UserRate);
+    printk("RTS STBC = %d\n", pDesc->RTSSTBC);
+    printk("RTSSC = %d\n", pDesc->RTSSC);
+    printk("RTSBW = %d\n", pDesc->RTSBW);
+    printk("RTSShort = %d\n", pDesc->RTSShort);
+    printk("RTSHT = %d\n", pDesc->RTSHT);
+    printk("RD = %d\n", pDesc->RD);
+    printk("STBC = %d\n", pDesc->STBC);
+    printk("TXSC = %d\n", pDesc->TXSC);
+    printk("TxBw = %d\n", pDesc->TxBw);
+    printk("TxShort = %d\n", pDesc->TxShort);
+    printk("TXHT = %d\n", pDesc->TXHT);
+    printk("RaBRSRID = %d\n", pDesc->RaBRSRID);
+    printk("RTSEn = %d\n", pDesc->RTSEn);
+    printk("CTS2Self = %d\n", pDesc->CTS2Self);
+    printk("RTSRateFBLmt = %d\n", pDesc->RTSRateFBLmt);
+    printk("DisRTSFB = %d\n", pDesc->DisRTSFB);
+    printk("RTSRate = %d\r\n", pDesc->RTSRate);
+
+    printk("DW 5 ==========\r\n");
+    printk("TxAGC = %d\n", pDesc->TxAGC);
+    printk("DataRateFBLmt = %d\n", pDesc->DataRateFBLmt);
+    printk("Disable Feedback = %d\n", pDesc->DISFB);
+    printk("TX_Rate = %d\n", pDesc->TxRate);
+    printk("PktID = %d\r\n", pDesc->PktID);
+
+    printk("DW 6 ==========\r\n");
+    printk("TCPChkSum = %d\n", pDesc->TCPChkSum);
+    printk("IPChkSum = %d\r\n", pDesc->IPChkSum);
+
+    printk("DW 7-9 ==========\r\n");
+    printk("TCPEn = %d\n", pDesc->TCPEn);
+    printk("IPHdrOffset = %d\n", pDesc->IPHdrOffset);
+    printk("TxBufferSize = %d\r\n", pDesc->TxBufferSize);
+
+    printk("PhyAddressLow = %08x\n", pDesc->TxBuffAddr);
+
+    printk("NextDescAddress= %08X\n", pDesc->NextDescAddress);
+}
+#endif
+
+#ifdef CONFIG_RTLWIFI_DEBUGFS
+/* debugfs related stuff */
+static struct dentry *rtl_debugfs_root;
+static int rtl_dbgfs_open(struct inode *inode, struct file *file)
+{
+       file->private_data = inode->i_private;
+       return 0;
+}
+
+static ssize_t rtl_dbgfs_register_write(struct file *file,
+               const char __user *user_buf,
+               size_t count,
+               loff_t *ppos)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)file->private_data;
+       char buf[32];
+       int buf_size;
+       u32 type, offset;
+
+       memset(buf, 0, sizeof(buf));
+       buf_size = min(count, sizeof(buf) -  1);
+       if (copy_from_user(buf, user_buf, buf_size))
+               return -EFAULT;
+
+       if (sscanf(buf, "%x,%x", &type, &offset ) == 2) {
+               priv->debug->hw_type = type;
+               priv->debug->hw_offset = offset;
+       } else {
+               priv->debug->hw_type = 0;
+               priv->debug->hw_offset = 0;
+       }
+
+       return count;
+}
+
+void  rtl_hardware_grab(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       int t = 0;
+       int timeout = 20; 
+       u32 mask = RF_CHANGE_BY_HW|RF_CHANGE_BY_PS|RF_CHANGE_BY_IPS;
+
+       priv->debug->hw_holding = true;
+#ifdef ENABLE_IPS
+       rtllib_ips_leave_wq(dev);
+#endif
+       do {
+               if ((priv->rtllib->RfOffReason & mask)) {
+                       msleep(100);
+                       t++;
+               } else {
+                       return;
+               }
+       } while (t < timeout);
+
+       return;
+}
+
+static ssize_t rtl_dbgfs_register_read(struct file *file,
+               char __user *user_buf,
+               size_t count,
+               loff_t *ppos)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)file->private_data;
+       struct net_device *dev = priv->rtllib->dev;
+       ssize_t ret = 0;
+       char buf[2048];
+       int n,i;
+       u32 len = 0;
+       u32 max = 0xff;
+       u32 page_no, path;
+
+       rtl_hardware_grab(dev);
+
+       if(!priv->debug->hw_type) {
+               page_no = (priv->debug->hw_offset > 0x0f)? 0x0f: priv->debug->hw_offset;
+#ifdef RTL8192SE 
+               if(page_no >= 0x08 ) {
+                       len += snprintf(buf + len, count - len,
+                                       "\n#################### BB page- %x##################\n ", page_no);
+                       for(n=0;n<=max;)
+                       {
+                               len += snprintf(buf + len, count - len, "\nD:  %2x > ",n);
+                               for(i=0;i<4 && n<=max;n+=4,i++)
+                                       len += snprintf(buf + len, count - len,
+                                                       "%8.8x ",rtl8192_QueryBBReg(dev,(page_no << 8|n), 
+                                                               bMaskDWord));
+                       }
+
+               } else 
+#endif         
+               {
+                       len += snprintf(buf + len,count - len,
+                                       "\n#################### MAC page- %x##################\n ", page_no);
+                       for(n=0;n<=max;) {
+                               len += snprintf(buf + len, count - len, "\nD:  %2x > ",n);
+                               for(i=0;i<16 && n<=max;i++,n++)
+                                       len += snprintf(buf + len, count - len,
+                                                       "%2.2x ",read_nic_byte(dev,((page_no<<8)|n)));
+                       }
+               }
+       } else {
+               path = (priv->debug->hw_offset < RF90_PATH_MAX)? priv->debug->hw_offset:(RF90_PATH_MAX - 1);
+               len += snprintf(buf + len, count - len,
+                               "\n#################### RF-PATH-%x ##################\n ", 0x0a+path);
+               for(n=0;n<=max;) {
+                       len += snprintf(buf+ len, count - len, "\nD:  %2x > ",n);
+                       for(i=0;i<4 && n<=max;n+=4,i++)
+                               len += snprintf(buf + len, count - len,
+                                       "%8.8x ",rtl8192_phy_QueryRFReg(dev, (RF90_RADIO_PATH_E)path,\
+                                               n, bMaskDWord)); 
+               }   
+       }
+
+       priv->debug->hw_holding = false;
+
+       len += snprintf(buf + len, count - len, "\n");
+       ret = simple_read_from_buffer(user_buf, count, ppos, buf, len);
+       return ret;
+}
+
+static const struct file_operations rtl_register_debug = {
+       .read   = rtl_dbgfs_register_read,
+       .write  = rtl_dbgfs_register_write,
+       .open   = rtl_dbgfs_open,
+       .owner  = THIS_MODULE
+};
+
+int rtl_debug_module_init(struct r8192_priv *priv, const char *name)
+{
+       rtl_fs_debug *debug;
+       int ret = 0;
+
+       if (!rtl_debugfs_root)
+               return -ENOENT;
+
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13))
+       debug = kzalloc(sizeof(rtl_fs_debug), GFP_KERNEL);
+#else
+       rtl_fs_debug = kmalloc(sizeof(*rtl_fs_debug), GFP_KERNEL);
+       memset(rtl_fs_debug,0,sizeof(*rtl_fs_debug));
+#endif
+       if (!debug) {
+               ret = -ENOMEM;
+               goto err;
+       }
+       priv->debug = debug;
+
+       debug->name = name;
+       debug->dir_drv = debugfs_create_dir(name, rtl_debugfs_root);
+       if (!debug->dir_drv ) {
+               ret = -ENOENT;
+               goto err;
+       }
+
+       debug->debug_register = debugfs_create_file("debug_register", S_IRUGO,
+                        debug->dir_drv, priv, &rtl_register_debug);
+       if(!debug->debug_register) {
+               ret = -ENOENT;
+               goto err;
+       }
+
+       return 0;
+err:
+        RT_TRACE(COMP_DBG, "Can't open the debugfs directory\n");
+        rtl_debug_module_remove(priv);
+        return ret;    
+
+}              
+
+void rtl_debug_module_remove(struct r8192_priv *priv)
+{
+       if (!priv->debug)
+               return;
+       debugfs_remove(priv->debug->debug_register);
+       debugfs_remove(priv->debug->dir_drv);
+       kfree(priv->debug);
+       priv->debug = NULL;
+}
+
+int rtl_create_debugfs_root(void)
+{       
+       rtl_debugfs_root = debugfs_create_dir(DRV_NAME, NULL);
+       if (!rtl_debugfs_root)
+               return -ENOENT;
+
+       return 0;
+}
+
+void rtl_remove_debugfs_root(void)
+{
+       debugfs_remove(rtl_debugfs_root);
+       rtl_debugfs_root = NULL;
+}
+#endif
+
+/****************************************************************************
+   -----------------------------PROCFS STUFF-------------------------
+*****************************************************************************/
+/*This part is related to PROC, which will record some statistics. */
+static struct proc_dir_entry *rtl8192_proc = NULL;
+
+static int proc_get_stats_ap(char *page, char **start,
+                         off_t offset, int count,
+                         int *eof, void *data)
+{
+       struct net_device *dev = data;
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       struct rtllib_device *ieee = priv->rtllib;
+       struct rtllib_network *target;
+       
+       int len = 0;
+
+        list_for_each_entry(target, &ieee->network_list, list) {
+
+               len += snprintf(page + len, count - len,
+                "%s ", target->ssid);
+
+               if(target->wpa_ie_len>0 || target->rsn_ie_len>0){
+                       len += snprintf(page + len, count - len,
+                       "WPA\n");
+               }
+               else{
+                        len += snprintf(page + len, count - len,
+                        "non_WPA\n");
+                }
+                
+        }
+       
+       *eof = 1;
+       return len;
+}
+
+static int proc_get_registers_0(char *page, char **start,
+                         off_t offset, int count,
+                         int *eof, void *data)
+{
+       struct net_device *dev = data;
+       
+       int len = 0;
+       int i,n,page0;
+                       
+       int max=0xff;
+       page0 = 0x000;
+       
+#ifdef RTL8192SE
+       /* This dump the current register page */
+       if(!IS_BB_REG_OFFSET_92S(page0)){
+               len += snprintf(page + len, count - len,
+                               "\n####################page %x##################\n ", (page0>>8));
+               for(n=0;n<=max;)
+               {
+                       len += snprintf(page + len, count - len,
+                                       "\nD:  %2x > ",n);
+                       for(i=0;i<16 && n<=max;i++,n++)
+                               len += snprintf(page + len, count - len,
+                                               "%2.2x ",read_nic_byte(dev,(page0|n)));
+               }
+       }else
+#endif
+       {
+               len += snprintf(page + len, count - len,
+                               "\n####################page %x##################\n ", (page0>>8));
+               for(n=0;n<=max;)
+               {
+                       len += snprintf(page + len, count - len, "\nD:  %2x > ",n);
+                       for(i=0;i<16 && n<=max;n++,i++)
+                               len += snprintf(page + len, count - len,
+                                               "%2.2x ",read_nic_byte(dev,(page0|n)));
+               }
+       }
+       len += snprintf(page + len, count - len,"\n");
+       *eof = 1;
+       return len;
+
+}
+static int proc_get_registers_1(char *page, char **start,
+                         off_t offset, int count,
+                         int *eof, void *data)
+{
+       struct net_device *dev = data;
+       
+       int len = 0;
+       int i,n,page0;
+                       
+       int max=0xff;
+       page0 = 0x100;
+
+       /* This dump the current register page */
+       len += snprintf(page + len, count - len,
+                       "\n####################page %x##################\n ", (page0>>8));
+       for(n=0;n<=max;)
+       {
+               len += snprintf(page + len, count - len,
+                               "\nD:  %2x > ",n);
+               for(i=0;i<16 && n<=max;i++,n++)
+                       len += snprintf(page + len, count - len,
+                                       "%2.2x ",read_nic_byte(dev,(page0|n)));
+       }
+       len += snprintf(page + len, count - len,"\n");
+       *eof = 1;
+       return len;
+
+}
+static int proc_get_registers_2(char *page, char **start,
+                         off_t offset, int count,
+                         int *eof, void *data)
+{
+       struct net_device *dev = data;
+       
+       int len = 0;
+       int i,n,page0;
+                       
+       int max=0xff;
+       page0 = 0x200;
+
+       /* This dump the current register page */
+       len += snprintf(page + len, count - len,
+                       "\n####################page %x##################\n ", (page0>>8));
+       for(n=0;n<=max;)
+       {
+               len += snprintf(page + len, count - len,
+                               "\nD:  %2x > ",n);
+               for(i=0;i<16 && n<=max;i++,n++)
+                       len += snprintf(page + len, count - len,
+                                       "%2.2x ",read_nic_byte(dev,(page0|n)));
+       }
+       len += snprintf(page + len, count - len,"\n");
+       *eof = 1;
+       return len;
+
+}
+static int proc_get_registers_3(char *page, char **start,
+                         off_t offset, int count,
+                         int *eof, void *data)
+{
+       struct net_device *dev = data;
+       
+       int len = 0;
+       int i,n,page0;
+                       
+       int max=0xff;
+       page0 = 0x300;
+
+       /* This dump the current register page */
+       len += snprintf(page + len, count - len,
+                       "\n####################page %x##################\n ", (page0>>8));
+       for(n=0;n<=max;)
+       {
+               len += snprintf(page + len, count - len,
+                               "\nD:  %2x > ",n);
+               for(i=0;i<16 && n<=max;i++,n++)
+                       len += snprintf(page + len, count - len,
+                                       "%2.2x ",read_nic_byte(dev,(page0|n)));
+       }
+       len += snprintf(page + len, count - len,"\n");
+       *eof = 1;
+       return len;
+
+}
+static int proc_get_registers_4(char *page, char **start,
+                         off_t offset, int count,
+                         int *eof, void *data)
+{
+       struct net_device *dev = data;
+       
+       int len = 0;
+       int i,n,page0;
+                       
+       int max=0xff;
+       page0 = 0x400;
+
+       /* This dump the current register page */
+       len += snprintf(page + len, count - len,
+                       "\n####################page %x##################\n ", (page0>>8));
+       for(n=0;n<=max;)
+       {
+               len += snprintf(page + len, count - len,
+                               "\nD:  %2x > ",n);
+               for(i=0;i<16 && n<=max;i++,n++)
+                       len += snprintf(page + len, count - len,
+                                       "%2.2x ",read_nic_byte(dev,(page0|n)));
+       }
+       len += snprintf(page + len, count - len,"\n");
+       *eof = 1;
+       return len;
+
+}
+static int proc_get_registers_5(char *page, char **start,
+                          off_t offset, int count,
+                          int *eof, void *data)
+{
+        struct net_device *dev = data;
+
+        int len = 0;
+        int i,n,page0;
+
+        int max=0xff;
+        page0 = 0x500;
+
+        /* This dump the current register page */
+        len += snprintf(page + len, count - len,
+                        "\n####################page %x##################\n ", (page0>>8));
+        for(n=0;n<=max;)
+        {
+                len += snprintf(page + len, count - len,
+                                "\nD:  %2x > ",n);
+                for(i=0;i<16 && n<=max;i++,n++)
+                        len += snprintf(page + len, count - len,
+                                        "%2.2x ",read_nic_byte(dev,(page0|n)));
+        }
+        len += snprintf(page + len, count - len,"\n");
+        *eof = 1;
+        return len;
+
+}
+static int proc_get_registers_6(char *page, char **start,
+                          off_t offset, int count,
+                          int *eof, void *data)
+{
+        struct net_device *dev = data;
+
+        int len = 0;
+        int i,n,page0;
+
+        int max=0xff;
+        page0 = 0x600;
+
+        /* This dump the current register page */
+        len += snprintf(page + len, count - len,
+                        "\n####################page %x##################\n ", (page0>>8));
+        for(n=0;n<=max;)
+        {
+                len += snprintf(page + len, count - len,
+                                "\nD:  %2x > ",n);
+                for(i=0;i<16 && n<=max;i++,n++)
+                        len += snprintf(page + len, count - len,
+                                        "%2.2x ",read_nic_byte(dev,(page0|n)));
+        }
+        len += snprintf(page + len, count - len,"\n");
+        *eof = 1;
+        return len;
+
+}
+static int proc_get_registers_7(char *page, char **start,
+                          off_t offset, int count,
+                          int *eof, void *data)
+{
+        struct net_device *dev = data;
+
+        int len = 0;
+        int i,n,page0;
+
+        int max=0xff;
+        page0 = 0x700;
+
+        /* This dump the current register page */
+        len += snprintf(page + len, count - len,
+                        "\n####################page %x##################\n ", (page0>>8));
+        for(n=0;n<=max;)
+        {
+                len += snprintf(page + len, count - len,
+                                "\nD:  %2x > ",n);
+                for(i=0;i<16 && n<=max;i++,n++)
+                        len += snprintf(page + len, count - len,
+                                        "%2.2x ",read_nic_byte(dev,(page0|n)));
+        }
+        len += snprintf(page + len, count - len,"\n");
+        *eof = 1;
+        return len;
+
+}
+static int proc_get_registers_8(char *page, char **start,
+                         off_t offset, int count,
+                         int *eof, void *data)
+{
+       struct net_device *dev = data;
+       
+       int len = 0;
+       int i,n,page0;
+                       
+       int max=0xff;
+       page0 = 0x800;
+
+       /* This dump the current register page */
+       len += snprintf(page + len, count - len,
+                       "\n####################page %x##################\n ", (page0>>8));
+       for(n=0;n<=max;)
+       {
+               len += snprintf(page + len, count - len, "\nD:  %2x > ",n);
+               for(i=0;i<4 && n<=max;n+=4,i++)
+                       len += snprintf(page + len, count - len,
+                                       "%8.8x ",rtl8192_QueryBBReg(dev,(page0|n), bMaskDWord));
+       }
+       len += snprintf(page + len, count - len,"\n");
+       *eof = 1;
+       return len;
+
+}
+static int proc_get_registers_9(char *page, char **start,
+                         off_t offset, int count,
+                         int *eof, void *data)
+{
+       struct net_device *dev = data;
+       
+       int len = 0;
+       int i,n,page0;
+                       
+       int max=0xff;
+       page0 = 0x900;
+
+       /* This dump the current register page */
+       len += snprintf(page + len, count - len,
+                       "\n####################page %x##################\n ", (page0>>8));
+       for(n=0;n<=max;)
+       {
+               len += snprintf(page + len, count - len, "\nD:  %2x > ",n);
+               for(i=0;i<4 && n<=max;n+=4,i++)
+                       len += snprintf(page + len, count - len,
+                                       "%8.8x ",rtl8192_QueryBBReg(dev,(page0|n), bMaskDWord));
+       }
+       len += snprintf(page + len, count - len,"\n");
+       *eof = 1;
+       return len;
+}
+static int proc_get_registers_a(char *page, char **start,
+                         off_t offset, int count,
+                         int *eof, void *data)
+{
+       struct net_device *dev = data;
+       
+       int len = 0;
+       int i,n,page0;
+                       
+       int max=0xff;
+       page0 = 0xa00;
+
+       /* This dump the current register page */
+       len += snprintf(page + len, count - len,
+                       "\n####################page %x##################\n ", (page0>>8));
+       for(n=0;n<=max;)
+       {
+               len += snprintf(page + len, count - len, "\nD:  %2x > ",n);
+               for(i=0;i<4 && n<=max;n+=4,i++)
+                       len += snprintf(page + len, count - len,
+                                       "%8.8x ",rtl8192_QueryBBReg(dev,(page0|n), bMaskDWord));
+       }
+       len += snprintf(page + len, count - len,"\n");
+       *eof = 1;
+       return len;
+}
+static int proc_get_registers_b(char *page, char **start,
+                         off_t offset, int count,
+                         int *eof, void *data)
+{
+       struct net_device *dev = data;
+       
+       int len = 0;
+       int i,n,page0;
+                       
+       int max=0xff;
+       page0 = 0xb00;
+
+       /* This dump the current register page */
+       len += snprintf(page + len, count - len,
+                       "\n####################page %x##################\n ", (page0>>8));
+       for(n=0;n<=max;)
+       {
+               len += snprintf(page + len, count - len, "\nD:  %2x > ",n);
+               for(i=0;i<4 && n<=max;n+=4,i++)
+                       len += snprintf(page + len, count - len,
+                                       "%8.8x ",rtl8192_QueryBBReg(dev,(page0|n), bMaskDWord));
+       }
+       len += snprintf(page + len, count - len,"\n");
+       *eof = 1;
+       return len;
+}
+static int proc_get_registers_c(char *page, char **start,
+                         off_t offset, int count,
+                         int *eof, void *data)
+{
+       struct net_device *dev = data;
+       
+       int len = 0;
+       int i,n,page0;
+                       
+       int max=0xff;
+       page0 = 0xc00;
+
+       /* This dump the current register page */
+       len += snprintf(page + len, count - len,
+                       "\n####################page %x##################\n ", (page0>>8));
+       for(n=0;n<=max;)
+       {
+               len += snprintf(page + len, count - len, "\nD:  %2x > ",n);
+               for(i=0;i<4 && n<=max;n+=4,i++)
+                       len += snprintf(page + len, count - len,
+                                       "%8.8x ",rtl8192_QueryBBReg(dev,(page0|n), bMaskDWord));
+       }
+       len += snprintf(page + len, count - len,"\n");
+       *eof = 1;
+       return len;
+}
+static int proc_get_registers_d(char *page, char **start,
+                         off_t offset, int count,
+                         int *eof, void *data)
+{
+       struct net_device *dev = data;
+       
+       int len = 0;
+       int i,n,page0;
+                       
+       int max=0xff;
+       page0 = 0xd00;
+
+       /* This dump the current register page */
+       len += snprintf(page + len, count - len,
+                       "\n####################page %x##################\n ", (page0>>8));
+       for(n=0;n<=max;)
+       {
+               len += snprintf(page + len, count - len, "\nD:  %2x > ",n);
+               for(i=0;i<4 && n<=max;n+=4,i++)
+                       len += snprintf(page + len, count - len,
+                                       "%8.8x ",rtl8192_QueryBBReg(dev,(page0|n), bMaskDWord));
+       }
+       len += snprintf(page + len, count - len,"\n");
+       *eof = 1;
+       return len;
+}
+static int proc_get_registers_e(char *page, char **start,
+                         off_t offset, int count,
+                         int *eof, void *data)
+{
+       struct net_device *dev = data;
+       
+       int len = 0;
+       int i,n,page0;
+                       
+       int max=0xff;
+       page0 = 0xe00;
+
+       /* This dump the current register page */
+       len += snprintf(page + len, count - len,
+                       "\n####################page %x##################\n ", (page0>>8));
+       for(n=0;n<=max;)
+       {
+               len += snprintf(page + len, count - len, "\nD:  %2x > ",n);
+               for(i=0;i<4 && n<=max;n+=4,i++)
+                       len += snprintf(page + len, count - len,
+                                       "%8.8x ",rtl8192_QueryBBReg(dev,(page0|n), bMaskDWord));
+       }
+       len += snprintf(page + len, count - len,"\n");
+       *eof = 1;
+       return len;
+}
+
+static int proc_get_reg_rf_a(char *page, char **start,
+                         off_t offset, int count,
+                         int *eof, void *data)
+{
+       struct net_device *dev = data;
+       
+       int len = 0;
+       int i,n;
+                       
+       int max=0xff;
+
+       /* This dump the current register page */
+       len += snprintf(page + len, count - len,
+                       "\n#################### RF-A ##################\n ");
+       for(n=0;n<=max;)
+       {
+               len += snprintf(page + len, count - len, "\nD:  %2x > ",n);
+               for(i=0;i<4 && n<=max;n+=4,i++)
+                       len += snprintf(page + len, count - len,
+                                       "%8.8x ",rtl8192_phy_QueryRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_A,n, bMaskDWord));
+       }
+       len += snprintf(page + len, count - len,"\n");
+       *eof = 1;
+       return len;
+}
+
+static int proc_get_reg_rf_b(char *page, char **start,
+                         off_t offset, int count,
+                         int *eof, void *data)
+{
+       struct net_device *dev = data;
+       
+       int len = 0;
+       int i,n;
+                       
+       int max=0xff;
+
+       /* This dump the current register page */
+       len += snprintf(page + len, count - len,
+                       "\n#################### RF-B ##################\n ");
+       for(n=0;n<=max;)
+       {
+               len += snprintf(page + len, count - len, "\nD:  %2x > ",n);
+               for(i=0;i<4 && n<=max;n+=4,i++)
+                       len += snprintf(page + len, count - len,
+                                       "%8.8x ",rtl8192_phy_QueryRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_B, n, bMaskDWord));
+       }
+       len += snprintf(page + len, count - len,"\n");
+       *eof = 1;
+       return len;
+}
+
+static int proc_get_reg_rf_c(char *page, char **start,
+                         off_t offset, int count,
+                         int *eof, void *data)
+{
+       struct net_device *dev = data;
+       
+       int len = 0;
+       int i,n;
+                       
+       int max=0xff;
+
+       /* This dump the current register page */
+       len += snprintf(page + len, count - len,
+                       "\n#################### RF-C ##################\n ");
+       for(n=0;n<=max;)
+       {
+               len += snprintf(page + len, count - len, "\nD:  %2x > ",n);
+               for(i=0;i<4 && n<=max;n+=4,i++)
+                       len += snprintf(page + len, count - len,
+                                       "%8.8x ",rtl8192_phy_QueryRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_C, n, bMaskDWord));
+       }
+       len += snprintf(page + len, count - len,"\n");
+       *eof = 1;
+       return len;
+}
+
+static int proc_get_reg_rf_d(char *page, char **start,
+                         off_t offset, int count,
+                         int *eof, void *data)
+{
+       struct net_device *dev = data;
+       
+       int len = 0;
+       int i,n;
+                       
+       int max=0xff;
+
+       /* This dump the current register page */
+       len += snprintf(page + len, count - len,
+                       "\n#################### RF-D ##################\n ");
+       for(n=0;n<=max;)
+       {
+               len += snprintf(page + len, count - len, "\nD:  %2x > ",n);
+               for(i=0;i<4 && n<=max;n+=4,i++)
+                       len += snprintf(page + len, count - len,
+                                       "%8.8x ",rtl8192_phy_QueryRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_D, n, bMaskDWord));
+       }
+       len += snprintf(page + len, count - len,"\n");
+       *eof = 1;
+       return len;
+}
+
+static int proc_get_cam_register(char *page, char **start,
+                         off_t offset, int count,
+                         int *eof, void *data)
+{
+       struct net_device *dev = data;
+       u32 target_command=0;
+       u32 target_content=0;
+       u8 entry_i=0;
+       u32 ulStatus;
+       int len = 0;
+       int i=100, j = 0;
+
+       /* This dump the current register page */
+       len += snprintf(page + len, count - len,
+                               "\n#################### SECURITY CAM ##################\n ");
+       for(j=0; j<TOTAL_CAM_ENTRY; j++)
+       {
+               if((j>6) && (j<31))
+                       continue;
+               len += snprintf(page + len, count - len, "\nD:  %2x > ",j);
+               for(entry_i=0;entry_i<CAM_CONTENT_COUNT;entry_i++)
+               {
+                       target_command= entry_i+CAM_CONTENT_COUNT*j;
+                       target_command= target_command | BIT31;
+
+                       while((i--)>=0)
+                       {
+                               ulStatus = read_nic_dword(dev, RWCAM);
+                               if(ulStatus & BIT31){
+                                       continue;
+                               }
+                               else{
+                                       break;
+                               }
+                       }
+                       write_nic_dword(dev, RWCAM, target_command);
+                       target_content = read_nic_dword(dev, RCAMO);
+                       len += snprintf(page + len, count - len,"%8.8x ",target_content);
+               }
+       }
+
+       len += snprintf(page + len, count - len,"\n");
+       *eof = 1;
+       return len;
+}
+
+static int proc_get_stats_tx(char *page, char **start,
+                         off_t offset, int count,
+                         int *eof, void *data)
+{
+       struct net_device *dev = data;
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       
+       int len = 0;
+       
+       len += snprintf(page + len, count - len,
+               "TX VI priority ok int: %lu\n"
+               "TX VO priority ok int: %lu\n"
+               "TX BE priority ok int: %lu\n"
+               "TX BK priority ok int: %lu\n"
+               "TX MANAGE priority ok int: %lu\n"
+               "TX BEACON priority ok int: %lu\n"
+               "TX BEACON priority error int: %lu\n"
+               "TX CMDPKT priority ok int: %lu\n"
+               "TX queue stopped?: %d\n"
+               "TX fifo overflow: %lu\n"
+               "TX total data packets %lu\n"           
+               "TX total data bytes :%lu\n",
+               priv->stats.txviokint,
+               priv->stats.txvookint,
+               priv->stats.txbeokint,
+               priv->stats.txbkokint,
+               priv->stats.txmanageokint,
+               priv->stats.txbeaconokint,
+               priv->stats.txbeaconerr,
+               priv->stats.txcmdpktokint,
+               netif_queue_stopped(dev),
+               priv->stats.txoverflow,
+               priv->rtllib->stats.tx_packets,
+               priv->rtllib->stats.tx_bytes
+
+
+               );
+                       
+       *eof = 1;
+       return len;
+}              
+
+
+
+static int proc_get_stats_rx(char *page, char **start,
+                         off_t offset, int count,
+                         int *eof, void *data)
+{
+       struct net_device *dev = data;
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       
+       int len = 0;
+       
+       len += snprintf(page + len, count - len,
+               "RX packets: %lu\n"
+               "RX data crc err: %lu\n"
+               "RX mgmt crc err: %lu\n"
+               "RX desc err: %lu\n"
+               "RX rx overflow error: %lu\n",
+               priv->stats.rxint,
+               priv->stats.rxdatacrcerr,
+               priv->stats.rxmgmtcrcerr,
+               priv->stats.rxrdu,
+               priv->stats.rxoverflow);
+                       
+       *eof = 1;
+       return len;
+}              
+
+void rtl8192_proc_module_init(void)
+{      
+       RT_TRACE(COMP_INIT, "Initializing proc filesystem");
+#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
+       rtl8192_proc=create_proc_entry(DRV_NAME, S_IFDIR, proc_net);
+#else
+       rtl8192_proc=create_proc_entry(DRV_NAME, S_IFDIR, init_net.proc_net);
+#endif
+}
+
+
+void rtl8192_proc_module_remove(void)
+{
+#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
+       remove_proc_entry(DRV_NAME, proc_net);
+#else
+       remove_proc_entry(DRV_NAME, init_net.proc_net);
+#endif
+}
+
+
+void rtl8192_proc_remove_one(struct net_device *dev)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+
+       printk("dev name %s\n",dev->name);
+
+       if (priv->dir_dev) {
+               remove_proc_entry("stats-tx", priv->dir_dev);
+               remove_proc_entry("stats-rx", priv->dir_dev);
+               remove_proc_entry("stats-ap", priv->dir_dev);
+               remove_proc_entry("registers-0", priv->dir_dev);
+               remove_proc_entry("registers-1", priv->dir_dev);
+               remove_proc_entry("registers-2", priv->dir_dev);
+               remove_proc_entry("registers-3", priv->dir_dev);
+               remove_proc_entry("registers-4", priv->dir_dev);
+               remove_proc_entry("registers-5", priv->dir_dev);
+               remove_proc_entry("registers-6", priv->dir_dev);
+               remove_proc_entry("registers-7", priv->dir_dev);
+               remove_proc_entry("registers-8", priv->dir_dev);
+               remove_proc_entry("registers-9", priv->dir_dev);
+               remove_proc_entry("registers-a", priv->dir_dev);
+               remove_proc_entry("registers-b", priv->dir_dev);
+               remove_proc_entry("registers-c", priv->dir_dev);
+               remove_proc_entry("registers-d", priv->dir_dev);
+               remove_proc_entry("registers-e", priv->dir_dev);
+               remove_proc_entry("RF-A", priv->dir_dev);
+               remove_proc_entry("RF-B", priv->dir_dev);
+               remove_proc_entry("RF-C", priv->dir_dev);
+               remove_proc_entry("RF-D", priv->dir_dev);
+               remove_proc_entry("SEC-CAM", priv->dir_dev);
+#ifdef _RTL8192_EXT_PATCH_
+               remove_proc_entry("ra0", rtl8192_proc);
+#else
+               remove_proc_entry("wlan0", rtl8192_proc);
+#endif
+               priv->dir_dev = NULL;
+       }
+}
+
+
+void rtl8192_proc_init_one(struct net_device *dev)
+{
+       struct proc_dir_entry *e;
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       priv->dir_dev = create_proc_entry(dev->name, 
+                                         S_IFDIR | S_IRUGO | S_IXUGO, 
+                                         rtl8192_proc);
+       if (!priv->dir_dev) {
+               RT_TRACE(COMP_ERR, "Unable to initialize /proc/net/rtl8192/%s\n",
+                     dev->name);
+               return;
+       }
+       e = create_proc_read_entry("stats-rx", S_IFREG | S_IRUGO,
+                                  priv->dir_dev, proc_get_stats_rx, dev);
+                                  
+       if (!e) {
+               RT_TRACE(COMP_ERR,"Unable to initialize "
+                     "/proc/net/rtl8192/%s/stats-rx\n",
+                     dev->name);
+       }
+       
+       
+       e = create_proc_read_entry("stats-tx", S_IFREG | S_IRUGO,
+                                  priv->dir_dev, proc_get_stats_tx, dev);
+                                  
+       if (!e) {
+               RT_TRACE(COMP_ERR, "Unable to initialize "
+                     "/proc/net/rtl8192/%s/stats-tx\n",
+                     dev->name);
+       }
+       
+       e = create_proc_read_entry("stats-ap", S_IFREG | S_IRUGO,
+                                  priv->dir_dev, proc_get_stats_ap, dev);
+                                  
+       if (!e) {
+               RT_TRACE(COMP_ERR, "Unable to initialize "
+                     "/proc/net/rtl8192/%s/stats-ap\n",
+                     dev->name);
+       }
+       
+       e = create_proc_read_entry("registers-0", S_IFREG | S_IRUGO,
+                                  priv->dir_dev, proc_get_registers_0, dev);
+       if (!e) {
+               RT_TRACE(COMP_ERR, "Unable to initialize "
+                     "/proc/net/rtl8192/%s/registers-0\n",
+                     dev->name);
+       }
+       e = create_proc_read_entry("registers-1", S_IFREG | S_IRUGO,
+                                  priv->dir_dev, proc_get_registers_1, dev);
+       if (!e) {
+               RT_TRACE(COMP_ERR, "Unable to initialize "
+                     "/proc/net/rtl8192/%s/registers-1\n",
+                     dev->name);
+       }
+       e = create_proc_read_entry("registers-2", S_IFREG | S_IRUGO,
+                                  priv->dir_dev, proc_get_registers_2, dev);
+       if (!e) {
+               RT_TRACE(COMP_ERR, "Unable to initialize "
+                     "/proc/net/rtl8192/%s/registers-2\n",
+                     dev->name);
+       }
+       e = create_proc_read_entry("registers-3", S_IFREG | S_IRUGO,
+                                  priv->dir_dev, proc_get_registers_3, dev);
+       if (!e) {
+               RT_TRACE(COMP_ERR, "Unable to initialize "
+                     "/proc/net/rtl8192/%s/registers-3\n",
+                     dev->name);
+       }
+       e = create_proc_read_entry("registers-4", S_IFREG | S_IRUGO,
+                                  priv->dir_dev, proc_get_registers_4, dev);
+       if (!e) {
+               RT_TRACE(COMP_ERR, "Unable to initialize "
+                     "/proc/net/rtl8192/%s/registers-4\n",
+                     dev->name);
+       }
+       e = create_proc_read_entry("registers-5", S_IFREG | S_IRUGO,
+                                  priv->dir_dev, proc_get_registers_5, dev);
+       if (!e) {
+               RT_TRACE(COMP_ERR, "Unable to initialize "
+                     "/proc/net/rtl8192/%s/registers-5\n",
+                     dev->name);
+       }
+       e = create_proc_read_entry("registers-6", S_IFREG | S_IRUGO,
+                                  priv->dir_dev, proc_get_registers_6, dev);
+       if (!e) {
+               RT_TRACE(COMP_ERR, "Unable to initialize "
+                     "/proc/net/rtl8192/%s/registers-6\n",
+                     dev->name);
+       }
+       e = create_proc_read_entry("registers-7", S_IFREG | S_IRUGO,
+                                  priv->dir_dev, proc_get_registers_7, dev);
+       if (!e) {
+               RT_TRACE(COMP_ERR, "Unable to initialize "
+                     "/proc/net/rtl8192/%s/registers-7\n",
+                     dev->name);
+       }
+       e = create_proc_read_entry("registers-8", S_IFREG | S_IRUGO,
+                                  priv->dir_dev, proc_get_registers_8, dev);
+       if (!e) {
+               RT_TRACE(COMP_ERR, "Unable to initialize "
+                     "/proc/net/rtl8192/%s/registers-8\n",
+                     dev->name);
+       }
+       e = create_proc_read_entry("registers-9", S_IFREG | S_IRUGO,
+                                  priv->dir_dev, proc_get_registers_9, dev);
+       if (!e) {
+               RT_TRACE(COMP_ERR, "Unable to initialize "
+                     "/proc/net/rtl8192/%s/registers-9\n",
+                     dev->name);
+       }
+       e = create_proc_read_entry("registers-a", S_IFREG | S_IRUGO,
+                                  priv->dir_dev, proc_get_registers_a, dev);
+       if (!e) {
+               RT_TRACE(COMP_ERR, "Unable to initialize "
+                     "/proc/net/rtl8192/%s/registers-a\n",
+                     dev->name);
+       }
+       e = create_proc_read_entry("registers-b", S_IFREG | S_IRUGO,
+                                  priv->dir_dev, proc_get_registers_b, dev);
+       if (!e) {
+               RT_TRACE(COMP_ERR, "Unable to initialize "
+                     "/proc/net/rtl8192/%s/registers-b\n",
+                     dev->name);
+       }
+       e = create_proc_read_entry("registers-c", S_IFREG | S_IRUGO,
+                                  priv->dir_dev, proc_get_registers_c, dev);
+       if (!e) {
+               RT_TRACE(COMP_ERR, "Unable to initialize "
+                     "/proc/net/rtl8192/%s/registers-c\n",
+                     dev->name);
+       }
+       e = create_proc_read_entry("registers-d", S_IFREG | S_IRUGO,
+                                  priv->dir_dev, proc_get_registers_d, dev);
+       if (!e) {
+               RT_TRACE(COMP_ERR, "Unable to initialize "
+                     "/proc/net/rtl8192/%s/registers-d\n",
+                     dev->name);
+       }
+       e = create_proc_read_entry("registers-e", S_IFREG | S_IRUGO,
+                                  priv->dir_dev, proc_get_registers_e, dev);
+       if (!e) {
+               RT_TRACE(COMP_ERR, "Unable to initialize "
+                     "/proc/net/rtl8192/%s/registers-e\n",
+                     dev->name);
+       }
+       e = create_proc_read_entry("RF-A", S_IFREG | S_IRUGO,
+                                  priv->dir_dev, proc_get_reg_rf_a, dev);
+       if (!e) {
+               RT_TRACE(COMP_ERR, "Unable to initialize "
+                     "/proc/net/rtl8192/%s/RF-A\n",
+                     dev->name);
+       }
+       e = create_proc_read_entry("RF-B", S_IFREG | S_IRUGO,
+                                  priv->dir_dev, proc_get_reg_rf_b, dev);
+       if (!e) {
+               RT_TRACE(COMP_ERR, "Unable to initialize "
+                     "/proc/net/rtl8192/%s/RF-B\n",
+                     dev->name);
+       }
+       e = create_proc_read_entry("RF-C", S_IFREG | S_IRUGO,
+                                  priv->dir_dev, proc_get_reg_rf_c, dev);
+       if (!e) {
+               RT_TRACE(COMP_ERR, "Unable to initialize "
+                     "/proc/net/rtl8192/%s/RF-C\n",
+                     dev->name);
+       }
+       e = create_proc_read_entry("RF-D", S_IFREG | S_IRUGO,
+                                  priv->dir_dev, proc_get_reg_rf_d, dev);
+       if (!e) {
+               RT_TRACE(COMP_ERR, "Unable to initialize "
+                     "/proc/net/rtl8192/%s/RF-D\n",
+                     dev->name);
+       }
+       e = create_proc_read_entry("SEC-CAM", S_IFREG | S_IRUGO,
+                                  priv->dir_dev, proc_get_cam_register, dev);
+       if (!e) {
+               RT_TRACE(COMP_ERR, "Unable to initialize "
+                     "/proc/net/rtl8192/%s/SEC-CAM\n",
+                     dev->name);
+       }
+#ifdef _RTL8192_EXT_PATCH_
+        if( priv->mshobj && priv->mshobj->ext_patch_create_proc )
+                priv->mshobj->ext_patch_create_proc(priv);
+#endif
+
+}
+
diff --git a/ubuntu/rtl8192se/rtl_debug.h b/ubuntu/rtl8192se/rtl_debug.h
new file mode 100644 (file)
index 0000000..fa50836
--- /dev/null
@@ -0,0 +1,89 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * Based on the r8180 driver, which is:
+ * Copyright 2004-2005 Andrea Merello <andreamrl@tiscali.it>, et al.
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+#ifndef _RTL_DEBUG_H
+#define _RTL_DEBUG_H
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/version.h>
+#if(LINUX_VERSION_CODE > KERNEL_VERSION(2,6,9))
+#include <linux/debugfs.h>
+#endif
+
+struct r8192_priv;
+struct _tx_desc_8192se;
+struct _TX_DESC_8192CE;
+struct net_device;
+
+typedef struct _rtl_fs_debug
+{
+       const char *name;
+       struct dentry *dir_drv;
+       struct dentry *debug_register;
+       u32 hw_type;
+       u32 hw_offset; 
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,20))
+       bool hw_holding;
+#else
+       u8 hw_holding;
+#endif
+} rtl_fs_debug;
+
+void print_buffer(u32 *buffer, int len);
+void dump_eprom(struct net_device *dev);
+void rtl8192_dump_reg(struct net_device *dev);
+
+#ifdef RTL8192SE
+void rtl8192se_dump_tx_desc(struct _tx_desc_8192se *pDesc);
+#endif
+#ifdef RTL8192CE
+void rtl8192ce_dump_tx_desc(struct _TX_DESC_8192CE *pDesc);
+#endif
+
+/* debugfs stuff */
+#ifdef CONFIG_RTLWIFI_DEBUGFS
+int rtl_debug_module_init(struct r8192_priv *priv, const char *name);
+void rtl_debug_module_remove(struct r8192_priv *priv);
+int rtl_create_debugfs_root(void);
+void rtl_remove_debugfs_root(void);
+#else
+static inline int rtl_debug_module_init(struct r8192_priv *priv, const char *name) {
+       return 0;
+}
+static inline void rtl_debug_module_remove(struct r8192_priv *priv) {
+       
+}
+static inline int rtl_create_debugfs_root(void) {
+       return 0;
+}
+static inline void rtl_remove_debugfs_root(void) {
+}
+#endif
+
+/* proc stuff */
+void rtl8192_proc_init_one(struct net_device *dev);
+void rtl8192_proc_remove_one(struct net_device *dev);
+void rtl8192_proc_module_init(void);
+void rtl8192_proc_module_remove(void);
+#endif
diff --git a/ubuntu/rtl8192se/rtl_dm.c b/ubuntu/rtl8192se/rtl_dm.c
new file mode 100644 (file)
index 0000000..d048416
--- /dev/null
@@ -0,0 +1,5364 @@
+/******************************************************************************\r
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ * The full GNU General Public License is included in this distribution in the\r
+ * file called LICENSE.\r
+ *\r
+ * Contact Information:\r
+ * wlanfae <wlanfae@realtek.com>\r
+******************************************************************************/\r
+#ifdef RTL8192SE\r
+#include "rtl_core.h"\r
+#include "rtl_dm.h"\r
+#include "rtl8192s/r8192S_phy.h"\r
+#include "rtl8192s/r8192S_phyreg.h"\r
+#else\r
+#include "rtl_core.h"\r
+#include "rtl_dm.h"\r
+#include "rtl8192e/r8192E_hw.h"\r
+#include "rtl8192e/r8192E_phy.h"\r
+#include "rtl8192e/r8192E_phyreg.h"\r
+#include "rtl8192e/r8190P_rtl8256.h"\r
+#endif\r
+#ifdef _RTL8192_EXT_PATCH_\r
+#include "../../mshclass/msh_class.h"\r
+#endif\r
+\r
+/*---------------------------Define Local Constant---------------------------*/\r
+#ifdef  RTL8190P\r
+static u32 edca_setting_DL[HT_IOT_PEER_MAX] = \r
+{ 0x5e4322,    
+   0x5e4322,   
+   0x5ea44f,   
+   0x5e4322,   
+   0x604322,   
+   0xa44f,             
+   0x5e4322,   
+   0x5e4322    
+ };\r
+\r
+static u32 edca_setting_DL_GMode[HT_IOT_PEER_MAX] = \r
+{ 0x5e4322,    
+   0x5e4322,   
+   0x5e4322,   
+   0x5e4322,   
+   0x604322,   
+   0xa44f,             
+   0x5e4322,   
+   0x5e4322    
+};\r
+               \r
+static u32 edca_setting_UL[HT_IOT_PEER_MAX] = \r
+{ 0x5e4322,    
+   0xa44f,     
+   0x5ea44f,   
+   0x5e4322,    
+   0x604322,   
+   0x5e4322,   
+   0x5e4322,   
+   0x5e4322    
+};\r
+\r
+#elif defined RTL8192E\r
+static u32 edca_setting_DL[HT_IOT_PEER_MAX] = \r
+{ 0x5e4322,    
+   0x5e4322,   
+   0x5ea44f,   
+   0x5e4322,   
+   0x604322,   
+   0xa44f,             
+   0x5e4322,   
+   0x5e4332    
+ };\r
+\r
+static u32 edca_setting_DL_GMode[HT_IOT_PEER_MAX] = \r
+{ 0x5e4322,    
+   0x5e4322,   
+   0x5e4322,   
+   0x5e4322,   
+   0x604322,   
+   0xa44f,             
+   0x5e4322,   
+   0x5e4322    
+};\r
+\r
+static u32 edca_setting_UL[HT_IOT_PEER_MAX] = \r
+{ 0x5e4322,    
+   0xa44f,             
+   0x5ea44f,   
+   0x5e4322,   
+   0x604322,   
+   0x5e4322,   
+   0x5e4322,   
+   0x5e4332    
+};\r
+\r
+#elif defined(RTL8192SE)\r
+static u32 edca_setting_DL[HT_IOT_PEER_MAX] = \r
+{ 0xa44f,              
+#ifdef _RTL8192_EXT_PATCH_\r
+   0xa44f,             
+#else\r
+   0x5ea44f,   
+#endif\r
+   0x5ea44f,   
+   0xa630,             
+   0xa44f,
+#ifdef _RTL8192_EXT_PATCH_\r
+   0x4322,
+#else\r
+   0xa630,             
+#endif\r
+   0xa630,             
+   0xa42b,
+   0x5e4322,   
+   0x5e4322    
+ };    \r
+\r
+static u32 edca_setting_DL_GMode[HT_IOT_PEER_MAX] = \r
+                                                                                                                       \r
+{ 0x4322,              
+   0xa44f,             
+#ifdef _RTL8192_EXT_PATCH_\r
+   0x4322,             
+#else\r
+   0x5ea44f,   
+#endif\r
+   0xa42b,             
+   0x5e4322,   
+   0x4322,             
+   0xa430,             
+   0x5ea44f,   
+   0x5e4322,   
+   0x5e4322    
+};\r
+\r
+static u32 edca_setting_UL[HT_IOT_PEER_MAX] = \r
+{ 0x5e4322,    
+#ifdef _RTL8192_EXT_PATCH_\r
+   0x5ea44f,   
+#else\r
+   0xa44f,             
+#endif\r
+   0x5ea44f,   
+   0x5ea322,   
+   0x5ea422,
+   0x5ea322,   
+   0x3ea44f,   
+   0x5ea44f,   
+   0x5e4322,   
+   0x5e4322    
+ };    \r
+#endif\r
+\r
+#define RTK_UL_EDCA 0xa44f\r
+#define RTK_DL_EDCA 0x5e4322\r
+/*---------------------------Define Local Constant---------------------------*/\r
+\r
+\r
+/*------------------------Define global variable-----------------------------*/\r
+dig_t  dm_digtable;\r
+u8             dm_shadow[16][256] = {{0}};\r
+DRxPathSel     DM_RxPathSelTable;\r
+/*------------------------Define global variable-----------------------------*/\r
+\r
+\r
+/*------------------------Define local variable------------------------------*/\r
+/*------------------------Define local variable------------------------------*/\r
+\r
+\r
+/*--------------------Define export function prototype-----------------------*/\r
+extern void    init_hal_dm(struct net_device *dev);\r
+extern void deinit_hal_dm(struct net_device *dev);\r
+\r
+extern void hal_dm_watchdog(struct net_device *dev);\r
+\r
+\r
+extern void    init_rate_adaptive(struct net_device *dev);\r
+extern void    dm_txpower_trackingcallback(void *data);\r
+\r
+extern void    dm_restore_dynamic_mechanism_state(struct net_device *dev);\r
+extern void    dm_backup_dynamic_mechanism_state(struct net_device *dev);\r
+extern void    dm_change_dynamic_initgain_thresh(struct net_device *dev,\r
+                                                               u32             dm_type,\r
+                                                               u32             dm_value);\r
+extern void    DM_ChangeFsyncSetting(struct net_device *dev,\r
+                                                                                               s32             DM_Type,\r
+                                                                                               s32             DM_Value);\r
+extern void dm_force_tx_fw_info(struct net_device *dev,\r
+                                                                               u32             force_type,\r
+                                                                               u32             force_value);\r
+extern void    dm_init_edca_turbo(struct net_device *dev);\r
+extern void    dm_rf_operation_test_callback(unsigned long data);\r
+extern void    dm_rf_pathcheck_workitemcallback(void *data);\r
+extern void dm_fsync_timer_callback(unsigned long data);\r
+#if 0\r
+extern bool    dm_check_lbus_status(struct net_device *dev);\r
+#endif\r
+extern void dm_check_fsync(struct net_device *dev);\r
+extern void    dm_shadow_init(struct net_device *dev);\r
+extern void dm_initialize_txpower_tracking(struct net_device *dev);\r
+\r
+#if (defined RTL8192E || defined RTL8192SE)\r
+extern  void    dm_CheckRfCtrlGPIO(void *data);\r
+#endif\r
+\r
+#ifdef RTL8192SE\r
+extern void DM_TXPowerTracking92SDirectCall(struct net_device *dev);\r
+static void dm_CtrlInitGainByTwoPort(struct net_device *dev);\r
+static void dm_CtrlInitGainBeforeConnectByRssiAndFalseAlarm(struct net_device *dev);\r
+static void    dm_initial_gain_STABeforeConnect(struct net_device *dev);\r
+\r
+void   dm_InitRateAdaptiveMask(struct net_device *dev);\r
+static void dm_RefreshRateAdaptiveMask(struct net_device *dev);\r
+static         void Adhoc_dm_CheckRateAdaptive(struct net_device * dev);\r
+void           Adhoc_InitRateAdaptive(struct net_device *dev,struct sta_info  *pEntry);\r
+#endif\r
+\r
+/*--------------------Define export function prototype-----------------------*/\r
+\r
+\r
+/*---------------------Define local function prototype-----------------------*/\r
+static void    dm_check_rate_adaptive(struct net_device *dev);\r
+\r
+static void    dm_init_bandwidth_autoswitch(struct net_device *dev);\r
+static void    dm_bandwidth_autoswitch(        struct net_device *dev);\r
+\r
+\r
+static void    dm_check_txpower_tracking(struct net_device *dev);\r
+\r
+\r
+\r
+\r
+\r
+#if defined(RTL8192E)||defined(RTL8190P)\r
+static void    dm_bb_initialgain_restore(struct net_device *dev);\r
+\r
+\r
+static void    dm_bb_initialgain_backup(struct net_device *dev);\r
+#endif\r
+\r
+static void    dm_dig_init(struct net_device *dev);\r
+static void    dm_ctrl_initgain_byrssi(struct net_device *dev);\r
+static void    dm_ctrl_initgain_byrssi_highpwr(struct net_device *dev);\r
+static void    dm_ctrl_initgain_byrssi_by_driverrssi(  struct net_device *dev);\r
+static void    dm_ctrl_initgain_byrssi_by_fwfalse_alarm(struct net_device *dev);\r
+static void    dm_initial_gain(struct net_device *dev);\r
+static void    dm_pd_th(struct net_device *dev);\r
+static void    dm_cs_ratio(struct net_device *dev);\r
+\r
+static void dm_init_ctstoself(struct net_device *dev);\r
+static void dm_Init_WA_Broadcom_IOT(struct net_device *dev);\r
+#ifdef RTL8192SE\r
+static void dm_WA_Broadcom_IOT(struct net_device *dev);\r
+#endif\r
+\r
+\r
+static void    dm_check_edca_turbo(struct net_device *dev);\r
+\r
+#if 0\r
+static void    dm_check_rfctrl_gpio(struct net_device *dev);\r
+#endif\r
+\r
+#ifndef RTL8190P \r
+#endif\r
+static void dm_check_pbc_gpio(struct net_device *dev);\r
+\r
+\r
+static void    dm_check_rx_path_selection(struct net_device *dev);\r
+static         void dm_init_rxpath_selection(struct net_device *dev);\r
+static void dm_rxpath_sel_byrssi(struct net_device *dev);\r
+\r
+\r
+static void dm_init_fsync(struct net_device *dev);\r
+static void dm_deInit_fsync(struct net_device *dev);\r
+\r
+static void    dm_check_txrateandretrycount(struct net_device *dev);\r
+\r
+static  void   dm_check_ac_dc_power(struct net_device *dev);\r
+/*---------------------Define local function prototype-----------------------*/\r
+\r
+static void    dm_init_dynamic_txpower(struct net_device *dev);\r
+static void    dm_dynamic_txpower(struct net_device *dev);\r
+\r
+\r
+static void dm_send_rssi_tofw(struct net_device *dev);\r
+static void    dm_ctstoself(struct net_device *dev);\r
+#ifdef _RTL8192_EXT_PATCH_\r
+static void dm_refresh_rate_adaptive_mask(struct net_device *dev);\r
+#endif\r
+/*---------------------------Define function prototype------------------------*/\r
+\r
+extern void\r
+init_hal_dm(struct net_device *dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+#ifdef _RTL8192_EXT_PATCH_\r
+       priv->DM_Type = DM_Type_ByDriver;\r
+#endif \r
+\r
+       priv->undecorated_smoothed_pwdb = -1;   \r
+       \r
+       dm_init_dynamic_txpower(dev);\r
+\r
+#ifdef RTL8192SE\r
+       if (IS_HARDWARE_TYPE_8192SE(dev))\r
+               dm_InitRateAdaptiveMask(dev);\r
+       else\r
+#endif\r
+               init_rate_adaptive(dev);\r
+\r
+       dm_dig_init(dev);\r
+       dm_init_edca_turbo(dev);\r
+       dm_init_bandwidth_autoswitch(dev);\r
+       dm_init_fsync(dev);\r
+       dm_init_rxpath_selection(dev);\r
+       dm_init_ctstoself(dev);\r
+        if (IS_HARDWARE_TYPE_8192SE(dev))\r
+       dm_Init_WA_Broadcom_IOT(dev);\r
+               \r
+#if (defined RTL8192E || defined RTL8192SE)\r
+       INIT_DELAYED_WORK_RSL(&priv->gpio_change_rf_wq, (void *)dm_CheckRfCtrlGPIO,dev);\r
+#endif\r
+\r
+}      
+\r
+extern void deinit_hal_dm(struct net_device *dev)\r
+{\r
+\r
+       dm_deInit_fsync(dev);\r
+       \r
+}\r
+\r
+\r
+#ifdef USB_RX_AGGREGATION_SUPPORT\r
+void dm_CheckRxAggregation(struct net_device *dev) {\r
+       struct r8192_priv *priv = rtllib_priv((struct net_device *)dev);\r
+       PRT_HIGH_THROUGHPUT     pHTInfo = priv->rtllib->pHTInfo;\r
+       static unsigned long    lastTxOkCnt = 0;\r
+       static unsigned long    lastRxOkCnt = 0;\r
+       unsigned long           curTxOkCnt = 0;\r
+       unsigned long           curRxOkCnt = 0;\r
+\r
+       curTxOkCnt = priv->stats.txbytesunicast - lastTxOkCnt;\r
+       curRxOkCnt = priv->stats.rxbytesunicast - lastRxOkCnt;\r
+\r
+       if((curTxOkCnt + curRxOkCnt) < 15000000) {\r
+               return;\r
+       }\r
+\r
+       if(curTxOkCnt > 4*curRxOkCnt) {\r
+               if (priv->bCurrentRxAggrEnable) {\r
+                       write_nic_dword(dev, 0x1a8, 0);\r
+                       priv->bCurrentRxAggrEnable = false;\r
+               }\r
+       }else{\r
+               if (!priv->bCurrentRxAggrEnable && !pHTInfo->bCurrentRT2RTAggregation) {\r
+                       u32 ulValue;\r
+                       ulValue = (pHTInfo->UsbRxFwAggrEn<<24) | (pHTInfo->UsbRxFwAggrPageNum<<16) |\r
+                               (pHTInfo->UsbRxFwAggrPacketNum<<8) | (pHTInfo->UsbRxFwAggrTimeout);\r
+                       write_nic_dword(dev, 0x1a8, ulValue);\r
+                       priv->bCurrentRxAggrEnable = true;\r
+               }\r
+       }\r
+\r
+       lastTxOkCnt = priv->stats.txbytesunicast;\r
+       lastRxOkCnt = priv->stats.rxbytesunicast;\r
+}      
+#endif \r
+\r
+\r
+\r
+extern  void    hal_dm_watchdog(struct net_device *dev)\r
+{\r
+#ifdef RTL8192SE\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+#endif\r
+#ifdef _RTL8192_EXT_PATCH_\r
+       if(priv->being_init_adapter)\r
+               return;\r
+#endif\r
+       dm_check_ac_dc_power(dev);\r
+\r
+       dm_check_pbc_gpio(dev);\r
+       dm_check_txrateandretrycount(dev);\r
+       dm_check_edca_turbo(dev);\r
+#ifdef _RTL8192_EXT_PATCH_\r
+       dm_refresh_rate_adaptive_mask(dev);\r
+#endif\r
+        if (IS_HARDWARE_TYPE_8192SE(dev)){\r
+#ifdef RTL8192SE\r
+           dm_WA_Broadcom_IOT(dev);\r
+            return;\r
+            dm_check_txpower_tracking(dev);\r
+           dm_ctrl_initgain_byrssi(dev);       
+               dm_dynamic_txpower(dev);\r
+               dm_RefreshRateAdaptiveMask(dev);\r
+               dm_check_fsync(dev); \r
+               if(priv->rtllib->iw_mode == IW_MODE_ADHOC)\r
+                       Adhoc_dm_CheckRateAdaptive(dev);\r
+               else\r
+                       dm_check_rate_adaptive(dev);\r
+#endif\r
+        }\r
+       dm_check_rate_adaptive(dev);\r
+       dm_dynamic_txpower(dev);        \r
+       dm_check_txpower_tracking(dev);\r
+       \r
+       dm_ctrl_initgain_byrssi(dev);\r
+       dm_bandwidth_autoswitch(dev);\r
+\r
+       dm_check_rx_path_selection(dev);\r
+       dm_check_fsync(dev); \r
+\r
+       dm_send_rssi_tofw(dev);\r
+       dm_ctstoself(dev);\r
+       \r
+#ifdef USB_RX_AGGREGATION_SUPPORT\r
+       dm_CheckRxAggregation(dev);\r
+#endif \r
+}      
+\r
+void dm_check_ac_dc_power(struct net_device *dev) \r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       static char *ac_dc_check_script_path = "/etc/acpi/wireless-rtl-ac-dc-power.sh";\r
+       char *argv[] = {ac_dc_check_script_path,DRV_NAME,NULL};\r
+       static char *envp[] = {"HOME=/", \r
+                       "TERM=linux", \r
+                       "PATH=/usr/bin:/bin", \r
+                        NULL};\r
+\r
+       if(priv->ResetProgress == RESET_TYPE_SILENT)\r
+       {\r
+               RT_TRACE((COMP_INIT | COMP_POWER | COMP_RF), "GPIOChangeRFWorkItemCallBack(): Silent Reseting!!!!!!!\n");\r
+               return;\r
+       }\r
+\r
+       if(priv->rtllib->state != RTLLIB_LINKED) {\r
+               return;\r
+       }\r
+       call_usermodehelper(ac_dc_check_script_path,argv,envp,1);\r
+\r
+       return;\r
+};\r
+\r
+\r
+extern void init_rate_adaptive(struct net_device * dev)        \r
+{\r
+\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       prate_adaptive                  pra = (prate_adaptive)&priv->rate_adaptive;\r
+       \r
+       pra->ratr_state = DM_RATR_STA_MAX;\r
+       pra->high2low_rssi_thresh_for_ra = RateAdaptiveTH_High;\r
+       pra->low2high_rssi_thresh_for_ra20M = RateAdaptiveTH_Low_20M+5;\r
+       pra->low2high_rssi_thresh_for_ra40M = RateAdaptiveTH_Low_40M+5;\r
+\r
+       pra->high_rssi_thresh_for_ra = RateAdaptiveTH_High+5;\r
+       pra->low_rssi_thresh_for_ra20M = RateAdaptiveTH_Low_20M;\r
+       pra->low_rssi_thresh_for_ra40M = RateAdaptiveTH_Low_40M;\r
+       \r
+       if(priv->CustomerID == RT_CID_819x_Netcore)\r
+               pra->ping_rssi_enable = 1;\r
+       else\r
+               pra->ping_rssi_enable = 0;                              \r
+       pra->ping_rssi_thresh_for_ra = 15;\r
+       \r
+       \r
+       if (priv->rf_type == RF_2T4R)\r
+       {\r
+               pra->upper_rssi_threshold_ratr          =       0x8f0f0000;\r
+               pra->middle_rssi_threshold_ratr         =       0x8f0ff000;\r
+               pra->low_rssi_threshold_ratr            =       0x8f0ff001;\r
+               pra->low_rssi_threshold_ratr_40M        =       0x8f0ff005;\r
+               pra->low_rssi_threshold_ratr_20M        =       0x8f0ff001;\r
+               pra->ping_rssi_ratr     =       0x0000000d;
+       }\r
+       else if (priv->rf_type == RF_1T2R)\r
+       {\r
+               pra->upper_rssi_threshold_ratr          =       0x000f0000;             \r
+               pra->middle_rssi_threshold_ratr         =       0x000ff000;\r
+               pra->low_rssi_threshold_ratr            =       0x000ff001;\r
+               pra->low_rssi_threshold_ratr_40M        =       0x000ff005;\r
+               pra->low_rssi_threshold_ratr_20M        =       0x000ff001;\r
+               pra->ping_rssi_ratr     =       0x0000000d;
+       }\r
+       \r
+}      
+\r
+\r
+static void dm_check_rate_adaptive(struct net_device * dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       PRT_HIGH_THROUGHPUT     pHTInfo = priv->rtllib->pHTInfo;\r
+       prate_adaptive                  pra = (prate_adaptive)&priv->rate_adaptive;\r
+       u32                                             currentRATR, targetRATR = 0;\r
+       u32                                             LowRSSIThreshForRA = 0, HighRSSIThreshForRA = 0;\r
+       bool                                            bshort_gi_enabled = false;\r
+       static u8                                       ping_rssi_state=0;\r
+\r
+       \r
+#ifdef _RTL8192_EXT_PATCH_\r
+       if((!priv->up)&& (!priv->mesh_up))\r
+#else\r
+       if(!priv->up)\r
+#endif\r
+       {\r
+               RT_TRACE(COMP_RATE, "<---- dm_check_rate_adaptive(): driver is going to unload\n");\r
+               return;\r
+       }\r
+\r
+       if(pra->rate_adaptive_disabled)
+               return;\r
+\r
+       if( !(priv->rtllib->mode == WIRELESS_MODE_N_24G ||\r
+                priv->rtllib->mode == WIRELESS_MODE_N_5G))\r
+                return;\r
+               \r
+       if( priv->rtllib->state == RTLLIB_LINKED )\r
+       {\r
+\r
+               bshort_gi_enabled = (pHTInfo->bCurTxBW40MHz && pHTInfo->bCurShortGI40MHz) ||\r
+                       (!pHTInfo->bCurTxBW40MHz && pHTInfo->bCurShortGI20MHz);\r
+       \r
+\r
+               pra->upper_rssi_threshold_ratr =\r
+                               (pra->upper_rssi_threshold_ratr & (~BIT31)) | ((bshort_gi_enabled)? BIT31:0) ;\r
+\r
+               pra->middle_rssi_threshold_ratr = \r
+                               (pra->middle_rssi_threshold_ratr & (~BIT31)) | ((bshort_gi_enabled)? BIT31:0) ;\r
+\r
+               if (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)\r
+               {\r
+                       pra->low_rssi_threshold_ratr = \r
+                               (pra->low_rssi_threshold_ratr_40M & (~BIT31)) | ((bshort_gi_enabled)? BIT31:0) ;\r
+               }\r
+               else\r
+               {\r
+                       pra->low_rssi_threshold_ratr = \r
+                       (pra->low_rssi_threshold_ratr_20M & (~BIT31)) | ((bshort_gi_enabled)? BIT31:0) ;\r
+               }\r
+               pra->ping_rssi_ratr = \r
+                               (pra->ping_rssi_ratr & (~BIT31)) | ((bshort_gi_enabled)? BIT31:0) ;\r
+               \r
+               if (pra->ratr_state == DM_RATR_STA_HIGH)\r
+               {\r
+                       HighRSSIThreshForRA     = pra->high2low_rssi_thresh_for_ra;\r
+                       LowRSSIThreshForRA      = (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)?\r
+                                       (pra->low_rssi_thresh_for_ra40M):(pra->low_rssi_thresh_for_ra20M);\r
+               }\r
+               else if (pra->ratr_state == DM_RATR_STA_LOW)\r
+               {\r
+                       HighRSSIThreshForRA     = pra->high_rssi_thresh_for_ra;\r
+                       LowRSSIThreshForRA      = (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)?\r
+                                       (pra->low2high_rssi_thresh_for_ra40M):(pra->low2high_rssi_thresh_for_ra20M);\r
+               }\r
+               else\r
+               {\r
+                       HighRSSIThreshForRA     = pra->high_rssi_thresh_for_ra;\r
+                       LowRSSIThreshForRA      = (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)?\r
+                                       (pra->low_rssi_thresh_for_ra40M):(pra->low_rssi_thresh_for_ra20M);\r
+               }\r
+       \r
+               if(priv->undecorated_smoothed_pwdb >= (long)HighRSSIThreshForRA)\r
+               {\r
+                       pra->ratr_state = DM_RATR_STA_HIGH;\r
+                       targetRATR = pra->upper_rssi_threshold_ratr;\r
+               }else if(priv->undecorated_smoothed_pwdb >= (long)LowRSSIThreshForRA)\r
+               {\r
+                       pra->ratr_state = DM_RATR_STA_MIDDLE;\r
+                       targetRATR = pra->middle_rssi_threshold_ratr;\r
+               }else\r
+               {\r
+                       pra->ratr_state = DM_RATR_STA_LOW;\r
+                       targetRATR = pra->low_rssi_threshold_ratr;\r
+               }\r
+\r
+               if(pra->ping_rssi_enable)\r
+               {\r
+                       if(priv->undecorated_smoothed_pwdb < (long)(pra->ping_rssi_thresh_for_ra+5))\r
+                       {\r
+                               if( (priv->undecorated_smoothed_pwdb < (long)pra->ping_rssi_thresh_for_ra) ||\r
+                                       ping_rssi_state )\r
+                               {\r
+                                       pra->ratr_state = DM_RATR_STA_LOW;\r
+                                       targetRATR = pra->ping_rssi_ratr;\r
+                                       ping_rssi_state = 1;\r
+                               }\r
+                       }\r
+                       else\r
+                       {\r
+                               ping_rssi_state = 0;\r
+                       }\r
+               }\r
+               \r
+#if 1          \r
+               if(priv->rtllib->GetHalfNmodeSupportByAPsHandler(dev))\r
+                       targetRATR &=  0xf00fffff;\r
+#endif\r
+\r
+               currentRATR = read_nic_dword(dev, RATR0);\r
+               if( targetRATR !=  currentRATR )\r
+               {\r
+                       u32 ratr_value;\r
+                       ratr_value = targetRATR;\r
+                       RT_TRACE(COMP_RATE,"currentRATR = %x, targetRATR = %x\n", currentRATR, targetRATR);                             \r
+                       if(priv->rf_type == RF_1T2R)            \r
+                       {\r
+                               ratr_value &= ~(RATE_ALL_OFDM_2SS);\r
+                       }\r
+                       write_nic_dword(dev, RATR0, ratr_value);\r
+                       write_nic_byte(dev, UFWP, 1);\r
+                       \r
+                       pra->last_ratr = targetRATR;\r
+               }\r
+               \r
+       }\r
+       else\r
+       {\r
+               pra->ratr_state = DM_RATR_STA_MAX;\r
+       }\r
+\r
+}      
+\r
+#ifdef RTL8192SE\r
+void dm_InitRateAdaptiveMask(struct net_device * dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       prate_adaptive  pRA =  (prate_adaptive)&priv->rate_adaptive;\r
+\r
+       pRA->ratr_state = DM_RATR_STA_MAX;\r
+       pRA->PreRATRState = DM_RATR_STA_MAX;\r
+\r
+       if (priv->DM_Type == DM_Type_ByDriver && priv->pFirmware->FirmwareVersion >= 60)\r
+               priv->rtllib->bUseRAMask = true;\r
+       else\r
+               priv->rtllib->bUseRAMask = false;\r
+\r
+       priv->bInformFWDriverControlDM = false;\r
+       \r
+}\r
+#endif\r
+\r
+static void dm_init_bandwidth_autoswitch(struct net_device * dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       \r
+       priv->rtllib->bandwidth_auto_switch.threshold_20Mhzto40Mhz = BW_AUTO_SWITCH_LOW_HIGH;\r
+       priv->rtllib->bandwidth_auto_switch.threshold_40Mhzto20Mhz = BW_AUTO_SWITCH_HIGH_LOW;\r
+       priv->rtllib->bandwidth_auto_switch.bforced_tx20Mhz = false;\r
+       priv->rtllib->bandwidth_auto_switch.bautoswitch_enable = false;\r
+       \r
+}      
+\r
+\r
+static void dm_bandwidth_autoswitch(struct net_device * dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       \r
+       if(priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20 ||!priv->rtllib->bandwidth_auto_switch.bautoswitch_enable){\r
+               return;\r
+       }else{\r
+               if(priv->rtllib->bandwidth_auto_switch.bforced_tx20Mhz == false){
+                       if(priv->undecorated_smoothed_pwdb <= priv->rtllib->bandwidth_auto_switch.threshold_40Mhzto20Mhz)\r
+                               priv->rtllib->bandwidth_auto_switch.bforced_tx20Mhz = true;\r
+               }else{
+                       if(priv->undecorated_smoothed_pwdb >= priv->rtllib->bandwidth_auto_switch.threshold_20Mhzto40Mhz)\r
+                               priv->rtllib->bandwidth_auto_switch.bforced_tx20Mhz = false;\r
+       \r
+               }\r
+       }\r
+}      
+\r
+#ifdef Rtl8192SE\r
+u32    OFDMSwingTable[OFDM_Table_Length] = {\r
+       0x7f8001fe,     
+       0x788001e2,     
+       0x71c001c7,     
+       0x6b8001ae,     
+       0x65400195,     
+       0x5fc0017f,     
+       0x5a400169,     
+       0x55400155,     
+       0x50800142,     
+       0x4c000130,     
+       0x47c0011f,     
+       0x43c0010f,     
+       0x40000100,     
+       0x3c8000f2,     
+       0x390000e4,     
+       0x35c000d7,     
+       0x32c000cb,     
+       0x300000c0,     
+       0x2d4000b5,     
+       0x2ac000ab,     
+       0x288000a2,     
+       0x26000098,     
+       0x24000090,     
+       0x22000088,     
+       0x20000080,     
+       0x1e400079,     
+       0x1c800072,     
+       0x1b00006c,     
+       0x19800066,     
+       0x18000060,     
+       0x16c0005b,     
+       0x15800056,     
+       0x14400051,     
+       0x1300004c,     
+       0x12000048,     
+       0x11000044,     
+       0x10000040,     
+};\r
+\r
+u8     CCKSwingTable_Ch1_Ch13[CCK_Table_length][8] = {\r
+       {0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04},       
+       {0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04},       
+       {0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03},       
+       {0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03},       
+       {0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03},       
+       {0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03},       
+       {0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03},       
+       {0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03},       
+       {0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02},       
+       {0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02},       
+       {0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02},       
+       {0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02},       
+       {0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02},       
+       {0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02},       
+       {0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02},       
+       {0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02},       
+       {0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01},       
+       {0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02},       
+       {0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01},       
+       {0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},       
+       {0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},       
+       {0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01},       
+       {0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01},       
+       {0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01},       
+       {0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01},       
+       {0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01},       
+       {0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01},       
+       {0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01},       
+       {0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01},       
+       {0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01},       
+       {0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01},       
+       {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01},       
+       {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01}        
+};\r
+\r
+\r
+u8     CCKSwingTable_Ch14[CCK_Table_length][8] = {\r
+       {0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00},       
+       {0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00},       
+       {0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00},       
+       {0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00},       
+       {0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00},       
+       {0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00},       
+       {0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00},       
+       {0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00},       
+       {0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00},       
+       {0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00},       
+       {0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00},       
+       {0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00},       
+       {0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00},       
+       {0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00},       
+       {0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00},       
+       {0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00},       
+       {0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00},       
+       {0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00},       
+       {0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00},       
+       {0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},       
+       {0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},       
+       {0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00},       
+       {0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00},       
+       {0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},       
+       {0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},       
+       {0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00},       
+       {0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},       
+       {0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},       
+       {0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},       
+       {0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},       
+       {0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},       
+       {0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},       
+       {0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00}        
+};\r
+#elif defined RTL8192E\r
+static u32 OFDMSwingTable[OFDM_Table_Length] = {\r
+       0x7f8001fe,     
+       0x71c001c7,     
+       0x65400195,     
+       0x5a400169,     
+       0x50800142,     
+       0x47c0011f,     
+       0x40000100,     
+       0x390000e4,     
+       0x32c000cb,     
+       0x2d4000b5,     
+       0x288000a2,     
+       0x24000090,     
+       0x20000080,     
+       0x1c800072,     
+       0x19800066,     
+       0x26c0005b,     
+       0x24400051,     
+       0x12000048,     
+       0x10000040      
+};\r
+static u8      CCKSwingTable_Ch1_Ch13[CCK_Table_length][8] = {\r
+       {0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04},       
+       {0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03},       
+       {0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03},       
+       {0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03},       
+       {0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02},       
+       {0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02},       
+       {0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02},       
+       {0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02},       
+       {0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01},       
+       {0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01},       
+       {0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},       
+       {0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01}        
+};\r
+\r
+static u8      CCKSwingTable_Ch14[CCK_Table_length][8] = {\r
+       {0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00},       
+       {0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00},       
+       {0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00},       
+       {0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00},       
+       {0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00},       
+       {0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00},       
+       {0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00},       
+       {0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00},       
+       {0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00},       
+       {0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00},       
+       {0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},       
+       {0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00}        
+};\r
+#endif\r
+#define                Pw_Track_Flag                           0x11d\r
+#define                Tssi_Mea_Value                          0x13c\r
+#define                Tssi_Report_Value1                      0x134\r
+#define                Tssi_Report_Value2                      0x13e\r
+#define                FW_Busy_Flag                            0x13f\r
+\r
+#ifndef RTL8192SE\r
+static void dm_TXPowerTrackingCallback_TSSI(struct net_device * dev)\r
+       {\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       bool                                            bHighpowerstate, viviflag = false;\r
+       DCMD_TXCMD_T                    tx_cmd;\r
+       u8                                      powerlevelOFDM24G;\r
+       int                                     i =0, j = 0, k = 0;\r
+       u8                                              RF_Type, tmp_report[5]={0, 0, 0, 0, 0};\r
+       u32                                             Value;\r
+       u8                                              Pwr_Flag;\r
+       u16                                     Avg_TSSI_Meas, TSSI_13dBm, Avg_TSSI_Meas_from_driver=0;\r
+#ifdef RTL8192U\r
+       RT_STATUS                               rtStatus = RT_STATUS_SUCCESS;\r
+#endif\r
+       u32                                             delta=0;\r
+       RT_TRACE(COMP_POWER_TRACKING,"%s()\n",__FUNCTION__);\r
+       write_nic_byte(dev, Pw_Track_Flag, 0);\r
+       write_nic_byte(dev, FW_Busy_Flag, 0);\r
+       priv->rtllib->bdynamic_txpower_enable = false;\r
+       bHighpowerstate = priv->bDynamicTxHighPower;\r
+\r
+       powerlevelOFDM24G = (u8)(priv->Pwr_Track>>24); \r
+       RF_Type = priv->rf_type;\r
+       Value = (RF_Type<<8) | powerlevelOFDM24G;\r
+\r
+       RT_TRACE(COMP_POWER_TRACKING, "powerlevelOFDM24G = %x\n", powerlevelOFDM24G);\r
+\r
+       \r
+#ifdef RTL8190P
+       for(j = 0; j<1; j++)    \r
+#else\r
+       for(j = 0; j<=30; j++)  \r
+#endif\r
+{      
+\r
+       tx_cmd.Op               = TXCMD_SET_TX_PWR_TRACKING;\r
+       tx_cmd.Length   = 4;\r
+       tx_cmd.Value            = Value;\r
+#ifdef RTL8192U\r
+       rtStatus = SendTxCommandPacket(dev, &tx_cmd, 12);       \r
+       if (rtStatus == RT_STATUS_FAILURE)\r
+       {\r
+               RT_TRACE(COMP_POWER_TRACKING, "Set configuration with tx cmd queue fail!\n");\r
+       }\r
+#else\r
+       cmpk_message_handle_tx(dev, (u8*)&tx_cmd, DESC_PACKET_TYPE_INIT, sizeof(DCMD_TXCMD_T));\r
+#endif\r
+       mdelay(1);\r
+       for(i = 0;i <= 30; i++)\r
+       {\r
+               Pwr_Flag = read_nic_byte(dev, Pw_Track_Flag);\r
+               \r
+               if (Pwr_Flag == 0)\r
+               {       \r
+                       mdelay(1);\r
+\r
+                       if(priv->bResetInProgress)      \r
+                       {\r
+                               RT_TRACE(COMP_POWER_TRACKING, "we are in slient reset progress, so return\n");          \r
+                               write_nic_byte(dev, Pw_Track_Flag, 0);\r
+                               write_nic_byte(dev, FW_Busy_Flag, 0);\r
+                               return;\r
+                       }\r
+#ifdef RTL8192E\r
+                       if((priv->rtllib->eRFPowerState != eRfOn))\r
+                       {\r
+                               RT_TRACE(COMP_POWER_TRACKING, "we are in power save, so return\n");             \r
+                               write_nic_byte(dev, Pw_Track_Flag, 0);\r
+                               write_nic_byte(dev, FW_Busy_Flag, 0);\r
+                               return;\r
+                       }\r
+\r
+#endif\r
+                       continue;\r
+               }\r
+\r
+               Avg_TSSI_Meas = read_nic_word(dev, Tssi_Mea_Value);\r
+\r
+               if(Avg_TSSI_Meas == 0)\r
+               {\r
+                       write_nic_byte(dev, Pw_Track_Flag, 0);\r
+                       write_nic_byte(dev, FW_Busy_Flag, 0);\r
+                       return;\r
+               }\r
+               \r
+               for(k = 0;k < 5; k++)\r
+               {\r
+                       if(k !=4)\r
+                               tmp_report[k] = read_nic_byte(dev, Tssi_Report_Value1+k);\r
+                       else\r
+                               tmp_report[k] = read_nic_byte(dev, Tssi_Report_Value2);\r
+\r
+                       RT_TRACE(COMP_POWER_TRACKING, "TSSI_report_value = %d\n", tmp_report[k]);\r
+\r
+                       {\r
+                              if(tmp_report[k] <= 20)\r
+                              {        \r
+                                     viviflag =true;\r
+                                     break;\r
+                              }\r
+                       }\r
+               }\r
+\r
+               if(viviflag ==true)\r
+               {       \r
+                       write_nic_byte(dev, Pw_Track_Flag, 0);\r
+                       viviflag = false;\r
+                       RT_TRACE(COMP_POWER_TRACKING, "we filted this data\n");\r
+                       for(k = 0;k < 5; k++)\r
+                               tmp_report[k] = 0;\r
+                       break;\r
+               }\r
+\r
+               for(k = 0;k < 5; k++)\r
+               {\r
+                       Avg_TSSI_Meas_from_driver += tmp_report[k];\r
+               }\r
+\r
+               Avg_TSSI_Meas_from_driver = Avg_TSSI_Meas_from_driver*100/5;\r
+               RT_TRACE(COMP_POWER_TRACKING, "Avg_TSSI_Meas_from_driver = %d\n", Avg_TSSI_Meas_from_driver);\r
+               TSSI_13dBm = priv->TSSI_13dBm;\r
+               RT_TRACE(COMP_POWER_TRACKING, "TSSI_13dBm = %d\n", TSSI_13dBm);\r
+               \r
+               if(Avg_TSSI_Meas_from_driver > TSSI_13dBm)\r
+                       delta = Avg_TSSI_Meas_from_driver - TSSI_13dBm;\r
+               else\r
+                       delta = TSSI_13dBm - Avg_TSSI_Meas_from_driver;\r
+\r
+               if(delta <= E_FOR_TX_POWER_TRACK)\r
+               {\r
+                       priv->rtllib->bdynamic_txpower_enable = true;\r
+                       write_nic_byte(dev, Pw_Track_Flag, 0);\r
+                       write_nic_byte(dev, FW_Busy_Flag, 0);\r
+                       RT_TRACE(COMP_POWER_TRACKING, "tx power track is done\n");\r
+                       RT_TRACE(COMP_POWER_TRACKING, "priv->rfa_txpowertrackingindex = %d\n", priv->rfa_txpowertrackingindex);\r
+                       RT_TRACE(COMP_POWER_TRACKING, "priv->rfa_txpowertrackingindex_real = %d\n", priv->rfa_txpowertrackingindex_real);\r
+#ifdef RTL8190P                                        \r
+                       RT_TRACE(COMP_POWER_TRACKING, "priv->rfc_txpowertrackingindex = %d\n", priv->rfc_txpowertrackingindex);\r
+                       RT_TRACE(COMP_POWER_TRACKING, "priv->rfc_txpowertrackingindex_real = %d\n", priv->rfc_txpowertrackingindex_real);\r
+#endif\r
+                       RT_TRACE(COMP_POWER_TRACKING, "priv->CCKPresentAttentuation_difference = %d\n", priv->CCKPresentAttentuation_difference);\r
+                       RT_TRACE(COMP_POWER_TRACKING, "priv->CCKPresentAttentuation = %d\n", priv->CCKPresentAttentuation);\r
+                       return;\r
+               }\r
+               else\r
+               {\r
+                       if(Avg_TSSI_Meas_from_driver < TSSI_13dBm - E_FOR_TX_POWER_TRACK)\r
+                       {\r
+                               if (RF_Type == RF_2T4R)\r
+                               {\r
+                                               \r
+                                               if((priv->rfa_txpowertrackingindex > 0) &&(priv->rfc_txpowertrackingindex > 0))\r
+                               {\r
+                                       priv->rfa_txpowertrackingindex--;\r
+                                       if(priv->rfa_txpowertrackingindex_real > 4)\r
+                                       {\r
+                                               priv->rfa_txpowertrackingindex_real--;\r
+                                               rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance, bMaskDWord, priv->txbbgain_table[priv->rfa_txpowertrackingindex_real].txbbgain_value);\r
+                                       }\r
+\r
+                                       priv->rfc_txpowertrackingindex--;\r
+                                       if(priv->rfc_txpowertrackingindex_real > 4)\r
+                                       {\r
+                                               priv->rfc_txpowertrackingindex_real--;\r
+                                               rtl8192_setBBreg(dev, rOFDM0_XCTxIQImbalance, bMaskDWord, priv->txbbgain_table[priv->rfc_txpowertrackingindex_real].txbbgain_value);\r
+                                       }\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                               rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance, bMaskDWord, priv->txbbgain_table[4].txbbgain_value);\r
+                                                               rtl8192_setBBreg(dev, rOFDM0_XCTxIQImbalance, bMaskDWord, priv->txbbgain_table[4].txbbgain_value);\r
+                               }\r
+                       }\r
+                       else\r
+                       {\r
+                                               {\r
+#ifdef RTL8190P\r
+                                                               {\r
+                                               if(priv->rfc_txpowertrackingindex > 0)\r
+                                               {\r
+                                                       priv->rfc_txpowertrackingindex--;\r
+                                                       if(priv->rfc_txpowertrackingindex_real > 4)\r
+                                                       {\r
+                                                               priv->rfc_txpowertrackingindex_real--;\r
+                                                               rtl8192_setBBreg(dev, rOFDM0_XCTxIQImbalance, bMaskDWord, priv->txbbgain_table[priv->rfc_txpowertrackingindex_real].txbbgain_value);\r
+                                                       }\r
+                                               }\r
+                                               else\r
+                                                       rtl8192_setBBreg(dev, rOFDM0_XCTxIQImbalance, bMaskDWord, priv->txbbgain_table[4].txbbgain_value);              \r
+                               }\r
+#endif\r
+#ifdef RTL8192E\r
+                                                               {\r
+                                                                       if(priv->rfa_txpowertrackingindex > 0)\r
+                                                                       {\r
+                                                                               priv->rfa_txpowertrackingindex--;\r
+                                                                               if(priv->rfa_txpowertrackingindex_real > 4)\r
+                                                                               {\r
+                                                                                       priv->rfa_txpowertrackingindex_real--;\r
+                                                                                       rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance, bMaskDWord, priv->txbbgain_table[priv->rfa_txpowertrackingindex_real].txbbgain_value);\r
+                                                                               }\r
+                                                                       }\r
+                                                                       else\r
+                                                                                       rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance, bMaskDWord, priv->txbbgain_table[4].txbbgain_value);                                                      \r
+                                                               }\r
+#endif\r
+                                               }\r
+\r
+                               }\r
+                       }\r
+                       else\r
+                       {\r
+                               if (RF_Type == RF_2T4R)\r
+                               {\r
+                                       if((priv->rfa_txpowertrackingindex < TxBBGainTableLength - 1) &&(priv->rfc_txpowertrackingindex < TxBBGainTableLength - 1))                             \r
+                               {\r
+                                       priv->rfa_txpowertrackingindex++;\r
+                                       priv->rfa_txpowertrackingindex_real++;                                  \r
+                                       rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance, bMaskDWord, priv->txbbgain_table[priv->rfa_txpowertrackingindex_real].txbbgain_value);\r
+                                       priv->rfc_txpowertrackingindex++;\r
+                                       priv->rfc_txpowertrackingindex_real++;                                  \r
+                                       rtl8192_setBBreg(dev, rOFDM0_XCTxIQImbalance, bMaskDWord, priv->txbbgain_table[priv->rfc_txpowertrackingindex_real].txbbgain_value);\r
+                               }\r
+                                       else\r
+                                       {\r
+                                               rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance, bMaskDWord, priv->txbbgain_table[TxBBGainTableLength - 1].txbbgain_value);\r
+                                               rtl8192_setBBreg(dev, rOFDM0_XCTxIQImbalance, bMaskDWord, priv->txbbgain_table[TxBBGainTableLength - 1].txbbgain_value);\r
+                       }\r
+                               }\r
+                               else\r
+                               {\r
+                                       {\r
+#ifdef RTL8190P\r
+                                                       {\r
+                                       if(priv->rfc_txpowertrackingindex < (TxBBGainTableLength - 1))\r
+                                       {\r
+                                                       priv->rfc_txpowertrackingindex++;\r
+                                                       priv->rfc_txpowertrackingindex_real++;                                  \r
+                                                       rtl8192_setBBreg(dev, rOFDM0_XCTxIQImbalance, bMaskDWord, priv->txbbgain_table[priv->rfc_txpowertrackingindex_real].txbbgain_value);\r
+                                       }\r
+                                       else\r
+                                                       rtl8192_setBBreg(dev, rOFDM0_XCTxIQImbalance, bMaskDWord, priv->txbbgain_table[TxBBGainTableLength - 1].txbbgain_value);\r
+                               }\r
+#endif\r
+#ifdef RTL8192E\r
+                                                       {\r
+                                                               if(priv->rfa_txpowertrackingindex < (TxBBGainTableLength - 1))\r
+                                                               {\r
+                                                                       priv->rfa_txpowertrackingindex++;\r
+                                                                       priv->rfa_txpowertrackingindex_real++;                                  \r
+                                                                       rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance, bMaskDWord, priv->txbbgain_table[priv->rfa_txpowertrackingindex_real].txbbgain_value);\r
+                       }\r
+                                                               else\r
+                                                                       rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance, bMaskDWord, priv->txbbgain_table[TxBBGainTableLength - 1].txbbgain_value);\r
+                                                       }\r
+#endif\r
+                                       }\r
+                               }\r
+                       }\r
+                       if (RF_Type == RF_2T4R){\r
+                       priv->CCKPresentAttentuation_difference\r
+                               = priv->rfa_txpowertrackingindex - priv->rfa_txpowertracking_default;\r
+                       }else{\r
+                               {\r
+#ifdef RTL8190P\r
+                               priv->CCKPresentAttentuation_difference\r
+                                       = priv->rfc_txpowertrackingindex - priv->rfc_txpowertracking_default;\r
+#endif\r
+#ifdef RTL8192E\r
+                                               priv->CCKPresentAttentuation_difference\r
+                                                       = priv->rfa_txpowertrackingindex_real - priv->rfa_txpowertracking_default;\r
+#endif\r
+                               }\r
+                       }\r
+\r
+                       if(priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20)       \r
+                               priv->CCKPresentAttentuation \r
+                               = priv->CCKPresentAttentuation_20Mdefault + priv->CCKPresentAttentuation_difference;\r
+                       else\r
+                               priv->CCKPresentAttentuation \r
+                               = priv->CCKPresentAttentuation_40Mdefault + priv->CCKPresentAttentuation_difference;\r
+\r
+                       if(priv->CCKPresentAttentuation > (CCKTxBBGainTableLength-1))\r
+                                       priv->CCKPresentAttentuation = CCKTxBBGainTableLength-1;\r
+                       if(priv->CCKPresentAttentuation < 0)\r
+                                       priv->CCKPresentAttentuation = 0;\r
+\r
+                       if(priv->CCKPresentAttentuation > -1&&priv->CCKPresentAttentuation < CCKTxBBGainTableLength)
+                       {\r
+                               if(priv->rtllib->current_network.channel == 14 && !priv->bcck_in_ch14)\r
+                               {\r
+                                       priv->bcck_in_ch14 = true;\r
+                                       dm_cck_txpower_adjust(dev,priv->bcck_in_ch14);\r
+                               }\r
+                               else if(priv->rtllib->current_network.channel != 14 && priv->bcck_in_ch14)\r
+                               {\r
+                                       priv->bcck_in_ch14 = false;\r
+                                       dm_cck_txpower_adjust(dev,priv->bcck_in_ch14);\r
+                               }\r
+                               else\r
+                                       dm_cck_txpower_adjust(dev,priv->bcck_in_ch14);          \r
+                       }\r
+               RT_TRACE(COMP_POWER_TRACKING, "priv->rfa_txpowertrackingindex = %d\n", priv->rfa_txpowertrackingindex);\r
+               RT_TRACE(COMP_POWER_TRACKING, "priv->rfa_txpowertrackingindex_real = %d\n", priv->rfa_txpowertrackingindex_real);\r
+#ifdef RTL8190P\r
+               RT_TRACE(COMP_POWER_TRACKING, "priv->rfc_txpowertrackingindex = %d\n", priv->rfc_txpowertrackingindex);\r
+               RT_TRACE(COMP_POWER_TRACKING, "priv->rfc_txpowertrackingindex_real = %d\n", priv->rfc_txpowertrackingindex_real);\r
+#endif\r
+               RT_TRACE(COMP_POWER_TRACKING, "priv->CCKPresentAttentuation_difference = %d\n", priv->CCKPresentAttentuation_difference);\r
+               RT_TRACE(COMP_POWER_TRACKING, "priv->CCKPresentAttentuation = %d\n", priv->CCKPresentAttentuation);\r
+\r
+               if (priv->CCKPresentAttentuation_difference <= -12||priv->CCKPresentAttentuation_difference >= 24)\r
+               {\r
+                       priv->rtllib->bdynamic_txpower_enable = true;\r
+                       write_nic_byte(dev, Pw_Track_Flag, 0);\r
+                       write_nic_byte(dev, FW_Busy_Flag, 0);\r
+                       RT_TRACE(COMP_POWER_TRACKING, "tx power track--->limited\n");\r
+                       return;\r
+               }\r
+\r
+               \r
+       }\r
+               write_nic_byte(dev, Pw_Track_Flag, 0);\r
+               Avg_TSSI_Meas_from_driver = 0;\r
+               for(k = 0;k < 5; k++)\r
+                       tmp_report[k] = 0;\r
+               break;\r
+       }\r
+       write_nic_byte(dev, FW_Busy_Flag, 0);\r
+}      \r
+               priv->rtllib->bdynamic_txpower_enable = true;\r
+               write_nic_byte(dev, Pw_Track_Flag, 0);\r
+}\r
+#endif\r
+\r
+#ifdef RTL8192E\r
+static void dm_TXPowerTrackingCallback_ThermalMeter(struct net_device * dev)\r
+{\r
+#define ThermalMeterVal        9\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       u32 tmpRegA, TempCCk;\r
+       u8 tmpOFDMindex, tmpCCKindex, tmpCCK20Mindex, tmpCCK40Mindex, tmpval;\r
+       int i =0, CCKSwingNeedUpdate=0;\r
+\r
+       if(!priv->btxpower_trackingInit)\r
+       {\r
+               tmpRegA= rtl8192_QueryBBReg(dev, rOFDM0_XATxIQImbalance, bMaskDWord);\r
+               for(i=0; i<OFDM_Table_Length; i++)      
+               {\r
+                       if(tmpRegA == OFDMSwingTable[i])\r
+                       {\r
+                               priv->OFDM_index= (u8)i;\r
+                               RT_TRACE(COMP_POWER_TRACKING, "Initial reg0x%x = 0x%x, OFDM_index=0x%x\n", \r
+                                       rOFDM0_XATxIQImbalance, tmpRegA, priv->OFDM_index);\r
+                       }\r
+               }\r
+\r
+               TempCCk = rtl8192_QueryBBReg(dev, rCCK0_TxFilter1, bMaskByte2);\r
+               for(i=0 ; i<CCK_Table_length ; i++)\r
+               {\r
+                       if(TempCCk == (u32)CCKSwingTable_Ch1_Ch13[i][0])\r
+                       {\r
+                               priv->CCK_index =(u8) i;\r
+                               RT_TRACE(COMP_POWER_TRACKING, "Initial reg0x%x = 0x%x, CCK_index=0x%x\n", \r
+                                       rCCK0_TxFilter1, TempCCk, priv->CCK_index);\r
+               break;\r
+       }\r
+}      \r
+               priv->btxpower_trackingInit = true;\r
+               return;\r
+       }\r
+\r
+#if 0\r
+{\r
+       UINT32  curr_addr;\r
+       UINT32  reg_value;\r
+       \r
+               for (curr_addr = 0; curr_addr < 0x2d; curr_addr++)      \r
+               {                         \r
+                       reg_value = PHY_QueryRFReg(     dev, (RF90_RADIO_PATH_E)RF90_PATH_A, \r
+                                                                               curr_addr, bMaskDWord);\r
+               }\r
+\r
+       pHalData->TXPowercount = 0;\r
+       return;\r
+}\r
+#endif\r
+\r
+       tmpRegA = rtl8192_phy_QueryRFReg(dev, RF90_PATH_A, 0x12, 0x078);        
+       RT_TRACE(COMP_POWER_TRACKING, "Readback ThermalMeterA = %d \n", tmpRegA);\r
+       if(tmpRegA < 3 || tmpRegA > 13)\r
+               return;\r
+       if(tmpRegA >= 12)       
+               tmpRegA = 12;\r
+       RT_TRACE(COMP_POWER_TRACKING, "Valid ThermalMeterA = %d \n", tmpRegA);\r
+       priv->ThermalMeter[0] = ThermalMeterVal;        
+       priv->ThermalMeter[1] = ThermalMeterVal;        
+\r
+       if(priv->ThermalMeter[0] >= (u8)tmpRegA)        
+       {\r
+               tmpOFDMindex = tmpCCK20Mindex = 6+(priv->ThermalMeter[0]-(u8)tmpRegA);\r
+               tmpCCK40Mindex = tmpCCK20Mindex - 6;\r
+               if(tmpOFDMindex >= OFDM_Table_Length)\r
+                       tmpOFDMindex = OFDM_Table_Length-1;\r
+               if(tmpCCK20Mindex >= CCK_Table_length)\r
+                       tmpCCK20Mindex = CCK_Table_length-1;\r
+               if(tmpCCK40Mindex >= CCK_Table_length)\r
+                       tmpCCK40Mindex = CCK_Table_length-1;\r
+       }\r
+       else\r
+       {               \r
+               tmpval = ((u8)tmpRegA - priv->ThermalMeter[0]);\r
+               if(tmpval >= 6)                                                         
+                       tmpOFDMindex = tmpCCK20Mindex = 0;              
+               else\r
+                       tmpOFDMindex = tmpCCK20Mindex = 6 - tmpval;\r
+               tmpCCK40Mindex = 0;\r
+       }\r
+       if(priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)       
+               tmpCCKindex = tmpCCK40Mindex;\r
+       else\r
+               tmpCCKindex = tmpCCK20Mindex;\r
+\r
+       priv->Record_CCK_20Mindex = tmpCCK20Mindex;\r
+       priv->Record_CCK_40Mindex = tmpCCK40Mindex;\r
+       RT_TRACE(COMP_POWER_TRACKING, "Record_CCK_20Mindex / Record_CCK_40Mindex = %d / %d.\n", \r
+               priv->Record_CCK_20Mindex, priv->Record_CCK_40Mindex);\r
+\r
+       if(priv->rtllib->current_network.channel == 14 && !priv->bcck_in_ch14)\r
+       {\r
+               priv->bcck_in_ch14 = true;\r
+               CCKSwingNeedUpdate = 1;\r
+       }\r
+       else if(priv->rtllib->current_network.channel != 14 && priv->bcck_in_ch14)\r
+       {\r
+               priv->bcck_in_ch14 = false;\r
+               CCKSwingNeedUpdate = 1;\r
+       }\r
+\r
+       if(priv->CCK_index != tmpCCKindex)\r
+{\r
+               priv->CCK_index = tmpCCKindex; \r
+               CCKSwingNeedUpdate = 1;\r
+       }\r
+\r
+       if(CCKSwingNeedUpdate)\r
+       {\r
+               dm_cck_txpower_adjust(dev, priv->bcck_in_ch14);\r
+       }\r
+       if(priv->OFDM_index != tmpOFDMindex)\r
+       {\r
+               priv->OFDM_index = tmpOFDMindex;\r
+               rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance, bMaskDWord, OFDMSwingTable[priv->OFDM_index]);            \r
+               RT_TRACE(COMP_POWER_TRACKING, "Update OFDMSwing[%d] = 0x%x\n", \r
+                       priv->OFDM_index, OFDMSwingTable[priv->OFDM_index]);\r
+       }\r
+       priv->txpower_count = 0;\r
+}\r
+#elif defined (RTL8192SE)\r
+static void dm_TXPowerTrackingCallback_ThermalMeter(struct net_device * dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+        u8     ThermalValue=0;\r
+       u32     FwCmdVal=0;\r
+\r
+       priv->btxpower_trackingInit = true;\r
+\r
+       \r
+       ThermalValue = (u8)rtl8192_phy_QueryRFReg(dev, RF90_PATH_A, RF_T_METER, 0x1f);  
+       RT_TRACE(COMP_POWER_TRACKING, "Readback Thermal Meter = 0x%x\n", ThermalValue);\r
+       printk("%s()Readback Thermal Meter = 0x%x\n", __func__,ThermalValue);\r
+       if(ThermalValue)\r
+       {\r
+               priv->ThermalValue = ThermalValue;\r
+               if(priv->pFirmware->FirmwareVersion >= 0x35)\r
+               {\r
+                       priv->rtllib->SetFwCmdHandler(dev, FW_CMD_TXPWR_TRACK_THERMAL); \r
+               }\r
+               else\r
+               {\r
+               FwCmdVal = (FW_TXPWR_TRACK_THERMAL|\r
+               (priv->ThermalMeter[0]<<8)|(ThermalValue<<16));\r
+               RT_TRACE(COMP_POWER_TRACKING, "Write to FW Thermal Val = 0x%x\n", FwCmdVal);\r
+               write_nic_dword(dev, WFM5, FwCmdVal); \r
+                               ChkFwCmdIoDone(dev);\r
+               }\r
+       }\r
+\r
+       priv->txpower_count = 0;\r
+}\r
+#endif\r
+\r
+void   dm_txpower_trackingcallback(void *data)\r
+{\r
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20))\r
+       struct r8192_priv *priv = container_of_dwork_rsl(data,struct r8192_priv,txpower_tracking_wq);\r
+       struct net_device *dev = priv->rtllib->dev;\r
+#else     \r
+       struct net_device *dev = (struct net_device *)data;\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+#endif\r
+       \r
+#ifdef RTL8190P\r
+       dm_TXPowerTrackingCallback_TSSI(dev);\r
+#elif defined(RTL8192E)\r
+       if(priv->IC_Cut >= IC_VersionCut_D)\r
+               dm_TXPowerTrackingCallback_TSSI(dev);\r
+       else\r
+               dm_TXPowerTrackingCallback_ThermalMeter(dev);\r
+#elif defined(RTL8192SE)\r
+       dm_TXPowerTrackingCallback_ThermalMeter(dev);\r
+#endif\r
+}\r
+\r
+#ifndef RTL8192SE\r
+static void dm_InitializeTXPowerTracking_TSSI(struct net_device *dev)\r
+{\r
+\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       \r
+       priv->txbbgain_table[0].txbb_iq_amplifygain =                   12;\r
+       priv->txbbgain_table[0].txbbgain_value=0x7f8001fe;\r
+       priv->txbbgain_table[1].txbb_iq_amplifygain =                   11;\r
+       priv->txbbgain_table[1].txbbgain_value=0x788001e2;\r
+       priv->txbbgain_table[2].txbb_iq_amplifygain =                   10;\r
+       priv->txbbgain_table[2].txbbgain_value=0x71c001c7;\r
+       priv->txbbgain_table[3].txbb_iq_amplifygain =                   9;\r
+       priv->txbbgain_table[3].txbbgain_value=0x6b8001ae;\r
+       priv->txbbgain_table[4].txbb_iq_amplifygain =                  8;\r
+       priv->txbbgain_table[4].txbbgain_value=0x65400195;\r
+       priv->txbbgain_table[5].txbb_iq_amplifygain =                  7;\r
+       priv->txbbgain_table[5].txbbgain_value=0x5fc0017f;\r
+       priv->txbbgain_table[6].txbb_iq_amplifygain =                  6;\r
+       priv->txbbgain_table[6].txbbgain_value=0x5a400169;\r
+       priv->txbbgain_table[7].txbb_iq_amplifygain =                  5;\r
+       priv->txbbgain_table[7].txbbgain_value=0x55400155;\r
+       priv->txbbgain_table[8].txbb_iq_amplifygain =                  4;\r
+       priv->txbbgain_table[8].txbbgain_value=0x50800142;\r
+       priv->txbbgain_table[9].txbb_iq_amplifygain =                  3;\r
+       priv->txbbgain_table[9].txbbgain_value=0x4c000130;\r
+       priv->txbbgain_table[10].txbb_iq_amplifygain =                 2;\r
+       priv->txbbgain_table[10].txbbgain_value=0x47c0011f;\r
+       priv->txbbgain_table[11].txbb_iq_amplifygain =                 1;\r
+       priv->txbbgain_table[11].txbbgain_value=0x43c0010f;\r
+       priv->txbbgain_table[12].txbb_iq_amplifygain =                 0;\r
+       priv->txbbgain_table[12].txbbgain_value=0x40000100;\r
+       priv->txbbgain_table[13].txbb_iq_amplifygain =                 -1;\r
+       priv->txbbgain_table[13].txbbgain_value=0x3c8000f2;\r
+       priv->txbbgain_table[14].txbb_iq_amplifygain =               -2;\r
+       priv->txbbgain_table[14].txbbgain_value=0x390000e4;\r
+       priv->txbbgain_table[15].txbb_iq_amplifygain =               -3;\r
+       priv->txbbgain_table[15].txbbgain_value=0x35c000d7;\r
+       priv->txbbgain_table[16].txbb_iq_amplifygain =               -4;\r
+       priv->txbbgain_table[16].txbbgain_value=0x32c000cb;\r
+       priv->txbbgain_table[17].txbb_iq_amplifygain =               -5;\r
+       priv->txbbgain_table[17].txbbgain_value=0x300000c0;\r
+       priv->txbbgain_table[18].txbb_iq_amplifygain =                      -6;\r
+       priv->txbbgain_table[18].txbbgain_value=0x2d4000b5;\r
+       priv->txbbgain_table[19].txbb_iq_amplifygain =               -7;\r
+       priv->txbbgain_table[19].txbbgain_value=0x2ac000ab;\r
+       priv->txbbgain_table[20].txbb_iq_amplifygain =               -8;\r
+       priv->txbbgain_table[20].txbbgain_value=0x288000a2;\r
+       priv->txbbgain_table[21].txbb_iq_amplifygain =               -9;\r
+       priv->txbbgain_table[21].txbbgain_value=0x26000098;\r
+       priv->txbbgain_table[22].txbb_iq_amplifygain =               -10;\r
+       priv->txbbgain_table[22].txbbgain_value=0x24000090;\r
+       priv->txbbgain_table[23].txbb_iq_amplifygain =               -11;\r
+       priv->txbbgain_table[23].txbbgain_value=0x22000088;\r
+       priv->txbbgain_table[24].txbb_iq_amplifygain =               -12;\r
+       priv->txbbgain_table[24].txbbgain_value=0x20000080;\r
+       priv->txbbgain_table[25].txbb_iq_amplifygain =               -13;\r
+       priv->txbbgain_table[25].txbbgain_value=0x1a00006c;\r
+       priv->txbbgain_table[26].txbb_iq_amplifygain =               -14;\r
+       priv->txbbgain_table[26].txbbgain_value=0x1c800072;\r
+       priv->txbbgain_table[27].txbb_iq_amplifygain =               -15;\r
+       priv->txbbgain_table[27].txbbgain_value=0x18000060;\r
+       priv->txbbgain_table[28].txbb_iq_amplifygain =               -16;\r
+       priv->txbbgain_table[28].txbbgain_value=0x19800066;\r
+       priv->txbbgain_table[29].txbb_iq_amplifygain =               -17;\r
+       priv->txbbgain_table[29].txbbgain_value=0x15800056;\r
+       priv->txbbgain_table[30].txbb_iq_amplifygain =               -18;\r
+       priv->txbbgain_table[30].txbbgain_value=0x26c0005b;\r
+       priv->txbbgain_table[31].txbb_iq_amplifygain =               -19;\r
+       priv->txbbgain_table[31].txbbgain_value=0x14400051;\r
+       priv->txbbgain_table[32].txbb_iq_amplifygain =               -20;\r
+       priv->txbbgain_table[32].txbbgain_value=0x24400051;\r
+       priv->txbbgain_table[33].txbb_iq_amplifygain =               -21;\r
+       priv->txbbgain_table[33].txbbgain_value=0x1300004c;\r
+       priv->txbbgain_table[34].txbb_iq_amplifygain =               -22;\r
+       priv->txbbgain_table[34].txbbgain_value=0x12000048;\r
+       priv->txbbgain_table[35].txbb_iq_amplifygain =               -23;\r
+       priv->txbbgain_table[35].txbbgain_value=0x11000044;\r
+       priv->txbbgain_table[36].txbb_iq_amplifygain =               -24;\r
+       priv->txbbgain_table[36].txbbgain_value=0x10000040;\r
+\r
+       priv->cck_txbbgain_table[0].ccktxbb_valuearray[0] = 0x36;\r
+       priv->cck_txbbgain_table[0].ccktxbb_valuearray[1] = 0x35;\r
+       priv->cck_txbbgain_table[0].ccktxbb_valuearray[2] = 0x2e;\r
+       priv->cck_txbbgain_table[0].ccktxbb_valuearray[3] = 0x25;\r
+       priv->cck_txbbgain_table[0].ccktxbb_valuearray[4] = 0x1c;\r
+       priv->cck_txbbgain_table[0].ccktxbb_valuearray[5] = 0x12;\r
+       priv->cck_txbbgain_table[0].ccktxbb_valuearray[6] = 0x09;\r
+       priv->cck_txbbgain_table[0].ccktxbb_valuearray[7] = 0x04;\r
+\r
+       priv->cck_txbbgain_table[1].ccktxbb_valuearray[0] = 0x33;\r
+       priv->cck_txbbgain_table[1].ccktxbb_valuearray[1] = 0x32;\r
+       priv->cck_txbbgain_table[1].ccktxbb_valuearray[2] = 0x2b;\r
+       priv->cck_txbbgain_table[1].ccktxbb_valuearray[3] = 0x23;\r
+       priv->cck_txbbgain_table[1].ccktxbb_valuearray[4] = 0x1a;\r
+       priv->cck_txbbgain_table[1].ccktxbb_valuearray[5] = 0x11;\r
+       priv->cck_txbbgain_table[1].ccktxbb_valuearray[6] = 0x08;\r
+       priv->cck_txbbgain_table[1].ccktxbb_valuearray[7] = 0x04;\r
+       \r
+       priv->cck_txbbgain_table[2].ccktxbb_valuearray[0] = 0x30;\r
+       priv->cck_txbbgain_table[2].ccktxbb_valuearray[1] = 0x2f;\r
+       priv->cck_txbbgain_table[2].ccktxbb_valuearray[2] = 0x29;\r
+       priv->cck_txbbgain_table[2].ccktxbb_valuearray[3] = 0x21;\r
+       priv->cck_txbbgain_table[2].ccktxbb_valuearray[4] = 0x19;\r
+       priv->cck_txbbgain_table[2].ccktxbb_valuearray[5] = 0x10;\r
+       priv->cck_txbbgain_table[2].ccktxbb_valuearray[6] = 0x08;\r
+       priv->cck_txbbgain_table[2].ccktxbb_valuearray[7] = 0x03;\r
+\r
+       priv->cck_txbbgain_table[3].ccktxbb_valuearray[0] = 0x2d;\r
+       priv->cck_txbbgain_table[3].ccktxbb_valuearray[1] = 0x2d;\r
+       priv->cck_txbbgain_table[3].ccktxbb_valuearray[2] = 0x27;\r
+       priv->cck_txbbgain_table[3].ccktxbb_valuearray[3] = 0x1f;\r
+       priv->cck_txbbgain_table[3].ccktxbb_valuearray[4] = 0x18;\r
+       priv->cck_txbbgain_table[3].ccktxbb_valuearray[5] = 0x0f;\r
+       priv->cck_txbbgain_table[3].ccktxbb_valuearray[6] = 0x08;\r
+       priv->cck_txbbgain_table[3].ccktxbb_valuearray[7] = 0x03;\r
+       \r
+       priv->cck_txbbgain_table[4].ccktxbb_valuearray[0] = 0x2b;\r
+       priv->cck_txbbgain_table[4].ccktxbb_valuearray[1] = 0x2a;\r
+       priv->cck_txbbgain_table[4].ccktxbb_valuearray[2] = 0x25;\r
+       priv->cck_txbbgain_table[4].ccktxbb_valuearray[3] = 0x1e;\r
+       priv->cck_txbbgain_table[4].ccktxbb_valuearray[4] = 0x16;\r
+       priv->cck_txbbgain_table[4].ccktxbb_valuearray[5] = 0x0e;\r
+       priv->cck_txbbgain_table[4].ccktxbb_valuearray[6] = 0x07;\r
+       priv->cck_txbbgain_table[4].ccktxbb_valuearray[7] = 0x03;\r
+\r
+       priv->cck_txbbgain_table[5].ccktxbb_valuearray[0] = 0x28;\r
+       priv->cck_txbbgain_table[5].ccktxbb_valuearray[1] = 0x28;\r
+       priv->cck_txbbgain_table[5].ccktxbb_valuearray[2] = 0x22;\r
+       priv->cck_txbbgain_table[5].ccktxbb_valuearray[3] = 0x1c;\r
+       priv->cck_txbbgain_table[5].ccktxbb_valuearray[4] = 0x15;\r
+       priv->cck_txbbgain_table[5].ccktxbb_valuearray[5] = 0x0d;\r
+       priv->cck_txbbgain_table[5].ccktxbb_valuearray[6] = 0x07;\r
+       priv->cck_txbbgain_table[5].ccktxbb_valuearray[7] = 0x03;\r
+       \r
+       priv->cck_txbbgain_table[6].ccktxbb_valuearray[0] = 0x26;\r
+       priv->cck_txbbgain_table[6].ccktxbb_valuearray[1] = 0x25;\r
+       priv->cck_txbbgain_table[6].ccktxbb_valuearray[2] = 0x21;\r
+       priv->cck_txbbgain_table[6].ccktxbb_valuearray[3] = 0x1b;\r
+       priv->cck_txbbgain_table[6].ccktxbb_valuearray[4] = 0x14;\r
+       priv->cck_txbbgain_table[6].ccktxbb_valuearray[5] = 0x0d;\r
+       priv->cck_txbbgain_table[6].ccktxbb_valuearray[6] = 0x06;\r
+       priv->cck_txbbgain_table[6].ccktxbb_valuearray[7] = 0x03;\r
+\r
+       priv->cck_txbbgain_table[7].ccktxbb_valuearray[0] = 0x24;\r
+       priv->cck_txbbgain_table[7].ccktxbb_valuearray[1] = 0x23;\r
+       priv->cck_txbbgain_table[7].ccktxbb_valuearray[2] = 0x1f;\r
+       priv->cck_txbbgain_table[7].ccktxbb_valuearray[3] = 0x19;\r
+       priv->cck_txbbgain_table[7].ccktxbb_valuearray[4] = 0x13;\r
+       priv->cck_txbbgain_table[7].ccktxbb_valuearray[5] = 0x0c;\r
+       priv->cck_txbbgain_table[7].ccktxbb_valuearray[6] = 0x06;\r
+       priv->cck_txbbgain_table[7].ccktxbb_valuearray[7] = 0x03;\r
+       \r
+       priv->cck_txbbgain_table[8].ccktxbb_valuearray[0] = 0x22;\r
+       priv->cck_txbbgain_table[8].ccktxbb_valuearray[1] = 0x21;\r
+       priv->cck_txbbgain_table[8].ccktxbb_valuearray[2] = 0x1d;\r
+       priv->cck_txbbgain_table[8].ccktxbb_valuearray[3] = 0x18;\r
+       priv->cck_txbbgain_table[8].ccktxbb_valuearray[4] = 0x11;\r
+       priv->cck_txbbgain_table[8].ccktxbb_valuearray[5] = 0x0b;\r
+       priv->cck_txbbgain_table[8].ccktxbb_valuearray[6] = 0x06;\r
+       priv->cck_txbbgain_table[8].ccktxbb_valuearray[7] = 0x02;\r
+\r
+       priv->cck_txbbgain_table[9].ccktxbb_valuearray[0] = 0x20;\r
+       priv->cck_txbbgain_table[9].ccktxbb_valuearray[1] = 0x20;\r
+       priv->cck_txbbgain_table[9].ccktxbb_valuearray[2] = 0x1b;\r
+       priv->cck_txbbgain_table[9].ccktxbb_valuearray[3] = 0x16;\r
+       priv->cck_txbbgain_table[9].ccktxbb_valuearray[4] = 0x11;\r
+       priv->cck_txbbgain_table[9].ccktxbb_valuearray[5] = 0x08;\r
+       priv->cck_txbbgain_table[9].ccktxbb_valuearray[6] = 0x05;\r
+       priv->cck_txbbgain_table[9].ccktxbb_valuearray[7] = 0x02;\r
+       \r
+       priv->cck_txbbgain_table[10].ccktxbb_valuearray[0] = 0x1f;\r
+       priv->cck_txbbgain_table[10].ccktxbb_valuearray[1] = 0x1e;\r
+       priv->cck_txbbgain_table[10].ccktxbb_valuearray[2] = 0x1a;\r
+       priv->cck_txbbgain_table[10].ccktxbb_valuearray[3] = 0x15;\r
+       priv->cck_txbbgain_table[10].ccktxbb_valuearray[4] = 0x10;\r
+       priv->cck_txbbgain_table[10].ccktxbb_valuearray[5] = 0x0a;\r
+       priv->cck_txbbgain_table[10].ccktxbb_valuearray[6] = 0x05;\r
+       priv->cck_txbbgain_table[10].ccktxbb_valuearray[7] = 0x02;\r
+\r
+       priv->cck_txbbgain_table[11].ccktxbb_valuearray[0] = 0x1d;\r
+       priv->cck_txbbgain_table[11].ccktxbb_valuearray[1] = 0x1c;\r
+       priv->cck_txbbgain_table[11].ccktxbb_valuearray[2] = 0x18;\r
+       priv->cck_txbbgain_table[11].ccktxbb_valuearray[3] = 0x14;\r
+       priv->cck_txbbgain_table[11].ccktxbb_valuearray[4] = 0x0f;\r
+       priv->cck_txbbgain_table[11].ccktxbb_valuearray[5] = 0x0a;\r
+       priv->cck_txbbgain_table[11].ccktxbb_valuearray[6] = 0x05;\r
+       priv->cck_txbbgain_table[11].ccktxbb_valuearray[7] = 0x02;\r
+\r
+       priv->cck_txbbgain_table[12].ccktxbb_valuearray[0] = 0x1b;\r
+       priv->cck_txbbgain_table[12].ccktxbb_valuearray[1] = 0x1a;\r
+       priv->cck_txbbgain_table[12].ccktxbb_valuearray[2] = 0x17;\r
+       priv->cck_txbbgain_table[12].ccktxbb_valuearray[3] = 0x13;\r
+       priv->cck_txbbgain_table[12].ccktxbb_valuearray[4] = 0x0e;\r
+       priv->cck_txbbgain_table[12].ccktxbb_valuearray[5] = 0x09;\r
+       priv->cck_txbbgain_table[12].ccktxbb_valuearray[6] = 0x04;\r
+       priv->cck_txbbgain_table[12].ccktxbb_valuearray[7] = 0x02;\r
+\r
+       priv->cck_txbbgain_table[13].ccktxbb_valuearray[0] = 0x1a;\r
+       priv->cck_txbbgain_table[13].ccktxbb_valuearray[1] = 0x19;\r
+       priv->cck_txbbgain_table[13].ccktxbb_valuearray[2] = 0x16;\r
+       priv->cck_txbbgain_table[13].ccktxbb_valuearray[3] = 0x12;\r
+       priv->cck_txbbgain_table[13].ccktxbb_valuearray[4] = 0x0d;\r
+       priv->cck_txbbgain_table[13].ccktxbb_valuearray[5] = 0x09;\r
+       priv->cck_txbbgain_table[13].ccktxbb_valuearray[6] = 0x04;\r
+       priv->cck_txbbgain_table[13].ccktxbb_valuearray[7] = 0x02;\r
+\r
+       priv->cck_txbbgain_table[14].ccktxbb_valuearray[0] = 0x18;\r
+       priv->cck_txbbgain_table[14].ccktxbb_valuearray[1] = 0x17;\r
+       priv->cck_txbbgain_table[14].ccktxbb_valuearray[2] = 0x15;\r
+       priv->cck_txbbgain_table[14].ccktxbb_valuearray[3] = 0x11;\r
+       priv->cck_txbbgain_table[14].ccktxbb_valuearray[4] = 0x0c;\r
+       priv->cck_txbbgain_table[14].ccktxbb_valuearray[5] = 0x08;\r
+       priv->cck_txbbgain_table[14].ccktxbb_valuearray[6] = 0x04;\r
+       priv->cck_txbbgain_table[14].ccktxbb_valuearray[7] = 0x02;\r
+\r
+       priv->cck_txbbgain_table[15].ccktxbb_valuearray[0] = 0x17;\r
+       priv->cck_txbbgain_table[15].ccktxbb_valuearray[1] = 0x16;\r
+       priv->cck_txbbgain_table[15].ccktxbb_valuearray[2] = 0x13;\r
+       priv->cck_txbbgain_table[15].ccktxbb_valuearray[3] = 0x10;\r
+       priv->cck_txbbgain_table[15].ccktxbb_valuearray[4] = 0x0c;\r
+       priv->cck_txbbgain_table[15].ccktxbb_valuearray[5] = 0x08;\r
+       priv->cck_txbbgain_table[15].ccktxbb_valuearray[6] = 0x04;\r
+       priv->cck_txbbgain_table[15].ccktxbb_valuearray[7] = 0x02;\r
+\r
+       priv->cck_txbbgain_table[16].ccktxbb_valuearray[0] = 0x16;\r
+       priv->cck_txbbgain_table[16].ccktxbb_valuearray[1] = 0x15;\r
+       priv->cck_txbbgain_table[16].ccktxbb_valuearray[2] = 0x12;\r
+       priv->cck_txbbgain_table[16].ccktxbb_valuearray[3] = 0x0f;\r
+       priv->cck_txbbgain_table[16].ccktxbb_valuearray[4] = 0x0b;\r
+       priv->cck_txbbgain_table[16].ccktxbb_valuearray[5] = 0x07;\r
+       priv->cck_txbbgain_table[16].ccktxbb_valuearray[6] = 0x04;\r
+       priv->cck_txbbgain_table[16].ccktxbb_valuearray[7] = 0x01;\r
+\r
+       priv->cck_txbbgain_table[17].ccktxbb_valuearray[0] = 0x14;\r
+       priv->cck_txbbgain_table[17].ccktxbb_valuearray[1] = 0x14;\r
+       priv->cck_txbbgain_table[17].ccktxbb_valuearray[2] = 0x11;\r
+       priv->cck_txbbgain_table[17].ccktxbb_valuearray[3] = 0x0e;\r
+       priv->cck_txbbgain_table[17].ccktxbb_valuearray[4] = 0x0b;\r
+       priv->cck_txbbgain_table[17].ccktxbb_valuearray[5] = 0x07;\r
+       priv->cck_txbbgain_table[17].ccktxbb_valuearray[6] = 0x03;\r
+       priv->cck_txbbgain_table[17].ccktxbb_valuearray[7] = 0x02;\r
+\r
+       priv->cck_txbbgain_table[18].ccktxbb_valuearray[0] = 0x13;\r
+       priv->cck_txbbgain_table[18].ccktxbb_valuearray[1] = 0x13;\r
+       priv->cck_txbbgain_table[18].ccktxbb_valuearray[2] = 0x10;\r
+       priv->cck_txbbgain_table[18].ccktxbb_valuearray[3] = 0x0d;\r
+       priv->cck_txbbgain_table[18].ccktxbb_valuearray[4] = 0x0a;\r
+       priv->cck_txbbgain_table[18].ccktxbb_valuearray[5] = 0x06;\r
+       priv->cck_txbbgain_table[18].ccktxbb_valuearray[6] = 0x03;\r
+       priv->cck_txbbgain_table[18].ccktxbb_valuearray[7] = 0x01;\r
+\r
+       priv->cck_txbbgain_table[19].ccktxbb_valuearray[0] = 0x12;\r
+       priv->cck_txbbgain_table[19].ccktxbb_valuearray[1] = 0x12;\r
+       priv->cck_txbbgain_table[19].ccktxbb_valuearray[2] = 0x0f;\r
+       priv->cck_txbbgain_table[19].ccktxbb_valuearray[3] = 0x0c;\r
+       priv->cck_txbbgain_table[19].ccktxbb_valuearray[4] = 0x09;\r
+       priv->cck_txbbgain_table[19].ccktxbb_valuearray[5] = 0x06;\r
+       priv->cck_txbbgain_table[19].ccktxbb_valuearray[6] = 0x03;\r
+       priv->cck_txbbgain_table[19].ccktxbb_valuearray[7] = 0x01;\r
+\r
+       priv->cck_txbbgain_table[20].ccktxbb_valuearray[0] = 0x11;\r
+       priv->cck_txbbgain_table[20].ccktxbb_valuearray[1] = 0x11;\r
+       priv->cck_txbbgain_table[20].ccktxbb_valuearray[2] = 0x0f;\r
+       priv->cck_txbbgain_table[20].ccktxbb_valuearray[3] = 0x0c;\r
+       priv->cck_txbbgain_table[20].ccktxbb_valuearray[4] = 0x09;\r
+       priv->cck_txbbgain_table[20].ccktxbb_valuearray[5] = 0x06;\r
+       priv->cck_txbbgain_table[20].ccktxbb_valuearray[6] = 0x03;\r
+       priv->cck_txbbgain_table[20].ccktxbb_valuearray[7] = 0x01;\r
+\r
+       priv->cck_txbbgain_table[21].ccktxbb_valuearray[0] = 0x10;\r
+       priv->cck_txbbgain_table[21].ccktxbb_valuearray[1] = 0x10;\r
+       priv->cck_txbbgain_table[21].ccktxbb_valuearray[2] = 0x0e;\r
+       priv->cck_txbbgain_table[21].ccktxbb_valuearray[3] = 0x0b;\r
+       priv->cck_txbbgain_table[21].ccktxbb_valuearray[4] = 0x08;\r
+       priv->cck_txbbgain_table[21].ccktxbb_valuearray[5] = 0x05;\r
+       priv->cck_txbbgain_table[21].ccktxbb_valuearray[6] = 0x03;\r
+       priv->cck_txbbgain_table[21].ccktxbb_valuearray[7] = 0x01;\r
+\r
+       priv->cck_txbbgain_table[22].ccktxbb_valuearray[0] = 0x0f;\r
+       priv->cck_txbbgain_table[22].ccktxbb_valuearray[1] = 0x0f;\r
+       priv->cck_txbbgain_table[22].ccktxbb_valuearray[2] = 0x0d;\r
+       priv->cck_txbbgain_table[22].ccktxbb_valuearray[3] = 0x0b;\r
+       priv->cck_txbbgain_table[22].ccktxbb_valuearray[4] = 0x08;\r
+       priv->cck_txbbgain_table[22].ccktxbb_valuearray[5] = 0x05;\r
+       priv->cck_txbbgain_table[22].ccktxbb_valuearray[6] = 0x03;\r
+       priv->cck_txbbgain_table[22].ccktxbb_valuearray[7] = 0x01;\r
+       \r
+       priv->cck_txbbgain_ch14_table[0].ccktxbb_valuearray[0] = 0x36;\r
+       priv->cck_txbbgain_ch14_table[0].ccktxbb_valuearray[1] = 0x35;\r
+       priv->cck_txbbgain_ch14_table[0].ccktxbb_valuearray[2] = 0x2e;\r
+       priv->cck_txbbgain_ch14_table[0].ccktxbb_valuearray[3] = 0x1b;\r
+       priv->cck_txbbgain_ch14_table[0].ccktxbb_valuearray[4] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[0].ccktxbb_valuearray[5] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[0].ccktxbb_valuearray[6] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[0].ccktxbb_valuearray[7] = 0x00;\r
+\r
+       priv->cck_txbbgain_ch14_table[1].ccktxbb_valuearray[0] = 0x33;\r
+       priv->cck_txbbgain_ch14_table[1].ccktxbb_valuearray[1] = 0x32;\r
+       priv->cck_txbbgain_ch14_table[1].ccktxbb_valuearray[2] = 0x2b;\r
+       priv->cck_txbbgain_ch14_table[1].ccktxbb_valuearray[3] = 0x19;\r
+       priv->cck_txbbgain_ch14_table[1].ccktxbb_valuearray[4] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[1].ccktxbb_valuearray[5] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[1].ccktxbb_valuearray[6] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[1].ccktxbb_valuearray[7] = 0x00;\r
+\r
+       priv->cck_txbbgain_ch14_table[2].ccktxbb_valuearray[0] = 0x30;\r
+       priv->cck_txbbgain_ch14_table[2].ccktxbb_valuearray[1] = 0x2f;\r
+       priv->cck_txbbgain_ch14_table[2].ccktxbb_valuearray[2] = 0x29;\r
+       priv->cck_txbbgain_ch14_table[2].ccktxbb_valuearray[3] = 0x18;\r
+       priv->cck_txbbgain_ch14_table[2].ccktxbb_valuearray[4] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[2].ccktxbb_valuearray[5] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[2].ccktxbb_valuearray[6] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[2].ccktxbb_valuearray[7] = 0x00;\r
+\r
+       priv->cck_txbbgain_ch14_table[3].ccktxbb_valuearray[0] = 0x2d;\r
+       priv->cck_txbbgain_ch14_table[3].ccktxbb_valuearray[1] = 0x2d;\r
+       priv->cck_txbbgain_ch14_table[3].ccktxbb_valuearray[2] = 0x27;\r
+       priv->cck_txbbgain_ch14_table[3].ccktxbb_valuearray[3] = 0x17;\r
+       priv->cck_txbbgain_ch14_table[3].ccktxbb_valuearray[4] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[3].ccktxbb_valuearray[5] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[3].ccktxbb_valuearray[6] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[3].ccktxbb_valuearray[7] = 0x00;\r
+       \r
+       priv->cck_txbbgain_ch14_table[4].ccktxbb_valuearray[0] = 0x2b;\r
+       priv->cck_txbbgain_ch14_table[4].ccktxbb_valuearray[1] = 0x2a;\r
+       priv->cck_txbbgain_ch14_table[4].ccktxbb_valuearray[2] = 0x25;\r
+       priv->cck_txbbgain_ch14_table[4].ccktxbb_valuearray[3] = 0x15;\r
+       priv->cck_txbbgain_ch14_table[4].ccktxbb_valuearray[4] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[4].ccktxbb_valuearray[5] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[4].ccktxbb_valuearray[6] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[4].ccktxbb_valuearray[7] = 0x00;\r
+\r
+       priv->cck_txbbgain_ch14_table[5].ccktxbb_valuearray[0] = 0x28;\r
+       priv->cck_txbbgain_ch14_table[5].ccktxbb_valuearray[1] = 0x28;\r
+       priv->cck_txbbgain_ch14_table[5].ccktxbb_valuearray[2] = 0x22;\r
+       priv->cck_txbbgain_ch14_table[5].ccktxbb_valuearray[3] = 0x14;\r
+       priv->cck_txbbgain_ch14_table[5].ccktxbb_valuearray[4] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[5].ccktxbb_valuearray[5] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[5].ccktxbb_valuearray[6] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[5].ccktxbb_valuearray[7] = 0x00;\r
+       \r
+       priv->cck_txbbgain_ch14_table[6].ccktxbb_valuearray[0] = 0x26;\r
+       priv->cck_txbbgain_ch14_table[6].ccktxbb_valuearray[1] = 0x25;\r
+       priv->cck_txbbgain_ch14_table[6].ccktxbb_valuearray[2] = 0x21;\r
+       priv->cck_txbbgain_ch14_table[6].ccktxbb_valuearray[3] = 0x13;\r
+       priv->cck_txbbgain_ch14_table[6].ccktxbb_valuearray[4] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[6].ccktxbb_valuearray[5] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[6].ccktxbb_valuearray[6] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[6].ccktxbb_valuearray[7] = 0x00;\r
+\r
+       priv->cck_txbbgain_ch14_table[7].ccktxbb_valuearray[0] = 0x24;\r
+       priv->cck_txbbgain_ch14_table[7].ccktxbb_valuearray[1] = 0x23;\r
+       priv->cck_txbbgain_ch14_table[7].ccktxbb_valuearray[2] = 0x1f;\r
+       priv->cck_txbbgain_ch14_table[7].ccktxbb_valuearray[3] = 0x12;\r
+       priv->cck_txbbgain_ch14_table[7].ccktxbb_valuearray[4] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[7].ccktxbb_valuearray[5] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[7].ccktxbb_valuearray[6] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[7].ccktxbb_valuearray[7] = 0x00;\r
+       \r
+       priv->cck_txbbgain_ch14_table[8].ccktxbb_valuearray[0] = 0x22;\r
+       priv->cck_txbbgain_ch14_table[8].ccktxbb_valuearray[1] = 0x21;\r
+       priv->cck_txbbgain_ch14_table[8].ccktxbb_valuearray[2] = 0x1d;\r
+       priv->cck_txbbgain_ch14_table[8].ccktxbb_valuearray[3] = 0x11;\r
+       priv->cck_txbbgain_ch14_table[8].ccktxbb_valuearray[4] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[8].ccktxbb_valuearray[5] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[8].ccktxbb_valuearray[6] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[8].ccktxbb_valuearray[7] = 0x00;\r
+\r
+       priv->cck_txbbgain_ch14_table[9].ccktxbb_valuearray[0] = 0x20;\r
+       priv->cck_txbbgain_ch14_table[9].ccktxbb_valuearray[1] = 0x20;\r
+       priv->cck_txbbgain_ch14_table[9].ccktxbb_valuearray[2] = 0x1b;\r
+       priv->cck_txbbgain_ch14_table[9].ccktxbb_valuearray[3] = 0x10;\r
+       priv->cck_txbbgain_ch14_table[9].ccktxbb_valuearray[4] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[9].ccktxbb_valuearray[5] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[9].ccktxbb_valuearray[6] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[9].ccktxbb_valuearray[7] = 0x00;\r
+       \r
+       priv->cck_txbbgain_ch14_table[10].ccktxbb_valuearray[0] = 0x1f;\r
+       priv->cck_txbbgain_ch14_table[10].ccktxbb_valuearray[1] = 0x1e;\r
+       priv->cck_txbbgain_ch14_table[10].ccktxbb_valuearray[2] = 0x1a;\r
+       priv->cck_txbbgain_ch14_table[10].ccktxbb_valuearray[3] = 0x0f;\r
+       priv->cck_txbbgain_ch14_table[10].ccktxbb_valuearray[4] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[10].ccktxbb_valuearray[5] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[10].ccktxbb_valuearray[6] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[10].ccktxbb_valuearray[7] = 0x00;\r
+\r
+       priv->cck_txbbgain_ch14_table[11].ccktxbb_valuearray[0] = 0x1d;\r
+       priv->cck_txbbgain_ch14_table[11].ccktxbb_valuearray[1] = 0x1c;\r
+       priv->cck_txbbgain_ch14_table[11].ccktxbb_valuearray[2] = 0x18;\r
+       priv->cck_txbbgain_ch14_table[11].ccktxbb_valuearray[3] = 0x0e;\r
+       priv->cck_txbbgain_ch14_table[11].ccktxbb_valuearray[4] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[11].ccktxbb_valuearray[5] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[11].ccktxbb_valuearray[6] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[11].ccktxbb_valuearray[7] = 0x00;\r
+       \r
+       priv->cck_txbbgain_ch14_table[12].ccktxbb_valuearray[0] = 0x1b;\r
+       priv->cck_txbbgain_ch14_table[12].ccktxbb_valuearray[1] = 0x1a;\r
+       priv->cck_txbbgain_ch14_table[12].ccktxbb_valuearray[2] = 0x17;\r
+       priv->cck_txbbgain_ch14_table[12].ccktxbb_valuearray[3] = 0x0e;\r
+       priv->cck_txbbgain_ch14_table[12].ccktxbb_valuearray[4] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[12].ccktxbb_valuearray[5] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[12].ccktxbb_valuearray[6] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[12].ccktxbb_valuearray[7] = 0x00;\r
+\r
+       priv->cck_txbbgain_ch14_table[13].ccktxbb_valuearray[0] = 0x1a;\r
+       priv->cck_txbbgain_ch14_table[13].ccktxbb_valuearray[1] = 0x19;\r
+       priv->cck_txbbgain_ch14_table[13].ccktxbb_valuearray[2] = 0x16;\r
+       priv->cck_txbbgain_ch14_table[13].ccktxbb_valuearray[3] = 0x0d;\r
+       priv->cck_txbbgain_ch14_table[13].ccktxbb_valuearray[4] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[13].ccktxbb_valuearray[5] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[13].ccktxbb_valuearray[6] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[13].ccktxbb_valuearray[7] = 0x00;\r
+       \r
+       priv->cck_txbbgain_ch14_table[14].ccktxbb_valuearray[0] = 0x18;\r
+       priv->cck_txbbgain_ch14_table[14].ccktxbb_valuearray[1] = 0x17;\r
+       priv->cck_txbbgain_ch14_table[14].ccktxbb_valuearray[2] = 0x15;\r
+       priv->cck_txbbgain_ch14_table[14].ccktxbb_valuearray[3] = 0x0c;\r
+       priv->cck_txbbgain_ch14_table[14].ccktxbb_valuearray[4] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[14].ccktxbb_valuearray[5] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[14].ccktxbb_valuearray[6] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[14].ccktxbb_valuearray[7] = 0x00;\r
+\r
+       priv->cck_txbbgain_ch14_table[15].ccktxbb_valuearray[0] = 0x17;\r
+       priv->cck_txbbgain_ch14_table[15].ccktxbb_valuearray[1] = 0x16;\r
+       priv->cck_txbbgain_ch14_table[15].ccktxbb_valuearray[2] = 0x13;\r
+       priv->cck_txbbgain_ch14_table[15].ccktxbb_valuearray[3] = 0x0b;\r
+       priv->cck_txbbgain_ch14_table[15].ccktxbb_valuearray[4] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[15].ccktxbb_valuearray[5] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[15].ccktxbb_valuearray[6] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[15].ccktxbb_valuearray[7] = 0x00;\r
+       \r
+       priv->cck_txbbgain_ch14_table[16].ccktxbb_valuearray[0] = 0x16;\r
+       priv->cck_txbbgain_ch14_table[16].ccktxbb_valuearray[1] = 0x15;\r
+       priv->cck_txbbgain_ch14_table[16].ccktxbb_valuearray[2] = 0x12;\r
+       priv->cck_txbbgain_ch14_table[16].ccktxbb_valuearray[3] = 0x0b;\r
+       priv->cck_txbbgain_ch14_table[16].ccktxbb_valuearray[4] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[16].ccktxbb_valuearray[5] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[16].ccktxbb_valuearray[6] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[16].ccktxbb_valuearray[7] = 0x00;\r
+\r
+       priv->cck_txbbgain_ch14_table[17].ccktxbb_valuearray[0] = 0x14;\r
+       priv->cck_txbbgain_ch14_table[17].ccktxbb_valuearray[1] = 0x14;\r
+       priv->cck_txbbgain_ch14_table[17].ccktxbb_valuearray[2] = 0x11;\r
+       priv->cck_txbbgain_ch14_table[17].ccktxbb_valuearray[3] = 0x0a;\r
+       priv->cck_txbbgain_ch14_table[17].ccktxbb_valuearray[4] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[17].ccktxbb_valuearray[5] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[17].ccktxbb_valuearray[6] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[17].ccktxbb_valuearray[7] = 0x00;\r
+       \r
+       priv->cck_txbbgain_ch14_table[18].ccktxbb_valuearray[0] = 0x13;\r
+       priv->cck_txbbgain_ch14_table[18].ccktxbb_valuearray[1] = 0x13;\r
+       priv->cck_txbbgain_ch14_table[18].ccktxbb_valuearray[2] = 0x10;\r
+       priv->cck_txbbgain_ch14_table[18].ccktxbb_valuearray[3] = 0x0a;\r
+       priv->cck_txbbgain_ch14_table[18].ccktxbb_valuearray[4] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[18].ccktxbb_valuearray[5] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[18].ccktxbb_valuearray[6] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[18].ccktxbb_valuearray[7] = 0x00;\r
+\r
+       priv->cck_txbbgain_ch14_table[19].ccktxbb_valuearray[0] = 0x12;\r
+       priv->cck_txbbgain_ch14_table[19].ccktxbb_valuearray[1] = 0x12;\r
+       priv->cck_txbbgain_ch14_table[19].ccktxbb_valuearray[2] = 0x0f;\r
+       priv->cck_txbbgain_ch14_table[19].ccktxbb_valuearray[3] = 0x09;\r
+       priv->cck_txbbgain_ch14_table[19].ccktxbb_valuearray[4] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[19].ccktxbb_valuearray[5] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[19].ccktxbb_valuearray[6] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[19].ccktxbb_valuearray[7] = 0x00;\r
+       \r
+       priv->cck_txbbgain_ch14_table[20].ccktxbb_valuearray[0] = 0x11;\r
+       priv->cck_txbbgain_ch14_table[20].ccktxbb_valuearray[1] = 0x11;\r
+       priv->cck_txbbgain_ch14_table[20].ccktxbb_valuearray[2] = 0x0f;\r
+       priv->cck_txbbgain_ch14_table[20].ccktxbb_valuearray[3] = 0x09;\r
+       priv->cck_txbbgain_ch14_table[20].ccktxbb_valuearray[4] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[20].ccktxbb_valuearray[5] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[20].ccktxbb_valuearray[6] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[20].ccktxbb_valuearray[7] = 0x00;\r
+\r
+       priv->cck_txbbgain_ch14_table[21].ccktxbb_valuearray[0] = 0x10;\r
+       priv->cck_txbbgain_ch14_table[21].ccktxbb_valuearray[1] = 0x10;\r
+       priv->cck_txbbgain_ch14_table[21].ccktxbb_valuearray[2] = 0x0e;\r
+       priv->cck_txbbgain_ch14_table[21].ccktxbb_valuearray[3] = 0x08;\r
+       priv->cck_txbbgain_ch14_table[21].ccktxbb_valuearray[4] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[21].ccktxbb_valuearray[5] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[21].ccktxbb_valuearray[6] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[21].ccktxbb_valuearray[7] = 0x00;\r
+       \r
+       priv->cck_txbbgain_ch14_table[22].ccktxbb_valuearray[0] = 0x0f;\r
+       priv->cck_txbbgain_ch14_table[22].ccktxbb_valuearray[1] = 0x0f;\r
+       priv->cck_txbbgain_ch14_table[22].ccktxbb_valuearray[2] = 0x0d;\r
+       priv->cck_txbbgain_ch14_table[22].ccktxbb_valuearray[3] = 0x08;\r
+       priv->cck_txbbgain_ch14_table[22].ccktxbb_valuearray[4] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[22].ccktxbb_valuearray[5] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[22].ccktxbb_valuearray[6] = 0x00;\r
+       priv->cck_txbbgain_ch14_table[22].ccktxbb_valuearray[7] = 0x00;\r
+\r
+       priv->btxpower_tracking = true;\r
+       priv->txpower_count       = 0;\r
+       priv->btxpower_trackingInit = false;\r
+\r
+}\r
+#endif\r
+#ifndef RTL8190P\r
+static void dm_InitializeTXPowerTracking_ThermalMeter(struct net_device *dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+\r
+#ifdef RTL8192SE\r
+               priv->btxpower_tracking = false;\r
+               priv->txpower_count       = 0;\r
+               priv->btxpower_trackingInit = false;\r
+#else\r
+\r
+       if(priv->rtllib->FwRWRF)\r
+               priv->btxpower_tracking = true;\r
+       else\r
+               priv->btxpower_tracking = false;\r
+       priv->txpower_count       = 0;\r
+       priv->btxpower_trackingInit = false;\r
+#endif\r
+       RT_TRACE(COMP_POWER_TRACKING, "pMgntInfo->bTXPowerTracking = %d\n", priv->btxpower_tracking);\r
+}\r
+#endif\r
+\r
+void dm_initialize_txpower_tracking(struct net_device *dev)\r
+{\r
+#ifdef RTL8192E\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+#endif\r
+#ifdef RTL8190P\r
+       dm_InitializeTXPowerTracking_TSSI(dev);\r
+#elif defined RTL8192E\r
+       if(priv->IC_Cut >= IC_VersionCut_D)\r
+               dm_InitializeTXPowerTracking_TSSI(dev);\r
+       else\r
+               dm_InitializeTXPowerTracking_ThermalMeter(dev);\r
+#elif defined RTL8192SE\r
+       dm_InitializeTXPowerTracking_ThermalMeter(dev);\r
+#endif\r
+}      
+\r
+#if (defined RTL8192E || defined RTL8190P)\r
+static void dm_CheckTXPowerTracking_TSSI(struct net_device *dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       static u32 tx_power_track_counter = 0;\r
+       RT_TRACE(COMP_POWER_TRACKING,"%s()\n",__FUNCTION__);\r
+       if(read_nic_byte(dev, 0x11e) ==1)\r
+               return;\r
+       if(!priv->btxpower_tracking)\r
+               return;\r
+       tx_power_track_counter++;\r
+       \r
+       \r
+        if(tx_power_track_counter >= 180)      
+               {\r
+               queue_delayed_work_rsl(priv->priv_wq,&priv->txpower_tracking_wq,0);\r
+               tx_power_track_counter =0;\r
+               }\r
+       \r
+}      \r
+#endif\r
+#ifndef RTL8190P\r
+static void dm_CheckTXPowerTracking_ThermalMeter(struct net_device *dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       static u8       TM_Trigger=0;\r
+       u8              TxPowerCheckCnt = 0;\r
+\r
+       if(IS_HARDWARE_TYPE_8192SE(dev))\r
+               TxPowerCheckCnt = 5;    
+       else\r
+               TxPowerCheckCnt = 2;    
+        if(!priv->btxpower_tracking){\r
+            return;\r
+        } else {\r
+            if(priv->txpower_count  <= TxPowerCheckCnt) {\r
+                       priv->txpower_count++;\r
+                       return;\r
+               }\r
+       }       \r
+\r
+       if(!TM_Trigger)\r
+       {\r
+#ifdef RTL8192SE\r
+               if(IS_HARDWARE_TYPE_8192SE(dev))\r
+               {\r
+                    rtl8192_phy_SetRFReg(dev, RF90_PATH_A, RF_T_METER, bRFRegOffsetMask, 0x60);\r
+                    RT_TRACE(COMP_POWER_TRACKING, "Trigger 92S Thermal Meter!!\n");\r
+                }\r
+                else\r
+#endif\r
+                {\r
+               rtl8192_phy_SetRFReg(dev, RF90_PATH_A, 0x02, bMask12Bits, 0x4d);\r
+               rtl8192_phy_SetRFReg(dev, RF90_PATH_A, 0x02, bMask12Bits, 0x4f);\r
+               rtl8192_phy_SetRFReg(dev, RF90_PATH_A, 0x02, bMask12Bits, 0x4d);\r
+               rtl8192_phy_SetRFReg(dev, RF90_PATH_A, 0x02, bMask12Bits, 0x4f);\r
+                }\r
+               TM_Trigger = 1;\r
+               return;\r
+       } else {\r
+            printk("===============>Schedule TxPowerTrackingWorkItem\n");\r
+#ifdef RTL8192SE\r
+               DM_TXPowerTracking92SDirectCall(dev); 
+#else\r
+\r
+               queue_delayed_work_rsl(priv->priv_wq,&priv->txpower_tracking_wq,0);\r
+#endif\r
+               TM_Trigger = 0;\r
+               }\r
+\r
+       }       \r
+#endif\r
+\r
+#ifdef RTL8192SE\r
+void DM_TXPowerTracking92SDirectCall(struct net_device *dev)\r
+{      \r
+       dm_TXPowerTrackingCallback_ThermalMeter(dev);\r
+       }       \r
+#endif\r
+\r
+static void dm_check_txpower_tracking(struct net_device *dev)\r
+{\r
+#ifdef RTL8192E\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+#endif \r
+#ifdef  RTL8190P\r
+       dm_CheckTXPowerTracking_TSSI(dev);\r
+#elif defined RTL8192E\r
+       if(priv->IC_Cut >= IC_VersionCut_D)\r
+               dm_CheckTXPowerTracking_TSSI(dev);\r
+       else\r
+               dm_CheckTXPowerTracking_ThermalMeter(dev);\r
+#elif defined RTL8192SE\r
+       dm_CheckTXPowerTracking_ThermalMeter(dev);\r
+#endif\r
+       \r
+}      
+\r
+#ifndef RTL8192SE\r
+static void dm_CCKTxPowerAdjust_TSSI(struct net_device *dev, bool  bInCH14)\r
+{\r
+       u32 TempVal;\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       TempVal = 0;\r
+       if(!bInCH14){\r
+               TempVal =       (u32)(priv->cck_txbbgain_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[0] +\r
+                                       (priv->cck_txbbgain_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[1]<<8)) ;\r
+       \r
+               rtl8192_setBBreg(dev, rCCK0_TxFilter1,bMaskHWord, TempVal);\r
+               TempVal = 0;\r
+               TempVal =       (u32)(priv->cck_txbbgain_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[2] +\r
+                                       (priv->cck_txbbgain_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[3]<<8) +\r
+                                       (priv->cck_txbbgain_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[4]<<16 )+\r
+                                       (priv->cck_txbbgain_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[5]<<24));\r
+               rtl8192_setBBreg(dev, rCCK0_TxFilter2,bMaskDWord, TempVal);\r
+               TempVal = 0;\r
+               TempVal =       (u32)(priv->cck_txbbgain_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[6] +\r
+                                       (priv->cck_txbbgain_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[7]<<8)) ;\r
+               \r
+               rtl8192_setBBreg(dev, rCCK0_DebugPort,bMaskLWord, TempVal);\r
+       }\r
+       else\r
+       {\r
+               TempVal =       (u32)(priv->cck_txbbgain_ch14_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[0] +\r
+                                       (priv->cck_txbbgain_ch14_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[1]<<8)) ;\r
+       \r
+               rtl8192_setBBreg(dev, rCCK0_TxFilter1,bMaskHWord, TempVal);\r
+               TempVal = 0;\r
+               TempVal =       (u32)(priv->cck_txbbgain_ch14_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[2] +\r
+                                       (priv->cck_txbbgain_ch14_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[3]<<8) +\r
+                                       (priv->cck_txbbgain_ch14_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[4]<<16 )+\r
+                                       (priv->cck_txbbgain_ch14_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[5]<<24));\r
+               rtl8192_setBBreg(dev, rCCK0_TxFilter2,bMaskDWord, TempVal);\r
+               TempVal = 0;\r
+               TempVal =       (u32)(priv->cck_txbbgain_ch14_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[6] +\r
+                                       (priv->cck_txbbgain_ch14_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[7]<<8)) ;\r
+               \r
+               rtl8192_setBBreg(dev, rCCK0_DebugPort,bMaskLWord, TempVal);\r
+       }\r
+               \r
+       \r
+}\r
+#endif\r
+#ifdef RTL8192E\r
+static void dm_CCKTxPowerAdjust_ThermalMeter(struct net_device *dev,   bool  bInCH14)\r
+{\r
+       u32 TempVal;\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+\r
+       TempVal = 0;\r
+       if(!bInCH14)\r
+       {\r
+               TempVal =       CCKSwingTable_Ch1_Ch13[priv->CCK_index][0] +\r
+                                       (CCKSwingTable_Ch1_Ch13[priv->CCK_index][1]<<8) ;\r
+               rtl8192_setBBreg(dev, rCCK0_TxFilter1, bMaskHWord, TempVal);\r
+               RT_TRACE(COMP_POWER_TRACKING, "CCK not chnl 14, reg 0x%x = 0x%x\n", \r
+                       rCCK0_TxFilter1, TempVal);\r
+               TempVal = 0;\r
+               TempVal =       CCKSwingTable_Ch1_Ch13[priv->CCK_index][2] +\r
+                                       (CCKSwingTable_Ch1_Ch13[priv->CCK_index][3]<<8) +\r
+                                       (CCKSwingTable_Ch1_Ch13[priv->CCK_index][4]<<16 )+\r
+                                       (CCKSwingTable_Ch1_Ch13[priv->CCK_index][5]<<24);\r
+               rtl8192_setBBreg(dev, rCCK0_TxFilter2, bMaskDWord, TempVal);\r
+               RT_TRACE(COMP_POWER_TRACKING, "CCK not chnl 14, reg 0x%x = 0x%x\n", \r
+                       rCCK0_TxFilter2, TempVal);\r
+               TempVal = 0;\r
+               TempVal =       CCKSwingTable_Ch1_Ch13[priv->CCK_index][6] +\r
+                                       (CCKSwingTable_Ch1_Ch13[priv->CCK_index][7]<<8) ;\r
+               \r
+               rtl8192_setBBreg(dev, rCCK0_DebugPort, bMaskLWord, TempVal);\r
+               RT_TRACE(COMP_POWER_TRACKING, "CCK not chnl 14, reg 0x%x = 0x%x\n", \r
+                       rCCK0_DebugPort, TempVal);\r
+       }\r
+       else\r
+       {\r
+               TempVal =       CCKSwingTable_Ch14[priv->CCK_index][0] +\r
+                                       (CCKSwingTable_Ch14[priv->CCK_index][1]<<8) ;\r
+\r
+               rtl8192_setBBreg(dev, rCCK0_TxFilter1, bMaskHWord, TempVal);\r
+               RT_TRACE(COMP_POWER_TRACKING, "CCK chnl 14, reg 0x%x = 0x%x\n", \r
+                       rCCK0_TxFilter1, TempVal);\r
+               TempVal = 0;\r
+               TempVal =       CCKSwingTable_Ch14[priv->CCK_index][2] +\r
+                                       (CCKSwingTable_Ch14[priv->CCK_index][3]<<8) +\r
+                                       (CCKSwingTable_Ch14[priv->CCK_index][4]<<16 )+\r
+                                       (CCKSwingTable_Ch14[priv->CCK_index][5]<<24);\r
+               rtl8192_setBBreg(dev, rCCK0_TxFilter2, bMaskDWord, TempVal);\r
+               RT_TRACE(COMP_POWER_TRACKING, "CCK chnl 14, reg 0x%x = 0x%x\n", \r
+                       rCCK0_TxFilter2, TempVal);\r
+               TempVal = 0;\r
+               TempVal =       CCKSwingTable_Ch14[priv->CCK_index][6] +\r
+                                       (CCKSwingTable_Ch14[priv->CCK_index][7]<<8) ;\r
+\r
+               rtl8192_setBBreg(dev, rCCK0_DebugPort, bMaskLWord, TempVal);\r
+               RT_TRACE(COMP_POWER_TRACKING,"CCK chnl 14, reg 0x%x = 0x%x\n", \r
+                       rCCK0_DebugPort, TempVal);\r
+       }\r
+       }\r
+#endif\r
+       \r
+#ifndef RTL8192SE\r
+extern void dm_cck_txpower_adjust(\r
+       struct net_device *dev,\r
+       bool  binch14\r
+)\r
+{      
+#ifndef RTL8190P\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+#endif\r
+#ifdef RTL8190P\r
+       dm_CCKTxPowerAdjust_TSSI(dev, binch14);\r
+#else\r
+       if(priv->IC_Cut >= IC_VersionCut_D)\r
+               dm_CCKTxPowerAdjust_TSSI(dev, binch14);\r
+       else\r
+               dm_CCKTxPowerAdjust_ThermalMeter(dev, binch14);\r
+#endif\r
+}\r
+#endif\r
+\r
+\r
+#if defined(RTL8192E)||defined(RTL8190P)\r
+static void dm_txpower_reset_recovery(\r
+       struct net_device *dev\r
+)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+\r
+       RT_TRACE(COMP_POWER_TRACKING, "Start Reset Recovery ==>\n");\r
+       rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance, bMaskDWord, priv->txbbgain_table[priv->rfa_txpowertrackingindex].txbbgain_value);\r
+       RT_TRACE(COMP_POWER_TRACKING, "Reset Recovery: Fill in 0xc80 is %08x\n",priv->txbbgain_table[priv->rfa_txpowertrackingindex].txbbgain_value);\r
+       RT_TRACE(COMP_POWER_TRACKING, "Reset Recovery: Fill in RFA_txPowerTrackingIndex is %x\n",priv->rfa_txpowertrackingindex);\r
+       RT_TRACE(COMP_POWER_TRACKING, "Reset Recovery : RF A I/Q Amplify Gain is %ld\n",priv->txbbgain_table[priv->rfa_txpowertrackingindex].txbb_iq_amplifygain);\r
+       RT_TRACE(COMP_POWER_TRACKING, "Reset Recovery: CCK Attenuation is %d dB\n",priv->CCKPresentAttentuation);\r
+       dm_cck_txpower_adjust(dev,priv->bcck_in_ch14);          \r
+\r
+       rtl8192_setBBreg(dev, rOFDM0_XCTxIQImbalance, bMaskDWord, priv->txbbgain_table[priv->rfc_txpowertrackingindex].txbbgain_value);\r
+       RT_TRACE(COMP_POWER_TRACKING, "Reset Recovery: Fill in 0xc90 is %08x\n",priv->txbbgain_table[priv->rfc_txpowertrackingindex].txbbgain_value);\r
+       RT_TRACE(COMP_POWER_TRACKING, "Reset Recovery: Fill in RFC_txPowerTrackingIndex is %x\n",priv->rfc_txpowertrackingindex);\r
+       RT_TRACE(COMP_POWER_TRACKING, "Reset Recovery : RF C I/Q Amplify Gain is %ld\n",priv->txbbgain_table[priv->rfc_txpowertrackingindex].txbb_iq_amplifygain);\r
+\r
+}      
+\r
+extern void dm_restore_dynamic_mechanism_state(struct net_device *dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       u32     reg_ratr = priv->rate_adaptive.last_ratr;\r
+       \r
+#ifdef _RTL8192_EXT_PATCH_\r
+       if((!priv->up)&& (!priv->mesh_up))\r
+#else\r
+       if(!priv->up)\r
+#endif\r
+       {\r
+               RT_TRACE(COMP_RATE, "<---- dm_restore_dynamic_mechanism_state(): driver is going to unload\n");\r
+               return;\r
+       }\r
+\r
+       if(priv->rate_adaptive.rate_adaptive_disabled)\r
+               return;\r
+       if( !(priv->rtllib->mode==WIRELESS_MODE_N_24G ||\r
+                priv->rtllib->mode==WIRELESS_MODE_N_5G))\r
+                return;\r
+       {\r
+                       u32 ratr_value;\r
+                       ratr_value = reg_ratr;\r
+                       if(priv->rf_type == RF_1T2R)    
+                       {\r
+                               ratr_value &=~ (RATE_ALL_OFDM_2SS);\r
+                       }\r
+                       write_nic_dword(dev, RATR0, ratr_value);\r
+                       write_nic_byte(dev, UFWP, 1);\r
+#if 0          
+                       u1Byte index;\r
+                       u4Byte input_value;\r
+                       index = (u1Byte)((((pu4Byte)(val))[0]) >> 28);\r
+                       input_value = (((pu4Byte)(val))[0]) & 0x0fffffff;\r
+                       PlatformEFIOWrite4Byte(dev, RATR0+index*4, input_value);\r
+#endif         \r
+       }\r
+       if(priv->btxpower_trackingInit && priv->btxpower_tracking){\r
+               dm_txpower_reset_recovery(dev); \r
+       }\r
+\r
+       dm_bb_initialgain_restore(dev);\r
+       \r
+}      
+\r
+static void dm_bb_initialgain_restore(struct net_device *dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       u32 bit_mask = 0x7f; 
+       \r
+       if(dm_digtable.dig_algorithm == DIG_ALGO_BY_RSSI)\r
+               return;\r
+\r
+       rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x8);   
+       rtl8192_setBBreg(dev, rOFDM0_XAAGCCore1, bit_mask, (u32)priv->initgain_backup.xaagccore1);\r
+       rtl8192_setBBreg(dev, rOFDM0_XBAGCCore1, bit_mask, (u32)priv->initgain_backup.xbagccore1);\r
+       rtl8192_setBBreg(dev, rOFDM0_XCAGCCore1, bit_mask, (u32)priv->initgain_backup.xcagccore1);\r
+       rtl8192_setBBreg(dev, rOFDM0_XDAGCCore1, bit_mask, (u32)priv->initgain_backup.xdagccore1);\r
+       bit_mask  = bMaskByte2;\r
+       rtl8192_setBBreg(dev, rCCK0_CCA, bit_mask, (u32)priv->initgain_backup.cca);\r
+\r
+       RT_TRACE(COMP_DIG, "dm_BBInitialGainRestore 0xc50 is %x\n",priv->initgain_backup.xaagccore1);\r
+       RT_TRACE(COMP_DIG, "dm_BBInitialGainRestore 0xc58 is %x\n",priv->initgain_backup.xbagccore1);\r
+       RT_TRACE(COMP_DIG, "dm_BBInitialGainRestore 0xc60 is %x\n",priv->initgain_backup.xcagccore1);\r
+       RT_TRACE(COMP_DIG, "dm_BBInitialGainRestore 0xc68 is %x\n",priv->initgain_backup.xdagccore1);\r
+       RT_TRACE(COMP_DIG, "dm_BBInitialGainRestore 0xa0a is %x\n",priv->initgain_backup.cca);\r
+       rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x1);   
+       \r
+}      
+\r
+\r
+extern void dm_backup_dynamic_mechanism_state(struct net_device *dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+\r
+       priv->bswitch_fsync  = false;   \r
+       priv->bfsync_processing = false;\r
+       dm_bb_initialgain_backup(dev);\r
+       \r
+}      
+\r
+\r
+static void dm_bb_initialgain_backup(struct net_device *dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       u32 bit_mask = bMaskByte0; 
+\r
+       if(dm_digtable.dig_algorithm == DIG_ALGO_BY_RSSI)\r
+               return;\r
+\r
+       rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x8);   
+       priv->initgain_backup.xaagccore1 = (u8)rtl8192_QueryBBReg(dev, rOFDM0_XAAGCCore1, bit_mask);\r
+       priv->initgain_backup.xbagccore1 = (u8)rtl8192_QueryBBReg(dev, rOFDM0_XBAGCCore1, bit_mask);\r
+       priv->initgain_backup.xcagccore1 = (u8)rtl8192_QueryBBReg(dev, rOFDM0_XCAGCCore1, bit_mask);\r
+       priv->initgain_backup.xdagccore1 = (u8)rtl8192_QueryBBReg(dev, rOFDM0_XDAGCCore1, bit_mask);\r
+       bit_mask  = bMaskByte2;\r
+       priv->initgain_backup.cca = (u8)rtl8192_QueryBBReg(dev, rCCK0_CCA, bit_mask);\r
+\r
+       RT_TRACE(COMP_DIG, "BBInitialGainBackup 0xc50 is %x\n",priv->initgain_backup.xaagccore1);\r
+       RT_TRACE(COMP_DIG, "BBInitialGainBackup 0xc58 is %x\n",priv->initgain_backup.xbagccore1);\r
+       RT_TRACE(COMP_DIG, "BBInitialGainBackup 0xc60 is %x\n",priv->initgain_backup.xcagccore1);\r
+       RT_TRACE(COMP_DIG, "BBInitialGainBackup 0xc68 is %x\n",priv->initgain_backup.xdagccore1);\r
+       RT_TRACE(COMP_DIG, "BBInitialGainBackup 0xa0a is %x\n",priv->initgain_backup.cca);\r
+\r
+}   
+\r
+#endif\r
+extern void dm_change_dynamic_initgain_thresh(struct net_device *dev,\r
+                                                               u32             dm_type,\r
+                                                               u32             dm_value)\r
+{\r
+#ifdef RTL8192SE\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       if(dm_type == DIG_TYPE_THRESH_HIGHPWR_HIGH)\r
+               priv->MidHighPwrTHR_L2 = (u8)dm_value;\r
+       else if(dm_type == DIG_TYPE_THRESH_HIGHPWR_LOW)\r
+               priv->MidHighPwrTHR_L1 = (u8)dm_value;\r
+       return;\r
+#endif\r
+       if (dm_type == DIG_TYPE_THRESH_HIGH)\r
+       {\r
+               dm_digtable.rssi_high_thresh = dm_value;                \r
+       }\r
+       else if (dm_type == DIG_TYPE_THRESH_LOW)\r
+       {\r
+               dm_digtable.rssi_low_thresh = dm_value;\r
+       }\r
+       else if (dm_type == DIG_TYPE_THRESH_HIGHPWR_HIGH)\r
+       {\r
+               dm_digtable.rssi_high_power_highthresh = dm_value;\r
+       }\r
+       else if (dm_type == DIG_TYPE_THRESH_HIGHPWR_HIGH)\r
+       {\r
+               dm_digtable.rssi_high_power_highthresh = dm_value;\r
+       }\r
+       else if (dm_type == DIG_TYPE_ENABLE)\r
+       {\r
+               dm_digtable.dig_state           = DM_STA_DIG_MAX;\r
+               dm_digtable.dig_enable_flag     = true;\r
+       }\r
+       else if (dm_type == DIG_TYPE_DISABLE)\r
+       {\r
+               dm_digtable.dig_state           = DM_STA_DIG_MAX;\r
+               dm_digtable.dig_enable_flag     = false;\r
+       }\r
+       else if (dm_type == DIG_TYPE_DBG_MODE)\r
+       {\r
+               if(dm_value >= DM_DBG_MAX)\r
+                       dm_value = DM_DBG_OFF;\r
+               dm_digtable.dbg_mode            = (u8)dm_value;\r
+       }\r
+       else if (dm_type == DIG_TYPE_RSSI)\r
+       {\r
+               if(dm_value > 100)\r
+                       dm_value = 30;\r
+               dm_digtable.rssi_val                    = (long)dm_value;\r
+       }\r
+       else if (dm_type == DIG_TYPE_ALGORITHM)\r
+       {\r
+               if (dm_value >= DIG_ALGO_MAX)\r
+                       dm_value = DIG_ALGO_BY_FALSE_ALARM;\r
+               if(dm_digtable.dig_algorithm != (u8)dm_value)\r
+                       dm_digtable.dig_algorithm_switch = 1;\r
+               dm_digtable.dig_algorithm       = (u8)dm_value;\r
+       }\r
+       else if (dm_type == DIG_TYPE_BACKOFF)\r
+       {\r
+               if(dm_value > 30)\r
+                       dm_value = 30;\r
+               dm_digtable.backoff_val         = (u8)dm_value;\r
+       }\r
+       else if(dm_type == DIG_TYPE_RX_GAIN_MIN)\r
+       {\r
+               if(dm_value == 0)\r
+                       dm_value = 0x1;\r
+               dm_digtable.rx_gain_range_min = (u8)dm_value;\r
+       }\r
+       else if(dm_type == DIG_TYPE_RX_GAIN_MAX)\r
+       {\r
+               if(dm_value > 0x50)\r
+                       dm_value = 0x50;\r
+               dm_digtable.rx_gain_range_max = (u8)dm_value;\r
+       }\r
+}      
+extern void    \r
+dm_change_fsync_setting(\r
+       struct net_device *dev,\r
+       s32             DM_Type,\r
+       s32             DM_Value)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       \r
+       if (DM_Type == 0)       
+       {\r
+               if(DM_Value > 1)\r
+                       DM_Value = 1;\r
+               priv->framesyncMonitor = (u8)DM_Value;\r
+       }\r
+}\r
+\r
+extern void    \r
+dm_change_rxpath_selection_setting(    \r
+       struct net_device *dev,\r
+       s32             DM_Type,\r
+       s32             DM_Value)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       prate_adaptive  pRA = (prate_adaptive)&(priv->rate_adaptive);\r
+\r
+\r
+       if(DM_Type == 0)        \r
+       {\r
+               if(DM_Value > 1)\r
+                       DM_Value = 1;\r
+               DM_RxPathSelTable.Enable = (u8)DM_Value;\r
+       }\r
+       else if(DM_Type == 1)\r
+       {\r
+               if(DM_Value > 1)\r
+                       DM_Value = 1;\r
+               DM_RxPathSelTable.DbgMode = (u8)DM_Value;\r
+       }\r
+       else if(DM_Type == 2)\r
+       {\r
+               if(DM_Value > 40)\r
+                       DM_Value = 40;\r
+               DM_RxPathSelTable.SS_TH_low = (u8)DM_Value;\r
+       }\r
+       else if(DM_Type == 3)\r
+       {\r
+               if(DM_Value > 25)\r
+                       DM_Value = 25;\r
+               DM_RxPathSelTable.diff_TH = (u8)DM_Value;\r
+       }\r
+       else if(DM_Type == 4)\r
+       {\r
+               if(DM_Value >= CCK_Rx_Version_MAX)\r
+                       DM_Value = CCK_Rx_Version_1;\r
+               DM_RxPathSelTable.cck_method= (u8)DM_Value;\r
+       }\r
+       else if(DM_Type == 10)\r
+       {\r
+               if(DM_Value > 100)\r
+                       DM_Value = 50;\r
+               DM_RxPathSelTable.rf_rssi[0] = (u8)DM_Value;\r
+       }\r
+       else if(DM_Type == 11)\r
+       {\r
+               if(DM_Value > 100)\r
+                       DM_Value = 50;\r
+               DM_RxPathSelTable.rf_rssi[1] = (u8)DM_Value;\r
+       }\r
+       else if(DM_Type == 12)\r
+       {\r
+               if(DM_Value > 100)\r
+                       DM_Value = 50;\r
+               DM_RxPathSelTable.rf_rssi[2] = (u8)DM_Value;\r
+       }\r
+       else if(DM_Type == 13)\r
+       {\r
+               if(DM_Value > 100)\r
+                       DM_Value = 50;\r
+               DM_RxPathSelTable.rf_rssi[3] = (u8)DM_Value;\r
+       }\r
+       else if(DM_Type == 20)\r
+       {\r
+               if(DM_Value > 1)\r
+                       DM_Value = 1;\r
+               pRA->ping_rssi_enable = (u8)DM_Value;\r
+       }\r
+       else if(DM_Type == 21)\r
+       {\r
+               if(DM_Value > 30)\r
+                       DM_Value = 30;\r
+               pRA->ping_rssi_thresh_for_ra = DM_Value;\r
+       }\r
+}\r
+\r
+#if 0\r
+extern void dm_force_tx_fw_info(struct net_device *dev,\r
+                                                                               u32             force_type,\r
+                                                                               u32             force_value)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+\r
+       if (force_type == 0)    
+       {\r
+               priv->tx_fwinfo_force_subcarriermode = 0;\r
+       }\r
+       else if(force_type == 1) 
+       {\r
+               priv->tx_fwinfo_force_subcarriermode = 1;\r
+               if(force_value > 3)\r
+                       force_value = 3;\r
+               priv->tx_fwinfo_force_subcarrierval = (u8)force_value;\r
+       }\r
+}\r
+#endif\r
+\r
+static void dm_dig_init(struct net_device *dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       dm_digtable.dig_enable_flag     = true;\r
+       dm_digtable.Backoff_Enable_Flag = true;\r
+\r
+#ifdef RTL8192SE\r
+       if((priv->DM_Type  == DM_Type_ByDriver) && (priv->pFirmware->FirmwareVersion >= 0x3c))\r
+               dm_digtable.dig_algorithm = DIG_ALGO_BY_TOW_PORT;\r
+       else\r
+               dm_digtable.dig_algorithm = DIG_ALGO_BEFORE_CONNECT_BY_RSSI_AND_ALARM;\r
+#else  \r
+       dm_digtable.dig_algorithm = DIG_ALGO_BY_RSSI;\r
+#endif\r
+\r
+       dm_digtable.Dig_TwoPort_Algorithm = DIG_TWO_PORT_ALGO_RSSI;\r
+       dm_digtable.Dig_Ext_Port_Stage = DIG_EXT_PORT_STAGE_MAX;\r
+       dm_digtable.dbg_mode = DM_DBG_OFF;      
+       dm_digtable.dig_algorithm_switch = 0;\r
+       \r
+       dm_digtable.dig_state           = DM_STA_DIG_MAX;\r
+       dm_digtable.dig_highpwr_state   = DM_STA_DIG_MAX;\r
+       dm_digtable.CurSTAConnectState = dm_digtable.PreSTAConnectState = DIG_STA_DISCONNECT;\r
+       dm_digtable.CurAPConnectState = dm_digtable.PreAPConnectState = DIG_AP_DISCONNECT;\r
+       dm_digtable.initialgain_lowerbound_state = false;\r
+\r
+       dm_digtable.rssi_low_thresh     = DM_DIG_THRESH_LOW;\r
+       dm_digtable.rssi_high_thresh    = DM_DIG_THRESH_HIGH;\r
+\r
+       dm_digtable.FALowThresh = DM_FALSEALARM_THRESH_LOW;\r
+       dm_digtable.FAHighThresh        = DM_FALSEALARM_THRESH_HIGH;\r
+       \r
+       dm_digtable.rssi_high_power_lowthresh = DM_DIG_HIGH_PWR_THRESH_LOW;\r
+       dm_digtable.rssi_high_power_highthresh = DM_DIG_HIGH_PWR_THRESH_HIGH;\r
+       \r
+       dm_digtable.rssi_val = 50;      
+       dm_digtable.backoff_val = DM_DIG_BACKOFF;\r
+       dm_digtable.rx_gain_range_max = DM_DIG_MAX;\r
+       if(priv->CustomerID == RT_CID_819x_Netcore)\r
+               dm_digtable.rx_gain_range_min = DM_DIG_MIN_Netcore;     \r
+       else\r
+               dm_digtable.rx_gain_range_min = DM_DIG_MIN;\r
+       \r
+       dm_digtable.BackoffVal_range_max = DM_DIG_BACKOFF_MAX;\r
+       dm_digtable.BackoffVal_range_min = DM_DIG_BACKOFF_MIN;\r
+}      
+\r
+void dm_FalseAlarmCounterStatistics(struct net_device *dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       u32 ret_value;\r
+       PFALSE_ALARM_STATISTICS FalseAlmCnt = &(priv->FalseAlmCnt);\r
+       \r
+       ret_value = rtl8192_QueryBBReg(dev, rOFDM_PHYCounter1, bMaskDWord);\r
+        FalseAlmCnt->Cnt_Parity_Fail = ((ret_value&0xffff0000)>>16);   \r
+\r
+        ret_value = rtl8192_QueryBBReg(dev, rOFDM_PHYCounter2, bMaskDWord);\r
+       FalseAlmCnt->Cnt_Rate_Illegal = (ret_value&0xffff);\r
+       FalseAlmCnt->Cnt_Crc8_fail = ((ret_value&0xffff0000)>>16);\r
+       ret_value = rtl8192_QueryBBReg(dev, rOFDM_PHYCounter3, bMaskDWord);\r
+       FalseAlmCnt->Cnt_Mcs_fail = (ret_value&0xffff);\r
+\r
+       FalseAlmCnt->Cnt_Ofdm_fail = FalseAlmCnt->Cnt_Parity_Fail + FalseAlmCnt->Cnt_Rate_Illegal +\r
+                                                         FalseAlmCnt->Cnt_Crc8_fail + FalseAlmCnt->Cnt_Mcs_fail;\r
+\r
+       ret_value = rtl8192_QueryBBReg(dev, 0xc64, bMaskDWord); 
+       FalseAlmCnt->Cnt_Cck_fail = (ret_value&0xffff);\r
+       FalseAlmCnt->Cnt_all = (FalseAlmCnt->Cnt_Parity_Fail +\r
+                                               FalseAlmCnt->Cnt_Rate_Illegal +\r
+                                               FalseAlmCnt->Cnt_Crc8_fail +\r
+                                               FalseAlmCnt->Cnt_Mcs_fail +\r
+                                               FalseAlmCnt->Cnt_Cck_fail);     \r
+\r
+       RT_TRACE(COMP_DIG, "Cnt_Ofdm_fail = %d, Cnt_Cck_fail = %d, Cnt_all = %d\n", \r
+                               FalseAlmCnt->Cnt_Ofdm_fail, FalseAlmCnt->Cnt_Cck_fail , FalseAlmCnt->Cnt_all);          \r
+}\r
+\r
+#ifdef RTL8192SE\r
+static void dm_CtrlInitGainAPByFalseAlarm(struct net_device *dev)\r
+{\r
+       static u8               binitialized = false;\r
+\r
+       {\r
+               binitialized = false;\r
+               dm_digtable.Dig_Ext_Port_Stage = DIG_EXT_PORT_STAGE_MAX;\r
+               return;\r
+       }       \r
+}\r
+#endif\r
+\r
+static void dm_ctrl_initgain_byrssi(struct net_device *dev)\r
+{\r
+       \r
+       if (dm_digtable.dig_enable_flag == false)\r
+               return;\r
+\r
+       if(dm_digtable.dig_algorithm == DIG_ALGO_BY_FALSE_ALARM)\r
+               dm_ctrl_initgain_byrssi_by_fwfalse_alarm(dev);\r
+       else if(dm_digtable.dig_algorithm == DIG_ALGO_BY_RSSI)\r
+               dm_ctrl_initgain_byrssi_by_driverrssi(dev);\r
+#ifdef RTL8192SE\r
+       else if(dm_digtable.dig_algorithm == DIG_ALGO_BEFORE_CONNECT_BY_RSSI_AND_ALARM)\r
+               dm_CtrlInitGainBeforeConnectByRssiAndFalseAlarm(dev);\r
+       else if(dm_digtable.dig_algorithm == DIG_ALGO_BY_TOW_PORT)\r
+               dm_CtrlInitGainByTwoPort(dev);\r
+#endif\r
+       else\r
+               return;\r
+}\r
+\r
+#ifdef RTL8192SE\r
+static void dm_CtrlInitGainByTwoPort(struct net_device *dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       \r
+       if(rtllib_act_scanning(priv->rtllib,true) == true)\r
+               return;\r
+\r
+       if((priv->rtllib->state > RTLLIB_NOLINK) && (priv->rtllib->state < RTLLIB_LINKED))\r
+               dm_digtable.CurSTAConnectState = DIG_STA_BEFORE_CONNECT;\r
+       else if((priv->rtllib->state == RTLLIB_LINKED) ||(priv->rtllib->state == RTLLIB_LINKED_SCANNING))\r
+               dm_digtable.CurSTAConnectState = DIG_STA_CONNECT;\r
+       else\r
+               dm_digtable.CurSTAConnectState = DIG_STA_DISCONNECT;\r
+\r
+       dm_digtable.rssi_val = priv->undecorated_smoothed_pwdb; \r
+       \r
+       if(dm_digtable.CurSTAConnectState != DIG_STA_DISCONNECT)\r
+       {       \r
+               if(dm_digtable.Dig_TwoPort_Algorithm == DIG_TWO_PORT_ALGO_FALSE_ALARM)\r
+               {\r
+                       dm_digtable.Dig_TwoPort_Algorithm = DIG_TWO_PORT_ALGO_RSSI;\r
+                       priv->rtllib->SetFwCmdHandler(dev, FW_CMD_DIG_MODE_SS);\r
+               }\r
+       }       \r
+       \r
+       dm_FalseAlarmCounterStatistics(dev);\r
+       dm_initial_gain_STABeforeConnect(dev);  \r
+       dm_CtrlInitGainAPByFalseAlarm(dev);\r
+       \r
+       dm_digtable.PreSTAConnectState = dm_digtable.CurSTAConnectState;\r
+}\r
+#endif\r
+\r
+/*-----------------------------------------------------------------------------\r
+ * Function:   dm_CtrlInitGainBeforeConnectByRssiAndFalseAlarm()\r
+ *\r
+ * Overview:   Driver monitor RSSI and False Alarm to change initial gain.\r
+                       Only change initial gain during link in progress.\r
+ *\r
+ * Input:              IN      PADAPTER        pAdapter\r
+ *\r
+ * Output:             NONE\r
+ *\r
+ * Return:             NONE\r
+ *\r
+ * Revised History:\r
+ *     When            Who             Remark\r
+ *     03/04/2009      hpfan   Create Version 0.  \r
+ *\r
+ *---------------------------------------------------------------------------*/\r
\r
+#ifdef RTL8192SE\r
+static void dm_CtrlInitGainBeforeConnectByRssiAndFalseAlarm(struct net_device *dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+\r
+       if(rtllib_act_scanning(priv->rtllib,true) == true)\r
+               return;\r
+\r
+       if((priv->rtllib->state > RTLLIB_NOLINK) && (priv->rtllib->state < RTLLIB_LINKED))\r
+               dm_digtable.CurSTAConnectState = DIG_STA_BEFORE_CONNECT;\r
+       else if((priv->rtllib->state == RTLLIB_LINKED) ||(priv->rtllib->state == RTLLIB_LINKED_SCANNING))\r
+               dm_digtable.CurSTAConnectState = DIG_STA_CONNECT;\r
+       else\r
+               dm_digtable.CurSTAConnectState = DIG_STA_DISCONNECT;\r
+\r
+       if(dm_digtable.dbg_mode == DM_DBG_OFF)\r
+               dm_digtable.rssi_val = priv->undecorated_smoothed_pwdb;\r
+\r
+       dm_FalseAlarmCounterStatistics(dev);\r
+       dm_initial_gain_STABeforeConnect(dev);\r
+       dm_digtable.PreSTAConnectState = dm_digtable.CurSTAConnectState;\r
+\r
+}\r
+#endif\r
+static void dm_ctrl_initgain_byrssi_by_driverrssi(\r
+       struct net_device *dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       u8 i;\r
+       static u8       fw_dig=0;\r
+       \r
+       if (dm_digtable.dig_enable_flag == false)\r
+               return;\r
+\r
+       if(dm_digtable.dig_algorithm_switch)    
+               fw_dig = 0;\r
+       if(fw_dig <= 3) 
+       {
+               for(i=0; i<3; i++)\r
+                       rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x8);   
+               fw_dig++;\r
+               dm_digtable.dig_state = DM_STA_DIG_OFF; 
+       }\r
+               \r
+       if(priv->rtllib->state == RTLLIB_LINKED)\r
+               dm_digtable.CurSTAConnectState = DIG_STA_CONNECT;\r
+       else\r
+               dm_digtable.CurSTAConnectState = DIG_STA_DISCONNECT;\r
+\r
+\r
+       if(dm_digtable.dbg_mode == DM_DBG_OFF)\r
+               dm_digtable.rssi_val = priv->undecorated_smoothed_pwdb;\r
+       dm_initial_gain(dev);\r
+       dm_pd_th(dev);\r
+       dm_cs_ratio(dev);\r
+       if(dm_digtable.dig_algorithm_switch)\r
+               dm_digtable.dig_algorithm_switch = 0;\r
+       dm_digtable.PreSTAConnectState = dm_digtable.CurSTAConnectState;\r
+\r
+}      
+\r
+static void dm_ctrl_initgain_byrssi_by_fwfalse_alarm(\r
+       struct net_device *dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       static u32 reset_cnt = 0;\r
+       u8 i;\r
+       \r
+       if (dm_digtable.dig_enable_flag == false)\r
+               return;\r
+\r
+       if(dm_digtable.dig_algorithm_switch)\r
+       {\r
+               dm_digtable.dig_state = DM_STA_DIG_MAX;\r
+               for(i=0; i<3; i++)\r
+                       rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x1);   
+               dm_digtable.dig_algorithm_switch = 0;\r
+       }\r
+               \r
+       if (priv->rtllib->state != RTLLIB_LINKED)\r
+               return;\r
+\r
+       if ((priv->undecorated_smoothed_pwdb > dm_digtable.rssi_low_thresh) &&\r
+               (priv->undecorated_smoothed_pwdb < dm_digtable.rssi_high_thresh))\r
+       {\r
+               return;\r
+       }\r
+       if ((priv->undecorated_smoothed_pwdb <= dm_digtable.rssi_low_thresh))\r
+       {               \r
+               if (dm_digtable.dig_state == DM_STA_DIG_OFF && \r
+                       (priv->reset_count == reset_cnt))\r
+               {                       \r
+                       return;\r
+               }\r
+               else\r
+               {\r
+                       reset_cnt = priv->reset_count;\r
+               }\r
+               \r
+               dm_digtable.dig_highpwr_state = DM_STA_DIG_MAX;\r
+               dm_digtable.dig_state = DM_STA_DIG_OFF;\r
+\r
+               rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x8);   
+\r
+               write_nic_byte(dev, rOFDM0_XAAGCCore1, 0x17);\r
+               write_nic_byte(dev, rOFDM0_XBAGCCore1, 0x17);\r
+               write_nic_byte(dev, rOFDM0_XCAGCCore1, 0x17);\r
+               write_nic_byte(dev, rOFDM0_XDAGCCore1, 0x17);\r
+\r
+               if (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)\r
+               {\r
+                       #ifdef RTL8190P\r
+                       write_nic_byte(dev, rOFDM0_RxDetector1, 0x40);\r
+                       #else \r
+                               write_nic_byte(dev, (rOFDM0_XATxAFE+3), 0x00);\r
+                               #endif\r
+                       /*else if (priv->card_8192 == HARDWARE_TYPE_RTL8190P)\r
+                               write_nic_byte(pAdapter, rOFDM0_RxDetector1, 0x40);\r
+                       */\r
+                       \r
+                               \r
+               }\r
+               else\r
+                       write_nic_byte(dev, rOFDM0_RxDetector1, 0x42);\r
+\r
+               write_nic_byte(dev, 0xa0a, 0x08);\r
+               \r
+               return;\r
+               \r
+       }\r
+       \r
+       if ((priv->undecorated_smoothed_pwdb >= dm_digtable.rssi_high_thresh) )\r
+       {\r
+               u8 reset_flag = 0;\r
+               \r
+               if (dm_digtable.dig_state == DM_STA_DIG_ON && \r
+                       (priv->reset_count == reset_cnt))\r
+               {\r
+                       dm_ctrl_initgain_byrssi_highpwr(dev);\r
+                       return;\r
+               }\r
+               else\r
+               {\r
+                       if (priv->reset_count != reset_cnt)\r
+                               reset_flag = 1;\r
+\r
+                       reset_cnt = priv->reset_count;\r
+               }\r
+               \r
+               dm_digtable.dig_state = DM_STA_DIG_ON;\r
+               \r
+               if (reset_flag == 1)\r
+               {\r
+                       write_nic_byte(dev, rOFDM0_XAAGCCore1, 0x2c);\r
+                       write_nic_byte(dev, rOFDM0_XBAGCCore1, 0x2c);\r
+                       write_nic_byte(dev, rOFDM0_XCAGCCore1, 0x2c);\r
+                       write_nic_byte(dev, rOFDM0_XDAGCCore1, 0x2c);\r
+               }\r
+               else\r
+               {\r
+               write_nic_byte(dev, rOFDM0_XAAGCCore1, 0x20);\r
+               write_nic_byte(dev, rOFDM0_XBAGCCore1, 0x20);\r
+               write_nic_byte(dev, rOFDM0_XCAGCCore1, 0x20);\r
+               write_nic_byte(dev, rOFDM0_XDAGCCore1, 0x20);\r
+               }\r
+\r
+               if (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)\r
+               {\r
+                       #ifdef RTL8190P\r
+                       write_nic_byte(dev, rOFDM0_RxDetector1, 0x42);\r
+                       #else\r
+                               write_nic_byte(dev, (rOFDM0_XATxAFE+3), 0x20);\r
+                               #endif\r
+                       /*\r
+                       else if (priv->card_8192 == HARDWARE_TYPE_RTL8190P)\r
+                               write_nic_byte(dev, rOFDM0_RxDetector1, 0x42);\r
+                       */\r
+                       \r
+               }\r
+               else\r
+                       write_nic_byte(dev, rOFDM0_RxDetector1, 0x44);\r
+\r
+               write_nic_byte(dev, 0xa0a, 0xcd);\r
+\r
+               \r
+               rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x1);   
+               \r
+       }\r
+\r
+       dm_ctrl_initgain_byrssi_highpwr(dev);\r
+\r
+}      
+\r
+\r
+static void dm_ctrl_initgain_byrssi_highpwr(\r
+       struct net_device * dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       static u32 reset_cnt_highpwr = 0;\r
+       \r
+       if ((priv->undecorated_smoothed_pwdb > dm_digtable.rssi_high_power_lowthresh) &&\r
+               (priv->undecorated_smoothed_pwdb < dm_digtable.rssi_high_power_highthresh))\r
+       {\r
+               return;\r
+       }\r
+       \r
+       if (priv->undecorated_smoothed_pwdb >= dm_digtable.rssi_high_power_highthresh) \r
+       {\r
+               if (dm_digtable.dig_highpwr_state == DM_STA_DIG_ON && \r
+                       (priv->reset_count == reset_cnt_highpwr))\r
+                       return;\r
+               else\r
+                       dm_digtable.dig_highpwr_state = DM_STA_DIG_ON;\r
+\r
+               if (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)\r
+               {                       \r
+                       #ifdef RTL8190P\r
+                       write_nic_byte(dev, rOFDM0_RxDetector1, 0x41);\r
+                       #else\r
+                               write_nic_byte(dev, (rOFDM0_XATxAFE+3), 0x10);\r
+                               #endif\r
+                       \r
+                       /*else if (priv->card_8192 == HARDWARE_TYPE_RTL8190P)\r
+                               write_nic_byte(dev, rOFDM0_RxDetector1, 0x41);\r
+                       */\r
+\r
+               }\r
+               else\r
+                       write_nic_byte(dev, rOFDM0_RxDetector1, 0x43);\r
+       }\r
+       else\r
+       {\r
+               if (dm_digtable.dig_highpwr_state == DM_STA_DIG_OFF&& \r
+                       (priv->reset_count == reset_cnt_highpwr))               \r
+                       return;\r
+               else\r
+                       dm_digtable.dig_highpwr_state = DM_STA_DIG_OFF;\r
+               \r
+               if (priv->undecorated_smoothed_pwdb < dm_digtable.rssi_high_power_lowthresh &&\r
+                        priv->undecorated_smoothed_pwdb >= dm_digtable.rssi_high_thresh)\r
+               {\r
+                       if (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)\r
+                       {                               \r
+                               #ifdef RTL8190P\r
+                               write_nic_byte(dev, rOFDM0_RxDetector1, 0x42);\r
+                               #else\r
+                                       write_nic_byte(dev, (rOFDM0_XATxAFE+3), 0x20);\r
+                                       #endif\r
+                               /*else if (priv->card_8192 == HARDWARE_TYPE_RTL8190P)\r
+                                       write_nic_byte(dev, rOFDM0_RxDetector1, 0x42);\r
+                               */\r
+\r
+                       }\r
+                       else\r
+                               write_nic_byte(dev, rOFDM0_RxDetector1, 0x44);\r
+               }\r
+       }\r
+\r
+       reset_cnt_highpwr = priv->reset_count;\r
+\r
+}      
+\r
+\r
+static void dm_initial_gain(\r
+       struct net_device * dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       u8                                      initial_gain=0;\r
+       static u8                               initialized=0, force_write=0;\r
+       static u32                      reset_cnt=0;\r
+\r
+       if(dm_digtable.dig_algorithm_switch)\r
+       {\r
+               initialized = 0;\r
+               reset_cnt = 0;\r
+       }\r
+       \r
+       if(rtllib_act_scanning(priv->rtllib,true) == true)\r
+       {\r
+               force_write = 1;\r
+               return;\r
+       }\r
+       \r
+       if(dm_digtable.PreSTAConnectState == dm_digtable.CurSTAConnectState)\r
+       {\r
+               if(dm_digtable.CurSTAConnectState == DIG_STA_CONNECT)\r
+               {\r
+                       if((dm_digtable.rssi_val+10-dm_digtable.backoff_val) > dm_digtable.rx_gain_range_max)\r
+                               dm_digtable.cur_ig_value = dm_digtable.rx_gain_range_max;\r
+                       else if((dm_digtable.rssi_val+10-dm_digtable.backoff_val) < dm_digtable.rx_gain_range_min)\r
+                               dm_digtable.cur_ig_value = dm_digtable.rx_gain_range_min;\r
+                       else\r
+                               dm_digtable.cur_ig_value = dm_digtable.rssi_val+10-dm_digtable.backoff_val;\r
+               }\r
+               else            
+               {\r
+                       if(dm_digtable.cur_ig_value == 0)\r
+                               dm_digtable.cur_ig_value = priv->DefaultInitialGain[0];\r
+                       else\r
+                               dm_digtable.cur_ig_value = dm_digtable.pre_ig_value;\r
+               }\r
+       }\r
+       else    
+       {\r
+               dm_digtable.cur_ig_value = priv->DefaultInitialGain[0];\r
+               dm_digtable.pre_ig_value = 0;\r
+       }\r
+\r
+       if(priv->reset_count != reset_cnt)\r
+       {\r
+               force_write = 1;\r
+               reset_cnt = priv->reset_count;\r
+       }\r
+       \r
+       if(dm_digtable.pre_ig_value != read_nic_byte(dev, rOFDM0_XAAGCCore1))\r
+               force_write = 1;\r
+       \r
+       {\r
+               if((dm_digtable.pre_ig_value != dm_digtable.cur_ig_value) \r
+                       || !initialized || force_write)\r
+               {\r
+                       initial_gain = (u8)dm_digtable.cur_ig_value;\r
+                       write_nic_byte(dev, rOFDM0_XAAGCCore1, initial_gain);\r
+                       write_nic_byte(dev, rOFDM0_XBAGCCore1, initial_gain);\r
+                       write_nic_byte(dev, rOFDM0_XCAGCCore1, initial_gain);\r
+                       write_nic_byte(dev, rOFDM0_XDAGCCore1, initial_gain);\r
+                       dm_digtable.pre_ig_value = dm_digtable.cur_ig_value;\r
+                       initialized = 1;\r
+                       force_write = 0;\r
+               }\r
+       }\r
+}\r
+\r
+void dm_initial_gain_STABeforeConnect(\r
+       struct net_device * dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       u8                      initial_gain=0;\r
+       static u8               initialized=0, force_write=0;\r
+\r
+       RT_TRACE(COMP_DIG, "PreSTAConnectState = %x, CurSTAConnectState = %x\n", \r
+                               dm_digtable.PreSTAConnectState, dm_digtable.CurSTAConnectState);\r
+\r
+\r
+       if((dm_digtable.PreSTAConnectState == dm_digtable.CurSTAConnectState) ||\r
+               (dm_digtable.CurSTAConnectState == DIG_STA_BEFORE_CONNECT))\r
+       {\r
+               if(dm_digtable.CurSTAConnectState == DIG_STA_BEFORE_CONNECT)\r
+               {\r
+                       if(priv->rtllib->eRFPowerState != eRfOn)\r
+                               return;\r
+                       \r
+                       if(dm_digtable.Backoff_Enable_Flag == true)\r
+                       {\r
+                               if(priv->FalseAlmCnt.Cnt_all > dm_digtable.FAHighThresh)\r
+                               {\r
+                                       if((dm_digtable.backoff_val -6) < dm_digtable.BackoffVal_range_min)\r
+                                               dm_digtable.backoff_val = dm_digtable.BackoffVal_range_min;\r
+                                       else\r
+                                               dm_digtable.backoff_val -= 6; \r
+                               }       \r
+                               else if(priv->FalseAlmCnt.Cnt_all < dm_digtable.FALowThresh)\r
+                               {\r
+                                       if((dm_digtable.backoff_val+6) > dm_digtable.BackoffVal_range_max)\r
+                                               dm_digtable.backoff_val = dm_digtable.BackoffVal_range_max;\r
+                                       else\r
+                                               dm_digtable.backoff_val +=6;\r
+                               }\r
+                       }\r
+                       else\r
+                               dm_digtable.backoff_val =DM_DIG_BACKOFF;\r
+               \r
+                       if((dm_digtable.rssi_val+10-dm_digtable.backoff_val) > dm_digtable.rx_gain_range_max)\r
+                               dm_digtable.cur_ig_value = dm_digtable.rx_gain_range_max;\r
+                       else if((dm_digtable.rssi_val+10-dm_digtable.backoff_val) < dm_digtable.rx_gain_range_min)\r
+                               dm_digtable.cur_ig_value = dm_digtable.rx_gain_range_min;\r
+                       else\r
+                               dm_digtable.cur_ig_value = dm_digtable.rssi_val+10-dm_digtable.backoff_val;\r
+\r
+                       if(priv->FalseAlmCnt.Cnt_all > 10000)\r
+                               dm_digtable.cur_ig_value = (dm_digtable.cur_ig_value>0x33)?dm_digtable.cur_ig_value:0x33;\r
+\r
+                       if(priv->FalseAlmCnt.Cnt_all > 16000)\r
+                               dm_digtable.cur_ig_value = dm_digtable.rx_gain_range_max;\r
+\r
+               }\r
+               else 
+               {\r
+                       return; 
+               }\r
+       }\r
+       else    
+       {               \r
+               dm_digtable.Dig_Ext_Port_Stage = DIG_EXT_PORT_STAGE_MAX;\r
+               priv->rtllib->SetFwCmdHandler(dev, FW_CMD_DIG_ENABLE);\r
+\r
+               dm_digtable.backoff_val = DM_DIG_BACKOFF;\r
+               dm_digtable.cur_ig_value = priv->DefaultInitialGain[0];\r
+               dm_digtable.pre_ig_value = 0;\r
+               return;\r
+       }\r
+               \r
+       if(dm_digtable.pre_ig_value != rtl8192_QueryBBReg(dev, rOFDM0_XAAGCCore1, bMaskByte0))\r
+               force_write = 1;\r
+       \r
+       if((dm_digtable.pre_ig_value != dm_digtable.cur_ig_value) || !initialized || force_write)\r
+       {\r
+               priv->rtllib->SetFwCmdHandler(dev, FW_CMD_DIG_DISABLE); \r
+\r
+               initial_gain = (u8)dm_digtable.cur_ig_value;\r
+\r
+               rtl8192_setBBreg(dev, rOFDM0_XAAGCCore1, bMaskByte0, initial_gain);\r
+               rtl8192_setBBreg(dev, rOFDM0_XBAGCCore1, bMaskByte0, initial_gain);\r
+               dm_digtable.pre_ig_value = dm_digtable.cur_ig_value;\r
+               initialized = 1;\r
+               force_write = 0;\r
+       }\r
+       \r
+       RT_TRACE(COMP_DIG, "CurIGValue = 0x%x, pre_ig_value = 0x%x, backoff_val = %d\n", \r
+                               dm_digtable.cur_ig_value, dm_digtable.pre_ig_value, dm_digtable.backoff_val);\r
+\r
+}\r
+\r
+static void dm_pd_th(  \r
+       struct net_device * dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       static u8                               initialized=0, force_write=0;\r
+       static u32                      reset_cnt = 0;\r
+\r
+       if(dm_digtable.dig_algorithm_switch)\r
+       {\r
+               initialized = 0;\r
+               reset_cnt = 0;\r
+       }\r
+       \r
+       if(dm_digtable.PreSTAConnectState == dm_digtable.CurSTAConnectState)\r
+       {\r
+               if(dm_digtable.CurSTAConnectState == DIG_STA_CONNECT)\r
+               {\r
+                       if (dm_digtable.rssi_val >= dm_digtable.rssi_high_power_highthresh)\r
+                               dm_digtable.curpd_thstate = DIG_PD_AT_HIGH_POWER;\r
+                       else if ((dm_digtable.rssi_val <= dm_digtable.rssi_low_thresh))\r
+                               dm_digtable.curpd_thstate = DIG_PD_AT_LOW_POWER;\r
+                       else if ((dm_digtable.rssi_val >= dm_digtable.rssi_high_thresh) &&\r
+                                       (dm_digtable.rssi_val < dm_digtable.rssi_high_power_lowthresh))\r
+                               dm_digtable.curpd_thstate = DIG_PD_AT_NORMAL_POWER;\r
+                       else\r
+                               dm_digtable.curpd_thstate = dm_digtable.prepd_thstate;\r
+               }\r
+               else\r
+               {\r
+                       dm_digtable.curpd_thstate = DIG_PD_AT_LOW_POWER;\r
+               }\r
+       }\r
+       else    
+       {\r
+               dm_digtable.curpd_thstate = DIG_PD_AT_LOW_POWER;\r
+       }\r
+\r
+       if(priv->reset_count != reset_cnt)\r
+       {\r
+               force_write = 1;\r
+               reset_cnt = priv->reset_count;\r
+       }\r
+               \r
+       {\r
+               if((dm_digtable.prepd_thstate != dm_digtable.curpd_thstate) || \r
+                       (initialized<=3) || force_write)\r
+               {\r
+                       if(dm_digtable.curpd_thstate == DIG_PD_AT_LOW_POWER)\r
+                       {\r
+                               if (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)\r
+                               {\r
+                                       #ifdef RTL8190P\r
+                                       write_nic_byte(dev, rOFDM0_RxDetector1, 0x40);\r
+                                       #else\r
+                                               write_nic_byte(dev, (rOFDM0_XATxAFE+3), 0x00);\r
+                                               #endif\r
+                                       /*else if (priv->card_8192 == HARDWARE_TYPE_RTL8190P)\r
+                                               write_nic_byte(dev, rOFDM0_RxDetector1, 0x40);\r
+                                       */\r
+                               }\r
+                               else\r
+                                       write_nic_byte(dev, rOFDM0_RxDetector1, 0x42);\r
+                       }\r
+                       else if(dm_digtable.curpd_thstate == DIG_PD_AT_NORMAL_POWER)\r
+                       {\r
+                               if (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)\r
+                               {\r
+                                       #ifdef RTL8190P\r
+                                       write_nic_byte(dev, rOFDM0_RxDetector1, 0x42);  \r
+                                       #else\r
+                                               write_nic_byte(dev, (rOFDM0_XATxAFE+3), 0x20);\r
+                                               #endif\r
+                                       /*else if (priv->card_8192 == HARDWARE_TYPE_RTL8190P)\r
+                                               write_nic_byte(dev, rOFDM0_RxDetector1, 0x42);          \r
+                                       */\r
+                               }\r
+                               else\r
+                                       write_nic_byte(dev, rOFDM0_RxDetector1, 0x44);\r
+                       }\r
+                       else if(dm_digtable.curpd_thstate == DIG_PD_AT_HIGH_POWER)\r
+                       {\r
+                               if (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)\r
+                               {                       \r
+                                       #ifdef RTL8190P\r
+                                       write_nic_byte(dev, rOFDM0_RxDetector1, 0x41);\r
+                                       #else\r
+                                               write_nic_byte(dev, (rOFDM0_XATxAFE+3), 0x10);\r
+                                               #endif\r
+                                       /*else if (priv->card_8192 == HARDWARE_TYPE_RTL8190P)\r
+                                               write_nic_byte(dev, rOFDM0_RxDetector1, 0x41);\r
+                                       */\r
+                               }\r
+                               else\r
+                                       write_nic_byte(dev, rOFDM0_RxDetector1, 0x43);\r
+                       }       \r
+                       dm_digtable.prepd_thstate = dm_digtable.curpd_thstate;\r
+                       if(initialized <= 3)\r
+                               initialized++;\r
+                       force_write = 0;\r
+               }\r
+       }\r
+}\r
+\r
+static void dm_cs_ratio(\r
+       struct net_device * dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       static u8                               initialized=0,force_write=0;\r
+       static u32                      reset_cnt = 0;\r
+\r
+       if(dm_digtable.dig_algorithm_switch)\r
+       {\r
+               initialized = 0;\r
+               reset_cnt = 0;\r
+       }\r
+       \r
+       if(dm_digtable.PreSTAConnectState == dm_digtable.CurSTAConnectState)\r
+       {\r
+               if(dm_digtable.CurSTAConnectState == DIG_STA_CONNECT)\r
+               {\r
+                       if ((dm_digtable.rssi_val <= dm_digtable.rssi_low_thresh))\r
+                               dm_digtable.curcs_ratio_state = DIG_CS_RATIO_LOWER;\r
+                       else if ((dm_digtable.rssi_val >= dm_digtable.rssi_high_thresh) )\r
+                               dm_digtable.curcs_ratio_state = DIG_CS_RATIO_HIGHER;\r
+                       else\r
+                               dm_digtable.curcs_ratio_state = dm_digtable.precs_ratio_state;\r
+               }\r
+               else\r
+               {\r
+                       dm_digtable.curcs_ratio_state = DIG_CS_RATIO_LOWER;\r
+               }\r
+       }\r
+       else    
+       {\r
+               dm_digtable.curcs_ratio_state = DIG_CS_RATIO_LOWER;\r
+       }\r
+\r
+       if(priv->reset_count != reset_cnt)\r
+       {\r
+               force_write = 1;\r
+               reset_cnt = priv->reset_count;\r
+       }\r
+\r
+       \r
+       {\r
+               if((dm_digtable.precs_ratio_state != dm_digtable.curcs_ratio_state) || \r
+                       !initialized || force_write)\r
+               {\r
+                       if(dm_digtable.curcs_ratio_state == DIG_CS_RATIO_LOWER)\r
+                       {\r
+                               write_nic_byte(dev, 0xa0a, 0x08);\r
+                       }\r
+                       else if(dm_digtable.curcs_ratio_state == DIG_CS_RATIO_HIGHER)\r
+                       {\r
+                               write_nic_byte(dev, 0xa0a, 0xcd);\r
+                       }       \r
+                       dm_digtable.precs_ratio_state = dm_digtable.curcs_ratio_state;\r
+                       initialized = 1;\r
+                       force_write = 0;\r
+               }\r
+       }\r
+}\r
+\r
+extern void dm_init_edca_turbo(struct net_device * dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+\r
+       priv->bcurrent_turbo_EDCA = false;\r
+       priv->rtllib->bis_any_nonbepkts = false;\r
+       priv->bis_cur_rdlstate = false;\r
+}      
+\r
+#if 1\r
+static void dm_check_edca_turbo(\r
+       struct net_device * dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       PRT_HIGH_THROUGHPUT     pHTInfo = priv->rtllib->pHTInfo;\r
+       \r
+       static unsigned long                    lastTxOkCnt = 0;\r
+       static unsigned long                    lastRxOkCnt = 0;\r
+       unsigned long                           curTxOkCnt = 0;\r
+       unsigned long                           curRxOkCnt = 0; \r
+\r
+       if(priv->rtllib->iw_mode == IW_MODE_ADHOC)\r
+       {\r
+               goto dm_CheckEdcaTurbo_EXIT;\r
+       }\r
+       if(priv->rtllib->state != RTLLIB_LINKED)\r
+       {\r
+               goto dm_CheckEdcaTurbo_EXIT;\r
+       }\r
+       if(priv->rtllib->pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_EDCA_TURBO)\r
+       {\r
+               goto dm_CheckEdcaTurbo_EXIT;\r
+       }\r
+       \r
+       {\r
+               u8* peername[11] = {"unknown", "realtek_90", "realtek_92se","broadcom", "ralink", "atheros", "cisco", "marvell", "92u_softap", "self_softap"};\r
+               static int wb_tmp = 0;\r
+               if (wb_tmp == 0){\r
+                       printk("%s():iot peer is %s, bssid:"MAC_FMT"\n",__FUNCTION__,peername[pHTInfo->IOTPeer], MAC_ARG(priv->rtllib->current_network.bssid));\r
+                       wb_tmp = 1;\r
+               }\r
+       }\r
+       if(!priv->rtllib->bis_any_nonbepkts)\r
+       {\r
+               curTxOkCnt = priv->stats.txbytesunicast - lastTxOkCnt;\r
+               curRxOkCnt = priv->stats.rxbytesunicast - lastRxOkCnt;\r
+               if(pHTInfo->IOTAction & HT_IOT_ACT_EDCA_BIAS_ON_RX)\r
+               {\r
+                       if(curTxOkCnt > 4*curRxOkCnt)\r
+                       {
+                               if(priv->bis_cur_rdlstate || !priv->bcurrent_turbo_EDCA)\r
+                               {\r
+                                       write_nic_dword(dev, EDCAPARA_BE, edca_setting_UL[pHTInfo->IOTPeer]);\r
+                                       priv->bis_cur_rdlstate = false;\r
+                               }\r
+                       }\r
+                       else\r
+                       {
+                               if(!priv->bis_cur_rdlstate || !priv->bcurrent_turbo_EDCA)\r
+                               {\r
+                                       if(priv->rtllib->mode == WIRELESS_MODE_G)\r
+                                               write_nic_dword(dev, EDCAPARA_BE, edca_setting_DL_GMode[pHTInfo->IOTPeer]);\r
+                                       else\r
+                                               write_nic_dword(dev, EDCAPARA_BE, edca_setting_DL[pHTInfo->IOTPeer]);\r
+                                       priv->bis_cur_rdlstate = true;\r
+                               }\r
+                       }\r
+                       priv->bcurrent_turbo_EDCA = true;\r
+               }\r
+               else\r
+               {\r
+               if(curRxOkCnt > 4*curTxOkCnt)\r
+               {\r
+                       if(!priv->bis_cur_rdlstate || !priv->bcurrent_turbo_EDCA)\r
+                       {\r
+                               if(priv->rtllib->mode == WIRELESS_MODE_G)\r
+                                       write_nic_dword(dev, EDCAPARA_BE, edca_setting_DL_GMode[pHTInfo->IOTPeer]);\r
+                               else\r
+                               write_nic_dword(dev, EDCAPARA_BE, edca_setting_DL[pHTInfo->IOTPeer]);\r
+                               priv->bis_cur_rdlstate = true;\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       if(priv->bis_cur_rdlstate || !priv->bcurrent_turbo_EDCA)\r
+                       {\r
+                               write_nic_dword(dev, EDCAPARA_BE, edca_setting_UL[pHTInfo->IOTPeer]);\r
+                               priv->bis_cur_rdlstate = false;\r
+                       }\r
+\r
+               }\r
+\r
+               priv->bcurrent_turbo_EDCA = true;\r
+       }\r
+       }\r
+       else\r
+       {\r
+                if(priv->bcurrent_turbo_EDCA)\r
+               {\r
+\r
+                       {\r
+                               u8              u1bAIFS;\r
+                               u32             u4bAcParam;\r
+                               struct rtllib_qos_parameters *qos_parameters = &priv->rtllib->current_network.qos_data.parameters;\r
+                               u8 mode = priv->rtllib->mode;\r
+\r
+                               dm_init_edca_turbo(dev);\r
+                               u1bAIFS = qos_parameters->aifs[0] * ((mode&(IEEE_G|IEEE_N_24G)) ?9:20) + aSifsTime; \r
+                               u4bAcParam = ((((u32)(qos_parameters->tx_op_limit[0]))<< AC_PARAM_TXOP_LIMIT_OFFSET)|\r
+                                       (((u32)(qos_parameters->cw_max[0]))<< AC_PARAM_ECW_MAX_OFFSET)|\r
+                                       (((u32)(qos_parameters->cw_min[0]))<< AC_PARAM_ECW_MIN_OFFSET)|\r
+                                       ((u32)u1bAIFS << AC_PARAM_AIFS_OFFSET));\r
+                               write_nic_dword(dev, EDCAPARA_BE,  u4bAcParam);\r
+                       \r
+                               {\r
+\r
+                                       PACI_AIFSN      pAciAifsn = (PACI_AIFSN)&(qos_parameters->aifs[0]);\r
+                                       u8              AcmCtrl = read_nic_byte( dev, AcmHwCtrl );\r
+                                       if( pAciAifsn->f.ACM )\r
+                                       { 
+                                               AcmCtrl |= AcmHw_BeqEn;\r
+                                       }\r
+                                       else\r
+                                       { 
+                                               AcmCtrl &= (~AcmHw_BeqEn);\r
+                                       }\r
+\r
+                                       RT_TRACE( COMP_QOS,"SetHwReg8190pci(): [HW_VAR_ACM_CTRL] Write 0x%X\n", AcmCtrl ) ;\r
+                                       write_nic_byte(dev, AcmHwCtrl, AcmCtrl );\r
+                               }\r
+                       }\r
+                       priv->bcurrent_turbo_EDCA = false;\r
+               }\r
+       }\r
+       \r
+               \r
+dm_CheckEdcaTurbo_EXIT:\r
+       priv->rtllib->bis_any_nonbepkts = false;\r
+       lastTxOkCnt = priv->stats.txbytesunicast;\r
+       lastRxOkCnt = priv->stats.rxbytesunicast;\r
+}      
+#endif\r
+\r
+extern void DM_CTSToSelfSetting(struct net_device * dev,u32 DM_Type, u32 DM_Value)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv((struct net_device *)dev);\r
+       \r
+       if (DM_Type == 0)       
+       {\r
+               if(DM_Value > 1)\r
+                       DM_Value = 1;\r
+               priv->rtllib->bCTSToSelfEnable = (bool)DM_Value;\r
+       }\r
+       else if(DM_Type == 1) 
+       {\r
+               if(DM_Value >= 50)\r
+                       DM_Value = 50;\r
+               priv->rtllib->CTSToSelfTH = (u8)DM_Value;\r
+       }\r
+}\r
+\r
+static void dm_init_ctstoself(struct net_device * dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv((struct net_device *)dev);\r
+       \r
+       priv->rtllib->bCTSToSelfEnable = true;\r
+       priv->rtllib->CTSToSelfTH = CTSToSelfTHVal;\r
+}\r
+\r
+static void dm_ctstoself(struct net_device *dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv((struct net_device *)dev);\r
+       PRT_HIGH_THROUGHPUT     pHTInfo = priv->rtllib->pHTInfo;\r
+       static unsigned long                            lastTxOkCnt = 0;\r
+       static unsigned long                            lastRxOkCnt = 0;\r
+       unsigned long                                           curTxOkCnt = 0;\r
+       unsigned long                                           curRxOkCnt = 0;\r
+\r
+       if(priv->rtllib->bCTSToSelfEnable != true)\r
+       {\r
+               pHTInfo->IOTAction &= ~HT_IOT_ACT_FORCED_CTS2SELF;\r
+               return;\r
+       }\r
+       if(pHTInfo->IOTPeer == HT_IOT_PEER_BROADCOM)\r
+       {\r
+               curTxOkCnt = priv->stats.txbytesunicast - lastTxOkCnt;\r
+               curRxOkCnt = priv->stats.rxbytesunicast - lastRxOkCnt;\r
+               if(curRxOkCnt > 4*curTxOkCnt)   
+               {\r
+                       pHTInfo->IOTAction &= ~HT_IOT_ACT_FORCED_CTS2SELF;\r
+               }\r
+               else    
+               {\r
+               #if 1\r
+                       pHTInfo->IOTAction |= HT_IOT_ACT_FORCED_CTS2SELF;\r
+               #else\r
+                       if(priv->undecorated_smoothed_pwdb < priv->rtllib->CTSToSelfTH) 
+                       {\r
+                               pHTInfo->IOTAction &= ~HT_IOT_ACT_FORCED_CTS2SELF;\r
+                       }\r
+                       else if(priv->undecorated_smoothed_pwdb >= (priv->rtllib->CTSToSelfTH+5))       
+                       {\r
+                               pHTInfo->IOTAction |= HT_IOT_ACT_FORCED_CTS2SELF;\r
+                       }\r
+               #endif\r
+               }\r
+\r
+               lastTxOkCnt = priv->stats.txbytesunicast;\r
+               lastRxOkCnt = priv->stats.rxbytesunicast;\r
+       }\r
+}\r
+\r
+\r
+static void \r
+dm_Init_WA_Broadcom_IOT(struct net_device * dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv((struct net_device *)dev);\r
+       PRT_HIGH_THROUGHPUT     pHTInfo = priv->rtllib->pHTInfo;\r
+       \r
+       pHTInfo->bWAIotBroadcom = false;\r
+       pHTInfo->WAIotTH = WAIotTHVal;\r
+}\r
+\r
+#ifdef RTL8192SE\r
+static void\r
+dm_WA_Broadcom_IOT(struct net_device * dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv((struct net_device *)dev);\r
+       PRT_HIGH_THROUGHPUT     pHTInfo = priv->rtllib->pHTInfo;\r
+       u8                                      update=0;\r
+       static enum rtllib_state connectState = RTLLIB_NOLINK;\r
+\r
+       if( (pHTInfo->bWAIotBroadcom != true) ||\r
+               (priv->rtllib->mode == WIRELESS_MODE_B) ||\r
+               (pHTInfo->bCurBW40MHz))\r
+       {\r
+               if(pHTInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom)\r
+               {       \r
+                       pHTInfo->IOTAction &= ~HT_IOT_ACT_WA_IOT_Broadcom;\r
+                       update = 1;\r
+                       printk(" dm_WA_Broadcom_IOT(), disable HT_IOT_ACT_WA_IOT_Broadcom\n");\r
+               }\r
+               else\r
+                       return;\r
+       }\r
+\r
+       if(connectState == RTLLIB_LINKED && priv->rtllib->state == RTLLIB_LINKED)       \r
+       {\r
+               if(pHTInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom)\r
+               {       \r
+                       pHTInfo->IOTAction &= ~HT_IOT_ACT_WA_IOT_Broadcom;\r
+                       update = 1;\r
+                       pHTInfo->bWAIotBroadcom = false;\r
+                       printk("dm_WA_Broadcom_IOT(), from connect to disconnected, disable HT_IOT_ACT_WA_IOT_Broadcom\n");\r
+               }\r
+       }\r
+       connectState = priv->rtllib->state;\r
+               \r
+       if(!update && pHTInfo->IOTPeer == HT_IOT_PEER_BROADCOM)\r
+       {\r
+               if(priv->undecorated_smoothed_pwdb < pHTInfo->WAIotTH)\r
+               {\r
+                       if(pHTInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom)\r
+                       {       \r
+                               pHTInfo->IOTAction &= ~HT_IOT_ACT_WA_IOT_Broadcom;\r
+                               update = 1;\r
+                               printk("dm_WA_Broadcom_IOT() ==> WA_IOT enable cck rates\n");\r
+                       }\r
+               }\r
+               else if(priv->undecorated_smoothed_pwdb >= (priv->rtllib->CTSToSelfTH+5))       
+               {\r
+                       if((pHTInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom) == 0)\r
+                       {\r
+                               pHTInfo->IOTAction |= HT_IOT_ACT_WA_IOT_Broadcom;\r
+                               update = 1;\r
+                               printk("dm_WA_Broadcom_IOT() ==> WA_IOT disable cck rates\n");\r
+                       }\r
+               }\r
+       }\r
+\r
+       if(update)\r
+       {\r
+#ifdef _RTL8192_EXT_PATCH_\r
+               if(priv->rtllib->bUseRAMask){\r
+                       printk("=============>%s():bUseRAMask is true\n",__FUNCTION__);\r
+                       priv->rtllib->UpdateHalRAMaskHandler(\r
+                                                                               dev,\r
+                                                                               false,\r
+                                                                               0,\r
+                                                                               NULL,\r
+                                                                               priv->rtllib->mode,\r
+                                                                               0);\r
+               }\r
+               else{\r
+                       printk("=============>%s():bUseRAMask is false\n",__FUNCTION__);\r
+                       priv->ops->update_ratr_table(dev, priv->rtllib->dot11HTOperationalRateSet, NULL);\r
+               }\r
+#else\r
+               if(!priv->rtllib->bUseRAMask){\r
+                       priv->ops->update_ratr_table(dev, priv->rtllib->dot11HTOperationalRateSet, NULL);\r
+               }\r
+#endif\r
+               priv->rtllib->SetHwRegHandler( dev, HW_VAR_BASIC_RATE, (u8*)(&priv->basic_rate));
+       }\r
+}\r
+#endif\r
+\r
+\r
+#if 0\r
+extern void dm_rf_operation_test_callback(unsigned long dev)\r
+{\r
+       u8 erfpath;\r
+               \r
+               \r
+       for(erfpath=0; erfpath<4; erfpath++) \r
+       {\r
+               udelay(100); \r
+       } \r
+\r
+       {\r
+       }\r
+       \r
+       {\r
+#if 0\r
+               for(i=0; i<50; i++) \r
+               { \r
+                       PHY_SetRFReg(dev, RF90_PATH_A, 0x02, bMask12Bits, 0x4d);\r
+                       PHY_SetRFReg(dev, RF90_PATH_A, 0x02, bMask12Bits, 0x4f);\r
+                       PHY_SetRFReg(dev, RF90_PATH_C, 0x02, bMask12Bits, 0x4d);\r
+                       PHY_SetRFReg(dev, RF90_PATH_C, 0x02, bMask12Bits, 0x4f);\r
+\r
+#if 0\r
+                       PHY_QueryRFReg(dev, RF90_PATH_A, 0x02, bMask12Bits);\r
+                       PHY_QueryRFReg(dev, RF90_PATH_A, 0x02, bMask12Bits);\r
+                       PHY_QueryRFReg(dev, RF90_PATH_A, 0x12, bMask12Bits);\r
+                       PHY_QueryRFReg(dev, RF90_PATH_A, 0x12, bMask12Bits);\r
+                       PHY_QueryRFReg(dev, RF90_PATH_A, 0x21, bMask12Bits);\r
+                       PHY_QueryRFReg(dev, RF90_PATH_A, 0x21, bMask12Bits);\r
+#endif\r
+               } \r
+#endif\r
+       }\r
+       \r
+}      
+#endif\r
+\r
+#if 0\r
+static void dm_check_rfctrl_gpio(struct net_device * dev)\r
+{\r
+#ifdef RTL8192E\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+#endif\r
+\r
+       \r
+#ifdef RTL8190P\r
+       return;\r
+#endif\r
+#ifdef RTL8192U\r
+       return;\r
+#endif\r
+#ifdef RTL8192E\r
+       queue_delayed_work_rsl(priv->priv_wq,&priv->gpio_change_rf_wq,0);\r
+#endif\r
+\r
+}      
+\r
+#endif\r
+static void    dm_check_pbc_gpio(struct net_device *dev)\r
+{\r
+#ifdef RTL8192U\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       u8 tmp1byte;\r
+\r
+       \r
+       tmp1byte = read_nic_byte(dev,GPI);\r
+       if(tmp1byte == 0xff)\r
+       return;\r
+\r
+       if (tmp1byte&BIT6 || tmp1byte&BIT0)\r
+       {\r
+               RT_TRACE(COMP_IO, "CheckPbcGPIO - PBC is pressed\n");\r
+               priv->bpbc_pressed = true;\r
+       }\r
+#endif\r
+       \r
+}\r
+\r
+#ifdef RTL8192E \r
+\r
+extern void    dm_CheckRfCtrlGPIO(void *data)\r
+{\r
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20))\r
+       struct r8192_priv *priv = container_of_dwork_rsl(data,struct r8192_priv,gpio_change_rf_wq);\r
+       struct net_device *dev = priv->rtllib->dev;\r
+#else\r
+       struct r8192_priv *priv = rtllib_priv((struct net_device *)data);\r
+       struct net_device *dev = priv->rtllib->dev;\r
+#endif\r
+       u8 tmp1byte;\r
+       RT_RF_POWER_STATE       eRfPowerStateToSet;\r
+       bool bActuallySet = false;\r
+\r
+       char *argv[3];\r
+       static char *RadioPowerPath = "/etc/acpi/events/RadioPower.sh";\r
+       static char *envp[] = {"HOME=/", "TERM=linux", "PATH=/usr/bin:/bin", NULL};\r
+\r
+       bActuallySet=false;\r
+\r
+       if((priv->up_first_time == 1) || (priv->being_init_adapter))\r
+       {\r
+               return;\r
+       }\r
+\r
+\r
+\r
+       {\r
+               tmp1byte = read_nic_byte(dev,GPI);\r
+\r
+               eRfPowerStateToSet = (tmp1byte&BIT1) ?  eRfOn : eRfOff;\r
+\r
+               if( (priv->bHwRadioOff == true) && (eRfPowerStateToSet == eRfOn))\r
+               {\r
+                       RT_TRACE(COMP_RF, "gpiochangeRF  - HW Radio ON\n");\r
+                       printk("gpiochangeRF  - HW Radio ON\n");\r
+                       priv->bHwRadioOff = false;\r
+                       bActuallySet = true;\r
+               }\r
+               else if ( (priv->bHwRadioOff == false) && (eRfPowerStateToSet == eRfOff))\r
+               {\r
+                       RT_TRACE(COMP_RF, "gpiochangeRF  - HW Radio OFF\n");\r
+                       printk("gpiochangeRF  - HW Radio OFF\n");\r
+                       priv->bHwRadioOff = true;\r
+                       bActuallySet = true;\r
+               }\r
+\r
+               if(bActuallySet)\r
+               {\r
+                       mdelay(1000); 
+                       priv->bHwRfOffAction = 1;\r
+                       MgntActSet_RF_State(dev, eRfPowerStateToSet, RF_CHANGE_BY_HW);\r
+                       {\r
+                               if(priv->bHwRadioOff == true)\r
+                                       argv[1] = "RFOFF";\r
+                               else\r
+                                       argv[1] = "RFON";\r
+\r
+                               argv[0] = RadioPowerPath;\r
+                               argv[2] = NULL;\r
+                               call_usermodehelper(RadioPowerPath,argv,envp,1);\r
+                       }\r
+\r
+               }\r
+#if 0 
+               else\r
+               {\r
+                       msleep(2000);\r
+               }\r
+#endif\r
+\r
+       }\r
+\r
+}      
+#elif defined RTL8192SE\r
+extern void Power_DomainInit92SE(struct net_device *dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       u8                              tmpU1b;\r
+       u16                             tmpU2b;\r
+\r
+       \r
+       \r
+       priv->PwrDomainProtect = true;\r
+\r
+       tmpU1b = read_nic_byte(dev, (SYS_CLKR + 1));\r
+       if(tmpU1b & BIT7)\r
+       {\r
+               tmpU1b &= ~(BIT6 | BIT7);\r
+               if(!HalSetSysClk8192SE(dev, tmpU1b)){\r
+                       priv->PwrDomainProtect = false;\r
+                       return; 
+       }\r
+       }\r
+       \r
+       write_nic_byte(dev, AFE_PLL_CTRL, 0x0);\r
+       write_nic_byte(dev, LDOA15_CTRL, 0x34);
+       \r
+#if 0\r
+       tmpU2b = read_nic_word(dev, SYS_CLKR);\r
+       if (tmpU2b & BIT15)     
+       {\r
+               tmpU2b &= ~(BIT14|BIT15);\r
+               RT_TRACE(COMP_INIT, DBG_LOUD, ("Return to HW CTRL\n"));\r
+               write_nic_word(dev, SYS_CLKR, tmpU2b);\r
+       }\r
+       udelay(200);\r
+#endif\r
+\r
+       tmpU1b = read_nic_byte(dev, SYS_FUNC_EN+1);\r
+       if(priv->rtllib->RfOffReason & (RF_CHANGE_BY_IPS | RF_CHANGE_BY_HW))\r
+       {\r
+               tmpU1b &= 0xFB;\r
+       }\r
+       else\r
+       {\r
+       tmpU1b &= 0x73;\r
+       }\r
+       \r
+       write_nic_byte(dev, SYS_FUNC_EN+1, tmpU1b);\r
+       udelay(1000);\r
+       \r
+       write_nic_byte(dev, CMDR, 0);\r
+       write_nic_byte(dev, TCR, 0);\r
+\r
+       tmpU1b = read_nic_byte(dev, 0x562);\r
+       tmpU1b |= 0x08;\r
+       write_nic_byte(dev, 0x562, tmpU1b);\r
+       tmpU1b &= ~(BIT3);\r
+       write_nic_byte(dev, 0x562, tmpU1b);\r
+\r
+       tmpU1b = read_nic_byte(dev, AFE_XTAL_CTRL);     \r
+       write_nic_byte(dev, AFE_XTAL_CTRL, (tmpU1b|0x01));\r
+       udelay(1500);   \r
+       tmpU1b = read_nic_byte(dev, AFE_XTAL_CTRL+1);   \r
+       write_nic_byte(dev, AFE_XTAL_CTRL+1, (tmpU1b&0xfb));\r
+\r
+\r
+       tmpU1b = read_nic_byte(dev, AFE_MISC);  \r
+       write_nic_byte(dev, AFE_MISC, (tmpU1b|BIT0));\r
+       udelay(1000);\r
+\r
+       tmpU1b = read_nic_byte(dev, AFE_MISC);  \r
+       write_nic_byte(dev, AFE_MISC, (tmpU1b|0x02));\r
+       udelay(1000);\r
+       \r
+       tmpU1b = read_nic_byte(dev, LDOA15_CTRL);       \r
+       write_nic_byte(dev, LDOA15_CTRL, (tmpU1b|BIT0));\r
+\r
+       tmpU2b = read_nic_word(dev, SYS_ISO_CTRL);      \r
+       write_nic_word(dev, SYS_ISO_CTRL, (tmpU2b|BIT11));\r
+\r
+\r
+       tmpU2b = read_nic_word(dev, SYS_FUNC_EN);\r
+#ifdef _RTL8192_EXT_PATCH_\r
+       write_nic_word(dev, SYS_FUNC_EN, tmpU2b |= BIT13);\r
+#else\r
+       write_nic_word(dev, SYS_FUNC_EN, (tmpU2b |BIT13));\r
+#endif\r
+\r
+       write_nic_byte(dev, SYS_ISO_CTRL+1, 0x68);\r
+\r
+       tmpU1b = read_nic_byte(dev, AFE_PLL_CTRL);      \r
+       write_nic_byte(dev, AFE_PLL_CTRL, (tmpU1b|BIT0|BIT4));\r
+       tmpU1b = read_nic_byte(dev, AFE_PLL_CTRL+1);    \r
+       write_nic_byte(dev, AFE_PLL_CTRL+1, (tmpU1b|BIT0));\r
+       udelay(1000);\r
+\r
+       write_nic_byte(dev, SYS_ISO_CTRL, 0xA6);\r
+\r
+       tmpU2b = read_nic_word(dev, SYS_CLKR);  \r
+       write_nic_word(dev, SYS_CLKR, (tmpU2b|BIT12|BIT11));\r
+\r
+       tmpU2b = read_nic_word(dev, SYS_FUNC_EN);       \r
+       write_nic_word(dev, SYS_FUNC_EN, (tmpU2b|BIT11));\r
+       write_nic_word(dev, SYS_FUNC_EN, (tmpU2b|BIT11|BIT15));\r
+\r
+        tmpU2b = read_nic_word(dev, SYS_CLKR); \r
+       write_nic_word(dev, SYS_CLKR, (tmpU2b&(~BIT2)));\r
+       \r
+       tmpU1b = read_nic_byte(dev, (SYS_CLKR + 1));\r
+       tmpU1b = ((tmpU1b | BIT7) & (~BIT6));\r
+       if(!HalSetSysClk8192SE(dev, tmpU1b))\r
+       {\r
+               priv->PwrDomainProtect = false;\r
+               return; 
+       }\r
+#if 0\r
+       tmpU2b = read_nic_word(dev, SYS_CLKR);  \r
+       write_nic_word(dev, SYS_CLKR, ((tmpU2b|BIT15)&(~BIT14)));\r
+#endif\r
+\r
+       write_nic_word(dev, CMDR, 0x37FC);      \r
+\r
+       gen_RefreshLedState(dev);\r
+\r
+       priv->PwrDomainProtect = false;\r
+\r
+}      
+\r
+void   SET_RTL8192SE_RF_HALT(struct net_device *dev)                                                   \r
+{                                                                                                                                      \r
+       u8              u1bTmp;                                                                                         \r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       \r
+       if(priv->rtllib->RfOffReason == RF_CHANGE_BY_IPS && priv->LedStrategy == SW_LED_MODE8)  \r
+       {\r
+               SET_RTL8192SE_RF_SLEEP(dev);\r
+               return;\r
+       }\r
+       \r
+       u1bTmp = read_nic_byte(dev, LDOV12D_CTRL);              \r
+       u1bTmp |= BIT0;                                                                                                 \r
+       write_nic_byte(dev, LDOV12D_CTRL, u1bTmp);              \r
+       write_nic_byte(dev, SPS1_CTRL, 0x0);                            \r
+       write_nic_byte(dev, TXPAUSE, 0xFF);                             \r
+       write_nic_word(dev, CMDR, 0x57FC);                              \r
+       udelay(100);                                                                                                    \r
+       write_nic_word(dev, CMDR, 0x77FC);                              \r
+       write_nic_byte(dev, PHY_CCA, 0x0);                              \r
+       udelay(10);                                                                                                     \r
+       write_nic_word(dev, CMDR, 0x37FC);                              \r
+       udelay(10);                                                                                                     \r
+       write_nic_word(dev, CMDR, 0x77FC);                              \r
+       udelay(10);                                                                                                     \r
+       write_nic_word(dev, CMDR, 0x57FC);                              \r
+       write_nic_word(dev, CMDR, 0x0000);                              \r
+       u1bTmp = read_nic_byte(dev, (SYS_CLKR + 1));            \r
+       if(u1bTmp & BIT7)                                                                                               \r
+       {                                                                                                                               \r
+               u1bTmp &= ~(BIT6 | BIT7);                                                                       \r
+               if(!HalSetSysClk8192SE(dev, u1bTmp))                                    \r
+                       return;                                                                                                 \r
+       }       \r
+       if(priv->rtllib->RfOffReason==RF_CHANGE_BY_IPS )\r
+       {\r
+               write_nic_byte(dev, 0x03, 0xF9);\r
+       }\r
+       else            
+       {\r
+               write_nic_byte(dev, 0x03, 0x71);\r
+       }\r
+       write_nic_byte(dev, SYS_CLKR+1, 0x70);                                  \r
+       write_nic_byte(dev, AFE_PLL_CTRL+1, 0x68);                                      \r
+       write_nic_byte(dev, AFE_PLL_CTRL, 0x00);                                        \r
+       write_nic_byte(dev, LDOA15_CTRL, 0x34);
+       write_nic_byte(dev, AFE_XTAL_CTRL, 0x0E);                                       \r
+                                                                                                                       \r
+}\r
+\r
+extern void dm_CheckRfCtrlGPIO(void *data)\r
+{\r
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20))\r
+       struct r8192_priv *priv = container_of_dwork_rsl(data,struct r8192_priv,gpio_change_rf_wq);\r
+       struct net_device *dev = priv->rtllib->dev;\r
+#else\r
+       struct net_device *dev = (struct net_device *)data;\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+#endif\r
+\r
+       u8                                      u1Tmp = 0;\r
+       RT_RF_POWER_STATE       eRfPowerStateToSet, CurRfState;\r
+       bool                                    bActuallySet = false;\r
+       PRT_POWER_SAVE_CONTROL          pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl));
+       unsigned long flag = 0;\r
+       bool                            turnonbypowerdomain = false;\r
+\r
+       char *argv[3];\r
+       static char *RadioPowerPath = "/etc/acpi/events/RadioPower.sh";\r
+       static char *envp[] = {"HOME=/", "TERM=linux", "PATH=/usr/bin:/bin", NULL};\r
+       u8 count = 0;\r
+\r
+       if((priv->up_first_time == 1) || (priv->being_init_adapter))
+       {\r
+               ;
+               return;\r
+       }\r
+\r
+       if(priv->ResetProgress == RESET_TYPE_SILENT)\r
+       {\r
+               RT_TRACE((COMP_INIT | COMP_POWER | COMP_RF), "GPIOChangeRFWorkItemCallBack(): Silent Reseting!!!!!!!\n");\r
+               return;\r
+       }\r
+\r
+\r
+       if (pPSC->bSwRfProcessing) \r
+       {\r
+               RT_TRACE(COMP_SCAN, "GPIOChangeRFWorkItemCallBack(): Rf is in switching state.\n");\r
+               return;\r
+       }\r
+\r
+       RT_TRACE(COMP_RF, "GPIOChangeRFWorkItemCallBack() ---------> \n");\r
+\r
+       spin_lock_irqsave(&priv->rf_ps_lock,flag);\r
+#if 1\r
+       if(priv->RFChangeInProgress)\r
+       {\r
+               spin_unlock_irqrestore(&priv->rf_ps_lock,flag);\r
+               RT_TRACE(COMP_RF, "GPIOChangeRFWorkItemCallBack(): RF Change in progress! \n");\r
+               return;\r
+       }\r
+       else\r
+       {\r
+               priv->RFChangeInProgress = true;\r
+               spin_unlock_irqrestore(&priv->rf_ps_lock,flag);\r
+       }\r
+#endif\r
+       CurRfState = priv->rtllib->eRFPowerState;\r
+#ifdef CONFIG_ASPM_OR_D3\r
+       if((pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_ASPM) && RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_ASPM))\r
+       {\r
+               RT_DISABLE_ASPM(dev);\r
+               RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_ASPM);\r
+       }\r
+       else if((pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_PCI_D3) && RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_PCI_D3))\r
+       {\r
+#ifdef TODO            \r
+               RT_LEAVE_D3(dev, false);\r
+               RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_PCI_D3);\r
+#endif         \r
+       }\r
+\r
+#endif\r
+       if(RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC))\r
+       {\r
+               Power_DomainInit92SE(dev);\r
+               turnonbypowerdomain = true;\r
+       }\r
+       while(u1Tmp == 0){\r
+               if(priv->BluetoothCoexist == 0) {\r
+                       write_nic_byte(dev, MAC_PINMUX_CFG, (GPIOMUX_EN | GPIOSEL_GPIO));\r
+               } else {\r
+                       write_nic_byte(dev, MAC_PINMUX_CFG, 0xa);\r
+                       printk("!!!!!!!!!!!!!!!%s:write 0x%x to 0x2F1\n", __FUNCTION__, 0xa);\r
+               }\r
+\r
+               u1Tmp = read_nic_byte(dev, GPIO_IO_SEL);\r
+               if(count >= 100)\r
+                       break;\r
+               count++;\r
+       }\r
+       u1Tmp &= HAL_8192S_HW_GPIO_OFF_MASK;\r
+       write_nic_byte(dev, GPIO_IO_SEL, u1Tmp);\r
+\r
+       mdelay(10);\r
+\r
+       if(priv->pwrdown)\r
+       {\r
+               u1Tmp = read_nic_byte(dev, 0x06);\r
+               printk( "GPIO 04h BIT6=%02x\n", u1Tmp);\r
+               eRfPowerStateToSet = (u1Tmp & BIT6) ? eRfOn: eRfOff;            \r
+       }\r
+       else\r
+       {\r
+       u1Tmp = read_nic_byte(dev, GPIO_IN);\r
+       eRfPowerStateToSet = (u1Tmp & HAL_8192S_HW_GPIO_OFF_BIT) ? eRfOn : eRfOff;\r
+       }\r
+\r
+       if(priv->bResetInProgress)
+       {\r
+               spin_lock_irqsave(&priv->rf_ps_lock,flag);\r
+               priv->RFChangeInProgress = false;\r
+               spin_unlock_irqrestore(&priv->rf_ps_lock,flag);\r
+               return;\r
+       }\r
+\r
+       if( (priv->bHwRadioOff == true) && \\r
+          (((eRfPowerStateToSet == eRfOn)&&(priv->sw_radio_on == true))\r
+#ifdef CONFIG_RTLWIFI_DEBUGFS      \r
+           ||priv->debug->hw_holding\r
+#endif     \r
+           ))\r
+       {\r
+               RT_TRACE(COMP_RF, "GPIOChangeRF  - HW Radio ON, RF ON\n");\r
+               printk("GPIOChangeRF  - HW Radio ON, RF ON\n");\r
+                eRfPowerStateToSet = eRfOn;\r
+               bActuallySet = true;\r
+       }\r
+       else if ( (priv->bHwRadioOff == false) && ((eRfPowerStateToSet == eRfOff) || (priv->sw_radio_on == false)))\r
+       {\r
+               RT_TRACE(COMP_RF, "GPIOChangeRF  - HW Radio OFF\n");\r
+               printk("GPIOChangeRF  - HW Radio OFF\n");\r
+                eRfPowerStateToSet = eRfOff;\r
+               bActuallySet = true;\r
+       }\r
+\r
+       if(bActuallySet)\r
+       {\r
+               priv->bHwRfOffAction = 1;\r
+#ifdef CONFIG_ASPM_OR_D3\r
+               if(eRfPowerStateToSet == eRfOn)\r
+               {\r
+                       if((pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_ASPM) && RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_ASPM))\r
+                       {\r
+                               RT_DISABLE_ASPM(dev);\r
+                               RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_ASPM);\r
+                       }\r
+#ifdef TODO                    \r
+                       else if((pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_PCI_D3) && RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_PCI_D3))\r
+                       {\r
+                               RT_LEAVE_D3(dev, false);\r
+                               RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_PCI_D3);\r
+                       }\r
+#endif                 \r
+               }\r
+#endif\r
+               spin_lock_irqsave(&priv->rf_ps_lock,flag);\r
+               priv->RFChangeInProgress = false;\r
+               spin_unlock_irqrestore(&priv->rf_ps_lock,flag);\r
+               MgntActSet_RF_State(dev, eRfPowerStateToSet, RF_CHANGE_BY_HW);\r
+\r
+               {\r
+                       if(priv->bHwRadioOff == true)\r
+                               argv[1] = "RFOFF";\r
+                       else\r
+                               argv[1] = "RFON";\r
+\r
+                       argv[0] = RadioPowerPath;\r
+                       argv[2] = NULL;\r
+                       call_usermodehelper(RadioPowerPath,argv,envp,1);\r
+               }\r
+\r
+               if(eRfPowerStateToSet == eRfOff)\r
+               {\r
+                       if(priv->pwrdown){\r
+                               MgntActSet_RF_State(dev, eRfOff, RF_CHANGE_BY_HW);\r
+\r
+                               write_nic_byte(dev, SYS_FUNC_EN+1, 0x31);
+                       }\r
+#ifdef CONFIG_ASPM_OR_D3\r
+                       if(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_ASPM)\r
+                       {\r
+                               RT_ENABLE_ASPM(dev);\r
+                               RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_ASPM);\r
+                       }\r
+#ifdef TODO                    \r
+                       else if(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_PCI_D3)\r
+                       {\r
+                               RT_ENTER_D3(dev, false);\r
+                               RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_PCI_D3);\r
+                       }\r
+#endif                 \r
+#endif\r
+               }\r
+       }\r
+       else if(eRfPowerStateToSet == eRfOff || CurRfState == eRfOff || priv->bDriverIsGoingToUnload)\r
+       {\r
+\r
+               if(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_HALT_NIC && turnonbypowerdomain)\r
+               { 
+                       PHY_SetRtl8192seRfHalt(dev);\r
+                       RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC);\r
+               }\r
+#ifdef CONFIG_ASPM_OR_D3\r
+               if(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_ASPM)\r
+               {\r
+                       RT_ENABLE_ASPM(dev);\r
+                       RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_ASPM);\r
+               }\r
+#ifdef TODO            \r
+               else if(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_PCI_D3)\r
+               {\r
+                       RT_ENTER_D3(dev, false);\r
+                       RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_PCI_D3);\r
+               }\r
+#endif         \r
+#endif\r
+               spin_lock_irqsave(&priv->rf_ps_lock,flag);\r
+               priv->RFChangeInProgress = false;\r
+               spin_unlock_irqrestore(&priv->rf_ps_lock,flag);\r
+       }\r
+       else\r
+       {\r
+               spin_lock_irqsave(&priv->rf_ps_lock,flag);\r
+               priv->RFChangeInProgress = false;\r
+               spin_unlock_irqrestore(&priv->rf_ps_lock,flag);\r
+       }\r
+       RT_TRACE(COMP_RF, "GPIOChangeRFWorkItemCallBack() <--------- \n");\r
+}\r
+#endif\r
+void   dm_rf_pathcheck_workitemcallback(void *data)\r
+{\r
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20))\r
+       struct r8192_priv *priv = container_of_dwork_rsl(data,struct r8192_priv,rfpath_check_wq);\r
+       struct net_device *dev =priv->rtllib->dev;\r
+#else\r
+       struct net_device *dev = (struct net_device *)data;\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+#endif\r
+       u8 rfpath = 0, i;\r
+       \r
+               \r
+       rfpath = read_nic_byte(dev, 0xc04);\r
+       \r
+       for (i = 0; i < RF90_PATH_MAX; i++)\r
+       {\r
+               if (rfpath & (0x01<<i))         \r
+                       priv->brfpath_rxenable[i] = 1;\r
+               else\r
+                       priv->brfpath_rxenable[i] = 0;\r
+       }\r
+       if(!DM_RxPathSelTable.Enable)\r
+               return;\r
+\r
+       dm_rxpath_sel_byrssi(dev);\r
+}      
+\r
+static void dm_init_rxpath_selection(struct net_device * dev)\r
+{\r
+       u8 i;\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       DM_RxPathSelTable.Enable = 1;   
+       DM_RxPathSelTable.SS_TH_low = RxPathSelection_SS_TH_low;\r
+       DM_RxPathSelTable.diff_TH = RxPathSelection_diff_TH;\r
+       if(priv->CustomerID == RT_CID_819x_Netcore)\r
+               DM_RxPathSelTable.cck_method = CCK_Rx_Version_2;\r
+       else    \r
+               DM_RxPathSelTable.cck_method = CCK_Rx_Version_1;\r
+       DM_RxPathSelTable.DbgMode = DM_DBG_OFF;\r
+       DM_RxPathSelTable.disabledRF = 0;\r
+       for(i=0; i<4; i++)\r
+       {\r
+               DM_RxPathSelTable.rf_rssi[i] = 50;\r
+               DM_RxPathSelTable.cck_pwdb_sta[i] = -64;\r
+               DM_RxPathSelTable.rf_enable_rssi_th[i] = 100;\r
+       }\r
+}\r
+\r
+static void dm_rxpath_sel_byrssi(struct net_device * dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       u8                              i, max_rssi_index=0, min_rssi_index=0, sec_rssi_index=0, rf_num=0;\r
+       u8                              tmp_max_rssi=0, tmp_min_rssi=0, tmp_sec_rssi=0;\r
+       u8                              cck_default_Rx=0x2;     
+       u8                              cck_optional_Rx=0x3;
+       long                            tmp_cck_max_pwdb=0, tmp_cck_min_pwdb=0, tmp_cck_sec_pwdb=0;\r
+       u8                              cck_rx_ver2_max_index=0, cck_rx_ver2_min_index=0, cck_rx_ver2_sec_index=0;\r
+       u8                              cur_rf_rssi;\r
+       long                            cur_cck_pwdb;\r
+       static u8                       disabled_rf_cnt=0, cck_Rx_Path_initialized=0;\r
+       u8                              update_cck_rx_path;\r
+\r
+       if(priv->rf_type != RF_2T4R)\r
+               return;\r
+\r
+       if(!cck_Rx_Path_initialized)\r
+       {\r
+               DM_RxPathSelTable.cck_Rx_path = (read_nic_byte(dev, 0xa07)&0xf);\r
+               cck_Rx_Path_initialized = 1;\r
+       }\r
+       \r
+       DM_RxPathSelTable.disabledRF = 0xf;\r
+       DM_RxPathSelTable.disabledRF &=~ (read_nic_byte(dev, 0xc04));\r
+\r
+       if(priv->rtllib->mode == WIRELESS_MODE_B)\r
+       {\r
+               DM_RxPathSelTable.cck_method = CCK_Rx_Version_2;        
+       }\r
+\r
+       for (i=0; i<RF90_PATH_MAX; i++)\r
+       {\r
+               if(!DM_RxPathSelTable.DbgMode)\r
+                       DM_RxPathSelTable.rf_rssi[i] = priv->stats.rx_rssi_percentage[i];\r
+\r
+               if(priv->brfpath_rxenable[i])\r
+               {\r
+                       rf_num++;\r
+                       cur_rf_rssi = DM_RxPathSelTable.rf_rssi[i];\r
+                       \r
+                       if(rf_num == 1) 
+                       {       
+                               max_rssi_index = min_rssi_index = sec_rssi_index = i;\r
+                               tmp_max_rssi = tmp_min_rssi = tmp_sec_rssi = cur_rf_rssi;\r
+                       }\r
+                       else if(rf_num == 2)\r
+                       {       
+                               if(cur_rf_rssi >= tmp_max_rssi)\r
+                               {\r
+                                       tmp_max_rssi = cur_rf_rssi;\r
+                                       max_rssi_index = i;\r
+                               }\r
+                               else\r
+                               {\r
+                                       tmp_sec_rssi = tmp_min_rssi = cur_rf_rssi;\r
+                                       sec_rssi_index = min_rssi_index = i;                                    \r
+                               }\r
+                       }\r
+                       else\r
+                       {\r
+                               if(cur_rf_rssi > tmp_max_rssi)\r
+                               {\r
+                                       tmp_sec_rssi = tmp_max_rssi;\r
+                                       sec_rssi_index = max_rssi_index;\r
+                                       tmp_max_rssi = cur_rf_rssi;\r
+                                       max_rssi_index = i;\r
+                               }\r
+                               else if(cur_rf_rssi == tmp_max_rssi)\r
+                               {       
+                                       tmp_sec_rssi = cur_rf_rssi;\r
+                                       sec_rssi_index = i;\r
+                               }\r
+                               else if((cur_rf_rssi < tmp_max_rssi) &&(cur_rf_rssi > tmp_sec_rssi))\r
+                               {\r
+                                       tmp_sec_rssi = cur_rf_rssi;\r
+                                       sec_rssi_index = i;\r
+                               }\r
+                               else if(cur_rf_rssi == tmp_sec_rssi)\r
+                               {\r
+                                       if(tmp_sec_rssi == tmp_min_rssi)\r
+                                       {       
+                                               tmp_sec_rssi = cur_rf_rssi;\r
+                                               sec_rssi_index = i;\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                       }\r
+                               }\r
+                               else if((cur_rf_rssi < tmp_sec_rssi) && (cur_rf_rssi > tmp_min_rssi))\r
+                               {\r
+                               }\r
+                               else if(cur_rf_rssi == tmp_min_rssi)\r
+                               {\r
+                                       if(tmp_sec_rssi == tmp_min_rssi)\r
+                                       {       
+                                               tmp_min_rssi = cur_rf_rssi;\r
+                                               min_rssi_index = i;\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                       }\r
+                               }\r
+                               else if(cur_rf_rssi < tmp_min_rssi)\r
+                               {\r
+                                       tmp_min_rssi = cur_rf_rssi;\r
+                                       min_rssi_index = i;\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       rf_num = 0;\r
+       if(DM_RxPathSelTable.cck_method == CCK_Rx_Version_2)\r
+       {\r
+               for (i=0; i<RF90_PATH_MAX; i++)\r
+               {\r
+                       if(priv->brfpath_rxenable[i])\r
+                       {\r
+                               rf_num++;\r
+                               cur_cck_pwdb =  DM_RxPathSelTable.cck_pwdb_sta[i];\r
+                               \r
+                               if(rf_num == 1) 
+                               {       
+                                       cck_rx_ver2_max_index = cck_rx_ver2_min_index = cck_rx_ver2_sec_index = i;\r
+                                       tmp_cck_max_pwdb = tmp_cck_min_pwdb = tmp_cck_sec_pwdb = cur_cck_pwdb;\r
+                               }\r
+                               else if(rf_num == 2)\r
+                               {       
+                                       if(cur_cck_pwdb >= tmp_cck_max_pwdb)\r
+                                       {\r
+                                               tmp_cck_max_pwdb = cur_cck_pwdb;\r
+                                               cck_rx_ver2_max_index = i;\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               tmp_cck_sec_pwdb = tmp_cck_min_pwdb = cur_cck_pwdb;\r
+                                               cck_rx_ver2_sec_index = cck_rx_ver2_min_index = i;                                      \r
+                                       }\r
+                               }\r
+                               else\r
+                               {\r
+                                       if(cur_cck_pwdb > tmp_cck_max_pwdb)\r
+                                       {\r
+                                               tmp_cck_sec_pwdb = tmp_cck_max_pwdb;\r
+                                               cck_rx_ver2_sec_index = cck_rx_ver2_max_index;\r
+                                               tmp_cck_max_pwdb = cur_cck_pwdb;\r
+                                               cck_rx_ver2_max_index = i;\r
+                                       }\r
+                                       else if(cur_cck_pwdb == tmp_cck_max_pwdb)\r
+                                       {       
+                                               tmp_cck_sec_pwdb = cur_cck_pwdb;\r
+                                               cck_rx_ver2_sec_index = i;\r
+                                       }\r
+                                       else if((cur_cck_pwdb < tmp_cck_max_pwdb) &&(cur_cck_pwdb > tmp_cck_sec_pwdb))\r
+                                       {\r
+                                               tmp_cck_sec_pwdb = cur_cck_pwdb;\r
+                                               cck_rx_ver2_sec_index = i;\r
+                                       }\r
+                                       else if(cur_cck_pwdb == tmp_cck_sec_pwdb)\r
+                                       {\r
+                                               if(tmp_cck_sec_pwdb == tmp_cck_min_pwdb)\r
+                                               {       
+                                                       tmp_cck_sec_pwdb = cur_cck_pwdb;\r
+                                                       cck_rx_ver2_sec_index = i;\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                               }\r
+                                       }\r
+                                       else if((cur_cck_pwdb < tmp_cck_sec_pwdb) && (cur_cck_pwdb > tmp_cck_min_pwdb))\r
+                                       {\r
+                                       }\r
+                                       else if(cur_cck_pwdb == tmp_cck_min_pwdb)\r
+                                       {\r
+                                               if(tmp_cck_sec_pwdb == tmp_cck_min_pwdb)\r
+                                               {       
+                                                       tmp_cck_min_pwdb = cur_cck_pwdb;\r
+                                                       cck_rx_ver2_min_index = i;\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                               }\r
+                                       }\r
+                                       else if(cur_cck_pwdb < tmp_cck_min_pwdb)\r
+                                       {\r
+                                               tmp_cck_min_pwdb = cur_cck_pwdb;\r
+                                               cck_rx_ver2_min_index = i;\r
+                                       }\r
+                               }\r
+                       \r
+                       }\r
+               }\r
+       }\r
+\r
+\r
+       update_cck_rx_path = 0;\r
+       if(DM_RxPathSelTable.cck_method == CCK_Rx_Version_2)\r
+       {\r
+               cck_default_Rx = cck_rx_ver2_max_index;\r
+               cck_optional_Rx = cck_rx_ver2_sec_index;\r
+               if(tmp_cck_max_pwdb != -64)\r
+                       update_cck_rx_path = 1;\r
+       }\r
+\r
+       if(tmp_min_rssi < DM_RxPathSelTable.SS_TH_low && disabled_rf_cnt < 2)\r
+       {\r
+               if((tmp_max_rssi - tmp_min_rssi) >= DM_RxPathSelTable.diff_TH)\r
+               {\r
+                       DM_RxPathSelTable.rf_enable_rssi_th[min_rssi_index] = tmp_max_rssi+5;\r
+                       rtl8192_setBBreg(dev, rOFDM0_TRxPathEnable, 0x1<<min_rssi_index, 0x0);  
+                       rtl8192_setBBreg(dev, rOFDM1_TRxPathEnable, 0x1<<min_rssi_index, 0x0);  
+                       disabled_rf_cnt++;\r
+               }\r
+               if(DM_RxPathSelTable.cck_method == CCK_Rx_Version_1)\r
+               {\r
+                       cck_default_Rx = max_rssi_index;\r
+                       cck_optional_Rx = sec_rssi_index;\r
+                       if(tmp_max_rssi)\r
+                               update_cck_rx_path = 1;\r
+               }\r
+       }\r
+\r
+       if(update_cck_rx_path)\r
+       {\r
+               DM_RxPathSelTable.cck_Rx_path = (cck_default_Rx<<2)|(cck_optional_Rx);\r
+               rtl8192_setBBreg(dev, rCCK0_AFESetting, 0x0f000000, DM_RxPathSelTable.cck_Rx_path);\r
+       }\r
+       \r
+       if(DM_RxPathSelTable.disabledRF)\r
+       {\r
+               for(i=0; i<4; i++)\r
+               {\r
+                       if((DM_RxPathSelTable.disabledRF>>i) & 0x1)     
+                       {\r
+                               if(tmp_max_rssi >= DM_RxPathSelTable.rf_enable_rssi_th[i])\r
+                               {\r
+                                       rtl8192_setBBreg(dev, rOFDM0_TRxPathEnable, 0x1<<i, 0x1);       
+                                       rtl8192_setBBreg(dev, rOFDM1_TRxPathEnable, 0x1<<i, 0x1);       
+                                       DM_RxPathSelTable.rf_enable_rssi_th[i] = 100;\r
+                                       disabled_rf_cnt--;\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+}\r
+\r
+static void    dm_check_rx_path_selection(struct net_device *dev)\r
+{      \r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       queue_delayed_work_rsl(priv->priv_wq,&priv->rfpath_check_wq,0);\r
+}      
+\r
+\r
+static void dm_init_fsync (struct net_device *dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+\r
+       priv->rtllib->fsync_time_interval = 500;\r
+       priv->rtllib->fsync_rate_bitmap = 0x0f000800;\r
+       priv->rtllib->fsync_rssi_threshold = 30;\r
+#ifdef RTL8190P\r
+       priv->rtllib->bfsync_enable = true;\r
+#elif defined RTL8192E || defined RTL8192SE\r
+       priv->rtllib->bfsync_enable = false;\r
+#endif\r
+       priv->rtllib->fsync_multiple_timeinterval = 3;\r
+       priv->rtllib->fsync_firstdiff_ratethreshold= 100;\r
+       priv->rtllib->fsync_seconddiff_ratethreshold= 200;\r
+       priv->rtllib->fsync_state = Default_Fsync;\r
+\r
+#ifdef RTL8192SE\r
+       priv->framesyncMonitor = 0;     
+#elif defined RTL8192E || defined RTL8190P\r
+       priv->framesyncMonitor = 1;     
+#endif\r
+\r
+       setup_timer(&priv->fsync_timer, dm_fsync_timer_callback,(unsigned long) dev);\r
+}\r
+\r
+\r
+static void dm_deInit_fsync(struct net_device *dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       del_timer_sync(&priv->fsync_timer);\r
+}\r
+\r
+extern void dm_fsync_timer_callback(unsigned long data)\r
+{\r
+       struct net_device *dev = (struct net_device *)data;\r
+       struct r8192_priv *priv = rtllib_priv((struct net_device *)data);\r
+       u32 rate_index, rate_count = 0, rate_count_diff=0;\r
+       bool            bSwitchFromCountDiff = false;\r
+       bool            bDoubleTimeInterval = false;\r
+       \r
+       if(     priv->rtllib->state == RTLLIB_LINKED && \r
+               priv->rtllib->bfsync_enable &&\r
+               (priv->rtllib->pHTInfo->IOTAction & HT_IOT_ACT_CDD_FSYNC))
+       {       \r
+               u32 rate_bitmap;\r
+               for(rate_index = 0; rate_index <= 27; rate_index++)\r
+               {\r
+                       rate_bitmap  = 1 << rate_index;\r
+                       if(priv->rtllib->fsync_rate_bitmap &  rate_bitmap)\r
+                               rate_count+= priv->stats.received_rate_histogram[1][rate_index];\r
+               }       \r
+\r
+               if(rate_count < priv->rate_record)\r
+                       rate_count_diff = 0xffffffff - rate_count + priv->rate_record;\r
+               else    \r
+                       rate_count_diff = rate_count - priv->rate_record;\r
+               if(rate_count_diff < priv->rateCountDiffRecord)\r
+               {\r
+                       \r
+                       u32 DiffNum = priv->rateCountDiffRecord - rate_count_diff;\r
+                       if(DiffNum >= priv->rtllib->fsync_seconddiff_ratethreshold)\r
+                               priv->ContiuneDiffCount++;\r
+                       else\r
+                               priv->ContiuneDiffCount = 0;    \r
+                       \r
+                       if(priv->ContiuneDiffCount >=2)\r
+                       {\r
+                               bSwitchFromCountDiff = true;\r
+                               priv->ContiuneDiffCount = 0;                                    \r
+                       }                               \r
+               }       \r
+               else\r
+               {\r
+                       priv->ContiuneDiffCount = 0;\r
+               }       \r
+\r
+               if(rate_count_diff <= priv->rtllib->fsync_firstdiff_ratethreshold)\r
+               {\r
+                       bSwitchFromCountDiff = true;\r
+                       priv->ContiuneDiffCount = 0;\r
+               }       \r
+               priv->rate_record = rate_count;\r
+               priv->rateCountDiffRecord = rate_count_diff;\r
+               RT_TRACE(COMP_HALDM, "rateRecord %d rateCount %d, rateCountdiff %d bSwitchFsync %d\n", priv->rate_record, rate_count, rate_count_diff , priv->bswitch_fsync);\r
+               if(priv->undecorated_smoothed_pwdb > priv->rtllib->fsync_rssi_threshold && bSwitchFromCountDiff)\r
+               {\r
+                       bDoubleTimeInterval = true;\r
+                       priv->bswitch_fsync = !priv->bswitch_fsync;\r
+                       if(priv->bswitch_fsync)\r
+                       {               \r
+                       #ifdef RTL8190P\r
+                               write_nic_byte(dev,0xC36, 0x00);\r
+#elif defined RTL8192E\r
+                               write_nic_byte(dev,0xC36, 0x1c);\r
+                       #endif\r
+                               write_nic_byte(dev, 0xC3e, 0x90);\r
+                       }       \r
+                       else\r
+                       {\r
+                       #ifdef RTL8190P\r
+                               write_nic_byte(dev, 0xC36, 0x40);\r
+                       #else\r
+                               write_nic_byte(dev, 0xC36, 0x5c);\r
+                       #endif\r
+                               write_nic_byte(dev, 0xC3e, 0x96);\r
+                       }       \r
+               }\r
+               else if(priv->undecorated_smoothed_pwdb <= priv->rtllib->fsync_rssi_threshold)\r
+               {\r
+                       if(priv->bswitch_fsync)\r
+                       {\r
+                               priv->bswitch_fsync  = false;           \r
+                       #ifdef RTL8190P\r
+                               write_nic_byte(dev, 0xC36, 0x40);\r
+#elif defined RTL8192E\r
+                               write_nic_byte(dev, 0xC36, 0x5c);\r
+                       #endif\r
+                               write_nic_byte(dev, 0xC3e, 0x96);                       \r
+                       }       \r
+               }\r
+               if(bDoubleTimeInterval){\r
+                       if(timer_pending(&priv->fsync_timer))\r
+                               del_timer_sync(&priv->fsync_timer);\r
+                       priv->fsync_timer.expires = jiffies + MSECS(priv->rtllib->fsync_time_interval*priv->rtllib->fsync_multiple_timeinterval);\r
+                       add_timer(&priv->fsync_timer);\r
+               }\r
+               else{\r
+                       if(timer_pending(&priv->fsync_timer))\r
+                               del_timer_sync(&priv->fsync_timer);\r
+                       priv->fsync_timer.expires = jiffies + MSECS(priv->rtllib->fsync_time_interval);\r
+                       add_timer(&priv->fsync_timer);\r
+               }\r
+       }       \r
+       else\r
+       {\r
+               if(priv->bswitch_fsync)\r
+               {\r
+                       priv->bswitch_fsync  = false;\r
+               #ifdef RTL8190P\r
+                       write_nic_byte(dev, 0xC36, 0x40);\r
+#elif defined RTL8192E\r
+                       write_nic_byte(dev, 0xC36, 0x5c);\r
+               #endif\r
+                       write_nic_byte(dev, 0xC3e, 0x96);\r
+               }       \r
+               priv->ContiuneDiffCount = 0;\r
+       #ifdef RTL8190P\r
+               write_nic_dword(dev, rOFDM0_RxDetector2, 0x164052cd);\r
+#elif defined RTL8192E\r
+               write_nic_dword(dev, rOFDM0_RxDetector2, 0x465c52cd);\r
+       #endif\r
+       }\r
+       RT_TRACE(COMP_HALDM, "ContiuneDiffCount %d\n", priv->ContiuneDiffCount);\r
+       RT_TRACE(COMP_HALDM, "rateRecord %d rateCount %d, rateCountdiff %d bSwitchFsync %d\n", priv->rate_record, rate_count, rate_count_diff , priv->bswitch_fsync);\r
+}\r
+\r
+static void dm_StartHWFsync(struct net_device *dev)\r
+{\r
+       RT_TRACE(COMP_HALDM, "%s\n", __FUNCTION__);\r
+#if defined RTL8192E 
+       write_nic_dword(dev, rOFDM0_RxDetector2, 0x465c12cf);\r
+       write_nic_byte(dev, 0xc3b, 0x41);\r
+#elif defined RTL8192SE\r
+       write_nic_byte(dev, rOFDM0_RxDetector3, 0x96);\r
+#endif\r
+}\r
+\r
+static void dm_EndHWFsync(struct net_device *dev)\r
+{\r
+       RT_TRACE(COMP_HALDM,"%s\n", __FUNCTION__);\r
+#if defined RTL8192E 
+       write_nic_dword(dev, rOFDM0_RxDetector2, 0x465c52cd);\r
+       write_nic_byte(dev, 0xc3b, 0x49);\r
+#elif defined RTL8192SE\r
+       write_nic_byte(dev, rOFDM0_RxDetector3, 0x94);\r
+#endif\r
+       \r
+}\r
+\r
+static void dm_EndSWFsync(struct net_device *dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+\r
+       RT_TRACE(COMP_HALDM, "%s\n", __FUNCTION__);\r
+       del_timer_sync(&(priv->fsync_timer));\r
+\r
+       if(priv->bswitch_fsync)\r
+       {\r
+               priv->bswitch_fsync  = false;\r
+\r
+               #ifdef RTL8190P\r
+                       write_nic_byte(dev, 0xC36, 0x40);\r
+#elif defined RTL8192E\r
+               write_nic_byte(dev, 0xC36, 0x5c);\r
+#endif\r
+\r
+               write_nic_byte(dev, 0xC3e, 0x96);                               \r
+       }               \r
+                               \r
+       priv->ContiuneDiffCount = 0;\r
+#ifdef RTL8192E\r
+       write_nic_dword(dev, rOFDM0_RxDetector2, 0x465c52cd);\r
+#endif\r
+\r
+}\r
+\r
+static void dm_StartSWFsync(struct net_device *dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       u32                     rateIndex;\r
+       u32                     rateBitmap;     \r
+\r
+       RT_TRACE(COMP_HALDM,"%s\n", __FUNCTION__);\r
+       priv->rate_record = 0;\r
+       priv->ContiuneDiffCount = 0;\r
+       priv->rateCountDiffRecord = 0;\r
+       priv->bswitch_fsync  = false;\r
+\r
+       if(priv->rtllib->mode == WIRELESS_MODE_N_24G)\r
+       {\r
+               priv->rtllib->fsync_firstdiff_ratethreshold= 600;\r
+               priv->rtllib->fsync_seconddiff_ratethreshold = 0xffff;\r
+       }       \r
+       else\r
+       {\r
+               priv->rtllib->fsync_firstdiff_ratethreshold= 200;\r
+               priv->rtllib->fsync_seconddiff_ratethreshold = 200;\r
+       }       \r
+       for(rateIndex = 0; rateIndex <= 27; rateIndex++)\r
+       {\r
+               rateBitmap  = 1 << rateIndex;\r
+               if(priv->rtllib->fsync_rate_bitmap &  rateBitmap)\r
+                       priv->rate_record += priv->stats.received_rate_histogram[1][rateIndex];\r
+       }       \r
+       if(timer_pending(&priv->fsync_timer))\r
+               del_timer_sync(&priv->fsync_timer);\r
+       priv->fsync_timer.expires = jiffies + MSECS(priv->rtllib->fsync_time_interval);\r
+       add_timer(&priv->fsync_timer);\r
+       \r
+#ifdef RTL8192E\r
+       write_nic_dword(dev, rOFDM0_RxDetector2, 0x465c12cd);           \r
+#endif\r
+\r
+}\r
+\r
+void dm_check_fsync(struct net_device *dev)\r
+{\r
+#define        RegC38_Default                          0\r
+#define        RegC38_NonFsync_Other_AP        1\r
+#define        RegC38_Fsync_AP_BCM             2\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       static u8               reg_c38_State=RegC38_Default;\r
+       static u32      reset_cnt=0;\r
+       \r
+       RT_TRACE(COMP_HALDM, "RSSI %d TimeInterval %d MultipleTimeInterval %d\n", priv->rtllib->fsync_rssi_threshold, priv->rtllib->fsync_time_interval, priv->rtllib->fsync_multiple_timeinterval);    \r
+       RT_TRACE(COMP_HALDM, "RateBitmap 0x%x FirstDiffRateThreshold %d SecondDiffRateThreshold %d\n", priv->rtllib->fsync_rate_bitmap, priv->rtllib->fsync_firstdiff_ratethreshold, priv->rtllib->fsync_seconddiff_ratethreshold);     \r
+       \r
+       if(     priv->rtllib->state == RTLLIB_LINKED && \r
+               (priv->rtllib->pHTInfo->IOTAction & HT_IOT_ACT_CDD_FSYNC))
+       {\r
+               if(priv->rtllib->bfsync_enable == 0)\r
+               {\r
+                       switch(priv->rtllib->fsync_state)\r
+                       {\r
+                               case Default_Fsync:\r
+                                       dm_StartHWFsync(dev);\r
+                                       priv->rtllib->fsync_state = HW_Fsync;\r
+                                       break;\r
+                               case SW_Fsync:\r
+                                       dm_EndSWFsync(dev);\r
+                                       dm_StartHWFsync(dev);\r
+                                       priv->rtllib->fsync_state = HW_Fsync;\r
+                                       break;\r
+                               case HW_Fsync:\r
+                               default:\r
+                                       break;\r
+                       }       \r
+               }\r
+               else\r
+               {\r
+                       switch(priv->rtllib->fsync_state)\r
+                       {\r
+                               case Default_Fsync:\r
+                                       dm_StartSWFsync(dev);\r
+                                       priv->rtllib->fsync_state = SW_Fsync;\r
+                                       break;\r
+                               case HW_Fsync:\r
+                                       dm_EndHWFsync(dev);\r
+                                       dm_StartSWFsync(dev);\r
+                                       priv->rtllib->fsync_state = SW_Fsync;\r
+                                       break;\r
+                               case SW_Fsync:\r
+                               default:\r
+                                       break;\r
+\r
+                       }       \r
+               }\r
+               if(priv->framesyncMonitor)\r
+               {\r
+                       if(reg_c38_State != RegC38_Fsync_AP_BCM)\r
+                       {       
+                               #ifdef RTL8190P\r
+                                       write_nic_byte(dev, rOFDM0_RxDetector3, 0x15);\r
+                               #else\r
+                                       write_nic_byte(dev, rOFDM0_RxDetector3, 0x95);\r
+                               #endif\r
+                               \r
+                               reg_c38_State = RegC38_Fsync_AP_BCM;\r
+                       }\r
+               }\r
+       }\r
+       else\r
+       {\r
+               switch(priv->rtllib->fsync_state)\r
+               {\r
+                       case HW_Fsync:\r
+                               dm_EndHWFsync(dev);\r
+                               priv->rtllib->fsync_state = Default_Fsync;\r
+                               break;\r
+                       case SW_Fsync:\r
+                               dm_EndSWFsync(dev);\r
+                               priv->rtllib->fsync_state = Default_Fsync;\r
+                               break;\r
+                       case Default_Fsync:\r
+                       default:\r
+                               break;\r
+               }\r
+               \r
+               if(priv->framesyncMonitor)\r
+               {\r
+                       if(priv->rtllib->state == RTLLIB_LINKED)\r
+                       {\r
+                               if(priv->undecorated_smoothed_pwdb <= RegC38_TH)\r
+                               {\r
+                                       if(reg_c38_State != RegC38_NonFsync_Other_AP)\r
+                                       {\r
+                                               #ifdef RTL8190P\r
+                                                       write_nic_byte(dev, rOFDM0_RxDetector3, 0x10);\r
+                                               #else\r
+                                                       write_nic_byte(dev, rOFDM0_RxDetector3, 0x90);\r
+                                               #endif\r
+                                               \r
+                                               reg_c38_State = RegC38_NonFsync_Other_AP;\r
+                                       #if 0
+                                               if (dev->HardwareType == HARDWARE_TYPE_RTL8190P)\r
+                                                       DbgPrint("Fsync is idle, rssi<=35, write 0xc38 = 0x%x \n", 0x10);\r
+                                               else\r
+                                                       DbgPrint("Fsync is idle, rssi<=35, write 0xc38 = 0x%x \n", 0x90);\r
+                                       #endif\r
+                                       }\r
+                               }\r
+                               else if(priv->undecorated_smoothed_pwdb >= (RegC38_TH+5))\r
+                               {\r
+                                       if(reg_c38_State)\r
+                                       {\r
+                                               write_nic_byte(dev, rOFDM0_RxDetector3, priv->framesync);\r
+                                               reg_c38_State = RegC38_Default;\r
+                                       }       \r
+                               }\r
+                       }\r
+                       else\r
+                       {\r
+                               if(reg_c38_State)\r
+                               {\r
+                                       write_nic_byte(dev, rOFDM0_RxDetector3, priv->framesync);\r
+                                       reg_c38_State = RegC38_Default;\r
+                               }\r
+                       }\r
+               }\r
+       }       \r
+       if(priv->framesyncMonitor)\r
+       {\r
+               if(priv->reset_count != reset_cnt)\r
+               {       
+                       write_nic_byte(dev, rOFDM0_RxDetector3, priv->framesync);\r
+                       reg_c38_State = RegC38_Default;\r
+                       reset_cnt = priv->reset_count;\r
+               }\r
+       }\r
+       else\r
+       {\r
+               if(reg_c38_State)\r
+               {\r
+                       write_nic_byte(dev, rOFDM0_RxDetector3, priv->framesync);\r
+                       reg_c38_State = RegC38_Default;\r
+               }\r
+       }               \r
+}\r
+\r
+#if 0\r
+extern s1Byte  DM_CheckLBusStatus(IN   PADAPTER        dev)\r
+{\r
+       PMGNT_INFO      pMgntInfo=&dev->MgntInfo;\r
+\r
+#if (HAL_CODE_BASE & RTL819X)\r
+       \r
+#if (HAL_CODE_BASE == RTL8192)\r
+\r
+#if( DEV_BUS_TYPE==PCI_INTERFACE)\r
+       return true;\r
+#endif\r
+\r
+#if( DEV_BUS_TYPE==USB_INTERFACE)\r
+       return true;\r
+#endif\r
+\r
+#endif 
+\r
+#if (HAL_CODE_BASE == RTL8190)\r
+       return true;\r
+#endif 
+\r
+#endif 
+}      
+\r
+#endif\r
+\r
+extern void dm_shadow_init(struct net_device *dev)\r
+{\r
+       u8      page;\r
+       u16     offset;\r
+\r
+       for (page = 0; page < 5; page++)\r
+               for (offset = 0; offset < 256; offset++)\r
+               {\r
+                       dm_shadow[page][offset] = read_nic_byte(dev, offset+page*256);\r
+               }\r
+\r
+       for (page = 8; page < 11; page++)\r
+               for (offset = 0; offset < 256; offset++)\r
+                       dm_shadow[page][offset] = read_nic_byte(dev, offset+page*256);\r
+\r
+       for (page = 12; page < 15; page++)\r
+               for (offset = 0; offset < 256; offset++)\r
+                       dm_shadow[page][offset] = read_nic_byte(dev, offset+page*256);\r
+\r
+}   
+\r
+/*---------------------------Define function prototype------------------------*/\r
+static void dm_init_dynamic_txpower(struct net_device *dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       \r
+#ifdef RTL8192SE\r
+       if(((priv->pFirmware->FirmwareVersion) >= 60) && \r
+               (priv->DM_Type == DM_Type_ByDriver)){\r
+               priv->rtllib->bdynamic_txpower_enable = true; \r
+               RT_TRACE(COMP_INIT, "Dynamic Tx Power is enabled by Driver \n");\r
+       } else {\r
+               priv->rtllib->bdynamic_txpower_enable = false; \r
+               RT_TRACE(COMP_INIT, "Dynamic Tx Power is enabled by FW \n");\r
+       }\r
+       \r
+       priv->LastDTPLvl = TxHighPwrLevel_Normal;\r
+       priv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;\r
+       \r
+#elif defined RTL8190P || defined RTL8192E\r
+       priv->rtllib->bdynamic_txpower_enable = true;    
+       priv->bLastDTPFlag_High = false;\r
+       priv->bLastDTPFlag_Low = false;\r
+       priv->bDynamicTxHighPower = false;\r
+       priv->bDynamicTxLowPower = false;\r
+#endif\r
+}\r
+\r
+#if defined RTL8190P || defined RTL8192E\r
+static void dm_dynamic_txpower(struct net_device *dev)\r
+{      \r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       unsigned int txhipower_threshhold=0;    \r
+        unsigned int txlowpower_threshold=0;\r
+       if(priv->rtllib->bdynamic_txpower_enable != true)\r
+       {\r
+               priv->bDynamicTxHighPower = false;\r
+               priv->bDynamicTxLowPower = false;\r
+               return;\r
+       }\r
+        if((priv->rtllib->pHTInfo->IOTPeer == HT_IOT_PEER_ATHEROS) && (priv->rtllib->mode == IEEE_G)){\r
+               txhipower_threshhold = TX_POWER_ATHEROAP_THRESH_HIGH;\r
+               txlowpower_threshold = TX_POWER_ATHEROAP_THRESH_LOW;\r
+       }\r
+       else\r
+       {\r
+               txhipower_threshhold = TX_POWER_NEAR_FIELD_THRESH_HIGH;\r
+               txlowpower_threshold = TX_POWER_NEAR_FIELD_THRESH_LOW; \r
+       }\r
+\r
+\r
+       RT_TRACE(COMP_TXAGC,"priv->undecorated_smoothed_pwdb = %ld \n" , priv->undecorated_smoothed_pwdb);\r
+\r
+       if(priv->rtllib->state == RTLLIB_LINKED)\r
+       {\r
+               if(priv->undecorated_smoothed_pwdb >= txhipower_threshhold)\r
+               {\r
+                       priv->bDynamicTxHighPower = true;\r
+                       priv->bDynamicTxLowPower = false;\r
+               }\r
+               else\r
+               {\r
+                       if(priv->undecorated_smoothed_pwdb < txlowpower_threshold && priv->bDynamicTxHighPower == true)\r
+                       {\r
+                               priv->bDynamicTxHighPower = false;\r
+                       }\r
+                       if(priv->undecorated_smoothed_pwdb < 35)\r
+                       {\r
+                               priv->bDynamicTxLowPower = true;\r
+                       }\r
+                       else if(priv->undecorated_smoothed_pwdb >= 40)\r
+                       {\r
+                               priv->bDynamicTxLowPower = false;\r
+                       }\r
+               }\r
+       }\r
+       else\r
+       {\r
+               priv->bDynamicTxHighPower = false;\r
+               priv->bDynamicTxLowPower = false;\r
+       }\r
+\r
+       if( (priv->bDynamicTxHighPower != priv->bLastDTPFlag_High ) ||\r
+               (priv->bDynamicTxLowPower != priv->bLastDTPFlag_Low ) )\r
+       {\r
+               RT_TRACE(COMP_TXAGC,"SetTxPowerLevel8190()  channel = %d \n" , priv->rtllib->current_network.channel);\r
+               \r
+               rtl8192_phy_setTxPower(dev,priv->rtllib->current_network.channel); \r
+       }\r
+       priv->bLastDTPFlag_High = priv->bDynamicTxHighPower;\r
+       priv->bLastDTPFlag_Low = priv->bDynamicTxLowPower;\r
+\r
+}      
+#elif defined RTL8192SE\r
+static void dm_dynamic_txpower(struct net_device *dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       long                            UndecoratedSmoothedPWDB;\r
+\r
+       if( (priv->rtllib->bdynamic_txpower_enable != true) ||\r
+               (priv->DMFlag & HAL_DM_HIPWR_DISABLE) ||\r
+               priv->rtllib->pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_HIGH_POWER) {\r
+               priv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;\r
+               return;\r
+       }\r
+\r
+       if((!priv->rtllib->state != RTLLIB_LINKED) &&   \r
+               (priv->EntryMinUndecoratedSmoothedPWDB == 0)) {\r
+               RT_TRACE(COMP_POWER, "Not connected to any \n");\r
+               priv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;\r
+               return;\r
+       }\r
+       \r
+       if(priv->rtllib->state == RTLLIB_LINKED) {
+               if(priv->OpMode == RT_OP_MODE_IBSS) {\r
+                       UndecoratedSmoothedPWDB = priv->EntryMinUndecoratedSmoothedPWDB;\r
+                       RT_TRACE(COMP_POWER, "AP Client PWDB = %ld \n", UndecoratedSmoothedPWDB);\r
+               } else {\r
+                       UndecoratedSmoothedPWDB = priv->undecorated_smoothed_pwdb;\r
+                       RT_TRACE(COMP_POWER, "STA Default Port PWDB = %ld \n", UndecoratedSmoothedPWDB);\r
+               }\r
+       } else {
+               UndecoratedSmoothedPWDB = priv->EntryMinUndecoratedSmoothedPWDB;\r
+               RT_TRACE(COMP_POWER, "AP Ext Port PWDB = %ld \n", UndecoratedSmoothedPWDB);\r
+       }\r
+               \r
+       if(UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL2)  {\r
+               priv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level2;\r
+               RT_TRACE(COMP_POWER, "TxHighPwrLevel_Level2 (TxPwr=0x0)\n");\r
+       } else if((UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL2-3)) &&\r
+               (UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL1) ) {\r
+               priv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1;\r
+               RT_TRACE(COMP_POWER, "TxHighPwrLevel_Level1 (TxPwr=0x10)\n");\r
+       } else if(UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL1-3)) {\r
+               priv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;\r
+               RT_TRACE(COMP_POWER, "TxHighPwrLevel_Normal\n");\r
+       }\r
+\r
+       if( (priv->DynamicTxHighPowerLvl != priv->LastDTPLvl) ) {\r
+               RT_TRACE(COMP_POWER, "PHY_SetTxPowerLevel8192S() Channel = %d \n" , priv->rtllib->current_network.channel);\r
+               rtl8192_phy_setTxPower(dev, priv->rtllib->current_network.channel);\r
+       }\r
+       priv->LastDTPLvl = priv->DynamicTxHighPowerLvl;\r
+}      
+#endif\r
+\r
+static void dm_check_txrateandretrycount(struct net_device * dev)\r
+{\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       struct rtllib_device* ieee = priv->rtllib;\r
+       \r
+#ifdef RTL8192SE\r
+       static u8 LegacyRateSet[12] = {0x02 , 0x04 , 0x0b , 0x16 , 0x0c , 0x12 , 0x18 , 0x24 , 0x30 , 0x48 , 0x60 , 0x6c};\r
+       u8 RateIdx = 0;\r
+       RateIdx = read_nic_byte(dev, TX_RATE_REG);\r
+       \r
+       if(ieee->softmac_stats.CurrentShowTxate < 76)\r
+               ieee->softmac_stats.CurrentShowTxate = (RateIdx<12)?(LegacyRateSet[RateIdx]):((RateIdx-12)|0x80);\r
+       else\r
+               ieee->softmac_stats.CurrentShowTxate = 0;\r
+#else\r
+       ieee->softmac_stats.CurrentShowTxate = read_nic_byte(dev, Current_Tx_Rate_Reg);\r
+#endif\r
+\r
+       ieee->softmac_stats.last_packet_rate = read_nic_byte(dev ,Initial_Tx_Rate_Reg); \r
+\r
+       ieee->softmac_stats.txretrycount = read_nic_dword(dev, Tx_Retry_Count_Reg);     \r
+}\r
+\r
+static void dm_send_rssi_tofw(struct net_device *dev)\r
+{\r
+#ifndef RTL8192SE\r
+       DCMD_TXCMD_T                    tx_cmd;\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       \r
+       write_nic_byte(dev, DRIVER_RSSI, (u8)priv->undecorated_smoothed_pwdb);\r
+       return;\r
+       tx_cmd.Op               = TXCMD_SET_RX_RSSI;\r
+       tx_cmd.Length   = 4;\r
+       tx_cmd.Value            = priv->undecorated_smoothed_pwdb;\r
+\r
+       cmpk_message_handle_tx(dev, (u8*)&tx_cmd, \r
+                                                               DESC_PACKET_TYPE_INIT, sizeof(DCMD_TXCMD_T));\r
+#endif\r
+}\r
+\r
+/*-----------------------------------------------------------------------------\r
+ * Function:   dm_RefreshRateAdaptiveMask()\r
+ *\r
+ * Overview:   Update rate table mask according to rssi\r
+ *\r
+ * Input:              NONE\r
+ *\r
+ * Output:             NONE\r
+ *\r
+ * Return:             NONE\r
+ *\r
+ * Revised History:\r
+ *     When            Who             Remark\r
+ *     05/27/2009      hpfan   Create Version 0.  \r
+ *\r
+ *---------------------------------------------------------------------------*/\r
+#ifdef RTL8192SE\r
+static void dm_RefreshRateAdaptiveMask(struct net_device *dev)\r
+{\r
+       struct r8192_priv *     priv = rtllib_priv(dev);\r
+       prate_adaptive  pRA = (prate_adaptive)&priv->rate_adaptive;\r
+       u32                             LowRSSIThreshForRA = 0, HighRSSIThreshForRA = 0;\r
+       u8                              rssi_level;\r
+\r
+       if(!priv->up)\r
+       {\r
+               RT_TRACE(COMP_RATE, "<---- dm_RefreshRateAdaptiveMask(): driver is going to unload\n");\r
+               return;\r
+       }\r
+\r
+       if(!priv->rtllib->bUseRAMask)\r
+       {\r
+               RT_TRACE(COMP_RATE, "<---- dm_RefreshRateAdaptiveMask(): driver does not control rate adaptive mask\n");\r
+               return;\r
+       }\r
+\r
+       if(priv->pFirmware->FirmwareVersion >= 61 && !priv->bInformFWDriverControlDM)\r
+       {\r
+               RT_TRACE(COMP_RATE, "<---- dm_RefreshRateAdaptiveMask(): inform fw driver control dm\n");\r
+               priv->rtllib->SetFwCmdHandler(dev, FW_CMD_CTRL_DM_BY_DRIVER);\r
+               priv->bInformFWDriverControlDM = true;\r
+       }\r
+               \r
+\r
+       if(priv->rtllib->state == RTLLIB_LINKED )\r
+       {\r
+               \r
+               switch (pRA->PreRATRState)\r
+               {\r
+                       case DM_RATR_STA_HIGH:\r
+                       {\r
+                               HighRSSIThreshForRA = 50;\r
+                               LowRSSIThreshForRA = 20;\r
+                       }\r
+                       break;\r
+                       \r
+                       case DM_RATR_STA_MIDDLE:\r
+                       {\r
+                               HighRSSIThreshForRA = 55;\r
+                               LowRSSIThreshForRA = 20;\r
+                       }\r
+                       break;\r
+                       \r
+                       case DM_RATR_STA_LOW:\r
+                       {\r
+                               HighRSSIThreshForRA = 50;\r
+                               LowRSSIThreshForRA = 25;\r
+                       }\r
+                       break;\r
+\r
+                       default:\r
+                       {\r
+                               HighRSSIThreshForRA = 50;\r
+                               LowRSSIThreshForRA = 20;\r
+                       }\r
+               }\r
+\r
+               if(priv->undecorated_smoothed_pwdb > (long)HighRSSIThreshForRA)\r
+               {\r
+                       pRA->ratr_state = DM_RATR_STA_HIGH;\r
+                       rssi_level = 1;\r
+               }\r
+               else if(priv->undecorated_smoothed_pwdb > (long)LowRSSIThreshForRA)\r
+               {\r
+                       pRA->ratr_state = DM_RATR_STA_MIDDLE;\r
+                       rssi_level = 2;\r
+               }\r
+               else\r
+               {\r
+                       pRA->ratr_state = DM_RATR_STA_LOW;\r
+                       rssi_level = 3;\r
+               }\r
+\r
+               if(pRA->PreRATRState != pRA->ratr_state)\r
+               {\r
+                       RT_TRACE(COMP_RATE, "RSSI = %ld\n", priv->undecorated_smoothed_pwdb);\r
+                       RT_TRACE(COMP_RATE, "RSSI_LEVEL = %d\n", rssi_level);\r
+                       RT_TRACE(COMP_RATE, "PreState = %d, CurState = %d\n", pRA->PreRATRState, pRA->ratr_state);\r
+#ifdef _RTL8192_EXT_PATCH_\r
+                       priv->rtllib->UpdateHalRAMaskHandler(\r
+                                                                       dev,\r
+                                                                       false,\r
+                                                                       0,\r
+                                                                       NULL,\r
+                                                                       priv->rtllib->mode,\r
+                                                                       rssi_level);\r
+#else\r
+                       priv->rtllib->UpdateHalRAMaskHandler(\r
+                                                                       dev,\r
+                                                                       false,\r
+                                                                       0,\r
+                                                                       NULL,\r
+                                                                       NULL,\r
+                                                                       rssi_level);\r
+#endif\r
+                       pRA->PreRATRState = pRA->ratr_state;\r
+               }\r
+       }\r
+}\r
+#ifdef _RTL8192_EXT_PATCH_\r
+static void    dm_refresh_rate_adaptive_mask(struct net_device *dev)\r
+{\r
+\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+       prate_adaptive  pRA = (prate_adaptive)&priv->rate_adaptive;\r
+       u32     LowRSSIThreshForRA = 0, HighRSSIThreshForRA = 0;\r
+       u8      rssi_level;\r
+#ifdef _RTL8192_EXT_PATCH_\r
+       if((!priv->up) && (!priv->mesh_up))\r
+#else\r
+       if(!priv->up)\r
+#endif\r
+       {\r
+               RT_TRACE(COMP_RATE,"<---- dm_refresh_rate_adaptive_mask(): driver is going to unload\n");\r
+               return;\r
+       }\r
+\r
+       if(!priv->rtllib->bUseRAMask)\r
+       {\r
+               RT_TRACE(COMP_RATE, "<---- dm_refresh_rate_adaptive_mask(): driver does not control rate adaptive mask\n");\r
+               return;\r
+       }\r
+\r
+       if(priv->pFirmware->FirmwareVersion >= 61 && !priv->bInformFWDriverControlDM)\r
+       {\r
+               RT_TRACE(COMP_RATE, "<---- dm_refresh_rate_adaptive_mask(): inform fw driver control dm\n");\r
+               priv->rtllib->SetFwCmdHandler(dev, FW_CMD_CTRL_DM_BY_DRIVER);\r
+               priv->bInformFWDriverControlDM = true;\r
+       }\r
+               \r
+       if((priv->rtllib->state == RTLLIB_LINKED && \r
+                       (priv->rtllib->iw_mode != IW_MODE_MESH)) || ((priv->rtllib->state == RTLLIB_LINKED) && (priv->rtllib->iw_mode == IW_MODE_MESH) && (priv->rtllib->only_mesh == 0)))\r
+       {\r
+               \r
+               switch (pRA->PreRATRState)\r
+               {\r
+                       case DM_RATR_STA_HIGH:\r
+                       {\r
+                               HighRSSIThreshForRA = 50;\r
+                               LowRSSIThreshForRA = 20;\r
+                       }\r
+                       break;\r
+                       \r
+                       case DM_RATR_STA_MIDDLE:\r
+                       {\r
+                               HighRSSIThreshForRA = 55;\r
+                               LowRSSIThreshForRA = 20;\r
+                       }\r
+                       break;\r
+                       \r
+                       case DM_RATR_STA_LOW:\r
+                       {\r
+                               HighRSSIThreshForRA = 50;\r
+                               LowRSSIThreshForRA = 25;\r
+                       }\r
+                       break;\r
+\r
+                       default:\r
+                       {\r
+                               HighRSSIThreshForRA = 50;\r
+                               LowRSSIThreshForRA = 20;\r
+                       }\r
+               }\r
+\r
+               if(priv->undecorated_smoothed_pwdb > (long)HighRSSIThreshForRA)\r
+               {\r
+                       pRA->ratr_state = DM_RATR_STA_HIGH;\r
+                       rssi_level = 1;\r
+               }\r
+               else if(priv->undecorated_smoothed_pwdb > (long)LowRSSIThreshForRA)\r
+               {\r
+                       pRA->ratr_state = DM_RATR_STA_MIDDLE;\r
+                       rssi_level = 2;\r
+               }\r
+               else\r
+               {\r
+                       pRA->ratr_state = DM_RATR_STA_LOW;\r
+                       rssi_level = 3;\r
+               }\r
+               if((pRA->PreRATRState != pRA->ratr_state) || ((pRA->PreRATRState == pRA->ratr_state) && (rssi_level != priv->rssi_level)))\r
+               {\r
+                       RT_TRACE(COMP_RATE, "Target AP addr : "MAC_FMT"\n", MAC_ARG(priv->rtllib->current_network.bssid));\r
+                       RT_TRACE(COMP_RATE, "RSSI = %ld\n", priv->undecorated_smoothed_pwdb);\r
+                       RT_TRACE(COMP_RATE, "RSSI_LEVEL = %d\n", rssi_level);\r
+                       RT_TRACE(COMP_RATE, "PreState = %d, CurState = %d\n", pRA->PreRATRState, pRA->ratr_state);\r
+                       priv->rtllib->UpdateHalRAMaskHandler(\r
+                                                                       dev,\r
+                                                                       false,\r
+                                                                       0,\r
+                                                                       NULL,\r
+                                                                       priv->rtllib->mode,\r
+                                                                       rssi_level);\r
+                       priv->rssi_level = rssi_level;\r
+                       pRA->PreRATRState = pRA->ratr_state;\r
+               }\r
+       }\r
+       \r
+       if(priv->rtllib->iw_mode == IW_MODE_MESH)\r
+       {\r
+               if(priv->mshobj->ext_refresh_rate_adaptive_mask)\r
+                       priv->mshobj->ext_refresh_rate_adaptive_mask(priv);\r
+       }\r
+\r
+}\r
+#endif\r
+\r
+void Adhoc_InitRateAdaptive(struct net_device *dev,struct sta_info  *pEntry)\r
+{\r
+       prate_adaptive  pRA = (prate_adaptive)&pEntry->rate_adaptive;\r
+       struct r8192_priv *priv = rtllib_priv(dev);\r
+\r
+       pRA->ratr_state = DM_RATR_STA_MAX;\r
+       pRA->high2low_rssi_thresh_for_ra = RateAdaptiveTH_High;\r
+       pRA->low2high_rssi_thresh_for_ra20M = RateAdaptiveTH_Low_20M+5;\r
+       pRA->low2high_rssi_thresh_for_ra40M = RateAdaptiveTH_Low_40M+5;\r
+\r
+       pRA->high_rssi_thresh_for_ra = RateAdaptiveTH_High+5;\r
+       pRA->low_rssi_thresh_for_ra20M = RateAdaptiveTH_Low_20M;\r
+       pRA->low_rssi_thresh_for_ra40M = RateAdaptiveTH_Low_40M;\r
+       \r
+       if (priv->rf_type == RF_2T4R)\r
+       {\r
+               /* 2008/01/11 MH Modify 2T RATR table for different RSSI. */\r
+               pRA->upper_rssi_threshold_ratr          =       0x8f0f0000;\r
+               pRA->middle_rssi_threshold_ratr         =       0x8d0ff000;\r
+               pRA->low_rssi_threshold_ratr            =       0x8f0ff003;\r
+               pRA->low_rssi_threshold_ratr_40M        =       0x8f0ff007;\r
+               pRA->low_rssi_threshold_ratr_20M        =       0x8f0ff003;\r
+       }\r
+       else if (priv->rf_type == RF_1T2R)\r
+       {\r
+               pRA->upper_rssi_threshold_ratr          =       0x000f0000;             \r
+               pRA->middle_rssi_threshold_ratr         =       0x000ff000;\r
+               pRA->low_rssi_threshold_ratr            =       0x000ff003;\r
+               pRA->low_rssi_threshold_ratr_40M        =       0x000ff007;\r
+               pRA->low_rssi_threshold_ratr_20M        =       0x000ff003;\r
+       }\r
+       \r
+}      
+\r
+\r
+void Adhoc_InitRateAdaptiveState(struct net_device *dev,struct sta_info  *pEntry)\r
+{\r
+       prate_adaptive  pRA = (prate_adaptive)&pEntry->rate_adaptive;\r
+\r
+       pRA->ratr_state = DM_RATR_STA_MAX;\r
+       pRA->PreRATRState = DM_RATR_STA_MAX;\r
+}\r
+\r
+\r
+static void Adhoc_dm_CheckRateAdaptive(struct net_device * dev)\r
+{\r
+       struct r8192_priv                       *priv = rtllib_priv(dev);\r
+       struct rtllib_device    *ieee = priv->rtllib;\r
+       prate_adaptive                  pRA;\r
+       u32                                             currentRATR, targetRATR = 0;\r
+       u32                                             LowRSSIThreshForRA = 0, HighRSSIThreshForRA = 0;\r
+       bool                                            bShortGIEnabled = false;\r
+       u8                                              i = 0;\r
+       struct sta_info                         *pEntry = NULL;\r
+       \r
+       if(!priv->up)\r
+       {\r
+               RT_TRACE(COMP_RATE, "<---- AP_dm_CheckRateAdaptive(): driver is going to unload\n");\r
+               return;\r
+       }\r
+\r
+       for(i=0;i<PEER_MAX_ASSOC; i++)\r
+       {\r
+               pEntry = ieee->peer_assoc_list[i];\r
+               if(NULL != pEntry)\r
+               {\r
+                       pRA = (prate_adaptive)&pEntry->rate_adaptive;\r
+                       if(pRA->rate_adaptive_disabled)\r
+                               continue;                       \r
+                       if((pEntry->wireless_mode!=WIRELESS_MODE_N_24G) && (pEntry->wireless_mode != WIRELESS_MODE_N_5G))\r
+                               continue;\r
+                       bShortGIEnabled = (pEntry->htinfo.bCurTxBW40MHz && priv->rtllib->pHTInfo->bCurShortGI40MHz && pEntry->htinfo.bCurShortGI40MHz) |\r
+                               (!pEntry->htinfo.bCurTxBW40MHz && priv->rtllib->pHTInfo->bCurShortGI20MHz && pEntry->htinfo.bCurShortGI20MHz);\r
+                       pRA->upper_rssi_threshold_ratr =\r
+                               (pRA->upper_rssi_threshold_ratr & (~BIT31)) | ((bShortGIEnabled)? BIT31:0) ;\r
+\r
+                       pRA->middle_rssi_threshold_ratr = \r
+                               (pRA->middle_rssi_threshold_ratr & (~BIT31)) | ((bShortGIEnabled)? BIT31:0) ;\r
+                       \r
+\r
+                       if (pEntry->htinfo.bBw40MHz)\r
+                       {\r
+                               pRA->low_rssi_threshold_ratr = \r
+                                       (pRA->low_rssi_threshold_ratr_40M & (~BIT31)) | ((bShortGIEnabled)? BIT31:0) ;\r
+                       }\r
+                       else\r
+                       {\r
+                               pRA->low_rssi_threshold_ratr = \r
+                                       (pRA->low_rssi_threshold_ratr_20M & (~BIT31)) | ((bShortGIEnabled)? BIT31:0) ;\r
+                       }\r
+                       if (pRA->ratr_state == DM_RATR_STA_HIGH)\r
+                       {\r
+                               HighRSSIThreshForRA     = pRA->high2low_rssi_thresh_for_ra;\r
+                               LowRSSIThreshForRA      = \r
+                                       (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)?\r
+                                       (pRA->low_rssi_thresh_for_ra40M):(pRA->low_rssi_thresh_for_ra20M);\r
+                       }\r
+                       else if (pRA->ratr_state == DM_RATR_STA_LOW)\r
+                       {\r
+                               HighRSSIThreshForRA     = pRA->high_rssi_thresh_for_ra;\r
+                               LowRSSIThreshForRA      = \r
+                                       (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)?\r
+                                       (pRA->low2high_rssi_thresh_for_ra40M):(pRA->low2high_rssi_thresh_for_ra20M);\r
+                       }\r
+                       else\r
+                       {\r
+                               HighRSSIThreshForRA     = pRA->high_rssi_thresh_for_ra;\r
+                               LowRSSIThreshForRA      = \r
+                                       (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)?\r
+                                       (pRA->low_rssi_thresh_for_ra40M):(pRA->low_rssi_thresh_for_ra20M);\r
+                       }\r
+                       if(priv->undecorated_smoothed_pwdb >= (int)HighRSSIThreshForRA)\r
+                       {\r
+                               pRA->ratr_state = DM_RATR_STA_HIGH;\r
+                               targetRATR = pRA->upper_rssi_threshold_ratr;\r
+                       }\r
+                       else if(priv->undecorated_smoothed_pwdb >= (int)LowRSSIThreshForRA)\r
+                       {\r
+                               pRA->ratr_state = DM_RATR_STA_MIDDLE;\r
+                               targetRATR = pRA->middle_rssi_threshold_ratr;\r
+                       }\r
+                       else\r
+                       {\r
+                               pRA->ratr_state = DM_RATR_STA_LOW;\r
+                               targetRATR = pRA->low_rssi_threshold_ratr;\r
+                       }\r
+                       currentRATR = read_nic_dword(dev, pEntry->ratr_index*4 + RATR0);\r
+                       if( targetRATR !=  currentRATR )\r
+                       {\r
+                               if(priv->rf_type == RF_1T2R)    
+                               {       \r
+                                       targetRATR &=~ (RATE_ALL_OFDM_2SS);\r
+                               }\r
+                               printk("<<<<<<<<<<<currentRATR = %x, targetRATR = %x\n", currentRATR, targetRATR);                              \r
+                               write_nic_dword(dev, RATR0+pEntry->ratr_index*4, targetRATR);\r
+                               write_nic_byte(dev, UFWP, 1);\r
+                               pRA->last_ratr = targetRATR;\r
+                       }\r
+               }\r
+       }\r
+       \r
+}      
+#endif\r
+\r
+/*---------------------------Define function prototype------------------------*/\r
+\r
diff --git a/ubuntu/rtl8192se/rtl_dm.h b/ubuntu/rtl8192se/rtl_dm.h
new file mode 100644 (file)
index 0000000..2a8952c
--- /dev/null
@@ -0,0 +1,330 @@
+/******************************************************************************\r
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ * The full GNU General Public License is included in this distribution in the\r
+ * file called LICENSE.\r
+ *\r
+ * Contact Information:\r
+ * wlanfae <wlanfae@realtek.com>\r
+******************************************************************************/\r
+#ifndef        __R8192UDM_H__\r
+#define __R8192UDM_H__\r
+\r
+\r
+/*--------------------------Define Parameters-------------------------------*/\r
+#define                OFDM_Table_Length       19\r
+#define                CCK_Table_length        12\r
+\r
+#define                DM_DIG_THRESH_HIGH                                      40\r
+#define                DM_DIG_THRESH_LOW                                       35\r
+\r
+#define                DM_FALSEALARM_THRESH_LOW        40\r
+#define                DM_FALSEALARM_THRESH_HIGH       1000\r
+\r
+#define                DM_DIG_HIGH_PWR_THRESH_HIGH             75\r
+#define                DM_DIG_HIGH_PWR_THRESH_LOW              70\r
+\r
+#define                BW_AUTO_SWITCH_HIGH_LOW                 25\r
+#define                BW_AUTO_SWITCH_LOW_HIGH                 30\r
+\r
+#define                DM_check_fsync_time_interval                            500\r
+\r
+\r
+#define                DM_DIG_BACKOFF                          12\r
+#ifdef RTL8192SE\r
+#define                DM_DIG_MAX                                      0x3e\r
+#elif defined RTL8190P || defined RTL8192E\r
+#define                DM_DIG_MAX                                      0x36\r
+#endif\r
+#define                DM_DIG_MIN                                      0x1c\r
+#define                DM_DIG_MIN_Netcore                      0x12\r
+\r
+#define                DM_DIG_BACKOFF_MAX                      12\r
+#define                DM_DIG_BACKOFF_MIN                      -4\r
+\r
+#define                RxPathSelection_SS_TH_low               30\r
+#define                RxPathSelection_diff_TH                 18\r
+\r
+#define                RateAdaptiveTH_High                     50\r
+#define                RateAdaptiveTH_Low_20M          30\r
+#define                RateAdaptiveTH_Low_40M          10\r
+#define                VeryLowRSSI                                     15\r
+\r
+#ifdef RTL8192SE\r
+#define                CTSToSelfTHVal                          30\r
+#elif defined RTL8190P || defined RTL8192E\r
+#define                CTSToSelfTHVal                                  35\r
+#endif\r
+\r
+#define                WAIotTHVal                                              25\r
+\r
+#define                E_FOR_TX_POWER_TRACK               300\r
+#define                TX_POWER_NEAR_FIELD_THRESH_HIGH         68\r
+#define                TX_POWER_NEAR_FIELD_THRESH_LOW          62\r
+#define         TX_POWER_ATHEROAP_THRESH_HIGH           78\r
+#define        TX_POWER_ATHEROAP_THRESH_LOW            72\r
+\r
+#define                Current_Tx_Rate_Reg         0x1e0
+#define                Initial_Tx_Rate_Reg         0x1e1 
+#define                Tx_Retry_Count_Reg         0x1ac\r
+#define                RegC38_TH                                20\r
+\r
+#define                TX_POWER_NEAR_FIELD_THRESH_LVL2 74\r
+#define                TX_POWER_NEAR_FIELD_THRESH_LVL1 67\r
+\r
+#define                TxHighPwrLevel_Normal           0       \r
+#define                TxHighPwrLevel_Level1           1\r
+#define                TxHighPwrLevel_Level2           2\r
+\r
+#define                DM_Type_ByFW                    0\r
+#define                DM_Type_ByDriver                1\r
+\r
+/*--------------------------Define Parameters-------------------------------*/\r
+\r
+\r
+/*------------------------------Define structure----------------------------*/ \r
+typedef struct _dynamic_initial_gain_threshold_\r
+{\r
+       u8              dig_enable_flag;\r
+       u8              dig_algorithm;\r
+       u8              Dig_TwoPort_Algorithm;\r
+       u8              Dig_Ext_Port_Stage;\r
+       u8              dbg_mode;\r
+       u8              dig_algorithm_switch;\r
+       \r
+       long            rssi_low_thresh;\r
+       long            rssi_high_thresh;\r
+\r
+       u32             FALowThresh;\r
+       u32             FAHighThresh;\r
+       \r
+       long            rssi_high_power_lowthresh;\r
+       long            rssi_high_power_highthresh;\r
+\r
+       u8              dig_state;\r
+       u8              dig_highpwr_state;\r
+       u8              CurSTAConnectState;\r
+       u8              PreSTAConnectState;\r
+       u8              CurAPConnectState;\r
+       u8              PreAPConnectState;\r
+\r
+       u8              curpd_thstate;\r
+       u8              prepd_thstate;\r
+       u8              curcs_ratio_state;\r
+       u8              precs_ratio_state;\r
+\r
+       u32             pre_ig_value;\r
+       u32             cur_ig_value;\r
+\r
+       u8              Backoff_Enable_Flag;\r
+       u8              backoff_val;\r
+       char            BackoffVal_range_max;\r
+       char            BackoffVal_range_min;\r
+       u8              rx_gain_range_max;\r
+       u8              rx_gain_range_min;\r
+       bool            initialgain_lowerbound_state;\r
+\r
+       long            rssi_val;\r
+}dig_t;\r
+\r
+typedef enum tag_dynamic_init_gain_state_definition\r
+{\r
+       DM_STA_DIG_OFF = 0,     \r
+       DM_STA_DIG_ON,          \r
+       DM_STA_DIG_MAX\r
+}dm_dig_sta_e;\r
+\r
+\r
+typedef enum tag_dynamic_ratr_state_definition\r
+{\r
+       DM_RATR_STA_HIGH = 0,\r
+       DM_RATR_STA_MIDDLE = 1,\r
+       DM_RATR_STA_LOW = 2,\r
+       DM_RATR_STA_MAX\r
+}dm_ratr_sta_e;\r
+\r
+typedef enum tag_dynamic_init_gain_operation_type_definition\r
+{\r
+       DIG_TYPE_THRESH_HIGH    = 0,\r
+       DIG_TYPE_THRESH_LOW     = 1,\r
+       DIG_TYPE_THRESH_HIGHPWR_HIGH    = 2,\r
+       DIG_TYPE_THRESH_HIGHPWR_LOW     = 3,\r
+       DIG_TYPE_DBG_MODE                               = 4,\r
+       DIG_TYPE_RSSI                                           = 5,\r
+       DIG_TYPE_ALGORITHM                              = 6,\r
+       DIG_TYPE_BACKOFF                                        = 7,\r
+       DIG_TYPE_PWDB_FACTOR                    = 8,\r
+       DIG_TYPE_RX_GAIN_MIN                            = 9,\r
+       DIG_TYPE_RX_GAIN_MAX                            = 10,\r
+       DIG_TYPE_ENABLE                 = 20,\r
+       DIG_TYPE_DISABLE                = 30,\r
+       DIG_OP_TYPE_MAX\r
+}dm_dig_op_e;\r
+\r
+typedef enum tag_dig_algorithm_definition\r
+{\r
+       DIG_ALGO_BY_FALSE_ALARM = 0,    \r
+       DIG_ALGO_BY_RSSI        = 1,\r
+       DIG_ALGO_BEFORE_CONNECT_BY_RSSI_AND_ALARM = 2,\r
+       DIG_ALGO_BY_TOW_PORT = 3,\r
+       DIG_ALGO_MAX\r
+}dm_dig_alg_e;\r
+\r
+typedef enum tag_DIG_TWO_PORT_ALGO_Definition\r
+{\r
+       DIG_TWO_PORT_ALGO_RSSI = 0,\r
+       DIG_TWO_PORT_ALGO_FALSE_ALARM = 1,\r
+}DM_DIG_TWO_PORT_ALG_E;\r
+\r
+\r
+typedef enum tag_DIG_EXT_PORT_ALGO_Definition\r
+{\r
+       DIG_EXT_PORT_STAGE_0 = 0,\r
+       DIG_EXT_PORT_STAGE_1 = 1,\r
+       DIG_EXT_PORT_STAGE_2 = 2,\r
+       DIG_EXT_PORT_STAGE_3 = 3,\r
+       DIG_EXT_PORT_STAGE_MAX = 4,\r
+}DM_DIG_EXT_PORT_ALG_E;\r
+\r
+typedef enum tag_dig_dbgmode_definition\r
+{\r
+       DIG_DBG_OFF = 0,        \r
+       DIG_DBG_ON = 1,\r
+       DIG_DBG_MAX\r
+}dm_dig_dbg_e;\r
+\r
+typedef enum tag_dig_connect_definition\r
+{\r
+       DIG_STA_DISCONNECT = 0, \r
+       DIG_STA_CONNECT = 1,\r
+       DIG_STA_BEFORE_CONNECT = 2,\r
+       DIG_AP_DISCONNECT = 3,\r
+       DIG_AP_CONNECT = 4, \r
+       DIG_AP_ADD_STATION = 5,\r
+       DIG_CONNECT_MAX\r
+}dm_dig_connect_e;\r
+\r
+typedef enum tag_dig_packetdetection_threshold_definition\r
+{\r
+       DIG_PD_AT_LOW_POWER = 0,        \r
+       DIG_PD_AT_NORMAL_POWER = 1,\r
+       DIG_PD_AT_HIGH_POWER = 2,\r
+       DIG_PD_MAX\r
+}dm_dig_pd_th_e;\r
+\r
+typedef enum tag_dig_cck_cs_ratio_state_definition\r
+{\r
+       DIG_CS_RATIO_LOWER = 0, \r
+       DIG_CS_RATIO_HIGHER = 1,\r
+       DIG_CS_MAX\r
+}dm_dig_cs_ratio_e;\r
+typedef struct _Dynamic_Rx_Path_Selection_\r
+{\r
+       u8              Enable;\r
+       u8              DbgMode;\r
+       u8              cck_method;\r
+       u8              cck_Rx_path;\r
+\r
+       u8              SS_TH_low;\r
+       u8              diff_TH;\r
+       u8              disabledRF;\r
+       u8              reserved;\r
+       \r
+       u8              rf_rssi[4];\r
+       u8              rf_enable_rssi_th[4];\r
+       long            cck_pwdb_sta[4];\r
+}DRxPathSel;\r
+\r
+typedef enum tag_CCK_Rx_Path_Method_Definition\r
+{\r
+       CCK_Rx_Version_1 = 0,   \r
+       CCK_Rx_Version_2= 1,\r
+       CCK_Rx_Version_MAX\r
+}DM_CCK_Rx_Path_Method;\r
+\r
+\r
+typedef enum tag_DM_DbgMode_Definition\r
+{\r
+       DM_DBG_OFF = 0, \r
+       DM_DBG_ON = 1,\r
+       DM_DBG_MAX\r
+}DM_DBG_E;\r
+\r
+typedef struct tag_Tx_Config_Cmd_Format\r
+{\r
+       u32     Op;                                     
+       u32     Length;                                 
+       u32     Value;\r
+}DCMD_TXCMD_T, *PDCMD_TXCMD_T;\r
+/*------------------------------Define structure----------------------------*/ \r
+\r
+\r
+/*------------------------Export global variable----------------------------*/\r
+extern dig_t   dm_digtable;\r
+extern u8              dm_shadow[16][256];\r
+extern DRxPathSel      DM_RxPathSelTable;\r
+\r
+extern u8                      test_flag;\r
+/*------------------------Export global variable----------------------------*/\r
+\r
+\r
+/*------------------------Export Marco Definition---------------------------*/\r
+#define DM_APInitGainChangeNotify(Event) {dm_digtable.CurAPConnectState = Event;}\r
+/*------------------------Export Marco Definition---------------------------*/\r
+\r
+\r
+/*--------------------------Exported Function prototype---------------------*/\r
+/*--------------------------Exported Function prototype---------------------*/\r
+extern  void    init_hal_dm(struct net_device *dev);\r
+extern  void deinit_hal_dm(struct net_device *dev);\r
+\r
+extern void hal_dm_watchdog(struct net_device *dev);\r
+\r
+\r
+extern  void    init_rate_adaptive(struct net_device *dev);\r
+extern  void    dm_txpower_trackingcallback(void *data);\r
+\r
+#ifndef RTL8192SE\r
+extern  void    dm_cck_txpower_adjust(struct net_device *dev,bool  binch14);\r
+#endif\r
+\r
+extern  void    dm_restore_dynamic_mechanism_state(struct net_device *dev);\r
+extern  void    dm_backup_dynamic_mechanism_state(struct net_device *dev);\r
+extern  void    dm_change_dynamic_initgain_thresh(struct net_device *dev,\r
+                                                                u32             dm_type,\r
+                                                                u32             dm_value);\r
+extern  void    DM_ChangeFsyncSetting(struct net_device *dev,\r
+                                                                                                s32             DM_Type,\r
+                                                                                                s32             DM_Value);\r
+extern  void dm_force_tx_fw_info(struct net_device *dev,\r
+                                                                                u32             force_type,\r
+                                                                                u32             force_value);\r
+extern  void    dm_init_edca_turbo(struct net_device *dev);\r
+extern  void    dm_rf_operation_test_callback(unsigned long data);\r
+extern  void    dm_rf_pathcheck_workitemcallback(void *data);\r
+extern  void dm_fsync_timer_callback(unsigned long data);\r
+#if 0\r
+extern  bool    dm_check_lbus_status(struct net_device *dev);\r
+#endif\r
+extern  void dm_check_fsync(struct net_device *dev);\r
+extern  void    dm_shadow_init(struct net_device *dev);\r
+extern  void dm_initialize_txpower_tracking(struct net_device *dev);\r
+\r
+#if (defined RTL8192E || defined RTL8192SE)\r
+extern  void    dm_CheckRfCtrlGPIO(void *data);\r
+#endif\r
+\r
+\r
+#endif /*__R8192UDM_H__ */\r
+\r
+\r
+/* End of r8192U_dm.h */\r
diff --git a/ubuntu/rtl8192se/rtl_eeprom.c b/ubuntu/rtl8192se/rtl_eeprom.c
new file mode 100644 (file)
index 0000000..d3af0af
--- /dev/null
@@ -0,0 +1,140 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * Based on the r8180 driver, which is:
+ * Copyright 2004-2005 Andrea Merello <andreamrl@tiscali.it>, et al.
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+#include "rtl_core.h"
+#include "rtl_eeprom.h"
+
+void eprom_cs(struct net_device *dev, short bit)
+{
+       if(bit)
+               write_nic_byte(dev, EPROM_CMD,
+                              (1<<EPROM_CS_SHIFT) | \
+                              read_nic_byte(dev, EPROM_CMD)); 
+       else
+               write_nic_byte(dev, EPROM_CMD, read_nic_byte(dev, EPROM_CMD)\
+                              &~(1<<EPROM_CS_SHIFT)); 
+
+       udelay(EPROM_DELAY);
+}
+
+
+void eprom_ck_cycle(struct net_device *dev)
+{
+       write_nic_byte(dev, EPROM_CMD,
+                      (1<<EPROM_CK_SHIFT) | read_nic_byte(dev,EPROM_CMD)); 
+       udelay(EPROM_DELAY);
+       write_nic_byte(dev, EPROM_CMD, 
+                      read_nic_byte(dev, EPROM_CMD) &~ (1<<EPROM_CK_SHIFT)); 
+       udelay(EPROM_DELAY);
+}
+
+
+void eprom_w(struct net_device *dev,short bit)
+{
+       if(bit)
+               write_nic_byte(dev, EPROM_CMD, (1<<EPROM_W_SHIFT) | \
+                              read_nic_byte(dev,EPROM_CMD)); 
+       else
+               write_nic_byte(dev, EPROM_CMD, read_nic_byte(dev,EPROM_CMD)\
+                              &~(1<<EPROM_W_SHIFT)); 
+
+       udelay(EPROM_DELAY);
+}
+
+
+short eprom_r(struct net_device *dev)
+{
+       short bit;
+
+       bit=(read_nic_byte(dev, EPROM_CMD) & (1<<EPROM_R_SHIFT) );
+       udelay(EPROM_DELAY);
+
+       if(bit) return 1;
+       return 0;
+}
+
+
+void eprom_send_bits_string(struct net_device *dev, short b[], int len)
+{
+       int i;
+       
+       for(i=0; i<len; i++){
+               eprom_w(dev, b[i]);
+               eprom_ck_cycle(dev);
+       }
+}
+
+
+u32 eprom_read(struct net_device *dev, u32 addr)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       short read_cmd[]={1,1,0};
+       short addr_str[8];
+       int i;
+       int addr_len;
+       u32 ret;
+
+       ret=0;
+       write_nic_byte(dev, EPROM_CMD,
+                      (EPROM_CMD_PROGRAM<<EPROM_CMD_OPERATING_MODE_SHIFT)); 
+       udelay(EPROM_DELAY);
+       
+       if (priv->epromtype==EEPROM_93C56){
+               addr_str[7]=addr & 1;
+               addr_str[6]=addr & (1<<1);
+               addr_str[5]=addr & (1<<2);
+               addr_str[4]=addr & (1<<3);
+               addr_str[3]=addr & (1<<4);
+               addr_str[2]=addr & (1<<5);
+               addr_str[1]=addr & (1<<6);
+               addr_str[0]=addr & (1<<7);
+               addr_len=8;
+       }else{
+               addr_str[5]=addr & 1;
+               addr_str[4]=addr & (1<<1);
+               addr_str[3]=addr & (1<<2);
+               addr_str[2]=addr & (1<<3);
+               addr_str[1]=addr & (1<<4);
+               addr_str[0]=addr & (1<<5);
+               addr_len=6;
+       }
+       eprom_cs(dev, 1);
+       eprom_ck_cycle(dev);
+       eprom_send_bits_string(dev, read_cmd, 3);
+       eprom_send_bits_string(dev, addr_str, addr_len);
+
+       eprom_w(dev, 0); 
+       
+       for(i=0;i<16;i++){      
+               eprom_ck_cycle(dev);
+               ret |= (eprom_r(dev)<<(15-i));
+       }
+       
+       eprom_cs(dev, 0);
+       eprom_ck_cycle(dev);
+
+       write_nic_byte(dev, EPROM_CMD,
+                      (EPROM_CMD_NORMAL<<EPROM_CMD_OPERATING_MODE_SHIFT)); 
+       return ret;
+}
diff --git a/ubuntu/rtl8192se/rtl_eeprom.h b/ubuntu/rtl8192se/rtl_eeprom.h
new file mode 100644 (file)
index 0000000..347749e
--- /dev/null
@@ -0,0 +1,48 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * Based on the r8180 driver, which is:
+ * Copyright 2004-2005 Andrea Merello <andreamrl@tiscali.it>, et al.
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+
+
+#define EPROM_DELAY 10
+#if 0
+#define EPROM_ANAPARAM_ADDRLWORD 0xd 
+#define EPROM_ANAPARAM_ADDRHWORD 0xe 
+
+#define EPROM_RFCHIPID 0x6
+#define EPROM_TXPW_BASE 0x05
+#define EPROM_RFCHIPID_RTL8225U 5 
+#define EPROM_RF_PARAM 0x4
+#define EPROM_CONFIG2 0xc
+
+#define EPROM_VERSION 0x1E
+#define MAC_ADR 0x7
+
+#define CIS 0x18 
+
+#define EPROM_TXPW0 0x16 
+#define EPROM_TXPW2 0x1b
+#define EPROM_TXPW1 0x3d
+#endif
+
+u32 eprom_read(struct net_device *dev,u32 addr); 
diff --git a/ubuntu/rtl8192se/rtl_endianfree.h b/ubuntu/rtl8192se/rtl_endianfree.h
new file mode 100644 (file)
index 0000000..a697372
--- /dev/null
@@ -0,0 +1,156 @@
+#ifndef __INC_ENDIANFREE_H\r
+#define __INC_ENDIANFREE_H\r
+\r
+/*\r
+ *     Call endian free function when\r
+ *             1. Read/write packet content.\r
+ *             2. Before write integer to IO.\r
+ *             3. After read integer from IO.\r
+ */\r
+\r
+#define __MACHINE_LITTLE_ENDIAN 1234    /* LSB first: i386, vax */\r
+#define __MACHINE_BIG_ENDIAN    4321    /* MSB first: 68000, ibm, net, ppc */\r
+\r
+#define BYTE_ORDER __MACHINE_LITTLE_ENDIAN\r
+\r
+#if BYTE_ORDER == __MACHINE_LITTLE_ENDIAN\r
+#define EF1Byte(_val)                          ((u8)(_val))\r
+#define EF2Byte(_val)                          ((u16)(_val))\r
+#define EF4Byte(_val)                          ((u32)(_val))\r
+\r
+#else\r
+#define EF1Byte(_val)                          ((u8)(_val))\r
+#define EF2Byte(_val)                          (((((u16)(_val))&0x00ff)<<8)|((((u16)(_val))&0xff00)>>8))\r
+#define EF4Byte(_val)                          (((((u32)(_val))&0x000000ff)<<24)|\\r
+                                               ((((u32)(_val))&0x0000ff00)<<8)|\\r
+                                               ((((u32)(_val))&0x00ff0000)>>8)|\\r
+                                               ((((u32)(_val))&0xff000000)>>24))\r
+#endif\r
+\r
+#define ReadEF1Byte(_ptr)              EF1Byte(*((u8 *)(_ptr)))\r
+#define ReadEF2Byte(_ptr)              EF2Byte(*((u16 *)(_ptr)))\r
+#define ReadEF4Byte(_ptr)              EF4Byte(*((u32 *)(_ptr)))\r
+\r
+#define WriteEF1Byte(_ptr, _val)       (*((u8 *)(_ptr)))=EF1Byte(_val)\r
+#define WriteEF2Byte(_ptr, _val)       (*((u16 *)(_ptr)))=EF2Byte(_val)\r
+#define WriteEF4Byte(_ptr, _val)       (*((u32 *)(_ptr)))=EF4Byte(_val)                                                                        \r
+#if BYTE_ORDER == __MACHINE_LITTLE_ENDIAN\r
+#define H2N1BYTE(_val) ((u8)(_val))\r
+#define H2N2BYTE(_val) (((((u16)(_val))&0x00ff)<<8)|\\r
+                       ((((u16)(_val))&0xff00)>>8))\r
+#define H2N4BYTE(_val) (((((u32)(_val))&0x000000ff)<<24)|\\r
+                       ((((u32)(_val))&0x0000ff00)<<8) |\\r
+                       ((((u32)(_val))&0x00ff0000)>>8) |\\r
+                       ((((u32)(_val))&0xff000000)>>24))\r
+#else\r
+#define H2N1BYTE(_val)                 ((u8)(_val))\r
+#define H2N2BYTE(_val)                 ((u16)(_val))\r
+#define H2N4BYTE(_val)                 ((u32)(_val))\r
+#endif\r
+\r
+#if BYTE_ORDER == __MACHINE_LITTLE_ENDIAN\r
+#define N2H1BYTE(_val) ((u8)(_val))\r
+#define N2H2BYTE(_val) (((((u16)(_val))&0x00ff)<<8)|\\r
+                       ((((u16)(_val))&0xff00)>>8))\r
+#define N2H4BYTE(_val) (((((u32)(_val))&0x000000ff)<<24)|\\r
+                       ((((u32)(_val))&0x0000ff00)<<8) |\\r
+                       ((((u32)(_val))&0x00ff0000)>>8) |\\r
+                       ((((u32)(_val))&0xff000000)>>24))\r
+#else\r
+#define N2H1BYTE(_val)                 ((u8)(_val))\r
+#define N2H2BYTE(_val)                 ((u16)(_val))\r
+#define N2H4BYTE(_val)                 ((u32)(_val))\r
+#endif\r
+\r
+#define BIT_LEN_MASK_32(__BitLen) (0xFFFFFFFF >> (32 - (__BitLen)))\r
+#define BIT_OFFSET_LEN_MASK_32(__BitOffset, __BitLen) (BIT_LEN_MASK_32(__BitLen) << (__BitOffset)) \r
+\r
+#define LE_P4BYTE_TO_HOST_4BYTE(__pStart) (EF4Byte(*((u32 *)(__pStart))))\r
+\r
+#define LE_BITS_TO_4BYTE(__pStart, __BitOffset, __BitLen) \\r
+       ( \\r
+         ( LE_P4BYTE_TO_HOST_4BYTE(__pStart) >> (__BitOffset) ) \\r
+         & \\r
+         BIT_LEN_MASK_32(__BitLen) \\r
+       )\r
+\r
+#define LE_BITS_CLEARED_TO_4BYTE(__pStart, __BitOffset, __BitLen) \\r
+       ( \\r
+         LE_P4BYTE_TO_HOST_4BYTE(__pStart) \\r
+         & \\r
+         ( ~BIT_OFFSET_LEN_MASK_32(__BitOffset, __BitLen) ) \\r
+       )\r
+\r
+#define SET_BITS_TO_LE_4BYTE(__pStart, __BitOffset, __BitLen, __Value) \\r
+       *((u32 *)(__pStart)) = \\r
+       EF4Byte( \\r
+       LE_BITS_CLEARED_TO_4BYTE(__pStart, __BitOffset, __BitLen) \\r
+       | \\r
+       ( (((u32)__Value) & BIT_LEN_MASK_32(__BitLen)) << (__BitOffset) ) \\r
+       );\r
+\r
+\r
+#define BIT_LEN_MASK_16(__BitLen) \\r
+       (0xFFFF >> (16 - (__BitLen)))\r
+\r
+#define BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen) \\r
+       (BIT_LEN_MASK_16(__BitLen) << (__BitOffset))\r
+\r
+#define LE_P2BYTE_TO_HOST_2BYTE(__pStart) \\r
+       (EF2Byte(*((u16 *)(__pStart))))\r
+\r
+#define LE_BITS_TO_2BYTE(__pStart, __BitOffset, __BitLen) \\r
+       ( \\r
+         ( LE_P2BYTE_TO_HOST_2BYTE(__pStart) >> (__BitOffset) ) \\r
+         & \\r
+         BIT_LEN_MASK_16(__BitLen) \\r
+       )\r
+\r
+#define LE_BITS_CLEARED_TO_2BYTE(__pStart, __BitOffset, __BitLen) \\r
+       ( \\r
+         LE_P2BYTE_TO_HOST_2BYTE(__pStart) \\r
+         & \\r
+         ( ~BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen) ) \\r
+       )\r
+\r
+#define SET_BITS_TO_LE_2BYTE(__pStart, __BitOffset, __BitLen, __Value) \\r
+       *((u16 *)(__pStart)) = \\r
+       EF2Byte( \\r
+               LE_BITS_CLEARED_TO_2BYTE(__pStart, __BitOffset, __BitLen) \\r
+               | \\r
+               ( (((u16)__Value) & BIT_LEN_MASK_16(__BitLen)) << (__BitOffset) ) \\r
+       );\r
+\r
+#define BIT_LEN_MASK_8(__BitLen) \\r
+       (0xFF >> (8 - (__BitLen)))\r
+\r
+#define BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen) \\r
+       (BIT_LEN_MASK_8(__BitLen) << (__BitOffset))\r
+\r
+#define LE_P1BYTE_TO_HOST_1BYTE(__pStart) \\r
+       (EF1Byte(*((u8 *)(__pStart))))\r
+\r
+#define LE_BITS_TO_1BYTE(__pStart, __BitOffset, __BitLen) \\r
+       ( \\r
+         ( LE_P1BYTE_TO_HOST_1BYTE(__pStart) >> (__BitOffset) ) \\r
+         & \\r
+         BIT_LEN_MASK_8(__BitLen) \\r
+       )\r
+\r
+#define LE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __BitLen) \\r
+       ( \\r
+         LE_P1BYTE_TO_HOST_1BYTE(__pStart) \\r
+         & \\r
+         ( ~BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen) ) \\r
+       )\r
+\r
+#define SET_BITS_TO_LE_1BYTE(__pStart, __BitOffset, __BitLen, __Value) \\r
+       *((u8 *)(__pStart)) = \\r
+       EF1Byte( \\r
+               LE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __BitLen) \\r
+               | \\r
+               ( (((u8)__Value) & BIT_LEN_MASK_8(__BitLen)) << (__BitOffset) ) \\r
+       );\r
+\r
+#define        N_BYTE_ALIGMENT(__Value, __Aligment) ((__Aligment == 1) ? (__Value) : (((__Value + __Aligment - 1) / __Aligment) * __Aligment))\r
+#endif 
diff --git a/ubuntu/rtl8192se/rtl_ethtool.c b/ubuntu/rtl8192se/rtl_ethtool.c
new file mode 100644 (file)
index 0000000..f16fdfc
--- /dev/null
@@ -0,0 +1,59 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * Based on the r8180 driver, which is:
+ * Copyright 2004-2005 Andrea Merello <andreamrl@tiscali.it>, et al.
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+ *****************************************************************************
+ */
+#include <linux/netdevice.h>
+#include <linux/ethtool.h>
+#include <linux/delay.h>
+
+#include "rtl_core.h"
+
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) 
+static void rtl819x_ethtool_get_drvinfo(struct net_device *dev,
+               struct ethtool_drvinfo *info)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+
+       strcpy(info->driver, DRV_NAME);
+       strcpy(info->version, DRV_VERSION);
+#if defined RTL8192SE  
+       snprintf(info->fw_version, sizeof(info->fw_version), "%d",
+                       priv->pFirmware->FirmwareVersion);
+#endif 
+       strcpy(info->bus_info, pci_name(priv->pdev));
+}
+
+static u32 rtl819x_ethtool_get_link(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+
+       return ((priv->rtllib->state == RTLLIB_LINKED) || 
+               (priv->rtllib->state == RTLLIB_LINKED_SCANNING));
+}
+
+const struct ethtool_ops rtl819x_ethtool_ops = {
+       .get_drvinfo = rtl819x_ethtool_get_drvinfo,
+       .get_link = rtl819x_ethtool_get_link,
+};
+#endif
diff --git a/ubuntu/rtl8192se/rtl_mesh.c b/ubuntu/rtl8192se/rtl_mesh.c
new file mode 100644 (file)
index 0000000..74fd136
--- /dev/null
@@ -0,0 +1,357 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * Based on the r8180 driver, which is:
+ * Copyright 2004-2005 Andrea Merello <andreamrl@tiscali.it>, et al.
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+#ifdef _RTL8192_EXT_PATCH_
+
+#include <asm/uaccess.h>
+#include <linux/pci.h>
+
+#include "rtl_wx.h"
+#include "rtl_core.h"
+#include "rtl_dm.h"
+#include "rtl8192s/r8192S_phy.h"
+#include "rtl8192s/r8192S_phyreg.h"
+#include "rtl8192s/r8192S_rtl6052.h"
+#include "rtl8192s/r8192S_Efuse.h"
+#include "../../mshclass/msh_class.h"
+
+int meshdev_up(struct net_device *meshdev,bool is_silent_reset)
+{
+       struct meshdev_priv * mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(mpriv->priv->rtllib->PowerSaveControl));
+        bool init_status;
+        struct net_device *dev = ieee->dev; 
+       RT_TRACE(COMP_DOWN, "==========>%s()\n", __FUNCTION__);
+
+       mpriv->rtllib->iw_mode = IW_MODE_MESH;   
+       if(mpriv->priv->mesh_up){
+               RT_TRACE(COMP_INIT,"%s():mesh is up,return\n",__FUNCTION__);
+               return -1;
+       }
+#ifdef RTL8192SE        
+        mpriv->priv->ReceiveConfig =
+        RCR_APPFCS | RCR_APWRMGT | /*RCR_ADD3 |*/
+        RCR_AMF | RCR_ADF | RCR_APP_MIC | RCR_APP_ICV |
+       RCR_AICV | RCR_ACRC32    |                               
+        RCR_AB          | RCR_AM                |                               
+        RCR_APM         |                                                               
+        /*RCR_AAP               |*/                                                     
+        RCR_APP_PHYST_STAFF | RCR_APP_PHYST_RXFF |      
+        (mpriv->priv->EarlyRxThreshold<<RCR_FIFO_OFFSET)       ;
+
+#else
+        mpriv->priv->ReceiveConfig = RCR_ADD3  |
+                RCR_AMF | RCR_ADF |             
+                RCR_AICV |                      
+                RCR_AB | RCR_AM | RCR_APM |     
+                RCR_AAP | ((u32)7<<RCR_MXDMA_OFFSET) |
+                ((u32)7 << RCR_FIFO_OFFSET) | RCR_ONLYERLPKT;
+
+#endif
+
+       if(!mpriv->priv->up) {
+               RT_TRACE(COMP_INIT, "Bringing up iface");
+               mpriv->priv->bfirst_init = true;
+               init_status = mpriv->priv->ops->initialize_adapter(dev);
+               if(init_status != true) {
+                       RT_TRACE(COMP_ERR,"ERR!!! %s(): initialization is failed!\n",__FUNCTION__);
+                       return -1;
+               }
+               RT_TRACE(COMP_INIT, "start adapter finished\n");
+               RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC);
+               printk("==>%s():priv->up is 0\n",__FUNCTION__);
+               mpriv->rtllib->ieee_up=1;               
+               mpriv->priv->bfirst_init = false;
+#ifdef ENABLE_GPIO_RADIO_CTL
+               if(mpriv->priv->polling_timer_on == 0){
+                       check_rfctrl_gpio_timer((unsigned long)dev);
+               }
+#endif
+               mpriv->rtllib->current_network.channel = INIT_DEFAULT_CHAN;
+               mpriv->rtllib->current_mesh_network.channel = INIT_DEFAULT_CHAN;
+               if((mpriv->priv->mshobj->ext_patch_r819x_wx_set_mesh_chan) && (!is_silent_reset))
+                       mpriv->priv->mshobj->ext_patch_r819x_wx_set_mesh_chan(dev,INIT_DEFAULT_CHAN);          
+               if((mpriv->priv->mshobj->ext_patch_r819x_wx_set_channel) && (!is_silent_reset))
+               {
+                       mpriv->priv->mshobj->ext_patch_r819x_wx_set_channel(mpriv->rtllib, INIT_DEFAULT_CHAN);
+               }
+               printk("%s():set chan %d\n",__FUNCTION__,INIT_DEFAULT_CHAN);
+               mpriv->rtllib->set_chan(dev, INIT_DEFAULT_CHAN);
+               dm_InitRateAdaptiveMask(dev);
+               watch_dog_timer_callback((unsigned long) dev);
+       
+       } else {
+               rtllib_stop_scan(ieee);
+               msleep(1000);
+       }
+        if(!ieee->mesh_started) {
+#ifdef RTL8192E
+            if(ieee->eRFPowerState!=eRfOn)
+                MgntActSet_RF_State(dev, eRfOn, ieee->RfOffReason);    
+#endif
+            if(mpriv->priv->mshobj && mpriv->priv->mshobj->ext_patch_rtl819x_up )
+                mpriv->priv->mshobj->ext_patch_rtl819x_up(mpriv->priv->mshobj);
+
+
+            if(!netif_queue_stopped(meshdev))
+                netif_start_queue(meshdev);
+            else
+                netif_wake_queue(meshdev);
+
+            rtllib_reset_queue(ieee);
+       }
+               
+       mpriv->priv->mesh_up = 1;
+
+       RT_TRACE(COMP_DOWN, "<==========%s()\n", __FUNCTION__);
+       return 0;
+}
+
+int meshdev_down(struct net_device *meshdev)
+{
+       struct meshdev_priv * mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct r8192_priv *priv = (void*)ieee->priv;
+       struct net_device *dev = ieee->dev;
+       unsigned long flags = 0;
+       u8 RFInProgressTimeOut = 0;
+       if(priv->mesh_up == 0) {
+               RT_TRACE(COMP_ERR,"%s():ERR!!! mesh is already down\n",__FUNCTION__)
+               return -1;
+       }
+
+       RT_TRACE(COMP_DOWN, "==========>%s()\n", __FUNCTION__);
+       
+       if (netif_running(meshdev)) {
+               netif_stop_queue(meshdev);
+       }
+
+       if(!priv->up)
+       {
+               printk("===>%s():priv->up is 0\n",__FUNCTION__);
+               priv->bDriverIsGoingToUnload = true;    
+               ieee->ieee_up = 0;  
+               rtl8192_irq_disable(dev);
+               rtl8192_cancel_deferred_work(priv);
+#ifndef RTL8190P
+               cancel_delayed_work(&priv->rtllib->hw_wakeup_wq);
+#endif
+               deinit_hal_dm(dev);
+               del_timer_sync(&priv->watch_dog_timer); 
+
+               rtllib_softmac_stop_protocol(ieee, 1, true);
+               SPIN_LOCK_PRIV_RFPS(&priv->rf_ps_lock);
+               while(priv->RFChangeInProgress)
+               {
+                       SPIN_UNLOCK_PRIV_RFPS(&priv->rf_ps_lock);
+                       if(RFInProgressTimeOut > 100)
+                       {
+                               SPIN_LOCK_PRIV_RFPS(&priv->rf_ps_lock);
+                               break;
+                       }
+                       printk("===>%s():RF is in progress, need to wait until rf chang is done.\n",__FUNCTION__);
+                       mdelay(1);
+                       RFInProgressTimeOut ++;
+                       SPIN_LOCK_PRIV_RFPS(&priv->rf_ps_lock);
+               }
+               printk("=====>%s(): priv->RFChangeInProgress = true\n",__FUNCTION__);
+               priv->RFChangeInProgress = true;
+               SPIN_UNLOCK_PRIV_RFPS(&priv->rf_ps_lock);
+               priv->ops->stop_adapter(dev, false);
+               SPIN_LOCK_PRIV_RFPS(&priv->rf_ps_lock);
+               printk("=====>%s(): priv->RFChangeInProgress = false\n",__FUNCTION__);
+               priv->RFChangeInProgress = false;
+               SPIN_UNLOCK_PRIV_RFPS(&priv->rf_ps_lock);
+               udelay(100);
+               memset(&priv->rtllib->current_network, 0 , offsetof(struct rtllib_network, list));
+               priv->rtllib->current_network.channel = INIT_DEFAULT_CHAN;
+#ifdef CONFIG_ASPM_OR_D3
+               RT_ENABLE_ASPM(dev);
+#endif
+               memset(&ieee->current_mesh_network, 0 , offsetof(struct rtllib_network, list));
+               priv->rtllib->current_mesh_network.channel = INIT_DEFAULT_CHAN;
+               ieee->mesh_state = RTLLIB_NOLINK;
+       } else {
+               rtllib_softmac_stop_protocol(ieee, 1, true);
+               memset(&ieee->current_mesh_network, 0 , offsetof(struct rtllib_network, list));
+               if((ieee->current_network.channel > 0) && (ieee->current_network.channel < 15))
+                       priv->rtllib->current_mesh_network.channel = ieee->current_network.channel;
+               else
+                       priv->rtllib->current_mesh_network.channel = INIT_DEFAULT_CHAN;
+               printk("============>%s():priv->rtllib->current_mesh_network.channel is %d,ieee->current_network.channel is %d\n",__FUNCTION__,priv->rtllib->current_mesh_network.channel,ieee->current_network.channel);
+                               
+               ieee->mesh_state = RTLLIB_NOLINK;
+               ieee->iw_mode = IW_MODE_INFRA;
+       }
+       priv->mesh_up = 0;  
+       RT_TRACE(COMP_DOWN, "<==========%s()\n", __FUNCTION__);
+
+       return 0;
+}
+
+static int meshdev_open(struct net_device *meshdev)
+{
+       struct meshdev_priv * mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct r8192_priv *priv = (void*)ieee->priv;
+       int ret;
+       
+       SEM_DOWN_PRIV_WX(&priv->wx_sem);        
+       ret = meshdev_up(meshdev,false);
+       SEM_UP_PRIV_WX(&priv->wx_sem);  
+
+       return ret;
+}
+
+static int meshdev_close(struct net_device *meshdev)
+{
+       struct meshdev_priv * mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct r8192_priv *priv = (void *)ieee->priv;
+       int ret;
+       
+       SEM_DOWN_PRIV_WX(&priv->wx_sem);        
+       ret = meshdev_down(meshdev);
+       SEM_UP_PRIV_WX(&priv->wx_sem);  
+       
+       return ret;
+}
+
+extern int meshdev_wx_mesh(struct net_device *meshdev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra);
+static int meshdev_ioctl(struct net_device *meshdev, struct ifreq *rq, int cmd)
+{
+       struct iwreq *wrq = (struct iwreq *)rq;
+       int ret = -1;
+       if(cmd == 0x8BEE)
+       {
+               ret = meshdev_wx_mesh(meshdev, NULL, &(wrq->u), wrq->u.data.pointer);
+       }
+       return ret;
+}
+
+struct net_device_stats *meshdev_stats(struct net_device *meshdev)
+{
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) 
+       return &((struct meshdev_priv*)netdev_priv(meshdev))->stats;
+#else
+       return &((struct meshdev_priv*)meshdev->priv)->stats;
+#endif
+}
+
+static int meshdev_tx(struct sk_buff *skb, struct net_device *meshdev)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device * ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+
+       memset(skb->cb,0,sizeof(skb->cb));
+       
+       return rtllib_mesh_xmit(skb, dev);      
+}
+
+static void meshdev_tx_timeout(struct net_device *meshdev)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device * ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+
+       tx_timeout(dev);        
+}
+
+#ifdef HAVE_NET_DEVICE_OPS
+static const struct net_device_ops mesh_netdev_ops = {
+       .ndo_open = meshdev_open,
+       .ndo_stop = meshdev_close,
+       .ndo_get_stats = meshdev_stats,
+       .ndo_tx_timeout = meshdev_tx_timeout,
+       .ndo_do_ioctl = meshdev_ioctl,
+       .ndo_start_xmit = meshdev_tx,
+};
+#endif
+
+void meshdev_init(struct net_device* meshdev)
+{
+       struct meshdev_priv *mpriv;
+       ether_setup(meshdev);
+
+#ifdef HAVE_NET_DEVICE_OPS
+       meshdev->netdev_ops = &mesh_netdev_ops;
+#else  
+       meshdev->open = meshdev_open;
+       meshdev->stop = meshdev_close;
+       meshdev->tx_timeout = meshdev_tx_timeout;
+       meshdev->do_ioctl = meshdev_ioctl;
+       meshdev->get_stats = meshdev_stats;
+       meshdev->hard_start_xmit = meshdev_tx;
+#endif 
+       meshdev->wireless_handlers = &meshdev_wx_handlers_def;
+       meshdev->destructor = free_netdev;
+       meshdev->watchdog_timeo = HZ*3; 
+       meshdev->type = ARPHRD_ETHER; 
+       memset(meshdev->broadcast,0xFF, ETH_ALEN);
+       
+       meshdev->watchdog_timeo = 3 * HZ;
+
+       mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       memset(mpriv, 0, sizeof(struct meshdev_priv));
+
+       return;
+}
+
+int meshdev_update_ext_chnl_offset_as_client(void *data)
+{
+       struct rtllib_device *ieee = container_of_work_rsl(data, struct rtllib_device,
+                       ext_update_extchnloffset_wq);
+       struct r8192_priv *priv = (void *)ieee->priv;
+       struct net_device *dev = ieee->dev;
+       struct mshclass *mshobj= priv->mshobj;
+       u8 updateBW = 0;
+       u8 bserverHT = 0;
+
+       updateBW=mshobj->ext_patch_r819x_wx_update_beacon(dev,&bserverHT);
+       printk("$$$$$$ Cur_networ.chan=%d, cur_mesh_net.chan=%d,bserverHT=%d\n",
+                       ieee->current_network.channel,ieee->current_mesh_network.channel,bserverHT);
+       if (updateBW == 1) {
+               if (bserverHT == 0) {
+                       printk("===>server is not HT supported,set 20M\n");
+                       HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, HT_EXTCHNL_OFFSET_NO_EXT);  
+               } else {
+                       printk("===>updateBW is 1,bCurBW40MHz is %d,ieee->serverExtChlOffset is %d\n",
+                                       ieee->pHTInfo->bCurBW40MHz,ieee->serverExtChlOffset);
+                       if (ieee->pHTInfo->bCurBW40MHz)
+                               HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20_40, ieee->serverExtChlOffset);  
+                       else
+                               HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, ieee->serverExtChlOffset);  
+               }
+       } else {
+               printk("===>there is no same hostname server, ERR!!!\n");
+               return -1;
+       }
+       return 0;
+}
+
+#endif 
diff --git a/ubuntu/rtl8192se/rtl_mesh.h b/ubuntu/rtl8192se/rtl_mesh.h
new file mode 100644 (file)
index 0000000..6f6d297
--- /dev/null
@@ -0,0 +1,39 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * Based on the r8180 driver, which is:
+ * Copyright 2004-2005 Andrea Merello <andreamrl@tiscali.it>, et al.
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+#ifdef _RTL8192_EXT_PATCH_
+#ifndef _RTL_MESH_H
+#define _RTL_MESH_H
+
+struct net_device;
+struct net_device_stats;
+
+int meshdev_up(struct net_device *meshdev,bool is_silent_reset);
+int meshdev_down(struct net_device *meshdev);
+struct net_device_stats *meshdev_stats(struct net_device *meshdev);
+void meshdev_init(struct net_device* meshdev);
+
+int meshdev_update_ext_chnl_offset_as_client(void *data);
+#endif
+#endif
diff --git a/ubuntu/rtl8192se/rtl_pm.c b/ubuntu/rtl8192se/rtl_pm.c
new file mode 100644 (file)
index 0000000..022adce
--- /dev/null
@@ -0,0 +1,190 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+
+#ifdef CONFIG_PM_RTL
+#ifdef RTL8192CE
+#include "rtl_core.h"
+#include "rtl8192c/r8192C_hw.h"
+#include "rtl8192c/r8192C_phy.h"
+#include "rtl8192c/r8192C_phyreg.h"
+#include "rtl8192c/r8192C_rtl6052.h"
+#elif defined RTL8192SE
+#include "rtl_core.h"
+#include "rtl8192s/r8192S_hw.h"
+#include "rtl8192s/r8192S_phy.h"
+#include "rtl8192s/r8192S_phyreg.h"
+#include "rtl8192s/r8192S_rtl6052.h"
+#else
+#include "rtl_core.h"
+#include "rtl8192e/r8192E_hw.h"
+#include "rtl8192e/r8190P_rtl8256.h"
+#endif
+#include "rtl_pm.h"
+
+int rtl8192E_save_state (struct pci_dev *dev, pm_message_t state)
+{
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10))
+        printk(KERN_NOTICE "r8192E save state call (state %u).\n", state);
+#else
+        printk(KERN_NOTICE "r8192E save state call (state %u).\n", state.event);
+#endif
+       return(-EAGAIN);
+}
+
+
+int rtl8192E_suspend (struct pci_dev *pdev, pm_message_t state)
+{
+       struct net_device *dev = pci_get_drvdata(pdev);
+       struct r8192_priv *priv = rtllib_priv(dev); 
+
+        RT_TRACE(COMP_POWER, "============> r8192E suspend call.\n");
+        printk("============> r8192E suspend call.\n");
+#ifdef ENABLE_GPIO_RADIO_CTL
+       del_timer_sync(&priv->gpio_polling_timer);
+       cancel_delayed_work(&priv->gpio_change_rf_wq);
+       priv->polling_timer_on = 0;
+#endif
+
+        if (!netif_running(dev)){
+            printk("RTL819XE:UI is open out of suspend function\n");
+            goto out_pci_suspend;
+        }
+
+#ifdef HAVE_NET_DEVICE_OPS
+       if (dev->netdev_ops->ndo_stop)
+               dev->netdev_ops->ndo_stop(dev);
+#else
+       dev->stop(dev);
+#endif 
+       netif_device_detach(dev);
+
+#if !(defined RTL8192SE || defined RTL8192CE)          
+       if(!priv->rtllib->bSupportRemoteWakeUp) {
+               MgntActSet_RF_State(dev, eRfOff, RF_CHANGE_BY_INIT);
+               ulRegRead = read_nic_dword(dev, CPU_GEN);       
+               ulRegRead|=CPU_GEN_SYSTEM_RESET;
+               write_nic_dword(dev, CPU_GEN, ulRegRead);
+       } else {
+               write_nic_dword(dev, WFCRC0, 0xffffffff);
+               write_nic_dword(dev, WFCRC1, 0xffffffff);
+               write_nic_dword(dev, WFCRC2, 0xffffffff);
+#ifdef RTL8190P
+               ucRegRead = read_nic_byte(dev, GPO);
+               ucRegRead |= BIT0;
+               write_nic_byte(dev, GPO, ucRegRead);
+#endif                 
+               write_nic_byte(dev, PMR, 0x5);
+               write_nic_byte(dev, MacBlkCtrl, 0xa);
+       }
+#endif
+out_pci_suspend:
+       RT_TRACE(COMP_POWER, "r8192E support WOL call??????????????????????\n");
+       printk("r8192E support WOL call??????????????????????\n");
+       if(priv->rtllib->bSupportRemoteWakeUp) {
+               RT_TRACE(COMP_POWER, "r8192E support WOL call!!!!!!!!!!!!!!!!!!.\n");
+       }
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10))
+       pci_save_state(pdev,&(priv->pci_state));
+        pci_disable_device(pdev);
+        pci_enable_wake(pdev, state,\
+                        priv->rtllib->bSupportRemoteWakeUp?1:0);
+        pci_set_power_state(pdev,state);
+#else
+       pci_save_state(pdev);
+       pci_disable_device(pdev);
+       pci_enable_wake(pdev, pci_choose_state(pdev,state),\
+                       priv->rtllib->bSupportRemoteWakeUp?1:0);
+       pci_set_power_state(pdev,pci_choose_state(pdev,state));
+#endif
+
+        mdelay(20);
+
+       return 0;
+}
+
+int rtl8192E_resume (struct pci_dev *pdev)
+{
+    struct net_device *dev = pci_get_drvdata(pdev);
+#ifdef ENABLE_GPIO_RADIO_CTL
+    struct r8192_priv *priv = rtllib_priv(dev); 
+#endif
+    int err;
+    u32 val;
+
+    RT_TRACE(COMP_POWER, "================>r8192E resume call.");
+    printk("================>r8192E resume call.\n");
+
+    pci_set_power_state(pdev, PCI_D0);
+
+    err = pci_enable_device(pdev);
+    if(err) {
+        printk(KERN_ERR "%s: pci_enable_device failed on resume\n",
+                dev->name);
+        return err;
+    }
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10))
+    pci_restore_state(pdev,&(priv->pci_state));
+#else
+    pci_restore_state(pdev);
+#endif
+
+    pci_read_config_dword(pdev, 0x40, &val);
+    if ((val & 0x0000ff00) != 0) {
+        pci_write_config_dword(pdev, 0x40, val & 0xffff00ff);
+    }
+
+    pci_enable_wake(pdev, PCI_D0, 0);
+
+#ifdef ENABLE_GPIO_RADIO_CTL
+    if(priv->polling_timer_on == 0){
+        check_rfctrl_gpio_timer((unsigned long)dev);
+    }
+#endif
+
+    if(!netif_running(dev)){
+        printk("RTL819XE:UI is open out of resume function\n");
+        goto out;
+    }
+
+    netif_device_attach(dev);
+#ifdef HAVE_NET_DEVICE_OPS
+    if (dev->netdev_ops->ndo_open)
+           dev->netdev_ops->ndo_open(dev);
+#else
+    dev->open(dev);
+#endif    
+out:
+    RT_TRACE(COMP_POWER, "<================r8192E resume call.\n");
+    return 0;
+}
+
+
+int rtl8192E_enable_wake (struct pci_dev *dev, pm_message_t state, int enable)
+{
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10))
+        printk(KERN_NOTICE "r8192E enable wake call (state %u, enable %d).\n", 
+              state, enable);
+#else
+        printk(KERN_NOTICE "r8192E enable wake call (state %u, enable %d).\n", 
+              state.event, enable);
+#endif
+       return(-EAGAIN);
+}
+
+#endif 
diff --git a/ubuntu/rtl8192se/rtl_pm.h b/ubuntu/rtl8192se/rtl_pm.h
new file mode 100644 (file)
index 0000000..680e2bc
--- /dev/null
@@ -0,0 +1,39 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+
+#ifdef CONFIG_PM_RTL
+
+#ifndef R8192E_PM_H
+#define R8192E_PM_H
+
+#include <linux/types.h>
+#include <linux/pci.h>
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10))
+#define pm_message_t u32
+#endif
+
+int rtl8192E_save_state (struct pci_dev *dev, pm_message_t state);
+int rtl8192E_suspend (struct pci_dev *dev, pm_message_t state);
+int rtl8192E_resume (struct pci_dev *dev);
+int rtl8192E_enable_wake (struct pci_dev *dev, pm_message_t state, int enable);
+
+#endif 
+
+#endif 
diff --git a/ubuntu/rtl8192se/rtl_ps.c b/ubuntu/rtl8192se/rtl_ps.c
new file mode 100644 (file)
index 0000000..84be98d
--- /dev/null
@@ -0,0 +1,700 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * Based on the r8180 driver, which is:
+ * Copyright 2004-2005 Andrea Merello <andreamrl@tiscali.it>, et al.
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+ *****************************************************************************/
+#include "rtl_ps.h"
+#include "rtl_core.h"
+#ifdef RTL8192CE
+#include "rtl8192c/r8192C_phy.h"
+#include "rtl8192c/r8192C_phyreg.h"
+#include "rtl8192c/r8192C_rtl6052.h"
+#include "rtl8192c/r8192C_Efuse.h"
+#elif defined RTL8192SE
+#include "rtl8192s/r8192S_phy.h"
+#include "rtl8192s/r8192S_phyreg.h"
+#include "rtl8192s/r8192S_rtl6052.h"
+#include "rtl8192s/r8192S_Efuse.h"
+#else
+#include "rtl8192e/r8192E_phy.h"
+#include "rtl8192e/r8192E_phyreg.h"
+#include "rtl8192e/r8190P_rtl8256.h" /* RTL8225 Radio frontend */
+#include "rtl8192e/r8192E_cmdpkt.h"
+#endif
+
+#if defined(RTL8192E) || defined(RTL8192SE) || defined RTL8192CE
+void rtl8192_hw_sleep_down(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       unsigned long flags = 0;
+#ifdef CONFIG_ASPM_OR_D3
+       PRT_POWER_SAVE_CONTROL  pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl));
+#endif 
+       spin_lock_irqsave(&priv->rf_ps_lock,flags);
+       if (priv->RFChangeInProgress) {
+               spin_unlock_irqrestore(&priv->rf_ps_lock,flags);
+               RT_TRACE(COMP_RF, "rtl8192_hw_sleep_down(): RF Change in progress! \n");
+               printk("rtl8192_hw_sleep_down(): RF Change in progress!\n");
+               return;
+       }
+       spin_unlock_irqrestore(&priv->rf_ps_lock,flags);
+       RT_TRACE(COMP_PS, "%s()============>come to sleep down\n", __FUNCTION__);
+
+#ifdef CONFIG_RTLWIFI_DEBUGFS  
+       if(priv->debug->hw_holding) {
+               return;
+       }
+#endif 
+       MgntActSet_RF_State(dev, eRfSleep, RF_CHANGE_BY_PS);
+#ifdef CONFIG_ASPM_OR_D3
+       if(pPSC->RegRfPsLevel & RT_RF_LPS_LEVEL_ASPM)
+       {
+               RT_ENABLE_ASPM(dev);
+               RT_SET_PS_LEVEL(pPSC, RT_RF_LPS_LEVEL_ASPM);
+       }
+#endif
+}
+
+void rtl8192_hw_sleep_wq(void *data)
+{
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20))
+       struct rtllib_device *ieee = container_of_dwork_rsl(data,struct rtllib_device,hw_sleep_wq);
+       struct net_device *dev = ieee->dev;
+#else
+       struct net_device *dev = (struct net_device *)data;
+#endif
+        rtl8192_hw_sleep_down(dev);
+}
+
+void rtl8192_hw_wakeup(struct net_device* dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       unsigned long flags = 0;
+#ifdef CONFIG_ASPM_OR_D3
+       PRT_POWER_SAVE_CONTROL  pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl));
+#endif 
+       spin_lock_irqsave(&priv->rf_ps_lock,flags);
+       if (priv->RFChangeInProgress) {
+               spin_unlock_irqrestore(&priv->rf_ps_lock,flags);
+               RT_TRACE(COMP_RF, "rtl8192_hw_wakeup(): RF Change in progress! \n");
+               printk("rtl8192_hw_wakeup(): RF Change in progress! schedule wake up task again\n");
+               queue_delayed_work_rsl(priv->rtllib->wq,&priv->rtllib->hw_wakeup_wq,MSECS(10));
+               return;
+       }
+       spin_unlock_irqrestore(&priv->rf_ps_lock,flags);
+#ifdef CONFIG_ASPM_OR_D3
+       if (pPSC->RegRfPsLevel & RT_RF_LPS_LEVEL_ASPM) {
+               RT_DISABLE_ASPM(dev);
+               RT_CLEAR_PS_LEVEL(pPSC, RT_RF_LPS_LEVEL_ASPM);
+       }
+#endif
+       RT_TRACE(COMP_PS, "%s()============>come to wake up\n", __FUNCTION__);
+       MgntActSet_RF_State(dev, eRfOn, RF_CHANGE_BY_PS);
+}
+
+void rtl8192_hw_wakeup_wq(void *data)
+{
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20))
+       struct rtllib_device *ieee = container_of_dwork_rsl(data,struct rtllib_device,hw_wakeup_wq);  
+       struct net_device *dev = ieee->dev;
+#else
+       struct net_device *dev = (struct net_device *)data;
+#endif
+       rtl8192_hw_wakeup(dev);
+
+}
+
+#define MIN_SLEEP_TIME 50
+#define MAX_SLEEP_TIME 10000
+void rtl8192_hw_to_sleep(struct net_device *dev, u32 th, u32 tl)
+{
+#ifdef _RTL8192_EXT_PATCH_
+       struct r8192_priv *priv = rtllib_priv(dev);
+       u32 rb = jiffies, sleep_cost = MSECS(8+16+7), delta = 0;
+       unsigned long flags;
+
+       if((tl > rb) && (th > 0))
+               return;
+
+       spin_lock_irqsave(&priv->ps_lock,flags);
+
+       if (tl >= sleep_cost)
+               tl -= sleep_cost;
+       else if (th > 0) {
+               tl = 0xffffffff - sleep_cost + tl;  
+               th--;
+       } else {
+               spin_unlock_irqrestore(&priv->ps_lock,flags);
+               return;
+       }
+
+       if (tl > rb) {
+               delta = tl - rb;
+       } else if (th > 0) {
+               delta = 0xffffffff - rb + tl;
+               th --;
+       } else {
+               spin_unlock_irqrestore(&priv->ps_lock,flags);
+               return;
+       }
+
+       if (delta <= MSECS(MIN_SLEEP_TIME)) {
+               spin_unlock_irqrestore(&priv->ps_lock,flags);
+               printk("too short to sleep::%x, %x, %lx\n",tl, rb,  MSECS(MIN_SLEEP_TIME));
+               return;
+       }       
+
+       if(delta > MSECS(MAX_SLEEP_TIME)) {
+               spin_unlock_irqrestore(&priv->ps_lock,flags);
+               printk("========>too long to sleep:%x, %x, %lx\n", tl, rb,  MSECS(MAX_SLEEP_TIME));
+               return;
+       }
+
+       RT_TRACE(COMP_LPS, "==============>%s(): wake up time is %d,%d\n",__FUNCTION__,delta,jiffies_to_msecs(delta));
+       queue_delayed_work_rsl(priv->rtllib->wq,&priv->rtllib->hw_wakeup_wq,delta); 
+       queue_delayed_work_rsl(priv->rtllib->wq, (void *)&priv->rtllib->hw_sleep_wq,0);
+
+       spin_unlock_irqrestore(&priv->ps_lock,flags);
+#else
+       struct r8192_priv *priv = rtllib_priv(dev);
+
+       u32 rb = jiffies;
+       unsigned long flags;
+
+       spin_lock_irqsave(&priv->ps_lock,flags);
+
+       tl -= MSECS(8+16+7);
+
+       if(((tl>=rb)&& (tl-rb) <= MSECS(MIN_SLEEP_TIME))
+                       ||((rb>tl)&& (rb-tl) < MSECS(MIN_SLEEP_TIME))) {
+               spin_unlock_irqrestore(&priv->ps_lock,flags);
+               printk("too short to sleep::%x, %x, %lx\n",tl, rb,  MSECS(MIN_SLEEP_TIME));
+               return;
+       }       
+
+       if(((tl > rb) && ((tl-rb) > MSECS(MAX_SLEEP_TIME)))||
+                       ((tl < rb) && (tl>MSECS(69)) && ((rb-tl) > MSECS(MAX_SLEEP_TIME)))||
+                       ((tl<rb)&&(tl<MSECS(69))&&((tl+0xffffffff-rb)>MSECS(MAX_SLEEP_TIME)))) {
+               printk("========>too long to sleep:%x, %x, %lx\n", tl, rb,  MSECS(MAX_SLEEP_TIME));
+               spin_unlock_irqrestore(&priv->ps_lock,flags);
+               return;
+       }
+       {
+               u32 tmp = (tl>rb)?(tl-rb):(rb-tl);
+               queue_delayed_work_rsl(priv->rtllib->wq,
+                               &priv->rtllib->hw_wakeup_wq,tmp); 
+       }
+       queue_delayed_work_rsl(priv->rtllib->wq, 
+                       (void *)&priv->rtllib->hw_sleep_wq,0);
+       spin_unlock_irqrestore(&priv->ps_lock,flags);
+#endif
+}
+#endif
+
+#ifdef ENABLE_IPS
+void InactivePsWorkItemCallback(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       PRT_POWER_SAVE_CONTROL  pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl));
+
+       RT_TRACE(COMP_PS, "InactivePsWorkItemCallback() ---------> \n");                        
+       pPSC->bSwRfProcessing = true;
+
+       RT_TRACE(COMP_PS, "InactivePsWorkItemCallback(): Set RF to %s.\n", \
+                       pPSC->eInactivePowerState == eRfOff?"OFF":"ON");
+#ifdef CONFIG_ASPM_OR_D3
+       if(pPSC->eInactivePowerState == eRfOn)
+       {
+
+               if((pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_ASPM) && RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_ASPM))
+               {
+                       RT_DISABLE_ASPM(dev);
+                       RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_ASPM);
+               }
+#ifdef TODO            
+               else if((pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_PCI_D3) && RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_PCI_D3))
+               {
+                       RT_LEAVE_D3(dev, false);
+                       RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_PCI_D3);
+               }
+#endif         
+       }
+#endif
+       MgntActSet_RF_State(dev, pPSC->eInactivePowerState, RF_CHANGE_BY_IPS);
+
+#ifdef CONFIG_ASPM_OR_D3
+       if(pPSC->eInactivePowerState == eRfOff)
+       {
+               if(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_ASPM)
+               {
+                       RT_ENABLE_ASPM(dev);
+                       RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_ASPM);
+               }
+#ifdef TODO            
+               else if(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_PCI_D3)
+               {
+                       RT_ENTER_D3(dev, false);
+                       RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_PCI_D3);
+               }
+#endif         
+       }
+#endif
+       
+#if 0
+       if(pPSC->eInactivePowerState == eRfOn)
+       {
+               while( index < 4 )
+               {
+                       if( ( pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == WEP104_Encryption ) ||
+                               (pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == WEP40_Encryption) )
+                       {
+                               if( pMgntInfo->SecurityInfo.KeyLen[index] != 0)
+                               pAdapter->HalFunc.SetKeyHandler(pAdapter, index, 0, false, pMgntInfo->SecurityInfo.PairwiseEncAlgorithm, true, false);
+
+                       }
+                       index++;
+               }
+       }
+#endif
+       pPSC->bSwRfProcessing = false;  
+       RT_TRACE(COMP_PS, "InactivePsWorkItemCallback() <--------- \n");                        
+}
+
+void
+IPSEnter(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       PRT_POWER_SAVE_CONTROL          pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl));
+       RT_RF_POWER_STATE                       rtState;
+
+       if (pPSC->bInactivePs)
+       {
+               rtState = priv->rtllib->eRFPowerState;
+               if (rtState == eRfOn && !pPSC->bSwRfProcessing &&\
+                       (priv->rtllib->state != RTLLIB_LINKED)&&\
+                       (priv->rtllib->iw_mode != IW_MODE_MASTER))
+               {
+                       RT_TRACE(COMP_PS,"IPSEnter(): Turn off RF.\n");
+                       pPSC->eInactivePowerState = eRfOff;
+                       priv->isRFOff = true;
+                       priv->bInPowerSaveMode = true;
+                       InactivePsWorkItemCallback(dev);
+               }
+       }       
+}
+
+void
+IPSLeave(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       PRT_POWER_SAVE_CONTROL  pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl));
+       RT_RF_POWER_STATE       rtState;
+
+       if (pPSC->bInactivePs)
+       {       
+               rtState = priv->rtllib->eRFPowerState;  
+               if (rtState != eRfOn  && !pPSC->bSwRfProcessing && priv->rtllib->RfOffReason <= RF_CHANGE_BY_IPS)
+               {
+                       RT_TRACE(COMP_PS, "IPSLeave(): Turn on RF.\n");
+                       pPSC->eInactivePowerState = eRfOn;
+                       priv->bInPowerSaveMode = false;
+                       InactivePsWorkItemCallback(dev);
+               }
+       }
+}
+void IPSLeave_wq(void *data)
+{
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20))
+       struct rtllib_device *ieee = container_of_work_rsl(data,struct rtllib_device,ips_leave_wq);
+       struct net_device *dev = ieee->dev;
+#else
+       struct net_device *dev = (struct net_device *)data;
+#endif
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       down(&priv->rtllib->ips_sem);
+       IPSLeave(dev);  
+       up(&priv->rtllib->ips_sem);     
+}
+void rtllib_ips_leave_wq(struct net_device *dev)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       RT_RF_POWER_STATE       rtState;
+       rtState = priv->rtllib->eRFPowerState;
+
+       if(priv->rtllib->PowerSaveControl.bInactivePs){ 
+               if(rtState == eRfOff){
+                       if(priv->rtllib->RfOffReason > RF_CHANGE_BY_IPS)
+                       {
+                               RT_TRACE(COMP_ERR, "%s(): RF is OFF.\n",__FUNCTION__);
+                               return;
+                       }
+                       else{
+                               printk("=========>%s(): IPSLeave\n",__FUNCTION__);
+                               queue_work_rsl(priv->rtllib->wq,&priv->rtllib->ips_leave_wq);                           
+                       }
+               }
+       }
+}
+void rtllib_ips_leave(struct net_device *dev)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       down(&priv->rtllib->ips_sem);
+       IPSLeave(dev);  
+       up(&priv->rtllib->ips_sem);     
+}
+#endif
+
+#ifdef ENABLE_LPS
+bool MgntActSet_802_11_PowerSaveMode(struct net_device *dev,   u8 rtPsMode)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+
+#ifdef _RTL8192_EXT_PATCH_
+       if((priv->rtllib->iw_mode == IW_MODE_ADHOC) || (priv->rtllib->iw_mode == IW_MODE_MASTER)
+               || (priv->rtllib->iw_mode == IW_MODE_MESH))     
+#else
+       if(priv->rtllib->iw_mode == IW_MODE_ADHOC)      
+#endif
+       {
+               return false;
+       }
+
+       
+       RT_TRACE(COMP_LPS,"%s(): set ieee->ps = %x\n",__FUNCTION__,rtPsMode);
+       if(!priv->ps_force) {
+               priv->rtllib->ps = rtPsMode;
+       }
+#if 0
+       priv->rtllib->dot11PowerSaveMode = rtPsMode;
+
+       if(priv->rtllib->dot11PowerSaveMode == eMaxPs)
+       {
+       }
+       else
+       {
+       }
+#endif
+       if(priv->rtllib->sta_sleep != 0 && rtPsMode == RTLLIB_PS_DISABLED)
+       {
+                unsigned long flags;
+
+               rtl8192_hw_wakeup(dev);
+               priv->rtllib->sta_sleep = 0;
+
+                spin_lock_irqsave(&(priv->rtllib->mgmt_tx_lock), flags);
+               printk("LPS leave: notify AP we are awaked ++++++++++ SendNullFunctionData\n");
+               rtllib_sta_ps_send_null_frame(priv->rtllib, 0);
+                spin_unlock_irqrestore(&(priv->rtllib->mgmt_tx_lock), flags);
+       }
+
+#if 0
+       if((pPSC->bFwCtrlLPS) && (pPSC->bLeisurePs))
+       {       
+               if(priv->rtllib->dot11PowerSaveMode == eActive)
+               {
+                       RpwmVal = 0x0C; 
+                       FwPwrMode = FW_PS_ACTIVE_MODE;
+                       Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_SET_RPWM, (pu1Byte)(&RpwmVal));
+                       Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_H2C_FW_PWRMODE, (pu1Byte)(&FwPwrMode));
+               }
+               else
+               {
+                       if(GetFwLPS_Doze(Adapter))
+                       {
+                               RpwmVal = 0x02; 
+                               Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_H2C_FW_PWRMODE, (pu1Byte)(&pPSC->FWCtrlPSMode));
+                               Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_SET_RPWM, (pu1Byte)(&RpwmVal));
+                       }
+                       else
+                       {
+                               pMgntInfo->dot11PowerSaveMode = eActive;
+                               Adapter->bInPowerSaveMode = false;      
+                       }
+               }
+       }
+#endif
+       return true;
+}
+
+
+void LeisurePSEnter(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl));
+
+       RT_TRACE(COMP_PS, "LeisurePSEnter()...\n");
+       RT_TRACE(COMP_PS, "pPSC->bLeisurePs = %d, ieee->ps = %d,pPSC->LpsIdleCount is %d,RT_CHECK_FOR_HANG_PERIOD is %d\n", 
+               pPSC->bLeisurePs, priv->rtllib->ps,pPSC->LpsIdleCount,RT_CHECK_FOR_HANG_PERIOD);
+
+#ifdef _RTL8192_EXT_PATCH_
+       if(!((priv->rtllib->iw_mode == IW_MODE_INFRA) && (priv->rtllib->state == RTLLIB_LINKED))
+               || (priv->rtllib->iw_mode == IW_MODE_ADHOC) || (priv->rtllib->iw_mode == IW_MODE_MASTER)
+               || (priv->rtllib->iw_mode == IW_MODE_MESH))
+#else
+       if(!((priv->rtllib->iw_mode == IW_MODE_INFRA) && (priv->rtllib->state == RTLLIB_LINKED))
+               || (priv->rtllib->iw_mode == IW_MODE_ADHOC) || (priv->rtllib->iw_mode == IW_MODE_MASTER))
+#endif
+               return;
+
+       if (pPSC->bLeisurePs)
+       {
+               if(pPSC->LpsIdleCount >= RT_CHECK_FOR_HANG_PERIOD) 
+               {
+       
+                       if(priv->rtllib->ps == RTLLIB_PS_DISABLED)
+                       {
+
+                               RT_TRACE(COMP_LPS, "LeisurePSEnter(): Enter 802.11 power save mode...\n");
+
+                               if(!pPSC->bFwCtrlLPS)
+                               {
+                                       if (priv->rtllib->SetFwCmdHandler)
+                                       {
+                                               priv->rtllib->SetFwCmdHandler(dev, FW_CMD_LPS_ENTER);
+                                       } 
+                               }       
+                               MgntActSet_802_11_PowerSaveMode(dev, RTLLIB_PS_MBCAST|RTLLIB_PS_UNICAST);
+
+                               /*if(pPSC->RegRfPsLevel & RT_RF_LPS_LEVEL_ASPM)
+                               {
+                                       RT_ENABLE_ASPM(pAdapter);
+                                       RT_SET_PS_LEVEL(pAdapter, RT_RF_LPS_LEVEL_ASPM);
+                               }*/
+
+                       }       
+               }
+               else
+                       pPSC->LpsIdleCount++;
+       }       
+}
+
+
+void LeisurePSLeave(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl));
+
+
+       RT_TRACE(COMP_PS, "LeisurePSLeave()...\n");
+       RT_TRACE(COMP_PS, "pPSC->bLeisurePs = %d, ieee->ps = %d\n", 
+               pPSC->bLeisurePs, priv->rtllib->ps);
+
+       if (pPSC->bLeisurePs)
+       {       
+               if(priv->rtllib->ps != RTLLIB_PS_DISABLED)
+               {
+#ifdef CONFIG_ASPM_OR_D3
+                       if(pPSC->RegRfPsLevel & RT_RF_LPS_LEVEL_ASPM && RT_IN_PS_LEVEL(pPSC, RT_RF_LPS_LEVEL_ASPM))
+                       {
+                               RT_DISABLE_ASPM(dev);
+                               RT_CLEAR_PS_LEVEL(pPSC, RT_RF_LPS_LEVEL_ASPM);
+                       } 
+#endif
+                       RT_TRACE(COMP_LPS, "LeisurePSLeave(): Busy Traffic , Leave 802.11 power save..\n");
+                       MgntActSet_802_11_PowerSaveMode(dev, RTLLIB_PS_DISABLED);
+
+                       if(!pPSC->bFwCtrlLPS) 
+                       {
+                               if (priv->rtllib->SetFwCmdHandler)
+                               {
+                                       priv->rtllib->SetFwCmdHandler(dev, FW_CMD_LPS_LEAVE);
+                               } 
+                    }
+               }
+       }
+}
+#endif
+
+#ifdef CONFIG_ASPM_OR_D3
+bool PlatformSwitchDevicePciASPM(struct net_device *dev, u8 value)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       bool bResult = false;
+
+       pci_write_config_byte(priv->pdev, priv->ASPMRegOffset, value);
+       udelay(100);
+
+       return bResult;
+}
+
+bool PlatformSwitchClkReq(struct net_device *dev, u8 value)
+{
+       bool bResult = false;
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       u8      Buffer;
+
+       Buffer= value;  
+       
+       pci_write_config_byte(priv->pdev,priv->ClkReqOffset,value);
+       bResult = true;
+#ifdef TODO
+       if(Buffer) {
+               priv->ClkReqState = true;
+       } else {
+               priv->ClkReqState = false;
+       }
+#endif
+       udelay(100);
+       return bResult;
+}
+
+void
+PlatformDisableASPM(struct net_device *dev)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       PRT_POWER_SAVE_CONTROL  pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl));
+
+       u8      LinkCtrlReg;
+       u16     PciBridgeLinkCtrlReg, ASPMLevel=0;
+
+       LinkCtrlReg = priv->LinkCtrlReg;
+       ASPMLevel |= BIT0|BIT1;
+       LinkCtrlReg &=~ASPMLevel;
+
+       PciBridgeLinkCtrlReg = priv->PciBridgeLinkCtrlReg;
+       PciBridgeLinkCtrlReg &=~(BIT0|BIT1);
+
+       if (priv->aspm_clkreq_enable) {
+
+               pci_write_config_byte(priv->bridge_pdev,priv->PciBridgeASPMRegOffset,PciBridgeLinkCtrlReg);
+               RT_TRACE(COMP_POWER, "Write reg[%x]=%x\n", (priv->PciBridgeASPMRegOffset), PciBridgeLinkCtrlReg);
+               udelay(100);
+       }
+
+       PlatformSwitchDevicePciASPM(dev, priv->LinkCtrlReg);
+
+       PlatformSwitchClkReq(dev, 0x0);
+       if (pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_CLK_REQ)
+               RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_CLK_REQ);
+       udelay(100);
+}
+
+void PlatformEnableASPM(struct net_device *dev)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl));
+       u16     ASPMLevel = 0;
+
+       if (!priv->aspm_clkreq_enable) {
+               RT_TRACE(COMP_INIT, "%s: Fail to enable ASPM. Cannot find the Bus of PCI(Bridge).\n",\
+                               __FUNCTION__);
+               return;
+       }
+
+       ASPMLevel |= priv->RegDevicePciASPMSetting;
+       PlatformSwitchDevicePciASPM(dev, (priv->LinkCtrlReg | ASPMLevel));
+
+       if (pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_CLK_REQ) {
+               PlatformSwitchClkReq(dev,(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_CLK_REQ) ? 1 : 0);
+               RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_CLK_REQ);
+       }
+       udelay(100);
+
+       pci_write_config_byte(priv->bridge_pdev,priv->PciBridgeASPMRegOffset,\
+                       ((priv->PciBridgeLinkCtrlReg | priv->RegHostPciASPMSetting)&~BIT0)&0xff);
+       RT_TRACE(COMP_INIT, "Write reg[%x] = %x\n",
+               priv->PciBridgeASPMRegOffset, 
+               (priv->PciBridgeLinkCtrlReg|priv->RegHostPciASPMSetting));
+       udelay(100);
+}
+
+u32 PlatformResetPciSpace(struct net_device *dev,u8 Value)
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+
+       pci_write_config_byte(priv->pdev,0x04,Value);   
+
+       return 1;
+       
+}
+bool PlatformSetPMCSR(struct net_device *dev,u8 value,bool bTempSetting)
+{
+       bool bResult = false;
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       u8  Buffer;
+       bool bActuallySet=false, bSetFunc=false;
+       unsigned long flag;
+
+       Buffer= value;
+       spin_lock_irqsave(&priv->D3_lock,flag);
+#ifdef TODO    
+       if(bTempSetting) 
+       {
+               if(Buffer==0x00) 
+               {
+                       priv->LeaveD3Cnt++;
+
+                       {
+                               bActuallySet =true;
+                       }
+               }
+               else 
+               {
+                       priv->LeaveD3Cnt--;
+
+                       if(priv->LeaveD3Cnt == 0) 
+                       {
+                               bActuallySet=true;
+                       }
+               }
+       }
+       else
+       {
+               priv->LeaveD3Cnt=0;
+               bActuallySet=true;
+               bSetFunc=true;
+       }
+#endif
+       if (bActuallySet) {
+               if (Buffer) {
+                       PlatformSwitchClkReq(dev, 0x01);
+               } else {
+                       PlatformSwitchClkReq(dev, 0x00);
+               }
+               
+               pci_write_config_byte(priv->pdev,0x44,Buffer);
+               RT_TRACE(COMP_POWER, "PlatformSetPMCSR(): D3(value: %d)\n", Buffer);
+
+               bResult = true;
+               if (!Buffer) {
+                       PlatformResetPciSpace(dev, 0x06);
+                       PlatformResetPciSpace(dev, 0x07);
+               }
+
+               if (bSetFunc) {
+                       if(Buffer) 
+                       {
+#ifdef TO_DO_LIST
+                               RT_DISABLE_FUNC(Adapter, DF_IO_D3_BIT);
+#endif
+                       } else {
+#ifdef TO_DO_LIST
+                               RT_ENABLE_FUNC(Adapter, DF_IO_D3_BIT);
+#endif
+                       }
+               }
+               
+       }
+       spin_unlock_irqrestore(&priv->D3_lock,flag);
+       return bResult;
+}
+#endif
diff --git a/ubuntu/rtl8192se/rtl_ps.h b/ubuntu/rtl8192se/rtl_ps.h
new file mode 100644 (file)
index 0000000..9cde638
--- /dev/null
@@ -0,0 +1,61 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * Based on the r8180 driver, which is:
+ * Copyright 2004-2005 Andrea Merello <andreamrl@tiscali.it>, et al.
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+ ******************************************************************************/
+#ifndef _RTL_PS_H
+#define _RTL_PS_H
+
+#include <linux/types.h>
+struct net_device;
+
+#define RT_CHECK_FOR_HANG_PERIOD 2
+#define INIT_DEFAULT_CHAN       1
+
+#if defined CONFIG_ASPM_OR_D3
+#define RT_DISABLE_ASPM(dev)            PlatformDisableASPM(dev)
+#define RT_ENABLE_ASPM(dev)             PlatformEnableASPM(dev)
+#define RT_ENTER_D3(dev, _bTempSetting) PlatformSetPMCSR(dev, 0x03, _bTempSetting)
+#define RT_LEAVE_D3(dev, _bTempSetting) PlatformSetPMCSR(dev, 0, _bTempSetting)
+void PlatformDisableASPM(struct net_device *dev);
+void PlatformEnableASPM(struct net_device *dev);
+u32 PlatformResetPciSpace(struct net_device *dev,u8 Value);
+#endif
+
+#if defined(RTL8192E) || defined(RTL8192SE) || defined RTL8192CE
+void rtl8192_hw_wakeup(struct net_device *dev);
+void rtl8192_hw_to_sleep(struct net_device *dev, u32 th, u32 tl);
+void rtllib_ips_leave_wq(struct net_device *dev);
+void rtllib_ips_leave(struct net_device *dev);
+void IPSLeave_wq (void *data);
+#endif
+
+#ifdef ENABLE_IPS
+void IPSEnter(struct net_device *dev);
+void IPSLeave(struct net_device *dev);
+#endif
+
+#ifdef ENABLE_LPS
+void LeisurePSEnter(struct net_device *dev);
+void LeisurePSLeave(struct net_device *dev);
+#endif
+#endif
diff --git a/ubuntu/rtl8192se/rtl_regd.c b/ubuntu/rtl8192se/rtl_regd.c
new file mode 100644 (file)
index 0000000..8c869bc
--- /dev/null
@@ -0,0 +1,384 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * Based on the ath driver, which is:
+ * Copyright (c) 2008-2009 Atheros Communications Inc.
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+ ******************************************************************************/
+
+#include "rtl_core.h"
+#if defined CONFIG_CRDA && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30))
+#include <linux/kernel.h>
+#include <linux/slab.h>
+#include <net/cfg80211.h>
+
+static struct country_code_to_enum_rd allCountries[] = {
+       {COUNTRY_CODE_FCC, "US"},
+       {COUNTRY_CODE_IC, "US"},
+       {COUNTRY_CODE_ETSI, "EC"},
+       {COUNTRY_CODE_SPAIN, "EC"},
+       {COUNTRY_CODE_FRANCE, "EC"},
+       {COUNTRY_CODE_MKK, "JP"},
+       {COUNTRY_CODE_MKK1, "JP"},
+       {COUNTRY_CODE_ISRAEL, "EC"},
+       {COUNTRY_CODE_TELEC, "JP"},
+       {COUNTRY_CODE_MIC, "JP"},
+       {COUNTRY_CODE_GLOBAL_DOMAIN, "JP"},
+       {COUNTRY_CODE_WORLD_WIDE_13, "EC"},
+       {COUNTRY_CODE_TELEC_NETGEAR, "EC"},
+};
+
+/* Only these channels all allow active scan on all world regulatory domains */
+#define RTL819x_2GHZ_CH01_11   REG_RULE(2412-10, 2462+10, 40, 0, 20, 0)
+
+/* We enable active scan on these a case by case basis by regulatory domain */
+#define RTL819x_2GHZ_CH12_13   REG_RULE(2467-10, 2472+10, 40, 0, 20, NL80211_RRF_PASSIVE_SCAN)
+#define RTL819x_2GHZ_CH14      REG_RULE(2484-10, 2484+10, 40, 0, 20, NL80211_RRF_PASSIVE_SCAN | \
+                                                                     NL80211_RRF_NO_OFDM)
+
+static const struct ieee80211_regdomain rtl_regdom_11 = {
+       .n_reg_rules = 1,
+       .alpha2 =  "99",
+       .reg_rules = {
+               RTL819x_2GHZ_CH01_11,
+       }
+};
+
+static const struct ieee80211_regdomain rtl_regdom_global = {
+       .n_reg_rules = 3,
+       .alpha2 =  "99",
+       .reg_rules = {
+               RTL819x_2GHZ_CH01_11,
+               RTL819x_2GHZ_CH12_13, 
+               RTL819x_2GHZ_CH14,
+       }
+};
+
+static const struct ieee80211_regdomain rtl_regdom_world = {
+       .n_reg_rules = 2,
+       .alpha2 =  "99",
+       .reg_rules = {
+               RTL819x_2GHZ_CH01_11,
+               RTL819x_2GHZ_CH12_13,
+       }
+};
+
+static void rtl_reg_apply_chan_plan(struct wiphy *wiphy)
+{
+       struct net_device *dev = wiphy_to_net_device(wiphy);
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
+       struct rtllib_device *rtllib = priv->rtllib;
+       struct ieee80211_supported_band *sband;
+       struct ieee80211_channel *ch;
+       int i;
+
+       sband = wiphy->bands[IEEE80211_BAND_2GHZ];
+
+       for (i = 0; i < sband->n_channels; i++) {
+               ch = &sband->channels[i];
+               if (ch->flags & IEEE80211_CHAN_DISABLED) {
+                       GET_DOT11D_INFO(rtllib)->channel_map[ch->hw_value] = 0; 
+               } else {
+                       if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN) {
+                               GET_DOT11D_INFO(rtllib)->channel_map[ch->hw_value] = 2; 
+                       } else {
+                               GET_DOT11D_INFO(rtllib)->channel_map[ch->hw_value] = 1; 
+                       }
+               }
+
+       }
+
+       for (i = sband->n_channels - 1; i >= 0; i--) {
+               ch = &sband->channels[i];
+               if (!(ch->flags & IEEE80211_CHAN_NO_IBSS)) {
+                       rtllib->ibss_maxjoin_chal = ch->hw_value;
+                       break;
+               }
+       }
+
+       rtllib->IbssStartChnl = 10;
+
+       return;
+}
+
+static void rtl_reg_apply_world_flags(struct wiphy *wiphy,
+                                     enum nl80211_reg_initiator initiator,
+                                     struct rtl_regulatory *reg)
+{
+       rtl_reg_apply_chan_plan(wiphy);
+       return;
+}
+
+int rtl_reg_notifier_apply(struct wiphy *wiphy,
+                          struct regulatory_request *request,
+                          struct rtl_regulatory *reg)
+{
+       switch (request->initiator) {
+       case NL80211_REGDOM_SET_BY_CORE:
+               break;
+       case NL80211_REGDOM_SET_BY_DRIVER:
+       case NL80211_REGDOM_SET_BY_USER:
+               rtl_reg_apply_world_flags(wiphy, request->initiator, reg);
+               rtl_dump_channel_map(wiphy);
+               break;
+       case NL80211_REGDOM_SET_BY_COUNTRY_IE:
+               rtl_reg_apply_world_flags(wiphy, request->initiator, reg);
+               rtl_dump_channel_map(wiphy);
+               break;
+       }
+
+       return 0;
+}
+
+static const struct
+ieee80211_regdomain *rtl_regdomain_select(struct rtl_regulatory *reg)
+{
+       switch (reg->country_code) {
+       case COUNTRY_CODE_FCC:
+       case COUNTRY_CODE_IC:
+               return &rtl_regdom_11;
+       case COUNTRY_CODE_ETSI:
+       case COUNTRY_CODE_SPAIN:
+       case COUNTRY_CODE_FRANCE:
+       case COUNTRY_CODE_ISRAEL:
+       case COUNTRY_CODE_TELEC_NETGEAR:
+               return &rtl_regdom_world;
+       case COUNTRY_CODE_MKK:
+       case COUNTRY_CODE_MKK1:
+       case COUNTRY_CODE_TELEC:
+       case COUNTRY_CODE_MIC:
+               return &rtl_regdom_global;
+       case COUNTRY_CODE_GLOBAL_DOMAIN:
+               return &rtl_regdom_global;
+       case COUNTRY_CODE_WORLD_WIDE_13:
+               return &rtl_regdom_world;
+       default:
+               WARN_ON(1);
+               return &rtl_regdom_world;
+       }
+}
+
+static int
+rtl_regd_init_wiphy(struct rtl_regulatory *reg,
+                   struct wiphy *wiphy,
+                   int (*reg_notifier)(struct wiphy *wiphy,
+                                       struct regulatory_request *request))
+{
+       const struct ieee80211_regdomain *regd;
+
+       wiphy->reg_notifier = reg_notifier;
+
+       wiphy->custom_regulatory = true;
+       wiphy->strict_regulatory = false;
+
+       regd = rtl_regdomain_select(reg);
+
+       wiphy->disable_beacon_hints = true;
+       wiphy_apply_custom_regulatory(wiphy, regd);
+
+       rtl_reg_apply_world_flags(wiphy, NL80211_REGDOM_SET_BY_DRIVER, reg);
+       return 0;
+}
+
+void rtl_dump_channel_map(struct wiphy *wiphy)
+{
+       enum ieee80211_band band;
+       struct ieee80211_supported_band *sband;
+       struct ieee80211_channel *ch;
+       unsigned int i;
+
+       for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
+
+               if (!wiphy->bands[band])
+                       continue;
+
+               sband = wiphy->bands[band];
+
+               for (i = 0; i < sband->n_channels; i++) {
+                       ch = &sband->channels[i];
+                       printk("chan:%d, NO_IBSS:%d," 
+                                       " PASSIVE_SCAN:%d, RADAR:%d, DISABLED:%d\n", i+1,
+                                       (ch->flags&IEEE80211_CHAN_NO_IBSS) ? 1:0, 
+                                       (ch->flags&IEEE80211_CHAN_PASSIVE_SCAN) ? 1:0,
+                                       (ch->flags&IEEE80211_CHAN_RADAR) ? 1:0,
+                                       (ch->flags&IEEE80211_CHAN_DISABLED) ? 1:0
+                             );
+               }
+
+       }
+}
+
+static struct country_code_to_enum_rd *rtl_regd_find_country(u16 countryCode)
+{       
+       int i;
+
+       for (i = 0; i < ARRAY_SIZE(allCountries); i++) {
+               if (allCountries[i].countryCode == countryCode)
+                       return &allCountries[i];
+       }
+       return NULL;
+} 
+
+
+int rtl_regd_init(struct net_device *dev,
+             int (*reg_notifier)(struct wiphy *wiphy,
+                                 struct regulatory_request *request))
+{
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);        
+       struct rtl_regulatory *reg = &priv->rtllib->regulatory;
+       struct wiphy *wiphy = priv->rtllib->wdev.wiphy;
+       struct country_code_to_enum_rd *country = NULL;
+
+       if (wiphy == NULL || reg == NULL){
+               return -EINVAL;
+       }
+
+       printk(KERN_DEBUG "rtl: EEPROM regdomain: 0x%0x\n", priv->ChannelPlan);
+
+       reg->country_code = priv->ChannelPlan;
+
+       if (reg->country_code >= COUNTRY_CODE_MAX) {
+               printk(KERN_DEBUG "rtl: EEPROM indicates invalid contry code"
+                      "world wide 13 should be used\n");
+               reg->country_code = COUNTRY_CODE_WORLD_WIDE_13;
+       }
+
+       country = rtl_regd_find_country(reg->country_code);
+
+       if (country) {
+               reg->alpha2[0] = country->isoName[0];
+               reg->alpha2[1] = country->isoName[1];
+       } else {
+               reg->alpha2[0] = '0';
+               reg->alpha2[1] = '0';
+       }
+
+       printk(KERN_DEBUG "rtl: Country alpha2 being used: %c%c\n",
+               reg->alpha2[0], reg->alpha2[1]);
+       rtl_regd_init_wiphy(reg, wiphy, reg_notifier);
+       rtl_dump_channel_map(wiphy);
+       return 0;
+}
+
+int rtl_reg_notifier(struct wiphy *wiphy,
+                             struct regulatory_request *request)
+{
+       struct net_device *dev = wiphy_to_net_device(wiphy);
+       struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);        
+       struct rtl_regulatory *reg = &priv->rtllib->regulatory;
+
+       printk("rtl_regd: %s\n", __func__);
+       return rtl_reg_notifier_apply(wiphy, request, reg);
+}
+
+struct net_device *wiphy_to_net_device(struct wiphy *wiphy)
+{
+       struct rtllib_device *rtllib;
+
+       rtllib = wiphy_priv(wiphy);
+       return rtllib->dev;
+}
+
+static const struct ieee80211_rate rtl819x_rates[] = {
+       { .bitrate = 10, .hw_value = 0, },
+       { .bitrate = 20, .hw_value = 1, },
+       { .bitrate = 55, .hw_value = 2, },
+       { .bitrate = 110, .hw_value = 3, },
+       { .bitrate = 60, .hw_value = 4, },
+       { .bitrate = 90, .hw_value = 5, },
+       { .bitrate = 120, .hw_value = 6, },
+       { .bitrate = 180, .hw_value = 7, },
+       { .bitrate = 240, .hw_value = 8, },
+       { .bitrate = 360, .hw_value = 9, },
+       { .bitrate = 480, .hw_value = 10, },
+       { .bitrate = 540, .hw_value = 11, },
+};
+
+#define CHAN2G(_freq, _flags, _idx)  { \
+               .band = IEEE80211_BAND_2GHZ, \
+               .center_freq = (_freq), \
+               .flags = (_flags), \
+               .hw_value = (_idx), \
+               .max_power = 20, \
+}
+
+static struct ieee80211_channel rtl819x_2ghz_chantable[] = {
+       CHAN2G(2412, 0, 1), /* Channel 1 */
+       CHAN2G(2417, 0, 2), /* Channel 2 */
+       CHAN2G(2422, 0, 3), /* Channel 3 */
+       CHAN2G(2427, 0, 4), /* Channel 4 */
+       CHAN2G(2432, 0, 5), /* Channel 5 */
+       CHAN2G(2437, 0, 6), /* Channel 6 */
+       CHAN2G(2442, 0, 7), /* Channel 7 */
+       CHAN2G(2447, 0, 8), /* Channel 8 */
+       CHAN2G(2452, 0, 9), /* Channel 9 */
+       CHAN2G(2457, 0, 10), /* Channel 10 */
+       CHAN2G(2462, 0, 11), /* Channel 11 */
+       CHAN2G(2467, IEEE80211_CHAN_NO_IBSS|IEEE80211_CHAN_PASSIVE_SCAN, 12), /* Channel 12 */
+       CHAN2G(2472, IEEE80211_CHAN_NO_IBSS|IEEE80211_CHAN_PASSIVE_SCAN, 13), /* Channel 13 */
+       CHAN2G(2484, IEEE80211_CHAN_NO_IBSS|IEEE80211_CHAN_PASSIVE_SCAN, 14), /* Channel 14 */
+};
+
+int rtllib_set_geo(struct r8192_priv *priv)
+{      
+       priv->bands[IEEE80211_BAND_2GHZ].band = IEEE80211_BAND_2GHZ;
+       priv->bands[IEEE80211_BAND_2GHZ].channels = rtl819x_2ghz_chantable;
+       priv->bands[IEEE80211_BAND_2GHZ].n_channels = ARRAY_SIZE(rtl819x_2ghz_chantable);
+       
+       memcpy(&priv->rates[IEEE80211_BAND_2GHZ], rtl819x_rates, sizeof(rtl819x_rates));
+
+       priv->bands[IEEE80211_BAND_2GHZ].n_bitrates = ARRAY_SIZE(rtl819x_rates);
+       priv->bands[IEEE80211_BAND_2GHZ].bitrates = priv->rates[IEEE80211_BAND_2GHZ];
+
+       return 0;
+}
+
+bool rtl8192_register_wiphy_dev(struct net_device *dev)
+{      
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct wireless_dev *wdev = &priv->rtllib->wdev;
+       struct rtl_regulatory *reg;
+
+       memcpy(wdev->wiphy->perm_addr, dev->dev_addr, ETH_ALEN);
+       wdev->wiphy->bands[IEEE80211_BAND_2GHZ] = &(priv->bands[IEEE80211_BAND_2GHZ]);
+       set_wiphy_dev(wdev->wiphy, &priv->pdev->dev);
+
+       if (rtl_regd_init(dev, rtl_reg_notifier)) {
+               return false;
+       }
+
+       if (wiphy_register(wdev->wiphy)) {
+               return false;
+       }
+
+       reg = &priv->rtllib->regulatory;
+       if (reg != NULL) {
+               if (regulatory_hint(wdev->wiphy, reg->alpha2)) {
+                       printk("########>%s() regulatory_hint fail\n", __func__);
+                       ;
+               } else {
+                       printk("########>#%s() regulatory_hint success\n", __func__);
+               }
+       } else {
+               printk("#########%s() regulator null\n", __func__);
+       }
+       return true;
+}
+#endif
diff --git a/ubuntu/rtl8192se/rtl_regd.h b/ubuntu/rtl8192se/rtl_regd.h
new file mode 100644 (file)
index 0000000..7b272ab
--- /dev/null
@@ -0,0 +1,53 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * Based on the ath driver, which is:
+ * Copyright (c) 2008-2009 Atheros Communications Inc.
+ *
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+ ******************************************************************************/
+#ifndef RTL_REGD_H
+#define RTL_REGD_H
+
+#if defined CONFIG_CRDA && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30))
+
+#include <linux/nl80211.h>
+#include <net/cfg80211.h>
+#include "rtl_core.h"
+
+struct r8192_priv;
+
+struct country_code_to_enum_rd {
+       u16 countryCode;
+       const char *isoName;
+};
+
+
+int rtl_regd_init(struct net_device *dev,
+                 int (*reg_notifier)(struct wiphy *wiphy,
+                 struct regulatory_request *request));
+int rtl_reg_notifier(struct wiphy *wiphy,
+                    struct regulatory_request *request);
+void rtl_dump_channel_map(struct wiphy *wiphy);
+int rtllib_set_geo(struct r8192_priv *priv);
+bool rtl8192_register_wiphy_dev(struct net_device *dev);
+
+#endif
+#endif
diff --git a/ubuntu/rtl8192se/rtl_wx.c b/ubuntu/rtl8192se/rtl_wx.c
new file mode 100644 (file)
index 0000000..467c271
--- /dev/null
@@ -0,0 +1,4253 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+
+#include <linux/string.h>
+#include "rtl_core.h"
+#ifdef ENABLE_DOT11D
+#include "rtllib/dot11d.h"
+#endif
+#ifdef _RTL8192_EXT_PATCH_
+#include "../../mshclass/msh_class.h"
+#endif
+
+#ifdef CONFIG_MP
+#include "r8192S_mp.h"
+#endif
+
+#define RATE_COUNT 12
+u32 rtl8192_rates[] = {1000000,2000000,5500000,11000000,
+       6000000,9000000,12000000,18000000,24000000,36000000,48000000,54000000};
+       
+
+#ifndef ENETDOWN
+#define ENETDOWN 1
+#endif
+extern int  hwwep;
+#ifdef _RTL8192_EXT_PATCH_
+int r8192_wx_set_channel(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
+static int r8192_wx_mesh_scan(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
+static int r8192_wx_get_mesh_list(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
+#endif
+
+static int r8192_wx_get_freq(struct net_device *dev,
+                            struct iw_request_info *a,
+                            union iwreq_data *wrqu, char *b)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       
+#ifdef _RTL8192_EXT_PATCH_
+       return rtllib_wx_get_freq(priv->rtllib,a,wrqu,b,0);
+#else
+       return rtllib_wx_get_freq(priv->rtllib,a,wrqu,b);
+#endif
+}
+
+
+#if 0
+
+static int r8192_wx_set_beaconinterval(struct net_device *dev, struct iw_request_info *aa,
+                         union iwreq_data *wrqu, char *b)
+{
+       int *parms = (int *)b;
+       int bi = parms[0];
+       
+       struct r8192_priv *priv = rtllib_priv(dev);
+       
+       down(&priv->wx_sem);
+       DMESG("setting beacon interval to %x",bi);
+       
+       priv->rtllib->beacon_interval=bi;
+       rtl8192_commit(dev);
+       up(&priv->wx_sem);
+               
+       return 0;       
+}
+
+
+static int r8192_wx_set_forceassociate(struct net_device *dev, struct iw_request_info *aa,
+                         union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv=rtllib_priv(dev);       
+       int *parms = (int *)extra;
+       
+       priv->rtllib->force_associate = (parms[0] > 0);
+       
+
+       return 0;
+}
+
+#endif
+static int r8192_wx_get_mode(struct net_device *dev, struct iw_request_info *a,
+                            union iwreq_data *wrqu, char *b)
+{
+       struct r8192_priv *priv=rtllib_priv(dev);       
+
+       return rtllib_wx_get_mode(priv->rtllib,a,wrqu,b);
+}
+
+static int r8192_wx_get_rate(struct net_device *dev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       return rtllib_wx_get_rate(priv->rtllib,info,wrqu,extra);
+}
+
+
+
+static int r8192_wx_set_rate(struct net_device *dev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       int ret;
+       struct r8192_priv *priv = rtllib_priv(dev);     
+       
+       if(priv->bHwRadioOff == true)
+               return 0;       
+       
+       down(&priv->wx_sem);
+
+       ret = rtllib_wx_set_rate(priv->rtllib,info,wrqu,extra);
+       
+       up(&priv->wx_sem);
+       
+       return ret;
+}
+
+
+static int r8192_wx_set_rts(struct net_device *dev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       int ret;
+       struct r8192_priv *priv = rtllib_priv(dev);     
+       
+       if(priv->bHwRadioOff == true)
+               return 0;       
+       
+       down(&priv->wx_sem);
+
+       ret = rtllib_wx_set_rts(priv->rtllib,info,wrqu,extra);
+       
+       up(&priv->wx_sem);
+       
+       return ret;
+}
+
+static int r8192_wx_get_rts(struct net_device *dev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       return rtllib_wx_get_rts(priv->rtllib,info,wrqu,extra);
+}
+
+static int r8192_wx_set_power(struct net_device *dev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       int ret;
+       struct r8192_priv *priv = rtllib_priv(dev);     
+       
+       if(priv->bHwRadioOff == true){
+               RT_TRACE(COMP_ERR,"%s():Hw is Radio Off, we can't set Power,return\n",__FUNCTION__);
+               return 0;
+       }
+       down(&priv->wx_sem);
+
+       ret = rtllib_wx_set_power(priv->rtllib,info,wrqu,extra);
+       
+       up(&priv->wx_sem);
+       
+       return ret;
+}
+
+static int r8192_wx_get_power(struct net_device *dev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       return rtllib_wx_get_power(priv->rtllib,info,wrqu,extra);
+}
+
+static int r8192_wx_set_rawtx(struct net_device *dev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       int ret;
+       
+       if(priv->bHwRadioOff == true)
+               return 0;
+       
+       down(&priv->wx_sem);
+       
+       ret = rtllib_wx_set_rawtx(priv->rtllib, info, wrqu, extra);
+       
+       up(&priv->wx_sem);
+       
+       return ret;
+        
+}
+
+static int r8192_wx_force_reset(struct net_device *dev,
+               struct iw_request_info *info,
+               union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       
+       down(&priv->wx_sem);
+
+       printk("%s(): force reset ! extra is %d\n",__FUNCTION__, *extra);
+       priv->force_reset = *extra;
+       up(&priv->wx_sem);
+       return 0;
+
+}
+
+static int r8192_wx_force_mic_error(struct net_device *dev,
+               struct iw_request_info *info,
+               union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device* ieee = priv->rtllib;
+       
+       down(&priv->wx_sem);
+
+       printk("%s(): force mic error ! \n",__FUNCTION__);
+       ieee->force_mic_error = true;
+       up(&priv->wx_sem);
+       return 0;
+
+}
+
+#define MAX_ADHOC_PEER_NUM 64 
+typedef struct 
+{
+       unsigned char MacAddr[ETH_ALEN];
+       unsigned char WirelessMode;
+       unsigned char bCurTxBW40MHz;            
+} adhoc_peer_entry_t, *p_adhoc_peer_entry_t;
+typedef struct 
+{
+       adhoc_peer_entry_t Entry[MAX_ADHOC_PEER_NUM];
+       unsigned char num;
+} adhoc_peers_info_t, *p_adhoc_peers_info_t;
+int r8192_wx_get_adhoc_peers(struct net_device *dev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+#ifndef RTL8192SE 
+       return 0;
+#else
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct sta_info * psta = NULL;
+       adhoc_peers_info_t adhoc_peers_info;
+       p_adhoc_peers_info_t  padhoc_peers_info = &adhoc_peers_info; 
+       p_adhoc_peer_entry_t padhoc_peer_entry = NULL;
+       int k=0;
+
+
+       memset(extra, 0, 2047);
+       padhoc_peers_info->num = 0;
+
+       down(&priv->wx_sem);
+
+       for(k=0; k<PEER_MAX_ASSOC; k++)
+       {
+               psta = priv->rtllib->peer_assoc_list[k];
+               if(NULL != psta)
+               {
+                       padhoc_peer_entry = &padhoc_peers_info->Entry[padhoc_peers_info->num];
+                       memset(padhoc_peer_entry,0, sizeof(adhoc_peer_entry_t));
+                       memcpy(padhoc_peer_entry->MacAddr, psta->macaddr, ETH_ALEN);
+                       padhoc_peer_entry->WirelessMode = psta->wireless_mode;
+                       padhoc_peer_entry->bCurTxBW40MHz = psta->htinfo.bCurTxBW40MHz;
+                       padhoc_peers_info->num ++;
+                       printk("[%d] MacAddr:"MAC_FMT" \tWirelessMode:%d \tBW40MHz:%d \n", \
+                               k, MAC_ARG(padhoc_peer_entry->MacAddr), padhoc_peer_entry->WirelessMode, padhoc_peer_entry->bCurTxBW40MHz);
+                       sprintf(extra, "[%d] MacAddr:"MAC_FMT" \tWirelessMode:%d \tBW40MHz:%d \n",  \
+                               k, MAC_ARG(padhoc_peer_entry->MacAddr), padhoc_peer_entry->WirelessMode, padhoc_peer_entry->bCurTxBW40MHz);
+               }
+       }
+
+       up(&priv->wx_sem);
+
+       wrqu->data.length = strlen(extra);
+       wrqu->data.flags = 0;
+       return 0;
+
+#endif
+}
+
+
+static int r8191se_wx_get_firm_version(struct net_device *dev,
+               struct iw_request_info *info,
+               struct iw_param *wrqu, char *extra)
+{
+#if defined RTL8192SE || defined RTL8192CE
+        struct r8192_priv *priv = rtllib_priv(dev);
+       u16 firmware_version;
+
+       down(&priv->wx_sem);
+       printk("%s(): Just Support 92SE tmp\n", __FUNCTION__);
+#ifdef RTL8192CE
+       firmware_version = priv->firmware_version;
+#else
+       firmware_version = priv->pFirmware->FirmwareVersion;
+#endif
+       wrqu->value = firmware_version;
+       wrqu->fixed = 1;
+
+       up(&priv->wx_sem);
+#endif
+       return 0;
+}
+
+static int r8192_wx_adapter_power_status(struct net_device *dev,
+               struct iw_request_info *info,
+               union iwreq_data *wrqu, char *extra)
+{
+#ifdef ENABLE_LPS
+       struct r8192_priv *priv = rtllib_priv(dev);
+       PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl));
+       struct rtllib_device* ieee = priv->rtllib;
+
+       down(&priv->wx_sem);
+
+       RT_TRACE(COMP_POWER, "%s(): %s\n",__FUNCTION__, (*extra ==  6)?"DC power":"AC power");
+       if(*extra || priv->force_lps) {
+               priv->ps_force = false;
+               pPSC->bLeisurePs = true;
+       } else {        
+               if(priv->rtllib->state == RTLLIB_LINKED)
+                       LeisurePSLeave(dev);
+       
+               priv->ps_force = true;
+               pPSC->bLeisurePs = false;
+               ieee->ps = *extra;      
+       }
+
+       up(&priv->wx_sem);
+#endif
+
+       return 0;
+
+}
+
+#ifdef _RTL8192_EXT_PATCH_
+static int r8192_wx_print_reg(struct net_device *dev,
+               struct iw_request_info *info,
+               union iwreq_data *wrqu, char *extra)
+{
+       u8 reg1=0,reg2=0,reg3=0,reg4=0;
+       u32 reg5 = 0, len = 0;
+       
+       memset(extra, 0, 512);
+       sprintf(extra,"\nStart Log: Set 0x08000000 to 0x230\n");
+       write_nic_dword(dev, 0x230 , 0x08000000);
+       reg1 = read_nic_byte(dev, 0xf0);
+       reg2 = read_nic_byte(dev, 0xf4);
+       reg3 = read_nic_byte(dev, 0x140);
+       reg4 = read_nic_byte(dev, 0x124);
+       mdelay(10);
+       reg5 = read_nic_dword(dev, 0x230);
+       len = strlen(extra);
+       sprintf(extra+len, "0xf0: %2.2x\n0xf4: %2.2x\n0x140: %2.2x\n0x124: %2.2x\n", reg1,reg2,reg3,reg4);
+       len = strlen(extra);
+       sprintf(extra+len,"After delay 10ms, read 0x230: %8.8x\n", reg5);
+
+       write_nic_dword(dev, 0x230 , 0x40000000);
+       reg5 = read_nic_dword(dev, 0x230);
+       len = strlen(extra);
+       sprintf(extra+len,"Set 0x40000000 to 0x230. Read 0x230: %8.8x\n", reg5);
+
+       write_nic_dword(dev, 0x230 , 0x80000000);
+       reg5 = read_nic_dword(dev, 0x230);
+       len = strlen(extra);
+       sprintf(extra+len,"Set 0x80000000 to 0x230. Read 0x230: %8.8x\n", reg5);
+
+       wrqu->data.length = strlen(extra);
+       return 0;
+}
+
+static int r8192_wx_resume_firm(struct net_device *dev,
+               struct iw_request_info *info,
+               union iwreq_data *wrqu, char *extra)
+{
+
+       write_nic_byte(dev, 0x42, 0xFF);
+       write_nic_word(dev, 0x40, 0x77FC);
+       write_nic_word(dev, 0x40, 0x57FC);
+       write_nic_word(dev, 0x40, 0x37FC);
+       write_nic_word(dev, 0x40, 0x77FC);
+       
+       udelay(100);
+
+       write_nic_word(dev, 0x40, 0x57FC);
+       write_nic_word(dev, 0x40, 0x37FC);
+       write_nic_byte(dev, 0x42, 0x00);
+
+       return 0;
+}
+#endif
+static int r8192se_wx_set_radio(struct net_device *dev,
+        struct iw_request_info *info,
+        union iwreq_data *wrqu, char *extra)
+{
+    struct r8192_priv *priv = rtllib_priv(dev);
+
+    down(&priv->wx_sem);
+
+    printk("%s(): set radio ! extra is %d\n",__FUNCTION__, *extra);
+    if((*extra != 0) && (*extra != 1))
+    {
+        RT_TRACE(COMP_ERR, "%s(): set radio an err value,must 0(radio off) or 1(radio on)\n",__FUNCTION__);
+        return -1;
+    }
+    priv->sw_radio_on = *extra;
+    up(&priv->wx_sem);
+    return 0;
+
+}
+
+static int r8192se_wx_set_lps_awake_interval(struct net_device *dev,
+        struct iw_request_info *info,
+        union iwreq_data *wrqu, char *extra)
+{
+    struct r8192_priv *priv = rtllib_priv(dev);
+    PRT_POWER_SAVE_CONTROL     pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl));
+
+    down(&priv->wx_sem);
+
+    printk("%s(): set lps awake interval ! extra is %d\n",__FUNCTION__, *extra);
+
+    pPSC->RegMaxLPSAwakeIntvl = *extra;
+    up(&priv->wx_sem);
+    return 0;
+
+}
+
+static int r8192se_wx_set_force_lps(struct net_device *dev,
+               struct iw_request_info *info,
+               union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       
+       down(&priv->wx_sem);
+
+       printk("%s(): force LPS ! extra is %d (1 is open 0 is close)\n",__FUNCTION__, *extra);
+       priv->force_lps = *extra;
+       up(&priv->wx_sem);
+       return 0;
+
+}
+
+#ifdef _RTL8192_EXT_PATCH_
+static int r8192_wx_get_drv_version(struct net_device *dev,
+               struct iw_request_info *info,
+               union iwreq_data *wrqu, char *extra)
+{
+       memset(extra, 0, 64);
+       sprintf(extra, "Support Mesh");
+
+       ((struct iw_point *)wrqu)->length = strlen(extra);
+       return 0;
+}
+#endif
+
+static int r8192_wx_set_debugflag(struct net_device *dev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       u8 c = *extra;
+       
+       if(priv->bHwRadioOff == true)
+               return 0;
+       
+       printk("=====>%s(), *extra:%x, debugflag:%x\n", __FUNCTION__, *extra, rt_global_debug_component);
+       if (c > 0)  {
+               rt_global_debug_component |= (1<<c);
+       } else {
+               rt_global_debug_component &= BIT31; 
+       }
+       return 0;
+}
+
+static int r8192_wx_set_mode(struct net_device *dev, struct iw_request_info *a,
+                            union iwreq_data *wrqu, char *b)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       RT_RF_POWER_STATE       rtState;
+       int ret;
+
+       if(priv->bHwRadioOff == true)
+               return 0;
+#ifdef _RTL8192_EXT_PATCH_
+       if (priv->mshobj && (priv->rtllib->iw_mode==IW_MODE_MESH)) {
+               return 0;       
+       }
+#endif
+       rtState = priv->rtllib->eRFPowerState;
+       down(&priv->wx_sem);
+#ifdef ENABLE_IPS      
+       if(wrqu->mode == IW_MODE_ADHOC){
+               if(priv->rtllib->PowerSaveControl.bInactivePs){ 
+                       if(rtState == eRfOff){
+                               if(priv->rtllib->RfOffReason > RF_CHANGE_BY_IPS)
+                               {
+                                       RT_TRACE(COMP_ERR, "%s(): RF is OFF.\n",__FUNCTION__);
+                                       up(&priv->wx_sem);
+                                       return -1;
+                               } else {
+                                       printk("=========>%s(): IPSLeave\n",__FUNCTION__);
+                                       down(&priv->rtllib->ips_sem);
+                                       IPSLeave(dev);
+                                       up(&priv->rtllib->ips_sem);                             
+                               }
+                       }
+               }
+       }
+#endif
+       ret = rtllib_wx_set_mode(priv->rtllib,a,wrqu,b);
+
+       up(&priv->wx_sem);
+       return ret;
+}
+#if defined (RTL8192S_WAPI_SUPPORT)
+int wapi_ioctl_set_mode(struct net_device *dev, struct iw_request_info *a,
+                            union iwreq_data *wrqu, char *b)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       RT_RF_POWER_STATE       rtState;
+       int ret;
+
+       printk("===============================>%s\n", __FUNCTION__);   
+       if(priv->bHwRadioOff == true)
+               return 0;
+#ifdef _RTL8192_EXT_PATCH_
+       if (priv->mshobj && (priv->rtllib->iw_mode==IW_MODE_MESH)) {
+               return 0;       
+       }
+#endif
+       rtState = priv->rtllib->eRFPowerState;
+#ifdef ENABLE_IPS      
+       if(wrqu->mode == IW_MODE_ADHOC){
+               if(priv->rtllib->PowerSaveControl.bInactivePs){ 
+                       if(rtState == eRfOff){
+                               if(priv->rtllib->RfOffReason > RF_CHANGE_BY_IPS)
+                               {
+                                       RT_TRACE(COMP_ERR, "%s(): RF is OFF.\n",__FUNCTION__);
+                                       up(&priv->wx_sem);
+                                       return -1;
+                               } else {
+                                       printk("=========>%s(): IPSLeave\n",__FUNCTION__);
+                                       down(&priv->rtllib->ips_sem);
+                                       IPSLeave(dev);
+                                       up(&priv->rtllib->ips_sem);                             
+                               }
+                       }
+               }
+       }
+#endif
+       ret = rtllib_wx_set_mode(priv->rtllib,a,wrqu,b);
+
+       return ret;
+}
+#endif
+struct  iw_range_with_scan_capa
+{
+        /* Informative stuff (to choose between different interface) */
+        __u32           throughput;     /* To give an idea... */
+        /* In theory this value should be the maximum benchmarked
+         * TCP/IP throughput, because with most of these devices the
+         * bit rate is meaningless (overhead an co) to estimate how
+         * fast the connection will go and pick the fastest one.
+         * I suggest people to play with Netperf or any benchmark...
+         */
+
+        /* NWID (or domain id) */
+        __u32           min_nwid;       /* Minimal NWID we are able to set */
+        __u32           max_nwid;       /* Maximal NWID we are able to set */
+
+        /* Old Frequency (backward compat - moved lower ) */
+        __u16           old_num_channels;
+        __u8            old_num_frequency;
+
+        /* Scan capabilities */
+        __u8            scan_capa;       
+};
+
+static int rtl8192_wx_get_range(struct net_device *dev, 
+                               struct iw_request_info *info, 
+                               union iwreq_data *wrqu, char *extra)
+{
+       struct iw_range *range = (struct iw_range *)extra;
+       struct r8192_priv *priv = rtllib_priv(dev);
+       u16 val;
+       int i;
+
+       wrqu->data.length = sizeof(*range);
+       memset(range, 0, sizeof(*range));
+
+       /* ~130 Mb/s real (802.11n) */
+       range->throughput = 130 * 1000 * 1000;     
+
+       if(priv->rf_set_sens != NULL)
+               range->sensitivity = priv->max_sens;    /* signal level threshold range */
+       
+       range->max_qual.qual = 100;
+       range->max_qual.level = 0;
+       range->max_qual.noise = 0;
+       range->max_qual.updated = 7; /* Updated all three */
+
+       range->avg_qual.qual = 70; /* > 8% missed beacons is 'bad' */
+       range->avg_qual.level = 0;
+       range->avg_qual.noise = 0;
+       range->avg_qual.updated = 7; /* Updated all three */
+
+       range->num_bitrates = min(RATE_COUNT, IW_MAX_BITRATES);
+       
+       for (i = 0; i < range->num_bitrates; i++) {
+               range->bitrate[i] = rtl8192_rates[i];
+       }
+       
+       range->max_rts = DEFAULT_RTS_THRESHOLD;
+       range->min_frag = MIN_FRAG_THRESHOLD;
+       range->max_frag = MAX_FRAG_THRESHOLD;
+       
+       range->min_pmp = 0;
+       range->max_pmp = 5000000;
+       range->min_pmt = 0;
+       range->max_pmt = 65535*1000;    
+       range->pmp_flags = IW_POWER_PERIOD;
+       range->pmt_flags = IW_POWER_TIMEOUT;
+       range->pm_capa = IW_POWER_PERIOD | IW_POWER_TIMEOUT | IW_POWER_ALL_R;
+       range->we_version_compiled = WIRELESS_EXT;
+       range->we_version_source = 18;
+
+       for (i = 0, val = 0; i < 14; i++) {
+               if ((priv->rtllib->active_channel_map)[i+1]) {
+                       range->freq[val].i = i + 1;
+                       range->freq[val].m = rtllib_wlan_frequencies[i] * 100000;
+                       range->freq[val].e = 1;
+                       val++;
+               } else {
+               }
+               
+               if (val == IW_MAX_FREQUENCIES)
+               break;
+       }
+       range->num_frequency = val;
+       range->num_channels = val;
+#if WIRELESS_EXT > 17
+       range->enc_capa = IW_ENC_CAPA_WPA|IW_ENC_CAPA_WPA2|
+                         IW_ENC_CAPA_CIPHER_TKIP|IW_ENC_CAPA_CIPHER_CCMP;
+#endif
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
+       {
+               struct iw_range_with_scan_capa* tmp = (struct iw_range_with_scan_capa*)range;
+               tmp->scan_capa = 0x01;
+       }
+#else
+       range->scan_capa = IW_SCAN_CAPA_ESSID | IW_SCAN_CAPA_TYPE;
+#endif
+
+        /* Event capability (kernel + driver) */ 
+
+       return 0;
+}
+
+static int r8192_wx_set_scan(struct net_device *dev, struct iw_request_info *a,
+                            union iwreq_data *wrqu, char *b)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device* ieee = priv->rtllib;
+       RT_RF_POWER_STATE       rtState;
+       int ret;
+       
+#ifdef CONFIG_MP
+       printk("######################%s(): In MP Test Can not Scan\n",__FUNCTION__);
+       return 0;
+#endif
+       if (!(ieee->softmac_features & IEEE_SOFTMAC_SCAN)){
+               if((ieee->state >= RTLLIB_ASSOCIATING) && (ieee->state <= RTLLIB_ASSOCIATING_AUTHENTICATED)){
+                       return 0;
+               }
+               if((priv->rtllib->state == RTLLIB_LINKED) && (priv->rtllib->CntAfterLink<2)){
+                       return 0;
+               }
+       }
+
+       if(priv->bHwRadioOff == true){
+               printk("================>%s(): hwradio off\n",__FUNCTION__);
+               return 0;
+       }
+       rtState = priv->rtllib->eRFPowerState;
+       if(!priv->up) return -ENETDOWN;
+       if (priv->rtllib->LinkDetectInfo.bBusyTraffic == true)
+               return -EAGAIN;
+
+#ifdef _RTL8192_EXT_PATCH_     
+       if((ieee->iw_mode == IW_MODE_MESH)&&(ieee->mesh_state == RTLLIB_MESH_LINKED))
+       {
+               return 0;
+       }
+#endif
+#if WIRELESS_EXT > 17
+       if (wrqu->data.flags & IW_SCAN_THIS_ESSID)
+       {
+               struct iw_scan_req* req = (struct iw_scan_req*)b;
+               if (req->essid_len)
+               {
+                       ieee->current_network.ssid_len = req->essid_len;
+                       memcpy(ieee->current_network.ssid, req->essid, req->essid_len); 
+               }
+       }
+#endif 
+
+       down(&priv->wx_sem);
+
+       priv->rtllib->FirstIe_InScan = true;
+
+       if(priv->rtllib->state != RTLLIB_LINKED){
+#ifdef ENABLE_IPS
+               if(priv->rtllib->PowerSaveControl.bInactivePs){ 
+                       if(rtState == eRfOff){
+                               if(priv->rtllib->RfOffReason > RF_CHANGE_BY_IPS){
+                                       RT_TRACE(COMP_ERR, "%s(): RF is OFF.\n",__FUNCTION__);
+                                       up(&priv->wx_sem);
+                                       return -1;
+                               }else{
+                                       RT_TRACE(COMP_PS, "=========>%s(): IPSLeave\n",__FUNCTION__);
+                                       down(&priv->rtllib->ips_sem);
+                                       IPSLeave(dev);
+                                       up(&priv->rtllib->ips_sem);                             
+                               }
+                       }
+               }
+#endif
+               rtllib_stop_scan(priv->rtllib);
+               if(priv->rtllib->LedControlHandler)
+                       priv->rtllib->LedControlHandler(dev, LED_CTL_SITE_SURVEY);
+               
+                if(priv->rtllib->eRFPowerState != eRfOff){
+                       priv->rtllib->actscanning = true;
+                       rtllib_start_scan_syncro(priv->rtllib, 0);
+                }
+               ret = 0;
+       } else {
+               priv->rtllib->actscanning = true;
+       ret = rtllib_wx_set_scan(priv->rtllib,a,wrqu,b);
+       }
+       
+       up(&priv->wx_sem);
+       return ret;
+}
+
+
+static int r8192_wx_get_scan(struct net_device *dev, struct iw_request_info *a,
+                            union iwreq_data *wrqu, char *b)
+{
+
+       int ret;
+       struct r8192_priv *priv = rtllib_priv(dev);
+       
+       if(!priv->up) return -ENETDOWN;
+                       
+       if(priv->bHwRadioOff == true)
+               return 0;
+        
+                       
+       down(&priv->wx_sem);
+
+       ret = rtllib_wx_get_scan(priv->rtllib,a,wrqu,b);
+               
+       up(&priv->wx_sem);
+       
+       return ret;
+}
+
+static int r8192_wx_set_essid(struct net_device *dev, 
+                             struct iw_request_info *a,
+                             union iwreq_data *wrqu, char *b)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       int ret;
+               
+       if ((rtllib_act_scanning(priv->rtllib, false)) && !(priv->rtllib->softmac_features & IEEE_SOFTMAC_SCAN)){
+               ;
+       }
+#ifdef CONFIG_MP
+       printk("######################%s(): In MP Test Can not Set Essid\n",__FUNCTION__);
+       return 0;
+#endif
+       if(priv->bHwRadioOff == true){
+               printk("=========>%s():hw radio off,or Rf state is eRfOff, return\n",__FUNCTION__);
+               return 0;
+       }
+       down(&priv->wx_sem);
+       ret = rtllib_wx_set_essid(priv->rtllib,a,wrqu,b);
+
+       up(&priv->wx_sem);
+
+       return ret;
+}
+
+static int r8192_wx_get_essid(struct net_device *dev, 
+                             struct iw_request_info *a,
+                             union iwreq_data *wrqu, char *b)
+{
+       int ret;
+       struct r8192_priv *priv = rtllib_priv(dev);
+       
+       down(&priv->wx_sem);
+       
+       ret = rtllib_wx_get_essid(priv->rtllib, a, wrqu, b);
+
+       up(&priv->wx_sem);
+       
+       return ret;
+}
+
+static int r8192_wx_set_nick(struct net_device *dev,
+                          struct iw_request_info *info,
+                          union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+
+       if (wrqu->data.length > IW_ESSID_MAX_SIZE)
+               return -E2BIG;
+       down(&priv->wx_sem);
+       wrqu->data.length = min((size_t) wrqu->data.length, sizeof(priv->nick));
+       memset(priv->nick, 0, sizeof(priv->nick));
+       memcpy(priv->nick, extra, wrqu->data.length);
+       up(&priv->wx_sem);
+       return 0;
+
+}
+
+static int r8192_wx_get_nick(struct net_device *dev,
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+
+       down(&priv->wx_sem);
+       wrqu->data.length = strlen(priv->nick);
+       memcpy(extra, priv->nick, wrqu->data.length);
+       wrqu->data.flags = 1;   /* active */
+       up(&priv->wx_sem);
+       return 0;
+}
+
+static int r8192_wx_set_freq(struct net_device *dev, struct iw_request_info *a,
+                            union iwreq_data *wrqu, char *b)
+{
+       int ret;
+       struct r8192_priv *priv = rtllib_priv(dev);
+       
+       if(priv->bHwRadioOff == true)
+               return 0;
+       
+       down(&priv->wx_sem);
+       
+       ret = rtllib_wx_set_freq(priv->rtllib, a, wrqu, b);
+       
+       up(&priv->wx_sem);
+       return ret;
+}
+
+static int r8192_wx_get_name(struct net_device *dev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       return rtllib_wx_get_name(priv->rtllib, info, wrqu, extra);
+}
+
+
+static int r8192_wx_set_frag(struct net_device *dev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+
+       if(priv->bHwRadioOff == true)
+               return 0;
+       
+       if (wrqu->frag.disabled)
+               priv->rtllib->fts = DEFAULT_FRAG_THRESHOLD;
+       else {
+               if (wrqu->frag.value < MIN_FRAG_THRESHOLD ||
+                   wrqu->frag.value > MAX_FRAG_THRESHOLD)
+                       return -EINVAL;
+               
+               priv->rtllib->fts = wrqu->frag.value & ~0x1;
+       }
+
+       return 0;
+}
+
+
+static int r8192_wx_get_frag(struct net_device *dev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+
+       wrqu->frag.value = priv->rtllib->fts;
+       wrqu->frag.fixed = 0;   /* no auto select */
+       wrqu->frag.disabled = (wrqu->frag.value == DEFAULT_FRAG_THRESHOLD);
+
+       return 0;
+}
+
+
+static int r8192_wx_set_wap(struct net_device *dev,
+                        struct iw_request_info *info,
+                        union iwreq_data *awrq,
+                        char *extra)
+{
+
+       int ret;
+       struct r8192_priv *priv = rtllib_priv(dev);
+       
+       if ((rtllib_act_scanning(priv->rtllib, false)) && !(priv->rtllib->softmac_features & IEEE_SOFTMAC_SCAN)){
+               ;
+       }
+
+       if(priv->bHwRadioOff == true)
+               return 0;
+       
+#ifdef _RTL8192_EXT_PATCH_
+       if (priv->mshobj && (priv->rtllib->iw_mode==IW_MODE_MESH)){
+               return 0;
+       }
+#endif
+       down(&priv->wx_sem);
+       
+       ret = rtllib_wx_set_wap(priv->rtllib,info,awrq,extra);
+
+       up(&priv->wx_sem);
+
+       return ret;
+       
+}
+       
+
+static int r8192_wx_get_wap(struct net_device *dev, 
+                           struct iw_request_info *info, 
+                           union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       
+       return rtllib_wx_get_wap(priv->rtllib,info,wrqu,extra);
+}
+
+
+static int r8192_wx_get_enc(struct net_device *dev, 
+                           struct iw_request_info *info, 
+                           union iwreq_data *wrqu, char *key)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       
+#ifdef _RTL8192_EXT_PATCH_
+       return rtllib_wx_get_encode(priv->rtllib, info, wrqu, key,0);
+#else
+       return rtllib_wx_get_encode(priv->rtllib, info, wrqu, key);
+#endif
+}
+
+static int r8192_wx_set_enc(struct net_device *dev, 
+                           struct iw_request_info *info, 
+                           union iwreq_data *wrqu, char *key)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       int ret;
+
+       struct rtllib_device *ieee = priv->rtllib;
+       u32 hwkey[4]={0,0,0,0};
+       u8 mask=0xff;
+       u32 key_idx=0;
+       u8 zero_addr[4][6] ={   {0x00,0x00,0x00,0x00,0x00,0x00},
+                               {0x00,0x00,0x00,0x00,0x00,0x01}, 
+                               {0x00,0x00,0x00,0x00,0x00,0x02}, 
+                               {0x00,0x00,0x00,0x00,0x00,0x03} };
+       int i;
+
+       if ((rtllib_act_scanning(priv->rtllib, false)) && !(priv->rtllib->softmac_features & IEEE_SOFTMAC_SCAN)){
+               ;
+       }
+#ifdef CONFIG_MP
+       printk("######################%s(): In MP Test Can not Set Enc\n",__FUNCTION__);
+       return 0;
+#endif
+       if(priv->bHwRadioOff == true)
+               return 0;
+       
+       if(!priv->up) return -ENETDOWN;
+
+        priv->rtllib->wx_set_enc = 1;
+#ifdef ENABLE_IPS
+        down(&priv->rtllib->ips_sem);
+        IPSLeave(dev);
+        up(&priv->rtllib->ips_sem);                    
+#endif
+       down(&priv->wx_sem);
+       
+       RT_TRACE(COMP_SEC, "Setting SW wep key");
+#ifdef _RTL8192_EXT_PATCH_
+       ret = rtllib_wx_set_encode(priv->rtllib,info,wrqu,key,0);
+#else  
+       ret = rtllib_wx_set_encode(priv->rtllib,info,wrqu,key);
+#endif
+       up(&priv->wx_sem);
+
+
+       if (wrqu->encoding.flags & IW_ENCODE_DISABLED) {
+               ieee->pairwise_key_type = ieee->group_key_type = KEY_TYPE_NA;
+               CamResetAllEntry(dev);
+#ifdef _RTL8192_EXT_PATCH_
+               CamRestoreEachIFEntry(dev,1);
+               reset_IFswcam(dev,0);
+               priv->rtllib->wx_set_enc = 0;
+#else
+               memset(priv->rtllib->swcamtable,0,sizeof(SW_CAM_TABLE)*32);
+#endif
+               goto end_hw_sec;
+       }
+       if(wrqu->encoding.length!=0){
+
+               for(i=0 ; i<4 ; i++){
+                       hwkey[i] |=  key[4*i+0]&mask;
+                       if(i==1&&(4*i+1)==wrqu->encoding.length) mask=0x00;
+                       if(i==3&&(4*i+1)==wrqu->encoding.length) mask=0x00;
+                       hwkey[i] |= (key[4*i+1]&mask)<<8;
+                       hwkey[i] |= (key[4*i+2]&mask)<<16;
+                       hwkey[i] |= (key[4*i+3]&mask)<<24;
+               }
+
+               #define CONF_WEP40  0x4
+               #define CONF_WEP104 0x14
+
+               switch(wrqu->encoding.flags & IW_ENCODE_INDEX){
+                       case 0: key_idx = ieee->tx_keyidx; break;
+                       case 1: key_idx = 0; break;
+                       case 2: key_idx = 1; break;
+                       case 3: key_idx = 2; break;
+                       case 4: key_idx = 3; break;
+                       default: break;
+               }
+               if(wrqu->encoding.length==0x5){
+               ieee->pairwise_key_type = KEY_TYPE_WEP40;
+                       EnableHWSecurityConfig8192(dev);
+#ifndef _RTL8192_EXT_PATCH_
+                       setKey( dev,
+                               key_idx,                
+                               key_idx,                
+                               KEY_TYPE_WEP40,         
+                               zero_addr[key_idx],
+                               0,                      
+                               hwkey);                 
+
+                       set_swcam( dev,
+                               key_idx,                
+                               key_idx,                
+                               KEY_TYPE_WEP40,         
+                               zero_addr[key_idx],
+                               0,                      
+                               hwkey);                 
+
+#endif
+#if 0
+                       if(key_idx == 0){
+
+                               setKey( dev,
+                                       4,                      
+                                       key_idx,                      
+                                       KEY_TYPE_WEP40,        
+                                       broadcast_addr,         
+                                       0,                      
+                                       hwkey);                 
+                       }
+#endif
+               }
+
+               else if(wrqu->encoding.length==0xd){
+                       ieee->pairwise_key_type = KEY_TYPE_WEP104;
+                               EnableHWSecurityConfig8192(dev);
+#ifndef _RTL8192_EXT_PATCH_
+                       setKey( dev,
+                               key_idx,                
+                               key_idx,                
+                               KEY_TYPE_WEP104,        
+                               zero_addr[key_idx],
+                               0,                      
+                               hwkey);                 
+                       set_swcam( dev,
+                               key_idx,                
+                               key_idx,                
+                               KEY_TYPE_WEP104,        
+                               zero_addr[key_idx],
+                               0,                      
+                               hwkey);                 
+#endif
+#if 0 
+                       if(key_idx == 0){
+
+                               setKey( dev,
+                                       4,                      
+                                       key_idx,                      
+                                       KEY_TYPE_WEP104,        
+                                       broadcast_addr,         
+                                       0,                      
+                                       hwkey);                 
+                       }
+#endif
+               }
+               else printk("wrong type in WEP, not WEP40 and WEP104\n");
+#ifdef _RTL8192_EXT_PATCH_
+               if(ieee->state == RTLLIB_LINKED){
+                       if(ieee->iw_mode == IW_MODE_ADHOC)
+                       {
+                               
+                               setKey( dev,
+                                               key_idx,                      
+                                               key_idx,                      
+                                               ieee->pairwise_key_type,        
+                                               zero_addr[key_idx],             
+                                               0,                      
+                                               hwkey);                 
+                               set_swcam( dev,
+                                               key_idx,                      
+                                               key_idx,                      
+                                               ieee->pairwise_key_type,        
+                                               zero_addr[key_idx],             
+                                               0,                      
+                                               hwkey,               
+                                               0);
+                       }
+                       else{
+                       setKey( dev,
+                                       31,                      
+                                       key_idx,                      
+                                               ieee->pairwise_key_type,        
+                                       ieee->ap_mac_addr,         
+                                       0,                      
+                                       hwkey);                 
+                       set_swcam( dev,
+                                       31,                      
+                                       key_idx,                      
+                                               ieee->pairwise_key_type,        
+                                       ieee->ap_mac_addr,         
+                                       0,                      
+                                       hwkey,               
+                                       0);
+               }
+       }
+#endif
+       }
+
+#if 0
+       if(wrqu->encoding.length==0 && (wrqu->encoding.flags >>8) == 0x8 ){
+               printk("===>1\n");              
+               EnableHWSecurityConfig8192(dev);
+               key_idx = (wrqu->encoding.flags & 0xf)-1 ;
+               write_cam(dev, (4*6),   0xffff0000|read_cam(dev, key_idx*6) );
+               write_cam(dev, (4*6)+1, 0xffffffff);
+               write_cam(dev, (4*6)+2, read_cam(dev, (key_idx*6)+2) );
+               write_cam(dev, (4*6)+3, read_cam(dev, (key_idx*6)+3) );
+               write_cam(dev, (4*6)+4, read_cam(dev, (key_idx*6)+4) );
+               write_cam(dev, (4*6)+5, read_cam(dev, (key_idx*6)+5) );
+       }
+#endif
+#ifdef _RTL8192_EXT_PATCH_
+       priv->rtllib->wx_set_enc = 0;
+       printk("===================>%s():set ieee->wx_set_enc 0\n",__FUNCTION__);
+end_hw_sec:
+#else
+end_hw_sec:
+       priv->rtllib->wx_set_enc = 0;
+#endif
+       return ret;
+}
+
+
+static int r8192_wx_set_scan_type(struct net_device *dev, struct iw_request_info *aa, union
+ iwreq_data *wrqu, char *p){
+  
+       struct r8192_priv *priv = rtllib_priv(dev);
+       int *parms=(int*)p;
+       int mode=parms[0];
+       
+       if(priv->bHwRadioOff == true)
+               return 0;
+       
+       priv->rtllib->active_scan = mode;
+       
+       return 1;
+}
+
+
+
+#define R8192_MAX_RETRY 255
+static int r8192_wx_set_retry(struct net_device *dev, 
+                               struct iw_request_info *info, 
+                               union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       int err = 0;
+       
+       if(priv->bHwRadioOff == true)
+               return 0;
+       
+       down(&priv->wx_sem);
+       
+       if (wrqu->retry.flags & IW_RETRY_LIFETIME || 
+           wrqu->retry.disabled){
+               err = -EINVAL;
+               goto exit;
+       }
+       if (!(wrqu->retry.flags & IW_RETRY_LIMIT)){
+               err = -EINVAL;
+               goto exit;
+       }
+
+       if(wrqu->retry.value > R8192_MAX_RETRY){
+               err= -EINVAL;
+               goto exit;
+       }
+       if (wrqu->retry.flags & IW_RETRY_MAX) {
+               priv->retry_rts = wrqu->retry.value;
+               DMESG("Setting retry for RTS/CTS data to %d", wrqu->retry.value);
+       
+       }else {
+               priv->retry_data = wrqu->retry.value;
+               DMESG("Setting retry for non RTS/CTS data to %d", wrqu->retry.value);
+       }
+       
+
+       rtl8192_commit(dev);
+       /*
+       if(priv->up){
+               rtl8180_halt_adapter(dev);
+               rtl8180_rx_enable(dev);
+               rtl8180_tx_enable(dev);
+                       
+       }
+       */
+exit:
+       up(&priv->wx_sem);
+       
+       return err;
+}
+
+static int r8192_wx_get_retry(struct net_device *dev, 
+                               struct iw_request_info *info, 
+                               union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       
+
+       wrqu->retry.disabled = 0; /* can't be disabled */
+
+       if ((wrqu->retry.flags & IW_RETRY_TYPE) == 
+           IW_RETRY_LIFETIME) 
+               return -EINVAL;
+       
+       if (wrqu->retry.flags & IW_RETRY_MAX) {
+               wrqu->retry.flags = IW_RETRY_LIMIT & IW_RETRY_MAX;
+               wrqu->retry.value = priv->retry_rts;
+       } else {
+               wrqu->retry.flags = IW_RETRY_LIMIT & IW_RETRY_MIN;
+               wrqu->retry.value = priv->retry_data;
+       }
+       
+
+       return 0;
+}
+
+static int r8192_wx_get_sens(struct net_device *dev, 
+                               struct iw_request_info *info, 
+                               union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       if(priv->rf_set_sens == NULL) 
+               return -1; /* we have not this support for this radio */
+       wrqu->sens.value = priv->sens;
+       return 0;
+}
+
+
+static int r8192_wx_set_sens(struct net_device *dev, 
+                               struct iw_request_info *info, 
+                               union iwreq_data *wrqu, char *extra)
+{
+       
+       struct r8192_priv *priv = rtllib_priv(dev);
+       
+       short err = 0;
+       
+       if(priv->bHwRadioOff == true)
+               return 0;
+       
+       down(&priv->wx_sem);
+       if(priv->rf_set_sens == NULL) {
+               err= -1; /* we have not this support for this radio */
+               goto exit;
+       }
+       if(priv->rf_set_sens(dev, wrqu->sens.value) == 0)
+               priv->sens = wrqu->sens.value;
+       else
+               err= -EINVAL;
+
+exit:
+       up(&priv->wx_sem);
+       
+       return err;
+}
+
+#if (WIRELESS_EXT >= 18)
+#if 0
+static int r8192_wx_get_enc_ext(struct net_device *dev,
+                                        struct iw_request_info *info,
+                                        union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       int ret = 0;
+#ifdef _RTL8192_EXT_PATCH_
+       ret = rtllib_wx_get_encode_ext(priv->rtllib, info, wrqu, extra,0);
+#else
+       ret = rtllib_wx_get_encode_ext(priv->rtllib, info, wrqu, extra);
+#endif
+       return ret;
+}
+#endif
+
+#ifdef _RTL8192_EXT_PATCH_     
+static int meshdev_set_key_for_linked_peers(struct net_device *dev, u8 KeyIndex,u16 KeyType, u32 *KeyContent );
+static int r8192_set_hw_enc(struct net_device *dev,
+                                        struct iw_request_info *info,
+                                        union iwreq_data *wrqu, char *extra, u8 is_mesh)
+{
+       int ret=0;
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device* ieee = priv->rtllib;
+       u32 key[4] = {0};
+       struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;
+       struct iw_point *encoding = &wrqu->encoding;
+       u8 idx = 0, alg = 0, group = 0;
+       u8 broadcast_addr[6] = {0xff,0xff,0xff,0xff,0xff,0xff};
+       u8 zero[6] = {0};
+        priv->rtllib->wx_set_enc = 1;
+#ifdef ENABLE_IPS
+        down(&priv->rtllib->ips_sem);
+        IPSLeave(dev);
+        up(&priv->rtllib->ips_sem);                    
+#endif
+#if 0
+       static u8 CAM_CONST_ADDR[4][6] = {
+               {0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+               {0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
+               {0x00, 0x00, 0x00, 0x00, 0x00, 0x02},
+               {0x00, 0x00, 0x00, 0x00, 0x00, 0x03}};
+#endif
+       if ((encoding->flags & IW_ENCODE_DISABLED) ||
+               ext->alg == IW_ENCODE_ALG_NONE) 
+       {
+               if(is_mesh)
+               {
+#ifdef _RTL8192_EXT_PATCH_     
+                       ieee->mesh_pairwise_key_type = ieee->mesh_pairwise_key_type = KEY_TYPE_NA;
+#endif
+               }
+               else
+                       ieee->pairwise_key_type = ieee->group_key_type = KEY_TYPE_NA;
+               CamResetAllEntry(dev);
+               if(is_mesh)
+                       CamRestoreEachIFEntry(dev,0);
+               else
+                       CamRestoreEachIFEntry(dev,1);
+               reset_IFswcam(dev,is_mesh);
+               goto end_hw_sec;
+       }
+       alg =  (ext->alg == IW_ENCODE_ALG_CCMP)?KEY_TYPE_CCMP:ext->alg; 
+       idx = encoding->flags & IW_ENCODE_INDEX;
+       if (idx)
+               idx --;
+       group = ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY;
+       printk("====>group is %x\n",group);
+       if ((!group) || (IW_MODE_ADHOC == ieee->iw_mode) || (alg ==  KEY_TYPE_WEP40) || (IW_MODE_MESH == ieee->iw_mode))
+       {
+               if ((ext->key_len == 13) && (alg == KEY_TYPE_WEP40) )
+                       alg = KEY_TYPE_WEP104;
+               if(is_mesh)
+               {
+#ifdef _RTL8192_EXT_PATCH_     
+                       ieee->mesh_pairwise_key_type = alg;
+#endif
+               }
+               else
+                       ieee->pairwise_key_type = alg;
+               EnableHWSecurityConfig8192(dev);
+       }
+       memcpy((u8*)key, ext->key, 16); 
+       if ((alg & KEY_TYPE_WEP40) && (ieee->auth_mode !=2) )
+       {
+                       printk("=====>set WEP key\n");
+                       if (ext->key_len == 13){
+                               if(is_mesh)
+                               {
+#ifdef _RTL8192_EXT_PATCH_     
+                                       ieee->mesh_pairwise_key_type = alg = KEY_TYPE_WEP104;
+#endif
+                               }
+                               else
+                                       ieee->pairwise_key_type = alg = KEY_TYPE_WEP104;
+                       }
+                       if(ieee->iw_mode == IW_MODE_ADHOC){
+                       set_swcam( dev,
+                                       idx,
+                                       idx, 
+                                       alg,  
+                                       zero, 
+                                       0,              
+                                       key,               
+                                       is_mesh);
+                       setKey( dev,
+                                       idx,
+                                       idx, 
+                                       alg,  
+                                       zero, 
+                                       0,              
+                                       key);           
+                       }
+                       
+               if(!is_mesh){ 
+                       if(ieee->state == RTLLIB_LINKED){
+                               setKey( dev,
+                                               31,                      
+                                               idx,                      
+                                               ieee->pairwise_key_type,        
+                                               ieee->ap_mac_addr,         
+                                               0,                      
+                                               key);                 
+                               set_swcam( dev,
+                                               31,                      
+                                               idx,                      
+                                               ieee->pairwise_key_type,        
+                                               ieee->ap_mac_addr,         
+                                               0,                      
+                                               key,               
+                                               0);
+                       }
+               }
+       }
+       else if (group)
+       {
+               printk("set group key\n");
+               if(is_mesh)
+               {
+#ifdef _RTL8192_EXT_PATCH_     
+                       ieee->mesh_group_key_type = alg;
+#endif
+               }
+               else
+                       ieee->group_key_type = alg;
+               if(ieee->iw_mode == IW_MODE_ADHOC){
+                       set_swcam(  dev,
+                                       idx,
+                                       idx, 
+                                       alg,  
+                                       broadcast_addr, 
+                                       0,              
+                                       key,           
+                                       is_mesh);
+                       setKey(  dev,
+                                       idx,
+                                       idx, 
+                                       alg,  
+                                       broadcast_addr, 
+                                       0,              
+                                       key);           
+               }
+                       
+#ifdef _RTL8192_EXT_PATCH_     
+               if(is_mesh)
+                       meshdev_set_key_for_linked_peers(dev,
+                               idx, 
+                               alg,  
+                               key); 
+#endif
+       }
+       else 
+       {
+               printk("=============>set pairwise key\n");
+#ifdef RTL8192E
+               if ((ieee->pairwise_key_type == KEY_TYPE_CCMP) && ieee->pHTInfo->bCurrentHTSupport){
+                       write_nic_byte(dev, 0x173, 1); 
+               }
+#endif
+                       set_swcam( dev,
+                                       31, 
+                                       idx, 
+                                       alg,  
+                                       (u8*)ieee->ap_mac_addr, 
+                                       0,              
+                                       key,           
+                                       is_mesh);
+                       setKey( dev,
+                                       31, 
+                                       idx, 
+                                       alg,  
+                                       (u8*)ieee->ap_mac_addr, 
+                                       0,              
+                                       key);           
+                       
+       }
+
+end_hw_sec:
+        priv->rtllib->wx_set_enc = 0;
+       return ret;     
+}
+       
+int rtl8192_set_key_for_AP(struct rtllib_device *ieee)
+{
+       struct rtllib_crypt_data **crypt;
+       int key_len=0;
+       char key[32]; 
+       u16 keytype = IW_ENCODE_ALG_NONE;
+#ifdef _RTL8192_EXT_PATCH_
+       crypt = &ieee->sta_crypt[ieee->tx_keyidx];
+#else
+       crypt = &ieee->crypt[ieee->tx_keyidx];
+#endif
+       if (*crypt == NULL || (*crypt)->ops == NULL)
+       {
+               printk("%s():no encrypt now\n",__FUNCTION__);
+               return 0;
+       }
+       if (!((*crypt)->ops->set_key && (*crypt)->ops->get_key)) 
+               return -1;
+       
+       key_len = (*crypt)->ops->get_key(key, 32, NULL, (*crypt)->priv);
+       if (strcmp((*crypt)->ops->name, "WEP") == 0 )
+       {
+               if(key_len == 5)
+                       keytype = KEY_TYPE_WEP40;
+               else
+                       keytype = KEY_TYPE_WEP104;
+       }
+       else if (strcmp((*crypt)->ops->name, "TKIP") == 0)
+               return 0;
+       else if (strcmp((*crypt)->ops->name, "CCMP") == 0)
+               return 0;
+
+       set_swcam( ieee->dev,
+                               31,
+                               ieee->tx_keyidx, 
+                               keytype,  
+                               ieee->ap_mac_addr, 
+                               0,              
+                               (u32 *)key ,          
+                               0);
+       setKey( ieee->dev,
+                       31,
+                       ieee->tx_keyidx, 
+                       keytype,  
+                       ieee->ap_mac_addr, 
+                       0,              
+                       (u32 *)key);           
+       
+       
+       return 0;
+}
+
+static int r8192_wx_set_enc_ext(struct net_device *dev,
+                                        struct iw_request_info *info,
+                                        union iwreq_data *wrqu, char *extra)
+{
+       int ret=0;
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device* ieee = priv->rtllib;
+
+       if(priv->bHwRadioOff == true)
+               return 0;
+
+       SEM_DOWN_PRIV_WX(&priv->wx_sem);        
+       ret = rtllib_wx_set_encode_ext(ieee, info, wrqu, extra, 0);
+
+       ret |= r8192_set_hw_enc(dev,info,wrqu,extra, 0);
+       SEM_UP_PRIV_WX(&priv->wx_sem);  
+#endif
+
+       return ret;     
+}
+/*
+ * set key for mesh, not a wireless extension handler. 
+ * place it here because of porting from r8192_wx_set_enc_ext().  
+ */ 
+int r8192_mesh_set_enc_ext(struct net_device *dev,
+                        struct iw_point *encoding, struct iw_encode_ext *ext, u8 *addr)
+{
+       int ret=0;
+       int i=0;
+       u8 broadcast_addr[6] = {0xff,0xff,0xff,0xff,0xff,0xff};
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device* ieee = priv->rtllib;
+       u8 entry_idx = 0;
+       printk("=========================>%s()\n",__FUNCTION__);
+       down(&priv->wx_sem);
+       if(memcmp(addr,broadcast_addr,6))
+       {
+               if ((i=rtllib_find_MP(ieee, addr, 0)) < 0) 
+               {
+                       i = rtllib_find_MP(ieee, addr, 1); 
+                       if (i<0) 
+                               return -1;
+               }
+       }
+       ret = rtllib_mesh_set_encode_ext(ieee, encoding, ext, i);
+       if ((-EINVAL == ret) || (-ENOMEM == ret)) {
+               goto end_hw_sec;
+       }
+       {
+#if 0          
+               u8 zero[6] = {0};
+#endif
+               u32 key[4] = {0};
+               u8 idx = 0, alg = 0, group = 0;
+               if ((encoding->flags & IW_ENCODE_DISABLED) ||
+               ext->alg == IW_ENCODE_ALG_NONE) 
+               {
+                       CamResetAllEntry(dev);
+                       CamRestoreEachIFEntry(dev,0);
+                       reset_IFswcam(dev,1);
+                       goto end_hw_sec;
+               }
+               alg =  (ext->alg == IW_ENCODE_ALG_CCMP)?KEY_TYPE_CCMP:ext->alg; 
+               idx = encoding->flags & IW_ENCODE_INDEX;
+               if (idx)
+                       idx --;
+               group = ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY;
+
+               if (!group)
+               {
+                       ieee->mesh_pairwise_key_type = alg;
+                       EnableHWSecurityConfig8192(dev);        
+               }
+               
+               memcpy((u8*)key, ext->key, 16); 
+
+               if(group)
+               {
+                       ieee->mesh_group_key_type = alg;
+#if 0
+                       setKey( dev,
+                                       idx,
+                                       idx, 
+                                       alg,  
+                                       broadcast_addr, 
+                                       0,              
+                                       key);           
+#endif
+               }
+               else 
+               {
+                       printk("===>%s(): set pairwise key\n",__FUNCTION__);
+                       if ((ieee->mesh_pairwise_key_type == KEY_TYPE_CCMP) && ieee->pHTInfo->bCurrentHTSupport){
+                               write_nic_byte(dev, 0x173, 1); 
+                       }
+                       entry_idx = rtl8192_get_free_hwsec_cam_entry(ieee,addr);
+#if 0 
+                       printk("%s(): Can't find  free hw security cam entry\n",__FUNCTION__);
+                       ret = -1;
+#else
+                       if (entry_idx >= TOTAL_CAM_ENTRY-1) {
+                               printk("%s(): Can't find  free hw security cam entry\n",__FUNCTION__);
+                               ret = -1;
+                       } else {
+                       set_swcam( dev,
+                                       entry_idx,              
+                                       idx,            
+                                       alg,            
+                                       (u8*)addr,      
+                                       0,              
+                                       key,            
+                                       1);             
+                       setKey( dev,
+                                       entry_idx,              
+                                       idx,            
+                                       alg,            
+                                       (u8*)addr,      
+                                       0,              
+                                       key);           
+                               ret = 0;
+                       }
+#endif
+               }
+
+
+       }
+
+end_hw_sec:
+       up(&priv->wx_sem);
+#endif
+       return ret;     
+
+}
+#else
+static int r8192_wx_set_enc_ext(struct net_device *dev,
+                                        struct iw_request_info *info,
+                                        union iwreq_data *wrqu, char *extra)
+{
+       int ret=0;
+       
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device* ieee = priv->rtllib;
+
+       if(priv->bHwRadioOff == true)
+               return 0;
+
+       down(&priv->wx_sem);
+
+        priv->rtllib->wx_set_enc = 1;
+#ifdef ENABLE_IPS
+        down(&priv->rtllib->ips_sem);
+        IPSLeave(dev);
+        up(&priv->rtllib->ips_sem);                    
+#endif
+
+       ret = rtllib_wx_set_encode_ext(ieee, info, wrqu, extra);
+
+       {
+               u8 broadcast_addr[6] = {0xff,0xff,0xff,0xff,0xff,0xff};
+               u8 zero[6] = {0};
+               u32 key[4] = {0};
+               struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;
+               struct iw_point *encoding = &wrqu->encoding;
+#if 0
+               static u8 CAM_CONST_ADDR[4][6] = {
+                       {0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+                       {0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
+                       {0x00, 0x00, 0x00, 0x00, 0x00, 0x02},
+                       {0x00, 0x00, 0x00, 0x00, 0x00, 0x03}};
+#endif
+               u8 idx = 0, alg = 0, group = 0;
+               if ((encoding->flags & IW_ENCODE_DISABLED) ||
+               ext->alg == IW_ENCODE_ALG_NONE) 
+               {
+                       ieee->pairwise_key_type = ieee->group_key_type = KEY_TYPE_NA;
+                       CamResetAllEntry(dev);
+                       memset(priv->rtllib->swcamtable,0,sizeof(SW_CAM_TABLE)*32);
+                       goto end_hw_sec;
+               }
+               alg =  (ext->alg == IW_ENCODE_ALG_CCMP)?KEY_TYPE_CCMP:ext->alg; 
+               idx = encoding->flags & IW_ENCODE_INDEX;
+               if (idx)
+                       idx --;
+               group = ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY;
+
+               if ((!group) || (IW_MODE_ADHOC == ieee->iw_mode) || (alg ==  KEY_TYPE_WEP40))
+               {
+                       if ((ext->key_len == 13) && (alg == KEY_TYPE_WEP40) )
+                               alg = KEY_TYPE_WEP104;
+                       ieee->pairwise_key_type = alg;
+                       EnableHWSecurityConfig8192(dev);
+               }
+               memcpy((u8*)key, ext->key, 16); 
+               
+               if ((alg & KEY_TYPE_WEP40) && (ieee->auth_mode !=2) )
+               {
+                       if (ext->key_len == 13)
+                               ieee->pairwise_key_type = alg = KEY_TYPE_WEP104;
+                       setKey( dev,
+                                       idx,
+                                       idx, 
+                                       alg,  
+                                       zero, 
+                                       0,              
+                                       key);           
+                       set_swcam( dev,
+                                       idx,
+                                       idx, 
+                                       alg,  
+                                       zero, 
+                                       0,              
+                                       key);           
+               }
+               else if (group)
+               {
+                       ieee->group_key_type = alg;
+                       setKey( dev,
+                                       idx,
+                                       idx, 
+                                       alg,  
+                                       broadcast_addr, 
+                                       0,              
+                                       key);           
+                       set_swcam( dev,
+                                       idx,
+                                       idx, 
+                                       alg,  
+                                       broadcast_addr, 
+                                       0,              
+                                       key);           
+               }
+               else 
+               {
+                       #ifdef RTL8192E
+                       if ((ieee->pairwise_key_type == KEY_TYPE_CCMP) && ieee->pHTInfo->bCurrentHTSupport){
+                                                       write_nic_byte(dev, 0x173, 1); 
+                       }
+                       #endif
+                       setKey( dev,
+                                       4,
+                                       idx, 
+                                       alg,  
+                                       (u8*)ieee->ap_mac_addr, 
+                                       0,              
+                                       key);           
+                       set_swcam( dev,
+                                       4,
+                                       idx, 
+                                       alg,  
+                                       (u8*)ieee->ap_mac_addr, 
+                                       0,              
+                                       key);           
+               }
+
+
+       }
+
+end_hw_sec:
+        priv->rtllib->wx_set_enc = 0;
+       up(&priv->wx_sem);
+#endif
+       return ret;     
+
+}
+#endif
+static int r8192_wx_set_auth(struct net_device *dev,
+                                        struct iw_request_info *info,
+                                        union iwreq_data *data, char *extra)
+{
+       int ret=0;
+       
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
+       struct r8192_priv *priv = rtllib_priv(dev);
+
+       if(priv->bHwRadioOff == true)
+               return 0;
+
+       down(&priv->wx_sem);
+       ret = rtllib_wx_set_auth(priv->rtllib, info, &(data->param), extra);
+       up(&priv->wx_sem);
+#endif
+       return ret;
+}
+
+static int r8192_wx_set_mlme(struct net_device *dev,
+                                        struct iw_request_info *info,
+                                        union iwreq_data *wrqu, char *extra)
+{
+
+       int ret=0;
+       
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
+       struct r8192_priv *priv = rtllib_priv(dev);
+
+       if(priv->bHwRadioOff == true)
+               return 0;
+
+       down(&priv->wx_sem);
+       ret = rtllib_wx_set_mlme(priv->rtllib, info, wrqu, extra);
+       up(&priv->wx_sem);
+#endif
+       return ret;
+}
+#endif
+
+static int r8192_wx_set_gen_ie(struct net_device *dev,
+                                        struct iw_request_info *info,
+                                        union iwreq_data *data, char *extra)
+{
+       int ret = 0;
+       
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
+        struct r8192_priv *priv = rtllib_priv(dev);
+
+       if(priv->bHwRadioOff == true)
+               return 0;
+
+        down(&priv->wx_sem);
+        ret = rtllib_wx_set_gen_ie(priv->rtllib, extra, data->data.length);
+        up(&priv->wx_sem);
+#endif
+        return ret;
+}
+
+static int r8192_wx_get_gen_ie(struct net_device *dev,
+                               struct iw_request_info *info, 
+                              union iwreq_data *data, char *extra)
+{
+       int ret = 0;
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
+        struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device* ieee = priv->rtllib;
+
+       if (ieee->wpa_ie_len == 0 || ieee->wpa_ie == NULL) {
+               data->data.length = 0;
+               return 0;
+       }
+
+       if (data->data.length < ieee->wpa_ie_len) {
+               return -E2BIG;
+       }
+
+       data->data.length = ieee->wpa_ie_len;
+       memcpy(extra, ieee->wpa_ie, ieee->wpa_ie_len);
+#endif
+        return ret;
+}
+
+#ifdef _RTL8192_EXT_PATCH_
+/*
+   Output:
+     (case 1) Mesh: Enable. MESHID=[%s] (max length of %s is 32 bytes). 
+     (case 2) Mesh: Disable.
+*/
+static int r8192_wx_get_meshinfo(struct net_device *dev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       
+       if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_get_meshinfo )
+               return 0;
+       return priv->mshobj->ext_patch_r819x_wx_get_meshinfo(dev, info, wrqu, extra);
+}
+
+
+static int r8192_wx_enable_mesh(struct net_device *dev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device *ieee = priv->rtllib;
+       RT_RF_POWER_STATE       rtState;
+       int ret = 0;
+        rtState = priv->rtllib->eRFPowerState;
+       
+       if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_enable_mesh )
+               return 0;
+
+       SEM_DOWN_PRIV_WX(&priv->wx_sem);        
+       if(priv->mshobj->ext_patch_r819x_wx_enable_mesh(dev))
+       {
+               union iwreq_data tmprqu;
+#ifdef ENABLE_IPS
+               if(priv->rtllib->PowerSaveControl.bInactivePs){
+                       if(rtState == eRfOff){
+                               if(priv->rtllib->RfOffReason > RF_CHANGE_BY_IPS)
+                               {
+                                       RT_TRACE(COMP_ERR, "%s(): RF is OFF.\n",__FUNCTION__);
+                                       SEM_UP_PRIV_WX(&priv->wx_sem);  
+                                       return -1;
+                               }
+                               else{
+                                       printk("=========>%s(): IPSLeave\n",__FUNCTION__);
+                                       IPSLeave(dev);
+                               }
+                       }
+               }
+#endif
+               if((ieee->only_mesh == 0) &&(ieee->is_server_eth0 == 0))  
+               {
+                       tmprqu.mode = ieee->iw_mode;
+                       ieee->iw_mode = 0; 
+                       ret = rtllib_wx_set_mode(ieee, info, &tmprqu, extra);
+               }
+       }
+
+       SEM_UP_PRIV_WX(&priv->wx_sem);  
+       
+       return ret;
+       
+}
+
+static int r8192_wx_disable_mesh(struct net_device *dev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device *ieee = priv->rtllib;
+
+       int ret = 0;
+       if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_disable_mesh )
+               return 0;
+
+       SEM_DOWN_PRIV_WX(&priv->wx_sem);        
+       if(priv->mshobj->ext_patch_r819x_wx_disable_mesh(dev))
+       {
+               union iwreq_data tmprqu;
+               tmprqu.mode = ieee->iw_mode;
+               ieee->iw_mode = 999;
+               ret = rtllib_wx_set_mode(ieee, info, &tmprqu, extra);
+       }
+
+       SEM_UP_PRIV_WX(&priv->wx_sem);  
+       
+       return ret;
+}
+
+
+int r8192_wx_set_channel(struct net_device *dev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       int ch = *extra;
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device *ieee = priv->rtllib;
+       
+       if (!priv->mshobj || (ieee->iw_mode != IW_MODE_MESH) || !priv->mshobj->ext_patch_r819x_wx_set_channel || !ieee->only_mesh)
+               return 0;       
+                       
+       if ( ch < 0 )   
+       {
+               rtllib_start_scan(ieee);                        
+               ieee->meshScanMode =2;
+       }
+       else    
+       {       
+               ieee->meshScanMode =0;          
+               if(priv->mshobj->ext_patch_r819x_wx_set_channel)
+               {
+                       priv->mshobj->ext_patch_r819x_wx_set_channel(ieee, ch);
+                       priv->mshobj->ext_patch_r819x_wx_set_mesh_chan(dev,ch);
+               }
+               queue_work_rsl(ieee->wq, &ieee->ext_stop_scan_wq);
+               ieee->set_chan(ieee->dev, ch);
+printk("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!set current mesh network channel %d\n", ch);
+               ieee->current_mesh_network.channel = ch;
+               if(ieee->only_mesh)
+                       ieee->current_network.channel = ch;
+               
+               ieee->current_network.channel = ieee->current_mesh_network.channel; 
+               if(ieee->pHTInfo->bCurBW40MHz)
+                       HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20_40, (ieee->current_mesh_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER);  
+               else
+                       HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, (ieee->current_mesh_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER);  
+               if(rtllib_act_scanning(ieee,true) == true)
+                       rtllib_stop_scan_syncro(ieee);
+       }
+               
+       return 0;
+}
+
+static int r8192_wx_set_meshID(struct net_device *dev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{      
+       struct r8192_priv *priv = rtllib_priv(dev);     
+       if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_set_meshID )
+               return 0;
+
+       return priv->mshobj->ext_patch_r819x_wx_set_meshID(dev, wrqu->data.pointer);    
+}
+
+
+/* reserved for future
+static int r8192_wx_add_mac_deny(struct net_device *dev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       
+       if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_set_add_mac_deny )
+               return 0;
+
+       return priv->mshobj->ext_patch_r819x_wx_set_add_mac_deny(dev, info, wrqu, extra);
+}
+
+static int r8192_wx_del_mac_deny(struct net_device *dev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       
+       if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_set_del_mac_deny )
+               return 0;
+
+       return priv->mshobj->ext_patch_r819x_wx_set_del_mac_deny(dev, info, wrqu, extra);
+}
+*/
+/* reserved for future
+static int r8192_wx_get_mac_deny(struct net_device *dev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       
+       if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_get_mac_deny )
+               return 0;
+
+       return priv->mshobj->ext_patch_r819x_wx_get_mac_deny(dev, info, wrqu, extra);
+}
+static int r8192_wx_join_mesh(struct net_device *dev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{      
+       struct r8192_priv *priv = rtllib_priv(dev);     
+       int ret=0;
+       char ch;
+       if(priv->rtllib->iw_mode == IW_MODE_MESH) {
+               printk("join mesh %s\n",extra);
+               if (wrqu->essid.length > IW_ESSID_MAX_SIZE){
+                       ret= -E2BIG;
+                       goto out;
+               }
+               if((wrqu->essid.length == 1) && (wrqu->essid.flags == 1)){
+                       ret = 0;
+                       goto out;
+               }
+               if (wrqu->essid.flags && wrqu->essid.length) {
+                       if(priv->mshobj->ext_patch_r819x_wx_get_selected_mesh_channel(dev, extra, &ch))
+                       {
+                               priv->mshobj->ext_patch_r819x_wx_set_meshID(dev, extra); 
+                               priv->mshobj->ext_patch_r819x_wx_set_mesh_chan(dev,ch); 
+                               r8192_wx_set_channel(dev, NULL, NULL, &ch);
+                       }
+                       else
+                               printk("invalid mesh #\n");
+               }
+       }
+out:
+       return ret;
+}
+*/
+
+static int r8192_wx_get_mesh_list(struct net_device *dev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       
+       if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_get_mesh_list )
+               return 0;
+       return priv->mshobj->ext_patch_r819x_wx_get_mesh_list(dev, info, wrqu, extra);
+}
+
+static int r8192_wx_mesh_scan(struct net_device *dev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       
+       if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_mesh_scan )
+               return 0;
+       return priv->mshobj->ext_patch_r819x_wx_mesh_scan(dev, info, wrqu, extra);
+}
+
+static int r8192_wx_set_meshmode(struct net_device *dev,
+               struct iw_request_info *info,
+               union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       
+       SEM_DOWN_PRIV_WX(&priv->wx_sem);        
+
+       printk("%s(): set mesh mode ! extra is %d\n",__FUNCTION__, *extra);
+       if((*extra != WIRELESS_MODE_A) && (*extra != WIRELESS_MODE_B) && 
+               (*extra != WIRELESS_MODE_G) && (*extra != WIRELESS_MODE_AUTO) &&
+               (*extra != WIRELESS_MODE_N_24G) && (*extra != WIRELESS_MODE_N_5G))
+       {
+               printk("ERR!! you should input 1 | 2 | 4 | 8 | 16 | 32\n");
+               SEM_UP_PRIV_WX(&priv->wx_sem);  
+               return -1;
+       }
+       if(priv->rtllib->state == RTLLIB_LINKED)
+       {
+               if((priv->rtllib->mode != WIRELESS_MODE_N_5G) && (priv->rtllib->mode != WIRELESS_MODE_N_24G)){
+                       printk("===>wlan0 is linked,and ieee->mode is not N mode ,do not need to set mode,return\n");
+                       SEM_UP_PRIV_WX(&priv->wx_sem);  
+                       return 0;
+               }
+       }
+       priv->rtllib->mode = *extra;
+       if(priv->ResetProgress == RESET_TYPE_NORESET)
+               rtl8192_SetWirelessMode(dev, priv->rtllib->mode);
+        HTUseDefaultSetting(priv->rtllib);
+       SEM_UP_PRIV_WX(&priv->wx_sem);  
+       return 0;
+
+}
+
+static int r8192_wx_set_meshBW(struct net_device *dev,
+                struct iw_request_info *info,
+                union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+
+       SEM_DOWN_PRIV_WX(&priv->wx_sem);        
+
+       printk("%s(): set mesh BW ! extra is %d\n",__FUNCTION__, *extra);
+       priv->rtllib->pHTInfo->bRegBW40MHz = *extra;
+       SEM_UP_PRIV_WX(&priv->wx_sem);  
+       return 0;
+}
+static int r8192_wx_set_mesh_security(struct net_device *dev,
+                struct iw_request_info *info,
+                union iwreq_data *wrqu, char *extra)
+{
+        struct r8192_priv *priv = rtllib_priv(dev);
+        struct rtllib_device* ieee = priv->rtllib;
+
+
+       printk("===>%s()\n",__FUNCTION__);      
+        down(&priv->wx_sem);
+
+        printk("%s(): set mesh security! extra is %d\n",__FUNCTION__, *extra);
+        ieee->mesh_security_setting = *extra;
+
+        if (0 == ieee->mesh_security_setting)
+        {
+               ieee->mesh_pairwise_key_type = ieee->mesh_group_key_type = KEY_TYPE_NA;
+               CamResetAllEntry(dev);
+               CamRestoreEachIFEntry(dev,0);
+               reset_IFswcam(dev,1);
+        }
+       else
+       {
+               ieee->mesh_pairwise_key_type = KEY_TYPE_CCMP;
+               ieee->mesh_group_key_type = KEY_TYPE_CCMP;
+       }
+               printk("=================>ieee->mesh_pairwise_key_type is %d,ieee->mesh_group_key_type is %d\n",ieee->mesh_pairwise_key_type,ieee->mesh_group_key_type); 
+        up(&priv->wx_sem);
+        return 0;
+
+}
+
+static int r8192_wx_set_mkdd_id(struct net_device *dev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{      
+       struct r8192_priv *priv = rtllib_priv(dev);     
+       printk("===>%s()\n",__FUNCTION__);      
+       if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_set_mkdd_id)
+               return 0;
+
+       return priv->mshobj->ext_patch_r819x_wx_set_mkdd_id(dev, wrqu->data.pointer);   
+}
+
+static int r8192_wx_set_mesh_key(struct net_device *dev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{      
+       struct r8192_priv *priv = rtllib_priv(dev);     
+       printk("===>%s()\n",__FUNCTION__);      
+       if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_set_mesh_key)
+               return 0;
+       return priv->mshobj->ext_patch_r819x_wx_set_mesh_key(dev, wrqu->data.pointer);  
+}
+
+static int r8192_wx_set_mesh_sec_type(struct net_device *dev,
+                struct iw_request_info *info,
+                union iwreq_data *wrqu, char *extra)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device* ieee = priv->rtllib;
+
+
+       printk("===>%s()\n",__FUNCTION__);      
+       down(&priv->wx_sem);
+
+       printk("%s(): set mesh security type! extra is %d\n",__FUNCTION__, *extra);
+       if (ieee->mesh_sec_type == 1 && *extra != 1 && ieee->mesh_security_setting == 3) {
+               if(priv->mshobj->ext_patch_r819x_wx_release_sae_info)
+                       priv->mshobj->ext_patch_r819x_wx_release_sae_info(ieee);
+       }
+       ieee->mesh_sec_type = *extra;
+
+       up(&priv->wx_sem);
+       return 0;
+}
+
+#endif 
+
+#define IW_IOCTL(x) [(x)-SIOCSIWCOMMIT]
+static iw_handler r8192_wx_handlers[] =
+{
+        IW_IOCTL(SIOCGIWNAME) = r8192_wx_get_name,       
+        IW_IOCTL(SIOCSIWFREQ) = r8192_wx_set_freq,        
+        IW_IOCTL(SIOCGIWFREQ) = r8192_wx_get_freq,        
+        IW_IOCTL(SIOCSIWMODE) = r8192_wx_set_mode,        
+        IW_IOCTL(SIOCGIWMODE) = r8192_wx_get_mode,        
+        IW_IOCTL(SIOCSIWSENS) = r8192_wx_set_sens,        
+        IW_IOCTL(SIOCGIWSENS) = r8192_wx_get_sens,        
+        IW_IOCTL(SIOCGIWRANGE) = rtl8192_wx_get_range,   
+        IW_IOCTL(SIOCSIWAP) = r8192_wx_set_wap,          
+        IW_IOCTL(SIOCGIWAP) = r8192_wx_get_wap,           
+        IW_IOCTL(SIOCSIWSCAN) = r8192_wx_set_scan,        
+        IW_IOCTL(SIOCGIWSCAN) = r8192_wx_get_scan,        
+        IW_IOCTL(SIOCSIWESSID) = r8192_wx_set_essid,      
+        IW_IOCTL(SIOCGIWESSID) = r8192_wx_get_essid,      
+        IW_IOCTL(SIOCSIWNICKN) = r8192_wx_set_nick,
+               IW_IOCTL(SIOCGIWNICKN) = r8192_wx_get_nick,
+        IW_IOCTL(SIOCSIWRATE) = r8192_wx_set_rate,        
+        IW_IOCTL(SIOCGIWRATE) = r8192_wx_get_rate,        
+        IW_IOCTL(SIOCSIWRTS) = r8192_wx_set_rts,          
+        IW_IOCTL(SIOCGIWRTS) = r8192_wx_get_rts,          
+        IW_IOCTL(SIOCSIWFRAG) = r8192_wx_set_frag,        
+        IW_IOCTL(SIOCGIWFRAG) = r8192_wx_get_frag,        
+        IW_IOCTL(SIOCSIWRETRY) = r8192_wx_set_retry,      
+        IW_IOCTL(SIOCGIWRETRY) = r8192_wx_get_retry,      
+        IW_IOCTL(SIOCSIWENCODE) = r8192_wx_set_enc,       
+        IW_IOCTL(SIOCGIWENCODE) = r8192_wx_get_enc,       
+        IW_IOCTL(SIOCSIWPOWER) = r8192_wx_set_power,         
+        IW_IOCTL(SIOCGIWPOWER) = r8192_wx_get_power,         
+#if (WIRELESS_EXT >= 18)
+               IW_IOCTL(SIOCSIWGENIE) = r8192_wx_set_gen_ie,        
+               IW_IOCTL(SIOCGIWGENIE) = r8192_wx_get_gen_ie,
+               IW_IOCTL(SIOCSIWMLME) = r8192_wx_set_mlme,        
+               IW_IOCTL(SIOCSIWAUTH) = r8192_wx_set_auth,          
+               IW_IOCTL(SIOCSIWENCODEEXT) = r8192_wx_set_enc_ext,  
+#endif
+}; 
+
+/* 
+ * the following rule need to be follwing,
+ * Odd : get (world access), 
+ * even : set (root access) 
+ * */
+static const struct iw_priv_args r8192_private_args[] = { 
+       {
+               SIOCIWFIRSTPRIV + 0x0, 
+               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_debugflag" 
+       }, 
+       {
+               SIOCIWFIRSTPRIV + 0x1,
+               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "activescan"
+       },
+       {
+               SIOCIWFIRSTPRIV + 0x2, 
+               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "rawtx" 
+       }
+       ,
+       {
+               SIOCIWFIRSTPRIV + 0x3,
+               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "forcereset"
+       }
+       ,
+       {
+               SIOCIWFIRSTPRIV + 0x4,
+               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "force_mic_error"
+       }
+       ,
+       {
+               SIOCIWFIRSTPRIV + 0x5,
+               IW_PRIV_TYPE_NONE, IW_PRIV_TYPE_INT|IW_PRIV_SIZE_FIXED|1, 
+               "firm_ver"
+       }
+       ,
+       {
+               SIOCIWFIRSTPRIV + 0x6,
+               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED|1, IW_PRIV_TYPE_NONE, 
+               "set_power"
+       }
+        ,
+#ifdef _RTL8192_EXT_PATCH_
+       {
+               SIOCIWFIRSTPRIV + 0x7,
+               IW_PRIV_TYPE_NONE, IW_PRIV_TYPE_CHAR|512, 
+               "print_reg"
+       }
+       ,
+       {
+               SIOCIWFIRSTPRIV + 0x8,
+               IW_PRIV_TYPE_NONE, IW_PRIV_TYPE_CHAR|64, 
+               "resume_firm"
+       }
+       ,
+#endif
+       {
+               SIOCIWFIRSTPRIV + 0x9,
+               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED|1, IW_PRIV_TYPE_NONE, 
+               "radio"
+       }
+        ,
+       {
+               SIOCIWFIRSTPRIV + 0xa,
+               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED|1, IW_PRIV_TYPE_NONE, 
+               "lps_interv"
+       }
+        ,
+       {
+               SIOCIWFIRSTPRIV + 0xb,
+               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED|1, IW_PRIV_TYPE_NONE, 
+               "lps_force"
+       }
+       ,
+       {
+               SIOCIWFIRSTPRIV + 0xc,
+               0, IW_PRIV_TYPE_CHAR|2047, "adhoc_peer_list"
+       }
+#ifdef _RTL8192_EXT_PATCH_
+       ,
+       {
+               SIOCIWFIRSTPRIV + 0xd,
+               IW_PRIV_TYPE_NONE, IW_PRIV_TYPE_CHAR|64, 
+               "driverVer"
+       }
+#endif
+#ifdef CONFIG_MP       
+       ,
+       {
+               SIOCIWFIRSTPRIV + 0xe,
+                IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "SetChan"
+       }
+       ,
+       {
+               SIOCIWFIRSTPRIV + 0xf,
+                IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "SetRate"
+       }
+       ,
+       {
+               SIOCIWFIRSTPRIV + 0x10,
+                IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "SetTxPower"
+       }
+       ,
+       {
+               SIOCIWFIRSTPRIV + 0x11,
+                IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "SetBW"
+       }
+        ,
+        {
+                SIOCIWFIRSTPRIV + 0x12,
+                IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "TxStart"
+        }
+       ,
+       {
+               SIOCIWFIRSTPRIV + 0x13,
+                IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,0, "SetSingleCarrier"
+       }
+        ,
+        {
+                SIOCIWFIRSTPRIV + 0x14,
+                IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, 0, "WriteRF"
+        }
+        ,
+        {
+                SIOCIWFIRSTPRIV + 0x15,
+                IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, 0, "WriteMAC"
+        }
+#endif
+};
+
+static iw_handler r8192_private_handler[] = {
+       (iw_handler)r8192_wx_set_debugflag,   /*SIOCIWSECONDPRIV*/
+       (iw_handler)r8192_wx_set_scan_type,
+       (iw_handler)r8192_wx_set_rawtx,
+       (iw_handler)r8192_wx_force_reset,
+       (iw_handler)r8192_wx_force_mic_error,
+       (iw_handler)r8191se_wx_get_firm_version,
+       (iw_handler)r8192_wx_adapter_power_status,          
+#ifdef _RTL8192_EXT_PATCH_
+       (iw_handler)r8192_wx_print_reg,     
+       (iw_handler)r8192_wx_resume_firm,
+#else
+       (iw_handler)NULL, 
+       (iw_handler)NULL,
+#endif
+       (iw_handler)r8192se_wx_set_radio,
+       (iw_handler)r8192se_wx_set_lps_awake_interval,
+       (iw_handler)r8192se_wx_set_force_lps,
+       (iw_handler)r8192_wx_get_adhoc_peers,
+#ifdef _RTL8192_EXT_PATCH_
+       (iw_handler)r8192_wx_get_drv_version,
+#else
+       (iw_handler)NULL,
+#endif
+#ifdef CONFIG_MP
+       (iw_handler)r8192_wx_mp_set_chan,
+       (iw_handler)r8192_wx_mp_set_txrate,
+       (iw_handler)r8192_wx_mp_set_txpower,
+       (iw_handler)r8192_wx_mp_set_bw,
+        (iw_handler)r8192_wx_mp_set_txstart,
+        (iw_handler)r8192_wx_mp_set_singlecarrier,
+        (iw_handler)r8192_wx_mp_write_rf,
+       (iw_handler)r8192_wx_mp_write_mac,
+#else
+       (iw_handler)NULL,
+       (iw_handler)NULL,
+       (iw_handler)NULL,
+       (iw_handler)NULL,
+       (iw_handler)NULL,
+       (iw_handler)NULL,
+       (iw_handler)NULL,
+       (iw_handler)NULL,
+#endif
+};
+
+struct iw_statistics *r8192_get_wireless_stats(struct net_device *dev)
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device* ieee = priv->rtllib;
+       struct iw_statistics* wstats = &priv->wstats;
+       int tmp_level = 0;
+       int tmp_qual = 0;
+       int tmp_noise = 0;
+       if(ieee->state < RTLLIB_LINKED)
+       {
+               wstats->qual.qual = 10;
+               wstats->qual.level = 0;
+               wstats->qual.noise = -100;
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14)) 
+               wstats->qual.updated = IW_QUAL_ALL_UPDATED | IW_QUAL_DBM;
+#else
+               wstats->qual.updated = 0x0f;
+#endif
+               return wstats;
+       }
+       
+       tmp_level = (&ieee->current_network)->stats.rssi;
+       tmp_qual = (&ieee->current_network)->stats.signal;
+       tmp_noise = (&ieee->current_network)->stats.noise;                      
+
+       wstats->qual.level = tmp_level;
+       wstats->qual.qual = tmp_qual;
+       wstats->qual.noise = tmp_noise;
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14)) 
+       wstats->qual.updated = IW_QUAL_ALL_UPDATED | IW_QUAL_DBM;
+#else
+       wstats->qual.updated = 0x0f;
+#endif
+       return wstats;
+}
+
+#if defined RTL8192SE || defined RTL8192CE
+u8 SS_Rate_Map_G[6][2] = {{40, MGN_54M}, {30, MGN_48M}, {20, MGN_36M},
+       {12, MGN_24M}, {7, MGN_18M}, {0, MGN_12M}};
+u8 MSI_SS_Rate_Map_G[6][2] = {{40, MGN_54M}, {30, MGN_54M}, {20, MGN_54M},
+       {12, MGN_48M}, {7, MGN_36M}, {0, MGN_24M}};
+u8 SS_Rate_Map_B[2][2] = {{7, MGN_11M}, {0, MGN_5_5M}};
+u8 SS_Rate_Map_N_MCS7[7][2] = {{40, MGN_MCS7}, {30, MGN_MCS5}, {25, MGN_MCS4},
+       {23, MGN_MCS3}, {19, MGN_MCS2}, {8, MGN_MCS1}, {0, MGN_MCS0}};
+u8 SS_Rate_Map_N_MCS15[7][2] = {{40, MGN_MCS15}, {35, MGN_MCS14}, {31, MGN_MCS12},
+       {28, MGN_MCS7}, {25, MGN_MCS5}, {23, MGN_MCS3}, {20, MGN_MCS0}};
+#define TxRateTypeNormal        0
+#define TxRateTypeCurrent       1
+#define TxRateTypeStartRate     2
+
+u8 rtl8192_decorate_txrate_by_singalstrength(u32 SignalStrength, u8 *SS_Rate_Map, u8 MapSize)
+{
+       u8 index = 0;
+
+       for (index = 0; index < (MapSize * 2); index += 2) {
+               if (SignalStrength > SS_Rate_Map[index])
+                       return SS_Rate_Map[index+1];
+       }
+
+       return MGN_1M;
+}
+
+u16 rtl8192_11n_user_show_rates(struct net_device* dev)
+{
+       struct r8192_priv  *priv = rtllib_priv(dev);
+       static u8  TimesForReportingFullRxSpeedAfterConnected = 100;
+       u8  rate = MGN_1M;
+       u32  Sgstrength;
+       bool TxorRx = priv->rtllib->bForcedShowRxRate;          
+
+       if (!TxorRx) {
+               {
+                       return CONVERT_RATE(priv->rtllib, priv->rtllib->softmac_stats.CurrentShowTxate);
+               }
+       }
+
+       if(priv->rtllib->bForcedShowRateStill) {
+               Sgstrength = 100;
+       } else {
+               Sgstrength = priv->undecorated_smoothed_pwdb;
+       }
+
+       if (priv->rtllib->mode == WIRELESS_MODE_A ||
+                       priv->rtllib->mode == WIRELESS_MODE_G ||
+                       priv->rtllib->mode == (WIRELESS_MODE_G | WIRELESS_MODE_B )) {
+               if (priv->CustomerID == RT_CID_819x_MSI) {
+                       rate = rtl8192_decorate_txrate_by_singalstrength(Sgstrength,
+                                       (u8*)MSI_SS_Rate_Map_G, sizeof(MSI_SS_Rate_Map_G)/2);
+               } else {
+                       rate = rtl8192_decorate_txrate_by_singalstrength(Sgstrength,
+                                       (u8*)SS_Rate_Map_G, sizeof(SS_Rate_Map_G)/2);
+               }
+       } else if (priv->rtllib->mode == WIRELESS_MODE_B) {
+               rate = rtl8192_decorate_txrate_by_singalstrength(Sgstrength, (u8*)SS_Rate_Map_B,
+                               sizeof(SS_Rate_Map_B)/2);
+       } else if(priv->rtllib->mode == WIRELESS_MODE_N_24G) {
+               bool  bMaxRateMcs15;
+               bool  b1SSSupport = priv->rtllib->b1x1RecvCombine;
+               u8    rftype = priv->rf_type;
+               if (((!TxorRx) && (rftype==RF_1T1R || rftype==RF_1T2R)) ||
+                               (TxorRx && (rftype==RF_1T1R || (rftype==RF_1T2R && b1SSSupport))) ||
+                               (rftype==RF_2T2R && priv->rtllib->HTHighestOperaRate<=MGN_MCS7))
+                       bMaxRateMcs15 = false;
+               else
+                       bMaxRateMcs15 = true;
+
+               //for linked 20M BW AP, show 135M
+               if((priv->rtllib->state == RTLLIB_LINKED) && !(priv->rtllib->pHTInfo->bCurBW40MHz))
+                       bMaxRateMcs15 = false;
+
+               if(priv->rtllib->state != RTLLIB_LINKED)
+                       priv->rtllib->SystemQueryDataRateCount = 0;
+               if (TimesForReportingFullRxSpeedAfterConnected > priv->rtllib->SystemQueryDataRateCount) {
+                       priv->rtllib->SystemQueryDataRateCount++;
+                       if(bMaxRateMcs15)
+                               return 600;
+                       else
+                               return 270;
+               }
+
+               if (bMaxRateMcs15)
+                       rate = rtl8192_decorate_txrate_by_singalstrength(Sgstrength, (u8*)SS_Rate_Map_N_MCS15,
+                                       sizeof(SS_Rate_Map_N_MCS15)/2);
+               else
+                       rate = rtl8192_decorate_txrate_by_singalstrength(Sgstrength, (u8*)SS_Rate_Map_N_MCS7,
+                                       sizeof(SS_Rate_Map_N_MCS7)/2);
+       } else if (priv->rtllib->mode == WIRELESS_MODE_N_5G) {
+               return 580;
+       } else {
+               return 2;
+       }
+
+       if (priv->rtllib->GetHalfNmodeSupportByAPsHandler(dev)) {
+               if (rate < 0x80)
+                       return rate;
+               else
+                       return HTHalfMcsToDataRate(priv->rtllib, rate);
+       } else {
+                return CONVERT_RATE(priv->rtllib, rate);
+        }
+}
+#endif
+
+struct iw_handler_def  r8192_wx_handlers_def={
+       .standard = r8192_wx_handlers,
+       .num_standard = sizeof(r8192_wx_handlers) / sizeof(iw_handler),
+       .private = r8192_private_handler,
+       .num_private = sizeof(r8192_private_handler) / sizeof(iw_handler),
+       .num_private_args = sizeof(r8192_private_args) / sizeof(struct iw_priv_args),
+#if WIRELESS_EXT >= 17 
+       .get_wireless_stats = r8192_get_wireless_stats,
+#endif
+       .private_args = (struct iw_priv_args *)r8192_private_args,      
+};
+
+#ifdef _RTL8192_EXT_PATCH_
+#define OID_802_11_MESH_SECURITY_INFO 0x0651
+#define OID_802_11_MESH_ID 0x0652
+#define OID_802_11_MESH_AUTO_LINK 0x0653
+#define OID_802_11_MESH_LINK_STATUS 0x0654
+#define OID_802_11_MESH_LIST 0x0655
+#define OID_802_11_MESH_ROUTE_LIST 0x0656
+#define OID_802_11_MESH_ADD_LINK 0x0657
+#define OID_802_11_MESH_DEL_LINK 0x0658
+#define OID_802_11_MESH_MAX_TX_RATE 0x0659
+#define OID_802_11_MESH_CHANNEL 0x065A
+#define OID_802_11_MESH_HOSTNAME       0x065B
+#define OID_802_11_MESH_ONLY_MODE  0x065C
+
+#define OID_GET_SET_TOGGLE 0x8000
+#define RTL_OID_802_11_MESH_SECURITY_INFO (OID_GET_SET_TOGGLE + OID_802_11_MESH_SECURITY_INFO)
+#define RTL_OID_802_11_MESH_ID (OID_GET_SET_TOGGLE + OID_802_11_MESH_ID)
+#define RTL_OID_802_11_MESH_AUTO_LINK (OID_GET_SET_TOGGLE + OID_802_11_MESH_AUTO_LINK)
+#define RTL_OID_802_11_MESH_ADD_LINK (OID_GET_SET_TOGGLE + OID_802_11_MESH_ADD_LINK)
+#define RTL_OID_802_11_MESH_DEL_LINK (OID_GET_SET_TOGGLE + OID_802_11_MESH_DEL_LINK)
+#define RTL_OID_802_11_MESH_MAX_TX_RATE (OID_GET_SET_TOGGLE + OID_802_11_MESH_MAX_TX_RATE)
+#define RTL_OID_802_11_MESH_CHANNEL (OID_GET_SET_TOGGLE + OID_802_11_MESH_CHANNEL)
+#define RTL_OID_802_11_MESH_HOSTNAME           (OID_GET_SET_TOGGLE + OID_802_11_MESH_HOSTNAME)
+#define RTL_OID_802_11_MESH_ONLY_MODE    (OID_GET_SET_TOGGLE + OID_802_11_MESH_ONLY_MODE)
+
+#define MAX_MESH_ID_LEN 32
+#define MAX_NEIGHBOR_NUM 64 
+typedef struct _MESH_NEIGHBOR_ENTRY
+{
+       char Rssi;
+       unsigned char HostName[MAX_HOST_NAME_LENGTH+1];
+       unsigned char MacAddr[ETH_ALEN];
+       unsigned char MeshId[MAX_MESH_ID_LEN+1];
+       unsigned char Channel;
+       unsigned char Status; 
+       unsigned char MeshEncrypType;           
+} MESH_NEIGHBOR_ENTRY, *PMESH_NEIGHBOR_ENTRY;
+typedef struct _MESH_NEIGHBOR_INFO
+{
+       MESH_NEIGHBOR_ENTRY Entry[MAX_NEIGHBOR_NUM];
+       unsigned char num;
+} MESH_NEIGHBOR_INFO, *PMESH_NEIGHBOR_INFO;
+
+static int meshdev_set_key_for_linked_peers(struct net_device *dev, u8 KeyIndex, 
+                                           u16 KeyType, u32 *KeyContent )
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device* ieee = priv->rtllib;
+       struct mshclass *mshobj = priv->mshobj;
+       PMESH_NEIGHBOR_INFO  pmesh_neighbor = NULL;
+       PMESH_NEIGHBOR_ENTRY pneighbor_entry = NULL;
+       u8 entry_idx = 0;
+       int i = 0;
+       int found_idx = MAX_MP-1;
+       pmesh_neighbor = (PMESH_NEIGHBOR_INFO)kmalloc(sizeof(MESH_NEIGHBOR_INFO), GFP_KERNEL);
+       if(NULL == pmesh_neighbor)
+               return -1;
+       
+       if(mshobj->ext_patch_r819x_get_peers)
+               mshobj->ext_patch_r819x_get_peers(dev, (void*)pmesh_neighbor);
+       
+       for (i=0; i<pmesh_neighbor->num; i++) {
+               pneighbor_entry = (PMESH_NEIGHBOR_ENTRY)&pmesh_neighbor->Entry[i];
+               if (mshobj->ext_patch_r819x_insert_linking_crypt_peer_queue)
+                       found_idx = mshobj->ext_patch_r819x_insert_linking_crypt_peer_queue(ieee,pneighbor_entry->MacAddr);
+               if (found_idx == -1) {
+                       printk("%s(): found_idx is -1 , something is wrong, return\n",__FUNCTION__);
+                       return -1;
+               } else if (found_idx == (MAX_MP - 1)) {
+                       printk("%s(): found_idx is MAX_MP-1, peer entry is full, return\n",__FUNCTION__);
+                       return -1;
+               }
+               if ((((ieee->LinkingPeerBitMap>>found_idx) & (BIT0)) == BIT0) && ((ieee->LinkingPeerSecState[found_idx] == USED) )) {
+               entry_idx = rtl8192_get_free_hwsec_cam_entry(ieee, pneighbor_entry->MacAddr);
+#if 0
+                       printk("%s: Can not find free hw security cam entry, use software encryption entry(%d)\n", __FUNCTION__,entry_idx);
+                       if (mshobj->ext_patch_r819x_set_msh_peer_entry_sec_info)
+                               mshobj->ext_patch_r819x_set_msh_peer_entry_sec_info(ieee,pneighbor_entry->MacAddr,SW_SEC);
+                       ieee->LinkingPeerSecState[found_idx] = SW_SEC; 
+#else
+                       if (entry_idx >=  TOTAL_CAM_ENTRY-1) {
+                               printk("%s: Can not find free hw security cam entry, use software encryption entry(%d)\n", __FUNCTION__,entry_idx);
+                               if (mshobj->ext_patch_r819x_set_msh_peer_entry_sec_info)
+                                       mshobj->ext_patch_r819x_set_msh_peer_entry_sec_info(ieee,pneighbor_entry->MacAddr,SW_SEC);
+                               ieee->LinkingPeerSecState[found_idx] = SW_SEC; 
+                       } else {
+                               printk("==========>%s():entry_idx is %d,set HW CAM\n",__FUNCTION__,entry_idx);
+               set_swcam( dev,
+                               entry_idx,
+                               KeyIndex, 
+                               KeyType,  
+                               pneighbor_entry->MacAddr, 
+                               0,              
+                               KeyContent,           
+                               1);
+               setKey( dev,
+                               entry_idx,
+                               KeyIndex, 
+                               KeyType,  
+                               pneighbor_entry->MacAddr, 
+                               0,              
+                               KeyContent);           
+                               if (mshobj->ext_patch_r819x_set_msh_peer_entry_sec_info)
+                                       mshobj->ext_patch_r819x_set_msh_peer_entry_sec_info(ieee,pneighbor_entry->MacAddr,HW_SEC);
+                               ieee->LinkingPeerSecState[found_idx] = HW_SEC; 
+                       }
+#endif
+               }
+       }
+       if(pmesh_neighbor)
+               kfree(pmesh_neighbor);
+       return 0;
+}
+
+int meshdev_set_key_for_peer(struct net_device *dev, 
+                                                               u8 *Addr,
+                                                               u8 KeyIndex, 
+                                                               u16 KeyType, 
+                                                               u32 *KeyContent )
+{
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct rtllib_device* ieee = priv->rtllib;
+       u8 entry_idx = 0;
+       
+       entry_idx = rtl8192_get_free_hwsec_cam_entry(ieee, Addr);
+#if 0
+       printk("%s: Can not find free hw security cam entry\n", __FUNCTION__);
+       return -1;
+#else
+       if (entry_idx >=  TOTAL_CAM_ENTRY-1) {
+               printk("%s: Can not find free hw security cam entry\n", __FUNCTION__);
+               return -1;
+       } else {
+       set_swcam(dev,
+               entry_idx,
+               KeyIndex, 
+               KeyType,  
+               Addr, 
+               0,              
+               KeyContent,           
+               1);
+       setKey(dev,
+               entry_idx,
+               KeyIndex, 
+               KeyType,  
+               Addr, 
+               0,              
+               KeyContent);           
+       }
+       return 0;
+#endif
+}
+
+static struct net_device_stats *meshdev_stats(struct net_device *meshdev)
+{
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) 
+       return &((struct meshdev_priv*)netdev_priv(meshdev))->stats;
+#else
+       return &((struct meshdev_priv*)meshdev->priv)->stats;
+#endif
+}
+
+static int meshdev_wx_get_name(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+
+       return r8192_wx_get_name(dev, info, wrqu, extra);
+}
+static int meshdev_wx_get_freq(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+       struct r8192_priv *priv = rtllib_priv(dev);
+
+       return rtllib_wx_get_freq(priv->rtllib,info,wrqu,extra,1);
+}
+static int meshdev_wx_get_mode(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+
+       if(0)
+               return r8192_wx_get_mode(dev, info, wrqu, extra);
+       else
+               return -1;
+}      
+static int meshdev_wx_get_sens(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+       
+       return r8192_wx_get_sens(dev, info, wrqu, extra);
+}
+static int meshdev_wx_get_range(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+
+       return rtl8192_wx_get_range(dev, info, wrqu, extra);
+}
+static int meshdev_wx_get_wap(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+
+       return r8192_wx_get_wap(dev, info, wrqu, extra);
+}
+static int meshdev_wx_get_essid(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct mshclass *mshobj = priv->mshobj;
+       int ret = 0;    
+
+       if(mshobj->ext_patch_r819x_wx_get_meshid)
+               ret = mshobj->ext_patch_r819x_wx_get_meshid(dev, info, wrqu, extra);
+
+       return ret;
+}
+static int meshdev_wx_get_rate(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+
+       return r8192_wx_get_rate(dev, info, wrqu, extra);
+}
+#if 0
+static int meshdev_wx_set_freq(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+       
+       return r8192_wx_set_freq(dev, info, wrqu, extra);
+}
+static int meshdev_wx_set_rate(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+       
+       return r8192_wx_set_rate(dev, info, wrqu, extra);
+}
+static int meshdev_wx_set_sens(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+
+       return r8192_wx_set_sens(dev, info, wrqu, extra);
+}
+static int meshdev_wx_set_scan(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+
+       return r8192_wx_set_scan(dev, info, wrqu, extra);
+}
+static int meshdev_wx_get_scan(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+
+       return r8192_wx_get_scan(dev, info, wrqu, extra);
+}
+#endif
+static int meshdev_wx_set_enc(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *key)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+       struct r8192_priv *priv = (struct r8192_priv *)ieee->priv;
+       int ret;
+       u32 hwkey[4]={0,0,0,0};
+       u8 mask=0xff;
+       u32 key_idx=0;
+#if 0
+       u8 zero_addr[4][6] ={   {0x00,0x00,0x00,0x00,0x00,0x00},
+                               {0x00,0x00,0x00,0x00,0x00,0x01}, 
+                               {0x00,0x00,0x00,0x00,0x00,0x02}, 
+                               {0x00,0x00,0x00,0x00,0x00,0x03} };
+#endif
+       int i;
+
+       if(!priv->mesh_up) return -ENETDOWN;
+
+       SEM_DOWN_PRIV_WX(&priv->wx_sem);        
+       
+       RT_TRACE(COMP_SEC, "Setting SW wep key");
+       ret = rtllib_wx_set_encode(priv->rtllib,info,wrqu,key,1);
+
+       SEM_UP_PRIV_WX(&priv->wx_sem);  
+
+
+       if(wrqu->encoding.length!=0){
+
+               for(i=0 ; i<4 ; i++){
+                       hwkey[i] |=  key[4*i+0]&mask;
+                       if(i==1&&(4*i+1)==wrqu->encoding.length) mask=0x00;
+                       if(i==3&&(4*i+1)==wrqu->encoding.length) mask=0x00;
+                       hwkey[i] |= (key[4*i+1]&mask)<<8;
+                       hwkey[i] |= (key[4*i+2]&mask)<<16;
+                       hwkey[i] |= (key[4*i+3]&mask)<<24;
+               }
+
+               #define CONF_WEP40  0x4
+               #define CONF_WEP104 0x14
+
+               switch(wrqu->encoding.flags & IW_ENCODE_INDEX){
+                       case 0: key_idx = ieee->mesh_txkeyidx; break;
+                       case 1: key_idx = 0; break;
+                       case 2: key_idx = 1; break;
+                       case 3: key_idx = 2; break;
+                       case 4: key_idx = 3; break;
+                       default: break;
+               }
+
+               if(wrqu->encoding.length==0x5){
+               ieee->mesh_pairwise_key_type = KEY_TYPE_WEP40;
+                       EnableHWSecurityConfig8192(dev);
+#if 0          
+                       set_swcam( dev,
+                               key_idx,                
+                               key_idx,                
+                               KEY_TYPE_WEP40,         
+                               zero_addr[key_idx],
+                               0,                      
+                               hwkey,               
+                               1);
+                       setKey( dev,
+                               key_idx,                
+                               key_idx,                
+                               KEY_TYPE_WEP40,         
+                               zero_addr[key_idx],
+                               0,                      
+                               hwkey);                 
+                       
+#endif
+
+#if 0
+                       if(key_idx == 0){
+
+                               setKey( dev,
+                                       4,                      
+                                       key_idx,                      
+                                       KEY_TYPE_WEP40,        
+                                       broadcast_addr,         
+                                       0,                      
+                                       hwkey);                 
+                       }
+#endif
+               }
+
+               else if(wrqu->encoding.length==0xd){
+                       ieee->mesh_pairwise_key_type = KEY_TYPE_WEP104;
+                               EnableHWSecurityConfig8192(dev);
+#if 0
+                       set_swcam( dev,
+                               key_idx,                
+                               key_idx,                
+                               KEY_TYPE_WEP104,        
+                               zero_addr[key_idx],
+                               0,                      
+                               hwkey,               
+                               1);
+                       setKey( dev,
+                               key_idx,                
+                               key_idx,                
+                               KEY_TYPE_WEP104,        
+                               zero_addr[key_idx],
+                               0,                      
+                               hwkey);                 
+                       
+#endif
+#if 0 
+                       if(key_idx == 0){
+
+                               setKey( dev,
+                                       4,                      
+                                       key_idx,                      
+                                       KEY_TYPE_WEP104,        
+                                       broadcast_addr,         
+                                       0,                      
+                                       hwkey);                 
+                       }
+#endif
+               }
+               else printk("wrong type in WEP, not WEP40 and WEP104\n");
+
+               meshdev_set_key_for_linked_peers(dev,
+                                               key_idx, 
+                                               ieee->mesh_pairwise_key_type,  
+                                               hwkey); 
+
+       }
+
+#if 0
+       if(wrqu->encoding.length==0 && (wrqu->encoding.flags >>8) == 0x8 ){
+               printk("===>1\n");              
+               EnableHWSecurityConfig8192(dev);
+               key_idx = (wrqu->encoding.flags & 0xf)-1 ;
+               write_cam(dev, (4*6),   0xffff0000|read_cam(dev, key_idx*6) );
+               write_cam(dev, (4*6)+1, 0xffffffff);
+               write_cam(dev, (4*6)+2, read_cam(dev, (key_idx*6)+2) );
+               write_cam(dev, (4*6)+3, read_cam(dev, (key_idx*6)+3) );
+               write_cam(dev, (4*6)+4, read_cam(dev, (key_idx*6)+4) );
+               write_cam(dev, (4*6)+5, read_cam(dev, (key_idx*6)+5) );
+       }
+#endif
+
+       return ret;
+}
+static int meshdev_wx_get_enc(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device * dev = ieee->dev;
+       struct r8192_priv* priv = rtllib_priv(dev);
+
+       if(!priv->mesh_up){
+               printk("============>%s():driver is not up return\n",__FUNCTION__);
+               return -ENETDOWN;
+       }
+       return rtllib_wx_get_encode(ieee, info, wrqu, extra,1);
+}
+#if 0
+static int meshdev_wx_set_frag(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+
+       return r8192_wx_set_frag(dev, info, wrqu, extra);
+}
+static int meshdev_wx_get_frag(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+
+       return r8192_wx_get_frag(dev, info, wrqu, extra);
+}
+static int meshdev_wx_set_retry(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+
+       return r8192_wx_set_retry(dev, info, wrqu, extra);
+}
+static int meshdev_wx_get_retry(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+
+       return r8192_wx_get_retry(dev, info, wrqu, extra);
+}
+#endif
+static int meshdev_wx_set_mode(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+#if 0
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+       
+       return r8192_wx_set_mode(dev, info, wrqu, extra);
+#endif
+       return 0;
+}
+static int meshdev_wx_set_wap(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+#if 0
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+
+       return r8192_wx_set_wap(dev, info, wrqu, extra);
+#endif
+       return 0;
+}
+static int meshdev_wx_set_mlme(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+#if 0
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+
+       return r8192_wx_set_mlme(dev, info, wrqu, extra);
+#endif
+       return 0;
+}
+static int meshdev_wx_set_essid(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+#if 0
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+
+       return r8192_wx_set_essid(dev, info, wrqu, extra);
+#endif
+       return 0;
+}
+static int meshdev_wx_set_gen_ie(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+#if 0
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+
+       return r8192_wx_set_gen_ie(dev, info, wrqu, extra);
+#endif
+       return 0;
+}
+static int meshdev_wx_set_auth(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+#if 0
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+
+       return r8192_wx_set_auth(dev, info, wrqu, extra);
+#endif
+       return 0;
+}
+static int meshdev_wx_set_enc_ext(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       int ret=0;
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+       struct r8192_priv *priv = (struct r8192_priv *)ieee->priv;
+
+       printk("============================================================>%s\n", __FUNCTION__);
+       SEM_DOWN_PRIV_WX(&priv->wx_sem);        
+       ret = rtllib_wx_set_encode_ext(ieee, info, wrqu, extra, 1);
+
+       ret |= r8192_set_hw_enc(dev,info,wrqu,extra, 1);
+       SEM_UP_PRIV_WX(&priv->wx_sem);  
+#endif
+
+       return ret;     
+}
+
+static int dummy(struct net_device *dev, struct iw_request_info *a,
+                union iwreq_data *wrqu,char *b)
+{
+       return -1;
+}
+
+int rt_ioctl_siwpmksa(struct net_device *dev,
+                          struct iw_request_info *info,
+                          union iwreq_data *wrqu,
+                          char *extra)
+{
+       return 0;
+}
+
+static iw_handler meshdev_wx_handlers[] =
+{
+       NULL,                     /* SIOCSIWCOMMIT */
+       meshdev_wx_get_name,      /* SIOCGIWNAME */
+       dummy,                    /* SIOCSIWNWID */
+       dummy,                    /* SIOCGIWNWID */
+       NULL,  
+       meshdev_wx_get_freq,        /* SIOCGIWFREQ */
+       meshdev_wx_set_mode,        /* SIOCSIWMODE */
+       meshdev_wx_get_mode,        /* SIOCGIWMODE */
+       NULL,  
+       meshdev_wx_get_sens,        /* SIOCGIWSENS */
+       NULL,                     /* SIOCSIWRANGE */
+       meshdev_wx_get_range,     /* SIOCGIWRANGE */
+       NULL,                     /* SIOCSIWPRIV */
+       NULL,                     /* SIOCGIWPRIV */
+       NULL,                     /* SIOCSIWSTATS */
+       NULL,                     /* SIOCGIWSTATS */
+       dummy,                    /* SIOCSIWSPY */
+       dummy,                    /* SIOCGIWSPY */
+       NULL,                     /* SIOCGIWTHRSPY */
+       NULL,                     /* SIOCWIWTHRSPY */
+       meshdev_wx_set_wap,               /* SIOCSIWAP */
+       meshdev_wx_get_wap,         /* SIOCGIWAP */
+       meshdev_wx_set_mlme, 
+       dummy,                     /* SIOCGIWAPLIST -- depricated */
+       NULL,  
+       NULL,  
+       meshdev_wx_set_essid,       /* SIOCSIWESSID */
+       meshdev_wx_get_essid,       /* SIOCGIWESSID */
+       dummy,                    /* SIOCSIWNICKN */
+       dummy,                    /* SIOCGIWNICKN */
+       NULL,                     /* -- hole -- */
+       NULL,                     /* -- hole -- */
+       NULL,  
+       meshdev_wx_get_rate,        /* SIOCGIWRATE */
+       dummy,                    /* SIOCSIWRTS */
+       dummy,                    /* SIOCGIWRTS */
+       NULL,  
+       NULL,  
+       dummy,                    /* SIOCSIWTXPOW */
+       dummy,                    /* SIOCGIWTXPOW */
+       NULL,  
+       NULL,  
+       meshdev_wx_set_enc,         /* SIOCSIWENCODE */
+       meshdev_wx_get_enc,         /* SIOCGIWENCODE */
+       dummy,                    /* SIOCSIWPOWER */
+       dummy,                    /* SIOCGIWPOWER */
+       NULL,                   /*---hole---*/
+       NULL,                   /*---hole---*/
+       meshdev_wx_set_gen_ie,
+       NULL,                   /* SIOCSIWGENIE */
+       meshdev_wx_set_auth,
+       NULL, 
+       meshdev_wx_set_enc_ext,                         /* SIOCSIWENCODEEXT */
+       NULL, 
+       (iw_handler) rt_ioctl_siwpmksa,
+       NULL,                    /*---hole---*/
+}; 
+
+static struct iw_priv_args meshdev_private_args[] = { 
+       {
+               SIOCIWFIRSTPRIV + 0x0, 
+               0, 0, "enablemesh" 
+       },
+       {
+               SIOCIWFIRSTPRIV + 0x1, 
+               0, IW_PRIV_TYPE_CHAR | 64, "getmeshinfo"
+       },
+       {
+               SIOCIWFIRSTPRIV + 0x2, 
+               0, 0, "disablemesh"
+       },
+       {
+               SIOCIWFIRSTPRIV + 0x3, 
+               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "setch"
+       },
+       {
+               SIOCIWFIRSTPRIV + 0x4, 
+               IW_PRIV_TYPE_CHAR | 64  , 0, "setmeshid"
+       },
+        {      SIOCIWFIRSTPRIV + 0x5, 
+               0,IW_PRIV_TYPE_CHAR | 64 , "getmeshlist"
+       },
+       {       SIOCIWFIRSTPRIV + 0x6, 
+               IW_PRIV_TYPE_CHAR | 64,0 , "meshscan"
+       },
+       {
+               SIOCIWFIRSTPRIV + 0x7,
+               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "setmode"
+
+       },
+       {
+               SIOCIWFIRSTPRIV + 0x8, 
+               IW_PRIV_TYPE_CHAR | 64, 0, "sethostname"
+       },
+       {
+               SIOCIWFIRSTPRIV + 0x9,
+               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "setBW"
+
+       },
+       {
+               SIOCIWFIRSTPRIV + 0xa, 
+               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "updateBW"
+       }, 
+       {       SIOCIWFIRSTPRIV + 0xb, 
+               0,IW_PRIV_TYPE_CHAR | 256 , "macdenyget"
+       },
+       {       SIOCIWFIRSTPRIV + 0xc, 
+               IW_PRIV_TYPE_CHAR | 64,0 , "macdenyadd"
+       },
+       /*
+       {
+               SIOCIWFIRSTPRIV + 0xe, 
+               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_MASK, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_MASK, ""
+       },*/
+        {      SIOCIWFIRSTPRIV + 0xf, 
+               0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_MASK , "getneighborlist"
+       },
+       /* Sub-ioctls definitions*/
+       /*
+       {
+               OID_802_11_MESH_ID, 
+               IW_PRIV_TYPE_INT | 2047, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_MASK, "meshid"
+       },
+       {
+               OID_802_11_MESH_LIST, 
+               IW_PRIV_TYPE_INT | 2047, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_MASK, "meshlist"
+       },*/
+       {       SIOCIWFIRSTPRIV + 0x10, 
+               IW_PRIV_TYPE_CHAR | 64, 0, "set"
+       },
+       {       SIOCIWFIRSTPRIV + 0x12, 
+               IW_PRIV_TYPE_CHAR | 64,0 , "macdenydel"
+       },
+       {
+               SIOCIWFIRSTPRIV + 0x14,
+               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "setmeshsec"
+       },
+       {
+               SIOCIWFIRSTPRIV + 0x15,
+               IW_PRIV_TYPE_CHAR | 6, 0, "setmkddid"
+       },
+       {
+               SIOCIWFIRSTPRIV + 0x16,
+               IW_PRIV_TYPE_CHAR | 64, 0, "setkey"
+       },
+       {
+               SIOCIWFIRSTPRIV + 0x17,
+               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "setsectype"
+       },
+};
+
+int meshdev_wx_mesh(struct net_device *meshdev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *meshpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device * ieee = meshpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct mshclass *mshobj = priv->mshobj;
+       int ret = 0;
+
+       printk("@@@@@%s: ", __FUNCTION__);
+       if(mshobj)
+       {
+               switch(wrqu->data.flags)
+               {
+                       case OID_802_11_MESH_SECURITY_INFO:
+                       {
+                               printk("OID_802_11_MESH_SECURITY_INFO \n");
+                               if(mshobj->ext_patch_r819x_wx_get_security_info)
+                                       ret = mshobj->ext_patch_r819x_wx_get_security_info(dev, info, wrqu, extra);
+                               break;
+                       }
+                       case OID_802_11_MESH_ID:
+                       {
+                               printk("OID_802_11_MESH_ID \n");
+                               if(mshobj->ext_patch_r819x_wx_get_meshid)
+                                       ret = mshobj->ext_patch_r819x_wx_get_meshid(dev, info, wrqu, extra);
+                               break;
+                       }
+                       case OID_802_11_MESH_AUTO_LINK:
+                       {
+                               printk("OID_802_11_MESH_AUTO_LINK \n");
+                               if(mshobj->ext_patch_r819x_wx_get_auto_link)
+                                       ret = mshobj->ext_patch_r819x_wx_get_auto_link(dev, info, wrqu, extra);
+                               break;
+                       }
+                       case OID_802_11_MESH_LINK_STATUS:
+                       {
+                               printk("OID_802_11_MESH_LINK_STATUS \n");
+                               if(mshobj->ext_patch_r819x_wx_get_link_status)
+                                       ret = mshobj->ext_patch_r819x_wx_get_link_status(dev, info, wrqu, extra);
+                               break;
+                       }
+                       case OID_802_11_MESH_LIST:
+                       {
+                               printk("OID_802_11_MESH_LIST \n");
+                               if(mshobj->ext_patch_r819x_wx_get_neighbor_list)
+                                       ret = mshobj->ext_patch_r819x_wx_get_neighbor_list(dev, info, wrqu, extra);
+                               break;
+                       }
+                       case OID_802_11_MESH_ROUTE_LIST:
+                       {
+                               printk("OID_802_11_MESH_ROUTE_LIST \n");
+                               if(mshobj->ext_patch_r819x_wx_get_route_list)
+                                       ret = mshobj->ext_patch_r819x_wx_get_route_list(dev, info, wrqu, extra);
+                               break;
+                       }
+                       case OID_802_11_MESH_MAX_TX_RATE:
+                       {
+                               printk("OID_802_11_MESH_MAX_TX_RATE \n");
+                               if(mshobj->ext_patch_r819x_wx_get_maxrate)
+                                       ret = mshobj->ext_patch_r819x_wx_get_maxrate(dev, info, wrqu, extra);
+                               break;
+                       }
+                       case OID_802_11_MESH_CHANNEL:
+                       {
+                               printk("OID_802_11_MESH_CHANNEL \n");
+                               if(mshobj->ext_patch_r819x_wx_get_channel)
+                                       ret = mshobj->ext_patch_r819x_wx_get_channel(dev, info, wrqu, extra);
+                               break;
+                       }
+                       case OID_802_11_MESH_HOSTNAME:
+                       {
+                               printk("OID_802_11_MESH_HOSTNAME \n");
+                               if(mshobj->ext_patch_r819x_wx_get_host_name)
+                                       ret = mshobj->ext_patch_r819x_wx_get_host_name(dev, info, wrqu, extra);
+                               break;
+                       }
+                       case OID_802_11_MESH_ONLY_MODE:
+                       {
+                               printk("OID_802_11_MESH_ONLY_MODE \n");
+                               if(mshobj->ext_patch_r819x_wx_get_mesh_only_mode)
+                                       ret = mshobj->ext_patch_r819x_wx_get_mesh_only_mode(dev, info, wrqu, extra);
+                               break;
+                       }
+                       case RTL_OID_802_11_MESH_SECURITY_INFO:
+                       {
+                               printk("RTL_OID_802_11_MESH_SECURITY_INFO \n");
+                               if(mshobj->ext_patch_r819x_wx_set_security_info)
+                                       ret = mshobj->ext_patch_r819x_wx_set_security_info(dev, info, wrqu, extra);
+                               break;
+                       }
+                       case RTL_OID_802_11_MESH_ID:
+                       {
+                               printk("RTL_OID_802_11_MESH_ID \n");
+                               if(mshobj->ext_patch_r819x_wx_set_meshID)
+                                       ret = mshobj->ext_patch_r819x_wx_set_meshID(dev, (u8*)wrqu->data.pointer);
+                               break;
+                       }
+                       case RTL_OID_802_11_MESH_AUTO_LINK:
+                       {
+                               printk("RTL_OID_802_11_MESH_AUTO_LINK \n");
+                               if(mshobj->ext_patch_r819x_wx_set_auto_link)
+                                       ret = mshobj->ext_patch_r819x_wx_set_auto_link(dev, info, wrqu, extra);
+                               break;
+                       }
+                       case RTL_OID_802_11_MESH_ADD_LINK:
+                       {
+                               printk("RTL_OID_802_11_MESH_ADD_LINK \n");
+                               if(mshobj->ext_patch_r819x_wx_set_add_link)
+                                       ret = mshobj->ext_patch_r819x_wx_set_add_link(dev, info, wrqu, extra);
+                               break;
+                       }
+                       case RTL_OID_802_11_MESH_DEL_LINK:
+                       {
+                               printk("RTL_OID_802_11_MESH_DEL_LINK \n");
+                               if(mshobj->ext_patch_r819x_wx_set_del_link)
+                                       ret = mshobj->ext_patch_r819x_wx_set_del_link(dev, info, wrqu, extra);
+                               break;
+                       }
+                       case RTL_OID_802_11_MESH_MAX_TX_RATE:
+                       {
+                               printk("RTL_OID_802_11_MESH_MAX_TX_RATE \n");
+                               if(mshobj->ext_patch_r819x_wx_set_maxrate)
+                                       ret = mshobj->ext_patch_r819x_wx_set_maxrate(dev, info, wrqu, extra);
+                               break;
+                       }
+                       case RTL_OID_802_11_MESH_CHANNEL:
+                       {
+                               printk("RTL_OID_802_11_MESH_CHANNEL \n");
+                               printk("channel = %d\n",*(u8*)wrqu->data.pointer);
+                               r8192_wx_set_channel(dev, info, wrqu, wrqu->data.pointer);
+                               break;
+                       }
+                       case RTL_OID_802_11_MESH_HOSTNAME:
+                       {
+                               printk("RTL_OID_802_11_MESH_HOSTNAME \n");
+                               if(mshobj->ext_patch_r819x_wx_set_host_name)
+                                       ret = mshobj->ext_patch_r819x_wx_set_host_name(dev, info, wrqu, extra);
+                               break;
+                       }
+                       case RTL_OID_802_11_MESH_ONLY_MODE:
+                       {
+                               printk("RTL_OID_802_11_MESH_ONLY_MODE \n");
+                               if(mshobj->ext_patch_r819x_wx_set_mesh_only_mode)
+                                       ret = mshobj->ext_patch_r819x_wx_set_mesh_only_mode(dev, info, wrqu, extra);
+                               break;
+                       }
+                       default:
+                               printk("Default \n");
+                               break;
+               }
+       }
+       return ret;
+}
+
+static int meshdev_wx_get_meshinfo(struct net_device *meshdev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct net_device *dev = mpriv->rtllib->dev;
+       
+printk("++++++======%s: dev=%p length=%d extra=%p\n", __FUNCTION__, dev, wrqu->data.length,extra);
+       return r8192_wx_get_meshinfo(dev, info, wrqu, extra);
+}
+
+static int meshdev_wx_enable_mesh(struct net_device *meshdev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+       
+printk("++++++======%s\n", __FUNCTION__);
+       return r8192_wx_enable_mesh(dev, info, wrqu, extra);
+       
+}
+
+static int meshdev_wx_disable_mesh(struct net_device *meshdev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+       
+printk("++++++======%s\n", __FUNCTION__);
+       return r8192_wx_disable_mesh(dev, info, wrqu, extra);
+}
+
+
+int meshdev_wx_set_channel(struct net_device *meshdev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+printk("++++++======%s\n", __FUNCTION__);
+
+       return r8192_wx_set_channel(dev, info, wrqu, extra);
+}
+
+static int meshdev_wx_set_meshid(struct net_device *meshdev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{      
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+printk("++++++======%s\n", __FUNCTION__);
+
+       return r8192_wx_set_meshID(dev, info, wrqu, extra);     
+}
+
+static int meshdev_wx_mesh_scan(struct net_device *meshdev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+
+printk("++++++======%s\n", __FUNCTION__);
+       return r8192_wx_mesh_scan(dev, info, wrqu, extra);
+}
+static int meshdev_wx_get_mesh_list(struct net_device *meshdev, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+printk("++++++======%s\n", __FUNCTION__);
+
+       return r8192_wx_get_mesh_list(dev, info, wrqu, extra);
+}
+static int meshdev_wx_set_meshmode(struct net_device *meshdev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+
+printk("++++++======%s\n", __FUNCTION__);
+       return r8192_wx_set_meshmode(dev, info, wrqu, extra);
+}
+static int meshdev_wx_set_meshbw(struct net_device *meshdev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+
+printk("++++++======%s\n", __FUNCTION__);
+       return r8192_wx_set_meshBW(dev, info, wrqu, extra);
+}
+static int meshdev_wx_update_beacon(struct net_device *meshdev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+       struct r8192_priv *priv = rtllib_priv(dev);
+       struct mshclass *mshobj= (priv)->mshobj;
+       u8 updateBW = 0;
+       u8 bserverHT = 0;       
+       
+       printk("++++++======%s\n", __FUNCTION__);
+       if(*extra == 0)
+       {
+               ieee->p2pmode = 1;
+               ieee->current_network.channel = ieee->current_mesh_network.channel; 
+               if(ieee->state!=RTLLIB_LINKED){
+                       if(ieee->pHTInfo->bCurBW40MHz)
+                               HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20_40, (ieee->current_mesh_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER);  
+                       else
+                               HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, (ieee->current_mesh_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER);  
+               }
+       }
+       else
+       {
+               ieee->p2pmode = 0;
+               updateBW=mshobj->ext_patch_r819x_wx_update_beacon(dev,&bserverHT);
+               printk("$$$$$$ Cur_networ.chan=%d, cur_mesh_net.chan=%d,bserverHT=%d\n", ieee->current_network.channel,ieee->current_mesh_network.channel,bserverHT);
+               if(updateBW == 1)
+               {
+                       if(bserverHT == 0)
+                       {
+                               printk("===>server is not HT supported,set 20M\n");
+                               HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, HT_EXTCHNL_OFFSET_NO_EXT);  
+                       }
+                       else
+                       {
+                               printk("===>updateBW is 1,bCurBW40MHz is %d,ieee->serverExtChlOffset is %d\n",ieee->pHTInfo->bCurBW40MHz,ieee->serverExtChlOffset);             
+                               if(ieee->pHTInfo->bCurBW40MHz)
+                                       HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20_40, ieee->serverExtChlOffset);  
+                               else
+                                       HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, ieee->serverExtChlOffset);  
+                       }
+               }
+               else
+               {
+                       printk("===>there is no same hostname server, ERR!!!\n");
+                       return -1;
+               }
+       }
+       write_nic_dword(dev,BSSIDR,((u32*)priv->rtllib->current_mesh_network.bssid)[0]);
+       write_nic_word(dev,BSSIDR+4,((u16*)priv->rtllib->current_mesh_network.bssid)[2]);
+       return 0;
+}
+static int meshdev_wx_add_mac_deny(struct net_device *meshdev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+       struct r8192_priv *priv = rtllib_priv(dev);
+       
+       
+       if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_set_add_mac_deny )
+               return 0;
+
+       return priv->mshobj->ext_patch_r819x_wx_set_add_mac_deny(dev, info, wrqu, extra);
+}
+
+static int meshdev_wx_del_mac_deny(struct net_device *meshdev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+       struct r8192_priv *priv = rtllib_priv(dev);
+       
+       if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_set_del_mac_deny )
+               return 0;
+
+       return priv->mshobj->ext_patch_r819x_wx_set_del_mac_deny(dev, info, wrqu, extra);
+}
+
+static int meshdev_wx_get_neighbor_list(struct net_device *meshdev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+       struct r8192_priv *priv = rtllib_priv(dev);
+       int ret = 0;
+
+       if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_get_neighbor_list )
+               return 0;
+       ret = priv->mshobj->ext_patch_r819x_wx_get_neighbor_list(dev, info, wrqu, extra);
+#ifdef MESH_AUTO_TEST
+       ret |= r8192_wx_set_channel(dev, info, wrqu, &ieee->current_network.channel);
+#endif
+       return ret;
+}
+
+/* reserved for future
+static int r819x_wx_get_mac_allow(struct net_device *dev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+               return 0;
+
+       return priv->mshobj->ext_patch_r819x_wx_get_mac_allow(dev, info, wrqu, extra);
+}
+*/
+
+static int meshdev_wx_get_mac_deny(struct net_device *meshdev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+       struct r8192_priv *priv = rtllib_priv(dev);
+       
+       if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_get_mac_deny )
+               return 0;
+
+       return priv->mshobj->ext_patch_r819x_wx_get_mac_deny(dev, info, wrqu, extra);
+}
+
+
+static int meshdev_wx_set_hostname(struct net_device *meshdev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+
+       if(wrqu->data.length > MAX_HOST_NAME_LENGTH)
+       {
+               printk("%s: Host name is too long. len=%d\n", __FUNCTION__, wrqu->data.length);
+               return -1;
+       }
+
+       ieee->hostname_len = wrqu->data.length;
+       memcpy(ieee->hostname, extra, wrqu->data.length);
+       
+printk("++++++======%s: %s\n", __FUNCTION__, ieee->hostname);
+
+       return 0;
+}
+static int meshdev_wx_set_mesh_security(struct net_device *meshdev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = netdev_priv(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+
+       printk("++++++======%s\n", __FUNCTION__);
+       return r8192_wx_set_mesh_security(dev, info, wrqu, extra);
+}
+static int meshdev_wx_set_mkdd_id(struct net_device *meshdev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = netdev_priv(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+       
+
+       printk("++++++======%s\n", __FUNCTION__);
+       return r8192_wx_set_mkdd_id(dev, info, wrqu, extra);
+}
+static int meshdev_wx_set_mesh_key(struct net_device *meshdev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = netdev_priv(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+
+       printk("++++++======%s\n", __FUNCTION__);
+       return r8192_wx_set_mesh_key(dev, info, wrqu, extra);
+}
+static int meshdev_wx_set_sec_type(struct net_device *meshdev, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       struct meshdev_priv *mpriv = netdev_priv(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+
+       printk("++++++======%s\n", __FUNCTION__);
+       return r8192_wx_set_mesh_sec_type(dev, info, wrqu, extra);
+}
+static u8 my_atoi(const char *arg)
+{
+       u8 val = 0;
+       for(; ; arg++){
+               switch (*arg){
+                       case '0'...'9':
+                               val = 10*val + (*arg-'0');
+                               break;
+                       default:
+                               return val;
+               }
+       }
+       return val;
+}
+
+static int Set_Channel_Proc(struct net_device *meshdev, char *arg)
+{
+       int ch = my_atoi(arg);
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct r8192_priv *priv = (void *)ieee->priv;
+       struct net_device *dev = ieee->dev;
+
+       if (!priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_set_channel || !ieee->only_mesh)
+               return 0;       
+                       
+printk("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!set current mesh network channel %d\n", ch);
+       if ( ch < 0 )   
+       {
+               rtllib_start_scan(ieee);                        
+               ieee->meshScanMode =2;
+       }
+       else    
+       {       
+               ieee->meshScanMode =0;          
+               if(priv->mshobj->ext_patch_r819x_wx_set_channel)
+               {
+                       priv->mshobj->ext_patch_r819x_wx_set_channel(ieee, ch);
+                       priv->mshobj->ext_patch_r819x_wx_set_mesh_chan(dev,ch);
+               }
+               queue_work_rsl(ieee->wq, &ieee->ext_stop_scan_wq);
+               ieee->set_chan(ieee->dev, ch);
+               ieee->current_mesh_network.channel = ch;
+               if(ieee->only_mesh)
+                       ieee->current_network.channel = ch;
+               ieee->current_network.channel = ieee->current_mesh_network.channel; 
+               if(ieee->pHTInfo->bCurBW40MHz)
+                       HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20_40, (ieee->current_mesh_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER);  
+               else
+                       HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, (ieee->current_mesh_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER);  
+               if(rtllib_act_scanning(ieee,true) == true)
+                       rtllib_stop_scan_syncro(ieee);
+       }
+       return 0;               
+}
+static int Set_MeshID_Proc(struct net_device *meshdev, char *arg)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+       struct r8192_priv *priv = rtllib_priv(dev);
+       RT_RF_POWER_STATE       rtState;
+       int ret = 0;
+        rtState = priv->rtllib->eRFPowerState;
+       
+       if(!priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_enable_mesh || !priv->mshobj->ext_patch_r819x_wx_set_meshID)
+               return 0;
+
+       if(rtllib_act_scanning(ieee,true) == true)
+               rtllib_stop_scan_syncro(ieee);
+       
+       /* Set Mesh ID */
+       ret = priv->mshobj->ext_patch_r819x_wx_set_meshID(dev, arg);
+       if(ret)
+               goto End;
+       
+       /* Enable Mesh */
+       SEM_DOWN_PRIV_WX(&priv->wx_sem);        
+       ret = priv->mshobj->ext_patch_r819x_wx_enable_mesh(dev);
+       if(!ret)
+       {
+#ifdef ENABLE_IPS
+               if(priv->rtllib->PowerSaveControl.bInactivePs){
+                       if(rtState == eRfOff){
+                               if(priv->rtllib->RfOffReason > RF_CHANGE_BY_IPS)
+                               {
+                                       RT_TRACE(COMP_ERR, "%s(): RF is OFF.\n",__FUNCTION__);
+                                       SEM_UP_PRIV_WX(&priv->wx_sem);  
+                                       return -1;
+                               }
+                               else{
+                                       printk("=========>%s(): IPSLeave\n",__FUNCTION__);
+                                       IPSLeave(dev);
+                               }
+                       }
+               }
+#endif
+       }
+       SEM_UP_PRIV_WX(&priv->wx_sem);  
+       if (ieee->mesh_sec_type == 1)   
+       rtl8192_abbr_handshk_set_key(ieee); 
+End:
+       return ret;     
+}
+static int Set_Bw40MHz_Proc(struct net_device *meshdev, char *arg)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct r8192_priv *priv = (void *)ieee->priv;
+       u8 bBw40MHz = my_atoi(arg);
+
+       SEM_DOWN_PRIV_WX(&priv->wx_sem);        
+       printk("%s(): set mesh BW ! extra is %d\n",__FUNCTION__, bBw40MHz);
+       priv->rtllib->pHTInfo->bRegBW40MHz = bBw40MHz;
+       SEM_UP_PRIV_WX(&priv->wx_sem);  
+
+       return 0;
+}
+static int Set_WirelessMode_Proc(struct net_device *meshdev, char *arg)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct r8192_priv *priv = (void *)ieee->priv;
+       struct net_device *dev = ieee->dev;
+       u8 wirelessmode = my_atoi(arg);
+
+       SEM_DOWN_PRIV_WX(&priv->wx_sem);        
+
+       printk("%s(): set mesh mode ! extra is %d\n",__FUNCTION__, wirelessmode);
+       if((wirelessmode != WIRELESS_MODE_A) && (wirelessmode != WIRELESS_MODE_B) && 
+               (wirelessmode != WIRELESS_MODE_G) && (wirelessmode != WIRELESS_MODE_AUTO) &&
+               (wirelessmode != WIRELESS_MODE_N_24G) && (wirelessmode != WIRELESS_MODE_N_5G))
+       {
+               printk("ERR!! you should input 1 | 2 | 4 | 8 | 16 | 32\n");
+               SEM_UP_PRIV_WX(&priv->wx_sem);  
+               return -1;
+       }
+       if(priv->rtllib->state == RTLLIB_LINKED)
+       {
+               if((priv->rtllib->mode != WIRELESS_MODE_N_5G) && (priv->rtllib->mode != WIRELESS_MODE_N_24G)){
+                       printk("===>wlan0 is linked,and ieee->mode is not N mode ,do not need to set mode,return\n");
+                       SEM_UP_PRIV_WX(&priv->wx_sem);  
+                       return 0;
+               }
+       }
+       priv->rtllib->mode = wirelessmode;
+       if(priv->ResetProgress == RESET_TYPE_NORESET)
+               rtl8192_SetWirelessMode(dev, priv->rtllib->mode);
+       HTUseDefaultSetting(priv->rtllib);
+       SEM_UP_PRIV_WX(&priv->wx_sem);  
+       return 0;
+}
+static int Set_ExtChnOffset_Proc(struct net_device *meshdev, char *arg)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+#if 0
+       struct r8192_priv *priv = (void *)ieee->priv;
+       struct net_device *dev = ieee->dev;
+       struct mshclass *mshobj= priv->mshobj;
+       u8 updateBW = 0;
+       u8 bserverHT = 0;       
+#endif
+       ieee->p2pmode = 0;      
+#if 0
+       updateBW=mshobj->ext_patch_r819x_wx_update_beacon(dev,&bserverHT);
+       printk("$$$$$$ Cur_networ.chan=%d, cur_mesh_net.chan=%d,bserverHT=%d\n", ieee->current_network.channel,ieee->current_mesh_network.channel,bserverHT);
+       if(updateBW == 1)
+       {
+               if(bserverHT == 0)
+               {
+                       printk("===>server is not HT supported,set 20M\n");
+                       HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, HT_EXTCHNL_OFFSET_NO_EXT);  
+               }
+               else
+               {
+                       printk("===>updateBW is 1,bCurBW40MHz is %d,ieee->serverExtChlOffset is %d\n",ieee->pHTInfo->bCurBW40MHz,ieee->serverExtChlOffset);             
+                       if(ieee->pHTInfo->bCurBW40MHz)
+                               HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20_40, ieee->serverExtChlOffset);  
+                       else
+                               HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, ieee->serverExtChlOffset);  
+               }
+       }
+       else
+       {
+               printk("===>there is no same hostname server, ERR!!!\n");
+               return -1;
+       }
+#endif
+       return 0;
+}
+static int Set_OnlyMesh_Proc(struct net_device *meshdev, char *arg)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       union iwreq_data tmprqu;
+       int ret = 0;
+
+       ieee->p2pmode = 1;      
+       ieee->only_mesh = my_atoi(arg);
+printk("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!mesh only = %d\n", ieee->only_mesh);
+       if(ieee->only_mesh)
+               ieee->current_network.channel = ieee->current_mesh_network.channel;
+       if(ieee->only_mesh == 0)
+       {
+               tmprqu.mode = ieee->iw_mode;
+               ieee->iw_mode = IW_MODE_INFRA; 
+               ret = rtllib_wx_set_mode(ieee, NULL, &tmprqu, NULL);
+       }
+       return ret;
+}
+static int Set_AsPortal_Proc(struct net_device *meshdev, char *arg)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+       struct r8192_priv *priv = (void *)ieee->priv;
+       u8 val = my_atoi(arg);
+       int ret = 0;
+
+       SEM_DOWN_PRIV_WX(&priv->wx_sem);        
+       ret = priv->mshobj->ext_patch_r819x_wx_set_AsPortal(dev, val);
+       SEM_UP_PRIV_WX(&priv->wx_sem);  
+
+       return ret;
+}
+static int Set_AsRoot_Proc(struct net_device *meshdev, char *arg)
+{
+       struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev);
+       struct rtllib_device *ieee = mpriv->rtllib;
+       struct net_device *dev = ieee->dev;
+       struct r8192_priv *priv = (void *)ieee->priv;
+       u8 val = my_atoi(arg);
+       int ret = 0;
+
+       SEM_DOWN_PRIV_WX(&priv->wx_sem);        
+       ret = priv->mshobj->ext_patch_r819x_wx_set_AsRoot(dev, val);
+       SEM_UP_PRIV_WX(&priv->wx_sem);  
+
+       return ret;
+}
+
+static struct {
+       char* name;
+       int (*set_proc)(struct net_device *dev, char *arg);
+} *private_set_proc, private_support_proc[] = {
+       {"Debug",                               NULL},
+       {"Channel",                             Set_Channel_Proc},            
+       {"MeshId",                              Set_MeshID_Proc},
+       {"Bw40MHz",                             Set_Bw40MHz_Proc},
+       {"WirelessMode",                        Set_WirelessMode_Proc},
+       {"ExtChnOffset",                        Set_ExtChnOffset_Proc},
+       {"OnlyMesh",                            Set_OnlyMesh_Proc},
+       {"AsPortal",                            Set_AsPortal_Proc},
+       {"AsRoot",                              Set_AsRoot_Proc},
+       {"MeshAuthMode",                        NULL},       
+       {"MeshEncrypType",                      NULL},  
+       {"<NULL>",                              NULL},
+};
+
+static char *rtlstrchr(const char *s, int c)
+{
+       for(; *s!=(char)c; ++s)
+               if(*s == '\0')
+                       return NULL;
+       return (char *)s;
+}
+
+static int meshdev_wx_set_param(struct net_device *dev, struct iw_request_info *info,
+                              union iwreq_data *w, char *extra)
+{
+       char * this_char = extra;
+       char *value = NULL;
+       int  Status=0;
+
+       printk("=======>%s: extra=%s\n", __FUNCTION__,extra);
+       if (!*this_char)
+               return -EINVAL; 
+       
+       if ((value = rtlstrchr(this_char, '=')) != NULL)
+               *value++ = 0;
+
+       for (private_set_proc = private_support_proc; strcmp(private_set_proc->name, "<NULL>"); private_set_proc++)            
+       {
+               if (strcmp(this_char, private_set_proc->name) == 0)
+               {
+                       if(private_set_proc->set_proc)
+                       {
+                               if(private_set_proc->set_proc(dev, value))
+                               {       
+                                       Status = -EINVAL;
+                               }
+                       }
+                       break;  
+               }
+       }
+       
+       if(strcmp(private_set_proc->name, "<NULL>") == 0)
+       {  
+               Status = -EINVAL;
+               printk("===>%s: (iwpriv) Not Support Set Command [%s]", __FUNCTION__, this_char);
+               if(value != NULL)
+                       printk(" value=%s\n", value);
+               else
+                       printk("\n");
+       }
+       
+       return Status;
+}
+
+
+static iw_handler meshdev_private_handler[] = {
+       meshdev_wx_enable_mesh,         
+       meshdev_wx_get_meshinfo,                
+       meshdev_wx_disable_mesh,                
+       meshdev_wx_set_channel,                 
+       meshdev_wx_set_meshid,                  
+       meshdev_wx_get_mesh_list,               
+       meshdev_wx_mesh_scan,                   
+       meshdev_wx_set_meshmode,                
+       meshdev_wx_set_hostname,                
+       meshdev_wx_set_meshbw,                  
+       meshdev_wx_update_beacon,               
+       meshdev_wx_get_mac_deny,                
+       meshdev_wx_add_mac_deny,                
+       NULL,                                   
+       NULL,
+       meshdev_wx_get_neighbor_list,           
+       meshdev_wx_set_param,                   
+       NULL,                                   
+       meshdev_wx_del_mac_deny,                
+       NULL,                                                   
+       meshdev_wx_set_mesh_security,           
+       meshdev_wx_set_mkdd_id,                 
+       meshdev_wx_set_mesh_key,                        
+       meshdev_wx_set_sec_type,                
+};
+
+struct iw_handler_def  meshdev_wx_handlers_def={
+       .standard = meshdev_wx_handlers,
+       .num_standard = sizeof(meshdev_wx_handlers) / sizeof(iw_handler),
+       .private = meshdev_private_handler,
+       .num_private = sizeof(meshdev_private_handler) / sizeof(iw_handler),
+       .num_private_args = sizeof(meshdev_private_args) / sizeof(struct iw_priv_args),
+#if WIRELESS_EXT >= 17 
+       .get_wireless_stats = (void*)meshdev_stats,
+#endif
+       .private_args = (struct iw_priv_args *)meshdev_private_args,    
+};
+#endif
+
diff --git a/ubuntu/rtl8192se/rtl_wx.h b/ubuntu/rtl8192se/rtl_wx.h
new file mode 100644 (file)
index 0000000..aff1cca
--- /dev/null
@@ -0,0 +1,34 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+
+#ifndef R819x_WX_H
+#define R819x_WX_H
+
+struct net_device;
+struct iw_handler_def;
+struct iw_statistics;
+
+extern struct iw_handler_def r8192_wx_handlers_def;
+struct iw_statistics *r8192_get_wireless_stats(struct net_device *dev);
+u16 rtl8192_11n_user_show_rates(struct net_device* dev);
+
+#ifdef _RTL8192_EXT_PATCH_
+extern struct iw_handler_def meshdev_wx_handlers_def;
+#endif
+#endif
diff --git a/ubuntu/rtl8192se/rtllib/EndianFree.h b/ubuntu/rtl8192se/rtllib/EndianFree.h
new file mode 100644 (file)
index 0000000..7433d4f
--- /dev/null
@@ -0,0 +1,160 @@
+#ifndef __INC_ENDIANFREE_H\r
+#define __INC_ENDIANFREE_H\r
+\r
+/*\r
+ *     Call endian free function when\r
+ *             1. Read/write packet content.\r
+ *             2. Before write integer to IO.\r
+ *             3. After read integer from IO.\r
+ */\r
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20))\r
+#ifndef bool\r
+typedef enum{false = 0, true} bool;\r
+#endif\r
+#endif\r
+\r
+#define __MACHINE_LITTLE_ENDIAN 1234    /* LSB first: i386, vax */\r
+#define __MACHINE_BIG_ENDIAN    4321    /* MSB first: 68000, ibm, net, ppc */\r
+\r
+#define BYTE_ORDER __MACHINE_LITTLE_ENDIAN\r
+\r
+#if BYTE_ORDER == __MACHINE_LITTLE_ENDIAN\r
+#define EF1Byte(_val)                          ((u8)(_val))\r
+#define EF2Byte(_val)                          ((u16)(_val))\r
+#define EF4Byte(_val)                          ((u32)(_val))\r
+\r
+#else\r
+#define EF1Byte(_val)                          ((u8)(_val))\r
+#define EF2Byte(_val)                          (((((u16)(_val))&0x00ff)<<8)|((((u16)(_val))&0xff00)>>8))\r
+#define EF4Byte(_val)                          (((((u32)(_val))&0x000000ff)<<24)|\\r
+                                               ((((u32)(_val))&0x0000ff00)<<8)|\\r
+                                               ((((u32)(_val))&0x00ff0000)>>8)|\\r
+                                               ((((u32)(_val))&0xff000000)>>24))\r
+#endif\r
+\r
+#define ReadEF1Byte(_ptr)              EF1Byte(*((u8 *)(_ptr)))\r
+#define ReadEF2Byte(_ptr)              EF2Byte(*((u16 *)(_ptr)))\r
+#define ReadEF4Byte(_ptr)              EF4Byte(*((u32 *)(_ptr)))\r
+\r
+#define WriteEF1Byte(_ptr, _val)       (*((u8 *)(_ptr)))=EF1Byte(_val)\r
+#define WriteEF2Byte(_ptr, _val)       (*((u16 *)(_ptr)))=EF2Byte(_val)\r
+#define WriteEF4Byte(_ptr, _val)       (*((u32 *)(_ptr)))=EF4Byte(_val)                                                                        \r
+#if BYTE_ORDER == __MACHINE_LITTLE_ENDIAN\r
+#define H2N1BYTE(_val) ((u8)(_val))\r
+#define H2N2BYTE(_val) (((((u16)(_val))&0x00ff)<<8)|\\r
+                       ((((u16)(_val))&0xff00)>>8))\r
+#define H2N4BYTE(_val) (((((u32)(_val))&0x000000ff)<<24)|\\r
+                       ((((u32)(_val))&0x0000ff00)<<8) |\\r
+                       ((((u32)(_val))&0x00ff0000)>>8) |\\r
+                       ((((u32)(_val))&0xff000000)>>24))\r
+#else\r
+#define H2N1BYTE(_val)                 ((u8)(_val))\r
+#define H2N2BYTE(_val)                 ((u16)(_val))\r
+#define H2N4BYTE(_val)                 ((u32)(_val))\r
+#endif\r
+\r
+#if BYTE_ORDER == __MACHINE_LITTLE_ENDIAN\r
+#define N2H1BYTE(_val) ((u8)(_val))\r
+#define N2H2BYTE(_val) (((((u16)(_val))&0x00ff)<<8)|\\r
+                       ((((u16)(_val))&0xff00)>>8))\r
+#define N2H4BYTE(_val) (((((u32)(_val))&0x000000ff)<<24)|\\r
+                       ((((u32)(_val))&0x0000ff00)<<8) |\\r
+                       ((((u32)(_val))&0x00ff0000)>>8) |\\r
+                       ((((u32)(_val))&0xff000000)>>24))\r
+#else\r
+#define N2H1BYTE(_val)                 ((u8)(_val))\r
+#define N2H2BYTE(_val)                 ((u16)(_val))\r
+#define N2H4BYTE(_val)                 ((u32)(_val))\r
+#endif\r
+\r
+#define BIT_LEN_MASK_32(__BitLen) (0xFFFFFFFF >> (32 - (__BitLen)))\r
+#define BIT_OFFSET_LEN_MASK_32(__BitOffset, __BitLen) (BIT_LEN_MASK_32(__BitLen) << (__BitOffset)) \r
+\r
+#define LE_P4BYTE_TO_HOST_4BYTE(__pStart) (EF4Byte(*((u32 *)(__pStart))))\r
+\r
+#define LE_BITS_TO_4BYTE(__pStart, __BitOffset, __BitLen) \\r
+       ( \\r
+         ( LE_P4BYTE_TO_HOST_4BYTE(__pStart) >> (__BitOffset) ) \\r
+         & \\r
+         BIT_LEN_MASK_32(__BitLen) \\r
+       )\r
+\r
+#define LE_BITS_CLEARED_TO_4BYTE(__pStart, __BitOffset, __BitLen) \\r
+       ( \\r
+         LE_P4BYTE_TO_HOST_4BYTE(__pStart) \\r
+         & \\r
+         ( ~BIT_OFFSET_LEN_MASK_32(__BitOffset, __BitLen) ) \\r
+       )\r
+\r
+#define SET_BITS_TO_LE_4BYTE(__pStart, __BitOffset, __BitLen, __Value) \\r
+       *((u32 *)(__pStart)) = \\r
+       EF4Byte( \\r
+       LE_BITS_CLEARED_TO_4BYTE(__pStart, __BitOffset, __BitLen) \\r
+       | \\r
+       ( (((u32)__Value) & BIT_LEN_MASK_32(__BitLen)) << (__BitOffset) ) \\r
+       );\r
+\r
+\r
+#define BIT_LEN_MASK_16(__BitLen) \\r
+       (0xFFFF >> (16 - (__BitLen)))\r
+\r
+#define BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen) \\r
+       (BIT_LEN_MASK_16(__BitLen) << (__BitOffset))\r
+\r
+#define LE_P2BYTE_TO_HOST_2BYTE(__pStart) \\r
+       (EF2Byte(*((u16 *)(__pStart))))\r
+\r
+#define LE_BITS_TO_2BYTE(__pStart, __BitOffset, __BitLen) \\r
+       ( \\r
+         ( LE_P2BYTE_TO_HOST_2BYTE(__pStart) >> (__BitOffset) ) \\r
+         & \\r
+         BIT_LEN_MASK_16(__BitLen) \\r
+       )\r
+\r
+#define LE_BITS_CLEARED_TO_2BYTE(__pStart, __BitOffset, __BitLen) \\r
+       ( \\r
+         LE_P2BYTE_TO_HOST_2BYTE(__pStart) \\r
+         & \\r
+         ( ~BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen) ) \\r
+       )\r
+\r
+#define SET_BITS_TO_LE_2BYTE(__pStart, __BitOffset, __BitLen, __Value) \\r
+       *((u16 *)(__pStart)) = \\r
+       EF2Byte( \\r
+               LE_BITS_CLEARED_TO_2BYTE(__pStart, __BitOffset, __BitLen) \\r
+               | \\r
+               ( (((u16)__Value) & BIT_LEN_MASK_16(__BitLen)) << (__BitOffset) ) \\r
+       );\r
+\r
+#define BIT_LEN_MASK_8(__BitLen) \\r
+       (0xFF >> (8 - (__BitLen)))\r
+\r
+#define BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen) \\r
+       (BIT_LEN_MASK_8(__BitLen) << (__BitOffset))\r
+\r
+#define LE_P1BYTE_TO_HOST_1BYTE(__pStart) \\r
+       (EF1Byte(*((u8 *)(__pStart))))\r
+\r
+#define LE_BITS_TO_1BYTE(__pStart, __BitOffset, __BitLen) \\r
+       ( \\r
+         ( LE_P1BYTE_TO_HOST_1BYTE(__pStart) >> (__BitOffset) ) \\r
+         & \\r
+         BIT_LEN_MASK_8(__BitLen) \\r
+       )\r
+\r
+#define LE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __BitLen) \\r
+       ( \\r
+         LE_P1BYTE_TO_HOST_1BYTE(__pStart) \\r
+         & \\r
+         ( ~BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen) ) \\r
+       )\r
+\r
+#define SET_BITS_TO_LE_1BYTE(__pStart, __BitOffset, __BitLen, __Value) \\r
+       *((u8 *)(__pStart)) = \\r
+       EF1Byte( \\r
+               LE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __BitLen) \\r
+               | \\r
+               ( (((u8)__Value) & BIT_LEN_MASK_8(__BitLen)) << (__BitOffset) ) \\r
+       );\r
+\r
+#endif 
diff --git a/ubuntu/rtl8192se/rtllib/Makefile b/ubuntu/rtl8192se/rtllib/Makefile
new file mode 100644 (file)
index 0000000..33128ed
--- /dev/null
@@ -0,0 +1,214 @@
+NIC_SELECT = RTL8192SE
+
+KVER  := $(shell uname -r)
+MODDESTDIR := /lib/modules/$(KVER)/kernel/drivers/net/wireless/$(NIC_SELECT)
+
+CC = gcc
+ifneq ($(shell uname -r|cut -d. -f1,2), 2.4)
+EXTRA_CFLAGS += -I$(TOPDIR)/drivers/net/wireless
+EXTRA_CFLAGS += -O2
+
+#it will fail to compile in suse linux enterprise 10 sp2. This flag is to solve this problem.
+ifeq ($(shell uname -r | cut -d. -f1,2,3,4), 2.6.16.60-0)
+EXTRA_CFLAGS += -DOPENSUSE_SLED
+endif
+ifeq ($(NIC_SELECT), RTL8192SE)
+       EXTRA_CFLAGS += -DRTL8192S_DISABLE_FW_DM=0
+       EXTRA_CFLAGS += -DRTL8192SE
+       EXTRA_CFLAGS += -DENABLE_IPS
+       EXTRA_CFLAGS += -DENABLE_LPS
+endif
+ifeq ($(NIC_SELECT), RTL8192SU)
+       EXTRA_CFLAGS += -DRTL8192S_DISABLE_FW_DM=0
+       EXTRA_CFLAGS += -DRTL8192SU
+       EXTRA_CFLAGS += -DENABLE_IPS
+       EXTRA_CFLAGS += -DENABLE_LPS
+       EXTRA_CFLAGS += -DUSB_RX_AGGREGATION_SUPPORT
+       EXTRA_CFLAGS += -DTCP_CSUM_OFFLOAD_RX
+endif
+ifeq ($(NIC_SELECT), RTL8190P)
+       EXTRA_CFLAGS += -DRTL8190P
+endif
+ifeq ($(NIC_SELECT), RTL8192E)
+       EXTRA_CFLAGS += -DRTL8192E
+        EXTRA_CFLAGS += -DENABLE_IPS
+        EXTRA_CFLAGS += -DENABLE_LPS
+endif
+ifeq ($(NIC_SELECT),RTL8192U)
+EXTRA_CFLAGS += -DRTL8192U
+#EXTRA_CFLAGS += -DENABLE_AMSDU
+EXTRA_CFLAGS += -DUSB_TX_DRIVER_AGGREGATION_ENABLE
+EXTRA_CFLAGS += -DUSB_RX_AGGREGATION_SUPPORT
+
+# For RTK DMP platform
+#EXTRA_CFLAGS += -DRTK_DMP_PLATFORM
+#EXTRA_CFLAGS += -DWIFI_TEST
+
+endif
+ifeq ($(NIC_SELECT), RTL8191SE_MESH)
+AUTHTYPE=SAE
+#AUTHTYPE=OPEN
+EXTRA_CFLAGS += -DRTL8192SE \
+               -DRTL8192S_DISABLE_FW_DM=0 \
+               -D_RTL8192_EXT_PATCH_\
+               -DENABLE_IPS \
+               -DENABLE_LPS \
+               -DCUSTOMER_ID_INTEL_CMPC
+ifeq ($(AUTHTYPE),SAE)
+EXTRA_CFLAGS += -DMESH_ABBR_HANDSHK_SUPPORT\
+               -DMESH_ATH_2
+endif
+endif
+#EXTRA_CFLAGS += -DJOHN_NOCPY
+EXTRA_CFLAGS += -DTHOMAS_TURBO
+#flags to enable or disble 80211D feature
+EXTRA_CFLAGS += -DENABLE_DOT11D
+rtllib-rsl-objs := rtllib_rx.o \
+                     rtllib_softmac.o \
+                     rtllib_tx.o \
+                     rtllib_wx.o \
+                     rtllib_module.o \
+                     rtllib_softmac_wx.o\
+                     rtl819x_HTProc.o\
+                     rtl819x_TSProc.o\
+                     rtl819x_BAProc.o\
+                     dot11d.o
+
+rtllib_crypt-rsl-objs := rtllib_crypt.o
+rtllib_crypt_tkip-rsl-objs := rtllib_crypt_tkip.o
+rtllib_crypt_ccmp-rsl-objs := rtllib_crypt_ccmp.o
+rtllib_crypt_wep-rsl-objs := rtllib_crypt_wep.o
+
+obj-m +=rtllib-rsl.o
+obj-m +=rtllib_crypt-rsl.o
+obj-m +=rtllib_crypt_wep-rsl.o
+obj-m +=rtllib_crypt_tkip-rsl.o
+obj-m +=rtllib_crypt_ccmp-rsl.o
+
+KSRC := /lib/modules/$(KVER)/build
+INSTALL_PREFIX :=
+
+all: modules
+
+modules:
+       $(MAKE) -C $(KSRC) M=$(PWD) CC=$(CC) modules
+
+install: modules
+       rm -fr $(MODDESTDIR)
+       mkdir -p $(MODDESTDIR)
+       @install -p -m 644 rtllib_crypt-rsl.ko $(MODDESTDIR)
+       @install -p -m 644 rtllib_crypt_wep-rsl.ko $(MODDESTDIR)
+       @install -p -m 644 rtllib_crypt_tkip-rsl.ko $(MODDESTDIR)
+       @install -p -m 644 rtllib_crypt_ccmp-rsl.ko $(MODDESTDIR)
+       @install -p -m 644 rtllib-rsl.ko $(MODDESTDIR)
+       depmod -a
+uninstall:
+       rm -fr $(MODDESTDIR)
+       depmod -a 
+
+else
+LD := ld
+KSRC := /lib/modules/$(KVER)/build
+CONFIG_FILE := $(KSRC)/include/linux/autoconf.h
+
+CFLAGS += -DLINUX -D__KERNEL__ -DMODULE -O2 -pipe -Wall
+CFLAGS += -I$(KSRC)/include -I.
+#Kernel 2.4.31
+CFLAGS += -DMODVERSIONS -DEXPORT_SYMTAB -include $(KSRC)/include/linux/modversions.h
+#Kernel 2.4.20
+#CFLAGS += -D__NO_VERSION__ -DEXPORT_SYMTAB 
+CFLAGS += -DENABLE_DOT11D
+CFLAGS += -DTHOMAS_TURBO
+
+ifeq ($(NIC_SELECT),RTL8192U)
+CFLAGS += -DRTL8192U
+#EXTRA_CFLAGS += -DENABLE_AMSDU
+EXTRA_CFLAGS += -DUSB_TX_DRIVER_AGGREGATION_ENABLE
+EXTRA_CFLAGS += -DUSB_RX_AGGREGATION_SUPPORT
+endif
+ifeq ($(NIC_SELECT),RTL8192E)
+CFLAGS += -DRTL8192E
+endif
+ifeq ($(NIC_SELECT),RTL8190P)
+CFLAGS += -DRTL8190P
+endif
+ifeq ($(NIC_SELECT),RTL8192SE)
+CFLAGS += -DRTL8192SE
+CFLAGS += -DRTL8192S_DISABLE_FW_DM=0
+endif
+ifeq ($(NIC_SELECT), RTL8191SE_MESH)
+AUTHTYPE=SAE
+#AUTHTYPE=OPEN
+CFLAGS += -DRTL8192SE
+CFLAGS += -DRTL8192S_DISABLE_FW_DM=0
+CFLAGS += -D_RTL8192_EXT_PATCH_
+ifeq ($(AUTHTYPE),SAE)
+CFLAGS += -DMESH_ABBR_HANDSHK_SUPPORT\
+CFLAGS += -DMESH_ATH_2
+endif
+endif
+
+SMP := $(shell $(CC) $(MODCFLAGS) -E -dM $(CONFIG_FILE) | \
+   grep CONFIG_SMP | awk '{print $$3}')
+ifneq ($(SMP),1)
+   SMP := 0
+endif
+ifeq ($(SMP),1)
+   CFLAGS    += -D__SMP__
+endif
+
+#CFLAGS += -DJOHN_NOCPY
+
+OBJS := ${patsubst %.c, %.o, ${wildcard *.c}}
+all:${OBJS} rtllib_crypt-rsl.o michael_mic-rsl.o aes-rsl.o rtllib_crypt_wep-rsl.o rtllib_crypt_tkip-rsl.o rtllib_crypt_ccmp-rsl.o crypto-rsl.o rtllib-rsl.o
+
+rtllib_crypt-rsl.o: rtllib_crypt.o
+       mv $^ $@        
+
+michael_mic-rsl.o: michael_mic.o
+       mv $^ $@
+
+aes-rsl.o: aes.o
+       mv $^ $@
+
+rtllib_crypt_wep-rsl.o: rtllib_crypt_wep.o
+       mv $^ $@
+
+rtllib_crypt_tkip-rsl.o: rtllib_crypt_tkip.o
+       mv $^ $@
+
+rtllib_crypt_ccmp-rsl.o: rtllib_crypt_ccmp.o
+       mv $^ $@
+
+crypto-rsl.o: arc4.o api.o autoload.o cipher.o compress.o digest.o scatterwalk.o proc.o
+       $(LD) -r $^ -o $@
+
+rtllib-rsl.o: rtllib_rx.o rtllib_tx.o rtllib_wx.o rtllib_module.o rtllib_softmac_wx.o rtllib_softmac.o rtl819x_HTProc.o rtl819x_TSProc.o rtl819x_BAProc.o dot11d.o
+       $(LD) -r $^ -o $@
+install:
+       rm -fr $(MODDESTDIR)
+       mkdir -p $(MODDESTDIR)
+       @install -p -m 644 rtllib_crypt-rsl.o $(MODDESTDIR)
+       @install -p -m 644 crypto-rsl.o $(MODDESTDIR)
+       @install -p -m 644 michael_mic-rsl.o $(MODDESTDIR)
+       @install -p -m 644 aes-rsl.o $(MODDESTDIR)
+       @install -p -m 644 rtllib_crypt_wep-rsl.o $(MODDESTDIR)
+       @install -p -m 644 rtllib_crypt_tkip-rsl.o $(MODDESTDIR)
+       @install -p -m 644 rtllib_crypt_ccmp-rsl.o $(MODDESTDIR)
+       @install -p -m 644 rtllib-rsl.o $(MODDESTDIR)
+       /sbin/depmod -a ${shell uname -r}
+
+uninstall:
+       rm -fr $(MODDESTDIR)
+       /sbin/depmod -a ${shell uname -r}
+
+endif
+
+.PHONY: clean
+clean:
+       rm -fr *.mod.c *.mod *.o .*.cmd *.mod.* *.ko *.o *~
+       rm -rf .tmp_versions
+       rm -rf Module.symvers
+       rm -fr Module.markers
+       rm -fr modules.order
+       rm -fr tags
diff --git a/ubuntu/rtl8192se/rtllib/aes.c b/ubuntu/rtl8192se/rtllib/aes.c
new file mode 100644 (file)
index 0000000..625fd62
--- /dev/null
@@ -0,0 +1,468 @@
+/* 
+ * Cryptographic API.
+ *
+ * AES Cipher Algorithm.
+ *
+ * Based on Brian Gladman's code.
+ *
+ * Linux developers:
+ *  Alexander Kjeldaas <astor@fast.no>
+ *  Herbert Valerio Riedel <hvr@hvrlab.org>
+ *  Kyle McMartin <kyle@debian.org>
+ *  Adam J. Richter <adam@yggdrasil.com> (conversion to 2.5 API).
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * ---------------------------------------------------------------------------
+ * Copyright (c) 2002, Dr Brian Gladman <brg@gladman.me.uk>, Worcester, UK.
+ * All rights reserved.
+ *
+ * LICENSE TERMS
+ *
+ * The free distribution and use of this software in both source and binary
+ * form is allowed (with or without changes) provided that:
+ *
+ *   1. distributions of this source code include the above copyright
+ *      notice, this list of conditions and the following disclaimer;
+ *
+ *   2. distributions in binary form include the above copyright
+ *      notice, this list of conditions and the following disclaimer
+ *      in the documentation and/or other associated materials;
+ *
+ *   3. the copyright holder's name is not used to endorse products
+ *      built using this software without specific written permission.
+ *
+ * ALTERNATIVELY, provided that this notice is retained in full, this product
+ * may be distributed under the terms of the GNU General Public License (GPL),
+ * in which case the provisions of the GPL apply INSTEAD OF those given above.
+ *
+ * DISCLAIMER
+ *
+ * This software is provided 'as is' with no explicit or implied warranties
+ * in respect of its properties, including, but not limited to, correctness
+ * and/or fitness for purpose.
+ * ---------------------------------------------------------------------------
+ */
+
+/* Some changes from the Gladman version:
+    s/RIJNDAEL(e_key)/E_KEY/g
+    s/RIJNDAEL(d_key)/D_KEY/g
+*/
+
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/types.h>
+#include <linux/errno.h>
+#include "rtl_crypto.h"
+#include <asm/byteorder.h>
+
+#define AES_MIN_KEY_SIZE       16
+#define AES_MAX_KEY_SIZE       32
+
+#define AES_BLOCK_SIZE         16
+
+static inline 
+u32 generic_rotr32 (const u32 x, const unsigned bits)
+{
+       const unsigned n = bits % 32;
+       return (x >> n) | (x << (32 - n));
+}
+
+static inline 
+u32 generic_rotl32 (const u32 x, const unsigned bits)
+{
+       const unsigned n = bits % 32;
+       return (x << n) | (x >> (32 - n));
+}
+
+#define rotl generic_rotl32
+#define rotr generic_rotr32
+
+/*
+ * #define byte(x, nr) ((unsigned char)((x) >> (nr*8))) 
+ */
+inline static u8
+byte(const u32 x, const unsigned n)
+{
+       return x >> (n << 3);
+}
+
+#define u32_in(x) le32_to_cpu(*(const u32 *)(x))
+#define u32_out(to, from) (*(u32 *)(to) = cpu_to_le32(from))
+
+struct aes_ctx {
+       int key_length;
+       u32 E[60];
+       u32 D[60];
+};
+
+#define E_KEY ctx->E
+#define D_KEY ctx->D
+
+static u8 pow_tab[256] __initdata;
+static u8 log_tab[256] __initdata;
+static u8 sbx_tab[256] __initdata;
+static u8 isb_tab[256] __initdata;
+static u32 rco_tab[10];
+static u32 ft_tab[4][256];
+static u32 it_tab[4][256];
+
+static u32 fl_tab[4][256];
+static u32 il_tab[4][256];
+
+static inline u8 __init
+f_mult (u8 a, u8 b)
+{
+       u8 aa = log_tab[a], cc = aa + log_tab[b];
+
+       return pow_tab[cc + (cc < aa ? 1 : 0)];
+}
+
+#define ff_mult(a,b)    (a && b ? f_mult(a, b) : 0)
+
+#define f_rn(bo, bi, n, k)                                     \
+    bo[n] =  ft_tab[0][byte(bi[n],0)] ^                                \
+             ft_tab[1][byte(bi[(n + 1) & 3],1)] ^              \
+             ft_tab[2][byte(bi[(n + 2) & 3],2)] ^              \
+             ft_tab[3][byte(bi[(n + 3) & 3],3)] ^ *(k + n)
+
+#define i_rn(bo, bi, n, k)                                     \
+    bo[n] =  it_tab[0][byte(bi[n],0)] ^                                \
+             it_tab[1][byte(bi[(n + 3) & 3],1)] ^              \
+             it_tab[2][byte(bi[(n + 2) & 3],2)] ^              \
+             it_tab[3][byte(bi[(n + 1) & 3],3)] ^ *(k + n)
+
+#define ls_box(x)                              \
+    ( fl_tab[0][byte(x, 0)] ^                  \
+      fl_tab[1][byte(x, 1)] ^                  \
+      fl_tab[2][byte(x, 2)] ^                  \
+      fl_tab[3][byte(x, 3)] )
+
+#define f_rl(bo, bi, n, k)                                     \
+    bo[n] =  fl_tab[0][byte(bi[n],0)] ^                                \
+             fl_tab[1][byte(bi[(n + 1) & 3],1)] ^              \
+             fl_tab[2][byte(bi[(n + 2) & 3],2)] ^              \
+             fl_tab[3][byte(bi[(n + 3) & 3],3)] ^ *(k + n)
+
+#define i_rl(bo, bi, n, k)                                     \
+    bo[n] =  il_tab[0][byte(bi[n],0)] ^                                \
+             il_tab[1][byte(bi[(n + 3) & 3],1)] ^              \
+             il_tab[2][byte(bi[(n + 2) & 3],2)] ^              \
+             il_tab[3][byte(bi[(n + 1) & 3],3)] ^ *(k + n)
+
+static void __init
+gen_tabs (void)
+{
+       u32 i, t;
+       u8 p, q;
+
+       /* log and power tables for GF(2**8) finite field with
+          0x011b as modular polynomial - the simplest primitive
+          root is 0x03, used here to generate the tables */
+
+       for (i = 0, p = 1; i < 256; ++i) {
+               pow_tab[i] = (u8) p;
+               log_tab[p] = (u8) i;
+
+               p ^= (p << 1) ^ (p & 0x80 ? 0x01b : 0);
+       }
+
+       log_tab[1] = 0;
+
+       for (i = 0, p = 1; i < 10; ++i) {
+               rco_tab[i] = p;
+
+               p = (p << 1) ^ (p & 0x80 ? 0x01b : 0);
+       }
+
+       for (i = 0; i < 256; ++i) {
+               p = (i ? pow_tab[255 - log_tab[i]] : 0);
+               q = ((p >> 7) | (p << 1)) ^ ((p >> 6) | (p << 2));
+               p ^= 0x63 ^ q ^ ((q >> 6) | (q << 2));
+               sbx_tab[i] = p;
+               isb_tab[p] = (u8) i;
+       }
+
+       for (i = 0; i < 256; ++i) {
+               p = sbx_tab[i];
+
+               t = p;
+               fl_tab[0][i] = t;
+               fl_tab[1][i] = rotl (t, 8);
+               fl_tab[2][i] = rotl (t, 16);
+               fl_tab[3][i] = rotl (t, 24);
+
+               t = ((u32) ff_mult (2, p)) |
+                   ((u32) p << 8) |
+                   ((u32) p << 16) | ((u32) ff_mult (3, p) << 24);
+
+               ft_tab[0][i] = t;
+               ft_tab[1][i] = rotl (t, 8);
+               ft_tab[2][i] = rotl (t, 16);
+               ft_tab[3][i] = rotl (t, 24);
+
+               p = isb_tab[i];
+
+               t = p;
+               il_tab[0][i] = t;
+               il_tab[1][i] = rotl (t, 8);
+               il_tab[2][i] = rotl (t, 16);
+               il_tab[3][i] = rotl (t, 24);
+
+               t = ((u32) ff_mult (14, p)) |
+                   ((u32) ff_mult (9, p) << 8) |
+                   ((u32) ff_mult (13, p) << 16) |
+                   ((u32) ff_mult (11, p) << 24);
+
+               it_tab[0][i] = t;
+               it_tab[1][i] = rotl (t, 8);
+               it_tab[2][i] = rotl (t, 16);
+               it_tab[3][i] = rotl (t, 24);
+       }
+}
+
+#define star_x(x) (((x) & 0x7f7f7f7f) << 1) ^ ((((x) & 0x80808080) >> 7) * 0x1b)
+
+#define imix_col(y,x)       \
+    u   = star_x(x);        \
+    v   = star_x(u);        \
+    w   = star_x(v);        \
+    t   = w ^ (x);          \
+   (y)  = u ^ v ^ w;        \
+   (y) ^= rotr(u ^ t,  8) ^ \
+          rotr(v ^ t, 16) ^ \
+          rotr(t,24)
+
+/* initialise the key schedule from the user supplied key */
+
+#define loop4(i)                                    \
+{   t = rotr(t,  8); t = ls_box(t) ^ rco_tab[i];    \
+    t ^= E_KEY[4 * i];     E_KEY[4 * i + 4] = t;    \
+    t ^= E_KEY[4 * i + 1]; E_KEY[4 * i + 5] = t;    \
+    t ^= E_KEY[4 * i + 2]; E_KEY[4 * i + 6] = t;    \
+    t ^= E_KEY[4 * i + 3]; E_KEY[4 * i + 7] = t;    \
+}
+
+#define loop6(i)                                    \
+{   t = rotr(t,  8); t = ls_box(t) ^ rco_tab[i];    \
+    t ^= E_KEY[6 * i];     E_KEY[6 * i + 6] = t;    \
+    t ^= E_KEY[6 * i + 1]; E_KEY[6 * i + 7] = t;    \
+    t ^= E_KEY[6 * i + 2]; E_KEY[6 * i + 8] = t;    \
+    t ^= E_KEY[6 * i + 3]; E_KEY[6 * i + 9] = t;    \
+    t ^= E_KEY[6 * i + 4]; E_KEY[6 * i + 10] = t;   \
+    t ^= E_KEY[6 * i + 5]; E_KEY[6 * i + 11] = t;   \
+}
+
+#define loop8(i)                                    \
+{   t = rotr(t,  8); ; t = ls_box(t) ^ rco_tab[i];  \
+    t ^= E_KEY[8 * i];     E_KEY[8 * i + 8] = t;    \
+    t ^= E_KEY[8 * i + 1]; E_KEY[8 * i + 9] = t;    \
+    t ^= E_KEY[8 * i + 2]; E_KEY[8 * i + 10] = t;   \
+    t ^= E_KEY[8 * i + 3]; E_KEY[8 * i + 11] = t;   \
+    t  = E_KEY[8 * i + 4] ^ ls_box(t);    \
+    E_KEY[8 * i + 12] = t;                \
+    t ^= E_KEY[8 * i + 5]; E_KEY[8 * i + 13] = t;   \
+    t ^= E_KEY[8 * i + 6]; E_KEY[8 * i + 14] = t;   \
+    t ^= E_KEY[8 * i + 7]; E_KEY[8 * i + 15] = t;   \
+}
+
+static int
+aes_set_key(void *ctx_arg, const u8 *in_key, unsigned int key_len, u32 *flags)
+{
+       struct aes_ctx *ctx = ctx_arg;
+       u32 i, t, u, v, w;
+
+       if (key_len != 16 && key_len != 24 && key_len != 32) {
+               *flags |= CRYPTO_TFM_RES_BAD_KEY_LEN;
+               return -EINVAL;
+       }
+
+       ctx->key_length = key_len;
+
+       E_KEY[0] = u32_in (in_key);
+       E_KEY[1] = u32_in (in_key + 4);
+       E_KEY[2] = u32_in (in_key + 8);
+       E_KEY[3] = u32_in (in_key + 12);
+
+       switch (key_len) {
+       case 16:
+               t = E_KEY[3];
+               for (i = 0; i < 10; ++i)
+                       loop4 (i);
+               break;
+
+       case 24:
+               E_KEY[4] = u32_in (in_key + 16);
+               t = E_KEY[5] = u32_in (in_key + 20);
+               for (i = 0; i < 8; ++i)
+                       loop6 (i);
+               break;
+
+       case 32:
+               E_KEY[4] = u32_in (in_key + 16);
+               E_KEY[5] = u32_in (in_key + 20);
+               E_KEY[6] = u32_in (in_key + 24);
+               t = E_KEY[7] = u32_in (in_key + 28);
+               for (i = 0; i < 7; ++i)
+                       loop8 (i);
+               break;
+       }
+
+       D_KEY[0] = E_KEY[0];
+       D_KEY[1] = E_KEY[1];
+       D_KEY[2] = E_KEY[2];
+       D_KEY[3] = E_KEY[3];
+
+       for (i = 4; i < key_len + 24; ++i) {
+               imix_col (D_KEY[i], E_KEY[i]);
+       }
+
+       return 0;
+}
+
+/* encrypt a block of text */
+
+#define f_nround(bo, bi, k) \
+    f_rn(bo, bi, 0, k);     \
+    f_rn(bo, bi, 1, k);     \
+    f_rn(bo, bi, 2, k);     \
+    f_rn(bo, bi, 3, k);     \
+    k += 4
+
+#define f_lround(bo, bi, k) \
+    f_rl(bo, bi, 0, k);     \
+    f_rl(bo, bi, 1, k);     \
+    f_rl(bo, bi, 2, k);     \
+    f_rl(bo, bi, 3, k)
+
+static void aes_encrypt(void *ctx_arg, u8 *out, const u8 *in)
+{
+       const struct aes_ctx *ctx = ctx_arg;
+       u32 b0[4], b1[4];
+       const u32 *kp = E_KEY + 4;
+       b0[0] = u32_in (in) ^ E_KEY[0];
+       b0[1] = u32_in (in + 4) ^ E_KEY[1];
+       b0[2] = u32_in (in + 8) ^ E_KEY[2];
+       b0[3] = u32_in (in + 12) ^ E_KEY[3];
+
+       if (ctx->key_length > 24) {
+               f_nround (b1, b0, kp);
+               f_nround (b0, b1, kp);
+       }
+
+       if (ctx->key_length > 16) {
+               f_nround (b1, b0, kp);
+               f_nround (b0, b1, kp);
+       }
+
+       f_nround (b1, b0, kp);
+       f_nround (b0, b1, kp);
+       f_nround (b1, b0, kp);
+       f_nround (b0, b1, kp);
+       f_nround (b1, b0, kp);
+       f_nround (b0, b1, kp);
+       f_nround (b1, b0, kp);
+       f_nround (b0, b1, kp);
+       f_nround (b1, b0, kp);
+       f_lround (b0, b1, kp);
+
+       u32_out (out, b0[0]);
+       u32_out (out + 4, b0[1]);
+       u32_out (out + 8, b0[2]);
+       u32_out (out + 12, b0[3]);
+}
+
+/* decrypt a block of text */
+
+#define i_nround(bo, bi, k) \
+    i_rn(bo, bi, 0, k);     \
+    i_rn(bo, bi, 1, k);     \
+    i_rn(bo, bi, 2, k);     \
+    i_rn(bo, bi, 3, k);     \
+    k -= 4
+
+#define i_lround(bo, bi, k) \
+    i_rl(bo, bi, 0, k);     \
+    i_rl(bo, bi, 1, k);     \
+    i_rl(bo, bi, 2, k);     \
+    i_rl(bo, bi, 3, k)
+
+static void aes_decrypt(void *ctx_arg, u8 *out, const u8 *in)
+{
+       const struct aes_ctx *ctx = ctx_arg;
+       u32 b0[4], b1[4];
+       const int key_len = ctx->key_length;
+       const u32 *kp = D_KEY + key_len + 20;
+
+       b0[0] = u32_in (in) ^ E_KEY[key_len + 24];
+       b0[1] = u32_in (in + 4) ^ E_KEY[key_len + 25];
+       b0[2] = u32_in (in + 8) ^ E_KEY[key_len + 26];
+       b0[3] = u32_in (in + 12) ^ E_KEY[key_len + 27];
+
+       if (key_len > 24) {
+               i_nround (b1, b0, kp);
+               i_nround (b0, b1, kp);
+       }
+
+       if (key_len > 16) {
+               i_nround (b1, b0, kp);
+               i_nround (b0, b1, kp);
+       }
+
+       i_nround (b1, b0, kp);
+       i_nround (b0, b1, kp);
+       i_nround (b1, b0, kp);
+       i_nround (b0, b1, kp);
+       i_nround (b1, b0, kp);
+       i_nround (b0, b1, kp);
+       i_nround (b1, b0, kp);
+       i_nround (b0, b1, kp);
+       i_nround (b1, b0, kp);
+       i_lround (b0, b1, kp);
+
+       u32_out (out, b0[0]);
+       u32_out (out + 4, b0[1]);
+       u32_out (out + 8, b0[2]);
+       u32_out (out + 12, b0[3]);
+}
+
+
+static struct crypto_alg aes_alg = {
+       .cra_name               =       "aes",
+       .cra_flags              =       CRYPTO_ALG_TYPE_CIPHER,
+       .cra_blocksize          =       AES_BLOCK_SIZE,
+       .cra_ctxsize            =       sizeof(struct aes_ctx),
+       .cra_module             =       THIS_MODULE,
+       .cra_list               =       LIST_HEAD_INIT(aes_alg.cra_list),
+       .cra_u                  =       {
+               .cipher = {
+                       .cia_min_keysize        =       AES_MIN_KEY_SIZE,
+                       .cia_max_keysize        =       AES_MAX_KEY_SIZE,
+                       .cia_setkey             =       aes_set_key,
+                       .cia_encrypt            =       aes_encrypt,
+                       .cia_decrypt            =       aes_decrypt
+               }
+       }
+};
+
+int __init aes_init(void)
+{
+       gen_tabs();
+       return crypto_register_alg(&aes_alg);
+}
+
+void __exit aes_fini(void)
+{
+       crypto_unregister_alg(&aes_alg);
+}
+
+#ifndef BUILT_IN_CRYPTO
+module_init(aes_init);
+module_exit(aes_fini);
+
+MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm");
+MODULE_LICENSE("Dual BSD/GPL");
+#endif
diff --git a/ubuntu/rtl8192se/rtllib/api.c b/ubuntu/rtl8192se/rtllib/api.c
new file mode 100644 (file)
index 0000000..32fe602
--- /dev/null
@@ -0,0 +1,261 @@
+/*
+ * Scatterlist Cryptographic API.
+ *
+ * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
+ * Copyright (c) 2002 David S. Miller (davem@redhat.com)
+ *
+ * Portions derived from Cryptoapi, by Alexander Kjeldaas <astor@fast.no>
+ * and Nettle, by Niels Mé°ˆler.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option) 
+ * any later version.
+ *
+ */
+
+
+#include <linux/init.h>
+#include <linux/module.h>
+#include "rtl_crypto.h"
+#include <linux/errno.h>
+#include <linux/rwsem.h>
+#include <linux/slab.h>
+#include "internal.h"
+
+LIST_HEAD(crypto_alg_list);
+DECLARE_RWSEM(crypto_alg_sem);
+
+static inline int crypto_alg_get(struct crypto_alg *alg)
+{
+#ifdef BUILT_IN_CRYPTO
+       return 1;
+#else
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
+       return try_module_get(alg->cra_module);
+#else
+       return try_inc_mod_count(alg->cra_module);
+#endif                 
+#endif
+}
+
+static inline void crypto_alg_put(struct crypto_alg *alg)
+{
+#ifndef BUILT_IN_CRYPTO
+       if (alg->cra_module)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)                
+               module_put(alg->cra_module);
+#else
+               __MOD_DEC_USE_COUNT(alg->cra_module);
+#endif         
+#endif
+}
+
+struct crypto_alg *crypto_alg_lookup(const char *name)
+{
+       struct crypto_alg *q, *alg = NULL;
+
+       if (!name)
+               return NULL;
+       
+       down_read(&crypto_alg_sem);
+       
+       list_for_each_entry(q, &crypto_alg_list, cra_list) {
+               if (!(strcmp(q->cra_name, name))) {
+                       if (crypto_alg_get(q))
+                               alg = q;
+                       break;
+               }
+       }
+       
+       up_read(&crypto_alg_sem);
+       return alg;
+}
+
+static int crypto_init_flags(struct crypto_tfm *tfm, u32 flags)
+{
+       tfm->crt_flags = 0;
+       
+       switch (crypto_tfm_alg_type(tfm)) {
+       case CRYPTO_ALG_TYPE_CIPHER:
+               return crypto_init_cipher_flags(tfm, flags);
+               
+       case CRYPTO_ALG_TYPE_DIGEST:
+               return crypto_init_digest_flags(tfm, flags);
+               
+       case CRYPTO_ALG_TYPE_COMPRESS:
+               return crypto_init_compress_flags(tfm, flags);
+       
+       default:
+               break;
+       }
+       
+       BUG();
+       return -EINVAL;
+}
+
+static int crypto_init_ops(struct crypto_tfm *tfm)
+{
+       switch (crypto_tfm_alg_type(tfm)) {
+       case CRYPTO_ALG_TYPE_CIPHER:
+               return crypto_init_cipher_ops(tfm);
+               
+       case CRYPTO_ALG_TYPE_DIGEST:
+               return crypto_init_digest_ops(tfm);
+               
+       case CRYPTO_ALG_TYPE_COMPRESS:
+               return crypto_init_compress_ops(tfm);
+       
+       default:
+               break;
+       }
+       
+       BUG();
+       return -EINVAL;
+}
+
+static void crypto_exit_ops(struct crypto_tfm *tfm)
+{
+       switch (crypto_tfm_alg_type(tfm)) {
+       case CRYPTO_ALG_TYPE_CIPHER:
+               crypto_exit_cipher_ops(tfm);
+               break;
+               
+       case CRYPTO_ALG_TYPE_DIGEST:
+               crypto_exit_digest_ops(tfm);
+               break;
+               
+       case CRYPTO_ALG_TYPE_COMPRESS:
+               crypto_exit_compress_ops(tfm);
+               break;
+       
+       default:
+               BUG();
+               
+       }
+}
+
+struct crypto_tfm *crypto_alloc_tfm(const char *name, u32 flags)
+{
+       struct crypto_tfm *tfm = NULL;
+       struct crypto_alg *alg;
+
+       alg = crypto_alg_mod_lookup(name);
+       if (alg == NULL)
+               goto out;
+       
+       tfm = kmalloc(sizeof(*tfm) + alg->cra_ctxsize, GFP_KERNEL);
+       if (tfm == NULL)
+               goto out_put;
+
+       memset(tfm, 0, sizeof(*tfm) + alg->cra_ctxsize);
+       
+       tfm->__crt_alg = alg;
+       
+       if (crypto_init_flags(tfm, flags))
+               goto out_free_tfm;
+               
+       if (crypto_init_ops(tfm)) {
+               crypto_exit_ops(tfm);
+               goto out_free_tfm;
+       }
+
+       goto out;
+
+out_free_tfm:
+       kfree(tfm);
+       tfm = NULL;
+out_put:
+       crypto_alg_put(alg);
+out:
+       return tfm;
+}
+
+void crypto_free_tfm(struct crypto_tfm *tfm)
+{
+       struct crypto_alg *alg = tfm->__crt_alg;
+       int size = sizeof(*tfm) + alg->cra_ctxsize;
+
+       crypto_exit_ops(tfm);
+       crypto_alg_put(alg);
+       memset(tfm, 0, size);
+       kfree(tfm);
+}
+
+int crypto_register_alg(struct crypto_alg *alg)
+{
+       int ret = 0;
+       struct crypto_alg *q;
+       
+       down_write(&crypto_alg_sem);
+       
+       list_for_each_entry(q, &crypto_alg_list, cra_list) {
+               if (!(strcmp(q->cra_name, alg->cra_name))) {
+                       ret = -EEXIST;
+                       goto out;
+               }
+       }
+       
+       list_add_tail(&alg->cra_list, &crypto_alg_list);
+out:   
+       up_write(&crypto_alg_sem);
+       return ret;
+}
+
+int crypto_unregister_alg(struct crypto_alg *alg)
+{
+       int ret = -ENOENT;
+       struct crypto_alg *q;
+       
+       BUG_ON(!alg->cra_module);
+       
+       down_write(&crypto_alg_sem);
+       list_for_each_entry(q, &crypto_alg_list, cra_list) {
+               if (alg == q) {
+                       list_del(&alg->cra_list);
+                       ret = 0;
+                       goto out;
+               }
+       }
+out:   
+       up_write(&crypto_alg_sem);
+       return ret;
+}
+
+int crypto_alg_available(const char *name, u32 flags)
+{
+       int ret = 0;
+       struct crypto_alg *alg = crypto_alg_mod_lookup(name);
+       
+       if (alg) {
+               crypto_alg_put(alg);
+               ret = 1;
+       }
+       
+       return ret;
+}
+
+#ifndef BUILT_IN_CRYPTO
+static int __init init_crypto(void)
+{
+       printk(KERN_INFO "Initializing Cryptographic API\n");
+       crypto_init_proc();
+       return 0;
+}
+
+__initcall(init_crypto);
+
+
+/*
+EXPORT_SYMBOL_GPL(crypto_register_alg);
+EXPORT_SYMBOL_GPL(crypto_unregister_alg);
+EXPORT_SYMBOL_GPL(crypto_alloc_tfm);
+EXPORT_SYMBOL_GPL(crypto_free_tfm);
+EXPORT_SYMBOL_GPL(crypto_alg_available);
+*/
+EXPORT_SYMBOL_RSL(crypto_register_alg);
+EXPORT_SYMBOL_RSL(crypto_unregister_alg);
+EXPORT_SYMBOL_RSL(crypto_alloc_tfm);
+EXPORT_SYMBOL_RSL(crypto_free_tfm);
+EXPORT_SYMBOL_RSL(crypto_alg_available);
+#endif
diff --git a/ubuntu/rtl8192se/rtllib/arc4.c b/ubuntu/rtl8192se/rtllib/arc4.c
new file mode 100644 (file)
index 0000000..493c49f
--- /dev/null
@@ -0,0 +1,105 @@
+/* 
+ * Cryptographic API
+ *
+ * ARC4 Cipher Algorithm
+ *
+ * Jon Oberheide <jon@oberheide.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ */
+#include <linux/module.h>
+#include <linux/init.h>
+#include "rtl_crypto.h"
+
+#define ARC4_MIN_KEY_SIZE      1
+#define ARC4_MAX_KEY_SIZE      256
+#define ARC4_BLOCK_SIZE                1
+
+struct arc4_ctx {
+       u8 S[256];
+       u8 x, y;
+};
+
+static int arc4_set_key(void *ctx_arg, const u8 *in_key, unsigned int key_len, u32 *flags)
+{
+       struct arc4_ctx *ctx = ctx_arg;
+       int i, j = 0, k = 0;
+
+       ctx->x = 1;
+       ctx->y = 0;
+
+       for(i = 0; i < 256; i++)
+               ctx->S[i] = i;
+
+       for(i = 0; i < 256; i++)
+       {
+               u8 a = ctx->S[i];
+               j = (j + in_key[k] + a) & 0xff;
+               ctx->S[i] = ctx->S[j];
+               ctx->S[j] = a;
+               if((unsigned int)++k >= key_len)
+                       k = 0;
+       }
+
+       return 0;
+}
+
+static void arc4_crypt(void *ctx_arg, u8 *out, const u8 *in)
+{
+       struct arc4_ctx *ctx = ctx_arg;
+
+       u8 *const S = ctx->S;
+       u8 x = ctx->x;
+       u8 y = ctx->y;
+       u8 a, b;
+
+       a = S[x];
+       y = (y + a) & 0xff;
+       b = S[y];
+       S[x] = b;
+       S[y] = a;
+       x = (x + 1) & 0xff;
+       *out++ = *in ^ S[(a + b) & 0xff];
+
+       ctx->x = x;
+       ctx->y = y;
+}
+
+static struct crypto_alg arc4_alg = {
+       .cra_name               =       "arc4",
+       .cra_flags              =       CRYPTO_ALG_TYPE_CIPHER,
+       .cra_blocksize          =       ARC4_BLOCK_SIZE,
+       .cra_ctxsize            =       sizeof(struct arc4_ctx),
+       .cra_module             =       THIS_MODULE,
+       .cra_list               =       LIST_HEAD_INIT(arc4_alg.cra_list),
+       .cra_u                  =       { .cipher = {
+       .cia_min_keysize        =       ARC4_MIN_KEY_SIZE,
+       .cia_max_keysize        =       ARC4_MAX_KEY_SIZE,
+       .cia_setkey             =       arc4_set_key,
+       .cia_encrypt            =       arc4_crypt,
+       .cia_decrypt            =       arc4_crypt } }
+};
+
+int __init arc4_init(void)
+{
+       return crypto_register_alg(&arc4_alg);
+}
+
+
+void __exit arc4_exit(void)
+{
+       crypto_unregister_alg(&arc4_alg);
+}
+
+#ifndef BUILT_IN_CRYPTO
+module_init(arc4_init);
+module_exit(arc4_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_DESCRIPTION("ARC4 Cipher Algorithm");
+MODULE_AUTHOR("Jon Oberheide <jon@oberheide.org>");
+#endif
diff --git a/ubuntu/rtl8192se/rtllib/autoload.c b/ubuntu/rtl8192se/rtllib/autoload.c
new file mode 100644 (file)
index 0000000..f583cd1
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Cryptographic API.
+ *
+ * Algorithm autoloader.
+ *
+ * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option) 
+ * any later version.
+ *
+ */
+#include "kmap_types.h"
+
+#include <linux/kernel.h>
+#include "rtl_crypto.h"
+#include <linux/string.h>
+#include <linux/kmod.h>
+#include "internal.h"
+
+#ifdef CONFIG_KMOD
+/*
+ * A far more intelligent version of this is planned.  For now, just
+ * try an exact match on the name of the algorithm.
+ */
+void crypto_alg_autoload(const char *name)
+{
+       request_module(name);
+}
+
+struct crypto_alg *crypto_alg_mod_lookup(const char *name)
+{
+       struct crypto_alg *alg = crypto_alg_lookup(name);
+       if (alg == NULL) {
+               crypto_alg_autoload(name);
+               alg = crypto_alg_lookup(name);
+       }
+       return alg;
+}
+#endif
diff --git a/ubuntu/rtl8192se/rtllib/cipher.c b/ubuntu/rtl8192se/rtllib/cipher.c
new file mode 100644 (file)
index 0000000..c8aae3e
--- /dev/null
@@ -0,0 +1,298 @@
+/*
+ * Cryptographic API.
+ *
+ * Cipher operations.
+ *
+ * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option) 
+ * any later version.
+ *
+ */
+#include <linux/kernel.h>
+#include "rtl_crypto.h"
+#include <linux/errno.h>
+#include <linux/mm.h>
+#include <linux/slab.h>
+#include <asm/scatterlist.h>
+#include "internal.h"
+#include "scatterwalk.h"
+
+typedef void (cryptfn_t)(void *, u8 *, const u8 *);
+typedef void (procfn_t)(struct crypto_tfm *, u8 *,
+                        u8*, cryptfn_t, int enc, void *, int);
+
+static inline void xor_64(u8 *a, const u8 *b)
+{
+       ((u32 *)a)[0] ^= ((u32 *)b)[0];
+       ((u32 *)a)[1] ^= ((u32 *)b)[1];
+}
+
+static inline void xor_128(u8 *a, const u8 *b)
+{
+       ((u32 *)a)[0] ^= ((u32 *)b)[0];
+       ((u32 *)a)[1] ^= ((u32 *)b)[1];
+       ((u32 *)a)[2] ^= ((u32 *)b)[2];
+       ((u32 *)a)[3] ^= ((u32 *)b)[3];
+}
+
+
+/* 
+ * Generic encrypt/decrypt wrapper for ciphers, handles operations across
+ * multiple page boundaries by using temporary blocks.  In user context,
+ * the kernel is given a chance to schedule us once per block.
+ */
+static int crypt(struct crypto_tfm *tfm,
+                struct scatterlist *dst,
+                struct scatterlist *src,
+                 unsigned int nbytes, cryptfn_t crfn,
+                 procfn_t prfn, int enc, void *info)
+{
+       struct scatter_walk walk_in, walk_out;
+       const unsigned int bsize = crypto_tfm_alg_blocksize(tfm);
+       u8 tmp_src[bsize];
+       u8 tmp_dst[bsize];
+
+       if (!nbytes)
+               return 0;
+
+       if (nbytes % bsize) {
+               tfm->crt_flags |= CRYPTO_TFM_RES_BAD_BLOCK_LEN;
+               return -EINVAL;
+       }
+
+       scatterwalk_start(&walk_in, src);
+       scatterwalk_start(&walk_out, dst);
+
+       for(;;) {
+               u8 *src_p, *dst_p;
+               int in_place;
+
+               scatterwalk_map(&walk_in, 0);
+               scatterwalk_map(&walk_out, 1);
+               src_p = scatterwalk_whichbuf(&walk_in, bsize, tmp_src);
+               dst_p = scatterwalk_whichbuf(&walk_out, bsize, tmp_dst);
+               in_place = scatterwalk_samebuf(&walk_in, &walk_out,
+                                              src_p, dst_p);
+
+               nbytes -= bsize;
+
+               scatterwalk_copychunks(src_p, &walk_in, bsize, 0);
+
+               prfn(tfm, dst_p, src_p, crfn, enc, info, in_place);
+
+               scatterwalk_done(&walk_in, 0, nbytes);
+
+               scatterwalk_copychunks(dst_p, &walk_out, bsize, 1);
+               scatterwalk_done(&walk_out, 1, nbytes);
+
+               if (!nbytes)
+                       return 0;
+
+               crypto_yield(tfm);
+       }
+}
+
+static void cbc_process(struct crypto_tfm *tfm, u8 *dst, u8 *src,
+                       cryptfn_t fn, int enc, void *info, int in_place)
+{
+       u8 *iv = info;
+       
+       /* Null encryption */
+       if (!iv)
+               return;
+               
+       if (enc) {
+               tfm->crt_u.cipher.cit_xor_block(iv, src);
+               fn(crypto_tfm_ctx(tfm), dst, iv);
+               memcpy(iv, dst, crypto_tfm_alg_blocksize(tfm));
+       } else {
+               u8 stack[in_place ? crypto_tfm_alg_blocksize(tfm) : 0];
+               u8 *buf = in_place ? stack : dst;
+
+               fn(crypto_tfm_ctx(tfm), buf, src);
+               tfm->crt_u.cipher.cit_xor_block(buf, iv);
+               memcpy(iv, src, crypto_tfm_alg_blocksize(tfm));
+               if (buf != dst)
+                       memcpy(dst, buf, crypto_tfm_alg_blocksize(tfm));
+       }
+}
+
+static void ecb_process(struct crypto_tfm *tfm, u8 *dst, u8 *src,
+                       cryptfn_t fn, int enc, void *info, int in_place)
+{
+       fn(crypto_tfm_ctx(tfm), dst, src);
+}
+
+static int setkey(struct crypto_tfm *tfm, const u8 *key, unsigned int keylen)
+{
+       struct cipher_alg *cia = &tfm->__crt_alg->cra_cipher;
+       
+       if (keylen < cia->cia_min_keysize || keylen > cia->cia_max_keysize) {
+               tfm->crt_flags |= CRYPTO_TFM_RES_BAD_KEY_LEN;
+               return -EINVAL;
+       } else
+               return cia->cia_setkey(crypto_tfm_ctx(tfm), key, keylen,
+                                      &tfm->crt_flags);
+}
+
+static int ecb_encrypt(struct crypto_tfm *tfm,
+                      struct scatterlist *dst,
+                       struct scatterlist *src, unsigned int nbytes)
+{
+       return crypt(tfm, dst, src, nbytes,
+                    tfm->__crt_alg->cra_cipher.cia_encrypt,
+                    ecb_process, 1, NULL);
+}
+
+static int ecb_decrypt(struct crypto_tfm *tfm,
+                       struct scatterlist *dst,
+                       struct scatterlist *src,
+                      unsigned int nbytes)
+{
+       return crypt(tfm, dst, src, nbytes,
+                    tfm->__crt_alg->cra_cipher.cia_decrypt,
+                    ecb_process, 1, NULL);
+}
+
+static int cbc_encrypt(struct crypto_tfm *tfm,
+                       struct scatterlist *dst,
+                       struct scatterlist *src,
+                      unsigned int nbytes)
+{
+       return crypt(tfm, dst, src, nbytes,
+                    tfm->__crt_alg->cra_cipher.cia_encrypt,
+                    cbc_process, 1, tfm->crt_cipher.cit_iv);
+}
+
+static int cbc_encrypt_iv(struct crypto_tfm *tfm,
+                          struct scatterlist *dst,
+                          struct scatterlist *src,
+                          unsigned int nbytes, u8 *iv)
+{
+       return crypt(tfm, dst, src, nbytes,
+                    tfm->__crt_alg->cra_cipher.cia_encrypt,
+                    cbc_process, 1, iv);
+}
+
+static int cbc_decrypt(struct crypto_tfm *tfm,
+                       struct scatterlist *dst,
+                       struct scatterlist *src,
+                      unsigned int nbytes)
+{
+       return crypt(tfm, dst, src, nbytes,
+                    tfm->__crt_alg->cra_cipher.cia_decrypt,
+                    cbc_process, 0, tfm->crt_cipher.cit_iv);
+}
+
+static int cbc_decrypt_iv(struct crypto_tfm *tfm,
+                          struct scatterlist *dst,
+                          struct scatterlist *src,
+                          unsigned int nbytes, u8 *iv)
+{
+       return crypt(tfm, dst, src, nbytes,
+                    tfm->__crt_alg->cra_cipher.cia_decrypt,
+                    cbc_process, 0, iv);
+}
+
+static int nocrypt(struct crypto_tfm *tfm,
+                   struct scatterlist *dst,
+                   struct scatterlist *src,
+                  unsigned int nbytes)
+{
+       return -ENOSYS;
+}
+
+static int nocrypt_iv(struct crypto_tfm *tfm,
+                      struct scatterlist *dst,
+                      struct scatterlist *src,
+                      unsigned int nbytes, u8 *iv)
+{
+       return -ENOSYS;
+}
+
+int crypto_init_cipher_flags(struct crypto_tfm *tfm, u32 flags)
+{
+       u32 mode = flags & CRYPTO_TFM_MODE_MASK;
+       
+       tfm->crt_cipher.cit_mode = mode ? mode : CRYPTO_TFM_MODE_ECB;
+       if (flags & CRYPTO_TFM_REQ_WEAK_KEY)
+               tfm->crt_flags = CRYPTO_TFM_REQ_WEAK_KEY;
+       
+       return 0;
+}
+
+int crypto_init_cipher_ops(struct crypto_tfm *tfm)
+{
+       int ret = 0;
+       struct cipher_tfm *ops = &tfm->crt_cipher;
+
+       ops->cit_setkey = setkey;
+
+       switch (tfm->crt_cipher.cit_mode) {
+       case CRYPTO_TFM_MODE_ECB:
+               ops->cit_encrypt = ecb_encrypt;
+               ops->cit_decrypt = ecb_decrypt;
+               break;
+               
+       case CRYPTO_TFM_MODE_CBC:
+               ops->cit_encrypt = cbc_encrypt;
+               ops->cit_decrypt = cbc_decrypt;
+               ops->cit_encrypt_iv = cbc_encrypt_iv;
+               ops->cit_decrypt_iv = cbc_decrypt_iv;
+               break;
+               
+       case CRYPTO_TFM_MODE_CFB:
+               ops->cit_encrypt = nocrypt;
+               ops->cit_decrypt = nocrypt;
+               ops->cit_encrypt_iv = nocrypt_iv;
+               ops->cit_decrypt_iv = nocrypt_iv;
+               break;
+       
+       case CRYPTO_TFM_MODE_CTR:
+               ops->cit_encrypt = nocrypt;
+               ops->cit_decrypt = nocrypt;
+               ops->cit_encrypt_iv = nocrypt_iv;
+               ops->cit_decrypt_iv = nocrypt_iv;
+               break;
+
+       default:
+               BUG();
+       }
+       
+       if (ops->cit_mode == CRYPTO_TFM_MODE_CBC) {
+               
+               switch (crypto_tfm_alg_blocksize(tfm)) {
+               case 8:
+                       ops->cit_xor_block = xor_64;
+                       break;
+                       
+               case 16:
+                       ops->cit_xor_block = xor_128;
+                       break;
+                       
+               default:
+                       printk(KERN_WARNING "%s: block size %u not supported\n",
+                              crypto_tfm_alg_name(tfm),
+                              crypto_tfm_alg_blocksize(tfm));
+                       ret = -EINVAL;
+                       goto out;
+               }
+               
+               ops->cit_ivsize = crypto_tfm_alg_blocksize(tfm);
+               ops->cit_iv = kmalloc(ops->cit_ivsize, GFP_KERNEL);
+               if (ops->cit_iv == NULL)
+                       ret = -ENOMEM;
+       }
+
+out:   
+       return ret;
+}
+
+void crypto_exit_cipher_ops(struct crypto_tfm *tfm)
+{
+       if (tfm->crt_cipher.cit_iv)
+               kfree(tfm->crt_cipher.cit_iv);
+}
diff --git a/ubuntu/rtl8192se/rtllib/compress.c b/ubuntu/rtl8192se/rtllib/compress.c
new file mode 100644 (file)
index 0000000..844adea
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Cryptographic API.
+ *
+ * Compression operations.
+ *
+ * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option) 
+ * any later version.
+ *
+ */
+#include <linux/types.h>
+#include "rtl_crypto.h"
+#include <linux/errno.h>
+#include <asm/scatterlist.h>
+#include <linux/string.h>
+#include "internal.h"
+
+static int crypto_compress(struct crypto_tfm *tfm,
+                            const u8 *src, unsigned int slen,
+                            u8 *dst, unsigned int *dlen)
+{
+       return tfm->__crt_alg->cra_compress.coa_compress(crypto_tfm_ctx(tfm),
+                                                        src, slen, dst,
+                                                        dlen);
+}
+
+static int crypto_decompress(struct crypto_tfm *tfm,
+                             const u8 *src, unsigned int slen,
+                             u8 *dst, unsigned int *dlen)
+{
+       return tfm->__crt_alg->cra_compress.coa_decompress(crypto_tfm_ctx(tfm),
+                                                          src, slen, dst,
+                                                          dlen);
+}
+
+int crypto_init_compress_flags(struct crypto_tfm *tfm, u32 flags)
+{
+       return flags ? -EINVAL : 0;
+}
+
+int crypto_init_compress_ops(struct crypto_tfm *tfm)
+{
+       int ret = 0;
+       struct compress_tfm *ops = &tfm->crt_compress;
+       
+       ret = tfm->__crt_alg->cra_compress.coa_init(crypto_tfm_ctx(tfm));
+       if (ret)
+               goto out;
+
+       ops->cot_compress = crypto_compress;
+       ops->cot_decompress = crypto_decompress;
+       
+out:
+       return ret;
+}
+
+void crypto_exit_compress_ops(struct crypto_tfm *tfm)
+{
+       tfm->__crt_alg->cra_compress.coa_exit(crypto_tfm_ctx(tfm));
+}
diff --git a/ubuntu/rtl8192se/rtllib/crypto_compat.h b/ubuntu/rtl8192se/rtllib/crypto_compat.h
new file mode 100644 (file)
index 0000000..2f09d0f
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * Header file to maintain compatibility among different kernel versions.
+ *
+ * Copyright (c) 2004-2006  <lawrence_wang@realsil.com.cn>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation. See README and COPYING for
+ * more details.
+ */
+
+#include <linux/crypto.h>
+
+static inline int crypto_cipher_encrypt(struct crypto_tfm *tfm,
+                                        struct scatterlist *dst,
+                                        struct scatterlist *src,
+                                        unsigned int nbytes)
+{
+       BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER);
+       return tfm->crt_cipher.cit_encrypt(tfm, dst, src, nbytes);
+}         
+
+
+static inline int crypto_cipher_decrypt(struct crypto_tfm *tfm,
+                                        struct scatterlist *dst,
+                                        struct scatterlist *src,
+                                        unsigned int nbytes)
+{
+       BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER);
+       return tfm->crt_cipher.cit_decrypt(tfm, dst, src, nbytes);
+}
+
+#if 0 
+/*
+ *     crypto_free_tfm - Free crypto transform
+ *     @tfm: Transform to free
+ *
+ *     crypto_free_tfm() frees up the transform and any associated resources,
+ *     then drops the refcount on the associated algorithm.
+ */
+void crypto_free_tfm(struct crypto_tfm *tfm)
+{
+       struct crypto_alg *alg;
+       int size;
+
+       if (unlikely(!tfm))
+               return;
+
+       alg = tfm->__crt_alg;
+       size = sizeof(*tfm) + alg->cra_ctxsize;
+
+       if (alg->cra_exit)
+               alg->cra_exit(tfm);
+       crypto_exit_ops(tfm);
+       crypto_mod_put(alg);
+       memset(tfm, 0, size);
+       kfree(tfm);
+}
+
+#endif
+#if 1
+ struct crypto_tfm *crypto_alloc_tfm(const char *name, u32 flags)
+{
+       struct crypto_tfm *tfm = NULL;
+       int err;
+       printk("call crypto_alloc_tfm!!!\n");
+       do {
+               struct crypto_alg *alg;
+
+               alg = crypto_alg_mod_lookup(name, 0, CRYPTO_ALG_ASYNC);
+               err = PTR_ERR(alg);
+               if (IS_ERR(alg))
+                       continue;
+
+               tfm = __crypto_alloc_tfm(alg, flags);
+               err = 0;
+               if (IS_ERR(tfm)) {
+                       crypto_mod_put(alg);
+                       err = PTR_ERR(tfm);
+                       tfm = NULL;
+               }
+       } while (err == -EAGAIN && !signal_pending(current));
+
+       return tfm;
+}
+#endif
+
+
diff --git a/ubuntu/rtl8192se/rtllib/digest.c b/ubuntu/rtl8192se/rtllib/digest.c
new file mode 100644 (file)
index 0000000..603398f
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+ * Cryptographic API.
+ *
+ * Digest operations.
+ *
+ * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option) 
+ * any later version.
+ *
+ */
+#include <linux/version.h>
+#include "rtl_crypto.h"
+#include <linux/mm.h>
+#include <linux/errno.h>
+#include <linux/highmem.h>
+#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
+#include <asm/scatterlist.h>
+#else
+#include <linux/scatterlist.h>
+#endif
+#include "internal.h"
+
+static void init(struct crypto_tfm *tfm)
+{
+       tfm->__crt_alg->cra_digest.dia_init(crypto_tfm_ctx(tfm));
+}
+
+static void update(struct crypto_tfm *tfm,
+                   struct scatterlist *sg, unsigned int nsg)
+{
+       unsigned int i;
+
+       for (i = 0; i < nsg; i++) {
+
+       #if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
+               struct page *pg = sg[i].page;
+       #else
+               struct page *pg = sg_page(&sg[i]);
+       #endif
+               unsigned int offset = sg[i].offset;
+               unsigned int l = sg[i].length;
+
+               do {
+                       unsigned int bytes_from_page = min(l, ((unsigned int)
+                                                          (PAGE_SIZE)) - 
+                                                          offset);
+                       char *p = crypto_kmap(pg, 0) + offset;
+
+                       tfm->__crt_alg->cra_digest.dia_update
+                                       (crypto_tfm_ctx(tfm), p,
+                                        bytes_from_page);
+                       crypto_kunmap(p, 0);
+                       crypto_yield(tfm);
+                       offset = 0;
+                       pg++;
+                       l -= bytes_from_page;
+               } while (l > 0);
+       }
+}
+
+static void final(struct crypto_tfm *tfm, u8 *out)
+{
+       tfm->__crt_alg->cra_digest.dia_final(crypto_tfm_ctx(tfm), out);
+}
+
+static int setkey(struct crypto_tfm *tfm, const u8 *key, unsigned int keylen)
+{
+       u32 flags;
+       if (tfm->__crt_alg->cra_digest.dia_setkey == NULL)
+               return -ENOSYS;
+       return tfm->__crt_alg->cra_digest.dia_setkey(crypto_tfm_ctx(tfm),
+                                                    key, keylen, &flags);
+}
+
+static void digest(struct crypto_tfm *tfm,
+                   struct scatterlist *sg, unsigned int nsg, u8 *out)
+{
+       unsigned int i;
+
+       tfm->crt_digest.dit_init(tfm);
+               
+       for (i = 0; i < nsg; i++) {
+       #if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
+               char *p = crypto_kmap(sg[i].page, 0) + sg[i].offset;
+       #else
+               char *p = crypto_kmap(sg_page(&sg[i]), 0) + sg[i].offset;
+       #endif
+               tfm->__crt_alg->cra_digest.dia_update(crypto_tfm_ctx(tfm),
+                                                     p, sg[i].length);
+               crypto_kunmap(p, 0);
+               crypto_yield(tfm);
+       }
+       crypto_digest_final(tfm, out);
+}
+
+int crypto_init_digest_flags(struct crypto_tfm *tfm, u32 flags)
+{
+       return flags ? -EINVAL : 0;
+}
+
+int crypto_init_digest_ops(struct crypto_tfm *tfm)
+{
+       struct digest_tfm *ops = &tfm->crt_digest;
+       
+       ops->dit_init   = init;
+       ops->dit_update = update;
+       ops->dit_final  = final;
+       ops->dit_digest = digest;
+       ops->dit_setkey = setkey;
+       
+       return crypto_alloc_hmac_block(tfm);
+}
+
+void crypto_exit_digest_ops(struct crypto_tfm *tfm)
+{
+       crypto_free_hmac_block(tfm);
+}
diff --git a/ubuntu/rtl8192se/rtllib/dot11d.c b/ubuntu/rtl8192se/rtllib/dot11d.c
new file mode 100644 (file)
index 0000000..a3d6f1a
--- /dev/null
@@ -0,0 +1,267 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+#ifdef ENABLE_DOT11D
+#include "dot11d.h"
+
+typedef struct _CHANNEL_LIST
+{
+       u8      Channel[32];
+       u8      Len;
+}CHANNEL_LIST, *PCHANNEL_LIST;
+
+static CHANNEL_LIST ChannelPlan[] = {
+       {{1,2,3,4,5,6,7,8,9,10,11,36,40,44,48,52,56,60,64,149,153,157,161,165},24},
+       {{1,2,3,4,5,6,7,8,9,10,11},11},    
+       {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64},21},
+       {{1,2,3,4,5,6,7,8,9,10,11,12,13},13},   
+       {{1,2,3,4,5,6,7,8,9,10,11,12,13},13},   
+       {{1,2,3,4,5,6,7,8,9,10,11,12,13,14,36,40,44,48,52,56,60,64},22}, 
+       {{1,2,3,4,5,6,7,8,9,10,11,12,13,14,36,40,44,48,52,56,60,64},22}, 
+       {{1,2,3,4,5,6,7,8,9,10,11,12,13},13},   
+       {{1,2,3,4,5,6,7,8,9,10,11,12,13,14,36,40,44,48,52,56,60,64},22}, 
+       {{1,2,3,4,5,6,7,8,9,10,11,12,13,14,36,40,44,48,52,56,60,64},22}, 
+       {{1,2,3,4,5,6,7,8,9,10,11,12,13,14},14}, 
+       {{1,2,3,4,5,6,7,8,9,10,11,12,13},13},    
+       {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64},21}    
+};
+
+void Dot11d_Init(struct rtllib_device *ieee)
+{
+       PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(ieee);
+#if defined CONFIG_CRDA && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30))
+       ieee->bGlobalDomain = true;
+       pDot11dInfo->bEnabled = true;
+#else
+       pDot11dInfo->bEnabled = false;
+#endif 
+
+       pDot11dInfo->State = DOT11D_STATE_NONE;
+       pDot11dInfo->CountryIeLen = 0;
+       memset(pDot11dInfo->channel_map, 0, MAX_CHANNEL_NUMBER+1);  
+       memset(pDot11dInfo->MaxTxPwrDbmList, 0xFF, MAX_CHANNEL_NUMBER+1);
+       RESET_CIE_WATCHDOG(ieee);
+
+}
+
+void Dot11d_Channelmap(u8 channel_plan, struct rtllib_device* ieee)
+{
+       int i, max_chan = 14, min_chan = 1;
+
+       ieee->bGlobalDomain = false;
+
+       if (ChannelPlan[channel_plan].Len != 0) {
+               memset(GET_DOT11D_INFO(ieee)->channel_map, 0, sizeof(GET_DOT11D_INFO(ieee)->channel_map));
+               for (i = 0; i < ChannelPlan[channel_plan].Len; i++) {
+                       if (ChannelPlan[channel_plan].Channel[i] < min_chan ||
+                                       ChannelPlan[channel_plan].Channel[i] > max_chan)
+                               break;
+                       GET_DOT11D_INFO(ieee)->channel_map[ChannelPlan[channel_plan].Channel[i]] = 1;
+               }
+       }
+
+       switch (channel_plan) {
+               case COUNTRY_CODE_GLOBAL_DOMAIN:
+                       ieee->bGlobalDomain = true;
+                       for (i = 12; i <= 14; i++) {
+                               GET_DOT11D_INFO(ieee)->channel_map[i] = 2;
+                       }
+                       ieee->IbssStartChnl= 10;
+                       ieee->ibss_maxjoin_chal = 11;
+                       break;
+
+               case COUNTRY_CODE_WORLD_WIDE_13:
+                       for (i = 12; i <= 13; i++) {
+                               GET_DOT11D_INFO(ieee)->channel_map[i] = 2;
+                       }
+                       ieee->IbssStartChnl = 10;
+                       ieee->ibss_maxjoin_chal = 11;
+                       break;
+
+               default:
+                       ieee->IbssStartChnl = 1;
+                       ieee->ibss_maxjoin_chal = 14;
+                       break;
+       }
+}
+                                               
+
+void Dot11d_Reset(struct rtllib_device *ieee)
+{
+       PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(ieee);
+#if 0
+       if(!pDot11dInfo->bEnabled)
+               return;
+#endif
+
+#ifndef        CONFIG_CRDA
+       u32 i;
+       memset(pDot11dInfo->channel_map, 0, MAX_CHANNEL_NUMBER+1);
+       memset(pDot11dInfo->MaxTxPwrDbmList, 0xFF, MAX_CHANNEL_NUMBER+1);
+       for (i=1; i<=11; i++) {
+               (pDot11dInfo->channel_map)[i] = 1;
+       }
+       for (i=12; i<=14; i++) {
+               (pDot11dInfo->channel_map)[i] = 2;
+       }
+#endif
+       pDot11dInfo->State = DOT11D_STATE_NONE;
+       pDot11dInfo->CountryIeLen = 0;
+       RESET_CIE_WATCHDOG(ieee);
+
+}
+
+void Dot11d_UpdateCountryIe(struct rtllib_device *dev, u8 *pTaddr,
+                           u16 CoutryIeLen, u8* pCoutryIe)
+{
+       PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(dev);
+#if defined CONFIG_CRDA && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30)) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32)) 
+       //struct wireless_dev *wdev = &dev->wdev;
+       
+       //if((rtllib_act_scanning(dev,false) == true) && (dev->FirstIe_InScan == 1)){
+       //                      dev->FirstIe_InScan = false;
+       //} 
+       //regulatory_hint_11d(wdev->wiphy, pCoutryIe, CoutryIeLen);
+#else  
+       u8 i, j, NumTriples, MaxChnlNum;
+       PCHNL_TXPOWER_TRIPLE pTriple;
+
+       memset(pDot11dInfo->channel_map, 0, MAX_CHANNEL_NUMBER+1);
+       memset(pDot11dInfo->MaxTxPwrDbmList, 0xFF, MAX_CHANNEL_NUMBER+1);
+       MaxChnlNum = 0;
+       NumTriples = (CoutryIeLen - 3) / 3; 
+       pTriple = (PCHNL_TXPOWER_TRIPLE)(pCoutryIe + 3);
+       for(i = 0; i < NumTriples; i++)
+       {
+               if(MaxChnlNum >= pTriple->FirstChnl)
+               { 
+                       printk("Dot11d_UpdateCountryIe(): Invalid country IE, skip it........1\n");
+                       return; 
+               }
+               if(MAX_CHANNEL_NUMBER < (pTriple->FirstChnl + pTriple->NumChnls))
+               { 
+                       printk("Dot11d_UpdateCountryIe(): Invalid country IE, skip it........2\n");
+                       return; 
+               }
+
+               for(j = 0 ; j < pTriple->NumChnls; j++)
+               {
+                       pDot11dInfo->channel_map[pTriple->FirstChnl + j] = 1;
+                       pDot11dInfo->MaxTxPwrDbmList[pTriple->FirstChnl + j] = pTriple->MaxTxPowerInDbm;
+                       MaxChnlNum = pTriple->FirstChnl + j;
+               }       
+
+               pTriple = (PCHNL_TXPOWER_TRIPLE)((u8*)pTriple + 3);
+       }
+#if 0
+       printk("Channel List:");
+       for(i=1; i<= MAX_CHANNEL_NUMBER; i++)
+               if(pDot11dInfo->channel_map[i] > 0)
+                       printk(" %d", i);
+       printk("\n");
+#endif
+#endif 
+
+       UPDATE_CIE_SRC(dev, pTaddr);
+
+       pDot11dInfo->CountryIeLen = CoutryIeLen;
+       memcpy(pDot11dInfo->CountryIeBuf, pCoutryIe,CoutryIeLen);
+       pDot11dInfo->State = DOT11D_STATE_LEARNED;
+
+#ifdef CONFIG_CRDA 
+       queue_delayed_work_rsl(dev->wq, &dev->softmac_hint11d_wq, 0);
+#endif 
+
+}
+
+u8 DOT11D_GetMaxTxPwrInDbm( struct rtllib_device *dev, u8 Channel)
+{
+       PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(dev);
+       u8 MaxTxPwrInDbm = 255;
+
+       if(MAX_CHANNEL_NUMBER < Channel)
+       { 
+               printk("DOT11D_GetMaxTxPwrInDbm(): Invalid Channel\n");
+               return MaxTxPwrInDbm; 
+       }
+       if(pDot11dInfo->channel_map[Channel])
+       {
+               MaxTxPwrInDbm = pDot11dInfo->MaxTxPwrDbmList[Channel];  
+       }
+
+       return MaxTxPwrInDbm;
+}
+
+void DOT11D_ScanComplete( struct rtllib_device * dev)
+{
+       PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(dev);
+
+       switch(pDot11dInfo->State)
+       {
+       case DOT11D_STATE_LEARNED:
+               pDot11dInfo->State = DOT11D_STATE_DONE;
+               break;
+
+       case DOT11D_STATE_DONE:
+               { 
+                       Dot11d_Reset(dev); 
+               }
+               break;
+       case DOT11D_STATE_NONE:
+               break;
+       }
+}
+
+int ToLegalChannel( struct rtllib_device * dev, u8 channel)
+{
+       PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(dev);
+       u8 default_chn = 0;
+       u32 i = 0;
+
+       for (i=1; i<= MAX_CHANNEL_NUMBER; i++)
+       {
+               if(pDot11dInfo->channel_map[i] > 0)
+               {
+                       default_chn = i;
+                       break;
+               }
+       }
+
+       if(MAX_CHANNEL_NUMBER < channel)
+       { 
+               printk("%s(): Invalid Channel\n", __FUNCTION__);
+               return default_chn; 
+       }
+       
+       if(pDot11dInfo->channel_map[channel] > 0)
+               return channel;
+       
+       return default_chn;
+}
+
+#ifndef BUILT_IN_RTLLIB
+EXPORT_SYMBOL_RSL(Dot11d_Init);
+EXPORT_SYMBOL_RSL(Dot11d_Channelmap);
+EXPORT_SYMBOL_RSL(Dot11d_Reset);
+EXPORT_SYMBOL_RSL(Dot11d_UpdateCountryIe);
+EXPORT_SYMBOL_RSL(DOT11D_GetMaxTxPwrInDbm);
+EXPORT_SYMBOL_RSL(DOT11D_ScanComplete);
+EXPORT_SYMBOL_RSL(ToLegalChannel);
+#endif
+
+#endif
diff --git a/ubuntu/rtl8192se/rtllib/dot11d.h b/ubuntu/rtl8192se/rtllib/dot11d.h
new file mode 100644 (file)
index 0000000..6bf25c0
--- /dev/null
@@ -0,0 +1,83 @@
+/******************************************************************************\r
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ * The full GNU General Public License is included in this distribution in the\r
+ * file called LICENSE.\r
+ *\r
+ * Contact Information:\r
+ * wlanfae <wlanfae@realtek.com>\r
+******************************************************************************/\r
+#ifndef __INC_DOT11D_H\r
+#define __INC_DOT11D_H\r
+\r
+#ifdef ENABLE_DOT11D\r
+#include "rtllib.h"\r
+\r
+\r
+\r
+typedef struct _CHNL_TXPOWER_TRIPLE {\r
+       u8 FirstChnl;\r
+       u8  NumChnls;\r
+       u8  MaxTxPowerInDbm;\r
+}CHNL_TXPOWER_TRIPLE, *PCHNL_TXPOWER_TRIPLE;\r
+\r
+typedef enum _DOT11D_STATE {\r
+       DOT11D_STATE_NONE = 0,\r
+       DOT11D_STATE_LEARNED,\r
+       DOT11D_STATE_DONE,\r
+}DOT11D_STATE;\r
+\r
+typedef struct _RT_DOT11D_INFO {\r
+\r
+       bool bEnabled; 
+\r
+       u16 CountryIeLen; 
+       u8  CountryIeBuf[MAX_IE_LEN];\r
+       u8  CountryIeSrcAddr[6]; 
+       u8  CountryIeWatchdog; \r
+\r
+       u8  channel_map[MAX_CHANNEL_NUMBER+1];  
+       u8  MaxTxPwrDbmList[MAX_CHANNEL_NUMBER+1];\r
+\r
+       DOT11D_STATE State;\r
+}RT_DOT11D_INFO, *PRT_DOT11D_INFO;\r
+#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 )\r
+#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])\r
+#define GET_DOT11D_INFO(__pIeeeDev) ((PRT_DOT11D_INFO)((__pIeeeDev)->pDot11dInfo))\r
+\r
+#define IS_DOT11D_ENABLE(__pIeeeDev) GET_DOT11D_INFO(__pIeeeDev)->bEnabled\r
+#define IS_COUNTRY_IE_VALID(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->CountryIeLen > 0)\r
+\r
+#define IS_EQUAL_CIE_SRC(__pIeeeDev, __pTa) eqMacAddr(GET_DOT11D_INFO(__pIeeeDev)->CountryIeSrcAddr, __pTa) \r
+#define UPDATE_CIE_SRC(__pIeeeDev, __pTa) cpMacAddr(GET_DOT11D_INFO(__pIeeeDev)->CountryIeSrcAddr, __pTa)\r
+\r
+#define IS_COUNTRY_IE_CHANGED(__pIeeeDev, __Ie) \\r
+       (((__Ie).Length == 0 || (__Ie).Length != GET_DOT11D_INFO(__pIeeeDev)->CountryIeLen) ? \\r
+       false : \\r
+       (!memcmp(GET_DOT11D_INFO(__pIeeeDev)->CountryIeBuf, (__Ie).Octet, (__Ie).Length)))\r
+\r
+#define CIE_WATCHDOG_TH 1\r
+#define GET_CIE_WATCHDOG(__pIeeeDev) GET_DOT11D_INFO(__pIeeeDev)->CountryIeWatchdog\r
+#define RESET_CIE_WATCHDOG(__pIeeeDev) GET_CIE_WATCHDOG(__pIeeeDev) = 0 \r
+#define UPDATE_CIE_WATCHDOG(__pIeeeDev) ++GET_CIE_WATCHDOG(__pIeeeDev)\r
+\r
+#define IS_DOT11D_STATE_DONE(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->State == DOT11D_STATE_DONE)\r
+\r
+void Dot11d_Init( struct rtllib_device *dev); \r
+void Dot11d_Channelmap(u8 channel_plan, struct rtllib_device* ieee);\r
+void Dot11d_Reset(struct rtllib_device *dev);\r
+void Dot11d_UpdateCountryIe(struct rtllib_device *dev, u8 *pTaddr, u16 CoutryIeLen, u8 *pCoutryIe);\r
+u8 DOT11D_GetMaxTxPwrInDbm(struct rtllib_device *dev, u8 Channel);\r
+void DOT11D_ScanComplete(struct rtllib_device *dev);\r
+int ToLegalChannel(struct rtllib_device *dev, u8 channel);\r
+#endif 
+#endif 
diff --git a/ubuntu/rtl8192se/rtllib/internal.h b/ubuntu/rtl8192se/rtllib/internal.h
new file mode 100644 (file)
index 0000000..57d0813
--- /dev/null
@@ -0,0 +1,130 @@
+/*
+ * Cryptographic API.
+ *
+ * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option) 
+ * any later version.
+ *
+ */
+#ifndef _CRYPTO_INTERNAL_H
+#define _CRYPTO_INTERNAL_H
+
+
+#include <linux/version.h>
+#include "rtl_crypto.h"
+#include <linux/mm.h>
+#include <linux/highmem.h>
+#include <linux/init.h>
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,12))
+#include <asm/hardirq.h>
+#else
+#include <linux/hardirq.h>
+#include <linux/sched.h>
+#endif
+#include <asm/kmap_types.h>
+
+#ifdef BUILT_IN_CRYPTO
+#ifdef CONFIG_CRYPTO_HMAC
+#undef CONFIG_CRYPTO_HMAC
+#endif
+
+#ifdef CONFIG_KMOD
+#undef CONFIG_KMOD
+#endif
+#endif /* BUILT_IN_CRYPTO */
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,20))
+#define list_for_each_entry(pos, head, member)                         \
+       for (pos = list_entry((head)->next, typeof(*pos), member),      \
+                    prefetch(pos->member.next);                        \
+            &pos->member != (head);                                    \
+            pos = list_entry(pos->member.next, typeof(*pos), member),  \
+                    prefetch(pos->member.next))
+
+static inline void cond_resched(void)
+{
+       if (need_resched()) {
+               set_current_state(TASK_RUNNING);
+               schedule();
+       }
+}
+#endif
+
+extern enum km_type crypto_km_types[];
+
+static inline enum km_type crypto_kmap_type(int out)
+{
+       return crypto_km_types[(in_softirq() ? 2 : 0) + out];
+}
+
+static inline void *crypto_kmap(struct page *page, int out)
+{
+       return kmap_atomic(page, crypto_kmap_type(out));
+}
+
+static inline void crypto_kunmap(void *vaddr, int out)
+{
+       kunmap_atomic(vaddr, crypto_kmap_type(out));
+}
+
+static inline void crypto_yield(struct crypto_tfm *tfm)
+{
+       if (!in_softirq())
+               cond_resched();
+}
+
+static inline void *crypto_tfm_ctx(struct crypto_tfm *tfm)
+{
+       return (void *)&tfm[1];
+}
+
+struct crypto_alg *crypto_alg_lookup(const char *name);
+
+#ifdef CONFIG_KMOD
+void crypto_alg_autoload(const char *name);
+struct crypto_alg *crypto_alg_mod_lookup(const char *name);
+#else
+static inline struct crypto_alg *crypto_alg_mod_lookup(const char *name)
+{
+       return crypto_alg_lookup(name);
+}
+#endif
+
+#ifdef CONFIG_CRYPTO_HMAC
+int crypto_alloc_hmac_block(struct crypto_tfm *tfm);
+void crypto_free_hmac_block(struct crypto_tfm *tfm);
+#else
+static inline int crypto_alloc_hmac_block(struct crypto_tfm *tfm)
+{
+       return 0;
+}
+
+static inline void crypto_free_hmac_block(struct crypto_tfm *tfm)
+{ }
+#endif
+
+#ifdef CONFIG_PROC_FS
+void __init crypto_init_proc(void);
+#else
+static inline void crypto_init_proc(void)
+{ }
+#endif
+
+int crypto_init_digest_flags(struct crypto_tfm *tfm, u32 flags);
+int crypto_init_cipher_flags(struct crypto_tfm *tfm, u32 flags);
+int crypto_init_compress_flags(struct crypto_tfm *tfm, u32 flags);
+
+int crypto_init_digest_ops(struct crypto_tfm *tfm);
+int crypto_init_cipher_ops(struct crypto_tfm *tfm);
+int crypto_init_compress_ops(struct crypto_tfm *tfm);
+
+void crypto_exit_digest_ops(struct crypto_tfm *tfm);
+void crypto_exit_cipher_ops(struct crypto_tfm *tfm);
+void crypto_exit_compress_ops(struct crypto_tfm *tfm);
+
+#endif /* _CRYPTO_INTERNAL_H */
+
diff --git a/ubuntu/rtl8192se/rtllib/kmap_types.h b/ubuntu/rtl8192se/rtllib/kmap_types.h
new file mode 100644 (file)
index 0000000..de67bb0
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef __KMAP_TYPES_H
+
+#define __KMAP_TYPES_H
+
+
+enum km_type {
+       KM_BOUNCE_READ,
+       KM_SKB_SUNRPC_DATA,
+       KM_SKB_DATA_SOFTIRQ,
+       KM_USER0,
+       KM_USER1,
+       KM_BH_IRQ,
+       KM_SOFTIRQ0,
+       KM_SOFTIRQ1,
+       KM_TYPE_NR
+};
+
+#define _ASM_KMAP_TYPES_H
+
+#endif
diff --git a/ubuntu/rtl8192se/rtllib/license b/ubuntu/rtl8192se/rtllib/license
new file mode 100644 (file)
index 0000000..740c606
--- /dev/null
@@ -0,0 +1,339 @@
+
+"This software program is licensed subject to the GNU General Public License 
+(GPL). Version 2, June 1991, available at 
+<http:
+
+GNU General Public License 
+
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.  
+59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to 
+share and change it. By contrast, the GNU General Public License is intended
+to guarantee your freedom to share and change free software--to make sure 
+the software is free for all its users. This General Public License applies 
+to most of the Free Software Foundation's software and to any other program 
+whose authors commit to using it. (Some other Free Software Foundation 
+software is covered by the GNU Library General Public License instead.) You 
+can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our
+General Public Licenses are designed to make sure that you have the freedom 
+to distribute copies of free software (and charge for this service if you 
+wish), that you receive source code or can get it if you want it, that you 
+can change the software or use pieces of it in new free programs; and that 
+you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to 
+deny you these rights or to ask you to surrender the rights. These 
+restrictions translate to certain responsibilities for you if you distribute
+copies of the software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or 
+for a fee, you must give the recipients all the rights that you have. You 
+must make sure that they, too, receive or can get the source code. And you 
+must show them these terms so they know their rights.
+We protect your rights with two steps: (1) copyright the software, and (2) 
+offer you this license which gives you legal permission to copy, distribute 
+and/or modify the software. 
+
+Also, for each author's protection and ours, we want to make certain that 
+everyone understands that there is no warranty for this free software. If 
+the software is modified by someone else and passed on, we want its 
+recipients to know that what they have is not the original, so that any 
+problems introduced by others will not reflect on the original authors' 
+reputations. 
+
+Finally, any free program is threatened constantly by software patents. We 
+wish to avoid the danger that redistributors of a free program will 
+individually obtain patent licenses, in effect making the program 
+proprietary. To prevent this, we have made it clear that any patent must be 
+licensed for everyone's free use or not licensed at all. 
+
+The precise terms and conditions for copying, distribution and modification 
+follow. 
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License applies to any program or other work which contains a notice
+   placed by the copyright holder saying it may be distributed under the 
+   terms of this General Public License. The "Program", below, refers to any
+   such program or work, and a "work based on the Program" means either the 
+   Program or any derivative work under copyright law: that is to say, a 
+   work containing the Program or a portion of it, either verbatim or with 
+   modifications and/or translated into another language. (Hereinafter, 
+   translation is included without limitation in the term "modification".) 
+   Each licensee is addressed as "you". 
+
+   Activities other than copying, distribution and modification are not 
+   covered by this License; they are outside its scope. The act of running 
+   the Program is not restricted, and the output from the Program is covered 
+   only if its contents constitute a work based on the Program (independent 
+   of having been made by running the Program). Whether that is true depends
+   on what the Program does. 
+
+1. You may copy and distribute verbatim copies of the Program's source code 
+   as you receive it, in any medium, provided that you conspicuously and 
+   appropriately publish on each copy an appropriate copyright notice and 
+   disclaimer of warranty; keep intact all the notices that refer to this 
+   License and to the absence of any warranty; and give any other recipients 
+   of the Program a copy of this License along with the Program. 
+
+   You may charge a fee for the physical act of transferring a copy, and you 
+   may at your option offer warranty protection in exchange for a fee. 
+
+2. You may modify your copy or copies of the Program or any portion of it, 
+   thus forming a work based on the Program, and copy and distribute such 
+   modifications or work under the terms of Section 1 above, provided that 
+   you also meet all of these conditions: 
+
+   * a) You must cause the modified files to carry prominent notices stating 
+        that you changed the files and the date of any change. 
+
+   * b) You must cause any work that you distribute or publish, that in 
+        whole or in part contains or is derived from the Program or any part 
+        thereof, to be licensed as a whole at no charge to all third parties
+        under the terms of this License. 
+
+   * c) If the modified program normally reads commands interactively when 
+        run, you must cause it, when started running for such interactive 
+        use in the most ordinary way, to print or display an announcement 
+        including an appropriate copyright notice and a notice that there is
+        no warranty (or else, saying that you provide a warranty) and that 
+        users may redistribute the program under these conditions, and 
+        telling the user how to view a copy of this License. (Exception: if 
+        the Program itself is interactive but does not normally print such 
+        an announcement, your work based on the Program is not required to 
+        print an announcement.) 
+
+   These requirements apply to the modified work as a whole. If identifiable 
+   sections of that work are not derived from the Program, and can be 
+   reasonably considered independent and separate works in themselves, then 
+   this License, and its terms, do not apply to those sections when you 
+   distribute them as separate works. But when you distribute the same 
+   sections as part of a whole which is a work based on the Program, the 
+   distribution of the whole must be on the terms of this License, whose 
+   permissions for other licensees extend to the entire whole, and thus to 
+   each and every part regardless of who wrote it. 
+
+   Thus, it is not the intent of this section to claim rights or contest 
+   your rights to work written entirely by you; rather, the intent is to 
+   exercise the right to control the distribution of derivative or 
+   collective works based on the Program. 
+
+   In addition, mere aggregation of another work not based on the Program 
+   with the Program (or with a work based on the Program) on a volume of a 
+   storage or distribution medium does not bring the other work under the 
+   scope of this License. 
+
+3. You may copy and distribute the Program (or a work based on it, under 
+   Section 2) in object code or executable form under the terms of Sections 
+   1 and 2 above provided that you also do one of the following: 
+
+   * a) Accompany it with the complete corresponding machine-readable source 
+        code, which must be distributed under the terms of Sections 1 and 2 
+        above on a medium customarily used for software interchange; or, 
+
+   * b) Accompany it with a written offer, valid for at least three years, 
+        to give any third party, for a charge no more than your cost of 
+        physically performing source distribution, a complete machine-
+        readable copy of the corresponding source code, to be distributed 
+        under the terms of Sections 1 and 2 above on a medium customarily 
+        used for software interchange; or, 
+
+   * c) Accompany it with the information you received as to the offer to 
+        distribute corresponding source code. (This alternative is allowed 
+        only for noncommercial distribution and only if you received the 
+        program in object code or executable form with such an offer, in 
+        accord with Subsection b above.) 
+
+   The source code for a work means the preferred form of the work for 
+   making modifications to it. For an executable work, complete source code 
+   means all the source code for all modules it contains, plus any 
+   associated interface definition files, plus the scripts used to control 
+   compilation and installation of the executable. However, as a special 
+   exception, the source code distributed need not include anything that is 
+   normally distributed (in either source or binary form) with the major 
+   components (compiler, kernel, and so on) of the operating system on which
+   the executable runs, unless that component itself accompanies the 
+   executable. 
+
+   If distribution of executable or object code is made by offering access 
+   to copy from a designated place, then offering equivalent access to copy 
+   the source code from the same place counts as distribution of the source 
+   code, even though third parties are not compelled to copy the source 
+   along with the object code. 
+
+4. You may not copy, modify, sublicense, or distribute the Program except as
+   expressly provided under this License. Any attempt otherwise to copy, 
+   modify, sublicense or distribute the Program is void, and will 
+   automatically terminate your rights under this License. However, parties 
+   who have received copies, or rights, from you under this License will not
+   have their licenses terminated so long as such parties remain in full 
+   compliance. 
+
+5. You are not required to accept this License, since you have not signed 
+   it. However, nothing else grants you permission to modify or distribute 
+   the Program or its derivative works. These actions are prohibited by law 
+   if you do not accept this License. Therefore, by modifying or 
+   distributing the Program (or any work based on the Program), you 
+   indicate your acceptance of this License to do so, and all its terms and
+   conditions for copying, distributing or modifying the Program or works 
+   based on it. 
+
+6. Each time you redistribute the Program (or any work based on the 
+   Program), the recipient automatically receives a license from the 
+   original licensor to copy, distribute or modify the Program subject to 
+   these terms and conditions. You may not impose any further restrictions 
+   on the recipients' exercise of the rights granted herein. You are not 
+   responsible for enforcing compliance by third parties to this License. 
+
+7. If, as a consequence of a court judgment or allegation of patent 
+   infringement or for any other reason (not limited to patent issues), 
+   conditions are imposed on you (whether by court order, agreement or 
+   otherwise) that contradict the conditions of this License, they do not 
+   excuse you from the conditions of this License. If you cannot distribute 
+   so as to satisfy simultaneously your obligations under this License and 
+   any other pertinent obligations, then as a consequence you may not 
+   distribute the Program at all. For example, if a patent license would 
+   not permit royalty-free redistribution of the Program by all those who 
+   receive copies directly or indirectly through you, then the only way you 
+   could satisfy both it and this License would be to refrain entirely from 
+   distribution of the Program. 
+
+   If any portion of this section is held invalid or unenforceable under any
+   particular circumstance, the balance of the section is intended to apply
+   and the section as a whole is intended to apply in other circumstances. 
+
+   It is not the purpose of this section to induce you to infringe any 
+   patents or other property right claims or to contest validity of any 
+   such claims; this section has the sole purpose of protecting the 
+   integrity of the free software distribution system, which is implemented 
+   by public license practices. Many people have made generous contributions
+   to the wide range of software distributed through that system in 
+   reliance on consistent application of that system; it is up to the 
+   author/donor to decide if he or she is willing to distribute software 
+   through any other system and a licensee cannot impose that choice. 
+
+   This section is intended to make thoroughly clear what is believed to be 
+   a consequence of the rest of this License. 
+
+8. If the distribution and/or use of the Program is restricted in certain 
+   countries either by patents or by copyrighted interfaces, the original 
+   copyright holder who places the Program under this License may add an 
+   explicit geographical distribution limitation excluding those countries, 
+   so that distribution is permitted only in or among countries not thus 
+   excluded. In such case, this License incorporates the limitation as if 
+   written in the body of this License. 
+
+9. The Free Software Foundation may publish revised and/or new versions of 
+   the General Public License from time to time. Such new versions will be 
+   similar in spirit to the present version, but may differ in detail to 
+   address new problems or concerns. 
+
+   Each version is given a distinguishing version number. If the Program 
+   specifies a version number of this License which applies to it and "any 
+   later version", you have the option of following the terms and 
+   conditions either of that version or of any later version published by 
+   the Free Software Foundation. If the Program does not specify a version 
+   number of this License, you may choose any version ever published by the 
+   Free Software Foundation. 
+
+10. If you wish to incorporate parts of the Program into other free programs
+    whose distribution conditions are different, write to the author to ask 
+    for permission. For software which is copyrighted by the Free Software 
+    Foundation, write to the Free Software Foundation; we sometimes make 
+    exceptions for this. Our decision will be guided by the two goals of 
+    preserving the free status of all derivatives of our free software and 
+    of promoting the sharing and reuse of software generally. 
+
+   NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 
+    FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 
+    OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 
+    PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER 
+    EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE 
+    ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH 
+    YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL 
+    NECESSARY SERVICING, REPAIR OR CORRECTION. 
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 
+    WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 
+    REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR 
+    DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL 
+    DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM 
+    (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED 
+    INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF 
+    THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR 
+    OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest 
+possible use to the public, the best way to achieve this is to make it free 
+software which everyone can redistribute and change under these terms. 
+
+To do so, attach the following notices to the program. It is safest to 
+attach them to the start of each source file to most effectively convey the
+exclusion of warranty; and each file should have at least the "copyright" 
+line and a pointer to where the full notice is found. 
+
+one line to give the program's name and an idea of what it does.
+Copyright (C) yyyy  name of author
+
+This program is free software; you can redistribute it and/or modify it 
+under the terms of the GNU General Public License as published by the Free 
+Software Foundation; either version 2 of the License, or (at your option) 
+any later version.
+
+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., 59 
+Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
+Also add information on how to contact you by electronic and paper mail. 
+
+If the program is interactive, make it output a short notice like this when 
+it starts in an interactive mode: 
+
+Gnomovision version 69, Copyright (C) year name of author Gnomovision comes 
+with ABSOLUTELY NO WARRANTY; for details type 'show w'.  This is free 
+software, and you are welcome to redistribute it under certain conditions; 
+type 'show c' for details.
+
+The hypothetical commands 'show w' and 'show c' should show the appropriate 
+parts of the General Public License. Of course, the commands you use may be 
+called something other than 'show w' and 'show c'; they could even be 
+mouse-clicks or menu items--whatever suits your program. 
+
+You should also get your employer (if you work as a programmer) or your 
+school, if any, to sign a "copyright disclaimer" for the program, if 
+necessary. Here is a sample; alter the names: 
+
+Yoyodyne, Inc., hereby disclaims all copyright interest in the program 
+'Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+signature of Ty Coon, 1 April 1989
+Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into 
+proprietary programs. If your program is a subroutine library, you may 
+consider it more useful to permit linking proprietary applications with the 
+library. If this is what you want to do, use the GNU Library General Public 
+License instead of this License.
diff --git a/ubuntu/rtl8192se/rtllib/michael_mic.c b/ubuntu/rtl8192se/rtllib/michael_mic.c
new file mode 100644 (file)
index 0000000..a1b68be
--- /dev/null
@@ -0,0 +1,194 @@
+/*
+ * Cryptographic API
+ *
+ * Michael MIC (IEEE 802.11i/TKIP) keyed digest
+ *
+ * Copyright (c) 2004 Jouni Malinen <jkmaline@cc.hut.fi>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/string.h>
+#include "rtl_crypto.h"
+
+
+struct michael_mic_ctx {
+       u8 pending[4];
+       size_t pending_len;
+
+       u32 l, r;
+};
+
+
+static inline u32 rotl(u32 val, int bits)
+{
+       return (val << bits) | (val >> (32 - bits));
+}
+
+
+static inline u32 rotr(u32 val, int bits)
+{
+       return (val >> bits) | (val << (32 - bits));
+}
+
+
+static inline u32 xswap(u32 val)
+{
+       return ((val & 0x00ff00ff) << 8) | ((val & 0xff00ff00) >> 8);
+}
+
+
+#define michael_block(l, r)    \
+do {                           \
+       r ^= rotl(l, 17);       \
+       l += r;                 \
+       r ^= xswap(l);          \
+       l += r;                 \
+       r ^= rotl(l, 3);        \
+       l += r;                 \
+       r ^= rotr(l, 2);        \
+       l += r;                 \
+} while (0)
+
+
+static inline u32 get_le32(const u8 *p)
+{
+       return p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24);
+}
+
+
+static inline void put_le32(u8 *p, u32 v)
+{
+       p[0] = v;
+       p[1] = v >> 8;
+       p[2] = v >> 16;
+       p[3] = v >> 24;
+}
+
+
+static void michael_init(void *ctx)
+{
+       struct michael_mic_ctx *mctx = ctx;
+       mctx->pending_len = 0;
+}
+
+
+static void michael_update(void *ctx, const u8 *data, unsigned int len)
+{
+       struct michael_mic_ctx *mctx = ctx;
+
+       if (mctx->pending_len) {
+               int flen = 4 - mctx->pending_len;
+               if (flen > len)
+                       flen = len;
+               memcpy(&mctx->pending[mctx->pending_len], data, flen);
+               mctx->pending_len += flen;
+               data += flen;
+               len -= flen;
+
+               if (mctx->pending_len < 4)
+                       return;
+
+               mctx->l ^= get_le32(mctx->pending);
+               michael_block(mctx->l, mctx->r);
+               mctx->pending_len = 0;
+       }
+
+       while (len >= 4) {
+               mctx->l ^= get_le32(data);
+               michael_block(mctx->l, mctx->r);
+               data += 4;
+               len -= 4;
+       }
+
+       if (len > 0) {
+               mctx->pending_len = len;
+               memcpy(mctx->pending, data, len);
+       }
+}
+
+
+static void michael_final(void *ctx, u8 *out)
+{
+       struct michael_mic_ctx *mctx = ctx;
+       u8 *data = mctx->pending;
+
+       /* Last block and padding (0x5a, 4..7 x 0) */
+       switch (mctx->pending_len) {
+       case 0:
+               mctx->l ^= 0x5a;
+               break;
+       case 1:
+               mctx->l ^= data[0] | 0x5a00;
+               break;
+       case 2:
+               mctx->l ^= data[0] | (data[1] << 8) | 0x5a0000;
+               break;
+       case 3:
+               mctx->l ^= data[0] | (data[1] << 8) | (data[2] << 16) |
+                       0x5a000000;
+               break;
+       }
+       michael_block(mctx->l, mctx->r);
+       /* l ^= 0; */
+       michael_block(mctx->l, mctx->r);
+
+       put_le32(out, mctx->l);
+       put_le32(out + 4, mctx->r);
+}
+
+
+static int michael_setkey(void *ctx, const u8 *key, unsigned int keylen,
+                         u32 *flags)
+{
+       struct michael_mic_ctx *mctx = ctx;
+       if (keylen != 8) {
+               if (flags)
+                       *flags = CRYPTO_TFM_RES_BAD_KEY_LEN;
+               return -EINVAL;
+       }
+       mctx->l = get_le32(key);
+       mctx->r = get_le32(key + 4);
+       return 0;
+}
+
+
+static struct crypto_alg michael_mic_alg = {
+       .cra_name       = "michael_mic",
+       .cra_flags      = CRYPTO_ALG_TYPE_DIGEST,
+       .cra_blocksize  = 8,
+       .cra_ctxsize    = sizeof(struct michael_mic_ctx),
+       .cra_module     = THIS_MODULE,
+       .cra_list       = LIST_HEAD_INIT(michael_mic_alg.cra_list),
+       .cra_u          = { .digest = {
+       .dia_digestsize = 8,
+       .dia_init       = michael_init,
+       .dia_update     = michael_update,
+       .dia_final      = michael_final,
+       .dia_setkey     = michael_setkey } }
+};
+
+
+int __init michael_mic_init(void)
+{
+       return crypto_register_alg(&michael_mic_alg);
+}
+
+
+void __exit michael_mic_exit(void)
+{
+       crypto_unregister_alg(&michael_mic_alg);
+}
+
+#ifndef BUILT_IN_CRYPTO
+module_init(michael_mic_init);
+module_exit(michael_mic_exit);
+
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("Michael MIC");
+MODULE_AUTHOR("Jouni Malinen <jkmaline@cc.hut.fi>");
+#endif
diff --git a/ubuntu/rtl8192se/rtllib/proc.c b/ubuntu/rtl8192se/rtllib/proc.c
new file mode 100644 (file)
index 0000000..3b84cb3
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+ * Scatterlist Cryptographic API.
+ *
+ * Procfs information.
+ *
+ * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option) 
+ * any later version.
+ *
+ */
+#include <linux/init.h>
+#include "rtl_crypto.h"
+#include <linux/rwsem.h>
+#include <linux/proc_fs.h>
+#include <linux/seq_file.h>
+#include "internal.h"
+
+extern struct list_head crypto_alg_list;
+extern struct rw_semaphore crypto_alg_sem;
+
+static void *c_start(struct seq_file *m, loff_t *pos)
+{
+       struct list_head *v;
+       loff_t n = *pos;
+
+       down_read(&crypto_alg_sem);
+       list_for_each(v, &crypto_alg_list)
+               if (!n--)
+                       return list_entry(v, struct crypto_alg, cra_list);
+       return NULL;
+}
+
+static void *c_next(struct seq_file *m, void *p, loff_t *pos)
+{
+       struct list_head *v = p;
+       
+       (*pos)++;
+       v = v->next;
+       return (v == &crypto_alg_list) ?
+               NULL : list_entry(v, struct crypto_alg, cra_list);
+}
+
+static void c_stop(struct seq_file *m, void *p)
+{
+       up_read(&crypto_alg_sem);
+}
+
+static int c_show(struct seq_file *m, void *p)
+{
+       struct crypto_alg *alg = (struct crypto_alg *)p;
+       
+       seq_printf(m, "name         : %s\n", alg->cra_name);
+       seq_printf(m, "module       : %s\n",
+                  (alg->cra_module ?
+                   alg->cra_module->name :
+                   "kernel"));
+       
+       switch (alg->cra_flags & CRYPTO_ALG_TYPE_MASK) {
+       case CRYPTO_ALG_TYPE_CIPHER:
+               seq_printf(m, "type         : cipher\n");
+               seq_printf(m, "blocksize    : %u\n", alg->cra_blocksize);
+               seq_printf(m, "min keysize  : %u\n",
+                                       alg->cra_cipher.cia_min_keysize);
+               seq_printf(m, "max keysize  : %u\n",
+                                       alg->cra_cipher.cia_max_keysize);
+               break;
+               
+       case CRYPTO_ALG_TYPE_DIGEST:
+               seq_printf(m, "type         : digest\n");
+               seq_printf(m, "blocksize    : %u\n", alg->cra_blocksize);
+               seq_printf(m, "digestsize   : %u\n",
+                          alg->cra_digest.dia_digestsize);
+               break;
+       case CRYPTO_ALG_TYPE_COMPRESS:
+               seq_printf(m, "type         : compression\n");
+               break;
+       default:
+               seq_printf(m, "type         : unknown\n");
+               break;
+       }
+
+       seq_putc(m, '\n');
+       return 0;
+}
+
+static struct seq_operations crypto_seq_ops = {
+       .start          = c_start,
+       .next           = c_next,
+       .stop           = c_stop,
+       .show           = c_show
+};
+
+static int crypto_info_open(struct inode *inode, struct file *file)
+{
+       return seq_open(file, &crypto_seq_ops);
+}
+        
+static struct file_operations proc_crypto_ops = {
+       .open           = crypto_info_open,
+       .read           = seq_read,
+       .llseek         = seq_lseek,
+       .release        = seq_release
+};
+
+void __init crypto_init_proc(void)
+{
+       struct proc_dir_entry *proc;
+       
+       proc = create_proc_entry("crypto", 0, NULL);
+       if (proc)
+               proc->proc_fops = &proc_crypto_ops;
+}
diff --git a/ubuntu/rtl8192se/rtllib/readme b/ubuntu/rtl8192se/rtllib/readme
new file mode 100644 (file)
index 0000000..18da457
--- /dev/null
@@ -0,0 +1,162 @@
+What this layer should do
+
+- It mantain the old mechanism as alternative, so the
+  ipw2100 driver works with really few changes.
+- Encapsulate / Decapsulate rtllib packet 
+- Handle fragmentation 
+- Optionally provide an alterantive mechanism for netif queue stop/wake, 
+  so that the rtllib layer will pass one fragment per time instead of
+  one txb struct per time. so the driver can stop the queue in the middle
+  of a packet.
+- Provide two different TX interfaces for cards that can handle management
+  frames on one HW queue, and data on another, and for cards that have only
+  one HW queue  (the latter untested and very, very rough).
+- Optionally provide the logic for handling IBSS/MASTER/MONITOR/BSS modes
+  and for the channel, essid and wap get/set wireless extension requests.
+  so that the driver has only to change channel when the ieee stack tell it.
+- Optionally provide a scanning mechanism so that the driver has not to
+  worry about this, just implement the set channel calback and pass 
+  frames to the upper layer
+- Optionally provide the bss client protocol handshaking (just with open 
+  authentication)
+- Optionally provide the probe request send mechanism
+- Optionally provide the bss master mode logic to handle association
+  protocol (only open authentication) and probe responses.
+- SW wep encryption (with open authentication)
+- It collects some stats
+- It provides beacons to the card when it ask for them
+
+What this layer doesn't do (yet)
+- Perform shared authentication
+- Have full support for master mode (the AP should loop back in the air
+  frames from an associated client to another. This could be done easily
+  with few lines of code, and it is done in my previous version of the 
+  stach, but a table of association must be keept and a disassociation
+  policy must be decided and implemented.
+- Handle cleanly the full ieee 802.11 protocol. In AP mode it never
+  disassociate clients, and it is really prone to always allow access.
+  In bss client mode it is a bit rough with AP deauth and disassoc requests.
+- It has not any entry point to view the collected stats.
+- Altought it takes care of the card supported rates in the management frame
+  it sends, support for rate changing on TXed packet is not complete.
+- Give up once associated in bss client mode (it never detect a
+  signal loss condition to disassociate and restart scanning)
+- Provide a mechanism for enabling the TX in monitor mode, so
+  userspace programs can TX raw packets.
+- Provide a mechanism for cards that need that the SW take care of beacon
+  TX completely, in sense that the SW has to enqueue by itself beacons
+  to the card so it TX them (if any...)
+APIs
+
+Callback functions in the original stack has been mantained.
+following has been added (from rtllib.h)
+
+       /* Softmac-generated frames (mamagement) are TXed via this 
+        * callback if the flag IEEE_SOFTMAC_SINGLE_QUEUE is 
+        * not set. As some cards may have different HW queues that 
+        * one might want to use for data and management frames
+        * the option to have two callbacks might be useful.
+        * This fucntion can't sleep.
+        */
+       int (*softmac_hard_start_xmit)(struct sk_buff *skb,
+                              struct net_device *dev);
+       
+       /* used instead of hard_start_xmit (not softmac_hard_start_xmit)
+        * if the IEEE_SOFTMAC_TX_QUEUE feature is used to TX data
+        * frames. I the option IEEE_SOFTMAC_SINGLE_QUEUE is also set
+        * then also management frames are sent via this callback.
+        * This function can't sleep.
+        */    
+       void (*softmac_data_hard_start_xmit)(struct sk_buff *skb,
+                              struct net_device *dev);
+
+       /* stops the HW queue for DATA frames. Useful to avoid
+        * waste time to TX data frame when we are reassociating
+        * This function can sleep.
+        */      
+       void (*data_hard_stop)(struct net_device *dev);
+       
+       /* OK this is complementar to data_poll_hard_stop */
+       void (*data_hard_resume)(struct net_device *dev);
+       
+       /* ask to the driver to retune the radio .
+        * This function can sleep. the driver should ensure
+        * the radio has been swithced before return.
+        */
+       void (*set_chan)(struct net_device *dev,short ch);
+       
+       /* These are not used if the ieee stack takes care of
+        * scanning (IEEE_SOFTMAC_SCAN feature set). 
+        * In this case only the set_chan is used.
+        *
+        * The syncro version is similar to the start_scan but
+        * does not return until all channels has been scanned.
+        * this is called in user context and should sleep, 
+        * it is called in a work_queue when swithcing to ad-hoc mode
+        * or in behalf of iwlist scan when the card is associated 
+        * and root user ask for a scan. 
+        * the fucntion stop_scan should stop both the syncro and
+        * background scanning and can sleep.
+        * The fucntion start_scan should initiate the background 
+        * scanning and can't sleep.
+        */ 
+       void (*scan_syncro)(struct net_device *dev);
+       void (*start_scan)(struct net_device *dev);
+       void (*stop_scan)(struct net_device *dev);
+       
+       /* indicate the driver that the link state is changed
+        * for example it may indicate the card is associated now.
+        * Driver might be interested in this to apply RX filter 
+        * rules or simply light the LINK led 
+        */
+       void (*link_change)(struct net_device *dev);
+       
+Functions hard_data_[resume/stop] are optional and should not be used
+if the driver decides to uses data+management frames enqueue in a 
+single HQ queue (thus using just the softmac_hard_data_start_xmit 
+callback).
+Function that the driver can use are:
+
+rtllib_get_beacon             - this is called by the driver when
+                                   the HW needs a beacon.
+rtllib_softmac_start_protocol - this should normally be called in the
+                                   driver open function
+rtllib_softmac_stop_protocol  - the opposite of the above
+rtllib_wake_queue             - this is similar to netif_wake_queue 
+rtllib_reset_queue            - this throw away fragments pending(if any)
+rtllib_stop_queue             - this is similar to netif_stop_queue
+
+
+known BUGS:
+- When performing syncro scan (possiblily when swithcing to ad-hoc mode
+  and when running iwlist scan when associated) there is still an odd
+  behaviour.. I have not looked in this more accurately (yet).
+
+locking:
+locking is done by means of three structures.
+1- ieee->lock (by means of spin_[un]lock_irq[save/restore]
+2- ieee->wx_sem
+3- ieee->scan_sem
+
+the lock 1 is what protect most of the critical sections in the ieee stack.
+the lock 2 is used to avoid that more than one of the SET wireless extension 
+handlers (as well as start/stop protocol function) are running at the same time. 
+the lock 1 is used when we need to modify or read the shared data in the wx handlers. 
+In other words the lock 2 will prevent one SET action will run across another SET
+action (by make sleep the 2nd one) but allow GET actions, while the lock 1
+make atomic those little shared data access in both GET and SET operation.
+So get operation will be never be delayed really: they will never sleep..
+Furthermore in the top of some SET operations a flag is set before acquiring
+the lock. This is an help to make the previous running SET operation to
+finish faster if needed (just in case the second one will totally undo the
+first, so there is not need to complete the 1st really.. ).
+The background scanning mechaninsm is protected by the lock 1 except for the
+workqueue. this wq is here just to let the set_chan callback sleep (I thinked it
+might be appreciated by USB network card driver developer). In this case the lock 3 
+take its turn. 
+Thus the stop function needs both the locks.
+Funny in the syncro scan the lock 2 play its role (as both the syncro_scan
+function and the stop scan function are called with this semaphore held).
+
+
diff --git a/ubuntu/rtl8192se/rtllib/rtl819x_BA.h b/ubuntu/rtl8192se/rtllib/rtl819x_BA.h
new file mode 100644 (file)
index 0000000..edd23be
--- /dev/null
@@ -0,0 +1,79 @@
+/******************************************************************************\r
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ * The full GNU General Public License is included in this distribution in the\r
+ * file called LICENSE.\r
+ *\r
+ * Contact Information:\r
+ * wlanfae <wlanfae@realtek.com>\r
+******************************************************************************/\r
+#ifndef _BATYPE_H_\r
+#define _BATYPE_H_\r
+\r
+#define        TOTAL_TXBA_NUM  16\r
+#define        TOTAL_RXBA_NUM  16\r
+\r
+#define        BA_SETUP_TIMEOUT        200\r
+#define        BA_INACT_TIMEOUT        60000\r
+\r
+#define        BA_POLICY_DELAYED               0\r
+#define        BA_POLICY_IMMEDIATE     1\r
+\r
+#define        ADDBA_STATUS_SUCCESS                    0\r
+#define        ADDBA_STATUS_REFUSED            37\r
+#define        ADDBA_STATUS_INVALID_PARAM      38\r
+\r
+#define        DELBA_REASON_QSTA_LEAVING       36\r
+#define        DELBA_REASON_END_BA                     37\r
+#define        DELBA_REASON_UNKNOWN_BA 38\r
+#define        DELBA_REASON_TIMEOUT                    39\r
+typedef union _SEQUENCE_CONTROL{\r
+       u16 ShortData;\r
+       struct\r
+       {\r
+               u16     FragNum:4;\r
+               u16     SeqNum:12;\r
+       }field;\r
+}SEQUENCE_CONTROL, *PSEQUENCE_CONTROL;\r
+\r
+typedef union _BA_PARAM_SET {\r
+       u8 charData[2];\r
+       u16 shortData;\r
+       struct {\r
+               u16 AMSDU_Support:1;\r
+               u16 BAPolicy:1;\r
+               u16 TID:4;\r
+               u16 BufferSize:10;\r
+       } field;\r
+} BA_PARAM_SET, *PBA_PARAM_SET;\r
+\r
+typedef union _DELBA_PARAM_SET {\r
+       u8 charData[2];\r
+       u16 shortData;\r
+       struct {\r
+               u16 Reserved:11;\r
+               u16 Initiator:1;\r
+               u16 TID:4;\r
+       } field;\r
+} DELBA_PARAM_SET, *PDELBA_PARAM_SET;\r
+\r
+typedef struct _BA_RECORD {\r
+       struct timer_list               Timer;\r
+       u8                              bValid;\r
+       u8                              DialogToken;\r
+       BA_PARAM_SET            BaParamSet;\r
+       u16                             BaTimeoutValue;\r
+       SEQUENCE_CONTROL        BaStartSeqCtrl;\r
+} BA_RECORD, *PBA_RECORD;\r
+\r
+#endif 
+\r
diff --git a/ubuntu/rtl8192se/rtllib/rtl819x_BAProc.c b/ubuntu/rtl8192se/rtllib/rtl819x_BAProc.c
new file mode 100644 (file)
index 0000000..f9628bd
--- /dev/null
@@ -0,0 +1,646 @@
+/******************************************************************************\r
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ * The full GNU General Public License is included in this distribution in the\r
+ * file called LICENSE.\r
+ *\r
+ * Contact Information:\r
+ * wlanfae <wlanfae@realtek.com>\r
+******************************************************************************/\r
+#include "rtllib.h"\r
+#include "rtl819x_BA.h"\r
+#ifdef RTK_DMP_PLATFORM\r
+#include <linux/usb_setting.h> 
+#endif\r
+\r
+void ActivateBAEntry(struct rtllib_device* ieee, PBA_RECORD pBA, u16 Time)\r
+{\r
+       pBA->bValid = true;\r
+       if(Time != 0)\r
+               mod_timer(&pBA->Timer, jiffies + MSECS(Time));\r
+}\r
+\r
+void DeActivateBAEntry( struct rtllib_device* ieee, PBA_RECORD pBA)\r
+{\r
+       pBA->bValid = false;\r
+       del_timer_sync(&pBA->Timer);\r
+}\r
+u8 TxTsDeleteBA( struct rtllib_device* ieee, PTX_TS_RECORD     pTxTs)\r
+{\r
+       PBA_RECORD              pAdmittedBa = &pTxTs->TxAdmittedBARecord;  
+       PBA_RECORD              pPendingBa = &pTxTs->TxPendingBARecord;\r
+       u8                      bSendDELBA = false;\r
+\r
+       if(pPendingBa->bValid)\r
+       {\r
+               DeActivateBAEntry(ieee, pPendingBa);\r
+               bSendDELBA = true;\r
+       }\r
+\r
+       if(pAdmittedBa->bValid)\r
+       {\r
+               DeActivateBAEntry(ieee, pAdmittedBa);\r
+               bSendDELBA = true;\r
+       }\r
+\r
+       return bSendDELBA;\r
+}\r
+\r
+u8 RxTsDeleteBA( struct rtllib_device* ieee, PRX_TS_RECORD     pRxTs)\r
+{\r
+       PBA_RECORD              pBa = &pRxTs->RxAdmittedBARecord;\r
+       u8                      bSendDELBA = false;\r
+\r
+       if(pBa->bValid)\r
+       {\r
+               DeActivateBAEntry(ieee, pBa);\r
+               bSendDELBA = true;\r
+       }\r
+\r
+       return bSendDELBA;\r
+}\r
+\r
+void ResetBaEntry( PBA_RECORD pBA)\r
+{\r
+       pBA->bValid                     = false;\r
+       pBA->BaParamSet.shortData       = 0;\r
+       pBA->BaTimeoutValue             = 0;\r
+       pBA->DialogToken                = 0;\r
+       pBA->BaStartSeqCtrl.ShortData   = 0;\r
+}\r
+static struct sk_buff* rtllib_ADDBA(struct rtllib_device* ieee, u8* Dst, PBA_RECORD pBA, u16 StatusCode, u8 type)\r
+{\r
+       struct sk_buff *skb = NULL;\r
+        struct rtllib_hdr_3addr* BAReq = NULL;\r
+       u8* tag = NULL;\r
+       u16 tmp = 0;\r
+       u16 len = ieee->tx_headroom + 9;\r
+       RTLLIB_DEBUG(RTLLIB_DL_TRACE | RTLLIB_DL_BA, "========>%s(), frame(%d) sentd to:"MAC_FMT", ieee->dev:%p\n", __FUNCTION__, type, MAC_ARG(Dst), ieee->dev);\r
+       if (pBA == NULL||ieee == NULL)\r
+       {\r
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, "pBA(%p) is NULL or ieee(%p) is NULL\n", pBA, ieee);\r
+               return NULL;\r
+       }\r
+#ifdef USB_USE_ALIGNMENT\r
+        u32 Tmpaddr=0;\r
+        int alignment=0;\r
+        skb = dev_alloc_skb(len + sizeof( struct rtllib_hdr_3addr) + USB_512B_ALIGNMENT_SIZE); 
+#else\r
+       skb = dev_alloc_skb(len + sizeof( struct rtllib_hdr_3addr)); 
+#endif\r
+       if (skb == NULL)\r
+       {\r
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, "can't alloc skb for ADDBA_REQ\n");\r
+               return NULL;\r
+       }\r
+\r
+       memset(skb->data, 0, sizeof( struct rtllib_hdr_3addr));         
+\r
+#ifdef USB_USE_ALIGNMENT\r
+        Tmpaddr = (u32)skb->data;\r
+        alignment = Tmpaddr & 0x1ff;\r
+        skb_reserve(skb,(USB_512B_ALIGNMENT_SIZE - alignment));\r
+#endif\r
+\r
+       skb_reserve(skb, ieee->tx_headroom);\r
+\r
+       BAReq = ( struct rtllib_hdr_3addr *) skb_put(skb,sizeof( struct rtllib_hdr_3addr));\r
+\r
+       memcpy(BAReq->addr1, Dst, ETH_ALEN);\r
+       memcpy(BAReq->addr2, ieee->dev->dev_addr, ETH_ALEN);\r
+\r
+       memcpy(BAReq->addr3, ieee->current_network.bssid, ETH_ALEN);\r
+\r
+       BAReq->frame_ctl = cpu_to_le16(RTLLIB_STYPE_MANAGE_ACT); 
+\r
+       tag = (u8*)skb_put(skb, 9);\r
+       *tag ++= ACT_CAT_BA;  \r
+       *tag ++= type;\r
+       *tag ++= pBA->DialogToken;\r
+\r
+       if (ACT_ADDBARSP == type)\r
+       {\r
+               printk("====>to send ADDBARSP\n");\r
+               tmp = cpu_to_le16(StatusCode);\r
+               memcpy(tag, (u8*)&tmp, 2);\r
+               tag += 2;       \r
+       }\r
+       tmp = cpu_to_le16(pBA->BaParamSet.shortData);\r
+       memcpy(tag, (u8*)&tmp, 2);\r
+       tag += 2;\r
+       tmp = cpu_to_le16(pBA->BaTimeoutValue);\r
+       memcpy(tag, (u8*)&tmp, 2);\r
+       tag += 2;\r
+       \r
+       if (ACT_ADDBAREQ == type)\r
+       {\r
+               memcpy(tag,(u8*)&(pBA->BaStartSeqCtrl), 2);\r
+               tag += 2;\r
+       }\r
+       \r
+       RTLLIB_DEBUG_DATA(RTLLIB_DL_DATA|RTLLIB_DL_BA, skb->data, skb->len);\r
+       return skb;\r
+}\r
+\r
+static struct sk_buff* rtllib_DELBA(\r
+       struct rtllib_device* ieee,\r
+       u8*                      dst,\r
+       PBA_RECORD               pBA,\r
+       TR_SELECT                TxRxSelect,\r
+       u16                      ReasonCode\r
+       )\r
+{\r
+       DELBA_PARAM_SET DelbaParamSet;\r
+       struct sk_buff *skb = NULL;\r
+        struct rtllib_hdr_3addr* Delba = NULL;\r
+       u8* tag = NULL;\r
+       u16 tmp = 0;\r
+       u16 len = 6 + ieee->tx_headroom;        \r
+\r
+       if (net_ratelimit())\r
+       RTLLIB_DEBUG(RTLLIB_DL_TRACE | RTLLIB_DL_BA, "========>%s(), ReasonCode(%d) sentd to:"MAC_FMT"\n", __FUNCTION__, ReasonCode, MAC_ARG(dst));\r
+\r
+       memset(&DelbaParamSet, 0, 2);\r
+\r
+       DelbaParamSet.field.Initiator   = (TxRxSelect==TX_DIR)?1:0;\r
+       DelbaParamSet.field.TID = pBA->BaParamSet.field.TID;\r
+       \r
+#ifdef USB_USE_ALIGNMENT\r
+        u32 Tmpaddr=0;\r
+        int alignment=0;\r
+       skb = dev_alloc_skb(len + sizeof( struct rtllib_hdr_3addr) + USB_512B_ALIGNMENT_SIZE); 
+#else  \r
+       skb = dev_alloc_skb(len + sizeof( struct rtllib_hdr_3addr)); 
+#endif\r
+       if (skb == NULL)\r
+       {\r
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, "can't alloc skb for ADDBA_REQ\n");\r
+               return NULL;\r
+       }\r
+\r
+#ifdef USB_USE_ALIGNMENT\r
+        Tmpaddr = (u32)skb->data;\r
+        alignment = Tmpaddr & 0x1ff;\r
+        skb_reserve(skb,(USB_512B_ALIGNMENT_SIZE - alignment));\r
+#endif\r
+       skb_reserve(skb, ieee->tx_headroom);\r
+       \r
+       Delba = ( struct rtllib_hdr_3addr *) skb_put(skb,sizeof( struct rtllib_hdr_3addr));\r
+\r
+       memcpy(Delba->addr1, dst, ETH_ALEN);\r
+       memcpy(Delba->addr2, ieee->dev->dev_addr, ETH_ALEN);\r
+       memcpy(Delba->addr3, ieee->current_network.bssid, ETH_ALEN);\r
+       Delba->frame_ctl = cpu_to_le16(RTLLIB_STYPE_MANAGE_ACT); 
+       \r
+       tag = (u8*)skb_put(skb, 6);     \r
+\r
+       *tag ++= ACT_CAT_BA;  \r
+       *tag ++= ACT_DELBA;\r
+\r
+       tmp = cpu_to_le16(DelbaParamSet.shortData);\r
+       memcpy(tag, (u8*)&tmp, 2);\r
+       tag += 2;\r
+       tmp = cpu_to_le16(ReasonCode);\r
+       memcpy(tag, (u8*)&tmp, 2);\r
+       tag += 2;\r
+\r
+       RTLLIB_DEBUG_DATA(RTLLIB_DL_DATA|RTLLIB_DL_BA, skb->data, skb->len);\r
+       if (net_ratelimit())\r
+       RTLLIB_DEBUG(RTLLIB_DL_TRACE | RTLLIB_DL_BA, "<=====%s()\n", __FUNCTION__);\r
+       return skb;\r
+}\r
+\r
+void rtllib_send_ADDBAReq(struct rtllib_device* ieee, u8*      dst, PBA_RECORD pBA)\r
+{\r
+       struct sk_buff *skb = NULL;\r
+       skb = rtllib_ADDBA(ieee, dst, pBA, 0, ACT_ADDBAREQ); 
+\r
+       if (skb)\r
+       {\r
+               printk("====>to send ADDBAREQ!!!!!\n");\r
+               softmac_mgmt_xmit(skb, ieee);\r
+       }\r
+       else\r
+       {\r
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, "alloc skb error in function %s()\n", __FUNCTION__);\r
+       }\r
+       return;\r
+}\r
+\r
+void rtllib_send_ADDBARsp(struct rtllib_device* ieee, u8* dst, PBA_RECORD pBA, u16 StatusCode) \r
+{\r
+       struct sk_buff *skb = NULL;\r
+       skb = rtllib_ADDBA(ieee, dst, pBA, StatusCode, ACT_ADDBARSP); 
+       if (skb)\r
+       {\r
+               softmac_mgmt_xmit(skb, ieee);\r
+       }\r
+       else\r
+       {\r
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, "alloc skb error in function %s()\n", __FUNCTION__);\r
+       }\r
+\r
+       return;\r
+\r
+}\r
+\r
+void rtllib_send_DELBA(struct rtllib_device* ieee, u8* dst, PBA_RECORD pBA, TR_SELECT TxRxSelect, u16 ReasonCode)\r
+{\r
+       struct sk_buff *skb = NULL;\r
+       skb = rtllib_DELBA(ieee, dst, pBA, TxRxSelect, ReasonCode); 
+       if (skb)\r
+       {\r
+               softmac_mgmt_xmit(skb, ieee);\r
+       }\r
+       else\r
+       {\r
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, "alloc skb error in function %s()\n", __FUNCTION__);\r
+       }\r
+       return ;\r
+}\r
+\r
+int rtllib_rx_ADDBAReq( struct rtllib_device* ieee, struct sk_buff *skb)\r
+{\r
+        struct rtllib_hdr_3addr* req = NULL;\r
+       u16 rc = 0;\r
+       u8 * dst = NULL, *pDialogToken = NULL, *tag = NULL;\r
+       PBA_RECORD pBA = NULL;\r
+       PBA_PARAM_SET   pBaParamSet = NULL;\r
+       u16* pBaTimeoutVal = NULL;\r
+       PSEQUENCE_CONTROL pBaStartSeqCtrl = NULL;\r
+       PRX_TS_RECORD   pTS = NULL;     \r
+\r
+       if (skb->len < sizeof( struct rtllib_hdr_3addr) + 9)\r
+       {\r
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, " Invalid skb len in BAREQ(%d / %d)\n",(int)skb->len,       (int)(sizeof( struct rtllib_hdr_3addr) + 9));\r
+               return -1;\r
+       }\r
+\r
+       RTLLIB_DEBUG_DATA(RTLLIB_DL_DATA|RTLLIB_DL_BA, skb->data, skb->len);\r
+       \r
+       req = ( struct rtllib_hdr_3addr*) skb->data;\r
+       tag = (u8*)req;\r
+       dst = (u8*)(&req->addr2[0]);\r
+       tag += sizeof( struct rtllib_hdr_3addr);\r
+       pDialogToken = tag + 2;  
+       pBaParamSet = (PBA_PARAM_SET)(tag + 3);   
+       pBaTimeoutVal = (u16*)(tag + 5); \r
+       pBaStartSeqCtrl = (PSEQUENCE_CONTROL)(req + 7);\r
+       \r
+       printk("====>rx ADDBAREQ from :"MAC_FMT"\n", MAC_ARG(dst));     \r
+       if(\r
+#ifdef _RTL8192_EXT_PATCH_\r
+               (ieee->current_network.qos_data.active == 0 && ieee->current_mesh_network.qos_data.active==0) ||\r
+#else\r
+               ieee->current_network.qos_data.active == 0  ||\r
+#endif \r
+               (ieee->pHTInfo->bCurrentHTSupport == false) ||\r
+               (ieee->pHTInfo->IOTAction & HT_IOT_ACT_REJECT_ADDBA_REQ)) 
+       {\r
+               rc = ADDBA_STATUS_REFUSED;\r
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, "Failed to reply on ADDBA_REQ as some capability is not ready(%d, %d)\n", ieee->current_network.qos_data.active, ieee->pHTInfo->bCurrentHTSupport);\r
+               goto OnADDBAReq_Fail;\r
+       }\r
+       if(     !GetTs(\r
+                       ieee, \r
+                       (PTS_COMMON_INFO*)(&pTS), \r
+                       dst, \r
+                       (u8)(pBaParamSet->field.TID), \r
+                       RX_DIR,\r
+                       true)   )\r
+       {\r
+               rc = ADDBA_STATUS_REFUSED;\r
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, "can't get TS in %s()\n", __FUNCTION__);\r
+               goto OnADDBAReq_Fail;\r
+       }\r
+       pBA = &pTS->RxAdmittedBARecord;\r
+\r
+       if(pBaParamSet->field.BAPolicy == BA_POLICY_DELAYED)\r
+       {\r
+               rc = ADDBA_STATUS_INVALID_PARAM;\r
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, "BA Policy is not correct in %s()\n", __FUNCTION__);\r
+               goto OnADDBAReq_Fail;\r
+       }\r
+\r
+\r
+       rtllib_FlushRxTsPendingPkts(ieee, pTS);\r
+       \r
+       DeActivateBAEntry(ieee, pBA);   \r
+       pBA->DialogToken = *pDialogToken;\r
+       pBA->BaParamSet = *pBaParamSet;\r
+       pBA->BaTimeoutValue = *pBaTimeoutVal;\r
+       pBA->BaStartSeqCtrl = *pBaStartSeqCtrl;\r
+       \r
+       if (ieee->GetHalfNmodeSupportByAPsHandler(ieee->dev)||\r
+       (ieee->pHTInfo->IOTAction & HT_IOT_ACT_ALLOW_PEER_AGG_ONE_PKT))\r
+       pBA->BaParamSet.field.BufferSize = 1;\r
+       else\r
+       pBA->BaParamSet.field.BufferSize = 32;\r
+       \r
+       ActivateBAEntry(ieee, pBA, 0);
+       rtllib_send_ADDBARsp(ieee, dst, pBA, ADDBA_STATUS_SUCCESS);\r
+\r
+       return 0;\r
+       \r
+OnADDBAReq_Fail:\r
+       {\r
+               BA_RECORD       BA;\r
+               BA.BaParamSet = *pBaParamSet;\r
+               BA.BaTimeoutValue = *pBaTimeoutVal;\r
+               BA.DialogToken = *pDialogToken;\r
+               BA.BaParamSet.field.BAPolicy = BA_POLICY_IMMEDIATE;\r
+               rtllib_send_ADDBARsp(ieee, dst, &BA, rc);\r
+               return 0; 
+       }\r
+\r
+}\r
+\r
+int rtllib_rx_ADDBARsp( struct rtllib_device* ieee, struct sk_buff *skb)\r
+{\r
+        struct rtllib_hdr_3addr* rsp = NULL;\r
+       PBA_RECORD              pPendingBA, pAdmittedBA;\r
+       PTX_TS_RECORD           pTS = NULL;\r
+       u8* dst = NULL, *pDialogToken = NULL, *tag = NULL;\r
+       u16* pStatusCode = NULL, *pBaTimeoutVal = NULL;\r
+       PBA_PARAM_SET           pBaParamSet = NULL;\r
+       u16                     ReasonCode;\r
+\r
+       if (skb->len < sizeof( struct rtllib_hdr_3addr) + 9)\r
+       {\r
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, " Invalid skb len in BARSP(%d / %d)\n", (int)skb->len,      (int)(sizeof( struct rtllib_hdr_3addr) + 9));\r
+               return -1;\r
+       }\r
+       rsp = ( struct rtllib_hdr_3addr*)skb->data;\r
+       tag = (u8*)rsp;\r
+       dst = (u8*)(&rsp->addr2[0]);\r
+       tag += sizeof( struct rtllib_hdr_3addr);\r
+       pDialogToken = tag + 2;\r
+       pStatusCode = (u16*)(tag + 3);\r
+       pBaParamSet = (PBA_PARAM_SET)(tag + 5);\r
+       pBaTimeoutVal = (u16*)(tag + 7);\r
+\r
+       printk("====>rx ADDBARSP from :"MAC_FMT"\n", MAC_ARG(dst));     \r
+       if(     \r
+#ifdef _RTL8192_EXT_PATCH_\r
+               (ieee->current_network.qos_data.active == 0 && ieee->current_mesh_network.qos_data.active==0) ||\r
+#else\r
+               ieee->current_network.qos_data.active == 0  ||\r
+#endif \r
+               ieee->pHTInfo->bCurrentHTSupport == false ||\r
+               ieee->pHTInfo->bCurrentAMPDUEnable == false )\r
+       {\r
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, "reject to ADDBA_RSP as some capability is not ready(%d, %d, %d)\n",ieee->current_network.qos_data.active, ieee->pHTInfo->bCurrentHTSupport, ieee->pHTInfo->bCurrentAMPDUEnable);\r
+               ReasonCode = DELBA_REASON_UNKNOWN_BA;\r
+               goto OnADDBARsp_Reject;\r
+       }\r
+\r
+       \r
+       if (!GetTs(\r
+                       ieee, \r
+                       (PTS_COMMON_INFO*)(&pTS), \r
+                       dst, \r
+                       (u8)(pBaParamSet->field.TID), \r
+                       TX_DIR,\r
+                       false)  )\r
+       {\r
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, "can't get TS in %s()\n", __FUNCTION__);\r
+               ReasonCode = DELBA_REASON_UNKNOWN_BA;\r
+               goto OnADDBARsp_Reject;\r
+       }\r
+       \r
+       pTS->bAddBaReqInProgress = false;\r
+       pPendingBA = &pTS->TxPendingBARecord;\r
+       pAdmittedBA = &pTS->TxAdmittedBARecord;\r
+\r
+\r
+       if((pAdmittedBA->bValid==true))\r
+       {\r
+               RTLLIB_DEBUG(RTLLIB_DL_BA, "OnADDBARsp(): Recv ADDBA Rsp. Drop because already admit it! \n");\r
+               return -1;\r
+       }\r
+       else if((pPendingBA->bValid == false) ||(*pDialogToken != pPendingBA->DialogToken))\r
+       {\r
+               RTLLIB_DEBUG(RTLLIB_DL_ERR,  "OnADDBARsp(): Recv ADDBA Rsp. BA invalid, DELBA! \n");\r
+               ReasonCode = DELBA_REASON_UNKNOWN_BA;\r
+               goto OnADDBARsp_Reject;\r
+       }\r
+       else\r
+       {\r
+               RTLLIB_DEBUG(RTLLIB_DL_BA, "OnADDBARsp(): Recv ADDBA Rsp. BA is admitted! Status code:%X\n", *pStatusCode);\r
+               DeActivateBAEntry(ieee, pPendingBA);\r
+       }\r
+\r
+\r
+       if(*pStatusCode == ADDBA_STATUS_SUCCESS)\r
+       {\r
+               if(pBaParamSet->field.BAPolicy == BA_POLICY_DELAYED)\r
+               {\r
+                       pTS->bAddBaReqDelayed = true;\r
+                       DeActivateBAEntry(ieee, pAdmittedBA);\r
+                       ReasonCode = DELBA_REASON_END_BA;\r
+                       goto OnADDBARsp_Reject;\r
+               }\r
+\r
+\r
+               pAdmittedBA->DialogToken = *pDialogToken;\r
+               pAdmittedBA->BaTimeoutValue = *pBaTimeoutVal;\r
+               pAdmittedBA->BaStartSeqCtrl = pPendingBA->BaStartSeqCtrl;\r
+               pAdmittedBA->BaParamSet = *pBaParamSet;\r
+               DeActivateBAEntry(ieee, pAdmittedBA);\r
+               ActivateBAEntry(ieee, pAdmittedBA, *pBaTimeoutVal);\r
+       } else {\r
+               pTS->bAddBaReqDelayed = true;\r
+               pTS->bDisable_AddBa = true;\r
+               ReasonCode = DELBA_REASON_END_BA;\r
+               goto OnADDBARsp_Reject;\r
+       }\r
+\r
+       return 0;\r
+\r
+OnADDBARsp_Reject:\r
+       {\r
+               BA_RECORD       BA;\r
+               BA.BaParamSet = *pBaParamSet;\r
+               rtllib_send_DELBA(ieee, dst, &BA, TX_DIR, ReasonCode);\r
+               return 0;\r
+       }\r
+       \r
+}\r
+\r
+int rtllib_rx_DELBA(struct rtllib_device* ieee,struct sk_buff *skb)\r
+{\r
+        struct rtllib_hdr_3addr* delba = NULL;\r
+       PDELBA_PARAM_SET        pDelBaParamSet = NULL;\r
+       u16*                    pReasonCode = NULL;\r
+       u8*                     dst = NULL;\r
+\r
+       if (skb->len < sizeof( struct rtllib_hdr_3addr) + 6)\r
+       {\r
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, " Invalid skb len in DELBA(%d / %d)\n", (int)skb->len,      (int)(sizeof( struct rtllib_hdr_3addr) + 6));\r
+               return -1;\r
+       }\r
+       \r
+       if(\r
+#ifdef _RTL8192_EXT_PATCH_\r
+               (ieee->current_network.qos_data.active == 0 && ieee->current_mesh_network.qos_data.active==0) ||\r
+#else\r
+               ieee->current_network.qos_data.active == 0  ||\r
+#endif \r
+               ieee->pHTInfo->bCurrentHTSupport == false )\r
+       {\r
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, "received DELBA while QOS or HT is not supported(%d, %d)\n",ieee->current_network.qos_data.active, ieee->pHTInfo->bCurrentHTSupport);\r
+               return -1;\r
+       }\r
+       \r
+       RTLLIB_DEBUG_DATA(RTLLIB_DL_DATA|RTLLIB_DL_BA, skb->data, skb->len);\r
+       delba = ( struct rtllib_hdr_3addr*)skb->data;\r
+       dst = (u8*)(&delba->addr2[0]);\r
+       delba += sizeof( struct rtllib_hdr_3addr);\r
+       pDelBaParamSet = (PDELBA_PARAM_SET)(delba+2);\r
+       pReasonCode = (u16*)(delba+4);\r
+\r
+       if(pDelBaParamSet->field.Initiator == 1)\r
+       {\r
+               PRX_TS_RECORD   pRxTs;\r
+\r
+               if( !GetTs(\r
+                               ieee, \r
+                               (PTS_COMMON_INFO*)&pRxTs, \r
+                               dst, \r
+                               (u8)pDelBaParamSet->field.TID, \r
+                               RX_DIR,\r
+                               false)  )\r
+               {\r
+                       RTLLIB_DEBUG(RTLLIB_DL_ERR,  "can't get TS for RXTS in %s().dsf:"MAC_FMT" TID:%d\n", __FUNCTION__, MAC_ARG(dst), (u8)pDelBaParamSet->field.TID);\r
+                       return -1;\r
+               }\r
+               \r
+               RxTsDeleteBA(ieee, pRxTs);\r
+       }\r
+       else\r
+       {\r
+               PTX_TS_RECORD   pTxTs;\r
+\r
+               if(!GetTs(\r
+                       ieee, \r
+                       (PTS_COMMON_INFO*)&pTxTs, \r
+                       dst, \r
+                       (u8)pDelBaParamSet->field.TID, \r
+                       TX_DIR,\r
+                       false)  )\r
+               {\r
+                       RTLLIB_DEBUG(RTLLIB_DL_ERR,  "can't get TS for TXTS in %s()\n", __FUNCTION__);\r
+                       return -1;\r
+               }\r
+               \r
+               pTxTs->bUsingBa = false;\r
+               pTxTs->bAddBaReqInProgress = false;\r
+               pTxTs->bAddBaReqDelayed = false;\r
+               del_timer_sync(&pTxTs->TsAddBaTimer);\r
+               TxTsDeleteBA(ieee, pTxTs);\r
+       }\r
+       return 0;\r
+}\r
+\r
+void\r
+TsInitAddBA(\r
+       struct rtllib_device* ieee,\r
+       PTX_TS_RECORD   pTS,\r
+       u8              Policy,\r
+       u8              bOverwritePending\r
+       )\r
+{\r
+       PBA_RECORD                      pBA = &pTS->TxPendingBARecord;\r
+\r
+       if(pBA->bValid==true && bOverwritePending==false)\r
+               return;\r
+\r
+       DeActivateBAEntry(ieee, pBA);\r
+       \r
+       pBA->DialogToken++;                                             
+       pBA->BaParamSet.field.AMSDU_Support = 0;        
+       pBA->BaParamSet.field.BAPolicy = Policy;        
+       pBA->BaParamSet.field.TID = pTS->TsCommonInfo.TSpec.f.TSInfo.field.ucTSID;      
+       pBA->BaParamSet.field.BufferSize = 32;          
+       pBA->BaTimeoutValue = 0;                                        
+       pBA->BaStartSeqCtrl.field.SeqNum = (pTS->TxCurSeq + 3) % 4096;  
+\r
+       ActivateBAEntry(ieee, pBA, BA_SETUP_TIMEOUT);\r
+\r
+       rtllib_send_ADDBAReq(ieee, pTS->TsCommonInfo.Addr, pBA);\r
+}\r
+\r
+void\r
+TsInitDelBA( struct rtllib_device* ieee, PTS_COMMON_INFO pTsCommonInfo, TR_SELECT TxRxSelect)\r
+{\r
+\r
+       if(TxRxSelect == TX_DIR)\r
+       {\r
+               PTX_TS_RECORD   pTxTs = (PTX_TS_RECORD)pTsCommonInfo;\r
+\r
+               if(TxTsDeleteBA(ieee, pTxTs))\r
+                       rtllib_send_DELBA(\r
+                               ieee, \r
+                               pTsCommonInfo->Addr, \r
+                               (pTxTs->TxAdmittedBARecord.bValid)?(&pTxTs->TxAdmittedBARecord):(&pTxTs->TxPendingBARecord), \r
+                               TxRxSelect, \r
+                               DELBA_REASON_END_BA);\r
+       }\r
+       else if(TxRxSelect == RX_DIR)\r
+       {\r
+               PRX_TS_RECORD   pRxTs = (PRX_TS_RECORD)pTsCommonInfo;\r
+               if(RxTsDeleteBA(ieee, pRxTs))\r
+                       rtllib_send_DELBA(\r
+                               ieee, \r
+                               pTsCommonInfo->Addr, \r
+                               &pRxTs->RxAdmittedBARecord, \r
+                               TxRxSelect, \r
+                               DELBA_REASON_END_BA     );\r
+       }\r
+}\r
+void BaSetupTimeOut(unsigned long data)\r
+{\r
+       PTX_TS_RECORD   pTxTs = (PTX_TS_RECORD)data;\r
+\r
+       pTxTs->bAddBaReqInProgress = false;\r
+       pTxTs->bAddBaReqDelayed = true;\r
+       pTxTs->TxPendingBARecord.bValid = false;\r
+}\r
+\r
+void TxBaInactTimeout(unsigned long data)\r
+{\r
+       PTX_TS_RECORD   pTxTs = (PTX_TS_RECORD)data;\r
+       struct rtllib_device *ieee = container_of(pTxTs, struct rtllib_device, TxTsRecord[pTxTs->num]);\r
+       TxTsDeleteBA(ieee, pTxTs);\r
+       rtllib_send_DELBA(\r
+               ieee, \r
+               pTxTs->TsCommonInfo.Addr, \r
+               &pTxTs->TxAdmittedBARecord,\r
+               TX_DIR, \r
+               DELBA_REASON_TIMEOUT);\r
+}\r
+\r
+void RxBaInactTimeout(unsigned long data)\r
+{\r
+       PRX_TS_RECORD   pRxTs = (PRX_TS_RECORD)data;\r
+       struct rtllib_device *ieee = container_of(pRxTs, struct rtllib_device, RxTsRecord[pRxTs->num]);\r
+       \r
+       RxTsDeleteBA(ieee, pRxTs);\r
+       rtllib_send_DELBA(\r
+               ieee, \r
+               pRxTs->TsCommonInfo.Addr, \r
+               &pRxTs->RxAdmittedBARecord,\r
+               RX_DIR, \r
+               DELBA_REASON_TIMEOUT);\r
+       return ;\r
+}\r
+\r
diff --git a/ubuntu/rtl8192se/rtllib/rtl819x_HT.h b/ubuntu/rtl8192se/rtllib/rtl819x_HT.h
new file mode 100644 (file)
index 0000000..079c516
--- /dev/null
@@ -0,0 +1,489 @@
+/******************************************************************************\r
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ * The full GNU General Public License is included in this distribution in the\r
+ * file called LICENSE.\r
+ *\r
+ * Contact Information:\r
+ * wlanfae <wlanfae@realtek.com>\r
+******************************************************************************/\r
+#ifndef _RTL819XU_HTTYPE_H_\r
+#define _RTL819XU_HTTYPE_H_\r
+\r
+\r
+#define HT_OPMODE_NO_PROTECT           0\r
+#define HT_OPMODE_OPTIONAL             1\r
+#define HT_OPMODE_40MHZ_PROTECT        2\r
+#define HT_OPMODE_MIXED                        3\r
+\r
+#define MIMO_PS_STATIC                         0\r
+#define MIMO_PS_DYNAMIC                        1\r
+#define MIMO_PS_NOLIMIT                        3\r
+\r
+\r
+\r
+#define sHTCLng        4\r
+\r
+\r
+#define HT_SUPPORTED_MCS_1SS_BITMAP                                    0x000000ff\r
+#define HT_SUPPORTED_MCS_2SS_BITMAP                                    0x0000ff00\r
+#define HT_SUPPORTED_MCS_1SS_2SS_BITMAP                        HT_MCS_1SS_BITMAP|HT_MCS_1SS_2SS_BITMAP\r
+\r
+\r
+typedef enum _HT_MCS_RATE{\r
+       HT_MCS0   = 0x00000001,\r
+       HT_MCS1   = 0x00000002,\r
+       HT_MCS2   = 0x00000004,\r
+       HT_MCS3   = 0x00000008,\r
+       HT_MCS4   = 0x00000010,\r
+       HT_MCS5   = 0x00000020,\r
+       HT_MCS6   = 0x00000040,\r
+       HT_MCS7   = 0x00000080,\r
+       HT_MCS8   = 0x00000100,\r
+       HT_MCS9   = 0x00000200,\r
+       HT_MCS10 = 0x00000400,\r
+       HT_MCS11 = 0x00000800,\r
+       HT_MCS12 = 0x00001000,\r
+       HT_MCS13 = 0x00002000,\r
+       HT_MCS14 = 0x00004000,\r
+       HT_MCS15 = 0x00008000,  \r
+}HT_MCS_RATE,*PHT_MCS_RATE;\r
+\r
+typedef enum _HT_CHANNEL_WIDTH{\r
+       HT_CHANNEL_WIDTH_20 = 0,\r
+       HT_CHANNEL_WIDTH_20_40 = 1,\r
+}HT_CHANNEL_WIDTH, *PHT_CHANNEL_WIDTH;\r
+\r
+typedef enum _HT_EXTCHNL_OFFSET{\r
+       HT_EXTCHNL_OFFSET_NO_EXT = 0,\r
+       HT_EXTCHNL_OFFSET_UPPER = 1,\r
+       HT_EXTCHNL_OFFSET_NO_DEF = 2,\r
+       HT_EXTCHNL_OFFSET_LOWER = 3,\r
+}HT_EXTCHNL_OFFSET, *PHT_EXTCHNL_OFFSET;\r
+\r
+typedef enum _CHNLOP{\r
+       CHNLOP_NONE = 0, 
+       CHNLOP_SCAN = 1, 
+       CHNLOP_SWBW = 2, 
+       CHNLOP_SWCHNL = 3, 
+} CHNLOP, *PCHNLOP;\r
+\r
+#define CHHLOP_IN_PROGRESS(_pHTInfo)   \\r
+               ((_pHTInfo)->ChnlOp > CHNLOP_NONE) ? true : false\r
+\r
+/*\r
+typedef        union _HT_CAPABILITY{\r
+       u16     ShortData;\r
+       u8      CharData[2];\r
+       struct\r
+       {\r
+               u16     AdvCoding:1;\r
+               u16     ChlWidth:1;\r
+               u16     MimoPwrSave:2;\r
+               u16     GreenField:1;\r
+               u16     ShortGI20Mhz:1;\r
+               u16     ShortGI40Mhz:1;\r
+               u16     STBC:1;\r
+               u16     BeamForm:1;\r
+               u16     DelayBA:1;\r
+               u16     MaxAMSDUSize:1;\r
+               u16     DssCCk:1;\r
+               u16     PSMP:1;\r
+               u16     Rsvd:3;\r
+       }Field;\r
+}HT_CAPABILITY, *PHT_CAPABILITY;\r
+\r
+typedef        union _HT_CAPABILITY_MACPARA{\r
+       u8      ShortData;\r
+       u8      CharData[1];\r
+       struct\r
+       {\r
+               u8      MaxRxAMPDU:2;\r
+               u8      MPDUDensity:2;\r
+               u8      Rsvd:4;\r
+       }Field;\r
+}HT_CAPABILITY_MACPARA, *PHT_CAPABILITY_MACPARA;\r
+*/\r
+\r
+typedef enum _HT_ACTION{\r
+       ACT_RECOMMAND_WIDTH             = 0,\r
+       ACT_MIMO_PWR_SAVE               = 1,\r
+       ACT_PSMP                                        = 2,\r
+       ACT_SET_PCO_PHASE               = 3,\r
+       ACT_MIMO_CHL_MEASURE    = 4,\r
+       ACT_RECIPROCITY_CORRECT = 5,\r
+       ACT_MIMO_CSI_MATRICS            = 6,\r
+       ACT_MIMO_NOCOMPR_STEER  = 7,\r
+       ACT_MIMO_COMPR_STEER            = 8,\r
+       ACT_ANTENNA_SELECT              = 9,\r
+} HT_ACTION, *PHT_ACTION;\r
+\r
+\r
+typedef enum _HT_Bandwidth_40MHZ_Sub_Carrier{\r
+       SC_MODE_DUPLICATE = 0,\r
+       SC_MODE_LOWER = 1,\r
+       SC_MODE_UPPER = 2,\r
+       SC_MODE_FULL40MHZ = 3,\r
+}HT_BW40_SC_E;\r
+\r
+typedef        struct _HT_CAPABILITY_ELE{\r
+\r
+       u8      AdvCoding:1;\r
+       u8      ChlWidth:1;\r
+       u8      MimoPwrSave:2;\r
+       u8      GreenField:1;\r
+       u8      ShortGI20Mhz:1;\r
+       u8      ShortGI40Mhz:1;\r
+       u8      TxSTBC:1;\r
+       u8      RxSTBC:2;\r
+       u8      DelayBA:1;\r
+       u8      MaxAMSDUSize:1;\r
+       u8      DssCCk:1;\r
+       u8      PSMP:1;\r
+       u8      Rsvd1:1;\r
+       u8      LSigTxopProtect:1;\r
+\r
+       u8      MaxRxAMPDUFactor:2;\r
+       u8      MPDUDensity:3;\r
+       u8      Rsvd2:3;\r
+\r
+       u8      MCS[16];\r
+                       \r
+\r
+       u16     ExtHTCapInfo;\r
+\r
+       u8      TxBFCap[4];\r
+\r
+       u8      ASCap;\r
+\r
+} __attribute__ ((packed)) HT_CAPABILITY_ELE, *PHT_CAPABILITY_ELE;\r
+\r
+\r
+typedef struct _HT_INFORMATION_ELE{\r
+       u8      ControlChl;\r
+\r
+       u8      ExtChlOffset:2;\r
+       u8      RecommemdedTxWidth:1;\r
+       u8      RIFS:1;\r
+       u8      PSMPAccessOnly:1;\r
+       u8      SrvIntGranularity:3;\r
+\r
+       u8      OptMode:2;\r
+       u8      NonGFDevPresent:1;\r
+       u8      Revd1:5;\r
+       u8      Revd2:8;\r
+\r
+       u8      Rsvd3:6;\r
+       u8      DualBeacon:1;\r
+       u8      DualCTSProtect:1;\r
+\r
+       u8      SecondaryBeacon:1;\r
+       u8      LSigTxopProtectFull:1;\r
+       u8      PcoActive:1;\r
+       u8      PcoPhase:1;\r
+       u8      Rsvd4:4;\r
+\r
+       u8      BasicMSC[16];\r
+} __attribute__ ((packed)) HT_INFORMATION_ELE, *PHT_INFORMATION_ELE;\r
+\r
+typedef struct _MIMOPS_CTRL{\r
+       u8      MimoPsEnable:1;\r
+       u8      MimoPsMode:1;\r
+       u8      Reserved:6;\r
+} MIMOPS_CTRL, *PMIMOPS_CTRL;\r
+\r
+typedef enum _HT_SPEC_VER{\r
+       HT_SPEC_VER_IEEE = 0,\r
+       HT_SPEC_VER_EWC = 1,\r
+}HT_SPEC_VER, *PHT_SPEC_VER;\r
+\r
+typedef enum _HT_AGGRE_MODE_E{\r
+       HT_AGG_AUTO = 0,\r
+       HT_AGG_FORCE_ENABLE = 1,\r
+       HT_AGG_FORCE_DISABLE = 2,\r
+}HT_AGGRE_MODE_E, *PHT_AGGRE_MODE_E;\r
+\r
+\r
+typedef struct _RT_HIGH_THROUGHPUT{\r
+       u8                              bEnableHT;\r
+       u8                              bCurrentHTSupport;\r
+\r
+       u8                              bRegBW40MHz;                            
+       u8                              bCurBW40MHz;                            
+\r
+       u8                              bRegShortGI40MHz;                       
+       u8                              bCurShortGI40MHz;                       
+\r
+       u8                              bRegShortGI20MHz;                       
+       u8                              bCurShortGI20MHz;                       
+\r
+       u8                              bRegSuppCCK;                            
+       u8                              bCurSuppCCK;                            
+\r
+       HT_SPEC_VER                     ePeerHTSpecVer;\r
+       \r
+\r
+       HT_CAPABILITY_ELE       SelfHTCap;              
+       HT_INFORMATION_ELE      SelfHTInfo;             
+\r
+       u8                              PeerHTCapBuf[32];\r
+       u8                              PeerHTInfoBuf[32];\r
+\r
+\r
+       u8                              bAMSDU_Support;                 
+       u16                             nAMSDU_MaxSize;                 
+       u8                              bCurrent_AMSDU_Support; 
+       u16                             nCurrent_AMSDU_MaxSize; 
+#ifdef _RTL8192_EXT_PATCH_\r
+       u8                              bCurrent_Mesh_AMSDU_Support;    
+#endif \r
+\r
+       u8                              bAMPDUEnable;                           
+       u8                              bCurrentAMPDUEnable;            
+       u8                              AMPDU_Factor;                           
+       u8                              CurrentAMPDUFactor;             
+       u8                              MPDU_Density;                           
+       u8                              CurrentMPDUDensity;                     
+#ifdef _RTL8192_EXT_PATCH_\r
+       u8                              bCurrentMeshAMPDUEnable;                
+#endif \r
+\r
+       HT_AGGRE_MODE_E ForcedAMPDUMode;\r
+       u8                              ForcedAMPDUFactor;\r
+       u8                              ForcedMPDUDensity;\r
+\r
+       HT_AGGRE_MODE_E ForcedAMSDUMode;\r
+       u16                             ForcedAMSDUMaxSize;\r
+\r
+       u8                              bForcedShortGI;\r
+\r
+       u8                              CurrentOpMode;\r
+\r
+       u8                              SelfMimoPs;\r
+       u8                              PeerMimoPs;\r
+       \r
+       HT_EXTCHNL_OFFSET       CurSTAExtChnlOffset;\r
+       u8                              bCurTxBW40MHz;  
+       u8                              PeerBandwidth;\r
+\r
+       u8                              bSwBwInProgress;\r
+       CHNLOP                          ChnlOp; 
+       u8                              SwBwStep;\r
+\r
+       u8                              bRegRT2RTAggregation;\r
+       u8                              RT2RT_HT_Mode;  \r
+       u8                              bCurrentRT2RTAggregation;\r
+       u8                              bCurrentRT2RTLongSlotTime;\r
+       u8                              szRT2RTAggBuffer[10];\r
+\r
+       u8                              bRegRxReorderEnable;\r
+       u8                              bCurRxReorderEnable;\r
+       u8                              RxReorderWinSize;\r
+       u8                              RxReorderPendingTime;\r
+       u16                             RxReorderDropCounter;\r
+\r
+#ifdef USB_TX_DRIVER_AGGREGATION_ENABLE\r
+       u8                              UsbTxAggrNum;\r
+#endif\r
+#ifdef USB_RX_AGGREGATION_SUPPORT\r
+       u8                              UsbRxFwAggrEn;\r
+       u8                              UsbRxFwAggrPageNum;\r
+       u8                              UsbRxFwAggrPacketNum;\r
+       u8                              UsbRxFwAggrTimeout;\r
+       u8                              UsbRxPageSize;\r
+#endif\r
+\r
+       u8                              bIsPeerBcm;\r
+\r
+       u8                              IOTPeer;\r
+       u32                             IOTAction;\r
+       u8                              IOTRaFunc;\r
+\r
+       u8      bWAIotBroadcom;\r
+       u8      WAIotTH;\r
+\r
+#ifdef RTL8192CE\r
+       u8                              bRDGEnable;\r
+#endif\r
+} __attribute__ ((packed)) RT_HIGH_THROUGHPUT, *PRT_HIGH_THROUGHPUT;\r
+\r
+\r
+\r
+typedef struct _RT_HTINFO_STA_ENTRY{\r
+       u8                      bEnableHT;\r
+       \r
+       u8                      bSupportCck;\r
+       \r
+       u16                     AMSDU_MaxSize;\r
+       \r
+       u8                      AMPDU_Factor;\r
+       u8                      MPDU_Density;\r
+       \r
+       u8                      HTHighestOperaRate;\r
+\r
+       u8                      bBw40MHz;\r
+\r
+       u8                      bCurTxBW40MHz;\r
+\r
+       u8                      bCurShortGI20MHz;\r
+\r
+       u8                      bCurShortGI40MHz;\r
+\r
+       u8                      MimoPs;\r
+\r
+       u8                      McsRateSet[16];\r
+       \r
+       u8                      bCurRxReorderEnable;\r
+\r
+       u16                     nAMSDU_MaxSize;\r
+       \r
+}RT_HTINFO_STA_ENTRY, *PRT_HTINFO_STA_ENTRY;\r
+\r
+\r
+\r
+\r
+\r
+\r
+typedef struct _BSS_HT{\r
+\r
+       u8                              bdSupportHT;\r
+\r
+       u8                                      bdHTCapBuf[32];\r
+       u16                                     bdHTCapLen;\r
+       u8                                      bdHTInfoBuf[32];\r
+       u16                                     bdHTInfoLen;\r
+\r
+       HT_SPEC_VER                             bdHTSpecVer;\r
+       HT_CHANNEL_WIDTH                        bdBandWidth;\r
+\r
+       u8                                      bdRT2RTAggregation;\r
+       u8                                      bdRT2RTLongSlotTime;\r
+       u8                                      RT2RT_HT_Mode;\r
+       u8                                      bdHT1R;\r
+} __attribute__ ((packed)) BSS_HT, *PBSS_HT;\r
+\r
+typedef struct _MIMO_RSSI{\r
+       u32     EnableAntenna;\r
+       u32     AntennaA;\r
+       u32     AntennaB;\r
+       u32     AntennaC;\r
+       u32     AntennaD;\r
+       u32     Average;\r
+}MIMO_RSSI, *PMIMO_RSSI;\r
+\r
+typedef struct _MIMO_EVM{\r
+       u32     EVM1;\r
+       u32    EVM2;\r
+}MIMO_EVM, *PMIMO_EVM;\r
+\r
+typedef struct _FALSE_ALARM_STATISTICS{\r
+       u32     Cnt_Parity_Fail;\r
+       u32     Cnt_Rate_Illegal;\r
+       u32     Cnt_Crc8_fail;\r
+       u32     Cnt_Mcs_fail;\r
+       u32     Cnt_Ofdm_fail;\r
+       u32     Cnt_Cck_fail;\r
+       u32     Cnt_all;\r
+}FALSE_ALARM_STATISTICS, *PFALSE_ALARM_STATISTICS;\r
+\r
+\r
+extern u8 MCS_FILTER_ALL[16];\r
+extern u8 MCS_FILTER_1SS[16];\r
+\r
+#define PICK_RATE(_nLegacyRate, _nMcsRate)     \\r
+               (_nMcsRate==0)?(_nLegacyRate&0x7f):(_nMcsRate)\r
+#define        LEGACY_WIRELESS_MODE    IEEE_MODE_MASK\r
+\r
+#define CURRENT_RATE(WirelessMode, LegacyRate, HTRate) \\r
+                                       ((WirelessMode & (LEGACY_WIRELESS_MODE))!=0)?\\r
+                                               (LegacyRate):\\r
+                                               (PICK_RATE(LegacyRate, HTRate))\r
+\r
+\r
+\r
+#define        RATE_ADPT_1SS_MASK              0xFF\r
+#define        RATE_ADPT_2SS_MASK              0xF0 
+#define        RATE_ADPT_MCS32_MASK            0x01\r
+\r
+#define        IS_11N_MCS_RATE(rate)           (rate&0x80)\r
+\r
+typedef enum _HT_AGGRE_SIZE{\r
+       HT_AGG_SIZE_8K = 0,\r
+       HT_AGG_SIZE_16K = 1,\r
+       HT_AGG_SIZE_32K = 2,\r
+       HT_AGG_SIZE_64K = 3,\r
+}HT_AGGRE_SIZE_E, *PHT_AGGRE_SIZE_E;\r
+\r
+typedef enum _HT_IOT_PEER\r
+{\r
+       HT_IOT_PEER_UNKNOWN = 0,\r
+       HT_IOT_PEER_REALTEK = 1,\r
+       HT_IOT_PEER_REALTEK_92SE = 2,\r
+       HT_IOT_PEER_BROADCOM = 3,\r
+       HT_IOT_PEER_RALINK = 4,\r
+       HT_IOT_PEER_ATHEROS = 5,\r
+       HT_IOT_PEER_CISCO= 6,\r
+       HT_IOT_PEER_MARVELL=7,\r
+       HT_IOT_PEER_92U_SOFTAP = 8,\r
+       HT_IOT_PEER_SELF_SOFTAP = 9,\r
+       HT_IOT_PEER_MAX = 10,\r
+}HT_IOT_PEER_E, *PHTIOT_PEER_E;\r
+\r
+typedef enum _HT_IOT_ACTION{\r
+       HT_IOT_ACT_TX_USE_AMSDU_4K = 0x00000001,\r
+       HT_IOT_ACT_TX_USE_AMSDU_8K = 0x00000002,        \r
+       HT_IOT_ACT_DISABLE_MCS14 = 0x00000004,\r
+       HT_IOT_ACT_DISABLE_MCS15 = 0x00000008,\r
+       HT_IOT_ACT_DISABLE_ALL_2SS = 0x00000010,\r
+       HT_IOT_ACT_DISABLE_EDCA_TURBO = 0x00000020,\r
+       HT_IOT_ACT_MGNT_USE_CCK_6M = 0x00000040,\r
+       HT_IOT_ACT_CDD_FSYNC = 0x00000080,\r
+       HT_IOT_ACT_PURE_N_MODE = 0x00000100,\r
+       HT_IOT_ACT_FORCED_CTS2SELF = 0x00000200,\r
+       HT_IOT_ACT_FORCED_RTS = 0x00000400,\r
+       HT_IOT_ACT_AMSDU_ENABLE = 0x00000800,\r
+       HT_IOT_ACT_REJECT_ADDBA_REQ = 0x00001000,\r
+       HT_IOT_ACT_ALLOW_PEER_AGG_ONE_PKT = 0x00002000,\r
+       HT_IOT_ACT_EDCA_BIAS_ON_RX = 0x00004000,\r
+\r
+       HT_IOT_ACT_HYBRID_AGGREGATION = 0x00010000,\r
+       HT_IOT_ACT_DISABLE_SHORT_GI = 0x00020000,\r
+       HT_IOT_ACT_DISABLE_HIGH_POWER = 0x00040000,\r
+       HT_IOT_ACT_DISABLE_TX_40_MHZ = 0x00080000,\r
+       HT_IOT_ACT_TX_NO_AGGREGATION = 0x00100000,\r
+       HT_IOT_ACT_DISABLE_TX_2SS = 0x00200000,\r
+       \r
+        HT_IOT_ACT_MID_HIGHPOWER = 0x00400000,\r
+        HT_IOT_ACT_NULL_DATA_POWER_SAVING = 0x00800000,\r
+        \r
+        HT_IOT_ACT_DISABLE_CCK_RATE = 0x01000000,\r
+       HT_IOT_ACT_FORCED_ENABLE_BE_TXOP = 0x02000000,\r
+       HT_IOT_ACT_WA_IOT_Broadcom = 0x04000000,\r
+}HT_IOT_ACTION_E, *PHT_IOT_ACTION_E;\r
+\r
+typedef enum _HT_IOT_RAFUNC{\r
+       HT_IOT_RAFUNC_DISABLE_ALL = 0x00,\r
+       HT_IOT_RAFUNC_PEER_1R = 0x01,\r
+       HT_IOT_RAFUNC_TX_AMSDU = 0x02,\r
+}HT_IOT_RAFUNC, *PHT_IOT_RAFUNC;\r
+\r
+typedef enum _RT_HT_CAP{\r
+       RT_HT_CAP_USE_TURBO_AGGR = 0x01,\r
+       RT_HT_CAP_USE_LONG_PREAMBLE = 0x02,\r
+       RT_HT_CAP_USE_AMPDU = 0x04,\r
+       RT_HT_CAP_USE_WOW = 0x8,        \r
+       RT_HT_CAP_USE_SOFTAP = 0x10,    \r
+       RT_HT_CAP_USE_92SE = 0x20,\r
+}RT_HT_CAPBILITY, *PRT_HT_CAPBILITY;\r
+\r
+#endif 
+\r
diff --git a/ubuntu/rtl8192se/rtllib/rtl819x_HTProc.c b/ubuntu/rtl8192se/rtllib/rtl819x_HTProc.c
new file mode 100644 (file)
index 0000000..cc25185
--- /dev/null
@@ -0,0 +1,1664 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+#include "rtllib.h"
+#include "rtl819x_HT.h"
+u8 MCS_FILTER_ALL[16] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+
+u8 MCS_FILTER_1SS[16] = {0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+
+u16 MCS_DATA_RATE[2][2][77] = 
+       {       {       {13, 26, 39, 52, 78, 104, 117, 130, 26, 52, 78 ,104, 156, 208, 234, 260,
+                       39, 78, 117, 234, 312, 351, 390, 52, 104, 156, 208, 312, 416, 468, 520, 
+                       0, 78, 104, 130, 117, 156, 195, 104, 130, 130, 156, 182, 182, 208, 156, 195,
+                       195, 234, 273, 273, 312, 130, 156, 181, 156, 181, 208, 234, 208, 234, 260, 260, 
+                       286, 195, 234, 273, 234, 273, 312, 351, 312, 351, 390, 390, 429},                       
+                       {14, 29, 43, 58, 87, 116, 130, 144, 29, 58, 87, 116, 173, 231, 260, 289, 
+                       43, 87, 130, 173, 260, 347, 390, 433, 58, 116, 173, 231, 347, 462, 520, 578, 
+                       0, 87, 116, 144, 130, 173, 217, 116, 144, 144, 173, 202, 202, 231, 173, 217, 
+                       217, 260, 303, 303, 347, 144, 173, 202, 173, 202, 231, 260, 231, 260, 289, 289, 
+                       318, 217, 260, 303, 260, 303, 347, 390, 347, 390, 433, 433, 477}        },              
+               {       {27, 54, 81, 108, 162, 216, 243, 270, 54, 108, 162, 216, 324, 432, 486, 540, 
+                       81, 162, 243, 324, 486, 648, 729, 810, 108, 216, 324, 432, 648, 864, 972, 1080, 
+                       12, 162, 216, 270, 243, 324, 405, 216, 270, 270, 324, 378, 378, 432, 324, 405, 
+                       405, 486, 567, 567, 648, 270, 324, 378, 324, 378, 432, 486, 432, 486, 540, 540, 
+                       594, 405, 486, 567, 486, 567, 648, 729, 648, 729, 810, 810, 891},       
+                       {30, 60, 90, 120, 180, 240, 270, 300, 60, 120, 180, 240, 360, 480, 540, 600, 
+                       90, 180, 270, 360, 540, 720, 810, 900, 120, 240, 360, 480, 720, 960, 1080, 1200, 
+                       13, 180, 240, 300, 270, 360, 450, 240, 300, 300, 360, 420, 420, 480, 360, 450, 
+                       450, 540, 630, 630, 720, 300, 360, 420, 360, 420, 480, 540, 480, 540, 600, 600, 
+                       660, 450, 540, 630, 540, 630, 720, 810, 720, 810, 900, 900, 990}        }       
+       };
+
+static u8 UNKNOWN_BORADCOM[3] = {0x00, 0x14, 0xbf};
+static u8 LINKSYSWRT330_LINKSYSWRT300_BROADCOM[3] = {0x00, 0x1a, 0x70};
+static u8 LINKSYSWRT350_LINKSYSWRT150_BROADCOM[3] = {0x00, 0x1d, 0x7e};
+static u8 BELKINF5D8233V1_RALINK[3] = {0x00, 0x17, 0x3f};      
+static u8 BELKINF5D82334V3_RALINK[3] = {0x00, 0x1c, 0xdf};
+static u8 PCI_RALINK[3] = {0x00, 0x90, 0xcc};
+static u8 EDIMAX_RALINK[3] = {0x00, 0x0e, 0x2e};
+static u8 AIRLINK_RALINK[3] = {0x00, 0x18, 0x02};
+static u8 DLINK_ATHEROS_1[3] = {0x00, 0x1c, 0xf0};
+static u8 DLINK_ATHEROS_2[3] = {0x00, 0x21, 0x91};
+static u8 CISCO_BROADCOM[3] = {0x00, 0x17, 0x94};
+#if defined(RTL8192SU)
+static u8 NETGEAR_BROADCOM[3] = {0x00, 0x1f, 0x33};
+#endif
+static u8 LINKSYS_MARVELL_4400N[3] = {0x00, 0x14, 0xa4}; 
+void HTUpdateDefaultSetting(struct rtllib_device* ieee)
+{
+       PRT_HIGH_THROUGHPUT     pHTInfo = ieee->pHTInfo;
+       
+#ifdef RTL8192CE
+       pHTInfo->bRDGEnable = 0;
+#endif
+       
+       pHTInfo->bRegShortGI20MHz= 1;
+       pHTInfo->bRegShortGI40MHz= 1;
+
+       pHTInfo->bRegBW40MHz = 1;
+
+       if(pHTInfo->bRegBW40MHz)
+               pHTInfo->bRegSuppCCK = 1;
+       else
+               pHTInfo->bRegSuppCCK = true;
+
+       pHTInfo->nAMSDU_MaxSize = 7935UL;
+       pHTInfo->bAMSDU_Support = 0;
+
+       pHTInfo->bAMPDUEnable = 1; 
+       pHTInfo->AMPDU_Factor = 2; 
+       pHTInfo->MPDU_Density = 0;
+
+       pHTInfo->SelfMimoPs = 3;
+       if(pHTInfo->SelfMimoPs == 2)
+               pHTInfo->SelfMimoPs = 3;
+       ieee->bTxDisableRateFallBack = 0;
+       ieee->bTxUseDriverAssingedRate = 0;     
+
+       ieee->bTxEnableFwCalcDur = 1;
+
+       pHTInfo->bRegRT2RTAggregation = 1;
+       
+       pHTInfo->bRegRxReorderEnable = 1;
+       pHTInfo->RxReorderWinSize = 64;
+       pHTInfo->RxReorderPendingTime = 30;
+
+#ifdef USB_TX_DRIVER_AGGREGATION_ENABLE
+       pHTInfo->UsbTxAggrNum = 4;
+#endif
+#ifdef USB_RX_AGGREGATION_SUPPORT
+#ifdef RTL8192SU
+       pHTInfo->UsbRxFwAggrEn = 1;
+       pHTInfo->UsbRxFwAggrPageNum = 48;
+       pHTInfo->UsbRxFwAggrPacketNum = 8;
+       pHTInfo->UsbRxFwAggrTimeout = 4;
+       pHTInfo->UsbRxPageSize= 128;
+#else
+       pHTInfo->UsbRxFwAggrEn = 1;
+       pHTInfo->UsbRxFwAggrPageNum = 24;
+       pHTInfo->UsbRxFwAggrPacketNum = 8;
+       pHTInfo->UsbRxFwAggrTimeout = 8; 
+#endif
+#endif
+       
+
+}
+void HTDebugHTCapability(u8* CapIE, u8* TitleString )
+{
+       
+       static u8       EWC11NHTCap[] = {0x00, 0x90, 0x4c, 0x33};       
+       PHT_CAPABILITY_ELE              pCapELE;
+       
+       if(!memcmp(CapIE, EWC11NHTCap, sizeof(EWC11NHTCap)))
+       {
+               RTLLIB_DEBUG(RTLLIB_DL_HT, "EWC IE in %s()\n", __FUNCTION__);
+               pCapELE = (PHT_CAPABILITY_ELE)(&CapIE[4]);              
+       }else
+               pCapELE = (PHT_CAPABILITY_ELE)(&CapIE[0]);              
+       
+       RTLLIB_DEBUG(RTLLIB_DL_HT, "<Log HT Capability>. Called by %s\n", TitleString );
+
+       RTLLIB_DEBUG(RTLLIB_DL_HT,  "\tSupported Channel Width = %s\n", (pCapELE->ChlWidth)?"20MHz": "20/40MHz");
+       RTLLIB_DEBUG(RTLLIB_DL_HT,  "\tSupport Short GI for 20M = %s\n", (pCapELE->ShortGI20Mhz)?"YES": "NO");
+       RTLLIB_DEBUG(RTLLIB_DL_HT,  "\tSupport Short GI for 40M = %s\n", (pCapELE->ShortGI40Mhz)?"YES": "NO");
+       RTLLIB_DEBUG(RTLLIB_DL_HT,  "\tSupport TX STBC = %s\n", (pCapELE->TxSTBC)?"YES": "NO");
+       RTLLIB_DEBUG(RTLLIB_DL_HT,  "\tMax AMSDU Size = %s\n", (pCapELE->MaxAMSDUSize)?"3839": "7935");
+       RTLLIB_DEBUG(RTLLIB_DL_HT,  "\tSupport CCK in 20/40 mode = %s\n", (pCapELE->DssCCk)?"YES": "NO");
+       RTLLIB_DEBUG(RTLLIB_DL_HT,  "\tMax AMPDU Factor = %d\n", pCapELE->MaxRxAMPDUFactor);
+       RTLLIB_DEBUG(RTLLIB_DL_HT,  "\tMPDU Density = %d\n", pCapELE->MPDUDensity);
+       RTLLIB_DEBUG(RTLLIB_DL_HT,  "\tMCS Rate Set = [%x][%x][%x][%x][%x]\n", pCapELE->MCS[0],\
+                               pCapELE->MCS[1], pCapELE->MCS[2], pCapELE->MCS[3], pCapELE->MCS[4]);
+       return;
+               
+}
+void HTDebugHTInfo(u8* InfoIE, u8* TitleString)
+{
+       
+       static u8       EWC11NHTInfo[] = {0x00, 0x90, 0x4c, 0x34};      
+       PHT_INFORMATION_ELE             pHTInfoEle;
+       
+       if(!memcmp(InfoIE, EWC11NHTInfo, sizeof(EWC11NHTInfo)))
+       {
+               RTLLIB_DEBUG(RTLLIB_DL_HT, "EWC IE in %s()\n", __FUNCTION__);
+               pHTInfoEle = (PHT_INFORMATION_ELE)(&InfoIE[4]);                 
+       }else
+               pHTInfoEle = (PHT_INFORMATION_ELE)(&InfoIE[0]);
+       
+               
+       RTLLIB_DEBUG(RTLLIB_DL_HT, "<Log HT Information Element>. Called by %s\n", TitleString);
+
+       RTLLIB_DEBUG(RTLLIB_DL_HT, "\tPrimary channel = %d\n", pHTInfoEle->ControlChl);
+       RTLLIB_DEBUG(RTLLIB_DL_HT, "\tSenondary channel =");
+       switch(pHTInfoEle->ExtChlOffset)
+       {
+               case 0:
+                       RTLLIB_DEBUG(RTLLIB_DL_HT, "Not Present\n");            
+                       break;
+               case 1:
+                       RTLLIB_DEBUG(RTLLIB_DL_HT, "Upper channel\n");
+                       break;
+               case 2:
+                       RTLLIB_DEBUG(RTLLIB_DL_HT, "Reserved. Eooro!!!\n");             
+                       break;
+               case 3:
+                       RTLLIB_DEBUG(RTLLIB_DL_HT, "Lower Channel\n");          
+                       break;
+       }
+       RTLLIB_DEBUG(RTLLIB_DL_HT, "\tRecommended channel width = %s\n", (pHTInfoEle->RecommemdedTxWidth)?"20Mhz": "40Mhz");
+
+       RTLLIB_DEBUG(RTLLIB_DL_HT, "\tOperation mode for protection = ");
+       switch(pHTInfoEle->OptMode)
+       {
+               case 0:
+                       RTLLIB_DEBUG(RTLLIB_DL_HT, "No Protection\n");          
+                       break;
+               case 1:
+                       RTLLIB_DEBUG(RTLLIB_DL_HT, "HT non-member protection mode\n");
+                       break;
+               case 2:
+                       RTLLIB_DEBUG(RTLLIB_DL_HT, "Suggest to open protection\n");             
+                       break;
+               case 3:
+                       RTLLIB_DEBUG(RTLLIB_DL_HT, "HT mixed mode\n");          
+                       break;
+       }
+
+       RTLLIB_DEBUG(RTLLIB_DL_HT, "\tBasic MCS Rate Set = [%x][%x][%x][%x][%x]\n", pHTInfoEle->BasicMSC[0],\
+                               pHTInfoEle->BasicMSC[1], pHTInfoEle->BasicMSC[2], pHTInfoEle->BasicMSC[3], pHTInfoEle->BasicMSC[4]);
+       return;
+}
+
+bool IsHTHalfNmode40Bandwidth(struct rtllib_device* ieee)
+{
+       bool                    retValue = false;
+       PRT_HIGH_THROUGHPUT      pHTInfo = ieee->pHTInfo;
+
+       if(pHTInfo->bCurrentHTSupport == false )        
+               retValue = false;
+       else if(pHTInfo->bRegBW40MHz == false)  
+               retValue = false;
+       else if(!ieee->GetHalfNmodeSupportByAPsHandler(ieee->dev))      
+               retValue = false;
+       else if(((PHT_CAPABILITY_ELE)(pHTInfo->PeerHTCapBuf))->ChlWidth) 
+               retValue = true;
+       else
+               retValue = false;
+
+       return retValue;        
+}
+
+bool IsHTHalfNmodeSGI(struct rtllib_device* ieee, bool is40MHz)
+{
+       bool                    retValue = false;
+       PRT_HIGH_THROUGHPUT      pHTInfo = ieee->pHTInfo;
+
+       if(pHTInfo->bCurrentHTSupport == false )        
+               retValue = false;
+       else if(!ieee->GetHalfNmodeSupportByAPsHandler(ieee->dev))      
+               retValue = false;
+       else if(is40MHz) 
+       {
+               if(((PHT_CAPABILITY_ELE)(pHTInfo->PeerHTCapBuf))->ShortGI40Mhz) 
+                       retValue = true;
+               else
+                       retValue = false;
+       }
+       else
+       {
+               if(((PHT_CAPABILITY_ELE)(pHTInfo->PeerHTCapBuf))->ShortGI20Mhz) 
+                       retValue = true;
+               else
+                       retValue = false;
+       }       
+
+       return retValue;        
+}
+
+u16 HTHalfMcsToDataRate(struct rtllib_device* ieee,    u8      nMcsRate)
+{
+       
+       u8      is40MHz;
+       u8      isShortGI;
+       
+       is40MHz  =  (IsHTHalfNmode40Bandwidth(ieee))?1:0;
+       isShortGI = (IsHTHalfNmodeSGI(ieee, is40MHz))? 1:0;
+                                               
+       return MCS_DATA_RATE[is40MHz][isShortGI][(nMcsRate&0x7f)];
+}
+
+
+u16 HTMcsToDataRate( struct rtllib_device* ieee, u8 nMcsRate)
+{
+       PRT_HIGH_THROUGHPUT     pHTInfo = ieee->pHTInfo;
+       
+       u8      is40MHz = (pHTInfo->bCurBW40MHz)?1:0;
+       u8      isShortGI = (pHTInfo->bCurBW40MHz)?
+                                               ((pHTInfo->bCurShortGI40MHz)?1:0):
+                                               ((pHTInfo->bCurShortGI20MHz)?1:0);
+       return MCS_DATA_RATE[is40MHz][isShortGI][(nMcsRate&0x7f)];
+}
+
+u16  TxCountToDataRate( struct rtllib_device* ieee, u8 nDataRate)
+{
+       u16             CCKOFDMRate[12] = {0x02 , 0x04 , 0x0b , 0x16 , 0x0c , 0x12 , 0x18 , 0x24 , 0x30 , 0x48 , 0x60 , 0x6c};
+       u8      is40MHz = 0;
+       u8      isShortGI = 0;
+       
+       if(nDataRate < 12)
+       {
+               return CCKOFDMRate[nDataRate];
+       }
+       else
+       {
+               if (nDataRate >= 0x10 && nDataRate <= 0x1f)
+               {
+                       is40MHz = 0;
+                       isShortGI = 0;
+
+               }
+               else if(nDataRate >=0x20  && nDataRate <= 0x2f ) 
+               {
+                       is40MHz = 1;
+                       isShortGI = 0;          
+
+               }
+               else if(nDataRate >= 0x30  && nDataRate <= 0x3f )  
+               {
+                       is40MHz = 0;
+                       isShortGI = 1;          
+
+               }
+               else if(nDataRate >= 0x40  && nDataRate <= 0x4f ) 
+               {
+                       is40MHz = 1;
+                       isShortGI = 1;          
+
+               }
+               return MCS_DATA_RATE[is40MHz][isShortGI][nDataRate&0xf];
+       }
+}
+
+
+
+bool IsHTHalfNmodeAPs(struct rtllib_device* ieee)
+{
+       bool                    retValue = false;
+       struct rtllib_network* net = &ieee->current_network;
+#if 0
+       if(ieee->bHalfNMode == false)
+               retValue = false;               
+       else
+#endif         
+       if((memcmp(net->bssid, BELKINF5D8233V1_RALINK, 3)==0) ||
+                    (memcmp(net->bssid, BELKINF5D82334V3_RALINK, 3)==0) ||
+                    (memcmp(net->bssid, PCI_RALINK, 3)==0) ||
+                    (memcmp(net->bssid, EDIMAX_RALINK, 3)==0) ||
+                    (memcmp(net->bssid, AIRLINK_RALINK, 3)==0) ||
+                    (net->ralink_cap_exist))
+               retValue = true;
+       else if((memcmp(net->bssid, UNKNOWN_BORADCOM, 3)==0) ||
+                   (memcmp(net->bssid, LINKSYSWRT330_LINKSYSWRT300_BROADCOM, 3)==0)||
+                   (memcmp(net->bssid, LINKSYSWRT350_LINKSYSWRT150_BROADCOM, 3)==0)||
+                   (net->broadcom_cap_exist))
+                 retValue = true;
+       else if(net->bssht.bdRT2RTAggregation)
+               retValue = true;
+       else
+               retValue = false;
+
+       return retValue;
+}
+
+void HTIOTPeerDetermine(struct rtllib_device* ieee)
+{
+       PRT_HIGH_THROUGHPUT     pHTInfo = ieee->pHTInfo;
+       struct rtllib_network* net = &ieee->current_network;
+       if(net->bssht.bdRT2RTAggregation){
+               pHTInfo->IOTPeer = HT_IOT_PEER_REALTEK;
+               if(net->bssht.RT2RT_HT_Mode & RT_HT_CAP_USE_92SE){
+                       pHTInfo->IOTPeer = HT_IOT_PEER_REALTEK_92SE;
+               }
+               if(net->bssht.RT2RT_HT_Mode & RT_HT_CAP_USE_SOFTAP){
+                       pHTInfo->IOTPeer = HT_IOT_PEER_92U_SOFTAP;
+               }
+       }
+       else if(net->broadcom_cap_exist)
+               pHTInfo->IOTPeer = HT_IOT_PEER_BROADCOM;
+       else if((memcmp(net->bssid, UNKNOWN_BORADCOM, 3)==0) ||
+                       (memcmp(net->bssid, LINKSYSWRT330_LINKSYSWRT300_BROADCOM, 3)==0)||
+                       (memcmp(net->bssid, LINKSYSWRT350_LINKSYSWRT150_BROADCOM, 3)==0)/*||
+                       (memcmp(net->bssid, NETGEAR834Bv2_BROADCOM, 3)==0) */)
+               pHTInfo->IOTPeer = HT_IOT_PEER_BROADCOM;
+       else if((memcmp(net->bssid, BELKINF5D8233V1_RALINK, 3)==0) ||
+                       (memcmp(net->bssid, BELKINF5D82334V3_RALINK, 3)==0) ||
+                       (memcmp(net->bssid, PCI_RALINK, 3)==0) ||
+                       (memcmp(net->bssid, EDIMAX_RALINK, 3)==0) || 
+                       (memcmp(net->bssid, AIRLINK_RALINK, 3)==0) ||
+                        net->ralink_cap_exist)
+               pHTInfo->IOTPeer = HT_IOT_PEER_RALINK;
+       else if((net->atheros_cap_exist )|| 
+               (memcmp(net->bssid, DLINK_ATHEROS_1, 3) == 0)||
+               (memcmp(net->bssid, DLINK_ATHEROS_2, 3) == 0))
+               pHTInfo->IOTPeer = HT_IOT_PEER_ATHEROS;
+       else if((memcmp(net->bssid, CISCO_BROADCOM, 3)==0)||net->cisco_cap_exist)
+               pHTInfo->IOTPeer = HT_IOT_PEER_CISCO;
+       else if ((memcmp(net->bssid, LINKSYS_MARVELL_4400N, 3) == 0) ||
+                 net->marvell_cap_exist)
+               pHTInfo->IOTPeer = HT_IOT_PEER_MARVELL;
+       else
+               pHTInfo->IOTPeer = HT_IOT_PEER_UNKNOWN;
+
+       RTLLIB_DEBUG(RTLLIB_DL_IOT, "Joseph debug!! IOTPEER: %x\n", pHTInfo->IOTPeer);
+}
+
+u8 HTIOTActIsDisableMCS14(struct rtllib_device* ieee, u8* PeerMacAddr)
+{
+       u8 ret = 0;
+#if 0
+#if (HAL_CODE_BASE==RTL8192 && DEV_BUS_TYPE==USB_INTERFACE)
+       if((memcmp(PeerMacAddr, UNKNOWN_BORADCOM, 3)==0) ||
+               (memcmp(PeerMacAddr, LINKSYSWRT330_LINKSYSWRT300_BROADCOM, 3)==0)       
+           )
+       {
+               ret = 1;
+       }
+
+               
+       if(pHTInfo->bCurrentRT2RTAggregation)
+       {
+               ret = 1;
+       }
+#endif
+#endif         
+       return ret;
+ }
+
+
+bool HTIOTActIsDisableMCS15(struct rtllib_device* ieee)
+{
+       bool retValue = false;
+
+#if defined(RTL8192U)
+       if(ieee->current_network.bssht.bdBandWidth == HT_CHANNEL_WIDTH_20_40)
+       retValue = true;
+       else
+               retValue = false;
+#endif
+
+       
+       return retValue;
+}
+
+bool HTIOTActIsDisableMCSTwoSpatialStream(struct rtllib_device* ieee)
+{
+       bool retValue = false;
+#ifdef RTL8192U
+       struct rtllib_network* net = &ieee->current_network;
+
+       if((ieee->pHTInfo->bCurrentHTSupport == true) && (ieee->pairwise_key_type == KEY_TYPE_CCMP))
+       {
+               if((memcmp(net->bssid, BELKINF5D8233V1_RALINK, 3)==0) ||
+                               (memcmp(net->bssid, PCI_RALINK, 3)==0) ||
+                               (memcmp(net->bssid, EDIMAX_RALINK, 3)==0))
+               {
+                       retValue = false;
+               }
+       }
+#endif
+#if defined(RTL8192SU) || defined RTL8192CE
+       PRT_HIGH_THROUGHPUT     pHTInfo = ieee->pHTInfo;
+       if (ieee->rtllib_ap_sec_type && 
+               (ieee->rtllib_ap_sec_type(ieee)&(SEC_ALG_WEP|SEC_ALG_TKIP)))
+       {
+               if( (pHTInfo->IOTPeer != HT_IOT_PEER_ATHEROS) &&
+                       (pHTInfo->IOTPeer != HT_IOT_PEER_UNKNOWN) &&
+                       (pHTInfo->IOTPeer != HT_IOT_PEER_MARVELL) &&
+                       (pHTInfo->IOTPeer != HT_IOT_PEER_REALTEK_92SE) &&
+                       (pHTInfo->IOTPeer != HT_IOT_PEER_RALINK) )
+                       retValue = true;
+       }
+#elif defined(RTL8192SE) 
+       PRT_HIGH_THROUGHPUT     pHTInfo = ieee->pHTInfo;
+       if (ieee->rtllib_ap_sec_type && 
+               (ieee->rtllib_ap_sec_type(ieee)&SEC_ALG_TKIP)) {
+                       if(pHTInfo->IOTPeer == HT_IOT_PEER_RALINK){
+                               retValue = true;
+                       }
+               }
+#endif
+       return retValue;
+}
+
+u8 HTIOTActIsDisableEDCATurbo(struct rtllib_device*    ieee, u8* PeerMacAddr)
+{
+       u8      retValue = false;       
+       
+       return retValue;
+#if 0
+       if((memcmp(PeerMacAddr, UNKNOWN_BORADCOM, 3)==0)|| 
+               (memcmp(PeerMacAddr, LINKSYSWRT330_LINKSYSWRT300_BROADCOM, 3)==0)||
+               (memcmp(PeerMacAddr, LINKSYSWRT350_LINKSYSWRT150_BROADCOM, 3)==0))
+
+       {
+               retValue = 1;   
+       }
+
+       return retValue;
+#endif
+}
+
+
+bool HTIOTActIsEnableBETxOPLimit(struct rtllib_device* ieee)
+{
+       bool    retValue = false;
+
+#if defined RTL8192SU 
+       if(ieee->mode == IEEE_G)
+               retValue = true;
+#elif defined RTL8192CE
+       if(ieee->mode == IEEE_G ||
+               (ieee->rtllib_ap_sec_type(ieee)&(SEC_ALG_WEP|SEC_ALG_TKIP)))
+               retValue = true;
+#endif
+
+       return retValue;
+}
+
+
+u8 HTIOTActIsMgntUseCCK6M(struct rtllib_device* ieee,struct rtllib_network *network)
+{
+       u8      retValue = 0;
+
+               
+#if (defined RTL8192U || defined RTL8192E || defined RTL8190P) 
+       {               
+       if(ieee->pHTInfo->IOTPeer == HT_IOT_PEER_BROADCOM)      
+       {
+               retValue = 1;
+       }       
+       }
+#endif
+
+       return retValue;
+}
+
+u8
+HTIOTActWAIOTBroadcom(struct rtllib_device* ieee)
+{
+       PRT_HIGH_THROUGHPUT     pHTInfo = ieee->pHTInfo;
+       u8              retValue = false;
+       u8              boundary=59;
+
+       pHTInfo->bWAIotBroadcom = false;
+       if(ieee->pHTInfo->IOTPeer == HT_IOT_PEER_BROADCOM)      
+       {       
+               if(ieee->current_network.bssht.bdBandWidth == HT_CHANNEL_WIDTH_20_40)           
+               {       
+                       if(!(pHTInfo->bCurBW40MHz))
+                       {       
+                               if(ieee->current_network.mode != WIRELESS_MODE_B)
+                               {
+                                       pHTInfo->bWAIotBroadcom = true;
+                                       
+                                       if(ieee->b_customer_lenovo_id == true)
+                                               boundary = 30;
+
+                                       if( ieee->current_network.RSSI >= boundary)
+                                               retValue = true;
+                               }
+                       }else{
+                               ;
+                       }
+               }
+       }
+       return retValue;
+}
+
+u8 HTIOTActIsForcedCTS2Self(struct rtllib_device *ieee, struct rtllib_network *network)
+{
+       u8      retValue = 0;
+#if (defined RTL8192SE || defined RTL8192SU || defined RTL8192CE)
+       if((ieee->pHTInfo->IOTPeer == HT_IOT_PEER_MARVELL) ||(ieee->pHTInfo->IOTPeer == HT_IOT_PEER_ATHEROS) )
+#else
+       if(ieee->pHTInfo->IOTPeer == HT_IOT_PEER_MARVELL)
+#endif
+       {
+               retValue = 1;
+       }
+       
+       return retValue;
+}
+
+u8 HTIOTActIsForcedRTSCTS(struct rtllib_device *ieee, struct rtllib_network *network)
+{
+       u8      retValue = 0;
+#if defined(RTL8192SE) || defined(RTL8192SU) 
+       if(ieee->pHTInfo->bCurrentHTSupport)
+       {
+               if((ieee->pHTInfo->IOTPeer != HT_IOT_PEER_REALTEK)&&
+                  (ieee->pHTInfo->IOTPeer != HT_IOT_PEER_REALTEK_92SE))
+       {
+                       if((ieee->pHTInfo->IOTAction & HT_IOT_ACT_TX_NO_AGGREGATION) == 0)
+                               retValue = 1;
+               }
+       }
+#endif
+       return retValue;
+}
+
+u8
+HTIOTActIsForcedAMSDU8K(struct rtllib_device *ieee, struct rtllib_network *network)
+{
+       u8 retValue = 0;
+
+       return retValue;
+}
+
+u8 HTIOTActIsCCDFsync(struct rtllib_device *ieee)
+{
+       u8      retValue = 0;
+#if (defined RTL8190P || defined RTL8192E || defined RTL8192U  ||defined RTL8192SE) 
+       if(ieee->pHTInfo->IOTPeer == HT_IOT_PEER_BROADCOM)
+       {
+               retValue = 1;
+       }
+#endif 
+       return retValue;
+}
+       
+u8
+HTIOCActRejcectADDBARequest(struct rtllib_network *network)
+{
+       u8      retValue = 0;
+#if (defined RTL8192SE || defined RTL8192SU || defined RTL8192CE)
+       {
+               
+               
+       }
+#endif
+       
+       return retValue;
+
+}
+
+u8
+  HTIOTActIsEDCABiasRx(struct rtllib_device* ieee,struct rtllib_network *network)
+{
+       u8      retValue = 0;
+#ifdef RTL8192SU
+       PRT_HIGH_THROUGHPUT     pHTInfo = ieee->pHTInfo;
+       {
+               if(pHTInfo->IOTPeer==HT_IOT_PEER_ATHEROS || 
+                  pHTInfo->IOTPeer==HT_IOT_PEER_BROADCOM ||
+                  pHTInfo->IOTPeer==HT_IOT_PEER_RALINK)
+                       return 1;
+               
+       }
+#elif defined RTL8192CE
+       PRT_HIGH_THROUGHPUT     pHTInfo = ieee->pHTInfo;
+       {
+               if(pHTInfo->IOTPeer==HT_IOT_PEER_ATHEROS || 
+                  pHTInfo->IOTPeer==HT_IOT_PEER_RALINK)
+                       return 1;
+               
+       }
+#elif defined RTL8192SE 
+       PRT_HIGH_THROUGHPUT     pHTInfo = ieee->pHTInfo;
+       {
+            if(ieee->rtllib_ap_sec_type != NULL) 
+                if(ieee->rtllib_ap_sec_type(ieee) == SEC_ALG_CCMP)
+                    if(pHTInfo->IOTPeer==HT_IOT_PEER_RALINK){
+                        return 1;
+                    }
+               
+       }
+#endif
+       return retValue;
+}
+
+u8
+HTIOTActDisableShortGI(struct rtllib_device* ieee,struct rtllib_network *network)
+{
+       u8      retValue = 0;
+       PRT_HIGH_THROUGHPUT     pHTInfo = ieee->pHTInfo;
+
+       if(pHTInfo->IOTPeer==HT_IOT_PEER_RALINK)
+       {
+                       retValue = 1;
+       }
+
+       return retValue;
+}
+
+u8
+HTIOTActDisableHighPower(struct rtllib_device* ieee,struct rtllib_network *network)
+{
+       u8      retValue = 0;
+#if (defined RTL8192SE || defined RTL8192SU || defined RTL8192CE)
+       PRT_HIGH_THROUGHPUT     pHTInfo = ieee->pHTInfo;
+#endif
+
+#ifdef RTL8192SU
+       if(pHTInfo->IOTPeer==HT_IOT_PEER_RALINK ||
+               pHTInfo->IOTPeer==HT_IOT_PEER_REALTEK ||
+               pHTInfo->IOTPeer==HT_IOT_PEER_REALTEK_92SE)
+       {
+                       retValue = 1;
+       }
+#elif defined RTL8192SE || defined RTL8192CE
+       if(pHTInfo->IOTPeer==HT_IOT_PEER_RALINK ||
+               pHTInfo->IOTPeer==HT_IOT_PEER_REALTEK )
+       {
+                       retValue = 1;
+       }
+#endif
+       return retValue;
+}
+
+void
+HTIOTActDetermineRaFunc(struct rtllib_device* ieee,    bool    bPeerRx2ss)
+{
+       PRT_HIGH_THROUGHPUT     pHTInfo = ieee->pHTInfo;
+       pHTInfo->IOTRaFunc &= HT_IOT_RAFUNC_DISABLE_ALL;
+
+       if(pHTInfo->IOTPeer == HT_IOT_PEER_RALINK && !bPeerRx2ss)
+               pHTInfo->IOTRaFunc |= HT_IOT_RAFUNC_PEER_1R;
+
+       if(pHTInfo->IOTAction & HT_IOT_ACT_AMSDU_ENABLE)
+               pHTInfo->IOTRaFunc |= HT_IOT_RAFUNC_TX_AMSDU;
+
+}
+
+
+u8
+HTIOTActIsDisableTx40MHz(struct rtllib_device* ieee,struct rtllib_network *network)
+{
+       u8      retValue = 0;
+
+#if (defined RTL8192SU || defined RTL8192SE || defined RTL8192CE)
+       PRT_HIGH_THROUGHPUT     pHTInfo = ieee->pHTInfo;
+       if(     (KEY_TYPE_WEP104 == ieee->pairwise_key_type) || 
+               (KEY_TYPE_WEP40 == ieee->pairwise_key_type) ||
+               (KEY_TYPE_WEP104 == ieee->group_key_type) ||
+               (KEY_TYPE_WEP40 == ieee->group_key_type) ||
+               (KEY_TYPE_TKIP == ieee->pairwise_key_type) )
+       {
+               if((pHTInfo->IOTPeer==HT_IOT_PEER_REALTEK) && (network->bssht.bdSupportHT)) 
+                       retValue = 1;
+       }
+#endif
+
+       return retValue;
+}
+
+u8
+HTIOTActIsTxNoAggregation(struct rtllib_device* ieee,struct rtllib_network *network)
+{
+       u8 retValue = 0;
+
+#if (defined RTL8192SU || defined RTL8192SE || defined RTL8192CE)
+       PRT_HIGH_THROUGHPUT     pHTInfo = ieee->pHTInfo;
+       if(     (KEY_TYPE_WEP104 == ieee->pairwise_key_type) || 
+               (KEY_TYPE_WEP40 == ieee->pairwise_key_type) ||
+               (KEY_TYPE_WEP104 == ieee->group_key_type) ||
+               (KEY_TYPE_WEP40 == ieee->group_key_type) ||
+               (KEY_TYPE_TKIP == ieee->pairwise_key_type) )
+       {
+               if(pHTInfo->IOTPeer==HT_IOT_PEER_REALTEK)
+                       retValue = 1;
+       }
+#endif
+
+       return retValue;
+}
+
+
+u8
+HTIOTActIsDisableTx2SS(struct rtllib_device* ieee,struct rtllib_network *network)
+{
+       u8      retValue = 0;
+
+#if (defined RTL8192SU || defined RTL8192SE || defined RTL8192CE)
+       PRT_HIGH_THROUGHPUT     pHTInfo = ieee->pHTInfo;
+       if(     (KEY_TYPE_WEP104 == ieee->pairwise_key_type) || 
+               (KEY_TYPE_WEP40 == ieee->pairwise_key_type) ||
+               (KEY_TYPE_WEP104 == ieee->group_key_type) ||
+               (KEY_TYPE_WEP40 == ieee->group_key_type) ||
+               (KEY_TYPE_TKIP == ieee->pairwise_key_type) )
+       {
+               if((pHTInfo->IOTPeer==HT_IOT_PEER_REALTEK) && (network->bssht.bdSupportHT))
+                       retValue = 1;
+       }
+#endif
+
+       return retValue;
+}
+
+
+bool HTIOCActIsDisableCckRate(struct rtllib_device* ieee,struct rtllib_network *network)
+{
+       bool    retValue = false;
+#if defined(RTL8192SU)
+       PRT_HIGH_THROUGHPUT     pHTInfo = ieee->pHTInfo;
+       if(pHTInfo->IOTPeer == HT_IOT_PEER_BROADCOM)
+       {
+               if((memcmp(network->bssid, NETGEAR_BROADCOM, 3)==0)
+                       && (network->bssht.bdBandWidth == HT_CHANNEL_WIDTH_20_40))
+                       return true;
+       }
+#endif
+       return retValue;
+}
+
+
+bool HTIOCActAllowPeerAggOnePacket(struct rtllib_device* ieee,struct rtllib_network *network)
+{
+       bool    retValue = false;
+#if defined(RTL8192SE) || defined(RTL8192SU) 
+       PRT_HIGH_THROUGHPUT     pHTInfo = ieee->pHTInfo;
+       {
+               if(ieee->VersionID<2)
+               if(pHTInfo->IOTPeer == HT_IOT_PEER_MARVELL)
+                       return true;
+               
+       }
+#endif
+       return retValue;
+}
+
+bool
+HTIOTActIsNullDataPowerSaving(struct rtllib_device* ieee,struct rtllib_network *network)
+{
+       bool    retValue = false;
+#if defined(RTL8192SE) || defined(RTL8192SU)
+       PRT_HIGH_THROUGHPUT     pHTInfo = ieee->pHTInfo;
+       {
+               if(pHTInfo->IOTPeer == HT_IOT_PEER_BROADCOM) 
+                       return true;
+               
+       }
+#endif
+       return retValue;
+}
+
+void HTResetIOTSetting(
+       PRT_HIGH_THROUGHPUT             pHTInfo
+)
+{
+       pHTInfo->IOTAction = 0;
+       pHTInfo->IOTPeer = HT_IOT_PEER_UNKNOWN;
+       pHTInfo->IOTRaFunc = 0;
+}
+
+
+#ifdef _RTL8192_EXT_PATCH_
+void HTConstructCapabilityElement(struct rtllib_device* ieee, u8* posHTCap, u8* len, u8 IsEncrypt, u8 bIsBcn)
+#else  
+void HTConstructCapabilityElement(struct rtllib_device* ieee, u8* posHTCap, u8* len, u8 IsEncrypt)
+#endif 
+{      
+       PRT_HIGH_THROUGHPUT     pHT = ieee->pHTInfo;
+       PHT_CAPABILITY_ELE      pCapELE = NULL;
+       
+       if ((posHTCap == NULL) || (pHT == NULL))
+       {
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, "posHTCap or pHTInfo can't be null in HTConstructCapabilityElement()\n");
+               return;
+       }
+       memset(posHTCap, 0, *len);      
+       if(pHT->ePeerHTSpecVer == HT_SPEC_VER_EWC)
+       {
+               u8      EWC11NHTCap[] = {0x00, 0x90, 0x4c, 0x33};       
+               memcpy(posHTCap, EWC11NHTCap, sizeof(EWC11NHTCap));
+               pCapELE = (PHT_CAPABILITY_ELE)&(posHTCap[4]);
+       }else 
+       {
+               pCapELE = (PHT_CAPABILITY_ELE)posHTCap;
+       }
+
+       pCapELE->AdvCoding              = 0; 
+       if(ieee->GetHalfNmodeSupportByAPsHandler(ieee->dev))
+       {
+               pCapELE->ChlWidth = 0;
+       }       
+       else
+       {
+#ifdef _RTL8192_EXT_PATCH_
+               if(bIsBcn)
+                       pCapELE->ChlWidth = (pHT->bCurBW40MHz?1:0);
+               else
+#endif 
+                       pCapELE->ChlWidth = (pHT->bRegBW40MHz?1:0);
+       }
+       
+       pCapELE->MimoPwrSave            = pHT->SelfMimoPs;
+       pCapELE->GreenField             = 0; 
+       pCapELE->ShortGI20Mhz           = 1; 
+       pCapELE->ShortGI40Mhz           = 1; 
+       pCapELE->TxSTBC                 = 1;
+#ifdef Rtl8192SE
+       pCapELE->TxSTBC                 = 0;
+#endif
+       pCapELE->RxSTBC                 = 0;
+       pCapELE->DelayBA                = 0;    
+       pCapELE->MaxAMSDUSize   = (MAX_RECEIVE_BUFFER_SIZE>=7935)?1:0;
+       pCapELE->DssCCk                 = ((pHT->bRegBW40MHz)?(pHT->bRegSuppCCK?1:0):0);
+       pCapELE->PSMP                   = 0; 
+       pCapELE->LSigTxopProtect        = 0; 
+
+
+       RTLLIB_DEBUG(RTLLIB_DL_HT, "TX HT cap/info ele BW=%d MaxAMSDUSize:%d DssCCk:%d\n", pCapELE->ChlWidth, pCapELE->MaxAMSDUSize, pCapELE->DssCCk);
+
+       if( IsEncrypt) 
+       {
+               pCapELE->MPDUDensity    = 7; 
+               pCapELE->MaxRxAMPDUFactor       = 2; 
+       }
+       else
+       {
+               pCapELE->MaxRxAMPDUFactor       = 3; 
+               pCapELE->MPDUDensity    = 0; 
+       }               
+
+       memcpy(pCapELE->MCS, ieee->Regdot11HTOperationalRateSet, 16);
+       if(pHT->IOTAction & HT_IOT_ACT_DISABLE_MCS15)
+               pCapELE->MCS[1] &= 0x7f;
+
+       if(pHT->IOTAction & HT_IOT_ACT_DISABLE_MCS14)
+               pCapELE->MCS[1] &= 0xbf;
+
+       if(pHT->IOTAction & HT_IOT_ACT_DISABLE_ALL_2SS)
+               pCapELE->MCS[1] &= 0x00;
+
+       if(ieee->GetHalfNmodeSupportByAPsHandler(ieee->dev))
+       {       
+               int i;
+               for(i = 1; i< 16; i++)
+                       pCapELE->MCS[i] = 0;
+       }
+       
+       memset(&pCapELE->ExtHTCapInfo, 0, 2);
+
+
+       memset(pCapELE->TxBFCap, 0, 4);
+
+       pCapELE->ASCap = 0;
+       if(pHT->ePeerHTSpecVer == HT_SPEC_VER_EWC)
+               *len = 30 + 2;
+       else
+               *len = 26 + 2;
+               
+
+               
+       
+       return;
+       
+}
+void HTConstructInfoElement(struct rtllib_device* ieee, u8* posHTInfo, u8* len, u8 IsEncrypt)
+{
+       PRT_HIGH_THROUGHPUT     pHT = ieee->pHTInfo;    
+       PHT_INFORMATION_ELE             pHTInfoEle = (PHT_INFORMATION_ELE)posHTInfo;
+       if ((posHTInfo == NULL) || (pHTInfoEle == NULL))
+       {
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, "posHTInfo or pHTInfoEle can't be null in HTConstructInfoElement()\n");
+               return;
+       }
+       
+       memset(posHTInfo, 0, *len);
+#ifdef _RTL8192_EXT_PATCH_
+       if ((ieee->iw_mode == IW_MODE_ADHOC) || (ieee->iw_mode == IW_MODE_MASTER) ||(ieee->iw_mode == IW_MODE_MESH) ) 
+#else
+       if ( (ieee->iw_mode == IW_MODE_ADHOC) || (ieee->iw_mode == IW_MODE_MASTER)) 
+#endif
+       {
+               pHTInfoEle->ControlChl                  = ieee->current_network.channel; 
+#ifdef _RTL8192_EXT_PATCH_
+               if((!ieee->only_mesh) && (ieee->iw_mode == IW_MODE_MESH) && (ieee->state == RTLLIB_LINKED))
+                       pHTInfoEle->ExtChlOffset                        = ((pHT->bRegBW40MHz == false)?HT_EXTCHNL_OFFSET_NO_EXT:
+                                                                                               ieee->APExtChlOffset);
+               else if(ieee->iw_mode == IW_MODE_MESH)
+                       pHTInfoEle->ExtChlOffset                        = ((pHT->bRegBW40MHz == false)?HT_EXTCHNL_OFFSET_NO_EXT:
+                                                                                       (ieee->current_mesh_network.channel<=6)?
+                                                                                               HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER);
+               else
+#endif
+                       pHTInfoEle->ExtChlOffset                        = ((pHT->bRegBW40MHz == false)?HT_EXTCHNL_OFFSET_NO_EXT:
+                                                                                       (ieee->current_network.channel<=6)?
+                                                                                               HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER);
+               pHTInfoEle->RecommemdedTxWidth  = pHT->bRegBW40MHz;
+               pHTInfoEle->RIFS                                        = 0;
+               pHTInfoEle->PSMPAccessOnly              = 0;
+               pHTInfoEle->SrvIntGranularity           = 0;
+               pHTInfoEle->OptMode                             = pHT->CurrentOpMode;
+               pHTInfoEle->NonGFDevPresent             = 0;
+               pHTInfoEle->DualBeacon                  = 0;
+               pHTInfoEle->SecondaryBeacon             = 0;
+               pHTInfoEle->LSigTxopProtectFull         = 0;
+               pHTInfoEle->PcoActive                           = 0;
+               pHTInfoEle->PcoPhase                            = 0;
+
+               memset(pHTInfoEle->BasicMSC, 0, 16);
+
+
+               *len = 22 + 2; 
+
+       }
+       else
+       {
+               *len = 0;
+       }       
+       return;
+}      
+
+void HTConstructRT2RTAggElement(struct rtllib_device* ieee, u8* posRT2RTAgg, u8* len)
+{
+       if (posRT2RTAgg == NULL) {
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, "posRT2RTAgg can't be null in HTConstructRT2RTAggElement()\n");
+               return;
+       }
+       memset(posRT2RTAgg, 0, *len);
+       *posRT2RTAgg++ = 0x00;
+       *posRT2RTAgg++ = 0xe0;
+       *posRT2RTAgg++ = 0x4c;
+       *posRT2RTAgg++ = 0x02;
+       *posRT2RTAgg++ = 0x01;
+
+#ifdef RTL8192CE
+       *posRT2RTAgg = 0x70;
+#else
+       *posRT2RTAgg = 0x10;
+#endif
+       
+       if(ieee->bSupportRemoteWakeUp) {
+               *posRT2RTAgg |= RT_HT_CAP_USE_WOW;
+       }
+
+       *len = 6 + 2;
+       
+       return;
+
+#ifdef TODO
+       posRT2RTAgg->Length = 6;
+#endif
+
+
+
+
+}
+
+u8 HT_PickMCSRate(struct rtllib_device* ieee, u8* pOperateMCS)
+{
+       u8                                      i;
+       if (pOperateMCS == NULL)
+       {
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, "pOperateMCS can't be null in HT_PickMCSRate()\n");
+               return false;
+       }
+
+       switch(ieee->mode)
+       {
+       case IEEE_A:
+       case IEEE_B:
+       case IEEE_G:
+                       
+                       for(i=0;i<=15;i++){
+                               pOperateMCS[i] = 0;
+                       }
+                       break;
+               
+       case IEEE_N_24G:        
+       case IEEE_N_5G:
+                       
+                       pOperateMCS[0] &=RATE_ADPT_1SS_MASK;    
+                       pOperateMCS[1] &=RATE_ADPT_2SS_MASK;
+                       pOperateMCS[3] &=RATE_ADPT_MCS32_MASK;
+                       break;
+
+       default:
+                       
+                       break;
+               
+       }
+
+       return true;
+}
+
+u8 HTGetHighestMCSRate(struct rtllib_device* ieee, u8* pMCSRateSet, u8* pMCSFilter)
+{
+       u8              i, j;
+       u8              bitMap;
+       u8              mcsRate = 0;
+       u8              availableMcsRate[16];
+       if (pMCSRateSet == NULL || pMCSFilter == NULL)
+       {
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, "pMCSRateSet or pMCSFilter can't be null in HTGetHighestMCSRate()\n");
+               return false;
+       }
+       for(i=0; i<16; i++)
+               availableMcsRate[i] = pMCSRateSet[i] & pMCSFilter[i];
+
+       for(i = 0; i < 16; i++)
+       {
+               if(availableMcsRate[i] != 0)
+                       break;
+       }
+       if(i == 16)
+               return false;
+
+       for(i = 0; i < 16; i++)
+       {
+               if(availableMcsRate[i] != 0)
+               {
+                       bitMap = availableMcsRate[i];
+                       for(j = 0; j < 8; j++)
+                       {
+                               if((bitMap%2) != 0)
+                               {
+                                       if(HTMcsToDataRate(ieee, (8*i+j)) > HTMcsToDataRate(ieee, mcsRate))
+                                               mcsRate = (8*i+j);
+                               }
+                               bitMap = bitMap>>1;
+                       }
+               }
+       }
+       return (mcsRate|0x80);
+}
+       
+u8 HTFilterMCSRate( struct rtllib_device* ieee, u8* pSupportMCS, u8* pOperateMCS)
+{
+       
+       u8 i=0;
+       
+       for(i=0;i<=15;i++){
+               pOperateMCS[i] = ieee->Regdot11TxHTOperationalRateSet[i]&pSupportMCS[i];
+       }
+
+       
+
+       HT_PickMCSRate(ieee, pOperateMCS);
+
+       if(ieee->GetHalfNmodeSupportByAPsHandler(ieee->dev))
+               pOperateMCS[1] = 0;
+       
+       for(i=2; i<=15; i++)
+               pOperateMCS[i] = 0;
+       
+       return true;
+}
+void HTSetConnectBwMode(struct rtllib_device* ieee, HT_CHANNEL_WIDTH   Bandwidth, HT_EXTCHNL_OFFSET    Offset);
+void HTOnAssocRsp(struct rtllib_device *ieee)
+{
+       PRT_HIGH_THROUGHPUT     pHTInfo = ieee->pHTInfo;
+       PHT_CAPABILITY_ELE              pPeerHTCap = NULL;
+       PHT_INFORMATION_ELE             pPeerHTInfo = NULL;
+       u16     nMaxAMSDUSize = 0;
+       u8*     pMcsFilter = NULL;
+
+       static u8                               EWC11NHTCap[] = {0x00, 0x90, 0x4c, 0x33};               
+       static u8                               EWC11NHTInfo[] = {0x00, 0x90, 0x4c, 0x34};      
+       
+       if( pHTInfo->bCurrentHTSupport == false )
+       {
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, "<=== HTOnAssocRsp(): HT_DISABLE\n");
+               return;
+       }
+       RTLLIB_DEBUG(RTLLIB_DL_HT, "===> HTOnAssocRsp_wq(): HT_ENABLE\n");
+               
+       if(!memcmp(pHTInfo->PeerHTCapBuf,EWC11NHTCap, sizeof(EWC11NHTCap)))
+               pPeerHTCap = (PHT_CAPABILITY_ELE)(&pHTInfo->PeerHTCapBuf[4]);
+       else
+               pPeerHTCap = (PHT_CAPABILITY_ELE)(pHTInfo->PeerHTCapBuf);
+
+       if(!memcmp(pHTInfo->PeerHTInfoBuf, EWC11NHTInfo, sizeof(EWC11NHTInfo)))
+               pPeerHTInfo = (PHT_INFORMATION_ELE)(&pHTInfo->PeerHTInfoBuf[4]);
+       else            
+               pPeerHTInfo = (PHT_INFORMATION_ELE)(pHTInfo->PeerHTInfoBuf);
+       
+#ifdef _RTL8192_EXT_PATCH_
+       ieee->APExtChlOffset = (HT_EXTCHNL_OFFSET)(pPeerHTInfo->ExtChlOffset);
+#endif
+       RTLLIB_DEBUG_DATA(RTLLIB_DL_DATA|RTLLIB_DL_HT, pPeerHTCap, sizeof(HT_CAPABILITY_ELE));
+       HTSetConnectBwMode(ieee, (HT_CHANNEL_WIDTH)(pPeerHTCap->ChlWidth), (HT_EXTCHNL_OFFSET)(pPeerHTInfo->ExtChlOffset));
+#if defined RTL8192SE || defined RTL8192SU || defined RTL8192CE
+       if(pHTInfo->bCurBW40MHz == true)
+#endif
+               pHTInfo->bCurTxBW40MHz = ((pPeerHTInfo->RecommemdedTxWidth == 1)?true:false);
+
+       pHTInfo->bCurShortGI20MHz= 
+               ((pHTInfo->bRegShortGI20MHz)?((pPeerHTCap->ShortGI20Mhz==1)?true:false):false);
+       pHTInfo->bCurShortGI40MHz= 
+               ((pHTInfo->bRegShortGI40MHz)?((pPeerHTCap->ShortGI40Mhz==1)?true:false):false);
+
+       pHTInfo->bCurSuppCCK = 
+               ((pHTInfo->bRegSuppCCK)?((pPeerHTCap->DssCCk==1)?true:false):false);
+
+
+       pHTInfo->bCurrent_AMSDU_Support = pHTInfo->bAMSDU_Support;
+
+       nMaxAMSDUSize = (pPeerHTCap->MaxAMSDUSize==0)?3839:7935;
+
+       if(pHTInfo->nAMSDU_MaxSize > nMaxAMSDUSize )
+               pHTInfo->nCurrent_AMSDU_MaxSize = nMaxAMSDUSize;
+       else
+               pHTInfo->nCurrent_AMSDU_MaxSize = pHTInfo->nAMSDU_MaxSize;
+
+       pHTInfo->bCurrentAMPDUEnable = pHTInfo->bAMPDUEnable;
+       if (ieee->rtllib_ap_sec_type && 
+          (ieee->rtllib_ap_sec_type(ieee)&(SEC_ALG_WEP|SEC_ALG_TKIP))){
+               if( (pHTInfo->IOTPeer== HT_IOT_PEER_ATHEROS) ||
+                               (pHTInfo->IOTPeer == HT_IOT_PEER_UNKNOWN) )
+                       pHTInfo->bCurrentAMPDUEnable = false;
+       }               
+               
+       if(!pHTInfo->bRegRT2RTAggregation)
+       {
+               if(pHTInfo->AMPDU_Factor > pPeerHTCap->MaxRxAMPDUFactor)
+                       pHTInfo->CurrentAMPDUFactor = pPeerHTCap->MaxRxAMPDUFactor;
+               else
+                       pHTInfo->CurrentAMPDUFactor = pHTInfo->AMPDU_Factor;
+
+       } else {
+#if 0  
+               osTmp= PacketGetElement( asocpdu, EID_Vendor, OUI_SUB_REALTEK_AGG, OUI_SUBTYPE_DONT_CARE);
+               if(osTmp.Length >= 5)   
+#endif
+               if (ieee->current_network.bssht.bdRT2RTAggregation)
+               {
+                       if( ieee->pairwise_key_type != KEY_TYPE_NA) 
+                               pHTInfo->CurrentAMPDUFactor = pPeerHTCap->MaxRxAMPDUFactor;
+                       else
+                               pHTInfo->CurrentAMPDUFactor = HT_AGG_SIZE_64K;
+               }else
+               {
+                       if(pPeerHTCap->MaxRxAMPDUFactor < HT_AGG_SIZE_32K)
+                               pHTInfo->CurrentAMPDUFactor = pPeerHTCap->MaxRxAMPDUFactor;
+                       else
+                               pHTInfo->CurrentAMPDUFactor = HT_AGG_SIZE_32K;
+               }
+       }
+
+#if 0
+       if(pHTInfo->MPDU_Density > pPeerHTCap->MPDUDensity)
+               pHTInfo->CurrentMPDUDensity = pHTInfo->MPDU_Density;
+       else
+               pHTInfo->CurrentMPDUDensity = pPeerHTCap->MPDUDensity;
+       if(ieee->pairwise_key_type != KEY_TYPE_NA ) 
+               pHTInfo->CurrentMPDUDensity     = 7; 
+#else
+       if(pHTInfo->MPDU_Density > pPeerHTCap->MPDUDensity)
+               pHTInfo->CurrentMPDUDensity = pHTInfo->MPDU_Density;
+       else
+               pHTInfo->CurrentMPDUDensity = pPeerHTCap->MPDUDensity;
+#endif
+#if (defined RTL8192SE || defined RTL8192SU || defined RTL8192CE)
+        if(ieee->SetHwRegHandler != NULL) {
+            ieee->SetHwRegHandler( ieee->dev, HW_VAR_SHORTGI_DENSITY,  (u8*)(&ieee->MaxMssDensity));
+            ieee->SetHwRegHandler(ieee->dev, HW_VAR_AMPDU_FACTOR, &pHTInfo->CurrentAMPDUFactor);
+            ieee->SetHwRegHandler(ieee->dev, HW_VAR_AMPDU_MIN_SPACE, &pHTInfo->CurrentMPDUDensity);
+        }
+#elif defined RTL8192CE
+        if(ieee->SetHwRegHandler != NULL) {
+            ieee->SetHwRegHandler(ieee->dev, HW_VAR_AMPDU_FACTOR, &pHTInfo->CurrentAMPDUFactor);
+            ieee->SetHwRegHandler(ieee->dev, HW_VAR_AMPDU_MIN_SPACE, &pHTInfo->CurrentMPDUDensity);
+        }
+#endif        
+#ifndef RTL8190P
+       if(pHTInfo->IOTAction & HT_IOT_ACT_TX_USE_AMSDU_8K)
+#else
+       if( 0 )
+#endif
+       {
+               pHTInfo->bCurrentAMPDUEnable = false;
+               pHTInfo->ForcedAMSDUMode = HT_AGG_FORCE_ENABLE;
+               pHTInfo->ForcedAMSDUMaxSize = 7935;
+       }
+       pHTInfo->bCurRxReorderEnable = pHTInfo->bRegRxReorderEnable;
+
+       
+       if(pPeerHTCap->MCS[0] == 0)
+               pPeerHTCap->MCS[0] = 0xff;
+               
+       HTIOTActDetermineRaFunc(ieee, ((pPeerHTCap->MCS[1])!=0));
+
+       HTFilterMCSRate(ieee, pPeerHTCap->MCS, ieee->dot11HTOperationalRateSet);
+
+       pHTInfo->PeerMimoPs = pPeerHTCap->MimoPwrSave;
+       if(pHTInfo->PeerMimoPs == MIMO_PS_STATIC)
+               pMcsFilter = MCS_FILTER_1SS;
+       else
+               pMcsFilter = MCS_FILTER_ALL;
+       ieee->HTHighestOperaRate = HTGetHighestMCSRate(ieee, ieee->dot11HTOperationalRateSet, pMcsFilter);
+       ieee->HTCurrentOperaRate = ieee->HTHighestOperaRate;
+
+       pHTInfo->CurrentOpMode = pPeerHTInfo->OptMode;
+
+}      
+
+void HTSetConnectBwModeCallback(struct rtllib_device* ieee);
+void HTInitializeHTInfo(struct rtllib_device* ieee)
+{
+       PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo;
+
+       RTLLIB_DEBUG(RTLLIB_DL_HT, "===========>%s()\n", __FUNCTION__);
+       pHTInfo->bCurrentHTSupport = false;
+
+       pHTInfo->bCurBW40MHz = false;
+       pHTInfo->bCurTxBW40MHz = false;
+
+       pHTInfo->bCurShortGI20MHz = false;
+       pHTInfo->bCurShortGI40MHz = false;
+       pHTInfo->bForcedShortGI = false;
+
+       pHTInfo->bCurSuppCCK = true;
+
+       pHTInfo->bCurrent_AMSDU_Support = false;
+       pHTInfo->nCurrent_AMSDU_MaxSize = pHTInfo->nAMSDU_MaxSize;
+#ifdef _RTL8192_EXT_PATCH_
+       pHTInfo->bCurrent_Mesh_AMSDU_Support = true;
+#endif
+       pHTInfo->CurrentMPDUDensity = pHTInfo->MPDU_Density;
+       pHTInfo->CurrentAMPDUFactor = pHTInfo->AMPDU_Factor;
+
+       memset((void*)(&(pHTInfo->SelfHTCap)), 0, sizeof(pHTInfo->SelfHTCap));
+       memset((void*)(&(pHTInfo->SelfHTInfo)), 0, sizeof(pHTInfo->SelfHTInfo));
+       memset((void*)(&(pHTInfo->PeerHTCapBuf)), 0, sizeof(pHTInfo->PeerHTCapBuf));
+       memset((void*)(&(pHTInfo->PeerHTInfoBuf)), 0, sizeof(pHTInfo->PeerHTInfoBuf));
+
+       pHTInfo->bSwBwInProgress = false;
+       pHTInfo->ChnlOp = CHNLOP_NONE;
+
+       pHTInfo->ePeerHTSpecVer = HT_SPEC_VER_IEEE;
+
+       pHTInfo->bCurrentRT2RTAggregation = false;
+       pHTInfo->bCurrentRT2RTLongSlotTime = false;
+       pHTInfo->RT2RT_HT_Mode = (RT_HT_CAPBILITY)0;
+       
+       pHTInfo->IOTPeer = 0;
+       pHTInfo->IOTAction = 0;
+       pHTInfo->IOTRaFunc = 0;
+       
+       {
+               u8* RegHTSuppRateSets = &(ieee->RegHTSuppRateSet[0]);
+               RegHTSuppRateSets[0] = 0xFF;    
+               RegHTSuppRateSets[1] = 0xFF;    
+               RegHTSuppRateSets[4] = 0x01;    
+       }
+}
+void HTInitializeBssDesc(PBSS_HT pBssHT)
+{
+
+       pBssHT->bdSupportHT = false;
+       memset(pBssHT->bdHTCapBuf, 0, sizeof(pBssHT->bdHTCapBuf));
+       pBssHT->bdHTCapLen = 0;
+       memset(pBssHT->bdHTInfoBuf, 0, sizeof(pBssHT->bdHTInfoBuf));
+       pBssHT->bdHTInfoLen = 0;
+
+       pBssHT->bdHTSpecVer= HT_SPEC_VER_IEEE;
+
+       pBssHT->bdRT2RTAggregation = false;
+       pBssHT->bdRT2RTLongSlotTime = false;
+       pBssHT->RT2RT_HT_Mode = (RT_HT_CAPBILITY)0;
+}
+
+void HTResetSelfAndSavePeerSetting(struct rtllib_device* ieee,         struct rtllib_network * pNetwork)
+{
+       PRT_HIGH_THROUGHPUT             pHTInfo = ieee->pHTInfo;
+       u8      bIOTAction = 0;
+
+       RTLLIB_DEBUG(RTLLIB_DL_HT, "==============>%s()\n", __FUNCTION__);
+       /*unmark bEnableHT flag here is the same reason why unmarked in function rtllib_softmac_new_net. WB 2008.09.10*/
+       if (pNetwork->bssht.bdSupportHT)
+       {
+               pHTInfo->bCurrentHTSupport = true;
+               pHTInfo->ePeerHTSpecVer = pNetwork->bssht.bdHTSpecVer;
+
+               if(pNetwork->bssht.bdHTCapLen > 0 &&    pNetwork->bssht.bdHTCapLen <= sizeof(pHTInfo->PeerHTCapBuf))
+                       memcpy(pHTInfo->PeerHTCapBuf, pNetwork->bssht.bdHTCapBuf, pNetwork->bssht.bdHTCapLen);
+
+               if(pNetwork->bssht.bdHTInfoLen > 0 && pNetwork->bssht.bdHTInfoLen <= sizeof(pHTInfo->PeerHTInfoBuf))
+                       memcpy(pHTInfo->PeerHTInfoBuf, pNetwork->bssht.bdHTInfoBuf, pNetwork->bssht.bdHTInfoLen);
+
+               if(pHTInfo->bRegRT2RTAggregation)
+               {
+                       pHTInfo->bCurrentRT2RTAggregation = pNetwork->bssht.bdRT2RTAggregation;
+                       pHTInfo->bCurrentRT2RTLongSlotTime = pNetwork->bssht.bdRT2RTLongSlotTime;
+                       pHTInfo->RT2RT_HT_Mode = pNetwork->bssht.RT2RT_HT_Mode;
+               }
+               else
+               {
+                       pHTInfo->bCurrentRT2RTAggregation = false;      
+                       pHTInfo->bCurrentRT2RTLongSlotTime = false;
+                       pHTInfo->RT2RT_HT_Mode = (RT_HT_CAPBILITY)0;
+               }
+       
+               HTIOTPeerDetermine(ieee);
+                                                       
+               pHTInfo->IOTAction = 0;
+               bIOTAction = HTIOTActIsDisableMCS14(ieee, pNetwork->bssid);
+               if(bIOTAction)
+                       pHTInfo->IOTAction |= HT_IOT_ACT_DISABLE_MCS14;
+
+               bIOTAction = HTIOTActIsDisableMCS15(ieee);
+               if(bIOTAction)
+                       pHTInfo->IOTAction |= HT_IOT_ACT_DISABLE_MCS15;
+
+               bIOTAction = HTIOTActIsDisableMCSTwoSpatialStream(ieee);
+               if(bIOTAction)
+                       pHTInfo->IOTAction |= HT_IOT_ACT_DISABLE_ALL_2SS;
+
+
+               bIOTAction = HTIOTActIsDisableEDCATurbo(ieee, pNetwork->bssid);
+               if(bIOTAction)
+                       pHTInfo->IOTAction |= HT_IOT_ACT_DISABLE_EDCA_TURBO;
+
+#if defined(RTL8190P) || defined(RTL8192E) || defined(RTL8192U)
+               bIOTAction = HTIOTActIsMgntUseCCK6M(ieee,pNetwork);
+               if(bIOTAction)
+                       pHTInfo->IOTAction |= HT_IOT_ACT_MGNT_USE_CCK_6M;
+#elif defined(RTL8192SE) || defined(RTL8192SU) || defined RTL8192CE
+               bIOTAction = HTIOTActWAIOTBroadcom(ieee);
+               if(bIOTAction)
+               {
+                       pHTInfo->IOTAction |= HT_IOT_ACT_WA_IOT_Broadcom;
+               }
+#endif
+               bIOTAction = HTIOTActIsCCDFsync(ieee);
+               if(bIOTAction)
+                       pHTInfo->IOTAction |= HT_IOT_ACT_CDD_FSYNC;
+#if defined(RTL8192SU) || defined(RTL8192SE) || defined RTL8192CE
+               bIOTAction = HTIOTActIsForcedCTS2Self(ieee,pNetwork);
+               if(bIOTAction)  
+                       pHTInfo->IOTAction |= HT_IOT_ACT_FORCED_CTS2SELF;
+
+
+               bIOTAction = HTIOTActIsEnableBETxOPLimit(ieee);
+               if(bIOTAction)
+                       pHTInfo->IOTAction |= HT_IOT_ACT_FORCED_ENABLE_BE_TXOP;
+
+#if defined(RTL8192SU)
+               bIOTAction = HTIOCActRejcectADDBARequest(pNetwork);
+               if(bIOTAction)
+                       pHTInfo->IOTAction |= HT_IOT_ACT_REJECT_ADDBA_REQ;
+#endif
+
+               bIOTAction = HTIOCActAllowPeerAggOnePacket(ieee, pNetwork);
+               if(bIOTAction)
+                       pHTInfo->IOTAction |= HT_IOT_ACT_ALLOW_PEER_AGG_ONE_PKT;
+
+               bIOTAction = HTIOTActIsEDCABiasRx(ieee, pNetwork);
+               if(bIOTAction)
+                       pHTInfo->IOTAction |= HT_IOT_ACT_EDCA_BIAS_ON_RX;
+
+#if defined(RTL8192SU)
+               bIOTAction = HTIOCActIsDisableCckRate(ieee, pNetwork);
+               if(bIOTAction)
+                       pHTInfo->IOTAction |= HT_IOT_ACT_DISABLE_CCK_RATE;
+#endif
+               bIOTAction = HTIOTActDisableShortGI(ieee, pNetwork);
+               if(bIOTAction)
+                       pHTInfo->IOTAction |= HT_IOT_ACT_DISABLE_SHORT_GI;
+
+               bIOTAction = HTIOTActDisableHighPower(ieee, pNetwork);
+               if(bIOTAction)
+                       pHTInfo->IOTAction |= HT_IOT_ACT_DISABLE_HIGH_POWER;
+
+
+               bIOTAction = HTIOTActIsForcedAMSDU8K(ieee, pNetwork);
+               if(bIOTAction)
+                       pHTInfo->IOTAction |= HT_IOT_ACT_TX_USE_AMSDU_8K;
+
+#if defined(RTL8192SU)
+               bIOTAction = HTIOTActIsTxNoAggregation(ieee, pNetwork);
+               if(bIOTAction)
+                       pHTInfo->IOTAction |= HT_IOT_ACT_TX_NO_AGGREGATION;
+
+               bIOTAction = HTIOTActIsDisableTx40MHz(ieee, pNetwork);
+               if(bIOTAction)
+                       pHTInfo->IOTAction |= HT_IOT_ACT_DISABLE_TX_40_MHZ;
+
+               bIOTAction = HTIOTActIsDisableTx2SS(ieee, pNetwork);
+               if(bIOTAction)
+                       pHTInfo->IOTAction |= HT_IOT_ACT_DISABLE_TX_2SS;
+#endif
+
+               bIOTAction = HTIOTActIsForcedRTSCTS(ieee, pNetwork);
+               if(bIOTAction)
+                       pHTInfo->IOTAction |= HT_IOT_ACT_FORCED_RTS;
+
+               bIOTAction = HTIOTActIsNullDataPowerSaving(ieee, pNetwork);
+               if(bIOTAction)
+                       pHTInfo->IOTAction |= HT_IOT_ACT_NULL_DATA_POWER_SAVING;
+#endif
+       }
+       else
+       {
+               pHTInfo->bCurrentHTSupport = false;
+               pHTInfo->bCurrentRT2RTAggregation = false;
+               pHTInfo->bCurrentRT2RTLongSlotTime = false;
+               pHTInfo->RT2RT_HT_Mode = (RT_HT_CAPBILITY)0;
+
+               pHTInfo->IOTAction = 0;
+               pHTInfo->IOTRaFunc = 0;
+       }
+       
+}
+
+void HTUpdateSelfAndPeerSetting(struct rtllib_device* ieee,    struct rtllib_network * pNetwork)
+{
+       PRT_HIGH_THROUGHPUT     pHTInfo = ieee->pHTInfo;
+       PHT_INFORMATION_ELE             pPeerHTInfo = (PHT_INFORMATION_ELE)pNetwork->bssht.bdHTInfoBuf;
+
+       if(pHTInfo->bCurrentHTSupport)
+       {
+               if(pNetwork->bssht.bdHTInfoLen != 0)
+                       pHTInfo->CurrentOpMode = pPeerHTInfo->OptMode;
+
+       }
+}
+
+void HTUseDefaultSetting(struct rtllib_device* ieee)
+{
+       PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo;
+       
+       if(pHTInfo->bEnableHT)
+       {
+               pHTInfo->bCurrentHTSupport = true;
+               pHTInfo->bCurSuppCCK = pHTInfo->bRegSuppCCK;
+
+               pHTInfo->bCurBW40MHz = pHTInfo->bRegBW40MHz;
+
+               pHTInfo->bCurShortGI20MHz= pHTInfo->bRegShortGI20MHz;
+
+               pHTInfo->bCurShortGI40MHz= pHTInfo->bRegShortGI40MHz;
+#ifdef _RTL8192_EXT_PATCH_
+               ieee->current_mesh_network.qos_data.supported = 1;
+               ieee->current_mesh_network.qos_data.active = ieee->current_mesh_network.qos_data.supported;
+#endif         
+
+#ifdef ENABLE_AMSDU
+               if(ieee->iw_mode == IW_MODE_ADHOC)
+               {
+                       ieee->current_network.qos_data.supported = 1;
+                       ieee->current_network.qos_data.active = ieee->current_network.qos_data.supported;
+                       pHTInfo->bCurrent_AMSDU_Support = 1;
+               }
+#ifdef _RTL8192_EXT_PATCH_
+               else if(ieee->iw_mode == IW_MODE_MESH)
+               {
+                       pHTInfo->bCurrent_Mesh_AMSDU_Support = 1;
+                       pHTInfo->bCurrent_AMSDU_Support = pHTInfo->bAMSDU_Support;
+               }
+#endif
+               else
+                       pHTInfo->bCurrent_AMSDU_Support = pHTInfo->bAMSDU_Support;
+#else
+               pHTInfo->bCurrent_AMSDU_Support = pHTInfo->bAMSDU_Support;
+#endif
+               pHTInfo->nCurrent_AMSDU_MaxSize = pHTInfo->nAMSDU_MaxSize;
+
+#ifdef ENABLE_AMSDU
+               if(ieee->iw_mode == IW_MODE_ADHOC)
+                       pHTInfo->bCurrentAMPDUEnable = 0;
+#ifdef _RTL8192_EXT_PATCH_
+               else if(ieee->iw_mode == IW_MODE_MESH)
+               {
+                       pHTInfo->bCurrentMeshAMPDUEnable = 0;
+                       pHTInfo->bCurrentAMPDUEnable = pHTInfo->bAMPDUEnable;
+               }
+#endif
+               else
+                       pHTInfo->bCurrentAMPDUEnable = pHTInfo->bAMPDUEnable;
+#else
+               pHTInfo->bCurrentAMPDUEnable = pHTInfo->bAMPDUEnable;
+#endif
+               pHTInfo->CurrentAMPDUFactor = pHTInfo->AMPDU_Factor;
+
+               pHTInfo->CurrentMPDUDensity = pHTInfo->CurrentMPDUDensity;
+
+
+               HTFilterMCSRate(ieee, ieee->Regdot11TxHTOperationalRateSet, ieee->dot11HTOperationalRateSet);
+#ifdef TODO
+               Adapter->HalFunc.InitHalRATRTableHandler( Adapter, &pMgntInfo->dot11OperationalRateSet, pMgntInfo->dot11HTOperationalRateSet);
+#endif
+               ieee->HTHighestOperaRate = HTGetHighestMCSRate(ieee, ieee->dot11HTOperationalRateSet, MCS_FILTER_ALL);
+               ieee->HTCurrentOperaRate = ieee->HTHighestOperaRate;
+
+#if (defined RTL8192SE || defined RTL8192SU || defined RTL8192CE)
+               if(ieee->SetHwRegHandler != NULL) {
+                       ieee->SetHwRegHandler( ieee->dev, HW_VAR_SHORTGI_DENSITY,  (u8*)(&ieee->MaxMssDensity));
+                       ieee->SetHwRegHandler(ieee->dev, HW_VAR_AMPDU_FACTOR, &pHTInfo->CurrentAMPDUFactor);
+                       ieee->SetHwRegHandler(ieee->dev, HW_VAR_AMPDU_MIN_SPACE, &pHTInfo->CurrentMPDUDensity);
+               }
+#endif  
+
+       }
+       else
+       {
+               pHTInfo->bCurrentHTSupport = false;
+       }
+       return;
+}
+u8 HTCCheck(struct rtllib_device* ieee, u8*    pFrame)
+{
+       if(ieee->pHTInfo->bCurrentHTSupport)
+       {
+               if( (IsQoSDataFrame(pFrame) && Frame_Order(pFrame)) == 1)
+               {
+                       RTLLIB_DEBUG(RTLLIB_DL_HT, "HT CONTROL FILED EXIST!!\n");
+                       return true;
+               }
+       }
+       return false;
+}
+
+void HTSetConnectBwMode(struct rtllib_device* ieee, HT_CHANNEL_WIDTH   Bandwidth, HT_EXTCHNL_OFFSET    Offset)
+{
+       PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo;
+
+       if(pHTInfo->bRegBW40MHz == false)
+               return;
+
+       if(ieee->GetHalfNmodeSupportByAPsHandler(ieee->dev))
+               Bandwidth=HT_CHANNEL_WIDTH_20;
+       
+
+       if(pHTInfo->bSwBwInProgress) {
+               return;
+       }
+       if(Bandwidth==HT_CHANNEL_WIDTH_20_40)
+        {
+               if(ieee->current_network.channel<2 && Offset==HT_EXTCHNL_OFFSET_LOWER)
+                       Offset = HT_EXTCHNL_OFFSET_NO_EXT;
+               if(Offset==HT_EXTCHNL_OFFSET_UPPER || Offset==HT_EXTCHNL_OFFSET_LOWER) {
+                       pHTInfo->bCurBW40MHz = true;
+                       pHTInfo->CurSTAExtChnlOffset = Offset;
+               } else {
+                       pHTInfo->bCurBW40MHz = false;
+                       pHTInfo->CurSTAExtChnlOffset = HT_EXTCHNL_OFFSET_NO_EXT;
+               }
+       } else {
+               pHTInfo->bCurBW40MHz = false;
+               pHTInfo->CurSTAExtChnlOffset = HT_EXTCHNL_OFFSET_NO_EXT;
+       }
+
+       printk("%s():pHTInfo->bCurBW40MHz:%x\n", __func__, pHTInfo->bCurBW40MHz);
+
+       pHTInfo->bSwBwInProgress = true;
+
+       HTSetConnectBwModeCallback(ieee);
+
+}
+
+void HTSetConnectBwModeCallback(struct rtllib_device* ieee)
+{
+       PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo;
+
+       RTLLIB_DEBUG(RTLLIB_DL_HT, "======>%s()\n", __FUNCTION__);
+       if(pHTInfo->bCurBW40MHz)
+       {
+               if(pHTInfo->CurSTAExtChnlOffset==HT_EXTCHNL_OFFSET_UPPER)
+                       ieee->set_chan(ieee->dev, ieee->current_network.channel+2);
+               else if(pHTInfo->CurSTAExtChnlOffset==HT_EXTCHNL_OFFSET_LOWER)
+                       ieee->set_chan(ieee->dev, ieee->current_network.channel-2);
+               else
+                       ieee->set_chan(ieee->dev, ieee->current_network.channel);
+               
+               ieee->SetBWModeHandler(ieee->dev, HT_CHANNEL_WIDTH_20_40, pHTInfo->CurSTAExtChnlOffset);
+       } else {
+               ieee->set_chan(ieee->dev, ieee->current_network.channel);
+               ieee->SetBWModeHandler(ieee->dev, HT_CHANNEL_WIDTH_20, HT_EXTCHNL_OFFSET_NO_EXT);
+       }
+
+       pHTInfo->bSwBwInProgress = false;
+}
+
+#ifndef BUILT_IN_RTLLIB
+EXPORT_SYMBOL_RSL(HTUpdateSelfAndPeerSetting);
+EXPORT_SYMBOL_RSL(HTFilterMCSRate);
+EXPORT_SYMBOL_RSL(HTGetHighestMCSRate);
+EXPORT_SYMBOL_RSL(MCS_FILTER_ALL);
+EXPORT_SYMBOL_RSL(MCS_FILTER_1SS);
+#ifdef _RTL8192_EXT_PATCH_
+EXPORT_SYMBOL_RSL(HTSetConnectBwMode);
+EXPORT_SYMBOL_RSL(HTConstructCapabilityElement);
+EXPORT_SYMBOL_RSL(HTConstructRT2RTAggElement);
+EXPORT_SYMBOL_RSL(HTUseDefaultSetting);
+EXPORT_SYMBOL_RSL(HTConstructInfoElement);
+#endif
+#endif
diff --git a/ubuntu/rtl8192se/rtllib/rtl819x_Qos.h b/ubuntu/rtl8192se/rtllib/rtl819x_Qos.h
new file mode 100644 (file)
index 0000000..9e0a9a2
--- /dev/null
@@ -0,0 +1,619 @@
+/******************************************************************************\r
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ * The full GNU General Public License is included in this distribution in the\r
+ * file called LICENSE.\r
+ *\r
+ * Contact Information:\r
+ * wlanfae <wlanfae@realtek.com>\r
+******************************************************************************/\r
+#ifndef __INC_QOS_TYPE_H\r
+#define __INC_QOS_TYPE_H\r
+\r
+#define BIT0                    0x00000001\r
+#define BIT1                    0x00000002\r
+#define BIT2                    0x00000004\r
+#define BIT3                    0x00000008\r
+#define BIT4                    0x00000010\r
+#define BIT5                    0x00000020\r
+#define BIT6                    0x00000040\r
+#define BIT7                    0x00000080\r
+#define BIT8                    0x00000100\r
+#define BIT9                    0x00000200\r
+#define BIT10                   0x00000400\r
+#define BIT11                   0x00000800\r
+#define BIT12                   0x00001000\r
+#define BIT13                   0x00002000\r
+#define BIT14                   0x00004000\r
+#define BIT15                   0x00008000\r
+#define BIT16                   0x00010000\r
+#define BIT17                   0x00020000\r
+#define BIT18                   0x00040000\r
+#define BIT19                   0x00080000\r
+#define BIT20                   0x00100000\r
+#define BIT21                   0x00200000\r
+#define BIT22                   0x00400000\r
+#define BIT23                   0x00800000\r
+#define BIT24                   0x01000000\r
+#define BIT25                   0x02000000\r
+#define BIT26                   0x04000000\r
+#define BIT27                   0x08000000\r
+#define BIT28                   0x10000000\r
+#define BIT29                   0x20000000\r
+#define BIT30                   0x40000000\r
+#define BIT31                   0x80000000\r
+\r
+#define        MAX_WMMELE_LENGTH       64\r
+\r
+typedef u32 QOS_MODE, *PQOS_MODE;\r
+#define QOS_DISABLE            0\r
+#define QOS_WMM                        1\r
+#define QOS_WMMSA              2\r
+#define QOS_EDCA               4\r
+#define QOS_HCCA               8\r
+#define QOS_WMM_UAPSD          16   
+\r
+#define AC_PARAM_SIZE  4\r
+#define WMM_PARAM_ELE_BODY_LEN 18\r
+\r
+typedef        enum _ACK_POLICY{\r
+       eAckPlc0_ACK            = 0x00,\r
+       eAckPlc1_NoACK          = 0x01,\r
+}ACK_POLICY,*PACK_POLICY;\r
+\r
+#define WMM_PARAM_ELEMENT_SIZE (8+(4*AC_PARAM_SIZE))\r
+#if 0\r
+#define GET_QOS_CTRL(_pStart)  ReadEF2Byte((u8 *)(_pStart) + 24)\r
+#define SET_QOS_CTRL(_pStart, _value)  WriteEF2Byte((u8 *)(_pStart) + 24, _value)\r
+\r
+#define GET_QOS_CTRL_WMM_UP(_pStart)   ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 0, 3))\r
+#define SET_QOS_CTRL_WMM_UP(_pStart, _value)   SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 0, 3, (u8)(_value))\r
+\r
+#define GET_QOS_CTRL_WMM_EOSP(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 4, 1))\r
+#define SET_QOS_CTRL_WMM_EOSP(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 4, 1, (u8)(_value))\r
+\r
+#define GET_QOS_CTRL_WMM_ACK_POLICY(_pStart)   ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 5, 2))\r
+#define SET_QOS_CTRL_WMM_ACK_POLICY(_pStart, _value)   SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 5, 2, (u8)(_value))\r
+\r
+#define GET_QOS_CTRL_STA_DATA_TID(_pStart)     ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 0, 4))\r
+#define SET_QOS_CTRL_STA_DATA_TID(_pStart, _value)     SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 0, 4, (u8)(_value))\r
+\r
+#define GET_QOS_CTRL_STA_DATA_QSIZE_FLAG(_pStart)      ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 4, 1))\r
+#define SET_QOS_CTRL_STA_DATA_QSIZE_FLAG(_pStart, _value)      SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 4, 1, (u8)(_value))\r
+\r
+#define GET_QOS_CTRL_STA_DATA_ACK_POLICY(_pStart)      ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 5, 2))\r
+#define SET_QOS_CTRL_STA_DATA_ACK_POLICY(_pStart, _value)      SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 5, 2, (u8)(_value))\r
+\r
+#define GET_QOS_CTRL_STA_DATA_TXOP(_pStart)    ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 8, 8))\r
+#define SET_QOS_CTRL_STA_DATA_TXOP(_pStart, _value)    SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 8, 8, (u8)(_value))\r
+\r
+#define GET_QOS_CTRL_STA_DATA_QSIZE(_pStart)   GET_QOS_CTRL_STA_DATA_TXOP(_pStart)\r
+#define SET_QOS_CTRL_STA_DATA_QSIZE(_pStart, _value)   SET_QOS_CTRL_STA_DATA_TXOP(_pStart)\r
+\r
+#define GET_QOS_CTRL_HC_DATA_TID(_pStart)      ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 0, 4))\r
+#define SET_QOS_CTRL_HC_DATA_TID(_pStart, _value)      SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 0, 4, (u8)(_value))\r
+\r
+#define GET_QOS_CTRL_HC_DATA_EOSP(_pStart)     ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 4, 1))\r
+#define SET_QOS_CTRL_HC_DATA_EOSP(_pStart, _value)     SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 4, 1, (u8)(_value))\r
+\r
+#define GET_QOS_CTRL_HC_DATA_ACK_POLICY(_pStart)       ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 5, 2))\r
+#define SET_QOS_CTRL_HC_DATA_ACK_POLICY(_pStart, _value)       SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 5, 2, (u8)(_value))\r
+\r
+#define GET_QOS_CTRL_HC_DATA_PS_BUFSTATE(_pStart)      ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 8, 8))\r
+#define SET_QOS_CTRL_HC_DATA_PS_BUFSTATE(_pStart, _value)      SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 8, 8, (u8)(_value))\r
+\r
+#define GET_QOS_CTRL_HC_CFP_TID(_pStart)       ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 0, 4))\r
+#define SET_QOS_CTRL_HC_CFP_TID(_pStart, _value)       SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 0, 4, (u8)(_value))\r
+\r
+#define GET_QOS_CTRL_HC_CFP_EOSP(_pStart)      ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 4, 1))\r
+#define SET_QOS_CTRL_HC_CFP_EOSP(_pStart, _value)      SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 4, 1, (u8)(_value))\r
+\r
+#define GET_QOS_CTRL_HC_CFP_ACK_POLICY(_pStart)        ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 5, 2))\r
+#define SET_QOS_CTRL_HC_CFP_ACK_POLICY(_pStart, _value)        SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 5, 2, (u8)(_value))\r
+\r
+#define GET_QOS_CTRL_HC_CFP_TXOP_LIMIT(_pStart)        ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 8, 8))\r
+#define SET_QOS_CTRL_HC_CFP_TXOP_LIMIT(_pStart, _value)        SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 8, 8, (u8)(_value))\r
+\r
+#define SET_WMM_QOS_INFO_FIELD(_pStart, _val)  WriteEF1Byte(_pStart, _val)\r
+\r
+#define GET_WMM_QOS_INFO_FIELD_PARAMETERSET_COUNT(_pStart)     LE_BITS_TO_1BYTE(_pStart, 0, 4)\r
+#define SET_WMM_QOS_INFO_FIELD_PARAMETERSET_COUNT(_pStart, _val)       SET_BITS_TO_LE_1BYTE(_pStart, 0, 4, _val)\r
+\r
+#define GET_WMM_QOS_INFO_FIELD_AP_UAPSD(_pStart)       LE_BITS_TO_1BYTE(_pStart, 7, 1)\r
+#define SET_WMM_QOS_INFO_FIELD_AP_UAPSD(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 7, 1, _val)\r
+\r
+#define GET_WMM_QOS_INFO_FIELD_STA_AC_VO_UAPSD(_pStart)        LE_BITS_TO_1BYTE(_pStart, 0, 1)\r
+#define SET_WMM_QOS_INFO_FIELD_STA_AC_VO_UAPSD(_pStart, _val)  SET_BITS_TO_LE_1BYTE(_pStart, 0, 1, _val)\r
+\r
+#define GET_WMM_QOS_INFO_FIELD_STA_AC_VI_UAPSD(_pStart)        LE_BITS_TO_1BYTE(_pStart, 1, 1)\r
+#define SET_WMM_QOS_INFO_FIELD_STA_AC_VI_UAPSD(_pStart, _val)  SET_BITS_TO_LE_1BYTE(_pStart, 1, 1, _val)\r
+\r
+#define GET_WMM_QOS_INFO_FIELD_STA_AC_BE_UAPSD(_pStart)        LE_BITS_TO_1BYTE(_pStart, 2, 1)\r
+#define SET_WMM_QOS_INFO_FIELD_STA_AC_BE_UAPSD(_pStart, _val)  SET_BITS_TO_LE_1BYTE(_pStart, 2, 1, _val)\r
+       \r
+#define GET_WMM_QOS_INFO_FIELD_STA_AC_BK_UAPSD(_pStart)        LE_BITS_TO_1BYTE(_pStart, 3, 1)\r
+#define SET_WMM_QOS_INFO_FIELD_STA_AC_BK_UAPSD(_pStart, _val)  SET_BITS_TO_LE_1BYTE(_pStart, 3, 1, _val)\r
+\r
+#define GET_WMM_QOS_INFO_FIELD_STA_MAX_SP_LEN(_pStart) LE_BITS_TO_1BYTE(_pStart, 5, 2)\r
+#define SET_WMM_QOS_INFO_FIELD_STA_MAX_SP_LEN(_pStart, _val)   SET_BITS_TO_LE_1BYTE(_pStart, 5, 2, _val)\r
+               \r
+\r
+#define WMM_INFO_ELEMENT_SIZE  7\r
+\r
+#define GET_WMM_INFO_ELE_OUI(_pStart)  ((u8 *)(_pStart))\r
+#define SET_WMM_INFO_ELE_OUI(_pStart, _pVal)   PlatformMoveMemory(_pStart, _pVal, 3);\r
+\r
+#define GET_WMM_INFO_ELE_OUI_TYPE(_pStart)     ( EF1Byte( *((u8 *)(_pStart)+3) ) )\r
+#define SET_WMM_INFO_ELE_OUI_TYPE(_pStart, _val)       ( *((u8 *)(_pStart)+3) = EF1Byte(_val) )\r
+\r
+#define GET_WMM_INFO_ELE_OUI_SUBTYPE(_pStart)  ( EF1Byte( *((u8 *)(_pStart)+4) ) )\r
+#define SET_WMM_INFO_ELE_OUI_SUBTYPE(_pStart, _val)    ( *((u8 *)(_pStart)+4) = EF1Byte(_val) )\r
+\r
+#define GET_WMM_INFO_ELE_VERSION(_pStart)      ( EF1Byte( *((u8 *)(_pStart)+5) ) )\r
+#define SET_WMM_INFO_ELE_VERSION(_pStart, _val)        ( *((u8 *)(_pStart)+5) = EF1Byte(_val) )\r
+\r
+#define GET_WMM_INFO_ELE_QOS_INFO_FIELD(_pStart)       ( EF1Byte( *((u8 *)(_pStart)+6) ) )\r
+#define SET_WMM_INFO_ELE_QOS_INFO_FIELD(_pStart, _val) ( *((u8 *)(_pStart)+6) = EF1Byte(_val) )\r
+\r
+       \r
+\r
+#define GET_WMM_AC_PARAM_AIFSN(_pStart)        ( (u8)LE_BITS_TO_4BYTE(_pStart, 0, 4) )\r
+#define SET_WMM_AC_PARAM_AIFSN(_pStart, _val)  SET_BITS_TO_LE_4BYTE(_pStart, 0, 4, _val)\r
+\r
+#define GET_WMM_AC_PARAM_ACM(_pStart)  ( (u8)LE_BITS_TO_4BYTE(_pStart, 4, 1) )\r
+#define SET_WMM_AC_PARAM_ACM(_pStart, _val)    SET_BITS_TO_LE_4BYTE(_pStart, 4, 1, _val)\r
+\r
+#define GET_WMM_AC_PARAM_ACI(_pStart)          ( (u8)LE_BITS_TO_4BYTE(_pStart, 5, 2) )\r
+#define SET_WMM_AC_PARAM_ACI(_pStart, _val)    SET_BITS_TO_LE_4BYTE(_pStart, 5, 2, _val)\r
+\r
+#define GET_WMM_AC_PARAM_ACI_AIFSN(_pStart)    ( (u8)LE_BITS_TO_4BYTE(_pStart, 0, 8) )\r
+#define SET_WMM_AC_PARAM_ACI_AIFSN(_pStart, _val)      SET_BTIS_TO_LE_4BYTE(_pStart, 0, 8, _val)\r
+\r
+#define GET_WMM_AC_PARAM_ECWMIN(_pStart)       ( (u8)LE_BITS_TO_4BYTE(_pStart, 8, 4) )\r
+#define SET_WMM_AC_PARAM_ECWMIN(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 8, 4, _val)\r
+\r
+#define GET_WMM_AC_PARAM_ECWMAX(_pStart)       ( (u8)LE_BITS_TO_4BYTE(_pStart, 12, 4) )\r
+#define SET_WMM_AC_PARAM_ECWMAX(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 12, 4, _val)\r
+\r
+#define GET_WMM_AC_PARAM_TXOP_LIMIT(_pStart)           ( (u16)LE_BITS_TO_4BYTE(_pStart, 16, 16) )\r
+#define SET_WMM_AC_PARAM_TXOP_LIMIT(_pStart, _val)     SET_BITS_TO_LE_4BYTE(_pStart, 16, 16, _val)\r
+\r
+\r
+\r
+\r
+#define GET_WMM_PARAM_ELE_OUI(_pStart) ((u8 *)(_pStart))\r
+#define SET_WMM_PARAM_ELE_OUI(_pStart, _pVal)  PlatformMoveMemory(_pStart, _pVal, 3)\r
+\r
+#define GET_WMM_PARAM_ELE_OUI_TYPE(_pStart)    ( EF1Byte( *((u8 *)(_pStart)+3) ) )\r
+#define SET_WMM_PARAM_ELE_OUI_TYPE(_pStart, _val)      ( *((u8 *)(_pStart)+3) = EF1Byte(_val) )\r
+\r
+#define GET_WMM_PARAM_ELE_OUI_SUBTYPE(_pStart) ( EF1Byte( *((u8 *)(_pStart)+4) ) )\r
+#define SET_WMM_PARAM_ELE_OUI_SUBTYPE(_pStart, _val)   ( *((u8 *)(_pStart)+4) = EF1Byte(_val) )\r
+\r
+#define GET_WMM_PARAM_ELE_VERSION(_pStart)     ( EF1Byte( *((u8 *)(_pStart)+5) ) )\r
+#define SET_WMM_PARAM_ELE_VERSION(_pStart, _val)       ( *((u8 *)(_pStart)+5) = EF1Byte(_val) )\r
+\r
+#define GET_WMM_PARAM_ELE_QOS_INFO_FIELD(_pStart)      ( EF1Byte( *((u8 *)(_pStart)+6) ) )\r
+#define SET_WMM_PARAM_ELE_QOS_INFO_FIELD(_pStart, _val)        ( *((u8 *)(_pStart)+6) = EF1Byte(_val) )\r
+\r
+#define GET_WMM_PARAM_ELE_AC_PARAM(_pStart)    ( (u8 *)(_pStart)+8 )\r
+#define SET_WMM_PARAM_ELE_AC_PARAM(_pStart, _pVal) PlatformMoveMemory((_pStart)+8, _pVal, 16)\r
+#endif\r
+\r
+typedef        union _QOS_CTRL_FIELD{\r
+       u8      charData[2];\r
+       u16     shortData;\r
+\r
+       struct\r
+       {\r
+               u8              UP:3;\r
+               u8              usRsvd1:1;\r
+               u8              EOSP:1;\r
+               u8              AckPolicy:2;\r
+               u8              usRsvd2:1;\r
+               u8              ucRsvdByte;\r
+       }WMM;\r
+\r
+       struct\r
+       {\r
+               u8              TID:4;\r
+               u8              bIsQsize:1;
+               u8              AckPolicy:2;\r
+               u8              usRsvd:1;\r
+               u8              TxopOrQsize;    
+       }BySta;\r
+\r
+       struct\r
+       {\r
+               u8              TID:4;\r
+               u8              EOSP:1;\r
+               u8              AckPolicy:2;\r
+               u8              usRsvd:1;\r
+               u8              PSBufState;             
+       }ByHc_Data;\r
+\r
+       struct\r
+       {\r
+               u8              TID:4;\r
+               u8              EOSP:1;\r
+               u8              AckPolicy:2;\r
+               u8              usRsvd:1;\r
+               u8              TxopLimit;              
+       }ByHc_CFP;\r
+\r
+}QOS_CTRL_FIELD, *PQOS_CTRL_FIELD;\r
+\r
+\r
+typedef        union _QOS_INFO_FIELD{\r
+       u8      charData;\r
+       \r
+       struct\r
+       {\r
+               u8              ucParameterSetCount:4;\r
+               u8              ucReserved:4;   \r
+       }WMM;\r
+\r
+       struct \r
+       {\r
+               u8              ucAC_VO_UAPSD:1;\r
+               u8              ucAC_VI_UAPSD:1;\r
+               u8              ucAC_BE_UAPSD:1;\r
+               u8              ucAC_BK_UAPSD:1;\r
+               u8              ucReserved1:1;\r
+               u8              ucMaxSPLen:2;\r
+               u8              ucReserved2:1;\r
+               \r
+       }ByWmmPsSta;\r
+\r
+       struct\r
+       {\r
+               u8              ucParameterSetCount:4;\r
+               u8              ucReserved:3; \r
+               u8              ucApUapsd:1;\r
+       }ByWmmPsAp;\r
+\r
+       struct\r
+       {\r
+               u8              ucAC3_UAPSD:1;\r
+               u8              ucAC2_UAPSD:1;\r
+               u8              ucAC1_UAPSD:1;\r
+               u8              ucAC0_UAPSD:1;\r
+               u8              ucQAck:1;\r
+               u8              ucMaxSPLen:2;\r
+               u8              ucMoreDataAck:1;\r
+       } By11eSta;\r
+\r
+       struct\r
+       {\r
+               u8              ucParameterSetCount:4;\r
+               u8              ucQAck:1;\r
+               u8              ucQueueReq:1;\r
+               u8              ucTXOPReq:1;\r
+               u8              ucReserved:1;\r
+       } By11eAp;\r
+\r
+       struct\r
+       {\r
+               u8              ucReserved1:4;\r
+               u8              ucQAck:1;\r
+               u8              ucReserved2:2;\r
+               u8              ucMoreDataAck:1;\r
+       } ByWmmsaSta;\r
+\r
+       struct\r
+       {\r
+               u8              ucReserved1:4;\r
+               u8              ucQAck:1;\r
+               u8              ucQueueReq:1;\r
+               u8              ucTXOPReq:1;\r
+               u8              ucReserved2:1;  \r
+       } ByWmmsaAp;\r
+\r
+       struct\r
+       {\r
+               u8              ucAC3_UAPSD:1;\r
+               u8              ucAC2_UAPSD:1;\r
+               u8              ucAC1_UAPSD:1;\r
+               u8              ucAC0_UAPSD:1;\r
+               u8              ucQAck:1;\r
+               u8              ucMaxSPLen:2;\r
+               u8              ucMoreDataAck:1;        \r
+       } ByAllSta;\r
+\r
+       struct\r
+       {\r
+               u8              ucParameterSetCount:4;\r
+               u8              ucQAck:1;\r
+               u8              ucQueueReq:1;\r
+               u8              ucTXOPReq:1;\r
+               u8              ucApUapsd:1;    \r
+       } ByAllAp;\r
+\r
+}QOS_INFO_FIELD, *PQOS_INFO_FIELD;\r
+\r
+#if 0\r
+typedef struct _WMM_INFO_ELEMENT{\r
+       u8                      OUI[3];\r
+       u8                      OUI_Type;\r
+       u8                      OUI_SubType;\r
+       u8                      Version;\r
+       QOS_INFO_FIELD  QosInfo;\r
+}WMM_INFO_ELEMENT, *PWMM_INFO_ELEMENT;\r
+#endif\r
+\r
+typedef u32 AC_CODING;\r
+#define AC0_BE 0               
+#define AC1_BK 1               
+#define AC2_VI 2               
+#define AC3_VO 3               
+#define AC_MAX 4               
+\r
+typedef        union _ACI_AIFSN{\r
+       u8      charData;\r
+       \r
+       struct\r
+       {\r
+               u8      AIFSN:4;\r
+               u8      ACM:1;\r
+               u8      ACI:2;\r
+               u8      Reserved:1;\r
+       }f;     
+}ACI_AIFSN, *PACI_AIFSN;\r
+\r
+typedef        union _ECW{\r
+       u8      charData;\r
+       struct\r
+       {\r
+               u8      ECWmin:4;\r
+               u8      ECWmax:4;\r
+       }f;     
+}ECW, *PECW;\r
+\r
+typedef        union _AC_PARAM{\r
+       u32     longData;\r
+       u8      charData[4];\r
+\r
+       struct\r
+       {\r
+               ACI_AIFSN       AciAifsn;\r
+               ECW             Ecw;\r
+               u16             TXOPLimit;\r
+       }f;     
+}AC_PARAM, *PAC_PARAM;\r
+\r
+\r
+\r
+typedef        enum _QOS_ELE_SUBTYPE{\r
+       QOSELE_TYPE_INFO        = 0x00,         
+       QOSELE_TYPE_PARAM       = 0x01,         
+}QOS_ELE_SUBTYPE,*PQOS_ELE_SUBTYPE;\r
+\r
+\r
+typedef        enum _DIRECTION_VALUE{\r
+       DIR_UP                  = 0,            
+       DIR_DOWN                = 1,            
+       DIR_DIRECT              = 2,            
+       DIR_BI_DIR              = 3,            
+}DIRECTION_VALUE,*PDIRECTION_VALUE;\r
+\r
+\r
+typedef union _QOS_TSINFO{\r
+       u8              charData[3];\r
+       struct {\r
+               u8              ucTrafficType:1;                        
+               u8              ucTSID:4;\r
+               u8              ucDirection:2;\r
+               u8              ucAccessPolicy:2;       
+               u8              ucAggregation:1;                
+               u8              ucPSB:1;                                
+               u8              ucUP:3;\r
+               u8              ucTSInfoAckPolicy:2;            
+               u8              ucSchedule:1;                   
+               u8              ucReserved:7;\r
+       }field;\r
+}QOS_TSINFO, *PQOS_TSINFO;\r
+\r
+typedef union _TSPEC_BODY{\r
+       u8              charData[55];\r
+       \r
+       struct\r
+       {\r
+               QOS_TSINFO      TSInfo; 
+               u16     NominalMSDUsize;\r
+               u16     MaxMSDUsize;\r
+               u32     MinServiceItv;\r
+               u32     MaxServiceItv;\r
+               u32     InactivityItv;\r
+               u32     SuspenItv;\r
+               u32     ServiceStartTime;\r
+               u32     MinDataRate;\r
+               u32     MeanDataRate;\r
+               u32     PeakDataRate;\r
+               u32     MaxBurstSize;\r
+               u32     DelayBound;\r
+               u32     MinPhyRate;\r
+               u16     SurplusBandwidthAllowance;\r
+               u16     MediumTime;\r
+       } f;    
+}TSPEC_BODY, *PTSPEC_BODY;\r
+\r
+\r
+typedef struct _WMM_TSPEC{\r
+       u8              ID;\r
+       u8              Length;\r
+       u8              OUI[3];\r
+       u8              OUI_Type;\r
+       u8              OUI_SubType;\r
+       u8              Version;\r
+       TSPEC_BODY      Body;\r
+} WMM_TSPEC, *PWMM_TSPEC;\r
+\r
+typedef        enum _ACM_METHOD{\r
+       eAcmWay0_SwAndHw                = 0,            
+       eAcmWay1_HW                     = 1,            
+       eAcmWay2_SW                     = 2,            
+}ACM_METHOD,*PACM_METHOD;\r
+\r
+\r
+typedef struct _ACM{\r
+       u64             UsedTime;\r
+       u64             MediumTime;\r
+       u8              HwAcmCtl;       
+}ACM, *PACM;\r
+\r
+typedef        u8              AC_UAPSD, *PAC_UAPSD;\r
+\r
+#define        GET_VO_UAPSD(_apsd) ((_apsd) & BIT0)\r
+#define        SET_VO_UAPSD(_apsd) ((_apsd) |= BIT0)\r
+       \r
+#define        GET_VI_UAPSD(_apsd) ((_apsd) & BIT1)\r
+#define        SET_VI_UAPSD(_apsd) ((_apsd) |= BIT1)\r
+\r
+#define        GET_BK_UAPSD(_apsd) ((_apsd) & BIT2)\r
+#define        SET_BK_UAPSD(_apsd) ((_apsd) |= BIT2)\r
+\r
+#define        GET_BE_UAPSD(_apsd) ((_apsd) & BIT3)\r
+#define        SET_BE_UAPSD(_apsd) ((_apsd) |= BIT3)\r
+       \r
+\r
+typedef union _QOS_TCLAS{\r
+\r
+       struct _TYPE_GENERAL{\r
+               u8              Priority;\r
+               u8              ClassifierType;\r
+               u8              Mask;\r
+       } TYPE_GENERAL;\r
+\r
+       struct _TYPE0_ETH{\r
+               u8              Priority;\r
+               u8              ClassifierType;\r
+               u8              Mask;\r
+               u8              SrcAddr[6];\r
+               u8              DstAddr[6];\r
+               u16             Type;\r
+       } TYPE0_ETH;\r
+\r
+       struct _TYPE1_IPV4{\r
+               u8              Priority;\r
+               u8              ClassifierType;\r
+               u8              Mask;\r
+               u8              Version;\r
+               u8              SrcIP[4];\r
+               u8              DstIP[4];\r
+               u16             SrcPort;\r
+               u16             DstPort;\r
+               u8              DSCP;\r
+               u8              Protocol;\r
+               u8              Reserved;\r
+       } TYPE1_IPV4;\r
+\r
+       struct _TYPE1_IPV6{\r
+               u8              Priority;\r
+               u8              ClassifierType;\r
+               u8              Mask;\r
+               u8              Version;\r
+               u8              SrcIP[16];\r
+               u8              DstIP[16];\r
+               u16             SrcPort;\r
+               u16             DstPort;\r
+               u8              FlowLabel[3];\r
+       } TYPE1_IPV6;\r
+\r
+       struct _TYPE2_8021Q{\r
+               u8              Priority;\r
+               u8              ClassifierType;\r
+               u8              Mask;\r
+               u16             TagType;\r
+       } TYPE2_8021Q;\r
+} QOS_TCLAS, *PQOS_TCLAS;\r
+\r
+typedef struct _QOS_TSTREAM{\r
+       u8                      AC;\r
+       WMM_TSPEC               TSpec;\r
+       QOS_TCLAS               TClass;\r
+} QOS_TSTREAM, *PQOS_TSTREAM;\r
+\r
+\r
+\r
+typedef struct _OCTET_STRING{\r
+        u8             *Octet;\r
+        u16             Length;\r
+}OCTET_STRING, *POCTET_STRING;\r
+#if 0\r
+#define FillOctetString(_os,_octet,_len)             \\r
+        (_os).Octet=(u8 *)(_octet);                  \\r
+        (_os).Length=(_len);\r
+\r
+#define WMM_ELEM_HDR_LEN                            6\r
+#define WMMElemSkipHdr(_osWMMElem)                   \\r
+        (_osWMMElem).Octet += WMM_ELEM_HDR_LEN;      \\r
+        (_osWMMElem).Length -= WMM_ELEM_HDR_LEN;\r
+#endif\r
+typedef struct _STA_QOS{\r
+       u8                              WMMIEBuf[MAX_WMMELE_LENGTH];\r
+       u8*                             WMMIE;\r
+\r
+       QOS_MODE                        QosCapability; 
+       QOS_MODE                        CurrentQosMode;\r
+\r
+       AC_UAPSD                        b4ac_Uapsd;  
+       AC_UAPSD                        Curr4acUapsd;\r
+       u8                              bInServicePeriod;\r
+       u8                              MaxSPLength;\r
+       int                             NumBcnBeforeTrigger;\r
+\r
+       u8 *                            pWMMInfoEle;\r
+       u8                              WMMParamEle[WMM_PARAM_ELEMENT_SIZE];\r
+       u8                              WMMPELength;\r
+\r
+       QOS_INFO_FIELD                  QosInfoField_STA;       
+       QOS_INFO_FIELD                  QosInfoField_AP;        
+\r
+       AC_PARAM                        CurAcParameters[4];\r
+\r
+       ACM                             acm[4];\r
+       ACM_METHOD                      AcmMethod;\r
+\r
+       QOS_TSTREAM                     TStream[16];\r
+       WMM_TSPEC                       TSpec;\r
+\r
+       u32                             QBssWirelessMode;\r
+\r
+       u8                              bNoAck;\r
+\r
+       u8                              bEnableRxImmBA;\r
+\r
+}STA_QOS, *PSTA_QOS;\r
+\r
+typedef struct _BSS_QOS{\r
+       QOS_MODE                bdQoSMode;\r
+\r
+       u8                      bdWMMIEBuf[MAX_WMMELE_LENGTH];\r
+       u8*             bdWMMIE;\r
+\r
+       QOS_ELE_SUBTYPE         EleSubType;\r
+\r
+       u8 *                    pWMMInfoEle;\r
+       u8 *                    pWMMParamEle;\r
+       \r
+       QOS_INFO_FIELD          QosInfoField;\r
+       AC_PARAM                AcParameter[4];\r
+}BSS_QOS, *PBSS_QOS;\r
+\r
+\r
+#define sQoSCtlLng                     2\r
+#define        QOS_CTRL_LEN(_QosMode)          ((_QosMode > QOS_DISABLE)? sQoSCtlLng : 0)\r
+\r
+\r
+#define IsACValid(ac)                  ((ac<=7 )?true:false )\r
+\r
+#endif 
diff --git a/ubuntu/rtl8192se/rtllib/rtl819x_TS.h b/ubuntu/rtl8192se/rtllib/rtl819x_TS.h
new file mode 100644 (file)
index 0000000..feb19f8
--- /dev/null
@@ -0,0 +1,72 @@
+/******************************************************************************\r
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ * The full GNU General Public License is included in this distribution in the\r
+ * file called LICENSE.\r
+ *\r
+ * Contact Information:\r
+ * wlanfae <wlanfae@realtek.com>\r
+******************************************************************************/\r
+#ifndef _TSTYPE_H_\r
+#define _TSTYPE_H_\r
+#include "rtl819x_Qos.h"\r
+#define TS_SETUP_TIMEOUT       60  
+#define TS_INACT_TIMEOUT       60\r
+#define TS_ADDBA_DELAY         60\r
+\r
+#define TOTAL_TS_NUM           16\r
+#define TCLAS_NUM              4\r
+\r
+typedef enum _TR_SELECT {\r
+       TX_DIR = 0, \r
+       RX_DIR = 1,\r
+} TR_SELECT, *PTR_SELECT;\r
+\r
+typedef struct _TS_COMMON_INFO{\r
+       struct list_head                List;\r
+       struct timer_list               SetupTimer;\r
+       struct timer_list               InactTimer;\r
+       u8                              Addr[6];\r
+       TSPEC_BODY                      TSpec;\r
+       QOS_TCLAS                       TClass[TCLAS_NUM];\r
+       u8                              TClasProc;\r
+       u8                              TClasNum;\r
+} TS_COMMON_INFO, *PTS_COMMON_INFO;\r
+\r
+typedef struct _TX_TS_RECORD{\r
+       TS_COMMON_INFO          TsCommonInfo;\r
+       u16                             TxCurSeq;\r
+       BA_RECORD                       TxPendingBARecord;      
+       BA_RECORD                       TxAdmittedBARecord;     
+       u8                              bAddBaReqInProgress;\r
+       u8                              bAddBaReqDelayed;\r
+       u8                              bUsingBa;\r
+       u8                              bDisable_AddBa;\r
+       struct timer_list               TsAddBaTimer;\r
+       u8                              num;\r
+} TX_TS_RECORD, *PTX_TS_RECORD;\r
+\r
+typedef struct _RX_TS_RECORD {\r
+       TS_COMMON_INFO          TsCommonInfo;\r
+       u16                             RxIndicateSeq;\r
+       u16                             RxTimeoutIndicateSeq;\r
+       struct list_head                RxPendingPktList;\r
+       struct timer_list               RxPktPendingTimer;\r
+       BA_RECORD                       RxAdmittedBARecord;      
+       u16                             RxLastSeqNum;\r
+       u8                              RxLastFragNum;\r
+       u8                              num;\r
+} RX_TS_RECORD, *PRX_TS_RECORD;\r
+\r
+\r
+#endif\r
+\r
diff --git a/ubuntu/rtl8192se/rtllib/rtl819x_TSProc.c b/ubuntu/rtl8192se/rtllib/rtl819x_TSProc.c
new file mode 100644 (file)
index 0000000..a3bfb92
--- /dev/null
@@ -0,0 +1,695 @@
+/******************************************************************************
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
+ *
+ * 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
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+******************************************************************************/
+#include "rtllib.h"
+#include <linux/etherdevice.h>
+#include "rtl819x_TS.h"
+extern void _setup_timer( struct timer_list*, void*, unsigned long);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
+#define list_for_each_entry_safe(pos, n, head, member) \
+       for (pos = list_entry((head)->next, typeof(*pos), member), \
+               n = list_entry(pos->member.next, typeof(*pos), member); \
+               &pos->member != (head); \
+               pos = n, n = list_entry(n->member.next, typeof(*n), member))
+#endif
+void TsSetupTimeOut(unsigned long data)
+{
+}
+
+void TsInactTimeout(unsigned long data)
+{
+}
+
+#if 1
+void RxPktPendingTimeout(unsigned long data)
+{
+       PRX_TS_RECORD   pRxTs = (PRX_TS_RECORD)data;
+       struct rtllib_device *ieee = container_of(pRxTs, struct rtllib_device, RxTsRecord[pRxTs->num]);
+       
+       PRX_REORDER_ENTRY       pReorderEntry = NULL;
+
+       unsigned long flags = 0;
+       struct rtllib_rxb *stats_IndicateArray[REORDER_WIN_SIZE];
+       u8 index = 0;
+       bool bPktInBuf = false;
+
+
+       spin_lock_irqsave(&(ieee->reorder_spinlock), flags);
+       RTLLIB_DEBUG(RTLLIB_DL_REORDER,"==================>%s()\n",__FUNCTION__);
+       if(pRxTs->RxTimeoutIndicateSeq != 0xffff)
+       {
+               while(!list_empty(&pRxTs->RxPendingPktList))
+               {
+                       pReorderEntry = (PRX_REORDER_ENTRY)list_entry(pRxTs->RxPendingPktList.prev,RX_REORDER_ENTRY,List);
+                       if(index == 0)
+                               pRxTs->RxIndicateSeq = pReorderEntry->SeqNum;
+
+                       if( SN_LESS(pReorderEntry->SeqNum, pRxTs->RxIndicateSeq) || 
+                               SN_EQUAL(pReorderEntry->SeqNum, pRxTs->RxIndicateSeq)   )
+                       {
+                               list_del_init(&pReorderEntry->List);
+                       
+                               if(SN_EQUAL(pReorderEntry->SeqNum, pRxTs->RxIndicateSeq))
+                                       pRxTs->RxIndicateSeq = (pRxTs->RxIndicateSeq + 1) % 4096;
+
+                               RTLLIB_DEBUG(RTLLIB_DL_REORDER,"RxPktPendingTimeout(): IndicateSeq: %d\n", pReorderEntry->SeqNum);
+                               stats_IndicateArray[index] = pReorderEntry->prxb;
+                               index++;
+                               
+                               list_add_tail(&pReorderEntry->List, &ieee->RxReorder_Unused_List);
+                       }
+                       else
+                       {
+                               bPktInBuf = true;
+                               break;
+                       }
+               }
+       }
+
+       if(index>0)
+       {
+               pRxTs->RxTimeoutIndicateSeq = 0xffff;
+       
+               if(index > REORDER_WIN_SIZE){
+                       RTLLIB_DEBUG(RTLLIB_DL_ERR, "RxReorderIndicatePacket(): Rx Reorer buffer full!! \n");
+                       spin_unlock_irqrestore(&(ieee->reorder_spinlock), flags);
+                       return;
+               }
+               rtllib_indicate_packets(ieee, stats_IndicateArray, index);
+                bPktInBuf = false;
+
+       }
+
+       if(bPktInBuf && (pRxTs->RxTimeoutIndicateSeq==0xffff))
+       {
+               pRxTs->RxTimeoutIndicateSeq = pRxTs->RxIndicateSeq;
+#if 0   
+               if(timer_pending(&pTS->RxPktPendingTimer))
+                       del_timer_sync(&pTS->RxPktPendingTimer);
+               pTS->RxPktPendingTimer.expires = jiffies + MSECS(pHTInfo->RxReorderPendingTime);
+               add_timer(&pTS->RxPktPendingTimer);
+#else
+               mod_timer(&pRxTs->RxPktPendingTimer,  jiffies + MSECS(ieee->pHTInfo->RxReorderPendingTime));
+#endif
+
+#if 0          
+               if(timer_pending(&pRxTs->RxPktPendingTimer))
+                       del_timer_sync(&pRxTs->RxPktPendingTimer);
+               pRxTs->RxPktPendingTimer.expires = jiffies + ieee->pHTInfo->RxReorderPendingTime;
+               add_timer(&pRxTs->RxPktPendingTimer);
+#endif
+       }
+       spin_unlock_irqrestore(&(ieee->reorder_spinlock), flags);
+}
+#endif
+
+void TsAddBaProcess(unsigned long data)
+{
+       PTX_TS_RECORD   pTxTs = (PTX_TS_RECORD)data;
+       u8 num = pTxTs->num;
+       struct rtllib_device *ieee = container_of(pTxTs, struct rtllib_device, TxTsRecord[num]);
+
+       TsInitAddBA(ieee, pTxTs, BA_POLICY_IMMEDIATE, false);
+       RTLLIB_DEBUG(RTLLIB_DL_BA, "TsAddBaProcess(): ADDBA Req is started!! \n");
+}
+
+
+void ResetTsCommonInfo(PTS_COMMON_INFO pTsCommonInfo)
+{
+       memset(pTsCommonInfo->Addr, 0, 6);
+       memset(&pTsCommonInfo->TSpec, 0, sizeof(TSPEC_BODY));
+       memset(&pTsCommonInfo->TClass, 0, sizeof(QOS_TCLAS)*TCLAS_NUM);
+       pTsCommonInfo->TClasProc = 0;
+       pTsCommonInfo->TClasNum = 0;
+}
+
+void ResetTxTsEntry(PTX_TS_RECORD pTS)
+{
+       ResetTsCommonInfo(&pTS->TsCommonInfo);
+       pTS->TxCurSeq = 0;
+       pTS->bAddBaReqInProgress = false;
+       pTS->bAddBaReqDelayed = false;
+       pTS->bUsingBa = false;
+       pTS->bDisable_AddBa = false;
+       ResetBaEntry(&pTS->TxAdmittedBARecord); 
+       ResetBaEntry(&pTS->TxPendingBARecord);
+}
+
+void ResetRxTsEntry(PRX_TS_RECORD pTS)
+{
+       ResetTsCommonInfo(&pTS->TsCommonInfo);
+       pTS->RxIndicateSeq = 0xffff; 
+       pTS->RxTimeoutIndicateSeq = 0xffff; 
+       ResetBaEntry(&pTS->RxAdmittedBARecord);   
+}
+#ifdef _RTL8192_EXT_PATCH_
+void ResetAdmitTRStream(struct rtllib_device *ieee, u8 *Addr)
+{
+       u8      dir;
+       bool                            search_dir[4] = {0, 0, 0, 0};
+       struct list_head*               psearch_list; 
+       PTS_COMMON_INFO pRet = NULL;
+       PRX_TS_RECORD pRxTS = NULL;
+       PTX_TS_RECORD pTxTS = NULL;
+
+       if(ieee->iw_mode != IW_MODE_MESH) 
+               return;
+
+       search_dir[DIR_DOWN]    = true;
+       psearch_list = &ieee->Rx_TS_Admit_List;
+       for(dir = 0; dir <= DIR_BI_DIR; dir++)
+       {
+               if(search_dir[dir] ==false )
+                       continue;
+               list_for_each_entry(pRet, psearch_list, List){
+                       if ((memcmp(pRet->Addr, Addr, 6) == 0) && (pRet->TSpec.f.TSInfo.field.ucDirection == dir))
+                       {
+                               pRxTS = (PRX_TS_RECORD)pRet;
+                               pRxTS->RxIndicateSeq = 0xffff;
+                               pRxTS->RxTimeoutIndicateSeq = 0xffff;
+                       }
+                                       
+               }       
+       }
+       search_dir[DIR_UP]      = true;
+       psearch_list = &ieee->Tx_TS_Admit_List;
+       for(dir = 0; dir <= DIR_BI_DIR; dir++)
+       {
+               if(search_dir[dir] ==false )
+                       continue;
+               list_for_each_entry(pRet, psearch_list, List){
+                       if ((memcmp(pRet->Addr, Addr, 6) == 0) && (pRet->TSpec.f.TSInfo.field.ucDirection == dir))
+                       {
+                               pTxTS = (PTX_TS_RECORD)pRet;
+                               pTxTS->TxCurSeq = 0xffff;
+                       }
+                                       
+               }       
+       }
+
+       return;
+}
+#endif
+
+void TSInitialize(struct rtllib_device *ieee)
+{
+       PTX_TS_RECORD           pTxTS  = ieee->TxTsRecord;
+       PRX_TS_RECORD           pRxTS  = ieee->RxTsRecord;
+       PRX_REORDER_ENTRY       pRxReorderEntry = ieee->RxReorderEntry;
+       u8                              count = 0;
+       RTLLIB_DEBUG(RTLLIB_DL_TS, "==========>%s()\n", __FUNCTION__);
+       INIT_LIST_HEAD(&ieee->Tx_TS_Admit_List);
+       INIT_LIST_HEAD(&ieee->Tx_TS_Pending_List);
+       INIT_LIST_HEAD(&ieee->Tx_TS_Unused_List);
+
+       for(count = 0; count < TOTAL_TS_NUM; count++)
+       {
+               pTxTS->num = count;
+               _setup_timer(&pTxTS->TsCommonInfo.SetupTimer,
+                           TsSetupTimeOut,
+                           (unsigned long) pTxTS);
+
+               _setup_timer(&pTxTS->TsCommonInfo.InactTimer,
+                           TsInactTimeout,
+                           (unsigned long) pTxTS);
+
+               _setup_timer(&pTxTS->TsAddBaTimer,
+                           TsAddBaProcess,
+                           (unsigned long) pTxTS);
+               
+               _setup_timer(&pTxTS->TxPendingBARecord.Timer,
+                           BaSetupTimeOut, 
+                           (unsigned long) pTxTS);
+               _setup_timer(&pTxTS->TxAdmittedBARecord.Timer,
+                           TxBaInactTimeout,
+                           (unsigned long) pTxTS);
+               
+               ResetTxTsEntry(pTxTS);
+               list_add_tail(&pTxTS->TsCommonInfo.List, 
+                               &ieee->Tx_TS_Unused_List); 
+               pTxTS++;
+       }
+
+       INIT_LIST_HEAD(&ieee->Rx_TS_Admit_List);
+       INIT_LIST_HEAD(&ieee->Rx_TS_Pending_List);
+       INIT_LIST_HEAD(&ieee->Rx_TS_Unused_List);
+       for(count = 0; count < TOTAL_TS_NUM; count++)
+       {
+               pRxTS->num = count;
+               INIT_LIST_HEAD(&pRxTS->RxPendingPktList);
+               
+               _setup_timer(&pRxTS->TsCommonInfo.SetupTimer,
+                           TsSetupTimeOut,
+                           (unsigned long) pRxTS);
+       
+               _setup_timer(&pRxTS->TsCommonInfo.InactTimer,
+                           TsInactTimeout,
+                           (unsigned long) pRxTS);
+
+               _setup_timer(&pRxTS->RxAdmittedBARecord.Timer,
+                           RxBaInactTimeout,
+                           (unsigned long) pRxTS);
+               
+               _setup_timer(&pRxTS->RxPktPendingTimer,
+                           RxPktPendingTimeout,
+                           (unsigned long) pRxTS);
+               
+               ResetRxTsEntry(pRxTS);
+               list_add_tail(&pRxTS->TsCommonInfo.List, &ieee->Rx_TS_Unused_List);
+               pRxTS++;
+       }
+       INIT_LIST_HEAD(&ieee->RxReorder_Unused_List);
+       for(count = 0; count < REORDER_ENTRY_NUM; count++)
+       {
+               list_add_tail( &pRxReorderEntry->List,&ieee->RxReorder_Unused_List);
+               if(count == (REORDER_ENTRY_NUM-1))
+                       break;
+               pRxReorderEntry = &ieee->RxReorderEntry[count+1];
+       }
+
+}
+
+void AdmitTS(struct rtllib_device *ieee, PTS_COMMON_INFO pTsCommonInfo, u32 InactTime)
+{
+       del_timer_sync(&pTsCommonInfo->SetupTimer);
+       del_timer_sync(&pTsCommonInfo->InactTimer);
+
+       if(InactTime!=0)
+               mod_timer(&pTsCommonInfo->InactTimer, jiffies + MSECS(InactTime));
+}
+
+
+PTS_COMMON_INFO SearchAdmitTRStream(struct rtllib_device *ieee, u8*    Addr, u8 TID, TR_SELECT TxRxSelect)
+{
+       u8      dir;
+       bool                            search_dir[4] = {0, 0, 0, 0};
+       struct list_head*               psearch_list; 
+       PTS_COMMON_INFO pRet = NULL;
+       if(ieee->iw_mode == IW_MODE_MASTER) 
+       {
+               if(TxRxSelect == TX_DIR)
+               {
+                       search_dir[DIR_DOWN] = true;
+                       search_dir[DIR_BI_DIR]= true;
+               }
+               else
+               {
+                       search_dir[DIR_UP]      = true;
+                       search_dir[DIR_BI_DIR]= true;
+               }
+       }
+       else if(ieee->iw_mode == IW_MODE_ADHOC)
+       {
+               if(TxRxSelect == TX_DIR)
+                       search_dir[DIR_UP]      = true;
+               else
+                       search_dir[DIR_DOWN] = true;
+       }
+       else
+       {
+               if(TxRxSelect == TX_DIR)
+               {
+                       search_dir[DIR_UP]      = true;
+                       search_dir[DIR_BI_DIR]= true;
+                       search_dir[DIR_DIRECT]= true;
+               }
+               else
+               {
+                       search_dir[DIR_DOWN] = true;
+                       search_dir[DIR_BI_DIR]= true;
+                       search_dir[DIR_DIRECT]= true;
+               }
+       }
+
+       if(TxRxSelect == TX_DIR)
+               psearch_list = &ieee->Tx_TS_Admit_List;
+       else
+               psearch_list = &ieee->Rx_TS_Admit_List;
+       
+       for(dir = 0; dir <= DIR_BI_DIR; dir++)
+       {
+               if(search_dir[dir] ==false )
+                       continue;
+               list_for_each_entry(pRet, psearch_list, List){
+                       if (memcmp(pRet->Addr, Addr, 6) == 0)
+                               if (pRet->TSpec.f.TSInfo.field.ucTSID == TID)
+                                       if(pRet->TSpec.f.TSInfo.field.ucDirection == dir)
+                                       {
+                                               break;
+                                       }
+                                       
+               }       
+               if(&pRet->List  != psearch_list)
+                       break;
+       }
+
+       if(&pRet->List  != psearch_list){
+               return pRet ;
+       }
+       else 
+               return NULL;
+}
+
+void MakeTSEntry(
+               PTS_COMMON_INFO pTsCommonInfo,
+               u8*             Addr,
+               PTSPEC_BODY     pTSPEC,
+               PQOS_TCLAS      pTCLAS,
+               u8              TCLAS_Num,
+               u8              TCLAS_Proc
+       )
+{
+       u8      count;
+
+       if(pTsCommonInfo == NULL)
+               return;
+       
+       memcpy(pTsCommonInfo->Addr, Addr, 6);
+
+       if(pTSPEC != NULL)
+               memcpy((u8*)(&(pTsCommonInfo->TSpec)), (u8*)pTSPEC, sizeof(TSPEC_BODY));
+
+       for(count = 0; count < TCLAS_Num; count++)
+               memcpy((u8*)(&(pTsCommonInfo->TClass[count])), (u8*)pTCLAS, sizeof(QOS_TCLAS));
+
+       pTsCommonInfo->TClasProc = TCLAS_Proc;
+       pTsCommonInfo->TClasNum = TCLAS_Num;
+}
+
+#ifdef _RTL8192_EXT_PATCH_
+void dump_ts_list(struct list_head * ts_list)
+{
+       PTS_COMMON_INFO pRet = NULL;
+       u8 i=0;
+       list_for_each_entry(pRet, ts_list, List){
+               printk("i=%d ADD:"MAC_FMT", TID:%d, dir:%d\n",i,MAC_ARG(pRet->Addr), pRet->TSpec.f.TSInfo.field.ucTSID, pRet->TSpec.f.TSInfo.field.ucDirection);
+               i++;
+       }
+       
+}
+#endif
+
+bool GetTs(
+       struct rtllib_device*   ieee,
+       PTS_COMMON_INFO                 *ppTS,
+       u8*                             Addr,
+       u8                              TID,
+       TR_SELECT                       TxRxSelect,  
+       bool                            bAddNewTs
+       )
+{
+       u8      UP = 0;
+       if(is_broadcast_ether_addr(Addr) || is_multicast_ether_addr(Addr))
+       {
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, "ERR! get TS for Broadcast or Multicast\n");
+               return false;
+       }
+#if 0
+       if(ieee->pStaQos->CurrentQosMode == QOS_DISABLE)
+       {       UP = 0; } 
+       else if(ieee->pStaQos->CurrentQosMode & QOS_WMM)
+       {
+#else
+       if (ieee->current_network.qos_data.supported == 0)
+               UP = 0;
+       else
+       {
+#endif
+               if (!IsACValid(TID))
+               {
+                       RTLLIB_DEBUG(RTLLIB_DL_ERR, "ERR! in %s(), TID(%d) is not valid\n", __FUNCTION__, TID);
+                       return false;
+               }
+
+               switch(TID)
+               {
+               case 0:
+               case 3:
+                       UP = 0;
+                       break;
+
+               case 1:
+               case 2:
+                       UP = 2;
+                       break;
+                       
+               case 4:
+               case 5:
+                       UP = 5;
+                       break;
+                       
+               case 6:
+               case 7:
+                       UP = 7;
+                       break;
+               }
+       }
+
+       *ppTS = SearchAdmitTRStream(
+                       ieee, 
+                       Addr,
+                       UP, 
+                       TxRxSelect);
+       if(*ppTS != NULL)
+       {
+               return true;
+       }
+       else
+       {
+               if(bAddNewTs == false)
+               {
+                       RTLLIB_DEBUG(RTLLIB_DL_TS, "add new TS failed(tid:%d)\n", UP);
+                       return false;
+               }
+               else
+               {
+                       TSPEC_BODY      TSpec;
+                       PQOS_TSINFO             pTSInfo = &TSpec.f.TSInfo;
+                       struct list_head*       pUnusedList = 
+                                                               (TxRxSelect == TX_DIR)?
+                                                               (&ieee->Tx_TS_Unused_List):
+                                                               (&ieee->Rx_TS_Unused_List);
+                                                               
+                       struct list_head*       pAddmitList = 
+                                                               (TxRxSelect == TX_DIR)?
+                                                               (&ieee->Tx_TS_Admit_List):
+                                                               (&ieee->Rx_TS_Admit_List);
+
+                       DIRECTION_VALUE         Dir =           (ieee->iw_mode == IW_MODE_MASTER)? 
+                                                               ((TxRxSelect==TX_DIR)?DIR_DOWN:DIR_UP):
+                                                               ((TxRxSelect==TX_DIR)?DIR_UP:DIR_DOWN);
+                       RTLLIB_DEBUG(RTLLIB_DL_TS, "to add Ts\n");
+                       if(!list_empty(pUnusedList))
+                       {
+                               (*ppTS) = list_entry(pUnusedList->next, TS_COMMON_INFO, List);
+                               list_del_init(&(*ppTS)->List);  
+                               if(TxRxSelect==TX_DIR)
+                               {
+                                       PTX_TS_RECORD tmp = container_of(*ppTS, TX_TS_RECORD, TsCommonInfo);
+                                       ResetTxTsEntry(tmp);
+                               }
+                               else{
+                                       PRX_TS_RECORD tmp = container_of(*ppTS, RX_TS_RECORD, TsCommonInfo);    
+                                       ResetRxTsEntry(tmp);
+                               }
+                               
+                               RTLLIB_DEBUG(RTLLIB_DL_TS, "to init current TS, UP:%d, Dir:%d, addr:"MAC_FMT"\n", UP, Dir, MAC_ARG(Addr));
+                               pTSInfo->field.ucTrafficType = 0;                       
+                               pTSInfo->field.ucTSID = UP;                     
+                               pTSInfo->field.ucDirection = Dir;                       
+                               pTSInfo->field.ucAccessPolicy = 1;              
+                               pTSInfo->field.ucAggregation = 0;               
+                               pTSInfo->field.ucPSB = 0;                               
+                               pTSInfo->field.ucUP = UP;                               
+                               pTSInfo->field.ucTSInfoAckPolicy = 0;           
+                               pTSInfo->field.ucSchedule = 0;                  
+                                       
+                               MakeTSEntry(*ppTS, Addr, &TSpec, NULL, 0, 0);
+                               AdmitTS(ieee, *ppTS, 0);
+                               list_add_tail(&((*ppTS)->List), pAddmitList);
+
+                               return true;
+                       }
+                       else
+                       {
+                               RTLLIB_DEBUG(RTLLIB_DL_ERR, "ERR!!in function %s() There is not enough dir=%d(0=up down=1) TS record to be used!!", __FUNCTION__,Dir);
+                               return false;
+                       }               
+               }               
+       }
+}
+
+void RemoveTsEntry(
+       struct rtllib_device*   ieee,
+       PTS_COMMON_INFO                 pTs,
+       TR_SELECT                       TxRxSelect
+       )
+{
+       unsigned long flags = 0;
+       del_timer_sync(&pTs->SetupTimer);
+       del_timer_sync(&pTs->InactTimer);
+       TsInitDelBA(ieee, pTs, TxRxSelect);
+
+       if(TxRxSelect == RX_DIR)
+       {
+               PRX_REORDER_ENTRY       pRxReorderEntry;
+               PRX_TS_RECORD           pRxTS = (PRX_TS_RECORD)pTs;
+               if(timer_pending(&pRxTS->RxPktPendingTimer))    
+                       del_timer_sync(&pRxTS->RxPktPendingTimer);
+
+                while(!list_empty(&pRxTS->RxPendingPktList))
+                {
+                        spin_lock_irqsave(&(ieee->reorder_spinlock), flags);
+                       pRxReorderEntry = (PRX_REORDER_ENTRY)list_entry(pRxTS->RxPendingPktList.prev,RX_REORDER_ENTRY,List);
+                        list_del_init(&pRxReorderEntry->List);
+                        {
+                                int i = 0;
+                                struct rtllib_rxb * prxb = pRxReorderEntry->prxb;
+                               if (unlikely(!prxb))
+                               {
+                                       spin_unlock_irqrestore(&(ieee->reorder_spinlock), flags);
+                                       return;
+                               }
+                                for(i =0; i < prxb->nr_subframes; i++) {
+                                        dev_kfree_skb(prxb->subframes[i]);
+                                }
+                                kfree(prxb);
+                                prxb = NULL;
+                        }
+                        list_add_tail(&pRxReorderEntry->List,&ieee->RxReorder_Unused_List);
+                        spin_unlock_irqrestore(&(ieee->reorder_spinlock), flags);
+                }
+
+       }
+       else
+       {
+               PTX_TS_RECORD pTxTS = (PTX_TS_RECORD)pTs;
+               del_timer_sync(&pTxTS->TsAddBaTimer);
+       }
+}
+
+void RemovePeerTS(struct rtllib_device* ieee, u8* Addr)
+{
+       PTS_COMMON_INFO pTS, pTmpTS;
+       printk("===========>RemovePeerTS,"MAC_FMT"\n", MAC_ARG(Addr));
+#if 1
+       list_for_each_entry_safe(pTS, pTmpTS, &ieee->Tx_TS_Pending_List, List)
+       {
+               if (memcmp(pTS->Addr, Addr, 6) == 0)
+               {
+                       RemoveTsEntry(ieee, pTS, TX_DIR);
+                       list_del_init(&pTS->List);
+                       list_add_tail(&pTS->List, &ieee->Tx_TS_Unused_List);
+               }
+       }
+       
+       list_for_each_entry_safe(pTS, pTmpTS, &ieee->Tx_TS_Admit_List, List)
+       {
+               if (memcmp(pTS->Addr, Addr, 6) == 0)
+               {
+                       printk("====>remove Tx_TS_admin_list\n");
+                       RemoveTsEntry(ieee, pTS, TX_DIR);
+                       list_del_init(&pTS->List);
+                       list_add_tail(&pTS->List, &ieee->Tx_TS_Unused_List);
+               }
+       }
+       
+       list_for_each_entry_safe(pTS, pTmpTS, &ieee->Rx_TS_Pending_List, List)
+       {
+               if (memcmp(pTS->Addr, Addr, 6) == 0)
+               {
+                       RemoveTsEntry(ieee, pTS, RX_DIR);
+                       list_del_init(&pTS->List);
+                       list_add_tail(&pTS->List, &ieee->Rx_TS_Unused_List);
+               }
+       }
+
+       list_for_each_entry_safe(pTS, pTmpTS, &ieee->Rx_TS_Admit_List, List)
+       {
+               if (memcmp(pTS->Addr, Addr, 6) == 0)
+               {
+                       RemoveTsEntry(ieee, pTS, RX_DIR);
+                       list_del_init(&pTS->List);
+                       list_add_tail(&pTS->List, &ieee->Rx_TS_Unused_List);
+               }
+       }
+#endif
+}
+
+void RemoveAllTS(struct rtllib_device* ieee)
+{
+       PTS_COMMON_INFO pTS, pTmpTS;
+#if 1  
+       list_for_each_entry_safe(pTS, pTmpTS, &ieee->Tx_TS_Pending_List, List)
+       {
+               RemoveTsEntry(ieee, pTS, TX_DIR);
+               list_del_init(&pTS->List);
+               list_add_tail(&pTS->List, &ieee->Tx_TS_Unused_List);    
+       }
+
+       list_for_each_entry_safe(pTS, pTmpTS, &ieee->Tx_TS_Admit_List, List)
+       {
+               RemoveTsEntry(ieee, pTS, TX_DIR);
+               list_del_init(&pTS->List);
+               list_add_tail(&pTS->List, &ieee->Tx_TS_Unused_List);
+       }
+       
+       list_for_each_entry_safe(pTS, pTmpTS, &ieee->Rx_TS_Pending_List, List)
+       {
+               RemoveTsEntry(ieee, pTS, RX_DIR);
+               list_del_init(&pTS->List);
+               list_add_tail(&pTS->List, &ieee->Rx_TS_Unused_List);
+       }
+
+       list_for_each_entry_safe(pTS, pTmpTS, &ieee->Rx_TS_Admit_List, List)
+       {
+               RemoveTsEntry(ieee, pTS, RX_DIR);
+               list_del_init(&pTS->List);
+               list_add_tail(&pTS->List, &ieee->Rx_TS_Unused_List);
+       }
+#endif
+}
+
+void TsStartAddBaProcess(struct rtllib_device* ieee, PTX_TS_RECORD     pTxTS)
+{
+       if(pTxTS->bAddBaReqInProgress == false)
+       {
+               pTxTS->bAddBaReqInProgress = true;
+#if 1
+               if(pTxTS->bAddBaReqDelayed)
+               {
+                       RTLLIB_DEBUG(RTLLIB_DL_BA, "TsStartAddBaProcess(): Delayed Start ADDBA after 60 sec!!\n");
+                       mod_timer(&pTxTS->TsAddBaTimer, jiffies + MSECS(TS_ADDBA_DELAY));
+               }
+               else
+               {
+                       RTLLIB_DEBUG(RTLLIB_DL_BA,"TsStartAddBaProcess(): Immediately Start ADDBA now!!\n");
+                       mod_timer(&pTxTS->TsAddBaTimer, jiffies+10); 
+               }
+#endif
+       }
+       else
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, "%s()==>BA timer is already added\n", __FUNCTION__);
+}
+
+#ifndef BUILT_IN_RTLLIB
+EXPORT_SYMBOL_RSL(RemovePeerTS);
+#ifdef _RTL8192_EXT_PATCH_
+EXPORT_SYMBOL_RSL(ResetAdmitTRStream);
+#endif
+#endif
diff --git a/ubuntu/rtl8192se/rtllib/rtl_crypto.h b/ubuntu/rtl8192se/rtllib/rtl_crypto.h
new file mode 100644 (file)
index 0000000..7a9a2d3
--- /dev/null
@@ -0,0 +1,409 @@
+/*
+ * Scatterlist Cryptographic API.
+ *
+ * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
+ * Copyright (c) 2002 David S. Miller (davem@redhat.com)
+ *
+ * Portions derived from Cryptoapi, by Alexander Kjeldaas <astor@fast.no>
+ * and Nettle, by Niels Mé°ˆler.
+ * 
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option) 
+ * any later version.
+ *
+ */
+#ifndef _LINUX_CRYPTO_H
+#define _LINUX_CRYPTO_H
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/types.h>
+#include <linux/list.h>
+#include <linux/string.h>
+#include <asm/page.h>
+#include <asm/errno.h>
+
+#ifdef BUILT_IN_CRYPTO
+#ifdef CONFIG_CRYPTO_HMAC
+#undef CONFIG_CRYPTO_HMAC
+#endif
+
+#ifdef CONFIG_KMOD
+#undef CONFIG_KMOD
+#endif
+#endif /* BUILT_IN_CRYPTO */
+
+#define crypto_register_alg crypto_register_alg_rsl
+#define crypto_unregister_alg crypto_unregister_alg_rsl
+#define crypto_alloc_tfm crypto_alloc_tfm_rsl
+#define crypto_free_tfm crypto_free_tfm_rsl
+#define crypto_alg_available crypto_alg_available_rsl
+
+/*
+ * Algorithm masks and types.
+ */
+#define CRYPTO_ALG_TYPE_MASK           0x000000ff
+#define CRYPTO_ALG_TYPE_CIPHER         0x00000001
+#define CRYPTO_ALG_TYPE_DIGEST         0x00000002
+#define CRYPTO_ALG_TYPE_COMPRESS       0x00000004
+
+/*
+ * Transform masks and values (for crt_flags).
+ */
+#define CRYPTO_TFM_MODE_MASK           0x000000ff
+#define CRYPTO_TFM_REQ_MASK            0x000fff00
+#define CRYPTO_TFM_RES_MASK            0xfff00000
+
+#define CRYPTO_TFM_MODE_ECB            0x00000001
+#define CRYPTO_TFM_MODE_CBC            0x00000002
+#define CRYPTO_TFM_MODE_CFB            0x00000004
+#define CRYPTO_TFM_MODE_CTR            0x00000008
+
+#define CRYPTO_TFM_REQ_WEAK_KEY                0x00000100
+#define CRYPTO_TFM_RES_WEAK_KEY                0x00100000
+#define CRYPTO_TFM_RES_BAD_KEY_LEN     0x00200000
+#define CRYPTO_TFM_RES_BAD_KEY_SCHED   0x00400000
+#define CRYPTO_TFM_RES_BAD_BLOCK_LEN   0x00800000
+#define CRYPTO_TFM_RES_BAD_FLAGS       0x01000000
+
+/*
+ * Miscellaneous stuff.
+ */
+#define CRYPTO_UNSPEC                  0
+#define CRYPTO_MAX_ALG_NAME            64
+
+struct scatterlist;
+
+/*
+ * Algorithms: modular crypto algorithm implementations, managed
+ * via crypto_register_alg() and crypto_unregister_alg().
+ */
+struct cipher_alg {
+       unsigned int cia_min_keysize;
+       unsigned int cia_max_keysize;
+       int (*cia_setkey)(void *ctx, const u8 *key,
+                         unsigned int keylen, u32 *flags);
+       void (*cia_encrypt)(void *ctx, u8 *dst, const u8 *src);
+       void (*cia_decrypt)(void *ctx, u8 *dst, const u8 *src);
+};
+
+struct digest_alg {
+       unsigned int dia_digestsize;
+       void (*dia_init)(void *ctx);
+       void (*dia_update)(void *ctx, const u8 *data, unsigned int len);
+       void (*dia_final)(void *ctx, u8 *out);
+       int (*dia_setkey)(void *ctx, const u8 *key,
+                         unsigned int keylen, u32 *flags);
+};
+
+struct compress_alg {
+       int (*coa_init)(void *ctx);
+       void (*coa_exit)(void *ctx);
+       int (*coa_compress)(void *ctx, const u8 *src, unsigned int slen,
+                           u8 *dst, unsigned int *dlen);
+       int (*coa_decompress)(void *ctx, const u8 *src, unsigned int slen,
+                             u8 *dst, unsigned int *dlen);
+};
+
+#define cra_cipher     cra_u.cipher
+#define cra_digest     cra_u.digest
+#define cra_compress   cra_u.compress
+
+struct crypto_alg {
+       struct list_head cra_list;
+       u32 cra_flags;
+       unsigned int cra_blocksize;
+       unsigned int cra_ctxsize;
+       const char cra_name[CRYPTO_MAX_ALG_NAME];
+
+       union {
+               struct cipher_alg cipher;
+               struct digest_alg digest;
+               struct compress_alg compress;
+       } cra_u;
+       
+       struct module *cra_module;
+};
+
+/*
+ * Algorithm registration interface.
+ */
+int crypto_register_alg(struct crypto_alg *alg);
+int crypto_unregister_alg(struct crypto_alg *alg);
+
+/*
+ * Algorithm query interface.
+ */
+int crypto_alg_available(const char *name, u32 flags);
+
+/*
+ * Transforms: user-instantiated objects which encapsulate algorithms
+ * and core processing logic.  Managed via crypto_alloc_tfm() and
+ * crypto_free_tfm(), as well as the various helpers below.
+ */
+struct crypto_tfm;
+
+struct cipher_tfm {
+       void *cit_iv;
+       unsigned int cit_ivsize;
+       u32 cit_mode;
+       int (*cit_setkey)(struct crypto_tfm *tfm,
+                         const u8 *key, unsigned int keylen);
+       int (*cit_encrypt)(struct crypto_tfm *tfm,
+                          struct scatterlist *dst,
+                          struct scatterlist *src,
+                          unsigned int nbytes);
+       int (*cit_encrypt_iv)(struct crypto_tfm *tfm,
+                             struct scatterlist *dst,
+                             struct scatterlist *src,
+                             unsigned int nbytes, u8 *iv);
+       int (*cit_decrypt)(struct crypto_tfm *tfm,
+                          struct scatterlist *dst,
+                          struct scatterlist *src,
+                          unsigned int nbytes);
+       int (*cit_decrypt_iv)(struct crypto_tfm *tfm,
+                          struct scatterlist *dst,
+                          struct scatterlist *src,
+                          unsigned int nbytes, u8 *iv);
+       void (*cit_xor_block)(u8 *dst, const u8 *src);
+};
+
+struct digest_tfm {
+       void (*dit_init)(struct crypto_tfm *tfm);
+       void (*dit_update)(struct crypto_tfm *tfm,
+                          struct scatterlist *sg, unsigned int nsg);
+       void (*dit_final)(struct crypto_tfm *tfm, u8 *out);
+       void (*dit_digest)(struct crypto_tfm *tfm, struct scatterlist *sg,
+                          unsigned int nsg, u8 *out);
+       int (*dit_setkey)(struct crypto_tfm *tfm,
+                         const u8 *key, unsigned int keylen);
+#ifdef CONFIG_CRYPTO_HMAC
+       void *dit_hmac_block;
+#endif
+};
+
+struct compress_tfm {
+       int (*cot_compress)(struct crypto_tfm *tfm,
+                           const u8 *src, unsigned int slen,
+                           u8 *dst, unsigned int *dlen);
+       int (*cot_decompress)(struct crypto_tfm *tfm,
+                             const u8 *src, unsigned int slen,
+                             u8 *dst, unsigned int *dlen);
+};
+
+#define crt_cipher     crt_u.cipher
+#define crt_digest     crt_u.digest
+#define crt_compress   crt_u.compress
+
+struct crypto_tfm {
+
+       u32 crt_flags;
+       
+       union {
+               struct cipher_tfm cipher;
+               struct digest_tfm digest;
+               struct compress_tfm compress;
+       } crt_u;
+       
+       struct crypto_alg *__crt_alg;
+};
+
+/* 
+ * Transform user interface.
+ */
+/*
+ * crypto_alloc_tfm() will first attempt to locate an already loaded algorithm.
+ * If that fails and the kernel supports dynamically loadable modules, it
+ * will then attempt to load a module of the same name or alias.  A refcount
+ * is grabbed on the algorithm which is then associated with the new transform.
+ *
+ * crypto_free_tfm() frees up the transform and any associated resources,
+ * then drops the refcount on the associated algorithm.
+ */
+struct crypto_tfm *crypto_alloc_tfm(const char *alg_name, u32 tfm_flags);
+void crypto_free_tfm(struct crypto_tfm *tfm);
+
+/*
+ * Transform helpers which query the underlying algorithm.
+ */
+static inline const char *crypto_tfm_alg_name(struct crypto_tfm *tfm)
+{
+       return tfm->__crt_alg->cra_name;
+}
+
+static inline const char *crypto_tfm_alg_modname(struct crypto_tfm *tfm)
+{
+       struct crypto_alg *alg = tfm->__crt_alg;
+       
+       if (alg->cra_module)
+               return alg->cra_module->name;
+       else
+               return NULL;
+}
+
+static inline u32 crypto_tfm_alg_type(struct crypto_tfm *tfm)
+{
+       return tfm->__crt_alg->cra_flags & CRYPTO_ALG_TYPE_MASK;
+}
+
+static inline unsigned int crypto_tfm_alg_min_keysize(struct crypto_tfm *tfm)
+{
+       BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER);
+       return tfm->__crt_alg->cra_cipher.cia_min_keysize;
+}
+
+static inline unsigned int crypto_tfm_alg_max_keysize(struct crypto_tfm *tfm)
+{
+       BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER);
+       return tfm->__crt_alg->cra_cipher.cia_max_keysize;
+}
+
+static inline unsigned int crypto_tfm_alg_ivsize(struct crypto_tfm *tfm)
+{
+       BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER);
+       return tfm->crt_cipher.cit_ivsize;
+}
+
+static inline unsigned int crypto_tfm_alg_blocksize(struct crypto_tfm *tfm)
+{
+       return tfm->__crt_alg->cra_blocksize;
+}
+
+static inline unsigned int crypto_tfm_alg_digestsize(struct crypto_tfm *tfm)
+{
+       BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_DIGEST);
+       return tfm->__crt_alg->cra_digest.dia_digestsize;
+}
+
+/*
+ * API wrappers.
+ */
+static inline void crypto_digest_init(struct crypto_tfm *tfm)
+{
+       BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_DIGEST);
+       tfm->crt_digest.dit_init(tfm);
+}
+
+static inline void crypto_digest_update(struct crypto_tfm *tfm,
+                                        struct scatterlist *sg,
+                                        unsigned int nsg)
+{
+       BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_DIGEST);
+       tfm->crt_digest.dit_update(tfm, sg, nsg);
+}
+
+static inline void crypto_digest_final(struct crypto_tfm *tfm, u8 *out)
+{
+       BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_DIGEST);
+       tfm->crt_digest.dit_final(tfm, out);
+}
+
+static inline void crypto_digest_digest(struct crypto_tfm *tfm,
+                                        struct scatterlist *sg,
+                                        unsigned int nsg, u8 *out)
+{
+       BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_DIGEST);
+       tfm->crt_digest.dit_digest(tfm, sg, nsg, out);
+}
+
+static inline int crypto_digest_setkey(struct crypto_tfm *tfm,
+                                       const u8 *key, unsigned int keylen)
+{
+       BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_DIGEST);
+       if (tfm->crt_digest.dit_setkey == NULL)
+               return -ENOSYS;
+       return tfm->crt_digest.dit_setkey(tfm, key, keylen);
+}
+
+static inline int crypto_cipher_setkey(struct crypto_tfm *tfm,
+                                       const u8 *key, unsigned int keylen)
+{
+       BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER);
+       return tfm->crt_cipher.cit_setkey(tfm, key, keylen);
+}
+
+static inline int crypto_cipher_encrypt(struct crypto_tfm *tfm,
+                                        struct scatterlist *dst,
+                                        struct scatterlist *src,
+                                        unsigned int nbytes)
+{
+       BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER);
+       return tfm->crt_cipher.cit_encrypt(tfm, dst, src, nbytes);
+}                                        
+
+static inline int crypto_cipher_encrypt_iv(struct crypto_tfm *tfm,
+                                           struct scatterlist *dst,
+                                           struct scatterlist *src,
+                                           unsigned int nbytes, u8 *iv)
+{
+       BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER);
+       BUG_ON(tfm->crt_cipher.cit_mode == CRYPTO_TFM_MODE_ECB);
+       return tfm->crt_cipher.cit_encrypt_iv(tfm, dst, src, nbytes, iv);
+}                                        
+
+static inline int crypto_cipher_decrypt(struct crypto_tfm *tfm,
+                                        struct scatterlist *dst,
+                                        struct scatterlist *src,
+                                        unsigned int nbytes)
+{
+       BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER);
+       return tfm->crt_cipher.cit_decrypt(tfm, dst, src, nbytes);
+}
+
+static inline int crypto_cipher_decrypt_iv(struct crypto_tfm *tfm,
+                                           struct scatterlist *dst,
+                                           struct scatterlist *src,
+                                           unsigned int nbytes, u8 *iv)
+{
+       BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER);
+       BUG_ON(tfm->crt_cipher.cit_mode == CRYPTO_TFM_MODE_ECB);
+       return tfm->crt_cipher.cit_decrypt_iv(tfm, dst, src, nbytes, iv);
+}
+
+static inline void crypto_cipher_set_iv(struct crypto_tfm *tfm,
+                                        const u8 *src, unsigned int len)
+{
+       BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER);
+       memcpy(tfm->crt_cipher.cit_iv, src, len);
+}
+
+static inline void crypto_cipher_get_iv(struct crypto_tfm *tfm,
+                                        u8 *dst, unsigned int len)
+{
+       BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER);
+       memcpy(dst, tfm->crt_cipher.cit_iv, len);
+}
+
+static inline int crypto_comp_compress(struct crypto_tfm *tfm,
+                                       const u8 *src, unsigned int slen,
+                                       u8 *dst, unsigned int *dlen)
+{
+       BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_COMPRESS);
+       return tfm->crt_compress.cot_compress(tfm, src, slen, dst, dlen);
+}
+
+static inline int crypto_comp_decompress(struct crypto_tfm *tfm,
+                                         const u8 *src, unsigned int slen,
+                                         u8 *dst, unsigned int *dlen)
+{
+       BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_COMPRESS);
+       return tfm->crt_compress.cot_decompress(tfm, src, slen, dst, dlen);
+}
+
+/*
+ * HMAC support.
+ */
+#ifdef CONFIG_CRYPTO_HMAC
+void crypto_hmac_init(struct crypto_tfm *tfm, u8 *key, unsigned int *keylen);
+void crypto_hmac_update(struct crypto_tfm *tfm,
+                        struct scatterlist *sg, unsigned int nsg);
+void crypto_hmac_final(struct crypto_tfm *tfm, u8 *key,
+                       unsigned int *keylen, u8 *out);
+void crypto_hmac(struct crypto_tfm *tfm, u8 *key, unsigned int *keylen,
+                 struct scatterlist *sg, unsigned int nsg, u8 *out);
+#endif /* CONFIG_CRYPTO_HMAC */
+
+#endif /* _LINUX_CRYPTO_H */
+
diff --git a/ubuntu/rtl8192se/rtllib/rtllib.h b/ubuntu/rtl8192se/rtllib/rtllib.h
new file mode 100644 (file)
index 0000000..2878cb9
--- /dev/null
@@ -0,0 +1,4037 @@
+/*
+ * Merged with mainline rtllib.h in Aug 2004.  Original ieee802_11
+ * remains copyright by the original authors
+ *
+ * Portions of the merged code are based on Host AP (software wireless
+ * LAN access point) driver for Intersil Prism2/2.5/3.
+ *
+ * Copyright (c) 2001-2002, SSH Communications Security Corp and Jouni Malinen
+ * <jkmaline@cc.hut.fi>
+ * Copyright (c) 2002-2003, Jouni Malinen <jkmaline@cc.hut.fi>
+ *
+ * Adaption to a generic IEEE 802.11 stack by James Ketrenos
+ * <jketreno@linux.intel.com>
+ * Copyright (c) 2004, Intel Corporation
+ *
+ * Modified for Realtek's wi-fi cards by Andrea Merello
+ * <andreamrl@tiscali.it>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation. See README and COPYING for
+ * more details.
+ */
+#ifndef RTLLIB_H
+#define RTLLIB_H
+#include <linux/if_ether.h> /* ETH_ALEN */
+#include <linux/kernel.h>   /* ARRAY_SIZE */
+#include <linux/version.h>
+#include <linux/module.h>
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
+#include <linux/jiffies.h>
+#else
+#include <linux/jffs.h>
+#include <linux/tqueue.h>
+#endif
+#include <linux/timer.h>
+#include <linux/sched.h>
+
+#include <linux/delay.h>
+#include <linux/wireless.h>
+
+#if defined CONFIG_CRDA && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30))
+#include <net/cfg80211.h>
+#endif
+
+#include "rtl819x_HT.h"
+#include "rtl819x_BA.h"
+#include "rtl819x_TS.h"
+
+#include <linux/netdevice.h>
+#include <linux/if_arp.h> /* ARPHRD_ETHER */
+
+#ifndef WIRELESS_SPY
+#define WIRELESS_SPY           
+#endif
+#include <net/iw_handler.h>    
+
+#if defined (RTL8192S_WAPI_SUPPORT)
+#include "wapi.h"
+#include "wapi_interface.h"
+#endif
+
+#ifndef RTK_DMP_PLATFORM
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20))
+#ifndef bool
+typedef enum{false = 0, true} bool;
+#endif
+#endif
+#endif
+
+#ifndef IW_MODE_MONITOR
+#define IW_MODE_MONITOR 6
+#endif
+
+#ifndef IWEVCUSTOM
+#define IWEVCUSTOM 0x8c02
+#endif
+
+#ifndef IW_CUSTOM_MAX
+/* Max number of char in custom event - use multiple of them if needed */
+#define IW_CUSTOM_MAX  256     /* In bytes */
+#endif
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
+#define jiffies_to_msecs(t)  ((t) * 1000 / HZ)
+#ifndef __bitwise
+#define __bitwise __attribute__((bitwise))
+#endif
+typedef __u16  __le16;
+
+#if (WIRELESS_EXT < 16)
+struct iw_spy_data{
+       /* --- Standard spy support --- */
+       int                     spy_number;
+       u_char                  spy_address[IW_MAX_SPY][ETH_ALEN];
+       struct iw_quality       spy_stat[IW_MAX_SPY];
+       /* --- Enhanced spy support (event) */
+       struct iw_quality       spy_thr_low; /* Low threshold */
+       struct iw_quality       spy_thr_high; /* High threshold */
+       u_char                  spy_thr_under[IW_MAX_SPY];
+}; 
+#endif
+#endif
+
+#ifndef container_of
+/**
+ * container_of - cast a member of a structure out to the containing structure
+ *
+ * @ptr:        the pointer to the member.
+ * @type:       the type of the container struct this is embedded in.
+ * @member:     the name of the member within the struct.
+ *
+ */
+#define container_of(ptr, type, member) ({                      \
+        const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
+        (type *)( (char *)__mptr - offsetof(type,member) );})
+#endif
+
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18))
+#define skb_tail_pointer_rtl(skb) skb_tail_pointer(skb)
+#else
+#define skb_tail_pointer_rtl(skb) skb->tail
+#endif
+
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
+       #define EXPORT_SYMBOL_RSL(x) EXPORT_SYMBOL(x)
+#else
+       #define EXPORT_SYMBOL_RSL(x) EXPORT_SYMBOL_NOVERS(x)
+#endif
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
+static inline void tq_init(struct tq_struct * task, void(*func)(void *), void *data)
+{
+       task->routine = func;
+       task->data      = data;
+       INIT_LIST_HEAD(&task->list);
+       task->sync = 0;
+}
+#endif
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10))
+static inline void setup_timer(struct timer_list * timer, void(*function)(unsigned long), unsigned long data)
+{
+       timer->function = function;
+       timer->data     = data;
+}
+#endif
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
+       typedef struct delayed_work delayed_work_struct_rsl;
+       #define queue_delayed_work_rsl(x,y,z) queue_delayed_work(x,y,z)
+       #define INIT_DELAYED_WORK_RSL(x,y,z) INIT_DELAYED_WORK(x,y)
+#elif LINUX_VERSION_CODE <= KERNEL_VERSION(2,5,40)
+       typedef struct tq_struct delayed_work_struct_rsl;
+       #define queue_delayed_work_rsl(x,y,z) schedule_task(y)
+       #define INIT_DELAYED_WORK_RSL(x,y,z) tq_init(x,y,z)
+#else
+       typedef struct work_struct delayed_work_struct_rsl;
+       #define queue_delayed_work_rsl(x,y,z) queue_delayed_work(x,y,z)
+       #define INIT_DELAYED_WORK_RSL(x,y,z) INIT_WORK(x,y,z)
+#endif
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
+       typedef struct work_struct work_struct_rsl;
+       #define queue_work_rsl(x,y) queue_work(x,y)
+       #define INIT_WORK_RSL(x,y,z) INIT_WORK(x,y)
+#elif LINUX_VERSION_CODE <= KERNEL_VERSION(2,5,40)
+       typedef struct tq_struct work_struct_rsl;
+       #define queue_work_rsl(x,y) schedule_task(y)
+       #define INIT_WORK_RSL(x,y,z) tq_init(x,y,z)
+#else
+       typedef struct work_struct work_struct_rsl;
+       #define queue_work_rsl(x,y) queue_work(x,y)
+       #define INIT_WORK_RSL(x,y,z) INIT_WORK(x,y,z)
+#endif
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)       
+       #define container_of_work_rsl(x,y,z) container_of(x,y,z)
+       #define container_of_dwork_rsl(x,y,z) container_of(container_of(x, struct delayed_work, work), y, z) 
+#else
+       #define container_of_work_rsl(x,y,z) (x)
+       #define container_of_dwork_rsl(x,y,z) (x) 
+#endif
+
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,4,20)) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
+static inline char *
+iwe_stream_add_event_rsl(struct iw_request_info *info,
+                       char *     stream,         /* Stream of events */
+                       char *     ends,           /* End of stream */
+                       struct iw_event *iwe,      /* Payload */
+                       int        event_len)      /* Real size of payload */
+{
+        /* Check if it's possible */
+        if((stream + event_len) < ends) {
+                iwe->len = event_len;
+               ndelay(1);   
+                memcpy(stream, (char *) iwe, event_len);
+                stream += event_len;
+        }
+        return stream;
+}
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
+       #define iwe_stream_add_event_rsl(info,start,stop,iwe,len) iwe_stream_add_event(info,start,stop,iwe,len)
+#else
+       #define iwe_stream_add_event_rsl(info,start,stop,iwe,len) iwe_stream_add_event(start,stop,iwe,len)
+#endif
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
+       #define iwe_stream_add_point_rsl(info,start,stop,iwe,p) iwe_stream_add_point(info,start,stop,iwe,p)
+#else
+       #define iwe_stream_add_point_rsl(info,start,stop,iwe,p) iwe_stream_add_point(start,stop,iwe,p)
+#endif
+
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) 
+       #define usb_alloc_urb_rsl(x,y) usb_alloc_urb(x,y)
+       #define usb_submit_urb_rsl(x,y) usb_submit_urb(x,y)
+#else
+       #define usb_alloc_urb_rsl(x,y) usb_alloc_urb(x)
+       #define usb_submit_urb_rsl(x,y) usb_submit_urb(x)
+#endif
+
+static inline void *netdev_priv_rsl(struct net_device *dev)
+{
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) 
+       return netdev_priv(dev);
+#else
+       return dev->priv;
+#endif
+}
+
+#define KEY_TYPE_NA            0x0
+#define KEY_TYPE_WEP40                 0x1
+#define KEY_TYPE_TKIP          0x2
+#define KEY_TYPE_CCMP          0x4
+#define KEY_TYPE_WEP104                0x5
+#if defined (RTL8192S_WAPI_SUPPORT)
+#define KEY_TYPE_SMS4          0x8
+#endif
+/* added for rtl819x tx procedure */
+#define MAX_QUEUE_SIZE         0x10
+
+#if defined(RTL8192SU) || defined(RTL8190P) ||defined(RTL8192U) ||defined(RTL8192E)
+#define BK_QUEUE                               0
+#define BE_QUEUE                               1
+#define VI_QUEUE                               2
+#define VO_QUEUE                               3
+#define HCCA_QUEUE                             4
+#define TXCMD_QUEUE                            5
+#define MGNT_QUEUE                             6
+#define HIGH_QUEUE                             7
+#define BEACON_QUEUE                           8
+#elif defined(RTL8192SE)
+#define BK_QUEUE                               0
+#define BE_QUEUE                               1
+#define VI_QUEUE                               2
+#define VO_QUEUE                               3
+#define BEACON_QUEUE                          4
+#define TXCMD_QUEUE                            5
+#define MGNT_QUEUE                             6
+#define HIGH_QUEUE                             7
+#define HCCA_QUEUE                             8
+
+#elif defined(RTL8192CE)
+
+#define BK_QUEUE                                               0               
+#define BE_QUEUE                                               1               
+#define VI_QUEUE                                               2               
+#define VO_QUEUE                                               3               
+#define BEACON_QUEUE                           4               
+#define TXCMD_QUEUE                                            5               
+#define MGNT_QUEUE                                             6       
+#define HIGH_QUEUE                                             7       
+#define HCCA_QUEUE                                     8
+#endif
+
+#ifdef RTL8192CE
+#define LOW_QUEUE                                              BE_QUEUE
+#define NORMAL_QUEUE                                   MGNT_QUEUE
+#else
+#define LOW_QUEUE                              BE_QUEUE
+#define NORMAL_QUEUE                           MGNT_QUEUE
+#endif
+
+#ifdef _RTL8192_EXT_PATCH_
+#ifndef IW_MODE_MESH 
+#define IW_MODE_MESH                   7       
+#endif
+#define WIFI_MESH_TYPE RTLLIB_FTYPE_DATA
+
+#define WLAN_MESH_HDR_6ADDR_LEN 18                     
+#define WLAN_MESH_HDR_4ADDR_LEN 6                      
+#define MAX_MP                                                 65                      
+#define IEEE_MESH_MAC_HASH_SIZE 31
+#define MAX_HOST_NAME_LENGTH                   32
+#endif
+#define AMSDU_SUBHEADER_LEN 14
+#define SWRF_TIMEOUT                           50
+
+#define IE_CISCO_FLAG_POSITION         0x08    
+#define SUPPORT_CKIP_MIC                       0x08    
+#define SUPPORT_CKIP_PK                        0x10    
+#define        RT_RF_OFF_LEVL_ASPM                     BIT0    
+#define        RT_RF_OFF_LEVL_CLK_REQ          BIT1    
+#define        RT_RF_OFF_LEVL_PCI_D3                   BIT2    
+#define        RT_RF_OFF_LEVL_HALT_NIC         BIT3    
+#define        RT_RF_OFF_LEVL_FREE_FW          BIT4    
+#define        RT_RF_OFF_LEVL_FW_32K           BIT5    
+#define        RT_RF_PS_LEVEL_ALWAYS_ASPM      BIT6    
+#define        RT_RF_LPS_DISALBE_2R                    BIT30   
+#define        RT_RF_LPS_LEVEL_ASPM                    BIT31   
+#define        RT_IN_PS_LEVEL(pPSC, _PS_FLAG)  ((pPSC->CurPsLevel & _PS_FLAG) ? true : false)
+#define        RT_CLEAR_PS_LEVEL(pPSC, _PS_FLAG)       (pPSC->CurPsLevel &= (~(_PS_FLAG)))
+#define        RT_SET_PS_LEVEL(pPSC, _PS_FLAG) (pPSC->CurPsLevel |= _PS_FLAG)
+
+#if defined (RTL8192S_WAPI_SUPPORT)
+#define SMS4_MIC_LEN                16
+#define WAPI_EXT_LEN                18
+#define MAX_WAPI_IE_LEN                255
+#define sMacHdrLng                             24              
+#endif
+
+/* defined for skb cb field */
+/* At most 28 byte */
+typedef struct cb_desc {
+       /* Tx Desc Related flags (8-9) */
+       u8 bLastIniPkt:1;
+       u8 bCmdOrInit:1;
+       u8 bFirstSeg:1;
+       u8 bLastSeg:1;
+       u8 bEncrypt:1;
+       u8 bTxDisableRateFallBack:1;
+       u8 bTxUseDriverAssingedRate:1;
+       u8 bHwSec:1; 
+
+       u8 nStuckCount; 
+
+       /* Tx Firmware Relaged flags (10-11)*/
+       u8 bCTSEnable:1;
+       u8 bRTSEnable:1;
+       u8 bUseShortGI:1;
+       u8 bUseShortPreamble:1;
+       u8 bTxEnableFwCalcDur:1;
+       u8 bAMPDUEnable:1;
+       u8 bRTSSTBC:1;
+       u8 RTSSC:1;
+
+       u8 bRTSBW:1;
+       u8 bPacketBW:1;
+       u8 bRTSUseShortPreamble:1;
+       u8 bRTSUseShortGI:1;
+       u8 bMulticast:1;
+       u8 bBroadcast:1;
+       u8 drv_agg_enable:1;
+#ifdef _RTL8192_EXT_PATCH_
+       u8 mesh_pkt:1;
+#else
+       u8 reserved2:1;
+#endif
+
+       /* Tx Desc related element(12-19) */
+       u8 rata_index;
+       u8 queue_index;
+       u16 txbuf_size;
+       u8 RATRIndex;
+#ifdef _RTL8192_EXT_PATCH_
+       u8 mesh_type:2;
+       u8 bFromAggrQ:1;
+       u8 bAMSDU:1;
+       u8 brelay_pkt:1;
+       u8 badhoc:1;
+       u8 bretry_pkt:1;
+       u8 bFromRx:1;
+#else
+       u8 bAMSDU:1;
+       u8 bFromAggrQ:1;
+       u8 reserved6:6;
+#endif
+       u8 macId;
+       u8 priority;
+
+       /* Tx firmware related element(20-27) */
+       u8 data_rate;
+       u8 rts_rate;
+       u8 ampdu_factor;
+       u8 ampdu_density;
+       u8 DrvAggrNum;
+       u8 bdhcp;
+       u16 pkt_size;
+       u8 bIsSpecialDataFrame;
+}cb_desc, *pcb_desc;
+                        
+/*--------------------------Define -------------------------------------------*/
+#define MGN_1M                  0x02
+#define MGN_2M                  0x04
+#define MGN_5_5M                0x0b
+#define MGN_11M                 0x16
+
+#define MGN_6M                  0x0c
+#define MGN_9M                  0x12
+#define MGN_12M                 0x18
+#define MGN_18M                 0x24
+#define MGN_24M                 0x30
+#define MGN_36M                 0x48
+#define MGN_48M                 0x60
+#define MGN_54M                 0x6c
+
+#define MGN_MCS0                0x80
+#define MGN_MCS1                0x81
+#define MGN_MCS2                0x82
+#define MGN_MCS3                0x83
+#define MGN_MCS4                0x84
+#define MGN_MCS5                0x85
+#define MGN_MCS6                0x86
+#define MGN_MCS7                0x87
+#define MGN_MCS8                0x88
+#define MGN_MCS9                0x89
+#define MGN_MCS10               0x8a
+#define MGN_MCS11               0x8b
+#define MGN_MCS12               0x8c
+#define MGN_MCS13               0x8d
+#define MGN_MCS14               0x8e
+#define MGN_MCS15               0x8f
+#define        MGN_MCS0_SG                     0x90
+#define        MGN_MCS1_SG                     0x91
+#define        MGN_MCS2_SG                     0x92
+#define        MGN_MCS3_SG                     0x93
+#define        MGN_MCS4_SG                     0x94
+#define        MGN_MCS5_SG                     0x95
+#define        MGN_MCS6_SG                     0x96
+#define        MGN_MCS7_SG                     0x97
+#define        MGN_MCS8_SG                     0x98
+#define        MGN_MCS9_SG                     0x99
+#define        MGN_MCS10_SG            0x9a
+#define        MGN_MCS11_SG            0x9b
+#define        MGN_MCS12_SG            0x9c
+#define        MGN_MCS13_SG            0x9d
+#define        MGN_MCS14_SG            0x9e
+#define        MGN_MCS15_SG            0x9f
+
+
+enum   _ReasonCode{
+       unspec_reason   = 0x1,
+       auth_not_valid  = 0x2,
+       deauth_lv_ss    = 0x3, 
+       inactivity              = 0x4,
+       ap_overload     = 0x5, 
+       class2_err              = 0x6,
+       class3_err              = 0x7, 
+       disas_lv_ss     = 0x8,
+       asoc_not_auth   = 0x9,
+
+       mic_failure     = 0xe,
+
+       invalid_IE              = 0x0d,
+       four_way_tmout  = 0x0f,
+       two_way_tmout   = 0x10,
+       IE_dismatch     = 0x11,
+       invalid_Gcipher = 0x12,
+       invalid_Pcipher = 0x13,
+       invalid_AKMP    = 0x14,
+       unsup_RSNIEver = 0x15,
+       invalid_RSNIE   = 0x16,
+       auth_802_1x_fail= 0x17,
+       ciper_reject            = 0x18,
+
+       QoS_unspec              = 0x20, 
+       QAP_bandwidth   = 0x21, 
+       poor_condition  = 0x22, 
+       no_facility     = 0x23, 
+       req_declined    = 0x25, 
+       invalid_param   = 0x26, 
+       req_not_honored= 0x27,  
+       TS_not_created  = 0x2F, 
+       DL_not_allowed  = 0x30, 
+       dest_not_exist  = 0x31, 
+       dest_not_QSTA   = 0x32, 
+};
+
+typedef enum _HW_VARIABLES{
+       HW_VAR_ETHER_ADDR,
+       HW_VAR_MULTICAST_REG,           
+       HW_VAR_BASIC_RATE,
+       HW_VAR_BSSID,
+       HW_VAR_MEDIA_STATUS,
+       HW_VAR_SECURITY_CONF,
+       HW_VAR_BEACON_INTERVAL,
+       HW_VAR_ATIM_WINDOW,     
+       HW_VAR_LISTEN_INTERVAL,
+       HW_VAR_CS_COUNTER,
+       HW_VAR_DEFAULTKEY0,
+       HW_VAR_DEFAULTKEY1,
+       HW_VAR_DEFAULTKEY2,
+       HW_VAR_DEFAULTKEY3,
+       HW_VAR_SIFS,
+       HW_VAR_DIFS,
+       HW_VAR_EIFS,
+       HW_VAR_SLOT_TIME,
+       HW_VAR_ACK_PREAMBLE,
+       HW_VAR_CW_CONFIG,
+       HW_VAR_CW_VALUES,
+       HW_VAR_RATE_FALLBACK_CONTROL,
+       HW_VAR_CONTENTION_WINDOW,
+       HW_VAR_RETRY_COUNT,
+       HW_VAR_TR_SWITCH,
+       HW_VAR_COMMAND,                 
+       HW_VAR_WPA_CONFIG,              
+       HW_VAR_AMPDU_MIN_SPACE, 
+       HW_VAR_SHORTGI_DENSITY, 
+       HW_VAR_AMPDU_FACTOR,
+       HW_VAR_MCS_RATE_AVAILABLE,
+       HW_VAR_AC_PARAM,                        
+       HW_VAR_ACM_CTRL,                        
+       HW_VAR_DIS_Req_Qsize,           
+       HW_VAR_CCX_CHNL_LOAD,           
+       HW_VAR_CCX_NOISE_HISTOGRAM,     
+       HW_VAR_CCX_CLM_NHM,                     
+       HW_VAR_TxOPLimit,                               
+       HW_VAR_TURBO_MODE,                      
+       HW_VAR_RF_STATE,                        
+       HW_VAR_RF_OFF_BY_HW,            
+       HW_VAR_BUS_SPEED,               
+        HW_VAR_SET_DEV_POWER,  
+
+       HW_VAR_RCR,                             
+       HW_VAR_RATR_0,
+       HW_VAR_RRSR,
+       HW_VAR_CPU_RST,
+       HW_VAR_CECHK_BSSID,
+        HW_VAR_LBK_MODE,                       
+       HW_VAR_AES_11N_FIX,
+       HW_VAR_USB_RX_AGGR,
+       HW_VAR_USER_CONTROL_TURBO_MODE,
+       HW_VAR_RETRY_LIMIT,
+       HW_VAR_INIT_TX_RATE,  
+       HW_VAR_TX_RATE_REG,  
+       HW_VAR_EFUSE_USAGE, 
+       HW_VAR_EFUSE_BYTES,
+       HW_VAR_AUTOLOAD_STATUS, 
+       HW_VAR_RF_2R_DISABLE, 
+       HW_VAR_SET_RPWM,
+       HW_VAR_H2C_FW_PWRMODE, 
+       HW_VAR_H2C_FW_JOINBSSRPT, 
+       HW_VAR_1X1_RECV_COMBINE,        
+       HW_VAR_STOP_SEND_BEACON,
+       HW_VAR_TSF_TIMER,                       
+       HW_VAR_IO_CMD,
+       HW_VAR_HANDLE_FW_C2H,           
+       HW_VAR_DL_FW_RSVD_PAGE,                 
+       HW_VAR_AID,                             
+       HW_VAR_HW_SEQ_ENABLE,           
+       HW_VAR_CORRECT_TSF,                     
+       HW_VAR_BCN_VALID,                               
+       HW_VAR_FWLPS_RF_ON,                     
+       HW_VAR_DUAL_TSF_RST                     
+}HW_VARIABLES;
+
+
+#define aSifsTime       (((priv->rtllib->current_network.mode == IEEE_A)||(priv->rtllib->current_network.mode == IEEE_N_24G)||(priv->rtllib->current_network.mode == IEEE_N_5G))? 16 : 10)
+
+#define MGMT_QUEUE_NUM 5
+
+#define IEEE_CMD_SET_WPA_PARAM                 1
+#define        IEEE_CMD_SET_WPA_IE                     2
+#define IEEE_CMD_SET_ENCRYPTION                        3
+#define IEEE_CMD_MLME                          4
+
+#define IEEE_PARAM_WPA_ENABLED                 1
+#define IEEE_PARAM_TKIP_COUNTERMEASURES                2
+#define IEEE_PARAM_DROP_UNENCRYPTED            3
+#define IEEE_PARAM_PRIVACY_INVOKED             4
+#define IEEE_PARAM_AUTH_ALGS                   5
+#define IEEE_PARAM_IEEE_802_1X                 6
+#define IEEE_PARAM_WPAX_SELECT                 7
+#define IEEE_PROTO_WPA                         1       
+#define IEEE_PROTO_RSN                         2
+#define IEEE_WPAX_USEGROUP                     0
+#define IEEE_WPAX_WEP40                                1
+#define IEEE_WPAX_TKIP                         2
+#define IEEE_WPAX_WRAP                         3
+#define IEEE_WPAX_CCMP                         4
+#define IEEE_WPAX_WEP104                       5
+
+#define IEEE_KEY_MGMT_IEEE8021X                        1
+#define IEEE_KEY_MGMT_PSK                      2
+
+#define IEEE_MLME_STA_DEAUTH                   1
+#define IEEE_MLME_STA_DISASSOC                 2
+
+
+#define IEEE_CRYPT_ERR_UNKNOWN_ALG             2
+#define IEEE_CRYPT_ERR_UNKNOWN_ADDR            3
+#define IEEE_CRYPT_ERR_CRYPT_INIT_FAILED       4
+#define IEEE_CRYPT_ERR_KEY_SET_FAILED          5
+#define IEEE_CRYPT_ERR_TX_KEY_SET_FAILED       6
+#define IEEE_CRYPT_ERR_CARD_CONF_FAILED                7
+#define        IEEE_CRYPT_ALG_NAME_LEN                 16
+
+#define MAX_IE_LEN  0xff
+#ifdef _RTL8192_EXT_PATCH_
+#define ENABLE_NULL_PT_DEBUG
+#endif
+#ifdef ENABLE_NULL_PT_DEBUG
+#define RT_ASSERT_RET(_Exp)                                                            \
+               if(!(_Exp))                                                                     \
+               {                                                                                       \
+                       printk("Rtl819x: ");                                    \
+                       printk( "Assertion failed! %s,%s,line=%d\n", \
+                       #_Exp,__FUNCTION__,__LINE__);          \
+                       return;                                         \
+               }
+#define RT_ASSERT_RET_VALUE(_Exp,Ret)                                                          \
+               if(!(_Exp))                                                                     \
+               {                                                                                       \
+                       printk("Rtl819x: ");                                    \
+                       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)
+#endif
+
+typedef struct ieee_param {
+       u32 cmd;
+       u8 sta_addr[ETH_ALEN];
+        union {
+               struct {
+                       u8 name;
+                       u32 value;
+               } wpa_param;
+               struct {
+                       u32 len;
+                       u8 reserved[32];
+                       u8 data[0];
+               } wpa_ie;
+               struct{
+                       int command;
+                       int reason_code;
+               } mlme;
+               struct {
+                       u8 alg[IEEE_CRYPT_ALG_NAME_LEN];
+                       u8 set_tx;
+                       u32 err;
+                       u8 idx;
+                       u8 seq[8]; /* sequence counter (set: RX, get: TX) */
+                       u16 key_len;
+                       u8 key[0];
+               } crypt;
+       } u;
+}ieee_param;
+
+
+#if WIRELESS_EXT < 17
+#define IW_QUAL_QUAL_INVALID   0x10
+#define IW_QUAL_LEVEL_INVALID  0x20
+#define IW_QUAL_NOISE_INVALID  0x40
+#define IW_QUAL_QUAL_UPDATED   0x1
+#define IW_QUAL_LEVEL_UPDATED  0x2
+#define IW_QUAL_NOISE_UPDATED  0x4
+#endif
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,9))
+#define MSECS(t)       (HZ * ((t) / 1000) + (HZ * ((t) % 1000)) / 1000)
+static inline unsigned long msleep_interruptible_rsl(unsigned int msecs)
+{
+         unsigned long timeout = MSECS(msecs) + 1;
+         while (timeout) {
+                 set_current_state(TASK_INTERRUPTIBLE);
+                 timeout = schedule_timeout(timeout);
+         }
+         return timeout;
+}
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,31))
+static inline void msleep(unsigned int msecs)
+{
+         unsigned long timeout = MSECS(msecs) + 1;
+         while (timeout) {
+                 set_current_state(TASK_UNINTERRUPTIBLE);
+                 timeout = schedule_timeout(timeout);
+         }
+}
+#endif
+#else
+#define MSECS(t) msecs_to_jiffies(t)
+#define msleep_interruptible_rsl  msleep_interruptible
+#endif
+
+#define RTLLIB_DATA_LEN                2304
+/* Maximum size for the MA-UNITDATA primitive, 802.11 standard section
+   6.2.1.1.2.
+
+   The figure in section 7.1.2 suggests a body size of up to 2312
+   bytes is allowed, which is a bit confusing, I suspect this
+   represents the 2304 bytes of real data, plus a possible 8 bytes of
+   WEP IV and ICV. (this interpretation suggested by Ramiro Barreiro) */
+#define RTLLIB_1ADDR_LEN 10
+#define RTLLIB_2ADDR_LEN 16
+#define RTLLIB_3ADDR_LEN 24
+#define RTLLIB_4ADDR_LEN 30
+#define RTLLIB_FCS_LEN    4
+#define RTLLIB_HLEN                  (RTLLIB_4ADDR_LEN)
+#define RTLLIB_FRAME_LEN             (RTLLIB_DATA_LEN + RTLLIB_HLEN)
+#define RTLLIB_MGMT_HDR_LEN 24
+#define RTLLIB_DATA_HDR3_LEN 24
+#define RTLLIB_DATA_HDR4_LEN 30
+
+#define MIN_FRAG_THRESHOLD     256U
+#define MAX_FRAG_THRESHOLD     2346U
+#define MAX_HT_DATA_FRAG_THRESHOLD 0x2000
+
+#define HT_AMSDU_SIZE_4K 3839
+#define HT_AMSDU_SIZE_8K 7935
+
+/* Frame control field constants */
+#define RTLLIB_FCTL_VERS               0x0003
+#define RTLLIB_FCTL_FTYPE              0x000c
+#define RTLLIB_FCTL_STYPE              0x00f0
+#define RTLLIB_FCTL_FRAMETYPE  0x00fc
+#define RTLLIB_FCTL_TODS               0x0100
+#define RTLLIB_FCTL_FROMDS             0x0200
+#define RTLLIB_FCTL_DSTODS             0x0300 
+#define RTLLIB_FCTL_MOREFRAGS  0x0400
+#define RTLLIB_FCTL_RETRY              0x0800
+#define RTLLIB_FCTL_PM         0x1000
+#define RTLLIB_FCTL_MOREDATA           0x2000
+#define RTLLIB_FCTL_WEP                0x4000
+#define RTLLIB_FCTL_ORDER              0x8000
+
+#define RTLLIB_FTYPE_MGMT              0x0000
+#define RTLLIB_FTYPE_CTL               0x0004
+#define RTLLIB_FTYPE_DATA              0x0008
+
+/* management */
+#define RTLLIB_STYPE_ASSOC_REQ 0x0000
+#define RTLLIB_STYPE_ASSOC_RESP        0x0010
+#define RTLLIB_STYPE_REASSOC_REQ       0x0020
+#define RTLLIB_STYPE_REASSOC_RESP      0x0030
+#define RTLLIB_STYPE_PROBE_REQ 0x0040
+#define RTLLIB_STYPE_PROBE_RESP        0x0050
+#define RTLLIB_STYPE_BEACON            0x0080
+#define RTLLIB_STYPE_ATIM              0x0090
+#define RTLLIB_STYPE_DISASSOC  0x00A0
+#define RTLLIB_STYPE_AUTH              0x00B0
+#define RTLLIB_STYPE_DEAUTH            0x00C0
+#define RTLLIB_STYPE_MANAGE_ACT        0x00D0
+#ifdef _RTL8192_EXT_PATCH_
+/* added for mesh action frame type */
+#define RTLLIB_STYPE_MESH_ACT        0x00F0
+#endif
+
+/* control */
+#define RTLLIB_STYPE_PSPOLL            0x00A0
+#define RTLLIB_STYPE_RTS               0x00B0
+#define RTLLIB_STYPE_CTS               0x00C0
+#define RTLLIB_STYPE_ACK               0x00D0
+#define RTLLIB_STYPE_CFEND             0x00E0
+#define RTLLIB_STYPE_CFENDACK  0x00F0
+#define RTLLIB_STYPE_BLOCKACK   0x0094
+
+/* data */
+#define RTLLIB_STYPE_DATA              0x0000
+#define RTLLIB_STYPE_DATA_CFACK        0x0010
+#define RTLLIB_STYPE_DATA_CFPOLL       0x0020
+#define RTLLIB_STYPE_DATA_CFACKPOLL    0x0030
+#define RTLLIB_STYPE_NULLFUNC  0x0040
+#define RTLLIB_STYPE_CFACK             0x0050
+#define RTLLIB_STYPE_CFPOLL            0x0060
+#define RTLLIB_STYPE_CFACKPOLL 0x0070
+#define RTLLIB_STYPE_QOS_DATA  0x0080 
+#define RTLLIB_STYPE_QOS_NULL  0x00C0
+
+#define RTLLIB_SCTL_FRAG               0x000F
+#define RTLLIB_SCTL_SEQ                0xFFF0
+
+/* QOS control */
+#define RTLLIB_QCTL_TID              0x000F
+
+#define        FC_QOS_BIT                                      BIT7
+#define IsDataFrame(pdu)                       ( ((pdu[0] & 0x0C)==0x08) ? true : false )
+#define        IsLegacyDataFrame(pdu)  (IsDataFrame(pdu) && (!(pdu[0]&FC_QOS_BIT)) )   
+#define IsQoSDataFrame(pframe)  ((*(u16*)pframe&(RTLLIB_STYPE_QOS_DATA|RTLLIB_FTYPE_DATA)) == (RTLLIB_STYPE_QOS_DATA|RTLLIB_FTYPE_DATA))
+#define Frame_Order(pframe)     (*(u16*)pframe&RTLLIB_FCTL_ORDER)
+#define SN_LESS(a, b)          (((a-b)&0x800)!=0)
+#define SN_EQUAL(a, b) (a == b)
+#define MAX_DEV_ADDR_SIZE 8
+
+typedef enum _ACT_CATEGORY{
+        ACT_CAT_QOS = 1,
+        ACT_CAT_DLS = 2,
+        ACT_CAT_BA  = 3,
+        ACT_CAT_HT  = 7,
+        ACT_CAT_WMM = 17,
+#ifdef _RTL8192_EXT_PATCH_
+        ACT_CAT_MESH_PEERLINK_MGNT = 30,
+        ACT_CAT_MESH_LINK_METRIC = 31,
+        ACT_CAT_MESH_PATH_SELECT = 32,
+        ACT_CAT_MESH_INTERWORKING = 33,
+        ACT_CAT_MESH_SECURITY_INFO = 35,
+#endif
+} ACT_CATEGORY, *PACT_CATEGORY;
+
+typedef enum _TS_ACTION{
+        ACT_ADDTSREQ = 0,
+        ACT_ADDTSRSP = 1,
+        ACT_DELTS    = 2,
+        ACT_SCHEDULE = 3,
+} TS_ACTION, *PTS_ACTION;
+
+typedef enum _BA_ACTION{
+        ACT_ADDBAREQ = 0,
+        ACT_ADDBARSP = 1,
+        ACT_DELBA    = 2,
+} BA_ACTION, *PBA_ACTION;
+#ifdef _RTL8192_EXT_PATCH_
+typedef enum _PEERLINK_ACTION{
+       ACT_PEERLINK_OPEN = 0,
+       ACT_PEERLINK_CONFIRM = 1,
+       ACT_PEERLINK_CLOSE =2,
+} PEERLINK_ACTION, *PPEERLINK_ACTION;
+
+typedef enum _LINK_METRIC_ACTION{
+       ACT_LINKMETRIC_REQ = 0,
+       ACT_LINKMETRIC_RSP = 1,
+} LINK_METRIC_ACTION, *PLINK_METRIC_ACTION;
+
+typedef enum _PATH_SELECT_ACTION{
+       ACT_PATH_REQ = 0,
+       ACT_PATH_REPLY = 1,
+       ACT_PATH_ERR =2,
+       ACT_RANN =3,
+} PATH_SELECT_ACTION, *PPATH_SELECT_ACTION;
+
+typedef enum _MESH_PEERING_PROTOCOL_VERSION_VALUE{
+       Mesh_Peering_Management_Protocol_V =42,
+       Abbreviated_Handshake_Protocol_V = 43,
+}MESH_PEERING_PROTOCOL_VERSION_VALUE;
+#endif
+
+typedef enum _InitialGainOpType{
+       IG_Backup=0,
+       IG_Restore,
+       IG_Max
+}InitialGainOpType;
+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, 
+        LED_CTL_STOP_WPS_FAIL = 12, 
+        LED_CTL_STOP_WPS_FAIL_OVERLAP = 13, 
+}LED_CTL_MODE;
+
+typedef enum _RT_RF_TYPE_DEF
+{
+       RF_1T2R = 0,
+       RF_2T4R,
+       RF_2T2R,
+       RF_1T1R,
+       RF_2T2R_GREEN,
+       RF_819X_MAX_TYPE
+}RT_RF_TYPE_DEF;
+
+typedef enum _WIRELESS_MODE {
+       WIRELESS_MODE_UNKNOWN = 0x00,
+       WIRELESS_MODE_A = 0x01,
+       WIRELESS_MODE_B = 0x02,
+       WIRELESS_MODE_G = 0x04,
+       WIRELESS_MODE_AUTO = 0x08,
+       WIRELESS_MODE_N_24G = 0x10,
+       WIRELESS_MODE_N_5G = 0x20
+} WIRELESS_MODE;
+
+typedef enum _NETWORK_TYPE{
+       WIRELESS_11B = 1,
+       WIRELESS_11G = 2,
+       WIRELESS_11A = 4,
+       WIRELESS_11N = 8
+} WIRELESS_NETWORK_TYPE;
+
+#define OUI_SUBTYPE_WMM_INFO           0
+#define OUI_SUBTYPE_WMM_PARAM  1
+#define OUI_SUBTYPE_QOS_CAPABI 5
+
+/* debug macros */
+#define CONFIG_RTLLIB_DEBUG
+#ifdef CONFIG_RTLLIB_DEBUG
+extern u32 rtllib_debug_level;
+#define RTLLIB_DEBUG(level, fmt, args...) \
+do { if (rtllib_debug_level & (level)) \
+  printk(KERN_DEBUG "rtllib: " fmt, ## args); } while (0)
+#define RTLLIB_DEBUG_DATA(level, data, datalen)        \
+       do{ if ((rtllib_debug_level & (level)) == (level))      \
+               {       \
+                       int i;                                  \
+                       u8* pdata = (u8*) data;                 \
+                       printk(KERN_DEBUG "rtllib: %s()\n", __FUNCTION__);      \
+                       for(i=0; i<(int)(datalen); i++)                 \
+                       {                                               \
+                               printk("%2x ", pdata[i]);               \
+                               if ((i+1)%16 == 0) printk("\n");        \
+                       }                               \
+                       printk("\n");                   \
+               }                                       \
+       } while (0)             
+#else
+#define RTLLIB_DEBUG(level, fmt, args...) do {} while (0)
+#define RTLLIB_DEBUG_DATA(level, data, datalen) do {} while(0)
+#endif /* CONFIG_RTLLIB_DEBUG */
+
+/* debug macros not dependent on CONFIG_RTLLIB_DEBUG */
+
+#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]
+
+/*
+ * To use the debug system;
+ *
+ * If you are defining a new debug classification, simply add it to the #define
+ * list here in the form of:
+ *
+ * #define RTLLIB_DL_xxxx VALUE
+ *
+ * shifting value to the left one bit from the previous entry.  xxxx should be
+ * the name of the classification (for example, WEP)
+ *
+ * You then need to either add a RTLLIB_xxxx_DEBUG() macro definition for your
+ * classification, or use RTLLIB_DEBUG(RTLLIB_DL_xxxx, ...) whenever you want
+ * to send output to that classification.
+ *
+ * To add your debug level to the list of levels seen when you perform
+ *
+ * % cat /proc/net/ipw/debug_level
+ *
+ * you simply need to add your entry to the ipw_debug_levels array.
+ *
+ * If you do not see debug_level in /proc/net/ipw then you do not have
+ * CONFIG_RTLLIB_DEBUG defined in your kernel configuration
+ *
+ */
+
+#define RTLLIB_DL_INFO          (1<<0)
+#define RTLLIB_DL_WX            (1<<1)
+#define RTLLIB_DL_SCAN          (1<<2)
+#define RTLLIB_DL_STATE         (1<<3)
+#define RTLLIB_DL_MGMT          (1<<4)
+#define RTLLIB_DL_FRAG          (1<<5)
+#define RTLLIB_DL_EAP           (1<<6)
+#define RTLLIB_DL_DROP          (1<<7)
+
+#define RTLLIB_DL_TX            (1<<8)
+#define RTLLIB_DL_RX            (1<<9)
+
+#define RTLLIB_DL_HT              (1<<10)  
+#define RTLLIB_DL_BA              (1<<11)  
+#define RTLLIB_DL_TS              (1<<12)  
+#define RTLLIB_DL_QOS           (1<<13)
+#define RTLLIB_DL_REORDER         (1<<14)
+#define RTLLIB_DL_IOT     (1<<15)
+#define RTLLIB_DL_IPS     (1<<16)
+#define RTLLIB_DL_TRACE           (1<<29)  
+#define RTLLIB_DL_DATA    (1<<30)   
+#define RTLLIB_DL_ERR     (1<<31)   
+#define RTLLIB_ERROR(f, a...) printk(KERN_ERR "rtllib: " f, ## a)
+#define RTLLIB_WARNING(f, a...) printk(KERN_WARNING "rtllib: " f, ## a)
+#define RTLLIB_DEBUG_INFO(f, a...)   RTLLIB_DEBUG(RTLLIB_DL_INFO, f, ## a)
+
+#define RTLLIB_DEBUG_WX(f, a...)     RTLLIB_DEBUG(RTLLIB_DL_WX, f, ## a)
+#define RTLLIB_DEBUG_SCAN(f, a...)   RTLLIB_DEBUG(RTLLIB_DL_SCAN, f, ## a)
+#define RTLLIB_DEBUG_STATE(f, a...)  RTLLIB_DEBUG(RTLLIB_DL_STATE, f, ## a)
+#define RTLLIB_DEBUG_MGMT(f, a...)  RTLLIB_DEBUG(RTLLIB_DL_MGMT, f, ## a)
+#define RTLLIB_DEBUG_FRAG(f, a...)  RTLLIB_DEBUG(RTLLIB_DL_FRAG, f, ## a)
+#define RTLLIB_DEBUG_EAP(f, a...)  RTLLIB_DEBUG(RTLLIB_DL_EAP, f, ## a)
+#define RTLLIB_DEBUG_DROP(f, a...)  RTLLIB_DEBUG(RTLLIB_DL_DROP, f, ## a)
+#define RTLLIB_DEBUG_TX(f, a...)  RTLLIB_DEBUG(RTLLIB_DL_TX, f, ## a)
+#define RTLLIB_DEBUG_RX(f, a...)  RTLLIB_DEBUG(RTLLIB_DL_RX, f, ## a)
+#define RTLLIB_DEBUG_QOS(f, a...)  RTLLIB_DEBUG(RTLLIB_DL_QOS, f, ## a)
+
+#ifdef CONFIG_RTLLIB_DEBUG
+/* Added by Annie, 2005-11-22. */
+#define MAX_STR_LEN     64
+/* I want to see ASCII 33 to 126 only. Otherwise, I print '?'. Annie, 2005-11-22.*/
+#define PRINTABLE(_ch)  (_ch>'!' && _ch<'~')    
+#define RTLLIB_PRINT_STR(_Comp, _TitleString, _Ptr, _Len)                              \
+                        if((_Comp) & level)                                                    \
+                        {                                                                       \
+                                int             __i;                                            \
+                                u8  buffer[MAX_STR_LEN];                                       \
+                                int length = (_Len<MAX_STR_LEN)? _Len : (MAX_STR_LEN-1) ;      \
+                                memset(buffer, 0, MAX_STR_LEN);                                \
+                                memcpy(buffer, (u8 *)_Ptr, length );                           \
+                                for( __i=0; __i<MAX_STR_LEN; __i++ )                            \
+                                {                                                               \
+                                     if( !PRINTABLE(buffer[__i]) )   buffer[__i] = '?';        \
+                                }                                                               \
+                                buffer[length] = '\0';                                          \
+                                printk("Rtl819x: ");                                           \
+                                printk(_TitleString);                                         \
+                                printk(": %d, <%s>\n", _Len, buffer);                         \
+                        }
+#else
+#define RTLLIB_PRINT_STR(_Comp, _TitleString, _Ptr, _Len)  do {} while (0)
+#endif
+
+#ifndef ETH_P_PAE
+#define ETH_P_PAE 0x888E /* Port Access Entity (IEEE 802.1X) */
+#define ETH_P_IP       0x0800          /* Internet Protocol packet     */
+#define ETH_P_ARP      0x0806          /* Address Resolution packet    */
+#endif /* ETH_P_PAE */
+
+#define ETH_P_PREAUTH 0x88C7 /* IEEE 802.11i pre-authentication */
+
+#ifndef ETH_P_80211_RAW
+#define ETH_P_80211_RAW (ETH_P_ECONET + 1)
+#endif
+
+/* IEEE 802.11 defines */
+
+#define P80211_OUI_LEN 3
+
+struct rtllib_snap_hdr {
+
+        u8    dsap;   /* always 0xAA */
+        u8    ssap;   /* always 0xAA */
+        u8    ctrl;   /* always 0x03 */
+        u8    oui[P80211_OUI_LEN];    /* organizational universal id */
+
+} __attribute__ ((packed));
+
+#define SNAP_SIZE sizeof(struct rtllib_snap_hdr)
+
+#define WLAN_FC_GET_VERS(fc) ((fc) & RTLLIB_FCTL_VERS)
+#define WLAN_FC_GET_TYPE(fc) ((fc) & RTLLIB_FCTL_FTYPE)
+#define WLAN_FC_GET_STYPE(fc) ((fc) & RTLLIB_FCTL_STYPE)
+#define WLAN_FC_MORE_DATA(fc) ((fc) & RTLLIB_FCTL_MOREDATA)
+
+#define WLAN_FC_GET_FRAMETYPE(fc) ((fc) & RTLLIB_FCTL_FRAMETYPE)
+#define WLAN_GET_SEQ_FRAG(seq) ((seq) & RTLLIB_SCTL_FRAG)
+#define WLAN_GET_SEQ_SEQ(seq)  (((seq) & RTLLIB_SCTL_SEQ) >> 4)
+
+#if !(defined CONFIG_CRDA && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30)))
+/* Authentication algorithms */
+#define WLAN_AUTH_OPEN 0
+#define WLAN_AUTH_SHARED_KEY 1
+#define WLAN_AUTH_LEAP 128
+
+#define WLAN_AUTH_CHALLENGE_LEN 128
+
+#define WLAN_CAPABILITY_ESS (1<<0)
+#define WLAN_CAPABILITY_IBSS (1<<1)
+#define WLAN_CAPABILITY_CF_POLLABLE (1<<2)
+#define WLAN_CAPABILITY_CF_POLL_REQUEST (1<<3)
+#define WLAN_CAPABILITY_PRIVACY (1<<4)
+#define WLAN_CAPABILITY_SHORT_PREAMBLE (1<<5)
+#define WLAN_CAPABILITY_PBCC (1<<6)
+#define WLAN_CAPABILITY_CHANNEL_AGILITY (1<<7)
+#define WLAN_CAPABILITY_SPECTRUM_MGMT (1<<8)
+#define WLAN_CAPABILITY_QOS (1<<9)
+#define WLAN_CAPABILITY_SHORT_SLOT_TIME (1<<10)
+#define WLAN_CAPABILITY_DSSS_OFDM (1<<13)
+
+/* 802.11g ERP information element */
+#define WLAN_ERP_NON_ERP_PRESENT (1<<0)
+#define WLAN_ERP_USE_PROTECTION (1<<1)
+#define WLAN_ERP_BARKER_PREAMBLE (1<<2)
+
+/* Status codes */
+enum rtllib_statuscode {
+        WLAN_STATUS_SUCCESS = 0,
+        WLAN_STATUS_UNSPECIFIED_FAILURE = 1,
+        WLAN_STATUS_CAPS_UNSUPPORTED = 10,
+        WLAN_STATUS_REASSOC_NO_ASSOC = 11,
+        WLAN_STATUS_ASSOC_DENIED_UNSPEC = 12,
+        WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG = 13,
+        WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION = 14,
+        WLAN_STATUS_CHALLENGE_FAIL = 15,
+        WLAN_STATUS_AUTH_TIMEOUT = 16,
+        WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA = 17,
+        WLAN_STATUS_ASSOC_DENIED_RATES = 18,
+        /* 802.11b */
+        WLAN_STATUS_ASSOC_DENIED_NOSHORTPREAMBLE = 19,
+        WLAN_STATUS_ASSOC_DENIED_NOPBCC = 20,
+        WLAN_STATUS_ASSOC_DENIED_NOAGILITY = 21,
+        /* 802.11h */
+        WLAN_STATUS_ASSOC_DENIED_NOSPECTRUM = 22,
+        WLAN_STATUS_ASSOC_REJECTED_BAD_POWER = 23,
+        WLAN_STATUS_ASSOC_REJECTED_BAD_SUPP_CHAN = 24,
+        /* 802.11g */
+        WLAN_STATUS_ASSOC_DENIED_NOSHORTTIME = 25,
+        WLAN_STATUS_ASSOC_DENIED_NODSSSOFDM = 26,
+        /* 802.11i */
+        WLAN_STATUS_INVALID_IE = 40,
+        WLAN_STATUS_INVALID_GROUP_CIPHER = 41,
+        WLAN_STATUS_INVALID_PAIRWISE_CIPHER = 42,
+        WLAN_STATUS_INVALID_AKMP = 43,
+        WLAN_STATUS_UNSUPP_RSN_VERSION = 44,
+        WLAN_STATUS_INVALID_RSN_IE_CAP = 45,
+        WLAN_STATUS_CIPHER_SUITE_REJECTED = 46,
+};
+
+/* Reason codes */
+enum rtllib_reasoncode {
+        WLAN_REASON_UNSPECIFIED = 1,
+        WLAN_REASON_PREV_AUTH_NOT_VALID = 2,
+        WLAN_REASON_DEAUTH_LEAVING = 3,
+        WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY = 4,
+        WLAN_REASON_DISASSOC_AP_BUSY = 5,
+        WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA = 6,
+        WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA = 7,
+        WLAN_REASON_DISASSOC_STA_HAS_LEFT = 8,
+        WLAN_REASON_STA_REQ_ASSOC_WITHOUT_AUTH = 9,
+        /* 802.11h */
+        WLAN_REASON_DISASSOC_BAD_POWER = 10,
+        WLAN_REASON_DISASSOC_BAD_SUPP_CHAN = 11,
+        /* 802.11i */
+        WLAN_REASON_INVALID_IE = 13,
+        WLAN_REASON_MIC_FAILURE = 14,
+        WLAN_REASON_4WAY_HANDSHAKE_TIMEOUT = 15,
+        WLAN_REASON_GROUP_KEY_HANDSHAKE_TIMEOUT = 16,
+        WLAN_REASON_IE_DIFFERENT = 17,
+        WLAN_REASON_INVALID_GROUP_CIPHER = 18,
+        WLAN_REASON_INVALID_PAIRWISE_CIPHER = 19,
+        WLAN_REASON_INVALID_AKMP = 20,
+        WLAN_REASON_UNSUPP_RSN_VERSION = 21,
+        WLAN_REASON_INVALID_RSN_IE_CAP = 22,
+        WLAN_REASON_IEEE8021X_FAILED = 23,
+        WLAN_REASON_CIPHER_SUITE_REJECTED = 24,
+};
+#endif
+
+#define RTLLIB_STATMASK_SIGNAL (1<<0)
+#define RTLLIB_STATMASK_RSSI (1<<1)
+#define RTLLIB_STATMASK_NOISE (1<<2)
+#define RTLLIB_STATMASK_RATE (1<<3)
+#define RTLLIB_STATMASK_WEMASK 0x7
+
+#define RTLLIB_CCK_MODULATION    (1<<0)
+#define RTLLIB_OFDM_MODULATION   (1<<1)
+
+#define RTLLIB_24GHZ_BAND     (1<<0)
+#define RTLLIB_52GHZ_BAND     (1<<1)
+
+#define RTLLIB_CCK_RATE_LEN            4
+#define RTLLIB_CCK_RATE_1MB                    0x02
+#define RTLLIB_CCK_RATE_2MB                    0x04
+#define RTLLIB_CCK_RATE_5MB                    0x0B
+#define RTLLIB_CCK_RATE_11MB                   0x16
+#define RTLLIB_OFDM_RATE_LEN           8
+#define RTLLIB_OFDM_RATE_6MB                   0x0C
+#define RTLLIB_OFDM_RATE_9MB                   0x12
+#define RTLLIB_OFDM_RATE_12MB          0x18
+#define RTLLIB_OFDM_RATE_18MB          0x24
+#define RTLLIB_OFDM_RATE_24MB          0x30
+#define RTLLIB_OFDM_RATE_36MB          0x48
+#define RTLLIB_OFDM_RATE_48MB          0x60
+#define RTLLIB_OFDM_RATE_54MB          0x6C
+#define RTLLIB_BASIC_RATE_MASK         0x80
+
+#define RTLLIB_CCK_RATE_1MB_MASK               (1<<0)
+#define RTLLIB_CCK_RATE_2MB_MASK               (1<<1)
+#define RTLLIB_CCK_RATE_5MB_MASK               (1<<2)
+#define RTLLIB_CCK_RATE_11MB_MASK              (1<<3)
+#define RTLLIB_OFDM_RATE_6MB_MASK              (1<<4)
+#define RTLLIB_OFDM_RATE_9MB_MASK              (1<<5)
+#define RTLLIB_OFDM_RATE_12MB_MASK             (1<<6)
+#define RTLLIB_OFDM_RATE_18MB_MASK             (1<<7)
+#define RTLLIB_OFDM_RATE_24MB_MASK             (1<<8)
+#define RTLLIB_OFDM_RATE_36MB_MASK             (1<<9)
+#define RTLLIB_OFDM_RATE_48MB_MASK             (1<<10)
+#define RTLLIB_OFDM_RATE_54MB_MASK             (1<<11)
+
+#define RTLLIB_CCK_RATES_MASK          0x0000000F
+#define RTLLIB_CCK_BASIC_RATES_MASK    (RTLLIB_CCK_RATE_1MB_MASK | \
+       RTLLIB_CCK_RATE_2MB_MASK)
+#define RTLLIB_CCK_DEFAULT_RATES_MASK  (RTLLIB_CCK_BASIC_RATES_MASK | \
+        RTLLIB_CCK_RATE_5MB_MASK | \
+        RTLLIB_CCK_RATE_11MB_MASK)
+
+#define RTLLIB_OFDM_RATES_MASK         0x00000FF0
+#define RTLLIB_OFDM_BASIC_RATES_MASK   (RTLLIB_OFDM_RATE_6MB_MASK | \
+       RTLLIB_OFDM_RATE_12MB_MASK | \
+       RTLLIB_OFDM_RATE_24MB_MASK)
+#define RTLLIB_OFDM_DEFAULT_RATES_MASK (RTLLIB_OFDM_BASIC_RATES_MASK | \
+       RTLLIB_OFDM_RATE_9MB_MASK  | \
+       RTLLIB_OFDM_RATE_18MB_MASK | \
+       RTLLIB_OFDM_RATE_36MB_MASK | \
+       RTLLIB_OFDM_RATE_48MB_MASK | \
+       RTLLIB_OFDM_RATE_54MB_MASK)
+#define RTLLIB_DEFAULT_RATES_MASK (RTLLIB_OFDM_DEFAULT_RATES_MASK | \
+                                RTLLIB_CCK_DEFAULT_RATES_MASK)
+
+#define RTLLIB_NUM_OFDM_RATES      8
+#define RTLLIB_NUM_CCK_RATES               4
+#define RTLLIB_OFDM_SHIFT_MASK_A         4
+
+
+/* this is stolen and modified from the madwifi driver*/
+#define RTLLIB_FC0_TYPE_MASK           0x0c
+#define RTLLIB_FC0_TYPE_DATA           0x08
+#define RTLLIB_FC0_SUBTYPE_MASK        0xB0
+#define RTLLIB_FC0_SUBTYPE_QOS 0x80
+
+#define RTLLIB_QOS_HAS_SEQ(fc) \
+       (((fc) & (RTLLIB_FC0_TYPE_MASK | RTLLIB_FC0_SUBTYPE_MASK)) == \
+        (RTLLIB_FC0_TYPE_DATA | RTLLIB_FC0_SUBTYPE_QOS))
+       
+/* this is stolen from ipw2200 driver */
+#define IEEE_IBSS_MAC_HASH_SIZE 31
+struct ieee_ibss_seq {
+       u8 mac[ETH_ALEN];
+       u16 seq_num[17];
+       u16 frag_num[17];
+       unsigned long packet_time[17];
+       struct list_head list;
+};
+
+#ifdef _RTL8192_EXT_PATCH_
+struct ieee_mesh_seq {
+       u8 mac[ETH_ALEN];
+       u16 seq_num[17];
+       u16 frag_num[17];
+       unsigned long packet_time[17];
+       struct list_head list;
+};
+#endif
+/* NOTE: This data is for statistical purposes; not all hardware provides this
+ *       information for frames received.  Not setting these will not cause
+ *       any adverse affects. */
+struct rtllib_rx_stats {
+#if 1
+       u32 mac_time[2];
+       s8 rssi;
+       u8 signal;
+       u8 noise;
+       u16 rate; /* in 100 kbps */
+       u8 received_channel;
+       u8 control;
+       u8 mask;
+       u8 freq;
+       u16 len;
+       u64 tsf;
+       u32 beacon_time;
+       u8 nic_type;
+       u16       Length;
+       u8        SignalQuality; 
+       s32       RecvSignalPower; 
+       s8        RxPower; 
+       u8        SignalStrength; 
+       u16       bHwError:1;
+       u16       bCRC:1;
+       u16       bICV:1;
+       u16       bShortPreamble:1;
+       u16       Antenna:1;      
+       u16       Decrypted:1;    
+       u16       Wakeup:1;       
+       u16       Reserved0:1;    
+       u8        AGC;
+       u32       TimeStampLow;
+       u32       TimeStampHigh;
+       bool      bShift;
+       bool      bIsQosData;             
+       u8        UserPriority;
+
+
+       u8        RxDrvInfoSize;
+       u8        RxBufShift;
+       bool      bIsAMPDU;
+       bool      bFirstMPDU;
+       bool      bContainHTC;
+       bool      RxIs40MHzPacket;
+       u32       RxPWDBAll;
+       u8        RxMIMOSignalStrength[4];        
+       s8        RxMIMOSignalQuality[2];
+       bool      bPacketMatchBSSID;
+       bool      bIsCCK;
+       bool      bPacketToSelf;
+       u8*       virtual_address;
+       u16          packetlength;              
+       u16          fraglength;                        
+       u16          fragoffset;                        
+       u16          ntotalfrag;
+       bool              bisrxaggrsubframe;
+       bool              bPacketBeacon;        
+       bool              bToSelfBA;            
+       char      cck_adc_pwdb[4];      
+       u16               Seq_Num;
+       u8              nTotalAggPkt;           
+#ifdef TCP_CSUM_OFFLOAD_RX
+       u8      tcp_csum_valid;
+#endif
+#if defined (RTL8192S_WAPI_SUPPORT)
+       u8              WapiTempPN[16];
+       u8              WapiSrcAddr[6];
+       u8              bWapiCheckPNInDecrypt;
+#endif
+#endif
+
+};
+
+/* IEEE 802.11 requires that STA supports concurrent reception of at least
+ * three fragmented frames. This define can be increased to support more
+ * concurrent frames, but it should be noted that each entry can consume about
+ * 2 kB of RAM and increasing cache size will slow down frame reassembly. */
+#define RTLLIB_FRAG_CACHE_LEN 4
+
+struct rtllib_frag_entry {
+       unsigned long first_frag_time;
+       unsigned int seq;
+       unsigned int last_frag;
+       struct sk_buff *skb;
+       u8 src_addr[ETH_ALEN];
+       u8 dst_addr[ETH_ALEN];
+};
+
+struct rtllib_stats {
+       unsigned int tx_unicast_frames;
+       unsigned int tx_multicast_frames;
+       unsigned int tx_fragments;
+       unsigned int tx_unicast_octets;
+       unsigned int tx_multicast_octets;
+       unsigned int tx_deferred_transmissions;
+       unsigned int tx_single_retry_frames;
+       unsigned int tx_multiple_retry_frames;
+       unsigned int tx_retry_limit_exceeded;
+       unsigned int tx_discards;
+       unsigned int rx_unicast_frames;
+       unsigned int rx_multicast_frames;
+       unsigned int rx_fragments;
+       unsigned int rx_unicast_octets;
+       unsigned int rx_multicast_octets;
+       unsigned int rx_fcs_errors;
+       unsigned int rx_discards_no_buffer;
+       unsigned int tx_discards_wrong_sa;
+       unsigned int rx_discards_undecryptable;
+       unsigned int rx_message_in_msg_fragments;
+       unsigned int rx_message_in_bad_msg_fragments;
+};
+
+struct rtllib_device;
+
+#include "rtllib_crypt.h"
+
+#define SEC_KEY_1         (1<<0)
+#define SEC_KEY_2         (1<<1)
+#define SEC_KEY_3         (1<<2)
+#define SEC_KEY_4         (1<<3)
+#define SEC_ACTIVE_KEY    (1<<4)
+#define SEC_AUTH_MODE     (1<<5)
+#define SEC_UNICAST_GROUP (1<<6)
+#define SEC_LEVEL         (1<<7)
+#define SEC_ENABLED       (1<<8)
+#define SEC_ENCRYPT       (1<<9)
+
+#define SEC_LEVEL_0      0 /* None */
+#define SEC_LEVEL_1      1 /* WEP 40 and 104 bit */
+#define SEC_LEVEL_2      2 /* Level 1 + TKIP */
+#define SEC_LEVEL_2_CKIP 3 /* Level 1 + CKIP */
+#define SEC_LEVEL_3      4 /* Level 2 + CCMP */
+
+#define SEC_ALG_NONE            0
+#define SEC_ALG_WEP             1
+#define SEC_ALG_TKIP            2
+#define SEC_ALG_CCMP            4
+
+#define WEP_KEYS               4
+#define WEP_KEY_LEN            13
+#define SCM_KEY_LEN             32
+#define SCM_TEMPORAL_KEY_LENGTH 16
+
+struct rtllib_security {
+       u16 active_key:2,
+            enabled:1,
+           auth_mode:2,
+            auth_algo:4,
+            unicast_uses_group:1,
+           encrypt:1;
+       u8 key_sizes[WEP_KEYS];
+       u8 keys[WEP_KEYS][SCM_KEY_LEN];
+       u8 level;
+       u16 flags;
+} __attribute__ ((packed));
+
+
+/*
+ 802.11 data frame from AP
+      ,-------------------------------------------------------------------.
+Bytes |  2   |  2   |    6    |    6    |    6    |  2   | 0..2312 |   4  |
+      |------|------|---------|---------|---------|------|---------|------|
+Desc. | ctrl | dura |  DA/RA  |   TA    |    SA   | Sequ |  frame  |  fcs |
+      |      | tion | (BSSID) |         |         | ence |  data   |      |
+      `-------------------------------------------------------------------'
+Total: 28-2340 bytes
+*/
+
+/* Management Frame Information Element Types */
+enum rtllib_mfie {
+        MFIE_TYPE_SSID = 0,
+        MFIE_TYPE_RATES = 1,
+        MFIE_TYPE_FH_SET = 2,
+        MFIE_TYPE_DS_SET = 3,
+        MFIE_TYPE_CF_SET = 4,
+        MFIE_TYPE_TIM = 5,
+        MFIE_TYPE_IBSS_SET = 6,
+        MFIE_TYPE_COUNTRY = 7,
+        MFIE_TYPE_HOP_PARAMS = 8,
+        MFIE_TYPE_HOP_TABLE = 9,
+        MFIE_TYPE_REQUEST = 10,
+        MFIE_TYPE_CHALLENGE = 16,
+        MFIE_TYPE_POWER_CONSTRAINT = 32,
+        MFIE_TYPE_POWER_CAPABILITY = 33,
+        MFIE_TYPE_TPC_REQUEST = 34,
+        MFIE_TYPE_TPC_REPORT = 35,
+        MFIE_TYPE_SUPP_CHANNELS = 36,
+        MFIE_TYPE_CSA = 37,
+        MFIE_TYPE_MEASURE_REQUEST = 38,
+        MFIE_TYPE_MEASURE_REPORT = 39,
+        MFIE_TYPE_QUIET = 40,
+        MFIE_TYPE_IBSS_DFS = 41,
+        MFIE_TYPE_ERP = 42,
+       MFIE_TYPE_HT_CAP= 45,
+       MFIE_TYPE_RSN = 48,
+       MFIE_TYPE_RATES_EX = 50,
+#ifdef _RTL8192_EXT_PATCH_
+       MFIE_TYPE_MESH_PANN = 51,
+       MFIE_TYPE_MESH_RANN = 52,
+       MFIE_TYPE_MESH_PATH_REQ = 53,
+       MFIE_TYPE_MESH_PATH_REP = 54,
+       MFIE_TYPE_MESH_PATH_ERR = 55,
+#endif
+       MFIE_TYPE_HT_INFO= 61,
+#if defined (RTL8192S_WAPI_SUPPORT)
+       MFIE_TYPE_WAPI  = 68,
+#endif
+       MFIE_TYPE_AIRONET=133,
+#ifdef _RTL8192_EXT_PATCH_
+       MFIE_TYPE_MESH_CONFIGURATION = 136,     
+       MFIE_TYPE_MESH_ID = 137,     
+       MFIE_TYPE_MESH_LOCAL_LINK_STATE_ANNOU = 138,   
+       MFIE_TYPE_MESH_ABBR_HANDSHAKE_IE_       =139,  
+       MFIE_TYPE_MESH_PEER_LINK_MGNT = 140,   
+       MFIE_TYPE_MESH_NEIGHBOR_LIST = 142,     
+       MFIE_TYPE_MESH_TIM = 143,     
+       MFIE_TYPE_MESH_ATIM_WINDOW = 144,     
+       MFIE_TYPE_MESH_BEACON_TIMING = 145,     
+       MFIE_TYPE_MESH_MDAOP_ADVERTISMENTS = 148,   
+       MFIE_TYPE_MESH_MSC = 158,   
+       MFIE_TYPE_MESH_MSA = 159,   
+       MFIE_TYPE_MESH_MOAOP_SET_TEARDOWN = 212,   
+#endif
+       MFIE_TYPE_GENERIC = 221,
+        MFIE_TYPE_QOS_PARAMETER = 222,
+};
+
+/* Minimal header; can be used for passing 802.11 frames with sufficient
+ * information to determine what type of underlying data type is actually
+ * stored in the data. */
+struct rtllib_pspoll_hdr {
+        __le16 frame_ctl;
+        __le16 aid;
+       u8 bssid[ETH_ALEN];
+        u8 ta[ETH_ALEN];
+} __attribute__ ((packed));
+
+struct rtllib_hdr {
+        __le16 frame_ctl;
+        __le16 duration_id;
+        u8 payload[0];
+} __attribute__ ((packed));
+
+struct rtllib_hdr_1addr {
+        __le16 frame_ctl;
+        __le16 duration_id;
+        u8 addr1[ETH_ALEN];
+        u8 payload[0];
+} __attribute__ ((packed));
+
+struct rtllib_hdr_2addr {
+        __le16 frame_ctl;
+        __le16 duration_id;
+        u8 addr1[ETH_ALEN];
+        u8 addr2[ETH_ALEN];
+        u8 payload[0];
+} __attribute__ ((packed));
+
+struct rtllib_hdr_3addr {
+       __le16 frame_ctl;
+       __le16 duration_id;
+       u8 addr1[ETH_ALEN];
+       u8 addr2[ETH_ALEN];
+       u8 addr3[ETH_ALEN];
+       __le16 seq_ctl;
+        u8 payload[0];
+} __attribute__ ((packed));
+
+struct rtllib_hdr_4addr {
+       __le16 frame_ctl;
+       __le16 duration_id;
+       u8 addr1[ETH_ALEN];
+       u8 addr2[ETH_ALEN];
+       u8 addr3[ETH_ALEN];
+       __le16 seq_ctl;
+       u8 addr4[ETH_ALEN];
+        u8 payload[0];
+} __attribute__ ((packed));
+
+struct rtllib_hdr_3addrqos {
+       __le16 frame_ctl;
+       __le16 duration_id;
+       u8 addr1[ETH_ALEN];
+       u8 addr2[ETH_ALEN];
+       u8 addr3[ETH_ALEN];
+       __le16 seq_ctl;
+       __le16 qos_ctl;
+       u8 payload[0];
+} __attribute__ ((packed));
+
+struct rtllib_hdr_4addrqos {
+       __le16 frame_ctl;
+       __le16 duration_id;
+       u8 addr1[ETH_ALEN];
+       u8 addr2[ETH_ALEN];
+       u8 addr3[ETH_ALEN];
+       __le16 seq_ctl;
+       u8 addr4[ETH_ALEN];
+       __le16 qos_ctl;
+       u8 payload[0];
+} __attribute__ ((packed));
+
+struct rtllib_info_element {
+       u8 id;
+       u8 len;
+       u8 data[0];
+} __attribute__ ((packed));
+
+#ifdef _RTL8192_EXT_PATCH_
+
+struct mesh_peering_protocol_version_t{
+    u8 OUI[3]; 
+    u8 value;
+} __attribute__ ((packed));
+struct rtllib_plink_open {
+       struct rtllib_hdr_3addr header;
+       u8       category;
+       u8       action;
+       struct mesh_peering_protocol_version_t mesh_peering_protocol_version;
+       __le16 capability;
+       /* SSID, supported rates, RSN */
+        struct rtllib_info_element info_element[0];
+} __attribute__ ((packed));
+
+struct rtllib_plink_confirm {
+       struct rtllib_hdr_3addr header;
+       u8       category;
+       u8       action;
+       struct mesh_peering_protocol_version_t mesh_peering_protocol_version;
+       __le16 capability;
+       __le16 aid;
+       /* SSID, supported rates, RSN */
+        struct rtllib_info_element info_element[0];
+} __attribute__ ((packed));
+
+struct rtllib_plink_close {
+       struct rtllib_hdr_3addr header;
+       u8       category;
+       u8       action;
+       struct mesh_peering_protocol_version_t mesh_peering_protocol_version;
+       /* SSID, supported rates, RSN */
+       struct rtllib_info_element info_element[0];
+} __attribute__ ((packed));
+
+struct rtllib_linkmetric_report {
+       struct rtllib_hdr_3addr header;
+       u8       category;
+       u8       action;
+       struct rtllib_info_element info_element[0];
+} __attribute__ ((packed));
+
+struct rtllib_linkmetric_req {
+       struct rtllib_hdr_3addr header;
+       u8       category;
+       u8       action;
+} __attribute__ ((packed));
+#endif
+
+struct rtllib_authentication {
+       struct rtllib_hdr_3addr header;
+       __le16 algorithm;
+       __le16 transaction;
+       __le16 status;
+       /*challenge*/
+       struct rtllib_info_element info_element[0];
+} __attribute__ ((packed));
+
+struct rtllib_disauth {
+        struct rtllib_hdr_3addr header;
+        __le16 reason;
+} __attribute__ ((packed));
+
+struct rtllib_disassoc {
+        struct rtllib_hdr_3addr header;
+        __le16 reason;
+} __attribute__ ((packed));
+
+struct rtllib_probe_request {
+       struct rtllib_hdr_3addr header;
+       /* SSID, supported rates */
+        struct rtllib_info_element info_element[0];
+} __attribute__ ((packed));
+
+struct rtllib_probe_response {
+       struct rtllib_hdr_3addr header;
+       u32 time_stamp[2];
+       __le16 beacon_interval;
+       __le16 capability;
+        /* SSID, supported rates, FH params, DS params,
+         * CF params, IBSS params, TIM (if beacon), RSN */
+        struct rtllib_info_element info_element[0];
+} __attribute__ ((packed));
+
+/* Alias beacon for probe_response */
+#define rtllib_beacon rtllib_probe_response
+
+struct rtllib_assoc_request_frame {
+       struct rtllib_hdr_3addr header;
+       __le16 capability;
+       __le16 listen_interval;
+       /* SSID, supported rates, RSN */
+        struct rtllib_info_element info_element[0];
+} __attribute__ ((packed));
+
+struct rtllib_reassoc_request_frame {
+       struct rtllib_hdr_3addr header;
+       __le16 capability;
+       __le16 listen_interval;
+       u8 current_ap[ETH_ALEN];
+       /* SSID, supported rates, RSN */
+        struct rtllib_info_element info_element[0];
+} __attribute__ ((packed));
+
+struct rtllib_assoc_response_frame {
+       struct rtllib_hdr_3addr header;
+       __le16 capability;
+       __le16 status;
+       __le16 aid;
+       struct rtllib_info_element info_element[0]; /* supported rates */
+} __attribute__ ((packed));
+
+struct rtllib_txb {
+       u8 nr_frags;
+       u8 encrypted;
+       u8 queue_index;
+       u8 rts_included;
+       u16 reserved;
+       __le16 frag_size;
+       __le16 payload_size;
+       struct sk_buff *fragments[0];
+};
+
+#define MAX_TX_AGG_COUNT                 16
+struct rtllib_drv_agg_txb {
+       u8 nr_drv_agg_frames;
+       struct sk_buff *tx_agg_frames[MAX_TX_AGG_COUNT];
+}__attribute__((packed));
+
+#define MAX_SUBFRAME_COUNT               64
+struct rtllib_rxb {
+       u8 nr_subframes;
+       struct sk_buff *subframes[MAX_SUBFRAME_COUNT];
+       u8 dst[ETH_ALEN];
+       u8 src[ETH_ALEN];
+#ifdef TCP_CSUM_OFFLOAD_RX
+       u8 tcp_csum_valid;
+#endif
+#if defined (RTL8192S_WAPI_SUPPORT)
+       u8 UserPriority;
+       u8 WapiTempPN[16];
+       u8 WapiSrcAddr[6];
+       u8 bWapiCheckPNInDecrypt;
+#endif
+}__attribute__((packed));
+
+typedef union _frameqos {
+       u16 shortdata;
+       u8  chardata[2];
+       struct {
+               u16 tid:4;
+               u16 eosp:1;
+               u16 ack_policy:2;
+               u16 reserved:1;
+               u16 txop:8;
+       }field;
+}frameqos,*pframeqos;
+
+/* SWEEP TABLE ENTRIES NUMBER*/
+#define MAX_SWEEP_TAB_ENTRIES            42
+#define MAX_SWEEP_TAB_ENTRIES_PER_PACKET  7
+/* MAX_RATES_LENGTH needs to be 12.  The spec says 8, and many APs
+ * only use 8, and then use extended rates for the remaining supported
+ * rates.  Other APs, however, stick all of their supported rates on the
+ * main rates information element... */
+#define MAX_RATES_LENGTH                  ((u8)12)
+#define MAX_RATES_EX_LENGTH               ((u8)16)
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
+#define MAX_NETWORK_COUNT                  16 
+#else
+#define MAX_NETWORK_COUNT                  96 
+#endif                 
+
+#define MAX_CHANNEL_NUMBER                 161
+#define RTLLIB_SOFTMAC_SCAN_TIME          100
+#define RTLLIB_SOFTMAC_ASSOC_RETRY_TIME (HZ * 2)
+
+#define CRC_LENGTH                 4U
+
+#define MAX_WPA_IE_LEN 64
+#define MAX_WZC_IE_LEN 256
+
+#define NETWORK_EMPTY_ESSID (1<<0)
+#define NETWORK_HAS_OFDM    (1<<1)
+#define NETWORK_HAS_CCK     (1<<2)
+
+/* QoS structure */
+#define NETWORK_HAS_QOS_PARAMETERS      (1<<3)
+#define NETWORK_HAS_QOS_INFORMATION     (1<<4)
+#define NETWORK_HAS_QOS_MASK            (NETWORK_HAS_QOS_PARAMETERS | \
+                                         NETWORK_HAS_QOS_INFORMATION)
+/* 802.11h */
+#define NETWORK_HAS_POWER_CONSTRAINT    (1<<5)
+#define NETWORK_HAS_CSA                 (1<<6)
+#define NETWORK_HAS_QUIET               (1<<7)
+#define NETWORK_HAS_IBSS_DFS            (1<<8)
+#define NETWORK_HAS_TPC_REPORT          (1<<9)
+
+#define NETWORK_HAS_ERP_VALUE           (1<<10)
+
+#define QOS_QUEUE_NUM                   4
+#define QOS_OUI_LEN                     3
+#define QOS_OUI_TYPE                    2
+#define QOS_ELEMENT_ID                  221
+#define QOS_OUI_INFO_SUB_TYPE           0
+#define QOS_OUI_PARAM_SUB_TYPE          1
+#define QOS_VERSION_1                   1
+#define QOS_AIFSN_MIN_VALUE             2
+#if 1
+struct rtllib_qos_information_element {
+        u8 elementID;
+        u8 length;
+        u8 qui[QOS_OUI_LEN];
+        u8 qui_type;
+        u8 qui_subtype;
+        u8 version;
+        u8 ac_info;
+} __attribute__ ((packed));
+
+struct rtllib_qos_ac_parameter {
+        u8 aci_aifsn;
+        u8 ecw_min_max;
+        __le16 tx_op_limit;
+} __attribute__ ((packed));
+
+struct rtllib_qos_parameter_info {
+        struct rtllib_qos_information_element info_element;
+        u8 reserved;
+        struct rtllib_qos_ac_parameter ac_params_record[QOS_QUEUE_NUM];
+} __attribute__ ((packed));
+
+struct rtllib_qos_parameters {
+        __le16 cw_min[QOS_QUEUE_NUM];
+        __le16 cw_max[QOS_QUEUE_NUM];
+        u8 aifs[QOS_QUEUE_NUM];
+        u8 flag[QOS_QUEUE_NUM];
+        __le16 tx_op_limit[QOS_QUEUE_NUM];
+} __attribute__ ((packed));
+
+struct rtllib_qos_data {
+        struct rtllib_qos_parameters parameters;
+       unsigned int wmm_acm;
+        int active;
+        int supported;
+        u8 param_count;
+        u8 old_param_count;
+};
+
+struct rtllib_tim_parameters {
+        u8 tim_count;
+        u8 tim_period;
+} __attribute__ ((packed));
+
+struct rtllib_wmm_ac_param {
+       u8 ac_aci_acm_aifsn;
+       u8 ac_ecwmin_ecwmax;
+       u16 ac_txop_limit;
+};
+
+struct rtllib_wmm_ts_info {
+       u8 ac_dir_tid;
+       u8 ac_up_psb;
+       u8 reserved;
+} __attribute__ ((packed));
+
+struct rtllib_wmm_tspec_elem {
+       struct rtllib_wmm_ts_info ts_info;
+       u16 norm_msdu_size;
+       u16 max_msdu_size;
+       u32 min_serv_inter;
+       u32 max_serv_inter;
+       u32 inact_inter;
+       u32 suspen_inter;
+       u32 serv_start_time;
+       u32 min_data_rate;
+       u32 mean_data_rate;
+       u32 peak_data_rate;
+       u32 max_burst_size;
+       u32 delay_bound;
+       u32 min_phy_rate;
+       u16 surp_band_allow;
+       u16 medium_time;
+}__attribute__((packed));
+#endif
+enum eap_type {
+       EAP_PACKET = 0,
+       EAPOL_START,
+       EAPOL_LOGOFF,
+       EAPOL_KEY,
+       EAPOL_ENCAP_ASF_ALERT
+};
+
+static const char *eap_types[] = {
+       [EAP_PACKET]            = "EAP-Packet",
+       [EAPOL_START]           = "EAPOL-Start",
+       [EAPOL_LOGOFF]          = "EAPOL-Logoff",
+       [EAPOL_KEY]             = "EAPOL-Key",
+       [EAPOL_ENCAP_ASF_ALERT] = "EAPOL-Encap-ASF-Alert"
+};
+
+static inline const char *eap_get_type(int type)
+{
+       return ((u32)type >= ARRAY_SIZE(eap_types)) ? "Unknown" : eap_types[type];
+}
+static inline u8 Frame_QoSTID(u8* buf)
+{
+       struct rtllib_hdr_3addr *hdr;
+       u16 fc;
+       hdr = (struct rtllib_hdr_3addr *)buf;
+       fc = le16_to_cpu(hdr->frame_ctl);
+       return (u8)((frameqos*)(buf + (((fc & RTLLIB_FCTL_TODS)&&(fc & RTLLIB_FCTL_FROMDS))? 30 : 24)))->field.tid;
+}
+
+
+struct eapol {
+       u8 snap[6];
+       u16 ethertype;
+       u8 version;
+       u8 type;
+       u16 length;
+} __attribute__ ((packed));
+
+struct rtllib_softmac_stats{
+       unsigned int rx_ass_ok;
+       unsigned int rx_ass_err;
+       unsigned int rx_probe_rq;
+       unsigned int tx_probe_rs;
+       unsigned int tx_beacons;
+       unsigned int rx_auth_rq;
+       unsigned int rx_auth_rs_ok;
+       unsigned int rx_auth_rs_err;
+       unsigned int tx_auth_rq;
+       unsigned int no_auth_rs;
+       unsigned int no_ass_rs;
+       unsigned int tx_ass_rq;
+       unsigned int rx_ass_rq;
+       unsigned int tx_probe_rq;
+       unsigned int reassoc;
+       unsigned int swtxstop;
+       unsigned int swtxawake;
+       unsigned char CurrentShowTxate;
+       unsigned char last_packet_rate;
+       unsigned int txretrycount;
+};
+
+#define BEACON_PROBE_SSID_ID_POSITION 12
+
+struct rtllib_info_element_hdr {
+       u8 id;
+       u8 len;
+} __attribute__ ((packed));
+
+/*
+ * These are the data types that can make up management packets
+ *
+       u16 auth_algorithm;
+       u16 auth_sequence;
+       u16 beacon_interval;
+       u16 capability;
+       u8 current_ap[ETH_ALEN];
+       u16 listen_interval;
+       struct {
+               u16 association_id:14, reserved:2;
+       } __attribute__ ((packed));
+       u32 time_stamp[2];
+       u16 reason;
+       u16 status;
+*/
+
+#define RTLLIB_DEFAULT_TX_ESSID "Penguin"
+#define RTLLIB_DEFAULT_BASIC_RATE 2 
+#ifdef _RTL8192_EXT_PATCH_
+#define RTLLIB_DEFAULT_MESHID "CMPC-mesh"
+#define RTLLIB_DEFAULT_MESH_CHAN 7 
+#endif
+
+enum {WMM_all_frame, WMM_two_frame, WMM_four_frame, WMM_six_frame};
+#define MAX_SP_Len  (WMM_all_frame << 4)
+#define RTLLIB_QOS_TID 0x0f
+#define QOS_CTL_NOTCONTAIN_ACK (0x01 << 5)
+#ifdef ENABLE_AMSDU
+#define QOS_CTL_AMSDU_PRESENT (0x01 << 7)
+#endif
+
+#define RTLLIB_DTIM_MBCAST 4
+#define RTLLIB_DTIM_UCAST 2
+#define RTLLIB_DTIM_VALID 1
+#define RTLLIB_DTIM_INVALID 0
+
+#define RTLLIB_PS_DISABLED 0
+#define RTLLIB_PS_UNICAST RTLLIB_DTIM_UCAST
+#define RTLLIB_PS_MBCAST RTLLIB_DTIM_MBCAST
+
+#ifdef WMM_Hang_8187
+#undef WMM_Hang_8187
+#endif
+
+#define WME_AC_BK   0x00
+#define WME_AC_BE   0x01
+#define WME_AC_VI   0x02
+#define WME_AC_VO   0x03
+#define WME_ACI_MASK 0x03
+#define WME_AIFSN_MASK 0x03
+#define WME_AC_PRAM_LEN 16
+
+#define MAX_RECEIVE_BUFFER_SIZE 9100
+
+#if 1
+#define UP2AC(up) (               \
+       ((up) < 1) ? WME_AC_BE : \
+       ((up) < 3) ? WME_AC_BK : \
+       ((up) < 4) ? WME_AC_BE : \
+       ((up) < 6) ? WME_AC_VI : \
+       WME_AC_VO)      
+#endif
+#define AC2UP(_ac)     (       \
+       ((_ac) == WME_AC_VO) ? 6 : \
+       ((_ac) == WME_AC_VI) ? 5 : \
+       ((_ac) == WME_AC_BK) ? 1 : \
+       0)
+
+#define        ETHER_ADDR_LEN          6       /* length of an Ethernet address */
+#define ETHERNET_HEADER_SIZE    14      /* length of two Ethernet address plus ether type*/
+
+struct ether_header {
+       u8 ether_dhost[ETHER_ADDR_LEN];
+       u8 ether_shost[ETHER_ADDR_LEN];
+       u16 ether_type;
+} __attribute__((packed)); 
+
+#ifndef ETHERTYPE_PAE
+#define        ETHERTYPE_PAE   0x888e          /* EAPOL PAE/802.1x */
+#endif
+#ifndef ETHERTYPE_IP
+#define        ETHERTYPE_IP    0x0800          /* IP protocol */
+#endif
+
+
+typedef enum _erp_t{
+       ERP_NonERPpresent       = 0x01,
+       ERP_UseProtection       = 0x02,
+       ERP_BarkerPreambleMode = 0x04,
+} erp_t;
+
+#ifdef _RTL8192_EXT_PATCH_
+typedef struct _mesh_config_t {
+       u8 path_proto_id[4];
+       u8 path_metric_id[4];
+       u8 congest_ctl_mode[4];
+       u8 mesh_capability[2];
+} mesh_config_t;
+#define MAX_MESH_ID_LEN 32
+#define MESH_CONF_TOTAL_LEN 19
+#endif
+
+struct rtllib_network {
+       /* These entries are used to identify a unique network */
+       u8 bssid[ETH_ALEN];
+       u8 channel;
+       /* Ensure null-terminated for any debug msgs */
+       u8 ssid[IW_ESSID_MAX_SIZE + 1];
+       u8 ssid_len;
+       u8 hidden_ssid[IW_ESSID_MAX_SIZE + 1];
+       u8 hidden_ssid_len;
+       struct rtllib_qos_data qos_data;
+
+       bool    bWithAironetIE;
+       bool    bCkipSupported;
+       bool    bCcxRmEnable;
+       u16     CcxRmState[2];
+       bool    bMBssidValid;
+       u8      MBssidMask;
+       u8      MBssid[6];
+       bool    bWithCcxVerNum;
+       u8      BssCcxVerNumber;
+       /* These are network statistics */
+       struct rtllib_rx_stats stats;
+       u16 capability;
+       u8  rates[MAX_RATES_LENGTH];
+       u8  rates_len;
+       u8  rates_ex[MAX_RATES_EX_LENGTH];
+       u8  rates_ex_len;
+       unsigned long last_scanned;
+       u8  mode;
+       u32 flags;
+       u32 last_associate;
+       u32 time_stamp[2];
+       u16 beacon_interval;
+       u16 listen_interval;
+       u16 atim_window;
+       u8  erp_value;
+       u8  wpa_ie[MAX_WPA_IE_LEN];
+       size_t wpa_ie_len;
+       u8  rsn_ie[MAX_WPA_IE_LEN];
+       size_t rsn_ie_len;
+#if defined RTL8192S_WAPI_SUPPORT
+       u8  wapi_ie[MAX_WAPI_IE_LEN];
+       size_t wapi_ie_len;
+#endif
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) 
+       u8  wzc_ie[MAX_WZC_IE_LEN];
+       size_t wzc_ie_len;
+#endif
+
+        struct rtllib_tim_parameters tim;
+       u8  dtim_period;
+       u8  dtim_data;
+       u32 last_dtim_sta_time[2];
+
+        u8 wmm_info;
+        struct rtllib_wmm_ac_param wmm_param[4];
+        u8 QoS_Enable;
+#ifdef THOMAS_TURBO
+       u8 Turbo_Enable;
+#endif
+#ifdef ENABLE_DOT11D
+       u16 CountryIeLen;
+       u8 CountryIeBuf[MAX_IE_LEN];
+#endif
+       BSS_HT  bssht;
+       bool broadcom_cap_exist;
+       bool realtek_cap_exit;
+       bool marvell_cap_exist;
+       bool ralink_cap_exist;
+       bool atheros_cap_exist;
+       bool cisco_cap_exist;
+       bool unknown_cap_exist;
+       bool    berp_info_valid;
+       bool buseprotection;
+       bool bIsNetgear854T;
+       u8 SignalStrength;
+       u8 RSSI; 
+#ifdef _RTL8192_EXT_PATCH_
+       u8 hostname[MAX_HOST_NAME_LENGTH];
+       u8 hostname_len;
+       u8 mesh_id[MAX_MESH_ID_LEN];
+       u8 mesh_id_len;
+       mesh_config_t mesh_config;
+       u8 mesh_config_len;
+       void *ext_entry;
+#endif
+
+       struct list_head list;
+};
+
+#if 1
+enum rtllib_state {
+
+       /* the card is not linked at all */
+       RTLLIB_NOLINK = 0,
+       
+       /* RTLLIB_ASSOCIATING* are for BSS client mode
+        * the driver shall not perform RX filtering unless
+        * the state is LINKED.
+        * The driver shall just check for the state LINKED and
+        * defaults to NOLINK for ALL the other states (including
+        * LINKED_SCANNING)
+        */
+       
+       /* the association procedure will start (wq scheduling)*/
+       RTLLIB_ASSOCIATING,
+       RTLLIB_ASSOCIATING_RETRY,
+       
+       /* the association procedure is sending AUTH request*/
+       RTLLIB_ASSOCIATING_AUTHENTICATING,
+       
+       /* the association procedure has successfully authentcated
+        * and is sending association request
+        */
+       RTLLIB_ASSOCIATING_AUTHENTICATED,
+       
+       /* the link is ok. the card associated to a BSS or linked
+        * to a ibss cell or acting as an AP and creating the bss
+        */
+       RTLLIB_LINKED,
+       
+       /* same as LINKED, but the driver shall apply RX filter
+        * rules as we are in NO_LINK mode. As the card is still
+        * logically linked, but it is doing a syncro site survey
+        * then it will be back to LINKED state.
+        */
+       RTLLIB_LINKED_SCANNING,
+#ifdef _RTL8192_EXT_PATCH_
+       RTLLIB_MESH_SCANNING,
+       RTLLIB_MESH_LINKED,
+#endif
+};
+#else
+enum rtllib_state {
+        RTLLIB_UNINITIALIZED = 0,
+        RTLLIB_INITIALIZED,
+        RTLLIB_ASSOCIATING,
+        RTLLIB_ASSOCIATED,
+        RTLLIB_AUTHENTICATING,
+        RTLLIB_AUTHENTICATED,
+        RTLLIB_SHUTDOWN
+};
+#endif
+
+#define DEFAULT_MAX_SCAN_AGE (15 * HZ)
+#define DEFAULT_FTS 2346
+
+#define CFG_RTLLIB_RESERVE_FCS (1<<0)
+#define CFG_RTLLIB_COMPUTE_FCS (1<<1)
+#define CFG_RTLLIB_RTS (1<<2)
+
+#define RTLLIB_24GHZ_MIN_CHANNEL 1
+#define RTLLIB_24GHZ_MAX_CHANNEL 14
+#define RTLLIB_24GHZ_CHANNELS (RTLLIB_24GHZ_MAX_CHANNEL - \
+                                  RTLLIB_24GHZ_MIN_CHANNEL + 1)
+
+#define RTLLIB_52GHZ_MIN_CHANNEL 34
+#define RTLLIB_52GHZ_MAX_CHANNEL 165
+#define RTLLIB_52GHZ_CHANNELS (RTLLIB_52GHZ_MAX_CHANNEL - \
+                                  RTLLIB_52GHZ_MIN_CHANNEL + 1)
+
+#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,11))
+extern inline int is_multicast_ether_addr(const u8 *addr)
+{
+        return ((addr[0] != 0xff) && (0x01 & addr[0]));
+}
+#endif
+
+#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,13))
+extern inline int is_broadcast_ether_addr(const u8 *addr)
+{
+       return ((addr[0] == 0xff) && (addr[1] == 0xff) && (addr[2] == 0xff) &&   \
+               (addr[3] == 0xff) && (addr[4] == 0xff) && (addr[5] == 0xff));
+}
+#endif
+#ifndef eqMacAddr
+#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 )
+#endif
+typedef struct tx_pending_t{
+       int frag;
+       struct rtllib_txb *txb;
+}tx_pending_t;
+
+typedef struct _bandwidth_autoswitch
+{
+       long threshold_20Mhzto40Mhz;
+       long    threshold_40Mhzto20Mhz; 
+       bool bforced_tx20Mhz;
+       bool bautoswitch_enable;        
+}bandwidth_autoswitch,*pbandwidth_autoswitch;
+
+
+
+#define REORDER_WIN_SIZE       128
+#define REORDER_ENTRY_NUM      128
+typedef struct _RX_REORDER_ENTRY
+{
+       struct list_head        List;
+       u16                     SeqNum;
+       struct rtllib_rxb* prxb;
+} RX_REORDER_ENTRY, *PRX_REORDER_ENTRY;
+typedef enum _Fsync_State{
+       Default_Fsync,
+       HW_Fsync,
+       SW_Fsync
+}Fsync_State;  
+
+typedef        enum _RT_PS_MODE        
+{
+       eActive,        
+       eMaxPs,         
+       eFastPs,                
+       eAutoPs,        
+}RT_PS_MODE;
+
+typedef enum _IPS_CALLBACK_FUNCION
+{
+       IPS_CALLBACK_NONE = 0,
+       IPS_CALLBACK_MGNT_LINK_REQUEST = 1,
+       IPS_CALLBACK_JOIN_REQUEST = 2,
+}IPS_CALLBACK_FUNCION;
+
+typedef enum _RT_JOIN_ACTION{
+       RT_JOIN_INFRA   = 1,
+       RT_JOIN_IBSS  = 2,
+       RT_START_IBSS = 3,
+       RT_NO_ACTION  = 4,
+}RT_JOIN_ACTION;
+
+typedef struct _IbssParms{
+       u16   atimWin;
+}IbssParms, *PIbssParms;
+#define MAX_NUM_RATES  264 
+
+typedef        enum _RT_RF_POWER_STATE
+{
+       eRfOn,
+       eRfSleep,
+       eRfOff
+}RT_RF_POWER_STATE;
+
+typedef struct _RT_POWER_SAVE_CONTROL
+{
+
+       bool                            bInactivePs;
+       bool                            bIPSModeBackup;
+       bool                            bHaltAdapterClkRQ;
+       bool                            bSwRfProcessing;
+       RT_RF_POWER_STATE       eInactivePowerState;
+       work_struct_rsl         InactivePsWorkItem;
+       struct timer_list       InactivePsTimer;
+
+       IPS_CALLBACK_FUNCION    ReturnPoint;
+       
+       bool                            bTmpBssDesc;
+       RT_JOIN_ACTION          tmpJoinAction;
+       struct rtllib_network tmpBssDesc;
+
+       bool                            bTmpScanOnly;
+       bool                            bTmpActiveScan;
+       bool                            bTmpFilterHiddenAP;
+       bool                            bTmpUpdateParms;
+       u8                              tmpSsidBuf[33];
+       OCTET_STRING                    tmpSsid2Scan;
+       bool                            bTmpSsid2Scan;
+       u8                              tmpNetworkType;
+       u8                              tmpChannelNumber;
+       u16                             tmpBcnPeriod;
+       u8                              tmpDtimPeriod;
+       u16                             tmpmCap;
+       OCTET_STRING                    tmpSuppRateSet;
+       u8                              tmpSuppRateBuf[MAX_NUM_RATES];
+       bool                            bTmpSuppRate;
+       IbssParms                               tmpIbpm;
+       bool                            bTmpIbpm;
+
+       bool                            bLeisurePs;
+       u32                             PowerProfile;
+       u8                              LpsIdleCount;
+       u8                              RegMaxLPSAwakeIntvl;
+       u8                              LPSAwakeIntvl;
+
+       u32                             CurPsLevel;
+       u32                             RegRfPsLevel;
+
+       bool                            bFwCtrlLPS;
+       u8                              FWCtrlPSMode;
+
+       bool                            LinkReqInIPSRFOffPgs;
+       bool                            BufConnectinfoBefore;
+       
+}RT_POWER_SAVE_CONTROL,*PRT_POWER_SAVE_CONTROL;
+
+typedef u32 RT_RF_CHANGE_SOURCE;
+#define RF_CHANGE_BY_SW BIT31
+#define RF_CHANGE_BY_HW BIT30
+#define RF_CHANGE_BY_PS BIT29
+#define RF_CHANGE_BY_IPS BIT28
+#define RF_CHANGE_BY_INIT      0       
+
+typedef enum 
+{
+       COUNTRY_CODE_FCC = 0,
+       COUNTRY_CODE_IC = 1,
+       COUNTRY_CODE_ETSI = 2,
+       COUNTRY_CODE_SPAIN = 3,
+       COUNTRY_CODE_FRANCE = 4,
+       COUNTRY_CODE_MKK = 5,
+       COUNTRY_CODE_MKK1 = 6,
+       COUNTRY_CODE_ISRAEL = 7,
+       COUNTRY_CODE_TELEC = 8,
+       COUNTRY_CODE_MIC = 9,
+       COUNTRY_CODE_GLOBAL_DOMAIN = 10,
+       COUNTRY_CODE_WORLD_WIDE_13 = 11,
+       COUNTRY_CODE_TELEC_NETGEAR = 12,
+       COUNTRY_CODE_MAX
+}country_code_type_t;  
+
+typedef enum _SCAN_OPERATION_BACKUP_OPT{
+       SCAN_OPT_BACKUP=0,
+       SCAN_OPT_RESTORE,
+       SCAN_OPT_MAX
+}SCAN_OPERATION_BACKUP_OPT;
+
+typedef        enum _FW_CMD_IO_TYPE{
+       FW_CMD_DIG_ENABLE = 0, 
+       FW_CMD_DIG_DISABLE = 1,
+       FW_CMD_DIG_HALT = 2,
+       FW_CMD_DIG_RESUME = 3,
+       FW_CMD_HIGH_PWR_ENABLE = 4, 
+       FW_CMD_HIGH_PWR_DISABLE = 5,
+       FW_CMD_RA_RESET = 6, 
+       FW_CMD_RA_ACTIVE= 7,
+       FW_CMD_RA_REFRESH_N= 8,
+       FW_CMD_RA_REFRESH_BG= 9,
+       FW_CMD_RA_INIT= 10,
+       FW_CMD_IQK_ENABLE = 11, 
+       FW_CMD_TXPWR_TRACK_ENABLE = 12, 
+       FW_CMD_TXPWR_TRACK_DISABLE = 13,        
+       FW_CMD_TXPWR_TRACK_THERMAL = 14, 
+       FW_CMD_PAUSE_DM_BY_SCAN = 15,
+       FW_CMD_RESUME_DM_BY_SCAN = 16,
+       FW_CMD_RA_REFRESH_N_COMB = 17,
+       FW_CMD_RA_REFRESH_BG_COMB = 18,
+       FW_CMD_ANTENNA_SW_ENABLE = 19,
+       FW_CMD_ANTENNA_SW_DISABLE = 20,
+       FW_CMD_TX_FEEDBACK_CCX_ENABLE = 21, 
+       FW_CMD_LPS_ENTER = 22,                  
+       FW_CMD_LPS_LEAVE = 23,                  
+       FW_CMD_DIG_MODE_SS = 24,                        
+       FW_CMD_DIG_MODE_FA = 25,                        
+       FW_CMD_ADD_A2_ENTRY = 26,
+       FW_CMD_CTRL_DM_BY_DRIVER = 27,
+       FW_CMD_CTRL_DM_BY_DRIVER_NEW = 28,
+       FW_CMD_PAPE_CONTROL = 29,
+       FW_CMD_CHAN_SET = 30,
+}FW_CMD_IO_TYPE,*PFW_CMD_IO_TYPE;
+
+#define RT_MAX_LD_SLOT_NUM     10
+typedef struct _RT_LINK_DETECT_T{
+
+       u32                             NumRecvBcnInPeriod;
+       u32                             NumRecvDataInPeriod;
+
+       u32                             RxBcnNum[RT_MAX_LD_SLOT_NUM];   
+       u32                             RxDataNum[RT_MAX_LD_SLOT_NUM];  
+       u16                             SlotNum;        
+       u16                             SlotIndex;
+
+       u32                             NumTxOkInPeriod;
+       u32                             NumRxOkInPeriod;
+       u32                             NumRxUnicastOkInPeriod;
+       bool                            bBusyTraffic;
+
+#ifdef _RTL8192_EXT_PATCH_
+       u8                              IdleCount;
+       u32                             LastNumTxUnicast;
+       u32                             LastNumRxUnicast;
+#endif 
+}RT_LINK_DETECT_T, *PRT_LINK_DETECT_T;
+
+#ifdef _RTL8192_EXT_PATCH_
+struct rtllib_crypt_data_list{
+       u8 used;
+       u8 mac_addr[ETH_ALEN];  
+       struct rtllib_crypt_data *crypt[WEP_KEYS];
+}__attribute__((packed));
+
+typedef struct _SW_RATR_TABLE{
+       bool bused;
+       u32  ratr_value;
+}SW_RATR_TABLE, *PSW_RATR_TABLE;
+#endif
+
+typedef struct _SW_CAM_TABLE{
+
+       u8                              macaddr[6];
+       bool                            bused;
+       u8                              key_buf[16];
+       u16                             key_type;
+       u8                              useDK;
+       u8                              key_index;                              
+       
+}SW_CAM_TABLE,*PSW_CAM_TABLE;
+#define   TOTAL_CAM_ENTRY                              32
+typedef struct _rate_adaptive
+{
+       u8                              rate_adaptive_disabled;
+       u8                              ratr_state;
+       u16                             reserve;        
+       
+       u32                             high_rssi_thresh_for_ra;
+       u32                             high2low_rssi_thresh_for_ra;
+       u8                              low2high_rssi_thresh_for_ra40M;
+       u32                             low_rssi_thresh_for_ra40M;
+       u8                              low2high_rssi_thresh_for_ra20M;
+       u32                             low_rssi_thresh_for_ra20M;
+       u32                             upper_rssi_threshold_ratr;
+       u32                             middle_rssi_threshold_ratr;
+       u32                             low_rssi_threshold_ratr;
+       u32                             low_rssi_threshold_ratr_40M;
+       u32                             low_rssi_threshold_ratr_20M;
+       u8                              ping_rssi_enable;       
+       u32                             ping_rssi_ratr; 
+       u32                             ping_rssi_thresh_for_ra;
+       u32                             last_ratr;
+       u8                              PreRATRState;
+       
+} rate_adaptive, *prate_adaptive;
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) || defined RTL8192CE
+#define PEER_MAX_ASSOC 10
+struct sta_info {
+       u8 macaddr[ETH_ALEN];
+       u16 aid;
+       u8 authentication;
+       u8 encryption;
+       u16 capability;
+       u8 ratr_index;
+       int wireless_mode;
+       RT_HTINFO_STA_ENTRY htinfo;
+       u8 wme_enable;
+       u32 CurDataRate;
+       rate_adaptive     rate_adaptive;
+       u8 bPowerSave;          
+       struct sk_buff_head PsQueue;            
+       u32     LastActiveTime; 
+       u16                     StaDataRate;  
+       u32                     StaSS; 
+       u16                     RetryFrameCnt;
+       u16                     LastRetryCnt;
+       u16                     NoRetryFrameCnt;
+       u16                     LastNoRetryCnt;
+       int                     AvgRetryRate;
+       int                     LastRetryRate;
+       u8                      txRateIndex;
+       u16                     APDataRate;
+       u16                     ForcedDataRate; 
+} __attribute__ ((packed));
+#endif
+#ifdef _RTL8192_EXT_PATCH_
+typedef struct _RT_PEERMP_HTINFO{
+       u8                              bEnableHT;
+       u8                              bCurrentHTSupport;
+
+       u8                              bRegBW40MHz;                            
+       u8                              bCurBW40MHz;                            
+
+       u8                              bRegShortGI40MHz;                       
+       u8                              bCurShortGI40MHz;                       
+
+       u8                              bRegShortGI20MHz;                       
+       u8                              bCurShortGI20MHz;                       
+
+       u8                              bCurSuppCCK;                            
+
+       
+
+
+       u8                              PeerHTCapBuf[32];
+       u8                              PeerHTInfoBuf[32];
+
+
+       u8                              bAMSDU_Support;                 
+       u16                             nAMSDU_MaxSize;                 
+       u8                              bCurrent_Mesh_AMSDU_Support;    
+       
+
+       u8                              bAMPDUEnable;                           
+       u8                              bCurrentMeshAMPDUEnable;                
+       u8                              AMPDU_Factor;                           
+       u8                              CurrentAMPDUFactor;             
+       u8                              MPDU_Density;                           
+       u8                              CurrentMPDUDensity;                     
+
+       u8                              ForcedAMPDUFactor;
+       u8                              ForcedMPDUDensity;
+
+       HT_AGGRE_MODE_E ForcedAMSDUMode;
+       u16                             ForcedAMSDUMaxSize;
+
+       u8                              bForcedShortGI;
+
+       u8                              CurrentOpMode;
+
+       u8                              MimoPs;
+       
+       HT_EXTCHNL_OFFSET       CurSTAExtChnlOffset;
+       u8                              bCurTxBW40MHz;  
+       u8                              PeerBandwidth;
+
+       u8                              bSwBwInProgress;
+       CHNLOP                          ChnlOp; 
+       u8                              SwBwStep;
+
+       u8                              bRegRT2RTAggregation;
+       u8                              bCurrentRT2RTAggregation;
+       u8                              bCurrentRT2RTLongSlotTime;
+       u8                              szRT2RTAggBuffer[10];
+
+       u8                              bRegRxReorderEnable;
+       u8                              bCurRxReorderEnable;
+       u8                              RxReorderWinSize;
+       u8                              RxReorderPendingTime;
+       u16                             RxReorderDropCounter;
+
+#ifdef USB_TX_DRIVER_AGGREGATION_ENABLE
+       u8                              UsbTxAggrNum;
+#endif
+#ifdef USB_RX_AGGREGATION_SUPPORT
+       u8                              UsbRxFwAggrEn;
+       u8                              UsbRxFwAggrPageNum;
+       u8                              UsbRxFwAggrPacketNum;
+       u8                              UsbRxFwAggrTimeout;
+#endif
+
+       u8                              bIsPeerBcm;
+
+       u8                              McsRateSet[16];
+       u8                              HTHighestOperaRate;
+       u8                              IOTPeer;
+       u32                             IOTAction;
+} __attribute__ ((packed)) peerMP_htinfo, *ppeerMP_htinfo;
+#endif
+
+#define        NUM_PMKID_CACHE         16
+
+typedef struct _RT_PMKID_LIST
+{
+       u8                                              bUsed;
+       u8                                              Bssid[6];
+       u8                                              PMKID[16];
+       u8                                              SsidBuf[33];
+       u8*                                             ssid_octet;
+       u16                                     ssid_length;
+} RT_PMKID_LIST, *PRT_PMKID_LIST;
+
+#if defined CONFIG_CRDA && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30))
+enum {
+       LIBIPW_CH_PASSIVE_ONLY          = (1 << 0),
+       LIBIPW_CH_80211H_RULES          = (1 << 1),
+       LIBIPW_CH_B_ONLY                                = (1 << 2),
+       LIBIPW_CH_NO_IBSS                               = (1 << 3),
+       LIBIPW_CH_UNIFORM_SPREADING     = (1 << 4),
+       LIBIPW_CH_RADAR_DETECT          = (1 << 5),
+       LIBIPW_CH_INVALID                               = (1 << 6),
+};
+struct rtllib_channel {
+       u32 freq;
+       u8 channel;
+       u8 flags;
+       u8 max_power;
+};
+
+#define RTLLIB_24GHZ_MIN_CHANNEL 1
+#define RTLLIB_24GHZ_MAX_CHANNEL 14
+#define RTLLIB_24GHZ_CHANNELS (RTLLIB_24GHZ_MAX_CHANNEL - \
+               RTLLIB_24GHZ_MIN_CHANNEL + 1)
+
+struct reg_dmn_pair_mapping {
+       u16 regDmnEnum;
+       u16 reg_5ghz_ctl;
+       u16 reg_2ghz_ctl;
+};
+
+struct rtl_regulatory {
+       char alpha2[2];
+       u16 country_code;
+       u16 max_power_level;
+       u32 tp_scale;
+       u16 current_rd;
+       u16 current_rd_ext;
+       int16_t power_limit;
+       struct reg_dmn_pair_mapping *regpair;
+};
+
+struct ieee80211_bss {
+       /* Yes, this is a hack */
+       struct cfg80211_bss cbss;
+
+       /* don't want to look up all the time */
+       size_t ssid_len;
+       u8 ssid[IEEE80211_MAX_SSID_LEN];
+
+       u8 dtim_period;
+
+       bool wmm_used;
+
+       unsigned long last_probe_resp;
+
+#ifdef CONFIG_MAC80211_MESH
+       u8 *mesh_id;
+       size_t mesh_id_len;
+       u8 *mesh_cfg;
+#endif
+
+       #define IEEE80211_MAX_SUPP_RATES 32
+       u8 supp_rates[IEEE80211_MAX_SUPP_RATES];
+       size_t supp_rates_len;
+
+       /*
+        * During assocation, we save an ERP value from a probe response so
+        * that we can feed ERP info to the driver when handling the
+        * association completes. these fields probably won't be up-to-date
+        * otherwise, you probably don't want to use them.
+        */
+       bool has_erp_value;
+       u8 erp_value;
+};
+
+/* Parsed Information Elements */
+struct ieee802_11_elems {
+       u8 *ie_start;
+       size_t total_len;
+
+       /* pointers to IEs */
+       u8 *ssid;
+       u8 *supp_rates;
+       u8 *fh_params;
+       u8 *ds_params;
+       u8 *cf_params;
+       struct ieee80211_tim_ie *tim;
+       u8 *ibss_params;
+       u8 *challenge;
+       u8 *wpa;
+       u8 *rsn;
+       u8 *erp_info;
+       u8 *ext_supp_rates;
+       u8 *wmm_info;
+       u8 *wmm_param;
+       struct ieee80211_ht_cap *ht_cap_elem;
+       struct ieee80211_ht_info *ht_info_elem;
+       u8 *mesh_config;
+       u8 *mesh_id;
+       u8 *peer_link;
+       u8 *preq;
+       u8 *prep;
+       u8 *perr;
+       u8 *ch_switch_elem;
+       u8 *country_elem;
+       u8 *pwr_constr_elem;
+       u8 *quiet_elem;         /* first quite element */
+       u8 *timeout_int;
+
+       /* length of them, respectively */
+       u8 ssid_len;
+       u8 supp_rates_len;
+       u8 fh_params_len;
+       u8 ds_params_len;
+       u8 cf_params_len;
+       u8 tim_len;
+       u8 ibss_params_len;
+       u8 challenge_len;
+       u8 wpa_len;
+       u8 rsn_len;
+       u8 erp_info_len;
+       u8 ext_supp_rates_len;
+       u8 wmm_info_len;
+       u8 wmm_param_len;
+       u8 mesh_config_len;
+       u8 mesh_id_len;
+       u8 peer_link_len;
+       u8 preq_len;
+       u8 prep_len;
+       u8 perr_len;
+       u8 ch_switch_elem_len;
+       u8 country_elem_len;
+       u8 pwr_constr_elem_len;
+       u8 quiet_elem_len;
+       u8 num_of_quiet_elem;   /* can be more the one */
+       u8 timeout_int_len;
+};
+
+#endif
+
+/*************** DRIVER STATUS   *****/
+#define STATUS_SCANNING                        0
+#define STATUS_SCAN_HW                 1
+#define STATUS_SCAN_ABORTING   2
+#define STATUS_SETTING_CHAN            3
+/*************** DRIVER STATUS   *****/
+
+enum {
+       NO_USE          = 0,
+       USED            = 1,
+       HW_SEC  = 2,
+       SW_SEC          = 3,
+};
+
+struct rtllib_device {
+       struct pci_dev *pdev;
+       struct net_device *dev;
+        struct rtllib_security sec;
+
+       bool disable_mgnt_queue;
+
+       unsigned long status;
+       short hwscan_ch_bk;
+        HT_EXTCHNL_OFFSET chan_offset_bk;
+        HT_CHANNEL_WIDTH bandwidth_bk;
+       u8 hwscan_sem_up;
+
+
+#if defined CONFIG_CRDA && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30))
+       struct wireless_dev wdev;
+       struct rtl_regulatory regulatory;
+#endif
+
+       u8      CntAfterLink;
+
+       u8 VersionID;
+       /* The last AssocReq/Resp IEs */
+       u8 *assocreq_ies, *assocresp_ies;
+       size_t assocreq_ies_len, assocresp_ies_len;
+       
+       bool b_customer_lenovo_id;
+       bool    bForcedShowRxRate;
+       bool    bForcedShowRateStill;
+       u8      SystemQueryDataRateCount;
+       bool    bForcedBgMode;
+       bool bUseRAMask;
+       bool b1x1RecvCombine;
+       u8 RF_Type; 
+       bool b1SSSupport;
+       
+       u8 hwsec_active;  
+       bool is_silent_reset;
+      bool force_mic_error;
+       bool is_roaming;
+       bool ieee_up;   
+       bool cannot_notify;     
+       bool bSupportRemoteWakeUp;
+       RT_PS_MODE      dot11PowerSaveMode; 
+       bool actscanning;
+       bool FirstIe_InScan;
+       bool be_scan_inprogress;
+       bool beinretry;
+       RT_RF_POWER_STATE               eRFPowerState;
+       RT_RF_CHANGE_SOURCE     RfOffReason;
+       bool is_set_key;
+       bool wx_set_enc; 
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) || defined RTL8192CE
+       struct sta_info *peer_assoc_list[PEER_MAX_ASSOC];
+       atomic_t        AsocEntryNum;
+       u64     CurrTsf;
+       u64     TargetTsf;
+       bool    Peer_bCurBW40M;
+#endif
+       PRT_HIGH_THROUGHPUT     pHTInfo;
+       spinlock_t bw_spinlock;
+
+       spinlock_t reorder_spinlock;
+       u8      Regdot11HTOperationalRateSet[16];               
+       u8      Regdot11TxHTOperationalRateSet[16];             
+       u8      dot11HTOperationalRateSet[16];          
+       u8      RegHTSuppRateSet[16];
+       u8                              HTCurrentOperaRate;
+       u8                              HTHighestOperaRate;
+       u8              MinSpaceCfg;
+       u8              MaxMssDensity;
+       u8      bTxDisableRateFallBack;
+       u8      bTxUseDriverAssingedRate;
+       u8      bTxEnableFwCalcDur;
+       atomic_t        atm_chnlop;
+       atomic_t        atm_swbw;
+
+       struct list_head                Tx_TS_Admit_List;
+       struct list_head                Tx_TS_Pending_List;
+       struct list_head                Tx_TS_Unused_List;
+       TX_TS_RECORD            TxTsRecord[TOTAL_TS_NUM];
+       struct list_head                Rx_TS_Admit_List;
+       struct list_head                Rx_TS_Pending_List;
+       struct list_head                Rx_TS_Unused_List;
+       RX_TS_RECORD            RxTsRecord[TOTAL_TS_NUM];
+       RX_REORDER_ENTRY        RxReorderEntry[128];
+       struct list_head                RxReorder_Unused_List;
+       u8                              ForcedPriority;         
+       
+
+       /* Bookkeeping structures */
+       struct net_device_stats stats;
+       struct rtllib_stats ieee_stats;
+       struct rtllib_softmac_stats softmac_stats;
+       
+       /* Probe / Beacon management */
+       struct list_head network_free_list;
+       struct list_head network_list;
+#ifdef RTL8192U
+       struct list_head network_bssid_free_list;
+       struct list_head network_bssid_list;
+#endif
+       struct rtllib_network *networks;
+       int scans;
+       int scan_age;
+
+       int iw_mode; /* operating mode (IW_MODE_*) */
+       struct iw_spy_data spy_data; 
+
+       spinlock_t lock;
+       spinlock_t wpax_suitlist_lock;
+       
+       int tx_headroom; /* Set to size of any additional room needed at front
+                         * of allocated Tx SKBs */
+       u32 config;
+
+       /* WEP and other encryption related settings at the device level */
+       int open_wep; /* Set to 1 to allow unencrypted frames */
+       int auth_mode;
+       int reset_on_keychange; /* Set to 1 if the HW needs to be reset on
+                                * WEP key changes */
+
+       /* If the host performs {en,de}cryption, then set to 1 */
+       int host_encrypt;
+       int host_encrypt_msdu;
+       int host_decrypt;
+        /* host performs multicast decryption */
+        int host_mc_decrypt;
+
+        /* host should strip IV and ICV from protected frames */
+        /* meaningful only when hardware decryption is being used */
+        int host_strip_iv_icv;
+
+        int host_open_frag;
+        int host_build_iv;
+       int ieee802_1x; /* is IEEE 802.1X used */
+
+       /* WPA data */
+       bool bHalfNMode;
+       bool bHalfWirelessN24GMode;
+       int wpa_enabled;
+       int drop_unencrypted;
+       int tkip_countermeasures;
+       int privacy_invoked;
+       size_t wpa_ie_len;
+       u8 *wpa_ie;
+       size_t wps_ie_len;
+       u8 *wps_ie;
+       u8 ap_mac_addr[6];
+       u16 pairwise_key_type;
+       u16 group_key_type;
+       struct list_head crypt_deinit_list;
+#ifdef _RTL8192_EXT_PATCH_
+       struct rtllib_crypt_data_list* cryptlist[MAX_MP];
+       struct rtllib_crypt_data *sta_crypt[WEP_KEYS];
+#else
+       struct rtllib_crypt_data *crypt[WEP_KEYS];
+#endif
+
+       int tx_keyidx; /* default TX key index (crypt[tx_keyidx]) */
+       SW_CAM_TABLE swcamtable[TOTAL_CAM_ENTRY];
+       struct timer_list crypt_deinit_timer;
+        int crypt_quiesced;
+
+       int bcrx_sta_key; /* use individual keys to override default keys even
+                          * with RX of broad/multicast frames */
+       
+       RT_PMKID_LIST           PMKIDList[NUM_PMKID_CACHE];
+
+       /* Fragmentation structures */
+       struct rtllib_frag_entry frag_cache[17][RTLLIB_FRAG_CACHE_LEN];
+       unsigned int frag_next_idx[17];
+       u16 fts; /* Fragmentation Threshold */
+#define DEFAULT_RTS_THRESHOLD 2346U
+#define MIN_RTS_THRESHOLD 1
+#define MAX_RTS_THRESHOLD 2346U
+        u16 rts; /* RTS threshold */
+
+        /* Association info */
+        u8 bssid[ETH_ALEN];
+
+       /* This stores infos for the current network.
+        * Either the network we are associated in INFRASTRUCTURE
+        * or the network that we are creating in MASTER mode.
+        * ad-hoc is a mixture ;-).
+        * Note that in infrastructure mode, even when not associated,
+        * fields bssid and essid may be valid (if wpa_set and essid_set
+        * are true) as thy carry the value set by the user via iwconfig  
+        */
+       struct rtllib_network current_network;
+
+       enum rtllib_state state;
+
+       int short_slot;
+       int reg_mode;
+       int mode;       /* A, B, G */
+       int modulation; /* CCK, OFDM */
+       int freq_band;  /* 2.4Ghz, 5.2Ghz, Mixed */
+       int abg_true;   /* ABG flag              */
+       
+       /* used for forcing the ibss workqueue to terminate 
+        * without wait for the syncro scan to terminate
+        */
+       short sync_scan_hurryup; 
+       u16 scan_watch_dog;
+        int perfect_rssi;
+        int worst_rssi;
+
+        u16 prev_seq_ctl;       /* used to drop duplicate frames */
+
+       /* map of allowed channels. 0 is dummy */
+#ifdef ENABLE_DOT11D
+       void* pDot11dInfo;
+       bool bGlobalDomain;
+#else
+       u8 channel_map[MAX_CHANNEL_NUMBER+1];
+#endif 
+       u8 active_channel_map[MAX_CHANNEL_NUMBER+1];
+
+       u8   IbssStartChnl;
+       u8   ibss_maxjoin_chal;
+
+#ifdef _RTL8192_EXT_PATCH_
+       u8 backup_channel;
+       bool bUseProtection;
+#endif 
+       int rate;       /* current rate */
+       int basic_rate;
+       u32     currentRate;
+       
+       short active_scan;
+       
+       /* this contains flags for selectively enable softmac support */
+       u16 softmac_features;
+       
+       /* if the sequence control field is not filled by HW */
+       u16 seq_ctrl[5];
+       
+       /* association procedure transaction sequence number */
+       u16 associate_seq;
+       
+       /* AID for RTXed association responses */
+       u16 assoc_id;
+       
+       /* power save mode related*/
+       u8 ack_tx_to_ieee;
+       short ps;
+       short sta_sleep;
+       int ps_timeout;
+       int ps_period;
+       struct tasklet_struct ps_task;
+       u32 ps_th;
+       u32 ps_tl;
+       bool polling;
+       
+       short raw_tx;
+       /* used if IEEE_SOFTMAC_TX_QUEUE is set */
+       short queue_stop;
+       short scanning_continue ;
+       short proto_started;
+       short proto_stoppping;
+       
+       struct semaphore wx_sem;
+       struct semaphore scan_sem;
+       struct semaphore ips_sem;
+       
+       spinlock_t mgmt_tx_lock;        
+       spinlock_t beacon_lock;
+
+       short beacon_txing;
+
+       short wap_set;
+       short ssid_set;
+       
+       /* set on initialization */
+       u8  qos_support;
+       unsigned int wmm_acm;
+       
+       /* for discarding duplicated packets in IBSS */
+       struct list_head ibss_mac_hash[IEEE_IBSS_MAC_HASH_SIZE];
+       
+       /* for discarding duplicated packets in BSS */
+       u16 last_rxseq_num[17]; /* rx seq previous per-tid */
+       u16 last_rxfrag_num[17];/* tx frag previous per-tid */
+       unsigned long last_packet_time[17];
+       
+       /* for PS mode */
+       unsigned long last_rx_ps_time;
+       bool                    bAwakePktSent; 
+       u8                      LPSDelayCnt;
+       
+       /* used if IEEE_SOFTMAC_SINGLE_QUEUE is set */
+       struct sk_buff *mgmt_queue_ring[MGMT_QUEUE_NUM];
+       int mgmt_queue_head;
+       int mgmt_queue_tail;
+#define RTLLIB_QUEUE_LIMIT 128
+       u8 AsocRetryCount;
+       unsigned int hw_header;
+       struct sk_buff_head skb_waitQ[MAX_QUEUE_SIZE];
+       struct sk_buff_head  skb_aggQ[MAX_QUEUE_SIZE]; 
+       struct sk_buff_head  skb_drv_aggQ[MAX_QUEUE_SIZE]; 
+       u32     sta_edca_param[4];
+       bool aggregation;
+       bool enable_rx_imm_BA;
+       bool bibsscoordinator;
+
+       bool    bdynamic_txpower_enable; 
+
+       bool bCTSToSelfEnable;
+       u8      CTSToSelfTH;
+       
+       u32     fsync_time_interval;
+       u32     fsync_rate_bitmap;
+       u8      fsync_rssi_threshold;
+       bool    bfsync_enable;
+
+       u8      fsync_multiple_timeinterval;            
+       u32     fsync_firstdiff_ratethreshold;          
+       u32     fsync_seconddiff_ratethreshold;  
+       Fsync_State                     fsync_state;
+       bool            bis_any_nonbepkts;
+       bandwidth_autoswitch bandwidth_auto_switch;
+       bool FwRWRF;
+
+       RT_LINK_DETECT_T        LinkDetectInfo;
+       bool bIsAggregateFrame;
+       RT_POWER_SAVE_CONTROL   PowerSaveControl;
+       u8 amsdu_in_process;
+
+       /* used if IEEE_SOFTMAC_TX_QUEUE is set */
+       struct  tx_pending_t tx_pending;
+       
+       /* used if IEEE_SOFTMAC_ASSOCIATE is set */
+       struct timer_list associate_timer;
+
+       /* used if IEEE_SOFTMAC_BEACONS is set */
+       struct timer_list beacon_timer;
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+       struct timer_list ibss_wait_timer;
+#endif
+       u8 need_sw_enc;
+#ifdef _RTL8192_EXT_PATCH_
+       struct net_device *meshdev;
+       struct net_device_stats *meshstats;
+       u8 only_mesh;  
+       u8 hostname[MAX_HOST_NAME_LENGTH];
+       u8 hostname_len;
+       struct list_head mesh_network_free_list;
+       struct list_head mesh_network_list;
+       struct rtllib_network *mesh_networks;
+       struct rtllib_network current_mesh_network;
+       enum rtllib_state mesh_state;
+       short mesh_started;
+       int mesh_security_setting;
+       int mesh_sec_type;
+       struct list_head mesh_mac_hash[IEEE_MESH_MAC_HASH_SIZE];
+       u64 LinkingPeerBitMap;
+       u8 LinkingPeerAddr[MAX_MP-1][ETH_ALEN]; 
+       u8 LinkingPeerSecState[MAX_MP-1];
+       u8 mesh_cached_PTK[MAX_MP-1][16];
+       u32 peer_AID_bitmap;
+       u8 peer_AID_Addr[30][ETH_ALEN];
+       int mesh_txkeyidx;
+       u16 mesh_pairwise_key_type;
+       u16 mesh_group_key_type;
+       u32 HwSecCamBitMap; 
+       u8 HwSecCamStaAddr[TOTAL_CAM_ENTRY][ETH_ALEN]; 
+       SW_CAM_TABLE swmeshcamtable[TOTAL_CAM_ENTRY];
+       SW_RATR_TABLE swmeshratrtable[8];
+       short meshid_set;
+       u8 p2pmode;
+       u8 is_server_eth0;  
+       u8 serverExtChlOffset;
+       u8 APExtChlOffset;
+       short meshScanMode;
+       struct sk_buff_head  skb_meshaggQ[MAX_QUEUE_SIZE]; 
+       u8 mesh_amsdu_in_process;
+#endif
+       work_struct_rsl associate_complete_wq;
+#ifdef ENABLE_IPS
+       work_struct_rsl ips_leave_wq;
+#endif    
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+       delayed_work_struct_rsl check_tsf_wq;
+       delayed_work_struct_rsl update_assoc_sta_info_wq;
+#endif
+       delayed_work_struct_rsl associate_procedure_wq;
+       delayed_work_struct_rsl softmac_scan_wq;
+       delayed_work_struct_rsl softmac_hint11d_wq;
+       delayed_work_struct_rsl associate_retry_wq;
+       delayed_work_struct_rsl start_ibss_wq;
+#ifndef RTL8190P
+       delayed_work_struct_rsl hw_wakeup_wq;
+       delayed_work_struct_rsl hw_sleep_wq;
+#endif
+       delayed_work_struct_rsl link_change_wq;
+       work_struct_rsl wx_sync_scan_wq;
+#ifdef _RTL8192_EXT_PATCH_
+       work_struct_rsl ext_stop_scan_wq;
+       work_struct_rsl ext_send_beacon_wq;
+       work_struct_rsl ext_create_crypt_for_peers_wq;  
+       work_struct_rsl ext_path_sel_ops_wq;  
+       work_struct_rsl ext_update_extchnloffset_wq;  
+       delayed_work_struct_rsl ext_wx_set_key_wq;
+#endif
+
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)  
+       struct workqueue_struct *wq;
+#else
+       u32 *wq;
+#endif
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,5,40)  
+       /* used for periodly scan */
+       struct timer_list scan_timer;
+#endif
+#if defined (RTL8192S_WAPI_SUPPORT)
+       u8      WapiSupport;    
+       RT_WAPI_T       wapiInfo;
+       struct list_head cache_frag_list;
+       spinlock_t wapi_queue_lock; 
+       WAPI_QUEUE *wapi_queue; 
+#endif
+
+#ifdef _RTL8192_EXT_PATCH_
+       int (*set_mesh_key)(struct net_device *dev,
+                        struct iw_point *encoding, struct iw_encode_ext *ext, u8 *addr);
+#endif
+       /* Callback functions */
+       void (*set_security)(struct net_device *dev,
+                            struct rtllib_security *sec);
+       
+       /* Used to TX data frame by using txb structs.
+        * this is not used if in the softmac_features
+        * is set the flag IEEE_SOFTMAC_TX_QUEUE
+        */
+       int (*hard_start_xmit)(struct rtllib_txb *txb,
+                              struct net_device *dev);
+       
+       int (*reset_port)(struct net_device *dev);
+        int (*is_queue_full) (struct net_device * dev, int pri);
+
+        int (*handle_management) (struct net_device * dev,
+                                  struct rtllib_network * network, u16 type);
+        int (*is_qos_active) (struct net_device *dev, struct sk_buff *skb);
+
+       /* Softmac-generated frames (mamagement) are TXed via this 
+        * callback if the flag IEEE_SOFTMAC_SINGLE_QUEUE is 
+        * not set. As some cards may have different HW queues that 
+        * one might want to use for data and management frames
+        * the option to have two callbacks might be useful.
+        * This fucntion can't sleep.
+        */
+       int (*softmac_hard_start_xmit)(struct sk_buff *skb,
+                              struct net_device *dev);
+       
+       /* used instead of hard_start_xmit (not softmac_hard_start_xmit)
+        * if the IEEE_SOFTMAC_TX_QUEUE feature is used to TX data
+        * frames. I the option IEEE_SOFTMAC_SINGLE_QUEUE is also set
+        * then also management frames are sent via this callback.
+        * This function can't sleep.
+        */    
+       void (*softmac_data_hard_start_xmit)(struct sk_buff *skb,
+                              struct net_device *dev,int rate);
+
+       /* stops the HW queue for DATA frames. Useful to avoid
+        * waste time to TX data frame when we are reassociating
+        * This function can sleep.
+        */      
+       void (*data_hard_stop)(struct net_device *dev);
+       
+       /* OK this is complementar to data_poll_hard_stop */
+       void (*data_hard_resume)(struct net_device *dev);
+       
+       /* ask to the driver to retune the radio .
+        * This function can sleep. the driver should ensure
+        * the radio has been swithced before return.
+        */
+       void (*set_chan)(struct net_device *dev,short ch);
+       
+       /* These are not used if the ieee stack takes care of
+        * scanning (IEEE_SOFTMAC_SCAN feature set). 
+        * In this case only the set_chan is used.
+        *
+        * The syncro version is similar to the start_scan but
+        * does not return until all channels has been scanned.
+        * this is called in user context and should sleep, 
+        * it is called in a work_queue when swithcing to ad-hoc mode
+        * or in behalf of iwlist scan when the card is associated 
+        * and root user ask for a scan. 
+        * the fucntion stop_scan should stop both the syncro and
+        * background scanning and can sleep.
+        * The fucntion start_scan should initiate the background 
+        * scanning and can't sleep.
+        */ 
+       void (*scan_syncro)(struct net_device *dev);
+       void (*start_scan)(struct net_device *dev);
+       void (*stop_scan)(struct net_device *dev);
+       
+       void (*rtllib_start_hw_scan)(struct net_device *dev);
+       void (*rtllib_stop_hw_scan)(struct net_device *dev);
+       
+       /* indicate the driver that the link state is changed
+        * for example it may indicate the card is associated now.
+        * Driver might be interested in this to apply RX filter 
+        * rules or simply light the LINK led 
+        */
+       void (*link_change)(struct net_device *dev);
+       
+       /* these two function indicates to the HW when to start
+        * and stop to send beacons. This is used when the 
+        * IEEE_SOFTMAC_BEACONS is not set. For now the
+        * stop_send_bacons is NOT guaranteed to be called only
+        * after start_send_beacons.
+        */
+       void (*start_send_beacons) (struct net_device *dev);
+       void (*stop_send_beacons) (struct net_device *dev);
+       
+       /* power save mode related */
+       void (*sta_wake_up) (struct net_device *dev);
+       void (*enter_sleep_state) (struct net_device *dev, u32 th, u32 tl);
+       short (*ps_is_queue_empty) (struct net_device *dev);
+#if 0
+       /* Typical STA methods */
+        int (*handle_auth) (struct net_device * dev,
+                            struct rtllib_auth * auth);
+        int (*handle_deauth) (struct net_device * dev,
+                              struct rtllib_deauth * auth);
+        int (*handle_action) (struct net_device * dev,
+                              struct rtllib_action * action,
+                              struct rtllib_rx_stats * stats);
+        int (*handle_disassoc) (struct net_device * dev,
+                                struct rtllib_disassoc * assoc);
+#endif
+        int (*handle_beacon) (struct net_device * dev, struct rtllib_beacon * beacon, struct rtllib_network * network);
+#if 0
+        int (*handle_probe_response) (struct net_device * dev,
+                                      struct rtllib_probe_response * resp,
+                                      struct rtllib_network * network);
+        int (*handle_probe_request) (struct net_device * dev,
+                                     struct rtllib_probe_request * req,
+                                     struct rtllib_rx_stats * stats);
+#endif
+        int (*handle_assoc_response) (struct net_device * dev, struct rtllib_assoc_response_frame * resp, struct rtllib_network * network);
+
+#if 0
+        /* Typical AP methods */
+        int (*handle_assoc_request) (struct net_device * dev);
+        int (*handle_reassoc_request) (struct net_device * dev,
+                                       struct rtllib_reassoc_request * req);
+#endif
+
+       /* check whether Tx hw resouce available */
+       short (*check_nic_enough_desc)(struct net_device *dev, int queue_index);
+       short (*get_nic_desc_num)(struct net_device *dev, int queue_index);
+       void (*SetBWModeHandler)(struct net_device *dev, HT_CHANNEL_WIDTH Bandwidth, HT_EXTCHNL_OFFSET Offset);
+       bool (*GetNmodeSupportBySecCfg)(struct net_device* dev);
+       void (*SetWirelessMode)(struct net_device* dev, u8 wireless_mode);
+       bool (*GetHalfNmodeSupportByAPsHandler)(struct net_device* dev); 
+       u8   (*rtllib_ap_sec_type)(struct rtllib_device *ieee);
+       void (*HalUsbRxAggrHandler)(struct net_device *dev, bool Value);
+       void (*InitialGainHandler)(struct net_device *dev, u8 Operation);
+#ifdef _RTL8192_EXT_PATCH_
+       int (*set_key_for_AP)(struct rtllib_device *ieee);
+       void (*del_hwsec_cam_entry)(struct rtllib_device *ieee, u8 *addr); 
+       int (*set_key_for_peer) (struct net_device *dev,u8 *Addr,u8 KeyIndex,u16 KeyType,u32 *KeyContent );
+       int (*ext_patch_rtllib_start_protocol) (struct rtllib_device *ieee); 
+
+       short (*ext_patch_rtllib_probe_req_1) (struct rtllib_device *ieee); 
+       u8* (*ext_patch_rtllib_probe_req_2) (struct rtllib_device *ieee, struct sk_buff *skb, u8 *tag); 
+
+       void (*ext_patch_rtllib_stop_protocol) (struct rtllib_device *ieee,bool is_silent_reset); 
+       
+       int (*ext_patch_rtllib_rx_frame_softmac_on_peerlink_open) (struct rtllib_device *ieee, struct sk_buff *skb, struct rtllib_rx_stats *rx_stats);
+       int (*ext_patch_rtllib_rx_frame_softmac_on_peerlink_confirm) (struct rtllib_device *ieee, struct sk_buff *skb);
+       int (*ext_patch_rtllib_rx_frame_softmac_on_peerlink_close) (struct rtllib_device *ieee, struct sk_buff *skb);
+       void (*ext_patch_rtllib_close_all_peerlink) (struct rtllib_device *ieee, __le16 reason);
+
+       int (*ext_patch_rtllib_rx_frame_softmac_on_linkmetric_report) (struct rtllib_device *ieee, struct sk_buff *skb);
+       int (*ext_patch_rtllib_rx_frame_softmac_on_linkmetric_req) (struct rtllib_device *ieee, struct sk_buff *skb);
+
+       int (*ext_patch_rtllib_rx_frame_softmac_on_pathselect_preq) (struct rtllib_device *ieee, struct sk_buff *skb,struct rtllib_rx_stats *rx_stats);
+       int (*ext_patch_rtllib_rx_frame_softmac_on_pathselect_prep) (struct rtllib_device *ieee, struct sk_buff *skb,struct rtllib_rx_stats *rx_stats);
+       int (*ext_patch_rtllib_rx_frame_softmac_on_pathselect_perr) (struct rtllib_device *ieee, struct sk_buff *skb,struct rtllib_rx_stats *rx_stats);
+       int (*ext_patch_rtllib_rx_frame_softmac_on_pathselect_rann) (struct rtllib_device *ieee, struct sk_buff *skb,struct rtllib_rx_stats *rx_stats);
+       int (*ext_patch_rtllib_rx_frame_softmac_on_pathselect_pann) (struct rtllib_device *ieee, struct sk_buff *skb,struct rtllib_rx_stats *rx_stats);
+
+       int (*ext_patch_rtllib_ext_stop_scan_wq_set_channel) (struct rtllib_device *ieee);
+       int (*ext_patch_r819x_wx_set_mesh_chan)(struct net_device *dev, unsigned char channel);
+       void (*ext_patch_r819x_wx_set_channel) (struct rtllib_device *ieee, int ch);
+       
+       int (*ext_patch_rtllib_softmac_xmit_get_rate) (struct rtllib_device *ieee, struct sk_buff *skb);
+       int (*ext_patch_rtllib_rx_frame_softmac_on_auth)(struct rtllib_device *ieee, struct sk_buff *skb, struct rtllib_rx_stats *rx_stats);
+       int (*ext_patch_rtllib_rx_frame_softmac_on_deauth)(struct rtllib_device *ieee, struct sk_buff *skb, struct rtllib_rx_stats *rx_stats);
+       int (*ext_patch_rtllib_tx_data)(struct rtllib_device *ieee, struct rtllib_hdr_4addrqos* header, u8* is_peer_n_mode, u8* is_peer_40M,
+               u8* is_peer_shortGI_40M, u8* is_peer_shortGI_20M,u8* peer_highest_opra_rate,u8* peer_ratr_index, u8* AID);
+       bool (*ext_patch_rtllib_is_mesh)(struct rtllib_device * ieee,u8 * addr);
+       ppeerMP_htinfo (*ext_patch_rtllib_get_peermp_htinfo) (struct rtllib_device *ieee,u8 * daddr);
+       int (* ext_patch_rtllib_create_crypt_for_peer)(struct rtllib_device * ieee);
+       void (*ext_patch_rtllib_start_mesh)(struct rtllib_device *ieee);
+       void (*ext_patch_rtllib_rx_mgt_on_probe_req) ( struct rtllib_device *ieee, struct rtllib_probe_request *beacon, struct rtllib_rx_stats *stats);
+       unsigned int(*ext_patch_rtllib_process_probe_response_1)(struct rtllib_device *ieee,    struct rtllib_probe_response *beacon,   struct rtllib_rx_stats *stats);
+       
+       void (*ext_patch_rtllib_rx_mgt_update_expire) ( struct rtllib_device *ieee, struct sk_buff *skb);
+       struct sk_buff* (*ext_patch_get_beacon_get_probersp)(struct rtllib_device *ieee, u8 *dest, struct rtllib_network *net);
+
+       int (*ext_patch_rtllib_rx_on_rx) (struct rtllib_device *ieee, struct sk_buff *skb, struct rtllib_rx_stats *rx_stats, u16 type, u16 stype);
+       
+       int (*ext_patch_rtllib_rx_frame_get_hdrlen) (struct rtllib_device *ieee, struct sk_buff *skb);
+       
+       int (*ext_patch_rtllib_rx_frame_get_mac_hdrlen) (struct rtllib_device *ieee, struct sk_buff *skb);
+       
+       int (*ext_patch_rtllib_rx_frame_get_mesh_hdrlen_llc) (struct rtllib_device *ieee, struct sk_buff *skb);
+       int (*ext_patch_rtllib_rx_is_valid_framectl) (struct rtllib_device *ieee, u16 fc, u16 type, u16 stype);
+       
+       
+       /* added by david for setting acl dynamically */
+       u8 (*ext_patch_rtllib_acl_query) (struct rtllib_device *ieee, u8 *sa);
+
+       
+       void (*ext_patch_rtllib_update_ratr_mask)(struct net_device* dev,u8* MacAddr,u8 rssi_level,u32 *ratr_bitmap,u8* bShortGI);
+       struct sk_buff* (*ext_patch_rtllib_send_ath_commit) (struct rtllib_device * ieee,u8 * addr);
+       struct sk_buff* (*ext_patch_rtllib_send_ath_confirm) (struct rtllib_device * ieee,u8 * addr);
+       int (*ext_patch_rtllib_rx_ath_commit) (struct rtllib_device * ieee,u8 * addr);
+       u8 (*ext_patch_rtllib_rx_ath_confirm) (struct rtllib_device *ieee, u8* pframe,u16 strlen,u8 *addr);
+
+#endif 
+       bool (*SetFwCmdHandler)(struct net_device *dev, FW_CMD_IO_TYPE          FwCmdIO);
+#ifdef _RTL8192_EXT_PATCH_
+       void (*UpdateHalRAMaskHandler)(struct net_device* dev, bool bMulticast, u8 macId, u8* MacAddr, u8 wirelessMode,         u8 rssi_level);
+#else
+       void (*UpdateHalRAMaskHandler)(struct net_device* dev, bool bMulticast, u8 macId, u8* MacAddr, u8 *pEntry,      u8 rssi_level);
+#endif
+       void (*UpdateBeaconInterruptHandler)(struct net_device* dev, bool start);
+       u16  (*rtl_11n_user_show_rates)(struct net_device *dev);
+       void (*ScanOperationBackupHandler)(struct net_device *dev, u8 Operation);
+       void (*LedControlHandler)(struct net_device * dev, LED_CTL_MODE LedAction);
+       void (*SetHwRegHandler)(struct net_device *dev,u8 variable,u8* val);
+       void (*GetHwRegHandler)(struct net_device *dev,u8 variable,u8* val);
+#ifdef ENABLE_IPS
+        void (*rtllib_ips_leave_wq) (struct net_device *dev);
+        void (*rtllib_ips_leave)(struct net_device *dev);
+#endif
+#ifdef ENABLE_LPS
+       void (*LeisurePSLeave)(struct net_device *dev);
+#endif
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+       void (*SetBeaconRelatedRegistersHandler)(struct net_device* dev);
+       bool (*check_ht_cap)(struct net_device* dev, struct sta_info *sta, struct rtllib_network* net);
+       void (*Adhoc_InitRateAdaptive)(struct net_device *dev,struct sta_info  *pEntry);
+#endif
+
+       /* This must be the last item so that it points to the data
+        * allocated beyond this structure by alloc_rtllib */
+       u8 priv[0];
+};
+
+#define IEEE_A            (1<<0)
+#define IEEE_B            (1<<1)
+#define IEEE_G            (1<<2)
+#define IEEE_N_24G               (1<<4)
+#define        IEEE_N_5G                 (1<<5)
+#define IEEE_MODE_MASK    (IEEE_A|IEEE_B|IEEE_G)
+
+/* Generate a 802.11 header */
+
+/* Uses the channel change callback directly
+ * instead of [start/stop] scan callbacks
+ */
+#define IEEE_SOFTMAC_SCAN (1<<2)
+
+/* Perform authentication and association handshake */
+#define IEEE_SOFTMAC_ASSOCIATE (1<<3)
+
+/* Generate probe requests */
+#define IEEE_SOFTMAC_PROBERQ (1<<4)
+
+/* Generate respones to probe requests */
+#define IEEE_SOFTMAC_PROBERS (1<<5)
+
+/* The ieee802.11 stack will manages the netif queue
+ * wake/stop for the driver, taking care of 802.11
+ * fragmentation. See softmac.c for details. */
+#define IEEE_SOFTMAC_TX_QUEUE (1<<7)
+
+/* Uses only the softmac_data_hard_start_xmit
+ * even for TX management frames.
+ */
+#define IEEE_SOFTMAC_SINGLE_QUEUE (1<<8)
+
+/* Generate beacons.  The stack will enqueue beacons
+ * to the card 
+ */ 
+#define IEEE_SOFTMAC_BEACONS (1<<6)
+
+#ifdef _RTL8192_EXT_PATCH_
+static inline int rtllib_find_MP(struct rtllib_device* ieee, const u8* addr, u8 set)
+{
+       int i=0;
+       for (i=1; i<MAX_MP; i++) {
+               if ((ieee->cryptlist[i]->used == 0) && set) {
+                       memcpy(ieee->cryptlist[i]->mac_addr, addr, ETH_ALEN);
+                       ieee->cryptlist[i]->used = 1;
+                       return i;
+               } else if (0 == memcmp(ieee->cryptlist[i]->mac_addr, addr, ETH_ALEN)) {
+                       return i;
+               }
+       }
+       return -1;
+}
+#endif
+
+static inline void *rtllib_priv(struct net_device *dev)
+{
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) 
+       return ((struct rtllib_device *)netdev_priv(dev))->priv;
+#else
+       return ((struct rtllib_device *)dev->priv)->priv;
+#endif
+}
+
+extern inline int rtllib_is_empty_essid(const char *essid, int essid_len)
+{
+       /* Single white space is for Linksys APs */
+       if (essid_len == 1 && essid[0] == ' ')
+               return 1;
+
+       /* Otherwise, if the entire essid is 0, we assume it is hidden */
+       while (essid_len) {
+               essid_len--;
+               if (essid[essid_len] != '\0')
+                       return 0;
+       }
+
+       return 1;
+}
+
+extern inline int rtllib_is_valid_mode(struct rtllib_device *ieee, int mode)
+{
+       /*
+        * It is possible for both access points and our device to support
+        * combinations of modes, so as long as there is one valid combination
+        * of ap/device supported modes, then return success
+        *
+        */
+       if ((mode & IEEE_A) &&
+           (ieee->modulation & RTLLIB_OFDM_MODULATION) &&
+           (ieee->freq_band & RTLLIB_52GHZ_BAND))
+               return 1;
+
+       if ((mode & IEEE_G) &&
+           (ieee->modulation & RTLLIB_OFDM_MODULATION) &&
+           (ieee->freq_band & RTLLIB_24GHZ_BAND))
+               return 1;
+
+       if ((mode & IEEE_B) &&
+           (ieee->modulation & RTLLIB_CCK_MODULATION) &&
+           (ieee->freq_band & RTLLIB_24GHZ_BAND))
+               return 1;
+
+       return 0;
+}
+
+extern inline int rtllib_get_hdrlen(u16 fc)
+{
+       int hdrlen = RTLLIB_3ADDR_LEN;
+
+       switch (WLAN_FC_GET_TYPE(fc)) {
+       case RTLLIB_FTYPE_DATA:
+               if ((fc & RTLLIB_FCTL_FROMDS) && (fc & RTLLIB_FCTL_TODS))
+                       hdrlen = RTLLIB_4ADDR_LEN; /* Addr4 */
+               if(RTLLIB_QOS_HAS_SEQ(fc))
+                       hdrlen += 2; /* QOS ctrl*/
+               break;
+       case RTLLIB_FTYPE_CTL:
+               switch (WLAN_FC_GET_STYPE(fc)) {
+               case RTLLIB_STYPE_CTS:
+               case RTLLIB_STYPE_ACK:
+                       hdrlen = RTLLIB_1ADDR_LEN;
+                       break;
+               default:
+                       hdrlen = RTLLIB_2ADDR_LEN;
+                       break;
+               }
+               break;
+       }
+
+       return hdrlen;
+}
+
+static inline u8 *rtllib_get_payload(struct rtllib_hdr *hdr)
+{
+        switch (rtllib_get_hdrlen(le16_to_cpu(hdr->frame_ctl))) {
+        case RTLLIB_1ADDR_LEN:
+                return ((struct rtllib_hdr_1addr *)hdr)->payload;
+        case RTLLIB_2ADDR_LEN:
+                return ((struct rtllib_hdr_2addr *)hdr)->payload;
+        case RTLLIB_3ADDR_LEN:
+                return ((struct rtllib_hdr_3addr *)hdr)->payload;
+        case RTLLIB_4ADDR_LEN:
+                return ((struct rtllib_hdr_4addr *)hdr)->payload;
+        }
+        return NULL;
+}
+
+static inline int rtllib_is_ofdm_rate(u8 rate)
+{
+        switch (rate & ~RTLLIB_BASIC_RATE_MASK) {
+        case RTLLIB_OFDM_RATE_6MB:
+        case RTLLIB_OFDM_RATE_9MB:
+        case RTLLIB_OFDM_RATE_12MB:
+        case RTLLIB_OFDM_RATE_18MB:
+        case RTLLIB_OFDM_RATE_24MB:
+        case RTLLIB_OFDM_RATE_36MB:
+        case RTLLIB_OFDM_RATE_48MB:
+        case RTLLIB_OFDM_RATE_54MB:
+                return 1;
+        }
+        return 0;
+}
+
+static inline int rtllib_is_cck_rate(u8 rate)
+{
+        switch (rate & ~RTLLIB_BASIC_RATE_MASK) {
+        case RTLLIB_CCK_RATE_1MB:
+        case RTLLIB_CCK_RATE_2MB:
+        case RTLLIB_CCK_RATE_5MB:
+        case RTLLIB_CCK_RATE_11MB:
+                return 1;
+        }
+        return 0;
+}
+
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10))
+static inline unsigned compare_ether_addr(const u8 *addr1, const u8 *addr2)
+{
+       const u16 *a = (const u16 *) addr1;
+       const u16 *b = (const u16 *) addr2;
+
+       BUILD_BUG_ON(ETH_ALEN != 6);
+       return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2])) != 0;
+}
+#endif
+
+/* rtllib.c */
+extern void free_rtllib(struct net_device *dev);
+extern struct net_device *alloc_rtllib(int sizeof_priv);
+
+extern int rtllib_set_encryption(struct rtllib_device *ieee);
+
+/* rtllib_tx.c */
+
+#ifdef _RTL8192_EXT_PATCH_
+extern int rtllib_encrypt_fragment(
+       struct rtllib_device *ieee,
+       struct sk_buff *frag,
+       int hdr_len, u8 is_mesh, u8 entry);
+#else
+extern int rtllib_encrypt_fragment(
+       struct rtllib_device *ieee,
+       struct sk_buff *frag,
+       int hdr_len);
+#endif
+
+extern int rtllib_xmit(struct sk_buff *skb,  struct net_device *dev);
+extern int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev);
+#ifdef _RTL8192_EXT_PATCH_
+extern int rtllib_classify(struct sk_buff *skb, u8 bIsAmsdu);
+extern int rtllib_mesh_xmit(struct sk_buff *skb,  struct net_device *dev);
+extern inline int rtllib_put_snap(u8 *data, u16 h_proto);
+#endif
+extern void rtllib_txb_free(struct rtllib_txb *);
+
+#ifdef ENABLE_AMSDU
+extern struct sk_buff *AMSDU_Aggregation(struct rtllib_device *ieee, struct sk_buff_head *pSendList);
+extern u8 AMSDU_GetAggregatibleList(struct rtllib_device *ieee, struct sk_buff *pCurSkb, struct sk_buff_head   *pSendList, u8 queue_index);
+extern struct sk_buff *msh_AMSDU_Aggregation(struct rtllib_device *ieee, struct sk_buff_head *pSendList);
+extern u8 msh_AMSDU_GetAggregatibleList(struct rtllib_device *ieee, struct sk_buff *pCurSkb, struct sk_buff_head *pSendList, u8 queue_index);
+#endif
+
+/* rtllib_rx.c */
+extern int rtllib_rx(struct rtllib_device *ieee, struct sk_buff *skb,
+                       struct rtllib_rx_stats *rx_stats);
+extern void rtllib_rx_mgt(struct rtllib_device *ieee,
+                            struct sk_buff *skb,
+                            struct rtllib_rx_stats *stats);
+extern void rtllib_rx_probe_rq(struct rtllib_device *ieee, 
+                           struct sk_buff *skb);
+extern int IsLegalChannel( struct rtllib_device *rtllib, u8 channel);
+
+/* rtllib_wx.c */
+extern int rtllib_wx_get_scan(struct rtllib_device *ieee,
+                                struct iw_request_info *info,
+                                union iwreq_data *wrqu, char *key);
+#ifdef _RTL8192_EXT_PATCH_
+extern int rtllib_wx_set_encode(struct rtllib_device *ieee,
+                                  struct iw_request_info *info,
+                                  union iwreq_data *wrqu, char *key, u8 is_mesh);
+extern int rtllib_wx_get_encode(struct rtllib_device *ieee,
+                                  struct iw_request_info *info,
+                                  union iwreq_data *wrqu, char *key, u8 is_mesh);
+extern int rtllib_mesh_set_encode_ext(struct rtllib_device *ieee,
+                               struct iw_point *encoding, struct iw_encode_ext *ext, int entry);
+#if WIRELESS_EXT >= 18
+extern int rtllib_wx_get_encode_ext(struct rtllib_device *ieee,
+                            struct iw_request_info *info,
+                            union iwreq_data* wrqu, char *extra, u8 is_mesh);
+extern int rtllib_wx_set_encode_ext(struct rtllib_device *ieee,
+                            struct iw_request_info *info,
+                            union iwreq_data* wrqu, char *extra, u8 is_mesh);
+#endif
+#else
+extern int rtllib_wx_set_encode(struct rtllib_device *ieee,
+                                  struct iw_request_info *info,
+                                  union iwreq_data *wrqu, char *key);
+extern int rtllib_wx_get_encode(struct rtllib_device *ieee,
+                                  struct iw_request_info *info,
+                                  union iwreq_data *wrqu, char *key);
+#if WIRELESS_EXT >= 18
+extern int rtllib_wx_get_encode_ext(struct rtllib_device *ieee,
+                            struct iw_request_info *info,
+                            union iwreq_data* wrqu, char *extra);
+extern int rtllib_wx_set_encode_ext(struct rtllib_device *ieee,
+                            struct iw_request_info *info,
+                            union iwreq_data* wrqu, char *extra);
+#endif
+#endif
+extern int rtllib_wx_set_auth(struct rtllib_device *ieee,
+                               struct iw_request_info *info,
+                               struct iw_param *data, char *extra);
+extern int rtllib_wx_set_mlme(struct rtllib_device *ieee,
+                               struct iw_request_info *info,
+                               union iwreq_data *wrqu, char *extra);
+extern int rtllib_wx_set_gen_ie(struct rtllib_device *ieee, u8 *ie, size_t len);
+
+/* rtllib_softmac.c */
+extern short rtllib_is_54g(struct rtllib_network *net);
+extern short rtllib_is_shortslot(struct rtllib_network net);
+extern int rtllib_rx_frame_softmac(struct rtllib_device *ieee, struct sk_buff *skb,
+                       struct rtllib_rx_stats *rx_stats, u16 type,
+                       u16 stype);
+extern void rtllib_softmac_new_net(struct rtllib_device *ieee, struct rtllib_network *net);
+
+void SendDisassociation(struct rtllib_device *ieee, bool deauth, u16 asRsn);
+extern void rtllib_softmac_xmit(struct rtllib_txb *txb, struct rtllib_device *ieee);
+
+extern void rtllib_stop_send_beacons(struct rtllib_device *ieee);
+extern void notify_wx_assoc_event(struct rtllib_device *ieee);
+extern void rtllib_softmac_check_all_nets(struct rtllib_device *ieee);
+extern void rtllib_start_bss(struct rtllib_device *ieee);
+extern void rtllib_start_master_bss(struct rtllib_device *ieee);
+extern void rtllib_start_ibss(struct rtllib_device *ieee);
+extern void rtllib_softmac_init(struct rtllib_device *ieee);
+extern void rtllib_softmac_free(struct rtllib_device *ieee);
+extern void rtllib_associate_abort(struct rtllib_device *ieee);
+extern void rtllib_disassociate(struct rtllib_device *ieee);
+extern void rtllib_stop_scan(struct rtllib_device *ieee);
+extern bool rtllib_act_scanning(struct rtllib_device *ieee, bool sync_scan);
+extern void rtllib_stop_scan_syncro(struct rtllib_device *ieee);
+extern void rtllib_start_scan_syncro(struct rtllib_device *ieee, u8 is_mesh);
+extern inline struct sk_buff *rtllib_probe_req(struct rtllib_device *ieee);
+extern u8 MgntQuery_MgntFrameTxRate(struct rtllib_device *ieee);
+extern void rtllib_sta_ps_send_null_frame(struct rtllib_device *ieee, short pwr);
+extern void rtllib_sta_wakeup(struct rtllib_device *ieee, short nl);
+extern void rtllib_sta_ps_send_pspoll_frame(struct rtllib_device *ieee);
+extern void rtllib_check_all_nets(struct rtllib_device *ieee);
+extern void rtllib_start_protocol(struct rtllib_device *ieee);
+extern void rtllib_stop_protocol(struct rtllib_device *ieee, u8 shutdown);
+#ifdef _RTL8192_EXT_PATCH_
+extern void rtllib_send_probe_requests(struct rtllib_device *ieee, u8 is_mesh);
+#else
+extern void rtllib_send_probe_requests(struct rtllib_device *ieee);
+#endif
+#ifdef _RTL8192_EXT_PATCH_
+extern void rtllib_softmac_start_protocol(struct rtllib_device *ieee,u8 mesh_flag);
+extern void rtllib_softmac_stop_protocol(struct rtllib_device *ieee, u8 mesh_flag, u8 shutdown);
+extern void rtllib_start_mesh_protocol(struct rtllib_device *ieee);
+extern void rtllib_stop_mesh_protocol(struct rtllib_device *ieee);
+#else
+extern void rtllib_softmac_start_protocol(struct rtllib_device *ieee);
+extern void rtllib_softmac_stop_protocol(struct rtllib_device *ieee, u8 shutdown);
+#endif
+extern void rtllib_reset_queue(struct rtllib_device *ieee);
+extern void rtllib_wake_queue(struct rtllib_device *ieee);
+extern void rtllib_stop_queue(struct rtllib_device *ieee);
+extern struct sk_buff *rtllib_get_beacon(struct rtllib_device *ieee);
+extern void rtllib_start_send_beacons(struct rtllib_device *ieee);
+extern void rtllib_stop_send_beacons(struct rtllib_device *ieee);
+#ifdef _RTL8192_EXT_PATCH_
+extern int rtllib_wpa_supplicant_ioctl(struct rtllib_device *ieee, struct iw_point *p, u8 is_mesh);
+#else
+extern int rtllib_wpa_supplicant_ioctl(struct rtllib_device *ieee, struct iw_point *p);
+#endif
+extern void notify_wx_assoc_event(struct rtllib_device *ieee);
+extern void rtllib_ps_tx_ack(struct rtllib_device *ieee, short success);
+
+extern void softmac_mgmt_xmit(struct sk_buff *skb, struct rtllib_device *ieee);
+extern u16 rtllib_query_seqnum(struct rtllib_device*ieee, struct sk_buff* skb, u8* dst);
+extern u8 rtllib_ap_sec_type(struct rtllib_device *ieee);
+
+#ifdef _RTL8192_EXT_PATCH_
+extern void rtllib_rx_auth_rq(struct rtllib_device *ieee, struct sk_buff *skb);
+extern void rtllib_resp_to_auth(struct rtllib_device *ieee, int s, u8* dest);
+extern void rtllib_associate_step1(struct rtllib_device *ieee,u8 * addr);
+extern bool rtllib_ext_prepare_to_joinmesh(struct rtllib_device *ieee, struct rtllib_network *pstat);
+extern u8 HTFilterMCSRate( struct rtllib_device* ieee, u8* pSupportMCS, u8* pOperateMCS);
+extern void HTUseDefaultSetting(struct rtllib_device* ieee);
+extern void rtllib_start_scan(struct rtllib_device *ieee);
+extern struct sk_buff* rtllib_ext_probe_resp_by_net(struct rtllib_device *ieee, u8 *dest, struct rtllib_network *net);
+extern int rtllib_network_init(struct rtllib_device *ieee, struct rtllib_probe_response *beacon, struct rtllib_network *network, struct rtllib_rx_stats *stats);
+extern struct rtllib_txb *rtllib_alloc_txb(int nr_frags, int txb_size, int gfp_mask);
+extern void rtllib_ext_send_11s_beacon(struct rtllib_device *ieee);
+#endif
+
+/* rtllib_crypt_ccmp&tkip&wep.c */
+extern void rtllib_tkip_null(void);
+extern void rtllib_wep_null(void);
+extern void rtllib_ccmp_null(void);
+
+/* rtllib_softmac_wx.c */
+
+extern int rtllib_wx_get_wap(struct rtllib_device *ieee, 
+                           struct iw_request_info *info, 
+                           union iwreq_data *wrqu, char *ext);
+                           
+extern int rtllib_wx_set_wap(struct rtllib_device *ieee,
+                        struct iw_request_info *info,
+                        union iwreq_data *awrq,
+                        char *extra);
+                        
+extern int rtllib_wx_get_essid(struct rtllib_device *ieee, struct iw_request_info *a,union iwreq_data *wrqu,char *b);
+
+extern int rtllib_wx_set_rate(struct rtllib_device *ieee, 
+                            struct iw_request_info *info,
+                            union iwreq_data *wrqu, char *extra);
+                            
+extern int rtllib_wx_get_rate(struct rtllib_device *ieee, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra);
+                            
+extern int rtllib_wx_set_mode(struct rtllib_device *ieee, struct iw_request_info *a,
+                            union iwreq_data *wrqu, char *b);
+                            
+extern int rtllib_wx_set_scan(struct rtllib_device *ieee, struct iw_request_info *a,
+                            union iwreq_data *wrqu, char *b);
+                            
+extern int rtllib_wx_set_essid(struct rtllib_device *ieee, 
+                             struct iw_request_info *a,
+                             union iwreq_data *wrqu, char *extra);
+                             
+extern int rtllib_wx_get_mode(struct rtllib_device *ieee, struct iw_request_info *a,
+                            union iwreq_data *wrqu, char *b);
+
+extern int rtllib_wx_set_freq(struct rtllib_device *ieee, struct iw_request_info *a,
+                            union iwreq_data *wrqu, char *b);
+
+#ifdef _RTL8192_EXT_PATCH_
+extern int rtllib_wx_get_freq(struct rtllib_device *ieee, struct iw_request_info *a,
+                            union iwreq_data *wrqu, char *b, u8 is_mesh);
+#else
+extern int rtllib_wx_get_freq(struct rtllib_device *ieee, struct iw_request_info *a,
+                            union iwreq_data *wrqu, char *b);
+#endif
+extern void rtllib_wx_sync_scan_wq(void *data);
+
+extern int rtllib_wx_set_rawtx(struct rtllib_device *ieee, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra);
+                              
+extern int rtllib_wx_get_name(struct rtllib_device *ieee, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra);
+
+extern int rtllib_wx_set_power(struct rtllib_device *ieee,
+                                struct iw_request_info *info,
+                                union iwreq_data *wrqu, char *extra);
+
+extern int rtllib_wx_get_power(struct rtllib_device *ieee,
+                                struct iw_request_info *info,
+                                union iwreq_data *wrqu, char *extra);
+
+extern int rtllib_wx_set_rts(struct rtllib_device *ieee, 
+                            struct iw_request_info *info,
+                            union iwreq_data *wrqu, char *extra);
+
+extern int rtllib_wx_get_rts(struct rtllib_device *ieee, 
+                            struct iw_request_info *info,
+                            union iwreq_data *wrqu, char *extra);
+#ifdef _RTL8192_EXT_PATCH_
+extern void rtllib_sta_ps_send_null_frame(struct rtllib_device *ieee, short pwr);
+#endif
+#define MAX_RECEIVE_BUFFER_SIZE 9100  
+extern void HTDebugHTCapability(u8* CapIE, u8* TitleString );
+extern void HTDebugHTInfo(u8*  InfoIE, u8* TitleString);
+
+void HTSetConnectBwMode(struct rtllib_device* ieee, HT_CHANNEL_WIDTH Bandwidth, HT_EXTCHNL_OFFSET    Offset);
+extern void HTUpdateDefaultSetting(struct rtllib_device* ieee);
+#ifdef _RTL8192_EXT_PATCH_
+extern void HTConstructCapabilityElement(struct rtllib_device* ieee, u8* posHTCap, u8* len, u8 isEncrypt, u8 bIsBcn);
+#else
+extern void HTConstructCapabilityElement(struct rtllib_device* ieee, u8* posHTCap, u8* len, u8 isEncrypt);
+#endif
+extern void HTConstructInfoElement(struct rtllib_device* ieee, u8* posHTInfo, u8* len, u8 isEncrypt);
+extern void HTConstructRT2RTAggElement(struct rtllib_device* ieee, u8* posRT2RTAgg, u8* len);
+extern void HTOnAssocRsp(struct rtllib_device *ieee);
+extern void HTInitializeHTInfo(struct rtllib_device* ieee);
+extern void HTInitializeBssDesc(PBSS_HT pBssHT);
+extern void HTResetSelfAndSavePeerSetting(struct rtllib_device* ieee, struct rtllib_network * pNetwork);
+extern void HTUpdateSelfAndPeerSetting(struct rtllib_device* ieee,   struct rtllib_network * pNetwork);
+extern u8 HTGetHighestMCSRate(struct rtllib_device* ieee, u8* pMCSRateSet, u8* pMCSFilter);
+extern u8 MCS_FILTER_ALL[];
+extern u16 MCS_DATA_RATE[2][2][77] ;
+extern u8 HTCCheck(struct rtllib_device* ieee, u8*   pFrame);
+extern void HTResetIOTSetting(PRT_HIGH_THROUGHPUT  pHTInfo);
+extern bool IsHTHalfNmodeAPs(struct rtllib_device* ieee);
+extern u16 HTHalfMcsToDataRate(struct rtllib_device* ieee,  u8      nMcsRate);
+extern u16 HTMcsToDataRate( struct rtllib_device* ieee, u8 nMcsRate);
+extern u16  TxCountToDataRate( struct rtllib_device* ieee, u8 nDataRate);
+extern int rtllib_rx_ADDBAReq( struct rtllib_device* ieee, struct sk_buff *skb);
+extern int rtllib_rx_ADDBARsp( struct rtllib_device* ieee, struct sk_buff *skb);
+extern int rtllib_rx_DELBA(struct rtllib_device* ieee,struct sk_buff *skb);
+extern void TsInitAddBA( struct rtllib_device* ieee, PTX_TS_RECORD   pTS, u8 Policy, u8 bOverwritePending);
+extern void TsInitDelBA( struct rtllib_device* ieee, PTS_COMMON_INFO pTsCommonInfo, TR_SELECT TxRxSelect);
+extern void BaSetupTimeOut(unsigned long data);
+extern void TxBaInactTimeout(unsigned long data);
+extern void RxBaInactTimeout(unsigned long data);
+extern void ResetBaEntry( PBA_RECORD pBA);
+extern bool GetTs(
+        struct rtllib_device*        ieee,
+        PTS_COMMON_INFO                 *ppTS,
+        u8*                             Addr,
+        u8                              TID,
+        TR_SELECT                       TxRxSelect,  
+        bool                            bAddNewTs
+        );
+extern void TSInitialize(struct rtllib_device *ieee);
+extern  void TsStartAddBaProcess(struct rtllib_device* ieee, PTX_TS_RECORD   pTxTS);                                                
+extern void RemovePeerTS(struct rtllib_device* ieee, u8* Addr);
+extern void RemoveAllTS(struct rtllib_device* ieee);
+#ifdef _RTL8192_EXT_PATCH_
+extern void ResetAdmitTRStream(struct rtllib_device *ieee, u8 *Addr);
+#endif
+void rtllib_softmac_scan_syncro(struct rtllib_device *ieee, u8 is_mesh);
+
+extern const long rtllib_wlan_frequencies[];
+
+extern inline void rtllib_increment_scans(struct rtllib_device *ieee)
+{
+       ieee->scans++;
+}
+
+extern inline int rtllib_get_scans(struct rtllib_device *ieee)
+{
+       return ieee->scans;
+}
+
+static inline const char *escape_essid(const char *essid, u8 essid_len) {
+       static char escaped[IW_ESSID_MAX_SIZE * 2 + 1];
+       const char *s = essid;
+       char *d = escaped;
+
+       if (rtllib_is_empty_essid(essid, essid_len)) {
+               memcpy(escaped, "<hidden>", sizeof("<hidden>"));
+               return escaped;
+       }
+
+       essid_len = min(essid_len, (u8)IW_ESSID_MAX_SIZE);
+       while (essid_len--) {
+               if (*s == '\0') {
+                       *d++ = '\\';
+                       *d++ = '0';
+                       s++;
+               } else {
+                       *d++ = *s++;
+               }
+       }
+       *d = '\0';
+       return escaped;
+}
+
+#define CONVERT_RATE(_ieee, _MGN_RATE) (_MGN_RATE<MGN_MCS0)?(_MGN_RATE):(HTMcsToDataRate(_ieee, (u8)_MGN_RATE))
+
+#ifdef BUILT_IN_RTLLIB
+/* fun with the built-in rtllib stack... */
+int rtllib_init(void);
+void rtllib_exit(void);
+int rtllib_crypto_init(void);
+void rtllib_crypto_deinit(void);
+int rtllib_crypto_tkip_init(void);
+void rtllib_crypto_tkip_exit(void);
+int rtllib_crypto_ccmp_init(void);
+void rtllib_crypto_ccmp_exit(void);
+int rtllib_crypto_wep_init(void);
+void rtllib_crypto_wep_exit(void);
+#endif
+/* For the function is more related to hardware setting, it's better to use the  
+ * ieee handler to refer to it.
+ */
+void rtllib_update_active_chan_map(struct rtllib_device *ieee);
+ void
+rtllib_FlushRxTsPendingPkts(struct rtllib_device *ieee, PRX_TS_RECORD pTS);
+extern short check_nic_enough_desc(struct net_device *dev, int queue_index);
+extern int rtllib_data_xmit(struct sk_buff *skb, struct net_device *dev);
+extern int rtllib_parse_info_param(struct rtllib_device *ieee,
+               struct rtllib_info_element *info_element, 
+               u16 length,
+               struct rtllib_network *network,
+               struct rtllib_rx_stats *stats);
+
+void rtllib_indicate_packets(struct rtllib_device *ieee, struct rtllib_rxb** prxbIndicateArray,u8  index);
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+extern void IbssAgeFunction(struct rtllib_device *ieee);
+extern struct sta_info *GetStaInfo(struct rtllib_device *ieee, u8 *addr);
+extern void DelStaInfoList(struct rtllib_device *ieee);
+extern void DelStaInfo(struct rtllib_device *ieee, u8 *addr);
+#endif
+extern u8 HTFilterMCSRate( struct rtllib_device* ieee, u8* pSupportMCS, u8* pOperateMCS);
+extern void HTUseDefaultSetting(struct rtllib_device* ieee);
+#define RT_ASOC_RETRY_LIMIT    5
+u8 MgntQuery_TxRateExcludeCCKRates(struct rtllib_device *ieee);
+#ifdef _RTL8192_EXT_PATCH_
+extern unsigned int rtllib_MFIE_rate_len(struct rtllib_device *ieee);
+extern void rtllib_MFIE_Brate(struct rtllib_device *ieee, u8 **tag_p);
+extern void rtllib_MFIE_Grate(struct rtllib_device *ieee, u8 **tag_p);
+extern void rtllib_WMM_Info(struct rtllib_device *ieee, u8 **tag_p);
+#endif
+#ifdef THOMAS_TURBO
+extern void rtllib_TURBO_Info(struct rtllib_device *ieee, u8 **tag_p);
+#endif
+#ifndef ENABLE_LOCK_DEBUG
+#define SPIN_LOCK_IEEE(plock) spin_lock_irqsave((plock), flags)        
+#define SPIN_UNLOCK_IEEE(plock) spin_unlock_irqrestore((plock), flags)
+#define SPIN_LOCK_IEEE_REORDER(plock) spin_lock_irqsave((plock), flags)
+#define SPIN_UNLOCK_IEEE_REORDER(plock) spin_unlock_irqrestore((plock), flags)
+#define SPIN_LOCK_IEEE_WPAX(plock) spin_lock_irqsave((plock), flags)
+#define SPIN_UNLOCK_IEEE_WPAX(plock) spin_unlock_irqrestore((plock), flags)
+#define SPIN_LOCK_IEEE_MGNTTX(plock) spin_lock_irqsave((plock), flags)
+#define SPIN_UNLOCK_IEEE_MGNTTX(plock) spin_unlock_irqrestore((plock), flags)
+#define SPIN_LOCK_IEEE_BCN(plock) spin_lock_irqsave((plock), flags)
+#define SPIN_UNLOCK_IEEE_BCN(plock) spin_unlock_irqrestore((plock), flags)
+#define SPIN_LOCK_MSH_STAINFO(plock) spin_lock_irqsave((plock), flags)
+#define SPIN_UNLOCK_MSH_STAINFO(plock) spin_unlock_irqrestore((plock), flags)
+#define SPIN_LOCK_MSH_PREQ(plock) spin_lock_irqsave((plock), flags)
+#define SPIN_UNLOCK_MSH_PREQ(plock) spin_unlock_irqrestore((plock), flags)
+#define SPIN_LOCK_MSH_QUEUE(plock) spin_lock_irqsave((plock), flags)
+#define SPIN_UNLOCK_MSH_QUEUE(plock) spin_unlock_irqrestore((plock), flags)
+#define SPIN_LOCK_PRIV_RFPS(plock) spin_lock_irqsave((plock), flags)
+#define SPIN_UNLOCK_PRIV_RFPS(plock) spin_unlock_irqrestore((plock), flags)
+#define SPIN_LOCK_PRIV_IRQTH(plock) spin_lock_irqsave((plock), flags)
+#define SPIN_UNLOCK_PRIV_IRQTH(plock) spin_unlock_irqrestore((plock), flags)
+#define SPIN_LOCK_PRIV_TX(plock) spin_lock_irqsave((plock), flags)
+#define SPIN_UNLOCK_PRIV_TX(plock) spin_unlock_irqrestore((plock), flags)
+#define SPIN_LOCK_PRIV_D3(plock) spin_lock_irqsave((plock), flags)
+#define SPIN_UNLOCK_PRIV_D3(plock) spin_unlock_irqrestore((plock), flags)
+#define SPIN_LOCK_PRIV_RF(plock) spin_lock_irqsave((plock), flags)
+#define SPIN_UNLOCK_PRIV_RF(plock) spin_unlock_irqrestore((plock), flags)
+#define SPIN_LOCK_PRIV_PS(plock) spin_lock_irqsave((plock), flags)
+#define SPIN_UNLOCK_PRIV_PS(plock) spin_unlock_irqrestore((plock), flags)
+#define SEM_DOWN_IEEE_WX(psem) down(psem)
+#define SEM_UP_IEEE_WX(psem) up(psem)
+#define SEM_DOWN_IEEE_SCAN(psem) down(psem)
+#define SEM_UP_IEEE_SCAN(psem) up(psem)
+#define SEM_DOWN_IEEE_IPS(psem) down(psem)
+#define SEM_UP_IEEE_IPS(psem) up(psem)
+#define SEM_DOWN_PRIV_WX(psem) down(psem)
+#define SEM_UP_PRIV_WX(psem) up(psem)
+#define SEM_DOWN_PRIV_RF(psem) down(psem)
+#define SEM_UP_PRIV_RF(psem) up(psem)
+#define MUTEX_LOCK_PRIV(pmutex) mutex_lock(pmutex)
+#define MUTEX_UNLOCK_PRIV(pmutex) mutex_unlock(pmutex)
+#endif
+#ifdef RTL8192S_WAPI_SUPPORT
+extern void WapiInit(struct rtllib_device *ieee);
+extern void WapiExit(struct rtllib_device *ieee);
+extern int WAPI_CreateEvent_Send(struct rtllib_device *ieee, u8 EventId, u8 *MacAddr, u8 *Buff, u16 BufLen);
+extern void WapiCreateAppEventAndSend(
+       struct rtllib_device *ieee,
+       u8              *pbuffer,
+       u16             buf_len,
+       u8              *DestAddr,
+       u8              bUpdateBK,
+       u8              bUpdateUSK,
+       u8              bUpdateMSK,
+       u8              RcvPktType,
+       u8              bDisconnect);
+extern void WapiReturnAllStaInfo(struct rtllib_device *ieee);
+extern void WapiReturnOneStaInfo(struct rtllib_device *ieee, u8 *MacAddr, u8 from_app);
+extern void WapiFreeAllStaInfo(struct rtllib_device *ieee);
+extern u8 SecIsWAIPacket(struct rtllib_device* ieee,struct sk_buff *skb);
+extern void WapiHandleRecvPacket(struct rtllib_device* ieee,struct sk_buff *skb,u8 WaiPkt);
+extern void WapiSetIE(struct rtllib_device *ieee);
+extern u32 WapiComparePN(u8 *PN1, u8 *PN2);
+extern u8 WapiIncreasePN(u8 *PN, u8 AddCount);
+extern void WapiGetLastRxUnicastPNForQoSData(
+       u8                      UserPriority,
+       PRT_WAPI_STA_INFO    pWapiStaInfo,
+       u8 *PNOut);
+extern void WapiSetLastRxUnicastPNForQoSData(
+       u8              UserPriority,
+       u8           *PNIn,
+       PRT_WAPI_STA_INFO    pWapiStaInfo);
+extern u8 WapiCheckPnInSwDecrypt(
+       struct rtllib_device *ieee,
+       struct sk_buff *pskb);
+extern u8 WapiCheckDropForRxReorderCase(
+       struct rtllib_device *ieee,
+       struct rtllib_rxb* prxb);
+extern int SecSMS4HeaderFillIV(struct rtllib_device *ieee, struct sk_buff *pskb);
+extern void SecSWSMS4Encryption(
+       struct rtllib_device *ieee,
+       struct sk_buff *pskb);
+extern u8 SecSWSMS4Decryption(
+       struct rtllib_device *ieee,
+       struct sk_buff *pskb,
+       struct rtllib_rx_stats *rx_stats);
+
+extern int WapiSendWaiPacket(struct rtllib_device *ieee, struct sk_buff *pskb);
+extern void ieee80211_disassociate_from_app(struct rtllib_device *ieee);
+extern void ConstructWapiIEForInit(struct rtllib_device* ieee);
+extern void wapi_test_init(struct rtllib_device *ieee);
+#endif
+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");
+}
+#endif /* RTLLIB_H */
diff --git a/ubuntu/rtl8192se/rtllib/rtllib_crypt.c b/ubuntu/rtl8192se/rtllib/rtllib_crypt.c
new file mode 100644 (file)
index 0000000..fcd26cc
--- /dev/null
@@ -0,0 +1,268 @@
+/*
+ * Host AP crypto routines
+ *
+ * Copyright (c) 2002-2003, Jouni Malinen <jkmaline@cc.hut.fi>
+ * Portions Copyright (C) 2004, Intel Corporation <jketreno@linux.intel.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation. See README and COPYING for
+ * more details.
+ *
+ */
+
+#include <linux/version.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/slab.h>
+#include <asm/string.h>
+#include <asm/errno.h>
+
+#include "rtllib.h"
+
+#ifndef BUILT_IN_RTLLIB
+MODULE_AUTHOR("Jouni Malinen");
+MODULE_DESCRIPTION("HostAP crypto");
+MODULE_LICENSE("GPL");
+#endif
+
+struct rtllib_crypto_alg {
+       struct list_head list;
+       struct rtllib_crypto_ops *ops;
+};
+
+
+struct rtllib_crypto {
+       struct list_head algs;
+       spinlock_t lock;
+};
+
+static struct rtllib_crypto *hcrypt;
+
+void rtllib_crypt_deinit_entries(struct rtllib_device *ieee,
+                                          int force)
+{
+       struct list_head *ptr, *n;
+       struct rtllib_crypt_data *entry;
+
+       for (ptr = ieee->crypt_deinit_list.next, n = ptr->next;
+            ptr != &ieee->crypt_deinit_list; ptr = n, n = ptr->next) {
+               entry = list_entry(ptr, struct rtllib_crypt_data, list);
+
+               if (atomic_read(&entry->refcnt) != 0 && !force)
+                       continue;
+
+               list_del(ptr);
+
+               if (entry->ops) {
+                       entry->ops->deinit(entry->priv);
+#ifndef BUILT_IN_RTLLIB
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)                
+                       module_put(entry->ops->owner);
+#else
+                       __MOD_DEC_USE_COUNT(entry->ops->owner); 
+#endif                 
+#endif
+               }
+               kfree(entry);
+       }
+}
+
+void rtllib_crypt_deinit_handler(unsigned long data)
+{
+       struct rtllib_device *ieee = (struct rtllib_device *)data;
+       unsigned long flags;
+
+       spin_lock_irqsave(&ieee->lock, flags);
+       rtllib_crypt_deinit_entries(ieee, 0);
+       if (!list_empty(&ieee->crypt_deinit_list)) {
+               printk(KERN_DEBUG "%s: entries remaining in delayed crypt "
+                      "deletion list\n", ieee->dev->name);
+               ieee->crypt_deinit_timer.expires = jiffies + HZ;
+               add_timer(&ieee->crypt_deinit_timer);
+       }
+       spin_unlock_irqrestore(&ieee->lock, flags);
+
+}
+
+void rtllib_crypt_delayed_deinit(struct rtllib_device *ieee,
+                                   struct rtllib_crypt_data **crypt)
+{
+       struct rtllib_crypt_data *tmp;
+       unsigned long flags;
+
+       if (*crypt == NULL)
+               return;
+
+       tmp = *crypt;
+       *crypt = NULL;
+
+       /* must not run ops->deinit() while there may be pending encrypt or
+        * decrypt operations. Use a list of delayed deinits to avoid needing
+        * locking. */
+
+       spin_lock_irqsave(&ieee->lock, flags);
+       list_add(&tmp->list, &ieee->crypt_deinit_list);
+       if (!timer_pending(&ieee->crypt_deinit_timer)) {
+               ieee->crypt_deinit_timer.expires = jiffies + HZ;
+               add_timer(&ieee->crypt_deinit_timer);
+       }
+       spin_unlock_irqrestore(&ieee->lock, flags);
+}
+
+int rtllib_register_crypto_ops(struct rtllib_crypto_ops *ops)
+{
+       unsigned long flags;
+       struct rtllib_crypto_alg *alg;
+
+       if (hcrypt == NULL)
+               return -1;
+
+       alg = kmalloc(sizeof(*alg), GFP_KERNEL);
+       if (alg == NULL)
+               return -ENOMEM;
+
+       memset(alg, 0, sizeof(*alg));
+       alg->ops = ops;
+
+       spin_lock_irqsave(&hcrypt->lock, flags);
+       list_add(&alg->list, &hcrypt->algs);
+       spin_unlock_irqrestore(&hcrypt->lock, flags);
+
+       printk(KERN_DEBUG "rtllib_crypt: registered algorithm '%s'\n",
+              ops->name);
+
+       return 0;
+}
+
+int rtllib_unregister_crypto_ops(struct rtllib_crypto_ops *ops)
+{
+       unsigned long flags;
+       struct list_head *ptr;
+       struct rtllib_crypto_alg *del_alg = NULL;
+
+       if (hcrypt == NULL)
+               return -1;
+
+       spin_lock_irqsave(&hcrypt->lock, flags);
+       for (ptr = hcrypt->algs.next; ptr != &hcrypt->algs; ptr = ptr->next) {
+               struct rtllib_crypto_alg *alg =
+                       (struct rtllib_crypto_alg *) ptr;
+               if (alg->ops == ops) {
+                       list_del(&alg->list);
+                       del_alg = alg;
+                       break;
+               }
+       }
+       spin_unlock_irqrestore(&hcrypt->lock, flags);
+
+       if (del_alg) {
+               printk(KERN_DEBUG "rtllib_crypt: unregistered algorithm "
+                      "'%s'\n", ops->name);
+               kfree(del_alg);
+       }
+
+       return del_alg ? 0 : -1;
+}
+
+
+struct rtllib_crypto_ops * rtllib_get_crypto_ops(const char *name)
+{
+       unsigned long flags;
+       struct list_head *ptr;
+       struct rtllib_crypto_alg *found_alg = NULL;
+
+       if (hcrypt == NULL)
+               return NULL;
+
+       spin_lock_irqsave(&hcrypt->lock, flags);
+       for (ptr = hcrypt->algs.next; ptr != &hcrypt->algs; ptr = ptr->next) {
+               struct rtllib_crypto_alg *alg =
+                       (struct rtllib_crypto_alg *) ptr;
+               if (strcmp(alg->ops->name, name) == 0) {
+                       found_alg = alg;
+                       break;
+               }
+       }
+       spin_unlock_irqrestore(&hcrypt->lock, flags);
+
+       if (found_alg)
+               return found_alg->ops;
+       else
+               return NULL;
+}
+
+
+static void * rtllib_crypt_null_init(int keyidx) { return (void *) 1; }
+static void rtllib_crypt_null_deinit(void *priv) {}
+
+static struct rtllib_crypto_ops rtllib_crypt_null = {
+       .name                   = "NULL",
+       .init                   = rtllib_crypt_null_init,
+       .deinit                 = rtllib_crypt_null_deinit,
+       .encrypt_mpdu           = NULL,
+       .decrypt_mpdu           = NULL,
+       .encrypt_msdu           = NULL,
+       .decrypt_msdu           = NULL,
+       .set_key                = NULL,
+       .get_key                = NULL,
+       .extra_prefix_len       = 0,
+       .extra_postfix_len      = 0,
+       .owner                  = THIS_MODULE,
+};
+
+
+int __init rtllib_crypto_init(void)
+{
+       int ret = -ENOMEM;
+
+       hcrypt = kmalloc(sizeof(*hcrypt), GFP_KERNEL);
+       if (!hcrypt)
+               goto out;
+
+       memset(hcrypt, 0, sizeof(*hcrypt));
+       INIT_LIST_HEAD(&hcrypt->algs);
+       spin_lock_init(&hcrypt->lock);
+
+       ret = rtllib_register_crypto_ops(&rtllib_crypt_null);
+       if (ret < 0) {
+               kfree(hcrypt);
+               hcrypt = NULL;
+       }
+out:
+       return ret;
+}
+
+
+void __exit rtllib_crypto_deinit(void)
+{
+       struct list_head *ptr, *n;
+
+       if (hcrypt == NULL)
+               return;
+
+       for (ptr = hcrypt->algs.next, n = ptr->next; ptr != &hcrypt->algs;
+            ptr = n, n = ptr->next) {
+               struct rtllib_crypto_alg *alg =
+                       (struct rtllib_crypto_alg *) ptr;
+               list_del(ptr);
+               printk(KERN_DEBUG "rtllib_crypt: unregistered algorithm "
+                      "'%s' (deinit)\n", alg->ops->name);
+               kfree(alg);
+       }
+
+       kfree(hcrypt);
+}
+
+#ifndef BUILT_IN_RTLLIB
+EXPORT_SYMBOL_RSL(rtllib_crypt_deinit_entries);
+EXPORT_SYMBOL_RSL(rtllib_crypt_deinit_handler);
+EXPORT_SYMBOL_RSL(rtllib_crypt_delayed_deinit);
+
+EXPORT_SYMBOL_RSL(rtllib_register_crypto_ops);
+EXPORT_SYMBOL_RSL(rtllib_unregister_crypto_ops);
+EXPORT_SYMBOL_RSL(rtllib_get_crypto_ops);
+
+module_init(rtllib_crypto_init);
+module_exit(rtllib_crypto_deinit);
+#endif
diff --git a/ubuntu/rtl8192se/rtllib/rtllib_crypt.h b/ubuntu/rtl8192se/rtllib/rtllib_crypt.h
new file mode 100644 (file)
index 0000000..5f8990c
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * Original code based on Host AP (software wireless LAN access point) driver
+ * for Intersil Prism2/2.5/3.
+ *
+ * Copyright (c) 2001-2002, SSH Communications Security Corp and Jouni Malinen
+ * <jkmaline@cc.hut.fi>
+ * Copyright (c) 2002-2003, Jouni Malinen <jkmaline@cc.hut.fi>
+ *
+ * Adaption to a generic IEEE 802.11 stack by James Ketrenos
+ * <jketreno@linux.intel.com>
+ *
+ * Copyright (c) 2004, Intel Corporation
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation. See README and COPYING for
+ * more details.
+ */
+
+/*
+ * This file defines the interface to the rtllib crypto module.
+ */
+#ifndef RTLLIB_CRYPT_H
+#define RTLLIB_CRYPT_H
+
+#include <linux/skbuff.h>
+
+struct rtllib_crypto_ops {
+       const char *name;
+
+       /* init new crypto context (e.g., allocate private data space,
+        * select IV, etc.); returns NULL on failure or pointer to allocated
+        * private data on success */
+       void * (*init)(int keyidx);
+
+       /* deinitialize crypto context and free allocated private data */
+       void (*deinit)(void *priv);
+
+       /* encrypt/decrypt return < 0 on error or >= 0 on success. The return
+        * value from decrypt_mpdu is passed as the keyidx value for
+        * decrypt_msdu. skb must have enough head and tail room for the
+        * encryption; if not, error will be returned; these functions are
+        * called for all MPDUs (i.e., fragments).
+        */
+       int (*encrypt_mpdu)(struct sk_buff *skb, int hdr_len, void *priv);
+       int (*decrypt_mpdu)(struct sk_buff *skb, int hdr_len, void *priv);
+
+       /* These functions are called for full MSDUs, i.e. full frames.
+        * These can be NULL if full MSDU operations are not needed. */
+       int (*encrypt_msdu)(struct sk_buff *skb, int hdr_len, void *priv);
+       int (*decrypt_msdu)(struct sk_buff *skb, int keyidx, int hdr_len,
+                           void *priv, struct rtllib_device* ieee);
+
+       int (*set_key)(void *key, int len, u8 *seq, void *priv);
+       int (*get_key)(void *key, int len, u8 *seq, void *priv);
+
+       /* procfs handler for printing out key information and possible
+        * statistics */
+       char * (*print_stats)(char *p, void *priv);
+
+       /* maximum number of bytes added by encryption; encrypt buf is
+        * allocated with extra_prefix_len bytes, copy of in_buf, and
+        * extra_postfix_len; encrypt need not use all this space, but
+        * the result must start at the beginning of the buffer and correct
+        * length must be returned */
+       int extra_prefix_len, extra_postfix_len;
+
+       struct module *owner;
+};
+
+struct rtllib_crypt_data {
+       struct list_head list; /* delayed deletion list */
+       struct rtllib_crypto_ops *ops;
+       void *priv;
+       atomic_t refcnt;
+};
+
+int rtllib_register_crypto_ops(struct rtllib_crypto_ops *ops);
+int rtllib_unregister_crypto_ops(struct rtllib_crypto_ops *ops);
+struct rtllib_crypto_ops * rtllib_get_crypto_ops(const char *name);
+void rtllib_crypt_deinit_entries(struct rtllib_device *, int);
+void rtllib_crypt_deinit_handler(unsigned long);
+void rtllib_crypt_delayed_deinit(struct rtllib_device *ieee,
+                                   struct rtllib_crypt_data **crypt);
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
+#define offset_in_page(p) ((unsigned long)(p) & ~PAGE_MASK)
+#endif
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,31))
+#define crypto_alloc_tfm crypto_alloc_tfm_rsl
+#define crypto_free_tfm crypto_free_tfm_rsl
+#endif
+
+#endif
diff --git a/ubuntu/rtl8192se/rtllib/rtllib_crypt_ccmp.c b/ubuntu/rtl8192se/rtllib/rtllib_crypt_ccmp.c
new file mode 100644 (file)
index 0000000..cca67b2
--- /dev/null
@@ -0,0 +1,544 @@
+/*
+ * Host AP crypt: host-based CCMP encryption implementation for Host AP driver
+ *
+ * Copyright (c) 2003-2004, Jouni Malinen <jkmaline@cc.hut.fi>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation. See README and COPYING for
+ * more details.
+ */
+
+#include <linux/version.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/slab.h>
+#include <linux/random.h>
+#include <linux/skbuff.h>
+#include <linux/netdevice.h>
+#include <linux/if_ether.h>
+#include <linux/if_arp.h>
+#include <asm/string.h>
+#include <linux/wireless.h>
+#ifdef _RTL8192_EXT_PATCH_     
+#include <linux/etherdevice.h>
+#endif
+#include "rtllib.h"
+
+#if defined(BUILT_IN_CRYPTO) || (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
+#include "rtl_crypto.h"
+#else
+#include <linux/crypto.h>
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) 
+    #include <asm/scatterlist.h>
+#else
+    #include <linux/scatterlist.h>
+#endif
+
+#ifndef BUILT_IN_RTLLIB
+MODULE_AUTHOR("Jouni Malinen");
+MODULE_DESCRIPTION("Host AP crypt: CCMP");
+MODULE_LICENSE("GPL");
+#endif
+
+
+#define AES_BLOCK_LEN 16
+#define CCMP_HDR_LEN 8
+#define CCMP_MIC_LEN 8
+#define CCMP_TK_LEN 16
+#define CCMP_PN_LEN 6
+
+struct rtllib_ccmp_data {
+       u8 key[CCMP_TK_LEN];
+       int key_set;
+
+       u8 tx_pn[CCMP_PN_LEN];
+       u8 rx_pn[CCMP_PN_LEN];
+
+       u32 dot11RSNAStatsCCMPFormatErrors;
+       u32 dot11RSNAStatsCCMPReplays;
+       u32 dot11RSNAStatsCCMPDecryptErrors;
+
+       int key_idx;
+
+       struct crypto_tfm *tfm;
+
+       /* scratch buffers for virt_to_page() (crypto API) */
+       u8 tx_b0[AES_BLOCK_LEN], tx_b[AES_BLOCK_LEN],
+               tx_e[AES_BLOCK_LEN], tx_s0[AES_BLOCK_LEN];
+       u8 rx_b0[AES_BLOCK_LEN], rx_b[AES_BLOCK_LEN], rx_a[AES_BLOCK_LEN];
+};
+
+void rtllib_ccmp_aes_encrypt(struct crypto_tfm *tfm,
+                            const u8 pt[16], u8 ct[16])
+{
+#if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) )
+       struct scatterlist src, dst;
+
+#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
+       src.page = virt_to_page(pt);
+       src.offset = offset_in_page(pt);
+       src.length = AES_BLOCK_LEN;
+
+       dst.page = virt_to_page(ct);
+       dst.offset = offset_in_page(ct);
+       dst.length = AES_BLOCK_LEN;
+
+#else
+       sg_init_one(&src, pt, AES_BLOCK_LEN);
+       sg_init_one(&dst, ct, AES_BLOCK_LEN);
+#endif
+
+       crypto_cipher_encrypt(tfm, &dst, &src, AES_BLOCK_LEN);
+#else
+       crypto_cipher_encrypt_one((void*)tfm, ct, pt);
+#endif
+}
+
+static void * rtllib_ccmp_init(int key_idx)
+{
+       struct rtllib_ccmp_data *priv;
+
+       priv = kmalloc(sizeof(*priv), GFP_ATOMIC);
+       if (priv == NULL)
+               goto fail;
+       memset(priv, 0, sizeof(*priv));
+       priv->key_idx = key_idx;
+
+#if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) )
+       priv->tfm = crypto_alloc_tfm("aes", 0);
+       if (priv->tfm == NULL) {
+               printk(KERN_DEBUG "rtllib_crypt_ccmp: could not allocate "
+                      "crypto API aes\n");
+               goto fail;
+       }
+       #else
+       priv->tfm = (void*)crypto_alloc_cipher("aes", 0, CRYPTO_ALG_ASYNC);
+       if (IS_ERR(priv->tfm)) {
+               printk(KERN_DEBUG "rtllib_crypt_ccmp: could not allocate "
+                      "crypto API aes\n");
+               priv->tfm = NULL;
+               goto fail;
+       }
+       #endif
+       return priv;
+
+fail:
+       if (priv) {
+               if (priv->tfm)
+                       #if defined(BUILT_IN_CRYPTO) || (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21))
+                       crypto_free_tfm(priv->tfm);
+                    #else
+                       crypto_free_cipher((void*)priv->tfm);
+                     #endif
+               kfree(priv);
+       }
+
+       return NULL;
+}
+
+
+static void rtllib_ccmp_deinit(void *priv)
+{
+       struct rtllib_ccmp_data *_priv = priv;
+       if (_priv && _priv->tfm)
+#if defined(BUILT_IN_CRYPTO) || (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21))
+               crypto_free_tfm(_priv->tfm);
+#else
+               crypto_free_cipher((void*)_priv->tfm);
+#endif
+       kfree(priv);
+}
+
+
+static inline void xor_block(u8 *b, u8 *a, size_t len)
+{
+       int i;
+       for (i = 0; i < len; i++)
+               b[i] ^= a[i];
+}
+
+
+
+static void ccmp_init_blocks(struct crypto_tfm *tfm,
+                            struct rtllib_hdr_4addr *hdr,
+                            u8 *pn, size_t dlen, u8 *b0, u8 *auth,
+                            u8 *s0)
+{
+       u8 *pos, qc = 0;
+       size_t aad_len;
+       u16 fc;
+       int a4_included, qc_included;
+       u8 aad[2 * AES_BLOCK_LEN];
+
+       fc = le16_to_cpu(hdr->frame_ctl);
+       a4_included = ((fc & (RTLLIB_FCTL_TODS | RTLLIB_FCTL_FROMDS)) ==
+                      (RTLLIB_FCTL_TODS | RTLLIB_FCTL_FROMDS));
+       /*
+       qc_included = ((WLAN_FC_GET_TYPE(fc) == RTLLIB_FTYPE_DATA) &&
+                      (WLAN_FC_GET_STYPE(fc) & 0x08));
+        */                    
+       qc_included = ((WLAN_FC_GET_TYPE(fc) == RTLLIB_FTYPE_DATA) &&
+                      (WLAN_FC_GET_STYPE(fc) & 0x80));
+       aad_len = 22;
+       if (a4_included)
+               aad_len += 6;
+       if (qc_included) {
+               pos = (u8 *) &hdr->addr4;
+               if (a4_included)
+                       pos += 6;
+               qc = *pos & 0x0f;
+               aad_len += 2;
+       }
+       /* CCM Initial Block:
+        * Flag (Include authentication header, M=3 (8-octet MIC),
+        *       L=1 (2-octet Dlen))
+        * Nonce: 0x00 | A2 | PN
+        * Dlen */
+       b0[0] = 0x59;
+       b0[1] = qc;
+       memcpy(b0 + 2, hdr->addr2, ETH_ALEN);
+       memcpy(b0 + 8, pn, CCMP_PN_LEN);
+       b0[14] = (dlen >> 8) & 0xff;
+       b0[15] = dlen & 0xff;
+
+       /* AAD:
+        * FC with bits 4..6 and 11..13 masked to zero; 14 is always one
+        * A1 | A2 | A3
+        * SC with bits 4..15 (seq#) masked to zero
+        * A4 (if present)
+        * QC (if present)
+        */
+       pos = (u8 *) hdr;
+       aad[0] = 0; /* aad_len >> 8 */
+       aad[1] = aad_len & 0xff;
+       aad[2] = pos[0] & 0x8f;
+       aad[3] = pos[1] & 0xc7;
+       memcpy(aad + 4, hdr->addr1, 3 * ETH_ALEN);
+       pos = (u8 *) &hdr->seq_ctl;
+       aad[22] = pos[0] & 0x0f;
+       aad[23] = 0; /* all bits masked */
+       memset(aad + 24, 0, 8);
+       if (a4_included)
+               memcpy(aad + 24, hdr->addr4, ETH_ALEN);
+       if (qc_included) {
+               aad[a4_included ? 30 : 24] = qc;
+               /* rest of QC masked */
+       }
+
+       /* Start with the first block and AAD */
+       rtllib_ccmp_aes_encrypt(tfm, b0, auth);
+       xor_block(auth, aad, AES_BLOCK_LEN);
+       rtllib_ccmp_aes_encrypt(tfm, auth, auth);
+       xor_block(auth, &aad[AES_BLOCK_LEN], AES_BLOCK_LEN);
+       rtllib_ccmp_aes_encrypt(tfm, auth, auth);
+       b0[0] &= 0x07;
+       b0[14] = b0[15] = 0;
+       rtllib_ccmp_aes_encrypt(tfm, b0, s0);
+}
+
+
+
+static int rtllib_ccmp_encrypt(struct sk_buff *skb, int hdr_len, void *priv)
+{
+       struct rtllib_ccmp_data *key = priv;
+       int data_len, i;
+       u8 *pos;
+       struct rtllib_hdr_4addr *hdr;
+       cb_desc *tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE);
+#ifdef _RTL8192_EXT_PATCH_     
+       u8 broadcastaddr[6] = {0xff,0xff,0xff,0xff,0xff,0xff};
+       u8 is_broadcast_data = 0;
+#endif
+       if (skb_headroom(skb) < CCMP_HDR_LEN ||
+           skb_tailroom(skb) < CCMP_MIC_LEN ||
+           skb->len < hdr_len)
+               return -1;
+
+       data_len = skb->len - hdr_len;
+       pos = skb_push(skb, CCMP_HDR_LEN);
+       memmove(pos, pos + CCMP_HDR_LEN, hdr_len);
+       pos += hdr_len;
+
+       i = CCMP_PN_LEN - 1;
+       while (i >= 0) {
+               key->tx_pn[i]++;
+               if (key->tx_pn[i] != 0)
+                       break;
+               i--;
+       }
+
+       *pos++ = key->tx_pn[5];
+       *pos++ = key->tx_pn[4];
+       *pos++ = 0;
+       *pos++ = (key->key_idx << 6) | (1 << 5) /* Ext IV included */;
+       *pos++ = key->tx_pn[3];
+       *pos++ = key->tx_pn[2];
+       *pos++ = key->tx_pn[1];
+       *pos++ = key->tx_pn[0];
+
+
+       hdr = (struct rtllib_hdr_4addr *) skb->data;
+#ifdef _RTL8192_EXT_PATCH_     
+       if(tcb_desc->badhoc == 0){
+               if(memcmp(hdr->addr1,broadcastaddr,6) == 0){
+                       is_broadcast_data = 1;
+                       tcb_desc->bHwSec = 0;
+               }
+               if(is_multicast_ether_addr(hdr->addr1)){
+                       tcb_desc->bHwSec = 0;
+               }
+       }
+#endif
+       if (!tcb_desc->bHwSec)
+       {
+               int blocks, last, len;
+               u8 *mic;
+               u8 *b0 = key->tx_b0;
+               u8 *b = key->tx_b;
+               u8 *e = key->tx_e;
+               u8 *s0 = key->tx_s0;
+
+               mic = skb_put(skb, CCMP_MIC_LEN);
+               
+               ccmp_init_blocks(key->tfm, hdr, key->tx_pn, data_len, b0, b, s0);
+       
+               blocks = (data_len + AES_BLOCK_LEN - 1) / AES_BLOCK_LEN;
+               last = data_len % AES_BLOCK_LEN;
+       
+               for (i = 1; i <= blocks; i++) {
+                       len = (i == blocks && last) ? last : AES_BLOCK_LEN;
+                       /* Authentication */
+                       xor_block(b, pos, len);
+                       rtllib_ccmp_aes_encrypt(key->tfm, b, b);
+                       /* Encryption, with counter */
+                       b0[14] = (i >> 8) & 0xff;
+                       b0[15] = i & 0xff;
+                       rtllib_ccmp_aes_encrypt(key->tfm, b0, e);
+                       xor_block(pos, e, len);
+                       pos += len;
+               }
+       
+               for (i = 0; i < CCMP_MIC_LEN; i++)
+                       mic[i] = b[i] ^ s0[i];
+       }
+       return 0;
+}
+
+
+static int rtllib_ccmp_decrypt(struct sk_buff *skb, int hdr_len, void *priv)
+{
+       struct rtllib_ccmp_data *key = priv;
+       u8 keyidx, *pos;
+       struct rtllib_hdr_4addr *hdr;
+       cb_desc *tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE);
+       u8 pn[6];
+
+       if (skb->len < hdr_len + CCMP_HDR_LEN + CCMP_MIC_LEN) {
+               key->dot11RSNAStatsCCMPFormatErrors++;
+               return -1;
+       }
+
+       hdr = (struct rtllib_hdr_4addr *) skb->data;
+       pos = skb->data + hdr_len;
+       keyidx = pos[3];
+       if (!(keyidx & (1 << 5))) {
+               if (net_ratelimit()) {
+                       printk(KERN_DEBUG "CCMP: received packet without ExtIV"
+                              " flag from " MAC_FMT "\n", MAC_ARG(hdr->addr2));
+               }
+               key->dot11RSNAStatsCCMPFormatErrors++;
+               return -2;
+       }
+       keyidx >>= 6;
+       if (key->key_idx != keyidx) {
+               printk(KERN_DEBUG "CCMP: RX tkey->key_idx=%d frame "
+                      "keyidx=%d priv=%p\n", key->key_idx, keyidx, priv);
+               return -6;
+       }
+       if (!key->key_set) {
+               if (net_ratelimit()) {
+                       printk(KERN_DEBUG "CCMP: received packet from " MAC_FMT
+                              " with keyid=%d that does not have a configured"
+                              " key\n", MAC_ARG(hdr->addr2), keyidx);
+               }
+               return -3;
+       }
+
+       pn[0] = pos[7];
+       pn[1] = pos[6];
+       pn[2] = pos[5];
+       pn[3] = pos[4];
+       pn[4] = pos[1];
+       pn[5] = pos[0];
+       pos += 8;
+#ifndef _RTL8192_EXT_PATCH_    
+       if (memcmp(pn, key->rx_pn, CCMP_PN_LEN) <= 0) {
+               if (net_ratelimit()) {
+                       ;
+               }
+               key->dot11RSNAStatsCCMPReplays++;
+               return -4;
+       }
+#endif
+       if (!tcb_desc->bHwSec)
+       {
+               size_t data_len = skb->len - hdr_len - CCMP_HDR_LEN - CCMP_MIC_LEN;
+               u8 *mic = skb->data + skb->len - CCMP_MIC_LEN;
+               u8 *b0 = key->rx_b0;
+               u8 *b = key->rx_b;
+               u8 *a = key->rx_a;
+               int i, blocks, last, len;
+               
+
+               ccmp_init_blocks(key->tfm, hdr, pn, data_len, b0, a, b);
+               xor_block(mic, b, CCMP_MIC_LEN);
+       
+               blocks = (data_len + AES_BLOCK_LEN - 1) / AES_BLOCK_LEN;
+               last = data_len % AES_BLOCK_LEN;
+       
+               for (i = 1; i <= blocks; i++) {
+                       len = (i == blocks && last) ? last : AES_BLOCK_LEN;
+                       /* Decrypt, with counter */
+                       b0[14] = (i >> 8) & 0xff;
+                       b0[15] = i & 0xff;
+                       rtllib_ccmp_aes_encrypt(key->tfm, b0, b);
+                       xor_block(pos, b, len);
+                       /* Authentication */
+                       xor_block(a, pos, len);
+                       rtllib_ccmp_aes_encrypt(key->tfm, a, a);
+                       pos += len;
+               }
+       
+               if (memcmp(mic, a, CCMP_MIC_LEN) != 0) {
+                       if (net_ratelimit()) {
+                               printk(KERN_DEBUG "CCMP: decrypt failed: STA="
+                               MAC_FMT "\n", MAC_ARG(hdr->addr2));
+                       }
+                       key->dot11RSNAStatsCCMPDecryptErrors++;
+                       return -5;
+               }
+       
+               memcpy(key->rx_pn, pn, CCMP_PN_LEN);
+       }
+       /* Remove hdr and MIC */
+       memmove(skb->data + CCMP_HDR_LEN, skb->data, hdr_len);
+       skb_pull(skb, CCMP_HDR_LEN);
+       skb_trim(skb, skb->len - CCMP_MIC_LEN);
+
+       return keyidx;
+}
+
+
+static int rtllib_ccmp_set_key(void *key, int len, u8 *seq, void *priv)
+{
+       struct rtllib_ccmp_data *data = priv;
+       int keyidx;
+       struct crypto_tfm *tfm = data->tfm;
+
+       keyidx = data->key_idx;
+       memset(data, 0, sizeof(*data));
+       data->key_idx = keyidx;
+       data->tfm = tfm;
+       if (len == CCMP_TK_LEN) {
+               memcpy(data->key, key, CCMP_TK_LEN);
+               data->key_set = 1;
+               if (seq) {
+                       data->rx_pn[0] = seq[5];
+                       data->rx_pn[1] = seq[4];
+                       data->rx_pn[2] = seq[3];
+                       data->rx_pn[3] = seq[2];
+                       data->rx_pn[4] = seq[1];
+                       data->rx_pn[5] = seq[0];
+               }
+               crypto_cipher_setkey((void*)data->tfm, data->key, CCMP_TK_LEN);
+       } else if (len == 0)
+               data->key_set = 0;
+       else
+               return -1;
+
+       return 0;
+}
+
+
+static int rtllib_ccmp_get_key(void *key, int len, u8 *seq, void *priv)
+{
+       struct rtllib_ccmp_data *data = priv;
+
+       if (len < CCMP_TK_LEN)
+               return -1;
+
+       if (!data->key_set)
+               return 0;
+       memcpy(key, data->key, CCMP_TK_LEN);
+
+       if (seq) {
+               seq[0] = data->tx_pn[5];
+               seq[1] = data->tx_pn[4];
+               seq[2] = data->tx_pn[3];
+               seq[3] = data->tx_pn[2];
+               seq[4] = data->tx_pn[1];
+               seq[5] = data->tx_pn[0];
+       }
+
+       return CCMP_TK_LEN;
+}
+
+
+static char * rtllib_ccmp_print_stats(char *p, void *priv)
+{
+       struct rtllib_ccmp_data *ccmp = priv;
+       p += sprintf(p, "key[%d] alg=CCMP key_set=%d "
+                    "tx_pn=%02x%02x%02x%02x%02x%02x "
+                    "rx_pn=%02x%02x%02x%02x%02x%02x "
+                    "format_errors=%d replays=%d decrypt_errors=%d\n",
+                    ccmp->key_idx, ccmp->key_set,
+                    MAC_ARG(ccmp->tx_pn), MAC_ARG(ccmp->rx_pn),
+                    ccmp->dot11RSNAStatsCCMPFormatErrors,
+                    ccmp->dot11RSNAStatsCCMPReplays,
+                    ccmp->dot11RSNAStatsCCMPDecryptErrors);
+
+       return p;
+}
+
+void rtllib_ccmp_null(void)
+{
+       return;
+}
+
+static struct rtllib_crypto_ops rtllib_crypt_ccmp = {
+       .name                   = "CCMP",
+       .init                   = rtllib_ccmp_init,
+       .deinit                 = rtllib_ccmp_deinit,
+       .encrypt_mpdu           = rtllib_ccmp_encrypt,
+       .decrypt_mpdu           = rtllib_ccmp_decrypt,
+       .encrypt_msdu           = NULL,
+       .decrypt_msdu           = NULL,
+       .set_key                = rtllib_ccmp_set_key,
+       .get_key                = rtllib_ccmp_get_key,
+       .print_stats            = rtllib_ccmp_print_stats,
+       .extra_prefix_len       = CCMP_HDR_LEN,
+       .extra_postfix_len      = CCMP_MIC_LEN,
+       .owner                  = THIS_MODULE,
+};
+
+
+int __init rtllib_crypto_ccmp_init(void)
+{
+       return rtllib_register_crypto_ops(&rtllib_crypt_ccmp);
+}
+
+
+void __exit rtllib_crypto_ccmp_exit(void)
+{
+       rtllib_unregister_crypto_ops(&rtllib_crypt_ccmp);
+}
+
+#ifndef BUILT_IN_RTLLIB
+EXPORT_SYMBOL_RSL(rtllib_ccmp_null);
+
+module_init(rtllib_crypto_ccmp_init);
+module_exit(rtllib_crypto_ccmp_exit);
+#endif
diff --git a/ubuntu/rtl8192se/rtllib/rtllib_crypt_tkip.c b/ubuntu/rtl8192se/rtllib/rtllib_crypt_tkip.c
new file mode 100644 (file)
index 0000000..dc221e4
--- /dev/null
@@ -0,0 +1,1047 @@
+/*
+ * Host AP crypt: host-based TKIP encryption implementation for Host AP driver
+ *
+ * Copyright (c) 2003-2004, Jouni Malinen <jkmaline@cc.hut.fi>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation. See README and COPYING for
+ * more details.
+ */
+
+#include <linux/version.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/slab.h>
+#include <linux/random.h>
+#include <linux/skbuff.h>
+#include <linux/netdevice.h>
+#include <linux/if_ether.h>
+#include <linux/if_arp.h>
+#include <asm/string.h>
+#ifdef _RTL8192_EXT_PATCH_     
+#include <linux/etherdevice.h>
+#endif
+#include "rtllib.h"
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,20))
+#endif
+
+
+#if defined(BUILT_IN_CRYPTO) || (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
+#include "rtl_crypto.h"
+#else
+#include <linux/crypto.h>
+#endif
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) 
+    #include <asm/scatterlist.h>
+#else
+        #include <linux/scatterlist.h>
+#endif
+       
+#include <linux/crc32.h>
+
+#ifndef BUILT_IN_RTLLIB
+MODULE_AUTHOR("Jouni Malinen");
+MODULE_DESCRIPTION("Host AP crypt: TKIP");
+MODULE_LICENSE("GPL");
+#endif
+
+
+struct rtllib_tkip_data {
+#define TKIP_KEY_LEN 32
+       u8 key[TKIP_KEY_LEN];
+       int key_set;
+
+       u32 tx_iv32;
+       u16 tx_iv16;
+       u16 tx_ttak[5];
+       int tx_phase1_done;
+
+       u32 rx_iv32;
+       u16 rx_iv16;
+      bool initialized;
+       u16 rx_ttak[5];
+       int rx_phase1_done;
+       u32 rx_iv32_new;
+       u16 rx_iv16_new;
+
+       u32 dot11RSNAStatsTKIPReplays;
+       u32 dot11RSNAStatsTKIPICVErrors;
+       u32 dot11RSNAStatsTKIPLocalMICFailures;
+
+       int key_idx;
+#if  ( !defined(BUILT_IN_CRYPTO) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)) || (OPENSUSE_SLED)) )
+       struct crypto_blkcipher *rx_tfm_arc4;
+       struct crypto_hash *rx_tfm_michael;
+       struct crypto_blkcipher *tx_tfm_arc4;
+       struct crypto_hash *tx_tfm_michael;
+#else
+       struct crypto_tfm *tx_tfm_arc4;
+       struct crypto_tfm *tx_tfm_michael;
+       struct crypto_tfm *rx_tfm_arc4;
+       struct crypto_tfm *rx_tfm_michael;
+#endif
+       /* scratch buffers for virt_to_page() (crypto API) */
+       u8 rx_hdr[16], tx_hdr[16];
+};
+
+static void * rtllib_tkip_init(int key_idx)
+{
+       struct rtllib_tkip_data *priv;
+
+       priv = kmalloc(sizeof(*priv), GFP_ATOMIC);
+       if (priv == NULL)
+               goto fail;
+       memset(priv, 0, sizeof(*priv));
+       priv->key_idx = key_idx;
+#if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) )
+       priv->tx_tfm_arc4 = crypto_alloc_tfm("arc4", 0);
+       if (priv->tx_tfm_arc4 == NULL) {
+               printk(KERN_DEBUG "rtllib_crypt_tkip: could not allocate "
+                               "crypto API arc4\n");
+               goto fail;
+       }
+
+       priv->tx_tfm_michael = crypto_alloc_tfm("michael_mic", 0);
+       if (priv->tx_tfm_michael == NULL) {
+               printk(KERN_DEBUG "rtllib_crypt_tkip: could not allocate "
+                               "crypto API michael_mic\n");
+               goto fail;
+       }
+
+       priv->rx_tfm_arc4 = crypto_alloc_tfm("arc4", 0);
+       if (priv->rx_tfm_arc4 == NULL) {
+               printk(KERN_DEBUG "rtllib_crypt_tkip: could not allocate "
+                               "crypto API arc4\n");
+               goto fail;
+       }
+
+       priv->rx_tfm_michael = crypto_alloc_tfm("michael_mic", 0);
+       if (priv->rx_tfm_michael == NULL) {
+               printk(KERN_DEBUG "rtllib_crypt_tkip: could not allocate "
+                               "crypto API michael_mic\n");
+               goto fail;
+       }
+#else
+       priv->tx_tfm_arc4 = crypto_alloc_blkcipher("ecb(arc4)", 0,
+                       CRYPTO_ALG_ASYNC);
+       if (IS_ERR(priv->tx_tfm_arc4)) {
+               printk(KERN_DEBUG "rtllib_crypt_tkip: could not allocate "
+                               "crypto API arc4\n");
+               priv->tx_tfm_arc4 = NULL;
+               goto fail;
+       }
+
+       priv->tx_tfm_michael = crypto_alloc_hash("michael_mic", 0,
+                       CRYPTO_ALG_ASYNC);
+       if (IS_ERR(priv->tx_tfm_michael)) {
+               printk(KERN_DEBUG "rtllib_crypt_tkip: could not allocate "
+                               "crypto API michael_mic\n");
+               priv->tx_tfm_michael = NULL;
+               goto fail;
+       }
+
+       priv->rx_tfm_arc4 = crypto_alloc_blkcipher("ecb(arc4)", 0,
+                       CRYPTO_ALG_ASYNC);
+       if (IS_ERR(priv->rx_tfm_arc4)) {
+               printk(KERN_DEBUG "rtllib_crypt_tkip: could not allocate "
+                               "crypto API arc4\n");
+               priv->rx_tfm_arc4 = NULL;
+               goto fail;
+       }
+
+       priv->rx_tfm_michael = crypto_alloc_hash("michael_mic", 0,
+                       CRYPTO_ALG_ASYNC);
+       if (IS_ERR(priv->rx_tfm_michael)) {
+               printk(KERN_DEBUG "rtllib_crypt_tkip: could not allocate "
+                               "crypto API michael_mic\n");
+               priv->rx_tfm_michael = NULL;
+               goto fail;
+       }
+#endif
+       return priv;
+
+fail:
+       if (priv) {
+#if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) )
+               if (priv->tx_tfm_michael)
+                       crypto_free_tfm(priv->tx_tfm_michael);
+               if (priv->tx_tfm_arc4)
+                       crypto_free_tfm(priv->tx_tfm_arc4);
+               if (priv->rx_tfm_michael)
+                       crypto_free_tfm(priv->rx_tfm_michael);
+               if (priv->rx_tfm_arc4)
+                       crypto_free_tfm(priv->rx_tfm_arc4);
+
+#else
+               if (priv->tx_tfm_michael)
+                       crypto_free_hash(priv->tx_tfm_michael);
+               if (priv->tx_tfm_arc4)
+                       crypto_free_blkcipher(priv->tx_tfm_arc4);
+               if (priv->rx_tfm_michael)
+                       crypto_free_hash(priv->rx_tfm_michael);
+               if (priv->rx_tfm_arc4)
+                       crypto_free_blkcipher(priv->rx_tfm_arc4);
+#endif
+               kfree(priv);
+       }
+
+       return NULL;
+}
+
+
+static void rtllib_tkip_deinit(void *priv)
+{
+       struct rtllib_tkip_data *_priv = priv;
+#if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) )
+       if (_priv->tx_tfm_michael)
+               crypto_free_tfm(_priv->tx_tfm_michael);
+       if (_priv->tx_tfm_arc4)
+               crypto_free_tfm(_priv->tx_tfm_arc4);
+       if (_priv->rx_tfm_michael)
+               crypto_free_tfm(_priv->rx_tfm_michael);
+       if (_priv->rx_tfm_arc4)
+               crypto_free_tfm(_priv->rx_tfm_arc4);
+#else
+       if (_priv) {
+               if (_priv->tx_tfm_michael)
+                       crypto_free_hash(_priv->tx_tfm_michael);
+               if (_priv->tx_tfm_arc4)
+                       crypto_free_blkcipher(_priv->tx_tfm_arc4);
+               if (_priv->rx_tfm_michael)
+                       crypto_free_hash(_priv->rx_tfm_michael);
+               if (_priv->rx_tfm_arc4)
+                       crypto_free_blkcipher(_priv->rx_tfm_arc4);
+       }
+#endif
+       kfree(priv);
+}
+
+
+static inline u16 RotR1(u16 val)
+{
+       return (val >> 1) | (val << 15);
+}
+
+
+static inline u8 Lo8(u16 val)
+{
+       return val & 0xff;
+}
+
+
+static inline u8 Hi8(u16 val)
+{
+       return val >> 8;
+}
+
+
+static inline u16 Lo16(u32 val)
+{
+       return val & 0xffff;
+}
+
+
+static inline u16 Hi16(u32 val)
+{
+       return val >> 16;
+}
+
+
+static inline u16 Mk16(u8 hi, u8 lo)
+{
+       return lo | (((u16) hi) << 8);
+}
+
+
+static inline u16 Mk16_le(u16 *v)
+{
+       return le16_to_cpu(*v);
+}
+
+
+static const u16 Sbox[256] =
+{
+       0xC6A5, 0xF884, 0xEE99, 0xF68D, 0xFF0D, 0xD6BD, 0xDEB1, 0x9154,
+       0x6050, 0x0203, 0xCEA9, 0x567D, 0xE719, 0xB562, 0x4DE6, 0xEC9A,
+       0x8F45, 0x1F9D, 0x8940, 0xFA87, 0xEF15, 0xB2EB, 0x8EC9, 0xFB0B,
+       0x41EC, 0xB367, 0x5FFD, 0x45EA, 0x23BF, 0x53F7, 0xE496, 0x9B5B,
+       0x75C2, 0xE11C, 0x3DAE, 0x4C6A, 0x6C5A, 0x7E41, 0xF502, 0x834F,
+       0x685C, 0x51F4, 0xD134, 0xF908, 0xE293, 0xAB73, 0x6253, 0x2A3F,
+       0x080C, 0x9552, 0x4665, 0x9D5E, 0x3028, 0x37A1, 0x0A0F, 0x2FB5,
+       0x0E09, 0x2436, 0x1B9B, 0xDF3D, 0xCD26, 0x4E69, 0x7FCD, 0xEA9F,
+       0x121B, 0x1D9E, 0x5874, 0x342E, 0x362D, 0xDCB2, 0xB4EE, 0x5BFB,
+       0xA4F6, 0x764D, 0xB761, 0x7DCE, 0x527B, 0xDD3E, 0x5E71, 0x1397,
+       0xA6F5, 0xB968, 0x0000, 0xC12C, 0x4060, 0xE31F, 0x79C8, 0xB6ED,
+       0xD4BE, 0x8D46, 0x67D9, 0x724B, 0x94DE, 0x98D4, 0xB0E8, 0x854A,
+       0xBB6B, 0xC52A, 0x4FE5, 0xED16, 0x86C5, 0x9AD7, 0x6655, 0x1194,
+       0x8ACF, 0xE910, 0x0406, 0xFE81, 0xA0F0, 0x7844, 0x25BA, 0x4BE3,
+       0xA2F3, 0x5DFE, 0x80C0, 0x058A, 0x3FAD, 0x21BC, 0x7048, 0xF104,
+       0x63DF, 0x77C1, 0xAF75, 0x4263, 0x2030, 0xE51A, 0xFD0E, 0xBF6D,
+       0x814C, 0x1814, 0x2635, 0xC32F, 0xBEE1, 0x35A2, 0x88CC, 0x2E39,
+       0x9357, 0x55F2, 0xFC82, 0x7A47, 0xC8AC, 0xBAE7, 0x322B, 0xE695,
+       0xC0A0, 0x1998, 0x9ED1, 0xA37F, 0x4466, 0x547E, 0x3BAB, 0x0B83,
+       0x8CCA, 0xC729, 0x6BD3, 0x283C, 0xA779, 0xBCE2, 0x161D, 0xAD76,
+       0xDB3B, 0x6456, 0x744E, 0x141E, 0x92DB, 0x0C0A, 0x486C, 0xB8E4,
+       0x9F5D, 0xBD6E, 0x43EF, 0xC4A6, 0x39A8, 0x31A4, 0xD337, 0xF28B,
+       0xD532, 0x8B43, 0x6E59, 0xDAB7, 0x018C, 0xB164, 0x9CD2, 0x49E0,
+       0xD8B4, 0xACFA, 0xF307, 0xCF25, 0xCAAF, 0xF48E, 0x47E9, 0x1018,
+       0x6FD5, 0xF088, 0x4A6F, 0x5C72, 0x3824, 0x57F1, 0x73C7, 0x9751,
+       0xCB23, 0xA17C, 0xE89C, 0x3E21, 0x96DD, 0x61DC, 0x0D86, 0x0F85,
+       0xE090, 0x7C42, 0x71C4, 0xCCAA, 0x90D8, 0x0605, 0xF701, 0x1C12,
+       0xC2A3, 0x6A5F, 0xAEF9, 0x69D0, 0x1791, 0x9958, 0x3A27, 0x27B9,
+       0xD938, 0xEB13, 0x2BB3, 0x2233, 0xD2BB, 0xA970, 0x0789, 0x33A7,
+       0x2DB6, 0x3C22, 0x1592, 0xC920, 0x8749, 0xAAFF, 0x5078, 0xA57A,
+       0x038F, 0x59F8, 0x0980, 0x1A17, 0x65DA, 0xD731, 0x84C6, 0xD0B8,
+       0x82C3, 0x29B0, 0x5A77, 0x1E11, 0x7BCB, 0xA8FC, 0x6DD6, 0x2C3A,
+};
+
+
+static inline u16 _S_(u16 v)
+{
+       u16 t = Sbox[Hi8(v)];
+       return Sbox[Lo8(v)] ^ ((t << 8) | (t >> 8));
+}
+
+
+#define PHASE1_LOOP_COUNT 8
+
+
+static void tkip_mixing_phase1(u16 *TTAK, const u8 *TK, const u8 *TA, u32 IV32)
+{
+       int i, j;
+
+       /* Initialize the 80-bit TTAK from TSC (IV32) and TA[0..5] */
+       TTAK[0] = Lo16(IV32);
+       TTAK[1] = Hi16(IV32);
+       TTAK[2] = Mk16(TA[1], TA[0]);
+       TTAK[3] = Mk16(TA[3], TA[2]);
+       TTAK[4] = Mk16(TA[5], TA[4]);
+
+       for (i = 0; i < PHASE1_LOOP_COUNT; i++) {
+               j = 2 * (i & 1);
+               TTAK[0] += _S_(TTAK[4] ^ Mk16(TK[1 + j], TK[0 + j]));
+               TTAK[1] += _S_(TTAK[0] ^ Mk16(TK[5 + j], TK[4 + j]));
+               TTAK[2] += _S_(TTAK[1] ^ Mk16(TK[9 + j], TK[8 + j]));
+               TTAK[3] += _S_(TTAK[2] ^ Mk16(TK[13 + j], TK[12 + j]));
+               TTAK[4] += _S_(TTAK[3] ^ Mk16(TK[1 + j], TK[0 + j])) + i;
+       }
+}
+
+
+static void tkip_mixing_phase2(u8 *WEPSeed, const u8 *TK, const u16 *TTAK,
+                              u16 IV16)
+{
+       /* Make temporary area overlap WEP seed so that the final copy can be
+        * avoided on little endian hosts. */
+       u16 *PPK = (u16 *) &WEPSeed[4];
+
+       /* Step 1 - make copy of TTAK and bring in TSC */
+       PPK[0] = TTAK[0];
+       PPK[1] = TTAK[1];
+       PPK[2] = TTAK[2];
+       PPK[3] = TTAK[3];
+       PPK[4] = TTAK[4];
+       PPK[5] = TTAK[4] + IV16;
+
+       /* Step 2 - 96-bit bijective mixing using S-box */
+       PPK[0] += _S_(PPK[5] ^ Mk16_le((u16 *) &TK[0]));
+       PPK[1] += _S_(PPK[0] ^ Mk16_le((u16 *) &TK[2]));
+       PPK[2] += _S_(PPK[1] ^ Mk16_le((u16 *) &TK[4]));
+       PPK[3] += _S_(PPK[2] ^ Mk16_le((u16 *) &TK[6]));
+       PPK[4] += _S_(PPK[3] ^ Mk16_le((u16 *) &TK[8]));
+       PPK[5] += _S_(PPK[4] ^ Mk16_le((u16 *) &TK[10]));
+
+       PPK[0] += RotR1(PPK[5] ^ Mk16_le((u16 *) &TK[12]));
+       PPK[1] += RotR1(PPK[0] ^ Mk16_le((u16 *) &TK[14]));
+       PPK[2] += RotR1(PPK[1]);
+       PPK[3] += RotR1(PPK[2]);
+       PPK[4] += RotR1(PPK[3]);
+       PPK[5] += RotR1(PPK[4]);
+
+       /* Step 3 - bring in last of TK bits, assign 24-bit WEP IV value
+        * WEPSeed[0..2] is transmitted as WEP IV */
+       WEPSeed[0] = Hi8(IV16);
+       WEPSeed[1] = (Hi8(IV16) | 0x20) & 0x7F;
+       WEPSeed[2] = Lo8(IV16);
+       WEPSeed[3] = Lo8((PPK[5] ^ Mk16_le((u16 *) &TK[0])) >> 1);
+
+#ifdef __BIG_ENDIAN
+       {
+               int i;
+               for (i = 0; i < 6; i++)
+                       PPK[i] = (PPK[i] << 8) | (PPK[i] >> 8);
+       }
+#endif
+}
+
+
+static int rtllib_tkip_encrypt(struct sk_buff *skb, int hdr_len, void *priv)
+{
+       struct rtllib_tkip_data *tkey = priv;
+               int len;
+       u8 *pos;
+       struct rtllib_hdr_4addr *hdr;
+       cb_desc *tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE);
+
+       #if ( !defined(BUILT_IN_CRYPTO) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)) || (OPENSUSE_SLED)) )
+       struct blkcipher_desc desc = {.tfm = tkey->tx_tfm_arc4};
+       int ret = 0;
+       #endif
+       u8 rc4key[16],  *icv;
+       u32 crc;
+#ifdef _RTL8192_EXT_PATCH_     
+       u8 broadcastaddr[6] = {0xff,0xff,0xff,0xff,0xff,0xff};
+       u8 is_broadcast_data = 0;
+#endif
+       struct scatterlist sg;
+
+       if (skb_headroom(skb) < 8 || skb_tailroom(skb) < 4 ||
+           skb->len < hdr_len)
+               return -1;
+
+       hdr = (struct rtllib_hdr_4addr *) skb->data;
+#ifdef _RTL8192_EXT_PATCH_     
+       if(tcb_desc->badhoc == 0){
+               if(memcmp(hdr->addr1,broadcastaddr,6) == 0){
+                       is_broadcast_data = 1;
+                       tcb_desc->bHwSec = 0;
+               }
+               if(is_multicast_ether_addr(hdr->addr1)){
+                       tcb_desc->bHwSec = 0;
+               }
+       }
+#endif
+#if 0
+printk("@@ tkey\n");
+printk("%x|", ((u32*)tkey->key)[0]);
+printk("%x|", ((u32*)tkey->key)[1]);
+printk("%x|", ((u32*)tkey->key)[2]);
+printk("%x|", ((u32*)tkey->key)[3]);
+printk("%x|", ((u32*)tkey->key)[4]);
+printk("%x|", ((u32*)tkey->key)[5]);
+printk("%x|", ((u32*)tkey->key)[6]);
+printk("%x\n", ((u32*)tkey->key)[7]);
+#endif
+
+       if (!tcb_desc->bHwSec)
+       {
+               if (!tkey->tx_phase1_done) {
+                       tkip_mixing_phase1(tkey->tx_ttak, tkey->key, hdr->addr2,
+                                       tkey->tx_iv32);
+                       tkey->tx_phase1_done = 1;
+               }
+               tkip_mixing_phase2(rc4key, tkey->key, tkey->tx_ttak, tkey->tx_iv16);
+       }
+       else
+       tkey->tx_phase1_done = 1;
+       
+       
+       len = skb->len - hdr_len;
+       pos = skb_push(skb, 8);
+       memmove(pos, pos + 8, hdr_len);
+       pos += hdr_len;
+
+       if (tcb_desc->bHwSec)
+       {
+               *pos++ = Hi8(tkey->tx_iv16);
+               *pos++ = (Hi8(tkey->tx_iv16) | 0x20) & 0x7F;
+               *pos++ = Lo8(tkey->tx_iv16);
+       }
+       else
+       {
+               *pos++ = rc4key[0];
+               *pos++ = rc4key[1];
+               *pos++ = rc4key[2];
+       }
+
+       *pos++ = (tkey->key_idx << 6) | (1 << 5) /* Ext IV included */;
+       *pos++ = tkey->tx_iv32 & 0xff;
+       *pos++ = (tkey->tx_iv32 >> 8) & 0xff;
+       *pos++ = (tkey->tx_iv32 >> 16) & 0xff;
+       *pos++ = (tkey->tx_iv32 >> 24) & 0xff;
+
+       if (!tcb_desc->bHwSec)
+       {
+               icv = skb_put(skb, 4);
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
+               crc = ~crc32_le(~0, pos, len);
+#else
+               crc = ~ether_crc_le(len, pos);
+#endif
+               icv[0] = crc;
+               icv[1] = crc >> 8;
+               icv[2] = crc >> 16;
+               icv[3] = crc >> 24;
+
+#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
+               sg.page = virt_to_page(pos);
+               sg.offset = offset_in_page(pos);
+               sg.length = len + 4;
+#else          
+               sg_init_one(&sg, pos, len+4);
+#endif
+
+
+#if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) )
+               crypto_cipher_setkey(tkey->tx_tfm_arc4, rc4key, 16);
+               crypto_cipher_encrypt(tkey->tx_tfm_arc4, &sg, &sg, len + 4);
+#else
+               crypto_blkcipher_setkey(tkey->tx_tfm_arc4, rc4key, 16);
+               ret= crypto_blkcipher_encrypt(&desc, &sg, &sg, len + 4);
+#endif
+
+       }
+
+       tkey->tx_iv16++;
+       if (tkey->tx_iv16 == 0) {
+               tkey->tx_phase1_done = 0;
+               tkey->tx_iv32++;
+       }
+
+       if (!tcb_desc->bHwSec)
+       #if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) )
+               return 0;
+       #else
+               return ret;
+       #endif
+       else
+               return 0;
+
+
+}
+
+static int rtllib_tkip_decrypt(struct sk_buff *skb, int hdr_len, void *priv)
+{
+       struct rtllib_tkip_data *tkey = priv;
+       u8 keyidx, *pos;
+       u32 iv32;
+       u16 iv16;
+       struct rtllib_hdr_4addr *hdr;
+       cb_desc *tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE);
+       #if ( !defined(BUILT_IN_CRYPTO) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)) || (OPENSUSE_SLED)) )
+       struct blkcipher_desc desc = {.tfm = tkey->rx_tfm_arc4};
+       #endif
+       u8 rc4key[16];
+       u8 icv[4];
+       u32 crc;
+       struct scatterlist sg;
+       int plen;
+       if (skb->len < hdr_len + 8 + 4)
+               return -1;
+
+       hdr = (struct rtllib_hdr_4addr *) skb->data;
+       pos = skb->data + hdr_len;
+       keyidx = pos[3];
+       if (!(keyidx & (1 << 5))) {
+               if (net_ratelimit()) {
+                       printk(KERN_DEBUG "TKIP: received packet without ExtIV"
+                              " flag from " MAC_FMT "\n", MAC_ARG(hdr->addr2));
+               }
+               return -2;
+       }
+       keyidx >>= 6;
+       if (tkey->key_idx != keyidx) {
+               printk(KERN_DEBUG "TKIP: RX tkey->key_idx=%d frame "
+                      "keyidx=%d priv=%p\n", tkey->key_idx, keyidx, priv);
+               return -6;
+       }
+       if (!tkey->key_set) {
+               if (net_ratelimit()) {
+                       printk(KERN_DEBUG "TKIP: received packet from " MAC_FMT
+                              " with keyid=%d that does not have a configured"
+                              " key\n", MAC_ARG(hdr->addr2), keyidx);
+               }
+               return -3;
+       }
+       iv16 = (pos[0] << 8) | pos[2];
+       iv32 = pos[4] | (pos[5] << 8) | (pos[6] << 16) | (pos[7] << 24);
+       pos += 8;
+
+       if (!tcb_desc->bHwSec || (skb->cb[0] == 1))
+       {
+               if ((iv32 < tkey->rx_iv32 ||
+               (iv32 == tkey->rx_iv32 && iv16 <= tkey->rx_iv16))&&tkey->initialized) {
+                       if (net_ratelimit()) {
+                               printk(KERN_DEBUG "TKIP: replay detected: STA=" MAC_FMT
+                               " previous TSC %08x%04x received TSC "
+                               "%08x%04x\n", MAC_ARG(hdr->addr2),
+                               tkey->rx_iv32, tkey->rx_iv16, iv32, iv16);
+                       }
+                       tkey->dot11RSNAStatsTKIPReplays++;
+                       return -4;
+               }
+                tkey->initialized = true;
+       
+               if (iv32 != tkey->rx_iv32 || !tkey->rx_phase1_done) {
+                       tkip_mixing_phase1(tkey->rx_ttak, tkey->key, hdr->addr2, iv32);
+                       tkey->rx_phase1_done = 1;
+               }
+               tkip_mixing_phase2(rc4key, tkey->key, tkey->rx_ttak, iv16);
+       
+               plen = skb->len - hdr_len - 12;
+       
+#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
+               sg.page = virt_to_page(pos);
+               sg.offset = offset_in_page(pos);
+               sg.length = plen + 4;
+#else
+               sg_init_one(&sg, pos, plen+4);
+#endif
+
+#if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) )
+               crypto_cipher_setkey(tkey->rx_tfm_arc4, rc4key, 16);
+               crypto_cipher_decrypt(tkey->rx_tfm_arc4, &sg, &sg, plen + 4);
+#else
+               crypto_blkcipher_setkey(tkey->rx_tfm_arc4, rc4key, 16);
+               if (crypto_blkcipher_decrypt(&desc, &sg, &sg, plen + 4)) {
+                       if (net_ratelimit()) {
+                               printk(KERN_DEBUG ": TKIP: failed to decrypt "
+                                               "received packet from " MAC_FMT "\n",
+                                               MAC_ARG(hdr->addr2));
+                       }
+                       return -7;
+               }
+#endif
+       
+       #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
+               crc = ~crc32_le(~0, pos, plen);
+       #else
+               crc = ~ether_crc_le(plen, pos);
+       #endif
+               icv[0] = crc;
+               icv[1] = crc >> 8;
+               icv[2] = crc >> 16;
+               icv[3] = crc >> 24;
+       
+               if (memcmp(icv, pos + plen, 4) != 0) {
+                       if (iv32 != tkey->rx_iv32) {
+                               /* Previously cached Phase1 result was already lost, so
+                               * it needs to be recalculated for the next packet. */
+                               tkey->rx_phase1_done = 0;
+                       }
+                       if (net_ratelimit()) {
+                               printk(KERN_DEBUG "TKIP: ICV error detected: STA="
+                               MAC_FMT "\n", MAC_ARG(hdr->addr2));
+                       }
+                       tkey->dot11RSNAStatsTKIPICVErrors++;
+                       return -5;
+               }
+
+       }
+
+       /* Update real counters only after Michael MIC verification has
+        * completed */
+       tkey->rx_iv32_new = iv32;
+       tkey->rx_iv16_new = iv16;
+
+       /* Remove IV and ICV */
+       memmove(skb->data + 8, skb->data, hdr_len);
+       skb_pull(skb, 8);
+       skb_trim(skb, skb->len - 4);
+
+#ifdef JOHN_DUMP 
+if( ((u16*)skb->data)[0] & 0x4000){
+        printk("@@ rx decrypted skb->data");
+        int i;
+        for(i=0;i<skb->len;i++){
+                if( (i%24)==0 ) printk("\n");
+                printk("%2x ", ((u8*)skb->data)[i]);
+        }
+        printk("\n");
+}
+#endif /*JOHN_DUMP*/
+       return keyidx;
+}
+
+
+#if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) )
+static int michael_mic(struct crypto_tfm * tfm_michael, u8 *key, u8 *hdr,
+                      u8 *data, size_t data_len, u8 *mic)
+{
+       struct scatterlist sg[2];
+#if ( !defined(BUILT_IN_CRYPTO) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20) )
+        struct hash_desc desc;
+        int ret = 0;
+#endif
+
+       if (tfm_michael == NULL){
+               printk(KERN_WARNING "michael_mic: tfm_michael == NULL\n");
+               return -1;
+       }
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
+       sg[0].page = virt_to_page(hdr);
+       sg[0].offset = offset_in_page(hdr);
+       sg[0].length = 16;
+
+       sg[1].page = virt_to_page(data);
+       sg[1].offset = offset_in_page(data);
+       sg[1].length = data_len;
+#else
+       sg_init_table(sg, 2);
+       sg_set_buf(&sg[0], hdr, 16);
+       sg_set_buf(&sg[1], data, data_len);
+#endif
+
+#if ( defined(BUILT_IN_CRYPTO) || LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) )
+       crypto_digest_init(tfm_michael);
+        crypto_digest_setkey(tfm_michael, key, 8);
+        crypto_digest_update(tfm_michael, sg, 2);
+        crypto_digest_final(tfm_michael, mic);
+        return 0;
+#else
+if (crypto_hash_setkey(tkey->tfm_michael, key, 8))
+                return -1;
+
+              desc.tfm = tkey->tfm_michael;
+              desc.flags = 0;
+              ret = crypto_hash_digest(&desc, sg, data_len + 16, mic);
+              return ret;
+#endif
+}
+#else
+static int michael_mic(struct crypto_hash *tfm_michael, u8 * key, u8 * hdr,
+                       u8 * data, size_t data_len, u8 * mic)
+{
+        struct hash_desc desc;
+        struct scatterlist sg[2];
+
+        if (tfm_michael == NULL) {
+                printk(KERN_WARNING "michael_mic: tfm_michael == NULL\n");
+                return -1;
+        }
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
+        sg[0].page = virt_to_page(hdr);
+        sg[0].offset = offset_in_page(hdr);
+        sg[0].length = 16;
+
+        sg[1].page = virt_to_page(data);
+        sg[1].offset = offset_in_page(data);
+        sg[1].length = data_len;
+#else
+        sg_init_table(sg, 2);
+        sg_set_buf(&sg[0], hdr, 16);
+        sg_set_buf(&sg[1], data, data_len);
+#endif
+
+        if (crypto_hash_setkey(tfm_michael, key, 8))
+                return -1;
+
+        desc.tfm = tfm_michael;
+        desc.flags = 0;
+        return crypto_hash_digest(&desc, sg, data_len + 16, mic);
+}
+#endif
+
+
+
+static void michael_mic_hdr(struct sk_buff *skb, u8 *hdr)
+{
+       struct rtllib_hdr_4addr *hdr11;
+
+       hdr11 = (struct rtllib_hdr_4addr *) skb->data;
+       switch (le16_to_cpu(hdr11->frame_ctl) &
+               (RTLLIB_FCTL_FROMDS | RTLLIB_FCTL_TODS)) {
+       case RTLLIB_FCTL_TODS:
+               memcpy(hdr, hdr11->addr3, ETH_ALEN); /* DA */
+               memcpy(hdr + ETH_ALEN, hdr11->addr2, ETH_ALEN); /* SA */
+               break;
+       case RTLLIB_FCTL_FROMDS:
+               memcpy(hdr, hdr11->addr1, ETH_ALEN); /* DA */
+               memcpy(hdr + ETH_ALEN, hdr11->addr3, ETH_ALEN); /* SA */
+               break;
+       case RTLLIB_FCTL_FROMDS | RTLLIB_FCTL_TODS:
+               memcpy(hdr, hdr11->addr3, ETH_ALEN); /* DA */
+               memcpy(hdr + ETH_ALEN, hdr11->addr4, ETH_ALEN); /* SA */
+               break;
+       case 0:
+               memcpy(hdr, hdr11->addr1, ETH_ALEN); /* DA */
+               memcpy(hdr + ETH_ALEN, hdr11->addr2, ETH_ALEN); /* SA */
+               break;
+       }
+               
+       hdr[12] = 0; /* priority */
+       
+       hdr[13] = hdr[14] = hdr[15] = 0; /* reserved */
+}
+
+
+static int rtllib_michael_mic_add(struct sk_buff *skb, int hdr_len, void *priv)
+{
+       struct rtllib_tkip_data *tkey = priv;
+       u8 *pos;
+       struct rtllib_hdr_4addr *hdr;
+
+       hdr = (struct rtllib_hdr_4addr *) skb->data;
+
+       if (skb_tailroom(skb) < 8 || skb->len < hdr_len) {
+               printk(KERN_DEBUG "Invalid packet for Michael MIC add "
+                      "(tailroom=%d hdr_len=%d skb->len=%d)\n",
+                      skb_tailroom(skb), hdr_len, skb->len);
+               return -1;
+       }
+
+       michael_mic_hdr(skb, tkey->tx_hdr);
+
+       if(RTLLIB_QOS_HAS_SEQ(le16_to_cpu(hdr->frame_ctl))) {
+               tkey->tx_hdr[12] = *(skb->data + hdr_len - 2) & 0x07;
+       }
+       pos = skb_put(skb, 8);
+#if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) )
+       if (michael_mic(tkey->tx_tfm_michael, &tkey->key[16], tkey->tx_hdr,
+                               skb->data + hdr_len, skb->len - 8 - hdr_len, pos))
+#else
+       if (michael_mic(tkey->tx_tfm_michael, &tkey->key[16], tkey->tx_hdr,
+                               skb->data + hdr_len, skb->len - 8 - hdr_len, pos))
+#endif
+               return -1;
+
+       return 0;
+}
+
+
+#if WIRELESS_EXT >= 18
+static void rtllib_michael_mic_failure(struct net_device *dev,
+                                      struct rtllib_hdr_4addr *hdr,
+                                      int keyidx)
+{
+       union iwreq_data wrqu;
+       struct iw_michaelmicfailure ev;
+
+       /* TODO: needed parameters: count, keyid, key type, TSC */
+       memset(&ev, 0, sizeof(ev));
+       ev.flags = keyidx & IW_MICFAILURE_KEY_ID;
+       if (hdr->addr1[0] & 0x01)
+               ev.flags |= IW_MICFAILURE_GROUP;
+       else
+               ev.flags |= IW_MICFAILURE_PAIRWISE;
+       ev.src_addr.sa_family = ARPHRD_ETHER;
+       memcpy(ev.src_addr.sa_data, hdr->addr2, ETH_ALEN);
+       memset(&wrqu, 0, sizeof(wrqu));
+       wrqu.data.length = sizeof(ev);
+       wireless_send_event(dev, IWEVMICHAELMICFAILURE, &wrqu, (char *) &ev);
+}
+#elif WIRELESS_EXT >= 15
+static void rtllib_michael_mic_failure(struct net_device *dev,
+                                      struct rtllib_hdr_4addr *hdr,
+                                      int keyidx)
+{
+       union iwreq_data wrqu;
+       char buf[128];
+
+       /* TODO: needed parameters: count, keyid, key type, TSC */
+       sprintf(buf, "MLME-MICHAELMICFAILURE.indication(keyid=%d %scast addr="
+               MAC_FMT ")", keyidx, hdr->addr1[0] & 0x01 ? "broad" : "uni",
+               MAC_ARG(hdr->addr2));
+       memset(&wrqu, 0, sizeof(wrqu));
+       wrqu.data.length = strlen(buf);
+       wireless_send_event(dev, IWEVCUSTOM, &wrqu, buf);
+}
+#else /* WIRELESS_EXT >= 15 */
+static inline void rtllib_michael_mic_failure(struct net_device *dev,
+                                             struct rtllib_hdr_4addr *hdr,
+                                             int keyidx)
+{
+}
+#endif /* WIRELESS_EXT >= 15 */
+
+static int rtllib_michael_mic_verify(struct sk_buff *skb, int keyidx,
+                                    int hdr_len, void *priv, struct rtllib_device* ieee)
+{
+       struct rtllib_tkip_data *tkey = priv;
+       u8 mic[8];
+       struct rtllib_hdr_4addr *hdr;
+
+       hdr = (struct rtllib_hdr_4addr *) skb->data;
+
+       if (!tkey->key_set)
+               return -1;
+
+       michael_mic_hdr(skb, tkey->rx_hdr);
+       if(RTLLIB_QOS_HAS_SEQ(le16_to_cpu(hdr->frame_ctl))) {
+               tkey->rx_hdr[12] = *(skb->data + hdr_len - 2) & 0x07;
+       }
+
+#if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) )
+       if (michael_mic(tkey->rx_tfm_michael, &tkey->key[24], tkey->rx_hdr,
+                               skb->data + hdr_len, skb->len - 8 - hdr_len, mic))
+#else
+       if (michael_mic(tkey->rx_tfm_michael, &tkey->key[24], tkey->rx_hdr,
+                               skb->data + hdr_len, skb->len - 8 - hdr_len, mic))
+#endif 
+               return -1;
+    
+       if ((memcmp(mic, skb->data + skb->len - 8, 8) != 0)||(ieee->force_mic_error)) {
+               struct rtllib_hdr_4addr *hdr;
+               hdr = (struct rtllib_hdr_4addr *) skb->data;
+               printk(KERN_DEBUG "%s: Michael MIC verification failed for "
+                      "MSDU from " MAC_FMT " keyidx=%d\n",
+                      skb->dev ? skb->dev->name : "N/A", MAC_ARG(hdr->addr2),
+                      keyidx);
+                printk("%d, force_mic_error = %d\n", (memcmp(mic, skb->data + skb->len - 8, 8) != 0),\
+                        ieee->force_mic_error); 
+               if (skb->dev) {
+                        printk("skb->dev != NULL\n");
+                       rtllib_michael_mic_failure(skb->dev, hdr, keyidx);
+                }
+               tkey->dot11RSNAStatsTKIPLocalMICFailures++;
+                ieee->force_mic_error = false;
+               return -1;
+       }
+
+       /* Update TSC counters for RX now that the packet verification has
+        * completed. */
+       tkey->rx_iv32 = tkey->rx_iv32_new;
+       tkey->rx_iv16 = tkey->rx_iv16_new;
+
+       skb_trim(skb, skb->len - 8);
+
+       return 0;
+}
+
+
+static int rtllib_tkip_set_key(void *key, int len, u8 *seq, void *priv)
+{
+       struct rtllib_tkip_data *tkey = priv;
+       int keyidx;
+#if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) )
+       struct crypto_tfm *tfm = tkey->tx_tfm_michael;
+       struct crypto_tfm *tfm2 = tkey->tx_tfm_arc4;
+       struct crypto_tfm *tfm3 = tkey->rx_tfm_michael;
+       struct crypto_tfm *tfm4 = tkey->rx_tfm_arc4;
+#else
+       struct crypto_hash *tfm = tkey->tx_tfm_michael;
+       struct crypto_blkcipher *tfm2 = tkey->tx_tfm_arc4;
+       struct crypto_hash *tfm3 = tkey->rx_tfm_michael;
+       struct crypto_blkcipher *tfm4 = tkey->rx_tfm_arc4;
+#endif
+
+       keyidx = tkey->key_idx;
+       memset(tkey, 0, sizeof(*tkey));
+       tkey->key_idx = keyidx;
+#if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) )
+       tkey->tx_tfm_michael = tfm;
+       tkey->tx_tfm_arc4 = tfm2;
+       tkey->rx_tfm_michael = tfm3;
+       tkey->rx_tfm_arc4 = tfm4;
+#else
+       tkey->tx_tfm_michael = tfm;
+       tkey->tx_tfm_arc4 = tfm2;
+       tkey->rx_tfm_michael = tfm3;
+       tkey->rx_tfm_arc4 = tfm4;
+#endif
+
+       if (len == TKIP_KEY_LEN) {
+               memcpy(tkey->key, key, TKIP_KEY_LEN);
+               tkey->key_set = 1;
+               tkey->tx_iv16 = 1; /* TSC is initialized to 1 */
+               if (seq) {
+                       tkey->rx_iv32 = (seq[5] << 24) | (seq[4] << 16) |
+                               (seq[3] << 8) | seq[2];
+                       tkey->rx_iv16 = (seq[1] << 8) | seq[0];
+               }
+       } else if (len == 0)
+               tkey->key_set = 0;
+       else
+               return -1;
+
+       return 0;
+}
+
+
+static int rtllib_tkip_get_key(void *key, int len, u8 *seq, void *priv)
+{
+       struct rtllib_tkip_data *tkey = priv;
+
+       if (len < TKIP_KEY_LEN)
+               return -1;
+
+       if (!tkey->key_set)
+               return 0;
+       memcpy(key, tkey->key, TKIP_KEY_LEN);
+
+       if (seq) {
+               /* Return the sequence number of the last transmitted frame. */
+               u16 iv16 = tkey->tx_iv16;
+               u32 iv32 = tkey->tx_iv32;
+               if (iv16 == 0)
+                       iv32--;
+               iv16--;
+               seq[0] = tkey->tx_iv16;
+               seq[1] = tkey->tx_iv16 >> 8;
+               seq[2] = tkey->tx_iv32;
+               seq[3] = tkey->tx_iv32 >> 8;
+               seq[4] = tkey->tx_iv32 >> 16;
+               seq[5] = tkey->tx_iv32 >> 24;
+       }
+
+       return TKIP_KEY_LEN;
+}
+
+
+static char * rtllib_tkip_print_stats(char *p, void *priv)
+{
+       struct rtllib_tkip_data *tkip = priv;
+       p += sprintf(p, "key[%d] alg=TKIP key_set=%d "
+                    "tx_pn=%02x%02x%02x%02x%02x%02x "
+                    "rx_pn=%02x%02x%02x%02x%02x%02x "
+                    "replays=%d icv_errors=%d local_mic_failures=%d\n",
+                    tkip->key_idx, tkip->key_set,
+                    (tkip->tx_iv32 >> 24) & 0xff,
+                    (tkip->tx_iv32 >> 16) & 0xff,
+                    (tkip->tx_iv32 >> 8) & 0xff,
+                    tkip->tx_iv32 & 0xff,
+                    (tkip->tx_iv16 >> 8) & 0xff,
+                    tkip->tx_iv16 & 0xff,
+                    (tkip->rx_iv32 >> 24) & 0xff,
+                    (tkip->rx_iv32 >> 16) & 0xff,
+                    (tkip->rx_iv32 >> 8) & 0xff,
+                    tkip->rx_iv32 & 0xff,
+                    (tkip->rx_iv16 >> 8) & 0xff,
+                    tkip->rx_iv16 & 0xff,
+                    tkip->dot11RSNAStatsTKIPReplays,
+                    tkip->dot11RSNAStatsTKIPICVErrors,
+                    tkip->dot11RSNAStatsTKIPLocalMICFailures);
+       return p;
+}
+
+
+static struct rtllib_crypto_ops rtllib_crypt_tkip = {
+       .name                   = "TKIP",
+       .init                   = rtllib_tkip_init,
+       .deinit                 = rtllib_tkip_deinit,
+       .encrypt_mpdu           = rtllib_tkip_encrypt,
+       .decrypt_mpdu           = rtllib_tkip_decrypt,
+       .encrypt_msdu           = rtllib_michael_mic_add,
+       .decrypt_msdu           = rtllib_michael_mic_verify,
+       .set_key                = rtllib_tkip_set_key,
+       .get_key                = rtllib_tkip_get_key,
+       .print_stats            = rtllib_tkip_print_stats,
+       .extra_prefix_len       = 4 + 4, /* IV + ExtIV */
+       .extra_postfix_len      = 8 + 4, /* MIC + ICV */
+       .owner                  = THIS_MODULE,
+};
+
+
+int __init rtllib_crypto_tkip_init(void)
+{
+       return rtllib_register_crypto_ops(&rtllib_crypt_tkip);
+}
+
+
+void __exit rtllib_crypto_tkip_exit(void)
+{
+       rtllib_unregister_crypto_ops(&rtllib_crypt_tkip);
+}
+
+void rtllib_tkip_null(void)
+{
+        return;
+}
+
+#ifndef BUILT_IN_RTLLIB
+EXPORT_SYMBOL_RSL(rtllib_tkip_null);
+
+module_init(rtllib_crypto_tkip_init);
+module_exit(rtllib_crypto_tkip_exit);
+#endif
diff --git a/ubuntu/rtl8192se/rtllib/rtllib_crypt_wep.c b/ubuntu/rtl8192se/rtllib/rtllib_crypt_wep.c
new file mode 100644 (file)
index 0000000..eef8738
--- /dev/null
@@ -0,0 +1,404 @@
+/*
+ * Host AP crypt: host-based WEP encryption implementation for Host AP driver
+ *
+ * Copyright (c) 2002-2004, Jouni Malinen <jkmaline@cc.hut.fi>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation. See README and COPYING for
+ * more details.
+ */
+
+#include <linux/version.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/slab.h>
+#include <linux/random.h>
+#include <linux/skbuff.h>
+#include <asm/string.h>
+#ifdef _RTL8192_EXT_PATCH_     
+#include <linux/etherdevice.h>
+#endif
+#include "rtllib.h"
+
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,20))
+#endif
+
+
+#if defined(BUILT_IN_CRYPTO) || (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
+#include "rtl_crypto.h"
+#else
+#include <linux/crypto.h>
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) 
+    #include <asm/scatterlist.h>
+#else
+    #include <linux/scatterlist.h>
+#endif
+#include <linux/crc32.h>
+/*
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
+#include "rtl_crypto.h"
+#else
+#include <linux/crypto.h>
+#endif
+
+#include <asm/scatterlist.h>
+#include <linux/crc32.h>
+*/
+#ifndef BUILT_IN_RTLLIB
+MODULE_AUTHOR("Jouni Malinen");
+MODULE_DESCRIPTION("Host AP crypt: WEP");
+MODULE_LICENSE("GPL");
+#endif
+struct prism2_wep_data {
+       u32 iv;
+#define WEP_KEY_LEN 13
+       u8 key[WEP_KEY_LEN + 1];
+       u8 key_len;
+       u8 key_idx;
+       #if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) )
+       struct crypto_tfm *tfm;
+       #else
+        struct crypto_blkcipher *tx_tfm;
+        struct crypto_blkcipher *rx_tfm;
+        #endif
+};
+
+
+static void * prism2_wep_init(int keyidx)
+{
+       struct prism2_wep_data *priv;
+
+       priv = kmalloc(sizeof(*priv), GFP_ATOMIC);
+       if (priv == NULL)
+               goto fail;
+       memset(priv, 0, sizeof(*priv));
+       priv->key_idx = keyidx;
+
+       #if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) )
+       priv->tfm = crypto_alloc_tfm("arc4", 0);
+       if (priv->tfm == NULL) {
+               printk(KERN_DEBUG "rtllib_crypt_wep: could not allocate "
+                      "crypto API arc4\n");
+               goto fail;
+       }
+       #else
+       priv->tx_tfm = crypto_alloc_blkcipher("ecb(arc4)", 0, CRYPTO_ALG_ASYNC);
+        if (IS_ERR(priv->tx_tfm)) {
+                printk(KERN_DEBUG "rtllib_crypt_wep: could not allocate "
+                       "crypto API arc4\n");
+                priv->tx_tfm = NULL;
+                goto fail;
+        }
+        priv->rx_tfm = crypto_alloc_blkcipher("ecb(arc4)", 0, CRYPTO_ALG_ASYNC);
+        if (IS_ERR(priv->rx_tfm)) {
+                printk(KERN_DEBUG "rtllib_crypt_wep: could not allocate "
+                       "crypto API arc4\n");
+                priv->rx_tfm = NULL;
+                goto fail;
+        }
+        #endif
+
+       /* start WEP IV from a random value */
+       get_random_bytes(&priv->iv, 4);
+
+       return priv;
+
+fail:
+       #if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) )
+       if (priv) {
+               if (priv->tfm)
+                       crypto_free_tfm(priv->tfm);
+               kfree(priv);
+       }
+       #else
+       if (priv) {
+                if (priv->tx_tfm)
+                        crypto_free_blkcipher(priv->tx_tfm);
+                if (priv->rx_tfm)
+                        crypto_free_blkcipher(priv->rx_tfm);
+                kfree(priv);
+        }
+        #endif
+       return NULL;
+}
+
+
+static void prism2_wep_deinit(void *priv)
+{
+       struct prism2_wep_data *_priv = priv;
+       #if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) )
+       if (_priv && _priv->tfm)
+               crypto_free_tfm(_priv->tfm);
+       #else
+       if (_priv) {
+                if (_priv->tx_tfm)
+                        crypto_free_blkcipher(_priv->tx_tfm);
+                if (_priv->rx_tfm)
+                        crypto_free_blkcipher(_priv->rx_tfm);
+        }
+        #endif
+       kfree(priv);
+}
+
+/* Perform WEP encryption on given skb that has at least 4 bytes of headroom
+ * for IV and 4 bytes of tailroom for ICV. Both IV and ICV will be transmitted,
+ * so the payload length increases with 8 bytes.
+ *
+ * WEP frame payload: IV + TX key idx, RC4(data), ICV = RC4(CRC32(data))
+ */
+static int prism2_wep_encrypt(struct sk_buff *skb, int hdr_len, void *priv)
+{
+       struct prism2_wep_data *wep = priv;
+       u32 klen, len;
+       u8 key[WEP_KEY_LEN + 3];
+       u8 *pos;
+       cb_desc *tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE);
+       #if ( !defined(BUILT_IN_CRYPTO) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)) || (OPENSUSE_SLED)) )
+       struct blkcipher_desc desc = {.tfm = wep->tx_tfm};
+       #endif
+       u32 crc;
+       u8 *icv;
+#ifdef _RTL8192_EXT_PATCH_     
+       u8 broadcastaddr[6] = {0xff,0xff,0xff,0xff,0xff,0xff};
+       struct rtllib_hdr_3addr* tmp_header = (struct rtllib_hdr_3addr*)(skb->data);
+       u8 is_broadcast_data = 0;
+       u8 is_multicast_data = 0;
+#endif
+       struct scatterlist sg;
+       if (skb_headroom(skb) < 4 || skb_tailroom(skb) < 4 ||
+           skb->len < hdr_len){
+               printk("Error!!!headroom=%d tailroom=%d skblen=%d hdr_len=%d\n",skb_headroom(skb),skb_tailroom(skb),skb->len,hdr_len);
+               return -1;
+       }
+#ifdef _RTL8192_EXT_PATCH_     
+       if(tcb_desc->badhoc==0){
+               if(memcmp(tmp_header->addr1,broadcastaddr,6) == 0){
+                       is_broadcast_data = 1;
+                       tcb_desc->bHwSec = 0;
+               }
+               if(is_multicast_ether_addr(tmp_header->addr1)){
+                       is_multicast_data = 1;
+                       tcb_desc->bHwSec = 0;
+               }
+       }
+#endif
+       len = skb->len - hdr_len;
+       pos = skb_push(skb, 4);
+       memmove(pos, pos + 4, hdr_len);
+       pos += hdr_len;
+
+       klen = 3 + wep->key_len;
+
+       wep->iv++;
+
+       /* Fluhrer, Mantin, and Shamir have reported weaknesses in the key
+        * scheduling algorithm of RC4. At least IVs (KeyByte + 3, 0xff, N)
+        * can be used to speedup attacks, so avoid using them. */
+       if ((wep->iv & 0xff00) == 0xff00) {
+               u8 B = (wep->iv >> 16) & 0xff;
+               if (B >= 3 && B < klen)
+                       wep->iv += 0x0100;
+       }
+
+       /* Prepend 24-bit IV to RC4 key and TX frame */
+       *pos++ = key[0] = (wep->iv >> 16) & 0xff;
+       *pos++ = key[1] = (wep->iv >> 8) & 0xff;
+       *pos++ = key[2] = wep->iv & 0xff;
+       *pos++ = wep->key_idx << 6;
+
+       /* Copy rest of the WEP key (the secret part) */
+       memcpy(key + 3, wep->key, wep->key_len);
+
+       if (!tcb_desc->bHwSec)
+       {
+       
+               /* Append little-endian CRC32 and encrypt it to produce ICV */
+       #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
+               crc = ~crc32_le(~0, pos, len);
+       #else
+               crc = ~ether_crc_le(len, pos);
+       #endif
+               icv = skb_put(skb, 4);
+               icv[0] = crc;
+               icv[1] = crc >> 8;
+               icv[2] = crc >> 16;
+               icv[3] = crc >> 24;
+               
+       #if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
+               sg.page = virt_to_page(pos);
+               sg.offset = offset_in_page(pos);
+               sg.length = len + 4;
+       #else
+               sg_init_one(&sg, pos, len+4);
+       #endif
+       #if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) )
+               crypto_cipher_setkey(wep->tfm, key, klen);
+               crypto_cipher_encrypt(wep->tfm, &sg, &sg, len + 4);
+               return 0;
+       #else
+               crypto_blkcipher_setkey(wep->tx_tfm, key, klen);
+               return crypto_blkcipher_encrypt(&desc, &sg, &sg, len + 4);
+       #endif
+       }
+
+       return 0;
+}
+
+
+/* Perform WEP decryption on given buffer. Buffer includes whole WEP part of
+ * the frame: IV (4 bytes), encrypted payload (including SNAP header),
+ * ICV (4 bytes). len includes both IV and ICV.
+ *
+ * Returns 0 if frame was decrypted successfully and ICV was correct and -1 on
+ * failure. If frame is OK, IV and ICV will be removed.
+ */
+static int prism2_wep_decrypt(struct sk_buff *skb, int hdr_len, void *priv)
+{
+       struct prism2_wep_data *wep = priv;
+       u32  klen, plen;
+       u8 key[WEP_KEY_LEN + 3];
+       u8 keyidx, *pos;
+       cb_desc *tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE);
+       #if ( !defined(BUILT_IN_CRYPTO) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)) || (OPENSUSE_SLED)) )
+       struct blkcipher_desc desc = {.tfm = wep->rx_tfm};
+       #endif
+       u32 crc;
+       u8 icv[4];
+       struct scatterlist sg;
+       if (skb->len < hdr_len + 8)
+               return -1;
+
+       pos = skb->data + hdr_len;
+       key[0] = *pos++;
+       key[1] = *pos++;
+       key[2] = *pos++;
+       keyidx = *pos++ >> 6;
+       if (keyidx != wep->key_idx)
+               return -1;
+
+       klen = 3 + wep->key_len;
+
+       /* Copy rest of the WEP key (the secret part) */
+       memcpy(key + 3, wep->key, wep->key_len);
+
+       /* Apply RC4 to data and compute CRC32 over decrypted data */
+       plen = skb->len - hdr_len - 8;
+
+       if (!tcb_desc->bHwSec)
+       {
+       #if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
+               sg.page = virt_to_page(pos);
+               sg.offset = offset_in_page(pos);
+               sg.length = plen + 4;
+       #else
+               sg_init_one(&sg, pos, plen+4);
+       #endif
+       #if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) )
+               crypto_cipher_setkey(wep->tfm, key, klen);
+               crypto_cipher_decrypt(wep->tfm, &sg, &sg, plen + 4);
+       #else
+               crypto_blkcipher_setkey(wep->rx_tfm, key, klen);
+               if (crypto_blkcipher_decrypt(&desc, &sg, &sg, plen + 4))
+                       return -7;
+       #endif
+       #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
+               crc = ~crc32_le(~0, pos, plen);
+       #else
+               crc = ~ether_crc_le(plen, pos);
+       #endif
+               icv[0] = crc;
+               icv[1] = crc >> 8;
+               icv[2] = crc >> 16;
+               icv[3] = crc >> 24;
+               if (memcmp(icv, pos + plen, 4) != 0) {
+                       /* ICV mismatch - drop frame */
+                       return -2;
+               }
+       }
+       /* Remove IV and ICV */
+       memmove(skb->data + 4, skb->data, hdr_len);
+       skb_pull(skb, 4);
+       skb_trim(skb, skb->len - 4);
+
+       return 0;
+}
+
+
+static int prism2_wep_set_key(void *key, int len, u8 *seq, void *priv)
+{
+       struct prism2_wep_data *wep = priv;
+
+       if (len < 0 || len > WEP_KEY_LEN)
+               return -1;
+
+       memcpy(wep->key, key, len);
+       wep->key_len = len;
+
+       return 0;
+}
+
+
+static int prism2_wep_get_key(void *key, int len, u8 *seq, void *priv)
+{
+       struct prism2_wep_data *wep = priv;
+
+       if (len < wep->key_len)
+               return -1;
+
+       memcpy(key, wep->key, wep->key_len);
+
+       return wep->key_len;
+}
+
+
+static char * prism2_wep_print_stats(char *p, void *priv)
+{
+       struct prism2_wep_data *wep = priv;
+       p += sprintf(p, "key[%d] alg=WEP len=%d\n",
+                    wep->key_idx, wep->key_len);
+       return p;
+}
+
+
+static struct rtllib_crypto_ops rtllib_crypt_wep = {
+       .name                   = "WEP",
+       .init                   = prism2_wep_init,
+       .deinit                 = prism2_wep_deinit,
+       .encrypt_mpdu           = prism2_wep_encrypt,
+       .decrypt_mpdu           = prism2_wep_decrypt,
+       .encrypt_msdu           = NULL,
+       .decrypt_msdu           = NULL,
+       .set_key                = prism2_wep_set_key,
+       .get_key                = prism2_wep_get_key,
+       .print_stats            = prism2_wep_print_stats,
+       .extra_prefix_len       = 4, /* IV */
+       .extra_postfix_len      = 4, /* ICV */
+       .owner                  = THIS_MODULE,
+};
+
+
+int __init rtllib_crypto_wep_init(void)
+{
+       return rtllib_register_crypto_ops(&rtllib_crypt_wep);
+}
+
+
+void __exit rtllib_crypto_wep_exit(void)
+{
+       rtllib_unregister_crypto_ops(&rtllib_crypt_wep);
+}
+
+void rtllib_wep_null(void)
+{
+        return;
+}
+
+#ifndef BUILT_IN_RTLLIB
+EXPORT_SYMBOL_RSL(rtllib_wep_null);
+
+module_init(rtllib_crypto_wep_init);
+module_exit(rtllib_crypto_wep_exit);
+#endif
diff --git a/ubuntu/rtl8192se/rtllib/rtllib_module.c b/ubuntu/rtl8192se/rtllib/rtllib_module.c
new file mode 100644 (file)
index 0000000..b63c8e2
--- /dev/null
@@ -0,0 +1,575 @@
+/*******************************************************************************
+
+  Copyright(c) 2004 Intel Corporation. All rights reserved.
+
+  Portions of this file are based on the WEP enablement code provided by the
+  Host AP project hostap-drivers v0.1.3
+  Copyright (c) 2001-2002, SSH Communications Security Corp and Jouni Malinen
+  <jkmaline@cc.hut.fi>
+  Copyright (c) 2002-2003, Jouni Malinen <jkmaline@cc.hut.fi>
+
+  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., 59
+  Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
+  The full GNU General Public License is included in this distribution in the
+  file called LICENSE.
+
+  Contact Information:
+  James P. Ketrenos <ipw2100-admin@linux.intel.com>
+  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
+
+*******************************************************************************/
+
+#include <linux/compiler.h>
+#include <linux/errno.h>
+#include <linux/if_arp.h>
+#include <linux/in6.h>
+#include <linux/in.h>
+#include <linux/ip.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/netdevice.h>
+#include <linux/pci.h>
+#include <linux/proc_fs.h>
+#include <linux/skbuff.h>
+#include <linux/slab.h>
+#include <linux/tcp.h>
+#include <linux/types.h>
+#include <linux/version.h>
+#include <linux/wireless.h>
+#include <linux/etherdevice.h>
+#include <asm/uaccess.h>
+#include <net/arp.h>
+
+#include "rtllib.h"
+
+
+#ifndef BUILT_IN_RTLLIB
+MODULE_DESCRIPTION("802.11 data/management/control stack");
+MODULE_AUTHOR("Copyright (C) 2004 Intel Corporation <jketreno@linux.intel.com>");
+MODULE_LICENSE("GPL");
+#endif
+
+#define DRV_NAME "rtllib"
+
+
+#if defined CONFIG_CRDA && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30))
+struct cfg80211_ops rtllib_config_ops = { };
+void *rtllib_wiphy_privid = &rtllib_wiphy_privid;
+
+#endif
+
+void _setup_timer( struct timer_list* ptimer, void* fun, unsigned long data )
+{
+   ptimer->function = fun;
+   ptimer->data = data;
+   init_timer( ptimer );
+}
+
+#ifdef _RTL8192_EXT_PATCH_
+static inline int rtllib_mesh_networks_allocate(struct rtllib_device *ieee)
+{
+       if (ieee->mesh_networks)
+               return 0;
+
+       ieee->mesh_networks = kmalloc(
+               MAX_NETWORK_COUNT * sizeof(struct rtllib_network),
+               GFP_KERNEL);
+       
+       if (!ieee->mesh_networks) {
+               printk(KERN_WARNING "%s: Out of memory allocating beacons\n",
+                      ieee->dev->name);
+               return -ENOMEM;
+       }
+
+       memset(ieee->mesh_networks, 0,
+              MAX_NETWORK_COUNT * sizeof(struct rtllib_network));
+
+       return 0;
+}
+
+static inline void rtllib_mesh_networks_free(struct rtllib_device *ieee)
+{
+       if (!ieee->mesh_networks)
+               return;
+       kfree(ieee->mesh_networks);
+       ieee->mesh_networks = NULL;
+}
+#endif
+
+static inline int rtllib_networks_allocate(struct rtllib_device *ieee)
+{
+       if (ieee->networks)
+               return 0;
+
+#ifndef RTK_DMP_PLATFORM
+       ieee->networks = kmalloc(
+               MAX_NETWORK_COUNT * sizeof(struct rtllib_network),
+               GFP_KERNEL);
+#else
+       ieee->networks = dvr_malloc(MAX_NETWORK_COUNT * sizeof(struct rtllib_network));
+#endif
+       if (!ieee->networks) {
+               printk(KERN_WARNING "%s: Out of memory allocating beacons\n",
+                      ieee->dev->name);
+               return -ENOMEM;
+       }
+
+       memset(ieee->networks, 0,
+              MAX_NETWORK_COUNT * sizeof(struct rtllib_network));
+
+       return 0;
+}
+
+static inline void rtllib_networks_free(struct rtllib_device *ieee)
+{
+       if (!ieee->networks)
+               return;
+#ifndef RTK_DMP_PLATFORM
+       kfree(ieee->networks);
+#else
+       dvr_free(ieee->networks);
+#endif
+       ieee->networks = NULL;
+}
+
+static inline void rtllib_networks_initialize(struct rtllib_device *ieee)
+{
+       int i;
+
+       INIT_LIST_HEAD(&ieee->network_free_list);
+       INIT_LIST_HEAD(&ieee->network_list);
+       for (i = 0; i < MAX_NETWORK_COUNT; i++)
+               list_add_tail(&ieee->networks[i].list, &ieee->network_free_list);
+#ifdef _RTL8192_EXT_PATCH_
+       INIT_LIST_HEAD(&ieee->mesh_network_free_list);
+       INIT_LIST_HEAD(&ieee->mesh_network_list);
+       for (i = 0; i < MAX_NETWORK_COUNT; i++)
+               list_add_tail(&ieee->mesh_networks[i].list, &ieee->mesh_network_free_list);
+#endif
+}
+
+#if defined CONFIG_CRDA && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30))
+static bool rtllib_wdev_alloc(struct rtllib_device *ieee, int sizeof_priv)
+{
+       int priv_size;
+       struct rtllib_device *rtllib = NULL;
+
+       priv_size = ALIGN(sizeof(struct rtllib_device),NETDEV_ALIGN) + sizeof_priv;
+
+       ieee->wdev.wiphy = wiphy_new(&rtllib_config_ops, priv_size);
+       if (!ieee->wdev.wiphy) {
+               RTLLIB_ERROR("Unable to allocate wiphy.\n");
+               goto out_err_new;
+       }
+
+       rtllib = (struct rtllib_device *)wiphy_priv(ieee->wdev.wiphy);
+       rtllib->dev = ieee->dev;
+       
+       ieee->dev->ieee80211_ptr = &ieee->wdev;
+       ieee->wdev.iftype = NL80211_IFTYPE_STATION;
+
+       /* Fill-out wiphy structure bits we know...  Not enough info
+        *            here to call set_wiphy_dev or set MAC address or channel info
+        *                       -- have to do that in ->ndo_init... */
+       ieee->wdev.wiphy->privid = rtllib_wiphy_privid;
+
+       ieee->wdev.wiphy->max_scan_ssids = 1;
+       ieee->wdev.wiphy->max_scan_ie_len = 0;
+       ieee->wdev.wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | BIT(NL80211_IFTYPE_ADHOC);
+
+       return true;
+
+out_err_new:
+       wiphy_free(ieee->wdev.wiphy);
+       return false;
+}
+#endif
+
+struct net_device *alloc_rtllib(int sizeof_priv)
+{
+       struct rtllib_device *ieee = NULL;
+       struct net_device *dev;
+       int i,err;
+
+       RTLLIB_DEBUG_INFO("Initializing...\n");
+
+       dev = alloc_etherdev(sizeof(struct rtllib_device) + sizeof_priv);
+       if (!dev) {
+               RTLLIB_ERROR("Unable to network device.\n");
+               goto failed;
+       }
+       ieee = (struct rtllib_device *)netdev_priv_rsl(dev);
+       memset(ieee, 0, sizeof(struct rtllib_device)+sizeof_priv);
+       ieee->dev = dev;
+
+#if defined CONFIG_CRDA && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30))
+       if(!rtllib_wdev_alloc(ieee, sizeof_priv))
+               goto failed;
+#endif
+
+       err = rtllib_networks_allocate(ieee);
+       if (err) {
+               RTLLIB_ERROR("Unable to allocate beacon storage: %d\n",
+                               err);
+               goto failed;
+       }
+#ifdef _RTL8192_EXT_PATCH_
+       err = rtllib_mesh_networks_allocate(ieee);
+       if (err) {
+               RTLLIB_ERROR("Unable to allocate mesh_beacon storage: %d\n",
+                               err);
+               goto failed;
+       }
+#endif
+       rtllib_networks_initialize(ieee);
+
+
+       /* Default fragmentation threshold is maximum payload size */
+       ieee->fts = DEFAULT_FTS;
+       ieee->scan_age = DEFAULT_MAX_SCAN_AGE;
+       ieee->open_wep = 1;
+
+       /* Default to enabling full open WEP with host based encrypt/decrypt */
+       ieee->host_encrypt = 1;
+       ieee->host_decrypt = 1;
+       ieee->ieee802_1x = 1; /* Default to supporting 802.1x */
+
+       INIT_LIST_HEAD(&ieee->crypt_deinit_list);
+       _setup_timer(&ieee->crypt_deinit_timer,
+                   rtllib_crypt_deinit_handler,
+                   (unsigned long) ieee);
+       ieee->rtllib_ap_sec_type = rtllib_ap_sec_type;
+
+       spin_lock_init(&ieee->lock);
+       spin_lock_init(&ieee->wpax_suitlist_lock);
+       spin_lock_init(&ieee->bw_spinlock);
+       spin_lock_init(&ieee->reorder_spinlock);
+       atomic_set(&(ieee->atm_chnlop), 0);
+       atomic_set(&(ieee->atm_swbw), 0);
+
+       ieee->bHalfNMode = false;
+       ieee->wpa_enabled = 0;
+       ieee->tkip_countermeasures = 0;
+       ieee->drop_unencrypted = 0;
+       ieee->privacy_invoked = 0;
+       ieee->ieee802_1x = 1;
+       ieee->raw_tx = 0;
+       ieee->hwsec_active = 0; 
+
+#ifdef _RTL8192_EXT_PATCH_
+       for (i=0; i<MAX_MP; i++)
+       {
+               ieee->cryptlist[i] = (struct rtllib_crypt_data_list*) kmalloc(sizeof(struct rtllib_crypt_data_list), GFP_KERNEL);
+               if (NULL == ieee->cryptlist[i])
+                {
+                       printk("error kmalloc cryptlist\n");
+                       goto failed;
+               }
+               memset(ieee->cryptlist[i], 0, sizeof(struct rtllib_crypt_data_list));
+       }
+       memset(ieee->swmeshcamtable,0,sizeof(SW_CAM_TABLE)*32);
+#endif 
+       memset(ieee->swcamtable,0,sizeof(SW_CAM_TABLE)*32);
+       rtllib_softmac_init(ieee);
+       
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13))
+       ieee->pHTInfo = (RT_HIGH_THROUGHPUT*)kzalloc(sizeof(RT_HIGH_THROUGHPUT), GFP_KERNEL);
+#else
+       ieee->pHTInfo = (RT_HIGH_THROUGHPUT*)kmalloc(sizeof(RT_HIGH_THROUGHPUT), GFP_KERNEL);
+       memset(ieee->pHTInfo,0,sizeof(RT_HIGH_THROUGHPUT));
+#endif
+       if (ieee->pHTInfo == NULL)
+       {
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, "can't alloc memory for HTInfo\n");
+               return NULL;
+       }       
+       HTUpdateDefaultSetting(ieee);
+       HTInitializeHTInfo(ieee); 
+       TSInitialize(ieee);
+#if 0
+       INIT_WORK_RSL(&ieee->ht_onAssRsp, (void(*)(void*)) HTOnAssocRsp_wq, ieee);
+#endif
+       for (i = 0; i < IEEE_IBSS_MAC_HASH_SIZE; i++)
+               INIT_LIST_HEAD(&ieee->ibss_mac_hash[i]);
+
+#ifdef _RTL8192_EXT_PATCH_
+       for (i = 0; i < IEEE_MESH_MAC_HASH_SIZE; i++)
+               INIT_LIST_HEAD(&ieee->mesh_mac_hash[i]);
+#endif 
+       
+       for (i = 0; i < 17; i++) {
+         ieee->last_rxseq_num[i] = -1;
+         ieee->last_rxfrag_num[i] = -1;
+         ieee->last_packet_time[i] = 0;
+       }
+
+       rtllib_tkip_null();
+       rtllib_wep_null();
+       rtllib_ccmp_null();
+
+       return dev;
+
+ failed:
+#ifdef _RTL8192_EXT_PATCH_
+       for (i=0; i<MAX_MP; i++)
+       {
+               if (ieee->cryptlist[i]==NULL){
+                       continue;
+               }
+               kfree(ieee->cryptlist[i]);
+               ieee->cryptlist[i] = NULL;
+
+       }
+#endif
+
+       if (dev)
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0))
+               free_netdev(dev);
+#else
+               kfree(dev);
+#endif
+       return NULL;
+}
+
+
+void free_rtllib(struct net_device *dev)
+{
+       struct rtllib_device *ieee = (struct rtllib_device *)netdev_priv_rsl(dev);
+       int i;
+#ifdef _RTL8192_EXT_PATCH_
+       int j;
+       struct list_head *p, *q;
+       struct rtllib_crypt_data *crypt = NULL;
+#endif 
+#if 1  
+       if (ieee->pHTInfo != NULL)
+       {
+               kfree(ieee->pHTInfo);
+               ieee->pHTInfo = NULL;
+       }
+#endif 
+       rtllib_softmac_free(ieee);
+       del_timer_sync(&ieee->crypt_deinit_timer);
+       rtllib_crypt_deinit_entries(ieee, 1);
+
+#ifdef _RTL8192_EXT_PATCH_
+       for (j=0;j<MAX_MP; j++)
+       {
+               if (ieee->cryptlist[j] == NULL)
+                       continue;
+               for (i = 0; i < WEP_KEYS; i++) {
+                       crypt = ieee->cryptlist[j]->crypt[i];
+                       
+                       if (crypt) 
+                       {
+                               if (crypt->ops) {
+                                       crypt->ops->deinit(crypt->priv);
+                                       printk("===>%s():j is %d,i is %d\n",__FUNCTION__,j,i);
+#ifndef BUILT_IN_RTLLIB
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
+                                       module_put(crypt->ops->owner);
+#else
+                                       __MOD_DEC_USE_COUNT(crypt->ops->owner);
+#endif                         
+#endif
+                               }
+                               kfree(crypt);
+                               ieee->cryptlist[j]->crypt[i] = NULL;
+                       }
+               }
+               kfree(ieee->cryptlist[j]);
+       }
+       for (i = 0; i < WEP_KEYS; i++) {
+               crypt = ieee->sta_crypt[i];
+               if (crypt) 
+               {
+                       if (crypt->ops) {
+                               crypt->ops->deinit(crypt->priv);
+#ifndef BUILT_IN_RTLLIB
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
+                               module_put(crypt->ops->owner);
+#else
+                               __MOD_DEC_USE_COUNT(crypt->ops->owner);
+#endif                         
+#endif
+                       }
+                       kfree(crypt);
+               }
+               ieee->sta_crypt[i] = NULL;
+       }
+#else
+       for (i = 0; i < WEP_KEYS; i++) {
+               struct rtllib_crypt_data *crypt = ieee->crypt[i];
+               if (crypt) {
+                       if (crypt->ops) {
+                               crypt->ops->deinit(crypt->priv);
+#ifndef BUILT_IN_RTLLIB
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
+                               module_put(crypt->ops->owner);
+#else
+                               __MOD_DEC_USE_COUNT(crypt->ops->owner);
+#endif                         
+#endif
+                       }
+                       kfree(crypt);
+                       ieee->crypt[i] = NULL;
+               }
+       }
+#endif
+
+       rtllib_networks_free(ieee);
+#ifdef _RTL8192_EXT_PATCH_
+       rtllib_mesh_networks_free(ieee);
+#endif
+#if 0  
+       for (i = 0; i < IEEE_IBSS_MAC_HASH_SIZE; i++) {
+               list_for_each_safe(p, q, &ieee->ibss_mac_hash[i]) {
+                       kfree(list_entry(p, struct ieee_ibss_seq, list));
+                       list_del(p);
+               }
+       }
+
+#endif
+#ifdef _RTL8192_EXT_PATCH_
+       for (i = 0; i < IEEE_MESH_MAC_HASH_SIZE; i++) {
+               list_for_each_safe(p, q, &ieee->mesh_mac_hash[i]) {
+                       kfree(list_entry(p, struct ieee_mesh_seq, list));
+                       list_del(p);
+               }
+       }
+#endif
+#if defined (RTL8192S_WAPI_SUPPORT)
+       if (ieee->WapiSupport)
+       {
+               WapiFreeAllStaInfo(ieee);
+       }
+#endif
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0))      
+#if defined CONFIG_CRDA && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30))
+       wiphy_unregister(ieee->wdev.wiphy);
+       wiphy_free(ieee->wdev.wiphy);
+#endif
+       free_netdev(dev);
+#else
+       kfree(dev);
+#endif
+}
+
+#ifdef CONFIG_RTLLIB_DEBUG
+
+u32 rtllib_debug_level = 0;
+static int debug = \
+                           RTLLIB_DL_ERR         
+                           ;
+struct proc_dir_entry *rtllib_proc = NULL;
+
+static int show_debug_level(char *page, char **start, off_t offset,
+                           int count, int *eof, void *data)
+{
+       return snprintf(page, count, "0x%08X\n", rtllib_debug_level);
+}
+
+static int store_debug_level(struct file *file, const char *buffer,
+                            unsigned long count, void *data)
+{
+       char buf[] = "0x00000000";
+       unsigned long len = min((unsigned long)sizeof(buf) - 1, count);
+       char *p = (char *)buf;
+       unsigned long val;
+
+       if (copy_from_user(buf, buffer, len))
+               return count;
+       buf[len] = 0;
+       if (p[1] == 'x' || p[1] == 'X' || p[0] == 'x' || p[0] == 'X') {
+               p++;
+               if (p[0] == 'x' || p[0] == 'X')
+                       p++;
+               val = simple_strtoul(p, &p, 16);
+       } else
+               val = simple_strtoul(p, &p, 10);
+       if (p == buf)
+               printk(KERN_INFO DRV_NAME
+                      ": %s is not in hex or decimal form.\n", buf);
+       else
+               rtllib_debug_level = val;
+
+       return strnlen(buf, count);
+}
+
+int __init rtllib_init(void)
+{
+#ifdef CONFIG_RTLLIB_DEBUG
+       struct proc_dir_entry *e;
+
+       rtllib_debug_level = debug;
+#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
+       rtllib_proc = create_proc_entry(DRV_NAME, S_IFDIR, proc_net);
+#else
+       rtllib_proc = create_proc_entry(DRV_NAME, S_IFDIR, init_net.proc_net);
+#endif
+       if (rtllib_proc == NULL) {
+               RTLLIB_ERROR("Unable to create " DRV_NAME
+                               " proc directory\n");
+               return -EIO;
+       }
+       e = create_proc_entry("debug_level", S_IFREG | S_IRUGO | S_IWUSR,
+                             rtllib_proc);
+       if (!e) {
+#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
+               remove_proc_entry(DRV_NAME, proc_net);
+#else
+               remove_proc_entry(DRV_NAME, init_net.proc_net);
+#endif
+               rtllib_proc = NULL;
+               return -EIO;
+       }
+       e->read_proc = show_debug_level;
+       e->write_proc = store_debug_level;
+       e->data = NULL;
+#endif
+
+       return 0;
+}
+
+void __exit rtllib_exit(void)
+{
+#ifdef CONFIG_RTLLIB_DEBUG
+       if (rtllib_proc) {
+               remove_proc_entry("debug_level", rtllib_proc);
+#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
+               remove_proc_entry(DRV_NAME, proc_net);
+#else
+               remove_proc_entry(DRV_NAME, init_net.proc_net);
+#endif
+               rtllib_proc = NULL;
+       }
+#endif
+}
+
+#ifndef BUILT_IN_RTLLIB
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
+#include <linux/moduleparam.h>
+module_param(debug, int, 0444);
+MODULE_PARM_DESC(debug, "debug output mask");
+
+
+module_exit(rtllib_exit);
+module_init(rtllib_init);
+#endif
+
+EXPORT_SYMBOL_RSL(alloc_rtllib);
+EXPORT_SYMBOL_RSL(free_rtllib);
+EXPORT_SYMBOL_RSL(rtllib_debug_level);
+#endif
+#endif
diff --git a/ubuntu/rtl8192se/rtllib/rtllib_rx.c b/ubuntu/rtl8192se/rtllib/rtllib_rx.c
new file mode 100644 (file)
index 0000000..5144a29
--- /dev/null
@@ -0,0 +1,4023 @@
+/*
+ * Original code based Host AP (software wireless LAN access point) driver
+ * for Intersil Prism2/2.5/3 - hostap.o module, common routines
+ *
+ * Copyright (c) 2001-2002, SSH Communications Security Corp and Jouni Malinen
+ * <jkmaline@cc.hut.fi>
+ * Copyright (c) 2002-2003, Jouni Malinen <jkmaline@cc.hut.fi>
+ * Copyright (c) 2004, Intel Corporation
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation. See README and COPYING for
+ * more details.
+ ******************************************************************************
+
+  Few modifications for Realtek's Wi-Fi drivers by 
+  Andrea Merello <andreamrl@tiscali.it>
+  
+  A special thanks goes to Realtek for their support ! 
+
+******************************************************************************/
+
+#include <linux/compiler.h>
+#include <linux/errno.h>
+#include <linux/if_arp.h>
+#include <linux/in6.h>
+#include <linux/in.h>
+#include <linux/ip.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/netdevice.h>
+#include <linux/pci.h>
+#include <linux/proc_fs.h>
+#include <linux/skbuff.h>
+#include <linux/slab.h>
+#include <linux/tcp.h>
+#include <linux/types.h>
+#include <linux/version.h>
+#include <linux/wireless.h>
+#include <linux/etherdevice.h>
+#include <asm/uaccess.h>
+#include <linux/ctype.h>
+
+#include "rtllib.h"
+#ifdef ENABLE_DOT11D
+#include "dot11d.h"
+#endif
+
+#if defined CONFIG_CRDA && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30))
+#include <linux/crc32.h>
+
+struct ieee80211_channel *rtllib_get_channel(struct wiphy *wiphy,
+                                                 int freq)
+{
+       enum ieee80211_band band;
+       struct ieee80211_supported_band *sband;
+       int i;
+
+       for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
+               sband = wiphy->bands[band];
+
+               if (!sband)
+                       continue;
+
+               for (i = 0; i < sband->n_channels; i++) {
+                       if (sband->channels[i].center_freq == freq)
+                               return &sband->channels[i];
+               }
+       }
+
+       return NULL;
+}
+
+int rtllib_channel_to_frequency(int chan)
+{
+       if (chan < 14)
+               return 2407 + chan * 5;
+
+       if (chan == 14)
+               return 2484;
+
+       /* FIXME: 802.11j 17.3.8.3.2 */
+       return (chan + 1000) * 5;
+}
+
+u32 rtllib_parse_elems_crc(u8 *start, size_t len,
+                              struct ieee802_11_elems *elems,
+                              u64 filter, u32 crc)
+{
+       size_t left = len;
+       u8 *pos = start;
+       bool calc_crc = filter != 0;
+
+       memset(elems, 0, sizeof(*elems));
+       elems->ie_start = start;
+       elems->total_len = len;
+
+       while (left >= 2) {
+               u8 id, elen;
+
+               id = *pos++;
+               elen = *pos++;
+               left -= 2;
+
+               if (elen > left)
+                       break;
+
+               if (calc_crc && id < 64 && (filter & BIT(id)))
+                       crc = crc32_be(crc, pos - 2, elen + 2);
+
+               switch (id) {
+               case WLAN_EID_SSID:
+                       elems->ssid = pos;
+                       elems->ssid_len = elen;
+                       break;
+               case WLAN_EID_SUPP_RATES:
+                       elems->supp_rates = pos;
+                       elems->supp_rates_len = elen;
+                       break;
+               case WLAN_EID_FH_PARAMS:
+                       elems->fh_params = pos;
+                       elems->fh_params_len = elen;
+                       break;
+               case WLAN_EID_DS_PARAMS:
+                       elems->ds_params = pos;
+                       elems->ds_params_len = elen;
+                       break;
+               case WLAN_EID_CF_PARAMS:
+                       elems->cf_params = pos;
+                       elems->cf_params_len = elen;
+                       break;
+               case WLAN_EID_TIM:
+                       if (elen >= sizeof(struct ieee80211_tim_ie)) {
+                               elems->tim = (void *)pos;
+                               elems->tim_len = elen;
+                       }
+                       break;
+               case WLAN_EID_IBSS_PARAMS:
+                       elems->ibss_params = pos;
+                       elems->ibss_params_len = elen;
+                       break;
+               case WLAN_EID_CHALLENGE:
+                       elems->challenge = pos;
+                       elems->challenge_len = elen;
+                       break;
+               case WLAN_EID_VENDOR_SPECIFIC:
+                       if (elen >= 4 && pos[0] == 0x00 && pos[1] == 0x50 &&
+                           pos[2] == 0xf2) {
+                               /* Microsoft OUI (00:50:F2) */
+
+                               if (calc_crc)
+                                       crc = crc32_be(crc, pos - 2, elen + 2);
+
+                               if (pos[3] == 1) {
+                                       /* OUI Type 1 - WPA IE */
+                                       elems->wpa = pos;
+                                       elems->wpa_len = elen;
+                               } else if (elen >= 5 && pos[3] == 2) {
+                                       /* OUI Type 2 - WMM IE */
+                                       if (pos[4] == 0) {
+                                               elems->wmm_info = pos;
+                                               elems->wmm_info_len = elen;
+                                       } else if (pos[4] == 1) {
+                                               elems->wmm_param = pos;
+                                               elems->wmm_param_len = elen;
+                                       }
+                               }
+                       }
+                       break;
+               case WLAN_EID_RSN:
+                       elems->rsn = pos;
+                       elems->rsn_len = elen;
+                       break;
+               case WLAN_EID_ERP_INFO:
+                       elems->erp_info = pos;
+                       elems->erp_info_len = elen;
+                       break;
+               case WLAN_EID_EXT_SUPP_RATES:
+                       elems->ext_supp_rates = pos;
+                       elems->ext_supp_rates_len = elen;
+                       break;
+               case WLAN_EID_HT_CAPABILITY:
+                       if (elen >= sizeof(struct ieee80211_ht_cap))
+                               elems->ht_cap_elem = (void *)pos;
+                       break;
+               case WLAN_EID_HT_INFORMATION:
+                       if (elen >= sizeof(struct ieee80211_ht_info))
+                               elems->ht_info_elem = (void *)pos;
+                       break;
+               case WLAN_EID_MESH_ID:
+                       elems->mesh_id = pos;
+                       elems->mesh_id_len = elen;
+                       break;
+               case WLAN_EID_MESH_CONFIG:
+                       elems->mesh_config = pos;
+                       elems->mesh_config_len = elen;
+                       break;
+               case WLAN_EID_PEER_LINK:
+                       elems->peer_link = pos;
+                       elems->peer_link_len = elen;
+                       break;
+               case WLAN_EID_PREQ:
+                       elems->preq = pos;
+                       elems->preq_len = elen;
+                       break;
+               case WLAN_EID_PREP:
+                       elems->prep = pos;
+                       elems->prep_len = elen;
+                       break;
+               case WLAN_EID_PERR:
+                       elems->perr = pos;
+                       elems->perr_len = elen;
+                       break;
+               case WLAN_EID_CHANNEL_SWITCH:
+                       elems->ch_switch_elem = pos;
+                       elems->ch_switch_elem_len = elen;
+                       break;
+               case WLAN_EID_QUIET:
+                       if (!elems->quiet_elem) {
+                               elems->quiet_elem = pos;
+                               elems->quiet_elem_len = elen;
+                       }
+                       elems->num_of_quiet_elem++;
+                       break;
+               case WLAN_EID_COUNTRY:
+                       elems->country_elem = pos;
+                       elems->country_elem_len = elen;
+                       break;
+               case WLAN_EID_PWR_CONSTRAINT:
+                       elems->pwr_constr_elem = pos;
+                       elems->pwr_constr_elem_len = elen;
+                       break;
+               case WLAN_EID_TIMEOUT_INTERVAL:
+                       elems->timeout_int = pos;
+                       elems->timeout_int_len = elen;
+                       break;
+               default:
+                       break;
+               }
+
+               left -= elen;
+               pos += elen;
+       }
+
+       return crc;
+}
+
+void rtllib_parse_elems(u8 *start, size_t len,
+                           struct ieee802_11_elems *elems)
+{
+       rtllib_parse_elems_crc(start, len, elems, 0, 0);
+}
+
+void ieee80211_scan_rx(struct rtllib_device *ieee, struct sk_buff *skb, struct rtllib_rx_stats *rx_status)
+{
+       struct rtllib_hdr_4addr *header = (struct rtllib_hdr_4addr *)skb->data ;
+       struct ieee80211_mgmt *mgmt;
+       struct ieee80211_bss *bss;
+       u8 *elements;
+       struct ieee80211_channel *channel;
+       size_t baselen;
+       int freq;
+       __le16 fc;
+       bool presp, beacon = false;
+       struct ieee802_11_elems elems;
+       s32 signal = 0;
+
+       if (skb->len < 2)
+               return;
+
+       mgmt = (struct ieee80211_mgmt *) skb->data;
+       fc = mgmt->frame_control;
+
+       if (skb->len < 24)
+               return;
+       
+       presp = (WLAN_FC_GET_STYPE(header->frame_ctl) == RTLLIB_STYPE_PROBE_RESP);
+       if (presp) {
+               /* ignore ProbeResp to foreign address */
+               if (memcmp(mgmt->da, ieee->dev->dev_addr, ETH_ALEN))
+                       return ;;
+
+               presp = true;
+               elements = mgmt->u.probe_resp.variable;
+               baselen = offsetof(struct ieee80211_mgmt, u.probe_resp.variable);
+       } else {
+               beacon =  (WLAN_FC_GET_STYPE(header->frame_ctl) == RTLLIB_STYPE_BEACON);
+               baselen = offsetof(struct ieee80211_mgmt, u.beacon.variable);
+               elements = mgmt->u.beacon.variable;
+       }
+
+       if (!presp && !beacon)
+               return;
+
+       if (baselen > skb->len)
+               return;
+
+       rtllib_parse_elems(elements, skb->len - baselen, &elems);
+
+       if (elems.ds_params && elems.ds_params_len == 1)
+               freq = rtllib_channel_to_frequency(elems.ds_params[0]);
+       else
+               return;
+
+       channel = rtllib_get_channel(ieee->wdev.wiphy, freq);
+
+       if (!channel || channel->flags & IEEE80211_CHAN_DISABLED)
+               return;
+
+               signal = rx_status->signal * 100;
+
+       bss = (void *)cfg80211_inform_bss_frame(ieee->wdev.wiphy, channel,
+                                               mgmt, skb->len, signal, GFP_ATOMIC);
+
+       return;
+}
+
+#endif
+
+static inline void rtllib_monitor_rx(struct rtllib_device *ieee,
+                                       struct sk_buff *skb,
+                                       struct rtllib_rx_stats *rx_stats)
+{
+       struct rtllib_hdr_4addr *hdr = (struct rtllib_hdr_4addr *)skb->data;
+       u16 fc = le16_to_cpu(hdr->frame_ctl);
+
+       skb->dev = ieee->dev;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
+        skb_reset_mac_header(skb);
+#else
+        skb->mac.raw = skb->data;
+#endif
+
+       skb_pull(skb, rtllib_get_hdrlen(fc));
+       skb->pkt_type = PACKET_OTHERHOST;
+       skb->protocol = __constant_htons(ETH_P_80211_RAW);
+       memset(skb->cb, 0, sizeof(skb->cb));
+       netif_rx(skb);
+}
+
+
+/* Called only as a tasklet (software IRQ) */
+static struct rtllib_frag_entry *
+rtllib_frag_cache_find(struct rtllib_device *ieee, unsigned int seq,
+                         unsigned int frag, u8 tid,u8 *src, u8 *dst)
+{
+       struct rtllib_frag_entry *entry;
+       int i;
+
+       for (i = 0; i < RTLLIB_FRAG_CACHE_LEN; i++) {
+               entry = &ieee->frag_cache[tid][i];
+               if (entry->skb != NULL &&
+                   time_after(jiffies, entry->first_frag_time + 2 * HZ)) {
+                       RTLLIB_DEBUG_FRAG(
+                               "expiring fragment cache entry "
+                               "seq=%u last_frag=%u\n",
+                               entry->seq, entry->last_frag);
+                       dev_kfree_skb_any(entry->skb);
+                       entry->skb = NULL;
+               }
+
+               if (entry->skb != NULL && entry->seq == seq &&
+                   (entry->last_frag + 1 == frag || frag == -1) &&
+                   memcmp(entry->src_addr, src, ETH_ALEN) == 0 &&
+                   memcmp(entry->dst_addr, dst, ETH_ALEN) == 0)
+                       return entry;
+       }
+
+       return NULL;
+}
+
+/* Called only as a tasklet (software IRQ) */
+static struct sk_buff *
+rtllib_frag_cache_get(struct rtllib_device *ieee,
+                        struct rtllib_hdr_4addr *hdr)
+{
+       struct sk_buff *skb = NULL;
+       u16 fc = le16_to_cpu(hdr->frame_ctl);
+       u16 sc = le16_to_cpu(hdr->seq_ctl);
+       unsigned int frag = WLAN_GET_SEQ_FRAG(sc);
+       unsigned int seq = WLAN_GET_SEQ_SEQ(sc);
+       struct rtllib_frag_entry *entry;
+       struct rtllib_hdr_3addrqos *hdr_3addrqos;
+       struct rtllib_hdr_4addrqos *hdr_4addrqos;
+       u8 tid;
+       
+       if (((fc & RTLLIB_FCTL_DSTODS) == RTLLIB_FCTL_DSTODS)&&RTLLIB_QOS_HAS_SEQ(fc)) {
+         hdr_4addrqos = (struct rtllib_hdr_4addrqos *)hdr;
+         tid = le16_to_cpu(hdr_4addrqos->qos_ctl) & RTLLIB_QCTL_TID;
+         tid = UP2AC(tid);
+         tid ++;
+       } else if (RTLLIB_QOS_HAS_SEQ(fc)) {
+         hdr_3addrqos = (struct rtllib_hdr_3addrqos *)hdr;
+         tid = le16_to_cpu(hdr_3addrqos->qos_ctl) & RTLLIB_QCTL_TID;
+         tid = UP2AC(tid);
+         tid ++;
+       } else {
+         tid = 0;
+       }
+
+       if (frag == 0) {
+               /* Reserve enough space to fit maximum frame length */
+               skb = dev_alloc_skb(ieee->dev->mtu +
+                                   sizeof(struct rtllib_hdr_4addr) +
+                                   8 /* LLC */ +
+                                   2 /* alignment */ +
+                                   8 /* WEP */ + 
+                                   ETH_ALEN /* WDS */ +
+                                   (RTLLIB_QOS_HAS_SEQ(fc)?2:0) /* QOS Control */);
+               if (skb == NULL)
+                       return NULL;
+
+               entry = &ieee->frag_cache[tid][ieee->frag_next_idx[tid]];
+               ieee->frag_next_idx[tid]++;
+               if (ieee->frag_next_idx[tid] >= RTLLIB_FRAG_CACHE_LEN)
+                       ieee->frag_next_idx[tid] = 0;
+
+               if (entry->skb != NULL)
+                       dev_kfree_skb_any(entry->skb);
+
+               entry->first_frag_time = jiffies;
+               entry->seq = seq;
+               entry->last_frag = frag;
+               entry->skb = skb;
+               memcpy(entry->src_addr, hdr->addr2, ETH_ALEN);
+               memcpy(entry->dst_addr, hdr->addr1, ETH_ALEN);
+       } else {
+               /* received a fragment of a frame for which the head fragment
+                * should have already been received */
+               entry = rtllib_frag_cache_find(ieee, seq, frag, tid,hdr->addr2,
+                                                 hdr->addr1);
+               if (entry != NULL) {
+                       entry->last_frag = frag;
+                       skb = entry->skb;
+               }
+       }
+
+       return skb;
+}
+
+
+/* Called only as a tasklet (software IRQ) */
+static int rtllib_frag_cache_invalidate(struct rtllib_device *ieee,
+                                          struct rtllib_hdr_4addr *hdr)
+{
+       u16 fc = le16_to_cpu(hdr->frame_ctl);
+       u16 sc = le16_to_cpu(hdr->seq_ctl);
+       unsigned int seq = WLAN_GET_SEQ_SEQ(sc);
+       struct rtllib_frag_entry *entry;
+       struct rtllib_hdr_3addrqos *hdr_3addrqos;
+       struct rtllib_hdr_4addrqos *hdr_4addrqos;
+       u8 tid;
+       
+       if(((fc & RTLLIB_FCTL_DSTODS) == RTLLIB_FCTL_DSTODS)&&RTLLIB_QOS_HAS_SEQ(fc)) {
+         hdr_4addrqos = (struct rtllib_hdr_4addrqos *)hdr;
+         tid = le16_to_cpu(hdr_4addrqos->qos_ctl) & RTLLIB_QCTL_TID;
+         tid = UP2AC(tid);
+         tid ++;
+       } else if (RTLLIB_QOS_HAS_SEQ(fc)) {
+         hdr_3addrqos = (struct rtllib_hdr_3addrqos *)hdr;
+         tid = le16_to_cpu(hdr_3addrqos->qos_ctl) & RTLLIB_QCTL_TID;
+         tid = UP2AC(tid);
+         tid ++;
+       } else {
+         tid = 0;
+       }
+
+       entry = rtllib_frag_cache_find(ieee, seq, -1, tid,hdr->addr2,
+                                         hdr->addr1);
+
+       if (entry == NULL) {
+               RTLLIB_DEBUG_FRAG(
+                       "could not invalidate fragment cache "
+                       "entry (seq=%u)\n", seq);
+               return -1;
+       }
+
+       entry->skb = NULL;
+       return 0;
+}
+
+
+
+/* rtllib_rx_frame_mgtmt
+ *
+ * Responsible for handling management control frames
+ *
+ * Called by rtllib_rx */
+static inline int
+rtllib_rx_frame_mgmt(struct rtllib_device *ieee, struct sk_buff *skb,
+                       struct rtllib_rx_stats *rx_stats, u16 type,
+                       u16 stype)
+{
+       /* On the struct stats definition there is written that
+        * this is not mandatory.... but seems that the probe
+        * response parser uses it
+        */
+        struct rtllib_hdr_3addr * hdr = (struct rtllib_hdr_3addr *)skb->data;
+
+       rx_stats->len = skb->len;
+       rtllib_rx_mgt(ieee,skb,rx_stats);       
+#ifdef _RTL8192_EXT_PATCH_   
+       if(ieee->iw_mode == IW_MODE_MESH){
+               if ((stype != RTLLIB_STYPE_MANAGE_ACT) && (memcmp(hdr->addr1, ieee->dev->dev_addr, ETH_ALEN)))
+               {
+                       dev_kfree_skb_any(skb);
+                       return 0;
+               }
+       }
+       else
+#endif
+       {
+               if ((memcmp(hdr->addr1, ieee->dev->dev_addr, ETH_ALEN)))
+               {
+                       dev_kfree_skb_any(skb);
+                       return 0;
+               }
+       }
+       rtllib_rx_frame_softmac(ieee, skb, rx_stats, type, stype);
+
+       dev_kfree_skb_any(skb);
+       
+       return 0;
+       
+       #ifdef NOT_YET
+       if (ieee->iw_mode == IW_MODE_MASTER) {
+               printk(KERN_DEBUG "%s: Master mode not yet suppported.\n",
+                      ieee->dev->name);
+               return 0;
+/*
+  hostap_update_sta_ps(ieee, (struct hostap_rtllib_hdr_4addr *)
+  skb->data);*/
+       }
+
+       if (ieee->hostapd && type == RTLLIB_TYPE_MGMT) {
+               if (stype == WLAN_FC_STYPE_BEACON &&
+                   ieee->iw_mode == IW_MODE_MASTER) {
+                       struct sk_buff *skb2;
+                       /* Process beacon frames also in kernel driver to
+                        * update STA(AP) table statistics */
+                       skb2 = skb_clone(skb, GFP_ATOMIC);
+                       if (skb2)
+                               hostap_rx(skb2->dev, skb2, rx_stats);
+               }
+
+               /* send management frames to the user space daemon for
+                * processing */
+               ieee->apdevstats.rx_packets++;
+               ieee->apdevstats.rx_bytes += skb->len;
+               prism2_rx_80211(ieee->apdev, skb, rx_stats, PRISM2_RX_MGMT);
+               return 0;
+       }
+
+           if (ieee->iw_mode == IW_MODE_MASTER) {
+               if (type != WLAN_FC_TYPE_MGMT && type != WLAN_FC_TYPE_CTRL) {
+                       printk(KERN_DEBUG "%s: unknown management frame "
+                              "(type=0x%02x, stype=0x%02x) dropped\n",
+                              skb->dev->name, type, stype);
+                       return -1;
+               }
+
+               hostap_rx(skb->dev, skb, rx_stats);
+               return 0;
+       }
+
+       printk(KERN_DEBUG "%s: hostap_rx_frame_mgmt: management frame "
+              "received in non-Host AP mode\n", skb->dev->name);
+       return -1;
+       #endif
+}
+
+
+
+#if !(defined CONFIG_CRDA && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30)))
+/* See IEEE 802.1H for LLC/SNAP encapsulation/decapsulation */
+/* Ethernet-II snap header (RFC1042 for most EtherTypes) */
+static unsigned char rfc1042_header[] =
+{ 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00 };
+/* Bridge-Tunnel header (for EtherTypes ETH_P_AARP and ETH_P_IPX) */
+static unsigned char bridge_tunnel_header[] =
+{ 0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8 };
+/* No encapsulation header if EtherType < 0x600 (=length) */
+#endif
+
+/* Called by rtllib_rx_frame_decrypt */
+static int rtllib_is_eapol_frame(struct rtllib_device *ieee,
+                                   struct sk_buff *skb, size_t hdrlen)
+{
+       struct net_device *dev = ieee->dev;
+       u16 fc, ethertype;
+       struct rtllib_hdr_4addr *hdr;
+       u8 *pos;
+
+       if (skb->len < 24)
+               return 0;
+
+       hdr = (struct rtllib_hdr_4addr *) skb->data;
+       fc = le16_to_cpu(hdr->frame_ctl);
+
+       /* check that the frame is unicast frame to us */
+       if ((fc & (RTLLIB_FCTL_TODS | RTLLIB_FCTL_FROMDS)) ==
+           RTLLIB_FCTL_TODS &&
+           memcmp(hdr->addr1, dev->dev_addr, ETH_ALEN) == 0 &&
+           memcmp(hdr->addr3, dev->dev_addr, ETH_ALEN) == 0) {
+               /* ToDS frame with own addr BSSID and DA */
+       } else if ((fc & (RTLLIB_FCTL_TODS | RTLLIB_FCTL_FROMDS)) ==
+                  RTLLIB_FCTL_FROMDS &&
+                  memcmp(hdr->addr1, dev->dev_addr, ETH_ALEN) == 0) {
+               /* FromDS frame with own addr as DA */
+       } else
+               return 0;
+
+       if (skb->len < 24 + 8)
+               return 0;
+
+       /* check for port access entity Ethernet type */
+       pos = skb->data + hdrlen;
+       ethertype = (pos[6] << 8) | pos[7];
+       if (ethertype == ETH_P_PAE)
+               return 1;
+
+       return 0;
+}
+
+/* Called only as a tasklet (software IRQ), by rtllib_rx */
+static inline int
+rtllib_rx_frame_decrypt(struct rtllib_device* ieee, struct sk_buff *skb,
+                          struct rtllib_crypt_data *crypt)
+{
+       struct rtllib_hdr_4addr *hdr;
+       int res, hdrlen;
+
+       if (crypt == NULL || crypt->ops->decrypt_mpdu == NULL)
+               return 0;
+#if 1
+       if (ieee->hwsec_active)
+       {
+               cb_desc *tcb_desc = (cb_desc *)(skb->cb+ MAX_DEV_ADDR_SIZE);
+               tcb_desc->bHwSec = 1;
+
+               if(ieee->need_sw_enc)
+                       tcb_desc->bHwSec = 0;
+       }
+#endif 
+       hdr = (struct rtllib_hdr_4addr *) skb->data;
+       hdrlen = rtllib_get_hdrlen(le16_to_cpu(hdr->frame_ctl));
+
+#ifdef CONFIG_RTLLIB_CRYPT_TKIP
+       if (ieee->tkip_countermeasures &&
+           strcmp(crypt->ops->name, "TKIP") == 0) {
+               if (net_ratelimit()) {
+                       printk(KERN_DEBUG "%s: TKIP countermeasures: dropped "
+                              "received packet from " MAC_FMT "\n",
+                              ieee->dev->name, MAC_ARG(hdr->addr2));
+               }
+               return -1;
+       }
+#endif
+
+       atomic_inc(&crypt->refcnt);
+       res = crypt->ops->decrypt_mpdu(skb, hdrlen, crypt->priv);
+       atomic_dec(&crypt->refcnt);
+       if (res < 0) {
+               RTLLIB_DEBUG_DROP(
+                       "decryption failed (SA=" MAC_FMT
+                       ") res=%d\n", MAC_ARG(hdr->addr2), res);
+               if (res == -2)
+                       RTLLIB_DEBUG_DROP("Decryption failed ICV "
+                                            "mismatch (key %d)\n",
+                                            skb->data[hdrlen + 3] >> 6);
+               ieee->ieee_stats.rx_discards_undecryptable++;
+               return -1;
+       }
+
+       return res;
+}
+
+
+/* Called only as a tasklet (software IRQ), by rtllib_rx */
+static inline int
+rtllib_rx_frame_decrypt_msdu(struct rtllib_device* ieee, struct sk_buff *skb,
+                            int keyidx, struct rtllib_crypt_data *crypt)
+{
+       struct rtllib_hdr_4addr *hdr;
+       int res, hdrlen;
+
+       if (crypt == NULL || crypt->ops->decrypt_msdu == NULL)
+               return 0;
+       if (ieee->hwsec_active)
+       {
+               cb_desc *tcb_desc = (cb_desc *)(skb->cb+ MAX_DEV_ADDR_SIZE);
+               tcb_desc->bHwSec = 1;
+       
+               if(ieee->need_sw_enc)
+                       tcb_desc->bHwSec = 0;
+       }
+
+       hdr = (struct rtllib_hdr_4addr *) skb->data;
+       hdrlen = rtllib_get_hdrlen(le16_to_cpu(hdr->frame_ctl));
+
+       atomic_inc(&crypt->refcnt);
+       res = crypt->ops->decrypt_msdu(skb, keyidx, hdrlen, crypt->priv,ieee);
+       atomic_dec(&crypt->refcnt);
+       if (res < 0) {
+               printk(KERN_DEBUG "%s: MSDU decryption/MIC verification failed"
+                      " (SA=" MAC_FMT " keyidx=%d)\n",
+                      ieee->dev->name, MAC_ARG(hdr->addr2), keyidx);
+               return -1;
+       }
+
+       return 0;
+}
+
+#ifdef _RTL8192_EXT_PATCH_     
+static inline int rtllib_has_retry(u16 fc)
+{
+    return ((fc&RTLLIB_FCTL_RETRY)!=0);
+}
+#endif 
+
+/* this function is stolen from ipw2200 driver*/
+#define IEEE_PACKET_RETRY_TIME (5*HZ)
+static int is_duplicate_packet(struct rtllib_device *ieee,
+                                     struct rtllib_hdr_4addr *header)
+{
+       u16 fc = le16_to_cpu(header->frame_ctl);
+       u16 sc = le16_to_cpu(header->seq_ctl);
+       u16 seq = WLAN_GET_SEQ_SEQ(sc);
+       u16 frag = WLAN_GET_SEQ_FRAG(sc);
+       u16 *last_seq, *last_frag;
+       unsigned long *last_time;
+       struct rtllib_hdr_3addrqos *hdr_3addrqos;
+       struct rtllib_hdr_4addrqos *hdr_4addrqos;
+       u8 tid;
+       
+       if(((fc & RTLLIB_FCTL_DSTODS) == RTLLIB_FCTL_DSTODS)&&RTLLIB_QOS_HAS_SEQ(fc)) {
+         hdr_4addrqos = (struct rtllib_hdr_4addrqos *)header;
+         tid = le16_to_cpu(hdr_4addrqos->qos_ctl) & RTLLIB_QCTL_TID;
+         tid = UP2AC(tid);
+         tid ++;
+       } else if(RTLLIB_QOS_HAS_SEQ(fc)) { 
+         hdr_3addrqos = (struct rtllib_hdr_3addrqos*)header;
+         tid = le16_to_cpu(hdr_3addrqos->qos_ctl) & RTLLIB_QCTL_TID;
+         tid = UP2AC(tid);
+         tid ++;
+       } else { 
+         tid = 0;
+       }
+
+       switch (ieee->iw_mode) {
+       case IW_MODE_ADHOC:
+       {
+               struct list_head *p;
+               struct ieee_ibss_seq *entry = NULL;
+               u8 *mac = header->addr2;
+               int index = mac[5] % IEEE_IBSS_MAC_HASH_SIZE;
+               list_for_each(p, &ieee->ibss_mac_hash[index]) {
+                       entry = list_entry(p, struct ieee_ibss_seq, list);
+                       if (!memcmp(entry->mac, mac, ETH_ALEN))
+                               break;
+               }
+               if (p == &ieee->ibss_mac_hash[index]) {
+                       entry = kmalloc(sizeof(struct ieee_ibss_seq), GFP_ATOMIC);
+                       if (!entry) {
+                               printk(KERN_WARNING "Cannot malloc new mac entry\n");
+                               return 0;
+                       }
+                       memcpy(entry->mac, mac, ETH_ALEN);
+                       entry->seq_num[tid] = seq;
+                       entry->frag_num[tid] = frag;
+                       entry->packet_time[tid] = jiffies;
+                       list_add(&entry->list, &ieee->ibss_mac_hash[index]);
+                       return 0;
+               }
+               last_seq = &entry->seq_num[tid];
+               last_frag = &entry->frag_num[tid];
+               last_time = &entry->packet_time[tid];
+               break;
+       }
+       
+       case IW_MODE_INFRA:
+               last_seq = &ieee->last_rxseq_num[tid];
+               last_frag = &ieee->last_rxfrag_num[tid];
+               last_time = &ieee->last_packet_time[tid];
+               
+               break;
+
+#ifdef _RTL8192_EXT_PATCH_     
+       case IW_MODE_MESH:
+               /* Drop duplicate 802.11 retransmissions (IEEE 802.11 Chap. 9.2.9) */
+               if(!is_multicast_ether_addr(header->addr1)){
+                       struct list_head *p;
+                       struct ieee_mesh_seq *entry = NULL;
+                       u8 *mac = header->addr2;
+                       int index = mac[5] % IEEE_IBSS_MAC_HASH_SIZE;
+                       list_for_each(p, &ieee->mesh_mac_hash[index]) {
+                               entry = list_entry(p, struct ieee_mesh_seq, list);
+                               if (!memcmp(entry->mac, mac, ETH_ALEN))
+                                       break;
+                       }
+
+                       if (p == &ieee->mesh_mac_hash[index]) {
+                               entry = kmalloc(sizeof(struct ieee_mesh_seq), GFP_ATOMIC);
+                               if (!entry) {
+                                       printk(KERN_WARNING "Cannot malloc new mac entry\n");
+                                       return 0;
+                               }
+                               memcpy(entry->mac, mac, ETH_ALEN);
+                               entry->seq_num[tid] = header->seq_ctl;
+                               entry->packet_time[tid] = jiffies;
+                               list_add(&entry->list, &ieee->mesh_mac_hash[index]);
+                               return 0;
+                       }
+                       last_seq = &entry->seq_num[tid];
+                       last_time = &entry->packet_time[tid];
+
+                       if (unlikely(rtllib_has_retry(fc) &&
+                               *last_seq == header->seq_ctl)) {
+                               goto drop;
+                       } else {
+                               *last_seq = header->seq_ctl;
+                       }
+                       *last_time = jiffies;
+               }
+               return 0;
+#endif 
+       default:
+               return 0;
+       }
+
+       if ((*last_seq == seq) &&
+           time_after(*last_time + IEEE_PACKET_RETRY_TIME, jiffies)) {
+               if (*last_frag == frag){
+                       goto drop;
+
+               }
+               if (*last_frag + 1 != frag)
+                       /* out-of-order fragment */
+                       goto drop;
+       } else
+               *last_seq = seq;
+
+       *last_frag = frag;
+       *last_time = jiffies;
+       return 0;
+
+drop:
+       
+       return 1;
+}
+bool
+AddReorderEntry(
+       PRX_TS_RECORD                   pTS,
+       PRX_REORDER_ENTRY               pReorderEntry
+       )
+{
+       struct list_head *pList = &pTS->RxPendingPktList;
+#if  1 
+       while(pList->next != &pTS->RxPendingPktList)
+       {
+               if( SN_LESS(pReorderEntry->SeqNum, ((PRX_REORDER_ENTRY)list_entry(pList->next,RX_REORDER_ENTRY,List))->SeqNum) )
+               {
+                       pList = pList->next;
+               }
+               else if( SN_EQUAL(pReorderEntry->SeqNum, ((PRX_REORDER_ENTRY)list_entry(pList->next,RX_REORDER_ENTRY,List))->SeqNum) )
+               {
+                       return false;
+               }
+               else
+               {
+                       break;
+               }
+       }
+#endif
+       pReorderEntry->List.next = pList->next;
+       pReorderEntry->List.next->prev = &pReorderEntry->List;
+       pReorderEntry->List.prev = pList;
+       pList->next = &pReorderEntry->List;
+
+       return true;
+}
+
+void rtllib_indicate_packets(struct rtllib_device *ieee, struct rtllib_rxb** prxbIndicateArray,u8  index)
+{
+       struct net_device_stats *stats = &ieee->stats;
+       u8 i = 0 , j=0;
+       u16 ethertype;
+       for(j = 0; j<index; j++)
+       {
+               struct rtllib_rxb* prxb = prxbIndicateArray[j];
+#ifdef RTL8192S_WAPI_SUPPORT
+             if ((ieee->WapiSupport) && (ieee->wapiInfo.bWapiEnable))
+             {
+                       if(WapiCheckDropForRxReorderCase(ieee,prxb))
+                       {
+                               WAPI_TRACE(WAPI_ERR, "%s(): Rx Reorder Drop case!!\n", __FUNCTION__);
+                               for(i = 0; i<prxb->nr_subframes; i++) {
+                                       if(prxb->subframes[i])
+                                               dev_kfree_skb(prxb->subframes[i]);
+                               }
+                               prxb->nr_subframes = 0;
+                       }
+               }
+#endif
+               for(i = 0; i<prxb->nr_subframes; i++) {
+                       struct sk_buff *sub_skb = prxb->subframes[i];
+                               
+               /* convert hdr + possible LLC headers into Ethernet header */
+                       ethertype = (sub_skb->data[6] << 8) | sub_skb->data[7];
+                       if (sub_skb->len >= 8 &&
+                               ((memcmp(sub_skb->data, rfc1042_header, SNAP_SIZE) == 0 &&
+                                 ethertype != ETH_P_AARP && ethertype != ETH_P_IPX) ||
+                                memcmp(sub_skb->data, bridge_tunnel_header, SNAP_SIZE) == 0)) {
+                       /* remove RFC1042 or Bridge-Tunnel encapsulation and
+                        * replace EtherType */
+                               skb_pull(sub_skb, SNAP_SIZE);
+                               memcpy(skb_push(sub_skb, ETH_ALEN), prxb->src, ETH_ALEN);
+                               memcpy(skb_push(sub_skb, ETH_ALEN), prxb->dst, ETH_ALEN);
+                       } else {
+                               u16 len;
+                       /* Leave Ethernet header part of hdr and full payload */
+                               len = htons(sub_skb->len);
+                               memcpy(skb_push(sub_skb, 2), &len, 2);
+                               memcpy(skb_push(sub_skb, ETH_ALEN), prxb->src, ETH_ALEN);
+                               memcpy(skb_push(sub_skb, ETH_ALEN), prxb->dst, ETH_ALEN);
+                       }
+
+               /* Indicat the packets to upper layer */
+                       if (sub_skb) {
+                               stats->rx_packets++;
+                               stats->rx_bytes += sub_skb->len;
+
+                               memset(sub_skb->cb, 0, sizeof(sub_skb->cb));
+#ifdef _RTL8192_EXT_PATCH_     
+                               sub_skb->protocol = eth_type_trans(sub_skb, sub_skb->dev);
+#else
+                               sub_skb->protocol = eth_type_trans(sub_skb, ieee->dev);
+                               sub_skb->dev = ieee->dev;
+#endif
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18))
+                               sub_skb->dev->stats.rx_packets++;
+                               sub_skb->dev->stats.rx_bytes += sub_skb->len;
+#endif
+#ifdef TCP_CSUM_OFFLOAD_RX
+                               if ( prxb->tcp_csum_valid)
+                                       sub_skb->ip_summed = CHECKSUM_UNNECESSARY;
+                               else
+                                       sub_skb->ip_summed = CHECKSUM_NONE;
+
+#else
+                               sub_skb->ip_summed = CHECKSUM_NONE; /* 802.11 crc not sufficient */
+#endif                         
+                               ieee->last_rx_ps_time = jiffies;
+                               netif_rx(sub_skb);
+                       }
+               }
+               kfree(prxb);
+               prxb = NULL;    
+       }
+}
+
+void
+rtllib_FlushRxTsPendingPkts(struct rtllib_device *ieee,        PRX_TS_RECORD pTS)
+{
+       PRX_REORDER_ENTRY       pRxReorderEntry;
+       struct rtllib_rxb*              RfdArray[REORDER_WIN_SIZE];
+       u8                                      RfdCnt = 0;
+
+       
+       printk("%s()\n", __func__);
+       del_timer_sync(&pTS->RxPktPendingTimer);
+       while(!list_empty(&pTS->RxPendingPktList))
+       {
+               if(RfdCnt >= REORDER_WIN_SIZE){
+                       printk("-------------->%s() error! RfdCnt >= REORDER_WIN_SIZE\n", __func__);
+                       break;
+               }
+
+               pRxReorderEntry = (PRX_REORDER_ENTRY)list_entry(pTS->RxPendingPktList.prev,RX_REORDER_ENTRY,List);
+               list_del_init(&pRxReorderEntry->List);
+               
+               RfdArray[RfdCnt] = pRxReorderEntry->prxb;
+               
+               RfdCnt = RfdCnt + 1;
+               list_add_tail(&pRxReorderEntry->List, &ieee->RxReorder_Unused_List);
+       }
+       rtllib_indicate_packets(ieee, RfdArray, RfdCnt);
+       
+       pTS->RxIndicateSeq = 0xffff;
+       
+#ifdef MERGE_TO_DO
+#endif 
+}
+
+
+void RxReorderIndicatePacket( struct rtllib_device *ieee,
+               struct rtllib_rxb* prxb,
+               PRX_TS_RECORD           pTS,
+               u16                     SeqNum)
+{
+       PRT_HIGH_THROUGHPUT     pHTInfo = ieee->pHTInfo;
+       PRX_REORDER_ENTRY       pReorderEntry = NULL;
+       struct rtllib_rxb* prxbIndicateArray[REORDER_WIN_SIZE];
+       u8                      WinSize = pHTInfo->RxReorderWinSize;
+       u16                     WinEnd = (pTS->RxIndicateSeq + WinSize -1)%4096;
+       u8                      index = 0;
+       bool                    bMatchWinStart = false, bPktInBuf = false;
+       RTLLIB_DEBUG(RTLLIB_DL_REORDER,"%s(): Seq is %d,pTS->RxIndicateSeq is %d, WinSize is %d\n",__FUNCTION__,SeqNum,pTS->RxIndicateSeq,WinSize);
+#if 0
+       if(!list_empty(&ieee->RxReorder_Unused_List))
+               RTLLIB_DEBUG(RTLLIB_DL_REORDER,"%s(): ieee->RxReorder_Unused_List is nut NULL\n");
+#endif
+       /* Rx Reorder initialize condition.*/
+       if(pTS->RxIndicateSeq == 0xffff) {
+               pTS->RxIndicateSeq = SeqNum;
+       }
+
+       /* Drop out the packet which SeqNum is smaller than WinStart */
+       if(SN_LESS(SeqNum, pTS->RxIndicateSeq)) {
+               RTLLIB_DEBUG(RTLLIB_DL_REORDER,"Packet Drop! IndicateSeq: %d, NewSeq: %d\n",
+                                pTS->RxIndicateSeq, SeqNum);
+               pHTInfo->RxReorderDropCounter++;
+               {
+                       int i;
+                       for(i =0; i < prxb->nr_subframes; i++) {
+                               dev_kfree_skb(prxb->subframes[i]);
+                       }
+                       kfree(prxb);
+                       prxb = NULL;
+               }
+               return;
+       }
+
+       /*
+        * Sliding window manipulation. Conditions includes:
+        * 1. Incoming SeqNum is equal to WinStart =>Window shift 1
+        * 2. Incoming SeqNum is larger than the WinEnd => Window shift N
+        */
+       if(SN_EQUAL(SeqNum, pTS->RxIndicateSeq)) {
+               pTS->RxIndicateSeq = (pTS->RxIndicateSeq + 1) % 4096;
+               bMatchWinStart = true;
+       } else if(SN_LESS(WinEnd, SeqNum)) {
+               if(SeqNum >= (WinSize - 1)) {
+                       pTS->RxIndicateSeq = SeqNum + 1 -WinSize;
+               } else {
+                       pTS->RxIndicateSeq = 4095 - (WinSize - (SeqNum +1)) + 1;
+               }
+               RTLLIB_DEBUG(RTLLIB_DL_REORDER, "Window Shift! IndicateSeq: %d, NewSeq: %d\n",pTS->RxIndicateSeq, SeqNum);
+       }
+
+       /*
+        * Indication process.
+        * After Packet dropping and Sliding Window shifting as above, we can now just indicate the packets
+        * with the SeqNum smaller than latest WinStart and buffer other packets.
+        */
+       /* For Rx Reorder condition:
+        * 1. All packets with SeqNum smaller than WinStart => Indicate
+        * 2. All packets with SeqNum larger than or equal to WinStart => Buffer it.
+        */
+       if(bMatchWinStart) {
+               /* Current packet is going to be indicated.*/
+               RTLLIB_DEBUG(RTLLIB_DL_REORDER, "Packets indication!! IndicateSeq: %d, NewSeq: %d\n",\
+                               pTS->RxIndicateSeq, SeqNum);
+               prxbIndicateArray[0] = prxb;
+               index = 1;
+       } else {
+               /* Current packet is going to be inserted into pending list.*/
+               if(!list_empty(&ieee->RxReorder_Unused_List)) {
+                       pReorderEntry = (PRX_REORDER_ENTRY)list_entry(ieee->RxReorder_Unused_List.next,RX_REORDER_ENTRY,List);
+                       list_del_init(&pReorderEntry->List);
+                       
+                       /* Make a reorder entry and insert into a the packet list.*/
+                       pReorderEntry->SeqNum = SeqNum;
+                       pReorderEntry->prxb = prxb;
+
+#if 1 
+                       if(!AddReorderEntry(pTS, pReorderEntry)) {
+                               RTLLIB_DEBUG(RTLLIB_DL_REORDER, "%s(): Duplicate packet is dropped!! IndicateSeq: %d, NewSeq: %d\n", 
+                                       __FUNCTION__, pTS->RxIndicateSeq, SeqNum);
+                               list_add_tail(&pReorderEntry->List,&ieee->RxReorder_Unused_List);
+                               {
+                                       int i;
+                                       for(i =0; i < prxb->nr_subframes; i++) {
+                                               dev_kfree_skb(prxb->subframes[i]);
+                                       }
+                                       kfree(prxb);
+                                       prxb = NULL;
+                               }
+                       } else {
+                               RTLLIB_DEBUG(RTLLIB_DL_REORDER,
+                                        "Pkt insert into buffer!! IndicateSeq: %d, NewSeq: %d\n",pTS->RxIndicateSeq, SeqNum);
+                       }
+#endif
+               } 
+               else {
+                       /*
+                        * Packets are dropped if there is not enough reorder entries.
+                        * This part shall be modified!! We can just indicate all the 
+                        * packets in buffer and get reorder entries.
+                        */
+                       RTLLIB_DEBUG(RTLLIB_DL_ERR, "RxReorderIndicatePacket(): There is no reorder entry!! Packet is dropped!!\n");
+                       {
+                               int i;
+                               for(i =0; i < prxb->nr_subframes; i++) {
+                                       dev_kfree_skb(prxb->subframes[i]);
+                               }
+                               kfree(prxb);
+                               prxb = NULL;
+                       }
+               }
+       }
+
+       /* Check if there is any packet need indicate.*/
+       while(!list_empty(&pTS->RxPendingPktList)) {
+               RTLLIB_DEBUG(RTLLIB_DL_REORDER,"%s(): start RREORDER indicate\n",__FUNCTION__);
+#if 1 
+               pReorderEntry = (PRX_REORDER_ENTRY)list_entry(pTS->RxPendingPktList.prev,RX_REORDER_ENTRY,List);
+               if( SN_LESS(pReorderEntry->SeqNum, pTS->RxIndicateSeq) || 
+                               SN_EQUAL(pReorderEntry->SeqNum, pTS->RxIndicateSeq))
+               {
+                       /* This protect buffer from overflow. */
+                       if(index >= REORDER_WIN_SIZE) {
+                               RTLLIB_DEBUG(RTLLIB_DL_ERR, "RxReorderIndicatePacket(): Buffer overflow!! \n");
+                               bPktInBuf = true;
+                               break;
+                       }
+
+                       list_del_init(&pReorderEntry->List);
+
+                       if(SN_EQUAL(pReorderEntry->SeqNum, pTS->RxIndicateSeq))
+                               pTS->RxIndicateSeq = (pTS->RxIndicateSeq + 1) % 4096;
+
+                       RTLLIB_DEBUG(RTLLIB_DL_REORDER,"Packets indication!! IndicateSeq: %d, NewSeq: %d\n",pTS->RxIndicateSeq, SeqNum);
+                       prxbIndicateArray[index] = pReorderEntry->prxb;
+                       index++;
+
+                       list_add_tail(&pReorderEntry->List,&ieee->RxReorder_Unused_List);
+               } else {
+                       bPktInBuf = true;
+                       break;
+               }
+#endif
+       }
+
+       /* Handling pending timer. Set this timer to prevent from long time Rx buffering.*/
+       if(index>0) {
+               if(timer_pending(&pTS->RxPktPendingTimer))
+               {
+                       del_timer_sync(&pTS->RxPktPendingTimer);
+               }
+               pTS->RxTimeoutIndicateSeq = 0xffff;
+
+               if(index>REORDER_WIN_SIZE){
+                       RTLLIB_DEBUG(RTLLIB_DL_ERR, "RxReorderIndicatePacket(): Rx Reorer buffer full!! \n");
+                       return;
+               }
+               rtllib_indicate_packets(ieee, prxbIndicateArray, index);
+               bPktInBuf = false;
+       }
+
+#if 1 
+       if(bPktInBuf && pTS->RxTimeoutIndicateSeq==0xffff) {
+               RTLLIB_DEBUG(RTLLIB_DL_REORDER,"%s(): SET rx timeout timer\n", __FUNCTION__);
+               pTS->RxTimeoutIndicateSeq = pTS->RxIndicateSeq;
+#if 0  
+               if(timer_pending(&pTS->RxPktPendingTimer))
+                       del_timer_sync(&pTS->RxPktPendingTimer);
+               pTS->RxPktPendingTimer.expires = jiffies + MSECS(pHTInfo->RxReorderPendingTime);
+               add_timer(&pTS->RxPktPendingTimer);
+#else
+               mod_timer(&pTS->RxPktPendingTimer,  jiffies + MSECS(pHTInfo->RxReorderPendingTime));
+#endif
+       }
+#endif
+}
+
+u8 parse_subframe(struct rtllib_device* ieee,struct sk_buff *skb, 
+                  struct rtllib_rx_stats *rx_stats,
+                 struct rtllib_rxb *rxb,u8* src,u8* dst)
+{
+       struct rtllib_hdr_3addr  *hdr = (struct rtllib_hdr_3addr* )skb->data;
+       u16             fc = le16_to_cpu(hdr->frame_ctl);
+
+       u16             LLCOffset= sizeof(struct rtllib_hdr_3addr);
+       u16             ChkLength;
+       bool            bIsAggregateFrame = false;
+       u16             nSubframe_Length;
+       u8              nPadding_Length = 0;
+       u16             SeqNum=0;
+       struct sk_buff *sub_skb;
+       u8             *data_ptr;       
+       /* just for debug purpose */
+       SeqNum = WLAN_GET_SEQ_SEQ(le16_to_cpu(hdr->seq_ctl));
+       if((RTLLIB_QOS_HAS_SEQ(fc))&&\
+                       (((frameqos *)(skb->data + RTLLIB_3ADDR_LEN))->field.reserved)) {
+               bIsAggregateFrame = true;
+       }
+
+       if(RTLLIB_QOS_HAS_SEQ(fc)) {
+               LLCOffset += 2;
+       }
+       if(rx_stats->bContainHTC) {
+               LLCOffset += sHTCLng;
+       }
+       ChkLength = LLCOffset;/* + (Frame_WEP(frame)!=0 ?Adapter->MgntInfo.SecurityInfo.EncryptionHeadOverhead:0);*/
+
+       if( skb->len <= ChkLength ) {
+               return 0;
+       }
+
+       skb_pull(skb, LLCOffset);
+       ieee->bIsAggregateFrame = bIsAggregateFrame;
+       if(!bIsAggregateFrame) {
+               rxb->nr_subframes = 1;
+#ifndef RTK_DMP_PLATFORM
+#ifdef JOHN_NOCPY
+               rxb->subframes[0] = skb;
+#else
+               rxb->subframes[0] = skb_copy(skb, GFP_ATOMIC);
+#endif
+#else
+               rxb->subframes[0] = skb_clone(skb, GFP_ATOMIC);
+#endif
+               memcpy(rxb->src,src,ETH_ALEN);
+               memcpy(rxb->dst,dst,ETH_ALEN);
+               rxb->subframes[0]->dev = ieee->dev;
+               return 1;
+       } else {
+               rxb->nr_subframes = 0;
+               memcpy(rxb->src,src,ETH_ALEN);
+               memcpy(rxb->dst,dst,ETH_ALEN);
+               while(skb->len > ETHERNET_HEADER_SIZE) {
+                       /* Offset 12 denote 2 mac address */
+                       nSubframe_Length = *((u16*)(skb->data + 12));
+                       nSubframe_Length = (nSubframe_Length>>8) + (nSubframe_Length<<8);
+
+                       if(skb->len<(ETHERNET_HEADER_SIZE + nSubframe_Length)) {
+                               printk("%s: A-MSDU parse error!! pRfd->nTotalSubframe : %d\n",\
+                                               __FUNCTION__,rxb->nr_subframes);
+                               printk("%s: A-MSDU parse error!! Subframe Length: %d\n",__FUNCTION__, nSubframe_Length);
+                               printk("nRemain_Length is %d and nSubframe_Length is : %d\n",skb->len,nSubframe_Length);
+                               printk("The Packet SeqNum is %d\n",SeqNum);
+                               return 0;
+                       }
+
+                       /* move the data point to data content */
+                       skb_pull(skb, ETHERNET_HEADER_SIZE);
+
+#ifdef JOHN_NOCPY
+                       sub_skb = skb_clone(skb, GFP_ATOMIC);
+                       sub_skb->len = nSubframe_Length;
+                       sub_skb->tail = sub_skb->data + nSubframe_Length;
+#else
+                       /* Allocate new skb for releasing to upper layer */
+                       sub_skb = dev_alloc_skb(nSubframe_Length + 12);
+                       skb_reserve(sub_skb, 12);
+                       data_ptr = (u8 *)skb_put(sub_skb, nSubframe_Length);
+                       memcpy(data_ptr,skb->data,nSubframe_Length);
+#endif
+                       sub_skb->dev = ieee->dev;
+                       rxb->subframes[rxb->nr_subframes++] = sub_skb;
+                       if(rxb->nr_subframes >= MAX_SUBFRAME_COUNT) {
+                               RTLLIB_DEBUG_RX("ParseSubframe(): Too many Subframes! Packets dropped!\n");
+                               break;
+                       }
+                       skb_pull(skb,nSubframe_Length);
+
+                       if(skb->len != 0) {
+                               nPadding_Length = 4 - ((nSubframe_Length + ETHERNET_HEADER_SIZE) % 4);
+                               if(nPadding_Length == 4) {
+                                       nPadding_Length = 0;
+                               }
+
+                               if(skb->len < nPadding_Length) {
+                                       return 0;
+                               }
+
+                               skb_pull(skb,nPadding_Length);  
+                       }                       
+               }
+#ifdef JOHN_NOCPY
+               dev_kfree_skb(skb);
+#endif
+               return rxb->nr_subframes;
+       }
+}
+
+#ifdef _RTL8192_EXT_PATCH_
+extern u8 msh_parse_subframe(struct rtllib_device *ieee,struct sk_buff *skb, struct rtllib_rxb *rxb);
+extern int msh_rx_process_dataframe(struct rtllib_device *ieee, struct rtllib_rxb *rxb, struct rtllib_rx_stats *rx_stats);
+#endif
+
+/* All received frames are sent to this function. @skb contains the frame in
+ * IEEE 802.11 format, i.e., in the format it was sent over air.
+ * This function is called only as a tasklet (software IRQ). */
+int rtllib_rx(struct rtllib_device *ieee, struct sk_buff *skb,
+                struct rtllib_rx_stats *rx_stats)
+{
+       struct net_device *dev = ieee->dev;
+       struct rtllib_hdr_4addr *hdr;
+       size_t hdrlen;
+       u16 fc, type, stype, sc;
+       struct net_device_stats *stats = NULL;
+       unsigned int frag;
+       u8 *payload;
+       u16 ethertype;
+       u8      TID = 0;
+       u16     SeqNum = 0;
+       PRX_TS_RECORD pTS = NULL;
+#ifdef NOT_YET
+       struct net_device *wds = NULL;
+       struct sk_buff *skb2 = NULL;
+       struct net_device *wds = NULL;
+       int frame_authorized = 0;
+       int from_assoc_ap = 0;
+       void *sta = NULL;
+#endif
+       u8 dst[ETH_ALEN];
+       u8 src[ETH_ALEN];
+       u8 bssid[ETH_ALEN] = {0};
+       struct rtllib_crypt_data *crypt = NULL;
+       int keyidx = 0;
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+       struct sta_info * psta = NULL;
+#endif
+       bool unicast_packet = false;
+       int i;
+       struct rtllib_rxb* rxb = NULL;
+       bool tmp_dump = false;
+#ifdef _RTL8192_EXT_PATCH_
+       int multicast = 0, ret = 0;
+#endif
+#if defined (RTL8192S_WAPI_SUPPORT)
+       u8      wapiDectResult = 0;
+#endif
+       hdr = (struct rtllib_hdr_4addr *)skb->data;
+       stats = &ieee->stats;
+
+       if (skb->len < 10) {
+               printk(KERN_INFO "%s: SKB length < 10\n",
+                      dev->name);
+               goto rx_dropped;
+       }
+#ifdef _RTL8192_EXT_PATCH_
+       multicast = is_multicast_ether_addr(hdr->addr1)|is_broadcast_ether_addr(hdr->addr1);
+       if (!multicast &&\
+                       compare_ether_addr(dev->dev_addr, hdr->addr1) != 0) {
+               goto rx_dropped;
+       }
+#else 
+#endif 
+       fc = le16_to_cpu(hdr->frame_ctl);
+       type = WLAN_FC_GET_TYPE(fc);
+       stype = WLAN_FC_GET_STYPE(fc);
+       sc = le16_to_cpu(hdr->seq_ctl);
+       frag = WLAN_GET_SEQ_FRAG(sc);
+
+       ieee->need_sw_enc = 0;
+
+       hdrlen = rtllib_get_hdrlen(fc);
+       if(skb->len < hdrlen){
+               printk("%s():ERR!!! skb->len is smaller than hdrlen\n",__FUNCTION__);
+               goto rx_dropped;
+       }
+       
+       if (HTCCheck(ieee, skb->data)) {
+               if(net_ratelimit())
+                       printk("find HTCControl\n");
+               hdrlen += 4;
+               rx_stats->bContainHTC = 1;
+       } 
+       if ((0) && (type == RTLLIB_FTYPE_DATA) && ((is_broadcast_ether_addr(hdr->addr1)) || (compare_ether_addr(dev->dev_addr, hdr->addr1) == 0))) {
+               printk("===>RX data before decrypt\n"); 
+               tmp_dump = true;
+               dump_buf(skb->data,skb->len);
+       }
+#ifdef NOT_YET
+#if WIRELESS_EXT > 15
+       /* Put this code here so that we avoid duplicating it in all
+        * Rx paths. - Jean II */
+#ifdef IW_WIRELESS_SPY         /* defined in iw_handler.h */
+       /* If spy monitoring on */
+       if (iface->spy_data.spy_number > 0) {
+               struct iw_quality wstats;
+               wstats.level = rx_stats->rssi;
+               wstats.noise = rx_stats->noise;
+               wstats.updated = 6;     /* No qual value */
+               /* Update spy records */
+               wireless_spy_update(dev, hdr->addr2, &wstats);
+       }
+#endif /* IW_WIRELESS_SPY */
+#endif /* WIRELESS_EXT > 15 */
+       hostap_update_rx_stats(local->ap, hdr, rx_stats);
+#endif
+
+#if WIRELESS_EXT > 15
+       if (ieee->iw_mode == IW_MODE_MONITOR) {
+               rtllib_monitor_rx(ieee, skb, rx_stats);
+               stats->rx_packets++;
+               stats->rx_bytes += skb->len;
+               return 1;
+       }
+#endif
+#ifndef _RTL8192_EXT_PATCH_
+#if defined (RTL8192S_WAPI_SUPPORT)
+       if (ieee->host_decrypt && (!ieee->wapiInfo.bWapiEnable))
+#else
+       if (ieee->host_decrypt)
+#endif
+       {
+
+               int idx = 0;
+               if (skb->len >= hdrlen + 3)
+                       idx = skb->data[hdrlen + 3] >> 6;
+               crypt = ieee->crypt[idx];
+#ifdef NOT_YET
+               sta = NULL;
+
+               /* Use station specific key to override default keys if the
+                * receiver address is a unicast address ("individual RA"). If
+                * bcrx_sta_key parameter is set, station specific key is used
+                * even with broad/multicast targets (this is against IEEE
+                * 802.11, but makes it easier to use different keys with
+                * stations that do not support WEP key mapping). */
+
+               if (!(hdr->addr1[0] & 0x01) || local->bcrx_sta_key)
+                       (void) hostap_handle_sta_crypto(local, hdr, &crypt,
+                                                       &sta);
+#endif
+
+               /* allow NULL decrypt to indicate an station specific override
+                * for default encryption */
+               if (crypt && (crypt->ops == NULL ||
+                             crypt->ops->decrypt_mpdu == NULL))
+                       crypt = NULL;
+
+               if (!crypt && (fc & RTLLIB_FCTL_WEP)) {
+                       /* This seems to be triggered by some (multicast?)
+                        * frames from other than current BSS, so just drop the
+                        * frames silently instead of filling system log with
+                        * these reports. */
+                       RTLLIB_DEBUG_DROP("Decryption failed (not set)"
+                                            " (SA=" MAC_FMT ")\n",
+                                            MAC_ARG(hdr->addr2));
+                       ieee->ieee_stats.rx_discards_undecryptable++;
+                       goto rx_dropped;
+               }
+       }
+#endif
+
+       if (skb->len < RTLLIB_DATA_HDR3_LEN)
+               goto rx_dropped;
+
+#ifdef _RTL8192_EXT_PATCH_
+       if( (ieee->pHTInfo->bCurRxReorderEnable == false) || 
+               !ieee->current_network.qos_data.active|| 
+               !IsDataFrame(skb->data) || 
+               IsLegacyDataFrame(skb->data) || 
+               multicast) {
+               if (!multicast) {
+                       if (is_duplicate_packet(ieee, hdr)){
+                               goto rx_dropped;
+                       }
+               }
+       }
+#else
+       if( (ieee->pHTInfo->bCurRxReorderEnable == false) || 
+               !ieee->current_network.qos_data.active || 
+               !IsDataFrame(skb->data) || 
+               IsLegacyDataFrame(skb->data)) {
+               if(!((type == RTLLIB_FTYPE_MGMT) && (stype == RTLLIB_STYPE_BEACON))){
+                       if (is_duplicate_packet(ieee, hdr)){
+                               goto rx_dropped;
+                       }
+               }
+       }
+#endif
+       else {
+               PRX_TS_RECORD pRxTS = NULL;
+               if (GetTs(ieee, (PTS_COMMON_INFO*) &pRxTS, hdr->addr2, 
+                       (u8)Frame_QoSTID((u8*)(skb->data)), RX_DIR, true)) {
+                       if ((fc & (1<<11)) && (frag == pRxTS->RxLastFragNum) && 
+                           (WLAN_GET_SEQ_SEQ(sc) == pRxTS->RxLastSeqNum)) {
+                               goto rx_dropped;
+                       } else {
+                               pRxTS->RxLastFragNum = frag;
+                               pRxTS->RxLastSeqNum = WLAN_GET_SEQ_SEQ(sc);
+                       }
+               } else {
+                       RTLLIB_DEBUG(RTLLIB_DL_ERR, "ERR!!%s(): No TS!! Skip the check!!\n",__FUNCTION__);
+                       goto rx_dropped;
+               }
+       }
+#ifdef _RTL8192_EXT_PATCH_
+       if((ieee->iw_mode == IW_MODE_MESH) && ieee->ext_patch_rtllib_rx_mgt_update_expire)
+               ieee->ext_patch_rtllib_rx_mgt_update_expire( ieee, skb );
+#endif
+       if (type == RTLLIB_FTYPE_MGMT) {
+               if (rtllib_rx_frame_mgmt(ieee, skb, rx_stats, type, stype))
+                       goto rx_dropped;
+               else
+                       goto rx_exit;
+       }
+#if defined (RTL8192S_WAPI_SUPPORT)
+       if(ieee->WapiSupport && ieee->wapiInfo.bWapiEnable){
+               wapiDectResult = SecIsWAIPacket(ieee, skb);
+               if(wapiDectResult !=0){
+                       if(memcmp(&ieee->wapiInfo.wapiSeqnumAndFragNum,&sc,2))
+                               WapiHandleRecvPacket(ieee, skb, wapiDectResult);
+                       memcpy(&ieee->wapiInfo.wapiSeqnumAndFragNum,&sc,2);
+                       dev_kfree_skb_any(skb);
+                       goto rx_exit;
+               }
+       }
+#endif 
+       /* Data frame - extract src/dst addresses */
+       switch (fc & (RTLLIB_FCTL_FROMDS | RTLLIB_FCTL_TODS)) {
+       case RTLLIB_FCTL_FROMDS:
+               memcpy(dst, hdr->addr1, ETH_ALEN);
+               memcpy(src, hdr->addr3, ETH_ALEN);
+               memcpy(bssid, hdr->addr2, ETH_ALEN);
+               break;
+       case RTLLIB_FCTL_TODS:
+               memcpy(dst, hdr->addr3, ETH_ALEN);
+               memcpy(src, hdr->addr2, ETH_ALEN);
+               memcpy(bssid, hdr->addr1, ETH_ALEN);
+               break;
+       case RTLLIB_FCTL_FROMDS | RTLLIB_FCTL_TODS:
+               if (skb->len < RTLLIB_DATA_HDR4_LEN)
+                       goto rx_dropped;
+               memcpy(dst, hdr->addr3, ETH_ALEN);
+               memcpy(src, hdr->addr4, ETH_ALEN);
+#ifdef _RTL8192_EXT_PATCH_
+               memcpy(bssid, ieee->current_mesh_network.bssid, ETH_ALEN);
+#else
+               memcpy(bssid, ieee->current_network.bssid, ETH_ALEN);
+#endif
+               break;
+       case 0:
+               memcpy(dst, hdr->addr1, ETH_ALEN);
+               memcpy(src, hdr->addr2, ETH_ALEN);
+               memcpy(bssid, hdr->addr3, ETH_ALEN);
+               break;
+       }
+
+#ifdef NOT_YET
+       if (hostap_rx_frame_wds(ieee, hdr, fc, &wds))
+               goto rx_dropped;
+       if (wds) {
+               skb->dev = dev = wds;
+               stats = hostap_get_stats(dev);
+       }
+
+       if (ieee->iw_mode == IW_MODE_MASTER && !wds &&
+           (fc & (RTLLIB_FCTL_TODS | RTLLIB_FCTL_FROMDS)) == RTLLIB_FCTL_FROMDS &&
+           ieee->stadev &&
+           memcmp(hdr->addr2, ieee->assoc_ap_addr, ETH_ALEN) == 0) {
+               /* Frame from BSSID of the AP for which we are a client */
+               skb->dev = dev = ieee->stadev;
+               stats = hostap_get_stats(dev);
+               from_assoc_ap = 1;
+       }
+#endif
+
+       dev->last_rx = jiffies;
+
+#ifdef NOT_YET
+       if ((ieee->iw_mode == IW_MODE_MASTER ||
+            ieee->iw_mode == IW_MODE_REPEAT) &&
+           !from_assoc_ap) {
+               switch (hostap_handle_sta_rx(ieee, dev, skb, rx_stats,
+                                            wds != NULL)) {
+               case AP_RX_CONTINUE_NOT_AUTHORIZED:
+                       frame_authorized = 0;
+                       break;
+               case AP_RX_CONTINUE:
+                       frame_authorized = 1;
+                       break;
+               case AP_RX_DROP:
+                       goto rx_dropped;
+               case AP_RX_EXIT:
+                       goto rx_exit;
+               }
+       }
+#endif
+       /* Nullfunc frames may have PS-bit set, so they must be passed to
+        * hostap_handle_sta_rx() before being dropped here. */
+       if (stype != RTLLIB_STYPE_DATA &&
+           stype != RTLLIB_STYPE_DATA_CFACK &&
+           stype != RTLLIB_STYPE_DATA_CFPOLL &&
+           stype != RTLLIB_STYPE_DATA_CFACKPOLL&&
+           stype != RTLLIB_STYPE_QOS_DATA
+           ) {
+               if (stype != RTLLIB_STYPE_NULLFUNC)
+                       RTLLIB_DEBUG_DROP(
+                               "RX: dropped data frame "
+                               "with no data (type=0x%02x, "
+                               "subtype=0x%02x, len=%d)\n",
+                               type, stype, skb->len);
+               goto rx_dropped;
+       }
+
+       if(skb->len == hdrlen){
+               goto rx_dropped;
+       }
+       
+#ifdef _RTL8192_EXT_PATCH_
+       if(ieee->iw_mode == IW_MODE_MESH) {
+               /* check whether it exists the mesh entry for data packet */
+               if(ieee->ext_patch_rtllib_is_mesh&&\
+                               (false ==ieee->ext_patch_rtllib_is_mesh(ieee,hdr->addr2))) {
+                       if(ieee->only_mesh) {
+                               goto rx_dropped;
+                       } else if(memcmp(bssid, ieee->current_network.bssid, ETH_ALEN)) {   
+                               goto rx_dropped;
+                       }
+               } 
+       } else
+#endif
+       {
+#if 0          
+               /* check bssid under none mesh mode */
+               if (memcmp(bssid, ieee->current_network.bssid, ETH_ALEN)) {
+                       goto rx_dropped;
+               }
+#endif
+               /* network filter more precisely */
+               switch (ieee->iw_mode) {
+                       case IW_MODE_ADHOC:
+                               /* packets from our adapter are dropped (echo) */
+                               if (!memcmp(hdr->addr2, dev->dev_addr, ETH_ALEN))
+                                       goto rx_dropped;
+
+                               /* {broad,multi}cast packets to our BSSID go through */
+                               if (is_multicast_ether_addr(hdr->addr1)) {
+                                       if(!memcmp(hdr->addr3, ieee->current_network.bssid, ETH_ALEN))
+                                               break;
+                                       else
+                                               goto rx_dropped;
+                               } 
+
+                               /* packets not to our adapter, just discard it */
+                               if (memcmp(hdr->addr1, dev->dev_addr, ETH_ALEN))
+                                       goto rx_dropped;
+
+                               break;
+
+                       case IW_MODE_INFRA:     
+                               /* packets from our adapter are dropped (echo) */
+                               if (!memcmp(hdr->addr3, dev->dev_addr, ETH_ALEN))
+                                       goto rx_dropped;
+
+                               /* {broad,multi}cast packets to our BSS go through */
+                               if (is_multicast_ether_addr(hdr->addr1)) {
+                                       if (!memcmp(hdr->addr2, ieee->current_network.bssid, ETH_ALEN)) {
+                                               break;
+                                       } else {
+                                               goto rx_dropped;
+                                       }
+                               }
+
+                               /* packets to our adapter go through */
+                               if (memcmp(hdr->addr1, dev->dev_addr, ETH_ALEN))
+                                       goto rx_dropped;
+
+                               break;
+               }
+
+
+       }
+
+#ifdef ENABLE_LPS
+       if ((ieee->iw_mode == IW_MODE_INFRA)  && (ieee->sta_sleep == 1) 
+               && (ieee->polling)) {
+               if (WLAN_FC_MORE_DATA(fc)) {
+                       /* more data bit is set, let's request a new frame from the AP */
+                       rtllib_sta_ps_send_pspoll_frame(ieee);
+               } else {
+                       ieee->polling =  false;
+               }
+       }
+#endif
+
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+       if(ieee->iw_mode == IW_MODE_ADHOC){
+               psta = GetStaInfo(ieee, src);
+               if(NULL != psta)
+                       psta->LastActiveTime = jiffies;
+       }
+#endif
+       /* skb: hdr + (possibly fragmented, possibly encrypted) payload */
+#ifdef _RTL8192_EXT_PATCH_
+#if defined (RTL8192S_WAPI_SUPPORT)
+       if (ieee->host_decrypt && (!ieee->wapiInfo.bWapiEnable))
+#else
+       if (ieee->host_decrypt)
+#endif
+       {
+
+               int idx = 0;
+               if (skb->len >= hdrlen + 3)
+                       idx = skb->data[hdrlen + 3] >> 6;
+               if (ieee->iw_mode == IW_MODE_MESH) 
+               {
+                       if (ieee->mesh_sec_type == 1) { 
+                       if(ieee->mesh_security_setting==1 ||ieee->mesh_security_setting==3)
+                       {
+                               bool find_crypt = false;
+                               i = rtllib_find_MP(ieee, hdr->addr2, 0);
+                               if(is_multicast_ether_addr(((struct rtllib_hdr_3addr*)skb->data)->addr1) || is_broadcast_ether_addr(((struct rtllib_hdr_3addr*)skb->data)->addr1))
+                               {
+                                       if(ieee->only_mesh){
+                                               if(i != -1){
+                                                       i=0;
+                                               }
+                                               else
+                                               {
+                                                       printk("err find crypt\n");
+                                                       goto rx_dropped;
+                                               }
+                                       }
+                                       else
+                                       {
+                                               if(i != -1){
+                                                       i=0;
+                                               }
+                                               else
+                                               {
+                                                       find_crypt = true;
+                                                       crypt = ieee->sta_crypt[idx];
+                                               }
+                                       }
+                               }
+                               else
+                               {
+                                       if(ieee->only_mesh){
+                                               if (i != -1)
+                                               {
+                                               }
+                                               else
+                                               {
+                                                       printk("err find crypt\n");
+                                                       goto rx_dropped;
+                                               }
+                                       }
+                                       else
+                                       {
+                                               if (i != -1)
+                                               {
+                                               }
+                                               else
+                                               {
+                                                       find_crypt = true;
+                                                       crypt = ieee->sta_crypt[idx];
+                                               }
+                                       }
+                               }
+                               if(find_crypt == false){
+                                       if(ieee->cryptlist[i] == NULL)
+                                               goto rx_dropped;
+                                       else
+                                               crypt = ieee->cryptlist[i]->crypt[idx];
+                               }
+                       }
+                       }
+                       else {
+                       crypt = ieee->cryptlist[0]->crypt[idx];
+                       if(crypt)
+                       {
+                               int i = rtllib_find_MP(ieee, hdr->addr2, 0);
+                               if(ieee->only_mesh)
+                               {
+                                       if (i == -1)
+                                       {
+                                               printk("error find entry in entry list\n");
+                                               goto rx_dropped;
+                                       }
+                                       if (ieee->cryptlist[i]&&ieee->cryptlist[i]->crypt[idx])
+                                               crypt = ieee->cryptlist[i]->crypt[idx];
+
+                                       else
+                                               crypt = NULL;
+                               }
+                               else 
+                               {
+                                       if(i != -1)
+                                       {
+                                               if (ieee->cryptlist[i]&&ieee->cryptlist[i]->crypt[idx])
+                                                       crypt = ieee->cryptlist[i]->crypt[idx];
+                                               else
+                                                       crypt = NULL;
+                                       }
+                                       else
+                                               crypt = ieee->sta_crypt[idx];
+
+                               }
+                       }
+                       else
+                       {
+                               if(!ieee->ext_patch_rtllib_is_mesh(ieee,hdr->addr2))    
+                                       crypt = ieee->sta_crypt[idx];
+                       }
+               }
+               }
+               else 
+                       crypt = ieee->sta_crypt[idx];
+#ifdef NOT_YET
+               sta = NULL;
+
+               /* Use station specific key to override default keys if the
+                * receiver address is a unicast address ("individual RA"). If
+                * bcrx_sta_key parameter is set, station specific key is used
+                * even with broad/multicast targets (this is against IEEE
+                * 802.11, but makes it easier to use different keys with
+                * stations that do not support WEP key mapping). */
+
+               if (!(hdr->addr1[0] & 0x01) || local->bcrx_sta_key)
+                       (void) hostap_handle_sta_crypto(local, hdr, &crypt,
+                                                       &sta);
+#endif
+
+               /* allow NULL decrypt to indicate an station specific override
+                * for default encryption */
+               if (crypt && (crypt->ops == NULL ||
+                             crypt->ops->decrypt_mpdu == NULL))
+                       crypt = NULL;
+
+               if (!crypt && (fc & RTLLIB_FCTL_WEP)) {
+                       /* This seems to be triggered by some (multicast?)
+                        * frames from other than current BSS, so just drop the
+                        * frames silently instead of filling system log with
+                        * these reports. */
+                       RTLLIB_DEBUG_DROP("Decryption failed (not set)"
+                                            " (SA=" MAC_FMT ")\n",
+                                            MAC_ARG(hdr->addr2));
+                       ieee->ieee_stats.rx_discards_undecryptable++;
+                       goto rx_dropped;
+               }
+       }
+#endif
+       if((!rx_stats->Decrypted)){
+               ieee->need_sw_enc = 1;
+       }
+
+       if (ieee->host_decrypt && (fc & RTLLIB_FCTL_WEP) &&
+           (keyidx = rtllib_rx_frame_decrypt(ieee, skb, crypt)) < 0)
+       {
+               printk("decrypt frame error\n");
+               goto rx_dropped;
+       }
+       if (tmp_dump) {
+               printk("************after decrypt\n");
+               dump_buf(skb->data,skb->len);
+       }
+#if defined (RTL8192S_WAPI_SUPPORT)
+       if(ieee->wapiInfo.bWapiEnable){
+               if(ieee->pairwise_key_type == KEY_TYPE_SMS4){
+                       if(false == SecSWSMS4Decryption(ieee, skb, rx_stats)){
+                               WAPI_TRACE(WAPI_ERR, "%s():SMS4 decrypt frame error\n",__FUNCTION__);
+                               goto rx_dropped;
+                       }
+               }
+       }
+#endif
+       hdr = (struct rtllib_hdr_4addr *) skb->data;
+
+       /* skb: hdr + (possibly fragmented) plaintext payload */
+       if ((frag != 0 || (fc & RTLLIB_FCTL_MOREFRAGS))) {
+               int flen;
+               struct sk_buff *frag_skb = rtllib_frag_cache_get(ieee, hdr);
+               RTLLIB_DEBUG_FRAG("Rx Fragment received (%u)\n", frag);
+
+               if (!frag_skb) {
+                       RTLLIB_DEBUG(RTLLIB_DL_RX | RTLLIB_DL_FRAG,
+                                       "Rx cannot get skb from fragment "
+                                       "cache (morefrag=%d seq=%u frag=%u)\n",
+                                       (fc & RTLLIB_FCTL_MOREFRAGS) != 0,
+                                       WLAN_GET_SEQ_SEQ(sc), frag);
+                       goto rx_dropped;
+               }
+               flen = skb->len;
+               if (frag != 0)
+                       flen -= hdrlen;
+
+               if (frag_skb->tail + flen > frag_skb->end) {
+                       printk(KERN_WARNING "%s: host decrypted and "
+                              "reassembled frame did not fit skb\n",
+                              dev->name);
+                       rtllib_frag_cache_invalidate(ieee, hdr);
+                       goto rx_dropped;
+               }
+
+               if (frag == 0) {
+                       /* copy first fragment (including full headers) into
+                        * beginning of the fragment cache skb */
+                       memcpy(skb_put(frag_skb, flen), skb->data, flen);
+               } else {
+                       /* append frame payload to the end of the fragment
+                        * cache skb */
+                       memcpy(skb_put(frag_skb, flen), skb->data + hdrlen,
+                              flen);
+               }
+               dev_kfree_skb_any(skb);
+               skb = NULL;
+
+               if (fc & RTLLIB_FCTL_MOREFRAGS) {
+                       /* more fragments expected - leave the skb in fragment
+                        * cache for now; it will be delivered to upper layers
+                        * after all fragments have been received */
+                       goto rx_exit;
+               }
+
+               /* this was the last fragment and the frame will be
+                * delivered, so remove skb from fragment cache */
+               skb = frag_skb;
+               hdr = (struct rtllib_hdr_4addr *) skb->data;
+               rtllib_frag_cache_invalidate(ieee, hdr);
+       }
+
+       /* skb: hdr + (possible reassembled) full MSDU payload; possibly still
+        * encrypted/authenticated */
+       if (ieee->host_decrypt && (fc & RTLLIB_FCTL_WEP) &&
+           rtllib_rx_frame_decrypt_msdu(ieee, skb, keyidx, crypt))
+       {
+               printk("==>decrypt msdu error\n");
+               goto rx_dropped;
+       }
+
+       ieee->LinkDetectInfo.NumRecvDataInPeriod++;
+       ieee->LinkDetectInfo.NumRxOkInPeriod++;
+       
+       hdr = (struct rtllib_hdr_4addr *) skb->data;
+       if((!is_multicast_ether_addr(hdr->addr1)) && (!is_broadcast_ether_addr(hdr->addr1)))
+               unicast_packet = true;
+       if (crypt && !(fc & RTLLIB_FCTL_WEP) && !ieee->open_wep) {
+               if (/*ieee->ieee802_1x &&*/
+                   rtllib_is_eapol_frame(ieee, skb, hdrlen)) {
+
+#ifdef CONFIG_RTLLIB_DEBUG
+                       /* pass unencrypted EAPOL frames even if encryption is
+                        * configured */
+                       struct eapol *eap = (struct eapol *)(skb->data +
+                               24);
+                       RTLLIB_DEBUG_EAP("RX: IEEE 802.1X EAPOL frame: %s\n",
+                                               eap_get_type(eap->type));
+#endif
+               } else {
+                       RTLLIB_DEBUG_DROP(
+                               "encryption configured, but RX "
+                               "frame not encrypted (SA=" MAC_FMT ")\n",
+                               MAC_ARG(hdr->addr2));
+                       goto rx_dropped;
+               }
+       } 
+
+#ifdef CONFIG_RTLLIB_DEBUG
+       if (crypt && !(fc & RTLLIB_FCTL_WEP) &&
+           rtllib_is_eapol_frame(ieee, skb, hdrlen)) {
+                       struct eapol *eap = (struct eapol *)(skb->data +
+                               24);
+                       RTLLIB_DEBUG_EAP("RX: IEEE 802.1X EAPOL frame: %s\n",
+                                               eap_get_type(eap->type));
+       }
+#endif
+
+       if (crypt && !(fc & RTLLIB_FCTL_WEP) && !ieee->open_wep &&
+           !rtllib_is_eapol_frame(ieee, skb, hdrlen)) {
+               RTLLIB_DEBUG_DROP(
+                       "dropped unencrypted RX data "
+                       "frame from " MAC_FMT
+                       " (drop_unencrypted=1)\n",
+                       MAC_ARG(hdr->addr2));
+               goto rx_dropped;
+       }
+/*
+       if(rtllib_is_eapol_frame(ieee, skb, hdrlen)) {
+               printk(KERN_WARNING "RX: IEEE802.1X EPAOL frame!\n");
+       }
+*/
+       if(ieee->current_network.qos_data.active && IsQoSDataFrame(skb->data) 
+               && !is_multicast_ether_addr(hdr->addr1) && !is_broadcast_ether_addr(hdr->addr1))
+       {
+               TID = Frame_QoSTID(skb->data);
+               SeqNum = WLAN_GET_SEQ_SEQ(sc);
+               GetTs(ieee,(PTS_COMMON_INFO*) &pTS,hdr->addr2,TID,RX_DIR,true);
+               if(TID !=0 && TID !=3){
+                       ieee->bis_any_nonbepkts = true;
+               }
+       }
+#ifdef _RTL8192_EXT_PATCH_
+       if((fc & (WIFI_MESH_TYPE | RTLLIB_FCTL_FROMDS | RTLLIB_FCTL_TODS))
+               == (WIFI_MESH_TYPE | RTLLIB_FCTL_FROMDS | RTLLIB_FCTL_TODS))
+       {
+               if(ieee->iw_mode == IW_MODE_MESH){
+                       rxb = (struct rtllib_rxb*)kmalloc(sizeof(struct rtllib_rxb),GFP_ATOMIC);
+                       if(rxb == NULL)
+                       {
+                               printk("%s(): kmalloc rxb error\n",__FUNCTION__);
+                               goto rx_dropped;
+                       }
+                       memset(rxb, 0, sizeof(struct rtllib_rxb));
+                       if(msh_parse_subframe(ieee, skb, rxb)==0){
+                               /* only to free rxb, and not submit the packets to upper layer */
+                               for(i =0; i < rxb->nr_subframes; i++) {
+                                       if(rxb->subframes[i])
+                                               dev_kfree_skb(rxb->subframes[i]);
+                               }
+                               kfree(rxb);
+                               rxb = NULL;
+                               goto rx_dropped;
+                       }
+                       ret = msh_rx_process_dataframe(ieee,rxb,rx_stats);
+                       if(ret < 0) {
+                               for(i =0; i < rxb->nr_subframes; i++) {
+                                       if(rxb->subframes[i])
+                                               dev_kfree_skb(rxb->subframes[i]);
+                               }
+                               kfree(rxb);
+                               rxb = NULL;
+                               goto rx_dropped;
+                       }else{
+                               kfree(rxb);
+                               rxb = NULL;
+                       }
+               }else
+                       goto rx_dropped;
+       }else{
+#endif
+               /* skb: hdr + (possible reassembled) full plaintext payload */
+               payload = skb->data + hdrlen;
+               rxb = (struct rtllib_rxb*)kmalloc(sizeof(struct rtllib_rxb),GFP_ATOMIC);
+               if(rxb == NULL)
+               {
+                       RTLLIB_DEBUG(RTLLIB_DL_ERR,"%s(): kmalloc rxb error\n",__FUNCTION__);
+                       goto rx_dropped;
+               }
+               /* to parse amsdu packets */
+               /* qos data packets & reserved bit is 1 */
+               if(parse_subframe(ieee,skb,rx_stats,rxb,src,dst) == 0) {
+                       /* only to free rxb, and not submit the packets to upper layer */
+                       for(i =0; i < rxb->nr_subframes; i++) {
+                               dev_kfree_skb(rxb->subframes[i]);
+                       }
+                       kfree(rxb);
+                       rxb = NULL;
+                       goto rx_dropped;
+               }
+#ifdef RTL8192S_WAPI_SUPPORT
+               if(ieee->wapiInfo.bWapiEnable){
+                       if(rxb){
+                               rxb->UserPriority = TID;
+                               memcpy(rxb->WapiTempPN, rx_stats->WapiTempPN, 16);
+                               memcpy(rxb->WapiSrcAddr, rx_stats->WapiSrcAddr, 6);
+                               rxb->bWapiCheckPNInDecrypt = rx_stats->bWapiCheckPNInDecrypt;
+                       }
+               }
+#endif
+#if !defined(RTL8192SU) && !defined(RTL8192U) 
+#ifdef ENABLE_LPS
+               if(unicast_packet)
+               {
+                       if (type == RTLLIB_FTYPE_DATA)
+                       {
+                               
+                               if(ieee->bIsAggregateFrame)
+                                       ieee->LinkDetectInfo.NumRxUnicastOkInPeriod+=rxb->nr_subframes;
+                               else
+                                       ieee->LinkDetectInfo.NumRxUnicastOkInPeriod++;
+                               
+                               if((ieee->state == RTLLIB_LINKED) /*&& !MgntInitAdapterInProgress(pMgntInfo)*/)
+                               {
+                                       if(     ((ieee->LinkDetectInfo.NumRxUnicastOkInPeriod +ieee->LinkDetectInfo.NumTxOkInPeriod) > 8 ) ||
+                                               (ieee->LinkDetectInfo.NumRxUnicastOkInPeriod > 2) )
+                                       {
+                                               if(ieee->LeisurePSLeave)
+                                                       ieee->LeisurePSLeave(dev);
+                                       }
+                               }
+                       }
+               }       
+#endif
+#endif
+               ieee->last_rx_ps_time = jiffies;
+               if(ieee->pHTInfo->bCurRxReorderEnable == false ||pTS == NULL){
+                       for(i = 0; i<rxb->nr_subframes; i++) {
+                               struct sk_buff *sub_skb = rxb->subframes[i];
+
+                               if (sub_skb) {
+                                       /* convert hdr + possible LLC headers into Ethernet header */
+                                       ethertype = (sub_skb->data[6] << 8) | sub_skb->data[7];
+                                       if (sub_skb->len >= 8 &&
+                                                       ((memcmp(sub_skb->data, rfc1042_header, SNAP_SIZE) == 0 &&
+                                                         ethertype != ETH_P_AARP && ethertype != ETH_P_IPX) ||
+                                                        memcmp(sub_skb->data, bridge_tunnel_header, SNAP_SIZE) == 0)) {
+                                               /* remove RFC1042 or Bridge-Tunnel encapsulation and
+                                                * replace EtherType */
+                                               skb_pull(sub_skb, SNAP_SIZE);
+                                               memcpy(skb_push(sub_skb, ETH_ALEN), src, ETH_ALEN);
+                                               memcpy(skb_push(sub_skb, ETH_ALEN), dst, ETH_ALEN);
+                                       } else {
+                                               u16 len;
+                                               /* Leave Ethernet header part of hdr and full payload */
+                                               len = htons(sub_skb->len);
+                                               memcpy(skb_push(sub_skb, 2), &len, 2);
+                                               memcpy(skb_push(sub_skb, ETH_ALEN), src, ETH_ALEN);
+                                               memcpy(skb_push(sub_skb, ETH_ALEN), dst, ETH_ALEN);
+                                       }
+
+                                       stats->rx_packets++;
+                                       stats->rx_bytes += sub_skb->len;
+
+                                       if(is_multicast_ether_addr(dst)) {
+                                               stats->multicast++;
+                                       }
+
+                                       /* Indicat the packets to upper layer */
+                                       memset(sub_skb->cb, 0, sizeof(sub_skb->cb));
+#ifdef _RTL8192_EXT_PATCH_
+                                       sub_skb->protocol = eth_type_trans(sub_skb, sub_skb->dev);
+#else
+                                       sub_skb->protocol = eth_type_trans(sub_skb, dev);
+                                       sub_skb->dev = dev;
+#endif
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18))
+                                       sub_skb->dev->stats.rx_packets++;
+                                       sub_skb->dev->stats.rx_bytes += sub_skb->len;   
+#endif
+#ifdef TCP_CSUM_OFFLOAD_RX
+                                       if ( rx_stats->tcp_csum_valid)
+                                               sub_skb->ip_summed = CHECKSUM_UNNECESSARY;
+                                       else
+                                               sub_skb->ip_summed = CHECKSUM_NONE;
+#else
+                                       sub_skb->ip_summed = CHECKSUM_NONE; /* 802.11 crc not sufficient */
+#endif                         
+
+                                       netif_rx(sub_skb);
+                               }
+                       }
+                       kfree(rxb);
+                       rxb = NULL;
+
+               }
+               else
+               {
+                       RTLLIB_DEBUG(RTLLIB_DL_REORDER,"%s(): REORDER ENABLE AND PTS not NULL, and we will enter RxReorderIndicatePacket()\n",__FUNCTION__);            
+#ifdef TCP_CSUM_OFFLOAD_RX
+                       rxb->tcp_csum_valid = rx_stats->tcp_csum_valid;
+#endif         
+                       RxReorderIndicatePacket(ieee, rxb, pTS, SeqNum);
+               }
+#ifdef _RTL8192_EXT_PATCH_
+       }
+#endif 
+#ifndef JOHN_NOCPY
+       dev_kfree_skb(skb);
+#endif
+
+ rx_exit:
+#ifdef NOT_YET
+       if (sta)
+               hostap_handle_sta_release(sta);
+#endif
+       return 1;
+
+ rx_dropped:
+       if (rxb != NULL)
+       {
+               kfree(rxb);
+               rxb = NULL;
+       }               
+       stats->rx_dropped++;
+
+       /* Returning 0 indicates to caller that we have not handled the SKB--
+        * so it is still allocated and can be used again by underlying
+        * hardware as a DMA target */
+       return 0;
+}
+
+
+
+#define MGMT_FRAME_FIXED_PART_LENGTH            0x24
+
+static u8 qos_oui[QOS_OUI_LEN] = { 0x00, 0x50, 0xF2 };
+
+/*
+* Make ther structure we read from the beacon packet has
+* the right values
+*/
+static int rtllib_verify_qos_info(struct rtllib_qos_information_element
+                                     *info_element, int sub_type)
+{
+
+        if (info_element->qui_subtype != sub_type)
+                return -1;
+        if (memcmp(info_element->qui, qos_oui, QOS_OUI_LEN))
+                return -1;
+        if (info_element->qui_type != QOS_OUI_TYPE)
+                return -1;
+        if (info_element->version != QOS_VERSION_1)
+                return -1;
+
+        return 0;
+}
+
+
+/*
+ * Parse a QoS parameter element
+ */
+static int rtllib_read_qos_param_element(struct rtllib_qos_parameter_info
+                                            *element_param, struct rtllib_info_element
+                                            *info_element)
+{
+        int ret = 0;
+        u16 size = sizeof(struct rtllib_qos_parameter_info) - 2;
+
+        if ((info_element == NULL) || (element_param == NULL))
+                return -1;
+
+        if (info_element->id == QOS_ELEMENT_ID && info_element->len == size) {
+                memcpy(element_param->info_element.qui, info_element->data,
+                       info_element->len);
+                element_param->info_element.elementID = info_element->id;
+                element_param->info_element.length = info_element->len;
+        } else
+                ret = -1;
+        if (ret == 0)
+                ret = rtllib_verify_qos_info(&element_param->info_element,
+                                                QOS_OUI_PARAM_SUB_TYPE);
+        return ret;
+}
+
+/*
+ * Parse a QoS information element
+ */
+static int rtllib_read_qos_info_element(struct
+                                           rtllib_qos_information_element
+                                           *element_info, struct rtllib_info_element
+                                           *info_element)
+{
+        int ret = 0;
+        u16 size = sizeof(struct rtllib_qos_information_element) - 2;
+
+        if (element_info == NULL)
+                return -1;
+        if (info_element == NULL)
+                return -1;
+
+        if ((info_element->id == QOS_ELEMENT_ID) && (info_element->len == size)) {
+                memcpy(element_info->qui, info_element->data,
+                       info_element->len);
+                element_info->elementID = info_element->id;
+                element_info->length = info_element->len;
+        } else
+                ret = -1;
+
+        if (ret == 0)
+                ret = rtllib_verify_qos_info(element_info,
+                                                QOS_OUI_INFO_SUB_TYPE);
+        return ret;
+}
+
+
+/*
+ * Write QoS parameters from the ac parameters.
+ */
+static int rtllib_qos_convert_ac_to_parameters(struct rtllib_qos_parameter_info *param_elm, 
+               struct rtllib_qos_data *qos_data)
+{
+        struct rtllib_qos_ac_parameter *ac_params;
+       struct rtllib_qos_parameters *qos_param = &(qos_data->parameters);
+        int rc = 0;
+        int i;
+       u8 aci;
+       u8 acm;
+
+       qos_data->wmm_acm = 0;
+        for (i = 0; i < QOS_QUEUE_NUM; i++) {
+                ac_params = &(param_elm->ac_params_record[i]);
+
+               aci = (ac_params->aci_aifsn & 0x60) >> 5;
+               acm = (ac_params->aci_aifsn & 0x10) >> 4;
+
+               if(aci >= QOS_QUEUE_NUM)
+                       continue;
+               switch (aci) {
+                       case 1:
+                               /* BIT(0) | BIT(3) */
+                               if (acm)
+                                       qos_data->wmm_acm |= (0x01<<0)|(0x01<<3);
+                               break;
+                       case 2: 
+                               /* BIT(4) | BIT(5) */
+                               if (acm)
+                                       qos_data->wmm_acm |= (0x01<<4)|(0x01<<5);
+                               break;
+                       case 3:
+                               /* BIT(6) | BIT(7) */
+                               if (acm)
+                                       qos_data->wmm_acm |= (0x01<<6)|(0x01<<7);
+                               break;
+                       case 0:
+                       default:
+                               /* BIT(1) | BIT(2) */
+                               if (acm)
+                                       qos_data->wmm_acm |= (0x01<<1)|(0x01<<2);
+                               break;
+               }
+
+                qos_param->aifs[aci] = (ac_params->aci_aifsn) & 0x0f;
+
+               /* WMM spec P.11: The minimum value for AIFSN shall be 2 */
+                qos_param->aifs[aci] = (qos_param->aifs[aci] < 2) ? 2:qos_param->aifs[aci]; 
+
+                qos_param->cw_min[aci] = ac_params->ecw_min_max & 0x0F;
+
+                qos_param->cw_max[aci] = (ac_params->ecw_min_max & 0xF0) >> 4;
+
+                qos_param->flag[aci] =
+                    (ac_params->aci_aifsn & 0x10) ? 0x01 : 0x00;
+                qos_param->tx_op_limit[aci] = le16_to_cpu(ac_params->tx_op_limit);
+        }
+        return rc;
+}
+
+/*
+ * we have a generic data element which it may contain QoS information or
+ * parameters element. check the information element length to decide
+ * which type to read
+ */
+static int rtllib_parse_qos_info_param_IE(struct rtllib_info_element
+                                             *info_element,
+                                             struct rtllib_network *network)
+{
+        int rc = 0;
+        struct rtllib_qos_information_element qos_info_element;
+
+        rc = rtllib_read_qos_info_element(&qos_info_element, info_element);
+
+        if (rc == 0) {
+                network->qos_data.param_count = qos_info_element.ac_info & 0x0F;
+                network->flags |= NETWORK_HAS_QOS_INFORMATION;
+        } else {
+                struct rtllib_qos_parameter_info param_element;
+
+                rc = rtllib_read_qos_param_element(&param_element,
+                                                      info_element);
+                if (rc == 0) {
+                        rtllib_qos_convert_ac_to_parameters(&param_element,
+                                                               &(network->qos_data));
+                        network->flags |= NETWORK_HAS_QOS_PARAMETERS;
+                        network->qos_data.param_count =
+                            param_element.info_element.ac_info & 0x0F;
+                }
+        }
+
+        if (rc == 0) {
+                RTLLIB_DEBUG_QOS("QoS is supported\n");
+                network->qos_data.supported = 1;
+        }
+        return rc;
+}
+
+#ifdef CONFIG_RTLLIB_DEBUG
+#define MFIE_STRING(x) case MFIE_TYPE_ ##x: return #x
+
+static const char *get_info_element_string(u16 id)
+{
+        switch (id) {
+                MFIE_STRING(SSID);
+                MFIE_STRING(RATES);
+                MFIE_STRING(FH_SET);
+                MFIE_STRING(DS_SET);
+                MFIE_STRING(CF_SET);
+                MFIE_STRING(TIM);
+                MFIE_STRING(IBSS_SET);
+                MFIE_STRING(COUNTRY);
+                MFIE_STRING(HOP_PARAMS);
+                MFIE_STRING(HOP_TABLE);
+                MFIE_STRING(REQUEST);
+                MFIE_STRING(CHALLENGE);
+                MFIE_STRING(POWER_CONSTRAINT);
+                MFIE_STRING(POWER_CAPABILITY);
+                MFIE_STRING(TPC_REQUEST);
+                MFIE_STRING(TPC_REPORT);
+                MFIE_STRING(SUPP_CHANNELS);
+                MFIE_STRING(CSA);
+                MFIE_STRING(MEASURE_REQUEST);
+                MFIE_STRING(MEASURE_REPORT);
+                MFIE_STRING(QUIET);
+                MFIE_STRING(IBSS_DFS);
+                MFIE_STRING(RSN);
+                MFIE_STRING(RATES_EX);
+                MFIE_STRING(GENERIC);
+                MFIE_STRING(QOS_PARAMETER);
+        default:
+                return "UNKNOWN";
+        }
+}
+#endif
+
+#ifdef ENABLE_DOT11D
+static inline void rtllib_extract_country_ie(
+       struct rtllib_device *ieee,
+       struct rtllib_info_element *info_element,
+       struct rtllib_network *network,
+       u8 * addr2)
+{
+       if (IS_DOT11D_ENABLE(ieee)) {
+               if(info_element->len!= 0) {
+                       memcpy(network->CountryIeBuf, info_element->data, info_element->len);
+                       network->CountryIeLen = info_element->len;
+
+                       if(!IS_COUNTRY_IE_VALID(ieee))
+                       {
+                               if((rtllib_act_scanning(ieee,false) == true) && (ieee->FirstIe_InScan == 1))
+                                       printk("Received beacon ContryIE, SSID: <%s>\n",network->ssid);
+                               Dot11d_UpdateCountryIe(ieee, addr2, info_element->len, info_element->data);
+                       }
+               }
+
+               if (IS_EQUAL_CIE_SRC(ieee, addr2)) {
+                       UPDATE_CIE_WATCHDOG(ieee);
+               }
+       }
+
+}
+#endif
+
+int rtllib_parse_info_param(struct rtllib_device *ieee,
+               struct rtllib_info_element *info_element, 
+               u16 length,
+               struct rtllib_network *network,
+               struct rtllib_rx_stats *stats)
+{
+       u8 i;
+       short offset;
+        u16    tmp_htcap_len=0;
+       u16     tmp_htinfo_len=0;
+       u16 ht_realtek_agg_len=0;
+       u8  ht_realtek_agg_buf[MAX_IE_LEN];
+#ifdef CONFIG_RTLLIB_DEBUG
+       char rates_str[64];
+       char *p;
+#endif
+#ifdef RTL8192S_WAPI_SUPPORT
+       u8 tmp_wapi_len = 0;
+#endif
+       while (length >= sizeof(*info_element)) {
+               if (sizeof(*info_element) + info_element->len > length) {
+                       RTLLIB_DEBUG_MGMT("Info elem: parse failed: "
+                                            "info_element->len + 2 > left : "
+                                            "info_element->len+2=%zd left=%d, id=%d.\n",
+                                            info_element->len +
+                                            sizeof(*info_element),
+                                            length, info_element->id);
+                       /* We stop processing but don't return an error here
+                        * because some misbehaviour APs break this rule. ie.
+                        * Orinoco AP1000. */
+                       break;
+               }
+
+               switch (info_element->id) {
+               case MFIE_TYPE_SSID:
+                       if (rtllib_is_empty_essid(info_element->data,
+                                                    info_element->len)) {
+                               network->flags |= NETWORK_EMPTY_ESSID;
+                               break;
+                       }
+
+                       network->ssid_len = min(info_element->len,
+                                               (u8) IW_ESSID_MAX_SIZE);
+                       memcpy(network->ssid, info_element->data, network->ssid_len);
+                       if (network->ssid_len < IW_ESSID_MAX_SIZE)
+                               memset(network->ssid + network->ssid_len, 0,
+                                      IW_ESSID_MAX_SIZE - network->ssid_len);
+
+                       RTLLIB_DEBUG_MGMT("MFIE_TYPE_SSID: '%s' len=%d.\n",
+                                            network->ssid, network->ssid_len);
+                       break;
+
+               case MFIE_TYPE_RATES:
+#ifdef CONFIG_RTLLIB_DEBUG
+                       p = rates_str;
+#endif
+                       network->rates_len = min(info_element->len,
+                                                MAX_RATES_LENGTH);
+                       for (i = 0; i < network->rates_len; i++) {
+                               network->rates[i] = info_element->data[i];
+#ifdef CONFIG_RTLLIB_DEBUG
+                               p += snprintf(p, sizeof(rates_str) -
+                                             (p - rates_str), "%02X ",
+                                             network->rates[i]);
+#endif
+                               if (rtllib_is_ofdm_rate
+                                   (info_element->data[i])) {
+                                       network->flags |= NETWORK_HAS_OFDM;
+                                       if (info_element->data[i] &
+                                           RTLLIB_BASIC_RATE_MASK)
+                                               network->flags &=
+                                                   ~NETWORK_HAS_CCK;
+                               }
+
+                               if (rtllib_is_cck_rate
+                                   (info_element->data[i])) {
+                                       network->flags |= NETWORK_HAS_CCK;
+                               }
+                       }
+
+                       RTLLIB_DEBUG_MGMT("MFIE_TYPE_RATES: '%s' (%d)\n",
+                                            rates_str, network->rates_len);
+                       break;
+
+               case MFIE_TYPE_RATES_EX:
+#ifdef CONFIG_RTLLIB_DEBUG
+                       p = rates_str;
+#endif
+                       network->rates_ex_len = min(info_element->len,
+                                                   MAX_RATES_EX_LENGTH);
+                       for (i = 0; i < network->rates_ex_len; i++) {
+                               network->rates_ex[i] = info_element->data[i];
+#ifdef CONFIG_RTLLIB_DEBUG
+                               p += snprintf(p, sizeof(rates_str) -
+                                             (p - rates_str), "%02X ",
+                                             network->rates[i]);
+#endif
+                               if (rtllib_is_ofdm_rate
+                                   (info_element->data[i])) {
+                                       network->flags |= NETWORK_HAS_OFDM;
+                                       if (info_element->data[i] &
+                                           RTLLIB_BASIC_RATE_MASK)
+                                               network->flags &=
+                                                   ~NETWORK_HAS_CCK;
+                               }
+                       }
+
+                       RTLLIB_DEBUG_MGMT("MFIE_TYPE_RATES_EX: '%s' (%d)\n",
+                                            rates_str, network->rates_ex_len);
+                       break;
+
+               case MFIE_TYPE_DS_SET:
+                       RTLLIB_DEBUG_MGMT("MFIE_TYPE_DS_SET: %d\n",
+                                            info_element->data[0]);
+                       network->channel = info_element->data[0];
+                       break;
+
+               case MFIE_TYPE_FH_SET:
+                       RTLLIB_DEBUG_MGMT("MFIE_TYPE_FH_SET: ignored\n");
+                       break;
+
+               case MFIE_TYPE_CF_SET:
+                       RTLLIB_DEBUG_MGMT("MFIE_TYPE_CF_SET: ignored\n");
+                       break;
+
+               case MFIE_TYPE_TIM:
+                       if(info_element->len < 4) 
+                               break;
+
+                       network->tim.tim_count = info_element->data[0];
+                       network->tim.tim_period = info_element->data[1];
+
+                        network->dtim_period = info_element->data[1];
+                        if(ieee->state != RTLLIB_LINKED)
+                                break;
+#if 0
+                        network->last_dtim_sta_time[0] = stats->mac_time[0];
+#else
+                       network->last_dtim_sta_time[0] = jiffies;
+#endif
+                        network->last_dtim_sta_time[1] = stats->mac_time[1];
+
+                        network->dtim_data = RTLLIB_DTIM_VALID;
+                        
+
+                        if(info_element->data[2] & 1)
+                                network->dtim_data |= RTLLIB_DTIM_MBCAST;
+                                
+#if 1
+                        offset = (info_element->data[2] >> 1)*2;
+                        
+                
+                        if(ieee->assoc_id < 8*offset || 
+                                ieee->assoc_id > 8*(offset + info_element->len -3))
+                                
+                                break;
+
+                        offset = (ieee->assoc_id / 8) - offset;
+                        if(info_element->data[3+offset] & (1<<(ieee->assoc_id%8)))
+                                network->dtim_data |= RTLLIB_DTIM_UCAST;
+#else
+                       {
+                               u16 numSta = 0;
+                               u16 offset_byte = 0;
+                               u16 offset_bit = 0;
+
+                               numSta = (info_element->data[2] &0xFE)*8;
+
+                               if(ieee->assoc_id < numSta ||
+                                               ieee->assoc_id > (numSta + (info_element->len -3)*8))
+                                       break;
+
+                               offset = ieee->assoc_id - numSta;
+                               offset_byte = offset / 8;
+                               offset_bit = offset % 8;
+                               if(info_element->data[3+offset_byte] & (0x01<<offset_bit))
+                                       network->dtim_data |= RTLLIB_DTIM_UCAST;
+                       }
+#endif
+
+                       network->listen_interval = network->dtim_period;
+                       break;
+
+               case MFIE_TYPE_ERP:
+                       network->erp_value = info_element->data[0];
+                       network->flags |= NETWORK_HAS_ERP_VALUE;
+                       RTLLIB_DEBUG_MGMT("MFIE_TYPE_ERP_SET: %d\n",
+                                            network->erp_value);
+                       break;
+               case MFIE_TYPE_IBSS_SET:
+                       network->atim_window = info_element->data[0];
+                       RTLLIB_DEBUG_MGMT("MFIE_TYPE_IBSS_SET: %d\n",
+                                            network->atim_window);
+                       break;
+
+               case MFIE_TYPE_CHALLENGE:
+                       RTLLIB_DEBUG_MGMT("MFIE_TYPE_CHALLENGE: ignored\n");
+                       break;
+
+               case MFIE_TYPE_GENERIC:
+                       RTLLIB_DEBUG_MGMT("MFIE_TYPE_GENERIC: %d bytes\n",
+                                            info_element->len);
+                       if (!rtllib_parse_qos_info_param_IE(info_element,
+                                                              network))
+                               break;
+                       if (info_element->len >= 4 &&
+                           info_element->data[0] == 0x00 &&
+                           info_element->data[1] == 0x50 &&
+                           info_element->data[2] == 0xf2 &&
+                           info_element->data[3] == 0x01) {
+                               network->wpa_ie_len = min(info_element->len + 2,
+                                                         MAX_WPA_IE_LEN);
+                               memcpy(network->wpa_ie, info_element,
+                                      network->wpa_ie_len);
+                               break;
+                       }
+#ifdef THOMAS_TURBO
+                        if (info_element->len == 7 &&
+                            info_element->data[0] == 0x00 &&
+                            info_element->data[1] == 0xe0 &&
+                            info_element->data[2] == 0x4c &&
+                            info_element->data[3] == 0x01 &&
+                            info_element->data[4] == 0x02) {
+                                network->Turbo_Enable = 1;
+                        }
+#endif
+
+                       if(tmp_htcap_len == 0){
+                               if(info_element->len >= 4 &&
+                                  info_element->data[0] == 0x00 &&
+                                  info_element->data[1] == 0x90 &&
+                                  info_element->data[2] == 0x4c &&
+                                  info_element->data[3] == 0x033){
+                                  
+                                               tmp_htcap_len = min(info_element->len,(u8)MAX_IE_LEN);
+                                               if(tmp_htcap_len != 0){
+                                                       network->bssht.bdHTSpecVer = HT_SPEC_VER_EWC;
+                                                       network->bssht.bdHTCapLen = tmp_htcap_len > sizeof(network->bssht.bdHTCapBuf)?\
+                                                               sizeof(network->bssht.bdHTCapBuf):tmp_htcap_len;
+                                                       memcpy(network->bssht.bdHTCapBuf,info_element->data,network->bssht.bdHTCapLen);                                                 
+                                               }
+                               }
+                               if(tmp_htcap_len != 0){
+                                       network->bssht.bdSupportHT = true;
+                                       network->bssht.bdHT1R = ((((PHT_CAPABILITY_ELE)(network->bssht.bdHTCapBuf))->MCS[1]) == 0);
+                               }else{
+                                       network->bssht.bdSupportHT = false;
+                                       network->bssht.bdHT1R = false;
+                               }
+                       }
+                       
+                       
+                       if(tmp_htinfo_len == 0){
+                               if(info_element->len >= 4 &&
+                                       info_element->data[0] == 0x00 &&
+                                       info_element->data[1] == 0x90 &&
+                                       info_element->data[2] == 0x4c &&
+                                       info_element->data[3] == 0x034){
+
+                                               tmp_htinfo_len = min(info_element->len,(u8)MAX_IE_LEN);
+                                               if(tmp_htinfo_len != 0){
+                                                       network->bssht.bdHTSpecVer = HT_SPEC_VER_EWC;
+                                                       if(tmp_htinfo_len){
+                                                               network->bssht.bdHTInfoLen = tmp_htinfo_len > sizeof(network->bssht.bdHTInfoBuf)?\
+                                                                       sizeof(network->bssht.bdHTInfoBuf):tmp_htinfo_len;
+                                                               memcpy(network->bssht.bdHTInfoBuf,info_element->data,network->bssht.bdHTInfoLen);
+                                                       }
+                                                       
+                                               }
+                                               
+                               }
+                       }
+
+                       if(ieee->aggregation){
+                               if(network->bssht.bdSupportHT){
+                                       if(info_element->len >= 4 &&
+                                               info_element->data[0] == 0x00 &&
+                                               info_element->data[1] == 0xe0 &&
+                                               info_element->data[2] == 0x4c &&
+                                               info_element->data[3] == 0x02){
+
+                                               ht_realtek_agg_len = min(info_element->len,(u8)MAX_IE_LEN);
+                                               memcpy(ht_realtek_agg_buf,info_element->data,info_element->len);
+                                               
+                                       }
+                                       if(ht_realtek_agg_len >= 5){
+                                               network->realtek_cap_exit = true;
+                                               network->bssht.bdRT2RTAggregation = true;
+
+                                               if((ht_realtek_agg_buf[4] == 1) && (ht_realtek_agg_buf[5] & 0x02))
+                                               network->bssht.bdRT2RTLongSlotTime = true;
+
+                                               if((ht_realtek_agg_buf[4]==1) && (ht_realtek_agg_buf[5] & RT_HT_CAP_USE_92SE))
+                                               {
+                                                       network->bssht.RT2RT_HT_Mode |= RT_HT_CAP_USE_92SE;
+                                               }
+                                       }
+                               }
+                               if(ht_realtek_agg_len >= 5){
+                                       if((ht_realtek_agg_buf[5] & RT_HT_CAP_USE_SOFTAP))
+                                               network->bssht.RT2RT_HT_Mode |= RT_HT_CAP_USE_SOFTAP;
+                               }
+                       }
+
+                       {
+                               if((info_element->len >= 3 &&
+                                        info_element->data[0] == 0x00 &&
+                                        info_element->data[1] == 0x05 &&
+                                        info_element->data[2] == 0xb5) || 
+                                        (info_element->len >= 3 &&
+                                        info_element->data[0] == 0x00 &&
+                                        info_element->data[1] == 0x0a &&
+                                        info_element->data[2] == 0xf7) ||
+                                        (info_element->len >= 3 &&
+                                        info_element->data[0] == 0x00 &&
+                                        info_element->data[1] == 0x10 &&
+                                        info_element->data[2] == 0x18)){
+
+                                               network->broadcom_cap_exist = true;
+
+                               }
+                       }
+#if 0  
+                       if (tmp_htcap_len !=0)
+                               {
+                                       u16 cap_ext = ((PHT_CAPABILITY_ELE)&info_element->data[0])->ExtHTCapInfo;
+                                       if ((cap_ext & 0x0c00) == 0x0c00)
+                                               {
+                                                       network->ralink_cap_exist = true;
+                                               }
+                               }
+#endif
+                       if(info_element->len >= 3 &&
+                               info_element->data[0] == 0x00 &&
+                               info_element->data[1] == 0x0c &&
+                               info_element->data[2] == 0x43)
+                       {
+                               network->ralink_cap_exist = true;
+                       }
+                       if((info_element->len >= 3 && 
+                               info_element->data[0] == 0x00 &&
+                               info_element->data[1] == 0x03 &&
+                               info_element->data[2] == 0x7f) ||
+                               (info_element->len >= 3 &&
+                               info_element->data[0] == 0x00 &&
+                               info_element->data[1] == 0x13 &&
+                               info_element->data[2] == 0x74))
+                       {
+                               network->atheros_cap_exist = true;
+                       }
+
+                       if ((info_element->len >= 3 && 
+                               info_element->data[0] == 0x00 &&
+                               info_element->data[1] == 0x50 &&
+                               info_element->data[2] == 0x43) )
+                               {
+                                       network->marvell_cap_exist = true;
+                               }
+                       if(info_element->len >= 3 &&
+                               info_element->data[0] == 0x00 &&
+                               info_element->data[1] == 0x40 &&
+                               info_element->data[2] == 0x96)
+                       {
+                               network->cisco_cap_exist = true;
+                       }
+                       if(info_element->len > 4 && 
+                               info_element->data[0] == 0x00 &&
+                               info_element->data[1] == 0x40 &&
+                               info_element->data[2] == 0x96 &&
+                               info_element->data[3] == 0x01)
+                       {
+                               if(info_element->len == 6)
+                               {
+                                       memcpy(network->CcxRmState, &info_element[4], 2);
+                                       if(network->CcxRmState[0] != 0)
+                                       {
+                                               network->bCcxRmEnable = true;
+                                       }
+                                       else
+                                               network->bCcxRmEnable = false;
+                                       network->MBssidMask = network->CcxRmState[1] & 0x07;
+                                       if(network->MBssidMask != 0)
+                                       {
+                                               network->bMBssidValid = true;
+                                               network->MBssidMask = 0xff << (network->MBssidMask);
+                                               memcpy(network->MBssid, network->bssid, ETH_ALEN);
+                                               network->MBssid[5] &= network->MBssidMask;
+                                       }
+                                       else
+                                       {
+                                               network->bMBssidValid = false;
+                                       }
+                               }
+                               else
+                               {
+                                       network->bCcxRmEnable = false;
+                               }
+                       }
+                       if(info_element->len > 4  && 
+                               info_element->data[0] == 0x00 &&
+                               info_element->data[1] == 0x40 &&
+                               info_element->data[2] == 0x96 &&
+                               info_element->data[3] == 0x03)
+                       {
+                               if(info_element->len == 5)
+                               {
+                                       network->bWithCcxVerNum = true;
+                                       network->BssCcxVerNumber = info_element->data[4];
+                               }
+                               else
+                               {
+                                       network->bWithCcxVerNum = false;
+                                       network->BssCcxVerNumber = 0;
+                               }
+                       }
+                       if(info_element->len > 4  && 
+                               info_element->data[0] == 0x00 &&
+                               info_element->data[1] == 0x50 &&
+                               info_element->data[2] == 0xf2 &&
+                               info_element->data[3] == 0x04)
+                       {
+                               RTLLIB_DEBUG_MGMT("MFIE_TYPE_WZC: %d bytes\n",
+                                                    info_element->len);
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) 
+                               network->wzc_ie_len = min(info_element->len+2,
+                                                         MAX_WZC_IE_LEN);
+                               memcpy(network->wzc_ie, info_element,
+                                               network->wzc_ie_len);
+#endif
+                       }
+#ifdef _RTL8192_EXT_PATCH_
+                       if(info_element->len > 4  && 
+                               info_element->data[0] == 0x48 &&
+                               info_element->data[1] == 0x4F &&
+                               info_element->data[2] == 0x53 &&
+                               info_element->data[3] == 0x54)
+                       {
+                               network->hostname_len = info_element->len - 4;
+                               memcpy(network->hostname, (info_element->data+4), network->hostname_len);
+                       }
+#endif
+                       break;
+
+               case MFIE_TYPE_RSN:
+                       RTLLIB_DEBUG_MGMT("MFIE_TYPE_RSN: %d bytes\n",
+                                            info_element->len);
+                       network->rsn_ie_len = min(info_element->len + 2,
+                                                 MAX_WPA_IE_LEN);
+                       memcpy(network->rsn_ie, info_element,
+                              network->rsn_ie_len);
+                       break;
+
+               case MFIE_TYPE_HT_CAP:
+                       RTLLIB_DEBUG_SCAN("MFIE_TYPE_HT_CAP: %d bytes\n",
+                                            info_element->len);
+                       tmp_htcap_len = min(info_element->len,(u8)MAX_IE_LEN);
+                       if(tmp_htcap_len != 0){
+                               network->bssht.bdHTSpecVer = HT_SPEC_VER_EWC;
+                               network->bssht.bdHTCapLen = tmp_htcap_len > sizeof(network->bssht.bdHTCapBuf)?\
+                                       sizeof(network->bssht.bdHTCapBuf):tmp_htcap_len;
+                               memcpy(network->bssht.bdHTCapBuf,info_element->data,network->bssht.bdHTCapLen);
+                               
+                               network->bssht.bdSupportHT = true;
+                               network->bssht.bdHT1R = ((((PHT_CAPABILITY_ELE)(network->bssht.bdHTCapBuf))->MCS[1]) == 0);
+
+                               network->bssht.bdBandWidth = (HT_CHANNEL_WIDTH)(((PHT_CAPABILITY_ELE)(network->bssht.bdHTCapBuf))->ChlWidth);
+                       }
+                       else{
+                               network->bssht.bdSupportHT = false;
+                               network->bssht.bdHT1R = false;
+                               network->bssht.bdBandWidth = HT_CHANNEL_WIDTH_20 ;
+                       }
+                       break;
+
+
+               case MFIE_TYPE_HT_INFO:
+                       RTLLIB_DEBUG_SCAN("MFIE_TYPE_HT_INFO: %d bytes\n",
+                                            info_element->len);
+                       tmp_htinfo_len = min(info_element->len,(u8)MAX_IE_LEN);
+                       if(tmp_htinfo_len){
+                               network->bssht.bdHTSpecVer = HT_SPEC_VER_IEEE;
+                               network->bssht.bdHTInfoLen = tmp_htinfo_len > sizeof(network->bssht.bdHTInfoBuf)?\
+                                       sizeof(network->bssht.bdHTInfoBuf):tmp_htinfo_len;
+                               memcpy(network->bssht.bdHTInfoBuf,info_element->data,network->bssht.bdHTInfoLen);
+                       }
+                       break;
+
+               case MFIE_TYPE_AIRONET:
+                       RTLLIB_DEBUG_SCAN("MFIE_TYPE_AIRONET: %d bytes\n",
+                                            info_element->len);
+                       if(info_element->len >IE_CISCO_FLAG_POSITION)
+                       {
+                               network->bWithAironetIE = true;
+
+                               if(     (info_element->data[IE_CISCO_FLAG_POSITION]&SUPPORT_CKIP_MIC)   ||
+                                       (info_element->data[IE_CISCO_FLAG_POSITION]&SUPPORT_CKIP_PK)    )
+                               {
+                                       network->bCkipSupported = true;
+                               }
+                               else
+                               {
+                                       network->bCkipSupported = false;
+                               }
+                       }
+                       else
+                       {
+                               network->bWithAironetIE = false;
+                               network->bCkipSupported = false;
+                       }
+                       break;
+               case MFIE_TYPE_QOS_PARAMETER:
+                       printk(KERN_ERR
+                              "QoS Error need to parse QOS_PARAMETER IE\n");
+                       break;
+
+#ifdef ENABLE_DOT11D
+               case MFIE_TYPE_COUNTRY:
+                       RTLLIB_DEBUG_SCAN("MFIE_TYPE_COUNTRY: %d bytes\n",
+                                            info_element->len);
+                       rtllib_extract_country_ie(ieee, info_element, network, network->bssid);
+                       break;
+#endif
+#ifdef _RTL8192_EXT_PATCH_
+               case MFIE_TYPE_MESH_ID:
+                       network->mesh_id_len = min(info_element->len, (u8)MAX_MESH_ID_LEN);
+                       memcpy(network->mesh_id, info_element->data, network->mesh_id_len);
+                       if (network->mesh_id_len < MAX_MESH_ID_LEN) {
+                               memset(network->mesh_id + network->mesh_id_len, 0,
+                                       MAX_MESH_ID_LEN - network->mesh_id_len);
+                       }
+                       RTLLIB_DEBUG_MGMT("MFIE_TYPE_MESH_ID: '%s'len=%d.\n", network->mesh_id, 
+                                       network->mesh_id_len);
+                       break;
+
+               case MFIE_TYPE_MESH_CONFIGURATION:
+                       network->mesh_config_len = min(info_element->len, (u8)MESH_CONF_TOTAL_LEN); 
+                       memcpy(network->mesh_config.path_proto_id, info_element->data + 1, 4);
+                       memcpy(network->mesh_config.path_metric_id, info_element->data + 5, 4);
+                       memcpy(network->mesh_config.congest_ctl_mode, info_element->data + 9, 4);
+                       memcpy(network->mesh_config.mesh_capability, info_element->data + 17, 2);
+                       break;
+#endif
+/* TODO */
+#if 0
+                       /* 802.11h */
+               case MFIE_TYPE_POWER_CONSTRAINT:
+                       network->power_constraint = info_element->data[0];
+                       network->flags |= NETWORK_HAS_POWER_CONSTRAINT;
+                       break;
+
+               case MFIE_TYPE_CSA:
+                       network->power_constraint = info_element->data[0];
+                       network->flags |= NETWORK_HAS_CSA;
+                       break;
+
+               case MFIE_TYPE_QUIET:
+                       network->quiet.count = info_element->data[0];
+                       network->quiet.period = info_element->data[1];
+                       network->quiet.duration = info_element->data[2];
+                       network->quiet.offset = info_element->data[3];
+                       network->flags |= NETWORK_HAS_QUIET;
+                       break;
+
+               case MFIE_TYPE_IBSS_DFS:
+                       if (network->ibss_dfs)
+                               break;
+                       network->ibss_dfs = kmemdup(info_element->data,
+                                                   info_element->len,
+                                                   GFP_ATOMIC);
+                       if (!network->ibss_dfs)
+                               return 1;
+                       network->flags |= NETWORK_HAS_IBSS_DFS;
+                       break;
+
+               case MFIE_TYPE_TPC_REPORT:
+                       network->tpc_report.transmit_power =
+                           info_element->data[0];
+                       network->tpc_report.link_margin = info_element->data[1];
+                       network->flags |= NETWORK_HAS_TPC_REPORT;
+                       break;
+#endif
+#ifdef RTL8192S_WAPI_SUPPORT
+               case MFIE_TYPE_WAPI:
+                       RTLLIB_DEBUG_MGMT("MFIE_TYPE_WAPI: %d bytes\n", info_element->len);
+                       tmp_wapi_len = min(info_element->len,(u8)MAX_WAPI_IE_LEN);
+                       if(tmp_wapi_len){
+                               network->wapi_ie_len = tmp_wapi_len;
+                               memcpy(network->wapi_ie,info_element->data,network->wapi_ie_len);
+                       }
+                       break;
+#endif
+               default:
+                       RTLLIB_DEBUG_MGMT
+                           ("Unsupported info element: %s (%d)\n",
+                            get_info_element_string(info_element->id),
+                            info_element->id);
+                       break;
+               }
+
+               length -= sizeof(*info_element) + info_element->len;
+               info_element =
+                   (struct rtllib_info_element *)&info_element->
+                   data[info_element->len];
+       }
+
+       if(!network->atheros_cap_exist && !network->broadcom_cap_exist && 
+               !network->cisco_cap_exist && !network->ralink_cap_exist && !network->bssht.bdRT2RTAggregation)
+       {
+               network->unknown_cap_exist = true;
+       }
+       else
+       {
+               network->unknown_cap_exist = false;
+       }
+       return 0;
+}
+
+static inline u8 rtllib_SignalStrengthTranslate(
+       u8  CurrSS
+       )
+{
+       u8 RetSS;
+
+       if(CurrSS >= 71 && CurrSS <= 100)
+       {
+               RetSS = 90 + ((CurrSS - 70) / 3);
+       }       
+       else if(CurrSS >= 41 && CurrSS <= 70)
+       {
+               RetSS = 78 + ((CurrSS - 40) / 3);
+       }       
+       else if(CurrSS >= 31 && CurrSS <= 40)
+       {
+               RetSS = 66 + (CurrSS - 30);
+       }       
+       else if(CurrSS >= 21 && CurrSS <= 30)
+       {
+               RetSS = 54 + (CurrSS - 20);
+       }       
+       else if(CurrSS >= 5 && CurrSS <= 20)
+       {
+               RetSS = 42 + (((CurrSS - 5) * 2) / 3);
+       }       
+       else if(CurrSS == 4)
+       {
+               RetSS = 36; 
+       }
+       else if(CurrSS == 3)
+       {
+               RetSS = 27; 
+       }
+       else if(CurrSS == 2)
+       {
+               RetSS = 18; 
+       }
+       else if(CurrSS == 1)
+       {
+               RetSS = 9; 
+       }
+       else
+       {
+               RetSS = CurrSS; 
+       }
+
+       
+
+       return RetSS;
+}
+
+long rtllib_translate_todbm(u8 signal_strength_index   )
+{
+       long    signal_power; 
+
+       signal_power = (long)((signal_strength_index + 1) >> 1); 
+       signal_power -= 95; 
+
+       return signal_power;
+}
+
+#ifdef _RTL8192_EXT_PATCH_
+extern int rtllib_network_init(
+#else
+static inline int rtllib_network_init(
+#endif
+       struct rtllib_device *ieee,
+       struct rtllib_probe_response *beacon,
+       struct rtllib_network *network,
+       struct rtllib_rx_stats *stats)
+{
+#ifdef CONFIG_RTLLIB_DEBUG
+#endif
+
+       /*      
+        network->qos_data.active = 0;
+        network->qos_data.supported = 0;
+        network->qos_data.param_count = 0;
+        network->qos_data.old_param_count = 0;
+       */
+       memset(&network->qos_data, 0, sizeof(struct rtllib_qos_data));
+
+       /* Pull out fixed field data */
+       memcpy(network->bssid, beacon->header.addr3, ETH_ALEN);
+       network->capability = le16_to_cpu(beacon->capability);
+       network->last_scanned = jiffies;
+       network->time_stamp[0] = le32_to_cpu(beacon->time_stamp[0]);
+       network->time_stamp[1] = le32_to_cpu(beacon->time_stamp[1]);
+       network->beacon_interval = le32_to_cpu(beacon->beacon_interval);
+       /* Where to pull this? beacon->listen_interval;*/
+       network->listen_interval = 0x0A;
+       network->rates_len = network->rates_ex_len = 0;
+       network->last_associate = 0;
+       network->ssid_len = 0;
+       network->hidden_ssid_len = 0;
+       memset(network->hidden_ssid, 0, sizeof(network->hidden_ssid));
+       network->flags = 0;
+       network->atim_window = 0;
+       network->erp_value = (network->capability & WLAN_CAPABILITY_IBSS) ?
+            0x3 : 0x0;
+       network->berp_info_valid = false;
+        network->broadcom_cap_exist = false;
+       network->ralink_cap_exist = false;
+       network->atheros_cap_exist = false;
+       network->cisco_cap_exist = false;
+       network->unknown_cap_exist = false;
+       network->realtek_cap_exit = false;
+       network->marvell_cap_exist = false;
+#ifdef THOMAS_TURBO
+       network->Turbo_Enable = 0;
+#endif
+       network->SignalStrength = stats->SignalStrength;        
+       network->RSSI = stats->SignalStrength;  
+#ifdef ENABLE_DOT11D
+       network->CountryIeLen = 0;
+       memset(network->CountryIeBuf, 0, MAX_IE_LEN);
+#endif
+#ifdef _RTL8192_EXT_PATCH_
+       memset(network->hostname, 0, MAX_HOST_NAME_LENGTH);
+       network->hostname_len = 0;
+#endif
+       HTInitializeBssDesc(&network->bssht);   
+       if (stats->freq == RTLLIB_52GHZ_BAND) {
+               /* for A band (No DS info) */
+               network->channel = stats->received_channel;
+       } else
+               network->flags |= NETWORK_HAS_CCK;
+
+       network->wpa_ie_len = 0;
+       network->rsn_ie_len = 0;
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) 
+       network->wzc_ie_len = 0;
+#endif
+
+        if (rtllib_parse_info_param(ieee,
+                       beacon->info_element, 
+                       (stats->len - sizeof(*beacon)), 
+                       network, 
+                       stats))
+                return 1;
+
+       network->mode = 0;
+       if (stats->freq == RTLLIB_52GHZ_BAND)
+               network->mode = IEEE_A;
+       else {
+               if (network->flags & NETWORK_HAS_OFDM)
+                       network->mode |= IEEE_G;
+               if (network->flags & NETWORK_HAS_CCK)
+                       network->mode |= IEEE_B;
+       }
+
+       if (network->mode == 0) {
+               RTLLIB_DEBUG_SCAN("Filtered out '%s (" MAC_FMT ")' "
+                                    "network.\n",
+                                    escape_essid(network->ssid,
+                                                 network->ssid_len),
+                                    MAC_ARG(network->bssid));
+               return 1;
+       }
+
+       if(network->bssht.bdSupportHT){
+#ifdef _RTL8192_EXT_PATCH_
+               if(network->mode == IEEE_A)
+                       network->mode |= IEEE_N_5G;
+               else if(network->mode & (IEEE_G | IEEE_B))
+                       network->mode |= IEEE_N_24G;
+#else
+               if(network->mode == IEEE_A)
+                       network->mode = IEEE_N_5G;
+               else if(network->mode & (IEEE_G | IEEE_B))
+                       network->mode = IEEE_N_24G;
+#endif
+       }
+       if (rtllib_is_empty_essid(network->ssid, network->ssid_len))
+               network->flags |= NETWORK_EMPTY_ESSID;
+
+#if  0 
+        {
+            static u8 Netgear845T_Mac[3] = {0x00, 0x1B, 0x2F};
+            static u8 Buffalo300N_Mac[3] = {0x00, 0x16, 0x01};
+
+            if(ieee->RF_Type == RF_1T1R || ieee->b1SSSupport == true)
+            {
+                if((memcmp(network->bssid, Netgear845T_Mac, 3)==0) ||(memcmp(network->bssid, Buffalo300N_Mac, 3)==0))
+                {
+                    network->bIsNetgear854T = true;
+                    network->bssht.bdSupportHT = false;
+                    if(network->mode == WIRELESS_MODE_N_24G)
+                    {
+                        network->mode = WIRELESS_MODE_B | WIRELESS_MODE_G;
+                    }
+
+                }
+                else
+                {
+                    network->bIsNetgear854T = false;
+                }
+            }
+        }
+#endif
+
+#if 1  
+       stats->signal = 30 + (stats->SignalStrength * 70) / 100;
+       stats->noise = rtllib_translate_todbm((u8)(100-stats->signal)) -25;
+#endif
+
+       memcpy(&network->stats, stats, sizeof(network->stats));
+
+       return 0;
+}
+
+static inline int is_same_network(struct rtllib_network *src,
+                                 struct rtllib_network *dst, u8 ssidbroad)
+{
+       /* A network is only a duplicate if the channel, BSSID, ESSID
+        * and the capability field (in particular IBSS and BSS) all match.  
+        * We treat all <hidden> with the same BSSID and channel
+        * as one network */
+       return 
+               (((src->ssid_len == dst->ssid_len) || (!ssidbroad)) &&
+               (src->channel == dst->channel) &&
+               !memcmp(src->bssid, dst->bssid, ETH_ALEN) &&
+               (!memcmp(src->ssid, dst->ssid, src->ssid_len) || (!ssidbroad)) &&
+               ((src->capability & WLAN_CAPABILITY_IBSS) == 
+               (dst->capability & WLAN_CAPABILITY_IBSS)) &&
+               ((src->capability & WLAN_CAPABILITY_ESS) == 
+               (dst->capability & WLAN_CAPABILITY_ESS)));
+}
+
+static inline void update_network(struct rtllib_network *dst,
+                                 struct rtllib_network *src)
+{
+       int qos_active;
+       u8 old_param;
+
+       memcpy(&dst->stats, &src->stats, sizeof(struct rtllib_rx_stats));
+       dst->capability = src->capability;
+       memcpy(dst->rates, src->rates, src->rates_len);
+       dst->rates_len = src->rates_len;
+       memcpy(dst->rates_ex, src->rates_ex, src->rates_ex_len);
+       dst->rates_ex_len = src->rates_ex_len;
+       if(src->ssid_len > 0)
+       {
+               if(dst->ssid_len == 0)
+               {
+                       memset(dst->hidden_ssid, 0, sizeof(dst->hidden_ssid));
+                       dst->hidden_ssid_len = src->ssid_len;
+                       memcpy(dst->hidden_ssid, src->ssid, src->ssid_len);
+               }else{
+                       memset(dst->ssid, 0, dst->ssid_len);
+                       dst->ssid_len = src->ssid_len;
+                       memcpy(dst->ssid, src->ssid, src->ssid_len);
+               }
+       }
+       dst->mode = src->mode;
+       dst->flags = src->flags;
+       dst->time_stamp[0] = src->time_stamp[0];
+       dst->time_stamp[1] = src->time_stamp[1];
+       if (src->flags & NETWORK_HAS_ERP_VALUE)
+       {
+               dst->erp_value = src->erp_value;
+               dst->berp_info_valid = src->berp_info_valid = true;
+       }
+       dst->beacon_interval = src->beacon_interval;
+       dst->listen_interval = src->listen_interval;
+       dst->atim_window = src->atim_window;
+       dst->dtim_period = src->dtim_period;
+       dst->dtim_data = src->dtim_data;
+       dst->last_dtim_sta_time[0] = src->last_dtim_sta_time[0];
+       dst->last_dtim_sta_time[1] = src->last_dtim_sta_time[1];
+       memcpy(&dst->tim, &src->tim, sizeof(struct rtllib_tim_parameters));
+       
+        dst->bssht.bdSupportHT = src->bssht.bdSupportHT;
+       dst->bssht.bdRT2RTAggregation = src->bssht.bdRT2RTAggregation;
+       dst->bssht.bdHTCapLen= src->bssht.bdHTCapLen;
+       memcpy(dst->bssht.bdHTCapBuf,src->bssht.bdHTCapBuf,src->bssht.bdHTCapLen);
+       dst->bssht.bdHTInfoLen= src->bssht.bdHTInfoLen;
+       memcpy(dst->bssht.bdHTInfoBuf,src->bssht.bdHTInfoBuf,src->bssht.bdHTInfoLen);
+       dst->bssht.bdHTSpecVer = src->bssht.bdHTSpecVer;
+       dst->bssht.bdRT2RTLongSlotTime = src->bssht.bdRT2RTLongSlotTime;
+       dst->broadcom_cap_exist = src->broadcom_cap_exist;
+       dst->ralink_cap_exist = src->ralink_cap_exist;
+       dst->atheros_cap_exist = src->atheros_cap_exist;
+       dst->realtek_cap_exit = src->realtek_cap_exit;
+       dst->marvell_cap_exist = src->marvell_cap_exist;
+       dst->cisco_cap_exist = src->cisco_cap_exist;
+       dst->unknown_cap_exist = src->unknown_cap_exist;
+       memcpy(dst->wpa_ie, src->wpa_ie, src->wpa_ie_len);
+       dst->wpa_ie_len = src->wpa_ie_len;
+       memcpy(dst->rsn_ie, src->rsn_ie, src->rsn_ie_len);
+       dst->rsn_ie_len = src->rsn_ie_len;
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) 
+       memcpy(dst->wzc_ie, src->wzc_ie, src->wzc_ie_len);
+       dst->wzc_ie_len = src->wzc_ie_len;
+#endif
+
+       dst->last_scanned = jiffies;
+       /* qos related parameters */
+       qos_active = dst->qos_data.active;
+       old_param = dst->qos_data.param_count;
+#if 0
+       if(dst->flags & NETWORK_HAS_QOS_MASK){
+       }
+       else {
+               dst->qos_data.supported = src->qos_data.supported;
+               dst->qos_data.param_count = src->qos_data.param_count;
+       }
+#else
+       dst->qos_data.supported = src->qos_data.supported;
+       if(dst->flags & NETWORK_HAS_QOS_PARAMETERS){
+               memcpy(&dst->qos_data, &src->qos_data, sizeof(struct rtllib_qos_data));
+       }
+#endif 
+       if(dst->qos_data.supported == 1) {
+               dst->QoS_Enable = 1;
+               if(dst->ssid_len)
+                       RTLLIB_DEBUG_QOS
+                               ("QoS the network %s is QoS supported\n",
+                               dst->ssid);
+               else 
+                       RTLLIB_DEBUG_QOS
+                               ("QoS the network is QoS supported\n");
+       }
+       dst->qos_data.active = qos_active;
+       dst->qos_data.old_param_count = old_param;
+
+       /* dst->last_associate is not overwritten */
+#if 1  
+       dst->wmm_info = src->wmm_info; 
+       if(src->wmm_param[0].ac_aci_acm_aifsn|| \
+          src->wmm_param[1].ac_aci_acm_aifsn|| \
+          src->wmm_param[2].ac_aci_acm_aifsn|| \
+          src->wmm_param[1].ac_aci_acm_aifsn) {
+         memcpy(dst->wmm_param, src->wmm_param, WME_AC_PRAM_LEN);
+       }
+#else  
+       dst->QoS_Enable = 1;
+#endif 
+       dst->SignalStrength = src->SignalStrength;
+       dst->RSSI = src->RSSI;  
+#ifdef THOMAS_TURBO
+       dst->Turbo_Enable = src->Turbo_Enable;
+#endif
+
+#ifdef ENABLE_DOT11D
+       dst->CountryIeLen = src->CountryIeLen;
+       memcpy(dst->CountryIeBuf, src->CountryIeBuf, src->CountryIeLen);
+#endif
+
+       dst->bWithAironetIE = src->bWithAironetIE;
+       dst->bCkipSupported = src->bCkipSupported;
+       memcpy(dst->CcxRmState,src->CcxRmState,2);
+       dst->bCcxRmEnable = src->bCcxRmEnable;
+       dst->MBssidMask = src->MBssidMask;
+       dst->bMBssidValid = src->bMBssidValid;
+       memcpy(dst->MBssid,src->MBssid,6);
+       dst->bWithCcxVerNum = src->bWithCcxVerNum;
+       dst->BssCcxVerNumber = src->BssCcxVerNumber;
+
+}
+static inline int is_beacon(__le16 fc) 
+{
+       return (WLAN_FC_GET_STYPE(le16_to_cpu(fc)) == RTLLIB_STYPE_BEACON);
+}
+
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) 
+void InitStaInfo(struct rtllib_device *ieee,int index)
+{
+       int idx = index;
+       ieee->peer_assoc_list[idx]->StaDataRate = 0;
+       ieee->peer_assoc_list[idx]->StaSS = 0;
+       ieee->peer_assoc_list[idx]->RetryFrameCnt = 0;
+       ieee->peer_assoc_list[idx]->NoRetryFrameCnt = 0;
+       ieee->peer_assoc_list[idx]->LastRetryCnt = 0;
+       ieee->peer_assoc_list[idx]->LastNoRetryCnt = 0;
+       ieee->peer_assoc_list[idx]->AvgRetryRate = 0;
+       ieee->peer_assoc_list[idx]->LastRetryRate = 0;
+       ieee->peer_assoc_list[idx]->txRateIndex = 11;
+       ieee->peer_assoc_list[idx]->APDataRate = 0x2; 
+       ieee->peer_assoc_list[idx]->ForcedDataRate = 0x2; 
+       
+}
+static u8 IsStaInfoExist(struct rtllib_device *ieee, u8 *addr)
+{
+       int k=0;
+       struct sta_info * psta = NULL;
+       u8 sta_idx = PEER_MAX_ASSOC;
+       
+       for(k=0; k<PEER_MAX_ASSOC; k++)
+       {
+               psta = ieee->peer_assoc_list[k];
+               if(NULL != psta)
+               {
+                       if(memcmp(addr, psta->macaddr, ETH_ALEN) == 0)
+                       {
+                               sta_idx = k;
+                               break;
+                       }
+               }
+       }
+       return sta_idx;
+}
+static u8 GetFreeStaInfoIdx(struct rtllib_device *ieee, u8 *addr)
+{
+       int k = 0;
+       while((ieee->peer_assoc_list[k] != NULL) && (k < PEER_MAX_ASSOC))
+               k++;
+       printk("%s: addr:"MAC_FMT" index: %d\n", __FUNCTION__, MAC_ARG(addr), k);
+       return k;
+}
+struct sta_info *GetStaInfo(struct rtllib_device *ieee, u8 *addr)
+{
+       int k=0;
+       struct sta_info * psta = NULL;
+       struct sta_info * psta_find = NULL;
+       
+       for(k=0; k<PEER_MAX_ASSOC; k++)
+       {
+               psta = ieee->peer_assoc_list[k];
+               if(NULL != psta)
+               {
+                       if(memcmp(addr, psta->macaddr, ETH_ALEN) == 0)
+                       {
+                               psta_find = psta;
+                               break;
+                       }
+               }
+       }
+       return psta_find;
+}
+void DelStaInfoList(struct rtllib_device *ieee)
+{
+       int idx = 0;
+       struct sta_info * AsocEntry = NULL;
+
+       atomic_set(&ieee->AsocEntryNum, 0);
+       for(idx=0; idx<PEER_MAX_ASSOC; idx++){
+               AsocEntry = ieee->peer_assoc_list[idx];
+               if(NULL == AsocEntry){
+                       kfree(AsocEntry);
+                       ieee->peer_assoc_list[idx] = NULL;
+               }
+       }
+
+}      
+void DelStaInfo(struct rtllib_device *ieee, u8 *addr)
+{
+       struct sta_info * psta = NULL;
+       int k=0;
+       
+       for(k=0; k<PEER_MAX_ASSOC; k++)
+       {
+               psta = ieee->peer_assoc_list[k];
+               if(NULL != psta)
+               {
+                       if(memcmp(addr, psta->macaddr, ETH_ALEN) == 0)
+                       {
+                               kfree(psta);
+                               ieee->peer_assoc_list[k] = NULL;
+                               atomic_dec(&ieee->AsocEntryNum);
+                       }
+               }
+       }
+}
+void IbssAgeFunction(struct rtllib_device *ieee)
+{
+       struct sta_info*        AsocEntry = NULL;
+       int                             idx;
+       unsigned long           CurrentTime;
+       signed long             TimeDifference;
+       struct rtllib_network *target;
+
+       CurrentTime = jiffies;
+
+       for(idx = 0; idx < PEER_MAX_ASSOC; idx++)
+       {
+               AsocEntry = ieee->peer_assoc_list[idx];
+               if(AsocEntry)
+               {
+                       TimeDifference = jiffies_to_msecs(CurrentTime - AsocEntry->LastActiveTime);
+
+                       if(TimeDifference > 20000)
+                       {
+                               printk("IbssAgeFunction(): "MAC_FMT" timeout\n", MAC_ARG(AsocEntry->macaddr));
+#ifdef RTL8192S_WAPI_SUPPORT
+                               if ((ieee->WapiSupport) && (ieee->wapiInfo.bWapiEnable))
+                               {
+                                       WapiReturnOneStaInfo(ieee, AsocEntry->macaddr, 0);
+                               }
+#endif 
+                               kfree(AsocEntry);
+                               ieee->peer_assoc_list[idx] = NULL;
+                               atomic_dec(&ieee->AsocEntryNum);
+                       
+                               if(atomic_read(&ieee->AsocEntryNum) == 0){
+
+                                       down(&ieee->wx_sem);
+                                       rtllib_stop_protocol(ieee,true);
+       
+                                       list_for_each_entry(target, &ieee->network_list, list) {
+                                               if (is_same_network(target, &ieee->current_network,(target->ssid_len?1:0))){
+                                                       printk("delete sta of previous Ad-hoc\n");
+                                                       list_del(&target->list);
+                                                       break;
+                                               }
+                                       }
+                                       
+                                       rtllib_start_protocol(ieee);
+                                       up(&ieee->wx_sem);
+                               }
+                       }
+               }
+       }
+       
+#ifdef TO_DO_LIST
+       if(AsocEntry_AnyStationAssociated(pMgntInfo)==false)
+               DrvIFIndicateDisassociation(Adapter, unspec_reason);
+
+       if(pMgntInfo->dot11CurrentWirelessMode == WIRELESS_MODE_G ||
+               (IS_WIRELESS_MODE_N_24G(Adapter) && pMgntInfo->pHTInfo->bCurSuppCCK)    )
+       {
+               if(nBModeStaCnt == 0)
+               {
+                       pMgntInfo->bUseProtection = false;
+                       ActUpdate_mCapInfo(Adapter, pMgntInfo->mCap);
+               }
+       }
+
+       if(IS_WIRELESS_MODE_N_24G(Adapter) || IS_WIRELESS_MODE_N_5G(Adapter) )
+       {
+               if(nLegacyStaCnt > 0)
+               {
+                       pMgntInfo->pHTInfo->CurrentOpMode = HT_OPMODE_MIXED;
+               }
+               else
+               {
+                       if((pMgntInfo->pHTInfo->bCurBW40MHz) && (n20MHzStaCnt > 0))
+                               pMgntInfo->pHTInfo->CurrentOpMode = HT_OPMODE_40MHZ_PROTECT;
+                       else
+                               pMgntInfo->pHTInfo->CurrentOpMode = HT_OPMODE_NO_PROTECT;
+                               
+               }
+       }
+
+       if(IS_WIRELESS_MODE_G(Adapter) ||
+               (IS_WIRELESS_MODE_N_24G(Adapter) && pMgntInfo->pHTInfo->bCurSuppCCK))
+       {
+               if(pMgntInfo->bUseProtection)
+               {
+                       u8 CckRate[4] = { MGN_1M, MGN_2M, MGN_5_5M, MGN_11M };
+                       OCTET_STRING osCckRate;
+                       FillOctetString(osCckRate, CckRate, 4);
+                       FilterSupportRate(pMgntInfo->mBrates, &osCckRate, false);
+                       Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_BASIC_RATE, (pu1Byte)&osCckRate);
+               }
+               else
+               {
+                       Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_BASIC_RATE, (pu1Byte)(&pMgntInfo->mBrates) );
+               }
+       }
+#endif
+}
+#endif
+
+static int IsPassiveChannel( struct rtllib_device *rtllib, u8 channel)
+{
+       if (MAX_CHANNEL_NUMBER < channel) {
+               printk("%s(): Invalid Channel\n", __FUNCTION__);
+               return 0;
+       }
+
+       if(rtllib->active_channel_map[channel] == 2)
+               return 1;
+
+       return 0;
+}
+
+int IsLegalChannel( struct rtllib_device *rtllib, u8 channel)
+{
+       if (MAX_CHANNEL_NUMBER < channel) {
+               printk("%s(): Invalid Channel\n", __FUNCTION__);
+               return 0;
+       }
+       if (rtllib->active_channel_map[channel] > 0)
+               return 1;
+
+       return 0;
+}
+
+
+static inline void rtllib_process_probe_response(
+       struct rtllib_device *ieee,
+       struct rtllib_probe_response *beacon,
+       struct rtllib_rx_stats *stats)
+{
+       struct rtllib_network *target;
+       struct rtllib_network *oldest = NULL;
+#ifdef CONFIG_RTLLIB_DEBUG
+       struct rtllib_info_element *info_element = &beacon->info_element[0];
+#endif
+       unsigned long flags;
+       short renew;
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13))
+       struct rtllib_network *network = kzalloc(sizeof(struct rtllib_network), GFP_ATOMIC);
+#else
+       struct rtllib_network *network = kmalloc(sizeof(*network), GFP_KERNEL);
+       memset(network,0,sizeof(*network));
+#endif
+
+       if (!network) {
+               return;
+       }
+
+#ifdef _RTL8192_EXT_PATCH_
+       if(ieee->ext_patch_rtllib_process_probe_response_1) {
+               /* 2 deonte the normal beacon packet,
+                * discard it under mesh only mode  */
+               if(ieee->ext_patch_rtllib_process_probe_response_1(ieee, beacon, stats) != 2){
+                       goto free_network;
+               } else if((ieee->iw_mode == IW_MODE_MESH)&&ieee->only_mesh) {
+                       goto free_network;
+               }
+       }
+#endif
+
+       RTLLIB_DEBUG_SCAN(
+               "'%s' (" MAC_FMT "): %c%c%c%c %c%c%c%c-%c%c%c%c %c%c%c%c\n",
+               escape_essid(info_element->data, info_element->len),
+               MAC_ARG(beacon->header.addr3),
+               (beacon->capability & (1<<0xf)) ? '1' : '0',
+               (beacon->capability & (1<<0xe)) ? '1' : '0',
+               (beacon->capability & (1<<0xd)) ? '1' : '0',
+               (beacon->capability & (1<<0xc)) ? '1' : '0',
+               (beacon->capability & (1<<0xb)) ? '1' : '0',
+               (beacon->capability & (1<<0xa)) ? '1' : '0',
+               (beacon->capability & (1<<0x9)) ? '1' : '0',
+               (beacon->capability & (1<<0x8)) ? '1' : '0',
+               (beacon->capability & (1<<0x7)) ? '1' : '0',
+               (beacon->capability & (1<<0x6)) ? '1' : '0',
+               (beacon->capability & (1<<0x5)) ? '1' : '0',
+               (beacon->capability & (1<<0x4)) ? '1' : '0',
+               (beacon->capability & (1<<0x3)) ? '1' : '0',
+               (beacon->capability & (1<<0x2)) ? '1' : '0',
+               (beacon->capability & (1<<0x1)) ? '1' : '0',
+               (beacon->capability & (1<<0x0)) ? '1' : '0');
+
+       if (rtllib_network_init(ieee, beacon, network, stats)) {
+               RTLLIB_DEBUG_SCAN("Dropped '%s' (" MAC_FMT ") via %s.\n",
+                                    escape_essid(info_element->data,
+                                                 info_element->len),
+                                    MAC_ARG(beacon->header.addr3),
+                                    WLAN_FC_GET_STYPE(beacon->header.frame_ctl) ==
+                                    RTLLIB_STYPE_PROBE_RESP ?
+                                    "PROBE RESPONSE" : "BEACON");
+               goto free_network;
+       }
+
+
+       if (!IsLegalChannel(ieee, network->channel))
+               goto free_network;
+
+       if (WLAN_FC_GET_STYPE(beacon->header.frame_ctl) == RTLLIB_STYPE_PROBE_RESP) {
+               if (IsPassiveChannel(ieee, network->channel)) {
+                       printk("GetScanInfo(): For Global Domain, "
+                              "filter probe response at channel(%d).\n", network->channel);
+                       goto free_network;
+               }
+       } 
+
+       /* The network parsed correctly -- so now we scan our known networks
+        * to see if we can find it in our list.
+        *
+        * NOTE:  This search is definitely not optimized.  Once its doing
+        *        the "right thing" we'll optimize it for efficiency if
+        *        necessary */
+
+       /* Search for this entry in the list and update it if it is
+        * already there. */
+
+       spin_lock_irqsave(&ieee->lock, flags);
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+       if(is_beacon(beacon->header.frame_ctl)){
+               if((ieee->iw_mode == IW_MODE_ADHOC) && (ieee->state == RTLLIB_LINKED))
+               {
+                       if((network->ssid_len == ieee->current_network.ssid_len) 
+                               && (!memcmp(network->ssid,ieee->current_network.ssid,ieee->current_network.ssid_len))
+                               && (network->channel == ieee->current_network.channel)
+                               && (ieee->current_network.channel > 0) 
+                               && (ieee->current_network.channel <= 14))
+                       {
+                               if(!memcmp(ieee->current_network.bssid,network->bssid,6))
+                               {
+                                       int idx = 0;
+                                       struct rtllib_hdr_3addr* header = NULL;
+                                       int idx_exist = 0;
+                                       if(timer_pending(&ieee->ibss_wait_timer))
+                                               del_timer_sync(&ieee->ibss_wait_timer);
+                                       header = (struct rtllib_hdr_3addr*)&(beacon->header);
+                                       idx_exist = IsStaInfoExist(ieee,header->addr2);
+                                       if(idx_exist >= PEER_MAX_ASSOC) {
+                                               idx = GetFreeStaInfoIdx(ieee, header->addr2);
+                                       } else {
+                                               ieee->peer_assoc_list[idx_exist]->LastActiveTime = jiffies;
+                                               goto no_alloc;
+                                       }
+                                       if (idx >= PEER_MAX_ASSOC - 1) {
+                                               printk("\n%s():ERR!!!Buffer overflow - could not append!!!",__FUNCTION__);
+                                               goto free_network;
+                                       } else {
+                                               ieee->peer_assoc_list[idx] = (struct sta_info *)kmalloc(sizeof(struct sta_info), GFP_ATOMIC);
+                                               memset(ieee->peer_assoc_list[idx], 0, sizeof(struct sta_info));
+                                               ieee->peer_assoc_list[idx]->LastActiveTime = jiffies;
+                                               memcpy(ieee->peer_assoc_list[idx]->macaddr,header->addr2,ETH_ALEN);
+                                               ieee->peer_assoc_list[idx]->ratr_index = 8;
+                                               InitStaInfo(ieee,idx);
+                                               atomic_inc(&ieee->AsocEntryNum);
+                                               ieee->check_ht_cap(ieee->dev,ieee->peer_assoc_list[idx],network);
+                                               queue_delayed_work_rsl(ieee->wq, &ieee->update_assoc_sta_info_wq, 0);
+                                               ieee->Adhoc_InitRateAdaptive(ieee->dev,ieee->peer_assoc_list[idx]);
+                                       }
+#if defined (RTL8192S_WAPI_SUPPORT)
+                                       if ((ieee->WapiSupport) && (ieee->wapiInfo.bWapiEnable)){
+                                               WapiCreateAppEventAndSend(ieee,NULL,0,header->addr2,false, false, false, 0, false);
+                                       }
+#endif
+                               }
+                               else
+                               {
+#if 0
+                                       printk("%s(): SSID matched but BSSID mismatched.\n",__FUNCTION__);
+
+                                       ieee->TargetTsf = beacon->time_stamp[1];
+                                       ieee->TargetTsf <<= 32;
+                                       ieee->TargetTsf |= beacon->time_stamp[0];
+
+                                       ieee->CurrTsf = stats->TimeStampLow;
+
+                                       queue_delayed_work_rsl(ieee->wq, &ieee->check_tsf_wq, 0);
+#endif
+                               }
+                       }
+               }
+       }
+       if(ieee->iw_mode == IW_MODE_ADHOC){
+               if((network->ssid_len == ieee->current_network.ssid_len) 
+                       && (!memcmp(network->ssid,ieee->current_network.ssid,ieee->current_network.ssid_len))
+                       && (network->capability & WLAN_CAPABILITY_IBSS)
+                       && (ieee->state == RTLLIB_LINKED_SCANNING))
+               {
+                       if(memcmp(ieee->current_network.bssid,network->bssid,6))
+                       {
+                               printk("%s(): SSID matched but BSSID mismatched.\n",__FUNCTION__);
+
+                               ieee->TargetTsf = beacon->time_stamp[1];
+                               ieee->TargetTsf <<= 32;
+                               ieee->TargetTsf |= beacon->time_stamp[0];
+
+                               ieee->CurrTsf = stats->TimeStampLow;
+
+                               queue_delayed_work_rsl(ieee->wq, &ieee->check_tsf_wq, 0);
+                       }
+               }
+       }
+#endif
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+no_alloc:
+       if(ieee->iw_mode == IW_MODE_INFRA)
+#endif
+       {
+               if(is_same_network(&ieee->current_network, network, (network->ssid_len?1:0))) {
+                       update_network(&ieee->current_network, network);
+                       if((ieee->current_network.mode == IEEE_N_24G || ieee->current_network.mode == IEEE_G)
+                       && ieee->current_network.berp_info_valid){
+                       if(ieee->current_network.erp_value& ERP_UseProtection)
+                               ieee->current_network.buseprotection = true;
+               else
+                       ieee->current_network.buseprotection = false;
+               }
+               if(is_beacon(beacon->header.frame_ctl))
+               {
+                               if(ieee->state >= RTLLIB_LINKED)
+                                       ieee->LinkDetectInfo.NumRecvBcnInPeriod++;
+                       }
+#if 0 
+                       else 
+                               network.flags = (~NETWORK_EMPTY_ESSID & network.flags)|(NETWORK_EMPTY_ESSID & ieee->current_network.flags);
+#endif                        
+               }
+       }
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+       else if(ieee->iw_mode == IW_MODE_ADHOC)
+       {
+               ieee->current_network.last_scanned = jiffies;
+       }
+#endif
+       list_for_each_entry(target, &ieee->network_list, list) {
+               if (is_same_network(target, network,(target->ssid_len?1:0)))
+                       break;
+               if ((oldest == NULL) ||
+                   (target->last_scanned < oldest->last_scanned))
+                       oldest = target;
+       }
+
+       /* If we didn't find a match, then get a new network slot to initialize
+        * with this beacon's information */
+       if (&target->list == &ieee->network_list) {
+               if (list_empty(&ieee->network_free_list)) {
+                       /* If there are no more slots, expire the oldest */
+                       list_del(&oldest->list);
+                       target = oldest;
+                       RTLLIB_DEBUG_SCAN("Expired '%s' (" MAC_FMT ") from "
+                                            "network list.\n",
+                                            escape_essid(target->ssid,
+                                                         target->ssid_len),
+                                            MAC_ARG(target->bssid));
+               } else {
+                       /* Otherwise just pull from the free list */
+                       target = list_entry(ieee->network_free_list.next,
+                                           struct rtllib_network, list);
+                       list_del(ieee->network_free_list.next);
+               }
+
+
+#ifdef CONFIG_RTLLIB_DEBUG
+               RTLLIB_DEBUG_SCAN("Adding '%s' (" MAC_FMT ") via %s.\n",
+                                    escape_essid(network->ssid,
+                                                 network->ssid_len),
+                                    MAC_ARG(network->bssid),
+                                    WLAN_FC_GET_STYPE(beacon->header.frame_ctl) ==
+                                    RTLLIB_STYPE_PROBE_RESP ?
+                                    "PROBE RESPONSE" : "BEACON");
+#endif
+#ifdef _RTL8192_EXT_PATCH_
+               network->ext_entry = target->ext_entry;
+#endif 
+               memcpy(target, network, sizeof(*target));
+               list_add_tail(&target->list, &ieee->network_list);
+               if(ieee->softmac_features & IEEE_SOFTMAC_ASSOCIATE)
+                       rtllib_softmac_new_net(ieee, network); 
+       } else {
+               RTLLIB_DEBUG_SCAN("Updating '%s' (" MAC_FMT ") via %s.\n",
+                                    escape_essid(target->ssid,
+                                                 target->ssid_len),
+                                    MAC_ARG(target->bssid),
+                                    WLAN_FC_GET_STYPE(beacon->header.frame_ctl) ==
+                                    RTLLIB_STYPE_PROBE_RESP ?
+                                    "PROBE RESPONSE" : "BEACON");
+               
+               /* we have an entry and we are going to update it. But this entry may
+                * be already expired. In this case we do the same as we found a new 
+                * net and call the new_net handler
+                */
+               renew = !time_after(target->last_scanned + ieee->scan_age, jiffies);
+#if 0          
+               if(is_beacon(beacon->header.frame_ctl) == 0)
+                       network.flags = (~NETWORK_EMPTY_ESSID & network.flags)|(NETWORK_EMPTY_ESSID & target->flags);
+               if(((network.flags & NETWORK_EMPTY_ESSID) == NETWORK_EMPTY_ESSID) \
+                   && (((network.ssid_len > 0) && (strncmp(target->ssid, network.ssid, network.ssid_len)))\
+                   ||((ieee->current_network.ssid_len == network.ssid_len)&&(strncmp(ieee->current_network.ssid, network.ssid, network.ssid_len) == 0)&&(ieee->state == RTLLIB_NOLINK))))
+                       renew = 1;
+#else
+               if((!target->ssid_len) &&   
+                       (((network->ssid_len > 0) && (target->hidden_ssid_len == 0)) 
+                       || ((ieee->current_network.ssid_len == network->ssid_len) && 
+                          (strncmp(ieee->current_network.ssid, network->ssid, network->ssid_len) == 0) && 
+                          (ieee->state == RTLLIB_NOLINK)))
+                       ) { 
+                       renew = 1;
+               }
+#endif
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+               if(ieee->iw_mode == IW_MODE_ADHOC)
+                       target->last_scanned = jiffies;
+               else
+                       update_network(target, network);
+#else
+               update_network(target, network);
+#endif
+               if(renew && (ieee->softmac_features & IEEE_SOFTMAC_ASSOCIATE))
+                       rtllib_softmac_new_net(ieee, network); 
+       }
+
+       spin_unlock_irqrestore(&ieee->lock, flags);
+       if (is_beacon(beacon->header.frame_ctl)&&is_same_network(&ieee->current_network, network, (network->ssid_len?1:0))&&\
+               (ieee->state == RTLLIB_LINKED)) {
+               if(ieee->handle_beacon != NULL) {
+                       ieee->handle_beacon(ieee->dev,beacon,&ieee->current_network);
+               }       
+       }
+free_network:
+       kfree(network);
+       return; 
+}
+
+void rtllib_rx_mgt(struct rtllib_device *ieee,
+                      struct sk_buff *skb,
+                     struct rtllib_rx_stats *stats)
+{
+    struct rtllib_hdr_4addr *header = (struct rtllib_hdr_4addr *)skb->data ;
+#if 0
+    if(ieee->sta_sleep || (ieee->ps != RTLLIB_PS_DISABLED &&
+                ieee->iw_mode == IW_MODE_INFRA && 
+                ieee->state == RTLLIB_LINKED))
+    {       
+        tasklet_schedule(&ieee->ps_task);
+    }
+#endif
+    if(WLAN_FC_GET_STYPE(header->frame_ctl) != RTLLIB_STYPE_PROBE_RESP &&
+            WLAN_FC_GET_STYPE(header->frame_ctl) != RTLLIB_STYPE_BEACON)
+        ieee->last_rx_ps_time = jiffies;
+
+    switch (WLAN_FC_GET_STYPE(header->frame_ctl)) {
+
+        case RTLLIB_STYPE_BEACON:
+            RTLLIB_DEBUG_MGMT("received BEACON (%d)\n",
+                    WLAN_FC_GET_STYPE(header->frame_ctl));
+            RTLLIB_DEBUG_SCAN("Beacon\n");
+            rtllib_process_probe_response(
+                    ieee, (struct rtllib_probe_response *)header, stats);
+                       
+#ifdef ENABLE_LPS
+            if(ieee->sta_sleep || (ieee->ps != RTLLIB_PS_DISABLED &&
+                        ieee->iw_mode == IW_MODE_INFRA && 
+                        ieee->state == RTLLIB_LINKED))
+            {       
+                tasklet_schedule(&ieee->ps_task);
+            }
+#endif
+
+            break;
+
+        case RTLLIB_STYPE_PROBE_RESP:
+            RTLLIB_DEBUG_MGMT("received PROBE RESPONSE (%d)\n",
+                    WLAN_FC_GET_STYPE(header->frame_ctl));
+            RTLLIB_DEBUG_SCAN("Probe response\n");
+            rtllib_process_probe_response(
+                    ieee, (struct rtllib_probe_response *)header, stats);
+            break;
+        case RTLLIB_STYPE_PROBE_REQ:
+            RTLLIB_DEBUG_MGMT("received PROBE RESQUEST (%d)\n",
+                    WLAN_FC_GET_STYPE(header->frame_ctl));
+            RTLLIB_DEBUG_SCAN("Probe request\n");
+            if ((ieee->softmac_features & IEEE_SOFTMAC_PROBERS) &&
+                    ((ieee->iw_mode == IW_MODE_ADHOC ||
+                      ieee->iw_mode == IW_MODE_MASTER) &&
+                     ieee->state == RTLLIB_LINKED)){
+                rtllib_rx_probe_rq(ieee, skb);
+            }
+#ifdef _RTL8192_EXT_PATCH_
+                       if((ieee->iw_mode == IW_MODE_MESH) && ieee->ext_patch_rtllib_rx_mgt_on_probe_req )
+                               ieee->ext_patch_rtllib_rx_mgt_on_probe_req( ieee, (struct rtllib_probe_request *)header, stats);
+#endif 
+            break;
+    }
+
+#if 0//defined CONFIG_CRDA && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30))
+       if((rtllib_act_scanning(ieee,false) == true) && ((WLAN_FC_GET_STYPE(header->frame_ctl) ==RTLLIB_STYPE_PROBE_RESP) ||
+               (WLAN_FC_GET_STYPE(header->frame_ctl) ==RTLLIB_STYPE_BEACON)))
+               return ieee80211_scan_rx(ieee, skb, stats);
+#endif
+}
+
+#ifndef BUILT_IN_RTLLIB
+EXPORT_SYMBOL_RSL(rtllib_rx_mgt);
+EXPORT_SYMBOL_RSL(rtllib_rx);
+EXPORT_SYMBOL_RSL(IsLegalChannel);
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+EXPORT_SYMBOL_RSL(IbssAgeFunction);
+EXPORT_SYMBOL_RSL(GetStaInfo);
+#endif
+#ifdef _RTL8192_EXT_PATCH_
+EXPORT_SYMBOL_RSL(rtllib_network_init);
+EXPORT_SYMBOL_RSL(rtllib_parse_info_param);
+#endif
+#endif
diff --git a/ubuntu/rtl8192se/rtllib/rtllib_softmac.c b/ubuntu/rtl8192se/rtllib/rtllib_softmac.c
new file mode 100644 (file)
index 0000000..71b939e
--- /dev/null
@@ -0,0 +1,5161 @@
+/* IEEE 802.11 SoftMAC layer
+ * Copyright (c) 2005 Andrea Merello <andreamrl@tiscali.it>
+ *
+ * Mostly extracted from the rtl8180-sa2400 driver for the 
+ * in-kernel generic ieee802.11 stack.
+ *
+ * Few lines might be stolen from other part of the rtllib
+ * stack. Copyright who own it's copyright
+ *
+ * WPA code stolen from the ipw2200 driver.
+ * Copyright who own it's copyright. 
+ *
+ * released under the GPL
+ */
+
+
+#include "rtllib.h"
+
+#include <linux/random.h>
+#include <linux/delay.h>
+#include <linux/version.h>
+#include <asm/uaccess.h>
+#ifdef ENABLE_DOT11D
+#include "dot11d.h"
+#endif
+
+#ifdef RTK_DMP_PLATFORM
+#include <linux/usb_setting.h> 
+#endif
+extern void _setup_timer( struct timer_list*, void*, unsigned long );
+u8 rsn_authen_cipher_suite[16][4] = {
+       {0x00,0x0F,0xAC,0x00}, 
+       {0x00,0x0F,0xAC,0x01}, 
+       {0x00,0x0F,0xAC,0x02}, 
+       {0x00,0x0F,0xAC,0x03}, 
+       {0x00,0x0F,0xAC,0x04}, 
+       {0x00,0x0F,0xAC,0x05}, 
+};
+
+short rtllib_is_54g(struct rtllib_network *net)
+{
+       return ((net->rates_ex_len > 0) || (net->rates_len > 4));
+}
+
+short rtllib_is_shortslot(struct rtllib_network net)
+{
+       return (net.capability & WLAN_CAPABILITY_SHORT_SLOT_TIME);
+}
+
+/* returns the total length needed for pleacing the RATE MFIE
+ * tag and the EXTENDED RATE MFIE tag if needed.
+ * It encludes two bytes per tag for the tag itself and its len
+ */
+unsigned int rtllib_MFIE_rate_len(struct rtllib_device *ieee)
+{
+       unsigned int rate_len = 0;
+       
+       if (ieee->modulation & RTLLIB_CCK_MODULATION)
+               rate_len = RTLLIB_CCK_RATE_LEN + 2;
+               
+       if (ieee->modulation & RTLLIB_OFDM_MODULATION)
+               
+               rate_len += RTLLIB_OFDM_RATE_LEN + 2;
+       
+       return rate_len;
+}
+
+/* pleace the MFIE rate, tag to the memory (double) poined. 
+ * Then it updates the pointer so that
+ * it points after the new MFIE tag added.
+ */  
+void rtllib_MFIE_Brate(struct rtllib_device *ieee, u8 **tag_p)
+{
+       u8 *tag = *tag_p; 
+       
+       if (ieee->modulation & RTLLIB_CCK_MODULATION){
+               *tag++ = MFIE_TYPE_RATES;
+               *tag++ = 4;
+               *tag++ = RTLLIB_BASIC_RATE_MASK | RTLLIB_CCK_RATE_1MB;
+               *tag++ = RTLLIB_BASIC_RATE_MASK | RTLLIB_CCK_RATE_2MB;
+               *tag++ = RTLLIB_BASIC_RATE_MASK | RTLLIB_CCK_RATE_5MB;
+               *tag++ = RTLLIB_BASIC_RATE_MASK | RTLLIB_CCK_RATE_11MB;
+       }
+       
+       /* We may add an option for custom rates that specific HW might support */
+       *tag_p = tag;
+}
+
+void rtllib_MFIE_Grate(struct rtllib_device *ieee, u8 **tag_p)
+{      
+       u8 *tag = *tag_p; 
+       
+               if (ieee->modulation & RTLLIB_OFDM_MODULATION){
+               
+               *tag++ = MFIE_TYPE_RATES_EX;
+               *tag++ = 8;
+               *tag++ = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_6MB;
+               *tag++ = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_9MB;
+               *tag++ = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_12MB;
+               *tag++ = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_18MB;
+               *tag++ = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_24MB;
+               *tag++ = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_36MB;
+               *tag++ = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_48MB;
+               *tag++ = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_54MB;
+               
+       }
+       
+       /* We may add an option for custom rates that specific HW might support */
+       *tag_p = tag;
+}
+
+
+void rtllib_WMM_Info(struct rtllib_device *ieee, u8 **tag_p) {
+       u8 *tag = *tag_p;
+
+       *tag++ = MFIE_TYPE_GENERIC; 
+       *tag++ = 7;
+       *tag++ = 0x00;
+       *tag++ = 0x50;
+       *tag++ = 0xf2;
+       *tag++ = 0x02;
+       *tag++ = 0x00;
+       *tag++ = 0x01;
+#ifdef SUPPORT_USPD    
+       if(ieee->current_network.wmm_info & 0x80) {
+               *tag++ = 0x0f|MAX_SP_Len;
+       } else {
+               *tag++ = MAX_SP_Len;
+       }
+#else 
+       *tag++ = MAX_SP_Len;
+#endif
+       *tag_p = tag;
+}
+
+#ifdef THOMAS_TURBO
+void rtllib_TURBO_Info(struct rtllib_device *ieee, u8 **tag_p) {
+       u8 *tag = *tag_p;
+
+        *tag++ = MFIE_TYPE_GENERIC; 
+        *tag++ = 7;
+        *tag++ = 0x00;
+        *tag++ = 0xe0;
+        *tag++ = 0x4c;
+        *tag++ = 0x01;
+        *tag++ = 0x02;
+        *tag++ = 0x11;
+       *tag++ = 0x00;
+
+       *tag_p = tag;
+       printk(KERN_ALERT "This is enable turbo mode IE process\n");
+}
+#endif
+
+void enqueue_mgmt(struct rtllib_device *ieee, struct sk_buff *skb)
+{
+       int nh;
+       nh = (ieee->mgmt_queue_head +1) % MGMT_QUEUE_NUM;
+                       
+/*
+ * if the queue is full but we have newer frames then
+ * just overwrites the oldest.
+ *     
+ * if (nh == ieee->mgmt_queue_tail)
+ *             return -1;
+ */            
+       ieee->mgmt_queue_head = nh;
+       ieee->mgmt_queue_ring[nh] = skb;
+       
+}
+
+struct sk_buff *dequeue_mgmt(struct rtllib_device *ieee)
+{
+       struct sk_buff *ret;
+       
+       if(ieee->mgmt_queue_tail == ieee->mgmt_queue_head)
+               return NULL;
+               
+       ret = ieee->mgmt_queue_ring[ieee->mgmt_queue_tail];
+       
+       ieee->mgmt_queue_tail = 
+               (ieee->mgmt_queue_tail+1) % MGMT_QUEUE_NUM;
+       
+       return ret;
+}
+
+void init_mgmt_queue(struct rtllib_device *ieee)
+{
+       ieee->mgmt_queue_tail = ieee->mgmt_queue_head = 0;
+}
+
+
+u8
+MgntQuery_TxRateExcludeCCKRates(struct rtllib_device *ieee)
+{
+       u16     i;
+       u8      QueryRate = 0;
+       u8      BasicRate;
+
+       
+       for( i = 0; i < ieee->current_network.rates_len; i++)
+       {
+               BasicRate = ieee->current_network.rates[i]&0x7F;
+               if(!rtllib_is_cck_rate(BasicRate))
+               {
+                       if(QueryRate == 0)
+                       {
+                               QueryRate = BasicRate;
+                       }
+                       else
+                       {
+                               if(BasicRate < QueryRate)
+                               {
+                                       QueryRate = BasicRate;
+                               }
+                       }
+               }               
+       }
+
+       if(QueryRate == 0)
+       {
+               QueryRate = 12; 
+               printk("No BasicRate found!!\n");
+       }
+       return QueryRate;
+}
+
+u8 MgntQuery_MgntFrameTxRate(struct rtllib_device *ieee)
+{
+       PRT_HIGH_THROUGHPUT      pHTInfo = ieee->pHTInfo;
+       u8 rate;
+
+#if defined RTL8190P || defined RTL8192E || defined RTL8192U
+       if(pHTInfo->IOTAction & HT_IOT_ACT_MGNT_USE_CCK_6M)
+               rate = 0x0c;    
+       else
+               rate = ieee->basic_rate & 0x7f;
+#elif defined RTL8192SE || defined RTL8192SU || defined RTL8192CE
+       if(pHTInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom)
+       {
+               rate = MgntQuery_TxRateExcludeCCKRates(ieee);
+       }
+       else
+               rate = ieee->basic_rate & 0x7f;
+#endif
+
+       if(rate == 0){
+               if(ieee->mode == IEEE_A||
+                  ieee->mode== IEEE_N_5G||
+                  (ieee->mode== IEEE_N_24G&&!pHTInfo->bCurSuppCCK))
+                       rate = 0x0c;
+               else
+                       rate = 0x02;
+       }
+
+       /*
+       if( pMgntInfo->bScanInProgress || (pMgntInfo->bDualModeScanStep!=0) )
+       {
+       if(pMgntInfo->dot11CurrentWirelessMode==WIRELESS_MODE_A)
+       rate = 0x0c;
+       else
+       rate = 0x02;
+       }
+        */
+       return rate;
+}
+
+
+void rtllib_sta_wakeup(struct rtllib_device *ieee, short nl);
+
+inline void softmac_mgmt_xmit(struct sk_buff *skb, struct rtllib_device *ieee)
+{
+       unsigned long flags;
+       short single = ieee->softmac_features & IEEE_SOFTMAC_SINGLE_QUEUE;
+       struct rtllib_hdr_3addr  *header=
+               (struct rtllib_hdr_3addr  *) skb->data;
+
+       cb_desc *tcb_desc = (cb_desc *)(skb->cb + 8);
+       spin_lock_irqsave(&ieee->lock, flags);
+       
+       /* called with 2nd param 0, no mgmt lock required */
+       rtllib_sta_wakeup(ieee,0);
+       
+       tcb_desc->queue_index = MGNT_QUEUE;
+#ifdef RTL8192CE
+       tcb_desc->queue_index = MGNT_QUEUE;
+#endif
+
+       if(ieee->disable_mgnt_queue)
+               tcb_desc->queue_index = HIGH_QUEUE;
+       
+       tcb_desc->data_rate = MgntQuery_MgntFrameTxRate(ieee);  
+       tcb_desc->RATRIndex = 7;
+       tcb_desc->bTxDisableRateFallBack = 1;
+       tcb_desc->bTxUseDriverAssingedRate = 1;
+#ifdef _RTL8192_EXT_PATCH_
+       tcb_desc->macId = 0;
+#endif 
+       if(single){
+               if(ieee->queue_stop){
+                       enqueue_mgmt(ieee,skb);
+               }else{
+                       header->seq_ctl = cpu_to_le16(ieee->seq_ctrl[0]<<4);
+
+                       if (ieee->seq_ctrl[0] == 0xFFF)
+                               ieee->seq_ctrl[0] = 0;
+                       else
+                               ieee->seq_ctrl[0]++;
+                       
+                       /* avoid watchdog triggers */
+                       ieee->softmac_data_hard_start_xmit(skb,ieee->dev,ieee->basic_rate);
+               }
+               
+               spin_unlock_irqrestore(&ieee->lock, flags);
+       }else{
+               spin_unlock_irqrestore(&ieee->lock, flags);
+               spin_lock_irqsave(&ieee->mgmt_tx_lock, flags);
+
+               header->seq_ctl = cpu_to_le16(ieee->seq_ctrl[0] << 4);
+
+               if (ieee->seq_ctrl[0] == 0xFFF)
+                       ieee->seq_ctrl[0] = 0;
+               else
+                       ieee->seq_ctrl[0]++;
+
+               /* check wether the managed packet queued greater than 5 */
+               if(!ieee->check_nic_enough_desc(ieee->dev,tcb_desc->queue_index)||\
+                               (skb_queue_len(&ieee->skb_waitQ[tcb_desc->queue_index]) != 0)||\
+                               (ieee->queue_stop) ) {
+                       /* insert the skb packet to the management queue */
+                       /* as for the completion function, it does not need 
+                        * to check it any more.
+                        * */
+                       printk("%s():insert to waitqueue, queue_index:%d!\n",__FUNCTION__,tcb_desc->queue_index);
+                       skb_queue_tail(&ieee->skb_waitQ[tcb_desc->queue_index], skb);
+               } else {
+                       ieee->softmac_hard_start_xmit(skb,ieee->dev);
+               }
+               spin_unlock_irqrestore(&ieee->mgmt_tx_lock, flags);
+       }
+}
+
+inline void softmac_ps_mgmt_xmit(struct sk_buff *skb, 
+               struct rtllib_device *ieee)
+{
+       short single = ieee->softmac_features & IEEE_SOFTMAC_SINGLE_QUEUE;
+       struct rtllib_hdr_3addr  *header =
+               (struct rtllib_hdr_3addr  *) skb->data;
+       u16 fc,type,stype;
+       cb_desc *tcb_desc = (cb_desc *)(skb->cb + 8);
+
+       fc = header->frame_ctl;
+       type = WLAN_FC_GET_TYPE(fc);
+       stype = WLAN_FC_GET_STYPE(fc);
+
+
+       if(stype != RTLLIB_STYPE_PSPOLL) 
+               tcb_desc->queue_index = MGNT_QUEUE;
+       else
+               tcb_desc->queue_index = HIGH_QUEUE;
+
+       if(ieee->disable_mgnt_queue)
+               tcb_desc->queue_index = HIGH_QUEUE;
+               
+#ifdef RTL8192CE
+       tcb_desc->queue_index = MGNT_QUEUE;
+#endif
+
+       tcb_desc->data_rate = MgntQuery_MgntFrameTxRate(ieee);
+       tcb_desc->RATRIndex = 7;
+       tcb_desc->bTxDisableRateFallBack = 1;
+       tcb_desc->bTxUseDriverAssingedRate = 1;
+       if (single) {
+               if (type != RTLLIB_FTYPE_CTL) {
+                       header->seq_ctl = cpu_to_le16(ieee->seq_ctrl[0] << 4);
+
+                       if (ieee->seq_ctrl[0] == 0xFFF)
+                               ieee->seq_ctrl[0] = 0;
+                       else
+                               ieee->seq_ctrl[0]++;
+
+               }
+               /* avoid watchdog triggers */
+               ieee->softmac_data_hard_start_xmit(skb,ieee->dev,ieee->basic_rate);
+
+       } else {
+               if (type != RTLLIB_FTYPE_CTL) {
+                       header->seq_ctl = cpu_to_le16(ieee->seq_ctrl[0] << 4);
+
+                       if (ieee->seq_ctrl[0] == 0xFFF)
+                               ieee->seq_ctrl[0] = 0;
+                       else
+                               ieee->seq_ctrl[0]++;
+               }
+               ieee->softmac_hard_start_xmit(skb,ieee->dev);
+
+       }
+}
+
+inline struct sk_buff *rtllib_probe_req(struct rtllib_device *ieee)
+{
+       unsigned int len,rate_len;
+       u8 *tag;
+       struct sk_buff *skb;
+       struct rtllib_probe_request *req;
+       
+#ifdef _RTL8192_EXT_PATCH_
+       short extMore = 0;
+       if(ieee->ext_patch_rtllib_probe_req_1)
+               extMore = ieee->ext_patch_rtllib_probe_req_1(ieee);
+#endif
+
+       len = ieee->current_network.ssid_len;
+       
+       rate_len = rtllib_MFIE_rate_len(ieee);
+       
+#ifdef _RTL8192_EXT_PATCH_
+       if(!extMore)
+               skb = dev_alloc_skb(sizeof(struct rtllib_probe_request) +
+                           2 + len + rate_len + ieee->tx_headroom);
+       else
+               skb = dev_alloc_skb(sizeof(struct rtllib_probe_request) +
+                           2 + len + rate_len+128+ieee->tx_headroom); 
+#else
+#ifdef USB_USE_ALIGNMENT
+        u32 Tmpaddr;
+        int alignment;
+        skb = dev_alloc_skb(sizeof(struct rtllib_probe_request) +
+                            2 + len + rate_len + ieee->tx_headroom + USB_512B_ALIGNMENT_SIZE);
+#else  
+       skb = dev_alloc_skb(sizeof(struct rtllib_probe_request) +
+                           2 + len + rate_len + ieee->tx_headroom);
+#endif
+#endif
+
+       if (!skb) 
+               return NULL;
+
+#ifdef USB_USE_ALIGNMENT
+        Tmpaddr = (u32)skb->data;
+        alignment = Tmpaddr & 0x1ff;
+        skb_reserve(skb,(USB_512B_ALIGNMENT_SIZE - alignment));
+#endif
+       
+       skb_reserve(skb, ieee->tx_headroom);
+       
+       req = (struct rtllib_probe_request *) skb_put(skb,sizeof(struct rtllib_probe_request));
+       req->header.frame_ctl = cpu_to_le16(RTLLIB_STYPE_PROBE_REQ);
+       req->header.duration_id = 0; 
+       
+       memset(req->header.addr1, 0xff, ETH_ALEN);
+       memcpy(req->header.addr2, ieee->dev->dev_addr, ETH_ALEN);
+       memset(req->header.addr3, 0xff, ETH_ALEN);
+       
+       tag = (u8 *) skb_put(skb,len+2+rate_len);
+       
+       *tag++ = MFIE_TYPE_SSID;
+       *tag++ = len;
+       memcpy(tag, ieee->current_network.ssid, len);
+       tag += len;
+       
+       rtllib_MFIE_Brate(ieee,&tag);
+       rtllib_MFIE_Grate(ieee,&tag);
+
+#ifdef _RTL8192_EXT_PATCH_
+       if(extMore)
+               ieee->ext_patch_rtllib_probe_req_2(ieee, skb, tag);
+#endif
+
+       return skb;
+}
+
+struct sk_buff *rtllib_get_beacon_(struct rtllib_device *ieee);
+
+#ifdef _RTL8192_EXT_PATCH_
+void ext_rtllib_send_beacon_wq(void *data)
+{
+       struct rtllib_device *ieee = (struct rtllib_device *)container_of_work_rsl((struct work_struct *)data, struct rtllib_device, ext_send_beacon_wq);
+       struct sk_buff *skb;
+       
+       skb = rtllib_get_beacon_(ieee);
+
+       if (skb){
+               softmac_mgmt_xmit(skb, ieee);
+               ieee->softmac_stats.tx_beacons++;
+       }
+       
+
+       
+}
+#endif
+void rtllib_send_beacon(struct rtllib_device *ieee)
+{
+       struct sk_buff *skb;
+       if(!ieee->ieee_up)
+               return;         
+       skb = rtllib_get_beacon_(ieee);
+       
+       if (skb){
+               softmac_mgmt_xmit(skb, ieee);
+               ieee->softmac_stats.tx_beacons++;
+       }
+       
+       if(ieee->beacon_txing && ieee->ieee_up){
+               mod_timer(&ieee->beacon_timer,jiffies+(MSECS(ieee->current_network.beacon_interval-5)));
+       }
+}
+
+
+void rtllib_send_beacon_cb(unsigned long _ieee)
+{
+       struct rtllib_device *ieee =
+               (struct rtllib_device *) _ieee;
+       unsigned long flags;
+
+       spin_lock_irqsave(&ieee->beacon_lock, flags);
+       rtllib_send_beacon(ieee);
+       spin_unlock_irqrestore(&ieee->beacon_lock, flags);
+}
+
+#ifdef _RTL8192_EXT_PATCH_
+
+inline struct sk_buff *rtllib_probe_req_with_SSID(struct rtllib_device *ieee, char *ssid, int len_ssid)
+{
+       unsigned int len,rate_len;
+       u8 *tag;
+       struct sk_buff *skb;
+       struct rtllib_probe_request *req;
+       
+#ifdef _RTL8192_EXT_PATCH_
+       short extMore = 0;
+       if(ieee->ext_patch_rtllib_probe_req_1)
+               extMore = ieee->ext_patch_rtllib_probe_req_1(ieee);
+#endif
+
+       len = len_ssid;
+       
+       rate_len = rtllib_MFIE_rate_len(ieee);
+       
+#ifdef _RTL8192_EXT_PATCH_
+       if(!extMore)
+#endif
+               skb = dev_alloc_skb(sizeof(struct rtllib_probe_request) +
+                           2 + len + rate_len + ieee->tx_headroom);
+#ifdef _RTL8192_EXT_PATCH_
+       else
+               skb = dev_alloc_skb(sizeof(struct rtllib_probe_request) +
+                           2 + len + rate_len+128+ieee->tx_headroom); 
+#endif
+       
+       if (!skb) 
+               return NULL;
+       
+       req = (struct rtllib_probe_request *) skb_put(skb,sizeof(struct rtllib_probe_request));
+       req->header.frame_ctl = cpu_to_le16(RTLLIB_STYPE_PROBE_REQ);
+       req->header.duration_id = 0; 
+       
+       memset(req->header.addr1, 0xff, ETH_ALEN);
+       memcpy(req->header.addr2, ieee->dev->dev_addr, ETH_ALEN);
+       memset(req->header.addr3, 0xff, ETH_ALEN);
+       
+       tag = (u8 *) skb_put(skb,len+2+rate_len);
+       
+       *tag++ = MFIE_TYPE_SSID;
+       *tag++ = len;
+       if(len)
+       {
+               memcpy(tag, ssid, len);
+               tag += len;
+       }
+       
+       rtllib_MFIE_Brate(ieee,&tag);
+       rtllib_MFIE_Grate(ieee,&tag);
+       
+#ifdef _RTL8192_EXT_PATCH_
+       if(extMore)
+               ieee->ext_patch_rtllib_probe_req_2(ieee, skb, tag);
+#endif
+       return skb;
+}
+
+#endif 
+
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+void rtllib_ibss_wait_timeout(unsigned long _ieee)
+{
+       struct rtllib_device *ieee =
+               (struct rtllib_device *) _ieee;
+       printk("======>%s():oh oh ibss wait beacon time out, search a new ibss now\n",__FUNCTION__);    
+       rtllib_stop_send_beacons(ieee);
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) 
+       cancel_delayed_work(&ieee->start_ibss_wq);
+       cancel_delayed_work(&ieee->link_change_wq);
+#endif 
+       rtllib_stop_scan(ieee);
+       queue_delayed_work_rsl(ieee->wq, &ieee->start_ibss_wq, MSECS(150)); 
+}
+#endif
+
+#ifdef _RTL8192_EXT_PATCH_
+void rtllib_send_probe(struct rtllib_device *ieee, u8 is_mesh)
+#else
+void rtllib_send_probe(struct rtllib_device *ieee)
+#endif
+{
+       struct sk_buff *skb;
+#ifdef _RTL8192_EXT_PATCH_
+       if(is_mesh) 
+               skb = rtllib_probe_req_with_SSID(ieee, NULL, 0);
+       else
+#endif
+       skb = rtllib_probe_req(ieee);
+       if (skb){
+               softmac_mgmt_xmit(skb, ieee);
+               ieee->softmac_stats.tx_probe_rq++;
+       }
+}
+
+#ifdef _RTL8192_EXT_PATCH_
+void rtllib_send_probe_requests(struct rtllib_device *ieee, u8 is_mesh)
+{
+       if (ieee->active_scan && (ieee->softmac_features & IEEE_SOFTMAC_PROBERQ)){
+               rtllib_send_probe(ieee,is_mesh);
+               rtllib_send_probe(ieee,is_mesh);
+       }
+}
+#else
+void rtllib_send_probe_requests(struct rtllib_device *ieee)
+{
+       if (ieee->active_scan && (ieee->softmac_features & IEEE_SOFTMAC_PROBERQ)){
+               rtllib_send_probe(ieee);
+               rtllib_send_probe(ieee);
+       }
+}
+#endif
+
+void rtllib_softmac_hint11d_wq(void *data)
+{
+#ifdef CONFIG_CRDA 
+
+#if (LINUX_VERSION_CODE == KERNEL_VERSION(2,6,31))
+       struct rtllib_device *ieee = container_of_dwork_rsl(data, struct rtllib_device, softmac_hint11d_wq);
+       PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(ieee);
+       struct wireless_dev *wdev = &ieee->wdev;
+
+       regulatory_hint_11d(wdev->wiphy, pDot11dInfo->CountryIeBuf, pDot11dInfo->CountryIeLen);
+#endif
+
+#endif
+}
+
+void rtllib_update_active_chan_map(struct rtllib_device *ieee)
+{
+#ifdef ENABLE_DOT11D
+       memcpy(ieee->active_channel_map, GET_DOT11D_INFO(ieee)->channel_map, MAX_CHANNEL_NUMBER+1);
+#else
+       memcpy(ieee->active_channel_map, ieee->channel_map, MAX_CHANNEL_NUMBER+1);
+#endif
+#if 0
+       {
+               int i;
+               for(i=1;i<=14;i++)
+                       printk("%d ", ieee->active_channel_map[i]);
+               printk("\n");
+       }
+#endif
+}
+
+/* this performs syncro scan blocking the caller until all channels
+ * in the allowed channel map has been checked. 
+ */
+void rtllib_softmac_scan_syncro(struct rtllib_device *ieee, u8 is_mesh)
+{
+       short ch = 0;
+
+       rtllib_update_active_chan_map(ieee);
+
+       ieee->be_scan_inprogress = true;
+
+       down(&ieee->scan_sem);
+       
+       while(1)
+       {
+               
+               do {
+                       ch++;
+                       if (ch > MAX_CHANNEL_NUMBER) 
+                               goto out; /* scan completed */
+               } while(!ieee->active_channel_map[ch]);
+       
+               /* this fuction can be called in two situations
+                * 1- We have switched to ad-hoc mode and we are
+                *    performing a complete syncro scan before conclude
+                *    there are no interesting cell and to create a 
+                *    new one. In this case the link state is 
+                *    RTLLIB_NOLINK until we found an interesting cell.
+                *    If so the ieee8021_new_net, called by the RX path
+                *    will set the state to RTLLIB_LINKED, so we stop
+                *    scanning
+                * 2- We are linked and the root uses run iwlist scan.
+                *    So we switch to RTLLIB_LINKED_SCANNING to remember
+                *    that we are still logically linked (not interested in
+                *    new network events, despite for updating the net list,
+                *    but we are temporarly 'unlinked' as the driver shall
+                *    not filter RX frames and the channel is changing.
+                * So the only situation in witch are interested is to check
+                * if the state become LINKED because of the #1 situation
+                */    
+                   
+               if (ieee->state == RTLLIB_LINKED)
+                       goto out;
+               if (ieee->sync_scan_hurryup){
+                       printk("============>sync_scan_hurryup out\n");
+                       goto out;
+               }
+
+               ieee->set_chan(ieee->dev, ch);
+               if(ieee->active_channel_map[ch] == 1)
+#ifdef _RTL8192_EXT_PATCH_
+               rtllib_send_probe_requests(ieee, is_mesh);
+#else
+               rtllib_send_probe_requests(ieee);
+#endif
+               
+               /* this prevent excessive time wait when we
+                * need to wait for a syncro scan to end..
+                */             
+               msleep_interruptible_rsl(RTLLIB_SOFTMAC_SCAN_TIME);
+       }
+out:
+       ieee->actscanning = false;
+       ieee->sync_scan_hurryup = 0;
+
+       if(ieee->state >= RTLLIB_LINKED){
+#ifdef ENABLE_DOT11D
+               if(IS_DOT11D_ENABLE(ieee))
+                       DOT11D_ScanComplete(ieee);
+#endif 
+       }
+       up(&ieee->scan_sem);
+       
+       ieee->be_scan_inprogress = false;
+
+
+       
+       {
+       union iwreq_data wrqu;
+       memset(&wrqu, 0, sizeof(wrqu));
+       wireless_send_event(ieee->dev,SIOCGIWSCAN,&wrqu,NULL);
+       }
+}
+
+void rtllib_softmac_scan_wq(void *data)
+{
+       struct rtllib_device *ieee = container_of_dwork_rsl(data, struct rtllib_device, softmac_scan_wq);
+
+#ifndef _RTL8192_EXT_PATCH_
+       u8 last_channel = ieee->current_network.channel; 
+#endif
+       rtllib_update_active_chan_map(ieee);
+
+       if(!ieee->ieee_up)
+               return; 
+       if(rtllib_act_scanning(ieee,true) == true)
+               return;
+
+       down(&ieee->scan_sem);
+
+        if(ieee->eRFPowerState == eRfOff)
+        {
+            printk("======>%s():rf state is eRfOff, return\n",__FUNCTION__);
+            goto out1;
+        }
+
+       do{
+               ieee->current_network.channel = 
+                       (ieee->current_network.channel + 1) % MAX_CHANNEL_NUMBER;
+               if (ieee->scan_watch_dog++ > MAX_CHANNEL_NUMBER) 
+               {
+                       if (!ieee->active_channel_map[ieee->current_network.channel])
+                               ieee->current_network.channel = 6;
+                       goto out; /* no good chans */
+               }
+       } while(!ieee->active_channel_map[ieee->current_network.channel]);
+
+       if (ieee->scanning_continue == 0 )
+               goto out;
+
+       ieee->set_chan(ieee->dev, ieee->current_network.channel);
+
+       if(ieee->active_channel_map[ieee->current_network.channel] == 1)
+#ifdef _RTL8192_EXT_PATCH_
+       rtllib_send_probe_requests(ieee, 0);
+#else
+       rtllib_send_probe_requests(ieee);
+#endif                         
+
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,40)
+       queue_delayed_work_rsl(ieee->wq, &ieee->softmac_scan_wq, MSECS(RTLLIB_SOFTMAC_SCAN_TIME));
+#else
+       if (ieee->scanning_continue == 1) 
+               mod_timer(&ieee->scan_timer,(jiffies + MSECS(RTLLIB_SOFTMAC_SCAN_TIME)));
+#endif
+
+       up(&ieee->scan_sem);
+       return;
+       
+out:
+#ifdef ENABLE_DOT11D
+       if(IS_DOT11D_ENABLE(ieee))
+               DOT11D_ScanComplete(ieee);
+#endif 
+#ifdef _RTL8192_EXT_PATCH_
+       ieee->current_network.channel = ieee->backup_channel;
+       ieee->set_chan(ieee->dev, ieee->current_network.channel);
+#else
+       ieee->current_network.channel = last_channel;
+#endif
+
+out1:
+       ieee->actscanning = false;
+       ieee->scan_watch_dog = 0;
+       ieee->scanning_continue = 0;
+       up(&ieee->scan_sem);
+}
+
+
+
+void rtllib_beacons_start(struct rtllib_device *ieee)
+{
+       unsigned long flags;    
+       spin_lock_irqsave(&ieee->beacon_lock,flags);
+
+       ieee->beacon_txing = 1;
+       rtllib_send_beacon(ieee);
+       
+       spin_unlock_irqrestore(&ieee->beacon_lock,flags);
+}
+
+void rtllib_beacons_stop(struct rtllib_device *ieee)
+{
+       unsigned long flags;
+
+       spin_lock_irqsave(&ieee->beacon_lock,flags);
+
+       ieee->beacon_txing = 0;
+       del_timer_sync(&ieee->beacon_timer);
+
+       spin_unlock_irqrestore(&ieee->beacon_lock,flags);
+
+}
+
+
+void rtllib_stop_send_beacons(struct rtllib_device *ieee)
+{
+       if(ieee->stop_send_beacons)
+               ieee->stop_send_beacons(ieee->dev);
+       if (ieee->softmac_features & IEEE_SOFTMAC_BEACONS)
+               rtllib_beacons_stop(ieee);
+}
+
+
+void rtllib_start_send_beacons(struct rtllib_device *ieee)
+{
+       if(ieee->start_send_beacons)
+               ieee->start_send_beacons(ieee->dev);
+       if(ieee->softmac_features & IEEE_SOFTMAC_BEACONS)
+               rtllib_beacons_start(ieee); 
+}
+
+
+void rtllib_softmac_stop_scan(struct rtllib_device *ieee)
+{
+       
+       
+       down(&ieee->scan_sem);
+       ieee->scan_watch_dog = 0;
+       if (ieee->scanning_continue == 1){
+               ieee->scanning_continue = 0;
+
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,40)
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,67)
+               cancel_delayed_work(&ieee->softmac_scan_wq);
+#endif
+#else
+               del_timer_sync(&ieee->scan_timer);
+#endif
+       }
+       
+       up(&ieee->scan_sem);
+}
+
+void rtllib_stop_scan(struct rtllib_device *ieee)
+{
+       if (ieee->softmac_features & IEEE_SOFTMAC_SCAN){
+               rtllib_softmac_stop_scan(ieee);
+       }else{
+               if(ieee->rtllib_stop_hw_scan)
+                       ieee->rtllib_stop_hw_scan(ieee->dev);
+       }
+}
+
+void rtllib_stop_scan_syncro(struct rtllib_device *ieee)
+{
+       if (ieee->softmac_features & IEEE_SOFTMAC_SCAN){
+                       ieee->sync_scan_hurryup = 1;
+       }else{
+               if(ieee->rtllib_stop_hw_scan)
+                       ieee->rtllib_stop_hw_scan(ieee->dev);
+       }
+}
+
+bool rtllib_act_scanning(struct rtllib_device *ieee, bool sync_scan)
+{
+       if (ieee->softmac_features & IEEE_SOFTMAC_SCAN){
+               if(sync_scan){ 
+                       return ieee->be_scan_inprogress;
+               }else{
+                       return (ieee->actscanning ||ieee->be_scan_inprogress);
+               }
+       }else{
+               return test_bit(STATUS_SCANNING, &ieee->status);
+       }
+}
+
+/* called with ieee->lock held */
+void rtllib_start_scan(struct rtllib_device *ieee)
+{
+       printk("===>%s()\n",__FUNCTION__);
+#ifdef ENABLE_IPS
+       if(ieee->rtllib_ips_leave_wq != NULL)
+       ieee->rtllib_ips_leave_wq(ieee->dev);
+#endif
+
+
+#ifdef ENABLE_DOT11D
+       if(IS_DOT11D_ENABLE(ieee) )
+       {                       
+               if(IS_COUNTRY_IE_VALID(ieee))
+               {
+                       RESET_CIE_WATCHDOG(ieee); 
+               }
+       }
+#endif
+       if (ieee->softmac_features & IEEE_SOFTMAC_SCAN){        
+               if (ieee->scanning_continue == 0){
+                       ieee->actscanning = true;
+                       ieee->scanning_continue = 1;
+#ifdef _RTL8192_EXT_PATCH_
+                       ieee->backup_channel = ieee->current_network.channel;
+                       printk("===>backup_channel is %d\n",ieee->backup_channel);
+#endif
+                       queue_delayed_work_rsl(ieee->wq, &ieee->softmac_scan_wq, 0);
+               }
+       }else{
+               if(ieee->rtllib_start_hw_scan)
+                       ieee->rtllib_start_hw_scan(ieee->dev);
+       }
+       
+}
+
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,5,40)       
+void rtllib_softmac_scan_cb(unsigned long _dev)
+{
+       unsigned long flags;
+       struct rtllib_device *ieee = (struct rtllib_device *)_dev;
+       
+       spin_lock_irqsave(&ieee->lock, flags);
+       rtllib_start_scan(ieee);
+       spin_unlock_irqrestore(&ieee->lock, flags);
+}
+#endif
+
+/* called with wx_sem held */
+void rtllib_start_scan_syncro(struct rtllib_device *ieee, u8 is_mesh)
+{
+#ifdef ENABLE_DOT11D
+       if(IS_DOT11D_ENABLE(ieee) )
+       {                       
+               if(IS_COUNTRY_IE_VALID(ieee))
+               {
+                       RESET_CIE_WATCHDOG(ieee); 
+               }
+       }
+#endif
+       ieee->sync_scan_hurryup = 0;
+       if (ieee->softmac_features & IEEE_SOFTMAC_SCAN){
+               rtllib_softmac_scan_syncro(ieee, is_mesh);
+       }else{
+               if(ieee->rtllib_start_hw_scan)
+                       ieee->rtllib_start_hw_scan(ieee->dev);
+       }
+               
+}
+
+#ifdef _RTL8192_EXT_PATCH_
+inline struct sk_buff *rtllib_authentication_req(struct rtllib_network *beacon, 
+       struct rtllib_device *ieee, int challengelen,u8 * daddr)
+#else
+inline struct sk_buff *rtllib_authentication_req(struct rtllib_network *beacon, 
+       struct rtllib_device *ieee, int challengelen)
+#endif
+{
+       struct sk_buff *skb;    
+       struct rtllib_authentication *auth;
+       int  len = 0;
+#ifdef _RTL8192_EXT_PATCH_
+       bool is_mesh = false;
+       is_mesh = ieee->ext_patch_rtllib_is_mesh(ieee,daddr);
+#endif
+#ifdef _RTL8192_EXT_PATCH_
+       if((ieee->mesh_sec_type == 1) && (ieee->mesh_security_setting == 3) && is_mesh){
+               skb = ieee->ext_patch_rtllib_send_ath_commit(ieee,daddr);
+               return skb;
+       }
+#endif
+       len = sizeof(struct rtllib_authentication) + challengelen + ieee->tx_headroom + 4;
+#ifdef USB_USE_ALIGNMENT
+        u32 Tmpaddr;
+        int alignment;
+        skb = dev_alloc_skb(len + USB_512B_ALIGNMENT_SIZE);
+#else
+       skb = dev_alloc_skb(len); 
+#endif
+
+       if (!skb) return NULL;
+       
+#ifdef USB_USE_ALIGNMENT
+        Tmpaddr = (u32)skb->data;
+        alignment = Tmpaddr & 0x1ff;
+        skb_reserve(skb,(USB_512B_ALIGNMENT_SIZE - alignment));
+#endif
+       
+       skb_reserve(skb, ieee->tx_headroom);
+       
+       auth = (struct rtllib_authentication *)
+               skb_put(skb, sizeof(struct rtllib_authentication));
+       
+       auth->header.frame_ctl = RTLLIB_STYPE_AUTH;
+       if (challengelen) auth->header.frame_ctl |= RTLLIB_FCTL_WEP;
+       
+       auth->header.duration_id = 0x013a; 
+#ifdef _RTL8192_EXT_PATCH_
+       if(is_mesh)
+               memcpy(auth->header.addr1,daddr,ETH_ALEN);
+       else
+#endif
+               memcpy(auth->header.addr1, beacon->bssid, ETH_ALEN);
+       memcpy(auth->header.addr2, ieee->dev->dev_addr, ETH_ALEN);
+#ifdef _RTL8192_EXT_PATCH_
+       if(is_mesh)
+               memset(auth->header.addr3, 0, ETH_ALEN);
+       else
+               memcpy(auth->header.addr3, beacon->bssid, ETH_ALEN);
+#else
+       memcpy(auth->header.addr3, beacon->bssid, ETH_ALEN);
+#endif 
+       if(ieee->auth_mode == 0)
+               auth->algorithm = WLAN_AUTH_OPEN;
+       else if(ieee->auth_mode == 1)
+               auth->algorithm = WLAN_AUTH_SHARED_KEY;
+       else if(ieee->auth_mode == 2)
+               auth->algorithm = WLAN_AUTH_OPEN;
+       printk("%s():auth->algorithm is %s\n",__FUNCTION__,
+               (auth->algorithm == WLAN_AUTH_OPEN)?"OPEN":"SHARED_KEY");
+       auth->transaction = cpu_to_le16(ieee->associate_seq);
+       ieee->associate_seq++;
+       
+       auth->status = cpu_to_le16(WLAN_STATUS_SUCCESS);
+       
+       return skb;
+       
+}
+
+void constructWMMIE(u8* wmmie, u8* wmm_len,u8 oui_subtype)
+{
+       u8      szQoSOUI[] ={221, 0, 0x00, 0x50, 0xf2, 0x02, 0, 1};
+       
+       if (oui_subtype == OUI_SUBTYPE_QOS_CAPABI)
+       {
+               szQoSOUI[0] = 46;
+               szQoSOUI[1] = *wmm_len;
+               memcpy(wmmie,szQoSOUI,3);
+               *wmm_len = 3;
+       }       
+       else
+       {
+               szQoSOUI[1] = *wmm_len + 6;
+               szQoSOUI[6] = oui_subtype;
+               memcpy(wmmie, szQoSOUI, 8);
+               *(wmmie+8) = 0;
+               *wmm_len = 9;
+       }       
+}
+
+static struct sk_buff* rtllib_probe_resp(struct rtllib_device *ieee, u8 *dest)
+{
+       u8 *tag;
+       int beacon_size;
+       struct rtllib_probe_response *beacon_buf;
+       struct sk_buff *skb = NULL;
+       int encrypt;
+       int atim_len,erp_len;
+       struct rtllib_crypt_data* crypt;
+       
+       char *ssid = ieee->current_network.ssid;
+       int ssid_len = ieee->current_network.ssid_len;
+       int rate_len = ieee->current_network.rates_len+2;
+       int rate_ex_len = ieee->current_network.rates_ex_len;
+       int wpa_ie_len = ieee->wpa_ie_len;
+       u8 erpinfo_content = 0;
+
+       u8* tmp_ht_cap_buf=NULL;
+       u8 tmp_ht_cap_len=0;
+       u8* tmp_ht_info_buf=NULL;
+       u8 tmp_ht_info_len=0;
+       PRT_HIGH_THROUGHPUT     pHTInfo = ieee->pHTInfo;
+       u8* tmp_generic_ie_buf=NULL;
+       u8 tmp_generic_ie_len=0;
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+       u8 wmmie[9] = {0};
+       u8 wmm_len = 0;
+#endif
+#ifdef RTL8192S_WAPI_SUPPORT
+       PRT_WAPI_T pWapiInfo = &(ieee->wapiInfo);
+       u8 pWapiIELen = 0;
+#endif
+       if(rate_ex_len > 0) rate_ex_len+=2;
+       
+       if(ieee->current_network.capability & WLAN_CAPABILITY_IBSS)
+               atim_len = 4;
+       else
+               atim_len = 0;
+       
+#if 0
+       if(rtllib_is_54g(&ieee->current_network)) 
+               erp_len = 3;
+       else
+               erp_len = 0;
+#else
+      if((ieee->current_network.mode == IEEE_G) 
+               ||( ieee->current_network.mode == IEEE_N_24G && ieee->pHTInfo->bCurSuppCCK)) {
+               erp_len = 3;
+               erpinfo_content = 0;
+               if(ieee->current_network.buseprotection)
+                       erpinfo_content |= ERP_UseProtection;
+       }
+       else
+               erp_len = 0;
+#endif
+
+#ifdef _RTL8192_EXT_PATCH_
+       crypt = ieee->sta_crypt[ieee->tx_keyidx];
+#else
+       crypt = ieee->crypt[ieee->tx_keyidx];
+#endif 
+       encrypt = ieee->host_encrypt && crypt && crypt->ops && 
+               ((0 == strcmp(crypt->ops->name, "WEP") || wpa_ie_len));
+#if 1  
+       if(ieee->pHTInfo->bCurrentHTSupport){
+               tmp_ht_cap_buf =(u8*) &(ieee->pHTInfo->SelfHTCap);
+               tmp_ht_cap_len = sizeof(ieee->pHTInfo->SelfHTCap);
+               tmp_ht_info_buf =(u8*) &(ieee->pHTInfo->SelfHTInfo);
+               tmp_ht_info_len = sizeof(ieee->pHTInfo->SelfHTInfo);
+#ifdef _RTL8192_EXT_PATCH_
+               HTConstructCapabilityElement(ieee, tmp_ht_cap_buf, &tmp_ht_cap_len,encrypt, 1);
+#else
+               HTConstructCapabilityElement(ieee, tmp_ht_cap_buf, &tmp_ht_cap_len,encrypt);
+#endif 
+               HTConstructInfoElement(ieee,tmp_ht_info_buf,&tmp_ht_info_len, encrypt);
+               
+
+               if(pHTInfo->bRegRT2RTAggregation)
+               {
+                       tmp_generic_ie_buf = ieee->pHTInfo->szRT2RTAggBuffer;
+                       tmp_generic_ie_len = sizeof(ieee->pHTInfo->szRT2RTAggBuffer);
+                       HTConstructRT2RTAggElement(ieee, tmp_generic_ie_buf, &tmp_generic_ie_len);
+               }
+       }
+#endif
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+       if(ieee->qos_support){
+
+               if(ieee->iw_mode == IW_MODE_ADHOC)
+               {
+               }
+       }
+#endif
+#ifdef RTL8192S_WAPI_SUPPORT
+       if(ieee->WapiSupport && pWapiInfo->bWapiEnable)
+       {
+               WapiSetIE(ieee);
+               pWapiIELen = pWapiInfo->wapiIELength;
+       }
+#endif
+       beacon_size = sizeof(struct rtllib_probe_response)+2+
+               ssid_len
+               +3 
+               +rate_len
+               +rate_ex_len
+               +atim_len
+               +erp_len
+               +wpa_ie_len
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+               +tmp_ht_cap_len
+               +tmp_ht_info_len
+               +tmp_generic_ie_len
+               +wmm_len
+#endif
+#ifdef RTL8192S_WAPI_SUPPORT
+               +pWapiIELen+2
+#endif
+               +ieee->tx_headroom;
+#ifdef USB_USE_ALIGNMENT        
+        u32 Tmpaddr=0;
+        int alignment=0;
+        skb = dev_alloc_skb(beacon_size + USB_512B_ALIGNMENT_SIZE);
+#else
+       skb = dev_alloc_skb(beacon_size);
+#endif
+       if (!skb) 
+               return NULL;
+
+#ifdef USB_USE_ALIGNMENT
+        Tmpaddr = (u32)skb->data;
+        alignment = Tmpaddr & 0x1ff;
+        skb_reserve(skb,(USB_512B_ALIGNMENT_SIZE - alignment));
+#endif
+       
+       skb_reserve(skb, ieee->tx_headroom);
+       
+       beacon_buf = (struct rtllib_probe_response*) skb_put(skb, (beacon_size - ieee->tx_headroom));
+       memcpy (beacon_buf->header.addr1, dest,ETH_ALEN);
+       memcpy (beacon_buf->header.addr2, ieee->dev->dev_addr, ETH_ALEN);
+       memcpy (beacon_buf->header.addr3, ieee->current_network.bssid, ETH_ALEN);
+
+       beacon_buf->header.duration_id = 0; 
+       beacon_buf->beacon_interval = 
+               cpu_to_le16(ieee->current_network.beacon_interval);
+       beacon_buf->capability = 
+               cpu_to_le16(ieee->current_network.capability & WLAN_CAPABILITY_IBSS);
+       beacon_buf->capability |= 
+               cpu_to_le16(ieee->current_network.capability & WLAN_CAPABILITY_SHORT_PREAMBLE); 
+
+       if(ieee->short_slot && (ieee->current_network.capability & WLAN_CAPABILITY_SHORT_SLOT_TIME))
+               cpu_to_le16((beacon_buf->capability |= WLAN_CAPABILITY_SHORT_SLOT_TIME));               
+       
+#ifndef _RTL8192_EXT_PATCH_
+       crypt = ieee->crypt[ieee->tx_keyidx];
+#endif
+       if (encrypt)    
+               beacon_buf->capability |= cpu_to_le16(WLAN_CAPABILITY_PRIVACY);
+       
+               
+       beacon_buf->header.frame_ctl = cpu_to_le16(RTLLIB_STYPE_PROBE_RESP);
+       beacon_buf->info_element[0].id = MFIE_TYPE_SSID;        
+       beacon_buf->info_element[0].len = ssid_len;
+       
+       tag = (u8*) beacon_buf->info_element[0].data;
+       
+       memcpy(tag, ssid, ssid_len);
+       
+       tag += ssid_len;
+       
+       *(tag++) = MFIE_TYPE_RATES;
+       *(tag++) = rate_len-2; 
+       memcpy(tag,ieee->current_network.rates,rate_len-2);
+       tag+=rate_len-2;
+       
+       *(tag++) = MFIE_TYPE_DS_SET;
+       *(tag++) = 1;
+       *(tag++) = ieee->current_network.channel;
+       
+       if(atim_len){
+       u16 val16;
+               *(tag++) = MFIE_TYPE_IBSS_SET;
+               *(tag++) = 2;
+                val16 = cpu_to_le16(ieee->current_network.atim_window);
+               memcpy((u8 *)tag, (u8 *)&val16, 2);
+               tag+=2;
+       }
+       
+       if(erp_len){
+               *(tag++) = MFIE_TYPE_ERP;
+               *(tag++) = 1;
+               *(tag++) = erpinfo_content; 
+       }
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+       if(tmp_ht_cap_len){
+               *(tag++) = MFIE_TYPE_HT_CAP;
+               *(tag++) = tmp_ht_cap_len - 2;
+               memcpy(tag, tmp_ht_cap_buf, tmp_ht_cap_len - 2);        
+               tag += tmp_ht_cap_len - 2;
+       }
+#endif
+       if(rate_ex_len){
+               *(tag++) = MFIE_TYPE_RATES_EX;
+               *(tag++) = rate_ex_len-2; 
+               memcpy(tag,ieee->current_network.rates_ex,rate_ex_len-2);
+               tag+=rate_ex_len-2;
+       }
+
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+       if(tmp_ht_info_len){
+               *(tag++) = MFIE_TYPE_HT_INFO;
+               *(tag++) = tmp_ht_info_len - 2;
+               memcpy(tag, tmp_ht_info_buf, tmp_ht_info_len -2);
+               tag += tmp_ht_info_len - 2;
+       }
+#endif
+       
+       if (wpa_ie_len)
+       {       
+               if (ieee->iw_mode == IW_MODE_ADHOC)
+               {
+                       memcpy(&ieee->wpa_ie[14], &ieee->wpa_ie[8], 4);
+               }
+               memcpy(tag, ieee->wpa_ie, ieee->wpa_ie_len);
+               tag += ieee->wpa_ie_len;
+       }
+
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+       if(tmp_generic_ie_len)
+       {
+               (*tag++) = 0xdd;
+               (*tag++) = tmp_generic_ie_len - 2;
+               memcpy(tag,tmp_generic_ie_buf,tmp_generic_ie_len -2);
+               tag += tmp_generic_ie_len -2;
+               
+       }
+#endif
+
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+       if(ieee->qos_support)
+       {
+               if(wmm_len) {
+                       memcpy(tag,wmmie,wmm_len);
+                       tag += wmm_len;
+               }
+       }
+#endif
+#ifdef RTL8192S_WAPI_SUPPORT
+       if(pWapiIELen)
+       {
+               *(tag++) = MFIE_TYPE_WAPI;
+               *(tag++) = pWapiIELen;
+               memcpy(tag, pWapiInfo->wapiIE, pWapiIELen);
+               tag += pWapiIELen;
+
+               pWapiInfo->sendbeaconWapiIE[0] = MFIE_TYPE_WAPI;
+               pWapiInfo->sendbeaconWapiIE[1] = pWapiIELen;
+               pWapiInfo->sendbeaconWapiIELength = pWapiIELen+2;
+               memcpy(pWapiInfo->sendbeaconWapiIE+2,  pWapiInfo->wapiIE, pWapiIELen);
+       }
+#endif
+       return skb;
+}
+#ifdef RTL8192S_WAPI_SUPPORT
+void ConstructWapiIEForInit(struct rtllib_device* ieee)
+{
+       PRT_WAPI_T pWapiInfo = &(ieee->wapiInfo);
+       u8 pWapiIELen = 0;
+
+       if(ieee->WapiSupport && pWapiInfo->bWapiEnable){
+               WapiSetIE(ieee);
+               pWapiIELen = pWapiInfo->wapiIELength;
+               if(pWapiIELen){
+                       pWapiInfo->sendbeaconWapiIE[0] = MFIE_TYPE_WAPI;
+                       pWapiInfo->sendbeaconWapiIE[1] = pWapiIELen;
+                       pWapiInfo->sendbeaconWapiIELength = pWapiIELen+2;
+                       memcpy(pWapiInfo->sendbeaconWapiIE+2,  pWapiInfo->wapiIE, pWapiIELen);
+               }
+       }
+}
+#endif
+#ifdef _RTL8192_EXT_PATCH_
+void ConstructHostNameIE(struct rtllib_device* ieee, 
+               u8* hostname_ie, u8* hostname_ie_len)
+{
+       memset(hostname_ie, 0, MAX_HOST_NAME_LENGTH);
+       *hostname_ie++ = 0x48;
+       *hostname_ie++ = 0x4F;
+       *hostname_ie++ = 0x53;
+       *hostname_ie++ = 0x54;
+
+       memcpy(hostname_ie, ieee->hostname, ieee->hostname_len);
+
+       *hostname_ie_len = ieee->hostname_len + 4 + 2;
+
+       return;
+}
+#endif
+
+#ifdef _RTL8192_EXT_PATCH_
+struct sk_buff* rtllib_ext_probe_resp_by_net(struct rtllib_device *ieee, u8 *dest, struct rtllib_network *net)
+{
+       u8 *tag;
+       int beacon_size;
+       struct rtllib_probe_response *beacon_buf;
+       struct sk_buff *skb;
+       int encrypt;
+       int atim_len = 0,erp_len = 0;
+       struct rtllib_crypt_data* crypt;
+       u8 broadcast_addr[] = {0xff,0xff,0xff,0xff,0xff,0xff};
+       
+       char *ssid = net->ssid;
+       int ssid_len = net->ssid_len;
+
+       int rate_len = ieee->current_mesh_network.rates_len+2;
+       int rate_ex_len = ieee->current_mesh_network.rates_ex_len;
+       int wpa_ie_len = 0;
+       u8 erpinfo_content = 0;
+#if 0
+       u8* tmp_ht_cap_buf=NULL;
+       u8 tmp_ht_cap_len=0;
+       u8* tmp_ht_info_buf=NULL;
+       u8 tmp_ht_info_len=0;
+       PRT_HIGH_THROUGHPUT     pHTInfo = ieee->pHTInfo;
+       u8* tmp_generic_ie_buf=NULL;
+       u8 tmp_generic_ie_len=0;
+#endif
+       u8 wmmie[9] = {0};
+       u8 wmm_len = 0;
+#ifdef _RTL8192_EXT_PATCH_             
+       u8 hostname_ie_buf[MAX_HOST_NAME_LENGTH+4];
+       u8 hostname_ie_len=0;
+#endif
+       if(rate_ex_len > 0) rate_ex_len+=2;
+       if( ieee->meshScanMode&4){
+               ieee->current_mesh_network.channel = ieee->ext_patch_rtllib_ext_stop_scan_wq_set_channel(ieee);
+               if(ieee->current_mesh_network.channel == 0)
+                       ieee->current_mesh_network.channel = 1;
+       }
+       if( ieee->meshScanMode&6)
+       {
+               queue_work_rsl(ieee->wq, &ieee->ext_stop_scan_wq);
+       }       
+       if(ieee->current_mesh_network.capability & WLAN_CAPABILITY_IBSS) 
+               atim_len = 4;
+       else
+               atim_len = 0;
+       
+       
+       if((ieee->current_mesh_network.mode == IEEE_G) 
+               ||( ieee->mode == IEEE_N_24G && ieee->pHTInfo->bCurSuppCCK)){ 
+               erp_len = 3;
+               erpinfo_content = 0;
+               if(ieee->bUseProtection)
+                       erpinfo_content |= ERP_UseProtection;
+       }       
+       else
+               erp_len = 0;
+       
+       if ((IW_MODE_MESH==ieee->iw_mode))
+       {
+               wpa_ie_len = ieee->wpa_ie_len; 
+       }
+               
+#ifdef _RTL8192_EXT_PATCH_
+        crypt = ieee->cryptlist[0]->crypt[ieee->mesh_txkeyidx];
+#else
+       
+       crypt = ieee->crypt[ieee->tx_keyidx];
+#endif  
+       
+       
+       encrypt = ieee->host_encrypt && crypt && crypt->ops && 
+               ((0 == strcmp(crypt->ops->name, "WEP")||wpa_ie_len));
+#if 1  
+#if 0
+       if(ieee->pHTInfo->bCurrentHTSupport){
+               tmp_ht_cap_buf =(u8*) &(ieee->pHTInfo->SelfHTCap);
+               tmp_ht_cap_len = sizeof(ieee->pHTInfo->SelfHTCap);
+               tmp_ht_info_buf =(u8*) &(ieee->pHTInfo->SelfHTInfo);
+               tmp_ht_info_len = sizeof(ieee->pHTInfo->SelfHTInfo);
+               HTConstructCapabilityElement(ieee, tmp_ht_cap_buf, &tmp_ht_cap_len,encrypt, 1);
+               HTConstructInfoElement(ieee,tmp_ht_info_buf,&tmp_ht_info_len, encrypt);
+
+
+               if(pHTInfo->bRegRT2RTAggregation)
+               {
+                       tmp_generic_ie_buf = ieee->pHTInfo->szRT2RTAggBuffer;
+                       tmp_generic_ie_len = sizeof(ieee->pHTInfo->szRT2RTAggBuffer);
+                       HTConstructRT2RTAggElement(ieee, tmp_generic_ie_buf, &tmp_generic_ie_len);
+               }
+       }
+#endif
+#ifdef _RTL8192_EXT_PATCH_             
+       {
+               ConstructHostNameIE(ieee, hostname_ie_buf, &hostname_ie_len);
+#if 0
+               int i = 0;
+               printk("%s: HOST NAME IE!!!!!!!!!\n", __FUNCTION__);
+               for(i=0; i< (hostname_ie_len-2); i++)
+                       printk(" %2.2x-", *(hostname_ie_buf+i));
+               printk("\n\n");
+#endif
+       }
+#endif
+#endif
+       if(ieee->qos_support){
+#ifdef _RTL8192_EXT_PATCH_
+               if((ieee->iw_mode == IW_MODE_MESH) || (ieee->iw_mode == IW_MODE_ADHOC))
+#else
+               if(ieee->iw_mode == IW_MODE_ADHOC)
+#endif
+               {
+                       wmm_len = 1;
+                       constructWMMIE(wmmie,&wmm_len,OUI_SUBTYPE_WMM_INFO);
+               }
+       }
+       beacon_size = sizeof(struct rtllib_probe_response)+2+
+               ssid_len
+               +3 
+               +rate_len
+               +rate_ex_len
+               +atim_len
+               +erp_len
+                +wpa_ie_len
+#ifdef _RTL8192_EXT_PATCH_             
+               +hostname_ie_len
+#endif
+               +wmm_len
+               +ieee->tx_headroom;
+       skb = dev_alloc_skb(beacon_size+100);
+       
+       if (!skb) 
+               return NULL;
+       skb_reserve(skb, ieee->tx_headroom);
+       beacon_buf = (struct rtllib_probe_response*) skb_put(skb, (beacon_size - ieee->tx_headroom));
+       
+       memcpy (beacon_buf->header.addr1, dest,ETH_ALEN);
+       memcpy (beacon_buf->header.addr2, ieee->meshdev->dev_addr, ETH_ALEN);
+       memcpy (beacon_buf->header.addr3, ieee->current_mesh_network.bssid, ETH_ALEN);
+
+       beacon_buf->header.duration_id = 0; 
+       
+       beacon_buf->beacon_interval = 
+               cpu_to_le16(ieee->current_mesh_network.beacon_interval);  
+       beacon_buf->capability = 
+               cpu_to_le16(ieee->current_mesh_network.capability & WLAN_CAPABILITY_IBSS);
+       
+       if(ieee->short_slot && (ieee->current_mesh_network.capability & WLAN_CAPABILITY_SHORT_SLOT_TIME))
+               cpu_to_le16((beacon_buf->capability |= WLAN_CAPABILITY_SHORT_SLOT_TIME));               
+
+       if (encrypt)    
+               beacon_buf->capability |= cpu_to_le16(WLAN_CAPABILITY_PRIVACY);
+       
+               
+       beacon_buf->header.frame_ctl = cpu_to_le16(RTLLIB_STYPE_PROBE_RESP);
+       
+       beacon_buf->info_element[0].id = MFIE_TYPE_SSID;        
+       beacon_buf->info_element[0].len = ssid_len;
+       
+       tag = (u8*) beacon_buf->info_element[0].data;
+       
+       if(memcmp(dest, broadcast_addr, ETH_ALEN ))
+               memcpy(tag, ssid, ssid_len);    
+       else    
+               ssid_len=0;
+       
+       tag += ssid_len;
+       
+               
+       *(tag++) = MFIE_TYPE_RATES;
+       *(tag++) = rate_len-2; 
+       memcpy(tag,ieee->current_mesh_network.rates,rate_len-2);
+       tag+=rate_len-2;
+       
+       *(tag++) = MFIE_TYPE_DS_SET;
+       *(tag++) = 1;
+       *(tag++) = ieee->current_mesh_network.channel;  
+       
+       
+       if(atim_len){
+               u16 val16;
+               *(tag++) = MFIE_TYPE_IBSS_SET;
+               *(tag++) = 2;
+                val16 = cpu_to_le16(ieee->current_mesh_network.atim_window);
+               memcpy((u8 *)tag, (u8 *)&val16, 2);
+               tag+=2;
+       }
+       
+       if(erp_len){
+               *(tag++) = MFIE_TYPE_ERP;
+               *(tag++) = 1;
+               *(tag++) = erpinfo_content; 
+       }
+#if 0  
+       if(tmp_ht_cap_len){
+       *(tag++) = MFIE_TYPE_HT_CAP;
+       *(tag++) = tmp_ht_cap_len - 2;
+       memcpy(tag, tmp_ht_cap_buf, tmp_ht_cap_len - 2);        
+       tag += tmp_ht_cap_len - 2;
+       }
+#endif
+
+       if(rate_ex_len){
+               *(tag++) = MFIE_TYPE_RATES_EX;
+               *(tag++) = rate_ex_len-2; 
+               memcpy(tag,ieee->current_mesh_network.rates_ex,rate_ex_len-2);
+               tag+=rate_ex_len-2;
+       }
+
+#if 0 
+       if(tmp_ht_info_len){
+       *(tag++) = MFIE_TYPE_HT_INFO;
+       *(tag++) = tmp_ht_info_len - 2;
+       memcpy(tag, tmp_ht_info_buf, tmp_ht_info_len -2);
+       tag += tmp_ht_info_len - 2;
+       }
+#endif
+       if (wpa_ie_len) {
+               memcpy(tag, ieee->wpa_ie, ieee->wpa_ie_len);
+               tag+=ieee->wpa_ie_len;
+       }
+
+#if 0  
+       if(tmp_generic_ie_len)
+       {
+               (*tag++) = 0xdd;
+               (*tag++) = tmp_generic_ie_len - 2;
+               memcpy(tag,tmp_generic_ie_buf,tmp_generic_ie_len -2);
+               tag += tmp_generic_ie_len -2;
+               
+       }
+#endif 
+#ifdef _RTL8192_EXT_PATCH_     
+       if(hostname_ie_len)
+       {
+               (*tag++) = 0xdd;
+               (*tag++) = hostname_ie_len - 2;
+               memcpy(tag, hostname_ie_buf, hostname_ie_len - 2);
+               tag += hostname_ie_len -2;
+       }
+#endif
+
+       if(ieee->qos_support)
+       {
+               memcpy(tag,wmmie,wmm_len);
+       }
+
+       skb->dev = ieee->dev;
+       return skb;
+}
+#endif 
+
+struct sk_buff* rtllib_assoc_resp(struct rtllib_device *ieee, u8 *dest)
+{
+       struct sk_buff *skb;
+       u8* tag;
+       
+       struct rtllib_crypt_data* crypt;
+       struct rtllib_assoc_response_frame *assoc;
+       short encrypt;
+       
+       unsigned int rate_len = rtllib_MFIE_rate_len(ieee);
+       int len = sizeof(struct rtllib_assoc_response_frame) + rate_len + ieee->tx_headroom;
+       
+#ifdef USB_USE_ALIGNMENT
+        u32 Tmpaddr=0;
+        int alignment=0;
+        skb = dev_alloc_skb(len + USB_512B_ALIGNMENT_SIZE);
+#else  
+       skb = dev_alloc_skb(len);       
+#endif
+       
+       if (!skb) 
+               return NULL;
+       
+#ifdef USB_USE_ALIGNMENT
+        Tmpaddr = (u32)skb->data;
+        alignment = Tmpaddr & 0x1ff;
+        skb_reserve(skb,(USB_512B_ALIGNMENT_SIZE - alignment));
+#endif
+       
+       skb_reserve(skb, ieee->tx_headroom);
+       
+       assoc = (struct rtllib_assoc_response_frame *)
+               skb_put(skb,sizeof(struct rtllib_assoc_response_frame));
+       
+       assoc->header.frame_ctl = cpu_to_le16(RTLLIB_STYPE_ASSOC_RESP);
+       memcpy(assoc->header.addr1, dest,ETH_ALEN);
+       memcpy(assoc->header.addr3, ieee->dev->dev_addr, ETH_ALEN);
+       memcpy(assoc->header.addr2, ieee->dev->dev_addr, ETH_ALEN);
+       assoc->capability = cpu_to_le16(ieee->iw_mode == IW_MODE_MASTER ? 
+               WLAN_CAPABILITY_ESS : WLAN_CAPABILITY_IBSS);
+       
+               
+       if(ieee->short_slot)
+               assoc->capability |= cpu_to_le16(WLAN_CAPABILITY_SHORT_SLOT_TIME);
+               
+       if (ieee->host_encrypt){
+#ifdef _RTL8192_EXT_PATCH_
+               crypt = ieee->cryptlist[0]->crypt[ieee->tx_keyidx];
+#else
+               crypt = ieee->crypt[ieee->tx_keyidx];
+#endif
+
+       }               
+       else crypt = NULL;
+       
+       encrypt = ( crypt && crypt->ops);
+          
+       if (encrypt)
+               assoc->capability |= cpu_to_le16(WLAN_CAPABILITY_PRIVACY);
+       
+       assoc->status = 0;
+       assoc->aid = cpu_to_le16(ieee->assoc_id);
+       if (ieee->assoc_id == 0x2007) 
+               ieee->assoc_id=0;
+       else 
+               ieee->assoc_id++;
+       
+       tag = (u8*) skb_put(skb, rate_len);
+       rtllib_MFIE_Brate(ieee, &tag);
+       rtllib_MFIE_Grate(ieee, &tag);
+       
+       return skb;
+}
+
+struct sk_buff* rtllib_auth_resp(struct rtllib_device *ieee,int status, u8 *dest)
+{
+       struct sk_buff *skb = NULL;
+       struct rtllib_authentication *auth;
+       int len = ieee->tx_headroom + sizeof(struct rtllib_authentication)+1;
+#ifdef _RTL8192_EXT_PATCH_
+       bool is_mesh = ieee->ext_patch_rtllib_is_mesh(ieee,dest);
+       if(is_mesh && (ieee->mesh_sec_type == 1) && (ieee->mesh_security_setting == 3))
+               skb = ieee->ext_patch_rtllib_send_ath_confirm(ieee,dest);
+       return skb;
+#endif
+#ifdef USB_USE_ALIGNMENT
+        u32 Tmpaddr=0;
+        int alignment=0;
+        skb = dev_alloc_skb(len + USB_512B_ALIGNMENT_SIZE);
+#else  
+       skb = dev_alloc_skb(len);       
+#endif
+       if (!skb) 
+               return NULL;
+       
+       skb->len = sizeof(struct rtllib_authentication);
+       
+#ifdef USB_USE_ALIGNMENT
+        Tmpaddr = (u32)skb->data;
+        alignment = Tmpaddr & 0x1ff;
+        skb_reserve(skb,(USB_512B_ALIGNMENT_SIZE - alignment));
+#endif
+       
+       skb_reserve(skb, ieee->tx_headroom);
+
+       auth = (struct rtllib_authentication *)
+               skb_put(skb, sizeof(struct rtllib_authentication));
+       
+       auth->status = cpu_to_le16(status);
+       auth->transaction = cpu_to_le16(2);
+       auth->algorithm = cpu_to_le16(WLAN_AUTH_OPEN);
+       
+#ifdef _RTL8192_EXT_PATCH_
+       if(is_mesh)
+               memset(auth->header.addr3, 0, ETH_ALEN);
+       else
+               memcpy(auth->header.addr3, ieee->dev->dev_addr, ETH_ALEN);
+#else
+       memcpy(auth->header.addr3, ieee->dev->dev_addr, ETH_ALEN);
+#endif
+       memcpy(auth->header.addr2, ieee->dev->dev_addr, ETH_ALEN);
+       memcpy(auth->header.addr1, dest, ETH_ALEN);
+       auth->header.frame_ctl = cpu_to_le16(RTLLIB_STYPE_AUTH); 
+       return skb;
+       
+       
+}
+
+struct sk_buff* rtllib_null_func(struct rtllib_device *ieee,short pwr)
+{
+       struct sk_buff *skb;
+       struct rtllib_hdr_3addr* hdr;
+       
+#ifdef USB_USE_ALIGNMENT
+        u32 Tmpaddr=0;
+        int alignment=0;
+        skb = dev_alloc_skb(sizeof(struct rtllib_hdr_3addr) + ieee->tx_headroom + USB_512B_ALIGNMENT_SIZE);
+#else  
+       skb = dev_alloc_skb(sizeof(struct rtllib_hdr_3addr)+ieee->tx_headroom); 
+#endif 
+       if (!skb) 
+               return NULL;
+       
+#ifdef USB_USE_ALIGNMENT
+        Tmpaddr = (u32)skb->data;
+        alignment = Tmpaddr & 0x1ff;
+        skb_reserve(skb,(USB_512B_ALIGNMENT_SIZE - alignment));
+#endif 
+       skb_reserve(skb, ieee->tx_headroom);
+
+       hdr = (struct rtllib_hdr_3addr*)skb_put(skb,sizeof(struct rtllib_hdr_3addr));
+       
+       memcpy(hdr->addr1, ieee->current_network.bssid, ETH_ALEN);
+       memcpy(hdr->addr2, ieee->dev->dev_addr, ETH_ALEN);
+       memcpy(hdr->addr3, ieee->current_network.bssid, ETH_ALEN);
+       
+       hdr->frame_ctl = cpu_to_le16(RTLLIB_FTYPE_DATA | 
+               RTLLIB_STYPE_NULLFUNC | RTLLIB_FCTL_TODS | 
+               (pwr ? RTLLIB_FCTL_PM:0)); 
+       
+       return skb;
+       
+       
+}
+
+struct sk_buff* rtllib_pspoll_func(struct rtllib_device *ieee)
+{
+       struct sk_buff *skb;
+       struct rtllib_pspoll_hdr* hdr;
+       
+#ifdef USB_USE_ALIGNMENT
+        u32 Tmpaddr=0;
+        int alignment=0;
+        skb = dev_alloc_skb(sizeof(struct rtllib_pspoll_hdr) + ieee->tx_headroom + USB_512B_ALIGNMENT_SIZE);
+#else  
+       skb = dev_alloc_skb(sizeof(struct rtllib_pspoll_hdr)+ieee->tx_headroom); 
+#endif 
+       if (!skb) 
+               return NULL;
+       
+#ifdef USB_USE_ALIGNMENT
+        Tmpaddr = (u32)skb->data;
+        alignment = Tmpaddr & 0x1ff;
+        skb_reserve(skb,(USB_512B_ALIGNMENT_SIZE - alignment));
+#endif 
+       skb_reserve(skb, ieee->tx_headroom);
+
+       hdr = (struct rtllib_pspoll_hdr*)skb_put(skb,sizeof(struct rtllib_pspoll_hdr));
+
+       memcpy(hdr->bssid, ieee->current_network.bssid, ETH_ALEN);
+       memcpy(hdr->ta, ieee->dev->dev_addr, ETH_ALEN);
+
+       hdr->aid = cpu_to_le16(ieee->assoc_id | 0xc000); 
+       hdr->frame_ctl = cpu_to_le16(RTLLIB_FTYPE_CTL |RTLLIB_STYPE_PSPOLL | RTLLIB_FCTL_PM); 
+       
+       return skb;     
+       
+}
+
+void rtllib_resp_to_assoc_rq(struct rtllib_device *ieee, u8* dest)
+{
+       struct sk_buff *buf = rtllib_assoc_resp(ieee, dest);
+       
+       if (buf)
+               softmac_mgmt_xmit(buf, ieee);
+}
+
+
+void rtllib_resp_to_auth(struct rtllib_device *ieee, int s, u8* dest)
+{
+       struct sk_buff *buf = rtllib_auth_resp(ieee, s, dest);
+       
+       if (buf)
+               softmac_mgmt_xmit(buf, ieee);
+}
+
+
+void rtllib_resp_to_probe(struct rtllib_device *ieee, u8 *dest)
+{
+       
+
+       struct sk_buff *buf = rtllib_probe_resp(ieee, dest);
+       if (buf) 
+               softmac_mgmt_xmit(buf, ieee);
+}
+
+
+inline int SecIsInPMKIDList(struct rtllib_device *ieee, u8 *bssid)
+{
+       int i = 0;
+
+       do 
+       {
+               if ((ieee->PMKIDList[i].bUsed) && (memcmp(ieee->PMKIDList[i].Bssid, bssid, ETH_ALEN) == 0))
+               {
+                       break;
+               }
+               else
+               {       
+                       i++;
+               }
+       } while (i < NUM_PMKID_CACHE);
+
+       if (i == NUM_PMKID_CACHE)
+       { 
+               i = -1;
+       }
+       else
+       { 
+       }
+
+       return (i);
+       
+}
+
+
+inline struct sk_buff *rtllib_association_req(struct rtllib_network *beacon,struct rtllib_device *ieee)
+{
+       struct sk_buff *skb;
+       
+       struct rtllib_assoc_request_frame *hdr;
+       u8 *tag, *ies;
+       int i;
+       u8* ht_cap_buf = NULL;
+       u8 ht_cap_len=0;
+       u8* realtek_ie_buf=NULL;
+       u8 realtek_ie_len=0;
+       int wpa_ie_len= ieee->wpa_ie_len;
+       int wps_ie_len = ieee->wps_ie_len;
+       unsigned int ckip_ie_len=0;
+       unsigned int ccxrm_ie_len=0;
+       unsigned int cxvernum_ie_len=0;
+       struct rtllib_crypt_data* crypt;
+       int encrypt;
+       int     PMKCacheIdx;
+       
+       unsigned int rate_len = (beacon->rates_len?(beacon->rates_len+2):0) + (beacon->rates_ex_len?(beacon->rates_ex_len)+2:0);
+       
+       unsigned int wmm_info_len = beacon->qos_data.supported?9:0;
+#ifdef THOMAS_TURBO    
+       unsigned int turbo_info_len = beacon->Turbo_Enable?9:0;
+#endif
+
+       int len = 0; 
+#ifdef RTL8192S_WAPI_SUPPORT
+       PRT_WAPI_BKID           pWapiBKID;
+       u16                                     bkidNum;
+       PRT_WAPI_T                      pWapiInfo = &(ieee->wapiInfo);
+       u8                                      WapiIE[256];
+       u8                                      WapiIELength = 0;
+#endif                             
+#ifdef _RTL8192_EXT_PATCH_
+       crypt = ieee->sta_crypt[ieee->tx_keyidx];
+#else
+       crypt = ieee->crypt[ieee->tx_keyidx];
+#endif
+       if(crypt != NULL) {
+               encrypt = ieee->host_encrypt && crypt && crypt->ops && ((0 == strcmp(crypt->ops->name,"WEP") || wpa_ie_len));
+       } else {
+               encrypt = 0;
+       }
+
+#ifdef ENABLE_TKIP11N
+       if (ieee->bForcedBgMode == true)
+#else
+       if ((ieee->rtllib_ap_sec_type && (ieee->rtllib_ap_sec_type(ieee)&SEC_ALG_TKIP)) ||(ieee->bForcedBgMode == true)) 
+#endif
+       {
+               ieee->pHTInfo->bEnableHT = 0;
+               ieee->mode = WIRELESS_MODE_G;
+       }
+       
+       if(ieee->pHTInfo->bCurrentHTSupport&&ieee->pHTInfo->bEnableHT)
+       {
+               ht_cap_buf = (u8*)&(ieee->pHTInfo->SelfHTCap);
+               ht_cap_len = sizeof(ieee->pHTInfo->SelfHTCap);
+#ifdef _RTL8192_EXT_PATCH_
+               HTConstructCapabilityElement(ieee, ht_cap_buf, &ht_cap_len, encrypt, 0);
+#else
+               HTConstructCapabilityElement(ieee, ht_cap_buf, &ht_cap_len, encrypt);
+#endif
+               if(ieee->pHTInfo->bCurrentRT2RTAggregation)
+               {
+                       realtek_ie_buf = ieee->pHTInfo->szRT2RTAggBuffer;
+                       realtek_ie_len = sizeof( ieee->pHTInfo->szRT2RTAggBuffer);
+                       HTConstructRT2RTAggElement(ieee, realtek_ie_buf, &realtek_ie_len);
+                                       
+               }
+       }
+       if(ieee->qos_support){
+               wmm_info_len = beacon->qos_data.supported?9:0;
+       }
+       
+
+       if(beacon->bCkipSupported)
+       {
+               ckip_ie_len = 30+2;
+       }
+       if(beacon->bCcxRmEnable)
+       {       
+               ccxrm_ie_len = 6+2;
+       }
+       if( beacon->BssCcxVerNumber >= 2 )
+       {       
+               cxvernum_ie_len = 5+2;
+       }
+       
+       PMKCacheIdx = SecIsInPMKIDList(ieee, ieee->current_network.bssid);
+       if (PMKCacheIdx >= 0)
+       {
+               wpa_ie_len += 18;
+               printk("[PMK cache]: WPA2 IE length: %x\n", wpa_ie_len);
+       }       
+#ifdef RTL8192S_WAPI_SUPPORT
+       if(ieee->WapiSupport && pWapiInfo->bWapiEnable)
+       {
+               wpa_ie_len = 0;
+               
+               WAPI_TRACE(WAPI_API, "%s(): Set WAPI IE in assoc req!!\n",__FUNCTION__);
+               WapiSetIE(ieee);
+               WapiIELength = pWapiInfo->wapiIELength;
+               memcpy(WapiIE, pWapiInfo->wapiIE ,pWapiInfo->wapiIELength);
+               
+               bkidNum = 0;
+               WapiIELength +=2;
+               if(!list_empty(&(pWapiInfo->wapiBKIDStoreList))){
+                       list_for_each_entry(pWapiBKID, &pWapiInfo->wapiBKIDStoreList, list) {
+                               bkidNum ++;
+                               memcpy(WapiIE+WapiIELength, pWapiBKID->bkid,16);
+                               WapiIELength += 16;
+                       }
+               
+               }
+               memcpy(WapiIE+pWapiInfo->wapiIELength,&bkidNum,2);
+       }
+#endif
+       
+       len = sizeof(struct rtllib_assoc_request_frame)+ 2
+               + beacon->ssid_len
+               + rate_len
+               + wpa_ie_len 
+               + wps_ie_len
+#ifdef RTL8192S_WAPI_SUPPORT
+               + WapiIELength + 2
+#endif
+               + wmm_info_len
+#ifdef THOMAS_TURBO
+               + turbo_info_len
+#endif
+                + ht_cap_len
+               + realtek_ie_len
+               + ckip_ie_len
+               + ccxrm_ie_len
+               + cxvernum_ie_len
+               + ieee->tx_headroom;
+
+
+       
+#ifdef USB_USE_ALIGNMENT
+       u32 Tmpaddr=0;
+       int alignment=0;
+       skb = dev_alloc_skb(len + USB_512B_ALIGNMENT_SIZE);
+#else  
+       skb = dev_alloc_skb(len);
+#endif
+       
+       if (!skb) 
+               return NULL;
+
+#ifdef USB_USE_ALIGNMENT
+        Tmpaddr = (u32)skb->data;
+        alignment = Tmpaddr & 0x1ff;
+        skb_reserve(skb,(USB_512B_ALIGNMENT_SIZE - alignment));
+#endif
+
+       skb_reserve(skb, ieee->tx_headroom);
+       
+       hdr = (struct rtllib_assoc_request_frame *)
+               skb_put(skb, sizeof(struct rtllib_assoc_request_frame)+2);
+       
+       
+       hdr->header.frame_ctl = RTLLIB_STYPE_ASSOC_REQ;
+       hdr->header.duration_id= 37; 
+       memcpy(hdr->header.addr1, beacon->bssid, ETH_ALEN);
+       memcpy(hdr->header.addr2, ieee->dev->dev_addr, ETH_ALEN);
+       memcpy(hdr->header.addr3, beacon->bssid, ETH_ALEN);
+
+       memcpy(ieee->ap_mac_addr, beacon->bssid, ETH_ALEN);
+       
+       hdr->capability = cpu_to_le16(WLAN_CAPABILITY_ESS);
+       if (beacon->capability & WLAN_CAPABILITY_PRIVACY ) 
+               hdr->capability |= cpu_to_le16(WLAN_CAPABILITY_PRIVACY);
+
+       if (beacon->capability & WLAN_CAPABILITY_SHORT_PREAMBLE)
+               hdr->capability |= cpu_to_le16(WLAN_CAPABILITY_SHORT_PREAMBLE); 
+
+       if(ieee->short_slot && (beacon->capability&WLAN_CAPABILITY_SHORT_SLOT_TIME))
+               hdr->capability |= cpu_to_le16(WLAN_CAPABILITY_SHORT_SLOT_TIME);
+
+
+       hdr->listen_interval = beacon->listen_interval;
+       
+       hdr->info_element[0].id = MFIE_TYPE_SSID;
+
+       hdr->info_element[0].len = beacon->ssid_len;
+       tag = skb_put(skb, beacon->ssid_len);
+       memcpy(tag, beacon->ssid, beacon->ssid_len);
+       
+       tag = skb_put(skb, rate_len); 
+       
+       if(beacon->rates_len){
+               *tag++ = MFIE_TYPE_RATES;
+               *tag++ = beacon->rates_len;
+               for(i=0;i<beacon->rates_len;i++){
+                       *tag++ = beacon->rates[i];
+               }
+       }
+
+       if(beacon->rates_ex_len){
+               *tag++ = MFIE_TYPE_RATES_EX;
+               *tag++ = beacon->rates_ex_len;
+               for(i=0;i<beacon->rates_ex_len;i++){
+                       *tag++ = beacon->rates_ex[i];
+               }
+       }
+
+       if( beacon->bCkipSupported )
+       {
+               static u8       AironetIeOui[] = {0x00, 0x01, 0x66}; 
+               u8      CcxAironetBuf[30];
+               OCTET_STRING    osCcxAironetIE;
+
+               memset(CcxAironetBuf, 0,30);
+               osCcxAironetIE.Octet = CcxAironetBuf;
+               osCcxAironetIE.Length = sizeof(CcxAironetBuf);
+               memcpy(osCcxAironetIE.Octet, AironetIeOui, sizeof(AironetIeOui));
+
+               osCcxAironetIE.Octet[IE_CISCO_FLAG_POSITION] |=  (SUPPORT_CKIP_PK|SUPPORT_CKIP_MIC) ;
+               tag = skb_put(skb, ckip_ie_len);
+               *tag++ = MFIE_TYPE_AIRONET;
+               *tag++ = osCcxAironetIE.Length;
+               memcpy(tag,osCcxAironetIE.Octet,osCcxAironetIE.Length);
+               tag += osCcxAironetIE.Length;
+       }
+
+       if(beacon->bCcxRmEnable)
+       {
+               static u8 CcxRmCapBuf[] = {0x00, 0x40, 0x96, 0x01, 0x01, 0x00};
+               OCTET_STRING osCcxRmCap;
+
+               osCcxRmCap.Octet = CcxRmCapBuf;
+               osCcxRmCap.Length = sizeof(CcxRmCapBuf);
+               tag = skb_put(skb,ccxrm_ie_len);
+               *tag++ = MFIE_TYPE_GENERIC;
+               *tag++ = osCcxRmCap.Length;
+               memcpy(tag,osCcxRmCap.Octet,osCcxRmCap.Length);
+               tag += osCcxRmCap.Length;
+       }
+
+       if( beacon->BssCcxVerNumber >= 2 )
+       {
+               u8                      CcxVerNumBuf[] = {0x00, 0x40, 0x96, 0x03, 0x00};
+               OCTET_STRING    osCcxVerNum;
+               CcxVerNumBuf[4] = beacon->BssCcxVerNumber;
+               osCcxVerNum.Octet = CcxVerNumBuf;
+               osCcxVerNum.Length = sizeof(CcxVerNumBuf);
+               tag = skb_put(skb,cxvernum_ie_len);
+               *tag++ = MFIE_TYPE_GENERIC;
+               *tag++ = osCcxVerNum.Length;
+               memcpy(tag,osCcxVerNum.Octet,osCcxVerNum.Length);
+               tag += osCcxVerNum.Length;
+       }
+       if(ieee->pHTInfo->bCurrentHTSupport&&ieee->pHTInfo->bEnableHT){
+               if(ieee->pHTInfo->ePeerHTSpecVer != HT_SPEC_VER_EWC)
+               {
+                       tag = skb_put(skb, ht_cap_len);
+                       *tag++ = MFIE_TYPE_HT_CAP;
+                       *tag++ = ht_cap_len - 2;
+                       memcpy(tag, ht_cap_buf,ht_cap_len -2);
+                       tag += ht_cap_len -2;
+               }
+       }                
+
+       
+       if (wpa_ie_len){
+       tag = skb_put(skb, ieee->wpa_ie_len);   
+               memcpy(tag, ieee->wpa_ie, ieee->wpa_ie_len);
+               
+               if (PMKCacheIdx >= 0)
+               {
+                       tag = skb_put(skb, 18);         
+                       *tag = 1;
+                       *(tag + 1) = 0; 
+                       memcpy((tag + 2), &ieee->PMKIDList[PMKCacheIdx].PMKID, 16);
+               }
+       }
+#ifdef RTL8192S_WAPI_SUPPORT
+       if(WapiIELength){
+               tag = skb_put(skb, WapiIELength+2);
+               *tag = MFIE_TYPE_WAPI;
+               *(tag+1) = WapiIELength;
+               memcpy((tag+2), WapiIE, WapiIELength);
+
+               pWapiInfo->assoReqWapiIELength = WapiIELength+2;
+               pWapiInfo->assoReqWapiIE[0] = MFIE_TYPE_WAPI;
+               pWapiInfo->assoReqWapiIE[1] = WapiIELength;
+               memcpy(pWapiInfo->assoReqWapiIE+2,WapiIE,WapiIELength);
+       }
+#endif
+
+       if(wmm_info_len) {
+       tag = skb_put(skb,wmm_info_len);
+         rtllib_WMM_Info(ieee, &tag);
+       }
+
+       if(wps_ie_len && ieee->wps_ie)
+       {
+               tag = skb_put(skb, wps_ie_len);         
+               memcpy(tag, ieee->wps_ie, wps_ie_len);          
+       }       
+       
+#ifdef THOMAS_TURBO
+       tag = skb_put(skb,turbo_info_len);
+        if(turbo_info_len) {
+                rtllib_TURBO_Info(ieee, &tag);
+        }
+#endif
+
+       if(ieee->pHTInfo->bCurrentHTSupport&&ieee->pHTInfo->bEnableHT){
+               if(ieee->pHTInfo->ePeerHTSpecVer == HT_SPEC_VER_EWC)
+               {
+                       tag = skb_put(skb, ht_cap_len);
+                       *tag++ = MFIE_TYPE_GENERIC;
+                       *tag++ = ht_cap_len - 2;
+                       memcpy(tag, ht_cap_buf,ht_cap_len - 2);
+                       tag += ht_cap_len -2;
+               }
+
+               if(ieee->pHTInfo->bCurrentRT2RTAggregation){
+                       tag = skb_put(skb, realtek_ie_len);
+                       *tag++ = MFIE_TYPE_GENERIC;
+                       *tag++ = realtek_ie_len - 2;
+                       memcpy(tag, realtek_ie_buf,realtek_ie_len -2 );
+               }
+       }
+
+       if(ieee->assocreq_ies){
+               kfree(ieee->assocreq_ies);
+               ieee->assocreq_ies = NULL;
+       }
+       ies = &(hdr->info_element[0].id);
+       ieee->assocreq_ies_len = (skb->data + skb->len) - ies;
+       ieee->assocreq_ies = kmalloc(ieee->assocreq_ies_len, GFP_ATOMIC);
+       if (ieee->assocreq_ies)
+               memcpy(ieee->assocreq_ies, ies, ieee->assocreq_ies_len);
+       else{
+               printk("%s()Warning: can't alloc memory for assocreq_ies\n", __func__);
+               ieee->assocreq_ies_len = 0;
+       }       
+       
+       return skb;
+}
+
+void rtllib_associate_abort(struct rtllib_device *ieee)
+{
+       
+       unsigned long flags;
+       spin_lock_irqsave(&ieee->lock, flags);
+       
+       ieee->associate_seq++;
+       
+       /* don't scan, and avoid to have the RX path possibily
+        * try again to associate. Even do not react to AUTH or
+        * ASSOC response. Just wait for the retry wq to be scheduled.
+        * Here we will check if there are good nets to associate
+        * with, so we retry or just get back to NO_LINK and scanning
+        */
+       if (ieee->state == RTLLIB_ASSOCIATING_AUTHENTICATING){
+               RTLLIB_DEBUG_MGMT("Authentication failed\n"); 
+               ieee->softmac_stats.no_auth_rs++;
+       }else{
+               RTLLIB_DEBUG_MGMT("Association failed\n"); 
+               ieee->softmac_stats.no_ass_rs++;
+       }
+               
+       ieee->state = RTLLIB_ASSOCIATING_RETRY;
+               
+       queue_delayed_work_rsl(ieee->wq, &ieee->associate_retry_wq, \
+                           RTLLIB_SOFTMAC_ASSOC_RETRY_TIME);
+       
+       spin_unlock_irqrestore(&ieee->lock, flags);
+}
+
+void rtllib_associate_abort_cb(unsigned long dev)
+{
+       rtllib_associate_abort((struct rtllib_device *) dev);
+}
+
+
+#ifdef _RTL8192_EXT_PATCH_
+void rtllib_associate_step1(struct rtllib_device *ieee,u8 * daddr)
+#else
+void rtllib_associate_step1(struct rtllib_device *ieee)
+#endif
+{
+       struct rtllib_network *beacon = &ieee->current_network;
+       struct sk_buff *skb;
+#ifdef _RTL8192_EXT_PATCH_
+       bool is_mesh = false;
+#endif
+       RTLLIB_DEBUG_MGMT("Stopping scan\n");
+       
+       ieee->softmac_stats.tx_auth_rq++;
+#ifdef _RTL8192_EXT_PATCH_
+       skb=rtllib_authentication_req(beacon, ieee, 0,daddr);
+#else
+       skb=rtllib_authentication_req(beacon, ieee, 0);
+#endif
+#ifdef _RTL8192_EXT_PATCH_
+       is_mesh = ieee->ext_patch_rtllib_is_mesh(ieee,daddr);
+       if(is_mesh)     {
+               if(skb) 
+                       softmac_mgmt_xmit(skb, ieee);
+               return;
+       }else
+#endif         
+       if (!skb) 
+               rtllib_associate_abort(ieee);
+       else{ 
+               ieee->state = RTLLIB_ASSOCIATING_AUTHENTICATING ;
+               RTLLIB_DEBUG_MGMT("Sending authentication request\n");
+               softmac_mgmt_xmit(skb, ieee);
+               if(!timer_pending(&ieee->associate_timer)){
+                       ieee->associate_timer.expires = jiffies + (HZ / 2);
+                       add_timer(&ieee->associate_timer);
+               }
+       }
+}
+
+void rtllib_auth_challenge(struct rtllib_device *ieee, u8 *challenge, int chlen)
+{
+       u8 *c;  
+       struct sk_buff *skb;
+       struct rtllib_network *beacon = &ieee->current_network;
+       
+       ieee->associate_seq++;
+       ieee->softmac_stats.tx_auth_rq++;
+       
+#ifdef _RTL8192_EXT_PATCH_
+       skb = rtllib_authentication_req(beacon, ieee, chlen+2,beacon->bssid);
+#else
+       skb = rtllib_authentication_req(beacon, ieee, chlen+2);
+#endif         
+       if (!skb) 
+               rtllib_associate_abort(ieee);
+       else{
+               c = skb_put(skb, chlen+2);
+               *(c++) = MFIE_TYPE_CHALLENGE;
+               *(c++) = chlen;
+               memcpy(c, challenge, chlen);
+               
+               RTLLIB_DEBUG_MGMT("Sending authentication challenge response\n");
+               
+#ifdef _RTL8192_EXT_PATCH_
+               rtllib_encrypt_fragment(ieee, skb, sizeof(struct rtllib_hdr_3addr  ), 0, 0);
+#else
+               rtllib_encrypt_fragment(ieee, skb, sizeof(struct rtllib_hdr_3addr  ));
+#endif         
+                       
+               softmac_mgmt_xmit(skb, ieee);
+               mod_timer(&ieee->associate_timer, jiffies + (HZ/2));
+#if 0
+               ieee->associate_timer.expires = jiffies + (HZ / 2);
+               add_timer(&ieee->associate_timer);
+#endif
+       }       
+       kfree(challenge);
+}
+
+void rtllib_associate_step2(struct rtllib_device *ieee)
+{
+       struct sk_buff* skb;
+       struct rtllib_network *beacon = &ieee->current_network;
+       
+       del_timer_sync(&ieee->associate_timer);
+       
+       RTLLIB_DEBUG_MGMT("Sending association request\n");
+       
+       ieee->softmac_stats.tx_ass_rq++;
+       skb=rtllib_association_req(beacon, ieee);
+       if (!skb) 
+               rtllib_associate_abort(ieee);
+       else{
+               softmac_mgmt_xmit(skb, ieee);
+               mod_timer(&ieee->associate_timer, jiffies + (HZ/2));
+#if 0
+               ieee->associate_timer.expires = jiffies + (HZ / 2);
+               add_timer(&ieee->associate_timer);
+#endif
+       }       
+}
+
+#define CANCELLED  2
+void rtllib_associate_complete_wq(void *data)
+{
+       struct rtllib_device *ieee = (struct rtllib_device *)container_of_work_rsl(data, struct rtllib_device, associate_complete_wq);
+       PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(ieee->PowerSaveControl));
+       printk(KERN_INFO "Associated successfully\n");
+        if(ieee->is_silent_reset == 0){
+            printk("normal associate\n");
+            notify_wx_assoc_event(ieee); 
+        }
+
+       netif_carrier_on(ieee->dev);
+       ieee->is_roaming = false;
+       if(rtllib_is_54g(&ieee->current_network) && 
+               (ieee->modulation & RTLLIB_OFDM_MODULATION)){
+               
+               ieee->rate = 108;
+               printk(KERN_INFO"Using G rates:%d\n", ieee->rate);
+       }else{
+               ieee->rate = 22;
+               ieee->SetWirelessMode(ieee->dev, IEEE_B);
+               printk(KERN_INFO"Using B rates:%d\n", ieee->rate);
+       }
+       if (ieee->pHTInfo->bCurrentHTSupport&&ieee->pHTInfo->bEnableHT)
+       {
+               printk("Successfully associated, ht enabled\n");
+               HTOnAssocRsp(ieee);
+       } else {
+               printk("Successfully associated, ht not enabled(%d, %d)\n", 
+                               ieee->pHTInfo->bCurrentHTSupport, ieee->pHTInfo->bEnableHT);
+               memset(ieee->dot11HTOperationalRateSet, 0, 16);
+       }
+       ieee->LinkDetectInfo.SlotNum = 2 * (1 + ieee->current_network.beacon_interval/500);
+       if(ieee->LinkDetectInfo.NumRecvBcnInPeriod==0||ieee->LinkDetectInfo.NumRecvDataInPeriod==0 )
+       {
+               ieee->LinkDetectInfo.NumRecvBcnInPeriod = 1;
+               ieee->LinkDetectInfo.NumRecvDataInPeriod= 1;    
+       }
+       pPSC->LpsIdleCount = 0;
+       ieee->link_change(ieee->dev);
+
+#ifdef _RTL8192_EXT_PATCH_     
+       if(ieee->set_key_for_AP)
+               ieee->set_key_for_AP(ieee);
+       /* Synchronize mesh channel to wlan channel in MSTA mode.*/
+       {
+               if(ieee->current_mesh_network.channel != ieee->current_network.channel)
+               {
+                       printk("^^^^^^^^^^^^^^^^Change mesh channel %d with wlan channel %d\n", 
+                                       ieee->current_mesh_network.channel, ieee->current_network.channel);
+                       ieee->ext_patch_rtllib_close_all_peerlink(ieee, CANCELLED);
+                       ieee->current_mesh_network.channel = ieee->current_network.channel;
+                       if(ieee->ext_patch_r819x_wx_set_channel)
+                       {
+                               ieee->ext_patch_r819x_wx_set_channel(ieee, ieee->current_network.channel);
+                               ieee->ext_patch_r819x_wx_set_mesh_chan(ieee->dev,ieee->current_network.channel);
+                       }
+               }
+       }
+#endif 
+        if(ieee->is_silent_reset == 0){
+        } else if(ieee->is_silent_reset == 1) {
+            printk("silent reset associate\n");
+            ieee->is_silent_reset = 0;
+        }
+
+       if (ieee->data_hard_resume)
+               ieee->data_hard_resume(ieee->dev);
+
+#ifdef RTK_DMP_PLATFORM
+       kobject_hotplug(&ieee->dev->class_dev.kobj, KOBJ_LINKUP);
+#endif
+}
+
+static void rtllib_sta_send_associnfo(struct rtllib_device *ieee)
+{
+       char *buf;
+       size_t len;
+       int i;
+       union iwreq_data wrqu;
+
+               return;
+
+       
+       buf = kmalloc(50 + 2 * (ieee->assocreq_ies_len + ieee->assocresp_ies_len), GFP_ATOMIC);
+       if (!buf)
+               return;
+
+       len = sprintf(buf, "ASSOCINFO(");
+       if (ieee->assocreq_ies) {
+               len += sprintf(buf + len, "ReqIEs=");
+               for (i = 0; i < ieee->assocreq_ies_len; i++) {
+                       len += sprintf(buf + len, "%02x", ieee->assocreq_ies[i]);
+               }
+       }
+       if (ieee->assocresp_ies) {
+               if (ieee->assocreq_ies)
+                       len += sprintf(buf + len, " ");
+               len += sprintf(buf + len, "RespIEs=");
+               for (i = 0; i < ieee->assocresp_ies_len; i++) {
+                       len += sprintf(buf + len, "%02x", ieee->assocresp_ies[i]);
+               }
+       }
+       len += sprintf(buf + len, ")");
+
+       if (len > IW_CUSTOM_MAX) {
+               len = sprintf(buf, "ASSOCRESPIE=");
+               for (i = 0; i < ieee->assocresp_ies_len; i++) {
+                       len += sprintf(buf + len, "%02x", ieee->assocresp_ies[i]);
+               }
+       }
+
+       if (len <= IW_CUSTOM_MAX) {
+               memset(&wrqu, 0, sizeof(wrqu));
+               wrqu.data.length = len;
+               wireless_send_event(ieee->dev, IWEVCUSTOM, &wrqu, buf);
+       }
+
+       kfree(buf);
+}
+
+void rtllib_associate_complete(struct rtllib_device *ieee)
+{
+       del_timer_sync(&ieee->associate_timer);
+
+#if 0
+       for(i = 0; i < 6; i++) {
+         ieee->seq_ctrl[i] = 0;
+       }
+#endif 
+       ieee->state = RTLLIB_LINKED;
+#if defined (RTL8192S_WAPI_SUPPORT)
+       if ((ieee->WapiSupport) && (ieee->wapiInfo.bWapiEnable)){
+               WAPI_CreateEvent_Send(ieee, WAPI_EVENT_CONNECT, ieee->current_network.bssid, NULL, 0);
+       }
+#endif
+#if 0
+       if (ieee->pHTInfo->bCurrentHTSupport)
+       {
+               printk("Successfully associated, ht enabled\n");
+               queue_work_rsl(ieee->wq, &ieee->ht_onAssRsp);
+       }
+       else
+       {
+               printk("Successfully associated, ht not enabled\n");
+               memset(ieee->dot11HTOperationalRateSet, 0, 16);
+               HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, HT_EXTCHNL_OFFSET_NO_EXT);
+       }
+#endif
+
+       rtllib_sta_send_associnfo(ieee);
+
+       queue_work_rsl(ieee->wq, &ieee->associate_complete_wq);
+}
+
+void rtllib_associate_procedure_wq(void *data)
+{
+       struct rtllib_device *ieee = container_of_dwork_rsl(data, struct rtllib_device, associate_procedure_wq);
+       rtllib_stop_scan_syncro(ieee);
+#ifdef ENABLE_IPS
+       if(ieee->rtllib_ips_leave != NULL)
+               ieee->rtllib_ips_leave(ieee->dev);
+#endif
+       down(&ieee->wx_sem);
+       
+       if (ieee->data_hard_stop)
+               ieee->data_hard_stop(ieee->dev);
+       
+       rtllib_stop_scan(ieee);
+       printk("===>%s(), chan:%d\n", __FUNCTION__, ieee->current_network.channel);     
+       HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, HT_EXTCHNL_OFFSET_NO_EXT);
+       if(ieee->eRFPowerState == eRfOff)
+       {
+            printk("=============>%s():Rf state is eRfOff, schedule ipsleave wq again,return\n",__FUNCTION__);
+#ifdef ENABLE_IPS
+               if(ieee->rtllib_ips_leave_wq != NULL)
+                       ieee->rtllib_ips_leave_wq(ieee->dev);
+#endif
+               up(&ieee->wx_sem);
+               return;
+       }
+       ieee->associate_seq = 1;
+#ifdef _RTL8192_EXT_PATCH_
+       rtllib_associate_step1(ieee, ieee->current_network.bssid);
+#else
+       rtllib_associate_step1(ieee);
+#endif 
+       up(&ieee->wx_sem);
+}
+
+#ifdef _RTL8192_EXT_PATCH_
+
+void rtllib_ext_stop_scan_wq(void *data)
+{
+       struct rtllib_device *ieee = (struct rtllib_device *)container_of_work_rsl(data, struct rtllib_device, ext_stop_scan_wq);
+       rtllib_stop_scan_syncro(ieee);
+       
+       down(&ieee->wx_sem);
+       
+       if (ieee->data_hard_stop)
+               ieee->data_hard_stop(ieee->dev);
+       
+       rtllib_stop_scan(ieee);
+
+       up(&ieee->wx_sem);
+}
+
+
+void rtllib_ext_send_11s_beacon(struct rtllib_device *ieee)
+{      
+       queue_work_rsl(ieee->wq, &ieee->ext_send_beacon_wq);
+}
+
+#endif 
+
+
+inline void rtllib_softmac_new_net(struct rtllib_device *ieee, struct rtllib_network *net)
+{
+       u8 tmp_ssid[IW_ESSID_MAX_SIZE+1];
+       int tmp_ssid_len = 0;
+       
+       short apset,ssidset,ssidbroad,apmatch,ssidmatch;
+       
+       /* we are interested in new new only if we are not associated 
+        * and we are not associating / authenticating
+        */
+       if (ieee->state != RTLLIB_NOLINK)
+               return; 
+
+       if ((ieee->iw_mode == IW_MODE_INFRA) && !(net->capability & WLAN_CAPABILITY_ESS))
+               return;
+       
+       if ((ieee->iw_mode == IW_MODE_ADHOC) && !(net->capability & WLAN_CAPABILITY_IBSS))
+               return;
+
+       if ((ieee->iw_mode == IW_MODE_ADHOC) && (net->channel > ieee->ibss_maxjoin_chal)) {
+               return;
+       }
+#ifdef _RTL8192_EXT_PATCH_
+       if (ieee->iw_mode == IW_MODE_INFRA || ieee->iw_mode == IW_MODE_ADHOC 
+           || ((ieee->iw_mode == IW_MODE_MESH) && (ieee->only_mesh == 0)))
+#else
+       if (ieee->iw_mode == IW_MODE_INFRA || ieee->iw_mode == IW_MODE_ADHOC) 
+#endif
+               {
+               /* if the user specified the AP MAC, we need also the essid
+                * This could be obtained by beacons or, if the network does not
+                * broadcast it, it can be put manually.
+                */
+               apset = ieee->wap_set;
+               ssidset = ieee->ssid_set;
+               ssidbroad =  !(net->ssid_len == 0 || net->ssid[0]== '\0');
+               apmatch = (memcmp(ieee->current_network.bssid, net->bssid, ETH_ALEN)==0);
+               if(!ssidbroad){
+                       ssidmatch = (ieee->current_network.ssid_len == net->hidden_ssid_len)&&\
+                                       (!strncmp(ieee->current_network.ssid, net->hidden_ssid, net->hidden_ssid_len));
+                       if(net->hidden_ssid_len > 0)
+                        {
+                               strncpy(net->ssid, net->hidden_ssid, net->hidden_ssid_len);
+                               net->ssid_len = net->hidden_ssid_len;
+                                ssidbroad = 1;
+                        }
+               }
+               else
+                       ssidmatch = (ieee->current_network.ssid_len == net->ssid_len)&&\
+                                       (!strncmp(ieee->current_network.ssid, net->ssid, net->ssid_len));
+
+               if (    /* if the user set the AP check if match.
+                        * if the network does not broadcast essid we check the user supplyed ANY essid
+                        * if the network does broadcast and the user does not set essid it is OK
+                        * if the network does broadcast and the user did set essid chech if essid match
+                        */
+                       ( apset && apmatch && 
+                               ((ssidset && ssidbroad && ssidmatch) || (ssidbroad && !ssidset) || (!ssidbroad && ssidset)) )
+                       /* if the ap is not set, check that the user set the bssid
+                        * and the network does bradcast and that those two bssid matches
+                        */ 
+                        ||  (!apset && ssidset && ssidbroad && ssidmatch) || (ieee->is_roaming && ssidset && ssidbroad && ssidmatch) 
+                       ){
+                               /* if the essid is hidden replace it with the
+                               * essid provided by the user.
+                               */
+                               if (!ssidbroad){
+                                       strncpy(tmp_ssid, ieee->current_network.ssid, IW_ESSID_MAX_SIZE);
+                                       tmp_ssid_len = ieee->current_network.ssid_len;
+                               }
+                               memcpy(&ieee->current_network, net, sizeof(struct rtllib_network));
+                               if (!ssidbroad){
+                                       strncpy(ieee->current_network.ssid, tmp_ssid, IW_ESSID_MAX_SIZE);
+                                       ieee->current_network.ssid_len = tmp_ssid_len;
+                               }
+                               printk(KERN_INFO"Linking with %s,channel:%d, qos:%d, myHT:%d, networkHT:%d, mode:%x cur_net.flags:0x%x\n",ieee->current_network.ssid,ieee->current_network.channel, ieee->current_network.qos_data.supported, ieee->pHTInfo->bEnableHT, ieee->current_network.bssht.bdSupportHT, ieee->current_network.mode, ieee->current_network.flags);
+
+                               if ((rtllib_act_scanning(ieee, false)) && !(ieee->softmac_features & IEEE_SOFTMAC_SCAN)){
+                                       rtllib_stop_scan_syncro(ieee);
+                               }
+
+                               ieee->hwscan_ch_bk = ieee->current_network.channel;
+                               HTResetIOTSetting(ieee->pHTInfo);
+                ieee->wmm_acm = 0;
+#ifdef _RTL8192_EXT_PATCH_
+                               if ((ieee->iw_mode == IW_MODE_INFRA) || 
+                                       ((ieee->iw_mode == IW_MODE_MESH) && (ieee->only_mesh == 0)))  
+#else
+                               if (ieee->iw_mode == IW_MODE_INFRA)
+#endif
+                               {
+                                       /* Join the network for the first time */
+                                       ieee->AsocRetryCount = 0;       
+                                       if((ieee->current_network.qos_data.supported == 1) &&
+                                          ieee->current_network.bssht.bdSupportHT)
+/*WB, 2008.09.09:bCurrentHTSupport and bEnableHT two flags are going to put together to check whether we are in HT now, so needn't to check bEnableHT flags here. That's is to say we will set to HT support whenever joined AP has the ability to support HT. And whether we are in HT or not, please check bCurrentHTSupport&&bEnableHT now please.*/
+                                       {
+#ifdef ENABLE_AMSDU   
+                                               if((ieee->mode == IEEE_N_24G) && (ieee->mode == IEEE_N_5G))
+                                                       HTUseDefaultSetting(ieee);
+#endif
+                                               HTResetSelfAndSavePeerSetting(ieee, &(ieee->current_network));
+                                       }
+                                       else
+                                       {
+                                               ieee->pHTInfo->bCurrentHTSupport = false;
+                                       }
+
+                                       ieee->state = RTLLIB_ASSOCIATING;
+                                       if(ieee->LedControlHandler != NULL)
+                                               ieee->LedControlHandler(ieee->dev, LED_CTL_START_TO_LINK); 
+                                       queue_delayed_work_rsl(ieee->wq, &ieee->associate_procedure_wq, 0);
+                               }else{
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+                                       ieee->state = RTLLIB_LINKED;
+                                       ieee->SetWirelessMode(ieee->dev, ieee->current_network.mode);
+                                       mod_timer(&ieee->ibss_wait_timer,jiffies+(MSECS(20000)));
+#else
+                                       if(rtllib_is_54g(&ieee->current_network) && 
+                                               (ieee->modulation & RTLLIB_OFDM_MODULATION)){
+                                               ieee->rate = 108;
+                                               ieee->SetWirelessMode(ieee->dev, IEEE_G);
+                                               printk(KERN_INFO"Using G rates\n");
+                                       }else{
+                                               ieee->rate = 22;
+                                               ieee->SetWirelessMode(ieee->dev, IEEE_B);
+                                               printk(KERN_INFO"Using B rates\n");
+                                       }
+                                       memset(ieee->dot11HTOperationalRateSet, 0, 16);
+                                       ieee->state = RTLLIB_LINKED;
+#endif
+                               }
+                       
+               }
+       }
+
+}
+
+void rtllib_softmac_check_all_nets(struct rtllib_device *ieee)
+{
+       unsigned long flags;
+       struct rtllib_network *target;
+
+       spin_lock_irqsave(&ieee->lock, flags);
+                       
+       list_for_each_entry(target, &ieee->network_list, list) {
+               
+               /* if the state become different that NOLINK means
+                * we had found what we are searching for
+                */
+
+               if (ieee->state != RTLLIB_NOLINK) 
+                       break;
+       
+               if (ieee->scan_age == 0 || time_after(target->last_scanned + ieee->scan_age, jiffies))
+               rtllib_softmac_new_net(ieee, target);
+       }
+       
+       spin_unlock_irqrestore(&ieee->lock, flags);
+       
+}
+
+
+static inline u16 auth_parse(struct sk_buff *skb, u8** challenge, int *chlen)
+{
+       struct rtllib_authentication *a;
+       u8 *t;
+       if (skb->len <  (sizeof(struct rtllib_authentication)-sizeof(struct rtllib_info_element))){ 
+               RTLLIB_DEBUG_MGMT("invalid len in auth resp: %d\n",skb->len);
+               return 0xcafe;
+       }
+       *challenge = NULL;
+       a = (struct rtllib_authentication*) skb->data;
+       if(skb->len > (sizeof(struct rtllib_authentication) +3)){
+               t = skb->data + sizeof(struct rtllib_authentication);
+               
+               if(*(t++) == MFIE_TYPE_CHALLENGE){
+                       *chlen = *(t++);
+                       *challenge = (u8*)kmalloc(*chlen, GFP_ATOMIC);
+                       memcpy(*challenge, t, *chlen);
+               }
+       }
+       
+       return cpu_to_le16(a->status);
+       
+}
+
+
+int auth_rq_parse(struct sk_buff *skb,u8* dest)
+{
+       struct rtllib_authentication *a;
+       
+       if (skb->len <  (sizeof(struct rtllib_authentication)-sizeof(struct rtllib_info_element))){ 
+               RTLLIB_DEBUG_MGMT("invalid len in auth request: %d\n",skb->len);        
+               return -1;
+       }
+       a = (struct rtllib_authentication*) skb->data;
+       
+       memcpy(dest,a->header.addr2, ETH_ALEN);
+       
+       if (le16_to_cpu(a->algorithm) != WLAN_AUTH_OPEN) 
+               return  WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG;
+       
+       return WLAN_STATUS_SUCCESS;
+}
+
+static short probe_rq_parse(struct rtllib_device *ieee, struct sk_buff *skb, u8 *src)
+{
+       u8 *tag;
+       u8 *skbend;
+       u8 *ssid=NULL;
+       u8 ssidlen = 0;
+       
+       struct rtllib_hdr_3addr   *header =
+               (struct rtllib_hdr_3addr   *) skb->data;
+       
+       if (skb->len < sizeof (struct rtllib_hdr_3addr  )) 
+               return -1; /* corrupted */
+        if((memcmp(header->addr3,ieee->current_network.bssid,ETH_ALEN) != 0)&&
+                (memcmp(header->addr3,"\xff\xff\xff\xff\xff\xff",ETH_ALEN) != 0)) {
+            return -1;
+        }
+
+        if(memcmp(header->addr3,ieee->current_network.bssid,ETH_ALEN) == 0) {
+        }
+       
+        if(memcmp(header->addr3,"\xff\xff\xff\xff\xff\xff",ETH_ALEN) == 0) {
+        }
+       memcpy(src,header->addr2, ETH_ALEN);
+       
+       skbend = (u8*)skb->data + skb->len;
+       
+       tag = skb->data + sizeof (struct rtllib_hdr_3addr  );
+       
+       while (tag+1 < skbend){
+               if (*tag == 0){ 
+                       ssid = tag+2;
+                       ssidlen = *(tag+1);
+                       break;
+               }
+               tag++; /* point to the len field */
+               tag = tag + *(tag); /* point to the last data byte of the tag */
+               tag++; /* point to the next tag */
+       }
+       
+       if (ssidlen == 0) return 1;
+       
+       if (!ssid) return 1; /* ssid not found in tagged param */
+       return (!strncmp(ssid, ieee->current_network.ssid, ssidlen));
+               
+}
+
+int assoc_rq_parse(struct sk_buff *skb,u8* dest)
+{
+       struct rtllib_assoc_request_frame *a;
+       
+       if (skb->len < (sizeof(struct rtllib_assoc_request_frame) - 
+               sizeof(struct rtllib_info_element))) { 
+               
+               RTLLIB_DEBUG_MGMT("invalid len in auth request:%d \n", skb->len);
+               return -1;
+       }
+       
+       a = (struct rtllib_assoc_request_frame*) skb->data;
+               
+       memcpy(dest,a->header.addr2,ETH_ALEN);
+       
+       return 0;
+}
+
+static inline u16 assoc_parse(struct rtllib_device *ieee, struct sk_buff *skb, int *aid)
+{
+       struct rtllib_assoc_response_frame *response_head;
+       u16 status_code;
+
+       if (skb->len <  sizeof(struct rtllib_assoc_response_frame)){ 
+               RTLLIB_DEBUG_MGMT("invalid len in auth resp: %d\n", skb->len);
+               return 0xcafe;
+       }
+       
+       response_head = (struct rtllib_assoc_response_frame*) skb->data;
+       *aid = le16_to_cpu(response_head->aid) & 0x3fff;
+
+       status_code = le16_to_cpu(response_head->status);
+       if((status_code==WLAN_STATUS_ASSOC_DENIED_RATES || \
+          status_code==WLAN_STATUS_CAPS_UNSUPPORTED)&&
+          ((ieee->mode == IEEE_G) && 
+           (ieee->current_network.mode == IEEE_N_24G) &&
+            (ieee->AsocRetryCount++ < (RT_ASOC_RETRY_LIMIT-1)))) {
+                 ieee->pHTInfo->IOTAction |= HT_IOT_ACT_PURE_N_MODE;
+       }else {
+                ieee->AsocRetryCount = 0;
+       }
+
+       return le16_to_cpu(response_head->status);
+}
+
+void rtllib_rx_probe_rq(struct rtllib_device *ieee, struct sk_buff *skb)
+{
+       u8 dest[ETH_ALEN];
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+       struct sta_info *psta = NULL;
+#endif
+       ieee->softmac_stats.rx_probe_rq++;
+       if (probe_rq_parse(ieee, skb, dest) > 0){
+               ieee->softmac_stats.tx_probe_rs++;
+               rtllib_resp_to_probe(ieee, dest);
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+               if(ieee->iw_mode == IW_MODE_ADHOC){
+                       psta = GetStaInfo(ieee, dest);
+                       if(NULL != psta)
+                               psta->LastActiveTime = jiffies;
+               }
+#endif
+       }
+}
+#ifdef _RTL8192_EXT_PATCH_
+extern void rtllib_rx_auth_rq(struct rtllib_device *ieee, struct sk_buff *skb)
+#else
+static inline void
+rtllib_rx_auth_rq(struct rtllib_device *ieee, struct sk_buff *skb)
+#endif
+{
+       u8 dest[ETH_ALEN];
+       int status;
+       ieee->softmac_stats.rx_auth_rq++;
+       
+       if ((status = auth_rq_parse(skb, dest))!= -1){
+               rtllib_resp_to_auth(ieee, status, dest);
+       }
+       
+}
+
+static inline void
+rtllib_rx_assoc_rq(struct rtllib_device *ieee, struct sk_buff *skb)
+{
+       
+       u8 dest[ETH_ALEN];
+       
+       ieee->softmac_stats.rx_ass_rq++;
+       if (assoc_rq_parse(skb,dest) != -1){
+               rtllib_resp_to_assoc_rq(ieee, dest);
+       }
+       
+       printk(KERN_INFO"New client associated: "MAC_FMT"\n", MAC_ARG(dest));
+       #if 0
+       spin_lock_irqsave(&ieee->lock,flags);
+       add_associate(ieee,dest);
+       spin_unlock_irqrestore(&ieee->lock,flags);
+       #endif
+}
+
+
+void rtllib_sta_ps_send_null_frame(struct rtllib_device *ieee, short pwr)
+{
+       
+       struct sk_buff *buf = rtllib_null_func(ieee, pwr);
+       
+       if (buf)
+               softmac_ps_mgmt_xmit(buf, ieee);
+
+} 
+
+void rtllib_sta_ps_send_pspoll_frame(struct rtllib_device *ieee)
+{
+       
+       struct sk_buff *buf = rtllib_pspoll_func(ieee);
+       
+       if (buf)
+               softmac_ps_mgmt_xmit(buf, ieee);
+
+} 
+
+short rtllib_sta_ps_sleep(struct rtllib_device *ieee, u32 *time_h, u32 *time_l)
+{      
+       int timeout = ieee->ps_timeout;
+       u8 dtim;
+       PRT_POWER_SAVE_CONTROL  pPSC = (PRT_POWER_SAVE_CONTROL)(&(ieee->PowerSaveControl));
+       /*if(ieee->ps == RTLLIB_PS_DISABLED ||
+               ieee->iw_mode != IW_MODE_INFRA || 
+               ieee->state != RTLLIB_LINKED)
+               
+               return 0;
+       */
+
+       if(ieee->LPSDelayCnt)
+       {
+               ieee->LPSDelayCnt --;
+               return 0;
+       }
+               
+       dtim = ieee->current_network.dtim_data;
+       if(!(dtim & RTLLIB_DTIM_VALID))
+               return 0;
+       timeout = ieee->current_network.beacon_interval; 
+       ieee->current_network.dtim_data = RTLLIB_DTIM_INVALID;
+       /* there's no need to nofity AP that I find you buffered with broadcast packet */
+       if(dtim & (RTLLIB_DTIM_UCAST & ieee->ps))
+               return 2;
+       
+       if(!time_after(jiffies, ieee->dev->trans_start + MSECS(timeout))){
+               return 0;
+       }
+       if(!time_after(jiffies, ieee->last_rx_ps_time + MSECS(timeout))){
+               return 0;
+       }
+       if((ieee->softmac_features & IEEE_SOFTMAC_SINGLE_QUEUE ) &&
+               (ieee->mgmt_queue_tail != ieee->mgmt_queue_head))
+               return 0;
+       
+       if(time_l){
+               if(ieee->bAwakePktSent == true) {
+                       pPSC->LPSAwakeIntvl = 1;
+               } else {
+                       u8              MaxPeriod = 1;
+
+                       if(pPSC->LPSAwakeIntvl == 0)
+                               pPSC->LPSAwakeIntvl = 1;
+                       if(pPSC->RegMaxLPSAwakeIntvl == 0) 
+                               MaxPeriod = 1; 
+                       else if(pPSC->RegMaxLPSAwakeIntvl == 0xFF) 
+                               MaxPeriod = ieee->current_network.dtim_period;
+                       else
+                               MaxPeriod = pPSC->RegMaxLPSAwakeIntvl;
+                       pPSC->LPSAwakeIntvl = (pPSC->LPSAwakeIntvl >= MaxPeriod) ? MaxPeriod : (pPSC->LPSAwakeIntvl + 1);
+               }
+               {
+                       u8 LPSAwakeIntvl_tmp = 0;
+                       u8 period = ieee->current_network.dtim_period;
+                       u8 count = ieee->current_network.tim.tim_count;
+                       if(count == 0 ) {
+                               if(pPSC->LPSAwakeIntvl > period)
+                                       LPSAwakeIntvl_tmp = period + (pPSC->LPSAwakeIntvl - period) -((pPSC->LPSAwakeIntvl-period)%period);
+                               else
+                                       LPSAwakeIntvl_tmp = pPSC->LPSAwakeIntvl;
+
+                       } else {
+                               if(pPSC->LPSAwakeIntvl > ieee->current_network.tim.tim_count)
+                                       LPSAwakeIntvl_tmp = count + (pPSC->LPSAwakeIntvl - count) -((pPSC->LPSAwakeIntvl-count)%period);
+                               else
+                                       LPSAwakeIntvl_tmp = pPSC->LPSAwakeIntvl;
+                       }
+               
+               *time_l = ieee->current_network.last_dtim_sta_time[0] 
+                       + MSECS(ieee->current_network.beacon_interval * LPSAwakeIntvl_tmp); 
+       }
+       }
+       
+       if(time_h){
+#ifdef _RTL8192_EXT_PATCH_
+               if(time_l && *time_l < ieee->current_network.last_dtim_sta_time[0])
+                       *time_h =1;
+               else
+                       *time_h =0;
+#else
+               *time_h = ieee->current_network.last_dtim_sta_time[1];
+               if(time_l && *time_l < ieee->current_network.last_dtim_sta_time[0])
+                       *time_h += 1;
+#endif
+       }
+       
+       return 1;
+       
+       
+}
+
+inline void rtllib_sta_ps(struct rtllib_device *ieee)
+{
+
+       u32 th,tl;
+       short sleep;
+       
+       unsigned long flags,flags2;
+       
+       spin_lock_irqsave(&ieee->lock, flags);
+       
+       if((ieee->ps == RTLLIB_PS_DISABLED ||
+               ieee->iw_mode != IW_MODE_INFRA || 
+               ieee->state != RTLLIB_LINKED)){
+               
+               printk("=====>%s(): no need to ps,wake up!! ieee->ps is %d,ieee->iw_mode is %d,ieee->state is %d\n",
+                       __FUNCTION__,ieee->ps,ieee->iw_mode,ieee->state);
+               spin_lock_irqsave(&ieee->mgmt_tx_lock, flags2);
+               
+               rtllib_sta_wakeup(ieee, 1);     
+               
+               spin_unlock_irqrestore(&ieee->mgmt_tx_lock, flags2);
+       }
+       
+       sleep = rtllib_sta_ps_sleep(ieee,&th, &tl);
+       /* 2 wake, 1 sleep, 0 do nothing */
+       if(sleep == 0)
+       {
+               goto out;
+       }
+       if(sleep == 1){
+               if(ieee->sta_sleep == 1){
+                       ieee->enter_sleep_state(ieee->dev,th,tl);
+               }
+               
+               else if(ieee->sta_sleep == 0){
+                       spin_lock_irqsave(&ieee->mgmt_tx_lock, flags2);
+                       
+                       if(ieee->ps_is_queue_empty(ieee->dev)){
+                               ieee->sta_sleep = 2;
+                               ieee->ack_tx_to_ieee = 1;
+                               rtllib_sta_ps_send_null_frame(ieee,1);
+                               ieee->ps_th = th;
+                               ieee->ps_tl = tl;
+                       }               
+                       spin_unlock_irqrestore(&ieee->mgmt_tx_lock, flags2);
+                       
+               }
+               
+               ieee->bAwakePktSent = false;
+               
+       }else if(sleep == 2){
+               spin_lock_irqsave(&ieee->mgmt_tx_lock, flags2);
+                       
+               rtllib_sta_wakeup(ieee,1);
+               
+               spin_unlock_irqrestore(&ieee->mgmt_tx_lock, flags2);
+       }
+
+out:   
+       spin_unlock_irqrestore(&ieee->lock, flags);
+       
+}
+
+void rtllib_sta_wakeup(struct rtllib_device *ieee, short nl)
+{
+       if(ieee->sta_sleep == 0){
+               if(nl){
+                       if(ieee->pHTInfo->IOTAction & HT_IOT_ACT_NULL_DATA_POWER_SAVING)
+                       {
+                       ieee->ack_tx_to_ieee = 1;
+                       rtllib_sta_ps_send_null_frame(ieee, 0);
+               }
+                       else 
+                       {
+                               ieee->ack_tx_to_ieee = 1;
+                               rtllib_sta_ps_send_pspoll_frame(ieee);
+                       }
+               }
+               return;
+               
+       }
+       
+       if(ieee->sta_sleep == 1) 
+               ieee->sta_wake_up(ieee->dev);
+       if(nl){
+/*             
+               ieee->ack_tx_to_ieee = 1;
+               rtllib_sta_ps_send_null_frame(ieee, 0);
+*/
+                       if(ieee->pHTInfo->IOTAction & HT_IOT_ACT_NULL_DATA_POWER_SAVING)
+                       {
+                               ieee->ack_tx_to_ieee = 1;
+                               rtllib_sta_ps_send_null_frame(ieee, 0);
+                       }
+                       else 
+                       {
+                               ieee->ack_tx_to_ieee = 1;
+                       ieee->polling = true;
+                               rtllib_sta_ps_send_pspoll_frame(ieee);
+                       }
+
+       } else {
+               ieee->sta_sleep = 0;
+               ieee->polling = false;
+       }
+}
+
+void rtllib_ps_tx_ack(struct rtllib_device *ieee, short success)
+{
+       unsigned long flags,flags2;
+       
+       spin_lock_irqsave(&ieee->lock, flags);
+       
+       if(ieee->sta_sleep == 2){
+               /* Null frame with PS bit set */
+               if(success){
+                       ieee->sta_sleep = 1;
+                       ieee->enter_sleep_state(ieee->dev,ieee->ps_th,ieee->ps_tl);
+               }
+               /* if the card report not success we can't be sure the AP
+                * has not RXed so we can't assume the AP believe us awake
+                */
+       } else {/* 21112005 - tx again null without PS bit if lost */
+       
+               if((ieee->sta_sleep == 0) && !success){
+                       spin_lock_irqsave(&ieee->mgmt_tx_lock, flags2);
+                       if(ieee->pHTInfo->IOTAction & HT_IOT_ACT_NULL_DATA_POWER_SAVING)
+                       {
+                       rtllib_sta_ps_send_null_frame(ieee, 0);
+                       }
+                       else 
+                       {
+                               rtllib_sta_ps_send_pspoll_frame(ieee);
+                       }
+                       spin_unlock_irqrestore(&ieee->mgmt_tx_lock, flags2);
+               }
+       }
+       spin_unlock_irqrestore(&ieee->lock, flags);
+}
+#ifdef _RTL8192_EXT_PATCH_
+void rtllib_process_action(struct rtllib_device* ieee, struct sk_buff* skb,
+                             struct rtllib_rx_stats *rx_stats)
+#else
+void rtllib_process_action(struct rtllib_device* ieee, struct sk_buff* skb)
+#endif
+{
+       struct rtllib_hdr* header = (struct rtllib_hdr*)skb->data;
+       u8* act = rtllib_get_payload(header);
+       u8 category = 0;
+
+       if (act == NULL) {
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, "error to get payload of action frame\n");
+               return;
+       }
+#ifdef _RTL8192_EXT_PATCH_
+       if ((ieee->iw_mode != IW_MODE_MESH) && (ieee->iw_mode != IW_MODE_INFRA)) {
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, "not in mesh mode\n");
+               return;
+       }
+#endif
+
+       category = *act;
+       act ++;
+       switch (category) {
+               case ACT_CAT_BA:
+               switch (*act) {
+               case ACT_ADDBAREQ:
+                       rtllib_rx_ADDBAReq(ieee, skb);
+                       break;
+               case ACT_ADDBARSP:
+                       rtllib_rx_ADDBARsp(ieee, skb);
+                       break;
+               case ACT_DELBA:
+                       rtllib_rx_DELBA(ieee, skb);
+                       break;
+               }
+               break;
+#ifdef _RTL8192_EXT_PATCH_      
+       case ACT_CAT_MESH_PEERLINK_MGNT:
+               if(ieee->iw_mode != IW_MODE_MESH) {
+                       RTLLIB_DEBUG(RTLLIB_DL_ERR, "peerlink received not in mesh mode\n");
+                       return;
+               }
+               switch (*act) {
+               case ACT_PEERLINK_OPEN:
+                       if (ieee->ext_patch_rtllib_rx_frame_softmac_on_peerlink_open) {
+                               ieee->ext_patch_rtllib_rx_frame_softmac_on_peerlink_open(ieee, skb, rx_stats);
+                       }
+                       break;
+               case ACT_PEERLINK_CONFIRM:
+                       if (ieee->ext_patch_rtllib_rx_frame_softmac_on_peerlink_confirm) {
+                               ieee->ext_patch_rtllib_rx_frame_softmac_on_peerlink_confirm(ieee, skb);
+                       }
+                       break;
+               case ACT_PEERLINK_CLOSE:
+                       if ( ieee->ext_patch_rtllib_rx_frame_softmac_on_peerlink_close) {
+                               ieee->ext_patch_rtllib_rx_frame_softmac_on_peerlink_close(ieee, skb);
+                       }
+                       break;
+               }
+               break;
+       case ACT_CAT_MESH_LINK_METRIC:
+               if (ieee->iw_mode != IW_MODE_MESH) {
+                       RTLLIB_DEBUG(RTLLIB_DL_ERR, "link metric received not in mesh mode\n");
+                       return;
+               }
+               switch (*act) {
+               case ACT_LINKMETRIC_REQ:
+                       if (ieee->ext_patch_rtllib_rx_frame_softmac_on_linkmetric_req) {
+                               ieee->ext_patch_rtllib_rx_frame_softmac_on_linkmetric_req(
+                                               ieee, skb);
+                       }
+                       break;
+               case ACT_LINKMETRIC_RSP:
+                       if (ieee->ext_patch_rtllib_rx_frame_softmac_on_linkmetric_report) {
+                               ieee->ext_patch_rtllib_rx_frame_softmac_on_linkmetric_report(
+                                               ieee, skb);
+                       }
+                       break;
+               }
+
+               break;
+       case ACT_CAT_MESH_PATH_SELECT:
+               if (ieee->iw_mode != IW_MODE_MESH) {
+                       RTLLIB_DEBUG(RTLLIB_DL_ERR, "not in mesh mode\n");
+                       return;
+               }
+
+               switch (*act) {
+               case ACT_PATH_REQ:
+                       if( ieee->ext_patch_rtllib_rx_frame_softmac_on_pathselect_preq) {
+                               ieee->ext_patch_rtllib_rx_frame_softmac_on_pathselect_preq(
+                                               ieee, skb, rx_stats);
+                       }
+                       break;
+               case ACT_PATH_REPLY:
+                       if(ieee->ext_patch_rtllib_rx_frame_softmac_on_pathselect_prep) {
+                               ieee->ext_patch_rtllib_rx_frame_softmac_on_pathselect_prep(
+                                               ieee, skb, rx_stats);
+                       }
+                       break;
+               case ACT_PATH_ERR:
+                       if(ieee->ext_patch_rtllib_rx_frame_softmac_on_pathselect_perr) {
+                               ieee->ext_patch_rtllib_rx_frame_softmac_on_pathselect_perr(
+                                               ieee, skb, rx_stats);
+                       }
+                       break;
+               case ACT_RANN:
+                       if(ieee->ext_patch_rtllib_rx_frame_softmac_on_pathselect_rann) {
+                               ieee->ext_patch_rtllib_rx_frame_softmac_on_pathselect_rann(
+                                               ieee, skb, rx_stats);
+                       }
+                       break;
+               }
+               break;
+       case ACT_CAT_MESH_INTERWORKING:
+               if (ieee->iw_mode != IW_MODE_MESH) {
+                       RTLLIB_DEBUG(RTLLIB_DL_ERR, "not in mesh mode\n");
+                       return;
+               }
+               if (*act == 0) {
+                       if (ieee->ext_patch_rtllib_rx_frame_softmac_on_pathselect_pann) {
+                               ieee->ext_patch_rtllib_rx_frame_softmac_on_pathselect_pann(
+                                               ieee, skb, rx_stats);
+                       }
+               }
+               break;
+#endif
+               default:
+                       break;
+       }
+       return;
+}
+inline int
+rtllib_rx_frame_softmac(struct rtllib_device *ieee, struct sk_buff *skb,
+                       struct rtllib_rx_stats *rx_stats, u16 type,
+                       u16 stype)
+{
+       struct rtllib_hdr_3addr *header = (struct rtllib_hdr_3addr *) skb->data;
+       u8* ies;
+       u16 errcode;
+       u8* challenge;
+       int chlen=0;
+       int aid;
+#ifdef _RTL8192_EXT_PATCH_
+       u8 mesh_bssid[6] = {0,0,0,0,0,0};
+#endif
+       struct rtllib_assoc_response_frame *assoc_resp;
+       bool bSupportNmode = true, bHalfSupportNmode = false; 
+       
+#ifdef _RTL8192_EXT_PATCH_
+       if((!ieee->proto_started)&&(!ieee->mesh_started))
+#else
+       if(!ieee->proto_started)
+#endif
+               return 0;
+               
+       switch (WLAN_FC_GET_STYPE(header->frame_ctl)) {
+       
+               case RTLLIB_STYPE_ASSOC_RESP:
+               case RTLLIB_STYPE_REASSOC_RESP:
+               
+                       RTLLIB_DEBUG_MGMT("received [RE]ASSOCIATION RESPONSE (%d)\n",
+                                       WLAN_FC_GET_STYPE(header->frame_ctl));
+                       if ((ieee->softmac_features & IEEE_SOFTMAC_ASSOCIATE) &&
+                               ieee->state == RTLLIB_ASSOCIATING_AUTHENTICATED && 
+#ifdef _RTL8192_EXT_PATCH_
+                               ((ieee->iw_mode == IW_MODE_INFRA) || 
+                               (ieee->iw_mode == IW_MODE_MESH && ieee->only_mesh == 0)))
+#else
+                               (ieee->iw_mode == IW_MODE_INFRA)) 
+#endif
+                       {
+                               
+                               if (0 == (errcode=assoc_parse(ieee,skb, &aid))){
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13))
+                                       struct rtllib_network *network = kzalloc(sizeof(struct rtllib_network), GFP_ATOMIC);
+#else
+                                       struct rtllib_network *network = kmalloc(sizeof(*network), GFP_KERNEL);
+#endif
+                                       if (!network) {
+                                               return 1;
+                                       }
+                                       memset(network,0,sizeof(*network));
+                                       ieee->state=RTLLIB_LINKED;
+                                       ieee->assoc_id = aid;
+                                       ieee->softmac_stats.rx_ass_ok++;
+                                       /* station support qos */
+                                       /* Let the register setting defaultly with Legacy station */
+                                       assoc_resp = (struct rtllib_assoc_response_frame*)skb->data;
+                                       if(ieee->qos_support) {
+                                               if (rtllib_parse_info_param(ieee,assoc_resp->info_element,\
+                                                                       rx_stats->len - sizeof(*assoc_resp),\
+                                                                       network,rx_stats)){
+                                                       kfree(network);
+                                                       return 1;
+                                               }
+                                               else
+                                               {       
+                                                       memcpy(ieee->pHTInfo->PeerHTCapBuf, network->bssht.bdHTCapBuf, network->bssht.bdHTCapLen);
+                                                       memcpy(ieee->pHTInfo->PeerHTInfoBuf, network->bssht.bdHTInfoBuf, network->bssht.bdHTInfoLen);
+                                               }
+                                               if (ieee->handle_assoc_response != NULL)
+                                                       ieee->handle_assoc_response(ieee->dev, (struct rtllib_assoc_response_frame*)header, network);
+                                               kfree(network);
+                                       }
+
+                                       if(ieee->assocresp_ies){
+                                               kfree(ieee->assocresp_ies);
+                                               ieee->assocresp_ies = NULL;
+                                       }
+                                       ies = &(assoc_resp->info_element[0].id);
+                                       ieee->assocresp_ies_len = (skb->data + skb->len) - ies;
+                                       ieee->assocresp_ies = kmalloc(ieee->assocresp_ies_len, GFP_ATOMIC);
+                                       if (ieee->assocresp_ies)
+                                               memcpy(ieee->assocresp_ies, ies, ieee->assocresp_ies_len);
+                                       else{
+                                               printk("%s()Warning: can't alloc memory for assocresp_ies\n", __func__);
+                                               ieee->assocresp_ies_len = 0;
+                                       }       
+#ifdef RTL8192S_WAPI_SUPPORT
+                                       {
+                                               PRT_WAPI_T pWapiInfo = &(ieee->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 WapiAEMultiCastPNInitialValueSrc[16] = {0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;   
+                                               if ((ieee->WapiSupport) && (ieee->wapiInfo.bWapiEnable))
+                                               {
+                                                       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);
+                                                       WAPI_TRACE(WAPI_API, "%s(): New WAPI STA ("MAC_FMT")!!\n",__FUNCTION__,MAC_ARG(ieee->current_network.bssid));
+                                                       memcpy(pWapiSta->PeerMacAddr,ieee->current_network.bssid,6);
+                                                       memcpy(pWapiSta->lastRxMulticastPN, WapiAEMultiCastPNInitialValueSrc, 16);
+                                                       memcpy(pWapiSta->lastRxUnicastPN, WapiAEPNInitialValueSrc, 16);
+                                                       pWapiInfo->bFirstAuthentiateInProgress= true;
+                                                       pWapiInfo->assoRspWapiIE[0] = MFIE_TYPE_WAPI;
+                                                       pWapiInfo->assoRspWapiIE[1] = network->wapi_ie_len;
+                                                       pWapiInfo->assoRspWapiIELength = network->wapi_ie_len+2;
+                                                       memcpy(pWapiInfo->assoRspWapiIE+2,network->wapi_ie,network->wapi_ie_len);
+                                               }
+                                       }
+#endif 
+                                       rtllib_associate_complete(ieee);
+                               } else {
+                                       /* aid could not been allocated */
+                                       ieee->softmac_stats.rx_ass_err++;
+                                       printk(
+                                               "Association response status code 0x%x\n",
+                                               errcode);
+                                       RTLLIB_DEBUG_MGMT(
+                                               "Association response status code 0x%x\n",
+                                               errcode);
+                                       if(ieee->AsocRetryCount < RT_ASOC_RETRY_LIMIT) {
+                                               queue_delayed_work_rsl(ieee->wq, &ieee->associate_procedure_wq, 0);
+                                       } else {
+                                               rtllib_associate_abort(ieee); 
+                                       }
+                               }
+                       }
+                       break;
+               
+               case RTLLIB_STYPE_ASSOC_REQ:
+               case RTLLIB_STYPE_REASSOC_REQ:
+               
+                       if ((ieee->softmac_features & IEEE_SOFTMAC_ASSOCIATE) &&
+                               ieee->iw_mode == IW_MODE_MASTER)
+                                       
+                               rtllib_rx_assoc_rq(ieee, skb);
+                       break;
+                       
+               case RTLLIB_STYPE_AUTH:
+#ifdef _RTL8192_EXT_PATCH_
+                       if((memcmp(header->addr3,mesh_bssid,6) == 0) && (ieee->iw_mode == IW_MODE_MESH) && ieee->ext_patch_rtllib_rx_frame_softmac_on_auth && ieee->mesh_started)
+                               ieee->ext_patch_rtllib_rx_frame_softmac_on_auth(ieee, skb, rx_stats);
+                       else
+#endif
+                       if (ieee->softmac_features & IEEE_SOFTMAC_ASSOCIATE){
+                               if (ieee->state == RTLLIB_ASSOCIATING_AUTHENTICATING && 
+#ifdef _RTL8192_EXT_PATCH_
+                                       ((ieee->iw_mode == IW_MODE_INFRA)||
+                                       ((ieee->iw_mode == IW_MODE_MESH) && (ieee->only_mesh == 0))))
+#else
+                                       (ieee->iw_mode == IW_MODE_INFRA))
+#endif
+                               {
+                                               RTLLIB_DEBUG_MGMT("Received authentication response");
+                                               
+                                               if (0 == (errcode=auth_parse(skb, &challenge, &chlen))){
+                                                       if(ieee->open_wep || !challenge){
+                                                               ieee->state = RTLLIB_ASSOCIATING_AUTHENTICATED;
+                                                               ieee->softmac_stats.rx_auth_rs_ok++;
+                                                               if(!(ieee->pHTInfo->IOTAction&HT_IOT_ACT_PURE_N_MODE))
+                                                               {
+                                                                       if (!ieee->GetNmodeSupportBySecCfg(ieee->dev))
+                                                                       {
+                                                                               if(IsHTHalfNmodeAPs(ieee))
+                                                                               {       
+                                                                                       bSupportNmode = true;
+                                                                                       bHalfSupportNmode = true;
+                                                                               }
+                                                                               else
+                                                                               {
+                                                                                       bSupportNmode = false;
+                                                                                       bHalfSupportNmode = false;
+                                                                               }
+                                                                       printk("==========>to link with AP using SEC(%d, %d)", bSupportNmode, bHalfSupportNmode);
+                                                                       }
+                                                               }                                                               
+                                                               /* Dummy wirless mode setting to avoid encryption issue */
+                                                               if(bSupportNmode) {
+                                                                       ieee->SetWirelessMode(ieee->dev, \
+                                                                                       ieee->current_network.mode);
+                                                               }else{
+                                                                       /*TODO*/
+                                                                       ieee->SetWirelessMode(ieee->dev, IEEE_G);
+                                                               }
+
+                                                               if (ieee->current_network.mode == IEEE_N_24G && bHalfSupportNmode == true)
+                                                               {
+                                                                       printk("===============>entern half N mode\n");
+                                                                       ieee->bHalfWirelessN24GMode = true;
+                                                               }
+                                                               else
+                                                                       ieee->bHalfWirelessN24GMode = false;
+                                                               
+                                                               rtllib_associate_step2(ieee);
+                                                       }else{
+                                                               rtllib_auth_challenge(ieee, challenge, chlen);
+                                                       }
+                                               }else{
+                                                       ieee->softmac_stats.rx_auth_rs_err++;
+                                                       RTLLIB_DEBUG_MGMT("Authentication respose status code 0x%x",errcode);
+
+                                                       printk("Authentication respose status code 0x%x",errcode);
+                                                       rtllib_associate_abort(ieee);
+                                               }
+                                               
+                                       }else if (ieee->iw_mode == IW_MODE_MASTER){
+                                               rtllib_rx_auth_rq(ieee, skb);
+                                       }
+                               }
+                       break;
+#if 0                          
+               case RTLLIB_STYPE_PROBE_REQ:
+
+                       if ((ieee->softmac_features & IEEE_SOFTMAC_PROBERS) && 
+                               ((ieee->iw_mode == IW_MODE_ADHOC || 
+                               ieee->iw_mode == IW_MODE_MASTER) &&
+                               ieee->state == RTLLIB_LINKED)){
+                               rtllib_rx_probe_rq(ieee, skb);
+                       }
+                       break;
+#endif                 
+               case RTLLIB_STYPE_DISASSOC:
+               case RTLLIB_STYPE_DEAUTH:
+
+                       if(memcmp(header->addr3, ieee->current_network.bssid, ETH_ALEN) != 0)
+                               break;
+                       /* FIXME for now repeat all the association procedure 
+                       * both for disassociation and deauthentication
+                       */
+                       if ((ieee->softmac_features & IEEE_SOFTMAC_ASSOCIATE) &&
+                               ieee->state == RTLLIB_LINKED && 
+#ifdef _RTL8192_EXT_PATCH_
+                               ((ieee->iw_mode == IW_MODE_INFRA) ||
+                               ((ieee->iw_mode == IW_MODE_MESH) && (ieee->only_mesh == 0))))
+#else
+                               (ieee->iw_mode == IW_MODE_INFRA))
+#endif
+                       {
+                               printk("==========>received disassoc/deauth(%x) frame, reason code:%x\n",WLAN_FC_GET_STYPE(header->frame_ctl), ((struct rtllib_disassoc*)skb->data)->reason);   
+                               ieee->state = RTLLIB_ASSOCIATING;
+                               ieee->softmac_stats.reassoc++;
+                               ieee->is_roaming = true;
+                               ieee->LinkDetectInfo.bBusyTraffic = false;
+                               rtllib_disassociate(ieee);
+                               RemovePeerTS(ieee, header->addr2);      
+                               if(ieee->LedControlHandler != NULL)
+                                       ieee->LedControlHandler(ieee->dev, LED_CTL_START_TO_LINK); 
+                               queue_delayed_work_rsl(ieee->wq, &ieee->associate_procedure_wq, 5);
+                       }
+                       break;
+               case RTLLIB_STYPE_MANAGE_ACT:
+#ifdef _RTL8192_EXT_PATCH_
+                       rtllib_process_action(ieee,skb,rx_stats);
+#else
+                       rtllib_process_action(ieee,skb);
+#endif
+                       break;
+               default: 
+                       return -1;
+                       break;
+       }
+       
+       return 0;
+}
+
+/* following are for a simplier TX queue management.
+ * Instead of using netif_[stop/wake]_queue the driver
+ * will uses these two function (plus a reset one), that
+ * will internally uses the kernel netif_* and takes
+ * care of the ieee802.11 fragmentation.
+ * So the driver receives a fragment per time and might
+ * call the stop function when it want without take care
+ * to have enought room to TX an entire packet.
+ * This might be useful if each fragment need it's own
+ * descriptor, thus just keep a total free memory > than
+ * the max fragmentation treshold is not enought.. If the
+ * ieee802.11 stack passed a TXB struct then you needed  
+ * to keep N free descriptors where 
+ * N = MAX_PACKET_SIZE / MIN_FRAG_TRESHOLD
+ * In this way you need just one and the 802.11 stack
+ * will take care of buffering fragments and pass them to 
+ * to the driver later, when it wakes the queue.
+ */ 
+void rtllib_softmac_xmit(struct rtllib_txb *txb, struct rtllib_device *ieee)
+{
+
+       unsigned int queue_index = txb->queue_index;
+       unsigned long flags;
+       int  i;
+       cb_desc *tcb_desc = NULL;
+       unsigned long queue_len = 0;
+
+       spin_lock_irqsave(&ieee->lock,flags);
+
+       /* called with 2nd parm 0, no tx mgmt lock required */
+       rtllib_sta_wakeup(ieee,0);
+
+       /* update the tx status */
+       tcb_desc = (cb_desc *)(txb->fragments[0]->cb + MAX_DEV_ADDR_SIZE);
+       if(tcb_desc->bMulticast) {
+               ieee->stats.multicast++;
+       }
+#if 1
+       /* if xmit available, just xmit it immediately, else just insert it to the wait queue */
+       for(i = 0; i < txb->nr_frags; i++) {
+#ifdef USB_TX_DRIVER_AGGREGATION_ENABLE
+               queue_len = skb_queue_len(&ieee->skb_drv_aggQ[queue_index]);
+#else
+               queue_len = skb_queue_len(&ieee->skb_waitQ[queue_index]);
+#endif
+               if((queue_len  != 0) ||\
+                       (!ieee->check_nic_enough_desc(ieee->dev,queue_index))||\
+                      (ieee->queue_stop)) {
+                       /* insert the skb packet to the wait queue */
+                       /* as for the completion function, it does not need 
+                        * to check it any more.
+                        * */
+#ifdef WIFI_TEST
+                       if (1) 
+#else
+                       if(queue_len < 200)
+#endif
+                       {
+#ifdef USB_TX_DRIVER_AGGREGATION_ENABLE
+                               skb_queue_tail(&ieee->skb_drv_aggQ[queue_index], txb->fragments[i]);
+#else
+                               skb_queue_tail(&ieee->skb_waitQ[queue_index], txb->fragments[i]);
+#endif
+                       }else{
+                               kfree_skb(txb->fragments[i]);
+                       }
+               }else{
+                       ieee->softmac_data_hard_start_xmit(
+                                       txb->fragments[i],
+                                       ieee->dev,ieee->rate);
+               }
+       }       
+#endif
+       rtllib_txb_free(txb);
+
+       spin_unlock_irqrestore(&ieee->lock,flags);
+
+}
+
+/* called with ieee->lock acquired */
+void rtllib_resume_tx(struct rtllib_device *ieee)
+{
+       int i;
+       for(i = ieee->tx_pending.frag; i < ieee->tx_pending.txb->nr_frags; i++) {
+               
+               if (ieee->queue_stop){
+                       ieee->tx_pending.frag = i;
+                       return;
+               }else{
+               
+                       ieee->softmac_data_hard_start_xmit( 
+                               ieee->tx_pending.txb->fragments[i],
+                               ieee->dev,ieee->rate);
+                       ieee->stats.tx_packets++;
+               }
+       }
+       
+       
+       rtllib_txb_free(ieee->tx_pending.txb);
+       ieee->tx_pending.txb = NULL;
+}
+
+
+void rtllib_reset_queue(struct rtllib_device *ieee)
+{
+       unsigned long flags;
+       
+       spin_lock_irqsave(&ieee->lock,flags);
+       init_mgmt_queue(ieee);
+       if (ieee->tx_pending.txb){
+               rtllib_txb_free(ieee->tx_pending.txb);
+               ieee->tx_pending.txb = NULL;
+       }
+       ieee->queue_stop = 0;
+       spin_unlock_irqrestore(&ieee->lock,flags);
+
+}
+
+void rtllib_wake_queue(struct rtllib_device *ieee)
+{
+
+       unsigned long flags;
+       struct sk_buff *skb;
+       struct rtllib_hdr_3addr  *header;
+       
+       spin_lock_irqsave(&ieee->lock,flags);
+       if (! ieee->queue_stop) goto exit;
+       
+       ieee->queue_stop = 0;
+       
+       if(ieee->softmac_features & IEEE_SOFTMAC_SINGLE_QUEUE){
+               while (!ieee->queue_stop && (skb = dequeue_mgmt(ieee))){
+                       
+                       header = (struct rtllib_hdr_3addr  *) skb->data;
+                       
+                       header->seq_ctl = cpu_to_le16(ieee->seq_ctrl[0] << 4);
+
+                       if (ieee->seq_ctrl[0] == 0xFFF)
+                               ieee->seq_ctrl[0] = 0;
+                       else
+                               ieee->seq_ctrl[0]++;
+
+                       ieee->softmac_data_hard_start_xmit(skb,ieee->dev,ieee->basic_rate);
+               }
+       }
+       if (!ieee->queue_stop && ieee->tx_pending.txb)
+               rtllib_resume_tx(ieee);
+       
+       if (!ieee->queue_stop && netif_queue_stopped(ieee->dev)){
+               ieee->softmac_stats.swtxawake++;
+               netif_wake_queue(ieee->dev);
+       }
+       
+exit :
+       spin_unlock_irqrestore(&ieee->lock,flags);
+}
+
+
+void rtllib_stop_queue(struct rtllib_device *ieee)
+{
+
+       if (! netif_queue_stopped(ieee->dev)){
+               netif_stop_queue(ieee->dev);
+               ieee->softmac_stats.swtxstop++;
+       }
+       ieee->queue_stop = 1;
+       
+}
+
+
+inline void rtllib_randomize_cell(struct rtllib_device *ieee)
+{
+       
+       get_random_bytes(ieee->current_network.bssid, ETH_ALEN);
+       
+       /* an IBSS cell address must have the two less significant
+        * bits of the first byte = 2 
+        */
+       ieee->current_network.bssid[0] &= ~0x01;
+       ieee->current_network.bssid[0] |= 0x02;
+}
+
+/* called in user context only */
+void rtllib_start_master_bss(struct rtllib_device *ieee)
+{
+       ieee->assoc_id = 1;
+       
+       if (ieee->current_network.ssid_len == 0){
+               strncpy(ieee->current_network.ssid, 
+                       RTLLIB_DEFAULT_TX_ESSID,
+                       IW_ESSID_MAX_SIZE);
+                       
+               ieee->current_network.ssid_len = strlen(RTLLIB_DEFAULT_TX_ESSID);
+               ieee->ssid_set = 1;
+       }
+       
+       memcpy(ieee->current_network.bssid, ieee->dev->dev_addr, ETH_ALEN);
+        
+       ieee->set_chan(ieee->dev, ieee->current_network.channel);
+       ieee->state = RTLLIB_LINKED;
+#if defined (RTL8192S_WAPI_SUPPORT)
+       if ((ieee->WapiSupport) && (ieee->wapiInfo.bWapiEnable)){
+               WAPI_CreateEvent_Send(ieee, WAPI_EVENT_CONNECT, ieee->current_network.bssid, NULL, 0);
+       }
+#endif
+       ieee->link_change(ieee->dev);
+       notify_wx_assoc_event(ieee);
+       
+       if (ieee->data_hard_resume)
+               ieee->data_hard_resume(ieee->dev);
+       
+       netif_carrier_on(ieee->dev);
+}
+
+void rtllib_start_monitor_mode(struct rtllib_device *ieee)
+{
+       /* reset hardware status */
+       if(ieee->raw_tx){
+               if (ieee->data_hard_resume)
+                       ieee->data_hard_resume(ieee->dev);
+       
+               netif_carrier_on(ieee->dev);
+       }
+}
+
+void rtllib_start_ibss_wq(void *data)
+{
+       struct rtllib_device *ieee = container_of_dwork_rsl(data, struct rtllib_device, start_ibss_wq);
+       /* iwconfig mode ad-hoc will schedule this and return
+        * on the other hand this will block further iwconfig SET
+        * operations because of the wx_sem hold.
+        * Anyway some most set operations set a flag to speed-up
+        * (abort) this wq (when syncro scanning) before sleeping 
+        * on the semaphore
+        */
+       if(!ieee->proto_started){
+               printk("==========oh driver down return\n");
+               return;
+       }
+       down(&ieee->wx_sem);
+       
+       if (ieee->current_network.ssid_len == 0){
+               strcpy(ieee->current_network.ssid,RTLLIB_DEFAULT_TX_ESSID);
+               ieee->current_network.ssid_len = strlen(RTLLIB_DEFAULT_TX_ESSID);
+               ieee->ssid_set = 1;
+       } 
+       
+       ieee->state = RTLLIB_NOLINK;
+       /* check if we have this cell in our network list */
+       rtllib_softmac_check_all_nets(ieee);
+       
+
+       /* if not then the state is not linked. Maybe the user swithced to
+        * ad-hoc mode just after being in monitor mode, or just after
+        * being very few time in managed mode (so the card have had no
+        * time to scan all the chans..) or we have just run up the iface
+        * after setting ad-hoc mode. So we have to give another try..
+        * Here, in ibss mode, should be safe to do this without extra care
+        * (in bss mode we had to make sure no-one tryed to associate when
+        * we had just checked the ieee->state and we was going to start the
+        * scan) beacause in ibss mode the rtllib_new_net function, when
+        * finds a good net, just set the ieee->state to RTLLIB_LINKED,
+        * so, at worst, we waste a bit of time to initiate an unneeded syncro
+        * scan, that will stop at the first round because it sees the state
+        * associated.
+        */
+       if (ieee->state == RTLLIB_NOLINK)
+               rtllib_start_scan_syncro(ieee, 0);
+
+       /* the network definitively is not here.. create a new cell */
+       if (ieee->state == RTLLIB_NOLINK){
+               printk("creating new IBSS cell\n"); 
+               ieee->current_network.channel = ieee->IbssStartChnl;
+               if(!ieee->wap_set)
+                       rtllib_randomize_cell(ieee);
+               
+               if(ieee->modulation & RTLLIB_CCK_MODULATION){
+               
+                       ieee->current_network.rates_len = 4;
+                       
+                       ieee->current_network.rates[0] = RTLLIB_BASIC_RATE_MASK | RTLLIB_CCK_RATE_1MB;
+                       ieee->current_network.rates[1] = RTLLIB_BASIC_RATE_MASK | RTLLIB_CCK_RATE_2MB;
+                       ieee->current_network.rates[2] = RTLLIB_BASIC_RATE_MASK | RTLLIB_CCK_RATE_5MB;
+                       ieee->current_network.rates[3] = RTLLIB_BASIC_RATE_MASK | RTLLIB_CCK_RATE_11MB;
+                               
+               }else
+                       ieee->current_network.rates_len = 0;
+               
+               if(ieee->modulation & RTLLIB_OFDM_MODULATION){
+                       ieee->current_network.rates_ex_len = 8;
+                       
+                       /*ieee->current_network.rates_ex[0] = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_6MB;
+                       ieee->current_network.rates_ex[1] = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_9MB;
+                       ieee->current_network.rates_ex[2] = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_12MB;
+                       ieee->current_network.rates_ex[3] = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_18MB;
+                       ieee->current_network.rates_ex[4] = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_24MB;
+                       ieee->current_network.rates_ex[5] = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_36MB;
+                       ieee->current_network.rates_ex[6] = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_48MB;
+                       ieee->current_network.rates_ex[7] = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_54MB;*/
+
+                       ieee->current_network.rates_ex[0] = RTLLIB_OFDM_RATE_6MB;
+                       ieee->current_network.rates_ex[1] = RTLLIB_OFDM_RATE_9MB;
+                       ieee->current_network.rates_ex[2] = RTLLIB_OFDM_RATE_12MB;
+                       ieee->current_network.rates_ex[3] = RTLLIB_OFDM_RATE_18MB;
+                       ieee->current_network.rates_ex[4] = RTLLIB_OFDM_RATE_24MB;
+                       ieee->current_network.rates_ex[5] = RTLLIB_OFDM_RATE_36MB;
+                       ieee->current_network.rates_ex[6] = RTLLIB_OFDM_RATE_48MB;
+                       ieee->current_network.rates_ex[7] = RTLLIB_OFDM_RATE_54MB;
+                       
+                       ieee->rate = 108;
+               }else{
+                       ieee->current_network.rates_ex_len = 0;
+                       ieee->rate = 22;
+               }
+
+               ieee->current_network.QoS_Enable = 0;
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+#ifdef ADHOC_11N
+               ieee->SetWirelessMode(ieee->dev, ieee->mode);
+#else
+               ieee->SetWirelessMode(ieee->dev, IEEE_G);       
+#endif
+#else
+               ieee->SetWirelessMode(ieee->dev, IEEE_G);       
+#endif
+               ieee->current_network.mode = ieee->mode;
+               ieee->current_network.atim_window = 0;
+               ieee->current_network.capability = WLAN_CAPABILITY_IBSS;
+       }
+
+       printk("%s(): ieee->mode = %d\n", __FUNCTION__, ieee->mode);
+       if((ieee->mode == IEEE_N_24G) || (ieee->mode == IEEE_N_5G))
+               HTUseDefaultSetting(ieee);
+
+       ieee->SetHwRegHandler(ieee->dev, HW_VAR_MEDIA_STATUS, (u8 *)(&ieee->state));
+
+       ieee->state = RTLLIB_LINKED;
+#if defined (RTL8192S_WAPI_SUPPORT)
+       if ((ieee->WapiSupport) && (ieee->wapiInfo.bWapiEnable)){
+               WAPI_CreateEvent_Send(ieee, WAPI_EVENT_CONNECT, ieee->current_network.bssid, NULL, 0);
+       }
+#endif         
+#ifdef _RTL8192_EXT_PATCH_
+       ieee->set_chan(ieee->dev, ieee->current_network.channel);  
+#endif
+       ieee->link_change(ieee->dev);
+
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+       ieee->SetBeaconRelatedRegistersHandler(ieee->dev);
+
+       if(ieee->pHTInfo->bCurBW40MHz)
+               HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20_40, (ieee->current_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER);  
+       else
+               HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, (ieee->current_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER);  
+#else
+       HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, HT_EXTCHNL_OFFSET_NO_EXT);
+#endif
+       if(ieee->LedControlHandler != NULL)
+               ieee->LedControlHandler(ieee->dev,LED_CTL_LINK);
+       
+       rtllib_start_send_beacons(ieee);
+       
+       notify_wx_assoc_event(ieee);
+       
+       if (ieee->data_hard_resume)
+               ieee->data_hard_resume(ieee->dev);
+
+       netif_carrier_on(ieee->dev);
+       
+       up(&ieee->wx_sem);
+}
+
+inline void rtllib_start_ibss(struct rtllib_device *ieee)
+{
+       queue_delayed_work_rsl(ieee->wq, &ieee->start_ibss_wq, MSECS(150));
+}
+
+/* this is called only in user context, with wx_sem held */
+void rtllib_start_bss(struct rtllib_device *ieee)
+{
+       unsigned long flags;
+#ifdef ENABLE_DOT11D
+       if(IS_DOT11D_ENABLE(ieee) && !IS_COUNTRY_IE_VALID(ieee))
+       {
+               if(! ieee->bGlobalDomain)
+               {
+                       return;
+               }
+       }
+#endif 
+       /* check if we have already found the net we
+        * are interested in (if any).
+        * if not (we are disassociated and we are not
+        * in associating / authenticating phase) start the background scanning.
+        */
+       rtllib_softmac_check_all_nets(ieee);
+       
+       /* ensure no-one start an associating process (thus setting
+        * the ieee->state to rtllib_ASSOCIATING) while we
+        * have just cheked it and we are going to enable scan.
+        * The rtllib_new_net function is always called with
+        * lock held (from both rtllib_softmac_check_all_nets and
+        * the rx path), so we cannot be in the middle of such function
+        */
+       spin_lock_irqsave(&ieee->lock, flags);
+       
+       if (ieee->state == RTLLIB_NOLINK){// && (ieee->softmac_features & IEEE_SOFTMAC_SCAN)){
+               rtllib_start_scan(ieee);
+       }
+       spin_unlock_irqrestore(&ieee->lock, flags);
+}
+
+void rtllib_link_change_wq(void *data)
+{
+       struct rtllib_device *ieee = container_of_dwork_rsl(data, struct rtllib_device, link_change_wq);
+       ieee->link_change(ieee->dev);
+}
+/* called only in userspace context */
+void rtllib_disassociate(struct rtllib_device *ieee)
+{
+       netif_carrier_off(ieee->dev);
+       if (ieee->softmac_features & IEEE_SOFTMAC_TX_QUEUE)
+                       rtllib_reset_queue(ieee);
+       
+       if (ieee->data_hard_stop)
+                       ieee->data_hard_stop(ieee->dev);
+#ifdef ENABLE_DOT11D
+       if(IS_DOT11D_ENABLE(ieee))
+               Dot11d_Reset(ieee);
+#endif
+       ieee->state = RTLLIB_NOLINK;
+       ieee->is_set_key = false;
+       ieee->wap_set = 0;
+
+       queue_delayed_work_rsl(ieee->wq, &ieee->link_change_wq, 0);
+
+
+#ifndef FOR_ANDROID_X86
+       notify_wx_assoc_event(ieee);
+#endif
+#ifdef RTL8192S_WAPI_SUPPORT
+       printk("==============> %s()\n", __FUNCTION__);
+       WapiReturnOneStaInfo(ieee, ieee->current_network.bssid, 0);
+#endif
+}
+#ifdef RTL8192S_WAPI_SUPPORT
+void ieee80211_disassociate_from_app(struct rtllib_device *ieee)
+{
+       netif_carrier_off(ieee->dev);
+       if (ieee->softmac_features & IEEE_SOFTMAC_TX_QUEUE)
+                       rtllib_reset_queue(ieee);
+       
+       if (ieee->data_hard_stop)
+                       ieee->data_hard_stop(ieee->dev);
+#ifdef ENABLE_DOT11D
+       if(IS_DOT11D_ENABLE(ieee))
+               Dot11d_Reset(ieee);
+#endif
+       ieee->state = RTLLIB_NOLINK;
+       ieee->is_set_key = false;
+       ieee->wap_set = 0;
+
+       queue_delayed_work_rsl(ieee->wq, &ieee->link_change_wq, 0);
+
+
+#ifndef FOR_ANDROID_X86
+       notify_wx_assoc_event(ieee);
+#endif
+       
+       printk("==============> %s()\n", __FUNCTION__);
+       WapiReturnOneStaInfo(ieee, ieee->current_network.bssid, 1);
+}
+
+#endif
+void rtllib_associate_retry_wq(void *data)
+{
+       struct rtllib_device *ieee = container_of_dwork_rsl(data, struct rtllib_device, associate_retry_wq);
+       unsigned long flags;
+       
+       down(&ieee->wx_sem);
+       if(!ieee->proto_started)
+               goto exit;
+               
+       if(ieee->state != RTLLIB_ASSOCIATING_RETRY)
+               goto exit;
+               
+       /* until we do not set the state to RTLLIB_NOLINK 
+       * there are no possibility to have someone else trying
+       * to start an association procdure (we get here with
+       * ieee->state = RTLLIB_ASSOCIATING).
+       * When we set the state to RTLLIB_NOLINK it is possible
+       * that the RX path run an attempt to associate, but
+       * both rtllib_softmac_check_all_nets and the
+       * RX path works with ieee->lock held so there are no
+       * problems. If we are still disassociated then start a scan.
+       * the lock here is necessary to ensure no one try to start
+       * an association procedure when we have just checked the 
+       * state and we are going to start the scan.
+       */
+       ieee->beinretry = true;
+       ieee->state = RTLLIB_NOLINK;
+
+       rtllib_softmac_check_all_nets(ieee);
+       
+       spin_lock_irqsave(&ieee->lock, flags);
+       
+       if(ieee->state == RTLLIB_NOLINK)
+       {
+               rtllib_start_scan(ieee);
+       }
+       spin_unlock_irqrestore(&ieee->lock, flags);
+
+       ieee->beinretry = false;
+exit:
+       up(&ieee->wx_sem);
+}
+
+struct sk_buff *rtllib_get_beacon_(struct rtllib_device *ieee)
+{
+       u8 broadcast_addr[] = {0xff,0xff,0xff,0xff,0xff,0xff};
+       
+       struct sk_buff *skb;
+       struct rtllib_probe_response *b;
+#ifdef _RTL8192_EXT_PATCH_
+       if((ieee->iw_mode == IW_MODE_MESH)&&(ieee->ext_patch_get_beacon_get_probersp ))
+               skb = ieee->ext_patch_get_beacon_get_probersp(ieee, broadcast_addr, &(ieee->current_mesh_network));
+       else
+               skb = rtllib_probe_resp(ieee, broadcast_addr);
+#else
+       skb = rtllib_probe_resp(ieee, broadcast_addr);
+#endif
+       
+       if (!skb) 
+               return NULL;
+       
+       b = (struct rtllib_probe_response *) skb->data;
+       b->header.frame_ctl = cpu_to_le16(RTLLIB_STYPE_BEACON);
+               
+       return skb;
+       
+}
+
+struct sk_buff *rtllib_get_beacon(struct rtllib_device *ieee)
+{
+       struct sk_buff *skb;
+       struct rtllib_probe_response *b;
+       
+       skb = rtllib_get_beacon_(ieee);
+       if(!skb) 
+               return NULL;
+               
+       b = (struct rtllib_probe_response *) skb->data; 
+       b->header.seq_ctl = cpu_to_le16(ieee->seq_ctrl[0] << 4);
+       
+       if (ieee->seq_ctrl[0] == 0xFFF)
+               ieee->seq_ctrl[0] = 0;
+       else
+               ieee->seq_ctrl[0]++;
+       
+       return skb;
+}
+
+#ifdef _RTL8192_EXT_PATCH_     
+void rtllib_softmac_stop_protocol(struct rtllib_device *ieee, u8 mesh_flag, u8 shutdown)
+#else
+void rtllib_softmac_stop_protocol(struct rtllib_device *ieee,u8 shutdown)
+#endif
+{
+       rtllib_stop_scan_syncro(ieee);
+       down(&ieee->wx_sem);
+#ifdef _RTL8192_EXT_PATCH_     
+       if(mesh_flag) {
+               rtllib_stop_mesh_protocol(ieee);
+       }
+       else
+#endif 
+               rtllib_stop_protocol(ieee,shutdown);
+       up(&ieee->wx_sem);
+}
+
+
+void rtllib_stop_protocol(struct rtllib_device *ieee, u8 shutdown)
+{
+       if (!ieee->proto_started)
+               return;
+       
+       if(shutdown){
+       ieee->proto_started = 0;
+               ieee->proto_stoppping = 1;
+#ifdef ENABLE_IPS
+               if(ieee->rtllib_ips_leave != NULL)
+                       ieee->rtllib_ips_leave(ieee->dev);
+#endif
+       }
+       
+       rtllib_stop_send_beacons(ieee);
+       del_timer_sync(&ieee->associate_timer);
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+       del_timer_sync(&ieee->ibss_wait_timer);
+#endif
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) 
+       cancel_delayed_work(&ieee->associate_retry_wq); 
+       cancel_delayed_work(&ieee->start_ibss_wq);
+       cancel_delayed_work(&ieee->link_change_wq);
+#endif 
+       rtllib_stop_scan(ieee);
+
+       if(ieee->state <= RTLLIB_ASSOCIATING_AUTHENTICATED)
+               ieee->state = RTLLIB_NOLINK;
+
+       if ((ieee->state == RTLLIB_LINKED) && (ieee->iw_mode == IW_MODE_INFRA)){
+               SendDisassociation(ieee,1,deauth_lv_ss);
+               rtllib_disassociate(ieee);
+       }
+       
+       if(shutdown){
+       RemoveAllTS(ieee); 
+               ieee->proto_stoppping = 0;
+#ifdef RTL8192S_WAPI_SUPPORT
+               if ((ieee->WapiSupport) && (ieee->wapiInfo.bWapiEnable))
+               {
+                       WapiReturnAllStaInfo(ieee);
+               }
+#endif
+       }
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+       if((ieee->iw_mode == IW_MODE_ADHOC) && (ieee->state == RTLLIB_LINKED))
+               DelStaInfoList(ieee);
+#endif
+
+       if(ieee->assocreq_ies){
+               kfree(ieee->assocreq_ies);
+               ieee->assocreq_ies = NULL;
+               ieee->assocreq_ies_len = 0;
+       }
+       if(ieee->assocresp_ies){
+               kfree(ieee->assocresp_ies);
+               ieee->assocresp_ies = NULL;
+               ieee->assocresp_ies_len = 0;
+       }
+}
+
+#ifdef _RTL8192_EXT_PATCH_     
+void rtllib_stop_mesh_protocol(struct rtllib_device *ieee)
+{
+       if (!ieee->mesh_started)
+               return;
+       ieee->mesh_started = 0;
+
+       if(ieee->ext_patch_rtllib_stop_protocol)
+               ieee->ext_patch_rtllib_stop_protocol(ieee,0);
+       
+       rtllib_stop_send_beacons(ieee);
+}
+#endif 
+
+#ifdef _RTL8192_EXT_PATCH_     
+void rtllib_softmac_start_protocol(struct rtllib_device *ieee, u8 mesh_flag)
+#else
+void rtllib_softmac_start_protocol(struct rtllib_device *ieee)
+#endif 
+{
+       down(&ieee->wx_sem);
+#ifdef _RTL8192_EXT_PATCH_     
+       if (mesh_flag) {
+               rtllib_start_mesh_protocol(ieee);
+       }
+       else
+#endif 
+               rtllib_start_protocol(ieee);
+       up(&ieee->wx_sem);
+}
+
+void rtllib_start_protocol(struct rtllib_device *ieee)
+{
+       short ch = 0;
+       int i = 0;
+
+       rtllib_update_active_chan_map(ieee);
+
+       if (ieee->proto_started)
+               return;
+               
+       ieee->proto_started = 1;
+       
+       if (ieee->current_network.channel == 0) {
+               do {
+                       ch++;
+                       if (ch > MAX_CHANNEL_NUMBER) 
+                               return; /* no channel found */
+               } while(!ieee->active_channel_map[ch]);
+               ieee->current_network.channel = ch;
+       }
+       
+       if (ieee->current_network.beacon_interval == 0)
+               ieee->current_network.beacon_interval = 100;
+       
+               for(i = 0; i < 17; i++) {
+         ieee->last_rxseq_num[i] = -1;
+         ieee->last_rxfrag_num[i] = -1;
+         ieee->last_packet_time[i] = 0;
+       }
+
+       if(ieee->UpdateBeaconInterruptHandler)
+               ieee->UpdateBeaconInterruptHandler(ieee->dev, false);
+               
+       ieee->wmm_acm = 0;
+       /* if the user set the MAC of the ad-hoc cell and then
+        * switch to managed mode, shall we  make sure that association
+        * attempts does not fail just because the user provide the essid
+        * and the nic is still checking for the AP MAC ??
+        */
+#ifdef _RTL8192_EXT_PATCH_
+       if ((ieee->iw_mode == IW_MODE_INFRA) || ((ieee->iw_mode == IW_MODE_MESH) && (ieee->only_mesh == 0)))  
+#else
+       if (ieee->iw_mode == IW_MODE_INFRA)  
+#endif         
+       {
+               rtllib_start_bss(ieee);
+       }else if (ieee->iw_mode == IW_MODE_ADHOC){
+               if(ieee->UpdateBeaconInterruptHandler)
+                       ieee->UpdateBeaconInterruptHandler(ieee->dev, true);
+               
+               rtllib_start_ibss(ieee);
+               
+       }else if (ieee->iw_mode == IW_MODE_MASTER)
+               rtllib_start_master_bss(ieee);
+               
+       else if(ieee->iw_mode == IW_MODE_MONITOR)
+               rtllib_start_monitor_mode(ieee);        
+}
+
+#ifdef _RTL8192_EXT_PATCH_
+void rtllib_start_mesh_protocol(struct rtllib_device *ieee)
+{
+       short ch = 0;
+
+       rtllib_update_active_chan_map(ieee);
+
+       if (ieee->mesh_started)
+               return;
+
+       ieee->mesh_started = 1;
+       
+       if (ieee->current_mesh_network.channel == 0){
+               do {
+                       ch++;
+                       if (ch > MAX_CHANNEL_NUMBER) 
+                               return; /* no channel found */
+               } while(ieee->active_channel_map[ch]);
+
+               ieee->current_mesh_network.channel = ch;
+       }
+       
+       if (ieee->current_mesh_network.beacon_interval == 0)
+               ieee->current_mesh_network.beacon_interval = 100;
+
+       ieee->wmm_acm = 0;
+
+       if(ieee->ext_patch_rtllib_start_protocol)
+       {
+                ieee->ext_patch_rtllib_start_mesh(ieee);
+       }
+}
+#endif
+
+
+#define DRV_NAME  "Ieee80211"
+void rtllib_softmac_init(struct rtllib_device *ieee)
+{
+       int i;
+       memset(&ieee->current_network, 0, sizeof(struct rtllib_network));
+       
+       ieee->state = RTLLIB_NOLINK;
+#ifdef _RTL8192_EXT_PATCH_
+       ieee->mesh_state = RTLLIB_NOLINK;
+#endif
+       for(i = 0; i < 5; i++) {
+         ieee->seq_ctrl[i] = 0;
+       }
+#ifdef ENABLE_DOT11D
+       ieee->pDot11dInfo = kmalloc(sizeof(RT_DOT11D_INFO), GFP_ATOMIC);
+       if (!ieee->pDot11dInfo)
+               RTLLIB_DEBUG(RTLLIB_DL_ERR, "can't alloc memory for DOT11D\n");
+       memset(ieee->pDot11dInfo, 0, sizeof(RT_DOT11D_INFO));
+#endif
+       ieee->LinkDetectInfo.SlotIndex = 0;
+       ieee->LinkDetectInfo.SlotNum = 2;
+       ieee->LinkDetectInfo.NumRecvBcnInPeriod=0;
+        ieee->LinkDetectInfo.NumRecvDataInPeriod=0;
+       ieee->LinkDetectInfo.NumTxOkInPeriod =0;
+       ieee->LinkDetectInfo.NumRxOkInPeriod =0;
+       ieee->LinkDetectInfo.NumRxUnicastOkInPeriod=0;
+#ifdef _RTL8192_EXT_PATCH_
+       ieee->LinkDetectInfo.LastNumRxUnicast = 0;
+       ieee->LinkDetectInfo.LastNumTxUnicast = 0;
+       ieee->LinkDetectInfo.IdleCount = 0;
+#endif
+       ieee->bIsAggregateFrame = false;
+       ieee->assoc_id = 0;
+       ieee->queue_stop = 0;
+       ieee->scanning_continue = 0;
+       ieee->softmac_features = 0; 
+       ieee->wap_set = 0;
+       ieee->ssid_set = 0;
+       ieee->proto_started = 0;
+       ieee->proto_stoppping = 0;
+       ieee->basic_rate = RTLLIB_DEFAULT_BASIC_RATE;
+       ieee->rate = 22;
+       ieee->ps = RTLLIB_PS_DISABLED;
+       ieee->sta_sleep = 0;
+
+#ifdef _RTL8192_EXT_PATCH_
+       ieee->mesh_started = 0;
+#endif
+       ieee->Regdot11HTOperationalRateSet[0]= 0xff;
+       ieee->Regdot11HTOperationalRateSet[1]= 0xff;
+       ieee->Regdot11HTOperationalRateSet[4]= 0x01;
+
+       ieee->Regdot11TxHTOperationalRateSet[0]= 0xff;
+       ieee->Regdot11TxHTOperationalRateSet[1]= 0xff;
+       ieee->Regdot11TxHTOperationalRateSet[4]= 0x01;
+       
+       ieee->FirstIe_InScan = false;
+       ieee->actscanning = false;
+       ieee->beinretry = false;
+       ieee->is_set_key = false;
+       init_mgmt_queue(ieee);
+
+       ieee->sta_edca_param[0] = 0x0000A403;
+       ieee->sta_edca_param[1] = 0x0000A427;
+       ieee->sta_edca_param[2] = 0x005E4342;
+       ieee->sta_edca_param[3] = 0x002F3262;
+       ieee->aggregation = true;
+       ieee->enable_rx_imm_BA = 1;
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,5,40)       
+       _setup_timer(&ieee->scan_timer,
+                   rtllib_softmac_scan_cb,
+                   (unsigned long) ieee);
+#endif
+       ieee->tx_pending.txb = NULL;
+       
+       _setup_timer(&ieee->associate_timer,
+                   rtllib_associate_abort_cb,
+                   (unsigned long) ieee);
+
+       _setup_timer(&ieee->beacon_timer,
+                   rtllib_send_beacon_cb,
+                   (unsigned long) ieee);
+
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+       _setup_timer(&ieee->ibss_wait_timer,
+                   rtllib_ibss_wait_timeout,
+                   (unsigned long) ieee);
+#endif
+
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) 
+#ifdef PF_SYNCTHREAD
+       ieee->wq = create_workqueue(DRV_NAME,0);
+#else  
+       ieee->wq = create_workqueue(DRV_NAME);
+#endif
+#endif
+
+       INIT_DELAYED_WORK_RSL(&ieee->link_change_wq,(void*)rtllib_link_change_wq,ieee);
+       INIT_DELAYED_WORK_RSL(&ieee->start_ibss_wq,(void*)rtllib_start_ibss_wq,ieee);
+       INIT_WORK_RSL(&ieee->associate_complete_wq, (void*)rtllib_associate_complete_wq,ieee);
+       INIT_DELAYED_WORK_RSL(&ieee->associate_procedure_wq, (void*)rtllib_associate_procedure_wq,ieee);
+       INIT_DELAYED_WORK_RSL(&ieee->softmac_scan_wq,(void*)rtllib_softmac_scan_wq,ieee);
+       INIT_DELAYED_WORK_RSL(&ieee->softmac_hint11d_wq,(void*)rtllib_softmac_hint11d_wq,ieee);
+       INIT_DELAYED_WORK_RSL(&ieee->associate_retry_wq, (void*)rtllib_associate_retry_wq,ieee);
+       INIT_WORK_RSL(&ieee->wx_sync_scan_wq,(void*)rtllib_wx_sync_scan_wq,ieee);
+
+#ifdef _RTL8192_EXT_PATCH_
+       INIT_WORK_RSL(&ieee->ext_stop_scan_wq,(void*) rtllib_ext_stop_scan_wq,ieee);
+       INIT_WORK_RSL(&ieee->ext_send_beacon_wq,(void*) ext_rtllib_send_beacon_wq,ieee);
+#endif 
+
+       sema_init(&ieee->wx_sem, 1);
+       sema_init(&ieee->scan_sem, 1);
+       sema_init(&ieee->ips_sem,1);
+       
+       spin_lock_init(&ieee->mgmt_tx_lock);
+       spin_lock_init(&ieee->beacon_lock);
+       
+       tasklet_init(&ieee->ps_task,
+            (void(*)(unsigned long)) rtllib_sta_ps,
+            (unsigned long)ieee);
+
+}
+
+void rtllib_softmac_free(struct rtllib_device *ieee)
+{
+       down(&ieee->wx_sem);
+#ifdef ENABLE_DOT11D
+       if(NULL != ieee->pDot11dInfo)
+       {
+               kfree(ieee->pDot11dInfo);
+               ieee->pDot11dInfo = NULL;
+       }
+#endif
+       del_timer_sync(&ieee->associate_timer);
+
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) 
+       cancel_delayed_work(&ieee->associate_retry_wq);
+       destroy_workqueue(ieee->wq);
+#endif
+       
+       up(&ieee->wx_sem);
+}
+
+/******************************************************** 
+ * Start of WPA code.                                   *
+ * this is stolen from the ipw2200 driver               *
+ ********************************************************/
+
+static int rtllib_wpa_enable(struct rtllib_device *ieee, int value)
+{
+       /* This is called when wpa_supplicant loads and closes the driver
+        * interface. */
+       printk("%s WPA\n",value ? "enabling" : "disabling");
+       ieee->wpa_enabled = value;
+       memset(ieee->ap_mac_addr, 0, 6); 
+       return 0;
+}
+
+void rtllib_wpa_assoc_frame(struct rtllib_device *ieee, char *wpa_ie, int wpa_ie_len)
+{
+       /* make sure WPA is enabled */
+       rtllib_wpa_enable(ieee, 1);
+
+       rtllib_disassociate(ieee);
+}
+
+
+static int rtllib_wpa_mlme(struct rtllib_device *ieee, int command, int reason)
+{
+       
+       int ret = 0;
+
+       switch (command) {
+       case IEEE_MLME_STA_DEAUTH:
+               break;
+
+       case IEEE_MLME_STA_DISASSOC:
+               rtllib_disassociate(ieee);
+               break;
+
+       default:
+               printk("Unknown MLME request: %d\n", command);
+               ret = -EOPNOTSUPP;
+       }
+
+       return ret;
+}
+
+
+static int rtllib_wpa_set_wpa_ie(struct rtllib_device *ieee,
+                             struct ieee_param *param, int plen)
+{
+       u8 *buf;
+
+       if (param->u.wpa_ie.len > MAX_WPA_IE_LEN ||
+           (param->u.wpa_ie.len && param->u.wpa_ie.data == NULL))
+               return -EINVAL;
+
+       if (param->u.wpa_ie.len) {
+               buf = kmalloc(param->u.wpa_ie.len, GFP_KERNEL);
+               if (buf == NULL)
+                       return -ENOMEM;
+
+               memcpy(buf, param->u.wpa_ie.data, param->u.wpa_ie.len);
+               kfree(ieee->wpa_ie);
+               ieee->wpa_ie = buf;
+               ieee->wpa_ie_len = param->u.wpa_ie.len;
+       } else {
+               kfree(ieee->wpa_ie);
+               ieee->wpa_ie = NULL;
+               ieee->wpa_ie_len = 0;
+       }
+
+       rtllib_wpa_assoc_frame(ieee, ieee->wpa_ie, ieee->wpa_ie_len);
+       return 0;
+}
+
+#define AUTH_ALG_OPEN_SYSTEM                   0x1
+#define AUTH_ALG_SHARED_KEY                    0x2
+#define AUTH_ALG_LEAP                          0x4
+static int rtllib_wpa_set_auth_algs(struct rtllib_device *ieee, int value)
+{
+       
+       struct rtllib_security sec = {
+               .flags = SEC_AUTH_MODE,
+       };
+       int ret = 0;
+
+       if (value & AUTH_ALG_SHARED_KEY) {
+               sec.auth_mode = WLAN_AUTH_SHARED_KEY;
+               ieee->open_wep = 0;
+               ieee->auth_mode = 1;
+       } else if (value & AUTH_ALG_OPEN_SYSTEM){
+               sec.auth_mode = WLAN_AUTH_OPEN;
+               ieee->open_wep = 1;
+               ieee->auth_mode = 0;
+       }
+       else if (value & AUTH_ALG_LEAP){
+               sec.auth_mode = WLAN_AUTH_LEAP  >> 6;
+               ieee->open_wep = 1;
+               ieee->auth_mode = 2;
+       }
+
+
+       if (ieee->set_security)
+               ieee->set_security(ieee->dev, &sec);
+
+       return ret;
+}
+
+static int rtllib_wpa_set_param(struct rtllib_device *ieee, u8 name, u32 value)
+{
+       int ret=0;
+       unsigned long flags;
+
+       switch (name) {
+       case IEEE_PARAM_WPA_ENABLED:
+               ret = rtllib_wpa_enable(ieee, value);
+               break;
+
+       case IEEE_PARAM_TKIP_COUNTERMEASURES:
+               ieee->tkip_countermeasures=value;
+               break;
+
+       case IEEE_PARAM_DROP_UNENCRYPTED: {
+               /* HACK:
+                *
+                * wpa_supplicant calls set_wpa_enabled when the driver
+                * is loaded and unloaded, regardless of if WPA is being
+                * used.  No other calls are made which can be used to
+                * determine if encryption will be used or not prior to
+                * association being expected.  If encryption is not being
+                * used, drop_unencrypted is set to false, else true -- we
+                * can use this to determine if the CAP_PRIVACY_ON bit should
+                * be set.
+                */
+               struct rtllib_security sec = {
+                       .flags = SEC_ENABLED,
+                       .enabled = value,
+               };
+               ieee->drop_unencrypted = value;
+               /* We only change SEC_LEVEL for open mode. Others
+                * are set by ipw_wpa_set_encryption.
+                */
+               if (!value) {
+                       sec.flags |= SEC_LEVEL;
+                       sec.level = SEC_LEVEL_0;
+               }
+               else {
+                       sec.flags |= SEC_LEVEL;
+                       sec.level = SEC_LEVEL_1;
+               }
+               if (ieee->set_security)
+                       ieee->set_security(ieee->dev, &sec);
+               break;
+       }
+
+       case IEEE_PARAM_PRIVACY_INVOKED:
+               ieee->privacy_invoked=value;
+               break;
+
+       case IEEE_PARAM_AUTH_ALGS:
+               ret = rtllib_wpa_set_auth_algs(ieee, value);
+               break;
+
+       case IEEE_PARAM_IEEE_802_1X:
+               ieee->ieee802_1x=value;
+               break;
+       case IEEE_PARAM_WPAX_SELECT:
+               spin_lock_irqsave(&ieee->wpax_suitlist_lock,flags);
+               spin_unlock_irqrestore(&ieee->wpax_suitlist_lock,flags);
+               break;
+
+       default:
+               printk("Unknown WPA param: %d\n",name);
+               ret = -EOPNOTSUPP;
+       }
+
+       return ret;
+}
+
+/* implementation borrowed from hostap driver */
+
+#ifdef _RTL8192_EXT_PATCH_
+static int rtllib_wpa_set_encryption(struct rtllib_device *ieee,
+                                 struct ieee_param *param, int param_len, u8 is_mesh)
+#else
+static int rtllib_wpa_set_encryption(struct rtllib_device *ieee,
+                                 struct ieee_param *param, int param_len)
+#endif
+{
+       int ret = 0;
+#ifdef _RTL8192_EXT_PATCH_
+       u8 i = 0;
+#endif
+       struct rtllib_crypto_ops *ops;
+       struct rtllib_crypt_data **crypt;
+
+       struct rtllib_security sec = {
+               .flags = 0,
+       };
+
+       param->u.crypt.err = 0;
+       param->u.crypt.alg[IEEE_CRYPT_ALG_NAME_LEN - 1] = '\0';
+
+       if (param_len !=
+           (int) ((char *) param->u.crypt.key - (char *) param) +
+           param->u.crypt.key_len) {
+               printk("Len mismatch %d, %d\n", param_len,
+                              param->u.crypt.key_len);
+               return -EINVAL;
+       }
+       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)
+                       return -EINVAL;
+#ifdef _RTL8192_EXT_PATCH_
+               if(is_mesh)
+                       crypt = &ieee->cryptlist[0]->crypt[param->u.crypt.idx];
+               else
+                       crypt = &ieee->sta_crypt[param->u.crypt.idx];
+#else
+               crypt = &ieee->crypt[param->u.crypt.idx];
+#endif
+       } else {
+               return -EINVAL;
+       }
+
+       if (strcmp(param->u.crypt.alg, "none") == 0) {
+               if (crypt) {
+                       sec.enabled = 0;
+                       sec.level = SEC_LEVEL_0;
+                       sec.flags |= SEC_ENABLED | SEC_LEVEL;
+                       rtllib_crypt_delayed_deinit(ieee, crypt);
+               }
+               goto done;
+       }
+       sec.enabled = 1;
+       sec.flags |= SEC_ENABLED;
+
+       /* IPW HW cannot build TKIP MIC, host decryption still needed. */
+       if (!(ieee->host_encrypt || ieee->host_decrypt) &&
+           strcmp(param->u.crypt.alg, "TKIP"))
+               goto skip_host_crypt;
+
+       ops = rtllib_get_crypto_ops(param->u.crypt.alg);
+       if (ops == NULL && strcmp(param->u.crypt.alg, "WEP") == 0) {
+               request_module("rtllib_crypt_wep");
+               ops = rtllib_get_crypto_ops(param->u.crypt.alg);
+       } else if (ops == NULL && strcmp(param->u.crypt.alg, "TKIP") == 0) {
+               request_module("rtllib_crypt_tkip");
+               ops = rtllib_get_crypto_ops(param->u.crypt.alg);
+       } else if (ops == NULL && strcmp(param->u.crypt.alg, "CCMP") == 0) {
+               request_module("rtllib_crypt_ccmp");
+               ops = rtllib_get_crypto_ops(param->u.crypt.alg);
+       }
+       if (ops == NULL) {
+               printk("unknown crypto alg '%s'\n", param->u.crypt.alg);
+               param->u.crypt.err = IEEE_CRYPT_ERR_UNKNOWN_ALG;
+               ret = -EINVAL;
+               goto done;
+       }
+#ifdef _RTL8192_EXT_PATCH_
+       if(is_mesh)  
+       {
+               for (i=0; i<MAX_MP; i++){
+                       crypt = &ieee->cryptlist[i]->crypt[param->u.crypt.idx];
+
+                       *crypt = ieee->cryptlist[i]->crypt[param->u.crypt.idx];
+               }
+#endif
+
+               if (*crypt == NULL || (*crypt)->ops != ops) {
+                       struct rtllib_crypt_data *new_crypt;
+
+                       rtllib_crypt_delayed_deinit(ieee, crypt);
+
+                       new_crypt = (struct rtllib_crypt_data *)
+                               kmalloc(sizeof(*new_crypt), GFP_KERNEL);
+                       if (new_crypt == NULL) {
+                               ret = -ENOMEM;
+                               goto done;
+                       }
+                       memset(new_crypt, 0, sizeof(struct rtllib_crypt_data));
+                       new_crypt->ops = ops;
+#ifdef BUILT_IN_RTLLIB
+                       if (new_crypt->ops)
+#else
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
+                       if (new_crypt->ops && try_module_get(new_crypt->ops->owner))
+#else
+                       if (new_crypt->ops && try_inc_mod_count(new_crypt->ops->owner))
+#endif                 
+#endif                 
+                                       new_crypt->priv =
+                                               new_crypt->ops->init(param->u.crypt.idx);
+
+                       if (new_crypt->priv == NULL) {
+                               kfree(new_crypt);
+                               param->u.crypt.err = IEEE_CRYPT_ERR_CRYPT_INIT_FAILED;
+                               ret = -EINVAL;
+                               goto done;
+                       }
+
+                       *crypt = new_crypt;
+               }
+
+               if (param->u.crypt.key_len > 0 && (*crypt)->ops->set_key &&
+                               (*crypt)->ops->set_key(param->u.crypt.key,
+                                       param->u.crypt.key_len, param->u.crypt.seq,
+                                       (*crypt)->priv) < 0) {
+                       printk("key setting failed\n");
+                       param->u.crypt.err = IEEE_CRYPT_ERR_KEY_SET_FAILED;
+                       ret = -EINVAL;
+                       goto done;
+               }
+#ifdef _RTL8192_EXT_PATCH_
+       }
+#endif
+
+ skip_host_crypt:
+       if (param->u.crypt.set_tx) {
+               ieee->tx_keyidx = param->u.crypt.idx;
+               sec.active_key = param->u.crypt.idx;
+               sec.flags |= SEC_ACTIVE_KEY;
+       } else
+               sec.flags &= ~SEC_ACTIVE_KEY;
+
+       if (param->u.crypt.alg != NULL) {
+               memcpy(sec.keys[param->u.crypt.idx],
+                      param->u.crypt.key,
+                      param->u.crypt.key_len);
+               sec.key_sizes[param->u.crypt.idx] = param->u.crypt.key_len;
+               sec.flags |= (1 << param->u.crypt.idx);
+
+               if (strcmp(param->u.crypt.alg, "WEP") == 0) {
+                       sec.flags |= SEC_LEVEL;
+                       sec.level = SEC_LEVEL_1;
+               } else if (strcmp(param->u.crypt.alg, "TKIP") == 0) {
+                       sec.flags |= SEC_LEVEL;
+                       sec.level = SEC_LEVEL_2;
+               } else if (strcmp(param->u.crypt.alg, "CCMP") == 0) {
+                       sec.flags |= SEC_LEVEL;
+                       sec.level = SEC_LEVEL_3;
+               }
+       }
+ done:
+       if (ieee->set_security)
+               ieee->set_security(ieee->dev, &sec);
+
+#ifdef _RTL8192_EXT_PATCH_
+       if (ret != 0)
+       {
+               if(is_mesh)   
+               {
+                       for (i=0; i<MAX_MP; i++)
+                       {
+                               if (ieee->cryptlist[i]->crypt[param->u.crypt.idx]==NULL){
+                                       break;
+                               }
+                               else{
+                                       kfree(ieee->cryptlist[i]->crypt[param->u.crypt.idx]);
+                                       ieee->cryptlist[i]->crypt[param->u.crypt.idx] = NULL;
+                               }
+                       }
+               }
+               else
+               {
+                       kfree(ieee->sta_crypt[param->u.crypt.idx]);
+                       ieee->sta_crypt[param->u.crypt.idx] = NULL;
+               }
+       }
+#endif
+       
+
+       /* Do not reset port if card is in Managed mode since resetting will
+        * generate new IEEE 802.11 authentication which may end up in looping
+        * with IEEE 802.1X.  If your hardware requires a reset after WEP
+        * configuration (for example... Prism2), implement the reset_port in
+        * the callbacks structures used to initialize the 802.11 stack. */
+       if (ieee->reset_on_keychange &&
+           ieee->iw_mode != IW_MODE_INFRA &&
+           ieee->reset_port &&
+           ieee->reset_port(ieee->dev)) {
+               printk("reset_port failed\n");
+               param->u.crypt.err = IEEE_CRYPT_ERR_CARD_CONF_FAILED;
+               return -EINVAL;
+       }
+
+       return ret;
+}
+
+inline struct sk_buff *rtllib_disauth_skb( struct rtllib_network *beacon,
+               struct rtllib_device *ieee, u16 asRsn)
+{
+       struct sk_buff *skb;
+       struct rtllib_disauth *disauth;
+#ifdef USB_USE_ALIGNMENT
+        u32 Tmpaddr=0;
+        int alignment=0;
+       int len = sizeof(struct rtllib_disauth) + ieee->tx_headroom + USB_512B_ALIGNMENT_SIZE;
+#else
+       int len = sizeof(struct rtllib_disauth) + ieee->tx_headroom;
+
+#endif
+       skb = dev_alloc_skb(len);
+       if (!skb) {
+               return NULL;
+       }
+
+#ifdef USB_USE_ALIGNMENT
+        Tmpaddr = (u32)skb->data;
+        alignment = Tmpaddr & 0x1ff;
+        skb_reserve(skb,(USB_512B_ALIGNMENT_SIZE - alignment));
+#endif
+       skb_reserve(skb, ieee->tx_headroom);
+       
+       disauth = (struct rtllib_disauth *) skb_put(skb,sizeof(struct rtllib_disauth));
+       disauth->header.frame_ctl = cpu_to_le16(RTLLIB_STYPE_DEAUTH);
+       disauth->header.duration_id = 0;
+       
+       memcpy(disauth->header.addr1, beacon->bssid, ETH_ALEN);
+       memcpy(disauth->header.addr2, ieee->dev->dev_addr, ETH_ALEN);
+       memcpy(disauth->header.addr3, beacon->bssid, ETH_ALEN);
+       
+       disauth->reason = cpu_to_le16(asRsn);
+       return skb;
+}
+
+inline struct sk_buff *rtllib_disassociate_skb( struct rtllib_network *beacon,
+               struct rtllib_device *ieee, u16 asRsn)
+{
+       struct sk_buff *skb;
+       struct rtllib_disassoc *disass;
+#ifdef USB_USE_ALIGNMENT
+        u32 Tmpaddr=0;
+        int alignment=0;
+       int len = sizeof(struct rtllib_disassoc) + ieee->tx_headroom + USB_512B_ALIGNMENT_SIZE;
+#else
+       int len = sizeof(struct rtllib_disassoc) + ieee->tx_headroom;
+#endif
+       skb = dev_alloc_skb(len);
+
+       if (!skb) {
+               return NULL;
+       }
+       
+#ifdef USB_USE_ALIGNMENT
+        Tmpaddr = (u32)skb->data;
+        alignment = Tmpaddr & 0x1ff;
+        skb_reserve(skb,(USB_512B_ALIGNMENT_SIZE - alignment));
+#endif
+       skb_reserve(skb, ieee->tx_headroom);
+
+       disass = (struct rtllib_disassoc *) skb_put(skb,sizeof(struct rtllib_disassoc));
+       disass->header.frame_ctl = cpu_to_le16(RTLLIB_STYPE_DISASSOC);
+       disass->header.duration_id = 0;
+       
+       memcpy(disass->header.addr1, beacon->bssid, ETH_ALEN);
+       memcpy(disass->header.addr2, ieee->dev->dev_addr, ETH_ALEN);
+       memcpy(disass->header.addr3, beacon->bssid, ETH_ALEN);
+       
+       disass->reason = cpu_to_le16(asRsn);
+       return skb;
+}
+
+void SendDisassociation(struct rtllib_device *ieee, bool deauth, u16 asRsn)
+{
+       struct rtllib_network *beacon = &ieee->current_network;
+       struct sk_buff *skb;
+
+       if(deauth) {
+               skb = rtllib_disauth_skb(beacon,ieee,asRsn);
+       } else {
+               skb = rtllib_disassociate_skb(beacon,ieee,asRsn);
+       }
+
+       if (skb){
+               softmac_mgmt_xmit(skb, ieee);
+       }
+}
+
+u8 rtllib_ap_sec_type(struct rtllib_device *ieee)
+{
+       static u8 ccmp_ie[4] = {0x00,0x50,0xf2,0x04};
+       static u8 ccmp_rsn_ie[4] = {0x00, 0x0f, 0xac, 0x04};
+       int wpa_ie_len= ieee->wpa_ie_len;
+       struct rtllib_crypt_data* crypt;
+       int encrypt;
+
+#ifdef _RTL8192_EXT_PATCH_
+       crypt = ieee->sta_crypt[ieee->tx_keyidx];
+#else
+       crypt = ieee->crypt[ieee->tx_keyidx];
+#endif
+       encrypt = (ieee->current_network.capability & WLAN_CAPABILITY_PRIVACY) ||\
+                 (ieee->host_encrypt && crypt && crypt->ops && \
+                  (0 == strcmp(crypt->ops->name,"WEP")));
+
+       /* simply judge  */
+       if(encrypt && (wpa_ie_len == 0)) {
+               return SEC_ALG_WEP;
+       } else if((wpa_ie_len != 0)) {
+               if (((ieee->wpa_ie[0] == 0xdd) && (!memcmp(&(ieee->wpa_ie[14]),ccmp_ie,4))) || 
+                               ((ieee->wpa_ie[0] == 0x30) && (!memcmp(&ieee->wpa_ie[10],ccmp_rsn_ie, 4))))
+                       return SEC_ALG_CCMP;
+               else
+                       return SEC_ALG_TKIP;
+       } else {
+               return SEC_ALG_NONE;
+       }
+}
+
+#ifdef _RTL8192_EXT_PATCH_
+int rtllib_wpa_supplicant_ioctl(struct rtllib_device *ieee, struct iw_point *p, u8 is_mesh)
+#else
+int rtllib_wpa_supplicant_ioctl(struct rtllib_device *ieee, struct iw_point *p)
+#endif
+{
+       struct ieee_param *param;
+       int ret=0;
+
+       down(&ieee->wx_sem);
+
+       if (p->length < sizeof(struct ieee_param) || !p->pointer){
+               ret = -EINVAL;
+               goto out;
+       }
+       
+       param = (struct ieee_param *)kmalloc(p->length, GFP_KERNEL);
+       if (param == NULL){
+               ret = -ENOMEM;
+               goto out;
+       }
+       if (copy_from_user(param, p->pointer, p->length)) {
+               kfree(param);
+               ret = -EFAULT;
+               goto out;
+       }
+
+       switch (param->cmd) {
+
+       case IEEE_CMD_SET_WPA_PARAM:
+               ret = rtllib_wpa_set_param(ieee, param->u.wpa_param.name,
+                                       param->u.wpa_param.value);
+               break;
+
+       case IEEE_CMD_SET_WPA_IE:
+               ret = rtllib_wpa_set_wpa_ie(ieee, param, p->length);
+               break;
+
+       case IEEE_CMD_SET_ENCRYPTION:
+#ifdef _RTL8192_EXT_PATCH_
+               ret = rtllib_wpa_set_encryption(ieee, param, p->length, is_mesh);
+#else
+               ret = rtllib_wpa_set_encryption(ieee, param, p->length);
+#endif
+               break;
+
+       case IEEE_CMD_MLME:
+               ret = rtllib_wpa_mlme(ieee, param->u.mlme.command,
+                                  param->u.mlme.reason_code);
+               break;
+
+       default:
+               printk("Unknown WPA supplicant request: %d\n",param->cmd);
+               ret = -EOPNOTSUPP;
+               break;
+       }
+
+       if (ret == 0 && copy_to_user(p->pointer, param, p->length))
+               ret = -EFAULT;
+
+       kfree(param);
+out:
+       up(&ieee->wx_sem);
+       
+       return ret;
+}
+
+void notify_wx_assoc_event(struct rtllib_device *ieee)
+{
+       union iwreq_data wrqu;
+
+       if(ieee->cannot_notify)
+               return;
+
+       wrqu.ap_addr.sa_family = ARPHRD_ETHER;
+       if (ieee->state == RTLLIB_LINKED)
+               memcpy(wrqu.ap_addr.sa_data, ieee->current_network.bssid, ETH_ALEN);
+       else{
+
+               printk("%s(): Tell user space disconnected\n",__func__);
+               memset(wrqu.ap_addr.sa_data, 0, ETH_ALEN);
+       }
+       wireless_send_event(ieee->dev, SIOCGIWAP, &wrqu, NULL);
+}
+
+#ifndef BUILT_IN_RTLLIB
+EXPORT_SYMBOL_RSL(rtllib_get_beacon);
+EXPORT_SYMBOL_RSL(rtllib_wake_queue);
+EXPORT_SYMBOL_RSL(rtllib_stop_queue);
+EXPORT_SYMBOL_RSL(rtllib_reset_queue);
+EXPORT_SYMBOL_RSL(rtllib_softmac_stop_protocol);
+EXPORT_SYMBOL_RSL(rtllib_softmac_start_protocol);
+EXPORT_SYMBOL_RSL(rtllib_is_shortslot);
+EXPORT_SYMBOL_RSL(rtllib_is_54g);
+EXPORT_SYMBOL_RSL(rtllib_wpa_supplicant_ioctl);
+EXPORT_SYMBOL_RSL(rtllib_ps_tx_ack);
+EXPORT_SYMBOL_RSL(rtllib_softmac_xmit);
+EXPORT_SYMBOL_RSL(rtllib_stop_send_beacons);
+EXPORT_SYMBOL_RSL(notify_wx_assoc_event);
+EXPORT_SYMBOL_RSL(SendDisassociation);
+EXPORT_SYMBOL_RSL(rtllib_disassociate);
+EXPORT_SYMBOL_RSL(rtllib_start_send_beacons);
+EXPORT_SYMBOL_RSL(rtllib_stop_scan);
+EXPORT_SYMBOL_RSL(rtllib_send_probe_requests);
+EXPORT_SYMBOL_RSL(rtllib_softmac_scan_syncro);
+EXPORT_SYMBOL_RSL(rtllib_start_scan_syncro);
+EXPORT_SYMBOL_RSL(rtllib_sta_ps_send_null_frame);
+EXPORT_SYMBOL_RSL(rtllib_sta_ps_send_pspoll_frame);
+EXPORT_SYMBOL_RSL(rtllib_sta_wakeup);
+EXPORT_SYMBOL_RSL(rtllib_ap_sec_type);
+#ifdef _RTL8192_EXT_PATCH_
+EXPORT_SYMBOL_RSL(rtllib_MFIE_rate_len);
+EXPORT_SYMBOL_RSL(rtllib_MFIE_Brate);
+EXPORT_SYMBOL_RSL(rtllib_MFIE_Grate);
+EXPORT_SYMBOL_RSL(rtllib_WMM_Info);
+EXPORT_SYMBOL_RSL(rtllib_TURBO_Info);
+EXPORT_SYMBOL_RSL(rtllib_ext_probe_resp_by_net);
+EXPORT_SYMBOL_RSL(softmac_mgmt_xmit);
+EXPORT_SYMBOL_RSL(rtllib_start_scan);
+EXPORT_SYMBOL_RSL(rtllib_ext_send_11s_beacon);
+EXPORT_SYMBOL_RSL(rtllib_rx_auth_rq);
+EXPORT_SYMBOL_RSL(rtllib_associate_step1);
+EXPORT_SYMBOL_RSL(rtllib_stop_protocol);
+EXPORT_SYMBOL_RSL(rtllib_start_protocol);
+EXPORT_SYMBOL_RSL(rtllib_resp_to_auth);
+
+#endif 
+#endif
diff --git a/ubuntu/rtl8192se/rtllib/rtllib_softmac_wx.c b/ubuntu/rtl8192se/rtllib/rtllib_softmac_wx.c
new file mode 100644 (file)
index 0000000..03d96cf
--- /dev/null
@@ -0,0 +1,765 @@
+/* IEEE 802.11 SoftMAC layer
+ * Copyright (c) 2005 Andrea Merello <andreamrl@tiscali.it>
+ *
+ * Mostly extracted from the rtl8180-sa2400 driver for the 
+ * in-kernel generic ieee802.11 stack.
+ *
+ * Some pieces of code might be stolen from ipw2100 driver
+ * copyright of who own it's copyright ;-)
+ *
+ * PS wx handler mostly stolen from hostap, copyright who
+ * own it's copyright ;-)
+ *
+ * released under the GPL
+ */
+
+
+#include "rtllib.h"
+#ifdef ENABLE_DOT11D
+#include "dot11d.h"
+#endif
+/* FIXME: add A freqs */
+
+const long rtllib_wlan_frequencies[] = {  
+       2412, 2417, 2422, 2427, 
+       2432, 2437, 2442, 2447, 
+       2452, 2457, 2462, 2467, 
+       2472, 2484  
+};
+
+
+int rtllib_wx_set_freq(struct rtllib_device *ieee, struct iw_request_info *a,
+                            union iwreq_data *wrqu, char *b)
+{
+       int ret;
+       struct iw_freq *fwrq = & wrqu->freq;
+
+       down(&ieee->wx_sem);
+       
+       if(ieee->iw_mode == IW_MODE_INFRA){ 
+               ret = 0;
+               goto out;
+       }
+
+       /* if setting by freq convert to channel */
+       if (fwrq->e == 1) {
+               if ((fwrq->m >= (int) 2.412e8 &&
+                    fwrq->m <= (int) 2.487e8)) {
+                       int f = fwrq->m / 100000;
+                       int c = 0;
+                       
+                       while ((c < 14) && (f != rtllib_wlan_frequencies[c]))
+                               c++;
+                       
+                       /* hack to fall through */
+                       fwrq->e = 0;
+                       fwrq->m = c + 1;
+               }
+       }
+       
+       if (fwrq->e > 0 || fwrq->m > 14 || fwrq->m < 1 ){ 
+               ret = -EOPNOTSUPP;
+               goto out;
+       
+       }else { /* Set the channel */
+               
+#ifdef ENABLE_DOT11D
+               //we just active scan channel set here, 
+               //no_ibss/passive scan channel are not permited
+               if (ieee->active_channel_map[fwrq->m] != 1) {
+                       ret = -EINVAL;
+                       goto out;
+               }
+#endif
+               ieee->current_network.channel = fwrq->m;
+               ieee->set_chan(ieee->dev, ieee->current_network.channel);
+               
+               if(ieee->iw_mode == IW_MODE_ADHOC || ieee->iw_mode == IW_MODE_MASTER)
+                       if(ieee->state == RTLLIB_LINKED){
+                       
+                       rtllib_stop_send_beacons(ieee);
+                       rtllib_start_send_beacons(ieee);
+                       }
+       }
+
+       ret = 0;
+out:
+       up(&ieee->wx_sem);
+       return ret;
+}
+
+
+#ifdef _RTL8192_EXT_PATCH_     
+int rtllib_wx_get_freq(struct rtllib_device *ieee,
+                            struct iw_request_info *a,
+                            union iwreq_data *wrqu, char *b, u8 is_mesh)
+#else
+int rtllib_wx_get_freq(struct rtllib_device *ieee,
+                            struct iw_request_info *a,
+                            union iwreq_data *wrqu, char *b)
+#endif 
+{
+       struct iw_freq *fwrq = & wrqu->freq;
+
+#ifdef _RTL8192_EXT_PATCH_     
+       if(is_mesh)
+       {
+               if (ieee->current_mesh_network.channel == 0)
+                       return -1;
+               fwrq->m = rtllib_wlan_frequencies[ieee->current_mesh_network.channel-1] * 100000;
+               fwrq->e = 1;    
+       }
+       else
+#endif 
+       {
+       if (ieee->current_network.channel == 0)
+               return -1;
+       fwrq->m = rtllib_wlan_frequencies[ieee->current_network.channel-1] * 100000;
+       fwrq->e = 1;    
+       }
+       return 0;
+}
+
+int rtllib_wx_get_wap(struct rtllib_device *ieee, 
+                           struct iw_request_info *info, 
+                           union iwreq_data *wrqu, char *extra)
+{
+       unsigned long flags;    
+       
+       wrqu->ap_addr.sa_family = ARPHRD_ETHER;
+       
+       if (ieee->iw_mode == IW_MODE_MONITOR)
+               return -1;
+       
+       /* We want avoid to give to the user inconsistent infos*/
+       spin_lock_irqsave(&ieee->lock, flags);
+       
+       if (ieee->state != RTLLIB_LINKED && 
+               ieee->state != RTLLIB_LINKED_SCANNING &&
+               ieee->wap_set == 0)
+               
+               memset(wrqu->ap_addr.sa_data, 0, ETH_ALEN);
+       else
+               memcpy(wrqu->ap_addr.sa_data, 
+                      ieee->current_network.bssid, ETH_ALEN);
+       
+       spin_unlock_irqrestore(&ieee->lock, flags);
+       
+       return 0;
+}
+
+
+int rtllib_wx_set_wap(struct rtllib_device *ieee,
+                        struct iw_request_info *info,
+                        union iwreq_data *awrq,
+                        char *extra)
+{
+       
+       int ret = 0;
+       u8 zero[] = {0,0,0,0,0,0};
+       unsigned long flags;
+       
+       short ifup = ieee->proto_started;
+       struct sockaddr *temp = (struct sockaddr *)awrq;
+
+       rtllib_stop_scan_syncro(ieee);
+
+       down(&ieee->wx_sem);
+       /* use ifconfig hw ether */
+       if (ieee->iw_mode == IW_MODE_MASTER){
+               ret = -1;
+               goto out;
+       }
+       
+       if (temp->sa_family != ARPHRD_ETHER){
+               ret = -EINVAL;
+               goto out;
+       }
+       
+        if (memcmp(temp->sa_data, zero,ETH_ALEN) == 0){
+                spin_lock_irqsave(&ieee->lock, flags);
+                memcpy(ieee->current_network.bssid, temp->sa_data, ETH_ALEN);
+                ieee->wap_set = 0;
+                spin_unlock_irqrestore(&ieee->lock, flags);
+                ret = -1;
+                goto out;
+        }
+
+       
+       if (ifup)
+               rtllib_stop_protocol(ieee,true);
+       
+       /* just to avoid to give inconsistent infos in the
+        * get wx method. not really needed otherwise 
+        */
+       spin_lock_irqsave(&ieee->lock, flags);
+       
+       ieee->cannot_notify = false;
+       memcpy(ieee->current_network.bssid, temp->sa_data, ETH_ALEN); 
+       ieee->wap_set = (memcmp(temp->sa_data, zero,ETH_ALEN)!=0);
+       
+       spin_unlock_irqrestore(&ieee->lock, flags);
+       
+       if (ifup)
+               rtllib_start_protocol(ieee);
+out:
+       up(&ieee->wx_sem);
+       return ret;
+}
+       
+ int rtllib_wx_get_essid(struct rtllib_device *ieee, struct iw_request_info *a,union iwreq_data *wrqu,char *b)
+{
+       int len,ret = 0;
+       unsigned long flags;
+       
+       if (ieee->iw_mode == IW_MODE_MONITOR)
+               return -1;
+       
+       /* We want avoid to give to the user inconsistent infos*/       
+       spin_lock_irqsave(&ieee->lock, flags);
+       
+       if (ieee->current_network.ssid[0] == '\0' ||
+               ieee->current_network.ssid_len == 0){ 
+               ret = -1;
+               goto out;
+       }
+       
+       if (ieee->state != RTLLIB_LINKED && 
+               ieee->state != RTLLIB_LINKED_SCANNING &&
+               ieee->ssid_set == 0){
+               ret = -1;
+               goto out;
+       }
+       len = ieee->current_network.ssid_len;
+       wrqu->essid.length = len;
+       strncpy(b,ieee->current_network.ssid,len);
+       wrqu->essid.flags = 1;
+
+out:
+       spin_unlock_irqrestore(&ieee->lock, flags);
+       
+       return ret;
+       
+}
+
+int rtllib_wx_set_rate(struct rtllib_device *ieee, 
+                            struct iw_request_info *info,
+                            union iwreq_data *wrqu, char *extra)
+{
+
+       u32 target_rate = wrqu->bitrate.value;
+       
+       ieee->rate = target_rate/100000;
+       return 0; 
+}
+
+int rtllib_wx_get_rate(struct rtllib_device *ieee, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       u32 tmp_rate = 0;
+#if defined RTL8192SU|| defined RTL8192CE
+       if (ieee->mode & (IEEE_A | IEEE_B | IEEE_G))
+               tmp_rate = ieee->rate;
+       else if (ieee->mode & IEEE_N_5G)
+               tmp_rate = 580;
+       else if (ieee->mode & IEEE_N_24G) {
+               if (ieee->GetHalfNmodeSupportByAPsHandler(ieee->dev))
+                       tmp_rate = HTHalfMcsToDataRate(ieee, 15);
+               else
+                       tmp_rate = HTMcsToDataRate(ieee, 15);
+       }
+#elif defined RTL8192SE
+       tmp_rate = ieee->rtl_11n_user_show_rates(ieee->dev);
+#else
+        tmp_rate = TxCountToDataRate(ieee, ieee->softmac_stats.CurrentShowTxate);
+#endif
+       wrqu->bitrate.value = tmp_rate * 500000;
+       
+       return 0;
+}
+
+
+int rtllib_wx_set_rts(struct rtllib_device *ieee, 
+                            struct iw_request_info *info,
+                            union iwreq_data *wrqu, char *extra)
+{
+       if (wrqu->rts.disabled || !wrqu->rts.fixed)
+               ieee->rts = DEFAULT_RTS_THRESHOLD;
+       else
+       {
+               if (wrqu->rts.value < MIN_RTS_THRESHOLD ||
+                               wrqu->rts.value > MAX_RTS_THRESHOLD) 
+                       return -EINVAL;
+               ieee->rts = wrqu->rts.value;
+       }
+       return 0;
+}
+
+int rtllib_wx_get_rts(struct rtllib_device *ieee, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       wrqu->rts.value = ieee->rts;
+       wrqu->rts.fixed = 0;    /* no auto select */
+       wrqu->rts.disabled = (wrqu->rts.value == DEFAULT_RTS_THRESHOLD);
+       return 0;
+}
+
+int rtllib_wx_set_mode(struct rtllib_device *ieee, struct iw_request_info *a,
+                            union iwreq_data *wrqu, char *b)
+{
+       int set_mode_status = 0;
+
+       rtllib_stop_scan_syncro(ieee);
+       down(&ieee->wx_sem);
+       switch (wrqu->mode) {
+       case IW_MODE_MONITOR:
+       case IW_MODE_ADHOC:
+       case IW_MODE_INFRA:
+#ifdef _RTL8192_EXT_PATCH_
+       case IW_MODE_MESH:
+#endif
+               break;
+       case IW_MODE_AUTO:
+               wrqu->mode = IW_MODE_INFRA;
+               break;
+       default:
+               set_mode_status = -EINVAL;
+               goto out;
+       }
+
+       if (wrqu->mode == ieee->iw_mode)
+               goto out;
+       
+       if (wrqu->mode == IW_MODE_MONITOR) {
+#ifdef CONFIG_RTL819x_RADIOTAP
+               ieee->dev->type = ARPHRD_IEEE80211_RADIOTAP;
+#else
+               ieee->dev->type = ARPHRD_IEEE80211;
+#endif
+       } else {
+               ieee->dev->type = ARPHRD_ETHER;
+       }
+       
+       if (!ieee->proto_started) {
+               ieee->iw_mode = wrqu->mode;
+       } else {
+               rtllib_stop_protocol(ieee,true);
+               ieee->iw_mode = wrqu->mode;
+#if defined (RTL8192S_WAPI_SUPPORT)
+               if(ieee->iw_mode == IW_MODE_ADHOC)
+                       ieee->wapiInfo.bWapiPSK = true;
+#endif
+               rtllib_start_protocol(ieee);
+       }
+
+out:
+       up(&ieee->wx_sem);
+       return set_mode_status;
+}
+
+void rtllib_wx_sync_scan_wq(void *data)
+{
+       struct rtllib_device *ieee = container_of_work_rsl(data, struct rtllib_device, wx_sync_scan_wq);
+       short chan;
+       HT_EXTCHNL_OFFSET chan_offset=0;
+       HT_CHANNEL_WIDTH bandwidth=0;
+       int b40M = 0;
+       static int count = 0;
+
+       if (!(ieee->softmac_features & IEEE_SOFTMAC_SCAN)){     
+               rtllib_start_scan_syncro(ieee, 0);
+               goto out;
+       }
+
+       chan = ieee->current_network.channel;
+
+#ifdef ENABLE_LPS
+       if (ieee->LeisurePSLeave) {
+               ieee->LeisurePSLeave(ieee->dev);
+       }
+       /* notify AP to be in PS mode */
+       rtllib_sta_ps_send_null_frame(ieee, 1);
+       rtllib_sta_ps_send_null_frame(ieee, 1);
+#endif
+
+       netif_carrier_off(ieee->dev);
+       if (ieee->data_hard_stop)
+               ieee->data_hard_stop(ieee->dev);
+       rtllib_stop_send_beacons(ieee);
+       ieee->state = RTLLIB_LINKED_SCANNING;
+       ieee->link_change(ieee->dev);
+       /* wait for ps packet to be kicked out successfully */
+       msleep(50);
+
+#if !(defined RTL8192SE ||defined RTL8192CE)   
+       ieee->InitialGainHandler(ieee->dev,IG_Backup);
+#endif
+#if defined(RTL8192SE)
+#if(RTL8192S_DISABLE_FW_DM == 0)
+       if (ieee->SetFwCmdHandler) {
+               ieee->SetFwCmdHandler(ieee->dev, FW_CMD_PAUSE_DM_BY_SCAN);
+       }
+#endif
+#endif 
+#if defined RTL8192SU || defined RTL8192CE
+       ieee->ScanOperationBackupHandler(ieee->dev,SCAN_OPT_BACKUP);
+#endif
+
+       if (ieee->pHTInfo->bCurrentHTSupport && ieee->pHTInfo->bEnableHT && ieee->pHTInfo->bCurBW40MHz) {
+               b40M = 1;
+               chan_offset = ieee->pHTInfo->CurSTAExtChnlOffset;
+               bandwidth = (HT_CHANNEL_WIDTH)ieee->pHTInfo->bCurBW40MHz;
+               printk("Scan in 40M, force to 20M first:%d, %d\n", chan_offset, bandwidth);
+               ieee->SetBWModeHandler(ieee->dev, HT_CHANNEL_WIDTH_20, HT_EXTCHNL_OFFSET_NO_EXT);
+               }
+
+       rtllib_start_scan_syncro(ieee, 0);
+
+       if (b40M) {
+               printk("Scan in 20M, back to 40M\n");
+               if (chan_offset == HT_EXTCHNL_OFFSET_UPPER)
+                       ieee->set_chan(ieee->dev, chan + 2);
+               else if (chan_offset == HT_EXTCHNL_OFFSET_LOWER)
+                       ieee->set_chan(ieee->dev, chan - 2);
+               else
+                       ieee->set_chan(ieee->dev, chan);
+               ieee->SetBWModeHandler(ieee->dev, bandwidth, chan_offset);
+       } else {
+               ieee->set_chan(ieee->dev, chan);
+       }
+       
+#if !(defined RTL8192SE ||defined RTL8192CE)
+       ieee->InitialGainHandler(ieee->dev,IG_Restore);
+#endif
+
+#if defined(RTL8192SE)
+#if(RTL8192S_DISABLE_FW_DM == 0)
+       if (ieee->SetFwCmdHandler) {
+               ieee->SetFwCmdHandler(ieee->dev, FW_CMD_RESUME_DM_BY_SCAN);
+       }
+#endif
+#endif 
+#if defined RTL8192SU || defined RTL8192CE
+       ieee->ScanOperationBackupHandler(ieee->dev,SCAN_OPT_RESTORE);
+#endif
+       ieee->state = RTLLIB_LINKED;
+       ieee->link_change(ieee->dev);
+
+#ifdef ENABLE_LPS
+       /* Notify AP that I wake up again */
+       rtllib_sta_ps_send_null_frame(ieee, 0);
+#endif
+
+       if (ieee->LinkDetectInfo.NumRecvBcnInPeriod == 0 || 
+                       ieee->LinkDetectInfo.NumRecvDataInPeriod == 0 ) {
+               ieee->LinkDetectInfo.NumRecvBcnInPeriod = 1;
+               ieee->LinkDetectInfo.NumRecvDataInPeriod= 1;    
+       }
+
+       if (ieee->data_hard_resume)
+               ieee->data_hard_resume(ieee->dev);
+       
+       if(ieee->iw_mode == IW_MODE_ADHOC || ieee->iw_mode == IW_MODE_MASTER)
+               rtllib_start_send_beacons(ieee);
+       
+       netif_carrier_on(ieee->dev);
+       count = 0;      
+out:
+       up(&ieee->wx_sem);
+       
+}
+
+int rtllib_wx_set_scan(struct rtllib_device *ieee, struct iw_request_info *a,
+                            union iwreq_data *wrqu, char *b)
+{
+       int ret = 0;
+       
+       down(&ieee->wx_sem);
+       
+       if (ieee->iw_mode == IW_MODE_MONITOR || !(ieee->proto_started)){ 
+               ret = -1;
+               goto out;
+       }
+       
+       if ( ieee->state == RTLLIB_LINKED){
+               queue_work_rsl(ieee->wq, &ieee->wx_sync_scan_wq);
+               /* intentionally forget to up sem */
+               return 0;
+       }
+               
+out:
+       up(&ieee->wx_sem);
+       return ret;
+}
+
+int rtllib_wx_set_essid(struct rtllib_device *ieee, 
+                             struct iw_request_info *a,
+                             union iwreq_data *wrqu, char *extra)
+{
+       
+       int ret=0,len,i;
+       short proto_started;
+       unsigned long flags;
+       
+       rtllib_stop_scan_syncro(ieee);
+       down(&ieee->wx_sem);
+       
+       proto_started = ieee->proto_started;
+       
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20))
+       len = ((wrqu->essid.length-1) < IW_ESSID_MAX_SIZE) ? (wrqu->essid.length-1) : IW_ESSID_MAX_SIZE;
+#else
+       len = (wrqu->essid.length < IW_ESSID_MAX_SIZE) ? wrqu->essid.length : IW_ESSID_MAX_SIZE;
+#endif
+
+       if (len > IW_ESSID_MAX_SIZE){
+               ret= -E2BIG;
+               goto out;
+       }
+       
+       if (ieee->iw_mode == IW_MODE_MONITOR){
+               ret= -1;
+               goto out;
+       }
+       
+       for (i=0; i<len; i++){
+               if(extra[i] < 0){
+                       ret= -1;
+                       goto out;
+               }
+       }
+       
+       if(proto_started)
+               rtllib_stop_protocol(ieee,true);
+       
+       
+       /* this is just to be sure that the GET wx callback
+        * has consisten infos. not needed otherwise
+        */
+       spin_lock_irqsave(&ieee->lock, flags);
+       
+       if (wrqu->essid.flags && wrqu->essid.length) {
+               strncpy(ieee->current_network.ssid, extra, len);
+               ieee->current_network.ssid_len = len;
+#if 0
+               {
+                       int i;
+                       for (i=0; i<len; i++)
+                               printk("%c:%d ", extra[i], extra[i]);
+                       printk("\n");
+               }
+#endif
+               ieee->cannot_notify = false;
+               ieee->ssid_set = 1;
+       }
+       else{ 
+               ieee->ssid_set = 0;
+               ieee->current_network.ssid[0] = '\0';
+               ieee->current_network.ssid_len = 0;
+       }
+       spin_unlock_irqrestore(&ieee->lock, flags);
+       
+       if (proto_started)
+               rtllib_start_protocol(ieee);
+out:
+       up(&ieee->wx_sem);
+       return ret;
+}
+
+ int rtllib_wx_get_mode(struct rtllib_device *ieee, struct iw_request_info *a,
+                            union iwreq_data *wrqu, char *b)
+{
+#ifdef _RTL8192_EXT_PATCH_
+       if(ieee->iw_mode == IW_MODE_MESH) {
+               /* WEXT could not show mesh mode properly,
+                * just disable it */
+               if(ieee->only_mesh) {
+                       return -1;
+               } else {
+                       wrqu->mode = IW_MODE_INFRA;
+               }
+       }
+       else
+#endif
+               wrqu->mode = ieee->iw_mode;
+       return 0;
+}
+
+ int rtllib_wx_set_rawtx(struct rtllib_device *ieee, 
+                              struct iw_request_info *info, 
+                              union iwreq_data *wrqu, char *extra)
+{
+       
+       int *parms = (int *)extra;
+       int enable = (parms[0] > 0);
+       short prev = ieee->raw_tx;
+
+       down(&ieee->wx_sem);
+       
+       if(enable) 
+               ieee->raw_tx = 1;
+       else 
+               ieee->raw_tx = 0;
+
+       printk(KERN_INFO"raw TX is %s\n", 
+             ieee->raw_tx ? "enabled" : "disabled");
+
+       if(ieee->iw_mode == IW_MODE_MONITOR)
+       {
+               if(prev == 0 && ieee->raw_tx){
+                       if (ieee->data_hard_resume)
+                               ieee->data_hard_resume(ieee->dev);
+       
+                       netif_carrier_on(ieee->dev);    
+               }
+               
+               if(prev && ieee->raw_tx == 1)
+                       netif_carrier_off(ieee->dev); 
+       }
+       
+       up(&ieee->wx_sem);
+       
+       return 0;
+}
+int rtllib_wx_get_name(struct rtllib_device *ieee, 
+                            struct iw_request_info *info, 
+                            union iwreq_data *wrqu, char *extra)
+{
+       strcpy(wrqu->name, "802.11");
+
+       if (ieee->modulation & RTLLIB_CCK_MODULATION)
+               strcat(wrqu->name, "b");
+       if (ieee->modulation & RTLLIB_OFDM_MODULATION)
+               strcat(wrqu->name, "g");
+       if (ieee->mode & (IEEE_N_24G | IEEE_N_5G))
+               strcat(wrqu->name, "n");
+#if 0  
+       if((ieee->state == RTLLIB_LINKED) || 
+               (ieee->state == RTLLIB_LINKED_SCANNING))
+               strcat(wrqu->name," linked");
+       else if(ieee->state != RTLLIB_NOLINK)
+               strcat(wrqu->name," link..");
+#endif 
+       return 0;
+}
+
+
+/* this is mostly stolen from hostap */
+int rtllib_wx_set_power(struct rtllib_device *ieee,
+                                struct iw_request_info *info,
+                                union iwreq_data *wrqu, char *extra)
+{
+       int ret = 0;
+#if 1
+       if(
+               (!ieee->sta_wake_up) ||
+               (!ieee->enter_sleep_state) ||
+               (!ieee->ps_is_queue_empty)){
+               
+               RTLLIB_DEBUG(RTLLIB_DL_ERR,"%s(): PS mode is tryied to be use but driver missed a callback\n\n",__FUNCTION__);  
+       
+               return -1;
+       }
+#endif 
+       down(&ieee->wx_sem);
+       
+       if (wrqu->power.disabled){
+               printk("===>%s(): power disable\n",__FUNCTION__);
+               ieee->ps = RTLLIB_PS_DISABLED;
+               goto exit;
+       }
+       if (wrqu->power.flags & IW_POWER_TIMEOUT) {
+               ieee->ps_timeout = wrqu->power.value / 1000;
+               printk("===>%s():ps_timeout is %d\n",__FUNCTION__,ieee->ps_timeout);
+       }
+       
+       if (wrqu->power.flags & IW_POWER_PERIOD) {
+               
+               ieee->ps_period = wrqu->power.value / 1000;
+               
+       }
+       switch (wrqu->power.flags & IW_POWER_MODE) {
+       case IW_POWER_UNICAST_R:
+               ieee->ps = RTLLIB_PS_UNICAST;
+               break;
+       case IW_POWER_MULTICAST_R:
+               ieee->ps = RTLLIB_PS_MBCAST;
+               break;
+       case IW_POWER_ALL_R:
+               ieee->ps = RTLLIB_PS_UNICAST | RTLLIB_PS_MBCAST;        
+               break;
+               
+       case IW_POWER_ON:
+               break;
+               
+       default:
+               ret = -EINVAL;
+               goto exit;
+               
+       }
+exit:
+       up(&ieee->wx_sem);
+       return ret;
+
+}
+
+/* this is stolen from hostap */
+int rtllib_wx_get_power(struct rtllib_device *ieee,
+                                struct iw_request_info *info,
+                                union iwreq_data *wrqu, char *extra)
+{
+       int ret =0;
+       
+       down(&ieee->wx_sem);
+       
+       if(ieee->ps == RTLLIB_PS_DISABLED){     
+               wrqu->power.disabled = 1;
+               goto exit;
+       }
+
+       wrqu->power.disabled = 0;
+
+       if ((wrqu->power.flags & IW_POWER_TYPE) == IW_POWER_TIMEOUT) {
+               wrqu->power.flags = IW_POWER_TIMEOUT;
+               wrqu->power.value = ieee->ps_timeout * 1000;
+       } else {
+               wrqu->power.flags = IW_POWER_PERIOD;
+               wrqu->power.value = ieee->ps_period * 1000; 
+       }
+
+       if ((ieee->ps & (RTLLIB_PS_MBCAST | RTLLIB_PS_UNICAST)) == (RTLLIB_PS_MBCAST | RTLLIB_PS_UNICAST))
+               wrqu->power.flags |= IW_POWER_ALL_R;
+       else if (ieee->ps & RTLLIB_PS_MBCAST)
+               wrqu->power.flags |= IW_POWER_MULTICAST_R;
+       else
+               wrqu->power.flags |= IW_POWER_UNICAST_R;
+
+exit:
+       up(&ieee->wx_sem);
+       return ret;
+
+}
+
+#ifndef BUILT_IN_RTLLIB
+EXPORT_SYMBOL_RSL(rtllib_wx_get_essid);
+EXPORT_SYMBOL_RSL(rtllib_wx_set_essid);
+EXPORT_SYMBOL_RSL(rtllib_wx_set_rate);
+EXPORT_SYMBOL_RSL(rtllib_wx_get_rate);
+EXPORT_SYMBOL_RSL(rtllib_wx_set_wap);
+EXPORT_SYMBOL_RSL(rtllib_wx_get_wap);
+EXPORT_SYMBOL_RSL(rtllib_wx_set_mode);
+EXPORT_SYMBOL_RSL(rtllib_wx_get_mode);
+EXPORT_SYMBOL_RSL(rtllib_wx_set_scan);
+EXPORT_SYMBOL_RSL(rtllib_wx_get_freq);
+EXPORT_SYMBOL_RSL(rtllib_wx_set_freq);
+EXPORT_SYMBOL_RSL(rtllib_wx_set_rawtx);
+EXPORT_SYMBOL_RSL(rtllib_wx_get_name);
+EXPORT_SYMBOL_RSL(rtllib_wx_set_power);
+EXPORT_SYMBOL_RSL(rtllib_wx_get_power);
+EXPORT_SYMBOL_RSL(rtllib_wlan_frequencies);
+EXPORT_SYMBOL_RSL(rtllib_wx_set_rts);
+EXPORT_SYMBOL_RSL(rtllib_wx_get_rts);
+#endif
diff --git a/ubuntu/rtl8192se/rtllib/rtllib_tx.c b/ubuntu/rtl8192se/rtllib/rtllib_tx.c
new file mode 100644 (file)
index 0000000..b4b6355
--- /dev/null
@@ -0,0 +1,1583 @@
+/******************************************************************************
+
+  Copyright(c) 2003 - 2004 Intel 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., 59
+  Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
+  The full GNU General Public License is included in this distribution in the
+  file called LICENSE.
+
+  Contact Information:
+  James P. Ketrenos <ipw2100-admin@linux.intel.com>
+  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
+
+******************************************************************************
+
+  Few modifications for Realtek's Wi-Fi drivers by 
+  Andrea Merello <andreamrl@tiscali.it>
+  
+  A special thanks goes to Realtek for their support ! 
+
+******************************************************************************/
+
+#include <linux/compiler.h>
+#include <linux/errno.h>
+#include <linux/if_arp.h>
+#include <linux/in6.h>
+#include <linux/in.h>
+#include <linux/ip.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/netdevice.h>
+#include <linux/pci.h>
+#include <linux/proc_fs.h>
+#include <linux/skbuff.h>
+#include <linux/slab.h>
+#include <linux/tcp.h>
+#include <linux/types.h>
+#include <linux/version.h>
+#include <linux/wireless.h>
+#include <linux/etherdevice.h>
+#include <asm/uaccess.h>
+#include <linux/if_vlan.h>
+
+#include "rtllib.h"
+
+#ifdef RTK_DMP_PLATFORM
+#include <linux/usb_setting.h> 
+#endif
+
+/*
+
+
+802.11 Data Frame
+
+
+802.11 frame_contorl for data frames - 2 bytes
+     ,-----------------------------------------------------------------------------------------.
+bits | 0  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  a  |  b  |  c  |  d  |  e   |
+     |----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|------|
+val  | 0  |  0  |  0  |  1  |  x  |  0  |  0  |  0  |  1  |  0  |  x  |  x  |  x  |  x  |  x   |
+     |----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|------|
+desc | ^-ver-^  |  ^type-^  |  ^-----subtype-----^  | to  |from |more |retry| pwr |more |wep   |
+     |          |           | x=0 data,x=1 data+ack | DS  | DS  |frag |     | mgm |data |      |
+     '-----------------------------------------------------------------------------------------'
+                                                   /\
+                                                    |
+802.11 Data Frame                                   |
+           ,--------- 'ctrl' expands to >-----------'
+          |
+      ,--'---,-------------------------------------------------------------.
+Bytes |  2   |  2   |    6    |    6    |    6    |  2   | 0..2312 |   4  |
+      |------|------|---------|---------|---------|------|---------|------|
+Desc. | ctrl | dura |  DA/RA  |   TA    |    SA   | Sequ |  Frame  |  fcs |
+      |      | tion | (BSSID) |         |         | ence |  data   |      |
+      `--------------------------------------------------|         |------'
+Total: 28 non-data bytes                                 `----.----'
+                                                              |
+       .- 'Frame data' expands to <---------------------------'
+       |
+       V
+      ,---------------------------------------------------.
+Bytes |  1   |  1   |    1    |    3     |  2   |  0-2304 |
+      |------|------|---------|----------|------|---------|
+Desc. | SNAP | SNAP | Control |Eth Tunnel| Type | IP      |
+      | DSAP | SSAP |         |          |      | Packet  |
+      | 0xAA | 0xAA |0x03 (UI)|0x00-00-F8|      |         |
+      `-----------------------------------------|         |
+Total: 8 non-data bytes                         `----.----'
+                                                     |
+       .- 'IP Packet' expands, if WEP enabled, to <--'
+       |
+       V
+      ,-----------------------.
+Bytes |  4  |   0-2296  |  4  |
+      |-----|-----------|-----|
+Desc. | IV  | Encrypted | ICV |
+      |     | IP Packet |     |
+      `-----------------------'
+Total: 8 non-data bytes
+
+
+802.3 Ethernet Data Frame
+
+      ,-----------------------------------------.
+Bytes |   6   |   6   |  2   |  Variable |   4  |
+      |-------|-------|------|-----------|------|
+Desc. | Dest. | Source| Type | IP Packet |  fcs |
+      |  MAC  |  MAC  |      |           |      |
+      `-----------------------------------------'
+Total: 18 non-data bytes
+
+In the event that fragmentation is required, the incoming payload is split into
+N parts of size ieee->fts.  The first fragment contains the SNAP header and the
+remaining packets are just data.
+
+If encryption is enabled, each fragment payload size is reduced by enough space
+to add the prefix and postfix (IV and ICV totalling 8 bytes in the case of WEP)
+So if you have 1500 bytes of payload with ieee->fts set to 500 without
+encryption it will take 3 frames.  With WEP it will take 4 frames as the
+payload of each frame is reduced to 492 bytes.
+
+* SKB visualization
+*
+*  ,- skb->data
+* |
+* |    ETHERNET HEADER        ,-<-- PAYLOAD
+* |                           |     14 bytes from skb->data
+* |  2 bytes for Type --> ,T. |     (sizeof ethhdr)
+* |                       | | |
+* |,-Dest.--. ,--Src.---. | | |
+* |  6 bytes| | 6 bytes | | | |
+* v         | |         | | | |
+* 0         | v       1 | v | v           2
+* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+*     ^     | ^         | ^ |
+*     |     | |         | | |
+*     |     | |         | `T' <---- 2 bytes for Type
+*     |     | |         |
+*     |     | '---SNAP--' <-------- 6 bytes for SNAP
+*     |     |
+*     `-IV--' <-------------------- 4 bytes for IV (WEP)
+*
+*      SNAP HEADER
+*
+*/
+
+static u8 P802_1H_OUI[P80211_OUI_LEN] = { 0x00, 0x00, 0xf8 };
+static u8 RFC1042_OUI[P80211_OUI_LEN] = { 0x00, 0x00, 0x00 };
+
+inline int rtllib_put_snap(u8 *data, u16 h_proto)
+{
+       struct rtllib_snap_hdr *snap;
+       u8 *oui;
+
+       snap = (struct rtllib_snap_hdr *)data;
+       snap->dsap = 0xaa;
+       snap->ssap = 0xaa;
+       snap->ctrl = 0x03;
+
+       if (h_proto == 0x8137 || h_proto == 0x80f3)
+               oui = P802_1H_OUI;
+       else
+               oui = RFC1042_OUI;
+       snap->oui[0] = oui[0];
+       snap->oui[1] = oui[1];
+       snap->oui[2] = oui[2];
+
+       *(u16 *)(data + SNAP_SIZE) = htons(h_proto);
+
+       return SNAP_SIZE + sizeof(u16);
+}
+
+#ifdef _RTL8192_EXT_PATCH_
+int rtllib_encrypt_fragment(
+       struct rtllib_device *ieee,
+       struct sk_buff *frag,
+       int hdr_len,
+       u8 is_mesh,
+       u8 entry)
+#else
+int rtllib_encrypt_fragment(
+       struct rtllib_device *ieee,
+       struct sk_buff *frag,
+       int hdr_len)
+#endif
+{
+       struct rtllib_crypt_data* crypt = NULL;
+       int res;
+       
+#ifdef _RTL8192_EXT_PATCH_
+       if (entry == -1) {
+               printk("%s(): ERR!!!entry == -1\n",__FUNCTION__);
+               entry = 0;
+       }
+       if (is_mesh) {
+               crypt = ieee->cryptlist[entry]->crypt[ieee->mesh_txkeyidx]; 
+       } else
+               crypt = ieee->sta_crypt[ieee->tx_keyidx];               
+#else
+       crypt = ieee->crypt[ieee->tx_keyidx];
+#endif
+
+       if (!(crypt && crypt->ops))
+       {
+               printk("=========>%s(), crypt is null\n", __FUNCTION__);
+               return -1;
+       }
+#ifdef CONFIG_RTLLIB_CRYPT_TKIP
+       struct rtllib_hdr_1addr *header;
+
+       if (ieee->tkip_countermeasures &&
+           crypt && crypt->ops && strcmp(crypt->ops->name, "TKIP") == 0) {
+               header = (struct rtllib_hdr_1addr *) frag->data;
+               if (net_ratelimit()) {
+                       printk(KERN_DEBUG "%s: TKIP countermeasures: dropped "
+                              "TX packet to " MAC_FMT "\n",
+                              ieee->dev->name, MAC_ARG(header->addr1));
+               }
+               return -1;
+       }
+#endif
+       /* To encrypt, frame format is:
+        * IV (4 bytes), clear payload (including SNAP), ICV (4 bytes) */
+
+       /* Host-based IEEE 802.11 fragmentation for TX is not yet supported, so
+        * call both MSDU and MPDU encryption functions from here. */
+       atomic_inc(&crypt->refcnt);
+       res = 0;
+       if (crypt->ops->encrypt_msdu)
+               res = crypt->ops->encrypt_msdu(frag, hdr_len, crypt->priv);
+       if (res == 0 && crypt->ops->encrypt_mpdu)
+               res = crypt->ops->encrypt_mpdu(frag, hdr_len, crypt->priv);
+
+       atomic_dec(&crypt->refcnt);
+       if (res < 0) {
+               printk(KERN_INFO "%s: Encryption failed: len=%d.\n",
+                      ieee->dev->name, frag->len);
+               ieee->ieee_stats.tx_discards++;
+               return -1;
+       }
+
+       return 0;
+}
+
+
+void rtllib_txb_free(struct rtllib_txb *txb) {
+       if (unlikely(!txb))
+               return;
+#if 0
+       for (i = 0; i < txb->nr_frags; i++)
+               if (txb->fragments[i])
+                       dev_kfree_skb_any(txb->fragments[i]);
+#endif
+       kfree(txb);
+}
+
+struct rtllib_txb *rtllib_alloc_txb(int nr_frags, int txb_size,
+                                         int gfp_mask)
+{
+#ifdef USB_USE_ALIGNMENT
+       u32 Tmpaddr=0;
+       int alignment=0;
+#endif
+       struct rtllib_txb *txb;
+       int i;
+       txb = kmalloc(
+               sizeof(struct rtllib_txb) + (sizeof(u8*) * nr_frags),
+               gfp_mask);
+       if (!txb)
+               return NULL;
+
+       memset(txb, 0, sizeof(struct rtllib_txb));
+       txb->nr_frags = nr_frags;
+       txb->frag_size = txb_size;
+
+       for (i = 0; i < nr_frags; i++) {
+#ifdef USB_USE_ALIGNMENT
+               txb->fragments[i] = dev_alloc_skb(txb_size+USB_512B_ALIGNMENT_SIZE);
+#else
+               txb->fragments[i] = dev_alloc_skb(txb_size);
+#endif
+               if (unlikely(!txb->fragments[i])) {
+                       i--;
+                       break;
+               }
+#ifdef USB_USE_ALIGNMENT
+               Tmpaddr = (u32)(txb->fragments[i]->data);
+               alignment = Tmpaddr & 0x1ff;
+               skb_reserve(txb->fragments[i],(USB_512B_ALIGNMENT_SIZE - alignment));
+#endif
+               memset(txb->fragments[i]->cb, 0, sizeof(txb->fragments[i]->cb));
+       }
+       if (unlikely(i != nr_frags)) {
+               while (i >= 0)
+                       dev_kfree_skb_any(txb->fragments[i--]);
+               kfree(txb);
+               return NULL;
+       }
+       return txb;
+}
+
+int 
+rtllib_classify(struct sk_buff *skb, u8 bIsAmsdu)
+{
+       struct ethhdr *eth;
+       struct iphdr *ip;
+
+       eth = (struct ethhdr *)skb->data;
+       if (eth->h_proto != htons(ETH_P_IP))
+               return 0;
+
+#ifdef ENABLE_AMSDU
+       if(bIsAmsdu)
+               ip = (struct iphdr*)(skb->data + sizeof(struct ether_header) + AMSDU_SUBHEADER_LEN + SNAP_SIZE + sizeof(u16));
+       else
+               ip = (struct iphdr*)(skb->data + sizeof(struct ether_header));
+#else
+       RTLLIB_DEBUG_DATA(RTLLIB_DL_DATA, skb->data, skb->len);
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22))
+       ip = ip_hdr(skb);
+#else
+       ip = (struct iphdr*)(skb->data + sizeof(struct ether_header));
+#endif
+#endif
+       switch (ip->tos & 0xfc) {
+               case 0x20:
+                       return 2;
+               case 0x40:
+                       return 1;
+               case 0x60:
+                       return 3;
+               case 0x80:
+                       return 4;
+               case 0xa0:
+                       return 5;
+               case 0xc0:
+                       return 6;
+               case 0xe0:
+                       return 7;
+               default:
+                       return 0;
+       }
+}
+
+#define SN_LESS(a, b)          (((a-b)&0x800)!=0)
+void rtllib_tx_query_agg_cap(struct rtllib_device* ieee, struct sk_buff* skb, cb_desc* tcb_desc)
+{
+       PRT_HIGH_THROUGHPUT     pHTInfo = ieee->pHTInfo;
+       PTX_TS_RECORD                   pTxTs = NULL;
+       struct rtllib_hdr_1addr* hdr = (struct rtllib_hdr_1addr*)skb->data;
+
+       if (!pHTInfo->bCurrentHTSupport||!pHTInfo->bEnableHT)
+               return;
+       if (!IsQoSDataFrame(skb->data))
+               return;
+
+       if (is_multicast_ether_addr(hdr->addr1) || is_broadcast_ether_addr(hdr->addr1))
+               return;
+#ifdef TO_DO_LIST
+       if(pTcb->PacketLength >= 4096)
+               return;
+       if(!Adapter->HalFunc.GetNmodeSupportBySecCfgHandler(Adapter))
+               return; 
+#endif
+
+       if(tcb_desc->bdhcp || ieee->CntAfterLink<2)
+       {
+               return;
+       }
+       
+       if(pHTInfo->IOTAction & HT_IOT_ACT_TX_NO_AGGREGATION)
+               return;
+       
+       if(!ieee->GetNmodeSupportBySecCfg(ieee->dev))
+       {
+               return; 
+       }
+       if(pHTInfo->bCurrentAMPDUEnable)
+       {
+               if (!GetTs(ieee, (PTS_COMMON_INFO*)(&pTxTs), hdr->addr1, skb->priority, TX_DIR, true))
+               {
+                       printk("===>can't get TS\n");
+                       return;
+               }
+               if (pTxTs->TxAdmittedBARecord.bValid == false)
+               {
+                       if (ieee->wpa_ie_len && (ieee->pairwise_key_type == KEY_TYPE_NA)) {
+                               ;
+                       } else if (tcb_desc->bdhcp == 1){
+                               ;
+                       } else if (!pTxTs->bDisable_AddBa){
+                               TsStartAddBaProcess(ieee, pTxTs);
+                       }
+                       goto FORCED_AGG_SETTING;
+               }
+               else if (pTxTs->bUsingBa == false)
+               {
+                       if (SN_LESS(pTxTs->TxAdmittedBARecord.BaStartSeqCtrl.field.SeqNum, (pTxTs->TxCurSeq+1)%4096))
+                               pTxTs->bUsingBa = true;
+                       else
+                               goto FORCED_AGG_SETTING;
+               }
+#ifndef _RTL8192_EXT_PATCH_
+               if (ieee->iw_mode == IW_MODE_INFRA)
+#endif
+               {
+                       tcb_desc->bAMPDUEnable = true;
+                       tcb_desc->ampdu_factor = pHTInfo->CurrentAMPDUFactor;
+                       tcb_desc->ampdu_density = pHTInfo->CurrentMPDUDensity;
+               }
+       }
+FORCED_AGG_SETTING:
+       switch(pHTInfo->ForcedAMPDUMode )
+       {
+               case HT_AGG_AUTO:
+                       break;
+
+               case HT_AGG_FORCE_ENABLE:
+                       tcb_desc->bAMPDUEnable = true;
+                       tcb_desc->ampdu_density = pHTInfo->ForcedMPDUDensity;
+                       tcb_desc->ampdu_factor = pHTInfo->ForcedAMPDUFactor;
+                       break;
+
+               case HT_AGG_FORCE_DISABLE:
+                       tcb_desc->bAMPDUEnable = false;
+                       tcb_desc->ampdu_density = 0;
+                       tcb_desc->ampdu_factor = 0;
+                       break;
+
+       }       
+               return;
+}
+
+extern void rtllib_qurey_ShortPreambleMode(struct rtllib_device* ieee, cb_desc* tcb_desc)
+{
+       tcb_desc->bUseShortPreamble = false;
+       if (tcb_desc->data_rate == 2)
+       {
+               return;
+       }
+       else if (ieee->current_network.capability & WLAN_CAPABILITY_SHORT_PREAMBLE)
+       {
+               tcb_desc->bUseShortPreamble = true;
+       }
+       return; 
+}
+
+extern void    
+rtllib_query_HTCapShortGI(struct rtllib_device *ieee, cb_desc *tcb_desc)
+{
+       PRT_HIGH_THROUGHPUT             pHTInfo = ieee->pHTInfo;
+
+       tcb_desc->bUseShortGI           = false;
+
+       if(!pHTInfo->bCurrentHTSupport||!pHTInfo->bEnableHT)
+               return;
+
+       if(pHTInfo->bForcedShortGI)
+       {
+               tcb_desc->bUseShortGI = true;
+               return;
+       }
+
+       if((pHTInfo->bCurBW40MHz==true) && pHTInfo->bCurShortGI40MHz)
+               tcb_desc->bUseShortGI = true;
+       else if((pHTInfo->bCurBW40MHz==false) && pHTInfo->bCurShortGI20MHz)
+               tcb_desc->bUseShortGI = true;
+}
+
+void rtllib_query_BandwidthMode(struct rtllib_device* ieee, cb_desc *tcb_desc)
+{
+       PRT_HIGH_THROUGHPUT     pHTInfo = ieee->pHTInfo;
+
+       tcb_desc->bPacketBW = false;
+
+       if(!pHTInfo->bCurrentHTSupport||!pHTInfo->bEnableHT)
+               return;
+
+       if(tcb_desc->bMulticast || tcb_desc->bBroadcast)
+               return;
+
+       if((tcb_desc->data_rate & 0x80)==0) 
+               return;
+       if(pHTInfo->bCurBW40MHz && pHTInfo->bCurTxBW40MHz && !ieee->bandwidth_auto_switch.bforced_tx20Mhz)
+               tcb_desc->bPacketBW = true;
+       return;
+}
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+extern void rtllib_ibss_query_HTCapShortGI(struct rtllib_device *ieee, cb_desc *tcb_desc,u8 is_peer_shortGI_40M,u8 is_peer_shortGI_20M)
+{
+       PRT_HIGH_THROUGHPUT             pHTInfo = ieee->pHTInfo;
+
+       tcb_desc->bUseShortGI           = false;
+
+       if(!pHTInfo->bCurrentHTSupport||!pHTInfo->bEnableHT || (ieee->iw_mode != IW_MODE_ADHOC))
+       {
+               return;
+       }
+
+       if(pHTInfo->bForcedShortGI)
+       {
+               tcb_desc->bUseShortGI = true;
+               return;
+       }
+       if((pHTInfo->bCurBW40MHz==true) && is_peer_shortGI_40M)
+               tcb_desc->bUseShortGI = true;
+       else if((pHTInfo->bCurBW40MHz==false) && is_peer_shortGI_20M)
+               tcb_desc->bUseShortGI = true;
+}
+void rtllib_ibss_query_BandwidthMode(struct rtllib_device* ieee, cb_desc *tcb_desc, u8 is_peer_40M)
+{
+       PRT_HIGH_THROUGHPUT     pHTInfo = ieee->pHTInfo;
+
+       tcb_desc->bPacketBW = false;
+
+       if(!pHTInfo->bCurrentHTSupport||!pHTInfo->bEnableHT || (ieee->iw_mode != IW_MODE_ADHOC))
+       {
+               return;
+       }
+
+       if(tcb_desc->bMulticast || tcb_desc->bBroadcast)
+       {
+               return;
+       }
+
+       if((tcb_desc->data_rate & 0x80)==0) 
+       {
+               return;
+       }
+       if(pHTInfo->bCurBW40MHz && is_peer_40M && !ieee->bandwidth_auto_switch.bforced_tx20Mhz)
+               tcb_desc->bPacketBW = true;
+       return;
+}
+#endif
+void rtllib_query_protectionmode(struct rtllib_device* ieee, cb_desc* tcb_desc, struct sk_buff* skb)
+{
+       tcb_desc->bRTSSTBC                      = false;
+       tcb_desc->bRTSUseShortGI                = false; 
+       tcb_desc->bCTSEnable                    = false; 
+       tcb_desc->RTSSC                         = 0;            
+       tcb_desc->bRTSBW                        = false; 
+       
+       if(tcb_desc->bBroadcast || tcb_desc->bMulticast)
+               return;
+       
+       if (is_broadcast_ether_addr(skb->data+16))  
+               return;
+
+       if (ieee->mode < IEEE_N_24G) 
+       {
+               if (skb->len > ieee->rts)
+               {
+                       tcb_desc->bRTSEnable = true;
+                       tcb_desc->rts_rate = MGN_24M;
+               }
+               else if (ieee->current_network.buseprotection)
+               {
+                       tcb_desc->bRTSEnable = true;
+                       tcb_desc->bCTSEnable = true;
+                       tcb_desc->rts_rate = MGN_24M;
+               }
+               return;
+       }
+       else
+       {
+               PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo;
+               while (true)
+               {
+                       if(pHTInfo->IOTAction & HT_IOT_ACT_FORCED_CTS2SELF)
+                       {
+                               tcb_desc->bCTSEnable    = true;
+                               tcb_desc->rts_rate  =   MGN_24M;
+#if defined(RTL8192SE) || defined(RTL8192SU) || defined RTL8192CE
+                               tcb_desc->bRTSEnable = false;
+#else
+                               tcb_desc->bRTSEnable = true;
+#endif
+                               break;
+                       }
+                       else if(pHTInfo->IOTAction & (HT_IOT_ACT_FORCED_RTS|HT_IOT_ACT_PURE_N_MODE))
+                       {
+                               tcb_desc->bRTSEnable = true;
+                               tcb_desc->rts_rate  =   MGN_24M;
+                               break;
+                       }
+                       if (ieee->current_network.buseprotection)
+                       {
+                               tcb_desc->bRTSEnable = true;
+                               tcb_desc->bCTSEnable = true;
+                               tcb_desc->rts_rate = MGN_24M;
+                               break;
+                       }
+                       if(pHTInfo->bCurrentHTSupport  && pHTInfo->bEnableHT)
+                       {
+                               u8 HTOpMode = pHTInfo->CurrentOpMode;
+                               if((pHTInfo->bCurBW40MHz && (HTOpMode == 2 || HTOpMode == 3)) ||
+                                                       (!pHTInfo->bCurBW40MHz && HTOpMode == 3) )
+                               {
+                                       tcb_desc->rts_rate = MGN_24M; 
+                                       tcb_desc->bRTSEnable = true;
+                                       break;
+                               }
+                       }
+                       if (skb->len > ieee->rts)
+                       {
+                               tcb_desc->rts_rate = MGN_24M; 
+                               tcb_desc->bRTSEnable = true;
+                               break;
+                       }
+                       if(tcb_desc->bAMPDUEnable)
+                       {
+                               tcb_desc->rts_rate = MGN_24M; 
+                               tcb_desc->bRTSEnable = false;
+                               break;
+                       }
+                       goto NO_PROTECTION;
+               }
+               }
+       if( 0 )
+       {
+               tcb_desc->bCTSEnable    = true;
+               tcb_desc->rts_rate = MGN_24M;
+               tcb_desc->bRTSEnable    = true;
+       }
+       if (ieee->current_network.capability & WLAN_CAPABILITY_SHORT_PREAMBLE)
+               tcb_desc->bUseShortPreamble = true;
+       if (ieee->iw_mode == IW_MODE_MASTER)
+                       goto NO_PROTECTION;
+       return;
+NO_PROTECTION:
+       tcb_desc->bRTSEnable    = false;
+       tcb_desc->bCTSEnable    = false;
+       tcb_desc->rts_rate              = 0;
+       tcb_desc->RTSSC         = 0;
+       tcb_desc->bRTSBW                = false;
+}
+
+
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) 
+void rtllib_txrate_selectmode(struct rtllib_device* ieee, cb_desc* tcb_desc,u8 ratr_index)
+#else
+void rtllib_txrate_selectmode(struct rtllib_device* ieee, cb_desc* tcb_desc)
+#endif
+{
+#ifdef TO_DO_LIST      
+       if(!IsDataFrame(pFrame))
+       {
+               pTcb->bTxDisableRateFallBack = true;
+               pTcb->bTxUseDriverAssingedRate = true;
+               pTcb->RATRIndex = 7;
+               return;
+       }
+
+       if(pMgntInfo->ForcedDataRate!= 0)
+       {
+               pTcb->bTxDisableRateFallBack = true;
+               pTcb->bTxUseDriverAssingedRate = true;
+               return;
+       }
+#endif
+       if(ieee->bTxDisableRateFallBack)
+               tcb_desc->bTxDisableRateFallBack = true;
+
+       if(ieee->bTxUseDriverAssingedRate)
+               tcb_desc->bTxUseDriverAssingedRate = true;
+       if(!tcb_desc->bTxDisableRateFallBack || !tcb_desc->bTxUseDriverAssingedRate)
+       {
+#ifdef _RTL8192_EXT_PATCH_
+               if ((ieee->iw_mode == IW_MODE_INFRA || ieee->iw_mode == IW_MODE_ADHOC) 
+                       || (ieee->iw_mode == IW_MODE_MESH)) 
+#else                  
+               if (ieee->iw_mode == IW_MODE_INFRA || ieee->iw_mode == IW_MODE_ADHOC) 
+#endif         
+                       tcb_desc->RATRIndex = 0;
+       }
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE)
+       if(ieee->iw_mode == IW_MODE_ADHOC)
+               tcb_desc->RATRIndex = ratr_index;
+#endif
+
+#ifdef _RTL8192_EXT_PATCH_
+       if(ieee->bUseRAMask){
+               tcb_desc->macId =0;
+       }
+#endif
+}
+
+u16 rtllib_query_seqnum(struct rtllib_device*ieee, struct sk_buff* skb, u8* dst)
+{
+       u16 seqnum = 0;
+
+       if (is_multicast_ether_addr(dst) || is_broadcast_ether_addr(dst))
+               return 0;
+       if (IsQoSDataFrame(skb->data)) 
+       {
+               PTX_TS_RECORD pTS = NULL;
+               if (!GetTs(ieee, (PTS_COMMON_INFO*)(&pTS), dst, skb->priority, TX_DIR, true))
+               {
+                       return 0;
+               }
+               seqnum = pTS->TxCurSeq;
+               pTS->TxCurSeq = (pTS->TxCurSeq+1)%4096;
+               return seqnum;
+       }
+       return 0;
+}
+
+
+
+#ifdef ENABLE_AMSDU
+#if 0
+static void CB_DESC_DUMP(pcb_desc tcb, char* func)
+{
+       printk("\n%s",func);
+       printk("\n-------------------CB DESC DUMP ><------------------------");
+       printk("\npkt_size:\t %d", tcb->pkt_size);
+       printk("\nqueue_index:\t %d", tcb->queue_index);
+       printk("\nbMulticast:\t %d", tcb->bMulticast);
+       printk("\nbBroadcast:\t %d", tcb->bBroadcast);
+       printk("\nbPacketBw:\t %d", tcb->bPacketBW);
+       printk("\nbRTSEnable:\t %d", tcb->bRTSEnable);
+       printk("\nrts_rate:\t %d", tcb->rts_rate);
+       printk("\nbUseShortGI:\t %d", tcb->bUseShortGI);
+       printk("\nbAMSDU:\t %d", tcb->bAMSDU);
+       printk("\nFromAggrQ:\t %d", tcb->bFromAggrQ);
+       printk("\nRATRIndex:\t %d", tcb->RATRIndex);
+       printk("\ndata_rate:\t %d", tcb->data_rate);
+       printk("\n-------------------CB DESC DUMP <>------------------------\n");
+}
+#endif
+struct sk_buff *AMSDU_Aggregation(
+       struct rtllib_device    *ieee,
+       struct sk_buff_head             *pSendList
+       )
+{
+       struct sk_buff *        pSkb;
+       struct sk_buff *        pAggrSkb;
+       u8              i;
+       u32             total_length = 0;
+       u32             skb_len, num_skb;
+       pcb_desc        pcb;
+       u8              amsdu_shdr[AMSDU_SUBHEADER_LEN];
+       u8              padding = 0;
+       u8              *p = NULL, *q=NULL;
+       u16             ether_type;
+
+       num_skb = skb_queue_len(pSendList);
+       if(num_skb == 0)
+               return NULL;
+       if(num_skb == 1)
+       {
+               pSkb = (struct sk_buff *)skb_dequeue(pSendList);
+               memset(pSkb->cb, 0, sizeof(pSkb->cb));
+               pcb = (pcb_desc)(pSkb->cb + MAX_DEV_ADDR_SIZE);
+               pcb->bFromAggrQ = true;
+               return pSkb;
+       }
+
+       total_length += sizeof(struct ethhdr);
+       for(i=0; i<num_skb; i++)        
+       {
+               pSkb= (struct sk_buff *)skb_dequeue(pSendList);
+               if(pSkb->len <= (ETH_ALEN*2))
+               {
+                       dev_kfree_skb_any(pSkb);
+                       continue;
+               }
+               skb_len = pSkb->len - ETH_ALEN*2 + SNAP_SIZE + AMSDU_SUBHEADER_LEN;
+               if(i < (num_skb-1))
+               {
+                       skb_len += ((4-skb_len%4)==4)?0:(4-skb_len%4);
+               }
+               total_length += skb_len;
+               skb_queue_tail(pSendList, pSkb);
+       }
+       
+       pAggrSkb = dev_alloc_skb(total_length);
+       if(NULL == pAggrSkb)
+       {
+               skb_queue_purge(pSendList);
+               printk("%s: Can not alloc skb!\n", __FUNCTION__);
+               return NULL;
+       }
+       skb_put(pAggrSkb,total_length);
+       pAggrSkb->priority = pSkb->priority;
+
+       memset(pAggrSkb->cb, 0, sizeof(pAggrSkb->cb));
+       pcb = (pcb_desc)(pAggrSkb->cb + MAX_DEV_ADDR_SIZE);
+       pcb->bFromAggrQ = true;
+       pcb->bAMSDU = true;
+
+       memset(amsdu_shdr, 0, AMSDU_SUBHEADER_LEN);
+       p = pAggrSkb->data;
+       for(i=0; i<num_skb; i++)        
+       {
+               q = p;
+               pSkb= (struct sk_buff *)skb_dequeue(pSendList);
+               ether_type = ntohs(((struct ethhdr *)pSkb->data)->h_proto);
+
+               skb_len = pSkb->len - sizeof(struct ethhdr) + AMSDU_SUBHEADER_LEN + SNAP_SIZE + sizeof(u16);
+               if(i < (num_skb-1))
+               {
+                       padding = ((4-skb_len%4)==4)?0:(4-skb_len%4);
+                       skb_len += padding;
+               }
+               if(i == 0)
+               {
+                       memcpy(p, pSkb->data, sizeof(struct ethhdr));
+                       p += sizeof(struct ethhdr);
+               }
+               memcpy(amsdu_shdr, pSkb->data, (ETH_ALEN*2));
+               skb_pull(pSkb, sizeof(struct ethhdr));
+               *(u16*)(amsdu_shdr+ETH_ALEN*2) = ntohs(pSkb->len + SNAP_SIZE + sizeof(u16));
+               memcpy(p, amsdu_shdr, AMSDU_SUBHEADER_LEN);
+               p += AMSDU_SUBHEADER_LEN;
+
+               rtllib_put_snap(p, ether_type);
+               p += SNAP_SIZE + sizeof(u16);
+
+               memcpy(p, pSkb->data, pSkb->len);
+               p += pSkb->len;
+               if(padding > 0)
+               {
+                       memset(p, 0, padding);
+                       p += padding;
+                       padding = 0;
+               }
+               dev_kfree_skb_any(pSkb);
+       }
+       
+       return pAggrSkb;
+}
+
+
+/* NOTE:
+       This function return a list of SKB which is proper to be aggregated. 
+       If no proper SKB is found to do aggregation, SendList will only contain the input SKB.
+*/
+u8 AMSDU_GetAggregatibleList(
+       struct rtllib_device *  ieee,
+       struct sk_buff *                pCurSkb,
+       struct sk_buff_head             *pSendList,
+       u8                              queue_index
+       )
+{
+       struct sk_buff                  *pSkb = NULL;
+       u16                             nMaxAMSDUSize = 0;
+       u32                             AggrSize = 0;
+       u32                             nAggrSkbNum = 0;
+       u8                              padding = 0;
+       struct sta_info                 *psta = NULL;   
+       u8                              *addr = (u8*)(pCurSkb->data);   
+       struct sk_buff_head *header;
+       struct sk_buff    *punlinkskb = NULL;   
+
+       padding = ((4-pCurSkb->len%4)==4)?0:(4-pCurSkb->len%4);
+       AggrSize = AMSDU_SUBHEADER_LEN + pCurSkb->len + padding;
+       skb_queue_tail(pSendList, pCurSkb);
+       nAggrSkbNum++;
+
+       if(ieee->iw_mode == IW_MODE_MASTER){    
+               psta = GetStaInfo(ieee, addr);
+               if(NULL != psta)
+                       nMaxAMSDUSize = psta->htinfo.AMSDU_MaxSize;
+               else
+                       return 1;
+       }else if(ieee->iw_mode == IW_MODE_ADHOC){
+               psta = GetStaInfo(ieee, addr);
+               if(NULL != psta)
+                       nMaxAMSDUSize = psta->htinfo.AMSDU_MaxSize;
+               else
+                       return 1;
+       }else{
+               nMaxAMSDUSize = ieee->pHTInfo->nCurrent_AMSDU_MaxSize;
+       }
+       nMaxAMSDUSize = ((nMaxAMSDUSize)==0)?HT_AMSDU_SIZE_4K:HT_AMSDU_SIZE_8K;
+
+       if(ieee->pHTInfo->ForcedAMSDUMode == HT_AGG_FORCE_ENABLE)
+       {
+               nMaxAMSDUSize = ieee->pHTInfo->ForcedAMSDUMaxSize;
+       }
+       
+       header = (&ieee->skb_aggQ[queue_index]);
+       pSkb = header->next;
+       while(pSkb != (struct sk_buff*)header)
+       {
+               if((ieee->iw_mode == IW_MODE_MASTER) ||(ieee->iw_mode == IW_MODE_ADHOC))
+               {
+                       if(memcmp(pCurSkb->data, pSkb->data, ETH_ALEN) != 0) 
+                       {
+                               pSkb = pSkb->next;
+                               continue;                               
+                       }
+               }
+               if((AMSDU_SUBHEADER_LEN + pSkb->len + AggrSize < nMaxAMSDUSize) )
+               {
+                       punlinkskb = pSkb;
+                       pSkb = pSkb->next;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14)
+                       skb_unlink(punlinkskb, header); 
+#else
+                       /*
+                        * __skb_unlink before linux2.6.14 does not use spinlock to protect list head.
+                        * add spinlock function manually. john,2008/12/03
+                        */
+                       {
+                               unsigned long flags;
+                               spin_lock_irqsave(&ieee->lock, flags);
+                               __skb_unlink(punlinkskb,header);
+                               spin_unlock_irqrestore(&ieee->lock, flags);
+                       }
+#endif
+                       
+                       padding = ((4-punlinkskb->len%4)==4)?0:(4-punlinkskb->len%4);
+                       AggrSize += AMSDU_SUBHEADER_LEN + punlinkskb->len + padding;
+                       skb_queue_tail(pSendList, punlinkskb);
+                       nAggrSkbNum++;
+               }
+               else
+               {
+                       if(!(AMSDU_SUBHEADER_LEN + pSkb->len + AggrSize < nMaxAMSDUSize))
+                               ;
+               
+                       break; 
+               }
+       }
+       return nAggrSkbNum;
+}
+#endif
+static int wme_downgrade_ac(struct sk_buff *skb)
+{
+       switch (skb->priority) {
+               case 6:
+               case 7:
+                       skb->priority = 5; /* VO -> VI */
+                       return 0;
+               case 4:
+               case 5:
+                       skb->priority = 3; /* VI -> BE */
+                       return 0;
+               case 0:
+               case 3:
+                       skb->priority = 1; /* BE -> BK */
+                       return 0;
+               default:
+                       return -1;
+       }
+}
+
+int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev)
+{
+       struct rtllib_device *ieee = (struct rtllib_device *)netdev_priv_rsl(dev);
+       struct rtllib_txb *txb = NULL;
+       struct rtllib_hdr_3addrqos *frag_hdr;
+       int i, bytes_per_frag, nr_frags, bytes_last_frag, frag_size;
+       unsigned long flags;
+       struct net_device_stats *stats = &ieee->stats;
+       int ether_type = 0, encrypt;
+       int bytes, fc, qos_ctl = 0, hdr_len;
+       struct sk_buff *skb_frag;
+       struct rtllib_hdr_3addrqos header = { /* Ensure zero initialized */
+               .duration_id = 0,
+               .seq_ctl = 0,
+               .qos_ctl = 0
+       };
+       u8 dest[ETH_ALEN], src[ETH_ALEN];
+       int qos_actived = ieee->current_network.qos_data.active;
+       struct rtllib_crypt_data* crypt = NULL;
+       cb_desc *tcb_desc;
+       u8 bIsMulticast = false;
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) 
+       struct sta_info *p_sta = NULL;
+#endif 
+       u8 IsAmsdu = false;
+#ifdef ENABLE_AMSDU    
+       u8 queue_index = WME_AC_BE;
+       cb_desc *tcb_desc_skb;
+       u8 bIsSptAmsdu = false;
+#endif 
+
+       bool    bdhcp =false;
+#ifndef _RTL8192_EXT_PATCH_
+#endif
+#ifdef RTL8192S_WAPI_SUPPORT
+       static u8 zero14[14] = {0};
+#endif
+       spin_lock_irqsave(&ieee->lock, flags);
+
+       /* If there is no driver handler to take the TXB, dont' bother
+        * creating it... */
+       if ((!ieee->hard_start_xmit && !(ieee->softmac_features & IEEE_SOFTMAC_TX_QUEUE))||
+          ((!ieee->softmac_data_hard_start_xmit && (ieee->softmac_features & IEEE_SOFTMAC_TX_QUEUE)))) {
+               printk(KERN_WARNING "%s: No xmit handler.\n",
+                      ieee->dev->name);
+               goto success;
+       }
+       
+
+       if(likely(ieee->raw_tx == 0)){
+               if (unlikely(skb->len < SNAP_SIZE + sizeof(u16))) {
+                       printk(KERN_WARNING "%s: skb too small (%d).\n",
+                       ieee->dev->name, skb->len);
+                       goto success;
+               }
+#ifdef RTL8192S_WAPI_SUPPORT
+               if(memcmp(skb->data, zero14, sizeof(zero14))==0){
+                       if(WapiSendWaiPacket(ieee, skb)< 0)
+                               goto failed;
+                       else{
+                               spin_unlock_irqrestore(&ieee->lock, flags);
+                               return 0;
+                       }
+               }
+#endif
+               /* Save source and destination addresses */
+               memcpy(dest, skb->data, ETH_ALEN);
+               memcpy(src, skb->data+ETH_ALEN, ETH_ALEN);
+       
+#ifdef ENABLE_AMSDU    
+               if(ieee->iw_mode == IW_MODE_ADHOC)
+               {
+                       p_sta = GetStaInfo(ieee, dest);
+                       if(p_sta)       {
+                               if(p_sta->htinfo.bEnableHT)
+                                       bIsSptAmsdu = true;
+                       }
+               }else if(ieee->iw_mode == IW_MODE_INFRA) {
+                       bIsSptAmsdu = true;
+               }else
+                       bIsSptAmsdu = true;
+               bIsSptAmsdu = (bIsSptAmsdu && ieee->pHTInfo->bCurrent_AMSDU_Support && qos_actived);
+                       
+               tcb_desc_skb = (pcb_desc)(skb->cb + MAX_DEV_ADDR_SIZE);  
+               if(bIsSptAmsdu) {
+                       if(!tcb_desc_skb->bFromAggrQ)  
+                       {
+                               if(qos_actived)
+                               {
+                                       queue_index = UP2AC(skb->priority);
+                               } else {
+                                       queue_index = WME_AC_BE;
+                               }
+
+                               if ((skb_queue_len(&ieee->skb_aggQ[queue_index]) != 0)||
+#if defined RTL8192SE || defined RTL8192CE
+                                  (ieee->get_nic_desc_num(ieee->dev,queue_index)) > 1||
+#else
+                                  (!ieee->check_nic_enough_desc(ieee->dev,queue_index))||
+#endif
+                                  (ieee->queue_stop) ||
+                                  (ieee->amsdu_in_process)) 
+                               {
+                                       /* insert the skb packet to the Aggregation queue */
+                                       skb_queue_tail(&ieee->skb_aggQ[queue_index], skb);
+                                       spin_unlock_irqrestore(&ieee->lock, flags);
+                                       return 0;
+                               }
+                       }
+                       else  
+                       {
+                               if(tcb_desc_skb->bAMSDU)
+                                       IsAmsdu = true;
+                               
+                               ieee->amsdu_in_process = false;
+                       }
+               }
+#endif 
+               memset(skb->cb, 0, sizeof(skb->cb));
+               ether_type = ntohs(((struct ethhdr *)skb->data)->h_proto);
+
+               if (skb->len > 282){
+                       if (ETH_P_IP == ether_type) {
+                               const struct iphdr *ip = (struct iphdr *)((u8 *)skb->data+14);
+                               if (IPPROTO_UDP == ip->protocol) {
+                                       struct udphdr *udp = (struct udphdr *)((u8 *)ip + (ip->ihl << 2));
+                                       if(((((u8 *)udp)[1] == 68) && (((u8 *)udp)[3] == 67)) ||
+                                           ((((u8 *)udp)[1] == 67) && (((u8 *)udp)[3] == 68))) {
+                                               printk("DHCP pkt src port:%d, dest port:%d!!\n", ((u8 *)udp)[1],((u8 *)udp)[3]);
+
+                                               bdhcp = true;
+#ifdef _RTL8192_EXT_PATCH_
+                                               ieee->LPSDelayCnt = 100;
+#else
+                                               ieee->LPSDelayCnt = 100;
+#endif 
+                                       }
+                               }
+                       }else if(ETH_P_ARP == ether_type){
+                               printk("=================>DHCP Protocol start tx ARP pkt!!\n");
+                               bdhcp = true;
+                               ieee->LPSDelayCnt = ieee->current_network.tim.tim_count;
+
+
+                       }
+               }
+               
+               skb->priority = rtllib_classify(skb, IsAmsdu);
+#ifdef RTL8192S_WAPI_SUPPORT
+               if(ieee->WapiSupport && ieee->wapiInfo.bWapiEnable){
+                       crypt = NULL;
+                       encrypt = !(ether_type == ETH_P_PAE && ieee->ieee802_1x) &&
+                               ieee->host_encrypt && ieee->WapiSupport && ieee->wapiInfo.bWapiEnable;
+               }
+               else{
+#endif 
+#ifdef _RTL8192_EXT_PATCH_
+               crypt = ieee->sta_crypt[ieee->tx_keyidx];
+#else
+               crypt = ieee->crypt[ieee->tx_keyidx];
+#endif 
+               encrypt = !(ether_type == ETH_P_PAE && ieee->ieee802_1x) &&
+                       ieee->host_encrypt && crypt && crypt->ops;
+#ifdef RTL8192S_WAPI_SUPPORT
+               }
+#endif         
+               if (!encrypt && ieee->ieee802_1x &&
+               ieee->drop_unencrypted && ether_type != ETH_P_PAE) {
+                       stats->tx_dropped++;
+                       goto success;
+               }
+       #ifdef CONFIG_RTLLIB_DEBUG
+               if (crypt && !encrypt && ether_type == ETH_P_PAE) {
+                       struct eapol *eap = (struct eapol *)(skb->data +
+                               sizeof(struct ethhdr) - SNAP_SIZE - sizeof(u16));
+                       RTLLIB_DEBUG_EAP("TX: IEEE 802.11 EAPOL frame: %s\n",
+                               eap_get_type(eap->type));
+               }
+       #endif
+       
+               /* Advance the SKB to the start of the payload */
+               skb_pull(skb, sizeof(struct ethhdr));
+
+                /* Determine total amount of storage required for TXB packets */
+#ifdef ENABLE_AMSDU    
+               if(!IsAmsdu)
+                       bytes = skb->len + SNAP_SIZE + sizeof(u16);
+               else
+                       bytes = skb->len;
+#else
+               bytes = skb->len + SNAP_SIZE + sizeof(u16);
+#endif 
+
+               if (encrypt)
+                       fc = RTLLIB_FTYPE_DATA | RTLLIB_FCTL_WEP;
+               else 
+                       fc = RTLLIB_FTYPE_DATA; 
+               
+               if(qos_actived)
+                       fc |= RTLLIB_STYPE_QOS_DATA; 
+               else
+                       fc |= RTLLIB_STYPE_DATA;
+       
+#ifdef _RTL8192_EXT_PATCH_
+               if ((ieee->iw_mode == IW_MODE_INFRA) 
+                       || (ieee->iw_mode == IW_MODE_MESH) ) 
+#else
+               if (ieee->iw_mode == IW_MODE_INFRA) 
+#endif
+               {
+                       fc |= RTLLIB_FCTL_TODS;
+                       /* To DS: Addr1 = BSSID, Addr2 = SA,
+                       Addr3 = DA */
+                       memcpy(&header.addr1, ieee->current_network.bssid, ETH_ALEN);
+                       memcpy(&header.addr2, &src, ETH_ALEN);
+                       if(IsAmsdu)
+                               memcpy(&header.addr3, ieee->current_network.bssid, ETH_ALEN);
+                       else
+                               memcpy(&header.addr3, &dest, ETH_ALEN);
+               } else if (ieee->iw_mode == IW_MODE_ADHOC) {
+                       /* not From/To DS: Addr1 = DA, Addr2 = SA,
+                       Addr3 = BSSID */
+                       memcpy(&header.addr1, dest, ETH_ALEN);
+                       memcpy(&header.addr2, src, ETH_ALEN);
+                       memcpy(&header.addr3, ieee->current_network.bssid, ETH_ALEN);
+               }
+
+               bIsMulticast = is_broadcast_ether_addr(header.addr1) ||is_multicast_ether_addr(header.addr1);
+
+                header.frame_ctl = cpu_to_le16(fc);
+
+               /* Determine fragmentation size based on destination (multicast
+               * and broadcast are not fragmented) */
+               if (bIsMulticast) {
+                       frag_size = MAX_FRAG_THRESHOLD;
+                       qos_ctl |= QOS_CTL_NOTCONTAIN_ACK;
+               }
+               else {
+#ifdef ENABLE_AMSDU    
+                       if(bIsSptAmsdu) {
+                               if(ieee->iw_mode == IW_MODE_ADHOC) {
+                                       if(p_sta)
+                                               frag_size = p_sta->htinfo.AMSDU_MaxSize;
+                                       else
+                                               frag_size = ieee->pHTInfo->nAMSDU_MaxSize;
+                               }
+                               else
+                                       frag_size = ieee->pHTInfo->nAMSDU_MaxSize;
+                               qos_ctl = 0;
+                       }
+                       else
+#endif 
+                       {
+                               frag_size = ieee->fts;
+                               qos_ctl = 0;
+                       }
+               }
+       
+               if(qos_actived)
+               {
+                       hdr_len = RTLLIB_3ADDR_LEN + 2;
+
+                    /* in case we are a client verify acm is not set for this ac */
+                    while (unlikely(ieee->wmm_acm & (0x01 << skb->priority))) {
+                        printk("skb->priority = %x\n", skb->priority);
+                        if (wme_downgrade_ac(skb)) {
+                            break;
+                        }
+                        printk("converted skb->priority = %x\n", skb->priority);
+                    }
+                    qos_ctl |= skb->priority; 
+#ifdef ENABLE_AMSDU    
+                       if(IsAmsdu)
+                       {
+                               qos_ctl |= QOS_CTL_AMSDU_PRESENT;
+                       }
+                    header.qos_ctl = cpu_to_le16(qos_ctl);
+#else  
+                    header.qos_ctl = cpu_to_le16(qos_ctl & RTLLIB_QOS_TID);
+#endif
+               } else {
+                       hdr_len = RTLLIB_3ADDR_LEN;             
+               }
+               /* Determine amount of payload per fragment.  Regardless of if
+               * this stack is providing the full 802.11 header, one will
+               * eventually be affixed to this fragment -- so we must account for
+               * it when determining the amount of payload space. */
+               bytes_per_frag = frag_size - hdr_len;
+               if (ieee->config &
+               (CFG_RTLLIB_COMPUTE_FCS | CFG_RTLLIB_RESERVE_FCS))
+                       bytes_per_frag -= RTLLIB_FCS_LEN;
+       
+               /* Each fragment may need to have room for encryptiong pre/postfix */
+               if (encrypt) {
+#ifdef RTL8192S_WAPI_SUPPORT
+                       if(ieee->WapiSupport && ieee->wapiInfo.bWapiEnable)
+                               bytes_per_frag -= ieee->wapiInfo.extra_prefix_len +
+                                       ieee->wapiInfo.extra_postfix_len;
+                       else
+#endif
+                       bytes_per_frag -= crypt->ops->extra_prefix_len +
+                               crypt->ops->extra_postfix_len;
+               }
+               /* Number of fragments is the total bytes_per_frag /
+               * payload_per_fragment */
+               nr_frags = bytes / bytes_per_frag;
+               bytes_last_frag = bytes % bytes_per_frag;
+               if (bytes_last_frag)
+                       nr_frags++;
+               else
+                       bytes_last_frag = bytes_per_frag;
+       
+               /* When we allocate the TXB we allocate enough space for the reserve
+               * and full fragment bytes (bytes_per_frag doesn't include prefix,
+               * postfix, header, FCS, etc.) */
+               txb = rtllib_alloc_txb(nr_frags, frag_size + ieee->tx_headroom, GFP_ATOMIC);
+               if (unlikely(!txb)) {
+                       printk(KERN_WARNING "%s: Could not allocate TXB\n",
+                       ieee->dev->name);
+                       goto failed;
+               }
+               txb->encrypted = encrypt;
+               txb->payload_size = bytes;
+
+               if(qos_actived)
+               {
+                       txb->queue_index = UP2AC(skb->priority);
+               } else {
+                       txb->queue_index = WME_AC_BE;;
+               }
+
+               for (i = 0; i < nr_frags; i++) {
+                       skb_frag = txb->fragments[i];
+                       tcb_desc = (cb_desc *)(skb_frag->cb + MAX_DEV_ADDR_SIZE);
+#ifdef _RTL8192_EXT_PATCH_
+                       tcb_desc->mesh_pkt = 0;
+                       if(ieee->iw_mode == IW_MODE_ADHOC)
+                               tcb_desc->badhoc = 1;
+                       else
+                               tcb_desc->badhoc = 0;
+#endif
+                       if(qos_actived){
+                               skb_frag->priority = skb->priority;
+                               tcb_desc->queue_index =  UP2AC(skb->priority);
+                       } else {
+                               skb_frag->priority = WME_AC_BE;
+                               tcb_desc->queue_index = WME_AC_BE;
+                       }
+                       skb_reserve(skb_frag, ieee->tx_headroom);
+
+                       if (encrypt){
+                               if (ieee->hwsec_active)
+                                       tcb_desc->bHwSec = 1;
+                               else
+                                       tcb_desc->bHwSec = 0;
+#ifdef RTL8192S_WAPI_SUPPORT
+                               if(ieee->WapiSupport && ieee->wapiInfo.bWapiEnable)
+                                       skb_reserve(skb_frag, ieee->wapiInfo.extra_prefix_len);
+                               else
+#endif 
+                               skb_reserve(skb_frag, crypt->ops->extra_prefix_len);
+                       }
+                       else
+                       {
+                               tcb_desc->bHwSec = 0;
+                       }
+                       frag_hdr = (struct rtllib_hdr_3addrqos *)skb_put(skb_frag, hdr_len);
+                       memcpy(frag_hdr, &header, hdr_len);
+       
+                       /* If this is not the last fragment, then add the MOREFRAGS
+                       * bit to the frame control */
+                       if (i != nr_frags - 1) {
+                               frag_hdr->frame_ctl = cpu_to_le16(
+                                       fc | RTLLIB_FCTL_MOREFRAGS);
+                               bytes = bytes_per_frag;
+               
+                       } else {
+                               /* The last fragment takes the remaining length */
+                               bytes = bytes_last_frag;
+                       }
+                       if((qos_actived) && (!bIsMulticast))
+                       {       
+                               frag_hdr->seq_ctl = rtllib_query_seqnum(ieee, skb_frag, header.addr1); 
+                               frag_hdr->seq_ctl = cpu_to_le16(frag_hdr->seq_ctl<<4 | i);
+                       } else {
+                               frag_hdr->seq_ctl = cpu_to_le16(ieee->seq_ctrl[0]<<4 | i);
+                       }
+                       /* Put a SNAP header on the first fragment */
+#ifdef ENABLE_AMSDU    
+                       if ((i == 0) && (!IsAmsdu)) 
+#else
+                       if (i == 0) 
+#endif 
+                       {
+                               rtllib_put_snap(
+                                       skb_put(skb_frag, SNAP_SIZE + sizeof(u16)),
+                                       ether_type);
+                               bytes -= SNAP_SIZE + sizeof(u16);
+                       }
+       
+                       memcpy(skb_put(skb_frag, bytes), skb->data, bytes);
+       
+                       /* Advance the SKB... */
+                       skb_pull(skb, bytes);
+       
+                       /* Encryption routine will move the header forward in order
+                       * to insert the IV between the header and the payload */
+                       if (encrypt) {
+#ifdef RTL8192S_WAPI_SUPPORT
+                               if(ieee->WapiSupport && ieee->wapiInfo.bWapiEnable){
+                                       if(SecSMS4HeaderFillIV(ieee, skb_frag) == 0){
+                                               SecSWSMS4Encryption(ieee, skb_frag);
+                                       }
+                               }
+                               else
+#endif         
+                               {
+
+#ifdef _RTL8192_EXT_PATCH_
+                               rtllib_encrypt_fragment(ieee, skb_frag, hdr_len, 0, 0);
+#else
+                               rtllib_encrypt_fragment(ieee, skb_frag, hdr_len);
+#endif
+                               }
+                       }
+                       if (ieee->config &
+                       (CFG_RTLLIB_COMPUTE_FCS | CFG_RTLLIB_RESERVE_FCS))
+                               skb_put(skb_frag, 4);
+               }
+
+               if((qos_actived) && (!bIsMulticast))
+               {
+                 if (ieee->seq_ctrl[UP2AC(skb->priority) + 1] == 0xFFF)
+                       ieee->seq_ctrl[UP2AC(skb->priority) + 1] = 0;
+                 else
+                       ieee->seq_ctrl[UP2AC(skb->priority) + 1]++;
+               } else {
+                 if (ieee->seq_ctrl[0] == 0xFFF)
+                       ieee->seq_ctrl[0] = 0;
+                 else
+                       ieee->seq_ctrl[0]++;
+               }
+       }else{
+               if (unlikely(skb->len < sizeof(struct rtllib_hdr_3addr))) {
+                       printk(KERN_WARNING "%s: skb too small (%d).\n",
+                       ieee->dev->name, skb->len);
+                       goto success;
+               }
+       
+               txb = rtllib_alloc_txb(1, skb->len, GFP_ATOMIC);
+               if(!txb){
+                       printk(KERN_WARNING "%s: Could not allocate TXB\n",
+                       ieee->dev->name);
+                       goto failed;
+               }
+               
+               txb->encrypted = 0;
+               txb->payload_size = skb->len;
+               memcpy(skb_put(txb->fragments[0],skb->len), skb->data, skb->len);
+       }       
+
+ success:
+       if (txb)
+       {
+#if 1  
+               cb_desc *tcb_desc = (cb_desc *)(txb->fragments[0]->cb + MAX_DEV_ADDR_SIZE);
+               tcb_desc->bTxEnableFwCalcDur = 1;
+               tcb_desc->priority = skb->priority;
+
+                if(ether_type == ETH_P_PAE) {
+                       if(ieee->pHTInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom)       
+                       {
+                               tcb_desc->data_rate = MgntQuery_TxRateExcludeCCKRates(ieee);
+                               tcb_desc->bTxDisableRateFallBack = false;
+                       }else{
+                        tcb_desc->data_rate = ieee->basic_rate;
+                        tcb_desc->bTxDisableRateFallBack = 1;
+                       }
+                       
+                       
+                        tcb_desc->RATRIndex = 7;                        
+                        tcb_desc->bTxUseDriverAssingedRate = 1;
+                } else {
+               if (is_multicast_ether_addr(header.addr1))
+                       tcb_desc->bMulticast = 1;
+               if (is_broadcast_ether_addr(header.addr1))
+                       tcb_desc->bBroadcast = 1;
+#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) 
+               if ( tcb_desc->bMulticast ||  tcb_desc->bBroadcast){
+                       rtllib_txrate_selectmode(ieee, tcb_desc, 7);  
+                       tcb_desc->data_rate = ieee->basic_rate;
+               }
+               else
+               {
+                       if(ieee->iw_mode == IW_MODE_ADHOC)
+                       {
+                               u8 is_peer_shortGI_40M = 0;
+                               u8 is_peer_shortGI_20M = 0;
+                               u8 is_peer_BW_40M = 0;
+                               p_sta = GetStaInfo(ieee, header.addr1);
+                               if(NULL == p_sta)
+                               {
+                                       rtllib_txrate_selectmode(ieee, tcb_desc, 7);
+                                       tcb_desc->data_rate = ieee->rate;
+                               }
+                               else
+                               {
+                                       rtllib_txrate_selectmode(ieee, tcb_desc, p_sta->ratr_index);
+                                       tcb_desc->data_rate = CURRENT_RATE(p_sta->wireless_mode, p_sta->CurDataRate, p_sta->htinfo.HTHighestOperaRate);
+                                       is_peer_shortGI_40M = p_sta->htinfo.bCurShortGI40MHz;
+                                       is_peer_shortGI_20M = p_sta->htinfo.bCurShortGI20MHz;
+                                       is_peer_BW_40M = p_sta->htinfo.bCurTxBW40MHz;
+                               }
+                               rtllib_qurey_ShortPreambleMode(ieee, tcb_desc);
+                               rtllib_tx_query_agg_cap(ieee, txb->fragments[0], tcb_desc);
+                               rtllib_ibss_query_HTCapShortGI(ieee, tcb_desc,is_peer_shortGI_40M,is_peer_shortGI_20M); 
+                               rtllib_ibss_query_BandwidthMode(ieee, tcb_desc,is_peer_BW_40M);
+                               rtllib_query_protectionmode(ieee, tcb_desc, txb->fragments[0]);
+                       }
+                       else {
+                               rtllib_txrate_selectmode(ieee, tcb_desc, 0); 
+                               tcb_desc->data_rate = CURRENT_RATE(ieee->mode, ieee->rate, ieee->HTCurrentOperaRate);
+                               if(bdhcp == true){
+                                       if(ieee->pHTInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom) {
+                                               tcb_desc->data_rate = MGN_1M;
+                                               tcb_desc->bTxDisableRateFallBack = false;
+                                       }else{
+                                               tcb_desc->data_rate = MGN_1M;
+                                               tcb_desc->bTxDisableRateFallBack = 1;
+                                       }
+
+                                       tcb_desc->RATRIndex = 7;
+                                       tcb_desc->bTxUseDriverAssingedRate = 1;
+                                       tcb_desc->bdhcp = 1;
+                               }
+                               rtllib_qurey_ShortPreambleMode(ieee, tcb_desc);
+                               rtllib_tx_query_agg_cap(ieee, txb->fragments[0], tcb_desc);
+                               rtllib_query_HTCapShortGI(ieee, tcb_desc); 
+                               rtllib_query_BandwidthMode(ieee, tcb_desc);
+                               rtllib_query_protectionmode(ieee, tcb_desc, txb->fragments[0]);
+                               
+                       }
+               }
+#else
+               rtllib_txrate_selectmode(ieee, tcb_desc);
+               if ( tcb_desc->bMulticast ||  tcb_desc->bBroadcast)
+                       tcb_desc->data_rate = ieee->basic_rate;
+               else
+                       tcb_desc->data_rate = CURRENT_RATE(ieee->mode, ieee->rate, ieee->HTCurrentOperaRate);
+
+               if(bdhcp == true){
+                       if(ieee->pHTInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom)       
+                       {
+                               tcb_desc->data_rate = MGN_1M;
+                               tcb_desc->bTxDisableRateFallBack = false;
+                       }else{
+                               tcb_desc->data_rate = MGN_1M;
+                    tcb_desc->bTxDisableRateFallBack = 1;
+                       }
+
+                       
+                       tcb_desc->RATRIndex = 7;
+                    tcb_desc->bTxUseDriverAssingedRate = 1;
+                       tcb_desc->bdhcp = 1;
+                }
+               
+               rtllib_qurey_ShortPreambleMode(ieee, tcb_desc);
+               rtllib_tx_query_agg_cap(ieee, txb->fragments[0], tcb_desc);
+               rtllib_query_HTCapShortGI(ieee, tcb_desc); 
+               rtllib_query_BandwidthMode(ieee, tcb_desc);
+               rtllib_query_protectionmode(ieee, tcb_desc, txb->fragments[0]);
+#endif
+                }              
+#endif
+       }
+       spin_unlock_irqrestore(&ieee->lock, flags);
+       dev_kfree_skb_any(skb);
+       if (txb) {
+               if (ieee->softmac_features & IEEE_SOFTMAC_TX_QUEUE){
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18))
+                       dev->stats.tx_packets++;
+                       dev->stats.tx_bytes += txb->payload_size;
+#endif 
+                       rtllib_softmac_xmit(txb, ieee);
+               }else{
+                       if ((*ieee->hard_start_xmit)(txb, dev) == 0) {
+                               stats->tx_packets++;
+                               stats->tx_bytes += txb->payload_size;
+                               return 0;
+                       }
+                       rtllib_txb_free(txb);
+               }
+       }
+
+       return 0;
+
+ failed:
+       spin_unlock_irqrestore(&ieee->lock, flags);
+       netif_stop_queue(dev);
+       stats->tx_errors++;
+       return 1;
+
+}
+int rtllib_xmit(struct sk_buff *skb, struct net_device *dev)
+{
+       memset(skb->cb, 0, sizeof(skb->cb));
+       return rtllib_xmit_inter(skb, dev);
+}
+
+
+#ifndef BUILT_IN_RTLLIB
+EXPORT_SYMBOL_RSL(rtllib_txb_free);
+#ifdef ENABLE_AMSDU
+EXPORT_SYMBOL_RSL(rtllib_xmit_inter);
+EXPORT_SYMBOL_RSL(AMSDU_Aggregation);
+EXPORT_SYMBOL_RSL(AMSDU_GetAggregatibleList);
+#endif
+#ifdef _RTL8192_EXT_PATCH_
+EXPORT_SYMBOL_RSL(rtllib_query_seqnum);
+EXPORT_SYMBOL_RSL(rtllib_alloc_txb);
+EXPORT_SYMBOL_RSL(rtllib_encrypt_fragment);
+#endif 
+#endif
diff --git a/ubuntu/rtl8192se/rtllib/rtllib_wx.c b/ubuntu/rtl8192se/rtllib/rtllib_wx.c
new file mode 100644 (file)
index 0000000..924e578
--- /dev/null
@@ -0,0 +1,1351 @@
+/******************************************************************************
+
+  Copyright(c) 2004 Intel Corporation. All rights reserved.
+
+  Portions of this file are based on the WEP enablement code provided by the
+  Host AP project hostap-drivers v0.1.3
+  Copyright (c) 2001-2002, SSH Communications Security Corp and Jouni Malinen
+  <jkmaline@cc.hut.fi>
+  Copyright (c) 2002-2003, Jouni Malinen <jkmaline@cc.hut.fi>
+
+  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., 59
+  Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
+  The full GNU General Public License is included in this distribution in the
+  file called LICENSE.
+
+  Contact Information:
+  James P. Ketrenos <ipw2100-admin@linux.intel.com>
+  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
+
+******************************************************************************/
+#include <linux/wireless.h>
+#include <linux/version.h>
+#include <linux/kmod.h>
+#include <linux/module.h>
+
+#include "rtllib.h"
+#if 0
+static const char *rtllib_modes[] = {
+       "?", "a", "b", "ab", "g", "ag", "bg", "abg"
+};
+#endif
+struct modes_unit {
+       char *mode_string;
+       int mode_size;
+};
+static struct modes_unit rtllib_modes[] = {
+       {"a",1}, 
+       {"b",1}, 
+       {"g",1}, 
+       {"?",1},
+#ifdef _RTL8192_EXT_PATCH_
+       {"n",5},
+       {"n",4},
+#else
+       {"N-24G",5},
+       {"N-5G",4},
+#endif
+};
+
+#define MAX_CUSTOM_LEN 64
+static inline char *rtl819x_translate_scan(struct rtllib_device *ieee,
+                                          char *start, char *stop,
+                                          struct rtllib_network *network,
+                                           struct iw_request_info *info)
+{
+       char custom[MAX_CUSTOM_LEN];
+       char proto_name[IFNAMSIZ];
+       char *pname = proto_name;
+       char *p;
+       struct iw_event iwe;
+       int i, j;
+       u16 max_rate, rate;
+       static u8       EWC11NHTCap[] = {0x00, 0x90, 0x4c, 0x33};
+
+       /* First entry *MUST* be the AP MAC address */
+       iwe.cmd = SIOCGIWAP;
+       iwe.u.ap_addr.sa_family = ARPHRD_ETHER;
+       memcpy(iwe.u.ap_addr.sa_data, network->bssid, ETH_ALEN);
+       start = iwe_stream_add_event_rsl(info, start, stop, &iwe, IW_EV_ADDR_LEN);
+       /* Remaining entries will be displayed in the order we provide them */
+
+       /* Add the ESSID */
+       iwe.cmd = SIOCGIWESSID;
+       iwe.u.data.flags = 1;
+       if(network->ssid_len > 0){
+               iwe.u.data.length = min(network->ssid_len, (u8)32);
+               start = iwe_stream_add_point_rsl(info, start, stop, &iwe, network->ssid);
+        }else if(network->hidden_ssid_len == 0){
+               iwe.u.data.length = sizeof("<hidden>");
+               start = iwe_stream_add_point_rsl(info, start, stop, &iwe, "<hidden>");
+        }else {
+               iwe.u.data.length = min(network->hidden_ssid_len, (u8)32);
+               start = iwe_stream_add_point_rsl(info, start, stop, &iwe, network->hidden_ssid);
+       }
+       /* Add the protocol name */
+       iwe.cmd = SIOCGIWNAME;
+       for(i=0; i<(sizeof(rtllib_modes)/sizeof(rtllib_modes[0])); i++) {
+               if(network->mode&(1<<i)) {
+                       sprintf(pname,rtllib_modes[i].mode_string,rtllib_modes[i].mode_size);
+                       pname +=rtllib_modes[i].mode_size;
+               }       
+       }
+       *pname = '\0';
+       snprintf(iwe.u.name, IFNAMSIZ, "IEEE802.11%s", proto_name);
+        start = iwe_stream_add_event_rsl(info, start, stop, &iwe, IW_EV_CHAR_LEN);
+        /* Add mode */
+        iwe.cmd = SIOCGIWMODE;
+        if (network->capability &
+           (WLAN_CAPABILITY_ESS | WLAN_CAPABILITY_IBSS)) {
+               if (network->capability & WLAN_CAPABILITY_ESS)
+                       iwe.u.mode = IW_MODE_MASTER;
+               else
+                       iwe.u.mode = IW_MODE_ADHOC;
+               start = iwe_stream_add_event_rsl(info, start, stop, &iwe, IW_EV_UINT_LEN);
+        }
+
+        /* Add frequency/channel */
+       iwe.cmd = SIOCGIWFREQ;
+/*     iwe.u.freq.m = rtllib_frequency(network->channel, network->mode);
+       iwe.u.freq.e = 3; */
+       iwe.u.freq.m = network->channel;
+       iwe.u.freq.e = 0;
+       iwe.u.freq.i = 0;
+       start = iwe_stream_add_event_rsl(info, start, stop, &iwe, IW_EV_FREQ_LEN);
+
+       /* Add encryption capability */
+       iwe.cmd = SIOCGIWENCODE;
+       if (network->capability & WLAN_CAPABILITY_PRIVACY)
+               iwe.u.data.flags = IW_ENCODE_ENABLED | IW_ENCODE_NOKEY;
+       else
+               iwe.u.data.flags = IW_ENCODE_DISABLED;
+       iwe.u.data.length = 0;
+       start = iwe_stream_add_point_rsl(info, start, stop, &iwe, network->ssid);
+       /* Add basic and extended rates */
+       max_rate = 0;
+       p = custom;
+       p += snprintf(p, MAX_CUSTOM_LEN - (p - custom), " Rates (Mb/s): ");
+       for (i = 0, j = 0; i < network->rates_len; ) {
+               if (j < network->rates_ex_len &&
+                   ((network->rates_ex[j] & 0x7F) <
+                    (network->rates[i] & 0x7F)))
+                       rate = network->rates_ex[j++] & 0x7F;
+               else
+                       rate = network->rates[i++] & 0x7F;
+               if (rate > max_rate)
+                       max_rate = rate;
+               p += snprintf(p, MAX_CUSTOM_LEN - (p - custom),
+                             "%d%s ", rate >> 1, (rate & 1) ? ".5" : "");
+       }
+       for (; j < network->rates_ex_len; j++) {
+               rate = network->rates_ex[j] & 0x7F;
+               p += snprintf(p, MAX_CUSTOM_LEN - (p - custom),
+                             "%d%s ", rate >> 1, (rate & 1) ? ".5" : "");
+               if (rate > max_rate)
+                       max_rate = rate;
+       }
+       
+       if (network->mode >= IEEE_N_24G)
+       {
+               PHT_CAPABILITY_ELE ht_cap = NULL;
+               bool is40M = false, isShortGI = false;
+               u8 max_mcs = 0;
+               if (!memcmp(network->bssht.bdHTCapBuf, EWC11NHTCap, 4))
+                       ht_cap = (PHT_CAPABILITY_ELE)&network->bssht.bdHTCapBuf[4];
+               else
+                       ht_cap = (PHT_CAPABILITY_ELE)&network->bssht.bdHTCapBuf[0];
+               is40M = (ht_cap->ChlWidth)?1:0;
+               isShortGI = (ht_cap->ChlWidth)?
+                                               ((ht_cap->ShortGI40Mhz)?1:0):
+                                               ((ht_cap->ShortGI20Mhz)?1:0);
+               
+               max_mcs = HTGetHighestMCSRate(ieee, ht_cap->MCS, MCS_FILTER_ALL);
+               rate = MCS_DATA_RATE[is40M][isShortGI][max_mcs&0x7f];
+               if (rate > max_rate)
+                       max_rate = rate;        
+       }
+#if 0  
+       printk("max rate:%d ===basic rate:\n", max_rate);
+       for (i=0;i<network->rates_len;i++)
+               printk(" %x", network->rates[i]);
+       printk("\n=======extend rate\n");
+       for (i=0; i<network->rates_ex_len; i++)
+               printk(" %x", network->rates_ex[i]);
+       printk("\n");
+#endif
+       iwe.cmd = SIOCGIWRATE;
+       iwe.u.bitrate.fixed = iwe.u.bitrate.disabled = 0;
+       iwe.u.bitrate.value = max_rate * 500000;
+       start = iwe_stream_add_event_rsl(info, start, stop, &iwe,
+                                    IW_EV_PARAM_LEN);
+       iwe.cmd = IWEVCUSTOM;
+       iwe.u.data.length = p - custom;
+       if (iwe.u.data.length)
+               start = iwe_stream_add_point_rsl(info, start, stop, &iwe, custom);
+       /* Add quality statistics */
+       /* TODO: Fix these values... */
+       iwe.cmd = IWEVQUAL;
+       iwe.u.qual.qual = network->stats.signal;
+       iwe.u.qual.level = network->stats.rssi;
+       iwe.u.qual.noise = network->stats.noise;
+       iwe.u.qual.updated = network->stats.mask & RTLLIB_STATMASK_WEMASK;
+       if (!(network->stats.mask & RTLLIB_STATMASK_RSSI))
+               iwe.u.qual.updated |= IW_QUAL_LEVEL_INVALID;
+       if (!(network->stats.mask & RTLLIB_STATMASK_NOISE))
+               iwe.u.qual.updated |= IW_QUAL_NOISE_INVALID;
+       if (!(network->stats.mask & RTLLIB_STATMASK_SIGNAL))
+               iwe.u.qual.updated |= IW_QUAL_QUAL_INVALID;
+       iwe.u.qual.updated = 7;
+       start = iwe_stream_add_event_rsl(info, start, stop, &iwe, IW_EV_QUAL_LEN);
+
+       iwe.cmd = IWEVCUSTOM;
+       p = custom;
+       iwe.u.data.length = p - custom;
+       if (iwe.u.data.length)
+               start = iwe_stream_add_point_rsl(info, start, stop, &iwe, custom);
+#if (WIRELESS_EXT < 18) 
+       if (ieee->wpa_enabled && network->wpa_ie_len){
+               char buf[MAX_WPA_IE_LEN * 2 + 30];
+               u8 *p = buf;
+               p += sprintf(p, "wpa_ie=");
+               for (i = 0; i < network->wpa_ie_len; i++) {
+                       p += sprintf(p, "%02x", network->wpa_ie[i]);
+               }
+
+               memset(&iwe, 0, sizeof(iwe));
+               iwe.cmd = IWEVCUSTOM;
+               iwe.u.data.length = strlen(buf);
+               start = iwe_stream_add_point_rsl(info, start, stop, &iwe, buf);
+        }
+
+       if (ieee->wpa_enabled && network->rsn_ie_len){
+               char buf[MAX_WPA_IE_LEN * 2 + 30];
+
+               u8 *p = buf;
+               p += sprintf(p, "rsn_ie=");
+               for (i = 0; i < network->rsn_ie_len; i++) {
+                       p += sprintf(p, "%02x", network->rsn_ie[i]);
+               }
+
+               memset(&iwe, 0, sizeof(iwe));
+               iwe.cmd = IWEVCUSTOM;
+               iwe.u.data.length = strlen(buf);
+               start = iwe_stream_add_point_rsl(info, start, stop, &iwe, buf);
+        }
+#else
+       memset(&iwe, 0, sizeof(iwe));
+       if (network->wpa_ie_len)
+       {
+               char buf[MAX_WPA_IE_LEN];
+               memcpy(buf, network->wpa_ie, network->wpa_ie_len);
+               iwe.cmd = IWEVGENIE;
+               iwe.u.data.length = network->wpa_ie_len;
+               start = iwe_stream_add_point_rsl(info, start, stop, &iwe, buf);
+        }
+       memset(&iwe, 0, sizeof(iwe));
+       if (network->rsn_ie_len)
+       {
+               char buf[MAX_WPA_IE_LEN];
+               memcpy(buf, network->rsn_ie, network->rsn_ie_len);
+               iwe.cmd = IWEVGENIE;
+               iwe.u.data.length = network->rsn_ie_len;
+               start = iwe_stream_add_point_rsl(info, start, stop, &iwe, buf);
+        }
+
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) 
+#ifndef CUSTOMER_ID_INTEL_CMPC
+       /* add info for WZC */
+       memset(&iwe, 0, sizeof(iwe));
+       if (network->wzc_ie_len)
+       {
+               char buf[MAX_WZC_IE_LEN];
+               memcpy(buf, network->wzc_ie, network->wzc_ie_len);
+               iwe.cmd = IWEVGENIE;
+               iwe.u.data.length = network->wzc_ie_len;
+               start = iwe_stream_add_point_rsl(info, start, stop, &iwe, buf);
+        }
+#endif 
+#endif
+#endif
+
+       /* Add EXTRA: Age to display seconds since last beacon/probe response
+        * for given network. */
+       iwe.cmd = IWEVCUSTOM;
+       p = custom;
+       p += snprintf(p, MAX_CUSTOM_LEN - (p - custom),
+                     " Last beacon: %lums ago", (jiffies - network->last_scanned) / (HZ / 100));
+       iwe.u.data.length = p - custom;
+       if (iwe.u.data.length)
+               start = iwe_stream_add_point_rsl(info, start, stop, &iwe, custom);
+
+       return start;
+}
+
+int rtllib_wx_get_scan(struct rtllib_device *ieee,
+                         struct iw_request_info *info,
+                         union iwreq_data *wrqu, char *extra)
+{
+       struct rtllib_network *network;
+       unsigned long flags;
+
+       char *ev = extra;
+       char *stop = ev + wrqu->data.length;
+       int i = 0;
+       int err = 0;
+       RTLLIB_DEBUG_WX("Getting scan\n");
+       down(&ieee->wx_sem);
+       spin_lock_irqsave(&ieee->lock, flags);
+
+       list_for_each_entry(network, &ieee->network_list, list) {
+               i++;
+               if((stop-ev)<200)
+               {
+                       err = -E2BIG;           
+                       break;  
+                                                                                               }
+               if (ieee->scan_age == 0 ||
+                   time_after(network->last_scanned + ieee->scan_age, jiffies))
+                       ev = rtl819x_translate_scan(ieee, ev, stop, network, info);
+               else
+                       RTLLIB_DEBUG_SCAN(
+                               "Not showing network '%s ("
+                               MAC_FMT ")' due to age (%lums).\n",
+                               escape_essid(network->ssid,
+                                            network->ssid_len),
+                               MAC_ARG(network->bssid),
+                               (jiffies - network->last_scanned) / (HZ / 100));
+       }
+
+       spin_unlock_irqrestore(&ieee->lock, flags);
+       up(&ieee->wx_sem);
+       wrqu->data.length = ev -  extra;
+       wrqu->data.flags = 0;
+
+       RTLLIB_DEBUG_WX("exit: %d networks returned.\n", i);
+
+       return err;
+}
+
+#ifdef _RTL8192_EXT_PATCH_
+int rtllib_wx_set_encode(struct rtllib_device *ieee,
+                           struct iw_request_info *info,
+                           union iwreq_data *wrqu, char *keybuf, u8 is_mesh)
+#else
+int rtllib_wx_set_encode(struct rtllib_device *ieee,
+                           struct iw_request_info *info,
+                           union iwreq_data *wrqu, char *keybuf)
+#endif
+{
+       struct iw_point *erq = &(wrqu->encoding);
+       struct net_device *dev = ieee->dev;
+       struct rtllib_security sec = {
+               .flags = 0
+       };
+       int i, key, key_provided, len;
+       struct rtllib_crypt_data **crypt;
+
+       RTLLIB_DEBUG_WX("SET_ENCODE\n");
+
+       key = erq->flags & IW_ENCODE_INDEX;
+       if (key) {
+               if (key > WEP_KEYS)
+                       return -EINVAL;
+               key--;
+               key_provided = 1;
+       } else {
+               key_provided = 0;
+#ifdef _RTL8192_EXT_PATCH_
+               if(is_mesh)
+                       key = ieee->mesh_txkeyidx;
+               else
+#endif
+               key = ieee->tx_keyidx;
+       }
+
+       RTLLIB_DEBUG_WX("Key: %d [%s]\n", key, key_provided ?
+                          "provided" : "default");
+#ifdef _RTL8192_EXT_PATCH_
+       if(is_mesh)
+               crypt = &ieee->cryptlist[0]->crypt[key];
+       else
+               crypt = &ieee->sta_crypt[key];
+#else
+       crypt = &ieee->crypt[key];
+#endif
+       if (erq->flags & IW_ENCODE_DISABLED) {
+               if (key_provided && *crypt) {
+                       RTLLIB_DEBUG_WX("Disabling encryption on key %d.\n",
+                                          key);
+                       rtllib_crypt_delayed_deinit(ieee, crypt);
+               } else
+                       RTLLIB_DEBUG_WX("Disabling encryption.\n");
+
+               /* Check all the keys to see if any are still configured,
+                * and if no key index was provided, de-init them all */
+               for (i = 0; i < WEP_KEYS; i++) {
+#ifdef _RTL8192_EXT_PATCH_
+                       bool null_crypt = false;
+                       if(is_mesh)
+                               null_crypt = (ieee->cryptlist[0]->crypt[i] != NULL) ? true:false; 
+                       else
+                               null_crypt = (ieee->sta_crypt[i] != NULL) ? true:false;
+                       if (null_crypt) 
+#else
+                               if (ieee->crypt[i] != NULL) 
+#endif
+                               {
+                                       if (key_provided)
+                                               break;
+#ifdef _RTL8192_EXT_PATCH_                     
+                                       if(is_mesh)
+                                               rtllib_crypt_delayed_deinit(ieee, &ieee->cryptlist[0]->crypt[i]);
+                                       else
+                                               rtllib_crypt_delayed_deinit(ieee, &ieee->sta_crypt[i]);
+#else
+                                       rtllib_crypt_delayed_deinit(ieee, &ieee->crypt[i]);
+#endif
+
+                               }
+               }
+
+               if (i == WEP_KEYS) {
+                       sec.enabled = 0;
+                       sec.level = SEC_LEVEL_0;
+                       sec.flags |= SEC_ENABLED | SEC_LEVEL;
+               }
+
+               goto done;
+       }
+
+
+
+       sec.enabled = 1;
+       sec.flags |= SEC_ENABLED;
+
+       if (*crypt != NULL && (*crypt)->ops != NULL &&
+           strcmp((*crypt)->ops->name, "WEP") != 0) {
+               /* changing to use WEP; deinit previously used algorithm
+                * on this key */
+               rtllib_crypt_delayed_deinit(ieee, crypt);
+       }
+
+       if (*crypt == NULL) {
+               struct rtllib_crypt_data *new_crypt;
+
+               /* take WEP into use */
+               new_crypt = kmalloc(sizeof(struct rtllib_crypt_data),
+                                   GFP_KERNEL);
+               if (new_crypt == NULL)
+                       return -ENOMEM;
+               memset(new_crypt, 0, sizeof(struct rtllib_crypt_data));
+               new_crypt->ops = rtllib_get_crypto_ops("WEP");
+               if (!new_crypt->ops) {
+                       request_module("rtllib_crypt_wep");
+                       new_crypt->ops = rtllib_get_crypto_ops("WEP");
+               }
+
+#ifdef BUILT_IN_RTLLIB
+               if (new_crypt->ops)
+#else
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
+               if (new_crypt->ops && try_module_get(new_crypt->ops->owner))
+#else                  
+               if (new_crypt->ops && try_inc_mod_count(new_crypt->ops->owner))
+#endif
+#endif
+               {
+                       new_crypt->priv = new_crypt->ops->init(key);
+               }       
+
+               if (!new_crypt->ops || !new_crypt->priv) {
+                       kfree(new_crypt);
+                       new_crypt = NULL;
+
+                       printk(KERN_WARNING "%s: could not initialize WEP: "
+                              "load module rtllib_crypt_wep\n",
+                              dev->name);
+                       return -EOPNOTSUPP;
+               }
+               *crypt = new_crypt;
+       }
+
+       /* If a new key was provided, set it up */
+       if (erq->length > 0) {
+               len = erq->length <= 5 ? 5 : 13;
+               memcpy(sec.keys[key], keybuf, erq->length);
+               if (len > erq->length)
+                       memset(sec.keys[key] + erq->length, 0,
+                              len - erq->length);
+               RTLLIB_DEBUG_WX("Setting key %d to '%s' (%d:%d bytes)\n",
+                                  key, escape_essid(sec.keys[key], len),
+                                  erq->length, len);
+               sec.key_sizes[key] = len;
+               (*crypt)->ops->set_key(sec.keys[key], len, NULL,
+                                      (*crypt)->priv);
+               sec.flags |= (1 << key);
+               /* This ensures a key will be activated if no key is
+                * explicitely set */
+               if (key == sec.active_key)
+                       sec.flags |= SEC_ACTIVE_KEY;
+#ifdef _RTL8192_EXT_PATCH_                     
+               if(is_mesh)
+                       ieee->mesh_txkeyidx = key;
+               else
+#endif
+               ieee->tx_keyidx = key;
+
+       } else {
+               len = (*crypt)->ops->get_key(sec.keys[key], WEP_KEY_LEN,
+                                            NULL, (*crypt)->priv);
+               if (len == 0) {
+                       /* Set a default key of all 0 */
+                       printk("Setting key %d to all zero.\n",
+                                          key);
+
+                       RTLLIB_DEBUG_WX("Setting key %d to all zero.\n",
+                                          key);
+                       memset(sec.keys[key], 0, 13);
+                       (*crypt)->ops->set_key(sec.keys[key], 13, NULL,
+                                              (*crypt)->priv);
+                       sec.key_sizes[key] = 13;
+                       sec.flags |= (1 << key);
+               }
+
+               /* No key data - just set the default TX key index */
+               if (key_provided) {
+                       RTLLIB_DEBUG_WX(
+                               "Setting key %d to default Tx key.\n", key);
+#ifdef _RTL8192_EXT_PATCH_
+                       if(is_mesh)
+                               ieee->mesh_txkeyidx = key;
+                       else
+#endif
+                       ieee->tx_keyidx = key;
+                       sec.active_key = key;
+                       sec.flags |= SEC_ACTIVE_KEY;
+               }
+       }
+#ifdef _RTL8192_EXT_PATCH_
+       if ((ieee->iw_mode == IW_MODE_MESH)&&(is_mesh)&&ieee->ext_patch_rtllib_create_crypt_for_peer)
+       {
+               ieee->ext_patch_rtllib_create_crypt_for_peer(ieee);
+       }
+#endif
+ done:
+       ieee->open_wep = !(erq->flags & IW_ENCODE_RESTRICTED);
+       ieee->auth_mode = ieee->open_wep ? WLAN_AUTH_OPEN : WLAN_AUTH_SHARED_KEY;
+       sec.auth_mode = ieee->open_wep ? WLAN_AUTH_OPEN : WLAN_AUTH_SHARED_KEY;
+       sec.flags |= SEC_AUTH_MODE;
+       RTLLIB_DEBUG_WX("Auth: %s\n", sec.auth_mode == WLAN_AUTH_OPEN ?
+                          "OPEN" : "SHARED KEY");
+
+       /* For now we just support WEP, so only set that security level...
+        * TODO: When WPA is added this is one place that needs to change */
+       sec.flags |= SEC_LEVEL;
+       sec.level = SEC_LEVEL_1; /* 40 and 104 bit WEP */
+
+       if (ieee->set_security)
+               ieee->set_security(dev, &sec);
+
+       /* Do not reset port if card is in Managed mode since resetting will
+        * generate new IEEE 802.11 authentication which may end up in looping
+        * with IEEE 802.1X.  If your hardware requires a reset after WEP
+        * configuration (for example... Prism2), implement the reset_port in
+        * the callbacks structures used to initialize the 802.11 stack. */
+       if (ieee->reset_on_keychange &&
+           ieee->iw_mode != IW_MODE_INFRA &&
+           ieee->reset_port && ieee->reset_port(dev)) {
+               printk(KERN_DEBUG "%s: reset_port failed\n", dev->name);
+               return -EINVAL;
+       }
+       return 0;
+}
+
+#ifdef _RTL8192_EXT_PATCH_
+int rtllib_wx_get_encode(struct rtllib_device *ieee,
+                           struct iw_request_info *info,
+                           union iwreq_data *wrqu, char *keybuf, u8 is_mesh)
+#else
+int rtllib_wx_get_encode(struct rtllib_device *ieee,
+                           struct iw_request_info *info,
+                           union iwreq_data *wrqu, char *keybuf)
+#endif
+{
+       struct iw_point *erq = &(wrqu->encoding);
+       int len, key;
+       struct rtllib_crypt_data *crypt;
+
+       RTLLIB_DEBUG_WX("GET_ENCODE\n");
+
+       if(ieee->iw_mode == IW_MODE_MONITOR)
+               return -1;
+       
+       key = erq->flags & IW_ENCODE_INDEX;
+       if (key) {
+               if (key > WEP_KEYS)
+                       return -EINVAL;
+               key--;
+       } else {
+#ifdef _RTL8192_EXT_PATCH_
+               if(is_mesh)
+                       key = ieee->mesh_txkeyidx;
+               else
+#endif
+               key = ieee->tx_keyidx;
+       }
+#ifdef _RTL8192_EXT_PATCH_
+       if(is_mesh)
+               crypt = ieee->cryptlist[0]->crypt[key];
+       else
+               crypt = ieee->sta_crypt[key];
+#else
+       crypt = ieee->crypt[key];
+#endif
+
+       erq->flags = key + 1;
+
+       if (crypt == NULL || crypt->ops == NULL) {
+               erq->length = 0;
+               erq->flags |= IW_ENCODE_DISABLED;
+               return 0;
+       }
+#if 0
+       if (strcmp(crypt->ops->name, "WEP") != 0) {
+               /* only WEP is supported with wireless extensions, so just
+                * report that encryption is used */
+               erq->length = 0;
+               erq->flags |= IW_ENCODE_ENABLED;
+               return 0;
+       }
+#endif
+       len = crypt->ops->get_key(keybuf, SCM_KEY_LEN, NULL, crypt->priv);
+       erq->length = (len >= 0 ? len : 0);
+
+       erq->flags |= IW_ENCODE_ENABLED;
+
+       if (ieee->open_wep)
+               erq->flags |= IW_ENCODE_OPEN;
+       else
+               erq->flags |= IW_ENCODE_RESTRICTED;
+
+       return 0;
+}
+#if (WIRELESS_EXT >= 18)
+#ifdef _RTL8192_EXT_PATCH_
+int rtllib_wx_set_encode_ext(struct rtllib_device *ieee,
+                               struct iw_request_info *info,
+                               union iwreq_data *wrqu, char *extra, u8 is_mesh)
+#else
+int rtllib_wx_set_encode_ext(struct rtllib_device *ieee,
+                               struct iw_request_info *info,
+                               union iwreq_data *wrqu, char *extra)
+#endif
+{
+       int ret = 0;
+       struct net_device *dev = ieee->dev;
+        struct iw_point *encoding = &wrqu->encoding;
+        struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;
+        int i, idx;
+        int group_key = 0;
+        const char *alg, *module;
+        struct rtllib_crypto_ops *ops;
+        struct rtllib_crypt_data **crypt;
+
+        struct rtllib_security sec = {
+                .flags = 0,
+        };
+        idx = encoding->flags & IW_ENCODE_INDEX;
+        if (idx) {
+                if (idx < 1 || idx > WEP_KEYS)
+                        return -EINVAL;
+                idx--;
+       } else{
+#ifdef _RTL8192_EXT_PATCH_
+               if(is_mesh)
+                       idx = ieee->mesh_txkeyidx;
+               else
+#endif
+                       idx = ieee->tx_keyidx;
+       }
+       if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) {
+#ifdef _RTL8192_EXT_PATCH_
+               if(is_mesh)
+                       crypt = &ieee->cryptlist[0]->crypt[idx];
+               else
+                       crypt = &ieee->sta_crypt[idx];
+#else
+               crypt = &ieee->crypt[idx];
+#endif
+               group_key = 1;
+       } else {
+               /* some Cisco APs use idx>0 for unicast in dynamic WEP */
+               if (idx != 0 && ext->alg != IW_ENCODE_ALG_WEP)
+                        return -EINVAL;
+#ifdef _RTL8192_EXT_PATCH_
+               if ((ieee->iw_mode == IW_MODE_INFRA)||
+                       ((ieee->iw_mode == IW_MODE_MESH) && (ieee->only_mesh == 0))){
+                       if(is_mesh)
+                               crypt = &ieee->cryptlist[0]->crypt[idx];
+                       else
+                               crypt = &ieee->sta_crypt[idx];
+               }
+               else
+                       return -EINVAL;
+#else
+               if (ieee->iw_mode == IW_MODE_INFRA)
+                       crypt = &ieee->crypt[idx];
+               else
+                       return -EINVAL;
+#endif
+       }
+
+       sec.flags |= SEC_ENABLED;
+       if ((encoding->flags & IW_ENCODE_DISABLED) ||
+            ext->alg == IW_ENCODE_ALG_NONE) {
+               if (*crypt)
+                       rtllib_crypt_delayed_deinit(ieee, crypt);
+
+               for (i = 0; i < WEP_KEYS; i++)
+               {
+#ifdef _RTL8192_EXT_PATCH_
+                       if ((is_mesh)&&(ieee->cryptlist[0]->crypt[i] != NULL))
+                               break;
+                       if ((!is_mesh)&&(ieee->sta_crypt[i] != NULL))
+                               break;
+#else
+                       if (ieee->crypt[i] != NULL)
+                               break;
+#endif 
+               }
+               if (i == WEP_KEYS) {
+                       sec.enabled = 0;
+                       sec.level = SEC_LEVEL_0;
+                       sec.flags |= SEC_LEVEL;
+               }
+               goto done;
+       }
+       
+       sec.enabled = 1;
+#if 0
+        if (group_key ? !ieee->host_mc_decrypt :
+            !(ieee->host_encrypt || ieee->host_decrypt ||
+              ieee->host_encrypt_msdu))
+                goto skip_host_crypt;
+#endif
+        switch (ext->alg) {
+        case IW_ENCODE_ALG_WEP:
+                alg = "WEP";
+                module = "rtllib_crypt_wep";
+                break;
+        case IW_ENCODE_ALG_TKIP:
+                alg = "TKIP";
+                module = "rtllib_crypt_tkip";
+                break;
+        case IW_ENCODE_ALG_CCMP:
+                alg = "CCMP";
+                module = "rtllib_crypt_ccmp";
+                break;
+        default:
+                RTLLIB_DEBUG_WX("%s: unknown crypto alg %d\n",
+                                   dev->name, ext->alg);
+                ret = -EINVAL;
+                goto done;
+        }
+       printk("alg name:%s\n",alg);
+
+        ops = rtllib_get_crypto_ops(alg);
+        if (ops == NULL) {
+                char tempbuf[100];
+
+                memset( tempbuf, 0x00, 100 );
+                sprintf( tempbuf, "%s", module);
+                request_module("%s",tempbuf);
+                ops = rtllib_get_crypto_ops(alg);
+        }
+        if (ops == NULL) {
+                RTLLIB_DEBUG_WX("%s: unknown crypto alg %d\n",
+                                   dev->name, ext->alg);
+               printk("========>unknown crypto alg %d\n", ext->alg);
+                ret = -EINVAL;
+                goto done;
+        }
+
+        if (*crypt == NULL || (*crypt)->ops != ops) {
+                struct rtllib_crypt_data *new_crypt;
+
+                rtllib_crypt_delayed_deinit(ieee, crypt);
+
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13))
+                new_crypt = kzalloc(sizeof(*new_crypt), GFP_KERNEL);
+#else
+                new_crypt = kmalloc(sizeof(*new_crypt), GFP_KERNEL);
+               memset(new_crypt,0,sizeof(*new_crypt));
+#endif
+                if (new_crypt == NULL) {
+                        ret = -ENOMEM;
+                        goto done;
+                }
+                new_crypt->ops = ops;
+#ifdef BUILT_IN_RTLLIB
+               if (new_crypt->ops)
+#else
+                if (new_crypt->ops && try_module_get(new_crypt->ops->owner))
+#endif                 
+               {
+                        new_crypt->priv = new_crypt->ops->init(idx);
+               }
+
+                if (new_crypt->priv == NULL) {
+                        kfree(new_crypt);
+                        ret = -EINVAL;
+                        goto done;
+                }
+                *crypt = new_crypt;
+
+       }
+#ifdef _RTL8192_EXT_PATCH_
+       if ((ieee->iw_mode == IW_MODE_MESH)&&(is_mesh))
+       {
+               int j;
+               for (j=1; j<MAX_MP; j++)
+               {
+                       struct rtllib_crypt_data ** crypttmp =  &ieee->cryptlist[j]->crypt[idx];
+                       if (*crypttmp == NULL)
+                               break;
+                       if (*crypttmp && (*crypttmp)->ops != ops)
+                               rtllib_crypt_delayed_deinit(ieee, crypttmp);
+               }       
+       }
+#endif 
+
+        if (ext->key_len > 0 && (*crypt)->ops->set_key &&
+            (*crypt)->ops->set_key(ext->key, ext->key_len, ext->rx_seq,
+                                   (*crypt)->priv) < 0) {
+                RTLLIB_DEBUG_WX("%s: key setting failed\n", dev->name);
+               printk("key setting failed\n");
+                ret = -EINVAL;
+                goto done;
+        }
+#if 1  
+        if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) {
+#ifdef _RTL8192_EXT_PATCH_
+                       if(is_mesh)
+                               ieee->mesh_txkeyidx = idx;
+                       else
+#endif
+                ieee->tx_keyidx = idx;
+                sec.active_key = idx;
+                sec.flags |= SEC_ACTIVE_KEY;
+        }
+#ifdef _RTL8192_EXT_PATCH_
+       if ((ieee->iw_mode == IW_MODE_MESH)&&(is_mesh)&&ieee->ext_patch_rtllib_create_crypt_for_peer)
+       {
+               ieee->ext_patch_rtllib_create_crypt_for_peer(ieee);
+       }
+#endif
+        if (ext->alg != IW_ENCODE_ALG_NONE) {
+                sec.key_sizes[idx] = ext->key_len;
+                sec.flags |= (1 << idx);
+                if (ext->alg == IW_ENCODE_ALG_WEP) {
+                        sec.flags |= SEC_LEVEL;
+                        sec.level = SEC_LEVEL_1;
+                } else if (ext->alg == IW_ENCODE_ALG_TKIP) {
+                        sec.flags |= SEC_LEVEL;
+                        sec.level = SEC_LEVEL_2;
+                } else if (ext->alg == IW_ENCODE_ALG_CCMP) {
+                        sec.flags |= SEC_LEVEL;
+                        sec.level = SEC_LEVEL_3;
+                }
+                /* Don't set sec level for group keys. */
+                if (group_key)
+                        sec.flags &= ~SEC_LEVEL;
+        }
+#endif
+done:
+        if (ieee->set_security)
+                ieee->set_security(ieee->dev, &sec);
+
+        if (ieee->reset_on_keychange &&
+            ieee->iw_mode != IW_MODE_INFRA &&
+            ieee->reset_port && ieee->reset_port(dev)) {
+                RTLLIB_DEBUG_WX("%s: reset_port failed\n", dev->name);
+                return -EINVAL;
+        }
+        return ret;
+}
+
+#ifdef _RTL8192_EXT_PATCH_
+int rtllib_wx_get_encode_ext(struct rtllib_device *ieee,
+                              struct iw_request_info *info,
+                              union iwreq_data *wrqu, char *extra, u8 is_mesh)
+#else
+int rtllib_wx_get_encode_ext(struct rtllib_device *ieee,
+                              struct iw_request_info *info,
+                              union iwreq_data *wrqu, char *extra)
+#endif                 
+{
+       struct iw_point *encoding = &wrqu->encoding;
+       struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;
+       struct rtllib_crypt_data *crypt;
+       int idx, max_key_len;
+
+       max_key_len = encoding->length - sizeof(*ext);
+       if (max_key_len < 0)
+               return -EINVAL;
+
+       idx = encoding->flags & IW_ENCODE_INDEX;
+       if (idx) {
+               if (idx < 1 || idx > WEP_KEYS)
+                       return -EINVAL;
+               idx--;
+       } else{
+#ifdef _RTL8192_EXT_PATCH_
+               if(is_mesh)
+                       idx = ieee->mesh_txkeyidx;
+               else
+#endif                 
+                       idx = ieee->tx_keyidx;
+       }
+       if (!(ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) &&
+           (ext->alg != IW_ENCODE_ALG_WEP))
+#ifdef _RTL8192_EXT_PATCH_
+               if (idx != 0 || !((ieee->iw_mode == IW_MODE_INFRA) || ((ieee->iw_mode == IW_MODE_MESH) && (ieee->only_mesh == 0))))
+#else
+               if (idx != 0 || (ieee->iw_mode != IW_MODE_INFRA)) 
+#endif                 
+                       return -EINVAL;
+               
+#ifdef _RTL8192_EXT_PATCH_
+       if(is_mesh)
+               crypt = ieee->cryptlist[0]->crypt[idx];
+       else
+               crypt = ieee->sta_crypt[idx];
+#else
+       crypt = ieee->crypt[idx];
+#endif
+
+       encoding->flags = idx + 1;
+       memset(ext, 0, sizeof(*ext));
+
+       if (crypt == NULL || crypt->ops == NULL ) {
+               ext->alg = IW_ENCODE_ALG_NONE;
+               ext->key_len = 0;
+               encoding->flags |= IW_ENCODE_DISABLED;
+       } else {
+               if (strcmp(crypt->ops->name, "WEP") == 0 )
+                       ext->alg = IW_ENCODE_ALG_WEP;
+               else if (strcmp(crypt->ops->name, "TKIP"))
+                       ext->alg = IW_ENCODE_ALG_TKIP;
+               else if (strcmp(crypt->ops->name, "CCMP"))
+                       ext->alg = IW_ENCODE_ALG_CCMP;
+               else
+                       return -EINVAL;
+               ext->key_len = crypt->ops->get_key(ext->key, SCM_KEY_LEN, NULL, crypt->priv);
+               encoding->flags |= IW_ENCODE_ENABLED;
+               if (ext->key_len &&
+                   (ext->alg == IW_ENCODE_ALG_TKIP ||
+                    ext->alg == IW_ENCODE_ALG_CCMP))
+                       ext->ext_flags |= IW_ENCODE_EXT_TX_SEQ_VALID;
+
+       }
+
+       return 0;
+}
+#ifdef _RTL8192_EXT_PATCH_
+int rtllib_mesh_set_encode_ext(struct rtllib_device *ieee,
+                               struct iw_point *encoding, struct iw_encode_ext *ext, int entry)
+{
+       int ret = 0;
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
+       struct net_device *dev = ieee->dev;
+        int i, idx;
+        int group_key = 0;
+        const char *alg, *module;
+        struct rtllib_crypto_ops *ops;
+        struct rtllib_crypt_data **crypt;
+
+        struct rtllib_security sec = {
+                .flags = 0,
+        };
+        idx = encoding->flags & IW_ENCODE_INDEX;
+       printk("idx in set enc %d \n",idx);
+
+        if (idx) {
+                if (idx < 1 || idx > WEP_KEYS)
+                        return -EINVAL;
+                idx--;
+        } else
+                idx = ieee->tx_keyidx;
+
+
+        if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) {
+
+               crypt = &ieee->cryptlist[0]->crypt[idx];
+               printk("Get crypt for GTK.\n");
+                group_key = 1;
+        } else {
+                /* some Cisco APs use idx>0 for unicast in dynamic WEP */
+               printk("not group key, flags:%x, ext->alg:%d\n", ext->ext_flags, ext->alg);
+               if (idx != 0 && ext->alg != IW_ENCODE_ALG_WEP)
+                       return -EINVAL;
+               if ((ieee->iw_mode == IW_MODE_INFRA) || (ieee->mesh_started==1))
+               {
+                       crypt = &ieee->cryptlist[entry]->crypt[idx];
+                       if(*crypt == NULL )
+                               printk("&ieee->cryptlist[%d]->crypt[%d] is  NULL.\n",entry,idx);
+               }
+                else
+                        return -EINVAL;
+        }
+
+        sec.flags |= SEC_ENABLED;
+        if ((encoding->flags & IW_ENCODE_DISABLED) ||
+            ext->alg == IW_ENCODE_ALG_NONE) {
+                if (*crypt){
+                       printk("=====>%s():DISABLE crypt is not NULL\n",__FUNCTION__);
+                       rtllib_crypt_delayed_deinit(ieee, crypt);
+               }
+#ifdef _RTL8192_EXT_PATCH_
+               if(1)
+               {
+                       int j;
+                       for (j=1; j<MAX_MP; j++)
+                       {
+                               struct rtllib_crypt_data ** crypttmp =  &ieee->cryptlist[j]->crypt[idx];
+                               if (*crypttmp == NULL)
+                                       continue;
+                               printk("======>crypt is not NULL\n");
+                               rtllib_crypt_delayed_deinit(ieee, crypttmp);
+                       }
+               }
+#endif
+
+                for (i = 0; i < WEP_KEYS; i++)
+
+                if (ieee->cryptlist[0]->crypt[i] != NULL)
+                       break;
+
+                if (i == WEP_KEYS) {
+                        sec.enabled = 0;
+                        sec.level = SEC_LEVEL_0;
+                        sec.flags |= SEC_LEVEL;
+                }
+                goto done;
+        }
+       
+       sec.enabled = 1;
+#if 0
+        if (group_key ? !ieee->host_mc_decrypt :
+            !(ieee->host_encrypt || ieee->host_decrypt ||
+              ieee->host_encrypt_msdu))
+                goto skip_host_crypt;
+#endif
+        switch (ext->alg) {
+        case IW_ENCODE_ALG_WEP:
+                alg = "WEP";
+                module = "rtllib_crypt_wep";
+                break;
+        case IW_ENCODE_ALG_TKIP:
+                alg = "TKIP";
+                module = "rtllib_crypt_tkip";
+                break;
+        case IW_ENCODE_ALG_CCMP:
+                alg = "CCMP";
+                module = "rtllib_crypt_ccmp";
+                break;
+        default:
+                RTLLIB_DEBUG_WX("%s: unknown crypto alg %d\n",
+                                   dev->name, ext->alg);
+                ret = -EINVAL;
+                goto done;
+        }
+       printk("alg name:%s\n",alg);
+
+        ops = rtllib_get_crypto_ops(alg);
+        if (ops == NULL) {
+                request_module("%s",module);
+                ops = rtllib_get_crypto_ops(alg);
+        }
+        if (ops == NULL) {
+                RTLLIB_DEBUG_WX("%s: unknown crypto alg %d\n",
+                                   dev->name, ext->alg);
+               printk("========>unknown crypto alg %d\n", ext->alg);
+                ret = -EINVAL;
+                goto done;
+        }
+
+        if (*crypt == NULL || (*crypt)->ops != ops) {
+               
+                struct rtllib_crypt_data *new_crypt;
+               printk("Create new crypt struct.\n ");
+
+                rtllib_crypt_delayed_deinit(ieee, crypt);
+
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13))
+                new_crypt = kzalloc(sizeof(*new_crypt), GFP_KERNEL);
+#else
+                new_crypt = kmalloc(sizeof(*new_crypt), GFP_KERNEL);
+               memset(new_crypt,0,sizeof(*new_crypt));
+#endif
+                if (new_crypt == NULL) {
+                        ret = -ENOMEM;
+                        goto done;
+                }
+                new_crypt->ops = ops;
+#ifdef BUILT_IN_RTLLIB
+               if (new_crypt->ops)
+#else
+               if (new_crypt->ops && try_module_get(new_crypt->ops->owner))
+#endif
+               {
+                       new_crypt->priv = new_crypt->ops->init(idx);
+               }
+                if (new_crypt->priv == NULL) {
+                        kfree(new_crypt);
+                        ret = -EINVAL;
+                        goto done;
+                }
+                *crypt = new_crypt;
+
+       }
+
+       printk("key_len %x \n",ext->key_len);
+
+        if (ext->key_len > 0 && (*crypt)->ops->set_key &&
+            (*crypt)->ops->set_key(ext->key, ext->key_len, ext->rx_seq,
+                                   (*crypt)->priv) < 0) {
+                RTLLIB_DEBUG_WX("%s: key setting failed\n", dev->name);
+               printk("key setting failed\n");
+                ret = -EINVAL;
+                goto done;
+        }
+#if 1  
+        if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) {
+                ieee->mesh_txkeyidx = idx;
+                sec.active_key = idx;
+                sec.flags |= SEC_ACTIVE_KEY;
+        }
+
+        if (ext->alg != IW_ENCODE_ALG_NONE) {
+                sec.key_sizes[idx] = ext->key_len;
+                sec.flags |= (1 << idx);
+                if (ext->alg == IW_ENCODE_ALG_WEP) {
+                        sec.flags |= SEC_LEVEL;
+                        sec.level = SEC_LEVEL_1;
+                } else if (ext->alg == IW_ENCODE_ALG_TKIP) {
+                        sec.flags |= SEC_LEVEL;
+                        sec.level = SEC_LEVEL_2;
+                } else if (ext->alg == IW_ENCODE_ALG_CCMP) {
+                        sec.flags |= SEC_LEVEL;
+                        sec.level = SEC_LEVEL_3;
+                }
+                /* Don't set sec level for group keys. */
+                if (group_key)
+                        sec.flags &= ~SEC_LEVEL;
+        }
+#endif
+done:
+        if (ieee->set_security)
+                ieee->set_security(ieee->dev, &sec);
+
+        if (ieee->reset_on_keychange &&
+            ieee->iw_mode != IW_MODE_INFRA &&
+            ieee->reset_port && ieee->reset_port(dev)) {
+                RTLLIB_DEBUG_WX("%s: reset_port failed\n", dev->name);
+                return -EINVAL;
+        }
+#endif
+        return ret;
+}
+#endif
+
+int rtllib_wx_set_mlme(struct rtllib_device *ieee,
+                               struct iw_request_info *info,
+                               union iwreq_data *wrqu, char *extra)
+{
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
+       u8 i = 0;
+       bool deauth = false;
+       struct iw_mlme *mlme = (struct iw_mlme *) extra;
+
+       if (ieee->state != RTLLIB_LINKED)
+               return -ENOLINK;
+       
+       down(&ieee->wx_sem);
+       
+       switch (mlme->cmd) {
+               case IW_MLME_DEAUTH:
+                       deauth = true;
+                       /* leave break out intentionly */
+
+               case IW_MLME_DISASSOC:
+#ifdef _RTL8192_EXT_PATCH_
+                       if(!((ieee->iw_mode == IW_MODE_MESH) && (ieee->only_mesh == 1)))
+                       {
+#endif
+                               if(deauth == true) {
+                                       printk("disauth packet !\n");
+                               } else {
+                                       printk("dis associate packet!\n");
+                               }
+
+                               ieee->cannot_notify = true;
+
+                               SendDisassociation(ieee,deauth,mlme->reason_code);
+                               rtllib_disassociate(ieee);
+
+                               ieee->wap_set = 0;
+                               for(i=0;i<6;i++)  ieee->current_network.bssid[i]= 0x55;
+
+                               ieee->ssid_set = 0;
+                               ieee->current_network.ssid[0] = '\0';
+                               ieee->current_network.ssid_len = 0;
+#ifdef _RTL8192_EXT_PATCH_
+                       }
+#endif
+                       break;
+               default:
+                       up(&ieee->wx_sem);
+                       return -EOPNOTSUPP;
+       }
+
+       up(&ieee->wx_sem);
+       
+#endif         
+       return 0;
+}
+
+int rtllib_wx_set_auth(struct rtllib_device *ieee,
+                               struct iw_request_info *info,
+                               struct iw_param *data, char *extra)
+{
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
+       switch (data->flags & IW_AUTH_INDEX) {
+        case IW_AUTH_WPA_VERSION:
+               break;
+        case IW_AUTH_CIPHER_PAIRWISE:
+        case IW_AUTH_CIPHER_GROUP:
+        case IW_AUTH_KEY_MGMT:
+               /*
+                * Host AP driver does not use these parameters and allows
+                * wpa_supplicant to control them internally.
+                */
+                break;
+        case IW_AUTH_TKIP_COUNTERMEASURES:
+                ieee->tkip_countermeasures = data->value;
+                break;
+        case IW_AUTH_DROP_UNENCRYPTED:
+                ieee->drop_unencrypted = data->value;
+               break;
+
+       case IW_AUTH_80211_AUTH_ALG:
+               if(data->value & IW_AUTH_ALG_SHARED_KEY){
+                       ieee->open_wep = 0;
+                       ieee->auth_mode = 1;
+               }
+               else if(data->value & IW_AUTH_ALG_OPEN_SYSTEM){
+                       ieee->open_wep = 1;
+                       ieee->auth_mode = 0;
+               }
+               else if(data->value & IW_AUTH_ALG_LEAP){
+                       ieee->open_wep = 1;
+                       ieee->auth_mode = 2;
+               }
+               else
+                       return -EINVAL;
+               break;
+
+#if 1
+       case IW_AUTH_WPA_ENABLED:
+               ieee->wpa_enabled = (data->value)?1:0;
+               break;
+
+#endif
+       case IW_AUTH_RX_UNENCRYPTED_EAPOL:
+                ieee->ieee802_1x = data->value;
+               break;
+       case IW_AUTH_PRIVACY_INVOKED:
+               ieee->privacy_invoked = data->value;
+               break;
+       default:
+                return -EOPNOTSUPP;
+       }       
+#endif
+       return 0;
+}
+#endif
+
+int rtllib_wx_set_gen_ie(struct rtllib_device *ieee, u8 *ie, size_t len)
+{
+#if (WIRELESS_EXT >= 18 )
+       u8 *buf;
+       u8 eid, wps_oui[4]={0x0,0x50,0xf2,0x04};
+       
+       if (len > MAX_WPA_IE_LEN || (len && ie == NULL)) {
+               return -EINVAL;
+       }
+
+       if (len) {
+               eid = ie[0];
+               if ((eid == MFIE_TYPE_GENERIC) && (!memcmp(&ie[2], wps_oui, 4))) {
+
+                       ieee->wps_ie_len = (len < MAX_WZC_IE_LEN) ? (len):(MAX_WZC_IE_LEN);
+                       buf = kmalloc(ieee->wps_ie_len, GFP_KERNEL);
+                       if (buf == NULL)
+                               return -ENOMEM;
+                       memcpy(buf, ie, ieee->wps_ie_len);
+                       ieee->wps_ie = buf;                             
+                       return 0;
+               }                       
+       }
+       ieee->wps_ie_len = 0;   
+       if (ieee->wps_ie)
+               kfree(ieee->wps_ie);
+       ieee->wps_ie = NULL;            
+       if (len) {
+               if (len != ie[1]+2) {
+                       return -EINVAL;
+               }
+               buf = kmalloc(len, GFP_KERNEL);
+               if (buf == NULL)
+                       return -ENOMEM;
+               memcpy(buf, ie, len);
+               kfree(ieee->wpa_ie);
+               ieee->wpa_ie = buf;
+               ieee->wpa_ie_len = len; 
+       } else {
+               if (ieee->wpa_ie)
+               kfree(ieee->wpa_ie);
+               ieee->wpa_ie = NULL;
+               ieee->wpa_ie_len = 0;
+       }
+#endif
+       return 0;
+}
+
+#ifndef BUILT_IN_RTLLIB
+EXPORT_SYMBOL_RSL(rtllib_wx_set_gen_ie);
+#if (WIRELESS_EXT >= 18)
+EXPORT_SYMBOL_RSL(rtllib_wx_set_mlme);
+EXPORT_SYMBOL_RSL(rtllib_wx_set_auth);
+EXPORT_SYMBOL_RSL(rtllib_wx_set_encode_ext);
+EXPORT_SYMBOL_RSL(rtllib_wx_get_encode_ext);
+#endif
+EXPORT_SYMBOL_RSL(rtllib_wx_get_scan);
+EXPORT_SYMBOL_RSL(rtllib_wx_set_encode);
+EXPORT_SYMBOL_RSL(rtllib_wx_get_encode);
+#endif
+#ifdef _RTL8192_EXT_PATCH_
+EXPORT_SYMBOL_RSL(rtllib_mesh_set_encode_ext);
+#endif
diff --git a/ubuntu/rtl8192se/rtllib/scatterwalk.c b/ubuntu/rtl8192se/rtllib/scatterwalk.c
new file mode 100644 (file)
index 0000000..f1ea431
--- /dev/null
@@ -0,0 +1,138 @@
+/*
+ * Cryptographic API.
+ *
+ * Cipher operations.
+ *
+ * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
+ *               2002 Adam J. Richter <adam@yggdrasil.com>
+ *               2004 Jean-Luc Cooke <jlcooke@certainkey.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ */
+
+#include <linux/version.h>
+#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
+#include "kmap_types.h"
+#endif
+
+#include <linux/kernel.h>
+#include <linux/mm.h>
+#include <linux/pagemap.h>
+#include <linux/highmem.h>
+#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
+#include <asm/scatterlist.h>
+#else
+#include <linux/scatterlist.h>
+#endif
+#include "internal.h"
+#include "scatterwalk.h"
+
+enum km_type crypto_km_types[] = {
+       KM_USER0,
+       KM_USER1,
+       KM_SOFTIRQ0,
+       KM_SOFTIRQ1,
+};
+
+void *scatterwalk_whichbuf(struct scatter_walk *walk, unsigned int nbytes, void *scratch)
+{
+       if (nbytes <= walk->len_this_page &&
+           (((unsigned long)walk->data) & (PAGE_CACHE_SIZE - 1)) + nbytes <=
+           PAGE_CACHE_SIZE)
+               return walk->data;
+       else
+               return scratch;
+}
+
+static void memcpy_dir(void *buf, void *sgdata, size_t nbytes, int out)
+{
+       if (out)
+               memcpy(sgdata, buf, nbytes);
+       else
+               memcpy(buf, sgdata, nbytes);
+}
+
+void scatterwalk_start(struct scatter_walk *walk, struct scatterlist *sg)
+{
+       unsigned int rest_of_page;
+
+       walk->sg = sg;
+
+#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
+       walk->page = sg->page;
+#else
+       walk->page = sg_page(sg);
+#endif 
+       walk->len_this_segment = sg->length;
+
+       rest_of_page = PAGE_CACHE_SIZE - (sg->offset & (PAGE_CACHE_SIZE - 1));
+       walk->len_this_page = min(sg->length, rest_of_page);
+       walk->offset = sg->offset;
+}
+
+void scatterwalk_map(struct scatter_walk *walk, int out)
+{
+       walk->data = crypto_kmap(walk->page, out) + walk->offset;
+}
+
+static void scatterwalk_pagedone(struct scatter_walk *walk, int out,
+                                unsigned int more)
+{
+       /* walk->data may be pointing the first byte of the next page;
+          however, we know we transfered at least one byte.  So,
+          walk->data - 1 will be a virtual address in the mapped page. */
+
+       if (out)
+               flush_dcache_page(walk->page);
+
+       if (more) {
+               walk->len_this_segment -= walk->len_this_page;
+
+               if (walk->len_this_segment) {
+                       walk->page++;
+                       walk->len_this_page = min(walk->len_this_segment,
+                                                 (unsigned)PAGE_CACHE_SIZE);
+                       walk->offset = 0;
+               }
+               else
+                       scatterwalk_start(walk, sg_next(walk->sg));
+       }
+}
+
+void scatterwalk_done(struct scatter_walk *walk, int out, int more)
+{
+       crypto_kunmap(walk->data, out);
+       if (walk->len_this_page == 0 || !more)
+               scatterwalk_pagedone(walk, out, more);
+}
+
+/*
+ * Do not call this unless the total length of all of the fragments
+ * has been verified as multiple of the block size.
+ */
+int scatterwalk_copychunks(void *buf, struct scatter_walk *walk,
+                          size_t nbytes, int out)
+{
+       if (buf != walk->data) {
+               while (nbytes > walk->len_this_page) {
+                       memcpy_dir(buf, walk->data, walk->len_this_page, out);
+                       buf += walk->len_this_page;
+                       nbytes -= walk->len_this_page;
+
+                       crypto_kunmap(walk->data, out);
+                       scatterwalk_pagedone(walk, out, 1);
+                       scatterwalk_map(walk, out);
+               }
+
+               memcpy_dir(buf, walk->data, nbytes, out);
+       }
+
+       walk->offset += nbytes;
+       walk->len_this_page -= nbytes;
+       walk->len_this_segment -= nbytes;
+       return 0;
+}
diff --git a/ubuntu/rtl8192se/rtllib/scatterwalk.h b/ubuntu/rtl8192se/rtllib/scatterwalk.h
new file mode 100644 (file)
index 0000000..d4a8985
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Cryptographic API.
+ *
+ * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
+ * Copyright (c) 2002 Adam J. Richter <adam@yggdrasil.com>
+ * Copyright (c) 2004 Jean-Luc Cooke <jlcooke@certainkey.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ */
+
+#ifndef _CRYPTO_SCATTERWALK_H
+#define _CRYPTO_SCATTERWALK_H
+#include <linux/mm.h>
+#include <asm/scatterlist.h>
+
+struct scatter_walk {
+       struct scatterlist      *sg;
+       struct page             *page;
+       void                    *data;
+       unsigned int            len_this_page;
+       unsigned int            len_this_segment;
+       unsigned int            offset;
+};
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
+/* Define sg_next is an inline routine now in case we want to change
+   scatterlist to a linked list later. */
+static inline struct scatterlist *sg_next(struct scatterlist *sg)
+{
+       return sg + 1;
+}
+#endif
+
+static inline int scatterwalk_samebuf(struct scatter_walk *walk_in,
+                                     struct scatter_walk *walk_out,
+                                     void *src_p, void *dst_p)
+{
+       return walk_in->page == walk_out->page &&
+              walk_in->offset == walk_out->offset &&
+              walk_in->data == src_p && walk_out->data == dst_p;
+}
+
+void *scatterwalk_whichbuf(struct scatter_walk *walk, unsigned int nbytes, void *scratch);
+void scatterwalk_start(struct scatter_walk *walk, struct scatterlist *sg);
+int scatterwalk_copychunks(void *buf, struct scatter_walk *walk, size_t nbytes, int out);
+void scatterwalk_map(struct scatter_walk *walk, int out);
+void scatterwalk_done(struct scatter_walk *walk, int out, int more);
+
+#endif  /* _CRYPTO_SCATTERWALK_H */
diff --git a/ubuntu/rtl8192se/rtllib/wapi.c b/ubuntu/rtl8192se/rtllib/wapi.c
new file mode 100644 (file)
index 0000000..1b4e13d
--- /dev/null
@@ -0,0 +1,1813 @@
+#if defined (RTL8192S_WAPI_SUPPORT)\r
+\r
+#include <linux/unistd.h>\r
+#include <linux/etherdevice.h>\r
+#include "wapi.h"\r
+#include "wapi_interface.h"\r
+#include "rtllib.h"\r
+\r
+#define LITTLE_ENDIAN   \r
+#define ENCRYPT  0     \r
+#define DECRYPT  1     \r
+\r
+u32 wapi_debug_component =     WAPI_INIT       |\r
+                               WAPI_ERR ; 
+\r
+void WapiInit(struct rtllib_device *ieee)\r
+{\r
+       PRT_WAPI_T              pWapiInfo;\r
+       int                             i;\r
+\r
+       WAPI_TRACE(WAPI_INIT, "===========> %s\n", __FUNCTION__);\r
+       RT_ASSERT_RET(ieee);\r
+\r
+       pWapiInfo =  &ieee->wapiInfo;\r
+       pWapiInfo->bWapiEnable = false;\r
+\r
+       INIT_LIST_HEAD(&ieee->cache_frag_list);\r
+\r
+       INIT_LIST_HEAD(&pWapiInfo->wapiBKIDIdleList);\r
+       INIT_LIST_HEAD(&pWapiInfo->wapiBKIDStoreList);\r
+       for(i=0;i<WAPI_MAX_BKID_NUM;i++)\r
+       {\r
+               list_add_tail(&pWapiInfo->wapiBKID[i].list, &pWapiInfo->wapiBKIDIdleList);\r
+       }\r
+\r
+       INIT_LIST_HEAD(&pWapiInfo->wapiSTAIdleList);\r
+       INIT_LIST_HEAD(&pWapiInfo->wapiSTAUsedList);\r
+       for(i=0;i<WAPI_MAX_STAINFO_NUM;i++)\r
+       {\r
+               list_add_tail(&pWapiInfo->wapiSta[i].list, &pWapiInfo->wapiSTAIdleList);\r
+       }\r
+\r
+       spin_lock_init(&ieee->wapi_queue_lock);\r
+\r
+       ieee->wapi_queue = (WAPI_QUEUE *)kmalloc((sizeof(WAPI_QUEUE)), GFP_KERNEL);\r
+       if (!ieee->wapi_queue) {\r
+               return;\r
+       }\r
+       memset((void *)ieee->wapi_queue, 0, sizeof (WAPI_QUEUE));\r
+       WAPI_InitQueue(ieee->wapi_queue, WAPI_MAX_QUEUE_LEN, WAPI_MAX_BUFF_LEN);        \r
+       \r
+       WAPI_TRACE(WAPI_INIT, "<========== %s\n", __FUNCTION__);\r
+}\r
+\r
+void WapiExit(struct rtllib_device *ieee)\r
+{\r
+       WAPI_TRACE(WAPI_INIT, "===========> %s\n", __FUNCTION__);\r
+       RT_ASSERT_RET(ieee);\r
+       \r
+       if(ieee->wapi_queue)\r
+               kfree(ieee->wapi_queue);\r
+       ieee->wapi_queue = 0;\r
+       \r
+       WAPI_TRACE(WAPI_INIT, "<========== %s\n", __FUNCTION__);\r
+}\r
+\r
+void WapiCreateAppEventAndSend(\r
+       struct rtllib_device *ieee,\r
+       u8              *pbuffer,\r
+       u16             buf_len,\r
+       u8              *DestAddr,\r
+       u8              bUpdateBK,\r
+       u8              bUpdateUSK,\r
+       u8              bUpdateMSK,\r
+       u8              RcvPktType,\r
+       u8              bDisconnect\r
+)\r
+{\r
+       PRT_WAPI_T pWapiInfo = &(ieee->wapiInfo);\r
+       PRT_WAPI_STA_INFO pWapiSta = NULL;\r
+       u8 WapiASUEPNInitialValueSrc[16] = {0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;  \r
+       u8 WapiAEMultiCastPNInitialValueSrc[16] = {0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;   \r
+       u8 bFind = false, bRecvAEPacket = false, bRecvASUEPacket = false, EventId = 0;\r
+\r
+       WAPI_TRACE(WAPI_API, "==========> %s\n", __FUNCTION__);\r
+       WAPI_TRACE(WAPI_API, "DestAddr="MAC_FMT" bUpdateBK=%d bUpdateUSK=%d bUpdateMSK=%d RcvPktType=%d bDisconnect=%d\n", \r
+                       MAC_ARG(DestAddr), bUpdateBK, bUpdateUSK, bUpdateMSK, RcvPktType,bDisconnect);\r
+\r
+       /*if(!pWapiInfo->bWapiEnable){\r
+               WAPI_TRACE(WAPI_ERR,"%s: ieee->WapiSupport = 0!!\n",__FUNCTION__);\r
+               return;\r
+       }*/\r
+       \r
+       if(list_empty(&pWapiInfo->wapiSTAUsedList)){\r
+               bFind = false;\r
+       }else{\r
+               list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) {\r
+                       if(!memcmp(DestAddr,pWapiSta->PeerMacAddr,ETH_ALEN)){\r
+                               bFind = true;\r
+                               break;\r
+                       }\r
+               }\r
+       }\r
+\r
+       WAPI_TRACE(WAPI_API, "%s: DestAddr="MAC_FMT" bFind=%d\n", __FUNCTION__, MAC_ARG(DestAddr), bFind);\r
+       switch(RcvPktType){\r
+               case WAPI_PREAUTHENTICATE:\r
+                        EventId = WAPI_EVENT_RCV_PREAUTHENTICATE;\r
+                        bRecvAEPacket = true;\r
+                        bRecvASUEPacket = false;\r
+                        break;\r
+               case WAPI_ACCESS_AUTHENTICATE_REQUEST:\r
+                        EventId = WAPI_EVENT_RCV_ACCESS_AUTHENTICATE_REQUEST;\r
+                        bRecvAEPacket = true;\r
+                        bRecvASUEPacket = false;\r
+                        break;\r
+               case WAPI_USK_RESPONSE:\r
+                        EventId = WAPI_EVENT_RCV_USK_RESPONSE;\r
+                        bRecvAEPacket = true;\r
+                        bRecvASUEPacket = false;\r
+                        break;\r
+               case WAPI_MSK_RESPONSE:\r
+                        EventId = WAPI_EVENT_RCV_MSK_RESPONSE;\r
+                        bRecvAEPacket = true;\r
+                        bRecvASUEPacket = false;\r
+                        break;\r
+               case WAPI_STAKEY_REQUEST:\r
+                        EventId = WAPI_EVENT_RCV_STAKEY_REQUEST;\r
+                        bRecvAEPacket = false;\r
+                        bRecvASUEPacket = true;\r
+                        break;\r
+               case WAPI_AUTHENTICATE_ACTIVE:\r
+                        EventId = WAPI_EVENT_RCV_AUTHENTICATE_ACTIVE;\r
+                        bRecvAEPacket = false;\r
+                        bRecvASUEPacket = true;\r
+                        break;\r
+               case WAPI_ACCESS_AUTHENTICATE_RESPONSE:\r
+                        EventId = WAPI_EVENT_RCV_ACCESS_AUTHENTICATE_RESPONSE;\r
+                        bRecvAEPacket = false;\r
+                        bRecvASUEPacket = true;\r
+                        break;\r
+               case WAPI_USK_REQUEST:\r
+                        EventId = WAPI_EVENT_RCV_USK_REQUEST;\r
+                        bRecvAEPacket = false;\r
+                        bRecvASUEPacket = true;\r
+                        break;\r
+               case WAPI_USK_CONFIRM:\r
+                        EventId = WAPI_EVENT_RCV_USK_CONFIRM;\r
+                        bRecvAEPacket = false;\r
+                        bRecvASUEPacket = true;\r
+                        break;\r
+               case WAPI_MSK_NOTIFICATION:\r
+                        EventId = WAPI_EVENT_RCV_MSK_NOTIFICATION;\r
+                        bRecvAEPacket = false;\r
+                        bRecvASUEPacket = true;\r
+                        break;\r
+               default:\r
+                        break;\r
+       }\r
+\r
+       if(ieee->iw_mode == IW_MODE_INFRA){\r
+               if(bRecvAEPacket || bUpdateMSK){\r
+                       goto out;\r
+               }\r
+               if(bRecvASUEPacket){\r
+                       WAPI_CreateEvent_Send(ieee, EventId, DestAddr, pbuffer, buf_len);\r
+                       goto out;\r
+               }\r
+               if(bUpdateBK && bFind){\r
+                       EventId = WAPI_EVENT_ASUE_UPDATE_BK;\r
+                       WAPI_CreateEvent_Send(ieee, EventId, DestAddr, NULL, 0);\r
+                       goto out;\r
+               }\r
+               if(bUpdateUSK&& bFind){\r
+                       EventId = WAPI_EVENT_ASUE_UPDATE_USK;\r
+                       WAPI_CreateEvent_Send(ieee, EventId, DestAddr, NULL, 0);\r
+                       goto out;\r
+               }\r
+               if(bDisconnect && bFind){\r
+                       EventId = WAPI_EVENT_DISCONNECT;\r
+                       WAPI_CreateEvent_Send(ieee, EventId, DestAddr, NULL, 0);\r
+                       goto out;\r
+               }\r
+       }\r
+       else if(ieee->iw_mode == IW_MODE_ADHOC)\r
+       {\r
+               if((bFind )&& (!pWapiSta->bSetkeyOk) && (bUpdateBK ||bUpdateUSK||bUpdateMSK))\r
+                       goto out;\r
+               if(bRecvASUEPacket){\r
+                       WAPI_CreateEvent_Send(ieee, EventId, DestAddr, pbuffer, buf_len);\r
+                       if(EventId != WAPI_EVENT_RCV_USK_REQUEST)\r
+                               goto out;\r
+               }\r
+               if((!bFind) && (!bDisconnect) && (!bUpdateMSK))\r
+               {\r
+                       if(!list_empty(&pWapiInfo->wapiSTAIdleList))\r
+                       {\r
+                               pWapiSta =(PRT_WAPI_STA_INFO)list_entry(pWapiInfo->wapiSTAIdleList.next, RT_WAPI_STA_INFO, list);\r
+                               list_del_init(&pWapiSta->list);\r
+                               list_add_tail(&pWapiSta->list, &pWapiInfo->wapiSTAUsedList);\r
+                               WAPI_TRACE(WAPI_API, "%s: Add wapi station "MAC_FMT"\n", __FUNCTION__, MAC_ARG(DestAddr));\r
+                               memcpy(pWapiSta->PeerMacAddr,DestAddr,6);\r
+                               memcpy(pWapiSta->lastRxMulticastPN, WapiAEMultiCastPNInitialValueSrc, 16);\r
+                               memcpy(pWapiSta->lastRxUnicastPN, WapiASUEPNInitialValueSrc, 16);\r
+                       }\r
+                       \r
+                       pWapiInfo->bFirstAuthentiateInProgress= true;\r
+\r
+                       EventId = WAPI_EVENT_FIRST_AUTHENTICATOR;\r
+                       WAPI_CreateEvent_Send(ieee, EventId, DestAddr, NULL, 0);\r
+                       goto out;\r
+               }else{\r
+                       if(bRecvAEPacket){\r
+                               WAPI_CreateEvent_Send(ieee, EventId, DestAddr, pbuffer, buf_len);\r
+                               goto out;\r
+                       }\r
+                       if(bDisconnect){\r
+                               EventId = WAPI_EVENT_DISCONNECT;\r
+                               WAPI_CreateEvent_Send(ieee, EventId, DestAddr, NULL, 0);\r
+                               goto out;\r
+                       }\r
+                       if(bUpdateBK){\r
+                               EventId = WAPI_EVENT_AE_UPDATE_BK;\r
+                               WAPI_CreateEvent_Send(ieee, EventId, DestAddr, NULL, 0);\r
+                               goto out;\r
+                       }\r
+                       if(bUpdateUSK){\r
+                               EventId = WAPI_EVENT_AE_UPDATE_USK;\r
+                               WAPI_CreateEvent_Send(ieee, EventId, DestAddr, NULL, 0);\r
+                               goto out;\r
+                       }\r
+                       if(bUpdateMSK){\r
+                               list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) {\r
+                                       if(pWapiSta->bSetkeyOk){\r
+                                               EventId = WAPI_EVENT_AE_UPDATE_MSK;\r
+                                               WAPI_CreateEvent_Send(ieee, EventId, pWapiSta->PeerMacAddr, NULL, 0);\r
+                                       }\r
+                               }\r
+                               goto out;\r
+                       }\r
+               }\r
+       }\r
+       \r
+out:   \r
+       WAPI_TRACE(WAPI_API, "<========== %s\n", __FUNCTION__);\r
+       return;\r
+}\r
+\r
+\r
+void WapiReturnAllStaInfo(struct rtllib_device *ieee)\r
+{\r
+       PRT_WAPI_T                              pWapiInfo;\r
+       PRT_WAPI_STA_INFO               pWapiStaInfo;\r
+       PRT_WAPI_BKID                   pWapiBkid;\r
+       WAPI_TRACE(WAPI_INIT, "===========> %s\n", __FUNCTION__);\r
+       \r
+       pWapiInfo = &ieee->wapiInfo;\r
+\r
+       while(!list_empty(&(pWapiInfo->wapiSTAUsedList)))\r
+       {\r
+               pWapiStaInfo = (PRT_WAPI_STA_INFO)list_entry(pWapiInfo->wapiSTAUsedList.next, RT_WAPI_STA_INFO, list);\r
+               list_del_init(&pWapiStaInfo->list);\r
+               memset(pWapiStaInfo->PeerMacAddr,0,ETH_ALEN);\r
+               pWapiStaInfo->bSetkeyOk = 0;\r
+               list_add_tail(&pWapiStaInfo->list, &pWapiInfo->wapiSTAIdleList);\r
+       }\r
+\r
+       while(!list_empty(&(pWapiInfo->wapiBKIDStoreList)))\r
+       {\r
+               pWapiBkid = (PRT_WAPI_BKID)list_entry(pWapiInfo->wapiBKIDStoreList.next, RT_WAPI_BKID, list);\r
+               list_del_init(&pWapiBkid->list);\r
+               memset(pWapiBkid->bkid,0,16);\r
+               list_add_tail(&pWapiBkid->list, &pWapiInfo->wapiBKIDIdleList);\r
+       }\r
+       WAPI_TRACE(WAPI_INIT, "<========== %s\n", __FUNCTION__);\r
+}\r
+\r
+void WapiReturnOneStaInfo(struct rtllib_device *ieee, u8 *MacAddr, u8 from_app)\r
+{\r
+       PRT_WAPI_T                              pWapiInfo;\r
+       PRT_WAPI_STA_INFO               pWapiStaInfo = NULL;\r
+       PRT_WAPI_BKID                   pWapiBkid = NULL;\r
+\r
+       pWapiInfo = &ieee->wapiInfo;\r
+\r
+       WAPI_TRACE(WAPI_API, "==========> %s\n", __FUNCTION__);\r
+\r
+       if(!from_app)\r
+               WapiCreateAppEventAndSend(ieee,NULL,0,MacAddr, false,false,false,0,true);\r
+       if(list_empty(&(pWapiInfo->wapiSTAUsedList))){\r
+               return;\r
+       }else{\r
+               list_for_each_entry(pWapiStaInfo, &pWapiInfo->wapiSTAUsedList, list) {\r
+                       if(!memcmp(pWapiStaInfo->PeerMacAddr,MacAddr,ETH_ALEN)){\r
+                               pWapiStaInfo->bAuthenticateInProgress = false;\r
+                               pWapiStaInfo->bSetkeyOk = false;\r
+                               memset(pWapiStaInfo->PeerMacAddr,0,ETH_ALEN);\r
+                               list_del_init(&pWapiStaInfo->list);\r
+                               list_add_tail(&pWapiStaInfo->list, &pWapiInfo->wapiSTAIdleList);\r
+                               break;\r
+                       }\r
+\r
+               }\r
+       }\r
+\r
+       if(ieee->iw_mode == IW_MODE_INFRA){\r
+               while(!list_empty(&(pWapiInfo->wapiBKIDStoreList)))\r
+               {\r
+                       pWapiBkid = (PRT_WAPI_BKID)list_entry(pWapiInfo->wapiBKIDStoreList.next, RT_WAPI_BKID, list);\r
+                       list_del_init(&pWapiBkid->list);\r
+                       memset(pWapiBkid->bkid,0,16);\r
+                       list_add_tail(&pWapiBkid->list, &pWapiInfo->wapiBKIDIdleList);\r
+               }\r
+       }\r
+       WAPI_TRACE(WAPI_API, "<========== %s\n", __FUNCTION__);\r
+       return;\r
+}\r
+\r
+void WapiFreeAllStaInfo(struct rtllib_device *ieee)\r
+{\r
+       PRT_WAPI_T                              pWapiInfo;\r
+       PRT_WAPI_STA_INFO               pWapiStaInfo;\r
+       PRT_WAPI_BKID                   pWapiBkid;\r
+       WAPI_TRACE(WAPI_INIT, "===========> %s\n", __FUNCTION__);\r
+       pWapiInfo = &ieee->wapiInfo;\r
+\r
+       WapiReturnAllStaInfo(ieee);\r
+       while(!list_empty(&(pWapiInfo->wapiSTAIdleList)))\r
+       {\r
+               pWapiStaInfo = (PRT_WAPI_STA_INFO)list_entry(pWapiInfo->wapiSTAIdleList.next, RT_WAPI_STA_INFO, list);\r
+               list_del_init(&pWapiStaInfo->list);\r
+       }\r
+\r
+       while(!list_empty(&(pWapiInfo->wapiBKIDIdleList)))\r
+       {\r
+               pWapiBkid = (PRT_WAPI_BKID)list_entry(pWapiInfo->wapiBKIDIdleList.next, RT_WAPI_BKID, list);\r
+               list_del_init(&pWapiBkid->list);\r
+       }\r
+       WAPI_TRACE(WAPI_INIT, "<=========== %s\n", __FUNCTION__);\r
+       return;\r
+}\r
+\r
+u8 SecIsWAIPacket(struct rtllib_device* ieee,struct sk_buff *skb)\r
+{\r
+       PRT_WAPI_T pWapiInfo = &(ieee->wapiInfo);\r
+       PRT_WAPI_STA_INFO pWapiSta = NULL;\r
+       u8 WaiPkt = 0, *pTaddr, bFind = false;\r
+       u8 Offset_TypeWAI = 24 + 6;     
+       struct rtllib_hdr_3addrqos *header;\r
+       u16 mask = 1, fc = 0;\r
+\r
+       if((!pWapiInfo->bWapiEnable) || (!ieee->wapiInfo.bWapiEnable))\r
+               return 0;\r
+\r
+       header = (struct rtllib_hdr_3addrqos *)skb->data;\r
+\r
+       fc = le16_to_cpu(header->frame_ctl);\r
+       if(fc & RTLLIB_FCTL_WEP)\r
+           return 0;\r
+\r
+       pTaddr = header->addr2;\r
+       if(list_empty(&pWapiInfo->wapiSTAUsedList)){\r
+               bFind = false;\r
+       }else{\r
+               list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list){\r
+                       if(!memcmp(pTaddr,pWapiSta->PeerMacAddr,6)){\r
+                               bFind = true;\r
+                               break;\r
+                       }\r
+               }\r
+       }\r
+\r
+       WAPI_TRACE(WAPI_API, "%s: bFind=%d pTaddr="MAC_FMT"\n", __FUNCTION__, bFind, MAC_ARG(pTaddr));\r
+\r
+       if( IsQoSDataFrame(skb->data) ){\r
+               Offset_TypeWAI += sQoSCtlLng;   
+       }\r
+\r
+       if((header->frame_ctl & (mask<<14)) != 0){\r
+               Offset_TypeWAI += WAPI_EXT_LEN; 
+       }\r
+\r
+       if( skb->len < (Offset_TypeWAI+1) ){\r
+               WAPI_TRACE(WAPI_ERR, "%s(): invalid length(%d)\n",__FUNCTION__,skb->len);\r
+               return 0;\r
+       }\r
+\r
+       if( (skb->data[Offset_TypeWAI]==0x88) && (skb->data[Offset_TypeWAI+1]==0xb4) ){\r
+               WaiPkt = skb->data[Offset_TypeWAI+5];\r
+               if(ieee->iw_mode == IW_MODE_ADHOC){\r
+                       if(bFind){\r
+                               if((WaiPkt == 8) && (pWapiInfo->wapiTxMsk.bSet) && (pWapiSta->wapiMsk.bSet) && ((skb->data[Offset_TypeWAI+14] & 0x10)==0)){\r
+                                       printk("==============> %s(): Receive USK Request After MSK set!\n", __FUNCTION__);\r
+                                       DelStaInfo(ieee, pTaddr);\r
+                                       WapiReturnOneStaInfo (ieee, pTaddr, 0);\r
+                                       WAPI_CreateEvent_Send(ieee, WAPI_EVENT_CONNECT, ieee->current_network.bssid, NULL, 0);\r
+                               }\r
+\r
+                       }\r
+               }\r
+       }else{\r
+               WAPI_TRACE(WAPI_API, "%s(): non wai packet\n",__FUNCTION__);\r
+       }\r
+\r
+       WAPI_TRACE(WAPI_API, "%s(): Recvd WAI frame. IsWAIPkt(%d)\n",__FUNCTION__, WaiPkt);\r
+\r
+       return  WaiPkt;\r
+}\r
+\r
+/******************\r
+*********************/\r
+u8 Wapi_defragment(struct rtllib_device* ieee,u8* data, u16 len,\r
+                 u8* pTaddr,bool bAuthenticator,u8* rxbuffer,u16* rxbuffer_len)\r
+{\r
+       PRT_CACHE_INFO pcache_info = NULL;\r
+       bool bfind = false;\r
+       \r
+       if(!list_empty(&ieee->cache_frag_list)){\r
+               list_for_each_entry(pcache_info, &ieee->cache_frag_list, list) {\r
+                       if((memcmp(pcache_info->saddr,pTaddr,ETH_ALEN)==0) \r
+                               && (pcache_info->bAuthenticator == bAuthenticator))\r
+                       {\r
+                               bfind = true;\r
+                               break;\r
+                       }\r
+               }               \r
+       }\r
+       WAPI_TRACE(WAPI_RX, "%s: bFind=%d pTaddr="MAC_FMT"\n", __FUNCTION__, bfind, MAC_ARG(pTaddr));\r
+       if(bfind == false) {
+               pcache_info = kmalloc(sizeof(RT_CACHE_INFO),GFP_ATOMIC);\r
+               if(pcache_info == NULL){\r
+                       WAPI_TRACE(WAPI_ERR,"%s(): can't malloc mem\n", __FUNCTION__);\r
+                       goto drop2;\r
+               }\r
+               memset(pcache_info,0,sizeof(RT_CACHE_INFO));\r
+               if(data[11] == 0x1){\r
+                       WAPI_TRACE(WAPI_RX, "%s(): First fragment, and have More fragments\n",__FUNCTION__);\r
+                       memcpy(&(pcache_info->recvSeq),data+8, 2);
+                       if(data[10] != 0x00)
+                       {\r
+                               WAPI_TRACE(WAPI_ERR, "%s(): First fragment,but fragnum is not 0.\n",__FUNCTION__);\r
+                               goto drop1;\r
+                       }else{  \r
+                               data[10] = 0x0;\r
+                               data[11] = 0x0;\r
+                               pcache_info->lastFragNum= 0x00;\r
+                               memcpy(pcache_info->cache_buffer,data,len);\r
+                               pcache_info->cache_buffer_len = len;\r
+                               pcache_info->bAuthenticator = bAuthenticator;\r
+                               memcpy(pcache_info->saddr,pTaddr,ETH_ALEN);\r
+                               list_add_tail(&pcache_info->list, &ieee->cache_frag_list);\r
+                               WAPI_TRACE(WAPI_RX, "%s(): First fragment, allocate cache to store.\n",__FUNCTION__);\r
+                               goto drop2;\r
+                       }\r
+               }else{\r
+                       if(data[10] == 0){\r
+                               WAPI_TRACE(WAPI_RX, "%s(): First fragment, no More fragment, ready to send to App.\n",__FUNCTION__);\r
+                               memcpy(rxbuffer,data,len);\r
+                               *rxbuffer_len = len;\r
+                               goto success;\r
+                       }else{\r
+                               WAPI_TRACE(WAPI_ERR, "%s(): First fragment,no More fragment, but fragnum is not 0.\n",__FUNCTION__);\r
+                               goto drop1;
+                       }\r
+               }\r
+       }\r
+       else{\r
+               if(data[11] == 0x1){\r
+                       if(memcmp(data+8,&(pcache_info->recvSeq),2)) {
+                               WAPI_TRACE(WAPI_ERR, "%s(): Not First fragment, More fragment, seq num error.\n",__FUNCTION__);\r
+                               list_del(&pcache_info->list);\r
+                               goto drop1;\r
+                       }else{\r
+                               if(data[10] == (pcache_info->lastFragNum+1)){\r
+                                       WAPI_TRACE(WAPI_RX, "%s(): Not First fragment, More fragment, same seq num, copy to cache.\n",__FUNCTION__);\r
+                                       memcpy(pcache_info->cache_buffer+(pcache_info->cache_buffer_len),data+12,len-12);\r
+                                       pcache_info->cache_buffer_len += len-12;\r
+                                       pcache_info->lastFragNum  = data[10];\r
+                                       goto drop2;\r
+                               }else{\r
+                                       WAPI_TRACE(WAPI_ERR, "%s(): Not First fragment, More fragment, same seq num, fragnum error.\n",__FUNCTION__);\r
+                                       list_del(&pcache_info->list);\r
+                                       goto drop1;
+                               }\r
+                       }\r
+               }else{\r
+                       if(memcmp(data+8,&(pcache_info->recvSeq),2)) {
+                               WAPI_TRACE(WAPI_ERR, "%s(): Not First fragment, no More fragment, seq num error.\n",__FUNCTION__);\r
+                               list_del(&pcache_info->list);\r
+                               goto drop1;\r
+                       }else{\r
+                               if(data[10] == (pcache_info->lastFragNum+1)){                                   \r
+                                       WAPI_TRACE(WAPI_RX, "%s(): Not First fragment, no More fragment, same seq num, ready to send to App.\n",__FUNCTION__);\r
+                                       memcpy(pcache_info->cache_buffer+(pcache_info->cache_buffer_len),data+12,len-12);\r
+                                       pcache_info->cache_buffer_len += len-12;\r
+                                       memcpy(rxbuffer,pcache_info->cache_buffer,pcache_info->cache_buffer_len);\r
+                                       *rxbuffer_len = pcache_info->cache_buffer_len;\r
+                                       list_del(&pcache_info->list);\r
+                                       goto success;\r
+                               }else{\r
+                                       WAPI_TRACE(WAPI_ERR, "%s(): Not First fragment, no More fragment, same seq num, fragnum error.\n",__FUNCTION__);\r
+                                       list_del(&pcache_info->list);\r
+                                       goto drop1;
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+drop1:\r
+       if(pcache_info)\r
+               kfree(pcache_info);\r
+       pcache_info = NULL;\r
+       return false;\r
+drop2:\r
+       return false;\r
+success:\r
+       if(pcache_info)\r
+               kfree(pcache_info);\r
+       pcache_info = NULL;\r
+       return true;\r
+}\r
+\r
+/****************************************************************************\r
+ * data[8-9]: Sequence Number\r
+ * data[10]: Fragment No\r
+ * data[11]: Flag = 1 indicates more data.\r
+ *****************************************************************************/\r
+void WapiHandleRecvPacket(struct rtllib_device* ieee,struct sk_buff *skb,u8 WaiPkt)\r
+{\r
+       PRT_WAPI_T                      pWapiInfo;\r
+       struct rtllib_hdr_3addrqos *hdr;\r
+       u8 *pTaddr, *recvPtr, *rxbuffer;\r
+       u8 bAuthenticator = false, receive_result = false;\r
+       int hdrlen = 0;\r
+       u16 recvLength = 0, fc = 0, rxbuffer_len = 0;\r
+\r
+       WAPI_TRACE(WAPI_RX, "===========> %s\n", __FUNCTION__);\r
+       \r
+       hdr = (struct rtllib_hdr_3addrqos *)skb->data;\r
+       pTaddr = hdr->addr2;\r
+       hdrlen = rtllib_get_hdrlen(fc);\r
+       \r
+       pWapiInfo = &(ieee->wapiInfo);\r
+       if((WaiPkt == WAPI_CERTIFICATE_AUTHENTICATE_REQUEST) \r
+               ||(WaiPkt == WAPI_CERTIFICATE_AUTHENTICATE_RESPONSE)) \r
+       {\r
+               WAPI_TRACE(WAPI_RX, "%s: Valid Wai Packet \n", __FUNCTION__);\r
+               return;\r
+       }else{\r
+               switch(WaiPkt)\r
+               {\r
+                       case WAPI_PREAUTHENTICATE:\r
+                       case WAPI_ACCESS_AUTHENTICATE_REQUEST:\r
+                       case WAPI_USK_RESPONSE:\r
+                       case WAPI_MSK_RESPONSE:\r
+                                bAuthenticator = true;\r
+                                break;\r
+                       default:\r
+                                 break;\r
+               }\r
+               recvLength = skb->len - hdrlen - (SNAP_SIZE + sizeof(u16));\r
+               recvPtr = skb->data + hdrlen + (SNAP_SIZE + sizeof(u16));\r
+\r
+               rxbuffer = kmalloc(2000, GFP_ATOMIC);\r
+               if(NULL == rxbuffer)\r
+                       return;\r
+               \r
+               receive_result = Wapi_defragment(ieee,recvPtr, recvLength,pTaddr,bAuthenticator,rxbuffer,&rxbuffer_len);\r
+               if(receive_result)\r
+                       WapiCreateAppEventAndSend(ieee, rxbuffer, rxbuffer_len, pTaddr, false,false, false, WaiPkt, false);\r
+               \r
+               kfree(rxbuffer);\r
+       }\r
+       WAPI_TRACE(WAPI_RX, "<=========== %s\n", __FUNCTION__);\r
+}\r
+\r
+void WapiSetIE(struct rtllib_device *ieee)\r
+{\r
+       PRT_WAPI_T              pWapiInfo = &(ieee->wapiInfo);\r
+       u16             protocolVer = 1;\r
+       u16             akmCnt = 1;\r
+       u16             suiteCnt = 1;\r
+       u16             capability = 0;\r
+       u8              OUI[3];\r
+\r
+       OUI[0] = 0x00;\r
+       OUI[1] = 0x14;\r
+       OUI[2] = 0x72;\r
+       \r
+       pWapiInfo->wapiIELength = 0;\r
+       memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength, &protocolVer, 2);\r
+       pWapiInfo->wapiIELength +=2;\r
+       memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength, &akmCnt, 2);\r
+       pWapiInfo->wapiIELength +=2;\r
+\r
+       if(pWapiInfo->bWapiPSK){\r
+               memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength,OUI, 3);\r
+               pWapiInfo->wapiIELength +=3;\r
+               pWapiInfo->wapiIE[pWapiInfo->wapiIELength] = 0x2;\r
+               pWapiInfo->wapiIELength +=1;\r
+       }else{\r
+               memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength,OUI, 3);\r
+               pWapiInfo->wapiIELength +=3;\r
+               pWapiInfo->wapiIE[pWapiInfo->wapiIELength] = 0x1;\r
+               pWapiInfo->wapiIELength +=1;\r
+       }\r
+\r
+       memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength, &suiteCnt, 2);\r
+       pWapiInfo->wapiIELength +=2;\r
+       memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength,OUI, 3);\r
+       pWapiInfo->wapiIELength +=3;\r
+       pWapiInfo->wapiIE[pWapiInfo->wapiIELength] = 0x1;\r
+       pWapiInfo->wapiIELength +=1;\r
+\r
+       memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength,OUI, 3);\r
+       pWapiInfo->wapiIELength +=3;\r
+       pWapiInfo->wapiIE[pWapiInfo->wapiIELength] = 0x1;\r
+       pWapiInfo->wapiIELength +=1;\r
+\r
+       memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength, &capability, 2);\r
+       pWapiInfo->wapiIELength +=2;\r
+}\r
+\r
+\r
+/*  PN1 > PN2, return 1,\r
+ *  else return 0.\r
+ */\r
+u32 WapiComparePN(u8 *PN1, u8 *PN2)\r
+{\r
+       char i;\r
+\r
+       if ((NULL == PN1) || (NULL == PN2))\r
+               return 1;\r
+\r
+       if ((PN2[15] - PN1[15]) & 0x80)\r
+               return 1;\r
+\r
+       for (i=16; i>0; i--)\r
+       {\r
+               if(PN1[i-1] == PN2[i-1])\r
+                       continue;\r
+               else if(PN1[i-1] > PN2[i-1])\r
+                       return 1;\r
+               else\r
+                       return 0;                       \r
+       }\r
+\r
+       return 0;\r
+}\r
+\r
+/* AddCount: 1 or 2. \r
+ *  If overflow, return 1,\r
+ *  else return 0.\r
+ */\r
+u8 WapiIncreasePN(u8 *PN, u8 AddCount)\r
+{\r
+       u8  i;\r
+\r
+       if (NULL == PN)\r
+               return 1;\r
+       /*\r
+       if(AddCount == 2){\r
+               printk("############################%s(): PN[0]=0x%x\n", __FUNCTION__, PN[0]);\r
+               if(PN[0] == 0x48){\r
+                       PN[0] += AddCount;\r
+                       return 1;\r
+               }else{\r
+                       PN[0] += AddCount;\r
+                       return 0;\r
+               }\r
+       }\r
+       */\r
+\r
+       for (i=0; i<16; i++)\r
+       {\r
+               if (PN[i] + AddCount <= 0xff)\r
+               {\r
+                       PN[i] += AddCount;\r
+                       return 0;\r
+               }\r
+               else\r
+               {\r
+                       PN[i] += AddCount;\r
+                       AddCount = 1;\r
+               }\r
+       }\r
+\r
+       return 1;\r
+}\r
+\r
+\r
+void WapiGetLastRxUnicastPNForQoSData(\r
+       u8                      UserPriority,\r
+       PRT_WAPI_STA_INFO    pWapiStaInfo,\r
+       u8 *PNOut\r
+)\r
+{\r
+       WAPI_TRACE(WAPI_RX, "===========> %s\n", __FUNCTION__);\r
+       switch(UserPriority)\r
+       {\r
+               case 0:\r
+               case 3:\r
+                             memcpy(PNOut,pWapiStaInfo->lastRxUnicastPNBEQueue,16);\r
+                             break;\r
+               case 1:\r
+               case 2:\r
+                             memcpy(PNOut,pWapiStaInfo->lastRxUnicastPNBKQueue,16);\r
+                             break;\r
+               case 4:\r
+               case 5:\r
+                             memcpy(PNOut,pWapiStaInfo->lastRxUnicastPNVIQueue,16);\r
+                             break;\r
+               case 6:\r
+               case 7:\r
+                             memcpy(PNOut,pWapiStaInfo->lastRxUnicastPNVOQueue,16);\r
+                             break;\r
+               default:\r
+                               WAPI_TRACE(WAPI_ERR, "%s: Unknown TID \n", __FUNCTION__);\r
+                               break;\r
+       }\r
+       WAPI_TRACE(WAPI_RX, "<=========== %s\n", __FUNCTION__);\r
+}\r
+\r
+\r
+void WapiSetLastRxUnicastPNForQoSData(\r
+       u8              UserPriority,\r
+       u8           *PNIn,\r
+       PRT_WAPI_STA_INFO    pWapiStaInfo\r
+)\r
+{\r
+       WAPI_TRACE(WAPI_RX, "===========> %s\n", __FUNCTION__);\r
+       switch(UserPriority)\r
+       {\r
+               case 0:\r
+               case 3:\r
+                             memcpy(pWapiStaInfo->lastRxUnicastPNBEQueue,PNIn,16);\r
+                             break;\r
+               case 1:\r
+               case 2:\r
+                             memcpy(pWapiStaInfo->lastRxUnicastPNBKQueue,PNIn,16);\r
+                             break;\r
+               case 4:\r
+               case 5:\r
+                             memcpy(pWapiStaInfo->lastRxUnicastPNVIQueue,PNIn,16);\r
+                             break;\r
+               case 6:\r
+               case 7:\r
+                             memcpy(pWapiStaInfo->lastRxUnicastPNVOQueue,PNIn,16);\r
+                             break;\r
+               default:\r
+                               WAPI_TRACE(WAPI_ERR, "%s: Unknown TID \n", __FUNCTION__);\r
+                               break;\r
+       }\r
+       WAPI_TRACE(WAPI_RX, "<=========== %s\n", __FUNCTION__);\r
+}\r
+\r
+\r
+/****************************************************************************\r
+TRUE-----------------bRxReorder == FALSE not RX-Reorder\r
+FALSE----------------bRxReorder == TRUE do RX Reorder\r
+add to support WAPI to N-mode\r
+*****************************************************************************/\r
+u8 WapiCheckPnInSwDecrypt(\r
+       struct rtllib_device *ieee,\r
+       struct sk_buff *pskb\r
+)\r
+{\r
+       struct rtllib_hdr_3addrqos *header;\r
+       u16                             fc;\r
+       u8                              *pDaddr, *pTaddr, *pRaddr;\r
+       u8                              ret = false;\r
+\r
+       header = (struct rtllib_hdr_3addrqos *)pskb->data;\r
+       pTaddr = header->addr2;\r
+       pRaddr = header->addr1;\r
+       fc = le16_to_cpu(header->frame_ctl);\r
+       \r
+       if((fc & RTLLIB_FCTL_TODS) == RTLLIB_FCTL_TODS)\r
+               pDaddr = header->addr3;\r
+       else\r
+               pDaddr = header->addr1;\r
+       \r
+       if(eqMacAddr(pRaddr, ieee->dev->dev_addr) &&\r
+               !is_multicast_ether_addr(pDaddr) &&\r
+               ieee->current_network.qos_data.active &&\r
+               IsQoSDataFrame(pskb->data) && ieee->pHTInfo->bCurrentHTSupport &&\r
+               ieee->pHTInfo->bCurRxReorderEnable)\r
+               ret = false;\r
+       else\r
+               ret = true;\r
+\r
+       WAPI_TRACE(WAPI_RX, "%s: return %d\n", __FUNCTION__, ret);\r
+       return ret;\r
+}\r
+\r
+\r
+/****************************************************************************\r
+TRUE-----------------Drop\r
+FALSE---------------- handle \r
+add to support WAPI to N-mode\r
+*****************************************************************************/\r
+u8 WapiCheckDropForRxReorderCase(\r
+       struct rtllib_device *ieee,\r
+       struct rtllib_rxb* prxb\r
+)\r
+{\r
+       PRT_WAPI_T     pWapiInfo = &(ieee->wapiInfo);\r
+       u8                      *pLastRecvPN = NULL;\r
+       u8                      bFind = false;\r
+       PRT_WAPI_STA_INFO       pWapiSta = NULL;\r
+\r
+       if(!pWapiInfo->bWapiEnable)\r
+               return false;\r
+\r
+       if(list_empty(&pWapiInfo->wapiSTAUsedList)){\r
+               bFind = false;\r
+       }else{\r
+               list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) {\r
+                       if(!memcmp(prxb->WapiSrcAddr,pWapiSta->PeerMacAddr,ETH_ALEN)){\r
+                               bFind = true;\r
+                               break;\r
+                       }\r
+               }\r
+       }\r
+       WAPI_TRACE(WAPI_RX, "%s: bFind=%d prxb->WapiSrcAddr="MAC_FMT"\n", __FUNCTION__, bFind, MAC_ARG(prxb->WapiSrcAddr));\r
+\r
+       if(bFind){\r
+               switch(prxb->UserPriority)\r
+               {\r
+                       case 0:\r
+                       case 3:\r
+                               pLastRecvPN = pWapiSta->lastRxUnicastPNBEQueue;\r
+                               break;\r
+                       case 1:\r
+                       case 2:\r
+                               pLastRecvPN = pWapiSta->lastRxUnicastPNBKQueue;\r
+                               break;\r
+                       case 4:\r
+                       case 5:\r
+                               pLastRecvPN = pWapiSta->lastRxUnicastPNVIQueue;\r
+                               break;\r
+                       case 6:\r
+                       case 7:\r
+                               pLastRecvPN = pWapiSta->lastRxUnicastPNVOQueue;\r
+                               break;\r
+                       default:\r
+                               WAPI_TRACE(WAPI_ERR,"%s: Unknown TID \n",__FUNCTION__);\r
+                               break;\r
+               }\r
+\r
+               if(!WapiComparePN(prxb->WapiTempPN,pLastRecvPN))\r
+               {\r
+                       WAPI_TRACE(WAPI_RX,"%s: Equal PN!!\n",__FUNCTION__);\r
+                       return true;\r
+               }\r
+               else\r
+               {\r
+                       memcpy(pLastRecvPN,prxb->WapiTempPN,16);\r
+                       return false;\r
+               }\r
+       }\r
+       else\r
+               return false;\r
+}\r
+\r
+int WapiSendWaiPacket(struct rtllib_device *ieee, struct sk_buff *pskb)\r
+{\r
+       struct sk_buff * newskb = NULL;\r
+       struct rtllib_hdr_3addr *mac_hdr=NULL;\r
+       cb_desc *tcb_desc = NULL;\r
+\r
+       RT_ASSERT_RET_VALUE(ieee,-1);\r
+       RT_ASSERT_RET_VALUE(pskb,-1);\r
+\r
+       if(pskb->len < (14 + sizeof(struct rtllib_hdr_3addr)))\r
+       {\r
+               WAPI_TRACE(WAPI_ERR, "%s: WAI frame is too small!!\n", __FUNCTION__);\r
+               goto failed;\r
+       }\r
+\r
+       skb_pull(pskb, 14);\r
+       \r
+       newskb = dev_alloc_skb(pskb->len+ieee->tx_headroom); \r
+       if(!newskb){\r
+               WAPI_TRACE(WAPI_ERR,"%s: can't alloc skb\n",__FUNCTION__);\r
+               goto failed;\r
+       }\r
+       skb_reserve(newskb, ieee->tx_headroom); \r
+       memcpy(skb_put(newskb, pskb->len), pskb->data, pskb->len);\r
+       dev_kfree_skb_any(pskb);\r
+       /* called with 2nd parm 0, no tx mgmt lock required */\r
+       rtllib_sta_wakeup(ieee,0);\r
+\r
+       tcb_desc = (cb_desc *)(newskb->cb + MAX_DEV_ADDR_SIZE);\r
+#ifdef RTL8192SU_FPGA_UNSPECIFIED_NETWORK\r
+       tcb_desc->queue_index = NORMAL_QUEUE;\r
+#else\r
+       tcb_desc->queue_index = BE_QUEUE;\r
+#endif\r
+       tcb_desc->data_rate = 0x02;     \r
+       tcb_desc->bTxUseDriverAssingedRate = true;\r
+       tcb_desc->RATRIndex = 7;\r
+       tcb_desc->bTxDisableRateFallBack = 1;\r
+#ifdef _RTL8192_EXT_PATCH_\r
+       tcb_desc->macId = 0;\r
+#endif \r
+\r
+       mac_hdr = (struct rtllib_hdr_3addr *)(newskb->data);\r
+       mac_hdr->seq_ctl = cpu_to_le16(ieee->seq_ctrl[0] << 4);\r
+       if (ieee->seq_ctrl[0] == 0xFFF)\r
+               ieee->seq_ctrl[0] = 0;\r
+       else\r
+               ieee->seq_ctrl[0]++;\r
+\r
+       if(!ieee->check_nic_enough_desc(ieee->dev,tcb_desc->queue_index)||\\r
+                       (skb_queue_len(&ieee->skb_waitQ[tcb_desc->queue_index]) != 0)||\\r
+                       (ieee->queue_stop) ) {\r
+               WAPI_TRACE(WAPI_TX, "%s: Insert to waitqueue (idx=%d)!!\n", __FUNCTION__, tcb_desc->queue_index);\r
+               skb_queue_tail(&ieee->skb_waitQ[tcb_desc->queue_index], newskb);\r
+       } else {\r
+               ieee->softmac_hard_start_xmit(newskb,ieee->dev);\r
+       }\r
+\r
+       return 0;\r
+       \r
+failed:        \r
+       dev_kfree_skb_any(pskb);\r
+       return -1;\r
+}\r
+/**********************************************************\r
+ **********************************************************/\r
+const u8 Sbox[256] = {\r
+0xd6,0x90,0xe9,0xfe,0xcc,0xe1,0x3d,0xb7,0x16,0xb6,0x14,0xc2,0x28,0xfb,0x2c,0x05,\r
+0x2b,0x67,0x9a,0x76,0x2a,0xbe,0x04,0xc3,0xaa,0x44,0x13,0x26,0x49,0x86,0x06,0x99,\r
+0x9c,0x42,0x50,0xf4,0x91,0xef,0x98,0x7a,0x33,0x54,0x0b,0x43,0xed,0xcf,0xac,0x62,\r
+0xe4,0xb3,0x1c,0xa9,0xc9,0x08,0xe8,0x95,0x80,0xdf,0x94,0xfa,0x75,0x8f,0x3f,0xa6,\r
+0x47,0x07,0xa7,0xfc,0xf3,0x73,0x17,0xba,0x83,0x59,0x3c,0x19,0xe6,0x85,0x4f,0xa8,\r
+0x68,0x6b,0x81,0xb2,0x71,0x64,0xda,0x8b,0xf8,0xeb,0x0f,0x4b,0x70,0x56,0x9d,0x35,\r
+0x1e,0x24,0x0e,0x5e,0x63,0x58,0xd1,0xa2,0x25,0x22,0x7c,0x3b,0x01,0x21,0x78,0x87,\r
+0xd4,0x00,0x46,0x57,0x9f,0xd3,0x27,0x52,0x4c,0x36,0x02,0xe7,0xa0,0xc4,0xc8,0x9e,\r
+0xea,0xbf,0x8a,0xd2,0x40,0xc7,0x38,0xb5,0xa3,0xf7,0xf2,0xce,0xf9,0x61,0x15,0xa1,\r
+0xe0,0xae,0x5d,0xa4,0x9b,0x34,0x1a,0x55,0xad,0x93,0x32,0x30,0xf5,0x8c,0xb1,0xe3,\r
+0x1d,0xf6,0xe2,0x2e,0x82,0x66,0xca,0x60,0xc0,0x29,0x23,0xab,0x0d,0x53,0x4e,0x6f,\r
+0xd5,0xdb,0x37,0x45,0xde,0xfd,0x8e,0x2f,0x03,0xff,0x6a,0x72,0x6d,0x6c,0x5b,0x51,\r
+0x8d,0x1b,0xaf,0x92,0xbb,0xdd,0xbc,0x7f,0x11,0xd9,0x5c,0x41,0x1f,0x10,0x5a,0xd8,\r
+0x0a,0xc1,0x31,0x88,0xa5,0xcd,0x7b,0xbd,0x2d,0x74,0xd0,0x12,0xb8,0xe5,0xb4,0xb0,\r
+0x89,0x69,0x97,0x4a,0x0c,0x96,0x77,0x7e,0x65,0xb9,0xf1,0x09,0xc5,0x6e,0xc6,0x84,\r
+0x18,0xf0,0x7d,0xec,0x3a,0xdc,0x4d,0x20,0x79,0xee,0x5f,0x3e,0xd7,0xcb,0x39,0x48\r
+};\r
+\r
+const u32 CK[32] = {\r
+       0x00070e15, 0x1c232a31, 0x383f464d, 0x545b6269,\r
+       0x70777e85, 0x8c939aa1, 0xa8afb6bd, 0xc4cbd2d9,\r
+       0xe0e7eef5, 0xfc030a11, 0x181f262d, 0x343b4249,\r
+       0x50575e65, 0x6c737a81, 0x888f969d, 0xa4abb2b9,\r
+       0xc0c7ced5, 0xdce3eaf1, 0xf8ff060d, 0x141b2229,\r
+       0x30373e45, 0x4c535a61, 0x686f767d, 0x848b9299,\r
+       0xa0a7aeb5, 0xbcc3cad1, 0xd8dfe6ed, 0xf4fb0209,\r
+       0x10171e25, 0x2c333a41, 0x484f565d, 0x646b7279 };\r
+\r
+#define Rotl(_x, _y) (((_x) << (_y)) | ((_x) >> (32 - (_y))))\r
+\r
+#define ByteSub(_A) (Sbox[(_A) >> 24 & 0xFF] << 24 | \\r
+                     Sbox[(_A) >> 16 & 0xFF] << 16 | \\r
+                     Sbox[(_A) >>  8 & 0xFF] <<  8 | \\r
+                     Sbox[(_A) & 0xFF])\r
+\r
+#define L1(_B) ((_B) ^ Rotl(_B, 2) ^ Rotl(_B, 10) ^ Rotl(_B, 18) ^ Rotl(_B, 24))\r
+#define L2(_B) ((_B) ^ Rotl(_B, 13) ^ Rotl(_B, 23))\r
+\r
+static void\r
+xor_block(void *dst, void *src1, void *src2)\r
+/* 128-bit xor: *dst = *src1 xor *src2. Pointers must be 32-bit aligned  */\r
+{\r
+    ((u32 *)dst)[0] = ((u32 *)src1)[0] ^ ((u32 *)src2)[0];\r
+    ((u32 *)dst)[1] = ((u32 *)src1)[1] ^ ((u32 *)src2)[1];\r
+    ((u32 *)dst)[2] = ((u32 *)src1)[2] ^ ((u32 *)src2)[2];\r
+    ((u32 *)dst)[3] = ((u32 *)src1)[3] ^ ((u32 *)src2)[3];\r
+}\r
+\r
+\r
+void SMS4Crypt(u8 *Input, u8 *Output, u32 *rk)\r
+{\r
+        u32 r, mid, x0, x1, x2, x3, *p;\r
+        p = (u32 *)Input;\r
+        x0 = p[0];\r
+        x1 = p[1];\r
+        x2 = p[2];\r
+        x3 = p[3];\r
+#ifdef LITTLE_ENDIAN\r
+        x0 = Rotl(x0, 16); x0 = ((x0 & 0x00FF00FF) << 8) | ((x0 & 0xFF00FF00) >> 8);\r
+        x1 = Rotl(x1, 16); x1 = ((x1 & 0x00FF00FF) << 8) | ((x1 & 0xFF00FF00) >> 8);\r
+        x2 = Rotl(x2, 16); x2 = ((x2 & 0x00FF00FF) << 8) | ((x2 & 0xFF00FF00) >> 8);\r
+        x3 = Rotl(x3, 16); x3 = ((x3 & 0x00FF00FF) << 8) | ((x3 & 0xFF00FF00) >> 8);\r
+#endif\r
+        for (r = 0; r < 32; r += 4)\r
+        {\r
+                 mid = x1 ^ x2 ^ x3 ^ rk[r + 0];\r
+                 mid = ByteSub(mid);\r
+                 x0 ^= L1(mid);\r
+                 mid = x2 ^ x3 ^ x0 ^ rk[r + 1];\r
+                 mid = ByteSub(mid);\r
+                 x1 ^= L1(mid);\r
+                 mid = x3 ^ x0 ^ x1 ^ rk[r + 2];\r
+                 mid = ByteSub(mid);\r
+                 x2 ^= L1(mid);\r
+                 mid = x0 ^ x1 ^ x2 ^ rk[r + 3];\r
+                 mid = ByteSub(mid);\r
+                 x3 ^= L1(mid);\r
+        }\r
+#ifdef LITTLE_ENDIAN\r
+        x0 = Rotl(x0, 16); x0 = ((x0 & 0x00FF00FF) << 8) | ((x0 & 0xFF00FF00) >> 8);\r
+        x1 = Rotl(x1, 16); x1 = ((x1 & 0x00FF00FF) << 8) | ((x1 & 0xFF00FF00) >> 8);\r
+        x2 = Rotl(x2, 16); x2 = ((x2 & 0x00FF00FF) << 8) | ((x2 & 0xFF00FF00) >> 8);\r
+        x3 = Rotl(x3, 16); x3 = ((x3 & 0x00FF00FF) << 8) | ((x3 & 0xFF00FF00) >> 8);\r
+#endif\r
+        p = (u32 *)Output;\r
+        p[0] = x3;\r
+        p[1] = x2;\r
+        p[2] = x1;\r
+        p[3] = x0;\r
+}\r
+\r
+\r
+\r
+void SMS4KeyExt(u8 *Key, u32 *rk, u32 CryptFlag)\r
+{\r
+        u32 r, mid, x0, x1, x2, x3, *p;\r
+        \r
+        p = (u32 *)Key;\r
+        x0 = p[0];\r
+        x1 = p[1];\r
+        x2 = p[2];\r
+        x3 = p[3];\r
+#ifdef LITTLE_ENDIAN\r
+        x0 = Rotl(x0, 16); x0 = ((x0 & 0xFF00FF) << 8) | ((x0 & 0xFF00FF00) >> 8);\r
+        x1 = Rotl(x1, 16); x1 = ((x1 & 0xFF00FF) << 8) | ((x1 & 0xFF00FF00) >> 8);\r
+        x2 = Rotl(x2, 16); x2 = ((x2 & 0xFF00FF) << 8) | ((x2 & 0xFF00FF00) >> 8);\r
+        x3 = Rotl(x3, 16); x3 = ((x3 & 0xFF00FF) << 8) | ((x3 & 0xFF00FF00) >> 8);\r
+#endif\r
+\r
+        x0 ^= 0xa3b1bac6;\r
+        x1 ^= 0x56aa3350;\r
+        x2 ^= 0x677d9197;\r
+        x3 ^= 0xb27022dc;\r
+        for (r = 0; r < 32; r += 4)\r
+        {\r
+                 mid = x1 ^ x2 ^ x3 ^ CK[r + 0];\r
+                 mid = ByteSub(mid);\r
+                 rk[r + 0] = x0 ^= L2(mid);\r
+                 mid = x2 ^ x3 ^ x0 ^ CK[r + 1];\r
+                 mid = ByteSub(mid);\r
+                 rk[r + 1] = x1 ^= L2(mid);\r
+                 mid = x3 ^ x0 ^ x1 ^ CK[r + 2];\r
+                 mid = ByteSub(mid);\r
+                 rk[r + 2] = x2 ^= L2(mid);\r
+                 mid = x0 ^ x1 ^ x2 ^ CK[r + 3];\r
+                 mid = ByteSub(mid);\r
+                 rk[r + 3] = x3 ^= L2(mid);\r
+        }\r
+        if (CryptFlag == DECRYPT)\r
+        {\r
+                 for (r = 0; r < 16; r++)\r
+                        mid = rk[r], rk[r] = rk[31 - r], rk[31 - r] = mid;\r
+        }\r
+}\r
+\r
+\r
+void WapiSMS4Cryption(u8 *Key, u8 *IV, u8 *Input, u16 InputLength, \r
+                                                u8 *Output, u16 *OutputLength, u32 CryptFlag)\r
+{\r
+       u32 blockNum,i,j, rk[32];\r
+       u16 remainder;\r
+       u8 blockIn[16],blockOut[16], tempIV[16], k;\r
+\r
+       *OutputLength = 0;\r
+       remainder = InputLength & 0x0F;\r
+       blockNum = InputLength >> 4;\r
+       if(remainder !=0)\r
+               blockNum++;\r
+       else\r
+               remainder = 16;\r
+\r
+       for(k=0;k<16;k++)\r
+               tempIV[k] = IV[15-k];\r
+\r
+       memcpy(blockIn, tempIV, 16);\r
+\r
+      SMS4KeyExt((u8 *)Key, rk,CryptFlag);\r
\r
+       for(i=0; i<blockNum-1; i++)\r
+       {\r
+               SMS4Crypt((u8 *)blockIn, blockOut, rk);\r
+             xor_block(&Output[i*16], &Input[i*16], blockOut);\r
+               memcpy(blockIn,blockOut,16);\r
+       }\r
+       \r
+       *OutputLength = i*16;\r
+\r
+       SMS4Crypt((u8 *)blockIn, blockOut, rk);\r
+\r
+       for(j=0; j<remainder; j++)\r
+       {\r
+               Output[i*16+j] = Input[i*16+j] ^ blockOut[j];\r
+       }\r
+      *OutputLength += remainder;  \r
+\r
+}\r
+\r
+void WapiSMS4Encryption(u8 *Key, u8 *IV, u8 *Input, u16 InputLength, \r
+                                                    u8 *Output, u16 *OutputLength)\r
+{\r
+    \r
+       WapiSMS4Cryption(Key, IV, Input, InputLength, Output, OutputLength, ENCRYPT);\r
+}\r
+\r
+void WapiSMS4Decryption(u8 *Key, u8 *IV, u8 *Input, u16 InputLength, \r
+                                                    u8 *Output, u16 *OutputLength)\r
+{\r
+       WapiSMS4Cryption(Key, IV, Input, InputLength, Output, OutputLength, ENCRYPT);\r
+}\r
+\r
+void WapiSMS4CalculateMic(u8 *Key, u8 *IV, u8 *Input1, u8 Input1Length,\r
+                                                 u8 *Input2, u16 Input2Length, u8 *Output, u8 *OutputLength)\r
+{\r
+       u32 blockNum, i, remainder, rk[32];\r
+       u8 BlockIn[16], BlockOut[16], TempBlock[16], tempIV[16], k;\r
+\r
+       *OutputLength = 0;\r
+       remainder = Input1Length & 0x0F;\r
+       blockNum = Input1Length >> 4;\r
+\r
+       for(k=0;k<16;k++)\r
+               tempIV[k] = IV[15-k];\r
+\r
+       memcpy(BlockIn, tempIV, 16);\r
+\r
+       SMS4KeyExt((u8 *)Key, rk, ENCRYPT);\r
+\r
+       SMS4Crypt((u8 *)BlockIn, BlockOut, rk);\r
+      \r
+       for(i=0; i<blockNum; i++){\r
+               xor_block(BlockIn, (Input1+i*16), BlockOut);\r
+               SMS4Crypt((u8 *)BlockIn, BlockOut, rk);\r
+       }\r
+\r
+       if(remainder !=0){\r
+               memset(TempBlock, 0, 16);\r
+               memcpy(TempBlock, (Input1+blockNum*16), remainder);\r
+\r
+               xor_block(BlockIn, TempBlock, BlockOut);\r
+               SMS4Crypt((u8 *)BlockIn, BlockOut, rk); \r
+      }\r
+\r
+       remainder = Input2Length & 0x0F;\r
+       blockNum = Input2Length >> 4;\r
+\r
+       for(i=0; i<blockNum; i++){\r
+               xor_block(BlockIn, (Input2+i*16), BlockOut);\r
+               SMS4Crypt((u8 *)BlockIn, BlockOut, rk);\r
+       }\r
+\r
+       if(remainder !=0){\r
+               memset(TempBlock, 0, 16);\r
+               memcpy(TempBlock, (Input2+blockNum*16), remainder);\r
+\r
+               xor_block(BlockIn, TempBlock, BlockOut);\r
+               SMS4Crypt((u8 *)BlockIn, BlockOut, rk);\r
+       }\r
+       \r
+       memcpy(Output, BlockOut, 16);\r
+       *OutputLength = 16;\r
+}\r
+\r
+void SecCalculateMicSMS4(\r
+       u8              KeyIdx,\r
+       u8        *MicKey, \r
+       u8        *pHeader,\r
+       u8        *pData,\r
+       u16       DataLen,\r
+       u8        *MicBuffer\r
+       )\r
+{\r
+       struct rtllib_hdr_3addrqos *header;\r
+       u8 TempBuf[34], TempLen = 32, MicLen, QosOffset, *IV;\r
+       u16 *pTemp, fc;\r
+\r
+       header = (struct rtllib_hdr_3addrqos *)pHeader;\r
+       memset(TempBuf, 0, 34);\r
+       memcpy(TempBuf, pHeader, 2); 
+       pTemp = (u16*)TempBuf;\r
+       *pTemp &= 0xc78f;       
+\r
+       memcpy((TempBuf+2), (pHeader+4), 12); 
+       memcpy((TempBuf+14), (pHeader+22), 2); 
+       pTemp = (u16*)(TempBuf + 14);\r
+       *pTemp &= 0x000f;\r
+    \r
+       memcpy((TempBuf+16), (pHeader+16), 6); 
+\r
+       fc = le16_to_cpu(header->frame_ctl);\r
+       if((fc & (RTLLIB_FCTL_FROMDS | RTLLIB_FCTL_TODS)) == (RTLLIB_FCTL_FROMDS | RTLLIB_FCTL_TODS))\r
+       {\r
+               memcpy((TempBuf+22), (pHeader+24), 6);\r
+               QosOffset = 30;\r
+       }else{\r
+               memset((TempBuf+22), 0, 6);\r
+               QosOffset = 24;\r
+       }\r
+\r
+       if( IsQoSDataFrame(pHeader)){ 
+               memcpy((TempBuf+28), (pHeader+QosOffset), 2);\r
+               TempLen += 2;\r
+               IV = pHeader + QosOffset + 2 + 2;\r
+       }else{\r
+               IV = pHeader + QosOffset + 2;\r
+       }\r
+\r
+       TempBuf[TempLen-1] = (u8)(DataLen & 0xff);\r
+       TempBuf[TempLen-2] = (u8)((DataLen & 0xff00)>>8);\r
+       TempBuf[TempLen-4] = KeyIdx;\r
+\r
+       WAPI_DATA(WAPI_TX, "CalculateMic - KEY", MicKey, 16);\r
+       WAPI_DATA(WAPI_TX, "CalculateMic - IV", IV, 16);\r
+       WAPI_DATA(WAPI_TX, "CalculateMic - TempBuf", TempBuf, TempLen);\r
+       WAPI_DATA(WAPI_TX, "CalculateMic - pData", pData, DataLen);\r
+\r
+       WapiSMS4CalculateMic(MicKey, IV, TempBuf, TempLen,\r
+                                                    pData, DataLen, MicBuffer, &MicLen);\r
+\r
+       if (MicLen != 16)\r
+               WAPI_TRACE(WAPI_ERR,"%s: MIC Length Error!!\n",__FUNCTION__);\r
+}\r
+       \r
+int SecSMS4HeaderFillIV(struct rtllib_device *ieee, struct sk_buff *pskb)\r
+{\r
+       u8 *pSecHeader = NULL, *pos = NULL, *pRA = NULL;\r
+       u8 bPNOverflow = false, bFindMatchPeer = false, hdr_len = 0;\r
+       PWLAN_HEADER_WAPI_EXTENSION pWapiExt = NULL;\r
+       PRT_WAPI_T         pWapiInfo = &ieee->wapiInfo; \r
+       PRT_WAPI_STA_INFO  pWapiSta = NULL; \r
+       int ret = 0;\r
+\r
+       if ((!ieee->WapiSupport) || (!ieee->wapiInfo.bWapiEnable)){\r
+               WAPI_TRACE(WAPI_ERR,"%s: ieee->WapiSupport = 0!!\n",__FUNCTION__);\r
+               return -1;\r
+       }\r
+\r
+       hdr_len = sMacHdrLng;\r
+       if(IsQoSDataFrame(pskb->data) ){\r
+               hdr_len += sQoSCtlLng;\r
+       }\r
+\r
+       pos = skb_push(pskb, ieee->wapiInfo.extra_prefix_len);\r
+       memmove(pos, pos+ieee->wapiInfo.extra_prefix_len, hdr_len);\r
+\r
+       pSecHeader = pskb->data + hdr_len;\r
+       pWapiExt = (PWLAN_HEADER_WAPI_EXTENSION)pSecHeader;\r
+       pRA = pskb->data + 4;\r
+\r
+       WAPI_DATA(WAPI_TX, "FillIV - Before Fill IV", pskb->data, pskb->len);\r
+\r
+       if( is_multicast_ether_addr(pRA) ){ \r
+               if(!pWapiInfo->wapiTxMsk.bTxEnable){\r
+                       WAPI_TRACE(WAPI_ERR,"%s: bTxEnable = 0!!\n",__FUNCTION__);\r
+                       return -2;\r
+               }\r
+               if(pWapiInfo->wapiTxMsk.keyId <= 1){\r
+                       pWapiExt->KeyIdx = pWapiInfo->wapiTxMsk.keyId;\r
+                       pWapiExt->Reserved = 0;\r
+                       bPNOverflow = WapiIncreasePN(pWapiInfo->lastTxMulticastPN, 1);\r
+                       memcpy(pWapiExt->PN, pWapiInfo->lastTxMulticastPN, 16);\r
+                       if (bPNOverflow){\r
+                               WapiCreateAppEventAndSend(ieee,NULL,0,pRA, false, false, true, 0, false);\r
+                       }                         \r
+               }else{\r
+                       WAPI_TRACE(WAPI_ERR,"%s: Invalid Wapi Multicast KeyIdx!!\n",__FUNCTION__);\r
+                       ret = -3;\r
+               }\r
+       }\r
+       else{ \r
+               list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) {\r
+                       if(!memcmp(pWapiSta->PeerMacAddr,pRA,6)){\r
+                               bFindMatchPeer = true;\r
+                               break;\r
+                       }\r
+               }\r
+               if (bFindMatchPeer){\r
+                       if((!pWapiSta->wapiUskUpdate.bTxEnable) && (!pWapiSta->wapiUsk.bTxEnable)){\r
+                               WAPI_TRACE(WAPI_ERR,"%s: bTxEnable = 0!!\n",__FUNCTION__);\r
+                               return -4;\r
+                       }\r
+                       if (pWapiSta->wapiUsk.keyId <= 1){\r
+                               if(pWapiSta->wapiUskUpdate.bTxEnable)\r
+                                       pWapiExt->KeyIdx = pWapiSta->wapiUskUpdate.keyId;\r
+                               else\r
+                                       pWapiExt->KeyIdx = pWapiSta->wapiUsk.keyId;\r
+\r
+                               pWapiExt->Reserved = 0;\r
+                               bPNOverflow = WapiIncreasePN(pWapiSta->lastTxUnicastPN, 2);\r
+                               memcpy(pWapiExt->PN, pWapiSta->lastTxUnicastPN, 16);\r
+                               if (bPNOverflow){\r
+                                       WapiCreateAppEventAndSend(ieee,NULL,0,pWapiSta->PeerMacAddr, false, true, false, 0, false);\r
+                               }\r
+                       }else{\r
+                               WAPI_TRACE(WAPI_ERR,"%s: Invalid Wapi Unicast KeyIdx!!\n",__FUNCTION__);\r
+                               ret = -5;\r
+                       }\r
+               }\r
+               else{           \r
+                       WAPI_TRACE(WAPI_ERR,"%s: Can not find Peer Sta "MAC_FMT"!!\n",__FUNCTION__, MAC_ARG(pRA));\r
+                       ret = -6;\r
+               }\r
+       }\r
+               \r
+       WAPI_DATA(WAPI_TX, "FillIV - After Fill IV", pskb->data, pskb->len);\r
+       return ret;\r
+}\r
+\r
+void SecSWSMS4Encryption(\r
+       struct rtllib_device *ieee,\r
+       struct sk_buff *pskb\r
+       )\r
+{\r
+       PRT_WAPI_T              pWapiInfo = &ieee->wapiInfo; \r
+       PRT_WAPI_STA_INFO   pWapiSta = NULL;    \r
+       u8 *SecPtr = NULL, *pRA, *pMicKey = NULL, *pDataKey = NULL, *pIV = NULL, *pHeader = pskb->data; \r
+       u8 IVOffset, DataOffset, bFindMatchPeer = false, KeyIdx = 0, MicBuffer[16];     \r
+       u16 OutputLength;\r
+\r
+#if defined(RTL8192U) || defined(RTL8192SU)\r
+       u32 SpecificHeadOverhead = 0;\r
+#ifdef USB_TX_DRIVER_AGGREGATION_ENABLE\r
+       cb_desc *tcb_desc = (cb_desc *)(pskb->cb + MAX_DEV_ADDR_SIZE);\r
+       if (tcb_desc->drv_agg_enable) \r
+               SpecificHeadOverhead = TX_PACKET_DRVAGGR_SUBFRAME_SHIFT_BYTES;\r
+       else\r
+#endif\r
+       SpecificHeadOverhead = TX_PACKET_SHIFT_BYTES;\r
+\r
+       pHeader += SpecificHeadOverhead;\r
+#endif\r
+       WAPI_TRACE(WAPI_TX, "=========>%s\n", __FUNCTION__);\r
+\r
+       if( IsQoSDataFrame(pHeader) ){\r
+               IVOffset = sMacHdrLng + sQoSCtlLng;\r
+       }else{\r
+               IVOffset = sMacHdrLng;\r
+       }\r
+       \r
+       DataOffset = IVOffset + ieee->wapiInfo.extra_prefix_len;\r
+       \r
+       pRA = pHeader + 4;\r
+       if( is_multicast_ether_addr(pRA) ){ \r
+               KeyIdx = pWapiInfo->wapiTxMsk.keyId;\r
+               pIV = pWapiInfo->lastTxMulticastPN;\r
+               pMicKey = pWapiInfo->wapiTxMsk.micKey;\r
+               pDataKey = pWapiInfo->wapiTxMsk.dataKey;\r
+       }else{ \r
+               if (!list_empty(&(pWapiInfo->wapiSTAUsedList))){\r
+                       list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) {\r
+                               if (0 == memcmp(pWapiSta->PeerMacAddr, pRA, 6)){\r
+                                       bFindMatchPeer = true;      \r
+                                       break;\r
+                               }\r
+                       }    \r
+                       \r
+                       if (bFindMatchPeer){\r
+                               if (pWapiSta->wapiUskUpdate.bTxEnable){\r
+                                       KeyIdx = pWapiSta->wapiUskUpdate.keyId;\r
+                                       WAPI_TRACE(WAPI_TX, "%s(): Use update USK!! KeyIdx=%d\n", __FUNCTION__, KeyIdx);\r
+                                       pIV = pWapiSta->lastTxUnicastPN;\r
+                                       pMicKey = pWapiSta->wapiUskUpdate.micKey;\r
+                                       pDataKey = pWapiSta->wapiUskUpdate.dataKey;\r
+                               }else{\r
+                                       KeyIdx = pWapiSta->wapiUsk.keyId;\r
+                                       WAPI_TRACE(WAPI_TX, "%s(): Use USK!! KeyIdx=%d\n", __FUNCTION__, KeyIdx);\r
+                                       pIV = pWapiSta->lastTxUnicastPN;\r
+                                       pMicKey = pWapiSta->wapiUsk.micKey;\r
+                                       pDataKey = pWapiSta->wapiUsk.dataKey;\r
+                               }\r
+                       }else{\r
+                               WAPI_TRACE(WAPI_ERR,"%s: Can not find Peer Sta!!\n",__FUNCTION__);\r
+                               return;\r
+                       }\r
+               }else{\r
+                       WAPI_TRACE(WAPI_ERR,"%s: wapiSTAUsedList is empty!!\n",__FUNCTION__);\r
+                       return;\r
+               }\r
+       }       \r
+\r
+       SecPtr = pHeader;\r
+       SecCalculateMicSMS4(KeyIdx, pMicKey, SecPtr, (SecPtr+DataOffset), pskb->len-DataOffset, MicBuffer);\r
+\r
+       WAPI_DATA(WAPI_TX, "Encryption - MIC", MicBuffer, ieee->wapiInfo.extra_postfix_len);\r
+\r
+       memcpy(skb_put(pskb,ieee->wapiInfo.extra_postfix_len),\r
+                       MicBuffer,\r
+                       ieee->wapiInfo.extra_postfix_len\r
+                       );\r
+               \r
+       WapiSMS4Encryption(pDataKey, pIV, (SecPtr+DataOffset), pskb->len-DataOffset, (SecPtr+DataOffset), &OutputLength);\r
+       \r
+       WAPI_DATA(WAPI_TX, "Encryption - After SMS4 encryption", pskb->data,pskb->len);\r
+\r
+       if (OutputLength != pskb->len-DataOffset)\r
+               WAPI_TRACE(WAPI_ERR,"%s: Output Length Error!!\n",__FUNCTION__);\r
+\r
+       WAPI_TRACE(WAPI_TX, "<=========%s\n", __FUNCTION__);\r
+}\r
+\r
+u8 SecSWSMS4Decryption(\r
+       struct rtllib_device *ieee,\r
+       struct sk_buff *pskb,\r
+       struct rtllib_rx_stats *rx_stats\r
+       )\r
+{\r
+       PRT_WAPI_T pWapiInfo = &ieee->wapiInfo; \r
+       PRT_WAPI_STA_INFO   pWapiSta = NULL;    \r
+       u8 IVOffset, DataOffset, bFindMatchPeer = false, bUseUpdatedKey = false;\r
+       u8 KeyIdx, MicBuffer[16], lastRxPNforQoS[16];\r
+       u8 *pRA, *pTA, *pMicKey, *pDataKey, *pLastRxPN, *pRecvPN, *pSecData, *pRecvMic, *pos;\r
+       u8 TID = 0;\r
+       u16 OutputLength, DataLen;\r
+\r
+       rx_stats->bWapiCheckPNInDecrypt = WapiCheckPnInSwDecrypt(ieee, pskb);\r
+       WAPI_TRACE(WAPI_RX, "=========>%s: check PN  %d\n", __FUNCTION__,rx_stats->bWapiCheckPNInDecrypt);\r
+       WAPI_DATA(WAPI_RX, "Decryption - Before decryption", pskb->data, pskb->len);\r
+\r
+       IVOffset = sMacHdrLng;\r
+       if( rx_stats->bIsQosData ){\r
+               IVOffset += sQoSCtlLng;\r
+       }\r
+       if( rx_stats->bContainHTC )\r
+               IVOffset += sHTCLng;\r
+       \r
+               \r
+       DataOffset = IVOffset + ieee->wapiInfo.extra_prefix_len;\r
+\r
+       pRA = pskb->data + 4;\r
+       pTA = pskb->data + 10;\r
+       KeyIdx = *(pskb->data + IVOffset);\r
+       pRecvPN = pskb->data + IVOffset + 2;\r
+       pSecData = pskb->data + DataOffset;\r
+       DataLen = pskb->len - DataOffset;\r
+       pRecvMic = pskb->data + pskb->len - ieee->wapiInfo.extra_postfix_len;\r
+       TID = Frame_QoSTID(pskb->data);\r
+\r
+       if (!list_empty(&(pWapiInfo->wapiSTAUsedList))){\r
+               list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) {\r
+                       if (0 == memcmp(pWapiSta->PeerMacAddr, pTA, 6)){\r
+                               bFindMatchPeer = true;      \r
+                               break;\r
+                       }\r
+               }    \r
+       }       \r
+\r
+       if (!bFindMatchPeer){\r
+               WAPI_TRACE(WAPI_ERR, "%s: Can not find Peer Sta "MAC_FMT" for Key Info!!!\n", __FUNCTION__, MAC_ARG(pTA));\r
+               return false;\r
+       }\r
+\r
+       if( is_multicast_ether_addr(pRA) ){\r
+               WAPI_TRACE(WAPI_RX, "%s: Multicast decryption !!!\n", __FUNCTION__);\r
+               if (pWapiSta->wapiMsk.keyId == KeyIdx && pWapiSta->wapiMsk.bSet){\r
+                       pLastRxPN = pWapiSta->lastRxMulticastPN;  \r
+                       if (!WapiComparePN(pRecvPN, pLastRxPN)){\r
+                               WAPI_TRACE(WAPI_ERR, "%s: MSK PN is not larger than last, Dropped!!!\n", __FUNCTION__);\r
+                               return false;\r
+                       }\r
+\r
+                       memcpy(pLastRxPN, pRecvPN, 16);\r
+                       pMicKey = pWapiSta->wapiMsk.micKey;\r
+                       pDataKey = pWapiSta->wapiMsk.dataKey;\r
+               }else if (pWapiSta->wapiMskUpdate.keyId == KeyIdx && pWapiSta->wapiMskUpdate.bSet){\r
+                       WAPI_TRACE(WAPI_RX, "%s: Use Updated MSK for Decryption !!!\n", __FUNCTION__);\r
+                       bUseUpdatedKey = true;\r
+                       memcpy(pWapiSta->lastRxMulticastPN, pRecvPN, 16);\r
+                       pMicKey = pWapiSta->wapiMskUpdate.micKey;\r
+                       pDataKey = pWapiSta->wapiMskUpdate.dataKey;\r
+               }else{\r
+                       WAPI_TRACE(WAPI_ERR, "%s: Can not find MSK with matched KeyIdx(%d), Dropped !!!\n", __FUNCTION__,KeyIdx);\r
+                       return false;\r
+               }     \r
+       }\r
+       else{ \r
+               WAPI_TRACE(WAPI_RX, "%s: Unicast decryption !!!\n", __FUNCTION__);\r
+               if (pWapiSta->wapiUsk.keyId == KeyIdx && pWapiSta->wapiUsk.bSet){\r
+                       WAPI_TRACE(WAPI_RX, "%s: Use USK for Decryption!!!\n", __FUNCTION__);\r
+                       if(rx_stats->bWapiCheckPNInDecrypt){\r
+                               if(rx_stats->bIsQosData){\r
+                                       WapiGetLastRxUnicastPNForQoSData(TID, pWapiSta, lastRxPNforQoS);\r
+                                       pLastRxPN = lastRxPNforQoS;\r
+                               }else{\r
+                                       pLastRxPN = pWapiSta->lastRxUnicastPN;  \r
+                               }\r
+                               if (!WapiComparePN(pRecvPN, pLastRxPN)){\r
+                                       return false;\r
+                               }\r
+                       }else{\r
+                               memcpy(rx_stats->WapiTempPN,pRecvPN,16);\r
+                       }\r
+\r
+                       if (ieee->iw_mode == IW_MODE_INFRA){\r
+                               if ((pRecvPN[0] & 0x1) == 0){\r
+                                       WAPI_TRACE(WAPI_ERR, "%s: Rx USK PN is not odd when Infra STA mode, Dropped !!!\n", __FUNCTION__);\r
+                                       return false;\r
+                               }\r
+                       }\r
+                   \r
+                       pMicKey = pWapiSta->wapiUsk.micKey;\r
+                       pDataKey = pWapiSta->wapiUsk.dataKey;\r
+               }\r
+               else if (pWapiSta->wapiUskUpdate.keyId == KeyIdx && pWapiSta->wapiUskUpdate.bSet ){\r
+                       WAPI_TRACE(WAPI_RX, "%s: Use Updated USK for Decryption!!!\n", __FUNCTION__);\r
+                       if(pWapiSta->bAuthenticatorInUpdata)\r
+                               bUseUpdatedKey = true;\r
+                       else\r
+                               bUseUpdatedKey = false;\r
+\r
+                       if(rx_stats->bIsQosData){\r
+                               WapiSetLastRxUnicastPNForQoSData(TID, pRecvPN, pWapiSta);\r
+                       }else{\r
+                               memcpy(pWapiSta->lastRxUnicastPN, pRecvPN, 16);\r
+                       }\r
+                       pMicKey = pWapiSta->wapiUskUpdate.micKey;\r
+                       pDataKey = pWapiSta->wapiUskUpdate.dataKey;\r
+               }else{\r
+                       WAPI_TRACE(WAPI_RX, "%s: No valid USK!!!KeyIdx=%d pWapiSta->wapiUsk.keyId=%d pWapiSta->wapiUskUpdate.keyId=%d\n", __FUNCTION__, KeyIdx, pWapiSta->wapiUsk.keyId, pWapiSta->wapiUskUpdate.keyId);\r
+                       return false;\r
+               }       \r
+       }       \r
+\r
+       WAPI_DATA(WAPI_RX, "Decryption - DataKey", pDataKey, 16);\r
+       WAPI_DATA(WAPI_RX, "Decryption - IV", pRecvPN, 16);\r
+       WapiSMS4Decryption(pDataKey, pRecvPN, pSecData, DataLen, pSecData, &OutputLength);\r
+\r
+       if (OutputLength != DataLen)\r
+               WAPI_TRACE(WAPI_ERR, "%s:  Output Length Error!!!!\n", __FUNCTION__);      \r
+\r
+       WAPI_DATA(WAPI_RX, "Decryption - After decryption", pskb->data, pskb->len);\r
+\r
+       DataLen -= ieee->wapiInfo.extra_postfix_len;     \r
+\r
+       SecCalculateMicSMS4(KeyIdx, pMicKey, pskb->data, pSecData, DataLen, MicBuffer);\r
+\r
+       WAPI_DATA(WAPI_RX, "Decryption - MIC received", pRecvMic, SMS4_MIC_LEN);\r
+       WAPI_DATA(WAPI_RX, "Decryption - MIC calculated", MicBuffer, SMS4_MIC_LEN);\r
+\r
+       if (0 == memcmp(MicBuffer, pRecvMic, ieee->wapiInfo.extra_postfix_len)){\r
+               WAPI_TRACE(WAPI_RX, "%s: Check MIC OK!!\n", __FUNCTION__);\r
+               if (bUseUpdatedKey){\r
+                       if ( is_multicast_ether_addr(pRA) ){\r
+                               WAPI_TRACE(WAPI_API, "%s(): AE use new update MSK!!", __FUNCTION__);\r
+                               pWapiSta->wapiMsk.keyId = pWapiSta->wapiMskUpdate.keyId;\r
+                               memcpy(pWapiSta->wapiMsk.dataKey, pWapiSta->wapiMskUpdate.dataKey, 16);  \r
+                               memcpy(pWapiSta->wapiMsk.micKey, pWapiSta->wapiMskUpdate.micKey, 16);  \r
+                               pWapiSta->wapiMskUpdate.bTxEnable = pWapiSta->wapiMskUpdate.bSet = false;\r
+                       }else{\r
+                               WAPI_TRACE(WAPI_API, "%s(): AE use new update USK!!", __FUNCTION__);\r
+                               pWapiSta->wapiUsk.keyId = pWapiSta->wapiUskUpdate.keyId;\r
+                               memcpy(pWapiSta->wapiUsk.dataKey, pWapiSta->wapiUskUpdate.dataKey, 16);  \r
+                               memcpy(pWapiSta->wapiUsk.micKey, pWapiSta->wapiUskUpdate.micKey, 16);  \r
+                               pWapiSta->wapiUskUpdate.bTxEnable = pWapiSta->wapiUskUpdate.bSet = false; \r
+                       }       \r
+               }\r
+       }else{\r
+               WAPI_TRACE(WAPI_ERR, "%s:  Check MIC Error, Dropped !!!!\n", __FUNCTION__);      \r
+               return false;\r
+       }\r
+\r
+       pos = pskb->data;\r
+       memmove(pos+ieee->wapiInfo.extra_prefix_len, pos, IVOffset);\r
+       skb_pull(pskb, ieee->wapiInfo.extra_prefix_len);\r
+\r
+       WAPI_TRACE(WAPI_RX, "<=========%s\n", __FUNCTION__);\r
+\r
+       return true;\r
+}\r
+\r
+void wapi_test_set_key(struct rtllib_device *ieee, u8* buf)\r
+{ /*Data: keyType(1) + bTxEnable(1) + bAuthenticator(1) + bUpdate(1) + PeerAddr(6) + DataKey(16) + MicKey(16) + KeyId(1)*/\r
+       PRT_WAPI_T                      pWapiInfo = &ieee->wapiInfo;\r
+       PRT_WAPI_BKID           pWapiBkid;\r
+       PRT_WAPI_STA_INFO       pWapiSta;\r
+       u8                                      data[43];\r
+       bool                                    bTxEnable;\r
+       bool                                    bUpdate;\r
+       bool                                    bAuthenticator;\r
+       u8                                      PeerAddr[6];\r
+       u8                                      WapiAEPNInitialValueSrc[16] = {0x37,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;\r
+       u8                                      WapiASUEPNInitialValueSrc[16] = {0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;\r
+       u8                                      WapiAEMultiCastPNInitialValueSrc[16] = {0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;              \r
+\r
+       WAPI_TRACE(WAPI_INIT, "===========>%s\n", __FUNCTION__);\r
+\r
+       if (!ieee->WapiSupport){\r
+           return;\r
+       }\r
+\r
+       copy_from_user(data, buf, 43);\r
+       bTxEnable = data[1];\r
+       bAuthenticator = data[2];\r
+       bUpdate = data[3];\r
+       memcpy(PeerAddr,data+4,6);\r
+               \r
+       if(data[0] == 0x3){\r
+               if(!list_empty(&(pWapiInfo->wapiBKIDIdleList))){\r
+                       pWapiBkid = (PRT_WAPI_BKID)list_entry(pWapiInfo->wapiBKIDIdleList.next, RT_WAPI_BKID, list);\r
+                       list_del_init(&pWapiBkid->list);\r
+                       memcpy(pWapiBkid->bkid, data+10, 16);\r
+                       WAPI_DATA(WAPI_INIT, "SetKey - BKID", pWapiBkid->bkid, 16);\r
+                       list_add_tail(&pWapiBkid->list, &pWapiInfo->wapiBKIDStoreList);\r
+               }\r
+       }else{\r
+               list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) {\r
+                       if(!memcmp(pWapiSta->PeerMacAddr,PeerAddr,6)){\r
+                               pWapiSta->bAuthenticatorInUpdata = false;\r
+                               switch(data[0]){\r
+                               case 1:              
+                                       if(bAuthenticator){         
+                                               memcpy(pWapiSta->lastTxUnicastPN,WapiAEPNInitialValueSrc,16);\r
+                                               if(!bUpdate) {     
+                                                       WAPI_TRACE(WAPI_INIT,"AE fisrt set usk \n");\r
+                                                       pWapiSta->wapiUsk.bSet = true;\r
+                                                       memcpy(pWapiSta->wapiUsk.dataKey,data+10,16);\r
+                                                       memcpy(pWapiSta->wapiUsk.micKey,data+26,16);\r
+                                                       pWapiSta->wapiUsk.keyId = *(data+42);\r
+                                                       pWapiSta->wapiUsk.bTxEnable = true;\r
+                                                       WAPI_DATA(WAPI_INIT, "SetKey - AE USK Data Key", pWapiSta->wapiUsk.dataKey, 16);\r
+                                                       WAPI_DATA(WAPI_INIT, "SetKey - AE USK Mic Key", pWapiSta->wapiUsk.micKey, 16);\r
+                                               }\r
+                                               else               
+                                               {\r
+                                                       WAPI_TRACE(WAPI_INIT, "AE update usk \n");\r
+                                                       pWapiSta->wapiUskUpdate.bSet = true;\r
+                                                       pWapiSta->bAuthenticatorInUpdata = true;\r
+                                                       memcpy(pWapiSta->wapiUskUpdate.dataKey,data+10,16);\r
+                                                       memcpy(pWapiSta->wapiUskUpdate.micKey,data+26,16);\r
+                                                       memcpy(pWapiSta->lastRxUnicastPNBEQueue,WapiASUEPNInitialValueSrc,16);\r
+                                                       memcpy(pWapiSta->lastRxUnicastPNBKQueue,WapiASUEPNInitialValueSrc,16);\r
+                                                       memcpy(pWapiSta->lastRxUnicastPNVIQueue,WapiASUEPNInitialValueSrc,16);\r
+                                                       memcpy(pWapiSta->lastRxUnicastPNVOQueue,WapiASUEPNInitialValueSrc,16);\r
+                                                       memcpy(pWapiSta->lastRxUnicastPN,WapiASUEPNInitialValueSrc,16);\r
+                                                       pWapiSta->wapiUskUpdate.keyId = *(data+42);\r
+                                                       pWapiSta->wapiUskUpdate.bTxEnable = true;\r
+                                               }\r
+                                       }\r
+                                       else{\r
+                                               if(!bUpdate){\r
+                                                       WAPI_TRACE(WAPI_INIT,"ASUE fisrt set usk \n");\r
+                                                       if(bTxEnable){\r
+                                                               pWapiSta->wapiUsk.bTxEnable = true;\r
+                                                               memcpy(pWapiSta->lastTxUnicastPN,WapiASUEPNInitialValueSrc,16);\r
+                                                       }else{\r
+                                                               pWapiSta->wapiUsk.bSet = true;\r
+                                                               memcpy(pWapiSta->wapiUsk.dataKey,data+10,16);\r
+                                                               memcpy(pWapiSta->wapiUsk.micKey,data+26,16);\r
+                                                               pWapiSta->wapiUsk.keyId = *(data+42);\r
+                                                               pWapiSta->wapiUsk.bTxEnable = false;\r
+                                                       }\r
+                                               }else{\r
+                                                       WAPI_TRACE(WAPI_INIT,"ASUE update usk \n");\r
+                                                       if(bTxEnable){\r
+                                                               pWapiSta->wapiUskUpdate.bTxEnable = true;\r
+                                                               if(pWapiSta->wapiUskUpdate.bSet){\r
+                                                                       memcpy(pWapiSta->wapiUsk.dataKey,pWapiSta->wapiUskUpdate.dataKey,16);\r
+                                                                       memcpy(pWapiSta->wapiUsk.micKey,pWapiSta->wapiUskUpdate.micKey,16);\r
+                                                                       pWapiSta->wapiUsk.keyId=pWapiSta->wapiUskUpdate.keyId;\r
+                                                                       memcpy(pWapiSta->lastRxUnicastPNBEQueue,WapiASUEPNInitialValueSrc,16);\r
+                                                                       memcpy(pWapiSta->lastRxUnicastPNBKQueue,WapiASUEPNInitialValueSrc,16);\r
+                                                                       memcpy(pWapiSta->lastRxUnicastPNVIQueue,WapiASUEPNInitialValueSrc,16);\r
+                                                                       memcpy(pWapiSta->lastRxUnicastPNVOQueue,WapiASUEPNInitialValueSrc,16);\r
+                                                                       memcpy(pWapiSta->lastRxUnicastPN,WapiASUEPNInitialValueSrc,16);\r
+                                                                       pWapiSta->wapiUskUpdate.bTxEnable = false;\r
+                                                                       pWapiSta->wapiUskUpdate.bSet = false;\r
+                                                               }\r
+                                                               memcpy(pWapiSta->lastTxUnicastPN,WapiASUEPNInitialValueSrc,16);\r
+                                                       }else{\r
+                                                               pWapiSta->wapiUskUpdate.bSet = true;\r
+                                                               memcpy(pWapiSta->wapiUskUpdate.dataKey,data+10,16);\r
+                                                               memcpy(pWapiSta->wapiUskUpdate.micKey,data+26,16);\r
+                                                               pWapiSta->wapiUskUpdate.keyId = *(data+42);\r
+                                                               pWapiSta->wapiUskUpdate.bTxEnable = false;\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                                       break;\r
+                               case 2:         
+                                       if(bAuthenticator){          
+                                               pWapiInfo->wapiTxMsk.bSet = true;\r
+                                               memcpy(pWapiInfo->wapiTxMsk.dataKey,data+10,16);                                                                                                        \r
+                                               memcpy(pWapiInfo->wapiTxMsk.micKey,data+26,16);\r
+                                               pWapiInfo->wapiTxMsk.keyId = *(data+42);\r
+                                               pWapiInfo->wapiTxMsk.bTxEnable = true;\r
+                                               memcpy(pWapiInfo->lastTxMulticastPN,WapiAEMultiCastPNInitialValueSrc,16);\r
+\r
+                                               if(!bUpdate){      
+                                                       WAPI_TRACE(WAPI_INIT, "AE fisrt set msk \n");\r
+                                                       if(!pWapiSta->bSetkeyOk)\r
+                                                               pWapiSta->bSetkeyOk = true;\r
+                                                       pWapiInfo->bFirstAuthentiateInProgress= false;\r
+                                               }else{               
+                                                       WAPI_TRACE(WAPI_INIT,"AE update msk \n");\r
+                                               }\r
+\r
+                                               WAPI_DATA(WAPI_INIT, "SetKey - AE MSK Data Key", pWapiInfo->wapiTxMsk.dataKey, 16);\r
+                                               WAPI_DATA(WAPI_INIT, "SetKey - AE MSK Mic Key", pWapiInfo->wapiTxMsk.micKey, 16);\r
+                                       }\r
+                                       else{\r
+                                               if(!bUpdate){\r
+                                                       WAPI_TRACE(WAPI_INIT,"ASUE fisrt set msk \n");\r
+                                                       pWapiSta->wapiMsk.bSet = true;\r
+                                                       memcpy(pWapiSta->wapiMsk.dataKey,data+10,16);                                                                                                   \r
+                                                       memcpy(pWapiSta->wapiMsk.micKey,data+26,16);\r
+                                                       pWapiSta->wapiMsk.keyId = *(data+42);\r
+                                                       pWapiSta->wapiMsk.bTxEnable = false;\r
+                                                       if(!pWapiSta->bSetkeyOk)\r
+                                                               pWapiSta->bSetkeyOk = true;\r
+                                                       pWapiInfo->bFirstAuthentiateInProgress= false;\r
+                                                       WAPI_DATA(WAPI_INIT, "SetKey - ASUE MSK Data Key", pWapiSta->wapiMsk.dataKey, 16);\r
+                                                       WAPI_DATA(WAPI_INIT, "SetKey - ASUE MSK Mic Key", pWapiSta->wapiMsk.micKey, 16);\r
+                                               }else{\r
+                                                       WAPI_TRACE(WAPI_INIT,"ASUE update msk \n");\r
+                                                       pWapiSta->wapiMskUpdate.bSet = true;\r
+                                                       memcpy(pWapiSta->wapiMskUpdate.dataKey,data+10,16);                                                                                                     \r
+                                                       memcpy(pWapiSta->wapiMskUpdate.micKey,data+26,16);\r
+                                                       pWapiSta->wapiMskUpdate.keyId = *(data+42);\r
+                                                       pWapiSta->wapiMskUpdate.bTxEnable = false;\r
+                                               }\r
+                                       }\r
+                                       break;\r
+                               default:\r
+                                       WAPI_TRACE(WAPI_ERR,"Unknown Flag \n");\r
+                                       break;\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+       WAPI_TRACE(WAPI_INIT, "<===========%s\n", __FUNCTION__);\r
+}\r
+\r
+void wapi_test_init(struct rtllib_device *ieee)\r
+{\r
+       u8 keybuf[100];\r
+       u8 mac_addr[6]={0x00,0xe0,0x4c,0x72,0x04,0x70};\r
+       u8 UskDataKey[16]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};\r
+       u8 UskMicKey[16]={0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f};\r
+       u8 UskId = 0;\r
+       u8 MskDataKey[16]={0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f};\r
+       u8 MskMicKey[16]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f};\r
+       u8 MskId = 0;\r
+\r
+       WAPI_TRACE(WAPI_INIT, "===========>%s\n", __FUNCTION__);\r
+\r
+       WAPI_TRACE(WAPI_INIT, "%s: Enable wapi!!!!\n", __FUNCTION__);\r
+       ieee->wapiInfo.bWapiEnable = true;\r
+       ieee->pairwise_key_type = KEY_TYPE_SMS4;\r
+       ieee->group_key_type = KEY_TYPE_SMS4;\r
+       ieee->wapiInfo.extra_prefix_len = WAPI_EXT_LEN;\r
+       ieee->wapiInfo.extra_postfix_len = SMS4_MIC_LEN;\r
+\r
+       WAPI_TRACE(WAPI_INIT, "%s: Set USK!!!!\n", __FUNCTION__);\r
+       memset(keybuf,0,100);\r
+       keybuf[0] = 1;                           
+       keybuf[1] = 1;                          
+       keybuf[2] = 1;                          
+       keybuf[3] = 0;                          
+       \r
+       memcpy(keybuf+4,mac_addr,6);\r
+       memcpy(keybuf+10,UskDataKey,16);\r
+       memcpy(keybuf+26,UskMicKey,16);\r
+       keybuf[42]=UskId;\r
+       wapi_test_set_key(ieee, keybuf);\r
+       \r
+       memset(keybuf,0,100);\r
+       keybuf[0] = 1;                           
+       keybuf[1] = 1;                          
+       keybuf[2] = 0;                          
+       keybuf[3] = 0;                          
+       \r
+       memcpy(keybuf+4,mac_addr,6);\r
+       memcpy(keybuf+10,UskDataKey,16);\r
+       memcpy(keybuf+26,UskMicKey,16);\r
+       keybuf[42]=UskId;\r
+       wapi_test_set_key(ieee, keybuf);\r
+       \r
+       WAPI_TRACE(WAPI_INIT, "%s: Set MSK!!!!\n", __FUNCTION__);\r
+       memset(keybuf,0,100);\r
+       keybuf[0] = 2;                                
+       keybuf[1] = 1;                               
+       keybuf[2] = 1;                          
+       keybuf[3] = 0;                              
+       memcpy(keybuf+4,mac_addr,6);\r
+       memcpy(keybuf+10,MskDataKey,16);\r
+       memcpy(keybuf+26,MskMicKey,16);\r
+       keybuf[42] = MskId;\r
+       wapi_test_set_key(ieee, keybuf);\r
+\r
+       memset(keybuf,0,100);\r
+       keybuf[0] = 2;                                
+       keybuf[1] = 1;                               
+       keybuf[2] = 0;                          
+       keybuf[3] = 0;                              
+       memcpy(keybuf+4,mac_addr,6);\r
+       memcpy(keybuf+10,MskDataKey,16);\r
+       memcpy(keybuf+26,MskMicKey,16);\r
+       keybuf[42] = MskId;\r
+       wapi_test_set_key(ieee, keybuf);\r
+       WAPI_TRACE(WAPI_INIT, "<===========%s\n", __FUNCTION__);\r
+}\r
+\r
+#endif\r
diff --git a/ubuntu/rtl8192se/rtllib/wapi.h b/ubuntu/rtl8192se/rtllib/wapi.h
new file mode 100644 (file)
index 0000000..2707bac
--- /dev/null
@@ -0,0 +1,135 @@
+#ifndef __INC_WAPI_H\r
+#define __INC_WAPI_H\r
+\r
+#include <linux/kernel.h>\r
+#include <linux/list.h>\r
+#include "rtl819x_Qos.h"\r
+\r
+/* WAPI trace debug */\r
+extern u32 wapi_debug_component;\r
+\r
+#define WAPI_TRACE(component, x, args...) \\r
+do { if(wapi_debug_component & (component)) \\r
+       printk(KERN_DEBUG "WAPI" ":" x "" , \\r
+              ##args);\\r
+}while(0);\r
+\r
+#define WAPI_DATA(component, x, buf, len) \\r
+do { if(wapi_debug_component & (component)){ \\r
+       printk("%s:\n", x);\\r
+       dump_buf((buf), (len));}\\r
+}while(0);\r
+\r
+enum WAPI_DEBUG {\r
+       WAPI_INIT                               =BIT0,\r
+       WAPI_API                                = BIT1,  \r
+       WAPI_TX                         = BIT2,  \r
+       WAPI_RX                         = BIT3,\r
+       WAPI_ERR                                = BIT31\r
+};\r
+\r
+#define                        WAPI_MAX_BKID_NUM                               64\r
+#define                        WAPI_MAX_STAINFO_NUM                    64\r
+typedef struct  _RT_WAPI_BKID\r
+{\r
+       struct list_head        list;\r
+       u8                              bkid[16];\r
+}RT_WAPI_BKID,*PRT_WAPI_BKID;\r
+\r
+typedef struct  _RT_WAPI_KEY\r
+{\r
+       u8                      dataKey[16];\r
+       u8                      micKey[16];\r
+       u8                      keyId;\r
+       bool                    bSet;\r
+       bool             bTxEnable;\r
+}RT_WAPI_KEY,*PRT_WAPI_KEY;\r
+\r
+typedef enum _RT_WAPI_PACKET_TYPE\r
+{\r
+       WAPI_NONE = 0,\r
+       WAPI_PREAUTHENTICATE=1,\r
+       WAPI_STAKEY_REQUEST=2,\r
+       WAPI_AUTHENTICATE_ACTIVE=3,\r
+       WAPI_ACCESS_AUTHENTICATE_REQUEST=4,\r
+       WAPI_ACCESS_AUTHENTICATE_RESPONSE=5,\r
+       WAPI_CERTIFICATE_AUTHENTICATE_REQUEST=6,\r
+       WAPI_CERTIFICATE_AUTHENTICATE_RESPONSE=7,\r
+       WAPI_USK_REQUEST=8,\r
+       WAPI_USK_RESPONSE=9,\r
+       WAPI_USK_CONFIRM=10,\r
+       WAPI_MSK_NOTIFICATION=11,\r
+       WAPI_MSK_RESPONSE=12\r
+}RT_WAPI_PACKET_TYPE;\r
+\r
+typedef struct _RT_CACHE_INFO {\r
+       u8      cache_buffer[2000];\r
+       u16     cache_buffer_len;\r
+       u8 saddr[6];\r
+       bool bAuthenticator;\r
+       u16     recvSeq;\r
+       u8      lastFragNum;\r
+       struct list_head list;\r
+}RT_CACHE_INFO, *PRT_CACHE_INFO;\r
+\r
+typedef struct _RT_WAPI_STA_INFO\r
+{\r
+       struct list_head                list;\r
+       u8                                      PeerMacAddr[6]; \r
+       RT_WAPI_KEY                   wapiUsk;\r
+       RT_WAPI_KEY                   wapiUskUpdate;\r
+       RT_WAPI_KEY                   wapiMsk;\r
+       RT_WAPI_KEY                   wapiMskUpdate;    \r
+       u8                                      lastRxUnicastPN[16];\r
+       u8                                      lastTxUnicastPN[16];\r
+       u8                                      lastRxMulticastPN[16];\r
+       u8                                      lastRxUnicastPNBEQueue[16];\r
+       u8                                      lastRxUnicastPNBKQueue[16];\r
+       u8                                      lastRxUnicastPNVIQueue[16];\r
+       u8                                      lastRxUnicastPNVOQueue[16];\r
+       bool                                    bSetkeyOk;\r
+       bool                                    bAuthenticateInProgress;\r
+       bool                                    bAuthenticatorInUpdata;\r
+}RT_WAPI_STA_INFO,*PRT_WAPI_STA_INFO;\r
+\r
+typedef struct _RT_WAPI_T\r
+{\r
+       u8              assoReqWapiIE[256];\r
+       u8              assoReqWapiIELength;\r
+       u8              assoRspWapiIE[256];\r
+       u8              assoRspWapiIELength;\r
+       u8              sendbeaconWapiIE[256];\r
+       u8              sendbeaconWapiIELength;\r
+       RT_WAPI_BKID            wapiBKID[WAPI_MAX_BKID_NUM];\r
+       struct list_head                wapiBKIDIdleList;\r
+       struct list_head                wapiBKIDStoreList;\r
+       RT_WAPI_KEY                   wapiTxMsk;\r
+\r
+       u8                              wapiDestMacAddr[6];\r
+       bool                            bAuthenticator;\r
+       u8                              lastTxMulticastPN[16];\r
+       RT_WAPI_STA_INFO        wapiSta[WAPI_MAX_STAINFO_NUM];\r
+       struct list_head                wapiSTAIdleList;\r
+       struct list_head                wapiSTAUsedList;\r
+       bool                            bWapiEnable;\r
+       bool                            bUpdateUsk;\r
+       bool                            bUpdateMsk;\r
+\r
+       u8                              wapiIE[256];\r
+       u8                              wapiIELength;\r
+       bool                            bWapiNotSetEncMacHeader;\r
+       bool                            bWapiPSK;\r
+       bool                            bFirstAuthentiateInProgress;\r
+       u16                             wapiSeqnumAndFragNum;\r
+       int extra_prefix_len;\r
+       int extra_postfix_len;\r
+}RT_WAPI_T,*PRT_WAPI_T;\r
+\r
+typedef struct _WLAN_HEADER_WAPI_EXTENSION\r
+{\r
+    u8      KeyIdx;\r
+    u8      Reserved;\r
+    u8      PN[16];\r
+} WLAN_HEADER_WAPI_EXTENSION, *PWLAN_HEADER_WAPI_EXTENSION;\r
+\r
+#endif\r
diff --git a/ubuntu/rtl8192se/rtllib/wapi_interface.c b/ubuntu/rtl8192se/rtllib/wapi_interface.c
new file mode 100644 (file)
index 0000000..20f89bc
--- /dev/null
@@ -0,0 +1,151 @@
+#if defined (RTL8192S_WAPI_SUPPORT)\r
+\r
+#include "wapi.h"\r
+#include "wapi_interface.h"  \r
+#include "rtllib.h"\r
+\r
+\r
+/*************************************************************\r
+ * WAPI EVENT QUEUE :                                                                           *\r
+ * Buffer events from driver to application.                                                    * \r
+ *************************************************************/\r
+void WAPI_InitQueue(WAPI_QUEUE * q, int szMaxItem, int szMaxData)\r
+{\r
+       RT_ASSERT_RET(q);\r
+       \r
+       q->Head = 0;\r
+       q->Tail = 0;\r
+       q->NumItem = 0;\r
+       q->MaxItem = szMaxItem;\r
+       q->MaxData = szMaxData;\r
+}\r
+\r
+int WAPI_EnQueue(spinlock_t *plock, WAPI_QUEUE *q, u8 *item, int itemsize)\r
+{\r
+       unsigned long flags;\r
+\r
+       RT_ASSERT_RET_VALUE(plock, (-E_WAPI_QNULL));\r
+       RT_ASSERT_RET_VALUE(q, (-E_WAPI_QNULL));\r
+       RT_ASSERT_RET_VALUE(item, (-E_WAPI_QNULL));\r
+       \r
+       if(WAPI_IsFullQueue(q))\r
+               return -E_WAPI_QFULL;\r
+       if(itemsize > q->MaxData)\r
+               return -E_WAPI_ITEM_TOO_LARGE;\r
+\r
+       spin_lock_irqsave(plock, flags);\r
+\r
+       q->ItemArray[q->Tail].ItemSize = itemsize;\r
+       memset(q->ItemArray[q->Tail].Item, 0, sizeof(q->ItemArray[q->Tail].Item));\r
+       memcpy(q->ItemArray[q->Tail].Item, item, itemsize);\r
+       q->NumItem++;\r
+       if((q->Tail+1) == q->MaxItem)\r
+               q->Tail = 0;\r
+       else\r
+               q->Tail++;\r
+\r
+       spin_unlock_irqrestore(plock, flags);\r
+       \r
+       return E_WAPI_OK;\r
+}\r
+\r
+\r
+int WAPI_DeQueue(spinlock_t *plock, WAPI_QUEUE *q, u8 *item, int *itemsize)\r
+{\r
+       unsigned long flags;\r
+\r
+       RT_ASSERT_RET_VALUE(plock, (-E_WAPI_QNULL));\r
+       RT_ASSERT_RET_VALUE(q, (-E_WAPI_QNULL));\r
+       RT_ASSERT_RET_VALUE(item, (-E_WAPI_QNULL));\r
+       \r
+       if(WAPI_IsEmptyQueue(q))\r
+               return -E_WAPI_QEMPTY;\r
+\r
+       spin_lock_irqsave(plock, flags);\r
+       \r
+       memcpy(item, q->ItemArray[q->Head].Item, q->ItemArray[q->Head].ItemSize);\r
+       *itemsize = q->ItemArray[q->Head].ItemSize;\r
+       q->NumItem--;\r
+       if((q->Head+1) == q->MaxItem)\r
+               q->Head = 0;\r
+       else\r
+               q->Head++;\r
+\r
+       spin_unlock_irqrestore(plock, flags);\r
+       \r
+       return E_WAPI_OK;\r
+}\r
+\r
+void WAPI_PrintQueue(WAPI_QUEUE *q)\r
+{\r
+       int i, j, index;\r
+\r
+       RT_ASSERT_RET(q);\r
+       \r
+       printk("\n/-------------------------------------------------\n");\r
+       printk("[DOT11_PrintQueue]: MaxItem = %d, NumItem = %d, Head = %d, Tail = %d\n", q->MaxItem, q->NumItem, q->Head, q->Tail);\r
+       for(i=0; i<q->NumItem; i++) {\r
+               index = (i + q->Head) % q->MaxItem;\r
+               printk("Queue[%d].ItemSize = %d  ", index, q->ItemArray[index].ItemSize);\r
+               for(j=0; j<q->ItemArray[index].ItemSize; j++)\r
+                       printk(" %x", q->ItemArray[index].Item[j]);\r
+               printk("\n");\r
+       }\r
+       printk("------------------------------------------------/\n");\r
+}\r
+\r
+int pid_wapi = 0;\r
+void notifyWapiApplication()\r
+{ \r
+       struct task_struct *p;\r
+        \r
+       if(pid_wapi != 0){\r
+\r
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))\r
+               p = find_task_by_pid(pid_wapi);\r
+#else\r
+                p = find_task_by_vpid(pid_wapi);\r
+#endif\r
+               if(p){\r
+                       send_sig(SIGUSR1,p,0); \r
+               }else {\r
+                       pid_wapi = 0;\r
+               }\r
+       }\r
+}\r
+\r
+int WAPI_CreateEvent_Send(struct rtllib_device *ieee, u8 EventId, u8 *MacAddr, u8 *Buff, u16 BufLen)\r
+{\r
+       WAPI_EVENT_T *pEvent;\r
+       u8 *pbuf = NULL;\r
+       int ret = 0;\r
+       \r
+       WAPI_TRACE(WAPI_API, "==========> %s: EventId=%d\n", __FUNCTION__, EventId);\r
+       \r
+       RT_ASSERT_RET_VALUE(ieee, -1);\r
+       RT_ASSERT_RET_VALUE(MacAddr, -1);\r
+\r
+       pbuf= (u8 *)kmalloc((sizeof(WAPI_EVENT_T) + BufLen), GFP_KERNEL);\r
+       if(NULL == pbuf)\r
+           return -1;\r
+\r
+       pEvent = (WAPI_EVENT_T *)pbuf;  \r
+       pEvent->EventId = EventId;\r
+       memcpy(pEvent->MACAddr, MacAddr, ETH_ALEN);\r
+       pEvent->BuffLength = BufLen;\r
+       if(BufLen > 0){\r
+               memcpy(pEvent->Buff, Buff, BufLen);\r
+       }\r
+\r
+       ret = WAPI_EnQueue(&ieee->wapi_queue_lock, ieee->wapi_queue, pbuf, (sizeof(WAPI_EVENT_T) + BufLen));\r
+       notifyWapiApplication();\r
+\r
+       if(pbuf)\r
+               kfree(pbuf);\r
+\r
+       WAPI_TRACE(WAPI_API, "<========== %s\n", __FUNCTION__);\r
+       return ret;\r
+}\r
+\r
+#endif\r
+\r
diff --git a/ubuntu/rtl8192se/rtllib/wapi_interface.h b/ubuntu/rtl8192se/rtllib/wapi_interface.h
new file mode 100644 (file)
index 0000000..159526e
--- /dev/null
@@ -0,0 +1,98 @@
+#ifndef __INC_WAPI_INTERFACE_H\r
+#define __INC_WAPI_INTERFACE_H\r
+#include <linux/spinlock.h>\r
+#include <linux/if_ether.h> /* ETH_ALEN */\r
+\r
+/*************************************************************\r
+ * WAPI EVENT QUEUE :                                                                           *\r
+ * Buffer events from driver to application.                                                    * \r
+ *************************************************************/\r
+#define WAPI_MAX_BUFF_LEN              2000    \r
+#define WAPI_MAX_QUEUE_LEN             6\r
+\r
+typedef enum\r
+{\r
+       E_WAPI_OK = 0,\r
+       E_WAPI_ITEM_TOO_LARGE = 1,\r
+       E_WAPI_QFULL = 2,\r
+       E_WAPI_QEMPTY = 3,\r
+       E_WAPI_QNULL = 4                \r
+}WAPI_QUEUE_RET_VAL;\r
+\r
+typedef struct _WAPI_QUEUE_NODE\r
+{\r
+    u16  ItemSize;\r
+    u8   Item[WAPI_MAX_BUFF_LEN];\r
+}WAPI_QUEUE_NODE;\r
+\r
+typedef struct _WAPI_QUEUE\r
+{\r
+    int     Head;\r
+    int     Tail;\r
+    int     NumItem;\r
+    int     MaxItem;\r
+    WAPI_QUEUE_NODE        ItemArray[WAPI_MAX_QUEUE_LEN];\r
+    int        MaxData;\r
+}WAPI_QUEUE;\r
+\r
+typedef enum{\r
+    WAPI_EVENT_RCV_PREAUTHENTICATE = 1, \r
+    WAPI_EVENT_RCV_STAKEY_REQUEST = 2,\r
+    WAPI_EVENT_RCV_AUTHENTICATE_ACTIVE = 3,\r
+    WAPI_EVENT_RCV_ACCESS_AUTHENTICATE_REQUEST = 4,\r
+    WAPI_EVENT_RCV_ACCESS_AUTHENTICATE_RESPONSE = 5,\r
+    WAPI_EVENT_RCV_CERTIFICATE_AUTHENTICATE_REQUEST = 6,\r
+    WAPI_EVENT_RCV_CERTIFICATE_AUTHENTICATE_RESPONSE = 7,\r
+    WAPI_EVENT_RCV_USK_REQUEST = 8,\r
+    WAPI_EVENT_RCV_USK_RESPONSE = 9,                    \r
+    WAPI_EVENT_RCV_USK_CONFIRM = 10,\r
+    WAPI_EVENT_RCV_MSK_NOTIFICATION = 11,\r
+    WAPI_EVENT_RCV_MSK_RESPONSE = 12,                   \r
+    WAPI_EVENT_AE_UPDATE_BK = 13,\r
+    WAPI_EVENT_AE_UPDATE_USK = 14,\r
+    WAPI_EVENT_AE_UPDATE_MSK = 15,\r
+    WAPI_EVENT_ASUE_UPDATE_BK = 16,\r
+    WAPI_EVENT_ASUE_UPDATE_USK = 17,\r
+    WAPI_EVENT_FIRST_AUTHENTICATOR = 18,\r
+    WAPI_EVENT_CONNECT = 19,\r
+    WAPI_EVENT_DISCONNECT = 20,\r
+    WAPI_EVENT_MAX_NUM = 21\r
+} WAPI_EVENT_ID;\r
+\r
+typedef struct _WAPI_EVENT_T{\r
+    u8 EventId;\r
+    u8 MACAddr[ETH_ALEN];\r
+    u16        BuffLength;\r
+    u8  Buff[0];\r
+}__attribute__ ((packed))WAPI_EVENT_T;\r
+\r
+#define WAPI_IsEmptyQueue(q) (q->NumItem==0 ? 1:0)\r
+#define WAPI_IsFullQueue(q) (q->NumItem==q->MaxItem? 1:0)\r
+#define WAPI_NumItemQueue(q) q->NumItem\r
+\r
+void WAPI_InitQueue(WAPI_QUEUE *q, int szMaxItem, int szMaxData);\r
+int WAPI_EnQueue(spinlock_t *plock, WAPI_QUEUE *q, u8 *item, int itemsize);\r
+int WAPI_DeQueue(spinlock_t *plock, WAPI_QUEUE *q, u8 *item, int *itemsize);\r
+void WAPI_PrintQueue(WAPI_QUEUE *q);\r
+\r
+extern int pid_wapi;\r
+extern void notifyWapiApplication(void);\r
+/*************************************************************\r
+ * WAPI IOCTL: FROM APPLICATION TO DRIVER                                       *\r
+ *************************************************************/\r
+#define WAPI_CMD_GET_WAPI_SUPPORT      0X8B81\r
+#define WAPI_CMD_SET_WAPI_ENABLE       0X8B82\r
+#define WAPI_CMD_SET_WAPI_PSK          0X8B83\r
+#define WAPI_CMD_SET_KEY                               0X8B84\r
+#define WAPI_CMD_SET_MULTICAST_PN      0X8B85\r
+#define WAPI_CMD_GET_PN                                0X8B86\r
+#define WAPI_CMD_GET_WAPIIE                    0X8B87\r
+#define WAPI_CMD_SET_SSID                              0X8B88\r
+#define WAPI_CMD_GET_BSSID                     0X8B89\r
+#define WAPI_CMD_SET_IW_MODE                   0X8B8b\r
+#define WAPI_CMD_SET_DISASSOCIATE              0X8B8c\r
+#define WAPI_CMD_SAVE_PID                      0X8B8d\r
+#define WAPI_CMD_DEQUEUE                               0X8B90\r
+\r
+#endif 
+\r