142 files changed, 11440 insertions, 23618 deletions
diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..bf8b1f8 --- a/dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +*.o +*.o.* +*.a +*.s +*.ko +*.so +*.so.dbg +*.mod.c +*.i +*.lst +*.symtypes +*.order +modules.builtin +*.elf +*.bin +*.gz +*.bz2 +*.lzma +*.xz +*.lz4 +*.lzo +*.patch +*.gcno +*.bak +*.ko.cmd +.tmp_versions/ +Module.symvers @@ -54,7 +54,7 @@ RTMP_SRC_DIR = $(RT28xx_DIR)/RT$(MODULE) #PLATFORM = MSTAR #PLATFORM = HISILICON #PLATFORM = HE_TV -LINUX_SRC ?= /mnt/nfsroot/rongjun.chen/l-amlogic/out/target/product/p200/obj/KERNEL_OBJ/ +LINUX_SRC ?= /mnt/nfsroot/rongjun.chen/Alip200/out/target/product/p200/obj/KERNEL_OBJ/ CROSS_COMPILE ?=aarch64-linux-gnu- ARCH ?=arm64 #APSOC @@ -95,6 +95,7 @@ MODULE = $(shell pwd | sed "s/.*\///" ).o export MODULE endif + ifeq ($(PLATFORM),PC) PREALLOC = NO # Linux 2.6 @@ -234,7 +235,7 @@ endif ifeq ($(PREALLOC), YES) #build prealloc.ko cp -f $(RT28xx_DIR)/os/linux/Makefile.6.prealloc $(RT28xx_DIR)/os/linux/Makefile - $(MAKE) ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -C $(LINUX_SRC) SUBDIRS=$(RT28xx_DIR)/os/linux modules + $(MAKE) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) -C $(LINUX_SRC) SUBDIRS=$(RT28xx_DIR)/os/linux modules endif cp -f $(RT28xx_DIR)/os/linux/Makefile.6 $(RT28xx_DIR)/os/linux/Makefile ifeq ($(PLATFORM),DM6446) @@ -55,7 +55,7 @@ UCHAR get_apidx_by_addr(RTMP_ADAPTER *pAd, UCHAR *addr) // TODO: shiang-usw, need to revise this to asic specific functions! INT set_wdev_if_addr(RTMP_ADAPTER *pAd, struct wifi_dev *wdev, INT opmode) { - INT idx = wdev->func_idx; + CHAR idx = wdev->func_idx; if (opmode == OPMODE_AP) { @@ -111,8 +111,8 @@ INT set_wdev_if_addr(RTMP_ADAPTER *pAd, struct wifi_dev *wdev, INT opmode) if (pAd->chipCap.hif_type == HIF_MT) { //TODO: Carter, Apcli interface and MESH interface shall use HWBSSID1 or HWBSSID2??? - UINT32 Value; - UCHAR MacByte = 0, MacMask = 0; + UINT32 Value, MacByte = 0; + UCHAR MacMask = 0; //TODO: shall we make choosing which byte to be selectable??? Value = 0x00000000; @@ -386,7 +386,7 @@ static INT ap_security_init(RTMP_ADAPTER *pAd, struct wifi_dev *wdev, INT idx) wdev->WpaMixPairCipher = MIX_CIPHER_NOTUSE; /* Generate the corresponding RSNIE */ - RTMPMakeRSNIE(pAd, wdev->AuthMode, wdev->WepStatus, idx); + RTMPMakeRSNIE(pAd, wdev->AuthMode, wdev->WepStatus, (UCHAR)idx); return TRUE; } @@ -396,8 +396,8 @@ static INT ap_key_tb_init(RTMP_ADAPTER *pAd) { BSS_STRUCT *pMbss; struct wifi_dev *wdev; - USHORT Wcid; - INT idx, i; + UCHAR Wcid, idx; + INT i; /* Initialize security variable per entry, @@ -471,7 +471,7 @@ static INT ap_key_tb_init(RTMP_ADAPTER *pAd) /* Install Shared key */ WPAInstallSharedKey(pAd, - wdev->GroupKeyWepStatus, + (UINT8)wdev->GroupKeyWepStatus, idx, wdev->DefaultKeyId, Wcid, @@ -1370,6 +1370,9 @@ VOID MacTableMaintenance(RTMP_ADAPTER *pAd) /* Skip the Infra Side */ startWcid = 2; #endif /* RT_CFG80211_P2P_CONCURRENT_DEVICE */ +#ifdef SMART_CARRIER_SENSE_SUPPORT + pAd->SCSCtrl.SCSMinRssi = 0; /* (Reset)The minimum RSSI of STA */ +#endif /* SMART_CARRIER_SENSE_SUPPORT */ for (i = startWcid; i < MAX_LEN_OF_MAC_TABLE; i++) { @@ -1596,8 +1599,9 @@ VOID MacTableMaintenance(RTMP_ADAPTER *pAd) if (CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE)) bQosNull = TRUE; - RtmpEnqueueNullFrame(pAd, pEntry->Addr, pEntry->CurrTxRate, - pEntry->Aid, pEntry->func_tb_idx, bQosNull, TRUE, 0); + RtmpEnqueueNullFrame(pAd, pEntry->Addr + , pEntry->CurrTxRate, (UCHAR)pEntry->Aid + , pEntry->func_tb_idx, bQosNull, TRUE, 0); } #ifdef P2P_SUPPORT } @@ -1654,6 +1658,15 @@ VOID MacTableMaintenance(RTMP_ADAPTER *pAd) avgRssi)); } +#ifdef SMART_CARRIER_SENSE_SUPPORT + if (pAd->SCSCtrl.SCSEnable == SCS_ENABLE) { + CHAR tmpRssi = RTMPMinRssi(pAd, pEntry->RssiSample.AvgRssi[0], + pEntry->RssiSample.AvgRssi[1], pEntry->RssiSample.AvgRssi[2]); + + if (tmpRssi < pAd->SCSCtrl.SCSMinRssi) + pAd->SCSCtrl.SCSMinRssi = tmpRssi; + } +#endif /* SMART_CARRIER_SENSE_SUPPORT */ if (bDisconnectSta) { @@ -3029,9 +3042,11 @@ BOOLEAN DOT1X_EapTriggerAction(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY *pEntry) memcpy(&FrameBuf[offset+sizeof(eapol_start_1x_hdr)], HS2_Header, 4); memcpy(&FrameBuf[offset+sizeof(eapol_start_1x_hdr)+4], &pEntry->hs_info, sizeof(struct _sta_hs_info)); frame_len += 4+sizeof(struct _sta_hs_info); - printk("event eapol start, %x:%x:%x:%x\n", - FrameBuf[offset+sizeof(eapol_start_1x_hdr)+4],FrameBuf[offset+sizeof(eapol_start_1x_hdr)+5], - FrameBuf[offset+sizeof(eapol_start_1x_hdr)+6],FrameBuf[offset+sizeof(eapol_start_1x_hdr)+7]); + DBGPRINT(RT_DEBUG_OFF, ("event eapol start, %x:%x:%x:%x\n", + FrameBuf[offset+sizeof(eapol_start_1x_hdr)+4], + FrameBuf[offset+sizeof(eapol_start_1x_hdr)+5], + FrameBuf[offset+sizeof(eapol_start_1x_hdr)+6], + FrameBuf[offset+sizeof(eapol_start_1x_hdr)+7])); } } #endif diff --git a/ap/ap_apcli.c b/ap/ap_apcli.c index 1882b91..8f84c24 100755 --- a/ap/ap_apcli.c +++ b/ap/ap_apcli.c @@ -53,7 +53,9 @@ BOOLEAN ApCliWaitProbRsp(PRTMP_ADAPTER pAd, USHORT ifIndex) if (ifIndex >= MAX_APCLI_NUM) return FALSE; - printk("%s()[%d]: %lu\n", __FUNCTION__, ifIndex, pAd->ApCfg.ApCliTab[ifIndex].SyncCurrState); + DBGPRINT(RT_DEBUG_OFF, ("%s()[%d]: %lu\n", __func__, ifIndex, + pAd->ApCfg.ApCliTab[ifIndex].SyncCurrState)); + return (pAd->ApCfg.ApCliTab[ifIndex].SyncCurrState == APCLI_JOIN_WAIT_PROBE_RSP) ? TRUE : FALSE; } @@ -265,7 +267,7 @@ BOOLEAN ApCliCheckHt( if (RTMP_CFG80211_VIF_P2P_CLI_ON(pAd)) { - pApCliEntry->wdev.bw = aux_ht_cap->HtCapInfo.ChannelWidth; + pApCliEntry->wdev.bw = (UCHAR)aux_ht_cap->HtCapInfo.ChannelWidth; if (pApCliEntry->wdev.bw == HT_BW_20) { pApCliEntry->wdev.channel = pAddHtInfo->ControlChan; @@ -300,10 +302,13 @@ BOOLEAN ApCliCheckHt( /* Send Assoc Req with my HT capability. */ aux_ht_cap->HtCapInfo.AMsduSize = rt_ht_cap->AmsduSize; aux_ht_cap->HtCapInfo.MimoPs = pHtCapability->HtCapInfo.MimoPs; - aux_ht_cap->HtCapInfo.ShortGIfor20 = (rt_ht_cap->ShortGIfor20) & (pHtCapability->HtCapInfo.ShortGIfor20); - aux_ht_cap->HtCapInfo.ShortGIfor40 = (rt_ht_cap->ShortGIfor40) & (pHtCapability->HtCapInfo.ShortGIfor40); - aux_ht_cap->HtCapInfo.TxSTBC = (rt_ht_cap->TxSTBC)&(pHtCapability->HtCapInfo.RxSTBC); - aux_ht_cap->HtCapInfo.RxSTBC = (rt_ht_cap->RxSTBC)&(pHtCapability->HtCapInfo.TxSTBC); + /* The HT Capabilities element are used to advertise optional HT capabilities of an HT STA. + * We shouldn't care about the AP's Capabilities in here + */ + aux_ht_cap->HtCapInfo.ShortGIfor20 = rt_ht_cap->ShortGIfor20; + aux_ht_cap->HtCapInfo.ShortGIfor40 = rt_ht_cap->ShortGIfor40; + aux_ht_cap->HtCapInfo.TxSTBC = rt_ht_cap->TxSTBC; + aux_ht_cap->HtCapInfo.RxSTBC = rt_ht_cap->RxSTBC; aux_ht_cap->HtCapParm.MaxRAmpduFactor = rt_ht_cap->MaxRAmpduFactor; aux_ht_cap->HtCapParm.MpduDensity = pHtCapability->HtCapParm.MpduDensity; aux_ht_cap->ExtHtCapInfo.PlusHTC = pHtCapability->ExtHtCapInfo.PlusHTC; @@ -568,11 +573,11 @@ BOOLEAN ApCliLinkUp(RTMP_ADAPTER *pAd, UCHAR ifIndex) if ((pMacEntry->AuthMode >= Ndis802_11AuthModeWPA) && (pApCliEntry->MlmeAux.VarIELen != 0)) { PUCHAR pVIE; - UCHAR len; + USHORT len; PEID_STRUCT pEid; pVIE = pApCliEntry->MlmeAux.VarIEs; - len = pApCliEntry->MlmeAux.VarIELen; + len = pApCliEntry->MlmeAux.VarIELen; while (len > 0) { @@ -626,7 +631,7 @@ BOOLEAN ApCliLinkUp(RTMP_ADAPTER *pAd, UCHAR ifIndex) ) { CIPHER_KEY *pKey; - INT idx, BssIdx; + UCHAR idx, BssIdx; BssIdx = pAd->ApCfg.BssidNum + MAX_MESH_NUM + ifIndex; #ifdef MAC_APCLI_SUPPORT @@ -693,15 +698,19 @@ BOOLEAN ApCliLinkUp(RTMP_ADAPTER *pAd, UCHAR ifIndex) ht_mode_adjust(pAd, pMacEntry, pHtCapability, &pAd->CommonCfg.DesiredHtPhy); /* find max fixed rate */ - pMacEntry->MaxHTPhyMode.field.MCS = get_ht_max_mcs(pAd, &wdev->DesiredHtPhyInfo.MCSSet[0], - &pHtCapability->MCSSet[0]); + pMacEntry->MaxHTPhyMode.field.MCS = + (USHORT)get_ht_max_mcs(pAd + , &wdev->DesiredHtPhyInfo.MCSSet[0] + , &pHtCapability->MCSSet[0]); if (wdev->DesiredTransmitSetting.field.MCS != MCS_AUTO) { DBGPRINT(RT_DEBUG_TRACE, ("IF-apcli%d : Desired MCS = %d\n", ifIndex, wdev->DesiredTransmitSetting.field.MCS)); - set_ht_fixed_mcs(pAd, pMacEntry, wdev->DesiredTransmitSetting.field.MCS, wdev->HTPhyMode.field.MCS); + set_ht_fixed_mcs(pAd, pMacEntry + , (UCHAR)wdev->DesiredTransmitSetting.field.MCS + , (UCHAR)wdev->HTPhyMode.field.MCS); } pMacEntry->MaxHTPhyMode.field.STBC = (pHtCapability->HtCapInfo.RxSTBC & (pAd->CommonCfg.DesiredHtPhy.TxSTBC)); @@ -905,6 +914,7 @@ BOOLEAN ApCliLinkUp(RTMP_ADAPTER *pAd, UCHAR ifIndex) VOID ApCliLinkDown(RTMP_ADAPTER *pAd, UCHAR ifIndex) { APCLI_STRUCT *pApCliEntry = NULL; + UINT16 Reason = REASON_DEAUTH_STA_LEAVING; #ifdef MAC_REPEATER_SUPPORT UCHAR CliIdx = 0xFF; #endif /* MAC_REPEATER_SUPPORT */ @@ -940,6 +950,7 @@ VOID ApCliLinkDown(RTMP_ADAPTER *pAd, UCHAR ifIndex) #endif /* MAC_REPEATER_SUPPORT */ ) return; + Reason = pApCliEntry->LastDeauthReason; #ifdef MAC_REPEATER_SUPPORT if (CliIdx == 0xFF) @@ -966,6 +977,7 @@ VOID ApCliLinkDown(RTMP_ADAPTER *pAd, UCHAR ifIndex) else #endif /* MAC_REPEATER_SUPPORT */ { + pApCliEntry->LastDeauthReason = REASON_DEAUTH_STA_LEAVING; pApCliEntry->Valid = FALSE; /* This link doesn't associated with any remote-AP */ pApCliEntry->wdev.allow_data_tx = FALSE; pApCliEntry->wdev.PortSecured = WPA_802_1X_PORT_NOT_SECURED; @@ -980,7 +992,7 @@ VOID ApCliLinkDown(RTMP_ADAPTER *pAd, UCHAR ifIndex) #endif /* WPA_SUPPLICANT_SUPPORT */ #if defined(RT_CFG80211_P2P_CONCURRENT_DEVICE) || defined(CFG80211_MULTI_STA) - RT_CFG80211_LOST_GO_INFORM(pAd); + RT_CFG80211_LOST_GO_INFORM(pAd, Reason); //NoA Stop CmdP2pNoaOffloadCtrl(pAd, P2P_NOA_DISABLED); @@ -1734,7 +1746,7 @@ BOOLEAN ApCliValidateRSNIE( IN USHORT idx) { PUCHAR pVIE, pTmp; - UCHAR len; + USHORT len; PEID_STRUCT pEid; CIPHER_SUITE WPA; /* AP announced WPA cipher suite */ CIPHER_SUITE WPA2; /* AP announced WPA2 cipher suite */ @@ -1751,7 +1763,7 @@ BOOLEAN ApCliValidateRSNIE( struct wifi_dev *wdev; pVIE = (PUCHAR) pEid_ptr; - len = eid_len; + len = eid_len; /*if (len >= MAX_LEN_OF_RSNIE || len <= MIN_LEN_OF_RSNIE) */ /* return FALSE; */ @@ -2212,7 +2224,8 @@ BOOLEAN ApCliValidateRSNIE( } /* re-build RSNIE */ - RTMPMakeRSNIE(pAd, wdev->AuthMode, wdev->WepStatus, (idx + MIN_NET_DEVICE_FOR_APCLI)); + RTMPMakeRSNIE(pAd, wdev->AuthMode + , wdev->WepStatus, (UCHAR)(idx + MIN_NET_DEVICE_FOR_APCLI)); return TRUE; } @@ -2560,6 +2573,13 @@ VOID APCli_Init(RTMP_ADAPTER *pAd, RTMP_OS_NETDEV_OP_HOOK *pNetDevOps) #endif /* HOSTAPD_SUPPORT */ dev_name = get_dev_name_prefix(pAd, INT_APCLI); + if (!dev_name) { + DBGPRINT(RT_DEBUG_ERROR, + ("%s(): Get dev name prefix fail!\n", + __func__)); + break; + } + new_dev_p = RtmpOSNetDevCreate(MC_RowID, &IoctlIF, INT_APCLI, idx, sizeof(struct mt_dev_priv), dev_name); if (!new_dev_p) { @@ -2575,7 +2595,7 @@ VOID APCli_Init(RTMP_ADAPTER *pAd, RTMP_OS_NETDEV_OP_HOOK *pNetDevOps) wdev = &pApCliEntry->wdev; wdev->wdev_type = WDEV_TYPE_STA; wdev->func_dev = pApCliEntry; - wdev->func_idx = idx; + wdev->func_idx = (CHAR)idx; wdev->sys_handle = (void *)pAd; wdev->if_dev = new_dev_p; wdev->tx_pkt_allowed = ApCliAllowToSendPacket; @@ -2657,7 +2677,7 @@ VOID APCli_Init(RTMP_ADAPTER *pAd, RTMP_OS_NETDEV_OP_HOOK *pNetDevOps) } else { UINT32 Value; - UCHAR MacByte = 0; + UINT32 MacByte = 0; //TODO: shall we make choosing which byte to be selectable??? Value = 0x00000000L; diff --git a/ap/ap_assoc.c b/ap/ap_assoc.c index c6ceac6..da39302 100755 --- a/ap/ap_assoc.c +++ b/ap/ap_assoc.c @@ -293,8 +293,9 @@ static USHORT update_associated_mac_entry( #endif /* TXBF_SUPPORT */ /* find max fixed rate */ - pEntry->MaxHTPhyMode.field.MCS = get_ht_max_mcs(pAd, &wdev->DesiredHtPhyInfo.MCSSet[0], - &ie_list->HTCapability.MCSSet[0]); + pEntry->MaxHTPhyMode.field.MCS = (USHORT)get_ht_max_mcs(pAd + , &wdev->DesiredHtPhyInfo.MCSSet[0] + , &ie_list->HTCapability.MCSSet[0]); if (wdev->DesiredTransmitSetting.field.MCS != MCS_AUTO) { @@ -302,7 +303,8 @@ static USHORT update_associated_mac_entry( pEntry->func_tb_idx, wdev->DesiredTransmitSetting.field.MCS)); - set_ht_fixed_mcs(pAd, pEntry, wdev->DesiredTransmitSetting.field.MCS, wdev->HTPhyMode.field.MCS); + set_ht_fixed_mcs(pAd, pEntry, (UCHAR)wdev->DesiredTransmitSetting.field.MCS + , (UCHAR)wdev->HTPhyMode.field.MCS); } pEntry->MaxHTPhyMode.field.STBC = (ie_list->HTCapability.HtCapInfo.RxSTBC & (pAd->CommonCfg.DesiredHtPhy.TxSTBC)); @@ -599,7 +601,7 @@ static USHORT APBuildAssociation( MaxSupportedRate = dot11_2_ra_rate(MaxSupportedRateIn500Kbps); - if (pAd && (WMODE_EQUAL(pAd->CommonCfg.PhyMode, WMODE_G) + if ((WMODE_EQUAL(pAd->CommonCfg.PhyMode, WMODE_G) #ifdef DOT11_N_SUPPORT || WMODE_EQUAL(pAd->CommonCfg.PhyMode, (WMODE_G | WMODE_GN)) #endif /* DOT11_N_SUPPORT */ @@ -651,7 +653,10 @@ static USHORT APBuildAssociation( #endif /* WSC_AP_SUPPORT */ { /* check the validity of the received RSNIE */ - if ((StatusCode = APValidateRSNIE(pAd, pEntry, &ie_list->RSN_IE[0], ie_list->RSNIE_Len)) != MLME_SUCCESS) + StatusCode = (USHORT)APValidateRSNIE(pAd + , pEntry, &ie_list->RSN_IE[0] + , ie_list->RSNIE_Len); + if (StatusCode != MLME_SUCCESS) return StatusCode; } } @@ -1536,7 +1541,10 @@ BOOLEAN PeerAssocReqCmmSanity( NdisMoveMemory(&pEntry->hs_info.ppsmo_id, &eid_ptr->Octet[5], 2); //NdisMoveMemory(tmp3, tmp, 2); } - printk("Assoc HS2 STA:version:%d,ppomo exist:%d, value:0x%x\n", pEntry->hs_info.version, pEntry->hs_info.ppsmo_exist, pEntry->hs_info.ppsmo_id); + DBGPRINT(RT_DEBUG_OFF, + ("Assoc HS2 STA:version:%d,ppomo exist:%d, value:0x%x\n", + pEntry->hs_info.version, pEntry->hs_info.ppsmo_exist, + pEntry->hs_info.ppsmo_id)); break; } #endif /* CONFIG_HOTSPOT_R2 */ @@ -1841,8 +1849,7 @@ VOID ap_cmm_peer_assoc_req_action( /* disallow new association */ - if (pAd && (pAd->ApCfg.BANClass3Data == TRUE)) - { + if (pAd->ApCfg.BANClass3Data == TRUE) { DBGPRINT(RT_DEBUG_TRACE, ("Disallow new Association\n")); return; } @@ -2545,7 +2552,7 @@ SendAssocResponse: #ifdef CONFIG_HOTSPOT_R2 /* qosmap IE */ - printk("entry=%d\n", pEntry->QosMapSupport); + DBGPRINT(RT_DEBUG_OFF, ("entry=%d\n", pEntry->QosMapSupport)); if (pEntry->QosMapSupport) { ULONG TmpLen; @@ -2678,11 +2685,11 @@ SendAssocResponse: } #ifdef RT_CFG80211_SUPPORT /* Append extra IEs provided by wpa_supplicant */ - if (pAd->ApCfg.MBSSID[pEntry->func_tb_idx].AssocRespExtraIeLen) + if (pAd->ApCfg.MBSSID[pEntry->apidx].AssocRespExtraIeLen) { ULONG TmpLen = 0; - INT32 IesLen = pAd->ApCfg.MBSSID[pEntry->func_tb_idx].AssocRespExtraIeLen; - UCHAR *Ies = pAd->ApCfg.MBSSID[pEntry->func_tb_idx].AssocRespExtraIe; + INT32 IesLen = pAd->ApCfg.MBSSID[pEntry->apidx].AssocRespExtraIeLen; + UCHAR *Ies = pAd->ApCfg.MBSSID[pEntry->apidx].AssocRespExtraIe; //if (RTMPIsValidIEs(Ies, IesLen)) { @@ -3398,7 +3405,7 @@ VOID APMlmeKickOutSta(RTMP_ADAPTER *pAd, UCHAR *pStaAddr, UCHAR Wcid, USHORT Rea { return; } - Aid = pEntry->Aid; + Aid = (UCHAR)pEntry->Aid; ApIdx = pEntry->func_tb_idx; ASSERT(Aid == Wcid); diff --git a/ap/ap_auth.c b/ap/ap_auth.c index 03a66f8..29d8555 100755 --- a/ap/ap_auth.c +++ b/ap/ap_auth.c @@ -419,7 +419,7 @@ static VOID APPeerAuthReqAtIdleAction(RTMP_ADAPTER *pAd, MLME_QUEUE_ELEM *Elem) INT i; USHORT RspReason; AUTH_FRAME_INFO auth_info; - UINT32 apidx; + UCHAR apidx; PHEADER_802_11 pRcvHdr; HEADER_802_11 AuthHdr; PUCHAR pOutBuffer = NULL; diff --git a/ap/ap_autoChSel.c b/ap/ap_autoChSel.c index d20b72d..fc97971 100755 --- a/ap/ap_autoChSel.c +++ b/ap/ap_autoChSel.c @@ -330,7 +330,8 @@ static inline UCHAR SelectClearChannelCCA( { pBss = &(pBssInfoTab->BssEntry[BssTab_idx]); channel_idx = GetChIdx(pAd, pBss->Channel); - if (channel_idx < 0 ) + if ((channel_idx < 0) || + (channel_idx >= ARRAY_SIZE(pChannelInfo->dirtyness))) continue; @@ -378,7 +379,7 @@ static inline UCHAR SelectClearChannelCCA( /* check neighbor channel */ for (loop = (channel_idx+1); loop <= (channel_idx+AboveBound); loop++) { - if (loop >= MAX_NUM_OF_CHANNELS) + if (loop >= ARRAY_SIZE(pAd->ChannelList)) break; if (pAd->ChannelList[loop].Channel - pAd->ChannelList[loop-1].Channel > 4) @@ -389,6 +390,9 @@ static inline UCHAR SelectClearChannelCCA( /* check neighbor channel */ for (loop=(channel_idx-1); loop >= (channel_idx-BelowBound); loop--) { + if ((loop + 1) >= ARRAY_SIZE(pAd->ChannelList)) + continue; + if (loop < 0) break; @@ -585,12 +589,12 @@ static inline UCHAR SelectClearChannelCCA( { ch = pAd->ChannelList[(base + channel_idx) % pAd->ChannelListNum].Channel; - if (AutoChannelSkipListCheck(pAd, ch)) + if (AutoChannelSkipListCheck(pAd, (UCHAR)ch)) continue; if ((pAd->ApCfg.bAvoidDfsChannel == TRUE) && (pChannelInfo->IsABand == TRUE) - && RadarChannelCheck(pAd, ch)) + && RadarChannelCheck(pAd, (UCHAR)ch)) continue; break; @@ -604,10 +608,10 @@ static inline UCHAR SelectClearChannelBusyTime( ) { PCHANNELINFO pChannelInfo = pAd->pChannelInfo; - INT ch = 1, channel_idx; + INT channel_idx; UINT32 min_busytime; int candidate_ch; - UCHAR base; + UCHAR base, ch = 1; if(pChannelInfo == NULL) @@ -843,7 +847,7 @@ static inline UCHAR SelectClearChannelApCnt( for (dirty = 30; dirty <= 32; dirty++) { BOOLEAN candidate[MAX_NUM_OF_CHANNELS+1], candidate_num=0; - UCHAR min_ApCnt = 255; + ULONG min_ApCnt = 255; final_channel = 0; NdisZeroMemory(candidate, MAX_NUM_OF_CHANNELS+1); @@ -895,7 +899,9 @@ static inline UCHAR SelectClearChannelApCnt( if (final_channel != 0) { DBGPRINT(RT_DEBUG_TRACE,("Rule 2 APCnt : minimum APCnt with minimum interference(dirtiness: 30~32) ==> Select Channel %d\n", final_channel)); - DBGPRINT(RT_DEBUG_TRACE,(" Dirtiness = %d , Min ApCnt = %d\n", dirty, min_ApCnt)); + DBGPRINT(RT_DEBUG_TRACE + , (" Dirtiness = %d , Min ApCnt = %lu\n" + , dirty, min_ApCnt)); return final_channel; } } @@ -975,6 +981,13 @@ ULONG AutoChBssInsertEntry( } else { + if (Idx >= ARRAY_SIZE(pBssInfoTab->BssEntry)) { + DBGPRINT(RT_DEBUG_ERROR, + ("%s: Idx %lu >= MAX_LEN_OF_BSS_TABLE\n", + __func__, Idx)); + return BSS_NOT_FOUND; + } + AutoChBssEntrySet(&pBssInfoTab->BssEntry[Idx], pBssid, Ssid, SsidLen, ChannelNo, ExtChOffset, Rssi); } diff --git a/ap/ap_cfg.c b/ap/ap_cfg.c index 5589c76..9ad4c8a 100755 --- a/ap/ap_cfg.c +++ b/ap/ap_cfg.c @@ -1311,6 +1311,10 @@ static struct { {"SKUEnable", SetSKUEnable_Proc}, #endif /* SINGLE_SKU_V2 */ {"ed_chk", Set_ed_chk_proc}, +#ifdef SMART_CARRIER_SENSE_SUPPORT + {"SCSEnable", SetSCSEnable_Proc}, + {"SCSCfg", SetSCSCfg_Proc}, +#endif /* SMART_CARRIER_SENSE_SUPPORT */ {NULL,} }; @@ -1418,6 +1422,9 @@ static struct { #endif /* WSC_AP_SUPPORT */ {"rfinfo", ShowRFInfo}, {"bbpinfo", ShowBBPInfo}, +#ifdef SMART_CARRIER_SENSE_SUPPORT + {"SCSInfo", ShowSCSInfo}, +#endif /* SMART_CARRIER_SENSE_SUPPORT */ {NULL,} }; @@ -1619,7 +1626,7 @@ INT RTMPAPSetInformation( #ifdef APCLI_SUPPORT #ifdef WPA_SUPPLICANT_SUPPORT - UCHAR ifIndex; + INT ifIndex; BOOLEAN apcliEn=FALSE; PNDIS_APCLI_802_11_PMKID pPmkId = NULL; BOOLEAN IEEE8021xState = FALSE; @@ -1717,9 +1724,18 @@ INT RTMPAPSetInformation( PBSSID_INFO pBssIdInfo; UINT BssIdx; UINT CachedIdx; + UINT tail; + tail = Offsetof(NDIS_APCLI_802_11_PMKID, BSSIDInfo); for (BssIdx = 0; BssIdx < pPmkId->BSSIDInfoCount; BssIdx++) { + tail += sizeof(BSSID_INFO); + if (tail > wrq->u.data.length) { + DBGPRINT(RT_DEBUG_WARN, + ("buf not enough, stop at BssIdx %u\n", + BssIdx)); + break; + } /* point to the indexed BSSID_INFO structure */ pBssIdInfo = (PBSSID_INFO) ((PUCHAR) pPmkId + 2 * sizeof(UINT) + BssIdx * sizeof(BSSID_INFO)); /* Find the entry in the saved data base. */ @@ -1790,7 +1806,7 @@ INT RTMPAPSetInformation( if (!apcliEn) return FALSE; - os_alloc_mem(NULL, (UCHAR **)&pRemoveKey, wrq->u.data.length); + os_alloc_mem(NULL, (UCHAR **)&pRemoveKey, wrq->u.data.length); if(pRemoveKey == NULL) { Status = -ENOMEM; @@ -1834,7 +1850,9 @@ INT RTMPAPSetInformation( { pAd->ApCfg.ApCliTab[ifIndex].SharedKey[KeyIdx].KeyLen = 0; pAd->ApCfg.ApCliTab[ifIndex].SharedKey[KeyIdx].CipherAlg = CIPHER_NONE; - AsicRemoveSharedKeyEntry(pAd, BssIdx, (UCHAR)KeyIdx); + AsicRemoveSharedKeyEntry(pAd + , (UCHAR)BssIdx + , (UCHAR)KeyIdx); DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_REMOVE_KEY (id=0x%x, Len=%d-byte)\n", pRemoveKey->KeyIndex, pRemoveKey->Length)); } } @@ -1870,14 +1888,19 @@ INT RTMPAPSetInformation( { Status = -EINVAL; DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_ADD_WEP, Failed (length mismatch)!!\n")); + } else if ((pWepKey->KeyLength != 5) || + (pWepKey->KeyLength != 13)) { + Status = -EINVAL; + DBGPRINT(RT_DEBUG_WARN, + ("invalid pWepKey->KeyLength %u\n", + pWepKey->KeyLength)); } else { UINT KeyIdx; KeyIdx = pWepKey->KeyIndex & 0x0fffffff; /* KeyIdx must be 0 ~ 3 */ - if (KeyIdx > 4) - { + if (KeyIdx > 3) { Status = -EINVAL; DBGPRINT(RT_DEBUG_TRACE, ("Set ApCli::OID_802_11_ADD_WEP, Failed (KeyIdx must be smaller than 4)!!\n")); } @@ -1916,7 +1939,8 @@ INT RTMPAPSetInformation( /* set key material and key length */ pApCliEntry->wpa_supplicant_info.DesireSharedKey[KeyIdx].KeyLen = (UCHAR) pWepKey->KeyLength; NdisMoveMemory(pApCliEntry->wpa_supplicant_info.DesireSharedKey[KeyIdx].Key, &pWepKey->KeyMaterial, pWepKey->KeyLength); - pApCliEntry->wpa_supplicant_info.DesireSharedKeyId = KeyIdx; + pApCliEntry->wpa_supplicant_info.DesireSharedKeyId = + (UCHAR)KeyIdx; pApCliEntry->wpa_supplicant_info.DesireSharedKey[KeyIdx].CipherAlg = CipherAlg; pApCliEntry->wdev.DefaultKeyId = (UCHAR) KeyIdx; @@ -1928,10 +1952,15 @@ INT RTMPAPSetInformation( Key = pWepKey->KeyMaterial; /* Set Group key material to Asic */ - AsicAddSharedKeyEntry(pAd, BssIdx, KeyIdx, &pApCliEntry->SharedKey[KeyIdx]); + AsicAddSharedKeyEntry(pAd + , (UCHAR)BssIdx + , (UCHAR)KeyIdx + , &pApCliEntry->SharedKey[KeyIdx]); if (pWepKey->KeyIndex & 0x80000000) { - RTMPSetWcidSecurityInfo(pAd, BssIdx, KeyIdx, CipherAlg, pApCliEntry->MacTabWCID, SHAREDKEYTABLE); + RTMPSetWcidSecurityInfo(pAd, (UCHAR)BssIdx + , (UINT8)KeyIdx, CipherAlg + , pApCliEntry->MacTabWCID, SHAREDKEYTABLE); } NdisAcquireSpinLock(&pAd->MacTabLock); // TODO: shiang-usw, need to replace upper setting with tr_entry @@ -1944,17 +1973,18 @@ INT RTMPAPSetInformation( Key = pApCliEntry->SharedKey[KeyIdx].Key; /* Set key material and cipherAlg to Asic */ - AsicAddSharedKeyEntry(pAd, BssIdx, KeyIdx, &pApCliEntry->SharedKey[KeyIdx]); + AsicAddSharedKeyEntry(pAd, (UCHAR)BssIdx + , (UCHAR)KeyIdx, &pApCliEntry->SharedKey[KeyIdx]); if (pWepKey->KeyIndex & 0x80000000) { /* Assign pairwise key info */ RTMPSetWcidSecurityInfo(pAd, - BssIdx, - KeyIdx, - CipherAlg, - pApCliEntry->MacTabWCID, - SHAREDKEYTABLE); + (UCHAR)BssIdx, + (UINT8)KeyIdx, + CipherAlg, + pApCliEntry->MacTabWCID, + SHAREDKEYTABLE); } } DBGPRINT(RT_DEBUG_TRACE, ("Set ApCli::OID_802_11_ADD_WEP (id=0x%x, Len=%d-byte), %s\n", @@ -1989,10 +2019,10 @@ INT RTMPAPSetInformation( break; } Status = copy_from_user(pApCliKey, wrq->u.data.pointer, wrq->u.data.length); - if (pApCliKey->Length != wrq->u.data.length) - { - Status = -EINVAL; - DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_ADD_KEY, Failed!!\n")); + if ((pApCliKey->Length != wrq->u.data.length) || + ((pApCliKey->KeyIndex & 0xFF) >= SHARE_KEY_NUM)) { + Status = -EINVAL; + DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_ADD_KEY, Failed!!\n")); } else { @@ -2025,7 +2055,7 @@ INT RTMPAPSetInformation( sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq, ifIndex); if (pApCliEntry->Valid) - ApCliLinkDown(pAd, ifIndex); + ApCliLinkDown(pAd, (UCHAR)ifIndex); /* set the apcli interface be invalid. */ pApCliEntry->Valid = FALSE; @@ -2102,7 +2132,8 @@ INT RTMPAPSetInformation( case OID_802_11_P2P_MODE: DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_P2P_MODE \n")); - printk("wrq->u.data.length =%d sizeof(UCHAR)=%d\n",wrq->u.data.length,sizeof(UCHAR)); + DBGPRINT(RT_DEBUG_OFF, ("wrq->u.data.length =%d sizeof(UCHAR)=%d\n" + , wrq->u.data.length, sizeof(UCHAR))); if (wrq->u.data.length != sizeof(UCHAR)) Status = -EINVAL; else @@ -2459,7 +2490,7 @@ INT RTMPAPSetInformation( ifIndex); if (pApCliEntry->Valid) - ApCliLinkDown(pAd, ifIndex); + ApCliLinkDown(pAd, (UCHAR)ifIndex); /* set the apcli interface be invalid.*/ pApCliEntry->Valid = FALSE; @@ -3418,7 +3449,8 @@ INT RTMPAPSetInformation( } RTMPMakeRSNIE(pAd, pAd->ApCfg.ApCliTab[ifIndex].wdev.AuthMode, - pAd->ApCfg.ApCliTab[ifIndex].wdev.WepStatus, (ifIndex + MIN_NET_DEVICE_FOR_APCLI)); + pAd->ApCfg.ApCliTab[ifIndex].wdev.WepStatus + , (UCHAR)(ifIndex + MIN_NET_DEVICE_FOR_APCLI)); pAd->ApCfg.ApCliTab[ifIndex].wdev.DefaultKeyId = 0; if(pAd->ApCfg.ApCliTab[ifIndex].wdev.AuthMode >= Ndis802_11AuthModeWPA) @@ -3488,8 +3520,10 @@ INT RTMPAPSetInformation( if (pApCliEntry->wdev.WepStatus >= Ndis802_11TKIPEnable) pApCliEntry->wdev.DefaultKeyId = 1; - RTMPMakeRSNIE(pAd, pAd->ApCfg.ApCliTab[ifIndex].wdev.AuthMode, - pAd->ApCfg.ApCliTab[ifIndex].wdev.WepStatus, (ifIndex + MIN_NET_DEVICE_FOR_APCLI)); + RTMPMakeRSNIE(pAd + , pAd->ApCfg.ApCliTab[ifIndex].wdev.AuthMode + , pAd->ApCfg.ApCliTab[ifIndex].wdev.WepStatus + , (UCHAR)(ifIndex + MIN_NET_DEVICE_FOR_APCLI)); } } @@ -3568,7 +3602,8 @@ INT RTMPAPSetInformation( { NdisZeroMemory((PCHAR)pAd->ApCfg.MBSSID[pObj->ioctl_if].Ssid,MAX_LEN_OF_SSID); strcpy((PCHAR)pAd->ApCfg.MBSSID[pObj->ioctl_if].Ssid,pSsidString); - pAd->ApCfg.MBSSID[pObj->ioctl_if].SsidLen=strlen(pSsidString); + pAd->ApCfg.MBSSID[pObj->ioctl_if].SsidLen = + (UCHAR)strlen(pSsidString); } os_free_mem(NULL, pSsidString); } @@ -3619,10 +3654,10 @@ INT RTMPAPSetInformation( else/*group key */ { pMbss = &pAd->ApCfg.MBSSID[apidx]; - printk("Key.ik_keyix=%x\n",Key.ik_keyix); + DBGPRINT(RT_DEBUG_OFF, ("Key.ik_keyix=%x\n", Key.ik_keyix)); KeyIdx = Key.ik_keyix& 0x0fff; - printk("ra%d KeyIdx=%d\n",apidx,KeyIdx); - printk("Key.ik_keyix=%x\n",Key.ik_keyix); + DBGPRINT(RT_DEBUG_OFF, ("ra%d KeyIdx=%d\n", apidx, KeyIdx)); + DBGPRINT(RT_DEBUG_OFF, ("Key.ik_keyix=%x\n", Key.ik_keyix)); /* it is a shared key */ if (KeyIdx < 4) { @@ -3631,7 +3666,8 @@ INT RTMPAPSetInformation( if (Key.ik_keyix & 0x8000) { /* Default key for tx (shared key) */ - printk("ra%d DefaultKeyId=%d\n",apidx,KeyIdx); + DBGPRINT(RT_DEBUG_OFF, ("ra%d DefaultKeyId=%d\n" + , apidx, KeyIdx)); pMbss->DefaultKeyId = (UCHAR) KeyIdx; } /*pMbss->DefaultKeyId=1; */ @@ -3639,8 +3675,8 @@ INT RTMPAPSetInformation( pAd->SharedKey[apidx][KeyIdx].CipherAlg = Key.ik_type; AsicAddSharedKeyEntry( pAd, - apidx, - KeyIdx, + (UCHAR)apidx, + (UCHAR)KeyIdx, &pAd->SharedKey[apidx][KeyIdx] ); @@ -3727,13 +3763,13 @@ INT RTMPAPSetInformation( AsicAddSharedKeyEntry( pAd, - apidx, - pMbss->DefaultKeyId, + (UCHAR)apidx, + (UCHAR)pMbss->DefaultKeyId, &pAd->SharedKey[apidx][pMbss->DefaultKeyId] ); GET_GroupKey_WCID(pAd, Wcid, apidx); - RTMPSetWcidSecurityInfo(pAd, apidx,(UINT8)KeyIdx, + RTMPSetWcidSecurityInfo(pAd, (UINT8)apidx, (UINT8)KeyIdx, pAd->SharedKey[apidx][pMbss->DefaultKeyId].CipherAlg, Wcid, SHAREDKEYTABLE); /*RTMPAddWcidAttributeEntry( @@ -3817,8 +3853,8 @@ INT RTMPAPSetInformation( } else{ /*Status = -EINVAL; */ - printk("Woody HOSTAPD_OID_STATIC_WEP_COPY IEEE8021X=%d WepStatus=%d\n", - pAd->ApCfg.MBSSID[pObj->ioctl_if].wdev.IEEE8021X, pEntry->WepStatus); + DBGPRINT(RT_DEBUG_OFF, ("HOSTAPD_OID_STATIC_WEP_COPY IEEE8021X=%d WepStatus=%d\n" + , pAd->ApCfg.MBSSID[pObj->ioctl_if].wdev.IEEE8021X, pEntry->WepStatus)); if (pAd->ApCfg.MBSSID[pObj->ioctl_if].wdev.IEEE8021X != TRUE) break; if (pEntry->WepStatus != Ndis802_11WEPEnabled) @@ -3828,7 +3864,7 @@ INT RTMPAPSetInformation( pMbss = &pAd->ApCfg.MBSSID[apidx]; KeyIdx=pMbss->DefaultKeyId; - printk("Woody HOSTAPD_OID_STATIC_WEP_COPY=%d\n",KeyIdx); + DBGPRINT(RT_DEBUG_OFF, ("HOSTAPD_OID_STATIC_WEP_COPY=%d\n", KeyIdx)); pEntry->AuthMode=pAd->ApCfg.MBSSID[apidx].AuthMode; pEntry->PairwiseKey.KeyLen = pAd->SharedKey[apidx][KeyIdx].KeyLen; NdisMoveMemory(pEntry->PairwiseKey.Key, pAd->SharedKey[apidx][KeyIdx].Key, pAd->SharedKey[apidx][KeyIdx].KeyLen); @@ -3904,14 +3940,14 @@ INT RTMPAPSetInformation( int v, apidx; apidx = pObj->ioctl_if; Status = copy_from_user(&hostapd_enable, wrq->u.data.pointer, wrq->u.data.length); - printk("OID_HOSTAPD_SUPPORT apidx=%d\n",apidx); + DBGPRINT(RT_DEBUG_OFF, ("OID_HOSTAPD_SUPPORT apidx=%d\n", apidx)); pAd->ApCfg.MBSSID[apidx].Hostapd = hostapd_enable; BSS_STRUCT *pMBSSStruct; for(v=0;v<MAX_MBSSID_NUM(pAd);v++) { - printk("ApCfg->MBSSID[%d].Hostapd == %s\n", v, - (pAd->ApCfg.MBSSID[v].Hostapd == Hostapd_EXT ? "TRUE" : "FALSE")); + DBGPRINT(RT_DEBUG_OFF, ("ApCfg->MBSSID[%d].Hostapd == %s\n" + , v, (pAd->ApCfg.MBSSID[v].Hostapd == Hostapd_EXT ? "TRUE" : "FALSE"))); pMBSSStruct = &pAd->ApCfg.MBSSID[v]; pMBSSStruct->WPAREKEY.ReKeyInterval = 0; pMBSSStruct->WPAREKEY.ReKeyMethod = DISABLE_REKEY; @@ -4107,7 +4143,7 @@ INT RTMPAPSetInformation( else if (((pHSCtrl->HotSpotEnable) && (pAd->ApCfg.MBSSID[pObj->ioctl_if].wdev.AuthMode == Ndis802_11AuthModeOpen)) || ((pEntry->WpaState == AS_PTKINITDONE) && (pEntry->GTKState = REKEY_ESTABLISHED))) { - printk("btm1\n"); + DBGPRINT(RT_DEBUG_OFF, ("btm1\n")); Send_BTM_Req(pAd, req_data->peer_mac_addr, req_data->btm_req, @@ -4115,7 +4151,7 @@ INT RTMPAPSetInformation( } else { - printk("btm2\n"); + DBGPRINT(RT_DEBUG_OFF, ("btm2\n")); pEntry->IsBTMReqValid = TRUE; os_alloc_mem(pEntry->ReqbtmData, (UCHAR **)&pEntry->ReqbtmData, sizeof(struct btm_req_data)+req_data->btm_req_len); memcpy(pEntry->ReqbtmData, Buf, sizeof(struct btm_req_data)+req_data->btm_req_len); @@ -4145,7 +4181,7 @@ INT RTMPAPSetInformation( else if (((pHSCtrl->HotSpotEnable) && (pAd->ApCfg.MBSSID[pObj->ioctl_if].wdev.AuthMode == Ndis802_11AuthModeOpen)) || ((pEntry->WpaState == AS_PTKINITDONE) && (pEntry->GTKState = REKEY_ESTABLISHED))) { - printk("wnm1\n"); + DBGPRINT(RT_DEBUG_OFF, ("wnm1\n")); Send_WNM_Notify_Req(pAd, req_data->peer_mac_addr, req_data->wnm_req, @@ -4154,7 +4190,7 @@ INT RTMPAPSetInformation( } else { - printk("wnm2\n"); + DBGPRINT(RT_DEBUG_OFF, ("wnm2\n")); pEntry->IsWNMReqValid = TRUE; os_alloc_mem(pEntry->ReqData, (UCHAR **)&pEntry->ReqData, sizeof(struct wnm_req_data)+req_data->wnm_req_len); memcpy(pEntry->ReqData, Buf, sizeof(struct wnm_req_data)+req_data->wnm_req_len); @@ -4217,7 +4253,7 @@ INT RTMPAPSetInformation( memcpy((UCHAR *)pEntry->DscpException, req_data->qosmap, pEntry->DscpExceptionCount); } - printk ("send QoS map frame: apidx=%d\n", pEntry->apidx); + DBGPRINT(RT_DEBUG_OFF, ("send QoS map frame: apidx=%d\n", pEntry->apidx)); Send_QOSMAP_Configure(pAd, pEntry->Addr, req_data->qosmap, @@ -4287,7 +4323,7 @@ INT RTMPAPQueryInformation( #ifdef APCLI_SUPPORT #ifdef WPA_SUPPLICANT_SUPPORT - UCHAR ifIndex; + INT ifIndex; ULONG BssBufSize; BOOLEAN apcliEn=FALSE; INT i,Padding = 0; @@ -4668,7 +4704,7 @@ INT RTMPAPQueryInformation( pUICli = &pUI_table->Client[i]; NdisMoveMemory(pUICli, pPAdCli, sizeof(RT_P2P_CLIENT_ENTRY)); } - printk("Query::OID_802_11_P2P_SCAN_LIST\n"); + DBGPRINT(RT_DEBUG_OFF, ("Query::OID_802_11_P2P_SCAN_LIST\n")); Status = copy_to_user(wrq->u.data.pointer, pUI_table, sizeof(RT_P2P_UI_TABLE)); DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_P2P_SCAN_LIST (Len=%d, Rule=%s)\n", sizeof(char),pAd->P2pCfg.GroupOpChannel)); os_free_mem(NULL, pUI_table); @@ -4688,7 +4724,7 @@ INT RTMPAPQueryInformation( case RT_OID_VERSION_INFO: DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_VERSION_INFO \n")); - wrq->u.data.length = strlen(AP_DRIVER_VERSION); + wrq->u.data.length = (UINT16)strlen(AP_DRIVER_VERSION); snprintf(&driverVersion[0], sizeof(driverVersion), "%s", AP_DRIVER_VERSION); driverVersion[wrq->u.data.length] = '\0'; if (copy_to_user(wrq->u.data.pointer, &driverVersion, wrq->u.data.length)) @@ -5900,7 +5936,7 @@ INT RTMPAPQueryInformation( PUCHAR pType; struct security_type *SecurityType; //DBGPRINT(RT_DEBUG_TRACE, ("Query:OID_802_11_SECURITY_TYPE\n")); - printk("Query:OID_802_11_SECURITY_TYPE\n"); + DBGPRINT(RT_DEBUG_OFF, ("Query:OID_802_11_SECURITY_TYPE\n")); os_alloc_mem(NULL, &pType, sizeof(*SecurityType)); SecurityType = (struct security_type *)pType; pMbss = &pAd->ApCfg.MBSSID[pObj->ioctl_if]; @@ -5954,16 +5990,16 @@ INT RTMPAPQueryInformation( Status = copy_from_user(buf, wrq->u.data.pointer, wrq->u.data.length); Info = (struct bbp32_info *)buf; - printk("Info->bbp_start = %x\n", Info->bbp_start); - printk("Info->bbp_end = %x\n", Info->bbp_end); + DBGPRINT(RT_DEBUG_OFF, ("Info->bbp_start = %x\n", Info->bbp_start)); + DBGPRINT(RT_DEBUG_OFF, ("Info->bbp_end = %x\n", Info->bbp_end)); for (Index = Info->bbp_start; Index <= Info->bbp_end; Index += 4) { UINT32 Value; RTMP_BBP_IO_READ32(pAd, Index + pAd->chipCap.BBPMemMapOffset, &Value); - printk("Offset = %x\n", Index + pAd->chipCap.BBPMemMapOffset); - printk("Value = %x\n", Value); + DBGPRINT(RT_DEBUG_OFF, ("Offset = %x\n", Index + pAd->chipCap.BBPMemMapOffset)); + DBGPRINT(RT_DEBUG_OFF, ("Value = %x\n", Value)); NdisMoveMemory(Info->bbp_value + j, &Value, 4); j++; } @@ -5998,17 +6034,17 @@ INT RTMPAPQueryInformation( Status = copy_from_user(buf, wrq->u.data.pointer, wrq->u.data.length); Info = (struct rf_bank_info *)buf; - printk("Info->rf_bank = %x\n", Info->rf_bank); - printk("Info->rf_start = %x\n", Info->rf_start); - printk("Info->rf_end = %x\n", Info->rf_end); + DBGPRINT(RT_DEBUG_OFF, ("Info->rf_bank = %x\n", Info->rf_bank)); + DBGPRINT(RT_DEBUG_OFF, ("Info->rf_start = %x\n", Info->rf_start)); + DBGPRINT(RT_DEBUG_OFF, ("Info->rf_end = %x\n", Info->rf_end)); for (Index = Info->rf_start; Index <= Info->rf_end; Index ++) { UINT8 Value; rlt_rf_read(pAd, Info->rf_bank, Index, &Value); - printk("Offset = %x\n", Index); - printk("Value = %x\n", Value); + DBGPRINT(RT_DEBUG_OFF, ("Offset = %x\n", Index)); + DBGPRINT(RT_DEBUG_OFF, ("Value = %x\n", Value)); NdisMoveMemory(Info->rf_value + j, &Value, 1); j++; } @@ -6078,9 +6114,11 @@ INT RTMPAPQueryInformation( Status = copy_from_user(buf, wrq->u.data.pointer, wrq->u.data.length); Info = (struct mem_map_info *)buf; - printk("Info->base = %x\n", Info->base); - printk("Info->mem_map_start = %x\n", Info->mem_map_start); - printk("Info->mem_map_end = %x\n", Info->mem_map_end); + DBGPRINT(RT_DEBUG_OFF, ("Info->base = %x\n", Info->base)); + DBGPRINT(RT_DEBUG_OFF, ("Info->mem_map_start = %x\n" + , Info->mem_map_start)); + DBGPRINT(RT_DEBUG_OFF, ("Info->mem_map_end = %x\n" + , Info->mem_map_end)); for (Index = Info->mem_map_start; Index <= Info->mem_map_end; Index += 4) @@ -6115,8 +6153,8 @@ INT RTMPAPQueryInformation( Status = copy_from_user(buf, wrq->u.data.pointer, wrq->u.data.length); Info = (struct e2p_info *)buf; - printk("Info->e2p_start = %x\n", Info->e2p_start); - printk("Info->e2p_end = %x\n", Info->e2p_end); + DBGPRINT(RT_DEBUG_OFF, ("Info->e2p_start = %x\n", Info->e2p_start)); + DBGPRINT(RT_DEBUG_OFF, ("Info->e2p_end = %x\n", Info->e2p_end)); for (Index = Info->e2p_start; Index <= Info->e2p_end; Index += 2) @@ -6151,16 +6189,17 @@ INT RTMPAPQueryInformation( Status = copy_from_user(buf, wrq->u.data.pointer, wrq->u.data.length); Info = (struct mac_info *)buf; - printk("Info->mac_start = %x\n", Info->mac_start); - printk("Info->mac_end = %x\n", Info->mac_end); + DBGPRINT(RT_DEBUG_OFF, ("Info->mac_start = %x\n", Info->mac_start)); + DBGPRINT(RT_DEBUG_OFF, ("Info->mac_end = %x\n", Info->mac_end)); for (Index = Info->mac_start; Index <= Info->mac_end; Index += 4) { UINT32 Value; RTMP_IO_READ32(pAd, Index + pAd->chipCap.MacMemMapOffset, &Value); - printk("Offset = %x\n", Index + pAd->chipCap.MacMemMapOffset); - printk("Value = %x\n", Value); + DBGPRINT(RT_DEBUG_OFF, ("Offset = %x\n", + Index + pAd->chipCap.MacMemMapOffset)); + DBGPRINT(RT_DEBUG_OFF, ("Value = %x\n", Value)); NdisMoveMemory(Info->mac_value + j, &Value, 4); j++; } @@ -6203,7 +6242,7 @@ INT RTMPAPQueryInformation( Info = (struct rf_bank_info *)buf; Offset = pAd->chipCap.RFBankOffset; - printk("pAd->chipCap.RFBankNum = %d\n", pAd->chipCap.RFBankNum); + DBGPRINT(RT_DEBUG_OFF, ("pAd->chipCap.RFBankNum = %d\n", pAd->chipCap.RFBankNum)); for (Index = 0; Index < pAd->chipCap.RFBankNum; Index++) { @@ -6578,7 +6617,7 @@ INT Set_TxRate_Proc( NdisZeroMemory(pAd->ApCfg.MBSSID[pObj->ioctl_if].DesiredRates, MAX_LEN_OF_SUPPORTED_RATES); - pAd->ApCfg.MBSSID[pObj->ioctl_if].DesiredRatesIndex = simple_strtol(arg, 0, 10); + pAd->ApCfg.MBSSID[pObj->ioctl_if].DesiredRatesIndex = (UCHAR)simple_strtol(arg, 0, 10); /* todo RTMPBuildDesireRate(pAd, pObj->ioctl_if, pAd->ApCfg.MBSSID[pObj->ioctl_if].DesiredRatesIndex); */ /*todo MlmeUpdateTxRates(pAd); */ @@ -6662,10 +6701,10 @@ INT Set_DtimPeriod_Proc( IN PRTMP_ADAPTER pAd, IN RTMP_STRING *arg) { - USHORT DtimPeriod; + UCHAR DtimPeriod; INT success = FALSE; - DtimPeriod = (USHORT) simple_strtol(arg, 0, 10); + DtimPeriod = (UCHAR) simple_strtol(arg, 0, 10); if((DtimPeriod >= 1) && (DtimPeriod <= 255)) { pAd->ApCfg.DtimPeriod = DtimPeriod; @@ -6690,9 +6729,9 @@ INT Set_RfRead_Proc( for (i = 0; i < 32; i++) { RT30xxReadRFRegister(pAdapter, i, &Value); - printk("%02x ", Value); + DBGPRINT(RT_DEBUG_OFF, ("%02x ", Value)); if (((i + 1) % 4) == 0) - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); } return TRUE; } @@ -6775,7 +6814,7 @@ INT Set_AP_WmmCapable_Proc( BOOLEAN bWmmCapable; POS_COOKIE pObj= (POS_COOKIE)pAd->OS_Cookie; - bWmmCapable = simple_strtol(arg, 0, 10); + bWmmCapable = (BOOLEAN)simple_strtol(arg, 0, 10); if (bWmmCapable == 1) pAd->ApCfg.MBSSID[pObj->ioctl_if].wdev.bWmmCapable = TRUE; @@ -6906,7 +6945,7 @@ INT Set_HideSSID_Proc( BOOLEAN bHideSsid; POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; - bHideSsid = simple_strtol(arg, 0, 10); + bHideSsid = (BOOLEAN)simple_strtol(arg, 0, 10); if (bHideSsid == 1) bHideSsid = TRUE; @@ -6947,7 +6986,7 @@ INT Set_VLANID_Proc( wdev = &pAd->ApCfg.MBSSID[pObj->ioctl_if].wdev; - wdev->VLAN_VID = simple_strtol(arg, 0, 10); + wdev->VLAN_VID = (USHORT)simple_strtol(arg, 0, 10); DBGPRINT(RT_DEBUG_TRACE, ("IF(ra%d) Set_VLANID_Proc::(VLAN_VID=%d)\n", pObj->ioctl_if, wdev->VLAN_VID)); @@ -6969,7 +7008,7 @@ INT Set_VLANPriority_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; struct wifi_dev *wdev = &pAd->ApCfg.MBSSID[pObj->ioctl_if].wdev; - wdev->VLAN_Priority = simple_strtol(arg, 0, 10); + wdev->VLAN_Priority = (USHORT)simple_strtol(arg, 0, 10); DBGPRINT(RT_DEBUG_TRACE, ("IF(ra%d) Set_VLANPriority_Proc::(VLAN_Priority=%d)\n", pObj->ioctl_if, wdev->VLAN_Priority)); @@ -6992,7 +7031,7 @@ INT Set_VLAN_TAG_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) struct wifi_dev *wdev; - bVLAN_Tag = simple_strtol(arg, 0, 10); + bVLAN_Tag = (BOOLEAN)simple_strtol(arg, 0, 10); if (bVLAN_Tag == 1) bVLAN_Tag = TRUE; @@ -7286,7 +7325,7 @@ INT Set_AP_ASSOC_REQ_RSSI_THRESHOLD( UCHAR apidx = pObj->ioctl_if; UINT j; CHAR rssi; - rssi = simple_strtol(arg, 0, 10); + rssi = (CHAR)simple_strtol(arg, 0, 10); if (rssi == 0) { @@ -7329,7 +7368,7 @@ INT Set_AP_KickStaRssiLow_Proc( UCHAR apidx = pObj->ioctl_if; UINT j; CHAR rssi; - rssi = simple_strtol(arg, 0, 10); + rssi = (CHAR)simple_strtol(arg, 0, 10); if (rssi == 0) { @@ -7730,14 +7769,14 @@ INT Set_AP_Key1_Proc( IN RTMP_STRING *arg) { POS_COOKIE pObj; - UCHAR apidx; + UCHAR apidx, keyidx = 0; CIPHER_KEY *pSharedKey; INT retVal; pObj = (POS_COOKIE) pAd->OS_Cookie; - apidx = pObj->ioctl_if; - pSharedKey = &pAd->SharedKey[apidx][0]; - retVal = RT_CfgSetWepKey(pAd, arg, pSharedKey, 0); + apidx = (UCHAR)pObj->ioctl_if; + pSharedKey = &pAd->SharedKey[apidx][keyidx]; + retVal = RT_CfgSetWepKey(pAd, arg, pSharedKey, keyidx); if (retVal == TRUE) { /* Set keys (into ASIC) */ @@ -7745,7 +7784,7 @@ INT Set_AP_Key1_Proc( ; /* not support */ else /* Old WEP stuff */ { - AsicAddSharedKeyEntry(pAd, apidx, 0, pSharedKey); + AsicAddSharedKeyEntry(pAd, apidx, keyidx, pSharedKey); } DBGPRINT(RT_DEBUG_TRACE, ("IF(ra%d) Set_Key1_Proc::(Key1=%s) success!\n", apidx, arg)); } @@ -7767,14 +7806,14 @@ INT Set_AP_Key2_Proc( IN RTMP_STRING *arg) { POS_COOKIE pObj; - UCHAR apidx; + UCHAR apidx, keyidx = 1; CIPHER_KEY *pSharedKey; INT retVal; pObj = (POS_COOKIE) pAd->OS_Cookie; - apidx = pObj->ioctl_if; - pSharedKey = &pAd->SharedKey[apidx][1]; - retVal = RT_CfgSetWepKey(pAd, arg, pSharedKey, 1); + apidx = (UCHAR)pObj->ioctl_if; + pSharedKey = &pAd->SharedKey[apidx][keyidx]; + retVal = RT_CfgSetWepKey(pAd, arg, pSharedKey, keyidx); if (retVal == TRUE) { /* Set keys (into ASIC) */ @@ -7782,7 +7821,7 @@ INT Set_AP_Key2_Proc( ; /* not support */ else /* Old WEP stuff */ { - AsicAddSharedKeyEntry(pAd, apidx, 1, pSharedKey); + AsicAddSharedKeyEntry(pAd, apidx, keyidx, pSharedKey); } DBGPRINT(RT_DEBUG_TRACE, ("IF(ra%d) Set_Key2_Proc::(Key2=%s) success!\n", apidx, arg)); } @@ -7804,14 +7843,14 @@ INT Set_AP_Key3_Proc( IN RTMP_STRING *arg) { POS_COOKIE pObj; - UCHAR apidx; + UCHAR apidx, keyidx = 2; CIPHER_KEY *pSharedKey; INT retVal; pObj = (POS_COOKIE) pAd->OS_Cookie; - apidx = pObj->ioctl_if; - pSharedKey = &pAd->SharedKey[apidx][2]; - retVal = RT_CfgSetWepKey(pAd, arg, pSharedKey, 2); + apidx = (UCHAR)pObj->ioctl_if; + pSharedKey = &pAd->SharedKey[apidx][keyidx]; + retVal = RT_CfgSetWepKey(pAd, arg, pSharedKey, keyidx); if (retVal == TRUE) { /* Set keys (into ASIC) */ @@ -7819,7 +7858,7 @@ INT Set_AP_Key3_Proc( ; /* not support */ else /* Old WEP stuff */ { - AsicAddSharedKeyEntry(pAd, apidx, 2, pSharedKey); + AsicAddSharedKeyEntry(pAd, apidx, keyidx, pSharedKey); } DBGPRINT(RT_DEBUG_TRACE, ("IF(ra%d) Set_Key3_Proc::(Key3=%s) success!\n", apidx, arg)); } @@ -7842,14 +7881,14 @@ INT Set_AP_Key4_Proc( { POS_COOKIE pObj; - UCHAR apidx; + UCHAR apidx, keyidx = 3; CIPHER_KEY *pSharedKey; INT retVal; pObj = (POS_COOKIE) pAd->OS_Cookie; - apidx = pObj->ioctl_if; - pSharedKey = &pAd->SharedKey[apidx][3]; - retVal = RT_CfgSetWepKey(pAd, arg, pSharedKey, 3); + apidx = (UCHAR)pObj->ioctl_if; + pSharedKey = &pAd->SharedKey[apidx][keyidx]; + retVal = RT_CfgSetWepKey(pAd, arg, pSharedKey, keyidx); if (retVal == TRUE) { /* Set keys (into ASIC) */ @@ -7857,7 +7896,7 @@ INT Set_AP_Key4_Proc( ; /* not support */ else /* Old WEP stuff */ { - AsicAddSharedKeyEntry(pAd, apidx, 3, pSharedKey); + AsicAddSharedKeyEntry(pAd, apidx, keyidx, pSharedKey); } DBGPRINT(RT_DEBUG_TRACE, ("IF(ra%d) Set_Key4_Proc::(Key4=%s) success!\n", apidx, arg)); } @@ -7898,7 +7937,7 @@ INT Set_AccessPolicy_Proc( } /* check if the change in ACL affects any existent association */ - ApUpdateAccessControlList(pAd, pObj->ioctl_if); + ApUpdateAccessControlList(pAd, (UCHAR)pObj->ioctl_if); DBGPRINT(RT_DEBUG_TRACE, ("IF(ra%d) Set_AccessPolicy_Proc::(AccessPolicy=%ld)\n", pObj->ioctl_if, pAd->ApCfg.MBSSID[pObj->ioctl_if].AccessControlList.Policy)); return TRUE; @@ -7995,7 +8034,7 @@ INT Set_AccessControlList_Proc( #endif /* Check if the change in ACL affects any existent association. */ - ApUpdateAccessControlList(pAd, pObj->ioctl_if); + ApUpdateAccessControlList(pAd, (UCHAR)pObj->ioctl_if); DBGPRINT(RT_DEBUG_TRACE, ("Set::Set_AccessControlList_Proc(Policy=%ld, Entry#=%ld)\n", pAd->ApCfg.MBSSID[pObj->ioctl_if].AccessControlList.Policy, pAd->ApCfg.MBSSID[pObj->ioctl_if].AccessControlList.Num)); @@ -8003,10 +8042,11 @@ INT Set_AccessControlList_Proc( DBGPRINT(RT_DEBUG_TRACE, ("=============== Entry ===============\n")); for (i=0; i<pAd->ApCfg.MBSSID[pObj->ioctl_if].AccessControlList.Num; i++) { - printk("Entry #%02d: ", i+1); + DBGPRINT(RT_DEBUG_OFF, ("Entry #%02d: ", i+1)); for (j=0; j<6; j++) - printk("%02X ", pAd->ApCfg.MBSSID[pObj->ioctl_if].AccessControlList.Entry[i].Addr[j]); - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("%02X ", + pAd->ApCfg.MBSSID[pObj->ioctl_if].AccessControlList.Entry[i].Addr[j])); + DBGPRINT(RT_DEBUG_OFF, ("\n")); } #endif return TRUE; @@ -8113,7 +8153,7 @@ INT Set_ACLAddEntry_Proc( NdisMoveMemory(&pAd->ApCfg.MBSSID[pObj->ioctl_if].AccessControlList, pacl, sizeof(RT_802_11_ACL)); /* check if the change in ACL affects any existent association */ - ApUpdateAccessControlList(pAd, pObj->ioctl_if); + ApUpdateAccessControlList(pAd, (UCHAR)pObj->ioctl_if); DBGPRINT(RT_DEBUG_TRACE, ("Set::%s(Policy=%ld, Entry#=%ld)\n", __FUNCTION__ , pAd->ApCfg.MBSSID[pObj->ioctl_if].AccessControlList.Policy, pAd->ApCfg.MBSSID[pObj->ioctl_if].AccessControlList.Num)); @@ -8121,10 +8161,11 @@ INT Set_ACLAddEntry_Proc( DBGPRINT(RT_DEBUG_TRACE, ("=============== Entry ===============\n")); for (i=0; i<pAd->ApCfg.MBSSID[pObj->ioctl_if].AccessControlList.Num; i++) { - printk("Entry #%02d: ", i+1); + DBGPRINT(RT_DEBUG_OFF, ("Entry #%02d: ", i+1)); for (j=0; j<MAC_ADDR_LEN; j++) - printk("%02X ", pAd->ApCfg.MBSSID[pObj->ioctl_if].AccessControlList.Entry[i].Addr[j]); - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("%02X ", + pAd->ApCfg.MBSSID[pObj->ioctl_if].AccessControlList.Entry[i].Addr[j])); + DBGPRINT(RT_DEBUG_OFF, ("\n")); } #endif @@ -8231,7 +8272,7 @@ INT Set_ACLDelEntry_Proc( ASSERT(acl.Num >= pAd->ApCfg.MBSSID[pObj->ioctl_if].AccessControlList.Num); /* check if the change in ACL affects any existent association */ - ApUpdateAccessControlList(pAd, pObj->ioctl_if); + ApUpdateAccessControlList(pAd, (UCHAR)pObj->ioctl_if); DBGPRINT(RT_DEBUG_TRACE, ("Set::%s(Policy=%ld, Entry#=%ld)\n", __FUNCTION__ , pAd->ApCfg.MBSSID[pObj->ioctl_if].AccessControlList.Policy, pAd->ApCfg.MBSSID[pObj->ioctl_if].AccessControlList.Num)); @@ -8239,10 +8280,11 @@ INT Set_ACLDelEntry_Proc( DBGPRINT(RT_DEBUG_TRACE, ("=============== Entry ===============\n")); for (i=0; i<pAd->ApCfg.MBSSID[pObj->ioctl_if].AccessControlList.Num; i++) { - printk("Entry #%02d: ", i+1); + DBGPRINT(RT_DEBUG_OFF, ("Entry #%02d: ", i+1)); for (j=0; j<MAC_ADDR_LEN; j++) - printk("%02X ", pAd->ApCfg.MBSSID[pObj->ioctl_if].AccessControlList.Entry[i].Addr[j]); - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("%02X ", + pAd->ApCfg.MBSSID[pObj->ioctl_if].AccessControlList.Entry[i].Addr[j])); + DBGPRINT(RT_DEBUG_OFF, ("\n")); } #endif return TRUE; @@ -8272,11 +8314,11 @@ INT Set_ACLShowAll_Proc( IN RTMP_STRING *arg) { RT_802_11_ACL acl; - BOOLEAN bDumpAll=FALSE; + BOOLEAN bDumpAll = FALSE; POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; INT i, j; - bDumpAll = simple_strtol(arg, 0, 10); + bDumpAll = (BOOLEAN)simple_strtol(arg, 0, 10); if (bDumpAll == 1) { @@ -8307,18 +8349,18 @@ INT Set_ACLShowAll_Proc( ASSERT(((bDumpAll == 1) && (acl.Num > 0))); /* Show the corresponding policy first. */ - printk("=============== Access Control Policy ===============\n"); - printk("Policy is %ld : ", acl.Policy); - printk("%s\n", pACL_PolicyMessage[acl.Policy]); + DBGPRINT(RT_DEBUG_OFF, ("=============== Access Control Policy ===============\n")); + DBGPRINT(RT_DEBUG_OFF, ("Policy is %ld : ", acl.Policy)); + DBGPRINT(RT_DEBUG_OFF, ("%s\n", pACL_PolicyMessage[acl.Policy])); /* Dump the entry in the list one by one */ - printk("=============== Access Control List ===============\n"); + DBGPRINT(RT_DEBUG_OFF, ("=============== Access Control List ===============\n")); for (i=0; i<acl.Num; i++) { - printk("Entry #%02d: ", i+1); + DBGPRINT(RT_DEBUG_OFF, ("Entry #%02d: ", i+1)); for (j=0; j<MAC_ADDR_LEN; j++) - printk("%02X ", acl.Entry[i].Addr[j]); - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("%02X ", acl.Entry[i].Addr[j])); + DBGPRINT(RT_DEBUG_OFF, ("\n")); } return TRUE; @@ -8340,10 +8382,10 @@ INT Set_ACLClearAll_Proc( { /* RT_802_11_ACL acl; */ RT_802_11_ACL *pacl = NULL; - BOOLEAN bClearAll=FALSE; + BOOLEAN bClearAll = FALSE; POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; - bClearAll = simple_strtol(arg, 0, 10); + bClearAll = (BOOLEAN)simple_strtol(arg, 0, 10); if (bClearAll == 1) { @@ -8400,7 +8442,7 @@ INT Set_ACLClearAll_Proc( NdisMoveMemory(&(pAd->ApCfg.MBSSID[pObj->ioctl_if].AccessControlList), pacl, sizeof(RT_802_11_ACL)); /* check if the change in ACL affects any existent association */ - ApUpdateAccessControlList(pAd, pObj->ioctl_if); + ApUpdateAccessControlList(pAd, (UCHAR)pObj->ioctl_if); if (pacl != NULL) os_free_mem(NULL, pacl); @@ -8418,14 +8460,14 @@ static void _rtmp_hexdump(int level, const char *title, const UINT8 *buf, size_t i; if (level < RTDebugLevel) return; - printk("%s - hexdump(len=%lu):", title, (unsigned long) len); + DBGPRINT(RT_DEBUG_OFF, ("%s - hexdump(len=%lu):", title, (unsigned long) len)); if (show) { for (i = 0; i < len; i++) - printk(" %02x", buf[i]); + DBGPRINT(RT_DEBUG_OFF, (" %02x", buf[i])); } else { - printk(" [REMOVED]"); + DBGPRINT(RT_DEBUG_OFF, (" [REMOVED]")); } - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); } void rtmp_hexdump(int level, const char *title, const UINT8 *buf, size_t len) @@ -8546,7 +8588,7 @@ INT Set_RadioOn_Proc( { UCHAR radio; - radio = simple_strtol(arg, 0, 10); + radio = (UCHAR)simple_strtol(arg, 0, 10); pAd->iwpriv_command = FALSE; #ifdef MT_MAC @@ -8713,7 +8755,7 @@ INT Set_AutoChannelSelCheckTime_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) INT Show_DriverInfo_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) { -// DBGPRINT(RT_DEBUG_OFF, ("driver version: %s (%s %s) .\n", AP_DRIVER_VERSION, __DATE__, __TIME__)); + DBGPRINT(RT_DEBUG_OFF, ("driver version: %s.\n", AP_DRIVER_VERSION)); #ifdef CONFIG_ANDES_SUPPORT if (pAd->chipCap.MCUType == ANDES) { @@ -8781,21 +8823,21 @@ INT Show_StaCount_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) INT i = 0, bss_idx=0; BSS_STRUCT *pMbss = NULL; - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); for (bss_idx=0; bss_idx < pAd->ApCfg.BssidNum; bss_idx++) { pMbss = &pAd->ApCfg.MBSSID[bss_idx]; - printk("BSS[%02d]: %5d\n", bss_idx, pMbss->StaCount); + DBGPRINT(RT_DEBUG_OFF, ("BSS[%02d]: %5d\n", bss_idx, pMbss->StaCount)); } - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); #ifdef DOT11_N_SUPPORT - printk("HT Operating Mode : %d\n", pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode); - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("HT Operating Mode : %d\n", pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode)); + DBGPRINT(RT_DEBUG_OFF, ("\n")); #endif /* DOT11_N_SUPPORT */ - printk("\n%-19s%-4s%-12s%-12s%-12s%-12s\n", - "MAC", "AID","TxPackets","RxPackets","TxBytes","RxBytes"); + DBGPRINT(RT_DEBUG_OFF, ("\n%-19s%-4s%-12s%-12s%-12s%-12s\n" + , "MAC", "AID", "TxPackets", "RxPackets", "TxBytes", "RxBytes")); for (i=0; i<MAX_LEN_OF_MAC_TABLE; i++) { @@ -8803,15 +8845,15 @@ INT Show_StaCount_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) if ((IS_ENTRY_CLIENT(pEntry) || IS_ENTRY_APCLI(pEntry)) && (pEntry->Sst == SST_ASSOC)) { - printk("%02X:%02X:%02X:%02X:%02X:%02X ", - pEntry->Addr[0], pEntry->Addr[1], pEntry->Addr[2], - pEntry->Addr[3], pEntry->Addr[4], pEntry->Addr[5]); - printk("%-4d", (int)pEntry->Aid); - printk("%-12ld",(ULONG)pEntry->TxPackets.QuadPart); - printk("%-12ld", (ULONG)pEntry->RxPackets.QuadPart); - printk("%-12ld", (ULONG)pEntry->TxBytes); - printk("%-12ld", (ULONG)pEntry->RxBytes); - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("%02X:%02X:%02X:%02X:%02X:%02X " + , pEntry->Addr[0], pEntry->Addr[1], pEntry->Addr[2] + , pEntry->Addr[3], pEntry->Addr[4], pEntry->Addr[5])); + DBGPRINT(RT_DEBUG_OFF, ("%-4d", (int)pEntry->Aid)); + DBGPRINT(RT_DEBUG_OFF, ("%-12ld", (ULONG)pEntry->TxPackets.QuadPart)); + DBGPRINT(RT_DEBUG_OFF, ("%-12ld", (ULONG)pEntry->RxPackets.QuadPart)); + DBGPRINT(RT_DEBUG_OFF, ("%-12ld", (ULONG)pEntry->TxBytes)); + DBGPRINT(RT_DEBUG_OFF, ("%-12ld", (ULONG)pEntry->RxBytes)); + DBGPRINT(RT_DEBUG_OFF, ("\n")); } } @@ -8825,34 +8867,34 @@ INT Show_StaSecurityInfo_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) UCHAR apidx; struct wifi_dev *wdev; - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); for (apidx = 0; apidx < pAd->ApCfg.BssidNum; apidx++) { wdev = &pAd->ApCfg.MBSSID[apidx].wdev; - printk(" BSS(%d) AuthMode(%d)=%s, WepStatus(%d)=%s, GroupWepStatus(%d)=%s, WPAMixPairCipher(0x%02X)\n", - apidx, - wdev->AuthMode, GetAuthMode(wdev->AuthMode), - wdev->WepStatus, GetEncryptType(wdev->WepStatus), - wdev->GroupKeyWepStatus, GetEncryptType(wdev->GroupKeyWepStatus), - wdev->WpaMixPairCipher); + DBGPRINT(RT_DEBUG_OFF, (" BSS(%d) AuthMode(%d)=%s, WepStatus(%d)=%s, GroupWepStatus(%d)=%s, WPAMixPairCipher(0x%02X)\n" + , apidx, wdev->AuthMode, GetAuthMode((CHAR)wdev->AuthMode) + , wdev->WepStatus, GetEncryptType((CHAR)wdev->WepStatus) + , wdev->GroupKeyWepStatus + , GetEncryptType((CHAR)wdev->GroupKeyWepStatus) + , wdev->WpaMixPairCipher)); } - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); - printk("\n%-19s%-4s%-4s%-15s%-12s\n", - "MAC", "AID", "BSS", "Auth", "Encrypt"); + DBGPRINT(RT_DEBUG_OFF, ("\n%-19s%-4s%-4s%-15s%-12s\n", + "MAC", "AID", "BSS", "Auth", "Encrypt")); for (i=0; i<MAX_LEN_OF_MAC_TABLE; i++) { PMAC_TABLE_ENTRY pEntry = &pAd->MacTab.Content[i]; if (pEntry && IS_ENTRY_CLIENT(pEntry) && pEntry->Sst == SST_ASSOC) { - printk("%02X:%02X:%02X:%02X:%02X:%02X ", - PRINT_MAC(pEntry->Addr)); - printk("%-4d", (int)pEntry->Aid); - printk("%-4d", (int)pEntry->func_tb_idx); - printk("%-15s", GetAuthMode(pEntry->AuthMode)); - printk("%-12s", GetEncryptType(pEntry->WepStatus)); - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("%02X:%02X:%02X:%02X:%02X:%02X ", + PRINT_MAC(pEntry->Addr))); + DBGPRINT(RT_DEBUG_OFF, ("%-4d", (int)pEntry->Aid)); + DBGPRINT(RT_DEBUG_OFF, ("%-4d", (int)pEntry->func_tb_idx)); + DBGPRINT(RT_DEBUG_OFF, ("%-15s", GetAuthMode((CHAR)pEntry->AuthMode))); + DBGPRINT(RT_DEBUG_OFF, ("%-12s", GetEncryptType((CHAR)pEntry->WepStatus))); + DBGPRINT(RT_DEBUG_OFF, ("\n")); } } @@ -8933,16 +8975,17 @@ INT Set_BDInfo_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) RTMP_MGMT_RING *pMgmtRing = &pAd->MgmtRing; RTMP_RX_RING *pRxRing = &pAd->RxRing[0]; - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); #ifdef DOT11_N_SUPPORT - printk("HT Operating Mode : %d\n", pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode); + DBGPRINT(RT_DEBUG_OFF, ("HT Operating Mode : %d\n", + pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode)); #endif /* DOT11_N_SUPPORT */ - printk("\n"); - printk("[Tx]: SwFreeIdx=%d, CpuIdx=%d, DmaIdx=%d\n", + DBGPRINT(RT_DEBUG_OFF, ("\n")); + DBGPRINT(RT_DEBUG_OFF, ("[Tx]: SwFreeIdx=%d, CpuIdx=%d, DmaIdx=%d\n", pAd->TxRing[QueIdx].TxSwFreeIdx, pAd->TxRing[QueIdx].TxCpuIdx, - pAd->TxRing[QueIdx].TxDmaIdx); + pAd->TxRing[QueIdx].TxDmaIdx)); #ifdef RT_BIG_ENDIAN pDestTxD = (TXD_STRUC *) pTxRing->Cell[pAd->TxRing[QueIdx].TxSwFreeIdx].AllocVa; @@ -8953,7 +8996,7 @@ INT Set_BDInfo_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) pTxD = (TXD_STRUC *) pTxRing->Cell[pAd->TxRing[QueIdx].TxSwFreeIdx].AllocVa; #endif /* RT_BIG_ENDIAN */ hex_dump("Tx SwFreeIdx Descriptor", (char *)pTxD, 16); - printk("pTxD->DMADONE = %x\n", pTxD->DMADONE); + DBGPRINT(RT_DEBUG_OFF, ("pTxD->DMADONE = %x\n", pTxD->DMADONE)); #ifdef RT_BIG_ENDIAN pDestTxD = (TXD_STRUC *) pTxRing->Cell[pAd->TxRing[QueIdx].TxCpuIdx].AllocVa; @@ -8964,7 +9007,7 @@ INT Set_BDInfo_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) pTxD = (TXD_STRUC *) pTxRing->Cell[pAd->TxRing[QueIdx].TxCpuIdx].AllocVa; #endif /* RT_BIG_ENDIAN */ hex_dump("Tx CpuIdx Descriptor", (char *)pTxD, 16); - printk("pTxD->DMADONE = %x\n", pTxD->DMADONE); + DBGPRINT(RT_DEBUG_OFF, ("pTxD->DMADONE = %x\n", pTxD->DMADONE)); #ifdef RT_BIG_ENDIAN pDestTxD = (TXD_STRUC *) pTxRing->Cell[pAd->TxRing[QueIdx].TxDmaIdx].AllocVa; @@ -8975,12 +9018,12 @@ INT Set_BDInfo_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) pTxD = (TXD_STRUC *) pTxRing->Cell[pAd->TxRing[QueIdx].TxDmaIdx].AllocVa; #endif /* RT_BIG_ENDIAN */ hex_dump("Tx DmaIdx Descriptor", (char *)pTxD, 16); - printk("pTxD->DMADONE = %x\n", pTxD->DMADONE); + DBGPRINT(RT_DEBUG_OFF, ("pTxD->DMADONE = %x\n", pTxD->DMADONE)); - printk("[Mgmt]: SwFreeIdx=%d, CpuIdx=%d, DmaIdx=%d\n", + DBGPRINT(RT_DEBUG_OFF, ("[Mgmt]: SwFreeIdx=%d, CpuIdx=%d, DmaIdx=%d\n", pAd->MgmtRing.TxSwFreeIdx, pAd->MgmtRing.TxCpuIdx, - pAd->MgmtRing.TxDmaIdx); + pAd->MgmtRing.TxDmaIdx)); #ifdef RT_BIG_ENDIAN pDestTxD = (TXD_STRUC *) pMgmtRing->Cell[pAd->MgmtRing.TxSwFreeIdx].AllocVa; @@ -9011,11 +9054,11 @@ INT Set_BDInfo_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) pTxD = (TXD_STRUC *) pMgmtRing->Cell[pAd->MgmtRing.TxDmaIdx].AllocVa; #endif /* RT_BIG_ENDIAN */ hex_dump("Mgmt DmaIdx Descriptor", (char *)pTxD, 16); - printk("\n"); - printk("[Rx]: SwRedIdx=%d, CpuIdx=%d, DmaIdx=%d\n", + DBGPRINT(RT_DEBUG_OFF, ("\n")); + DBGPRINT(RT_DEBUG_OFF, ("[Rx]: SwRedIdx=%d, CpuIdx=%d, DmaIdx=%d\n", pAd->RxRing[0].RxSwReadIdx, pAd->RxRing[0].RxCpuIdx, - pAd->RxRing[0].RxDmaIdx); + pAd->RxRing[0].RxDmaIdx)); #ifdef RT_BIG_ENDIAN pDestRxD = (RXD_STRUC *) pRxRing->Cell[pAd->RxRing[0].RxSwReadIdx].AllocVa; @@ -9046,32 +9089,33 @@ INT Set_BDInfo_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) pRxD = (RXD_STRUC *) pRxRing->Cell[pAd->RxRing[0].RxDmaIdx].AllocVa; #endif /* RT_BIG_ENDIAN */ hex_dump("RX RxDmaIdx Descritpro", (char *)pRxD, 16); - printk("\n%-19s%-4s%-4s%-7s%-7s%-7s%-10s%-6s%-6s%-6s%-6s\n", - "MAC", "AID", "PSM", "RSSI0", "RSSI1", "RSSI2", "PhMd", "BW", "MCS", "SGI", "STBC"); + DBGPRINT(RT_DEBUG_OFF, ("\n%-19s%-4s%-4s%-7s%-7s%-7s%-10s%-6s%-6s%-6s%-6s\n" + , "MAC", "AID", "PSM", "RSSI0", "RSSI1", "RSSI2", "PhMd", "BW", "MCS", "SGI", "STBC")); for (i=0; i<MAX_LEN_OF_MAC_TABLE; i++) { PMAC_TABLE_ENTRY pEntry = &pAd->MacTab.Content[i]; if (IS_ENTRY_CLIENT(pEntry) && (pEntry->Sst == SST_ASSOC)) { - printk("%02X:%02X:%02X:%02X:%02X:%02X ", + DBGPRINT(RT_DEBUG_OFF, ("%02X:%02X:%02X:%02X:%02X:%02X ", pEntry->Addr[0], pEntry->Addr[1], pEntry->Addr[2], - pEntry->Addr[3], pEntry->Addr[4], pEntry->Addr[5]); - printk("%-4d", (int)pEntry->Aid); - printk("%-4d", (int)pEntry->PsMode); - printk("%-7d", pEntry->RssiSample.AvgRssi[0]); - printk("%-7d", pEntry->RssiSample.AvgRssi[1]); - printk("%-7d", pEntry->RssiSample.AvgRssi[2]); - - - printk("%-10s", get_phymode_str(pEntry->HTPhyMode.field.MODE)); - printk("%-6s", get_bw_str(pEntry->HTPhyMode.field.BW)); - printk("%-6d", pEntry->HTPhyMode.field.MCS); - printk("%-6d", pEntry->HTPhyMode.field.ShortGI); - printk("%-6d", pEntry->HTPhyMode.field.STBC); - printk("%-10d, %d, %d\n", pEntry->FIFOCount, pEntry->DebugTxCount, pEntry->DebugTxCount-pEntry->FIFOCount); - - printk("\n"); + pEntry->Addr[3], pEntry->Addr[4], pEntry->Addr[5])); + DBGPRINT(RT_DEBUG_OFF, ("%-4d", (int)pEntry->Aid)); + DBGPRINT(RT_DEBUG_OFF, ("%-4d", (int)pEntry->PsMode)); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", pEntry->RssiSample.AvgRssi[0])); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", pEntry->RssiSample.AvgRssi[1])); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", pEntry->RssiSample.AvgRssi[2])); + + + DBGPRINT(RT_DEBUG_OFF, ("%-10s", get_phymode_str(pEntry->HTPhyMode.field.MODE))); + DBGPRINT(RT_DEBUG_OFF, ("%-6s", get_bw_str(pEntry->HTPhyMode.field.BW))); + DBGPRINT(RT_DEBUG_OFF, ("%-6d", pEntry->HTPhyMode.field.MCS)); + DBGPRINT(RT_DEBUG_OFF, ("%-6d", pEntry->HTPhyMode.field.ShortGI)); + DBGPRINT(RT_DEBUG_OFF, ("%-6d", pEntry->HTPhyMode.field.STBC)); + DBGPRINT(RT_DEBUG_OFF, ("%-10d, %d, %d\n", pEntry->FIFOCount, pEntry->DebugTxCount + , pEntry->DebugTxCount-pEntry->FIFOCount)); + + DBGPRINT(RT_DEBUG_OFF, ("\n")); } } @@ -9120,127 +9164,128 @@ INT Show_Diag_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) start = pDiag->ArrayStartIdx; stop = pDiag->ArrayCurIdx; - printk("Start=%d, stop=%d!\n\n", start, stop); - printk(" %-12s", "Time(Sec)"); + DBGPRINT(RT_DEBUG_OFF, ("Start=%d, stop=%d!\n\n", start, stop)); + DBGPRINT(RT_DEBUG_OFF, (" %-12s", "Time(Sec)")); for(i=1; i< DIAGNOSE_TIME; i++) { - printk("%-7d", i); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", i)); } - printk("\n -------------------------------------------------------------------------------\n"); - printk("Tx Info:\n"); - printk(" %-12s", "TxDataCnt\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n -------------------------------------------------------------------------------\n")); + DBGPRINT(RT_DEBUG_OFF, ("Tx Info:\n")); + DBGPRINT(RT_DEBUG_OFF, (" %-12s", "TxDataCnt\n")); for (que_idx = 0; que_idx < WMM_NUM_OF_AC; que_idx++) { - printk("\tQueue[%d]:", que_idx); + DBGPRINT(RT_DEBUG_OFF, ("\tQueue[%d]:", que_idx)); for (i = start; i != stop; i = (i+1) % DIAGNOSE_TIME) { - printk("%-7d", pDiag->diag_info[i].TxDataCnt[que_idx]); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", pDiag->diag_info[i].TxDataCnt[que_idx])); } - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); } - printk("\n %-12s", "TxFailCnt"); + DBGPRINT(RT_DEBUG_OFF, ("\n %-12s", "TxFailCnt")); for (i = start; i != stop; i = (i+1) % DIAGNOSE_TIME) { - printk("%-7d", pDiag->diag_info[i].TxFailCnt); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", pDiag->diag_info[i].TxFailCnt)); } #ifdef DBG_TX_AGG_CNT - printk("\n %-12s", "TxAggCnt"); + DBGPRINT(RT_DEBUG_OFF, ("\n %-12s", "TxAggCnt")); for (i = start; i != stop; i = (i+1) % DIAGNOSE_TIME) { - printk("%-7d", pDiag->diag_info[i].TxAggCnt); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", pDiag->diag_info[i].TxAggCnt)); } - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); #endif /* DBG_TX_AGG_CNT */ #ifdef DBG_TXQ_DEPTH - printk("DeQueue Info:\n"); + DBGPRINT(RT_DEBUG_OFF, ("DeQueue Info:\n")); - printk("\n %-12s\n", "DeQueueFunc Called Distribution"); - printk("\t"); + DBGPRINT(RT_DEBUG_OFF, ("\n %-12s\n", "DeQueueFunc Called Distribution")); + DBGPRINT(RT_DEBUG_OFF, ("\t")); for (i = start; i != stop; i = (i+1) % DIAGNOSE_TIME) - printk("%-8d", pDiag->diag_info[i].deq_called); + DBGPRINT(RT_DEBUG_OFF, ("%-8d", pDiag->diag_info[i].deq_called)); - printk("\n %-12s\n", "DeQueueRound(Per-Call) Distribution"); - printk("\t"); + DBGPRINT(RT_DEBUG_OFF, ("\n %-12s\n", "DeQueueRound(Per-Call) Distribution")); + DBGPRINT(RT_DEBUG_OFF, ("\t")); for (i = start; i != stop; i = (i+1) % DIAGNOSE_TIME) - printk("%-8d", pDiag->diag_info[i].deq_round); + DBGPRINT(RT_DEBUG_OFF, ("%-8d", pDiag->diag_info[i].deq_round)); - printk("\n %-12s\n", "DeQueueCount(Per-Round) Distribution"); + DBGPRINT(RT_DEBUG_OFF, ("\n %-12s\n", "DeQueueCount(Per-Round) Distribution")); for (SwQNumLevel = 0 ; SwQNumLevel < 9; SwQNumLevel++) { if (SwQNumLevel == 8) - printk("\t>%-5d", SwQNumLevel); + DBGPRINT(RT_DEBUG_OFF, ("\t>%-5d", SwQNumLevel)); else - printk("\t%-6d", SwQNumLevel); + DBGPRINT(RT_DEBUG_OFF, ("\t%-6d", SwQNumLevel)); for (i = start; i != stop; i = (i+1) % DIAGNOSE_TIME) - printk("%-7d", pDiag->diag_info[i].deq_cnt[SwQNumLevel]); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", pDiag->diag_info[i].deq_cnt[SwQNumLevel]); - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); } - printk("\n %-12s%d", "Sw-Queued TxSwQCnt for WCID ", pDiag->wcid); + DBGPRINT(RT_DEBUG_OFF, ("\n %-12s%d", "Sw-Queued TxSwQCnt for WCID ", pDiag->wcid)); for (que_idx = 0; que_idx < WMM_NUM_OF_AC; que_idx++) { - printk("\n %s[%d]\n", "Queue", que_idx); + DBGPRINT(RT_DEBUG_OFF, ("\n %s[%d]\n", "Queue", que_idx)); for (SwQNumLevel = 0 ; SwQNumLevel < 9; SwQNumLevel++) { if (SwQNumLevel == 8) - printk("\t>%-5d", SwQNumLevel); + DBGPRINT(RT_DEBUG_OFF, ("\t>%-5d", SwQNumLevel)); else - printk("\t%-6d", SwQNumLevel); + DBGPRINT(RT_DEBUG_OFF, ("\t%-6d", SwQNumLevel)); for (i = start; i != stop; i = (i+1) % DIAGNOSE_TIME) - printk("%-7d", pDiag->diag_info[i].TxSWQueCnt[que_idx][SwQNumLevel]); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", pDiag->diag_info[i].TxSWQueCnt[que_idx][SwQNumLevel])); - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); } - printk(" %-12s\n", "TxEnQFailCnt"); + DBGPRINT(RT_DEBUG_OFF, (" %-12s\n", "TxEnQFailCnt")); for (i = start; i != stop; i = (i+1) % DIAGNOSE_TIME) { - printk("\t%-7d", pDiag->diag_info[i].enq_fall_cnt[que_idx]); + DBGPRINT(RT_DEBUG_OFF, ("\t%-7d", pDiag->diag_info[i].enq_fall_cnt[que_idx])); } - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); } - printk("\n %s\n", "DeQueFailedCnt:Reason NotTxResource"); + DBGPRINT(RT_DEBUG_OFF, ("\n %s\n", "DeQueFailedCnt:Reason NotTxResource")); for (que_idx = 0; que_idx < WMM_NUM_OF_AC; que_idx++) { - printk("\n %s[%d]:", "Queue", que_idx); + DBGPRINT(RT_DEBUG_OFF, ("\n %s[%d]:", "Queue", que_idx)); for (i = start; i != stop; i = (i+1) % DIAGNOSE_TIME) - printk("\t%-7d", pDiag->diag_info[i].deq_fail_no_resource_cnt[que_idx]); + DBGPRINT(RT_DEBUG_OFF, ("\t%-7d", pDiag->diag_info[i].deq_fail_no_resource_cnt[que_idx])); } #endif /* DBG_TXQ_DEPTH */ #ifdef DBG_TX_RING_DEPTH - printk("\n %-12s\n", "DMA-Queued TxDescCnt"); + DBGPRINT(RT_DEBUG_OFF, ("\n %-12s\n", "DMA-Queued TxDescCnt")); for (que_idx = 0; que_idx < WMM_NUM_OF_AC; que_idx++) { - printk("\n Queue[%d]\n", que_idx); + DBGPRINT(RT_DEBUG_OFF, ("\n Queue[%d]\n", que_idx); for(TxDescNumLevel = 0; TxDescNumLevel < 16; TxDescNumLevel++) { if (TxDescNumLevel == 15) - printk("\t>%-5d", TxDescNumLevel); + DBGPRINT(RT_DEBUG_OFF, ("\t>%-5d", TxDescNumLevel)); else - printk("\t%-6d", TxDescNumLevel); + DBGPRINT(RT_DEBUG_OFF, ("\t%-6d", TxDescNumLevel)); for (i = start; i != stop; i = (i+1) % DIAGNOSE_TIME) - printk("%-7d", pDiag->diag_info[i].TxDescCnt[que_idx][TxDescNumLevel]); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", pDiag->diag_info[i].TxDescCnt[que_idx][TxDescNumLevel])); - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); } } #endif /* DBG_TX_RING_DEPTH */ #ifdef MT_MAC #ifdef DBG_PSE_DEPTH - printk("\n %-12s\n", "PSE-Queued TxPageCnt in unit of Packets (mod 13)"); + DBGPRINT(RT_DEBUG_OFF, ("\n %-12s\n", + "PSE-Queued TxPageCnt in unit of Packets (mod 13)")); { UCHAR pg_level; for(pg_level = 0; pg_level < 50; pg_level++) { if (pg_level == 49) - printk("\t>%-5d", pg_level); + DBGPRINT(RT_DEBUG_OFF, ("\t>%-5d", pg_level)); else - printk("\t%-6d", pg_level); + DBGPRINT(RT_DEBUG_OFF, ("\t%-6d", pg_level)); for (i = start; i != stop; i = (i+1) % DIAGNOSE_TIME) - printk("%-7d", pDiag->diag_info[i].pse_pg_cnt[pg_level]); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", pDiag->diag_info[i].pse_pg_cnt[pg_level])); - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); } } #endif /* DBG_PSE_DEPTH */ @@ -9248,84 +9293,84 @@ INT Show_Diag_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) #ifdef DOT11_N_SUPPORT #ifdef DBG_TX_AGG_CNT - printk("\n %-12s\n", "Tx-Agged AMPDUCnt"); + DBGPRINT(RT_DEBUG_OFF, ("\n %-12s\n", "Tx-Agged AMPDUCnt")); for (McsIdx =0 ; McsIdx < 16; McsIdx++) { - printk("\t%-6d", (McsIdx+1)); + DBGPRINT(RT_DEBUG_OFF, ("\t%-6d", (McsIdx+1))); for (i = start; i != stop; i = (i+1) % DIAGNOSE_TIME) { - printk("%d(%d%%) ", pDiag->diag_info[i].TxAMPDUCnt[McsIdx], - pDiag->diag_info[i].TxAMPDUCnt[McsIdx] ? (pDiag->diag_info[i].TxAMPDUCnt[McsIdx] * 100 / pDiag->diag_info[i].TxAggCnt) : 0); + DBGPRINT(RT_DEBUG_OFF, ("%d(%d%%) ", pDiag->diag_info[i].TxAMPDUCnt[McsIdx], + pDiag->diag_info[i].TxAMPDUCnt[McsIdx] ? (pDiag->diag_info[i].TxAMPDUCnt[McsIdx] * 100 / pDiag->diag_info[i].TxAggCnt) : 0)); } - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); } #endif /* DBG_TX_AGG_CNT */ #endif /* DOT11_N_SUPPORT */ #ifdef DBG_TX_MCS - printk("\n %-12s\n", "TxMcsCnt_HT"); + DBGPRINT(RT_DEBUG_OFF, ("\n %-12s\n", "TxMcsCnt_HT")); for (McsIdx =0 ; McsIdx < McsMaxIdx; McsIdx++) { - printk("\t%-6d", McsIdx); + DBGPRINT(RT_DEBUG_OFF, ("\t%-6d", McsIdx)); for (i = start; i != stop; i = (i+1) % DIAGNOSE_TIME) - printk("%-7d", pDiag->diag_info[i].TxMcsCnt_HT[McsIdx]); - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", pDiag->diag_info[i].TxMcsCnt_HT[McsIdx])); + DBGPRINT(RT_DEBUG_OFF, ("\n")); } #ifdef DOT11_VHT_AC - printk("\n %-12s\n", "TxMcsCnt_VHT"); + DBGPRINT(RT_DEBUG_OFF, ("\n %-12s\n", "TxMcsCnt_VHT")); for (McsIdx =0 ; McsIdx < vht_mcs_max_idx; McsIdx++) { - printk("\t%-6d", McsIdx); + DBGPRINT(RT_DEBUG_OFF, ("\t%-6d", McsIdx)); for (i = start; i != stop; i = (i+1) % DIAGNOSE_TIME) - printk("%-7d", pDiag->diag_info[i].TxMcsCnt_VHT[McsIdx]); - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", pDiag->diag_info[i].TxMcsCnt_VHT[McsIdx])); + DBGPRINT(RT_DEBUG_OFF, ("\n")); } #endif /* DOT11_VHT_AC */ #endif /* DBG_TX_MCS */ - printk("Rx Info\n"); - printk(" %-12s", "RxDataCnt"); + DBGPRINT(RT_DEBUG_OFF, ("Rx Info\n")); + DBGPRINT(RT_DEBUG_OFF, (" %-12s", "RxDataCnt")); for (i = start; i != stop; i = (i+1) % DIAGNOSE_TIME) { - printk("%-7d", pDiag->diag_info[i].RxDataCnt); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", pDiag->diag_info[i].RxDataCnt)); } - printk("\n %-12s", "RxCrcErrCnt"); + DBGPRINT(RT_DEBUG_OFF, ("\n %-12s", "RxCrcErrCnt")); for (i = start; i != stop; i = (i+1) % DIAGNOSE_TIME) { - printk("%-7d", pDiag->diag_info[i].RxCrcErrCnt); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", pDiag->diag_info[i].RxCrcErrCnt)); } #ifdef DBG_RX_MCS - printk("\n %-12s\n", "RxMcsCnt_HT"); + DBGPRINT(RT_DEBUG_OFF, ("\n %-12s\n", "RxMcsCnt_HT")); for (McsIdx =0 ; McsIdx < McsMaxIdx; McsIdx++) { - printk("\t%-6d", McsIdx); + DBGPRINT(RT_DEBUG_OFF, ("\t%-6d", McsIdx)); for (i = start; i != stop; i = (i+1) % DIAGNOSE_TIME) { - printk("%-7d", pDiag->diag_info[i].RxMcsCnt_HT[McsIdx]); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", pDiag->diag_info[i].RxMcsCnt_HT[McsIdx])); } - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); } #ifdef DOT11_VHT_AC - printk("\n %-12s\n", "RxMcsCnt_VHT"); + DBGPRINT(RT_DEBUG_OFF, ("\n %-12s\n", "RxMcsCnt_VHT")); for (McsIdx =0 ; McsIdx < vht_mcs_max_idx; McsIdx++) { - printk("\t%-6d", McsIdx); + DBGPRINT(RT_DEBUG_OFF, ("\t%-6d", McsIdx)); for (i = start; i != stop; i = (i+1) % DIAGNOSE_TIME) { - printk("%-7d", pDiag->diag_info[i].RxMcsCnt_VHT[McsIdx]); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", pDiag->diag_info[i].RxMcsCnt_VHT[McsIdx])); } - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); } #endif /* DOT11_VHT_AC */ #endif /* DBG_RX_MCS */ - printk("\n-------------\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n-------------\n")); done: os_free_mem(pAd, pDiag); @@ -9338,39 +9383,43 @@ done: INT Show_Sat_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) { /* Sanity check for calculation of sucessful count */ - printk("TransmitCountFromOS = %d\n", pAd->WlanCounters.TransmitCountFrmOs.u.LowPart); - printk("TransmittedFragmentCount = %lld\n", pAd->WlanCounters.TransmittedFragmentCount.u.LowPart + pAd->WlanCounters.MulticastTransmittedFrameCount.QuadPart); - printk("MulticastTransmittedFrameCount = %d\n", pAd->WlanCounters.MulticastTransmittedFrameCount.u.LowPart); - printk("FailedCount = %d\n", pAd->WlanCounters.FailedCount.u.LowPart); - printk("RetryCount = %d\n", pAd->WlanCounters.RetryCount.u.LowPart); - printk("MultipleRetryCount = %d\n", pAd->WlanCounters.MultipleRetryCount.u.LowPart); - printk("RTSSuccessCount = %d\n", pAd->WlanCounters.RTSSuccessCount.u.LowPart); - printk("RTSFailureCount = %d\n", pAd->WlanCounters.RTSFailureCount.u.LowPart); - printk("ACKFailureCount = %d\n", pAd->WlanCounters.ACKFailureCount.u.LowPart); - printk("FrameDuplicateCount = %d\n", pAd->WlanCounters.FrameDuplicateCount.u.LowPart); - printk("ReceivedFragmentCount = %d\n", pAd->WlanCounters.ReceivedFragmentCount.u.LowPart); - printk("MulticastReceivedFrameCount = %d\n", pAd->WlanCounters.MulticastReceivedFrameCount.u.LowPart); - printk("Rx drop due to out of resource = %ld\n", (ULONG)pAd->Counters8023.RxNoBuffer); + DBGPRINT(RT_DEBUG_OFF, ("TransmitCountFromOS = %d\n" + , pAd->WlanCounters.TransmitCountFrmOs.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("TransmittedFragmentCount = %lld\n" + , pAd->WlanCounters.TransmittedFragmentCount.u.LowPart + pAd->WlanCounters.MulticastTransmittedFrameCount.QuadPart)); + DBGPRINT(RT_DEBUG_OFF, ("MulticastTransmittedFrameCount = %d\n" + , pAd->WlanCounters.MulticastTransmittedFrameCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("FailedCount = %d\n", pAd->WlanCounters.FailedCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("RetryCount = %d\n", pAd->WlanCounters.RetryCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("MultipleRetryCount = %d\n" + , pAd->WlanCounters.MultipleRetryCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("RTSSuccessCount = %d\n", pAd->WlanCounters.RTSSuccessCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("RTSFailureCount = %d\n", pAd->WlanCounters.RTSFailureCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("ACKFailureCount = %d\n", pAd->WlanCounters.ACKFailureCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("FrameDuplicateCount = %d\n", pAd->WlanCounters.FrameDuplicateCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("ReceivedFragmentCount = %d\n", pAd->WlanCounters.ReceivedFragmentCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("MulticastReceivedFrameCount = %d\n", pAd->WlanCounters.MulticastReceivedFrameCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("Rx drop due to out of resource = %ld\n", (ULONG)pAd->Counters8023.RxNoBuffer)); #ifdef DBG - printk("RealFcsErrCount = %d\n", pAd->RalinkCounters.RealFcsErrCount.u.LowPart); + DBGPRINT(RT_DEBUG_OFF, ("RealFcsErrCount = %d\n", pAd->RalinkCounters.RealFcsErrCount.u.LowPart)); #else - printk("FCSErrorCount = %d\n", pAd->WlanCounters.FCSErrorCount.u.LowPart); - printk("FrameDuplicateCount.LowPart = %d\n", pAd->WlanCounters.FrameDuplicateCount.u.LowPart / 100); + DBGPRINT(RT_DEBUG_OFF, ("FCSErrorCount = %d\n", pAd->WlanCounters.FCSErrorCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("FrameDuplicateCount.LowPart = %d\n", pAd->WlanCounters.FrameDuplicateCount.u.LowPart / 100)); #endif - printk("TransmittedFrameCount = %d\n", pAd->WlanCounters.TransmittedFragmentCount.u.LowPart); - printk("WEPUndecryptableCount = %d\n", pAd->WlanCounters.WEPUndecryptableCount.u.LowPart); + DBGPRINT(RT_DEBUG_OFF, ("TransmittedFrameCount = %d\n", pAd->WlanCounters.TransmittedFragmentCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("WEPUndecryptableCount = %d\n", pAd->WlanCounters.WEPUndecryptableCount.u.LowPart)); #ifdef DOT11_N_SUPPORT - printk("\n===Some 11n statistics variables: \n"); + DBGPRINT(RT_DEBUG_OFF, ("\n===Some 11n statistics variables:\n")); /* Some 11n statistics variables */ - printk("TxAMSDUCount = %ld\n", (ULONG)pAd->RalinkCounters.TxAMSDUCount.u.LowPart); - printk("RxAMSDUCount = %ld\n", (ULONG)pAd->RalinkCounters.RxAMSDUCount.u.LowPart); - printk("TransmittedAMPDUCount = %ld\n", (ULONG)pAd->RalinkCounters.TransmittedAMPDUCount.u.LowPart); - printk("TransmittedMPDUsInAMPDUCount = %ld\n", (ULONG)pAd->RalinkCounters.TransmittedMPDUsInAMPDUCount.u.LowPart); - printk("TransmittedOctetsInAMPDUCount = %ld\n", (ULONG)pAd->RalinkCounters.TransmittedOctetsInAMPDUCount.u.LowPart); - printk("MPDUInReceivedAMPDUCount = %ld\n", (ULONG)pAd->RalinkCounters.MPDUInReceivedAMPDUCount.u.LowPart); + DBGPRINT(RT_DEBUG_OFF, ("TxAMSDUCount = %ld\n", (ULONG)pAd->RalinkCounters.TxAMSDUCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("RxAMSDUCount = %ld\n", (ULONG)pAd->RalinkCounters.RxAMSDUCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("TransmittedAMPDUCount = %ld\n", (ULONG)pAd->RalinkCounters.TransmittedAMPDUCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("TransmittedMPDUsInAMPDUCount = %ld\n", (ULONG)pAd->RalinkCounters.TransmittedMPDUsInAMPDUCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("TransmittedOctetsInAMPDUCount = %ld\n", (ULONG)pAd->RalinkCounters.TransmittedOctetsInAMPDUCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("MPDUInReceivedAMPDUCount = %ld\n", (ULONG)pAd->RalinkCounters.MPDUInReceivedAMPDUCount.u.LowPart)); #ifdef DOT11N_DRAFT3 - printk("fAnyStaFortyIntolerant=%d\n", pAd->MacTab.fAnyStaFortyIntolerant); + DBGPRINT(RT_DEBUG_OFF, ("fAnyStaFortyIntolerant=%d\n", pAd->MacTab.fAnyStaFortyIntolerant)); #endif /* DOT11N_DRAFT3 */ #endif /* DOT11_N_SUPPORT */ @@ -9379,13 +9428,19 @@ INT Show_Sat_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) for (apidx=0; apidx < pAd->ApCfg.BssidNum; apidx++) { - printk("-- IF-ra%d -- \n", apidx); - printk("Packets Received = %ld\n", (ULONG)pAd->ApCfg.MBSSID[apidx].RxCount); - printk("Packets Sent = %ld\n", (ULONG)pAd->ApCfg.MBSSID[apidx].TxCount); - printk("Bytes Received = %ld\n", (ULONG)pAd->ApCfg.MBSSID[apidx].ReceivedByteCount); - printk("Byte Sent = %ld\n", (ULONG)pAd->ApCfg.MBSSID[apidx].TransmittedByteCount); - printk("Error Packets Received = %ld\n", (ULONG)pAd->ApCfg.MBSSID[apidx].RxErrorCount); - printk("Drop Received Packets = %ld\n", (ULONG)pAd->ApCfg.MBSSID[apidx].RxDropCount); + DBGPRINT(RT_DEBUG_OFF, ("-- IF-ra%d --\n", apidx)); + DBGPRINT(RT_DEBUG_OFF, ("Packets Received = %ld\n", + (ULONG)pAd->ApCfg.MBSSID[apidx].RxCount)); + DBGPRINT(RT_DEBUG_OFF, ("Packets Sent = %ld\n", + (ULONG)pAd->ApCfg.MBSSID[apidx].TxCount)); + DBGPRINT(RT_DEBUG_OFF, ("Bytes Received = %ld\n", + (ULONG)pAd->ApCfg.MBSSID[apidx].ReceivedByteCount)); + DBGPRINT(RT_DEBUG_OFF, ("Byte Sent = %ld\n", + (ULONG)pAd->ApCfg.MBSSID[apidx].TransmittedByteCount)); + DBGPRINT(RT_DEBUG_OFF, ("Error Packets Received = %ld\n", + (ULONG)pAd->ApCfg.MBSSID[apidx].RxErrorCount)); + DBGPRINT(RT_DEBUG_OFF, ("Drop Received Packets = %ld\n", + (ULONG)pAd->ApCfg.MBSSID[apidx].RxDropCount)); #ifdef WSC_INCLUDED if (pAd->ApCfg.MBSSID[apidx].WscControl.WscConfMode != WSC_DISABLE) @@ -9393,7 +9448,7 @@ INT Show_Sat_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) WSC_CTRL *pWscCtrl; pWscCtrl = &pAd->ApCfg.MBSSID[apidx].WscControl; - printk("WscInfo:\n" + DBGPRINT(RT_DEBUG_OFF, ("WscInfo:\n" "\tWscConfMode=%d\n" "\tWscMode=%s\n" "\tWscConfStatus=%d\n" @@ -9403,11 +9458,11 @@ INT Show_Sat_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) pWscCtrl->WscConfMode, ((pWscCtrl->WscMode == WSC_PIN_MODE) ? "PIN" : "PBC"), pWscCtrl->WscConfStatus, pWscCtrl->WscEnrolleePinCode, - pWscCtrl->WscState, pWscCtrl->WscStatus); + pWscCtrl->WscState, pWscCtrl->WscStatus)))); } #endif /* WSC_INCLUDED */ - printk("-- IF-ra%d end -- \n", apidx); + DBGPRINT(RT_DEBUG_OFF, ("-- IF-ra%d end --\n", apidx)); } } @@ -9425,23 +9480,24 @@ INT Show_Sat_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) pEntry = &pAd->MacTab.Content[i]; if (IS_ENTRY_CLIENT(pEntry) && (pEntry->Sst == SST_ASSOC)) { - printk("\n%02x:%02x:%02x:%02x:%02x:%02x - ", PRINT_MAC(pEntry->Addr)); - printk("%-4d\n", (int)pEntry->Aid); + DBGPRINT(RT_DEBUG_OFF, ("\n%02x:%02x:%02x:%02x:%02x:%02x - ", + PRINT_MAC(pEntry->Addr))); + DBGPRINT(RT_DEBUG_OFF, ("%-4d\n", (int)pEntry->Aid)); for (j=maxMcs; j>=0; j--) { if ((pEntry->TXMCSExpected[j] != 0) || (pEntry->TXMCSFailed[j] !=0)) { - printk("MCS[%02d]: Expected %u, Successful %u (%d%%), Failed %u\n", - j, pEntry->TXMCSExpected[j], pEntry->TXMCSSuccessful[j], - pEntry->TXMCSExpected[j] ? (100*pEntry->TXMCSSuccessful[j])/pEntry->TXMCSExpected[j] : 0, - pEntry->TXMCSFailed[j]); + DBGPRINT(RT_DEBUG_OFF, ("MCS[%02d]: Expected %u, Successful %u (%d%%), Failed %u\n" + , j, pEntry->TXMCSExpected[j], pEntry->TXMCSSuccessful[j] + , pEntry->TXMCSExpected[j] ? (100*pEntry->TXMCSSuccessful[j])/pEntry->TXMCSExpected[j] : 0 + , pEntry->TXMCSFailed[j])); for(k=maxMcs; k>=0; k--) { - if (pEntry->TXMCSAutoFallBack[j][k] != 0) - { - printk("\t\t\tAutoMCS[%02d]: %u (%d%%)\n", k, pEntry->TXMCSAutoFallBack[j][k], - (100*pEntry->TXMCSAutoFallBack[j][k])/pEntry->TXMCSExpected[j]); + if (pEntry->TXMCSAutoFallBack[j][k] != 0) { + DBGPRINT(RT_DEBUG_OFF, ("\t\t\tAutoMCS[%02d]: %u (%d%%)\n", k + , pEntry->TXMCSAutoFallBack[j][k] + , (100*pEntry->TXMCSAutoFallBack[j][k])/pEntry->TXMCSExpected[j])); } } } @@ -9465,26 +9521,28 @@ INT Show_Sat_Reset_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) { /* Sanity check for calculation of sucessful count */ - printk("TransmittedFragmentCount = %lld\n", pAd->WlanCounters.TransmittedFragmentCount.u.LowPart + pAd->WlanCounters.MulticastTransmittedFrameCount.QuadPart); - printk("MulticastTransmittedFrameCount = %d\n", pAd->WlanCounters.MulticastTransmittedFrameCount.u.LowPart); - printk("FailedCount = %d\n", pAd->WlanCounters.FailedCount.u.LowPart); - printk("RetryCount = %d\n", pAd->WlanCounters.RetryCount.u.LowPart); - printk("MultipleRetryCount = %d\n", pAd->WlanCounters.MultipleRetryCount.u.LowPart); - printk("RTSSuccessCount = %d\n", pAd->WlanCounters.RTSSuccessCount.u.LowPart); - printk("RTSFailureCount = %d\n", pAd->WlanCounters.RTSFailureCount.u.LowPart); - printk("ACKFailureCount = %d\n", pAd->WlanCounters.ACKFailureCount.u.LowPart); - printk("FrameDuplicateCount = %d\n", pAd->WlanCounters.FrameDuplicateCount.u.LowPart); - printk("ReceivedFragmentCount = %d\n", pAd->WlanCounters.ReceivedFragmentCount.u.LowPart); - printk("MulticastReceivedFrameCount = %d\n", pAd->WlanCounters.MulticastReceivedFrameCount.u.LowPart); - printk("Rx drop due to out of resource = %ld\n", (ULONG)pAd->Counters8023.RxNoBuffer); + DBGPRINT(RT_DEBUG_OFF, ("TransmittedFragmentCount = %lld\n" + , pAd->WlanCounters.TransmittedFragmentCount.u.LowPart + pAd->WlanCounters.MulticastTransmittedFrameCount.QuadPart)); + DBGPRINT(RT_DEBUG_OFF, ("MulticastTransmittedFrameCount = %d\n" + , pAd->WlanCounters.MulticastTransmittedFrameCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("FailedCount = %d\n", pAd->WlanCounters.FailedCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("RetryCount = %d\n", pAd->WlanCounters.RetryCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("MultipleRetryCount = %d\n", pAd->WlanCounters.MultipleRetryCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("RTSSuccessCount = %d\n", pAd->WlanCounters.RTSSuccessCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("RTSFailureCount = %d\n", pAd->WlanCounters.RTSFailureCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("ACKFailureCount = %d\n", pAd->WlanCounters.ACKFailureCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("FrameDuplicateCount = %d\n", pAd->WlanCounters.FrameDuplicateCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("ReceivedFragmentCount = %d\n", pAd->WlanCounters.ReceivedFragmentCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("MulticastReceivedFrameCount = %d\n", pAd->WlanCounters.MulticastReceivedFrameCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("Rx drop due to out of resource = %ld\n", (ULONG)pAd->Counters8023.RxNoBuffer)); #ifdef DBG - printk("RealFcsErrCount = %d\n", pAd->RalinkCounters.RealFcsErrCount.u.LowPart); + DBGPRINT(RT_DEBUG_OFF, ("RealFcsErrCount = %d\n", pAd->RalinkCounters.RealFcsErrCount.u.LowPart)); #else - printk("FCSErrorCount = %d\n", pAd->WlanCounters.FCSErrorCount.u.LowPart); - printk("FrameDuplicateCount.LowPart = %d\n", pAd->WlanCounters.FrameDuplicateCount.u.LowPart / 100); + DBGPRINT(RT_DEBUG_OFF, ("FCSErrorCount = %d\n", pAd->WlanCounters.FCSErrorCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("FrameDuplicateCount.LowPart = %d\n", pAd->WlanCounters.FrameDuplicateCount.u.LowPart / 100)); #endif - printk("TransmittedFrameCount = %d\n", pAd->WlanCounters.TransmittedFrameCount.u.LowPart); - printk("WEPUndecryptableCount = %d\n", pAd->WlanCounters.WEPUndecryptableCount.u.LowPart); + DBGPRINT(RT_DEBUG_OFF, ("TransmittedFrameCount = %d\n", pAd->WlanCounters.TransmittedFrameCount.u.LowPart)); + DBGPRINT(RT_DEBUG_OFF, ("WEPUndecryptableCount = %d\n", pAd->WlanCounters.WEPUndecryptableCount.u.LowPart)); pAd->WlanCounters.TransmittedFragmentCount.u.LowPart = 0; pAd->WlanCounters.MulticastTransmittedFrameCount.u.LowPart = 0; @@ -9523,26 +9581,26 @@ INT Show_Sat_Reset_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) if (IS_ENTRY_CLIENT(pEntry) && (pEntry->Sst == SST_ASSOC)) { - printk("\n%02X:%02X:%02X:%02X:%02X:%02X - ", + DBGPRINT(RT_DEBUG_OFF, ("\n%02X:%02X:%02X:%02X:%02X:%02X - ", pEntry->Addr[0], pEntry->Addr[1], pEntry->Addr[2], - pEntry->Addr[3], pEntry->Addr[4], pEntry->Addr[5]); - printk("%-4d\n", (int)pEntry->Aid); + pEntry->Addr[3], pEntry->Addr[4], pEntry->Addr[5])); + DBGPRINT(RT_DEBUG_OFF, ("%-4d\n", (int)pEntry->Aid)); for (j = maxMcs; j >= 0; j--) { if ((pEntry->TXMCSExpected[j] != 0) || (pEntry->TXMCSFailed[j] !=0)) { - printk("MCS[%02d]: Expected %u, Successful %u (%d%%), Failed %u\n", - j, pEntry->TXMCSExpected[j], pEntry->TXMCSSuccessful[j], - pEntry->TXMCSExpected[j] ? (100*pEntry->TXMCSSuccessful[j])/pEntry->TXMCSExpected[j] : 0, - pEntry->TXMCSFailed[j] - ); + DBGPRINT(RT_DEBUG_OFF, ("MCS[%02d]: Expected %u, Successful %u (%d%%), Failed %u\n" + , j, pEntry->TXMCSExpected[j], pEntry->TXMCSSuccessful[j] + , pEntry->TXMCSExpected[j] ? (100*pEntry->TXMCSSuccessful[j])/pEntry->TXMCSExpected[j] : 0 + , pEntry->TXMCSFailed[j])); for(k = maxMcs; k >= 0; k--) { if (pEntry->TXMCSAutoFallBack[j][k] != 0) { - printk("\t\t\tAutoMCS[%02d]: %u (%d%%)\n", k, pEntry->TXMCSAutoFallBack[j][k], - (100*pEntry->TXMCSAutoFallBack[j][k])/pEntry->TXMCSExpected[j]); + DBGPRINT(RT_DEBUG_OFF, ("\t\t\tAutoMCS[%02d]: %u (%d%%)\n" + , k, pEntry->TXMCSAutoFallBack[j][k] + , (100*pEntry->TXMCSAutoFallBack[j][k])/pEntry->TXMCSExpected[j])); } } } @@ -9582,8 +9640,9 @@ INT Show_MATTable_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) dumpUidMacTb(&pAd->MatCfg, -1); dumpIPv6MacTb(&pAd->MatCfg, -1); - printk("Default BroadCast Address=%02x:%02x:%02x:%02x:%02x:%02x!\n", BROADCAST_ADDR[0], BROADCAST_ADDR[1], - BROADCAST_ADDR[2], BROADCAST_ADDR[3], BROADCAST_ADDR[4], BROADCAST_ADDR[5]); + DBGPRINT(RT_DEBUG_OFF, ("Default BroadCast Address=%02x:%02x:%02x:%02x:%02x:%02x!\n", + BROADCAST_ADDR[0], BROADCAST_ADDR[1], BROADCAST_ADDR[2], + BROADCAST_ADDR[3], BROADCAST_ADDR[4], BROADCAST_ADDR[5])); return TRUE; } #endif /* MAT_SUPPORT */ @@ -10492,9 +10551,10 @@ VOID RTMPAPIoctlBBP( { #ifdef __ECOS BBP_IO_READ8_BY_REG_ID(pAdapter, bbpId, ®BBP); - printk("R%02d[0x%02X]:%02X ", bbpId, bbpId, regBBP); + DBGPRINT(RT_DEBUG_OFF, ("R%02d[0x%02X]:%02X " + , bbpId, bbpId, regBBP)); if ((bbpId%5 == 4) || (bbpId == pAdapter->chipCap.MaxNumOfBbpId)) - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); #else /* according to Andy, Gary, David require. */ /* the command bbp shall read/write BBP register directly for dubug. */ @@ -11013,9 +11073,9 @@ VOID RTMPAPIoctlRF( { #ifdef __ECOS RT30xxReadRFRegister(pAdapter, rfId, ®RF); - printk("R%02d[0x%02X]:%02X ", rfId, rfId*2, regRF); + DBGPRINT(RT_DEBUG_OFF, ("R%02d[0x%02X]:%02X ", rfId, rfId*2, regRF)); if ((rfId%5 == 4) || (rfId == maxRFIdx)) - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); #else /* according to Andy, Gary, David require. */ /* the command RF shall read/write RF register directly for dubug. */ @@ -11295,9 +11355,9 @@ VOID RTMPAPIoctlE2PROM( for (eepAddr = 0x00; eepAddr < 0x200; eepAddr += 2) { RT28xx_EEPROM_READ16(pAdapter, eepAddr, eepValue); - printk("[0x%04X]:%04X ", eepAddr , eepValue); + DBGPRINT(RT_DEBUG_OFF, ("[0x%04X]:%04X ", eepAddr, eepValue)); if ((eepAddr & 0x6) == 0x6) - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); } #else sprintf(msg, "\n"); @@ -11402,7 +11462,7 @@ VOID RTMPIoctlStatistics(RTMP_ADAPTER *pAd, RTMP_IOCTL_INPUT_STRUCT *wrq) #endif /* CONFIG_ATE */ { txCount = pAd->WlanCounters.TransmittedFragmentCount.u.LowPart; - rxCount = pAd->WlanCounters.ReceivedFragmentCount.QuadPart; + rxCount = (UINT32)pAd->WlanCounters.ReceivedFragmentCount.QuadPart; } sprintf(msg+strlen(msg), "Tx success = %ld\n", txCount); @@ -11757,7 +11817,7 @@ VOID RTMPIoctlStatistics(RTMP_ADAPTER *pAd, RTMP_IOCTL_INPUT_STRUCT *wrq) #ifdef RELEASE_EXCLUDE DBGPRINT(RT_DEBUG_INFO, ("copy to user [msg=%s]\n", msg)); #endif /* RELEASE_EXCLUDE */ - wrq->u.data.length = strlen(msg); + wrq->u.data.length = (UINT16)strlen(msg); Status = copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length); os_free_mem(NULL, msg); @@ -11848,7 +11908,8 @@ VOID RTMPIoctlQueryBaTable( IN RTMP_IOCTL_INPUT_STRUCT *wrq) { /*char *msg; */ - UCHAR TotalEntry, i, j, index; + UINT16 TotalEntry; + UCHAR i, j, index; QUERYBA_TABLE *BAT; BAT = vmalloc(sizeof(QUERYBA_TABLE)); @@ -11973,7 +12034,7 @@ INT Set_ApCli_Enable_Proc( { UINT Enable; POS_COOKIE pObj; - UCHAR ifIndex; + INT ifIndex; pObj = (POS_COOKIE) pAd->OS_Cookie; if (pObj->ioctl_if_type != INT_APCLI) @@ -11984,6 +12045,7 @@ INT Set_ApCli_Enable_Proc( pAd->ApCfg.ApCliTab[ifIndex].Enable = (Enable > 0) ? TRUE : FALSE; DBGPRINT(RT_DEBUG_TRACE, ("I/F(apcli%d) Set_ApCli_Enable_Proc::(enable = %d)\n", ifIndex, pAd->ApCfg.ApCliTab[ifIndex].Enable)); + ApCliIfDown(pAd); return TRUE; @@ -11993,7 +12055,7 @@ INT Set_ApCli_Enable_Proc( INT Set_ApCli_Ssid_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) { POS_COOKIE pObj; - UCHAR ifIndex; + INT ifIndex; BOOLEAN apcliEn; INT success = FALSE; /*UCHAR keyMaterial[40]; */ @@ -12070,7 +12132,7 @@ INT Set_ApCli_Bssid_Proc( { INT i; RTMP_STRING *value; - UCHAR ifIndex; + INT ifIndex; BOOLEAN apcliEn; POS_COOKIE pObj; @@ -12137,7 +12199,7 @@ INT Set_ApCli_AuthMode_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) if (pObj->ioctl_if_type != INT_APCLI) return FALSE; - ifIndex = pObj->ioctl_if; + ifIndex = (UCHAR)pObj->ioctl_if; wdev = &pAd->ApCfg.ApCliTab[ifIndex].wdev; if (rtstrcasecmp(arg, "WEPAUTO") == TRUE) @@ -12199,7 +12261,7 @@ INT Set_ApCli_EncrypType_Proc( if (pObj->ioctl_if_type != INT_APCLI) return FALSE; - ifIndex = pObj->ioctl_if; + ifIndex = (UCHAR)pObj->ioctl_if; pApCliEntry = &pAd->ApCfg.ApCliTab[ifIndex]; wdev = &pApCliEntry->wdev; @@ -12290,7 +12352,7 @@ INT Set_ApCli_WPAPSK_Proc( IN PRTMP_ADAPTER pAd, IN RTMP_STRING *arg) { - UCHAR ifIndex; + INT ifIndex; POS_COOKIE pObj; PAPCLI_STRUCT pApCliEntry = NULL; INT retval; @@ -12309,7 +12371,7 @@ INT Set_ApCli_WPAPSK_Proc( return FALSE; NdisMoveMemory(pApCliEntry->PSK, arg, strlen(arg)); - pApCliEntry->PSKLen = strlen(arg); + pApCliEntry->PSKLen = (UCHAR)strlen(arg); return TRUE; } @@ -12329,7 +12391,7 @@ INT Set_ApCli_Key1_Proc( { POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; PAPCLI_STRUCT pApCliEntry = NULL; - UCHAR ifIndex; + INT ifIndex; INT retVal; if (pObj->ioctl_if_type != INT_APCLI) @@ -12361,7 +12423,7 @@ INT Set_ApCli_Key2_Proc( { POS_COOKIE pObj; PAPCLI_STRUCT pApCliEntry = NULL; - UCHAR ifIndex; + INT ifIndex; INT retVal; pObj = (POS_COOKIE) pAd->OS_Cookie; @@ -12393,7 +12455,7 @@ INT Set_ApCli_Key3_Proc( { POS_COOKIE pObj; PAPCLI_STRUCT pApCliEntry = NULL; - UCHAR ifIndex; + INT ifIndex; INT retVal; pObj = (POS_COOKIE) pAd->OS_Cookie; @@ -12425,7 +12487,7 @@ INT Set_ApCli_Key4_Proc( { POS_COOKIE pObj; PAPCLI_STRUCT pApCliEntry = NULL; - UCHAR ifIndex; + INT ifIndex; INT retVal; pObj = (POS_COOKIE) pAd->OS_Cookie; @@ -12455,7 +12517,7 @@ INT Set_ApCli_TxMode_Proc( wdev = &pAd->ApCfg.ApCliTab[pObj->ioctl_if].wdev; - wdev->DesiredTransmitSetting.field.FixedTxMode = RT_CfgSetFixedTxPhyMode(arg); + wdev->DesiredTransmitSetting.field.FixedTxMode = (USHORT)RT_CfgSetFixedTxPhyMode(arg); DBGPRINT(RT_DEBUG_TRACE, ("I/F(apcli%d) Set_ApCli_TxMode_Proc = %d\n", pObj->ioctl_if, wdev->DesiredTransmitSetting.field.FixedTxMode)); @@ -12476,7 +12538,7 @@ INT Set_ApCli_TxMcs_Proc( wdev = &pAd->ApCfg.ApCliTab[pObj->ioctl_if].wdev; wdev->DesiredTransmitSetting.field.MCS = - RT_CfgSetTxMCSProc(arg, &wdev->bAutoTxRateSwitch); + (USHORT)RT_CfgSetTxMCSProc(arg, &wdev->bAutoTxRateSwitch); if (wdev->DesiredTransmitSetting.field.MCS == MCS_AUTO) { @@ -12498,7 +12560,7 @@ INT Set_ApCli_Wpa_Support( IN RTMP_STRING *arg) { POS_COOKIE pObj; - UCHAR ifIndex; + INT ifIndex; PAPCLI_STRUCT pApCliEntry = NULL; pObj = (POS_COOKIE) pAd->OS_Cookie; @@ -12530,7 +12592,7 @@ INT Set_ApCli_IEEE8021X_Proc( { ULONG ieee8021x; POS_COOKIE pObj; - UCHAR ifIndex; + INT ifIndex; PAPCLI_STRUCT pApCliEntry = NULL; pObj = (POS_COOKIE) pAd->OS_Cookie; @@ -14773,8 +14835,8 @@ INT Set_McastPhyMode( break; #endif /* DOT11_N_SUPPORT */ default: - printk("unknow Muticast PhyMode %d.\n", PhyMode); - printk("0:Disable 1:CCK, 2:OFDM, 3:HTMIX.\n"); + DBGPRINT(RT_DEBUG_OFF, ("unknown Multicast PhyMode %d.\n", PhyMode)); + DBGPRINT(RT_DEBUG_OFF, ("0:Disable 1:CCK, 2:OFDM, 3:HTMIX.\n")); break; } @@ -14788,7 +14850,7 @@ INT Set_McastMcs( UCHAR Mcs = simple_strtol(arg, 0, 10); if (Mcs > 15) - printk("Mcs must in range of 0 to 15\n"); + DBGPRINT(RT_DEBUG_OFF, ("Mcs must in range of 0 to 15\n")); switch(pAd->CommonCfg.MCastPhyMode.field.MODE) { @@ -14796,12 +14858,12 @@ INT Set_McastMcs( if ((Mcs <= 3) || (Mcs >= 8 && Mcs <= 11)) pAd->CommonCfg.MCastPhyMode.field.MCS = Mcs; else - printk("MCS must in range of 0 ~ 3 and 8 ~ 11 for CCK Mode.\n"); + DBGPRINT(RT_DEBUG_OFF, ("MCS must in range of 0 ~ 3 and 8 ~ 11 for CCK Mode.\n")); break; case MODE_OFDM: if (Mcs > 7) - printk("MCS must in range from 0 to 7 for CCK Mode.\n"); + DBGPRINT(RT_DEBUG_OFF, ("MCS must in range from 0 to 7 for CCK Mode.\n")); else pAd->CommonCfg.MCastPhyMode.field.MCS = Mcs; break; @@ -14818,8 +14880,8 @@ INT Show_McastRate( IN PRTMP_ADAPTER pAd, IN RTMP_STRING *arg) { - printk("Mcast PhyMode =%d\n", pAd->CommonCfg.MCastPhyMode.field.MODE); - printk("Mcast Mcs =%d\n", pAd->CommonCfg.MCastPhyMode.field.MCS); + DBGPRINT(RT_DEBUG_OFF, ("Mcast PhyMode =%d\n", pAd->CommonCfg.MCastPhyMode.field.MODE)); + DBGPRINT(RT_DEBUG_OFF, ("Mcast Mcs =%d\n", pAd->CommonCfg.MCastPhyMode.field.MCS)); return TRUE; } #endif /* MCAST_RATE_SPECIFIC */ @@ -14943,9 +15005,9 @@ INT Set_EntryLifeCheck_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) if (LifeCheckCnt <= 65535) pAd->ApCfg.EntryLifeCheck = LifeCheckCnt; else - printk("LifeCheckCnt must in range of 0 to 65535\n"); + DBGPRINT(RT_DEBUG_OFF, ("LifeCheckCnt must in range of 0 to 65535\n")); - printk("EntryLifeCheck Cnt = %ld.\n", pAd->ApCfg.EntryLifeCheck); + DBGPRINT(RT_DEBUG_OFF, ("EntryLifeCheck Cnt = %ld.\n", pAd->ApCfg.EntryLifeCheck)); return TRUE; } @@ -15082,9 +15144,10 @@ INT Set_CwCTest_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) INT Set_MemDebug_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) { #ifdef VENDOR_FEATURE2_SUPPORT - printk("Number of Packet Allocated = %lu\n", OS_NumOfPktAlloc); - printk("Number of Packet Freed = %lu\n", OS_NumOfPktFree); - printk("Offset of Packet Allocated/Freed = %lu\n", OS_NumOfPktAlloc - OS_NumOfPktFree); + DBGPRINT(RT_DEBUG_OFF, ("Number of Packet Allocated = %lu\n", OS_NumOfPktAlloc)); + DBGPRINT(RT_DEBUG_OFF, ("Number of Packet Freed = %lu\n", OS_NumOfPktFree)); + DBGPRINT(RT_DEBUG_OFF, ("Offset of Packet Allocated/Freed = %lu\n", + OS_NumOfPktAlloc - OS_NumOfPktFree)); #endif /* VENDOR_FEATURE2_SUPPORT */ return TRUE; } @@ -15100,14 +15163,14 @@ VOID RTMPApCliAddKey( ULONG KeyIdx; MAC_TABLE_ENTRY *pEntry; STA_TR_ENTRY *tr_entry; - INT ifIndex,BssIdx; + UCHAR ifIndex, BssIdx; PAPCLI_STRUCT pApCliEntry; struct wifi_dev *wdev; MAC_TABLE_ENTRY *pMacEntry=(MAC_TABLE_ENTRY *)NULL; DBGPRINT(RT_DEBUG_TRACE, ("RTMPApCliAddKey ------>\n")); - ifIndex=apidx; + ifIndex = (UCHAR)apidx; pApCliEntry = &pAd->ApCfg.ApCliTab[ifIndex]; wdev = &pApCliEntry->wdev; pMacEntry = &pAd->MacTab.Content[pApCliEntry->MacTabWCID]; @@ -15198,7 +15261,7 @@ VOID RTMPApCliAddKey( /* Update group key information to ASIC Shared Key Table */ AsicAddSharedKeyEntry(pAd, BssIdx, - wdev->DefaultKeyId, + (UCHAR)wdev->DefaultKeyId, &pApCliEntry->SharedKey[wdev->DefaultKeyId]); @@ -15259,11 +15322,11 @@ VOID RTMPApCliAddKey( /* update WCID attribute table and IVEIV table for this entry */ RTMPSetWcidSecurityInfo(pAd, - BssIdx, - KeyIdx, - pEntry->PairwiseKey.CipherAlg, - pEntry->wcid, - PAIRWISEKEYTABLE); + BssIdx, + (UINT8)KeyIdx, + pEntry->PairwiseKey.CipherAlg, + pEntry->wcid, + PAIRWISEKEYTABLE); } } else @@ -15285,12 +15348,14 @@ VOID RTMPApCliAddKey( Key = pApCliEntry->SharedKey[KeyIdx].Key; /* Set Group key material to Asic */ - AsicAddSharedKeyEntry(pAd, BssIdx, KeyIdx, &pApCliEntry->SharedKey[KeyIdx]); + AsicAddSharedKeyEntry(pAd, BssIdx, (UCHAR)KeyIdx + , &pApCliEntry->SharedKey[KeyIdx]); /* STA doesn't need to set WCID attribute for group key */ /* Update WCID attribute table and IVEIV table for this group key table */ - RTMPAddWcidAttributeEntry(pAd, BssIdx, KeyIdx, CipherAlg, NULL); + RTMPAddWcidAttributeEntry(pAd, BssIdx + , (UCHAR)KeyIdx, CipherAlg, NULL); } } @@ -15322,7 +15387,7 @@ Note: */ INT Set_PowerSaveLifeTime_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) { - pAd->MacTab.MsduLifeTime = simple_strtol(arg, 0, 10); + pAd->MacTab.MsduLifeTime = (USHORT)simple_strtol(arg, 0, 10); DBGPRINT(RT_DEBUG_TRACE, ("Set new life time = %d\n", pAd->MacTab.MsduLifeTime)); return TRUE; } @@ -15348,7 +15413,7 @@ Note: INT Show_MbssInfo_Display_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) { UINT32 IdBss; - UCHAR PhyMode; + UINT PhyMode; CHAR *mod_str = NULL; DBGPRINT(RT_DEBUG_ERROR, ("\n\tBSS Idx\t\tPhy Mode\n")); @@ -15485,7 +15550,7 @@ VOID RtmpHostapdSecuritySet( //TODO: Tim service establish. INT Set_AP_TimEnable_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) { - UCHAR interval; + LONG interval; POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; UCHAR APIndex = pObj->ioctl_if; BSS_STRUCT *pMbss; @@ -15571,8 +15636,9 @@ INT Set_AP_DumpTime_Proc( int apidx = 0, i = 0; BSS_STRUCT *pMbss; - printk("\n\t%-10s\t%-10s\n", "PreTBTTTime", "TBTTTime"); - printk("Idx[%d]:%-10lu\t%-10lu\n", i, pAd->HandlePreInterruptTime, pAd->HandleInterruptTime); + DBGPRINT(RT_DEBUG_OFF, ("\n\t%-10s\t%-10s\n", "PreTBTTTime", "TBTTTime")); + DBGPRINT(RT_DEBUG_OFF, ("Idx[%d]:%-10lu\t%-10lu\n", i, pAd->HandlePreInterruptTime, + pAd->HandleInterruptTime)); for (apidx = 0; apidx < pAd->ApCfg.BssidNum; apidx++) { pMbss = &pAd->ApCfg.MBSSID[apidx]; @@ -15580,10 +15646,12 @@ INT Set_AP_DumpTime_Proc( if(!BeaconTransmitRequired(pAd, apidx, pMbss)) continue; - printk("\n%s:%d\tBcn_State:%d\t%-10s: %d\n", "Apidx", apidx, pMbss->bcn_buf.bcn_state, "recover", pMbss->bcn_recovery_num); - printk("\t%-10s\t%-10s\t%-10s\t%-10s\n", "WriteBcnRing", "BcnDmaDone", "TXS_TSF", "TXS_SN"); - for (i = 0; i < MAX_TIME_RECORD; i++) { - printk("Idx[%d]:\t%-10lu\t%-10lu\t%-10lu\t%-10lu\n", i, pMbss->WriteBcnDoneTime[i], pMbss->BcnDmaDoneTime[i], pMbss->TXS_TSF[i], pMbss->TXS_SN[i]); + DBGPRINT(RT_DEBUG_OFF, ("\n%s:%d\tBcn_State:%d\t%-10s: %d\n", "Apidx" + , apidx, pMbss->bcn_buf.bcn_state, "recover", pMbss->bcn_recovery_num)); + DBGPRINT(RT_DEBUG_OFF, ("\t%-10s\t%-10s\t%-10s\t%-10s\n", "WriteBcnRing", "BcnDmaDone", "TXS_TSF", "TXS_SN")); + for (i = 0; i < MAX_TIME_RECORD; i++) { + DBGPRINT(RT_DEBUG_OFF, ("Idx[%d]:\t%-10lu\t%-10lu\t%-10lu\t%-10lu\n" + , i, pMbss->WriteBcnDoneTime[i], pMbss->BcnDmaDoneTime[i], pMbss->TXS_TSF[i], pMbss->TXS_SN[i])); } } @@ -15599,7 +15667,7 @@ INT Set_BcnStateCtrl_Proc( UCHAR apIndex = pObj->ioctl_if; BSS_STRUCT *pMbss = NULL; - bcn_state = simple_strtol(arg, 0, 10); + bcn_state = (UCHAR)simple_strtol(arg, 0, 10); if (pAd->chipCap.hif_type != HIF_MT) { DBGPRINT(RT_DEBUG_ERROR, ("%s: chipCap is not HIF_MT\n", __func__)); @@ -15620,8 +15688,9 @@ INT Set_BcnStateCtrl_Proc( return FALSE; } - if (pMbss->bcn_buf.bcn_state != BCN_TX_IDLE) { - printk("MBSSID[%d], bcn_buf.bcn_state = %d, will change to %d\n", apIndex, pMbss->bcn_buf.bcn_state, bcn_state); + if (pMbss->bcn_buf.bcn_state != BCN_TX_IDLE) { + DBGPRINT(RT_DEBUG_OFF, ("MBSSID[%d], bcn_buf.bcn_state = %d, will change to %d\n" + , apIndex, pMbss->bcn_buf.bcn_state, bcn_state)); RTMP_SEM_LOCK(&pAd->BcnRingLock); pMbss->bcn_buf.bcn_state = bcn_state; RTMP_SEM_UNLOCK(&pAd->BcnRingLock); @@ -15635,7 +15704,7 @@ INT setApTmrEnableProc( IN PRTMP_ADAPTER pAd, IN RTMP_STRING *arg) { - UCHAR enable; + LONG enable; POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; UCHAR apIndex = pObj->ioctl_if; BSS_STRUCT *pMbss = NULL; @@ -15738,10 +15807,24 @@ INT RTMP_AP_IoctlHandle( switch(cmd) { case CMD_RTPRIV_IOCTL_SET: + if (!wrq) { + DBGPRINT(RT_DEBUG_WARN, + ("null wrq in CMD_RTPRIV_IOCTL_SET\n")); + Status = -EINVAL; + break; + } + Status = RTMPAPPrivIoctlSet(pAd, wrq); break; case CMD_RT_PRIV_IOCTL: + if (!wrq) { + DBGPRINT(RT_DEBUG_WARN, + ("null wrq in CMD_RT_PRIV_IOCTL\n")); + Status = -EINVAL; + break; + } + if (subcmd & OID_GET_SET_TOGGLE) Status = RTMPAPSetInformation(pAd, wrq, (INT)subcmd); else @@ -15769,6 +15852,13 @@ INT RTMP_AP_IoctlHandle( break; case CMD_RTPRIV_IOCTL_SHOW: + if (!wrq) { + DBGPRINT(RT_DEBUG_WARN, + ("null wrq in CMD_RTPRIV_IOCTL_SHOW\n")); + Status = -EINVAL; + break; + } + Status = RTMPAPPrivIoctlShow(pAd, wrq); break; @@ -15779,16 +15869,37 @@ INT RTMP_AP_IoctlHandle( #endif/*WSC_AP_SUPPORT*/ case CMD_RTPRIV_IOCTL_GET_MAC_TABLE: + if (!wrq) { + DBGPRINT(RT_DEBUG_WARN, + ("null wrq in CMD_RTPRIV_IOCTL_GET_MAC_TABLE\n")); + Status = -EINVAL; + break; + } + RTMPIoctlGetMacTable(pAd,wrq); - break; + break; #if defined (AP_SCAN_SUPPORT) || defined (CONFIG_STA_SUPPORT) case CMD_RTPRIV_IOCTL_GSITESURVEY: + if (!wrq) { + DBGPRINT(RT_DEBUG_WARN, + ("null wrq in CMD_RTPRIV_IOCTL_GSITESURVEY\n")); + Status = -EINVAL; + break; + } + RTMPIoctlGetSiteSurvey(pAd,wrq); break; #endif /* AP_SCAN_SUPPORT */ case CMD_RTPRIV_IOCTL_STATISTICS: + if (!wrq) { + DBGPRINT(RT_DEBUG_WARN, + ("null wrq in CMD_RTPRIV_IOCTL_STATISTICS\n")); + Status = -EINVAL; + break; + } + RTMPIoctlStatistics(pAd, wrq); break; @@ -15800,25 +15911,60 @@ INT RTMP_AP_IoctlHandle( #ifdef DOT11_N_SUPPORT case CMD_RTPRIV_IOCTL_QUERY_BATABLE: - RTMPIoctlQueryBaTable(pAd, wrq); - break; + if (!wrq) { + DBGPRINT(RT_DEBUG_WARN, + ("null wrq in CMD_RTPRIV_IOCTL_QUERY_BATABLE\n")); + Status = -EINVAL; + break; + } + + RTMPIoctlQueryBaTable(pAd, wrq); + break; #endif /* DOT11_N_SUPPORT */ case CMD_RTPRIV_IOCTL_E2P: + if (!wrq) { + DBGPRINT(RT_DEBUG_WARN, + ("null wrq in CMD_RTPRIV_IOCTL_E2P\n")); + Status = -EINVAL; + break; + } + RTMPAPIoctlE2PROM(pAd, wrq); break; #ifdef DBG case CMD_RTPRIV_IOCTL_BBP: + if (!wrq) { + DBGPRINT(RT_DEBUG_WARN, + ("null wrq in CMD_RTPRIV_IOCTL_BBP\n")); + Status = -EINVAL; + break; + } + RTMPAPIoctlBBP(pAd, wrq); break; case CMD_RTPRIV_IOCTL_MAC: + if (!wrq) { + DBGPRINT(RT_DEBUG_WARN, + ("null wrq in CMD_RTPRIV_IOCTL_MAC\n")); + Status = -EINVAL; + break; + } + RTMPIoctlMAC(pAd, wrq); break; #ifdef RTMP_RF_RW_SUPPORT case CMD_RTPRIV_IOCTL_RF: + if (!wrq) { + DBGPRINT(RT_DEBUG_WARN, + ("null wrq in CMD_RTPRIV_IOCTL_RF\n")); + Status = -EINVAL; + break; + } + RTMPAPIoctlRF(pAd, wrq); break; #endif /* RTMP_RF_RW_SUPPORT */ @@ -15833,10 +15979,24 @@ INT RTMP_AP_IoctlHandle( #endif/* INF_AR9 */ case CMD_RTPRIV_IOCTL_GET_MAC_TABLE_STRUCT: + if (!wrq) { + DBGPRINT(RT_DEBUG_WARN, + ("null wrq in CMD_RTPRIV_IOCTL_GET_MAC_TABLE_STRUCT\n")); + Status = -EINVAL; + break; + } + RTMPIoctlGetMacTableStaInfo(pAd, wrq); break; case CMD_RTPRIV_IOCTL_AP_SIOCGIFHWADDR: + if (!wrq) { + DBGPRINT(RT_DEBUG_WARN, + ("null wrq in CMD_RTPRIV_IOCTL_AP_SIOCGIFHWADDR\n")); + Status = -EINVAL; + break; + } + if (pObj->ioctl_if < MAX_MBSSID_NUM(pAd)) NdisCopyMemory((RTMP_STRING *) wrq->u.name, (RTMP_STRING *) pAd->ApCfg.MBSSID[pObj->ioctl_if].wdev.bssid, 6); break; @@ -16042,9 +16202,11 @@ INT RTMP_AP_IoctlHandle( #endif /* WDS_SUPPORT */ HtPhyMode = pAd->ApCfg.MBSSID[pObj->ioctl_if].wdev.HTPhyMode; - RtmpDrvMaxRateGet(pAd, HtPhyMode.field.MODE, HtPhyMode.field.ShortGI, - HtPhyMode.field.BW, HtPhyMode.field.MCS, - (UINT32 *)&pRate->BitRate); + RtmpDrvMaxRateGet(pAd, (UINT8)HtPhyMode.field.MODE + , (UINT8)HtPhyMode.field.ShortGI + , (UINT8)HtPhyMode.field.BW + , (UINT8)HtPhyMode.field.MCS + , (UINT32 *)&pRate->BitRate); } break; @@ -16725,25 +16887,25 @@ INT Set_DumpBBP_Proc( for (i = 0; i < pAd->chipCap.MaxNumOfBbpId; i++) { RTMP_BBP_IO_READ8_BY_REG_ID(pAd, i, &BBPValue); - printk("%03d = %02X\n", i, BBPValue); + DBGPRINT(RT_DEBUG_OFF, ("%03d = %02X\n", i, BBPValue)); } for (i = 0; i < pAd->chipCap.MaxNumOfBbpId; i++) { RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R158, i); - printk("%03d = %02X\n", BBP_R158, i); + DBGPRINT(RT_DEBUG_OFF, ("%03d = %02X\n", BBP_R158, i)); RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R159, &BBPValue); - printk("%03d = %02X\n", BBP_R159, BBPValue); + DBGPRINT(RT_DEBUG_OFF, ("%03d = %02X\n", BBP_R159, BBPValue)); } for (i = 0; i < pAd->chipCap.MaxNumOfBbpId; i++) { RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R195, i); - printk("%03d = %02X\n", BBP_R195, i); + DBGPRINT(RT_DEBUG_OFF, ("%03d = %02X\n", BBP_R195, i)); RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R196, &BBPValue); - printk("%03d = %02X\n", BBP_R196, BBPValue); + DBGPRINT(RT_DEBUG_OFF, ("%03d = %02X\n", BBP_R196, BBPValue)); } return TRUE; @@ -17083,7 +17245,8 @@ INT Send_ANQP_Rsp( if (MAC_ADDR_EQUAL(GASPeerEntry->PeerMACAddr, PeerMACAddr)) { IsFound = TRUE; - printk("!!GAS RSP DialogToken!! = %x\n", GASPeerEntry->DialogToken); + DBGPRINT(RT_DEBUG_OFF, ("!!GAS RSP DialogToken!! = %x\n", + GASPeerEntry->DialogToken)); break; } } @@ -17135,7 +17298,7 @@ INT Send_ANQP_Rsp( if (MAC_ADDR_EQUAL(GASPeerEntry->PeerMACAddr, PeerMACAddr)) { IsFound = TRUE; - printk("GAS RSP DialogToken = %x\n", GASPeerEntry->DialogToken); + DBGPRINT(RT_DEBUG_OFF, ("GAS RSP DialogToken = %x\n", GASPeerEntry->DialogToken)); Event->u.GAS_RSP_DATA.DialogToken = GASPeerEntry->DialogToken; Len += 1; @@ -17403,7 +17566,7 @@ INT Send_WNM_Notify_Req( } RTMP_SEM_EVENT_UP(&pWNMCtrl->WNMNotifyPeerListLock); - printk("*%d\n", IsFound); + DBGPRINT(RT_DEBUG_OFF, ("*%d\n", IsFound)); if (!IsFound) { os_alloc_mem(NULL, (UCHAR **)&WNMNotifyPeerEntry, sizeof(*WNMNotifyPeerEntry)); diff --git a/ap/ap_connect.c b/ap/ap_connect.c index 4cead16..16491fa 100755 --- a/ap/ap_connect.c +++ b/ap/ap_connect.c @@ -127,7 +127,7 @@ VOID write_tmac_info_beacon(RTMP_ADAPTER *pAd, INT apidx, UCHAR *tmac_buf, HTTRA mac_info.TxSPriv = apidx; #endif /* MT_MAC */ mac_info.hdr_len = 24; - mac_info.bss_idx = apidx; + mac_info.bss_idx = (UCHAR)apidx; mac_info.SpeEn = 1; mac_info.Preamble = LONG_PREAMBLE; NdisZeroMemory(tmac_buf, sizeof(TMAC_TXD_L)); @@ -1733,7 +1733,7 @@ VOID APUpdateBeaconFrame(RTMP_ADAPTER *pAd, INT apidx) static UCHAR GetBcnNum(RTMP_ADAPTER *pAd) { int i; - int NumBcn; + UCHAR NumBcn; BCN_BUF_STRUC *bcn_info; NumBcn = 0; diff --git a/ap/ap_data.c b/ap/ap_data.c index b788ba3..f3ddfef 100755 --- a/ap/ap_data.c +++ b/ap/ap_data.c @@ -45,6 +45,13 @@ INT ApAllowToSendPacket( ASSERT(wdev->func_idx < pAd->ApCfg.BssidNum); ASSERT (wdev->wdev_type == WDEV_TYPE_AP); + if ((wdev->func_idx < 0) || (wdev->func_idx > pAd->ApCfg.BssidNum) || + (wdev->func_idx >= ARRAY_SIZE(pAd->ApCfg.MBSSID))) { + DBGPRINT(RT_DEBUG_ERROR, ("%s(): wrong func_idx=%d\n", + __func__, wdev->func_idx)); + return FALSE; + } + if (wdev != &pAd->ApCfg.MBSSID[wdev->func_idx].wdev) { DBGPRINT(RT_DEBUG_ERROR, ("%s(): wdev(0x%p) not equal MBSS(0x%p), func_idx=%d\n", __FUNCTION__, wdev, &pAd->ApCfg.MBSSID[wdev->func_idx].wdev, wdev->func_idx)); @@ -287,7 +294,7 @@ INT APSendPacket(RTMP_ADAPTER *pAd, PNDIS_PACKET pPacket) if (pkt_len < frag_sz) NumberOfFrag = 1; else - NumberOfFrag = (pkt_len / frag_sz) + 1; + NumberOfFrag = (UCHAR)((pkt_len / frag_sz) + 1); /* Save fragment number to Ndis packet reserved field */ RTMP_SET_PACKET_FRAGMENTS(pPacket, NumberOfFrag); @@ -700,6 +707,13 @@ static inline VOID APFindCipherAlgorithm(RTMP_ADAPTER *pAd, TX_BLK *pTxBlk) ASSERT(pTxBlk->wdev_idx < WDEV_NUM_MAX); wdev = pAd->wdev_list[pTxBlk->wdev_idx]; ASSERT(wdev->func_idx < pAd->ApCfg.BssidNum); + if ((wdev->func_idx < 0) || (wdev->func_idx >= pAd->ApCfg.BssidNum)) { + DBGPRINT(RT_DEBUG_ERROR, ("%s wrong wdev->func_idx %d BssidNum %u\n", + __func__, wdev->func_idx, + pAd->ApCfg.BssidNum)); + return; + } + #ifdef WAPI_SUPPORT pMbss = &pAd->ApCfg.MBSSID[wdev->func_idx]; #endif /* WAPI_SUPPORT */ @@ -1213,7 +1227,7 @@ static inline VOID APBuildCommon802_11Header(RTMP_ADAPTER *pAd, TX_BLK *pTxBlk) static inline PUCHAR AP_Build_ARalink_Frame_Header(RTMP_ADAPTER *pAd, TX_BLK *pTxBlk) { - UCHAR *pHeaderBufPtr; + UCHAR *pHeaderBufPtr, *pTmpHeaderBufPtr; HEADER_802_11 *wifi_hdr; PNDIS_PACKET pNextPacket; UINT32 nextBufLen; @@ -1258,9 +1272,9 @@ static inline PUCHAR AP_Build_ARalink_Frame_Header(RTMP_ADAPTER *pAd, TX_BLK *pT } /* padding at front of LLC header. LLC header should at 4-bytes aligment. */ - pTxBlk->HdrPadLen = (ULONG)pHeaderBufPtr; + pTmpHeaderBufPtr = pHeaderBufPtr; pHeaderBufPtr = (UCHAR *)ROUND_UP(pHeaderBufPtr, 4); - pTxBlk->HdrPadLen = (ULONG)(pHeaderBufPtr - pTxBlk->HdrPadLen); + pTxBlk->HdrPadLen = (UCHAR)(pHeaderBufPtr - pTmpHeaderBufPtr); /* @@ -1383,7 +1397,7 @@ static inline BOOLEAN BuildHtcField( static inline PUCHAR AP_Build_AMSDU_Frame_Header(RTMP_ADAPTER *pAd, TX_BLK *pTxBlk) { - UCHAR *buf_ptr; + UCHAR *buf_ptr, *tmp_buf_ptr; HEADER_802_11 *wifi_hdr; APFindCipherAlgorithm(pAd, pTxBlk); @@ -1524,9 +1538,9 @@ static inline PUCHAR AP_Build_AMSDU_Frame_Header(RTMP_ADAPTER *pAd, TX_BLK *pTxB LLC header should locate at 4-octets aligment @@@ MpduHeaderLen excluding padding @@@ */ - pTxBlk->HdrPadLen = (ULONG)buf_ptr; + tmp_buf_ptr = buf_ptr; buf_ptr = (UCHAR *)(ROUND_UP(buf_ptr, 4)); - pTxBlk->HdrPadLen = (ULONG)(buf_ptr - pTxBlk->HdrPadLen); + pTxBlk->HdrPadLen = (UCHAR)(buf_ptr - tmp_buf_ptr); return buf_ptr; @@ -1536,7 +1550,7 @@ static inline PUCHAR AP_Build_AMSDU_Frame_Header(RTMP_ADAPTER *pAd, TX_BLK *pTxB VOID AP_AMPDU_Frame_Tx(RTMP_ADAPTER *pAd, TX_BLK *pTxBlk) { HEADER_802_11 *wifi_hdr; - UCHAR *pHeaderBufPtr, *src_ptr; + UCHAR *pHeaderBufPtr, *src_ptr, *pTmpHeaderBufPtr; USHORT freeCnt = 1; BOOLEAN bVLANPkt; MAC_TABLE_ENTRY *pMacEntry; @@ -1841,9 +1855,9 @@ hex_dump("AMPDU HeaderBufPtr", pHeaderBufPtr, pTxBlk->wifi_hdr_len); @@@ MpduHeaderLen excluding padding @@@ */ - pTxBlk->HdrPadLen = (ULONG)pHeaderBufPtr; + pTmpHeaderBufPtr = pHeaderBufPtr; pHeaderBufPtr = (UCHAR *)ROUND_UP(pHeaderBufPtr, 4); - pTxBlk->HdrPadLen = (ULONG)(pHeaderBufPtr - pTxBlk->HdrPadLen); + pTxBlk->HdrPadLen = (UCHAR)(pHeaderBufPtr - pTmpHeaderBufPtr); #ifdef VENDOR_FEATURE1_SUPPORT tr_entry->HdrPadLen = pTxBlk->HdrPadLen; @@ -2316,7 +2330,8 @@ dump_tmac_info(pAd, &pTxBlk->HeaderBuf[pTxBlk->hw_rsv_len]); // TODO: shiang-usw, check this, original code is use pTxBlk->HeaderBuf[0] pHeaderBufPtr = &pTxBlk->HeaderBuf[TXINFO_SIZE]; #endif /* defined(MT7603) || defined(MT7628) */ - padding = ROUND_UP(AMSDU_SUBHEAD_LEN + subFramePayloadLen, 4) - (AMSDU_SUBHEAD_LEN + subFramePayloadLen); + padding = (UCHAR)(ROUND_UP(AMSDU_SUBHEAD_LEN + subFramePayloadLen, 4) + - (AMSDU_SUBHEAD_LEN + subFramePayloadLen)); NdisZeroMemory(pHeaderBufPtr, padding + AMSDU_SUBHEAD_LEN); pHeaderBufPtr += padding; pTxBlk->MpduHeaderLen = padding; @@ -2327,7 +2342,7 @@ dump_tmac_info(pAd, &pTxBlk->HeaderBuf[pTxBlk->hw_rsv_len]); DA(6)+SA(6)+Length(2) + LLC/SNAP Encap */ subFrameHeader = pHeaderBufPtr; - subFramePayloadLen = pTxBlk->SrcBufLen; + subFramePayloadLen = (USHORT)pTxBlk->SrcBufLen; NdisMoveMemory(subFrameHeader, pTxBlk->pSrcBufHeader, 12); @@ -2373,7 +2388,7 @@ dump_tmac_info(pAd, &pTxBlk->HeaderBuf[pTxBlk->hw_rsv_len]); /* Insert LLC-SNAP encapsulation - 8 octets */ EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(pTxBlk->pSrcBufData - 2, pTxBlk->pExtraLlcSnapEncap); - subFramePayloadLen = pTxBlk->SrcBufLen; + subFramePayloadLen = (USHORT)pTxBlk->SrcBufLen; if (pTxBlk->pExtraLlcSnapEncap) { NdisMoveMemory(pHeaderBufPtr, pTxBlk->pExtraLlcSnapEncap, 6); @@ -2386,7 +2401,7 @@ dump_tmac_info(pAd, &pTxBlk->HeaderBuf[pTxBlk->hw_rsv_len]); } /* update subFrame Length field */ - subFrameHeader[12] = (subFramePayloadLen & 0xFF00) >> 8; + subFrameHeader[12] = (UCHAR)((subFramePayloadLen & 0xFF00) >> 8); subFrameHeader[13] = subFramePayloadLen & 0xFF; #if defined(MT7603) || defined(MT7628) @@ -2399,9 +2414,10 @@ dump_tmac_info(pAd, &pTxBlk->HeaderBuf[pTxBlk->hw_rsv_len]); #endif /* MT7603 */ if (frameNum == 0) - FirstTx = HAL_WriteMultiTxResource(pAd, pTxBlk, frameNum, &freeCnt); + FirstTx = HAL_WriteMultiTxResource(pAd, pTxBlk, (UCHAR)frameNum, &freeCnt); else - /*LastTxIdx = */HAL_WriteMultiTxResource(pAd, pTxBlk, frameNum, &freeCnt); + /*LastTxIdx = */HAL_WriteMultiTxResource(pAd, pTxBlk + , (UCHAR)frameNum, &freeCnt); #ifdef DBG_CTRL_SUPPORT #ifdef INCLUDE_DEBUG_QUEUE @@ -2486,7 +2502,7 @@ dump_tmac_info(pAd, &pTxBlk->HeaderBuf[pTxBlk->hw_rsv_len]); VOID AP_Legacy_Frame_Tx(RTMP_ADAPTER *pAd, TX_BLK *pTxBlk) { HEADER_802_11 *wifi_hdr; - UCHAR *pHeaderBufPtr; + UCHAR *pHeaderBufPtr, *pTmpHeaderBufPtr; USHORT freeCnt = 1; BOOLEAN bVLANPkt; QUEUE_ENTRY *pQEntry; @@ -2703,9 +2719,9 @@ DBGPRINT(RT_DEBUG_TRACE, ("<--%s(%d): ##########Fail#########\n", __FUNCTION__, } /* The remaining content of MPDU header should locate at 4-octets aligment */ - pTxBlk->HdrPadLen = (ULONG)pHeaderBufPtr; + pTmpHeaderBufPtr = pHeaderBufPtr; pHeaderBufPtr = (UCHAR *)ROUND_UP(pHeaderBufPtr, 4); - pTxBlk->HdrPadLen = (ULONG)(pHeaderBufPtr - pTxBlk->HdrPadLen); + pTxBlk->HdrPadLen = (UCHAR)(pHeaderBufPtr - pTmpHeaderBufPtr); pTxBlk->MpduHeaderLen = pTxBlk->wifi_hdr_len; #ifdef SOFT_ENCRYPT @@ -3021,7 +3037,7 @@ VOID AP_Legacy_Frame_Tx_Hdr_Trns( VOID AP_Fragment_Frame_Tx(RTMP_ADAPTER *pAd, TX_BLK *pTxBlk) { HEADER_802_11 *wifi_hdr; - UCHAR *pHeaderBufPtr; + UCHAR *pHeaderBufPtr, *pTmpHeaderBufPtr; USHORT freeCnt = 1; BOOLEAN bVLANPkt; QUEUE_ENTRY *pQEntry; @@ -3125,9 +3141,9 @@ DBGPRINT(RT_DEBUG_TRACE, ("%s(): Before Frag, pTxBlk->MpduHeaderLen=%d, wifi_hdr } /* The remaining content of MPDU header should locate at 4-octets aligment */ - pTxBlk->HdrPadLen = (ULONG)pHeaderBufPtr; + pTmpHeaderBufPtr = pHeaderBufPtr; pHeaderBufPtr = (UCHAR *)ROUND_UP(pHeaderBufPtr, 4); - pTxBlk->HdrPadLen = (ULONG)(pHeaderBufPtr - pTxBlk->HdrPadLen); + pTxBlk->HdrPadLen = (UCHAR)(pHeaderBufPtr - pTmpHeaderBufPtr); pTxBlk->MpduHeaderLen = pTxBlk->wifi_hdr_len; #ifdef SOFT_ENCRYPT @@ -3278,9 +3294,9 @@ DBGPRINT(RT_DEBUG_TRACE, ("%s(): Before Frag, pTxBlk->MpduHeaderLen=%d, wifi_hdr pTransmit = pTxBlk->pTransmit; /* Decide the TX rate */ if (pTransmit->field.MODE == MODE_CCK) - pTxBlk->TxRate = pTransmit->field.MCS; + pTxBlk->TxRate = (UCHAR)pTransmit->field.MCS; else if (pTransmit->field.MODE == MODE_OFDM) - pTxBlk->TxRate = pTransmit->field.MCS + RATE_FIRST_OFDM_RATE; + pTxBlk->TxRate = (UCHAR)(pTransmit->field.MCS + RATE_FIRST_OFDM_RATE); else pTxBlk->TxRate = RATE_6_5; @@ -3572,9 +3588,10 @@ dump_tmac_info(pAd, &pTxBlk->HeaderBuf[pTxBlk->hw_rsv_len]); #endif /* defined(MT7603) || defined(MT7628) */ if (frameNum == 0) - FirstTx = HAL_WriteMultiTxResource(pAd, pTxBlk, frameNum, &freeCnt); + FirstTx = HAL_WriteMultiTxResource(pAd, pTxBlk, (UCHAR)frameNum, &freeCnt); else - LastTxIdx = HAL_WriteMultiTxResource(pAd, pTxBlk, frameNum, &freeCnt); + LastTxIdx = HAL_WriteMultiTxResource(pAd, pTxBlk + , (UCHAR)frameNum, &freeCnt); #ifdef SMART_ANTENNA if (pTxBlk->pMacEntry) @@ -3776,7 +3793,8 @@ NDIS_STATUS APHardTransmit(RTMP_ADAPTER *pAd, TX_BLK *pTxBlk) && (!RTMP_CFG80211_VIF_P2P_GO_ON(pAd)) && (!RTMP_CFG80211_VIF_P2P_CLI_ON(pAd))) { DBGPRINT(RT_DEBUG_TRACE, ("%s(%d) device is not in AP MODE,and the p2p GO interface is down, release the packet!\n", __FUNCTION__, __LINE__)); - RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); + if (pPacket) + RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); return NDIS_STATUS_FAILURE; } @@ -4369,7 +4387,7 @@ INT ap_rx_ps_handle(RTMP_ADAPTER *pAd, RX_BLK *pRxBlk) #endif /* UAPSD_SUPPORT */ /* 1: PWR_SAVE, 0: PWR_ACTIVE */ - OldPwrMgmt = RtmpPsIndicate(pAd, pHeader->Addr2, pEntry->wcid, pHeader->FC.PwrMgmt); + OldPwrMgmt = RtmpPsIndicate(pAd, pHeader->Addr2, pEntry->wcid, (UCHAR)pHeader->FC.PwrMgmt); if(OldPwrMgmt > 2) DBGPRINT(RT_DEBUG_TRACE, ("OldPwrMgmt is %d\n", OldPwrMgmt)); @@ -4430,9 +4448,8 @@ INT ap_rx_foward_handle(RTMP_ADAPTER *pAd, struct wifi_dev *wdev, PNDIS_PACKET p BSS_STRUCT *pMbss; struct wifi_dev *dst_wdev = NULL; - if ((wdev->func_idx >= MAX_MBSSID_NUM(pAd)) || - (wdev->func_idx >= HW_BEACON_MAX_NUM)) - { + if ((wdev->func_idx < 0) || (wdev->func_idx >= MAX_MBSSID_NUM(pAd)) || + (wdev->func_idx >= HW_BEACON_MAX_NUM)) { DBGPRINT(RT_DEBUG_ERROR, ("%s():Invalid func_idx(%d), type(%d)!\n", __FUNCTION__, wdev->func_idx, wdev->wdev_type)); return FALSE; diff --git a/ap/ap_mbss.c b/ap/ap_mbss.c index cd1bc2b..cff0931 100755 --- a/ap/ap_mbss.c +++ b/ap/ap_mbss.c @@ -84,6 +84,9 @@ VOID MBSS_Init(RTMP_ADAPTER *pAd, RTMP_OS_NETDEV_OP_HOOK *pNetDevOps) if (MaxNumBss > MAX_MBSSID_NUM(pAd)) MaxNumBss = MAX_MBSSID_NUM(pAd); + if (MaxNumBss > ARRAY_SIZE(pAd->ApCfg.MBSSID)) + MaxNumBss = ARRAY_SIZE(pAd->ApCfg.MBSSID); + /* first IdBss must not be 0 (BSS0), must be 1 (BSS1) */ for(IdBss=FIRST_MBSSID; IdBss<MAX_MBSSID_NUM(pAd); IdBss++) pAd->ApCfg.MBSSID[IdBss].wdev.if_dev = NULL; @@ -103,13 +106,20 @@ VOID MBSS_Init(RTMP_ADAPTER *pAd, RTMP_OS_NETDEV_OP_HOOK *pNetDevOps) BSS_STRUCT *pMbss; dev_name = get_dev_name_prefix(pAd, INT_MBSSID); + if (!dev_name) { + DBGPRINT(RT_DEBUG_ERROR, + ("%s(): Get dev name prefix fail!\n", + __func__)); + break; + } + pDevNew = RtmpOSNetDevCreate(MC_RowID, &IoctlIF, INT_MBSSID, IdBss, sizeof(struct mt_dev_priv), dev_name); #ifdef HOSTAPD_SUPPORT pAd->IoctlIF = IoctlIF; #endif /* HOSTAPD_SUPPORT */ if (pDevNew == NULL) { - pAd->ApCfg.BssidNum = IdBss; /* re-assign new MBSS number */ + pAd->ApCfg.BssidNum = (UCHAR)IdBss; /* re-assign new MBSS number */ break; } else @@ -121,7 +131,7 @@ VOID MBSS_Init(RTMP_ADAPTER *pAd, RTMP_OS_NETDEV_OP_HOOK *pNetDevOps) wdev = &pAd->ApCfg.MBSSID[IdBss].wdev; wdev->wdev_type = WDEV_TYPE_AP; wdev->func_dev = &pAd->ApCfg.MBSSID[IdBss]; - wdev->func_idx = IdBss; + wdev->func_idx = (CHAR)IdBss; wdev->sys_handle = (void *)pAd; wdev->if_dev = pDevNew; if (rtmp_wdev_idx_reg(pAd, wdev) < 0) { @@ -262,7 +272,7 @@ INT32 mbss_cr_enable(PNET_DEV pDev) pAd = RTMP_OS_NETDEV_GET_PRIV(pDev); BssId = RT28xx_MBSS_IdxGet(pAd, pDev); - printk("##### %s, BssId = %d\n", __func__, BssId); + DBGPRINT(RT_DEBUG_OFF, ("##### %s, BssId = %d\n", __func__, BssId)); if (BssId < 0) return -1; @@ -317,6 +327,10 @@ INT mbss_cr_disable(PNET_DEV pDev) for (loop = 1; loop < pAd->ApCfg.BssidNum; loop++) { if (loop == BssId) continue;//skip itself. + + if (loop >= ARRAY_SIZE(pAd->ApCfg.MBSSID)) + break; + if (pAd->ApCfg.MBSSID[loop].bcn_buf.bBcnSntReq == TRUE) any_mbss_enable = TRUE; } diff --git a/ap/ap_mlme.c b/ap/ap_mlme.c index 360688e..be3f431 100755 --- a/ap/ap_mlme.c +++ b/ap/ap_mlme.c @@ -89,7 +89,8 @@ VOID APDetectOverlappingExec( if ((pAd->CommonCfg.Channel <=14) && (pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth == BW_40)) { pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth = 1; - pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset = pAd->CommonCfg.RegTransmitSetting.field.EXTCHA; + pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset = + (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.EXTCHA; } } else @@ -229,7 +230,7 @@ VOID APMlmePeriodicExec( ctrl_type = ASIC_MAC_TXRX; break; } - AsicSetMacTxRx(pAd, ctrl_type, enable); + AsicSetMacTxRx(pAd, ctrl_type, (BOOLEAN)enable); } #endif /* CONFIG_FPGA_MODE */ diff --git a/ap/ap_nps.c b/ap/ap_nps.c index d90a24a..526a9cb 100755 --- a/ap/ap_nps.c +++ b/ap/ap_nps.c @@ -141,7 +141,7 @@ VOID write_tmac_info_tim(RTMP_ADAPTER *pAd, INT apidx, UCHAR *tmac_buf, HTTRANSM mac_info.Txopmode = IFS_HTTXOP; mac_info.q_idx = Q_IDX_BCN; mac_info.hdr_len = 24; - mac_info.bss_idx = apidx; + mac_info.bss_idx = (UCHAR)apidx; mac_info.SpeEn = 1; mac_info.Preamble = LONG_PREAMBLE; write_tmac_info(pAd, tmac_buf, &mac_info, BeaconTransmit); @@ -301,7 +301,7 @@ VOID APMakeBssTimFrame2(RTMP_ADAPTER *pAd, INT apidx) UINT i; if(!TimTransmitRequired(pAd, apidx, pMbss)) { - printk("%s, apidx = %d\n", __func__, apidx); + DBGPRINT(RT_DEBUG_OFF, ("%s, apidx = %d\n", __func__, apidx)); return; } @@ -425,7 +425,7 @@ VOID APMakeBssTimFrame2(RTMP_ADAPTER *pAd, INT apidx) static UCHAR GetTimNum(RTMP_ADAPTER *pAd) { int i; - int NumTim; + UCHAR NumTim; TIM_BUF_STRUC *tim_info; NumTim = 0; diff --git a/ap/ap_repeater.c b/ap/ap_repeater.c index e0c5057..3593dfd 100755 --- a/ap/ap_repeater.c +++ b/ap/ap_repeater.c @@ -802,16 +802,17 @@ INT Show_Repeater_Cli_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) if (!pAd->ApCfg.bMACRepeaterEn) return TRUE; - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); #ifdef DOT11_N_SUPPORT - printk("HT Operating Mode : %d\n", pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode); - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("HT Operating Mode : %d\n", + pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode)); + DBGPRINT(RT_DEBUG_OFF, ("\n")); #endif /* DOT11_N_SUPPORT */ - printk("\n%-19s%-4s%-4s%-4s%-4s%-8s%-7s%-7s%-7s%-10s%-6s%-6s%-6s%-6s%-7s%-7s\n", + DBGPRINT(RT_DEBUG_OFF, ("\n%-19s%-4s%-4s%-4s%-4s%-8s%-7s%-7s%-7s%-10s%-6s%-6s%-6s%-6s%-7s%-7s\n", "MAC", "AID", "BSS", "PSM", "WMM", "MIMOPS", "RSSI0", "RSSI1", - "RSSI2", "PhMd", "BW", "MCS", "SGI", "STBC", "Idle", "Rate"); + "RSSI2", "PhMd", "BW", "MCS", "SGI", "STBC", "Idle", "Rate")); for (i = 0; i < MAX_LEN_OF_MAC_TABLE; i++) { @@ -821,30 +822,33 @@ INT Show_Repeater_Cli_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) DataRate=0; getRate(pEntry->HTPhyMode, &DataRate); - printk("%02X:%02X:%02X:%02X:%02X:%02X ", + DBGPRINT(RT_DEBUG_OFF, ("%02X:%02X:%02X:%02X:%02X:%02X ", pEntry->ReptCliAddr[0], pEntry->ReptCliAddr[1], pEntry->ReptCliAddr[2], - pEntry->ReptCliAddr[3], pEntry->ReptCliAddr[4], pEntry->ReptCliAddr[5]); + pEntry->ReptCliAddr[3], pEntry->ReptCliAddr[4], pEntry->ReptCliAddr[5])); - printk("%-4d", (int)pEntry->Aid); - printk("%-4d-%d", (int)pEntry->apidx, pEntry->func_tb_idx); - printk("%-4d", (int)pEntry->PsMode); - printk("%-4d", (int)CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE)); + DBGPRINT(RT_DEBUG_OFF, ("%-4d", (int)pEntry->Aid)); + DBGPRINT(RT_DEBUG_OFF, ("%-4d-%d", (int)pEntry->apidx, pEntry->func_tb_idx)); + DBGPRINT(RT_DEBUG_OFF, ("%-4d", (int)pEntry->PsMode)); + DBGPRINT(RT_DEBUG_OFF, ("%-4d", + (int)CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE))); #ifdef DOT11_N_SUPPORT - printk("%-8d", (int)pEntry->MmpsMode); -#endif /* DOT11_N_SUPPORT */ - printk("%-7d", pEntry->RssiSample.AvgRssi[0]); - printk("%-7d", pEntry->RssiSample.AvgRssi[1]); - printk("%-7d", pEntry->RssiSample.AvgRssi[2]); - printk("%-10s", get_phymode_str(pEntry->HTPhyMode.field.MODE)); - printk("%-6s", get_bw_str(pEntry->HTPhyMode.field.BW)); - printk("%-6d", pEntry->HTPhyMode.field.MCS); - printk("%-6d", pEntry->HTPhyMode.field.ShortGI); - printk("%-6d", pEntry->HTPhyMode.field.STBC); - printk("%-7d", (int)(pEntry->StaIdleTimeout - pEntry->NoDataIdleCount)); - printk("%-7d", (int)DataRate); - printk("%-10d, %d, %d%%\n", pEntry->DebugFIFOCount, pEntry->DebugTxCount, - (pEntry->DebugTxCount) ? ((pEntry->DebugTxCount-pEntry->DebugFIFOCount)*100/pEntry->DebugTxCount) : 0); - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("%-8d", (int)pEntry->MmpsMode)); +#endif /* DOT11_N_SUPPORT */) + DBGPRINT(RT_DEBUG_OFF, ("%-7d", pEntry->RssiSample.AvgRssi[0])); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", pEntry->RssiSample.AvgRssi[1])); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", pEntry->RssiSample.AvgRssi[2])); + DBGPRINT(RT_DEBUG_OFF, ("%-10s", get_phymode_str(pEntry->HTPhyMode.field.MODE))); + DBGPRINT(RT_DEBUG_OFF, ("%-6s", get_bw_str(pEntry->HTPhyMode.field.BW))); + DBGPRINT(RT_DEBUG_OFF, ("%-6d", pEntry->HTPhyMode.field.MCS)); + DBGPRINT(RT_DEBUG_OFF, ("%-6d", pEntry->HTPhyMode.field.ShortGI)); + DBGPRINT(RT_DEBUG_OFF, ("%-6d", pEntry->HTPhyMode.field.STBC)); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", + (int)(pEntry->StaIdleTimeout - pEntry->NoDataIdleCount))); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", (int)DataRate)); + DBGPRINT(RT_DEBUG_OFF, ("%-10d, %d, %d%%\n", pEntry->DebugFIFOCount, + pEntry->DebugTxCount, (pEntry->DebugTxCount) ? + ((pEntry->DebugTxCount-pEntry->DebugFIFOCount)*100/pEntry->DebugTxCount) : 0)); + DBGPRINT(RT_DEBUG_OFF, ("\n")); } } diff --git a/ap/ap_sync.c b/ap/ap_sync.c index e08a17a..4815095 100755 --- a/ap/ap_sync.c +++ b/ap/ap_sync.c @@ -1768,8 +1768,11 @@ VOID APPeerBeaconAtScanAction(RTMP_ADAPTER *pAd, MLME_QUEUE_ELEM *Elem) Rssi = RealRssi + pAd->BbpRssiToDbmDelta; Idx = BssTableSetEntry(pAd, &pAd->ScanTab, ie_list, Rssi, LenVIE, pVIE); - if (Idx != BSS_NOT_FOUND) - { + if ((Idx != BSS_NOT_FOUND) && (Idx >= ARRAY_SIZE(pAd->ScanTab.BssEntry))) { + DBGPRINT(RT_DEBUG_OFF, + ("%s wrong idx %lu BssEntry sz %zu\n", __func__, + Idx, ARRAY_SIZE(pAd->ScanTab.BssEntry))); + } else if (Idx != BSS_NOT_FOUND) { NdisMoveMemory(pAd->ScanTab.BssEntry[Idx].PTSF, &Elem->Msg[24], 4); NdisMoveMemory(&pAd->ScanTab.BssEntry[Idx].TTSF[0], &Elem->TimeStamp.u.LowPart, 4); NdisMoveMemory(&pAd->ScanTab.BssEntry[Idx].TTSF[4], &Elem->TimeStamp.u.LowPart, 4); @@ -1855,10 +1858,10 @@ VOID ApSiteSurvey( RTMPZeroMemory(ScanReq.Ssid, MAX_LEN_OF_SSID); ScanReq.SsidLen = 0; - if (pSsid) - { - ScanReq.SsidLen = pSsid->SsidLength; - NdisMoveMemory(ScanReq.Ssid, pSsid->Ssid, pSsid->SsidLength); + if (pSsid) { + ScanReq.SsidLen = (UCHAR)pSsid->SsidLength; + if (pSsid->SsidLength > 0) + NdisMoveMemory(ScanReq.Ssid, pSsid->Ssid, pSsid->SsidLength); } ScanReq.BssType = BSS_ANY; ScanReq.ScanType = ScanType; diff --git a/ap/ap_wpa.c b/ap/ap_wpa.c index 05656fe..32f5bea 100755 --- a/ap/ap_wpa.c +++ b/ap/ap_wpa.c @@ -883,14 +883,14 @@ VOID GREKEYPeriodicExec( USHORT Wcid; /* Get a specific WCID to record this MBSS key attribute */ - GET_GroupKey_WCID(pAd, Wcid, apidx); + GET_GroupKey_WCID(pAd, Wcid, (USHORT)apidx); /* Install shared key table */ WPAInstallSharedKey(pAd, - wdev->GroupKeyWepStatus, - apidx, + (UINT8)wdev->GroupKeyWepStatus, + (UINT8)apidx, wdev->DefaultKeyId, - Wcid, + (UINT8)Wcid, TRUE, pMbss->GTK, LEN_TKIP_GTK); diff --git a/ap/apcli_assoc.c b/ap/apcli_assoc.c index d0a1c78..58cb2a3 100755 --- a/ap/apcli_assoc.c +++ b/ap/apcli_assoc.c @@ -377,6 +377,9 @@ static VOID ApCliMlmeAssocReqAction( NdisZeroMemory(&HtCapabilityTmp, sizeof(HT_CAPABILITY_IE)); NdisMoveMemory(&HtCapabilityTmp, &apcli_entry->MlmeAux.HtCapability, apcli_entry->MlmeAux.HtCapabilityLen); + /* WFD 6.1.21E: the peer devices will use BW based on HT Support Channel width in HT Capability IE */ + if (pAd->CommonCfg.RegTransmitSetting.field.BW == HT_BW_20) + HtCapabilityTmp.HtCapInfo.ChannelWidth = BW_20; #ifdef DOT11N_SS3_SUPPORT HtCapabilityTmp.MCSSet[2] = (apcli_entry->MlmeAux.HtCapability.MCSSet[2] & apcli_entry->RxMcsSet[2]); #endif /* DOT11N_SS3_SUPPORT */ @@ -704,8 +707,8 @@ static VOID ApCliMlmeDisassocReqAction( RTMPSendWirelessEvent(pAd, IW_DISASSOC_EVENT_FLAG, NULL, BSS0, 0); #endif /* WPA_SUPPLICANT_SUPPORT */ -#if defined(RT_CFG80211_P2P_CONCURRENT_DEVICE) || defined(CFG80211_MULTI_STA) - RT_CFG80211_LOST_GO_INFORM(pAd); +#if defined(RT_CFG80211_P2P_CONCURRENT_DEVICE) || defined(CFG80211_MULTI_STA) + RT_CFG80211_LOST_GO_INFORM(pAd, pDisassocReq->Reason); #endif /* RT_CFG80211_P2P_CONCURRENT_DEVICE || CFG80211_MULTI_STA */ return; @@ -791,7 +794,8 @@ static VOID ApCliPeerAssocRspAction( pAd->ApCfg.ApCliTab[ifIndex].ResVarIELen = 0; pFrame = (PFRAME_802_11) (Elem->Msg); - pAd->ApCfg.ApCliTab[ifIndex].ResVarIELen = Elem->MsgLen - 6 - sizeof (HEADER_802_11); + pAd->ApCfg.ApCliTab[ifIndex].ResVarIELen = + (USHORT)(Elem->MsgLen - 6 - sizeof(HEADER_802_11)); NdisCopyMemory(pAd->ApCfg.ApCliTab[ifIndex].ResVarIEs, &pFrame->Octet[6], pAd->ApCfg.ApCliTab[ifIndex].ResVarIELen); #endif /* RT_CFG80211_P2P_CONCURRENT_DEVICE || CFG80211_MULTI_STA */ diff --git a/ap/apcli_auth.c b/ap/apcli_auth.c index 898982f..9532371 100755 --- a/ap/apcli_auth.c +++ b/ap/apcli_auth.c @@ -359,7 +359,8 @@ static VOID ApCliPeerAuthRspAtSeq2Action(RTMP_ADAPTER *pAd, MLME_QUEUE_ELEM * El INC_TX_TSC(pKey->TxTsc, LEN_WEP_TSC); /* Construct the 4-bytes WEP IV header */ - RTMPConstructWEPIVHdr(default_key, pKey->TxTsc, iv_hdr); + RTMPConstructWEPIVHdr((UINT8)default_key + , pKey->TxTsc, iv_hdr); Alg = cpu2le16(*(USHORT *)&Alg); Seq = cpu2le16(*(USHORT *)&Seq); @@ -575,6 +576,7 @@ static VOID ApCliPeerDeauthAction(RTMP_ADAPTER *pAd, MLME_QUEUE_ELEM *Elem) DBGPRINT(RT_DEBUG_OFF, ("APCLI AUTH_RSP - receive DE-AUTH from our AP\n")); *pCurrState = APCLI_AUTH_REQ_IDLE; + pAd->ApCfg.ApCliTab[ifIndex].LastDeauthReason = Reason; #ifdef WPA_SUPPLICANT_SUPPORT tr_entry = &pAd->MacTab.tr_entry[pAd->ApCfg.ApCliTab[ifIndex].MacTabWCID]; diff --git a/ap/apcli_ctrl.c b/ap/apcli_ctrl.c index 9a59ee9..6e07b61 100755 --- a/ap/apcli_ctrl.c +++ b/ap/apcli_ctrl.c @@ -191,6 +191,7 @@ static VOID ApCliCtrlJoinReqAction( return; pApCliEntry = &pAd->ApCfg.ApCliTab[ifIndex]; + pApCliEntry->LastDeauthReason = REASON_DEAUTH_STA_LEAVING; NdisZeroMemory(&JoinReq, sizeof(APCLI_MLME_JOIN_REQ_STRUCT)); @@ -891,7 +892,7 @@ static VOID ApCliCtrlAssocRspAction( ifIndex = (USHORT)(Elem->Priv); #endif /* MAC_REPEATER_SUPPORT */ - if (ApCliLinkUp(pAd, ifIndex)) + if (ApCliLinkUp(pAd, (UCHAR)ifIndex)) { *pCurrState = APCLI_CTRL_CONNECTED; @@ -1035,7 +1036,7 @@ static VOID ApCliCtrlDeAssocRspAction( #endif /* MAC_REPEATER_SUPPORT */ if (bValid) - ApCliLinkDown(pAd, ifIndex); + ApCliLinkDown(pAd, (UCHAR)ifIndex); *pCurrState = APCLI_CTRL_DISCONNECTED; @@ -1188,7 +1189,7 @@ static VOID ApCliCtrlDisconnectReqAction( DBGPRINT(RT_DEBUG_ERROR, ("(%s) 2. Before do ApCliLinkDown.\n", __FUNCTION__)); if (bValid) - ApCliLinkDown(pAd, ifIndex); + ApCliLinkDown(pAd, (UCHAR)ifIndex); /* set the apcli interface be invalid. */ #ifdef MAC_REPEATER_SUPPORT @@ -1289,7 +1290,7 @@ static VOID ApCliCtrlPeerDeAssocReqAction( #endif /* MAC_REPEATER_SUPPORT */ if (bValid) - ApCliLinkDown(pAd, ifIndex); + ApCliLinkDown(pAd, (UCHAR)ifIndex); #ifdef APCLI_AUTO_CONNECT_SUPPORT if ((pAd->ApCfg.ApCliAutoConnectRunning == TRUE) @@ -1387,7 +1388,7 @@ static VOID ApCliCtrlDeAssocAction( sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq, ifIndex); if (bValid) - ApCliLinkDown(pAd, ifIndex); + ApCliLinkDown(pAd, (UCHAR)ifIndex); /* set the apcli interface be invalid. */ #ifdef MAC_REPEATER_SUPPORT @@ -1479,7 +1480,7 @@ static VOID ApCliCtrlDeAuthAction( ifIndex); if (bValid) - ApCliLinkDown(pAd, ifIndex); + ApCliLinkDown(pAd, (UCHAR)ifIndex); /* set the apcli interface be invalid. */ #ifdef MAC_REPEATER_SUPPORT diff --git a/ap/apcli_link_cover.c b/ap/apcli_link_cover.c index 7aba673..b22d48b 100755 --- a/ap/apcli_link_cover.c +++ b/ap/apcli_link_cover.c @@ -47,20 +47,20 @@ INT ApcliLinkMonitorThread( RtmpOSTaskCustomize(pTask); if (p2G_pAd == NULL) { - printk("##### no 2G pAd!!!\n"); + DBGPRINT(RT_DEBUG_ERROR, ("##### no 2G pAd!!!\n")); //RtmpOSTaskNotifyToExit(pTask); // return 0; } else if (p5G_pAd == NULL) { - printk("##### no 5G pAd!!!\n"); + DBGPRINT(RT_DEBUG_ERROR, ("##### no 5G pAd!!!\n")); //RtmpOSTaskNotifyToExit(pTask); // return 0; } if (p5G_pAd == pAd) { - printk("we are 5G interface, wait 2G link update\n"); + DBGPRINT(RT_DEBUG_OFF, ("we are 5G interface, wait 2G link update\n")); pAd_other_band = p2G_pAd; } else { - printk("we are 2G interface, wait 5G link update\n"); + DBGPRINT(RT_DEBUG_OFF, ("we are 2G interface, wait 5G link update\n")); pAd_other_band = p5G_pAd; } @@ -90,7 +90,7 @@ INT ApcliLinkMonitorThread( * This is important in preemption kernels, which transfer the flow * of execution immediately upon a complete(). */ - printk("<---ApcliLinkMonitorThread\n"); + DBGPRINT(RT_DEBUG_OFF, ("<---ApcliLinkMonitorThread\n")); //if (pTask) // RtmpOSTaskNotifyToExit(pTask); @@ -103,7 +103,7 @@ NDIS_STATUS RtmpApcliLinkTaskInit(IN PRTMP_ADAPTER pAd) RTMP_OS_TASK *pTask; NDIS_STATUS status; - printk("##### %s\n", __func__); + DBGPRINT(RT_DEBUG_OFF, ("##### %s\n", __func__)); /* Creat ApCli Link Monitor Thread */ pTask = &pAd->apcliLinkTask; RTMP_OS_TASK_INIT(pTask, "LinkMonitorTask", pAd); @@ -112,7 +112,8 @@ NDIS_STATUS RtmpApcliLinkTaskInit(IN PRTMP_ADAPTER pAd) if (status == NDIS_STATUS_FAILURE) { /* printk ("%s: unable to start RTPCICmdThread\n", RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev)); */ - printk ("%s: Unable to start ApcliLinkMonitorThread!\n", get_dev_name_prefix(pAd, INT_APCLI)); + DBGPRINT(RT_DEBUG_ERROR, ("%s: Unable to start ApcliLinkMonitorThread!\n", + get_dev_name_prefix(pAd, INT_APCLI))); return NDIS_STATUS_FAILURE; } @@ -124,7 +125,7 @@ VOID RtmpApcliLinkTaskExit( { INT ret; - printk("##### %s\n", __func__); + DBGPRINT(RT_DEBUG_OFF, ("##### %s\n", __func__)); /* Terminate cmdQ thread */ RTMP_OS_TASK_LEGALITY(&pAd->apcliLinkTask) { diff --git a/ap/apcli_sync.c b/ap/apcli_sync.c index 724f7db..bf39181 100755 --- a/ap/apcli_sync.c +++ b/ap/apcli_sync.c @@ -646,12 +646,24 @@ static VOID ApCliEnqueueProbeRequest( } else { - if(MAC_ADDR_EQUAL(pAd->ApCfg.ApCliTab[ifIndex].CfgApCliBssid, ZERO_MAC_ADDR)) + if (MAC_ADDR_EQUAL(pAd->ApCfg.ApCliTab[ifIndex].CfgApCliBssid, ZERO_MAC_ADDR)) { ApCliMgtMacHeaderInit(pAd, &Hdr80211, SUBTYPE_PROBE_REQ, 0, BROADCAST_ADDR, BROADCAST_ADDR, ifIndex); - else + } else { +#if 1 + /* Fix WFD Certification 6.1.21B and IOT issue: + * DUT will not reply probe response + * if we send the probe request by unicast + */ + DBGPRINT(RT_DEBUG_TRACE, + ("force out a ProbeRequest by broadcast but not unicast...\n")); + ApCliMgtMacHeaderInit(pAd, &Hdr80211, SUBTYPE_PROBE_REQ, 0, + BROADCAST_ADDR, BROADCAST_ADDR, ifIndex); +#else ApCliMgtMacHeaderInit(pAd, &Hdr80211, SUBTYPE_PROBE_REQ, 0, pAd->ApCfg.ApCliTab[ifIndex].CfgApCliBssid, pAd->ApCfg.ApCliTab[ifIndex].CfgApCliBssid, ifIndex); +#endif + } ssidLen = SsidLen; NdisZeroMemory(ssid, MAX_LEN_OF_SSID); diff --git a/ate/ate_agent.c b/ate/ate_agent.c index 4683e7b..679029d 100755 --- a/ate/ate_agent.c +++ b/ate/ate_agent.c @@ -352,7 +352,7 @@ INT32 SetATETxPower0(RTMP_ADAPTER *pAd, RTMP_STRING *Arg) DBGPRINT(RT_DEBUG_OFF, ("%s: Power0 = %s\n", __FUNCTION__, Arg)); - Power = simple_strtol(Arg, 0, 10); + Power = (CHAR)simple_strtol(Arg, 0, 10); ATECtrl->TxPower0 = Power; @@ -374,7 +374,7 @@ INT32 SetATETxPower1(RTMP_ADAPTER *pAd, RTMP_STRING *Arg) DBGPRINT(RT_DEBUG_OFF, ("%s: Power1 = %s\n", __FUNCTION__, Arg)); - Power = simple_strtol(Arg, 0, 10); + Power = (CHAR)simple_strtol(Arg, 0, 10); ATECtrl->TxPower1 = Power; @@ -410,7 +410,7 @@ INT32 SetATETxAntenna(RTMP_ADAPTER *pAd, RTMP_STRING *Arg) DBGPRINT(RT_DEBUG_OFF, ("%s: Ant = %s\n", __FUNCTION__, Arg)); - Ant = simple_strtol(Arg, 0, 10); + Ant = (CHAR)simple_strtol(Arg, 0, 10); Ret = ATEOp->SetTxAntenna(pAd, Ant); @@ -430,7 +430,7 @@ INT32 SetATERxAntenna(RTMP_ADAPTER *pAd, RTMP_STRING *Arg) DBGPRINT(RT_DEBUG_OFF, ("%s: Ant = %s\n", __FUNCTION__, Arg)); - Ant = simple_strtol(Arg, 0, 10); + Ant = (CHAR)simple_strtol(Arg, 0, 10); Ret = ATEOp->SetRxAntenna(pAd, Ant); @@ -577,7 +577,7 @@ INT32 SetATETxMcs(RTMP_ADAPTER *pAd, RTMP_STRING *Arg) PhyMode = ATECtrl->PhyMode; - Mcs = simple_strtol(Arg, 0, 10); + Mcs = (UCHAR)simple_strtol(Arg, 0, 10); Ret = CheckMCSValid(pAd, PhyMode, Mcs); @@ -602,7 +602,7 @@ INT32 SetATETxStbc(RTMP_ADAPTER *pAd, RTMP_STRING *Arg) DBGPRINT(RT_DEBUG_OFF, ("%s: Stbc = %s\n", __FUNCTION__, Arg)); - Stbc = simple_strtol(Arg, 0, 10); + Stbc = (UCHAR)simple_strtol(Arg, 0, 10); if (Stbc > 1) { @@ -625,7 +625,7 @@ INT32 SetATETxMode(RTMP_ADAPTER *pAd, RTMP_STRING *Arg) DBGPRINT(RT_DEBUG_OFF, ("%s: TxMode = %s\n", __FUNCTION__, Arg)); - PhyMode = simple_strtol(Arg, 0, 10); + PhyMode = (UCHAR)simple_strtol(Arg, 0, 10); if (PhyMode > MODE_HTGREENFIELD) { @@ -649,7 +649,7 @@ INT32 SetATETxGi(RTMP_ADAPTER *pAd, RTMP_STRING *Arg) DBGPRINT(RT_DEBUG_OFF, ("%s: Sgi = %s\n", __FUNCTION__, Arg)); - Sgi = simple_strtol(Arg, 0, 10); + Sgi = (UCHAR)simple_strtol(Arg, 0, 10); if (Sgi > 1) { @@ -846,22 +846,25 @@ INT32 SetATELoadE2pFromBuf(RTMP_ADAPTER *pAd, RTMP_STRING *Arg) INT32 SetATEReadE2p(RTMP_ADAPTER *pAd, RTMP_STRING *Arg) { - UINT16 Buffer[EEPROM_SIZE >> 1]; + USHORT *buffer; UINT16 *p; int i; - EEReadAll(pAd, (UINT16 *)Buffer); + buffer = vmalloc(EEPROM_SIZE >> 1); + if (!buffer) + return FALSE; - p = Buffer; + EEReadAll(pAd, (UINT16 *)buffer); + p = buffer; - for (i = 0; i < (EEPROM_SIZE >> 1); i++) - { + for (i = 0; i < (EEPROM_SIZE >> 1); i++) { DBGPRINT(RT_DEBUG_OFF, ("%4.4x ", *p)); if (((i+1) % 16) == 0) DBGPRINT(RT_DEBUG_OFF, ("\n")); p++; } + vfree(buffer); return TRUE; } @@ -1345,11 +1348,11 @@ INT32 SetATEChannel( INT32 Ret = 0; ATE_CTRL *ATECtrl = &(pAd->ATECtrl); ATE_OPERATION *ATEOp = ATECtrl->ATEOp; - INT16 Channel; + UCHAR Channel; DBGPRINT(RT_DEBUG_OFF, ("%s: Channel = %s\n", __FUNCTION__, Arg)); - Channel = simple_strtol(Arg, 0, 10); + Channel = (UCHAR)simple_strtol(Arg, 0, 10); ATECtrl->Channel = Channel; @@ -1378,9 +1381,9 @@ INT32 SetATETxBw( DBGPRINT(RT_DEBUG_OFF, ("%s: Bw = %s\n", __FUNCTION__, Arg)); - BW = simple_strtol(Arg, 0, 10); + BW = (INT16)simple_strtol(Arg, 0, 10); - ATECtrl->BW = BW; + ATECtrl->BW = (UCHAR)BW; if (ATECtrl->BW == BW_20) ATECtrl->ControlChl = ATECtrl->Channel; diff --git a/ate/inf/ate_usb.c b/ate/inf/ate_usb.c index ee251f9..6c20e53 100755 --- a/ate/inf/ate_usb.c +++ b/ate/inf/ate_usb.c @@ -51,7 +51,7 @@ INT TxDmaBusy(RTMP_ADAPTER *pAd) is_busy = UsbCfg.field_76xx.TxBusy; else #endif /* MT76x2 */ - is_busy = UsbCfg.field.TxBusy; + is_busy = (BOOLEAN)UsbCfg.field.TxBusy; result = (is_busy) ? TRUE : FALSE; @@ -76,7 +76,7 @@ INT RxDmaBusy(RTMP_ADAPTER *pAd) is_busy = UsbCfg.field_76xx.RxBusy; else #endif /* MT76x2 */ - is_busy = UsbCfg.field.RxBusy; + is_busy = (BOOLEAN)UsbCfg.field.RxBusy; result = (is_busy) ? TRUE : FALSE; @@ -548,7 +548,7 @@ VOID ATE_RTUSBBulkOutDataPacket( PTX_CONTEXT pNullContext = &(pAd->NullContext); PURB pUrb; INT ret = 0; - ULONG IrqFlags; + ULONG IrqFlags = 0; #ifdef RELEASE_EXCLUDE DBGPRINT(RT_DEBUG_INFO, ("--->ATE_RTUSBBulkOutDataPacket \n")); diff --git a/ate/mt_mac/mt_ate.c b/ate/mt_mac/mt_ate.c index 86becb1..e0fb11d 100755 --- a/ate/mt_mac/mt_ate.c +++ b/ate/mt_mac/mt_ate.c @@ -600,7 +600,6 @@ static INT32 MT_ATESetupFrame(RTMP_ADAPTER *pAd, UINT32 TxIdx) MAC_TX_INFO mac_info; HTTRANSMIT_SETTING Transmit; ATECtrl->HLen = LENGTH_802_11; - ATECtrl->TxLength = sizeof(HEADER_802_11); NdisZeroMemory(&pAd->NullFrame, 24); NdisZeroMemory(&Transmit, sizeof(Transmit)); @@ -630,7 +629,7 @@ static INT32 MT_ATESetupFrame(RTMP_ADAPTER *pAd, UINT32 TxIdx) mac_info.Ack = FALSE; mac_info.NSeq = FALSE; - mac_info.hdr_len = ATECtrl->HLen; + mac_info.hdr_len = (UCHAR)ATECtrl->HLen; mac_info.hdr_pad = 0; mac_info.WCID = 0; mac_info.Length = ATECtrl->TxLength; @@ -642,7 +641,10 @@ static INT32 MT_ATESetupFrame(RTMP_ADAPTER *pAd, UINT32 TxIdx) switch (ATECtrl->TxAntennaSel) { case 0: /* Both */ mac_info.AntPri = 0; - mac_info.SpeEn = 1; + if (pAd->CommonCfg.TxStream == 1) + mac_info.SpeEn = 0; + else + mac_info.SpeEn = 1; break; case 1: /* TX0 */ mac_info.AntPri = 0; @@ -1047,7 +1049,7 @@ static INT32 MT_ATEStartRx(RTMP_ADAPTER *pAd) RTUSBBulkReceive(pAd); #endif /* RTMP_MAC_USB */ -printk("<-----iverson MT_ATEStartRx \n "); + DBGPRINT(RT_DEBUG_OFF, ("MT_ATEStartRx\n")); return Ret; } @@ -1239,9 +1241,10 @@ static INT32 MT_ATESetTxAntenna(RTMP_ADAPTER *pAd, CHAR Ant) /* 0: All 1:TX0 2:TX1 */ ATECtrl->TxAntennaSel = Ant; +#ifdef RTMP_PCI_SUPPORT if ((MTK_REV_GTE(pAd, MT7603, MT7603E1)) || (MTK_REV_GTE(pAd, MT7628, MT7628E1))|| - (MTK_REV_GTE(pAd, MT7628, MT7603E2))) + (MTK_REV_GTE(pAd, MT7603, MT7603E2))) { if (ATECtrl->TxAntennaSel == 0) { @@ -1325,7 +1328,49 @@ static INT32 MT_ATESetTxAntenna(RTMP_ADAPTER *pAd, CHAR Ant) } } } +#else + if ((MTK_REV_GTE(pAd, MT7603, MT7603E1)) || + (MTK_REV_GTE(pAd, MT7628, MT7628E1)) || + (MTK_REV_GTE(pAd, MT7603, MT7603E2))) { + if (ATECtrl->TxAntennaSel == 0) { + RTMP_IO_READ32(pAd, CR_RFINTF_00, &Value); + Value &= ~CR_RFINTF_CAL_NSS_MASK; + Value |= CR_RFINTF_CAL_NSS(0x0); + RTMP_IO_WRITE32(pAd, CR_RFINTF_00, Value); + /* Tx both patch, ePA/eLNA/, iPA/eLNA, iPA/iLNA */ + if ((MTK_REV_GTE(pAd, MT7603, MT7603E1)) || + (MTK_REV_GTE(pAd, MT7603, MT7603E2))) + RTMP_IO_WRITE32(pAd, 0x81060008, 0x04852390); + else if (MTK_REV_GTE(pAd, MT7628, MT7628E1)) + RTMP_IO_WRITE32(pAd, 0x81060008, 0x00489523); + } else if (ATECtrl->TxAntennaSel == 1) { + RTMP_IO_READ32(pAd, CR_RFINTF_00, &Value); + Value &= ~CR_RFINTF_CAL_NSS_MASK; + Value |= CR_RFINTF_CAL_NSS(0x0); + RTMP_IO_WRITE32(pAd, CR_RFINTF_00, Value); + + /* Tx0 patch, ePA/eLNA/, iPA/eLNA, iPA/iLNA */ + if ((MTK_REV_GTE(pAd, MT7603, MT7603E1)) || + (MTK_REV_GTE(pAd, MT7603, MT7603E2))) + RTMP_IO_WRITE32(pAd, 0x81060008, 0x04852390); + else if (MTK_REV_GTE(pAd, MT7628, MT7628E1)) + RTMP_IO_WRITE32(pAd, 0x81060008, 0x00489523); + } else if (ATECtrl->TxAntennaSel == 2) { + RTMP_IO_READ32(pAd, CR_RFINTF_00, &Value); + Value &= ~CR_RFINTF_CAL_NSS_MASK; + Value |= CR_RFINTF_CAL_NSS(0x1); + RTMP_IO_WRITE32(pAd, CR_RFINTF_00, Value); + + /* Tx1 patch, ePA/eLNA/, iPA/eLNA, iPA/iLNA */ + if ((MTK_REV_GTE(pAd, MT7603, MT7603E1)) || + (MTK_REV_GTE(pAd, MT7603, MT7603E2))) + RTMP_IO_WRITE32(pAd, 0x81060008, 0x04856790); + else if (MTK_REV_GTE(pAd, MT7628, MT7628E1)) + RTMP_IO_WRITE32(pAd, 0x81060008, 0x00489567); + } + } +#endif return Ret; } @@ -1413,7 +1458,7 @@ static INT32 MT_ATESampleRssi(RTMP_ADAPTER *pAd, RX_BLK *RxBlk) ATECtrl->AvgRssi0X8 = (ATECtrl->AvgRssi0X8 - ATECtrl->AvgRssi0) + ATECtrl->LastRssi0; - ATECtrl->AvgRssi0 = ATECtrl->AvgRssi0X8 >> 3; + ATECtrl->AvgRssi0 = (CHAR)(ATECtrl->AvgRssi0X8 >> 3); } if (RxBlk->rx_signal.raw_rssi[1] != 0) @@ -1423,7 +1468,7 @@ static INT32 MT_ATESampleRssi(RTMP_ADAPTER *pAd, RX_BLK *RxBlk) ATECtrl->AvgRssi1X8 = (ATECtrl->AvgRssi1X8 - ATECtrl->AvgRssi1) + ATECtrl->LastRssi1; - ATECtrl->AvgRssi1 = ATECtrl->AvgRssi1X8 >> 3; + ATECtrl->AvgRssi1 = (CHAR)(ATECtrl->AvgRssi1X8 >> 3); } ATECtrl->LastSNR0 = RxBlk->rx_signal.raw_snr[0];; @@ -1466,7 +1511,7 @@ static INT32 MT_ATEStartTxTone(RTMP_ADAPTER *pAd, UINT32 Mode) //ATE_CTRL *ATECtrl = &pAd->ATECtrl; INT32 Ret = 0; DBGPRINT(RT_DEBUG_OFF, ("%s\n", __FUNCTION__)); - AsicSetTxToneTest(pAd, 1, Mode); + AsicSetTxToneTest(pAd, 1, (UCHAR)Mode); return Ret; } static INT32 MT_ATESetTxTonePower(RTMP_ADAPTER *pAd, INT32 pwr1, INT32 pwr2) diff --git a/chips/mt7603.c b/chips/mt7603.c index b739fea..3f5f999 100755 --- a/chips/mt7603.c +++ b/chips/mt7603.c @@ -188,7 +188,7 @@ static void mt7603_switch_channel(RTMP_ADAPTER *pAd, UCHAR channel, BOOLEAN scan } #endif - DBGPRINT(RT_DEBUG_OFF, + DBGPRINT(RT_DEBUG_TRACE, ("%s(): Switch to Ch#%d(%dT%dR), BBP_BW=%d\n", __FUNCTION__, channel, @@ -540,7 +540,7 @@ int mt7603_read_chl_pwr(RTMP_ADAPTER *pAd) /* check PA type combination */ RT28xx_EEPROM_READ16(pAd, EEPROM_NIC1_OFFSET, Value); - cap->pa_type = GET_PA_TYPE(Value); + cap->pa_type = (UINT8)GET_PA_TYPE(Value); return TRUE; } @@ -560,22 +560,24 @@ void mt7603_get_tx_pwr_per_rate(RTMP_ADAPTER *pAd) cap->tx_pwr_cck_5_11 = 0; } else { /* CCK 1M/2M */ - if (value & TX_PWR_CCK_1_2M_EN) { - if (value & TX_PWR_CCK_1_2M_SIGN) { - cap->tx_pwr_cck_1_2 = (value & TX_PWR_CCK_1_2M_MASK); + if (value & TX_PWR_CCK_1_2M_EN) { + if (value & TX_PWR_CCK_1_2M_SIGN) { + cap->tx_pwr_cck_1_2 = (CHAR)(value & TX_PWR_CCK_1_2M_MASK); } else { - cap->tx_pwr_cck_1_2 = -(value & TX_PWR_CCK_1_2M_MASK); + cap->tx_pwr_cck_1_2 = + (CHAR)(-(value & TX_PWR_CCK_1_2M_MASK)); } } else { cap->tx_pwr_cck_1_2 = 0; } /* CCK 5.5M/11M */ - if (value & TX_PWR_CCK_5_11M_EN) { - if (value & TX_PWR_CCK_5_11M_SIGN) { - cap->tx_pwr_cck_5_11 = ((value & TX_PWR_CCK_5_11M_MASK) >> 8); + if (value & TX_PWR_CCK_5_11M_EN) { + if (value & TX_PWR_CCK_5_11M_SIGN) { + cap->tx_pwr_cck_5_11 = (CHAR)((value & TX_PWR_CCK_5_11M_MASK) >> 8); } else { - cap->tx_pwr_cck_5_11 = -((value & TX_PWR_CCK_5_11M_MASK) >> 8); + cap->tx_pwr_cck_5_11 = + (CHAR)(-((value & TX_PWR_CCK_5_11M_MASK) >> 8)); } } else { cap->tx_pwr_cck_5_11 = 0; @@ -592,22 +594,26 @@ void mt7603_get_tx_pwr_per_rate(RTMP_ADAPTER *pAd) cap->tx_pwr_g_band_ofdm_12_18 = 0; } else { /* OFDM 6M/9M */ - if (value & TX_PWR_G_BAND_OFDM_6_9M_EN) { - if (value & TX_PWR_G_BAND_OFDM_6_9M_SIGN) { - cap->tx_pwr_g_band_ofdm_6_9 = (value & TX_PWR_G_BAND_OFDM_6_9M_MASK); + if (value & TX_PWR_G_BAND_OFDM_6_9M_EN) { + if (value & TX_PWR_G_BAND_OFDM_6_9M_SIGN) { + cap->tx_pwr_g_band_ofdm_6_9 = + (CHAR)(value & TX_PWR_G_BAND_OFDM_6_9M_MASK); } else { - cap->tx_pwr_g_band_ofdm_6_9 = -(value & TX_PWR_G_BAND_OFDM_6_9M_MASK); + cap->tx_pwr_g_band_ofdm_6_9 = + (CHAR)(-(value & TX_PWR_G_BAND_OFDM_6_9M_MASK)); } } else { cap->tx_pwr_g_band_ofdm_6_9 = 0; } /* OFDM 12M/18M */ - if (value & TX_PWR_G_BAND_OFDM_12_18M_EN) { - if (value & TX_PWR_G_BAND_OFDM_12_18M_SIGN) { - cap->tx_pwr_g_band_ofdm_12_18 = ((value & TX_PWR_G_BAND_OFDM_12_18M_MASK) >> 8); + if (value & TX_PWR_G_BAND_OFDM_12_18M_EN) { + if (value & TX_PWR_G_BAND_OFDM_12_18M_SIGN) { + cap->tx_pwr_g_band_ofdm_12_18 = + (CHAR)((value & TX_PWR_G_BAND_OFDM_12_18M_MASK) >> 8); } else { - cap->tx_pwr_g_band_ofdm_12_18 = -((value & TX_PWR_G_BAND_OFDM_12_18M_MASK) >> 8); + cap->tx_pwr_g_band_ofdm_12_18 = + (CHAR)(-((value & TX_PWR_G_BAND_OFDM_12_18M_MASK) >> 8)); } } else { cap->tx_pwr_g_band_ofdm_12_18 = 0; @@ -622,22 +628,26 @@ void mt7603_get_tx_pwr_per_rate(RTMP_ADAPTER *pAd) cap->tx_pwr_g_band_ofdm_48= 0; } else { /* OFDM 24M/36M */ - if (value & TX_PWR_G_BAND_OFDM_24_36M_EN) { - if (value & TX_PWR_G_BAND_OFDM_24_36M_SIGN) { - cap->tx_pwr_g_band_ofdm_24_36 = (value & TX_PWR_G_BAND_OFDM_24_36M_MASK); + if (value & TX_PWR_G_BAND_OFDM_24_36M_EN) { + if (value & TX_PWR_G_BAND_OFDM_24_36M_SIGN) { + cap->tx_pwr_g_band_ofdm_24_36 = + (CHAR)(value & TX_PWR_G_BAND_OFDM_24_36M_MASK); } else { - cap->tx_pwr_g_band_ofdm_24_36 = -(value & TX_PWR_G_BAND_OFDM_24_36M_MASK); + cap->tx_pwr_g_band_ofdm_24_36 = + (CHAR)(-(value & TX_PWR_G_BAND_OFDM_24_36M_MASK)); } } else { cap->tx_pwr_g_band_ofdm_24_36 = 0; } /* OFDM 48M */ - if (value & TX_PWR_G_BAND_OFDM_48M_EN) { - if (value & TX_PWR_G_BAND_OFDM_48M_SIGN) { - cap->tx_pwr_g_band_ofdm_48 = ((value & TX_PWR_G_BAND_OFDM_48M_MASK) >> 8); + if (value & TX_PWR_G_BAND_OFDM_48M_EN) { + if (value & TX_PWR_G_BAND_OFDM_48M_SIGN) { + cap->tx_pwr_g_band_ofdm_48 = + (CHAR)((value & TX_PWR_G_BAND_OFDM_48M_MASK) >> 8); } else { - cap->tx_pwr_g_band_ofdm_48 = -((value & TX_PWR_G_BAND_OFDM_48M_MASK) >> 8); + cap->tx_pwr_g_band_ofdm_48 = + (CHAR)(-((value & TX_PWR_G_BAND_OFDM_48M_MASK) >> 8)); } } else { cap->tx_pwr_g_band_ofdm_48 = 0; @@ -652,22 +662,26 @@ void mt7603_get_tx_pwr_per_rate(RTMP_ADAPTER *pAd) cap->tx_pwr_ht_bpsk_mcs_0_8 = 0; } else { /* OFDM 54M */ - if (value & TX_PWR_G_BAND_OFDM_54M_EN) { - if (value & TX_PWR_G_BAND_OFDM_54M_SIGN) { - cap->tx_pwr_g_band_ofdm_54 = (value & TX_PWR_G_BAND_OFDM_54M_MASK); + if (value & TX_PWR_G_BAND_OFDM_54M_EN) { + if (value & TX_PWR_G_BAND_OFDM_54M_SIGN) { + cap->tx_pwr_g_band_ofdm_54 = + (CHAR)(value & TX_PWR_G_BAND_OFDM_54M_MASK); } else { - cap->tx_pwr_g_band_ofdm_54 = -(value & TX_PWR_G_BAND_OFDM_54M_MASK); + cap->tx_pwr_g_band_ofdm_54 = + (CHAR)(-(value & TX_PWR_G_BAND_OFDM_54M_MASK)); } } else { cap->tx_pwr_g_band_ofdm_54 = 0; } /* HT MCS_0, MCS_8 */ - if (value & TX_PWR_HT_BPSK_MCS_0_8_EN) { - if (value & TX_PWR_HT_BPSK_MCS_0_8_SIGN) { - cap->tx_pwr_ht_bpsk_mcs_0_8 = ((value & TX_PWR_HT_BPSK_MCS_0_8_MASK) >> 8); + if (value & TX_PWR_HT_BPSK_MCS_0_8_EN) { + if (value & TX_PWR_HT_BPSK_MCS_0_8_SIGN) { + cap->tx_pwr_ht_bpsk_mcs_0_8 = + (CHAR)((value & TX_PWR_HT_BPSK_MCS_0_8_MASK) >> 8); } else { - cap->tx_pwr_ht_bpsk_mcs_0_8 = -((value & TX_PWR_HT_BPSK_MCS_0_8_MASK) >> 8); + cap->tx_pwr_ht_bpsk_mcs_0_8 = + (CHAR)(-((value & TX_PWR_HT_BPSK_MCS_0_8_MASK) >> 8)); } } else { cap->tx_pwr_ht_bpsk_mcs_0_8 = 0; @@ -681,22 +695,26 @@ void mt7603_get_tx_pwr_per_rate(RTMP_ADAPTER *pAd) cap->tx_pwr_ht_qpsk_mcs_1_2_9_10 = 0; } else { /* HT MCS_0, MCS_8 */ - if (value & TX_PWR_HT_BPSK_MCS_32_EN) { - if (value & TX_PWR_HT_BPSK_MCS_32_SIGN) { - cap->tx_pwr_ht_bpsk_mcs_32 = (value & TX_PWR_HT_BPSK_MCS_32_MASK); + if (value & TX_PWR_HT_BPSK_MCS_32_EN) { + if (value & TX_PWR_HT_BPSK_MCS_32_SIGN) { + cap->tx_pwr_ht_bpsk_mcs_32 = + (CHAR)(value & TX_PWR_HT_BPSK_MCS_32_MASK); } else { - cap->tx_pwr_ht_bpsk_mcs_32 = -(value & TX_PWR_HT_BPSK_MCS_32_MASK); + cap->tx_pwr_ht_bpsk_mcs_32 = + (CHAR)(-(value & TX_PWR_HT_BPSK_MCS_32_MASK)); } } else { cap->tx_pwr_ht_bpsk_mcs_32 = 0; } /* HT MCS_1, MCS_2, MCS_9, MCS_10 */ - if (value & TX_PWR_HT_QPSK_MCS_1_2_9_10_EN) { - if (value & TX_PWR_HT_QPSK_MCS_1_2_9_10_SIGN) { - cap->tx_pwr_ht_qpsk_mcs_1_2_9_10 = ((value & TX_PWR_HT_QPSK_MCS_1_2_9_10_MASK) >> 8); + if (value & TX_PWR_HT_QPSK_MCS_1_2_9_10_EN) { + if (value & TX_PWR_HT_QPSK_MCS_1_2_9_10_SIGN) { + cap->tx_pwr_ht_qpsk_mcs_1_2_9_10 = + (CHAR)((value & TX_PWR_HT_QPSK_MCS_1_2_9_10_MASK) >> 8); } else { - cap->tx_pwr_ht_qpsk_mcs_1_2_9_10 = -((value & TX_PWR_HT_QPSK_MCS_1_2_9_10_MASK) >> 8); + cap->tx_pwr_ht_qpsk_mcs_1_2_9_10 = + (CHAR)(-((value & TX_PWR_HT_QPSK_MCS_1_2_9_10_MASK) >> 8)); } } else { cap->tx_pwr_ht_qpsk_mcs_1_2_9_10 = 0; @@ -712,22 +730,26 @@ void mt7603_get_tx_pwr_per_rate(RTMP_ADAPTER *pAd) cap->tx_pwr_ht_64qam_mcs_5_13 = 0; } else { /* HT MCS_3, MCS_4, MCS_11, MCS_12 */ - if (value & TX_PWR_HT_16QAM_MCS_3_4_11_12_EN) { - if (value & TX_PWR_HT_16QAM_MCS_3_4_11_12_SIGN) { - cap->tx_pwr_ht_16qam_mcs_3_4_11_12 = (value & TX_PWR_HT_16QAM_MCS_3_4_11_12_MASK); + if (value & TX_PWR_HT_16QAM_MCS_3_4_11_12_EN) { + if (value & TX_PWR_HT_16QAM_MCS_3_4_11_12_SIGN) { + cap->tx_pwr_ht_16qam_mcs_3_4_11_12 = + (CHAR)(value & TX_PWR_HT_16QAM_MCS_3_4_11_12_MASK); } else { - cap->tx_pwr_ht_16qam_mcs_3_4_11_12 = -(value & TX_PWR_HT_16QAM_MCS_3_4_11_12_MASK); + cap->tx_pwr_ht_16qam_mcs_3_4_11_12 = + (CHAR)(-(value & TX_PWR_HT_16QAM_MCS_3_4_11_12_MASK)); } } else { cap->tx_pwr_ht_16qam_mcs_3_4_11_12 = 0; } /* HT MCS_5, MCS_13 */ - if (value & TX_PWR_HT_64QAM_MCS_5_13_EN) { - if (value & TX_PWR_HT_64QAM_MCS_5_13_SIGN) { - cap->tx_pwr_ht_64qam_mcs_5_13 = ((value & TX_PWR_HT_64QAM_MCS_5_13_MASK) >> 8); + if (value & TX_PWR_HT_64QAM_MCS_5_13_EN) { + if (value & TX_PWR_HT_64QAM_MCS_5_13_SIGN) { + cap->tx_pwr_ht_64qam_mcs_5_13 = + (CHAR)((value & TX_PWR_HT_64QAM_MCS_5_13_MASK) >> 8); } else { - cap->tx_pwr_ht_64qam_mcs_5_13 = -((value & TX_PWR_HT_64QAM_MCS_5_13_MASK) >> 8); + cap->tx_pwr_ht_64qam_mcs_5_13 = + (CHAR)(-((value & TX_PWR_HT_64QAM_MCS_5_13_MASK) >> 8)); } } else { cap->tx_pwr_ht_64qam_mcs_5_13 = 0; @@ -742,22 +764,26 @@ void mt7603_get_tx_pwr_per_rate(RTMP_ADAPTER *pAd) cap->tx_pwr_ht_64qam_mcs_7_15 = 0; } else { /* HT MCS_6, MCS_14 */ - if (value & TX_PWR_HT_64QAM_MCS_6_14_EN) { - if (value & TX_PWR_HT_64QAM_MCS_6_14_SIGN) { - cap->tx_pwr_ht_64qam_mcs_6_14 = (value & TX_PWR_HT_64QAM_MCS_6_14_MASK); + if (value & TX_PWR_HT_64QAM_MCS_6_14_EN) { + if (value & TX_PWR_HT_64QAM_MCS_6_14_SIGN) { + cap->tx_pwr_ht_64qam_mcs_6_14 = + (CHAR)(value & TX_PWR_HT_64QAM_MCS_6_14_MASK); } else { - cap->tx_pwr_ht_64qam_mcs_6_14 = -(value & TX_PWR_HT_64QAM_MCS_6_14_MASK); + cap->tx_pwr_ht_64qam_mcs_6_14 = + (CHAR)(-(value & TX_PWR_HT_64QAM_MCS_6_14_MASK)); } } else { cap->tx_pwr_ht_64qam_mcs_6_14 = 0; } /* HT MCS_7, MCS_15 */ - if (value & TX_PWR_HT_64QAM_MCS_7_15_EN) { - if (value & TX_PWR_HT_64QAM_MCS_7_15_SIGN) { - cap->tx_pwr_ht_64qam_mcs_7_15 = ((value & TX_PWR_HT_64QAM_MCS_7_15_MASK) >> 8); + if (value & TX_PWR_HT_64QAM_MCS_7_15_EN) { + if (value & TX_PWR_HT_64QAM_MCS_7_15_SIGN) { + cap->tx_pwr_ht_64qam_mcs_7_15 = + (CHAR)((value & TX_PWR_HT_64QAM_MCS_7_15_MASK) >> 8); } else { - cap->tx_pwr_ht_64qam_mcs_7_15 = -((value & TX_PWR_HT_64QAM_MCS_7_15_MASK) >> 8); + cap->tx_pwr_ht_64qam_mcs_7_15 = + (CHAR)(-((value & TX_PWR_HT_64QAM_MCS_7_15_MASK) >> 8)); } } else { cap->tx_pwr_ht_64qam_mcs_7_15 = 0; @@ -783,12 +809,14 @@ void mt7603_get_tx_pwr_info(RTMP_ADAPTER *pAd) cap->delta_tx_pwr_bw40_g_band = 0x0; } else { /* G Band */ - if (value & G_BAND_20_40_BW_PWR_DELTA_EN) { - if (value & G_BAND_20_40_BW_PWR_DELTA_SIGN) { + if (value & G_BAND_20_40_BW_PWR_DELTA_EN) { + if (value & G_BAND_20_40_BW_PWR_DELTA_SIGN) { /* bit[0..5] tx power delta value */ - cap->delta_tx_pwr_bw40_g_band = (value & G_BAND_20_40_BW_PWR_DELTA_MASK); + cap->delta_tx_pwr_bw40_g_band = + (CHAR)(value & G_BAND_20_40_BW_PWR_DELTA_MASK); } else { - cap->delta_tx_pwr_bw40_g_band = -(value & G_BAND_20_40_BW_PWR_DELTA_MASK); + cap->delta_tx_pwr_bw40_g_band = + (CHAR)(-(value & G_BAND_20_40_BW_PWR_DELTA_MASK)); } } else { cap->delta_tx_pwr_bw40_g_band = 0x0; @@ -804,7 +832,8 @@ void mt7603_get_tx_pwr_info(RTMP_ADAPTER *pAd) (is_empty) ? TSSI_0_SLOPE_G_BAND_DEFAULT_VALUE : (value & TX0_G_BAND_TSSI_SLOPE_MASK); cap->tssi_0_offset_g_band = - (is_empty) ? TSSI_0_OFFSET_G_BAND_DEFAULT_VALUE : ((value & TX0_G_BAND_TSSI_OFFSET_MASK) >> 8); + (is_empty) ? TSSI_0_OFFSET_G_BAND_DEFAULT_VALUE : + (UINT8)((value & TX0_G_BAND_TSSI_OFFSET_MASK) >> 8); DBGPRINT(RT_DEBUG_TRACE, ("tssi_0_slope_g_band = %d\n", cap->tssi_0_slope_g_band)); DBGPRINT(RT_DEBUG_TRACE, ("tssi_0_offset_g_band = %d\n", cap->tssi_0_offset_g_band)); @@ -821,11 +850,13 @@ void mt7603_get_tx_pwr_info(RTMP_ADAPTER *pAd) cap->tx_0_chl_pwr_delta_g_band[G_BAND_LOW] = 0x0; } else { /* tx power offset LOW */ - if (value & TX0_G_BAND_CHL_PWR_DELTA_LOW_EN) { - if (value & TX0_G_BAND_CHL_PWR_DELTA_LOW_SIGN) { - cap->tx_0_chl_pwr_delta_g_band[G_BAND_LOW] = ((value & TX0_G_BAND_CHL_PWR_DELTA_LOW_MASK) >> 8); + if (value & TX0_G_BAND_CHL_PWR_DELTA_LOW_EN) { + if (value & TX0_G_BAND_CHL_PWR_DELTA_LOW_SIGN) { + cap->tx_0_chl_pwr_delta_g_band[G_BAND_LOW] = + (UINT8)((value & TX0_G_BAND_CHL_PWR_DELTA_LOW_MASK) >> 8); } else { - cap->tx_0_chl_pwr_delta_g_band[G_BAND_LOW] = -((value & TX0_G_BAND_CHL_PWR_DELTA_LOW_MASK) >> 8); + cap->tx_0_chl_pwr_delta_g_band[G_BAND_LOW] = + (UINT8)(-((value & TX0_G_BAND_CHL_PWR_DELTA_LOW_MASK) >> 8)); } } else { cap->tx_0_chl_pwr_delta_g_band[G_BAND_LOW] = 0x0; @@ -840,20 +871,24 @@ void mt7603_get_tx_pwr_info(RTMP_ADAPTER *pAd) cap->tx_0_chl_pwr_delta_g_band[G_BAND_HI] = 0x0; } else { /* tx power offset MID */ - if (value & TX0_G_BAND_CHL_PWR_DELTA_MID_EN) { - if (value & TX0_G_BAND_CHL_PWR_DELTA_MID_SIGN) - cap->tx_0_chl_pwr_delta_g_band[G_BAND_MID] = (value & TX0_G_BAND_CHL_PWR_DELTA_MID_MASK); + if (value & TX0_G_BAND_CHL_PWR_DELTA_MID_EN) { + if (value & TX0_G_BAND_CHL_PWR_DELTA_MID_SIGN) + cap->tx_0_chl_pwr_delta_g_band[G_BAND_MID] = + (CHAR)(value & TX0_G_BAND_CHL_PWR_DELTA_MID_MASK); else - cap->tx_0_chl_pwr_delta_g_band[G_BAND_MID] = -(value & TX0_G_BAND_CHL_PWR_DELTA_MID_MASK); + cap->tx_0_chl_pwr_delta_g_band[G_BAND_MID] = + (UINT8)(-(value & TX0_G_BAND_CHL_PWR_DELTA_MID_MASK)); } else { cap->tx_0_chl_pwr_delta_g_band[G_BAND_MID] = 0x0; } /* tx power offset HIGH */ - if (value & TX0_G_BAND_CHL_PWR_DELTA_HI_EN) { - if (value & TX0_G_BAND_CHL_PWR_DELTA_HI_SIGN) - cap->tx_0_chl_pwr_delta_g_band[G_BAND_HI] = ((value & TX0_G_BAND_CHL_PWR_DELTA_HI_MASK) >> 8); + if (value & TX0_G_BAND_CHL_PWR_DELTA_HI_EN) { + if (value & TX0_G_BAND_CHL_PWR_DELTA_HI_SIGN) + cap->tx_0_chl_pwr_delta_g_band[G_BAND_HI] = + (UINT8)((value & TX0_G_BAND_CHL_PWR_DELTA_HI_MASK) >> 8); else - cap->tx_0_chl_pwr_delta_g_band[G_BAND_HI] = -((value & TX0_G_BAND_CHL_PWR_DELTA_HI_MASK) >> 8); + cap->tx_0_chl_pwr_delta_g_band[G_BAND_HI] = + (UINT8)(-((value & TX0_G_BAND_CHL_PWR_DELTA_HI_MASK) >> 8)); } else { cap->tx_0_chl_pwr_delta_g_band[G_BAND_HI] = 0x0; } @@ -867,7 +902,8 @@ void mt7603_get_tx_pwr_info(RTMP_ADAPTER *pAd) cap->tssi_1_slope_g_band = (is_empty) ? TSSI_1_SLOPE_G_BAND_DEFAULT_VALUE : (value & TX1_G_BAND_TSSI_SLOPE_MASK); - cap->tssi_1_offset_g_band = (is_empty) ? TSSI_1_OFFSET_G_BAND_DEFAULT_VALUE : ((value & TX1_G_BAND_TSSI_OFFSET_MASK) >> 8); + cap->tssi_1_offset_g_band = (is_empty) ? TSSI_1_OFFSET_G_BAND_DEFAULT_VALUE : + (UINT8)((value & TX1_G_BAND_TSSI_OFFSET_MASK) >> 8); DBGPRINT(RT_DEBUG_TRACE, ("tssi_1_slope_g_band = %d\n", cap->tssi_1_slope_g_band)); DBGPRINT(RT_DEBUG_TRACE, ("tssi_1_offset_g_band = %d\n", cap->tssi_1_offset_g_band)); @@ -877,18 +913,20 @@ void mt7603_get_tx_pwr_info(RTMP_ADAPTER *pAd) cap->tx_1_target_pwr_g_band = (is_empty) ? TX_TARGET_PWR_DEFAULT_VALUE : (value & TX1_G_BAND_TARGET_PWR_MASK); - printk ("tssi_1_target_pwr_g_band = %d\n", cap->tx_1_target_pwr_g_band); + DBGPRINT(RT_DEBUG_OFF, ("tssi_1_target_pwr_g_band = %d\n", cap->tx_1_target_pwr_g_band)); /* Read power offset (channel delta) */ if (is_empty) { cap->tx_1_chl_pwr_delta_g_band[G_BAND_LOW] = 0; } else { /* tx power offset LOW */ - if (value & TX1_G_BAND_CHL_PWR_DELTA_LOW_EN) { - if (value & TX1_G_BAND_CHL_PWR_DELTA_LOW_SIGN) { - cap->tx_1_chl_pwr_delta_g_band[G_BAND_LOW] = ((value & TX1_G_BAND_CHL_PWR_DELTA_LOW_MASK) >> 8); + if (value & TX1_G_BAND_CHL_PWR_DELTA_LOW_EN) { + if (value & TX1_G_BAND_CHL_PWR_DELTA_LOW_SIGN) { + cap->tx_1_chl_pwr_delta_g_band[G_BAND_LOW] = + (UINT8)((value & TX1_G_BAND_CHL_PWR_DELTA_LOW_MASK) >> 8); } else { - cap->tx_1_chl_pwr_delta_g_band[G_BAND_LOW] = -((value & TX1_G_BAND_CHL_PWR_DELTA_LOW_MASK) >> 8); + cap->tx_1_chl_pwr_delta_g_band[G_BAND_LOW] = + (UINT8)(-((value & TX1_G_BAND_CHL_PWR_DELTA_LOW_MASK) >> 8)); } } else { cap->tx_1_chl_pwr_delta_g_band[G_BAND_LOW] = 0; @@ -902,21 +940,25 @@ void mt7603_get_tx_pwr_info(RTMP_ADAPTER *pAd) cap->tx_1_chl_pwr_delta_g_band[G_BAND_HI] = 0; } else { /* tx power offset MID */ - if (value & TX1_G_BAND_CHL_PWR_DELTA_MID_EN) { - if (value & TX1_G_BAND_CHL_PWR_DELTA_MID_SIGN) { - cap->tx_1_chl_pwr_delta_g_band[G_BAND_MID] = (value & TX1_G_BAND_CHL_PWR_DELTA_MID_MASK); + if (value & TX1_G_BAND_CHL_PWR_DELTA_MID_EN) { + if (value & TX1_G_BAND_CHL_PWR_DELTA_MID_SIGN) { + cap->tx_1_chl_pwr_delta_g_band[G_BAND_MID] = + (CHAR)(value & TX1_G_BAND_CHL_PWR_DELTA_MID_MASK); } else { - cap->tx_1_chl_pwr_delta_g_band[G_BAND_MID] = -(value & TX1_G_BAND_CHL_PWR_DELTA_MID_MASK); + cap->tx_1_chl_pwr_delta_g_band[G_BAND_MID] = + (UINT8)(-(value & TX1_G_BAND_CHL_PWR_DELTA_MID_MASK)); } } else { cap->tx_1_chl_pwr_delta_g_band[G_BAND_MID] = 0; } /* tx power offset HIGH */ - if (value & TX1_G_BAND_CHL_PWR_DELTA_HI_EN) { - if (value & TX1_G_BAND_CHL_PWR_DELTA_HI_SIGN) { - cap->tx_1_chl_pwr_delta_g_band[G_BAND_HI] = ((value & TX1_G_BAND_CHL_PWR_DELTA_HI_MASK) >> 8); + if (value & TX1_G_BAND_CHL_PWR_DELTA_HI_EN) { + if (value & TX1_G_BAND_CHL_PWR_DELTA_HI_SIGN) { + cap->tx_1_chl_pwr_delta_g_band[G_BAND_HI] = + (UINT8)((value & TX1_G_BAND_CHL_PWR_DELTA_HI_MASK) >> 8); } else { - cap->tx_1_chl_pwr_delta_g_band[G_BAND_HI] = -((value & TX1_G_BAND_CHL_PWR_DELTA_HI_MASK) >> 8); + cap->tx_1_chl_pwr_delta_g_band[G_BAND_HI] = + (UINT8)(-((value & TX1_G_BAND_CHL_PWR_DELTA_HI_MASK) >> 8)); } } else { cap->tx_1_chl_pwr_delta_g_band[G_BAND_HI] = 0; @@ -1523,16 +1565,243 @@ void mt7603_set_ed_cca(RTMP_ADAPTER *pAd, BOOLEAN enable) { macVal = 0xD7E87D10; //EDCCA ON //d7e87d10 RTMP_IO_WRITE32(pAd, WF_PHY_BASE + 0x0618, macVal); - +#ifdef SMART_CARRIER_SENSE_SUPPORT + pAd->SCSCtrl.EDCCA_Status = 1; + DBGPRINT(RT_DEBUG_ERROR, ("%s: TURN ON EDCCA mac 0x10618 = 0x%x, EDCCA_Status=%d\n", __FUNCTION__, macVal, pAd->SCSCtrl.EDCCA_Status)); +#else DBGPRINT(RT_DEBUG_ERROR, ("%s: TURN ON EDCCA mac 0x10618 = 0x%x\n", __FUNCTION__, macVal)); +#endif /* SMART_CARRIER_SENSE_SUPPORT */ } else { macVal = 0xD7083F0F; //EDCCA OFF //d7083f0f RTMP_IO_WRITE32(pAd, WF_PHY_BASE + 0x0618, macVal); - +#ifdef SMART_CARRIER_SENSE_SUPPORT + pAd->SCSCtrl.EDCCA_Status = 0; + DBGPRINT(RT_DEBUG_ERROR, ("%s: TURN OFF EDCCA mac 0x10618 = 0x%x, EDCCA_Status=%d\n", __FUNCTION__, macVal, pAd->SCSCtrl.EDCCA_Status)); +#else DBGPRINT(RT_DEBUG_ERROR, ("%s: TURN OFF EDCCA mac 0x10618 = 0x%x\n", __FUNCTION__, macVal)); +#endif /* SMART_CARRIER_SENSE_SUPPORT */ } } +#ifdef SMART_CARRIER_SENSE_SUPPORT +/* +======================================================================== +Routine Description: + Get target rssi for smart carrier sense. +Arguments: + pAd - WLAN control block pointer +Return Value: + rssi - rssi value +======================================================================== +*/ +INT MTSmartCarrierSense(RTMP_ADAPTER *pAd) +{ + UINT16 RxRatio = 0; + UCHAR idx = 0, RtsEnable = 0, Action = Keep_Range; + UINT32 CrValue = 0, MaxRtsRtyCount = 0; + UINT32 MaxRtsCount = 0, TempValue = 0, tmpCrValue = 0, TotalTp = 0; + INT32 AdjustStep = 0; + CHAR RSSIBoundary = 0; + /*get RxRatio */ + if (pAd->RalinkCounters.OneSecReceivedByteCount != 0) + RxRatio = ((pAd->RalinkCounters.OneSecReceivedByteCount) * 100 + / (pAd->RalinkCounters.OneSecReceivedByteCount + + pAd->RalinkCounters.OneSecTransmittedByteCount)); + else + RxRatio = 0; + DBGPRINT(RT_DEBUG_TRACE, ("RXRatio=%d\n", RxRatio)); + /* + *DBGPRINT(RT_DEBUG_ERROR, ("%s():Enter ---> miniRSSI=%d TotalByteCount=%d + * RxByteCount=%d TxByteCount=%d EDCCA=%d RxRatio=%d RtsCount=%d + * RtsRtyCount=%d RSSIBoundary=%s TotalTp =%d\n", __FUNCTION__, + * pAd->SCSCtrl.SCSMinRssi, (pAd->RalinkCounters.OneSecReceivedByteCount + * + pAd->RalinkCounters.OneSecTransmittedByteCount), + * pAd->RalinkCounters.OneSecReceivedByteCount, + * pAd->RalinkCounters.OneSecTransmittedByteCount, + * pAd->SCSCtrl.EDCCA_Status, RxRatio,pAd->SCSCtrl.RtsCount, + * pAd->SCSCtrl.RtsRtyCount,pAd->SCSCtrl.RSSIBoundary, + * (pAd->RalinkCounters.OneSecReceivedByteCount + + * pAd->RalinkCounters.OneSecTransmittedByteCount))); + */ + +/*get RtsCount and RtsRetryCount*/ + for (idx = 0; idx < 4; idx++) { + RTMP_IO_READ32(pAd, MIB_MB0SDR0 + idx * 0x10, &CrValue); + TempValue = (CrValue >> 16) & 0x0000ffff; + if (TempValue > MaxRtsRtyCount) { + MaxRtsRtyCount = TempValue; + MaxRtsCount = CrValue & 0x0000ffff; + } + + pAd->SCSCtrl.RtsCount = MaxRtsCount; + pAd->SCSCtrl.RtsRtyCount = MaxRtsRtyCount; + } + DBGPRINT(RT_DEBUG_TRACE, ("RtsCount=%d\n", MaxRtsCount)); + if (MaxRtsCount > 0 || MaxRtsRtyCount > 0) + RtsEnable = 1; +/*get RSSIBoundary*/ + RSSIBoundary = pAd->SCSCtrl.SCSMinRssi - pAd->SCSCtrl.SCSMinRssiTolerance; + RSSIBoundary -= (RSSIBoundary % 2); + pAd->SCSCtrl.RSSIBoundary = min(RSSIBoundary, pAd->SCSCtrl.FixedRssiBond); +/*get TotalTp*/ + TotalTp = pAd->RalinkCounters.OneSecReceivedByteCount + + pAd->RalinkCounters.OneSecTransmittedByteCount; + DBGPRINT(RT_DEBUG_TRACE, ("TotalTp=%d\n", TotalTp)); + /* + *check the action + *1. under forceMode total Tp exceed th, or RTSEnable=1 + *2. Mactable size >0 + *3. MinRsssi<0 + *4. In Rx status mainly + *When applied on customer's projects, please fine tune above conditions, + *otherwise, SCS would be not enabled probably. + */ + + if ((((pAd->SCSCtrl.ForceMode == 1) && (TotalTp > pAd->SCSCtrl.SCSTrafficThreshold)) || + (RtsEnable == 1)) && ((pAd->MacTab.Size > 0) && + (pAd->SCSCtrl.SCSMinRssi < 0) && (RxRatio < 90))) { + if (RtsEnable == 1) { + /* Consider RTS PER & False-CCA */ + if (MaxRtsCount > (MaxRtsRtyCount + (MaxRtsRtyCount >> 1)) && + (pAd->SCSCtrl.FalseCCA) > (pAd->SCSCtrl.FalseCcaUpBond)) + Action = Decrease_Range; + else if ((MaxRtsCount + (MaxRtsCount >> 1)) < MaxRtsRtyCount || + (pAd->SCSCtrl.FalseCCA) < (pAd->SCSCtrl.FalseCcaLowBond)) + Action = Increase_Range; + else + Action = Keep_Range; + } else { + /* Consider False-CCA only */ + if (pAd->SCSCtrl.FalseCCA > (pAd->SCSCtrl.FalseCcaUpBond)) + Action = Decrease_Range; + else if (pAd->SCSCtrl.FalseCCA < (pAd->SCSCtrl.FalseCcaLowBond)) + Action = Increase_Range; + else + Action = Keep_Range; + } + DBGPRINT(RT_DEBUG_TRACE, ("Action=%d, RtsCount=%d, RtsRtyCount=%d, FalseCCA=%d\n", + Action, MaxRtsCount, MaxRtsRtyCount, pAd->SCSCtrl.FalseCCA)); + + if ((Action == Decrease_Range) && + (pAd->SCSCtrl.SCSStatus == SCS_STATUS_DEFAULT)) { + /*First time initial */ + if (pAd->SCSCtrl.SCSMinRssi > -86) { + pAd->SCSCtrl.AdjustSensitivity = -92; + /*DBGPRINT(RT_DEBUG_ERROR, ("%s(): SCS=M\n",__FUNCTION__));*/ + } + } else if ((Action == Decrease_Range) && + (pAd->SCSCtrl.SCSStatus != SCS_STATUS_DEFAULT)) { + if (pAd->SCSCtrl.CurrSensitivity + 2 <= pAd->SCSCtrl.RSSIBoundary) + pAd->SCSCtrl.AdjustSensitivity = pAd->SCSCtrl.CurrSensitivity + 2; + else if (pAd->SCSCtrl.CurrSensitivity > pAd->SCSCtrl.RSSIBoundary) + pAd->SCSCtrl.AdjustSensitivity = pAd->SCSCtrl.RSSIBoundary; + } else if ((Action == Increase_Range) && + (pAd->SCSCtrl.SCSStatus == SCS_STATUS_DEFAULT)) { + /*First time initial */ + /*Nothing to do.*/ + } else if ((Action == Increase_Range) && + (pAd->SCSCtrl.SCSStatus != SCS_STATUS_DEFAULT)) { + if (pAd->SCSCtrl.CurrSensitivity - 2 >= (-100)) { + pAd->SCSCtrl.AdjustSensitivity = pAd->SCSCtrl.CurrSensitivity - 2; + if (pAd->SCSCtrl.AdjustSensitivity > pAd->SCSCtrl.RSSIBoundary) + pAd->SCSCtrl.AdjustSensitivity = pAd->SCSCtrl.RSSIBoundary; + } + } + DBGPRINT(RT_DEBUG_TRACE, ("CurrSen=%d, AdjustSen=%d\n", + pAd->SCSCtrl.CurrSensitivity, pAd->SCSCtrl.AdjustSensitivity)); + + if (pAd->SCSCtrl.AdjustSensitivity > -54) + pAd->SCSCtrl.AdjustSensitivity = -54; + + if (pAd->SCSCtrl.CurrSensitivity != pAd->SCSCtrl.AdjustSensitivity) { + /*Apply to CR*/ + /*SCS=M*/ + if (pAd->SCSCtrl.AdjustSensitivity >= -100 && + pAd->SCSCtrl.AdjustSensitivity <= -84){ + AdjustStep = (pAd->SCSCtrl.AdjustSensitivity + 92) / 2; + CrValue = 0x56F0076f; + tmpCrValue = 0x7 + AdjustStep; + CrValue |= (tmpCrValue << 12); + CrValue |= (tmpCrValue << 16); + DBGPRINT(RT_DEBUG_ERROR, ("M AdjSensi=%d AdjStep=%d CrValue=%x\n", + pAd->SCSCtrl.AdjustSensitivity, AdjustStep, CrValue)); + RTMP_IO_WRITE32(pAd, CR_AGC_0, CrValue); + RTMP_IO_WRITE32(pAd, CR_AGC_0_RX1, CrValue); + RTMP_IO_WRITE32(pAd, CR_AGC_3, 0x81D0D5E3); + RTMP_IO_WRITE32(pAd, CR_AGC_3_RX1, 0x81D0D5E3); + pAd->SCSCtrl.CurrSensitivity = pAd->SCSCtrl.AdjustSensitivity; + pAd->SCSCtrl.SCSStatus = SCS_STATUS_MIDDLE; + + } + /*SCS=L*/ + else if (pAd->SCSCtrl.AdjustSensitivity > -84 && + pAd->SCSCtrl.AdjustSensitivity <= -72) { + AdjustStep = (pAd->SCSCtrl.AdjustSensitivity + 80) / 2; + CrValue = 0x6AF0006f; + tmpCrValue = 0x7 + AdjustStep; + CrValue |= (tmpCrValue << 8); + CrValue |= (tmpCrValue << 12); + CrValue |= (tmpCrValue << 16); + DBGPRINT(RT_DEBUG_ERROR, ("L AdjSensi=%d AdjStep=%d CrValue=%x\n", + pAd->SCSCtrl.AdjustSensitivity, AdjustStep, CrValue)); + RTMP_IO_WRITE32(pAd, CR_AGC_0, CrValue); + RTMP_IO_WRITE32(pAd, CR_AGC_0_RX1, CrValue); + RTMP_IO_WRITE32(pAd, CR_AGC_3, 0x8181D5E3); + RTMP_IO_WRITE32(pAd, CR_AGC_3_RX1, 0x8181D5E3); + pAd->SCSCtrl.CurrSensitivity = pAd->SCSCtrl.AdjustSensitivity; + pAd->SCSCtrl.SCSStatus = SCS_STATUS_LOW; + + } + /*SCS=UL*/ + else if (pAd->SCSCtrl.AdjustSensitivity >= -70 && + pAd->SCSCtrl.AdjustSensitivity <= -54) { + AdjustStep = (pAd->SCSCtrl.AdjustSensitivity + 62) / 2; + CrValue = 0x7FF0000f; + tmpCrValue = 0x6+AdjustStep; + CrValue |= (tmpCrValue << 4); + CrValue |= (tmpCrValue << 8); + CrValue |= (tmpCrValue << 12); + CrValue |= (tmpCrValue << 16); + DBGPRINT(RT_DEBUG_ERROR, ("UL AdjSensi=%d AdjStep=%d CrValue=%x\n", + pAd->SCSCtrl.AdjustSensitivity, AdjustStep, CrValue)); + RTMP_IO_WRITE32(pAd, CR_AGC_0, CrValue); + RTMP_IO_WRITE32(pAd, CR_AGC_0_RX1, CrValue); + RTMP_IO_WRITE32(pAd, CR_AGC_3, 0x818181E3); + RTMP_IO_WRITE32(pAd, CR_AGC_3_RX1, 0x818181E3); + pAd->SCSCtrl.CurrSensitivity = pAd->SCSCtrl.AdjustSensitivity; + pAd->SCSCtrl.SCSStatus = SCS_STATUS_ULTRA_LOW; + } + /*SCS=Defalt/H*/ + else{ + pAd->SCSCtrl.SCSStatus = SCS_STATUS_DEFAULT; + RTMP_IO_WRITE32(pAd, CR_AGC_0, pAd->SCSCtrl.CR_AGC_0_default); + RTMP_IO_WRITE32(pAd, CR_AGC_0_RX1, pAd->SCSCtrl.CR_AGC_0_default); + RTMP_IO_WRITE32(pAd, CR_AGC_3, pAd->SCSCtrl.CR_AGC_3_default); + RTMP_IO_WRITE32(pAd, CR_AGC_3_RX1, pAd->SCSCtrl.CR_AGC_3_default); + DBGPRINT(RT_DEBUG_ERROR, ("%s(): SCS=??? (Default)\n", __func__)); + } + } + + DBGPRINT(RT_DEBUG_TRACE, ("%s():miniRSSI=%d, RSSIBound=%d Action=%d AdjSensi=%d\n", + __func__, pAd->SCSCtrl.SCSMinRssi, pAd->SCSCtrl.RSSIBoundary, + Action, pAd->SCSCtrl.AdjustSensitivity)); + } else { + if (pAd->SCSCtrl.SCSStatus != SCS_STATUS_DEFAULT) { + RTMP_IO_WRITE32(pAd, CR_AGC_0, pAd->SCSCtrl.CR_AGC_0_default); + RTMP_IO_WRITE32(pAd, CR_AGC_0_RX1, pAd->SCSCtrl.CR_AGC_0_default); + RTMP_IO_WRITE32(pAd, CR_AGC_3, pAd->SCSCtrl.CR_AGC_3_default); + RTMP_IO_WRITE32(pAd, CR_AGC_3_RX1, pAd->SCSCtrl.CR_AGC_3_default); + pAd->SCSCtrl.SCSStatus = SCS_STATUS_DEFAULT; + pAd->SCSCtrl.CurrSensitivity = -102; + pAd->SCSCtrl.AdjustSensitivity = -102; + DBGPRINT(RT_DEBUG_TRACE, ("%s(): CSC=H (Default)\n", __func__)); + } + } + return TRUE; + +} +#endif /* SMART_CARRIER_SENSE_SUPPORT */ + diff --git a/chips/rtmp_chip.c b/chips/rtmp_chip.c index e5739e5..24b5d52 100755 --- a/chips/rtmp_chip.c +++ b/chips/rtmp_chip.c @@ -256,6 +256,7 @@ VOID mt_bcn_buf_init(RTMP_ADAPTER *pAd) pChipCap->FlgIsSupSpecBcnBuf = FALSE; pChipCap->BcnMaxHwNum = 16; pChipCap->BcnMaxNum = 16; + #if defined(MT7603_FPGA) || defined(MT7628_FPGA) || defined(MT7636_FPGA) pChipCap->WcidHwRsvNum = 20; #else diff --git a/common/ba_action.c b/common/ba_action.c index e5e620f..eb35cc5 100755 --- a/common/ba_action.c +++ b/common/ba_action.c @@ -403,7 +403,7 @@ static USHORT ba_indicate_reordering_mpdus_in_order( /* pass this frame up */ ANNOUNCE_REORDERING_PACKET(pAd, mpdu_blk); /* move to next sequence */ - StartSeq = mpdu_blk->Sequence; + StartSeq = (USHORT)mpdu_blk->Sequence; LastIndSeq = StartSeq; /* free mpdu_blk */ ba_mpdu_blk_free(pAd, mpdu_blk); @@ -460,7 +460,7 @@ static void ba_refresh_reordering_mpdus(RTMP_ADAPTER *pAd, BA_REC_ENTRY *pBAEntr /* pass this frame up */ ANNOUNCE_REORDERING_PACKET(pAd, mpdu_blk); - pBAEntry->LastIndSeq = mpdu_blk->Sequence; + pBAEntry->LastIndSeq = (USHORT)mpdu_blk->Sequence; ba_mpdu_blk_free(pAd, mpdu_blk); /* update last indicated sequence */ @@ -602,7 +602,7 @@ VOID BAOriSessionSetUp( pEntry->BAOriWcidArray[TID] = Idx; - BAWinSize = pAd->CommonCfg.BACapability.field.TxBAWinLimit; + BAWinSize = (UCHAR)(pAd->CommonCfg.BACapability.field.TxBAWinLimit); #ifdef MT76XX_BTCOEX_SUPPORT /* In coex mode, if TxBA size is specified, should update to this value */ @@ -648,7 +648,7 @@ VOID BAOriSessionAdd( UCHAR MaxPeerBufSize; STA_TR_ENTRY *tr_entry; - TID = pFrame->BaParm.TID; + TID = (UCHAR)pFrame->BaParm.TID; Idx = pEntry->BAOriWcidArray[TID]; pBAEntry =&pAd->BATable.BAOriEntry[Idx]; @@ -683,7 +683,7 @@ VOID BAOriSessionAdd( } pBAEntry->TimeOutValue = pFrame->TimeOutValue; - pBAEntry->amsdu_cap = pFrame->BaParm.AMSDUSupported; + pBAEntry->amsdu_cap = (UCHAR)pFrame->BaParm.AMSDUSupported; pBAEntry->ORI_BA_Status = Originator_Done; pAd->BATable.numDoneOriginator ++; @@ -728,7 +728,7 @@ BOOLEAN BARecSessionAdd( ASSERT(pEntry); /* find TID*/ - TID = pFrame->BaParm.TID; + TID = (UCHAR)pFrame->BaParm.TID; BAWinSize = min(((UCHAR)pFrame->BaParm.BufSize), (UCHAR)pAd->CommonCfg.BACapability.field.RxBAWinLimit); #ifdef MT76XX_BTCOEX_SUPPORT @@ -740,7 +740,7 @@ BOOLEAN BARecSessionAdd( #endif if (BAWinSize == 0) { - BAWinSize = pAd->CommonCfg.BACapability.field.RxBAWinLimit; + BAWinSize = (UCHAR)pAd->CommonCfg.BACapability.field.RxBAWinLimit; } /* get software BA rec array index, Idx*/ @@ -830,7 +830,7 @@ BA_REC_ENTRY *BATableAllocRecEntry(RTMP_ADAPTER *pAd, USHORT *Idx) /* get one */ pAd->BATable.numAsRecipient++; pBAEntry->REC_BA_Status = Recipient_USED; - *Idx = i; + *Idx = (USHORT)i; break; } } @@ -860,7 +860,7 @@ BA_ORI_ENTRY *BATableAllocOriEntry(RTMP_ADAPTER *pAd, USHORT *Idx) pAd->BATable.numAsOriginator++; pBAEntry->ORI_BA_Status = Originator_USED; pBAEntry->pAdapter = pAd; - *Idx = i; + *Idx = (USHORT)i; break; } } @@ -1129,8 +1129,8 @@ VOID BASessionTearDownALL(RTMP_ADAPTER *pAd, UCHAR Wcid) for (i=0; i<NUM_OF_TID; i++) { - BAOriSessionTearDown(pAd, Wcid, i, FALSE, FALSE); - BARecSessionTearDown(pAd, Wcid, i, FALSE); + BAOriSessionTearDown(pAd, Wcid, (UCHAR)i, FALSE, FALSE); + BARecSessionTearDown(pAd, Wcid, (UCHAR)i, FALSE); } } @@ -1207,7 +1207,7 @@ VOID BAOriSessionSetupTimeout( COPY_MAC_ADDR(AddbaReq.pAddr, pEntry->Addr); AddbaReq.Wcid = pEntry->wcid; AddbaReq.TID = pBAEntry->TID; - AddbaReq.BaBufSize = pAd->CommonCfg.BACapability.field.RxBAWinLimit; + AddbaReq.BaBufSize = (UCHAR)pAd->CommonCfg.BACapability.field.RxBAWinLimit; AddbaReq.TimeOutValue = 0; AddbaReq.Token = pBAEntry->Token; MlmeEnqueue(pAd, ACTION_STATE_MACHINE, MT2_MLME_ADD_BA_CATE, sizeof(MLME_ADDBA_REQ_STRUCT), (PVOID)&AddbaReq, 0); @@ -1458,7 +1458,7 @@ VOID PeerAddBAReqAction(RTMP_ADAPTER *pAd, MLME_QUEUE_ELEM *Elem) ADDframe.BaParm.BufSize = min(((UCHAR)pAddreqFrame->BaParm.BufSize), (UCHAR)pAd->CommonCfg.BACapability.field.RxBAWinLimit); if (ADDframe.BaParm.BufSize == 0) { //ADDframe.BaParm.BufSize = 64; - ADDframe.BaParm.BufSize = pAd->CommonCfg.BACapability.field.RxBAWinLimit; + ADDframe.BaParm.BufSize = (USHORT)pAd->CommonCfg.BACapability.field.RxBAWinLimit; } ADDframe.TimeOutValue = 0; /* pAddreqFrame->TimeOutValue; */ @@ -1516,7 +1516,8 @@ VOID PeerAddBARspAction(RTMP_ADAPTER *pAd, MLME_QUEUE_ELEM *Elem) break; default: /* check status == USED ??? */ - BAOriSessionTearDown(pAd, Elem->Wcid, pFrame->BaParm.TID, TRUE, FALSE); + BAOriSessionTearDown(pAd, Elem->Wcid, + (UCHAR)pFrame->BaParm.TID, TRUE, FALSE); break; } /* Rcv Decline StatusCode*/ @@ -1552,13 +1553,15 @@ VOID PeerDelBAAction( if (pDelFrame->DelbaParm.Initiator == ORIGINATOR) { DBGPRINT(RT_DEBUG_TRACE,("BA - PeerDelBAAction----> ORIGINATOR\n")); - BARecSessionTearDown(pAd, Elem->Wcid, pDelFrame->DelbaParm.TID, TRUE); + BARecSessionTearDown(pAd, + Elem->Wcid, (UCHAR)pDelFrame->DelbaParm.TID, TRUE); } else { DBGPRINT(RT_DEBUG_TRACE,("BA - PeerDelBAAction----> RECIPIENT, Reason = %d\n", pDelFrame->ReasonCode)); /*hex_dump("DelBA Frame", pDelFrame, Elem->MsgLen);*/ - BAOriSessionTearDown(pAd, Elem->Wcid, pDelFrame->DelbaParm.TID, TRUE, FALSE); + BAOriSessionTearDown(pAd, + Elem->Wcid, (UCHAR)pDelFrame->DelbaParm.TID, TRUE, FALSE); } } } @@ -2126,8 +2129,8 @@ VOID Indicate_AMPDU_Packet(RTMP_ADAPTER *pAd, RX_BLK *pRxBlk, UCHAR wdev_idx) TmpSeq = (MAXSEQ+1) + TmpSeq; WinStartSeq = (TmpSeq+1) & MAXSEQ; - ba_indicate_reordering_mpdus_le_seq(pAd, pBAEntry, WinStartSeq); - pBAEntry->LastIndSeq = WinStartSeq; /* TmpSeq; */ + ba_indicate_reordering_mpdus_le_seq(pAd, pBAEntry, (USHORT)WinStartSeq); + pBAEntry->LastIndSeq = (USHORT)WinStartSeq; /* TmpSeq; */ pBAEntry->LastIndSeqAtTimer = Now32; @@ -2135,7 +2138,7 @@ VOID Indicate_AMPDU_Packet(RTMP_ADAPTER *pAd, RX_BLK *pRxBlk, UCHAR wdev_idx) TmpSeq = ba_indicate_reordering_mpdus_in_order(pAd, pBAEntry, pBAEntry->LastIndSeq); if (TmpSeq != RESET_RCV_SEQ) - pBAEntry->LastIndSeq = TmpSeq; + pBAEntry->LastIndSeq = (USHORT)TmpSeq; #endif } } diff --git a/common/cmm_cfg.c b/common/cmm_cfg.c index 8dc14dc..e258e3a 100755 --- a/common/cmm_cfg.c +++ b/common/cmm_cfg.c @@ -572,7 +572,7 @@ INT RT_CfgSetWepKey( case 16: /*wep 128 Ascii type*/ #endif bKeyIsHex = FALSE; - pSharedKey->KeyLen = KeyLen; + pSharedKey->KeyLen = (UCHAR)KeyLen; NdisMoveMemory(pSharedKey->Key, keyString, KeyLen); break; @@ -587,7 +587,7 @@ INT RT_CfgSetWepKey( return FALSE; /*Not Hex value;*/ } bKeyIsHex = TRUE; - pSharedKey->KeyLen = KeyLen/2 ; + pSharedKey->KeyLen = (UCHAR)(KeyLen/2); AtoH(keyString, pSharedKey->Key, pSharedKey->KeyLen); break; @@ -815,19 +815,20 @@ INT RtmpIoctl_rt_ioctl_giwname( if (CurOpMode == OPMODE_AP) { + /* For SIOCGIWNAME, struct iwreq_data.name's size is IFNAMSIZ (16). */ #ifdef P2P_SUPPORT if (pObj->ioctl_if_type == INT_P2P) { if (P2P_CLI_ON(pAd)) - strcpy(pData, "Ralink P2P Cli"); + strncpy(pData, "Ralink P2P Cli", IFNAMSIZ); else if (P2P_GO_ON(pAd)) - strcpy(pData, "Ralink P2P GO"); + strncpy(pData, "Ralink P2P GO", IFNAMSIZ); else - strcpy(pData, "Ralink P2P"); + strncpy(pData, "Ralink P2P", IFNAMSIZ); } else #endif /* P2P_SUPPORT */ - strcpy(pData, "RTWIFI SoftAP"); + strncpy(pData, "RTWIFI SoftAP", IFNAMSIZ); } return NDIS_STATUS_SUCCESS; @@ -1501,25 +1502,32 @@ INT RTMP_COM_IoctlHandle( break; case CMD_RTPRIV_IOCTL_INF_STATS_GET: - /* get statistics */ - { - RT_CMD_STATS *pStats = (RT_CMD_STATS *)pData; - pStats->pStats = pAd->stats; - if(pAd->OpMode == OPMODE_STA) - { - pStats->rx_packets = pAd->WlanCounters.ReceivedFragmentCount.QuadPart; - pStats->tx_packets = pAd->WlanCounters.TransmittedFragmentCount.QuadPart; - pStats->rx_bytes = pAd->RalinkCounters.ReceivedByteCount; - pStats->tx_bytes = pAd->RalinkCounters.TransmittedByteCount; - pStats->rx_errors = pAd->Counters8023.RxErrors; - pStats->tx_errors = pAd->Counters8023.TxErrors; - pStats->multicast = pAd->WlanCounters.MulticastReceivedFrameCount.QuadPart; /* multicast packets received*/ - pStats->collisions = 0; /* Collision packets*/ - pStats->rx_over_errors = pAd->Counters8023.RxNoBuffer; /* receiver ring buff overflow*/ - pStats->rx_crc_errors = 0;/*pAd->WlanCounters.FCSErrorCount; recved pkt with crc error*/ - pStats->rx_frame_errors = 0; /* recv'd frame alignment error*/ - pStats->rx_fifo_errors = pAd->Counters8023.RxNoBuffer; /* recv'r fifo overrun*/ - } + /* get statistics */ + { + RT_CMD_STATS *pStats = (RT_CMD_STATS *)pData; + + pStats->pStats = pAd->stats; + if (pAd->OpMode == OPMODE_STA) { + pStats->rx_packets = + (ULONG)pAd->WlanCounters.ReceivedFragmentCount.QuadPart; + pStats->tx_packets = + (ULONG)pAd->WlanCounters.TransmittedFragmentCount.QuadPart; + pStats->rx_bytes = pAd->RalinkCounters.ReceivedByteCount; + pStats->tx_bytes = pAd->RalinkCounters.TransmittedByteCount; + pStats->rx_errors = pAd->Counters8023.RxErrors; + pStats->tx_errors = pAd->Counters8023.TxErrors; + /* multicast packets received*/ + pStats->multicast = + (ULONG)pAd->WlanCounters.MulticastReceivedFrameCount.QuadPart; + pStats->collisions = 0; /* Collision packets*/ + /* receiver ring buff overflow*/ + pStats->rx_over_errors = pAd->Counters8023.RxNoBuffer; + /*pAd->WlanCounters.FCSErrorCount; recved pkt with crc error*/ + pStats->rx_crc_errors = 0; + pStats->rx_frame_errors = 0; /* recv'd frame alignment error*/ + /* recv'r fifo overrun*/ + pStats->rx_fifo_errors = pAd->Counters8023.RxNoBuffer; + } #ifdef CONFIG_AP_SUPPORT else if(pAd->OpMode == OPMODE_AP) { @@ -1566,7 +1574,7 @@ INT RTMP_COM_IoctlHandle( pStats->rx_fifo_errors = 0; /* recv'r fifo overrun*/ } #endif - } + } break; case CMD_RTPRIV_IOCTL_INF_IW_STATUS_GET: @@ -1626,15 +1634,17 @@ INT RTMP_COM_IoctlHandle( #ifdef CONFIG_STA_SUPPORT if (CurOpMode == OPMODE_STA) - pStats->qual = ((pAd->Mlme.ChannelQuality * 12)/10 + 10); + pStats->qual = (UINT8)((pAd->Mlme.ChannelQuality * 12)/10 + 10); #endif /* CONFIG_STA_SUPPORT */ #ifdef CONFIG_AP_SUPPORT if (CurOpMode == OPMODE_AP) { if (pMacEntry != NULL) - pStats->qual = ((pMacEntry->ChannelQuality * 12)/10 + 10); + pStats->qual = + (UINT8)((pMacEntry->ChannelQuality * 12)/10 + 10); else - pStats->qual = ((pAd->Mlme.ChannelQuality * 12)/10 + 10); + pStats->qual = + (UINT8)((pAd->Mlme.ChannelQuality * 12)/10 + 10); } #endif /* CONFIG_AP_SUPPORT */ @@ -1669,18 +1679,14 @@ INT RTMP_COM_IoctlHandle( #endif /* CONFIG_AP_SUPPORT */ #ifdef CONFIG_AP_SUPPORT - pStats->noise = RTMPMaxRssi(pAd, pAd->ApCfg.RssiSample.AvgRssi[0], - pAd->ApCfg.RssiSample.AvgRssi[1], - pAd->ApCfg.RssiSample.AvgRssi[2]) - - RTMPMinSnr(pAd, pAd->ApCfg.RssiSample.AvgSnr[0], - pAd->ApCfg.RssiSample.AvgSnr[1]); + pStats->noise = RTMPMaxNoise(pAd, pAd->ApCfg.RssiSample.LastNoiseLevel[0], + pAd->ApCfg.RssiSample.LastNoiseLevel[1], + pAd->ApCfg.RssiSample.LastNoiseLevel[2]); #endif /* CONFIG_AP_SUPPORT */ #ifdef CONFIG_STA_SUPPORT - pStats->noise = RTMPMaxRssi(pAd, pAd->StaCfg.RssiSample.AvgRssi[0], - pAd->StaCfg.RssiSample.AvgRssi[1], - pAd->StaCfg.RssiSample.AvgRssi[2]) - - RTMPMinSnr(pAd, pAd->StaCfg.RssiSample.AvgSnr[0], - pAd->StaCfg.RssiSample.AvgSnr[1]); + pStats->noise = RTMPMaxNoise(pAd, pAd->StaCfg.RssiSample.LastNoiseLevel[0], + pAd->StaCfg.RssiSample.LastNoiseLevel[1], + pAd->StaCfg.RssiSample.LastNoiseLevel[2]); #endif /* CONFIG_STA_SUPPORT */ } break; @@ -1726,6 +1732,13 @@ INT RTMP_COM_IoctlHandle( #ifdef CONFIG_ATE #ifdef CONFIG_QA case CMD_RTPRIV_IOCTL_ATE: + if (!wrq) { + DBGPRINT(RT_DEBUG_WARN, + ("null wrq in CMD_RTPRIV_IOCTL_ATE\n")); + Status = -EINVAL; + break; + } + RtmpDoAte(pAd, wrq, pData); break; #endif /* CONFIG_QA */ @@ -1751,6 +1764,7 @@ INT RTMP_COM_IoctlHandle( *(UCHAR *)(pData+i) = mac_addr[i]; break; } + #ifdef CONFIG_AP_SUPPORT case CMD_RTPRIV_IOCTL_AP_SIOCGIWRATEQ: /* handle for SIOCGIWRATEQ */ @@ -1775,11 +1789,11 @@ INT RTMP_COM_IoctlHandle( #endif /* WDS_SUPPORT */ HtPhyMode = pAd->ApCfg.MBSSID[pObj->ioctl_if].wdev.HTPhyMode; - RtmpDrvMaxRateGet(pAd, HtPhyMode.field.MODE, HtPhyMode.field.ShortGI, - HtPhyMode.field.BW, HtPhyMode.field.MCS, + RtmpDrvMaxRateGet(pAd, (UINT8)HtPhyMode.field.MODE, (UINT8)HtPhyMode.field.ShortGI, + (UINT8)HtPhyMode.field.BW, (UINT8)HtPhyMode.field.MCS, (UINT32 *)&pRate->BitRate); } - break; + break; #endif /* CONFIG_AP_SUPPORT */ case CMD_RTPRIV_IOCTL_SIOCGIWNAME: @@ -1797,7 +1811,6 @@ INT RTMP_COM_IoctlHandle( break; #endif /* CONFIG_TSO_SUPPORT */ } - #ifdef RT_CFG80211_SUPPORT if ((CMD_RTPRIV_IOCTL_80211_START <= cmd) && (cmd <= CMD_RTPRIV_IOCTL_80211_END)) @@ -2131,7 +2144,7 @@ INT Set_MultiMacAddrExt_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) INT set_tssi_enable(RTMP_ADAPTER *pAd, RTMP_STRING *arg) { - UINT8 tssi_enable = 0; + long tssi_enable = 0; tssi_enable = simple_strtol(arg, 0, 10); @@ -2142,7 +2155,7 @@ INT set_tssi_enable(RTMP_ADAPTER *pAd, RTMP_STRING *arg) pAd->chipCap.tssi_enable = FALSE; DBGPRINT(RT_DEBUG_OFF, ("turn off TSS mechanism\n")); } else { - DBGPRINT(RT_DEBUG_OFF, ("illegal param(%u)\n", tssi_enable)); + DBGPRINT(RT_DEBUG_OFF, ("illegal param(%ld)\n", tssi_enable)); return FALSE; } return TRUE; @@ -2242,7 +2255,8 @@ INT set_fw_debug(RTMP_ADAPTER *pAd, RTMP_STRING *arg) INT set_get_fid(RTMP_ADAPTER *pAd, RTMP_STRING *arg) { //TODO: Carter, at present, only can read pkt in Port2(LMAC port) - volatile UCHAR q_idx = 0, loop = 0, dw_idx = 0; + UCHAR loop = 0, dw_idx = 0; + long q_idx = 0; UINT32 head_fid_addr = 0, dw_content, next_fid_addr = 0; volatile UINT32 value = 0x00000000L; q_idx = simple_strtol(arg, 0, 10); @@ -2253,7 +2267,7 @@ INT set_get_fid(RTMP_ADAPTER *pAd, RTMP_STRING *arg) head_fid_addr = head_fid_addr & 0xfff; if (head_fid_addr == 0xfff) { - DBGPRINT(RT_DEBUG_ERROR, ("%s, q_idx:%d empty!!\n", __func__, q_idx)); + DBGPRINT(RT_DEBUG_ERROR, ("%s, q_idx:%ld empty!!\n", __func__, q_idx)); return TRUE; } @@ -2345,7 +2359,7 @@ INT set_fw_log(RTMP_ADAPTER *pAd, RTMP_STRING *arg) LogType = simple_strtol(arg, 0, 10); if (LogType < 3) - CmdFwLog2Host(pAd, LogType); + CmdFwLog2Host(pAd, (UINT8)LogType); else DBGPRINT(RT_DEBUG_OFF, (":%s: Unknown Log Type = %d\n", __FUNCTION__, LogType)); @@ -2513,7 +2527,7 @@ INT Set_themal_sensor(RTMP_ADAPTER *pAd, RTMP_STRING *arg) if ((value == 0) || (value == 1)) { #if defined(MT7603) || defined(MT7628) - temperature = MtAsicGetThemalSensor(pAd, value); + temperature = MtAsicGetThemalSensor(pAd, (CHAR)value); DBGPRINT(RT_DEBUG_OFF, ("%s: ThemalSensor = 0x%x\n", __FUNCTION__, temperature)); #else CmdGetThemalSensorResult(pAd, value); @@ -2530,8 +2544,8 @@ INT Set_rx_pspoll_filter_proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) UINT32 value; value = simple_strtol(arg, 0, 10); - pAd->rx_pspoll_filter = value; - MtAsicSetRxPspollFilter(pAd, pAd->rx_pspoll_filter); + pAd->rx_pspoll_filter = (USHORT)value; + MtAsicSetRxPspollFilter(pAd, (CHAR)pAd->rx_pspoll_filter); DBGPRINT(RT_DEBUG_OFF, (":%s: rx_pspoll_filter=%d\n", __FUNCTION__, pAd->rx_pspoll_filter)); return TRUE; @@ -2541,7 +2555,7 @@ INT Set_rx_pspoll_filter_proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) #ifdef SINGLE_SKU_V2 INT SetSKUEnable_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) { - UCHAR value; + long value; value = simple_strtol(arg, 0, 10); diff --git a/common/cmm_data.c b/common/cmm_data.c index 345e5b5..bb85d32 100755 --- a/common/cmm_data.c +++ b/common/cmm_data.c @@ -303,10 +303,8 @@ VOID ParseRxVPacket(RTMP_ADAPTER *pAd, UINT32 Type, RX_BLK *RxBlk, UCHAR *Data) RX_VECTOR1_3TH_CYCLE *RXV1_3TH_CYCLE = NULL; #endif /* CONFIG_QA */ RX_VECTOR1_4TH_CYCLE *RXV1_4TH_CYCLE = NULL; -#ifdef CONFIG_QA RX_VECTOR1_5TH_CYCLE *RXV1_5TH_CYCLE = NULL; -#endif /* CONFIG_QA */ - //RX_VECTOR1_6TH_CYCLE *RXV1_6TH_CYCLE = NULL; + RX_VECTOR1_6TH_CYCLE *RXV1_6TH_CYCLE = NULL; RX_VECTOR2_1ST_CYCLE *RXV2_1ST_CYCLE = NULL; RX_VECTOR2_2ND_CYCLE *RXV2_2ND_CYCLE = NULL; RX_VECTOR2_3TH_CYCLE *RXV2_3TH_CYCLE = NULL; @@ -319,10 +317,9 @@ VOID ParseRxVPacket(RTMP_ADAPTER *pAd, UINT32 Type, RX_BLK *RxBlk, UCHAR *Data) RXV1_3TH_CYCLE = (RX_VECTOR1_3TH_CYCLE *)(Data + 8); #endif /* CONFIG_QA */ RXV1_4TH_CYCLE = (RX_VECTOR1_4TH_CYCLE *)(Data + 12); -#ifdef CONFIG_QA RXV1_5TH_CYCLE = (RX_VECTOR1_5TH_CYCLE *)(Data + 16); -#endif /* CONFIG_QA */ - //RXV1_6TH_CYCLE = (RX_VECTOR1_6TH_CYCLE *)(Data + 20); + RXV1_6TH_CYCLE = (RX_VECTOR1_6TH_CYCLE *)(Data + 20); + RXV2_2ND_CYCLE = (RX_VECTOR2_2ND_CYCLE *)(Data + 28); } else if (Type == RMAC_RX_PKT_TYPE_RX_TXRXV) { @@ -334,10 +331,9 @@ VOID ParseRxVPacket(RTMP_ADAPTER *pAd, UINT32 Type, RX_BLK *RxBlk, UCHAR *Data) RXV1_3TH_CYCLE = (RX_VECTOR1_3TH_CYCLE *)(Data + 16); #endif /* CONFIG_QA */ RXV1_4TH_CYCLE = (RX_VECTOR1_4TH_CYCLE *)(Data + 20); -#ifdef CONFIG_QA RXV1_5TH_CYCLE = (RX_VECTOR1_5TH_CYCLE *)(Data + 24); -#endif /* CONFIG_QA */ - //RXV1_6TH_CYCLE = (RX_VECTOR1_6TH_CYCLE *)(Data + 28); + + RXV1_6TH_CYCLE = (RX_VECTOR1_6TH_CYCLE *)(Data + 28); RXV2_1ST_CYCLE = (RX_VECTOR2_1ST_CYCLE *)(Data + 32); RXV2_2ND_CYCLE = (RX_VECTOR2_2ND_CYCLE *)(Data + 36); RXV2_3TH_CYCLE = (RX_VECTOR2_3TH_CYCLE *)(Data + 40); @@ -349,9 +345,12 @@ VOID ParseRxVPacket(RTMP_ADAPTER *pAd, UINT32 Type, RX_BLK *RxBlk, UCHAR *Data) #ifdef CONFIG_QA pAd->ATECtrl.RCPI0 = RXV1_3TH_CYCLE->Rcpi0; pAd->ATECtrl.RCPI1 = RXV1_3TH_CYCLE->Rcpi1; - pAd->ATECtrl.FreqOffsetFromRx = RXV1_5TH_CYCLE->FoE; - pAd->ATECtrl.SNR0 = RXV1_5TH_CYCLE->LTF_SNR0; - pAd->ATECtrl.SNR1 = RXV2_2ND_CYCLE->OfdmLtfSNR1; + if (RXV1_5TH_CYCLE) { + pAd->ATECtrl.FreqOffsetFromRx = RXV1_5TH_CYCLE->FoE; + pAd->ATECtrl.SNR0 = RXV1_5TH_CYCLE->LTF_SNR0; + } + if (RXV2_2ND_CYCLE) + pAd->ATECtrl.SNR1 = RXV2_2ND_CYCLE->OfdmLtfSNR1; pAd->ATECtrl.RSSI0 = RXV1_3TH_CYCLE->Rcpi0/2 - 110; pAd->ATECtrl.RSSI1 = RXV1_3TH_CYCLE->Rcpi1/2 - 110; #endif /* CONFIG_QA */ @@ -373,17 +372,32 @@ VOID ParseRxVPacket(RTMP_ADAPTER *pAd, UINT32 Type, RX_BLK *RxBlk, UCHAR *Data) //RxBlk->rx_signal.raw_rssi[1] = (RXV1_3TH_CYCLE->Rcpi1 - 220) / 2; RxBlk->rx_signal.raw_rssi[0] = (CHAR)RXV1_4TH_CYCLE->IBRssi0; RxBlk->rx_signal.raw_rssi[1] = (CHAR)RXV1_4TH_CYCLE->IBRssi1; + if (RXV1_5TH_CYCLE) + RxBlk->rx_signal.raw_snr[0] = RXV1_5TH_CYCLE->LTF_SNR0; + if (RXV2_2ND_CYCLE) + RxBlk->rx_signal.raw_snr[1] = RXV2_2ND_CYCLE->OfdmLtfSNR1; + + if (RXV1_6TH_CYCLE) { +#ifdef CONFIG_AP_SUPPORT + pAd->ApCfg.RssiSample.LastNoiseLevel[0] = ((RXV1_6TH_CYCLE->Nf0 - 254)/2); + pAd->ApCfg.RssiSample.LastNoiseLevel[1] = ((RXV1_6TH_CYCLE->Nf1 - 254)/2); +#endif +#ifdef CONFIG_STA_SUPPORT + pAd->StaCfg.RssiSample.LastNoiseLevel[0] = ((RXV1_6TH_CYCLE->Nf0 - 254)/2); + pAd->StaCfg.RssiSample.LastNoiseLevel[1] = ((RXV1_6TH_CYCLE->Nf1 - 254)/2); +#endif + } //RxBlk->rx_signal.raw_snr[0] = rxwi_n->bbp_rxinfo[0]; //RxBlk->rx_signal.raw_snr[1] = rxwi_n->bbp_rxinfo[1]; //RxBlk->rx_signal.freq_offset = rxwi_n->bbp_rxinfo[4]; - RxBlk->rx_rate.field.MODE = RXV1_1ST_CYCLE->TxMode; - RxBlk->rx_rate.field.MCS = RXV1_1ST_CYCLE->TxRate; - RxBlk->rx_rate.field.ldpc = RXV1_1ST_CYCLE->HtAdCode; - RxBlk->rx_rate.field.BW = RXV1_1ST_CYCLE->FrMode; - RxBlk->rx_rate.field.STBC = RXV1_1ST_CYCLE->HtStbc; - RxBlk->rx_rate.field.ShortGI = RXV1_1ST_CYCLE->HtShortGi; + RxBlk->rx_rate.field.MODE = (USHORT)RXV1_1ST_CYCLE->TxMode; + RxBlk->rx_rate.field.MCS = (USHORT)RXV1_1ST_CYCLE->TxRate; + RxBlk->rx_rate.field.ldpc = (USHORT)RXV1_1ST_CYCLE->HtAdCode; + RxBlk->rx_rate.field.BW = (USHORT)RXV1_1ST_CYCLE->FrMode; + RxBlk->rx_rate.field.STBC = (USHORT)RXV1_1ST_CYCLE->HtStbc; + RxBlk->rx_rate.field.ShortGI = (USHORT)RXV1_1ST_CYCLE->HtShortGi; } @@ -450,7 +464,7 @@ static inline INT32 mt_rx_info_2_blk( //dump_rmac_info(pAd, RMACInfo); - pRxBlk->MPDUtotalByteCnt = rx_base->rxd_0.rx_byte_cnt - RMACInfoLen; + pRxBlk->MPDUtotalByteCnt = (USHORT)(rx_base->rxd_0.rx_byte_cnt - RMACInfoLen); if (rx_base->rxd_1.hdr_offset == 1) { pRxBlk->MPDUtotalByteCnt -= 2; @@ -458,10 +472,10 @@ static inline INT32 mt_rx_info_2_blk( } pRxBlk->DataSize = pRxBlk->MPDUtotalByteCnt; - pRxBlk->wcid = rx_base->rxd_2.wlan_idx; - pRxBlk->bss_idx = rx_base->rxd_1.bssid; - pRxBlk->key_idx = rx_base->rxd_1.key_id; - pRxBlk->TID = rx_base->rxd_2.tid; + pRxBlk->wcid = (UCHAR)rx_base->rxd_2.wlan_idx; + pRxBlk->bss_idx = (UCHAR)rx_base->rxd_1.bssid; + pRxBlk->key_idx = (UCHAR)rx_base->rxd_1.key_id; + pRxBlk->TID = (UCHAR)rx_base->rxd_2.tid; pRxBlk->TimeStamp = RxdGrp2->timestamp; pRxBlk->pRxInfo->U2M = rx_base->rxd_1.u2m; @@ -608,7 +622,7 @@ UINT32 parse_rx_packet_type(RTMP_ADAPTER *ad, RX_BLK *rx_blk, VOID *rx_packet) *(((UINT32 *)txs_d3)) = SWAP32(*(((UINT32 *)txs_d3))); *(((UINT32 *)txs_d4)) = SWAP32(*(((UINT32 *)txs_d4))); #endif - ParseTxSPacket(ad, txs_d4->pid, txs_d0->txsfm, ptr); + ParseTxSPacket(ad, txs_d4->pid, (UINT8)txs_d0->txsfm, ptr); ptr += 20; } @@ -1525,6 +1539,11 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(RTMP_ADAPTER *pAd, UCHAR QueIdx, PNDIS_PACK UCHAR TxPwrAdj = 0; #endif /* SPECIFIC_TX_POWER_SUPPORT */ #endif /* CONFIG_AP_SUPPORT */ +#ifdef RT_CFG80211_P2P_SUPPORT + struct ieee80211_mgmt *mgmt; + BOOLEAN is_P2P_action_frame = FALSE; +#endif /* RT_CFG80211_P2P_SUPPORT */ + UCHAR prot = 0; UCHAR apidx = 0; ULONG Flags = 0; @@ -1663,15 +1682,22 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(RTMP_ADAPTER *pAd, UCHAR QueIdx, PNDIS_PACK #endif /* P2P_SUPPORT */ #ifdef RT_CFG80211_P2P_SUPPORT -// INT wdev_idx = rtmp_wdev_idx_find_by_p2p_ifaddr(pAd, pHeader_802_11->Addr2); + /* make sure that p2p does not use cck rate */ + mgmt = (struct ieee80211_mgmt *)pHeader_802_11; + if (ieee80211_is_action(mgmt->frame_control)) { + PP2P_PUBLIC_FRAME pP2PFrame = (PP2P_PUBLIC_FRAME) pHeader_802_11; + + if ((pP2PFrame->p80211Header.FC.SubType == SUBTYPE_ACTION) && + (pP2PFrame->Category == CATEGORY_PUBLIC) && + (pP2PFrame->Action == ACTION_WIFI_DIRECT)) + is_P2P_action_frame = TRUE; + } -// if (wdev_idx > 0) - { - if (pAd->CommonCfg.MlmeTransmit.field.MODE == MODE_CCK) - { - pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_OFDM; - pAd->CommonCfg.MlmeTransmit.field.MCS = MCS_RATE_6; - } + if ((pAd->CommonCfg.MlmeTransmit.field.MODE == MODE_CCK) && + (pAd->ScanCtrl.ScanType == SCAN_P2P || + (is_P2P_action_frame))) { + pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_OFDM; + pAd->CommonCfg.MlmeTransmit.field.MCS = MCS_RATE_6; } #endif /* RT_CFG80211_SUPPORT */ @@ -1879,7 +1905,7 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(RTMP_ADAPTER *pAd, UCHAR QueIdx, PNDIS_PACK pEntry = MacTableLookup(pAd, pHeader_802_11->Addr1); if (pEntry) - wcid = pEntry->Aid; + wcid = (UCHAR)pEntry->Aid; } #endif } @@ -1995,7 +2021,7 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(RTMP_ADAPTER *pAd, UCHAR QueIdx, PNDIS_PACK PID = PID_CTL_BAR; mac_info.hdr_len = 16; mac_info.SpeEn = 0; - mac_info.TID = pBar->BarControl.TID; + mac_info.TID = (UCHAR)pBar->BarControl.TID; if (pAd->CommonCfg.Channel > 14) { /* 2.4G */ TransmitSetting.field.MODE = MODE_OFDM; @@ -2058,19 +2084,19 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(RTMP_ADAPTER *pAd, UCHAR QueIdx, PNDIS_PACK if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) && RTMPEnterPsmNullBitStatus(&pAd->StaCfg.PwrMgmt)) { - DBGPRINT(RT_DEBUG_INFO, ("%s(line=%d)\n", __FUNCTION__, __LINE__)); + DBGPRINT(RT_DEBUG_TRACE, ("%s(line=%d)\n", __FUNCTION__, __LINE__)); RTMPClearEnterPsmNullBit(&pAd->StaCfg.PwrMgmt); TxSTypeCtlPerPkt(pAd, mac_info.PID, TXS_FORMAT0, FALSE, TRUE, FALSE, TXS_DUMP_REPEAT); } else { - DBGPRINT(RT_DEBUG_INFO, ("%s(line=%d)\n", __FUNCTION__, __LINE__)); + DBGPRINT(RT_DEBUG_TRACE, ("%s(line=%d)\n", __FUNCTION__, __LINE__)); TxSTypeCtlPerPkt(pAd, mac_info.PID, TXS_FORMAT0, FALSE, FALSE, FALSE, TXS_DUMP_REPEAT); } } #endif /* MT_MAC */ #endif /* CONFIG_STA_SUPPORT */ - DBGPRINT(RT_DEBUG_INFO, ("%s(line=%d), mac_info.PsmBySw(%d)\n", __FUNCTION__, __LINE__, mac_info.PsmBySw)); + DBGPRINT(RT_DEBUG_TRACE, ("%s(line=%d), mac_info.PsmBySw(%d)\n", __FUNCTION__, __LINE__, mac_info.PsmBySw)); if(pCfg80211_ctrl->TxStatusInUsed && pCfg80211_ctrl->IsNeedTxStatus) { DBGPRINT(RT_DEBUG_TRACE, ("%s %d, PID (%d)\n", __FUNCTION__, __LINE__, mac_info.PID)); @@ -2835,7 +2861,7 @@ VOID rtmp_tx_swq_dump(RTMP_ADAPTER *pAd, INT qidx) VOID rtmp_ps_init(RTMP_ADAPTER *pAd) { - UINT32 i= 0; + UCHAR i = 0; /*initial PS Token Queue*/ DlListInit(&pAd->psTokenQueue); @@ -2890,7 +2916,7 @@ INT rtmp_psDeq_req(RTMP_ADAPTER *pAd) struct WCID_TABLE *psEntry = NULL; struct tx_swq_fifo *fifo_swq; - UCHAR cnt=0,i=0; + INT32 cnt = 0, i = 0; INT32 capCount=0; /*remove first psToken now, should check WCID requeue when report*/ do { @@ -3176,10 +3202,10 @@ INT rtmp_deq_req(RTMP_ADAPTER *pAd, INT cnt, struct dequeue_info *info) info->full_qid[2] = FALSE; info->full_qid[3] = FALSE; } else { - info->q_max_cnt[0] = cnt; - info->q_max_cnt[1] = cnt; - info->q_max_cnt[2] = cnt; - info->q_max_cnt[3] = cnt; + info->q_max_cnt[0] = (UCHAR)cnt; + info->q_max_cnt[1] = (UCHAR)cnt; + info->q_max_cnt[2] = (UCHAR)cnt; + info->q_max_cnt[3] = (UCHAR)cnt; } info->inited = 1; } @@ -3751,7 +3777,7 @@ VOID RTMPDeQueuePacket( //NdisZeroMemory((UCHAR *)&deq_info, sizeof(deq_info)); - deq_info.target_wcid = ((wcid == WCID_ALL) ? MAX_LEN_OF_TR_TABLE : wcid); + deq_info.target_wcid = (UCHAR)((wcid == WCID_ALL) ? MAX_LEN_OF_TR_TABLE : wcid); deq_info.target_que = QIdx; do diff --git a/common/cmm_data_usb.c b/common/cmm_data_usb.c index afd1c82..3714b9f 100755 --- a/common/cmm_data_usb.c +++ b/common/cmm_data_usb.c @@ -12,7 +12,7 @@ NDIS_STATUS RTUSBFreeDescriptorRelease(RTMP_ADAPTER *pAd, UCHAR BulkOutPipeId) { HT_TX_CONTEXT *pHTTXContext; - unsigned long IrqFlags; + unsigned long IrqFlags = 0; pHTTXContext = &pAd->TxContext[BulkOutPipeId]; @@ -49,7 +49,7 @@ NDIS_STATUS RTUSBFreeDescRequest( IN UINT32 req_cnt) { NDIS_STATUS Status = NDIS_STATUS_FAILURE; - unsigned long IrqFlags; + unsigned long IrqFlags = 0; HT_TX_CONTEXT *pHTTXContext; #ifdef MULTI_WMM_SUPPORT @@ -144,7 +144,7 @@ BOOLEAN RTUSBNeedQueueBackForAgg(RTMP_ADAPTER *pAd, UCHAR BulkOutPipeId) { HT_TX_CONTEXT *pHTTXContext; BOOLEAN needQueBack = FALSE; - unsigned long IrqFlags; + unsigned long IrqFlags = 0; pHTTXContext = &pAd->TxContext[BulkOutPipeId]; @@ -579,7 +579,7 @@ USHORT RtmpUSB_WriteFragTxResource( PUCHAR pWirelessPacket = NULL; UCHAR QueIdx; NDIS_STATUS Status; - unsigned long IrqFlags; + unsigned long IrqFlags = 0; UINT32 USBDMApktLen = 0, DMAHdrLen, padding; #ifdef USB_BULK_BUF_ALIGMENT BOOLEAN bLasAlignmentsectiontRound = FALSE; @@ -794,7 +794,7 @@ USHORT RtmpUSB_WriteSingleTxResource( //TXWI_STRUC *pTxWI; UCHAR *pWirelessPacket, *buf; UCHAR QueIdx; - unsigned long IrqFlags; + unsigned long IrqFlags = 0; NDIS_STATUS Status; UINT32 hdr_copy_len, hdr_len, dma_len = 0, padding; #ifndef USB_BULK_BUF_ALIGMENT @@ -1054,6 +1054,11 @@ USHORT RtmpUSB_WriteSingleTxResource( #ifdef USB_BULK_BUF_ALIGMENT INT idx=0; #endif + if (QueIdx >= NUM_OF_TX_RING) { + DBGPRINT(RT_DEBUG_ERROR, ("%s: Invalid QueIdx (%d)\n" + , __func__, QueIdx)); + return NDIS_STATUS_FAILURE; + } RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); pHTTXContext = &pAd->TxContext[QueIdx]; fillOffset = pHTTXContext->CurWritePosition; @@ -1321,7 +1326,7 @@ USHORT RtmpUSB_WriteMultiTxResource( UCHAR *pWirelessPacket = NULL; UCHAR QueIdx; NDIS_STATUS Status; - unsigned long IrqFlags; + unsigned long IrqFlags = 0; #ifdef USB_BULK_BUF_ALIGMENT INT idx=0; #endif @@ -1486,7 +1491,7 @@ VOID RtmpUSB_FinalWriteTxResource( TXWI_STRUC *pTxWI; #endif UINT32 USBDMApktLen, padding; - unsigned long IrqFlags; + unsigned long IrqFlags = 0; PUCHAR pWirelessPacket; #ifdef MT_MAC TMAC_TXD_S *txd_s; @@ -1713,12 +1718,12 @@ int RtmpUSBMgmtKickOut( { TXINFO_STRUC *pTxInfo; ULONG BulkOutSize; - UCHAR padLen; + ULONG padLen; PUCHAR pDest; ULONG SwIdx; TX_CONTEXT *pMLMEContext = NULL; TX_CONTEXT *pBcnContext = NULL; - ULONG IrqFlags; + ULONG IrqFlags = 0; RTMP_IRQ_LOCK(&pAd->MLMEBulkOutLock, IrqFlags); #if defined(MT7603) diff --git a/common/cmm_info.c b/common/cmm_info.c index dfbf565..29ad17a 100755 --- a/common/cmm_info.c +++ b/common/cmm_info.c @@ -71,16 +71,115 @@ INT SetManualTxOPLowBound(RTMP_ADAPTER *pAd, RTMP_STRING *arg) Return: ========================================================================== */ +#ifdef SMART_CARRIER_SENSE_SUPPORT +INT SetSCSEnable_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) +{ + UINT32 value; + + value = simple_strtol(arg, 0, 10); + if (value > 500) { + DBGPRINT(RT_DEBUG_OFF, ("==>%s (Traffice Threshold=%d)\n", __FUNCTION__, value)); + } else { + if (value == 1) { + pAd->SCSCtrl.SCSEnable = SCS_ENABLE; + DBGPRINT(RT_DEBUG_OFF, ("==>%s (ON)\n", __FUNCTION__)); + } else if (value == 0) { + pAd->SCSCtrl.SCSEnable = SCS_DISABLE; + DBGPRINT(RT_DEBUG_OFF, ("==>%s (OFF)\n", __FUNCTION__)); + /* Restore to default */ + RTMP_IO_WRITE32(pAd, CR_AGC_0, pAd->SCSCtrl.CR_AGC_0_default); + RTMP_IO_WRITE32(pAd, CR_AGC_0_RX1, pAd->SCSCtrl.CR_AGC_0_default); + RTMP_IO_WRITE32(pAd, CR_AGC_3, pAd->SCSCtrl.CR_AGC_3_default); + RTMP_IO_WRITE32(pAd, CR_AGC_3_RX1, pAd->SCSCtrl.CR_AGC_3_default); + + pAd->SCSCtrl.SCSStatus = SCS_STATUS_DEFAULT; + } else + DBGPRINT(RT_DEBUG_OFF, ("==>%s (Unknow value = %d)\n", __FUNCTION__, value)); + } + + return TRUE; +} + +INT SetSCSCfg_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) +{ + INT32 Recv = 0; + INT SCSMinRssiTolerance = 0, SCSTrafficThreshold = 0, FalseCcaUpBond = 0; + INT FalseCcaLowBond = 0, FixedBond = 0, ForceMode = 0; + + Recv = sscanf(arg, "%d-%d-%d-%d-%d-%d", &(SCSMinRssiTolerance), &(SCSTrafficThreshold), + &(FalseCcaUpBond), &(FalseCcaLowBond), &(FixedBond), &(ForceMode)); + if (Recv != 6) { + DBGPRINT(RT_DEBUG_OFF, ("Format Error!\n")); + DBGPRINT(RT_DEBUG_OFF, ("iwpriv ra0 set SCSCfg=[MinRssiTolerance]-")); + DBGPRINT(RT_DEBUG_OFF, ("[TrafficThreshold]-[FalseCcaUpBoundary]-")); + DBGPRINT(RT_DEBUG_OFF, ("[FalseCcaLowBoundary]-[FixedBoundary]-[ForceMode]\n")); + DBGPRINT(RT_DEBUG_OFF, ("PS: FiexedBond is Negative number. Ex:70 means -70dBm")); + } else { + pAd->SCSCtrl.SCSMinRssiTolerance = (UINT8)SCSMinRssiTolerance; + pAd->SCSCtrl.SCSTrafficThreshold = SCSTrafficThreshold; + pAd->SCSCtrl.FalseCcaUpBond = (UINT16)FalseCcaUpBond; + pAd->SCSCtrl.FalseCcaLowBond = (UINT16)FalseCcaLowBond; + pAd->SCSCtrl.FixedRssiBond = (0 - (CHAR)FixedBond); + pAd->SCSCtrl.ForceMode = (BOOLEAN)ForceMode; + } + return TRUE; +} + +INT SetSCSDbgLogEnable_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) +{ + UINT32 value; + + value = simple_strtol(arg, 0, 10); + #if 0 + if (value == SCS_DBG_LOG_DISABLE) { + pAd->SCSCtrl.SCSDbgLogLv = RT_DEBUG_INFO; + DBGPRINT(RT_DEBUG_OFF, ("==>%s: Disable SCS debug log\n", __FUNCTION__)); + } else if (value == SCS_DBG_LOG_ENABLE) { + pAd->SCSCtrl.SCSDbgLogLv = RT_DEBUG_OFF; + DBGPRINT(RT_DEBUG_OFF, ("==>%s: Enable SCS debug log\n", __FUNCTION__)); + } else + DBGPRINT(RT_DEBUG_OFF, ("==>%s: Wrong value(0:Disable;1:Enable)\n", __FUNCTION__)); + #endif + return TRUE; +} +INT32 ShowSCSInfo(RTMP_ADAPTER *pAd, RTMP_STRING *Arg) +{ + DBGPRINT(RT_DEBUG_OFF, ("========Configuration==========\n")); + DBGPRINT(RT_DEBUG_OFF, ("SCS enable =%d\n", pAd->SCSCtrl.SCSEnable)); + DBGPRINT(RT_DEBUG_OFF, ("MinRssi Tolerance=%d\n", pAd->SCSCtrl.SCSMinRssiTolerance)); + DBGPRINT(RT_DEBUG_OFF, ("FixedRssiBoundary=%d\n", pAd->SCSCtrl.FixedRssiBond)); + DBGPRINT(RT_DEBUG_OFF, ("False CCA up boundayr =%d\n", pAd->SCSCtrl.FalseCcaUpBond)); + DBGPRINT(RT_DEBUG_OFF, ("False CCA low boundayr =%d\n", pAd->SCSCtrl.FalseCcaLowBond)); + DBGPRINT(RT_DEBUG_OFF, ("Traffic threshold =%d\n", pAd->SCSCtrl.SCSTrafficThreshold)); + DBGPRINT(RT_DEBUG_OFF, ("ForceMode = %d\n", pAd->SCSCtrl.ForceMode)); + DBGPRINT(RT_DEBUG_OFF, ("========Statistic /Status==========\n")); + DBGPRINT(RT_DEBUG_OFF, ("Min RSSI=%d\n", pAd->SCSCtrl.SCSMinRssi)); + DBGPRINT(RT_DEBUG_OFF, ("PD count=%x\n", pAd->SCSCtrl.PdCount)); + DBGPRINT(RT_DEBUG_OFF, ("MDRDY count=%x\n", pAd->SCSCtrl.MdrdyCount)); + DBGPRINT(RT_DEBUG_OFF, ("FalseCCA count=%d\n", pAd->SCSCtrl.FalseCCA)); + DBGPRINT(RT_DEBUG_OFF, ("Current RSSI boundary =%d\n", pAd->SCSCtrl.RSSIBoundary)); + DBGPRINT(RT_DEBUG_OFF, ("RTS count =%d\n", pAd->SCSCtrl.RtsCount)); + DBGPRINT(RT_DEBUG_OFF, ("RTS retry count =%d\n", pAd->SCSCtrl.RtsRtyCount)); + DBGPRINT(RT_DEBUG_OFF, ("Tx Traffic = %d\n", + pAd->RalinkCounters.OneSecTransmittedByteCount)); + DBGPRINT(RT_DEBUG_OFF, ("Rx Traffic = %d\n", pAd->RalinkCounters.OneSecReceivedByteCount)); + DBGPRINT(RT_DEBUG_OFF, ("Current Sensitivity = %d\n", pAd->SCSCtrl.CurrSensitivity)); + DBGPRINT(RT_DEBUG_OFF, ("Adjust Sensitivity = %d\n", pAd->SCSCtrl.AdjustSensitivity)); + + return TRUE; +} +#endif /* SMART_CARRIER_SENSE_SUPPORT */ + INT Set_DriverVersion_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) { #ifdef CONFIG_AP_SUPPORT IF_DEV_CONFIG_OPMODE_ON_AP(pAd) - // DBGPRINT(RT_DEBUG_OFF, ("Driver version-%s %s %s\n", AP_DRIVER_VERSION, __DATE__, __TIME__)); + DBGPRINT(RT_DEBUG_OFF, ("Driver version-%s\n", AP_DRIVER_VERSION)); #endif /* CONFIG_AP_SUPPORT */ #ifdef CONFIG_STA_SUPPORT IF_DEV_CONFIG_OPMODE_ON_STA(pAd) - // DBGPRINT(RT_DEBUG_OFF, ("Driver version-%s %s %s\n", STA_DRIVER_VERSION, __DATE__, __TIME__)); + DBGPRINT(RT_DEBUG_OFF, ("Driver version-%s \n", STA_DRIVER_VERSION)); #endif /* CONFIG_STA_SUPPORT */ #ifdef CONFIG_ANDES_SUPPORT @@ -1717,14 +1816,16 @@ VOID RTMPIoctlMAC(RTMP_ADAPTER *pAd, RTMP_IOCTL_INPUT_STRUCT *wrq) if (is_write) { RTMP_IO_WRITE32(pAd, mac_s, macVal); - sprintf(msg+strlen(msg), "[0x%04x]:%08x ", mac_s, macVal); + snprintf(msg+strlen(msg), 4096-strlen(msg) + , "[0x%04x]:%08x ", mac_s, macVal); if (!bFromUI) DBGPRINT(RT_DEBUG_INFO, ("MacAddr=0x%x, MacValue=0x%x\n", mac_s, macVal)); } else { for(IdMac = mac_s; IdMac <= mac_e; IdMac += 4) { RTMP_IO_READ32(pAd, IdMac, &macVal); - sprintf(msg+strlen(msg), "[0x%04x]:%08x ", IdMac , macVal); + snprintf(msg+strlen(msg), 4096-strlen(msg) + , "[0x%04x]:%08x ", IdMac, macVal); if (!bFromUI) DBGPRINT(RT_DEBUG_TRACE, ("MacAddr=0x%x, MacValue=0x%x\n", IdMac, macVal)); } @@ -1775,7 +1876,7 @@ print_all: 0,0 }; - sprintf(msg, "\n"); + snprintf(msg, 4096, "\n"); mac_idx = 0; while (mac_range_7603[mac_idx] != 0) { @@ -1843,14 +1944,15 @@ if (IS_RT65XX(pAd)) 0,0 }; - sprintf(msg, "\n"); + snprintf(msg, 4096, "\n"); while (mac_range_3052[mac_idx] != 0) { mac_s = mac_range_3052[mac_idx]; mac_e = mac_range_3052[mac_idx + 1]; for (macAddr = mac_s; macAddr <= mac_e; macAddr += 4) { RTMP_IO_READ32(pAd, macAddr, &macValue); - sprintf(msg+strlen(msg), "[0x%04x]:%08x\n", macAddr, macValue); + snprintf(msg+strlen(msg), 4096-strlen(msg), + "[0x%04x]:%08x\n", macAddr, macValue); } mac_idx += 2; } @@ -1877,7 +1979,8 @@ if (IS_RT65XX(pAd)) mac_e = mac_range_2883[mac_idx + 1]; for (macAddr = mac_s; macAddr <= mac_e; macAddr += 4) { RTMP_IO_READ32(pAd, macAddr, &macValue); - sprintf(msg+strlen(msg), "[0x%04x]:%08x\n", macAddr, macValue); + snprintf(msg+strlen(msg), 4096-strlen(msg), + "[0x%04x]:%08x\n", macAddr, macValue); } mac_idx += 2; } @@ -1886,11 +1989,11 @@ if (IS_RT65XX(pAd)) #endif /* VXWORKS */ if(strlen(msg) == 1) - sprintf(msg+strlen(msg), "===>Error command format!"); + snprintf(msg+strlen(msg), 4096-strlen(msg), "===>Error command format!"); #ifdef LINUX /* Copy the information into the user buffer */ - wrq->u.data.length = strlen(msg); + wrq->u.data.length = (UINT16)strlen(msg); if (copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length)) { DBGPRINT(RT_DEBUG_TRACE, ("%s: copy_to_user() fail\n", __FUNCTION__)); @@ -2178,7 +2281,7 @@ VOID RTMPSetDesiredRates(RTMP_ADAPTER *pAd, LONG Rates) memset(&aryRates, 0x00, sizeof(NDIS_802_11_RATES)); switch (pAd->CommonCfg.PhyMode) { - case (WMODE_A): /* A only*/ + case (UINT)(WMODE_A): /* A only*/ switch (Rates) { case 6000000: /*6M*/ @@ -2227,9 +2330,9 @@ VOID RTMPSetDesiredRates(RTMP_ADAPTER *pAd, LONG Rates) break; } break; - case (WMODE_B | WMODE_G): /* B/G Mixed*/ - case (WMODE_B): /* B only*/ - case (WMODE_A | WMODE_B | WMODE_G): /* A/B/G Mixed*/ + case (UINT)(WMODE_B | WMODE_G): /* B/G Mixed*/ + case (UINT)(WMODE_B): /* B only*/ + case (UINT)(WMODE_A | WMODE_B | WMODE_G): /* A/B/G Mixed*/ default: switch (Rates) { @@ -2371,12 +2474,12 @@ NDIS_STATUS RTMPWPARemoveKeyProc( { /*if (MAC_ADDR_EQUAL(pAd->ApCfg.ApCliTab[ifIndex].SharedKey[i].BssId, pKey->BSSID)) */ { - ifIndex = pObj->ioctl_if; + ifIndex = (UCHAR)pObj->ioctl_if; BssIdx = pAd->ApCfg.BssidNum + MAX_MESH_NUM + ifIndex; DBGPRINT(RT_DEBUG_TRACE,("APCLI RTMPWPARemoveKeyProc(KeyIdx=%d)\n", i)); pAd->ApCfg.ApCliTab[ifIndex].SharedKey[i].KeyLen = 0; pAd->ApCfg.ApCliTab[ifIndex].SharedKey[i].CipherAlg = CIPHER_NONE; - AsicRemoveSharedKeyEntry(pAd, BssIdx, (UCHAR)i); + AsicRemoveSharedKeyEntry(pAd, (UCHAR)BssIdx, (UCHAR)i); Status = NDIS_STATUS_SUCCESS; break; } @@ -2391,7 +2494,7 @@ NDIS_STATUS RTMPWPARemoveKeyProc( DBGPRINT(RT_DEBUG_TRACE,("RTMPWPARemoveKeyProc(KeyIdx=%d)\n", i)); pAd->SharedKey[BSS0][i].KeyLen = 0; pAd->SharedKey[BSS0][i].CipherAlg = CIPHER_NONE; - AsicRemoveSharedKeyEntry(pAd, BSS0, (UCHAR)i); + AsicRemoveSharedKeyEntry(pAd, (UCHAR)BSS0, (UCHAR)i); Status = NDIS_STATUS_SUCCESS; break; } @@ -2407,7 +2510,7 @@ NDIS_STATUS RTMPWPARemoveKeyProc( DBGPRINT(RT_DEBUG_TRACE,("RTMPWPARemoveKeyProc(KeyIdx=%ld)\n", KeyIdx)); pAd->SharedKey[BSS0][KeyIdx].KeyLen = 0; pAd->SharedKey[BSS0][KeyIdx].CipherAlg = CIPHER_NONE; - AsicRemoveSharedKeyEntry(pAd, BSS0, (UCHAR)KeyIdx); + AsicRemoveSharedKeyEntry(pAd, (UCHAR)BSS0, (UCHAR)KeyIdx); Status = NDIS_STATUS_SUCCESS; } @@ -2538,7 +2641,7 @@ VOID RTMPSetPhyMode(RTMP_ADAPTER *pAd, ULONG phymode) NdisZeroMemory(pAd->CommonCfg.ExtRate, MAX_LEN_OF_SUPPORTED_RATES); NdisZeroMemory(pAd->CommonCfg.DesireRate, MAX_LEN_OF_SUPPORTED_RATES); switch (phymode) { - case (WMODE_B): + case (UINT)(WMODE_B): pAd->CommonCfg.SupRate[0] = 0x82; /* 1 mbps, in units of 0.5 Mbps, basic rate */ pAd->CommonCfg.SupRate[1] = 0x84; /* 2 mbps, in units of 0.5 Mbps, basic rate */ pAd->CommonCfg.SupRate[2] = 0x8B; /* 5.5 mbps, in units of 0.5 Mbps, basic rate */ @@ -2558,14 +2661,14 @@ VOID RTMPSetPhyMode(RTMP_ADAPTER *pAd, ULONG phymode) Or some 11n stations will not connect to us if we do not put supported/extended rate element in beacon. */ - case (WMODE_B | WMODE_G): - case (WMODE_A | WMODE_B | WMODE_G): + case (UINT)(WMODE_B | WMODE_G): + case (UINT)(WMODE_A | WMODE_B | WMODE_G): #ifdef DOT11_N_SUPPORT - case (WMODE_A | WMODE_B | WMODE_G | WMODE_GN | WMODE_AN): - case (WMODE_B | WMODE_G | WMODE_GN): + case (UINT)(WMODE_A | WMODE_B | WMODE_G | WMODE_GN | WMODE_AN): + case (UINT)(WMODE_B | WMODE_G | WMODE_GN): #endif /* DOT11_N_SUPPORT */ #ifdef DOT11_VHT_AC - case (WMODE_A | WMODE_B | WMODE_G | WMODE_GN | WMODE_AN | WMODE_AC): + case (UINT)(WMODE_A | WMODE_B | WMODE_G | WMODE_GN | WMODE_AN | WMODE_AC): #endif /* DOT11_VHT_AC */ pAd->CommonCfg.SupRate[0] = 0x82; /* 1 mbps, in units of 0.5 Mbps, basic rate*/ pAd->CommonCfg.SupRate[1] = 0x84; /* 2 mbps, in units of 0.5 Mbps, basic rate*/ @@ -2595,19 +2698,19 @@ VOID RTMPSetPhyMode(RTMP_ADAPTER *pAd, ULONG phymode) pAd->CommonCfg.DesireRate[11] = 108; /* 54 mbps, in units of 0.5 Mbps*/ break; - case (WMODE_A): - case (WMODE_G): + case (UINT)(WMODE_A): + case (UINT)(WMODE_G): #ifdef DOT11_N_SUPPORT - case (WMODE_A | WMODE_AN): - case (WMODE_A | WMODE_G | WMODE_GN | WMODE_AN): - case (WMODE_G | WMODE_GN): - case (WMODE_GN): - case (WMODE_AN): + case (UINT)(WMODE_A | WMODE_AN): + case (UINT)(WMODE_A | WMODE_G | WMODE_GN | WMODE_AN): + case (UINT)(WMODE_G | WMODE_GN): + case (UINT)(WMODE_GN): + case (UINT)(WMODE_AN): #endif /* DOT11_N_SUPPORT */ #ifdef DOT11_VHT_AC - case (WMODE_A | WMODE_AN | WMODE_AC): - case (WMODE_AN | WMODE_AC): - case (WMODE_G | WMODE_GN |WMODE_A | WMODE_AN | WMODE_AC): + case (UINT)(WMODE_A | WMODE_AN | WMODE_AC): + case (UINT)(WMODE_AN | WMODE_AC): + case (UINT)(WMODE_G | WMODE_GN | WMODE_A | WMODE_AN | WMODE_AC): #endif /* DOT11_VHT_AC */ pAd->CommonCfg.SupRate[0] = 0x8C; /* 6 mbps, in units of 0.5 Mbps, basic rate*/ pAd->CommonCfg.SupRate[1] = 0x12; /* 9 mbps, in units of 0.5 Mbps*/ @@ -2641,18 +2744,18 @@ VOID RTMPSetPhyMode(RTMP_ADAPTER *pAd, ULONG phymode) for (apidx = 0; apidx < pAd->ApCfg.BssidNum; apidx++) { - MlmeUpdateTxRates(pAd, FALSE, apidx); + MlmeUpdateTxRates(pAd, FALSE, (UCHAR)apidx); } #ifdef WDS_SUPPORT for (apidx = 0; apidx < MAX_WDS_ENTRY; apidx++) { - MlmeUpdateTxRates(pAd, FALSE, apidx + MIN_NET_DEVICE_FOR_WDS); + MlmeUpdateTxRates(pAd, FALSE, (UCHAR)(apidx + MIN_NET_DEVICE_FOR_WDS)); } #endif /* WDS_SUPPORT */ #ifdef APCLI_SUPPORT for (apidx = 0; apidx < MAX_APCLI_NUM; apidx++) { - MlmeUpdateTxRates(pAd, FALSE, apidx + MIN_NET_DEVICE_FOR_APCLI); + MlmeUpdateTxRates(pAd, FALSE, (UCHAR)(apidx + MIN_NET_DEVICE_FOR_APCLI)); } #endif /* APCLI_SUPPORT */ } @@ -2661,8 +2764,8 @@ VOID RTMPSetPhyMode(RTMP_ADAPTER *pAd, ULONG phymode) #ifdef CONFIG_STA_SUPPORT IF_DEV_CONFIG_OPMODE_ON_STA(pAd) { - printk("%s: Update for STA\n", __FUNCTION__); - MlmeUpdateTxRates(pAd, FALSE, BSS0); + DBGPRINT(RT_DEBUG_OFF, ("%s: Update for STA\n", __func__)); + MlmeUpdateTxRates(pAd, FALSE, (UCHAR)BSS0); } #endif /* CONFIG_STA_SUPPORT */ @@ -2672,12 +2775,12 @@ VOID RTMPSetPhyMode(RTMP_ADAPTER *pAd, ULONG phymode) UINT apidx; for (apidx = 0; apidx < pAd->ApCfg.BssidNum; apidx++) { - MlmeUpdateTxRates(pAd, FALSE, apidx + MIN_NET_DEVICE_FOR_P2P_GO); + MlmeUpdateTxRates(pAd, FALSE, (UCHAR)(apidx + MIN_NET_DEVICE_FOR_P2P_GO)); } for (apidx = 0; apidx < MAX_APCLI_NUM; apidx++) { - MlmeUpdateTxRates(pAd, FALSE, apidx + MIN_NET_DEVICE_FOR_APCLI); + MlmeUpdateTxRates(pAd, FALSE, (UCHAR)(apidx + MIN_NET_DEVICE_FOR_APCLI)); } } #endif /* P2P_SUPPORT */ @@ -2700,11 +2803,12 @@ VOID RTMPSetPhyMode(RTMP_ADAPTER *pAd, ULONG phymode) pAd->cfg80211_ctrl.P2pExtRateLen = 0; #ifdef RT_CFG80211_P2P_CONCURRENT_DEVICE - printk("%s: Update for AP\n", __FUNCTION__); - MlmeUpdateTxRates(pAd, FALSE, MAIN_MBSSID + MIN_NET_DEVICE_FOR_CFG80211_VIF_P2P_GO); + DBGPRINT(RT_DEBUG_OFF, ("%s: Update for AP\n", __func__)); + MlmeUpdateTxRates(pAd, FALSE + , (UCHAR)(MAIN_MBSSID + MIN_NET_DEVICE_FOR_CFG80211_VIF_P2P_GO)); - printk("%s: Update for APCLI\n", __FUNCTION__); - MlmeUpdateTxRates(pAd, FALSE, MAIN_MBSSID + MIN_NET_DEVICE_FOR_APCLI); + DBGPRINT(RT_DEBUG_OFF, ("%s: Update for APCLI\n", __func__)); + MlmeUpdateTxRates(pAd, FALSE, (UCHAR)(MAIN_MBSSID + MIN_NET_DEVICE_FOR_APCLI)); #endif /* RT_CFG80211_P2P_CONCURRENT_DEVICE */ #endif /* RT_CFG80211_P2P_SUPPORT */ @@ -2864,7 +2968,7 @@ VOID RTMPAddWcidAttributeEntry( } #endif /* RTMP_MAC */ - offset = wcid_attr_base + (Wcid * wcid_attr_size); + offset = (USHORT)(wcid_attr_base + (Wcid * wcid_attr_size)); #ifdef CONFIG_AP_SUPPORT IF_DEV_CONFIG_OPMODE_ON_AP(pAd) { @@ -2925,7 +3029,7 @@ VOID RTMPAddWcidAttributeEntry( } #endif /* RTMP_MAC */ - offset = iveiv_tb_base + (Wcid * iveiv_tb_size); + offset = (USHORT)(iveiv_tb_base + (Wcid * iveiv_tb_size)); /* WPA mode*/ if ((CipherAlg == CIPHER_TKIP) || (CipherAlg == CIPHER_AES)) @@ -2976,10 +3080,10 @@ RTMP_STRING *GetEncryptType(CHAR enc) return "TKIP"; if(enc == Ndis802_11AESEnable) return "AES"; - if(enc == Ndis802_11TKIPAESMix) + if(enc == Ndis802_11TKIPAESMix) return "TKIPAES"; #ifdef WAPI_SUPPORT - if(enc == Ndis802_11EncryptionSMS4Enabled) + if(enc == Ndis802_11EncryptionSMS4Enabled) return "SMS4"; #endif /* WAPI_SUPPORT */ else @@ -2992,7 +3096,7 @@ RTMP_STRING *GetAuthMode(CHAR auth) return "OPEN"; if(auth == Ndis802_11AuthModeShared) return "SHARED"; - if(auth == Ndis802_11AuthModeAutoSwitch) + if(auth == Ndis802_11AuthModeAutoSwitch) return "AUTOWEP"; if(auth == Ndis802_11AuthModeWPA) return "WPA"; @@ -3004,14 +3108,14 @@ RTMP_STRING *GetAuthMode(CHAR auth) return "WPA2"; if(auth == Ndis802_11AuthModeWPA2PSK) return "WPA2PSK"; - if(auth == Ndis802_11AuthModeWPA1WPA2) + if(auth == Ndis802_11AuthModeWPA1WPA2) return "WPA1WPA2"; - if(auth == Ndis802_11AuthModeWPA1PSKWPA2PSK) + if(auth == Ndis802_11AuthModeWPA1PSKWPA2PSK) return "WPA1PSKWPA2PSK"; #ifdef WAPI_SUPPORT - if(auth == Ndis802_11AuthModeWAICERT) + if(auth == Ndis802_11AuthModeWAICERT) return "WAI-CERT"; - if(auth == Ndis802_11AuthModeWAIPSK) + if(auth == Ndis802_11AuthModeWAIPSK) return "WAI-PSK"; #endif /* WAPI_SUPPORT */ @@ -3120,13 +3224,19 @@ VOID RTMPCommSiteSurveyData( NDIS_802_11_AUTHENTICATION_MODE ap_auth_mode = Ndis802_11AuthModeOpen; /*Channel*/ - sprintf(msg+strlen(msg),"%-4d", pBss->Channel); + snprintf(msg+strlen(msg), MsgLen-strlen(msg), "%-4d", pBss->Channel); #ifdef DPA_T /* SSID Length */ - sprintf(msg+strlen(msg),"%-4d", pBss->SsidLen); + snprintf(msg+strlen(msg), MsgLen-strlen(msg), "%-4d", pBss->SsidLen); #endif /* DPA_T */ + if (pBss->SsidLen > MAX_LEN_OF_SSID) { + DBGPRINT(RT_DEBUG_ERROR, ("%s: Invalid SsidLen (%d)\n" + , __func__, pBss->SsidLen)); + return; + } + /*SSID*/ NdisZeroMemory(Ssid, (MAX_LEN_OF_SSID +1)); if (RTMPCheckStrPrintAble((PCHAR)pBss->Ssid, pBss->SsidLen)) @@ -3134,14 +3244,15 @@ VOID RTMPCommSiteSurveyData( else { INT idx = 0; - sprintf(Ssid, "0x"); + snprintf(Ssid, sizeof(Ssid), "0x"); for (idx = 0; (idx < 14) && (idx < pBss->SsidLen); idx++) - sprintf(Ssid + 2 + (idx*2), "%02X", (UCHAR)pBss->Ssid[idx]); + snprintf(Ssid + 2 + (idx*2), sizeof(Ssid)-2-(idx*2) + , "%02X", (UCHAR)pBss->Ssid[idx]); } - sprintf(msg+strlen(msg),"%-33s", Ssid); + snprintf(msg+strlen(msg), MsgLen-strlen(msg), "%-33s", Ssid); /*BSSID*/ - sprintf(msg+strlen(msg),"%02x:%02x:%02x:%02x:%02x:%02x ", + snprintf(msg+strlen(msg), MsgLen-strlen(msg), "%02x:%02x:%02x:%02x:%02x:%02x ", pBss->Bssid[0], pBss->Bssid[1], pBss->Bssid[2], @@ -3159,7 +3270,8 @@ VOID RTMPCommSiteSurveyData( ap_auth_mode = pBss->AuthMode; ap_cipher = pBss->WPA.PairCipher; #ifdef DPA_T - sprintf(SecurityStr, "%s-%s", GetAuthMode((CHAR)ap_auth_mode), GetEncryptType((CHAR)ap_cipher)); + snprintf(SecurityStr, sizeof(SecurityStr), "%s-%s" + , GetAuthMode((CHAR)ap_auth_mode), GetEncryptType((CHAR)ap_cipher)); #endif /* DPA_T */ } else if (pBss->AuthModeAux == Ndis802_11AuthModeOpen) @@ -3182,14 +3294,15 @@ VOID RTMPCommSiteSurveyData( ap_cipher = Ndis802_11TKIPAESMix; } #ifdef DPA_T - sprintf(SecurityStr, "%s-%s", GetAuthMode((CHAR)ap_auth_mode), GetEncryptType((CHAR)ap_cipher)); + snprintf(SecurityStr, sizeof(SecurityStr), "%s-%s" + , GetAuthMode((CHAR)ap_auth_mode), GetEncryptType((CHAR)ap_cipher)); #endif /* DPA_T */ } #ifdef DPA_T else { GetMixedCipherStr(pBss, pBss->AuthMode, &SecurityStr[0]); - sprintf(SecurityStr, "%s/", SecurityStr); + snprintf(SecurityStr, sizeof(SecurityStr), "%s/", SecurityStr); GetMixedCipherStr(pBss, pBss->AuthModeAux, &SecurityStr[0]); } #else /* DPA_T */ @@ -3240,7 +3353,9 @@ VOID RTMPCommSiteSurveyData( ap_cipher = pBss->WPA.PairCipher; } - sprintf(SecurityStr, "%s/%s", GetAuthMode((CHAR)ap_auth_mode), GetEncryptType((CHAR)ap_cipher)); + snprintf(SecurityStr, sizeof(SecurityStr), "%s/%s" + , GetAuthMode((CHAR)ap_auth_mode) + , GetEncryptType((CHAR)ap_cipher)); #endif /* !DPA_T */ } else @@ -3248,17 +3363,19 @@ VOID RTMPCommSiteSurveyData( ap_auth_mode = pBss->AuthMode; ap_cipher = pBss->WepStatus; if (ap_cipher == Ndis802_11WEPDisabled) - sprintf(SecurityStr, "NONE"); + snprintf(SecurityStr, sizeof(SecurityStr), "NONE"); else if (ap_cipher == Ndis802_11WEPEnabled) - sprintf(SecurityStr, "WEP"); + snprintf(SecurityStr, sizeof(SecurityStr), "WEP"); else - sprintf(SecurityStr, "%s/%s", GetAuthMode((CHAR)ap_auth_mode), GetEncryptType((CHAR)ap_cipher)); + snprintf(SecurityStr, sizeof(SecurityStr), "%s/%s" + , GetAuthMode((CHAR)ap_auth_mode) + , GetEncryptType((CHAR)ap_cipher)); } #ifdef DPA_T - sprintf(msg+strlen(msg), "%-33s", SecurityStr); + snprintf(msg+strlen(msg), MsgLen-strlen(msg), "%-33s", SecurityStr); #else /* DPA_T */ - sprintf(msg+strlen(msg), "%-23s", SecurityStr); + snprintf(msg+strlen(msg), MsgLen-strlen(msg), "%-23s", SecurityStr); #endif /* !DPA_T */ /* Rssi*/ @@ -3271,46 +3388,46 @@ VOID RTMPCommSiteSurveyData( Rssi_Quality = (UINT)(((Rssi + 90) * 26)/10); else /* < -84 dbm*/ Rssi_Quality = 0; - sprintf(msg+strlen(msg),"%-9d", Rssi_Quality); + snprintf(msg+strlen(msg), MsgLen-strlen(msg), "%-9d", Rssi_Quality); /* Wireless Mode*/ wireless_mode = NetworkTypeInUseSanity(pBss); if (wireless_mode == Ndis802_11FH || wireless_mode == Ndis802_11DS) - sprintf(msg+strlen(msg),"%-7s", "11b"); + snprintf(msg+strlen(msg), MsgLen-strlen(msg), "%-7s", "11b"); else if (wireless_mode == Ndis802_11OFDM5) - sprintf(msg+strlen(msg),"%-7s", "11a"); + snprintf(msg+strlen(msg), MsgLen-strlen(msg), "%-7s", "11a"); else if (wireless_mode == Ndis802_11OFDM5_N) - sprintf(msg+strlen(msg),"%-7s", "11a/n"); + snprintf(msg+strlen(msg), MsgLen-strlen(msg), "%-7s", "11a/n"); else if (wireless_mode == Ndis802_11OFDM24) - sprintf(msg+strlen(msg),"%-7s", "11b/g"); + snprintf(msg+strlen(msg), MsgLen-strlen(msg), "%-7s", "11b/g"); else if (wireless_mode == Ndis802_11OFDM24_N) - sprintf(msg+strlen(msg),"%-7s", "11b/g/n"); + snprintf(msg+strlen(msg), MsgLen-strlen(msg), "%-7s", "11b/g/n"); else - sprintf(msg+strlen(msg),"%-7s", "unknow"); + snprintf(msg+strlen(msg), MsgLen-strlen(msg), "%-7s", "unknown"); /* Ext Channel*/ if (pBss->AddHtInfoLen > 0) { if (pBss->AddHtInfo.AddHtInfo.ExtChanOffset == EXTCHA_ABOVE) - sprintf(msg+strlen(msg),"%-7s", " ABOVE"); + snprintf(msg+strlen(msg), MsgLen-strlen(msg), "%-7s", " ABOVE"); else if (pBss->AddHtInfo.AddHtInfo.ExtChanOffset == EXTCHA_BELOW) - sprintf(msg+strlen(msg),"%-7s", " BELOW"); + snprintf(msg+strlen(msg), MsgLen-strlen(msg), "%-7s", " BELOW"); else - sprintf(msg+strlen(msg),"%-7s", " NONE"); + snprintf(msg+strlen(msg), MsgLen-strlen(msg), "%-7s", " NONE"); } else { - sprintf(msg+strlen(msg),"%-7s", " NONE"); + snprintf(msg+strlen(msg), MsgLen-strlen(msg), "%-7s", " NONE"); } /*Network Type */ if (pBss->BssType == BSS_ADHOC) - sprintf(msg+strlen(msg),"%-3s", " Ad"); + snprintf(msg+strlen(msg), MsgLen-strlen(msg), "%-3s", " Ad"); else - sprintf(msg+strlen(msg),"%-3s", " In"); + snprintf(msg+strlen(msg), MsgLen-strlen(msg), "%-3s", " In"); - sprintf(msg+strlen(msg),"\n"); + snprintf(msg+strlen(msg), MsgLen-strlen(msg), "\n"); return; } @@ -3395,6 +3512,11 @@ VOID RTMPIoctlGetSiteSurvey( if((strlen(msg)+100 ) >= BufLen) break; + if (pBss->SsidLen > MAX_LEN_OF_SSID) { + DBGPRINT(RT_DEBUG_WARN, + ("%s - Invalid SsidLen %d\n", __func__, pBss->SsidLen)); + break; + } RTMPCommSiteSurveyData(msg, pBss, TotalLen); @@ -3434,7 +3556,7 @@ VOID RTMPIoctlGetSiteSurvey( #ifdef CONFIG_STA_SUPPORT pAdapter->StaCfg.bSkipAutoScanConn = FALSE; #endif /* CONFIG_STA_SUPPORT */ - wrq->u.data.length = strlen(msg); + wrq->u.data.length = (UINT16)strlen(msg); Status = copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length); DBGPRINT(RT_DEBUG_TRACE, ("RTMPIoctlGetSiteSurvey - wrq->u.data.length = %d\n", wrq->u.data.length)); @@ -3534,6 +3656,7 @@ VOID RTMPIoctlGetMacTable( STA_TR_ENTRY *tr_entry; #endif /* DPA_S */ char *msg; + int msg_buf_len; #ifdef DPA_S //yiwei UCHAR index; BOOLEAN bFound; @@ -3629,16 +3752,18 @@ VOID RTMPIoctlGetMacTable( DBGPRINT(RT_DEBUG_TRACE, ("%s: copy_to_user() fail\n", __FUNCTION__)); } - os_alloc_mem(NULL, (UCHAR **)&msg, sizeof(CHAR)*(MAX_LEN_OF_MAC_TABLE*MAC_LINE_LEN)); + msg_buf_len = MAX_LEN_OF_MAC_TABLE*MAC_LINE_LEN; + os_alloc_mem(NULL, (UCHAR **)&msg, sizeof(CHAR)*msg_buf_len); if (msg == NULL) { DBGPRINT(RT_DEBUG_ERROR, ("%s():Alloc memory failed\n", __FUNCTION__)); goto LabelOK; } - memset(msg, 0 ,MAX_LEN_OF_MAC_TABLE*MAC_LINE_LEN ); - sprintf(msg,"%s","\n"); - sprintf(msg+strlen(msg),"%-14s%-4s%-4s%-4s%-4s%-6s%-6s%-10s%-10s%-10s\n", - "MAC", "AP", "AID", "PSM", "AUTH", "CTxR", "LTxR","LDT", "RxB", "TxB"); + memset(msg, 0, msg_buf_len); + snprintf(msg, msg_buf_len, "%s", "\n"); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg) + , "%-14s%-4s%-4s%-4s%-4s%-6s%-6s%-10s%-10s%-10s\n" + , "MAC", "AP", "AID", "PSM", "AUTH", "CTxR", "LTxR", "LDT", "RxB", "TxB"); for (i=0; i<MAX_LEN_OF_MAC_TABLE; i++) { @@ -3654,16 +3779,26 @@ VOID RTMPIoctlGetMacTable( { if((strlen(msg)+MAC_LINE_LEN ) >= (MAX_LEN_OF_MAC_TABLE*MAC_LINE_LEN) ) break; - sprintf(msg+strlen(msg),"%02x%02x%02x%02x%02x%02x ", PRINT_MAC(pEntry->Addr)); - sprintf(msg+strlen(msg),"%-4d", (int)pEntry->func_tb_idx); - sprintf(msg+strlen(msg),"%-4d", (int)pEntry->Aid); - sprintf(msg+strlen(msg),"%-4d", (int)pEntry->PsMode); - sprintf(msg+strlen(msg),"%-4d", (int)pEntry->AuthState); - sprintf(msg+strlen(msg),"%-6d",RateIdToMbps[pAd->MacTab.Content[i].CurrTxRate]); - sprintf(msg+strlen(msg),"%-6d",0/*RateIdToMbps[pAd->MacTab.Content[i].HTPhyMode.word]*/); /* ToDo*/ - sprintf(msg+strlen(msg),"%-10d",0/*pAd->MacTab.Content[i].HSCounter.LastDataPacketTime*/); /* ToDo*/ - sprintf(msg+strlen(msg),"%-10d",0/*pAd->MacTab.Content[i].HSCounter.TotalRxByteCount*/); /* ToDo*/ - sprintf(msg+strlen(msg),"%-10d\n",0/*pAd->MacTab.Content[i].HSCounter.TotalTxByteCount*/); /* ToDo*/ + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg) + , "%02x%02x%02x%02x%02x%02x ", PRINT_MAC(pEntry->Addr)); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg), "%-4d" + , (int)pEntry->func_tb_idx); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg), "%-4d" + , (int)pEntry->Aid); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg), "%-4d" + , (int)pEntry->PsMode); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg), "%-4d" + , (int)pEntry->AuthState); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg), "%-6d" + , RateIdToMbps[pAd->MacTab.Content[i].CurrTxRate]); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg), "%-6d" + , 0/*RateIdToMbps[pAd->MacTab.Content[i].HTPhyMode.word]*/); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg), "%-10d" + , 0/*pAd->MacTab.Content[i].HSCounter.LastDataPacketTime*/); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg), "%-10d" + , 0/*pAd->MacTab.Content[i].HSCounter.TotalRxByteCount*/); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg), "%-10d\n" + , 0/*pAd->MacTab.Content[i].HSCounter.TotalTxByteCount*/); } } @@ -3690,17 +3825,20 @@ VOID RTMPAR9IoctlGetMacTable( { INT i; char *msg; + int msg_buf_len; - os_alloc_mem(NULL, (UCHAR **)&msg, sizeof(CHAR)*(MAX_LEN_OF_MAC_TABLE*MAC_LINE_LEN)); + msg_buf_len = MAX_LEN_OF_MAC_TABLE*MAC_LINE_LEN; + os_alloc_mem(NULL, (UCHAR **)&msg, sizeof(CHAR)*msg_buf_len); if (msg == NULL) { DBGPRINT(RT_DEBUG_ERROR, ("%s():Alloc memory failed\n", __FUNCTION__)); return; } - memset(msg, 0 ,MAX_LEN_OF_MAC_TABLE*MAC_LINE_LEN ); - sprintf(msg,"%s","\n"); - sprintf(msg+strlen(msg),"%-14s%-4s%-4s%-4s%-4s%-6s%-6s%-10s%-10s%-10s\n", - "MAC", "AP", "AID", "PSM", "AUTH", "CTxR", "LTxR","LDT", "RxB", "TxB"); + memset(msg, 0, msg_buf_len); + snprintf(msg, msg_buf_len, "%s", "\n"); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg) + , "%-14s%-4s%-4s%-4s%-4s%-6s%-6s%-10s%-10s%-10s\n" + , "MAC", "AP", "AID", "PSM", "AUTH", "CTxR", "LTxR", "LDT", "RxB", "TxB"); for (i=0; i<MAX_LEN_OF_MAC_TABLE; i++) { @@ -3709,18 +3847,28 @@ VOID RTMPAR9IoctlGetMacTable( { if((strlen(msg)+MAC_LINE_LEN ) >= (MAX_LEN_OF_MAC_TABLE*MAC_LINE_LEN) ) break; - sprintf(msg+strlen(msg),"%02x%02x%02x%02x%02x%02x ", - pEntry->Addr[0], pEntry->Addr[1], pEntry->Addr[2], - pEntry->Addr[3], pEntry->Addr[4], pEntry->Addr[5]); - sprintf(msg+strlen(msg),"%-4d", (int)pEntry->func_tb_idx); - sprintf(msg+strlen(msg),"%-4d", (int)pEntry->Aid); - sprintf(msg+strlen(msg),"%-4d", (int)pEntry->PsMode); - sprintf(msg+strlen(msg),"%-4d", (int)pEntry->AuthState); - sprintf(msg+strlen(msg),"%-6d",RateIdToMbps[pAd->MacTab.Content[i].CurrTxRate]); - sprintf(msg+strlen(msg),"%-6d",0/*RateIdToMbps[pAd->MacTab.Content[i].HTPhyMode.word]*/); /* ToDo*/ - sprintf(msg+strlen(msg),"%-10d",0/*pAd->MacTab.Content[i].HSCounter.LastDataPacketTime*/); /* ToDo*/ - sprintf(msg+strlen(msg),"%-10d",0/*pAd->MacTab.Content[i].HSCounter.TotalRxByteCount*/); /* ToDo*/ - sprintf(msg+strlen(msg),"%-10d\n",0/*pAd->MacTab.Content[i].HSCounter.TotalTxByteCount*/); /* ToDo*/ + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg) + , "%02x%02x%02x%02x%02x%02x " + , pEntry->Addr[0], pEntry->Addr[1], pEntry->Addr[2] + , pEntry->Addr[3], pEntry->Addr[4], pEntry->Addr[5]); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg), "%-4d" + , (int)pEntry->func_tb_idx); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg), "%-4d" + , (int)pEntry->Aid); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg), "%-4d" + , (int)pEntry->PsMode); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg), "%-4d" + , (int)pEntry->AuthState); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg), "%-6d" + , RateIdToMbps[pAd->MacTab.Content[i].CurrTxRate]); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg), "%-6d" + , 0/*RateIdToMbps[pAd->MacTab.Content[i].HTPhyMode.word]*/); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg), "%-10d" + , 0/*pAd->MacTab.Content[i].HSCounter.LastDataPacketTime*/); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg), "%-10d" + , 0/*pAd->MacTab.Content[i].HSCounter.TotalRxByteCount*/); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg), "%-10d\n" + , 0/*pAd->MacTab.Content[i].HSCounter.TotalTxByteCount*/); } } @@ -3739,37 +3887,54 @@ VOID RTMPIoctlGetSTAT2( IN RTMP_IOCTL_INPUT_STRUCT *wrq) { char *msg; + int msg_buf_len; BSS_STRUCT *pMbss; INT apidx; - os_alloc_mem(NULL, (UCHAR **)&msg, sizeof(CHAR)*(pAd->ApCfg.BssidNum*(14*128))); + msg_buf_len = pAd->ApCfg.BssidNum*(14*128); + os_alloc_mem(NULL, (UCHAR **)&msg, sizeof(CHAR)*msg_buf_len); if (msg == NULL) { DBGPRINT(RT_DEBUG_ERROR, ("%s():Alloc memory failed\n", __FUNCTION__)); return; } - memset(msg, 0 ,pAd->ApCfg.BssidNum*(14*128)); - sprintf(msg,"%s","\n"); + memset(msg, 0, msg_buf_len); + snprintf(msg, msg_buf_len, "%s", "\n"); for (apidx=0; apidx<pAd->ApCfg.BssidNum; apidx++) { pMbss=&pAd->ApCfg.MBSSID[apidx]; - sprintf(msg+strlen(msg),"ra%d\n",apidx); - sprintf(msg+strlen(msg),"bytesTx = %ld\n",(pMbss->TransmittedByteCount)); - sprintf(msg+strlen(msg),"bytesRx = %ld\n",(pMbss->ReceivedByteCount)); - sprintf(msg+strlen(msg),"pktsTx = %ld\n",pMbss->TxCount); - sprintf(msg+strlen(msg),"pktsRx = %ld\n",pMbss->RxCount); - sprintf(msg+strlen(msg),"errorsTx = %ld\n",pMbss->TxErrorCount); - sprintf(msg+strlen(msg),"errorsRx = %ld\n",pMbss->RxErrorCount); - sprintf(msg+strlen(msg),"discardPktsTx = %ld\n",pMbss->TxDropCount); - sprintf(msg+strlen(msg),"discardPktsRx = %ld\n",pMbss->RxDropCount); - sprintf(msg+strlen(msg),"ucPktsTx = %ld\n",pMbss->ucPktsTx); - sprintf(msg+strlen(msg),"ucPktsRx = %ld\n",pMbss->ucPktsRx); - sprintf(msg+strlen(msg),"mcPktsTx = %ld\n",pMbss->mcPktsTx); - sprintf(msg+strlen(msg),"mcPktsRx = %ld\n",pMbss->mcPktsRx); - sprintf(msg+strlen(msg),"bcPktsTx = %ld\n",pMbss->bcPktsTx); - sprintf(msg+strlen(msg),"bcPktsRx = %ld\n",pMbss->bcPktsRx); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg) + , "ra%d\n", apidx); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg) + , "bytesTx = %ld\n", (pMbss->TransmittedByteCount)); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg) + , "bytesRx = %ld\n", (pMbss->ReceivedByteCount)); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg) + , "pktsTx = %ld\n", pMbss->TxCount); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg) + , "pktsRx = %ld\n", pMbss->RxCount); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg) + , "errorsTx = %ld\n", pMbss->TxErrorCount); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg) + , "errorsRx = %ld\n", pMbss->RxErrorCount); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg) + , "discardPktsTx = %ld\n", pMbss->TxDropCount); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg) + , "discardPktsRx = %ld\n", pMbss->RxDropCount); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg) + , "ucPktsTx = %ld\n", pMbss->ucPktsTx); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg) + , "ucPktsRx = %ld\n", pMbss->ucPktsRx); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg) + , "mcPktsTx = %ld\n", pMbss->mcPktsTx); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg) + , "mcPktsRx = %ld\n", pMbss->mcPktsRx); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg) + , "bcPktsTx = %ld\n", pMbss->bcPktsTx); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg) + , "bcPktsRx = %ld\n", pMbss->bcPktsRx); } @@ -3788,18 +3953,20 @@ VOID RTMPIoctlGetRadioDynInfo( IN RTMP_IOCTL_INPUT_STRUCT *wrq) { char *msg; + int msg_buf_len; BSS_STRUCT *pMbss; INT status,bandwidth,ShortGI; struct wifi_dev *wdev; - - os_alloc_mem(NULL, (UCHAR **)&msg, sizeof(CHAR)*(4096)); + + msg_buf_len = 4069; + os_alloc_mem(NULL, (UCHAR **)&msg, sizeof(CHAR)*(msg_buf_len)); if (msg == NULL) { DBGPRINT(RT_DEBUG_ERROR, ("%s():Alloc memory failed\n", __FUNCTION__)); return; } - memset(msg, 0 ,4096); - sprintf(msg,"%s","\n"); + memset(msg, 0, msg_buf_len); + snprintf(msg, msg_buf_len, "%s", "\n"); pMbss=&pAd->ApCfg.MBSSID[0]; @@ -3820,12 +3987,18 @@ VOID RTMPIoctlGetRadioDynInfo( ShortGI = 0; - sprintf(msg+strlen(msg),"status = %d\n",status); - sprintf(msg+strlen(msg),"channelsInUse = %d\n",pAd->ChannelListNum); - sprintf(msg+strlen(msg),"channel = %d\n",pAd->CommonCfg.Channel); - sprintf(msg+strlen(msg),"chanWidth = %d\n",bandwidth); - sprintf(msg+strlen(msg),"guardIntvl = %d\n",ShortGI); - sprintf(msg+strlen(msg),"MCS = %d\n",wdev->DesiredTransmitSetting.field.MCS); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg) + , "status = %d\n", status); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg) + , "channelsInUse = %d\n", pAd->ChannelListNum); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg) + , "channel = %d\n", pAd->CommonCfg.Channel); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg) + , "chanWidth = %d\n", bandwidth); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg) + , "guardIntvl = %d\n", ShortGI); + snprintf(msg+strlen(msg), msg_buf_len-strlen(msg) + , "MCS = %d\n", wdev->DesiredTransmitSetting.field.MCS); wrq->u.data.length = strlen(msg); @@ -3923,8 +4096,9 @@ INT Set_BAOriTearDown_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) UCHAR mac[6], tid; RTMP_STRING *token; RTMP_STRING sepValue[] = ":", DASH = '-'; - INT i; - MAC_TABLE_ENTRY *pEntry; + INT i, ret; + MAC_TABLE_ENTRY *pEntry; + LONG ret_value; /*DBGPRINT(RT_DEBUG_TRACE,("\n%s\n", arg));*/ /* @@ -3938,7 +4112,9 @@ INT Set_BAOriTearDown_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) token = strchr(arg, DASH); if ((token != NULL) && (strlen(token)>1)) { - tid = simple_strtol((token+1), 0, 10); + ret = kstrtol((token+1), 10, &ret_value); + tid = (UCHAR)ret_value; + /* tid will be 0 ~ 7; Or kernel will crash in BAOriSessionTearDown() */ if (tid > (NUM_OF_TID-1)) return FALSE; @@ -3975,8 +4151,9 @@ INT Set_BARecTearDown_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) UCHAR mac[6], tid; RTMP_STRING *token; RTMP_STRING sepValue[] = ":", DASH = '-'; - INT i; - MAC_TABLE_ENTRY *pEntry; + INT i, ret; + MAC_TABLE_ENTRY *pEntry; + LONG ret_value; /*DBGPRINT(RT_DEBUG_TRACE,("\n%s\n", arg));*/ /* @@ -3990,7 +4167,8 @@ INT Set_BARecTearDown_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) token = strchr(arg, DASH); if ((token != NULL) && (strlen(token)>1)) { - tid = simple_strtol((token+1), 0, 10); + ret = kstrtol((token+1), 10, &ret_value); + tid = (UCHAR)ret_value; /* tid will be 0 ~ 7; Or kernel will crash in BARecSessionTearDown() */ if (tid > (NUM_OF_TID-1)) return FALSE; @@ -4057,6 +4235,8 @@ INT Set_HtMcs_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) UCHAR ss = 0, mcs = 0; #endif /* DOT11_VHT_AC */ struct wifi_dev *wdev; + INT ret; + LONG ret_value; #ifdef DOT11_VHT_AC ss_str = arg; @@ -4069,8 +4249,11 @@ INT Set_HtMcs_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) __FUNCTION__, ss_str, mcs_str)); if (strlen(ss_str) && strlen(mcs_str)) { - mcs = simple_strtol(mcs_str, 0, 10); - ss = simple_strtol(ss_str, 0, 10); + ret = kstrtol(mcs_str, 10, &ret_value); + mcs = (UCHAR)ret_value; + + ret = kstrtol(ss_str, 10, &ret_value); + ss = (UCHAR)ret_value; if ((ss <= pAd->CommonCfg.TxStream) && (mcs <= 7)) HtMcs = ((ss - 1) <<4) | mcs; @@ -4092,7 +4275,8 @@ INT Set_HtMcs_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) ValidMcs = 23; #endif /* DOT11N_SS3_SUPPORT */ - Mcs_tmp = simple_strtol(arg, 0, 10); + ret = kstrtol(arg, 10, &ret_value); + Mcs_tmp = (UCHAR)ret_value; if (Mcs_tmp <= ValidMcs || Mcs_tmp == 32) HtMcs = Mcs_tmp; else @@ -4219,8 +4403,11 @@ INT Set_HtGi_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) INT Set_HtTxBASize_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) { UCHAR Size; + INT ret; + LONG ret_value; - Size = simple_strtol(arg, 0, 10); + ret = kstrtol(arg, 10, &ret_value); + Size = (UCHAR)ret_value; if (Size <=0 || Size >=64) { @@ -4480,8 +4667,9 @@ INT Set_SendSMPSAction_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) UCHAR mac[6], mode; RTMP_STRING *token; RTMP_STRING sepValue[] = ":", DASH = '-'; - INT i; + INT i, ret; MAC_TABLE_ENTRY *pEntry; + LONG ret_value; /*DBGPRINT(RT_DEBUG_TRACE,("\n%s\n", arg));*/ /* @@ -4495,7 +4683,9 @@ INT Set_SendSMPSAction_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) token = strchr(arg, DASH); if ((token != NULL) && (strlen(token)>1)) { - mode = simple_strtol((token+1), 0, 10); + ret = kstrtol((token+1), 10, &ret_value); + mode = (UCHAR)ret_value; + if (mode > MMPS_DISABLE) return FALSE; @@ -4561,9 +4751,9 @@ INT Set_HtTxStream_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) Value = simple_strtol(arg, 0, 10); if ((Value <= 3) && (Value >= 1) && (Value <= pAd->Antenna.field.TxPath)) /* 3*3*/ - pAd->CommonCfg.TxStream = Value; + pAd->CommonCfg.TxStream = (UCHAR)Value; else - pAd->CommonCfg.TxStream = pAd->Antenna.field.TxPath; + pAd->CommonCfg.TxStream = (UCHAR)pAd->Antenna.field.TxPath; if ((pAd->MACVersion < RALINK_2883_VERSION) && (pAd->CommonCfg.TxStream > 2)) @@ -4596,9 +4786,9 @@ INT Set_HtRxStream_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) Value = simple_strtol(arg, 0, 10); if ((Value <= 3) && (Value >= 1) && (Value <= pAd->Antenna.field.RxPath)) - pAd->CommonCfg.RxStream = Value; + pAd->CommonCfg.RxStream = (UCHAR)Value; else - pAd->CommonCfg.RxStream = pAd->Antenna.field.RxPath; + pAd->CommonCfg.RxStream = (UCHAR)pAd->Antenna.field.RxPath; if ((pAd->MACVersion < RALINK_2883_VERSION) && (pAd->CommonCfg.RxStream > 2)) /* 3*3*/ @@ -4955,7 +5145,7 @@ INT Set_FixedTxMode_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) #endif /* CONFIG_STA_SUPPORT */ if (wdev) - wdev->DesiredTransmitSetting.field.FixedTxMode = fix_tx_mode; + wdev->DesiredTransmitSetting.field.FixedTxMode = (USHORT)fix_tx_mode; DBGPRINT(RT_DEBUG_TRACE, ("%s():(FixedTxMode=%d)\n", __FUNCTION__, fix_tx_mode)); @@ -5606,7 +5796,7 @@ INT Show_TxBulk_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) int i; HT_TX_CONTEXT *pHTTXContext; TX_CONTEXT *pMLMEContext, *pPsPollContext, *pNULLContext; - unsigned long IrqFlags; + unsigned long IrqFlags = 0; UINT32 value; DBGPRINT(RT_DEBUG_OFF, ("\nTx Data Ring Info:\n")); @@ -5750,41 +5940,41 @@ INT Show_WirelessMode_Proc( switch(pAd->CommonCfg.PhyMode) { - case (WMODE_B | WMODE_G): + case (UCHAR)(WMODE_B | WMODE_G): snprintf(pBuf, BufLen, "\t11B/G"); break; - case (WMODE_B): + case (UCHAR)(WMODE_B): snprintf(pBuf, BufLen, "\t11B"); break; - case (WMODE_A): + case (UCHAR)(WMODE_A): snprintf(pBuf, BufLen, "\t11A"); break; - case (WMODE_A | WMODE_B | WMODE_G): + case (UCHAR)(WMODE_A | WMODE_B | WMODE_G): snprintf(pBuf, BufLen, "\t11A/B/G"); break; - case (WMODE_G): + case (UCHAR)(WMODE_G): snprintf(pBuf, BufLen, "\t11G"); break; #ifdef DOT11_N_SUPPORT - case (WMODE_A | WMODE_B | WMODE_G | WMODE_GN | WMODE_AN): + case (UCHAR)(WMODE_A | WMODE_B | WMODE_G | WMODE_GN | WMODE_AN): snprintf(pBuf, BufLen, "\t11A/B/G/N"); break; - case (WMODE_GN): + case (UCHAR)(WMODE_GN): snprintf(pBuf, BufLen, "\t11N only with 2.4G"); break; - case (WMODE_G | WMODE_GN): + case (UCHAR)(WMODE_G | WMODE_GN): snprintf(pBuf, BufLen, "\t11G/N"); break; - case (WMODE_A | WMODE_AN): + case (UCHAR)(WMODE_A | WMODE_AN): snprintf(pBuf, BufLen, "\t11A/N"); break; - case (WMODE_B | WMODE_G | WMODE_GN): + case (UCHAR)(WMODE_B | WMODE_G | WMODE_GN): snprintf(pBuf, BufLen, "\t11B/G/N"); break; - case (WMODE_A | WMODE_G | WMODE_GN | WMODE_AN): + case (UCHAR)(WMODE_A | WMODE_G | WMODE_GN | WMODE_AN): snprintf(pBuf, BufLen, "\t11A/G/N"); break; - case (WMODE_AN): + case (UCHAR)(WMODE_AN): snprintf(pBuf, BufLen, "\t11N only with 5G"); break; #endif /* DOT11_N_SUPPORT */ @@ -6124,7 +6314,7 @@ INT Show_NetworkType_Proc( snprintf(pBuf, BufLen, "\tMonitor"); break; default: - sprintf(pBuf, "\tUnknow Value(%d)", pAd->StaCfg.BssType); + snprintf(pBuf, BufLen, "\tUnknow Value(%d)", pAd->StaCfg.BssType); break; } return 0; @@ -6268,7 +6458,7 @@ INT Show_EncrypType_Proc( WepStatus = wdev->WepStatus; if ((WepStatus >= Ndis802_11WEPEnabled) && (WepStatus <= Ndis802_11Encryption4KeyAbsent)) - snprintf(pBuf, BufLen, "\t%s", RTMPGetRalinkEncryModeStr(WepStatus)); + snprintf(pBuf, BufLen, "\t%s", RTMPGetRalinkEncryModeStr((USHORT)WepStatus)); #ifdef WAPI_SUPPORT else if (WepStatus == Ndis802_11EncryptionSMS4Enabled) snprintf(pBuf, BufLen, "\t%s", "WPI_SMS4"); @@ -6322,20 +6512,25 @@ INT Show_WepKey_Proc( #endif /* CONFIG_AP_SUPPORT */ KeyLength = pAd->SharedKey[index][KeyIdx].KeyLen; + if (KeyLength > sizeof(Key)) { + DBGPRINT(RT_DEBUG_ERROR, ("%s: Invalid KeyLength (%d)\n" + , __func__, KeyLength)); + return 0; + } NdisMoveMemory(Key, pAd->SharedKey[index][KeyIdx].Key, KeyLength); /*check key string is ASCII or not*/ - if (RTMPCheckStrPrintAble((PCHAR)Key, KeyLength)) - sprintf(pBuf, "\t%s", Key); + if (RTMPCheckStrPrintAble((PCHAR)Key, KeyLength)) + snprintf(pBuf, BufLen, "\t%s", Key); else { len = strlen(pBuf); ucMaxKeySize = sizeof(Key)/sizeof(Key[0]); - sprintf(pBuf, "\t"); + snprintf(pBuf, BufLen, "\t"); for (idx = 0; idx < KeyLength; idx++) { - if(idx < ucMaxKeySize) - len += sprintf(pBuf+len, "%02X", Key[idx]); + if (idx < ucMaxKeySize) + len += snprintf(pBuf+len, BufLen-len, "%02X", Key[idx]); } } return 0; @@ -6397,9 +6592,9 @@ INT Show_PMK_Proc( NdisMoveMemory(PMK, pAd->StaCfg.PMK, 32); #endif /* CONFIG_STA_SUPPORT */ - sprintf(pBuf, "\tPMK = "); - for (idx = 0; idx < 32; idx++) - sprintf(pBuf+strlen(pBuf), "%02X", PMK[idx]); + snprintf(pBuf, BufLen, "\tPMK = "); + for (idx = 0; idx < 32; idx++) + snprintf(pBuf+strlen(pBuf), BufLen-strlen(pBuf), "%02X", PMK[idx]); return 0; } @@ -6410,39 +6605,55 @@ INT Show_STA_RAInfo_Proc( OUT RTMP_STRING *pBuf, IN ULONG BufLen) { - sprintf(pBuf, "\n"); + snprintf(pBuf, BufLen, "\n"); #ifdef PRE_ANT_SWITCH - sprintf(pBuf+strlen(pBuf), "PreAntSwitch: %d\n", pAd->CommonCfg.PreAntSwitch); - sprintf(pBuf+strlen(pBuf), "PreAntSwitchRSSI: %d\n", pAd->CommonCfg.PreAntSwitchRSSI); + snprintf(pBuf+strlen(pBuf), BufLen-strlen(pBuf), "PreAntSwitch: %d\n" + , pAd->CommonCfg.PreAntSwitch); + snprintf(pBuf+strlen(pBuf), BufLen-strlen(pBuf), "PreAntSwitchRSSI: %d\n" + , pAd->CommonCfg.PreAntSwitchRSSI); #endif /* PRE_ANT_SWITCH */ #if defined (RT2883) || defined (RT3883) - sprintf(pBuf+strlen(pBuf), "FixedRate: %d\n", pAd->CommonCfg.FixedRate); + snprintf(pBuf+strlen(pBuf), "FixedRate: %d\n", pAd->CommonCfg.FixedRate); #endif // defined (RT2883) || defined (RT3883) // #ifdef NEW_RATE_ADAPT_SUPPORT - sprintf(pBuf+strlen(pBuf), "LowTrafficThrd: %d\n", pAd->CommonCfg.lowTrafficThrd); - sprintf(pBuf+strlen(pBuf), "TrainUpRule: %d\n", pAd->CommonCfg.TrainUpRule); - sprintf(pBuf+strlen(pBuf), "TrainUpRuleRSSI: %d\n", pAd->CommonCfg.TrainUpRuleRSSI); - sprintf(pBuf+strlen(pBuf), "TrainUpLowThrd: %d\n", pAd->CommonCfg.TrainUpLowThrd); - sprintf(pBuf+strlen(pBuf), "TrainUpHighThrd: %d\n", pAd->CommonCfg.TrainUpHighThrd); + snprintf(pBuf+strlen(pBuf), BufLen-strlen(pBuf), "LowTrafficThrd: %d\n" + , pAd->CommonCfg.lowTrafficThrd); + snprintf(pBuf+strlen(pBuf), BufLen-strlen(pBuf), "TrainUpRule: %d\n" + , pAd->CommonCfg.TrainUpRule); + snprintf(pBuf+strlen(pBuf), BufLen-strlen(pBuf), "TrainUpRuleRSSI: %d\n" + , pAd->CommonCfg.TrainUpRuleRSSI); + snprintf(pBuf+strlen(pBuf), BufLen-strlen(pBuf), "TrainUpLowThrd: %d\n" + , pAd->CommonCfg.TrainUpLowThrd); + snprintf(pBuf+strlen(pBuf), BufLen-strlen(pBuf), "TrainUpHighThrd: %d\n" + , pAd->CommonCfg.TrainUpHighThrd); #endif // NEW_RATE_ADAPT_SUPPORT // #ifdef STREAM_MODE_SUPPORT - sprintf(pBuf+strlen(pBuf), "StreamMode: %d\n", pAd->CommonCfg.StreamMode); - sprintf(pBuf+strlen(pBuf), "StreamModeMCS: 0x%04x\n", pAd->CommonCfg.StreamModeMCS); + snprintf(pBuf+strlen(pBuf), BufLen-strlen(pBuf), "StreamMode: %d\n" + , pAd->CommonCfg.StreamMode); + snprintf(pBuf+strlen(pBuf), BufLen-strlen(pBuf), "StreamModeMCS: 0x%04x\n" + , pAd->CommonCfg.StreamModeMCS); #endif // STREAM_MODE_SUPPORT // #ifdef TXBF_SUPPORT - sprintf(pBuf+strlen(pBuf), "ITxBfEn: %d\n", pAd->CommonCfg.RegTransmitSetting.field.ITxBfEn); - sprintf(pBuf+strlen(pBuf), "ITxBfTimeout: %ld\n", pAd->CommonCfg.ITxBfTimeout); - sprintf(pBuf+strlen(pBuf), "ETxBfTimeout: %ld\n", pAd->CommonCfg.ETxBfTimeout); - sprintf(pBuf+strlen(pBuf), "ETxBfEnCond: %ld\n", pAd->CommonCfg.ETxBfEnCond); - sprintf(pBuf+strlen(pBuf), "ETxBfNoncompress: %d\n", pAd->CommonCfg.ETxBfNoncompress); - sprintf(pBuf+strlen(pBuf), "ETxBfIncapable: %d\n", pAd->CommonCfg.ETxBfIncapable); + snprintf(pBuf+strlen(pBuf), BufLen-strlen(pBuf), "ITxBfEn: %d\n" + , pAd->CommonCfg.RegTransmitSetting.field.ITxBfEn); + snprintf(pBuf+strlen(pBuf), BufLen-strlen(pBuf), "ITxBfTimeout: %ld\n" + , pAd->CommonCfg.ITxBfTimeout); + snprintf(pBuf+strlen(pBuf), BufLen-strlen(pBuf), "ETxBfTimeout: %ld\n" + , pAd->CommonCfg.ETxBfTimeout); + snprintf(pBuf+strlen(pBuf), BufLen-strlen(pBuf), "ETxBfEnCond: %ld\n" + , pAd->CommonCfg.ETxBfEnCond); + snprintf(pBuf+strlen(pBuf), BufLen-strlen(pBuf), "ETxBfNoncompress: %d\n" + , pAd->CommonCfg.ETxBfNoncompress); + snprintf(pBuf+strlen(pBuf), BufLen-strlen(pBuf), "ETxBfIncapable: %d\n" + , pAd->CommonCfg.ETxBfIncapable); #endif // TXBF_SUPPORT // #ifdef DBG_CTRL_SUPPORT - sprintf(pBuf+strlen(pBuf), "DebugFlags: 0x%lx\n", pAd->CommonCfg.DebugFlags); + snprintf(pBuf+strlen(pBuf), BufLen-strlen(pBuf), "DebugFlags: 0x%lx\n" + , pAd->CommonCfg.DebugFlags); #endif /* DBG_CTRL_SUPPORT */ return 0; } @@ -6454,16 +6665,19 @@ static INT dump_mac_table(RTMP_ADAPTER *pAd, UINT32 ent_type, BOOLEAN bReptCli) ULONG DataRate=0; - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); #ifdef DOT11_N_SUPPORT - printk("HT Operating Mode : %d\n", pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode); - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("HT Operating Mode : %d\n" + , pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode)); + DBGPRINT(RT_DEBUG_OFF, ("\n")); #endif /* DOT11_N_SUPPORT */ - printk("\n%-19s%-5s%-5s%-4s%-4s%-4s%-7s%-10s%-6s%-4s%-6s%-6s%-6s%-7s%-7s%-7s\n", - "MAC", "MODE", "AID", "BSS", "PSM", "WMM", "MIMOPS", "RSSI0/1/2", "PhMd", "BW", "MCS", "SGI", "STBC", "Idle", "Rate", "QosMap"); - + DBGPRINT(RT_DEBUG_OFF + , ("\n%-19s%-5s%-5s%-4s%-4s%-4s%-7s%-10s%-6s%-4s%-6s%-6s%-6s%-7s%-7s%-7s\n" + , "MAC", "MODE", "AID", "BSS", "PSM", "WMM", "MIMOPS", "RSSI0/1/2" + , "PhMd", "BW", "MCS", "SGI", "STBC", "Idle", "Rate", "QosMap")); + for (i=0; i<MAX_LEN_OF_MAC_TABLE; i++) { PMAC_TABLE_ENTRY pEntry = &pAd->MacTab.Content[i]; @@ -6494,64 +6708,80 @@ static INT dump_mac_table(RTMP_ADAPTER *pAd, UINT32 ent_type, BOOLEAN bReptCli) DataRate=0; getRate(pEntry->HTPhyMode, &DataRate); - printk("%02X:%02X:%02X:%02X:%02X:%02X ", PRINT_MAC(pEntry->Addr)); - printk("%-5x", pEntry->EntryType); - printk("%-5d", (int)pEntry->Aid); - printk("%-4d", (int)pEntry->func_tb_idx); - printk("%-4d", (int)pEntry->PsMode); - printk("%-4d", (int)CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE)); + DBGPRINT(RT_DEBUG_OFF, ("%02X:%02X:%02X:%02X:%02X:%02X " + , PRINT_MAC(pEntry->Addr))); + DBGPRINT(RT_DEBUG_OFF, ("%-5x", pEntry->EntryType)); + DBGPRINT(RT_DEBUG_OFF, ("%-5d", (int)pEntry->Aid)); + DBGPRINT(RT_DEBUG_OFF, ("%-4d", (int)pEntry->func_tb_idx)); + DBGPRINT(RT_DEBUG_OFF, ("%-4d", (int)pEntry->PsMode)); + DBGPRINT(RT_DEBUG_OFF, ("%-4d" + , (int)CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE))); #ifdef DOT11_N_SUPPORT - printk("%-7d", (int)pEntry->MmpsMode); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", (int)pEntry->MmpsMode)); #endif /* DOT11_N_SUPPORT */ - printk("%-3d/%-3d/%-3d", pEntry->RssiSample.AvgRssi[0], + DBGPRINT(RT_DEBUG_OFF, ("%-3d/%-3d/%-3d", pEntry->RssiSample.AvgRssi[0], pEntry->RssiSample.AvgRssi[1], - pEntry->RssiSample.AvgRssi[2]); - printk("%-6s", get_phymode_str(pEntry->HTPhyMode.field.MODE)); - printk("%-4s", get_bw_str(pEntry->HTPhyMode.field.BW)); + pEntry->RssiSample.AvgRssi[2])); + DBGPRINT(RT_DEBUG_OFF, ("%-6s", get_phymode_str(pEntry->HTPhyMode.field.MODE))); + DBGPRINT(RT_DEBUG_OFF, ("%-4s", get_bw_str(pEntry->HTPhyMode.field.BW))); #ifdef DOT11_VHT_AC if (pEntry->HTPhyMode.field.MODE == MODE_VHT) - printk("%dS-M%d", ((pEntry->HTPhyMode.field.MCS>>4) + 1), (pEntry->HTPhyMode.field.MCS & 0xf)); + DBGPRINT(RT_DEBUG_OFF, ("%dS-M%d", ((pEntry->HTPhyMode.field.MCS>>4) + 1) + , (pEntry->HTPhyMode.field.MCS & 0xf))); else #endif /* DOT11_VHT_AC */ - printk("%-6d", pEntry->HTPhyMode.field.MCS); - printk("%-4d", pEntry->HTPhyMode.field.ShortGI); - printk("%-5d", pEntry->HTPhyMode.field.STBC); - printk("%-7d", (int)(pEntry->StaIdleTimeout - pEntry->NoDataIdleCount)); - printk("%-7d", (int)DataRate); -#ifdef CONFIG_HOTSPOT_R2 - printk("%-7d", (int)pEntry->QosMapSupport); + DBGPRINT(RT_DEBUG_OFF, ("%-6d", pEntry->HTPhyMode.field.MCS)); + DBGPRINT(RT_DEBUG_OFF, ("%-4d", pEntry->HTPhyMode.field.ShortGI)); + DBGPRINT(RT_DEBUG_OFF, ("%-5d", pEntry->HTPhyMode.field.STBC)); + DBGPRINT(RT_DEBUG_OFF, ("%-7d" + , (int)(pEntry->StaIdleTimeout - pEntry->NoDataIdleCount))); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", (int)DataRate)); +#ifdef CONFIG_HOTSPOT_R2 + DBGPRINT(RT_DEBUG_OFF, ("%-7d", (int)pEntry->QosMapSupport)); #endif - printk("%-10d, %d, %d%%\n", pEntry->DebugFIFOCount, pEntry->DebugTxCount, - (pEntry->DebugTxCount) ? ((pEntry->DebugTxCount-pEntry->DebugFIFOCount)*100/pEntry->DebugTxCount) : 0); + DBGPRINT(RT_DEBUG_OFF, ("%-10d, %d, %d%%\n" + , pEntry->DebugFIFOCount, pEntry->DebugTxCount + , (pEntry->DebugTxCount) ? + ((pEntry->DebugTxCount-pEntry->DebugFIFOCount)*100/pEntry->DebugTxCount) + : 0)); #ifdef CONFIG_HOTSPOT_R2 if (pEntry->QosMapSupport) { - int k =0; - printk("DSCP Exception:\n"); + int k = 0; + + DBGPRINT(RT_DEBUG_OFF, ("DSCP Exception:\n")); for(k=0;k<pEntry->DscpExceptionCount/2;k++) { - printk("[Value: %4d] [UP: %4d]\n", pEntry->DscpException[k] & 0xff, (pEntry->DscpException[k] >> 8) & 0xff); + DBGPRINT(RT_DEBUG_OFF, ("[Value: %4d] [UP: %4d]\n" + , pEntry->DscpException[k] & 0xff + , (pEntry->DscpException[k] >> 8) & 0xff)); } - printk("DSCP Range:\n"); + BGPRINT(RT_DEBUG_OFF, ("DSCP Range:\n")); for(k=0;k<8;k++) { - printk("[UP :%3d][Low Value: %4d] [High Value: %4d]\n", k, pEntry->DscpRange[k] & 0xff, (pEntry->DscpRange[k] >> 8) & 0xff); + DBGPRINT(RT_DEBUG_OFF + , ("[UP :%3d][Low Value: %4d] [High Value: %4d]\n" + , k, pEntry->DscpRange[k] & 0xff + , (pEntry->DscpRange[k] >> 8) & 0xff)); } } #endif //+++Add by shiang for debug - printk("\t\t\t\t\t\t\tMaxCap:%-10s", get_phymode_str(pEntry->MaxHTPhyMode.field.MODE)); - printk("%-6s", get_bw_str(pEntry->MaxHTPhyMode.field.BW)); + DBGPRINT(RT_DEBUG_OFF, ("\t\t\t\t\t\t\tMaxCap:%-10s" + , get_phymode_str(pEntry->MaxHTPhyMode.field.MODE))); + DBGPRINT(RT_DEBUG_OFF, ("%-6s", get_bw_str(pEntry->MaxHTPhyMode.field.BW))); #ifdef DOT11_VHT_AC if (pEntry->MaxHTPhyMode.field.MODE == MODE_VHT) - printk("%dS-M%d", ((pEntry->MaxHTPhyMode.field.MCS>>4) + 1), (pEntry->MaxHTPhyMode.field.MCS & 0xf)); + DBGPRINT(RT_DEBUG_OFF, ("%dS-M%d" + , ((pEntry->MaxHTPhyMode.field.MCS>>4) + 1) + , (pEntry->MaxHTPhyMode.field.MCS & 0xf))); else #endif /* DOT11_VHT_AC */ - printk("%-6d", pEntry->MaxHTPhyMode.field.MCS); - printk("%-4d", pEntry->MaxHTPhyMode.field.ShortGI); - printk("%-5d\n", pEntry->MaxHTPhyMode.field.STBC); + DBGPRINT(RT_DEBUG_OFF, ("%-6d", pEntry->MaxHTPhyMode.field.MCS)); + DBGPRINT(RT_DEBUG_OFF, ("%-4d", pEntry->MaxHTPhyMode.field.ShortGI)); + DBGPRINT(RT_DEBUG_OFF, ("%-5d\n", pEntry->MaxHTPhyMode.field.STBC)); //---Add by shiang for debug - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); } return TRUE; @@ -6588,19 +6818,22 @@ static INT dump_ps_table(RTMP_ADAPTER *pAd, UINT32 ent_type, BOOLEAN bReptCli) UCHAR pucPort, pucQueue; INT Total_Packet_Number = 0 ; - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); #ifdef DOT11_N_SUPPORT - printk("HT Operating Mode : %d\n", pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode); - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("HT Operating Mode : %d\n" + , pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode)); + DBGPRINT(RT_DEBUG_OFF, ("\n")); #endif /* DOT11_N_SUPPORT */ - printk("\n%-19s\t%-10s\t%-5s\t%-5s\t%-5s\t%-5s\t%-5s\t%-5s\t%-5s\t%-5s\t%-5s\t%-6s\t%-6s", - "MAC", "EntryType", "AID", "BSS", "PSM", "ipsm", "iips", "sktx", "redt", "port", "queu", "pktnum","psnum"); + DBGPRINT(RT_DEBUG_OFF + , ("\n%-19s\t%-10s\t%-5s\t%-5s\t%-5s\t%-5s\t%-5s\t%-5s\t%-5s\t%-5s\t%-5s\t%-6s\t%-6s" + , "MAC", "EntryType", "AID", "BSS", "PSM", "ipsm", "iips" + , "sktx", "redt", "port", "queu", "pktnum", "psnum")); #ifdef UAPSD_SUPPORT - printk("\t%-7s", "APSD"); + DBGPRINT(RT_DEBUG_OFF, ("\t%-7s", "APSD")); #endif /* UAPSD_SUPPORT */ - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); for (i=0; i<MAX_LEN_OF_MAC_TABLE; i++) { @@ -6663,24 +6896,27 @@ static INT dump_ps_table(RTMP_ADAPTER *pAd, UINT32 ent_type, BOOLEAN bReptCli) for (j = 0; j < WMM_QUE_NUM; j++) Total_Packet_Number = Total_Packet_Number + tr_entry->tx_queue[j].Number; - printk("%02X:%02X:%02X:%02X:%02X:%02X", PRINT_MAC(pEntry->Addr)); - printk("\t%-10x", pEntry->EntryType); - printk("\t%-5d", (int)pEntry->Aid); - printk("\t%-5d", (int)pEntry->func_tb_idx); - printk("\t%-5d", (int)pEntry->PsMode); - printk("\t%-5d", (int)dw3->field.i_psm); - printk("\t%-5d", (int)dw3->field.du_i_psm); - printk("\t%-5d", (int)dw3->field.skip_tx); - printk("\t%-5d", (int)pfgForce); - printk("\t%-5d", (int)pucPort); - printk("\t%-5d", (int)pucQueue); - printk("\t%-6d", (int)Total_Packet_Number); - printk("\t%-6d", (int)tr_entry->ps_queue.Number); + DBGPRINT(RT_DEBUG_OFF, ("%02X:%02X:%02X:%02X:%02X:%02X", PRINT_MAC(pEntry->Addr))); + DBGPRINT(RT_DEBUG_OFF, ("\t%-10x", pEntry->EntryType)); + DBGPRINT(RT_DEBUG_OFF, ("\t%-5d", (int)pEntry->Aid)); + DBGPRINT(RT_DEBUG_OFF, ("\t%-5d", (int)pEntry->func_tb_idx)); + DBGPRINT(RT_DEBUG_OFF, ("\t%-5d", (int)pEntry->PsMode)); + DBGPRINT(RT_DEBUG_OFF, ("\t%-5d", (int)dw3->field.i_psm)); + DBGPRINT(RT_DEBUG_OFF, ("\t%-5d", (int)dw3->field.du_i_psm)); + DBGPRINT(RT_DEBUG_OFF, ("\t%-5d", (int)dw3->field.skip_tx)); + DBGPRINT(RT_DEBUG_OFF, ("\t%-5d", (int)pfgForce)); + DBGPRINT(RT_DEBUG_OFF, ("\t%-5d", (int)pucPort)); + DBGPRINT(RT_DEBUG_OFF, ("\t%-5d", (int)pucQueue)); + DBGPRINT(RT_DEBUG_OFF, ("\t%-6d", (int)Total_Packet_Number)); + DBGPRINT(RT_DEBUG_OFF, ("\t%-6d", (int)tr_entry->ps_queue.Number)); #ifdef UAPSD_SUPPORT - printk("\t%d,%d,%d,%d", - (int)pEntry->bAPSDCapablePerAC[QID_AC_BE], pEntry->bAPSDCapablePerAC[QID_AC_BK], pEntry->bAPSDCapablePerAC[QID_AC_VI], pEntry->bAPSDCapablePerAC[QID_AC_VO]); + DBGPRINT(RT_DEBUG_OFF, ("\t%d,%d,%d,%d" + , (int)pEntry->bAPSDCapablePerAC[QID_AC_BE] + , pEntry->bAPSDCapablePerAC[QID_AC_BK] + , pEntry->bAPSDCapablePerAC[QID_AC_VI] + , pEntry->bAPSDCapablePerAC[QID_AC_VO])); #endif /* UAPSD_SUPPORT */ - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); } return TRUE; @@ -6727,42 +6963,48 @@ INT Show_BaTable_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) continue; if (IS_ENTRY_APCLI(pEntry)) - strcpy(tmpBuf, "ApCli"); + strncpy(tmpBuf, "ApCli", sizeof(tmpBuf)-1); else if (IS_ENTRY_WDS(pEntry)) - strcpy(tmpBuf, "WDS"); + strncpy(tmpBuf, "WDS", sizeof(tmpBuf)-1); else if (IS_ENTRY_MESH(pEntry)) - strcpy(tmpBuf, "Mesh"); + strncpy(tmpBuf, "Mesh", sizeof(tmpBuf)-1); else if (IS_ENTRY_AP(pEntry)) - strcpy(tmpBuf, "AP"); + strncpy(tmpBuf, "AP", sizeof(tmpBuf)-1); else - strcpy(tmpBuf, "STA"); + strncpy(tmpBuf, "STA", sizeof(tmpBuf)-1); + + tmpBuf[sizeof(tmpBuf)-1] = 0; - printk("%02X:%02X:%02X:%02X:%02X:%02X (Aid = %d) (%s) -\n", - PRINT_MAC(pEntry->Addr), pEntry->Aid, tmpBuf); - - printk("[Recipient]\n"); + DBGPRINT(RT_DEBUG_OFF, ("%02X:%02X:%02X:%02X:%02X:%02X (Aid = %d) (%s) -\n", + PRINT_MAC(pEntry->Addr), pEntry->Aid, tmpBuf)); + + DBGPRINT(RT_DEBUG_OFF, ("[Recipient]\n")); for (j=0; j < NUM_OF_TID; j++) { if (pEntry->BARecWcidArray[j] != 0) { pRecBAEntry =&pAd->BATable.BARecEntry[pEntry->BARecWcidArray[j]]; - printk("TID=%d, BAWinSize=%d, LastIndSeq=%d, ReorderingPkts=%d\n", j, pRecBAEntry->BAWinSize, pRecBAEntry->LastIndSeq, pRecBAEntry->list.qlen); + DBGPRINT(RT_DEBUG_OFF, ( + "TID=%d, BAWinSize=%d, LastIndSeq=%d, ReorderingPkts=%d\n" + , j, pRecBAEntry->BAWinSize, pRecBAEntry->LastIndSeq + , pRecBAEntry->list.qlen)); } } - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); - printk("[Originator]\n"); + DBGPRINT(RT_DEBUG_OFF, ("[Originator]\n")); for (j=0; j < NUM_OF_TID; j++) { if (pEntry->BAOriWcidArray[j] != 0) { pOriBAEntry =&pAd->BATable.BAOriEntry[pEntry->BAOriWcidArray[j]]; - printk("TID=%d, BAWinSize=%d, StartSeq=%d, CurTxSeq=%d\n", - j, pOriBAEntry->BAWinSize, pOriBAEntry->Sequence, - pAd->MacTab.tr_entry[pEntry->wcid].TxSeq[j]); + DBGPRINT(RT_DEBUG_OFF + , ("TID=%d, BAWinSize=%d, StartSeq=%d, CurTxSeq=%d\n" + , j, pOriBAEntry->BAWinSize, pOriBAEntry->Sequence + , pAd->MacTab.tr_entry[pEntry->wcid].TxSeq[j])); } } - printk("\n\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n\n")); } return TRUE; @@ -7253,12 +7495,15 @@ INT32 ShowPseData(RTMP_ADAPTER *pAd, RTMP_STRING *arg) UINT8 StartFID, CurFID, FrameNums, Index, DwIndex; UINT32 Value; UINT32 PseData[4 * 8]; + INT ret; + LONG ret_value; Param = rstrtok(arg, ","); if (Param != NULL) { - StartFID = simple_strtol(Param, 0, 10); + ret = kstrtol(Param, 10, &ret_value); + StartFID = (UINT8)ret_value; } else { @@ -7269,7 +7514,8 @@ INT32 ShowPseData(RTMP_ADAPTER *pAd, RTMP_STRING *arg) if (Param != NULL) { - FrameNums = simple_strtol(Param, 0, 10); + ret = kstrtol(Param, 10, &ret_value); + FrameNums = (UINT8)ret_value; } else { @@ -7301,7 +7547,7 @@ INT32 ShowPseData(RTMP_ADAPTER *pAd, RTMP_STRING *arg) Value |= SET_CURR_FID(CurFID); RTMP_IO_WRITE32(pAd, C_GF, Value); RTMP_IO_READ32(pAd, C_GF, &Value); - CurFID = GET_RETURN_FID(Value); + CurFID = (UINT8)GET_RETURN_FID(Value); if (CurFID == 0xfff) break; @@ -7565,90 +7811,103 @@ INT show_stainfo_proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) return FALSE; } - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); - printk("EntryType : %d\n", pEntry->EntryType); - printk("Entry Capability:\n"); - printk("\tPhyMode:%-10s\n", get_phymode_str(pEntry->MaxHTPhyMode.field.MODE)); - printk("\tBW:%-6s\n", get_bw_str(pEntry->MaxHTPhyMode.field.BW)); - printk("\tDataRate: \n"); + DBGPRINT(RT_DEBUG_OFF, ("EntryType : %d\n", pEntry->EntryType)); + DBGPRINT(RT_DEBUG_OFF, ("Entry Capability:\n")); + DBGPRINT(RT_DEBUG_OFF, ("\tPhyMode:%-10s\n" + , get_phymode_str(pEntry->MaxHTPhyMode.field.MODE))); + DBGPRINT(RT_DEBUG_OFF, ("\tBW:%-6s\n", get_bw_str(pEntry->MaxHTPhyMode.field.BW))); + DBGPRINT(RT_DEBUG_OFF, ("\tDataRate:\n")); #ifdef DOT11_VHT_AC if (pEntry->MaxHTPhyMode.field.MODE == MODE_VHT) - printk("%dS-M%d", ((pEntry->MaxHTPhyMode.field.MCS>>4) + 1), (pEntry->MaxHTPhyMode.field.MCS & 0xf)); + DBGPRINT(RT_DEBUG_OFF, ("%dS-M%d" + , ((pEntry->MaxHTPhyMode.field.MCS>>4) + 1) + , (pEntry->MaxHTPhyMode.field.MCS & 0xf))); else #endif /* DOT11_VHT_AC */ - printk(" %-6d", pEntry->MaxHTPhyMode.field.MCS); - printk(" %-6d", pEntry->MaxHTPhyMode.field.ShortGI); - printk(" %-6d\n", pEntry->MaxHTPhyMode.field.STBC); + DBGPRINT(RT_DEBUG_OFF, (" %-6d", pEntry->MaxHTPhyMode.field.MCS)); + DBGPRINT(RT_DEBUG_OFF, (" %-6d", pEntry->MaxHTPhyMode.field.ShortGI)); + DBGPRINT(RT_DEBUG_OFF, (" %-6d\n", pEntry->MaxHTPhyMode.field.STBC)); - printk("Entry Operation Features\n"); - printk("\t%-4s%-4s%-4s%-4s%-8s%-7s%-7s%-7s%-10s%-6s%-6s%-6s%-6s%-7s%-7s\n", - "AID", "BSS", "PSM", "WMM", "MIMOPS", "RSSI0", "RSSI1", - "RSSI2", "PhMd", "BW", "MCS", "SGI", "STBC", "Idle", "Rate"); + DBGPRINT(RT_DEBUG_OFF, ("Entry Operation Features\n")); + DBGPRINT(RT_DEBUG_OFF + , ("\t%-4s%-4s%-4s%-4s%-8s%-7s%-7s%-7s%-10s%-6s%-6s%-6s%-6s%-7s%-7s\n" + , "AID", "BSS", "PSM", "WMM", "MIMOPS", "RSSI0", "RSSI1" + , "RSSI2", "PhMd", "BW", "MCS", "SGI", "STBC", "Idle", "Rate")); DataRate=0; getRate(pEntry->HTPhyMode, &DataRate); - printk("\t%-4d", (int)pEntry->Aid); - printk("%-4d", (int)pEntry->func_tb_idx); - printk("%-4d", (int)pEntry->PsMode); - printk("%-4d", (int)CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE)); + DBGPRINT(RT_DEBUG_OFF, ("\t%-4d", (int)pEntry->Aid)); + DBGPRINT(RT_DEBUG_OFF, ("%-4d", (int)pEntry->func_tb_idx)); + DBGPRINT(RT_DEBUG_OFF, ("%-4d", (int)pEntry->PsMode)); + DBGPRINT(RT_DEBUG_OFF, ("%-4d" + , (int)CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE))); #ifdef DOT11_N_SUPPORT - printk("%-8d", (int)pEntry->MmpsMode); + DBGPRINT(RT_DEBUG_OFF, ("%-8d", (int)pEntry->MmpsMode)); #endif /* DOT11_N_SUPPORT */ - printk("%-7d", pEntry->RssiSample.AvgRssi[0]); - printk("%-7d", pEntry->RssiSample.AvgRssi[1]); - printk("%-7d", pEntry->RssiSample.AvgRssi[2]); - printk("%-10s", get_phymode_str(pEntry->HTPhyMode.field.MODE)); - printk("%-6s", get_bw_str(pEntry->HTPhyMode.field.BW)); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", pEntry->RssiSample.AvgRssi[0])); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", pEntry->RssiSample.AvgRssi[1])); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", pEntry->RssiSample.AvgRssi[2])); + DBGPRINT(RT_DEBUG_OFF, ("%-10s", get_phymode_str(pEntry->HTPhyMode.field.MODE))); + DBGPRINT(RT_DEBUG_OFF, ("%-6s", get_bw_str(pEntry->HTPhyMode.field.BW))); #ifdef DOT11_VHT_AC if (pEntry->HTPhyMode.field.MODE == MODE_VHT) - printk("%dS-M%d", ((pEntry->HTPhyMode.field.MCS>>4) + 1), (pEntry->HTPhyMode.field.MCS & 0xf)); + DBGPRINT(RT_DEBUG_OFF, ("%dS-M%d" + , ((pEntry->HTPhyMode.field.MCS>>4) + 1) + , (pEntry->HTPhyMode.field.MCS & 0xf))); else #endif /* DOT11_VHT_AC */ - printk("%-6d", pEntry->HTPhyMode.field.MCS); - printk("%-6d", pEntry->HTPhyMode.field.ShortGI); - printk("%-6d", pEntry->HTPhyMode.field.STBC); - printk("%-7d", (int)(pEntry->StaIdleTimeout - pEntry->NoDataIdleCount)); - printk("%-7d", (int)DataRate); - printk("%-10d, %d, %d%%\n", pEntry->DebugFIFOCount, pEntry->DebugTxCount, - (pEntry->DebugTxCount) ? ((pEntry->DebugTxCount-pEntry->DebugFIFOCount)*100/pEntry->DebugTxCount) : 0); - - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("%-6d", pEntry->HTPhyMode.field.MCS)); + DBGPRINT(RT_DEBUG_OFF, ("%-6d", pEntry->HTPhyMode.field.ShortGI)); + DBGPRINT(RT_DEBUG_OFF, ("%-6d", pEntry->HTPhyMode.field.STBC)); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", (int)(pEntry->StaIdleTimeout - pEntry->NoDataIdleCount))); + DBGPRINT(RT_DEBUG_OFF, ("%-7d", (int)DataRate)); + DBGPRINT(RT_DEBUG_OFF, ("%-10d, %d, %d%%\n" + , pEntry->DebugFIFOCount + , pEntry->DebugTxCount + , (pEntry->DebugTxCount) ? + ((pEntry->DebugTxCount-pEntry->DebugFIFOCount)*100/pEntry->DebugTxCount) + : 0)); + + DBGPRINT(RT_DEBUG_OFF, ("\n")); ASSERT(pEntry->wcid <= MAX_LEN_OF_MAC_TABLE); tr_entry = &pAd->MacTab.tr_entry[pEntry->wcid]; - printk("Entry TxRx Info\n"); - printk("\tEntryType : %d\n", tr_entry->EntryType); - printk("\tHookingWdev : %p\n", tr_entry->wdev); - printk("\tIndexing : FuncTd=%d, WCID=%d\n", tr_entry->func_tb_idx, tr_entry->wcid); - printk("Entry TxRx Features\n"); - printk("\tIsCached, PortSecured, PsMode, LockTx, VndAth\n"); - printk("\t%d\t%d\t%d\t%d\t%d\n", tr_entry->isCached, tr_entry->PortSecured, + DBGPRINT(RT_DEBUG_OFF, ("Entry TxRx Info\n")); + DBGPRINT(RT_DEBUG_OFF, ("\tEntryType : %d\n", tr_entry->EntryType)); + DBGPRINT(RT_DEBUG_OFF, ("\tHookingWdev : %p\n", tr_entry->wdev)); + DBGPRINT(RT_DEBUG_OFF, ("\tIndexing : FuncTd=%d, WCID=%d\n" + , tr_entry->func_tb_idx, tr_entry->wcid)); + DBGPRINT(RT_DEBUG_OFF, ("Entry TxRx Features\n")); + DBGPRINT(RT_DEBUG_OFF, ("\tIsCached, PortSecured, PsMode, LockTx, VndAth\n")); + DBGPRINT(RT_DEBUG_OFF, ("\t%d\t%d\t%d\t%d\t%d\n", tr_entry->isCached, tr_entry->PortSecured, tr_entry->PsMode, tr_entry->LockEntryTx, - tr_entry->bIAmBadAtheros); - - printk("\t%-6s%-6s%-6s%-6s%-6s%-6s%-6s\n", "TxQId", "PktNum", "QHead", "QTail", "EnQCap", "DeQCap", "PktSeq"); + tr_entry->bIAmBadAtheros)); + + DBGPRINT(RT_DEBUG_OFF, ("\t%-6s%-6s%-6s%-6s%-6s%-6s%-6s\n" + , "TxQId", "PktNum", "QHead", "QTail", "EnQCap", "DeQCap", "PktSeq")); for (i = 0; i < WMM_QUE_NUM; i++){ RTMP_IRQ_LOCK(&pAd->irq_lock /* &tr_entry->txq_lock[i] */, irqflags); - printk("\t%d %6d %p %6p %d %d %d\n", + DBGPRINT(RT_DEBUG_OFF, ("\t%d %6d %p %6p %d %d %d\n", i, tr_entry->tx_queue[i].Number, tr_entry->tx_queue[i].Head, tr_entry->tx_queue[i].Tail, tr_entry->enq_cap, tr_entry->deq_cap, - tr_entry->TxSeq[i]); + tr_entry->TxSeq[i])); RTMP_IRQ_UNLOCK(&pAd->irq_lock /* &tr_entry->txq_lock[i] */, irqflags); } RTMP_IRQ_LOCK(&pAd->irq_lock /* &tr_entry->ps_queue_lock */, irqflags); - printk("\tpsQ %6d %p %p %d %d NoQ:%d\n", + DBGPRINT(RT_DEBUG_OFF, ("\tpsQ %6d %p %p %d %d NoQ:%d\n", tr_entry->ps_queue.Number, tr_entry->ps_queue.Head, tr_entry->ps_queue.Tail, tr_entry->enq_cap, tr_entry->deq_cap, - tr_entry->NonQosDataSeq); + tr_entry->NonQosDataSeq)); RTMP_IRQ_UNLOCK(&pAd->irq_lock /* &tr_entry->ps_queue_lock */, irqflags); - - printk("\n"); + + DBGPRINT(RT_DEBUG_OFF, ("\n")); return TRUE; } @@ -7699,9 +7958,10 @@ INT show_devinfo_proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) // TODO: shiang-7603 if (pAd->chipCap.hif_type != HIF_MT) { RTMP_IO_READ32(pAd, BKOFF_SLOT_CFG, &mac_val); - printk("BackOff Slot : %s slot time, BKOFF_SLOT_CFG(0x1104) = 0x%08x\n", - OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED) ? "short" : "long", - mac_val); + DBGPRINT(RT_DEBUG_OFF + , ("BackOff Slot : %s slot time, BKOFF_SLOT_CFG(0x1104) = 0x%08x\n" + , OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED) ? "short" : "long" + , mac_val)); } #endif /* defined(RTMP_MAC) || defined(RLT_MAC) */ @@ -8112,7 +8372,8 @@ INT Show_WpsManufacturer_Proc( OUT RTMP_STRING *pBuf, IN ULONG BufLen) { - sprintf(pBuf, "\tManufacturer = %s", pAd->StaCfg.WscControl.RegData.SelfInfo.Manufacturer); + snprintf(pBuf, BufLen, "\tManufacturer = %s" + , pAd->StaCfg.WscControl.RegData.SelfInfo.Manufacturer); return 0; } @@ -8121,7 +8382,8 @@ INT Show_WpsModelName_Proc( OUT RTMP_STRING *pBuf, IN ULONG BufLen) { - sprintf(pBuf, "\tModelName = %s", pAd->StaCfg.WscControl.RegData.SelfInfo.ModelName); + snprintf(pBuf, BufLen, "\tModelName = %s" + , pAd->StaCfg.WscControl.RegData.SelfInfo.ModelName); return 0; } @@ -8130,7 +8392,8 @@ INT Show_WpsDeviceName_Proc( OUT RTMP_STRING *pBuf, IN ULONG BufLen) { - sprintf(pBuf, "\tDeviceName = %s", pAd->StaCfg.WscControl.RegData.SelfInfo.DeviceName); + snprintf(pBuf, BufLen, "\tDeviceName = %s" + , pAd->StaCfg.WscControl.RegData.SelfInfo.DeviceName); return 0; } @@ -8139,7 +8402,8 @@ INT Show_WpsModelNumber_Proc( OUT RTMP_STRING *pBuf, IN ULONG BufLen) { - sprintf(pBuf, "\tModelNumber = %s", pAd->StaCfg.WscControl.RegData.SelfInfo.ModelNumber); + snprintf(pBuf, BufLen, "\tModelNumber = %s" + , pAd->StaCfg.WscControl.RegData.SelfInfo.ModelNumber); return 0; } @@ -8148,7 +8412,8 @@ INT Show_WpsSerialNumber_Proc( OUT RTMP_STRING *pBuf, IN ULONG BufLen) { - sprintf(pBuf, "\tSerialNumber = %s", pAd->StaCfg.WscControl.RegData.SelfInfo.SerialNumber); + snprintf(pBuf, BufLen, "\tSerialNumber = %s" + , pAd->StaCfg.WscControl.RegData.SelfInfo.SerialNumber); return 0; } #endif /* WSC_STA_SUPPORT */ @@ -8181,7 +8446,7 @@ INT Show_ModuleTxpower_Proc( if (pObj->ioctl_if_type != INT_APCLI) return FALSE; - ifIndex = pObj->ioctl_if; + ifIndex = (UCHAR)pObj->ioctl_if; DBGPRINT(RT_DEBUG_OFF, ("=============================================================\n")); if((pAd->ApCfg.ApCliTab[ifIndex].CtrlCurrState == APCLI_CTRL_CONNECTED) @@ -9441,7 +9706,7 @@ INT Set_ITxBfEn_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) #endif } - printk("MCS LUT check\n"); + DBGPRINT(RT_DEBUG_OFF, ("MCS LUT check\n")); } /* If enabling ITxBF then set LNA compensation, do a Divider Calibration and update BBP registers */ @@ -9553,7 +9818,8 @@ UCHAR phill; INT Set_TxBfProfileTag_Help(RTMP_ADAPTER *pAd, RTMP_STRING *arg) { - printk("========================================================================================================================\n" + DBGPRINT(RT_DEBUG_OFF, ( + "====================================================================================================\n" "TxBfProfile Tag setting example :\n" "iwpriv ra0 set TxBfProfileTagMatrix=ng:cw:nrow:nol:LM\n" "iwpriv ra0 set TxBfProfileTagMac=xx:xx:xx:xx:xx:xx\n" @@ -9580,8 +9846,7 @@ INT Set_TxBfProfileTag_Help(RTMP_ADAPTER *pAd, RTMP_STRING *arg) "iwpriv ra0 set TxBfProfileDataWrite=profile:subcarrier:psi21:pill\n" "iwpriv ra0 set TxBfProfileDataWriteAll=TxBfType:subcarrier:BW (TxBfType : 0x00 (IxBf), 0x01 (ETxBf)\n" " (BW : 0x00 (20M) , 0x01 (40M), 0x02 (80M)\n" - "========================================================================================================================\n"); - + "======================================================================\n")); CMDInIdx = 0; // Clear index return TRUE; } @@ -9728,7 +9993,8 @@ INT Set_TxBfProfileTagRead(RTMP_ADAPTER *pAd, RTMP_STRING *arg) */ validFlg = (readValue32[0] >> 7) & 0x1; - printk("============================= TxBf profile Tage Info ==============================\n" + DBGPRINT(RT_DEBUG_OFF, ( + "============================= TxBf profile Tage Info ==============================\n" "Pofile valid status = %d\n" "Profile index = %d\n\n" "PFMU_11 = 0x%x, PFMU_R12=0x%x, PFMU_R13=0x%x, PFMU_R14=0x%x\n\n" @@ -9747,8 +10013,7 @@ INT Set_TxBfProfileTagRead(RTMP_ADAPTER *pAd, RTMP_STRING *arg) TxScale[0], TxScale[1], TxScale[2], TxScale[3], StsSnr[0], StsSnr[1], PFMU_TimeOut, - FlgStatus[0], FlgStatus[1], FlgStatus[2], FlgStatus[3]); - + FlgStatus[0], FlgStatus[1], FlgStatus[2], FlgStatus[3])); return TRUE; } @@ -9775,9 +10040,10 @@ INT Set_TxBfProfileTagWrite(RTMP_ADAPTER *pAd, RTMP_STRING *arg) RTMP_IO_READ32(pAd, PFMU_R14, &readValue32[3]); RTMP_IO_READ32(pAd, PFMU_R15, &readValue32[4]); - printk("============================= TxBf profile Tage Write ==============================\n" + DBGPRINT(RT_DEBUG_OFF, ( + "============================= TxBf profile Tage Write ==============================\n" "Profile index = %d\n\n", - profileIdx); + profileIdx)); /* Bit 63:62 ng[1:0] @@ -9798,8 +10064,10 @@ INT Set_TxBfProfileTagWrite(RTMP_ADAPTER *pAd, RTMP_STRING *arg) readValue32[0] &= ~(0x3); readValue32[0] |= MatrixForm[4]; - printk("ng[1:0]=%d, cw[1:0]=%d, nrow[1:0]=%d, ncol[1:0]=%d, LM[1:0]=%d\n\n", - MatrixForm[0], MatrixForm[1], MatrixForm[2], MatrixForm[3], MatrixForm[4]); + DBGPRINT(RT_DEBUG_OFF, ( + "ng[1:0]=%d, cw[1:0]=%d, nrow[1:0]=%d, ncol[1:0]=%d, LM[1:0]=%d\n\n", + MatrixForm[0], MatrixForm[1], MatrixForm[2], + MatrixForm[3], MatrixForm[4])); } /* @@ -9819,8 +10087,8 @@ INT Set_TxBfProfileTagWrite(RTMP_ADAPTER *pAd, RTMP_STRING *arg) readValue32[0] &= 0x000000FF; readValue32[0] |= value32; - printk("Destimation MAC Address=%x:%x:%x:%x:%x:%x\n\n", - macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]); + DBGPRINT(RT_DEBUG_OFF, ("Destimation MAC Address=%x:%x:%x:%x:%x:%x\n\n", + macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5])); } /* @@ -9837,8 +10105,9 @@ INT Set_TxBfProfileTagWrite(RTMP_ADAPTER *pAd, RTMP_STRING *arg) value32 |= (LONG)TxScale[3] << 0; readValue32[3] = value32; - printk("Tx1_scal_2ss=0x%x, Tx0_scale_2ss=0x%x, Tx1_scal_1ss=0x%x, Tx0_scale_1ss=0x%x\n\n", - TxScale[0], TxScale[1], TxScale[2], TxScale[3]); + DBGPRINT(RT_DEBUG_OFF, ( + "Tx1_scal_2ss=0x%x, Tx0_scale_2ss=0x%x, Tx1_scal_1ss=0x%x, Tx0_scale_1ss=0x%x\n\n", + TxScale[0], TxScale[1], TxScale[2], TxScale[3])); } /* @@ -9852,7 +10121,7 @@ INT Set_TxBfProfileTagWrite(RTMP_ADAPTER *pAd, RTMP_STRING *arg) readValue32[2] &= 0x0000FFFF; readValue32[2] |= value32; - printk("STS1_SNR=0x%x, STS0_SNR=0x%x\n", StsSnr[0], StsSnr[1]); + DBGPRINT(RT_DEBUG_OFF, ("STS1_SNR=0x%x, STS0_SNR=0x%x\n", StsSnr[0], StsSnr[1])); } /* @@ -9863,11 +10132,11 @@ INT Set_TxBfProfileTagWrite(RTMP_ADAPTER *pAd, RTMP_STRING *arg) readValue32[2] &= 0xFFFF0000; readValue32[2] |= (ULONG)PFMU_TimeOut; - printk("timeout[15:0]=0x%x\n", PFMU_TimeOut); + DBGPRINT(RT_DEBUG_OFF, ("timeout[15:0]=0x%x\n", PFMU_TimeOut)); } - printk("PFMU_11 = 0x%x, PFMU_R12=0x%x, PFMU_R13=0x%x, PFMU_R14=0x%x\n\n", - readValue32[0], readValue32[1], readValue32[2], readValue32[3]); + DBGPRINT(RT_DEBUG_OFF, ("PFMU_11 = 0x%x, PFMU_R12=0x%x, PFMU_R13=0x%x, PFMU_R14=0x%x\n\n", + readValue32[0], readValue32[1], readValue32[2], readValue32[3])); /* Bit 15 : 0 timeout[15:0] @@ -9880,9 +10149,9 @@ INT Set_TxBfProfileTagWrite(RTMP_ADAPTER *pAd, RTMP_STRING *arg) readValue32[4] |= FlgStatus[2] << 6; readValue32[4] |= FlgStatus[3] << 5; - printk("LD=%d, EO=%d, IO=%d, I/E=%d\n" + DBGPRINT(RT_DEBUG_OFF, ("LD=%d, EO=%d, IO=%d, I/E=%d\n" "===================================================================================\n", - FlgStatus[0], FlgStatus[1], FlgStatus[2], FlgStatus[3]); + FlgStatus[0], FlgStatus[1], FlgStatus[2], FlgStatus[3])); } @@ -9913,7 +10182,7 @@ INT Set_TxBfProfileDataRead(RTMP_ADAPTER *pAd, RTMP_STRING *arg) UINT value32, readValue32[5]; INT i; - printk("arg length=%d\n", strlen(arg)); + DBGPRINT(RT_DEBUG_OFF, ("arg length=%d\n", strlen(arg))); /* Profile Select : Subcarrier Select */ if(strlen(arg) != 5) @@ -9944,7 +10213,8 @@ INT Set_TxBfProfileDataRead(RTMP_ADAPTER *pAd, RTMP_STRING *arg) psi21 = (readValue32[0] >> 16) & 0x00FF; phill = (readValue32[0] >> 0) & 0x00FF; - printk("============================= TxBf profile Data Info ==============================\n" + DBGPRINT(RT_DEBUG_OFF, ( + "============================= TxBf profile Data Info ==============================\n" "Profile index = %d, subcarrierIdx = %d\n\n" "PFMU_19 = 0x%x, PFMU_R20=0x%x, PFMU_R21=0x%x, PFMU_R22=0x%x\n\n" "psi21 = 0x%x\n\n" @@ -9952,7 +10222,7 @@ INT Set_TxBfProfileDataRead(RTMP_ADAPTER *pAd, RTMP_STRING *arg) "===================================================================================\n", profileIdx, subcarrierIdx, readValue32[0], readValue32[1], readValue32[2], readValue32[3], - psi21, phill); + psi21, phill)); return TRUE; } @@ -10171,16 +10441,16 @@ INT Set_TxBfProfileDataReadAll(RTMP_ADAPTER *pAd, RTMP_STRING *arg) if ((idx & 0x7) == 0) { - printk("\n"); - printk("(%x, %x) ", psi21_I, phill_I); + DBGPRINT(RT_DEBUG_OFF, ("\n")); + DBGPRINT(RT_DEBUG_OFF, ("(%x, %x) ", psi21_I, phill_I)); } else - printk("(%x, %x) ", psi21_I, phill_I); + DBGPRINT(RT_DEBUG_OFF, ("(%x, %x) ", psi21_I, phill_I)); idx++; } - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); /* Positive subcarriers */ idx = 0; @@ -10202,11 +10472,11 @@ INT Set_TxBfProfileDataReadAll(RTMP_ADAPTER *pAd, RTMP_STRING *arg) if ((idx & 0x7) == 0) { - printk("\n"); - printk("(%x, %x) ", psi21_I, phill_I); + DBGPRINT(RT_DEBUG_OFF, ("\n")); + DBGPRINT(RT_DEBUG_OFF, ("(%x, %x) ", psi21_I, phill_I)); } else - printk("(%x, %x) ", psi21_I, phill_I); + DBGPRINT(RT_DEBUG_OFF, ("(%x, %x) ", psi21_I, phill_I); idx++; } @@ -10245,8 +10515,9 @@ INT Set_TxBfProfileTag_Matrix(RTMP_ADAPTER *pAd, RTMP_STRING *arg) CMDInIdx |= 1; - printk("ng[1:0]=%x\n" "cw[1:0]=%x\n" "nrow[1:0]=%x\n" "nol[1:0]=%x\n" "LM[1:0]=%x\n", - MatrixForm[0], MatrixForm[1], MatrixForm[2], MatrixForm[3], MatrixForm[4]); + DBGPRINT(RT_DEBUG_OFF, + ("ng[1:0]=%x\n cw[1:0]=%x\n nrow[1:0]=%x\n nol[1:0]=%x\n LM[1:0]=%x\n", + MatrixForm[0], MatrixForm[1], MatrixForm[2], MatrixForm[3], MatrixForm[4])); return TRUE; } @@ -10271,8 +10542,8 @@ INT Set_TxBfProfileTag_SNR(RTMP_ADAPTER *pAd, RTMP_STRING *arg) CMDInIdx |= 8; - printk("STS1_SNR=0x%x\n" "STS1_SNR=0x%x\n", - StsSnr[0], StsSnr[1]); + DBGPRINT(RT_DEBUG_OFF, ("STS1_SNR=0x%x\n STS1_SNR=0x%x\n", + StsSnr[0], StsSnr[1])); return TRUE; } @@ -10297,8 +10568,9 @@ INT Set_TxBfProfileTag_TxScale(RTMP_ADAPTER *pAd, RTMP_STRING *arg) CMDInIdx |= 4; - printk("Tx1_scale_2ss=0x%x\n" "Tx0_scale_2ss=0x%x\n" "Tx1_scale_1ss=0x%x\n" "Tx0_scale_1ss=0x%x\n", - TxScale[0], TxScale[1], TxScale[2], TxScale[3]); + DBGPRINT(RT_DEBUG_OFF, ( + "Tx1_scale_2ss=0x%x\n Tx0_scale_2ss=0x%x\n Tx1_scale_1ss=0x%x\n Tx0_scale_1ss=0x%x\n", + TxScale[0], TxScale[1], TxScale[2], TxScale[3])); return TRUE; } @@ -10324,8 +10596,14 @@ INT Set_TxBfProfileTag_MAC(RTMP_ADAPTER *pAd, RTMP_STRING *arg) CMDInIdx |= 2; - printk("Set_TxBfProfileTage_MAC\n" "DS MAC=0x%x:0x%x:0x%x:0x%x:0x%x:0x%x \n", - macAddr[0],macAddr[1],macAddr[2],macAddr[3],macAddr[4],macAddr[5]); + DBGPRINT(RT_DEBUG_OFF, ( + "Set_TxBfProfileTage_MAC\n DS MAC=0x%x:0x%x:0x%x:0x%x:0x%x:0x%x\n", + macAddr[0], + macAddr[1], + macAddr[2], + macAddr[3], + macAddr[4], + macAddr[5])); return TRUE; } @@ -10350,8 +10628,8 @@ INT Set_TxBfProfileTag_Flg(RTMP_ADAPTER *pAd, RTMP_STRING *arg) CMDInIdx |= 32; - printk("LD=%d\n" "EO=%d\n" "IO=%d\n" "I/E=%d\n", - FlgStatus[0], FlgStatus[1], FlgStatus[2], FlgStatus[3]); + DBGPRINT(RT_DEBUG_OFF, ("LD=%d\n EO=%d\n IO=%d\n I/E=%d\n", + FlgStatus[0], FlgStatus[1], FlgStatus[2], FlgStatus[3])); return TRUE; } @@ -10622,7 +10900,11 @@ INT Set_MonitorMode_Proc( INT Set_VcoPeriod_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) { - pAd->chipCap.VcoPeriod = simple_strtol(arg, 0, 10); + INT ret; + LONG ret_value; + + ret = kstrtol(arg, 10, &ret_value); + pAd->chipCap.VcoPeriod = (UINT8)ret_value; DBGPRINT(RT_DEBUG_TRACE, ("VCO Period = %d seconds\n", pAd->chipCap.VcoPeriod)); @@ -10807,8 +11089,11 @@ INT set_cap_support(RTMP_ADAPTER *pAd, RTMP_STRING *arg) INT set_vco_cal(RTMP_ADAPTER *pAd, RTMP_STRING *arg) { UCHAR vco_cal; + INT ret; + LONG ret_value; - vco_cal = simple_strtol(arg, 0, 10); + ret = kstrtol(arg, 10, &ret_value); + vco_cal = (UCHAR)ret_value; pAd->fpga_ctl.vco_cal = vco_cal ? TRUE : FALSE; DBGPRINT(RT_DEBUG_TRACE, ("%s(): vco_cal=%s\n", __FUNCTION__, (pAd->fpga_ctl.vco_cal ? "Enabled" : "Stopped"))); @@ -10820,8 +11105,11 @@ INT set_vco_cal(RTMP_ADAPTER *pAd, RTMP_STRING *arg) INT set_tr_stop(RTMP_ADAPTER *pAd, RTMP_STRING *arg) { UCHAR stop; + INT ret; + LONG ret_value; - stop = simple_strtol(arg, 0, 10); + ret = kstrtol(arg, 10, &ret_value); + stop = (UCHAR)ret_value; pAd->fpga_ctl.fpga_tr_stop = (stop <= 4 ? stop : 0); DBGPRINT(RT_DEBUG_TRACE, ("%s(): fpga_tr_stop=0x%x\n", __FUNCTION__, pAd->fpga_ctl.fpga_tr_stop)); @@ -10974,7 +11262,7 @@ INT set_fpga_mode(RTMP_ADAPTER *pAd, RTMP_STRING *arg) } #endif /* CONFIG_AP_SUPPORT */ - pAd->fpga_ctl.fpga_on = fpga_on; + pAd->fpga_ctl.fpga_on = (UINT8)fpga_on; DBGPRINT(RT_DEBUG_TRACE, ("%s(): fpga_on=%d\n", __FUNCTION__, pAd->fpga_ctl.fpga_on)); DBGPRINT(RT_DEBUG_TRACE, ("\tdata_phy=%d\n", pAd->fpga_ctl.tx_data_phy)); DBGPRINT(RT_DEBUG_TRACE, ("\tdata_bw=%d\n", pAd->fpga_ctl.tx_data_bw)); @@ -11240,7 +11528,7 @@ void DisplayTxAgg (RTMP_ADAPTER *pAd) for (i=0; i<MAX_AGG_CNT; i++) { DBGPRINT(RT_DEBUG_OFF, ("\t%d MPDU=%ld (%ld%%)\n", i+1, aggCnt[i+2], aggCnt[i+2]*100/totalCount)); } - printk("====================\n"); + DBGPRINT(RT_DEBUG_OFF, ("====================\n")); } #endif /* DOT11_N_SUPPORT */ @@ -11471,7 +11759,8 @@ INT RTMPShowCfgValue( { if ((strlen(pBuf) + strlen(PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->name)) >= MaxLen) break; - sprintf(pBuf, "%s%s\n", pBuf, PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->name); + snprintf(pBuf, MaxLen, "%s%s\n", pBuf + , PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->name); } } diff --git a/common/cmm_mac_usb.c b/common/cmm_mac_usb.c index 4e84e01..8a472f3 100755 --- a/common/cmm_mac_usb.c +++ b/common/cmm_mac_usb.c @@ -2422,13 +2422,25 @@ check: SET_OS_PKT_LEN(pkt, len); + /* + * Correct tail pointer of tail should be set to avoid skb overflow; + */ + skb_set_tail_pointer(RTPKT_TO_OSPKT(pkt), len); + #ifdef RT_BIG_ENDIAN MTMacInfoEndianChange(pAd, buf, TYPE_TMACINFO, sizeof(TMAC_TXD_L)); #endif /* RT_BIG_ENDIAN */ /* Now do hardware-depened kick out.*/ RTMP_SEM_LOCK(&pAd->BcnRingLock); - HAL_KickOutMgmtTx(pAd, Q_IDX_BCN, pkt, buf, len); + /* + * Bcn_buf->bcn_state should set before kickout, + * to avoid beacon sending process breaked and Txs received + * before bcn_buf->bcn_state set to BCN_TX_WRITE_TO_DMA, + * which makes bcn_state over-written. + */ bcn_buf->bcn_state = BCN_TX_WRITE_TO_DMA; + HAL_KickOutMgmtTx(pAd, Q_IDX_BCN, pkt, buf, len); + /*bcn_buf->bcn_state = BCN_TX_WRITE_TO_DMA;*/ RTMP_SEM_UNLOCK(&pAd->BcnRingLock); } else { DBGPRINT(RT_DEBUG_ERROR, ("%s(): BeaconPkt is NULL!\n", __FUNCTION__)); diff --git a/common/cmm_profile.c b/common/cmm_profile.c index 4452222..5a83e97 100755 --- a/common/cmm_profile.c +++ b/common/cmm_profile.c @@ -534,7 +534,7 @@ INT RTMPGetKeyParameterWithOffset( return (FALSE); } - *end_offset = end_ptr - buffer; + *end_offset = (USHORT)(end_ptr - buffer); NdisMoveMemory(temp_buf2, start_ptr, end_ptr-start_ptr); temp_buf2[end_ptr-start_ptr]='\0'; @@ -880,7 +880,8 @@ static void rtmp_read_ap_client_from_file( wdev->AuthMode = Ndis802_11AuthModeOpen; DBGPRINT(RT_DEBUG_TRACE, ("I/F(apcli%d) ApCli_AuthMode=%d \n", i, wdev->AuthMode)); - RTMPMakeRSNIE(pAd, wdev->AuthMode, wdev->WepStatus, (i + MIN_NET_DEVICE_FOR_APCLI)); + RTMPMakeRSNIE(pAd, wdev->AuthMode, + wdev->WepStatus, (UCHAR)(i + MIN_NET_DEVICE_FOR_APCLI)); } } @@ -919,7 +920,8 @@ static void rtmp_read_ap_client_from_file( pApCliEntry->bMixCipher = FALSE; DBGPRINT(RT_DEBUG_TRACE, ("I/F(apcli%d) APCli_EncrypType = %d \n", i, wdev->WepStatus)); - RTMPMakeRSNIE(pAd, wdev->AuthMode, wdev->WepStatus, (i + MIN_NET_DEVICE_FOR_APCLI)); + RTMPMakeRSNIE(pAd, wdev->AuthMode, + wdev->WepStatus, (UCHAR)(i + MIN_NET_DEVICE_FOR_APCLI)); } } @@ -940,7 +942,7 @@ static void rtmp_read_ap_client_from_file( } NdisMoveMemory(pApCliEntry->PSK, macptr, strlen(macptr)); - pApCliEntry->PSKLen = strlen(macptr); + pApCliEntry->PSKLen = (UCHAR)strlen(macptr); DBGPRINT(RT_DEBUG_TRACE, ("I/F(apcli%d) APCli_WPAPSK_KEY=%s, Len=%d\n", i, pApCliEntry->PSK, pApCliEntry->PSKLen)); if ((pApCliEntry->wdev.AuthMode != Ndis802_11AuthModeWPAPSK) && @@ -1047,7 +1049,7 @@ static void rtmp_read_ap_client_from_file( wdev = &pAd->ApCfg.ApCliTab[i].wdev; wdev->DesiredTransmitSetting.field.FixedTxMode = - RT_CfgSetFixedTxPhyMode(macptr); + (USHORT)RT_CfgSetFixedTxPhyMode(macptr); DBGPRINT(RT_DEBUG_TRACE, ("I/F(apcli%d) Tx Mode = %d\n", i, wdev->DesiredTransmitSetting.field.FixedTxMode)); } @@ -1061,7 +1063,7 @@ static void rtmp_read_ap_client_from_file( wdev = &pAd->ApCfg.ApCliTab[i].wdev; wdev->DesiredTransmitSetting.field.MCS = - RT_CfgSetTxMCSProc(macptr, &wdev->bAutoTxRateSwitch); + (UCHAR)RT_CfgSetTxMCSProc(macptr, &wdev->bAutoTxRateSwitch); DBGPRINT(RT_DEBUG_TRACE, ("I/F(apcli%d) Tx MCS = %s(%d)\n", i, (wdev->DesiredTransmitSetting.field.MCS == MCS_AUTO ? "AUTO" : ""), @@ -2192,7 +2194,7 @@ static void HTParametersHook( for (i = 0, Bufptr = rstrtok(pValueStr,";"); (Bufptr && i < MAX_MBSSID_NUM(pAd)); Bufptr = rstrtok(NULL,";"), i++) { pAd->ApCfg.MBSSID[i].wdev.DesiredTransmitSetting.field.FixedTxMode = - RT_CfgSetFixedTxPhyMode(Bufptr); + (USHORT)RT_CfgSetFixedTxPhyMode(Bufptr); DBGPRINT(RT_DEBUG_TRACE, ("(IF-ra%d) Fixed Tx Mode = %d\n", i, pAd->ApCfg.MBSSID[i].wdev.DesiredTransmitSetting.field.FixedTxMode)); } @@ -2202,7 +2204,7 @@ static void HTParametersHook( IF_DEV_CONFIG_OPMODE_ON_STA(pAd) { pAd->StaCfg.wdev.DesiredTransmitSetting.field.FixedTxMode = - RT_CfgSetFixedTxPhyMode(pValueStr); + (USHORT)RT_CfgSetFixedTxPhyMode(pValueStr); DBGPRINT(RT_DEBUG_TRACE, ("Fixed Tx Mode = %d\n", pAd->StaCfg.wdev.DesiredTransmitSetting.field.FixedTxMode)); } @@ -2249,7 +2251,7 @@ static void HTParametersHook( struct wifi_dev *wdev = &pAd->ApCfg.MBSSID[i].wdev; Value = simple_strtol(Bufptr, 0, 10); if ((Value >= 0 && Value <= 23) || (Value == 32)) - wdev->DesiredTransmitSetting.field.MCS = Value; + wdev->DesiredTransmitSetting.field.MCS = (USHORT)Value; else wdev->DesiredTransmitSetting.field.MCS = MCS_AUTO; DBGPRINT(RT_DEBUG_TRACE, ("(IF-ra%d) HT: MCS = %s(%d)\n", i, @@ -2266,7 +2268,7 @@ static void HTParametersHook( Value = simple_strtol(pValueStr, 0, 10); if ((Value >= 0 && Value <= 23) || (Value == 32)) { - wdev->DesiredTransmitSetting.field.MCS = Value; + wdev->DesiredTransmitSetting.field.MCS = (USHORT)Value; #ifdef P2P_SUPPORT pAd->ApCfg.MBSSID[MAIN_MBSSID].wdev.DesiredTransmitSetting.field.MCS = Value; #endif /* P2P_SUPPORT */ @@ -2502,10 +2504,10 @@ static void HTParametersHook( } #endif /* DOT11_N_SUPPORT */ - if (RTMPGetKeyParameter("TXRX_RXV_ON", pValueStr, 25, pInput, TRUE)) { + if (RTMPGetKeyParameter("TXRX_RXV_ON", pValueStr, 25, pInput, TRUE)) { Value = simple_strtol(pValueStr, 0, 10); - pAd->CommonCfg.bTXRX_RXV_ON = Value; + pAd->CommonCfg.bTXRX_RXV_ON = (BOOLEAN)Value; DBGPRINT(RT_DEBUG_TRACE, ("TXRX_RXV_ON = %s\n", (Value == 1) ? "ON" : "OFF" )); } @@ -2695,7 +2697,7 @@ NDIS_STATUS StoreConnectInfo( void RTMPSetCountryCode(RTMP_ADAPTER *pAd, RTMP_STRING *CountryCode) { NdisMoveMemory(pAd->CommonCfg.CountryCode, CountryCode , 2); - pAd->CommonCfg.CountryCode[2] = ' '; + pAd->CommonCfg.CountryCode[2] = 0; #ifdef CONFIG_STA_SUPPORT #ifdef EXT_BUILD_CHANNEL_LIST IF_DEV_CONFIG_OPMODE_ON_STA(pAd) @@ -2858,7 +2860,8 @@ NDIS_STATUS RTMPSetProfileParameters( { NdisMoveMemory(pAd->ApCfg.MBSSID[i].Ssid, tmpbuf , strlen(tmpbuf)); pAd->ApCfg.MBSSID[i].Ssid[strlen(tmpbuf)] = '\0'; - pAd->ApCfg.MBSSID[i].SsidLen = strlen((RTMP_STRING *) pAd->ApCfg.MBSSID[i].Ssid); + pAd->ApCfg.MBSSID[i].SsidLen = + (UCHAR)strlen((RTMP_STRING *) pAd->ApCfg.MBSSID[i].Ssid); if (bSSIDxIsUsed == FALSE) { bSSIDxIsUsed = TRUE; @@ -2870,7 +2873,8 @@ NDIS_STATUS RTMPSetProfileParameters( { if(RTMPGetKeyParameter("SSID", tmpbuf, 256, pBuffer, FALSE)) { - BssidCountSupposed = delimitcnt(tmpbuf, ";") + 1; + BssidCountSupposed = + (UCHAR)(delimitcnt(tmpbuf, ";") + 1); if (pAd->ApCfg.BssidNum != BssidCountSupposed) { DBGPRINT_ERR(("Your no. of SSIDs( = %d) does not match your BssidNum( = %d)!\n", BssidCountSupposed, pAd->ApCfg.BssidNum)); @@ -2893,7 +2897,8 @@ NDIS_STATUS RTMPSetProfileParameters( NdisMoveMemory(pAd->ApCfg.MBSSID[apidx].Ssid, macptr , strlen(macptr)); pAd->ApCfg.MBSSID[apidx].Ssid[strlen(macptr)] = '\0'; - pAd->ApCfg.MBSSID[apidx].SsidLen = strlen((RTMP_STRING *)pAd->ApCfg.MBSSID[apidx].Ssid); + pAd->ApCfg.MBSSID[apidx].SsidLen = + (UCHAR)strlen((RTMP_STRING *)pAd->ApCfg.MBSSID[apidx].Ssid); DBGPRINT(RT_DEBUG_TRACE, ("SSID[%d]=%s\n", i, pAd->ApCfg.MBSSID[apidx].Ssid)); } @@ -2904,7 +2909,8 @@ NDIS_STATUS RTMPSetProfileParameters( { NdisMoveMemory(pAd->ApCfg.MBSSID[BSS0].Ssid, tmpbuf , strlen(tmpbuf)); pAd->ApCfg.MBSSID[BSS0].Ssid[strlen(tmpbuf)] = '\0'; - pAd->ApCfg.MBSSID[BSS0].SsidLen = strlen((RTMP_STRING *) pAd->ApCfg.MBSSID[BSS0].Ssid); + pAd->ApCfg.MBSSID[BSS0].SsidLen = + (UCHAR)strlen((RTMP_STRING *) pAd->ApCfg.MBSSID[BSS0].Ssid); DBGPRINT(RT_DEBUG_TRACE, ("SSID=%s\n", pAd->ApCfg.MBSSID[BSS0].Ssid)); } } @@ -3463,7 +3469,8 @@ NDIS_STATUS RTMPSetProfileParameters( /*AutoChannelSkipList*/ if (RTMPGetKeyParameter("AutoChannelSkipList", tmpbuf, 50, pBuffer, FALSE)) { - pAd->ApCfg.AutoChannelSkipListNum = delimitcnt(tmpbuf, ";") + 1; + pAd->ApCfg.AutoChannelSkipListNum = + (UCHAR)(delimitcnt(tmpbuf, ";") + 1); if ( pAd->ApCfg.AutoChannelSkipListNum > 10 ) { DBGPRINT(RT_DEBUG_TRACE, ("Your no. of AutoChannelSkipList( %d ) is larger than 10 (boundary)\n",pAd->ApCfg.AutoChannelSkipListNum)); @@ -4198,7 +4205,7 @@ NDIS_STATUS RTMPSetProfileParameters( { ULONG fpga_on = simple_strtol(tmpbuf, 0, 10); - pAd->fpga_ctl.fpga_on = fpga_on > 0 ? fpga_on : 0; + pAd->fpga_ctl.fpga_on = (UINT8)(fpga_on > 0 ? fpga_on : 0); DBGPRINT(RT_DEBUG_OFF, ("%s(): FPGA_ON=%d\n", __FUNCTION__, pAd->fpga_ctl.fpga_on)); } @@ -4208,7 +4215,7 @@ NDIS_STATUS RTMPSetProfileParameters( { ULONG dma_sch = simple_strtol(tmpbuf, 0, 10); - pAd->fpga_ctl.dma_mode = dma_sch > 0 ? dma_sch : 0; + pAd->fpga_ctl.dma_mode = (UINT8)(dma_sch > 0 ? dma_sch : 0); DBGPRINT(RT_DEBUG_OFF, ("%s(): DMA Scheduler=%d\n", __FUNCTION__, pAd->fpga_ctl.dma_mode)); } @@ -4529,7 +4536,7 @@ NDIS_STATUS RTMPSetProfileParameters( if (lInfo > 90 || lInfo < 60) pAd->StaCfg.dBmToRoam = -70; else - pAd->StaCfg.dBmToRoam = (CHAR)(-1)*lInfo; + pAd->StaCfg.dBmToRoam = (CHAR)((-1)*lInfo); DBGPRINT(RT_DEBUG_TRACE, ("RoamThreshold=%d dBm\n", pAd->StaCfg.dBmToRoam)); } @@ -5266,8 +5273,12 @@ NDIS_STATUS RTMPSetProfileParameters( /* set GPIO High Low */ if (RTMPGetKeyParameter("WOW_GPIOHighLow", tmpbuf, 10, pBuffer, TRUE)) Set_WOW_GPIOHighLow(pAd, tmpbuf); - -#endif /* (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(NEW_WOW_SUPPORT) || defined(MT_WOW_SUPPORT)*/ + + /* set GPIO High Low */ + if (RTMPGetKeyParameter("WOW_KeepAlive", tmpbuf, 10, pBuffer, TRUE)) + Set_WOW_KeepAlive_Proc(pAd, tmpbuf); + +#endif /* (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(MT_WOW_SUPPORT)*/ #ifdef MICROWAVE_OVEN_SUPPORT if (RTMPGetKeyParameter("MO_FalseCCATh", tmpbuf, 10, pBuffer, TRUE)) @@ -5294,9 +5305,17 @@ NDIS_STATUS RTMPSetProfileParameters( { long PS_RETRIEVE; PS_RETRIEVE = simple_strtol(tmpbuf, 0, 10); - pAd->bPS_Retrieve = PS_RETRIEVE; + pAd->bPS_Retrieve = (BOOLEAN)PS_RETRIEVE; DBGPRINT(RT_DEBUG_OFF, ("PS_RETRIEVE = %lx\n",PS_RETRIEVE)); } +#ifdef SMART_CARRIER_SENSE_SUPPORT + if (RTMPGetKeyParameter("SCSEnable", tmpbuf, 10, pBuffer, TRUE)) { + long SCSEnable; + SCSEnable = simple_strtol(tmpbuf, 0, 10); + pAd->SCSCtrl.SCSEnable = (BOOLEAN)SCSEnable; + DBGPRINT(RT_DEBUG_OFF, ("Smart Carrier Sense = %lx\n", SCSEnable)); + } +#endif /* SMART_CARRIER_SENSE_SUPPORT */ }while(0); @@ -5886,16 +5905,13 @@ NDIS_STATUS RTMPSetSingleSKUParameters( int index, i; CH_POWER *StartCh = NULL; UCHAR channel, *temp; + CH_POWER *pwr = NULL; + NDIS_STATUS status = NDIS_STATUS_FAILURE; RTMP_OS_FS_INFO osFSInfo; DlListInit(&pAd->SingleSkuPwrList); - - /* init*/ - os_alloc_mem(NULL, (UCHAR **)&buffer, MAX_INI_BUFFER_SIZE); - if (buffer == NULL) - return FALSE; - RtmpOSFSInfoChange(&osFSInfo, TRUE); + /* open card information file*/ srcf = RtmpOSFileOpen(SINGLE_SKU_TABLE_FILE_NAME, O_RDONLY, 0); if (IS_FILE_OPEN_ERR(srcf)) @@ -5903,9 +5919,16 @@ NDIS_STATUS RTMPSetSingleSKUParameters( /* card information file does not exist */ DBGPRINT(RT_DEBUG_TRACE, ("--> Error opening %s\n", SINGLE_SKU_TABLE_FILE_NAME)); - goto free_resource; + goto open_fail; } + /* init*/ + os_alloc_mem(NULL, (UCHAR **)&buffer, MAX_INI_BUFFER_SIZE); + if (buffer == NULL) { + DBGPRINT(RT_DEBUG_ERROR, ("%s alloc %d fail\n", __func__, + MAX_INI_BUFFER_SIZE)); + goto alloc_fail; + } #ifdef RTMP_INTERNAL_TX_ALC if (pAd->TxPowerCtrl.bInternalTxALC != TRUE) @@ -5920,172 +5943,200 @@ NDIS_STATUS RTMPSetSingleSKUParameters( /* card information file exists so reading the card information */ NdisZeroMemory(buffer, MAX_INI_BUFFER_SIZE); retval = RtmpOSFileRead(srcf, buffer, MAX_INI_BUFFER_SIZE); - if (retval < 0) - { + if (retval < 0) { /* read fail */ DBGPRINT(RT_DEBUG_TRACE,("--> Read %s error %d\n", SINGLE_SKU_TABLE_FILE_NAME, -retval)); + goto read_fail; } - else - { - for ( readline = ptr = buffer, index=0; (ptr = strchr(readline, '\n')) != NULL; readline = ptr + 1, index++ ) - { - *ptr = '\0'; - - if ( readline[0] == '#' ) - continue; + for (readline = ptr = buffer, index = 0; (ptr = strchr(readline, '\n')) != NULL; readline = ptr + 1, index++) { + *ptr = '\0'; - if ( !strncmp(readline, "ch", 2) ) - { + if (readline[0] == '#') + continue; - CH_POWER *pwr = NULL; + if (!strncmp(readline, "ch", 2)) { - os_alloc_mem(NULL, (UCHAR **)&pwr, sizeof(*pwr)); - NdisZeroMemory(pwr, sizeof(*pwr)); + CH_POWER *pwr = NULL; - token= rstrtok(readline +2 ," "); - channel = simple_strtol(token, 0, 10); - pwr->StartChannel = channel; + os_alloc_mem(NULL, (UCHAR **)&pwr, sizeof(*pwr)); + if (pwr == NULL) { + DBGPRINT(RT_DEBUG_ERROR, ("%s alloc pwr fail\n", __func__)); + goto read_fail; + } - if (pwr->StartChannel <= 14) - { - for ( i= 0 ; i < SINGLE_SKU_TABLE_CCK_LENGTH ; i++ ) - { + NdisZeroMemory(pwr, sizeof(*pwr)); + + token = rstrtok(readline + 2, " "); + if (token == NULL) { + DBGPRINT(RT_DEBUG_WARN, ("%s: token is NULL\n", __func__)); + goto parse_fail; + } + channel = simple_strtol(token, 0, 10); + pwr->StartChannel = channel; + if (pwr->StartChannel <= 0) { + DBGPRINT(RT_DEBUG_ERROR, ("[Incorrect SingleSKU DAT]: Channel <= 0\n")); + goto parse_fail; + } + + if (pwr->StartChannel <= 14) { + for (i = 0 ; i < SINGLE_SKU_TABLE_CCK_LENGTH ; i++) { token = rstrtok(NULL ," "); - if ( token == NULL ) - break; + if (token == NULL) { + DBGPRINT(RT_DEBUG_ERROR, + ("[Incorrect SingleSKU DAT]: (Channel, CCK Index) = (%d, %d) token is NULL\n", channel, i)); + goto parse_fail; + } + if (simple_strtol(token, 0, 10) == (long int) 0) { /* No Value or Value=0 */ + DBGPRINT(RT_DEBUG_ERROR, + ("[Incorrect SingleSKU DAT]: (Channel, CCK Index) = (%d, %d) value is invalid\n", channel, i)); + goto parse_fail; + } pwr->PwrCCK[i] = simple_strtol(token, 0, 10) * 2; } - } + } - for ( i= 0 ; i < SINGLE_SKU_TABLE_OFDM_LENGTH ; i++ ) - { - token = rstrtok(NULL ," "); - if ( token == NULL ) - break; - pwr->PwrOFDM[i] = simple_strtol(token, 0, 10) *2; + for (i = 0 ; i < SINGLE_SKU_TABLE_OFDM_LENGTH ; i++) { + token = rstrtok(NULL, " "); + if (token == NULL) { + DBGPRINT(RT_DEBUG_ERROR, + ("[Incorrect SingleSKU DAT]: (Channel, OFDM Index) = (%d, %d) token is NULL\n", channel, i)); + goto parse_fail; } + if (simple_strtol(token, 0, 10) == (long int) 0) { + DBGPRINT(RT_DEBUG_ERROR, + ("[Incorrect SingleSKU DAT]: (Channel, OFDM Index) = (%d, %d) value is invalid\n", channel, i)); + goto parse_fail; + } + pwr->PwrOFDM[i] = simple_strtol(token, 0, 10) * 2; + } - for ( i= 0 ; i < SINGLE_SKU_TABLE_HT_LENGTH ; i++ ) - { - token = rstrtok(NULL ," "); - if ( token == NULL ) - break; - pwr->PwrHT20[i] = simple_strtol(token, 0, 10) *2; + for (i = 0 ; i < SINGLE_SKU_TABLE_HT_LENGTH ; i++) { + token = rstrtok(NULL, " "); + if (token == NULL) { + DBGPRINT(RT_DEBUG_ERROR, + ("[Incorrect SingleSKU DAT]: (Channel, HT20 Index) = (%d, %d) token is NULL\n", channel, i)); + goto parse_fail; } + if (simple_strtol(token, 0, 10) == (long int) 0) { + DBGPRINT(RT_DEBUG_ERROR, + ("[Incorrect SingleSKU DAT]: (Channel, HT20 Index) = (%d, %d) value is invalid\n", channel, i)); + goto parse_fail; + } + pwr->PwrHT20[i] = simple_strtol(token, 0, 10) * 2; + } - for ( i= 0 ; i < SINGLE_SKU_TABLE_HT_LENGTH ; i++ ) - { - token = rstrtok(NULL ," "); - if ( token == NULL ) - break; - pwr->PwrHT40[i] = simple_strtol(token, 0, 10) *2; + for (i = 0 ; i < SINGLE_SKU_TABLE_HT_LENGTH ; i++) { + token = rstrtok(NULL, " "); + if (token == NULL) { + if (pAd->CommonCfg.RegTransmitSetting.field.BW == HT_BW_40) { + DBGPRINT(RT_DEBUG_ERROR, + ("[Incorrect SingleSKU DAT]: Channel=%d Support BW40 but no declare power\n", channel)); + goto parse_fail; + } + break; + } + if (simple_strtol(token, 0, 10) == (long int) 0) { + DBGPRINT(RT_DEBUG_ERROR, + ("[Incorrect SingleSKU DAT]: (Channel, HT40 Index) = (%d, %d) value is invalid\n", channel, i)); + goto parse_fail; } + pwr->PwrHT40[i] = simple_strtol(token, 0, 10) * 2; + } #ifdef DOT11_VHT_AC - if (pwr->StartChannel > 14) + if (pwr->StartChannel > 14) { + for (i = 0 ; i < SINGLE_SKU_TABLE_VHT_LENGTH ; i++) { - for ( i= 0 ; i < SINGLE_SKU_TABLE_VHT_LENGTH ; i++ ) - { - token = rstrtok(NULL ," "); - if ( token == NULL ) - break; - pwr->PwrVHT80[i] = simple_strtol(token, 0, 10) *2; + token = rstrtok(NULL, " "); + if (token == NULL) { + DBGPRINT(RT_DEBUG_ERROR, + ("[Incorrect SingleSKU DAT]: (Channel, VHT Index) = (%d, %d) token is NULL\n", channel, i)); + goto parse_fail; + } + if (simple_strtol(token, 0, 10) == 0) { + DBGPRINT(RT_DEBUG_ERROR, + ("[Incorrect SingleSKU DAT]: (Channel, VHT Index) = (%d, %d) value is invalid\n", channel, i)); + goto parse_fail; } + pwr->PwrVHT80[i] = simple_strtol(token, 0, 10) * 2; } + } #endif /* DOT11_VHT_AC */ - if ( StartCh == NULL ) - { - StartCh = pwr; - DlListAddTail(&pAd->SingleSkuPwrList, &pwr->List); - } - else - { - BOOLEAN isSame = TRUE; - - if (pwr->StartChannel <= 14) - { - for ( i= 0 ; i < SINGLE_SKU_TABLE_CCK_LENGTH ; i++ ) - { - if ( StartCh->PwrCCK[i] != pwr->PwrCCK[i] ) - { + if (StartCh == NULL) { + StartCh = pwr; + DlListAddTail(&pAd->SingleSkuPwrList, &pwr->List); + } else { + BOOLEAN isSame = TRUE; + + if (pwr->StartChannel <= 14) { + for (i = 0 ; i < SINGLE_SKU_TABLE_CCK_LENGTH ; i++) { + if (StartCh->PwrCCK[i] != pwr->PwrCCK[i]) { isSame = FALSE; - break; + break; } - } } + } - if ( isSame == TRUE ) - { - for ( i= 0 ; i < SINGLE_SKU_TABLE_OFDM_LENGTH ; i++ ) - { - if ( StartCh->PwrOFDM[i] != pwr->PwrOFDM[i] ) - { + if (isSame == TRUE) { + for (i = 0 ; i < SINGLE_SKU_TABLE_OFDM_LENGTH ; i++) { + if (StartCh->PwrOFDM[i] != pwr->PwrOFDM[i]) { isSame = FALSE; break; } } } - if ( isSame == TRUE ) - { - for ( i= 0 ; i < SINGLE_SKU_TABLE_HT_LENGTH ; i++ ) - { - if ( StartCh->PwrHT20[i] != pwr->PwrHT20[i] ) - { + if (isSame == TRUE) { + for (i = 0 ; i < SINGLE_SKU_TABLE_HT_LENGTH ; i++) { + if (StartCh->PwrHT20[i] != pwr->PwrHT20[i]) { isSame = FALSE; break; } } } - if ( isSame == TRUE ) - { - for ( i= 0 ; i < SINGLE_SKU_TABLE_HT_LENGTH ; i++ ) - { - if ( StartCh->PwrHT40[i] != pwr->PwrHT40[i] ) - { + if (isSame == TRUE) { + for (i = 0 ; i < SINGLE_SKU_TABLE_HT_LENGTH ; i++) { + if (StartCh->PwrHT40[i] != pwr->PwrHT40[i]) { isSame = FALSE; break; } } } - - if ( isSame == TRUE ) - { - for ( i= 0 ; i < SINGLE_SKU_TABLE_VHT_LENGTH ; i++ ) - { - if ( StartCh->PwrVHT80[i] != pwr->PwrVHT80[i] ) - { + + if (isSame == TRUE) { + for (i = 0 ; i < SINGLE_SKU_TABLE_VHT_LENGTH ; i++) { + if (StartCh->PwrVHT80[i] != pwr->PwrVHT80[i]) { isSame = FALSE; break; } } } - if ( isSame == TRUE ) - { + if (isSame == TRUE) { os_free_mem(NULL, pwr); - } - else - { + pwr = NULL; + } else { StartCh = pwr; DlListAddTail(&pAd->SingleSkuPwrList, &StartCh->List); pwr = NULL; } - } - StartCh->num ++; - os_alloc_mem(pAd, (PUCHAR *)&temp, StartCh->num); - if ( StartCh->Channel != NULL ) - { - NdisMoveMemory(temp, StartCh->Channel, StartCh->num-1); - os_free_mem(pAd, StartCh->Channel); - } - StartCh->Channel = temp; - StartCh->Channel[StartCh->num-1] = channel; } - } + StartCh->num++; + os_alloc_mem(pAd, (PUCHAR *)&temp, StartCh->num); + if (temp == NULL) { + DBGPRINT(RT_DEBUG_ERROR, ("%s alloc temp fail\n", __func__)); + goto parse_fail; } - + if (StartCh->Channel != NULL) { + NdisMoveMemory(temp, StartCh->Channel, StartCh->num - 1); + os_free_mem(pAd, StartCh->Channel); + } + StartCh->Channel = temp; + StartCh->Channel[StartCh->num-1] = channel; + } + } + status = NDIS_STATUS_SUCCESS; { CH_POWER *ch, *ch_temp; DlListForEachSafe(ch, ch_temp, &pAd->SingleSkuPwrList, CH_POWER, List) @@ -6102,14 +6153,14 @@ NDIS_STATUS RTMPSetSingleSKUParameters( for ( i= 0 ; i < SINGLE_SKU_TABLE_CCK_LENGTH ; i++ ) { DBGPRINT(RT_DEBUG_TRACE,("%d ", ch->PwrCCK[i])); - } + } DBGPRINT(RT_DEBUG_TRACE,("\n")); DBGPRINT(RT_DEBUG_TRACE, ("OFDM: ")); for ( i= 0 ; i < SINGLE_SKU_TABLE_OFDM_LENGTH ; i++ ) { DBGPRINT(RT_DEBUG_TRACE,("%d ", ch->PwrOFDM[i])); - } + } DBGPRINT(RT_DEBUG_TRACE,("\n")); DBGPRINT(RT_DEBUG_TRACE, ("HT20: ")); @@ -6135,14 +6186,24 @@ NDIS_STATUS RTMPSetSingleSKUParameters( } } +parse_fail: + if (pwr) { + os_free_mem(NULL, pwr); + pwr = NULL; + } +read_fail: + if (buffer) { + os_free_mem(NULL, buffer); + buffer = NULL; + } +alloc_fail: /* close file*/ retval = RtmpOSFileClose(srcf); -free_resource: +open_fail: RtmpOSFSInfoChange(&osFSInfo, FALSE); - os_free_mem(NULL, buffer); - return TRUE; + return status; } diff --git a/common/cmm_sanity.c b/common/cmm_sanity.c index 50892c3..6ebcddb 100755 --- a/common/cmm_sanity.c +++ b/common/cmm_sanity.c @@ -1007,7 +1007,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity_Old( /* Copy to pVIE*/ Ptr = (PUCHAR) pVIE; - NdisMoveMemory(Ptr + *LengthVIE, &pEid->Eid, pEid->Len + 2); + NdisMoveMemory(Ptr + *LengthVIE, pEid, pEid->Len + 2); *LengthVIE += (pEid->Len + 2); } break; @@ -1136,7 +1136,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity_Old( { UCHAR WscIe[] = {0xdd, 0x00, 0x00, 0x50, 0xF2, 0x04}; Ptr = (PUCHAR) pVIE; - WscIe[1] = PeerWscIeLen + 4; + WscIe[1] = (UCHAR)(PeerWscIeLen + 4); NdisMoveMemory(Ptr + *LengthVIE, WscIe, 6); NdisMoveMemory(Ptr + *LengthVIE + 6, pPeerWscIe, PeerWscIeLen); *LengthVIE += (PeerWscIeLen + 6); @@ -1921,7 +1921,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity( /* Copy to pVIE*/ Ptr = (PUCHAR) pVIE; - NdisMoveMemory(Ptr + *LengthVIE, &pEid->Eid, pEid->Len + 2); + NdisMoveMemory(Ptr + *LengthVIE, pEid, pEid->Len + 2); *LengthVIE += (pEid->Len + 2); } break; @@ -2062,7 +2062,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity( { UCHAR WscIe[] = {0xdd, 0x00, 0x00, 0x50, 0xF2, 0x04}; Ptr = (PUCHAR) pVIE; - WscIe[1] = PeerWscIeLen + 4; + WscIe[1] = (UCHAR)(PeerWscIeLen + 4); NdisMoveMemory(Ptr + *LengthVIE, WscIe, 6); NdisMoveMemory(Ptr + *LengthVIE + 6, pPeerWscIe, PeerWscIeLen); *LengthVIE += (PeerWscIeLen + 6); diff --git a/common/cmm_sync.c b/common/cmm_sync.c index 0f12cb9..ccf4464 100755 --- a/common/cmm_sync.c +++ b/common/cmm_sync.c @@ -48,7 +48,8 @@ extern UINT16 const Country_Region_GroupNum_5GHZ; */ VOID BuildChannelList(RTMP_ADAPTER *pAd) { - UCHAR i, j, index=0, num=0; + UCHAR i, j; + UINT16 index = 0, num = 0; PCH_DESC pChDesc = NULL; BOOLEAN bRegionFound = FALSE; PUCHAR pChannelList = NULL; @@ -267,7 +268,7 @@ VOID BuildChannelList(RTMP_ADAPTER *pAd) } } - pAd->ChannelListNum = index; + pAd->ChannelListNum = (UCHAR)index; DBGPRINT(RT_DEBUG_TRACE,("CountryCode(2.4G/5G)=%d/%d, RFIC=%d, PHY mode=%d, support %d channels\n", pAd->CommonCfg.CountryRegion, pAd->CommonCfg.CountryRegionForABand, pAd->RfIcType, pAd->CommonCfg.PhyMode, pAd->ChannelListNum)); @@ -678,7 +679,8 @@ CHAR ConvertToSnr(RTMP_ADAPTER *pAd, UCHAR Snr) else if (pAd->chipCap.SnrFormula == SNR_FORMULA3) return (Snr * 3 / 16 ); /* * 0.1881 */ else - return ((0xeb - Snr) * 3) / 16 ; + return (Snr - 16); + /*return ((0xeb - Snr) * 3) / 16 ; */ } diff --git a/common/cmm_tkip.c b/common/cmm_tkip.c index d64315f..60d27b9 100755 --- a/common/cmm_tkip.c +++ b/common/cmm_tkip.c @@ -1023,32 +1023,32 @@ VOID RTMPTkipMixKey( /* Phase 2, Step 3 */ /* Phase 2, Step 3 */ - tsc0 = (unsigned int)((pnh >> 16) % 65536); /* msb */ - tsc1 = (unsigned int)(pnh % 65536); - tsc2 = (unsigned int)(pnl % 65536); /* lsb */ + tsc0 = (unsigned int)((pnh >> 16) % 65536); /* msb */ + tsc1 = (unsigned int)(pnh % 65536); + tsc2 = (unsigned int)(pnl % 65536); /* lsb */ - rc4key[0] = (tsc2 >> 8) % 256; - rc4key[1] = (((tsc2 >> 8) % 256) | 0x20) & 0x7f; - rc4key[2] = tsc2 % 256; - rc4key[3] = ((ppk5 ^ ((256*key[1]) + key[0])) >> 1) % 256; + rc4key[0] = (UCHAR)((tsc2 >> 8) % 256); + rc4key[1] = (UCHAR)((((tsc2 >> 8) % 256) | 0x20) & 0x7f); + rc4key[2] = (UCHAR)(tsc2 % 256); + rc4key[3] = (UCHAR)(((ppk5 ^ ((256*key[1]) + key[0])) >> 1) % 256); - rc4key[4] = ppk0 % 256; - rc4key[5] = (ppk0 >> 8) % 256; + rc4key[4] = (UCHAR)(ppk0 % 256); + rc4key[5] = (UCHAR)((ppk0 >> 8) % 256); - rc4key[6] = ppk1 % 256; - rc4key[7] = (ppk1 >> 8) % 256; + rc4key[6] = (UCHAR)(ppk1 % 256); + rc4key[7] = (UCHAR)((ppk1 >> 8) % 256); - rc4key[8] = ppk2 % 256; - rc4key[9] = (ppk2 >> 8) % 256; + rc4key[8] = (UCHAR)(ppk2 % 256); + rc4key[9] = (UCHAR)((ppk2 >> 8) % 256); - rc4key[10] = ppk3 % 256; - rc4key[11] = (ppk3 >> 8) % 256; + rc4key[10] = (UCHAR)(ppk3 % 256); + rc4key[11] = (UCHAR)((ppk3 >> 8) % 256); - rc4key[12] = ppk4 % 256; - rc4key[13] = (ppk4 >> 8) % 256; + rc4key[12] = (UCHAR)(ppk4 % 256); + rc4key[13] = (UCHAR)((ppk4 >> 8) % 256); - rc4key[14] = ppk5 % 256; - rc4key[15] = (ppk5 >> 8) % 256; + rc4key[14] = (UCHAR)(ppk5 % 256); + rc4key[15] = (UCHAR)((ppk5 >> 8) % 256); } @@ -1210,7 +1210,7 @@ BOOLEAN RTMPSoftDecryptTKIP( } /* Update the total data length */ - *DataByteCnt = plaintext_len; + *DataByteCnt = (UINT16)plaintext_len; #ifdef RT_BIG_ENDIAN RTMPFrameEndianChange(pAd, pHdr, DIR_READ, FALSE); diff --git a/common/cmm_usb_io.c b/common/cmm_usb_io.c index c0fa268..d340e31 100755 --- a/common/cmm_usb_io.c +++ b/common/cmm_usb_io.c @@ -150,18 +150,18 @@ NTSTATUS RTUSB_VendorRequest( do { RTUSB_CONTROL_MSG(pObj->pUsb_Dev, 0, Request, RequestType, Value, - Index, pAd->UsbVendorReqBuf, TransferBufferLength, - CONTROL_TIMEOUT_JIFFIES, RET); + Index, pAd->UsbVendorReqBuf, (__u16)TransferBufferLength, + CONTROL_TIMEOUT_JIFFIES, RET); if (RET < 0) { - DBGPRINT(RT_DEBUG_OFF, ("#RET%d\n",RET)); + DBGPRINT(RT_DEBUG_OFF, ("#\n")); if (RET == RTMP_USB_CONTROL_MSG_ENODEV) { RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST); break; } RetryCount++; - RtmpusecDelay(50000); /* wait for 5ms*/ + RtmpusecDelay(5000); /* wait for 5ms*/ } } while((RET < 0) && (RetryCount < MAX_VENDOR_REQ_RETRY_COUNT)); @@ -177,7 +177,7 @@ NTSTATUS RTUSB_VendorRequest( DBGPRINT(RT_DEBUG_ERROR, ("\tRequest Value=0x%04x!\n", Value)); if ((!TransferBuffer) && (TransferBufferLength > 0)) - hex_dump("Failed TransferBuffer value", TransferBuffer, TransferBufferLength); + DBGPRINT(RT_DEBUG_ERROR, ("Failed TransferBuffer value\n")); if (RET == RTMP_USB_CONTROL_MSG_ENODEV) RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST); @@ -213,8 +213,8 @@ NDIS_STATUS RTUSBEnqueueCmdFromNdis( if ((status != NDIS_STATUS_SUCCESS) || (cmdqelmt == NULL)) return (NDIS_STATUS_RESOURCES); - cmdqelmt->buffer = NULL; - if (pInformationBuffer != NULL) + cmdqelmt->buffer = NULL; + if (pInformationBuffer != NULL) { status = os_alloc_mem(pAd, (PUCHAR *)&cmdqelmt->buffer, InformationBufferLength); if ((status != NDIS_STATUS_SUCCESS) || (cmdqelmt->buffer == NULL)) @@ -708,7 +708,9 @@ static NTSTATUS SetAsicWcidHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt) DBGPRINT_RAW(RT_DEBUG_TRACE, ("CmdThread : CMDTHREAD_SET_ASIC_WCID : WCID = %ld, Tid = %x, SN = %d, BaSize = %d, IsAdd = %d, Ses_type = %d.\n", SetAsicWcid.WCID, SetAsicWcid.Tid, SetAsicWcid.SN, SetAsicWcid.Basize, SetAsicWcid.IsAdd, SetAsicWcid.Ses_type)); - AsicUpdateBASession(pAd, SetAsicWcid.WCID, SetAsicWcid.Tid, SetAsicWcid.SN, SetAsicWcid.Basize, SetAsicWcid.IsAdd, SetAsicWcid.Ses_type); + AsicUpdateBASession(pAd, (UCHAR)SetAsicWcid.WCID, + SetAsicWcid.Tid, SetAsicWcid.SN, + SetAsicWcid.Basize, SetAsicWcid.IsAdd, SetAsicWcid.Ses_type); } return NDIS_STATUS_SUCCESS; @@ -820,7 +822,7 @@ static NTSTATUS SetClientMACEntryHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelm PRT_SET_ASIC_WCID pInfo; pInfo = (PRT_SET_ASIC_WCID)CMDQelmt->buffer; - AsicUpdateRxWCIDTable(pAd, pInfo->WCID, pInfo->Addr); + AsicUpdateRxWCIDTable(pAd, (USHORT)pInfo->WCID, pInfo->Addr); return NDIS_STATUS_SUCCESS; } @@ -1275,7 +1277,7 @@ static NTSTATUS HwCtrlBcnUpdate(RTMP_ADAPTER *pAd, PCmdQElmt CMDQelmt) apidx, &mac_val) == FALSE) { - printk("FLUSH fail \n"); + DBGPRINT(RT_DEBUG_OFF, ("FLUSH fail\n")); return NDIS_STATUS_FAILURE; } @@ -1416,12 +1418,13 @@ static NTSTATUS HwCtrlBcnUpdate(RTMP_ADAPTER *pAd, PCmdQElmt CMDQelmt) static NTSTATUS HwCtrlBmcCntUpdate(RTMP_ADAPTER *pAd, PCmdQElmt CMDQelmt) { CHAR *pfunc_idx, idx = 0; - pfunc_idx = (CHAR *)CMDQelmt->buffer; + UINT32 dummy = 0; + pfunc_idx = (CHAR *)CMDQelmt->buffer; idx = *pfunc_idx; /* BMC start */ - if (AsicSetBmcQCR(pAd, BMC_CNT_UPDATE, CR_WRITE, idx, NULL) + if (AsicSetBmcQCR(pAd, BMC_CNT_UPDATE, CR_WRITE, idx, &dummy) == FALSE) { return NDIS_STATUS_FAILURE; diff --git a/common/cmm_wpa.c b/common/cmm_wpa.c index f5fbacb..862125b 100755 --- a/common/cmm_wpa.c +++ b/common/cmm_wpa.c @@ -504,9 +504,10 @@ VOID WpaEAPOLKeyAction( /* Get a specific WCID to record this MBSS key attribute */ GET_GroupKey_WCID(pAd, Wcid, apidx); - WPAInstallSharedKey(pAd, wdev->GroupKeyWepStatus, - apidx, wdev->DefaultKeyId, Wcid, - TRUE, mbss->GTK, LEN_TKIP_GTK); + WPAInstallSharedKey(pAd, + (UINT8)wdev->GroupKeyWepStatus, + apidx, wdev->DefaultKeyId, Wcid, + TRUE, mbss->GTK, LEN_TKIP_GTK); } else { @@ -620,13 +621,14 @@ VOID RTMPToWirelessSta( RTMP_SET_PACKET_WCID(pPacket, (UCHAR)pEntry->wcid); // TODO: shiang-usw, fix this! - RTMP_SET_PACKET_WDEV(pPacket, pEntry->wdev->wdev_idx); RTMP_SET_PACKET_MOREDATA(pPacket, FALSE); /* send out the packet */ wdev = pEntry->wdev; - if (wdev && wdev->tx_pkt_handle) + if (wdev && wdev->tx_pkt_handle) { + RTMP_SET_PACKET_WDEV(pPacket, pEntry->wdev->wdev_idx); wdev->tx_pkt_handle(pAd, pPacket); + } else { DBGPRINT(RT_DEBUG_ERROR, ("%s():Invalid wdev(%p) or tx_pkt_handle(%p)!\n", __FUNCTION__, wdev, (wdev ? wdev->tx_pkt_handle : NULL))); @@ -766,10 +768,10 @@ BOOLEAN PeerWpaMessageSanity( { unsigned char *tmp = (unsigned char *)pEntry->PTK; int k=0; - printk("PTK=>"); + DBGPRINT(RT_DEBUG_OFF, ("PTK=>")); for(k=0;k<32;k++) - printk("%02x", *(tmp+k)); - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("%02x", *(tmp+k))); + DBGPRINT(RT_DEBUG_OFF, ("\n")); } } #if 0 @@ -949,7 +951,7 @@ VOID WPAStart4WayHS( /* pointer to the corresponding position*/ pBssid = pMbss->wdev.bssid; - group_cipher = pMbss->wdev.GroupKeyWepStatus; + group_cipher = (UCHAR)pMbss->wdev.GroupKeyWepStatus; } #endif /* CONFIG_AP_SUPPORT */ @@ -1148,7 +1150,7 @@ VOID PeerPairMsg1Action( #endif /* MAC_REPEATER_SUPPORT */ pCurrentAddr = pAd->ApCfg.ApCliTab[IfIndex].wdev.if_addr; pmk_ptr = pAd->ApCfg.ApCliTab[IfIndex].PMK; - group_cipher = pAd->ApCfg.ApCliTab[IfIndex].GroupCipher; + group_cipher = (UCHAR)pAd->ApCfg.ApCliTab[IfIndex].GroupCipher; rsnie_ptr = pAd->ApCfg.ApCliTab[IfIndex].RSN_IE; rsnie_len = pAd->ApCfg.ApCliTab[IfIndex].RSNIE_Len; } @@ -1178,7 +1180,7 @@ VOID PeerPairMsg1Action( { pCurrentAddr = pAd->CurrentAddress; pmk_ptr = pAd->StaCfg.PMK; - group_cipher = pAd->StaCfg.GroupCipher; + group_cipher = (UCHAR)pAd->StaCfg.GroupCipher; rsnie_ptr = pAd->StaCfg.RSN_IE; rsnie_len = pAd->StaCfg.RSNIE_Len; } @@ -1385,7 +1387,7 @@ VOID PeerPairMsg2Action( pBssid = wdev->bssid; pmk_ptr = pAd->ApCfg.MBSSID[apidx].PMK; gtk_ptr = pAd->ApCfg.MBSSID[apidx].GTK; - group_cipher = wdev->GroupKeyWepStatus; + group_cipher = (UCHAR)wdev->GroupKeyWepStatus; default_key = wdev->DefaultKeyId; /* Get Group TxTsc form Asic*/ @@ -1409,7 +1411,7 @@ VOID PeerPairMsg2Action( #ifdef CONFIG_HOTSPOT_R2 if (pAd->ApCfg.MBSSID[apidx].HotSpotCtrl.bASANEnable == 1) { - printk("choose OSEN\n"); + DBGPRINT(RT_DEBUG_OFF, ("choose OSEN\n")); rsnie_len = OSEN_IELEN; rsnie_ptr = OSEN_IE; } @@ -1500,7 +1502,7 @@ VOID PeerPairMsg2Action( #ifdef CONFIG_HOTSPOT_R2 if (CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_OSEN_CAPABLE)) { - printk("got msg2 derivePTK\n"); + DBGPRINT(RT_DEBUG_OFF, ("got msg2 derivePTK\n")); PMF_DerivePTK(pAd, (UCHAR *)pmk_ptr, pEntry->ANonce, @@ -1663,7 +1665,7 @@ VOID WPAPairMsg3Retry( pBssid = wdev->bssid; //pmk_ptr = pAd->ApCfg.MBSSID[apidx].PMK; gtk_ptr = pAd->ApCfg.MBSSID[apidx].GTK; - group_cipher = wdev->GroupKeyWepStatus; + group_cipher = (UCHAR)wdev->GroupKeyWepStatus; default_key = wdev->DefaultKeyId; /* Get Group TxTsc form Asic*/ @@ -1724,7 +1726,8 @@ VOID WPAPairMsg3Retry( } #endif /* Construct EAPoL message - Pairwise Msg 3*/ - ConstructEapolMsg(pEntry, + if (gtk_ptr) + ConstructEapolMsg(pEntry, group_cipher, EAPOL_PAIR_MSG_3, default_key, @@ -1736,7 +1739,8 @@ VOID WPAPairMsg3Retry( pEapolFrame); /* Make outgoing frame*/ - MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pBssid, EAPOL); + if (pBssid) + MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pBssid, EAPOL); tr_entry = &pAd->MacTab.tr_entry[pEntry->wcid]; RTMPToWirelessSta(pAd, pEntry, Header802_3, LENGTH_802_3, (PUCHAR)pEapolFrame, @@ -1819,7 +1823,7 @@ VOID PeerPairMsg3Action( else #endif /* MAC_REPEATER_SUPPORT */ pCurrentAddr = pAd->ApCfg.ApCliTab[IfIndex].wdev.if_addr; - group_cipher = pAd->ApCfg.ApCliTab[IfIndex].GroupCipher; + group_cipher = (UCHAR)pAd->ApCfg.ApCliTab[IfIndex].GroupCipher; } #endif /* APCLI_SUPPORT */ @@ -1845,7 +1849,7 @@ VOID PeerPairMsg3Action( #endif /* P2P_SUPPORT */ { pCurrentAddr = pAd->CurrentAddress; - group_cipher = pAd->StaCfg.GroupCipher; + group_cipher = (UCHAR)pAd->StaCfg.GroupCipher; } } @@ -2003,9 +2007,9 @@ VOID PeerPairMsg3Action( STA_PORT_SECURED(pAd); #endif /* CONFIG_STA_SUPPORT */ DBGPRINT(RT_DEBUG_TRACE, ("PeerPairMsg3Action: AuthMode(%s) PairwiseCipher(%s) GroupCipher(%s) \n", - GetAuthMode(pEntry->AuthMode), - GetEncryptType(pEntry->WepStatus), - GetEncryptType(group_cipher))); + GetAuthMode((CHAR)pEntry->AuthMode), + GetEncryptType((CHAR)pEntry->WepStatus), + GetEncryptType((CHAR)group_cipher))); } else { @@ -2093,7 +2097,7 @@ VOID PeerPairMsg4Action( else apidx = pEntry->func_tb_idx; - group_cipher = pAd->ApCfg.MBSSID[apidx].wdev.GroupKeyWepStatus; + group_cipher = (UCHAR)pAd->ApCfg.MBSSID[apidx].wdev.GroupKeyWepStatus; } #endif /* CONFIG_AP_SUPPORT */ @@ -2272,7 +2276,7 @@ VOID PeerPairMsg4Action( pEntry->IsWNMReqValid = FALSE; os_free_mem(NULL, req_data); - printk("!!!!msg 4 send wnm req\n"); + DBGPRINT(RT_DEBUG_OFF, ("!!!!msg 4 send wnm req\n")); } if (pEntry->IsBTMReqValid == TRUE) { @@ -2284,7 +2288,7 @@ VOID PeerPairMsg4Action( pEntry->IsBTMReqValid = FALSE; os_free_mem(NULL, req_data); - printk("!!!!msg 4 send btm req\n"); + DBGPRINT(RT_DEBUG_OFF, ("!!!!msg 4 send btm req\n")); } #endif @@ -2298,10 +2302,10 @@ VOID PeerPairMsg4Action( #endif /* WIDI_SUPPORT */ DBGPRINT(RT_DEBUG_OFF, ("AP SETKEYS DONE - WPA2, AuthMode(%d)=%s, WepStatus(%d)=%s, GroupWepStatus(%d)=%s\n\n", - pEntry->AuthMode, GetAuthMode(pEntry->AuthMode), - pEntry->WepStatus, GetEncryptType(pEntry->WepStatus), - group_cipher, - GetEncryptType(group_cipher))); + pEntry->AuthMode, GetAuthMode((CHAR)pEntry->AuthMode), + pEntry->WepStatus, GetEncryptType((CHAR)pEntry->WepStatus), + group_cipher, + GetEncryptType((CHAR)group_cipher))); } else { @@ -2346,8 +2350,8 @@ VOID WPAStart2WayGroupHS( if ((!pEntry) || !IS_ENTRY_CLIENT(pEntry)) return; - /* delete retry timer*/ - RTMPCancelTimer(&pEntry->RetryTimer, &Cancelled); + /* delete retry timer*/ + RTMPCancelTimer(&pEntry->RetryTimer, &Cancelled); #ifdef CONFIG_AP_SUPPORT #ifdef P2P_SUPPORT @@ -2363,7 +2367,7 @@ VOID WPAStart2WayGroupHS( else apidx = pEntry->func_tb_idx; - group_cipher = pAd->ApCfg.MBSSID[apidx].wdev.GroupKeyWepStatus; + group_cipher = (UCHAR)pAd->ApCfg.MBSSID[apidx].wdev.GroupKeyWepStatus; default_key = pAd->ApCfg.MBSSID[apidx].wdev.DefaultKeyId; gnonce_ptr = pAd->ApCfg.MBSSID[apidx].GNonce; gtk_ptr = pAd->ApCfg.MBSSID[apidx].GTK; @@ -2389,7 +2393,8 @@ VOID WPAStart2WayGroupHS( ADD_ONE_To_64BIT_VAR(pEntry->R_Counter); /* Construct EAPoL message - Group Msg 1*/ - ConstructEapolMsg(pEntry, + if (gnonce_ptr && gtk_ptr) + ConstructEapolMsg(pEntry, group_cipher, EAPOL_GROUP_MSG_1, default_key, @@ -2404,6 +2409,7 @@ VOID WPAStart2WayGroupHS( if (pBssid == NULL) { DBGPRINT(RT_DEBUG_ERROR, ("%s: pBssid == NULL!\n", __FUNCTION__)); + os_free_mem(NULL, mpool); return; } @@ -2488,7 +2494,7 @@ VOID PeerGroupMsg1Action( else #endif /* MAC_REPEATER_SUPPORT */ pCurrentAddr = pAd->ApCfg.ApCliTab[IfIndex].wdev.if_addr; - group_cipher = pAd->ApCfg.ApCliTab[IfIndex].GroupCipher; + group_cipher = (UCHAR)pAd->ApCfg.ApCliTab[IfIndex].GroupCipher; default_key = pAd->ApCfg.ApCliTab[IfIndex].wdev.DefaultKeyId; } @@ -2499,7 +2505,7 @@ VOID PeerGroupMsg1Action( IF_DEV_CONFIG_OPMODE_ON_STA(pAd) { pCurrentAddr = pAd->CurrentAddress; - group_cipher = pAd->StaCfg.GroupCipher; + group_cipher = (UCHAR)pAd->StaCfg.GroupCipher; default_key = pAd->StaCfg.wdev.DefaultKeyId; } #endif /* CONFIG_STA_SUPPORT */ @@ -2601,9 +2607,9 @@ VOID PeerGroupMsg1Action( #endif /* CONFIG_STA_SUPPORT */ DBGPRINT(RT_DEBUG_TRACE, ("PeerGroupMsg1Action: AuthMode(%s) PairwiseCipher(%s) GroupCipher(%s) \n", - GetAuthMode(pEntry->AuthMode), - GetEncryptType(pEntry->WepStatus), - GetEncryptType(group_cipher))); + GetAuthMode((CHAR)pEntry->AuthMode), + GetEncryptType((CHAR)pEntry->WepStatus), + GetEncryptType((CHAR)group_cipher))); /* init header and Fill Packet and send Msg 2 to authenticator */ MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pCurrentAddr, EAPOL); @@ -2811,7 +2817,7 @@ VOID PeerGroupMsg2Action( else apidx = pEntry->func_tb_idx; - group_cipher = pAd->ApCfg.MBSSID[apidx].wdev.GroupKeyWepStatus; + group_cipher = (UCHAR)pAd->ApCfg.MBSSID[apidx].wdev.GroupKeyWepStatus; } #endif /* CONFIG_AP_SUPPORT */ @@ -2834,9 +2840,9 @@ VOID PeerGroupMsg2Action( RTMPSendWirelessEvent(pAd, IW_SET_KEY_DONE_WPA2_EVENT_FLAG, pEntry->Addr, pEntry->wdev->wdev_idx, 0); DBGPRINT(RT_DEBUG_OFF, ("AP SETKEYS DONE - WPA2, AuthMode(%d)=%s, WepStatus(%d)=%s, GroupWepStatus(%d)=%s\n\n", - pEntry->AuthMode, GetAuthMode(pEntry->AuthMode), - pEntry->WepStatus, GetEncryptType(pEntry->WepStatus), - group_cipher, GetEncryptType(group_cipher))); + pEntry->AuthMode, GetAuthMode((CHAR)pEntry->AuthMode), + pEntry->WepStatus, GetEncryptType((CHAR)pEntry->WepStatus), + group_cipher, GetEncryptType((CHAR)group_cipher))); } else { @@ -2844,9 +2850,9 @@ VOID PeerGroupMsg2Action( RTMPSendWirelessEvent(pAd, IW_SET_KEY_DONE_WPA1_EVENT_FLAG, pEntry->Addr, pEntry->wdev->wdev_idx, 0); DBGPRINT(RT_DEBUG_OFF, ("AP SETKEYS DONE - WPA1, AuthMode(%d)=%s, WepStatus(%d)=%s, GroupWepStatus(%d)=%s\n\n", - pEntry->AuthMode, GetAuthMode(pEntry->AuthMode), - pEntry->WepStatus, GetEncryptType(pEntry->WepStatus), - group_cipher, GetEncryptType(group_cipher))); + pEntry->AuthMode, GetAuthMode((CHAR)pEntry->AuthMode), + pEntry->WepStatus, GetEncryptType((CHAR)pEntry->WepStatus), + group_cipher, GetEncryptType((CHAR)group_cipher))); } }while(FALSE); } @@ -3169,7 +3175,7 @@ VOID KDF( /* concatenate the length in bits (16-bit unsigned integer)*/ input[total_len] = (len_in_bits & 0xFF); - input[total_len + 1] = (len_in_bits & 0xFF00) >> 8; + input[total_len + 1] = (UCHAR)((len_in_bits & 0xFF00) >> 8); total_len += 2; for (i = 1; i <= ((len_in_bits + 255) / 256); i++) @@ -3453,7 +3459,7 @@ static VOID RTMPMakeRsnIeCipher( IN UINT WepStatus, IN UCHAR apidx, IN BOOLEAN bMixCipher, - IN UCHAR FlexibleCipher, + IN WPA_MIX_PAIR_CIPHER FlexibleCipher, OUT PUCHAR pRsnIe, OUT UCHAR *rsn_len) { @@ -4935,7 +4941,7 @@ BOOLEAN RTMPParseEapolKeyData( pApcli_entry = &pAd->ApCfg.ApCliTab[IfIdx]; WPAInstallSharedKey(pAd, - pApcli_entry->GroupCipher, + (UINT8)pApcli_entry->GroupCipher, BSS0, DefaultIdx, APCLI_MCAST_WCID, @@ -4970,7 +4976,7 @@ BOOLEAN RTMPParseEapolKeyData( pAd->StaCfg.wdev.DefaultKeyId = DefaultIdx; WPAInstallSharedKey(pAd, - pAd->StaCfg.GroupCipher, + (UINT8)pAd->StaCfg.GroupCipher, BSS0, pAd->StaCfg.wdev.DefaultKeyId, MCAST_WCID, @@ -5140,7 +5146,7 @@ VOID ConstructEapolMsg( #ifdef CONFIG_HOTSPOT_R2 if (CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_OSEN_CAPABLE)) { - printk ("OSEN use sha256\n"); + DBGPRINT(RT_DEBUG_OFF, ("OSEN use sha256\n")); //KeyDescVer = KEY_DESC_EXT; KeyDescVer = KEY_DESC_OSEN; } @@ -5729,14 +5735,14 @@ CIPHER_KEY *RTMPSwCipherKeySelection( if (pRxBlk->pRxInfo->U2M) { - CipherAlg = pEntry->WepStatus; + CipherAlg = (UINT8)pEntry->WepStatus; } else { #ifdef CONFIG_STA_SUPPORT IF_DEV_CONFIG_OPMODE_ON_STA(pAd) { - CipherAlg = pAd->StaCfg.GroupCipher; + CipherAlg = (UINT8)pAd->StaCfg.GroupCipher; } #endif /* CONFIG_STA_SUPPORT */ } @@ -6031,7 +6037,7 @@ PUINT8 WPA_ExtractSuiteFromRSNIE( { DBGPRINT(RT_DEBUG_TRACE, ("%s : The count of pairwise cipher is %d\n", __FUNCTION__, u_cnt)); - *count = u_cnt; + *count = (UINT8)u_cnt; return pRsnie->ucast[0].oui; } } @@ -6072,7 +6078,7 @@ PUINT8 WPA_ExtractSuiteFromRSNIE( { DBGPRINT(RT_DEBUG_TRACE, ("%s : The count of pairwise cipher is %d\n", __FUNCTION__, u_cnt)); - *count = u_cnt; + *count = (UINT8)u_cnt; return pRsnie2->ucast[0].oui; } } @@ -6117,7 +6123,7 @@ PUINT8 WPA_ExtractSuiteFromRSNIE( { DBGPRINT(RT_DEBUG_TRACE, ("%s : The count of AKM is %d\n", __FUNCTION__, a_cnt)); - *count = a_cnt; + *count = (UINT8)a_cnt; return pAkm->auth[0].oui; } } @@ -6203,7 +6209,7 @@ PUINT8 WPA_ExtractSuiteFromRSNIE( /* Extract PMKID list and its count */ if (type == PMKID_LIST) { - *count = p_count; + *count = (UINT8)p_count; return pPmkidList; } diff --git a/common/cmm_wpa_adhoc.c b/common/cmm_wpa_adhoc.c index ee0c5a1..61b22da 100755 --- a/common/cmm_wpa_adhoc.c +++ b/common/cmm_wpa_adhoc.c @@ -72,7 +72,7 @@ VOID Adhoc_RTMPGetTxTscFromAsic( RTMP_IO_READ32(pAd, offset, &IV); RTMP_IO_READ32(pAd, offset + 4, &EIV); - *pTxTsc = IV & 0x000000ff; + *pTxTsc = IV & 0x000000ff; *(pTxTsc+1) = IV & 0x0000ff00; *(pTxTsc+2) = EIV & 0x000000ff; *(pTxTsc+3) = EIV & 0x0000ff00; @@ -541,7 +541,7 @@ VOID Adhoc_WpaStart4WayHS( } pAuthenticator = &pEntry->WPA_Authenticator; pBssid = pAd->CommonCfg.Bssid; - group_cipher = pAd->StaCfg.GroupCipher; + group_cipher = (UCHAR)pAd->StaCfg.GroupCipher; /* delete retry timer */ RTMPCancelTimer(&pAuthenticator->MsgRetryTimer, &Cancelled); @@ -686,29 +686,29 @@ VOID Adhoc_PeerPairMsg1Action( if (Elem->MsgLen < (LENGTH_802_11 + LENGTH_802_1_H + LENGTH_EAPOL_H + MIN_LEN_OF_EAPOL_KEY_MSG)) return; - pCurrentAddr = pAd->CurrentAddress; - pmk_ptr = pAd->StaCfg.PMK; - group_cipher = pAd->StaCfg.GroupCipher; - rsnie_ptr = pAd->StaCfg.RSN_IE; - rsnie_len = pAd->StaCfg.RSNIE_Len; - - /* Store the received frame */ - pMsg1 = (PEAPOL_PACKET) &Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; - MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; + pCurrentAddr = pAd->CurrentAddress; + pmk_ptr = pAd->StaCfg.PMK; + group_cipher = (UCHAR)pAd->StaCfg.GroupCipher; + rsnie_ptr = pAd->StaCfg.RSN_IE; + rsnie_len = pAd->StaCfg.RSNIE_Len; + + /* Store the received frame */ + pMsg1 = (PEAPOL_PACKET) &Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; + MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; - /* Sanity Check peer Pairwise message 1 - Replay Counter */ - if (Adhoc_PeerWpaMessageSanity(pAd, pMsg1, MsgLen, EAPOL_PAIR_MSG_1, pSupplicant, pEntry) == FALSE) - return; + /* Sanity Check peer Pairwise message 1 - Replay Counter */ + if (Adhoc_PeerWpaMessageSanity(pAd, pMsg1, MsgLen, EAPOL_PAIR_MSG_1, pSupplicant, pEntry) == FALSE) + return; - /* Store Replay counter, it will use to verify message 3 and construct message 2 */ - NdisMoveMemory(pSupplicant->ReplayCounter, pMsg1->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY); + /* Store Replay counter, it will use to verify message 3 and construct message 2 */ + NdisMoveMemory(pSupplicant->ReplayCounter, pMsg1->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY); - /* Store ANonce */ - NdisMoveMemory(pSupplicant->ANonce, pMsg1->KeyDesc.KeyNonce, LEN_KEY_DESC_NONCE); + /* Store ANonce */ + NdisMoveMemory(pSupplicant->ANonce, pMsg1->KeyDesc.KeyNonce, LEN_KEY_DESC_NONCE); - /* Generate random SNonce */ - GenRandom(pAd, (UCHAR *)pCurrentAddr, pSupplicant->SNonce); + /* Generate random SNonce */ + GenRandom(pAd, (UCHAR *)pCurrentAddr, pSupplicant->SNonce); /* Calculate PTK(ANonce, SNonce) */ WpaDerivePTK(pAd, @@ -720,26 +720,25 @@ VOID Adhoc_PeerPairMsg1Action( PTK, LEN_PTK); - /* Save key to PTK entry */ - NdisMoveMemory(pSupplicant->PTK, PTK, LEN_PTK); - - /* Update WpaState */ - pSupplicant->WpaState = AS_PTKINIT_NEGOTIATING; + /* Save key to PTK entry */ + NdisMoveMemory(pSupplicant->PTK, PTK, LEN_PTK); + + /* Update WpaState */ + pSupplicant->WpaState = AS_PTKINIT_NEGOTIATING; - /* Allocate memory for output */ - os_alloc_mem(NULL, (PUCHAR *)&mpool, TX_EAPOL_BUFFER); - if (mpool == NULL) - { + /* Allocate memory for output */ + os_alloc_mem(NULL, (PUCHAR *)&mpool, TX_EAPOL_BUFFER); + if (mpool == NULL) { DBGPRINT(RT_DEBUG_ERROR, ("!!!%s : no memory!!!\n", __FUNCTION__)); return; } - pEapolFrame = (PEAPOL_PACKET)mpool; - NdisZeroMemory(pEapolFrame, TX_EAPOL_BUFFER); + pEapolFrame = (PEAPOL_PACKET)mpool; + NdisZeroMemory(pEapolFrame, TX_EAPOL_BUFFER); - /* Construct EAPoL message - Pairwise Msg 2 */ - /* EAPOL-Key(0,1,0,0,P,0,0,SNonce,MIC,DataKD_M2) */ - Adhoc_ConstructEapolMsg(pEntry, + /* Construct EAPoL message - Pairwise Msg 2 */ + /* EAPOL-Key(0,1,0,0,P,0,0,SNonce,MIC,DataKD_M2) */ + Adhoc_ConstructEapolMsg(pEntry, group_cipher, EAPOL_PAIR_MSG_2, 0, /* DefaultKeyIdx */ @@ -751,18 +750,18 @@ VOID Adhoc_PeerPairMsg1Action( pSupplicant, pEapolFrame); - /* Make outgoing frame */ - MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pCurrentAddr, EAPOL); + /* Make outgoing frame */ + MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pCurrentAddr, EAPOL); - tr_entry = &pAd->MacTab.tr_entry[pEntry->wcid]; - RTMPToWirelessSta(pAd, pEntry, + tr_entry = &pAd->MacTab.tr_entry[pEntry->wcid]; + RTMPToWirelessSta(pAd, pEntry, Header802_3, sizeof(Header802_3), (PUCHAR)pEapolFrame, CONV_ARRARY_TO_UINT16(pEapolFrame->Body_Len) + 4, (tr_entry->PortSecured == WPA_802_1X_PORT_SECURED) ? FALSE : TRUE); - os_free_mem(NULL, mpool); + os_free_mem(NULL, mpool); - DBGPRINT(RT_DEBUG_TRACE, ("<=== PeerPairMsg1Action: send Msg2 of 4-way \n")); + DBGPRINT(RT_DEBUG_TRACE, ("<=== PeerPairMsg1Action: send Msg2 of 4-way \n")); } @@ -811,13 +810,13 @@ VOID Adhoc_PeerPairMsg2Action( if (pAuthenticator->WpaState < AS_PTKSTART) return; - pBssid = pAd->CommonCfg.Bssid; + pBssid = pAd->CommonCfg.Bssid; - pmk_ptr = pAd->StaCfg.PMK; - gtk_ptr = pAd->StaCfg.GTK; - group_cipher = pAd->StaCfg.GroupCipher; + pmk_ptr = pAd->StaCfg.PMK; + gtk_ptr = pAd->StaCfg.GTK; + group_cipher = (UCHAR)pAd->StaCfg.GroupCipher; - default_key = pAd->StaCfg.wdev.DefaultKeyId; + default_key = pAd->StaCfg.wdev.DefaultKeyId; if (pAd->StaCfg.wdev.AuthMode == Ndis802_11AuthModeWPA2PSK) { rsnie_len = pAd->StaCfg.RSNIE_Len; @@ -951,7 +950,7 @@ VOID Adhoc_PeerPairMsg3Action( return; pCurrentAddr = pAd->CurrentAddress; - group_cipher = pAd->StaCfg.GroupCipher; + group_cipher = (UCHAR)pAd->StaCfg.GroupCipher; /* Record 802.11 header & the received EAPOL packet Msg3 */ pHeader = (PHEADER_802_11) Elem->Msg; @@ -1000,9 +999,9 @@ VOID Adhoc_PeerPairMsg3Action( pEntry->AuthMode == Ndis802_11AuthModeWPA2) { DBGPRINT(RT_DEBUG_TRACE, ("PeerPairMsg3Action: AuthMode(%s) PairwiseCipher(%s) GroupCipher(%s) \n", - GetAuthMode(pEntry->AuthMode), - GetEncryptType(pEntry->WepStatus), - GetEncryptType(group_cipher))); + GetAuthMode((CHAR)pEntry->AuthMode), + GetEncryptType((CHAR)pEntry->WepStatus), + GetEncryptType((CHAR)group_cipher))); } /* Init 802.3 header and send out */ @@ -1058,7 +1057,7 @@ VOID Adhoc_PeerPairMsg4Action( if (pAuthenticator->WpaState < AS_PTKINIT_NEGOTIATING) break; - group_cipher = pAd->StaCfg.GroupCipher; + group_cipher = (UCHAR)pAd->StaCfg.GroupCipher; /* pointer to 802.11 header */ pHeader = (PHEADER_802_11)Elem->Msg; @@ -1113,7 +1112,7 @@ VOID Adhoc_PeerGroupMsg1Action( pSupplicant = &pEntry->WPA_Supplicant; pCurrentAddr = pAd->CurrentAddress; - group_cipher = pAd->StaCfg.GroupCipher; + group_cipher = (UCHAR)pAd->StaCfg.GroupCipher; default_key = pAd->StaCfg.wdev.DefaultKeyId; /* Process Group Message 1 frame. skip 802.11 header(24) & LLC_SNAP header(8) */ @@ -1164,9 +1163,9 @@ VOID Adhoc_PeerGroupMsg1Action( #endif /* CONFIG_STA_SUPPORT */ DBGPRINT(RT_DEBUG_TRACE, ("PeerGroupMsg1Action: AuthMode(%s) PairwiseCipher(%s) GroupCipher(%s) \n", - GetAuthMode(pEntry->AuthMode), - GetEncryptType(pEntry->WepStatus), - GetEncryptType(group_cipher))); + GetAuthMode((CHAR)pEntry->AuthMode), + GetEncryptType((CHAR)pEntry->WepStatus), + GetEncryptType((CHAR)group_cipher))); /* init header and Fill Packet and send Msg 2 to authenticator */ MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pCurrentAddr, EAPOL); @@ -1248,10 +1247,10 @@ VOID Adhoc_Wpa4WayComplete( pAd->IndicateMediaState = NdisMediaStateConnected; DBGPRINT(RT_DEBUG_OFF, ("Adhoc_Wpa4WayComplete - WPA2, AuthMode(%d)=%s, WepStatus(%d)=%s, GroupWepStatus(%d)=%s\n\n", - pEntry->AuthMode, GetAuthMode(pEntry->AuthMode), - pEntry->WepStatus, GetEncryptType(pEntry->WepStatus), - pAd->StaCfg.GroupCipher, - GetEncryptType(pAd->StaCfg.GroupCipher))); + pEntry->AuthMode, GetAuthMode((CHAR)pEntry->AuthMode), + pEntry->WepStatus, GetEncryptType((CHAR)pEntry->WepStatus), + pAd->StaCfg.GroupCipher, + GetEncryptType((CHAR)pAd->StaCfg.GroupCipher))); } diff --git a/common/ee_efuse.c b/common/ee_efuse.c index 213c19a..3231a34 100755 --- a/common/ee_efuse.c +++ b/common/ee_efuse.c @@ -370,7 +370,7 @@ VOID eFuseReadPhysical( for(i = 0; i < Length; i+=2) { - EfusePhysicalReadRegisters(pAd, Offset + i, 2, &pOutBuf[i/2]); + EfusePhysicalReadRegisters(pAd, (UINT16)(Offset + i), 2, &pOutBuf[i/2]); } } @@ -399,7 +399,7 @@ NTSTATUS eFuseRead( for(i = 0; i < Length; i+=2) { - eFuseReadRegisters(pAd, Offset+i, 2, &pData[i/2]); + eFuseReadRegisters(pAd, (UINT16)(Offset+i), 2, &pData[i/2]); } return Status; } @@ -915,7 +915,7 @@ static VOID eFuseWritePhysical( /* Therefore, we only need swap data when read the data.*/ for (i=0; i<Length; i+=2) { - eFusePhysicalWriteRegisters(pAd, Offset+i, 2, &pValueX[i/2]); + eFusePhysicalWriteRegisters(pAd, (USHORT)(Offset+i), 2, &pValueX[i/2]); } #ifdef MT76x2 @@ -982,7 +982,7 @@ NTSTATUS eFuseWrite( for(i=0; i<length; i+=2) { - eFuseWriteRegisters(pAd, Offset+i, 2, &pValueX[i/2]); + eFuseWriteRegisters(pAd, (USHORT)(Offset+i), 2, &pValueX[i/2]); } os_free_mem(NULL, OddWriteByteBuf); return TRUE; @@ -1025,7 +1025,7 @@ INT set_eFusedump_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) for (i = 0; i < pAd->chipCap.EFUSE_USAGE_MAP_END/2; i++) { - InBuf[0] = 2*i; + InBuf[0] = (USHORT)(2*i); InBuf[1] = 2; InBuf[2] = 0x0; @@ -1935,7 +1935,7 @@ INT efuse_probe(RTMP_ADAPTER *pAd) EFUSE_IO_READ32(pAd, ctrl_reg, &eFuseCtrl); - printk("%s: efuse = %x\n", __FUNCTION__, eFuseCtrl); + DBGPRINT(RT_DEBUG_OFF, ("%s: efuse = %x\n", __func__, eFuseCtrl)); if (pAd->chipCap.hif_type == HIF_MT) { @@ -1969,7 +1969,7 @@ VOID rtmp_ee_load_from_efuse(RTMP_ADAPTER *pAd) NdisZeroMemory(pAd->EEPROMImage, MAX_EEPROM_BIN_FILE_SIZE); for(i=0; i<MAX_EEPROM_BIN_FILE_SIZE; i+=2) { - eFuseRead(pAd, i,&efuse_val, 2); + eFuseRead(pAd, (USHORT)i, &efuse_val, 2); efuse_val = cpu2le16 (efuse_val); NdisMoveMemory(&pAd->EEPROMImage[i],&efuse_val,2); } @@ -1983,8 +1983,8 @@ VOID rtmp_ee_load_from_efuse(RTMP_ADAPTER *pAd) INT Set_LoadEepromBufferFromEfuse_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) { /*long bEnable = simple_strtol(arg, 0, 10);*/ - long *res = NULL; - int bEnable = kstrtol(arg, 10, res); + LONG res; + int bEnable = kstrtol(arg, 10, &res); if (bEnable < 0) return FALSE; else @@ -1998,9 +1998,9 @@ INT Set_LoadEepromBufferFromEfuse_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) INT set_eFuseBufferModeWriteBack_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) { int bEnable; - long *res = NULL; + LONG res; - bEnable = kstrtol(arg, 10, res); + bEnable = kstrtol(arg, 10, &res); if (bEnable < 0) return FALSE; @@ -2015,8 +2015,8 @@ INT set_eFuseBufferModeWriteBack_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) INT set_BinModeWriteBack_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) { - long *res = NULL; - int bEnable = kstrtol(arg, 10, res); + LONG res; + int bEnable = kstrtol(arg, 10, &res); if (bEnable < 0) return FALSE; diff --git a/common/eeprom.c b/common/eeprom.c index c21b96f..2fdb14c 100755 --- a/common/eeprom.c +++ b/common/eeprom.c @@ -120,8 +120,8 @@ INT rtmp_read_rssi_langain_from_eeprom(RTMP_ADAPTER *pAd) #endif /* RT3593 */ { RT28xx_EEPROM_READ16(pAd, EEPROM_RSSI_BG_OFFSET, value); - pAd->BGRssiOffset[0] = value & 0x00ff; - pAd->BGRssiOffset[1] = (value >> 8); + pAd->BGRssiOffset[0] = (signed char)(value & 0x00ff); + pAd->BGRssiOffset[1] = (signed char)(value >> 8); } #ifdef RT3593 @@ -146,14 +146,14 @@ INT rtmp_read_rssi_langain_from_eeprom(RTMP_ADAPTER *pAd) */ if (IS_MT76x0(pAd)) { - pAd->ALNAGain1 = (value >> 8); + pAd->ALNAGain1 = (CHAR)(value >> 8); } else #endif /* MT76x0 */ { /* if (IS_RT2860(pAd)) RT2860 supports 3 Rx and the 2.4 GHz RSSI #2 offset is in the EEPROM 0x48*/ - pAd->BGRssiOffset[2] = value & 0x00ff; - pAd->ALNAGain1 = (value >> 8); + pAd->BGRssiOffset[2] = (signed char)(value & 0x00ff); + pAd->ALNAGain1 = (CHAR)(value >> 8); } } @@ -166,9 +166,9 @@ INT rtmp_read_rssi_langain_from_eeprom(RTMP_ADAPTER *pAd) #endif /* RT3593 */ { RT28xx_EEPROM_READ16(pAd, EEPROM_LNA_OFFSET, value); - pAd->BLNAGain = value & 0x00ff; + pAd->BLNAGain = (CHAR)(value & 0x00ff); /* External LNA gain for 5GHz Band(CH36~CH64) */ - pAd->ALNAGain0 = (value >> 8); + pAd->ALNAGain0 = (CHAR)(value >> 8); } #ifdef RT3090 @@ -204,8 +204,8 @@ INT rtmp_read_rssi_langain_from_eeprom(RTMP_ADAPTER *pAd) #endif /* MT7601 */ { RT28xx_EEPROM_READ16(pAd, EEPROM_RSSI_A_OFFSET, value); - pAd->ARssiOffset[0] = value & 0x00ff; - pAd->ARssiOffset[1] = (value >> 8); + pAd->ARssiOffset[0] = (signed char)(value & 0x00ff); + pAd->ARssiOffset[1] = (signed char)(value >> 8); } #ifdef RT3593 @@ -233,8 +233,8 @@ INT rtmp_read_rssi_langain_from_eeprom(RTMP_ADAPTER *pAd) else #endif /* MT76x0 */ { - pAd->ARssiOffset[2] = value & 0x00ff; - pAd->ALNAGain2 = (value >> 8); + pAd->ARssiOffset[2] = (signed char)(value & 0x00ff); + pAd->ALNAGain2 = (CHAR)(value >> 8); } } @@ -316,13 +316,13 @@ INT rtmp_read_freq_offset_from_eeprom(RTMP_ADAPTER *pAd) #ifdef RT6352 if (IS_RT6352(pAd)) { - pAd->RfFreqOffset = (ULONG)(value & 0x00FF); + pAd->RfFreqOffset = (UCHAR)(value & 0x00FF); } else #endif /* RT6352 */ { if ((value & 0x00FF) != 0x00FF) - pAd->RfFreqOffset = (ULONG) (value & 0x00FF); + pAd->RfFreqOffset = (UCHAR)(value & 0x00FF); else pAd->RfFreqOffset = 0; } @@ -502,31 +502,6 @@ INT rtmp_read_txpwr_from_eeprom(RTMP_ADAPTER *pAd) return TRUE; } -VOID rtmp_product_random_mac(IN PRTMP_ADAPTER pAd) -{ - UCHAR SETMAC[3] = {0x00, 0x0c, 0x43}; - ULONG u4SysTime; - USHORT Addr01, Addr23, Addr45; - - u4SysTime = (ULONG) kalGetTimeTick(); - pAd->CurrentAddress[0] = SETMAC[0]; - pAd->CurrentAddress[1] = SETMAC[1]; - pAd->CurrentAddress[2] = SETMAC[2]; - - kalMemCopy(&pAd->CurrentAddress[3], &u4SysTime, 3); - Addr01 = (USHORT)(pAd->CurrentAddress[1]<<8) + (USHORT)(pAd->CurrentAddress[0]); - Addr23 = (USHORT)(pAd->CurrentAddress[3]<<8) + (USHORT)(pAd->CurrentAddress[2]); - Addr45 = (USHORT)(pAd->CurrentAddress[5]<<8) + (USHORT)(pAd->CurrentAddress[4]); - DBGPRINT_RAW(RT_DEBUG_OFF, ("translate addr : =%02x:%02x:%02x\n", - Addr01, Addr23, Addr45)); - RT28xx_EEPROM_WRITE16(pAd, 0x04, Addr01); - RT28xx_EEPROM_WRITE16(pAd, 0x06, Addr23); - RT28xx_EEPROM_WRITE16(pAd, 0x08, Addr45); - DBGPRINT_RAW(RT_DEBUG_OFF, ("Random produced MAC: =%02x:%02x:%02x:%02x:%02x:%02x\n", - PRINT_MAC(pAd->CurrentAddress))); - COPY_MAC_ADDR(pAd->PermanentAddress, pAd->CurrentAddress); -} - /* ======================================================================== @@ -572,27 +547,17 @@ INT NICReadEEPROMParameters(RTMP_ADAPTER *pAd, RTMP_STRING *mac_addr) } - rtmp_ee_efuse_read16(pAd, 0x4, &Value01); - rtmp_ee_efuse_read16(pAd, 0x6, &Value23); - rtmp_ee_efuse_read16(pAd, 0x8, &Value45); + RT28xx_EEPROM_READ16(pAd, 0x4, Value01); + RT28xx_EEPROM_READ16(pAd, 0x6, Value23); + RT28xx_EEPROM_READ16(pAd, 0x8, Value45); - if (((Value01&0xffff) == 0xffff && - (Value23&0xffff) == 0xffff && - (Value45&0xffff) == 0xffff) || - ((Value01&0xffff) == 0x0 && - (Value23&0xffff) == 0x0 && - (Value45&0xffff) == 0x0) || - ((Value01&0x0200) == 0x0200)) { - rtmp_product_random_mac(pAd); - } else { - DBGPRINT(RT_DEBUG_TRACE, ("Initialize MAC Address from EFUSE!\n")); - pAd->PermanentAddress[0] = (UCHAR)(Value01 & 0xff); - pAd->PermanentAddress[1] = (UCHAR)(Value01 >> 8); - pAd->PermanentAddress[2] = (UCHAR)(Value23 & 0xff); - pAd->PermanentAddress[3] = (UCHAR)(Value23 >> 8); - pAd->PermanentAddress[4] = (UCHAR)(Value45 & 0xff); - pAd->PermanentAddress[5] = (UCHAR)(Value45 >> 8); - } + DBGPRINT(RT_DEBUG_TRACE, ("Initialize MAC Address from EEPROM!\n")); + pAd->PermanentAddress[0] = (UCHAR)(Value01 & 0xff); + pAd->PermanentAddress[1] = (UCHAR)(Value01 >> 8); + pAd->PermanentAddress[2] = (UCHAR)(Value23 & 0xff); + pAd->PermanentAddress[3] = (UCHAR)(Value23 >> 8); + pAd->PermanentAddress[4] = (UCHAR)(Value45 & 0xff); + pAd->PermanentAddress[5] = (UCHAR)(Value45 >> 8); DBGPRINT(RT_DEBUG_TRACE, ("E2PROM MAC: =%02x:%02x:%02x:%02x:%02x:%02x\n", PRINT_MAC(pAd->PermanentAddress))); @@ -604,7 +569,8 @@ INT NICReadEEPROMParameters(RTMP_ADAPTER *pAd, RTMP_STRING *mac_addr) #if defined(BB_SOC)&&!defined(NEW_MBSSID_MODE) //BBUPrepareMAC(pAd, pAd->CurrentAddress); COPY_MAC_ADDR(pAd->PermanentAddress, pAd->CurrentAddress); - printk("now bb MainSsid mac %02x:%02x:%02x:%02x:%02x:%02x\n",PRINT_MAC(pAd->CurrentAddress)); + DBGPRINT(RT_DEBUG_TRACE, ("now bb MainSsid mac %02x:%02x:%02x:%02x:%02x:%02x\n", + PRINT_MAC(pAd->CurrentAddress))); #endif } else if (mac_addr && @@ -801,11 +767,11 @@ INT NICReadEEPROMParameters(RTMP_ADAPTER *pAd, RTMP_STRING *mac_addr) /* Choose the desired Tx&Rx stream.*/ if ((pAd->CommonCfg.TxStream == 0) || (pAd->CommonCfg.TxStream > Antenna.field.TxPath)) - pAd->CommonCfg.TxStream = Antenna.field.TxPath; + pAd->CommonCfg.TxStream = (UCHAR)Antenna.field.TxPath; if ((pAd->CommonCfg.RxStream == 0) || (pAd->CommonCfg.RxStream > Antenna.field.RxPath)) { - pAd->CommonCfg.RxStream = Antenna.field.RxPath; + pAd->CommonCfg.RxStream = (UCHAR)Antenna.field.RxPath; if ((pAd->MACVersion != RALINK_3883_VERSION) && (pAd->MACVersion != RALINK_2883_VERSION) && @@ -1502,7 +1468,7 @@ INT RtmpChipOpsEepromHook(RTMP_ADAPTER *pAd, INT infType,INT forceMode) if(forceMode != E2P_NONE && forceMode < NUM_OF_E2P_MODE) { - e2p_type = forceMode; + e2p_type = (UCHAR)forceMode; DBGPRINT(RT_DEBUG_OFF, ("%s::forceMode: %d , infType: %d\n", __FUNCTION__, e2p_type, infType)); pAd->eeprom_type = (e2p_type == E2P_EFUSE_MODE) ? EEPROM_EFUSE : EEPROM_FLASH; @@ -1916,7 +1882,7 @@ INT set_buffer_mode(RTMP_ADAPTER *pAd, RTMP_STRING *arg) if (value == 0) { NdisZeroMemory(pAd->EEPROMImage, MAX_EEPROM_BIN_FILE_SIZE); for (i = 0; i < MAX_EEPROM_BIN_FILE_SIZE; i += 2) { - eFuseRead(pAd, i, &efuse_val, 2); + eFuseRead(pAd, (USHORT)i, &efuse_val, 2); efuse_val = cpu2le16(efuse_val); NdisMoveMemory(&pAd->EEPROMImage[i], &efuse_val, 2); } diff --git a/common/mlme.c b/common/mlme.c index 84e8230..27e1b6d 100755 --- a/common/mlme.c +++ b/common/mlme.c @@ -850,6 +850,10 @@ VOID RtmpPrepareHwNullFrame( IN BOOLEAN bWaitACK, IN CHAR Index) { + +#if defined(MT7603) || defined(MT7628) + /* nothing to handle */ +#else UINT8 TXWISize = pAd->chipCap.TXWISize; UCHAR *pNullFrame, *tmac_info = (UCHAR *)&pAd->NullTxWI; NDIS_STATUS NState; @@ -863,12 +867,6 @@ VOID RtmpPrepareHwNullFrame( #endif /* P2P_SUPPORT */ MAC_TX_INFO mac_info; - // TODO: shiang-7603!! fix me - if (IS_MT7603(pAd) || IS_MT7628(pAd)) { - DBGPRINT(RT_DEBUG_OFF, ("%s(): MT7603 Not support yet!\n", __FUNCTION__)); - return; - } - NState = MlmeAllocateMemory(pAd, (PUCHAR *)&pNullFrame); NdisZeroMemory(pNullFrame, 48); @@ -934,7 +932,7 @@ VOID RtmpPrepareHwNullFrame( mac_info.NSeq = TRUE; mac_info.BASize = 0; - mac_info.WCID = pEntry->Aid; + mac_info.WCID = (UCHAR)(pEntry->Aid); mac_info.Length = Length; mac_info.TID = 0; @@ -1016,6 +1014,7 @@ VOID RtmpPrepareHwNullFrame( if (pNullFrame) MlmeFreeMemory(pAd, pNullFrame); +#endif /* defined(MT7603) || defined(MT7628) */ } @@ -1237,7 +1236,7 @@ VOID MlmeHandler(RTMP_ADAPTER *pAd) #ifdef APCLI_SUPPORT case APCLI_AUTH_STATE_MACHINE: - apcliIfIndex = Elem->Priv; + apcliIfIndex = (SHORT)Elem->Priv; #ifdef MAC_REPEATER_SUPPORT if (apcliIfIndex >= 64) apcliIfIndex = ((apcliIfIndex - 64) / 16); @@ -1249,7 +1248,7 @@ VOID MlmeHandler(RTMP_ADAPTER *pAd) #ifdef MAC_REPEATER_SUPPORT UCHAR CliIdx = 0; - apcliIfIndex = Elem->Priv; + apcliIfIndex = (SHORT)Elem->Priv; if (apcliIfIndex >= 64) { @@ -1268,7 +1267,7 @@ VOID MlmeHandler(RTMP_ADAPTER *pAd) break; case APCLI_ASSOC_STATE_MACHINE: - apcliIfIndex = Elem->Priv; + apcliIfIndex = (SHORT)Elem->Priv; #ifdef MAC_REPEATER_SUPPORT if (apcliIfIndex >= 64) apcliIfIndex = ((apcliIfIndex - 64) / 16); @@ -1280,7 +1279,7 @@ VOID MlmeHandler(RTMP_ADAPTER *pAd) #ifdef MAC_REPEATER_SUPPORT UCHAR CliIdx = 0; - apcliIfIndex = Elem->Priv; + apcliIfIndex = (SHORT)Elem->Priv; if (apcliIfIndex >= 64) { @@ -1295,14 +1294,14 @@ VOID MlmeHandler(RTMP_ADAPTER *pAd) break; case APCLI_SYNC_STATE_MACHINE: - apcliIfIndex = Elem->Priv; + apcliIfIndex = (SHORT)Elem->Priv; if(isValidApCliIf(apcliIfIndex)) StateMachinePerformAction(pAd, &pAd->Mlme.ApCliSyncMachine, Elem, (pAd->ApCfg.ApCliTab[apcliIfIndex].SyncCurrState)); break; case APCLI_CTRL_STATE_MACHINE: - apcliIfIndex = Elem->Priv; + apcliIfIndex = (SHORT)Elem->Priv; #ifdef MAC_REPEATER_SUPPORT if (apcliIfIndex >= 64) apcliIfIndex = ((apcliIfIndex - 64) / 16); @@ -1314,7 +1313,7 @@ VOID MlmeHandler(RTMP_ADAPTER *pAd) #ifdef MAC_REPEATER_SUPPORT UCHAR CliIdx = 0; - apcliIfIndex = Elem->Priv; + apcliIfIndex = (SHORT)Elem->Priv; if (apcliIfIndex >= 64) { @@ -2003,7 +2002,7 @@ VOID MlmeHalt(RTMP_ADAPTER *pAd) #if (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(MT_WOW_SUPPORT) if (!(pAd->WOW_Cfg.bEnable == TRUE) && INFRA_ON(pAd)) -#endif /* (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(NEW_WOW_SUPPORT) || defined(MT_WOW_SUPPORT)*/ +#endif /* (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(MT_WOW_SUPPORT)*/ if (pChipOps->AsicHaltAction) pChipOps->AsicHaltAction(pAd); } @@ -2069,7 +2068,6 @@ NTSTATUS MlmePeriodicExec(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt) SHORT realavgrssi; #endif /* ANT_DIVERSITY_SUPPORT */ - /* No More 0x84 MCU CMD from v.30 FW*/ #if 0 #ifdef RTMP_MAC_PCI @@ -2465,7 +2463,8 @@ NTSTATUS MlmePeriodicExec(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt) { DBGPRINT(RT_DEBUG_TRACE, ("Current TP=%lu < Threshold(%lu), turn-off TxOP\n", (((TxTotalByteCnt + RxTotalByteCnt) << 3) >> 20), pAd->CommonCfg.ManualTxopThreshold)); - AsicUpdateTxOP(pAd, WMM_PARAM_AC_1, 0x0); + if (!pAd->bLink11b) + AsicUpdateTxOP(pAd, WMM_PARAM_AC_1, 0x0); } } else if (pAd->MacTab.Size > 1) @@ -2635,6 +2634,7 @@ NTSTATUS MlmePeriodicExec(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt) /* the dynamic tuning mechanism below are based on most up-to-date information*/ /* Hint: throughput impact is very serious in the function */ #ifndef RTMP_SDIO_SUPPORT + NicUpdatFalseCCACounters(pAd); NICUpdateRawCounters(pAd); #endif /*leonardo mark it for FPGA debug*/ RTMP_SECOND_CCA_DETECTION(pAd); @@ -2898,10 +2898,23 @@ NTSTATUS MlmePeriodicExec(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt) } #endif /* TDLS_AUTOLINK_SUPPORT */ #endif /* defined(DOT11Z_TDLS_SUPPORT) || defined(CFG_TDLS_SUPPORT) */ + STAMlmePeriodicExec(pAd); } #endif /* CONFIG_STA_SUPPORT */ + +#ifdef SMART_CARRIER_SENSE_SUPPORT +#if 0 /* move to MtCmdNICUpdateRawCounters*/ + pAd->SCSCtrl.PdCount = PDCnt; + pAd->SCSCtrl.MdrdyCount = MDRDYCnt; + pAd->SCSCtrl.FalseCCA = pAd->RalinkCounters.FalseCCACnt; +#endif + + if (pAd->SCSCtrl.SCSEnable == SCS_ENABLE) + MTSmartCarrierSense(pAd); +#endif/*SMART_CARRIER_SENSE_SUPPORT */ + #if defined(RT5370) || defined(RT5372) || defined(RT5390) || defined(RT5392) if (IS_RT5392(pAd) && ((pAd->MACVersion & 0x0000FFFF) < 0x0223)) { @@ -4054,6 +4067,13 @@ VOID LinkDownExec( VOID MlmeAutoScan(RTMP_ADAPTER *pAd) { + if (pAd->MlmeAux.AutoReconnectSsidLen > MAX_LEN_OF_SSID) { + DBGPRINT(RT_DEBUG_ERROR, + ("%s(): invalid SsidLen(%d)\n", + __func__, pAd->MlmeAux.AutoReconnectSsidLen)); + return; + } + /* check CntlMachine.CurrState to avoid collision with NDIS SetOID request*/ if (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) { @@ -4719,7 +4739,7 @@ VOID MlmeUpdateTxRates(RTMP_ADAPTER *pAd, BOOLEAN bLinkUp, UCHAR apidx) #ifdef RT_CFG80211_P2P_SUPPORT if (apidx >= MIN_NET_DEVICE_FOR_CFG80211_VIF_P2P_GO) { - printk("%s: Update for GO\n", __FUNCTION__); + DBGPRINT(RT_DEBUG_INFO, ("%s: Update for GO\n", __func__)); wdev = &pAd->ApCfg.MBSSID[CFG_GO_BSSID_IDX].wdev; break; } @@ -4815,7 +4835,7 @@ VOID MlmeUpdateTxRates(RTMP_ADAPTER *pAd, BOOLEAN bLinkUp, UCHAR apidx) pMinHtPhy = &wdev->MinHTPhyMode; auto_rate_cur_p = &wdev->bAutoTxRateSwitch; - HtMcs = wdev->DesiredTransmitSetting.field.MCS; + HtMcs = (UCHAR)wdev->DesiredTransmitSetting.field.MCS; } pAd->CommonCfg.MaxDesiredRate = MaxDesire; @@ -5314,7 +5334,7 @@ VOID MlmeUpdateHtTxRates(RTMP_ADAPTER *pAd, UCHAR apidx) pMaxHtPhy->field.MCS = 32; } - pMaxHtPhy->field.MCS = get_ht_max_mcs(pAd, &pDesireHtPhy->MCSSet[0], + pMaxHtPhy->field.MCS = (USHORT)get_ht_max_mcs(pAd, &pDesireHtPhy->MCSSet[0], &pActiveHtPhy->MCSSet[0]); /* Copy MIN ht rate. rt2860???*/ @@ -5982,6 +6002,11 @@ ULONG BssTableSetEntry( Idx = BssTableSearch(Tab, ie_list->Bssid, ie_list->Channel); + if (Idx >= MAX_LEN_OF_BSS_TABLE && Idx != BSS_NOT_FOUND) { + DBGPRINT(RT_DEBUG_ERROR, + ("%s(): invalid BSS Idx(%ld)\n", __func__, Idx)); + return BSS_NOT_FOUND; + } if (Idx == BSS_NOT_FOUND) { if (Tab->BssNr >= MAX_LEN_OF_BSS_TABLE) @@ -7218,11 +7243,9 @@ BOOLEAN MlmeEnqueue( { INT Tail; MLME_QUEUE *Queue = (MLME_QUEUE *)&pAd->Mlme.Queue; + /* Do nothing if the driver is starting halt state.*/ /* This might happen when timer already been fired before cancel timer with mlmehalt*/ - if (Machine == APCLI_CTRL_STATE_MACHINE) - DBGPRINT(RT_DEBUG_TRACE, ("army 1debug for the APCLI_CTRL_STATE_MACHINE state:%ld\n",MsgType)); - if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) return FALSE; @@ -7272,9 +7295,6 @@ BOOLEAN MlmeEnqueue( NdisMoveMemory(Queue->Entry[Tail].Msg, Msg, MsgLen); } - if (Machine == APCLI_CTRL_STATE_MACHINE) - DBGPRINT(RT_DEBUG_TRACE, ("army 2debug for the APCLI_CTRL_STATE_MACHINE state:%ld\n",MsgType)); - NdisReleaseSpinLock(&(Queue->Lock)); #ifdef RELEASE_EXCLUDE DBGPRINT(RT_DEBUG_INFO, ("MlmeEnqueue, num=%ld\n",Queue->Num)); @@ -7479,7 +7499,7 @@ BOOLEAN MlmeEnqueueForRecv( NdisMoveMemory(&Queue->Entry[Tail].rssi_info, rssi_info, sizeof(struct raw_rssi_info)); Queue->Entry[Tail].Signal = rssi_info->raw_snr; Queue->Entry[Tail].Wcid = (UCHAR)Wcid; - Queue->Entry[Tail].OpMode = (ULONG)OpMode; + Queue->Entry[Tail].OpMode = (UCHAR)OpMode; Queue->Entry[Tail].Channel = pAd->LatchRfRegs.Channel; Queue->Entry[Tail].Priv = 0; #ifdef APCLI_SUPPORT @@ -7906,8 +7926,9 @@ BOOLEAN MsgTypeSubst(RTMP_ADAPTER *pAd, FRAME_802_11 *pFrame, INT *Machine, INT break; case SUBTYPE_AUTH: /* get the sequence number from payload 24 Mac Header + 2 bytes algorithm*/ - NdisMoveMemory(&Seq, &pFrame->Octet[2], sizeof(USHORT)); - NdisMoveMemory(&Alg, &pFrame->Octet[0], sizeof(USHORT)); + NdisMoveMemory(&Seq, (UCHAR *)pFrame+sizeof(HEADER_802_11)+2, sizeof(USHORT)); + NdisMoveMemory(&Alg, (UCHAR *)pFrame+sizeof(HEADER_802_11), sizeof(USHORT)); + if (Seq == 1 || Seq == 3) { *Machine = AUTH_RSP_STATE_MACHINE; @@ -8124,7 +8145,7 @@ UCHAR RandomByte2(RTMP_ADAPTER *pAd) a &= 0x0000ffff; b = AsicGetCrcErrCnt(pAd); b &= 0x0000ffff; - value = (a<<16)|b; + value = (UCHAR)((a<<16)|b); /*get seed by RSSI or SNR related info */ seed = get_random_seed_by_phy(pAd); @@ -8328,10 +8349,13 @@ BOOLEAN RTMPCheckHt( /* Send Assoc Req with my HT capability.*/ pAd->MlmeAux.HtCapability.HtCapInfo.AMsduSize = pAd->CommonCfg.DesiredHtPhy.AmsduSize; pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs = pAd->CommonCfg.DesiredHtPhy.MimoPs; - pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20 = (pAd->CommonCfg.DesiredHtPhy.ShortGIfor20) & (pHtCap->HtCapInfo.ShortGIfor20); - pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40 = (pAd->CommonCfg.DesiredHtPhy.ShortGIfor40) & (pHtCap->HtCapInfo.ShortGIfor40); - pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC = (pAd->CommonCfg.DesiredHtPhy.TxSTBC)&(pHtCap->HtCapInfo.RxSTBC); - pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC = (pAd->CommonCfg.DesiredHtPhy.RxSTBC)&(pHtCap->HtCapInfo.TxSTBC); + /* The HT Capabilities element are used to advertise optional HT capabilities of an HT STA. + * We shouldn't care about the AP's Capabilities in here + */ + pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20 = pAd->CommonCfg.DesiredHtPhy.ShortGIfor20; + pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40 = pAd->CommonCfg.DesiredHtPhy.ShortGIfor40; + pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC = pAd->CommonCfg.DesiredHtPhy.TxSTBC; + pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC = pAd->CommonCfg.DesiredHtPhy.RxSTBC; if (CLIENT_STATUS_TEST_FLAG(sta, fCLIENT_STATUS_HT_RX_LDPC_CAPABLE)) pAd->MlmeAux.HtCapability.HtCapInfo.ht_rx_ldpc = 1; @@ -8451,16 +8475,16 @@ VOID RTMPUpdateMlmeRate(RTMP_ADAPTER *pAd) switch (pAd->CommonCfg.PhyMode) { - case (WMODE_B): + case ((UCHAR)WMODE_B): ProperMlmeRate = RATE_11; MinimumRate = RATE_1; break; - case (WMODE_B | WMODE_G): + case ((UCHAR)(WMODE_B | WMODE_G)): #ifdef DOT11_N_SUPPORT - case (WMODE_B | WMODE_G | WMODE_GN | WMODE_A |WMODE_AN): - case (WMODE_B | WMODE_G | WMODE_GN): + case ((UCHAR)(WMODE_B | WMODE_G | WMODE_GN | WMODE_A | WMODE_AN)): + case ((UCHAR)(WMODE_B | WMODE_G | WMODE_GN)): #ifdef DOT11_VHT_AC - case (WMODE_B | WMODE_G | WMODE_GN | WMODE_A |WMODE_AN | WMODE_AC): + case ((UCHAR)(WMODE_B | WMODE_G | WMODE_GN | WMODE_A | WMODE_AN | WMODE_AC)): #endif /* DOT11_VHT_AC */ #endif /* DOT11_N_SUPPORT */ if ((pAd->MlmeAux.SupRateLen == 4) && @@ -8474,21 +8498,21 @@ VOID RTMPUpdateMlmeRate(RTMP_ADAPTER *pAd) else MinimumRate = RATE_6; break; - case (WMODE_A): + case ((UCHAR)WMODE_A): #ifdef DOT11_N_SUPPORT - case (WMODE_GN): - case (WMODE_G | WMODE_GN): - case (WMODE_A | WMODE_G | WMODE_GN | WMODE_AN): - case (WMODE_A |WMODE_AN): - case (WMODE_AN): + case ((UCHAR)WMODE_GN): + case ((UCHAR)(WMODE_G | WMODE_GN)): + case ((UCHAR)(WMODE_A | WMODE_G | WMODE_GN | WMODE_AN)): + case ((UCHAR)(WMODE_A | WMODE_AN)): + case ((UCHAR)WMODE_AN): #ifdef DOT11_VHT_AC - case (WMODE_A | WMODE_G | WMODE_GN | WMODE_AN | WMODE_AC): + case ((UCHAR)(WMODE_A | WMODE_G | WMODE_GN | WMODE_AN | WMODE_AC)): #endif /* DOT11_VHT_AC */ #endif /* DOT11_N_SUPPORT */ ProperMlmeRate = RATE_24; MinimumRate = RATE_6; break; - case (WMODE_A |WMODE_B | WMODE_G): + case ((UCHAR)(WMODE_A | WMODE_B | WMODE_G)): ProperMlmeRate = RATE_24; if (pAd->MlmeAux.Channel <= 14) MinimumRate = RATE_1; @@ -8615,6 +8639,24 @@ CHAR RTMPAvgRssi(RTMP_ADAPTER *pAd, RSSI_SAMPLE *pRssi) return Rssi; } +CHAR RTMPMaxNoise(RTMP_ADAPTER *pAd, CHAR Noise0, CHAR Noise1, CHAR Noise2) +{ + CHAR larger = -127; + + if ((pAd->Antenna.field.RxPath == 1) && (Noise0 != 0)) + larger = Noise0; + + if ((pAd->Antenna.field.RxPath >= 2) && (Noise1 != 0)) + larger = max(Noise0, Noise1); + + if ((pAd->Antenna.field.RxPath == 3) && (Noise2 != 0)) + larger = max(larger, Noise2); + + if (larger == -127) + larger = 0; + + return larger; +} CHAR RTMPMaxRssi(RTMP_ADAPTER *pAd, CHAR Rssi0, CHAR Rssi1, CHAR Rssi2) { @@ -8641,6 +8683,24 @@ CHAR RTMPMaxRssi(RTMP_ADAPTER *pAd, CHAR Rssi0, CHAR Rssi1, CHAR Rssi2) return larger; } +CHAR RTMPMinRssi(RTMP_ADAPTER *pAd, CHAR Rssi0, CHAR Rssi1, CHAR Rssi2) +{ + CHAR smaller = -127; + + if ((pAd->Antenna.field.RxPath == 1) && (Rssi0 != 0)) + smaller = Rssi0; + + if ((pAd->Antenna.field.RxPath >= 2) && (Rssi1 != 0)) + smaller = min(Rssi0, Rssi1); + + if ((pAd->Antenna.field.RxPath == 3) && (Rssi2 != 0)) + smaller = min(smaller, Rssi2); + + if (smaller == -127) + smaller = 0; + + return smaller; +} CHAR RTMPMinSnr(RTMP_ADAPTER *pAd, CHAR Snr0, CHAR Snr1) { diff --git a/common/mt_ps.c b/common/mt_ps.c index c4e65ef..b923663 100755 --- a/common/mt_ps.c +++ b/common/mt_ps.c @@ -315,7 +315,7 @@ VOID MtHandleRxPsPoll(RTMP_ADAPTER *pAd, UCHAR *pAddr, USHORT wcid, BOOLEAN isAc if (IsDequeu == TRUE) { - RTMPDeQueuePacket(pAd, FALSE, DequeuAC, tr_entry->wcid, DequeuCOUNT); + RTMPDeQueuePacket(pAd, FALSE, (UCHAR)DequeuAC, tr_entry->wcid, DequeuCOUNT); DBGPRINT(RT_DEBUG_INFO | DBG_FUNC_PS, ("RtmpHandleRxPsPoll IsDequeu == TRUE tr_entry->wcid=%x DequeuCOUNT=%d, ps_state=%d\n",tr_entry->wcid, DequeuCOUNT, tr_entry->ps_state)); } return; @@ -562,7 +562,8 @@ VOID MtEnqTxSwqFromPsQueue(RTMP_ADAPTER *pAd, UCHAR qidx, STA_TR_ENTRY *tr_entry if(pAcPsQue->Number > 0 && tr_entry->wcid > 0 && tr_entry->wcid < MAX_LEN_OF_TR_TABLE) { rtmp_ps_enq(pAd,tr_entry); - printk("pAcPsQue->Number=%d,PS:%d\n",pAcPsQue->Number,tr_entry->PsTokenFlag); + DBGPRINT(RT_DEBUG_WARN, + ("pAcPsQue->Number=%d,PS:%d\n", pAcPsQue->Number, tr_entry->PsTokenFlag)); } while(pAcPsQue->Head) diff --git a/common/mtusb_io.c b/common/mtusb_io.c index 9a7bd28..65c1a9f 100755 --- a/common/mtusb_io.c +++ b/common/mtusb_io.c @@ -92,8 +92,8 @@ static NTSTATUS mtusb_multiwrite(RTMP_ADAPTER *pAd, USBD_TRANSFER_DIRECTION_OUT, DEVICE_VENDOR_REQUEST_OUT, 0x66, - (index & 0xffff0000) >> 16, - (index & 0x0000ffff), + (USHORT)((index & 0xffff0000) >> 16), + (USHORT)(index & 0x0000ffff), pSrc, actLen); @@ -118,8 +118,10 @@ static NTSTATUS mtusb_multiread(RTMP_ADAPTER *pAd, UINT32 addr, UCHAR *buf, UINT Status = RTUSB_VendorRequest(pAd, (USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK), DEVICE_VENDOR_REQUEST_IN, - 0x63, (addr & 0xffff0000) >> 16, - (addr & 0x0000ffff), buf, len); + 0x63, + (USHORT)((addr & 0xffff0000) >> 16), + (USHORT)(addr & 0x0000ffff), + buf, len); return Status; } @@ -342,7 +344,7 @@ static NTSTATUS SetClientMACEntryHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelm PRT_SET_ASIC_WCID pInfo; pInfo = (PRT_SET_ASIC_WCID)CMDQelmt->buffer; - AsicUpdateRxWCIDTable(pAd, pInfo->WCID, pInfo->Addr); + AsicUpdateRxWCIDTable(pAd, (USHORT)(pInfo->WCID), pInfo->Addr); return NDIS_STATUS_SUCCESS; } diff --git a/common/rtmp_init.c b/common/rtmp_init.c index 314bb9e..84772e9 100755 --- a/common/rtmp_init.c +++ b/common/rtmp_init.c @@ -1398,6 +1398,7 @@ VOID UserCfgInit(RTMP_ADAPTER *pAd) #endif /* RTMP_INTERNAL_TX_ALC || RTMP_TEMPERATURE_COMPENSATION */ #ifdef THERMAL_PROTECT_SUPPORT + pAd->switch_tx_stream = FALSE; pAd->force_one_tx_stream = FALSE; pAd->last_thermal_pro_temp = 0; #endif /* THERMAL_PROTECT_SUPPORT */ @@ -2397,7 +2398,7 @@ RTMP_SET_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); NdisZeroMemory(pAd->WOW_Cfg.PTK, LEN_PTK); NdisZeroMemory(pAd->WOW_Cfg.ReplayCounter, LEN_KEY_DESC_REPLAY); //DBGPRINT(RT_DEBUG_OFF, ("WOW Enable %d, WOWFirmware %d\n", pAd->WOW_Cfg.bEnable, pAd->WOW_Cfg.bWOWFirmware)); -#endif /* (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(NEW_WOW_SUPPORT) || defined(MT_WOW_SUPPORT) */ +#endif /* (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(MT_WOW_SUPPORT) */ /* 802.11H and DFS related params*/ pAd->Dot11_H.CSCount = 0; @@ -2567,6 +2568,19 @@ RTMP_SET_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); pAd->FWLoad = 0; #endif /* LOAD_FW_ONE_TIME */ +#ifdef SMART_CARRIER_SENSE_SUPPORT + pAd->SCSCtrl.SCSEnable = SCS_ENABLE; + pAd->SCSCtrl.SCSMinRssi = 0; + pAd->SCSCtrl.SCSStatus = SCS_STATUS_DEFAULT; + pAd->SCSCtrl.SCSTrafficThreshold = 62500; /* 500Kbps */ + pAd->SCSCtrl.CurrSensitivity = -102; + pAd->SCSCtrl.AdjustSensitivity = -102; + pAd->SCSCtrl.FixedRssiBond = -72; + pAd->SCSCtrl.FalseCcaUpBond = 600; + pAd->SCSCtrl.FalseCcaLowBond = 60; + pAd->SCSCtrl.SCSMinRssiTolerance = 10; + pAd->SCSCtrl.ForceMode = 0; +#endif pAd->bPS_Retrieve =1; pAd->CommonCfg.bTXRX_RXV_ON = 0; @@ -3161,7 +3175,6 @@ INT RtmpRaDevCtrlInit(VOID *pAdSrc, RTMP_INF_TYPE infType) #ifdef CONFIG_STA_SUPPORT pAd->OpMode = OPMODE_STA; DBGPRINT(RT_DEBUG_OFF, ("STA Driver version-%s\n", STA_DRIVER_VERSION)); -// DBGPRINT(RT_DEBUG_OFF, ("Compile time-%s,%s\n", __DATE__, __TIME__)); #endif /* CONFIG_STA_SUPPORT */ #ifdef CONFIG_AP_SUPPORT @@ -3265,7 +3278,6 @@ INT RtmpRaDevCtrlInit(VOID *pAdSrc, RTMP_INF_TYPE infType) if (pAd->chipCap.hif_type != HIF_MT) #endif { - printk("JERRY:prepare load_patch..\n"); if (load_patch(pAd) != NDIS_STATUS_SUCCESS) { DBGPRINT_ERR(("load patch failed!\n")); return FALSE; @@ -3490,8 +3502,9 @@ VOID CMDHandler(RTMP_ADAPTER *pAd) case HWCMD_ID_BMC_CNT_UPDATE: { CHAR idx = 0; - printk("cmd HWCMD_ID_BMC_CNT_UPDATE \n"); - NdisMoveMemory(&idx , pData, sizeof(CHAR)); + DBGPRINT(RT_DEBUG_INFO, + "cmd HWCMD_ID_BMC_CNT_UPDATE \n"); + NdisMoveMemory(&idx, pData, sizeof(CHAR)); /* BMC start */ AsicSetBmcQCR(pAd, BMC_CNT_UPDATE, CR_WRITE, idx, NULL); diff --git a/common/rtmp_init_inf.c b/common/rtmp_init_inf.c index 45f7631..fb9c61a 100755 --- a/common/rtmp_init_inf.c +++ b/common/rtmp_init_inf.c @@ -362,8 +362,6 @@ int rt28xx_init(VOID *pAdSrc, RTMP_STRING *pDefaultMac, RTMP_STRING *pHostName) if (MAX_LEN_OF_MAC_TABLE > MAX_AVAILABLE_CLIENT_WCID(pAd)) { DBGPRINT(RT_DEBUG_ERROR, ("MAX_LEN_OF_MAC_TABLE can not be larger than MAX_AVAILABLE_CLIENT_WCID!!!!\n")); - DBGPRINT(RT_DEBUG_ERROR, ("MAX_LEN_OF_MAC_TABLE :%d MAX_AVAILABLE_CLIENT_WCID:%d\n",MAX_LEN_OF_MAC_TABLE,MAX_AVAILABLE_CLIENT_WCID(pAd))); - goto err6; } @@ -386,6 +384,11 @@ int rt28xx_init(VOID *pAdSrc, RTMP_STRING *pDefaultMac, RTMP_STRING *pHostName) DBGPRINT(RT_DEBUG_OFF, ("2. Phy Mode = %d\n", pAd->CommonCfg.PhyMode)); RTMP_NET_DEV_NICKNAME_INIT(pAd); +#ifdef SMART_CARRIER_SENSE_SUPPORT + /* Backup CR_AGC_0 & CR_AGC_3 value */ + RTMP_IO_READ32(pAd, CR_AGC_0, &pAd->SCSCtrl.CR_AGC_0_default); + RTMP_IO_READ32(pAd, CR_AGC_3, &pAd->SCSCtrl.CR_AGC_3_default); +#endif /* SMART_CARRIER_SENSE_SUPPORT */ /* After operation mode is finialized, init the AP or STA mode */ #ifdef CONFIG_AP_SUPPORT @@ -1290,7 +1293,7 @@ VOID RTMPDrvClose(VOID *pAdSrc, VOID *net_dev) #if ((defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(MT_WOW_SUPPORT)) && defined(WOW_IFDOWN_SUPPORT) if (!((pAd->WOW_Cfg.bEnable == TRUE) && INFRA_ON(pAd))) -#endif /* ((defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(NEW_WOW_SUPPORT) || defined(MT_WOW_SUPPORT)) && defined(WOW_IFDOWN_SUPPORT) */ +#endif /* ((defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(MT_WOW_SUPPORT)) && defined(WOW_IFDOWN_SUPPORT) */ { #ifdef MT_MAC if (pAd->chipCap.hif_type != HIF_MT) @@ -1378,7 +1381,7 @@ VOID RTMPDrvClose(VOID *pAdSrc, VOID *net_dev) CmdExtPmStateCtrl(pAd, BSSID_WCID, PM4, ENTER_PM_STATE); } else -#endif /* ((defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(NEW_WOW_SUPPORT) || defined(MT_WOW_SUPPORT)) && defined(WOW_IFDOWN_SUPPORT) */ +#endif /* ((defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(MT_WOW_SUPPORT)) && defined(WOW_IFDOWN_SUPPORT) */ MlmeRadioOff(pAd); } #endif /* CONFIG_STA_SUPPORT */ @@ -1502,11 +1505,7 @@ VOID RTMPDrvClose(VOID *pAdSrc, VOID *net_dev) DlListForEachSafe(ch, ch_temp, &pAd->SingleSkuPwrList, CH_POWER, List) { DlListDel(&ch->List); -#ifdef MT7601 - if (IS_MT7601(pAd)) { - os_free_mem(NULL, ch->Channel); - } -#endif /* MT7601 */ + os_free_mem(NULL, ch->Channel); os_free_mem(NULL, ch); } } @@ -1663,7 +1662,7 @@ VOID RTMPInfClose(VOID *pAdSrc) #if ((defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(MT_WOW_SUPPORT)) && defined(WOW_IFDOWN_SUPPORT) /* In WOW state, can't issue disassociation reqeust */ pAd->WOW_Cfg.bEnable == FALSE && -#endif /* ((defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(NEW_WOW_SUPPORT) || defined(MT_WOW_SUPPORT)) && defined(WOW_IFDOWN_SUPPORT) */ +#endif /* ((defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) defined(MT_WOW_SUPPORT)) && defined(WOW_IFDOWN_SUPPORT) */ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) { MLME_DISASSOC_REQ_STRUCT DisReq; @@ -1916,6 +1915,10 @@ PNET_DEV RtmpPhyNetDevMainCreate(VOID *pAdSrc) #endif /* HOSTAPD_SUPPORT */ dev_name = get_dev_name_prefix(pAd, INT_MAIN); + if (dev_name == NULL) { + DBGPRINT(RT_DEBUG_ERROR, ("%s():dev_name NULL\n", __func__)); + return NULL; + } pDevNew = RtmpOSNetDevCreate((INT32)MC_RowID, (UINT32 *)&IoctlIF, INT_MAIN, 0, sizeof(struct mt_dev_priv), dev_name); diff --git a/common/rtusb_bulk.c b/common/rtusb_bulk.c index a319032..459c6fe 100755 --- a/common/rtusb_bulk.c +++ b/common/rtusb_bulk.c @@ -145,6 +145,10 @@ VOID RTUSBInitTxDesc( pUrb = pTxContext->pUrb; ASSERT(pUrb); + if (BulkOutPipeId >= 5) { + DBGPRINT(RT_DEBUG_ERROR, ("%s:Invalid BulkOutPipeId\n", __func__)); + return; + } /* Store BulkOut PipeId*/ pTxContext->BulkOutPipeId = BulkOutPipeId; @@ -291,6 +295,10 @@ VOID RTUSBInitHTTxDesc( #endif /* USB_BULK_BUF_ALIGMENT */ ASSERT(pUrb); + if (BulkOutPipeId >= 5) { + DBGPRINT(RT_DEBUG_ERROR, ("%s:Invalid BulkOutPipeId\n", __FUNCTION__)); + return; + } /* Store BulkOut PipeId*/ pTxContext->BulkOutPipeId = BulkOutPipeId; @@ -1184,6 +1192,7 @@ VOID RTUSBBulkOutDataPacket(RTMP_ADAPTER *pAd, UCHAR BulkOutPipeId, UCHAR Index) #else padding = (4 - (txd_0->tx_byte_cnt % 4)) & 0x03; ThisBulkSize += txd_0->tx_byte_cnt+padding; + pAd->RalinkCounters.OneSecTransmittedByteCount += (txd_0->tx_byte_cnt+padding); TmpBulkEndPos += txd_0->tx_byte_cnt+padding; #endif /* MT_MAC */ @@ -1454,7 +1463,7 @@ VOID RTUSBBulkOutNullFrame( PTX_CONTEXT pNullContext = &(pAd->NullContext); PURB pUrb; int ret = 0; - unsigned long IrqFlags; + unsigned long IrqFlags = 0; RTMP_IRQ_LOCK(&pAd->BulkOutLock[MGMTPIPEIDX], IrqFlags); if ((pAd->BulkOutPending[MGMTPIPEIDX] == TRUE) || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_TX)) @@ -1479,7 +1488,7 @@ VOID RTUSBBulkOutNullFrame( #endif /* RT_BIG_ENDIAN */ /* Init Tx context descriptor*/ - RTUSBInitTxDesc(pAd, pNullContext, MGMTPIPEIDX, (usb_complete_t)RtmpUsbBulkOutNullFrameComplete); + RTUSBInitTxDesc(pAd, pNullContext, EDCA_BMC_PIPE, (usb_complete_t)RtmpUsbBulkOutNullFrameComplete); pUrb = pNullContext->pUrb; @@ -1551,7 +1560,7 @@ VOID RTUSBBulkOutMLMEPacket( PTX_CONTEXT pMLMEContext; PURB pUrb; int ret = 0; - unsigned long IrqFlags; + unsigned long IrqFlags = 0; pMLMEContext = (PTX_CONTEXT)pAd->MgmtRing.Cell[pAd->MgmtRing.TxDmaIdx].AllocVa; pUrb = pMLMEContext->pUrb; @@ -1606,7 +1615,7 @@ VOID RTUSBBulkOutMLMEPacket( #endif /* RT_BIG_ENDIAN */ /* Init Tx context descriptor*/ - RTUSBInitTxDesc(pAd, pMLMEContext, MGMTPIPEIDX, (usb_complete_t)RtmpUsbBulkOutMLMEPacketComplete); + RTUSBInitTxDesc(pAd, pMLMEContext, EDCA_BMC_PIPE, (usb_complete_t)RtmpUsbBulkOutMLMEPacketComplete); RTUSB_URB_DMA_MAPPING(pUrb); @@ -1661,7 +1670,7 @@ VOID RTUSBBulkOutBCNPacket( PTX_CONTEXT pBcnContext; PURB pUrb; int ret = 0; - unsigned long IrqFlags; + unsigned long IrqFlags = 0; pBcnContext = (PTX_CONTEXT)pAd->BcnRing.Cell[pAd->BcnRing.TxDmaIdx].AllocVa; pUrb = pBcnContext->pUrb; @@ -1708,7 +1717,7 @@ VOID RTUSBBulkOutBCNPacket( #endif /* RT_BIG_ENDIAN */ /* Init Tx context descriptor*/ - RTUSBInitTxDesc(pAd, pBcnContext, MGMTPIPEIDX, (usb_complete_t)RTUSBBulkOutBCNPacketComplete); + RTUSBInitTxDesc(pAd, pBcnContext, EDCA_BMC_PIPE, (usb_complete_t)RTUSBBulkOutBCNPacketComplete); RTUSB_URB_DMA_MAPPING(pUrb); @@ -1773,7 +1782,7 @@ VOID RTUSBBulkOutPsPoll( PTX_CONTEXT pPsPollContext = &(pAd->PsPollContext); PURB pUrb; int ret = 0; - unsigned long IrqFlags; + unsigned long IrqFlags = 0; RTMP_IRQ_LOCK(&pAd->BulkOutLock[0], IrqFlags); if ((pAd->BulkOutPending[0] == TRUE) || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_TX)) @@ -1795,7 +1804,7 @@ VOID RTUSBBulkOutPsPoll( #endif /* RT_BIG_ENDIAN */ /* Init Tx context descriptor*/ - RTUSBInitTxDesc(pAd, pPsPollContext, /*MGMTPIPEIDX*/0, (usb_complete_t)RtmpUsbBulkOutPsPollComplete); + RTUSBInitTxDesc(pAd, pPsPollContext, EDCA_BMC_PIPE, (usb_complete_t)RtmpUsbBulkOutPsPollComplete); pUrb = pPsPollContext->pUrb; @@ -2013,7 +2022,7 @@ VOID DoBulkIn(IN RTMP_ADAPTER *pAd) VOID RTUSBBulkReceive(RTMP_ADAPTER *pAd) { PRX_CONTEXT pRxContext; - unsigned long IrqFlags; + unsigned long IrqFlags = 0; if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_HANDLE_RX) && !RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_POLL_IDLE)) @@ -2161,7 +2170,7 @@ VOID RTUSBKickBulkOut( else if ((RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME)) || (pAd->MgmtRing.TxSwFreeIdx < MGMT_RING_SIZE)) { - RTUSBBulkOutMLMEPacket(pAd, pAd->MgmtRing.TxDmaIdx); + RTUSBBulkOutMLMEPacket(pAd, (UCHAR)pAd->MgmtRing.TxDmaIdx); } #ifdef MT_MAC @@ -2169,7 +2178,7 @@ VOID RTUSBKickBulkOut( else if ((RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_BCN)) || (pAd->BcnRing.TxSwFreeIdx < BCN_RING_SIZE)) { - RTUSBBulkOutBCNPacket(pAd, pAd->BcnRing.TxDmaIdx); + RTUSBBulkOutBCNPacket(pAd, (UCHAR)pAd->BcnRing.TxDmaIdx); } #endif #ifdef USE_BMC diff --git a/common/rtusb_dev_id.c b/common/rtusb_dev_id.c index 2fee679..7e931b6 100755 --- a/common/rtusb_dev_id.c +++ b/common/rtusb_dev_id.c @@ -286,7 +286,7 @@ USB_DEVICE_ID rtusb_dev_id[] = { #endif /* MT7601U */ #ifdef MT7603 - {USB_DEVICE(0x0e8d,0x7603)}, + {USB_DEVICE(0x0E8D,0x7603)}, #endif #ifdef MT7636 {USB_DEVICE(0x0E8D,0x7606)}, diff --git a/common/scan.c b/common/scan.c index 9bfc835..3d9d049 100755 --- a/common/scan.c +++ b/common/scan.c @@ -94,18 +94,18 @@ static INT scan_ch_restore(RTMP_ADAPTER *pAd, UCHAR OpMode) if (INFRA_ON(pAd)) { bw = pAd->StaCfg.wdev.bw; - bbp_set_bw(pAd, bw); + bbp_set_bw(pAd, (UINT8)bw); } else if (RTMP_CFG80211_VIF_P2P_GO_ON(pAd) && (ch != p2p_wdev->channel) && (p2p_wdev->CentralChannel != 0)) { bw = p2p_wdev->bw; - bbp_set_bw(pAd, bw); + bbp_set_bw(pAd, (UINT8)bw); } else if (RTMP_CFG80211_VIF_P2P_CLI_ON(pAd) && (ch != p2p_wdev->channel) && (p2p_wdev->CentralChannel != 0)) { bw = p2p_wdev->bw; - bbp_set_bw(pAd, bw); + bbp_set_bw(pAd, (UINT8)bw); } /*If GO start, we need to change to GO Channel*/ if (INFRA_ON(pAd)) @@ -118,11 +118,12 @@ static INT scan_ch_restore(RTMP_ADAPTER *pAd, UCHAR OpMode) #endif /* defined(RT_CFG80211_SUPPORT) && defined(RT_CFG80211_P2P_CONCURRENT_DEVICE) */ ASSERT((ch != 0)); - AsicSwitchChannel(pAd, ch, FALSE); - AsicLockChannel(pAd, ch); + AsicSwitchChannel(pAd, (UCHAR)ch, FALSE); + AsicLockChannel(pAd, (UCHAR)ch); - printk("SYNC - End of SCAN, restore to %dMHz channel %d, Total BSS[%02d]\n", - bw, ch, pAd->ScanTab.BssNr); + DBGPRINT(RT_DEBUG_TRACE, + ("SYNC - End of SCAN, restore to %dMHz channel %d, Total BSS[%02d]\n", + bw, ch, pAd->ScanTab.BssNr)); @@ -269,6 +270,7 @@ static INT scan_active(RTMP_ADAPTER *pAd, UCHAR OpMode, UCHAR ScanType) #ifdef CONFIG_STA_SUPPORT USHORT Status; #endif /* CONFIG_STA_SUPPORT */ + UINT i; if (MlmeAllocateMemory(pAd, &frm_buf) != NDIS_STATUS_SUCCESS) { @@ -648,8 +650,8 @@ static INT scan_active(RTMP_ADAPTER *pAd, UCHAR OpMode, UCHAR ScanType) } #endif /* WFA_WFD_SUPPORT */ #endif /* P2P_SUPPORT */ - - MiniportMMRequest(pAd, 0, frm_buf, FrameLen); + for (i = 0; i < 3; i++) + MiniportMMRequest(pAd, 0, frm_buf, FrameLen); #ifdef CONFIG_STA_SUPPORT if (OpMode == OPMODE_STA) @@ -745,10 +747,13 @@ VOID ScanNextChannel(RTMP_ADAPTER *pAd, UCHAR OpMode) /* Since the Channel List is from Upper layer */ if (CFG80211DRV_OpsScanRunning(pAd) && !ScanPending) { +#ifndef CCN3_TV_SUPPORT if (RTMP_CFG80211_VIF_P2P_GO_ON(pAd)) { DBGPRINT(RT_DEBUG_OFF, ("%s():Scan Only Go Channel %d\n", __FUNCTION__, pAd->CommonCfg.Channel)); - while((pAd->ScanCtrl.Channel = CFG80211DRV_OpsScanGetNextChannel(pAd)) && pAd->CommonCfg.Channel != 0) + while ((pAd->ScanCtrl.Channel = + (UCHAR)CFG80211DRV_OpsScanGetNextChannel(pAd)) + && pAd->CommonCfg.Channel != 0) { if(pAd->ScanCtrl.Channel == pAd->CommonCfg.Channel) { @@ -758,8 +763,11 @@ VOID ScanNextChannel(RTMP_ADAPTER *pAd, UCHAR OpMode) } else { - pAd->ScanCtrl.Channel = CFG80211DRV_OpsScanGetNextChannel(pAd); +#endif /* ifndef CCN3_TV_SUPPORT */ + pAd->ScanCtrl.Channel = (UCHAR)CFG80211DRV_OpsScanGetNextChannel(pAd); +#ifndef CCN3_TV_SUPPORT } +#endif /* ifndef CCN3_TV_SUPPORT */ } #endif /* RT_CFG80211_SUPPORT */ #endif /* CONFIG_STA_SUPPORT */ @@ -924,7 +932,8 @@ VOID ScanNextChannel(RTMP_ADAPTER *pAd, UCHAR OpMode) int i; for (i = 0; i < pAd->MlmeAux.params.num_ssids; ++i) { /* record desired BSS parameters */ - pAd->ScanCtrl.SsidLen = pAd->MlmeAux.params.ssids[i].ssid_len; + pAd->ScanCtrl.SsidLen = + (UCHAR)pAd->MlmeAux.params.ssids[i].ssid_len; NdisMoveMemory(pAd->ScanCtrl.Ssid, pAd->MlmeAux.params.ssids[i].ssid, pAd->MlmeAux.params.ssids[i].ssid_len); if (scan_active(pAd, OpMode, ScanType) == FALSE) return; diff --git a/common/spectrum.c b/common/spectrum.c index 98b4917..7a4c589 100755 --- a/common/spectrum.c +++ b/common/spectrum.c @@ -279,7 +279,7 @@ CHAR RTMP_GetTxPwr(RTMP_ADAPTER *pAd, HTTRANSMIT_SETTING HTTxMode) case MODE_CCK: case MODE_OFDM: Value = TxPwr[1]; - TxPwrRef = (Value & 0x00000f00) >> 8; + TxPwrRef = (UINT8)((Value & 0x00000f00) >> 8); break; @@ -289,23 +289,23 @@ CHAR RTMP_GetTxPwr(RTMP_ADAPTER *pAd, HTTRANSMIT_SETTING HTTxMode) if (pAd->CommonCfg.TxStream == 1) { Value = TxPwr[2]; - TxPwrRef = (Value & 0x00000f00) >> 8; + TxPwrRef = (UINT8)((Value & 0x00000f00) >> 8); } else if (pAd->CommonCfg.TxStream == 2) { Value = TxPwr[3]; - TxPwrRef = (Value & 0x00000f00) >> 8; + TxPwrRef = (UINT8)((Value & 0x00000f00) >> 8); } break; #endif /* DOT11_N_SUPPORT */ } - PhyMode = + PhyMode = (UINT8)( #ifdef DOT11_N_SUPPORT (HTTxMode.field.MODE == MODE_HTGREENFIELD) ? MODE_HTMIX : #endif /* DOT11_N_SUPPORT */ - HTTxMode.field.MODE; + HTTxMode.field.MODE); for (Idx = 0; Idx < MAX_TXPWR_TAB_SIZE; Idx++) { @@ -1891,7 +1891,7 @@ static VOID PeerChSwAnnAction(RTMP_ADAPTER *pAd, MLME_QUEUE_ELEM *Elem) if (pAd->OpMode == OPMODE_STA) { Bssidx = BssTableSearch(&pAd->ScanTab, pFr->Hdr.Addr3, pAd->CommonCfg.Channel); - if (Bssidx == BSS_NOT_FOUND) + if (Bssidx == BSS_NOT_FOUND || Bssidx >= ARRAY_SIZE(pAd->ScanTab.BssEntry)) { DBGPRINT(RT_DEBUG_TRACE, ("PeerChSwAnnAction - Bssidx is not found\n")); return; @@ -2231,7 +2231,7 @@ INT Set_MeasureReq_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) break; case 2: /* Measurement Request Type.*/ - MeasureReqType = simple_strtol(thisChar, 0, 16); + MeasureReqType = (UINT8)simple_strtol(thisChar, 0, 16); if (MeasureReqType > 3) { DBGPRINT(RT_DEBUG_ERROR, ("%s: unknow MeasureReqType(%d)\n", __FUNCTION__, MeasureReqType)); @@ -2369,7 +2369,7 @@ typedef struct __PWR_CONSTRAIN_CFG { if (DaltaPwr < PwrConstrainTab[Idx].Attenuation) { - pAd->CommonCfg.PwrConstraint = Value; + pAd->CommonCfg.PwrConstraint = (UINT8)Value; pAd->CommonCfg.TxPowerPercentage = PwrConstrainTab[Idx].TxPowerPercentage; diff --git a/common/sys_log.c b/common/sys_log.c index bd5e6df..c6cfb34 100755 --- a/common/sys_log.c +++ b/common/sys_log.c @@ -251,7 +251,7 @@ VOID RtmpDrvSendWirelessEvent( pBufPtr += sprintf(pBufPtr, "%s", "unknown event"); pBufPtr[pBufPtr - pBuf] = '\0'; - BufLen = pBufPtr - pBuf; + BufLen = (USHORT)(pBufPtr - pBuf); RtmpOSWrielessEventSend(pAd->net_dev, RT_WLAN_EVENT_CUSTOM, Event_flag, NULL, (PUCHAR)pBuf, BufLen); /*DBGPRINT(RT_DEBUG_TRACE, ("%s : %s\n", __FUNCTION__, pBuf)); */ diff --git a/common/txpower.c b/common/txpower.c index 2aa1c01..491e35e 100755 --- a/common/txpower.c +++ b/common/txpower.c @@ -749,8 +749,8 @@ VOID AsicGetAutoAgcOffsetForExternalTxAlc( } #endif /* RT3883 */ - *pTxAgcCompensate = -(TxAgcStep * (idx-1)); - DeltaPwr += (*pTxAgcCompensate); + *pTxAgcCompensate = (CHAR)(-(TxAgcStep * (idx-1))); + DeltaPwr += (CHAR)(*pTxAgcCompensate); DBGPRINT(RT_DEBUG_TRACE, ("-- Tx Power, BBP R49=%x, TssiRef=%x, TxAgcStep=%x, step = -%d\n", BbpR49.byte, TssiRef, TxAgcStep, idx-1)); } @@ -774,7 +774,7 @@ VOID AsicGetAutoAgcOffsetForExternalTxAlc( #endif /* RT3883 */ /* The index is the step we should increase, idx = 0 means there is nothing to compensate */ - *pTxAgcCompensate = TxAgcStep * (idx-1); + *pTxAgcCompensate = (CHAR)(TxAgcStep * (idx-1)); DeltaPwr += (*pTxAgcCompensate); DBGPRINT(RT_DEBUG_TRACE, ("++ Tx Power, BBP R49=%x, TssiRef=%x, TxAgcStep=%x, step = +%d\n", BbpR49.byte, TssiRef, TxAgcStep, idx-1)); @@ -1660,70 +1660,70 @@ VOID RTMPReadTxPwrPerRate(RTMP_ADAPTER *pAd) if (bApwrdeltaMinus == FALSE) { - t1 = value_1+(Apwrdelta); + t1 = (UCHAR)(value_1+(Apwrdelta)); if (t1 > 0xf) t1 = 0xf; - t2 = value_2+(Apwrdelta); + t2 = (UCHAR)(value_2+(Apwrdelta)); if (t2 > 0xf) t2 = 0xf; - t3 = value_3+(Apwrdelta); + t3 = (UCHAR)(value_3+(Apwrdelta)); if (t3 > 0xf) t3 = 0xf; - t4 = value_4+(Apwrdelta); + t4 = (UCHAR)(value_4+(Apwrdelta)); if (t4 > 0xf) t4 = 0xf; } else { if (value_1 > Apwrdelta) - t1 = value_1-(Apwrdelta); + t1 = (UCHAR)(value_1-(Apwrdelta)); else t1 = 0; if (value_2 > Apwrdelta) - t2 = value_2-(Apwrdelta); + t2 = (UCHAR)(value_2-(Apwrdelta)); else t2 = 0; if (value_3 > Apwrdelta) - t3 = value_3-(Apwrdelta); + t3 = (UCHAR)(value_3-(Apwrdelta)); else t3 = 0; if (value_4 > Apwrdelta) - t4 = value_4-(Apwrdelta); + t4 = (UCHAR)(value_4-(Apwrdelta)); else t4 = 0; } Adata = t1 + (t2<<4) + (t3<<8) + (t4<<12); if (bGpwrdeltaMinus == FALSE) { - t1 = value_1+(Gpwrdelta); + t1 = (UCHAR)(value_1+(Gpwrdelta)); if (t1 > 0xf) t1 = 0xf; - t2 = value_2+(Gpwrdelta); + t2 = (UCHAR)(value_2+(Gpwrdelta)); if (t2 > 0xf) t2 = 0xf; - t3 = value_3+(Gpwrdelta); + t3 = (UCHAR)(value_3+(Gpwrdelta)); if (t3 > 0xf) t3 = 0xf; - t4 = value_4+(Gpwrdelta); + t4 = (UCHAR)(value_4+(Gpwrdelta)); if (t4 > 0xf) t4 = 0xf; } else { if (value_1 > Gpwrdelta) - t1 = value_1-(Gpwrdelta); + t1 = (UCHAR)(value_1-(Gpwrdelta)); else t1 = 0; if (value_2 > Gpwrdelta) - t2 = value_2-(Gpwrdelta); + t2 = (UCHAR)(value_2-(Gpwrdelta)); else t2 = 0; if (value_3 > Gpwrdelta) - t3 = value_3-(Gpwrdelta); + t3 = (UCHAR)(value_3-(Gpwrdelta)); else t3 = 0; if (value_4 > Gpwrdelta) - t4 = value_4-(Gpwrdelta); + t4 = (UCHAR)(value_4-(Gpwrdelta)); else t4 = 0; } @@ -1739,70 +1739,70 @@ VOID RTMPReadTxPwrPerRate(RTMP_ADAPTER *pAd) if (bApwrdeltaMinus == FALSE) { - t1 = value_1+(Apwrdelta); + t1 = (UCHAR)(value_1+(Apwrdelta)); if (t1 > 0xf) t1 = 0xf; - t2 = value_2+(Apwrdelta); + t2 = (UCHAR)(value_2+(Apwrdelta)); if (t2 > 0xf) t2 = 0xf; - t3 = value_3+(Apwrdelta); + t3 = (UCHAR)(value_3+(Apwrdelta)); if (t3 > 0xf) t3 = 0xf; - t4 = value_4+(Apwrdelta); + t4 = (UCHAR)(value_4+(Apwrdelta)); if (t4 > 0xf) t4 = 0xf; } else { if (value_1 > Apwrdelta) - t1 = value_1-(Apwrdelta); + t1 = (UCHAR)(value_1-(Apwrdelta)); else t1 = 0; if (value_2 > Apwrdelta) - t2 = value_2-(Apwrdelta); + t2 = (UCHAR)(value_2-(Apwrdelta)); else t2 = 0; if (value_3 > Apwrdelta) - t3 = value_3-(Apwrdelta); + t3 = (UCHAR)(value_3-(Apwrdelta)); else t3 = 0; if (value_4 > Apwrdelta) - t4 = value_4-(Apwrdelta); + t4 = (UCHAR)(value_4-(Apwrdelta)); else t4 = 0; } Adata |= ((t1<<16) + (t2<<20) + (t3<<24) + (t4<<28)); if (bGpwrdeltaMinus == FALSE) { - t1 = value_1+(Gpwrdelta); + t1 = (UCHAR)(value_1+(Gpwrdelta)); if (t1 > 0xf) t1 = 0xf; - t2 = value_2+(Gpwrdelta); + t2 = (UCHAR)(value_2+(Gpwrdelta)); if (t2 > 0xf) t2 = 0xf; - t3 = value_3+(Gpwrdelta); + t3 = (UCHAR)(value_3+(Gpwrdelta)); if (t3 > 0xf) t3 = 0xf; - t4 = value_4+(Gpwrdelta); + t4 = (UCHAR)(value_4+(Gpwrdelta)); if (t4 > 0xf) t4 = 0xf; } else { if (value_1 > Gpwrdelta) - t1 = value_1-(Gpwrdelta); + t1 = (UCHAR)(value_1-(Gpwrdelta)); else t1 = 0; if (value_2 > Gpwrdelta) - t2 = value_2-(Gpwrdelta); + t2 = (UCHAR)(value_2-(Gpwrdelta)); else t2 = 0; if (value_3 > Gpwrdelta) - t3 = value_3-(Gpwrdelta); + t3 = (UCHAR)(value_3-(Gpwrdelta)); else t3 = 0; if (value_4 > Gpwrdelta) - t4 = value_4-(Gpwrdelta); + t4 = (UCHAR)(value_4-(Gpwrdelta)); else t4 = 0; } @@ -2087,18 +2087,21 @@ VOID RTMPReadChannelPwr(RTMP_ADAPTER *pAd) { if (NICConfig0.field.TxPath == 3) { - RT28xx_EEPROM_READ16(pAd, (EEPROM_EXT_TX0_OVER_2DOT4G + (i * 2)), Power.word); - RT28xx_EEPROM_READ16(pAd, (EEPROM_EXT_TX1_OVER_2DOT4G + (i * 2)), Power2.word); - RT28xx_EEPROM_READ16(pAd, (EEPROM_EXT_TX2_OVER_2DOT4G + (i * 2)), Power3.word); + RT28xx_EEPROM_READ16(pAd, + (USHORT)(EEPROM_EXT_TX0_OVER_2DOT4G + (i * 2)), Power.word); + RT28xx_EEPROM_READ16(pAd, + (USHORT)(EEPROM_EXT_TX1_OVER_2DOT4G + (i * 2)), Power2.word); + RT28xx_EEPROM_READ16(pAd, + (USHORT)(EEPROM_EXT_TX2_OVER_2DOT4G + (i * 2)), Power3.word); } else { - RT28xx_EEPROM_READ16(pAd, (EEPROM_G_TX_PWR_OFFSET + i * 2), Power.word); - RT28xx_EEPROM_READ16(pAd, (EEPROM_G_TX2_PWR_OFFSET + i * 2), Power2.word); + RT28xx_EEPROM_READ16(pAd, (USHORT)(EEPROM_G_TX_PWR_OFFSET + i * 2), Power.word); + RT28xx_EEPROM_READ16(pAd, (USHORT)(EEPROM_G_TX2_PWR_OFFSET + i * 2), Power2.word); } - pAd->TxPower[i * 2].Channel = i * 2 + 1; - pAd->TxPower[i * 2 + 1].Channel = i * 2 + 2; + pAd->TxPower[i * 2].Channel = (UCHAR)(i * 2 + 1); + pAd->TxPower[i * 2 + 1].Channel = (UCHAR)(i * 2 + 2); /* Tx0 power control*/ @@ -2274,10 +2277,12 @@ VOID RTMPReadChannelPwr(RTMP_ADAPTER *pAd) else /* Tx power control over RF R12 and RF R13*/ #endif /* RT3593 */ { /* Default routine. RT3070 and RT3370 run here. */ - RT28xx_EEPROM_READ16(pAd, EEPROM_G_TX_PWR_OFFSET + i * 2, Power.word); - RT28xx_EEPROM_READ16(pAd, EEPROM_G_TX2_PWR_OFFSET + i * 2, Power2.word); - pAd->TxPower[i * 2].Channel = i * 2 + 1; - pAd->TxPower[i * 2 + 1].Channel = i * 2 + 2; + RT28xx_EEPROM_READ16(pAd, + (USHORT)(EEPROM_G_TX_PWR_OFFSET + i * 2), Power.word); + RT28xx_EEPROM_READ16(pAd, + (USHORT)(EEPROM_G_TX2_PWR_OFFSET + i * 2), Power2.word); + pAd->TxPower[i * 2].Channel = (UCHAR)(i * 2 + 1); + pAd->TxPower[i * 2 + 1].Channel = (UCHAR)(i * 2 + 2); pAd->TxPower[i * 2].Power = Power.field.Byte0; if(!IS_RT3390(pAd)) // 3370 has different Tx power range @@ -2313,15 +2318,15 @@ VOID RTMPReadChannelPwr(RTMP_ADAPTER *pAd) choffset = 14; for (i = 0; i < 4; i++) { - pAd->TxPower[3 * i + choffset + 0].Channel = 36 + i * 8 + 0; + pAd->TxPower[3 * i + choffset + 0].Channel = (UCHAR)(36 + i * 8 + 0); pAd->TxPower[3 * i + choffset + 0].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; - pAd->TxPower[3 * i + choffset + 1].Channel = 36 + i * 8 + 2; + pAd->TxPower[3 * i + choffset + 1].Channel = (UCHAR)(36 + i * 8 + 2); pAd->TxPower[3 * i + choffset + 1].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 1].Power2 = DEFAULT_RF_TX_POWER; - pAd->TxPower[3 * i + choffset + 2].Channel = 36 + i * 8 + 4; + pAd->TxPower[3 * i + choffset + 2].Channel = (UCHAR)(36 + i * 8 + 4); pAd->TxPower[3 * i + choffset + 2].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 2].Power2 = DEFAULT_RF_TX_POWER; } @@ -2331,8 +2336,10 @@ VOID RTMPReadChannelPwr(RTMP_ADAPTER *pAd) { RT28xx_EEPROM_READ16(pAd, EEPROM_A_TX_PWR_OFFSET + i * 2, Power.word); RT28xx_EEPROM_READ16(pAd, EEPROM_A_TX2_PWR_OFFSET + i * 2, Power2.word); - printk("Power = %x\n", Power.word); - printk("Power2 = %x\n", Power2.word); + DBGPRINT(RT_DEBUG_TRACE, + ("Power = %x\n", Power.word)); + DBGPRINT(RT_DEBUG_TRACE, + ("Power2 = %x\n", Power2.word)); if ((Power.field.Byte0 < 0x2B) && (Power.field.Byte0 >= 0)) pAd->TxPower[i * 2 + choffset + 0].Power = Power.field.Byte0; @@ -2352,15 +2359,15 @@ VOID RTMPReadChannelPwr(RTMP_ADAPTER *pAd) choffset = 14 + 12; for (i = 0; i < 5; i++) { - pAd->TxPower[3 * i + choffset + 0].Channel = 100 + i * 8 + 0; + pAd->TxPower[3 * i + choffset + 0].Channel = (UCHAR)(100 + i * 8 + 0); pAd->TxPower[3 * i + choffset + 0].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; - pAd->TxPower[3 * i + choffset + 1].Channel = 100 + i * 8 + 2; + pAd->TxPower[3 * i + choffset + 1].Channel = (UCHAR)(100 + i * 8 + 2); pAd->TxPower[3 * i + choffset + 1].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 1].Power2 = DEFAULT_RF_TX_POWER; - pAd->TxPower[3 * i + choffset + 2].Channel = 100 + i * 8 + 4; + pAd->TxPower[3 * i + choffset + 2].Channel = (UCHAR)(100 + i * 8 + 4); pAd->TxPower[3 * i + choffset + 2].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 2].Power2 = DEFAULT_RF_TX_POWER; } @@ -2394,15 +2401,15 @@ VOID RTMPReadChannelPwr(RTMP_ADAPTER *pAd) /*for (i = 0; i < 2; i++)*/ for (i = 0; i < 3; i++) { - pAd->TxPower[3 * i + choffset + 0].Channel = 149 + i * 8 + 0; + pAd->TxPower[3 * i + choffset + 0].Channel = (UCHAR)(149 + i * 8 + 0); pAd->TxPower[3 * i + choffset + 0].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; - pAd->TxPower[3 * i + choffset + 1].Channel = 149 + i * 8 + 2; + pAd->TxPower[3 * i + choffset + 1].Channel = (UCHAR)(149 + i * 8 + 2); pAd->TxPower[3 * i + choffset + 1].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 1].Power2 = DEFAULT_RF_TX_POWER; - pAd->TxPower[3 * i + choffset + 2].Channel = 149 + i * 8 + 4; + pAd->TxPower[3 * i + choffset + 2].Channel = (UCHAR)(149 + i * 8 + 4); pAd->TxPower[3 * i + choffset + 2].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 2].Power2 = DEFAULT_RF_TX_POWER; } @@ -2460,17 +2467,17 @@ VOID RTMPReadChannelPwr(RTMP_ADAPTER *pAd) choffset = 14; for (i = 0; i < 4; i++) { - pAd->TxPower[3 * i + choffset + 0].Channel = 36 + i * 8 + 0; + pAd->TxPower[3 * i + choffset + 0].Channel = (UCHAR)(36 + i * 8 + 0); pAd->TxPower[3 * i + choffset + 0].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 0].Power3 = DEFAULT_RF_TX_POWER; - pAd->TxPower[3 * i + choffset + 1].Channel = 36 + i * 8 + 2; + pAd->TxPower[3 * i + choffset + 1].Channel = (UCHAR)(36 + i * 8 + 2); pAd->TxPower[3 * i + choffset + 1].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 1].Power2 = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 1].Power3 = DEFAULT_RF_TX_POWER; - pAd->TxPower[3 * i + choffset + 2].Channel = 36 + i * 8 + 4; + pAd->TxPower[3 * i + choffset + 2].Channel = (UCHAR)(36 + i * 8 + 4); pAd->TxPower[3 * i + choffset + 2].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 2].Power2 = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 2].Power3 = DEFAULT_RF_TX_POWER; @@ -2549,17 +2556,17 @@ VOID RTMPReadChannelPwr(RTMP_ADAPTER *pAd) choffset = 14 + 12; for (i = 0; i < 5; i++) { - pAd->TxPower[3 * i + choffset + 0].Channel = 100 + i * 8 + 0; + pAd->TxPower[3 * i + choffset + 0].Channel = (UCHAR)(100 + i * 8 + 0); pAd->TxPower[3 * i + choffset + 0].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 0].Power3 = DEFAULT_RF_TX_POWER; - pAd->TxPower[3 * i + choffset + 1].Channel = 100 + i * 8 + 2; + pAd->TxPower[3 * i + choffset + 1].Channel = (UCHAR)(100 + i * 8 + 2); pAd->TxPower[3 * i + choffset + 1].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 1].Power2 = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 1].Power3 = DEFAULT_RF_TX_POWER; - pAd->TxPower[3 * i + choffset + 2].Channel = 100 + i * 8 + 4; + pAd->TxPower[3 * i + choffset + 2].Channel = (UCHAR)(100 + i * 8 + 4); pAd->TxPower[3 * i + choffset + 2].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 2].Power2 = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 2].Power3 = DEFAULT_RF_TX_POWER; @@ -2573,9 +2580,12 @@ VOID RTMPReadChannelPwr(RTMP_ADAPTER *pAd) // 2.2 Fill up power for (i = 0; i < 8; i++) { - RT28xx_EEPROM_READ16(pAd, (EEPROM_EXT_TX0_OVER_5G + (choffset - 14) + i * 2), Power.word); - RT28xx_EEPROM_READ16(pAd, (EEPROM_EXT_TX1_OVER_5G + (choffset - 14) + i * 2), Power2.word); - RT28xx_EEPROM_READ16(pAd, (EEPROM_EXT_TX2_OVER_5G + (choffset - 14) + i * 2), Power3.word); + RT28xx_EEPROM_READ16(pAd, + (USHORT)(EEPROM_EXT_TX0_OVER_5G + (choffset - 14) + i * 2), Power.word); + RT28xx_EEPROM_READ16(pAd, + (USHORT)(EEPROM_EXT_TX1_OVER_5G + (choffset - 14) + i * 2), Power2.word); + RT28xx_EEPROM_READ16(pAd, + (USHORT)(EEPROM_EXT_TX2_OVER_5G + (choffset - 14) + i * 2), Power3.word); Tx0ALC = GET_TX_ALC_BIT_MASK & Power.field.Byte0; if (Tx0ALC > 31) @@ -2643,17 +2653,17 @@ VOID RTMPReadChannelPwr(RTMP_ADAPTER *pAd) choffset = 14 + 12 + 16; for (i = 0; i < 3; i++) { - pAd->TxPower[3 * i + choffset + 0].Channel = 149 + i * 8 + 0; + pAd->TxPower[3 * i + choffset + 0].Channel = (UCHAR)(149 + i * 8 + 0); pAd->TxPower[3 * i + choffset + 0].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 0].Power3 = DEFAULT_RF_TX_POWER; - pAd->TxPower[3 * i + choffset + 1].Channel = 149 + i * 8 + 2; + pAd->TxPower[3 * i + choffset + 1].Channel = (UCHAR)(149 + i * 8 + 2); pAd->TxPower[3 * i + choffset + 1].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 1].Power2 = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 1].Power3 = DEFAULT_RF_TX_POWER; - pAd->TxPower[3 * i + choffset + 2].Channel = 149 + i * 8 + 4; + pAd->TxPower[3 * i + choffset + 2].Channel = (UCHAR)(149 + i * 8 + 4); pAd->TxPower[3 * i + choffset + 2].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 2].Power2 = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 2].Power3 = DEFAULT_RF_TX_POWER; @@ -2748,15 +2758,15 @@ VOID RTMPReadChannelPwr(RTMP_ADAPTER *pAd) choffset = 14; for (i = 0; i < 4; i++) { - pAd->TxPower[3 * i + choffset + 0].Channel = 36 + i * 8 + 0; + pAd->TxPower[3 * i + choffset + 0].Channel = (UCHAR)(36 + i * 8 + 0); pAd->TxPower[3 * i + choffset + 0].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; - pAd->TxPower[3 * i + choffset + 1].Channel = 36 + i * 8 + 2; + pAd->TxPower[3 * i + choffset + 1].Channel = (UCHAR)(36 + i * 8 + 2); pAd->TxPower[3 * i + choffset + 1].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 1].Power2 = DEFAULT_RF_TX_POWER; - pAd->TxPower[3 * i + choffset + 2].Channel = 36 + i * 8 + 4; + pAd->TxPower[3 * i + choffset + 2].Channel = (UCHAR)(36 + i * 8 + 4); pAd->TxPower[3 * i + choffset + 2].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 2].Power2 = DEFAULT_RF_TX_POWER; } @@ -2764,8 +2774,10 @@ VOID RTMPReadChannelPwr(RTMP_ADAPTER *pAd) /* 1.2 Fill up power*/ for (i = 0; i < 6; i++) { - RT28xx_EEPROM_READ16(pAd, EEPROM_A_TX_PWR_OFFSET + i * 2, Power.word); - RT28xx_EEPROM_READ16(pAd, EEPROM_A_TX2_PWR_OFFSET + i * 2, Power2.word); + RT28xx_EEPROM_READ16(pAd, + (USHORT)(EEPROM_A_TX_PWR_OFFSET + i * 2), Power.word); + RT28xx_EEPROM_READ16(pAd, + (USHORT)(EEPROM_A_TX2_PWR_OFFSET + i * 2), Power2.word); if ((Power.field.Byte0 < 16) && (Power.field.Byte0 >= -7)) pAd->TxPower[i * 2 + choffset + 0].Power = Power.field.Byte0; @@ -2785,15 +2797,15 @@ VOID RTMPReadChannelPwr(RTMP_ADAPTER *pAd) choffset = 14 + 12; for (i = 0; i < 5; i++) { - pAd->TxPower[3 * i + choffset + 0].Channel = 100 + i * 8 + 0; + pAd->TxPower[3 * i + choffset + 0].Channel = (UCHAR)(100 + i * 8 + 0); pAd->TxPower[3 * i + choffset + 0].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; - pAd->TxPower[3 * i + choffset + 1].Channel = 100 + i * 8 + 2; + pAd->TxPower[3 * i + choffset + 1].Channel = (UCHAR)(100 + i * 8 + 2); pAd->TxPower[3 * i + choffset + 1].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 1].Power2 = DEFAULT_RF_TX_POWER; - pAd->TxPower[3 * i + choffset + 2].Channel = 100 + i * 8 + 4; + pAd->TxPower[3 * i + choffset + 2].Channel = (UCHAR)(100 + i * 8 + 4); pAd->TxPower[3 * i + choffset + 2].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 2].Power2 = DEFAULT_RF_TX_POWER; } @@ -2804,8 +2816,10 @@ VOID RTMPReadChannelPwr(RTMP_ADAPTER *pAd) /* 2.2 Fill up power*/ for (i = 0; i < 8; i++) { - RT28xx_EEPROM_READ16(pAd, EEPROM_A_TX_PWR_OFFSET + (choffset - 14) + i * 2, Power.word); - RT28xx_EEPROM_READ16(pAd, EEPROM_A_TX2_PWR_OFFSET + (choffset - 14) + i * 2, Power2.word); + RT28xx_EEPROM_READ16(pAd, + (USHORT)(EEPROM_A_TX_PWR_OFFSET + (choffset - 14) + i * 2), Power.word); + RT28xx_EEPROM_READ16(pAd, + (USHORT)(EEPROM_A_TX2_PWR_OFFSET + (choffset - 14) + i * 2), Power2.word); if ((Power.field.Byte0 < 16) && (Power.field.Byte0 >= -7)) pAd->TxPower[i * 2 + choffset + 0].Power = Power.field.Byte0; @@ -2826,15 +2840,15 @@ VOID RTMPReadChannelPwr(RTMP_ADAPTER *pAd) /*for (i = 0; i < 2; i++)*/ for (i = 0; i < 3; i++) { - pAd->TxPower[3 * i + choffset + 0].Channel = 149 + i * 8 + 0; + pAd->TxPower[3 * i + choffset + 0].Channel = (UCHAR)(149 + i * 8 + 0); pAd->TxPower[3 * i + choffset + 0].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; - pAd->TxPower[3 * i + choffset + 1].Channel = 149 + i * 8 + 2; + pAd->TxPower[3 * i + choffset + 1].Channel = (UCHAR)(149 + i * 8 + 2); pAd->TxPower[3 * i + choffset + 1].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 1].Power2 = DEFAULT_RF_TX_POWER; - pAd->TxPower[3 * i + choffset + 2].Channel = 149 + i * 8 + 4; + pAd->TxPower[3 * i + choffset + 2].Channel = (UCHAR)(149 + i * 8 + 4); pAd->TxPower[3 * i + choffset + 2].Power = DEFAULT_RF_TX_POWER; pAd->TxPower[3 * i + choffset + 2].Power2 = DEFAULT_RF_TX_POWER; } @@ -2855,8 +2869,10 @@ VOID RTMPReadChannelPwr(RTMP_ADAPTER *pAd) /*for (i = 0; i < 4; i++)*/ for (i = 0; i < 6; i++) { - RT28xx_EEPROM_READ16(pAd, EEPROM_A_TX_PWR_OFFSET + (choffset - 14) + i * 2, Power.word); - RT28xx_EEPROM_READ16(pAd, EEPROM_A_TX2_PWR_OFFSET + (choffset - 14) + i * 2, Power2.word); + RT28xx_EEPROM_READ16(pAd, + (USHORT)(EEPROM_A_TX_PWR_OFFSET + (choffset - 14) + i * 2), Power.word); + RT28xx_EEPROM_READ16(pAd, + (USHORT)(EEPROM_A_TX2_PWR_OFFSET + (choffset - 14) + i * 2), Power2.word); if ((Power.field.Byte0 < 16) && (Power.field.Byte0 >= -7)) pAd->TxPower[i * 2 + choffset + 0].Power = Power.field.Byte0; diff --git a/common/uapsd.c b/common/uapsd.c index 2089926..f3125cc 100755 --- a/common/uapsd.c +++ b/common/uapsd.c @@ -93,7 +93,8 @@ UINT32 gUAPSD_TimingSumTxqueue2Air; #ifdef LINUX #define UAPSD_SEM_LOCK(__UAPSDEOSPLock, __flags2) \ { \ - if (irqs_disabled()) \ + int i = irqs_disabled(); \ + if (i) \ { \ RTMP_INT_LOCK((__UAPSDEOSPLock), __flags2); \ } \ @@ -105,7 +106,8 @@ UINT32 gUAPSD_TimingSumTxqueue2Air; #define UAPSD_SEM_UNLOCK(__UAPSDEOSPLock, __flags2) \ { \ - if (irqs_disabled()) \ + int i = irqs_disabled(); \ + if (i) \ { \ RTMP_INT_UNLOCK((__UAPSDEOSPLock), __flags2); \ } \ @@ -440,7 +442,8 @@ VOID UAPSD_AllPacketDeliver(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY *pEntry) QueId = QID_AC_BE; } - if (rtmp_enq_req(pAd, QUEUE_ENTRY_TO_PACKET(pEntry->pUAPSDEOSPFrame), QueId, tr_entry, FALSE, NULL) == FALSE) + if (rtmp_enq_req(pAd, QUEUE_ENTRY_TO_PACKET(pEntry->pUAPSDEOSPFrame), + (UCHAR)QueId, tr_entry, FALSE, NULL) == FALSE) RELEASE_NDIS_PACKET(pAd, QUEUE_ENTRY_TO_PACKET(pEntry->pUAPSDEOSPFrame), NDIS_STATUS_FAILURE); pEntry->pUAPSDEOSPFrame = NULL; @@ -457,7 +460,8 @@ VOID UAPSD_AllPacketDeliver(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY *pEntry) { pQueEntry = RemoveHeadQueue(pQueApsd); - if (rtmp_enq_req(pAd, QUEUE_ENTRY_TO_PACKET(pQueEntry), QueId, tr_entry, FALSE, NULL) == FALSE) + if (rtmp_enq_req(pAd, QUEUE_ENTRY_TO_PACKET(pQueEntry), + (UCHAR)QueId, tr_entry, FALSE, NULL) == FALSE) RELEASE_NDIS_PACKET(pAd, QUEUE_ENTRY_TO_PACKET(pQueEntry), NDIS_STATUS_FAILURE); } } @@ -2021,7 +2025,7 @@ BOOLEAN UAPSD_PsPollHandle(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY *pEntry) RTMP_SET_PACKET_TXTYPE(pQuedPkt, TX_LEGACY_FRAME); /* set U-APSD flag & its software queue ID */ - RTMP_SET_PACKET_UAPSD(pQuedPkt, TRUE, QueId); + RTMP_SET_PACKET_UAPSD(pQuedPkt, TRUE, (CHAR)QueId); } } @@ -2044,7 +2048,7 @@ BOOLEAN UAPSD_PsPollHandle(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY *pEntry) RTMP_SET_PACKET_MOREDATA(pQuedPkt, FALSE); } - if (rtmp_enq_req(pAd, pQuedPkt, QueId, tr_entry, TRUE, NULL) == FALSE) + if (rtmp_enq_req(pAd, pQuedPkt, (UCHAR)QueId, tr_entry, TRUE, NULL) == FALSE) RELEASE_NDIS_PACKET(pAd, pQuedPkt, NDIS_STATUS_FAILURE); } @@ -2433,7 +2437,8 @@ VOID UAPSD_TriggerFrameHandle(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY *pEntry, UCHAR #if 0 InsertTailQueueAc(pAd, pEntry, pLastAcSwQue, pQuedPkt); #else - if (rtmp_enq_req(pAd, pQuedPkt, QueId, tr_entry, TRUE, NULL) == FALSE) + if (rtmp_enq_req(pAd, pQuedPkt, + (UCHAR)QueId, tr_entry, TRUE, NULL) == FALSE) { RELEASE_NDIS_PACKET(pAd, pQuedPkt, NDIS_STATUS_FAILURE); TxPktNum --; @@ -2460,7 +2465,7 @@ VOID UAPSD_TriggerFrameHandle(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY *pEntry, UCHAR RTMP_SET_PACKET_TXTYPE(pQuedPkt, TX_LEGACY_FRAME); /* set U-APSD flag & its software queue ID */ - RTMP_SET_PACKET_UAPSD(pQuedPkt, TRUE, QueId); + RTMP_SET_PACKET_UAPSD(pQuedPkt, TRUE, (CHAR)QueId); } #if 0 /* backup its software queue pointer */ @@ -2572,7 +2577,8 @@ VOID UAPSD_TriggerFrameHandle(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY *pEntry, UCHAR //AcQueId = WMM_UP2AC_MAP[UpOfFrame]; AcQueId = RTMP_GET_PACKET_UAPSD_QUE_ID(pQuedPkt); - if (rtmp_enq_req(pAd, pQuedPkt, AcQueId, tr_entry, FALSE, NULL) == FALSE) + if (rtmp_enq_req(pAd, pQuedPkt, + (UCHAR)AcQueId, tr_entry, FALSE, NULL) == FALSE) { RELEASE_NDIS_PACKET(pAd, pQuedPkt, NDIS_STATUS_FAILURE); pEntry->bAPSDFlagEOSPOK = 0; @@ -2611,7 +2617,7 @@ VOID UAPSD_TriggerFrameHandle(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY *pEntry, UCHAR RTMP_SET_PACKET_TXTYPE(pQuedPkt, TX_LEGACY_FRAME); pEntry->pUAPSDEOSPFrame = (PQUEUE_ENTRY)pQuedPkt; - pEntry->UAPSDTxNum = TxPktNum-1; /* skip the EOSP frame */ + pEntry->UAPSDTxNum = (USHORT)(TxPktNum-1); /* skip the EOSP frame */ } #ifdef UAPSD_DEBUG @@ -2697,7 +2703,8 @@ VOID UAPSD_TriggerFrameHandle(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY *pEntry, UCHAR us_of_frame is not used. */ RtmpEnqueueNullFrame(pAd, pEntry->Addr, pEntry->CurrTxRate, - Aid, pEntry->func_tb_idx, TRUE, TRUE, UpOfFrame); + (UCHAR)Aid, pEntry->func_tb_idx, + TRUE, TRUE, UpOfFrame); #ifdef UAPSD_DEBUG DBGPRINT(RT_DEBUG_TRACE, ("uapsd> end a SP by a QoS Null frame!\n")); @@ -2771,6 +2778,9 @@ VOID UAPSD_TagFrame( { /* mark the latest USB tx buffer offset for the priority */ AcQueId = RTMP_GET_PACKET_UAPSD_QUE_ID(pPkt); + if (AcQueId >= ARRAY_SIZE(pEntry->UAPSDTagOffset)) + DBGPRINT(RT_DEBUG_TRACE, ("AcQueID exceed WMM_NUM_OF_AC\n")); + else pEntry->UAPSDTagOffset[AcQueId] = PktOffset; #ifdef UAPSD_DEBUG @@ -2806,11 +2816,9 @@ VOID UAPSD_UnTagFrame( { MAC_TABLE_ENTRY *pEntry; UINT32 IdEntry; -#if 0 UINT32 TxPktTagOffset; -#endif UINT16 QueId; - INT FirstWcid = 1; + INT FirstWcid = 1; STA_TR_ENTRY *tr_entry = NULL; ULONG flags = 0; @@ -2824,8 +2832,7 @@ VOID UAPSD_UnTagFrame( { pEntry = &pAd->MacTab.Content[IdEntry]; tr_entry = &pAd->MacTab.tr_entry[IdEntry]; - -#if 0 + if ((IS_ENTRY_CLIENT(pEntry) #if defined(DOT11Z_TDLS_SUPPORT) || defined(CFG_TDLS_SUPPORT) || IS_ENTRY_TDLS(pEntry) @@ -2838,94 +2845,87 @@ VOID UAPSD_UnTagFrame( #ifdef UAPSD_DEBUG DBGPRINT(RT_DEBUG_ERROR, ("uapsd> bulkStartPos = %d\n", bulkStartPos)); DBGPRINT(RT_DEBUG_ERROR, ("uapsd> bulkEnPos = %d\n", bulkEnPos)); - DBGPRINT(RT_DEBUG_ERROR, ("uapsd> record offset = %d\n", pEntry->UAPSDTagOffset[AcQueId])); + DBGPRINT(RT_DEBUG_ERROR, + ("uapsd> record offset = %d\n", pEntry->UAPSDTagOffset[AcQueId])); #endif /* UAPSD_DEBUG */ - /* - 1. tx tag is in [bulkStartPos, bulkEnPos]; - 2. when bulkEnPos < bulkStartPos - */ + 1. tx tag is in [bulkStartPos, bulkEnPos]; + 2. when bulkEnPos < bulkStartPos + */ TxPktTagOffset = pEntry->UAPSDTagOffset[AcQueId]; if (((TxPktTagOffset >= bulkStartPos) && - (TxPktTagOffset <= bulkEnPos)) || - ((bulkEnPos < bulkStartPos) && - (TxPktTagOffset >= bulkStartPos)) || - ((bulkEnPos < bulkStartPos) && - (TxPktTagOffset <= bulkEnPos))) - { + (TxPktTagOffset <= bulkEnPos)) || + ((bulkEnPos < bulkStartPos) && + (TxPktTagOffset >= bulkStartPos)) || + ((bulkEnPos < bulkStartPos) && (TxPktTagOffset <= bulkEnPos))) { /* ok, some UAPSD frames of the AC are transmitted */ pEntry->UAPSDTagOffset[AcQueId] = 0; - if (pEntry->UAPSDTxNum == 0) - { + if (pEntry->UAPSDTxNum == 0) { /* ok, all UAPSD frames are transmitted */ - //pEntry->bAPSDFlagSPStart = 0; + /* pEntry->bAPSDFlagSPStart = 0; */ pEntry->bAPSDFlagEOSPOK = 0; UAPSD_SP_END(pAd, pEntry); - if (pEntry->pUAPSDEOSPFrame != NULL) - { + if (pEntry->pUAPSDEOSPFrame != NULL) { /* should not be here */ RELEASE_NDIS_PACKET(pAd, - QUEUE_ENTRY_TO_PACKET(pEntry->pUAPSDEOSPFrame), - NDIS_STATUS_FAILURE); + QUEUE_ENTRY_TO_PACKET + (pEntry->pUAPSDEOSPFrame), + NDIS_STATUS_FAILURE); pEntry->pUAPSDEOSPFrame = NULL; - } - + } #ifdef UAPSD_DEBUG - DBGPRINT(RT_DEBUG_ERROR, ("uapsd> [1] close SP (%d)!\n", AcQueId)); + DBGPRINT(RT_DEBUG_ERROR, + ("uapsd> [1] close SP (%d)!\n", AcQueId)); #endif /* UAPSD_DEBUG */ - continue; /* check next station */ + continue; /* check next station */ } if ((pEntry->UAPSDTagOffset[QID_AC_BE] == 0) && - (pEntry->UAPSDTagOffset[QID_AC_BK] == 0) && - (pEntry->UAPSDTagOffset[QID_AC_VI] == 0) && - (pEntry->UAPSDTagOffset[QID_AC_VO] == 0)) - { + (pEntry->UAPSDTagOffset[QID_AC_BK] == 0) && + (pEntry->UAPSDTagOffset[QID_AC_VI] == 0) && + (pEntry->UAPSDTagOffset[QID_AC_VO] == 0)) { + /* OK, UAPSD frames of all AC for the entry are transmitted except the EOSP frame. */ - - if (pEntry->pUAPSDEOSPFrame != NULL) - { - /* transmit the EOSP frame */ + if (pEntry->pUAPSDEOSPFrame != NULL) { + /* transmit the EOSP frame */ PNDIS_PACKET pPkt; pPkt = QUEUE_ENTRY_TO_PACKET(pEntry->pUAPSDEOSPFrame); QueId = RTMP_GET_PACKET_UAPSD_QUE_ID(pPkt); - if (QueId > QID_AC_VO) - { - /* should not be here, only for sanity */ + if (QueId > QID_AC_VO) { + /* should not be here, only for sanity */ QueId = QID_AC_BE; - } + } #ifdef UAPSD_DEBUG - DBGPRINT(RT_DEBUG_ERROR, ("uapsd> enqueue the EOSP frame...\n")); + DBGPRINT(RT_DEBUG_ERROR, ("uapsd> enqueue the EOSP frame...\n")); #endif /* UAPSD_DEBUG */ #if 0 InsertTailQueueAc(pAd, pEntry, &pAd->TxSwQueue[QueId], - pEntry->pUAPSDEOSPFrame); + pEntry->pUAPSDEOSPFrame); pEntry->pUAPSDEOSPFrame); #else - if (rtmp_enq_req(pAd, pPkt, QueId, tr_entry, TRUE, NULL) == FALSE) - { + + if (rtmp_enq_req(pAd, pPkt, (UCHAR)QueId, tr_entry, TRUE, NULL) == FALSE) { /* Release the pakcet and close service period */ RELEASE_NDIS_PACKET(pAd, pPkt, NDIS_STATUS_FAILURE); pEntry->pUAPSDEOSPFrame = NULL; pEntry->bAPSDFlagEOSPOK = 0; UAPSD_SP_END(pAd, pEntry); - UAPSD_SEM_UNLOCK(&pAd->UAPSDEOSPLock, flags); + UAPSD_SEM_UNLOCK(&pAd->UAPSDEOSPLock, flags); return; - } + } #endif - pEntry->pUAPSDEOSPFrame = NULL; /* @@ -2935,12 +2935,10 @@ VOID UAPSD_UnTagFrame( */ /* de-queue packet here to speed up EOSP frame response */ - printk("%s:: ----> call dequeue packet\n", __FUNCTION__); - RTMPDeQueuePacket(pAd, FALSE, QueId, tr_entry->wcid, 1); + DBGPRINT(RT_DEBUG_TRACE, ("%s:: ----> call dequeue packet\n", __FUNCTION__)); + RTMPDeQueuePacket(pAd, FALSE, (UCHAR)QueId, tr_entry->wcid, 1); //RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, WCID_ALL, MAX_TX_PROCESS); - } - else - { + } else { /* only when 1 data frame with EOSP = 1 is transmitted */ //pEntry->bAPSDFlagSPStart = 0; pEntry->bAPSDFlagEOSPOK = 0; @@ -2950,70 +2948,11 @@ VOID UAPSD_UnTagFrame( DBGPRINT(RT_DEBUG_ERROR, ("uapsd> [2] close SP (%d)!\n", AcQueId)); #endif /* UAPSD_DEBUG */ } - /* no any EOSP frames are queued and prepare to close the SP */ pEntry->UAPSDTxNum = 0; } } } -#else - - if(pEntry->UAPSDTxNum == 0) - { - if (pEntry->pUAPSDEOSPFrame != NULL) - { - /* transmit the EOSP frame */ - PNDIS_PACKET pPkt; - - pPkt = QUEUE_ENTRY_TO_PACKET(pEntry->pUAPSDEOSPFrame); - QueId = RTMP_GET_PACKET_UAPSD_QUE_ID(pPkt); - - if (QueId > QID_AC_VO) - { - /* should not be here, only for sanity */ - QueId = QID_AC_BE; - } - -#ifdef UAPSD_DEBUG - DBGPRINT(RT_DEBUG_ERROR, ("uapsd> enqueue the EOSP frame...\n")); -#endif /* UAPSD_DEBUG */ - -#if 0 - InsertTailQueueAc(pAd, pEntry, - &pAd->TxSwQueue[QueId], - pEntry->pUAPSDEOSPFrame); -#else - rtmp_enq_req(pAd, pPkt, QueId, tr_entry, TRUE, NULL); -#endif - - - pEntry->pUAPSDEOSPFrame = NULL; - - /* - The EOSP frame will be put into ASIC to tx - in RTMPHandleTxRingDmaDoneInterrupt(), - not the function. - */ - - /* de-queue packet here to speed up EOSP frame response */ - printk("%s:: ----> call dequeue packet\n", __FUNCTION__); - RTMPDeQueuePacket(pAd, FALSE, QueId, tr_entry->wcid, 1); - //RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, WCID_ALL, MAX_TX_PROCESS); - } - else - { - /* only when 1 data frame with EOSP = 1 is transmitted */ - //pEntry->bAPSDFlagSPStart = 0; - pEntry->bAPSDFlagEOSPOK = 0; - UAPSD_SP_END(pAd, pEntry); - -#ifdef UAPSD_DEBUG - DBGPRINT(RT_DEBUG_WARN, ("uapsd> [2] close SP (%d)!\n", AcQueId)); -#endif /* UAPSD_DEBUG */ - } - } - -#endif } UAPSD_SEM_UNLOCK(&pAd->UAPSDEOSPLock, flags); diff --git a/conf/MT7603USTA.dat b/conf/MT7603USTA.dat index ddda94a..4d42ea5 100755 --- a/conf/MT7603USTA.dat +++ b/conf/MT7603USTA.dat @@ -101,4 +101,4 @@ WOW_Interface=2 WOW_GPIO=2 WOW_Hold=100000 WOW_GPIOHighLow=1 - +SCSEnable=1 diff --git a/conf/SingleSKU.dat b/conf/SingleSKU.dat new file mode 100755 index 0000000..0f2f591 --- a/dev/null +++ b/conf/SingleSKU.dat @@ -0,0 +1,17 @@ +# Single SKU Max Power Table +# |CCK 1~11 | | OFDM 6 ~ 54 | | HT20 MCS 0 ~ 15 | | HT40 MCS 0 ~ 15 | +ch1 14 14 14 14 13 13 13 13 13 13 13 13 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 +ch2 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 +ch3 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 +ch4 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 +ch5 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 +ch6 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 +ch7 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 +ch8 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 +ch9 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 +ch10 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 +ch11 14 14 14 14 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 +ch12 14 14 14 14 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 +ch13 14 14 14 14 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 +ch14 14 14 14 14 +# End of Single SKU Table diff --git a/hw_ctrl/cmm_asic.c b/hw_ctrl/cmm_asic.c index 1e2e96f..d15ca9f 100755 --- a/hw_ctrl/cmm_asic.c +++ b/hw_ctrl/cmm_asic.c @@ -4793,282 +4793,3 @@ VOID AsicSetApCliBssid( RTMP_IO_WRITE32(pAd, MAC_APCLI_BSSID_DW1, Addr4); } #endif /* MAC_APCLI_SUPPORT */ - -#ifdef NEW_WOW_SUPPORT -VOID RT28xxAndesWOWEnable( - IN PRTMP_ADAPTER pAd) -{ - NEW_WOW_MASK_CFG_STRUCT mask_cfg; - NEW_WOW_SEC_CFG_STRUCT sec_cfg; - NEW_WOW_INFRA_CFG_STRUCT infra_cfg; - NEW_WOW_P2P_CFG_STRUCT p2p_cfg; - NEW_WOW_PARAM_STRUCT wow_param; - struct CMD_UNIT CmdUnit; - RTMP_CHIP_CAP *pChipCap = &pAd->chipCap; - INT32 Ret; - MAC_TABLE_ENTRY *pEntry = NULL; - - - NdisZeroMemory(&CmdUnit, sizeof(CmdUnit)); - - /* WOW enable */ - NdisZeroMemory(&wow_param, sizeof(wow_param)); - - wow_param.Parameter = WOW_ENABLE; /* WOW enable */ - wow_param.Value = TRUE; - - CmdUnit.u.ANDES.Type = CMD_WOW_FEATURE; /* feature enable */ - CmdUnit.u.ANDES.CmdPayloadLen = sizeof(NEW_WOW_PARAM_STRUCT); - CmdUnit.u.ANDES.CmdPayload = (PUCHAR)&wow_param; - - Ret = AsicSendCmdToAndes(pAd, &CmdUnit); - - if (Ret != NDIS_STATUS_SUCCESS) - { - printk("\x1b[31m%s: send WOW config command failed(%d/%d)!!\x1b[m\n", __FUNCTION__, - CmdUnit.u.ANDES.Type, wow_param.Parameter); - return; - } - - RtmpOsMsDelay(1); - /* mask configuration */ - NdisZeroMemory(&mask_cfg, sizeof(mask_cfg)); - - mask_cfg.Config_Type = WOW_MASK_CFG; /* detect mask config */ - mask_cfg.Function_Enable = TRUE; - mask_cfg.Detect_Mask = 1UL << WOW_MAGIC_PKT; /* magic packet */ - mask_cfg.Event_Mask = 0; - - CmdUnit.u.ANDES.Type = CMD_WOW_CONFIG; /* WOW config */ - CmdUnit.u.ANDES.CmdPayloadLen = sizeof(NEW_WOW_MASK_CFG_STRUCT); - CmdUnit.u.ANDES.CmdPayload = (PUCHAR)&mask_cfg; - - Ret = AsicSendCmdToAndes(pAd, &CmdUnit); - - if (Ret != NDIS_STATUS_SUCCESS) - { - printk("\x1b[31m%s: send WOW config command failed!!(%d/%d)\x1b[m\n", __FUNCTION__, - CmdUnit.u.ANDES.Type, mask_cfg.Config_Type); - return; - } - - RtmpOsMsDelay(1); - - /* security configuration */ - if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPAPSK) - { - NdisZeroMemory(&sec_cfg, sizeof(sec_cfg)); - - sec_cfg.Config_Type = WOW_SEC_CFG; /* security config */ - - if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) - sec_cfg.WPA_Ver = 0; - else if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) - sec_cfg.WPA_Ver = 1; - - pEntry = &pAd->MacTab.Content[BSSID_WCID]; - - NdisCopyMemory(sec_cfg.PTK, pEntry->PTK, 64); - NdisCopyMemory(sec_cfg.R_COUNTER, pEntry->R_Counter, LEN_KEY_DESC_REPLAY); - - sec_cfg.Key_Id = pAd->StaCfg.DefaultKeyId; - sec_cfg.Cipher_Alg = pEntry->WepStatus; - printk("\x1b[31m%s: wep status %d\x1b[m\n", __FUNCTION__, pEntry->WepStatus); - sec_cfg.Group_Cipher = pAd->StaCfg.GroupCipher; - printk("\x1b[31m%s: group status %d\x1b[m\n", __FUNCTION__, sec_cfg.Group_Cipher); - printk("\x1b[31m%s: aid %d\x1b[m\n", __FUNCTION__, pEntry->Aid); - sec_cfg.WCID = BSSID_WCID; - - CmdUnit.u.ANDES.Type = CMD_WOW_CONFIG; /* WOW config */ - CmdUnit.u.ANDES.CmdPayloadLen = sizeof(NEW_WOW_SEC_CFG_STRUCT); - CmdUnit.u.ANDES.CmdPayload = (PUCHAR)&sec_cfg; - - Ret = AsicSendCmdToAndes(pAd, &CmdUnit); - - if (Ret != NDIS_STATUS_SUCCESS) - { - printk("\x1b[31m%s: send WOW config command failed(%d/%d)!!\x1b[m\n", __FUNCTION__, - CmdUnit.u.ANDES.Type, sec_cfg.Config_Type); - return; - } - - RtmpOsMsDelay(1); - } - - /* Infra configuration */ - - NdisZeroMemory(&infra_cfg, sizeof(infra_cfg)); - - infra_cfg.Config_Type = WOW_INFRA_CFG; /* infra config */ - - COPY_MAC_ADDR(infra_cfg.STA_MAC, pAd->CurrentAddress); - COPY_MAC_ADDR(infra_cfg.AP_MAC, pAd->CommonCfg.Bssid); - - CmdUnit.u.ANDES.Type = CMD_WOW_CONFIG; /* WOW config */ - CmdUnit.u.ANDES.CmdPayloadLen = sizeof(NEW_WOW_INFRA_CFG_STRUCT); - CmdUnit.u.ANDES.CmdPayload = (PUCHAR)&infra_cfg; - - if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) - infra_cfg.AP_Status = TRUE; - else - infra_cfg.AP_Status = FALSE; - - Ret = AsicSendCmdToAndes(pAd, &CmdUnit); - - if (Ret != NDIS_STATUS_SUCCESS) - { - printk("\x1b[31m%s: send WOW config command failed(%d/%d)!!\x1b[m\n", __FUNCTION__, - CmdUnit.u.ANDES.Type, infra_cfg.Config_Type); - return; - } - - RtmpOsMsDelay(1); - - - /* P2P configuration */ - - /* Wakeup Option */ - NdisZeroMemory(&wow_param, sizeof(wow_param)); - - wow_param.Parameter = WOW_WAKEUP; /* Wakeup Option */ - if (pAd->WOW_Cfg.bInBand) - { -#ifdef RTMP_MAC_PCI - wow_param.Value = WOW_WAKEUP_BY_PCIE; -#else - wow_param.Value = WOW_WAKEUP_BY_USB; -#endif /* RTMP_MAC_PCI */ - } - else - { - INT32 Value; - - wow_param.Value = WOW_WAKEUP_BY_GPIO; - - RTMP_IO_READ32(pAd, WLAN_FUN_CTRL, &Value); - printk("\x1b[31m%s: 0x80 = %x\x1b[m\n", __FUNCTION__, Value); - Value &= ~0x01010000; /* GPIO0(ouput) --> 0(data) */ - RTMP_IO_WRITE32(pAd, WLAN_FUN_CTRL, Value); - } - - CmdUnit.u.ANDES.Type = CMD_WOW_FEATURE; /* feature enable */ - CmdUnit.u.ANDES.CmdPayloadLen = sizeof(NEW_WOW_PARAM_STRUCT); - CmdUnit.u.ANDES.CmdPayload = (PUCHAR)&wow_param; - - Ret = AsicSendCmdToAndes(pAd, &CmdUnit); - - if (Ret != NDIS_STATUS_SUCCESS) - { - printk("\x1b[31m%s: send WOW config command failed(%d/%d)!!\x1b[m\n", __FUNCTION__, - CmdUnit.u.ANDES.Type, wow_param.Parameter); - return; - } - - RtmpOsMsDelay(1); - - - /* traffic to Andes */ - NdisZeroMemory(&wow_param, sizeof(wow_param)); - wow_param.Parameter = WOW_TRAFFIC; /* Traffic switch */ - wow_param.Value = WOW_PKT_TO_ANDES; /* incoming packet to FW */ - - CmdUnit.u.ANDES.Type = CMD_WOW_FEATURE; /* feature enable */ - CmdUnit.u.ANDES.CmdPayloadLen = sizeof(NEW_WOW_PARAM_STRUCT); - CmdUnit.u.ANDES.CmdPayload = (PUCHAR)&wow_param.Parameter; - - Ret = AsicSendCmdToAndes(pAd, &CmdUnit); - - if (Ret != NDIS_STATUS_SUCCESS) - { - printk("\x1b[31m%s: send WOW config command failed(%d/%d)!!\x1b[m\n", __FUNCTION__, - CmdUnit.u.ANDES.Type, wow_param.Parameter); - return; - } - - RtmpOsMsDelay(1); - - RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); -} - -VOID RT28xxAndesWOWDisable( - IN PRTMP_ADAPTER pAd) -{ - NEW_WOW_PARAM_STRUCT param; - struct CMD_UNIT CmdUnit; - RTMP_CHIP_CAP *pChipCap = &pAd->chipCap; - INT32 Ret; - UINT32 Value; - MAC_TABLE_ENTRY *pEntry = NULL; - - printk("\x1b[31m%s: ...\x1b[m", __FUNCTION__); - - /* clean BulkIn Reset flag */ - //pAd->Flags &= ~0x80000; - RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); - - NdisZeroMemory(&CmdUnit, sizeof(CmdUnit)); - - /* WOW disable */ - NdisZeroMemory(¶m, sizeof(param)); - param.Parameter = WOW_ENABLE; - param.Value = FALSE; - - CmdUnit.u.ANDES.Type = CMD_WOW_FEATURE; /* WOW enable */ - CmdUnit.u.ANDES.CmdPayloadLen = sizeof(NEW_WOW_PARAM_STRUCT); - CmdUnit.u.ANDES.CmdPayload = (PUCHAR)¶m; - - Ret = AsicSendCmdToAndes(pAd, &CmdUnit); - - if (Ret != NDIS_STATUS_SUCCESS) - { - printk("\x1b[31m%s: send WOW config command failed!!\x1b[m\n", __FUNCTION__); - return; - } - - RtmpOsMsDelay(1); - - - /* traffic to Host */ - NdisZeroMemory(¶m, sizeof(param)); - param.Parameter = WOW_TRAFFIC; - param.Value = WOW_PKT_TO_HOST; - - CmdUnit.u.ANDES.Type = CMD_WOW_FEATURE; - CmdUnit.u.ANDES.CmdPayloadLen = sizeof(NEW_WOW_PARAM_STRUCT); - CmdUnit.u.ANDES.CmdPayload = (PUCHAR)¶m; - - Ret = AsicSendCmdToAndes(pAd, &CmdUnit); - - if (Ret != NDIS_STATUS_SUCCESS) - { - printk("\x1b[31m%s: send WOW config command failed!!\x1b[m\n", __FUNCTION__); - return; - } - - RtmpOsMsDelay(1); - - - /* Restore MAC TX/RX */ - AsicSetMacTxRx(pAd, ASIC_MAC_TXRX, TRUE); - - RTUSBBulkReceive(pAd); - RTUSBBulkCmdRspEventReceive(pAd); - - /* restore hardware remote wakeup flag */ - RTMP_IO_READ32(pAd, WLAN_FUN_CTRL, &Value); - printk("\x1b[31m%s: 0x80 %08x\x1b[m\n", __FUNCTION__, Value); - Value &= ~0x80; - RTMP_IO_WRITE32(pAd, WLAN_FUN_CTRL, Value); - - if (pAd->WOW_Cfg.bInBand == FALSE) - { - INT32 Value; - - RTMP_IO_READ32(pAd, WLAN_FUN_CTRL, &Value); - printk("\x1b[31m%s: 0x80 = %x\x1b[m\n", __FUNCTION__, Value); - Value &= ~0x01010000; /* GPIO0(ouput) --> 0(data) */ - RTMP_IO_WRITE32(pAd, WLAN_FUN_CTRL, Value); - } -} - -#endif /* NEW_WOW_SUPPORT */ diff --git a/hw_ctrl/cmm_asic_mt.c b/hw_ctrl/cmm_asic_mt.c index e646834..8c4fd5b 100755 --- a/hw_ctrl/cmm_asic_mt.c +++ b/hw_ctrl/cmm_asic_mt.c @@ -915,14 +915,13 @@ INT AsicWtblSetRDG(RTMP_ADAPTER *pAd, BOOLEAN bEnable) { pEntry = &pMacTable->Content[wcid]; - if (CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_RALINK_CHIPSET)) - { - if (mt_wtbl_get_entry234(pAd, wcid, &tb_entry) == FALSE) - { - DBGPRINT(RT_DEBUG_ERROR, ("%s():Cannot found WTBL2/3/4 for WCID(%d)\n", - __FUNCTION__, wcid)); - return FALSE; - } + if (CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_RALINK_CHIPSET)) { + if (mt_wtbl_get_entry234(pAd, (UCHAR)wcid, &tb_entry) == FALSE) { + DBGPRINT(RT_DEBUG_ERROR, + ("%s():Cannot found WTBL2/3/4 for WCID(%d)\n", + __func__, wcid)); + return FALSE; + } RTMP_IO_READ32(pAd, tb_entry.wtbl_addr[0] + (2 * 4), &dw2->word); @@ -1148,7 +1147,7 @@ static VOID DumpBcnQMessage(RTMP_ADAPTER *pAd, INT apidx) DBGPRINT(RT_DEBUG_ERROR, ("\ncheck PSE Q:\n")); for (j = 0; j <= 8; j++) { - sprintf(tmp,"%d",j); + snprintf(tmp, sizeof(tmp), "%d", j); set_get_fid(pAd, tmp); } @@ -1235,7 +1234,8 @@ VOID APCheckBcnQHandler(RTMP_ADAPTER *pAd, INT apidx, BOOLEAN *is_pretbtt_int) j++; OS_WAIT(1); if (j > 1000) { - printk("%s, bcn_flush too long!, j = %x\n", __func__, j); + DBGPRINT(RT_DEBUG_ERROR, + ("%s, bcn_flush too long!, j = %x\n", __func__, j)); break; } } @@ -1258,7 +1258,9 @@ VOID APCheckBcnQHandler(RTMP_ADAPTER *pAd, INT apidx, BOOLEAN *is_pretbtt_int) j++; OS_WAIT(1); if (j > 1000) { - printk("%s, flush all stuck bcn too long!! j = %x\n", __func__, j); + DBGPRINT(RT_DEBUG_ERROR, + ("%s, flush all stuck bcn too long!! j = %x\n", + __func__, j)); break; } } @@ -1802,24 +1804,24 @@ INT AsicSetWmmParam(RTMP_ADAPTER *pAd, UINT ac, UINT type, UINT val) NdisZeroMemory(&EdcaParam,sizeof(CMD_EDCA_SET_T)); EdcaParam.ucTotalNum = 1; pAcParam = &EdcaParam.rAcParam[0]; - pAcParam->ucAcNum = ac; + pAcParam->ucAcNum = (UINT8)ac; switch (type) { case WMM_PARAM_TXOP: pAcParam->ucVaildBit = CMD_EDCA_TXOP_BIT; - pAcParam->u2Txop= val; + pAcParam->u2Txop = (UINT16)val; break; case WMM_PARAM_AIFSN: pAcParam->ucVaildBit = CMD_EDCA_AIFS_BIT; - pAcParam->ucAifs = val; + pAcParam->ucAifs = (UINT8)val; break; case WMM_PARAM_CWMIN: pAcParam->ucVaildBit = CMD_EDCA_WIN_MIN_BIT; - pAcParam->ucWinMin= val; + pAcParam->ucWinMin = (UINT8)val; break; case WMM_PARAM_CWMAX: pAcParam->ucVaildBit = CMD_EDCA_WIN_MAX_BIT; - pAcParam->u2WinMax= val; + pAcParam->u2WinMax = (UINT16)val; break; default: DBGPRINT(RT_DEBUG_OFF, ("%s(%d): Error type=%d\n", __FUNCTION__, __LINE__, type)); @@ -1848,7 +1850,7 @@ INT AsicSetAllWmmParam(RTMP_ADAPTER *pAd,PEDCA_PARM pEdcaParm) index = wmm_aci_2_hw_ac_queue[ac]; pAcParam = &EdcaParam.rAcParam[index]; pAcParam->ucVaildBit = CMD_EDCA_ALL_BITS; - pAcParam->ucAcNum = ac; + pAcParam->ucAcNum = (UINT8)ac; pAcParam->ucAifs = pEdcaParm->Aifsn[index]; pAcParam->ucWinMin= (1 << pEdcaParm->Cwmin[index]) -1; pAcParam->u2WinMax= (1 << pEdcaParm->Cwmax[index]) -1; @@ -2186,7 +2188,8 @@ VOID AsicSetSlotTime( else SifsTime = SIFS_TIME_24G; - CmdSlotTimeSet(pAd,SlotTime,SifsTime,RIFS_TIME,EIFS_TIME); + CmdSlotTimeSet(pAd, (UINT8)SlotTime, + (UINT8)SifsTime, RIFS_TIME, EIFS_TIME); DBGPRINT(RT_DEBUG_TRACE, ("%s: SlotTime =%u us, SIFS Time = %u us,\ @@ -2234,7 +2237,7 @@ VOID RTMPGetTxTscFromAsic(RTMP_ADAPTER *pAd, UCHAR apidx, UCHAR *pTxTsc) GET_GroupKey_WCID(pAd, Wcid, apidx); NdisZeroMemory(&tb_entry, sizeof(tb_entry)); - if (mt_wtbl_get_entry234(pAd, Wcid, &tb_entry) == FALSE) { + if (mt_wtbl_get_entry234(pAd, (UCHAR)Wcid, &tb_entry) == FALSE) { DBGPRINT(RT_DEBUG_ERROR, ("%s():Cannot found WTBL2/3/4 for WCID(%d)\n", __FUNCTION__, Wcid)); return; @@ -2295,7 +2298,7 @@ VOID RTMPGetTxTscFromAsic(RTMP_ADAPTER *pAd, UCHAR apidx, UCHAR *pTxTsc) } #endif /* RTMP_MAC */ /* Read IVEIV from Asic */ - offset = iveiv_tb_base + (Wcid * iveiv_tb_size); + offset = (USHORT)(iveiv_tb_base + (Wcid * iveiv_tb_size)); /* Use Read32 to avoid endian problem */ RTMP_IO_READ32(pAd, offset, &temp1); @@ -2429,18 +2432,18 @@ VOID AsicAddSharedKeyEntry( #ifdef RTMP_MAC_USB { - RTUSBMultiWrite(pAd, offset, pKey, MAX_LEN_OF_SHARE_KEY, FALSE); + RTUSBMultiWrite(pAd, (USHORT)offset, pKey, MAX_LEN_OF_SHARE_KEY, FALSE); offset += MAX_LEN_OF_SHARE_KEY; if (pTxMic) { - RTUSBMultiWrite(pAd, offset, pTxMic, 8, FALSE); + RTUSBMultiWrite(pAd, (USHORT)offset, pTxMic, 8, FALSE); } offset += 8; if (pRxMic) { - RTUSBMultiWrite(pAd, offset, pRxMic, 8, FALSE); + RTUSBMultiWrite(pAd, (USHORT)offset, pRxMic, 8, FALSE); } } #endif /* RTMP_MAC_USB */ @@ -2760,14 +2763,14 @@ VOID AsicTxCntUpdate(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY *pEntry, MT_TX_COUNTER * pTxInfo->TxFailCount = tx_cnt_info.wtbl_2_d7.field.current_bw_fail_cnt ; pTxInfo->TxFailCount += tx_cnt_info.wtbl_2_d8.field.other_bw_fail_cnt; - pTxInfo->Rate1TxCnt = tx_cnt_info.wtbl_2_d5.field.rate_1_tx_cnt; - pTxInfo->Rate1FailCnt = tx_cnt_info.wtbl_2_d5.field.rate_1_fail_cnt; - pTxInfo->Rate2TxCnt = tx_cnt_info.wtbl_2_d6.field.rate_2_tx_cnt; - pTxInfo->Rate3TxCnt = tx_cnt_info.wtbl_2_d6.field.rate_3_tx_cnt; - pTxInfo->Rate4TxCnt = tx_cnt_info.wtbl_2_d6.field.rate_4_tx_cnt; - pTxInfo->Rate5TxCnt = tx_cnt_info.wtbl_2_d6.field.rate_5_tx_cnt; + pTxInfo->Rate1TxCnt = (UINT16)tx_cnt_info.wtbl_2_d5.field.rate_1_tx_cnt; + pTxInfo->Rate1FailCnt = (UINT16)tx_cnt_info.wtbl_2_d5.field.rate_1_fail_cnt; + pTxInfo->Rate2TxCnt = (UCHAR)tx_cnt_info.wtbl_2_d6.field.rate_2_tx_cnt; + pTxInfo->Rate3TxCnt = (UCHAR)tx_cnt_info.wtbl_2_d6.field.rate_3_tx_cnt; + pTxInfo->Rate4TxCnt = (UCHAR)tx_cnt_info.wtbl_2_d6.field.rate_4_tx_cnt; + pTxInfo->Rate5TxCnt = (UCHAR)tx_cnt_info.wtbl_2_d6.field.rate_5_tx_cnt; - pTxInfo->RateIndex = tx_cnt_info.wtbl_2_d9.field.rate_idx; + pTxInfo->RateIndex = (UCHAR)tx_cnt_info.wtbl_2_d9.field.rate_idx; /* if ( pTxInfo->TxFailCount == 0 ) pEntry->OneSecTxNoRetryOkCount += pTxInfo->TxSuccessCount; @@ -2815,17 +2818,20 @@ VOID AsicRssiUpdate(RTMP_ADAPTER *pAd) Rssi1 = (wtbl_2_d13.field.resp_rcpi_1 - 220) / 2; Rssi2 = 0; - pEntry->RssiSample.AvgRssi[0] = pEntry->RssiSample.LastRssi[0] = Rssi0; - pEntry->RssiSample.AvgRssi[1] = pEntry->RssiSample.LastRssi[1] = Rssi1; - pEntry->RssiSample.AvgRssi[2] = pEntry->RssiSample.LastRssi[2] = Rssi2; + pEntry->RssiSample.AvgRssi[0] = + pEntry->RssiSample.LastRssi[0] = (CHAR)Rssi0; + pEntry->RssiSample.AvgRssi[1] = + pEntry->RssiSample.LastRssi[1] = (CHAR)Rssi1; + pEntry->RssiSample.AvgRssi[2] = + pEntry->RssiSample.LastRssi[2] = (CHAR)Rssi2; - pAd->ApCfg.RssiSample.AvgRssi[0] = Rssi0; - pAd->ApCfg.RssiSample.AvgRssi[1] = Rssi1; - pAd->ApCfg.RssiSample.AvgRssi[2] = Rssi2; + pAd->ApCfg.RssiSample.AvgRssi[0] = (CHAR)Rssi0; + pAd->ApCfg.RssiSample.AvgRssi[1] = (CHAR)Rssi1; + pAd->ApCfg.RssiSample.AvgRssi[2] = (CHAR)Rssi2; - pAd->ApCfg.RssiSample.LastRssi[0] = Rssi0; - pAd->ApCfg.RssiSample.LastRssi[1] = Rssi1; - pAd->ApCfg.RssiSample.LastRssi[2] = Rssi2; + pAd->ApCfg.RssiSample.LastRssi[0] = (CHAR)Rssi0; + pAd->ApCfg.RssiSample.LastRssi[1] = (CHAR)Rssi1; + pAd->ApCfg.RssiSample.LastRssi[2] = (CHAR)Rssi2; } else { @@ -2839,9 +2845,12 @@ VOID AsicRssiUpdate(RTMP_ADAPTER *pAd) Rssi1 = (wtbl_2_d13.field.resp_rcpi_1 - 220) / 2; Rssi2 = 0; - pEntry->RssiSample.AvgRssi[0] = pEntry->RssiSample.LastRssi[0] = Rssi0; - pEntry->RssiSample.AvgRssi[1] = pEntry->RssiSample.LastRssi[1] = Rssi1; - pEntry->RssiSample.AvgRssi[2] = pEntry->RssiSample.LastRssi[2] = Rssi2; + pEntry->RssiSample.AvgRssi[0] = + pEntry->RssiSample.LastRssi[0] = (CHAR)Rssi0; + pEntry->RssiSample.AvgRssi[1] = + pEntry->RssiSample.LastRssi[1] = (CHAR)Rssi1; + pEntry->RssiSample.AvgRssi[2] = + pEntry->RssiSample.LastRssi[2] = (CHAR)Rssi2; TotalRssi0 += Rssi0; TotalRssi1 += Rssi1; @@ -2849,9 +2858,15 @@ VOID AsicRssiUpdate(RTMP_ADAPTER *pAd) } } - pAd->ApCfg.RssiSample.AvgRssi[0] = pAd->ApCfg.RssiSample.LastRssi[0] = TotalRssi0 / pAd->MacTab.Size; - pAd->ApCfg.RssiSample.AvgRssi[1] = pAd->ApCfg.RssiSample.LastRssi[1] = TotalRssi1 / pAd->MacTab.Size; - pAd->ApCfg.RssiSample.AvgRssi[2] = pAd->ApCfg.RssiSample.LastRssi[2] = TotalRssi2 / pAd->MacTab.Size; + pAd->ApCfg.RssiSample.AvgRssi[0] = + pAd->ApCfg.RssiSample.LastRssi[0] = + (CHAR)(TotalRssi0 / pAd->MacTab.Size); + pAd->ApCfg.RssiSample.AvgRssi[1] = + pAd->ApCfg.RssiSample.LastRssi[1] = + (CHAR)(TotalRssi1 / pAd->MacTab.Size); + pAd->ApCfg.RssiSample.AvgRssi[2] = + pAd->ApCfg.RssiSample.LastRssi[2] = + (CHAR)(TotalRssi2 / pAd->MacTab.Size); } } @@ -2867,17 +2882,17 @@ VOID AsicRssiUpdate(RTMP_ADAPTER *pAd) Rssi1 = (wtbl_2_d13.field.resp_rcpi_1 - 220) / 2; Rssi2 = 0; - pEntry->RssiSample.AvgRssi[0] = pEntry->RssiSample.LastRssi[0] = Rssi0; - pEntry->RssiSample.AvgRssi[1] = pEntry->RssiSample.LastRssi[1] = Rssi1; - pEntry->RssiSample.AvgRssi[2] = pEntry->RssiSample.LastRssi[2] = Rssi2; + pEntry->RssiSample.AvgRssi[0] = pEntry->RssiSample.LastRssi[0] = (CHAR)Rssi0; + pEntry->RssiSample.AvgRssi[1] = pEntry->RssiSample.LastRssi[1] = (CHAR)Rssi1; + pEntry->RssiSample.AvgRssi[2] = pEntry->RssiSample.LastRssi[2] = (CHAR)Rssi2; - pAd->StaCfg.RssiSample.AvgRssi[0] = Rssi0; - pAd->StaCfg.RssiSample.AvgRssi[1] = Rssi1; - pAd->StaCfg.RssiSample.AvgRssi[2] = Rssi2; + pAd->StaCfg.RssiSample.AvgRssi[0] = (CHAR)Rssi0; + pAd->StaCfg.RssiSample.AvgRssi[1] = (CHAR)Rssi1; + pAd->StaCfg.RssiSample.AvgRssi[2] = (CHAR)Rssi2; - pAd->StaCfg.RssiSample.LastRssi[0] = Rssi0; - pAd->StaCfg.RssiSample.LastRssi[1] = Rssi1; - pAd->StaCfg.RssiSample.LastRssi[2] = Rssi2; + pAd->StaCfg.RssiSample.LastRssi[0] = (CHAR)Rssi0; + pAd->StaCfg.RssiSample.LastRssi[1] = (CHAR)Rssi1; + pAd->StaCfg.RssiSample.LastRssi[2] = (CHAR)Rssi2; } #endif /* CONFIG_STA_SUPPORT */ } @@ -3020,7 +3035,7 @@ VOID asic_mcs_lut_update(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY *pEntry) else preamble = LONG_PREAMBLE; - stbc = pEntry->HTPhyMode.field.STBC; + stbc = (UCHAR)pEntry->HTPhyMode.field.STBC; #ifdef THERMAL_PROTECT_SUPPORT if (pAd->force_one_tx_stream == TRUE) { @@ -3028,7 +3043,8 @@ VOID asic_mcs_lut_update(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY *pEntry) } #endif /* THERMAL_PROTECT_SUPPORT */ - nss = get_nss_by_mcs(pEntry->HTPhyMode.field.MODE, pEntry->HTPhyMode.field.MCS, stbc); + nss = get_nss_by_mcs((UCHAR)pEntry->HTPhyMode.field.MODE, + (UCHAR)pEntry->HTPhyMode.field.MCS, stbc); if (((pEntry->MmpsMode != MMPS_STATIC) || ( pEntry->HTPhyMode.field.MODE < MODE_HTMIX )) @@ -3044,11 +3060,12 @@ VOID asic_mcs_lut_update(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY *pEntry) } } - rate[0] = tx_rate_to_tmi_rate(pEntry->HTPhyMode.field.MODE, - pEntry->HTPhyMode.field.MCS, - nss, - pEntry->HTPhyMode.field.MCS == MCS_32?0:stbc, - preamble); + rate[0] = tx_rate_to_tmi_rate( + (UCHAR)pEntry->HTPhyMode.field.MODE, + (UCHAR)pEntry->HTPhyMode.field.MCS, + nss, + pEntry->HTPhyMode.field.MCS == MCS_32?0:stbc, + preamble); rate[0] &= 0xfff; if ( pEntry->bAutoTxRateSwitch == TRUE ) @@ -3131,7 +3148,7 @@ VOID asic_mcs_lut_update(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY *pEntry) } - nss = get_nss_by_mcs(mode, mcs, pEntry->HTPhyMode.field.STBC); + nss = get_nss_by_mcs(mode, mcs, (BOOLEAN)pEntry->HTPhyMode.field.STBC); rate[ucIndex] = tx_rate_to_tmi_rate(mode, mcs, nss, @@ -3210,7 +3227,18 @@ VOID asic_mcs_lut_update(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY *pEntry) } else { - ucMaxTxRetryCnt = aucHtMaxRetryLimit[(pEntry->HTPhyMode.field.MCS*2) + 1]; + if (((pEntry->HTPhyMode.field.MCS*2) + 1) < + sizeof(aucHtMaxRetryLimit)/sizeof(UCHAR)) + ucMaxTxRetryCnt = + aucHtMaxRetryLimit[ + (pEntry->HTPhyMode.field.MCS*2) + 1]; + else { + DBGPRINT(RT_DEBUG_ERROR, + ("%s(): Invalid index!(%d)\n", + __func__, + (pEntry->HTPhyMode.field.MCS*2) + 1)); + return; + } } } } @@ -3261,57 +3289,57 @@ UINT16 AsicGetTidSn(RTMP_ADAPTER *pAd, UCHAR Wcid, UCHAR Tid) case 0: Reg = Entry.wtbl_addr[1] + (4 * 2); //WTBL2.DW2 RTMP_IO_READ32(pAd, Reg, &Wtbl_2->wtbl_2_d2.word); - Sn = Wtbl_2->wtbl_2_d2.field.tid_ac_0_sn; + Sn = (UINT16)Wtbl_2->wtbl_2_d2.field.tid_ac_0_sn; break; case 1: Reg = Entry.wtbl_addr[1] + (4 * 2); //WTBL2.DW2 RTMP_IO_READ32(pAd, Reg, &Wtbl_2->wtbl_2_d2.word); - Sn = Wtbl_2->wtbl_2_d2.field.tid_ac_1_sn; + Sn = (UINT16)Wtbl_2->wtbl_2_d2.field.tid_ac_1_sn; break; case 2: Reg = Entry.wtbl_addr[1] + (4 * 2); //WTBL2.DW2 RTMP_IO_READ32(pAd, Reg, &Wtbl_2->wtbl_2_d2.word); - Sn = Wtbl_2->wtbl_2_d2.field.tid_ac_2_sn_0; + Sn = (UINT16)Wtbl_2->wtbl_2_d2.field.tid_ac_2_sn_0; Reg = Entry.wtbl_addr[1] + (4 * 3); //WTBL2.DW3 RTMP_IO_READ32(pAd, Reg, &Wtbl_2->wtbl_2_d3.word); - Sn = (Wtbl_2->wtbl_2_d3.field.tid_ac_2_sn_9 << 8) | Sn; + Sn = (UINT16)((Wtbl_2->wtbl_2_d3.field.tid_ac_2_sn_9 << 8) | Sn); break; case 3: Reg = Entry.wtbl_addr[1] + (4 * 3); //WTBL2.DW3 RTMP_IO_READ32(pAd, Reg, &Wtbl_2->wtbl_2_d3.word); - Sn = Wtbl_2->wtbl_2_d3.field.tid_ac_3_sn; + Sn = (UINT16)Wtbl_2->wtbl_2_d3.field.tid_ac_3_sn; break; case 4: Reg = Entry.wtbl_addr[1] + (4 * 3); //WTBL2.DW3 RTMP_IO_READ32(pAd, Reg, &Wtbl_2->wtbl_2_d3.word); - Sn = Wtbl_2->wtbl_2_d3.field.tid_4_sn; + Sn = (UINT16)Wtbl_2->wtbl_2_d3.field.tid_4_sn; break; case 5: Reg = Entry.wtbl_addr[1] + (4 * 3); //WTBL2.DW3 RTMP_IO_READ32(pAd, Reg, &Wtbl_2->wtbl_2_d3.word); - Sn = Wtbl_2->wtbl_2_d3.field.tid_5_sn_0; + Sn = (UINT16)Wtbl_2->wtbl_2_d3.field.tid_5_sn_0; Reg = Entry.wtbl_addr[1] + (4 * 4); //WTBL2.DW4 RTMP_IO_READ32(pAd, Reg, &Wtbl_2->wtbl_2_d4.word); - Sn = (Wtbl_2->wtbl_2_d4.field.tid_5_sn_5 << 4) | Sn; + Sn = (UINT16)((Wtbl_2->wtbl_2_d4.field.tid_5_sn_5 << 4) | Sn); break; case 6: Reg = Entry.wtbl_addr[1] + (4 * 4); //WTBL2.DW4 RTMP_IO_READ32(pAd, Reg, &Wtbl_2->wtbl_2_d4.word); - Sn = Wtbl_2->wtbl_2_d4.field.tid_6_sn; + Sn = (UINT16)Wtbl_2->wtbl_2_d4.field.tid_6_sn; break; case 7: Reg = Entry.wtbl_addr[1] + (4 * 4); //WTBL2.DW4 RTMP_IO_READ32(pAd, Reg, &Wtbl_2->wtbl_2_d4.word); - Sn = Wtbl_2->wtbl_2_d4.field.tid_7_sn; + Sn = (UINT16)Wtbl_2->wtbl_2_d4.field.tid_7_sn; break; default: @@ -3432,7 +3460,7 @@ VOID AsicUpdateRxWCIDTable(RTMP_ADAPTER *pAd, USHORT WCID, UCHAR *pAddr) // TODO: shiang-7603 NdisZeroMemory(&tb_entry, sizeof(tb_entry)); - if (mt_wtbl_get_entry234(pAd, WCID, &tb_entry) == FALSE) { + if (mt_wtbl_get_entry234(pAd, (UCHAR)WCID, &tb_entry) == FALSE) { DBGPRINT(RT_DEBUG_ERROR, ("%s():Cannot found WTBL2/3/4 for WCID(%d)\n", __FUNCTION__, WCID)); return; @@ -3466,7 +3494,13 @@ VOID AsicUpdateRxWCIDTable(RTMP_ADAPTER *pAd, USHORT WCID, UCHAR *pAddr) dw0->field.rc_a2 = 1; } else { - mac_entry = &pAd->MacTab.Content[WCID]; + if (WCID < MAX_LEN_OF_MAC_TABLE) + mac_entry = &pAd->MacTab.Content[WCID]; + else { + DBGPRINT(RT_DEBUG_ERROR, ("%s():Invalid WCID(%d)!\n", + __func__, WCID)); + return; + } //dw0->field.muar_idx = 0x0; // TODO: need to change depends on different BssIdx! if (IS_ENTRY_CLIENT(mac_entry)) { @@ -3577,11 +3611,19 @@ VOID AsicUpdateRxWCIDTable(RTMP_ADAPTER *pAd, USHORT WCID, UCHAR *pAddr) /* Clear BA Information */ RTMP_IO_WRITE32(pAd, tb_entry.wtbl_addr[1] + (15 * 4), tb_entry.wtbl_2.wtbl_2_d15.word); + /* IOT issue with BCM's AP (ex: TP-LINK AC1900 C8/C9): Clear PN in wtbl2 + * The PN shall be initialized when the corresponding TK is initialized or refreshed + * If the PN (Packet Number) exceed the threshold, AP will drop the data frames. + */ + tb_entry.wtbl_2.wtbl_2_d0.pn_0 = 0x0; + tb_entry.wtbl_2.wtbl_2_d1.field.pn_32 = 0x0; + RTMP_IO_WRITE32(pAd, tb_entry.wtbl_addr[1] + (0 * 4), tb_entry.wtbl_2.wtbl_2_d0.word); + RTMP_IO_WRITE32(pAd, tb_entry.wtbl_addr[1] + (1 * 4), tb_entry.wtbl_2.wtbl_2_d1.word); /* Clear WTBL2 TID SN to default */ /* We need change disable TX to just disable TX Q only, or RX path may have problem due to we can not TX ack*/ //AsicSetMacTxRx(pAd, ASIC_MAC_TX, FALSE); -MtAsicACQueue(pAd, AC_QUEUE_STOP, apidx, 0xF); + MtAsicACQueue(pAd, AC_QUEUE_STOP, (UINT8)apidx, 0xF); RTMP_IO_WRITE32(pAd, tb_entry.wtbl_addr[1] + (2 * 4), 0x0); RTMP_IO_WRITE32(pAd, tb_entry.wtbl_addr[1] + (3 * 4), 0x0); @@ -3620,7 +3662,7 @@ MtAsicACQueue(pAd, AC_QUEUE_STOP, apidx, 0xF); NdisReleaseSpinLock(&pAd->IndirectUpdateLock); #endif //AsicSetMacTxRx(pAd, ASIC_MAC_TX, TRUE); - MtAsicACQueue(pAd, AC_QUEUE_START, apidx, 0xF); + MtAsicACQueue(pAd, AC_QUEUE_START, (UINT8)apidx, 0xF); return; } @@ -3632,7 +3674,7 @@ MtAsicACQueue(pAd, AC_QUEUE_STOP, apidx, 0xF); NdisReleaseSpinLock(&pAd->IndirectUpdateLock); #endif //AsicSetMacTxRx(pAd, ASIC_MAC_TX, TRUE); -MtAsicACQueue(pAd, AC_QUEUE_START, apidx, 0xF); + MtAsicACQueue(pAd, AC_QUEUE_START, (UINT8)apidx, 0xF); #ifdef RTMP_USB_SUPPORT @@ -4346,7 +4388,7 @@ VOID AsicAddPairwiseKeyEntry( } #endif /* RTMP_MAC_PCI */ #ifdef RTMP_MAC_USB - RTUSBMultiWrite(pAd, offset, &pCipherKey->Key[0], MAX_LEN_OF_PEER_KEY, FALSE); + RTUSBMultiWrite(pAd, (USHORT)offset, &pCipherKey->Key[0], MAX_LEN_OF_PEER_KEY, FALSE); #endif /* RTMP_MAC_USB */ for (i=0; i<MAX_LEN_OF_PEER_KEY; i+=4) { @@ -4365,7 +4407,7 @@ VOID AsicAddPairwiseKeyEntry( } #endif /* RTMP_MAC_PCI */ #ifdef RTMP_MAC_USB - RTUSBMultiWrite(pAd, offset, &pCipherKey->TxMic[0], 8, FALSE); + RTUSBMultiWrite(pAd, (USHORT)offset, &pCipherKey->TxMic[0], 8, FALSE); #endif /* RTMP_MAC_USB */ } offset += 8; @@ -4379,7 +4421,7 @@ VOID AsicAddPairwiseKeyEntry( } #endif /* RTMP_MAC_PCI */ #ifdef RTMP_MAC_USB - RTUSBMultiWrite(pAd, offset, &pCipherKey->RxMic[0], 8, FALSE); + RTUSBMultiWrite(pAd, (USHORT)offset, &pCipherKey->RxMic[0], 8, FALSE); #endif /* RTMP_MAC_USB */ } #ifdef RTMP_MAC @@ -5285,7 +5327,7 @@ INT StopDmaRx(RTMP_ADAPTER *pAd, UCHAR Level) pRxPacket = GetPacketFromRxRing(pAd, pRxBlk, &bReschedule, &RxPending, 0); if ((RxPending == 0) && (bReschedule == FALSE)) break; - else + else if (pRxPacket) RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_SUCCESS); } @@ -5507,7 +5549,7 @@ INT AsicSetBW(RTMP_ADAPTER *pAd, INT bw) } RTMP_IO_WRITE32(pAd, AGG_BWCR, val); - bbp_set_bw(pAd, bw); + bbp_set_bw(pAd, (UINT8)bw); return TRUE; } @@ -6263,288 +6305,6 @@ VOID AsicSetApCliBssid( } #endif /* MAC_APCLI_SUPPORT */ -#ifdef NEW_WOW_SUPPORT -VOID RT28xxAndesWOWEnable( - IN PRTMP_ADAPTER pAd) -{ - NEW_WOW_MASK_CFG_STRUCT mask_cfg; - NEW_WOW_SEC_CFG_STRUCT sec_cfg; - NEW_WOW_INFRA_CFG_STRUCT infra_cfg; - NEW_WOW_P2P_CFG_STRUCT p2p_cfg; - NEW_WOW_PARAM_STRUCT wow_param; - struct CMD_UNIT CmdUnit; - RTMP_CHIP_CAP *pChipCap = &pAd->chipCap; - INT32 Ret; - MAC_TABLE_ENTRY *pEntry = NULL; - - - NdisZeroMemory(&CmdUnit, sizeof(CmdUnit)); - - /* WOW enable */ - NdisZeroMemory(&wow_param, sizeof(wow_param)); - - wow_param.Parameter = WOW_ENABLE; /* WOW enable */ - wow_param.Value = TRUE; - - CmdUnit.u.ANDES.Type = CMD_WOW_FEATURE; /* feature enable */ - CmdUnit.u.ANDES.CmdPayloadLen = sizeof(NEW_WOW_PARAM_STRUCT); - CmdUnit.u.ANDES.CmdPayload = (PUCHAR)&wow_param; - - Ret = AsicSendCmdToAndes(pAd, &CmdUnit); - - if (Ret != NDIS_STATUS_SUCCESS) - { - printk("\x1b[31m%s: send WOW config command failed(%d/%d)!!\x1b[m\n", __FUNCTION__, - CmdUnit.u.ANDES.Type, wow_param.Parameter); - return; - } - - RtmpOsMsDelay(1); - /* mask configuration */ - NdisZeroMemory(&mask_cfg, sizeof(mask_cfg)); - - mask_cfg.Config_Type = WOW_MASK_CFG; /* detect mask config */ - mask_cfg.Function_Enable = TRUE; - mask_cfg.Detect_Mask = 1UL << WOW_MAGIC_PKT; /* magic packet */ - mask_cfg.Event_Mask = 0; - - CmdUnit.u.ANDES.Type = CMD_WOW_CONFIG; /* WOW config */ - CmdUnit.u.ANDES.CmdPayloadLen = sizeof(NEW_WOW_MASK_CFG_STRUCT); - CmdUnit.u.ANDES.CmdPayload = (PUCHAR)&mask_cfg; - - Ret = AsicSendCmdToAndes(pAd, &CmdUnit); - - if (Ret != NDIS_STATUS_SUCCESS) - { - printk("\x1b[31m%s: send WOW config command failed!!(%d/%d)\x1b[m\n", __FUNCTION__, - CmdUnit.u.ANDES.Type, mask_cfg.Config_Type); - return; - } - - RtmpOsMsDelay(1); - - /* security configuration */ - if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPAPSK) - { - NdisZeroMemory(&sec_cfg, sizeof(sec_cfg)); - - sec_cfg.Config_Type = WOW_SEC_CFG; /* security config */ - - if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) - sec_cfg.WPA_Ver = 0; - else if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) - sec_cfg.WPA_Ver = 1; - - pEntry = &pAd->MacTab.Content[BSSID_WCID]; - - NdisCopyMemory(sec_cfg.PTK, pEntry->PTK, 64); - NdisCopyMemory(sec_cfg.R_COUNTER, pEntry->R_Counter, LEN_KEY_DESC_REPLAY); - - sec_cfg.Key_Id = pAd->StaCfg.DefaultKeyId; - sec_cfg.Cipher_Alg = pEntry->WepStatus; - printk("\x1b[31m%s: wep status %d\x1b[m\n", __FUNCTION__, pEntry->WepStatus); - sec_cfg.Group_Cipher = pAd->StaCfg.GroupCipher; - printk("\x1b[31m%s: group status %d\x1b[m\n", __FUNCTION__, sec_cfg.Group_Cipher); - printk("\x1b[31m%s: aid %d\x1b[m\n", __FUNCTION__, pEntry->Aid); - sec_cfg.WCID = BSSID_WCID; - - CmdUnit.u.ANDES.Type = CMD_WOW_CONFIG; /* WOW config */ - CmdUnit.u.ANDES.CmdPayloadLen = sizeof(NEW_WOW_SEC_CFG_STRUCT); - CmdUnit.u.ANDES.CmdPayload = (PUCHAR)&sec_cfg; - - Ret = AsicSendCmdToAndes(pAd, &CmdUnit); - - if (Ret != NDIS_STATUS_SUCCESS) - { - printk("\x1b[31m%s: send WOW config command failed(%d/%d)!!\x1b[m\n", __FUNCTION__, - CmdUnit.u.ANDES.Type, sec_cfg.Config_Type); - return; - } - - RtmpOsMsDelay(1); - } - - /* Infra configuration */ - - NdisZeroMemory(&infra_cfg, sizeof(infra_cfg)); - - infra_cfg.Config_Type = WOW_INFRA_CFG; /* infra config */ - - COPY_MAC_ADDR(infra_cfg.STA_MAC, pAd->CurrentAddress); - COPY_MAC_ADDR(infra_cfg.AP_MAC, pAd->CommonCfg.Bssid); - - CmdUnit.u.ANDES.Type = CMD_WOW_CONFIG; /* WOW config */ - CmdUnit.u.ANDES.CmdPayloadLen = sizeof(NEW_WOW_INFRA_CFG_STRUCT); - CmdUnit.u.ANDES.CmdPayload = (PUCHAR)&infra_cfg; - - if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) - infra_cfg.AP_Status = TRUE; - else - infra_cfg.AP_Status = FALSE; - - Ret = AsicSendCmdToAndes(pAd, &CmdUnit); - - if (Ret != NDIS_STATUS_SUCCESS) - { - printk("\x1b[31m%s: send WOW config command failed(%d/%d)!!\x1b[m\n", __FUNCTION__, - CmdUnit.u.ANDES.Type, infra_cfg.Config_Type); - return; - } - - RtmpOsMsDelay(1); - - - /* P2P configuration */ - - /* Wakeup Option */ - NdisZeroMemory(&wow_param, sizeof(wow_param)); - - wow_param.Parameter = WOW_WAKEUP; /* Wakeup Option */ - if (pAd->WOW_Cfg.bInBand) - { -#ifdef RTMP_MAC_PCI - wow_param.Value = WOW_WAKEUP_BY_PCIE; -#else - wow_param.Value = WOW_WAKEUP_BY_USB; -#endif /* RTMP_MAC_PCI */ - } - else - { - INT32 Value; - - wow_param.Value = WOW_WAKEUP_BY_GPIO; - - RTMP_IO_READ32(pAd, WLAN_FUN_CTRL, &Value); - printk("\x1b[31m%s: 0x80 = %x\x1b[m\n", __FUNCTION__, Value); - Value &= ~0x01010000; /* GPIO0(ouput) --> 0(data) */ - RTMP_IO_WRITE32(pAd, WLAN_FUN_CTRL, Value); - } - - CmdUnit.u.ANDES.Type = CMD_WOW_FEATURE; /* feature enable */ - CmdUnit.u.ANDES.CmdPayloadLen = sizeof(NEW_WOW_PARAM_STRUCT); - CmdUnit.u.ANDES.CmdPayload = (PUCHAR)&wow_param; - - Ret = AsicSendCmdToAndes(pAd, &CmdUnit); - - if (Ret != NDIS_STATUS_SUCCESS) - { - printk("\x1b[31m%s: send WOW config command failed(%d/%d)!!\x1b[m\n", __FUNCTION__, - CmdUnit.u.ANDES.Type, wow_param.Parameter); - return; - } - - RtmpOsMsDelay(1); - - - /* traffic to Andes */ - NdisZeroMemory(&wow_param, sizeof(wow_param)); - wow_param.Parameter = WOW_TRAFFIC; /* Traffic switch */ - wow_param.Value = WOW_PKT_TO_ANDES; /* incoming packet to FW */ - - CmdUnit.u.ANDES.Type = CMD_WOW_FEATURE; /* feature enable */ - CmdUnit.u.ANDES.CmdPayloadLen = sizeof(NEW_WOW_PARAM_STRUCT); - CmdUnit.u.ANDES.CmdPayload = (PUCHAR)&wow_param.Parameter; - - Ret = AsicSendCmdToAndes(pAd, &CmdUnit); - - if (Ret != NDIS_STATUS_SUCCESS) - { - printk("\x1b[31m%s: send WOW config command failed(%d/%d)!!\x1b[m\n", __FUNCTION__, - CmdUnit.u.ANDES.Type, wow_param.Parameter); - return; - } - - RtmpOsMsDelay(1); - - RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); -} - -VOID RT28xxAndesWOWDisable( - IN PRTMP_ADAPTER pAd) -{ - NEW_WOW_PARAM_STRUCT param; - struct CMD_UNIT CmdUnit; - RTMP_CHIP_CAP *pChipCap = &pAd->chipCap; - INT32 Ret; - UINT32 Value; - MAC_TABLE_ENTRY *pEntry = NULL; - - printk("\x1b[31m%s: ...\x1b[m", __FUNCTION__); - - /* clean BulkIn Reset flag */ - //pAd->Flags &= ~0x80000; - RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); - - NdisZeroMemory(&CmdUnit, sizeof(CmdUnit)); - - /* WOW disable */ - NdisZeroMemory(¶m, sizeof(param)); - param.Parameter = WOW_ENABLE; - param.Value = FALSE; - - CmdUnit.u.ANDES.Type = CMD_WOW_FEATURE; /* WOW enable */ - CmdUnit.u.ANDES.CmdPayloadLen = sizeof(NEW_WOW_PARAM_STRUCT); - CmdUnit.u.ANDES.CmdPayload = (PUCHAR)¶m; - - Ret = AsicSendCmdToAndes(pAd, &CmdUnit); - - if (Ret != NDIS_STATUS_SUCCESS) - { - printk("\x1b[31m%s: send WOW config command failed!!\x1b[m\n", __FUNCTION__); - return; - } - - RtmpOsMsDelay(1); - - - /* traffic to Host */ - NdisZeroMemory(¶m, sizeof(param)); - param.Parameter = WOW_TRAFFIC; - param.Value = WOW_PKT_TO_HOST; - - CmdUnit.u.ANDES.Type = CMD_WOW_FEATURE; - CmdUnit.u.ANDES.CmdPayloadLen = sizeof(NEW_WOW_PARAM_STRUCT); - CmdUnit.u.ANDES.CmdPayload = (PUCHAR)¶m; - - Ret = AsicSendCmdToAndes(pAd, &CmdUnit); - - if (Ret != NDIS_STATUS_SUCCESS) - { - printk("\x1b[31m%s: send WOW config command failed!!\x1b[m\n", __FUNCTION__); - return; - } - - RtmpOsMsDelay(1); - - - /* Restore MAC TX/RX */ - if (pAd->CommonCfg.bTXRX_RXV_ON) - AsicSetMacTxRx(pAd, ASIC_MAC_TXRX_RXV, TRUE); - else - AsicSetMacTxRx(pAd, ASIC_MAC_TXRX, TRUE); - - RTUSBBulkReceive(pAd); - RTUSBBulkCmdRspEventReceive(pAd); - - /* restore hardware remote wakeup flag */ - RTMP_IO_READ32(pAd, WLAN_FUN_CTRL, &Value); - printk("\x1b[31m%s: 0x80 %08x\x1b[m\n", __FUNCTION__, Value); - Value &= ~0x80; - RTMP_IO_WRITE32(pAd, WLAN_FUN_CTRL, Value); - - if (pAd->WOW_Cfg.bInBand == FALSE) - { - INT32 Value; - - RTMP_IO_READ32(pAd, WLAN_FUN_CTRL, &Value); - printk("\x1b[31m%s: 0x80 = %x\x1b[m\n", __FUNCTION__, Value); - Value &= ~0x01010000; /* GPIO0(ouput) --> 0(data) */ - RTMP_IO_WRITE32(pAd, WLAN_FUN_CTRL, Value); - } -} -#endif /* NEW_WOW_SUPPORT */ - - VOID MTPciMlmeRadioOn(PRTMP_ADAPTER pAd) { #ifdef CONFIG_AP_SUPPORT diff --git a/hw_ctrl/mt_gpio.c b/hw_ctrl/mt_gpio.c index 93129e0..d2eea32 100755 --- a/hw_ctrl/mt_gpio.c +++ b/hw_ctrl/mt_gpio.c @@ -210,34 +210,21 @@ INT32 GPIODirectionInput(RTMP_ADAPTER *pAd, UINT32 GPIO) INT32 GPIODirectionOuput(RTMP_ADAPTER *pAd, UINT32 GPIO, UINT8 Value) { - UINT32 RemapBase, RemapOffset; - UINT32 RestoreValue; - - RTMP_IO_READ32(pAd, MCU_PCIE_REMAP_2, &RestoreValue); - - GPIOMuxSelect(pAd, GPIO); - - RemapBase = GET_REMAP_2_BASE(GPIO_OE1_SET) << 19; - RemapOffset = GET_REMAP_2_OFFSET(GPIO_OE1_SET); - RTMP_IO_WRITE32(pAd, MCU_PCIE_REMAP_2, RemapBase); - RTMP_IO_WRITE32(pAd, 0x80000 + RemapOffset, (1 << GPIO)); - - if (Value == OUTPUT_HIGH) - { - RemapBase = GET_REMAP_2_BASE(GPIO_DOUT1_SET) << 19; - RemapOffset = GET_REMAP_2_OFFSET(GPIO_DOUT1_SET); - RTMP_IO_WRITE32(pAd, MCU_PCIE_REMAP_2, RemapBase); - RTMP_IO_WRITE32(pAd, 0x80000 + RemapOffset, (1 << GPIO)); - } - else - { - RemapBase = GET_REMAP_2_BASE(GPIO_DOUT1_RESET) << 19; - RemapOffset = GET_REMAP_2_OFFSET(GPIO_DOUT1_RESET); - RTMP_IO_WRITE32(pAd, MCU_PCIE_REMAP_2, RemapBase); - RTMP_IO_WRITE32(pAd, 0x80000 + RemapOffset, (1 << GPIO)); + UINT32 crValue; + + if (Value == OUTPUT_HIGH) { + RTMP_IO_READ32(pAd, GPIO_DOUT1_SET, &crValue); + crValue |= (1 << GPIO); + RTMP_IO_WRITE32(pAd, GPIO_DOUT1_SET, crValue); + } else { + RTMP_IO_READ32(pAd, GPIO_DOUT1_RESET, &crValue); + crValue |= (1 << GPIO); + RTMP_IO_WRITE32(pAd, GPIO_DOUT1_RESET, crValue); } - RTMP_IO_WRITE32(pAd, MCU_PCIE_REMAP_2, RestoreValue); + RTMP_IO_READ32(pAd, GPIO_OE1, &crValue); + crValue |= (1 << GPIO); + RTMP_IO_WRITE32(pAd, GPIO_OE1, crValue); return 0; } diff --git a/include/cfg80211.h b/include/cfg80211.h index 1ca78d8..6e8a796 100755 --- a/include/cfg80211.h +++ b/include/cfg80211.h @@ -26,6 +26,30 @@ #include <linux/ieee80211.h> +#ifdef CFG_CFG80211_VERSION +#define CFG80211_VERSION_CODE CFG_CFG80211_VERSION +#else +#define CFG80211_VERSION_CODE LINUX_VERSION_CODE +#endif + +#if KERNEL_VERSION(4, 7, 0) <= CFG80211_VERSION_CODE +/** + * enum nl80211_band - Frequency band + * @NL80211_BAND_2GHZ: 2.4 GHz ISM band + * @NL80211_BAND_5GHZ: around 5 GHz band (4.9 - 5.7 GHz) + * @NL80211_BAND_60GHZ: around 60 GHz band (58.32 - 64.80 GHz) + * @NUM_NL80211_BANDS: number of bands, avoid using this in userspace + * since newer kernel versions may support more bands + */ +#define KAL_BAND_2GHZ NL80211_BAND_2GHZ +#define KAL_BAND_5GHZ NL80211_BAND_5GHZ +#define KAL_NUM_BANDS NUM_NL80211_BANDS +#else +#define KAL_BAND_2GHZ IEEE80211_BAND_2GHZ +#define KAL_BAND_5GHZ IEEE80211_BAND_5GHZ +#define KAL_NUM_BANDS IEEE80211_NUM_BANDS +#endif + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)) #define random32() prandom_u32() #endif @@ -50,7 +74,7 @@ typedef enum _NDIS_HOSTAPD_STATUS { typedef struct __CFG80211_CB { /* we can change channel/rate information on the fly so we backup them */ - struct ieee80211_supported_band Cfg80211_bands[IEEE80211_NUM_BANDS]; + struct ieee80211_supported_band Cfg80211_bands[KAL_NUM_BANDS]; struct ieee80211_channel *pCfg80211_Channels; struct ieee80211_rate *pCfg80211_Rates; @@ -99,6 +123,32 @@ BOOLEAN CFG80211_Register( struct device *pDev, struct net_device *pNetDev); +/** + * kalCfg80211ScanDone - abstraction of cfg80211_scan_done + * + * @request: the corresponding scan request (sanity checked by callers!) + * @aborted: set to true if the scan was aborted for any reason, + * userspace will be notified of that + * + * Since linux-4.8.y the 2nd parameter is changed from bool to + * struct cfg80211_scan_info, but we don't use all fields yet. + */ +#if KERNEL_VERSION(4, 8, 0) <= CFG80211_VERSION_CODE +static inline void kalCfg80211ScanDone(struct cfg80211_scan_request *request, + bool aborted) +{ + struct cfg80211_scan_info info = { .aborted = aborted }; + + cfg80211_scan_done(request, &info); +} +#else +static inline void kalCfg80211ScanDone(struct cfg80211_scan_request *request, + bool aborted) +{ + cfg80211_scan_done(request, aborted); +} +#endif + #endif /* RT_CFG80211_SUPPORT */ #endif /* __CFG80211_H__ */ diff --git a/include/cfg80211extr.h b/include/cfg80211extr.h index 0533213..98696f5 100755 --- a/include/cfg80211extr.h +++ b/include/cfg80211extr.h @@ -70,10 +70,11 @@ #define RT_CFG80211_LOST_AP_INFORM(__pAd) \ CFG80211_LostApInform((VOID *)__pAd); #endif /*CONFIG_STA_SUPPORT*/ + #ifdef RT_CFG80211_P2P_CONCURRENT_DEVICE -#define RT_CFG80211_LOST_GO_INFORM(__pAd) \ - CFG80211_LostP2pGoInform((VOID *)__pAd); +#define RT_CFG80211_LOST_GO_INFORM(__pAd, _Reason) CFG80211_LostP2pGoInform((VOID *)__pAd, _Reason) #endif /*RT_CFG80211_P2P_CONCURRENT_DEVICE*/ + #define RT_CFG80211_REINIT(__pAd) \ CFG80211_SupBandReInit((VOID *)__pAd); @@ -93,38 +94,38 @@ #ifdef SINGLE_SKU -#define CFG80211_BANDINFO_FILL(__pAd, __pBandInfo) \ -{ \ - (__pBandInfo)->RFICType = __pAd->phy_ctrl.rf_band_cap; \ - (__pBandInfo)->MpduDensity = __pAd->CommonCfg.BACapability.field.MpduDensity;\ - (__pBandInfo)->TxStream = __pAd->CommonCfg.TxStream; \ - (__pBandInfo)->RxStream = __pAd->CommonCfg.RxStream; \ - (__pBandInfo)->MaxTxPwr = __pAd->CommonCfg.DefineMaxTxPwr; \ - if (WMODE_EQUAL(__pAd->CommonCfg.PhyMode, WMODE_B)) \ - (__pBandInfo)->FlgIsBMode = TRUE; \ - else \ - (__pBandInfo)->FlgIsBMode = FALSE; \ - (__pBandInfo)->MaxBssTable = MAX_LEN_OF_BSS_TABLE; \ - (__pBandInfo)->RtsThreshold = pAd->CommonCfg.RtsThreshold; \ - (__pBandInfo)->FragmentThreshold = pAd->CommonCfg.FragmentThreshold; \ - (__pBandInfo)->RetryMaxCnt = 0; \ +#define CFG80211_BANDINFO_FILL(__pAd, __pBandInfo) \ +{\ +(__pBandInfo)->RFICType = (UINT8)(__pAd->phy_ctrl.rf_band_cap); \ + (__pBandInfo)->MpduDensity = (UINT8)(__pAd->CommonCfg.BACapability.field.MpduDensity);\ + (__pBandInfo)->TxStream = (UINT8)(__pAd->CommonCfg.TxStream);\ + (__pBandInfo)->RxStream = (UINT8)(__pAd->CommonCfg.RxStream);\ + (__pBandInfo)->MaxTxPwr = (UINT32)(__pAd->CommonCfg.DefineMaxTxPwr);\ + if (WMODE_EQUAL(__pAd->CommonCfg.PhyMode, WMODE_B)) \ + (__pBandInfo)->FlgIsBMode = (BOOLEAN)(TRUE); \ + else \ + (__pBandInfo)->FlgIsBMode = (BOOLEAN)(FALSE); \ + (__pBandInfo)->MaxBssTable = (UINT32)(MAX_LEN_OF_BSS_TABLE);\ + (__pBandInfo)->RtsThreshold = (UINT16)(pAd->CommonCfg.RtsThreshold);\ + (__pBandInfo)->FragmentThreshold = (UINT16)(pAd->CommonCfg.FragmentThreshold);\ + (__pBandInfo)->RetryMaxCnt = (UINT32)0; \ } #else -#define CFG80211_BANDINFO_FILL(__pAd, __pBandInfo) \ -{ \ - (__pBandInfo)->RFICType = __pAd->phy_ctrl.rf_band_cap; \ - (__pBandInfo)->MpduDensity = __pAd->CommonCfg.BACapability.field.MpduDensity;\ - (__pBandInfo)->TxStream = __pAd->CommonCfg.TxStream; \ - (__pBandInfo)->RxStream = __pAd->CommonCfg.RxStream; \ - (__pBandInfo)->MaxTxPwr = 0; \ - if (WMODE_EQUAL(__pAd->CommonCfg.PhyMode, WMODE_B)) \ - (__pBandInfo)->FlgIsBMode = TRUE; \ - else \ - (__pBandInfo)->FlgIsBMode = FALSE; \ - (__pBandInfo)->MaxBssTable = MAX_LEN_OF_BSS_TABLE; \ - (__pBandInfo)->RtsThreshold = pAd->CommonCfg.RtsThreshold; \ - (__pBandInfo)->FragmentThreshold = pAd->CommonCfg.FragmentThreshold; \ - (__pBandInfo)->RetryMaxCnt = 0; \ +#define CFG80211_BANDINFO_FILL(__pAd, __pBandInfo) \ +{ \ + (__pBandInfo)->RFICType = (UINT8)(__pAd->phy_ctrl.rf_band_cap);\ + (__pBandInfo)->MpduDensity = (UINT8)(__pAd->CommonCfg.BACapability.field.MpduDensity);\ + (__pBandInfo)->TxStream = (UINT8)(__pAd->CommonCfg.TxStream);\ + (__pBandInfo)->RxStream = (UINT8)(__pAd->CommonCfg.RxStream);\ + (__pBandInfo)->MaxTxPwr = (UINT32)0;\ + if (WMODE_EQUAL(__pAd->CommonCfg.PhyMode, WMODE_B)) \ + (__pBandInfo)->FlgIsBMode = (BOOLEAN)(TRUE);\ + else \ + (__pBandInfo)->FlgIsBMode = (BOOLEAN)(FALSE);\ + (__pBandInfo)->MaxBssTable = (UINT32)(MAX_LEN_OF_BSS_TABLE);\ + (__pBandInfo)->RtsThreshold = (UINT16)(pAd->CommonCfg.RtsThreshold);\ + (__pBandInfo)->FragmentThreshold = (UINT16)(pAd->CommonCfg.FragmentThreshold);\ + (__pBandInfo)->RetryMaxCnt = (UINT32)0;\ } #endif /* SINGLE_SKU */ @@ -173,14 +174,14 @@ VOID CFG80211_ConnectResultInform(VOID *pAdCB, UCHAR *pBSSID, VOID CFG80211DRV_PmkidConfig(VOID *pAdOrg, VOID *pData); #ifdef RT_CFG80211_P2P_CONCURRENT_DEVICE -VOID CFG80211_LostP2pGoInform(VOID *pAdCB); +VOID CFG80211_LostP2pGoInform(VOID *pAdCB, UINT16 Reason); #endif /*RT_CFG80211_P2P_CONCURRENT_DEVICE*/ VOID CFG80211_LostApInform(VOID *pAdCB); -INT CFG80211_StaPortSecured(VOID *pAdCB, UCHAR *pMac, UINT flag); +INT CFG80211_StaPortSecured(VOID *pAdCB, const UCHAR *pMac, UINT flag); /* AP Related*/ -INT CFG80211_ApStaDel(VOID *pAdCB, UCHAR *pMac); +INT CFG80211_ApStaDel(VOID *pAdCB, const u8 *pMac); VOID CFG80211_UpdateBeacon(VOID *pAdOrg, UCHAR *beacon_head_buf, UINT32 beacon_head_len, @@ -274,7 +275,7 @@ VOID CFG80211_RFKillStatusUpdate( /* P2P Related */ VOID CFG80211DRV_SetP2pCliAssocIe( VOID *pAdOrg, - VOID *pData, + VOID const *pData, UINT ie_len); VOID CFG80211DRV_P2pClientKeyAdd( @@ -329,6 +330,8 @@ BOOLEAN CFG80211_SyncPacketWmmIe(RTMP_ADAPTER *pAd, VOID *pData, ULONG dataLen); BOOLEAN CFG80211_HandleP2pMgmtFrame(RTMP_ADAPTER *pAd, RX_BLK *pRxBlk, UCHAR OpMode); +INT CFG80211_SetTxNdev(RTMP_ADAPTER *pAd, PNET_DEV pNetdev); + INT CFG80211_SendMgmtFrame(RTMP_ADAPTER *pAd, VOID *pData, ULONG Data); #ifdef RT_CFG80211_P2P_SUPPORT @@ -388,15 +391,17 @@ VOID CFG80211DRV_DisableApInterface(PRTMP_ADAPTER pAd); BOOLEAN CFG80211DRV_OpsVifAdd(VOID *pAdOrg, VOID *pData); #ifdef CFG_TDLS_SUPPORT -BOOLEAN CFG80211DRV_StaTdlsInsertDeletepEntry(VOID *pAdOrg, VOID *pData, UINT Data); +BOOLEAN CFG80211DRV_StaTdlsInsertDeletepEntry(VOID *pAdOrg, const VOID *pData, UINT Data); BOOLEAN CFG80211_HandleTdlsDiscoverRespFrame(RTMP_ADAPTER *pAd, RX_BLK *pRxBlk, UCHAR OpMode); VOID cfg_tdls_send_PeerTrafficIndication(PRTMP_ADAPTER pAd, u8 *peer); VOID cfg_tdls_rcv_PeerTrafficIndication(PRTMP_ADAPTER pAd,u8 dialog_token,u8 *peer); VOID cfg_tdls_rcv_PeerTrafficResponse(PRTMP_ADAPTER pAd,u8 *peer); INT cfg_tdls_search_wcid(PRTMP_ADAPTER pAd, u8 *peer); INT cfg_tdls_search_ValidLinkIndex(PRTMP_ADAPTER pAd, u8 *peer); -INT cfg_tlds_build_frame(PRTMP_ADAPTER pAd,u8 *peer,u8 dialog_token,u8 action_code,u16 status_code - ,const u8 *extra_ies,size_t extra_ies_len,BOOLEAN send_by_tdls_link,u8 tdls_entry_wcid,u8 reason_code); +INT cfg_tlds_build_frame(PRTMP_ADAPTER pAd, const u8 *peer, + u8 dialog_token, u8 action_code, u16 status_code, + const u8 *extra_ies, size_t extra_ies_len, BOOLEAN send_by_tdls_link, + u8 tdls_entry_wcid, u8 reason_code); VOID cfg_tdls_UAPSDP_PsmModeChange(PRTMP_ADAPTER pAd,USHORT PsmOld,USHORT PsmNew); BOOLEAN cfg_tdls_UAPSDP_AsicCanSleep(PRTMP_ADAPTER pAd); INT cfg_tdls_EntryInfo_Display_Proc(PRTMP_ADAPTER pAd, PUCHAR arg); @@ -407,8 +412,10 @@ VOID cfg_tdls_rx_parsing(PRTMP_ADAPTER pAd,RX_BLK *pRxBlk); INT cfg_tdls_chsw_req(PRTMP_ADAPTER pAd,u8 *peer,u8 target_channel,u8 target_bw); INT cfg_tdls_chsw_resp(PRTMP_ADAPTER pAd,u8 *peer,UINT32 ch_sw_time,UINT32 ch_sw_timeout,u8 reason_code); VOID cfg_tdls_prepare_null_frame(PRTMP_ADAPTER pAd,BOOLEAN powersave,UCHAR dir,UCHAR *peerAddr); -VOID cfg_tdls_TunneledProbeRequest(PRTMP_ADAPTER pAd, PUCHAR pMacAddr, const u8 *extra_ies, size_t extra_ies_len); -VOID cfg_tdls_TunneledProbeResponse(PRTMP_ADAPTER pAd, PUCHAR pMacAddr, const u8 *extra_ies, size_t extra_ies_len); +VOID cfg_tdls_TunneledProbeRequest(PRTMP_ADAPTER pAd, const u8 *pMacAddr, + const u8 *extra_ies, size_t extra_ies_len); +VOID cfg_tdls_TunneledProbeResponse(PRTMP_ADAPTER pAd, const u8 *pMacAddr, + const u8 *extra_ies, size_t extra_ies_len); VOID cfg_tdls_auto_teardown(PRTMP_ADAPTER pAd,UCHAR *peerAddr); int cfg_tdls_send_CH_SW_SETUP(RTMP_ADAPTER *ad,UCHAR cmd,UINT8 basech,UINT8 offch,UCHAR bw_base,UCHAR bw_off,UCHAR responder diff --git a/include/chip/mt7603.h b/include/chip/mt7603.h index d2b5967..2d1f603 100755 --- a/include/chip/mt7603.h +++ b/include/chip/mt7603.h @@ -35,6 +35,12 @@ INT Set_MT7603LED_Enhance_Proc(struct _RTMP_ADAPTER *pAd, RTMP_STRING *arg); INT Set_MT7603LED_Behavor_Proc(struct _RTMP_ADAPTER *pAd, RTMP_STRING *arg); #endif /* LED_CONTROL_SUPPORT */ +#ifdef SMART_CARRIER_SENSE_SUPPORT +INT MTSmartCarrierSense(struct _RTMP_ADAPTER *pAd); +/*INT ScsSetDftGainAtScanBegin(struct _RTMP_ADAPTER *pAd); +INT ScsRestoreLastGainAtScanEnd(struct _RTMP_ADAPTER *pAd); +INT ScsQuickCheckToSetDefGain(struct _RTMP_ADAPTER *pAd)*/; +#endif /* SMART_CARRIER_SENSE_SUPPORT */ #endif // __MT7603_H__ diff --git a/include/dot11i_wpa.h b/include/dot11i_wpa.h index a9857db..530d79d 100755 --- a/include/dot11i_wpa.h +++ b/include/dot11i_wpa.h @@ -186,7 +186,7 @@ typedef struct GNU_PACKED _KEY_DESCRIPTER UCHAR KeyId[LEN_KEY_DESC_ID]; UCHAR KeyMic[LEN_KEY_DESC_MIC]; UCHAR KeyDataLen[2]; - UCHAR KeyData[0]; + UCHAR KeyData[]; } KEY_DESCRIPTER, *PKEY_DESCRIPTER; typedef struct GNU_PACKED _EAPOL_PACKET diff --git a/include/mac/mac_mt/mt_mac.h b/include/mac/mac_mt/mt_mac.h index 49eb328..437fab1 100755 --- a/include/mac/mac_mt/mt_mac.h +++ b/include/mac/mac_mt/mt_mac.h @@ -1937,7 +1937,7 @@ typedef INT32 (*TXS_HANDLER)(struct _RTMP_ADAPTER *pAd, CHAR *Data, UINT32 Priv) INT32 InitTxSTypeTable(struct _RTMP_ADAPTER *pAd); INT32 ExitTxSTypeTable(struct _RTMP_ADAPTER *pAd); -INT32 AddTxSTypePerPkt(struct _RTMP_ADAPTER *pAd, UINT32 Pid, UINT8 Format, +INT32 AddTxSTypePerPkt(struct _RTMP_ADAPTER *pAd, UINT8 Pid, UINT8 Format, TXS_HANDLER TxSHandler); INT32 RemoveTxSTypePerPkt(struct _RTMP_ADAPTER *pAd, UINT32 Pid, UINT8 Format); INT32 TxSTypeCtlPerPkt(struct _RTMP_ADAPTER *pAd, UINT32 Pid, UINT8 Format, @@ -1964,7 +1964,7 @@ INT32 TxSTypeCtlPerPktType(struct _RTMP_ADAPTER *pAd, UINT8 Type, UINT8 Subtype, BOOLEAN DumpTxSReport, ULONG DumpTxSReportTimes); UINT8 AddTxSStatus(struct _RTMP_ADAPTER *pAd, UINT8 Type, UINT8 PktPid, UINT8 PktType, UINT8 PktSubType, UINT16 TxRate, UINT32 Priv); -INT32 RemoveTxSStatus(struct _RTMP_ADAPTER *pAd, UINT8 TxSPid, UINT8 *Type, UINT8 *PktPid, +INT32 RemoveTxSStatus(struct _RTMP_ADAPTER *pAd, UINT32 TxSPid, UINT8 *Type, UINT8 *PktPid, UINT8 *PktType, UINT8 *PktSubType, UINT16 *TxRate, UINT32 *Priv); #ifdef CONFIG_TSO_SUPPORT diff --git a/include/mac/mac_mt/mt_mac_usb.h b/include/mac/mac_mt/mt_mac_usb.h index 40364cd..e99b978 100755 --- a/include/mac/mac_mt/mt_mac_usb.h +++ b/include/mac/mac_mt/mt_mac_usb.h @@ -659,19 +659,17 @@ typedef struct _CMD_RSP_CONTEXT #define MT_ADDREMOVE_KEY(_pAd, _AddRemove, _BssIdx, _KeyIdx, _Wcid, _KeyTabFlag, _pCipherKey, _PeerAddr) \ { \ - MT_ASIC_SEC_INFO Info; \ - \ - Info.AddRemove = _AddRemove; \ - Info.BssIdx = _BssIdx; \ - Info.KeyIdx = _KeyIdx; \ - Info.Wcid = _Wcid; \ - Info.KeyTabFlag = _KeyTabFlag; \ - Info.AddRemove = _AddRemove; \ - NdisMoveMemory(&Info.CipherKey, _pCipherKey, sizeof(CIPHER_KEY)); \ - NdisMoveMemory(Info.Addr, _PeerAddr, MAC_ADDR_LEN); \ - \ - RTEnqueueInternalCmd(_pAd, CMDTHREAD_ADDREMOVE_ASIC_KEY, \ - &Info, sizeof(MT_ASIC_SEC_INFO)); \ + MT_ASIC_SEC_INFO Info; \ + \ + Info.AddRemove = (UCHAR)(_AddRemove);\ + Info.BssIdx = (UCHAR)(_BssIdx); \ + Info.KeyIdx = (UCHAR)(_KeyIdx); \ + Info.Wcid = (UCHAR)(_Wcid); \ + Info.KeyTabFlag = (UCHAR)(_KeyTabFlag); \ + NdisMoveMemory(&Info.CipherKey, _pCipherKey, sizeof(CIPHER_KEY));\ + NdisMoveMemory(Info.Addr, _PeerAddr, MAC_ADDR_LEN); \ + RTEnqueueInternalCmd(_pAd, CMDTHREAD_ADDREMOVE_ASIC_KEY,\ + &Info, sizeof(MT_ASIC_SEC_INFO));\ } #define RTMP_OS_IRQ_RELEASE(_pAd, _NetDev) diff --git a/include/mac/mac_mt/wf_phy.h b/include/mac/mac_mt/wf_phy.h index f1462b6..1671c1d 100755 --- a/include/mac/mac_mt/wf_phy.h +++ b/include/mac/mac_mt/wf_phy.h @@ -20,6 +20,13 @@ #define CR_RFINTF_02 WF_PHY_BASE + 0x0208 #define CR_RFINTF_03 WF_PHY_BASE + 0x020C +#ifdef SMART_CARRIER_SENSE_SUPPORT +#define CR_AGC_0 (WF_PHY_BASE + 0x0500) +#define CR_AGC_0_RX1 (WF_PHY_BASE + 0x1500) +#define CR_AGC_3 (WF_PHY_BASE + 0x050c) +#define CR_AGC_3_RX1 (WF_PHY_BASE + 0x150c) +#define CR_CCK_PD_TH (WF_PHY_BASE + 0x0614) +#endif #define RO_AGC_DEBUG_2 WF_PHY_BASE + 0x05A4 #define CR_RXTD_39 WF_PHY_BASE + 0x06F8 diff --git a/include/mcu/andes_mt.h b/include/mcu/andes_mt.h index f4079c1..36b17e9 100755 --- a/include/mcu/andes_mt.h +++ b/include/mcu/andes_mt.h @@ -325,6 +325,9 @@ enum MT_EVENT_TYPE { #define FW_FEATURE_RESET_IV (1 << 3) #define GET_FEATURE_SET_KEY(p) (((p) & FW_FEATURE_SET_KEY_MASK) >> 1) +#define FW_KEEP_ALIVE_ENABLE_MASK 0x80 +#define FW_KEEP_ALIVE_PERIOD_MASK 0xF /* max 15s */ + /* * Erro code for target address/length response */ @@ -623,7 +626,7 @@ typedef struct _BIN_CONTENT_T { UINT8 ucReserved; } BIN_CONTENT_T, *P_BIN_CONTENT_T; -#define EFUSE_CONTENT_BUFFER_SIZE 0xff +#define EFUSE_CONTENT_BUFFER_SIZE 0xf0 typedef struct _EXT_CMD_EFUSE_BUFFER_MODE_T { UINT8 ucSourceMode; UINT8 ucCount; @@ -804,6 +807,8 @@ typedef struct _CMD_PACKET_FILTER_GLOBAL_T { UINT32 PFType; UINT32 FunctionSelect; UINT32 Enable; + UINT8 extParam; + UINT8 resv[3]; } CMD_PACKET_FILTER_GLOBAL_T, *P_CMD_PACKET_FILTER_GLOBAL_T; typedef struct _CMD_PACKET_FILTER_MAGIC_PACKET_T { diff --git a/include/mcu/mt7603_e2_firmware.h b/include/mcu/mt7603_e2_firmware.h index 03eafca..625d5c1 100755 --- a/include/mcu/mt7603_e2_firmware.h +++ b/include/mcu/mt7603_e2_firmware.h @@ -5,53 +5,53 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x46, 0x00, 0x01, 0x00, 0x58, 0x00, 0x02, 0x40, 0x4a, 0x00, 0x00, 0x00, 0x3a, 0x6f, 0xa8, 0xbc, 0x46, 0x6a, 0x00, 0x00, 0x58, 0x63, 0x01, 0x7c, 0x04, 0x83, 0x00, 0x00, 0x54, 0x84, 0x00, 0xff, -0x40, 0x04, 0x00, 0x10, 0x4e, 0x05, 0x00, 0x4c, 0x58, 0x04, 0x00, 0x00, 0x49, 0x00, 0x23, 0x80, -0x10, 0x80, 0x00, 0x02, 0x44, 0x10, 0x00, 0x01, 0x49, 0x00, 0x28, 0xae, 0x44, 0x00, 0x00, 0x18, +0x40, 0x04, 0x00, 0x10, 0x4e, 0x05, 0x00, 0x4c, 0x58, 0x04, 0x00, 0x00, 0x49, 0x00, 0x23, 0x86, +0x10, 0x80, 0x00, 0x02, 0x44, 0x10, 0x00, 0x01, 0x49, 0x00, 0x28, 0xb4, 0x44, 0x00, 0x00, 0x18, 0x49, 0xf8, 0x16, 0x7c, 0x44, 0x50, 0x0f, 0xff, 0x58, 0xa0, 0x00, 0x00, 0x4c, 0x02, 0xc0, 0x0a, 0x44, 0x20, 0xee, 0xee, 0x14, 0x23, 0x00, 0x00, 0x44, 0x00, 0x01, 0x03, 0x48, 0x00, 0x00, 0x36, 0x49, 0xf8, 0x16, 0x3e, 0x44, 0x70, 0x00, 0x00, 0x58, 0x90, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x18, 0x49, 0xf8, 0x10, 0xaa, 0x58, 0x04, 0x80, 0x00, 0x44, 0x10, 0x00, 0x18, -0x50, 0x94, 0x80, 0x0c, 0x58, 0x23, 0x80, 0x00, 0x50, 0x30, 0xff, 0xfc, 0x49, 0x00, 0x32, 0x9a, +0x50, 0x94, 0x80, 0x0c, 0x58, 0x23, 0x80, 0x00, 0x50, 0x30, 0xff, 0xfc, 0x49, 0x00, 0x32, 0xe0, 0x14, 0x84, 0x80, 0x00, 0x14, 0x74, 0x80, 0x02, 0x14, 0x74, 0x80, 0x01, 0x14, 0x73, 0x00, 0x00, 0x58, 0x25, 0x00, 0x00, 0x58, 0x03, 0x80, 0x00, 0x44, 0x10, 0x00, 0x01, 0x58, 0x33, 0x80, 0x00, 0x49, 0xf8, 0x1a, 0x48, 0x58, 0x03, 0x80, 0x00, 0x48, 0x00, 0x00, 0x08, 0x44, 0x30, 0xdd, 0xdd, 0x14, 0x33, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x3a, 0x6f, 0xa8, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xa0, 0xbc, 0x58, 0x60, 0x00, 0x00, 0x49, 0x00, 0x2f, 0x8a, 0x44, 0x50, 0x00, 0x6a, +0x3a, 0x6f, 0xa0, 0xbc, 0x58, 0x60, 0x00, 0x00, 0x49, 0x00, 0x2f, 0xd0, 0x44, 0x50, 0x00, 0x6a, 0x4c, 0x62, 0x80, 0x26, 0x5c, 0xf3, 0x00, 0x6b, 0x4e, 0xf2, 0x00, 0x0c, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x62, 0x80, 0x1a, 0x44, 0x50, 0x00, 0x64, 0x4c, 0x62, 0xc0, 0x7c, 0x48, 0x00, 0x00, 0x10, 0x50, 0x52, 0x80, 0x0d, 0x4c, 0x62, 0x80, 0x28, 0x50, 0x52, 0x80, 0x01, 0x4c, 0x62, 0x80, 0x70, 0x50, 0x52, 0xff, 0xfd, 0x4c, 0x62, 0xc0, 0x6e, 0x48, 0x00, 0x00, 0x22, 0x49, 0xf8, 0x15, 0x9a, -0x48, 0x00, 0x00, 0x68, 0x49, 0x00, 0x4e, 0x6e, 0x48, 0x00, 0x00, 0x64, 0x44, 0x00, 0x00, 0x02, -0x49, 0x00, 0x30, 0x52, 0x2e, 0x87, 0xe5, 0x91, 0x4e, 0x82, 0x00, 0x5c, 0x2e, 0x07, 0xe5, 0x93, -0x2e, 0x17, 0xe5, 0x92, 0x49, 0x00, 0x35, 0x6e, 0x44, 0x00, 0x00, 0x00, 0x3e, 0x07, 0xe5, 0x91, -0x48, 0x00, 0x00, 0x50, 0x49, 0x00, 0x4b, 0x72, 0x48, 0x00, 0x00, 0x4c, 0x2e, 0x77, 0xe2, 0x18, +0x48, 0x00, 0x00, 0x68, 0x49, 0x00, 0x4e, 0xb4, 0x48, 0x00, 0x00, 0x64, 0x44, 0x00, 0x00, 0x02, +0x49, 0x00, 0x30, 0x98, 0x2e, 0x87, 0xe3, 0x31, 0x4e, 0x82, 0x00, 0x5c, 0x2e, 0x07, 0xe3, 0x33, +0x2e, 0x17, 0xe3, 0x32, 0x49, 0x00, 0x35, 0xb4, 0x44, 0x00, 0x00, 0x00, 0x3e, 0x07, 0xe3, 0x31, +0x48, 0x00, 0x00, 0x50, 0x49, 0x00, 0x4b, 0xb8, 0x48, 0x00, 0x00, 0x4c, 0x2e, 0x77, 0xdf, 0xb8, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x72, 0xc0, 0x1e, 0x46, 0x08, 0x00, 0x21, 0x04, 0x50, 0x00, 0x44, -0x44, 0x84, 0x00, 0x00, 0x40, 0x42, 0xa0, 0x02, 0x4e, 0x43, 0x00, 0x3c, 0x2f, 0xe7, 0xe5, 0x80, +0x44, 0x84, 0x00, 0x00, 0x40, 0x42, 0xa0, 0x02, 0x4e, 0x43, 0x00, 0x3c, 0x2f, 0xe7, 0xe3, 0x20, 0x4f, 0xe2, 0x00, 0x38, 0x46, 0x45, 0x00, 0x25, 0x04, 0x32, 0x01, 0xf1, 0x44, 0x50, 0x00, 0x90, -0x54, 0x71, 0x80, 0x90, 0x4c, 0x72, 0x80, 0x28, 0x3e, 0x0f, 0xe5, 0x83, 0x48, 0x00, 0x00, 0x20, -0x3e, 0x88, 0x02, 0x88, 0x00, 0x54, 0x00, 0x00, 0x4e, 0x52, 0x00, 0x08, 0x2e, 0x07, 0xe2, 0x19, +0x54, 0x71, 0x80, 0x90, 0x4c, 0x72, 0x80, 0x28, 0x3e, 0x0f, 0xe3, 0x23, 0x48, 0x00, 0x00, 0x20, +0x3e, 0x88, 0x02, 0x88, 0x00, 0x54, 0x00, 0x00, 0x4e, 0x52, 0x00, 0x08, 0x2e, 0x07, 0xdf, 0xb9, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0xc0, 0x1e, 0x46, 0x45, 0x00, 0x25, 0x04, 0x32, 0x01, 0xf1, -0x44, 0x50, 0x00, 0x90, 0x54, 0x71, 0x80, 0x90, 0x4c, 0x72, 0x80, 0x08, 0x3e, 0x8f, 0xe5, 0x83, -0x00, 0x54, 0x00, 0x00, 0x4e, 0x52, 0x00, 0x0e, 0x3e, 0x0f, 0xe5, 0x80, 0x00, 0x00, 0x00, 0x00, +0x44, 0x50, 0x00, 0x90, 0x54, 0x71, 0x80, 0x90, 0x4c, 0x72, 0x80, 0x08, 0x3e, 0x8f, 0xe3, 0x23, +0x00, 0x54, 0x00, 0x00, 0x4e, 0x52, 0x00, 0x0e, 0x3e, 0x0f, 0xe3, 0x20, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x08, 0x49, 0xf8, 0x37, 0x82, 0x48, 0x00, 0x00, 0x04, 0x49, 0x00, 0x04, 0x4c, -0x49, 0x00, 0x20, 0x9a, 0x49, 0x00, 0x50, 0xd0, 0x58, 0x10, 0x00, 0x00, 0x44, 0x70, 0x00, 0x00, +0x49, 0x00, 0x20, 0xa0, 0x49, 0x00, 0x51, 0x14, 0x58, 0x10, 0x00, 0x00, 0x44, 0x70, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, 0x44, 0x6f, 0xff, 0xff, 0x40, 0x83, 0x84, 0x1b, 0x40, 0x83, 0x04, 0x1a, -0x49, 0x00, 0x2e, 0xb8, 0x44, 0x00, 0x00, 0x02, 0x49, 0xf8, 0x07, 0x10, 0x44, 0x00, 0x00, 0x02, +0x49, 0x00, 0x2e, 0xfa, 0x44, 0x00, 0x00, 0x02, 0x49, 0xf8, 0x07, 0x10, 0x44, 0x00, 0x00, 0x02, 0x49, 0xf8, 0x06, 0xe4, 0x44, 0x00, 0x00, 0x08, 0x49, 0xf8, 0x07, 0x08, 0x44, 0x00, 0x00, 0x08, 0x49, 0xf8, 0x06, 0xdc, 0x58, 0x04, 0x00, 0x00, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x49, 0x00, 0xa7, 0x34, 0x46, 0x28, 0x00, 0x21, +0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x49, 0x00, 0xa6, 0x0a, 0x46, 0x28, 0x00, 0x21, 0x04, 0x01, 0x00, 0x04, 0x46, 0x10, 0x20, 0x00, 0x40, 0x00, 0x04, 0x02, 0x4e, 0x02, 0x00, 0x26, 0x47, 0xc5, 0x00, 0x29, 0x44, 0x00, 0x00, 0x02, 0x44, 0x10, 0x00, 0x00, 0x3e, 0x2e, 0x9c, 0x48, 0x49, 0xf8, 0x2d, 0x78, 0x04, 0x1e, 0x00, 0x08, 0x46, 0x85, 0x00, 0x29, 0x58, 0x00, 0x84, 0x00, 0x14, 0x0e, 0x00, 0x08, 0x04, 0xa4, 0x00, 0x84, 0x46, 0x75, 0x00, 0x22, 0x58, 0x95, 0x00, 0x01, -0x44, 0x50, 0xff, 0xff, 0x3e, 0x4f, 0x6e, 0x10, 0x14, 0x94, 0x00, 0x84, 0x14, 0x53, 0x82, 0x08, -0x3c, 0x4f, 0xff, 0xb9, 0x44, 0x00, 0x00, 0x01, 0x3e, 0x07, 0xe4, 0x78, 0x49, 0x00, 0x00, 0x74, -0x49, 0x00, 0x05, 0x0c, 0x44, 0x00, 0x00, 0x01, 0x49, 0x00, 0x50, 0x6a, 0x49, 0x00, 0x00, 0xa8, -0x46, 0x58, 0x00, 0x21, 0x58, 0x52, 0x81, 0x34, 0x04, 0x82, 0x80, 0x00, 0x3e, 0x0f, 0xc8, 0xf4, +0x44, 0x50, 0xff, 0xff, 0x3e, 0x4f, 0x6f, 0x48, 0x14, 0x94, 0x00, 0x84, 0x14, 0x53, 0x82, 0x08, +0x3c, 0x4f, 0xff, 0xb9, 0x44, 0x00, 0x00, 0x01, 0x3e, 0x07, 0xe2, 0x18, 0x49, 0x00, 0x00, 0x74, +0x49, 0x00, 0x05, 0x0c, 0x44, 0x00, 0x00, 0x01, 0x49, 0x00, 0x50, 0xae, 0x49, 0x00, 0x00, 0xa8, +0x46, 0x58, 0x00, 0x21, 0x58, 0x52, 0x81, 0x34, 0x04, 0x82, 0x80, 0x00, 0x3e, 0x0f, 0xc6, 0xa0, 0x58, 0x74, 0x00, 0x02, 0x14, 0x72, 0x80, 0x00, 0x04, 0x12, 0x80, 0x00, 0x49, 0x00, 0x00, 0xce, 0x46, 0x48, 0x00, 0x21, 0x04, 0x32, 0x00, 0x04, 0x42, 0x61, 0xe4, 0x0b, 0x4e, 0x63, 0x00, 0x04, -0x49, 0x00, 0x03, 0x88, 0x46, 0x78, 0x00, 0x00, 0x3f, 0xce, 0x91, 0xac, 0x2e, 0x17, 0xe4, 0x8c, -0x50, 0x00, 0x80, 0x01, 0x55, 0xe0, 0x00, 0xff, 0x3f, 0xe7, 0xe4, 0x8c, 0x4f, 0xe3, 0x00, 0x12, +0x49, 0x00, 0x03, 0x88, 0x46, 0x78, 0x00, 0x00, 0x3f, 0xce, 0x91, 0xac, 0x2e, 0x17, 0xe2, 0x2c, +0x50, 0x00, 0x80, 0x01, 0x55, 0xe0, 0x00, 0xff, 0x3f, 0xe7, 0xe2, 0x2c, 0x4f, 0xe3, 0x00, 0x12, 0x05, 0xe3, 0x80, 0x80, 0x04, 0x53, 0x80, 0x80, 0x50, 0x22, 0x80, 0x01, 0x40, 0x4f, 0x20, 0x09, 0x40, 0x42, 0x20, 0x08, 0x54, 0x31, 0x00, 0xff, 0x40, 0x61, 0x90, 0x04, 0x14, 0x63, 0x80, 0x80, 0x49, 0xf8, 0x0b, 0xb2, 0x58, 0x60, 0x00, 0x00, 0x4e, 0x02, 0xff, 0xe2, 0x04, 0x10, 0x00, 0x01, @@ -60,26 +60,26 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x49, 0xf8, 0x0c, 0x2c, 0x49, 0xf8, 0x0b, 0x7c, 0x58, 0x60, 0x00, 0x00, 0x4e, 0x03, 0xff, 0xf6, 0x48, 0x00, 0x00, 0x08, 0x58, 0x03, 0x00, 0x00, 0x49, 0xf8, 0x0c, 0x20, 0x48, 0xff, 0xff, 0xc0, 0x49, 0xf8, 0x14, 0x68, 0x58, 0x03, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x3e, 0x2f, 0xc9, 0x14, +0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x3e, 0x2f, 0xc6, 0xc0, 0x44, 0x00, 0x00, 0x02, 0x3e, 0x1e, 0x94, 0xa8, 0x49, 0xf8, 0x05, 0xa4, 0x44, 0x10, 0x00, 0x00, 0x44, 0x00, 0x00, 0x02, 0x49, 0xf8, 0x05, 0xc6, 0x44, 0x00, 0x00, 0x02, 0x49, 0xf8, 0x06, 0x16, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, -0x51, 0xff, 0xff, 0xfc, 0x44, 0x00, 0x00, 0x02, 0x49, 0xf8, 0x05, 0xe0, 0x3e, 0x0f, 0xc9, 0x1c, -0x49, 0x00, 0x00, 0x4c, 0x2e, 0x27, 0xe4, 0x8d, 0x4e, 0x23, 0x00, 0x0c, 0x44, 0x40, 0x00, 0x01, -0x3e, 0x47, 0xe4, 0x8d, 0x44, 0x00, 0x00, 0x01, 0x44, 0x10, 0x00, 0x64, 0x49, 0xf8, 0x33, 0xfa, +0x51, 0xff, 0xff, 0xfc, 0x44, 0x00, 0x00, 0x02, 0x49, 0xf8, 0x05, 0xe0, 0x3e, 0x0f, 0xc6, 0xc8, +0x49, 0x00, 0x00, 0x4c, 0x2e, 0x27, 0xe2, 0x2d, 0x4e, 0x23, 0x00, 0x0c, 0x44, 0x40, 0x00, 0x01, +0x3e, 0x47, 0xe2, 0x2d, 0x44, 0x00, 0x00, 0x01, 0x44, 0x10, 0x00, 0x64, 0x49, 0xf8, 0x33, 0xfa, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, -0x51, 0xff, 0xff, 0xfc, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x14, 0x3e, 0x0f, 0xf9, 0xcc, -0x49, 0xf8, 0x0e, 0xd4, 0x49, 0x00, 0x30, 0x04, 0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, +0x51, 0xff, 0xff, 0xfc, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x14, 0x3e, 0x0f, 0xf7, 0x6c, +0x49, 0xf8, 0x0e, 0xd4, 0x49, 0x00, 0x30, 0x4a, 0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x04, 0x20, 0x80, 0x00, 0x18, 0x01, 0x00, 0x01, 0x44, 0x00, 0x00, 0x00, 0x14, 0x20, 0x80, 0x00, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, 0x58, 0x60, 0x00, 0x00, 0x58, 0x33, 0x00, 0x00, 0x58, 0x00, 0x80, 0x00, 0x58, 0x11, 0x00, 0x00, 0x3e, 0x2e, 0x95, 0x14, 0x49, 0xf8, 0x0c, 0x34, 0x44, 0x20, 0x00, 0x00, 0x38, 0x23, 0x00, 0x08, 0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x1f, 0x94, 0x3c, 0x3b, 0xff, 0xfc, 0xbc, -0x51, 0xff, 0xff, 0xf8, 0x2e, 0x27, 0xe1, 0xc0, 0x44, 0x30, 0x00, 0x01, 0x58, 0x10, 0x00, 0x00, +0x51, 0xff, 0xff, 0xf8, 0x2e, 0x27, 0xdf, 0x60, 0x44, 0x30, 0x00, 0x01, 0x58, 0x10, 0x00, 0x00, 0x4c, 0x21, 0xc0, 0x0a, 0x50, 0x1f, 0x80, 0x0c, 0x14, 0x1f, 0x80, 0x01, 0x49, 0xf8, 0x0e, 0x50, 0x48, 0x00, 0x00, 0x18, 0x44, 0x00, 0x00, 0x02, 0x4c, 0x20, 0x40, 0x14, 0x50, 0x2f, 0x80, 0x0c, -0x3e, 0x0f, 0xe4, 0x9c, 0x14, 0x2f, 0x80, 0x01, 0x49, 0xff, 0xff, 0xca, 0x3e, 0x0f, 0xe4, 0x9c, -0x49, 0xf8, 0x0f, 0x36, 0x58, 0x10, 0x00, 0x00, 0x3e, 0x0f, 0xe4, 0x9c, 0x49, 0x00, 0x31, 0x28, +0x3e, 0x0f, 0xe2, 0x3c, 0x14, 0x2f, 0x80, 0x01, 0x49, 0xff, 0xff, 0xca, 0x3e, 0x0f, 0xe2, 0x3c, +0x49, 0xf8, 0x0f, 0x36, 0x58, 0x10, 0x00, 0x00, 0x3e, 0x0f, 0xe2, 0x3c, 0x49, 0x00, 0x31, 0x6e, 0x51, 0xff, 0x80, 0x08, 0x3b, 0xff, 0xfc, 0x84, 0x51, 0xff, 0x80, 0x14, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xec, 0x44, 0x60, 0x00, 0x00, 0x54, 0x21, 0x00, 0xff, 0x54, 0x70, 0x80, 0xff, 0x54, 0x41, 0x80, 0xff, 0x58, 0x13, 0x00, 0x00, 0x58, 0x31, 0x00, 0x00, @@ -116,12 +116,12 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x58, 0x33, 0x00, 0x00, 0x58, 0x52, 0x00, 0x00, 0x14, 0x7f, 0x80, 0x03, 0x14, 0x6f, 0x80, 0x00, 0x14, 0x6f, 0x80, 0x01, 0x14, 0x6f, 0x80, 0x02, 0x49, 0x00, 0x1a, 0x42, 0x51, 0xff, 0x80, 0x14, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, 0x58, 0x60, 0x00, 0x00, -0x54, 0x10, 0x80, 0xff, 0x49, 0xff, 0xff, 0xd8, 0x42, 0x23, 0x40, 0x08, 0x3e, 0x0f, 0xe5, 0x64, -0x3e, 0x1e, 0x9a, 0x18, 0x49, 0x00, 0x4a, 0xf6, 0x3e, 0x0f, 0xe5, 0x64, 0x44, 0x10, 0x13, 0x88, -0x49, 0x00, 0x4c, 0x00, 0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, +0x54, 0x10, 0x80, 0xff, 0x49, 0xff, 0xff, 0xd8, 0x42, 0x23, 0x40, 0x08, 0x3e, 0x0f, 0xe3, 0x04, +0x3e, 0x1e, 0x9a, 0x18, 0x49, 0x00, 0x4b, 0x3c, 0x3e, 0x0f, 0xe3, 0x04, 0x44, 0x10, 0x13, 0x88, +0x49, 0x00, 0x4c, 0x46, 0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, 0x54, 0x10, 0x80, 0xff, 0x58, 0x60, 0x00, 0x00, 0x49, 0xff, 0xff, 0xbe, 0x44, 0x03, 0x00, 0x00, -0x40, 0x23, 0x00, 0x04, 0x3e, 0x1e, 0x9a, 0x18, 0x3e, 0x0f, 0xe5, 0x64, 0x49, 0x00, 0x4a, 0xda, -0x3e, 0x0f, 0xe5, 0x64, 0x44, 0x10, 0x13, 0x88, 0x49, 0x00, 0x4b, 0xe4, 0x3a, 0x6f, 0x98, 0x84, +0x40, 0x23, 0x00, 0x04, 0x3e, 0x1e, 0x9a, 0x18, 0x3e, 0x0f, 0xe3, 0x04, 0x49, 0x00, 0x4b, 0x20, +0x3e, 0x0f, 0xe3, 0x04, 0x44, 0x10, 0x13, 0x88, 0x49, 0x00, 0x4c, 0x2a, 0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x54, 0x30, 0x80, 0xff, 0x54, 0x41, 0x00, 0xff, 0x44, 0x10, 0x00, 0x03, 0x44, 0x20, 0x00, 0x07, 0x49, 0x00, 0x1a, 0x90, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, @@ -132,8 +132,8 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x40, 0x7f, 0x00, 0x02, 0x14, 0x74, 0x00, 0x00, 0x40, 0xa0, 0x98, 0x08, 0x05, 0xc4, 0x00, 0x00, 0x44, 0x70, 0x00, 0x00, 0x40, 0x95, 0x70, 0x04, 0x14, 0x94, 0x00, 0x00, 0x48, 0x00, 0x00, 0x90, 0x04, 0x03, 0x00, 0x00, 0x04, 0x53, 0x00, 0x01, 0x5c, 0xf0, 0x00, 0x04, 0x4e, 0xf2, 0x00, 0x82, -0x42, 0x42, 0xf8, 0x0b, 0x56, 0x12, 0x00, 0x01, 0x3e, 0x17, 0xe5, 0x7d, 0x40, 0x22, 0xfc, 0x09, -0x3e, 0x47, 0xe5, 0x7c, 0x3e, 0x27, 0xe5, 0x7e, 0x54, 0x32, 0x80, 0xff, 0x45, 0xe0, 0x00, 0x05, +0x42, 0x42, 0xf8, 0x0b, 0x56, 0x12, 0x00, 0x01, 0x3e, 0x17, 0xe3, 0x1d, 0x40, 0x22, 0xfc, 0x09, +0x3e, 0x47, 0xe3, 0x1c, 0x3e, 0x27, 0xe3, 0x1e, 0x54, 0x32, 0x80, 0xff, 0x45, 0xe0, 0x00, 0x05, 0x4c, 0x3f, 0x00, 0x52, 0x5c, 0xf1, 0x80, 0x06, 0x4e, 0xf2, 0x00, 0x1c, 0x44, 0x50, 0x00, 0x02, 0x4c, 0x32, 0x80, 0x3c, 0x5c, 0xf1, 0x80, 0x03, 0x4e, 0xf2, 0x00, 0x0a, 0x4e, 0x32, 0x00, 0x2e, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x32, 0xc0, 0x5e, 0x48, 0x00, 0x00, 0x2c, 0x44, 0x50, 0x00, 0x03, @@ -153,17 +153,17 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, 0x40, 0x10, 0x40, 0x09, 0x40, 0x60, 0x00, 0x13, 0x54, 0x10, 0x80, 0xff, 0x44, 0x00, 0x00, 0x02, 0x4c, 0x10, 0x00, 0x20, 0x44, 0x50, 0x00, 0x03, 0x4c, 0x12, 0x80, 0x26, 0x44, 0x50, 0x00, 0x01, -0x4c, 0x12, 0xc0, 0x28, 0x2e, 0x17, 0xe5, 0x7d, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xfe, 0x8a, -0x42, 0x23, 0x44, 0x08, 0x3e, 0x0f, 0xe5, 0x64, 0x3e, 0x1e, 0x9a, 0x18, 0x49, 0x00, 0x49, 0xca, -0x3e, 0x0f, 0xe5, 0x64, 0x44, 0x10, 0x0b, 0xb8, 0x49, 0x00, 0x4a, 0xd4, 0x48, 0x00, 0x00, 0x12, -0x2e, 0x17, 0xe5, 0x7c, 0x2e, 0x27, 0xe5, 0x7e, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xfe, 0xec, -0x48, 0x00, 0x00, 0x08, 0x2e, 0x17, 0xe5, 0x7d, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xfe, 0x6a, +0x4c, 0x12, 0xc0, 0x28, 0x2e, 0x17, 0xe3, 0x1d, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xfe, 0x8a, +0x42, 0x23, 0x44, 0x08, 0x3e, 0x0f, 0xe3, 0x04, 0x3e, 0x1e, 0x9a, 0x18, 0x49, 0x00, 0x4a, 0x10, +0x3e, 0x0f, 0xe3, 0x04, 0x44, 0x10, 0x0b, 0xb8, 0x49, 0x00, 0x4b, 0x1a, 0x48, 0x00, 0x00, 0x12, +0x2e, 0x17, 0xe3, 0x1c, 0x2e, 0x27, 0xe3, 0x1e, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xfe, 0xec, +0x48, 0x00, 0x00, 0x08, 0x2e, 0x17, 0xe3, 0x1d, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xfe, 0x6a, 0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xfc, -0x46, 0x68, 0x00, 0x23, 0x58, 0x63, 0x00, 0x80, 0x04, 0x13, 0x00, 0x00, 0x3e, 0x0f, 0xc9, 0x28, +0x46, 0x68, 0x00, 0x23, 0x58, 0x63, 0x00, 0x80, 0x04, 0x13, 0x00, 0x00, 0x3e, 0x0f, 0xc6, 0xd4, 0x49, 0xff, 0xfd, 0x54, 0x04, 0x33, 0x00, 0x00, 0x46, 0x2f, 0xf8, 0xff, 0x58, 0x21, 0x0f, 0xff, -0x40, 0x11, 0x88, 0x02, 0x14, 0x13, 0x00, 0x00, 0x3e, 0x0f, 0xc9, 0x40, 0x04, 0x13, 0x00, 0x00, +0x40, 0x11, 0x88, 0x02, 0x14, 0x13, 0x00, 0x00, 0x3e, 0x0f, 0xc6, 0xec, 0x04, 0x13, 0x00, 0x00, 0x49, 0xff, 0xfd, 0x44, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x3e, 0x0f, 0xc9, 0x54, 0x49, 0xff, 0xfd, 0x36, +0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x3e, 0x0f, 0xc7, 0x00, 0x49, 0xff, 0xfd, 0x36, 0x46, 0x18, 0x00, 0x21, 0x04, 0x30, 0x80, 0x4c, 0x44, 0x00, 0x00, 0x00, 0x42, 0x21, 0xbc, 0x08, 0x14, 0x20, 0x80, 0x4c, 0x58, 0x40, 0x00, 0x00, 0x58, 0x20, 0x00, 0x00, 0x3e, 0x3e, 0x9b, 0x34, 0x58, 0x10, 0x00, 0x00, 0x49, 0xf8, 0x04, 0xaa, 0x44, 0x00, 0x00, 0x00, 0x58, 0x10, 0x00, 0x00, @@ -171,8 +171,8 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x44, 0x00, 0x00, 0x00, 0x49, 0xf8, 0x03, 0xb6, 0x44, 0x10, 0x00, 0x78, 0x44, 0x20, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, 0x49, 0xf8, 0x30, 0xbe, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x3e, 0x0f, 0xc9, 0x78, -0x49, 0xff, 0xfc, 0xf4, 0x49, 0x00, 0x2c, 0xb6, 0x44, 0x00, 0x00, 0x00, 0x49, 0x00, 0x4c, 0x78, +0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x3e, 0x0f, 0xc7, 0x24, +0x49, 0xff, 0xfc, 0xf4, 0x49, 0x00, 0x2c, 0xfc, 0x44, 0x00, 0x00, 0x00, 0x49, 0x00, 0x4c, 0xbc, 0x46, 0x08, 0x00, 0x21, 0x04, 0x20, 0x00, 0x4d, 0x42, 0x41, 0x04, 0x09, 0x14, 0x40, 0x00, 0x4d, 0x58, 0x10, 0x00, 0x00, 0x04, 0x30, 0x80, 0x40, 0x40, 0x21, 0x88, 0x09, 0x40, 0x21, 0x08, 0x08, 0x14, 0x20, 0x80, 0x40, 0x04, 0x40, 0x00, 0x4c, 0x46, 0x58, 0x10, 0x80, 0x42, 0x32, 0x78, 0x08, @@ -180,11 +180,11 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x44, 0x30, 0x22, 0x01, 0x44, 0x00, 0x19, 0x71, 0x14, 0x42, 0x80, 0x0d, 0x14, 0x31, 0x00, 0x0c, 0x14, 0x00, 0x80, 0x0e, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x46, 0x1a, 0x00, 0x00, 0x54, 0x00, 0x00, 0xff, 0x04, 0x20, 0x80, 0x00, 0x4e, 0x02, 0x00, 0x2a, -0x58, 0x21, 0x00, 0x01, 0x14, 0x20, 0x80, 0x00, 0x2e, 0x07, 0xe4, 0x78, 0x4e, 0x03, 0x00, 0x04, -0x48, 0x00, 0x00, 0x0a, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0xc0, 0x20, 0x2e, 0x47, 0xe1, 0xc1, +0x58, 0x21, 0x00, 0x01, 0x14, 0x20, 0x80, 0x00, 0x2e, 0x07, 0xe2, 0x18, 0x4e, 0x03, 0x00, 0x04, +0x48, 0x00, 0x00, 0x0a, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0xc0, 0x20, 0x2e, 0x47, 0xdf, 0x61, 0x4c, 0x40, 0x40, 0x14, 0x46, 0x05, 0x00, 0x00, 0x58, 0x00, 0x05, 0x94, 0x04, 0x50, 0x00, 0x00, 0x58, 0x42, 0x81, 0x00, 0x14, 0x40, 0x00, 0x00, 0x04, 0x30, 0x00, 0x00, 0x42, 0x11, 0xa0, 0x09, -0x14, 0x10, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0a, 0x3e, 0x07, 0xe5, 0x7f, 0x48, 0x00, 0x00, 0x06, +0x14, 0x10, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0a, 0x3e, 0x07, 0xe3, 0x1f, 0x48, 0x00, 0x00, 0x06, 0x42, 0x31, 0x00, 0x09, 0x14, 0x30, 0x80, 0x00, 0x4a, 0x00, 0x78, 0x20, 0x46, 0x05, 0x00, 0x29, 0x04, 0x20, 0x00, 0x84, 0x58, 0x11, 0x00, 0x01, 0x14, 0x10, 0x00, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0x3c, 0x46, 0x05, 0x00, 0x22, 0x58, 0x00, 0x08, 0x04, 0x44, 0x10, 0x00, 0x00, @@ -204,10 +204,10 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x4a, 0x00, 0x78, 0x20, 0x46, 0x45, 0x00, 0x22, 0x04, 0x22, 0x00, 0x40, 0x46, 0x30, 0x04, 0x00, 0x40, 0x21, 0x0c, 0x02, 0x4e, 0x22, 0x00, 0x04, 0x44, 0x20, 0x00, 0x01, 0x14, 0x20, 0x80, 0x00, 0x2e, 0x10, 0x00, 0x03, 0x4e, 0x12, 0x00, 0x0a, 0x44, 0x50, 0x00, 0x01, 0x14, 0x50, 0x00, 0x00, -0x3e, 0x57, 0xe5, 0x81, 0x48, 0x00, 0x00, 0x04, 0x14, 0x10, 0x00, 0x00, 0x4a, 0x00, 0x78, 0x20, +0x3e, 0x57, 0xe3, 0x21, 0x48, 0x00, 0x00, 0x04, 0x14, 0x10, 0x00, 0x00, 0x4a, 0x00, 0x78, 0x20, 0x02, 0x30, 0x80, 0x03, 0x02, 0x20, 0x80, 0x01, 0x02, 0x00, 0x80, 0x02, 0x44, 0x10, 0x00, 0x01, 0x3c, 0x3e, 0x00, 0x04, 0x4c, 0x20, 0xc0, 0x08, 0x5c, 0xf0, 0x00, 0x02, 0x4e, 0xf2, 0x00, 0x04, -0x3e, 0x07, 0xe5, 0x82, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xb4, +0x3e, 0x07, 0xe3, 0x22, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xb4, 0x3e, 0x5e, 0xa0, 0xf4, 0x45, 0xc0, 0x54, 0xd0, 0x40, 0x42, 0xf0, 0x01, 0x14, 0x4f, 0x80, 0x0e, 0x3e, 0x8e, 0xa1, 0x70, 0x44, 0x90, 0x6a, 0x4c, 0x46, 0x40, 0x20, 0x00, 0x14, 0x4f, 0x80, 0x02, 0x40, 0x74, 0x24, 0x01, 0x3e, 0x1e, 0x9b, 0xdc, 0x44, 0x20, 0x31, 0x5c, 0x3e, 0x3e, 0xa1, 0xfc, @@ -243,18 +243,18 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x14, 0x64, 0x00, 0x13, 0x15, 0xc3, 0x80, 0x14, 0x14, 0x22, 0x80, 0x15, 0x44, 0x20, 0x5c, 0xd4, 0x14, 0x22, 0x00, 0x16, 0x14, 0x01, 0x80, 0x17, 0x44, 0x00, 0x00, 0xff, 0x14, 0x00, 0x80, 0x00, 0x51, 0xff, 0x80, 0x4c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, -0x51, 0xff, 0xff, 0xfc, 0x44, 0x60, 0x00, 0x00, 0x3e, 0x67, 0xe1, 0xc1, 0x49, 0xf8, 0x2d, 0xa0, +0x51, 0xff, 0xff, 0xfc, 0x44, 0x60, 0x00, 0x00, 0x3e, 0x67, 0xdf, 0x61, 0x49, 0xf8, 0x2d, 0xa0, 0x46, 0x45, 0x00, 0x29, 0x04, 0x02, 0x00, 0x09, 0x46, 0x10, 0x01, 0x15, 0x58, 0x50, 0x04, 0x00, -0x14, 0x52, 0x00, 0x09, 0x44, 0x30, 0x00, 0x01, 0x2e, 0x07, 0xe5, 0x7f, 0x44, 0x50, 0x00, 0x01, -0x3e, 0x37, 0xe1, 0xc1, 0x4c, 0x02, 0xc0, 0x14, 0x47, 0xe5, 0x00, 0x00, 0x59, 0xef, 0x05, 0x94, +0x14, 0x52, 0x00, 0x09, 0x44, 0x30, 0x00, 0x01, 0x2e, 0x07, 0xe3, 0x1f, 0x44, 0x50, 0x00, 0x01, +0x3e, 0x37, 0xdf, 0x61, 0x4c, 0x02, 0xc0, 0x14, 0x47, 0xe5, 0x00, 0x00, 0x59, 0xef, 0x05, 0x94, 0x04, 0x0f, 0x00, 0x00, 0x58, 0x50, 0x01, 0x00, 0x14, 0x5f, 0x00, 0x00, 0x04, 0x4f, 0x00, 0x00, -0x42, 0x22, 0x20, 0x09, 0x14, 0x2f, 0x00, 0x00, 0x3e, 0x67, 0xe5, 0x7f, 0x51, 0xff, 0x80, 0x04, +0x42, 0x22, 0x20, 0x09, 0x14, 0x2f, 0x00, 0x00, 0x3e, 0x67, 0xe3, 0x1f, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x44, 0x00, 0x00, 0x00, 0x44, 0x10, 0x00, 0x08, 0x3e, 0x28, 0x07, 0x00, 0x49, 0xf8, 0x27, 0x5a, -0x2e, 0x07, 0xe5, 0x81, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0xc0, 0x1a, 0x46, 0x55, 0x00, 0x22, +0x2e, 0x07, 0xe3, 0x21, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0xc0, 0x1a, 0x46, 0x55, 0x00, 0x22, 0x58, 0x52, 0x81, 0x00, 0x05, 0xe2, 0x80, 0x00, 0x04, 0x02, 0x80, 0x00, 0x42, 0x30, 0x7c, 0x08, 0x14, 0x32, 0x80, 0x00, 0x04, 0x22, 0x80, 0x00, 0x44, 0x30, 0x00, 0x00, 0x42, 0x01, 0x7c, 0x09, -0x14, 0x02, 0x80, 0x00, 0x15, 0xe2, 0x80, 0x00, 0x3e, 0x37, 0xe5, 0x81, 0x3e, 0x08, 0x07, 0x00, +0x14, 0x02, 0x80, 0x00, 0x15, 0xe2, 0x80, 0x00, 0x3e, 0x37, 0xe3, 0x21, 0x3e, 0x08, 0x07, 0x00, 0x00, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x00, 0x54, 0x10, 0x80, 0x60, 0x14, 0x20, 0x00, 0x0e, 0x4e, 0x12, 0x00, 0x08, 0x44, 0x50, 0x00, 0x40, 0x4c, 0x12, 0xc0, 0x14, 0x48, 0x00, 0x00, 0x0a, 0x58, 0x10, 0x00, 0x00, 0x50, 0x00, 0x00, 0x28, 0x49, 0xf8, 0x23, 0xfa, 0x48, 0x00, 0x00, 0x10, @@ -269,51 +269,51 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x44, 0x30, 0x00, 0x03, 0x10, 0x23, 0x00, 0x20, 0x14, 0x33, 0x00, 0x03, 0x14, 0x23, 0x00, 0x06, 0x58, 0x04, 0x00, 0x00, 0x48, 0x00, 0x00, 0x04, 0x44, 0x00, 0x00, 0x01, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x46, 0x00, 0x01, 0x15, -0x2e, 0x17, 0xe5, 0x80, 0x4e, 0x12, 0x00, 0x38, 0x44, 0x40, 0x00, 0x00, 0x3e, 0x47, 0xe5, 0x80, +0x2e, 0x17, 0xe3, 0x20, 0x4e, 0x12, 0x00, 0x38, 0x44, 0x40, 0x00, 0x00, 0x3e, 0x47, 0xe3, 0x20, 0x49, 0xf8, 0x2f, 0xf2, 0x49, 0xf8, 0x30, 0x34, 0x46, 0x38, 0x00, 0x21, 0x04, 0x21, 0x80, 0x4d, -0x54, 0x01, 0x00, 0x02, 0x4e, 0x02, 0x00, 0x16, 0x2e, 0x57, 0xe2, 0x18, 0x44, 0x10, 0x00, 0x01, -0x4c, 0x50, 0x80, 0x12, 0x2e, 0x57, 0xe2, 0x19, 0x4c, 0x50, 0x80, 0x0e, 0x2e, 0x17, 0xfa, 0xbc, +0x54, 0x01, 0x00, 0x02, 0x4e, 0x02, 0x00, 0x16, 0x2e, 0x57, 0xdf, 0xb8, 0x44, 0x10, 0x00, 0x01, +0x4c, 0x50, 0x80, 0x12, 0x2e, 0x57, 0xdf, 0xb9, 0x4c, 0x50, 0x80, 0x0e, 0x2e, 0x17, 0xf8, 0x5c, 0x4e, 0x13, 0x00, 0x0a, 0x3c, 0x4d, 0xff, 0xb9, 0x4b, 0xe0, 0x10, 0x01, 0x48, 0x00, 0x00, 0x04, 0x49, 0xf8, 0x0e, 0xbc, 0x47, 0xe8, 0x00, 0x21, 0x59, 0xef, 0x01, 0x00, 0x04, 0x3f, 0x00, 0x00, 0x58, 0x11, 0x80, 0x10, 0x14, 0x1f, 0x00, 0x00, 0x04, 0x2f, 0x00, 0x00, 0x58, 0x01, 0x02, 0x00, 0x14, 0x0f, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xa0, 0xbc, 0x2e, 0x07, 0xe5, 0x80, 0x4e, 0x03, 0x00, 0xa6, 0x2e, 0x20, 0x00, 0x26, +0x3a, 0x6f, 0xa0, 0xbc, 0x2e, 0x07, 0xe3, 0x20, 0x4e, 0x03, 0x00, 0xa6, 0x2e, 0x20, 0x00, 0x26, 0x4e, 0x22, 0x00, 0xa2, 0x44, 0x00, 0x00, 0x04, 0x49, 0xf7, 0xff, 0x30, 0x46, 0x85, 0x00, 0x25, 0x58, 0x34, 0x00, 0x00, 0x58, 0x11, 0x80, 0x00, 0x46, 0x20, 0x01, 0x20, 0x46, 0x00, 0x20, 0x20, 0x58, 0x70, 0x80, 0x00, 0x58, 0x21, 0x00, 0x12, 0x58, 0x00, 0x02, 0x02, 0x44, 0x60, 0x00, 0x0f, 0x44, 0x50, 0x00, 0x05, 0x14, 0x61, 0x81, 0xec, 0x14, 0x20, 0x81, 0xed, 0x14, 0x04, 0x01, 0xef, -0x14, 0x53, 0x81, 0xf0, 0x2e, 0x77, 0xe5, 0x83, 0x4e, 0x73, 0x00, 0x1e, 0x58, 0x60, 0x80, 0x00, +0x14, 0x53, 0x81, 0xf0, 0x2e, 0x77, 0xe3, 0x23, 0x4e, 0x73, 0x00, 0x1e, 0x58, 0x60, 0x80, 0x00, 0x48, 0x00, 0x00, 0x10, 0x44, 0x50, 0x00, 0x05, 0x4c, 0x72, 0xc0, 0x06, 0x44, 0x00, 0x00, 0x04, 0x48, 0x00, 0x00, 0x70, 0x49, 0xf8, 0x03, 0x18, 0x50, 0x43, 0x80, 0x01, 0x54, 0x72, 0x00, 0xff, 0x04, 0x13, 0x01, 0xf1, 0x44, 0x20, 0x00, 0x90, 0x54, 0x50, 0x80, 0x90, 0x44, 0x00, 0x00, 0x01, 0x4c, 0x51, 0x7f, 0xea, 0x47, 0xe8, 0x00, 0x21, 0x59, 0xef, 0x01, 0x00, 0x04, 0x0f, 0x00, 0x00, 0x42, 0x10, 0x24, 0x09, 0x14, 0x1f, 0x00, 0x00, 0x04, 0x2f, 0x00, 0x00, 0x42, 0x51, 0x10, 0x09, 0x14, 0x5f, 0x00, 0x00, 0x49, 0x00, 0x00, 0x78, 0x44, 0x00, 0x00, 0x01, 0x44, 0x10, 0x00, 0x75, -0x44, 0x20, 0x00, 0x00, 0x49, 0xf8, 0x2d, 0x06, 0x2e, 0x07, 0xe5, 0x82, 0x4e, 0x02, 0x00, 0x3c, -0x2f, 0xe7, 0xe5, 0x83, 0x4f, 0xe3, 0x00, 0x38, 0x46, 0x15, 0x00, 0x29, 0x05, 0xe0, 0x80, 0x84, +0x44, 0x20, 0x00, 0x00, 0x49, 0xf8, 0x2d, 0x06, 0x2e, 0x07, 0xe3, 0x22, 0x4e, 0x02, 0x00, 0x3c, +0x2f, 0xe7, 0xe3, 0x23, 0x4f, 0xe3, 0x00, 0x38, 0x46, 0x15, 0x00, 0x29, 0x05, 0xe0, 0x80, 0x84, 0x42, 0x3f, 0x00, 0x09, 0x14, 0x30, 0x80, 0x84, 0x46, 0x05, 0x00, 0x25, 0x58, 0x00, 0x08, 0x68, 0x04, 0x50, 0x00, 0x00, 0x43, 0xe2, 0xc4, 0x08, 0x15, 0xe0, 0x00, 0x00, 0x04, 0x30, 0x00, 0x00, 0x42, 0x11, 0x88, 0x09, 0x14, 0x10, 0x00, 0x00, 0x44, 0x4f, 0xff, 0xcf, 0x04, 0x50, 0x00, 0x00, 0x43, 0xe2, 0xcc, 0x08, 0x15, 0xe0, 0x00, 0x00, 0x04, 0x30, 0x00, 0x00, 0x40, 0x11, 0x90, 0x02, 0x14, 0x10, 0x00, 0x00, 0x04, 0x50, 0x00, 0x00, 0x43, 0xe2, 0xc8, 0x08, 0x15, 0xe0, 0x00, 0x00, 0x44, 0x50, 0x00, 0x01, 0x04, 0x30, 0x00, 0x00, 0x42, 0x11, 0x8c, 0x09, 0x14, 0x10, 0x00, 0x00, -0x3e, 0x57, 0xe5, 0x83, 0x44, 0x20, 0x00, 0x01, 0x3e, 0x27, 0xe5, 0x80, 0x44, 0x00, 0x00, 0x04, +0x3e, 0x57, 0xe3, 0x23, 0x44, 0x20, 0x00, 0x01, 0x3e, 0x27, 0xe3, 0x20, 0x44, 0x00, 0x00, 0x04, 0x49, 0xf7, 0xfe, 0xbc, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, 0x2e, 0x00, 0x02, 0x85, 0x4e, 0x03, 0x00, 0x1c, 0x2e, 0x20, 0x02, 0x86, 0x4e, 0x23, 0x00, 0x18, 0x2e, 0x60, 0x02, 0x87, 0x4e, 0x63, 0x00, 0x14, 0x44, 0x00, 0x00, 0x01, 0x49, 0xf8, 0x0f, 0x60, 0x44, 0x00, 0x00, 0x04, 0x49, 0xf8, 0x02, 0x90, 0x3e, 0x60, 0x02, 0x88, 0x46, 0x58, 0x00, 0x21, 0x04, 0x12, 0x80, 0x40, 0x42, 0x00, 0x9c, 0x09, 0x14, 0x02, 0x80, 0x40, 0x3a, 0x6f, 0x98, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x2e, 0x07, 0xe2, 0x18, -0x44, 0x50, 0x00, 0x02, 0x4c, 0x02, 0xc0, 0x0c, 0x2e, 0x57, 0xe2, 0x19, 0x4c, 0x50, 0x40, 0x08, -0x2e, 0x47, 0xfa, 0xbc, 0x4e, 0x43, 0x00, 0x04, 0x49, 0xff, 0xff, 0xca, 0x2f, 0xe0, 0x02, 0x88, -0x4f, 0xe2, 0x00, 0x10, 0x2e, 0x57, 0xe2, 0x18, 0x44, 0x10, 0x00, 0x01, 0x4c, 0x50, 0x80, 0x0a, -0x2e, 0x57, 0xe2, 0x19, 0x4c, 0x50, 0x80, 0x06, 0x2e, 0x57, 0xfa, 0xbc, 0x4e, 0x52, 0x00, 0x04, +0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x2e, 0x07, 0xdf, 0xb8, +0x44, 0x50, 0x00, 0x02, 0x4c, 0x02, 0xc0, 0x0c, 0x2e, 0x57, 0xdf, 0xb9, 0x4c, 0x50, 0x40, 0x08, +0x2e, 0x47, 0xf8, 0x5c, 0x4e, 0x43, 0x00, 0x04, 0x49, 0xff, 0xff, 0xca, 0x2f, 0xe0, 0x02, 0x88, +0x4f, 0xe2, 0x00, 0x10, 0x2e, 0x57, 0xdf, 0xb8, 0x44, 0x10, 0x00, 0x01, 0x4c, 0x50, 0x80, 0x0a, +0x2e, 0x57, 0xdf, 0xb9, 0x4c, 0x50, 0x80, 0x06, 0x2e, 0x57, 0xf8, 0x5c, 0x4e, 0x52, 0x00, 0x04, 0x49, 0xf8, 0x2e, 0xa2, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x2e, 0x17, 0xe2, 0x55, 0x40, 0x20, 0x80, 0x10, 0x4e, 0x25, 0x00, 0x06, 0x44, 0x00, 0x00, 0x3c, -0x48, 0x00, 0x00, 0x1c, 0x2e, 0x07, 0xe2, 0x56, 0x40, 0x30, 0x00, 0x10, 0x4e, 0x34, 0x00, 0x14, +0x2e, 0x17, 0xdf, 0xf5, 0x40, 0x20, 0x80, 0x10, 0x4e, 0x25, 0x00, 0x06, 0x44, 0x00, 0x00, 0x3c, +0x48, 0x00, 0x00, 0x1c, 0x2e, 0x07, 0xdf, 0xf6, 0x40, 0x30, 0x00, 0x10, 0x4e, 0x34, 0x00, 0x14, 0x54, 0x40, 0x00, 0x40, 0x54, 0x10, 0x80, 0x7f, 0x54, 0x00, 0x00, 0x3f, 0x4e, 0x43, 0x00, 0x06, 0x40, 0x00, 0x04, 0x00, 0x48, 0x00, 0x00, 0x0a, 0x40, 0x00, 0x80, 0x01, 0x54, 0x00, 0x00, 0xff, -0x48, 0x00, 0x00, 0x04, 0x54, 0x00, 0x80, 0x7f, 0x2e, 0x27, 0xe2, 0x57, 0x40, 0x11, 0x00, 0x10, +0x48, 0x00, 0x00, 0x04, 0x54, 0x00, 0x80, 0x7f, 0x2e, 0x27, 0xdf, 0xf7, 0x40, 0x11, 0x00, 0x10, 0x4e, 0x14, 0x00, 0x36, 0x46, 0x18, 0x00, 0x21, 0x04, 0x30, 0x80, 0x8d, 0x44, 0x5f, 0x80, 0xff, 0x40, 0x40, 0x20, 0x08, 0x54, 0x42, 0x7f, 0x00, 0x40, 0x31, 0x94, 0x02, 0x40, 0x32, 0x0c, 0x04, 0x14, 0x30, 0x80, 0x8d, 0x04, 0x50, 0x80, 0x8e, 0x54, 0x31, 0x00, 0x40, 0x58, 0x42, 0xff, 0x00, @@ -357,7 +357,7 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x40, 0x52, 0x94, 0x08, 0x04, 0x42, 0x80, 0x00, 0x04, 0x60, 0x80, 0x00, 0x4e, 0x32, 0x00, 0x10, 0x46, 0x81, 0x64, 0x00, 0x40, 0x12, 0x20, 0x04, 0x00, 0x91, 0x80, 0x07, 0x42, 0x30, 0xdc, 0x09, 0x42, 0x31, 0xe0, 0x09, 0x40, 0x74, 0xdc, 0x08, 0x40, 0x41, 0x9c, 0x04, 0x4e, 0x22, 0x00, 0x32, -0x3e, 0x1f, 0xe1, 0xc4, 0x02, 0x91, 0x00, 0x00, 0x04, 0x30, 0x80, 0x00, 0x50, 0x70, 0x00, 0x80, +0x3e, 0x1f, 0xdf, 0x64, 0x02, 0x91, 0x00, 0x00, 0x04, 0x30, 0x80, 0x00, 0x50, 0x70, 0x00, 0x80, 0x38, 0x91, 0x81, 0x09, 0x50, 0x30, 0x01, 0x00, 0x04, 0x80, 0x80, 0x00, 0x00, 0x91, 0x00, 0x08, 0x40, 0x84, 0x00, 0x00, 0x10, 0x94, 0x03, 0x00, 0x02, 0x91, 0x00, 0x01, 0x04, 0x80, 0x80, 0x00, 0x38, 0x94, 0x1d, 0x09, 0x04, 0x90, 0x80, 0x00, 0x00, 0x81, 0x00, 0x09, 0x40, 0x74, 0x80, 0x00, @@ -448,14 +448,14 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x40, 0x51, 0x0c, 0x02, 0x40, 0x12, 0x90, 0x04, 0x14, 0x10, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0x3c, 0x54, 0x20, 0x00, 0xff, 0x40, 0x10, 0x80, 0x13, 0x5c, 0xf1, 0x00, 0x0e, 0x4e, 0xf3, 0x00, 0x06, 0x44, 0x00, 0x00, 0x02, 0x48, 0x00, 0x00, 0x2a, -0x3e, 0x0f, 0xca, 0x90, 0x38, 0x00, 0x0a, 0x02, 0x3e, 0x3f, 0xca, 0xc8, 0x38, 0x31, 0x8a, 0x02, +0x3e, 0x0f, 0xc8, 0x3c, 0x38, 0x00, 0x0a, 0x02, 0x3e, 0x3f, 0xc8, 0x74, 0x38, 0x31, 0x8a, 0x02, 0x4e, 0x03, 0x00, 0x20, 0x54, 0x21, 0x00, 0x01, 0x44, 0x50, 0x00, 0x10, 0x40, 0x42, 0x88, 0x1b, 0x40, 0x40, 0x08, 0x1a, 0x44, 0x60, 0xff, 0xff, 0x40, 0x23, 0x10, 0x0c, 0x04, 0x51, 0x80, 0x00, 0x40, 0x61, 0x08, 0x05, 0x40, 0x53, 0x14, 0x02, 0x14, 0x51, 0x80, 0x00, 0x40, 0x40, 0x90, 0x0c, 0x04, 0x51, 0x80, 0x00, 0x40, 0x12, 0x08, 0x02, 0x40, 0x20, 0x94, 0x04, 0x14, 0x21, 0x80, 0x00, 0x3a, 0x6f, 0x98, 0x04, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0x3c, 0x54, 0x20, 0x00, 0xff, 0x40, 0x10, 0x80, 0x13, 0x5c, 0xf1, 0x00, 0x0d, 0x4e, 0xf3, 0x00, 0x06, 0x44, 0x00, 0x00, 0x02, -0x48, 0x00, 0x00, 0x2a, 0x3e, 0x0f, 0xcb, 0x34, 0x38, 0x00, 0x0a, 0x02, 0x3e, 0x3f, 0xcb, 0x00, +0x48, 0x00, 0x00, 0x2a, 0x3e, 0x0f, 0xc8, 0xac, 0x38, 0x00, 0x0a, 0x02, 0x3e, 0x3f, 0xc8, 0xe0, 0x38, 0x31, 0x8a, 0x02, 0x4e, 0x03, 0x00, 0x20, 0x54, 0x21, 0x00, 0x01, 0x44, 0x50, 0x00, 0x10, 0x40, 0x42, 0x88, 0x1b, 0x40, 0x40, 0x08, 0x1a, 0x44, 0x60, 0xff, 0xff, 0x40, 0x23, 0x10, 0x0c, 0x04, 0x51, 0x80, 0x00, 0x40, 0x61, 0x08, 0x05, 0x40, 0x53, 0x14, 0x02, 0x14, 0x51, 0x80, 0x00, @@ -473,8 +473,8 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x41, 0xe1, 0x10, 0x02, 0x15, 0xe0, 0x00, 0x00, 0x54, 0x10, 0xfc, 0x00, 0x48, 0x00, 0x00, 0x10, 0x46, 0x06, 0x01, 0x30, 0x58, 0x00, 0x00, 0xa4, 0x05, 0xe0, 0x00, 0x00, 0x40, 0x5f, 0x24, 0x09, 0x40, 0x52, 0xa4, 0x08, 0x14, 0x50, 0x00, 0x00, 0x54, 0x10, 0x81, 0xff, 0x04, 0x20, 0x00, 0x00, -0x40, 0x10, 0x88, 0x04, 0x14, 0x10, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, -0x3e, 0x1f, 0xc9, 0xa8, 0x44, 0x20, 0x2e, 0x38, 0x49, 0xf8, 0x01, 0xf2, 0x48, 0x00, 0x00, 0x00, +0x40, 0x10, 0x88, 0x04, 0x14, 0x10, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, +0x3e, 0x1f, 0xc7, 0x54, 0x44, 0x20, 0x2e, 0x38, 0x49, 0xf8, 0x01, 0xf2, 0x48, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x54, 0x00, 0x00, 0xff, 0x54, 0x10, 0x80, 0xff, 0x5c, 0xf0, 0x00, 0x0e, 0x4e, 0xf2, 0x00, 0xb4, 0x5c, 0xf0, 0x80, 0x04, 0x4e, 0xf2, 0x00, 0xb0, @@ -496,8 +496,8 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x58, 0x00, 0x01, 0x14, 0x44, 0x20, 0x00, 0x20, 0x48, 0x00, 0x00, 0x2a, 0x46, 0x06, 0x01, 0x20, 0x58, 0x00, 0x01, 0x14, 0x44, 0x20, 0x04, 0x00, 0x48, 0x00, 0x00, 0x22, 0x46, 0x06, 0x01, 0x20, 0x58, 0x00, 0x01, 0x14, 0x44, 0x21, 0x00, 0x00, 0x48, 0x00, 0x00, 0x1a, 0x46, 0x20, 0x02, 0x00, -0x46, 0x06, 0x01, 0x20, 0x58, 0x00, 0x01, 0x14, 0x48, 0x00, 0x00, 0x12, 0x3e, 0x0f, 0xc9, 0x94, -0x3e, 0x1f, 0xc9, 0xa8, 0x44, 0x20, 0x1e, 0x4a, 0x49, 0xf8, 0x01, 0x3a, 0x48, 0x00, 0x00, 0x00, +0x46, 0x06, 0x01, 0x20, 0x58, 0x00, 0x01, 0x14, 0x48, 0x00, 0x00, 0x12, 0x3e, 0x0f, 0xc7, 0x40, +0x3e, 0x1f, 0xc7, 0x54, 0x44, 0x20, 0x1e, 0x4a, 0x49, 0xf8, 0x01, 0x3a, 0x48, 0x00, 0x00, 0x00, 0x46, 0x06, 0x01, 0x20, 0x58, 0x00, 0x01, 0x10, 0x44, 0x20, 0x00, 0x01, 0x40, 0x31, 0x04, 0x0c, 0x14, 0x30, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x04, 0x44, 0x00, 0x00, 0x01, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x54, 0x10, 0x80, 0xff, @@ -526,22 +526,22 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x58, 0x00, 0x01, 0x04, 0x44, 0x20, 0x00, 0x20, 0x48, 0x00, 0x00, 0x2a, 0x46, 0x06, 0x01, 0x20, 0x58, 0x00, 0x01, 0x04, 0x44, 0x20, 0x04, 0x00, 0x48, 0x00, 0x00, 0x22, 0x46, 0x06, 0x01, 0x20, 0x58, 0x00, 0x01, 0x04, 0x44, 0x21, 0x00, 0x00, 0x48, 0x00, 0x00, 0x1a, 0x46, 0x20, 0x02, 0x00, -0x46, 0x06, 0x01, 0x20, 0x58, 0x00, 0x01, 0x04, 0x48, 0x00, 0x00, 0x12, 0x3e, 0x0f, 0xc9, 0x94, -0x3e, 0x1f, 0xc9, 0xa8, 0x44, 0x20, 0x1d, 0xa9, 0x49, 0xf8, 0x00, 0x4a, 0x48, 0x00, 0x00, 0x00, +0x46, 0x06, 0x01, 0x20, 0x58, 0x00, 0x01, 0x04, 0x48, 0x00, 0x00, 0x12, 0x3e, 0x0f, 0xc7, 0x40, +0x3e, 0x1f, 0xc7, 0x54, 0x44, 0x20, 0x1d, 0xa9, 0x49, 0xf8, 0x00, 0x4a, 0x48, 0x00, 0x00, 0x00, 0x46, 0x06, 0x01, 0x20, 0x58, 0x00, 0x01, 0x00, 0x44, 0x20, 0x00, 0x01, 0x40, 0x31, 0x04, 0x0c, 0x14, 0x30, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x04, 0x44, 0x00, 0x00, 0x01, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x46, 0x26, 0x03, 0x22, 0x46, 0x38, 0x00, 0x00, 0x46, 0x06, 0x03, 0x20, 0x44, 0x10, 0x00, 0x00, 0x14, 0x31, 0x00, 0xc0, 0x58, 0x50, 0x80, 0x00, 0x48, 0x00, 0x00, 0x20, 0x44, 0x20, 0x00, 0x00, 0x41, 0xe1, 0x00, 0x00, 0x14, 0x5f, 0x00, 0x00, 0x50, 0x21, 0x00, 0x04, -0x04, 0x4f, 0x00, 0x00, 0x4e, 0x42, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xc9, 0xa8, +0x04, 0x4f, 0x00, 0x00, 0x4e, 0x42, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc7, 0x54, 0x44, 0x20, 0x1d, 0x1f, 0x49, 0xf8, 0x00, 0x0c, 0x48, 0x00, 0x00, 0x00, 0x44, 0x40, 0x00, 0x14, -0x4c, 0x22, 0x7f, 0xea, 0x50, 0x10, 0x80, 0x01, 0x50, 0x00, 0x00, 0x20, 0x3c, 0x2d, 0xf8, 0x72, +0x4c, 0x22, 0x7f, 0xea, 0x50, 0x10, 0x80, 0x01, 0x50, 0x00, 0x00, 0x20, 0x3c, 0x2d, 0xf7, 0xda, 0x40, 0xf0, 0x88, 0x06, 0x4e, 0xf3, 0xff, 0xde, 0x46, 0x06, 0x03, 0x22, 0x04, 0x50, 0x00, 0xc0, 0x42, 0x12, 0xfc, 0x09, 0x14, 0x10, 0x00, 0xc0, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, 0x54, 0x00, 0x00, 0xff, 0x5c, 0xf0, 0x00, 0x03, 0x4e, 0xf3, 0x00, 0x06, 0x44, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x4a, 0x4e, 0x23, 0x00, 0x0c, -0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xc9, 0xa8, 0x44, 0x20, 0x04, 0xcc, 0x49, 0xf7, 0xff, 0xd8, +0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc7, 0x54, 0x44, 0x20, 0x04, 0xcc, 0x49, 0xf7, 0xff, 0xd8, 0x48, 0x00, 0x00, 0x00, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0x80, 0x0e, 0x44, 0x50, 0x00, 0x02, 0x4c, 0x02, 0x80, 0x12, 0x46, 0x06, 0x01, 0x40, 0x58, 0x00, 0x00, 0x04, 0x50, 0x30, 0x00, 0x04, 0x48, 0x00, 0x00, 0x10, 0x46, 0x06, 0x01, 0x40, 0x58, 0x00, 0x00, 0x0c, 0x50, 0x30, 0x00, 0x04, @@ -581,19 +581,19 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x48, 0x00, 0x00, 0x2a, 0x46, 0x66, 0x01, 0x20, 0x58, 0x63, 0x01, 0x0c, 0x44, 0x40, 0x04, 0x00, 0x48, 0x00, 0x00, 0x22, 0x46, 0x66, 0x01, 0x20, 0x58, 0x63, 0x01, 0x0c, 0x44, 0x41, 0x00, 0x00, 0x48, 0x00, 0x00, 0x1a, 0x46, 0x40, 0x02, 0x00, 0x46, 0x66, 0x01, 0x20, 0x58, 0x63, 0x01, 0x0c, -0x48, 0x00, 0x00, 0x12, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xc9, 0xa8, 0x44, 0x20, 0x1f, 0x21, +0x48, 0x00, 0x00, 0x12, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc7, 0x54, 0x44, 0x20, 0x1f, 0x21, 0x49, 0xf7, 0xfe, 0x96, 0x48, 0x00, 0x00, 0x00, 0x46, 0x66, 0x01, 0x20, 0x58, 0x63, 0x01, 0x08, 0x44, 0x40, 0x00, 0x01, 0x40, 0x82, 0x04, 0x0c, 0x14, 0x83, 0x00, 0x00, 0x4e, 0x22, 0x00, 0x22, 0x44, 0x00, 0x00, 0x01, 0x04, 0xa3, 0x00, 0x00, 0x4e, 0x73, 0x00, 0x0e, 0x2e, 0x00, 0x00, 0x15, -0x4e, 0x03, 0x00, 0x18, 0x3e, 0x0f, 0xca, 0x5c, 0x49, 0xf7, 0xfe, 0x7a, 0x58, 0x03, 0x80, 0x00, +0x4e, 0x03, 0x00, 0x18, 0x3e, 0x0f, 0xc8, 0x08, 0x49, 0xf7, 0xfe, 0x7a, 0x58, 0x03, 0x80, 0x00, 0x48, 0x00, 0x00, 0x12, 0x49, 0x00, 0x03, 0x20, 0x40, 0x25, 0x20, 0x02, 0x50, 0x73, 0xff, 0xff, 0x4e, 0x23, 0xff, 0xe8, 0x48, 0x00, 0x00, 0x06, 0x44, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x04, 0x44, 0x00, 0x00, 0x00, 0x3a, 0x6f, 0xa8, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa8, 0xbc, -0x3c, 0x4d, 0xf8, 0x72, 0x54, 0x80, 0x00, 0xff, 0x58, 0x71, 0x80, 0x00, 0x54, 0x60, 0x80, 0xff, +0x3c, 0x4d, 0xf7, 0xda, 0x54, 0x80, 0x00, 0xff, 0x58, 0x71, 0x80, 0x00, 0x54, 0x60, 0x80, 0xff, 0x54, 0xa1, 0x00, 0xff, 0x40, 0xf4, 0x10, 0x06, 0x4e, 0xf3, 0x00, 0x06, 0x44, 0x00, 0x00, 0x01, -0x48, 0x00, 0x00, 0x86, 0x4e, 0x33, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xc9, 0xa8, -0x44, 0x20, 0x1c, 0x84, 0x49, 0xf7, 0xfe, 0x44, 0x48, 0x00, 0x00, 0x00, 0x3d, 0xed, 0xf8, 0x71, -0x50, 0x04, 0x00, 0x80, 0x38, 0x0f, 0x01, 0x01, 0x49, 0xf8, 0x03, 0xfa, 0x3c, 0x4d, 0xf8, 0x71, +0x48, 0x00, 0x00, 0x86, 0x4e, 0x33, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc7, 0x54, +0x44, 0x20, 0x1c, 0x84, 0x49, 0xf7, 0xfe, 0x44, 0x48, 0x00, 0x00, 0x00, 0x3d, 0xed, 0xf7, 0xd9, +0x50, 0x04, 0x00, 0x80, 0x38, 0x0f, 0x01, 0x01, 0x49, 0xf8, 0x03, 0xfa, 0x3c, 0x4d, 0xf7, 0xd9, 0x44, 0x10, 0x00, 0x06, 0x40, 0x82, 0x20, 0x00, 0x00, 0x34, 0x03, 0x80, 0x40, 0x21, 0x94, 0x08, 0x40, 0x00, 0x08, 0x00, 0x4c, 0x60, 0x80, 0x4e, 0x5c, 0xf3, 0x00, 0x07, 0x4e, 0xf2, 0x00, 0x18, 0x5c, 0xf3, 0x00, 0x04, 0x4e, 0xf2, 0x00, 0x0a, 0x5c, 0xf3, 0x00, 0x02, 0x4e, 0xf2, 0x00, 0x2e, @@ -608,13 +608,13 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x50, 0x00, 0x00, 0x10, 0x44, 0x20, 0x00, 0x10, 0x48, 0x00, 0x00, 0x08, 0x44, 0x20, 0x00, 0x00, 0x44, 0x50, 0x00, 0x06, 0x4c, 0x62, 0xc0, 0x06, 0x50, 0x13, 0x80, 0x10, 0x48, 0x00, 0x00, 0x04, 0x58, 0x13, 0x80, 0x00, 0x49, 0xf7, 0xfd, 0xee, 0x44, 0x00, 0x00, 0x00, 0x3a, 0x6f, 0xa8, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa8, 0xbc, 0x3c, 0x4d, 0xf8, 0x72, 0x54, 0xa0, 0x00, 0xff, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa8, 0xbc, 0x3c, 0x4d, 0xf7, 0xda, 0x54, 0xa0, 0x00, 0xff, 0x58, 0x60, 0x80, 0x00, 0x58, 0x81, 0x00, 0x00, 0x58, 0x71, 0x80, 0x00, 0x40, 0xf5, 0x10, 0x06, 0x4e, 0xf3, 0x00, 0x06, 0x44, 0x00, 0x00, 0x01, 0x48, 0x00, 0x01, 0xb8, 0x4e, 0x13, 0x00, 0x0c, -0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xc9, 0xa8, 0x44, 0x20, 0x1b, 0xa8, 0x49, 0xf7, 0xfd, 0xa8, -0x48, 0x00, 0x00, 0x00, 0x4e, 0x23, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xc9, 0xa8, +0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc7, 0x54, 0x44, 0x20, 0x1b, 0xa8, 0x49, 0xf7, 0xfd, 0xa8, +0x48, 0x00, 0x00, 0x00, 0x4e, 0x23, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc7, 0x54, 0x44, 0x20, 0x1b, 0xa9, 0x49, 0xf7, 0xfd, 0x9c, 0x48, 0x00, 0x00, 0x00, 0x4e, 0x33, 0x00, 0x0c, -0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xc9, 0xa8, 0x44, 0x20, 0x1b, 0xaa, 0x49, 0xf7, 0xfd, 0x90, +0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc7, 0x54, 0x44, 0x20, 0x1b, 0xaa, 0x49, 0xf7, 0xfd, 0x90, 0x48, 0x00, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x23, 0x58, 0x03, 0x00, 0x00, 0x49, 0xf7, 0xfd, 0xbc, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x0c, 0x58, 0x04, 0x00, 0x00, 0x49, 0xf7, 0xfd, 0xb4, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x0a, 0x58, 0x03, 0x80, 0x00, @@ -830,11 +830,11 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x46, 0x26, 0x03, 0x00, 0x46, 0x00, 0x80, 0x00, 0x58, 0x21, 0x01, 0x14, 0x48, 0x00, 0x00, 0x0c, 0x44, 0x50, 0x00, 0x03, 0x4c, 0x02, 0xc0, 0x14, 0x46, 0x26, 0x03, 0x00, 0x46, 0x02, 0x00, 0x00, 0x58, 0x21, 0x01, 0x14, 0x14, 0x01, 0x00, 0x00, 0x4e, 0x12, 0x00, 0x14, 0x46, 0x16, 0x03, 0x00, -0x58, 0x10, 0x81, 0x10, 0x14, 0x00, 0x80, 0x00, 0x48, 0x00, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, -0x3e, 0x1f, 0xcb, 0x68, 0x44, 0x20, 0x13, 0x45, 0x49, 0xf7, 0xf6, 0xca, 0x48, 0x00, 0x00, 0x00, +0x58, 0x10, 0x81, 0x10, 0x14, 0x00, 0x80, 0x00, 0x48, 0x00, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, +0x3e, 0x1f, 0xc9, 0x14, 0x44, 0x20, 0x13, 0x45, 0x49, 0xf7, 0xf6, 0xca, 0x48, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, -0x51, 0xff, 0xff, 0xfc, 0x5c, 0xf0, 0x00, 0x04, 0x4e, 0xf3, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, -0x3e, 0x1f, 0xcb, 0x68, 0x44, 0x20, 0x12, 0x81, 0x49, 0xf7, 0xf6, 0xb2, 0x48, 0x00, 0x00, 0x00, +0x51, 0xff, 0xff, 0xfc, 0x5c, 0xf0, 0x00, 0x04, 0x4e, 0xf3, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, +0x3e, 0x1f, 0xc9, 0x14, 0x44, 0x20, 0x12, 0x81, 0x49, 0xf7, 0xf6, 0xb2, 0x48, 0x00, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x08, 0x46, 0x06, 0x03, 0x00, 0x58, 0x00, 0x00, 0x10, 0x48, 0x00, 0x00, 0x1a, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0xc0, 0x08, 0x46, 0x06, 0x03, 0x00, 0x58, 0x00, 0x00, 0x14, 0x48, 0x00, 0x00, 0x10, 0x44, 0x50, 0x00, 0x02, 0x4c, 0x02, 0xc0, 0x08, 0x46, 0x06, 0x03, 0x00, @@ -843,7 +843,7 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x14, 0x20, 0x00, 0x00, 0x04, 0x5f, 0x00, 0x06, 0x58, 0x4f, 0x00, 0x00, 0x14, 0x50, 0x80, 0x00, 0x04, 0x02, 0x00, 0x07, 0x14, 0x00, 0x80, 0x01, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x5c, 0xf0, 0x00, 0x04, -0x4e, 0xf3, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcb, 0x68, 0x44, 0x20, 0x11, 0xf1, +0x4e, 0xf3, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0x14, 0x44, 0x20, 0x11, 0xf1, 0x49, 0xf7, 0xf6, 0x66, 0x48, 0x00, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x2a, 0x44, 0x00, 0x00, 0x01, 0x4c, 0x10, 0x00, 0x1a, 0x4e, 0x12, 0x00, 0x0c, 0x44, 0x50, 0x00, 0x02, 0x4c, 0x12, 0x80, 0x1a, 0x44, 0x50, 0x00, 0x03, 0x4c, 0x12, 0xc0, 0x9e, 0x48, 0x00, 0x00, 0x08, 0x46, 0x06, 0x03, 0x00, @@ -870,19 +870,19 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x51, 0xff, 0xff, 0xfc, 0x54, 0x10, 0x80, 0xff, 0x4e, 0x03, 0x00, 0x1e, 0x46, 0x26, 0x03, 0x00, 0x58, 0x21, 0x00, 0x34, 0x04, 0x51, 0x00, 0x00, 0x42, 0x32, 0xfc, 0x09, 0x14, 0x31, 0x00, 0x00, 0x4e, 0x12, 0x00, 0x80, 0x05, 0xe1, 0x00, 0x00, 0x40, 0x1f, 0x00, 0x13, 0x4e, 0x13, 0x00, 0x6c, -0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcb, 0x68, 0x44, 0x20, 0x10, 0x3b, 0x49, 0xf7, 0xf5, 0x90, +0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0x14, 0x44, 0x20, 0x10, 0x3b, 0x49, 0xf7, 0xf5, 0x90, 0x48, 0x00, 0x00, 0x00, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0xc0, 0x1e, 0x46, 0x26, 0x03, 0x00, 0x58, 0x21, 0x00, 0x38, 0x04, 0x51, 0x00, 0x00, 0x42, 0x32, 0xfc, 0x09, 0x14, 0x31, 0x00, 0x00, 0x4e, 0x12, 0x00, 0x60, 0x05, 0xe1, 0x00, 0x00, 0x40, 0x1f, 0x00, 0x13, 0x4e, 0x13, 0x00, 0x4c, -0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcb, 0x68, 0x44, 0x20, 0x10, 0x42, 0x49, 0xf7, 0xf5, 0x70, +0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0x14, 0x44, 0x20, 0x10, 0x42, 0x49, 0xf7, 0xf5, 0x70, 0x48, 0x00, 0x00, 0x00, 0x44, 0x50, 0x00, 0x02, 0x4c, 0x02, 0xc0, 0x1e, 0x46, 0x26, 0x03, 0x00, 0x58, 0x21, 0x01, 0x08, 0x04, 0x51, 0x00, 0x00, 0x42, 0x32, 0xfc, 0x09, 0x14, 0x31, 0x00, 0x00, 0x4e, 0x12, 0x00, 0x40, 0x05, 0xe1, 0x00, 0x00, 0x40, 0x1f, 0x00, 0x13, 0x4e, 0x13, 0x00, 0x2c, -0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcb, 0x68, 0x44, 0x20, 0x10, 0x49, 0x49, 0xf7, 0xf5, 0x50, +0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0x14, 0x44, 0x20, 0x10, 0x49, 0x49, 0xf7, 0xf5, 0x50, 0x48, 0x00, 0x00, 0x00, 0x44, 0x50, 0x00, 0x03, 0x4c, 0x02, 0xc0, 0x26, 0x46, 0x26, 0x03, 0x00, 0x58, 0x21, 0x01, 0x0c, 0x04, 0x51, 0x00, 0x00, 0x42, 0x32, 0xfc, 0x09, 0x14, 0x31, 0x00, 0x00, 0x4e, 0x12, 0x00, 0x20, 0x05, 0xe1, 0x00, 0x00, 0x40, 0x1f, 0x00, 0x13, 0x4e, 0x13, 0x00, 0x0c, -0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcb, 0x68, 0x44, 0x20, 0x10, 0x50, 0x49, 0xf7, 0xf5, 0x30, +0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0x14, 0x44, 0x20, 0x10, 0x50, 0x49, 0xf7, 0xf5, 0x30, 0x48, 0x00, 0x00, 0x00, 0x04, 0x51, 0x00, 0x00, 0x42, 0x32, 0xfc, 0x08, 0x14, 0x31, 0x00, 0x00, 0x48, 0x00, 0x00, 0x04, 0x4e, 0x12, 0x00, 0x06, 0x49, 0xff, 0xfc, 0x2a, 0x48, 0x00, 0x00, 0x04, 0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, @@ -900,9 +900,9 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x46, 0x06, 0x03, 0x00, 0x58, 0x00, 0x01, 0x10, 0x44, 0x10, 0x01, 0x00, 0x14, 0x10, 0x00, 0x00, 0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa8, 0xbc, 0x54, 0x31, 0x80, 0xff, 0x58, 0x60, 0x00, 0x00, 0x40, 0x70, 0x80, 0x13, 0x54, 0x91, 0x00, 0xff, 0x54, 0x82, 0x00, 0xff, -0x54, 0xa2, 0x80, 0xff, 0x5c, 0xf1, 0x80, 0x10, 0x4e, 0xf3, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, -0x3e, 0x1f, 0xcb, 0x68, 0x44, 0x20, 0x0f, 0xc1, 0x49, 0xf7, 0xf4, 0x9a, 0x48, 0x00, 0x00, 0x00, -0x5c, 0xf4, 0x00, 0x08, 0x4e, 0xf3, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcb, 0x68, +0x54, 0xa2, 0x80, 0xff, 0x5c, 0xf1, 0x80, 0x10, 0x4e, 0xf3, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, +0x3e, 0x1f, 0xc9, 0x14, 0x44, 0x20, 0x0f, 0xc1, 0x49, 0xf7, 0xf4, 0x9a, 0x48, 0x00, 0x00, 0x00, +0x5c, 0xf4, 0x00, 0x08, 0x4e, 0xf3, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0x14, 0x44, 0x20, 0x0f, 0xc2, 0x49, 0xf7, 0xf4, 0x8c, 0x48, 0x00, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x08, 0x46, 0x06, 0x03, 0x00, 0x58, 0x00, 0x00, 0x34, 0x48, 0x00, 0x00, 0x1e, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0xc0, 0x08, 0x46, 0x06, 0x03, 0x00, 0x58, 0x00, 0x00, 0x38, 0x48, 0x00, 0x00, 0x14, @@ -919,11 +919,11 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, 0x49, 0xff, 0xfa, 0xe8, 0x3a, 0x6f, 0xa8, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, 0x54, 0x10, 0x80, 0xff, 0x54, 0x00, 0x00, 0xff, 0x54, 0x21, 0x00, 0xff, 0x40, 0x31, 0x80, 0x13, 0x54, 0x42, 0x00, 0xff, 0x5c, 0xf0, 0x80, 0x40, -0x4e, 0xf3, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcb, 0x68, 0x44, 0x20, 0x0f, 0x1b, +0x4e, 0xf3, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0x14, 0x44, 0x20, 0x0f, 0x1b, 0x49, 0xf7, 0xf4, 0x06, 0x48, 0x00, 0x00, 0x00, 0x50, 0x61, 0x80, 0x03, 0x40, 0x63, 0x08, 0x09, -0x5c, 0xf3, 0x01, 0x00, 0x4e, 0xf3, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcb, 0x68, +0x5c, 0xf3, 0x01, 0x00, 0x4e, 0xf3, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0x14, 0x44, 0x20, 0x0f, 0x1c, 0x49, 0xf7, 0xf3, 0xf4, 0x48, 0x00, 0x00, 0x00, 0x5c, 0xf2, 0x00, 0x40, -0x4e, 0xf3, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcb, 0x68, 0x44, 0x20, 0x0f, 0x1d, +0x4e, 0xf3, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0x14, 0x44, 0x20, 0x0f, 0x1d, 0x49, 0xf7, 0xf3, 0xe6, 0x48, 0x00, 0x00, 0x00, 0x47, 0xe6, 0x03, 0x00, 0x59, 0xef, 0x00, 0x4c, 0x04, 0x5f, 0x00, 0x00, 0x40, 0x30, 0xc0, 0x08, 0x40, 0x82, 0x80, 0x13, 0x14, 0x8f, 0x00, 0x00, 0x46, 0x50, 0x04, 0x00, 0x04, 0x7f, 0x00, 0x00, 0x40, 0x81, 0x9c, 0x04, 0x40, 0x63, 0x60, 0x08, @@ -932,7 +932,7 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x14, 0x6f, 0x00, 0x00, 0x50, 0x0f, 0x00, 0x04, 0x04, 0x50, 0x00, 0x00, 0x40, 0x32, 0x98, 0x09, 0x40, 0x31, 0x98, 0x08, 0x14, 0x30, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x40, 0x42, 0x04, 0x04, 0x14, 0x40, 0x00, 0x00, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, -0x51, 0xff, 0xff, 0xf4, 0x3c, 0x2d, 0xf9, 0x17, 0x46, 0x36, 0x04, 0x00, 0x46, 0x10, 0x08, 0x00, +0x51, 0xff, 0xff, 0xf4, 0x3c, 0x2d, 0xf8, 0x7f, 0x46, 0x36, 0x04, 0x00, 0x46, 0x10, 0x08, 0x00, 0x14, 0x2f, 0x80, 0x01, 0x14, 0x11, 0x80, 0x02, 0x44, 0x00, 0x16, 0xe8, 0x58, 0x81, 0x80, 0x00, 0x4b, 0xe0, 0x00, 0x01, 0x44, 0x60, 0x00, 0x1e, 0x45, 0xc0, 0x03, 0xe8, 0x44, 0xa0, 0x00, 0x07, 0x58, 0x90, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x46, 0x76, 0x04, 0x00, 0x42, 0x50, 0x5c, 0x0b, @@ -942,7 +942,7 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x44, 0x50, 0x00, 0x0a, 0x40, 0x30, 0x78, 0x97, 0x40, 0x00, 0x14, 0x97, 0x44, 0x40, 0x00, 0x05, 0x40, 0x51, 0x80, 0x00, 0x42, 0x22, 0x90, 0x73, 0x40, 0xf0, 0x88, 0x06, 0x4e, 0xf2, 0xff, 0xd4, 0x04, 0x23, 0x80, 0x00, 0x47, 0xe0, 0x08, 0x00, 0x40, 0x01, 0x78, 0x02, 0x4e, 0x02, 0x00, 0x0e, -0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcb, 0x68, 0x44, 0x20, 0x0c, 0x97, 0x49, 0xf7, 0xf3, 0x50, +0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0x14, 0x44, 0x20, 0x0c, 0x97, 0x49, 0xf7, 0xf3, 0x50, 0x48, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x54, 0x00, 0x00, 0xff, 0x40, 0x00, 0x20, 0x08, 0x54, 0x10, 0x80, 0xff, 0x40, 0x20, 0x00, 0x13, 0x4e, 0x12, 0x00, 0x06, 0x58, 0x11, 0x00, 0x01, 0x48, 0x00, 0x00, 0x06, @@ -1011,7 +1011,7 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x4c, 0x02, 0xc0, 0x1c, 0x48, 0x00, 0x00, 0x0a, 0x46, 0x20, 0x04, 0x00, 0x46, 0x06, 0x03, 0x10, 0x58, 0x00, 0x00, 0x0c, 0x48, 0x00, 0x00, 0x22, 0x46, 0x06, 0x03, 0x10, 0x58, 0x00, 0x00, 0x28, 0x44, 0x20, 0x08, 0x00, 0x48, 0x00, 0x00, 0x1a, 0x46, 0x20, 0x04, 0x00, 0x46, 0x06, 0x03, 0x10, -0x58, 0x00, 0x00, 0x08, 0x48, 0x00, 0x00, 0x12, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcb, 0xa0, +0x58, 0x00, 0x00, 0x08, 0x48, 0x00, 0x00, 0x12, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0x4c, 0x44, 0x20, 0x01, 0xcf, 0x49, 0xff, 0xe2, 0xb2, 0x48, 0x00, 0x00, 0x00, 0x46, 0x06, 0x03, 0x10, 0x58, 0x00, 0x00, 0x0c, 0x44, 0x20, 0x02, 0x00, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x12, 0xc0, 0x08, 0x04, 0x10, 0x00, 0x00, 0x40, 0x20, 0x88, 0x04, 0x48, 0x00, 0x00, 0x08, 0x04, 0x30, 0x00, 0x00, @@ -1026,7 +1026,7 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x46, 0x10, 0x08, 0x00, 0x58, 0x00, 0x00, 0x04, 0x14, 0x10, 0x00, 0x00, 0x4e, 0x22, 0x00, 0x0c, 0x44, 0x00, 0x00, 0x00, 0x58, 0x20, 0x00, 0x00, 0x58, 0x30, 0x00, 0x00, 0x49, 0xff, 0xea, 0x02, 0x48, 0x00, 0x00, 0x14, 0x58, 0x01, 0x00, 0x00, 0x58, 0x31, 0x00, 0x00, 0x49, 0xff, 0xea, 0x14, -0x48, 0x00, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcb, 0xa0, 0x44, 0x20, 0x01, 0xad, +0x48, 0x00, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0x4c, 0x44, 0x20, 0x01, 0xad, 0x49, 0xff, 0xe2, 0x3c, 0x48, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0xf4, 0x54, 0x00, 0x00, 0xff, 0x4e, 0x03, 0x00, 0x04, 0x48, 0x00, 0x00, 0x28, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0xc0, 0x1a, @@ -1035,2931 +1035,2959 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x50, 0x5f, 0x80, 0x04, 0x38, 0x42, 0x98, 0x08, 0x54, 0x61, 0x80, 0xff, 0x48, 0x00, 0x00, 0x14, 0x44, 0x50, 0x00, 0x02, 0x4c, 0x02, 0xc0, 0x0e, 0x54, 0x70, 0x90, 0x00, 0x4e, 0x72, 0x00, 0x0a, 0x44, 0x00, 0x00, 0x03, 0x10, 0x0f, 0x80, 0x04, 0x44, 0x60, 0x00, 0x01, 0x48, 0x00, 0x00, 0x04, -0x44, 0x60, 0x00, 0x00, 0x2e, 0x87, 0xfa, 0xbc, 0x4e, 0x83, 0x00, 0x1e, 0x3d, 0xec, 0x01, 0xd2, -0x44, 0x50, 0x00, 0x01, 0x4d, 0xe2, 0xc0, 0x06, 0x44, 0x00, 0x00, 0x03, 0x49, 0xf8, 0x11, 0xc8, -0x50, 0x9f, 0x80, 0x04, 0x44, 0x70, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0a, 0x08, 0x04, 0x80, 0x01, -0x49, 0x00, 0x30, 0x38, 0x50, 0x03, 0x80, 0x01, 0x54, 0x70, 0x00, 0xff, 0x40, 0xf3, 0x98, 0x06, +0x44, 0x60, 0x00, 0x00, 0x2e, 0x87, 0xf8, 0x5c, 0x4e, 0x82, 0x00, 0x08, 0x44, 0x20, 0x00, 0x01, +0x3e, 0x27, 0xe3, 0x46, 0x48, 0x00, 0x00, 0x1e, 0x3c, 0x0c, 0x01, 0xd2, 0x44, 0x10, 0x00, 0x01, +0x4c, 0x00, 0xc0, 0x06, 0x44, 0x00, 0x00, 0x03, 0x49, 0xf8, 0x11, 0xc2, 0x50, 0x9f, 0x80, 0x04, +0x44, 0x70, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0a, 0x08, 0x04, 0x80, 0x01, 0x49, 0x00, 0x30, 0x78, +0x50, 0x43, 0x80, 0x01, 0x54, 0x72, 0x00, 0xff, 0x40, 0xf3, 0x98, 0x06, 0x4e, 0xf3, 0xff, 0xf6, +0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, +0x51, 0xff, 0xff, 0xfc, 0x54, 0x00, 0x00, 0xff, 0x40, 0x40, 0x08, 0x08, 0x3e, 0x2f, 0xe2, 0x30, +0x40, 0x32, 0x08, 0x00, 0x00, 0x11, 0x80, 0x00, 0x4e, 0x12, 0x00, 0x04, 0x49, 0x00, 0x12, 0xb8, +0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa4, 0xbc, +0x51, 0xff, 0xff, 0xf4, 0x54, 0x00, 0x00, 0xff, 0x4e, 0x03, 0x00, 0x04, 0x48, 0x00, 0x00, 0x28, +0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0xc0, 0x1a, 0x54, 0x60, 0x82, 0x00, 0x4e, 0x62, 0x00, 0x06, +0x10, 0x0f, 0x80, 0x04, 0x58, 0x60, 0x00, 0x00, 0x42, 0x10, 0xd8, 0x0b, 0x4e, 0x12, 0x00, 0x20, +0x50, 0x33, 0x00, 0x01, 0x44, 0x40, 0x00, 0x02, 0x50, 0x5f, 0x80, 0x04, 0x38, 0x42, 0x98, 0x08, +0x54, 0x61, 0x80, 0xff, 0x48, 0x00, 0x00, 0x14, 0x44, 0x50, 0x00, 0x02, 0x4c, 0x02, 0xc0, 0x0e, +0x54, 0x70, 0x88, 0x00, 0x4e, 0x72, 0x00, 0x0a, 0x44, 0x00, 0x00, 0x03, 0x10, 0x0f, 0x80, 0x04, +0x44, 0x60, 0x00, 0x01, 0x48, 0x00, 0x00, 0x04, 0x44, 0x60, 0x00, 0x00, 0x2e, 0x77, 0xf8, 0x5c, +0x4e, 0x73, 0x00, 0x12, 0x50, 0x9f, 0x80, 0x04, 0x48, 0x00, 0x00, 0x0a, 0x08, 0x04, 0x80, 0x01, +0x49, 0xff, 0xff, 0xa6, 0x50, 0x23, 0x80, 0x01, 0x54, 0x71, 0x00, 0xff, 0x40, 0xf3, 0x98, 0x06, 0x4e, 0xf3, 0xff, 0xf6, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x54, 0x00, 0x00, 0xff, 0x40, 0x40, 0x08, 0x08, -0x3e, 0x2f, 0xe4, 0x90, 0x40, 0x32, 0x08, 0x00, 0x00, 0x11, 0x80, 0x00, 0x4e, 0x12, 0x00, 0x04, -0x49, 0x00, 0x12, 0x78, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0xf4, 0x54, 0x00, 0x00, 0xff, 0x4e, 0x03, 0x00, 0x04, -0x48, 0x00, 0x00, 0x28, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0xc0, 0x1a, 0x54, 0x60, 0x82, 0x00, -0x4e, 0x62, 0x00, 0x06, 0x10, 0x0f, 0x80, 0x04, 0x58, 0x60, 0x00, 0x00, 0x42, 0x10, 0xd8, 0x0b, -0x4e, 0x12, 0x00, 0x20, 0x50, 0x33, 0x00, 0x01, 0x44, 0x40, 0x00, 0x02, 0x50, 0x5f, 0x80, 0x04, -0x38, 0x42, 0x98, 0x08, 0x54, 0x61, 0x80, 0xff, 0x48, 0x00, 0x00, 0x14, 0x44, 0x50, 0x00, 0x02, -0x4c, 0x02, 0xc0, 0x0e, 0x54, 0x70, 0x88, 0x00, 0x4e, 0x72, 0x00, 0x0a, 0x44, 0x00, 0x00, 0x03, -0x10, 0x0f, 0x80, 0x04, 0x44, 0x60, 0x00, 0x01, 0x48, 0x00, 0x00, 0x04, 0x44, 0x60, 0x00, 0x00, -0x2e, 0x77, 0xfa, 0xbc, 0x4e, 0x73, 0x00, 0x12, 0x50, 0x9f, 0x80, 0x04, 0x48, 0x00, 0x00, 0x0a, -0x08, 0x04, 0x80, 0x01, 0x49, 0xff, 0xff, 0xa6, 0x50, 0x23, 0x80, 0x01, 0x54, 0x71, 0x00, 0xff, -0x40, 0xf3, 0x98, 0x06, 0x4e, 0xf3, 0xff, 0xf6, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xa4, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xf4, 0x54, 0x00, 0x00, 0xff, -0x14, 0x0f, 0x80, 0x01, 0x45, 0xc0, 0x34, 0x20, 0x44, 0x80, 0x00, 0x00, 0x48, 0x00, 0x00, 0x26, -0x49, 0xf7, 0xf5, 0x8e, 0x00, 0x10, 0x00, 0x02, 0x50, 0x20, 0x00, 0x14, 0x44, 0x30, 0x00, 0x00, -0x54, 0x00, 0x80, 0x1f, 0x48, 0x00, 0x00, 0x12, 0x05, 0xe1, 0x00, 0x00, 0x46, 0x10, 0x03, 0xfc, -0x46, 0x40, 0x02, 0x00, 0x40, 0x5f, 0x04, 0x02, 0x50, 0x31, 0x80, 0x01, 0x4c, 0x52, 0x40, 0x04, -0x3e, 0x87, 0xe5, 0xa5, 0x50, 0x21, 0x00, 0x14, 0x40, 0xf1, 0x80, 0x06, 0x4e, 0xf3, 0xff, 0xee, -0x58, 0x03, 0x00, 0x00, 0x49, 0x00, 0x03, 0x36, 0x04, 0x1f, 0x80, 0x01, 0x44, 0x00, 0x00, 0x01, -0x44, 0x20, 0x00, 0x00, 0x4b, 0xe0, 0x70, 0x01, 0x44, 0x50, 0x0f, 0xff, 0x58, 0x60, 0x00, 0x00, -0x4c, 0x02, 0xff, 0xd0, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xf4, 0x54, 0x00, 0x00, 0xff, 0x14, 0x0f, 0x80, 0x01, -0x45, 0xc0, 0x34, 0x20, 0x48, 0x00, 0x00, 0x12, 0x2e, 0x17, 0xe2, 0x0c, 0x44, 0x50, 0x00, 0x01, -0x4c, 0x12, 0xc0, 0x0a, 0x49, 0x00, 0x04, 0xd8, 0x58, 0x03, 0x00, 0x00, 0x49, 0x00, 0x05, 0xc2, -0x48, 0x00, 0x00, 0x04, 0x49, 0x00, 0x03, 0x06, 0x04, 0x1f, 0x80, 0x01, 0x44, 0x20, 0x00, 0x00, -0x44, 0x00, 0x00, 0x01, 0x4b, 0xe0, 0x70, 0x01, 0x44, 0x50, 0x0f, 0xff, 0x58, 0x60, 0x00, 0x00, -0x4c, 0x02, 0xff, 0xe4, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x58, 0x80, 0x00, 0x00, 0x54, 0x70, 0x00, 0xff, -0x3f, 0xce, 0xda, 0x38, 0x48, 0x00, 0x00, 0x26, 0x2e, 0x20, 0x02, 0x88, 0x4e, 0x22, 0x00, 0x36, -0x49, 0x00, 0x02, 0x88, 0x44, 0x10, 0x00, 0x01, 0x4e, 0x03, 0x00, 0x0e, 0x58, 0x00, 0x80, 0x00, -0x58, 0x23, 0x00, 0x00, 0x58, 0x13, 0x80, 0x00, 0x58, 0x30, 0x00, 0x00, 0x49, 0xf7, 0xf9, 0x3a, -0x48, 0x00, 0x00, 0x24, 0x04, 0x50, 0x00, 0x02, 0x44, 0x30, 0x00, 0xa0, 0x00, 0x42, 0x80, 0x05, -0x4c, 0x41, 0xc0, 0x06, 0x49, 0x00, 0x11, 0x24, 0x48, 0x00, 0x00, 0x04, 0x4b, 0xe0, 0x70, 0x01, -0x2f, 0xe0, 0x02, 0x88, 0x44, 0x20, 0x00, 0x00, 0x58, 0x13, 0x80, 0x00, 0x44, 0x00, 0x00, 0x01, -0x4f, 0xe2, 0x00, 0x0c, 0x49, 0xf7, 0xf8, 0x8e, 0x44, 0x50, 0x0f, 0xff, 0x58, 0x60, 0x00, 0x00, -0x58, 0x14, 0x00, 0x00, 0x4c, 0x02, 0xff, 0xca, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xdc, 0x46, 0xa6, 0x03, 0x10, -0x58, 0x95, 0x00, 0x00, 0x45, 0xc0, 0x00, 0x00, 0x50, 0x6f, 0x80, 0x10, 0x58, 0x8f, 0x80, 0x00, -0x48, 0x00, 0x00, 0xe0, 0x44, 0x00, 0x00, 0x00, 0x14, 0x04, 0x00, 0x02, 0x14, 0x03, 0x00, 0x00, -0x14, 0x04, 0x00, 0x00, 0x14, 0x03, 0x00, 0x01, 0x14, 0x04, 0x00, 0x01, 0x14, 0x03, 0x00, 0x02, -0x44, 0x00, 0x00, 0x00, 0x38, 0x43, 0x00, 0x02, 0x38, 0x24, 0x00, 0x02, 0x44, 0x10, 0x00, 0x10, -0x40, 0x31, 0x10, 0x02, 0x38, 0x33, 0x00, 0x0a, 0x50, 0x00, 0x00, 0x04, 0x4c, 0x00, 0xff, 0xf4, -0x04, 0x53, 0x00, 0x01, 0x4e, 0x53, 0x00, 0x0e, 0x05, 0xe3, 0x00, 0x00, 0x4f, 0xe3, 0x00, 0x0a, -0x04, 0x03, 0x00, 0x02, 0x4e, 0x03, 0x00, 0x06, 0x04, 0x13, 0x00, 0x03, 0x4e, 0x12, 0x00, 0xe8, -0x04, 0x13, 0x00, 0x03, 0x54, 0x30, 0x80, 0x01, 0x4e, 0x32, 0x00, 0x10, 0x46, 0x5a, 0x00, 0x00, -0x45, 0xe0, 0x00, 0x01, 0x15, 0xe2, 0x80, 0x02, 0x42, 0x40, 0x80, 0x09, 0x44, 0x00, 0x00, 0x00, -0x14, 0x43, 0x00, 0x03, 0x49, 0xff, 0xff, 0x66, 0x04, 0x13, 0x00, 0x03, 0x54, 0x00, 0x80, 0x02, -0x4e, 0x02, 0x00, 0x10, 0x46, 0x4a, 0x00, 0x00, 0x44, 0x20, 0x00, 0x02, 0x14, 0x22, 0x00, 0x02, -0x42, 0x10, 0x84, 0x09, 0x44, 0x00, 0x00, 0x01, 0x14, 0x13, 0x00, 0x03, 0x49, 0xff, 0xff, 0x22, -0x04, 0x13, 0x00, 0x03, 0x54, 0x50, 0x80, 0x04, 0x4e, 0x52, 0x00, 0x10, 0x46, 0x3a, 0x00, 0x00, -0x44, 0x40, 0x00, 0x04, 0x14, 0x41, 0x80, 0x02, 0x43, 0xe0, 0x88, 0x09, 0x44, 0x00, 0x00, 0x02, -0x15, 0xe3, 0x00, 0x03, 0x49, 0xff, 0xfe, 0xc8, 0x04, 0x13, 0x00, 0x03, 0x54, 0x20, 0x80, 0x08, -0x4e, 0x22, 0x00, 0x10, 0x47, 0xea, 0x00, 0x00, 0x44, 0x00, 0x00, 0x08, 0x14, 0x0f, 0x00, 0x02, -0x42, 0x10, 0x8c, 0x09, 0x44, 0x00, 0x00, 0x03, 0x14, 0x13, 0x00, 0x03, 0x49, 0x00, 0x0b, 0x9a, -0x04, 0x33, 0x00, 0x01, 0x4e, 0x33, 0x00, 0x0a, 0x04, 0x43, 0x00, 0x00, 0x4e, 0x43, 0x00, 0x06, -0x04, 0x23, 0x00, 0x02, 0x4e, 0x22, 0x00, 0x34, 0x3e, 0x7f, 0xe1, 0xcc, 0x04, 0x03, 0x80, 0x00, -0x04, 0x13, 0x80, 0x01, 0x39, 0xe3, 0x02, 0x02, 0x40, 0x50, 0xf8, 0x02, 0x4e, 0x52, 0x00, 0x20, -0x3e, 0x3f, 0xcb, 0xe4, 0x38, 0x01, 0x83, 0x02, 0x14, 0x10, 0x00, 0x00, 0x04, 0x23, 0x80, 0x02, -0x4e, 0x22, 0x00, 0x0a, 0x04, 0x43, 0x80, 0x00, 0x38, 0x13, 0x12, 0x02, 0x54, 0x02, 0x00, 0xff, -0x4b, 0xe0, 0x08, 0x01, 0x04, 0x53, 0x80, 0x00, 0x04, 0x03, 0x80, 0x01, 0x38, 0x23, 0x16, 0x02, -0x41, 0xe0, 0x00, 0x05, 0x40, 0x1f, 0x08, 0x02, 0x38, 0x13, 0x16, 0x0a, 0x3e, 0x5f, 0xe1, 0xfc, -0x4c, 0x72, 0x80, 0x06, 0x50, 0x73, 0x80, 0x0c, 0x48, 0xff, 0xff, 0xd2, 0x04, 0x43, 0x00, 0x01, -0x4e, 0x43, 0x00, 0x0e, 0x04, 0x53, 0x00, 0x00, 0x4e, 0x53, 0x00, 0x0a, 0x04, 0x13, 0x00, 0x02, -0x4e, 0x13, 0x00, 0x06, 0x05, 0xe3, 0x00, 0x03, 0x4f, 0xe2, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, -0x3e, 0x1f, 0xcb, 0xc8, 0x44, 0x20, 0x02, 0xec, 0x49, 0xff, 0xdf, 0xc8, 0x48, 0x00, 0x00, 0x00, -0x51, 0xce, 0x00, 0x01, 0x55, 0xce, 0x00, 0xff, 0x44, 0x50, 0x00, 0x03, 0x4d, 0xc2, 0x80, 0x38, -0x04, 0x55, 0x00, 0x00, 0x46, 0x46, 0x03, 0x10, 0x14, 0x53, 0x00, 0x00, 0x04, 0x04, 0x80, 0x02, -0x58, 0x32, 0x00, 0x00, 0x14, 0x04, 0x00, 0x00, 0x04, 0x22, 0x00, 0x01, 0x58, 0x11, 0x80, 0x00, -0x14, 0x23, 0x00, 0x01, 0x05, 0xe1, 0x80, 0x03, 0x58, 0x00, 0x80, 0x00, 0x15, 0xe4, 0x00, 0x01, -0x04, 0x50, 0x80, 0x09, 0x46, 0x3a, 0x00, 0x00, 0x14, 0x53, 0x00, 0x02, 0x04, 0x40, 0x00, 0x0a, -0x59, 0xe1, 0x80, 0x00, 0x14, 0x44, 0x00, 0x02, 0x04, 0x21, 0x80, 0x02, 0x46, 0x56, 0x04, 0x00, -0x14, 0x23, 0x00, 0x03, 0x04, 0x1f, 0x00, 0x01, 0x14, 0x14, 0x00, 0x03, 0x04, 0x32, 0x80, 0x00, -0x42, 0x01, 0xdc, 0x0b, 0x4e, 0x03, 0xfe, 0xf0, 0x48, 0xff, 0xfe, 0xfc, 0x51, 0xff, 0x80, 0x24, -0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xa4, -0x44, 0x40, 0x00, 0x80, 0x54, 0x30, 0x00, 0xff, 0x44, 0x50, 0x00, 0x01, 0x40, 0x62, 0x8c, 0x1b, -0x40, 0x62, 0x0c, 0x1a, 0x50, 0x0f, 0x80, 0x1c, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x23, -0x45, 0xc0, 0x00, 0x00, 0x14, 0x6f, 0x80, 0x05, 0x49, 0xf7, 0xee, 0x10, 0x15, 0xcf, 0x80, 0x04, -0x50, 0x6f, 0x80, 0x40, 0x50, 0xaf, 0x80, 0x48, 0x50, 0x9f, 0x80, 0x54, 0x50, 0x8f, 0x80, 0x42, -0x50, 0x7f, 0x80, 0x49, 0x04, 0x3f, 0x80, 0x04, 0x51, 0xcf, 0x80, 0x4c, 0x51, 0xef, 0x80, 0x50, -0x54, 0x01, 0x80, 0xff, 0x58, 0x13, 0x00, 0x00, 0x58, 0x25, 0x00, 0x00, 0x15, 0xcf, 0x80, 0x03, -0x15, 0xef, 0x80, 0x00, 0x51, 0xcf, 0x80, 0x44, 0x51, 0xef, 0x80, 0x4a, 0x58, 0x34, 0x80, 0x00, -0x58, 0x44, 0x00, 0x00, 0x58, 0x53, 0x80, 0x00, 0x15, 0xcf, 0x80, 0x01, 0x15, 0xef, 0x80, 0x02, -0x49, 0x00, 0x49, 0x8c, 0x05, 0xcf, 0x80, 0x04, 0x44, 0x00, 0x00, 0x00, 0x50, 0x2e, 0x00, 0x01, -0x14, 0x2f, 0x80, 0x04, 0x05, 0xcf, 0x80, 0x05, 0x04, 0x1f, 0x80, 0x04, 0x12, 0x03, 0x00, 0x03, -0x40, 0xf0, 0xf0, 0x06, 0x4e, 0xf3, 0xff, 0xd0, 0x51, 0xff, 0x80, 0x5c, 0x3a, 0x6f, 0xaa, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x49, 0x00, 0x4b, 0x7c, -0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3e, 0x0f, 0xf4, 0xac, -0x44, 0x20, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x01, 0x14, 0x20, 0x00, 0x02, -0x50, 0x10, 0x00, 0x10, 0x58, 0x40, 0x00, 0x00, 0x14, 0x20, 0x80, 0x02, 0x04, 0x52, 0x00, 0x01, -0x14, 0x10, 0x00, 0x01, 0x14, 0x50, 0x80, 0x01, 0x14, 0x00, 0x80, 0x00, 0x14, 0x12, 0x80, 0x00, -0x50, 0x10, 0x80, 0x68, 0x04, 0x30, 0x00, 0x02, 0x50, 0x51, 0x80, 0x01, 0x50, 0x30, 0x01, 0xb0, -0x14, 0x50, 0x00, 0x02, 0x4c, 0x11, 0xff, 0xea, 0x3e, 0x0f, 0xf2, 0x0c, 0x14, 0x00, 0x00, 0x00, -0x14, 0x00, 0x00, 0x01, 0x14, 0x20, 0x00, 0x02, 0x50, 0x10, 0x00, 0x0c, 0x58, 0x40, 0x00, 0x00, -0x14, 0x20, 0x80, 0x02, 0x04, 0x52, 0x00, 0x01, 0x14, 0x10, 0x00, 0x01, 0x14, 0x50, 0x80, 0x01, -0x14, 0x00, 0x80, 0x00, 0x14, 0x12, 0x80, 0x00, 0x50, 0x10, 0x80, 0x44, 0x04, 0x30, 0x00, 0x02, -0x50, 0x51, 0x80, 0x01, 0x50, 0x30, 0x01, 0x1c, 0x14, 0x50, 0x00, 0x02, 0x4c, 0x11, 0xff, 0xea, -0x3e, 0x0f, 0xec, 0x34, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x01, 0x14, 0x20, 0x00, 0x02, -0x50, 0x10, 0x00, 0x10, 0x58, 0x40, 0x00, 0x00, 0x14, 0x20, 0x80, 0x02, 0x04, 0x52, 0x00, 0x01, -0x14, 0x10, 0x00, 0x01, 0x14, 0x50, 0x80, 0x01, 0x14, 0x00, 0x80, 0x00, 0x14, 0x12, 0x80, 0x00, -0x50, 0x10, 0x80, 0x68, 0x04, 0x30, 0x00, 0x02, 0x50, 0x51, 0x80, 0x01, 0x50, 0x30, 0x01, 0xb0, -0x14, 0x50, 0x00, 0x02, 0x4c, 0x11, 0xff, 0xea, 0x4a, 0x00, 0x78, 0x20, 0x54, 0x00, 0x00, 0xff, -0x40, 0x10, 0x00, 0x10, 0x4e, 0x14, 0x00, 0x06, 0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0a, -0x44, 0x30, 0x00, 0x03, 0x42, 0x00, 0x0c, 0x24, 0x3e, 0x2f, 0xf3, 0x28, 0x40, 0x00, 0x08, 0x00, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x3e, 0x1f, 0xf2, 0x0c, -0x04, 0x60, 0x80, 0x00, 0x40, 0x70, 0x00, 0x13, 0x4c, 0x60, 0xc0, 0x06, 0x44, 0x60, 0x00, 0x00, -0x48, 0x00, 0x00, 0x20, 0x04, 0x53, 0x00, 0x01, 0x04, 0x33, 0x00, 0x00, 0x44, 0x40, 0x00, 0x00, -0x14, 0x51, 0x80, 0x01, 0x14, 0x32, 0x80, 0x00, 0x14, 0x43, 0x00, 0x01, 0x14, 0x43, 0x00, 0x00, -0x04, 0x20, 0x80, 0x02, 0x50, 0x01, 0x7f, 0xff, 0x14, 0x00, 0x80, 0x02, 0x4e, 0x62, 0x00, 0x0a, -0x58, 0x03, 0x80, 0x00, 0x49, 0xf7, 0xf2, 0x9c, 0x14, 0x03, 0x00, 0x02, 0x12, 0x73, 0x00, 0x06, -0x58, 0x03, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x3e, 0x3f, 0xf4, 0xac, 0x56, 0x10, 0x80, 0x01, -0x3e, 0x4f, 0xec, 0x34, 0x40, 0x22, 0x04, 0x1a, 0x40, 0x21, 0x84, 0x1b, 0x04, 0x61, 0x00, 0x00, -0x40, 0x70, 0x00, 0x13, 0x4c, 0x61, 0x40, 0x06, 0x44, 0x60, 0x00, 0x00, 0x48, 0x00, 0x00, 0x20, -0x04, 0x13, 0x00, 0x01, 0x04, 0x33, 0x00, 0x00, 0x45, 0xe0, 0x00, 0x00, 0x14, 0x11, 0x80, 0x01, -0x14, 0x30, 0x80, 0x00, 0x15, 0xe3, 0x00, 0x01, 0x15, 0xe3, 0x00, 0x00, 0x04, 0x51, 0x00, 0x02, -0x50, 0x02, 0xff, 0xff, 0x14, 0x01, 0x00, 0x02, 0x4e, 0x62, 0x00, 0x0a, 0x58, 0x03, 0x80, 0x00, -0x49, 0xf7, 0xf2, 0x5e, 0x14, 0x03, 0x00, 0x02, 0x12, 0x73, 0x00, 0x06, 0x58, 0x03, 0x00, 0x00, -0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, -0x51, 0xff, 0xff, 0xfc, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x28, 0x3e, 0x0f, 0xed, 0xe4, -0x49, 0xf7, 0xec, 0xbc, 0x44, 0x2f, 0xff, 0xff, 0x3e, 0x1f, 0xee, 0x0c, 0x3c, 0x2f, 0xfb, 0x7a, -0x3c, 0x1f, 0xfb, 0x79, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x40, 0x00, 0x00, 0x13, 0x49, 0xf7, 0xf2, 0x4a, -0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, -0x51, 0xff, 0xff, 0xfc, 0x4e, 0x03, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcc, 0x04, -0x44, 0x20, 0x02, 0xb4, 0x49, 0xff, 0xdd, 0xea, 0x48, 0x00, 0x00, 0x00, 0x3e, 0x1f, 0xee, 0x0c, -0x40, 0xf0, 0x04, 0x06, 0x4e, 0xf3, 0x00, 0x1e, 0x50, 0x10, 0x83, 0xff, 0x40, 0xf0, 0x80, 0x06, -0x4e, 0xf3, 0x00, 0x18, 0x3e, 0x1f, 0xed, 0xe4, 0x04, 0x20, 0x80, 0x00, 0x40, 0x00, 0x08, 0x01, -0x40, 0x00, 0x14, 0x09, 0x5c, 0xf0, 0x00, 0x20, 0x4e, 0xf3, 0x00, 0x12, 0x3e, 0x0f, 0xc9, 0x94, -0x3e, 0x1f, 0xcc, 0x04, 0x44, 0x20, 0x02, 0xc0, 0x49, 0xff, 0xdd, 0xc8, 0x48, 0x00, 0x00, 0x00, -0x49, 0xf7, 0xf1, 0xfe, 0x49, 0xf7, 0xf2, 0x0e, 0x48, 0x00, 0x00, 0x2c, 0x58, 0x40, 0x80, 0x00, -0x40, 0x30, 0x10, 0x00, 0x50, 0x31, 0x80, 0x08, 0x00, 0x21, 0x80, 0x00, 0x4e, 0x23, 0x00, 0x0c, -0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcc, 0x04, 0x44, 0x20, 0x02, 0xcc, 0x49, 0xff, 0xdd, 0xae, -0x48, 0x00, 0x00, 0x00, 0x44, 0x40, 0x00, 0x00, 0x10, 0x41, 0x80, 0x00, 0x51, 0xe1, 0x7f, 0xff, -0x44, 0x30, 0x00, 0x01, 0x40, 0x41, 0xf8, 0x0c, 0x50, 0x52, 0x7f, 0xff, 0x40, 0x22, 0x90, 0x04, -0x04, 0x30, 0x80, 0x01, 0x41, 0xe1, 0x00, 0x0c, 0x40, 0x5f, 0x0c, 0x04, 0x14, 0x50, 0x80, 0x01, -0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, -0x51, 0xff, 0xff, 0xfc, 0x58, 0x60, 0x00, 0x00, 0x54, 0x10, 0x80, 0xff, 0x4e, 0x03, 0x00, 0x0c, -0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcc, 0x04, 0x44, 0x20, 0x02, 0x11, 0x49, 0xff, 0xdd, 0x7e, -0x48, 0x00, 0x00, 0x00, 0x3e, 0x0f, 0xf4, 0xbc, 0x40, 0xf3, 0x00, 0x06, 0x4e, 0xf3, 0x00, 0x0c, -0x50, 0x00, 0x01, 0x38, 0x40, 0xf0, 0x18, 0x06, 0x4e, 0xf3, 0x00, 0x06, 0x3e, 0x7f, 0xf4, 0xac, -0x48, 0x00, 0x00, 0x14, 0x3e, 0x0f, 0xf2, 0x18, 0x40, 0xf3, 0x00, 0x06, 0x4e, 0xf3, 0x00, 0x0c, -0x50, 0x20, 0x00, 0xcc, 0x40, 0xf1, 0x18, 0x06, 0x4e, 0xf3, 0x00, 0x06, 0x50, 0x70, 0x7f, 0xf4, -0x48, 0x00, 0x00, 0x04, 0x3e, 0x7f, 0xec, 0x34, 0x4e, 0x12, 0x00, 0x18, 0x04, 0x13, 0x00, 0x02, -0x4e, 0x12, 0x00, 0x14, 0x02, 0x03, 0x00, 0x06, 0x44, 0x50, 0x0f, 0xff, 0x4c, 0x02, 0xc0, 0x0c, -0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcc, 0x04, 0x44, 0x20, 0x02, 0x25, 0x49, 0xff, 0xdd, 0x46, -0x48, 0x00, 0x00, 0x00, 0x49, 0xf7, 0xf1, 0x8e, 0x44, 0x00, 0x00, 0x00, 0x14, 0x03, 0x00, 0x02, -0x05, 0xe3, 0x80, 0x01, 0x14, 0x63, 0x80, 0x01, 0x14, 0x73, 0x00, 0x00, 0x15, 0xe3, 0x00, 0x01, -0x14, 0x6f, 0x00, 0x00, 0x04, 0x53, 0x80, 0x02, 0x50, 0x42, 0x80, 0x01, 0x14, 0x43, 0x80, 0x02, -0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, -0x51, 0xff, 0xff, 0xfc, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0xc0, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, -0x3e, 0x1f, 0xcc, 0x04, 0x44, 0x20, 0x02, 0x66, 0x49, 0xff, 0xdd, 0x18, 0x48, 0x00, 0x00, 0x00, -0x4e, 0x13, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcc, 0x04, 0x44, 0x20, 0x02, 0x67, -0x49, 0xff, 0xdd, 0x0c, 0x48, 0x00, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x14, 0x50, 0x10, 0x80, 0x1f, -0x40, 0x10, 0x94, 0x09, 0x5c, 0xf0, 0x80, 0x21, 0x4e, 0xf3, 0x00, 0x18, 0x3e, 0x0f, 0xc9, 0x94, -0x3e, 0x1f, 0xcc, 0x04, 0x44, 0x20, 0x02, 0x70, 0x49, 0xff, 0xdc, 0xf8, 0x48, 0x00, 0x00, 0x00, -0x40, 0x00, 0x80, 0x13, 0x49, 0xf7, 0xf1, 0x52, 0x44, 0x50, 0x0f, 0xff, 0x4c, 0x02, 0x80, 0x3a, -0x49, 0xf7, 0xf1, 0x1e, 0x48, 0x00, 0x00, 0x38, 0x50, 0x20, 0xff, 0xff, 0x5c, 0xf1, 0x00, 0x20, -0x4e, 0xf2, 0x00, 0x30, 0x44, 0x50, 0x00, 0x01, 0x40, 0x42, 0x88, 0x0c, 0x51, 0xe2, 0x7f, 0xff, -0x40, 0x2f, 0x10, 0x04, 0x3c, 0x3d, 0xfb, 0x7a, 0x52, 0x40, 0x80, 0x20, 0x48, 0x00, 0x00, 0x1c, -0x4c, 0x51, 0x40, 0x16, 0x40, 0x51, 0x08, 0x05, 0x41, 0xe2, 0x8c, 0x02, 0x3e, 0x3f, 0xed, 0xe4, -0x40, 0x40, 0x0c, 0x00, 0x15, 0xe1, 0x80, 0x01, 0x10, 0x12, 0x00, 0x08, 0x40, 0x00, 0x14, 0x08, -0x04, 0x21, 0x80, 0x00, 0x40, 0x01, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0e, 0x40, 0x21, 0x08, 0x00, -0x50, 0x00, 0x00, 0x01, 0x40, 0x51, 0x0c, 0x02, 0x40, 0xf2, 0x00, 0x06, 0x4e, 0xf2, 0xff, 0xe2, -0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xa0, 0xbc, 0x51, 0xff, 0xff, 0xc0, 0x54, 0x70, 0x00, 0xff, 0x40, 0x03, 0x80, 0x10, -0x54, 0x80, 0x80, 0xff, 0x4e, 0x05, 0x00, 0x2e, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x23, -0x50, 0x0f, 0x80, 0x04, 0x49, 0xf7, 0xeb, 0x42, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x0c, -0x50, 0x0f, 0x80, 0x28, 0x49, 0xf7, 0xeb, 0x3a, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x0a, -0x50, 0x0f, 0x80, 0x34, 0x49, 0xf7, 0xeb, 0x32, 0x46, 0x16, 0x03, 0x20, 0x58, 0x10, 0x80, 0x0c, -0x40, 0x23, 0x94, 0x08, 0x40, 0x01, 0x04, 0x00, 0x04, 0x10, 0x00, 0x00, 0x4e, 0x82, 0x00, 0x06, -0x42, 0x10, 0xfc, 0x08, 0x48, 0x00, 0x00, 0x04, 0x42, 0x10, 0xfc, 0x09, 0x14, 0x10, 0x00, 0x00, -0x51, 0xff, 0x80, 0x40, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, -0x51, 0xff, 0xff, 0xf4, 0x54, 0x60, 0x00, 0xff, 0x40, 0x03, 0x00, 0x10, 0x54, 0x70, 0x80, 0xff, -0x4e, 0x05, 0x00, 0x24, 0x58, 0x03, 0x00, 0x00, 0x50, 0x1f, 0x80, 0x05, 0x50, 0x2f, 0x80, 0x06, -0x50, 0x3f, 0x80, 0x07, 0x49, 0x00, 0x49, 0x5e, 0x00, 0x0f, 0x80, 0x05, 0x44, 0x50, 0x00, 0x01, -0x4c, 0x02, 0xc0, 0x0a, 0x00, 0x2f, 0x80, 0x06, 0x4c, 0x20, 0x40, 0x06, 0x00, 0x3f, 0x80, 0x07, -0x4c, 0x33, 0x80, 0x0c, 0x44, 0x10, 0x00, 0x01, 0x58, 0x03, 0x00, 0x00, 0x58, 0x33, 0x80, 0x00, -0x58, 0x20, 0x80, 0x00, 0x49, 0x00, 0x4a, 0x66, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0x9c, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x40, 0x00, 0x00, 0x13, -0x49, 0xf7, 0xf0, 0x66, 0x00, 0x40, 0x00, 0x03, 0x44, 0x2f, 0xff, 0xa0, 0x54, 0x32, 0x00, 0x1f, -0x40, 0x11, 0x88, 0x04, 0x10, 0x10, 0x00, 0x03, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xf4, 0x54, 0x21, 0x00, 0xff, -0x59, 0xc0, 0x00, 0x00, 0x54, 0x70, 0x80, 0xff, 0x14, 0x2f, 0x80, 0x01, 0x4e, 0x02, 0x00, 0x5a, -0x50, 0x33, 0x80, 0x04, 0x40, 0xa1, 0x8c, 0x00, 0x44, 0x60, 0x00, 0x00, 0x44, 0x90, 0x00, 0x01, -0x40, 0x0e, 0x18, 0x0d, 0x54, 0x10, 0x00, 0x01, 0x50, 0x03, 0x7f, 0xf9, 0x4e, 0x12, 0x00, 0x44, -0x5c, 0xf0, 0x00, 0x02, 0x4e, 0xf2, 0x00, 0x12, 0x5c, 0xf3, 0x80, 0x03, 0x4e, 0xf2, 0x00, 0x3c, -0x54, 0x03, 0x00, 0xff, 0x58, 0x13, 0x80, 0x00, 0x44, 0x20, 0x00, 0x01, 0x44, 0x30, 0x4e, 0x20, -0x3e, 0x4e, 0xb3, 0x10, 0x48, 0x00, 0x00, 0x16, 0x04, 0x5f, 0x80, 0x01, 0x54, 0x43, 0x00, 0xff, -0x58, 0x13, 0x80, 0x00, 0x44, 0x20, 0x00, 0x01, 0x44, 0x30, 0x4e, 0x20, 0x58, 0x02, 0x00, 0x00, -0x4e, 0x52, 0x00, 0x06, 0x49, 0xff, 0xe8, 0x6e, 0x48, 0x00, 0x00, 0x06, 0x3e, 0x4e, 0xb3, 0xb0, -0x4b, 0xe0, 0x10, 0x01, 0x3c, 0x2d, 0xf8, 0x82, 0x40, 0x14, 0x98, 0x0c, 0x41, 0xe1, 0x28, 0x00, -0x02, 0x4f, 0x00, 0x02, 0x40, 0x30, 0x90, 0x04, 0x12, 0x3f, 0x00, 0x02, 0x4e, 0x02, 0x00, 0x0c, -0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcc, 0x24, 0x44, 0x20, 0x12, 0x48, 0x49, 0xff, 0xdb, 0xc6, -0x48, 0x00, 0x00, 0x00, 0x50, 0x63, 0x00, 0x01, 0x44, 0x00, 0x00, 0x0e, 0x4c, 0x60, 0x7f, 0xb2, +0x45, 0xc0, 0x34, 0x20, 0x44, 0x80, 0x00, 0x00, 0x48, 0x00, 0x00, 0x26, 0x49, 0xf7, 0xf5, 0x88, +0x00, 0x10, 0x00, 0x02, 0x50, 0x20, 0x00, 0x14, 0x44, 0x30, 0x00, 0x00, 0x54, 0x00, 0x80, 0x1f, +0x48, 0x00, 0x00, 0x12, 0x05, 0xe1, 0x00, 0x00, 0x46, 0x10, 0x03, 0xfc, 0x46, 0x40, 0x02, 0x00, +0x40, 0x5f, 0x04, 0x02, 0x50, 0x31, 0x80, 0x01, 0x4c, 0x52, 0x40, 0x04, 0x3e, 0x87, 0xe3, 0x45, +0x50, 0x21, 0x00, 0x14, 0x40, 0xf1, 0x80, 0x06, 0x4e, 0xf3, 0xff, 0xee, 0x58, 0x03, 0x00, 0x00, +0x49, 0x00, 0x03, 0x36, 0x04, 0x1f, 0x80, 0x01, 0x44, 0x00, 0x00, 0x01, 0x44, 0x20, 0x00, 0x00, +0x4b, 0xe0, 0x70, 0x01, 0x44, 0x50, 0x0f, 0xff, 0x58, 0x60, 0x00, 0x00, 0x4c, 0x02, 0xff, 0xd0, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, -0x51, 0xff, 0xff, 0xfc, 0x59, 0xc0, 0x00, 0x00, 0x54, 0x70, 0x80, 0xff, 0x4e, 0x02, 0x00, 0x46, -0x50, 0xa3, 0x80, 0x04, 0x40, 0xa5, 0x28, 0x00, 0x44, 0x60, 0x00, 0x00, 0x44, 0x90, 0x00, 0x01, -0x40, 0x1e, 0x18, 0x0d, 0x54, 0x00, 0x80, 0x01, 0x50, 0x23, 0x7f, 0xf9, 0x4e, 0x02, 0x00, 0x30, -0x54, 0x03, 0x00, 0xff, 0x58, 0x13, 0x80, 0x00, 0x5c, 0xf1, 0x00, 0x02, 0x4e, 0xf2, 0x00, 0x0a, -0x5c, 0xf3, 0x80, 0x03, 0x4e, 0xf2, 0x00, 0x24, 0x3e, 0x2e, 0xaf, 0xf8, 0x48, 0x00, 0x00, 0x04, -0x3e, 0x2e, 0xb0, 0x4c, 0x4b, 0xe0, 0x08, 0x01, 0x3c, 0x1d, 0xf8, 0x82, 0x40, 0x24, 0x98, 0x0c, -0x40, 0x40, 0xa8, 0x00, 0x02, 0x32, 0x00, 0x02, 0x40, 0x51, 0x08, 0x05, 0x40, 0x22, 0x8c, 0x02, -0x12, 0x22, 0x00, 0x02, 0x4e, 0x02, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcc, 0x24, -0x44, 0x20, 0x12, 0x08, 0x49, 0xff, 0xdb, 0x72, 0x48, 0x00, 0x00, 0x00, 0x50, 0x63, 0x00, 0x01, -0x44, 0x50, 0x00, 0x0e, 0x4c, 0x62, 0xff, 0xc6, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x54, 0x00, 0x00, 0xff, -0x49, 0xff, 0xfc, 0xb6, 0x4e, 0x03, 0x00, 0x06, 0x44, 0x00, 0x00, 0xff, 0x48, 0x00, 0x00, 0x04, -0x00, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x40, 0x20, 0x00, 0x13, 0x44, 0x00, 0x00, 0x00, -0x58, 0x10, 0x00, 0x00, 0x58, 0x30, 0x00, 0x00, 0x49, 0xf7, 0xf3, 0xa4, 0x51, 0xff, 0x80, 0x04, -0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xfc, -0x45, 0xc0, 0x2c, 0xdc, 0x54, 0x70, 0x00, 0xff, 0x58, 0x13, 0x80, 0x00, 0x44, 0x20, 0x00, 0x00, -0x44, 0x00, 0x00, 0x01, 0x49, 0x00, 0x49, 0xb6, 0x44, 0x50, 0x0f, 0xff, 0x58, 0x13, 0x80, 0x00, -0x44, 0x20, 0x00, 0x00, 0x4c, 0x02, 0x80, 0x1e, 0x44, 0x00, 0x00, 0x01, 0x49, 0xf7, 0xf2, 0xf2, -0x58, 0x60, 0x00, 0x00, 0x4b, 0xe0, 0x70, 0x01, 0x00, 0x10, 0x00, 0x05, 0x44, 0x50, 0x00, 0xa0, -0x58, 0x03, 0x00, 0x00, 0x4c, 0x12, 0x80, 0x0a, 0x49, 0xff, 0xfe, 0xd6, 0x58, 0x03, 0x00, 0x00, -0x49, 0xff, 0xff, 0xc0, 0x48, 0xff, 0xff, 0xda, 0x49, 0xff, 0xfd, 0x04, 0x48, 0xff, 0xff, 0xd6, -0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, -0x58, 0x70, 0x00, 0x00, 0x49, 0xff, 0xee, 0x12, 0x04, 0x63, 0x80, 0x02, 0x00, 0x83, 0x00, 0x20, -0x40, 0x04, 0x00, 0x10, 0x4e, 0x04, 0x00, 0x06, 0x44, 0x10, 0xff, 0xff, 0x48, 0x00, 0x00, 0x14, -0x44, 0x20, 0x00, 0x00, 0x3e, 0x1f, 0xf6, 0x70, 0x38, 0x20, 0xa0, 0x08, 0x44, 0x00, 0x00, 0x01, -0x49, 0xff, 0xff, 0xac, 0x44, 0x10, 0x00, 0x00, 0x58, 0x04, 0x00, 0x00, 0x49, 0xff, 0xfe, 0x70, -0x44, 0x10, 0x00, 0x00, 0x00, 0x33, 0x00, 0x0b, 0x54, 0x01, 0x80, 0x01, 0x4e, 0x02, 0x00, 0x2e, -0x00, 0x23, 0x00, 0x07, 0x50, 0x43, 0x00, 0x0c, 0x14, 0x12, 0x00, 0x01, 0x44, 0x30, 0x00, 0x18, -0x44, 0x1f, 0xff, 0xed, 0x44, 0x50, 0x00, 0x00, 0x44, 0x00, 0x00, 0x0a, 0x14, 0x52, 0x00, 0x02, -0x14, 0x82, 0x00, 0x00, 0x12, 0x33, 0x00, 0x00, 0x10, 0x13, 0x00, 0x04, 0x10, 0x03, 0x00, 0x08, -0x10, 0x23, 0x00, 0x05, 0x45, 0xe0, 0x00, 0x01, 0x04, 0x53, 0x80, 0x02, 0x44, 0x4f, 0xe0, 0x00, -0x11, 0xe3, 0x80, 0x10, 0x12, 0x42, 0x80, 0x01, 0x58, 0x03, 0x80, 0x00, 0x49, 0x00, 0x02, 0xfc, -0x49, 0xff, 0xed, 0xc4, 0x44, 0x00, 0x00, 0x01, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x55, 0xc0, 0x00, 0xff, 0x54, 0xa0, 0x80, 0xff, -0x48, 0x00, 0x00, 0x08, 0x49, 0xff, 0xfe, 0x60, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xff, 0x4a, -0x58, 0x15, 0x00, 0x00, 0x44, 0x20, 0x00, 0x00, 0x58, 0x0e, 0x00, 0x00, 0x49, 0xf7, 0xf2, 0x62, -0x44, 0x50, 0x0f, 0xff, 0x58, 0x60, 0x00, 0x00, 0x4c, 0x02, 0xff, 0xee, 0x51, 0xff, 0x80, 0x04, -0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xdc, -0x58, 0x50, 0x80, 0x00, 0x14, 0x0f, 0x80, 0x04, 0x4e, 0x12, 0x00, 0x0a, 0x44, 0x00, 0x00, 0x01, -0x4c, 0x10, 0x00, 0x06, 0x44, 0xa0, 0x00, 0x00, 0x48, 0x00, 0x00, 0x4e, 0x47, 0xcc, 0x00, 0x00, -0x54, 0x21, 0x00, 0xff, 0x59, 0xce, 0x00, 0x01, 0x44, 0xa0, 0x00, 0x00, 0x14, 0x2f, 0x80, 0x05, -0x15, 0xcf, 0x80, 0x01, 0x58, 0x95, 0x00, 0x00, 0x50, 0x8f, 0x80, 0x1f, 0x50, 0x7f, 0x80, 0x1c, -0x50, 0x6f, 0x80, 0x1a, 0x04, 0x4f, 0x80, 0x04, 0x40, 0x32, 0x24, 0x0d, 0x54, 0x11, 0x80, 0x01, -0x4e, 0x12, 0x00, 0x2c, 0x58, 0x14, 0x80, 0x00, 0x44, 0x20, 0x00, 0x00, 0x44, 0x00, 0x00, 0x02, -0x14, 0x5f, 0x80, 0x03, 0x45, 0xc0, 0x0f, 0xff, 0x49, 0x00, 0x48, 0xd4, 0x44, 0x10, 0x00, 0x00, -0x44, 0x20, 0x00, 0x03, 0x58, 0x34, 0x80, 0x00, 0x04, 0x4f, 0x80, 0x05, 0x04, 0x5f, 0x80, 0x03, -0x4c, 0x0e, 0x00, 0x14, 0x58, 0x02, 0x80, 0x00, 0x49, 0xff, 0xe3, 0x4a, 0x05, 0xef, 0x80, 0x01, -0x58, 0x13, 0x80, 0x00, 0x40, 0xaf, 0x00, 0x1b, 0x58, 0x23, 0x00, 0x00, 0x58, 0x04, 0x00, 0x00, -0x49, 0xff, 0xe3, 0x88, 0x04, 0x5f, 0x80, 0x03, 0x50, 0x94, 0x80, 0x01, 0x45, 0xc0, 0x00, 0x0e, -0x4c, 0x9e, 0x7f, 0xca, 0x58, 0x05, 0x00, 0x00, 0x51, 0xff, 0x80, 0x24, 0x3a, 0x6f, 0xaa, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x54, 0x81, 0x80, 0xff, -0x50, 0x44, 0x00, 0x04, 0x3c, 0x3d, 0xf8, 0x82, 0x40, 0x02, 0x10, 0x00, 0x44, 0x40, 0x00, 0x00, -0x58, 0x70, 0x80, 0x00, 0x40, 0x01, 0x80, 0x00, 0x54, 0x61, 0x00, 0xff, 0x58, 0x92, 0x00, 0x00, -0x44, 0x10, 0x00, 0x01, 0x40, 0xa3, 0x90, 0x0d, 0x54, 0x25, 0x00, 0x01, 0x4e, 0x22, 0x00, 0x0e, -0x02, 0x30, 0x00, 0x02, 0x40, 0x20, 0x90, 0x0c, 0x41, 0xe1, 0x90, 0x0e, 0x55, 0xcf, 0x00, 0x01, -0x4f, 0xc3, 0x00, 0x04, 0x40, 0x94, 0x88, 0x04, 0x50, 0x42, 0x00, 0x01, 0x44, 0x50, 0x00, 0x0e, -0x4c, 0x42, 0xff, 0xea, 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xfd, 0x3a, -0x3f, 0xce, 0xcb, 0xb0, 0x44, 0x10, 0x00, 0x01, 0x58, 0x03, 0x00, 0x00, 0x4b, 0xe0, 0x70, 0x01, -0x44, 0x20, 0x00, 0x00, 0x58, 0x03, 0x80, 0x00, 0x58, 0x14, 0x00, 0x00, 0x49, 0xff, 0xfd, 0xb4, -0x58, 0x04, 0x80, 0x00, 0x58, 0x14, 0x00, 0x00, 0x49, 0xff, 0xfe, 0x1a, 0x44, 0x10, 0x00, 0x00, -0x58, 0x03, 0x00, 0x00, 0x4b, 0xe0, 0x70, 0x01, 0x44, 0x10, 0x00, 0x00, 0x58, 0x03, 0x80, 0x00, -0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xff, 0x42, 0x58, 0x10, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x0c, -0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcc, 0x24, 0x44, 0x20, 0x0d, 0x2c, 0x49, 0xff, 0xd9, 0xb6, -0x48, 0x00, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xfd, 0x04, 0x51, 0xff, 0x80, 0x04, -0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, 0x58, 0x80, 0x80, 0x00, -0x58, 0x60, 0x00, 0x00, 0x4e, 0x12, 0x00, 0x2c, 0x44, 0x50, 0x00, 0x05, 0x4c, 0x62, 0x80, 0x22, -0x44, 0x10, 0x00, 0x06, 0x4c, 0x60, 0xc0, 0x14, 0x54, 0x71, 0x00, 0xff, 0x58, 0x03, 0x80, 0x00, -0x49, 0xff, 0xfe, 0x32, 0x58, 0x30, 0x00, 0x00, 0x58, 0x14, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, -0x58, 0x23, 0x80, 0x00, 0x49, 0xff, 0xff, 0x70, 0x48, 0x00, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, -0x3e, 0x1f, 0xcc, 0x24, 0x44, 0x20, 0x0d, 0x6f, 0x49, 0xff, 0xd9, 0x80, 0x48, 0x00, 0x00, 0x00, -0x44, 0x00, 0x00, 0x03, 0x44, 0x10, 0x00, 0x00, 0x49, 0xff, 0xfe, 0xd4, 0x3a, 0x6f, 0xa0, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, 0x00, 0x60, 0x00, 0x02, 0x54, 0x10, 0x80, 0xff, -0x40, 0x03, 0x00, 0x10, 0x4e, 0x04, 0x00, 0x06, 0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x14, -0x4e, 0x13, 0x00, 0x04, 0x48, 0x00, 0x00, 0x0e, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xfc, 0xf0, -0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x00, 0x06, 0x44, 0x10, 0x00, 0x0f, 0x49, 0xff, 0xff, 0xae, -0x44, 0x00, 0x00, 0x01, 0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, -0x04, 0x60, 0x00, 0x02, 0x58, 0x70, 0x00, 0x00, 0x00, 0x83, 0x00, 0x20, 0x40, 0x04, 0x00, 0x10, -0x4e, 0x04, 0x00, 0x06, 0x44, 0x10, 0xff, 0xff, 0x48, 0x00, 0x00, 0x0e, 0x58, 0x04, 0x00, 0x00, -0x49, 0xff, 0xfa, 0x96, 0x10, 0x80, 0x00, 0x02, 0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xff, 0xc4, -0x44, 0x10, 0x00, 0x00, 0x00, 0x23, 0x00, 0x0b, 0x54, 0x01, 0x00, 0x01, 0x4e, 0x02, 0x00, 0x2c, -0x00, 0x53, 0x00, 0x07, 0x50, 0x43, 0x00, 0x0c, 0x44, 0x30, 0x00, 0x00, 0x44, 0x20, 0x00, 0x18, -0x44, 0x0f, 0xff, 0xed, 0x45, 0xe0, 0x00, 0x14, 0x14, 0x32, 0x00, 0x02, 0x14, 0x82, 0x00, 0x00, -0x14, 0x12, 0x00, 0x01, 0x10, 0x03, 0x00, 0x04, 0x12, 0x23, 0x00, 0x00, 0x11, 0xe3, 0x00, 0x08, -0x10, 0x53, 0x00, 0x05, 0x44, 0x40, 0x00, 0x01, 0x04, 0x13, 0x80, 0x02, 0x44, 0x3f, 0xe0, 0x00, -0x10, 0x43, 0x80, 0x10, 0x12, 0x30, 0x80, 0x01, 0x58, 0x03, 0x80, 0x00, 0x49, 0x00, 0x01, 0x54, -0x44, 0x00, 0x00, 0x01, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, -0x51, 0xff, 0xff, 0xfc, 0x3e, 0x3f, 0xe2, 0x08, 0x04, 0x11, 0x80, 0x00, 0x44, 0x00, 0x00, 0x00, -0x14, 0x00, 0x80, 0x00, 0x58, 0x20, 0x00, 0x00, 0x58, 0x10, 0x00, 0x00, 0x04, 0x51, 0x80, 0x00, -0x41, 0xe0, 0x84, 0x00, 0x40, 0x42, 0xf8, 0x00, 0x12, 0x22, 0x00, 0x02, 0x51, 0xe0, 0x80, 0x04, -0x04, 0x51, 0x80, 0x00, 0x40, 0x4f, 0x78, 0x00, 0x41, 0xe2, 0x90, 0x00, 0x50, 0x00, 0x00, 0x01, -0x44, 0x40, 0x00, 0x04, 0x12, 0x2f, 0x00, 0x02, 0x50, 0x10, 0x80, 0x01, 0x4c, 0x02, 0x7f, 0xe8, -0x3e, 0x0f, 0xf6, 0x70, 0x18, 0x20, 0x00, 0x01, 0x3e, 0x5f, 0xf6, 0xf0, 0x4c, 0x02, 0xff, 0xfc, -0x44, 0x10, 0x00, 0x01, 0x44, 0x00, 0x00, 0x00, 0x49, 0x00, 0x46, 0x0e, 0x51, 0xff, 0x80, 0x04, -0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa4, 0x3c, 0x54, 0x10, 0x80, 0xff, -0x54, 0x21, 0x00, 0xff, 0x4e, 0x13, 0x00, 0x06, 0x44, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x40, -0x46, 0x46, 0x01, 0x20, 0x58, 0x42, 0x01, 0x14, 0x50, 0x62, 0x7f, 0xfc, 0x50, 0x53, 0x7f, 0xf4, -0x50, 0x72, 0xff, 0xfc, 0x44, 0x30, 0x00, 0x00, 0x40, 0x83, 0x88, 0x1b, 0x40, 0x83, 0x08, 0x1a, -0x40, 0x62, 0x88, 0x1b, 0x40, 0x62, 0x08, 0x1a, 0x58, 0x21, 0x80, 0x00, 0x44, 0x40, 0x00, 0x01, -0x48, 0x00, 0x00, 0x1c, 0x38, 0x50, 0x0c, 0x00, 0x50, 0x31, 0x80, 0x01, 0x50, 0x92, 0x80, 0x05, -0x50, 0x72, 0x80, 0x0a, 0x40, 0x72, 0x1c, 0x0c, 0x40, 0x92, 0x24, 0x0c, 0x40, 0x94, 0x9c, 0x04, -0x50, 0x72, 0x80, 0x10, 0x40, 0x52, 0x14, 0x0c, 0x40, 0x54, 0x94, 0x04, 0x40, 0x72, 0x1c, 0x0c, -0x40, 0x52, 0x9c, 0x04, 0x40, 0x21, 0x14, 0x04, 0x40, 0xf1, 0x84, 0x06, 0x4e, 0xf3, 0xff, 0xe4, -0x14, 0x24, 0x00, 0x00, 0x14, 0x23, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x3a, 0x6f, 0xa4, 0x04, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, 0x00, 0x10, 0x00, 0x2d, 0x50, 0x60, 0x00, 0x27, -0x54, 0x00, 0x80, 0x01, 0x4e, 0x02, 0x00, 0x0a, 0x44, 0x10, 0x00, 0x01, 0x50, 0x03, 0x00, 0x08, -0x58, 0x20, 0x80, 0x00, 0x49, 0xff, 0xff, 0xa2, 0x44, 0x20, 0x00, 0x00, 0x10, 0x23, 0x00, 0x07, -0x10, 0x23, 0x00, 0x05, 0x10, 0x23, 0x00, 0x06, 0x50, 0x03, 0x7f, 0xed, 0x49, 0x00, 0x24, 0xc2, -0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, 0x50, 0x70, 0x00, 0x14, -0x50, 0x60, 0x00, 0x27, 0x58, 0x03, 0x80, 0x00, 0x49, 0x00, 0x24, 0xb4, 0x00, 0x23, 0x00, 0x06, -0x40, 0x01, 0x00, 0x10, 0x4e, 0x05, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcc, 0x40, -0x44, 0x20, 0x0b, 0xc4, 0x49, 0xff, 0xd8, 0x3a, 0x48, 0x00, 0x00, 0x00, 0x54, 0x21, 0x00, 0x01, -0x50, 0x03, 0x00, 0x08, 0x4e, 0x23, 0x00, 0x16, 0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xff, 0x6e, -0x00, 0x53, 0x00, 0x06, 0x50, 0x33, 0x7f, 0xdf, 0x58, 0x42, 0x80, 0x01, 0x10, 0x43, 0x00, 0x06, -0x44, 0x10, 0x03, 0xe8, 0x3a, 0x21, 0x88, 0x00, 0x40, 0x11, 0x04, 0x17, 0x48, 0x00, 0x00, 0x32, -0x44, 0x10, 0x00, 0x01, 0x58, 0x20, 0x80, 0x00, 0x49, 0xff, 0xff, 0x58, 0x00, 0x03, 0x00, 0x07, -0x44, 0x50, 0x00, 0xff, 0x4c, 0x02, 0x80, 0x12, 0x51, 0xe0, 0x7f, 0xff, 0x54, 0x0f, 0x00, 0xff, -0x10, 0x03, 0x00, 0x07, 0x4e, 0x03, 0x00, 0x0a, 0x10, 0x03, 0x00, 0x06, 0x58, 0x03, 0x80, 0x00, -0x49, 0x00, 0x24, 0x70, 0x48, 0x00, 0x00, 0x1a, 0x00, 0x13, 0x00, 0x06, 0x42, 0x50, 0x80, 0x09, -0x10, 0x53, 0x00, 0x06, 0x50, 0x43, 0x7f, 0xdf, 0x50, 0x63, 0x7f, 0xe3, 0x3a, 0x22, 0x08, 0x00, -0x3a, 0x63, 0x18, 0x00, 0x40, 0x33, 0x08, 0x01, 0x44, 0x00, 0x03, 0xe8, 0x40, 0x11, 0x80, 0x57, -0x58, 0x03, 0x80, 0x00, 0x49, 0x00, 0x25, 0x46, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0x98, 0xbc, 0x44, 0x1f, 0xff, 0xff, 0x58, 0x60, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, -0x10, 0x13, 0x00, 0x2f, 0x10, 0x03, 0x00, 0x2e, 0x10, 0x03, 0x00, 0x2d, 0x58, 0x23, 0x00, 0x00, -0x50, 0x03, 0x00, 0x14, 0x3e, 0x1e, 0xe4, 0xb4, 0x49, 0x00, 0x24, 0x1c, 0x58, 0x03, 0x00, 0x00, -0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x12, 0x49, 0xf7, 0xe6, 0x70, 0x3a, 0x6f, 0x98, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, 0x58, 0x60, 0x00, 0x00, 0x49, 0x00, 0x2a, 0x70, -0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xfa, 0x2a, 0x3a, 0x6f, 0x98, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, 0x58, 0x60, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x0c, -0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcc, 0x40, 0x44, 0x20, 0x06, 0xad, 0x49, 0xff, 0xd7, 0xa6, -0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x4e, 0x03, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, -0x3e, 0x1f, 0xcc, 0x40, 0x44, 0x20, 0x06, 0xae, 0x49, 0xff, 0xd7, 0x98, 0x48, 0x00, 0x00, 0x00, -0x00, 0x13, 0x00, 0x10, 0x5c, 0xf0, 0x80, 0x02, 0x4e, 0xf3, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, -0x3e, 0x1f, 0xcc, 0x40, 0x44, 0x20, 0x06, 0xb0, 0x49, 0xff, 0xd7, 0x88, 0x48, 0x00, 0x00, 0x00, -0x44, 0x00, 0x00, 0x00, 0x02, 0x23, 0x00, 0x06, 0x58, 0x30, 0x00, 0x00, 0x49, 0xf7, 0xef, 0xe2, -0x4e, 0x03, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcc, 0x40, 0x44, 0x20, 0x06, 0xba, -0x49, 0xff, 0xd7, 0x74, 0x48, 0x00, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, -0x49, 0xff, 0xf9, 0xde, 0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, -0x58, 0x60, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcc, 0x40, -0x44, 0x20, 0x05, 0xd2, 0x49, 0xff, 0xd7, 0x5a, 0x48, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, -0x00, 0x13, 0x00, 0x10, 0x02, 0x23, 0x00, 0x06, 0x58, 0x30, 0x00, 0x00, 0x49, 0xf7, 0xef, 0xb2, -0x4e, 0x03, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcc, 0x40, 0x44, 0x20, 0x05, 0xdd, -0x49, 0xff, 0xd7, 0x44, 0x48, 0x00, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, -0x49, 0xff, 0xf9, 0xae, 0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, -0x51, 0xff, 0xff, 0xfc, 0x4e, 0x03, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcc, 0x40, -0x44, 0x20, 0x09, 0x49, 0x49, 0xff, 0xd7, 0x2a, 0x48, 0x00, 0x00, 0x00, 0x44, 0x20, 0x00, 0x00, -0x10, 0x20, 0x00, 0x10, 0x49, 0xff, 0xff, 0xbc, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, 0x58, 0x60, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x0c, -0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcc, 0x40, 0x44, 0x20, 0x05, 0x2d, 0x49, 0xff, 0xd7, 0x0e, -0x48, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x0b, 0x4e, 0x13, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, -0x3e, 0x1f, 0xcc, 0x40, 0x44, 0x20, 0x05, 0x2e, 0x49, 0xff, 0xd7, 0x00, 0x48, 0x00, 0x00, 0x00, -0x04, 0x20, 0x00, 0x0c, 0x4e, 0x23, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcc, 0x40, -0x44, 0x20, 0x05, 0x2f, 0x49, 0xff, 0xd6, 0xf2, 0x48, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x00, -0x3e, 0x1f, 0xcc, 0x84, 0x40, 0x32, 0x10, 0x09, 0x38, 0x10, 0x8e, 0x02, 0x4e, 0x12, 0x00, 0x0e, -0x4b, 0xe0, 0x04, 0x01, 0x44, 0x10, 0x00, 0x01, 0x4c, 0x00, 0x80, 0x1a, 0x2e, 0x07, 0xfa, 0xbc, -0x4c, 0x00, 0xc0, 0x0a, 0x48, 0x00, 0x00, 0x0e, 0x2f, 0xe7, 0xfa, 0xbc, 0x44, 0x50, 0x00, 0x01, -0x4d, 0xe2, 0x80, 0x08, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xff, 0x9a, 0x48, 0x00, 0x00, 0x08, -0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xf9, 0x3a, 0x3a, 0x6f, 0x98, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xf4, 0x58, 0x70, 0x00, 0x00, -0x49, 0xff, 0xf3, 0x7e, 0x58, 0xa0, 0x00, 0x00, 0x44, 0x20, 0x00, 0x2c, 0x50, 0x01, 0x00, 0x04, -0x40, 0x91, 0x28, 0x1a, 0x40, 0x90, 0x28, 0x1b, 0x58, 0x04, 0x80, 0x00, 0x49, 0xf7, 0xeb, 0x0e, -0x44, 0x50, 0x0f, 0xff, 0x58, 0x80, 0x00, 0x00, 0x4c, 0x02, 0xc0, 0x08, 0x46, 0x0c, 0x00, 0x00, -0x58, 0x00, 0x00, 0x9a, 0x48, 0x00, 0x00, 0xf2, 0x49, 0xf7, 0xea, 0xd2, 0x50, 0x60, 0x00, 0x04, -0x58, 0x24, 0x80, 0x00, 0x44, 0x10, 0x00, 0x00, 0x49, 0xf7, 0xe5, 0x40, 0x02, 0x03, 0x00, 0x0b, -0x00, 0x53, 0x00, 0x04, 0x44, 0x3f, 0xc0, 0x03, 0x40, 0x52, 0x98, 0x09, 0x40, 0x52, 0x98, 0x08, -0x40, 0x10, 0x0c, 0x02, 0x02, 0x23, 0x00, 0x04, 0x01, 0xe3, 0x7f, 0xff, 0x01, 0xc3, 0x00, 0x02, -0x00, 0x43, 0x00, 0x05, 0x14, 0x1f, 0x80, 0x01, 0x44, 0x1f, 0xff, 0x80, 0x00, 0x03, 0x00, 0x07, -0x54, 0x21, 0x00, 0x3f, 0x40, 0x30, 0x04, 0x04, 0x00, 0x03, 0x00, 0x11, 0x55, 0xef, 0x00, 0x7f, -0x58, 0x10, 0x00, 0x20, 0x04, 0x0f, 0x80, 0x01, 0x59, 0xce, 0x00, 0x08, 0x58, 0x00, 0x00, 0x04, -0x14, 0x0f, 0x80, 0x01, 0x12, 0x93, 0x7f, 0xfe, 0x44, 0x9f, 0xff, 0xff, 0x58, 0x52, 0x80, 0x1e, -0x58, 0x42, 0x00, 0x14, 0x58, 0x21, 0x28, 0x00, 0x10, 0x93, 0x00, 0x00, 0x44, 0x9f, 0xff, 0xc8, -0x11, 0xe3, 0x7f, 0xff, 0x10, 0x93, 0x00, 0x01, 0x11, 0xc3, 0x00, 0x02, 0x10, 0x53, 0x00, 0x04, -0x10, 0x43, 0x00, 0x05, 0x10, 0x33, 0x00, 0x07, 0x12, 0x23, 0x00, 0x04, 0x10, 0x13, 0x00, 0x11, -0x12, 0x03, 0x00, 0x0b, 0x4e, 0xa2, 0x00, 0x06, 0x50, 0x13, 0x00, 0x1c, 0x48, 0x00, 0x00, 0x04, -0x50, 0x13, 0x00, 0x18, 0x45, 0xef, 0xff, 0xff, 0x44, 0x30, 0x00, 0xe4, 0x44, 0x00, 0x00, 0x00, -0x12, 0x00, 0x80, 0x01, 0x12, 0x30, 0x80, 0x00, 0x11, 0xe0, 0x80, 0x09, 0x11, 0xe0, 0x80, 0x04, -0x11, 0xe0, 0x80, 0x05, 0x11, 0xe0, 0x80, 0x06, 0x11, 0xe0, 0x80, 0x07, 0x11, 0xe0, 0x80, 0x08, -0x50, 0x00, 0x80, 0x0a, 0x00, 0x43, 0x80, 0x04, 0x10, 0x40, 0x80, 0x0a, 0x00, 0x53, 0x80, 0x05, -0x10, 0x50, 0x80, 0x0b, 0x00, 0x23, 0x80, 0x06, 0x10, 0x20, 0x80, 0x0c, 0x00, 0x33, 0x80, 0x07, -0x10, 0x30, 0x80, 0x0d, 0x01, 0xe3, 0x80, 0x08, 0x11, 0xe0, 0x80, 0x0e, 0x00, 0x73, 0x80, 0x09, -0x10, 0x70, 0x80, 0x0f, 0x49, 0xff, 0xf2, 0xde, 0x44, 0x50, 0x00, 0x0f, 0x58, 0x10, 0x00, 0x00, -0x4c, 0x02, 0xc0, 0x04, 0x48, 0x00, 0x00, 0x56, 0x00, 0x23, 0x00, 0x03, 0x40, 0x50, 0x08, 0x08, -0x54, 0x31, 0x00, 0x03, 0x40, 0x02, 0x8c, 0x04, 0x10, 0x03, 0x00, 0x03, 0x47, 0xe6, 0x01, 0x20, -0x46, 0x40, 0x02, 0x00, 0x04, 0x2f, 0x00, 0x40, 0x40, 0x12, 0x04, 0x0c, 0x40, 0x50, 0x88, 0x02, -0x4c, 0x50, 0xc0, 0x0e, 0x01, 0xe3, 0x7f, 0xff, 0x44, 0x0f, 0xff, 0x87, 0x40, 0x4f, 0x00, 0x02, -0x44, 0x10, 0x00, 0x04, 0x58, 0x02, 0x00, 0x20, 0x48, 0x00, 0x00, 0x14, 0x46, 0x26, 0x01, 0x20, -0x04, 0x51, 0x00, 0x41, 0x40, 0x30, 0x94, 0x02, 0x4c, 0x30, 0xc0, 0x10, 0x01, 0xe3, 0x7f, 0xff, -0x44, 0x0f, 0xff, 0x87, 0x40, 0x4f, 0x00, 0x02, 0x44, 0x10, 0x00, 0x0d, 0x58, 0x02, 0x00, 0x68, -0x10, 0x03, 0x7f, 0xff, 0x48, 0x00, 0x00, 0x08, 0x3e, 0x0f, 0xcc, 0x5c, 0x49, 0xff, 0xd5, 0xce, -0x48, 0x00, 0x00, 0x18, 0x44, 0x00, 0x00, 0x02, 0x58, 0x24, 0x00, 0x00, 0x44, 0x30, 0x00, 0x01, -0x49, 0xf7, 0xee, 0x28, 0x4e, 0x02, 0x00, 0x06, 0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0e, -0x3e, 0x0f, 0xcc, 0x70, 0x49, 0xff, 0xd5, 0xba, 0x58, 0x04, 0x00, 0x00, 0x49, 0xf7, 0xea, 0x02, -0x46, 0x0c, 0x00, 0x00, 0x58, 0x00, 0x00, 0x01, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, 0x58, 0x60, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x0c, -0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcc, 0x40, 0x44, 0x20, 0x05, 0x82, 0x49, 0xff, 0xd5, 0x9e, -0x48, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x0b, 0x4e, 0x13, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, -0x3e, 0x1f, 0xcc, 0x40, 0x44, 0x20, 0x05, 0x83, 0x49, 0xff, 0xd5, 0x90, 0x48, 0x00, 0x00, 0x00, -0x02, 0x30, 0x80, 0x00, 0x44, 0x20, 0x00, 0xa4, 0x54, 0x01, 0x80, 0xfc, 0x4c, 0x01, 0x40, 0x06, -0x58, 0x00, 0x80, 0x00, 0x49, 0xff, 0xfe, 0xc0, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xfe, 0x48, -0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xe4, -0x58, 0x70, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcc, 0x40, -0x44, 0x20, 0x03, 0xa9, 0x49, 0xff, 0xd5, 0x6a, 0x48, 0x00, 0x00, 0x00, 0x3c, 0x13, 0xfd, 0x5e, -0x44, 0x50, 0x01, 0x01, 0x4c, 0x12, 0xc0, 0x0e, 0x04, 0x60, 0x00, 0x02, 0x00, 0x53, 0x00, 0x04, -0x54, 0x42, 0x80, 0x20, 0x4e, 0x42, 0x00, 0xce, 0x49, 0x00, 0x24, 0xc8, 0x48, 0x00, 0x00, 0xca, -0x00, 0xa0, 0x00, 0x40, 0x44, 0x10, 0x00, 0x30, 0x43, 0xc5, 0x04, 0x24, 0x3f, 0xef, 0xe6, 0xec, -0x40, 0x9e, 0x78, 0x00, 0x00, 0x84, 0x80, 0x2c, 0x54, 0x04, 0x00, 0x02, 0x4e, 0x02, 0x00, 0xba, -0x44, 0x30, 0x00, 0x00, 0x04, 0x23, 0x80, 0x0c, 0x10, 0x3f, 0x80, 0x17, 0x50, 0x81, 0x00, 0x0c, -0x44, 0x90, 0x00, 0x00, 0x02, 0x23, 0x80, 0x09, 0x50, 0x6f, 0x80, 0x17, 0x3f, 0xce, 0xee, 0xd8, -0x48, 0x00, 0x00, 0x40, 0x00, 0x44, 0x00, 0x00, 0x44, 0x50, 0x00, 0xdd, 0x4c, 0x42, 0xc0, 0x30, -0x14, 0x2f, 0x80, 0x01, 0x58, 0x04, 0x00, 0x00, 0x58, 0x13, 0x00, 0x00, 0x4b, 0xe0, 0x70, 0x01, -0x04, 0x2f, 0x80, 0x01, 0x4e, 0x02, 0x00, 0x24, 0x00, 0x0f, 0x80, 0x17, 0x44, 0x50, 0x00, 0x09, -0x4c, 0x02, 0xc0, 0x1e, 0x50, 0x14, 0x00, 0x06, 0x00, 0x40, 0x80, 0x00, 0x44, 0x50, 0x00, 0x0c, -0x4c, 0x42, 0xc0, 0x16, 0x40, 0x52, 0x88, 0x08, 0x42, 0x65, 0x14, 0x24, 0x3e, 0x2f, 0xe6, 0xec, -0x40, 0x63, 0x08, 0x00, 0x58, 0x03, 0x00, 0x00, 0x44, 0x20, 0x00, 0x12, 0x49, 0xf7, 0xe3, 0x9a, -0x20, 0x13, 0x00, 0x2d, 0x4e, 0x14, 0x00, 0x26, 0x48, 0x00, 0x00, 0x12, 0x01, 0xe4, 0x00, 0x01, -0x50, 0x0f, 0x00, 0x02, 0x40, 0x94, 0x80, 0x00, 0x40, 0x84, 0x00, 0x00, 0x40, 0x94, 0x80, 0x13, -0x40, 0xf4, 0x88, 0x06, 0x4e, 0xf3, 0xff, 0xc0, 0x48, 0x00, 0x00, 0x64, 0x50, 0x03, 0x00, 0x14, -0x49, 0x00, 0x21, 0x58, 0x00, 0x33, 0x00, 0x2d, 0x54, 0x41, 0x80, 0x01, 0x4e, 0x42, 0x00, 0x0a, -0x44, 0x10, 0x00, 0x01, 0x50, 0x03, 0x80, 0x40, 0x58, 0x20, 0x80, 0x00, 0x49, 0xff, 0xfc, 0x1e, -0x00, 0x03, 0x00, 0x05, 0x10, 0x03, 0x00, 0x2e, 0x4e, 0x03, 0x00, 0x04, 0x48, 0x00, 0x00, 0x3a, -0x00, 0x03, 0x80, 0x40, 0x50, 0x7f, 0x80, 0x0c, 0x58, 0x13, 0x80, 0x00, 0x49, 0xff, 0xec, 0x80, -0x50, 0x03, 0x00, 0x0e, 0x04, 0x23, 0x80, 0x00, 0x3a, 0x10, 0x04, 0x00, 0x40, 0x10, 0x88, 0x01, -0x4e, 0x14, 0x00, 0x2c, 0x50, 0x53, 0x00, 0x0a, 0x3a, 0x32, 0x8c, 0x00, 0x3a, 0x10, 0x04, 0x00, -0x40, 0x41, 0x84, 0x00, 0x3a, 0x40, 0x10, 0x20, 0x01, 0xe3, 0x00, 0x05, 0x44, 0x50, 0x00, 0xff, -0x04, 0x13, 0x80, 0x00, 0x50, 0x4f, 0x7f, 0xff, 0x4d, 0xe2, 0x80, 0x04, 0x10, 0x43, 0x00, 0x05, -0x3a, 0x50, 0x14, 0x00, 0x40, 0x12, 0x84, 0x01, 0x4e, 0x14, 0x00, 0x06, 0x01, 0xe3, 0x00, 0x05, -0x4f, 0xe3, 0xff, 0xe6, 0x00, 0x03, 0x00, 0x05, 0x10, 0x03, 0x00, 0x2e, 0x4e, 0x03, 0x00, 0x06, -0x10, 0x03, 0x00, 0x2d, 0x48, 0x00, 0x00, 0x0e, 0x44, 0x00, 0x03, 0xe8, 0x40, 0x10, 0x80, 0x17, -0x44, 0x3f, 0xff, 0x80, 0x10, 0x33, 0x00, 0x2d, 0x50, 0x03, 0x00, 0x14, 0x49, 0x00, 0x21, 0xea, -0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x1c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xec, 0x54, 0x00, 0x00, 0xff, 0x14, 0x0f, 0x80, 0x01, -0x44, 0x30, 0x00, 0x00, 0x04, 0x1f, 0x80, 0x01, 0x44, 0x00, 0x00, 0x01, 0x50, 0x2f, 0x80, 0x0e, -0x44, 0x90, 0x00, 0x00, 0x12, 0x31, 0x00, 0x00, 0x59, 0xc4, 0x80, 0x00, 0x49, 0xf7, 0xee, 0x34, -0x50, 0x8f, 0x80, 0x08, 0x48, 0x00, 0x01, 0x0a, 0x49, 0xff, 0xe7, 0x80, 0x04, 0x1f, 0x80, 0x01, -0x44, 0x00, 0x00, 0x01, 0x44, 0x20, 0x00, 0x00, 0x49, 0xf7, 0xec, 0x34, 0x44, 0x50, 0x0f, 0xff, -0x4c, 0x02, 0x81, 0x02, 0x49, 0xff, 0xf5, 0xc8, 0x50, 0x60, 0x00, 0x10, 0x4e, 0x03, 0x00, 0x0e, -0x3c, 0x0d, 0xf8, 0x84, 0x04, 0x20, 0x00, 0x00, 0x4e, 0x23, 0x00, 0xf6, 0x44, 0x10, 0x00, 0x0a, -0x49, 0x00, 0x21, 0xa8, 0x48, 0x00, 0x00, 0xf0, 0x04, 0x70, 0x00, 0x02, 0x44, 0x10, 0x00, 0x10, -0x12, 0x10, 0x00, 0x0b, 0x14, 0x70, 0x00, 0x06, 0x02, 0x03, 0x80, 0x01, 0x41, 0xe0, 0x34, 0x09, -0x50, 0x3f, 0x7f, 0xfe, 0x54, 0x51, 0x80, 0xff, 0x11, 0xe3, 0x00, 0x04, 0x5c, 0xf2, 0x80, 0x02, -0x4e, 0xf2, 0x00, 0x44, 0x03, 0xe3, 0x80, 0x01, 0x54, 0x5f, 0x1e, 0x00, 0x40, 0x42, 0xa4, 0x09, -0x54, 0x22, 0x00, 0x08, 0x10, 0x43, 0x00, 0x05, 0x4e, 0x23, 0x00, 0x06, 0x58, 0x20, 0x80, 0x00, -0x48, 0x00, 0x00, 0x08, 0x50, 0x93, 0x80, 0x10, 0x14, 0x93, 0x00, 0x06, 0x40, 0x20, 0x84, 0x08, -0x00, 0x03, 0x00, 0x05, 0x54, 0x30, 0x00, 0x01, 0x4e, 0x32, 0x00, 0x0a, 0x40, 0x43, 0x88, 0x00, -0x50, 0x11, 0x00, 0x10, 0x14, 0x43, 0x00, 0x03, 0x40, 0x20, 0x80, 0x13, 0x01, 0xe3, 0x00, 0x05, -0x54, 0x5f, 0x00, 0x02, 0x4e, 0x52, 0x00, 0x0a, 0x40, 0x33, 0x88, 0x00, 0x14, 0x33, 0x00, 0x04, -0x50, 0x21, 0x00, 0x08, 0x40, 0x21, 0x00, 0x13, 0x00, 0x13, 0x00, 0x05, 0x54, 0x00, 0x80, 0x04, -0x4e, 0x02, 0x00, 0x0a, 0x40, 0x53, 0x88, 0x00, 0x50, 0x41, 0x00, 0x18, 0x14, 0x53, 0x00, 0x05, -0x40, 0x22, 0x00, 0x13, 0x12, 0x23, 0x00, 0x03, 0x00, 0x23, 0x00, 0x04, 0x44, 0x50, 0x00, 0x02, -0x4c, 0x22, 0xc0, 0x56, 0x00, 0x33, 0x80, 0x06, 0x02, 0x13, 0x00, 0x03, 0x55, 0xe1, 0x80, 0x40, -0x40, 0x4f, 0x78, 0x1a, 0x40, 0x41, 0x78, 0x1b, 0x40, 0x53, 0x84, 0x00, 0x40, 0x02, 0x90, 0x00, -0x42, 0x50, 0x00, 0x09, 0x14, 0x53, 0x00, 0x07, 0x00, 0x33, 0x80, 0x06, 0x54, 0x41, 0x80, 0x3f, -0x41, 0xe2, 0x90, 0x00, 0x40, 0x3f, 0x08, 0x09, 0x40, 0x31, 0x88, 0x08, 0x10, 0x43, 0x00, 0x01, -0x14, 0x33, 0x00, 0x08, 0x44, 0x40, 0x00, 0x00, 0x02, 0x23, 0x80, 0x00, 0x40, 0x03, 0x88, 0x00, -0x41, 0xe0, 0x0c, 0x01, 0x13, 0xe3, 0x00, 0x01, 0x44, 0x30, 0x00, 0x08, 0x00, 0x13, 0x80, 0x07, -0x10, 0x43, 0x00, 0x2f, 0x40, 0x20, 0x88, 0x09, 0x10, 0x23, 0x00, 0x30, 0x02, 0x02, 0x80, 0x00, -0x54, 0x20, 0x00, 0x0c, 0x12, 0x03, 0x00, 0x15, 0x4c, 0x21, 0xc0, 0x08, 0x50, 0x03, 0x7f, 0xf0, -0x49, 0xff, 0xfb, 0xea, 0x48, 0x00, 0x00, 0x48, 0x4e, 0x23, 0x00, 0x08, 0x50, 0x03, 0x7f, 0xf0, -0x49, 0xff, 0xfc, 0x8a, 0x48, 0x00, 0x00, 0x40, 0x44, 0x00, 0x00, 0x04, 0x4c, 0x20, 0x40, 0x36, -0x50, 0x03, 0x7f, 0xf0, 0x49, 0xff, 0xfd, 0xf0, 0x48, 0x00, 0x00, 0x36, 0x44, 0x50, 0x00, 0x03, -0x4c, 0x22, 0xc0, 0x2c, 0x05, 0xe3, 0x00, 0x06, 0x44, 0x20, 0x00, 0x06, 0x50, 0x1f, 0x00, 0x02, -0x58, 0x04, 0x00, 0x00, 0x49, 0xf7, 0xe2, 0x1e, 0x00, 0x03, 0x80, 0x08, 0x49, 0xff, 0xf4, 0xe0, -0x14, 0x03, 0x00, 0x09, 0x50, 0x03, 0x7f, 0xf0, 0x02, 0x14, 0x80, 0x00, 0x12, 0x13, 0x00, 0x15, -0x02, 0x44, 0x80, 0x04, 0x12, 0x43, 0x00, 0x14, 0x02, 0x24, 0x80, 0x05, 0x12, 0x23, 0x00, 0x16, -0x49, 0x00, 0x22, 0x00, 0x50, 0x03, 0x7f, 0xf0, 0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xf5, 0xe0, -0x49, 0xff, 0xe6, 0x84, 0x48, 0x00, 0x00, 0x08, 0x50, 0x03, 0x7f, 0xf0, 0x44, 0x10, 0x00, 0x01, -0x49, 0xff, 0xf5, 0xd6, 0x51, 0xce, 0x00, 0x01, 0x02, 0x34, 0x00, 0x03, 0x40, 0xfe, 0x0c, 0x06, -0x4e, 0xf3, 0xfe, 0xf4, 0x51, 0xff, 0x80, 0x14, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x44, 0x10, 0x00, 0x00, 0x44, 0x00, 0x00, 0x03, -0x49, 0xff, 0xdb, 0xb8, 0x46, 0x00, 0x02, 0x10, 0x58, 0x00, 0x00, 0x04, 0x49, 0xff, 0xdb, 0xd8, +0x51, 0xff, 0xff, 0xf4, 0x54, 0x00, 0x00, 0xff, 0x14, 0x0f, 0x80, 0x01, 0x45, 0xc0, 0x34, 0x20, +0x48, 0x00, 0x00, 0x12, 0x2e, 0x17, 0xdf, 0xac, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x12, 0xc0, 0x0a, +0x49, 0x00, 0x04, 0xd8, 0x58, 0x03, 0x00, 0x00, 0x49, 0x00, 0x05, 0xc2, 0x48, 0x00, 0x00, 0x04, +0x49, 0x00, 0x03, 0x06, 0x04, 0x1f, 0x80, 0x01, 0x44, 0x20, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, +0x4b, 0xe0, 0x70, 0x01, 0x44, 0x50, 0x0f, 0xff, 0x58, 0x60, 0x00, 0x00, 0x4c, 0x02, 0xff, 0xe4, +0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, +0x51, 0xff, 0xff, 0xfc, 0x58, 0x80, 0x00, 0x00, 0x54, 0x70, 0x00, 0xff, 0x3f, 0xce, 0xda, 0x44, +0x48, 0x00, 0x00, 0x26, 0x2e, 0x20, 0x02, 0x88, 0x4e, 0x22, 0x00, 0x36, 0x49, 0x00, 0x02, 0x88, +0x44, 0x10, 0x00, 0x01, 0x4e, 0x03, 0x00, 0x0e, 0x58, 0x00, 0x80, 0x00, 0x58, 0x23, 0x00, 0x00, +0x58, 0x13, 0x80, 0x00, 0x58, 0x30, 0x00, 0x00, 0x49, 0xf7, 0xf9, 0x34, 0x48, 0x00, 0x00, 0x24, +0x04, 0x50, 0x00, 0x02, 0x44, 0x30, 0x00, 0xa0, 0x00, 0x42, 0x80, 0x05, 0x4c, 0x41, 0xc0, 0x06, +0x49, 0x00, 0x11, 0x64, 0x48, 0x00, 0x00, 0x04, 0x4b, 0xe0, 0x70, 0x01, 0x2f, 0xe0, 0x02, 0x88, +0x44, 0x20, 0x00, 0x00, 0x58, 0x13, 0x80, 0x00, 0x44, 0x00, 0x00, 0x01, 0x4f, 0xe2, 0x00, 0x0c, +0x49, 0xf7, 0xf8, 0x88, 0x44, 0x50, 0x0f, 0xff, 0x58, 0x60, 0x00, 0x00, 0x58, 0x14, 0x00, 0x00, +0x4c, 0x02, 0xff, 0xca, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xdc, 0x46, 0xa6, 0x03, 0x10, 0x58, 0x95, 0x00, 0x00, +0x45, 0xc0, 0x00, 0x00, 0x50, 0x6f, 0x80, 0x10, 0x58, 0x8f, 0x80, 0x00, 0x48, 0x00, 0x00, 0xe0, +0x44, 0x00, 0x00, 0x00, 0x14, 0x04, 0x00, 0x02, 0x14, 0x03, 0x00, 0x00, 0x14, 0x04, 0x00, 0x00, +0x14, 0x03, 0x00, 0x01, 0x14, 0x04, 0x00, 0x01, 0x14, 0x03, 0x00, 0x02, 0x44, 0x00, 0x00, 0x00, +0x38, 0x43, 0x00, 0x02, 0x38, 0x24, 0x00, 0x02, 0x44, 0x10, 0x00, 0x10, 0x40, 0x31, 0x10, 0x02, +0x38, 0x33, 0x00, 0x0a, 0x50, 0x00, 0x00, 0x04, 0x4c, 0x00, 0xff, 0xf4, 0x04, 0x53, 0x00, 0x01, +0x4e, 0x53, 0x00, 0x0e, 0x05, 0xe3, 0x00, 0x00, 0x4f, 0xe3, 0x00, 0x0a, 0x04, 0x03, 0x00, 0x02, +0x4e, 0x03, 0x00, 0x06, 0x04, 0x13, 0x00, 0x03, 0x4e, 0x12, 0x00, 0xe8, 0x04, 0x13, 0x00, 0x03, +0x54, 0x30, 0x80, 0x01, 0x4e, 0x32, 0x00, 0x10, 0x46, 0x5a, 0x00, 0x00, 0x45, 0xe0, 0x00, 0x01, +0x15, 0xe2, 0x80, 0x02, 0x42, 0x40, 0x80, 0x09, 0x44, 0x00, 0x00, 0x00, 0x14, 0x43, 0x00, 0x03, +0x49, 0xff, 0xff, 0x66, 0x04, 0x13, 0x00, 0x03, 0x54, 0x00, 0x80, 0x02, 0x4e, 0x02, 0x00, 0x10, +0x46, 0x4a, 0x00, 0x00, 0x44, 0x20, 0x00, 0x02, 0x14, 0x22, 0x00, 0x02, 0x42, 0x10, 0x84, 0x09, +0x44, 0x00, 0x00, 0x01, 0x14, 0x13, 0x00, 0x03, 0x49, 0xff, 0xff, 0x22, 0x04, 0x13, 0x00, 0x03, +0x54, 0x50, 0x80, 0x04, 0x4e, 0x52, 0x00, 0x10, 0x46, 0x3a, 0x00, 0x00, 0x44, 0x40, 0x00, 0x04, +0x14, 0x41, 0x80, 0x02, 0x43, 0xe0, 0x88, 0x09, 0x44, 0x00, 0x00, 0x02, 0x15, 0xe3, 0x00, 0x03, +0x49, 0xff, 0xfe, 0xc8, 0x04, 0x13, 0x00, 0x03, 0x54, 0x20, 0x80, 0x08, 0x4e, 0x22, 0x00, 0x10, +0x47, 0xea, 0x00, 0x00, 0x44, 0x00, 0x00, 0x08, 0x14, 0x0f, 0x00, 0x02, 0x42, 0x10, 0x8c, 0x09, +0x44, 0x00, 0x00, 0x03, 0x14, 0x13, 0x00, 0x03, 0x49, 0x00, 0x0b, 0xd6, 0x04, 0x33, 0x00, 0x01, +0x4e, 0x33, 0x00, 0x0a, 0x04, 0x43, 0x00, 0x00, 0x4e, 0x43, 0x00, 0x06, 0x04, 0x23, 0x00, 0x02, +0x4e, 0x22, 0x00, 0x34, 0x3e, 0x7f, 0xdf, 0x6c, 0x04, 0x03, 0x80, 0x00, 0x04, 0x13, 0x80, 0x01, +0x39, 0xe3, 0x02, 0x02, 0x40, 0x50, 0xf8, 0x02, 0x4e, 0x52, 0x00, 0x20, 0x3e, 0x3f, 0xc9, 0x90, +0x38, 0x01, 0x83, 0x02, 0x14, 0x10, 0x00, 0x00, 0x04, 0x23, 0x80, 0x02, 0x4e, 0x22, 0x00, 0x0a, +0x04, 0x43, 0x80, 0x00, 0x38, 0x13, 0x12, 0x02, 0x54, 0x02, 0x00, 0xff, 0x4b, 0xe0, 0x08, 0x01, +0x04, 0x53, 0x80, 0x00, 0x04, 0x03, 0x80, 0x01, 0x38, 0x23, 0x16, 0x02, 0x41, 0xe0, 0x00, 0x05, +0x40, 0x1f, 0x08, 0x02, 0x38, 0x13, 0x16, 0x0a, 0x3e, 0x5f, 0xdf, 0x9c, 0x4c, 0x72, 0x80, 0x06, +0x50, 0x73, 0x80, 0x0c, 0x48, 0xff, 0xff, 0xd2, 0x04, 0x43, 0x00, 0x01, 0x4e, 0x43, 0x00, 0x0e, +0x04, 0x53, 0x00, 0x00, 0x4e, 0x53, 0x00, 0x0a, 0x04, 0x13, 0x00, 0x02, 0x4e, 0x13, 0x00, 0x06, +0x05, 0xe3, 0x00, 0x03, 0x4f, 0xe2, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0x74, +0x44, 0x20, 0x03, 0x03, 0x49, 0xff, 0xdf, 0xc2, 0x48, 0x00, 0x00, 0x00, 0x51, 0xce, 0x00, 0x01, +0x55, 0xce, 0x00, 0xff, 0x44, 0x50, 0x00, 0x03, 0x4d, 0xc2, 0x80, 0x38, 0x04, 0x55, 0x00, 0x00, +0x46, 0x46, 0x03, 0x10, 0x14, 0x53, 0x00, 0x00, 0x04, 0x04, 0x80, 0x02, 0x58, 0x32, 0x00, 0x00, +0x14, 0x04, 0x00, 0x00, 0x04, 0x22, 0x00, 0x01, 0x58, 0x11, 0x80, 0x00, 0x14, 0x23, 0x00, 0x01, +0x05, 0xe1, 0x80, 0x03, 0x58, 0x00, 0x80, 0x00, 0x15, 0xe4, 0x00, 0x01, 0x04, 0x50, 0x80, 0x09, +0x46, 0x3a, 0x00, 0x00, 0x14, 0x53, 0x00, 0x02, 0x04, 0x40, 0x00, 0x0a, 0x59, 0xe1, 0x80, 0x00, +0x14, 0x44, 0x00, 0x02, 0x04, 0x21, 0x80, 0x02, 0x46, 0x56, 0x04, 0x00, 0x14, 0x23, 0x00, 0x03, +0x04, 0x1f, 0x00, 0x01, 0x14, 0x14, 0x00, 0x03, 0x04, 0x32, 0x80, 0x00, 0x42, 0x01, 0xdc, 0x0b, +0x4e, 0x03, 0xfe, 0xf0, 0x48, 0xff, 0xfe, 0xfc, 0x51, 0xff, 0x80, 0x24, 0x3a, 0x6f, 0xaa, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xa4, 0x44, 0x40, 0x00, 0x80, +0x54, 0x30, 0x00, 0xff, 0x44, 0x50, 0x00, 0x01, 0x40, 0x62, 0x8c, 0x1b, 0x40, 0x62, 0x0c, 0x1a, +0x50, 0x0f, 0x80, 0x1c, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x23, 0x45, 0xc0, 0x00, 0x00, +0x14, 0x6f, 0x80, 0x05, 0x49, 0xf7, 0xee, 0x0a, 0x15, 0xcf, 0x80, 0x04, 0x50, 0x6f, 0x80, 0x40, +0x50, 0xaf, 0x80, 0x48, 0x50, 0x9f, 0x80, 0x54, 0x50, 0x8f, 0x80, 0x42, 0x50, 0x7f, 0x80, 0x49, +0x04, 0x3f, 0x80, 0x04, 0x51, 0xcf, 0x80, 0x4c, 0x51, 0xef, 0x80, 0x50, 0x54, 0x01, 0x80, 0xff, +0x58, 0x13, 0x00, 0x00, 0x58, 0x25, 0x00, 0x00, 0x15, 0xcf, 0x80, 0x03, 0x15, 0xef, 0x80, 0x00, +0x51, 0xcf, 0x80, 0x44, 0x51, 0xef, 0x80, 0x4a, 0x58, 0x34, 0x80, 0x00, 0x58, 0x44, 0x00, 0x00, +0x58, 0x53, 0x80, 0x00, 0x15, 0xcf, 0x80, 0x01, 0x15, 0xef, 0x80, 0x02, 0x49, 0x00, 0x4a, 0x22, +0x05, 0xcf, 0x80, 0x04, 0x44, 0x00, 0x00, 0x00, 0x50, 0x2e, 0x00, 0x01, 0x14, 0x2f, 0x80, 0x04, +0x05, 0xcf, 0x80, 0x05, 0x04, 0x1f, 0x80, 0x04, 0x12, 0x03, 0x00, 0x03, 0x40, 0xf0, 0xf0, 0x06, +0x4e, 0xf3, 0xff, 0xd0, 0x51, 0xff, 0x80, 0x5c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x49, 0x00, 0x4c, 0x12, 0x51, 0xff, 0x80, 0x04, +0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3e, 0x0f, 0xf2, 0x4c, 0x44, 0x20, 0x00, 0x00, +0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x01, 0x14, 0x20, 0x00, 0x02, 0x50, 0x10, 0x00, 0x10, +0x58, 0x40, 0x00, 0x00, 0x14, 0x20, 0x80, 0x02, 0x04, 0x52, 0x00, 0x01, 0x14, 0x10, 0x00, 0x01, +0x14, 0x50, 0x80, 0x01, 0x14, 0x00, 0x80, 0x00, 0x14, 0x12, 0x80, 0x00, 0x50, 0x10, 0x80, 0x68, +0x04, 0x30, 0x00, 0x02, 0x50, 0x51, 0x80, 0x01, 0x50, 0x30, 0x01, 0xb0, 0x14, 0x50, 0x00, 0x02, +0x4c, 0x11, 0xff, 0xea, 0x3e, 0x0f, 0xef, 0xac, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x01, +0x14, 0x20, 0x00, 0x02, 0x50, 0x10, 0x00, 0x0c, 0x58, 0x40, 0x00, 0x00, 0x14, 0x20, 0x80, 0x02, +0x04, 0x52, 0x00, 0x01, 0x14, 0x10, 0x00, 0x01, 0x14, 0x50, 0x80, 0x01, 0x14, 0x00, 0x80, 0x00, +0x14, 0x12, 0x80, 0x00, 0x50, 0x10, 0x80, 0x44, 0x04, 0x30, 0x00, 0x02, 0x50, 0x51, 0x80, 0x01, +0x50, 0x30, 0x01, 0x1c, 0x14, 0x50, 0x00, 0x02, 0x4c, 0x11, 0xff, 0xea, 0x3e, 0x0f, 0xe9, 0xd4, +0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x01, 0x14, 0x20, 0x00, 0x02, 0x50, 0x10, 0x00, 0x10, +0x58, 0x40, 0x00, 0x00, 0x14, 0x20, 0x80, 0x02, 0x04, 0x52, 0x00, 0x01, 0x14, 0x10, 0x00, 0x01, +0x14, 0x50, 0x80, 0x01, 0x14, 0x00, 0x80, 0x00, 0x14, 0x12, 0x80, 0x00, 0x50, 0x10, 0x80, 0x68, +0x04, 0x30, 0x00, 0x02, 0x50, 0x51, 0x80, 0x01, 0x50, 0x30, 0x01, 0xb0, 0x14, 0x50, 0x00, 0x02, +0x4c, 0x11, 0xff, 0xea, 0x4a, 0x00, 0x78, 0x20, 0x54, 0x00, 0x00, 0xff, 0x40, 0x10, 0x00, 0x10, +0x4e, 0x14, 0x00, 0x06, 0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0a, 0x44, 0x30, 0x00, 0x03, +0x42, 0x00, 0x0c, 0x24, 0x3e, 0x2f, 0xf0, 0xc8, 0x40, 0x00, 0x08, 0x00, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x3e, 0x1f, 0xef, 0xac, 0x04, 0x60, 0x80, 0x00, +0x40, 0x70, 0x00, 0x13, 0x4c, 0x60, 0xc0, 0x06, 0x44, 0x60, 0x00, 0x00, 0x48, 0x00, 0x00, 0x20, +0x04, 0x53, 0x00, 0x01, 0x04, 0x33, 0x00, 0x00, 0x44, 0x40, 0x00, 0x00, 0x14, 0x51, 0x80, 0x01, +0x14, 0x32, 0x80, 0x00, 0x14, 0x43, 0x00, 0x01, 0x14, 0x43, 0x00, 0x00, 0x04, 0x20, 0x80, 0x02, +0x50, 0x01, 0x7f, 0xff, 0x14, 0x00, 0x80, 0x02, 0x4e, 0x62, 0x00, 0x0a, 0x58, 0x03, 0x80, 0x00, +0x49, 0xf7, 0xf2, 0x96, 0x14, 0x03, 0x00, 0x02, 0x12, 0x73, 0x00, 0x06, 0x58, 0x03, 0x00, 0x00, +0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, +0x51, 0xff, 0xff, 0xfc, 0x3e, 0x3f, 0xf2, 0x4c, 0x56, 0x10, 0x80, 0x01, 0x3e, 0x4f, 0xe9, 0xd4, +0x40, 0x22, 0x04, 0x1a, 0x40, 0x21, 0x84, 0x1b, 0x04, 0x61, 0x00, 0x00, 0x40, 0x70, 0x00, 0x13, +0x4c, 0x61, 0x40, 0x06, 0x44, 0x60, 0x00, 0x00, 0x48, 0x00, 0x00, 0x20, 0x04, 0x13, 0x00, 0x01, +0x04, 0x33, 0x00, 0x00, 0x45, 0xe0, 0x00, 0x00, 0x14, 0x11, 0x80, 0x01, 0x14, 0x30, 0x80, 0x00, +0x15, 0xe3, 0x00, 0x01, 0x15, 0xe3, 0x00, 0x00, 0x04, 0x51, 0x00, 0x02, 0x50, 0x02, 0xff, 0xff, +0x14, 0x01, 0x00, 0x02, 0x4e, 0x62, 0x00, 0x0a, 0x58, 0x03, 0x80, 0x00, 0x49, 0xf7, 0xf2, 0x58, +0x14, 0x03, 0x00, 0x02, 0x12, 0x73, 0x00, 0x06, 0x58, 0x03, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, +0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, +0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x28, 0x3e, 0x0f, 0xeb, 0x84, 0x49, 0xf7, 0xec, 0xb6, +0x44, 0x2f, 0xff, 0xff, 0x3e, 0x1f, 0xeb, 0xac, 0x3c, 0x2f, 0xfa, 0xe2, 0x3c, 0x1f, 0xfa, 0xe1, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, -0x51, 0xff, 0xff, 0xfc, 0x4e, 0x03, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcc, 0xc4, -0x44, 0x20, 0x01, 0x93, 0x49, 0xff, 0xd3, 0x32, 0x48, 0x00, 0x00, 0x00, 0x4e, 0x13, 0x00, 0x0c, -0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcc, 0xc4, 0x44, 0x20, 0x01, 0x94, 0x49, 0xff, 0xd3, 0x26, -0x48, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x5c, 0xf1, 0x00, 0x07, 0x4e, 0xf3, 0x00, 0x1c, -0x00, 0x40, 0x00, 0x02, 0x44, 0x50, 0x00, 0x50, 0x4c, 0x42, 0xc0, 0x16, 0x00, 0x50, 0x00, 0x03, -0x45, 0xe0, 0x00, 0x6f, 0x4c, 0x5f, 0x40, 0x10, 0x00, 0x20, 0x00, 0x04, 0x44, 0x50, 0x00, 0x9a, -0x4c, 0x22, 0xc0, 0x0a, 0x00, 0x00, 0x00, 0x05, 0x10, 0x00, 0x80, 0x00, 0x44, 0x00, 0x00, 0x01, -0x48, 0x00, 0x00, 0x04, 0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3e, 0x5f, 0xe2, 0x14, 0x04, 0x12, 0x80, 0x00, 0x44, 0x20, 0x00, 0x00, -0x14, 0x20, 0x80, 0x00, 0x58, 0x32, 0x80, 0x00, 0x04, 0x42, 0x80, 0x00, 0x58, 0x11, 0x00, 0x00, -0x10, 0x22, 0x00, 0x04, 0x58, 0x41, 0x00, 0x00, 0x04, 0x02, 0x80, 0x00, 0x10, 0x20, 0x00, 0x05, -0x04, 0x21, 0x80, 0x00, 0x40, 0x00, 0x8c, 0x08, 0x40, 0x51, 0x00, 0x00, 0x10, 0x12, 0x80, 0x06, -0x50, 0x10, 0x80, 0x01, 0x04, 0x21, 0x80, 0x00, 0x40, 0x51, 0x00, 0x00, 0x44, 0x00, 0x00, 0x08, -0x10, 0x42, 0x80, 0x07, 0x4c, 0x10, 0x7f, 0xee, 0x4a, 0x00, 0x78, 0x20, 0x2e, 0x00, 0x02, 0x85, -0x4e, 0x02, 0x00, 0x4e, 0x46, 0x36, 0x04, 0x00, 0x04, 0x41, 0x80, 0x02, 0x58, 0x11, 0x80, 0x00, -0x42, 0x22, 0x5c, 0x08, 0x14, 0x21, 0x80, 0x02, 0x04, 0x50, 0x80, 0x00, 0x46, 0x00, 0x08, 0x00, -0x40, 0x32, 0x80, 0x02, 0x4e, 0x33, 0xff, 0xfa, 0x46, 0x56, 0x04, 0x00, 0x58, 0x52, 0x80, 0x08, -0x04, 0x02, 0x80, 0x00, 0x46, 0x18, 0x00, 0x21, 0x58, 0x20, 0x00, 0x04, 0x14, 0x22, 0x80, 0x00, -0x58, 0x10, 0x81, 0x00, 0x04, 0x42, 0x80, 0x00, 0x46, 0x28, 0x00, 0x20, 0x58, 0x02, 0x00, 0x08, -0x14, 0x02, 0x80, 0x00, 0x04, 0x42, 0x80, 0x00, 0x58, 0x02, 0x00, 0x10, 0x14, 0x02, 0x80, 0x00, -0x04, 0x42, 0x80, 0x00, 0x58, 0x02, 0x00, 0x03, 0x14, 0x02, 0x80, 0x00, 0x44, 0x4f, 0xff, 0x9f, -0x04, 0x00, 0x80, 0x00, 0x40, 0x50, 0x10, 0x02, 0x14, 0x50, 0x80, 0x00, 0x04, 0x00, 0x80, 0x00, -0x42, 0x50, 0x18, 0x09, 0x14, 0x50, 0x80, 0x00, 0x04, 0x51, 0x00, 0x00, 0x40, 0x42, 0x88, 0x09, -0x40, 0x42, 0x08, 0x08, 0x14, 0x41, 0x00, 0x00, 0x3e, 0x30, 0x02, 0x85, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0x98, 0xbc, 0x2e, 0x27, 0xfa, 0xbd, 0x58, 0x60, 0x00, 0x00, 0x4e, 0x22, 0x00, 0x2c, -0x2e, 0x07, 0xfa, 0xbc, 0x4e, 0x02, 0x00, 0x28, 0x2e, 0x37, 0xe5, 0xa5, 0x44, 0x50, 0x00, 0x01, -0x4c, 0x32, 0x80, 0x22, 0x2e, 0x57, 0xe4, 0x7c, 0x45, 0xe0, 0x00, 0x03, 0x4c, 0x5f, 0x00, 0x1c, -0x44, 0x50, 0x00, 0x75, 0x4c, 0x62, 0x80, 0x04, 0x49, 0xff, 0xe5, 0x96, 0x2e, 0x37, 0xe4, 0x78, -0x44, 0x50, 0x00, 0x01, 0x4c, 0x32, 0xc0, 0x10, 0x44, 0x50, 0x00, 0x75, 0x4c, 0x62, 0x80, 0x0c, -0x2f, 0xe7, 0xfa, 0xbe, 0x4f, 0xe3, 0x00, 0x08, 0x49, 0xf7, 0xdd, 0x42, 0x4e, 0x03, 0x00, 0x04, -0x49, 0xff, 0xd8, 0xa0, 0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, -0x51, 0xff, 0xff, 0xfc, 0x2e, 0x27, 0xfa, 0xbd, 0x4e, 0x22, 0x00, 0x14, 0x2e, 0x17, 0xfa, 0xbc, -0x4e, 0x12, 0x00, 0x10, 0x44, 0x50, 0x00, 0x75, 0x4c, 0x02, 0x80, 0x0c, 0x49, 0xff, 0xed, 0x00, -0x2e, 0x07, 0xe4, 0x78, 0x44, 0x40, 0x00, 0x01, 0x4c, 0x02, 0x40, 0x04, 0x49, 0xff, 0xd8, 0x3c, -0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa8, 0xbc, -0x04, 0x10, 0x00, 0x02, 0x00, 0x60, 0x80, 0x06, 0x50, 0x80, 0x80, 0x20, 0x4e, 0x62, 0x00, 0x0c, -0x04, 0x24, 0x00, 0x01, 0x04, 0x14, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x14, 0x20, 0x80, 0x00, -0x48, 0x00, 0x00, 0x42, 0x44, 0x00, 0x00, 0x14, 0x00, 0xa0, 0x80, 0x07, 0x49, 0xf7, 0xe6, 0x6e, -0x44, 0x50, 0x0f, 0xff, 0x58, 0x90, 0x00, 0x00, 0x4c, 0x02, 0xc0, 0x06, 0x44, 0x00, 0x01, 0x03, -0x48, 0x00, 0x00, 0x32, 0x49, 0xf7, 0xe6, 0x34, 0x58, 0x13, 0x00, 0x00, 0x44, 0x20, 0x00, 0x14, -0x58, 0x70, 0x00, 0x00, 0x49, 0xf7, 0xe0, 0xa2, 0x44, 0x30, 0x00, 0x14, 0x44, 0x2f, 0xe0, 0x00, -0x44, 0x10, 0x00, 0x06, 0x12, 0x33, 0x80, 0x00, 0x12, 0x23, 0x80, 0x01, 0x10, 0x13, 0x80, 0x04, -0x10, 0xa3, 0x80, 0x05, 0x50, 0x73, 0x80, 0x0c, 0x04, 0x54, 0x00, 0x00, 0x58, 0x24, 0x80, 0x00, -0x14, 0x53, 0x80, 0x00, 0x44, 0x10, 0x00, 0x01, 0x04, 0x04, 0x00, 0x00, 0x58, 0x33, 0x00, 0x00, -0x04, 0x40, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, 0x14, 0x43, 0x80, 0x01, 0x49, 0xf7, 0xea, 0x3a, -0x58, 0x03, 0x00, 0x00, 0x3a, 0x6f, 0xa8, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa8, 0xbc, -0x2e, 0x50, 0x02, 0x85, 0x44, 0x90, 0x00, 0x01, 0x4c, 0x54, 0x80, 0x72, 0x46, 0x28, 0x00, 0x20, -0x04, 0x71, 0x00, 0x00, 0x47, 0xe8, 0x00, 0x21, 0x58, 0x83, 0x80, 0x03, 0x14, 0x81, 0x00, 0x00, -0x59, 0xef, 0x01, 0x00, 0x04, 0x0f, 0x00, 0x00, 0x46, 0x76, 0x04, 0x00, 0x58, 0x60, 0x00, 0x40, -0x14, 0x6f, 0x00, 0x00, 0x44, 0x80, 0x17, 0xc4, 0x04, 0x1f, 0x00, 0x00, 0x58, 0x50, 0x80, 0x60, -0x14, 0x5f, 0x00, 0x00, 0x58, 0x04, 0x80, 0x00, 0x4b, 0xe0, 0x20, 0x01, 0x04, 0x43, 0x80, 0x02, -0x46, 0x66, 0x04, 0x00, 0x58, 0x32, 0x00, 0x10, 0x14, 0x33, 0x80, 0x02, 0x58, 0x63, 0x00, 0x04, -0x04, 0x23, 0x00, 0x00, 0x44, 0x00, 0x00, 0x0a, 0x40, 0x11, 0x24, 0x04, 0x14, 0x13, 0x00, 0x00, -0x46, 0x78, 0x00, 0x20, 0x04, 0x53, 0x00, 0x00, 0x58, 0x73, 0x80, 0xfc, 0x58, 0x42, 0x80, 0x02, -0x14, 0x43, 0x00, 0x00, 0x4b, 0xe0, 0x20, 0x01, 0x04, 0x33, 0x00, 0x00, 0x44, 0x00, 0x00, 0x04, -0x58, 0x21, 0x80, 0x10, 0x14, 0x23, 0x00, 0x00, 0x04, 0x13, 0x00, 0x00, 0x40, 0x50, 0x80, 0x04, -0x14, 0x53, 0x00, 0x00, 0x4b, 0xe0, 0x20, 0x01, 0x04, 0x43, 0x00, 0x00, 0x58, 0x32, 0x00, 0x08, -0x14, 0x33, 0x00, 0x00, 0x58, 0x04, 0x80, 0x00, 0x04, 0x23, 0x80, 0x00, 0x58, 0x11, 0x00, 0x0f, -0x14, 0x13, 0x80, 0x00, 0x04, 0x43, 0x80, 0x00, 0x40, 0x32, 0x10, 0x09, 0x40, 0x31, 0x90, 0x08, -0x14, 0x33, 0x80, 0x00, 0x4b, 0xe0, 0x20, 0x01, 0x04, 0x23, 0x80, 0x00, 0x58, 0x11, 0x00, 0x0f, -0x14, 0x13, 0x80, 0x00, 0x49, 0xff, 0xdf, 0x9c, 0x3e, 0x90, 0x02, 0x85, 0x3a, 0x6f, 0xa8, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x3e, 0xaf, 0xe4, 0x60, -0x3e, 0x6f, 0xe1, 0xbc, 0x3e, 0x7f, 0xe5, 0x84, 0x3f, 0xce, 0xe5, 0x8c, 0x04, 0x25, 0x00, 0x00, -0x44, 0x50, 0x00, 0x02, 0x3c, 0x2f, 0xf9, 0x19, 0x14, 0x05, 0x00, 0x00, 0x4c, 0x02, 0x80, 0x08, -0x44, 0x50, 0x00, 0x05, 0x4c, 0x02, 0xc0, 0x76, 0x48, 0x00, 0x00, 0x5c, 0x04, 0x03, 0x00, 0x00, -0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0xa4, 0x49, 0xf7, 0xdf, 0xd8, 0x00, 0x03, 0x80, 0x00, -0x3e, 0x9f, 0xe6, 0xec, 0x49, 0xff, 0xf2, 0x08, 0x00, 0x03, 0x80, 0x00, 0x44, 0x80, 0x00, 0x00, -0x49, 0xff, 0xf1, 0xa4, 0x49, 0xff, 0xff, 0x54, 0x04, 0x03, 0x00, 0x00, 0x44, 0x30, 0x00, 0x01, -0x10, 0x30, 0x00, 0x9c, 0x44, 0x00, 0x00, 0x00, 0x04, 0x53, 0x00, 0x00, 0x10, 0x32, 0x80, 0x9e, -0x04, 0x43, 0x00, 0x00, 0x10, 0x32, 0x00, 0x9d, 0x04, 0x23, 0x00, 0x00, 0x10, 0x01, 0x00, 0x9f, -0x04, 0x13, 0x00, 0x00, 0x10, 0x30, 0x80, 0xa0, 0x04, 0x53, 0x00, 0x00, 0x10, 0x02, 0x80, 0xa1, -0x49, 0xff, 0xf2, 0xe6, 0x49, 0xff, 0xf1, 0xec, 0x44, 0x00, 0x00, 0x01, 0x49, 0x00, 0x1f, 0x22, -0x49, 0xff, 0xf7, 0xfe, 0x49, 0xff, 0xfd, 0xa6, 0x49, 0x00, 0x21, 0xf4, 0x49, 0xff, 0xd3, 0x96, -0x49, 0xff, 0xfd, 0xfa, 0x49, 0x00, 0x0f, 0xc8, 0x58, 0x04, 0x80, 0x00, 0x4b, 0xe0, 0x70, 0x01, -0x50, 0x14, 0x00, 0x01, 0x10, 0x84, 0x80, 0x2f, 0x44, 0x30, 0x00, 0x04, 0x54, 0x80, 0x80, 0xff, -0x50, 0x94, 0x80, 0x30, 0x4c, 0x81, 0xff, 0xf2, 0x44, 0x00, 0x00, 0x05, 0x48, 0x00, 0x00, 0x1a, -0x01, 0xe3, 0x80, 0x00, 0x4f, 0xe2, 0x00, 0x16, 0x3c, 0x5d, 0xf9, 0x62, 0x44, 0x20, 0x00, 0x00, -0x50, 0x42, 0xff, 0xff, 0x10, 0x23, 0x80, 0x00, 0x5c, 0xf2, 0x00, 0x03, 0x4e, 0xf3, 0x00, 0x04, -0x48, 0x00, 0x00, 0x06, 0x44, 0x30, 0x00, 0x00, 0x3c, 0x3f, 0xf9, 0x62, 0x44, 0x00, 0x00, 0x04, -0x04, 0x55, 0x00, 0x00, 0x4c, 0x02, 0xff, 0x7c, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x04, 0x70, 0x00, 0x02, -0x58, 0x60, 0x00, 0x00, 0x50, 0x13, 0x80, 0x20, 0x00, 0x20, 0x80, 0x00, 0x4e, 0x23, 0x00, 0x36, -0x05, 0xe0, 0x80, 0x01, 0x40, 0x51, 0x78, 0x06, 0x3e, 0x57, 0xe5, 0x84, 0x04, 0x00, 0x80, 0x01, -0x44, 0x20, 0x00, 0x03, 0x3c, 0x0f, 0xf9, 0x62, 0x4c, 0x01, 0x40, 0x06, 0x00, 0x10, 0x80, 0x01, -0x3e, 0x17, 0xe5, 0x8c, 0x3c, 0x0d, 0xf9, 0x18, 0x44, 0x50, 0x00, 0x04, 0x4c, 0x02, 0xc0, 0x0a, -0x44, 0x10, 0x00, 0x6a, 0x44, 0x20, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x0c, -0x44, 0x50, 0x00, 0x05, 0x4c, 0x02, 0xc0, 0x0a, 0x44, 0x00, 0x00, 0x01, 0x44, 0x10, 0x00, 0x6a, -0x44, 0x20, 0x00, 0x00, 0x49, 0xf8, 0x04, 0x3e, 0x44, 0x00, 0x00, 0x03, 0x49, 0xff, 0xff, 0x2c, -0x44, 0x10, 0x00, 0x00, 0x48, 0x00, 0x00, 0x12, 0x3c, 0x5d, 0xf9, 0x18, 0x45, 0xe0, 0x00, 0x04, -0x4c, 0x5f, 0x00, 0x08, 0x46, 0x1c, 0x00, 0x00, 0x58, 0x10, 0x80, 0x01, 0x48, 0x00, 0x00, 0x06, -0x49, 0x00, 0x15, 0xee, 0x58, 0x10, 0x00, 0x00, 0x00, 0x23, 0x80, 0x0b, 0x54, 0x01, 0x00, 0x01, -0x4e, 0x02, 0x00, 0x08, 0x58, 0x03, 0x00, 0x00, 0x49, 0x00, 0x02, 0x12, 0x58, 0x10, 0x00, 0x00, -0x58, 0x00, 0x80, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x3c, 0x2d, 0xf9, 0x18, 0x4e, 0x23, 0x00, 0x0c, -0x44, 0x00, 0x00, 0x01, 0x44, 0x10, 0x00, 0x6a, 0x49, 0xf8, 0x04, 0x04, 0x44, 0x00, 0x00, 0x03, -0x49, 0xff, 0xfe, 0xf2, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x49, 0x00, 0x0f, 0x6e, 0x49, 0x00, 0x1e, 0x26, -0x49, 0x00, 0x0f, 0x1c, 0x49, 0xff, 0xfd, 0x64, 0x44, 0x00, 0x00, 0x00, 0x49, 0xff, 0xfe, 0xdc, +0x51, 0xff, 0xff, 0xfc, 0x40, 0x00, 0x00, 0x13, 0x49, 0xf7, 0xf2, 0x44, 0x51, 0xff, 0x80, 0x04, +0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, +0x4e, 0x03, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0xb0, 0x44, 0x20, 0x02, 0xb4, +0x49, 0xff, 0xdd, 0xe4, 0x48, 0x00, 0x00, 0x00, 0x3e, 0x1f, 0xeb, 0xac, 0x40, 0xf0, 0x04, 0x06, +0x4e, 0xf3, 0x00, 0x1e, 0x50, 0x10, 0x83, 0xff, 0x40, 0xf0, 0x80, 0x06, 0x4e, 0xf3, 0x00, 0x18, +0x3e, 0x1f, 0xeb, 0x84, 0x04, 0x20, 0x80, 0x00, 0x40, 0x00, 0x08, 0x01, 0x40, 0x00, 0x14, 0x09, +0x5c, 0xf0, 0x00, 0x20, 0x4e, 0xf3, 0x00, 0x12, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0xb0, +0x44, 0x20, 0x02, 0xc0, 0x49, 0xff, 0xdd, 0xc2, 0x48, 0x00, 0x00, 0x00, 0x49, 0xf7, 0xf1, 0xf8, +0x49, 0xf7, 0xf2, 0x08, 0x48, 0x00, 0x00, 0x2c, 0x58, 0x40, 0x80, 0x00, 0x40, 0x30, 0x10, 0x00, +0x50, 0x31, 0x80, 0x08, 0x00, 0x21, 0x80, 0x00, 0x4e, 0x23, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, +0x3e, 0x1f, 0xc9, 0xb0, 0x44, 0x20, 0x02, 0xcc, 0x49, 0xff, 0xdd, 0xa8, 0x48, 0x00, 0x00, 0x00, +0x44, 0x40, 0x00, 0x00, 0x10, 0x41, 0x80, 0x00, 0x51, 0xe1, 0x7f, 0xff, 0x44, 0x30, 0x00, 0x01, +0x40, 0x41, 0xf8, 0x0c, 0x50, 0x52, 0x7f, 0xff, 0x40, 0x22, 0x90, 0x04, 0x04, 0x30, 0x80, 0x01, +0x41, 0xe1, 0x00, 0x0c, 0x40, 0x5f, 0x0c, 0x04, 0x14, 0x50, 0x80, 0x01, 0x51, 0xff, 0x80, 0x04, +0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xfc, +0x58, 0x60, 0x00, 0x00, 0x54, 0x10, 0x80, 0xff, 0x4e, 0x03, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, +0x3e, 0x1f, 0xc9, 0xb0, 0x44, 0x20, 0x02, 0x11, 0x49, 0xff, 0xdd, 0x78, 0x48, 0x00, 0x00, 0x00, +0x3e, 0x0f, 0xf2, 0x5c, 0x40, 0xf3, 0x00, 0x06, 0x4e, 0xf3, 0x00, 0x0c, 0x50, 0x00, 0x01, 0x38, +0x40, 0xf0, 0x18, 0x06, 0x4e, 0xf3, 0x00, 0x06, 0x3e, 0x7f, 0xf2, 0x4c, 0x48, 0x00, 0x00, 0x14, +0x3e, 0x0f, 0xef, 0xb8, 0x40, 0xf3, 0x00, 0x06, 0x4e, 0xf3, 0x00, 0x0c, 0x50, 0x20, 0x00, 0xcc, +0x40, 0xf1, 0x18, 0x06, 0x4e, 0xf3, 0x00, 0x06, 0x50, 0x70, 0x7f, 0xf4, 0x48, 0x00, 0x00, 0x04, +0x3e, 0x7f, 0xe9, 0xd4, 0x4e, 0x12, 0x00, 0x18, 0x04, 0x13, 0x00, 0x02, 0x4e, 0x12, 0x00, 0x14, +0x02, 0x03, 0x00, 0x06, 0x44, 0x50, 0x0f, 0xff, 0x4c, 0x02, 0xc0, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, +0x3e, 0x1f, 0xc9, 0xb0, 0x44, 0x20, 0x02, 0x25, 0x49, 0xff, 0xdd, 0x40, 0x48, 0x00, 0x00, 0x00, +0x49, 0xf7, 0xf1, 0x88, 0x44, 0x00, 0x00, 0x00, 0x14, 0x03, 0x00, 0x02, 0x05, 0xe3, 0x80, 0x01, +0x14, 0x63, 0x80, 0x01, 0x14, 0x73, 0x00, 0x00, 0x15, 0xe3, 0x00, 0x01, 0x14, 0x6f, 0x00, 0x00, +0x04, 0x53, 0x80, 0x02, 0x50, 0x42, 0x80, 0x01, 0x14, 0x43, 0x80, 0x02, 0x51, 0xff, 0x80, 0x04, +0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, +0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0xc0, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0xb0, +0x44, 0x20, 0x02, 0x66, 0x49, 0xff, 0xdd, 0x12, 0x48, 0x00, 0x00, 0x00, 0x4e, 0x13, 0x00, 0x0c, +0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0xb0, 0x44, 0x20, 0x02, 0x67, 0x49, 0xff, 0xdd, 0x06, +0x48, 0x00, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x14, 0x50, 0x10, 0x80, 0x1f, 0x40, 0x10, 0x94, 0x09, +0x5c, 0xf0, 0x80, 0x21, 0x4e, 0xf3, 0x00, 0x18, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0xb0, +0x44, 0x20, 0x02, 0x70, 0x49, 0xff, 0xdc, 0xf2, 0x48, 0x00, 0x00, 0x00, 0x40, 0x00, 0x80, 0x13, +0x49, 0xf7, 0xf1, 0x4c, 0x44, 0x50, 0x0f, 0xff, 0x4c, 0x02, 0x80, 0x3a, 0x49, 0xf7, 0xf1, 0x18, +0x48, 0x00, 0x00, 0x38, 0x50, 0x20, 0xff, 0xff, 0x5c, 0xf1, 0x00, 0x20, 0x4e, 0xf2, 0x00, 0x30, +0x44, 0x50, 0x00, 0x01, 0x40, 0x42, 0x88, 0x0c, 0x51, 0xe2, 0x7f, 0xff, 0x40, 0x2f, 0x10, 0x04, +0x3c, 0x3d, 0xfa, 0xe2, 0x52, 0x40, 0x80, 0x20, 0x48, 0x00, 0x00, 0x1c, 0x4c, 0x51, 0x40, 0x16, +0x40, 0x51, 0x08, 0x05, 0x41, 0xe2, 0x8c, 0x02, 0x3e, 0x3f, 0xeb, 0x84, 0x40, 0x40, 0x0c, 0x00, +0x15, 0xe1, 0x80, 0x01, 0x10, 0x12, 0x00, 0x08, 0x40, 0x00, 0x14, 0x08, 0x04, 0x21, 0x80, 0x00, +0x40, 0x01, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0e, 0x40, 0x21, 0x08, 0x00, 0x50, 0x00, 0x00, 0x01, +0x40, 0x51, 0x0c, 0x02, 0x40, 0xf2, 0x00, 0x06, 0x4e, 0xf2, 0xff, 0xe2, 0x44, 0x00, 0x00, 0x00, +0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, +0x51, 0xff, 0xff, 0xc0, 0x54, 0x70, 0x00, 0xff, 0x40, 0x03, 0x80, 0x10, 0x54, 0x80, 0x80, 0xff, +0x4e, 0x05, 0x00, 0x2e, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x23, 0x50, 0x0f, 0x80, 0x04, +0x49, 0xf7, 0xeb, 0x3c, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x0c, 0x50, 0x0f, 0x80, 0x28, +0x49, 0xf7, 0xeb, 0x34, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x0a, 0x50, 0x0f, 0x80, 0x34, +0x49, 0xf7, 0xeb, 0x2c, 0x46, 0x16, 0x03, 0x20, 0x58, 0x10, 0x80, 0x0c, 0x40, 0x23, 0x94, 0x08, +0x40, 0x01, 0x04, 0x00, 0x04, 0x10, 0x00, 0x00, 0x4e, 0x82, 0x00, 0x06, 0x42, 0x10, 0xfc, 0x08, +0x48, 0x00, 0x00, 0x04, 0x42, 0x10, 0xfc, 0x09, 0x14, 0x10, 0x00, 0x00, 0x51, 0xff, 0x80, 0x40, +0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xf4, +0x54, 0x60, 0x00, 0xff, 0x40, 0x03, 0x00, 0x10, 0x54, 0x70, 0x80, 0xff, 0x4e, 0x05, 0x00, 0x24, +0x58, 0x03, 0x00, 0x00, 0x50, 0x1f, 0x80, 0x05, 0x50, 0x2f, 0x80, 0x06, 0x50, 0x3f, 0x80, 0x07, +0x49, 0x00, 0x49, 0xf4, 0x00, 0x0f, 0x80, 0x05, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0xc0, 0x0a, +0x00, 0x2f, 0x80, 0x06, 0x4c, 0x20, 0x40, 0x06, 0x00, 0x3f, 0x80, 0x07, 0x4c, 0x33, 0x80, 0x0c, +0x44, 0x10, 0x00, 0x01, 0x58, 0x03, 0x00, 0x00, 0x58, 0x33, 0x80, 0x00, 0x58, 0x20, 0x80, 0x00, +0x49, 0x00, 0x4a, 0xfc, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x40, 0x00, 0x00, 0x13, 0x49, 0xf7, 0xf0, 0x60, +0x00, 0x40, 0x00, 0x03, 0x44, 0x2f, 0xff, 0xa0, 0x54, 0x32, 0x00, 0x1f, 0x40, 0x11, 0x88, 0x04, +0x10, 0x10, 0x00, 0x03, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xf4, 0x54, 0x21, 0x00, 0xff, 0x59, 0xc0, 0x00, 0x00, +0x54, 0x70, 0x80, 0xff, 0x14, 0x2f, 0x80, 0x01, 0x4e, 0x02, 0x00, 0x5a, 0x50, 0x33, 0x80, 0x04, +0x40, 0xa1, 0x8c, 0x00, 0x44, 0x60, 0x00, 0x00, 0x44, 0x90, 0x00, 0x01, 0x40, 0x0e, 0x18, 0x0d, +0x54, 0x10, 0x00, 0x01, 0x50, 0x03, 0x7f, 0xf9, 0x4e, 0x12, 0x00, 0x44, 0x5c, 0xf0, 0x00, 0x02, +0x4e, 0xf2, 0x00, 0x12, 0x5c, 0xf3, 0x80, 0x03, 0x4e, 0xf2, 0x00, 0x3c, 0x54, 0x03, 0x00, 0xff, +0x58, 0x13, 0x80, 0x00, 0x44, 0x20, 0x00, 0x01, 0x44, 0x30, 0x4e, 0x20, 0x3e, 0x4e, 0xb3, 0x10, +0x48, 0x00, 0x00, 0x16, 0x04, 0x5f, 0x80, 0x01, 0x54, 0x43, 0x00, 0xff, 0x58, 0x13, 0x80, 0x00, +0x44, 0x20, 0x00, 0x01, 0x44, 0x30, 0x4e, 0x20, 0x58, 0x02, 0x00, 0x00, 0x4e, 0x52, 0x00, 0x06, +0x49, 0xff, 0xe8, 0x68, 0x48, 0x00, 0x00, 0x06, 0x3e, 0x4e, 0xb3, 0xb0, 0x4b, 0xe0, 0x10, 0x01, +0x3c, 0x2d, 0xf7, 0xea, 0x40, 0x14, 0x98, 0x0c, 0x41, 0xe1, 0x28, 0x00, 0x02, 0x4f, 0x00, 0x02, +0x40, 0x30, 0x90, 0x04, 0x12, 0x3f, 0x00, 0x02, 0x4e, 0x02, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, +0x3e, 0x1f, 0xc9, 0xd0, 0x44, 0x20, 0x12, 0x48, 0x49, 0xff, 0xdb, 0xc0, 0x48, 0x00, 0x00, 0x00, +0x50, 0x63, 0x00, 0x01, 0x44, 0x00, 0x00, 0x0e, 0x4c, 0x60, 0x7f, 0xb2, 0x51, 0xff, 0x80, 0x0c, +0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xfc, +0x59, 0xc0, 0x00, 0x00, 0x54, 0x70, 0x80, 0xff, 0x4e, 0x02, 0x00, 0x46, 0x50, 0xa3, 0x80, 0x04, +0x40, 0xa5, 0x28, 0x00, 0x44, 0x60, 0x00, 0x00, 0x44, 0x90, 0x00, 0x01, 0x40, 0x1e, 0x18, 0x0d, +0x54, 0x00, 0x80, 0x01, 0x50, 0x23, 0x7f, 0xf9, 0x4e, 0x02, 0x00, 0x30, 0x54, 0x03, 0x00, 0xff, +0x58, 0x13, 0x80, 0x00, 0x5c, 0xf1, 0x00, 0x02, 0x4e, 0xf2, 0x00, 0x0a, 0x5c, 0xf3, 0x80, 0x03, +0x4e, 0xf2, 0x00, 0x24, 0x3e, 0x2e, 0xaf, 0xf8, 0x48, 0x00, 0x00, 0x04, 0x3e, 0x2e, 0xb0, 0x4c, +0x4b, 0xe0, 0x08, 0x01, 0x3c, 0x1d, 0xf7, 0xea, 0x40, 0x24, 0x98, 0x0c, 0x40, 0x40, 0xa8, 0x00, +0x02, 0x32, 0x00, 0x02, 0x40, 0x51, 0x08, 0x05, 0x40, 0x22, 0x8c, 0x02, 0x12, 0x22, 0x00, 0x02, +0x4e, 0x02, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0xd0, 0x44, 0x20, 0x12, 0x08, +0x49, 0xff, 0xdb, 0x6c, 0x48, 0x00, 0x00, 0x00, 0x50, 0x63, 0x00, 0x01, 0x44, 0x50, 0x00, 0x0e, +0x4c, 0x62, 0xff, 0xc6, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x54, 0x00, 0x00, 0xff, 0x49, 0xff, 0xfc, 0xb6, +0x4e, 0x03, 0x00, 0x06, 0x44, 0x00, 0x00, 0xff, 0x48, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, -0x51, 0xff, 0xff, 0xfc, 0x44, 0x10, 0x00, 0x00, 0x44, 0x50, 0x00, 0x00, 0x3e, 0x57, 0xe5, 0x84, -0x3c, 0x1f, 0xf9, 0x19, 0x3c, 0x1f, 0xf9, 0x18, 0x44, 0x00, 0x00, 0x02, 0x49, 0xff, 0xfe, 0xc4, +0x51, 0xff, 0xff, 0xfc, 0x40, 0x20, 0x00, 0x13, 0x44, 0x00, 0x00, 0x00, 0x58, 0x10, 0x00, 0x00, +0x58, 0x30, 0x00, 0x00, 0x49, 0xf7, 0xf3, 0x9e, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x45, 0xc0, 0x2c, 0xdc, +0x54, 0x70, 0x00, 0xff, 0x58, 0x13, 0x80, 0x00, 0x44, 0x20, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, +0x49, 0x00, 0x4a, 0x4c, 0x44, 0x50, 0x0f, 0xff, 0x58, 0x13, 0x80, 0x00, 0x44, 0x20, 0x00, 0x00, +0x4c, 0x02, 0x80, 0x1e, 0x44, 0x00, 0x00, 0x01, 0x49, 0xf7, 0xf2, 0xec, 0x58, 0x60, 0x00, 0x00, +0x4b, 0xe0, 0x70, 0x01, 0x00, 0x10, 0x00, 0x05, 0x44, 0x50, 0x00, 0xa0, 0x58, 0x03, 0x00, 0x00, +0x4c, 0x12, 0x80, 0x0a, 0x49, 0xff, 0xfe, 0xd6, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xff, 0xc0, +0x48, 0xff, 0xff, 0xda, 0x49, 0xff, 0xfd, 0x04, 0x48, 0xff, 0xff, 0xd6, 0x51, 0xff, 0x80, 0x04, +0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, 0x58, 0x70, 0x00, 0x00, +0x49, 0xff, 0xee, 0x0c, 0x04, 0x63, 0x80, 0x02, 0x00, 0x83, 0x00, 0x20, 0x40, 0x04, 0x00, 0x10, +0x4e, 0x04, 0x00, 0x06, 0x44, 0x10, 0xff, 0xff, 0x48, 0x00, 0x00, 0x14, 0x44, 0x20, 0x00, 0x00, +0x3e, 0x1f, 0xf4, 0x10, 0x38, 0x20, 0xa0, 0x08, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0xff, 0xac, +0x44, 0x10, 0x00, 0x00, 0x58, 0x04, 0x00, 0x00, 0x49, 0xff, 0xfe, 0x70, 0x44, 0x10, 0x00, 0x00, +0x00, 0x33, 0x00, 0x0b, 0x54, 0x01, 0x80, 0x01, 0x4e, 0x02, 0x00, 0x2e, 0x00, 0x23, 0x00, 0x07, +0x50, 0x43, 0x00, 0x0c, 0x14, 0x12, 0x00, 0x01, 0x44, 0x30, 0x00, 0x18, 0x44, 0x1f, 0xff, 0xed, +0x44, 0x50, 0x00, 0x00, 0x44, 0x00, 0x00, 0x0a, 0x14, 0x52, 0x00, 0x02, 0x14, 0x82, 0x00, 0x00, +0x12, 0x33, 0x00, 0x00, 0x10, 0x13, 0x00, 0x04, 0x10, 0x03, 0x00, 0x08, 0x10, 0x23, 0x00, 0x05, +0x45, 0xe0, 0x00, 0x01, 0x04, 0x53, 0x80, 0x02, 0x44, 0x4f, 0xe0, 0x00, 0x11, 0xe3, 0x80, 0x10, +0x12, 0x42, 0x80, 0x01, 0x58, 0x03, 0x80, 0x00, 0x49, 0x00, 0x03, 0x2a, 0x49, 0xff, 0xed, 0xbe, +0x44, 0x00, 0x00, 0x01, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, +0x51, 0xff, 0xff, 0xfc, 0x55, 0xc0, 0x00, 0xff, 0x54, 0xa0, 0x80, 0xff, 0x48, 0x00, 0x00, 0x08, +0x49, 0xff, 0xfe, 0x60, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xff, 0x4a, 0x58, 0x15, 0x00, 0x00, +0x44, 0x20, 0x00, 0x00, 0x58, 0x0e, 0x00, 0x00, 0x49, 0xf7, 0xf2, 0x5c, 0x44, 0x50, 0x0f, 0xff, +0x58, 0x60, 0x00, 0x00, 0x4c, 0x02, 0xff, 0xee, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xdc, 0x58, 0x50, 0x80, 0x00, +0x14, 0x0f, 0x80, 0x04, 0x4e, 0x12, 0x00, 0x0a, 0x44, 0x00, 0x00, 0x01, 0x4c, 0x10, 0x00, 0x06, +0x44, 0xa0, 0x00, 0x00, 0x48, 0x00, 0x00, 0x4e, 0x47, 0xcc, 0x00, 0x00, 0x54, 0x21, 0x00, 0xff, +0x59, 0xce, 0x00, 0x01, 0x44, 0x90, 0x00, 0x00, 0x14, 0x2f, 0x80, 0x05, 0x15, 0xcf, 0x80, 0x01, +0x58, 0xa4, 0x80, 0x00, 0x50, 0x8f, 0x80, 0x1f, 0x50, 0x7f, 0x80, 0x1c, 0x50, 0x6f, 0x80, 0x1a, +0x04, 0x4f, 0x80, 0x04, 0x40, 0x32, 0x24, 0x0d, 0x54, 0x11, 0x80, 0x01, 0x4e, 0x12, 0x00, 0x2c, +0x58, 0x14, 0x80, 0x00, 0x44, 0x20, 0x00, 0x00, 0x44, 0x00, 0x00, 0x02, 0x14, 0x5f, 0x80, 0x03, +0x45, 0xc0, 0x0f, 0xff, 0x49, 0x00, 0x49, 0x6a, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x03, +0x58, 0x34, 0x80, 0x00, 0x04, 0x4f, 0x80, 0x05, 0x04, 0x5f, 0x80, 0x03, 0x4c, 0x0e, 0x00, 0x14, +0x58, 0x02, 0x80, 0x00, 0x49, 0xff, 0xe3, 0x44, 0x05, 0xef, 0x80, 0x01, 0x58, 0x13, 0x80, 0x00, +0x40, 0xaf, 0x00, 0x1b, 0x58, 0x23, 0x00, 0x00, 0x58, 0x04, 0x00, 0x00, 0x49, 0xff, 0xe3, 0x82, +0x04, 0x5f, 0x80, 0x03, 0x50, 0x94, 0x80, 0x01, 0x45, 0xc0, 0x00, 0x0e, 0x4c, 0x9e, 0x7f, 0xca, +0x58, 0x05, 0x00, 0x00, 0x51, 0xff, 0x80, 0x24, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x54, 0x81, 0x80, 0xff, 0x50, 0x44, 0x00, 0x04, +0x3c, 0x3d, 0xf7, 0xea, 0x40, 0x02, 0x10, 0x00, 0x44, 0x40, 0x00, 0x00, 0x58, 0x70, 0x80, 0x00, +0x40, 0x01, 0x80, 0x00, 0x54, 0x61, 0x00, 0xff, 0x58, 0x92, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, +0x40, 0xa3, 0x90, 0x0d, 0x54, 0x25, 0x00, 0x01, 0x4e, 0x22, 0x00, 0x0e, 0x02, 0x30, 0x00, 0x02, +0x40, 0x20, 0x90, 0x0c, 0x41, 0xe1, 0x90, 0x0e, 0x55, 0xcf, 0x00, 0x01, 0x4f, 0xc3, 0x00, 0x04, +0x40, 0x94, 0x88, 0x04, 0x50, 0x42, 0x00, 0x01, 0x44, 0x50, 0x00, 0x0e, 0x4c, 0x42, 0xff, 0xea, +0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xfd, 0x3a, 0x3f, 0xce, 0xcb, 0xb0, +0x44, 0x10, 0x00, 0x01, 0x58, 0x03, 0x00, 0x00, 0x4b, 0xe0, 0x70, 0x01, 0x44, 0x20, 0x00, 0x00, +0x58, 0x03, 0x80, 0x00, 0x58, 0x14, 0x00, 0x00, 0x49, 0xff, 0xfd, 0xb4, 0x58, 0x04, 0x80, 0x00, +0x58, 0x14, 0x00, 0x00, 0x49, 0xff, 0xfe, 0x1a, 0x44, 0x10, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, +0x4b, 0xe0, 0x70, 0x01, 0x44, 0x10, 0x00, 0x00, 0x58, 0x03, 0x80, 0x00, 0x58, 0x23, 0x00, 0x00, +0x49, 0xff, 0xff, 0x42, 0x58, 0x10, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, +0x3e, 0x1f, 0xc9, 0xd0, 0x44, 0x20, 0x0d, 0x2c, 0x49, 0xff, 0xd9, 0xb0, 0x48, 0x00, 0x00, 0x00, +0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xfd, 0x04, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, 0x58, 0x80, 0x80, 0x00, 0x58, 0x60, 0x00, 0x00, +0x4e, 0x12, 0x00, 0x2c, 0x44, 0x50, 0x00, 0x05, 0x4c, 0x62, 0x80, 0x22, 0x44, 0x10, 0x00, 0x06, +0x4c, 0x60, 0xc0, 0x14, 0x54, 0x71, 0x00, 0xff, 0x58, 0x03, 0x80, 0x00, 0x49, 0xff, 0xfe, 0x32, +0x58, 0x30, 0x00, 0x00, 0x58, 0x14, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, 0x58, 0x23, 0x80, 0x00, +0x49, 0xff, 0xff, 0x70, 0x48, 0x00, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0xd0, +0x44, 0x20, 0x0d, 0x6f, 0x49, 0xff, 0xd9, 0x7a, 0x48, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x03, +0x44, 0x10, 0x00, 0x00, 0x49, 0xff, 0xfe, 0xd4, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0x98, 0xbc, 0x00, 0x60, 0x00, 0x02, 0x54, 0x10, 0x80, 0xff, 0x40, 0x03, 0x00, 0x10, +0x4e, 0x04, 0x00, 0x06, 0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x14, 0x4e, 0x13, 0x00, 0x04, +0x48, 0x00, 0x00, 0x0e, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xfc, 0xf0, 0x58, 0x23, 0x00, 0x00, +0x44, 0x00, 0x00, 0x06, 0x44, 0x10, 0x00, 0x0f, 0x49, 0xff, 0xff, 0xae, 0x44, 0x00, 0x00, 0x01, +0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, 0x04, 0x60, 0x00, 0x02, +0x58, 0x70, 0x00, 0x00, 0x00, 0x83, 0x00, 0x20, 0x40, 0x04, 0x00, 0x10, 0x4e, 0x04, 0x00, 0x06, +0x44, 0x10, 0xff, 0xff, 0x48, 0x00, 0x00, 0x0e, 0x58, 0x04, 0x00, 0x00, 0x49, 0xff, 0xfa, 0x96, +0x10, 0x80, 0x00, 0x02, 0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xff, 0xc4, 0x44, 0x10, 0x00, 0x00, +0x00, 0x23, 0x00, 0x0b, 0x54, 0x01, 0x00, 0x01, 0x4e, 0x02, 0x00, 0x2c, 0x00, 0x53, 0x00, 0x07, +0x50, 0x43, 0x00, 0x0c, 0x44, 0x30, 0x00, 0x00, 0x44, 0x20, 0x00, 0x18, 0x44, 0x0f, 0xff, 0xed, +0x45, 0xe0, 0x00, 0x14, 0x14, 0x32, 0x00, 0x02, 0x14, 0x82, 0x00, 0x00, 0x14, 0x12, 0x00, 0x01, +0x10, 0x03, 0x00, 0x04, 0x12, 0x23, 0x00, 0x00, 0x11, 0xe3, 0x00, 0x08, 0x10, 0x53, 0x00, 0x05, +0x44, 0x40, 0x00, 0x01, 0x04, 0x13, 0x80, 0x02, 0x44, 0x3f, 0xe0, 0x00, 0x10, 0x43, 0x80, 0x10, +0x12, 0x30, 0x80, 0x01, 0x58, 0x03, 0x80, 0x00, 0x49, 0x00, 0x01, 0x82, 0x44, 0x00, 0x00, 0x01, +0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, +0x3e, 0x3f, 0xdf, 0xa8, 0x04, 0x11, 0x80, 0x00, 0x44, 0x00, 0x00, 0x00, 0x14, 0x00, 0x80, 0x00, +0x58, 0x20, 0x00, 0x00, 0x58, 0x10, 0x00, 0x00, 0x04, 0x51, 0x80, 0x00, 0x41, 0xe0, 0x84, 0x00, +0x40, 0x42, 0xf8, 0x00, 0x12, 0x22, 0x00, 0x02, 0x51, 0xe0, 0x80, 0x04, 0x04, 0x51, 0x80, 0x00, +0x40, 0x4f, 0x78, 0x00, 0x41, 0xe2, 0x90, 0x00, 0x50, 0x00, 0x00, 0x01, 0x44, 0x40, 0x00, 0x04, +0x12, 0x2f, 0x00, 0x02, 0x50, 0x10, 0x80, 0x01, 0x4c, 0x02, 0x7f, 0xe8, 0x3e, 0x0f, 0xf4, 0x10, +0x18, 0x20, 0x00, 0x01, 0x3e, 0x5f, 0xf4, 0x90, 0x4c, 0x02, 0xff, 0xfc, 0x44, 0x10, 0x00, 0x01, +0x44, 0x00, 0x00, 0x00, 0x49, 0x00, 0x46, 0xa4, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa4, 0x3c, 0x54, 0x10, 0x80, 0xff, 0x54, 0x21, 0x00, 0xff, +0x4e, 0x13, 0x00, 0x06, 0x44, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x40, 0x46, 0x46, 0x01, 0x20, +0x58, 0x42, 0x01, 0x14, 0x50, 0x62, 0x7f, 0xfc, 0x50, 0x53, 0x7f, 0xf4, 0x50, 0x72, 0xff, 0xfc, +0x44, 0x30, 0x00, 0x00, 0x40, 0x83, 0x88, 0x1b, 0x40, 0x83, 0x08, 0x1a, 0x40, 0x62, 0x88, 0x1b, +0x40, 0x62, 0x08, 0x1a, 0x58, 0x21, 0x80, 0x00, 0x44, 0x40, 0x00, 0x01, 0x48, 0x00, 0x00, 0x1c, +0x38, 0x50, 0x0c, 0x00, 0x50, 0x31, 0x80, 0x01, 0x50, 0x92, 0x80, 0x05, 0x50, 0x72, 0x80, 0x0a, +0x40, 0x72, 0x1c, 0x0c, 0x40, 0x92, 0x24, 0x0c, 0x40, 0x94, 0x9c, 0x04, 0x50, 0x72, 0x80, 0x10, +0x40, 0x52, 0x14, 0x0c, 0x40, 0x54, 0x94, 0x04, 0x40, 0x72, 0x1c, 0x0c, 0x40, 0x52, 0x9c, 0x04, +0x40, 0x21, 0x14, 0x04, 0x40, 0xf1, 0x84, 0x06, 0x4e, 0xf3, 0xff, 0xe4, 0x14, 0x24, 0x00, 0x00, +0x14, 0x23, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x3a, 0x6f, 0xa4, 0x04, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0x98, 0xbc, 0x00, 0x10, 0x00, 0x2d, 0x50, 0x60, 0x00, 0x27, 0x54, 0x00, 0x80, 0x01, +0x4e, 0x02, 0x00, 0x0a, 0x44, 0x10, 0x00, 0x01, 0x50, 0x03, 0x00, 0x08, 0x58, 0x20, 0x80, 0x00, +0x49, 0xff, 0xff, 0xa2, 0x44, 0x20, 0x00, 0x00, 0x10, 0x23, 0x00, 0x07, 0x10, 0x23, 0x00, 0x05, +0x10, 0x23, 0x00, 0x06, 0x50, 0x03, 0x7f, 0xed, 0x49, 0x00, 0x25, 0x02, 0x3a, 0x6f, 0x98, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, 0x50, 0x70, 0x00, 0x14, 0x50, 0x60, 0x00, 0x27, +0x58, 0x03, 0x80, 0x00, 0x49, 0x00, 0x24, 0xf4, 0x00, 0x23, 0x00, 0x06, 0x40, 0x01, 0x00, 0x10, +0x4e, 0x05, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0xec, 0x44, 0x20, 0x0b, 0xca, +0x49, 0xff, 0xd8, 0x34, 0x48, 0x00, 0x00, 0x00, 0x54, 0x21, 0x00, 0x01, 0x50, 0x03, 0x00, 0x08, +0x4e, 0x23, 0x00, 0x16, 0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xff, 0x6e, 0x00, 0x53, 0x00, 0x06, +0x50, 0x33, 0x7f, 0xdf, 0x58, 0x42, 0x80, 0x01, 0x10, 0x43, 0x00, 0x06, 0x44, 0x10, 0x03, 0xe8, +0x3a, 0x21, 0x88, 0x00, 0x40, 0x11, 0x04, 0x17, 0x48, 0x00, 0x00, 0x32, 0x44, 0x10, 0x00, 0x01, +0x58, 0x20, 0x80, 0x00, 0x49, 0xff, 0xff, 0x58, 0x00, 0x03, 0x00, 0x07, 0x44, 0x50, 0x00, 0xff, +0x4c, 0x02, 0x80, 0x12, 0x51, 0xe0, 0x7f, 0xff, 0x54, 0x0f, 0x00, 0xff, 0x10, 0x03, 0x00, 0x07, +0x4e, 0x03, 0x00, 0x0a, 0x10, 0x03, 0x00, 0x06, 0x58, 0x03, 0x80, 0x00, 0x49, 0x00, 0x24, 0xb0, +0x48, 0x00, 0x00, 0x1a, 0x00, 0x13, 0x00, 0x06, 0x42, 0x50, 0x80, 0x09, 0x10, 0x53, 0x00, 0x06, +0x50, 0x43, 0x7f, 0xdf, 0x50, 0x63, 0x7f, 0xe3, 0x3a, 0x22, 0x08, 0x00, 0x3a, 0x63, 0x18, 0x00, +0x40, 0x33, 0x08, 0x01, 0x44, 0x00, 0x03, 0xe8, 0x40, 0x11, 0x80, 0x57, 0x58, 0x03, 0x80, 0x00, +0x49, 0x00, 0x25, 0x86, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, +0x44, 0x1f, 0xff, 0xff, 0x58, 0x60, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x10, 0x13, 0x00, 0x2f, +0x10, 0x03, 0x00, 0x2e, 0x10, 0x03, 0x00, 0x2d, 0x58, 0x23, 0x00, 0x00, 0x50, 0x03, 0x00, 0x14, +0x3e, 0x1e, 0xe4, 0xc0, 0x49, 0x00, 0x24, 0x5c, 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, +0x44, 0x20, 0x00, 0x12, 0x49, 0xf7, 0xe6, 0x6a, 0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0x98, 0xbc, 0x58, 0x60, 0x00, 0x00, 0x49, 0x00, 0x2a, 0xc8, 0x58, 0x03, 0x00, 0x00, +0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xfa, 0x2a, 0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x4e, 0x03, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, +0x3e, 0x1f, 0xc9, 0xec, 0x44, 0x20, 0x06, 0xfe, 0x49, 0xff, 0xd7, 0xa0, 0x48, 0x00, 0x00, 0x00, +0x04, 0x00, 0x00, 0x0b, 0x44, 0x50, 0x00, 0x03, 0x00, 0x10, 0x00, 0x18, 0x4c, 0x12, 0xc0, 0x10, +0x00, 0x00, 0x00, 0x19, 0x44, 0x50, 0x00, 0x02, 0x4c, 0x02, 0xc0, 0x0a, 0x44, 0x50, 0x00, 0x01, +0x3e, 0x57, 0xe3, 0x24, 0x44, 0x00, 0x00, 0x00, 0x49, 0x00, 0x3a, 0xea, 0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, -0x51, 0xff, 0xff, 0xf8, 0x44, 0x60, 0x00, 0x00, 0x50, 0x0f, 0x80, 0x04, 0x14, 0x6f, 0x80, 0x01, -0x49, 0xf7, 0xd3, 0x8e, 0x46, 0x00, 0x20, 0x00, 0x14, 0x60, 0x00, 0x00, 0x44, 0x20, 0x2d, 0x0c, -0x04, 0x0f, 0x80, 0x01, 0x3c, 0x2f, 0xff, 0xb9, 0x49, 0xf7, 0xd3, 0x8e, 0x51, 0xff, 0x80, 0x08, -0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, 0x58, 0x60, 0x00, 0x00, -0x49, 0xff, 0xff, 0xb0, 0x44, 0x00, 0x00, 0x0c, 0x04, 0x83, 0x00, 0x02, 0x49, 0xf7, 0xe4, 0x46, -0x44, 0x50, 0x0f, 0xff, 0x58, 0x70, 0x00, 0x00, 0x4c, 0x02, 0xc0, 0x0a, 0x3e, 0x0f, 0xcc, 0xe4, -0x49, 0xff, 0xcf, 0xdc, 0x44, 0x00, 0x01, 0x03, 0x48, 0x00, 0x00, 0x2e, 0x49, 0xf7, 0xe4, 0x08, -0x44, 0x50, 0x00, 0x0c, 0x44, 0x4f, 0xe0, 0x00, 0x44, 0x3f, 0xff, 0xef, 0x12, 0x50, 0x00, 0x00, -0x12, 0x40, 0x00, 0x01, 0x10, 0x30, 0x00, 0x04, 0x50, 0x20, 0x00, 0x08, 0x00, 0x84, 0x00, 0x07, -0x44, 0x60, 0x00, 0x00, 0x10, 0x80, 0x00, 0x05, 0x10, 0x61, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, -0x58, 0x23, 0x80, 0x00, 0x58, 0x10, 0x00, 0x00, 0x44, 0x30, 0x00, 0x01, 0x49, 0xf7, 0xe8, 0x1a, -0x44, 0x00, 0x00, 0x00, 0x49, 0x00, 0x1f, 0x3c, 0x3e, 0x67, 0xe5, 0x90, 0x49, 0xff, 0xff, 0xa0, -0x44, 0x00, 0x00, 0x00, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, -0x04, 0x10, 0x00, 0x02, 0x58, 0x60, 0x00, 0x00, 0x00, 0x20, 0x80, 0x04, 0x3e, 0x0f, 0xcd, 0x08, -0x44, 0x80, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x50, 0x34, 0x00, 0x01, 0x4c, 0x51, 0x40, 0x1e, -0x04, 0x10, 0x00, 0x01, 0x4e, 0x12, 0x00, 0x1a, 0x58, 0x03, 0x00, 0x00, 0x4b, 0xe0, 0x04, 0x01, -0x58, 0x70, 0x00, 0x00, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x72, 0x80, 0x1c, 0x46, 0x2c, 0x00, 0x00, -0x58, 0x51, 0x00, 0x9a, 0x4c, 0x72, 0x80, 0x16, 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, -0x49, 0xff, 0xf1, 0xee, 0x48, 0x00, 0x00, 0x0e, 0x54, 0x81, 0x80, 0xff, 0x44, 0x50, 0x00, 0x04, -0x50, 0x00, 0x00, 0x08, 0x4c, 0x82, 0xff, 0xd8, 0x44, 0x70, 0x00, 0x00, 0x48, 0x00, 0x00, 0x06, -0x5c, 0xf4, 0x00, 0x04, 0x4e, 0xf3, 0x00, 0x08, 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, -0x49, 0xff, 0xf1, 0xd6, 0x58, 0x03, 0x80, 0x00, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x10, 0x30, 0x00, 0x08, 0x12, 0x10, 0x00, 0x00, 0x44, 0x3f, 0xe0, 0x00, 0x44, 0x1f, 0xff, 0xed, -0x12, 0x30, 0x00, 0x01, 0x10, 0x10, 0x00, 0x04, 0x10, 0x20, 0x00, 0x05, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0x98, 0xbc, 0x51, 0xff, 0xff, 0xf8, 0x10, 0x0f, 0x80, 0x04, 0x44, 0x00, 0x00, 0x0d, -0x49, 0xf7, 0xe3, 0xa4, 0x44, 0x50, 0x0f, 0xff, 0x58, 0x60, 0x00, 0x00, 0x4c, 0x02, 0xc0, 0x06, -0x44, 0x00, 0x01, 0x03, 0x48, 0x00, 0x00, 0x2c, 0x49, 0xf7, 0xe3, 0x6a, 0x44, 0x5f, 0xe0, 0x00, -0x44, 0x4f, 0xff, 0xed, 0x44, 0x30, 0x00, 0x00, 0x44, 0x10, 0x00, 0x10, 0x44, 0x20, 0x00, 0x31, -0x12, 0x10, 0x00, 0x00, 0x12, 0x50, 0x00, 0x01, 0x10, 0x40, 0x00, 0x04, 0x10, 0x30, 0x00, 0x05, -0x10, 0x20, 0x00, 0x08, 0x50, 0x1f, 0x80, 0x04, 0x44, 0x20, 0x00, 0x01, 0x50, 0x00, 0x00, 0x0c, -0x49, 0xf7, 0xdd, 0xb0, 0x44, 0x00, 0x00, 0x00, 0x58, 0x23, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, -0x58, 0x30, 0x00, 0x00, 0x49, 0xf7, 0xe7, 0x76, 0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x08, -0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0xfc, -0x54, 0x90, 0x00, 0xff, 0x44, 0x00, 0x00, 0x10, 0x40, 0x80, 0x80, 0x10, 0x49, 0xf7, 0xe3, 0x5e, +0x58, 0x60, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0xec, +0x44, 0x20, 0x06, 0xd7, 0x49, 0xff, 0xd7, 0x72, 0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, +0x4e, 0x03, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0xec, 0x44, 0x20, 0x06, 0xd8, +0x49, 0xff, 0xd7, 0x64, 0x48, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x10, 0x5c, 0xf0, 0x80, 0x02, +0x4e, 0xf3, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0xec, 0x44, 0x20, 0x06, 0xda, +0x49, 0xff, 0xd7, 0x54, 0x48, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x02, 0x23, 0x00, 0x06, +0x58, 0x30, 0x00, 0x00, 0x49, 0xf7, 0xef, 0xae, 0x4e, 0x03, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, +0x3e, 0x1f, 0xc9, 0xec, 0x44, 0x20, 0x06, 0xe4, 0x49, 0xff, 0xd7, 0x40, 0x48, 0x00, 0x00, 0x00, +0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, 0x49, 0xff, 0xf9, 0xb0, 0x3a, 0x6f, 0x98, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, 0x58, 0x60, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x0c, +0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0xec, 0x44, 0x20, 0x05, 0xfc, 0x49, 0xff, 0xd7, 0x26, +0x48, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x10, 0x02, 0x23, 0x00, 0x06, +0x58, 0x30, 0x00, 0x00, 0x49, 0xf7, 0xef, 0x7e, 0x4e, 0x03, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, +0x3e, 0x1f, 0xc9, 0xec, 0x44, 0x20, 0x06, 0x07, 0x49, 0xff, 0xd7, 0x10, 0x48, 0x00, 0x00, 0x00, +0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, 0x49, 0xff, 0xf9, 0x80, 0x3a, 0x6f, 0x98, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x4e, 0x03, 0x00, 0x0c, +0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0xec, 0x44, 0x20, 0x09, 0x4f, 0x49, 0xff, 0xd6, 0xf6, +0x48, 0x00, 0x00, 0x00, 0x44, 0x20, 0x00, 0x00, 0x10, 0x20, 0x00, 0x10, 0x49, 0xff, 0xff, 0xbc, +0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, +0x58, 0x60, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0xec, +0x44, 0x20, 0x05, 0x57, 0x49, 0xff, 0xd6, 0xda, 0x48, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x0b, +0x4e, 0x13, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0xec, 0x44, 0x20, 0x05, 0x58, +0x49, 0xff, 0xd6, 0xcc, 0x48, 0x00, 0x00, 0x00, 0x04, 0x20, 0x00, 0x0c, 0x4e, 0x23, 0x00, 0x0c, +0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0xec, 0x44, 0x20, 0x05, 0x59, 0x49, 0xff, 0xd6, 0xbe, +0x48, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x00, 0x3e, 0x1f, 0xca, 0x30, 0x40, 0x32, 0x10, 0x09, +0x38, 0x10, 0x8e, 0x02, 0x4e, 0x12, 0x00, 0x0e, 0x4b, 0xe0, 0x04, 0x01, 0x44, 0x10, 0x00, 0x01, +0x4c, 0x00, 0x80, 0x1a, 0x2e, 0x07, 0xf8, 0x5c, 0x4c, 0x00, 0xc0, 0x0a, 0x48, 0x00, 0x00, 0x0e, +0x2f, 0xe7, 0xf8, 0x5c, 0x44, 0x50, 0x00, 0x01, 0x4d, 0xe2, 0x80, 0x08, 0x58, 0x03, 0x00, 0x00, +0x49, 0xff, 0xff, 0x9a, 0x48, 0x00, 0x00, 0x08, 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, +0x49, 0xff, 0xf9, 0x0c, 0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, +0x51, 0xff, 0xff, 0xf4, 0x58, 0x70, 0x00, 0x00, 0x49, 0xff, 0xf3, 0x4a, 0x58, 0xa0, 0x00, 0x00, +0x44, 0x20, 0x00, 0x2c, 0x50, 0x01, 0x00, 0x04, 0x40, 0x91, 0x28, 0x1a, 0x40, 0x90, 0x28, 0x1b, +0x58, 0x04, 0x80, 0x00, 0x49, 0xf7, 0xea, 0xda, 0x44, 0x50, 0x0f, 0xff, 0x58, 0x80, 0x00, 0x00, +0x4c, 0x02, 0xc0, 0x08, 0x46, 0x0c, 0x00, 0x00, 0x58, 0x00, 0x00, 0x9a, 0x48, 0x00, 0x00, 0xf2, +0x49, 0xf7, 0xea, 0x9e, 0x50, 0x60, 0x00, 0x04, 0x58, 0x24, 0x80, 0x00, 0x44, 0x10, 0x00, 0x00, +0x49, 0xf7, 0xe5, 0x0c, 0x02, 0x03, 0x00, 0x0b, 0x00, 0x53, 0x00, 0x04, 0x44, 0x3f, 0xc0, 0x03, +0x40, 0x52, 0x98, 0x09, 0x40, 0x52, 0x98, 0x08, 0x40, 0x10, 0x0c, 0x02, 0x02, 0x23, 0x00, 0x04, +0x01, 0xe3, 0x7f, 0xff, 0x01, 0xc3, 0x00, 0x02, 0x00, 0x43, 0x00, 0x05, 0x14, 0x1f, 0x80, 0x01, +0x44, 0x1f, 0xff, 0x80, 0x00, 0x03, 0x00, 0x07, 0x54, 0x21, 0x00, 0x3f, 0x40, 0x30, 0x04, 0x04, +0x00, 0x03, 0x00, 0x11, 0x55, 0xef, 0x00, 0x7f, 0x58, 0x10, 0x00, 0x20, 0x04, 0x0f, 0x80, 0x01, +0x59, 0xce, 0x00, 0x08, 0x58, 0x00, 0x00, 0x04, 0x14, 0x0f, 0x80, 0x01, 0x12, 0x93, 0x7f, 0xfe, +0x44, 0x9f, 0xff, 0xff, 0x58, 0x52, 0x80, 0x1e, 0x58, 0x42, 0x00, 0x14, 0x58, 0x21, 0x28, 0x00, +0x10, 0x93, 0x00, 0x00, 0x44, 0x9f, 0xff, 0xc8, 0x11, 0xe3, 0x7f, 0xff, 0x10, 0x93, 0x00, 0x01, +0x11, 0xc3, 0x00, 0x02, 0x10, 0x53, 0x00, 0x04, 0x10, 0x43, 0x00, 0x05, 0x10, 0x33, 0x00, 0x07, +0x12, 0x23, 0x00, 0x04, 0x10, 0x13, 0x00, 0x11, 0x12, 0x03, 0x00, 0x0b, 0x4e, 0xa2, 0x00, 0x06, +0x50, 0x13, 0x00, 0x1c, 0x48, 0x00, 0x00, 0x04, 0x50, 0x13, 0x00, 0x18, 0x45, 0xef, 0xff, 0xff, +0x44, 0x30, 0x00, 0xe4, 0x44, 0x00, 0x00, 0x00, 0x12, 0x00, 0x80, 0x01, 0x12, 0x30, 0x80, 0x00, +0x11, 0xe0, 0x80, 0x09, 0x11, 0xe0, 0x80, 0x04, 0x11, 0xe0, 0x80, 0x05, 0x11, 0xe0, 0x80, 0x06, +0x11, 0xe0, 0x80, 0x07, 0x11, 0xe0, 0x80, 0x08, 0x50, 0x00, 0x80, 0x0a, 0x00, 0x43, 0x80, 0x04, +0x10, 0x40, 0x80, 0x0a, 0x00, 0x53, 0x80, 0x05, 0x10, 0x50, 0x80, 0x0b, 0x00, 0x23, 0x80, 0x06, +0x10, 0x20, 0x80, 0x0c, 0x00, 0x33, 0x80, 0x07, 0x10, 0x30, 0x80, 0x0d, 0x01, 0xe3, 0x80, 0x08, +0x11, 0xe0, 0x80, 0x0e, 0x00, 0x73, 0x80, 0x09, 0x10, 0x70, 0x80, 0x0f, 0x49, 0xff, 0xf2, 0xaa, +0x44, 0x50, 0x00, 0x0f, 0x58, 0x10, 0x00, 0x00, 0x4c, 0x02, 0xc0, 0x04, 0x48, 0x00, 0x00, 0x56, +0x00, 0x23, 0x00, 0x03, 0x40, 0x50, 0x08, 0x08, 0x54, 0x31, 0x00, 0x03, 0x40, 0x02, 0x8c, 0x04, +0x10, 0x03, 0x00, 0x03, 0x47, 0xe6, 0x01, 0x20, 0x46, 0x40, 0x02, 0x00, 0x04, 0x2f, 0x00, 0x40, +0x40, 0x12, 0x04, 0x0c, 0x40, 0x50, 0x88, 0x02, 0x4c, 0x50, 0xc0, 0x0e, 0x01, 0xe3, 0x7f, 0xff, +0x44, 0x0f, 0xff, 0x87, 0x40, 0x4f, 0x00, 0x02, 0x44, 0x10, 0x00, 0x04, 0x58, 0x02, 0x00, 0x20, +0x48, 0x00, 0x00, 0x14, 0x46, 0x26, 0x01, 0x20, 0x04, 0x51, 0x00, 0x41, 0x40, 0x30, 0x94, 0x02, +0x4c, 0x30, 0xc0, 0x10, 0x01, 0xe3, 0x7f, 0xff, 0x44, 0x0f, 0xff, 0x87, 0x40, 0x4f, 0x00, 0x02, +0x44, 0x10, 0x00, 0x0d, 0x58, 0x02, 0x00, 0x68, 0x10, 0x03, 0x7f, 0xff, 0x48, 0x00, 0x00, 0x08, +0x3e, 0x0f, 0xca, 0x08, 0x49, 0xff, 0xd5, 0x9a, 0x48, 0x00, 0x00, 0x18, 0x44, 0x00, 0x00, 0x02, +0x58, 0x24, 0x00, 0x00, 0x44, 0x30, 0x00, 0x01, 0x49, 0xf7, 0xed, 0xf4, 0x4e, 0x02, 0x00, 0x06, +0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0e, 0x3e, 0x0f, 0xca, 0x1c, 0x49, 0xff, 0xd5, 0x86, +0x58, 0x04, 0x00, 0x00, 0x49, 0xf7, 0xe9, 0xce, 0x46, 0x0c, 0x00, 0x00, 0x58, 0x00, 0x00, 0x01, +0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, +0x58, 0x60, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0xec, +0x44, 0x20, 0x05, 0xac, 0x49, 0xff, 0xd5, 0x6a, 0x48, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x0b, +0x4e, 0x13, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0xec, 0x44, 0x20, 0x05, 0xad, +0x49, 0xff, 0xd5, 0x5c, 0x48, 0x00, 0x00, 0x00, 0x02, 0x30, 0x80, 0x00, 0x44, 0x20, 0x00, 0xa4, +0x54, 0x01, 0x80, 0xfc, 0x4c, 0x01, 0x40, 0x06, 0x58, 0x00, 0x80, 0x00, 0x49, 0xff, 0xfe, 0xc0, +0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xfe, 0x48, 0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xe4, 0x58, 0x70, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x0c, +0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xc9, 0xec, 0x44, 0x20, 0x03, 0xc6, 0x49, 0xff, 0xd5, 0x36, +0x48, 0x00, 0x00, 0x00, 0x3c, 0x03, 0xfc, 0x2e, 0x44, 0x90, 0x00, 0x00, 0x44, 0x50, 0x01, 0x01, +0x3e, 0x97, 0xe3, 0x46, 0x4c, 0x02, 0xc0, 0x1a, 0x2e, 0x07, 0xe3, 0x24, 0x44, 0x50, 0x00, 0x01, +0x04, 0x83, 0x80, 0x02, 0x4c, 0x02, 0xc0, 0x06, 0x49, 0x00, 0x38, 0x82, 0x3e, 0x97, 0xe3, 0x24, +0x00, 0xa4, 0x00, 0x04, 0x54, 0x55, 0x00, 0x20, 0x4e, 0x52, 0x00, 0xce, 0x58, 0x03, 0x80, 0x00, +0x49, 0x00, 0x24, 0xc8, 0x48, 0x00, 0x00, 0xc8, 0x00, 0xa3, 0x80, 0x40, 0x44, 0x00, 0x00, 0x30, +0x43, 0xe5, 0x00, 0x24, 0x3e, 0x1f, 0xe4, 0x8c, 0x41, 0xcf, 0x04, 0x00, 0x00, 0x8e, 0x00, 0x2c, +0x54, 0x64, 0x00, 0x02, 0x4e, 0x62, 0x00, 0xb8, 0x04, 0x23, 0x80, 0x0c, 0x10, 0x9f, 0x80, 0x17, +0x50, 0x81, 0x00, 0x0c, 0x44, 0x90, 0x00, 0x00, 0x02, 0x23, 0x80, 0x09, 0x50, 0x6f, 0x80, 0x17, +0x3f, 0xce, 0xef, 0x5c, 0x48, 0x00, 0x00, 0x40, 0x00, 0x34, 0x00, 0x00, 0x44, 0x40, 0x00, 0xdd, +0x4c, 0x32, 0x40, 0x30, 0x14, 0x2f, 0x80, 0x01, 0x58, 0x04, 0x00, 0x00, 0x58, 0x13, 0x00, 0x00, +0x4b, 0xe0, 0x70, 0x01, 0x04, 0x2f, 0x80, 0x01, 0x4e, 0x02, 0x00, 0x24, 0x00, 0x5f, 0x80, 0x17, +0x45, 0xe0, 0x00, 0x09, 0x4c, 0x5f, 0x40, 0x1e, 0x50, 0x14, 0x00, 0x06, 0x00, 0x00, 0x80, 0x00, +0x44, 0x30, 0x00, 0x0c, 0x4c, 0x01, 0xc0, 0x16, 0x40, 0x41, 0x88, 0x08, 0x42, 0x65, 0x10, 0x24, +0x3e, 0x2f, 0xe4, 0x8c, 0x40, 0x63, 0x08, 0x00, 0x58, 0x03, 0x00, 0x00, 0x50, 0x21, 0x80, 0x06, +0x49, 0xf7, 0xe3, 0x58, 0x20, 0x13, 0x00, 0x2d, 0x4e, 0x14, 0x00, 0x26, 0x48, 0x00, 0x00, 0x12, +0x01, 0xe4, 0x00, 0x01, 0x50, 0x5f, 0x00, 0x02, 0x40, 0x94, 0x94, 0x00, 0x40, 0x84, 0x14, 0x00, +0x40, 0x94, 0x80, 0x13, 0x40, 0xf4, 0x88, 0x06, 0x4e, 0xf3, 0xff, 0xc0, 0x48, 0x00, 0x00, 0x64, +0x50, 0x03, 0x00, 0x14, 0x49, 0x00, 0x21, 0x5c, 0x00, 0x33, 0x00, 0x2d, 0x54, 0x01, 0x80, 0x01, +0x4e, 0x02, 0x00, 0x0a, 0x44, 0x10, 0x00, 0x01, 0x50, 0x03, 0x80, 0x40, 0x58, 0x20, 0x80, 0x00, +0x49, 0xff, 0xfb, 0xe2, 0x00, 0x03, 0x00, 0x05, 0x10, 0x03, 0x00, 0x2e, 0x4e, 0x03, 0x00, 0x04, +0x48, 0x00, 0x00, 0x3a, 0x00, 0x03, 0x80, 0x40, 0x50, 0x7f, 0x80, 0x0c, 0x58, 0x13, 0x80, 0x00, +0x49, 0xff, 0xec, 0x3e, 0x50, 0x03, 0x00, 0x0e, 0x04, 0x23, 0x80, 0x00, 0x3a, 0x10, 0x04, 0x00, +0x40, 0x10, 0x88, 0x01, 0x4e, 0x14, 0x00, 0x2c, 0x50, 0x43, 0x00, 0x0a, 0x3a, 0x32, 0x0c, 0x00, +0x3a, 0x20, 0x08, 0x00, 0x40, 0x11, 0x88, 0x00, 0x3a, 0x10, 0x04, 0x20, 0x01, 0xe3, 0x00, 0x05, +0x44, 0x50, 0x00, 0xff, 0x04, 0x13, 0x80, 0x00, 0x50, 0x4f, 0x7f, 0xff, 0x4d, 0xe2, 0x80, 0x04, +0x10, 0x43, 0x00, 0x05, 0x3a, 0x40, 0x10, 0x00, 0x40, 0x12, 0x04, 0x01, 0x4e, 0x14, 0x00, 0x06, +0x01, 0xe3, 0x00, 0x05, 0x4f, 0xe3, 0xff, 0xe6, 0x00, 0x03, 0x00, 0x05, 0x10, 0x03, 0x00, 0x2e, +0x4e, 0x03, 0x00, 0x06, 0x10, 0x03, 0x00, 0x2d, 0x48, 0x00, 0x00, 0x0e, 0x44, 0x00, 0x03, 0xe8, +0x40, 0x10, 0x80, 0x17, 0x44, 0x3f, 0xff, 0x80, 0x10, 0x33, 0x00, 0x2d, 0x50, 0x03, 0x00, 0x14, +0x49, 0x00, 0x21, 0xee, 0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x1c, 0x3a, 0x6f, 0xaa, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xec, 0x54, 0x00, 0x00, 0xff, +0x14, 0x0f, 0x80, 0x01, 0x44, 0x30, 0x00, 0x00, 0x04, 0x1f, 0x80, 0x01, 0x44, 0x00, 0x00, 0x01, +0x50, 0x2f, 0x80, 0x0e, 0x44, 0x90, 0x00, 0x00, 0x12, 0x31, 0x00, 0x00, 0x59, 0xc4, 0x80, 0x00, +0x49, 0xf7, 0xed, 0xf2, 0x50, 0x8f, 0x80, 0x08, 0x48, 0x00, 0x01, 0x0a, 0x49, 0xff, 0xe7, 0x3e, +0x04, 0x1f, 0x80, 0x01, 0x44, 0x00, 0x00, 0x01, 0x44, 0x20, 0x00, 0x00, 0x49, 0xf7, 0xeb, 0xf2, +0x44, 0x50, 0x0f, 0xff, 0x4c, 0x02, 0x81, 0x02, 0x49, 0xff, 0xf5, 0x8c, 0x50, 0x60, 0x00, 0x10, +0x4e, 0x03, 0x00, 0x0e, 0x3c, 0x0d, 0xf7, 0xec, 0x04, 0x20, 0x00, 0x00, 0x4e, 0x23, 0x00, 0xf6, +0x44, 0x10, 0x00, 0x0a, 0x49, 0x00, 0x21, 0xac, 0x48, 0x00, 0x00, 0xf0, 0x04, 0x70, 0x00, 0x02, +0x44, 0x10, 0x00, 0x10, 0x12, 0x10, 0x00, 0x0b, 0x14, 0x70, 0x00, 0x06, 0x02, 0x03, 0x80, 0x01, +0x41, 0xe0, 0x34, 0x09, 0x50, 0x3f, 0x7f, 0xfe, 0x54, 0x51, 0x80, 0xff, 0x11, 0xe3, 0x00, 0x04, +0x5c, 0xf2, 0x80, 0x02, 0x4e, 0xf2, 0x00, 0x44, 0x03, 0xe3, 0x80, 0x01, 0x54, 0x5f, 0x1e, 0x00, +0x40, 0x42, 0xa4, 0x09, 0x54, 0x22, 0x00, 0x08, 0x10, 0x43, 0x00, 0x05, 0x4e, 0x23, 0x00, 0x06, +0x58, 0x20, 0x80, 0x00, 0x48, 0x00, 0x00, 0x08, 0x50, 0x93, 0x80, 0x10, 0x14, 0x93, 0x00, 0x06, +0x40, 0x20, 0x84, 0x08, 0x00, 0x03, 0x00, 0x05, 0x54, 0x30, 0x00, 0x01, 0x4e, 0x32, 0x00, 0x0a, +0x40, 0x43, 0x88, 0x00, 0x50, 0x11, 0x00, 0x10, 0x14, 0x43, 0x00, 0x03, 0x40, 0x20, 0x80, 0x13, +0x01, 0xe3, 0x00, 0x05, 0x54, 0x5f, 0x00, 0x02, 0x4e, 0x52, 0x00, 0x0a, 0x40, 0x33, 0x88, 0x00, +0x14, 0x33, 0x00, 0x04, 0x50, 0x21, 0x00, 0x08, 0x40, 0x21, 0x00, 0x13, 0x00, 0x13, 0x00, 0x05, +0x54, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x0a, 0x40, 0x53, 0x88, 0x00, 0x50, 0x41, 0x00, 0x18, +0x14, 0x53, 0x00, 0x05, 0x40, 0x22, 0x00, 0x13, 0x12, 0x23, 0x00, 0x03, 0x00, 0x23, 0x00, 0x04, +0x44, 0x50, 0x00, 0x02, 0x4c, 0x22, 0xc0, 0x56, 0x00, 0x33, 0x80, 0x06, 0x02, 0x13, 0x00, 0x03, +0x55, 0xe1, 0x80, 0x40, 0x40, 0x4f, 0x78, 0x1a, 0x40, 0x41, 0x78, 0x1b, 0x40, 0x53, 0x84, 0x00, +0x40, 0x02, 0x90, 0x00, 0x42, 0x50, 0x00, 0x09, 0x14, 0x53, 0x00, 0x07, 0x00, 0x33, 0x80, 0x06, +0x54, 0x41, 0x80, 0x3f, 0x41, 0xe2, 0x90, 0x00, 0x40, 0x3f, 0x08, 0x09, 0x40, 0x31, 0x88, 0x08, +0x10, 0x43, 0x00, 0x01, 0x14, 0x33, 0x00, 0x08, 0x44, 0x40, 0x00, 0x00, 0x02, 0x23, 0x80, 0x00, +0x40, 0x03, 0x88, 0x00, 0x41, 0xe0, 0x0c, 0x01, 0x13, 0xe3, 0x00, 0x01, 0x44, 0x30, 0x00, 0x08, +0x00, 0x13, 0x80, 0x07, 0x10, 0x43, 0x00, 0x2f, 0x40, 0x20, 0x88, 0x09, 0x10, 0x23, 0x00, 0x30, +0x02, 0x02, 0x80, 0x00, 0x54, 0x20, 0x00, 0x0c, 0x12, 0x03, 0x00, 0x15, 0x4c, 0x21, 0xc0, 0x08, +0x50, 0x03, 0x7f, 0xf0, 0x49, 0xff, 0xfb, 0xae, 0x48, 0x00, 0x00, 0x48, 0x4e, 0x23, 0x00, 0x08, +0x50, 0x03, 0x7f, 0xf0, 0x49, 0xff, 0xfc, 0x7c, 0x48, 0x00, 0x00, 0x40, 0x44, 0x00, 0x00, 0x04, +0x4c, 0x20, 0x40, 0x36, 0x50, 0x03, 0x7f, 0xf0, 0x49, 0xff, 0xfd, 0xe2, 0x48, 0x00, 0x00, 0x36, +0x44, 0x50, 0x00, 0x03, 0x4c, 0x22, 0xc0, 0x2c, 0x05, 0xe3, 0x00, 0x06, 0x44, 0x20, 0x00, 0x06, +0x50, 0x1f, 0x00, 0x02, 0x58, 0x04, 0x00, 0x00, 0x49, 0xf7, 0xe1, 0xdc, 0x00, 0x03, 0x80, 0x08, +0x49, 0xff, 0xf4, 0xa4, 0x14, 0x03, 0x00, 0x09, 0x50, 0x03, 0x7f, 0xf0, 0x02, 0x14, 0x80, 0x00, +0x12, 0x13, 0x00, 0x15, 0x02, 0x44, 0x80, 0x04, 0x12, 0x43, 0x00, 0x14, 0x02, 0x24, 0x80, 0x05, +0x12, 0x23, 0x00, 0x16, 0x49, 0x00, 0x22, 0x04, 0x50, 0x03, 0x7f, 0xf0, 0x44, 0x10, 0x00, 0x01, +0x49, 0xff, 0xf5, 0xa4, 0x49, 0xff, 0xe6, 0x42, 0x48, 0x00, 0x00, 0x08, 0x50, 0x03, 0x7f, 0xf0, +0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xf5, 0x9a, 0x51, 0xce, 0x00, 0x01, 0x02, 0x34, 0x00, 0x03, +0x40, 0xfe, 0x0c, 0x06, 0x4e, 0xf3, 0xfe, 0xf4, 0x51, 0xff, 0x80, 0x14, 0x3a, 0x6f, 0xaa, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x44, 0x10, 0x00, 0x00, +0x44, 0x00, 0x00, 0x03, 0x49, 0xff, 0xdb, 0x76, 0x46, 0x00, 0x02, 0x10, 0x58, 0x00, 0x00, 0x04, +0x49, 0xff, 0xdb, 0x96, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x4e, 0x03, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, +0x3e, 0x1f, 0xca, 0x70, 0x44, 0x20, 0x01, 0x93, 0x49, 0xff, 0xd2, 0xf0, 0x48, 0x00, 0x00, 0x00, +0x4e, 0x13, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xca, 0x70, 0x44, 0x20, 0x01, 0x94, +0x49, 0xff, 0xd2, 0xe4, 0x48, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x5c, 0xf1, 0x00, 0x07, +0x4e, 0xf3, 0x00, 0x1c, 0x00, 0x40, 0x00, 0x02, 0x44, 0x50, 0x00, 0x50, 0x4c, 0x42, 0xc0, 0x16, +0x00, 0x50, 0x00, 0x03, 0x45, 0xe0, 0x00, 0x6f, 0x4c, 0x5f, 0x40, 0x10, 0x00, 0x20, 0x00, 0x04, +0x44, 0x50, 0x00, 0x9a, 0x4c, 0x22, 0xc0, 0x0a, 0x00, 0x00, 0x00, 0x05, 0x10, 0x00, 0x80, 0x00, +0x44, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x04, 0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, +0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3e, 0x5f, 0xdf, 0xb4, 0x04, 0x12, 0x80, 0x00, +0x44, 0x20, 0x00, 0x00, 0x14, 0x20, 0x80, 0x00, 0x58, 0x32, 0x80, 0x00, 0x04, 0x42, 0x80, 0x00, +0x58, 0x11, 0x00, 0x00, 0x10, 0x22, 0x00, 0x04, 0x58, 0x41, 0x00, 0x00, 0x04, 0x02, 0x80, 0x00, +0x10, 0x20, 0x00, 0x05, 0x04, 0x21, 0x80, 0x00, 0x40, 0x00, 0x8c, 0x08, 0x40, 0x51, 0x00, 0x00, +0x10, 0x12, 0x80, 0x06, 0x50, 0x10, 0x80, 0x01, 0x04, 0x21, 0x80, 0x00, 0x40, 0x51, 0x00, 0x00, +0x44, 0x00, 0x00, 0x08, 0x10, 0x42, 0x80, 0x07, 0x4c, 0x10, 0x7f, 0xee, 0x4a, 0x00, 0x78, 0x20, +0x2e, 0x00, 0x02, 0x85, 0x4e, 0x02, 0x00, 0x4e, 0x46, 0x36, 0x04, 0x00, 0x04, 0x41, 0x80, 0x02, +0x58, 0x11, 0x80, 0x00, 0x42, 0x22, 0x5c, 0x08, 0x14, 0x21, 0x80, 0x02, 0x04, 0x50, 0x80, 0x00, +0x46, 0x00, 0x08, 0x00, 0x40, 0x32, 0x80, 0x02, 0x4e, 0x33, 0xff, 0xfa, 0x46, 0x56, 0x04, 0x00, +0x58, 0x52, 0x80, 0x08, 0x04, 0x02, 0x80, 0x00, 0x46, 0x18, 0x00, 0x21, 0x58, 0x20, 0x00, 0x04, +0x14, 0x22, 0x80, 0x00, 0x58, 0x10, 0x81, 0x00, 0x04, 0x42, 0x80, 0x00, 0x46, 0x28, 0x00, 0x20, +0x58, 0x02, 0x00, 0x08, 0x14, 0x02, 0x80, 0x00, 0x04, 0x42, 0x80, 0x00, 0x58, 0x02, 0x00, 0x10, +0x14, 0x02, 0x80, 0x00, 0x04, 0x42, 0x80, 0x00, 0x58, 0x02, 0x00, 0x03, 0x14, 0x02, 0x80, 0x00, +0x44, 0x4f, 0xff, 0x9f, 0x04, 0x00, 0x80, 0x00, 0x40, 0x50, 0x10, 0x02, 0x14, 0x50, 0x80, 0x00, +0x04, 0x00, 0x80, 0x00, 0x42, 0x50, 0x18, 0x09, 0x14, 0x50, 0x80, 0x00, 0x04, 0x51, 0x00, 0x00, +0x40, 0x42, 0x88, 0x09, 0x40, 0x42, 0x08, 0x08, 0x14, 0x41, 0x00, 0x00, 0x3e, 0x30, 0x02, 0x85, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, 0x2e, 0x27, 0xf8, 0x5d, 0x58, 0x60, 0x00, 0x00, +0x4e, 0x22, 0x00, 0x30, 0x2e, 0x07, 0xf8, 0x5c, 0x4e, 0x02, 0x00, 0x2c, 0x2e, 0x57, 0xe3, 0x45, +0x44, 0x10, 0x00, 0x01, 0x4c, 0x50, 0x80, 0x26, 0x2e, 0x47, 0xe3, 0x46, 0x4c, 0x40, 0x80, 0x22, +0x2f, 0xe7, 0xe2, 0x1c, 0x44, 0x50, 0x00, 0x03, 0x4d, 0xe2, 0x80, 0x1c, 0x44, 0x50, 0x00, 0x75, +0x4c, 0x62, 0x80, 0x04, 0x49, 0xff, 0xe5, 0x50, 0x2e, 0x47, 0xe2, 0x18, 0x44, 0x10, 0x00, 0x01, +0x4c, 0x40, 0xc0, 0x10, 0x44, 0x50, 0x00, 0x75, 0x4c, 0x62, 0x80, 0x0c, 0x2e, 0x27, 0xf8, 0x5e, +0x4e, 0x23, 0x00, 0x08, 0x49, 0xf7, 0xdc, 0xfc, 0x4e, 0x03, 0x00, 0x04, 0x49, 0xff, 0xd8, 0x5a, +0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, +0x2e, 0x27, 0xf8, 0x5d, 0x4e, 0x22, 0x00, 0x14, 0x2e, 0x17, 0xf8, 0x5c, 0x4e, 0x12, 0x00, 0x10, +0x44, 0x50, 0x00, 0x75, 0x4c, 0x02, 0x80, 0x0c, 0x49, 0xff, 0xec, 0xba, 0x2e, 0x07, 0xe2, 0x18, +0x44, 0x40, 0x00, 0x01, 0x4c, 0x02, 0x40, 0x04, 0x49, 0xff, 0xd7, 0xf6, 0x51, 0xff, 0x80, 0x04, +0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa8, 0xbc, 0x04, 0x10, 0x00, 0x02, +0x00, 0x60, 0x80, 0x06, 0x50, 0x80, 0x80, 0x20, 0x4e, 0x62, 0x00, 0x0c, 0x04, 0x24, 0x00, 0x01, +0x04, 0x14, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x14, 0x20, 0x80, 0x00, 0x48, 0x00, 0x00, 0x42, +0x44, 0x00, 0x00, 0x14, 0x00, 0xa0, 0x80, 0x07, 0x49, 0xf7, 0xe6, 0x28, 0x44, 0x50, 0x0f, 0xff, +0x58, 0x90, 0x00, 0x00, 0x4c, 0x02, 0xc0, 0x06, 0x44, 0x00, 0x01, 0x03, 0x48, 0x00, 0x00, 0x32, +0x49, 0xf7, 0xe5, 0xee, 0x58, 0x13, 0x00, 0x00, 0x44, 0x20, 0x00, 0x14, 0x58, 0x70, 0x00, 0x00, +0x49, 0xf7, 0xe0, 0x5c, 0x44, 0x30, 0x00, 0x14, 0x44, 0x2f, 0xe0, 0x00, 0x44, 0x10, 0x00, 0x06, +0x12, 0x33, 0x80, 0x00, 0x12, 0x23, 0x80, 0x01, 0x10, 0x13, 0x80, 0x04, 0x10, 0xa3, 0x80, 0x05, +0x50, 0x73, 0x80, 0x0c, 0x04, 0x54, 0x00, 0x00, 0x58, 0x24, 0x80, 0x00, 0x14, 0x53, 0x80, 0x00, +0x44, 0x10, 0x00, 0x01, 0x04, 0x04, 0x00, 0x00, 0x58, 0x33, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, +0x58, 0x03, 0x00, 0x00, 0x14, 0x43, 0x80, 0x01, 0x49, 0xf7, 0xe9, 0xf4, 0x58, 0x03, 0x00, 0x00, +0x3a, 0x6f, 0xa8, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa8, 0xbc, 0x2e, 0x50, 0x02, 0x85, +0x44, 0x90, 0x00, 0x01, 0x4c, 0x54, 0x80, 0x72, 0x46, 0x28, 0x00, 0x20, 0x04, 0x71, 0x00, 0x00, +0x47, 0xe8, 0x00, 0x21, 0x58, 0x83, 0x80, 0x03, 0x14, 0x81, 0x00, 0x00, 0x59, 0xef, 0x01, 0x00, +0x04, 0x0f, 0x00, 0x00, 0x46, 0x76, 0x04, 0x00, 0x58, 0x60, 0x00, 0x40, 0x14, 0x6f, 0x00, 0x00, +0x44, 0x80, 0x17, 0xc4, 0x04, 0x1f, 0x00, 0x00, 0x58, 0x50, 0x80, 0x60, 0x14, 0x5f, 0x00, 0x00, +0x58, 0x04, 0x80, 0x00, 0x4b, 0xe0, 0x20, 0x01, 0x04, 0x43, 0x80, 0x02, 0x46, 0x66, 0x04, 0x00, +0x58, 0x32, 0x00, 0x10, 0x14, 0x33, 0x80, 0x02, 0x58, 0x63, 0x00, 0x04, 0x04, 0x23, 0x00, 0x00, +0x44, 0x00, 0x00, 0x0a, 0x40, 0x11, 0x24, 0x04, 0x14, 0x13, 0x00, 0x00, 0x46, 0x78, 0x00, 0x20, +0x04, 0x53, 0x00, 0x00, 0x58, 0x73, 0x80, 0xfc, 0x58, 0x42, 0x80, 0x02, 0x14, 0x43, 0x00, 0x00, +0x4b, 0xe0, 0x20, 0x01, 0x04, 0x33, 0x00, 0x00, 0x44, 0x00, 0x00, 0x04, 0x58, 0x21, 0x80, 0x10, +0x14, 0x23, 0x00, 0x00, 0x04, 0x13, 0x00, 0x00, 0x40, 0x50, 0x80, 0x04, 0x14, 0x53, 0x00, 0x00, +0x4b, 0xe0, 0x20, 0x01, 0x04, 0x43, 0x00, 0x00, 0x58, 0x32, 0x00, 0x08, 0x14, 0x33, 0x00, 0x00, +0x58, 0x04, 0x80, 0x00, 0x04, 0x23, 0x80, 0x00, 0x58, 0x11, 0x00, 0x0f, 0x14, 0x13, 0x80, 0x00, +0x04, 0x43, 0x80, 0x00, 0x40, 0x32, 0x10, 0x09, 0x40, 0x31, 0x90, 0x08, 0x14, 0x33, 0x80, 0x00, +0x4b, 0xe0, 0x20, 0x01, 0x04, 0x23, 0x80, 0x00, 0x58, 0x11, 0x00, 0x0f, 0x14, 0x13, 0x80, 0x00, +0x49, 0xff, 0xdf, 0x56, 0x3e, 0x90, 0x02, 0x85, 0x3a, 0x6f, 0xa8, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x3e, 0xaf, 0xe2, 0x00, 0x3e, 0x6f, 0xdf, 0x5c, +0x3e, 0x7f, 0xe3, 0x25, 0x3f, 0xce, 0xe5, 0x98, 0x04, 0x25, 0x00, 0x00, 0x44, 0x50, 0x00, 0x02, +0x3c, 0x2f, 0xf8, 0x81, 0x14, 0x05, 0x00, 0x00, 0x4c, 0x02, 0x80, 0x08, 0x44, 0x50, 0x00, 0x05, +0x4c, 0x02, 0xc0, 0x76, 0x48, 0x00, 0x00, 0x5c, 0x04, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, +0x44, 0x20, 0x00, 0xa4, 0x49, 0xf7, 0xdf, 0x92, 0x00, 0x03, 0x80, 0x00, 0x3e, 0x9f, 0xe4, 0x8c, +0x49, 0xff, 0xf1, 0xc8, 0x00, 0x03, 0x80, 0x00, 0x44, 0x80, 0x00, 0x00, 0x49, 0xff, 0xf1, 0x64, +0x49, 0xff, 0xff, 0x54, 0x04, 0x03, 0x00, 0x00, 0x44, 0x30, 0x00, 0x01, 0x10, 0x30, 0x00, 0x9c, +0x44, 0x00, 0x00, 0x00, 0x04, 0x53, 0x00, 0x00, 0x10, 0x32, 0x80, 0x9e, 0x04, 0x43, 0x00, 0x00, +0x10, 0x32, 0x00, 0x9d, 0x04, 0x23, 0x00, 0x00, 0x10, 0x01, 0x00, 0x9f, 0x04, 0x13, 0x00, 0x00, +0x10, 0x30, 0x80, 0xa0, 0x04, 0x53, 0x00, 0x00, 0x10, 0x02, 0x80, 0xa1, 0x49, 0xff, 0xf2, 0xa6, +0x49, 0xff, 0xf1, 0xac, 0x44, 0x00, 0x00, 0x01, 0x49, 0x00, 0x1f, 0x22, 0x49, 0xff, 0xf7, 0xbe, +0x49, 0xff, 0xfd, 0xa2, 0x49, 0x00, 0x22, 0x0c, 0x49, 0xff, 0xd3, 0x50, 0x49, 0xff, 0xfd, 0xf6, +0x49, 0x00, 0x0f, 0xc8, 0x58, 0x04, 0x80, 0x00, 0x4b, 0xe0, 0x70, 0x01, 0x50, 0x14, 0x00, 0x01, +0x10, 0x84, 0x80, 0x2f, 0x44, 0x30, 0x00, 0x04, 0x54, 0x80, 0x80, 0xff, 0x50, 0x94, 0x80, 0x30, +0x4c, 0x81, 0xff, 0xf2, 0x44, 0x00, 0x00, 0x05, 0x48, 0x00, 0x00, 0x1a, 0x01, 0xe3, 0x80, 0x00, +0x4f, 0xe2, 0x00, 0x16, 0x3c, 0x5d, 0xf8, 0xca, 0x44, 0x20, 0x00, 0x00, 0x50, 0x42, 0xff, 0xff, +0x10, 0x23, 0x80, 0x00, 0x5c, 0xf2, 0x00, 0x03, 0x4e, 0xf3, 0x00, 0x04, 0x48, 0x00, 0x00, 0x06, +0x44, 0x30, 0x00, 0x00, 0x3c, 0x3f, 0xf8, 0xca, 0x44, 0x00, 0x00, 0x04, 0x04, 0x55, 0x00, 0x00, +0x4c, 0x02, 0xff, 0x7c, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x04, 0x70, 0x00, 0x02, 0x58, 0x60, 0x00, 0x00, +0x50, 0x13, 0x80, 0x20, 0x00, 0x20, 0x80, 0x00, 0x4e, 0x23, 0x00, 0x36, 0x05, 0xe0, 0x80, 0x01, +0x40, 0x51, 0x78, 0x06, 0x3e, 0x57, 0xe3, 0x25, 0x04, 0x00, 0x80, 0x01, 0x44, 0x20, 0x00, 0x03, +0x3c, 0x0f, 0xf8, 0xca, 0x4c, 0x01, 0x40, 0x06, 0x00, 0x10, 0x80, 0x01, 0x3e, 0x17, 0xe3, 0x2c, +0x3c, 0x0d, 0xf8, 0x80, 0x44, 0x50, 0x00, 0x04, 0x4c, 0x02, 0xc0, 0x0a, 0x44, 0x10, 0x00, 0x6a, +0x44, 0x20, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x0c, 0x44, 0x50, 0x00, 0x05, +0x4c, 0x02, 0xc0, 0x0a, 0x44, 0x00, 0x00, 0x01, 0x44, 0x10, 0x00, 0x6a, 0x44, 0x20, 0x00, 0x00, +0x49, 0xf8, 0x03, 0xf8, 0x44, 0x00, 0x00, 0x03, 0x49, 0xff, 0xff, 0x2c, 0x44, 0x10, 0x00, 0x00, +0x48, 0x00, 0x00, 0x12, 0x3c, 0x5d, 0xf8, 0x80, 0x45, 0xe0, 0x00, 0x04, 0x4c, 0x5f, 0x00, 0x08, +0x46, 0x1c, 0x00, 0x00, 0x58, 0x10, 0x80, 0x01, 0x48, 0x00, 0x00, 0x06, 0x49, 0x00, 0x15, 0xee, +0x58, 0x10, 0x00, 0x00, 0x00, 0x23, 0x80, 0x0b, 0x54, 0x01, 0x00, 0x01, 0x4e, 0x02, 0x00, 0x08, +0x58, 0x03, 0x00, 0x00, 0x49, 0x00, 0x02, 0x12, 0x58, 0x10, 0x00, 0x00, 0x58, 0x00, 0x80, 0x00, +0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, +0x51, 0xff, 0xff, 0xfc, 0x3c, 0x2d, 0xf8, 0x80, 0x4e, 0x23, 0x00, 0x0c, 0x44, 0x00, 0x00, 0x01, +0x44, 0x10, 0x00, 0x6a, 0x49, 0xf8, 0x03, 0xbe, 0x44, 0x00, 0x00, 0x03, 0x49, 0xff, 0xfe, 0xf2, +0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, +0x51, 0xff, 0xff, 0xfc, 0x49, 0x00, 0x0f, 0x6e, 0x49, 0x00, 0x1e, 0x26, 0x49, 0x00, 0x0f, 0x1c, +0x49, 0xff, 0xfd, 0x60, 0x44, 0x00, 0x00, 0x00, 0x49, 0xff, 0xfe, 0xdc, 0x51, 0xff, 0x80, 0x04, +0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, +0x44, 0x10, 0x00, 0x00, 0x44, 0x50, 0x00, 0x00, 0x3e, 0x57, 0xe3, 0x25, 0x3c, 0x1f, 0xf8, 0x81, +0x3c, 0x1f, 0xf8, 0x80, 0x44, 0x00, 0x00, 0x02, 0x49, 0xff, 0xfe, 0xc4, 0x51, 0xff, 0x80, 0x04, +0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, 0x51, 0xff, 0xff, 0xf8, +0x44, 0x60, 0x00, 0x00, 0x50, 0x0f, 0x80, 0x04, 0x14, 0x6f, 0x80, 0x01, 0x49, 0xf7, 0xd3, 0x48, +0x46, 0x00, 0x20, 0x00, 0x14, 0x60, 0x00, 0x00, 0x44, 0x20, 0x2d, 0x0c, 0x04, 0x0f, 0x80, 0x01, +0x3c, 0x2f, 0xff, 0xb9, 0x49, 0xf7, 0xd3, 0x48, 0x51, 0xff, 0x80, 0x08, 0x3a, 0x6f, 0x98, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, 0x58, 0x60, 0x00, 0x00, 0x49, 0xff, 0xff, 0xb0, +0x44, 0x00, 0x00, 0x0c, 0x04, 0x83, 0x00, 0x02, 0x49, 0xf7, 0xe4, 0x00, 0x44, 0x50, 0x0f, 0xff, +0x58, 0x70, 0x00, 0x00, 0x4c, 0x02, 0xc0, 0x0a, 0x3e, 0x0f, 0xca, 0x90, 0x49, 0xff, 0xcf, 0x96, +0x44, 0x00, 0x01, 0x03, 0x48, 0x00, 0x00, 0x2e, 0x49, 0xf7, 0xe3, 0xc2, 0x44, 0x50, 0x00, 0x0c, +0x44, 0x4f, 0xe0, 0x00, 0x44, 0x3f, 0xff, 0xef, 0x12, 0x50, 0x00, 0x00, 0x12, 0x40, 0x00, 0x01, +0x10, 0x30, 0x00, 0x04, 0x50, 0x20, 0x00, 0x08, 0x00, 0x84, 0x00, 0x07, 0x44, 0x60, 0x00, 0x00, +0x10, 0x80, 0x00, 0x05, 0x10, 0x61, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x58, 0x23, 0x80, 0x00, +0x58, 0x10, 0x00, 0x00, 0x44, 0x30, 0x00, 0x01, 0x49, 0xf7, 0xe7, 0xd4, 0x44, 0x00, 0x00, 0x00, +0x49, 0x00, 0x1f, 0x3a, 0x3e, 0x67, 0xe3, 0x30, 0x49, 0xff, 0xff, 0xa0, 0x44, 0x00, 0x00, 0x00, +0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, 0x04, 0x10, 0x00, 0x02, +0x58, 0x60, 0x00, 0x00, 0x00, 0x20, 0x80, 0x04, 0x3e, 0x0f, 0xca, 0xb4, 0x44, 0x80, 0x00, 0x00, +0x00, 0x50, 0x00, 0x00, 0x50, 0x34, 0x00, 0x01, 0x4c, 0x51, 0x40, 0x1e, 0x04, 0x10, 0x00, 0x01, +0x4e, 0x12, 0x00, 0x1a, 0x58, 0x03, 0x00, 0x00, 0x4b, 0xe0, 0x04, 0x01, 0x58, 0x70, 0x00, 0x00, +0x44, 0x50, 0x00, 0x01, 0x4c, 0x72, 0x80, 0x1c, 0x46, 0x2c, 0x00, 0x00, 0x58, 0x51, 0x00, 0x9a, +0x4c, 0x72, 0x80, 0x16, 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xf1, 0xae, +0x48, 0x00, 0x00, 0x0e, 0x54, 0x81, 0x80, 0xff, 0x44, 0x50, 0x00, 0x04, 0x50, 0x00, 0x00, 0x08, +0x4c, 0x82, 0xff, 0xd8, 0x44, 0x70, 0x00, 0x00, 0x48, 0x00, 0x00, 0x06, 0x5c, 0xf4, 0x00, 0x04, +0x4e, 0xf3, 0x00, 0x08, 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xf1, 0x96, +0x58, 0x03, 0x80, 0x00, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x10, 0x30, 0x00, 0x08, +0x12, 0x10, 0x00, 0x00, 0x44, 0x3f, 0xe0, 0x00, 0x44, 0x1f, 0xff, 0xed, 0x12, 0x30, 0x00, 0x01, +0x10, 0x10, 0x00, 0x04, 0x10, 0x20, 0x00, 0x05, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, +0x51, 0xff, 0xff, 0xf8, 0x10, 0x0f, 0x80, 0x04, 0x44, 0x00, 0x00, 0x0d, 0x49, 0xf7, 0xe3, 0x5e, +0x44, 0x50, 0x0f, 0xff, 0x58, 0x60, 0x00, 0x00, 0x4c, 0x02, 0xc0, 0x06, 0x44, 0x00, 0x01, 0x03, +0x48, 0x00, 0x00, 0x2c, 0x49, 0xf7, 0xe3, 0x24, 0x44, 0x5f, 0xe0, 0x00, 0x44, 0x4f, 0xff, 0xed, +0x44, 0x30, 0x00, 0x00, 0x44, 0x10, 0x00, 0x10, 0x44, 0x20, 0x00, 0x31, 0x12, 0x10, 0x00, 0x00, +0x12, 0x50, 0x00, 0x01, 0x10, 0x40, 0x00, 0x04, 0x10, 0x30, 0x00, 0x05, 0x10, 0x20, 0x00, 0x08, +0x50, 0x1f, 0x80, 0x04, 0x44, 0x20, 0x00, 0x01, 0x50, 0x00, 0x00, 0x0c, 0x49, 0xf7, 0xdd, 0x6a, +0x44, 0x00, 0x00, 0x00, 0x58, 0x23, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, 0x58, 0x30, 0x00, 0x00, +0x49, 0xf7, 0xe7, 0x30, 0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x08, 0x3a, 0x6f, 0x98, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x54, 0x90, 0x00, 0xff, +0x44, 0x00, 0x00, 0x10, 0x40, 0x80, 0x80, 0x10, 0x49, 0xf7, 0xe3, 0x18, 0x44, 0x50, 0x0f, 0xff, +0x58, 0x70, 0x00, 0x00, 0x4c, 0x02, 0xc0, 0x06, 0x44, 0x00, 0x01, 0x03, 0x48, 0x00, 0x00, 0x40, +0x49, 0xf7, 0xe2, 0xde, 0x58, 0x60, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x10, +0x49, 0xf7, 0xdd, 0x4c, 0x50, 0x33, 0x00, 0x0c, 0x4e, 0x92, 0x00, 0x06, 0x44, 0x00, 0x00, 0x00, +0x48, 0x00, 0x00, 0x04, 0x44, 0x00, 0x00, 0x01, 0x10, 0x01, 0x80, 0x00, 0x10, 0x81, 0x80, 0x01, +0x2e, 0x07, 0xe3, 0x2f, 0x44, 0x50, 0x00, 0x22, 0x50, 0x10, 0x00, 0x01, 0x54, 0x00, 0x80, 0xff, +0x44, 0x40, 0x00, 0x10, 0x44, 0x3f, 0xe0, 0x00, 0x44, 0x2f, 0xff, 0xed, 0x3e, 0x07, 0xe3, 0x2f, +0x12, 0x33, 0x00, 0x01, 0x10, 0x23, 0x00, 0x04, 0x10, 0x03, 0x00, 0x05, 0x10, 0x53, 0x00, 0x08, +0x44, 0x00, 0x00, 0x00, 0x12, 0x43, 0x00, 0x00, 0x58, 0x23, 0x80, 0x00, 0x44, 0x10, 0x00, 0x01, +0x58, 0x30, 0x00, 0x00, 0x49, 0xf7, 0xe6, 0xd6, 0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, +0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa8, 0xbc, 0x50, 0x20, 0x80, 0x0c, +0x58, 0xa0, 0x00, 0x00, 0x40, 0x01, 0x00, 0x13, 0x58, 0x70, 0x80, 0x00, 0x49, 0xf7, 0xe2, 0xbe, +0x44, 0x50, 0x0f, 0xff, 0x58, 0x80, 0x00, 0x00, 0x4c, 0x02, 0xc0, 0x06, 0x44, 0x00, 0x01, 0x03, +0x48, 0x00, 0x00, 0x48, 0x49, 0xf7, 0xe2, 0x84, 0x58, 0x60, 0x00, 0x00, 0x54, 0x03, 0x80, 0x03, +0x4e, 0x02, 0x00, 0x08, 0x40, 0x73, 0x88, 0x09, 0x40, 0x73, 0x88, 0x08, 0x50, 0x73, 0x80, 0x04, +0x50, 0x93, 0x80, 0x0c, 0x44, 0x10, 0x00, 0x00, 0x58, 0x24, 0x80, 0x00, 0x58, 0x03, 0x00, 0x00, +0x49, 0xf7, 0xdc, 0xe4, 0x58, 0x23, 0x80, 0x00, 0x58, 0x15, 0x00, 0x00, 0x3e, 0x7f, 0xe3, 0x2e, +0x50, 0x03, 0x00, 0x0c, 0x49, 0xf7, 0xdc, 0xc6, 0x00, 0x23, 0x80, 0x00, 0x44, 0x30, 0x00, 0x13, +0x44, 0x0f, 0xe0, 0x00, 0x44, 0x1f, 0xff, 0xed, 0x10, 0x33, 0x00, 0x08, 0x12, 0x03, 0x00, 0x01, +0x10, 0x13, 0x00, 0x04, 0x10, 0x23, 0x00, 0x05, 0x44, 0x00, 0x00, 0x00, 0x12, 0x93, 0x00, 0x00, +0x58, 0x24, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, 0x58, 0x30, 0x00, 0x00, 0x49, 0xf7, 0xe6, 0x7a, +0x00, 0x53, 0x80, 0x00, 0x44, 0x00, 0x00, 0x00, 0x50, 0x42, 0x80, 0x01, 0x10, 0x43, 0x80, 0x00, +0x3a, 0x6f, 0xa8, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa8, 0xbc, 0x04, 0x80, 0x00, 0x02, +0x44, 0x00, 0x00, 0x14, 0x58, 0x90, 0x80, 0x00, 0x00, 0xa4, 0x00, 0x07, 0x49, 0xf7, 0xe2, 0x5e, 0x44, 0x50, 0x0f, 0xff, 0x58, 0x70, 0x00, 0x00, 0x4c, 0x02, 0xc0, 0x06, 0x44, 0x00, 0x01, 0x03, -0x48, 0x00, 0x00, 0x40, 0x49, 0xf7, 0xe3, 0x24, 0x58, 0x60, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, -0x44, 0x20, 0x00, 0x10, 0x49, 0xf7, 0xdd, 0x92, 0x50, 0x33, 0x00, 0x0c, 0x4e, 0x92, 0x00, 0x06, -0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x04, 0x44, 0x00, 0x00, 0x01, 0x10, 0x01, 0x80, 0x00, -0x10, 0x81, 0x80, 0x01, 0x2e, 0x07, 0xe5, 0x8f, 0x44, 0x50, 0x00, 0x22, 0x50, 0x10, 0x00, 0x01, -0x54, 0x00, 0x80, 0xff, 0x44, 0x40, 0x00, 0x10, 0x44, 0x3f, 0xe0, 0x00, 0x44, 0x2f, 0xff, 0xed, -0x3e, 0x07, 0xe5, 0x8f, 0x12, 0x33, 0x00, 0x01, 0x10, 0x23, 0x00, 0x04, 0x10, 0x03, 0x00, 0x05, -0x10, 0x53, 0x00, 0x08, 0x44, 0x00, 0x00, 0x00, 0x12, 0x43, 0x00, 0x00, 0x58, 0x23, 0x80, 0x00, -0x44, 0x10, 0x00, 0x01, 0x58, 0x30, 0x00, 0x00, 0x49, 0xf7, 0xe7, 0x1c, 0x44, 0x00, 0x00, 0x00, -0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa8, 0xbc, -0x50, 0x20, 0x80, 0x0c, 0x58, 0xa0, 0x00, 0x00, 0x40, 0x01, 0x00, 0x13, 0x58, 0x70, 0x80, 0x00, -0x49, 0xf7, 0xe3, 0x04, 0x44, 0x50, 0x0f, 0xff, 0x58, 0x80, 0x00, 0x00, 0x4c, 0x02, 0xc0, 0x06, -0x44, 0x00, 0x01, 0x03, 0x48, 0x00, 0x00, 0x48, 0x49, 0xf7, 0xe2, 0xca, 0x58, 0x60, 0x00, 0x00, -0x54, 0x03, 0x80, 0x03, 0x4e, 0x02, 0x00, 0x08, 0x40, 0x73, 0x88, 0x09, 0x40, 0x73, 0x88, 0x08, -0x50, 0x73, 0x80, 0x04, 0x50, 0x93, 0x80, 0x0c, 0x44, 0x10, 0x00, 0x00, 0x58, 0x24, 0x80, 0x00, -0x58, 0x03, 0x00, 0x00, 0x49, 0xf7, 0xdd, 0x2a, 0x58, 0x23, 0x80, 0x00, 0x58, 0x15, 0x00, 0x00, -0x3e, 0x7f, 0xe5, 0x8e, 0x50, 0x03, 0x00, 0x0c, 0x49, 0xf7, 0xdd, 0x0c, 0x00, 0x23, 0x80, 0x00, -0x44, 0x30, 0x00, 0x13, 0x44, 0x0f, 0xe0, 0x00, 0x44, 0x1f, 0xff, 0xed, 0x10, 0x33, 0x00, 0x08, -0x12, 0x03, 0x00, 0x01, 0x10, 0x13, 0x00, 0x04, 0x10, 0x23, 0x00, 0x05, 0x44, 0x00, 0x00, 0x00, -0x12, 0x93, 0x00, 0x00, 0x58, 0x24, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, 0x58, 0x30, 0x00, 0x00, -0x49, 0xf7, 0xe6, 0xc0, 0x00, 0x53, 0x80, 0x00, 0x44, 0x00, 0x00, 0x00, 0x50, 0x42, 0x80, 0x01, -0x10, 0x43, 0x80, 0x00, 0x3a, 0x6f, 0xa8, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa8, 0xbc, -0x04, 0x80, 0x00, 0x02, 0x44, 0x00, 0x00, 0x14, 0x58, 0x90, 0x80, 0x00, 0x00, 0xa4, 0x00, 0x07, -0x49, 0xf7, 0xe2, 0xa4, 0x44, 0x50, 0x0f, 0xff, 0x58, 0x70, 0x00, 0x00, 0x4c, 0x02, 0xc0, 0x06, -0x44, 0x00, 0x01, 0x03, 0x48, 0x00, 0x00, 0x32, 0x49, 0xf7, 0xe2, 0x6a, 0x44, 0x10, 0x00, 0x00, -0x44, 0x20, 0x00, 0x14, 0x58, 0x60, 0x00, 0x00, 0x49, 0xf7, 0xdc, 0xd8, 0x44, 0x40, 0x00, 0x14, -0x44, 0x3f, 0xe0, 0x00, 0x44, 0x2f, 0xff, 0xed, 0x44, 0x00, 0x00, 0x00, 0x10, 0x23, 0x00, 0x04, -0x12, 0x43, 0x00, 0x00, 0x12, 0x33, 0x00, 0x01, 0x10, 0xa3, 0x00, 0x05, 0x10, 0x03, 0x00, 0x08, -0x50, 0x63, 0x00, 0x0c, 0x00, 0x84, 0x00, 0x09, 0x44, 0x00, 0x00, 0x00, 0x10, 0x83, 0x00, 0x00, -0x14, 0x93, 0x00, 0x01, 0x58, 0x23, 0x80, 0x00, 0x44, 0x10, 0x00, 0x01, 0x58, 0x30, 0x00, 0x00, -0x49, 0xf7, 0xe6, 0x70, 0x44, 0x00, 0x00, 0x00, 0x3a, 0x6f, 0xa8, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0x98, 0xbc, 0x04, 0x20, 0x00, 0x02, 0x50, 0x61, 0x00, 0x20, 0x04, 0x33, 0x00, 0x00, -0x04, 0x43, 0x00, 0x01, 0x04, 0x53, 0x00, 0x02, 0x04, 0x61, 0x80, 0x00, 0x41, 0xe2, 0x10, 0x05, -0x40, 0x13, 0x78, 0x02, 0x41, 0xe2, 0x14, 0x02, 0x40, 0x40, 0xf8, 0x04, 0x14, 0x41, 0x80, 0x00, -0x00, 0x11, 0x00, 0x0b, 0x54, 0x10, 0x80, 0x01, 0x4e, 0x13, 0x00, 0x06, 0x58, 0x00, 0x80, 0x00, -0x48, 0x00, 0x00, 0x06, 0x44, 0x10, 0x00, 0x00, 0x49, 0xff, 0xff, 0x92, 0x3a, 0x6f, 0x98, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x04, 0x70, 0x00, 0x02, -0x58, 0x60, 0x00, 0x00, 0x50, 0x23, 0x80, 0x20, 0x00, 0x01, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x06, -0x00, 0x11, 0x00, 0x01, 0x4e, 0x12, 0x00, 0x04, 0x00, 0x01, 0x00, 0x01, 0x00, 0x11, 0x00, 0x02, -0x3e, 0x3f, 0xe4, 0x90, 0x41, 0xe0, 0x08, 0x08, 0x40, 0x4f, 0x0c, 0x00, 0x10, 0x12, 0x00, 0x00, -0x02, 0x51, 0x00, 0x02, 0x44, 0x20, 0x00, 0x01, 0x12, 0x52, 0x00, 0x01, 0x4c, 0x11, 0x40, 0x04, -0x48, 0x00, 0x00, 0x04, 0x44, 0x10, 0x00, 0x00, 0x49, 0xff, 0xea, 0xc8, 0x00, 0x13, 0x80, 0x0b, -0x54, 0x00, 0x80, 0x01, 0x4e, 0x02, 0x00, 0x08, 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, -0x49, 0xff, 0xff, 0x56, 0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x04, 0x80, 0x00, 0x02, -0x3e, 0x3f, 0xe6, 0xec, 0x50, 0x54, 0x00, 0x20, 0x00, 0x42, 0x80, 0x00, 0x58, 0x70, 0x00, 0x00, -0x10, 0x41, 0x80, 0x2c, 0x00, 0x12, 0x80, 0x04, 0x10, 0x11, 0x80, 0x5c, 0x00, 0x02, 0x80, 0x08, -0x10, 0x01, 0x80, 0x8c, 0x01, 0xe2, 0x80, 0x0c, 0x11, 0xe1, 0x80, 0xbc, 0x00, 0x92, 0x80, 0x04, -0x00, 0x62, 0x80, 0x00, 0x00, 0x22, 0x80, 0x08, 0x00, 0x12, 0x80, 0x0c, 0x40, 0x44, 0x98, 0x00, -0x40, 0x32, 0x08, 0x00, 0x40, 0x01, 0x84, 0x00, 0x3e, 0x1e, 0xa6, 0x78, 0x4e, 0x03, 0x00, 0x06, -0x46, 0x00, 0x02, 0x10, 0x48, 0x00, 0x00, 0x06, 0x46, 0x00, 0x02, 0x10, 0x58, 0x00, 0x00, 0x04, -0x4b, 0xe0, 0x04, 0x01, 0x3e, 0x6f, 0xe6, 0xec, 0x00, 0x23, 0x00, 0x2c, 0x4e, 0x23, 0x00, 0x06, -0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xf4, 0xe8, 0x50, 0x63, 0x00, 0x30, 0x3e, 0x5f, 0xe7, 0xac, -0x4c, 0x62, 0xff, 0xf4, 0x00, 0x34, 0x00, 0x0b, 0x55, 0xe1, 0x80, 0x01, 0x4f, 0xe2, 0x00, 0x08, -0x58, 0x03, 0x80, 0x00, 0x44, 0x10, 0x00, 0x00, 0x49, 0xff, 0xfe, 0xfa, 0x44, 0x00, 0x00, 0x00, -0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, -0x51, 0xff, 0xff, 0xfc, 0x04, 0x30, 0x00, 0x02, 0x44, 0x40, 0x00, 0x01, 0x50, 0x11, 0x80, 0x20, -0x00, 0x50, 0x80, 0x00, 0x4c, 0x52, 0x00, 0x06, 0x44, 0x11, 0x00, 0x03, 0x48, 0x00, 0x00, 0x16, -0x00, 0x10, 0x80, 0x01, 0x3e, 0x2f, 0xe2, 0x1c, 0x4e, 0x12, 0x00, 0x0a, 0x01, 0xe1, 0x00, 0x45, -0x44, 0x10, 0x00, 0x00, 0x42, 0x4f, 0x18, 0x09, 0x48, 0x00, 0x00, 0x06, 0x00, 0x41, 0x00, 0x45, -0x58, 0x42, 0x00, 0x40, 0x10, 0x41, 0x00, 0x45, 0x00, 0x21, 0x80, 0x0b, 0x54, 0x31, 0x00, 0x01, -0x4e, 0x32, 0x00, 0x06, 0x49, 0xff, 0xfe, 0xc4, 0x58, 0x10, 0x00, 0x00, 0x58, 0x00, 0x80, 0x00, -0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa4, 0xbc, -0x51, 0xff, 0xff, 0xfc, 0x04, 0x90, 0x00, 0x02, 0x58, 0x80, 0x00, 0x00, 0x50, 0x74, 0x80, 0x20, -0x49, 0x00, 0x4e, 0x38, 0x00, 0x13, 0x80, 0x00, 0x3e, 0x6e, 0xad, 0x78, 0x44, 0x00, 0x00, 0x00, -0x4b, 0xe0, 0x18, 0x01, 0x00, 0x13, 0x80, 0x01, 0x44, 0x00, 0x00, 0x01, 0x4b, 0xe0, 0x18, 0x01, -0x00, 0x13, 0x80, 0x02, 0x44, 0x00, 0x00, 0x02, 0x4b, 0xe0, 0x18, 0x01, 0x02, 0x13, 0x80, 0x02, -0x44, 0x00, 0x00, 0x03, 0x4b, 0xe0, 0x18, 0x01, 0x49, 0x00, 0x4d, 0xd0, 0x00, 0x04, 0x80, 0x0b, -0x54, 0x00, 0x00, 0x01, 0x4e, 0x02, 0x00, 0x08, 0x58, 0x04, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, -0x49, 0xff, 0xfe, 0x86, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x04, 0x70, 0x00, 0x02, 0x58, 0x90, 0x00, 0x00, -0x50, 0xa3, 0x80, 0x20, 0x00, 0x55, 0x00, 0x00, 0x02, 0x33, 0x80, 0x00, 0x40, 0x42, 0x94, 0x00, -0x50, 0x22, 0x00, 0x01, 0x50, 0x11, 0xff, 0xe0, 0x40, 0x01, 0x08, 0x08, 0x4c, 0x10, 0x00, 0x08, -0x46, 0x1c, 0x00, 0x10, 0x58, 0x10, 0x80, 0x14, 0x48, 0x00, 0x00, 0x4a, 0x50, 0x63, 0x80, 0x24, -0x49, 0x00, 0x4d, 0xe8, 0x44, 0x80, 0x00, 0x00, 0x3f, 0xce, 0xad, 0x04, 0x48, 0x00, 0x00, 0x36, -0x00, 0x03, 0x00, 0x01, 0x50, 0x84, 0x00, 0x01, 0x55, 0xe0, 0x00, 0x01, 0x4f, 0xe2, 0x00, 0x08, -0x00, 0x13, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x49, 0xff, 0xd7, 0x76, 0x00, 0x23, 0x00, 0x01, -0x54, 0x11, 0x00, 0x02, 0x4e, 0x12, 0x00, 0x08, 0x00, 0x13, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, -0x49, 0xff, 0xd7, 0xb2, 0x00, 0x43, 0x00, 0x01, 0x54, 0x32, 0x00, 0x04, 0x4e, 0x32, 0x00, 0x08, -0x02, 0x13, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x49, 0xff, 0xd8, 0x1e, 0x01, 0xe3, 0x00, 0x01, -0x54, 0x5f, 0x00, 0x08, 0x4e, 0x52, 0x00, 0x08, 0x00, 0x03, 0x00, 0x00, 0x02, 0x13, 0x00, 0x03, -0x4b, 0xe0, 0x70, 0x01, 0x50, 0x63, 0x00, 0x08, 0x00, 0x05, 0x00, 0x00, 0x40, 0xf4, 0x00, 0x06, -0x4e, 0xf3, 0xff, 0xc8, 0x49, 0x00, 0x4d, 0x5a, 0x44, 0x10, 0x00, 0x00, 0x00, 0x33, 0x80, 0x0b, -0x54, 0x21, 0x80, 0x01, 0x4e, 0x22, 0x00, 0x08, 0x58, 0x04, 0x80, 0x00, 0x49, 0xff, 0xfe, 0x10, -0x58, 0x10, 0x00, 0x00, 0x58, 0x00, 0x80, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x04, 0x20, 0x00, 0x02, -0x00, 0x11, 0x00, 0x20, 0x5c, 0xf0, 0x80, 0x03, 0x4e, 0xf3, 0x00, 0x06, 0x44, 0x11, 0x00, 0x03, -0x48, 0x00, 0x00, 0x06, 0x3e, 0x17, 0xe1, 0xc0, 0x44, 0x10, 0x00, 0x00, 0x00, 0x41, 0x00, 0x0b, -0x54, 0x22, 0x00, 0x01, 0x4e, 0x22, 0x00, 0x06, 0x49, 0xff, 0xfd, 0xea, 0x58, 0x10, 0x00, 0x00, -0x58, 0x00, 0x80, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0x74, 0x50, 0x2f, 0x80, 0x68, 0x10, 0x11, 0x00, 0x07, -0x10, 0x01, 0x00, 0x09, 0x44, 0x10, 0x00, 0x00, 0x58, 0x0f, 0x80, 0x00, 0x14, 0x2f, 0x80, 0x02, -0x49, 0xff, 0xfd, 0xce, 0x51, 0xff, 0x80, 0x8c, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x48, 0x00, 0x00, 0x32, 0x49, 0xf7, 0xe2, 0x24, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x14, +0x58, 0x60, 0x00, 0x00, 0x49, 0xf7, 0xdc, 0x92, 0x44, 0x40, 0x00, 0x14, 0x44, 0x3f, 0xe0, 0x00, +0x44, 0x2f, 0xff, 0xed, 0x44, 0x00, 0x00, 0x00, 0x10, 0x23, 0x00, 0x04, 0x12, 0x43, 0x00, 0x00, +0x12, 0x33, 0x00, 0x01, 0x10, 0xa3, 0x00, 0x05, 0x10, 0x03, 0x00, 0x08, 0x50, 0x63, 0x00, 0x0c, +0x00, 0x84, 0x00, 0x09, 0x44, 0x00, 0x00, 0x00, 0x10, 0x83, 0x00, 0x00, 0x14, 0x93, 0x00, 0x01, +0x58, 0x23, 0x80, 0x00, 0x44, 0x10, 0x00, 0x01, 0x58, 0x30, 0x00, 0x00, 0x49, 0xf7, 0xe6, 0x2a, +0x44, 0x00, 0x00, 0x00, 0x3a, 0x6f, 0xa8, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, +0x04, 0x20, 0x00, 0x02, 0x50, 0x61, 0x00, 0x20, 0x04, 0x33, 0x00, 0x00, 0x04, 0x43, 0x00, 0x01, +0x04, 0x53, 0x00, 0x02, 0x04, 0x61, 0x80, 0x00, 0x41, 0xe2, 0x10, 0x05, 0x40, 0x13, 0x78, 0x02, +0x41, 0xe2, 0x14, 0x02, 0x40, 0x40, 0xf8, 0x04, 0x14, 0x41, 0x80, 0x00, 0x00, 0x11, 0x00, 0x0b, +0x54, 0x10, 0x80, 0x01, 0x4e, 0x13, 0x00, 0x06, 0x58, 0x00, 0x80, 0x00, 0x48, 0x00, 0x00, 0x06, +0x44, 0x10, 0x00, 0x00, 0x49, 0xff, 0xff, 0x92, 0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x04, 0x70, 0x00, 0x02, 0x58, 0x60, 0x00, 0x00, -0x50, 0x23, 0x80, 0x20, 0x00, 0x31, 0x00, 0x00, 0x3e, 0x1f, 0xe2, 0x94, 0x4e, 0x32, 0x00, 0x2c, -0x44, 0x00, 0x00, 0x01, 0x44, 0x40, 0x00, 0x00, 0x10, 0x00, 0x80, 0x26, 0x10, 0x40, 0x80, 0x25, -0x2f, 0xef, 0xe4, 0x7a, 0x20, 0x31, 0x00, 0x01, 0x40, 0x51, 0xf8, 0x01, 0x50, 0x42, 0x00, 0x1e, -0x2f, 0xef, 0xe4, 0x7b, 0x42, 0x32, 0x90, 0x24, 0x50, 0x4f, 0x00, 0x38, 0x41, 0xe1, 0x90, 0x16, -0x2e, 0x57, 0xe4, 0x79, 0x2e, 0x4f, 0xf9, 0xca, 0x40, 0x3f, 0x14, 0x00, 0x40, 0x31, 0x80, 0x10, -0x10, 0x30, 0x80, 0x28, 0x40, 0xf1, 0x90, 0x07, 0x4e, 0xf2, 0x00, 0x0a, 0x3e, 0x37, 0xf9, 0xca, -0x48, 0x00, 0x00, 0x06, 0x10, 0x30, 0x80, 0x25, 0x10, 0x30, 0x80, 0x26, 0x00, 0x31, 0x00, 0x02, -0x4e, 0x32, 0x00, 0x2c, 0x44, 0x30, 0x00, 0x00, 0x44, 0x50, 0x00, 0x01, 0x10, 0x30, 0x80, 0x32, -0x10, 0x50, 0x80, 0x31, 0x2e, 0x0f, 0xe4, 0x7a, 0x20, 0x21, 0x00, 0x03, 0x2f, 0xef, 0xe4, 0x7b, -0x40, 0x51, 0x00, 0x01, 0x50, 0x31, 0x80, 0x1e, 0x42, 0x22, 0x8c, 0x24, 0x50, 0x0f, 0x00, 0x38, -0x41, 0xe1, 0x00, 0x16, 0x2e, 0x57, 0xe4, 0x79, 0x2e, 0x3f, 0xf9, 0xc9, 0x40, 0x2f, 0x14, 0x00, -0x40, 0x21, 0x00, 0x10, 0x10, 0x20, 0x80, 0x33, 0x40, 0xf1, 0x88, 0x07, 0x4e, 0xf2, 0x00, 0x0a, -0x3e, 0x27, 0xf9, 0xc9, 0x48, 0x00, 0x00, 0x06, 0x10, 0x30, 0x80, 0x31, 0x10, 0x30, 0x80, 0x32, -0x2e, 0x37, 0xf9, 0xc9, 0x2e, 0x27, 0xf9, 0xca, 0x44, 0x10, 0x00, 0x7f, 0x44, 0x40, 0x00, 0x1e, -0x44, 0x00, 0x00, 0x02, 0x49, 0xff, 0xe6, 0xe2, 0x46, 0x48, 0x00, 0x22, 0x04, 0x52, 0x00, 0x07, -0x46, 0x30, 0x11, 0x10, 0x40, 0x22, 0x8c, 0x04, 0x14, 0x22, 0x00, 0x07, 0x44, 0x00, 0x00, 0x01, -0x49, 0xf7, 0xd1, 0x6c, 0x44, 0x00, 0x00, 0x01, 0x49, 0xf7, 0xd1, 0x40, 0x00, 0x13, 0x80, 0x0b, -0x54, 0x00, 0x80, 0x01, 0x4e, 0x02, 0x00, 0x08, 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, -0x49, 0xff, 0xfd, 0x2e, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0x44, 0x3e, 0x1f, 0xce, 0x14, 0x58, 0x70, 0x00, 0x00, -0x44, 0x20, 0x00, 0xb6, 0x58, 0x0f, 0x80, 0x00, 0x49, 0xf7, 0xd9, 0xfc, 0x2e, 0x17, 0xe5, 0x90, -0x58, 0x6f, 0x80, 0x00, 0x04, 0x83, 0x80, 0x02, 0x4e, 0x12, 0x00, 0x04, 0x48, 0x00, 0x00, 0xa8, -0x50, 0x24, 0x00, 0x20, 0x00, 0x31, 0x00, 0x00, 0x4e, 0x32, 0x00, 0x06, 0x58, 0x0f, 0x80, 0x00, -0x48, 0x00, 0x00, 0xb0, 0x44, 0x60, 0x6f, 0x4c, 0x3e, 0x1f, 0xe2, 0x1c, 0x44, 0x20, 0x00, 0x03, -0x44, 0x00, 0x00, 0x35, 0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xe2, 0x1f, 0x44, 0x20, 0x00, 0x01, -0x44, 0x00, 0x00, 0x48, 0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xe2, 0x20, 0x44, 0x20, 0x00, 0x01, -0x44, 0x00, 0x00, 0x50, 0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xe2, 0x21, 0x44, 0x20, 0x00, 0x0f, -0x44, 0x00, 0x00, 0x53, 0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xe2, 0x30, 0x44, 0x20, 0x00, 0x0e, -0x44, 0x00, 0x00, 0xa0, 0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xe2, 0x3e, 0x44, 0x20, 0x00, 0x10, -0x44, 0x00, 0x00, 0xc0, 0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xe2, 0x4e, 0x44, 0x20, 0x00, 0x07, -0x44, 0x00, 0x00, 0xd0, 0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xe2, 0x55, 0x44, 0x20, 0x00, 0x04, -0x44, 0x00, 0x00, 0xf4, 0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xe2, 0x59, 0x44, 0x20, 0x00, 0x02, -0x44, 0x00, 0x00, 0x24, 0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xe2, 0x5b, 0x44, 0x20, 0x00, 0x01, -0x44, 0x00, 0x00, 0x34, 0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xe2, 0x5c, 0x44, 0x20, 0x00, 0x01, -0x44, 0x00, 0x00, 0x39, 0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xe2, 0x5d, 0x44, 0x20, 0x00, 0x01, -0x44, 0x00, 0x00, 0x3b, 0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xe2, 0x5e, 0x44, 0x20, 0x00, 0x02, -0x44, 0x00, 0x00, 0x42, 0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xe2, 0x60, 0x44, 0x20, 0x00, 0x02, -0x44, 0x00, 0x00, 0x9e, 0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xe2, 0x62, 0x44, 0x20, 0x00, 0x01, -0x44, 0x00, 0x00, 0xf2, 0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xe2, 0x63, 0x44, 0x20, 0x00, 0x03, -0x44, 0x00, 0x00, 0xf8, 0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xe2, 0x66, 0x44, 0x20, 0x00, 0x01, -0x44, 0x00, 0x01, 0x2e, 0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xe2, 0x67, 0x44, 0x20, 0x00, 0x10, -0x44, 0x00, 0x01, 0x30, 0x4b, 0xe0, 0x18, 0x01, 0x48, 0x00, 0x00, 0x42, 0x38, 0x90, 0x05, 0x01, -0x02, 0x41, 0x80, 0x02, 0x54, 0x13, 0x00, 0xff, 0x4c, 0x92, 0x00, 0x10, 0x00, 0x24, 0x00, 0x0b, -0x54, 0x11, 0x00, 0x01, 0x4e, 0x12, 0x00, 0x7a, 0x58, 0x03, 0x80, 0x00, 0x44, 0x11, 0x00, 0x03, -0x49, 0xff, 0xfc, 0x5e, 0x48, 0x00, 0x00, 0x72, 0x00, 0x61, 0x80, 0x06, 0x10, 0x62, 0x80, 0x00, -0x01, 0xe1, 0x00, 0x01, 0x40, 0x50, 0x88, 0x08, 0x3e, 0x9f, 0xe2, 0x1c, 0x40, 0x31, 0x14, 0x00, -0x50, 0x60, 0x80, 0x01, 0x40, 0x50, 0xa4, 0x00, 0x40, 0xf0, 0xf8, 0x06, 0x4e, 0xf3, 0xff, 0xd8, -0x58, 0x04, 0x80, 0x00, 0x00, 0x94, 0x80, 0x44, 0x44, 0x30, 0x00, 0xff, 0x4c, 0x91, 0xc0, 0x06, -0x44, 0x40, 0x00, 0x00, 0x10, 0x40, 0x00, 0x44, 0x2e, 0x17, 0xe2, 0x61, 0x58, 0x21, 0x80, 0x00, -0x4c, 0x11, 0x40, 0x06, 0x45, 0xe0, 0x00, 0x00, 0x3f, 0xe7, 0xe2, 0x61, 0x3e, 0x3f, 0xe2, 0x1c, -0x00, 0x91, 0x80, 0x31, 0x00, 0x01, 0x80, 0x2f, 0x50, 0x11, 0x80, 0x28, 0x40, 0x54, 0x80, 0x01, -0x54, 0x22, 0x80, 0xff, 0x00, 0x00, 0x80, 0x00, 0x44, 0x50, 0x00, 0x7f, 0x4c, 0x02, 0x80, 0x08, -0x40, 0x31, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x04, 0x10, 0x30, 0x80, 0x00, 0x50, 0x10, 0x80, 0x01, -0x3e, 0x5f, 0xe2, 0x4c, 0x4c, 0x12, 0xff, 0xf0, 0x50, 0x10, 0x80, 0x02, 0x00, 0x00, 0x80, 0x00, -0x44, 0x50, 0x00, 0x7f, 0x4c, 0x02, 0x80, 0x08, 0x40, 0x31, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x04, -0x10, 0x30, 0x80, 0x00, 0x50, 0x10, 0x80, 0x01, 0x3e, 0x5f, 0xe2, 0x55, 0x4c, 0x12, 0xff, 0xf0, -0x49, 0x00, 0x0f, 0x6a, 0x44, 0x00, 0x00, 0x01, 0x3e, 0x07, 0xe5, 0x90, 0x00, 0x14, 0x00, 0x0b, -0x54, 0x00, 0x80, 0x01, 0x4e, 0x02, 0x00, 0x0c, 0x58, 0x03, 0x80, 0x00, 0x44, 0x10, 0x00, 0x00, -0x49, 0xff, 0xfb, 0xee, 0x48, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x03, 0x51, 0xff, 0x80, 0xbc, -0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xb4, -0x3e, 0x7f, 0xce, 0xcc, 0x54, 0x10, 0x00, 0xff, 0x14, 0x1f, 0x80, 0x05, 0x3a, 0x03, 0x8c, 0x04, -0x50, 0x5f, 0x80, 0x2c, 0x3e, 0x6f, 0xe2, 0x1c, 0x3a, 0x02, 0x8c, 0x24, 0x3a, 0x03, 0x88, 0x00, -0x2e, 0x47, 0xe6, 0x1e, 0x3a, 0x02, 0x88, 0x20, 0x00, 0x03, 0x00, 0x0a, 0x14, 0x0f, 0x80, 0x07, -0x4e, 0x43, 0x00, 0x06, 0x58, 0x12, 0x00, 0x00, 0x48, 0x00, 0x00, 0x3e, 0x49, 0x00, 0x12, 0x82, -0x50, 0x23, 0x00, 0x28, 0x44, 0x10, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x50, 0x30, 0x80, 0x01, -0x50, 0x21, 0x00, 0x01, 0x40, 0xf0, 0x18, 0x06, 0x4e, 0xf3, 0x00, 0x0a, 0x54, 0x11, 0x80, 0xff, -0x44, 0x50, 0x00, 0x08, 0x4c, 0x12, 0xff, 0xf2, 0x48, 0x00, 0x00, 0x08, 0x2e, 0x27, 0xe2, 0x4c, -0x50, 0x10, 0xff, 0xf9, 0x48, 0x00, 0x00, 0x18, 0x3e, 0x2f, 0xe2, 0x4e, 0x44, 0x10, 0x00, 0x00, -0x00, 0x91, 0x00, 0x00, 0x50, 0x30, 0x80, 0x01, 0x50, 0x21, 0x00, 0x01, 0x40, 0xf0, 0x24, 0x06, -0x4e, 0xf3, 0x00, 0x08, 0x54, 0x11, 0x80, 0xff, 0x44, 0x50, 0x00, 0x07, 0x4c, 0x12, 0xff, 0xf2, -0x2e, 0x27, 0xe2, 0x4c, 0x55, 0xe1, 0x00, 0x01, 0x4f, 0xe2, 0x00, 0x04, 0x40, 0x10, 0x84, 0x00, -0x40, 0x10, 0x80, 0x10, 0x2e, 0x27, 0xe2, 0x20, 0x44, 0x50, 0x00, 0x02, 0x40, 0x31, 0x18, 0x09, -0x4c, 0x32, 0xc0, 0x0e, 0x54, 0x51, 0x00, 0x3f, 0x52, 0x72, 0x80, 0x00, 0x40, 0x43, 0x80, 0x10, -0x14, 0x4f, 0x80, 0x04, 0x45, 0xc0, 0x00, 0x01, 0x48, 0x00, 0x00, 0x12, 0x44, 0x50, 0x00, 0x03, -0x4c, 0x32, 0x80, 0x08, 0x45, 0xc0, 0x00, 0x00, 0x15, 0xcf, 0x80, 0x04, 0x48, 0x00, 0x00, 0x08, -0x54, 0x81, 0x00, 0x3f, 0x14, 0x8f, 0x80, 0x04, 0x45, 0xc0, 0x00, 0x00, 0x05, 0xef, 0x80, 0x07, -0x54, 0x00, 0x80, 0xff, 0x42, 0xaf, 0x18, 0x0b, 0x3e, 0x9f, 0xe2, 0x30, 0x3e, 0x2f, 0xe2, 0x78, -0x50, 0x1f, 0x80, 0x2c, 0x14, 0x0f, 0x80, 0x08, 0x14, 0xaf, 0x80, 0x09, 0x14, 0x9f, 0x80, 0x03, -0x14, 0x2f, 0x80, 0x02, 0x14, 0x1f, 0x80, 0x01, 0x15, 0xcf, 0x80, 0x06, 0x04, 0x3f, 0x80, 0x03, -0x45, 0xc0, 0x00, 0x02, 0x00, 0x01, 0x80, 0x00, 0x40, 0x10, 0x18, 0x09, 0x4c, 0x1e, 0x40, 0x0c, -0x54, 0x70, 0x00, 0x3f, 0x52, 0x43, 0x80, 0x00, 0x40, 0x02, 0x00, 0x10, 0x44, 0x20, 0x00, 0x01, -0x48, 0x00, 0x00, 0x10, 0x44, 0x50, 0x00, 0x03, 0x4c, 0x12, 0x80, 0x08, 0x44, 0x20, 0x00, 0x00, -0x58, 0x01, 0x00, 0x00, 0x48, 0x00, 0x00, 0x06, 0x54, 0x00, 0x00, 0x3f, 0x44, 0x20, 0x00, 0x00, -0x04, 0x1f, 0x80, 0x07, 0x04, 0x6f, 0x80, 0x09, 0x40, 0x80, 0x80, 0x00, 0x54, 0x74, 0x00, 0xff, -0x42, 0x13, 0x98, 0x0b, 0x4c, 0x60, 0x80, 0x10, 0x4c, 0x11, 0x00, 0x0e, 0x44, 0x90, 0x00, 0x01, -0x4c, 0x24, 0xc0, 0x06, 0x40, 0x74, 0x98, 0x08, 0x48, 0x00, 0x00, 0x06, 0x44, 0xa0, 0x00, 0x3f, -0x40, 0x75, 0x08, 0x1a, 0x05, 0xef, 0x80, 0x01, 0x04, 0x2f, 0x80, 0x02, 0x55, 0xc3, 0x80, 0x40, -0x00, 0x8f, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x01, 0x00, 0x51, 0x00, 0x00, 0x4f, 0xc3, 0x00, 0x20, -0x40, 0xf3, 0x94, 0x06, 0x4e, 0xf2, 0x00, 0x0e, 0x44, 0x30, 0x00, 0x07, 0x58, 0x05, 0x00, 0x00, -0x42, 0x04, 0x0c, 0x73, 0x3e, 0x4f, 0xf8, 0xec, 0x40, 0x30, 0x10, 0x00, 0x48, 0x00, 0x00, 0x1a, -0x58, 0x15, 0x00, 0x00, 0x44, 0x20, 0x00, 0x07, 0x42, 0x14, 0x08, 0x73, 0x3e, 0x9f, 0xf8, 0xec, -0x40, 0x60, 0xa4, 0x00, 0x10, 0x53, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0e, 0x58, 0x55, 0x00, 0x00, -0x44, 0x00, 0x00, 0x07, 0x42, 0x54, 0x00, 0x73, 0x3f, 0xef, 0xf8, 0xec, 0x40, 0x32, 0xf8, 0x00, -0x10, 0x71, 0x80, 0x00, 0x44, 0x40, 0x00, 0x07, 0x59, 0xe5, 0x00, 0x00, 0x2e, 0x27, 0xe5, 0x8d, -0x43, 0xe4, 0x10, 0x73, 0x3e, 0x0f, 0xf8, 0xec, 0x04, 0x1f, 0x80, 0x08, 0x40, 0x61, 0x08, 0x00, -0x40, 0x5f, 0x00, 0x00, 0x00, 0x22, 0x80, 0x00, 0x40, 0x90, 0x98, 0x01, 0x54, 0x64, 0x80, 0xff, -0x40, 0x33, 0x08, 0x00, 0x54, 0x91, 0x80, 0xff, 0x42, 0x41, 0x18, 0x0b, 0x42, 0x54, 0x98, 0x0b, -0x4c, 0x42, 0x80, 0x12, 0x40, 0x63, 0x1c, 0x09, 0x4c, 0x53, 0x00, 0x0e, 0x44, 0x10, 0x00, 0x01, -0x4c, 0x60, 0xc0, 0x06, 0x40, 0x90, 0x98, 0x08, 0x48, 0x00, 0x00, 0x06, 0x44, 0x50, 0x00, 0x3f, -0x40, 0x92, 0x98, 0x1a, 0x44, 0x00, 0x00, 0x07, 0x58, 0x25, 0x00, 0x00, 0x42, 0x24, 0x00, 0x73, -0x3e, 0x4f, 0xf8, 0xec, 0x41, 0xe1, 0x10, 0x00, 0x10, 0x9f, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, -0x58, 0x3f, 0x00, 0x00, 0x58, 0x14, 0x00, 0x00, 0x58, 0x25, 0x00, 0x00, 0x44, 0x60, 0x00, 0x02, -0x49, 0xff, 0xd2, 0x4e, 0x4c, 0x83, 0x40, 0x7c, 0x04, 0x3f, 0x80, 0x04, 0x04, 0x5f, 0x80, 0x02, -0x40, 0x13, 0x8c, 0x00, 0x54, 0x30, 0x80, 0xff, 0x40, 0x7e, 0x18, 0x09, 0x42, 0x11, 0x98, 0x0b, -0x00, 0x22, 0x80, 0x07, 0x4c, 0x70, 0x80, 0x16, 0x04, 0x6f, 0x80, 0x06, 0x4c, 0x13, 0x00, 0x12, -0x45, 0xe0, 0x00, 0x01, 0x4c, 0x6f, 0x40, 0x06, 0x40, 0x3f, 0x18, 0x08, 0x48, 0x00, 0x00, 0x1e, -0x04, 0x6f, 0x80, 0x06, 0x4e, 0x63, 0x00, 0x06, 0x44, 0x30, 0x00, 0x3f, 0x48, 0x00, 0x00, 0x06, -0x54, 0x41, 0x80, 0x40, 0x4e, 0x43, 0x00, 0x12, 0x3e, 0x0f, 0xf8, 0xec, 0x40, 0x15, 0x00, 0x00, -0x40, 0xf1, 0x88, 0x06, 0x4e, 0xf2, 0x00, 0x06, 0x10, 0x30, 0x80, 0x15, 0x48, 0x00, 0x00, 0x0c, -0x10, 0x20, 0x80, 0x15, 0x48, 0x00, 0x00, 0x08, 0x3e, 0x7f, 0xf8, 0xec, 0x40, 0x25, 0x1c, 0x00, -0x10, 0x31, 0x00, 0x15, 0x2e, 0x37, 0xe5, 0x8d, 0x04, 0x1f, 0x80, 0x08, 0x3e, 0x2f, 0xf8, 0xec, -0x40, 0x45, 0x08, 0x00, 0x40, 0x01, 0x8c, 0x00, 0x01, 0xe2, 0x00, 0x15, 0x40, 0x50, 0x80, 0x01, -0x54, 0x12, 0x80, 0xff, 0x40, 0x60, 0xf8, 0x00, 0x54, 0x53, 0x00, 0xff, 0x42, 0x3f, 0x18, 0x0b, -0x42, 0x42, 0x98, 0x0b, 0x4c, 0x32, 0x00, 0x12, 0x40, 0x10, 0x9c, 0x09, 0x4c, 0x40, 0x80, 0x0e, -0x45, 0xe0, 0x00, 0x01, 0x4c, 0x1f, 0x40, 0x06, 0x40, 0x5f, 0x18, 0x08, 0x48, 0x00, 0x00, 0x06, -0x44, 0x70, 0x00, 0x3f, 0x40, 0x53, 0x84, 0x1a, 0x58, 0x01, 0x00, 0x00, 0x40, 0x65, 0x00, 0x00, -0x50, 0x15, 0x00, 0x15, 0x10, 0x53, 0x00, 0x15, 0x40, 0x30, 0x80, 0x00, 0x58, 0x25, 0x00, 0x00, -0x44, 0x00, 0x00, 0x00, 0x44, 0x10, 0x00, 0x03, 0x49, 0xff, 0xd1, 0xd2, 0x04, 0x0f, 0x80, 0x03, -0x04, 0x6f, 0x80, 0x02, 0x04, 0x2f, 0x80, 0x01, 0x50, 0x50, 0x00, 0x01, 0x51, 0xe3, 0x00, 0x01, -0x50, 0x31, 0x00, 0x02, 0x3e, 0x4f, 0xe2, 0x3e, 0x14, 0x5f, 0x80, 0x03, 0x15, 0xef, 0x80, 0x02, -0x14, 0x3f, 0x80, 0x01, 0x4c, 0x52, 0x7e, 0xb4, 0x04, 0x6f, 0x80, 0x05, 0x50, 0x53, 0x7f, 0xff, -0x54, 0x12, 0x80, 0xff, 0x5c, 0xf0, 0x80, 0x05, 0x4e, 0xf2, 0x00, 0x1c, 0x2e, 0x07, 0xe2, 0x27, -0x40, 0x40, 0x00, 0x10, 0x4e, 0x45, 0x00, 0x06, 0x44, 0x10, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0e, -0x42, 0x50, 0x18, 0x0b, 0x40, 0x12, 0x94, 0x00, 0x51, 0xe0, 0xff, 0xff, 0x54, 0x60, 0x00, 0x3f, -0x42, 0x2f, 0x18, 0x24, 0x40, 0x11, 0x00, 0x10, 0x2e, 0x07, 0xe2, 0x2d, 0x48, 0x00, 0x00, 0x4e, -0x04, 0x7f, 0x80, 0x05, 0x50, 0x33, 0xff, 0xfa, 0x54, 0x41, 0x80, 0xff, 0x5c, 0xf2, 0x00, 0x05, -0x4e, 0xf2, 0x00, 0x1c, 0x2e, 0x07, 0xe2, 0x28, 0x40, 0x20, 0x00, 0x10, 0x4e, 0x25, 0x00, 0x06, -0x44, 0x10, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0e, 0x42, 0x30, 0x18, 0x0b, 0x40, 0x41, 0x8c, 0x00, -0x50, 0x12, 0x7f, 0xff, 0x54, 0x50, 0x00, 0x3f, 0x42, 0x60, 0x94, 0x24, 0x40, 0x13, 0x00, 0x10, -0x2e, 0x07, 0xe2, 0x2e, 0x48, 0x00, 0x00, 0x2a, 0x04, 0x1f, 0x80, 0x05, 0x51, 0xe0, 0xff, 0xf5, -0x54, 0x2f, 0x00, 0xff, 0x5c, 0xf1, 0x00, 0x04, 0x4e, 0xf3, 0x00, 0x08, 0x46, 0x0c, 0x00, 0x00, -0x58, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x8c, 0x2e, 0x07, 0xe2, 0x29, 0x40, 0x60, 0x00, 0x10, -0x4e, 0x65, 0x00, 0x06, 0x44, 0x10, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0e, 0x43, 0xe0, 0x18, 0x0b, +0x50, 0x23, 0x80, 0x20, 0x00, 0x01, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x06, 0x00, 0x11, 0x00, 0x01, +0x4e, 0x12, 0x00, 0x04, 0x00, 0x01, 0x00, 0x01, 0x00, 0x11, 0x00, 0x02, 0x3e, 0x3f, 0xe2, 0x30, +0x41, 0xe0, 0x08, 0x08, 0x40, 0x4f, 0x0c, 0x00, 0x10, 0x12, 0x00, 0x00, 0x02, 0x51, 0x00, 0x02, +0x44, 0x20, 0x00, 0x01, 0x12, 0x52, 0x00, 0x01, 0x4c, 0x11, 0x40, 0x04, 0x48, 0x00, 0x00, 0x04, +0x44, 0x10, 0x00, 0x00, 0x49, 0xff, 0xea, 0x82, 0x00, 0x13, 0x80, 0x0b, 0x54, 0x00, 0x80, 0x01, +0x4e, 0x02, 0x00, 0x08, 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, 0x49, 0xff, 0xff, 0x56, +0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x04, 0x80, 0x00, 0x02, 0x3e, 0x3f, 0xe4, 0x8c, +0x50, 0x54, 0x00, 0x20, 0x00, 0x42, 0x80, 0x00, 0x58, 0x70, 0x00, 0x00, 0x10, 0x41, 0x80, 0x2c, +0x00, 0x12, 0x80, 0x04, 0x10, 0x11, 0x80, 0x5c, 0x00, 0x02, 0x80, 0x08, 0x10, 0x01, 0x80, 0x8c, +0x01, 0xe2, 0x80, 0x0c, 0x11, 0xe1, 0x80, 0xbc, 0x00, 0x92, 0x80, 0x04, 0x00, 0x62, 0x80, 0x00, +0x00, 0x22, 0x80, 0x08, 0x00, 0x12, 0x80, 0x0c, 0x40, 0x44, 0x98, 0x00, 0x40, 0x32, 0x08, 0x00, +0x40, 0x01, 0x84, 0x00, 0x3e, 0x1e, 0xa6, 0x78, 0x4e, 0x03, 0x00, 0x06, 0x46, 0x00, 0x02, 0x10, +0x48, 0x00, 0x00, 0x06, 0x46, 0x00, 0x02, 0x10, 0x58, 0x00, 0x00, 0x04, 0x4b, 0xe0, 0x04, 0x01, +0x3e, 0x6f, 0xe4, 0x8c, 0x00, 0x23, 0x00, 0x2c, 0x4e, 0x23, 0x00, 0x06, 0x58, 0x03, 0x00, 0x00, +0x49, 0xff, 0xf4, 0xa8, 0x50, 0x63, 0x00, 0x30, 0x3e, 0x5f, 0xe5, 0x4c, 0x4c, 0x62, 0xff, 0xf4, +0x00, 0x34, 0x00, 0x0b, 0x55, 0xe1, 0x80, 0x01, 0x4f, 0xe2, 0x00, 0x08, 0x58, 0x03, 0x80, 0x00, +0x44, 0x10, 0x00, 0x00, 0x49, 0xff, 0xfe, 0xfa, 0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, +0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, +0x04, 0x30, 0x00, 0x02, 0x44, 0x40, 0x00, 0x01, 0x50, 0x11, 0x80, 0x20, 0x00, 0x50, 0x80, 0x00, +0x4c, 0x52, 0x00, 0x06, 0x44, 0x11, 0x00, 0x03, 0x48, 0x00, 0x00, 0x16, 0x00, 0x10, 0x80, 0x01, +0x3e, 0x2f, 0xdf, 0xbc, 0x4e, 0x12, 0x00, 0x0a, 0x01, 0xe1, 0x00, 0x45, 0x44, 0x10, 0x00, 0x00, +0x42, 0x4f, 0x18, 0x09, 0x48, 0x00, 0x00, 0x06, 0x00, 0x41, 0x00, 0x45, 0x58, 0x42, 0x00, 0x40, +0x10, 0x41, 0x00, 0x45, 0x00, 0x21, 0x80, 0x0b, 0x54, 0x31, 0x00, 0x01, 0x4e, 0x32, 0x00, 0x06, +0x49, 0xff, 0xfe, 0xc4, 0x58, 0x10, 0x00, 0x00, 0x58, 0x00, 0x80, 0x00, 0x51, 0xff, 0x80, 0x04, +0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0xfc, +0x04, 0x90, 0x00, 0x02, 0x58, 0x80, 0x00, 0x00, 0x50, 0x74, 0x80, 0x20, 0x49, 0x00, 0x4d, 0xc8, +0x00, 0x13, 0x80, 0x00, 0x3e, 0x6e, 0xad, 0x78, 0x44, 0x00, 0x00, 0x00, 0x4b, 0xe0, 0x18, 0x01, +0x00, 0x13, 0x80, 0x01, 0x44, 0x00, 0x00, 0x01, 0x4b, 0xe0, 0x18, 0x01, 0x00, 0x13, 0x80, 0x02, +0x44, 0x00, 0x00, 0x02, 0x4b, 0xe0, 0x18, 0x01, 0x02, 0x13, 0x80, 0x02, 0x44, 0x00, 0x00, 0x03, +0x4b, 0xe0, 0x18, 0x01, 0x49, 0x00, 0x4d, 0x60, 0x00, 0x04, 0x80, 0x0b, 0x54, 0x00, 0x00, 0x01, +0x4e, 0x02, 0x00, 0x08, 0x58, 0x04, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, 0x49, 0xff, 0xfe, 0x86, +0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, +0x51, 0xff, 0xff, 0xfc, 0x04, 0x70, 0x00, 0x02, 0x58, 0x90, 0x00, 0x00, 0x50, 0xa3, 0x80, 0x20, +0x00, 0x55, 0x00, 0x00, 0x02, 0x33, 0x80, 0x00, 0x40, 0x42, 0x94, 0x00, 0x50, 0x22, 0x00, 0x01, +0x50, 0x11, 0xff, 0xe0, 0x40, 0x01, 0x08, 0x08, 0x4c, 0x10, 0x00, 0x08, 0x46, 0x1c, 0x00, 0x10, +0x58, 0x10, 0x80, 0x14, 0x48, 0x00, 0x00, 0x4a, 0x50, 0x63, 0x80, 0x24, 0x49, 0x00, 0x4d, 0x78, +0x44, 0x80, 0x00, 0x00, 0x3f, 0xce, 0xad, 0x04, 0x48, 0x00, 0x00, 0x36, 0x00, 0x03, 0x00, 0x01, +0x50, 0x84, 0x00, 0x01, 0x55, 0xe0, 0x00, 0x01, 0x4f, 0xe2, 0x00, 0x08, 0x00, 0x13, 0x00, 0x02, +0x00, 0x03, 0x00, 0x00, 0x49, 0xff, 0xd7, 0x30, 0x00, 0x23, 0x00, 0x01, 0x54, 0x11, 0x00, 0x02, +0x4e, 0x12, 0x00, 0x08, 0x00, 0x13, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x49, 0xff, 0xd7, 0x6c, +0x00, 0x43, 0x00, 0x01, 0x54, 0x32, 0x00, 0x04, 0x4e, 0x32, 0x00, 0x08, 0x02, 0x13, 0x00, 0x02, +0x00, 0x03, 0x00, 0x00, 0x49, 0xff, 0xd7, 0xd8, 0x01, 0xe3, 0x00, 0x01, 0x54, 0x5f, 0x00, 0x08, +0x4e, 0x52, 0x00, 0x08, 0x00, 0x03, 0x00, 0x00, 0x02, 0x13, 0x00, 0x03, 0x4b, 0xe0, 0x70, 0x01, +0x50, 0x63, 0x00, 0x08, 0x00, 0x05, 0x00, 0x00, 0x40, 0xf4, 0x00, 0x06, 0x4e, 0xf3, 0xff, 0xc8, +0x49, 0x00, 0x4c, 0xea, 0x44, 0x10, 0x00, 0x00, 0x00, 0x33, 0x80, 0x0b, 0x54, 0x21, 0x80, 0x01, +0x4e, 0x22, 0x00, 0x08, 0x58, 0x04, 0x80, 0x00, 0x49, 0xff, 0xfe, 0x10, 0x58, 0x10, 0x00, 0x00, +0x58, 0x00, 0x80, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x04, 0x20, 0x00, 0x02, 0x00, 0x11, 0x00, 0x20, +0x5c, 0xf0, 0x80, 0x03, 0x4e, 0xf3, 0x00, 0x06, 0x44, 0x11, 0x00, 0x03, 0x48, 0x00, 0x00, 0x06, +0x3e, 0x17, 0xdf, 0x60, 0x44, 0x10, 0x00, 0x00, 0x00, 0x41, 0x00, 0x0b, 0x54, 0x22, 0x00, 0x01, +0x4e, 0x22, 0x00, 0x06, 0x49, 0xff, 0xfd, 0xea, 0x58, 0x10, 0x00, 0x00, 0x58, 0x00, 0x80, 0x00, +0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, +0x51, 0xff, 0xff, 0x74, 0x50, 0x2f, 0x80, 0x68, 0x10, 0x11, 0x00, 0x07, 0x10, 0x01, 0x00, 0x09, +0x44, 0x10, 0x00, 0x00, 0x58, 0x0f, 0x80, 0x00, 0x14, 0x2f, 0x80, 0x02, 0x49, 0xff, 0xfd, 0xce, +0x51, 0xff, 0x80, 0x8c, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, +0x51, 0xff, 0xff, 0xfc, 0x04, 0x70, 0x00, 0x02, 0x58, 0x60, 0x00, 0x00, 0x50, 0x23, 0x80, 0x20, +0x00, 0x31, 0x00, 0x00, 0x3e, 0x1f, 0xe0, 0x34, 0x4e, 0x32, 0x00, 0x2c, 0x44, 0x00, 0x00, 0x01, +0x44, 0x40, 0x00, 0x00, 0x10, 0x00, 0x80, 0x26, 0x10, 0x40, 0x80, 0x25, 0x2f, 0xef, 0xe2, 0x1a, +0x20, 0x31, 0x00, 0x01, 0x40, 0x51, 0xf8, 0x01, 0x50, 0x42, 0x00, 0x1e, 0x2f, 0xef, 0xe2, 0x1b, +0x42, 0x32, 0x90, 0x24, 0x50, 0x4f, 0x00, 0x38, 0x41, 0xe1, 0x90, 0x16, 0x2e, 0x57, 0xe2, 0x19, +0x2e, 0x4f, 0xf7, 0x6a, 0x40, 0x3f, 0x14, 0x00, 0x40, 0x31, 0x80, 0x10, 0x10, 0x30, 0x80, 0x28, +0x40, 0xf1, 0x90, 0x07, 0x4e, 0xf2, 0x00, 0x0a, 0x3e, 0x37, 0xf7, 0x6a, 0x48, 0x00, 0x00, 0x06, +0x10, 0x30, 0x80, 0x25, 0x10, 0x30, 0x80, 0x26, 0x00, 0x31, 0x00, 0x02, 0x4e, 0x32, 0x00, 0x2c, +0x44, 0x30, 0x00, 0x00, 0x44, 0x50, 0x00, 0x01, 0x10, 0x30, 0x80, 0x32, 0x10, 0x50, 0x80, 0x31, +0x2e, 0x0f, 0xe2, 0x1a, 0x20, 0x21, 0x00, 0x03, 0x2f, 0xef, 0xe2, 0x1b, 0x40, 0x51, 0x00, 0x01, +0x50, 0x31, 0x80, 0x1e, 0x42, 0x22, 0x8c, 0x24, 0x50, 0x0f, 0x00, 0x38, 0x41, 0xe1, 0x00, 0x16, +0x2e, 0x57, 0xe2, 0x19, 0x2e, 0x3f, 0xf7, 0x69, 0x40, 0x2f, 0x14, 0x00, 0x40, 0x21, 0x00, 0x10, +0x10, 0x20, 0x80, 0x33, 0x40, 0xf1, 0x88, 0x07, 0x4e, 0xf2, 0x00, 0x0a, 0x3e, 0x27, 0xf7, 0x69, +0x48, 0x00, 0x00, 0x06, 0x10, 0x30, 0x80, 0x31, 0x10, 0x30, 0x80, 0x32, 0x2e, 0x37, 0xf7, 0x69, +0x2e, 0x27, 0xf7, 0x6a, 0x44, 0x10, 0x00, 0x7f, 0x44, 0x40, 0x00, 0x1e, 0x44, 0x00, 0x00, 0x02, +0x49, 0xff, 0xe6, 0x9c, 0x46, 0x48, 0x00, 0x22, 0x04, 0x52, 0x00, 0x07, 0x46, 0x30, 0x11, 0x10, +0x40, 0x22, 0x8c, 0x04, 0x14, 0x22, 0x00, 0x07, 0x44, 0x00, 0x00, 0x01, 0x49, 0xf7, 0xd1, 0x26, +0x44, 0x00, 0x00, 0x01, 0x49, 0xf7, 0xd0, 0xfa, 0x00, 0x13, 0x80, 0x0b, 0x54, 0x00, 0x80, 0x01, +0x4e, 0x02, 0x00, 0x08, 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, 0x49, 0xff, 0xfd, 0x2e, +0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa4, 0xbc, +0x51, 0xff, 0xff, 0x44, 0x3e, 0x1f, 0xcb, 0xc0, 0x58, 0x70, 0x00, 0x00, 0x44, 0x20, 0x00, 0xb6, +0x58, 0x0f, 0x80, 0x00, 0x49, 0xf7, 0xd9, 0xb6, 0x2e, 0x17, 0xe3, 0x30, 0x58, 0x6f, 0x80, 0x00, +0x04, 0x83, 0x80, 0x02, 0x4e, 0x12, 0x00, 0x04, 0x48, 0x00, 0x00, 0xa8, 0x50, 0x24, 0x00, 0x20, +0x00, 0x31, 0x00, 0x00, 0x4e, 0x32, 0x00, 0x06, 0x58, 0x0f, 0x80, 0x00, 0x48, 0x00, 0x00, 0xb0, +0x44, 0x60, 0x6f, 0x4c, 0x3e, 0x1f, 0xdf, 0xbc, 0x44, 0x20, 0x00, 0x03, 0x44, 0x00, 0x00, 0x35, +0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xdf, 0xbf, 0x44, 0x20, 0x00, 0x01, 0x44, 0x00, 0x00, 0x48, +0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xdf, 0xc0, 0x44, 0x20, 0x00, 0x01, 0x44, 0x00, 0x00, 0x50, +0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xdf, 0xc1, 0x44, 0x20, 0x00, 0x0f, 0x44, 0x00, 0x00, 0x53, +0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xdf, 0xd0, 0x44, 0x20, 0x00, 0x0e, 0x44, 0x00, 0x00, 0xa0, +0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xdf, 0xde, 0x44, 0x20, 0x00, 0x10, 0x44, 0x00, 0x00, 0xc0, +0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xdf, 0xee, 0x44, 0x20, 0x00, 0x07, 0x44, 0x00, 0x00, 0xd0, +0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xdf, 0xf5, 0x44, 0x20, 0x00, 0x04, 0x44, 0x00, 0x00, 0xf4, +0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xdf, 0xf9, 0x44, 0x20, 0x00, 0x02, 0x44, 0x00, 0x00, 0x24, +0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xdf, 0xfb, 0x44, 0x20, 0x00, 0x01, 0x44, 0x00, 0x00, 0x34, +0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xdf, 0xfc, 0x44, 0x20, 0x00, 0x01, 0x44, 0x00, 0x00, 0x39, +0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xdf, 0xfd, 0x44, 0x20, 0x00, 0x01, 0x44, 0x00, 0x00, 0x3b, +0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xdf, 0xfe, 0x44, 0x20, 0x00, 0x02, 0x44, 0x00, 0x00, 0x42, +0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xe0, 0x00, 0x44, 0x20, 0x00, 0x02, 0x44, 0x00, 0x00, 0x9e, +0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xe0, 0x02, 0x44, 0x20, 0x00, 0x01, 0x44, 0x00, 0x00, 0xf2, +0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xe0, 0x03, 0x44, 0x20, 0x00, 0x03, 0x44, 0x00, 0x00, 0xf8, +0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xe0, 0x06, 0x44, 0x20, 0x00, 0x01, 0x44, 0x00, 0x01, 0x2e, +0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xe0, 0x07, 0x44, 0x20, 0x00, 0x10, 0x44, 0x00, 0x01, 0x30, +0x4b, 0xe0, 0x18, 0x01, 0x48, 0x00, 0x00, 0x42, 0x38, 0x90, 0x05, 0x01, 0x02, 0x41, 0x80, 0x02, +0x54, 0x13, 0x00, 0xff, 0x4c, 0x92, 0x00, 0x10, 0x00, 0x24, 0x00, 0x0b, 0x54, 0x11, 0x00, 0x01, +0x4e, 0x12, 0x00, 0x7a, 0x58, 0x03, 0x80, 0x00, 0x44, 0x11, 0x00, 0x03, 0x49, 0xff, 0xfc, 0x5e, +0x48, 0x00, 0x00, 0x72, 0x00, 0x61, 0x80, 0x06, 0x10, 0x62, 0x80, 0x00, 0x01, 0xe1, 0x00, 0x01, +0x40, 0x50, 0x88, 0x08, 0x3e, 0x9f, 0xdf, 0xbc, 0x40, 0x31, 0x14, 0x00, 0x50, 0x60, 0x80, 0x01, +0x40, 0x50, 0xa4, 0x00, 0x40, 0xf0, 0xf8, 0x06, 0x4e, 0xf3, 0xff, 0xd8, 0x58, 0x04, 0x80, 0x00, +0x00, 0x94, 0x80, 0x44, 0x44, 0x30, 0x00, 0xff, 0x4c, 0x91, 0xc0, 0x06, 0x44, 0x40, 0x00, 0x00, +0x10, 0x40, 0x00, 0x44, 0x2e, 0x17, 0xe0, 0x01, 0x58, 0x21, 0x80, 0x00, 0x4c, 0x11, 0x40, 0x06, +0x45, 0xe0, 0x00, 0x00, 0x3f, 0xe7, 0xe0, 0x01, 0x3e, 0x3f, 0xdf, 0xbc, 0x00, 0x91, 0x80, 0x31, +0x00, 0x01, 0x80, 0x2f, 0x50, 0x11, 0x80, 0x28, 0x40, 0x54, 0x80, 0x01, 0x54, 0x22, 0x80, 0xff, +0x00, 0x00, 0x80, 0x00, 0x44, 0x50, 0x00, 0x7f, 0x4c, 0x02, 0x80, 0x08, 0x40, 0x31, 0x00, 0x00, +0x4e, 0x02, 0x00, 0x04, 0x10, 0x30, 0x80, 0x00, 0x50, 0x10, 0x80, 0x01, 0x3e, 0x5f, 0xdf, 0xec, +0x4c, 0x12, 0xff, 0xf0, 0x50, 0x10, 0x80, 0x02, 0x00, 0x00, 0x80, 0x00, 0x44, 0x50, 0x00, 0x7f, +0x4c, 0x02, 0x80, 0x08, 0x40, 0x31, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x04, 0x10, 0x30, 0x80, 0x00, +0x50, 0x10, 0x80, 0x01, 0x3e, 0x5f, 0xdf, 0xf5, 0x4c, 0x12, 0xff, 0xf0, 0x49, 0x00, 0x0f, 0x6a, +0x44, 0x00, 0x00, 0x01, 0x3e, 0x07, 0xe3, 0x30, 0x00, 0x14, 0x00, 0x0b, 0x54, 0x00, 0x80, 0x01, +0x4e, 0x02, 0x00, 0x0c, 0x58, 0x03, 0x80, 0x00, 0x44, 0x10, 0x00, 0x00, 0x49, 0xff, 0xfb, 0xee, +0x48, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x03, 0x51, 0xff, 0x80, 0xbc, 0x3a, 0x6f, 0xa4, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xb4, 0x3e, 0x7f, 0xcc, 0x78, +0x54, 0x10, 0x00, 0xff, 0x14, 0x1f, 0x80, 0x05, 0x3a, 0x03, 0x8c, 0x04, 0x50, 0x5f, 0x80, 0x2c, +0x3e, 0x6f, 0xdf, 0xbc, 0x3a, 0x02, 0x8c, 0x24, 0x3a, 0x03, 0x88, 0x00, 0x2e, 0x47, 0xe3, 0xbe, +0x3a, 0x02, 0x88, 0x20, 0x00, 0x03, 0x00, 0x0a, 0x14, 0x0f, 0x80, 0x07, 0x4e, 0x43, 0x00, 0x06, +0x58, 0x12, 0x00, 0x00, 0x48, 0x00, 0x00, 0x3e, 0x49, 0x00, 0x12, 0x82, 0x50, 0x23, 0x00, 0x28, +0x44, 0x10, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x50, 0x30, 0x80, 0x01, 0x50, 0x21, 0x00, 0x01, +0x40, 0xf0, 0x18, 0x06, 0x4e, 0xf3, 0x00, 0x0a, 0x54, 0x11, 0x80, 0xff, 0x44, 0x50, 0x00, 0x08, +0x4c, 0x12, 0xff, 0xf2, 0x48, 0x00, 0x00, 0x08, 0x2e, 0x27, 0xdf, 0xec, 0x50, 0x10, 0xff, 0xf9, +0x48, 0x00, 0x00, 0x18, 0x3e, 0x2f, 0xdf, 0xee, 0x44, 0x10, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, +0x50, 0x30, 0x80, 0x01, 0x50, 0x21, 0x00, 0x01, 0x40, 0xf0, 0x24, 0x06, 0x4e, 0xf3, 0x00, 0x08, +0x54, 0x11, 0x80, 0xff, 0x44, 0x50, 0x00, 0x07, 0x4c, 0x12, 0xff, 0xf2, 0x2e, 0x27, 0xdf, 0xec, +0x55, 0xe1, 0x00, 0x01, 0x4f, 0xe2, 0x00, 0x04, 0x40, 0x10, 0x84, 0x00, 0x40, 0x10, 0x80, 0x10, +0x2e, 0x27, 0xdf, 0xc0, 0x44, 0x50, 0x00, 0x02, 0x40, 0x31, 0x18, 0x09, 0x4c, 0x32, 0xc0, 0x0e, +0x54, 0x51, 0x00, 0x3f, 0x52, 0x72, 0x80, 0x00, 0x40, 0x43, 0x80, 0x10, 0x14, 0x4f, 0x80, 0x04, +0x45, 0xc0, 0x00, 0x01, 0x48, 0x00, 0x00, 0x12, 0x44, 0x50, 0x00, 0x03, 0x4c, 0x32, 0x80, 0x08, +0x45, 0xc0, 0x00, 0x00, 0x15, 0xcf, 0x80, 0x04, 0x48, 0x00, 0x00, 0x08, 0x54, 0x81, 0x00, 0x3f, +0x14, 0x8f, 0x80, 0x04, 0x45, 0xc0, 0x00, 0x00, 0x05, 0xef, 0x80, 0x07, 0x54, 0x00, 0x80, 0xff, +0x42, 0xaf, 0x18, 0x0b, 0x3e, 0x9f, 0xdf, 0xd0, 0x3e, 0x2f, 0xe0, 0x18, 0x50, 0x1f, 0x80, 0x2c, +0x14, 0x0f, 0x80, 0x08, 0x14, 0xaf, 0x80, 0x09, 0x14, 0x9f, 0x80, 0x03, 0x14, 0x2f, 0x80, 0x02, +0x14, 0x1f, 0x80, 0x01, 0x15, 0xcf, 0x80, 0x06, 0x04, 0x3f, 0x80, 0x03, 0x45, 0xc0, 0x00, 0x02, +0x00, 0x01, 0x80, 0x00, 0x40, 0x10, 0x18, 0x09, 0x4c, 0x1e, 0x40, 0x0c, 0x54, 0x70, 0x00, 0x3f, +0x52, 0x43, 0x80, 0x00, 0x40, 0x02, 0x00, 0x10, 0x44, 0x20, 0x00, 0x01, 0x48, 0x00, 0x00, 0x10, +0x44, 0x50, 0x00, 0x03, 0x4c, 0x12, 0x80, 0x08, 0x44, 0x20, 0x00, 0x00, 0x58, 0x01, 0x00, 0x00, +0x48, 0x00, 0x00, 0x06, 0x54, 0x00, 0x00, 0x3f, 0x44, 0x20, 0x00, 0x00, 0x04, 0x1f, 0x80, 0x07, +0x04, 0x6f, 0x80, 0x09, 0x40, 0x80, 0x80, 0x00, 0x54, 0x74, 0x00, 0xff, 0x42, 0x13, 0x98, 0x0b, +0x4c, 0x60, 0x80, 0x10, 0x4c, 0x11, 0x00, 0x0e, 0x44, 0x90, 0x00, 0x01, 0x4c, 0x24, 0xc0, 0x06, +0x40, 0x74, 0x98, 0x08, 0x48, 0x00, 0x00, 0x06, 0x44, 0xa0, 0x00, 0x3f, 0x40, 0x75, 0x08, 0x1a, +0x05, 0xef, 0x80, 0x01, 0x04, 0x2f, 0x80, 0x02, 0x55, 0xc3, 0x80, 0x40, 0x00, 0x8f, 0x00, 0x00, +0x00, 0xaf, 0x00, 0x01, 0x00, 0x51, 0x00, 0x00, 0x4f, 0xc3, 0x00, 0x20, 0x40, 0xf3, 0x94, 0x06, +0x4e, 0xf2, 0x00, 0x0e, 0x44, 0x30, 0x00, 0x07, 0x58, 0x05, 0x00, 0x00, 0x42, 0x04, 0x0c, 0x73, +0x3e, 0x4f, 0xf6, 0x8c, 0x40, 0x30, 0x10, 0x00, 0x48, 0x00, 0x00, 0x1a, 0x58, 0x15, 0x00, 0x00, +0x44, 0x20, 0x00, 0x07, 0x42, 0x14, 0x08, 0x73, 0x3e, 0x9f, 0xf6, 0x8c, 0x40, 0x60, 0xa4, 0x00, +0x10, 0x53, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0e, 0x58, 0x55, 0x00, 0x00, 0x44, 0x00, 0x00, 0x07, +0x42, 0x54, 0x00, 0x73, 0x3f, 0xef, 0xf6, 0x8c, 0x40, 0x32, 0xf8, 0x00, 0x10, 0x71, 0x80, 0x00, +0x44, 0x40, 0x00, 0x07, 0x59, 0xe5, 0x00, 0x00, 0x2e, 0x27, 0xe3, 0x2d, 0x43, 0xe4, 0x10, 0x73, +0x3e, 0x0f, 0xf6, 0x8c, 0x04, 0x1f, 0x80, 0x08, 0x40, 0x61, 0x08, 0x00, 0x40, 0x5f, 0x00, 0x00, +0x00, 0x22, 0x80, 0x00, 0x40, 0x90, 0x98, 0x01, 0x54, 0x64, 0x80, 0xff, 0x40, 0x33, 0x08, 0x00, +0x54, 0x91, 0x80, 0xff, 0x42, 0x41, 0x18, 0x0b, 0x42, 0x54, 0x98, 0x0b, 0x4c, 0x42, 0x80, 0x12, +0x40, 0x63, 0x1c, 0x09, 0x4c, 0x53, 0x00, 0x0e, 0x44, 0x10, 0x00, 0x01, 0x4c, 0x60, 0xc0, 0x06, +0x40, 0x90, 0x98, 0x08, 0x48, 0x00, 0x00, 0x06, 0x44, 0x50, 0x00, 0x3f, 0x40, 0x92, 0x98, 0x1a, +0x44, 0x00, 0x00, 0x07, 0x58, 0x25, 0x00, 0x00, 0x42, 0x24, 0x00, 0x73, 0x3e, 0x4f, 0xf6, 0x8c, +0x41, 0xe1, 0x10, 0x00, 0x10, 0x9f, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x58, 0x3f, 0x00, 0x00, +0x58, 0x14, 0x00, 0x00, 0x58, 0x25, 0x00, 0x00, 0x44, 0x60, 0x00, 0x02, 0x49, 0xff, 0xd2, 0x08, +0x4c, 0x83, 0x40, 0x7c, 0x04, 0x3f, 0x80, 0x04, 0x04, 0x5f, 0x80, 0x02, 0x40, 0x13, 0x8c, 0x00, +0x54, 0x30, 0x80, 0xff, 0x40, 0x7e, 0x18, 0x09, 0x42, 0x11, 0x98, 0x0b, 0x00, 0x22, 0x80, 0x07, +0x4c, 0x70, 0x80, 0x16, 0x04, 0x6f, 0x80, 0x06, 0x4c, 0x13, 0x00, 0x12, 0x45, 0xe0, 0x00, 0x01, +0x4c, 0x6f, 0x40, 0x06, 0x40, 0x3f, 0x18, 0x08, 0x48, 0x00, 0x00, 0x1e, 0x04, 0x6f, 0x80, 0x06, +0x4e, 0x63, 0x00, 0x06, 0x44, 0x30, 0x00, 0x3f, 0x48, 0x00, 0x00, 0x06, 0x54, 0x41, 0x80, 0x40, +0x4e, 0x43, 0x00, 0x12, 0x3e, 0x0f, 0xf6, 0x8c, 0x40, 0x15, 0x00, 0x00, 0x40, 0xf1, 0x88, 0x06, +0x4e, 0xf2, 0x00, 0x06, 0x10, 0x30, 0x80, 0x15, 0x48, 0x00, 0x00, 0x0c, 0x10, 0x20, 0x80, 0x15, +0x48, 0x00, 0x00, 0x08, 0x3e, 0x7f, 0xf6, 0x8c, 0x40, 0x25, 0x1c, 0x00, 0x10, 0x31, 0x00, 0x15, +0x2e, 0x37, 0xe3, 0x2d, 0x04, 0x1f, 0x80, 0x08, 0x3e, 0x2f, 0xf6, 0x8c, 0x40, 0x45, 0x08, 0x00, +0x40, 0x01, 0x8c, 0x00, 0x01, 0xe2, 0x00, 0x15, 0x40, 0x50, 0x80, 0x01, 0x54, 0x12, 0x80, 0xff, +0x40, 0x60, 0xf8, 0x00, 0x54, 0x53, 0x00, 0xff, 0x42, 0x3f, 0x18, 0x0b, 0x42, 0x42, 0x98, 0x0b, +0x4c, 0x32, 0x00, 0x12, 0x40, 0x10, 0x9c, 0x09, 0x4c, 0x40, 0x80, 0x0e, 0x45, 0xe0, 0x00, 0x01, +0x4c, 0x1f, 0x40, 0x06, 0x40, 0x5f, 0x18, 0x08, 0x48, 0x00, 0x00, 0x06, 0x44, 0x70, 0x00, 0x3f, +0x40, 0x53, 0x84, 0x1a, 0x58, 0x01, 0x00, 0x00, 0x40, 0x65, 0x00, 0x00, 0x50, 0x15, 0x00, 0x15, +0x10, 0x53, 0x00, 0x15, 0x40, 0x30, 0x80, 0x00, 0x58, 0x25, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, +0x44, 0x10, 0x00, 0x03, 0x49, 0xff, 0xd1, 0x8c, 0x04, 0x0f, 0x80, 0x03, 0x04, 0x6f, 0x80, 0x02, +0x04, 0x2f, 0x80, 0x01, 0x50, 0x50, 0x00, 0x01, 0x51, 0xe3, 0x00, 0x01, 0x50, 0x31, 0x00, 0x02, +0x3e, 0x4f, 0xdf, 0xde, 0x14, 0x5f, 0x80, 0x03, 0x15, 0xef, 0x80, 0x02, 0x14, 0x3f, 0x80, 0x01, +0x4c, 0x52, 0x7e, 0xb4, 0x04, 0x6f, 0x80, 0x05, 0x50, 0x53, 0x7f, 0xff, 0x54, 0x12, 0x80, 0xff, +0x5c, 0xf0, 0x80, 0x05, 0x4e, 0xf2, 0x00, 0x1c, 0x2e, 0x07, 0xdf, 0xc7, 0x40, 0x40, 0x00, 0x10, +0x4e, 0x45, 0x00, 0x06, 0x44, 0x10, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0e, 0x42, 0x50, 0x18, 0x0b, +0x40, 0x12, 0x94, 0x00, 0x51, 0xe0, 0xff, 0xff, 0x54, 0x60, 0x00, 0x3f, 0x42, 0x2f, 0x18, 0x24, +0x40, 0x11, 0x00, 0x10, 0x2e, 0x07, 0xdf, 0xcd, 0x48, 0x00, 0x00, 0x4e, 0x04, 0x7f, 0x80, 0x05, +0x50, 0x33, 0xff, 0xfa, 0x54, 0x41, 0x80, 0xff, 0x5c, 0xf2, 0x00, 0x05, 0x4e, 0xf2, 0x00, 0x1c, +0x2e, 0x07, 0xdf, 0xc8, 0x40, 0x20, 0x00, 0x10, 0x4e, 0x25, 0x00, 0x06, 0x44, 0x10, 0x00, 0x00, +0x48, 0x00, 0x00, 0x0e, 0x42, 0x30, 0x18, 0x0b, 0x40, 0x41, 0x8c, 0x00, 0x50, 0x12, 0x7f, 0xff, +0x54, 0x50, 0x00, 0x3f, 0x42, 0x60, 0x94, 0x24, 0x40, 0x13, 0x00, 0x10, 0x2e, 0x07, 0xdf, 0xce, +0x48, 0x00, 0x00, 0x2a, 0x04, 0x1f, 0x80, 0x05, 0x51, 0xe0, 0xff, 0xf5, 0x54, 0x2f, 0x00, 0xff, +0x5c, 0xf1, 0x00, 0x04, 0x4e, 0xf3, 0x00, 0x08, 0x46, 0x0c, 0x00, 0x00, 0x58, 0x00, 0x00, 0x01, +0x48, 0x00, 0x00, 0x8c, 0x2e, 0x07, 0xdf, 0xc9, 0x40, 0x60, 0x00, 0x10, 0x4e, 0x65, 0x00, 0x06, +0x44, 0x10, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0e, 0x43, 0xe0, 0x18, 0x0b, 0x40, 0x2f, 0x78, 0x00, +0x50, 0x31, 0x7f, 0xff, 0x54, 0x00, 0x00, 0x3f, 0x42, 0x41, 0x80, 0x24, 0x40, 0x12, 0x00, 0x10, +0x2e, 0x07, 0xdf, 0xcf, 0x40, 0x50, 0x00, 0x10, 0x4e, 0x54, 0x00, 0x10, 0x43, 0xe0, 0x18, 0x0b, 0x40, 0x2f, 0x78, 0x00, 0x50, 0x31, 0x7f, 0xff, 0x54, 0x00, 0x00, 0x3f, 0x42, 0x41, 0x80, 0x24, -0x40, 0x12, 0x00, 0x10, 0x2e, 0x07, 0xe2, 0x2f, 0x40, 0x50, 0x00, 0x10, 0x4e, 0x54, 0x00, 0x10, -0x43, 0xe0, 0x18, 0x0b, 0x40, 0x2f, 0x78, 0x00, 0x50, 0x31, 0x7f, 0xff, 0x54, 0x00, 0x00, 0x3f, -0x42, 0x41, 0x80, 0x24, 0x40, 0x22, 0x00, 0x10, 0x48, 0x00, 0x00, 0x04, 0x44, 0x20, 0x00, 0x00, -0x2e, 0x67, 0xe2, 0x1e, 0x54, 0x03, 0x00, 0x20, 0x4e, 0x02, 0x00, 0x30, 0x44, 0x4f, 0xff, 0xf8, -0x42, 0x50, 0x90, 0x00, 0x44, 0x30, 0x00, 0x07, 0x46, 0x06, 0x02, 0x00, 0x42, 0x12, 0x8c, 0x01, -0x05, 0xe0, 0x03, 0x43, 0x40, 0x60, 0x90, 0x08, 0x54, 0x13, 0x00, 0xff, 0x44, 0x6f, 0xff, 0x00, -0x40, 0x5f, 0x18, 0x02, 0x41, 0xe0, 0x94, 0x04, 0x15, 0xe0, 0x03, 0x43, 0x46, 0x06, 0x02, 0x01, -0x42, 0x11, 0x10, 0x00, 0x42, 0x50, 0x8c, 0x01, 0x04, 0x20, 0x03, 0x43, 0x41, 0xe2, 0x90, 0x08, -0x54, 0x3f, 0x00, 0xff, 0x40, 0x11, 0x18, 0x02, 0x40, 0x41, 0x84, 0x04, 0x14, 0x40, 0x03, 0x43, -0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x2c, 0x44, 0x5f, 0xff, 0xc0, 0x42, 0x10, 0x94, 0x00, -0x44, 0x40, 0x00, 0x3f, 0x46, 0x36, 0x02, 0x00, 0x43, 0xe0, 0x90, 0x01, 0x04, 0x61, 0x83, 0x46, -0x40, 0x7f, 0x78, 0x00, 0x54, 0x13, 0x80, 0xff, 0x44, 0x7f, 0xff, 0x00, 0x40, 0x63, 0x1c, 0x02, -0x41, 0xe0, 0x98, 0x04, 0x15, 0xe1, 0x83, 0x46, 0x47, 0xe6, 0x02, 0x01, 0x42, 0x31, 0x14, 0x00, -0x42, 0x21, 0x90, 0x01, 0x04, 0x1f, 0x03, 0x46, 0x40, 0x51, 0x08, 0x00, 0x54, 0x42, 0x80, 0xff, -0x40, 0x30, 0x9c, 0x02, 0x40, 0x22, 0x0c, 0x04, 0x14, 0x2f, 0x03, 0x46, 0x51, 0xff, 0x80, 0x4c, -0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xfc, -0x04, 0x70, 0x00, 0x02, 0x3e, 0x2f, 0xe2, 0x1c, 0x50, 0x13, 0x80, 0x20, 0x00, 0x40, 0x80, 0x01, -0x58, 0x60, 0x00, 0x00, 0x10, 0x41, 0x00, 0x02, 0x00, 0x30, 0x80, 0x02, 0x10, 0x31, 0x00, 0x01, -0x01, 0xe0, 0x80, 0x03, 0x11, 0xe1, 0x00, 0x0a, 0x00, 0x50, 0x80, 0x04, 0x10, 0x51, 0x00, 0x10, -0x00, 0x00, 0x80, 0x05, 0x10, 0x01, 0x00, 0x14, 0x00, 0x40, 0x80, 0x06, 0x10, 0x41, 0x00, 0x15, -0x00, 0x30, 0x80, 0x07, 0x10, 0x31, 0x00, 0x16, 0x01, 0xe0, 0x80, 0x08, 0x11, 0xe1, 0x00, 0x17, -0x00, 0x50, 0x80, 0x09, 0x10, 0x51, 0x00, 0x18, 0x00, 0x00, 0x80, 0x0a, 0x10, 0x01, 0x00, 0x19, -0x00, 0x40, 0x80, 0x0b, 0x10, 0x41, 0x00, 0x1a, 0x00, 0x30, 0x80, 0x0c, 0x10, 0x31, 0x00, 0x1b, -0x01, 0xe0, 0x80, 0x0d, 0x11, 0xe1, 0x00, 0x1c, 0x00, 0x50, 0x80, 0x0e, 0x10, 0x51, 0x00, 0x1d, -0x00, 0x00, 0x80, 0x0f, 0x10, 0x01, 0x00, 0x1e, 0x00, 0x40, 0x80, 0x10, 0x10, 0x41, 0x00, 0x1f, -0x00, 0x30, 0x80, 0x11, 0x10, 0x31, 0x00, 0x20, 0x01, 0xe0, 0x80, 0x12, 0x11, 0xe1, 0x00, 0x21, -0x00, 0x50, 0x80, 0x13, 0x10, 0x51, 0x00, 0x04, 0x00, 0x00, 0x80, 0x14, 0x10, 0x01, 0x00, 0x0b, -0x00, 0x40, 0x80, 0x15, 0x10, 0x41, 0x00, 0x0c, 0x00, 0x30, 0x80, 0x16, 0x10, 0x31, 0x00, 0x0d, -0x01, 0xe0, 0x80, 0x17, 0x11, 0xe1, 0x00, 0x11, 0x00, 0x50, 0x80, 0x18, 0x10, 0x51, 0x00, 0x12, -0x00, 0x00, 0x80, 0x19, 0x10, 0x01, 0x00, 0x13, 0x00, 0x40, 0x80, 0x1a, 0x10, 0x41, 0x00, 0x28, -0x00, 0x30, 0x80, 0x1b, 0x10, 0x31, 0x00, 0x29, 0x01, 0xe0, 0x80, 0x1c, 0x11, 0xe1, 0x00, 0x2a, -0x00, 0x50, 0x80, 0x1d, 0x10, 0x51, 0x00, 0x2b, 0x00, 0x00, 0x80, 0x1e, 0x10, 0x01, 0x00, 0x2c, -0x00, 0x40, 0x80, 0x1f, 0x10, 0x41, 0x00, 0x2d, 0x00, 0x30, 0x80, 0x20, 0x10, 0x31, 0x00, 0x2e, -0x50, 0x31, 0x00, 0x28, 0x00, 0x00, 0x80, 0x21, 0x10, 0x01, 0x00, 0x2f, 0x01, 0xe0, 0x80, 0x22, -0x11, 0xe1, 0x00, 0x30, 0x00, 0x50, 0x80, 0x23, 0x10, 0x51, 0x00, 0x31, 0x40, 0x02, 0x80, 0x01, -0x00, 0x40, 0x80, 0x24, 0x54, 0x00, 0x00, 0xff, 0x10, 0x41, 0x00, 0x32, 0x01, 0xe0, 0x80, 0x25, -0x11, 0xe1, 0x00, 0x33, 0x00, 0x50, 0x80, 0x26, 0x10, 0x51, 0x00, 0x34, 0x00, 0x40, 0x80, 0x27, -0x10, 0x41, 0x00, 0x35, 0x01, 0xe0, 0x80, 0x28, 0x11, 0xe1, 0x00, 0x36, 0x00, 0x50, 0x80, 0x29, -0x10, 0x51, 0x00, 0x37, 0x00, 0x40, 0x80, 0x2a, 0x10, 0x41, 0x00, 0x38, 0x00, 0x21, 0x80, 0x00, -0x44, 0x50, 0x00, 0x7f, 0x4c, 0x22, 0x80, 0x08, 0x40, 0x40, 0x08, 0x00, 0x4e, 0x22, 0x00, 0x04, -0x10, 0x41, 0x80, 0x00, 0x50, 0x31, 0x80, 0x01, 0x3e, 0x2f, 0xe2, 0x4c, 0x4c, 0x31, 0x7f, 0xf0, -0x50, 0x31, 0x80, 0x02, 0x00, 0x21, 0x80, 0x00, 0x44, 0x50, 0x00, 0x7f, 0x4c, 0x22, 0x80, 0x08, -0x40, 0x40, 0x08, 0x00, 0x4e, 0x22, 0x00, 0x04, 0x10, 0x41, 0x80, 0x00, 0x50, 0x31, 0x80, 0x01, -0x3e, 0x5f, 0xe2, 0x55, 0x4c, 0x32, 0xff, 0xf0, 0x00, 0x30, 0x80, 0x2b, 0x3e, 0x37, 0xe5, 0x8d, -0x00, 0x00, 0x80, 0x00, 0x3e, 0x1f, 0xe2, 0x78, 0x49, 0xff, 0xfc, 0x48, 0x00, 0x13, 0x80, 0x0b, -0x54, 0x00, 0x80, 0x01, 0x4e, 0x02, 0x00, 0x08, 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, -0x49, 0xff, 0xf8, 0x1e, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xa0, 0xbc, 0x04, 0x80, 0x00, 0x02, 0x58, 0x70, 0x00, 0x00, 0x50, 0x64, 0x00, 0x20, -0x00, 0x03, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x1c, 0x49, 0x00, 0x0c, 0x8a, 0x4e, 0x02, 0x00, 0x08, -0x46, 0x0c, 0x00, 0x00, 0x58, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x20, 0x20, 0x43, 0x00, 0x06, -0x00, 0x03, 0x00, 0x02, 0x00, 0x13, 0x00, 0x03, 0x00, 0x23, 0x00, 0x04, 0x20, 0x33, 0x00, 0x05, -0x49, 0x00, 0x0c, 0x50, 0x49, 0x00, 0x11, 0x58, 0x48, 0x00, 0x00, 0x04, 0x49, 0x00, 0x0e, 0xbc, -0x00, 0x14, 0x00, 0x0b, 0x54, 0x00, 0x80, 0x01, 0x4e, 0x02, 0x00, 0x08, 0x58, 0x03, 0x80, 0x00, -0x44, 0x10, 0x00, 0x00, 0x49, 0xff, 0xf7, 0xe4, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x04, 0x70, 0x00, 0x02, 0x58, 0x90, 0x00, 0x00, -0x02, 0x13, 0x80, 0x00, 0x50, 0x03, 0x80, 0x20, 0x5c, 0xf0, 0x80, 0x44, 0x4e, 0xf2, 0x00, 0x08, -0x3e, 0x1f, 0xe2, 0x78, 0x44, 0x2f, 0xff, 0xff, 0x48, 0x00, 0x00, 0x3e, 0x3e, 0x1f, 0xe2, 0x78, -0x50, 0x33, 0x80, 0x2c, 0x58, 0x20, 0x80, 0x00, 0x48, 0x00, 0x00, 0x06, 0x08, 0x41, 0x80, 0x01, -0x18, 0x41, 0x00, 0x01, 0x50, 0x50, 0x80, 0x15, 0x4c, 0x22, 0xff, 0xfa, 0x2e, 0x27, 0xe6, 0x20, -0x4e, 0x22, 0x00, 0x2e, 0x2e, 0x87, 0xe2, 0x26, 0x2e, 0xa7, 0xe2, 0x62, 0x44, 0x40, 0x00, 0x00, -0x40, 0x65, 0x20, 0x01, 0x54, 0x33, 0x00, 0xff, 0x48, 0x00, 0x00, 0x16, 0x00, 0x20, 0x80, 0x00, -0x45, 0xe0, 0x00, 0xff, 0x4c, 0x2f, 0x00, 0x0e, 0x40, 0x51, 0x0c, 0x01, 0x40, 0xf1, 0x0c, 0x06, -0x4e, 0xf2, 0x00, 0x06, 0x10, 0x40, 0x80, 0x00, 0x48, 0x00, 0x00, 0x04, 0x10, 0x50, 0x80, 0x00, -0x50, 0x10, 0x80, 0x01, 0x3e, 0x5f, 0xe2, 0x8d, 0x4c, 0x12, 0xff, 0xea, 0x48, 0x00, 0x00, 0x08, -0x18, 0x20, 0x80, 0x01, 0x3e, 0x4f, 0xe2, 0x8d, 0x4c, 0x12, 0x7f, 0xfc, 0x00, 0x10, 0x00, 0x00, -0x00, 0x80, 0x00, 0x01, 0x3e, 0x28, 0x02, 0x85, 0x40, 0xa4, 0x04, 0x06, 0x44, 0x00, 0x00, 0x03, -0x01, 0xe1, 0x00, 0x00, 0x46, 0x40, 0x02, 0x4b, 0x46, 0x50, 0x04, 0xc4, 0x44, 0x60, 0x00, 0x00, -0x40, 0x23, 0x28, 0x1a, 0x40, 0x20, 0x28, 0x1b, 0x58, 0x42, 0x0a, 0x58, 0x58, 0x52, 0x8b, 0x40, -0x5d, 0xc0, 0x80, 0x0f, 0x40, 0xa0, 0xa0, 0x06, 0x44, 0x30, 0x00, 0x01, 0x40, 0x02, 0x70, 0x1b, -0x40, 0x02, 0xf0, 0x1a, 0x40, 0x21, 0xa8, 0x1b, 0x4f, 0xe2, 0x00, 0x14, 0x2f, 0xe0, 0x02, 0x86, -0x4f, 0xe2, 0x00, 0x10, 0x2e, 0x50, 0x02, 0x87, 0x4e, 0x52, 0x00, 0x0c, 0x58, 0x33, 0x00, 0x00, -0x58, 0x43, 0x00, 0x00, 0x58, 0x53, 0x00, 0x00, 0x49, 0x00, 0x0a, 0xa6, 0x48, 0x00, 0x00, 0x06, -0x46, 0x6c, 0x00, 0x00, 0x58, 0x63, 0x00, 0x01, 0x3e, 0x1f, 0xe2, 0x78, 0x58, 0x04, 0x00, 0x00, -0x49, 0xff, 0xfb, 0x64, 0x00, 0x03, 0x80, 0x0b, 0x54, 0x10, 0x00, 0x01, 0x4e, 0x12, 0x00, 0x0a, -0x58, 0x13, 0x00, 0x00, 0x58, 0x04, 0x80, 0x00, 0x49, 0xff, 0xf7, 0x3a, 0x58, 0x60, 0x00, 0x00, -0x58, 0x03, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xd4, 0x14, 0x0f, 0x80, 0x03, 0x44, 0x40, 0x00, 0x01, -0x04, 0x00, 0x00, 0x02, 0x14, 0x0f, 0x80, 0x02, 0x50, 0x70, 0x00, 0x20, 0x00, 0x63, 0x80, 0x01, -0x00, 0x83, 0x80, 0x00, 0x4c, 0x62, 0x40, 0x06, 0x49, 0x00, 0x04, 0x9e, 0x48, 0x00, 0x00, 0x08, -0x44, 0x10, 0x00, 0x02, 0x4c, 0x60, 0xc0, 0x04, 0x49, 0x00, 0x04, 0xb2, 0x44, 0x20, 0x00, 0x04, -0x4c, 0x81, 0x41, 0x5c, 0x44, 0x30, 0x00, 0x01, 0x4c, 0x61, 0xc1, 0x2c, 0x2e, 0x57, 0xe2, 0x18, -0x44, 0x90, 0x00, 0x02, 0x4c, 0x54, 0xc1, 0x86, 0x00, 0xa3, 0x80, 0x1e, 0x01, 0xe3, 0x80, 0x08, -0x40, 0x55, 0x28, 0x00, 0x40, 0x92, 0xf8, 0x00, 0x40, 0x3f, 0x78, 0x00, 0x40, 0x44, 0x8c, 0xb6, -0x02, 0x23, 0x80, 0x05, 0x44, 0x10, 0x00, 0x0a, 0x14, 0x2f, 0x80, 0x04, 0x50, 0x9f, 0x80, 0x27, -0x05, 0xc3, 0x80, 0x03, 0x3e, 0x3e, 0xb2, 0x60, 0x15, 0xcf, 0x80, 0x06, 0x58, 0x5f, 0x00, 0x00, -0x04, 0x83, 0x80, 0x04, 0x50, 0x73, 0x80, 0x02, 0x14, 0x8f, 0x80, 0x05, 0x14, 0x7f, 0x80, 0x07, -0x45, 0xc0, 0x00, 0x00, 0x50, 0x8f, 0x80, 0x20, 0x54, 0x62, 0x00, 0xff, 0x5c, 0x03, 0x00, 0x0a, -0x40, 0x60, 0x80, 0x1b, 0x58, 0xa3, 0x00, 0x00, 0x14, 0x3f, 0x80, 0x01, 0x14, 0x5f, 0x80, 0x00, -0x58, 0x0e, 0x00, 0x00, 0x58, 0x24, 0x00, 0x00, 0x58, 0x14, 0x80, 0x00, 0x4b, 0xe0, 0x0c, 0x01, -0x04, 0x1f, 0x80, 0x07, 0x58, 0x04, 0x00, 0x00, 0x44, 0x20, 0x00, 0x06, 0x49, 0xf7, 0xd4, 0x50, -0x54, 0x6e, 0x00, 0xff, 0x04, 0x3f, 0x80, 0x01, 0x51, 0xce, 0x00, 0x01, 0x04, 0x5f, 0x80, 0x00, -0x4e, 0x03, 0x00, 0x08, 0x58, 0x45, 0x00, 0x00, 0x58, 0xa2, 0x80, 0x00, 0x48, 0x00, 0x00, 0x0c, -0x44, 0x60, 0x00, 0x03, 0x4d, 0xc3, 0x7f, 0xda, 0x58, 0x45, 0x00, 0x00, 0x44, 0x60, 0x00, 0x00, -0x58, 0xa2, 0x80, 0x00, 0x04, 0x7f, 0x80, 0x05, 0x46, 0x86, 0x01, 0x40, 0x14, 0x74, 0x00, 0x00, -0x58, 0x03, 0x00, 0x00, 0x05, 0xef, 0x80, 0x06, 0x14, 0x4f, 0x80, 0x01, 0x40, 0x7f, 0x00, 0x13, -0x58, 0x13, 0x80, 0x00, 0x49, 0xff, 0xdb, 0xe4, 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, -0x49, 0xff, 0xdc, 0x38, 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xdb, 0x3a, -0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xdb, 0x76, 0x58, 0x03, 0x00, 0x00, -0x44, 0x10, 0x00, 0x00, 0x49, 0xff, 0xdc, 0xc8, 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, -0x49, 0xff, 0xd8, 0x0a, 0x44, 0x10, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xd9, 0x24, -0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xd7, 0xfe, 0x58, 0x03, 0x00, 0x00, -0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xd9, 0x18, 0x04, 0x4f, 0x80, 0x01, 0x44, 0x20, 0x00, 0x01, -0x44, 0x30, 0x00, 0x14, 0x44, 0x10, 0x00, 0x05, 0x44, 0x00, 0x00, 0x00, 0x49, 0xff, 0xde, 0xfc, -0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xd8, 0x54, 0x58, 0x03, 0x00, 0x00, -0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xd8, 0xbe, 0x44, 0x00, 0x00, 0x01, 0x58, 0x20, 0x00, 0x00, -0x44, 0x30, 0x00, 0x64, 0x44, 0x40, 0x00, 0x00, 0x44, 0x10, 0x00, 0x05, 0x49, 0xff, 0xd9, 0x36, -0x44, 0x40, 0x00, 0x01, 0x04, 0x1f, 0x80, 0x04, 0x58, 0x52, 0x00, 0x00, 0x44, 0x30, 0x00, 0x00, -0x58, 0x03, 0x00, 0x00, 0x58, 0x25, 0x00, 0x00, 0x49, 0xff, 0xde, 0x40, 0x50, 0x25, 0x7f, 0xff, -0x54, 0x11, 0x00, 0xff, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xda, 0xa2, 0x44, 0x10, 0x00, 0x01, -0x58, 0x20, 0x80, 0x00, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xdd, 0xcc, 0x46, 0x36, 0x03, 0x00, -0x04, 0x01, 0x80, 0x17, 0x46, 0x26, 0x03, 0x00, 0x58, 0x10, 0x00, 0x01, 0x14, 0x11, 0x80, 0x17, -0x58, 0x21, 0x00, 0x30, 0x04, 0x51, 0x00, 0x00, 0x40, 0x02, 0xa0, 0x09, 0x40, 0x00, 0x20, 0x08, -0x14, 0x01, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, 0x04, 0x31, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, -0x58, 0x41, 0x80, 0x50, 0x14, 0x41, 0x00, 0x00, 0x49, 0xff, 0xdd, 0x12, 0x58, 0x03, 0x00, 0x00, -0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xe1, 0xbc, 0x3e, 0x1f, 0xfa, 0x08, 0x00, 0x00, 0x80, 0xb4, -0x44, 0x50, 0x00, 0x02, 0x44, 0x20, 0x00, 0x01, 0x3e, 0x57, 0xe4, 0x7c, 0x10, 0x20, 0x80, 0xb5, -0x12, 0x70, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x06, 0x44, 0x00, 0x00, 0x01, 0x49, 0x00, 0x27, 0x3a, -0x49, 0xff, 0xd7, 0x6a, 0x44, 0x40, 0x00, 0x01, 0x3e, 0x47, 0xe2, 0x18, 0x48, 0x00, 0x00, 0x5e, -0x45, 0xc0, 0x00, 0x02, 0x4c, 0x6e, 0x40, 0x5e, 0x2e, 0x97, 0xe2, 0x18, 0x44, 0xa0, 0x00, 0x01, -0x4c, 0x95, 0x40, 0x58, 0x04, 0x73, 0x80, 0x04, 0x46, 0x96, 0x01, 0x40, 0x49, 0xff, 0xde, 0xe8, -0x49, 0xff, 0xd7, 0x5a, 0x44, 0x00, 0x00, 0x00, 0x58, 0x10, 0x00, 0x00, 0x49, 0xff, 0xe1, 0x88, -0x14, 0x74, 0x80, 0x00, 0x46, 0x56, 0x01, 0x40, 0x05, 0xc2, 0x80, 0x20, 0x44, 0x20, 0x00, 0x00, -0x42, 0x4e, 0x08, 0x09, 0x14, 0x42, 0x80, 0x20, 0x3e, 0x27, 0xe4, 0x7c, 0x3e, 0x67, 0xe2, 0x18, -0x3e, 0x27, 0xfa, 0xbd, 0x48, 0x00, 0x00, 0x32, 0x45, 0xe0, 0x00, 0x05, 0x4c, 0x8f, 0x40, 0x22, -0x44, 0xa0, 0x00, 0x01, 0x4c, 0x65, 0x40, 0x0c, 0x3e, 0x7f, 0xe2, 0x19, 0x44, 0x10, 0x00, 0x02, -0x10, 0x13, 0x80, 0x00, 0x49, 0xff, 0xd7, 0x28, 0x48, 0x00, 0x00, 0x10, 0x44, 0x20, 0x00, 0x02, -0x4c, 0x61, 0x40, 0x20, 0x44, 0x30, 0x00, 0x01, 0x3e, 0x7f, 0xe2, 0x19, 0x10, 0x33, 0x80, 0x00, -0x49, 0xff, 0xde, 0xae, 0x49, 0xff, 0xd7, 0x20, 0x10, 0x63, 0x80, 0x00, 0x48, 0x00, 0x00, 0x0e, -0x44, 0x50, 0x00, 0x06, 0x4c, 0x82, 0xc0, 0x0e, 0x44, 0x40, 0x00, 0x01, 0x4c, 0x62, 0x00, 0x06, -0x45, 0xc0, 0x00, 0x02, 0x4c, 0x6e, 0x40, 0x06, 0x44, 0x10, 0x00, 0x00, 0x48, 0x00, 0x00, 0x06, -0x46, 0x1c, 0x00, 0x00, 0x58, 0x10, 0x80, 0xbb, 0x04, 0x2f, 0x80, 0x02, 0x01, 0xe1, 0x00, 0x0b, -0x54, 0x0f, 0x00, 0x01, 0x4e, 0x02, 0x00, 0x08, 0x04, 0x0f, 0x80, 0x03, 0x49, 0xff, 0xf5, 0x70, -0x58, 0x10, 0x00, 0x00, 0x58, 0x00, 0x80, 0x00, 0x51, 0xff, 0x80, 0x2c, 0x3a, 0x6f, 0xaa, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xf4, 0x54, 0x60, 0x00, 0xff, -0x44, 0x00, 0x00, 0x14, 0x49, 0xf7, 0xd8, 0x0a, 0x44, 0x50, 0x0f, 0xff, 0x58, 0x70, 0x00, 0x00, -0x4c, 0x02, 0xc0, 0x06, 0x44, 0x00, 0x01, 0x03, 0x48, 0x00, 0x00, 0x3a, 0x49, 0xf7, 0xd7, 0xd0, -0x44, 0x10, 0x00, 0x14, 0x44, 0x5f, 0xe0, 0x00, 0x44, 0x4f, 0xff, 0xed, 0x44, 0x20, 0x00, 0x00, -0x58, 0x30, 0x00, 0x00, 0x12, 0x10, 0x00, 0x00, 0x10, 0x20, 0x00, 0x05, 0x12, 0x50, 0x00, 0x01, -0x10, 0x40, 0x00, 0x04, 0x50, 0x00, 0x80, 0x06, 0x10, 0x01, 0x80, 0x08, 0x50, 0x21, 0x80, 0x0c, -0x58, 0x03, 0x00, 0x00, 0x50, 0x1f, 0x80, 0x07, 0x49, 0xff, 0xd2, 0x06, 0x58, 0x60, 0x00, 0x00, -0x4e, 0x02, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcd, 0x28, 0x44, 0x20, 0x06, 0x83, -0x49, 0xff, 0xc3, 0x74, 0x48, 0x00, 0x00, 0x00, 0x58, 0x23, 0x80, 0x00, 0x44, 0x10, 0x00, 0x01, -0x58, 0x30, 0x00, 0x00, 0x49, 0xf7, 0xdb, 0xce, 0x58, 0x03, 0x00, 0x00, 0x51, 0xff, 0x80, 0x0c, -0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, 0x04, 0x10, 0x00, 0x02, -0x58, 0x60, 0x00, 0x00, 0x00, 0x20, 0x80, 0x09, 0x3e, 0x0f, 0xcd, 0x54, 0x44, 0x70, 0x00, 0x00, -0x00, 0x50, 0x00, 0x00, 0x50, 0x33, 0x80, 0x01, 0x4c, 0x51, 0x40, 0x12, 0x04, 0x10, 0x00, 0x01, -0x4e, 0x12, 0x00, 0x0e, 0x58, 0x03, 0x00, 0x00, 0x4b, 0xe0, 0x04, 0x01, 0x58, 0x80, 0x00, 0x00, -0x5c, 0xf3, 0x80, 0x18, 0x4e, 0xf3, 0x00, 0x14, 0x48, 0x00, 0x00, 0x0c, 0x40, 0x71, 0x80, 0x13, -0x44, 0x50, 0x00, 0x18, 0x50, 0x00, 0x00, 0x08, 0x4c, 0x72, 0xff, 0xe4, 0x44, 0x80, 0x00, 0x00, -0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xe5, 0xa2, 0x58, 0x04, 0x00, 0x00, -0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, 0x04, 0x60, 0x00, 0x02, -0x58, 0x70, 0x00, 0x00, 0x50, 0x83, 0x00, 0x20, 0x00, 0x04, 0x00, 0x00, 0x44, 0x50, 0x00, 0x01, -0x4c, 0x02, 0xc0, 0x06, 0x49, 0xff, 0xf2, 0xc6, 0x48, 0x00, 0x00, 0x0c, 0x44, 0x50, 0x00, 0x02, -0x4c, 0x02, 0x80, 0x06, 0x44, 0x11, 0x00, 0x03, 0x48, 0x00, 0x00, 0x06, 0x49, 0xff, 0xf2, 0xd2, -0x44, 0x10, 0x00, 0x00, 0x00, 0x33, 0x00, 0x0b, 0x54, 0x01, 0x80, 0x01, 0x4e, 0x02, 0x00, 0x1a, -0x00, 0x04, 0x00, 0x00, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0xc0, 0x0e, 0x3e, 0x07, 0xe5, 0x91, -0x00, 0x23, 0x00, 0x07, 0x3e, 0x27, 0xe5, 0x92, 0x00, 0x63, 0x00, 0x09, 0x3e, 0x67, 0xe5, 0x93, -0x48, 0x00, 0x00, 0x08, 0x58, 0x03, 0x80, 0x00, 0x49, 0xff, 0xf4, 0xa2, 0x58, 0x10, 0x00, 0x00, -0x58, 0x00, 0x80, 0x00, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, -0x51, 0xff, 0xff, 0xf4, 0x04, 0xa0, 0x00, 0x02, 0x44, 0x00, 0x00, 0x24, 0x00, 0x25, 0x00, 0x07, -0x14, 0x2f, 0x80, 0x01, 0x04, 0x85, 0x00, 0x08, 0x49, 0xf7, 0xd7, 0x38, 0x44, 0x50, 0x0f, 0xff, -0x59, 0xc0, 0x00, 0x00, 0x4c, 0x02, 0xc0, 0x06, 0x44, 0x00, 0x01, 0x03, 0x48, 0x00, 0x00, 0x60, -0x49, 0xf7, 0xd6, 0xfe, 0x50, 0x70, 0x00, 0x0c, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x24, -0x54, 0x94, 0x00, 0x0f, 0x58, 0x60, 0x00, 0x00, 0x49, 0xf7, 0xd1, 0x68, 0x14, 0x83, 0x80, 0x00, -0x4e, 0x92, 0x00, 0x06, 0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x16, 0x00, 0xa5, 0x00, 0x06, -0x44, 0x50, 0x00, 0x01, 0x4c, 0xa2, 0xc0, 0x14, 0x3c, 0x4d, 0xff, 0xff, 0x58, 0x04, 0x00, 0x00, -0x50, 0x13, 0x00, 0x14, 0x4b, 0xe0, 0x10, 0x01, 0x40, 0x34, 0x80, 0x1b, 0x40, 0x35, 0x00, 0x1a, -0x58, 0x01, 0x80, 0x00, 0x14, 0x03, 0x80, 0x01, 0x48, 0x00, 0x00, 0x12, 0x4e, 0xa3, 0x00, 0x0e, -0x58, 0x04, 0x00, 0x00, 0x50, 0x13, 0x00, 0x14, 0x50, 0x23, 0x00, 0x10, 0x44, 0x30, 0x00, 0x01, -0x49, 0xf7, 0xf6, 0xec, 0x48, 0x00, 0x00, 0x04, 0x14, 0x93, 0x80, 0x01, 0x44, 0x30, 0x00, 0x01, -0x44, 0x00, 0x00, 0x24, 0x44, 0x2f, 0xe0, 0x00, 0x44, 0x1f, 0xff, 0xed, 0x10, 0x33, 0x00, 0x08, -0x12, 0x03, 0x00, 0x00, 0x12, 0x23, 0x00, 0x01, 0x10, 0x13, 0x00, 0x04, 0x44, 0x00, 0x00, 0x00, -0x05, 0xef, 0x80, 0x01, 0x58, 0x2e, 0x00, 0x00, 0x11, 0xe3, 0x00, 0x05, 0x44, 0x10, 0x00, 0x01, -0x58, 0x30, 0x00, 0x00, 0x49, 0xf7, 0xda, 0xd6, 0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x0c, -0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0xfc, -0x04, 0x70, 0x00, 0x02, 0x00, 0x03, 0x80, 0x06, 0x50, 0x63, 0x80, 0x20, 0x4e, 0x02, 0x00, 0x10, -0x04, 0x03, 0x00, 0x01, 0x04, 0x13, 0x00, 0x02, 0x04, 0x23, 0x00, 0x00, 0x49, 0x00, 0x39, 0x50, -0x00, 0x13, 0x80, 0x0b, 0x54, 0x00, 0x80, 0x01, 0x4e, 0x02, 0x00, 0x56, 0x00, 0x23, 0x80, 0x06, -0x4e, 0x22, 0x00, 0x08, 0x00, 0x33, 0x80, 0x0b, 0x54, 0x01, 0x80, 0x01, 0x4e, 0x02, 0x00, 0x4c, -0x44, 0x00, 0x00, 0x18, 0x00, 0x93, 0x80, 0x07, 0x49, 0xf7, 0xd6, 0xa0, 0x44, 0x50, 0x0f, 0xff, -0x58, 0x80, 0x00, 0x00, 0x4c, 0x02, 0xc0, 0x06, 0x44, 0x00, 0x01, 0x03, 0x48, 0x00, 0x00, 0x3c, -0x49, 0xf7, 0xd6, 0x66, 0x44, 0x20, 0x00, 0x18, 0x44, 0x10, 0x00, 0x00, 0x58, 0x70, 0x00, 0x00, -0x49, 0xf7, 0xd0, 0xd4, 0x44, 0x40, 0x00, 0x18, 0x44, 0x3f, 0xe0, 0x00, 0x44, 0x2f, 0xff, 0xed, -0x44, 0x10, 0x00, 0x02, 0x12, 0x43, 0x80, 0x00, 0x12, 0x33, 0x80, 0x01, 0x10, 0x23, 0x80, 0x04, -0x10, 0x93, 0x80, 0x05, 0x10, 0x13, 0x80, 0x08, 0x50, 0x73, 0x80, 0x0c, 0x04, 0x03, 0x00, 0x00, -0x14, 0x03, 0x80, 0x00, 0x04, 0x53, 0x00, 0x01, 0x14, 0x53, 0x80, 0x01, 0x04, 0x13, 0x00, 0x00, -0x04, 0x03, 0x00, 0x01, 0x49, 0x00, 0x39, 0x22, 0x14, 0x03, 0x80, 0x02, 0x44, 0x00, 0x00, 0x00, -0x58, 0x24, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, 0x58, 0x30, 0x00, 0x00, 0x49, 0xf7, 0xda, 0x62, -0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xec, 0x04, 0x60, 0x00, 0x02, 0x44, 0x10, 0x00, 0x0c, -0x03, 0xc3, 0x00, 0x00, 0x58, 0x80, 0x00, 0x00, 0x51, 0xce, 0x7f, 0xe0, 0x40, 0x3e, 0x05, 0x57, -0x00, 0x03, 0x00, 0x07, 0x50, 0x73, 0x00, 0x20, 0x14, 0x0f, 0x80, 0x03, 0x14, 0x3f, 0x80, 0x02, -0x4e, 0xa2, 0x00, 0x0e, 0x44, 0x40, 0x00, 0x00, 0x44, 0x20, 0xff, 0xff, 0x14, 0x43, 0x80, 0x02, -0x14, 0x23, 0x80, 0x00, 0x14, 0x43, 0x80, 0x01, 0x48, 0x00, 0x00, 0x76, 0x00, 0x03, 0x00, 0x06, -0x50, 0x93, 0x00, 0x28, 0x4e, 0x02, 0x00, 0x3c, 0x3f, 0xcf, 0x83, 0x48, 0x48, 0x00, 0x00, 0x24, -0x04, 0x23, 0x80, 0x00, 0x54, 0x01, 0x00, 0xff, 0x4e, 0x03, 0x00, 0x0a, 0x04, 0x53, 0x80, 0x01, -0x04, 0x14, 0x80, 0x00, 0x14, 0x12, 0x80, 0x00, 0x48, 0x00, 0x00, 0x0e, 0x44, 0x50, 0x00, 0x01, -0x4c, 0x02, 0xc0, 0x0a, 0x04, 0x03, 0x80, 0x01, 0x04, 0x14, 0x80, 0x00, 0x40, 0x21, 0x20, 0x09, -0x4b, 0xe0, 0x70, 0x01, 0x50, 0xa5, 0x00, 0x01, 0x50, 0x73, 0x80, 0x0c, 0x40, 0xa5, 0x00, 0x13, -0x50, 0x94, 0x80, 0x0c, 0x04, 0x3f, 0x80, 0x02, 0x40, 0xf5, 0x0c, 0x06, 0x4e, 0xf3, 0xff, 0xda, -0x50, 0x03, 0x00, 0x20, 0x44, 0x40, 0x00, 0x00, 0x14, 0x40, 0x00, 0x02, 0x14, 0x40, 0x00, 0x00, -0x14, 0x40, 0x00, 0x01, 0x44, 0x10, 0x00, 0x0c, 0x48, 0x00, 0x00, 0x36, 0x58, 0xa0, 0x00, 0x00, -0x3e, 0x2f, 0x83, 0x84, 0x48, 0x00, 0x00, 0x28, 0x04, 0x13, 0x80, 0x00, 0x54, 0x00, 0x80, 0xff, -0x4e, 0x03, 0x00, 0x0a, 0x04, 0x13, 0x80, 0x01, 0x04, 0x50, 0x80, 0x00, 0x14, 0x54, 0x80, 0x00, -0x48, 0x00, 0x00, 0x12, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0xc0, 0x0e, 0x04, 0x03, 0x80, 0x01, -0x14, 0x2f, 0x80, 0x01, 0x40, 0x10, 0xa0, 0x09, 0x4b, 0xe0, 0x08, 0x01, 0x14, 0x04, 0x80, 0x00, -0x04, 0x2f, 0x80, 0x01, 0x50, 0xa5, 0x00, 0x01, 0x50, 0x73, 0x80, 0x0c, 0x40, 0xa5, 0x00, 0x13, -0x50, 0x94, 0x80, 0x0c, 0x04, 0x3f, 0x80, 0x02, 0x40, 0xf5, 0x0c, 0x06, 0x4e, 0xf3, 0xff, 0xd6, -0x58, 0x1e, 0x00, 0x00, 0x00, 0x23, 0x00, 0x06, 0x4e, 0x22, 0x00, 0x08, 0x00, 0x03, 0x00, 0x0b, -0x54, 0x00, 0x00, 0x01, 0x4e, 0x02, 0x00, 0x22, 0x50, 0x00, 0x80, 0x20, 0x44, 0x2f, 0xff, 0xed, -0x44, 0x30, 0x00, 0x0e, 0x12, 0x03, 0x00, 0x00, 0x10, 0x23, 0x00, 0x04, 0x10, 0x33, 0x00, 0x08, -0x44, 0x10, 0x00, 0x01, 0x05, 0xef, 0x80, 0x03, 0x44, 0x4f, 0xe0, 0x00, 0x11, 0xe3, 0x00, 0x05, -0x10, 0x14, 0x00, 0x10, 0x04, 0x54, 0x00, 0x02, 0x58, 0x04, 0x00, 0x00, 0x12, 0x42, 0x80, 0x01, -0x49, 0xff, 0xe9, 0x82, 0x44, 0x00, 0x00, 0x01, 0x51, 0xff, 0x80, 0x14, 0x3a, 0x6f, 0xaa, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x49, 0x00, 0x00, 0x1a, -0x2e, 0x07, 0xe5, 0x90, 0x4e, 0x02, 0x00, 0x04, 0x49, 0x00, 0x06, 0x3e, 0x51, 0xff, 0x80, 0x04, +0x40, 0x22, 0x00, 0x10, 0x48, 0x00, 0x00, 0x04, 0x44, 0x20, 0x00, 0x00, 0x2e, 0x67, 0xdf, 0xbe, +0x54, 0x03, 0x00, 0x20, 0x4e, 0x02, 0x00, 0x30, 0x44, 0x4f, 0xff, 0xf8, 0x42, 0x50, 0x90, 0x00, +0x44, 0x30, 0x00, 0x07, 0x46, 0x06, 0x02, 0x00, 0x42, 0x12, 0x8c, 0x01, 0x05, 0xe0, 0x03, 0x43, +0x40, 0x60, 0x90, 0x08, 0x54, 0x13, 0x00, 0xff, 0x44, 0x6f, 0xff, 0x00, 0x40, 0x5f, 0x18, 0x02, +0x41, 0xe0, 0x94, 0x04, 0x15, 0xe0, 0x03, 0x43, 0x46, 0x06, 0x02, 0x01, 0x42, 0x11, 0x10, 0x00, +0x42, 0x50, 0x8c, 0x01, 0x04, 0x20, 0x03, 0x43, 0x41, 0xe2, 0x90, 0x08, 0x54, 0x3f, 0x00, 0xff, +0x40, 0x11, 0x18, 0x02, 0x40, 0x41, 0x84, 0x04, 0x14, 0x40, 0x03, 0x43, 0x44, 0x00, 0x00, 0x00, +0x48, 0x00, 0x00, 0x2c, 0x44, 0x5f, 0xff, 0xc0, 0x42, 0x10, 0x94, 0x00, 0x44, 0x40, 0x00, 0x3f, +0x46, 0x36, 0x02, 0x00, 0x43, 0xe0, 0x90, 0x01, 0x04, 0x61, 0x83, 0x46, 0x40, 0x7f, 0x78, 0x00, +0x54, 0x13, 0x80, 0xff, 0x44, 0x7f, 0xff, 0x00, 0x40, 0x63, 0x1c, 0x02, 0x41, 0xe0, 0x98, 0x04, +0x15, 0xe1, 0x83, 0x46, 0x47, 0xe6, 0x02, 0x01, 0x42, 0x31, 0x14, 0x00, 0x42, 0x21, 0x90, 0x01, +0x04, 0x1f, 0x03, 0x46, 0x40, 0x51, 0x08, 0x00, 0x54, 0x42, 0x80, 0xff, 0x40, 0x30, 0x9c, 0x02, +0x40, 0x22, 0x0c, 0x04, 0x14, 0x2f, 0x03, 0x46, 0x51, 0xff, 0x80, 0x4c, 0x3a, 0x6f, 0xaa, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x04, 0x70, 0x00, 0x02, +0x3e, 0x2f, 0xdf, 0xbc, 0x50, 0x13, 0x80, 0x20, 0x00, 0x40, 0x80, 0x01, 0x58, 0x60, 0x00, 0x00, +0x10, 0x41, 0x00, 0x02, 0x00, 0x30, 0x80, 0x02, 0x10, 0x31, 0x00, 0x01, 0x01, 0xe0, 0x80, 0x03, +0x11, 0xe1, 0x00, 0x0a, 0x00, 0x50, 0x80, 0x04, 0x10, 0x51, 0x00, 0x10, 0x00, 0x00, 0x80, 0x05, +0x10, 0x01, 0x00, 0x14, 0x00, 0x40, 0x80, 0x06, 0x10, 0x41, 0x00, 0x15, 0x00, 0x30, 0x80, 0x07, +0x10, 0x31, 0x00, 0x16, 0x01, 0xe0, 0x80, 0x08, 0x11, 0xe1, 0x00, 0x17, 0x00, 0x50, 0x80, 0x09, +0x10, 0x51, 0x00, 0x18, 0x00, 0x00, 0x80, 0x0a, 0x10, 0x01, 0x00, 0x19, 0x00, 0x40, 0x80, 0x0b, +0x10, 0x41, 0x00, 0x1a, 0x00, 0x30, 0x80, 0x0c, 0x10, 0x31, 0x00, 0x1b, 0x01, 0xe0, 0x80, 0x0d, +0x11, 0xe1, 0x00, 0x1c, 0x00, 0x50, 0x80, 0x0e, 0x10, 0x51, 0x00, 0x1d, 0x00, 0x00, 0x80, 0x0f, +0x10, 0x01, 0x00, 0x1e, 0x00, 0x40, 0x80, 0x10, 0x10, 0x41, 0x00, 0x1f, 0x00, 0x30, 0x80, 0x11, +0x10, 0x31, 0x00, 0x20, 0x01, 0xe0, 0x80, 0x12, 0x11, 0xe1, 0x00, 0x21, 0x00, 0x50, 0x80, 0x13, +0x10, 0x51, 0x00, 0x04, 0x00, 0x00, 0x80, 0x14, 0x10, 0x01, 0x00, 0x0b, 0x00, 0x40, 0x80, 0x15, +0x10, 0x41, 0x00, 0x0c, 0x00, 0x30, 0x80, 0x16, 0x10, 0x31, 0x00, 0x0d, 0x01, 0xe0, 0x80, 0x17, +0x11, 0xe1, 0x00, 0x11, 0x00, 0x50, 0x80, 0x18, 0x10, 0x51, 0x00, 0x12, 0x00, 0x00, 0x80, 0x19, +0x10, 0x01, 0x00, 0x13, 0x00, 0x40, 0x80, 0x1a, 0x10, 0x41, 0x00, 0x28, 0x00, 0x30, 0x80, 0x1b, +0x10, 0x31, 0x00, 0x29, 0x01, 0xe0, 0x80, 0x1c, 0x11, 0xe1, 0x00, 0x2a, 0x00, 0x50, 0x80, 0x1d, +0x10, 0x51, 0x00, 0x2b, 0x00, 0x00, 0x80, 0x1e, 0x10, 0x01, 0x00, 0x2c, 0x00, 0x40, 0x80, 0x1f, +0x10, 0x41, 0x00, 0x2d, 0x00, 0x30, 0x80, 0x20, 0x10, 0x31, 0x00, 0x2e, 0x50, 0x31, 0x00, 0x28, +0x00, 0x00, 0x80, 0x21, 0x10, 0x01, 0x00, 0x2f, 0x01, 0xe0, 0x80, 0x22, 0x11, 0xe1, 0x00, 0x30, +0x00, 0x50, 0x80, 0x23, 0x10, 0x51, 0x00, 0x31, 0x40, 0x02, 0x80, 0x01, 0x00, 0x40, 0x80, 0x24, +0x54, 0x00, 0x00, 0xff, 0x10, 0x41, 0x00, 0x32, 0x01, 0xe0, 0x80, 0x25, 0x11, 0xe1, 0x00, 0x33, +0x00, 0x50, 0x80, 0x26, 0x10, 0x51, 0x00, 0x34, 0x00, 0x40, 0x80, 0x27, 0x10, 0x41, 0x00, 0x35, +0x01, 0xe0, 0x80, 0x28, 0x11, 0xe1, 0x00, 0x36, 0x00, 0x50, 0x80, 0x29, 0x10, 0x51, 0x00, 0x37, +0x00, 0x40, 0x80, 0x2a, 0x10, 0x41, 0x00, 0x38, 0x00, 0x21, 0x80, 0x00, 0x44, 0x50, 0x00, 0x7f, +0x4c, 0x22, 0x80, 0x08, 0x40, 0x40, 0x08, 0x00, 0x4e, 0x22, 0x00, 0x04, 0x10, 0x41, 0x80, 0x00, +0x50, 0x31, 0x80, 0x01, 0x3e, 0x2f, 0xdf, 0xec, 0x4c, 0x31, 0x7f, 0xf0, 0x50, 0x31, 0x80, 0x02, +0x00, 0x21, 0x80, 0x00, 0x44, 0x50, 0x00, 0x7f, 0x4c, 0x22, 0x80, 0x08, 0x40, 0x40, 0x08, 0x00, +0x4e, 0x22, 0x00, 0x04, 0x10, 0x41, 0x80, 0x00, 0x50, 0x31, 0x80, 0x01, 0x3e, 0x5f, 0xdf, 0xf5, +0x4c, 0x32, 0xff, 0xf0, 0x00, 0x30, 0x80, 0x2b, 0x3e, 0x37, 0xe3, 0x2d, 0x00, 0x00, 0x80, 0x00, +0x3e, 0x1f, 0xe0, 0x18, 0x49, 0xff, 0xfc, 0x48, 0x00, 0x13, 0x80, 0x0b, 0x54, 0x00, 0x80, 0x01, +0x4e, 0x02, 0x00, 0x08, 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, 0x49, 0xff, 0xf8, 0x1e, +0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, +0x04, 0x80, 0x00, 0x02, 0x58, 0x70, 0x00, 0x00, 0x50, 0x64, 0x00, 0x20, 0x00, 0x03, 0x00, 0x00, +0x4e, 0x02, 0x00, 0x1c, 0x49, 0x00, 0x0c, 0x8a, 0x4e, 0x02, 0x00, 0x08, 0x46, 0x0c, 0x00, 0x00, +0x58, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x20, 0x20, 0x43, 0x00, 0x06, 0x00, 0x03, 0x00, 0x02, +0x00, 0x13, 0x00, 0x03, 0x00, 0x23, 0x00, 0x04, 0x20, 0x33, 0x00, 0x05, 0x49, 0x00, 0x0c, 0x50, +0x49, 0x00, 0x11, 0x58, 0x48, 0x00, 0x00, 0x04, 0x49, 0x00, 0x0e, 0xbc, 0x00, 0x14, 0x00, 0x0b, +0x54, 0x00, 0x80, 0x01, 0x4e, 0x02, 0x00, 0x08, 0x58, 0x03, 0x80, 0x00, 0x44, 0x10, 0x00, 0x00, +0x49, 0xff, 0xf7, 0xe4, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, +0x51, 0xff, 0xff, 0xfc, 0x04, 0x70, 0x00, 0x02, 0x58, 0x90, 0x00, 0x00, 0x02, 0x13, 0x80, 0x00, +0x50, 0x03, 0x80, 0x20, 0x5c, 0xf0, 0x80, 0x44, 0x4e, 0xf2, 0x00, 0x08, 0x3e, 0x1f, 0xe0, 0x18, +0x44, 0x2f, 0xff, 0xff, 0x48, 0x00, 0x00, 0x3e, 0x3e, 0x1f, 0xe0, 0x18, 0x50, 0x33, 0x80, 0x2c, +0x58, 0x20, 0x80, 0x00, 0x48, 0x00, 0x00, 0x06, 0x08, 0x41, 0x80, 0x01, 0x18, 0x41, 0x00, 0x01, +0x50, 0x50, 0x80, 0x15, 0x4c, 0x22, 0xff, 0xfa, 0x2e, 0x27, 0xe3, 0xc0, 0x4e, 0x22, 0x00, 0x2e, +0x2e, 0x87, 0xdf, 0xc6, 0x2e, 0xa7, 0xe0, 0x02, 0x44, 0x40, 0x00, 0x00, 0x40, 0x65, 0x20, 0x01, +0x54, 0x33, 0x00, 0xff, 0x48, 0x00, 0x00, 0x16, 0x00, 0x20, 0x80, 0x00, 0x45, 0xe0, 0x00, 0xff, +0x4c, 0x2f, 0x00, 0x0e, 0x40, 0x51, 0x0c, 0x01, 0x40, 0xf1, 0x0c, 0x06, 0x4e, 0xf2, 0x00, 0x06, +0x10, 0x40, 0x80, 0x00, 0x48, 0x00, 0x00, 0x04, 0x10, 0x50, 0x80, 0x00, 0x50, 0x10, 0x80, 0x01, +0x3e, 0x5f, 0xe0, 0x2d, 0x4c, 0x12, 0xff, 0xea, 0x48, 0x00, 0x00, 0x08, 0x18, 0x20, 0x80, 0x01, +0x3e, 0x4f, 0xe0, 0x2d, 0x4c, 0x12, 0x7f, 0xfc, 0x00, 0x10, 0x00, 0x00, 0x00, 0x80, 0x00, 0x01, +0x3e, 0x28, 0x02, 0x85, 0x40, 0xa4, 0x04, 0x06, 0x44, 0x00, 0x00, 0x03, 0x01, 0xe1, 0x00, 0x00, +0x46, 0x40, 0x02, 0x4b, 0x46, 0x50, 0x04, 0xc4, 0x44, 0x60, 0x00, 0x00, 0x40, 0x23, 0x28, 0x1a, +0x40, 0x20, 0x28, 0x1b, 0x58, 0x42, 0x0a, 0x58, 0x58, 0x52, 0x8b, 0x40, 0x5d, 0xc0, 0x80, 0x0f, +0x40, 0xa0, 0xa0, 0x06, 0x44, 0x30, 0x00, 0x01, 0x40, 0x02, 0x70, 0x1b, 0x40, 0x02, 0xf0, 0x1a, +0x40, 0x21, 0xa8, 0x1b, 0x4f, 0xe2, 0x00, 0x14, 0x2f, 0xe0, 0x02, 0x86, 0x4f, 0xe2, 0x00, 0x10, +0x2e, 0x50, 0x02, 0x87, 0x4e, 0x52, 0x00, 0x0c, 0x58, 0x33, 0x00, 0x00, 0x58, 0x43, 0x00, 0x00, +0x58, 0x53, 0x00, 0x00, 0x49, 0x00, 0x0a, 0xa6, 0x48, 0x00, 0x00, 0x06, 0x46, 0x6c, 0x00, 0x00, +0x58, 0x63, 0x00, 0x01, 0x3e, 0x1f, 0xe0, 0x18, 0x58, 0x04, 0x00, 0x00, 0x49, 0xff, 0xfb, 0x64, +0x00, 0x03, 0x80, 0x0b, 0x54, 0x10, 0x00, 0x01, 0x4e, 0x12, 0x00, 0x0a, 0x58, 0x13, 0x00, 0x00, +0x58, 0x04, 0x80, 0x00, 0x49, 0xff, 0xf7, 0x3a, 0x58, 0x60, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, +0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, +0x51, 0xff, 0xff, 0xd4, 0x14, 0x0f, 0x80, 0x03, 0x44, 0x40, 0x00, 0x01, 0x04, 0x00, 0x00, 0x02, +0x14, 0x0f, 0x80, 0x02, 0x50, 0x70, 0x00, 0x20, 0x00, 0x63, 0x80, 0x01, 0x00, 0x83, 0x80, 0x00, +0x4c, 0x62, 0x40, 0x06, 0x49, 0x00, 0x04, 0x9e, 0x48, 0x00, 0x00, 0x08, 0x44, 0x10, 0x00, 0x02, +0x4c, 0x60, 0xc0, 0x04, 0x49, 0x00, 0x04, 0xb2, 0x44, 0x20, 0x00, 0x04, 0x4c, 0x81, 0x41, 0x5c, +0x44, 0x30, 0x00, 0x01, 0x4c, 0x61, 0xc1, 0x2c, 0x2e, 0x57, 0xdf, 0xb8, 0x44, 0x90, 0x00, 0x02, +0x4c, 0x54, 0xc1, 0x86, 0x00, 0xa3, 0x80, 0x1e, 0x01, 0xe3, 0x80, 0x08, 0x40, 0x55, 0x28, 0x00, +0x40, 0x92, 0xf8, 0x00, 0x40, 0x3f, 0x78, 0x00, 0x40, 0x44, 0x8c, 0xb6, 0x02, 0x23, 0x80, 0x05, +0x44, 0x10, 0x00, 0x0a, 0x14, 0x2f, 0x80, 0x04, 0x50, 0x9f, 0x80, 0x27, 0x05, 0xc3, 0x80, 0x03, +0x3e, 0x3e, 0xb2, 0x60, 0x15, 0xcf, 0x80, 0x06, 0x58, 0x5f, 0x00, 0x00, 0x04, 0x83, 0x80, 0x04, +0x50, 0x73, 0x80, 0x02, 0x14, 0x8f, 0x80, 0x05, 0x14, 0x7f, 0x80, 0x07, 0x45, 0xc0, 0x00, 0x00, +0x50, 0x8f, 0x80, 0x20, 0x54, 0x62, 0x00, 0xff, 0x5c, 0x03, 0x00, 0x0a, 0x40, 0x60, 0x80, 0x1b, +0x58, 0xa3, 0x00, 0x00, 0x14, 0x3f, 0x80, 0x01, 0x14, 0x5f, 0x80, 0x00, 0x58, 0x0e, 0x00, 0x00, +0x58, 0x24, 0x00, 0x00, 0x58, 0x14, 0x80, 0x00, 0x4b, 0xe0, 0x0c, 0x01, 0x04, 0x1f, 0x80, 0x07, +0x58, 0x04, 0x00, 0x00, 0x44, 0x20, 0x00, 0x06, 0x49, 0xf7, 0xd4, 0x0a, 0x54, 0x6e, 0x00, 0xff, +0x04, 0x3f, 0x80, 0x01, 0x51, 0xce, 0x00, 0x01, 0x04, 0x5f, 0x80, 0x00, 0x4e, 0x03, 0x00, 0x08, +0x58, 0x45, 0x00, 0x00, 0x58, 0xa2, 0x80, 0x00, 0x48, 0x00, 0x00, 0x0c, 0x44, 0x60, 0x00, 0x03, +0x4d, 0xc3, 0x7f, 0xda, 0x58, 0x45, 0x00, 0x00, 0x44, 0x60, 0x00, 0x00, 0x58, 0xa2, 0x80, 0x00, +0x04, 0x7f, 0x80, 0x05, 0x46, 0x86, 0x01, 0x40, 0x14, 0x74, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, +0x05, 0xef, 0x80, 0x06, 0x14, 0x4f, 0x80, 0x01, 0x40, 0x7f, 0x00, 0x13, 0x58, 0x13, 0x80, 0x00, +0x49, 0xff, 0xdb, 0x9e, 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xdb, 0xf2, +0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xda, 0xf4, 0x58, 0x03, 0x00, 0x00, +0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xdb, 0x30, 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, +0x49, 0xff, 0xdc, 0x82, 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, 0x49, 0xff, 0xd7, 0xc4, +0x44, 0x10, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xd8, 0xde, 0x58, 0x03, 0x00, 0x00, +0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xd7, 0xb8, 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, +0x49, 0xff, 0xd8, 0xd2, 0x04, 0x4f, 0x80, 0x01, 0x44, 0x20, 0x00, 0x01, 0x44, 0x30, 0x00, 0x64, +0x44, 0x10, 0x00, 0x05, 0x44, 0x00, 0x00, 0x00, 0x49, 0xff, 0xde, 0xb6, 0x58, 0x03, 0x00, 0x00, +0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xd8, 0x0e, 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, +0x49, 0xff, 0xd8, 0x78, 0x44, 0x00, 0x00, 0x01, 0x58, 0x20, 0x00, 0x00, 0x44, 0x30, 0x00, 0x64, +0x44, 0x40, 0x00, 0x00, 0x44, 0x10, 0x00, 0x05, 0x49, 0xff, 0xd8, 0xf0, 0x44, 0x40, 0x00, 0x01, +0x04, 0x1f, 0x80, 0x04, 0x58, 0x52, 0x00, 0x00, 0x44, 0x30, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, +0x58, 0x25, 0x00, 0x00, 0x49, 0xff, 0xdd, 0xfa, 0x50, 0x25, 0x7f, 0xff, 0x54, 0x11, 0x00, 0xff, +0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xda, 0x5c, 0x44, 0x10, 0x00, 0x01, 0x58, 0x20, 0x80, 0x00, +0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xdd, 0x86, 0x46, 0x36, 0x03, 0x00, 0x04, 0x01, 0x80, 0x17, +0x46, 0x26, 0x03, 0x00, 0x58, 0x10, 0x00, 0x01, 0x14, 0x11, 0x80, 0x17, 0x58, 0x21, 0x00, 0x30, +0x04, 0x51, 0x00, 0x00, 0x40, 0x02, 0xa0, 0x09, 0x40, 0x00, 0x20, 0x08, 0x14, 0x01, 0x00, 0x00, +0x44, 0x10, 0x00, 0x01, 0x04, 0x31, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, 0x58, 0x41, 0x80, 0x50, +0x14, 0x41, 0x00, 0x00, 0x49, 0xff, 0xdc, 0xcc, 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, +0x49, 0xff, 0xe1, 0x76, 0x3e, 0x1f, 0xf7, 0xa8, 0x00, 0x00, 0x80, 0xb4, 0x44, 0x50, 0x00, 0x02, +0x44, 0x20, 0x00, 0x01, 0x3e, 0x57, 0xe2, 0x1c, 0x10, 0x20, 0x80, 0xb5, 0x12, 0x70, 0x80, 0x04, +0x4e, 0x02, 0x00, 0x06, 0x44, 0x00, 0x00, 0x01, 0x49, 0x00, 0x27, 0x52, 0x49, 0xff, 0xd7, 0x24, +0x44, 0x40, 0x00, 0x01, 0x3e, 0x47, 0xdf, 0xb8, 0x48, 0x00, 0x00, 0x5e, 0x45, 0xc0, 0x00, 0x02, +0x4c, 0x6e, 0x40, 0x5e, 0x2e, 0x97, 0xdf, 0xb8, 0x44, 0xa0, 0x00, 0x01, 0x4c, 0x95, 0x40, 0x58, +0x04, 0x73, 0x80, 0x04, 0x46, 0x96, 0x01, 0x40, 0x49, 0xff, 0xde, 0xa2, 0x49, 0xff, 0xd7, 0x14, +0x44, 0x00, 0x00, 0x00, 0x58, 0x10, 0x00, 0x00, 0x49, 0xff, 0xe1, 0x42, 0x14, 0x74, 0x80, 0x00, +0x46, 0x56, 0x01, 0x40, 0x05, 0xc2, 0x80, 0x20, 0x44, 0x20, 0x00, 0x00, 0x42, 0x4e, 0x08, 0x09, +0x14, 0x42, 0x80, 0x20, 0x3e, 0x27, 0xe2, 0x1c, 0x3e, 0x67, 0xdf, 0xb8, 0x3e, 0x27, 0xf8, 0x5d, +0x48, 0x00, 0x00, 0x32, 0x45, 0xe0, 0x00, 0x05, 0x4c, 0x8f, 0x40, 0x22, 0x44, 0xa0, 0x00, 0x01, +0x4c, 0x65, 0x40, 0x0c, 0x3e, 0x7f, 0xdf, 0xb9, 0x44, 0x10, 0x00, 0x02, 0x10, 0x13, 0x80, 0x00, +0x49, 0xff, 0xd6, 0xe2, 0x48, 0x00, 0x00, 0x10, 0x44, 0x20, 0x00, 0x02, 0x4c, 0x61, 0x40, 0x20, +0x44, 0x30, 0x00, 0x01, 0x3e, 0x7f, 0xdf, 0xb9, 0x10, 0x33, 0x80, 0x00, 0x49, 0xff, 0xde, 0x68, +0x49, 0xff, 0xd6, 0xda, 0x10, 0x63, 0x80, 0x00, 0x48, 0x00, 0x00, 0x0e, 0x44, 0x50, 0x00, 0x06, +0x4c, 0x82, 0xc0, 0x0e, 0x44, 0x40, 0x00, 0x01, 0x4c, 0x62, 0x00, 0x06, 0x45, 0xc0, 0x00, 0x02, +0x4c, 0x6e, 0x40, 0x06, 0x44, 0x10, 0x00, 0x00, 0x48, 0x00, 0x00, 0x06, 0x46, 0x1c, 0x00, 0x00, +0x58, 0x10, 0x80, 0xbb, 0x04, 0x2f, 0x80, 0x02, 0x01, 0xe1, 0x00, 0x0b, 0x54, 0x0f, 0x00, 0x01, +0x4e, 0x02, 0x00, 0x08, 0x04, 0x0f, 0x80, 0x03, 0x49, 0xff, 0xf5, 0x70, 0x58, 0x10, 0x00, 0x00, +0x58, 0x00, 0x80, 0x00, 0x51, 0xff, 0x80, 0x2c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xf4, 0x54, 0x60, 0x00, 0xff, 0x44, 0x00, 0x00, 0x14, +0x49, 0xf7, 0xd7, 0xc4, 0x44, 0x50, 0x0f, 0xff, 0x58, 0x70, 0x00, 0x00, 0x4c, 0x02, 0xc0, 0x06, +0x44, 0x00, 0x01, 0x03, 0x48, 0x00, 0x00, 0x3a, 0x49, 0xf7, 0xd7, 0x8a, 0x44, 0x10, 0x00, 0x14, +0x44, 0x5f, 0xe0, 0x00, 0x44, 0x4f, 0xff, 0xed, 0x44, 0x20, 0x00, 0x00, 0x58, 0x30, 0x00, 0x00, +0x12, 0x10, 0x00, 0x00, 0x10, 0x20, 0x00, 0x05, 0x12, 0x50, 0x00, 0x01, 0x10, 0x40, 0x00, 0x04, +0x50, 0x00, 0x80, 0x06, 0x10, 0x01, 0x80, 0x08, 0x50, 0x21, 0x80, 0x0c, 0x58, 0x03, 0x00, 0x00, +0x50, 0x1f, 0x80, 0x07, 0x49, 0xff, 0xd1, 0xc0, 0x58, 0x60, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x0c, +0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xca, 0xd4, 0x44, 0x20, 0x06, 0x8f, 0x49, 0xff, 0xc3, 0x2e, +0x48, 0x00, 0x00, 0x00, 0x58, 0x23, 0x80, 0x00, 0x44, 0x10, 0x00, 0x01, 0x58, 0x30, 0x00, 0x00, +0x49, 0xf7, 0xdb, 0x88, 0x58, 0x03, 0x00, 0x00, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0x9c, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, 0x04, 0x10, 0x00, 0x02, 0x58, 0x60, 0x00, 0x00, +0x00, 0x20, 0x80, 0x09, 0x3e, 0x0f, 0xcb, 0x00, 0x44, 0x70, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, +0x50, 0x33, 0x80, 0x01, 0x4c, 0x51, 0x40, 0x12, 0x04, 0x10, 0x00, 0x01, 0x4e, 0x12, 0x00, 0x0e, +0x58, 0x03, 0x00, 0x00, 0x4b, 0xe0, 0x04, 0x01, 0x58, 0x80, 0x00, 0x00, 0x5c, 0xf3, 0x80, 0x18, +0x4e, 0xf3, 0x00, 0x14, 0x48, 0x00, 0x00, 0x0c, 0x40, 0x71, 0x80, 0x13, 0x44, 0x50, 0x00, 0x18, +0x50, 0x00, 0x00, 0x08, 0x4c, 0x72, 0xff, 0xe4, 0x44, 0x80, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, +0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xe5, 0x62, 0x58, 0x04, 0x00, 0x00, 0x3a, 0x6f, 0xa0, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, 0x04, 0x60, 0x00, 0x02, 0x58, 0x70, 0x00, 0x00, +0x50, 0x83, 0x00, 0x20, 0x00, 0x04, 0x00, 0x00, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0xc0, 0x06, +0x49, 0xff, 0xf2, 0xc6, 0x48, 0x00, 0x00, 0x0c, 0x44, 0x50, 0x00, 0x02, 0x4c, 0x02, 0x80, 0x06, +0x44, 0x11, 0x00, 0x03, 0x48, 0x00, 0x00, 0x06, 0x49, 0xff, 0xf2, 0xd2, 0x44, 0x10, 0x00, 0x00, +0x00, 0x33, 0x00, 0x0b, 0x54, 0x01, 0x80, 0x01, 0x4e, 0x02, 0x00, 0x1a, 0x00, 0x04, 0x00, 0x00, +0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0xc0, 0x0e, 0x3e, 0x07, 0xe3, 0x31, 0x00, 0x23, 0x00, 0x07, +0x3e, 0x27, 0xe3, 0x32, 0x00, 0x63, 0x00, 0x09, 0x3e, 0x67, 0xe3, 0x33, 0x48, 0x00, 0x00, 0x08, +0x58, 0x03, 0x80, 0x00, 0x49, 0xff, 0xf4, 0xa2, 0x58, 0x10, 0x00, 0x00, 0x58, 0x00, 0x80, 0x00, +0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xf4, +0x04, 0xa0, 0x00, 0x02, 0x44, 0x00, 0x00, 0x24, 0x00, 0x25, 0x00, 0x07, 0x14, 0x2f, 0x80, 0x01, +0x04, 0x85, 0x00, 0x08, 0x49, 0xf7, 0xd6, 0xf2, 0x44, 0x50, 0x0f, 0xff, 0x59, 0xc0, 0x00, 0x00, +0x4c, 0x02, 0xc0, 0x06, 0x44, 0x00, 0x01, 0x03, 0x48, 0x00, 0x00, 0x60, 0x49, 0xf7, 0xd6, 0xb8, +0x50, 0x70, 0x00, 0x0c, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x24, 0x54, 0x94, 0x00, 0x0f, +0x58, 0x60, 0x00, 0x00, 0x49, 0xf7, 0xd1, 0x22, 0x14, 0x83, 0x80, 0x00, 0x4e, 0x92, 0x00, 0x06, +0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x16, 0x00, 0xa5, 0x00, 0x06, 0x44, 0x50, 0x00, 0x01, +0x4c, 0xa2, 0xc0, 0x14, 0x3c, 0x4d, 0xff, 0xff, 0x58, 0x04, 0x00, 0x00, 0x50, 0x13, 0x00, 0x14, +0x4b, 0xe0, 0x10, 0x01, 0x40, 0x34, 0x80, 0x1b, 0x40, 0x35, 0x00, 0x1a, 0x58, 0x01, 0x80, 0x00, +0x14, 0x03, 0x80, 0x01, 0x48, 0x00, 0x00, 0x12, 0x4e, 0xa3, 0x00, 0x0e, 0x58, 0x04, 0x00, 0x00, +0x50, 0x13, 0x00, 0x14, 0x50, 0x23, 0x00, 0x10, 0x44, 0x30, 0x00, 0x01, 0x49, 0xf7, 0xf6, 0xa6, +0x48, 0x00, 0x00, 0x04, 0x14, 0x93, 0x80, 0x01, 0x44, 0x30, 0x00, 0x01, 0x44, 0x00, 0x00, 0x24, +0x44, 0x2f, 0xe0, 0x00, 0x44, 0x1f, 0xff, 0xed, 0x10, 0x33, 0x00, 0x08, 0x12, 0x03, 0x00, 0x00, +0x12, 0x23, 0x00, 0x01, 0x10, 0x13, 0x00, 0x04, 0x44, 0x00, 0x00, 0x00, 0x05, 0xef, 0x80, 0x01, +0x58, 0x2e, 0x00, 0x00, 0x11, 0xe3, 0x00, 0x05, 0x44, 0x10, 0x00, 0x01, 0x58, 0x30, 0x00, 0x00, +0x49, 0xf7, 0xda, 0x90, 0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x04, 0x70, 0x00, 0x02, +0x00, 0x03, 0x80, 0x06, 0x50, 0x63, 0x80, 0x20, 0x4e, 0x02, 0x00, 0x10, 0x04, 0x03, 0x00, 0x01, +0x04, 0x13, 0x00, 0x02, 0x04, 0x23, 0x00, 0x00, 0x49, 0x00, 0x39, 0xa6, 0x00, 0x13, 0x80, 0x0b, +0x54, 0x00, 0x80, 0x01, 0x4e, 0x02, 0x00, 0x56, 0x00, 0x23, 0x80, 0x06, 0x4e, 0x22, 0x00, 0x08, +0x00, 0x33, 0x80, 0x0b, 0x54, 0x01, 0x80, 0x01, 0x4e, 0x02, 0x00, 0x4c, 0x44, 0x00, 0x00, 0x18, +0x00, 0x93, 0x80, 0x07, 0x49, 0xf7, 0xd6, 0x5a, 0x44, 0x50, 0x0f, 0xff, 0x58, 0x80, 0x00, 0x00, +0x4c, 0x02, 0xc0, 0x06, 0x44, 0x00, 0x01, 0x03, 0x48, 0x00, 0x00, 0x3c, 0x49, 0xf7, 0xd6, 0x20, +0x44, 0x20, 0x00, 0x18, 0x44, 0x10, 0x00, 0x00, 0x58, 0x70, 0x00, 0x00, 0x49, 0xf7, 0xd0, 0x8e, +0x44, 0x40, 0x00, 0x18, 0x44, 0x3f, 0xe0, 0x00, 0x44, 0x2f, 0xff, 0xed, 0x44, 0x10, 0x00, 0x02, +0x12, 0x43, 0x80, 0x00, 0x12, 0x33, 0x80, 0x01, 0x10, 0x23, 0x80, 0x04, 0x10, 0x93, 0x80, 0x05, +0x10, 0x13, 0x80, 0x08, 0x50, 0x73, 0x80, 0x0c, 0x04, 0x03, 0x00, 0x00, 0x14, 0x03, 0x80, 0x00, +0x04, 0x53, 0x00, 0x01, 0x14, 0x53, 0x80, 0x01, 0x04, 0x13, 0x00, 0x00, 0x04, 0x03, 0x00, 0x01, +0x49, 0x00, 0x39, 0x78, 0x14, 0x03, 0x80, 0x02, 0x44, 0x00, 0x00, 0x00, 0x58, 0x24, 0x00, 0x00, +0x44, 0x10, 0x00, 0x01, 0x58, 0x30, 0x00, 0x00, 0x49, 0xf7, 0xda, 0x1c, 0x44, 0x00, 0x00, 0x00, +0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, +0x51, 0xff, 0xff, 0xec, 0x04, 0x60, 0x00, 0x02, 0x44, 0x10, 0x00, 0x0c, 0x03, 0xc3, 0x00, 0x00, +0x58, 0x80, 0x00, 0x00, 0x51, 0xce, 0x7f, 0xe0, 0x40, 0x3e, 0x05, 0x57, 0x00, 0x03, 0x00, 0x07, +0x50, 0x73, 0x00, 0x20, 0x14, 0x0f, 0x80, 0x03, 0x14, 0x3f, 0x80, 0x02, 0x4e, 0xa2, 0x00, 0x0e, +0x44, 0x40, 0x00, 0x00, 0x44, 0x20, 0xff, 0xff, 0x14, 0x43, 0x80, 0x02, 0x14, 0x23, 0x80, 0x00, +0x14, 0x43, 0x80, 0x01, 0x48, 0x00, 0x00, 0x76, 0x00, 0x03, 0x00, 0x06, 0x50, 0x93, 0x00, 0x28, +0x4e, 0x02, 0x00, 0x3c, 0x3f, 0xcf, 0x84, 0x80, 0x48, 0x00, 0x00, 0x24, 0x04, 0x23, 0x80, 0x00, +0x54, 0x01, 0x00, 0xff, 0x4e, 0x03, 0x00, 0x0a, 0x04, 0x53, 0x80, 0x01, 0x04, 0x14, 0x80, 0x00, +0x14, 0x12, 0x80, 0x00, 0x48, 0x00, 0x00, 0x0e, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0xc0, 0x0a, +0x04, 0x03, 0x80, 0x01, 0x04, 0x14, 0x80, 0x00, 0x40, 0x21, 0x20, 0x09, 0x4b, 0xe0, 0x70, 0x01, +0x50, 0xa5, 0x00, 0x01, 0x50, 0x73, 0x80, 0x0c, 0x40, 0xa5, 0x00, 0x13, 0x50, 0x94, 0x80, 0x0c, +0x04, 0x3f, 0x80, 0x02, 0x40, 0xf5, 0x0c, 0x06, 0x4e, 0xf3, 0xff, 0xda, 0x50, 0x03, 0x00, 0x20, +0x44, 0x40, 0x00, 0x00, 0x14, 0x40, 0x00, 0x02, 0x14, 0x40, 0x00, 0x00, 0x14, 0x40, 0x00, 0x01, +0x44, 0x10, 0x00, 0x0c, 0x48, 0x00, 0x00, 0x36, 0x58, 0xa0, 0x00, 0x00, 0x3e, 0x2f, 0x84, 0xbc, +0x48, 0x00, 0x00, 0x28, 0x04, 0x13, 0x80, 0x00, 0x54, 0x00, 0x80, 0xff, 0x4e, 0x03, 0x00, 0x0a, +0x04, 0x13, 0x80, 0x01, 0x04, 0x50, 0x80, 0x00, 0x14, 0x54, 0x80, 0x00, 0x48, 0x00, 0x00, 0x12, +0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0xc0, 0x0e, 0x04, 0x03, 0x80, 0x01, 0x14, 0x2f, 0x80, 0x01, +0x40, 0x10, 0xa0, 0x09, 0x4b, 0xe0, 0x08, 0x01, 0x14, 0x04, 0x80, 0x00, 0x04, 0x2f, 0x80, 0x01, +0x50, 0xa5, 0x00, 0x01, 0x50, 0x73, 0x80, 0x0c, 0x40, 0xa5, 0x00, 0x13, 0x50, 0x94, 0x80, 0x0c, +0x04, 0x3f, 0x80, 0x02, 0x40, 0xf5, 0x0c, 0x06, 0x4e, 0xf3, 0xff, 0xd6, 0x58, 0x1e, 0x00, 0x00, +0x00, 0x23, 0x00, 0x06, 0x4e, 0x22, 0x00, 0x08, 0x00, 0x03, 0x00, 0x0b, 0x54, 0x00, 0x00, 0x01, +0x4e, 0x02, 0x00, 0x22, 0x50, 0x00, 0x80, 0x20, 0x44, 0x2f, 0xff, 0xed, 0x44, 0x30, 0x00, 0x0e, +0x12, 0x03, 0x00, 0x00, 0x10, 0x23, 0x00, 0x04, 0x10, 0x33, 0x00, 0x08, 0x44, 0x10, 0x00, 0x01, +0x05, 0xef, 0x80, 0x03, 0x44, 0x4f, 0xe0, 0x00, 0x11, 0xe3, 0x00, 0x05, 0x10, 0x14, 0x00, 0x10, +0x04, 0x54, 0x00, 0x02, 0x58, 0x04, 0x00, 0x00, 0x12, 0x42, 0x80, 0x01, 0x49, 0xff, 0xe9, 0x70, +0x44, 0x00, 0x00, 0x01, 0x51, 0xff, 0x80, 0x14, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x49, 0x00, 0x00, 0x1a, 0x2e, 0x07, 0xe3, 0x30, +0x4e, 0x02, 0x00, 0x04, 0x49, 0x00, 0x06, 0x3e, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x49, 0x00, 0x06, 0x62, +0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, +0x51, 0xff, 0xff, 0xfc, 0x3e, 0x7f, 0xf6, 0xa8, 0x00, 0x63, 0x80, 0x00, 0x4e, 0x63, 0x00, 0x12, +0x58, 0x13, 0x00, 0x00, 0x44, 0x20, 0x00, 0xa0, 0x50, 0x03, 0x80, 0x08, 0x49, 0xf7, 0xcf, 0x5e, +0x44, 0x20, 0x00, 0x01, 0x10, 0x23, 0x80, 0x00, 0x3c, 0x6f, 0xf8, 0x84, 0x3c, 0x6f, 0xf8, 0x83, +0x46, 0x07, 0xff, 0xff, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x01, 0x58, 0x00, 0x0f, 0xff, +0x49, 0xff, 0xc8, 0xec, 0x49, 0xf7, 0xc9, 0xda, 0x3c, 0x0f, 0xfd, 0xab, 0x51, 0xff, 0x80, 0x04, +0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x54, 0x00, 0x80, 0xff, 0x44, 0x50, 0x00, 0x01, +0x4c, 0x22, 0xc0, 0x06, 0x50, 0x00, 0x00, 0x02, 0x48, 0x00, 0x00, 0x08, 0x44, 0x50, 0x00, 0x03, +0x4c, 0x22, 0xc0, 0x06, 0x50, 0x00, 0x7f, 0xfe, 0x54, 0x00, 0x00, 0xff, 0x4a, 0x00, 0x78, 0x20, +0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x46, 0x10, 0x01, 0x15, 0x2e, 0x07, 0xe3, 0x34, +0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0xc0, 0x0c, 0x44, 0x40, 0x00, 0x00, 0x3e, 0x47, 0xe3, 0x3e, +0x3e, 0x47, 0xe3, 0x34, 0x3e, 0x0f, 0xf7, 0x50, 0x49, 0x00, 0x0d, 0x22, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, -0x49, 0x00, 0x06, 0x62, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x3e, 0x7f, 0xf9, 0x08, 0x00, 0x63, 0x80, 0x00, -0x4e, 0x63, 0x00, 0x12, 0x58, 0x13, 0x00, 0x00, 0x44, 0x20, 0x00, 0xa0, 0x50, 0x03, 0x80, 0x08, -0x49, 0xf7, 0xcf, 0xa4, 0x44, 0x20, 0x00, 0x01, 0x10, 0x23, 0x80, 0x00, 0x3c, 0x6f, 0xf9, 0x1c, -0x3c, 0x6f, 0xf9, 0x1b, 0x46, 0x07, 0xff, 0xff, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x01, -0x58, 0x00, 0x0f, 0xff, 0x49, 0xff, 0xc9, 0x32, 0x49, 0xf7, 0xca, 0x20, 0x3c, 0x0f, 0xfe, 0x43, -0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x54, 0x00, 0x80, 0xff, -0x44, 0x50, 0x00, 0x01, 0x4c, 0x22, 0xc0, 0x06, 0x50, 0x00, 0x00, 0x02, 0x48, 0x00, 0x00, 0x08, -0x44, 0x50, 0x00, 0x03, 0x4c, 0x22, 0xc0, 0x06, 0x50, 0x00, 0x7f, 0xfe, 0x54, 0x00, 0x00, 0xff, -0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x46, 0x10, 0x01, 0x15, -0x2e, 0x07, 0xe5, 0x94, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0xc0, 0x0c, 0x44, 0x40, 0x00, 0x00, -0x3e, 0x47, 0xe5, 0x9e, 0x3e, 0x47, 0xe5, 0x94, 0x3e, 0x0f, 0xf9, 0xb0, 0x49, 0x00, 0x0d, 0x22, -0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, -0x51, 0xff, 0xff, 0xfc, 0x46, 0x00, 0x01, 0x15, 0x2e, 0x27, 0xe5, 0x94, 0x4e, 0x23, 0x00, 0x3e, -0x44, 0x30, 0x00, 0x01, 0x3e, 0x37, 0xe5, 0x94, 0x3e, 0x27, 0xe5, 0x9d, 0x3e, 0x27, 0xe5, 0x9c, -0x46, 0x06, 0x01, 0x00, 0x04, 0x10, 0x00, 0x13, 0x40, 0x50, 0x80, 0x13, 0x46, 0x06, 0x02, 0x04, -0x3c, 0x5f, 0xf9, 0x66, 0x58, 0x00, 0x01, 0x08, 0x40, 0x11, 0x9c, 0x08, 0x44, 0x40, 0x00, 0xc0, -0x3e, 0x27, 0xe5, 0xa2, 0x3c, 0x2b, 0xf2, 0xd0, 0x14, 0x10, 0x00, 0x00, 0x14, 0x40, 0x00, 0x00, -0x14, 0x10, 0x00, 0x00, 0x46, 0x06, 0x01, 0x70, 0x05, 0xe0, 0x00, 0x01, 0x46, 0x1a, 0x00, 0x00, -0x58, 0x5f, 0x00, 0x10, 0x14, 0x50, 0x00, 0x01, 0x14, 0x20, 0x80, 0x5f, 0x3e, 0x37, 0xe5, 0x9e, -0x3e, 0x0f, 0xf9, 0xb0, 0x3e, 0x1f, 0x17, 0x6c, 0x49, 0x00, 0x0c, 0xbc, 0x3e, 0x0f, 0xf9, 0xb0, -0x44, 0x10, 0x00, 0x65, 0x49, 0x00, 0x0d, 0xc6, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xf4, 0x2e, 0x17, 0xe4, 0x78, -0x54, 0x90, 0x00, 0xff, 0x4e, 0x13, 0x00, 0x0e, 0x46, 0x15, 0x00, 0x00, 0x58, 0x10, 0x82, 0x08, -0x04, 0x00, 0x80, 0x00, 0x40, 0x00, 0x10, 0x09, 0x40, 0x00, 0x10, 0x08, 0x48, 0x00, 0x00, 0x10, -0x44, 0x50, 0x00, 0x01, 0x4c, 0x12, 0xc0, 0x0e, 0x46, 0x15, 0x00, 0x29, 0x58, 0x10, 0x80, 0x18, -0x04, 0x50, 0x80, 0x00, 0x42, 0x02, 0xd8, 0x09, 0x42, 0x00, 0x5c, 0x09, 0x14, 0x00, 0x80, 0x00, -0x46, 0x88, 0x00, 0xc0, 0x58, 0x84, 0x00, 0x70, 0x05, 0xe4, 0x00, 0x00, 0x46, 0xa6, 0x03, 0x00, -0x58, 0x6f, 0x00, 0x20, 0x14, 0x64, 0x00, 0x00, 0x58, 0xa5, 0x00, 0x7c, 0x05, 0xc4, 0x00, 0x00, -0x46, 0x6a, 0x00, 0x00, 0x42, 0x7e, 0x40, 0x08, 0x14, 0x74, 0x00, 0x00, 0x58, 0x45, 0x00, 0x00, -0x04, 0x75, 0x00, 0x00, 0x59, 0xc4, 0x00, 0x00, 0x44, 0x80, 0x00, 0x00, 0x14, 0x4f, 0x80, 0x01, -0x44, 0x00, 0x00, 0x64, 0x49, 0xff, 0xd3, 0x38, 0x04, 0x4f, 0x80, 0x01, 0x04, 0x32, 0x00, 0x00, -0x04, 0x2e, 0x00, 0x00, 0x42, 0x01, 0x50, 0x0b, 0x46, 0x26, 0x03, 0x00, 0x50, 0x84, 0x00, 0x01, -0x58, 0x21, 0x00, 0x7c, 0x4e, 0x03, 0x00, 0x14, 0x04, 0x53, 0x00, 0x00, 0x58, 0x12, 0x80, 0x02, -0x14, 0x13, 0x00, 0x00, 0x44, 0x50, 0x00, 0x06, 0x04, 0x03, 0x00, 0x00, 0x43, 0xe0, 0x04, 0x09, -0x15, 0xe3, 0x00, 0x00, 0x4c, 0x82, 0xff, 0xdc, 0x48, 0x00, 0x00, 0x4e, 0x46, 0x8a, 0x00, 0x00, -0x04, 0x74, 0x00, 0x00, 0x58, 0xa3, 0x80, 0x02, 0x14, 0xa4, 0x00, 0x00, 0x59, 0xc1, 0x00, 0x00, -0x04, 0x64, 0x00, 0x00, 0x58, 0xa4, 0x00, 0x00, 0x42, 0x43, 0x04, 0x09, 0x14, 0x44, 0x00, 0x00, -0x44, 0x70, 0x00, 0x00, 0x04, 0x61, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0e, 0x04, 0x20, 0x80, 0x00, -0x40, 0x41, 0x9c, 0x01, 0x40, 0x52, 0x40, 0x08, 0x41, 0xe2, 0x88, 0x04, 0x15, 0xe0, 0x80, 0x00, -0x48, 0x00, 0x00, 0x24, 0x44, 0x00, 0x00, 0x05, 0x49, 0xff, 0xd2, 0xee, 0x04, 0x2e, 0x00, 0x00, -0x04, 0x15, 0x00, 0x00, 0x50, 0x73, 0x80, 0x01, 0x54, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x06, -0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x12, 0x44, 0x50, 0x00, 0x64, 0x4c, 0x72, 0xff, 0xec, -0x48, 0x00, 0x00, 0x28, 0x04, 0x40, 0x80, 0x00, 0x40, 0x21, 0x18, 0x01, 0x40, 0x51, 0x40, 0x08, -0x41, 0xe2, 0x90, 0x04, 0x15, 0xe0, 0x80, 0x00, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x46, 0x1a, 0x00, 0x00, 0x58, 0x10, 0x81, 0x70, 0x04, 0x40, 0x80, 0x00, -0x44, 0x00, 0x00, 0x01, 0x40, 0x90, 0x24, 0x0c, 0x40, 0x94, 0x90, 0x04, 0x14, 0x90, 0x80, 0x00, -0x04, 0x50, 0x80, 0x00, 0x41, 0xe2, 0x80, 0x13, 0x15, 0xe0, 0x80, 0x00, 0x48, 0xff, 0xff, 0xb8, +0x46, 0x00, 0x01, 0x15, 0x2e, 0x27, 0xe3, 0x34, 0x4e, 0x23, 0x00, 0x3e, 0x44, 0x30, 0x00, 0x01, +0x3e, 0x37, 0xe3, 0x34, 0x3e, 0x27, 0xe3, 0x3d, 0x3e, 0x27, 0xe3, 0x3c, 0x46, 0x06, 0x01, 0x00, +0x04, 0x10, 0x00, 0x13, 0x40, 0x50, 0x80, 0x13, 0x46, 0x06, 0x02, 0x04, 0x3c, 0x5f, 0xf8, 0xce, +0x58, 0x00, 0x01, 0x08, 0x40, 0x11, 0x9c, 0x08, 0x44, 0x40, 0x00, 0xc0, 0x3e, 0x27, 0xe3, 0x42, +0x3c, 0x2b, 0xf1, 0xa0, 0x14, 0x10, 0x00, 0x00, 0x14, 0x40, 0x00, 0x00, 0x14, 0x10, 0x00, 0x00, +0x46, 0x06, 0x01, 0x70, 0x05, 0xe0, 0x00, 0x01, 0x46, 0x1a, 0x00, 0x00, 0x58, 0x5f, 0x00, 0x10, +0x14, 0x50, 0x00, 0x01, 0x14, 0x20, 0x80, 0x5f, 0x3e, 0x37, 0xe3, 0x3e, 0x3e, 0x0f, 0xf7, 0x50, +0x3e, 0x1f, 0x17, 0xf8, 0x49, 0x00, 0x0c, 0xbc, 0x3e, 0x0f, 0xf7, 0x50, 0x44, 0x10, 0x00, 0x65, +0x49, 0x00, 0x0d, 0xc6, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xf4, 0x2e, 0x17, 0xe2, 0x18, 0x54, 0x90, 0x00, 0xff, +0x4e, 0x13, 0x00, 0x0e, 0x46, 0x15, 0x00, 0x00, 0x58, 0x10, 0x82, 0x08, 0x04, 0x00, 0x80, 0x00, +0x40, 0x00, 0x10, 0x09, 0x40, 0x00, 0x10, 0x08, 0x48, 0x00, 0x00, 0x10, 0x44, 0x50, 0x00, 0x01, +0x4c, 0x12, 0xc0, 0x0e, 0x46, 0x15, 0x00, 0x29, 0x58, 0x10, 0x80, 0x18, 0x04, 0x50, 0x80, 0x00, +0x42, 0x02, 0xd8, 0x09, 0x42, 0x00, 0x5c, 0x09, 0x14, 0x00, 0x80, 0x00, 0x46, 0x88, 0x00, 0xc0, +0x58, 0x84, 0x00, 0x70, 0x05, 0xe4, 0x00, 0x00, 0x46, 0xa6, 0x03, 0x00, 0x58, 0x6f, 0x00, 0x20, +0x14, 0x64, 0x00, 0x00, 0x58, 0xa5, 0x00, 0x7c, 0x05, 0xc4, 0x00, 0x00, 0x46, 0x6a, 0x00, 0x00, +0x42, 0x7e, 0x40, 0x08, 0x14, 0x74, 0x00, 0x00, 0x58, 0x45, 0x00, 0x00, 0x04, 0x75, 0x00, 0x00, +0x59, 0xc4, 0x00, 0x00, 0x44, 0x80, 0x00, 0x00, 0x14, 0x4f, 0x80, 0x01, 0x44, 0x00, 0x00, 0x64, +0x49, 0xff, 0xd2, 0xf2, 0x04, 0x4f, 0x80, 0x01, 0x04, 0x32, 0x00, 0x00, 0x04, 0x2e, 0x00, 0x00, +0x42, 0x01, 0x50, 0x0b, 0x46, 0x26, 0x03, 0x00, 0x50, 0x84, 0x00, 0x01, 0x58, 0x21, 0x00, 0x7c, +0x4e, 0x03, 0x00, 0x14, 0x04, 0x53, 0x00, 0x00, 0x58, 0x12, 0x80, 0x02, 0x14, 0x13, 0x00, 0x00, +0x44, 0x50, 0x00, 0x06, 0x04, 0x03, 0x00, 0x00, 0x43, 0xe0, 0x04, 0x09, 0x15, 0xe3, 0x00, 0x00, +0x4c, 0x82, 0xff, 0xdc, 0x48, 0x00, 0x00, 0x4e, 0x46, 0x8a, 0x00, 0x00, 0x04, 0x74, 0x00, 0x00, +0x58, 0xa3, 0x80, 0x02, 0x14, 0xa4, 0x00, 0x00, 0x59, 0xc1, 0x00, 0x00, 0x04, 0x64, 0x00, 0x00, +0x58, 0xa4, 0x00, 0x00, 0x42, 0x43, 0x04, 0x09, 0x14, 0x44, 0x00, 0x00, 0x44, 0x70, 0x00, 0x00, +0x04, 0x61, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0e, 0x04, 0x20, 0x80, 0x00, 0x40, 0x41, 0x9c, 0x01, +0x40, 0x52, 0x40, 0x08, 0x41, 0xe2, 0x88, 0x04, 0x15, 0xe0, 0x80, 0x00, 0x48, 0x00, 0x00, 0x24, +0x44, 0x00, 0x00, 0x05, 0x49, 0xff, 0xd2, 0xa8, 0x04, 0x2e, 0x00, 0x00, 0x04, 0x15, 0x00, 0x00, +0x50, 0x73, 0x80, 0x01, 0x54, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x06, 0x44, 0x00, 0x00, 0x00, +0x48, 0x00, 0x00, 0x12, 0x44, 0x50, 0x00, 0x64, 0x4c, 0x72, 0xff, 0xec, 0x48, 0x00, 0x00, 0x28, +0x04, 0x40, 0x80, 0x00, 0x40, 0x21, 0x18, 0x01, 0x40, 0x51, 0x40, 0x08, 0x41, 0xe2, 0x90, 0x04, +0x15, 0xe0, 0x80, 0x00, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x46, 0x1a, 0x00, 0x00, 0x58, 0x10, 0x81, 0x70, 0x04, 0x40, 0x80, 0x00, 0x44, 0x00, 0x00, 0x01, -0x40, 0x50, 0x24, 0x0c, 0x40, 0x92, 0x90, 0x04, 0x14, 0x90, 0x80, 0x00, 0x05, 0xe0, 0x80, 0x00, -0x40, 0x3f, 0x00, 0x13, 0x14, 0x30, 0x80, 0x00, 0x48, 0xff, 0xff, 0xc6, 0x3a, 0x6f, 0xaa, 0xbc, -0x51, 0xff, 0xff, 0xec, 0x47, 0xc6, 0x01, 0x20, 0x58, 0xae, 0x00, 0x00, 0x58, 0x95, 0x00, 0x00, -0x58, 0x84, 0x80, 0x00, 0x58, 0x74, 0x00, 0x00, 0x54, 0x10, 0x80, 0xff, 0x40, 0x30, 0x08, 0x09, -0x44, 0x60, 0x00, 0x00, 0x3e, 0x2e, 0xbb, 0x90, 0x48, 0x00, 0x00, 0x28, 0x14, 0x1f, 0x80, 0x02, -0x14, 0x2f, 0x80, 0x01, 0x14, 0x3f, 0x80, 0x03, 0x50, 0x63, 0x00, 0x01, 0x4b, 0xe0, 0x08, 0x01, -0x04, 0x0e, 0x00, 0x42, 0x04, 0x1f, 0x80, 0x02, 0x04, 0x2f, 0x80, 0x01, 0x04, 0x3f, 0x80, 0x03, -0x4e, 0x03, 0x00, 0x14, 0x04, 0x45, 0x00, 0x43, 0x4e, 0x43, 0x00, 0x10, 0x04, 0x54, 0x80, 0x47, -0x4e, 0x53, 0x00, 0x0c, 0x05, 0xe4, 0x00, 0x49, 0x4f, 0xe3, 0x00, 0x08, 0x04, 0x03, 0x80, 0x1c, -0x54, 0x00, 0x00, 0x04, 0x4e, 0x02, 0x00, 0x3e, 0x44, 0x00, 0x00, 0x04, 0x40, 0xf3, 0x0c, 0x06, -0x4e, 0xf3, 0xff, 0xd6, 0x48, 0x00, 0x00, 0x3c, 0x46, 0x4a, 0x00, 0x00, 0x04, 0x32, 0x00, 0x5c, -0x45, 0xe0, 0x00, 0x01, 0x40, 0x5f, 0x04, 0x0c, 0x40, 0x22, 0x8c, 0x04, 0x14, 0x22, 0x00, 0x5c, -0x46, 0x46, 0x01, 0x20, 0x04, 0x02, 0x00, 0x42, 0x4e, 0x03, 0x00, 0x16, 0x58, 0x52, 0x00, 0x00, -0x04, 0x22, 0x80, 0x43, 0x4e, 0x23, 0x00, 0x10, 0x59, 0xe2, 0x00, 0x00, 0x04, 0x3f, 0x00, 0x47, -0x4e, 0x33, 0x00, 0x0a, 0x04, 0x02, 0x00, 0x49, 0x4e, 0x03, 0x00, 0x06, 0x44, 0x00, 0x00, 0x01, -0x48, 0x00, 0x00, 0x10, 0x46, 0x2a, 0x00, 0x00, 0x51, 0xe0, 0x80, 0x01, 0x04, 0x31, 0x00, 0x5c, -0x44, 0x00, 0x00, 0x01, 0x40, 0x50, 0x78, 0x0c, 0x40, 0x12, 0x8c, 0x04, 0x14, 0x11, 0x00, 0x5c, -0x51, 0xff, 0x80, 0x14, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x46, 0x26, 0x01, 0x20, -0x04, 0x41, 0x00, 0x1c, 0x54, 0x02, 0x00, 0x04, 0x4e, 0x03, 0xff, 0xc0, 0x48, 0xff, 0xff, 0xca, -0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xf4, 0x49, 0x00, 0x39, 0x92, 0x46, 0x36, 0x01, 0x10, -0x04, 0x21, 0x80, 0x36, 0x46, 0x10, 0x0f, 0xf0, 0x40, 0x51, 0x04, 0x02, 0x4c, 0x50, 0x80, 0x78, -0x46, 0x16, 0x02, 0x04, 0x46, 0x60, 0x20, 0x30, 0x58, 0x63, 0x08, 0x00, 0x14, 0x60, 0x80, 0x08, -0x58, 0x00, 0x80, 0x00, 0x04, 0x20, 0x00, 0x3f, 0x44, 0x40, 0x02, 0x00, 0x54, 0x51, 0x0f, 0x00, -0x4c, 0x52, 0x40, 0x66, 0x54, 0x71, 0x00, 0x0f, 0x44, 0x50, 0x00, 0x07, 0x4c, 0x72, 0xc0, 0x60, -0x47, 0xe8, 0x38, 0x30, 0x59, 0xef, 0x02, 0x01, 0x15, 0xe0, 0x80, 0x08, 0x44, 0xa0, 0x00, 0x02, -0x05, 0xc0, 0x00, 0x3f, 0x54, 0x5e, 0x00, 0x1f, 0x4c, 0x55, 0x40, 0x52, 0x46, 0x06, 0x01, 0x20, -0x04, 0x10, 0x00, 0x20, 0x54, 0x20, 0x81, 0x00, 0x4e, 0x22, 0x00, 0x04, 0x44, 0x20, 0x00, 0x01, -0x54, 0x10, 0x82, 0x00, 0x3e, 0x27, 0xe6, 0x3f, 0x4e, 0x12, 0x00, 0x04, 0x44, 0x10, 0x00, 0x01, -0x3e, 0x17, 0xe6, 0x40, 0x46, 0x66, 0x01, 0x20, 0x58, 0x63, 0x00, 0x80, 0x04, 0x53, 0x00, 0x00, -0x58, 0x32, 0x83, 0x00, 0x14, 0x33, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0xd1, 0xbc, -0x2e, 0x17, 0xe6, 0x3f, 0x4e, 0x13, 0x00, 0x0c, 0x04, 0x83, 0x00, 0x00, 0x42, 0x44, 0x20, 0x09, -0x14, 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0xd1, 0xae, 0x2e, 0xa7, 0xe6, 0x40, -0x4e, 0xa3, 0x00, 0x0e, 0x47, 0xe6, 0x01, 0x20, 0x04, 0x2f, 0x00, 0x20, 0x42, 0x11, 0x24, 0x09, -0x14, 0x1f, 0x00, 0x20, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0xd1, 0x9e, 0x46, 0x06, 0x01, 0x20, -0x04, 0x10, 0x00, 0x3f, 0x46, 0x40, 0x0f, 0xf0, 0x40, 0x50, 0x90, 0x02, 0x4c, 0x52, 0x00, 0x08, -0x44, 0x91, 0x00, 0x00, 0x40, 0x80, 0xa4, 0x00, 0x14, 0x80, 0x00, 0x3f, 0x47, 0xc6, 0x01, 0x10, -0x04, 0xae, 0x00, 0x36, 0x44, 0x00, 0x00, 0xff, 0x40, 0x15, 0x60, 0x09, 0x4c, 0x10, 0x00, 0xc8, -0x46, 0x26, 0x01, 0x00, 0x04, 0x61, 0x00, 0x13, 0x45, 0xe0, 0x00, 0xcc, 0x40, 0x63, 0x00, 0x13, -0x4c, 0x1f, 0x00, 0x32, 0x47, 0xc6, 0x00, 0x00, 0x58, 0x0e, 0x00, 0x00, 0x46, 0xa0, 0x30, 0x30, -0x58, 0x80, 0x00, 0x00, 0x46, 0x99, 0x19, 0x19, 0x58, 0xa5, 0x03, 0x03, 0x58, 0x94, 0x81, 0x91, -0x44, 0x50, 0x00, 0x1f, 0x14, 0x5e, 0x00, 0x05, 0x14, 0xa0, 0x00, 0x06, 0x14, 0x94, 0x00, 0x13, -0x58, 0x40, 0x00, 0x00, 0x3c, 0x1d, 0xf9, 0x66, 0x04, 0x02, 0x00, 0x09, 0x4c, 0x60, 0xc0, 0x0e, -0x41, 0xe0, 0x14, 0x02, 0x4f, 0xe2, 0x00, 0x0a, 0x3e, 0x0f, 0xe5, 0x9c, 0x00, 0x50, 0x00, 0x00, -0x50, 0x12, 0x80, 0x01, 0x48, 0x00, 0x00, 0x06, 0x44, 0x10, 0x00, 0x00, 0x3e, 0x0f, 0xe5, 0x9c, -0x10, 0x10, 0x00, 0x00, 0x3c, 0x5d, 0xf9, 0x66, 0x4c, 0x62, 0xc0, 0x08, 0x2e, 0x37, 0xe5, 0x9d, -0x50, 0x11, 0x80, 0x01, 0x48, 0x00, 0x00, 0x04, 0x44, 0x10, 0x00, 0x00, 0x2e, 0x47, 0xe5, 0x9c, -0x3e, 0x17, 0xe5, 0x9d, 0x5c, 0xf2, 0x00, 0x03, 0x4e, 0xf2, 0x00, 0x08, 0x2e, 0x97, 0xe5, 0x9d, -0x5c, 0xf4, 0x80, 0x0a, 0x4e, 0xf3, 0x00, 0x72, 0x44, 0x50, 0x00, 0x00, 0x3e, 0x57, 0xe5, 0x9d, -0x3e, 0x57, 0xe5, 0x9c, 0x47, 0xe6, 0x01, 0x20, 0x05, 0xcf, 0x00, 0x20, 0x54, 0xae, 0x02, 0x00, -0x4e, 0xa3, 0x00, 0x64, 0x58, 0x0f, 0x00, 0x00, 0x04, 0x10, 0x00, 0x3f, 0x44, 0x50, 0x00, 0xff, -0x40, 0x70, 0xe0, 0x09, 0x4c, 0x72, 0x80, 0x08, 0x46, 0x80, 0x10, 0x00, 0x40, 0x40, 0xa0, 0x00, -0x14, 0x40, 0x00, 0x3f, 0x46, 0x06, 0x01, 0x20, 0x58, 0x00, 0x00, 0x70, 0x50, 0xa0, 0x00, 0x10, -0x04, 0x90, 0x00, 0x00, 0x04, 0x85, 0x00, 0x00, 0x04, 0x15, 0x00, 0x00, 0x59, 0xc0, 0x00, 0x00, -0x58, 0x20, 0x83, 0x00, 0x14, 0x25, 0x00, 0x00, 0x44, 0x70, 0x00, 0x00, 0x04, 0x50, 0x00, 0x00, -0x59, 0xe2, 0x80, 0x04, 0x15, 0xe0, 0x00, 0x00, 0x44, 0x00, 0x00, 0x05, 0x49, 0xff, 0xd0, 0xf4, -0x04, 0x4e, 0x00, 0x00, 0x50, 0x73, 0x80, 0x01, 0x42, 0x32, 0x08, 0x0b, 0x4e, 0x32, 0x00, 0x08, -0x44, 0x50, 0x00, 0x64, 0x4c, 0x72, 0xff, 0xf2, 0x48, 0x00, 0x02, 0x88, 0x47, 0xe6, 0x01, 0x20, -0x04, 0x5f, 0x00, 0x1c, 0x54, 0x24, 0x80, 0x10, 0x58, 0x91, 0x00, 0x01, 0x40, 0x94, 0x94, 0x04, -0x54, 0x84, 0x01, 0x00, 0x14, 0x9f, 0x00, 0x1c, 0x4e, 0x82, 0x00, 0x0c, 0x46, 0x06, 0x01, 0x20, -0x58, 0x00, 0x00, 0x80, 0x04, 0x10, 0x00, 0x00, 0x42, 0x10, 0xa4, 0x09, 0x48, 0x00, 0x00, 0x0c, -0x46, 0x06, 0x01, 0x20, 0x58, 0x00, 0x00, 0x80, 0x04, 0x40, 0x00, 0x00, 0x45, 0xef, 0xfc, 0xff, -0x40, 0x12, 0x78, 0x02, 0x14, 0x10, 0x00, 0x00, 0x3c, 0x6f, 0xf9, 0x66, 0x46, 0x36, 0x01, 0x10, -0x04, 0x11, 0x80, 0x36, 0x46, 0x20, 0x0f, 0xf0, 0x40, 0x50, 0x88, 0x02, 0x4c, 0x51, 0x00, 0x6c, -0x2e, 0x47, 0xe5, 0xa2, 0x4e, 0x43, 0x00, 0x68, 0x46, 0x36, 0x02, 0x04, 0x04, 0x51, 0x80, 0x44, -0x04, 0x21, 0x80, 0x44, 0x40, 0x02, 0xc0, 0x09, 0x44, 0x50, 0xff, 0xff, 0x41, 0xe1, 0x14, 0x02, -0x40, 0x2f, 0x00, 0x00, 0x5c, 0xf1, 0x03, 0xe9, 0x4e, 0xf3, 0x00, 0x56, 0x04, 0x01, 0x80, 0x48, -0x41, 0xe0, 0x14, 0x02, 0x44, 0x50, 0x00, 0x64, 0x42, 0x4f, 0x14, 0x24, 0x40, 0xf2, 0x08, 0x06, -0x4e, 0xf2, 0x00, 0x38, 0x46, 0x66, 0x01, 0x20, 0x58, 0x63, 0x00, 0x80, 0x04, 0x03, 0x00, 0x00, -0x59, 0xe1, 0x80, 0x00, 0x58, 0x30, 0x02, 0x00, 0x14, 0x33, 0x00, 0x00, 0x04, 0x5f, 0x00, 0x01, -0x44, 0x00, 0x00, 0x01, 0x58, 0x12, 0x80, 0x08, 0x14, 0x1f, 0x00, 0x01, 0x49, 0xff, 0xd0, 0x7c, -0x46, 0x06, 0x02, 0x04, 0x44, 0x40, 0x00, 0xc0, 0x44, 0x20, 0x00, 0x80, 0x14, 0x40, 0x00, 0x42, -0x14, 0x20, 0x00, 0x42, 0x04, 0x53, 0x00, 0x00, 0x46, 0x06, 0x01, 0x20, 0x42, 0x12, 0xa4, 0x09, -0x14, 0x13, 0x00, 0x00, 0x58, 0x00, 0x00, 0xfc, 0x04, 0x10, 0x00, 0x00, 0x44, 0x50, 0xff, 0x00, -0x40, 0x20, 0x94, 0x02, 0x4c, 0x22, 0x80, 0x18, 0x50, 0x10, 0x81, 0x00, 0x48, 0x00, 0x00, 0x12, -0x45, 0xe0, 0x00, 0x01, 0x3f, 0xe7, 0xe5, 0xa2, 0x46, 0x06, 0x02, 0x00, 0x58, 0x00, 0x06, 0xf8, -0x04, 0x20, 0x00, 0x00, 0x46, 0x4f, 0xff, 0x0f, 0x58, 0x42, 0x0f, 0xff, 0x40, 0x11, 0x10, 0x02, -0x14, 0x10, 0x00, 0x00, 0x46, 0x0a, 0x00, 0x00, 0x58, 0x00, 0x01, 0x6c, 0x04, 0x50, 0x00, 0x00, -0x54, 0x12, 0x80, 0x01, 0x4e, 0x12, 0x01, 0xd0, 0x04, 0x10, 0x00, 0x00, 0x46, 0xaa, 0x00, 0x00, -0x42, 0x90, 0x80, 0x09, 0x44, 0x10, 0x00, 0x00, 0x14, 0x90, 0x00, 0x00, 0x46, 0x66, 0x01, 0x20, -0x14, 0x15, 0x00, 0x5c, 0x58, 0x33, 0x00, 0x00, 0x58, 0x63, 0x00, 0x70, 0x04, 0xa3, 0x00, 0x00, -0x04, 0x93, 0x00, 0x00, 0x05, 0xe1, 0x80, 0x20, 0x58, 0x21, 0x80, 0x00, 0x58, 0x5f, 0x03, 0x00, -0x14, 0x51, 0x80, 0x20, 0x04, 0x03, 0x00, 0x00, 0x58, 0x31, 0x00, 0x00, 0x58, 0x40, 0x00, 0x04, -0x14, 0x43, 0x00, 0x00, 0x46, 0x07, 0xff, 0xf7, 0x05, 0xe1, 0x00, 0x42, 0x58, 0x00, 0x0f, 0xff, -0x40, 0x5f, 0x00, 0x04, 0x14, 0x51, 0x00, 0x42, 0x04, 0x41, 0x80, 0x43, 0x58, 0x61, 0x00, 0x00, -0x41, 0xe2, 0x00, 0x04, 0x15, 0xe1, 0x80, 0x43, 0x04, 0x53, 0x00, 0x47, 0x46, 0x47, 0xff, 0xf0, -0x58, 0x42, 0x00, 0x0f, 0x40, 0x02, 0x90, 0x04, 0x14, 0x03, 0x00, 0x47, 0x05, 0xe1, 0x00, 0x49, -0x40, 0x3f, 0x10, 0x04, 0x14, 0x31, 0x00, 0x49, 0x44, 0x00, 0x00, 0x64, 0x49, 0xff, 0xfd, 0x58, -0x4e, 0x02, 0x00, 0x24, 0x44, 0x00, 0x00, 0x02, 0x49, 0xff, 0xfc, 0x6e, 0x4e, 0x02, 0x00, 0x04, -0x48, 0x00, 0x01, 0x88, 0x44, 0x00, 0x00, 0x64, 0x44, 0x10, 0x00, 0x04, 0x49, 0xff, 0xfd, 0x48, -0x4e, 0x02, 0x00, 0x14, 0x44, 0x00, 0x00, 0x06, 0x49, 0xff, 0xfc, 0x5e, 0x4e, 0x02, 0x00, 0x04, -0x48, 0x00, 0x01, 0x78, 0x44, 0x00, 0x01, 0xf4, 0x44, 0x10, 0x00, 0x08, 0x49, 0xff, 0xfd, 0x38, -0x4e, 0x02, 0x00, 0x04, 0x48, 0x00, 0x01, 0x6e, 0x44, 0x00, 0x00, 0x0a, 0x49, 0xff, 0xfc, 0x4c, -0x4e, 0x02, 0x00, 0x04, 0x48, 0x00, 0x01, 0x66, 0x47, 0xc6, 0x03, 0x00, 0x59, 0xce, 0x00, 0x7c, -0x46, 0x78, 0x00, 0xc0, 0x04, 0x6e, 0x00, 0x00, 0x58, 0x3e, 0x00, 0x00, 0x58, 0x80, 0x00, 0x00, -0x3f, 0xce, 0xbb, 0x90, 0x14, 0x3f, 0x80, 0x01, 0x44, 0x00, 0x00, 0x05, 0x4b, 0xe0, 0x70, 0x01, -0x04, 0x3f, 0x80, 0x01, 0x04, 0x21, 0x80, 0x00, 0x04, 0x03, 0x80, 0x1c, 0x46, 0x18, 0x00, 0xc0, -0x42, 0x40, 0x50, 0x0b, 0x50, 0x84, 0x00, 0x01, 0x58, 0x10, 0x80, 0x70, 0x4e, 0x43, 0x00, 0x08, -0x45, 0xe0, 0x00, 0x64, 0x4c, 0x8f, 0x7f, 0xe8, 0x48, 0x00, 0x01, 0x46, 0x04, 0x60, 0x80, 0x00, -0x42, 0x83, 0x44, 0x08, 0x14, 0x80, 0x80, 0x00, 0x2e, 0x27, 0xe4, 0x78, 0x4e, 0x22, 0x00, 0x10, -0x48, 0x00, 0x00, 0x2c, 0x04, 0x10, 0x00, 0x00, 0x40, 0x41, 0x18, 0x01, 0x40, 0x22, 0x40, 0x08, -0x40, 0x31, 0x04, 0x04, 0x14, 0x30, 0x00, 0x00, 0x48, 0x00, 0x01, 0x24, 0x46, 0x05, 0x00, 0x00, -0x05, 0xe0, 0x00, 0x82, 0x58, 0x61, 0x00, 0x00, 0x42, 0x5f, 0x60, 0x08, 0x14, 0x50, 0x00, 0x82, -0x58, 0x80, 0x80, 0x00, 0x44, 0x00, 0x00, 0x05, 0x49, 0xff, 0xcf, 0x76, 0x04, 0x24, 0x00, 0x00, -0x42, 0x31, 0x54, 0x0b, 0x50, 0x63, 0x00, 0x01, 0x4e, 0x33, 0x00, 0x4c, 0x44, 0x50, 0x00, 0x64, -0x4c, 0x62, 0xff, 0xf2, 0x48, 0x00, 0x01, 0x22, 0x44, 0x70, 0x00, 0x01, 0x4c, 0x23, 0xc0, 0x42, -0x46, 0x45, 0x00, 0x22, 0x44, 0x7e, 0xff, 0xfe, 0x14, 0x72, 0x02, 0x01, 0x46, 0x85, 0x00, 0x29, -0x04, 0x14, 0x00, 0x05, 0x46, 0x68, 0x00, 0xc0, 0x58, 0x20, 0x80, 0x60, 0x14, 0x24, 0x00, 0x05, -0x58, 0x63, 0x00, 0x6c, 0x05, 0xe3, 0x00, 0x00, 0x40, 0x5f, 0x20, 0x09, 0x40, 0x52, 0xa0, 0x08, -0x58, 0x02, 0x80, 0x04, 0x58, 0x83, 0x00, 0x00, 0x14, 0x03, 0x00, 0x00, 0x44, 0x60, 0x00, 0x00, -0x44, 0x00, 0x00, 0x05, 0x49, 0xff, 0xcf, 0x40, 0x04, 0x04, 0x00, 0x00, 0x50, 0x63, 0x00, 0x01, -0x4e, 0x04, 0x00, 0x08, 0x44, 0x50, 0x00, 0x64, 0x4c, 0x62, 0xff, 0xf4, 0x48, 0x00, 0x00, 0xee, -0x46, 0x25, 0x00, 0x22, 0x44, 0x10, 0x00, 0x00, 0x14, 0x11, 0x02, 0x01, 0x46, 0x65, 0x00, 0x29, -0x04, 0x33, 0x00, 0x05, 0x44, 0x8f, 0xff, 0x9f, 0x41, 0xe1, 0xa0, 0x02, 0x15, 0xe3, 0x00, 0x05, -0x46, 0x48, 0x00, 0xc0, 0x58, 0x42, 0x00, 0x70, 0x04, 0x62, 0x00, 0x00, 0x42, 0x73, 0x40, 0x09, -0x14, 0x72, 0x00, 0x00, 0x04, 0x52, 0x00, 0x00, 0x58, 0x82, 0x00, 0x00, 0x42, 0x02, 0xc4, 0x09, -0x14, 0x02, 0x00, 0x00, 0x44, 0x60, 0x00, 0x00, 0x44, 0x00, 0x00, 0x05, 0x49, 0xff, 0xcf, 0x0c, -0x04, 0x14, 0x00, 0x00, 0x46, 0x08, 0x00, 0xc0, 0x54, 0x20, 0x82, 0x00, 0x50, 0x63, 0x00, 0x01, -0x4e, 0x23, 0x00, 0x08, 0x44, 0x50, 0x00, 0x64, 0x4c, 0x62, 0xff, 0xf0, 0x48, 0x00, 0x00, 0xc2, -0x04, 0x20, 0x00, 0x1c, 0x42, 0x31, 0x14, 0x09, 0x14, 0x30, 0x00, 0x1c, 0x46, 0x75, 0x00, 0x00, -0x58, 0x73, 0x85, 0x94, 0x05, 0xe3, 0x80, 0x00, 0x58, 0x8f, 0x01, 0x00, 0x14, 0x83, 0x80, 0x00, -0x46, 0x0a, 0x00, 0x00, 0x04, 0x43, 0x80, 0x00, 0x42, 0x62, 0x20, 0x09, 0x14, 0x63, 0x80, 0x00, -0x04, 0x10, 0x00, 0x00, 0x58, 0x80, 0x00, 0x00, 0x58, 0x20, 0x80, 0x02, 0x14, 0x20, 0x00, 0x00, -0x44, 0x60, 0x00, 0x00, 0x05, 0xe0, 0x00, 0x00, 0x42, 0x5f, 0x04, 0x09, 0x14, 0x50, 0x00, 0x00, -0x44, 0x00, 0x00, 0x05, 0x49, 0xff, 0xce, 0xd0, 0x04, 0x44, 0x00, 0x00, 0x50, 0x63, 0x00, 0x01, -0x54, 0x02, 0x00, 0x04, 0x4e, 0x03, 0x00, 0x08, 0x44, 0x50, 0x00, 0x64, 0x4c, 0x62, 0xff, 0xf2, -0x48, 0x00, 0x00, 0x94, 0x47, 0xe6, 0x01, 0x20, 0x59, 0xef, 0x00, 0x70, 0x04, 0x0f, 0x00, 0x00, -0x54, 0x55, 0x01, 0x80, 0x58, 0x10, 0x00, 0x01, 0x14, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x80, 0x10, -0x04, 0x4f, 0x00, 0x00, 0x46, 0x16, 0x01, 0x20, 0x40, 0x22, 0x90, 0x04, 0x40, 0x01, 0x0c, 0x04, -0x14, 0x0f, 0x00, 0x00, 0x04, 0x50, 0x80, 0x20, 0x44, 0x4f, 0xfc, 0xff, 0x40, 0x22, 0x90, 0x02, -0x14, 0x20, 0x80, 0x20, 0x59, 0xe0, 0x80, 0x00, 0x04, 0x3f, 0x00, 0x40, 0x46, 0x57, 0xff, 0xf7, -0x58, 0x52, 0x8f, 0xff, 0x40, 0x01, 0x94, 0x04, 0x14, 0x0f, 0x00, 0x40, 0x04, 0x20, 0x80, 0x41, -0x59, 0xe0, 0x80, 0x00, 0x40, 0x41, 0x14, 0x04, 0x14, 0x40, 0x80, 0x41, 0x04, 0x0f, 0x00, 0x46, -0x46, 0x37, 0xff, 0xff, 0x58, 0x31, 0x8c, 0x0f, 0x40, 0x20, 0x0c, 0x04, 0x14, 0x2f, 0x00, 0x46, -0x04, 0x50, 0x80, 0x48, 0x46, 0x47, 0xff, 0xf0, 0x58, 0x42, 0x00, 0x0f, 0x40, 0x02, 0x90, 0x04, -0x14, 0x00, 0x80, 0x48, 0x47, 0xea, 0x00, 0x00, 0x04, 0x2f, 0x00, 0x5b, 0x58, 0x31, 0x00, 0x02, -0x14, 0x3f, 0x00, 0x5b, 0x46, 0x2a, 0x00, 0x00, 0x05, 0xe1, 0x00, 0x5f, 0x4f, 0xe2, 0x00, 0x0a, -0x2e, 0x37, 0xe5, 0x9e, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x32, 0xc0, 0x04, 0x49, 0xff, 0xb9, 0x10, -0x3e, 0x0f, 0xf9, 0xb0, 0x48, 0x00, 0x00, 0x3e, 0x3e, 0x0f, 0xcf, 0x10, 0x49, 0xff, 0xbb, 0x3e, -0x48, 0xff, 0xfd, 0x76, 0x46, 0x0a, 0x00, 0x00, 0x58, 0x00, 0x01, 0x70, 0x04, 0x50, 0x00, 0x00, -0x58, 0x32, 0x90, 0x00, 0x14, 0x30, 0x00, 0x00, 0x05, 0xe0, 0x00, 0x00, 0x40, 0x1f, 0x00, 0x13, -0x14, 0x10, 0x00, 0x00, 0x48, 0xff, 0xfe, 0xb8, 0x46, 0x1a, 0x00, 0x00, 0x58, 0x10, 0x81, 0x70, -0x04, 0x20, 0x80, 0x00, 0x3e, 0x0f, 0xf9, 0xb0, 0x58, 0x21, 0x20, 0x00, 0x48, 0x00, 0x00, 0x18, -0x46, 0x1a, 0x00, 0x00, 0x58, 0x10, 0x81, 0x70, 0x04, 0x40, 0x80, 0x00, 0x3e, 0x0f, 0xf9, 0xb0, -0x58, 0x22, 0x40, 0x00, 0x48, 0x00, 0x00, 0x0c, 0x46, 0x1a, 0x00, 0x00, 0x58, 0x10, 0x81, 0x70, -0x05, 0xe0, 0x80, 0x00, 0x3e, 0x0f, 0xf9, 0xb0, 0x42, 0x2f, 0x3c, 0x08, 0x14, 0x20, 0x80, 0x00, -0x44, 0x10, 0x00, 0x65, 0x49, 0x00, 0x08, 0x5e, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x54, 0x00, 0x80, 0xff, -0x58, 0x11, 0x00, 0x00, 0x54, 0x21, 0x80, 0xff, 0x54, 0x32, 0x00, 0xff, 0x58, 0x42, 0x80, 0x00, -0x49, 0x00, 0x44, 0x80, 0x44, 0x00, 0x00, 0x01, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x49, 0x00, 0x53, 0x1c, -0x2e, 0x50, 0x02, 0x87, 0x44, 0x20, 0x00, 0x01, 0x4c, 0x51, 0x00, 0x06, 0x3e, 0x20, 0x02, 0x87, -0x49, 0x00, 0x37, 0x9c, 0x49, 0x00, 0x2d, 0x24, 0x2e, 0x07, 0xe6, 0x20, 0x44, 0x50, 0x00, 0x01, -0x4c, 0x02, 0x80, 0x0a, 0x2e, 0x57, 0xe4, 0x0e, 0x4e, 0x53, 0x00, 0x08, 0x2e, 0x17, 0xe4, 0x0f, -0x4e, 0x13, 0x00, 0x04, 0x49, 0x00, 0x31, 0x96, 0x49, 0x00, 0x43, 0xd0, 0x49, 0x00, 0x00, 0xf0, -0x49, 0x00, 0x05, 0xd2, 0x49, 0xff, 0xfa, 0x0c, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x49, 0x00, 0x29, 0x98, -0x46, 0x00, 0x01, 0x17, 0x2e, 0x10, 0x02, 0x87, 0x4e, 0x12, 0x00, 0x06, 0x44, 0x20, 0x00, 0x00, -0x3e, 0x20, 0x02, 0x87, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x58, 0x70, 0x80, 0x00, 0x49, 0x00, 0x31, 0x66, -0x58, 0x60, 0x00, 0x00, 0x49, 0x00, 0x3b, 0xee, 0x50, 0x63, 0x7f, 0xff, 0x58, 0x03, 0x00, 0x00, -0x4b, 0xe0, 0x1c, 0x01, 0x4e, 0x63, 0xff, 0xfa, 0x49, 0x00, 0x3b, 0xa2, 0x58, 0x03, 0x00, 0x00, -0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, -0x51, 0xff, 0xff, 0xfc, 0x04, 0x10, 0x00, 0x02, 0x44, 0x20, 0x00, 0x01, 0x50, 0x10, 0x80, 0x20, -0x00, 0x30, 0x80, 0x00, 0x4c, 0x31, 0x00, 0x04, 0x48, 0x00, 0x00, 0x42, 0x00, 0x40, 0x80, 0x04, -0x04, 0x20, 0x80, 0x02, 0x4c, 0x41, 0xc0, 0x6e, 0x44, 0x50, 0x00, 0x06, 0x4c, 0x22, 0x80, 0x4e, -0x5c, 0xf1, 0x00, 0x07, 0x4e, 0xf2, 0x00, 0x14, 0x44, 0x10, 0x00, 0x02, 0x4c, 0x20, 0x80, 0x34, -0x40, 0xf1, 0x04, 0x06, 0x4e, 0xf3, 0x00, 0x2c, 0x44, 0x50, 0x00, 0x04, 0x4c, 0x22, 0x80, 0x28, -0x5c, 0xf1, 0x00, 0x05, 0x4e, 0xf2, 0x00, 0x32, 0x48, 0x00, 0x00, 0x2a, 0x44, 0x50, 0x00, 0x0a, -0x4c, 0x22, 0x80, 0x3c, 0x5c, 0xf1, 0x00, 0x0b, 0x4e, 0xf2, 0x00, 0x0c, 0x44, 0x10, 0x00, 0x08, -0x4c, 0x20, 0x80, 0x16, 0x44, 0x50, 0x00, 0x09, 0x4c, 0x22, 0xc0, 0x44, 0x48, 0x00, 0x00, 0x2a, -0x44, 0x10, 0x00, 0x0c, 0x4c, 0x20, 0x80, 0x34, 0x40, 0xf1, 0x04, 0x06, 0x4e, 0xf3, 0x00, 0x2a, -0x44, 0x50, 0x00, 0x0d, 0x4c, 0x22, 0xc0, 0x36, 0x48, 0x00, 0x00, 0x2e, 0x44, 0x00, 0x00, 0x00, -0x48, 0x00, 0x00, 0x32, 0x3e, 0x1f, 0xbd, 0xd4, 0x48, 0x00, 0x00, 0x28, 0x3e, 0x1f, 0xa3, 0xcc, -0x44, 0x20, 0x00, 0x03, 0x48, 0x00, 0x00, 0x06, 0x3e, 0x1f, 0xb3, 0xc0, 0x44, 0x20, 0x00, 0x05, -0x49, 0xff, 0xff, 0x80, 0x48, 0x00, 0x00, 0x20, 0x3e, 0x1f, 0xb3, 0xc0, 0x48, 0x00, 0x00, 0x16, -0x3e, 0x1f, 0x98, 0x28, 0x48, 0x00, 0x00, 0x12, 0x3e, 0x1f, 0xaf, 0x04, 0x48, 0x00, 0x00, 0x0e, -0x3e, 0x1f, 0xa9, 0x58, 0x44, 0x20, 0x00, 0x0b, 0x48, 0x00, 0x00, 0x08, 0x3e, 0x1f, 0xb7, 0x14, -0x48, 0x00, 0x00, 0x04, 0x3e, 0x1f, 0xbc, 0x48, 0x49, 0xff, 0xff, 0x64, 0x48, 0x00, 0x00, 0x04, -0x44, 0x01, 0x00, 0x03, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x44, 0x50, 0x00, 0xff, 0x54, 0x00, 0x00, 0xff, 0x54, 0x10, 0x80, 0xff, 0x54, 0x21, 0x00, 0xff, -0x40, 0x31, 0x80, 0x10, 0x40, 0x42, 0x00, 0x10, 0x4c, 0x02, 0x80, 0x08, 0x40, 0x00, 0x00, 0x10, -0x3e, 0x07, 0xe2, 0x90, 0x3e, 0x07, 0xe2, 0x98, 0x58, 0x02, 0x80, 0x00, 0x4c, 0x10, 0x00, 0x04, -0x3e, 0x17, 0xe2, 0xa4, 0x58, 0x10, 0x00, 0x00, 0x4c, 0x20, 0x80, 0x04, 0x3e, 0x27, 0xe2, 0xa3, -0x3e, 0x47, 0xe2, 0xb0, 0x3e, 0x37, 0xe2, 0xaf, 0x4a, 0x00, 0x78, 0x20, 0x3e, 0x0f, 0xe2, 0x1c, -0x00, 0x30, 0x00, 0x07, 0x00, 0x20, 0x00, 0x05, 0x40, 0x41, 0x80, 0x10, 0x00, 0x10, 0x00, 0x06, -0x4e, 0x44, 0x00, 0x06, 0x54, 0x31, 0x80, 0x7f, 0x48, 0x00, 0x00, 0x04, 0x44, 0x30, 0x00, 0x34, -0x3e, 0x37, 0xe4, 0x79, 0x2e, 0x57, 0xe2, 0x63, 0x50, 0x42, 0x80, 0x1c, 0x40, 0x51, 0x00, 0x10, -0x3e, 0x47, 0xe4, 0x7a, 0x4e, 0x54, 0x00, 0x26, 0x46, 0x08, 0x00, 0x22, 0x54, 0x30, 0x80, 0xe0, -0x54, 0x41, 0x00, 0x38, 0x40, 0x51, 0xa4, 0x08, 0x40, 0x32, 0x50, 0x08, 0x04, 0x40, 0x00, 0x0a, -0x40, 0x32, 0x8c, 0x04, 0x54, 0x51, 0x00, 0x07, 0x40, 0x31, 0x90, 0x04, 0x40, 0x42, 0xd0, 0x08, -0x40, 0x21, 0x90, 0x04, 0x54, 0x10, 0x80, 0x1f, 0x14, 0x20, 0x00, 0x0a, 0x5c, 0xf0, 0x80, 0x11, -0x4e, 0xf3, 0x00, 0x0a, 0x50, 0x10, 0xff, 0xe0, 0x40, 0x10, 0x80, 0x10, 0x48, 0x00, 0x00, 0x04, -0x44, 0x10, 0x00, 0x00, 0x3e, 0x17, 0xe4, 0x7b, 0x44, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x78, 0x20, -0x54, 0x00, 0x00, 0xff, 0x4e, 0x02, 0x00, 0x70, 0x2e, 0x37, 0xe4, 0x0e, 0x44, 0x20, 0x00, 0x01, -0x3e, 0x27, 0xe2, 0xa1, 0x4e, 0x33, 0x00, 0x06, 0x2e, 0x17, 0xe4, 0x0f, 0x4e, 0x12, 0x00, 0x2a, -0x46, 0x06, 0x02, 0x00, 0x04, 0x40, 0x01, 0x48, 0x46, 0x3f, 0xf0, 0x00, 0x40, 0x22, 0x0c, 0x02, -0x46, 0x40, 0x0a, 0xdf, 0x58, 0x42, 0x04, 0x80, 0x40, 0x51, 0x10, 0x04, 0x14, 0x50, 0x01, 0x48, -0x46, 0x16, 0x02, 0x01, 0x04, 0x20, 0x81, 0x48, 0x46, 0x06, 0x02, 0x00, 0x40, 0x51, 0x0c, 0x02, -0x40, 0x22, 0x90, 0x04, 0x14, 0x20, 0x81, 0x48, 0x58, 0x00, 0x00, 0xfc, 0x04, 0x50, 0x00, 0x00, -0x46, 0x3f, 0xff, 0x00, 0x58, 0x31, 0x80, 0xff, 0x40, 0x12, 0x8c, 0x02, 0x48, 0x00, 0x00, 0xc2, -0x46, 0x06, 0x02, 0x00, 0x04, 0x40, 0x01, 0x48, 0x3c, 0x2d, 0xfe, 0xb0, 0x40, 0x12, 0x60, 0x09, -0x40, 0x10, 0xe0, 0x08, 0x40, 0x50, 0x88, 0x04, 0x14, 0x50, 0x01, 0x48, 0x46, 0x56, 0x02, 0x01, -0x04, 0x12, 0x81, 0x48, 0x40, 0x30, 0xe0, 0x09, 0x40, 0x31, 0xe0, 0x08, 0x40, 0x21, 0x88, 0x04, -0x14, 0x22, 0x81, 0x48, 0x46, 0x06, 0x02, 0x00, 0x58, 0x00, 0x00, 0xfc, 0x2e, 0x17, 0xfa, 0xcc, -0x04, 0x20, 0x00, 0x00, 0x44, 0x4f, 0xc0, 0xff, 0x40, 0x30, 0xa0, 0x08, 0x40, 0x51, 0x10, 0x02, -0x40, 0x41, 0x94, 0x04, 0x14, 0x40, 0x00, 0x00, 0x46, 0x3f, 0xff, 0x03, 0x04, 0x20, 0x00, 0x00, -0x58, 0x31, 0x8f, 0xff, 0x40, 0x10, 0xb8, 0x08, 0x40, 0x51, 0x0c, 0x02, 0x40, 0x10, 0x94, 0x04, -0x48, 0x00, 0x00, 0x88, 0x2e, 0x07, 0xe4, 0x0e, 0x44, 0x50, 0x00, 0x01, 0x3e, 0x57, 0xe2, 0xa2, -0x4e, 0x03, 0x00, 0x06, 0x2e, 0x17, 0xe4, 0x0f, 0x4e, 0x12, 0x00, 0x2a, 0x46, 0x06, 0x02, 0x00, -0x04, 0x30, 0x01, 0x48, 0x46, 0x4f, 0xf0, 0x00, 0x40, 0x11, 0x90, 0x02, 0x46, 0x30, 0x0b, 0x20, -0x58, 0x31, 0x84, 0xc1, 0x40, 0x20, 0x8c, 0x04, 0x14, 0x20, 0x01, 0x48, 0x46, 0x56, 0x02, 0x01, -0x04, 0x12, 0x81, 0x48, 0x46, 0x06, 0x02, 0x00, 0x40, 0x20, 0x90, 0x02, 0x40, 0x11, 0x0c, 0x04, -0x14, 0x12, 0x81, 0x48, 0x58, 0x00, 0x00, 0xfc, 0x04, 0x30, 0x00, 0x00, 0x46, 0x2f, 0xff, 0x00, -0x58, 0x21, 0x00, 0xff, 0x40, 0x11, 0x88, 0x02, 0x48, 0x00, 0x00, 0x3a, 0x46, 0x06, 0x02, 0x00, -0x04, 0x40, 0x01, 0x48, 0x3c, 0x2d, 0xfe, 0xb1, 0x40, 0x12, 0x60, 0x09, 0x40, 0x10, 0xe0, 0x08, +0x40, 0x90, 0x24, 0x0c, 0x40, 0x94, 0x90, 0x04, 0x14, 0x90, 0x80, 0x00, 0x04, 0x50, 0x80, 0x00, +0x41, 0xe2, 0x80, 0x13, 0x15, 0xe0, 0x80, 0x00, 0x48, 0xff, 0xff, 0xb8, 0x46, 0x1a, 0x00, 0x00, +0x58, 0x10, 0x81, 0x70, 0x04, 0x40, 0x80, 0x00, 0x44, 0x00, 0x00, 0x01, 0x40, 0x50, 0x24, 0x0c, +0x40, 0x92, 0x90, 0x04, 0x14, 0x90, 0x80, 0x00, 0x05, 0xe0, 0x80, 0x00, 0x40, 0x3f, 0x00, 0x13, +0x14, 0x30, 0x80, 0x00, 0x48, 0xff, 0xff, 0xc6, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xec, +0x47, 0xc6, 0x01, 0x20, 0x58, 0xae, 0x00, 0x00, 0x58, 0x95, 0x00, 0x00, 0x58, 0x84, 0x80, 0x00, +0x58, 0x74, 0x00, 0x00, 0x54, 0x10, 0x80, 0xff, 0x40, 0x30, 0x08, 0x09, 0x44, 0x60, 0x00, 0x00, +0x3e, 0x2e, 0xbb, 0x90, 0x48, 0x00, 0x00, 0x28, 0x14, 0x1f, 0x80, 0x02, 0x14, 0x2f, 0x80, 0x01, +0x14, 0x3f, 0x80, 0x03, 0x50, 0x63, 0x00, 0x01, 0x4b, 0xe0, 0x08, 0x01, 0x04, 0x0e, 0x00, 0x42, +0x04, 0x1f, 0x80, 0x02, 0x04, 0x2f, 0x80, 0x01, 0x04, 0x3f, 0x80, 0x03, 0x4e, 0x03, 0x00, 0x14, +0x04, 0x45, 0x00, 0x43, 0x4e, 0x43, 0x00, 0x10, 0x04, 0x54, 0x80, 0x47, 0x4e, 0x53, 0x00, 0x0c, +0x05, 0xe4, 0x00, 0x49, 0x4f, 0xe3, 0x00, 0x08, 0x04, 0x03, 0x80, 0x1c, 0x54, 0x00, 0x00, 0x04, +0x4e, 0x02, 0x00, 0x3e, 0x44, 0x00, 0x00, 0x04, 0x40, 0xf3, 0x0c, 0x06, 0x4e, 0xf3, 0xff, 0xd6, +0x48, 0x00, 0x00, 0x3c, 0x46, 0x4a, 0x00, 0x00, 0x04, 0x32, 0x00, 0x5c, 0x45, 0xe0, 0x00, 0x01, +0x40, 0x5f, 0x04, 0x0c, 0x40, 0x22, 0x8c, 0x04, 0x14, 0x22, 0x00, 0x5c, 0x46, 0x46, 0x01, 0x20, +0x04, 0x02, 0x00, 0x42, 0x4e, 0x03, 0x00, 0x16, 0x58, 0x52, 0x00, 0x00, 0x04, 0x22, 0x80, 0x43, +0x4e, 0x23, 0x00, 0x10, 0x59, 0xe2, 0x00, 0x00, 0x04, 0x3f, 0x00, 0x47, 0x4e, 0x33, 0x00, 0x0a, +0x04, 0x02, 0x00, 0x49, 0x4e, 0x03, 0x00, 0x06, 0x44, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x10, +0x46, 0x2a, 0x00, 0x00, 0x51, 0xe0, 0x80, 0x01, 0x04, 0x31, 0x00, 0x5c, 0x44, 0x00, 0x00, 0x01, +0x40, 0x50, 0x78, 0x0c, 0x40, 0x12, 0x8c, 0x04, 0x14, 0x11, 0x00, 0x5c, 0x51, 0xff, 0x80, 0x14, +0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x46, 0x26, 0x01, 0x20, 0x04, 0x41, 0x00, 0x1c, +0x54, 0x02, 0x00, 0x04, 0x4e, 0x03, 0xff, 0xc0, 0x48, 0xff, 0xff, 0xca, 0x3a, 0x6f, 0xaa, 0xbc, +0x51, 0xff, 0xff, 0xf4, 0x49, 0x00, 0x3a, 0x2c, 0x46, 0x36, 0x01, 0x10, 0x04, 0x21, 0x80, 0x36, +0x46, 0x10, 0x0f, 0xf0, 0x40, 0x51, 0x04, 0x02, 0x4c, 0x50, 0x80, 0x78, 0x46, 0x16, 0x02, 0x04, +0x46, 0x60, 0x20, 0x30, 0x58, 0x63, 0x08, 0x00, 0x14, 0x60, 0x80, 0x08, 0x58, 0x00, 0x80, 0x00, +0x04, 0x20, 0x00, 0x3f, 0x44, 0x40, 0x02, 0x00, 0x54, 0x51, 0x0f, 0x00, 0x4c, 0x52, 0x40, 0x66, +0x54, 0x71, 0x00, 0x0f, 0x44, 0x50, 0x00, 0x07, 0x4c, 0x72, 0xc0, 0x60, 0x47, 0xe8, 0x38, 0x30, +0x59, 0xef, 0x02, 0x01, 0x15, 0xe0, 0x80, 0x08, 0x44, 0xa0, 0x00, 0x02, 0x05, 0xc0, 0x00, 0x3f, +0x54, 0x5e, 0x00, 0x1f, 0x4c, 0x55, 0x40, 0x52, 0x46, 0x06, 0x01, 0x20, 0x04, 0x10, 0x00, 0x20, +0x54, 0x20, 0x81, 0x00, 0x4e, 0x22, 0x00, 0x04, 0x44, 0x20, 0x00, 0x01, 0x54, 0x10, 0x82, 0x00, +0x3e, 0x27, 0xe3, 0xdf, 0x4e, 0x12, 0x00, 0x04, 0x44, 0x10, 0x00, 0x01, 0x3e, 0x17, 0xe3, 0xe0, +0x46, 0x66, 0x01, 0x20, 0x58, 0x63, 0x00, 0x80, 0x04, 0x53, 0x00, 0x00, 0x58, 0x32, 0x83, 0x00, +0x14, 0x33, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0xd1, 0x76, 0x2e, 0x17, 0xe3, 0xdf, +0x4e, 0x13, 0x00, 0x0c, 0x04, 0x83, 0x00, 0x00, 0x42, 0x44, 0x20, 0x09, 0x14, 0x43, 0x00, 0x00, +0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0xd1, 0x68, 0x2e, 0xa7, 0xe3, 0xe0, 0x4e, 0xa3, 0x00, 0x0e, +0x47, 0xe6, 0x01, 0x20, 0x04, 0x2f, 0x00, 0x20, 0x42, 0x11, 0x24, 0x09, 0x14, 0x1f, 0x00, 0x20, +0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0xd1, 0x58, 0x46, 0x06, 0x01, 0x20, 0x04, 0x10, 0x00, 0x3f, +0x46, 0x40, 0x0f, 0xf0, 0x40, 0x50, 0x90, 0x02, 0x4c, 0x52, 0x00, 0x08, 0x44, 0x91, 0x00, 0x00, +0x40, 0x80, 0xa4, 0x00, 0x14, 0x80, 0x00, 0x3f, 0x47, 0xc6, 0x01, 0x10, 0x04, 0xae, 0x00, 0x36, +0x44, 0x00, 0x00, 0xff, 0x40, 0x15, 0x60, 0x09, 0x4c, 0x10, 0x00, 0xc8, 0x46, 0x26, 0x01, 0x00, +0x04, 0x61, 0x00, 0x13, 0x45, 0xe0, 0x00, 0xcc, 0x40, 0x63, 0x00, 0x13, 0x4c, 0x1f, 0x00, 0x32, +0x47, 0xc6, 0x00, 0x00, 0x58, 0x0e, 0x00, 0x00, 0x46, 0xa0, 0x30, 0x30, 0x58, 0x80, 0x00, 0x00, +0x46, 0x99, 0x19, 0x19, 0x58, 0xa5, 0x03, 0x03, 0x58, 0x94, 0x81, 0x91, 0x44, 0x50, 0x00, 0x1f, +0x14, 0x5e, 0x00, 0x05, 0x14, 0xa0, 0x00, 0x06, 0x14, 0x94, 0x00, 0x13, 0x58, 0x40, 0x00, 0x00, +0x3c, 0x1d, 0xf8, 0xce, 0x04, 0x02, 0x00, 0x09, 0x4c, 0x60, 0xc0, 0x0e, 0x41, 0xe0, 0x14, 0x02, +0x4f, 0xe2, 0x00, 0x0a, 0x3e, 0x0f, 0xe3, 0x3c, 0x00, 0x50, 0x00, 0x00, 0x50, 0x12, 0x80, 0x01, +0x48, 0x00, 0x00, 0x06, 0x44, 0x10, 0x00, 0x00, 0x3e, 0x0f, 0xe3, 0x3c, 0x10, 0x10, 0x00, 0x00, +0x3c, 0x5d, 0xf8, 0xce, 0x4c, 0x62, 0xc0, 0x08, 0x2e, 0x37, 0xe3, 0x3d, 0x50, 0x11, 0x80, 0x01, +0x48, 0x00, 0x00, 0x04, 0x44, 0x10, 0x00, 0x00, 0x2e, 0x47, 0xe3, 0x3c, 0x3e, 0x17, 0xe3, 0x3d, +0x5c, 0xf2, 0x00, 0x03, 0x4e, 0xf2, 0x00, 0x08, 0x2e, 0x97, 0xe3, 0x3d, 0x5c, 0xf4, 0x80, 0x0a, +0x4e, 0xf3, 0x00, 0x72, 0x44, 0x50, 0x00, 0x00, 0x3e, 0x57, 0xe3, 0x3d, 0x3e, 0x57, 0xe3, 0x3c, +0x47, 0xe6, 0x01, 0x20, 0x05, 0xcf, 0x00, 0x20, 0x54, 0xae, 0x02, 0x00, 0x4e, 0xa3, 0x00, 0x64, +0x58, 0x0f, 0x00, 0x00, 0x04, 0x10, 0x00, 0x3f, 0x44, 0x50, 0x00, 0xff, 0x40, 0x70, 0xe0, 0x09, +0x4c, 0x72, 0x80, 0x08, 0x46, 0x80, 0x10, 0x00, 0x40, 0x40, 0xa0, 0x00, 0x14, 0x40, 0x00, 0x3f, +0x46, 0x06, 0x01, 0x20, 0x58, 0x00, 0x00, 0x70, 0x50, 0xa0, 0x00, 0x10, 0x04, 0x90, 0x00, 0x00, +0x04, 0x85, 0x00, 0x00, 0x04, 0x15, 0x00, 0x00, 0x59, 0xc0, 0x00, 0x00, 0x58, 0x20, 0x83, 0x00, +0x14, 0x25, 0x00, 0x00, 0x44, 0x70, 0x00, 0x00, 0x04, 0x50, 0x00, 0x00, 0x59, 0xe2, 0x80, 0x04, +0x15, 0xe0, 0x00, 0x00, 0x44, 0x00, 0x00, 0x05, 0x49, 0xff, 0xd0, 0xae, 0x04, 0x4e, 0x00, 0x00, +0x50, 0x73, 0x80, 0x01, 0x42, 0x32, 0x08, 0x0b, 0x4e, 0x32, 0x00, 0x08, 0x44, 0x50, 0x00, 0x64, +0x4c, 0x72, 0xff, 0xf2, 0x48, 0x00, 0x02, 0x88, 0x47, 0xe6, 0x01, 0x20, 0x04, 0x5f, 0x00, 0x1c, +0x54, 0x24, 0x80, 0x10, 0x58, 0x91, 0x00, 0x01, 0x40, 0x94, 0x94, 0x04, 0x54, 0x84, 0x01, 0x00, +0x14, 0x9f, 0x00, 0x1c, 0x4e, 0x82, 0x00, 0x0c, 0x46, 0x06, 0x01, 0x20, 0x58, 0x00, 0x00, 0x80, +0x04, 0x10, 0x00, 0x00, 0x42, 0x10, 0xa4, 0x09, 0x48, 0x00, 0x00, 0x0c, 0x46, 0x06, 0x01, 0x20, +0x58, 0x00, 0x00, 0x80, 0x04, 0x40, 0x00, 0x00, 0x45, 0xef, 0xfc, 0xff, 0x40, 0x12, 0x78, 0x02, +0x14, 0x10, 0x00, 0x00, 0x3c, 0x6f, 0xf8, 0xce, 0x46, 0x36, 0x01, 0x10, 0x04, 0x11, 0x80, 0x36, +0x46, 0x20, 0x0f, 0xf0, 0x40, 0x50, 0x88, 0x02, 0x4c, 0x51, 0x00, 0x6c, 0x2e, 0x47, 0xe3, 0x42, +0x4e, 0x43, 0x00, 0x68, 0x46, 0x36, 0x02, 0x04, 0x04, 0x51, 0x80, 0x44, 0x04, 0x21, 0x80, 0x44, +0x40, 0x02, 0xc0, 0x09, 0x44, 0x50, 0xff, 0xff, 0x41, 0xe1, 0x14, 0x02, 0x40, 0x2f, 0x00, 0x00, +0x5c, 0xf1, 0x03, 0xe9, 0x4e, 0xf3, 0x00, 0x56, 0x04, 0x01, 0x80, 0x48, 0x41, 0xe0, 0x14, 0x02, +0x44, 0x50, 0x00, 0x64, 0x42, 0x4f, 0x14, 0x24, 0x40, 0xf2, 0x08, 0x06, 0x4e, 0xf2, 0x00, 0x38, +0x46, 0x66, 0x01, 0x20, 0x58, 0x63, 0x00, 0x80, 0x04, 0x03, 0x00, 0x00, 0x59, 0xe1, 0x80, 0x00, +0x58, 0x30, 0x02, 0x00, 0x14, 0x33, 0x00, 0x00, 0x04, 0x5f, 0x00, 0x01, 0x44, 0x00, 0x00, 0x01, +0x58, 0x12, 0x80, 0x08, 0x14, 0x1f, 0x00, 0x01, 0x49, 0xff, 0xd0, 0x36, 0x46, 0x06, 0x02, 0x04, +0x44, 0x40, 0x00, 0xc0, 0x44, 0x20, 0x00, 0x80, 0x14, 0x40, 0x00, 0x42, 0x14, 0x20, 0x00, 0x42, +0x04, 0x53, 0x00, 0x00, 0x46, 0x06, 0x01, 0x20, 0x42, 0x12, 0xa4, 0x09, 0x14, 0x13, 0x00, 0x00, +0x58, 0x00, 0x00, 0xfc, 0x04, 0x10, 0x00, 0x00, 0x44, 0x50, 0xff, 0x00, 0x40, 0x20, 0x94, 0x02, +0x4c, 0x22, 0x80, 0x18, 0x50, 0x10, 0x81, 0x00, 0x48, 0x00, 0x00, 0x12, 0x45, 0xe0, 0x00, 0x01, +0x3f, 0xe7, 0xe3, 0x42, 0x46, 0x06, 0x02, 0x00, 0x58, 0x00, 0x06, 0xf8, 0x04, 0x20, 0x00, 0x00, +0x46, 0x4f, 0xff, 0x0f, 0x58, 0x42, 0x0f, 0xff, 0x40, 0x11, 0x10, 0x02, 0x14, 0x10, 0x00, 0x00, +0x46, 0x0a, 0x00, 0x00, 0x58, 0x00, 0x01, 0x6c, 0x04, 0x50, 0x00, 0x00, 0x54, 0x12, 0x80, 0x01, +0x4e, 0x12, 0x01, 0xd0, 0x04, 0x10, 0x00, 0x00, 0x46, 0xaa, 0x00, 0x00, 0x42, 0x90, 0x80, 0x09, +0x44, 0x10, 0x00, 0x00, 0x14, 0x90, 0x00, 0x00, 0x46, 0x66, 0x01, 0x20, 0x14, 0x15, 0x00, 0x5c, +0x58, 0x33, 0x00, 0x00, 0x58, 0x63, 0x00, 0x70, 0x04, 0xa3, 0x00, 0x00, 0x04, 0x93, 0x00, 0x00, +0x05, 0xe1, 0x80, 0x20, 0x58, 0x21, 0x80, 0x00, 0x58, 0x5f, 0x03, 0x00, 0x14, 0x51, 0x80, 0x20, +0x04, 0x03, 0x00, 0x00, 0x58, 0x31, 0x00, 0x00, 0x58, 0x40, 0x00, 0x04, 0x14, 0x43, 0x00, 0x00, +0x46, 0x07, 0xff, 0xf7, 0x05, 0xe1, 0x00, 0x42, 0x58, 0x00, 0x0f, 0xff, 0x40, 0x5f, 0x00, 0x04, +0x14, 0x51, 0x00, 0x42, 0x04, 0x41, 0x80, 0x43, 0x58, 0x61, 0x00, 0x00, 0x41, 0xe2, 0x00, 0x04, +0x15, 0xe1, 0x80, 0x43, 0x04, 0x53, 0x00, 0x47, 0x46, 0x47, 0xff, 0xf0, 0x58, 0x42, 0x00, 0x0f, +0x40, 0x02, 0x90, 0x04, 0x14, 0x03, 0x00, 0x47, 0x05, 0xe1, 0x00, 0x49, 0x40, 0x3f, 0x10, 0x04, +0x14, 0x31, 0x00, 0x49, 0x44, 0x00, 0x00, 0x64, 0x49, 0xff, 0xfd, 0x58, 0x4e, 0x02, 0x00, 0x24, +0x44, 0x00, 0x00, 0x02, 0x49, 0xff, 0xfc, 0x6e, 0x4e, 0x02, 0x00, 0x04, 0x48, 0x00, 0x01, 0x88, +0x44, 0x00, 0x00, 0x64, 0x44, 0x10, 0x00, 0x04, 0x49, 0xff, 0xfd, 0x48, 0x4e, 0x02, 0x00, 0x14, +0x44, 0x00, 0x00, 0x06, 0x49, 0xff, 0xfc, 0x5e, 0x4e, 0x02, 0x00, 0x04, 0x48, 0x00, 0x01, 0x78, +0x44, 0x00, 0x01, 0xf4, 0x44, 0x10, 0x00, 0x08, 0x49, 0xff, 0xfd, 0x38, 0x4e, 0x02, 0x00, 0x04, +0x48, 0x00, 0x01, 0x6e, 0x44, 0x00, 0x00, 0x0a, 0x49, 0xff, 0xfc, 0x4c, 0x4e, 0x02, 0x00, 0x04, +0x48, 0x00, 0x01, 0x66, 0x47, 0xc6, 0x03, 0x00, 0x59, 0xce, 0x00, 0x7c, 0x46, 0x78, 0x00, 0xc0, +0x04, 0x6e, 0x00, 0x00, 0x58, 0x3e, 0x00, 0x00, 0x58, 0x80, 0x00, 0x00, 0x3f, 0xce, 0xbb, 0x90, +0x14, 0x3f, 0x80, 0x01, 0x44, 0x00, 0x00, 0x05, 0x4b, 0xe0, 0x70, 0x01, 0x04, 0x3f, 0x80, 0x01, +0x04, 0x21, 0x80, 0x00, 0x04, 0x03, 0x80, 0x1c, 0x46, 0x18, 0x00, 0xc0, 0x42, 0x40, 0x50, 0x0b, +0x50, 0x84, 0x00, 0x01, 0x58, 0x10, 0x80, 0x70, 0x4e, 0x43, 0x00, 0x08, 0x45, 0xe0, 0x00, 0x64, +0x4c, 0x8f, 0x7f, 0xe8, 0x48, 0x00, 0x01, 0x46, 0x04, 0x60, 0x80, 0x00, 0x42, 0x83, 0x44, 0x08, +0x14, 0x80, 0x80, 0x00, 0x2e, 0x27, 0xe2, 0x18, 0x4e, 0x22, 0x00, 0x10, 0x48, 0x00, 0x00, 0x2c, +0x04, 0x10, 0x00, 0x00, 0x40, 0x41, 0x18, 0x01, 0x40, 0x22, 0x40, 0x08, 0x40, 0x31, 0x04, 0x04, +0x14, 0x30, 0x00, 0x00, 0x48, 0x00, 0x01, 0x24, 0x46, 0x05, 0x00, 0x00, 0x05, 0xe0, 0x00, 0x82, +0x58, 0x61, 0x00, 0x00, 0x42, 0x5f, 0x60, 0x08, 0x14, 0x50, 0x00, 0x82, 0x58, 0x80, 0x80, 0x00, +0x44, 0x00, 0x00, 0x05, 0x49, 0xff, 0xcf, 0x30, 0x04, 0x24, 0x00, 0x00, 0x42, 0x31, 0x54, 0x0b, +0x50, 0x63, 0x00, 0x01, 0x4e, 0x33, 0x00, 0x4c, 0x44, 0x50, 0x00, 0x64, 0x4c, 0x62, 0xff, 0xf2, +0x48, 0x00, 0x01, 0x22, 0x44, 0x70, 0x00, 0x01, 0x4c, 0x23, 0xc0, 0x42, 0x46, 0x45, 0x00, 0x22, +0x44, 0x7e, 0xff, 0xfe, 0x14, 0x72, 0x02, 0x01, 0x46, 0x85, 0x00, 0x29, 0x04, 0x14, 0x00, 0x05, +0x46, 0x68, 0x00, 0xc0, 0x58, 0x20, 0x80, 0x60, 0x14, 0x24, 0x00, 0x05, 0x58, 0x63, 0x00, 0x6c, +0x05, 0xe3, 0x00, 0x00, 0x40, 0x5f, 0x20, 0x09, 0x40, 0x52, 0xa0, 0x08, 0x58, 0x02, 0x80, 0x04, +0x58, 0x83, 0x00, 0x00, 0x14, 0x03, 0x00, 0x00, 0x44, 0x60, 0x00, 0x00, 0x44, 0x00, 0x00, 0x05, +0x49, 0xff, 0xce, 0xfa, 0x04, 0x04, 0x00, 0x00, 0x50, 0x63, 0x00, 0x01, 0x4e, 0x04, 0x00, 0x08, +0x44, 0x50, 0x00, 0x64, 0x4c, 0x62, 0xff, 0xf4, 0x48, 0x00, 0x00, 0xee, 0x46, 0x25, 0x00, 0x22, +0x44, 0x10, 0x00, 0x00, 0x14, 0x11, 0x02, 0x01, 0x46, 0x65, 0x00, 0x29, 0x04, 0x33, 0x00, 0x05, +0x44, 0x8f, 0xff, 0x9f, 0x41, 0xe1, 0xa0, 0x02, 0x15, 0xe3, 0x00, 0x05, 0x46, 0x48, 0x00, 0xc0, +0x58, 0x42, 0x00, 0x70, 0x04, 0x62, 0x00, 0x00, 0x42, 0x73, 0x40, 0x09, 0x14, 0x72, 0x00, 0x00, +0x04, 0x52, 0x00, 0x00, 0x58, 0x82, 0x00, 0x00, 0x42, 0x02, 0xc4, 0x09, 0x14, 0x02, 0x00, 0x00, +0x44, 0x60, 0x00, 0x00, 0x44, 0x00, 0x00, 0x05, 0x49, 0xff, 0xce, 0xc6, 0x04, 0x14, 0x00, 0x00, +0x46, 0x08, 0x00, 0xc0, 0x54, 0x20, 0x82, 0x00, 0x50, 0x63, 0x00, 0x01, 0x4e, 0x23, 0x00, 0x08, +0x44, 0x50, 0x00, 0x64, 0x4c, 0x62, 0xff, 0xf0, 0x48, 0x00, 0x00, 0xc2, 0x04, 0x20, 0x00, 0x1c, +0x42, 0x31, 0x14, 0x09, 0x14, 0x30, 0x00, 0x1c, 0x46, 0x75, 0x00, 0x00, 0x58, 0x73, 0x85, 0x94, +0x05, 0xe3, 0x80, 0x00, 0x58, 0x8f, 0x01, 0x00, 0x14, 0x83, 0x80, 0x00, 0x46, 0x0a, 0x00, 0x00, +0x04, 0x43, 0x80, 0x00, 0x42, 0x62, 0x20, 0x09, 0x14, 0x63, 0x80, 0x00, 0x04, 0x10, 0x00, 0x00, +0x58, 0x80, 0x00, 0x00, 0x58, 0x20, 0x80, 0x02, 0x14, 0x20, 0x00, 0x00, 0x44, 0x60, 0x00, 0x00, +0x05, 0xe0, 0x00, 0x00, 0x42, 0x5f, 0x04, 0x09, 0x14, 0x50, 0x00, 0x00, 0x44, 0x00, 0x00, 0x05, +0x49, 0xff, 0xce, 0x8a, 0x04, 0x44, 0x00, 0x00, 0x50, 0x63, 0x00, 0x01, 0x54, 0x02, 0x00, 0x04, +0x4e, 0x03, 0x00, 0x08, 0x44, 0x50, 0x00, 0x64, 0x4c, 0x62, 0xff, 0xf2, 0x48, 0x00, 0x00, 0x94, +0x47, 0xe6, 0x01, 0x20, 0x59, 0xef, 0x00, 0x70, 0x04, 0x0f, 0x00, 0x00, 0x54, 0x55, 0x01, 0x80, +0x58, 0x10, 0x00, 0x01, 0x14, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x80, 0x10, 0x04, 0x4f, 0x00, 0x00, +0x46, 0x16, 0x01, 0x20, 0x40, 0x22, 0x90, 0x04, 0x40, 0x01, 0x0c, 0x04, 0x14, 0x0f, 0x00, 0x00, +0x04, 0x50, 0x80, 0x20, 0x44, 0x4f, 0xfc, 0xff, 0x40, 0x22, 0x90, 0x02, 0x14, 0x20, 0x80, 0x20, +0x59, 0xe0, 0x80, 0x00, 0x04, 0x3f, 0x00, 0x40, 0x46, 0x57, 0xff, 0xf7, 0x58, 0x52, 0x8f, 0xff, +0x40, 0x01, 0x94, 0x04, 0x14, 0x0f, 0x00, 0x40, 0x04, 0x20, 0x80, 0x41, 0x59, 0xe0, 0x80, 0x00, +0x40, 0x41, 0x14, 0x04, 0x14, 0x40, 0x80, 0x41, 0x04, 0x0f, 0x00, 0x46, 0x46, 0x37, 0xff, 0xff, +0x58, 0x31, 0x8c, 0x0f, 0x40, 0x20, 0x0c, 0x04, 0x14, 0x2f, 0x00, 0x46, 0x04, 0x50, 0x80, 0x48, +0x46, 0x47, 0xff, 0xf0, 0x58, 0x42, 0x00, 0x0f, 0x40, 0x02, 0x90, 0x04, 0x14, 0x00, 0x80, 0x48, +0x47, 0xea, 0x00, 0x00, 0x04, 0x2f, 0x00, 0x5b, 0x58, 0x31, 0x00, 0x02, 0x14, 0x3f, 0x00, 0x5b, +0x46, 0x2a, 0x00, 0x00, 0x05, 0xe1, 0x00, 0x5f, 0x4f, 0xe2, 0x00, 0x0a, 0x2e, 0x37, 0xe3, 0x3e, +0x44, 0x50, 0x00, 0x01, 0x4c, 0x32, 0xc0, 0x04, 0x49, 0xff, 0xb8, 0xca, 0x3e, 0x0f, 0xf7, 0x50, +0x48, 0x00, 0x00, 0x3e, 0x3e, 0x0f, 0xcc, 0xbc, 0x49, 0xff, 0xba, 0xf8, 0x48, 0xff, 0xfd, 0x76, +0x46, 0x0a, 0x00, 0x00, 0x58, 0x00, 0x01, 0x70, 0x04, 0x50, 0x00, 0x00, 0x58, 0x32, 0x90, 0x00, +0x14, 0x30, 0x00, 0x00, 0x05, 0xe0, 0x00, 0x00, 0x40, 0x1f, 0x00, 0x13, 0x14, 0x10, 0x00, 0x00, +0x48, 0xff, 0xfe, 0xb8, 0x46, 0x1a, 0x00, 0x00, 0x58, 0x10, 0x81, 0x70, 0x04, 0x20, 0x80, 0x00, +0x3e, 0x0f, 0xf7, 0x50, 0x58, 0x21, 0x20, 0x00, 0x48, 0x00, 0x00, 0x18, 0x46, 0x1a, 0x00, 0x00, +0x58, 0x10, 0x81, 0x70, 0x04, 0x40, 0x80, 0x00, 0x3e, 0x0f, 0xf7, 0x50, 0x58, 0x22, 0x40, 0x00, +0x48, 0x00, 0x00, 0x0c, 0x46, 0x1a, 0x00, 0x00, 0x58, 0x10, 0x81, 0x70, 0x05, 0xe0, 0x80, 0x00, +0x3e, 0x0f, 0xf7, 0x50, 0x42, 0x2f, 0x3c, 0x08, 0x14, 0x20, 0x80, 0x00, 0x44, 0x10, 0x00, 0x65, +0x49, 0x00, 0x08, 0x5e, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x54, 0x00, 0x80, 0xff, 0x58, 0x11, 0x00, 0x00, +0x54, 0x21, 0x80, 0xff, 0x54, 0x32, 0x00, 0xff, 0x58, 0x42, 0x80, 0x00, 0x49, 0x00, 0x43, 0x74, +0x44, 0x00, 0x00, 0x01, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x49, 0x00, 0x51, 0xac, 0x2e, 0x50, 0x02, 0x87, +0x44, 0x20, 0x00, 0x01, 0x4c, 0x51, 0x00, 0x06, 0x3e, 0x20, 0x02, 0x87, 0x49, 0x00, 0x38, 0x22, +0x49, 0x00, 0x2d, 0x7a, 0x2e, 0x07, 0xe3, 0xc0, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0x80, 0x0a, +0x2e, 0x57, 0xe1, 0xb2, 0x4e, 0x53, 0x00, 0x08, 0x2e, 0x17, 0xe1, 0xb3, 0x4e, 0x13, 0x00, 0x04, +0x49, 0x00, 0x31, 0xec, 0x49, 0x00, 0x42, 0xc4, 0x49, 0x00, 0x00, 0xf0, 0x49, 0x00, 0x05, 0xd2, +0x49, 0xff, 0xfa, 0x0c, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x49, 0x00, 0x29, 0xee, 0x46, 0x00, 0x01, 0x17, +0x2e, 0x10, 0x02, 0x87, 0x4e, 0x12, 0x00, 0x06, 0x44, 0x20, 0x00, 0x00, 0x3e, 0x20, 0x02, 0x87, +0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, +0x51, 0xff, 0xff, 0xfc, 0x58, 0x70, 0x80, 0x00, 0x49, 0x00, 0x31, 0xbc, 0x58, 0x60, 0x00, 0x00, +0x49, 0x00, 0x3b, 0x7e, 0x50, 0x63, 0x7f, 0xff, 0x58, 0x03, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, +0x4e, 0x63, 0xff, 0xfa, 0x49, 0x00, 0x3b, 0x32, 0x58, 0x03, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, +0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, +0x04, 0x10, 0x00, 0x02, 0x44, 0x20, 0x00, 0x01, 0x50, 0x10, 0x80, 0x20, 0x00, 0x30, 0x80, 0x00, +0x4c, 0x31, 0x00, 0x04, 0x48, 0x00, 0x00, 0x42, 0x00, 0x40, 0x80, 0x04, 0x04, 0x20, 0x80, 0x02, +0x4c, 0x41, 0xc0, 0x6e, 0x44, 0x50, 0x00, 0x06, 0x4c, 0x22, 0x80, 0x4e, 0x5c, 0xf1, 0x00, 0x07, +0x4e, 0xf2, 0x00, 0x14, 0x44, 0x10, 0x00, 0x02, 0x4c, 0x20, 0x80, 0x34, 0x40, 0xf1, 0x04, 0x06, +0x4e, 0xf3, 0x00, 0x2c, 0x44, 0x50, 0x00, 0x04, 0x4c, 0x22, 0x80, 0x28, 0x5c, 0xf1, 0x00, 0x05, +0x4e, 0xf2, 0x00, 0x32, 0x48, 0x00, 0x00, 0x2a, 0x44, 0x50, 0x00, 0x0a, 0x4c, 0x22, 0x80, 0x3c, +0x5c, 0xf1, 0x00, 0x0b, 0x4e, 0xf2, 0x00, 0x0c, 0x44, 0x10, 0x00, 0x08, 0x4c, 0x20, 0x80, 0x16, +0x44, 0x50, 0x00, 0x09, 0x4c, 0x22, 0xc0, 0x44, 0x48, 0x00, 0x00, 0x2a, 0x44, 0x10, 0x00, 0x0c, +0x4c, 0x20, 0x80, 0x34, 0x40, 0xf1, 0x04, 0x06, 0x4e, 0xf3, 0x00, 0x2a, 0x44, 0x50, 0x00, 0x0d, +0x4c, 0x22, 0xc0, 0x36, 0x48, 0x00, 0x00, 0x2e, 0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x32, +0x3e, 0x1f, 0xbc, 0x3c, 0x48, 0x00, 0x00, 0x28, 0x3e, 0x1f, 0xa2, 0xa4, 0x44, 0x20, 0x00, 0x03, +0x48, 0x00, 0x00, 0x06, 0x3e, 0x1f, 0xb2, 0x28, 0x44, 0x20, 0x00, 0x05, 0x49, 0xff, 0xff, 0x80, +0x48, 0x00, 0x00, 0x20, 0x3e, 0x1f, 0xb2, 0x28, 0x48, 0x00, 0x00, 0x16, 0x3e, 0x1f, 0x97, 0xd4, +0x48, 0x00, 0x00, 0x12, 0x3e, 0x1f, 0xad, 0x78, 0x48, 0x00, 0x00, 0x0e, 0x3e, 0x1f, 0xa7, 0xcc, +0x44, 0x20, 0x00, 0x0b, 0x48, 0x00, 0x00, 0x08, 0x3e, 0x1f, 0xb5, 0x7c, 0x48, 0x00, 0x00, 0x04, +0x3e, 0x1f, 0xba, 0xb0, 0x49, 0xff, 0xff, 0x64, 0x48, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x03, +0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x44, 0x50, 0x00, 0xff, +0x54, 0x00, 0x00, 0xff, 0x54, 0x10, 0x80, 0xff, 0x54, 0x21, 0x00, 0xff, 0x40, 0x31, 0x80, 0x10, +0x40, 0x42, 0x00, 0x10, 0x4c, 0x02, 0x80, 0x08, 0x40, 0x00, 0x00, 0x10, 0x3e, 0x07, 0xe0, 0x30, +0x3e, 0x07, 0xe0, 0x38, 0x58, 0x02, 0x80, 0x00, 0x4c, 0x10, 0x00, 0x04, 0x3e, 0x17, 0xe0, 0x44, +0x58, 0x10, 0x00, 0x00, 0x4c, 0x20, 0x80, 0x04, 0x3e, 0x27, 0xe0, 0x43, 0x3e, 0x47, 0xe0, 0x50, +0x3e, 0x37, 0xe0, 0x4f, 0x4a, 0x00, 0x78, 0x20, 0x3e, 0x0f, 0xdf, 0xbc, 0x00, 0x30, 0x00, 0x07, +0x00, 0x20, 0x00, 0x05, 0x40, 0x41, 0x80, 0x10, 0x00, 0x10, 0x00, 0x06, 0x4e, 0x44, 0x00, 0x06, +0x54, 0x31, 0x80, 0x7f, 0x48, 0x00, 0x00, 0x04, 0x44, 0x30, 0x00, 0x34, 0x3e, 0x37, 0xe2, 0x19, +0x2e, 0x57, 0xe0, 0x03, 0x50, 0x42, 0x80, 0x1c, 0x40, 0x51, 0x00, 0x10, 0x3e, 0x47, 0xe2, 0x1a, +0x4e, 0x54, 0x00, 0x26, 0x46, 0x08, 0x00, 0x22, 0x54, 0x30, 0x80, 0xe0, 0x54, 0x41, 0x00, 0x38, +0x40, 0x51, 0xa4, 0x08, 0x40, 0x32, 0x50, 0x08, 0x04, 0x40, 0x00, 0x0a, 0x40, 0x32, 0x8c, 0x04, +0x54, 0x51, 0x00, 0x07, 0x40, 0x31, 0x90, 0x04, 0x40, 0x42, 0xd0, 0x08, 0x40, 0x21, 0x90, 0x04, +0x54, 0x10, 0x80, 0x1f, 0x14, 0x20, 0x00, 0x0a, 0x5c, 0xf0, 0x80, 0x11, 0x4e, 0xf3, 0x00, 0x0a, +0x50, 0x10, 0xff, 0xe0, 0x40, 0x10, 0x80, 0x10, 0x48, 0x00, 0x00, 0x04, 0x44, 0x10, 0x00, 0x00, +0x3e, 0x17, 0xe2, 0x1b, 0x44, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x78, 0x20, 0x54, 0x00, 0x00, 0xff, +0x4e, 0x02, 0x00, 0x70, 0x2e, 0x37, 0xe1, 0xb2, 0x44, 0x20, 0x00, 0x01, 0x3e, 0x27, 0xe0, 0x41, +0x4e, 0x33, 0x00, 0x06, 0x2e, 0x17, 0xe1, 0xb3, 0x4e, 0x12, 0x00, 0x2a, 0x46, 0x06, 0x02, 0x00, +0x04, 0x40, 0x01, 0x48, 0x46, 0x3f, 0xf0, 0x00, 0x40, 0x22, 0x0c, 0x02, 0x46, 0x40, 0x0a, 0xdf, +0x58, 0x42, 0x04, 0x80, 0x40, 0x51, 0x10, 0x04, 0x14, 0x50, 0x01, 0x48, 0x46, 0x16, 0x02, 0x01, +0x04, 0x20, 0x81, 0x48, 0x46, 0x06, 0x02, 0x00, 0x40, 0x51, 0x0c, 0x02, 0x40, 0x22, 0x90, 0x04, +0x14, 0x20, 0x81, 0x48, 0x58, 0x00, 0x00, 0xfc, 0x04, 0x50, 0x00, 0x00, 0x46, 0x3f, 0xff, 0x00, +0x58, 0x31, 0x80, 0xff, 0x40, 0x12, 0x8c, 0x02, 0x48, 0x00, 0x00, 0xc2, 0x46, 0x06, 0x02, 0x00, +0x04, 0x40, 0x01, 0x48, 0x3c, 0x2d, 0xfe, 0x18, 0x40, 0x12, 0x60, 0x09, 0x40, 0x10, 0xe0, 0x08, 0x40, 0x50, 0x88, 0x04, 0x14, 0x50, 0x01, 0x48, 0x46, 0x56, 0x02, 0x01, 0x04, 0x12, 0x81, 0x48, 0x40, 0x30, 0xe0, 0x09, 0x40, 0x31, 0xe0, 0x08, 0x40, 0x21, 0x88, 0x04, 0x14, 0x22, 0x81, 0x48, -0x46, 0x06, 0x02, 0x00, 0x58, 0x00, 0x00, 0xfc, 0x2e, 0x17, 0xfa, 0xcd, 0x04, 0x50, 0x00, 0x00, -0x44, 0x4f, 0xc0, 0xff, 0x40, 0x30, 0xa0, 0x08, 0x40, 0x22, 0x90, 0x02, 0x40, 0x51, 0x88, 0x04, -0x14, 0x50, 0x00, 0x00, 0x46, 0x3f, 0xff, 0x03, 0x04, 0x20, 0x00, 0x00, 0x58, 0x31, 0x8f, 0xff, -0x40, 0x50, 0xb8, 0x08, 0x40, 0x41, 0x0c, 0x02, 0x40, 0x12, 0x90, 0x04, 0x14, 0x10, 0x00, 0x00, -0x2e, 0x07, 0xe6, 0x1d, 0x4e, 0x02, 0x00, 0x18, 0x46, 0x36, 0x02, 0x00, 0x04, 0x51, 0x83, 0x44, -0x46, 0x40, 0x0f, 0xff, 0x58, 0x42, 0x0f, 0xff, 0x40, 0x22, 0x90, 0x02, 0x46, 0x06, 0x02, 0x01, -0x14, 0x21, 0x83, 0x44, 0x58, 0x00, 0x0d, 0x10, 0x04, 0x10, 0x00, 0x00, 0x40, 0x10, 0x90, 0x02, -0x14, 0x10, 0x00, 0x00, 0x4a, 0x00, 0x78, 0x20, 0x54, 0x00, 0x00, 0xff, 0x4e, 0x02, 0x00, 0x8a, -0x2e, 0x37, 0xe4, 0x0e, 0x44, 0x20, 0x00, 0x01, 0x3e, 0x27, 0xe2, 0xad, 0x4e, 0x33, 0x00, 0x06, -0x2e, 0x17, 0xe4, 0x0f, 0x4e, 0x12, 0x00, 0x2a, 0x46, 0x06, 0x02, 0x00, 0x04, 0x40, 0x01, 0x48, -0x46, 0x3f, 0xf0, 0x00, 0x40, 0x22, 0x0c, 0x02, 0x46, 0x40, 0x0b, 0x20, 0x58, 0x42, 0x04, 0xc1, -0x40, 0x51, 0x10, 0x04, 0x14, 0x50, 0x01, 0x48, 0x46, 0x16, 0x02, 0x01, 0x04, 0x20, 0x81, 0x48, -0x46, 0x06, 0x02, 0x00, 0x40, 0x51, 0x0c, 0x02, 0x40, 0x22, 0x90, 0x04, 0x14, 0x20, 0x81, 0x48, -0x58, 0x00, 0x00, 0xfc, 0x04, 0x50, 0x00, 0x00, 0x46, 0x3f, 0xff, 0x00, 0x58, 0x31, 0x80, 0xff, -0x40, 0x12, 0x8c, 0x02, 0x48, 0x00, 0x00, 0x3a, 0x46, 0x06, 0x02, 0x00, 0x04, 0x40, 0x01, 0x48, -0x3c, 0x2d, 0xfe, 0xb1, 0x40, 0x12, 0x60, 0x09, 0x40, 0x10, 0xe0, 0x08, 0x40, 0x50, 0x88, 0x04, +0x46, 0x06, 0x02, 0x00, 0x58, 0x00, 0x00, 0xfc, 0x2e, 0x17, 0xf8, 0x6c, 0x04, 0x20, 0x00, 0x00, +0x44, 0x4f, 0xc0, 0xff, 0x40, 0x30, 0xa0, 0x08, 0x40, 0x51, 0x10, 0x02, 0x40, 0x41, 0x94, 0x04, +0x14, 0x40, 0x00, 0x00, 0x46, 0x3f, 0xff, 0x03, 0x04, 0x20, 0x00, 0x00, 0x58, 0x31, 0x8f, 0xff, +0x40, 0x10, 0xb8, 0x08, 0x40, 0x51, 0x0c, 0x02, 0x40, 0x10, 0x94, 0x04, 0x48, 0x00, 0x00, 0x88, +0x2e, 0x07, 0xe1, 0xb2, 0x44, 0x50, 0x00, 0x01, 0x3e, 0x57, 0xe0, 0x42, 0x4e, 0x03, 0x00, 0x06, +0x2e, 0x17, 0xe1, 0xb3, 0x4e, 0x12, 0x00, 0x2a, 0x46, 0x06, 0x02, 0x00, 0x04, 0x30, 0x01, 0x48, +0x46, 0x4f, 0xf0, 0x00, 0x40, 0x11, 0x90, 0x02, 0x46, 0x30, 0x0b, 0x20, 0x58, 0x31, 0x84, 0xc1, +0x40, 0x20, 0x8c, 0x04, 0x14, 0x20, 0x01, 0x48, 0x46, 0x56, 0x02, 0x01, 0x04, 0x12, 0x81, 0x48, +0x46, 0x06, 0x02, 0x00, 0x40, 0x20, 0x90, 0x02, 0x40, 0x11, 0x0c, 0x04, 0x14, 0x12, 0x81, 0x48, +0x58, 0x00, 0x00, 0xfc, 0x04, 0x30, 0x00, 0x00, 0x46, 0x2f, 0xff, 0x00, 0x58, 0x21, 0x00, 0xff, +0x40, 0x11, 0x88, 0x02, 0x48, 0x00, 0x00, 0x3a, 0x46, 0x06, 0x02, 0x00, 0x04, 0x40, 0x01, 0x48, +0x3c, 0x2d, 0xfe, 0x19, 0x40, 0x12, 0x60, 0x09, 0x40, 0x10, 0xe0, 0x08, 0x40, 0x50, 0x88, 0x04, 0x14, 0x50, 0x01, 0x48, 0x46, 0x56, 0x02, 0x01, 0x04, 0x12, 0x81, 0x48, 0x40, 0x30, 0xe0, 0x09, 0x40, 0x31, 0xe0, 0x08, 0x40, 0x21, 0x88, 0x04, 0x14, 0x22, 0x81, 0x48, 0x46, 0x06, 0x02, 0x00, -0x58, 0x00, 0x00, 0xfc, 0x2e, 0x17, 0xfa, 0xcd, 0x04, 0x20, 0x00, 0x00, 0x44, 0x4f, 0xc0, 0xff, -0x40, 0x30, 0xa0, 0x08, 0x40, 0x51, 0x10, 0x02, 0x40, 0x41, 0x94, 0x04, 0x14, 0x40, 0x00, 0x00, -0x46, 0x3f, 0xff, 0x03, 0x04, 0x20, 0x00, 0x00, 0x58, 0x31, 0x8f, 0xff, 0x40, 0x10, 0xb8, 0x08, -0x40, 0x51, 0x0c, 0x02, 0x40, 0x10, 0x94, 0x04, 0x14, 0x10, 0x00, 0x00, 0x2e, 0x07, 0xe6, 0x1d, -0x4e, 0x02, 0x00, 0x86, 0x46, 0x36, 0x02, 0x00, 0x04, 0x51, 0x83, 0x44, 0x46, 0x40, 0x0f, 0xff, +0x58, 0x00, 0x00, 0xfc, 0x2e, 0x17, 0xf8, 0x6d, 0x04, 0x50, 0x00, 0x00, 0x44, 0x4f, 0xc0, 0xff, +0x40, 0x30, 0xa0, 0x08, 0x40, 0x22, 0x90, 0x02, 0x40, 0x51, 0x88, 0x04, 0x14, 0x50, 0x00, 0x00, +0x46, 0x3f, 0xff, 0x03, 0x04, 0x20, 0x00, 0x00, 0x58, 0x31, 0x8f, 0xff, 0x40, 0x50, 0xb8, 0x08, +0x40, 0x41, 0x0c, 0x02, 0x40, 0x12, 0x90, 0x04, 0x14, 0x10, 0x00, 0x00, 0x2e, 0x07, 0xe3, 0xbd, +0x4e, 0x02, 0x00, 0x18, 0x46, 0x36, 0x02, 0x00, 0x04, 0x51, 0x83, 0x44, 0x46, 0x40, 0x0f, 0xff, 0x58, 0x42, 0x0f, 0xff, 0x40, 0x22, 0x90, 0x02, 0x46, 0x06, 0x02, 0x01, 0x14, 0x21, 0x83, 0x44, -0x58, 0x00, 0x0d, 0x10, 0x04, 0x10, 0x00, 0x00, 0x40, 0x10, 0x90, 0x02, 0x48, 0x00, 0x00, 0x6e, -0x2e, 0x07, 0xe4, 0x0e, 0x44, 0x40, 0x00, 0x01, 0x3e, 0x47, 0xe2, 0xae, 0x4e, 0x03, 0x00, 0x06, -0x2e, 0x17, 0xe4, 0x0f, 0x4e, 0x12, 0x00, 0x2a, 0x46, 0x06, 0x02, 0x00, 0x04, 0x40, 0x01, 0x48, -0x46, 0x3f, 0xf0, 0x00, 0x40, 0x22, 0x0c, 0x02, 0x46, 0x40, 0x0b, 0x61, 0x58, 0x42, 0x05, 0x02, -0x40, 0x51, 0x10, 0x04, 0x14, 0x50, 0x01, 0x48, 0x46, 0x16, 0x02, 0x01, 0x04, 0x20, 0x81, 0x48, -0x46, 0x06, 0x02, 0x00, 0x40, 0x51, 0x0c, 0x02, 0x40, 0x32, 0x90, 0x04, 0x14, 0x30, 0x81, 0x48, -0x58, 0x00, 0x00, 0xfc, 0x04, 0x50, 0x00, 0x00, 0x46, 0x2f, 0xff, 0x00, 0x58, 0x21, 0x00, 0xff, -0x40, 0x12, 0x88, 0x02, 0x48, 0x00, 0x00, 0x3a, 0x46, 0x06, 0x02, 0x00, 0x04, 0x40, 0x01, 0x48, -0x3c, 0x2d, 0xfe, 0xb2, 0x40, 0x12, 0x60, 0x09, 0x40, 0x10, 0xe0, 0x08, 0x40, 0x50, 0x88, 0x04, -0x14, 0x50, 0x01, 0x48, 0x46, 0x56, 0x02, 0x01, 0x04, 0x12, 0x81, 0x48, 0x40, 0x30, 0xe0, 0x09, -0x40, 0x31, 0xe0, 0x08, 0x40, 0x21, 0x88, 0x04, 0x14, 0x22, 0x81, 0x48, 0x46, 0x06, 0x02, 0x00, -0x58, 0x00, 0x00, 0xfc, 0x2e, 0x17, 0xfa, 0xce, 0x04, 0x20, 0x00, 0x00, 0x44, 0x4f, 0xc0, 0xff, -0x40, 0x30, 0xa0, 0x08, 0x40, 0x51, 0x10, 0x02, 0x40, 0x41, 0x94, 0x04, 0x14, 0x40, 0x00, 0x00, -0x46, 0x3f, 0xff, 0x03, 0x04, 0x20, 0x00, 0x00, 0x58, 0x31, 0x8f, 0xff, 0x40, 0x10, 0xb8, 0x08, -0x40, 0x51, 0x0c, 0x02, 0x40, 0x10, 0x94, 0x04, 0x14, 0x10, 0x00, 0x00, 0x4a, 0x00, 0x78, 0x20, -0x46, 0x28, 0x00, 0x22, 0x04, 0x11, 0x00, 0x00, 0x54, 0x00, 0xff, 0x00, 0x40, 0x00, 0x20, 0x09, -0x4a, 0x00, 0x78, 0x20, 0x46, 0x48, 0x00, 0x22, 0x04, 0x12, 0x00, 0x00, 0x42, 0x50, 0xcc, 0x09, -0x14, 0x52, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0x04, 0x30, 0x00, 0x06, 0x46, 0x2f, 0xee, 0xef, -0x58, 0x21, 0x0f, 0xff, 0x40, 0x11, 0x88, 0x02, 0x14, 0x10, 0x00, 0x06, 0x4a, 0x00, 0x78, 0x20, -0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x46, 0x48, 0x00, 0x22, 0x04, 0x12, 0x00, 0x00, -0x2e, 0x57, 0xe4, 0x79, 0x55, 0xe0, 0xff, 0x00, 0x2e, 0x2f, 0xe4, 0x7b, 0x40, 0x4f, 0x20, 0x09, -0x40, 0x12, 0x14, 0x01, 0x50, 0x31, 0x00, 0x38, 0x42, 0x50, 0x8c, 0x24, 0x45, 0xe0, 0x00, 0x1e, -0x40, 0x32, 0xf8, 0x57, 0x2e, 0x27, 0xe4, 0x7a, 0x54, 0x00, 0x00, 0xff, 0x40, 0x11, 0x88, 0x00, -0x40, 0x10, 0x80, 0x10, 0x49, 0xff, 0xe8, 0x42, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x2e, 0x07, 0xe6, 0x12, -0x3e, 0x1f, 0xe2, 0x78, 0x49, 0xff, 0xed, 0x0a, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xd4, 0x44, 0x70, 0x00, 0x00, -0x46, 0x68, 0x00, 0x22, 0x58, 0x83, 0x80, 0x00, 0x58, 0x93, 0x80, 0x00, 0x59, 0xcf, 0x80, 0x00, -0x04, 0x43, 0x00, 0x00, 0x46, 0x20, 0x00, 0xc0, 0x40, 0x12, 0x08, 0x04, 0x14, 0x13, 0x00, 0x00, -0x44, 0x00, 0x00, 0x01, 0x49, 0xf7, 0xc0, 0xc0, 0x04, 0x13, 0x00, 0x00, 0x40, 0x00, 0xbc, 0x08, -0x40, 0x00, 0x7c, 0x09, 0x4e, 0x03, 0x00, 0x40, 0x54, 0x70, 0xff, 0x00, 0x40, 0x73, 0xa0, 0x09, -0x54, 0x00, 0x80, 0x7f, 0x40, 0xf3, 0x80, 0x06, 0x4e, 0xf2, 0x00, 0x06, 0x40, 0x20, 0x1c, 0x01, -0x48, 0x00, 0x00, 0x04, 0x40, 0x23, 0x80, 0x01, 0x54, 0x51, 0x00, 0xff, 0x5c, 0xf2, 0x80, 0x03, -0x4e, 0xf2, 0x00, 0x04, 0x4e, 0x03, 0x00, 0x3e, 0x04, 0x53, 0x00, 0x00, 0x42, 0x22, 0xc8, 0x09, -0x42, 0x21, 0x4c, 0x09, 0x14, 0x23, 0x00, 0x00, 0x40, 0x00, 0x20, 0x08, 0x04, 0x43, 0x00, 0x00, -0x42, 0x32, 0x4c, 0x08, 0x41, 0xe1, 0x80, 0x04, 0x15, 0xe3, 0x00, 0x00, 0x5c, 0xf4, 0x83, 0xde, -0x4e, 0xf3, 0x00, 0x0a, 0x5c, 0xf4, 0x00, 0x0a, 0x4e, 0xf2, 0x00, 0x06, 0x38, 0x1e, 0x22, 0x0a, -0x50, 0x84, 0x00, 0x01, 0x04, 0x33, 0x00, 0x00, 0x42, 0x01, 0xc8, 0x09, 0x42, 0x00, 0x4c, 0x09, -0x14, 0x03, 0x00, 0x00, 0x50, 0x94, 0x80, 0x01, 0x44, 0x40, 0x03, 0xe8, 0x4c, 0x92, 0x7f, 0xaa, -0x48, 0x00, 0x00, 0x18, 0x0c, 0x24, 0x80, 0x01, 0x50, 0x63, 0x00, 0x01, 0x4b, 0xe0, 0x28, 0x01, -0x58, 0x13, 0x00, 0x00, 0x3e, 0x0f, 0xcf, 0x4c, 0x40, 0xf3, 0x20, 0x06, 0x4e, 0xf3, 0xff, 0xf4, -0x58, 0x03, 0x80, 0x00, 0x51, 0xff, 0x80, 0x2c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3e, 0x6e, 0x95, 0x54, 0x3e, 0x0f, 0xcf, 0x60, 0x4b, 0xe0, 0x18, 0x01, 0x58, 0xa3, 0x00, 0x00, -0x58, 0x9f, 0x80, 0x00, 0x44, 0x60, 0x00, 0x00, 0x48, 0xff, 0xff, 0xe4, 0x3b, 0xff, 0xfc, 0xbc, -0x51, 0xff, 0xff, 0xfc, 0x40, 0x21, 0x00, 0x10, 0x54, 0x10, 0x80, 0xff, 0x4e, 0x26, 0x00, 0x0c, -0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcf, 0x20, 0x44, 0x20, 0x07, 0x35, 0x49, 0xff, 0xb6, 0x96, -0x48, 0x00, 0x00, 0x00, 0x2f, 0xef, 0xe4, 0x7b, 0x44, 0x40, 0x00, 0x1e, 0x42, 0x51, 0x10, 0x24, -0x50, 0x4f, 0x00, 0x38, 0x40, 0x22, 0x90, 0x76, 0x54, 0x21, 0x00, 0xff, 0x52, 0x31, 0x00, 0x7f, -0x40, 0xf1, 0x84, 0x07, 0x4e, 0xf3, 0x00, 0x0a, 0x40, 0x51, 0x04, 0x00, 0x10, 0x50, 0x00, 0x04, -0x44, 0x30, 0x00, 0x01, 0x48, 0x00, 0x00, 0x04, 0x44, 0x30, 0x00, 0x00, 0x10, 0x30, 0x00, 0x02, -0x40, 0xf0, 0x88, 0x06, 0x4e, 0xf3, 0x00, 0x0c, 0x40, 0x10, 0x88, 0x01, 0x44, 0x20, 0x00, 0x01, -0x10, 0x20, 0x00, 0x01, 0x10, 0x10, 0x00, 0x03, 0x48, 0x00, 0x00, 0x06, 0x45, 0xe0, 0x00, 0x00, -0x11, 0xe0, 0x00, 0x01, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xa0, 0xbc, 0x54, 0x00, 0x00, 0xff, 0x2e, 0x67, 0xe6, 0x19, 0x2e, 0x77, 0xe6, 0x18, -0x3c, 0x83, 0xf3, 0x08, 0x4e, 0x02, 0x00, 0x06, 0x2e, 0x17, 0xe2, 0x98, 0x48, 0x00, 0x00, 0x04, -0x2e, 0x17, 0xe2, 0x97, 0x2e, 0x2f, 0xe2, 0x90, 0x3e, 0x0f, 0xe2, 0x94, 0x49, 0xff, 0xff, 0xa0, -0x3e, 0x0f, 0xcf, 0x78, 0x49, 0xff, 0xb6, 0x42, 0x2e, 0x27, 0xe6, 0x38, 0x44, 0x40, 0x00, 0x01, -0x4c, 0x22, 0x40, 0x0a, 0x46, 0x10, 0x10, 0x08, 0x58, 0x10, 0x82, 0xd0, 0x44, 0x00, 0x00, 0x44, -0x49, 0x00, 0x2d, 0x2e, 0x49, 0x00, 0x3f, 0x42, 0x44, 0x20, 0x00, 0x00, 0x54, 0x04, 0x00, 0xff, -0x58, 0x13, 0x80, 0x00, 0x58, 0x43, 0x00, 0x00, 0x58, 0x31, 0x00, 0x00, 0x49, 0x00, 0x3f, 0xba, -0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xfc, -0x46, 0x08, 0x00, 0x22, 0x04, 0x10, 0x00, 0x00, 0x3e, 0x0f, 0xf9, 0xc8, 0x54, 0x70, 0xff, 0x00, -0x20, 0x10, 0x00, 0x02, 0x40, 0x73, 0xa0, 0x09, 0x40, 0xf3, 0x84, 0x07, 0x4e, 0xf3, 0x00, 0x4a, -0x3e, 0x9f, 0xe2, 0x96, 0x44, 0x80, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x50, 0x64, 0x80, 0x06, -0x59, 0xc4, 0x00, 0x00, 0x00, 0x24, 0x80, 0x00, 0x4e, 0x22, 0x00, 0x2e, 0x20, 0x34, 0x80, 0x02, -0x2e, 0x4f, 0xf9, 0xca, 0x50, 0x54, 0x7f, 0xfb, 0x54, 0x22, 0x80, 0xff, 0x40, 0xf2, 0x0c, 0x07, -0x4e, 0xf3, 0x00, 0x22, 0x04, 0x13, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, 0x4e, 0x12, 0x00, 0x1c, -0x5c, 0xf1, 0x00, 0x0f, 0x4e, 0xf2, 0x00, 0x04, 0x48, 0x00, 0x00, 0x4e, 0x44, 0x50, 0x00, 0x03, -0x4c, 0x82, 0xc0, 0x0c, 0x44, 0x00, 0x00, 0x01, 0x3e, 0x07, 0xe2, 0xc5, 0x3f, 0xc7, 0xe2, 0xba, -0x44, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x04, 0x11, 0xc4, 0x80, 0x00, 0x04, 0x23, 0x00, 0x00, -0x4b, 0xe0, 0x08, 0x01, 0x50, 0x84, 0x00, 0x01, 0x54, 0x84, 0x00, 0xff, 0x44, 0x50, 0x00, 0x14, -0x50, 0x94, 0x80, 0x0c, 0x50, 0x63, 0x00, 0x0c, 0x4c, 0x82, 0xff, 0xc6, 0x48, 0x00, 0x00, 0x50, -0x20, 0x10, 0x00, 0x01, 0x40, 0xf0, 0x9c, 0x07, 0x4e, 0xf3, 0x00, 0x4a, 0x3e, 0x9f, 0xe2, 0x95, -0x44, 0x80, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x50, 0x64, 0x80, 0x07, 0x59, 0xc4, 0x00, 0x00, -0x00, 0x44, 0x80, 0x00, 0x4e, 0x42, 0x00, 0x30, 0x21, 0xe4, 0x80, 0x02, 0x2e, 0x5f, 0xf9, 0xc9, -0x50, 0x14, 0x7f, 0xfb, 0x54, 0x20, 0x80, 0xff, 0x40, 0xff, 0x14, 0x07, 0x4e, 0xf3, 0x00, 0x24, -0x04, 0x13, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x4e, 0x12, 0x00, 0x1e, 0x5c, 0xf1, 0x00, 0x0f, -0x4e, 0xf2, 0x00, 0x06, 0x4b, 0xe0, 0x04, 0x01, 0x48, 0x00, 0x00, 0x22, 0x44, 0x50, 0x00, 0x04, -0x4c, 0x82, 0xc0, 0x0c, 0x44, 0x30, 0x00, 0x01, 0x3e, 0x37, 0xe2, 0xba, 0x3f, 0xc7, 0xe2, 0xc5, -0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x04, 0x11, 0xc4, 0x80, 0x00, 0x04, 0x43, 0x00, 0x00, -0x4b, 0xe0, 0x10, 0x01, 0x50, 0x84, 0x00, 0x01, 0x54, 0x84, 0x00, 0xff, 0x44, 0x50, 0x00, 0x14, -0x50, 0x94, 0x80, 0x0c, 0x50, 0x63, 0x00, 0x0c, 0x4c, 0x82, 0xff, 0xc4, 0x2e, 0x47, 0xe6, 0x1e, -0x44, 0x10, 0x00, 0x00, 0x3e, 0x0f, 0xe2, 0x97, 0x44, 0x20, 0x00, 0xfb, 0x44, 0x60, 0x00, 0x7f, -0x5c, 0xf1, 0x00, 0x0f, 0x4e, 0xf2, 0x00, 0x08, 0x4e, 0x42, 0x00, 0x40, 0x00, 0x30, 0x7f, 0xff, -0x48, 0x00, 0x00, 0x0c, 0x50, 0x31, 0x00, 0x02, 0x55, 0xe1, 0x80, 0xff, 0x00, 0x30, 0x7f, 0xff, -0x5c, 0xff, 0x00, 0x02, 0x4e, 0xf2, 0x00, 0x20, 0x4e, 0x32, 0x00, 0x0c, 0x20, 0x30, 0x00, 0x01, -0x40, 0xf1, 0x98, 0x07, 0x4e, 0xf2, 0x00, 0x06, 0x40, 0xf3, 0x8c, 0x07, 0x4e, 0xf3, 0x00, 0x04, -0x58, 0x33, 0x00, 0x00, 0x00, 0x50, 0x7f, 0xfe, 0x4e, 0x52, 0x00, 0x24, 0x20, 0x50, 0x00, 0x00, -0x40, 0xf0, 0x94, 0x07, 0x4e, 0xf2, 0x00, 0x1e, 0x40, 0xf2, 0x9c, 0x07, 0x4e, 0xf2, 0x00, 0x1a, -0x48, 0x00, 0x00, 0x1a, 0x4e, 0x32, 0x00, 0x08, 0x21, 0xe0, 0x00, 0x01, 0x42, 0x6f, 0x18, 0x01, -0x40, 0x63, 0x00, 0x10, 0x00, 0x30, 0x7f, 0xfe, 0x4e, 0x32, 0x00, 0x08, 0x20, 0x50, 0x00, 0x00, -0x40, 0xf0, 0x94, 0x07, 0x4e, 0xf3, 0x00, 0x0a, 0x58, 0x50, 0x80, 0x00, 0x48, 0x00, 0x00, 0x06, -0x58, 0x50, 0x80, 0x00, 0x58, 0x61, 0x80, 0x00, 0x50, 0x21, 0x00, 0x01, 0x54, 0x21, 0x00, 0xff, -0x44, 0x10, 0x00, 0x0f, 0x50, 0x00, 0x00, 0x0c, 0x4c, 0x20, 0x80, 0x06, 0x58, 0x12, 0x80, 0x00, -0x48, 0xff, 0xff, 0xa8, 0x3e, 0x57, 0xf9, 0xc9, 0x3e, 0x67, 0xf9, 0xca, 0x54, 0x23, 0x00, 0xff, -0x54, 0x32, 0x80, 0xff, 0x44, 0x10, 0x00, 0x7f, 0x44, 0x40, 0x00, 0x1e, 0x44, 0x00, 0x00, 0x02, -0x49, 0xff, 0xd0, 0x4c, 0x46, 0x48, 0x00, 0x22, 0x04, 0x12, 0x00, 0x07, 0x46, 0x30, 0x11, 0x10, -0x40, 0x50, 0x8c, 0x04, 0x14, 0x52, 0x00, 0x07, 0x44, 0x00, 0x00, 0x01, 0x49, 0xf7, 0xba, 0xd6, -0x44, 0x00, 0x00, 0x01, 0x49, 0xf7, 0xba, 0xaa, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x49, 0xff, 0xfd, 0xb4, -0x58, 0x90, 0x00, 0x00, 0x3e, 0x2f, 0xe2, 0x44, 0x3e, 0x3f, 0xe2, 0xd3, 0x28, 0x11, 0x00, 0x01, -0x3e, 0x0f, 0xe2, 0x4c, 0x10, 0x11, 0x80, 0x01, 0x10, 0x11, 0x80, 0x00, 0x50, 0x31, 0x80, 0x0c, -0x4c, 0x20, 0x7f, 0xf6, 0x50, 0x01, 0x00, 0x02, 0x3e, 0x2f, 0xe3, 0x33, 0x28, 0x40, 0x00, 0x01, -0x3e, 0x3f, 0xe2, 0x55, 0x10, 0x41, 0x00, 0x01, 0x10, 0x41, 0x00, 0x00, 0x50, 0x21, 0x00, 0x0c, -0x4c, 0x01, 0xff, 0xf6, 0x3e, 0x6f, 0xe2, 0x94, 0x2f, 0xcf, 0xe4, 0x7a, 0x21, 0xe3, 0x00, 0x1c, -0x20, 0x83, 0x00, 0x0f, 0x20, 0x13, 0x00, 0x10, 0x20, 0x73, 0x00, 0x1b, 0x44, 0x20, 0x00, 0x1e, -0x40, 0xaf, 0x70, 0x01, 0x2f, 0xef, 0xe4, 0x7b, 0x40, 0x44, 0x70, 0x01, 0x40, 0x50, 0xf0, 0x01, -0x40, 0x33, 0xf0, 0x01, 0x42, 0x15, 0x08, 0x24, 0x42, 0x82, 0x08, 0x24, 0x42, 0x71, 0x88, 0x24, -0x50, 0x3f, 0x00, 0x38, 0x40, 0xa0, 0x8c, 0x16, 0x42, 0x52, 0x88, 0x24, 0x2e, 0x2f, 0xe2, 0x90, -0x2f, 0xe7, 0xe4, 0x79, 0x58, 0x14, 0x80, 0x00, 0x58, 0x03, 0x00, 0x00, 0x40, 0x84, 0x0f, 0x96, -0x40, 0x4f, 0x28, 0x00, 0x10, 0x43, 0x00, 0x1c, 0x40, 0x42, 0x8d, 0x56, 0x40, 0xaf, 0x20, 0x00, -0x10, 0xa3, 0x00, 0x0f, 0x40, 0x83, 0x8c, 0xf6, 0x40, 0x7f, 0x10, 0x00, 0x10, 0x73, 0x00, 0x10, -0x44, 0x70, 0x00, 0x01, 0x40, 0x5f, 0x20, 0x00, 0x10, 0x53, 0x00, 0x1b, 0x44, 0x80, 0x00, 0xfb, -0x49, 0xff, 0xfd, 0xd6, 0x44, 0x30, 0x00, 0x00, 0x2e, 0xa7, 0xe6, 0x1e, 0x58, 0x01, 0x80, 0x00, -0x50, 0x23, 0x00, 0x03, 0x44, 0x60, 0x00, 0x7f, 0x5c, 0xf4, 0x00, 0x0f, 0x4e, 0xf2, 0x00, 0x20, -0x4e, 0xa2, 0x00, 0x42, 0x20, 0x41, 0x00, 0x01, 0x10, 0x71, 0x7f, 0xff, 0x10, 0x71, 0x7f, 0xfe, -0x40, 0xf2, 0x18, 0x07, 0x4e, 0xf2, 0x00, 0x06, 0x40, 0xf4, 0x90, 0x07, 0x4e, 0xf3, 0x00, 0x04, -0x58, 0x43, 0x00, 0x00, 0x20, 0x51, 0x00, 0x00, 0x40, 0xf1, 0x94, 0x07, 0x4e, 0xf2, 0x00, 0x30, -0x40, 0xf2, 0xa4, 0x07, 0x4e, 0xf2, 0x00, 0x2c, 0x48, 0x00, 0x00, 0x2c, 0x20, 0x11, 0x7f, 0xfd, -0x4e, 0x17, 0x00, 0x08, 0x10, 0x71, 0x7f, 0xff, 0x10, 0x01, 0x7f, 0xfe, 0x48, 0x00, 0x00, 0x08, -0x4e, 0x12, 0x00, 0x06, 0x10, 0x01, 0x7f, 0xff, 0x10, 0x71, 0x7f, 0xfe, 0x00, 0x51, 0x7f, 0xff, -0x4e, 0x52, 0x00, 0x08, 0x20, 0x41, 0x00, 0x01, 0x42, 0x62, 0x18, 0x01, 0x40, 0x63, 0x00, 0x10, -0x00, 0x11, 0x7f, 0xfe, 0x4e, 0x12, 0x00, 0x08, 0x20, 0x51, 0x00, 0x00, 0x40, 0xf1, 0x94, 0x07, -0x4e, 0xf3, 0x00, 0x0a, 0x58, 0x51, 0x80, 0x00, 0x48, 0x00, 0x00, 0x06, 0x58, 0x51, 0x80, 0x00, -0x58, 0x62, 0x00, 0x00, 0x50, 0x84, 0x00, 0x01, 0x54, 0x84, 0x00, 0xff, 0x45, 0xe0, 0x00, 0x0f, -0x50, 0x21, 0x00, 0x0c, 0x4c, 0x8f, 0x00, 0x06, 0x58, 0x32, 0x80, 0x00, 0x48, 0xff, 0xff, 0xa6, -0x3e, 0x57, 0xf9, 0xc9, 0x3e, 0x67, 0xf9, 0xca, 0x54, 0x32, 0x80, 0xff, 0x40, 0x4f, 0x04, 0x08, -0x54, 0x23, 0x00, 0xff, 0x44, 0x10, 0x00, 0x7f, 0x44, 0x00, 0x00, 0x02, 0x49, 0xff, 0xcf, 0x4e, -0x3e, 0x2f, 0xcf, 0x8c, 0x44, 0x00, 0x00, 0x01, 0x3e, 0x1f, 0x2d, 0xb8, 0x49, 0xf7, 0xb9, 0x3a, -0x44, 0x00, 0x00, 0x01, 0x44, 0x10, 0x00, 0x00, 0x49, 0xf7, 0xb9, 0x5c, 0x46, 0x58, 0x00, 0x22, -0x04, 0x42, 0x80, 0x07, 0x46, 0x30, 0x11, 0x10, 0x40, 0x22, 0x0c, 0x04, 0x14, 0x22, 0x80, 0x07, -0x58, 0x02, 0x80, 0x00, 0x04, 0x10, 0x00, 0x06, 0x58, 0x50, 0x00, 0x00, 0x40, 0x40, 0x8c, 0x04, -0x14, 0x40, 0x00, 0x06, 0x04, 0x32, 0x80, 0x00, 0x44, 0x00, 0x00, 0x01, 0x42, 0x21, 0xcc, 0x08, -0x14, 0x22, 0x80, 0x00, 0x49, 0xf7, 0xb9, 0xba, 0x44, 0x00, 0x00, 0x01, 0x49, 0xf7, 0xb9, 0x8e, -0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, -0x51, 0xff, 0xff, 0xfc, 0x44, 0x00, 0x00, 0x01, 0x49, 0xf7, 0xb9, 0x58, 0x44, 0x10, 0x00, 0x77, -0x44, 0x20, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, 0x49, 0xf7, 0xe7, 0x7c, 0x51, 0xff, 0x80, 0x04, -0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3c, 0x0d, 0xf9, 0x8a, 0x4a, 0x00, 0x78, 0x20, -0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x4e, 0x03, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, -0x3e, 0x1f, 0xcf, 0x94, 0x44, 0x20, 0x00, 0xda, 0x49, 0xff, 0xb3, 0xa8, 0x48, 0x00, 0x00, 0x00, -0x44, 0x30, 0x00, 0x00, 0x14, 0x20, 0x00, 0x04, 0x14, 0x30, 0x00, 0x01, 0x14, 0x10, 0x00, 0x05, -0x14, 0x30, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x4e, 0x03, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, -0x3e, 0x1f, 0xcf, 0x94, 0x44, 0x20, 0x01, 0x0a, 0x49, 0xff, 0xb3, 0x88, 0x48, 0x00, 0x00, 0x00, -0x04, 0x10, 0x00, 0x00, 0x4e, 0x12, 0x00, 0x1e, 0x04, 0x50, 0x00, 0x01, 0x44, 0x40, 0x00, 0x00, -0x14, 0x50, 0x80, 0x01, 0x14, 0x12, 0x80, 0x00, 0x14, 0x40, 0x00, 0x00, 0x14, 0x40, 0x00, 0x01, -0x3e, 0x0f, 0xf9, 0xcc, 0x04, 0x30, 0x00, 0x02, 0x04, 0x10, 0x00, 0x00, 0x50, 0x21, 0xff, 0xff, -0x14, 0x20, 0x00, 0x02, 0x4c, 0x10, 0x40, 0x06, 0x04, 0x00, 0x80, 0x03, 0x49, 0xf7, 0xbc, 0x46, -0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, -0x51, 0xff, 0xff, 0xfc, 0x3c, 0x1d, 0xfe, 0x76, 0x58, 0x70, 0x00, 0x00, 0x4e, 0x12, 0x00, 0x14, -0x58, 0x00, 0x80, 0x00, 0x49, 0xf7, 0xbc, 0x32, 0x44, 0x00, 0x03, 0xe8, 0x42, 0x33, 0x80, 0x24, -0x44, 0x20, 0x7f, 0xff, 0x40, 0x11, 0x88, 0x00, 0x3c, 0x0d, 0xfe, 0x76, 0x40, 0x10, 0xbc, 0x09, -0x49, 0xf7, 0xbd, 0x16, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x49, 0xf7, 0xbc, 0x70, 0x46, 0x17, 0xff, 0xff, -0x58, 0x10, 0x8f, 0xff, 0x58, 0x80, 0x00, 0x00, 0x40, 0xa0, 0x04, 0x00, 0x46, 0x00, 0x01, 0xe0, -0x3e, 0x2f, 0xf9, 0xcc, 0x14, 0xa1, 0x00, 0x04, 0x58, 0x71, 0x00, 0x00, 0x04, 0x61, 0x00, 0x00, -0x41, 0xc4, 0x00, 0x00, 0x48, 0x00, 0x00, 0x5c, 0x4e, 0x63, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, -0x3e, 0x1f, 0xcf, 0x94, 0x44, 0x20, 0x01, 0x7d, 0x49, 0xff, 0xb3, 0x18, 0x48, 0x00, 0x00, 0x00, -0x04, 0x03, 0x00, 0x02, 0x40, 0x34, 0x00, 0x01, 0x4e, 0x35, 0x00, 0x3c, 0x04, 0x43, 0x00, 0x00, -0x4e, 0x43, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcf, 0x94, 0x44, 0x20, 0x01, 0x81, -0x49, 0xff, 0xb3, 0x04, 0x48, 0x00, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xff, 0x6a, -0x02, 0x03, 0x00, 0x06, 0x4e, 0x02, 0x00, 0x1a, 0x50, 0x00, 0x7f, 0xff, 0x12, 0x03, 0x00, 0x06, -0x15, 0xc3, 0x00, 0x02, 0x05, 0xe3, 0x80, 0x01, 0x14, 0x63, 0x80, 0x01, 0x14, 0x73, 0x00, 0x00, -0x15, 0xe3, 0x00, 0x01, 0x14, 0x6f, 0x00, 0x00, 0x04, 0x63, 0x80, 0x02, 0x50, 0x53, 0x00, 0x01, -0x14, 0x53, 0x80, 0x02, 0x48, 0x00, 0x00, 0x0a, 0x04, 0x13, 0x00, 0x05, 0x4e, 0x12, 0x00, 0x06, -0x04, 0x03, 0x00, 0x04, 0x4b, 0xe0, 0x04, 0x01, 0x14, 0xa3, 0x80, 0x04, 0x48, 0x00, 0x00, 0x0e, -0x04, 0x23, 0x80, 0x04, 0x40, 0x90, 0x08, 0x01, 0x4e, 0x95, 0x00, 0x04, 0x48, 0x00, 0x00, 0x04, -0x14, 0x03, 0x80, 0x04, 0x58, 0x93, 0x00, 0x00, 0x04, 0x64, 0x80, 0x00, 0x3e, 0x9f, 0xf9, 0xcc, -0x4c, 0x64, 0xff, 0xa4, 0x04, 0x53, 0x00, 0x00, 0x4c, 0x53, 0x00, 0x16, 0x04, 0x03, 0x00, 0x04, -0x40, 0x34, 0x00, 0x01, 0x4e, 0x35, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcf, 0x94, -0x44, 0x20, 0x01, 0xa0, 0x49, 0xff, 0xb2, 0xb2, 0x48, 0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x01, -0x49, 0xff, 0xff, 0x4e, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x58, 0x60, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x0c, -0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcf, 0x94, 0x44, 0x20, 0x01, 0x2d, 0x49, 0xff, 0xb2, 0x96, -0x48, 0x00, 0x00, 0x00, 0x44, 0x00, 0xea, 0x60, 0x40, 0xf0, 0x04, 0x06, 0x4e, 0xf2, 0x00, 0x28, -0x46, 0x2e, 0xa5, 0xf1, 0x58, 0x21, 0x05, 0xa0, 0x40, 0xf1, 0x04, 0x06, 0x4e, 0xf2, 0x00, 0x0c, -0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcf, 0x94, 0x44, 0x20, 0x01, 0x35, 0x49, 0xff, 0xb2, 0x7e, -0x48, 0x00, 0x00, 0x00, 0x40, 0x40, 0x80, 0x77, 0x44, 0x3f, 0x15, 0xa0, 0x40, 0x22, 0x00, 0x13, -0x42, 0x11, 0x0c, 0x73, 0x12, 0x23, 0x00, 0x06, 0x4e, 0x13, 0x00, 0x10, 0x50, 0x11, 0x7f, 0xff, -0x12, 0x13, 0x00, 0x06, 0x58, 0x10, 0x00, 0x00, 0x48, 0x00, 0x00, 0x18, 0x44, 0x00, 0x00, 0x00, -0x12, 0x03, 0x00, 0x06, 0x48, 0x00, 0x00, 0x12, 0x44, 0x50, 0xff, 0xfe, 0x40, 0xf2, 0x84, 0x06, -0x4e, 0xf2, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcf, 0x94, 0x44, 0x20, 0x01, 0x48, -0x49, 0xff, 0xb2, 0x54, 0x48, 0x00, 0x00, 0x00, 0x40, 0x30, 0xbc, 0x08, 0x50, 0x71, 0x83, 0xe7, -0x44, 0x90, 0x03, 0xe8, 0x40, 0x83, 0xa4, 0x57, 0x45, 0xe0, 0x00, 0x01, 0x3e, 0x7f, 0xf9, 0xcc, -0x40, 0x94, 0x20, 0x1b, 0x40, 0x9f, 0x20, 0x1a, 0x49, 0xf7, 0xbb, 0x78, 0x04, 0x23, 0x80, 0x00, -0x40, 0x80, 0x24, 0x00, 0x4c, 0x23, 0x80, 0x08, 0x04, 0x13, 0x80, 0x04, 0x40, 0x44, 0x04, 0x01, -0x4e, 0x44, 0x00, 0x08, 0x3c, 0x8f, 0xfe, 0x77, 0x58, 0x04, 0x80, 0x00, 0x49, 0xff, 0xfe, 0xd0, -0x04, 0x03, 0x00, 0x00, 0x14, 0x83, 0x00, 0x02, 0x4e, 0x03, 0x00, 0x12, 0x3c, 0x3d, 0xfe, 0x74, -0x14, 0x63, 0x80, 0x01, 0x14, 0x73, 0x00, 0x00, 0x14, 0x33, 0x00, 0x01, 0x14, 0x61, 0x80, 0x00, -0x05, 0xe3, 0x80, 0x02, 0x50, 0x2f, 0x00, 0x01, 0x14, 0x23, 0x80, 0x02, 0x51, 0xff, 0x80, 0x04, -0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xfc, -0x46, 0x10, 0x01, 0x15, 0x2e, 0x07, 0xe5, 0xa3, 0x4e, 0x02, 0x00, 0x26, 0x3e, 0x6f, 0xf9, 0xcc, -0x04, 0x03, 0x00, 0x03, 0x44, 0x70, 0x00, 0x00, 0x44, 0x20, 0x00, 0x00, 0x3e, 0x27, 0xe5, 0xa3, -0x14, 0x63, 0x00, 0x00, 0x14, 0x63, 0x00, 0x01, 0x14, 0x73, 0x00, 0x02, 0x4e, 0x03, 0x00, 0x0c, -0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcf, 0x94, 0x44, 0x20, 0x00, 0xc2, 0x49, 0xff, 0xb1, 0xee, -0x48, 0x00, 0x00, 0x00, 0x49, 0xf7, 0xba, 0xca, 0x04, 0x03, 0x00, 0x03, 0x49, 0xf7, 0xba, 0x38, -0x14, 0x73, 0x00, 0x03, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0x98, 0xbc, 0x46, 0x10, 0x01, 0x15, 0x3e, 0x6f, 0xf9, 0xcc, 0x44, 0x20, 0x00, 0x00, -0x2e, 0x07, 0xe5, 0xa3, 0x14, 0x23, 0x00, 0x02, 0x44, 0x20, 0x00, 0x01, 0x14, 0x63, 0x00, 0x00, -0x14, 0x63, 0x00, 0x01, 0x4c, 0x01, 0x00, 0x1a, 0x04, 0x03, 0x00, 0x03, 0x3e, 0x27, 0xe5, 0xa3, -0x4e, 0x03, 0x00, 0x12, 0x49, 0xf7, 0xba, 0x58, 0x14, 0x03, 0x00, 0x03, 0x4e, 0x03, 0x00, 0x0e, -0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xcf, 0x94, 0x44, 0x20, 0x00, 0xa2, 0x49, 0xff, 0xb1, 0xb6, -0x48, 0x00, 0x00, 0x00, 0x49, 0xf7, 0xba, 0x92, 0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x54, 0x00, 0x00, 0xff, 0x49, 0xff, 0xed, 0xf4, -0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, -0x51, 0xff, 0xff, 0xfc, 0x58, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0d, 0x02, 0x11, 0x00, 0x1d, -0x00, 0x30, 0x00, 0x01, 0x42, 0x10, 0xb0, 0x0b, 0x00, 0x20, 0x00, 0x02, 0x4c, 0x30, 0x80, 0x14, -0x10, 0x10, 0x00, 0x01, 0x3e, 0x3f, 0xf6, 0x70, 0x38, 0x41, 0x88, 0x00, 0x44, 0x50, 0x00, 0x01, -0x4c, 0x42, 0x80, 0x0a, 0x4c, 0x12, 0xc0, 0x04, 0x38, 0x11, 0x88, 0x08, 0x00, 0x10, 0x00, 0x01, -0x49, 0xff, 0xd8, 0x0a, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x04, 0x50, 0x00, 0x06, 0x04, 0x30, 0x00, 0x0d, -0x00, 0x42, 0x80, 0x07, 0x40, 0x22, 0x08, 0x09, 0x10, 0x21, 0x80, 0x00, 0x05, 0xe0, 0x00, 0x06, -0x04, 0x40, 0x00, 0x0d, 0x00, 0x5f, 0x00, 0x08, 0x44, 0x20, 0x00, 0x01, 0x10, 0x52, 0x00, 0x02, -0x2e, 0x17, 0xe2, 0x0c, 0x4c, 0x11, 0x40, 0x04, 0x49, 0xff, 0xff, 0xba, 0x51, 0xff, 0x80, 0x04, -0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xfc, -0x44, 0x00, 0x00, 0x30, 0x49, 0xf7, 0xc5, 0xaa, 0x58, 0x90, 0x00, 0x00, 0x49, 0xf7, 0xc5, 0x78, -0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x30, 0x58, 0x60, 0x00, 0x00, 0x49, 0xf7, 0xbf, 0xe6, -0x44, 0x20, 0x00, 0x30, 0x12, 0x23, 0x00, 0x00, 0x2e, 0x17, 0xfa, 0x12, 0x50, 0x83, 0x00, 0x20, -0x00, 0x03, 0x00, 0x03, 0x4e, 0x13, 0x00, 0x0a, 0x44, 0x4f, 0xff, 0x87, 0x40, 0x30, 0x10, 0x02, -0x58, 0x01, 0x80, 0x20, 0x48, 0x00, 0x00, 0x08, 0x44, 0x7f, 0xff, 0x87, 0x40, 0x50, 0x1c, 0x02, -0x58, 0x02, 0x80, 0x68, 0x10, 0x03, 0x00, 0x03, 0x00, 0x73, 0x00, 0x07, 0x00, 0x03, 0x00, 0x03, -0x44, 0x2f, 0xff, 0xc8, 0x54, 0xa0, 0x00, 0x7f, 0x10, 0xa3, 0x00, 0x03, 0x54, 0x03, 0x80, 0x03, -0x3e, 0x7f, 0xfa, 0x08, 0x00, 0x53, 0x80, 0x01, 0x10, 0x03, 0x00, 0x07, 0x10, 0x53, 0x00, 0x04, -0x10, 0x23, 0x00, 0x05, 0x02, 0x43, 0x00, 0x06, 0x01, 0xc3, 0x80, 0x07, 0x00, 0x13, 0x00, 0x15, -0x02, 0x33, 0x00, 0x0d, 0x00, 0x53, 0x00, 0x0b, 0x41, 0xce, 0x08, 0x08, 0x00, 0xa3, 0x00, 0x09, -0x00, 0x23, 0x00, 0x19, 0x40, 0x00, 0x70, 0x04, 0x45, 0xef, 0xc0, 0x03, 0x45, 0xcf, 0xff, 0x80, -0x40, 0x52, 0xf0, 0x04, 0x40, 0x31, 0xf8, 0x02, 0x45, 0xef, 0xf8, 0x00, 0x54, 0x42, 0x00, 0x3f, -0x54, 0x10, 0x80, 0xdd, 0x40, 0x42, 0x78, 0x04, 0x58, 0x31, 0x80, 0x04, 0x40, 0x21, 0x0c, 0x09, -0x40, 0x21, 0x0c, 0x08, 0x58, 0x10, 0x80, 0x22, 0x58, 0xa5, 0x00, 0x10, 0x45, 0xcf, 0xff, 0xff, -0x12, 0x43, 0x00, 0x06, 0x10, 0x03, 0x00, 0x07, 0x10, 0x53, 0x00, 0x0b, 0x12, 0x33, 0x00, 0x0d, -0x10, 0x13, 0x00, 0x15, 0x11, 0xc3, 0x00, 0x14, 0x10, 0xa3, 0x00, 0x09, 0x10, 0x23, 0x00, 0x19, -0x44, 0x60, 0x10, 0xa4, 0x12, 0x64, 0x00, 0x00, 0x45, 0xef, 0xc0, 0x00, 0x02, 0x23, 0x80, 0x04, -0x40, 0x01, 0x78, 0x04, 0x12, 0x04, 0x00, 0x01, 0x3e, 0x1f, 0xfa, 0x00, 0x44, 0x20, 0x00, 0x06, -0x50, 0x04, 0x00, 0x04, 0x49, 0xf7, 0xbf, 0x4e, 0x3e, 0x1f, 0xf9, 0xf8, 0x50, 0x04, 0x00, 0x0a, -0x44, 0x20, 0x00, 0x06, 0x49, 0xf7, 0xbf, 0x46, 0x00, 0x13, 0x80, 0x0a, 0x4e, 0x13, 0x00, 0x0c, -0x58, 0x24, 0x80, 0x00, 0x44, 0x10, 0x00, 0x04, 0x44, 0x30, 0x00, 0x01, 0x44, 0x00, 0x00, 0x02, -0x48, 0x00, 0x00, 0x0a, 0x58, 0x24, 0x80, 0x00, 0x44, 0x00, 0x00, 0x02, 0x44, 0x10, 0x00, 0x0d, -0x44, 0x30, 0x00, 0x01, 0x49, 0xf7, 0xc8, 0xfe, 0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, +0x58, 0x00, 0x0d, 0x10, 0x04, 0x10, 0x00, 0x00, 0x40, 0x10, 0x90, 0x02, 0x14, 0x10, 0x00, 0x00, +0x4a, 0x00, 0x78, 0x20, 0x54, 0x00, 0x00, 0xff, 0x4e, 0x02, 0x00, 0x8a, 0x2e, 0x37, 0xe1, 0xb2, +0x44, 0x20, 0x00, 0x01, 0x3e, 0x27, 0xe0, 0x4d, 0x4e, 0x33, 0x00, 0x06, 0x2e, 0x17, 0xe1, 0xb3, +0x4e, 0x12, 0x00, 0x2a, 0x46, 0x06, 0x02, 0x00, 0x04, 0x40, 0x01, 0x48, 0x46, 0x3f, 0xf0, 0x00, +0x40, 0x22, 0x0c, 0x02, 0x46, 0x40, 0x0b, 0x20, 0x58, 0x42, 0x04, 0xc1, 0x40, 0x51, 0x10, 0x04, +0x14, 0x50, 0x01, 0x48, 0x46, 0x16, 0x02, 0x01, 0x04, 0x20, 0x81, 0x48, 0x46, 0x06, 0x02, 0x00, +0x40, 0x51, 0x0c, 0x02, 0x40, 0x22, 0x90, 0x04, 0x14, 0x20, 0x81, 0x48, 0x58, 0x00, 0x00, 0xfc, +0x04, 0x50, 0x00, 0x00, 0x46, 0x3f, 0xff, 0x00, 0x58, 0x31, 0x80, 0xff, 0x40, 0x12, 0x8c, 0x02, +0x48, 0x00, 0x00, 0x3a, 0x46, 0x06, 0x02, 0x00, 0x04, 0x40, 0x01, 0x48, 0x3c, 0x2d, 0xfe, 0x19, +0x40, 0x12, 0x60, 0x09, 0x40, 0x10, 0xe0, 0x08, 0x40, 0x50, 0x88, 0x04, 0x14, 0x50, 0x01, 0x48, +0x46, 0x56, 0x02, 0x01, 0x04, 0x12, 0x81, 0x48, 0x40, 0x30, 0xe0, 0x09, 0x40, 0x31, 0xe0, 0x08, +0x40, 0x21, 0x88, 0x04, 0x14, 0x22, 0x81, 0x48, 0x46, 0x06, 0x02, 0x00, 0x58, 0x00, 0x00, 0xfc, +0x2e, 0x17, 0xf8, 0x6d, 0x04, 0x20, 0x00, 0x00, 0x44, 0x4f, 0xc0, 0xff, 0x40, 0x30, 0xa0, 0x08, +0x40, 0x51, 0x10, 0x02, 0x40, 0x41, 0x94, 0x04, 0x14, 0x40, 0x00, 0x00, 0x46, 0x3f, 0xff, 0x03, +0x04, 0x20, 0x00, 0x00, 0x58, 0x31, 0x8f, 0xff, 0x40, 0x10, 0xb8, 0x08, 0x40, 0x51, 0x0c, 0x02, +0x40, 0x10, 0x94, 0x04, 0x14, 0x10, 0x00, 0x00, 0x2e, 0x07, 0xe3, 0xbd, 0x4e, 0x02, 0x00, 0x86, +0x46, 0x36, 0x02, 0x00, 0x04, 0x51, 0x83, 0x44, 0x46, 0x40, 0x0f, 0xff, 0x58, 0x42, 0x0f, 0xff, +0x40, 0x22, 0x90, 0x02, 0x46, 0x06, 0x02, 0x01, 0x14, 0x21, 0x83, 0x44, 0x58, 0x00, 0x0d, 0x10, +0x04, 0x10, 0x00, 0x00, 0x40, 0x10, 0x90, 0x02, 0x48, 0x00, 0x00, 0x6e, 0x2e, 0x07, 0xe1, 0xb2, +0x44, 0x40, 0x00, 0x01, 0x3e, 0x47, 0xe0, 0x4e, 0x4e, 0x03, 0x00, 0x06, 0x2e, 0x17, 0xe1, 0xb3, +0x4e, 0x12, 0x00, 0x2a, 0x46, 0x06, 0x02, 0x00, 0x04, 0x40, 0x01, 0x48, 0x46, 0x3f, 0xf0, 0x00, +0x40, 0x22, 0x0c, 0x02, 0x46, 0x40, 0x0b, 0x61, 0x58, 0x42, 0x05, 0x02, 0x40, 0x51, 0x10, 0x04, +0x14, 0x50, 0x01, 0x48, 0x46, 0x16, 0x02, 0x01, 0x04, 0x20, 0x81, 0x48, 0x46, 0x06, 0x02, 0x00, +0x40, 0x51, 0x0c, 0x02, 0x40, 0x32, 0x90, 0x04, 0x14, 0x30, 0x81, 0x48, 0x58, 0x00, 0x00, 0xfc, +0x04, 0x50, 0x00, 0x00, 0x46, 0x2f, 0xff, 0x00, 0x58, 0x21, 0x00, 0xff, 0x40, 0x12, 0x88, 0x02, +0x48, 0x00, 0x00, 0x3a, 0x46, 0x06, 0x02, 0x00, 0x04, 0x40, 0x01, 0x48, 0x3c, 0x2d, 0xfe, 0x1a, +0x40, 0x12, 0x60, 0x09, 0x40, 0x10, 0xe0, 0x08, 0x40, 0x50, 0x88, 0x04, 0x14, 0x50, 0x01, 0x48, +0x46, 0x56, 0x02, 0x01, 0x04, 0x12, 0x81, 0x48, 0x40, 0x30, 0xe0, 0x09, 0x40, 0x31, 0xe0, 0x08, +0x40, 0x21, 0x88, 0x04, 0x14, 0x22, 0x81, 0x48, 0x46, 0x06, 0x02, 0x00, 0x58, 0x00, 0x00, 0xfc, +0x2e, 0x17, 0xf8, 0x6e, 0x04, 0x20, 0x00, 0x00, 0x44, 0x4f, 0xc0, 0xff, 0x40, 0x30, 0xa0, 0x08, +0x40, 0x51, 0x10, 0x02, 0x40, 0x41, 0x94, 0x04, 0x14, 0x40, 0x00, 0x00, 0x46, 0x3f, 0xff, 0x03, +0x04, 0x20, 0x00, 0x00, 0x58, 0x31, 0x8f, 0xff, 0x40, 0x10, 0xb8, 0x08, 0x40, 0x51, 0x0c, 0x02, +0x40, 0x10, 0x94, 0x04, 0x14, 0x10, 0x00, 0x00, 0x4a, 0x00, 0x78, 0x20, 0x46, 0x28, 0x00, 0x22, +0x04, 0x11, 0x00, 0x00, 0x54, 0x00, 0xff, 0x00, 0x40, 0x00, 0x20, 0x09, 0x4a, 0x00, 0x78, 0x20, +0x46, 0x48, 0x00, 0x22, 0x04, 0x12, 0x00, 0x00, 0x42, 0x50, 0xcc, 0x09, 0x14, 0x52, 0x00, 0x00, +0x58, 0x02, 0x00, 0x00, 0x04, 0x30, 0x00, 0x06, 0x46, 0x2f, 0xee, 0xef, 0x58, 0x21, 0x0f, 0xff, +0x40, 0x11, 0x88, 0x02, 0x14, 0x10, 0x00, 0x06, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, +0x51, 0xff, 0xff, 0xfc, 0x46, 0x48, 0x00, 0x22, 0x04, 0x12, 0x00, 0x00, 0x2e, 0x57, 0xe2, 0x19, +0x55, 0xe0, 0xff, 0x00, 0x2e, 0x2f, 0xe2, 0x1b, 0x40, 0x4f, 0x20, 0x09, 0x40, 0x12, 0x14, 0x01, +0x50, 0x31, 0x00, 0x38, 0x42, 0x50, 0x8c, 0x24, 0x45, 0xe0, 0x00, 0x1e, 0x40, 0x32, 0xf8, 0x57, +0x2e, 0x27, 0xe2, 0x1a, 0x54, 0x00, 0x00, 0xff, 0x40, 0x11, 0x88, 0x00, 0x40, 0x10, 0x80, 0x10, +0x49, 0xff, 0xe8, 0x42, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x2e, 0x07, 0xe3, 0xb2, 0x3e, 0x1f, 0xe0, 0x18, +0x49, 0xff, 0xed, 0x0a, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xd4, 0x44, 0x70, 0x00, 0x00, 0x46, 0x68, 0x00, 0x22, +0x58, 0x83, 0x80, 0x00, 0x58, 0x93, 0x80, 0x00, 0x59, 0xcf, 0x80, 0x00, 0x04, 0x43, 0x00, 0x00, +0x46, 0x20, 0x00, 0xc0, 0x40, 0x12, 0x08, 0x04, 0x14, 0x13, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, +0x49, 0xf7, 0xc0, 0x7a, 0x04, 0x13, 0x00, 0x00, 0x40, 0x00, 0xbc, 0x08, 0x40, 0x00, 0x7c, 0x09, +0x4e, 0x03, 0x00, 0x40, 0x54, 0x70, 0xff, 0x00, 0x40, 0x73, 0xa0, 0x09, 0x54, 0x00, 0x80, 0x7f, +0x40, 0xf3, 0x80, 0x06, 0x4e, 0xf2, 0x00, 0x06, 0x40, 0x20, 0x1c, 0x01, 0x48, 0x00, 0x00, 0x04, +0x40, 0x23, 0x80, 0x01, 0x54, 0x51, 0x00, 0xff, 0x5c, 0xf2, 0x80, 0x03, 0x4e, 0xf2, 0x00, 0x04, +0x4e, 0x03, 0x00, 0x3e, 0x04, 0x53, 0x00, 0x00, 0x42, 0x22, 0xc8, 0x09, 0x42, 0x21, 0x4c, 0x09, +0x14, 0x23, 0x00, 0x00, 0x40, 0x00, 0x20, 0x08, 0x04, 0x43, 0x00, 0x00, 0x42, 0x32, 0x4c, 0x08, +0x41, 0xe1, 0x80, 0x04, 0x15, 0xe3, 0x00, 0x00, 0x5c, 0xf4, 0x83, 0xde, 0x4e, 0xf3, 0x00, 0x0a, +0x5c, 0xf4, 0x00, 0x0a, 0x4e, 0xf2, 0x00, 0x06, 0x38, 0x1e, 0x22, 0x0a, 0x50, 0x84, 0x00, 0x01, +0x04, 0x33, 0x00, 0x00, 0x42, 0x01, 0xc8, 0x09, 0x42, 0x00, 0x4c, 0x09, 0x14, 0x03, 0x00, 0x00, +0x50, 0x94, 0x80, 0x01, 0x44, 0x40, 0x03, 0xe8, 0x4c, 0x92, 0x7f, 0xaa, 0x48, 0x00, 0x00, 0x18, +0x0c, 0x24, 0x80, 0x01, 0x50, 0x63, 0x00, 0x01, 0x4b, 0xe0, 0x28, 0x01, 0x58, 0x13, 0x00, 0x00, +0x3e, 0x0f, 0xcc, 0xf8, 0x40, 0xf3, 0x20, 0x06, 0x4e, 0xf3, 0xff, 0xf4, 0x58, 0x03, 0x80, 0x00, +0x51, 0xff, 0x80, 0x2c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3e, 0x6e, 0x95, 0x54, +0x3e, 0x0f, 0xcd, 0x0c, 0x4b, 0xe0, 0x18, 0x01, 0x58, 0xa3, 0x00, 0x00, 0x58, 0x9f, 0x80, 0x00, +0x44, 0x60, 0x00, 0x00, 0x48, 0xff, 0xff, 0xe4, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, +0x40, 0x21, 0x00, 0x10, 0x54, 0x10, 0x80, 0xff, 0x4e, 0x26, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, +0x3e, 0x1f, 0xcc, 0xcc, 0x44, 0x20, 0x07, 0x35, 0x49, 0xff, 0xb6, 0x50, 0x48, 0x00, 0x00, 0x00, +0x2f, 0xef, 0xe2, 0x1b, 0x44, 0x40, 0x00, 0x1e, 0x42, 0x51, 0x10, 0x24, 0x50, 0x4f, 0x00, 0x38, +0x40, 0x22, 0x90, 0x76, 0x54, 0x21, 0x00, 0xff, 0x52, 0x31, 0x00, 0x7f, 0x40, 0xf1, 0x84, 0x07, +0x4e, 0xf3, 0x00, 0x0a, 0x40, 0x51, 0x04, 0x00, 0x10, 0x50, 0x00, 0x04, 0x44, 0x30, 0x00, 0x01, +0x48, 0x00, 0x00, 0x04, 0x44, 0x30, 0x00, 0x00, 0x10, 0x30, 0x00, 0x02, 0x40, 0xf0, 0x88, 0x06, +0x4e, 0xf3, 0x00, 0x0c, 0x40, 0x10, 0x88, 0x01, 0x44, 0x20, 0x00, 0x01, 0x10, 0x20, 0x00, 0x01, +0x10, 0x10, 0x00, 0x03, 0x48, 0x00, 0x00, 0x06, 0x45, 0xe0, 0x00, 0x00, 0x11, 0xe0, 0x00, 0x01, +0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, +0x54, 0x00, 0x00, 0xff, 0x2e, 0x67, 0xe3, 0xb9, 0x2e, 0x77, 0xe3, 0xb8, 0x3c, 0x83, 0xf1, 0xd8, +0x4e, 0x02, 0x00, 0x06, 0x2e, 0x17, 0xe0, 0x38, 0x48, 0x00, 0x00, 0x04, 0x2e, 0x17, 0xe0, 0x37, +0x2e, 0x2f, 0xe0, 0x30, 0x3e, 0x0f, 0xe0, 0x34, 0x49, 0xff, 0xff, 0xa0, 0x3e, 0x0f, 0xcd, 0x24, +0x49, 0xff, 0xb5, 0xfc, 0x2e, 0x27, 0xe3, 0xd8, 0x44, 0x40, 0x00, 0x01, 0x4c, 0x22, 0x40, 0x0a, +0x46, 0x10, 0x10, 0x08, 0x58, 0x10, 0x82, 0xd0, 0x44, 0x00, 0x00, 0x44, 0x49, 0x00, 0x2d, 0x84, +0x49, 0x00, 0x3e, 0x36, 0x44, 0x20, 0x00, 0x00, 0x54, 0x04, 0x00, 0xff, 0x58, 0x13, 0x80, 0x00, +0x58, 0x43, 0x00, 0x00, 0x58, 0x31, 0x00, 0x00, 0x49, 0x00, 0x3e, 0xae, 0x3a, 0x6f, 0xa0, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x46, 0x08, 0x00, 0x22, +0x04, 0x10, 0x00, 0x00, 0x3e, 0x0f, 0xf7, 0x68, 0x54, 0x70, 0xff, 0x00, 0x20, 0x10, 0x00, 0x02, +0x40, 0x73, 0xa0, 0x09, 0x40, 0xf3, 0x84, 0x07, 0x4e, 0xf3, 0x00, 0x4a, 0x3e, 0x9f, 0xe0, 0x36, +0x44, 0x80, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x50, 0x64, 0x80, 0x06, 0x59, 0xc4, 0x00, 0x00, +0x00, 0x24, 0x80, 0x00, 0x4e, 0x22, 0x00, 0x2e, 0x20, 0x34, 0x80, 0x02, 0x2e, 0x4f, 0xf7, 0x6a, +0x50, 0x54, 0x7f, 0xfb, 0x54, 0x22, 0x80, 0xff, 0x40, 0xf2, 0x0c, 0x07, 0x4e, 0xf3, 0x00, 0x22, +0x04, 0x13, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, 0x4e, 0x12, 0x00, 0x1c, 0x5c, 0xf1, 0x00, 0x0f, +0x4e, 0xf2, 0x00, 0x04, 0x48, 0x00, 0x00, 0x4e, 0x44, 0x50, 0x00, 0x03, 0x4c, 0x82, 0xc0, 0x0c, +0x44, 0x00, 0x00, 0x01, 0x3e, 0x07, 0xe0, 0x65, 0x3f, 0xc7, 0xe0, 0x5a, 0x44, 0x00, 0x00, 0x01, +0x48, 0x00, 0x00, 0x04, 0x11, 0xc4, 0x80, 0x00, 0x04, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x08, 0x01, +0x50, 0x84, 0x00, 0x01, 0x54, 0x84, 0x00, 0xff, 0x44, 0x50, 0x00, 0x14, 0x50, 0x94, 0x80, 0x0c, +0x50, 0x63, 0x00, 0x0c, 0x4c, 0x82, 0xff, 0xc6, 0x48, 0x00, 0x00, 0x50, 0x20, 0x10, 0x00, 0x01, +0x40, 0xf0, 0x9c, 0x07, 0x4e, 0xf3, 0x00, 0x4a, 0x3e, 0x9f, 0xe0, 0x35, 0x44, 0x80, 0x00, 0x00, +0x10, 0x10, 0x00, 0x00, 0x50, 0x64, 0x80, 0x07, 0x59, 0xc4, 0x00, 0x00, 0x00, 0x44, 0x80, 0x00, +0x4e, 0x42, 0x00, 0x30, 0x21, 0xe4, 0x80, 0x02, 0x2e, 0x5f, 0xf7, 0x69, 0x50, 0x14, 0x7f, 0xfb, +0x54, 0x20, 0x80, 0xff, 0x40, 0xff, 0x14, 0x07, 0x4e, 0xf3, 0x00, 0x24, 0x04, 0x13, 0x00, 0x00, +0x44, 0x00, 0x00, 0x00, 0x4e, 0x12, 0x00, 0x1e, 0x5c, 0xf1, 0x00, 0x0f, 0x4e, 0xf2, 0x00, 0x06, +0x4b, 0xe0, 0x04, 0x01, 0x48, 0x00, 0x00, 0x22, 0x44, 0x50, 0x00, 0x04, 0x4c, 0x82, 0xc0, 0x0c, +0x44, 0x30, 0x00, 0x01, 0x3e, 0x37, 0xe0, 0x5a, 0x3f, 0xc7, 0xe0, 0x65, 0x44, 0x00, 0x00, 0x00, +0x48, 0x00, 0x00, 0x04, 0x11, 0xc4, 0x80, 0x00, 0x04, 0x43, 0x00, 0x00, 0x4b, 0xe0, 0x10, 0x01, +0x50, 0x84, 0x00, 0x01, 0x54, 0x84, 0x00, 0xff, 0x44, 0x50, 0x00, 0x14, 0x50, 0x94, 0x80, 0x0c, +0x50, 0x63, 0x00, 0x0c, 0x4c, 0x82, 0xff, 0xc4, 0x2e, 0x47, 0xe3, 0xbe, 0x44, 0x10, 0x00, 0x00, +0x3e, 0x0f, 0xe0, 0x37, 0x44, 0x20, 0x00, 0xfb, 0x44, 0x60, 0x00, 0x7f, 0x5c, 0xf1, 0x00, 0x0f, +0x4e, 0xf2, 0x00, 0x08, 0x4e, 0x42, 0x00, 0x40, 0x00, 0x30, 0x7f, 0xff, 0x48, 0x00, 0x00, 0x0c, +0x50, 0x31, 0x00, 0x02, 0x55, 0xe1, 0x80, 0xff, 0x00, 0x30, 0x7f, 0xff, 0x5c, 0xff, 0x00, 0x02, +0x4e, 0xf2, 0x00, 0x20, 0x4e, 0x32, 0x00, 0x0c, 0x20, 0x30, 0x00, 0x01, 0x40, 0xf1, 0x98, 0x07, +0x4e, 0xf2, 0x00, 0x06, 0x40, 0xf3, 0x8c, 0x07, 0x4e, 0xf3, 0x00, 0x04, 0x58, 0x33, 0x00, 0x00, +0x00, 0x50, 0x7f, 0xfe, 0x4e, 0x52, 0x00, 0x24, 0x20, 0x50, 0x00, 0x00, 0x40, 0xf0, 0x94, 0x07, +0x4e, 0xf2, 0x00, 0x1e, 0x40, 0xf2, 0x9c, 0x07, 0x4e, 0xf2, 0x00, 0x1a, 0x48, 0x00, 0x00, 0x1a, +0x4e, 0x32, 0x00, 0x08, 0x21, 0xe0, 0x00, 0x01, 0x42, 0x6f, 0x18, 0x01, 0x40, 0x63, 0x00, 0x10, +0x00, 0x30, 0x7f, 0xfe, 0x4e, 0x32, 0x00, 0x08, 0x20, 0x50, 0x00, 0x00, 0x40, 0xf0, 0x94, 0x07, +0x4e, 0xf3, 0x00, 0x0a, 0x58, 0x50, 0x80, 0x00, 0x48, 0x00, 0x00, 0x06, 0x58, 0x50, 0x80, 0x00, +0x58, 0x61, 0x80, 0x00, 0x50, 0x21, 0x00, 0x01, 0x54, 0x21, 0x00, 0xff, 0x44, 0x10, 0x00, 0x0f, +0x50, 0x00, 0x00, 0x0c, 0x4c, 0x20, 0x80, 0x06, 0x58, 0x12, 0x80, 0x00, 0x48, 0xff, 0xff, 0xa8, +0x3e, 0x57, 0xf7, 0x69, 0x3e, 0x67, 0xf7, 0x6a, 0x54, 0x23, 0x00, 0xff, 0x54, 0x32, 0x80, 0xff, +0x44, 0x10, 0x00, 0x7f, 0x44, 0x40, 0x00, 0x1e, 0x44, 0x00, 0x00, 0x02, 0x49, 0xff, 0xd0, 0x06, +0x46, 0x48, 0x00, 0x22, 0x04, 0x12, 0x00, 0x07, 0x46, 0x30, 0x11, 0x10, 0x40, 0x50, 0x8c, 0x04, +0x14, 0x52, 0x00, 0x07, 0x44, 0x00, 0x00, 0x01, 0x49, 0xf7, 0xba, 0x90, 0x44, 0x00, 0x00, 0x01, +0x49, 0xf7, 0xba, 0x64, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x49, 0xff, 0xfd, 0xb4, 0x58, 0x90, 0x00, 0x00, +0x3e, 0x2f, 0xdf, 0xe4, 0x3e, 0x3f, 0xe0, 0x73, 0x28, 0x11, 0x00, 0x01, 0x3e, 0x0f, 0xdf, 0xec, +0x10, 0x11, 0x80, 0x01, 0x10, 0x11, 0x80, 0x00, 0x50, 0x31, 0x80, 0x0c, 0x4c, 0x20, 0x7f, 0xf6, +0x50, 0x01, 0x00, 0x02, 0x3e, 0x2f, 0xe0, 0xd3, 0x28, 0x40, 0x00, 0x01, 0x3e, 0x3f, 0xdf, 0xf5, +0x10, 0x41, 0x00, 0x01, 0x10, 0x41, 0x00, 0x00, 0x50, 0x21, 0x00, 0x0c, 0x4c, 0x01, 0xff, 0xf6, +0x3e, 0x6f, 0xe0, 0x34, 0x2f, 0xcf, 0xe2, 0x1a, 0x21, 0xe3, 0x00, 0x1c, 0x20, 0x83, 0x00, 0x0f, +0x20, 0x13, 0x00, 0x10, 0x20, 0x73, 0x00, 0x1b, 0x44, 0x20, 0x00, 0x1e, 0x40, 0xaf, 0x70, 0x01, +0x2f, 0xef, 0xe2, 0x1b, 0x40, 0x44, 0x70, 0x01, 0x40, 0x50, 0xf0, 0x01, 0x40, 0x33, 0xf0, 0x01, +0x42, 0x15, 0x08, 0x24, 0x42, 0x82, 0x08, 0x24, 0x42, 0x71, 0x88, 0x24, 0x50, 0x3f, 0x00, 0x38, +0x40, 0xa0, 0x8c, 0x16, 0x42, 0x52, 0x88, 0x24, 0x2e, 0x2f, 0xe0, 0x30, 0x2f, 0xe7, 0xe2, 0x19, +0x58, 0x14, 0x80, 0x00, 0x58, 0x03, 0x00, 0x00, 0x40, 0x84, 0x0f, 0x96, 0x40, 0x4f, 0x28, 0x00, +0x10, 0x43, 0x00, 0x1c, 0x40, 0x42, 0x8d, 0x56, 0x40, 0xaf, 0x20, 0x00, 0x10, 0xa3, 0x00, 0x0f, +0x40, 0x83, 0x8c, 0xf6, 0x40, 0x7f, 0x10, 0x00, 0x10, 0x73, 0x00, 0x10, 0x44, 0x70, 0x00, 0x01, +0x40, 0x5f, 0x20, 0x00, 0x10, 0x53, 0x00, 0x1b, 0x44, 0x80, 0x00, 0xfb, 0x49, 0xff, 0xfd, 0xd6, +0x44, 0x30, 0x00, 0x00, 0x2e, 0xa7, 0xe3, 0xbe, 0x58, 0x01, 0x80, 0x00, 0x50, 0x23, 0x00, 0x03, +0x44, 0x60, 0x00, 0x7f, 0x5c, 0xf4, 0x00, 0x0f, 0x4e, 0xf2, 0x00, 0x20, 0x4e, 0xa2, 0x00, 0x42, +0x20, 0x41, 0x00, 0x01, 0x10, 0x71, 0x7f, 0xff, 0x10, 0x71, 0x7f, 0xfe, 0x40, 0xf2, 0x18, 0x07, +0x4e, 0xf2, 0x00, 0x06, 0x40, 0xf4, 0x90, 0x07, 0x4e, 0xf3, 0x00, 0x04, 0x58, 0x43, 0x00, 0x00, +0x20, 0x51, 0x00, 0x00, 0x40, 0xf1, 0x94, 0x07, 0x4e, 0xf2, 0x00, 0x30, 0x40, 0xf2, 0xa4, 0x07, +0x4e, 0xf2, 0x00, 0x2c, 0x48, 0x00, 0x00, 0x2c, 0x20, 0x11, 0x7f, 0xfd, 0x4e, 0x17, 0x00, 0x08, +0x10, 0x71, 0x7f, 0xff, 0x10, 0x01, 0x7f, 0xfe, 0x48, 0x00, 0x00, 0x08, 0x4e, 0x12, 0x00, 0x06, +0x10, 0x01, 0x7f, 0xff, 0x10, 0x71, 0x7f, 0xfe, 0x00, 0x51, 0x7f, 0xff, 0x4e, 0x52, 0x00, 0x08, +0x20, 0x41, 0x00, 0x01, 0x42, 0x62, 0x18, 0x01, 0x40, 0x63, 0x00, 0x10, 0x00, 0x11, 0x7f, 0xfe, +0x4e, 0x12, 0x00, 0x08, 0x20, 0x51, 0x00, 0x00, 0x40, 0xf1, 0x94, 0x07, 0x4e, 0xf3, 0x00, 0x0a, +0x58, 0x51, 0x80, 0x00, 0x48, 0x00, 0x00, 0x06, 0x58, 0x51, 0x80, 0x00, 0x58, 0x62, 0x00, 0x00, +0x50, 0x84, 0x00, 0x01, 0x54, 0x84, 0x00, 0xff, 0x45, 0xe0, 0x00, 0x0f, 0x50, 0x21, 0x00, 0x0c, +0x4c, 0x8f, 0x00, 0x06, 0x58, 0x32, 0x80, 0x00, 0x48, 0xff, 0xff, 0xa6, 0x3e, 0x57, 0xf7, 0x69, +0x3e, 0x67, 0xf7, 0x6a, 0x54, 0x32, 0x80, 0xff, 0x40, 0x4f, 0x04, 0x08, 0x54, 0x23, 0x00, 0xff, +0x44, 0x10, 0x00, 0x7f, 0x44, 0x00, 0x00, 0x02, 0x49, 0xff, 0xcf, 0x08, 0x3e, 0x2f, 0xcd, 0x38, +0x44, 0x00, 0x00, 0x01, 0x3e, 0x1f, 0x2e, 0x44, 0x49, 0xf7, 0xb8, 0xf4, 0x44, 0x00, 0x00, 0x01, +0x44, 0x10, 0x00, 0x00, 0x49, 0xf7, 0xb9, 0x16, 0x46, 0x58, 0x00, 0x22, 0x04, 0x42, 0x80, 0x07, +0x46, 0x30, 0x11, 0x10, 0x40, 0x22, 0x0c, 0x04, 0x14, 0x22, 0x80, 0x07, 0x58, 0x02, 0x80, 0x00, +0x04, 0x10, 0x00, 0x06, 0x58, 0x50, 0x00, 0x00, 0x40, 0x40, 0x8c, 0x04, 0x14, 0x40, 0x00, 0x06, +0x04, 0x32, 0x80, 0x00, 0x44, 0x00, 0x00, 0x01, 0x42, 0x21, 0xcc, 0x08, 0x14, 0x22, 0x80, 0x00, +0x49, 0xf7, 0xb9, 0x74, 0x44, 0x00, 0x00, 0x01, 0x49, 0xf7, 0xb9, 0x48, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, -0x2e, 0x27, 0xfa, 0xbd, 0x4e, 0x22, 0x00, 0x0e, 0x2e, 0x17, 0xfa, 0xbc, 0x4e, 0x12, 0x00, 0x0a, -0x49, 0xff, 0xff, 0x34, 0x4e, 0x03, 0x00, 0x06, 0x44, 0x30, 0x00, 0x03, 0x3e, 0x37, 0xe4, 0x7c, -0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3e, 0x07, 0xe5, 0xa4, -0x4a, 0x00, 0x78, 0x20, 0x2e, 0x07, 0xe5, 0xa4, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, -0x04, 0x80, 0x00, 0x02, 0x58, 0x70, 0x00, 0x00, 0x50, 0x64, 0x00, 0x20, 0x04, 0x03, 0x00, 0x00, -0x5c, 0xf0, 0x00, 0x04, 0x4e, 0xf3, 0x00, 0x08, 0x46, 0x1c, 0x00, 0x00, 0x58, 0x10, 0x80, 0x01, -0x48, 0x00, 0x00, 0x50, 0x58, 0x13, 0x00, 0x00, 0x44, 0x20, 0x00, 0x10, 0x3e, 0x0f, 0xfa, 0xac, -0x49, 0xf7, 0xbf, 0x6e, 0x3c, 0x1d, 0xfe, 0xab, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x12, 0xc0, 0x06, -0x44, 0x30, 0x00, 0x00, 0x3e, 0x37, 0xfa, 0xbe, 0x3c, 0x0d, 0xfe, 0xab, 0x44, 0x40, 0x00, 0x02, -0x4c, 0x02, 0x40, 0x36, 0x04, 0x13, 0x00, 0x01, 0x44, 0x50, 0xff, 0xff, 0x4c, 0x12, 0xc0, 0x04, -0x14, 0x03, 0x00, 0x01, 0x3c, 0x0d, 0xfe, 0xae, 0x54, 0x20, 0x00, 0x01, 0x4e, 0x22, 0x00, 0x28, -0x54, 0x30, 0x00, 0x02, 0x4e, 0x32, 0x00, 0x08, 0x46, 0x18, 0x00, 0x23, 0x58, 0x10, 0x80, 0x24, -0x48, 0x00, 0x00, 0x06, 0x46, 0x18, 0x00, 0x23, 0x58, 0x10, 0x80, 0x28, 0x04, 0x00, 0x80, 0x00, -0x47, 0xe8, 0x00, 0x23, 0x58, 0x20, 0x00, 0x04, 0x14, 0x20, 0x80, 0x00, 0x04, 0x1f, 0x00, 0x0c, -0x58, 0x50, 0x80, 0x04, 0x14, 0x5f, 0x00, 0x0c, 0x44, 0x03, 0x0d, 0x40, 0x3c, 0x4d, 0xfe, 0xad, -0x40, 0xf0, 0x10, 0x06, 0x4e, 0xf2, 0x00, 0x04, 0x3c, 0x0f, 0xfe, 0xad, 0x44, 0x10, 0x00, 0x00, -0x00, 0x44, 0x00, 0x0b, 0x54, 0x32, 0x00, 0x01, 0x4e, 0x32, 0x00, 0x08, 0x58, 0x03, 0x80, 0x00, -0x49, 0xff, 0xe1, 0xb6, 0x58, 0x10, 0x00, 0x00, 0x58, 0x00, 0x80, 0x00, 0x3a, 0x6f, 0xa0, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xf4, 0x02, 0x20, 0x00, 0x09, -0x14, 0x1f, 0x80, 0x01, 0x04, 0x60, 0x00, 0x0c, 0x5c, 0xf1, 0x00, 0x66, 0x4e, 0xf3, 0x00, 0x34, -0x51, 0xc1, 0x7f, 0x9a, 0x44, 0x70, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, 0x3e, 0x1f, 0xe3, 0x9c, -0x44, 0x20, 0x00, 0x06, 0x49, 0xf7, 0xbf, 0x24, 0x4e, 0x03, 0x00, 0x1c, 0x58, 0x90, 0x00, 0x00, -0x50, 0x83, 0x00, 0x06, 0x04, 0x1f, 0x80, 0x01, 0x58, 0x04, 0x00, 0x00, 0x44, 0x20, 0x00, 0x06, -0x50, 0x94, 0x80, 0x01, 0x49, 0xf7, 0xbf, 0x14, 0x4e, 0x03, 0x00, 0x0c, 0x44, 0x50, 0x00, 0x10, -0x50, 0x84, 0x00, 0x06, 0x4c, 0x92, 0xff, 0xf0, 0x44, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x0e, -0x50, 0x73, 0x80, 0x01, 0x40, 0xfe, 0x1c, 0x06, 0x4e, 0xf3, 0x00, 0x06, 0x50, 0x63, 0x00, 0x01, -0x48, 0xff, 0xff, 0xd4, 0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x54, 0x00, 0x00, 0x0f, -0x49, 0xff, 0xc2, 0x80, 0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa8, 0xbc, 0x51, 0xff, 0xff, 0xf8, 0x58, 0x60, 0x80, 0x00, -0x44, 0x10, 0x00, 0x10, 0x4c, 0x00, 0x80, 0x06, 0x44, 0x01, 0x00, 0x03, 0x48, 0x00, 0x00, 0x60, -0x54, 0x73, 0x00, 0xff, 0x58, 0x03, 0x80, 0x00, 0x49, 0xff, 0xc2, 0x0c, 0x58, 0x03, 0x80, 0x00, -0x49, 0xff, 0xc2, 0x60, 0x3e, 0x1e, 0xbb, 0x2c, 0x4e, 0x62, 0x00, 0x38, 0x44, 0x00, 0x00, 0x01, -0x4b, 0xe0, 0x04, 0x01, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0xc2, 0x82, 0x44, 0x00, 0x00, 0x00, -0x49, 0xff, 0xc2, 0x12, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0xc2, 0x2c, 0x50, 0x0f, 0x80, 0x04, -0x49, 0xff, 0xb8, 0x16, 0x04, 0x5f, 0x80, 0x01, 0x46, 0x1f, 0x0f, 0xff, 0x58, 0x10, 0x8f, 0xc7, -0x46, 0x40, 0x57, 0xff, 0x40, 0x32, 0x84, 0x02, 0x58, 0x42, 0x0f, 0xc7, 0x40, 0x21, 0x90, 0x04, -0x58, 0x01, 0x00, 0x00, 0x14, 0x2f, 0x80, 0x01, 0x49, 0xff, 0xb7, 0xf2, 0x3e, 0x0f, 0xf9, 0xe0, -0x44, 0x10, 0x27, 0x10, 0x49, 0xff, 0xfc, 0xb6, 0x44, 0x00, 0x00, 0x01, 0x3e, 0x07, 0xfa, 0xbc, +0x44, 0x00, 0x00, 0x01, 0x49, 0xf7, 0xb9, 0x12, 0x44, 0x10, 0x00, 0x77, 0x44, 0x20, 0x00, 0x00, +0x44, 0x00, 0x00, 0x01, 0x49, 0xf7, 0xe7, 0x36, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3c, 0x0d, 0xf8, 0xf2, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, +0x51, 0xff, 0xff, 0xfc, 0x4e, 0x03, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xcd, 0x40, +0x44, 0x20, 0x00, 0xda, 0x49, 0xff, 0xb3, 0x62, 0x48, 0x00, 0x00, 0x00, 0x44, 0x30, 0x00, 0x00, +0x14, 0x20, 0x00, 0x04, 0x14, 0x30, 0x00, 0x01, 0x14, 0x10, 0x00, 0x05, 0x14, 0x30, 0x00, 0x00, +0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, +0x51, 0xff, 0xff, 0xfc, 0x4e, 0x03, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xcd, 0x40, +0x44, 0x20, 0x01, 0x0a, 0x49, 0xff, 0xb3, 0x42, 0x48, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, +0x4e, 0x12, 0x00, 0x1e, 0x04, 0x50, 0x00, 0x01, 0x44, 0x40, 0x00, 0x00, 0x14, 0x50, 0x80, 0x01, +0x14, 0x12, 0x80, 0x00, 0x14, 0x40, 0x00, 0x00, 0x14, 0x40, 0x00, 0x01, 0x3e, 0x0f, 0xf7, 0x6c, +0x04, 0x30, 0x00, 0x02, 0x04, 0x10, 0x00, 0x00, 0x50, 0x21, 0xff, 0xff, 0x14, 0x20, 0x00, 0x02, +0x4c, 0x10, 0x40, 0x06, 0x04, 0x00, 0x80, 0x03, 0x49, 0xf7, 0xbc, 0x00, 0x51, 0xff, 0x80, 0x04, +0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xfc, +0x3c, 0x1d, 0xfd, 0xde, 0x58, 0x70, 0x00, 0x00, 0x4e, 0x12, 0x00, 0x14, 0x58, 0x00, 0x80, 0x00, +0x49, 0xf7, 0xbb, 0xec, 0x44, 0x00, 0x03, 0xe8, 0x42, 0x33, 0x80, 0x24, 0x44, 0x20, 0x7f, 0xff, +0x40, 0x11, 0x88, 0x00, 0x3c, 0x0d, 0xfd, 0xde, 0x40, 0x10, 0xbc, 0x09, 0x49, 0xf7, 0xbc, 0xd0, +0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, +0x51, 0xff, 0xff, 0xfc, 0x49, 0xf7, 0xbc, 0x2a, 0x46, 0x17, 0xff, 0xff, 0x58, 0x10, 0x8f, 0xff, +0x58, 0x80, 0x00, 0x00, 0x40, 0xa0, 0x04, 0x00, 0x46, 0x00, 0x01, 0xe0, 0x3e, 0x2f, 0xf7, 0x6c, +0x14, 0xa1, 0x00, 0x04, 0x58, 0x71, 0x00, 0x00, 0x04, 0x61, 0x00, 0x00, 0x41, 0xc4, 0x00, 0x00, +0x48, 0x00, 0x00, 0x5c, 0x4e, 0x63, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xcd, 0x40, +0x44, 0x20, 0x01, 0x7d, 0x49, 0xff, 0xb2, 0xd2, 0x48, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x02, +0x40, 0x34, 0x00, 0x01, 0x4e, 0x35, 0x00, 0x3c, 0x04, 0x43, 0x00, 0x00, 0x4e, 0x43, 0x00, 0x0c, +0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xcd, 0x40, 0x44, 0x20, 0x01, 0x81, 0x49, 0xff, 0xb2, 0xbe, +0x48, 0x00, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xff, 0x6a, 0x02, 0x03, 0x00, 0x06, +0x4e, 0x02, 0x00, 0x1a, 0x50, 0x00, 0x7f, 0xff, 0x12, 0x03, 0x00, 0x06, 0x15, 0xc3, 0x00, 0x02, +0x05, 0xe3, 0x80, 0x01, 0x14, 0x63, 0x80, 0x01, 0x14, 0x73, 0x00, 0x00, 0x15, 0xe3, 0x00, 0x01, +0x14, 0x6f, 0x00, 0x00, 0x04, 0x63, 0x80, 0x02, 0x50, 0x53, 0x00, 0x01, 0x14, 0x53, 0x80, 0x02, +0x48, 0x00, 0x00, 0x0a, 0x04, 0x13, 0x00, 0x05, 0x4e, 0x12, 0x00, 0x06, 0x04, 0x03, 0x00, 0x04, +0x4b, 0xe0, 0x04, 0x01, 0x14, 0xa3, 0x80, 0x04, 0x48, 0x00, 0x00, 0x0e, 0x04, 0x23, 0x80, 0x04, +0x40, 0x90, 0x08, 0x01, 0x4e, 0x95, 0x00, 0x04, 0x48, 0x00, 0x00, 0x04, 0x14, 0x03, 0x80, 0x04, +0x58, 0x93, 0x00, 0x00, 0x04, 0x64, 0x80, 0x00, 0x3e, 0x9f, 0xf7, 0x6c, 0x4c, 0x64, 0xff, 0xa4, +0x04, 0x53, 0x00, 0x00, 0x4c, 0x53, 0x00, 0x16, 0x04, 0x03, 0x00, 0x04, 0x40, 0x34, 0x00, 0x01, +0x4e, 0x35, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xcd, 0x40, 0x44, 0x20, 0x01, 0xa0, +0x49, 0xff, 0xb2, 0x6c, 0x48, 0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x01, 0x49, 0xff, 0xff, 0x4e, +0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa4, 0xbc, +0x51, 0xff, 0xff, 0xfc, 0x58, 0x60, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, +0x3e, 0x1f, 0xcd, 0x40, 0x44, 0x20, 0x01, 0x2d, 0x49, 0xff, 0xb2, 0x50, 0x48, 0x00, 0x00, 0x00, +0x44, 0x00, 0xea, 0x60, 0x40, 0xf0, 0x04, 0x06, 0x4e, 0xf2, 0x00, 0x28, 0x46, 0x2e, 0xa5, 0xf1, +0x58, 0x21, 0x05, 0xa0, 0x40, 0xf1, 0x04, 0x06, 0x4e, 0xf2, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, +0x3e, 0x1f, 0xcd, 0x40, 0x44, 0x20, 0x01, 0x35, 0x49, 0xff, 0xb2, 0x38, 0x48, 0x00, 0x00, 0x00, +0x40, 0x40, 0x80, 0x77, 0x44, 0x3f, 0x15, 0xa0, 0x40, 0x22, 0x00, 0x13, 0x42, 0x11, 0x0c, 0x73, +0x12, 0x23, 0x00, 0x06, 0x4e, 0x13, 0x00, 0x10, 0x50, 0x11, 0x7f, 0xff, 0x12, 0x13, 0x00, 0x06, +0x58, 0x10, 0x00, 0x00, 0x48, 0x00, 0x00, 0x18, 0x44, 0x00, 0x00, 0x00, 0x12, 0x03, 0x00, 0x06, +0x48, 0x00, 0x00, 0x12, 0x44, 0x50, 0xff, 0xfe, 0x40, 0xf2, 0x84, 0x06, 0x4e, 0xf2, 0x00, 0x0c, +0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xcd, 0x40, 0x44, 0x20, 0x01, 0x48, 0x49, 0xff, 0xb2, 0x0e, +0x48, 0x00, 0x00, 0x00, 0x40, 0x30, 0xbc, 0x08, 0x50, 0x71, 0x83, 0xe7, 0x44, 0x90, 0x03, 0xe8, +0x40, 0x83, 0xa4, 0x57, 0x45, 0xe0, 0x00, 0x01, 0x3e, 0x7f, 0xf7, 0x6c, 0x40, 0x94, 0x20, 0x1b, +0x40, 0x9f, 0x20, 0x1a, 0x49, 0xf7, 0xbb, 0x32, 0x04, 0x23, 0x80, 0x00, 0x40, 0x80, 0x24, 0x00, +0x4c, 0x23, 0x80, 0x08, 0x04, 0x13, 0x80, 0x04, 0x40, 0x44, 0x04, 0x01, 0x4e, 0x44, 0x00, 0x08, +0x3c, 0x8f, 0xfd, 0xdf, 0x58, 0x04, 0x80, 0x00, 0x49, 0xff, 0xfe, 0xd0, 0x04, 0x03, 0x00, 0x00, +0x14, 0x83, 0x00, 0x02, 0x4e, 0x03, 0x00, 0x12, 0x3c, 0x3d, 0xfd, 0xdc, 0x14, 0x63, 0x80, 0x01, +0x14, 0x73, 0x00, 0x00, 0x14, 0x33, 0x00, 0x01, 0x14, 0x61, 0x80, 0x00, 0x05, 0xe3, 0x80, 0x02, +0x50, 0x2f, 0x00, 0x01, 0x14, 0x23, 0x80, 0x02, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xa4, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x46, 0x10, 0x01, 0x15, +0x2e, 0x07, 0xe3, 0x43, 0x4e, 0x02, 0x00, 0x26, 0x3e, 0x6f, 0xf7, 0x6c, 0x04, 0x03, 0x00, 0x03, +0x44, 0x70, 0x00, 0x00, 0x44, 0x20, 0x00, 0x00, 0x3e, 0x27, 0xe3, 0x43, 0x14, 0x63, 0x00, 0x00, +0x14, 0x63, 0x00, 0x01, 0x14, 0x73, 0x00, 0x02, 0x4e, 0x03, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, +0x3e, 0x1f, 0xcd, 0x40, 0x44, 0x20, 0x00, 0xc2, 0x49, 0xff, 0xb1, 0xa8, 0x48, 0x00, 0x00, 0x00, +0x49, 0xf7, 0xba, 0x84, 0x04, 0x03, 0x00, 0x03, 0x49, 0xf7, 0xb9, 0xf2, 0x14, 0x73, 0x00, 0x03, +0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, +0x46, 0x10, 0x01, 0x15, 0x3e, 0x6f, 0xf7, 0x6c, 0x44, 0x20, 0x00, 0x00, 0x2e, 0x07, 0xe3, 0x43, +0x14, 0x23, 0x00, 0x02, 0x44, 0x20, 0x00, 0x01, 0x14, 0x63, 0x00, 0x00, 0x14, 0x63, 0x00, 0x01, +0x4c, 0x01, 0x00, 0x1a, 0x04, 0x03, 0x00, 0x03, 0x3e, 0x27, 0xe3, 0x43, 0x4e, 0x03, 0x00, 0x12, +0x49, 0xf7, 0xba, 0x12, 0x14, 0x03, 0x00, 0x03, 0x4e, 0x03, 0x00, 0x0e, 0x3e, 0x0f, 0xc7, 0x40, +0x3e, 0x1f, 0xcd, 0x40, 0x44, 0x20, 0x00, 0xa2, 0x49, 0xff, 0xb1, 0x70, 0x48, 0x00, 0x00, 0x00, +0x49, 0xf7, 0xba, 0x4c, 0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, +0x51, 0xff, 0xff, 0xfc, 0x54, 0x00, 0x00, 0xff, 0x49, 0xff, 0xed, 0xf4, 0x51, 0xff, 0x80, 0x04, +0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, +0x58, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0d, 0x02, 0x11, 0x00, 0x1d, 0x00, 0x30, 0x00, 0x01, +0x42, 0x10, 0xb0, 0x0b, 0x00, 0x20, 0x00, 0x02, 0x4c, 0x30, 0x80, 0x14, 0x10, 0x10, 0x00, 0x01, +0x3e, 0x3f, 0xf4, 0x10, 0x38, 0x41, 0x88, 0x00, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x42, 0x80, 0x0a, +0x4c, 0x12, 0xc0, 0x04, 0x38, 0x11, 0x88, 0x08, 0x00, 0x10, 0x00, 0x01, 0x49, 0xff, 0xd7, 0xca, +0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, +0x51, 0xff, 0xff, 0xfc, 0x04, 0x50, 0x00, 0x06, 0x04, 0x30, 0x00, 0x0d, 0x00, 0x42, 0x80, 0x07, +0x40, 0x22, 0x08, 0x09, 0x10, 0x21, 0x80, 0x00, 0x05, 0xe0, 0x00, 0x06, 0x04, 0x40, 0x00, 0x0d, +0x00, 0x5f, 0x00, 0x08, 0x44, 0x20, 0x00, 0x01, 0x10, 0x52, 0x00, 0x02, 0x2e, 0x17, 0xdf, 0xac, +0x4c, 0x11, 0x40, 0x04, 0x49, 0xff, 0xff, 0xba, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x44, 0x00, 0x00, 0x30, +0x49, 0xf7, 0xc5, 0x64, 0x58, 0x90, 0x00, 0x00, 0x49, 0xf7, 0xc5, 0x32, 0x44, 0x10, 0x00, 0x00, +0x44, 0x20, 0x00, 0x30, 0x58, 0x60, 0x00, 0x00, 0x49, 0xf7, 0xbf, 0xa0, 0x44, 0x20, 0x00, 0x30, +0x12, 0x23, 0x00, 0x00, 0x2e, 0x17, 0xf7, 0xb2, 0x50, 0x83, 0x00, 0x20, 0x00, 0x03, 0x00, 0x03, +0x4e, 0x13, 0x00, 0x0a, 0x44, 0x4f, 0xff, 0x87, 0x40, 0x30, 0x10, 0x02, 0x58, 0x01, 0x80, 0x20, +0x48, 0x00, 0x00, 0x08, 0x44, 0x7f, 0xff, 0x87, 0x40, 0x50, 0x1c, 0x02, 0x58, 0x02, 0x80, 0x68, +0x10, 0x03, 0x00, 0x03, 0x00, 0x73, 0x00, 0x07, 0x00, 0x03, 0x00, 0x03, 0x44, 0x2f, 0xff, 0xc8, +0x54, 0xa0, 0x00, 0x7f, 0x10, 0xa3, 0x00, 0x03, 0x54, 0x03, 0x80, 0x03, 0x3e, 0x7f, 0xf7, 0xa8, +0x00, 0x53, 0x80, 0x01, 0x10, 0x03, 0x00, 0x07, 0x10, 0x53, 0x00, 0x04, 0x10, 0x23, 0x00, 0x05, +0x02, 0x43, 0x00, 0x06, 0x01, 0xc3, 0x80, 0x07, 0x00, 0x13, 0x00, 0x15, 0x02, 0x33, 0x00, 0x0d, +0x00, 0xa3, 0x00, 0x09, 0x00, 0x53, 0x00, 0x0b, 0x00, 0x23, 0x00, 0x19, 0x41, 0xce, 0x08, 0x08, +0x45, 0xef, 0xc0, 0x03, 0x40, 0x00, 0x70, 0x04, 0x40, 0x31, 0xf8, 0x02, 0x45, 0xef, 0xff, 0x80, +0x54, 0x42, 0x00, 0x3f, 0x54, 0x10, 0x80, 0xdd, 0x40, 0x52, 0xf8, 0x04, 0x58, 0x42, 0x78, 0x00, +0x58, 0x31, 0x80, 0x0c, 0x40, 0x21, 0x0c, 0x09, 0x40, 0x21, 0x0c, 0x08, 0x58, 0x10, 0x80, 0x22, +0x58, 0xa5, 0x00, 0x10, 0x45, 0xcf, 0xff, 0xff, 0x12, 0x43, 0x00, 0x06, 0x10, 0x53, 0x00, 0x0b, +0x12, 0x33, 0x00, 0x0d, 0x10, 0x23, 0x00, 0x19, 0x10, 0x13, 0x00, 0x15, 0x11, 0xc3, 0x00, 0x14, +0x10, 0x03, 0x00, 0x07, 0x10, 0xa3, 0x00, 0x09, 0x44, 0x60, 0x10, 0xa4, 0x12, 0x64, 0x00, 0x00, +0x44, 0x2f, 0xc0, 0x00, 0x02, 0x03, 0x80, 0x04, 0x41, 0xe0, 0x08, 0x04, 0x13, 0xe4, 0x00, 0x01, +0x3e, 0x1f, 0xf7, 0xa0, 0x44, 0x20, 0x00, 0x06, 0x50, 0x04, 0x00, 0x04, 0x49, 0xf7, 0xbf, 0x0a, +0x3e, 0x1f, 0xf7, 0x98, 0x50, 0x04, 0x00, 0x0a, 0x44, 0x20, 0x00, 0x06, 0x49, 0xf7, 0xbf, 0x02, +0x00, 0x13, 0x80, 0x0a, 0x4e, 0x13, 0x00, 0x0c, 0x58, 0x24, 0x80, 0x00, 0x44, 0x10, 0x00, 0x04, +0x44, 0x30, 0x00, 0x01, 0x44, 0x00, 0x00, 0x02, 0x48, 0x00, 0x00, 0x0a, 0x58, 0x24, 0x80, 0x00, +0x44, 0x00, 0x00, 0x02, 0x44, 0x10, 0x00, 0x0d, 0x44, 0x30, 0x00, 0x01, 0x49, 0xf7, 0xc8, 0xba, +0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x2e, 0x27, 0xf8, 0x5d, 0x4e, 0x22, 0x00, 0x0e, +0x2e, 0x17, 0xf8, 0x5c, 0x4e, 0x12, 0x00, 0x0a, 0x49, 0xff, 0xff, 0x36, 0x4e, 0x03, 0x00, 0x06, +0x44, 0x30, 0x00, 0x03, 0x3e, 0x37, 0xe2, 0x1c, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3e, 0x07, 0xe3, 0x44, 0x4a, 0x00, 0x78, 0x20, 0x2e, 0x07, 0xe3, 0x44, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, 0x04, 0x80, 0x00, 0x02, 0x58, 0x70, 0x00, 0x00, +0x50, 0x64, 0x00, 0x20, 0x04, 0x03, 0x00, 0x00, 0x5c, 0xf0, 0x00, 0x04, 0x4e, 0xf3, 0x00, 0x08, +0x46, 0x1c, 0x00, 0x00, 0x58, 0x10, 0x80, 0x01, 0x48, 0x00, 0x00, 0x50, 0x58, 0x13, 0x00, 0x00, +0x44, 0x20, 0x00, 0x10, 0x3e, 0x0f, 0xf8, 0x4c, 0x49, 0xf7, 0xbf, 0x2a, 0x3c, 0x1d, 0xfe, 0x13, +0x44, 0x50, 0x00, 0x01, 0x4c, 0x12, 0xc0, 0x06, 0x44, 0x30, 0x00, 0x00, 0x3e, 0x37, 0xf8, 0x5e, +0x3c, 0x0d, 0xfe, 0x13, 0x44, 0x40, 0x00, 0x02, 0x4c, 0x02, 0x40, 0x36, 0x04, 0x13, 0x00, 0x01, +0x44, 0x50, 0xff, 0xff, 0x4c, 0x12, 0xc0, 0x04, 0x14, 0x03, 0x00, 0x01, 0x3c, 0x0d, 0xfe, 0x16, +0x54, 0x20, 0x00, 0x01, 0x4e, 0x22, 0x00, 0x28, 0x54, 0x30, 0x00, 0x02, 0x4e, 0x32, 0x00, 0x08, +0x46, 0x18, 0x00, 0x23, 0x58, 0x10, 0x80, 0x24, 0x48, 0x00, 0x00, 0x06, 0x46, 0x18, 0x00, 0x23, +0x58, 0x10, 0x80, 0x28, 0x04, 0x00, 0x80, 0x00, 0x47, 0xe8, 0x00, 0x23, 0x58, 0x20, 0x00, 0x04, +0x14, 0x20, 0x80, 0x00, 0x04, 0x1f, 0x00, 0x0c, 0x58, 0x50, 0x80, 0x04, 0x14, 0x5f, 0x00, 0x0c, +0x44, 0x03, 0x0d, 0x40, 0x3c, 0x4d, 0xfe, 0x15, 0x40, 0xf0, 0x10, 0x06, 0x4e, 0xf2, 0x00, 0x04, +0x3c, 0x0f, 0xfe, 0x15, 0x44, 0x10, 0x00, 0x00, 0x00, 0x44, 0x00, 0x0b, 0x54, 0x32, 0x00, 0x01, +0x4e, 0x32, 0x00, 0x08, 0x58, 0x03, 0x80, 0x00, 0x49, 0xff, 0xe1, 0xb8, 0x58, 0x10, 0x00, 0x00, +0x58, 0x00, 0x80, 0x00, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, +0x51, 0xff, 0xff, 0xf4, 0x02, 0x20, 0x00, 0x09, 0x14, 0x1f, 0x80, 0x01, 0x04, 0x60, 0x00, 0x0c, +0x5c, 0xf1, 0x00, 0x66, 0x4e, 0xf3, 0x00, 0x34, 0x51, 0xc1, 0x7f, 0x9a, 0x44, 0x70, 0x00, 0x00, +0x58, 0x03, 0x00, 0x00, 0x3e, 0x1f, 0xe1, 0x40, 0x44, 0x20, 0x00, 0x06, 0x49, 0xf7, 0xbe, 0xe0, +0x4e, 0x03, 0x00, 0x1c, 0x58, 0x90, 0x00, 0x00, 0x50, 0x83, 0x00, 0x06, 0x04, 0x1f, 0x80, 0x01, +0x58, 0x04, 0x00, 0x00, 0x44, 0x20, 0x00, 0x06, 0x50, 0x94, 0x80, 0x01, 0x49, 0xf7, 0xbe, 0xd0, +0x4e, 0x03, 0x00, 0x0c, 0x44, 0x50, 0x00, 0x10, 0x50, 0x84, 0x00, 0x06, 0x4c, 0x92, 0xff, 0xf0, +0x44, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x0e, 0x50, 0x73, 0x80, 0x01, 0x40, 0xfe, 0x1c, 0x06, +0x4e, 0xf3, 0x00, 0x06, 0x50, 0x63, 0x00, 0x01, 0x48, 0xff, 0xff, 0xd4, 0x44, 0x00, 0x00, 0x00, +0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, +0x51, 0xff, 0xff, 0xfc, 0x54, 0x00, 0x00, 0x0f, 0x49, 0xff, 0xc2, 0x3c, 0x44, 0x00, 0x00, 0x00, +0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa8, 0xbc, +0x51, 0xff, 0xff, 0xf8, 0x58, 0x60, 0x80, 0x00, 0x44, 0x10, 0x00, 0x10, 0x54, 0x21, 0x00, 0xff, +0x4c, 0x00, 0x80, 0x06, 0x44, 0x01, 0x00, 0x03, 0x48, 0x00, 0x00, 0x6a, 0x40, 0x01, 0x00, 0x10, +0x4e, 0x04, 0x00, 0x08, 0x54, 0x21, 0x00, 0x0f, 0x4e, 0x22, 0x00, 0x04, 0x3e, 0x27, 0xe1, 0x24, +0x54, 0x73, 0x00, 0xff, 0x58, 0x03, 0x80, 0x00, 0x49, 0xff, 0xc1, 0xbc, 0x58, 0x03, 0x80, 0x00, +0x49, 0xff, 0xc2, 0x10, 0x3e, 0x1e, 0xbb, 0x2c, 0x4e, 0x62, 0x00, 0x38, 0x44, 0x00, 0x00, 0x01, +0x4b, 0xe0, 0x04, 0x01, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0xc2, 0x32, 0x44, 0x00, 0x00, 0x00, +0x49, 0xff, 0xc1, 0xc2, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0xc1, 0xdc, 0x50, 0x0f, 0x80, 0x04, +0x49, 0xff, 0xb7, 0xc6, 0x04, 0x1f, 0x80, 0x01, 0x46, 0x3f, 0x0f, 0xff, 0x58, 0x31, 0x8f, 0xc7, +0x46, 0x00, 0x57, 0xff, 0x40, 0x50, 0x8c, 0x02, 0x58, 0x00, 0x0f, 0xc7, 0x40, 0x42, 0x80, 0x04, +0x58, 0x02, 0x00, 0x00, 0x14, 0x4f, 0x80, 0x01, 0x49, 0xff, 0xb7, 0xa2, 0x3e, 0x0f, 0xf7, 0x80, +0x44, 0x10, 0x27, 0x10, 0x49, 0xff, 0xfc, 0xac, 0x44, 0x20, 0x00, 0x01, 0x3e, 0x27, 0xf8, 0x5c, 0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x1c, 0x58, 0x03, 0x00, 0x00, 0x4b, 0xe0, 0x04, 0x01, -0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xc2, 0x4c, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xc1, 0xfa, -0x46, 0x00, 0x02, 0x10, 0x58, 0x00, 0x00, 0x04, 0x49, 0xff, 0xb7, 0xd2, 0x3e, 0x0f, 0xf9, 0xe0, -0x49, 0xff, 0xfb, 0xa8, 0x3e, 0x67, 0xfa, 0xbc, 0x58, 0x03, 0x00, 0x00, 0x51, 0xff, 0x80, 0x08, +0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xc1, 0xfc, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xc1, 0xaa, +0x46, 0x00, 0x02, 0x10, 0x58, 0x00, 0x00, 0x04, 0x49, 0xff, 0xb7, 0x82, 0x3e, 0x0f, 0xf7, 0x80, +0x49, 0xff, 0xfb, 0x9e, 0x3e, 0x67, 0xf8, 0x5c, 0x58, 0x03, 0x00, 0x00, 0x51, 0xff, 0x80, 0x08, 0x3a, 0x6f, 0xa8, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, -0x04, 0x10, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x49, 0xff, 0xff, 0x86, 0x51, 0xff, 0x80, 0x04, -0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, -0x3e, 0x0f, 0xf9, 0xe0, 0x49, 0xff, 0xfb, 0x86, 0x2e, 0x07, 0xfa, 0xbd, 0x44, 0x10, 0x00, 0x00, -0x40, 0x00, 0x80, 0x06, 0x49, 0x00, 0x12, 0x16, 0x3e, 0x0f, 0xf9, 0xe0, 0x44, 0x10, 0x27, 0x10, -0x49, 0xff, 0xfc, 0x68, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x44, 0x00, 0x00, 0x0f, 0x49, 0xff, 0xc1, 0x7a, -0x44, 0x00, 0x00, 0x0f, 0x49, 0xff, 0xc1, 0xce, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0xc1, 0xe2, -0x3e, 0x0f, 0xf9, 0xe0, 0x3e, 0x1f, 0x37, 0x14, 0x44, 0x20, 0x00, 0x00, 0x49, 0xff, 0xfb, 0x3a, -0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0xb8, 0x3e, 0x0f, 0xfa, 0x08, 0x49, 0xf7, 0xbd, 0x8e, -0x44, 0x10, 0x00, 0x00, 0x3e, 0x17, 0xe4, 0x7c, 0x46, 0x08, 0x00, 0x23, 0x58, 0x00, 0x00, 0x80, -0x04, 0x40, 0x00, 0x00, 0x44, 0x5f, 0xf8, 0xff, 0x40, 0x32, 0x14, 0x02, 0x14, 0x30, 0x00, 0x00, -0x04, 0x20, 0x00, 0x00, 0x58, 0x11, 0x02, 0x00, 0x14, 0x10, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, -0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, 0x51, 0xff, 0xff, 0xf8, -0x01, 0xe0, 0x00, 0x00, 0x3e, 0x6f, 0xfa, 0x08, 0x11, 0xe3, 0x00, 0x00, 0x58, 0x70, 0x00, 0x00, -0x00, 0x80, 0x00, 0x4c, 0x50, 0x10, 0x00, 0x44, 0x10, 0x83, 0x00, 0x01, 0x00, 0x50, 0x00, 0x50, -0x10, 0x53, 0x00, 0x03, 0x00, 0x40, 0x00, 0x54, 0x10, 0x43, 0x00, 0x06, 0x00, 0x20, 0x00, 0x58, -0x50, 0x03, 0x00, 0x0c, 0x10, 0x23, 0x00, 0x07, 0x44, 0x20, 0x00, 0x08, 0x00, 0x33, 0x80, 0x5c, -0x10, 0x33, 0x00, 0x0a, 0x49, 0xf7, 0xbd, 0x36, 0x50, 0x13, 0x80, 0x04, 0x44, 0x20, 0x00, 0x40, -0x50, 0x03, 0x00, 0x14, 0x49, 0xf7, 0xbd, 0x2e, 0x49, 0xff, 0xc9, 0x62, 0x46, 0x06, 0x01, 0x60, -0x46, 0x10, 0x1f, 0xf8, 0x58, 0x10, 0x80, 0x7f, 0x14, 0x10, 0x00, 0x20, 0x50, 0x7f, 0x80, 0x07, -0x00, 0x03, 0x00, 0x06, 0x58, 0x13, 0x80, 0x00, 0x3e, 0x2f, 0xfa, 0x00, 0x49, 0xff, 0xbd, 0x0c, -0x00, 0x03, 0x00, 0x07, 0x58, 0x13, 0x80, 0x00, 0x3e, 0x2f, 0xf9, 0xf8, 0x49, 0xff, 0xb6, 0x6e, -0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x08, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xa0, 0xbc, 0x04, 0x60, 0x00, 0x02, 0x44, 0x10, 0x00, 0x03, 0x04, 0x83, 0x00, 0x08, -0x58, 0x70, 0x00, 0x00, 0x50, 0x03, 0x00, 0x24, 0x4c, 0x80, 0x80, 0x12, 0x44, 0x50, 0x00, 0x05, -0x4c, 0x82, 0x80, 0x12, 0x4e, 0x82, 0x00, 0x06, 0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0e, -0x04, 0x00, 0x00, 0x00, 0x49, 0xff, 0xfe, 0xa8, 0x48, 0x00, 0x00, 0x08, 0x49, 0xff, 0xff, 0x8e, -0x48, 0x00, 0x00, 0x04, 0x49, 0xff, 0xff, 0x22, 0x00, 0x33, 0x00, 0x0b, 0x54, 0x11, 0x80, 0x01, -0x4e, 0x13, 0x00, 0x06, 0x58, 0x00, 0x80, 0x00, 0x48, 0x00, 0x00, 0x2c, 0x01, 0xe3, 0x00, 0x07, -0x50, 0x43, 0x00, 0x0c, 0x44, 0x50, 0x00, 0x00, 0x44, 0x30, 0x00, 0x18, 0x44, 0x2f, 0xff, 0xed, -0x58, 0x11, 0x80, 0x00, 0x14, 0x52, 0x00, 0x02, 0x14, 0x82, 0x00, 0x00, 0x14, 0x02, 0x00, 0x01, -0x12, 0x33, 0x00, 0x00, 0x10, 0x23, 0x00, 0x04, 0x10, 0x13, 0x00, 0x08, 0x11, 0xe3, 0x00, 0x05, -0x44, 0x50, 0x00, 0x01, 0x04, 0x43, 0x80, 0x02, 0x44, 0x0f, 0xe0, 0x00, 0x10, 0x53, 0x80, 0x10, -0x12, 0x02, 0x00, 0x01, 0x58, 0x03, 0x80, 0x00, 0x49, 0xff, 0xd6, 0x6e, 0x44, 0x00, 0x00, 0x01, -0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, -0x00, 0x30, 0x80, 0x01, 0x44, 0x50, 0x00, 0x03, 0x4c, 0x32, 0xc0, 0x06, 0x02, 0x20, 0x00, 0x09, -0x49, 0x00, 0x16, 0xf0, 0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0x94, 0x54, 0x70, 0x80, 0xff, -0x40, 0x13, 0x80, 0x10, 0x58, 0x90, 0x00, 0x00, 0x55, 0xc1, 0x00, 0xff, 0x4e, 0x14, 0x00, 0x06, -0x44, 0x00, 0xff, 0xff, 0x48, 0x00, 0x00, 0x4c, 0x50, 0x6f, 0x80, 0x5c, 0x50, 0xaf, 0x80, 0x0c, -0x50, 0x8f, 0x80, 0x50, 0x58, 0x33, 0x00, 0x00, 0x58, 0x24, 0x00, 0x00, 0x58, 0x15, 0x00, 0x00, -0x58, 0x03, 0x80, 0x00, 0x14, 0x8f, 0x80, 0x01, 0x49, 0xff, 0xbe, 0x8e, 0x58, 0x14, 0x80, 0x00, -0x44, 0x20, 0x00, 0x10, 0x50, 0x0f, 0x80, 0x30, 0x49, 0xf7, 0xbc, 0x6c, 0x50, 0x14, 0x80, 0x10, -0x44, 0x20, 0x00, 0x08, 0x50, 0x0f, 0x80, 0x40, 0x49, 0xf7, 0xbc, 0x64, 0x50, 0x14, 0x80, 0x18, -0x44, 0x20, 0x00, 0x08, 0x50, 0x0f, 0x80, 0x48, 0x49, 0xf7, 0xbc, 0x5c, 0x04, 0x2f, 0x80, 0x01, -0x44, 0x50, 0x00, 0x01, 0x58, 0x15, 0x00, 0x00, 0x58, 0x33, 0x00, 0x00, 0x58, 0x03, 0x80, 0x00, -0x10, 0x55, 0x00, 0x18, 0x10, 0x53, 0x00, 0x01, 0x10, 0x53, 0x00, 0x03, 0x11, 0xc3, 0x00, 0x07, -0x49, 0xff, 0xb6, 0x64, 0x00, 0x13, 0x00, 0x09, 0x58, 0x03, 0x80, 0x00, 0x58, 0x2e, 0x00, 0x00, -0x50, 0x3f, 0x80, 0x30, 0x49, 0xff, 0xbd, 0xbc, 0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x6c, -0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xfc, -0x3e, 0x7f, 0xfa, 0x08, 0x04, 0x63, 0x80, 0x29, 0x4e, 0x62, 0x00, 0x44, 0x44, 0x00, 0x00, 0x01, -0x4c, 0x60, 0x40, 0x0a, 0x44, 0x00, 0x00, 0x03, 0x49, 0xf7, 0xdd, 0x6a, 0x10, 0x63, 0x80, 0xb6, -0x48, 0x00, 0x00, 0x38, 0x44, 0x10, 0x00, 0x02, 0x4c, 0x60, 0xc0, 0x34, 0x04, 0x33, 0x80, 0x2c, -0x54, 0x21, 0x80, 0x04, 0x4e, 0x22, 0x00, 0x08, 0x46, 0x08, 0x00, 0x23, 0x58, 0x00, 0x00, 0x24, -0x48, 0x00, 0x00, 0x06, 0x46, 0x08, 0x00, 0x23, 0x58, 0x00, 0x00, 0x28, 0x04, 0x50, 0x00, 0x00, -0x58, 0x42, 0x80, 0x04, 0x14, 0x40, 0x00, 0x00, 0x3c, 0x0d, 0xfe, 0xad, 0x4e, 0x02, 0x00, 0x1a, -0x49, 0xff, 0xc0, 0x8a, 0x3c, 0x1d, 0xfe, 0xae, 0x54, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x08, -0x46, 0x08, 0x00, 0x23, 0x58, 0x00, 0x00, 0x28, 0x48, 0x00, 0x00, 0x06, 0x46, 0x08, 0x00, 0x23, -0x58, 0x00, 0x00, 0x24, 0x04, 0x20, 0x00, 0x00, 0x59, 0xe1, 0x00, 0x04, 0x15, 0xe0, 0x00, 0x00, -0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa8, 0xbc, -0x51, 0xff, 0xff, 0xf8, 0x04, 0x10, 0x00, 0x0b, 0x04, 0x30, 0x00, 0x06, 0x0a, 0x80, 0x80, 0x05, -0x58, 0x60, 0x00, 0x00, 0x3e, 0x0f, 0xfa, 0x00, 0x44, 0x20, 0x00, 0x06, 0x00, 0xa1, 0x80, 0x04, -0x04, 0x91, 0x80, 0x03, 0x49, 0xf7, 0xbc, 0x7c, 0x4e, 0x03, 0x00, 0xa0, 0x04, 0x03, 0x00, 0x0c, -0x3e, 0x1f, 0xe3, 0x84, 0x44, 0x20, 0x00, 0x06, 0x49, 0xf7, 0xbc, 0x72, 0x4e, 0x02, 0x00, 0x0c, -0x04, 0x03, 0x00, 0x0c, 0x3e, 0x1f, 0xe3, 0x8c, 0x44, 0x20, 0x00, 0x06, 0x49, 0xf7, 0xbc, 0x68, -0x4e, 0x03, 0x00, 0x8c, 0x04, 0x53, 0x00, 0x0c, 0x02, 0x43, 0x00, 0x09, 0x50, 0x22, 0x80, 0x06, -0x50, 0x02, 0x7f, 0xfa, 0x12, 0x03, 0x00, 0x09, 0x14, 0x23, 0x00, 0x0c, 0x2e, 0x17, 0xfa, 0xbd, -0x4e, 0x12, 0x00, 0x1a, 0x2e, 0x77, 0xfa, 0xbc, 0x4e, 0x72, 0x00, 0x16, 0x55, 0xe5, 0x00, 0x02, -0x4f, 0xe2, 0x00, 0x12, 0x54, 0x34, 0x24, 0x00, 0x44, 0x80, 0x20, 0x00, 0x4c, 0x34, 0x40, 0x08, -0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xfb, 0xb2, 0x48, 0x00, 0x00, 0x06, 0x44, 0x10, 0x00, 0x02, -0x3e, 0x17, 0xe4, 0x7c, 0x04, 0x83, 0x00, 0x0c, 0x02, 0x53, 0x00, 0x09, 0x50, 0x74, 0x00, 0x02, -0x50, 0x42, 0xff, 0xfe, 0x54, 0x24, 0xa0, 0x00, 0x12, 0x43, 0x00, 0x09, 0x14, 0x73, 0x00, 0x0c, -0x4e, 0x22, 0x00, 0x08, 0x58, 0x13, 0x80, 0x00, 0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x20, -0x54, 0xa5, 0x00, 0x04, 0x4e, 0xa2, 0x00, 0x20, 0x00, 0x03, 0x00, 0x40, 0x50, 0x1f, 0x80, 0x07, -0x58, 0x2f, 0x80, 0x00, 0x49, 0xff, 0xb4, 0xca, 0x58, 0x9f, 0x80, 0x00, 0x58, 0x80, 0x00, 0x00, -0x4e, 0x03, 0x00, 0x3c, 0x58, 0x03, 0x00, 0x00, 0x58, 0x1f, 0x80, 0x00, 0x49, 0xff, 0xfc, 0xd4, -0x4e, 0x02, 0x00, 0x34, 0x58, 0x04, 0x00, 0x00, 0x58, 0x13, 0x80, 0x00, 0x49, 0xff, 0xff, 0x26, -0x48, 0x00, 0x00, 0x2c, 0x55, 0xe4, 0x98, 0x00, 0x40, 0x0f, 0x2c, 0x09, 0x4e, 0x02, 0x00, 0x0e, -0x44, 0x30, 0x00, 0x01, 0x4c, 0x01, 0xc0, 0x22, 0x58, 0x03, 0x00, 0x00, 0x58, 0x13, 0x80, 0x00, -0x49, 0xff, 0xfe, 0x9c, 0x48, 0x00, 0x00, 0x1a, 0x40, 0x94, 0x8c, 0x08, 0x40, 0x94, 0xd8, 0x09, -0x4e, 0x92, 0x00, 0x14, 0x58, 0x04, 0x00, 0x00, 0x3e, 0x1f, 0xe3, 0x94, 0x44, 0x20, 0x00, 0x02, -0x49, 0xf7, 0xbb, 0xe6, 0x4e, 0x02, 0x00, 0x0a, 0x58, 0x04, 0x00, 0x00, 0x3e, 0x1f, 0xe3, 0x98, -0x44, 0x20, 0x00, 0x02, 0x49, 0xf7, 0xbb, 0xdc, 0x51, 0xff, 0x80, 0x08, 0x3a, 0x6f, 0xa8, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xec, 0x50, 0x31, 0x00, 0x10, -0x40, 0x10, 0x88, 0x09, 0x58, 0x41, 0x80, 0x00, 0x44, 0x50, 0x00, 0x00, 0x48, 0x00, 0x00, 0x18, -0x00, 0x60, 0x00, 0x00, 0x50, 0x52, 0x80, 0x01, 0x10, 0x62, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x01, -0x10, 0xa2, 0x00, 0x3c, 0x01, 0xc0, 0x00, 0x02, 0x11, 0xc2, 0x00, 0x78, 0x00, 0x60, 0x00, 0x03, -0x50, 0x00, 0x00, 0x04, 0x10, 0x62, 0x00, 0xb4, 0x50, 0x42, 0x00, 0x01, 0x40, 0xf2, 0x84, 0x06, -0x4e, 0xf3, 0xff, 0xe8, 0x50, 0x50, 0x80, 0x07, 0x40, 0x02, 0x88, 0x08, 0x50, 0x40, 0x80, 0x10, -0x14, 0x0f, 0x80, 0x03, 0x40, 0x21, 0x10, 0x00, 0x58, 0x90, 0x80, 0x00, 0x3e, 0x0f, 0xcf, 0xe8, -0x3f, 0xef, 0xcf, 0xbc, 0x48, 0x00, 0x00, 0x60, 0x40, 0xa4, 0x85, 0x17, 0x00, 0x71, 0x7f, 0xff, -0x00, 0x61, 0x00, 0x3b, 0x00, 0x51, 0x00, 0x77, 0x00, 0x41, 0x00, 0xb3, 0x4e, 0x83, 0x00, 0x26, -0x38, 0x8f, 0x2a, 0x02, 0x38, 0xa0, 0x14, 0x00, 0x38, 0x50, 0x10, 0x00, 0x10, 0xaf, 0x80, 0x00, -0x38, 0x40, 0x1c, 0x00, 0x01, 0xcf, 0x80, 0x00, 0x38, 0x70, 0x18, 0x00, 0x40, 0xa4, 0x20, 0x09, -0x40, 0x64, 0x40, 0x09, 0x40, 0x63, 0x70, 0x03, 0x40, 0x55, 0x14, 0x03, 0x41, 0xc4, 0x10, 0x03, -0x40, 0x84, 0x60, 0x09, 0x40, 0x74, 0x1c, 0x03, 0x54, 0x63, 0x00, 0xff, 0x54, 0x52, 0x80, 0xff, -0x54, 0x4e, 0x00, 0xff, 0x48, 0x00, 0x00, 0x12, 0x5c, 0xf0, 0x80, 0x07, 0x4e, 0xf3, 0x00, 0x0e, -0x44, 0xa0, 0x00, 0x04, 0x4c, 0x85, 0x40, 0x0a, 0x38, 0x60, 0x18, 0x00, 0x38, 0x50, 0x14, 0x00, -0x38, 0x40, 0x10, 0x00, 0x38, 0x70, 0x1c, 0x00, 0x00, 0x81, 0x80, 0x00, 0x50, 0x94, 0x80, 0x01, -0x40, 0x73, 0xa0, 0x03, 0x10, 0x71, 0x00, 0x00, 0x00, 0x71, 0x80, 0x3c, 0x40, 0x63, 0x1c, 0x03, -0x10, 0x61, 0x00, 0x3c, 0x00, 0x61, 0x80, 0x78, 0x41, 0xc2, 0x98, 0x03, 0x11, 0xc1, 0x00, 0x78, -0x00, 0x51, 0x80, 0xb4, 0x50, 0x31, 0x80, 0x01, 0x40, 0x42, 0x14, 0x03, 0x10, 0x41, 0x00, 0xb4, -0x50, 0x21, 0x00, 0x01, 0x05, 0xcf, 0x80, 0x03, 0x40, 0xf4, 0xf0, 0x06, 0x4e, 0xf3, 0xff, 0x9e, -0x51, 0xff, 0x80, 0x14, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, -0x51, 0xff, 0xfe, 0xbc, 0x14, 0x5f, 0x80, 0x0c, 0x58, 0x61, 0x80, 0x00, 0x04, 0x72, 0x80, 0x00, -0x14, 0x4f, 0x80, 0x0e, 0x5c, 0xf3, 0x80, 0x10, 0x4e, 0xf3, 0x02, 0x58, 0x44, 0x30, 0x00, 0x10, -0x4c, 0x61, 0x80, 0x0a, 0x44, 0x40, 0x00, 0x18, 0x4c, 0x62, 0x00, 0x06, 0x40, 0x51, 0x84, 0x08, -0x4c, 0x62, 0xc2, 0x4c, 0x58, 0x71, 0x80, 0x00, 0x4c, 0x13, 0xc2, 0x48, 0x44, 0x10, 0x00, 0x00, -0x50, 0x9f, 0x80, 0x40, 0x48, 0x00, 0x00, 0x10, 0x08, 0x82, 0x00, 0x04, 0x50, 0x31, 0x80, 0x01, -0x44, 0x70, 0x00, 0x04, 0x18, 0x82, 0x80, 0x01, 0x4c, 0x33, 0xff, 0xf8, 0x50, 0x10, 0x80, 0x01, -0x4c, 0x11, 0x80, 0x0c, 0x40, 0xa0, 0x88, 0x08, 0x40, 0x54, 0xa8, 0x00, 0x40, 0x40, 0x04, 0x00, -0x44, 0x30, 0x00, 0x00, 0x48, 0xff, 0xff, 0xea, 0x58, 0x01, 0x00, 0x00, 0x58, 0x13, 0x00, 0x00, -0x50, 0x2f, 0x80, 0x40, 0x49, 0xff, 0xff, 0x18, 0x50, 0x4f, 0x80, 0x41, 0x40, 0x63, 0x08, 0x09, -0x14, 0x4f, 0x80, 0x04, 0x50, 0x7f, 0x80, 0x40, 0x50, 0x1f, 0x80, 0x42, 0x50, 0xaf, 0x80, 0x43, -0x50, 0x53, 0x00, 0x0a, 0x50, 0x9f, 0x80, 0x50, 0x40, 0x02, 0x88, 0x08, 0x14, 0x1f, 0x80, 0x06, -0x14, 0xaf, 0x80, 0x05, 0x14, 0x7f, 0x80, 0x0d, 0x04, 0x8f, 0x80, 0x04, 0x14, 0x9f, 0x80, 0x01, -0x40, 0x03, 0x80, 0x00, 0x58, 0x90, 0x80, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x43, 0x80, 0x00, -0x40, 0x31, 0x10, 0x03, 0x18, 0x33, 0x80, 0x04, 0x00, 0x10, 0x00, 0x01, 0x01, 0xc4, 0x00, 0x00, -0x41, 0xe0, 0xf0, 0x03, 0x19, 0xe4, 0x00, 0x04, 0x05, 0xef, 0x80, 0x01, 0x00, 0x50, 0x00, 0x02, -0x00, 0x44, 0x80, 0x00, 0x40, 0x32, 0x14, 0x03, 0x18, 0x34, 0x80, 0x04, 0x00, 0x10, 0x00, 0x03, -0x00, 0x25, 0x00, 0x00, 0x50, 0x00, 0x00, 0x3c, 0x41, 0xc0, 0x88, 0x03, 0x19, 0xc5, 0x00, 0x04, -0x4c, 0x7f, 0x7f, 0xdc, 0x50, 0x03, 0x00, 0x05, 0x50, 0x7f, 0x80, 0x40, 0x40, 0x90, 0x08, 0x08, -0x50, 0x63, 0x80, 0x04, 0x14, 0x9f, 0x80, 0x08, 0x14, 0x6f, 0x80, 0x0f, 0x48, 0x00, 0x01, 0x26, -0x00, 0x3f, 0x80, 0x49, 0x00, 0x2f, 0x80, 0x45, 0x00, 0x4f, 0x80, 0x4b, 0x01, 0xcf, 0x80, 0x47, -0x00, 0x6f, 0x80, 0x48, 0x00, 0x8f, 0x80, 0x4c, 0x00, 0x9f, 0x80, 0x46, 0x00, 0x7f, 0x80, 0x4a, -0x01, 0xef, 0x80, 0x4d, 0x00, 0x5f, 0x80, 0x4e, 0x00, 0xaf, 0x80, 0x4f, 0x00, 0x1f, 0x80, 0x44, -0x10, 0x2f, 0x80, 0x46, 0x10, 0x4f, 0x80, 0x49, 0x10, 0x3f, 0x80, 0x4b, 0x10, 0x9f, 0x80, 0x47, -0x10, 0x7f, 0x80, 0x48, 0x10, 0x6f, 0x80, 0x4a, 0x11, 0xcf, 0x80, 0x44, 0x11, 0xef, 0x80, 0x4c, -0x10, 0x5f, 0x80, 0x4d, 0x10, 0xaf, 0x80, 0x4e, 0x10, 0x8f, 0x80, 0x4f, 0x04, 0x2f, 0x80, 0x05, -0x04, 0x3f, 0x80, 0x06, 0x04, 0x4f, 0x80, 0x04, 0x10, 0x1f, 0x80, 0x45, 0x50, 0x1f, 0x80, 0x40, -0x00, 0x00, 0x80, 0x00, 0x3e, 0x5f, 0xd0, 0xe8, 0x38, 0x92, 0x80, 0x00, 0x04, 0x0f, 0x80, 0x01, -0x18, 0x90, 0x80, 0x04, 0x00, 0x72, 0x00, 0x00, 0x38, 0x62, 0x9c, 0x00, 0x18, 0x62, 0x00, 0x04, -0x01, 0xc1, 0x80, 0x00, 0x39, 0xe2, 0xf0, 0x00, 0x19, 0xe1, 0x80, 0x04, 0x00, 0xa1, 0x00, 0x00, -0x38, 0x82, 0xa8, 0x00, 0x18, 0x81, 0x00, 0x04, 0x4c, 0x10, 0x7f, 0xe4, 0x04, 0x4f, 0x80, 0x08, -0x50, 0x5f, 0x80, 0x40, 0x50, 0x32, 0x00, 0x10, 0x40, 0x22, 0x8c, 0x00, 0x04, 0x4f, 0x80, 0x06, -0x04, 0x3f, 0x80, 0x05, 0x04, 0x6f, 0x80, 0x04, 0x00, 0x71, 0x00, 0x00, 0x01, 0xc2, 0x80, 0x00, -0x41, 0xe3, 0xf0, 0x03, 0x19, 0xe2, 0x80, 0x04, 0x00, 0x11, 0x00, 0x01, 0x00, 0xa3, 0x00, 0x00, -0x40, 0x80, 0xa8, 0x03, 0x18, 0x83, 0x00, 0x04, 0x04, 0x8f, 0x80, 0x01, 0x00, 0x01, 0x00, 0x02, -0x00, 0x92, 0x00, 0x00, 0x40, 0x70, 0x24, 0x03, 0x18, 0x72, 0x00, 0x04, 0x01, 0xe1, 0x00, 0x03, -0x01, 0xc1, 0x80, 0x00, 0x50, 0x21, 0x00, 0x3c, 0x40, 0xaf, 0x70, 0x03, 0x18, 0xa1, 0x80, 0x04, -0x4c, 0x54, 0x7f, 0xdc, 0x50, 0x3f, 0x80, 0x44, 0x50, 0x6f, 0x80, 0x48, 0x50, 0x5f, 0x80, 0x4c, -0x50, 0x2f, 0x80, 0x40, 0x14, 0x3f, 0x80, 0x0b, 0x14, 0x6f, 0x80, 0x0a, 0x14, 0x5f, 0x80, 0x09, -0x14, 0x2f, 0x80, 0x07, 0x05, 0xcf, 0x80, 0x07, 0x04, 0x4f, 0x80, 0x0b, 0x04, 0x5f, 0x80, 0x0a, -0x04, 0xaf, 0x80, 0x09, 0x00, 0x3e, 0x00, 0x00, 0x01, 0xc2, 0x00, 0x00, 0x00, 0x42, 0x80, 0x00, -0x00, 0x55, 0x00, 0x00, 0x3e, 0x8f, 0xd4, 0xe8, 0x3e, 0x1f, 0xd2, 0xe8, 0x3e, 0x9f, 0xd1, 0xe8, -0x39, 0xe4, 0x0c, 0x00, 0x38, 0x24, 0x94, 0x00, 0x38, 0x60, 0xf0, 0x00, 0x3e, 0x7f, 0xd3, 0xe8, -0x38, 0xa3, 0x90, 0x00, 0x58, 0x00, 0x80, 0x00, 0x40, 0x13, 0x78, 0x03, 0x10, 0x2f, 0x80, 0x08, -0x39, 0xe3, 0xf0, 0x00, 0x58, 0x64, 0x80, 0x00, 0x38, 0x70, 0x0c, 0x00, 0x3e, 0x0f, 0xd3, 0xe8, -0x38, 0x93, 0x0c, 0x00, 0x38, 0x24, 0x70, 0x00, 0x38, 0x83, 0x70, 0x00, 0x38, 0x60, 0x0c, 0x00, -0x3f, 0xcf, 0xd1, 0xe8, 0x40, 0x30, 0xa8, 0x03, 0x3e, 0xaf, 0xd2, 0xe8, 0x3e, 0x1f, 0xd4, 0xe8, -0x38, 0x0e, 0x10, 0x00, 0x39, 0xc5, 0x10, 0x00, 0x38, 0xa0, 0x90, 0x00, 0x00, 0x1f, 0x80, 0x08, -0x40, 0x21, 0x24, 0x03, 0x40, 0x31, 0x84, 0x03, 0x3e, 0x4f, 0xd3, 0xe8, 0x40, 0x14, 0x18, 0x03, -0x3e, 0x9f, 0xd2, 0xe8, 0x3e, 0x6f, 0xd4, 0xe8, 0x38, 0x83, 0x14, 0x00, 0x38, 0x62, 0x14, 0x00, -0x38, 0x44, 0x94, 0x00, 0x04, 0x9f, 0x80, 0x07, 0x40, 0x51, 0x70, 0x03, 0x18, 0x34, 0x80, 0x01, -0x40, 0x22, 0x98, 0x03, 0x04, 0x6f, 0x80, 0x0b, 0x40, 0x7f, 0x1c, 0x03, 0x14, 0x9f, 0x80, 0x07, -0x40, 0x33, 0x80, 0x03, 0x40, 0x90, 0xa8, 0x03, 0x18, 0x23, 0x00, 0x01, 0x04, 0x7f, 0x80, 0x0a, -0x40, 0x54, 0x90, 0x03, 0x14, 0x6f, 0x80, 0x0b, 0x18, 0x53, 0x80, 0x01, 0x04, 0x1f, 0x80, 0x09, -0x40, 0x01, 0xa0, 0x03, 0x18, 0x00, 0x80, 0x01, 0x04, 0x4f, 0x80, 0x07, 0x04, 0x9f, 0x80, 0x0f, -0x14, 0x7f, 0x80, 0x0a, 0x14, 0x1f, 0x80, 0x09, 0x4c, 0x44, 0xff, 0x7e, 0x04, 0x2f, 0x80, 0x08, -0x50, 0x31, 0x7f, 0xfc, 0x14, 0x3f, 0x80, 0x08, 0x04, 0x9f, 0x80, 0x08, 0x4e, 0x93, 0xfe, 0xda, -0x00, 0x1f, 0x80, 0x47, 0x00, 0x6f, 0x80, 0x46, 0x00, 0x7f, 0x80, 0x4a, 0x00, 0x2f, 0x80, 0x49, -0x00, 0x3f, 0x80, 0x45, 0x00, 0x4f, 0x80, 0x4b, 0x00, 0x9f, 0x80, 0x48, 0x00, 0x5f, 0x80, 0x44, -0x10, 0x6f, 0x80, 0x47, 0x10, 0x7f, 0x80, 0x48, 0x00, 0x6f, 0x80, 0x4e, 0x00, 0x7f, 0x80, 0x4f, -0x10, 0x1f, 0x80, 0x44, 0x00, 0x1f, 0x80, 0x4d, 0x00, 0x0f, 0x80, 0x4c, 0x10, 0x3f, 0x80, 0x46, -0x10, 0x4f, 0x80, 0x49, 0x10, 0x2f, 0x80, 0x4b, 0x10, 0x1f, 0x80, 0x4c, 0x10, 0x9f, 0x80, 0x4a, -0x10, 0x5f, 0x80, 0x45, 0x10, 0x6f, 0x80, 0x4d, 0x10, 0x7f, 0x80, 0x4e, 0x04, 0x1f, 0x80, 0x0d, -0x04, 0x2f, 0x80, 0x04, 0x04, 0x3f, 0x80, 0x05, 0x04, 0x4f, 0x80, 0x06, 0x10, 0x0f, 0x80, 0x4f, -0x3e, 0x0f, 0xd0, 0xe8, 0x00, 0x50, 0x80, 0x00, 0x38, 0x60, 0x14, 0x00, 0x18, 0x60, 0x80, 0x04, -0x00, 0x71, 0x00, 0x00, 0x38, 0x90, 0x1c, 0x00, 0x18, 0x91, 0x00, 0x04, 0x00, 0x52, 0x00, 0x00, -0x38, 0x60, 0x14, 0x00, 0x04, 0x5f, 0x80, 0x01, 0x18, 0x62, 0x00, 0x04, 0x00, 0x71, 0x80, 0x00, -0x38, 0x90, 0x1c, 0x00, 0x18, 0x91, 0x80, 0x04, 0x4c, 0x12, 0xff, 0xe6, 0x44, 0x00, 0x00, 0x00, -0x50, 0x7f, 0x80, 0x40, 0x44, 0x60, 0x00, 0x3c, 0x48, 0x00, 0x00, 0x1a, 0x08, 0x41, 0x80, 0x01, -0x00, 0x51, 0x00, 0x00, 0x50, 0x10, 0x80, 0x01, 0x40, 0x92, 0x14, 0x03, 0x44, 0x40, 0x00, 0x04, -0x18, 0x91, 0x00, 0x01, 0x4c, 0x12, 0x7f, 0xf4, 0x50, 0x00, 0x00, 0x01, 0x4c, 0x00, 0xc0, 0x08, -0x44, 0x00, 0x00, 0x00, 0x50, 0x6f, 0x80, 0x40, 0x48, 0x00, 0x00, 0x1e, 0x42, 0x30, 0x18, 0x24, -0x40, 0x20, 0x08, 0x08, 0x50, 0x11, 0x80, 0x10, 0x40, 0x33, 0x84, 0x00, 0x40, 0x23, 0x88, 0x00, -0x44, 0x10, 0x00, 0x00, 0x48, 0xff, 0xff, 0xdc, 0x08, 0x41, 0x80, 0x01, 0x50, 0x10, 0x80, 0x01, -0x44, 0x90, 0x00, 0x04, 0x18, 0x41, 0x00, 0x04, 0x4c, 0x14, 0xff, 0xf8, 0x50, 0x00, 0x00, 0x01, -0x4c, 0x00, 0x80, 0x0e, 0x40, 0x70, 0x08, 0x08, 0x40, 0x33, 0x1c, 0x00, 0x04, 0x7f, 0x80, 0x0e, -0x44, 0x10, 0x00, 0x00, 0x40, 0x23, 0x80, 0x00, 0x48, 0xff, 0xff, 0xe8, 0x04, 0x9f, 0x80, 0x0c, -0x44, 0x00, 0x00, 0x10, 0x14, 0x04, 0x80, 0x00, 0x51, 0xff, 0x81, 0x44, 0x3a, 0x6f, 0xaa, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0x9c, 0x58, 0x80, 0x00, 0x00, -0x44, 0x00, 0x00, 0x10, 0x14, 0x3f, 0x80, 0x03, 0x14, 0x2f, 0x80, 0x08, 0x14, 0x4f, 0x80, 0x09, -0x14, 0x5f, 0x80, 0x0a, 0x4c, 0x30, 0x00, 0x0e, 0x44, 0x20, 0x00, 0x18, 0x4c, 0x31, 0x00, 0x0a, -0x41, 0xe0, 0x04, 0x08, 0x4c, 0x3f, 0x00, 0x06, 0x44, 0x0f, 0xff, 0xff, 0x48, 0x00, 0x00, 0xc2, -0x44, 0x60, 0x00, 0x00, 0x50, 0x10, 0xff, 0xf8, 0x58, 0x03, 0x00, 0x00, 0x14, 0x1f, 0x80, 0x01, -0x14, 0x6f, 0x80, 0x17, 0x49, 0xff, 0xcc, 0x34, 0x14, 0x0f, 0x80, 0x02, 0x4e, 0x03, 0x00, 0x06, -0x44, 0x0f, 0xff, 0xfe, 0x48, 0x00, 0x00, 0xae, 0x50, 0x0f, 0x80, 0x54, 0x58, 0x14, 0x00, 0x00, -0x44, 0x20, 0x00, 0x08, 0x49, 0xf7, 0xb8, 0x64, 0x04, 0x2f, 0x80, 0x01, 0x04, 0x0f, 0x80, 0x02, -0x40, 0x91, 0x0c, 0x09, 0x50, 0x14, 0x00, 0x08, 0x49, 0xf7, 0xb8, 0x5a, 0x44, 0x70, 0x00, 0x05, -0x54, 0x54, 0x80, 0xff, 0x58, 0x34, 0x80, 0x00, 0x42, 0x32, 0x9c, 0x73, 0x40, 0x04, 0x8c, 0x08, -0x05, 0xef, 0x80, 0x02, 0x50, 0x10, 0x7f, 0xf8, 0x52, 0x42, 0x80, 0x00, 0x54, 0x82, 0x00, 0xff, -0x55, 0xc1, 0x80, 0xff, 0x40, 0xaf, 0x04, 0x00, 0x50, 0x64, 0xff, 0xff, 0x14, 0x8f, 0x80, 0x07, -0x15, 0xcf, 0x80, 0x04, 0x14, 0x7f, 0x80, 0x05, 0x14, 0xaf, 0x80, 0x0b, 0x14, 0x6f, 0x80, 0x06, -0x04, 0x6f, 0x80, 0x06, 0x04, 0xaf, 0x80, 0x0b, 0x05, 0xcf, 0x80, 0x04, 0x44, 0x90, 0x22, 0xac, -0x50, 0x8f, 0x80, 0x5c, 0x50, 0x7f, 0x80, 0x4c, 0x48, 0x00, 0x00, 0x3c, 0x00, 0x40, 0x80, 0x07, -0x50, 0x63, 0x7f, 0xff, 0x40, 0x3e, 0x10, 0x03, 0x10, 0x30, 0x80, 0x07, 0x4b, 0xe0, 0x24, 0x01, -0x58, 0x15, 0x00, 0x00, 0x44, 0x20, 0x00, 0x08, 0x50, 0x0f, 0x80, 0x3c, 0x4b, 0xe0, 0x24, 0x01, -0x04, 0x3f, 0x80, 0x03, 0x3c, 0x1d, 0xf3, 0xee, 0x04, 0x2f, 0x80, 0x08, 0x45, 0xe0, 0x00, 0x10, -0x50, 0x4f, 0x80, 0x44, 0x58, 0x54, 0x00, 0x00, 0x50, 0x0f, 0x80, 0x34, 0x15, 0xef, 0x80, 0x17, -0x49, 0xff, 0xfc, 0xfe, 0x50, 0x1f, 0x80, 0x44, 0x44, 0x20, 0x00, 0x08, 0x50, 0x0f, 0x80, 0x54, -0x4b, 0xe0, 0x24, 0x01, 0x58, 0x05, 0x00, 0x00, 0x44, 0x20, 0x00, 0x08, 0x58, 0x13, 0x80, 0x00, -0x4b, 0xe0, 0x24, 0x01, 0x50, 0x2e, 0x7f, 0xff, 0x55, 0xc1, 0x00, 0xff, 0x50, 0xa5, 0x7f, 0xf8, -0x44, 0x20, 0x00, 0x08, 0x50, 0x0f, 0x80, 0x34, 0x50, 0x1f, 0x80, 0x54, 0x4e, 0x64, 0xff, 0xc0, -0x05, 0xef, 0x80, 0x04, 0x04, 0x4f, 0x80, 0x07, 0x04, 0x2f, 0x80, 0x05, 0x40, 0x3f, 0x10, 0x00, -0x50, 0x51, 0x7f, 0xff, 0x54, 0x01, 0x80, 0xff, 0x44, 0x1f, 0xff, 0xff, 0x14, 0x5f, 0x80, 0x05, -0x14, 0x0f, 0x80, 0x04, 0x4c, 0x50, 0xff, 0x9e, 0x04, 0x5f, 0x80, 0x01, 0x04, 0x1f, 0x80, 0x0a, -0x14, 0x50, 0x80, 0x00, 0x04, 0x2f, 0x80, 0x01, 0x04, 0x1f, 0x80, 0x02, 0x04, 0x0f, 0x80, 0x09, -0x49, 0xf7, 0xb7, 0xc6, 0x04, 0x0f, 0x80, 0x02, 0x49, 0xff, 0xca, 0xb2, 0x44, 0x00, 0x00, 0x00, -0x51, 0xff, 0x80, 0x64, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0x3c, -0x44, 0x30, 0x00, 0x00, 0x50, 0x50, 0x00, 0x08, 0x14, 0x30, 0x00, 0x00, 0x14, 0x30, 0x00, 0x01, -0x58, 0x42, 0x80, 0x00, 0x18, 0x32, 0x00, 0x01, 0x44, 0x60, 0x01, 0x00, 0x50, 0x31, 0x80, 0x01, -0x4c, 0x33, 0x7f, 0xfa, 0x44, 0x40, 0x00, 0x00, 0x58, 0x32, 0x00, 0x00, 0x40, 0x71, 0x88, 0xd7, -0x00, 0x72, 0x80, 0x00, 0x50, 0x31, 0x80, 0x01, 0x40, 0x82, 0x1c, 0x00, 0x38, 0x60, 0x98, 0x00, -0x40, 0x44, 0x18, 0x00, 0x54, 0x42, 0x00, 0xff, 0x40, 0x80, 0x10, 0x00, 0x50, 0x64, 0x00, 0x08, -0x00, 0x83, 0x00, 0x00, 0x18, 0x82, 0x80, 0x01, 0x10, 0x73, 0x00, 0x00, 0x44, 0x60, 0x01, 0x00, -0x4c, 0x33, 0x7f, 0xe6, 0x3a, 0x6f, 0xa0, 0x04, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0x3c, -0x44, 0x40, 0x00, 0x00, 0x48, 0x00, 0x00, 0x32, 0x04, 0x80, 0x00, 0x00, 0x50, 0x74, 0x00, 0x01, -0x54, 0x63, 0x80, 0xff, 0x38, 0x62, 0x98, 0x0e, 0x50, 0x52, 0x80, 0x08, 0x00, 0x62, 0x80, 0x00, -0x04, 0x80, 0x00, 0x01, 0x40, 0x73, 0x20, 0x00, 0x54, 0x83, 0x80, 0xff, 0x14, 0x80, 0x00, 0x01, -0x40, 0x70, 0x20, 0x00, 0x50, 0x73, 0x80, 0x08, 0x00, 0x83, 0x80, 0x00, 0x10, 0x82, 0x80, 0x00, -0x10, 0x63, 0x80, 0x00, 0x00, 0x72, 0x80, 0x00, 0x38, 0x80, 0x90, 0x00, 0x40, 0x53, 0x1c, 0x00, -0x54, 0x62, 0x80, 0xff, 0x40, 0x60, 0x18, 0x00, 0x00, 0x53, 0x00, 0x08, 0x40, 0x52, 0xa0, 0x03, -0x38, 0x51, 0x90, 0x08, 0x50, 0x42, 0x00, 0x01, 0x58, 0x50, 0x00, 0x00, 0x40, 0xf2, 0x08, 0x06, -0x4e, 0xf3, 0xff, 0xcc, 0x3a, 0x6f, 0xa0, 0x04, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0x3c, -0x44, 0x20, 0x00, 0x00, 0x48, 0x00, 0x00, 0x22, 0x04, 0x40, 0x00, 0x00, 0x50, 0x21, 0x00, 0x01, -0x50, 0x62, 0x00, 0x01, 0x54, 0x53, 0x00, 0xff, 0x38, 0x51, 0x94, 0x0e, 0x50, 0x31, 0x80, 0x08, -0x04, 0x40, 0x00, 0x01, 0x00, 0x51, 0x80, 0x00, 0x40, 0x62, 0x90, 0x00, 0x54, 0x43, 0x00, 0xff, -0x14, 0x40, 0x00, 0x01, 0x40, 0x60, 0x10, 0x00, 0x50, 0x43, 0x00, 0x08, 0x00, 0x62, 0x00, 0x00, -0x10, 0x61, 0x80, 0x00, 0x10, 0x52, 0x00, 0x00, 0x58, 0x30, 0x00, 0x00, 0x40, 0xf1, 0x04, 0x06, -0x4e, 0xf3, 0xff, 0xdc, 0x3a, 0x6f, 0x98, 0x04, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, -0x51, 0xff, 0xfe, 0xe4, 0x14, 0x2f, 0x80, 0x00, 0x14, 0x3f, 0x80, 0x01, 0x58, 0x60, 0x80, 0x00, -0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x60, 0x59, 0xc0, 0x00, 0x00, 0x50, 0x0f, 0x80, 0x68, -0x58, 0xa2, 0x00, 0x00, 0x58, 0x92, 0x80, 0x00, 0x50, 0x8f, 0x80, 0xc8, 0x49, 0xf7, 0xb6, 0x86, -0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x60, 0x50, 0x0f, 0x80, 0x08, 0x49, 0xf7, 0xb6, 0x7e, -0x58, 0x04, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x40, 0x49, 0xf7, 0xb6, 0x76, -0x5c, 0xf3, 0x00, 0x41, 0x4e, 0xf2, 0x00, 0x12, 0x58, 0x04, 0x00, 0x00, 0x58, 0x1e, 0x00, 0x00, -0x58, 0x23, 0x00, 0x00, 0x49, 0xf7, 0xb6, 0xdc, 0x50, 0x6f, 0x80, 0xc8, 0x51, 0xcf, 0x81, 0x08, -0x58, 0x73, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, 0x58, 0x0e, 0x00, 0x00, 0x58, 0x13, 0x00, 0x00, -0x58, 0x24, 0x00, 0x00, 0x49, 0x00, 0x0a, 0x8a, 0x48, 0xff, 0xff, 0xf0, 0x00, 0x13, 0x80, 0x00, -0x56, 0x00, 0x80, 0x36, 0x18, 0x03, 0x80, 0x01, 0x4c, 0x7e, 0x7f, 0xfa, 0x50, 0x7f, 0x80, 0x68, -0x58, 0x03, 0x80, 0x00, 0x49, 0x00, 0x0a, 0x58, 0x58, 0x03, 0x80, 0x00, 0x50, 0x1f, 0x80, 0xc8, -0x44, 0x20, 0x00, 0x40, 0x49, 0x00, 0x09, 0xec, 0x04, 0x1f, 0x80, 0x00, 0x04, 0x2f, 0x80, 0x01, -0x58, 0x03, 0x80, 0x00, 0x49, 0x00, 0x09, 0xe4, 0x58, 0x03, 0x80, 0x00, 0x50, 0x1f, 0x81, 0x08, -0x49, 0x00, 0x09, 0x96, 0x00, 0x33, 0x00, 0x00, 0x56, 0x21, 0x80, 0x6a, 0x18, 0x23, 0x00, 0x01, -0x4c, 0x6e, 0x7f, 0xfa, 0x50, 0x7f, 0x80, 0x08, 0x58, 0x03, 0x80, 0x00, 0x49, 0x00, 0x0a, 0x34, -0x58, 0x03, 0x80, 0x00, 0x50, 0x1f, 0x80, 0xc8, 0x44, 0x20, 0x00, 0x40, 0x50, 0x6f, 0x81, 0x08, -0x49, 0x00, 0x09, 0xc6, 0x44, 0x20, 0x00, 0x10, 0x58, 0x03, 0x80, 0x00, 0x58, 0x13, 0x00, 0x00, -0x49, 0x00, 0x09, 0xbe, 0x58, 0x03, 0x80, 0x00, 0x58, 0x13, 0x00, 0x00, 0x49, 0x00, 0x09, 0x70, -0x5c, 0xf4, 0x80, 0x11, 0x4e, 0xf3, 0x00, 0x0a, 0x58, 0x05, 0x00, 0x00, 0x58, 0x13, 0x00, 0x00, -0x44, 0x20, 0x00, 0x10, 0x48, 0x00, 0x00, 0x08, 0x58, 0x05, 0x00, 0x00, 0x58, 0x13, 0x00, 0x00, -0x58, 0x24, 0x80, 0x00, 0x49, 0xf7, 0xb6, 0x6c, 0x51, 0xff, 0x81, 0x1c, 0x3a, 0x6f, 0xaa, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xfe, 0xcc, 0x14, 0x2f, 0x80, 0x00, -0x14, 0x3f, 0x80, 0x01, 0x58, 0x60, 0x80, 0x00, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x68, -0x59, 0xc0, 0x00, 0x00, 0x50, 0x0f, 0x80, 0x70, 0x58, 0xa2, 0x00, 0x00, 0x58, 0x92, 0x80, 0x00, -0x50, 0x8f, 0x80, 0xdc, 0x49, 0xf7, 0xb5, 0xda, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x68, -0x50, 0x0f, 0x80, 0x08, 0x49, 0xf7, 0xb5, 0xd2, 0x58, 0x04, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, -0x44, 0x20, 0x00, 0x40, 0x49, 0xf7, 0xb5, 0xca, 0x5c, 0xf3, 0x00, 0x41, 0x4e, 0xf2, 0x00, 0x12, -0x58, 0x04, 0x00, 0x00, 0x58, 0x1e, 0x00, 0x00, 0x58, 0x23, 0x00, 0x00, 0x49, 0xf7, 0xb6, 0x30, -0x50, 0x6f, 0x80, 0xdc, 0x51, 0xcf, 0x81, 0x1c, 0x58, 0x73, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, -0x58, 0x0e, 0x00, 0x00, 0x58, 0x13, 0x00, 0x00, 0x58, 0x24, 0x00, 0x00, 0x49, 0x00, 0x02, 0xb8, -0x48, 0xff, 0xff, 0xf0, 0x00, 0x13, 0x80, 0x00, 0x56, 0x00, 0x80, 0x36, 0x18, 0x03, 0x80, 0x01, -0x4c, 0x7e, 0x7f, 0xfa, 0x50, 0x7f, 0x80, 0x70, 0x58, 0x03, 0x80, 0x00, 0x49, 0x00, 0x02, 0x86, -0x58, 0x03, 0x80, 0x00, 0x50, 0x1f, 0x80, 0xdc, 0x44, 0x20, 0x00, 0x40, 0x49, 0x00, 0x02, 0x1a, -0x04, 0x1f, 0x80, 0x00, 0x04, 0x2f, 0x80, 0x01, 0x58, 0x03, 0x80, 0x00, 0x49, 0x00, 0x02, 0x12, -0x58, 0x03, 0x80, 0x00, 0x50, 0x1f, 0x81, 0x1c, 0x49, 0x00, 0x01, 0x7c, 0x00, 0x33, 0x00, 0x00, -0x56, 0x21, 0x80, 0x6a, 0x18, 0x23, 0x00, 0x01, 0x4c, 0x6e, 0x7f, 0xfa, 0x50, 0x7f, 0x80, 0x08, -0x58, 0x03, 0x80, 0x00, 0x49, 0x00, 0x02, 0x62, 0x58, 0x03, 0x80, 0x00, 0x50, 0x1f, 0x80, 0xdc, -0x44, 0x20, 0x00, 0x40, 0x50, 0x6f, 0x81, 0x1c, 0x49, 0x00, 0x01, 0xf4, 0x44, 0x20, 0x00, 0x14, -0x58, 0x03, 0x80, 0x00, 0x58, 0x13, 0x00, 0x00, 0x49, 0x00, 0x01, 0xec, 0x58, 0x03, 0x80, 0x00, -0x58, 0x13, 0x00, 0x00, 0x49, 0x00, 0x01, 0x56, 0x5c, 0xf4, 0x80, 0x15, 0x4e, 0xf3, 0x00, 0x0a, -0x58, 0x05, 0x00, 0x00, 0x58, 0x13, 0x00, 0x00, 0x44, 0x20, 0x00, 0x14, 0x48, 0x00, 0x00, 0x08, -0x58, 0x05, 0x00, 0x00, 0x58, 0x13, 0x00, 0x00, 0x58, 0x24, 0x80, 0x00, 0x49, 0xf7, 0xb5, 0xc0, -0x51, 0xff, 0x81, 0x34, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, -0x51, 0xff, 0xfe, 0xb4, 0x58, 0x60, 0x00, 0x00, 0x50, 0x00, 0x00, 0x20, 0x14, 0x0f, 0x80, 0x01, -0x50, 0x9f, 0x80, 0x08, 0x04, 0x1f, 0x80, 0x01, 0x44, 0x20, 0x00, 0x40, 0x58, 0x04, 0x80, 0x00, -0x49, 0xf7, 0xb5, 0xa6, 0x50, 0x8f, 0x80, 0x48, 0x59, 0xe4, 0x80, 0x00, 0x58, 0x24, 0x80, 0x00, -0x04, 0x01, 0x00, 0x00, 0x44, 0x50, 0xff, 0x00, 0x46, 0xa0, 0x0f, 0xf0, 0x40, 0x30, 0x14, 0x02, -0x40, 0x40, 0x60, 0x09, 0x40, 0x10, 0x60, 0x08, 0x40, 0x72, 0x04, 0x04, 0x41, 0xc1, 0xa0, 0x08, -0x40, 0x50, 0x28, 0x02, 0x40, 0x13, 0xf0, 0x04, 0x40, 0x42, 0xa0, 0x09, 0x40, 0x30, 0x90, 0x04, -0x1c, 0x31, 0x00, 0x01, 0x4c, 0x24, 0x7f, 0xe6, 0x50, 0x2f, 0x80, 0x3c, 0x50, 0x34, 0x81, 0x34, -0x04, 0x41, 0x7f, 0xfb, 0x04, 0x51, 0x00, 0x00, 0x04, 0x01, 0x7f, 0xf5, 0x04, 0xa1, 0x7f, 0xf3, -0x40, 0x12, 0x14, 0x03, 0x41, 0xc0, 0x80, 0x03, 0x40, 0x7e, 0x28, 0x03, 0x40, 0x83, 0xfc, 0x0b, -0x14, 0x81, 0x00, 0x03, 0x50, 0x21, 0x00, 0x04, 0x4c, 0x21, 0xff, 0xec, 0x04, 0x03, 0x00, 0x00, -0x04, 0x83, 0x00, 0x01, 0x04, 0x43, 0x00, 0x02, 0x04, 0x33, 0x00, 0x03, 0x05, 0xc3, 0x00, 0x04, -0x50, 0x14, 0x80, 0x50, 0x58, 0x70, 0x00, 0x00, 0x0c, 0x5f, 0x00, 0x01, 0x46, 0xa5, 0xa8, 0x27, -0x58, 0xa5, 0x09, 0x99, 0x40, 0x24, 0x20, 0x05, 0x40, 0x52, 0xa8, 0x00, 0x40, 0x52, 0xf0, 0x00, -0x40, 0xa2, 0x20, 0x02, 0x41, 0xc3, 0xec, 0x0b, 0x40, 0x21, 0x0c, 0x02, 0x40, 0x52, 0xf0, 0x00, -0x40, 0x21, 0x28, 0x03, 0x40, 0x52, 0x88, 0x00, 0x59, 0xc1, 0x80, 0x00, 0x40, 0x24, 0x08, 0x0b, -0x58, 0x83, 0x80, 0x00, 0x4d, 0xe0, 0x80, 0x0a, 0x58, 0x32, 0x00, 0x00, 0x58, 0x72, 0x80, 0x00, -0x58, 0x41, 0x00, 0x00, 0x48, 0xff, 0xff, 0xda, 0x59, 0xe1, 0x80, 0x00, 0x50, 0x8f, 0x80, 0x58, -0x50, 0xa4, 0x80, 0xa0, 0x0d, 0xc4, 0x00, 0x01, 0x46, 0x36, 0xed, 0x9e, 0x58, 0x31, 0x8b, 0xa1, -0x41, 0xce, 0x0c, 0x00, 0x40, 0x11, 0x1c, 0x03, 0x41, 0xce, 0x78, 0x00, 0x40, 0x32, 0xec, 0x0b, -0x41, 0xee, 0x0c, 0x00, 0x40, 0x30, 0x90, 0x03, 0x41, 0xcf, 0x0c, 0x00, 0x40, 0x33, 0x88, 0x0b, -0x59, 0xe2, 0x00, 0x00, 0x58, 0x72, 0x80, 0x00, 0x4c, 0x85, 0x00, 0x0a, 0x58, 0x41, 0x00, 0x00, -0x58, 0x5e, 0x00, 0x00, 0x58, 0x21, 0x80, 0x00, 0x48, 0xff, 0xff, 0xde, 0x58, 0x82, 0x80, 0x00, -0x58, 0x5e, 0x00, 0x00, 0x58, 0x71, 0x00, 0x00, 0x51, 0xcf, 0x80, 0xa8, 0x50, 0x14, 0x80, 0xf0, -0x0c, 0x4e, 0x00, 0x01, 0x46, 0xa8, 0xf1, 0xbb, 0x58, 0xa5, 0x0c, 0xdc, 0x40, 0x42, 0x28, 0x00, -0x40, 0x21, 0x9c, 0x03, 0x40, 0x42, 0x78, 0x00, 0x40, 0x21, 0x20, 0x02, 0x41, 0xe2, 0xec, 0x0b, -0x40, 0xa3, 0x8c, 0x02, 0x40, 0x42, 0x78, 0x00, 0x40, 0x21, 0x28, 0x03, 0x40, 0x42, 0x08, 0x00, -0x59, 0xe3, 0x80, 0x00, 0x40, 0x24, 0x08, 0x0b, 0x58, 0x82, 0x80, 0x00, 0x4d, 0xc0, 0x80, 0x0a, -0x58, 0x71, 0x80, 0x00, 0x58, 0x52, 0x00, 0x00, 0x58, 0x31, 0x00, 0x00, 0x48, 0xff, 0xff, 0xda, -0x59, 0xc3, 0x80, 0x00, 0x50, 0x94, 0x81, 0x40, 0x50, 0x7f, 0x80, 0xf8, 0x0d, 0xe3, 0x80, 0x01, -0x46, 0x8c, 0xa6, 0x2c, 0x58, 0x84, 0x01, 0xd6, 0x40, 0xaf, 0x20, 0x00, 0x40, 0x11, 0x14, 0x03, -0x41, 0xe5, 0x70, 0x00, 0x40, 0x82, 0x6c, 0x0b, 0x41, 0xcf, 0x20, 0x00, 0x40, 0x80, 0x8c, 0x03, -0x40, 0xae, 0x20, 0x00, 0x40, 0x82, 0x88, 0x0b, 0x59, 0xc1, 0x80, 0x00, 0x58, 0x52, 0x00, 0x00, -0x4c, 0x74, 0x80, 0x0a, 0x58, 0x31, 0x00, 0x00, 0x58, 0x45, 0x00, 0x00, 0x58, 0x24, 0x00, 0x00, -0x48, 0xff, 0xff, 0xde, 0x05, 0xc3, 0x00, 0x01, 0x04, 0x93, 0x00, 0x02, 0x04, 0x73, 0x00, 0x03, -0x04, 0x53, 0x00, 0x04, 0x40, 0xa5, 0x00, 0x00, 0x40, 0x4e, 0x10, 0x00, 0x40, 0x23, 0x88, 0x00, -0x40, 0x32, 0x8c, 0x00, 0x40, 0x84, 0xa0, 0x00, 0x14, 0x23, 0x00, 0x03, 0x14, 0xa3, 0x00, 0x00, -0x14, 0x43, 0x00, 0x01, 0x14, 0x83, 0x00, 0x02, 0x14, 0x33, 0x00, 0x04, 0x44, 0x10, 0x00, 0x00, -0x04, 0x0f, 0x80, 0x01, 0x44, 0x20, 0x00, 0x40, 0x49, 0xf7, 0xb4, 0x18, 0x44, 0x00, 0x00, 0x00, -0x14, 0x03, 0x00, 0x18, 0x51, 0xff, 0x81, 0x4c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xf4, 0x04, 0x20, 0x00, 0x18, 0x50, 0x70, 0x00, 0x20, -0x58, 0x60, 0x00, 0x00, 0x58, 0x80, 0x80, 0x00, 0x40, 0x03, 0x88, 0x00, 0x44, 0x10, 0x00, 0x80, -0x44, 0x20, 0x00, 0x01, 0x49, 0xf7, 0xb3, 0xfa, 0x04, 0x03, 0x00, 0x18, 0x5c, 0xf0, 0x00, 0x38, -0x4e, 0xf3, 0x00, 0x06, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xfe, 0xaa, 0x04, 0x33, 0x00, 0x06, -0x05, 0xe3, 0x00, 0x07, 0x41, 0xc1, 0xf4, 0x09, 0x40, 0x2f, 0x0c, 0x08, 0x40, 0x2e, 0x08, 0x04, -0x40, 0x31, 0x8c, 0x08, 0x44, 0x50, 0xff, 0x00, 0x46, 0x10, 0x0f, 0xf0, 0x40, 0x91, 0x14, 0x02, -0x40, 0xa1, 0x94, 0x02, 0x41, 0xe1, 0x84, 0x02, 0x41, 0xc1, 0x04, 0x02, 0x40, 0x44, 0xa0, 0x08, -0x40, 0x01, 0xe0, 0x08, 0x40, 0x91, 0x60, 0x08, 0x40, 0xa5, 0x20, 0x08, 0x40, 0x1e, 0x20, 0x09, -0x40, 0x05, 0x00, 0x04, 0x40, 0x44, 0x90, 0x04, 0x40, 0x5f, 0x20, 0x09, 0x41, 0xe0, 0x14, 0x04, -0x41, 0xc1, 0xe0, 0x09, 0x40, 0x52, 0x04, 0x04, 0x40, 0x11, 0x60, 0x09, 0x40, 0x42, 0x84, 0x04, -0x40, 0x3e, 0x78, 0x04, 0x44, 0x20, 0x00, 0x08, 0x58, 0x1f, 0x80, 0x00, 0x50, 0x03, 0x80, 0x38, -0x14, 0x4f, 0x80, 0x00, 0x14, 0x3f, 0x80, 0x01, 0x49, 0xf7, 0xb4, 0x22, 0x58, 0x03, 0x00, 0x00, -0x49, 0xff, 0xfe, 0x66, 0x44, 0x20, 0x00, 0x00, 0x38, 0x33, 0x08, 0x02, 0x44, 0x50, 0xff, 0x00, -0x41, 0xc1, 0x94, 0x02, 0x40, 0x4e, 0x20, 0x08, 0x47, 0xc0, 0x0f, 0xf0, 0x40, 0x01, 0xe0, 0x09, -0x40, 0x11, 0xe0, 0x08, 0x41, 0xe0, 0x04, 0x04, 0x40, 0x31, 0xf0, 0x02, 0x40, 0x0f, 0x10, 0x04, -0x40, 0x51, 0xa0, 0x09, 0x40, 0x10, 0x14, 0x04, 0x38, 0x13, 0x08, 0x0a, 0x44, 0x40, 0x00, 0x14, -0x50, 0x21, 0x00, 0x04, 0x4c, 0x22, 0x7f, 0xe2, 0x58, 0x04, 0x00, 0x00, 0x58, 0x13, 0x00, 0x00, -0x49, 0xf7, 0xb3, 0xf6, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xf4, 0x58, 0x70, 0x00, 0x00, 0x50, 0x00, 0x00, 0x20, -0x14, 0x1f, 0x80, 0x01, 0x59, 0xc1, 0x00, 0x00, 0x14, 0x0f, 0x80, 0x00, 0x44, 0x80, 0x00, 0x00, -0x48, 0x00, 0x00, 0x34, 0x04, 0x33, 0x80, 0x18, 0x04, 0x1f, 0x80, 0x01, 0x05, 0xef, 0x80, 0x00, -0x40, 0x50, 0xa0, 0x00, 0x40, 0x4f, 0x0c, 0x00, 0x40, 0x93, 0x0c, 0x00, 0x58, 0x12, 0x80, 0x00, -0x58, 0x02, 0x00, 0x00, 0x5c, 0xf4, 0x80, 0x40, 0x4e, 0xf2, 0x00, 0x0e, 0x49, 0xf7, 0xb3, 0xc8, -0x04, 0x33, 0x80, 0x18, 0x40, 0x84, 0x18, 0x00, 0x40, 0x21, 0x98, 0x00, 0x14, 0x23, 0x80, 0x18, -0x48, 0x00, 0x00, 0x14, 0x52, 0x21, 0x80, 0x40, 0x49, 0xf7, 0xb3, 0xba, 0x44, 0x60, 0x00, 0x40, -0x04, 0x53, 0x80, 0x18, 0x14, 0x63, 0x80, 0x18, 0x40, 0x43, 0x14, 0x01, 0x58, 0x03, 0x80, 0x00, -0x40, 0x84, 0x10, 0x00, 0x49, 0xff, 0xfd, 0xf4, 0x40, 0x6e, 0x20, 0x01, 0x58, 0x23, 0x00, 0x00, -0x4c, 0x8e, 0x7f, 0xca, 0x04, 0x03, 0x80, 0x06, 0x04, 0x13, 0x80, 0x07, 0x58, 0x24, 0x00, 0x00, -0x44, 0x30, 0x00, 0x00, 0x40, 0x40, 0x08, 0x00, 0x40, 0xf2, 0x08, 0x06, 0x40, 0x50, 0x8c, 0x00, -0x40, 0x52, 0xbc, 0x00, 0x14, 0x43, 0x80, 0x06, 0x14, 0x53, 0x80, 0x07, 0x51, 0xff, 0x80, 0x0c, -0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, 0x3e, 0x1f, 0xd5, 0xe8, -0x58, 0x60, 0x00, 0x00, 0x44, 0x20, 0x00, 0x14, 0x49, 0xf7, 0xb3, 0x82, 0x50, 0x03, 0x00, 0x20, -0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x40, 0x49, 0xf7, 0xb3, 0x08, 0x44, 0x20, 0x00, 0x00, -0x44, 0x00, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, 0x14, 0x23, 0x00, 0x18, 0x14, 0x03, 0x00, 0x06, -0x14, 0x13, 0x00, 0x07, 0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa4, 0xbc, -0x51, 0xff, 0xff, 0x94, 0x58, 0x90, 0x00, 0x00, 0x58, 0x80, 0x80, 0x00, 0x58, 0x71, 0x00, 0x00, -0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x68, 0x58, 0x0f, 0x80, 0x00, 0x49, 0xf7, 0xb2, 0xe6, -0x58, 0x0f, 0x80, 0x00, 0x49, 0xff, 0xff, 0xca, 0x58, 0x0f, 0x80, 0x00, 0x58, 0x14, 0x80, 0x00, -0x58, 0x24, 0x00, 0x00, 0x49, 0xff, 0xff, 0x5e, 0x58, 0x0f, 0x80, 0x00, 0x58, 0x13, 0x80, 0x00, -0x58, 0x6f, 0x80, 0x00, 0x49, 0xff, 0xfe, 0xc6, 0x51, 0xff, 0x80, 0x6c, 0x3a, 0x6f, 0xa4, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0x5c, 0x14, 0x0f, 0x80, 0x05, -0x50, 0x00, 0x00, 0x18, 0x14, 0x0f, 0x80, 0x17, 0x50, 0x6f, 0x80, 0x60, 0x04, 0x1f, 0x80, 0x17, -0x44, 0x20, 0x00, 0x40, 0x58, 0x03, 0x00, 0x00, 0x49, 0xf7, 0xb3, 0x2a, 0x58, 0x23, 0x00, 0x00, -0x50, 0x3f, 0x80, 0xa0, 0x50, 0x21, 0x00, 0x04, 0x4c, 0x21, 0xff, 0xfe, 0x04, 0x1f, 0x80, 0x05, -0x04, 0x4f, 0x80, 0x05, 0x04, 0xa0, 0x80, 0x01, 0x05, 0xcf, 0x80, 0x05, 0x14, 0xaf, 0x80, 0x02, -0x50, 0x3f, 0x80, 0x60, 0x05, 0xe2, 0x00, 0x02, 0x04, 0x01, 0x80, 0x00, 0x15, 0xef, 0x80, 0x03, -0x04, 0x2f, 0x80, 0x05, 0x04, 0x5e, 0x00, 0x03, 0x14, 0x0f, 0x80, 0x16, 0x14, 0x5f, 0x80, 0x04, -0x46, 0x1d, 0x76, 0xaa, 0x04, 0x61, 0x00, 0x00, 0x04, 0x2f, 0x80, 0x02, 0x40, 0xa3, 0x00, 0x00, -0x14, 0x6f, 0x80, 0x01, 0x04, 0x6f, 0x80, 0x03, 0x40, 0x71, 0x08, 0x05, 0x40, 0x83, 0x94, 0x02, -0x40, 0x93, 0x08, 0x02, 0x58, 0x10, 0x84, 0x78, 0x40, 0x44, 0x24, 0x04, 0x41, 0xe5, 0x04, 0x00, -0x04, 0x01, 0x80, 0x01, 0x41, 0xcf, 0x10, 0x00, 0x04, 0x5f, 0x80, 0x04, 0x40, 0x7e, 0x64, 0x0b, -0x40, 0x23, 0x88, 0x00, 0x40, 0x42, 0x80, 0x00, 0x14, 0x0f, 0x80, 0x15, 0x04, 0x0f, 0x80, 0x02, -0x40, 0x81, 0x08, 0x05, 0x46, 0x1e, 0x8c, 0x7b, 0x40, 0xa4, 0x18, 0x02, 0x40, 0x91, 0x00, 0x02, -0x58, 0x10, 0x87, 0x56, 0x41, 0xe5, 0x24, 0x04, 0x41, 0xc2, 0x04, 0x00, 0x40, 0x6e, 0x78, 0x00, -0x40, 0x73, 0x50, 0x0b, 0x40, 0x63, 0x88, 0x00, 0x04, 0x51, 0x80, 0x02, 0x04, 0xaf, 0x80, 0x03, -0x40, 0x83, 0x18, 0x05, 0x46, 0x12, 0x42, 0x07, 0x40, 0x94, 0x00, 0x02, 0x41, 0xe5, 0x14, 0x00, -0x40, 0x43, 0x08, 0x02, 0x58, 0x10, 0x80, 0xdb, 0x41, 0xcf, 0x04, 0x00, 0x14, 0x5f, 0x80, 0x14, -0x40, 0x54, 0x90, 0x04, 0x40, 0x0e, 0x14, 0x00, 0x40, 0x80, 0x3c, 0x0b, 0x40, 0x84, 0x18, 0x00, -0x04, 0x91, 0x80, 0x03, 0x04, 0x4f, 0x80, 0x02, 0x40, 0xa4, 0x20, 0x05, 0x46, 0x1c, 0x1b, 0xdc, -0x41, 0xe5, 0x08, 0x02, 0x41, 0xc2, 0x24, 0x00, 0x40, 0x54, 0x18, 0x02, 0x58, 0x10, 0x8e, 0xee, -0x40, 0x0f, 0x14, 0x04, 0x40, 0xae, 0x04, 0x00, 0x14, 0x9f, 0x80, 0x13, 0x40, 0x95, 0x00, 0x00, -0x40, 0x44, 0xa8, 0x0b, 0x40, 0x92, 0x20, 0x00, 0x04, 0x51, 0x80, 0x04, 0x46, 0x0f, 0x57, 0xc0, -0x41, 0xe4, 0xa4, 0x05, 0x58, 0x00, 0x0f, 0xaf, 0x40, 0x1f, 0x18, 0x02, 0x41, 0xc2, 0x80, 0x00, -0x40, 0xa4, 0xa0, 0x02, 0x40, 0x4e, 0x08, 0x00, 0x40, 0x20, 0xa8, 0x04, 0x14, 0x5f, 0x80, 0x12, -0x40, 0x52, 0x08, 0x00, 0x41, 0xc2, 0xe4, 0x0b, 0x40, 0x5e, 0x24, 0x00, 0x04, 0x11, 0x80, 0x05, -0x47, 0xe4, 0x78, 0x7c, 0x40, 0x02, 0x94, 0x05, 0x59, 0xef, 0x06, 0x2a, 0x40, 0x40, 0xf8, 0x00, -0x40, 0x22, 0xa4, 0x02, 0x40, 0xa0, 0x20, 0x02, 0x41, 0xc2, 0x18, 0x00, 0x40, 0x05, 0x08, 0x04, -0x41, 0xee, 0x00, 0x00, 0x14, 0x1f, 0x80, 0x11, 0x40, 0x1f, 0x50, 0x0b, 0x41, 0xe0, 0x94, 0x00, -0x05, 0xc1, 0x80, 0x06, 0x46, 0x6a, 0x83, 0x04, 0x40, 0x7f, 0x78, 0x05, 0x58, 0x63, 0x06, 0x13, -0x40, 0xa3, 0xa4, 0x02, 0x40, 0x4e, 0x18, 0x00, 0x40, 0x2f, 0x14, 0x02, 0x40, 0x02, 0x20, 0x00, -0x40, 0x15, 0x08, 0x04, 0x40, 0x60, 0x04, 0x00, 0x15, 0xcf, 0x80, 0x10, 0x41, 0xc3, 0x3c, 0x0b, -0x40, 0x6e, 0x78, 0x00, 0x04, 0x71, 0x80, 0x07, 0x46, 0x8f, 0xd4, 0x69, 0x40, 0x23, 0x18, 0x05, -0x58, 0x84, 0x05, 0x01, 0x40, 0x41, 0x14, 0x02, 0x40, 0xa3, 0xa0, 0x00, 0x40, 0x03, 0x78, 0x02, -0x40, 0x15, 0x24, 0x00, 0x41, 0xc2, 0x00, 0x04, 0x40, 0x20, 0xf0, 0x00, 0x14, 0x7f, 0x80, 0x0f, -0x40, 0x71, 0x28, 0x0b, 0x40, 0x23, 0x98, 0x00, 0x04, 0xa1, 0x80, 0x08, 0x46, 0x06, 0x98, 0x09, -0x40, 0x81, 0x08, 0x05, 0x58, 0x00, 0x08, 0xd8, 0x40, 0x94, 0x78, 0x02, 0x40, 0x45, 0x00, 0x00, -0x40, 0x11, 0x18, 0x02, 0x40, 0x74, 0x84, 0x04, 0x41, 0xc2, 0x14, 0x00, 0x40, 0x5e, 0x1c, 0x00, -0x14, 0xaf, 0x80, 0x0e, 0x40, 0xa2, 0xe4, 0x0b, 0x40, 0x55, 0x08, 0x00, 0x04, 0x01, 0x80, 0x09, -0x46, 0x48, 0xb4, 0x4f, 0x40, 0x82, 0x94, 0x05, 0x58, 0x42, 0x07, 0xaf, 0x41, 0xc4, 0x18, 0x02, -0x40, 0x90, 0x10, 0x00, 0x40, 0x12, 0x88, 0x02, 0x40, 0x74, 0xf8, 0x00, 0x40, 0xae, 0x04, 0x04, -0x40, 0x83, 0xa8, 0x00, 0x14, 0x0f, 0x80, 0x0d, 0x40, 0x04, 0x50, 0x0b, 0x40, 0x80, 0x14, 0x00, -0x05, 0xc1, 0x80, 0x0a, 0x40, 0x44, 0x20, 0x05, 0x44, 0x9f, 0x5b, 0xb1, 0x40, 0x72, 0x08, 0x02, -0x41, 0xee, 0x24, 0x00, 0x40, 0x14, 0x14, 0x02, 0x40, 0x03, 0x84, 0x04, 0x40, 0xaf, 0x18, 0x00, -0x40, 0x65, 0x00, 0x00, 0x40, 0x43, 0x3c, 0x0b, 0x40, 0x62, 0x20, 0x00, 0x04, 0x91, 0x80, 0x0b, -0x47, 0xe8, 0x95, 0xcd, 0x15, 0xcf, 0x80, 0x0c, 0x59, 0xef, 0x07, 0xbe, 0x41, 0xc3, 0x18, 0x05, -0x40, 0xae, 0x14, 0x02, 0x40, 0x74, 0xf8, 0x00, 0x40, 0x13, 0x20, 0x02, 0x40, 0x03, 0x88, 0x00, -0x40, 0x45, 0x04, 0x04, 0x14, 0x9f, 0x80, 0x0b, 0x40, 0x90, 0x10, 0x00, 0x41, 0xc4, 0xa8, 0x0b, -0x40, 0x9e, 0x18, 0x00, 0x04, 0x11, 0x80, 0x0c, 0x46, 0x26, 0xb9, 0x01, 0x41, 0xe4, 0xa4, 0x05, -0x58, 0x21, 0x01, 0x22, 0x40, 0x0f, 0x20, 0x02, 0x40, 0xa0, 0x88, 0x00, 0x40, 0x74, 0x98, 0x02, -0x41, 0xc0, 0x1c, 0x04, 0x40, 0x45, 0x14, 0x00, 0x40, 0x52, 0x70, 0x00, 0x14, 0x1f, 0x80, 0x0a, -0x40, 0x12, 0xe4, 0x0b, 0x40, 0x50, 0xa4, 0x00, 0x04, 0x21, 0x80, 0x0d, 0x47, 0xef, 0xd9, 0x87, -0x40, 0xa2, 0x94, 0x05, 0x59, 0xef, 0x01, 0x93, 0x41, 0xc5, 0x18, 0x02, 0x40, 0x71, 0x78, 0x00, -0x40, 0x02, 0xa4, 0x02, 0x40, 0x43, 0xa0, 0x00, 0x40, 0x8e, 0x00, 0x04, 0x40, 0x12, 0x20, 0x00, -0x41, 0xe0, 0xd0, 0x0b, 0x40, 0x1f, 0x14, 0x00, 0x14, 0x2f, 0x80, 0x09, 0x46, 0xaa, 0x67, 0x94, -0x04, 0x21, 0x80, 0x0e, 0x41, 0xe0, 0x84, 0x05, 0x58, 0xa5, 0x03, 0x8e, 0x40, 0x71, 0x28, 0x00, -0x40, 0x0f, 0x24, 0x02, 0x41, 0xc0, 0x94, 0x02, 0x40, 0x40, 0x70, 0x04, 0x40, 0x83, 0x98, 0x00, -0x40, 0x64, 0x10, 0x00, 0x40, 0xa3, 0x3c, 0x0b, 0x40, 0x65, 0x04, 0x00, 0x14, 0x2f, 0x80, 0x08, -0x04, 0x31, 0x80, 0x0f, 0x46, 0x24, 0x9b, 0x40, 0x40, 0xa3, 0x18, 0x05, 0x58, 0x21, 0x08, 0x21, -0x40, 0x71, 0x88, 0x00, 0x40, 0x05, 0x14, 0x02, 0x41, 0xc3, 0x04, 0x02, 0x40, 0x83, 0xa4, 0x00, -0x40, 0x90, 0x70, 0x04, 0x40, 0x44, 0x24, 0x00, 0x14, 0x3f, 0x80, 0x07, 0x40, 0x72, 0x28, 0x0b, -0x04, 0x3f, 0x80, 0x15, 0x46, 0x2f, 0x61, 0xe2, 0x40, 0x43, 0x98, 0x00, 0x58, 0x21, 0x05, 0x62, -0x41, 0xc1, 0x88, 0x00, 0x40, 0x02, 0x04, 0x02, 0x41, 0xe3, 0x78, 0x02, 0x40, 0x80, 0x78, 0x04, -0x40, 0x9e, 0x14, 0x00, 0x40, 0x54, 0xa0, 0x00, 0x04, 0x2f, 0x80, 0x10, 0x40, 0x72, 0xec, 0x0b, -0x47, 0xcc, 0x04, 0x0b, 0x40, 0x53, 0x90, 0x00, 0x59, 0xce, 0x03, 0x40, 0x41, 0xe2, 0x28, 0x02, -0x40, 0x31, 0x70, 0x00, 0x40, 0x02, 0x98, 0x02, 0x40, 0x90, 0x78, 0x04, 0x40, 0x81, 0x84, 0x00, -0x40, 0x14, 0x24, 0x00, 0x04, 0x3f, 0x80, 0x0b, 0x40, 0x70, 0xdc, 0x0b, 0x46, 0x22, 0x65, 0xe5, -0x40, 0x13, 0x94, 0x00, 0x41, 0xc2, 0x10, 0x05, 0x58, 0x21, 0x0a, 0x51, 0x41, 0xe2, 0xf0, 0x02, -0x40, 0xa1, 0x88, 0x00, 0x40, 0x00, 0x90, 0x02, 0x40, 0x90, 0x78, 0x04, 0x40, 0x85, 0x18, 0x00, -0x40, 0x64, 0x24, 0x00, 0x04, 0x2f, 0x80, 0x16, 0x40, 0x73, 0x48, 0x0b, 0x46, 0x3e, 0x9b, 0x6c, -0x40, 0x63, 0x84, 0x00, 0x41, 0xc2, 0x94, 0x05, 0x58, 0x31, 0x87, 0xaa, 0x41, 0xe0, 0xf0, 0x02, -0x40, 0xa1, 0x0c, 0x00, 0x40, 0x03, 0x14, 0x02, 0x40, 0x90, 0x78, 0x04, 0x40, 0x85, 0x10, 0x00, -0x40, 0x44, 0x24, 0x00, 0x05, 0xcf, 0x80, 0x11, 0x40, 0x72, 0x30, 0x0b, 0x46, 0x2d, 0x62, 0xf1, -0x40, 0x43, 0x98, 0x00, 0x40, 0xa0, 0x84, 0x05, 0x58, 0x21, 0x00, 0x5d, 0x41, 0xe3, 0x28, 0x02, -0x40, 0x3e, 0x08, 0x00, 0x40, 0x02, 0x04, 0x02, 0x40, 0x80, 0x78, 0x04, 0x40, 0x91, 0x94, 0x00, -0x40, 0x54, 0xa0, 0x00, 0x05, 0xcf, 0x80, 0x0c, 0x40, 0x72, 0xec, 0x0b, 0x46, 0x20, 0x24, 0x41, -0x40, 0x53, 0x90, 0x00, 0x40, 0xa3, 0x18, 0x05, 0x58, 0x21, 0x04, 0x53, 0x41, 0xe2, 0x28, 0x02, -0x40, 0x3e, 0x08, 0x00, 0x40, 0x02, 0x98, 0x02, 0x40, 0x90, 0x78, 0x04, 0x40, 0x81, 0x84, 0x00, -0x40, 0x14, 0x24, 0x00, 0x04, 0x3f, 0x80, 0x07, 0x40, 0x70, 0xdc, 0x0b, 0x46, 0xad, 0x8a, 0x1e, -0x40, 0x13, 0x94, 0x00, 0x41, 0xc2, 0x10, 0x05, 0x58, 0xa5, 0x06, 0x81, 0x41, 0xe2, 0xf0, 0x02, -0x40, 0x21, 0xa8, 0x00, 0x40, 0x00, 0x90, 0x02, 0x40, 0x90, 0x78, 0x04, 0x40, 0x81, 0x18, 0x00, -0x40, 0x64, 0x24, 0x00, 0x04, 0xaf, 0x80, 0x12, 0x40, 0x73, 0x48, 0x0b, 0x46, 0x3e, 0x7d, 0x3f, -0x40, 0x63, 0x84, 0x00, 0x41, 0xc2, 0x94, 0x05, 0x58, 0x31, 0x8b, 0xc8, 0x41, 0xe0, 0xf0, 0x02, -0x40, 0x05, 0x0c, 0x00, 0x40, 0x23, 0x14, 0x02, 0x40, 0x91, 0x78, 0x04, 0x40, 0x80, 0x10, 0x00, -0x40, 0x44, 0x24, 0x00, 0x04, 0x0f, 0x80, 0x0d, 0x40, 0x72, 0x30, 0x0b, 0x47, 0xc2, 0x1e, 0x1c, -0x40, 0x43, 0x98, 0x00, 0x40, 0xa0, 0x84, 0x05, 0x59, 0xce, 0x0d, 0xe6, 0x41, 0xe3, 0x28, 0x02, -0x40, 0x30, 0x70, 0x00, 0x40, 0x22, 0x04, 0x02, 0x40, 0x81, 0x78, 0x04, 0x40, 0x91, 0x94, 0x00, -0x40, 0x54, 0xa0, 0x00, 0x04, 0x0f, 0x80, 0x08, 0x40, 0x72, 0xec, 0x0b, 0x47, 0xcc, 0x33, 0x70, -0x40, 0x53, 0x90, 0x00, 0x40, 0xa3, 0x18, 0x05, 0x59, 0xce, 0x07, 0xd6, 0x41, 0xe2, 0x28, 0x02, -0x40, 0x30, 0x70, 0x00, 0x40, 0x22, 0x98, 0x02, 0x40, 0x91, 0x78, 0x04, 0x40, 0x81, 0x84, 0x00, -0x40, 0x14, 0x24, 0x00, 0x04, 0x0f, 0x80, 0x13, 0x40, 0x70, 0xdc, 0x0b, 0x46, 0x2f, 0x4d, 0x50, -0x40, 0x13, 0x94, 0x00, 0x41, 0xc2, 0x10, 0x05, 0x58, 0x21, 0x0d, 0x87, 0x41, 0xe2, 0xf0, 0x02, -0x40, 0xa0, 0x08, 0x00, 0x40, 0x30, 0x90, 0x02, 0x40, 0x91, 0xf8, 0x04, 0x40, 0x85, 0x18, 0x00, -0x40, 0x64, 0x24, 0x00, 0x04, 0x2f, 0x80, 0x0e, 0x40, 0x73, 0x48, 0x0b, 0x46, 0x04, 0x55, 0xa1, -0x40, 0x63, 0x84, 0x00, 0x41, 0xc2, 0x94, 0x05, 0x58, 0x00, 0x04, 0xed, 0x41, 0xe0, 0xf0, 0x02, -0x40, 0xa1, 0x00, 0x00, 0x40, 0x33, 0x14, 0x02, 0x40, 0x85, 0x10, 0x00, 0x40, 0x91, 0xf8, 0x04, -0x40, 0x74, 0x24, 0x00, 0x04, 0x4f, 0x80, 0x09, 0x40, 0x03, 0xb0, 0x0b, 0x46, 0x2a, 0x9e, 0x3e, -0x40, 0x80, 0x18, 0x00, 0x40, 0xa0, 0x84, 0x05, 0x58, 0x21, 0x09, 0x05, 0x41, 0xe3, 0x28, 0x02, -0x40, 0x32, 0x08, 0x00, 0x41, 0xc4, 0x04, 0x02, 0x40, 0x7e, 0x78, 0x04, 0x40, 0x91, 0x94, 0x00, -0x40, 0x54, 0x9c, 0x00, 0x04, 0x4f, 0x80, 0x14, 0x40, 0x02, 0xec, 0x0b, 0x46, 0x2f, 0xce, 0xfa, -0x40, 0x50, 0x20, 0x00, 0x40, 0xa3, 0x18, 0x05, 0x58, 0x21, 0x03, 0xf8, 0x41, 0xe4, 0x28, 0x02, -0x40, 0x32, 0x08, 0x00, 0x41, 0xc2, 0x98, 0x02, 0x40, 0x71, 0x84, 0x00, 0x40, 0x9e, 0x78, 0x04, -0x40, 0x03, 0xa4, 0x00, 0x04, 0x3f, 0x80, 0x0f, 0x40, 0xa0, 0x5c, 0x0b, 0x47, 0xe6, 0x76, 0xf0, -0x40, 0xa5, 0x14, 0x00, 0x40, 0x44, 0x20, 0x05, 0x59, 0xef, 0x02, 0xd9, 0x40, 0x72, 0x90, 0x02, -0x40, 0x21, 0xf8, 0x00, 0x41, 0xc5, 0x20, 0x02, 0x40, 0x11, 0x18, 0x00, 0x40, 0x9e, 0x1c, 0x04, -0x40, 0x00, 0xa4, 0x00, 0x04, 0x7f, 0x80, 0x0a, 0x40, 0x40, 0x48, 0x0b, 0x46, 0x28, 0xd2, 0xa4, -0x40, 0x02, 0x28, 0x00, 0x41, 0xe2, 0x94, 0x05, 0x58, 0x21, 0x0c, 0x8a, 0x41, 0xc5, 0x78, 0x02, -0x40, 0x33, 0x88, 0x00, 0x40, 0x60, 0x14, 0x02, 0x40, 0x11, 0xa0, 0x00, 0x40, 0x93, 0x70, 0x04, -0x40, 0x40, 0xa4, 0x00, 0x04, 0x8f, 0x80, 0x11, 0x41, 0xe2, 0x30, 0x0b, 0x44, 0x2a, 0x39, 0x42, -0x40, 0x4f, 0x00, 0x00, 0x40, 0x74, 0x08, 0x00, 0x40, 0x30, 0x28, 0x03, 0x14, 0xaf, 0x80, 0x06, -0x40, 0x63, 0x94, 0x00, 0x41, 0xc1, 0x90, 0x03, 0x40, 0x13, 0x70, 0x00, 0x04, 0x8f, 0x80, 0x0e, -0x47, 0xe8, 0x77, 0x1f, 0x04, 0x2f, 0x80, 0x06, 0x40, 0x90, 0xf0, 0x0b, 0x59, 0xef, 0x06, 0x81, -0x40, 0x14, 0x90, 0x00, 0x40, 0x74, 0x78, 0x00, 0x40, 0x52, 0x00, 0x03, 0x40, 0x33, 0x88, 0x00, -0x40, 0xa2, 0x84, 0x03, 0x40, 0x61, 0xa8, 0x00, 0x05, 0xef, 0x80, 0x0b, 0x46, 0x96, 0xd9, 0xd6, -0x41, 0xc3, 0x54, 0x0b, 0x58, 0x94, 0x81, 0x22, 0x40, 0x6e, 0x04, 0x00, 0x40, 0x8f, 0x24, 0x00, -0x40, 0x70, 0x90, 0x03, 0x40, 0x24, 0x00, 0x00, 0x40, 0x03, 0x98, 0x03, 0x40, 0x51, 0x00, 0x00, -0x05, 0xcf, 0x80, 0x08, 0x46, 0xaf, 0xde, 0x53, 0x40, 0x32, 0xc0, 0x0b, 0x58, 0xa5, 0x08, 0x0c, -0x40, 0x51, 0x98, 0x00, 0x40, 0x9e, 0x28, 0x00, 0x41, 0xe3, 0x04, 0x03, 0x40, 0x84, 0x90, 0x00, -0x40, 0x7f, 0x14, 0x03, 0x40, 0x24, 0x1c, 0x00, 0x04, 0x3f, 0x80, 0x15, 0x46, 0x4a, 0x4b, 0xee, -0x40, 0x01, 0x24, 0x0b, 0x58, 0x42, 0x0a, 0x44, 0x40, 0x80, 0x14, 0x00, 0x40, 0xa1, 0x90, 0x00, -0x41, 0xc2, 0x98, 0x03, 0x41, 0xee, 0x20, 0x03, 0x40, 0x95, 0x04, 0x00, 0x40, 0x14, 0xf8, 0x00, -0x04, 0x2f, 0x80, 0x12, 0x46, 0x04, 0xbd, 0xec, 0x40, 0x70, 0xf0, 0x0b, 0x58, 0x00, 0x0f, 0xa9, -0x40, 0x13, 0xa0, 0x00, 0x40, 0x41, 0x00, 0x00, 0x40, 0xa4, 0x14, 0x03, 0x41, 0xc5, 0x04, 0x03, -0x40, 0x32, 0x18, 0x00, 0x40, 0x61, 0xf0, 0x00, 0x04, 0x9f, 0x80, 0x0f, 0x46, 0x7f, 0x6b, 0xb4, -0x41, 0xe3, 0x54, 0x0b, 0x58, 0x73, 0x8b, 0x60, 0x40, 0x6f, 0x04, 0x00, 0x40, 0x24, 0x9c, 0x00, -0x40, 0x00, 0xa0, 0x03, 0x40, 0xa0, 0x18, 0x03, 0x40, 0x41, 0x14, 0x00, 0x40, 0x52, 0x28, 0x00, -0x05, 0xef, 0x80, 0x0c, 0x46, 0x3b, 0xeb, 0xfb, 0x41, 0xc2, 0xc0, 0x0b, 0x58, 0x31, 0x8c, 0x70, -0x40, 0x5e, 0x18, 0x00, 0x40, 0x9f, 0x0c, 0x00, 0x40, 0x73, 0x04, 0x03, 0x40, 0x04, 0xa0, 0x00, -0x40, 0x23, 0x94, 0x03, 0x40, 0x40, 0x08, 0x00, 0x05, 0xcf, 0x80, 0x09, 0x46, 0xa2, 0x89, 0xb7, -0x40, 0x82, 0x24, 0x0b, 0x58, 0xa5, 0x0e, 0xc6, 0x40, 0x44, 0x14, 0x00, 0x40, 0x3e, 0x28, 0x00, -0x41, 0xe2, 0x98, 0x03, 0x40, 0x7f, 0x10, 0x03, 0x40, 0x91, 0x84, 0x00, 0x40, 0x14, 0x9c, 0x00, -0x04, 0x8f, 0x80, 0x16, 0x46, 0x2e, 0xaa, 0x12, 0x40, 0x00, 0xf0, 0x0b, 0x58, 0x21, 0x07, 0xfa, -0x40, 0x10, 0x10, 0x00, 0x40, 0xa4, 0x08, 0x00, 0x41, 0xc2, 0x14, 0x03, 0x41, 0xee, 0x04, 0x03, -0x40, 0x35, 0x18, 0x00, 0x40, 0x61, 0xf8, 0x00, 0x04, 0x9f, 0x80, 0x13, 0x46, 0x0d, 0x4e, 0xf3, -0x40, 0x73, 0x54, 0x0b, 0x58, 0x00, 0x00, 0x85, 0x40, 0x63, 0x84, 0x00, 0x40, 0x84, 0x80, 0x00, -0x40, 0xa0, 0x90, 0x03, 0x41, 0xc5, 0x18, 0x03, 0x40, 0x24, 0x14, 0x00, 0x40, 0x51, 0x70, 0x00, -0x04, 0x7f, 0x80, 0x10, 0x46, 0x30, 0x48, 0x81, 0x41, 0xe2, 0xc0, 0x0b, 0x58, 0x31, 0x8d, 0x05, -0x40, 0x5f, 0x18, 0x00, 0x40, 0x93, 0x8c, 0x00, 0x40, 0x03, 0x04, 0x03, 0x40, 0xa0, 0x14, 0x03, -0x40, 0x84, 0x90, 0x00, 0x40, 0x44, 0x28, 0x00, 0x05, 0xef, 0x80, 0x0d, 0x46, 0x2d, 0x9d, 0x4d, -0x41, 0xc2, 0x24, 0x0b, 0x58, 0x21, 0x00, 0x39, 0x40, 0x4e, 0x14, 0x00, 0x40, 0x3f, 0x08, 0x00, -0x40, 0x72, 0x98, 0x03, 0x40, 0x91, 0x84, 0x00, 0x40, 0x03, 0x90, 0x03, 0x40, 0xa4, 0x80, 0x00, -0x05, 0xcf, 0x80, 0x0a, 0x46, 0x8e, 0x6d, 0xb9, 0x40, 0x15, 0x70, 0x0b, 0x58, 0x84, 0x09, 0xe5, -0x40, 0x90, 0x90, 0x00, 0x40, 0x2e, 0x20, 0x00, 0x41, 0xe2, 0x14, 0x03, 0x40, 0x31, 0x18, 0x00, -0x40, 0x7f, 0x24, 0x03, 0x40, 0x01, 0x9c, 0x00, 0x04, 0x6f, 0x80, 0x07, 0x46, 0x11, 0xfa, 0x27, -0x40, 0xa0, 0x54, 0x0b, 0x58, 0x10, 0x8c, 0xf8, 0x40, 0xa5, 0x24, 0x00, 0x40, 0x83, 0x04, 0x00, -0x41, 0xc4, 0x90, 0x03, 0x40, 0x24, 0x14, 0x00, 0x41, 0xee, 0x28, 0x03, 0x40, 0x31, 0x78, 0x00, -0x04, 0x6f, 0x80, 0x14, 0x46, 0x0c, 0x4a, 0xc5, 0x40, 0x71, 0xc0, 0x0b, 0x58, 0x00, 0x06, 0x65, -0x40, 0x73, 0xa8, 0x00, 0x40, 0x53, 0x00, 0x00, 0x40, 0x15, 0x24, 0x03, 0x40, 0x82, 0x90, 0x00, -0x41, 0xc0, 0x9c, 0x03, 0x40, 0x24, 0x70, 0x00, 0x04, 0x0f, 0x80, 0x16, 0x41, 0xe1, 0x24, 0x0b, -0x46, 0x3f, 0x42, 0x92, 0x40, 0x2f, 0x1c, 0x00, 0x40, 0x45, 0x28, 0x05, 0x58, 0x31, 0x82, 0x44, -0x40, 0x60, 0x0c, 0x00, 0x40, 0x51, 0x10, 0x04, 0x40, 0x13, 0x24, 0x00, 0x40, 0x82, 0x9c, 0x03, -0x41, 0xc0, 0xa0, 0x00, 0x04, 0x0f, 0x80, 0x0f, 0x41, 0xee, 0x68, 0x0b, 0x46, 0x34, 0x32, 0xaf, -0x41, 0xef, 0x08, 0x00, 0x40, 0x43, 0x9c, 0x05, 0x58, 0x31, 0x8f, 0x97, 0x40, 0x50, 0x0c, 0x00, -0x40, 0x6f, 0x10, 0x04, 0x40, 0x12, 0xa8, 0x00, 0x40, 0x93, 0x08, 0x03, 0x40, 0x80, 0xa4, 0x00, -0x04, 0x3f, 0x80, 0x08, 0x41, 0xc4, 0x58, 0x0b, 0x46, 0x0a, 0xb9, 0x42, 0x40, 0x8e, 0x78, 0x00, -0x40, 0xa1, 0x08, 0x05, 0x58, 0x00, 0x03, 0xa7, 0x40, 0x41, 0x80, 0x00, 0x40, 0x54, 0x28, 0x04, -0x40, 0x62, 0x1c, 0x00, 0x40, 0x12, 0xf8, 0x03, 0x40, 0x93, 0x04, 0x00, 0x04, 0x7f, 0x80, 0x11, -0x41, 0xc4, 0xc4, 0x0b, 0x46, 0x3f, 0xc9, 0x3a, 0x40, 0x9e, 0x20, 0x00, 0x40, 0xaf, 0x78, 0x05, -0x58, 0x31, 0x80, 0x39, 0x40, 0x03, 0x8c, 0x00, 0x40, 0x44, 0xa8, 0x04, 0x40, 0x50, 0x08, 0x00, -0x40, 0x62, 0x20, 0x03, 0x40, 0x12, 0x98, 0x00, 0x04, 0x2f, 0x80, 0x0a, 0x41, 0xc0, 0xac, 0x0b, -0x46, 0x76, 0x55, 0xb5, 0x41, 0xce, 0x24, 0x00, 0x40, 0xa4, 0x20, 0x05, 0x58, 0x73, 0x89, 0xc3, -0x40, 0x31, 0x1c, 0x00, 0x40, 0x0e, 0x28, 0x04, 0x40, 0x41, 0xf8, 0x00, 0x40, 0x50, 0x24, 0x03, -0x40, 0x62, 0x14, 0x00, 0x04, 0x7f, 0x80, 0x13, 0x40, 0x13, 0x68, 0x0b, 0x46, 0x28, 0xf0, 0xcc, -0x40, 0x60, 0xf0, 0x00, 0x40, 0xa4, 0xa4, 0x05, 0x58, 0x21, 0x0c, 0x92, 0x40, 0x33, 0x88, 0x00, -0x40, 0x03, 0x28, 0x04, 0x41, 0xe1, 0xa0, 0x00, 0x40, 0x40, 0x70, 0x03, 0x40, 0x5f, 0x10, 0x00, -0x04, 0x7f, 0x80, 0x0c, 0x40, 0x12, 0xd8, 0x0b, 0x46, 0xaf, 0xfe, 0xff, 0x40, 0x50, 0x98, 0x00, -0x40, 0x8e, 0x70, 0x05, 0x58, 0xa5, 0x04, 0x7d, 0x40, 0x23, 0xa8, 0x00, 0x40, 0x32, 0xa0, 0x04, -0x40, 0x01, 0x24, 0x00, 0x41, 0xe1, 0x98, 0x03, 0x40, 0x40, 0x78, 0x00, 0x04, 0xaf, 0x80, 0x15, -0x40, 0x12, 0x44, 0x0b, 0x46, 0x78, 0x58, 0x45, 0x40, 0x40, 0x94, 0x00, 0x40, 0x93, 0x18, 0x05, -0x58, 0x73, 0x8d, 0xd1, 0x40, 0x85, 0x1c, 0x00, 0x40, 0x22, 0x24, 0x04, 0x40, 0x34, 0x70, 0x00, -0x40, 0x01, 0x14, 0x03, 0x41, 0xe1, 0x80, 0x00, 0x04, 0x1f, 0x80, 0x0e, 0x41, 0xcf, 0x2c, 0x0b, -0x46, 0x76, 0xfa, 0x87, 0x41, 0xce, 0x10, 0x00, 0x40, 0xa2, 0x94, 0x05, 0x58, 0x73, 0x8e, 0x4f, -0x40, 0x90, 0x9c, 0x00, 0x40, 0x8e, 0x28, 0x04, 0x40, 0x24, 0x98, 0x00, 0x40, 0x04, 0x10, 0x03, -0x41, 0xe1, 0x00, 0x00, 0x04, 0x7f, 0x80, 0x07, 0x40, 0x3f, 0x68, 0x0b, 0x46, 0x1f, 0xe2, 0xce, -0x40, 0x21, 0xf0, 0x00, 0x40, 0xa2, 0x10, 0x05, 0x58, 0x10, 0x86, 0xe0, 0x40, 0x93, 0x84, 0x00, -0x40, 0x61, 0x28, 0x04, 0x40, 0x84, 0x94, 0x00, 0x40, 0x03, 0x70, 0x03, 0x41, 0xe4, 0x00, 0x00, -0x04, 0x5f, 0x80, 0x10, 0x40, 0x3f, 0x58, 0x0b, 0x46, 0x1a, 0x30, 0x14, 0x40, 0x81, 0x88, 0x00, -0x40, 0x7e, 0x70, 0x05, 0x58, 0x10, 0x83, 0x14, 0x40, 0x92, 0x84, 0x00, 0x40, 0xa4, 0x1c, 0x04, -0x40, 0x64, 0x90, 0x00, 0x40, 0x05, 0x08, 0x03, 0x41, 0xe3, 0x00, 0x00, 0x04, 0x1f, 0x80, 0x09, -0x40, 0x4f, 0x44, 0x0b, 0x46, 0x34, 0xe0, 0x81, 0x40, 0x62, 0x20, 0x00, 0x40, 0x71, 0x08, 0x05, -0x58, 0x31, 0x81, 0xa1, 0x40, 0x90, 0x8c, 0x00, 0x40, 0x53, 0x1c, 0x04, 0x40, 0x04, 0xf0, 0x00, -0x40, 0xa2, 0xa0, 0x03, 0x41, 0xe0, 0x28, 0x00, 0x04, 0x9f, 0x80, 0x12, 0x40, 0x4f, 0x2c, 0x0b, -0x46, 0x1f, 0x75, 0x37, 0x40, 0x42, 0x18, 0x00, 0x40, 0x74, 0x20, 0x05, 0x58, 0x10, 0x8e, 0x82, -0x41, 0xc4, 0x84, 0x00, 0x40, 0x32, 0x1c, 0x04, 0x40, 0x5e, 0x08, 0x00, 0x40, 0xa1, 0x98, 0x03, -0x40, 0x02, 0xa8, 0x00, 0x04, 0x9f, 0x80, 0x0b, 0x41, 0xe0, 0x68, 0x0b, 0x46, 0x1b, 0xd3, 0xaf, -0x41, 0xef, 0x10, 0x00, 0x40, 0x73, 0x18, 0x05, 0x58, 0x10, 0x82, 0x35, 0x40, 0x3f, 0x1c, 0x04, -0x41, 0xc4, 0x84, 0x00, 0x40, 0x21, 0x90, 0x03, 0x41, 0xce, 0x20, 0x00, 0x40, 0xae, 0x08, 0x00, -0x04, 0x5f, 0x80, 0x14, 0x40, 0xa5, 0x58, 0x0b, 0x46, 0x02, 0xad, 0x7d, 0x40, 0x25, 0x78, 0x00, -0x40, 0x12, 0x10, 0x05, 0x58, 0x00, 0x02, 0xbb, 0x40, 0x71, 0x04, 0x04, 0x40, 0x92, 0x80, 0x00, -0x40, 0x94, 0x98, 0x00, 0x40, 0x63, 0xf8, 0x03, 0x40, 0x34, 0x98, 0x00, 0x04, 0x1f, 0x80, 0x0d, -0x40, 0x81, 0xc4, 0x0b, 0x46, 0x5e, 0xb8, 0x6d, 0x40, 0x34, 0x08, 0x00, 0x40, 0x0f, 0x78, 0x05, -0x58, 0x52, 0x83, 0x91, 0x40, 0x80, 0x94, 0x00, 0x40, 0x71, 0x80, 0x04, 0x04, 0x5f, 0x80, 0x02, -0x04, 0x1f, 0x80, 0x01, 0x40, 0x64, 0x10, 0x00, 0x40, 0x73, 0x88, 0x03, 0x40, 0x43, 0x1c, 0x00, -0x40, 0x61, 0x94, 0x00, 0x40, 0x5f, 0x04, 0x00, 0x05, 0xef, 0x80, 0x03, 0x04, 0x1f, 0x80, 0x04, -0x40, 0x3f, 0x0c, 0x00, 0x40, 0x02, 0x2c, 0x0b, 0x05, 0xef, 0x80, 0x05, 0x40, 0x43, 0x00, 0x00, -0x40, 0x00, 0x88, 0x00, 0x14, 0x5f, 0x00, 0x00, 0x14, 0x4f, 0x00, 0x01, 0x14, 0x3f, 0x00, 0x02, -0x14, 0x0f, 0x00, 0x03, 0x44, 0x10, 0x00, 0x00, 0x04, 0x0f, 0x80, 0x17, 0x44, 0x20, 0x00, 0x40, -0x49, 0xf7, 0xac, 0xac, 0x04, 0x2f, 0x80, 0x05, 0x44, 0x10, 0x00, 0x00, 0x14, 0x11, 0x00, 0x16, -0x51, 0xff, 0x80, 0xa4, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, -0x51, 0xff, 0xff, 0xf8, 0x04, 0x20, 0x00, 0x16, 0x50, 0x70, 0x00, 0x18, 0x58, 0x60, 0x00, 0x00, +0x58, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x08, 0x04, 0x10, 0x80, 0x01, 0x04, 0x00, 0x00, 0x00, +0x49, 0xff, 0xff, 0x76, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x3e, 0x0f, 0xf7, 0x80, 0x49, 0xff, 0xfb, 0x78, +0x2e, 0x17, 0xe3, 0x46, 0x44, 0x50, 0x00, 0x01, 0x2e, 0x07, 0xf8, 0x5d, 0x4c, 0x12, 0x80, 0x08, +0x44, 0x40, 0x00, 0x00, 0x40, 0x02, 0x00, 0x06, 0x49, 0x00, 0x12, 0x1a, 0x2e, 0x57, 0xe1, 0x24, +0x45, 0xe0, 0x03, 0xe8, 0x42, 0x12, 0xf8, 0x24, 0x3e, 0x0f, 0xf7, 0x80, 0x49, 0xff, 0xfc, 0x50, +0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, +0x51, 0xff, 0xff, 0xfc, 0x44, 0x00, 0x00, 0x0f, 0x49, 0xff, 0xc1, 0x1c, 0x44, 0x00, 0x00, 0x0f, +0x49, 0xff, 0xc1, 0x70, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0xc1, 0x84, 0x3e, 0x0f, 0xf7, 0x80, +0x3e, 0x1f, 0x37, 0xbc, 0x44, 0x20, 0x00, 0x00, 0x49, 0xff, 0xfb, 0x22, 0x44, 0x10, 0x00, 0x00, +0x44, 0x20, 0x00, 0xb8, 0x3e, 0x0f, 0xf7, 0xa8, 0x49, 0xf7, 0xbd, 0x30, 0x44, 0x10, 0x00, 0x00, +0x3e, 0x17, 0xe2, 0x1c, 0x46, 0x08, 0x00, 0x23, 0x58, 0x00, 0x00, 0x80, 0x04, 0x40, 0x00, 0x00, +0x44, 0x5f, 0xf8, 0xff, 0x40, 0x32, 0x14, 0x02, 0x14, 0x30, 0x00, 0x00, 0x04, 0x20, 0x00, 0x00, +0x58, 0x11, 0x02, 0x00, 0x14, 0x10, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, 0x51, 0xff, 0xff, 0xf8, 0x01, 0xe0, 0x00, 0x00, +0x3e, 0x6f, 0xf7, 0xa8, 0x11, 0xe3, 0x00, 0x00, 0x58, 0x70, 0x00, 0x00, 0x00, 0x80, 0x00, 0x4c, +0x50, 0x10, 0x00, 0x44, 0x10, 0x83, 0x00, 0x01, 0x00, 0x50, 0x00, 0x50, 0x10, 0x53, 0x00, 0x03, +0x00, 0x40, 0x00, 0x54, 0x10, 0x43, 0x00, 0x06, 0x00, 0x20, 0x00, 0x58, 0x50, 0x03, 0x00, 0x0c, +0x10, 0x23, 0x00, 0x07, 0x44, 0x20, 0x00, 0x08, 0x00, 0x33, 0x80, 0x5c, 0x10, 0x33, 0x00, 0x0a, +0x49, 0xf7, 0xbc, 0xd8, 0x50, 0x13, 0x80, 0x04, 0x44, 0x20, 0x00, 0x40, 0x50, 0x03, 0x00, 0x14, +0x49, 0xf7, 0xbc, 0xd0, 0x49, 0xff, 0xc9, 0x04, 0x46, 0x06, 0x01, 0x60, 0x46, 0x10, 0x1f, 0xf8, +0x58, 0x10, 0x80, 0x7f, 0x14, 0x10, 0x00, 0x20, 0x50, 0x7f, 0x80, 0x07, 0x00, 0x03, 0x00, 0x06, +0x58, 0x13, 0x80, 0x00, 0x3e, 0x2f, 0xf7, 0xa0, 0x49, 0xff, 0xbc, 0xae, 0x00, 0x03, 0x00, 0x07, +0x58, 0x13, 0x80, 0x00, 0x3e, 0x2f, 0xf7, 0x98, 0x49, 0xff, 0xb6, 0x10, 0x44, 0x00, 0x00, 0x00, +0x51, 0xff, 0x80, 0x08, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, +0x04, 0x60, 0x00, 0x02, 0x44, 0x10, 0x00, 0x03, 0x04, 0x83, 0x00, 0x08, 0x58, 0x70, 0x00, 0x00, +0x50, 0x03, 0x00, 0x24, 0x4c, 0x80, 0x80, 0x12, 0x44, 0x50, 0x00, 0x05, 0x4c, 0x82, 0x80, 0x12, +0x4e, 0x82, 0x00, 0x06, 0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x00, +0x49, 0xff, 0xfe, 0x8e, 0x48, 0x00, 0x00, 0x08, 0x49, 0xff, 0xff, 0x8e, 0x48, 0x00, 0x00, 0x04, +0x49, 0xff, 0xff, 0x14, 0x00, 0x33, 0x00, 0x0b, 0x54, 0x11, 0x80, 0x01, 0x4e, 0x13, 0x00, 0x06, +0x58, 0x00, 0x80, 0x00, 0x48, 0x00, 0x00, 0x2c, 0x01, 0xe3, 0x00, 0x07, 0x50, 0x43, 0x00, 0x0c, +0x44, 0x50, 0x00, 0x00, 0x44, 0x30, 0x00, 0x18, 0x44, 0x2f, 0xff, 0xed, 0x58, 0x11, 0x80, 0x00, +0x14, 0x52, 0x00, 0x02, 0x14, 0x82, 0x00, 0x00, 0x14, 0x02, 0x00, 0x01, 0x12, 0x33, 0x00, 0x00, +0x10, 0x23, 0x00, 0x04, 0x10, 0x13, 0x00, 0x08, 0x11, 0xe3, 0x00, 0x05, 0x44, 0x50, 0x00, 0x01, +0x04, 0x43, 0x80, 0x02, 0x44, 0x0f, 0xe0, 0x00, 0x10, 0x53, 0x80, 0x10, 0x12, 0x02, 0x00, 0x01, +0x58, 0x03, 0x80, 0x00, 0x49, 0xff, 0xd6, 0x44, 0x44, 0x00, 0x00, 0x01, 0x3a, 0x6f, 0xa0, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x00, 0x30, 0x80, 0x01, +0x44, 0x50, 0x00, 0x03, 0x4c, 0x32, 0xc0, 0x06, 0x02, 0x20, 0x00, 0x09, 0x49, 0x00, 0x17, 0x2e, +0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0x94, 0x54, 0x70, 0x80, 0xff, 0x40, 0x13, 0x80, 0x10, +0x58, 0x90, 0x00, 0x00, 0x55, 0xc1, 0x00, 0xff, 0x4e, 0x14, 0x00, 0x06, 0x44, 0x00, 0xff, 0xff, +0x48, 0x00, 0x00, 0x4c, 0x50, 0x6f, 0x80, 0x5c, 0x50, 0xaf, 0x80, 0x0c, 0x50, 0x8f, 0x80, 0x50, +0x58, 0x33, 0x00, 0x00, 0x58, 0x24, 0x00, 0x00, 0x58, 0x15, 0x00, 0x00, 0x58, 0x03, 0x80, 0x00, +0x14, 0x8f, 0x80, 0x01, 0x49, 0xff, 0xbe, 0x30, 0x58, 0x14, 0x80, 0x00, 0x44, 0x20, 0x00, 0x10, +0x50, 0x0f, 0x80, 0x30, 0x49, 0xf7, 0xbc, 0x0e, 0x50, 0x14, 0x80, 0x10, 0x44, 0x20, 0x00, 0x08, +0x50, 0x0f, 0x80, 0x40, 0x49, 0xf7, 0xbc, 0x06, 0x50, 0x14, 0x80, 0x18, 0x44, 0x20, 0x00, 0x08, +0x50, 0x0f, 0x80, 0x48, 0x49, 0xf7, 0xbb, 0xfe, 0x04, 0x2f, 0x80, 0x01, 0x44, 0x50, 0x00, 0x01, +0x58, 0x15, 0x00, 0x00, 0x58, 0x33, 0x00, 0x00, 0x58, 0x03, 0x80, 0x00, 0x10, 0x55, 0x00, 0x18, +0x10, 0x53, 0x00, 0x01, 0x10, 0x53, 0x00, 0x03, 0x11, 0xc3, 0x00, 0x07, 0x49, 0xff, 0xb6, 0x06, +0x00, 0x13, 0x00, 0x09, 0x58, 0x03, 0x80, 0x00, 0x58, 0x2e, 0x00, 0x00, 0x50, 0x3f, 0x80, 0x30, +0x49, 0xff, 0xbd, 0x5e, 0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x6c, 0x3a, 0x6f, 0xaa, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x3e, 0x7f, 0xf7, 0xa8, +0x04, 0x63, 0x80, 0x29, 0x4e, 0x62, 0x00, 0x44, 0x44, 0x00, 0x00, 0x01, 0x4c, 0x60, 0x40, 0x0a, +0x44, 0x00, 0x00, 0x03, 0x49, 0xf7, 0xdd, 0x0c, 0x10, 0x63, 0x80, 0xb6, 0x48, 0x00, 0x00, 0x38, +0x44, 0x10, 0x00, 0x02, 0x4c, 0x60, 0xc0, 0x34, 0x04, 0x33, 0x80, 0x2c, 0x54, 0x21, 0x80, 0x04, +0x4e, 0x22, 0x00, 0x08, 0x46, 0x08, 0x00, 0x23, 0x58, 0x00, 0x00, 0x24, 0x48, 0x00, 0x00, 0x06, +0x46, 0x08, 0x00, 0x23, 0x58, 0x00, 0x00, 0x28, 0x04, 0x50, 0x00, 0x00, 0x58, 0x42, 0x80, 0x04, +0x14, 0x40, 0x00, 0x00, 0x3c, 0x0d, 0xfe, 0x15, 0x4e, 0x02, 0x00, 0x1a, 0x49, 0xff, 0xc0, 0x2c, +0x3c, 0x1d, 0xfe, 0x16, 0x54, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x08, 0x46, 0x08, 0x00, 0x23, +0x58, 0x00, 0x00, 0x28, 0x48, 0x00, 0x00, 0x06, 0x46, 0x08, 0x00, 0x23, 0x58, 0x00, 0x00, 0x24, +0x04, 0x20, 0x00, 0x00, 0x59, 0xe1, 0x00, 0x04, 0x15, 0xe0, 0x00, 0x00, 0x51, 0xff, 0x80, 0x04, +0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa8, 0xbc, 0x51, 0xff, 0xff, 0xf8, +0x04, 0x10, 0x00, 0x0b, 0x04, 0x30, 0x00, 0x06, 0x0a, 0x80, 0x80, 0x05, 0x58, 0x60, 0x00, 0x00, +0x3e, 0x0f, 0xf7, 0xa0, 0x44, 0x20, 0x00, 0x06, 0x00, 0xa1, 0x80, 0x04, 0x04, 0x91, 0x80, 0x03, +0x49, 0xf7, 0xbc, 0x1e, 0x4e, 0x03, 0x00, 0xa0, 0x04, 0x03, 0x00, 0x0c, 0x3e, 0x1f, 0xe1, 0x28, +0x44, 0x20, 0x00, 0x06, 0x49, 0xf7, 0xbc, 0x14, 0x4e, 0x02, 0x00, 0x0c, 0x04, 0x03, 0x00, 0x0c, +0x3e, 0x1f, 0xe1, 0x30, 0x44, 0x20, 0x00, 0x06, 0x49, 0xf7, 0xbc, 0x0a, 0x4e, 0x03, 0x00, 0x8c, +0x04, 0x53, 0x00, 0x0c, 0x02, 0x43, 0x00, 0x09, 0x50, 0x22, 0x80, 0x06, 0x50, 0x02, 0x7f, 0xfa, +0x12, 0x03, 0x00, 0x09, 0x14, 0x23, 0x00, 0x0c, 0x2e, 0x17, 0xf8, 0x5d, 0x4e, 0x12, 0x00, 0x1a, +0x2e, 0x77, 0xf8, 0x5c, 0x4e, 0x72, 0x00, 0x16, 0x55, 0xe5, 0x00, 0x02, 0x4f, 0xe2, 0x00, 0x12, +0x54, 0x34, 0x24, 0x00, 0x44, 0x80, 0x20, 0x00, 0x4c, 0x34, 0x40, 0x08, 0x58, 0x03, 0x00, 0x00, +0x49, 0xff, 0xfb, 0x9a, 0x48, 0x00, 0x00, 0x06, 0x44, 0x10, 0x00, 0x02, 0x3e, 0x17, 0xe2, 0x1c, +0x04, 0x83, 0x00, 0x0c, 0x02, 0x53, 0x00, 0x09, 0x50, 0x74, 0x00, 0x02, 0x50, 0x42, 0xff, 0xfe, +0x54, 0x24, 0xa0, 0x00, 0x12, 0x43, 0x00, 0x09, 0x14, 0x73, 0x00, 0x0c, 0x4e, 0x22, 0x00, 0x08, +0x58, 0x13, 0x80, 0x00, 0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x20, 0x54, 0xa5, 0x00, 0x04, +0x4e, 0xa2, 0x00, 0x20, 0x00, 0x03, 0x00, 0x40, 0x50, 0x1f, 0x80, 0x07, 0x58, 0x2f, 0x80, 0x00, +0x49, 0xff, 0xb4, 0x6c, 0x58, 0x9f, 0x80, 0x00, 0x58, 0x80, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x3c, +0x58, 0x03, 0x00, 0x00, 0x58, 0x1f, 0x80, 0x00, 0x49, 0xff, 0xfc, 0xba, 0x4e, 0x02, 0x00, 0x34, +0x58, 0x04, 0x00, 0x00, 0x58, 0x13, 0x80, 0x00, 0x49, 0xff, 0xff, 0x26, 0x48, 0x00, 0x00, 0x2c, +0x55, 0xe4, 0x98, 0x00, 0x40, 0x0f, 0x2c, 0x09, 0x4e, 0x02, 0x00, 0x0e, 0x44, 0x30, 0x00, 0x01, +0x4c, 0x01, 0xc0, 0x22, 0x58, 0x03, 0x00, 0x00, 0x58, 0x13, 0x80, 0x00, 0x49, 0xff, 0xfe, 0x9c, +0x48, 0x00, 0x00, 0x1a, 0x40, 0x94, 0x8c, 0x08, 0x40, 0x94, 0xd8, 0x09, 0x4e, 0x92, 0x00, 0x14, +0x58, 0x04, 0x00, 0x00, 0x3e, 0x1f, 0xe1, 0x38, 0x44, 0x20, 0x00, 0x02, 0x49, 0xf7, 0xbb, 0x88, +0x4e, 0x02, 0x00, 0x0a, 0x58, 0x04, 0x00, 0x00, 0x3e, 0x1f, 0xe1, 0x3c, 0x44, 0x20, 0x00, 0x02, +0x49, 0xf7, 0xbb, 0x7e, 0x51, 0xff, 0x80, 0x08, 0x3a, 0x6f, 0xa8, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xec, 0x50, 0x31, 0x00, 0x10, 0x40, 0x10, 0x88, 0x09, +0x58, 0x41, 0x80, 0x00, 0x44, 0x50, 0x00, 0x00, 0x48, 0x00, 0x00, 0x18, 0x00, 0x60, 0x00, 0x00, +0x50, 0x52, 0x80, 0x01, 0x10, 0x62, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x01, 0x10, 0xa2, 0x00, 0x3c, +0x01, 0xc0, 0x00, 0x02, 0x11, 0xc2, 0x00, 0x78, 0x00, 0x60, 0x00, 0x03, 0x50, 0x00, 0x00, 0x04, +0x10, 0x62, 0x00, 0xb4, 0x50, 0x42, 0x00, 0x01, 0x40, 0xf2, 0x84, 0x06, 0x4e, 0xf3, 0xff, 0xe8, +0x50, 0x50, 0x80, 0x07, 0x40, 0x02, 0x88, 0x08, 0x50, 0x40, 0x80, 0x10, 0x14, 0x0f, 0x80, 0x03, +0x40, 0x21, 0x10, 0x00, 0x58, 0x90, 0x80, 0x00, 0x3e, 0x0f, 0xcd, 0x94, 0x3f, 0xef, 0xcd, 0x68, +0x48, 0x00, 0x00, 0x60, 0x40, 0xa4, 0x85, 0x17, 0x00, 0x71, 0x7f, 0xff, 0x00, 0x61, 0x00, 0x3b, +0x00, 0x51, 0x00, 0x77, 0x00, 0x41, 0x00, 0xb3, 0x4e, 0x83, 0x00, 0x26, 0x38, 0x8f, 0x2a, 0x02, +0x38, 0xa0, 0x14, 0x00, 0x38, 0x50, 0x10, 0x00, 0x10, 0xaf, 0x80, 0x00, 0x38, 0x40, 0x1c, 0x00, +0x01, 0xcf, 0x80, 0x00, 0x38, 0x70, 0x18, 0x00, 0x40, 0xa4, 0x20, 0x09, 0x40, 0x64, 0x40, 0x09, +0x40, 0x63, 0x70, 0x03, 0x40, 0x55, 0x14, 0x03, 0x41, 0xc4, 0x10, 0x03, 0x40, 0x84, 0x60, 0x09, +0x40, 0x74, 0x1c, 0x03, 0x54, 0x63, 0x00, 0xff, 0x54, 0x52, 0x80, 0xff, 0x54, 0x4e, 0x00, 0xff, +0x48, 0x00, 0x00, 0x12, 0x5c, 0xf0, 0x80, 0x07, 0x4e, 0xf3, 0x00, 0x0e, 0x44, 0xa0, 0x00, 0x04, +0x4c, 0x85, 0x40, 0x0a, 0x38, 0x60, 0x18, 0x00, 0x38, 0x50, 0x14, 0x00, 0x38, 0x40, 0x10, 0x00, +0x38, 0x70, 0x1c, 0x00, 0x00, 0x81, 0x80, 0x00, 0x50, 0x94, 0x80, 0x01, 0x40, 0x73, 0xa0, 0x03, +0x10, 0x71, 0x00, 0x00, 0x00, 0x71, 0x80, 0x3c, 0x40, 0x63, 0x1c, 0x03, 0x10, 0x61, 0x00, 0x3c, +0x00, 0x61, 0x80, 0x78, 0x41, 0xc2, 0x98, 0x03, 0x11, 0xc1, 0x00, 0x78, 0x00, 0x51, 0x80, 0xb4, +0x50, 0x31, 0x80, 0x01, 0x40, 0x42, 0x14, 0x03, 0x10, 0x41, 0x00, 0xb4, 0x50, 0x21, 0x00, 0x01, +0x05, 0xcf, 0x80, 0x03, 0x40, 0xf4, 0xf0, 0x06, 0x4e, 0xf3, 0xff, 0x9e, 0x51, 0xff, 0x80, 0x14, +0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xfe, 0xbc, +0x14, 0x5f, 0x80, 0x0c, 0x58, 0x61, 0x80, 0x00, 0x04, 0x72, 0x80, 0x00, 0x14, 0x4f, 0x80, 0x0e, +0x5c, 0xf3, 0x80, 0x10, 0x4e, 0xf3, 0x02, 0x58, 0x44, 0x30, 0x00, 0x10, 0x4c, 0x61, 0x80, 0x0a, +0x44, 0x40, 0x00, 0x18, 0x4c, 0x62, 0x00, 0x06, 0x40, 0x51, 0x84, 0x08, 0x4c, 0x62, 0xc2, 0x4c, +0x58, 0x71, 0x80, 0x00, 0x4c, 0x13, 0xc2, 0x48, 0x44, 0x10, 0x00, 0x00, 0x50, 0x9f, 0x80, 0x40, +0x48, 0x00, 0x00, 0x10, 0x08, 0x82, 0x00, 0x04, 0x50, 0x31, 0x80, 0x01, 0x44, 0x70, 0x00, 0x04, +0x18, 0x82, 0x80, 0x01, 0x4c, 0x33, 0xff, 0xf8, 0x50, 0x10, 0x80, 0x01, 0x4c, 0x11, 0x80, 0x0c, +0x40, 0xa0, 0x88, 0x08, 0x40, 0x54, 0xa8, 0x00, 0x40, 0x40, 0x04, 0x00, 0x44, 0x30, 0x00, 0x00, +0x48, 0xff, 0xff, 0xea, 0x58, 0x01, 0x00, 0x00, 0x58, 0x13, 0x00, 0x00, 0x50, 0x2f, 0x80, 0x40, +0x49, 0xff, 0xff, 0x18, 0x50, 0x4f, 0x80, 0x41, 0x40, 0x63, 0x08, 0x09, 0x14, 0x4f, 0x80, 0x04, +0x50, 0x7f, 0x80, 0x40, 0x50, 0x1f, 0x80, 0x42, 0x50, 0xaf, 0x80, 0x43, 0x50, 0x53, 0x00, 0x0a, +0x50, 0x9f, 0x80, 0x50, 0x40, 0x02, 0x88, 0x08, 0x14, 0x1f, 0x80, 0x06, 0x14, 0xaf, 0x80, 0x05, +0x14, 0x7f, 0x80, 0x0d, 0x04, 0x8f, 0x80, 0x04, 0x14, 0x9f, 0x80, 0x01, 0x40, 0x03, 0x80, 0x00, +0x58, 0x90, 0x80, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x43, 0x80, 0x00, 0x40, 0x31, 0x10, 0x03, +0x18, 0x33, 0x80, 0x04, 0x00, 0x10, 0x00, 0x01, 0x01, 0xc4, 0x00, 0x00, 0x41, 0xe0, 0xf0, 0x03, +0x19, 0xe4, 0x00, 0x04, 0x05, 0xef, 0x80, 0x01, 0x00, 0x50, 0x00, 0x02, 0x00, 0x44, 0x80, 0x00, +0x40, 0x32, 0x14, 0x03, 0x18, 0x34, 0x80, 0x04, 0x00, 0x10, 0x00, 0x03, 0x00, 0x25, 0x00, 0x00, +0x50, 0x00, 0x00, 0x3c, 0x41, 0xc0, 0x88, 0x03, 0x19, 0xc5, 0x00, 0x04, 0x4c, 0x7f, 0x7f, 0xdc, +0x50, 0x03, 0x00, 0x05, 0x50, 0x7f, 0x80, 0x40, 0x40, 0x90, 0x08, 0x08, 0x50, 0x63, 0x80, 0x04, +0x14, 0x9f, 0x80, 0x08, 0x14, 0x6f, 0x80, 0x0f, 0x48, 0x00, 0x01, 0x26, 0x00, 0x3f, 0x80, 0x49, +0x00, 0x2f, 0x80, 0x45, 0x00, 0x4f, 0x80, 0x4b, 0x01, 0xcf, 0x80, 0x47, 0x00, 0x6f, 0x80, 0x48, +0x00, 0x8f, 0x80, 0x4c, 0x00, 0x9f, 0x80, 0x46, 0x00, 0x7f, 0x80, 0x4a, 0x01, 0xef, 0x80, 0x4d, +0x00, 0x5f, 0x80, 0x4e, 0x00, 0xaf, 0x80, 0x4f, 0x00, 0x1f, 0x80, 0x44, 0x10, 0x2f, 0x80, 0x46, +0x10, 0x4f, 0x80, 0x49, 0x10, 0x3f, 0x80, 0x4b, 0x10, 0x9f, 0x80, 0x47, 0x10, 0x7f, 0x80, 0x48, +0x10, 0x6f, 0x80, 0x4a, 0x11, 0xcf, 0x80, 0x44, 0x11, 0xef, 0x80, 0x4c, 0x10, 0x5f, 0x80, 0x4d, +0x10, 0xaf, 0x80, 0x4e, 0x10, 0x8f, 0x80, 0x4f, 0x04, 0x2f, 0x80, 0x05, 0x04, 0x3f, 0x80, 0x06, +0x04, 0x4f, 0x80, 0x04, 0x10, 0x1f, 0x80, 0x45, 0x50, 0x1f, 0x80, 0x40, 0x00, 0x00, 0x80, 0x00, +0x3e, 0x5f, 0xce, 0x94, 0x38, 0x92, 0x80, 0x00, 0x04, 0x0f, 0x80, 0x01, 0x18, 0x90, 0x80, 0x04, +0x00, 0x72, 0x00, 0x00, 0x38, 0x62, 0x9c, 0x00, 0x18, 0x62, 0x00, 0x04, 0x01, 0xc1, 0x80, 0x00, +0x39, 0xe2, 0xf0, 0x00, 0x19, 0xe1, 0x80, 0x04, 0x00, 0xa1, 0x00, 0x00, 0x38, 0x82, 0xa8, 0x00, +0x18, 0x81, 0x00, 0x04, 0x4c, 0x10, 0x7f, 0xe4, 0x04, 0x4f, 0x80, 0x08, 0x50, 0x5f, 0x80, 0x40, +0x50, 0x32, 0x00, 0x10, 0x40, 0x22, 0x8c, 0x00, 0x04, 0x4f, 0x80, 0x06, 0x04, 0x3f, 0x80, 0x05, +0x04, 0x6f, 0x80, 0x04, 0x00, 0x71, 0x00, 0x00, 0x01, 0xc2, 0x80, 0x00, 0x41, 0xe3, 0xf0, 0x03, +0x19, 0xe2, 0x80, 0x04, 0x00, 0x11, 0x00, 0x01, 0x00, 0xa3, 0x00, 0x00, 0x40, 0x80, 0xa8, 0x03, +0x18, 0x83, 0x00, 0x04, 0x04, 0x8f, 0x80, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x92, 0x00, 0x00, +0x40, 0x70, 0x24, 0x03, 0x18, 0x72, 0x00, 0x04, 0x01, 0xe1, 0x00, 0x03, 0x01, 0xc1, 0x80, 0x00, +0x50, 0x21, 0x00, 0x3c, 0x40, 0xaf, 0x70, 0x03, 0x18, 0xa1, 0x80, 0x04, 0x4c, 0x54, 0x7f, 0xdc, +0x50, 0x3f, 0x80, 0x44, 0x50, 0x6f, 0x80, 0x48, 0x50, 0x5f, 0x80, 0x4c, 0x50, 0x2f, 0x80, 0x40, +0x14, 0x3f, 0x80, 0x0b, 0x14, 0x6f, 0x80, 0x0a, 0x14, 0x5f, 0x80, 0x09, 0x14, 0x2f, 0x80, 0x07, +0x05, 0xcf, 0x80, 0x07, 0x04, 0x4f, 0x80, 0x0b, 0x04, 0x5f, 0x80, 0x0a, 0x04, 0xaf, 0x80, 0x09, +0x00, 0x3e, 0x00, 0x00, 0x01, 0xc2, 0x00, 0x00, 0x00, 0x42, 0x80, 0x00, 0x00, 0x55, 0x00, 0x00, +0x3e, 0x8f, 0xd2, 0x94, 0x3e, 0x1f, 0xd0, 0x94, 0x3e, 0x9f, 0xcf, 0x94, 0x39, 0xe4, 0x0c, 0x00, +0x38, 0x24, 0x94, 0x00, 0x38, 0x60, 0xf0, 0x00, 0x3e, 0x7f, 0xd1, 0x94, 0x38, 0xa3, 0x90, 0x00, +0x58, 0x00, 0x80, 0x00, 0x40, 0x13, 0x78, 0x03, 0x10, 0x2f, 0x80, 0x08, 0x39, 0xe3, 0xf0, 0x00, +0x58, 0x64, 0x80, 0x00, 0x38, 0x70, 0x0c, 0x00, 0x3e, 0x0f, 0xd1, 0x94, 0x38, 0x93, 0x0c, 0x00, +0x38, 0x24, 0x70, 0x00, 0x38, 0x83, 0x70, 0x00, 0x38, 0x60, 0x0c, 0x00, 0x3f, 0xcf, 0xcf, 0x94, +0x40, 0x30, 0xa8, 0x03, 0x3e, 0xaf, 0xd0, 0x94, 0x3e, 0x1f, 0xd2, 0x94, 0x38, 0x0e, 0x10, 0x00, +0x39, 0xc5, 0x10, 0x00, 0x38, 0xa0, 0x90, 0x00, 0x00, 0x1f, 0x80, 0x08, 0x40, 0x21, 0x24, 0x03, +0x40, 0x31, 0x84, 0x03, 0x3e, 0x4f, 0xd1, 0x94, 0x40, 0x14, 0x18, 0x03, 0x3e, 0x9f, 0xd0, 0x94, +0x3e, 0x6f, 0xd2, 0x94, 0x38, 0x83, 0x14, 0x00, 0x38, 0x62, 0x14, 0x00, 0x38, 0x44, 0x94, 0x00, +0x04, 0x9f, 0x80, 0x07, 0x40, 0x51, 0x70, 0x03, 0x18, 0x34, 0x80, 0x01, 0x40, 0x22, 0x98, 0x03, +0x04, 0x6f, 0x80, 0x0b, 0x40, 0x7f, 0x1c, 0x03, 0x14, 0x9f, 0x80, 0x07, 0x40, 0x33, 0x80, 0x03, +0x40, 0x90, 0xa8, 0x03, 0x18, 0x23, 0x00, 0x01, 0x04, 0x7f, 0x80, 0x0a, 0x40, 0x54, 0x90, 0x03, +0x14, 0x6f, 0x80, 0x0b, 0x18, 0x53, 0x80, 0x01, 0x04, 0x1f, 0x80, 0x09, 0x40, 0x01, 0xa0, 0x03, +0x18, 0x00, 0x80, 0x01, 0x04, 0x4f, 0x80, 0x07, 0x04, 0x9f, 0x80, 0x0f, 0x14, 0x7f, 0x80, 0x0a, +0x14, 0x1f, 0x80, 0x09, 0x4c, 0x44, 0xff, 0x7e, 0x04, 0x2f, 0x80, 0x08, 0x50, 0x31, 0x7f, 0xfc, +0x14, 0x3f, 0x80, 0x08, 0x04, 0x9f, 0x80, 0x08, 0x4e, 0x93, 0xfe, 0xda, 0x00, 0x1f, 0x80, 0x47, +0x00, 0x6f, 0x80, 0x46, 0x00, 0x7f, 0x80, 0x4a, 0x00, 0x2f, 0x80, 0x49, 0x00, 0x3f, 0x80, 0x45, +0x00, 0x4f, 0x80, 0x4b, 0x00, 0x9f, 0x80, 0x48, 0x00, 0x5f, 0x80, 0x44, 0x10, 0x6f, 0x80, 0x47, +0x10, 0x7f, 0x80, 0x48, 0x00, 0x6f, 0x80, 0x4e, 0x00, 0x7f, 0x80, 0x4f, 0x10, 0x1f, 0x80, 0x44, +0x00, 0x1f, 0x80, 0x4d, 0x00, 0x0f, 0x80, 0x4c, 0x10, 0x3f, 0x80, 0x46, 0x10, 0x4f, 0x80, 0x49, +0x10, 0x2f, 0x80, 0x4b, 0x10, 0x1f, 0x80, 0x4c, 0x10, 0x9f, 0x80, 0x4a, 0x10, 0x5f, 0x80, 0x45, +0x10, 0x6f, 0x80, 0x4d, 0x10, 0x7f, 0x80, 0x4e, 0x04, 0x1f, 0x80, 0x0d, 0x04, 0x2f, 0x80, 0x04, +0x04, 0x3f, 0x80, 0x05, 0x04, 0x4f, 0x80, 0x06, 0x10, 0x0f, 0x80, 0x4f, 0x3e, 0x0f, 0xce, 0x94, +0x00, 0x50, 0x80, 0x00, 0x38, 0x60, 0x14, 0x00, 0x18, 0x60, 0x80, 0x04, 0x00, 0x71, 0x00, 0x00, +0x38, 0x90, 0x1c, 0x00, 0x18, 0x91, 0x00, 0x04, 0x00, 0x52, 0x00, 0x00, 0x38, 0x60, 0x14, 0x00, +0x04, 0x5f, 0x80, 0x01, 0x18, 0x62, 0x00, 0x04, 0x00, 0x71, 0x80, 0x00, 0x38, 0x90, 0x1c, 0x00, +0x18, 0x91, 0x80, 0x04, 0x4c, 0x12, 0xff, 0xe6, 0x44, 0x00, 0x00, 0x00, 0x50, 0x7f, 0x80, 0x40, +0x44, 0x60, 0x00, 0x3c, 0x48, 0x00, 0x00, 0x1a, 0x08, 0x41, 0x80, 0x01, 0x00, 0x51, 0x00, 0x00, +0x50, 0x10, 0x80, 0x01, 0x40, 0x92, 0x14, 0x03, 0x44, 0x40, 0x00, 0x04, 0x18, 0x91, 0x00, 0x01, +0x4c, 0x12, 0x7f, 0xf4, 0x50, 0x00, 0x00, 0x01, 0x4c, 0x00, 0xc0, 0x08, 0x44, 0x00, 0x00, 0x00, +0x50, 0x6f, 0x80, 0x40, 0x48, 0x00, 0x00, 0x1e, 0x42, 0x30, 0x18, 0x24, 0x40, 0x20, 0x08, 0x08, +0x50, 0x11, 0x80, 0x10, 0x40, 0x33, 0x84, 0x00, 0x40, 0x23, 0x88, 0x00, 0x44, 0x10, 0x00, 0x00, +0x48, 0xff, 0xff, 0xdc, 0x08, 0x41, 0x80, 0x01, 0x50, 0x10, 0x80, 0x01, 0x44, 0x90, 0x00, 0x04, +0x18, 0x41, 0x00, 0x04, 0x4c, 0x14, 0xff, 0xf8, 0x50, 0x00, 0x00, 0x01, 0x4c, 0x00, 0x80, 0x0e, +0x40, 0x70, 0x08, 0x08, 0x40, 0x33, 0x1c, 0x00, 0x04, 0x7f, 0x80, 0x0e, 0x44, 0x10, 0x00, 0x00, +0x40, 0x23, 0x80, 0x00, 0x48, 0xff, 0xff, 0xe8, 0x04, 0x9f, 0x80, 0x0c, 0x44, 0x00, 0x00, 0x10, +0x14, 0x04, 0x80, 0x00, 0x51, 0xff, 0x81, 0x44, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0x9c, 0x58, 0x80, 0x00, 0x00, 0x44, 0x00, 0x00, 0x10, +0x14, 0x3f, 0x80, 0x03, 0x14, 0x2f, 0x80, 0x08, 0x14, 0x4f, 0x80, 0x09, 0x14, 0x5f, 0x80, 0x0a, +0x4c, 0x30, 0x00, 0x0e, 0x44, 0x20, 0x00, 0x18, 0x4c, 0x31, 0x00, 0x0a, 0x41, 0xe0, 0x04, 0x08, +0x4c, 0x3f, 0x00, 0x06, 0x44, 0x0f, 0xff, 0xff, 0x48, 0x00, 0x00, 0xc2, 0x44, 0x60, 0x00, 0x00, +0x50, 0x10, 0xff, 0xf8, 0x58, 0x03, 0x00, 0x00, 0x14, 0x1f, 0x80, 0x01, 0x14, 0x6f, 0x80, 0x17, +0x49, 0xff, 0xcb, 0xdc, 0x14, 0x0f, 0x80, 0x02, 0x4e, 0x03, 0x00, 0x06, 0x44, 0x0f, 0xff, 0xfe, +0x48, 0x00, 0x00, 0xae, 0x50, 0x0f, 0x80, 0x54, 0x58, 0x14, 0x00, 0x00, 0x44, 0x20, 0x00, 0x08, +0x49, 0xf7, 0xb8, 0x06, 0x04, 0x2f, 0x80, 0x01, 0x04, 0x0f, 0x80, 0x02, 0x40, 0x91, 0x0c, 0x09, +0x50, 0x14, 0x00, 0x08, 0x49, 0xf7, 0xb7, 0xfc, 0x44, 0x70, 0x00, 0x05, 0x54, 0x54, 0x80, 0xff, +0x58, 0x34, 0x80, 0x00, 0x42, 0x32, 0x9c, 0x73, 0x40, 0x04, 0x8c, 0x08, 0x05, 0xef, 0x80, 0x02, +0x50, 0x10, 0x7f, 0xf8, 0x52, 0x42, 0x80, 0x00, 0x54, 0x82, 0x00, 0xff, 0x55, 0xc1, 0x80, 0xff, +0x40, 0xaf, 0x04, 0x00, 0x50, 0x64, 0xff, 0xff, 0x14, 0x8f, 0x80, 0x07, 0x15, 0xcf, 0x80, 0x04, +0x14, 0x7f, 0x80, 0x05, 0x14, 0xaf, 0x80, 0x0b, 0x14, 0x6f, 0x80, 0x06, 0x04, 0x6f, 0x80, 0x06, +0x04, 0xaf, 0x80, 0x0b, 0x05, 0xcf, 0x80, 0x04, 0x44, 0x90, 0x22, 0xac, 0x50, 0x8f, 0x80, 0x5c, +0x50, 0x7f, 0x80, 0x4c, 0x48, 0x00, 0x00, 0x3c, 0x00, 0x40, 0x80, 0x07, 0x50, 0x63, 0x7f, 0xff, +0x40, 0x3e, 0x10, 0x03, 0x10, 0x30, 0x80, 0x07, 0x4b, 0xe0, 0x24, 0x01, 0x58, 0x15, 0x00, 0x00, +0x44, 0x20, 0x00, 0x08, 0x50, 0x0f, 0x80, 0x3c, 0x4b, 0xe0, 0x24, 0x01, 0x04, 0x3f, 0x80, 0x03, +0x3c, 0x1d, 0xf3, 0x59, 0x04, 0x2f, 0x80, 0x08, 0x45, 0xe0, 0x00, 0x10, 0x50, 0x4f, 0x80, 0x44, +0x58, 0x54, 0x00, 0x00, 0x50, 0x0f, 0x80, 0x34, 0x15, 0xef, 0x80, 0x17, 0x49, 0xff, 0xfc, 0xfe, +0x50, 0x1f, 0x80, 0x44, 0x44, 0x20, 0x00, 0x08, 0x50, 0x0f, 0x80, 0x54, 0x4b, 0xe0, 0x24, 0x01, +0x58, 0x05, 0x00, 0x00, 0x44, 0x20, 0x00, 0x08, 0x58, 0x13, 0x80, 0x00, 0x4b, 0xe0, 0x24, 0x01, +0x50, 0x2e, 0x7f, 0xff, 0x55, 0xc1, 0x00, 0xff, 0x50, 0xa5, 0x7f, 0xf8, 0x44, 0x20, 0x00, 0x08, +0x50, 0x0f, 0x80, 0x34, 0x50, 0x1f, 0x80, 0x54, 0x4e, 0x64, 0xff, 0xc0, 0x05, 0xef, 0x80, 0x04, +0x04, 0x4f, 0x80, 0x07, 0x04, 0x2f, 0x80, 0x05, 0x40, 0x3f, 0x10, 0x00, 0x50, 0x51, 0x7f, 0xff, +0x54, 0x01, 0x80, 0xff, 0x44, 0x1f, 0xff, 0xff, 0x14, 0x5f, 0x80, 0x05, 0x14, 0x0f, 0x80, 0x04, +0x4c, 0x50, 0xff, 0x9e, 0x04, 0x5f, 0x80, 0x01, 0x04, 0x1f, 0x80, 0x0a, 0x14, 0x50, 0x80, 0x00, +0x04, 0x2f, 0x80, 0x01, 0x04, 0x1f, 0x80, 0x02, 0x04, 0x0f, 0x80, 0x09, 0x49, 0xf7, 0xb7, 0x68, +0x04, 0x0f, 0x80, 0x02, 0x49, 0xff, 0xca, 0x5a, 0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x64, +0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0x3c, 0x44, 0x30, 0x00, 0x00, +0x50, 0x50, 0x00, 0x08, 0x14, 0x30, 0x00, 0x00, 0x14, 0x30, 0x00, 0x01, 0x58, 0x42, 0x80, 0x00, +0x18, 0x32, 0x00, 0x01, 0x44, 0x60, 0x01, 0x00, 0x50, 0x31, 0x80, 0x01, 0x4c, 0x33, 0x7f, 0xfa, +0x44, 0x40, 0x00, 0x00, 0x58, 0x32, 0x00, 0x00, 0x40, 0x71, 0x88, 0xd7, 0x00, 0x72, 0x80, 0x00, +0x50, 0x31, 0x80, 0x01, 0x40, 0x82, 0x1c, 0x00, 0x38, 0x60, 0x98, 0x00, 0x40, 0x44, 0x18, 0x00, +0x54, 0x42, 0x00, 0xff, 0x40, 0x80, 0x10, 0x00, 0x50, 0x64, 0x00, 0x08, 0x00, 0x83, 0x00, 0x00, +0x18, 0x82, 0x80, 0x01, 0x10, 0x73, 0x00, 0x00, 0x44, 0x60, 0x01, 0x00, 0x4c, 0x33, 0x7f, 0xe6, +0x3a, 0x6f, 0xa0, 0x04, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0x3c, 0x44, 0x40, 0x00, 0x00, +0x48, 0x00, 0x00, 0x32, 0x04, 0x80, 0x00, 0x00, 0x50, 0x74, 0x00, 0x01, 0x54, 0x63, 0x80, 0xff, +0x38, 0x62, 0x98, 0x0e, 0x50, 0x52, 0x80, 0x08, 0x00, 0x62, 0x80, 0x00, 0x04, 0x80, 0x00, 0x01, +0x40, 0x73, 0x20, 0x00, 0x54, 0x83, 0x80, 0xff, 0x14, 0x80, 0x00, 0x01, 0x40, 0x70, 0x20, 0x00, +0x50, 0x73, 0x80, 0x08, 0x00, 0x83, 0x80, 0x00, 0x10, 0x82, 0x80, 0x00, 0x10, 0x63, 0x80, 0x00, +0x00, 0x72, 0x80, 0x00, 0x38, 0x80, 0x90, 0x00, 0x40, 0x53, 0x1c, 0x00, 0x54, 0x62, 0x80, 0xff, +0x40, 0x60, 0x18, 0x00, 0x00, 0x53, 0x00, 0x08, 0x40, 0x52, 0xa0, 0x03, 0x38, 0x51, 0x90, 0x08, +0x50, 0x42, 0x00, 0x01, 0x58, 0x50, 0x00, 0x00, 0x40, 0xf2, 0x08, 0x06, 0x4e, 0xf3, 0xff, 0xcc, +0x3a, 0x6f, 0xa0, 0x04, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0x3c, 0x44, 0x20, 0x00, 0x00, +0x48, 0x00, 0x00, 0x22, 0x04, 0x40, 0x00, 0x00, 0x50, 0x21, 0x00, 0x01, 0x50, 0x62, 0x00, 0x01, +0x54, 0x53, 0x00, 0xff, 0x38, 0x51, 0x94, 0x0e, 0x50, 0x31, 0x80, 0x08, 0x04, 0x40, 0x00, 0x01, +0x00, 0x51, 0x80, 0x00, 0x40, 0x62, 0x90, 0x00, 0x54, 0x43, 0x00, 0xff, 0x14, 0x40, 0x00, 0x01, +0x40, 0x60, 0x10, 0x00, 0x50, 0x43, 0x00, 0x08, 0x00, 0x62, 0x00, 0x00, 0x10, 0x61, 0x80, 0x00, +0x10, 0x52, 0x00, 0x00, 0x58, 0x30, 0x00, 0x00, 0x40, 0xf1, 0x04, 0x06, 0x4e, 0xf3, 0xff, 0xdc, +0x3a, 0x6f, 0x98, 0x04, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xfe, 0xe4, +0x14, 0x2f, 0x80, 0x00, 0x14, 0x3f, 0x80, 0x01, 0x58, 0x60, 0x80, 0x00, 0x44, 0x10, 0x00, 0x00, +0x44, 0x20, 0x00, 0x60, 0x59, 0xc0, 0x00, 0x00, 0x50, 0x0f, 0x80, 0x68, 0x58, 0xa2, 0x00, 0x00, +0x58, 0x92, 0x80, 0x00, 0x50, 0x8f, 0x80, 0xc8, 0x49, 0xf7, 0xb6, 0x28, 0x44, 0x10, 0x00, 0x00, +0x44, 0x20, 0x00, 0x60, 0x50, 0x0f, 0x80, 0x08, 0x49, 0xf7, 0xb6, 0x20, 0x58, 0x04, 0x00, 0x00, +0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x40, 0x49, 0xf7, 0xb6, 0x18, 0x5c, 0xf3, 0x00, 0x41, +0x4e, 0xf2, 0x00, 0x12, 0x58, 0x04, 0x00, 0x00, 0x58, 0x1e, 0x00, 0x00, 0x58, 0x23, 0x00, 0x00, +0x49, 0xf7, 0xb6, 0x7e, 0x50, 0x6f, 0x80, 0xc8, 0x51, 0xcf, 0x81, 0x08, 0x58, 0x73, 0x00, 0x00, +0x48, 0x00, 0x00, 0x0c, 0x58, 0x0e, 0x00, 0x00, 0x58, 0x13, 0x00, 0x00, 0x58, 0x24, 0x00, 0x00, +0x49, 0x00, 0x0a, 0x8a, 0x48, 0xff, 0xff, 0xf0, 0x00, 0x13, 0x80, 0x00, 0x56, 0x00, 0x80, 0x36, +0x18, 0x03, 0x80, 0x01, 0x4c, 0x7e, 0x7f, 0xfa, 0x50, 0x7f, 0x80, 0x68, 0x58, 0x03, 0x80, 0x00, +0x49, 0x00, 0x0a, 0x58, 0x58, 0x03, 0x80, 0x00, 0x50, 0x1f, 0x80, 0xc8, 0x44, 0x20, 0x00, 0x40, +0x49, 0x00, 0x09, 0xec, 0x04, 0x1f, 0x80, 0x00, 0x04, 0x2f, 0x80, 0x01, 0x58, 0x03, 0x80, 0x00, +0x49, 0x00, 0x09, 0xe4, 0x58, 0x03, 0x80, 0x00, 0x50, 0x1f, 0x81, 0x08, 0x49, 0x00, 0x09, 0x96, +0x00, 0x33, 0x00, 0x00, 0x56, 0x21, 0x80, 0x6a, 0x18, 0x23, 0x00, 0x01, 0x4c, 0x6e, 0x7f, 0xfa, +0x50, 0x7f, 0x80, 0x08, 0x58, 0x03, 0x80, 0x00, 0x49, 0x00, 0x0a, 0x34, 0x58, 0x03, 0x80, 0x00, +0x50, 0x1f, 0x80, 0xc8, 0x44, 0x20, 0x00, 0x40, 0x50, 0x6f, 0x81, 0x08, 0x49, 0x00, 0x09, 0xc6, +0x44, 0x20, 0x00, 0x10, 0x58, 0x03, 0x80, 0x00, 0x58, 0x13, 0x00, 0x00, 0x49, 0x00, 0x09, 0xbe, +0x58, 0x03, 0x80, 0x00, 0x58, 0x13, 0x00, 0x00, 0x49, 0x00, 0x09, 0x70, 0x5c, 0xf4, 0x80, 0x11, +0x4e, 0xf3, 0x00, 0x0a, 0x58, 0x05, 0x00, 0x00, 0x58, 0x13, 0x00, 0x00, 0x44, 0x20, 0x00, 0x10, +0x48, 0x00, 0x00, 0x08, 0x58, 0x05, 0x00, 0x00, 0x58, 0x13, 0x00, 0x00, 0x58, 0x24, 0x80, 0x00, +0x49, 0xf7, 0xb6, 0x0e, 0x51, 0xff, 0x81, 0x1c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xfe, 0xcc, 0x14, 0x2f, 0x80, 0x00, 0x14, 0x3f, 0x80, 0x01, +0x58, 0x60, 0x80, 0x00, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x68, 0x59, 0xc0, 0x00, 0x00, +0x50, 0x0f, 0x80, 0x70, 0x58, 0xa2, 0x00, 0x00, 0x58, 0x92, 0x80, 0x00, 0x50, 0x8f, 0x80, 0xdc, +0x49, 0xf7, 0xb5, 0x7c, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x68, 0x50, 0x0f, 0x80, 0x08, +0x49, 0xf7, 0xb5, 0x74, 0x58, 0x04, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x40, +0x49, 0xf7, 0xb5, 0x6c, 0x5c, 0xf3, 0x00, 0x41, 0x4e, 0xf2, 0x00, 0x12, 0x58, 0x04, 0x00, 0x00, +0x58, 0x1e, 0x00, 0x00, 0x58, 0x23, 0x00, 0x00, 0x49, 0xf7, 0xb5, 0xd2, 0x50, 0x6f, 0x80, 0xdc, +0x51, 0xcf, 0x81, 0x1c, 0x58, 0x73, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, 0x58, 0x0e, 0x00, 0x00, +0x58, 0x13, 0x00, 0x00, 0x58, 0x24, 0x00, 0x00, 0x49, 0x00, 0x02, 0xb8, 0x48, 0xff, 0xff, 0xf0, +0x00, 0x13, 0x80, 0x00, 0x56, 0x00, 0x80, 0x36, 0x18, 0x03, 0x80, 0x01, 0x4c, 0x7e, 0x7f, 0xfa, +0x50, 0x7f, 0x80, 0x70, 0x58, 0x03, 0x80, 0x00, 0x49, 0x00, 0x02, 0x86, 0x58, 0x03, 0x80, 0x00, +0x50, 0x1f, 0x80, 0xdc, 0x44, 0x20, 0x00, 0x40, 0x49, 0x00, 0x02, 0x1a, 0x04, 0x1f, 0x80, 0x00, +0x04, 0x2f, 0x80, 0x01, 0x58, 0x03, 0x80, 0x00, 0x49, 0x00, 0x02, 0x12, 0x58, 0x03, 0x80, 0x00, +0x50, 0x1f, 0x81, 0x1c, 0x49, 0x00, 0x01, 0x7c, 0x00, 0x33, 0x00, 0x00, 0x56, 0x21, 0x80, 0x6a, +0x18, 0x23, 0x00, 0x01, 0x4c, 0x6e, 0x7f, 0xfa, 0x50, 0x7f, 0x80, 0x08, 0x58, 0x03, 0x80, 0x00, +0x49, 0x00, 0x02, 0x62, 0x58, 0x03, 0x80, 0x00, 0x50, 0x1f, 0x80, 0xdc, 0x44, 0x20, 0x00, 0x40, +0x50, 0x6f, 0x81, 0x1c, 0x49, 0x00, 0x01, 0xf4, 0x44, 0x20, 0x00, 0x14, 0x58, 0x03, 0x80, 0x00, +0x58, 0x13, 0x00, 0x00, 0x49, 0x00, 0x01, 0xec, 0x58, 0x03, 0x80, 0x00, 0x58, 0x13, 0x00, 0x00, +0x49, 0x00, 0x01, 0x56, 0x5c, 0xf4, 0x80, 0x15, 0x4e, 0xf3, 0x00, 0x0a, 0x58, 0x05, 0x00, 0x00, +0x58, 0x13, 0x00, 0x00, 0x44, 0x20, 0x00, 0x14, 0x48, 0x00, 0x00, 0x08, 0x58, 0x05, 0x00, 0x00, +0x58, 0x13, 0x00, 0x00, 0x58, 0x24, 0x80, 0x00, 0x49, 0xf7, 0xb5, 0x62, 0x51, 0xff, 0x81, 0x34, +0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xfe, 0xb4, +0x58, 0x60, 0x00, 0x00, 0x50, 0x00, 0x00, 0x20, 0x14, 0x0f, 0x80, 0x01, 0x50, 0x9f, 0x80, 0x08, +0x04, 0x1f, 0x80, 0x01, 0x44, 0x20, 0x00, 0x40, 0x58, 0x04, 0x80, 0x00, 0x49, 0xf7, 0xb5, 0x48, +0x50, 0x8f, 0x80, 0x48, 0x59, 0xe4, 0x80, 0x00, 0x58, 0x24, 0x80, 0x00, 0x04, 0x01, 0x00, 0x00, +0x44, 0x50, 0xff, 0x00, 0x46, 0xa0, 0x0f, 0xf0, 0x40, 0x30, 0x14, 0x02, 0x40, 0x40, 0x60, 0x09, +0x40, 0x10, 0x60, 0x08, 0x40, 0x72, 0x04, 0x04, 0x41, 0xc1, 0xa0, 0x08, 0x40, 0x50, 0x28, 0x02, +0x40, 0x13, 0xf0, 0x04, 0x40, 0x42, 0xa0, 0x09, 0x40, 0x30, 0x90, 0x04, 0x1c, 0x31, 0x00, 0x01, +0x4c, 0x24, 0x7f, 0xe6, 0x50, 0x2f, 0x80, 0x3c, 0x50, 0x34, 0x81, 0x34, 0x04, 0x41, 0x7f, 0xfb, +0x04, 0x51, 0x00, 0x00, 0x04, 0x01, 0x7f, 0xf5, 0x04, 0xa1, 0x7f, 0xf3, 0x40, 0x12, 0x14, 0x03, +0x41, 0xc0, 0x80, 0x03, 0x40, 0x7e, 0x28, 0x03, 0x40, 0x83, 0xfc, 0x0b, 0x14, 0x81, 0x00, 0x03, +0x50, 0x21, 0x00, 0x04, 0x4c, 0x21, 0xff, 0xec, 0x04, 0x03, 0x00, 0x00, 0x04, 0x83, 0x00, 0x01, +0x04, 0x43, 0x00, 0x02, 0x04, 0x33, 0x00, 0x03, 0x05, 0xc3, 0x00, 0x04, 0x50, 0x14, 0x80, 0x50, +0x58, 0x70, 0x00, 0x00, 0x0c, 0x5f, 0x00, 0x01, 0x46, 0xa5, 0xa8, 0x27, 0x58, 0xa5, 0x09, 0x99, +0x40, 0x24, 0x20, 0x05, 0x40, 0x52, 0xa8, 0x00, 0x40, 0x52, 0xf0, 0x00, 0x40, 0xa2, 0x20, 0x02, +0x41, 0xc3, 0xec, 0x0b, 0x40, 0x21, 0x0c, 0x02, 0x40, 0x52, 0xf0, 0x00, 0x40, 0x21, 0x28, 0x03, +0x40, 0x52, 0x88, 0x00, 0x59, 0xc1, 0x80, 0x00, 0x40, 0x24, 0x08, 0x0b, 0x58, 0x83, 0x80, 0x00, +0x4d, 0xe0, 0x80, 0x0a, 0x58, 0x32, 0x00, 0x00, 0x58, 0x72, 0x80, 0x00, 0x58, 0x41, 0x00, 0x00, +0x48, 0xff, 0xff, 0xda, 0x59, 0xe1, 0x80, 0x00, 0x50, 0x8f, 0x80, 0x58, 0x50, 0xa4, 0x80, 0xa0, +0x0d, 0xc4, 0x00, 0x01, 0x46, 0x36, 0xed, 0x9e, 0x58, 0x31, 0x8b, 0xa1, 0x41, 0xce, 0x0c, 0x00, +0x40, 0x11, 0x1c, 0x03, 0x41, 0xce, 0x78, 0x00, 0x40, 0x32, 0xec, 0x0b, 0x41, 0xee, 0x0c, 0x00, +0x40, 0x30, 0x90, 0x03, 0x41, 0xcf, 0x0c, 0x00, 0x40, 0x33, 0x88, 0x0b, 0x59, 0xe2, 0x00, 0x00, +0x58, 0x72, 0x80, 0x00, 0x4c, 0x85, 0x00, 0x0a, 0x58, 0x41, 0x00, 0x00, 0x58, 0x5e, 0x00, 0x00, +0x58, 0x21, 0x80, 0x00, 0x48, 0xff, 0xff, 0xde, 0x58, 0x82, 0x80, 0x00, 0x58, 0x5e, 0x00, 0x00, +0x58, 0x71, 0x00, 0x00, 0x51, 0xcf, 0x80, 0xa8, 0x50, 0x14, 0x80, 0xf0, 0x0c, 0x4e, 0x00, 0x01, +0x46, 0xa8, 0xf1, 0xbb, 0x58, 0xa5, 0x0c, 0xdc, 0x40, 0x42, 0x28, 0x00, 0x40, 0x21, 0x9c, 0x03, +0x40, 0x42, 0x78, 0x00, 0x40, 0x21, 0x20, 0x02, 0x41, 0xe2, 0xec, 0x0b, 0x40, 0xa3, 0x8c, 0x02, +0x40, 0x42, 0x78, 0x00, 0x40, 0x21, 0x28, 0x03, 0x40, 0x42, 0x08, 0x00, 0x59, 0xe3, 0x80, 0x00, +0x40, 0x24, 0x08, 0x0b, 0x58, 0x82, 0x80, 0x00, 0x4d, 0xc0, 0x80, 0x0a, 0x58, 0x71, 0x80, 0x00, +0x58, 0x52, 0x00, 0x00, 0x58, 0x31, 0x00, 0x00, 0x48, 0xff, 0xff, 0xda, 0x59, 0xc3, 0x80, 0x00, +0x50, 0x94, 0x81, 0x40, 0x50, 0x7f, 0x80, 0xf8, 0x0d, 0xe3, 0x80, 0x01, 0x46, 0x8c, 0xa6, 0x2c, +0x58, 0x84, 0x01, 0xd6, 0x40, 0xaf, 0x20, 0x00, 0x40, 0x11, 0x14, 0x03, 0x41, 0xe5, 0x70, 0x00, +0x40, 0x82, 0x6c, 0x0b, 0x41, 0xcf, 0x20, 0x00, 0x40, 0x80, 0x8c, 0x03, 0x40, 0xae, 0x20, 0x00, +0x40, 0x82, 0x88, 0x0b, 0x59, 0xc1, 0x80, 0x00, 0x58, 0x52, 0x00, 0x00, 0x4c, 0x74, 0x80, 0x0a, +0x58, 0x31, 0x00, 0x00, 0x58, 0x45, 0x00, 0x00, 0x58, 0x24, 0x00, 0x00, 0x48, 0xff, 0xff, 0xde, +0x05, 0xc3, 0x00, 0x01, 0x04, 0x93, 0x00, 0x02, 0x04, 0x73, 0x00, 0x03, 0x04, 0x53, 0x00, 0x04, +0x40, 0xa5, 0x00, 0x00, 0x40, 0x4e, 0x10, 0x00, 0x40, 0x23, 0x88, 0x00, 0x40, 0x32, 0x8c, 0x00, +0x40, 0x84, 0xa0, 0x00, 0x14, 0x23, 0x00, 0x03, 0x14, 0xa3, 0x00, 0x00, 0x14, 0x43, 0x00, 0x01, +0x14, 0x83, 0x00, 0x02, 0x14, 0x33, 0x00, 0x04, 0x44, 0x10, 0x00, 0x00, 0x04, 0x0f, 0x80, 0x01, +0x44, 0x20, 0x00, 0x40, 0x49, 0xf7, 0xb3, 0xba, 0x44, 0x00, 0x00, 0x00, 0x14, 0x03, 0x00, 0x18, +0x51, 0xff, 0x81, 0x4c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, +0x51, 0xff, 0xff, 0xf4, 0x04, 0x20, 0x00, 0x18, 0x50, 0x70, 0x00, 0x20, 0x58, 0x60, 0x00, 0x00, 0x58, 0x80, 0x80, 0x00, 0x40, 0x03, 0x88, 0x00, 0x44, 0x10, 0x00, 0x80, 0x44, 0x20, 0x00, 0x01, -0x49, 0xf7, 0xac, 0x8c, 0x04, 0x03, 0x00, 0x16, 0x5c, 0xf0, 0x00, 0x38, 0x4e, 0xf3, 0x00, 0x06, -0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xf9, 0xb8, 0x04, 0x13, 0x00, 0x04, 0x04, 0x03, 0x00, 0x05, -0x41, 0xe0, 0xf4, 0x09, 0x40, 0x50, 0x0c, 0x08, 0x40, 0x30, 0x8c, 0x08, 0x40, 0x42, 0xf8, 0x04, -0x14, 0x4f, 0x80, 0x01, 0x14, 0x3f, 0x80, 0x00, 0x58, 0x1f, 0x80, 0x00, 0x44, 0x20, 0x00, 0x08, -0x50, 0x03, 0x80, 0x38, 0x49, 0xf7, 0xac, 0xdc, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xf9, 0x9c, -0x58, 0x04, 0x00, 0x00, 0x58, 0x13, 0x00, 0x00, 0x44, 0x20, 0x00, 0x10, 0x49, 0xf7, 0xac, 0xd0, -0x51, 0xff, 0x80, 0x08, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, -0x51, 0xff, 0xff, 0xf4, 0x58, 0x70, 0x00, 0x00, 0x50, 0x00, 0x00, 0x18, 0x14, 0x1f, 0x80, 0x01, +0x49, 0xf7, 0xb3, 0x9c, 0x04, 0x03, 0x00, 0x18, 0x5c, 0xf0, 0x00, 0x38, 0x4e, 0xf3, 0x00, 0x06, +0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xfe, 0xaa, 0x04, 0x33, 0x00, 0x06, 0x05, 0xe3, 0x00, 0x07, +0x41, 0xc1, 0xf4, 0x09, 0x40, 0x2f, 0x0c, 0x08, 0x40, 0x2e, 0x08, 0x04, 0x40, 0x31, 0x8c, 0x08, +0x44, 0x50, 0xff, 0x00, 0x46, 0x10, 0x0f, 0xf0, 0x40, 0x91, 0x14, 0x02, 0x40, 0xa1, 0x94, 0x02, +0x41, 0xe1, 0x84, 0x02, 0x41, 0xc1, 0x04, 0x02, 0x40, 0x44, 0xa0, 0x08, 0x40, 0x01, 0xe0, 0x08, +0x40, 0x91, 0x60, 0x08, 0x40, 0xa5, 0x20, 0x08, 0x40, 0x1e, 0x20, 0x09, 0x40, 0x05, 0x00, 0x04, +0x40, 0x44, 0x90, 0x04, 0x40, 0x5f, 0x20, 0x09, 0x41, 0xe0, 0x14, 0x04, 0x41, 0xc1, 0xe0, 0x09, +0x40, 0x52, 0x04, 0x04, 0x40, 0x11, 0x60, 0x09, 0x40, 0x42, 0x84, 0x04, 0x40, 0x3e, 0x78, 0x04, +0x44, 0x20, 0x00, 0x08, 0x58, 0x1f, 0x80, 0x00, 0x50, 0x03, 0x80, 0x38, 0x14, 0x4f, 0x80, 0x00, +0x14, 0x3f, 0x80, 0x01, 0x49, 0xf7, 0xb3, 0xc4, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xfe, 0x66, +0x44, 0x20, 0x00, 0x00, 0x38, 0x33, 0x08, 0x02, 0x44, 0x50, 0xff, 0x00, 0x41, 0xc1, 0x94, 0x02, +0x40, 0x4e, 0x20, 0x08, 0x47, 0xc0, 0x0f, 0xf0, 0x40, 0x01, 0xe0, 0x09, 0x40, 0x11, 0xe0, 0x08, +0x41, 0xe0, 0x04, 0x04, 0x40, 0x31, 0xf0, 0x02, 0x40, 0x0f, 0x10, 0x04, 0x40, 0x51, 0xa0, 0x09, +0x40, 0x10, 0x14, 0x04, 0x38, 0x13, 0x08, 0x0a, 0x44, 0x40, 0x00, 0x14, 0x50, 0x21, 0x00, 0x04, +0x4c, 0x22, 0x7f, 0xe2, 0x58, 0x04, 0x00, 0x00, 0x58, 0x13, 0x00, 0x00, 0x49, 0xf7, 0xb3, 0x98, +0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, +0x51, 0xff, 0xff, 0xf4, 0x58, 0x70, 0x00, 0x00, 0x50, 0x00, 0x00, 0x20, 0x14, 0x1f, 0x80, 0x01, 0x59, 0xc1, 0x00, 0x00, 0x14, 0x0f, 0x80, 0x00, 0x44, 0x80, 0x00, 0x00, 0x48, 0x00, 0x00, 0x34, -0x04, 0x33, 0x80, 0x16, 0x04, 0x1f, 0x80, 0x01, 0x05, 0xef, 0x80, 0x00, 0x40, 0x50, 0xa0, 0x00, +0x04, 0x33, 0x80, 0x18, 0x04, 0x1f, 0x80, 0x01, 0x05, 0xef, 0x80, 0x00, 0x40, 0x50, 0xa0, 0x00, 0x40, 0x4f, 0x0c, 0x00, 0x40, 0x93, 0x0c, 0x00, 0x58, 0x12, 0x80, 0x00, 0x58, 0x02, 0x00, 0x00, -0x5c, 0xf4, 0x80, 0x40, 0x4e, 0xf2, 0x00, 0x0e, 0x49, 0xf7, 0xac, 0xa2, 0x04, 0x33, 0x80, 0x16, -0x40, 0x84, 0x18, 0x00, 0x40, 0x21, 0x98, 0x00, 0x14, 0x23, 0x80, 0x16, 0x48, 0x00, 0x00, 0x14, -0x52, 0x21, 0x80, 0x40, 0x49, 0xf7, 0xac, 0x94, 0x44, 0x60, 0x00, 0x40, 0x04, 0x53, 0x80, 0x16, -0x14, 0x63, 0x80, 0x16, 0x40, 0x43, 0x14, 0x01, 0x58, 0x03, 0x80, 0x00, 0x40, 0x84, 0x10, 0x00, -0x49, 0xff, 0xf9, 0x4a, 0x40, 0x6e, 0x20, 0x01, 0x58, 0x23, 0x00, 0x00, 0x4c, 0x8e, 0x7f, 0xca, -0x04, 0x03, 0x80, 0x04, 0x04, 0x13, 0x80, 0x05, 0x58, 0x24, 0x00, 0x00, 0x44, 0x30, 0x00, 0x00, +0x5c, 0xf4, 0x80, 0x40, 0x4e, 0xf2, 0x00, 0x0e, 0x49, 0xf7, 0xb3, 0x6a, 0x04, 0x33, 0x80, 0x18, +0x40, 0x84, 0x18, 0x00, 0x40, 0x21, 0x98, 0x00, 0x14, 0x23, 0x80, 0x18, 0x48, 0x00, 0x00, 0x14, +0x52, 0x21, 0x80, 0x40, 0x49, 0xf7, 0xb3, 0x5c, 0x44, 0x60, 0x00, 0x40, 0x04, 0x53, 0x80, 0x18, +0x14, 0x63, 0x80, 0x18, 0x40, 0x43, 0x14, 0x01, 0x58, 0x03, 0x80, 0x00, 0x40, 0x84, 0x10, 0x00, +0x49, 0xff, 0xfd, 0xf4, 0x40, 0x6e, 0x20, 0x01, 0x58, 0x23, 0x00, 0x00, 0x4c, 0x8e, 0x7f, 0xca, +0x04, 0x03, 0x80, 0x06, 0x04, 0x13, 0x80, 0x07, 0x58, 0x24, 0x00, 0x00, 0x44, 0x30, 0x00, 0x00, 0x40, 0x40, 0x08, 0x00, 0x40, 0xf2, 0x08, 0x06, 0x40, 0x50, 0x8c, 0x00, 0x40, 0x52, 0xbc, 0x00, -0x14, 0x43, 0x80, 0x04, 0x14, 0x53, 0x80, 0x05, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, 0x3e, 0x1f, 0xd5, 0xfc, 0x58, 0x60, 0x00, 0x00, -0x44, 0x20, 0x00, 0x10, 0x49, 0xf7, 0xac, 0x5c, 0x50, 0x03, 0x00, 0x18, 0x44, 0x10, 0x00, 0x00, -0x44, 0x20, 0x00, 0x40, 0x49, 0xf7, 0xab, 0xe2, 0x44, 0x20, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, -0x44, 0x10, 0x00, 0x00, 0x14, 0x23, 0x00, 0x16, 0x14, 0x03, 0x00, 0x04, 0x14, 0x13, 0x00, 0x05, -0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0x9c, +0x14, 0x43, 0x80, 0x06, 0x14, 0x53, 0x80, 0x07, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, 0x3e, 0x1f, 0xd3, 0x94, 0x58, 0x60, 0x00, 0x00, +0x44, 0x20, 0x00, 0x14, 0x49, 0xf7, 0xb3, 0x24, 0x50, 0x03, 0x00, 0x20, 0x44, 0x10, 0x00, 0x00, +0x44, 0x20, 0x00, 0x40, 0x49, 0xf7, 0xb2, 0xaa, 0x44, 0x20, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, +0x44, 0x10, 0x00, 0x00, 0x14, 0x23, 0x00, 0x18, 0x14, 0x03, 0x00, 0x06, 0x14, 0x13, 0x00, 0x07, +0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0x94, 0x58, 0x90, 0x00, 0x00, 0x58, 0x80, 0x80, 0x00, 0x58, 0x71, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, -0x44, 0x20, 0x00, 0x60, 0x58, 0x0f, 0x80, 0x00, 0x49, 0xf7, 0xab, 0xc0, 0x58, 0x0f, 0x80, 0x00, +0x44, 0x20, 0x00, 0x68, 0x58, 0x0f, 0x80, 0x00, 0x49, 0xf7, 0xb2, 0x88, 0x58, 0x0f, 0x80, 0x00, 0x49, 0xff, 0xff, 0xca, 0x58, 0x0f, 0x80, 0x00, 0x58, 0x14, 0x80, 0x00, 0x58, 0x24, 0x00, 0x00, 0x49, 0xff, 0xff, 0x5e, 0x58, 0x0f, 0x80, 0x00, 0x58, 0x13, 0x80, 0x00, 0x58, 0x6f, 0x80, 0x00, -0x49, 0xff, 0xff, 0x0e, 0x51, 0xff, 0x80, 0x64, 0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xf4, 0x54, 0x90, 0x00, 0xff, 0x49, 0xff, 0xb9, 0xb8, -0x44, 0x30, 0x00, 0x38, 0x50, 0x21, 0xff, 0xfc, 0x40, 0x71, 0x00, 0x1a, 0x40, 0x71, 0x80, 0x1b, -0x58, 0x03, 0x80, 0x00, 0x49, 0xf7, 0xb1, 0x4a, 0x44, 0x50, 0x0f, 0xff, 0x58, 0x80, 0x00, 0x00, -0x4c, 0x02, 0xc0, 0x08, 0x46, 0x0c, 0x00, 0x00, 0x58, 0x00, 0x00, 0x9a, 0x48, 0x00, 0x00, 0xc8, -0x49, 0xf7, 0xb1, 0x0e, 0x58, 0x60, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, 0x58, 0x23, 0x80, 0x00, -0x49, 0xf7, 0xab, 0x7c, 0x12, 0x73, 0x00, 0x00, 0x2e, 0x07, 0xfa, 0x12, 0x00, 0x13, 0x00, 0x03, -0x4e, 0x03, 0x00, 0x0a, 0x44, 0x7f, 0xff, 0x87, 0x40, 0x50, 0x9c, 0x02, 0x58, 0x12, 0x80, 0x18, -0x48, 0x00, 0x00, 0x08, 0x45, 0xef, 0xff, 0x87, 0x40, 0xa0, 0xf8, 0x02, 0x58, 0x15, 0x00, 0x60, -0x10, 0x13, 0x00, 0x03, 0x00, 0xa3, 0x00, 0x07, 0x00, 0x13, 0x00, 0x03, 0x55, 0xc0, 0x80, 0x7f, -0x11, 0xc3, 0x00, 0x03, 0x54, 0x15, 0x00, 0x03, 0x2e, 0x47, 0xfa, 0x09, 0x44, 0x0f, 0xff, 0xcc, -0x10, 0x13, 0x00, 0x07, 0x10, 0x43, 0x00, 0x04, 0x10, 0x03, 0x00, 0x05, 0x02, 0x23, 0x00, 0x0d, -0x2e, 0x77, 0xfa, 0x0f, 0x02, 0x53, 0x00, 0x06, 0x01, 0xc3, 0x00, 0x09, 0x00, 0xa3, 0x00, 0x0b, -0x40, 0x73, 0x88, 0x08, 0x45, 0xef, 0xc0, 0x03, 0x02, 0x43, 0x00, 0x07, 0x00, 0x33, 0x00, 0x15, -0x00, 0x03, 0x00, 0x19, 0x40, 0x21, 0x78, 0x02, 0x40, 0x10, 0x9c, 0x04, 0x44, 0x7f, 0xff, 0x80, -0x43, 0xce, 0x10, 0x09, 0x40, 0xa5, 0x1c, 0x04, 0x54, 0x52, 0x80, 0x3f, 0x45, 0xef, 0xf8, 0x00, -0x11, 0xc3, 0x00, 0x09, 0x40, 0x00, 0x0c, 0x09, 0x40, 0x00, 0x0c, 0x08, 0x40, 0x52, 0xf8, 0x04, -0x54, 0x42, 0x70, 0x00, 0x58, 0x31, 0x80, 0x20, 0x58, 0x21, 0x00, 0x04, 0x45, 0xc0, 0x00, 0x00, -0x50, 0x73, 0x00, 0x20, 0x10, 0x13, 0x00, 0x07, 0x11, 0xc3, 0x00, 0x0a, 0x10, 0xa3, 0x00, 0x0b, -0x12, 0x53, 0x00, 0x06, 0x12, 0x43, 0x00, 0x07, 0x10, 0x33, 0x00, 0x15, 0x12, 0x23, 0x00, 0x0d, -0x10, 0x03, 0x00, 0x19, 0x44, 0x60, 0x01, 0x48, 0x12, 0x63, 0x80, 0x00, 0x4e, 0x92, 0x00, 0x06, -0x44, 0x90, 0x11, 0x48, 0x12, 0x93, 0x80, 0x00, 0x3e, 0x6f, 0xfa, 0x08, 0x51, 0xcf, 0x80, 0x07, -0x00, 0x03, 0x00, 0x06, 0x58, 0x1e, 0x00, 0x00, 0x3e, 0x2f, 0xfa, 0x00, 0x49, 0xff, 0xaa, 0xd4, -0x3e, 0x1f, 0xfa, 0x00, 0x44, 0x20, 0x00, 0x06, 0x50, 0x03, 0x80, 0x04, 0x49, 0xf7, 0xaa, 0xda, -0x50, 0xa3, 0x80, 0x0a, 0x00, 0x03, 0x00, 0x07, 0x58, 0x1e, 0x00, 0x00, 0x58, 0x25, 0x00, 0x00, -0x49, 0xff, 0xa4, 0x2c, 0x3e, 0x1f, 0xf9, 0xf8, 0x44, 0x20, 0x00, 0x06, 0x58, 0x05, 0x00, 0x00, -0x49, 0xf7, 0xaa, 0xc8, 0x3e, 0x1f, 0xfa, 0x00, 0x44, 0x20, 0x00, 0x06, 0x50, 0x03, 0x80, 0x10, -0x49, 0xf7, 0xaa, 0xc0, 0x00, 0x23, 0x00, 0x0a, 0x44, 0x10, 0x00, 0x0c, 0x44, 0x50, 0x00, 0x03, -0x40, 0x12, 0x88, 0x1a, 0x44, 0x00, 0x00, 0x02, 0x58, 0x24, 0x00, 0x00, 0x44, 0x30, 0x00, 0x01, -0x49, 0xf7, 0xb4, 0x80, 0x4e, 0x02, 0x00, 0x0a, 0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x0c, -0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x58, 0x04, 0x00, 0x00, 0x49, 0xf7, 0xb0, 0x5a, -0x46, 0x0c, 0x00, 0x00, 0x58, 0x00, 0x00, 0x01, 0x48, 0xff, 0xff, 0xf2, 0x3a, 0x6f, 0xaa, 0xbc, -0x51, 0xff, 0xff, 0xdc, 0x54, 0x42, 0x00, 0xff, 0x55, 0xc0, 0x80, 0xff, 0x54, 0x91, 0x00, 0xff, -0x54, 0x31, 0x80, 0xff, 0x4e, 0x42, 0x00, 0x58, 0x44, 0x50, 0x00, 0x03, 0x4c, 0x32, 0x80, 0x06, -0x44, 0x50, 0x00, 0x05, 0x4c, 0x32, 0xc0, 0x82, 0x44, 0xa0, 0x00, 0x00, 0x58, 0x70, 0x00, 0x00, -0x58, 0x95, 0x00, 0x00, 0x58, 0x85, 0x00, 0x00, 0x58, 0x6f, 0x80, 0x00, 0x48, 0x00, 0x00, 0x38, -0x00, 0x03, 0x80, 0x00, 0x44, 0x50, 0x00, 0xdd, 0x4c, 0x02, 0xc0, 0x28, 0x50, 0x03, 0x80, 0x02, -0x3e, 0x1f, 0xe3, 0xa4, 0x44, 0x20, 0x00, 0x03, 0x49, 0xf7, 0xab, 0x1a, 0x4e, 0x03, 0x00, 0x1e, -0x00, 0x53, 0x80, 0x05, 0x45, 0xe0, 0x00, 0x01, 0x4c, 0x5f, 0x40, 0x18, 0x00, 0x43, 0x80, 0x01, -0x00, 0x93, 0x80, 0x06, 0x50, 0x82, 0x7f, 0xfa, 0x54, 0x84, 0x00, 0xff, 0x50, 0x13, 0x80, 0x08, -0x58, 0x0f, 0x80, 0x00, 0x58, 0x24, 0x00, 0x00, 0x54, 0x94, 0x80, 0x03, 0x5c, 0xf4, 0x00, 0x10, -0x4e, 0xf3, 0x00, 0x44, 0x49, 0xf7, 0xaa, 0xd4, 0x00, 0x23, 0x80, 0x01, 0x50, 0x11, 0x00, 0x02, -0x40, 0xa5, 0x04, 0x00, 0x40, 0x73, 0x84, 0x00, 0x54, 0xa5, 0x00, 0xff, 0x00, 0x53, 0x80, 0x01, -0x50, 0x32, 0x80, 0x02, 0x40, 0x01, 0xa8, 0x00, 0x40, 0xfe, 0x00, 0x07, 0x4e, 0xf2, 0xff, 0xc2, -0x48, 0x00, 0x00, 0x14, 0x44, 0x50, 0x00, 0x05, 0x4c, 0x32, 0xc0, 0x30, 0x58, 0x10, 0x00, 0x00, -0x58, 0x2e, 0x00, 0x00, 0x58, 0x0f, 0x80, 0x00, 0x49, 0xf7, 0xaa, 0xb2, 0x5c, 0xf4, 0x80, 0x04, -0x4e, 0xf2, 0x00, 0x1c, 0x58, 0x8e, 0x00, 0x00, 0x58, 0x24, 0x00, 0x00, 0x58, 0x1f, 0x80, 0x00, -0x3e, 0x0f, 0xfa, 0x5c, 0x49, 0xf7, 0xaa, 0xa4, 0x3e, 0x4f, 0xfa, 0x08, 0x00, 0x12, 0x00, 0x03, -0x10, 0x92, 0x00, 0x05, 0x58, 0x24, 0x80, 0x00, 0x50, 0x02, 0x00, 0x54, 0x49, 0xff, 0xed, 0x7c, -0x44, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x04, 0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x24, -0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x44, 0x90, 0x00, 0x00, 0x58, 0x84, 0x80, 0x00, -0x48, 0xff, 0xff, 0xdc, 0x3a, 0x2f, 0x94, 0x3c, 0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0xf4, -0x58, 0x90, 0x00, 0x00, 0x50, 0x0f, 0x80, 0x20, 0x14, 0x0f, 0x80, 0x01, 0x58, 0x70, 0x80, 0x00, -0x44, 0x60, 0x00, 0x00, 0x04, 0x2f, 0x80, 0x01, 0x44, 0x5f, 0xff, 0xff, 0x50, 0x41, 0x00, 0x04, -0x14, 0x4f, 0x80, 0x01, 0x40, 0x04, 0x98, 0x00, 0x04, 0x31, 0x00, 0x00, 0x50, 0x12, 0x00, 0x04, -0x58, 0x21, 0x80, 0x00, 0x4c, 0x32, 0x80, 0x0c, 0x14, 0x1f, 0x80, 0x01, 0x40, 0x63, 0x0c, 0x00, -0x04, 0x12, 0x00, 0x00, 0x49, 0xf7, 0xaa, 0x5c, 0x48, 0xff, 0xff, 0xe6, 0x58, 0x03, 0x00, 0x00, -0x14, 0x63, 0x80, 0x00, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xa4, 0x84, 0x51, 0xff, 0x80, 0x10, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0x94, 0x44, 0x80, 0x00, 0x00, -0x58, 0x61, 0x00, 0x00, 0x55, 0xc0, 0x00, 0xff, 0x58, 0xa0, 0x80, 0x00, 0x58, 0x04, 0x00, 0x00, -0x44, 0x10, 0x02, 0x00, 0x14, 0x8f, 0x80, 0x19, 0x49, 0xff, 0xbd, 0xfa, 0x00, 0x43, 0x00, 0x02, -0x00, 0x13, 0x00, 0x03, 0x40, 0x32, 0x20, 0x08, 0x40, 0x21, 0x84, 0x04, 0x50, 0x21, 0x00, 0x04, -0x50, 0x1f, 0x80, 0x64, 0x58, 0x33, 0x00, 0x00, 0x44, 0x4f, 0xff, 0xff, 0x50, 0x9f, 0x80, 0x54, -0x58, 0x70, 0x00, 0x00, 0x49, 0xff, 0xff, 0xa0, 0x58, 0x14, 0x00, 0x00, 0x58, 0x04, 0x80, 0x00, -0x44, 0x20, 0x00, 0x10, 0x49, 0xf7, 0xa9, 0xaa, 0x44, 0x00, 0x00, 0x02, 0x4d, 0xc0, 0x40, 0x1c, -0x50, 0x8f, 0x80, 0x04, 0x04, 0x3f, 0x80, 0x19, 0x58, 0x05, 0x00, 0x00, 0x58, 0x23, 0x80, 0x00, -0x58, 0x44, 0x00, 0x00, 0x44, 0x50, 0x00, 0x14, 0x50, 0x12, 0xff, 0xfc, 0x49, 0xff, 0xf3, 0xa4, -0x58, 0x04, 0x80, 0x00, 0x58, 0x14, 0x00, 0x00, 0x44, 0x20, 0x00, 0x10, 0x49, 0xf7, 0xaa, 0x00, -0x48, 0x00, 0x00, 0x10, 0x44, 0x10, 0x00, 0x10, 0x04, 0x3f, 0x80, 0x19, 0x58, 0x05, 0x00, 0x00, -0x58, 0x44, 0x80, 0x00, 0x58, 0x23, 0x80, 0x00, 0x58, 0x50, 0x80, 0x00, 0x49, 0xff, 0xf2, 0xe0, -0x50, 0x1f, 0x80, 0x54, 0x44, 0x20, 0x00, 0x10, 0x50, 0x03, 0x00, 0x51, 0x49, 0xf7, 0xa9, 0xe8, -0x58, 0x03, 0x80, 0x00, 0x49, 0xff, 0xbc, 0xd4, 0x51, 0xff, 0x80, 0x6c, 0x3a, 0x6f, 0xaa, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xf4, 0x2e, 0x87, 0xfa, 0x08, -0x04, 0x6f, 0x80, 0x0c, 0x44, 0x70, 0x00, 0x03, 0x44, 0x90, 0x00, 0x01, 0x44, 0x50, 0x00, 0x00, -0x44, 0x00, 0x00, 0x5f, 0x10, 0x73, 0x00, 0x01, 0x10, 0x93, 0x00, 0x00, 0x10, 0x53, 0x00, 0x02, -0x10, 0x03, 0x00, 0x03, 0x59, 0xc1, 0x80, 0x00, 0x14, 0x4f, 0x80, 0x01, 0x54, 0x70, 0x80, 0xff, -0x54, 0x21, 0x00, 0xff, 0x4e, 0x82, 0x00, 0x06, 0x44, 0x00, 0x00, 0x02, 0x48, 0x00, 0x00, 0x04, -0x44, 0x0f, 0xff, 0xfe, 0x10, 0x03, 0x00, 0x04, 0x3e, 0x9f, 0xfa, 0x08, 0x00, 0x54, 0x80, 0x04, -0x00, 0x43, 0x00, 0x06, 0x56, 0x02, 0x80, 0x04, 0x44, 0xa0, 0x00, 0x01, 0x45, 0xe0, 0x00, 0x02, -0x40, 0x9f, 0x00, 0x1a, 0x40, 0x95, 0x00, 0x1b, 0x40, 0x12, 0x0c, 0x09, 0x40, 0x10, 0x8c, 0x08, -0x40, 0x50, 0xa4, 0x04, 0x10, 0x53, 0x00, 0x06, 0x5c, 0xf3, 0x80, 0x05, 0x4e, 0xf3, 0x00, 0x06, -0x42, 0x52, 0x8c, 0x09, 0x48, 0x00, 0x00, 0x04, 0x58, 0x52, 0x80, 0x08, 0x10, 0x53, 0x00, 0x06, -0x4e, 0x83, 0x00, 0x1a, 0x5c, 0xf3, 0x80, 0x05, 0x4e, 0xf3, 0x00, 0x16, 0x00, 0x53, 0x00, 0x06, -0x54, 0x01, 0x00, 0x03, 0x44, 0x3f, 0xff, 0xcf, 0x41, 0xe0, 0x10, 0x08, 0x40, 0xa2, 0x8c, 0x02, -0x40, 0x45, 0x78, 0x04, 0x44, 0x20, 0x00, 0x03, 0x10, 0x43, 0x00, 0x06, 0x4c, 0x71, 0x40, 0x14, -0x48, 0x00, 0x00, 0x16, 0x44, 0x10, 0x00, 0x03, 0x4c, 0x70, 0xc0, 0x0a, 0x00, 0x43, 0x00, 0x06, -0x58, 0x22, 0x00, 0x40, 0x10, 0x23, 0x00, 0x06, 0x48, 0x00, 0x00, 0x0a, 0x44, 0xa0, 0x00, 0x01, -0x4c, 0x75, 0x00, 0x06, 0x44, 0x50, 0x00, 0x05, 0x4c, 0x72, 0xc0, 0x0e, 0x00, 0x03, 0x00, 0x06, -0x44, 0x1f, 0xff, 0x80, 0x40, 0x30, 0x04, 0x04, 0x44, 0x50, 0x00, 0x01, 0x10, 0x33, 0x00, 0x06, -0x4c, 0x72, 0x80, 0x08, 0x00, 0x43, 0x00, 0x05, 0x58, 0x22, 0x00, 0x01, 0x10, 0x23, 0x00, 0x05, -0x4e, 0x82, 0x00, 0x08, 0x5c, 0xf3, 0x80, 0x03, 0x4e, 0xf2, 0x00, 0x08, 0x48, 0x00, 0x00, 0x12, -0x5c, 0xf3, 0x80, 0x05, 0x4e, 0xf3, 0x00, 0x22, 0x01, 0xe3, 0x00, 0x05, 0x58, 0xaf, 0x00, 0x02, -0x10, 0xa3, 0x00, 0x05, 0x4e, 0x82, 0x00, 0x1a, 0x44, 0x50, 0x00, 0x03, 0x4c, 0x72, 0x80, 0x06, -0x44, 0x50, 0x00, 0x05, 0x4c, 0x72, 0xc0, 0x08, 0x00, 0x13, 0x00, 0x05, 0x58, 0x00, 0x80, 0x10, -0x10, 0x03, 0x00, 0x05, 0x4e, 0x82, 0x00, 0x0a, 0x44, 0x20, 0x00, 0x01, 0x4c, 0x71, 0x00, 0x06, -0x44, 0x50, 0x00, 0x03, 0x4c, 0x72, 0xc0, 0x10, 0x2e, 0x17, 0xfa, 0x0c, 0x45, 0xe0, 0x00, 0x10, -0x56, 0x30, 0x80, 0x02, 0x40, 0x5f, 0x04, 0x08, 0x40, 0xa2, 0x8c, 0x1a, 0x40, 0xaf, 0x0c, 0x1b, -0x10, 0xa3, 0x00, 0x08, 0x50, 0x03, 0x00, 0x09, 0x3e, 0x1f, 0xfa, 0x14, 0x44, 0x20, 0x00, 0x08, -0x49, 0xf7, 0xa9, 0x0e, 0x5c, 0xf3, 0x80, 0x04, 0x4e, 0xf3, 0x00, 0x08, 0x4e, 0x83, 0x00, 0x2c, -0x44, 0x50, 0x00, 0x05, 0x4c, 0x72, 0xc0, 0x28, 0x50, 0x03, 0x00, 0x11, 0x58, 0x1e, 0x00, 0x00, -0x44, 0x20, 0x00, 0x20, 0x49, 0xf7, 0xa8, 0xfc, 0x4e, 0x83, 0x00, 0x16, 0x44, 0x50, 0x00, 0x05, -0x4c, 0x72, 0xc0, 0x12, 0x50, 0x1e, 0x00, 0x10, 0x50, 0x03, 0x00, 0x31, 0x44, 0x20, 0x00, 0x10, -0x49, 0xf7, 0xa8, 0xee, 0x00, 0x33, 0x00, 0x40, 0x50, 0x51, 0x80, 0x02, 0x10, 0x53, 0x00, 0x40, -0x48, 0x00, 0x00, 0x0e, 0x44, 0x50, 0x00, 0x03, 0x4c, 0x72, 0xc0, 0x06, 0x4e, 0x83, 0x00, 0x08, -0x48, 0x00, 0x00, 0x0e, 0x44, 0x50, 0x00, 0x05, 0x4c, 0x72, 0xc0, 0x0a, 0x04, 0x1f, 0x80, 0x01, -0x50, 0x03, 0x00, 0x41, 0x44, 0x20, 0x00, 0x06, 0x49, 0xf7, 0xa8, 0xd2, 0x50, 0x03, 0x00, 0x51, -0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x10, 0x49, 0xf7, 0xa8, 0x58, 0x44, 0x50, 0x00, 0x01, -0x4c, 0x72, 0x80, 0x0a, 0x58, 0x04, 0x80, 0x00, 0x58, 0x23, 0x00, 0x00, 0x3e, 0x1f, 0xfa, 0x1c, -0x49, 0xff, 0xfe, 0x72, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xfe, 0x84, 0x44, 0x80, 0x21, 0xc8, 0x58, 0x60, 0x00, 0x00, -0x44, 0x10, 0x00, 0x00, 0x54, 0x71, 0x00, 0xff, 0x50, 0x0f, 0x81, 0x60, 0x44, 0x20, 0x00, 0x10, -0x4b, 0xe0, 0x20, 0x01, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x50, 0x50, 0x0f, 0x81, 0x00, -0x4b, 0xe0, 0x20, 0x01, 0x50, 0x9f, 0x81, 0x74, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0xff, -0x58, 0x0f, 0x80, 0x00, 0x4b, 0xe0, 0x20, 0x01, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x02, -0x58, 0x04, 0x80, 0x00, 0x4b, 0xe0, 0x20, 0x01, 0x50, 0x13, 0x00, 0x05, 0x58, 0x04, 0x80, 0x00, -0x44, 0x20, 0x00, 0x02, 0x49, 0xf7, 0xa8, 0x84, 0x44, 0x00, 0x00, 0x01, 0x2e, 0x87, 0xfa, 0x08, -0x4c, 0x70, 0x00, 0x0a, 0x44, 0x20, 0x00, 0x03, 0x4c, 0x71, 0x00, 0x06, 0x44, 0x30, 0x00, 0x05, -0x4c, 0x71, 0xc0, 0x38, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x08, 0x50, 0x0f, 0x81, 0x50, -0x49, 0xf7, 0xa7, 0xfc, 0x50, 0x23, 0x00, 0x09, 0x58, 0x01, 0x00, 0x00, 0x3e, 0x1f, 0xfa, 0x14, -0x50, 0x53, 0x00, 0x11, 0x00, 0x40, 0x00, 0x00, 0x00, 0x30, 0x80, 0x00, 0x50, 0x00, 0x00, 0x01, -0x40, 0xf1, 0x90, 0x06, 0x4e, 0xf3, 0x00, 0x1a, 0x40, 0xf2, 0x0c, 0x06, 0x4e, 0xf3, 0x00, 0x06, -0x50, 0x10, 0x80, 0x01, 0x4c, 0x02, 0xff, 0xf0, 0x44, 0x00, 0x00, 0x00, 0x50, 0x4f, 0x81, 0x50, -0x38, 0xa1, 0x00, 0x00, 0x38, 0x52, 0x00, 0x00, 0x50, 0x00, 0x00, 0x01, 0x4c, 0xa2, 0xc0, 0x06, -0x45, 0xc0, 0x00, 0x08, 0x4c, 0x0e, 0x7f, 0xf6, 0x44, 0x40, 0x00, 0x01, 0x4c, 0x72, 0x00, 0x6a, -0x00, 0x33, 0x00, 0x02, 0x00, 0x23, 0x00, 0x03, 0x40, 0x91, 0xa0, 0x08, 0x50, 0xa3, 0x00, 0x51, -0x41, 0xe4, 0x88, 0x04, 0x58, 0x15, 0x00, 0x00, 0x44, 0x20, 0x00, 0x10, 0x50, 0x0f, 0x81, 0x50, -0x51, 0xcf, 0x00, 0x04, 0x49, 0xf7, 0xa8, 0x2c, 0x44, 0x10, 0x00, 0x00, 0x58, 0x05, 0x00, 0x00, -0x44, 0x20, 0x00, 0x10, 0x49, 0xf7, 0xa7, 0xb2, 0x00, 0x0f, 0x81, 0x75, 0x44, 0x10, 0x00, 0x01, -0x54, 0x00, 0x00, 0x07, 0x4c, 0x00, 0xc0, 0x18, 0x3e, 0x9f, 0xfa, 0x08, 0x44, 0xa0, 0x00, 0x02, -0x50, 0x10, 0x80, 0x0f, 0x10, 0xa4, 0x80, 0x04, 0x50, 0x04, 0x80, 0x14, 0x58, 0x3e, 0x00, 0x00, -0x58, 0x23, 0x00, 0x00, 0x50, 0x4f, 0x81, 0x60, 0x58, 0x50, 0x80, 0x00, 0x49, 0xff, 0xf0, 0xf8, -0x48, 0x00, 0x00, 0x22, 0x44, 0x50, 0x00, 0x02, 0x4c, 0x02, 0xc0, 0x1e, 0x3e, 0xaf, 0xfa, 0x08, -0x58, 0x3e, 0x00, 0x00, 0x45, 0xc0, 0x00, 0x04, 0x11, 0xc5, 0x00, 0x04, 0x50, 0x05, 0x00, 0x14, -0x50, 0x10, 0x80, 0x0f, 0x58, 0x23, 0x00, 0x00, 0x50, 0x4f, 0x81, 0x00, 0x50, 0x50, 0x80, 0x04, -0x49, 0xff, 0xf1, 0x8a, 0x50, 0x1f, 0x81, 0x00, 0x50, 0x0f, 0x81, 0x60, 0x44, 0x20, 0x00, 0x10, -0x49, 0xf7, 0xa7, 0xe6, 0x50, 0x0f, 0x81, 0x50, 0x50, 0x1f, 0x81, 0x60, 0x44, 0x20, 0x00, 0x10, -0x49, 0xf7, 0xa8, 0x06, 0x4e, 0x02, 0x00, 0x06, 0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x6c, -0x00, 0x03, 0x00, 0x61, 0x00, 0x13, 0x00, 0x62, 0x40, 0x40, 0x20, 0x08, 0x40, 0x32, 0x04, 0x04, -0x4e, 0x36, 0x00, 0x06, 0x44, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x5e, 0x45, 0xe0, 0x00, 0x03, -0x4c, 0x7f, 0x40, 0x06, 0x4e, 0x83, 0x00, 0x08, 0x48, 0x00, 0x00, 0x46, 0x44, 0x20, 0x00, 0x05, -0x4c, 0x71, 0x40, 0x42, 0x00, 0x1f, 0x81, 0x75, 0x45, 0xe0, 0x00, 0x02, 0x54, 0x50, 0x80, 0x07, -0x58, 0x4f, 0x80, 0x00, 0x50, 0x03, 0x00, 0x63, 0x4c, 0x5f, 0x40, 0x20, 0x00, 0x53, 0x00, 0x61, -0x00, 0x23, 0x00, 0x62, 0x40, 0x92, 0xa0, 0x08, 0x40, 0x14, 0x88, 0x04, 0x40, 0x3f, 0x0c, 0x08, -0x3e, 0x2f, 0xfa, 0x2c, 0x50, 0x5f, 0x81, 0x70, 0x44, 0x90, 0x00, 0x00, 0x14, 0x9f, 0x80, 0x5c, -0x49, 0xff, 0xef, 0x02, 0x04, 0x3f, 0x80, 0x5c, 0x00, 0x4f, 0x81, 0x71, 0x10, 0x33, 0x00, 0x62, -0x10, 0x43, 0x00, 0x61, 0x48, 0x00, 0x00, 0x0a, 0x58, 0x20, 0x00, 0x00, 0x3e, 0x0f, 0xfa, 0x2c, -0x50, 0x13, 0x00, 0x31, 0x49, 0x00, 0x01, 0xd6, 0x4e, 0x83, 0x00, 0x0e, 0x44, 0x00, 0x00, 0x05, -0x4c, 0x70, 0x40, 0x0a, 0x00, 0x1f, 0x81, 0x75, 0x41, 0xe0, 0x90, 0x09, 0x54, 0x2f, 0x00, 0x03, -0x48, 0x00, 0x00, 0x04, 0x44, 0x20, 0x00, 0x00, 0x00, 0x13, 0x00, 0x62, 0x58, 0x33, 0x80, 0x00, -0x58, 0x44, 0x00, 0x00, 0x58, 0x0f, 0x80, 0x00, 0x49, 0xff, 0xfc, 0x52, 0x44, 0x30, 0x00, 0x00, -0x40, 0x01, 0x80, 0x06, 0x51, 0xff, 0x81, 0x7c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xd4, 0x3e, 0x7f, 0xfa, 0x08, 0x00, 0x33, 0x80, 0x04, -0x50, 0x9f, 0x80, 0x27, 0x00, 0x03, 0x80, 0x07, 0x58, 0x60, 0x80, 0x00, 0x58, 0x81, 0x00, 0x00, -0x58, 0x14, 0x80, 0x00, 0x50, 0x2f, 0x80, 0x20, 0x14, 0x3f, 0x80, 0x05, 0x49, 0xff, 0xa0, 0x26, -0x00, 0x03, 0x80, 0x06, 0x58, 0x14, 0x80, 0x00, 0x50, 0x2f, 0x80, 0x18, 0x49, 0xff, 0xa6, 0xb4, -0x58, 0x03, 0x00, 0x00, 0x58, 0x14, 0x00, 0x00, 0x44, 0x20, 0x00, 0x05, 0x49, 0xff, 0xfe, 0x8a, -0x4e, 0x02, 0x01, 0x02, 0x00, 0x13, 0x00, 0x0f, 0x00, 0x23, 0x00, 0x10, 0x3e, 0x0f, 0xd6, 0x0c, -0x49, 0xf7, 0xa6, 0x8e, 0x50, 0x13, 0x00, 0x09, 0x44, 0x20, 0x00, 0x08, 0x50, 0x03, 0x80, 0x0c, -0x49, 0xf7, 0xa7, 0x2e, 0x44, 0x00, 0x00, 0xa3, 0x49, 0xf7, 0xac, 0x70, 0x14, 0x0f, 0x80, 0x04, -0x49, 0xf7, 0xac, 0x3e, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0xa3, 0x58, 0x60, 0x00, 0x00, -0x49, 0xf7, 0xa6, 0xac, 0x44, 0x10, 0x00, 0xa3, 0x12, 0x13, 0x00, 0x00, 0x50, 0x83, 0x00, 0x20, -0x00, 0x03, 0x80, 0x0a, 0x00, 0x13, 0x00, 0x03, 0x4e, 0x03, 0x00, 0x0a, 0x44, 0x4f, 0xff, 0x87, -0x40, 0x20, 0x90, 0x02, 0x58, 0x11, 0x00, 0x18, 0x48, 0x00, 0x00, 0x08, 0x44, 0x7f, 0xff, 0x87, -0x40, 0x50, 0x9c, 0x02, 0x58, 0x12, 0x80, 0x60, 0x10, 0x13, 0x00, 0x03, 0x01, 0xe3, 0x00, 0x07, -0x00, 0x93, 0x00, 0x03, 0x54, 0xaf, 0x00, 0x03, 0x54, 0x74, 0x80, 0x7f, 0x10, 0x73, 0x00, 0x03, -0x2e, 0x37, 0xfa, 0x09, 0x44, 0x0f, 0xff, 0xcc, 0x10, 0xa3, 0x00, 0x07, 0x10, 0x33, 0x00, 0x04, -0x10, 0x03, 0x00, 0x05, 0x00, 0x13, 0x00, 0x0b, 0x2e, 0x57, 0xfa, 0x0f, 0x00, 0x73, 0x00, 0x09, -0x02, 0x43, 0x00, 0x06, 0x00, 0x93, 0x00, 0x06, 0x40, 0x22, 0x88, 0x08, 0x02, 0x03, 0x00, 0x0d, -0x01, 0xc3, 0x00, 0x15, 0x02, 0x33, 0x00, 0x07, 0x58, 0x50, 0x80, 0x20, 0x40, 0xa5, 0x08, 0x04, -0x44, 0x2f, 0xff, 0x80, 0x40, 0x94, 0x88, 0x04, 0x54, 0x42, 0x00, 0x3f, 0x42, 0x23, 0x90, 0x09, -0x44, 0x1f, 0xf8, 0x00, 0x40, 0x42, 0x04, 0x04, 0x54, 0x31, 0xf0, 0x00, 0x54, 0x10, 0x7f, 0xff, -0x55, 0xce, 0x00, 0xdd, 0x10, 0x23, 0x00, 0x09, 0x12, 0x33, 0x00, 0x07, 0x12, 0x13, 0x00, 0x0d, -0x54, 0x52, 0x80, 0x7f, 0x59, 0xce, 0x00, 0x22, 0x44, 0x70, 0x00, 0x00, 0x44, 0x2f, 0xff, 0x80, -0x44, 0x10, 0x00, 0x01, 0x44, 0x30, 0x41, 0x08, 0x11, 0xc3, 0x00, 0x15, 0x10, 0xa3, 0x00, 0x07, -0x10, 0x93, 0x00, 0x06, 0x10, 0x73, 0x00, 0x0a, 0x10, 0x53, 0x00, 0x0b, 0x12, 0x43, 0x00, 0x06, -0x10, 0x23, 0x00, 0x14, 0x3e, 0x17, 0xe5, 0xa5, 0x12, 0x34, 0x00, 0x00, 0x2e, 0x67, 0xfa, 0xbd, -0x4e, 0x62, 0x00, 0x06, 0x44, 0x60, 0x51, 0x08, 0x12, 0x64, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, -0x12, 0x14, 0x00, 0x0b, 0x44, 0x60, 0x21, 0xa0, 0x3e, 0x1f, 0xfa, 0x00, 0x44, 0x20, 0x00, 0x06, -0x50, 0x04, 0x00, 0x04, 0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xf9, 0xf8, 0x44, 0x20, 0x00, 0x06, -0x50, 0x04, 0x00, 0x0a, 0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xfa, 0x00, 0x44, 0x20, 0x00, 0x06, -0x50, 0x04, 0x00, 0x10, 0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xe3, 0xa8, 0x44, 0x20, 0x00, 0x06, -0x50, 0x04, 0x00, 0x18, 0x4b, 0xe0, 0x18, 0x01, 0x3e, 0x1f, 0xe3, 0xb0, 0x44, 0x20, 0x00, 0x02, -0x50, 0x04, 0x00, 0x1e, 0x4b, 0xe0, 0x18, 0x01, 0x44, 0x60, 0x00, 0x00, 0x2e, 0x27, 0xfa, 0x0d, -0x04, 0x0f, 0x80, 0x05, 0x58, 0x33, 0x00, 0x00, 0x44, 0x10, 0x00, 0x06, 0x58, 0x43, 0x00, 0x00, -0x50, 0x84, 0x00, 0x20, 0x58, 0x53, 0x00, 0x00, 0x14, 0x8f, 0x80, 0x02, 0x14, 0x6f, 0x80, 0x00, -0x14, 0x6f, 0x80, 0x01, 0x49, 0xff, 0xfc, 0x78, 0x2e, 0x47, 0xfa, 0x12, 0x44, 0x20, 0x00, 0x03, -0x44, 0x10, 0x00, 0x0c, 0x40, 0x11, 0x10, 0x1a, 0x04, 0x2f, 0x80, 0x04, 0x44, 0x00, 0x00, 0x02, -0x44, 0x30, 0x00, 0x01, 0x49, 0xf7, 0xaf, 0x8e, 0x4e, 0x03, 0x00, 0x06, 0x04, 0x0f, 0x80, 0x04, -0x49, 0xf7, 0xab, 0x70, 0x51, 0xff, 0x80, 0x2c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0xf4, 0x50, 0x6f, 0x80, 0x04, 0x58, 0x70, 0x80, 0x00, -0x58, 0x90, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, 0x58, 0x81, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, -0x44, 0x20, 0x00, 0x02, 0x49, 0xf7, 0xa5, 0xb2, 0x58, 0x03, 0x00, 0x00, 0x50, 0x13, 0x80, 0x05, -0x44, 0x20, 0x00, 0x02, 0x49, 0xf7, 0xa6, 0x1c, 0x00, 0x33, 0x00, 0x01, 0x54, 0x01, 0x80, 0x80, -0x4e, 0x02, 0x00, 0x1e, 0x00, 0x13, 0x00, 0x00, 0x54, 0x20, 0x80, 0x0e, 0x4e, 0x23, 0x00, 0x06, -0x54, 0x41, 0x80, 0x08, 0x4e, 0x43, 0x00, 0x14, 0x54, 0x10, 0x80, 0x0f, 0x44, 0x50, 0x00, 0x03, -0x4c, 0x12, 0xc0, 0x0e, 0x54, 0x31, 0x80, 0x08, 0x4e, 0x33, 0x00, 0x0a, 0x58, 0x04, 0x80, 0x00, -0x58, 0x13, 0x80, 0x00, 0x58, 0x24, 0x00, 0x00, 0x49, 0xff, 0xfe, 0x94, 0x51, 0xff, 0x80, 0x0c, -0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xfe, 0xd4, -0x51, 0xcf, 0x81, 0x08, 0x58, 0x60, 0x00, 0x00, 0x58, 0xa1, 0x00, 0x00, 0x44, 0x20, 0x00, 0x10, -0x58, 0x0e, 0x00, 0x00, 0x58, 0x91, 0x80, 0x00, 0x58, 0x82, 0x00, 0x00, 0x49, 0xf7, 0xa5, 0xe0, -0x58, 0x13, 0x00, 0x00, 0x44, 0x20, 0x00, 0x10, 0x50, 0x0f, 0x81, 0x18, 0x49, 0xf7, 0xa5, 0xd8, -0x58, 0x1e, 0x00, 0x00, 0x44, 0x20, 0x00, 0x20, 0x58, 0x0f, 0x80, 0x00, 0x49, 0xff, 0xee, 0x18, -0x58, 0x0f, 0x80, 0x00, 0x44, 0x10, 0x01, 0x00, 0x49, 0xff, 0xee, 0x8a, 0x58, 0x0f, 0x80, 0x00, -0x58, 0x15, 0x00, 0x00, 0x58, 0x24, 0x80, 0x00, 0x58, 0x34, 0x00, 0x00, 0x58, 0x6f, 0x80, 0x00, -0x49, 0xff, 0xee, 0x3e, 0x51, 0xff, 0x81, 0x2c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x49, 0xff, 0xff, 0xc0, 0x51, 0xff, 0x80, 0x04, -0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xfc, -0x3c, 0x6d, 0xf9, 0x7d, 0x3c, 0x7d, 0xf9, 0x70, 0x4e, 0x62, 0x00, 0x18, 0x49, 0xf7, 0xaa, 0xb0, -0x49, 0xf7, 0xac, 0xe6, 0x42, 0x60, 0x18, 0x24, 0x44, 0x10, 0x00, 0x00, 0x40, 0x63, 0x08, 0x09, -0x58, 0x00, 0x80, 0x00, 0x48, 0x00, 0x00, 0x06, 0x1c, 0x03, 0x80, 0x01, 0x50, 0x10, 0x80, 0x01, -0x40, 0xf0, 0x98, 0x06, 0x4e, 0xf3, 0xff, 0xfa, 0x44, 0x00, 0x00, 0x01, 0x51, 0xff, 0x80, 0x04, -0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, 0x58, 0x60, 0x00, 0x00, -0x49, 0xf7, 0xaa, 0x8e, 0x49, 0xf7, 0xac, 0xc4, 0x40, 0x03, 0x00, 0x37, 0x4e, 0x12, 0x00, 0x04, -0x50, 0x00, 0x00, 0x01, 0x46, 0x10, 0x01, 0x15, 0x5c, 0xf0, 0x02, 0x01, 0x4e, 0xf3, 0x00, 0x08, -0x44, 0x00, 0x00, 0x00, 0x3c, 0x0f, 0xf9, 0x6d, 0x48, 0x00, 0x00, 0x06, 0x3c, 0x0f, 0xf9, 0x6d, -0x44, 0x00, 0x00, 0x01, 0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, -0x58, 0x60, 0x00, 0x00, 0x49, 0xf7, 0xaa, 0x6c, 0x49, 0xf7, 0xac, 0xa2, 0x40, 0x03, 0x00, 0x37, -0x4e, 0x12, 0x00, 0x04, 0x50, 0x00, 0x00, 0x01, 0x54, 0x20, 0x00, 0x01, 0x4e, 0x22, 0x00, 0x04, -0x50, 0x00, 0x00, 0x01, 0x46, 0x10, 0x01, 0x15, 0x5c, 0xf0, 0x00, 0x41, 0x4e, 0xf3, 0x00, 0x08, -0x44, 0x00, 0x00, 0x00, 0x3c, 0x0f, 0xf9, 0x6c, 0x48, 0x00, 0x00, 0x06, 0x3c, 0x0f, 0xf9, 0x6c, -0x44, 0x00, 0x00, 0x01, 0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, -0x51, 0xff, 0xff, 0xf4, 0x14, 0x5f, 0x80, 0x01, 0x58, 0x90, 0x80, 0x00, 0x58, 0x81, 0x00, 0x00, -0x58, 0x61, 0x80, 0x00, 0x58, 0xa0, 0x00, 0x00, 0x05, 0xcf, 0x80, 0x0a, 0x49, 0xf7, 0xaa, 0x38, -0x49, 0xf7, 0xac, 0x6e, 0x04, 0x5f, 0x80, 0x01, 0x4e, 0xa3, 0x00, 0x06, 0x58, 0x75, 0x00, 0x00, -0x48, 0x00, 0x00, 0x0a, 0x40, 0x70, 0x28, 0x37, 0x40, 0x73, 0x1c, 0x37, 0x4e, 0x12, 0x00, 0x04, -0x50, 0x73, 0x80, 0x01, 0x4e, 0x93, 0x00, 0x06, 0x58, 0x44, 0x80, 0x00, 0x48, 0x00, 0x00, 0x0a, -0x40, 0x40, 0x24, 0x37, 0x40, 0x43, 0x10, 0x57, 0x4e, 0x22, 0x00, 0x04, 0x50, 0x42, 0x00, 0x01, -0x4e, 0x83, 0x00, 0x06, 0x58, 0x34, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0a, 0x40, 0x30, 0x20, 0x37, -0x40, 0x33, 0x0f, 0xd7, 0x4f, 0xe2, 0x00, 0x04, 0x50, 0x31, 0x80, 0x01, 0x40, 0x02, 0x80, 0xb7, -0x40, 0x12, 0x1c, 0x00, 0x40, 0x20, 0x8c, 0x00, 0x4e, 0x52, 0x00, 0x04, 0x50, 0x00, 0x00, 0x01, -0x42, 0x10, 0x70, 0x24, 0x41, 0xe0, 0x88, 0x00, 0x3d, 0xef, 0xf9, 0x7d, 0x3c, 0x2f, 0xf9, 0x7e, -0x3c, 0x0f, 0xf9, 0x7f, 0x3c, 0x1f, 0xf9, 0x80, 0x3c, 0x8f, 0xf9, 0x7b, 0x3c, 0x6f, 0xf9, 0x78, -0x3c, 0xaf, 0xf9, 0x79, 0x3c, 0x9f, 0xf9, 0x7a, 0x3c, 0x3f, 0xf9, 0x83, 0x44, 0x00, 0x00, 0x01, -0x3d, 0xcf, 0xf9, 0x7c, 0x3c, 0x7f, 0xf9, 0x81, 0x3c, 0x4f, 0xf9, 0x82, 0x51, 0xff, 0x80, 0x0c, -0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xec, -0x58, 0x91, 0x80, 0x00, 0x58, 0x82, 0x00, 0x00, 0x04, 0x3f, 0x80, 0x0d, 0x04, 0x4f, 0x80, 0x0c, -0x14, 0x2f, 0x80, 0x03, 0x14, 0x3f, 0x80, 0x00, 0x14, 0x4f, 0x80, 0x01, 0x14, 0x5f, 0x80, 0x02, -0x58, 0xa0, 0x80, 0x00, 0x54, 0x60, 0x00, 0xff, 0x05, 0xcf, 0x80, 0x0f, 0x49, 0xf7, 0xa9, 0xc0, -0x49, 0xf7, 0xab, 0xf6, 0x04, 0x2f, 0x80, 0x03, 0x04, 0x3f, 0x80, 0x00, 0x04, 0x4f, 0x80, 0x01, -0x04, 0x5f, 0x80, 0x02, 0x4e, 0x92, 0x00, 0x1c, 0x3c, 0x7d, 0xf9, 0x79, 0x4e, 0x72, 0x00, 0x18, -0x41, 0xe0, 0x1c, 0xf7, 0x40, 0x73, 0x78, 0x37, 0x55, 0xe0, 0x80, 0xff, 0x12, 0x75, 0x00, 0x00, -0x11, 0xe1, 0x00, 0x00, 0x02, 0x25, 0x00, 0x00, 0x40, 0x7f, 0x18, 0x08, 0x3d, 0xed, 0xf9, 0x70, -0x43, 0xe0, 0x08, 0x73, 0x40, 0x2f, 0x1c, 0x00, 0x14, 0x24, 0x80, 0x00, 0x4e, 0x42, 0x00, 0x22, -0x3c, 0x1d, 0xf9, 0x7a, 0x4e, 0x12, 0x00, 0x1e, 0x40, 0x20, 0x04, 0x37, 0x3c, 0x7d, 0xf9, 0x81, -0x40, 0x23, 0x0b, 0xd7, 0x40, 0x1f, 0x78, 0x00, 0x54, 0x10, 0x80, 0xff, 0x41, 0xe1, 0x1c, 0x00, -0x13, 0xe4, 0x00, 0x00, 0x10, 0x12, 0x80, 0x00, 0x41, 0xe0, 0x94, 0x08, 0x02, 0x24, 0x00, 0x00, -0x3c, 0x1d, 0xf9, 0x70, 0x42, 0x10, 0x08, 0x73, 0x40, 0x50, 0xf8, 0x00, 0x14, 0x52, 0x00, 0x00, -0x4f, 0xc2, 0x00, 0x26, 0x3c, 0x1d, 0xf9, 0x7b, 0x4e, 0x12, 0x00, 0x22, 0x40, 0x10, 0x04, 0x57, -0x3c, 0x4d, 0xf9, 0x82, 0x3c, 0x2d, 0xf9, 0x81, 0x40, 0x52, 0x08, 0x00, 0x41, 0xe3, 0x04, 0x97, -0x40, 0x22, 0xf8, 0x00, 0x12, 0x21, 0x80, 0x00, 0x54, 0x12, 0x00, 0xff, 0x04, 0x6f, 0x80, 0x0e, -0x10, 0x13, 0x00, 0x00, 0x40, 0x60, 0x94, 0x08, 0x02, 0x51, 0x80, 0x00, 0x3c, 0x3d, 0xf9, 0x70, -0x42, 0x30, 0x14, 0x73, 0x40, 0x01, 0x98, 0x00, 0x14, 0x0e, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, -0x51, 0xff, 0x80, 0x14, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, -0x51, 0xff, 0xff, 0xfc, 0x44, 0x60, 0x2f, 0xc0, 0x54, 0x70, 0x00, 0xff, 0x4b, 0xe0, 0x18, 0x01, -0x46, 0x50, 0x06, 0x63, 0x4c, 0x02, 0x80, 0x1a, 0x4b, 0xe0, 0x18, 0x01, 0x46, 0x20, 0x07, 0x60, -0x58, 0x51, 0x03, 0x00, 0x4c, 0x02, 0x80, 0x12, 0x4b, 0xe0, 0x18, 0x01, 0x46, 0x30, 0x07, 0x62, -0x58, 0x51, 0x88, 0x00, 0x4c, 0x02, 0x80, 0x0a, 0x4b, 0xe0, 0x18, 0x01, 0x46, 0x40, 0x07, 0x63, -0x58, 0x52, 0x06, 0x00, 0x4c, 0x02, 0xc0, 0x04, 0x3e, 0x77, 0xe5, 0xb8, 0x44, 0x00, 0x00, 0x01, -0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa8, 0xbc, -0x51, 0xff, 0xff, 0xf8, 0x44, 0x00, 0x00, 0x01, 0x49, 0xf7, 0xab, 0x6c, 0x2e, 0x27, 0xe5, 0xb8, -0x4e, 0x23, 0x00, 0x10, 0x2e, 0x07, 0xe5, 0xac, 0x2e, 0x17, 0xe5, 0xa8, 0x2e, 0x47, 0xe5, 0xf4, -0x2e, 0x57, 0xe5, 0xb0, 0x2e, 0x67, 0xe5, 0xb4, 0x58, 0x31, 0x00, 0x00, 0x48, 0x00, 0x00, 0x30, -0x44, 0x60, 0x2f, 0xc0, 0x4b, 0xe0, 0x18, 0x01, 0x46, 0x20, 0x06, 0x63, 0x4c, 0x01, 0x00, 0x1a, -0x46, 0x70, 0x07, 0x60, 0x4b, 0xe0, 0x18, 0x01, 0x58, 0x73, 0x83, 0x00, 0x4c, 0x03, 0x80, 0x12, -0x46, 0x80, 0x07, 0x62, 0x4b, 0xe0, 0x18, 0x01, 0x58, 0x84, 0x08, 0x00, 0x4c, 0x04, 0x00, 0x0a, -0x46, 0x90, 0x07, 0x63, 0x4b, 0xe0, 0x18, 0x01, 0x58, 0x94, 0x86, 0x00, 0x4c, 0x04, 0xc0, 0x14, -0x44, 0x60, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, 0x58, 0x13, 0x00, 0x00, 0x58, 0x23, 0x00, 0x00, -0x44, 0x30, 0x00, 0x01, 0x58, 0x43, 0x00, 0x00, 0x58, 0x53, 0x00, 0x00, 0x14, 0x6f, 0x80, 0x00, -0x49, 0x00, 0x02, 0x12, 0x46, 0x7a, 0x00, 0x00, 0x04, 0x83, 0x80, 0x59, 0x46, 0x6a, 0x00, 0x00, -0x14, 0x83, 0x00, 0x5a, 0x44, 0x70, 0x2c, 0xcc, 0x3c, 0x9d, 0xf9, 0x7d, 0x44, 0x60, 0x31, 0x3c, -0x4b, 0xe0, 0x1c, 0x01, 0x4b, 0xe0, 0x18, 0x01, 0x42, 0x80, 0x24, 0x73, 0x46, 0x1a, 0x00, 0x00, -0x14, 0x80, 0x80, 0x5b, 0x3c, 0xad, 0xf9, 0x6a, 0x58, 0x04, 0x00, 0x00, 0x40, 0x35, 0x20, 0x08, -0x46, 0x8a, 0x00, 0x00, 0x40, 0x40, 0x0c, 0x00, 0x14, 0x44, 0x00, 0x5c, 0x3c, 0x2d, 0xf9, 0x6b, -0x46, 0x5a, 0x00, 0x00, 0x40, 0x11, 0x20, 0x08, 0x40, 0x92, 0x04, 0x00, 0x14, 0x92, 0x80, 0x5d, -0x3c, 0xad, 0xf9, 0x6c, 0x4b, 0xe0, 0x1c, 0x01, 0x4b, 0xe0, 0x18, 0x01, 0x40, 0xa5, 0x04, 0x09, -0x42, 0x90, 0x28, 0x73, 0x46, 0x3a, 0x00, 0x00, 0x14, 0x91, 0x80, 0x5e, 0x3c, 0x0d, 0xf9, 0x6c, -0x40, 0x80, 0x04, 0x09, 0x4b, 0xe0, 0x1c, 0x01, 0x4b, 0xe0, 0x18, 0x01, 0x42, 0x90, 0x20, 0x73, -0x58, 0x84, 0x80, 0x00, 0x46, 0x9a, 0x00, 0x00, 0x14, 0x84, 0x80, 0x5f, 0x3c, 0x9d, 0xf9, 0x6d, -0x4b, 0xe0, 0x1c, 0x01, 0x4b, 0xe0, 0x18, 0x01, 0x42, 0x80, 0x24, 0x73, 0x46, 0x4a, 0x00, 0x00, -0x14, 0x82, 0x00, 0x61, 0x44, 0x00, 0x00, 0x00, 0x49, 0xf7, 0xaa, 0xcc, 0x3e, 0x08, 0x02, 0x76, -0x3e, 0x18, 0x02, 0x78, 0x49, 0xf7, 0xae, 0x1c, 0x3c, 0x00, 0x01, 0x3c, 0x3c, 0x08, 0x01, 0x3a, -0x3c, 0x08, 0x01, 0x39, 0x44, 0x00, 0x00, 0x01, 0x51, 0xff, 0x80, 0x08, 0x3a, 0x6f, 0xa8, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, 0x51, 0xff, 0xff, 0xf0, 0x04, 0x7f, 0x80, 0x08, -0x04, 0x6f, 0x80, 0x09, 0x14, 0x7f, 0x80, 0x00, 0x14, 0x6f, 0x80, 0x01, 0x04, 0x7f, 0x80, 0x0a, -0x04, 0x6f, 0x80, 0x0b, 0x00, 0x8f, 0x80, 0x38, 0x49, 0xff, 0xfe, 0x02, 0x4e, 0x02, 0x00, 0x74, -0x4e, 0x73, 0x00, 0x06, 0x3c, 0x7f, 0xf9, 0x6a, 0x48, 0x00, 0x00, 0x16, 0x5c, 0xf3, 0x81, 0x01, -0x4e, 0xf2, 0x00, 0x08, 0x44, 0x10, 0x00, 0x01, 0x3c, 0x1f, 0xf9, 0x6a, 0x48, 0x00, 0x00, 0x0c, -0x3e, 0x1f, 0xe5, 0xa8, 0x5c, 0xf3, 0x82, 0x01, 0x4e, 0xf2, 0x00, 0x22, 0x44, 0x30, 0x00, 0x02, -0x14, 0x30, 0x80, 0x00, 0x4e, 0x63, 0x00, 0x06, 0x3c, 0x6f, 0xf9, 0x6b, 0x48, 0x00, 0x00, 0x1e, -0x5c, 0xf3, 0x01, 0x01, 0x4e, 0xf2, 0x00, 0x08, 0x45, 0xe0, 0x00, 0x01, 0x3d, 0xef, 0xf9, 0x6b, -0x48, 0x00, 0x00, 0x14, 0x3e, 0x1f, 0xe5, 0xac, 0x5c, 0xf3, 0x02, 0x01, 0x4e, 0xf2, 0x00, 0x08, -0x44, 0x00, 0x00, 0x02, 0x14, 0x00, 0x80, 0x00, 0x48, 0x00, 0x00, 0x08, 0x44, 0x00, 0x00, 0x00, -0x14, 0x00, 0x80, 0x00, 0x48, 0x00, 0x00, 0x3a, 0x04, 0x0f, 0x80, 0x0c, 0x49, 0xff, 0xfd, 0x98, -0x4e, 0x02, 0x00, 0x32, 0x04, 0x0f, 0x80, 0x0d, 0x49, 0xff, 0xfd, 0x70, 0x4e, 0x02, 0x00, 0x2c, -0x04, 0x1f, 0x80, 0x0f, 0x58, 0x04, 0x00, 0x00, 0x49, 0xff, 0xfe, 0xb2, 0x4e, 0x02, 0x00, 0x24, -0x3e, 0x6f, 0xe5, 0xd4, 0x49, 0xff, 0xfe, 0xdc, 0x14, 0x6f, 0x80, 0x00, 0x3e, 0x6f, 0xe5, 0xd8, -0x3e, 0x1f, 0xe5, 0xc0, 0x3e, 0x2f, 0xe5, 0xc4, 0x3e, 0x3f, 0xe5, 0xc8, 0x3e, 0x4f, 0xe5, 0xcc, -0x3e, 0x5f, 0xe5, 0xd0, 0x14, 0x6f, 0x80, 0x01, 0x3e, 0x0f, 0xe5, 0xbc, 0x3e, 0x6f, 0xe5, 0xdc, -0x14, 0x6f, 0x80, 0x02, 0x49, 0x00, 0x01, 0x92, 0x49, 0xff, 0xfd, 0x20, 0x44, 0x00, 0x00, 0x01, -0x48, 0x00, 0x00, 0x04, 0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x10, 0x3a, 0x6f, 0xa0, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xdc, 0x49, 0xf7, 0xc9, 0xf0, -0x44, 0x00, 0x00, 0x00, 0x58, 0x10, 0x00, 0x00, 0x49, 0xf7, 0xa8, 0x4e, 0x44, 0x60, 0x00, 0x00, -0x44, 0x00, 0x00, 0x40, 0x58, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x20, 0x40, 0x30, 0x04, 0x08, -0x44, 0x40, 0x50, 0x00, 0x58, 0x53, 0x00, 0x00, 0x14, 0x6f, 0x80, 0x00, 0x14, 0x6f, 0x80, 0x01, -0x14, 0x6f, 0x80, 0x02, 0x14, 0x6f, 0x80, 0x03, 0x14, 0x6f, 0x80, 0x04, 0x14, 0x6f, 0x80, 0x05, -0x14, 0x6f, 0x80, 0x06, 0x14, 0x6f, 0x80, 0x07, 0x49, 0xff, 0xff, 0x46, 0x4e, 0x02, 0x00, 0x74, -0x44, 0x00, 0xff, 0xff, 0x49, 0xf7, 0xa7, 0x3c, 0x44, 0x00, 0x00, 0x0f, 0x49, 0xf7, 0xa7, 0x4a, -0x44, 0x00, 0x00, 0x01, 0x49, 0xf7, 0xa9, 0xee, 0x3c, 0x0d, 0xf9, 0x62, 0x44, 0x10, 0x00, 0x03, -0x44, 0x70, 0x38, 0xf4, 0x4c, 0x00, 0xc0, 0x2a, 0x46, 0x45, 0x00, 0x00, 0x04, 0x32, 0x01, 0x63, -0x58, 0x13, 0x00, 0x00, 0x51, 0xe1, 0x80, 0x01, 0x40, 0x2f, 0x00, 0x13, 0x58, 0x31, 0x00, 0x00, -0x58, 0x03, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, 0x58, 0x13, 0x00, 0x00, 0x44, 0x20, 0x0f, 0xff, -0x44, 0x30, 0x00, 0x18, 0x44, 0x00, 0x00, 0x01, 0x4b, 0xe0, 0x1c, 0x01, 0x2e, 0x17, 0xe5, 0x8c, -0x46, 0x0a, 0x50, 0x08, 0x46, 0x3a, 0x00, 0x00, 0x40, 0x50, 0xa8, 0x08, 0x40, 0x42, 0x80, 0x00, -0x14, 0x41, 0x80, 0x61, 0x48, 0x00, 0x00, 0x34, 0x44, 0x20, 0x02, 0x88, 0x58, 0x31, 0x00, 0x00, -0x58, 0x13, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, 0x58, 0x13, 0x00, 0x00, -0x44, 0x20, 0x0f, 0xff, 0x44, 0x30, 0x00, 0x18, 0x44, 0x00, 0x00, 0x01, 0x4b, 0xe0, 0x1c, 0x01, -0x58, 0x13, 0x00, 0x00, 0x44, 0x20, 0x0f, 0xff, 0x44, 0x30, 0x00, 0x34, 0x44, 0x00, 0x00, 0x02, -0x4b, 0xe0, 0x1c, 0x01, 0x44, 0x10, 0x00, 0x01, 0x44, 0x20, 0x0f, 0xff, 0x44, 0x30, 0x00, 0x18, -0x44, 0x00, 0x00, 0x02, 0x4b, 0xe0, 0x1c, 0x01, 0x44, 0x00, 0x00, 0x02, 0x58, 0x10, 0x00, 0x00, -0x44, 0x20, 0x0f, 0xff, 0x40, 0x30, 0x0c, 0x08, 0x4b, 0xe0, 0x1c, 0x01, 0x44, 0x00, 0x00, 0x00, -0x49, 0xf7, 0xa9, 0x88, 0x51, 0xff, 0x80, 0x24, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0x98, 0x3c, 0x51, 0xff, 0xff, 0xf4, 0x04, 0x6f, 0x80, 0x01, 0x54, 0x00, 0x00, 0xff, -0x42, 0x43, 0x7c, 0x08, 0x14, 0x4f, 0x80, 0x01, 0x04, 0x5f, 0x80, 0x01, 0x46, 0x4a, 0x00, 0x00, -0x42, 0x52, 0xc0, 0x09, 0x14, 0x5f, 0x80, 0x01, 0x10, 0x0f, 0x80, 0x05, 0x04, 0x0f, 0x80, 0x01, -0x14, 0x02, 0x00, 0x65, 0x04, 0x52, 0x00, 0x65, 0x46, 0x0a, 0x00, 0x00, 0x14, 0x5f, 0x80, 0x01, -0x04, 0x5f, 0x80, 0x01, 0x4e, 0x55, 0xff, 0xf8, 0x04, 0x00, 0x00, 0x65, 0x14, 0x0f, 0x80, 0x01, -0x04, 0x5f, 0x80, 0x01, 0x04, 0x4f, 0x80, 0x01, 0x04, 0x0f, 0x80, 0x01, 0x40, 0x42, 0x14, 0x09, -0x42, 0x52, 0x9c, 0x0b, 0x54, 0x42, 0x00, 0x03, 0x54, 0x00, 0x00, 0x1f, 0x10, 0x51, 0x80, 0x00, -0x10, 0x40, 0x80, 0x00, 0x10, 0x01, 0x00, 0x00, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0x98, 0x04, -0x4a, 0x00, 0x78, 0x20, 0x51, 0xff, 0xff, 0xf8, 0x44, 0x30, 0x00, 0x00, 0x14, 0x3f, 0x80, 0x01, -0x46, 0x2a, 0x00, 0x00, 0x04, 0x01, 0x00, 0x64, 0x54, 0x10, 0x80, 0xff, 0x14, 0x0f, 0x80, 0x01, -0x4e, 0x12, 0x00, 0x08, 0x04, 0x4f, 0x80, 0x01, 0x58, 0x02, 0x00, 0x10, 0x48, 0x00, 0x00, 0x06, -0x04, 0x5f, 0x80, 0x01, 0x42, 0x02, 0x90, 0x09, 0x14, 0x0f, 0x80, 0x01, 0x46, 0x0a, 0x00, 0x00, -0x04, 0x2f, 0x80, 0x01, 0x14, 0x20, 0x00, 0x64, 0x44, 0x00, 0x00, 0x01, 0x51, 0xff, 0x80, 0x08, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0x3c, 0x51, 0xff, 0xff, 0xf8, 0x04, 0x6f, 0x80, 0x01, -0x54, 0x00, 0x00, 0x03, 0x40, 0x63, 0x08, 0x09, 0x40, 0x63, 0x08, 0x08, 0x40, 0x73, 0x00, 0x04, -0x14, 0x7f, 0x80, 0x01, 0x54, 0x10, 0x80, 0x03, 0x04, 0x0f, 0x80, 0x01, 0x44, 0x6f, 0xff, 0xf3, -0x40, 0x00, 0x18, 0x02, 0x40, 0x70, 0x88, 0x08, 0x40, 0x10, 0x1c, 0x04, 0x14, 0x1f, 0x80, 0x01, -0x54, 0x61, 0x00, 0x07, 0x04, 0x1f, 0x80, 0x01, 0x44, 0x7f, 0xff, 0x8f, 0x40, 0x00, 0x9c, 0x02, -0x40, 0x23, 0x10, 0x08, 0x40, 0x60, 0x08, 0x04, 0x14, 0x6f, 0x80, 0x01, 0x54, 0x31, 0x80, 0x01, -0x04, 0x2f, 0x80, 0x01, 0x42, 0x01, 0x1c, 0x09, 0x40, 0x71, 0x9c, 0x08, 0x40, 0x60, 0x1c, 0x04, -0x14, 0x6f, 0x80, 0x01, 0x54, 0x32, 0x00, 0x7f, 0x04, 0x0f, 0x80, 0x01, 0x44, 0x2f, 0x80, 0xff, -0x40, 0x10, 0x08, 0x02, 0x40, 0x71, 0xa0, 0x08, 0x40, 0x40, 0x9c, 0x04, 0x14, 0x4f, 0x80, 0x01, -0x54, 0x62, 0x80, 0x7f, 0x04, 0x3f, 0x80, 0x01, 0x40, 0x23, 0x3c, 0x08, 0x46, 0x6f, 0xfc, 0x07, -0x58, 0x63, 0x0f, 0xff, 0x40, 0x01, 0x98, 0x02, 0x40, 0x10, 0x08, 0x04, 0x14, 0x1f, 0x80, 0x01, -0x00, 0x7f, 0x80, 0x10, 0x04, 0x5f, 0x80, 0x01, 0x40, 0x43, 0xd8, 0x08, 0x40, 0x32, 0xa8, 0x08, -0x40, 0x31, 0xa8, 0x09, 0x40, 0x21, 0x90, 0x04, 0x14, 0x2f, 0x80, 0x01, 0x46, 0x0a, 0x00, 0x00, -0x04, 0x1f, 0x80, 0x01, 0x14, 0x10, 0x00, 0x58, 0x44, 0x00, 0x00, 0x01, 0x51, 0xff, 0x80, 0x08, -0x3a, 0x6f, 0x9c, 0x04, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0x3c, 0x46, 0x6a, 0x00, 0x00, -0x04, 0x63, 0x00, 0x59, 0x14, 0x60, 0x00, 0x00, 0x46, 0x0a, 0x00, 0x00, 0x04, 0x60, 0x00, 0x5a, -0x46, 0x0a, 0x00, 0x00, 0x14, 0x60, 0x80, 0x00, 0x04, 0x10, 0x00, 0x5b, 0x46, 0x0a, 0x00, 0x00, -0x14, 0x11, 0x00, 0x00, 0x04, 0x20, 0x00, 0x5c, 0x46, 0x0a, 0x00, 0x00, 0x14, 0x21, 0x80, 0x00, -0x04, 0x10, 0x00, 0x5d, 0x58, 0x20, 0x00, 0x00, 0x14, 0x12, 0x00, 0x00, 0x04, 0x31, 0x00, 0x5e, -0x46, 0x0a, 0x00, 0x00, 0x14, 0x32, 0x80, 0x00, 0x04, 0x10, 0x00, 0x5f, 0x04, 0x2f, 0x80, 0x01, -0x58, 0x50, 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, 0x04, 0x32, 0x80, 0x60, 0x04, 0x4f, 0x80, 0x02, -0x46, 0x0a, 0x00, 0x00, 0x14, 0x32, 0x00, 0x00, 0x04, 0x10, 0x00, 0x61, 0x04, 0x2f, 0x80, 0x03, -0x44, 0x00, 0x00, 0x01, 0x14, 0x11, 0x00, 0x00, 0x3a, 0x6f, 0x98, 0x04, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0xf4, 0x54, 0x70, 0x80, 0xff, 0x54, 0x61, 0x00, 0xff, -0x58, 0x13, 0x00, 0x00, 0x54, 0x80, 0x00, 0xff, 0x58, 0x03, 0x80, 0x00, 0x54, 0x91, 0x80, 0xff, -0x49, 0xf7, 0xa7, 0x8e, 0x44, 0x50, 0x0f, 0xff, 0x4c, 0x02, 0xc0, 0x06, 0x44, 0x00, 0x00, 0x00, -0x48, 0x00, 0x00, 0x4a, 0x04, 0x5f, 0x80, 0x01, 0x54, 0x13, 0x80, 0x03, 0x42, 0x42, 0xfc, 0x08, -0x14, 0x4f, 0x80, 0x01, 0x54, 0x24, 0x80, 0x01, 0x04, 0x3f, 0x80, 0x01, 0x43, 0xe1, 0xc0, 0x08, -0x15, 0xef, 0x80, 0x01, 0x10, 0x8f, 0x80, 0x05, 0x40, 0x51, 0x1c, 0x08, 0x04, 0x7f, 0x80, 0x01, -0x41, 0xe0, 0x94, 0x08, 0x42, 0x43, 0x9c, 0x09, 0x40, 0x32, 0x14, 0x04, 0x14, 0x3f, 0x80, 0x01, -0x44, 0x1f, 0xff, 0x9f, 0x04, 0x0f, 0x80, 0x01, 0x40, 0x70, 0x04, 0x02, 0x40, 0x73, 0xf8, 0x04, -0x14, 0x7f, 0x80, 0x01, 0x54, 0x63, 0x00, 0x1f, 0x04, 0x5f, 0x80, 0x01, 0x46, 0x3a, 0x00, 0x00, -0x40, 0x42, 0x94, 0x09, 0x40, 0x42, 0x14, 0x08, 0x40, 0x62, 0x18, 0x04, 0x14, 0x6f, 0x80, 0x01, -0x58, 0x31, 0x81, 0x94, 0x04, 0x0f, 0x80, 0x01, 0x58, 0x11, 0x80, 0x00, 0x14, 0x01, 0x80, 0x00, -0x05, 0xe0, 0x80, 0x00, 0x15, 0xef, 0x80, 0x01, 0x04, 0x0f, 0x80, 0x01, 0x4e, 0x05, 0xff, 0xfa, -0x44, 0x00, 0x00, 0x01, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xa0, 0xbc, 0x51, 0xff, 0xff, 0xf8, 0x54, 0x60, 0x00, 0xff, 0x54, 0x70, 0x80, 0xff, -0x58, 0x13, 0x80, 0x00, 0x58, 0x03, 0x00, 0x00, 0x54, 0x81, 0x00, 0xff, 0x49, 0xf7, 0xa7, 0x28, -0x44, 0x50, 0x0f, 0xff, 0x4c, 0x02, 0xc0, 0x08, 0x4e, 0x63, 0x00, 0x42, 0x44, 0x50, 0x00, 0x02, -0x4c, 0x72, 0xc0, 0x3e, 0x04, 0x1f, 0x80, 0x01, 0x46, 0x2f, 0xfe, 0x0f, 0x54, 0x43, 0x80, 0x1f, -0x58, 0x21, 0x0f, 0xff, 0x40, 0x32, 0x40, 0x08, 0x40, 0x70, 0x88, 0x02, 0x40, 0x73, 0x8c, 0x04, -0x14, 0x7f, 0x80, 0x01, 0x54, 0x03, 0x00, 0x03, 0x05, 0xef, 0x80, 0x01, 0x42, 0x4f, 0x54, 0x09, -0x42, 0x42, 0x58, 0x09, 0x40, 0x50, 0x54, 0x08, 0x40, 0x32, 0x14, 0x04, 0x14, 0x3f, 0x80, 0x01, -0x04, 0x0f, 0x80, 0x01, 0x54, 0x14, 0x00, 0x01, 0x42, 0x60, 0x5c, 0x09, 0x41, 0xe0, 0xdc, 0x08, -0x40, 0x53, 0x78, 0x04, 0x14, 0x5f, 0x80, 0x01, 0x46, 0x6a, 0x00, 0x00, 0x04, 0x4f, 0x80, 0x01, -0x14, 0x43, 0x00, 0x09, 0x49, 0xf7, 0xab, 0x14, 0x04, 0x33, 0x00, 0x09, 0x14, 0x3f, 0x80, 0x01, -0x04, 0x0f, 0x80, 0x01, 0x54, 0x00, 0x0f, 0xff, 0x48, 0x00, 0x00, 0x04, 0x44, 0x00, 0x0f, 0xff, -0x51, 0xff, 0x80, 0x08, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x46, 0x00, 0x01, 0x17, -0x2e, 0x10, 0x02, 0x86, 0x4e, 0x12, 0x00, 0x06, 0x44, 0x20, 0x00, 0x00, 0x3e, 0x20, 0x02, 0x86, -0x4a, 0x00, 0x78, 0x20, 0x54, 0x00, 0x00, 0xff, 0x40, 0x20, 0x08, 0x09, 0x40, 0x11, 0x00, 0x10, -0x4e, 0x16, 0x00, 0x06, 0x44, 0x0f, 0xff, 0xfd, 0x48, 0x00, 0x00, 0x56, 0x44, 0x30, 0x00, 0x01, -0x54, 0x00, 0x00, 0x03, 0x4c, 0x11, 0xc0, 0x08, 0x40, 0x01, 0x00, 0x00, 0x50, 0x00, 0x7f, 0xff, -0x48, 0x00, 0x00, 0x14, 0x5e, 0xf0, 0x80, 0x05, 0x4e, 0xf2, 0x00, 0x14, 0x44, 0x20, 0x00, 0x03, -0x42, 0x00, 0x08, 0x24, 0x42, 0x50, 0x88, 0x24, 0x50, 0x30, 0x00, 0x05, 0x40, 0x41, 0x88, 0x0e, -0x40, 0x12, 0x84, 0x0a, 0x40, 0x02, 0x04, 0x00, 0x40, 0x00, 0x00, 0x10, 0x48, 0x00, 0x00, 0x34, -0x5e, 0xf0, 0x80, 0x09, 0x4e, 0xf2, 0x00, 0x0e, 0x44, 0x30, 0x00, 0x03, 0x42, 0x50, 0x8c, 0x24, -0x50, 0x12, 0x80, 0x02, 0x40, 0x40, 0x88, 0x0a, 0x50, 0x02, 0x00, 0x03, 0x48, 0xff, 0xff, 0xee, -0x5e, 0xf0, 0x80, 0x11, 0x4e, 0xf2, 0x00, 0x0e, 0x44, 0x50, 0x00, 0x0b, 0x42, 0x40, 0x94, 0x24, -0x50, 0x02, 0x00, 0x0f, 0x40, 0x20, 0x14, 0x0a, 0x50, 0x01, 0x00, 0x07, 0x48, 0x00, 0x00, 0x14, -0x5e, 0xf0, 0x80, 0x21, 0x4e, 0xf3, 0x00, 0x06, 0x44, 0x00, 0x00, 0x0f, 0x48, 0x00, 0x00, 0x0c, -0x44, 0x00, 0x00, 0x05, 0x42, 0x20, 0x80, 0x24, 0x50, 0x31, 0x00, 0x10, 0x40, 0x11, 0x94, 0x0a, -0x50, 0x00, 0x80, 0x0a, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xcc, -0x2e, 0x07, 0xe4, 0x0e, 0x4e, 0x03, 0x02, 0xee, 0x3e, 0x0f, 0xe2, 0x1c, 0x00, 0x30, 0x00, 0x25, -0x00, 0x40, 0x00, 0x24, 0x3e, 0x1f, 0xd6, 0x28, 0x20, 0xa0, 0x00, 0x27, 0x20, 0x90, 0x00, 0x22, -0x2e, 0x57, 0xe6, 0x1c, 0x3a, 0x00, 0x84, 0x00, 0x50, 0x8f, 0x80, 0x28, 0x3c, 0x7d, 0xf5, 0x89, -0x52, 0x62, 0x00, 0x00, 0x53, 0xc1, 0x80, 0x00, 0x50, 0x2f, 0x80, 0x18, 0x14, 0x5f, 0x80, 0x05, -0x3a, 0x01, 0x04, 0x20, 0x14, 0x7f, 0x80, 0x09, 0x10, 0x64, 0x00, 0x03, 0x11, 0xc4, 0x00, 0x00, -0x10, 0xa4, 0x00, 0x01, 0x10, 0x94, 0x00, 0x02, 0x3c, 0x4d, 0xf5, 0x88, 0x04, 0x2f, 0x80, 0x05, -0x44, 0x30, 0x00, 0x01, 0x14, 0x4f, 0x80, 0x08, 0x4c, 0x21, 0xc0, 0x08, 0x3e, 0x9f, 0xe3, 0xc8, -0x14, 0x9f, 0x80, 0x04, 0x48, 0x00, 0x00, 0x1c, 0x04, 0xaf, 0x80, 0x05, 0x44, 0x50, 0x00, 0x02, -0x4c, 0xa2, 0xc0, 0x08, 0x3e, 0x6f, 0xe3, 0xd0, 0x14, 0x6f, 0x80, 0x04, 0x48, 0x00, 0x00, 0x10, -0x04, 0x4f, 0x80, 0x05, 0x3f, 0xef, 0xe3, 0xe0, 0x56, 0x22, 0x00, 0x03, 0x3e, 0x3f, 0xe3, 0xd8, -0x40, 0x71, 0x88, 0x1a, 0x40, 0x7f, 0x08, 0x1b, 0x14, 0x7f, 0x80, 0x04, 0x44, 0x10, 0x00, 0x00, -0x3e, 0x0f, 0xe3, 0xe8, 0x14, 0x1f, 0x80, 0x03, 0x14, 0x0f, 0x80, 0x02, 0x50, 0x8f, 0x80, 0x20, -0x3e, 0xaf, 0xe3, 0xb4, 0x59, 0xc0, 0x80, 0x00, 0x04, 0x9f, 0x80, 0x05, 0x44, 0x50, 0x00, 0x01, -0x4c, 0x92, 0x80, 0xc4, 0x04, 0x1f, 0x80, 0x04, 0x3e, 0x6f, 0xe3, 0xbc, 0x00, 0x30, 0x80, 0x00, -0x00, 0x20, 0x80, 0x01, 0x40, 0x71, 0x8c, 0x00, 0x40, 0x43, 0x98, 0x00, 0x20, 0x72, 0x00, 0x01, -0x51, 0xef, 0x80, 0x28, 0x38, 0x43, 0x0d, 0x10, 0x38, 0x6f, 0x09, 0x00, 0x5e, 0xf3, 0xff, 0xf7, -0x4e, 0xf2, 0x00, 0x06, 0x44, 0x30, 0x00, 0x00, 0x48, 0x00, 0x00, 0x26, 0x5e, 0xf3, 0xff, 0xfc, -0x4e, 0xf2, 0x00, 0x06, 0x44, 0x30, 0x00, 0x01, 0x48, 0x00, 0x00, 0x1e, 0x5e, 0xf3, 0xff, 0xff, -0x4e, 0xf2, 0x00, 0x06, 0x44, 0x30, 0x00, 0x02, 0x48, 0x00, 0x00, 0x16, 0x4e, 0x76, 0x00, 0x06, -0x44, 0x30, 0x00, 0x04, 0x48, 0x00, 0x00, 0x10, 0x5e, 0xf3, 0x80, 0x13, 0x4e, 0xf3, 0x00, 0x06, -0x44, 0x30, 0x00, 0xfc, 0x48, 0x00, 0x00, 0x08, 0x3e, 0x5f, 0xe3, 0xf8, 0x40, 0x03, 0x94, 0x00, -0x00, 0x30, 0x7f, 0xff, 0x40, 0x11, 0x08, 0x00, 0x50, 0x9f, 0x80, 0x28, 0x41, 0xe4, 0x84, 0x00, -0x00, 0x9f, 0x00, 0x01, 0x40, 0x24, 0x98, 0x00, 0x40, 0x21, 0x00, 0x10, 0x5e, 0xf1, 0x7f, 0xf7, -0x4e, 0xf2, 0x00, 0x06, 0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x26, 0x5e, 0xf1, 0x7f, 0xfc, -0x4e, 0xf2, 0x00, 0x06, 0x44, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x1e, 0x5e, 0xf1, 0x7f, 0xff, -0x4e, 0xf2, 0x00, 0x06, 0x44, 0x00, 0x00, 0x02, 0x48, 0x00, 0x00, 0x16, 0x4e, 0x26, 0x00, 0x06, -0x44, 0x00, 0x00, 0x04, 0x48, 0x00, 0x00, 0x10, 0x5e, 0xf1, 0x00, 0x13, 0x4e, 0xf3, 0x00, 0x06, -0x44, 0x00, 0x00, 0xfc, 0x48, 0x00, 0x00, 0x08, 0x3e, 0x0f, 0xe3, 0xf8, 0x40, 0x51, 0x00, 0x00, -0x00, 0x02, 0xff, 0xff, 0x41, 0xe0, 0x0c, 0x00, 0x54, 0x0f, 0x00, 0xff, 0x14, 0x4f, 0x80, 0x01, -0x49, 0xff, 0xfe, 0xb2, 0x40, 0x54, 0x9c, 0x00, 0x40, 0x12, 0x80, 0x01, 0x04, 0x9f, 0x80, 0x01, -0x00, 0x05, 0x00, 0x01, 0x3e, 0x3f, 0xe3, 0xf0, 0x3e, 0x4f, 0xe3, 0xf4, 0x00, 0x55, 0x00, 0x00, -0x40, 0x2e, 0x0c, 0x00, 0x40, 0x7e, 0x10, 0x00, 0x54, 0x10, 0x80, 0xff, 0x00, 0x41, 0x00, 0x00, -0x40, 0x63, 0x24, 0x00, 0x40, 0x30, 0x80, 0x01, 0x04, 0x9f, 0x80, 0x03, 0x00, 0x03, 0x80, 0x00, -0x40, 0x53, 0x14, 0x01, 0x54, 0x31, 0x80, 0xff, 0x50, 0x7f, 0x80, 0x18, 0x38, 0x63, 0xa4, 0x08, -0x40, 0x22, 0x90, 0x00, 0x40, 0x41, 0x80, 0x00, 0x40, 0x03, 0xa4, 0x00, 0x50, 0x7f, 0x80, 0x24, -0x10, 0x10, 0x00, 0x01, 0x38, 0x23, 0xf0, 0x08, 0x10, 0x44, 0x00, 0x00, 0x04, 0x4f, 0x80, 0x02, -0x10, 0x52, 0x00, 0x00, 0x10, 0x32, 0x00, 0x01, 0x04, 0x3f, 0x80, 0x04, 0x50, 0x61, 0x80, 0x02, -0x14, 0x6f, 0x80, 0x04, 0x48, 0x00, 0x00, 0x20, 0x05, 0xef, 0x80, 0x03, 0x3e, 0x6f, 0xe3, 0xbc, -0x40, 0x5f, 0x18, 0x00, 0x20, 0x62, 0x80, 0x01, 0x20, 0x22, 0x80, 0x00, 0x00, 0x15, 0x00, 0x00, -0x00, 0x35, 0x00, 0x01, 0x04, 0x9f, 0x80, 0x02, 0x40, 0x41, 0x04, 0x01, 0x40, 0x03, 0x0c, 0x01, -0x50, 0x7f, 0x80, 0x24, 0x10, 0x44, 0x80, 0x00, 0x10, 0x04, 0x80, 0x01, 0x38, 0x23, 0xf0, 0x08, -0x10, 0x64, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x4e, 0x07, 0x00, 0x06, 0x44, 0x00, 0x00, 0x00, -0x48, 0x00, 0x00, 0x08, 0x5e, 0xf0, 0x7f, 0xc1, 0x4e, 0xf2, 0x00, 0x06, 0x44, 0x0f, 0xff, 0xc1, -0x10, 0x04, 0x00, 0x00, 0x04, 0x4f, 0x80, 0x03, 0x04, 0x0f, 0x80, 0x02, 0x50, 0x92, 0x00, 0x02, -0x50, 0x70, 0x00, 0x02, 0x51, 0xce, 0x00, 0x01, 0x44, 0x50, 0x00, 0x04, 0x50, 0x84, 0x00, 0x01, -0x14, 0x9f, 0x80, 0x03, 0x50, 0xa5, 0x00, 0x02, 0x14, 0x7f, 0x80, 0x02, 0x4d, 0xc2, 0xfe, 0xf6, -0x50, 0x8f, 0x80, 0x24, 0x20, 0x54, 0x00, 0x03, 0x3e, 0x3f, 0xfa, 0xc0, 0x14, 0x5f, 0x80, 0x02, -0x44, 0x50, 0x00, 0x00, 0x20, 0xa4, 0x00, 0x00, 0x3e, 0x6f, 0xfa, 0xcc, 0x14, 0xaf, 0x80, 0x03, -0x50, 0x4f, 0x80, 0x2c, 0x20, 0x14, 0x00, 0x01, 0x21, 0xc4, 0x00, 0x02, 0x14, 0x1f, 0x80, 0x04, -0x59, 0xee, 0x00, 0x00, 0x58, 0xa2, 0x80, 0x00, 0x44, 0x90, 0x00, 0x40, 0x44, 0x80, 0x00, 0x3f, -0x59, 0xc1, 0x80, 0x00, 0x04, 0x0f, 0x80, 0x03, 0x04, 0x7f, 0x80, 0x04, 0x04, 0x2f, 0x80, 0x02, -0x10, 0x02, 0x00, 0x00, 0x11, 0xe2, 0x00, 0x02, 0x10, 0x72, 0x00, 0x01, 0x10, 0x22, 0x00, 0x03, -0x54, 0x72, 0x80, 0xff, 0x58, 0x22, 0x00, 0x00, 0x44, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, -0x40, 0x13, 0x80, 0x00, 0x40, 0x00, 0x80, 0x10, 0x10, 0x01, 0x00, 0x00, 0x4e, 0x05, 0x00, 0x0e, -0x5e, 0xf0, 0x00, 0x40, 0x4e, 0xf3, 0x00, 0x04, 0x10, 0x81, 0x00, 0x00, 0x4e, 0x33, 0x00, 0x16, -0x10, 0x33, 0x00, 0x00, 0x48, 0x00, 0x00, 0x12, 0x52, 0x10, 0x00, 0x00, 0x54, 0x00, 0x80, 0xff, -0x4e, 0x33, 0x00, 0x0a, 0x10, 0x03, 0x00, 0x00, 0x5c, 0xf0, 0x00, 0x41, 0x4e, 0xf3, 0x00, 0x04, -0x10, 0x93, 0x00, 0x00, 0x10, 0xa1, 0x00, 0x00, 0x50, 0x31, 0x80, 0x01, 0x54, 0x31, 0x80, 0xff, -0x44, 0x00, 0x00, 0x04, 0x50, 0x21, 0x00, 0x01, 0x4c, 0x30, 0x7f, 0xd2, 0x20, 0x72, 0x00, 0x01, -0x20, 0x22, 0x00, 0x02, 0x40, 0x03, 0x98, 0x08, 0x40, 0x11, 0x30, 0x08, 0x20, 0x32, 0x00, 0x00, -0x20, 0x22, 0x00, 0x03, 0x40, 0x70, 0x04, 0x04, 0x40, 0x03, 0x8c, 0x04, 0x40, 0x11, 0x48, 0x08, -0x40, 0x70, 0x04, 0x04, 0x50, 0x52, 0x80, 0x01, 0x44, 0x20, 0x00, 0x03, 0x1c, 0x7e, 0x00, 0x01, -0x50, 0x63, 0x00, 0x01, 0x4c, 0x51, 0x7f, 0xa0, 0x46, 0x66, 0x02, 0x00, 0x04, 0x03, 0x01, 0x48, -0x3c, 0x5d, 0xfe, 0xb1, 0x40, 0x90, 0x60, 0x09, 0x40, 0x94, 0xe0, 0x08, 0x40, 0x14, 0x94, 0x04, -0x14, 0x13, 0x01, 0x48, 0x46, 0x96, 0x02, 0x01, 0x04, 0x74, 0x81, 0x48, 0x40, 0x33, 0xe0, 0x09, -0x40, 0x31, 0xe0, 0x08, 0x40, 0x01, 0x94, 0x04, 0x14, 0x04, 0x81, 0x48, 0x46, 0x66, 0x02, 0x00, -0x58, 0x63, 0x00, 0xfc, 0x04, 0x23, 0x00, 0x00, 0x2e, 0x07, 0xfa, 0xcd, 0x44, 0x7f, 0xc0, 0xff, -0x40, 0x51, 0x1c, 0x02, 0x40, 0x30, 0x20, 0x08, 0x40, 0x41, 0x94, 0x04, 0x14, 0x43, 0x00, 0x00, -0x46, 0x9f, 0xff, 0x03, 0x04, 0x13, 0x00, 0x00, 0x58, 0x94, 0x8f, 0xff, 0x40, 0x70, 0xa4, 0x02, -0x40, 0x30, 0x38, 0x08, 0x40, 0x21, 0x9c, 0x04, 0x14, 0x23, 0x00, 0x00, 0x50, 0x5f, 0x80, 0x20, -0x00, 0x42, 0x80, 0x01, 0x00, 0x02, 0x80, 0x02, 0x00, 0x72, 0x80, 0x03, 0x50, 0x32, 0x7f, 0xff, -0x50, 0x90, 0x7f, 0xff, 0x54, 0x11, 0x80, 0xff, 0x54, 0x54, 0x80, 0xff, 0x40, 0x00, 0x84, 0x00, -0x40, 0x22, 0xa8, 0x08, 0x50, 0x33, 0xff, 0xff, 0x40, 0x90, 0x08, 0x04, 0x54, 0x51, 0x80, 0xff, -0x44, 0x44, 0x02, 0x01, 0x46, 0x66, 0x02, 0x00, 0x40, 0x14, 0x90, 0x04, 0x40, 0x72, 0xcc, 0x08, -0x04, 0x03, 0x01, 0x46, 0x40, 0x50, 0x9c, 0x04, 0x46, 0x7f, 0x80, 0x00, 0x40, 0x90, 0x1c, 0x02, -0x40, 0x22, 0xa4, 0x04, 0x14, 0x23, 0x01, 0x46, 0x46, 0x96, 0x02, 0x01, 0x04, 0x04, 0x81, 0x46, -0x40, 0x30, 0x1c, 0x02, 0x40, 0x42, 0x8c, 0x04, 0x14, 0x44, 0x81, 0x46, 0x2e, 0x0f, 0xe3, 0xe8, -0x5e, 0xf0, 0x7f, 0xff, 0x4e, 0xf2, 0x00, 0x0c, 0x44, 0x60, 0x00, 0x02, 0x40, 0x40, 0x18, 0x56, -0x50, 0x52, 0x00, 0x0f, 0x40, 0x12, 0x80, 0x10, 0x48, 0x00, 0x00, 0x0e, 0x5e, 0xf0, 0x00, 0x12, -0x4e, 0xf3, 0x00, 0x08, 0x44, 0x10, 0x00, 0x0f, 0x58, 0x50, 0x80, 0x00, 0x48, 0x00, 0x00, 0x0c, -0x44, 0x10, 0x00, 0x0f, 0x44, 0x20, 0x00, 0x02, 0x40, 0x30, 0x08, 0x16, 0x50, 0x91, 0x80, 0x06, -0x40, 0x54, 0x80, 0x10, 0x2e, 0x2f, 0xe3, 0xea, 0x5e, 0xf1, 0x00, 0x10, 0x4e, 0xf3, 0x00, 0x06, -0x44, 0x40, 0x00, 0x0f, 0x48, 0x00, 0x00, 0x0a, 0x44, 0x90, 0x00, 0x02, 0x40, 0x61, 0x24, 0x56, -0x50, 0x43, 0x00, 0x07, 0x40, 0x42, 0x00, 0x10, 0x2e, 0x2f, 0xe3, 0xec, 0x5e, 0xf1, 0x00, 0x10, -0x4e, 0xf3, 0x00, 0x06, 0x44, 0x30, 0x00, 0x0f, 0x48, 0x00, 0x00, 0x0a, 0x44, 0x60, 0x00, 0x02, -0x40, 0x01, 0x18, 0x56, 0x50, 0x20, 0x00, 0x07, 0x40, 0x31, 0x00, 0x10, 0x2e, 0x2f, 0xe3, 0xee, -0x5e, 0xf1, 0x00, 0x1e, 0x4e, 0xf3, 0x00, 0x06, 0x44, 0x20, 0x00, 0x0f, 0x48, 0x00, 0x00, 0x08, -0x44, 0x00, 0x00, 0x02, 0x40, 0x21, 0x00, 0x16, 0x40, 0x21, 0x00, 0x10, 0x44, 0x90, 0x00, 0x00, -0x42, 0x52, 0xa4, 0x00, 0x42, 0x60, 0xa4, 0x00, 0x42, 0x42, 0x24, 0x00, 0x40, 0x02, 0x90, 0x08, -0x40, 0x50, 0x18, 0x04, 0x42, 0x61, 0xa4, 0x00, 0x40, 0x02, 0x20, 0x08, 0x40, 0x42, 0x80, 0x04, -0x42, 0x21, 0x24, 0x00, 0x40, 0x03, 0x30, 0x08, 0x46, 0x16, 0x02, 0x00, 0x40, 0x32, 0x00, 0x04, -0x40, 0x91, 0x40, 0x08, 0x04, 0x60, 0x81, 0x40, 0x40, 0x41, 0xa4, 0x04, 0x46, 0x9f, 0xff, 0x00, -0x40, 0x53, 0x24, 0x02, 0x40, 0x02, 0x14, 0x04, 0x14, 0x00, 0x81, 0x40, 0x46, 0x16, 0x02, 0x01, -0x04, 0x20, 0x81, 0x40, 0x40, 0x31, 0x24, 0x02, 0x40, 0x52, 0x0c, 0x04, 0x14, 0x50, 0x81, 0x40, -0x51, 0xff, 0x80, 0x34, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, -0x51, 0xff, 0xff, 0xd4, 0x2e, 0x00, 0x02, 0x86, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0x84, 0x70, -0x46, 0x86, 0x02, 0x00, 0x46, 0x6b, 0xfc, 0xff, 0x14, 0x8f, 0x80, 0x02, 0x14, 0x6f, 0x80, 0x03, -0x04, 0x1f, 0x80, 0x02, 0x04, 0x0f, 0x80, 0x03, 0x58, 0x54, 0x00, 0x00, 0x58, 0x42, 0x80, 0x00, -0x58, 0x32, 0x00, 0x00, 0x14, 0x5f, 0x80, 0x04, 0x14, 0x4f, 0x80, 0x05, 0x14, 0x3f, 0x80, 0x06, -0x58, 0x10, 0x88, 0x00, 0x58, 0x00, 0x03, 0xfc, 0x14, 0x1f, 0x80, 0x02, 0x14, 0x0f, 0x80, 0x03, -0x04, 0x7f, 0x80, 0x04, 0x04, 0x1f, 0x80, 0x05, 0x04, 0x0f, 0x80, 0x06, 0x46, 0x26, 0x02, 0x04, -0x14, 0x2f, 0x80, 0x07, 0x58, 0x10, 0x80, 0x04, 0x58, 0x00, 0x01, 0x7c, 0x14, 0x7f, 0x80, 0x04, -0x14, 0x1f, 0x80, 0x05, 0x14, 0x0f, 0x80, 0x06, 0x04, 0x7f, 0x80, 0x07, 0x44, 0x10, 0x00, 0x01, -0x3e, 0x10, 0x02, 0x86, 0x04, 0x0f, 0x80, 0x03, 0x04, 0x1f, 0x80, 0x02, 0x58, 0x73, 0x82, 0x04, -0x14, 0x7f, 0x80, 0x07, 0x14, 0x00, 0x80, 0x00, 0x44, 0x00, 0x02, 0x45, 0x04, 0x1f, 0x80, 0x04, -0x44, 0x70, 0x00, 0x00, 0x14, 0x00, 0x80, 0x00, 0x47, 0xe0, 0xa5, 0xf0, 0x04, 0x1f, 0x80, 0x05, -0x59, 0xef, 0x00, 0x5f, 0x14, 0x00, 0x80, 0x00, 0x59, 0xc1, 0x00, 0x00, 0x04, 0x0f, 0x80, 0x06, -0x58, 0xa1, 0x80, 0x00, 0x14, 0x70, 0x00, 0x00, 0x46, 0x92, 0x01, 0x71, 0x04, 0x1f, 0x80, 0x07, -0x15, 0xe0, 0x80, 0x00, 0x58, 0x94, 0x87, 0x17, 0x45, 0xe1, 0x00, 0x01, 0x58, 0x81, 0x80, 0x00, -0x46, 0x61, 0x72, 0x02, 0x58, 0x51, 0x80, 0x00, 0x46, 0x42, 0x02, 0x02, 0x58, 0x31, 0x00, 0x00, -0x58, 0x22, 0x80, 0x00, 0x15, 0xee, 0x00, 0x82, 0x14, 0x95, 0x02, 0x17, 0x58, 0x63, 0x08, 0x20, -0x58, 0x42, 0x00, 0x20, 0x44, 0x94, 0xb0, 0x43, 0x14, 0x64, 0x02, 0x18, 0x14, 0x42, 0x82, 0x19, -0x58, 0x61, 0x00, 0x00, 0x14, 0x71, 0x80, 0x42, 0x14, 0x91, 0x01, 0xbe, 0x04, 0x03, 0x01, 0xb2, -0x42, 0x80, 0x78, 0x08, 0x14, 0x83, 0x01, 0xb2, 0x04, 0x01, 0x01, 0xb3, 0x58, 0x51, 0x00, 0x00, -0x14, 0x5f, 0x80, 0x02, 0x58, 0x00, 0x00, 0x01, 0x14, 0x0f, 0x80, 0x01, 0x46, 0x4d, 0xbe, 0xa2, -0x04, 0x0f, 0x80, 0x02, 0x14, 0x4f, 0x80, 0x03, 0x58, 0x00, 0x06, 0xec, 0x14, 0x0f, 0x80, 0x02, -0x04, 0x0f, 0x80, 0x03, 0x14, 0x3f, 0x80, 0x04, 0x58, 0x00, 0x0f, 0x40, 0x14, 0x0f, 0x80, 0x03, -0x46, 0x17, 0xf5, 0x55, 0x04, 0x0f, 0x80, 0x04, 0x14, 0x1f, 0x80, 0x05, 0x58, 0x00, 0x04, 0x60, -0x14, 0x0f, 0x80, 0x04, 0x59, 0xc1, 0x00, 0x00, 0x04, 0x0f, 0x80, 0x05, 0x15, 0xcf, 0x80, 0x06, -0x58, 0x00, 0x00, 0x80, 0x14, 0x0f, 0x80, 0x05, 0x47, 0xe6, 0x02, 0x01, 0x04, 0x0f, 0x80, 0x06, -0x15, 0xef, 0x80, 0x07, 0x58, 0x00, 0x05, 0x50, 0x14, 0x0f, 0x80, 0x06, 0x58, 0xa1, 0x00, 0x00, -0x04, 0x0f, 0x80, 0x07, 0x14, 0xaf, 0x80, 0x08, 0x58, 0x00, 0x05, 0x50, 0x14, 0x0f, 0x80, 0x07, -0x46, 0x90, 0x0d, 0x8b, 0x04, 0x0f, 0x80, 0x08, 0x14, 0x9f, 0x80, 0x09, 0x58, 0x00, 0x05, 0x58, -0x14, 0x0f, 0x80, 0x08, 0x04, 0x0f, 0x80, 0x09, 0x47, 0xc0, 0x48, 0x90, 0x58, 0x00, 0x0c, 0xc4, -0x14, 0x0f, 0x80, 0x09, 0x04, 0x0f, 0x80, 0x01, 0x59, 0xce, 0x0c, 0x18, 0x14, 0x01, 0x01, 0xb3, -0x04, 0x0f, 0x80, 0x03, 0x04, 0x2f, 0x80, 0x02, 0x46, 0xa1, 0x29, 0x29, 0x14, 0x01, 0x00, 0x00, -0x04, 0x0f, 0x80, 0x05, 0x04, 0x2f, 0x80, 0x04, 0x58, 0x9f, 0x00, 0x00, 0x14, 0x01, 0x00, 0x00, -0x46, 0x80, 0x2e, 0x11, 0x04, 0x2f, 0x80, 0x06, 0x58, 0x64, 0x80, 0x00, 0x15, 0xc1, 0x00, 0x00, -0x46, 0x50, 0x69, 0x8f, 0x04, 0x0f, 0x80, 0x07, 0x58, 0x43, 0x00, 0x00, 0x15, 0xc0, 0x00, 0x00, -0x46, 0x35, 0x22, 0x0c, 0x04, 0x0f, 0x80, 0x09, 0x04, 0x2f, 0x80, 0x08, 0x58, 0x52, 0x88, 0x2a, -0x58, 0x12, 0x00, 0x00, 0x58, 0xa5, 0x05, 0x15, 0x58, 0x84, 0x0d, 0x30, 0x14, 0x01, 0x00, 0x00, -0x14, 0xaf, 0x01, 0x82, 0x14, 0x84, 0x81, 0x83, 0x14, 0x53, 0x01, 0x84, 0x14, 0x32, 0x01, 0x85, -0x44, 0x30, 0x05, 0xd5, 0x14, 0x30, 0x81, 0xa5, 0x2e, 0x57, 0xe2, 0x1c, 0x2e, 0x37, 0xe2, 0x5f, -0x54, 0x42, 0x80, 0x30, 0x56, 0x02, 0x00, 0x10, 0x40, 0x41, 0x80, 0x10, 0x5c, 0x60, 0x00, 0x01, -0x4e, 0x44, 0x00, 0x26, 0x4e, 0x03, 0x00, 0x12, 0x46, 0x76, 0x02, 0x04, 0x46, 0x14, 0x00, 0xa0, -0x58, 0x10, 0x8a, 0xbf, 0x46, 0x06, 0x02, 0x04, 0x14, 0x13, 0x80, 0x98, 0x58, 0x00, 0x02, 0x70, -0x44, 0x10, 0x4f, 0x00, 0x48, 0x00, 0x00, 0x10, 0x46, 0x56, 0x02, 0x04, 0x46, 0x24, 0x01, 0x81, -0x58, 0x21, 0x08, 0xbf, 0x46, 0x06, 0x02, 0x04, 0x14, 0x22, 0x80, 0x98, 0x58, 0x00, 0x02, 0x70, -0x44, 0x10, 0x5f, 0x00, 0x14, 0x10, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0e, 0x46, 0x86, 0x02, 0x04, -0x46, 0x14, 0x04, 0x04, 0x58, 0x04, 0x00, 0x00, 0x58, 0x10, 0x80, 0xbf, 0x14, 0x14, 0x00, 0x98, -0x14, 0x70, 0x00, 0x9c, 0x46, 0x26, 0x02, 0x04, 0x58, 0x71, 0x00, 0x00, 0x44, 0x50, 0xf8, 0xf8, -0x14, 0x51, 0x00, 0x99, 0x14, 0x53, 0x80, 0x9a, 0x4e, 0x44, 0x00, 0x14, 0x4e, 0x62, 0x00, 0x0a, -0x46, 0x06, 0x02, 0x04, 0x46, 0x12, 0xf0, 0xa2, 0x58, 0x00, 0x02, 0x6c, 0x48, 0x00, 0x00, 0x10, -0x46, 0x06, 0x02, 0x04, 0x46, 0x12, 0xf1, 0x82, 0x58, 0x00, 0x02, 0x6c, 0x48, 0x00, 0x00, 0x08, -0x46, 0x06, 0x02, 0x04, 0x46, 0x12, 0xf1, 0x62, 0x58, 0x00, 0x02, 0x6c, 0x54, 0x31, 0x80, 0x40, -0x14, 0x10, 0x00, 0x00, 0x4e, 0x32, 0x00, 0x0a, 0x46, 0x00, 0x03, 0xff, 0x58, 0x11, 0x00, 0x00, -0x58, 0x00, 0x08, 0xf8, 0x48, 0x00, 0x00, 0x0a, 0x46, 0x00, 0x03, 0xfb, 0x46, 0x26, 0x02, 0x04, -0x46, 0x16, 0x02, 0x04, 0x58, 0x00, 0x08, 0xb8, 0x14, 0x01, 0x01, 0xc5, 0x14, 0x00, 0x81, 0xc6, -0x46, 0x06, 0x02, 0x00, 0x58, 0x00, 0x00, 0xfc, 0x04, 0x70, 0x00, 0x00, 0x46, 0x8f, 0xfe, 0x00, -0x58, 0x84, 0x00, 0x0f, 0x40, 0x73, 0xa0, 0x02, 0x58, 0x54, 0x80, 0x00, 0x46, 0x46, 0x02, 0x00, -0x46, 0x12, 0x00, 0xfc, 0x58, 0x32, 0x80, 0x00, 0x14, 0x70, 0x00, 0x00, 0x58, 0x10, 0x80, 0x0c, -0x44, 0x70, 0x00, 0x00, 0x46, 0x26, 0x02, 0x04, 0x14, 0x72, 0x80, 0x5f, 0x14, 0x12, 0x01, 0x45, -0x14, 0x11, 0x81, 0x45, 0x44, 0x10, 0xc4, 0xc6, 0x14, 0x11, 0x01, 0x23, 0x58, 0x51, 0x00, 0x00, -0x04, 0x82, 0x80, 0x64, 0x44, 0x3c, 0xff, 0xff, 0x40, 0x44, 0x0c, 0x02, 0x42, 0x22, 0x40, 0x08, -0x14, 0x22, 0x80, 0x64, 0x46, 0x7f, 0xff, 0x00, 0x04, 0x10, 0x00, 0x00, 0x58, 0x73, 0x80, 0x0f, -0x40, 0x80, 0x9c, 0x02, 0x14, 0x80, 0x00, 0x00, 0x2e, 0x47, 0xe4, 0x0e, 0x4e, 0x43, 0x00, 0x06, -0x2e, 0x07, 0xe4, 0x0f, 0x4e, 0x02, 0x00, 0x54, 0x46, 0x26, 0x02, 0x00, 0x46, 0x04, 0xf1, 0x7b, -0x58, 0x84, 0x80, 0x00, 0x58, 0x00, 0x0b, 0xf5, 0x14, 0x01, 0x01, 0x46, 0x58, 0x11, 0x00, 0x00, -0x14, 0x04, 0x01, 0x46, 0x04, 0x30, 0x81, 0x40, 0x46, 0x7f, 0xff, 0x00, 0x40, 0x41, 0x9c, 0x02, -0x58, 0x52, 0x77, 0x6f, 0x14, 0x50, 0x81, 0x40, 0x58, 0x04, 0x00, 0x00, 0x04, 0x80, 0x01, 0x40, -0x40, 0x24, 0x1c, 0x02, 0x58, 0x31, 0x77, 0x6f, 0x14, 0x30, 0x01, 0x40, 0x04, 0x40, 0x81, 0x48, -0x46, 0x8f, 0xf0, 0x00, 0x46, 0x30, 0x0b, 0x20, 0x40, 0x52, 0x20, 0x02, 0x58, 0x31, 0x84, 0xc1, -0x40, 0x72, 0x8c, 0x04, 0x14, 0x70, 0x81, 0x48, 0x04, 0x20, 0x01, 0x48, 0x58, 0x70, 0x80, 0x00, -0x40, 0x41, 0x20, 0x02, 0x40, 0x52, 0x0c, 0x04, 0x14, 0x50, 0x01, 0x48, 0x04, 0x13, 0x81, 0x61, -0x44, 0x40, 0xff, 0xff, 0x46, 0x30, 0xb4, 0x90, 0x40, 0x20, 0x90, 0x02, 0x40, 0x81, 0x0c, 0x04, -0x46, 0x06, 0x02, 0x01, 0x14, 0x83, 0x81, 0x61, 0x58, 0x00, 0x05, 0x84, 0x04, 0x50, 0x00, 0x00, -0x40, 0x12, 0x90, 0x02, 0x40, 0x10, 0x8c, 0x04, 0x48, 0x00, 0x00, 0x78, 0x49, 0xff, 0xfa, 0xc6, -0x2e, 0x77, 0xe6, 0x1a, 0x4e, 0x73, 0x00, 0x1c, 0x46, 0x86, 0x02, 0x00, 0x04, 0x14, 0x01, 0x61, -0x44, 0x30, 0xff, 0xff, 0x46, 0x50, 0xb4, 0x90, 0x40, 0x70, 0x8c, 0x02, 0x40, 0x23, 0x94, 0x04, -0x46, 0x06, 0x02, 0x01, 0x14, 0x24, 0x01, 0x61, 0x58, 0x00, 0x05, 0x84, 0x04, 0x40, 0x00, 0x00, -0x41, 0xe2, 0x0c, 0x02, 0x40, 0x1f, 0x14, 0x04, 0x48, 0x00, 0x00, 0x58, 0x2e, 0x0f, 0xe6, 0x1b, -0x5e, 0xf0, 0x7f, 0xfb, 0x4e, 0xf3, 0x00, 0x1c, 0x46, 0x86, 0x02, 0x00, 0x04, 0x14, 0x01, 0x61, -0x44, 0x30, 0xff, 0xff, 0x46, 0x50, 0xb4, 0x90, 0x40, 0x70, 0x8c, 0x02, 0x40, 0x23, 0x94, 0x04, -0x46, 0x06, 0x02, 0x01, 0x14, 0x24, 0x01, 0x61, 0x58, 0x00, 0x05, 0x84, 0x04, 0x40, 0x00, 0x00, -0x41, 0xe2, 0x0c, 0x02, 0x40, 0x1f, 0x14, 0x04, 0x48, 0x00, 0x00, 0x38, 0x5e, 0xf0, 0x7f, 0xf7, -0x4e, 0xf3, 0x00, 0x1c, 0x46, 0x86, 0x02, 0x00, 0x04, 0x14, 0x01, 0x61, 0x44, 0x50, 0xff, 0xff, -0x46, 0x40, 0xb6, 0x90, 0x40, 0x70, 0x94, 0x02, 0x40, 0x23, 0x90, 0x04, 0x46, 0x06, 0x02, 0x01, -0x14, 0x24, 0x01, 0x61, 0x58, 0x00, 0x05, 0x84, 0x04, 0x30, 0x00, 0x00, 0x41, 0xe1, 0x94, 0x02, -0x40, 0x1f, 0x10, 0x04, 0x48, 0x00, 0x00, 0x1a, 0x46, 0x86, 0x02, 0x00, 0x04, 0x14, 0x01, 0x61, -0x44, 0x50, 0xff, 0xff, 0x46, 0x40, 0xb6, 0x90, 0x40, 0x70, 0x94, 0x02, 0x40, 0x23, 0x90, 0x04, -0x46, 0x06, 0x02, 0x01, 0x14, 0x24, 0x01, 0x61, 0x58, 0x00, 0x05, 0x84, 0x04, 0x30, 0x00, 0x00, -0x41, 0xe1, 0x94, 0x02, 0x40, 0x1f, 0x10, 0x04, 0x46, 0x56, 0x02, 0x00, 0x46, 0x4b, 0x20, 0x10, -0x46, 0x36, 0x02, 0x01, 0x14, 0x10, 0x00, 0x00, 0x14, 0x42, 0x83, 0x45, 0x14, 0x41, 0x83, 0x45, -0x2e, 0x27, 0xe2, 0x25, 0x2e, 0x17, 0xe2, 0x24, 0x4e, 0x62, 0x00, 0x0c, 0x46, 0x06, 0x02, 0x00, -0x46, 0x10, 0xcb, 0x00, 0x58, 0x00, 0x0d, 0x08, 0x58, 0x10, 0x80, 0x40, 0x48, 0x00, 0x00, 0x1e, -0x54, 0x00, 0x80, 0x7f, 0x4e, 0x02, 0x00, 0x12, 0x40, 0x70, 0x9c, 0x09, 0x40, 0x41, 0x50, 0x08, -0x40, 0x22, 0x00, 0x04, 0x40, 0x83, 0xcc, 0x08, 0x46, 0x06, 0x02, 0x00, 0x40, 0x11, 0x20, 0x04, -0x58, 0x00, 0x0d, 0x08, 0x48, 0x00, 0x00, 0x0a, 0x46, 0x06, 0x02, 0x00, 0x46, 0x10, 0xc9, 0xc0, -0x58, 0x00, 0x0d, 0x08, 0x58, 0x10, 0x80, 0x40, 0x14, 0x10, 0x00, 0x00, 0x2e, 0x27, 0xe2, 0x2b, -0x2e, 0x17, 0xe2, 0x2a, 0x4e, 0x62, 0x00, 0x0c, 0x46, 0x06, 0x02, 0x01, 0x46, 0x10, 0xcb, 0x80, -0x58, 0x00, 0x0d, 0x08, 0x58, 0x10, 0x80, 0x40, 0x48, 0x00, 0x00, 0x1e, 0x54, 0x00, 0x80, 0x7f, -0x4e, 0x02, 0x00, 0x12, 0x40, 0x50, 0x9c, 0x09, 0x40, 0x81, 0x50, 0x08, 0x40, 0x34, 0x00, 0x04, -0x40, 0x62, 0xcc, 0x08, 0x46, 0x06, 0x02, 0x01, 0x40, 0x11, 0x98, 0x04, 0x58, 0x00, 0x0d, 0x08, -0x48, 0x00, 0x00, 0x0a, 0x46, 0x06, 0x02, 0x01, 0x46, 0x10, 0xc9, 0xf0, 0x58, 0x00, 0x0d, 0x08, -0x58, 0x10, 0x80, 0x40, 0x14, 0x10, 0x00, 0x00, 0x2e, 0x07, 0xe6, 0x20, 0x4e, 0x02, 0x00, 0x26, -0x46, 0x66, 0x02, 0x00, 0x04, 0x83, 0x03, 0x46, 0x44, 0x4f, 0x00, 0xff, 0x40, 0x54, 0x10, 0x02, -0x58, 0x32, 0x83, 0x00, 0x14, 0x33, 0x03, 0x46, 0x46, 0x26, 0x02, 0x01, 0x58, 0x21, 0x0d, 0x18, -0x04, 0x11, 0x00, 0x00, 0x46, 0x00, 0x30, 0x00, 0x40, 0x70, 0x90, 0x02, 0x46, 0x10, 0x20, 0x01, -0x46, 0x56, 0x02, 0x01, 0x58, 0x43, 0x00, 0x00, 0x58, 0x32, 0x80, 0x00, 0x58, 0x10, 0x86, 0x1f, -0x58, 0x73, 0x83, 0x00, 0x48, 0x00, 0x00, 0x24, 0x46, 0x06, 0x02, 0x00, 0x04, 0x40, 0x03, 0x46, -0x44, 0x6f, 0x00, 0xff, 0x40, 0x12, 0x18, 0x02, 0x14, 0x10, 0x03, 0x46, 0x46, 0x26, 0x02, 0x01, -0x58, 0x21, 0x0d, 0x18, 0x04, 0x71, 0x00, 0x00, 0x46, 0x18, 0x20, 0x01, 0x46, 0x00, 0x60, 0x20, -0x58, 0x83, 0x00, 0x00, 0x46, 0x66, 0x02, 0x00, 0x46, 0x56, 0x02, 0x01, 0x46, 0x46, 0x02, 0x00, -0x46, 0x36, 0x02, 0x01, 0x58, 0x10, 0x83, 0x1a, 0x40, 0x73, 0xa0, 0x02, 0x14, 0x71, 0x00, 0x00, -0x14, 0x13, 0x03, 0x47, 0x46, 0x76, 0x02, 0x04, 0x14, 0x12, 0x83, 0x47, 0x14, 0x02, 0x03, 0x48, -0x14, 0x01, 0x83, 0x48, 0x58, 0x73, 0x86, 0x00, 0x04, 0x03, 0x80, 0x00, 0x42, 0x40, 0x58, 0x09, -0x42, 0x42, 0x5c, 0x09, 0x42, 0x82, 0x5c, 0x08, 0x14, 0x83, 0x80, 0x00, 0x04, 0x63, 0x80, 0x00, -0x46, 0x16, 0x02, 0x00, 0x42, 0x23, 0x1c, 0x09, 0x14, 0x23, 0x80, 0x00, 0x04, 0x30, 0x81, 0x8e, -0x40, 0x41, 0x94, 0x09, 0x40, 0x42, 0x14, 0x08, 0x58, 0x62, 0x00, 0x1e, 0x14, 0x60, 0x81, 0x8e, -0x58, 0x80, 0x80, 0x00, 0x04, 0x54, 0x01, 0x83, 0x46, 0x73, 0x00, 0x00, 0x40, 0x02, 0x9c, 0x04, -0x14, 0x04, 0x01, 0x83, 0x46, 0x26, 0x02, 0x04, 0x58, 0x21, 0x02, 0x00, 0x04, 0x31, 0x00, 0x00, -0x46, 0x6f, 0xff, 0x00, 0x58, 0x41, 0x83, 0xff, 0x14, 0x41, 0x00, 0x00, 0x58, 0x63, 0x03, 0xff, -0x04, 0x51, 0x00, 0x00, 0x44, 0x81, 0x60, 0x00, 0x40, 0x72, 0x98, 0x02, 0x40, 0x33, 0xa0, 0x04, -0x14, 0x31, 0x00, 0x00, 0x46, 0x16, 0x01, 0x30, 0x58, 0x10, 0x80, 0x9c, 0x04, 0x50, 0x80, 0x00, -0x40, 0x82, 0xa4, 0x09, 0x40, 0x84, 0x24, 0x08, 0x14, 0x80, 0x80, 0x00, 0x04, 0x70, 0x80, 0x00, -0x50, 0x00, 0xff, 0xfc, 0x58, 0x23, 0x80, 0x82, 0x14, 0x20, 0x80, 0x00, 0x04, 0x80, 0x00, 0x00, -0x46, 0x46, 0x02, 0x04, 0x40, 0x14, 0x20, 0x09, 0x40, 0x10, 0xa0, 0x08, 0x14, 0x10, 0x00, 0x00, -0x04, 0x70, 0x00, 0x00, 0x58, 0x53, 0x80, 0x14, 0x14, 0x50, 0x00, 0x00, 0x46, 0x36, 0x02, 0x04, -0x04, 0x02, 0x00, 0x8a, 0x58, 0x31, 0x82, 0x0c, 0x40, 0x70, 0x14, 0x09, 0x40, 0x73, 0x94, 0x08, -0x58, 0x03, 0x80, 0x0d, 0x14, 0x02, 0x00, 0x8a, 0x46, 0x78, 0x00, 0x00, 0x04, 0x81, 0x80, 0x00, -0x58, 0x73, 0x80, 0xff, 0x40, 0x04, 0x1c, 0x02, 0x46, 0x77, 0xc9, 0x00, 0x58, 0x73, 0x84, 0x00, -0x40, 0x00, 0x1c, 0x04, 0x14, 0x01, 0x80, 0x00, 0x04, 0x71, 0x80, 0x00, 0x46, 0x66, 0x02, 0x00, -0x40, 0x73, 0xa0, 0x09, 0x40, 0x73, 0xa0, 0x08, 0x58, 0x83, 0x80, 0x01, 0x14, 0x81, 0x80, 0x00, -0x04, 0x33, 0x01, 0x86, 0x40, 0x81, 0xbc, 0x09, 0x40, 0x84, 0x3c, 0x08, 0x58, 0x34, 0x7d, 0x10, -0x14, 0x33, 0x01, 0x86, 0x46, 0x26, 0x02, 0x00, 0x58, 0x21, 0x06, 0x34, 0x04, 0x71, 0x00, 0x00, -0x42, 0x63, 0x80, 0x09, 0x14, 0x61, 0x00, 0x00, 0x04, 0x31, 0x00, 0x00, 0x46, 0x60, 0x1f, 0x80, -0x40, 0x71, 0x98, 0x04, 0x14, 0x71, 0x00, 0x00, 0x50, 0x11, 0x7f, 0xe0, 0x04, 0x20, 0x80, 0x00, -0x42, 0x81, 0x4c, 0x09, 0x14, 0x80, 0x80, 0x00, 0x44, 0x8f, 0x00, 0xff, 0x04, 0x30, 0x80, 0x00, -0x46, 0x56, 0x02, 0x01, 0x40, 0x21, 0xa0, 0x02, 0x58, 0x31, 0x4d, 0x00, 0x14, 0x30, 0x80, 0x00, -0x04, 0x22, 0x81, 0xbc, 0x46, 0x46, 0x02, 0x00, 0x40, 0x31, 0x20, 0x02, 0x58, 0x11, 0xb0, 0x00, -0x14, 0x12, 0x81, 0xbc, 0x04, 0x52, 0x01, 0xbc, 0x46, 0x33, 0x40, 0x00, 0x40, 0x12, 0xa0, 0x08, -0x40, 0x10, 0xa0, 0x09, 0x40, 0x50, 0x8c, 0x04, 0x14, 0x52, 0x01, 0xbc, 0x46, 0x06, 0x02, 0x04, -0x58, 0x00, 0x00, 0xf0, 0x04, 0x20, 0x00, 0x00, 0x58, 0x41, 0x00, 0x02, 0x14, 0x40, 0x00, 0x00, -0x04, 0x10, 0x00, 0x00, 0x58, 0x50, 0x80, 0x04, 0x14, 0x50, 0x00, 0x00, 0x2e, 0x27, 0xe6, 0x1d, -0x4e, 0x22, 0x00, 0x16, 0x46, 0x06, 0x02, 0x00, 0x04, 0x10, 0x03, 0x44, 0x46, 0x40, 0x0f, 0xff, -0x58, 0x42, 0x0f, 0xff, 0x40, 0x30, 0x90, 0x02, 0x14, 0x30, 0x03, 0x44, 0x46, 0x56, 0x02, 0x01, -0x04, 0x22, 0x83, 0x44, 0x40, 0x11, 0x10, 0x02, 0x14, 0x12, 0x83, 0x44, 0x46, 0x26, 0x02, 0x04, -0x04, 0x01, 0x00, 0x64, 0x42, 0x40, 0x1c, 0x09, 0x14, 0x41, 0x00, 0x64, 0x51, 0xff, 0x80, 0x2c, -0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3c, 0x0d, 0xf9, 0x8d, 0x4a, 0x00, 0x78, 0x20, -0x46, 0x08, 0x00, 0x23, 0x04, 0x10, 0x00, 0x20, 0x46, 0x21, 0x10, 0x00, 0x40, 0x40, 0x88, 0x04, -0x14, 0x40, 0x00, 0x20, 0x58, 0x50, 0x00, 0x00, 0x04, 0x22, 0x80, 0x21, 0x44, 0x31, 0x01, 0x11, -0x40, 0x11, 0x0c, 0x04, 0x14, 0x12, 0x80, 0x21, 0x46, 0x08, 0x00, 0x00, 0x04, 0x40, 0x00, 0x42, -0x46, 0x18, 0x10, 0x60, 0x46, 0x20, 0x48, 0x52, 0x58, 0x32, 0x40, 0x00, 0x58, 0x21, 0x03, 0x90, -0x14, 0x30, 0x00, 0x42, 0x14, 0x20, 0x80, 0x02, 0x4a, 0x00, 0x78, 0x20, 0x46, 0x36, 0x02, 0x00, -0x14, 0x11, 0x83, 0x80, 0x4e, 0x23, 0x00, 0x08, 0x58, 0x11, 0x80, 0x00, 0x44, 0x21, 0x10, 0x00, -0x48, 0x00, 0x00, 0x06, 0x46, 0x16, 0x02, 0x00, 0x44, 0x23, 0x10, 0x00, 0x40, 0x00, 0x08, 0x00, -0x14, 0x00, 0x83, 0x81, 0x58, 0x01, 0x80, 0x00, 0x04, 0x20, 0x03, 0x84, 0x54, 0x11, 0x20, 0x00, -0x4e, 0x13, 0xff, 0xfc, 0x4a, 0x00, 0x78, 0x20, 0x4e, 0x13, 0x00, 0x0c, 0x44, 0x1e, 0xef, 0xff, -0x40, 0x00, 0x04, 0x02, 0x44, 0x21, 0x00, 0x00, 0x46, 0x16, 0x02, 0x00, 0x48, 0x00, 0x00, 0x0a, -0x44, 0x2c, 0xef, 0xff, 0x40, 0x00, 0x08, 0x02, 0x46, 0x16, 0x02, 0x00, 0x44, 0x23, 0x00, 0x00, -0x40, 0x00, 0x08, 0x04, 0x14, 0x00, 0x83, 0x81, 0x46, 0x06, 0x02, 0x00, 0x04, 0x40, 0x03, 0x84, -0x54, 0x32, 0x20, 0x00, 0x4e, 0x33, 0xff, 0xfc, 0x58, 0x50, 0x00, 0x00, 0x04, 0x02, 0x83, 0x83, +0x49, 0xff, 0xfe, 0xc6, 0x51, 0xff, 0x80, 0x6c, 0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0x5c, 0x14, 0x0f, 0x80, 0x05, 0x50, 0x00, 0x00, 0x18, +0x14, 0x0f, 0x80, 0x17, 0x50, 0x6f, 0x80, 0x60, 0x04, 0x1f, 0x80, 0x17, 0x44, 0x20, 0x00, 0x40, +0x58, 0x03, 0x00, 0x00, 0x49, 0xf7, 0xb2, 0xcc, 0x58, 0x23, 0x00, 0x00, 0x50, 0x3f, 0x80, 0xa0, +0x50, 0x21, 0x00, 0x04, 0x4c, 0x21, 0xff, 0xfe, 0x04, 0x1f, 0x80, 0x05, 0x04, 0x4f, 0x80, 0x05, +0x04, 0xa0, 0x80, 0x01, 0x05, 0xcf, 0x80, 0x05, 0x14, 0xaf, 0x80, 0x02, 0x50, 0x3f, 0x80, 0x60, +0x05, 0xe2, 0x00, 0x02, 0x04, 0x01, 0x80, 0x00, 0x15, 0xef, 0x80, 0x03, 0x04, 0x2f, 0x80, 0x05, +0x04, 0x5e, 0x00, 0x03, 0x14, 0x0f, 0x80, 0x16, 0x14, 0x5f, 0x80, 0x04, 0x46, 0x1d, 0x76, 0xaa, +0x04, 0x61, 0x00, 0x00, 0x04, 0x2f, 0x80, 0x02, 0x40, 0xa3, 0x00, 0x00, 0x14, 0x6f, 0x80, 0x01, +0x04, 0x6f, 0x80, 0x03, 0x40, 0x71, 0x08, 0x05, 0x40, 0x83, 0x94, 0x02, 0x40, 0x93, 0x08, 0x02, +0x58, 0x10, 0x84, 0x78, 0x40, 0x44, 0x24, 0x04, 0x41, 0xe5, 0x04, 0x00, 0x04, 0x01, 0x80, 0x01, +0x41, 0xcf, 0x10, 0x00, 0x04, 0x5f, 0x80, 0x04, 0x40, 0x7e, 0x64, 0x0b, 0x40, 0x23, 0x88, 0x00, +0x40, 0x42, 0x80, 0x00, 0x14, 0x0f, 0x80, 0x15, 0x04, 0x0f, 0x80, 0x02, 0x40, 0x81, 0x08, 0x05, +0x46, 0x1e, 0x8c, 0x7b, 0x40, 0xa4, 0x18, 0x02, 0x40, 0x91, 0x00, 0x02, 0x58, 0x10, 0x87, 0x56, +0x41, 0xe5, 0x24, 0x04, 0x41, 0xc2, 0x04, 0x00, 0x40, 0x6e, 0x78, 0x00, 0x40, 0x73, 0x50, 0x0b, +0x40, 0x63, 0x88, 0x00, 0x04, 0x51, 0x80, 0x02, 0x04, 0xaf, 0x80, 0x03, 0x40, 0x83, 0x18, 0x05, +0x46, 0x12, 0x42, 0x07, 0x40, 0x94, 0x00, 0x02, 0x41, 0xe5, 0x14, 0x00, 0x40, 0x43, 0x08, 0x02, +0x58, 0x10, 0x80, 0xdb, 0x41, 0xcf, 0x04, 0x00, 0x14, 0x5f, 0x80, 0x14, 0x40, 0x54, 0x90, 0x04, +0x40, 0x0e, 0x14, 0x00, 0x40, 0x80, 0x3c, 0x0b, 0x40, 0x84, 0x18, 0x00, 0x04, 0x91, 0x80, 0x03, +0x04, 0x4f, 0x80, 0x02, 0x40, 0xa4, 0x20, 0x05, 0x46, 0x1c, 0x1b, 0xdc, 0x41, 0xe5, 0x08, 0x02, +0x41, 0xc2, 0x24, 0x00, 0x40, 0x54, 0x18, 0x02, 0x58, 0x10, 0x8e, 0xee, 0x40, 0x0f, 0x14, 0x04, +0x40, 0xae, 0x04, 0x00, 0x14, 0x9f, 0x80, 0x13, 0x40, 0x95, 0x00, 0x00, 0x40, 0x44, 0xa8, 0x0b, +0x40, 0x92, 0x20, 0x00, 0x04, 0x51, 0x80, 0x04, 0x46, 0x0f, 0x57, 0xc0, 0x41, 0xe4, 0xa4, 0x05, +0x58, 0x00, 0x0f, 0xaf, 0x40, 0x1f, 0x18, 0x02, 0x41, 0xc2, 0x80, 0x00, 0x40, 0xa4, 0xa0, 0x02, +0x40, 0x4e, 0x08, 0x00, 0x40, 0x20, 0xa8, 0x04, 0x14, 0x5f, 0x80, 0x12, 0x40, 0x52, 0x08, 0x00, +0x41, 0xc2, 0xe4, 0x0b, 0x40, 0x5e, 0x24, 0x00, 0x04, 0x11, 0x80, 0x05, 0x47, 0xe4, 0x78, 0x7c, +0x40, 0x02, 0x94, 0x05, 0x59, 0xef, 0x06, 0x2a, 0x40, 0x40, 0xf8, 0x00, 0x40, 0x22, 0xa4, 0x02, +0x40, 0xa0, 0x20, 0x02, 0x41, 0xc2, 0x18, 0x00, 0x40, 0x05, 0x08, 0x04, 0x41, 0xee, 0x00, 0x00, +0x14, 0x1f, 0x80, 0x11, 0x40, 0x1f, 0x50, 0x0b, 0x41, 0xe0, 0x94, 0x00, 0x05, 0xc1, 0x80, 0x06, +0x46, 0x6a, 0x83, 0x04, 0x40, 0x7f, 0x78, 0x05, 0x58, 0x63, 0x06, 0x13, 0x40, 0xa3, 0xa4, 0x02, +0x40, 0x4e, 0x18, 0x00, 0x40, 0x2f, 0x14, 0x02, 0x40, 0x02, 0x20, 0x00, 0x40, 0x15, 0x08, 0x04, +0x40, 0x60, 0x04, 0x00, 0x15, 0xcf, 0x80, 0x10, 0x41, 0xc3, 0x3c, 0x0b, 0x40, 0x6e, 0x78, 0x00, +0x04, 0x71, 0x80, 0x07, 0x46, 0x8f, 0xd4, 0x69, 0x40, 0x23, 0x18, 0x05, 0x58, 0x84, 0x05, 0x01, +0x40, 0x41, 0x14, 0x02, 0x40, 0xa3, 0xa0, 0x00, 0x40, 0x03, 0x78, 0x02, 0x40, 0x15, 0x24, 0x00, +0x41, 0xc2, 0x00, 0x04, 0x40, 0x20, 0xf0, 0x00, 0x14, 0x7f, 0x80, 0x0f, 0x40, 0x71, 0x28, 0x0b, +0x40, 0x23, 0x98, 0x00, 0x04, 0xa1, 0x80, 0x08, 0x46, 0x06, 0x98, 0x09, 0x40, 0x81, 0x08, 0x05, +0x58, 0x00, 0x08, 0xd8, 0x40, 0x94, 0x78, 0x02, 0x40, 0x45, 0x00, 0x00, 0x40, 0x11, 0x18, 0x02, +0x40, 0x74, 0x84, 0x04, 0x41, 0xc2, 0x14, 0x00, 0x40, 0x5e, 0x1c, 0x00, 0x14, 0xaf, 0x80, 0x0e, +0x40, 0xa2, 0xe4, 0x0b, 0x40, 0x55, 0x08, 0x00, 0x04, 0x01, 0x80, 0x09, 0x46, 0x48, 0xb4, 0x4f, +0x40, 0x82, 0x94, 0x05, 0x58, 0x42, 0x07, 0xaf, 0x41, 0xc4, 0x18, 0x02, 0x40, 0x90, 0x10, 0x00, +0x40, 0x12, 0x88, 0x02, 0x40, 0x74, 0xf8, 0x00, 0x40, 0xae, 0x04, 0x04, 0x40, 0x83, 0xa8, 0x00, +0x14, 0x0f, 0x80, 0x0d, 0x40, 0x04, 0x50, 0x0b, 0x40, 0x80, 0x14, 0x00, 0x05, 0xc1, 0x80, 0x0a, +0x40, 0x44, 0x20, 0x05, 0x44, 0x9f, 0x5b, 0xb1, 0x40, 0x72, 0x08, 0x02, 0x41, 0xee, 0x24, 0x00, +0x40, 0x14, 0x14, 0x02, 0x40, 0x03, 0x84, 0x04, 0x40, 0xaf, 0x18, 0x00, 0x40, 0x65, 0x00, 0x00, +0x40, 0x43, 0x3c, 0x0b, 0x40, 0x62, 0x20, 0x00, 0x04, 0x91, 0x80, 0x0b, 0x47, 0xe8, 0x95, 0xcd, +0x15, 0xcf, 0x80, 0x0c, 0x59, 0xef, 0x07, 0xbe, 0x41, 0xc3, 0x18, 0x05, 0x40, 0xae, 0x14, 0x02, +0x40, 0x74, 0xf8, 0x00, 0x40, 0x13, 0x20, 0x02, 0x40, 0x03, 0x88, 0x00, 0x40, 0x45, 0x04, 0x04, +0x14, 0x9f, 0x80, 0x0b, 0x40, 0x90, 0x10, 0x00, 0x41, 0xc4, 0xa8, 0x0b, 0x40, 0x9e, 0x18, 0x00, +0x04, 0x11, 0x80, 0x0c, 0x46, 0x26, 0xb9, 0x01, 0x41, 0xe4, 0xa4, 0x05, 0x58, 0x21, 0x01, 0x22, +0x40, 0x0f, 0x20, 0x02, 0x40, 0xa0, 0x88, 0x00, 0x40, 0x74, 0x98, 0x02, 0x41, 0xc0, 0x1c, 0x04, +0x40, 0x45, 0x14, 0x00, 0x40, 0x52, 0x70, 0x00, 0x14, 0x1f, 0x80, 0x0a, 0x40, 0x12, 0xe4, 0x0b, +0x40, 0x50, 0xa4, 0x00, 0x04, 0x21, 0x80, 0x0d, 0x47, 0xef, 0xd9, 0x87, 0x40, 0xa2, 0x94, 0x05, +0x59, 0xef, 0x01, 0x93, 0x41, 0xc5, 0x18, 0x02, 0x40, 0x71, 0x78, 0x00, 0x40, 0x02, 0xa4, 0x02, +0x40, 0x43, 0xa0, 0x00, 0x40, 0x8e, 0x00, 0x04, 0x40, 0x12, 0x20, 0x00, 0x41, 0xe0, 0xd0, 0x0b, +0x40, 0x1f, 0x14, 0x00, 0x14, 0x2f, 0x80, 0x09, 0x46, 0xaa, 0x67, 0x94, 0x04, 0x21, 0x80, 0x0e, +0x41, 0xe0, 0x84, 0x05, 0x58, 0xa5, 0x03, 0x8e, 0x40, 0x71, 0x28, 0x00, 0x40, 0x0f, 0x24, 0x02, +0x41, 0xc0, 0x94, 0x02, 0x40, 0x40, 0x70, 0x04, 0x40, 0x83, 0x98, 0x00, 0x40, 0x64, 0x10, 0x00, +0x40, 0xa3, 0x3c, 0x0b, 0x40, 0x65, 0x04, 0x00, 0x14, 0x2f, 0x80, 0x08, 0x04, 0x31, 0x80, 0x0f, +0x46, 0x24, 0x9b, 0x40, 0x40, 0xa3, 0x18, 0x05, 0x58, 0x21, 0x08, 0x21, 0x40, 0x71, 0x88, 0x00, +0x40, 0x05, 0x14, 0x02, 0x41, 0xc3, 0x04, 0x02, 0x40, 0x83, 0xa4, 0x00, 0x40, 0x90, 0x70, 0x04, +0x40, 0x44, 0x24, 0x00, 0x14, 0x3f, 0x80, 0x07, 0x40, 0x72, 0x28, 0x0b, 0x04, 0x3f, 0x80, 0x15, +0x46, 0x2f, 0x61, 0xe2, 0x40, 0x43, 0x98, 0x00, 0x58, 0x21, 0x05, 0x62, 0x41, 0xc1, 0x88, 0x00, +0x40, 0x02, 0x04, 0x02, 0x41, 0xe3, 0x78, 0x02, 0x40, 0x80, 0x78, 0x04, 0x40, 0x9e, 0x14, 0x00, +0x40, 0x54, 0xa0, 0x00, 0x04, 0x2f, 0x80, 0x10, 0x40, 0x72, 0xec, 0x0b, 0x47, 0xcc, 0x04, 0x0b, +0x40, 0x53, 0x90, 0x00, 0x59, 0xce, 0x03, 0x40, 0x41, 0xe2, 0x28, 0x02, 0x40, 0x31, 0x70, 0x00, +0x40, 0x02, 0x98, 0x02, 0x40, 0x90, 0x78, 0x04, 0x40, 0x81, 0x84, 0x00, 0x40, 0x14, 0x24, 0x00, +0x04, 0x3f, 0x80, 0x0b, 0x40, 0x70, 0xdc, 0x0b, 0x46, 0x22, 0x65, 0xe5, 0x40, 0x13, 0x94, 0x00, +0x41, 0xc2, 0x10, 0x05, 0x58, 0x21, 0x0a, 0x51, 0x41, 0xe2, 0xf0, 0x02, 0x40, 0xa1, 0x88, 0x00, +0x40, 0x00, 0x90, 0x02, 0x40, 0x90, 0x78, 0x04, 0x40, 0x85, 0x18, 0x00, 0x40, 0x64, 0x24, 0x00, +0x04, 0x2f, 0x80, 0x16, 0x40, 0x73, 0x48, 0x0b, 0x46, 0x3e, 0x9b, 0x6c, 0x40, 0x63, 0x84, 0x00, +0x41, 0xc2, 0x94, 0x05, 0x58, 0x31, 0x87, 0xaa, 0x41, 0xe0, 0xf0, 0x02, 0x40, 0xa1, 0x0c, 0x00, +0x40, 0x03, 0x14, 0x02, 0x40, 0x90, 0x78, 0x04, 0x40, 0x85, 0x10, 0x00, 0x40, 0x44, 0x24, 0x00, +0x05, 0xcf, 0x80, 0x11, 0x40, 0x72, 0x30, 0x0b, 0x46, 0x2d, 0x62, 0xf1, 0x40, 0x43, 0x98, 0x00, +0x40, 0xa0, 0x84, 0x05, 0x58, 0x21, 0x00, 0x5d, 0x41, 0xe3, 0x28, 0x02, 0x40, 0x3e, 0x08, 0x00, +0x40, 0x02, 0x04, 0x02, 0x40, 0x80, 0x78, 0x04, 0x40, 0x91, 0x94, 0x00, 0x40, 0x54, 0xa0, 0x00, +0x05, 0xcf, 0x80, 0x0c, 0x40, 0x72, 0xec, 0x0b, 0x46, 0x20, 0x24, 0x41, 0x40, 0x53, 0x90, 0x00, +0x40, 0xa3, 0x18, 0x05, 0x58, 0x21, 0x04, 0x53, 0x41, 0xe2, 0x28, 0x02, 0x40, 0x3e, 0x08, 0x00, +0x40, 0x02, 0x98, 0x02, 0x40, 0x90, 0x78, 0x04, 0x40, 0x81, 0x84, 0x00, 0x40, 0x14, 0x24, 0x00, +0x04, 0x3f, 0x80, 0x07, 0x40, 0x70, 0xdc, 0x0b, 0x46, 0xad, 0x8a, 0x1e, 0x40, 0x13, 0x94, 0x00, +0x41, 0xc2, 0x10, 0x05, 0x58, 0xa5, 0x06, 0x81, 0x41, 0xe2, 0xf0, 0x02, 0x40, 0x21, 0xa8, 0x00, +0x40, 0x00, 0x90, 0x02, 0x40, 0x90, 0x78, 0x04, 0x40, 0x81, 0x18, 0x00, 0x40, 0x64, 0x24, 0x00, +0x04, 0xaf, 0x80, 0x12, 0x40, 0x73, 0x48, 0x0b, 0x46, 0x3e, 0x7d, 0x3f, 0x40, 0x63, 0x84, 0x00, +0x41, 0xc2, 0x94, 0x05, 0x58, 0x31, 0x8b, 0xc8, 0x41, 0xe0, 0xf0, 0x02, 0x40, 0x05, 0x0c, 0x00, +0x40, 0x23, 0x14, 0x02, 0x40, 0x91, 0x78, 0x04, 0x40, 0x80, 0x10, 0x00, 0x40, 0x44, 0x24, 0x00, +0x04, 0x0f, 0x80, 0x0d, 0x40, 0x72, 0x30, 0x0b, 0x47, 0xc2, 0x1e, 0x1c, 0x40, 0x43, 0x98, 0x00, +0x40, 0xa0, 0x84, 0x05, 0x59, 0xce, 0x0d, 0xe6, 0x41, 0xe3, 0x28, 0x02, 0x40, 0x30, 0x70, 0x00, +0x40, 0x22, 0x04, 0x02, 0x40, 0x81, 0x78, 0x04, 0x40, 0x91, 0x94, 0x00, 0x40, 0x54, 0xa0, 0x00, +0x04, 0x0f, 0x80, 0x08, 0x40, 0x72, 0xec, 0x0b, 0x47, 0xcc, 0x33, 0x70, 0x40, 0x53, 0x90, 0x00, +0x40, 0xa3, 0x18, 0x05, 0x59, 0xce, 0x07, 0xd6, 0x41, 0xe2, 0x28, 0x02, 0x40, 0x30, 0x70, 0x00, +0x40, 0x22, 0x98, 0x02, 0x40, 0x91, 0x78, 0x04, 0x40, 0x81, 0x84, 0x00, 0x40, 0x14, 0x24, 0x00, +0x04, 0x0f, 0x80, 0x13, 0x40, 0x70, 0xdc, 0x0b, 0x46, 0x2f, 0x4d, 0x50, 0x40, 0x13, 0x94, 0x00, +0x41, 0xc2, 0x10, 0x05, 0x58, 0x21, 0x0d, 0x87, 0x41, 0xe2, 0xf0, 0x02, 0x40, 0xa0, 0x08, 0x00, +0x40, 0x30, 0x90, 0x02, 0x40, 0x91, 0xf8, 0x04, 0x40, 0x85, 0x18, 0x00, 0x40, 0x64, 0x24, 0x00, +0x04, 0x2f, 0x80, 0x0e, 0x40, 0x73, 0x48, 0x0b, 0x46, 0x04, 0x55, 0xa1, 0x40, 0x63, 0x84, 0x00, +0x41, 0xc2, 0x94, 0x05, 0x58, 0x00, 0x04, 0xed, 0x41, 0xe0, 0xf0, 0x02, 0x40, 0xa1, 0x00, 0x00, +0x40, 0x33, 0x14, 0x02, 0x40, 0x85, 0x10, 0x00, 0x40, 0x91, 0xf8, 0x04, 0x40, 0x74, 0x24, 0x00, +0x04, 0x4f, 0x80, 0x09, 0x40, 0x03, 0xb0, 0x0b, 0x46, 0x2a, 0x9e, 0x3e, 0x40, 0x80, 0x18, 0x00, +0x40, 0xa0, 0x84, 0x05, 0x58, 0x21, 0x09, 0x05, 0x41, 0xe3, 0x28, 0x02, 0x40, 0x32, 0x08, 0x00, +0x41, 0xc4, 0x04, 0x02, 0x40, 0x7e, 0x78, 0x04, 0x40, 0x91, 0x94, 0x00, 0x40, 0x54, 0x9c, 0x00, +0x04, 0x4f, 0x80, 0x14, 0x40, 0x02, 0xec, 0x0b, 0x46, 0x2f, 0xce, 0xfa, 0x40, 0x50, 0x20, 0x00, +0x40, 0xa3, 0x18, 0x05, 0x58, 0x21, 0x03, 0xf8, 0x41, 0xe4, 0x28, 0x02, 0x40, 0x32, 0x08, 0x00, +0x41, 0xc2, 0x98, 0x02, 0x40, 0x71, 0x84, 0x00, 0x40, 0x9e, 0x78, 0x04, 0x40, 0x03, 0xa4, 0x00, +0x04, 0x3f, 0x80, 0x0f, 0x40, 0xa0, 0x5c, 0x0b, 0x47, 0xe6, 0x76, 0xf0, 0x40, 0xa5, 0x14, 0x00, +0x40, 0x44, 0x20, 0x05, 0x59, 0xef, 0x02, 0xd9, 0x40, 0x72, 0x90, 0x02, 0x40, 0x21, 0xf8, 0x00, +0x41, 0xc5, 0x20, 0x02, 0x40, 0x11, 0x18, 0x00, 0x40, 0x9e, 0x1c, 0x04, 0x40, 0x00, 0xa4, 0x00, +0x04, 0x7f, 0x80, 0x0a, 0x40, 0x40, 0x48, 0x0b, 0x46, 0x28, 0xd2, 0xa4, 0x40, 0x02, 0x28, 0x00, +0x41, 0xe2, 0x94, 0x05, 0x58, 0x21, 0x0c, 0x8a, 0x41, 0xc5, 0x78, 0x02, 0x40, 0x33, 0x88, 0x00, +0x40, 0x60, 0x14, 0x02, 0x40, 0x11, 0xa0, 0x00, 0x40, 0x93, 0x70, 0x04, 0x40, 0x40, 0xa4, 0x00, +0x04, 0x8f, 0x80, 0x11, 0x41, 0xe2, 0x30, 0x0b, 0x44, 0x2a, 0x39, 0x42, 0x40, 0x4f, 0x00, 0x00, +0x40, 0x74, 0x08, 0x00, 0x40, 0x30, 0x28, 0x03, 0x14, 0xaf, 0x80, 0x06, 0x40, 0x63, 0x94, 0x00, +0x41, 0xc1, 0x90, 0x03, 0x40, 0x13, 0x70, 0x00, 0x04, 0x8f, 0x80, 0x0e, 0x47, 0xe8, 0x77, 0x1f, +0x04, 0x2f, 0x80, 0x06, 0x40, 0x90, 0xf0, 0x0b, 0x59, 0xef, 0x06, 0x81, 0x40, 0x14, 0x90, 0x00, +0x40, 0x74, 0x78, 0x00, 0x40, 0x52, 0x00, 0x03, 0x40, 0x33, 0x88, 0x00, 0x40, 0xa2, 0x84, 0x03, +0x40, 0x61, 0xa8, 0x00, 0x05, 0xef, 0x80, 0x0b, 0x46, 0x96, 0xd9, 0xd6, 0x41, 0xc3, 0x54, 0x0b, +0x58, 0x94, 0x81, 0x22, 0x40, 0x6e, 0x04, 0x00, 0x40, 0x8f, 0x24, 0x00, 0x40, 0x70, 0x90, 0x03, +0x40, 0x24, 0x00, 0x00, 0x40, 0x03, 0x98, 0x03, 0x40, 0x51, 0x00, 0x00, 0x05, 0xcf, 0x80, 0x08, +0x46, 0xaf, 0xde, 0x53, 0x40, 0x32, 0xc0, 0x0b, 0x58, 0xa5, 0x08, 0x0c, 0x40, 0x51, 0x98, 0x00, +0x40, 0x9e, 0x28, 0x00, 0x41, 0xe3, 0x04, 0x03, 0x40, 0x84, 0x90, 0x00, 0x40, 0x7f, 0x14, 0x03, +0x40, 0x24, 0x1c, 0x00, 0x04, 0x3f, 0x80, 0x15, 0x46, 0x4a, 0x4b, 0xee, 0x40, 0x01, 0x24, 0x0b, +0x58, 0x42, 0x0a, 0x44, 0x40, 0x80, 0x14, 0x00, 0x40, 0xa1, 0x90, 0x00, 0x41, 0xc2, 0x98, 0x03, +0x41, 0xee, 0x20, 0x03, 0x40, 0x95, 0x04, 0x00, 0x40, 0x14, 0xf8, 0x00, 0x04, 0x2f, 0x80, 0x12, +0x46, 0x04, 0xbd, 0xec, 0x40, 0x70, 0xf0, 0x0b, 0x58, 0x00, 0x0f, 0xa9, 0x40, 0x13, 0xa0, 0x00, +0x40, 0x41, 0x00, 0x00, 0x40, 0xa4, 0x14, 0x03, 0x41, 0xc5, 0x04, 0x03, 0x40, 0x32, 0x18, 0x00, +0x40, 0x61, 0xf0, 0x00, 0x04, 0x9f, 0x80, 0x0f, 0x46, 0x7f, 0x6b, 0xb4, 0x41, 0xe3, 0x54, 0x0b, +0x58, 0x73, 0x8b, 0x60, 0x40, 0x6f, 0x04, 0x00, 0x40, 0x24, 0x9c, 0x00, 0x40, 0x00, 0xa0, 0x03, +0x40, 0xa0, 0x18, 0x03, 0x40, 0x41, 0x14, 0x00, 0x40, 0x52, 0x28, 0x00, 0x05, 0xef, 0x80, 0x0c, +0x46, 0x3b, 0xeb, 0xfb, 0x41, 0xc2, 0xc0, 0x0b, 0x58, 0x31, 0x8c, 0x70, 0x40, 0x5e, 0x18, 0x00, +0x40, 0x9f, 0x0c, 0x00, 0x40, 0x73, 0x04, 0x03, 0x40, 0x04, 0xa0, 0x00, 0x40, 0x23, 0x94, 0x03, +0x40, 0x40, 0x08, 0x00, 0x05, 0xcf, 0x80, 0x09, 0x46, 0xa2, 0x89, 0xb7, 0x40, 0x82, 0x24, 0x0b, +0x58, 0xa5, 0x0e, 0xc6, 0x40, 0x44, 0x14, 0x00, 0x40, 0x3e, 0x28, 0x00, 0x41, 0xe2, 0x98, 0x03, +0x40, 0x7f, 0x10, 0x03, 0x40, 0x91, 0x84, 0x00, 0x40, 0x14, 0x9c, 0x00, 0x04, 0x8f, 0x80, 0x16, +0x46, 0x2e, 0xaa, 0x12, 0x40, 0x00, 0xf0, 0x0b, 0x58, 0x21, 0x07, 0xfa, 0x40, 0x10, 0x10, 0x00, +0x40, 0xa4, 0x08, 0x00, 0x41, 0xc2, 0x14, 0x03, 0x41, 0xee, 0x04, 0x03, 0x40, 0x35, 0x18, 0x00, +0x40, 0x61, 0xf8, 0x00, 0x04, 0x9f, 0x80, 0x13, 0x46, 0x0d, 0x4e, 0xf3, 0x40, 0x73, 0x54, 0x0b, +0x58, 0x00, 0x00, 0x85, 0x40, 0x63, 0x84, 0x00, 0x40, 0x84, 0x80, 0x00, 0x40, 0xa0, 0x90, 0x03, +0x41, 0xc5, 0x18, 0x03, 0x40, 0x24, 0x14, 0x00, 0x40, 0x51, 0x70, 0x00, 0x04, 0x7f, 0x80, 0x10, +0x46, 0x30, 0x48, 0x81, 0x41, 0xe2, 0xc0, 0x0b, 0x58, 0x31, 0x8d, 0x05, 0x40, 0x5f, 0x18, 0x00, +0x40, 0x93, 0x8c, 0x00, 0x40, 0x03, 0x04, 0x03, 0x40, 0xa0, 0x14, 0x03, 0x40, 0x84, 0x90, 0x00, +0x40, 0x44, 0x28, 0x00, 0x05, 0xef, 0x80, 0x0d, 0x46, 0x2d, 0x9d, 0x4d, 0x41, 0xc2, 0x24, 0x0b, +0x58, 0x21, 0x00, 0x39, 0x40, 0x4e, 0x14, 0x00, 0x40, 0x3f, 0x08, 0x00, 0x40, 0x72, 0x98, 0x03, +0x40, 0x91, 0x84, 0x00, 0x40, 0x03, 0x90, 0x03, 0x40, 0xa4, 0x80, 0x00, 0x05, 0xcf, 0x80, 0x0a, +0x46, 0x8e, 0x6d, 0xb9, 0x40, 0x15, 0x70, 0x0b, 0x58, 0x84, 0x09, 0xe5, 0x40, 0x90, 0x90, 0x00, +0x40, 0x2e, 0x20, 0x00, 0x41, 0xe2, 0x14, 0x03, 0x40, 0x31, 0x18, 0x00, 0x40, 0x7f, 0x24, 0x03, +0x40, 0x01, 0x9c, 0x00, 0x04, 0x6f, 0x80, 0x07, 0x46, 0x11, 0xfa, 0x27, 0x40, 0xa0, 0x54, 0x0b, +0x58, 0x10, 0x8c, 0xf8, 0x40, 0xa5, 0x24, 0x00, 0x40, 0x83, 0x04, 0x00, 0x41, 0xc4, 0x90, 0x03, +0x40, 0x24, 0x14, 0x00, 0x41, 0xee, 0x28, 0x03, 0x40, 0x31, 0x78, 0x00, 0x04, 0x6f, 0x80, 0x14, +0x46, 0x0c, 0x4a, 0xc5, 0x40, 0x71, 0xc0, 0x0b, 0x58, 0x00, 0x06, 0x65, 0x40, 0x73, 0xa8, 0x00, +0x40, 0x53, 0x00, 0x00, 0x40, 0x15, 0x24, 0x03, 0x40, 0x82, 0x90, 0x00, 0x41, 0xc0, 0x9c, 0x03, +0x40, 0x24, 0x70, 0x00, 0x04, 0x0f, 0x80, 0x16, 0x41, 0xe1, 0x24, 0x0b, 0x46, 0x3f, 0x42, 0x92, +0x40, 0x2f, 0x1c, 0x00, 0x40, 0x45, 0x28, 0x05, 0x58, 0x31, 0x82, 0x44, 0x40, 0x60, 0x0c, 0x00, +0x40, 0x51, 0x10, 0x04, 0x40, 0x13, 0x24, 0x00, 0x40, 0x82, 0x9c, 0x03, 0x41, 0xc0, 0xa0, 0x00, +0x04, 0x0f, 0x80, 0x0f, 0x41, 0xee, 0x68, 0x0b, 0x46, 0x34, 0x32, 0xaf, 0x41, 0xef, 0x08, 0x00, +0x40, 0x43, 0x9c, 0x05, 0x58, 0x31, 0x8f, 0x97, 0x40, 0x50, 0x0c, 0x00, 0x40, 0x6f, 0x10, 0x04, +0x40, 0x12, 0xa8, 0x00, 0x40, 0x93, 0x08, 0x03, 0x40, 0x80, 0xa4, 0x00, 0x04, 0x3f, 0x80, 0x08, +0x41, 0xc4, 0x58, 0x0b, 0x46, 0x0a, 0xb9, 0x42, 0x40, 0x8e, 0x78, 0x00, 0x40, 0xa1, 0x08, 0x05, +0x58, 0x00, 0x03, 0xa7, 0x40, 0x41, 0x80, 0x00, 0x40, 0x54, 0x28, 0x04, 0x40, 0x62, 0x1c, 0x00, +0x40, 0x12, 0xf8, 0x03, 0x40, 0x93, 0x04, 0x00, 0x04, 0x7f, 0x80, 0x11, 0x41, 0xc4, 0xc4, 0x0b, +0x46, 0x3f, 0xc9, 0x3a, 0x40, 0x9e, 0x20, 0x00, 0x40, 0xaf, 0x78, 0x05, 0x58, 0x31, 0x80, 0x39, +0x40, 0x03, 0x8c, 0x00, 0x40, 0x44, 0xa8, 0x04, 0x40, 0x50, 0x08, 0x00, 0x40, 0x62, 0x20, 0x03, +0x40, 0x12, 0x98, 0x00, 0x04, 0x2f, 0x80, 0x0a, 0x41, 0xc0, 0xac, 0x0b, 0x46, 0x76, 0x55, 0xb5, +0x41, 0xce, 0x24, 0x00, 0x40, 0xa4, 0x20, 0x05, 0x58, 0x73, 0x89, 0xc3, 0x40, 0x31, 0x1c, 0x00, +0x40, 0x0e, 0x28, 0x04, 0x40, 0x41, 0xf8, 0x00, 0x40, 0x50, 0x24, 0x03, 0x40, 0x62, 0x14, 0x00, +0x04, 0x7f, 0x80, 0x13, 0x40, 0x13, 0x68, 0x0b, 0x46, 0x28, 0xf0, 0xcc, 0x40, 0x60, 0xf0, 0x00, +0x40, 0xa4, 0xa4, 0x05, 0x58, 0x21, 0x0c, 0x92, 0x40, 0x33, 0x88, 0x00, 0x40, 0x03, 0x28, 0x04, +0x41, 0xe1, 0xa0, 0x00, 0x40, 0x40, 0x70, 0x03, 0x40, 0x5f, 0x10, 0x00, 0x04, 0x7f, 0x80, 0x0c, +0x40, 0x12, 0xd8, 0x0b, 0x46, 0xaf, 0xfe, 0xff, 0x40, 0x50, 0x98, 0x00, 0x40, 0x8e, 0x70, 0x05, +0x58, 0xa5, 0x04, 0x7d, 0x40, 0x23, 0xa8, 0x00, 0x40, 0x32, 0xa0, 0x04, 0x40, 0x01, 0x24, 0x00, +0x41, 0xe1, 0x98, 0x03, 0x40, 0x40, 0x78, 0x00, 0x04, 0xaf, 0x80, 0x15, 0x40, 0x12, 0x44, 0x0b, +0x46, 0x78, 0x58, 0x45, 0x40, 0x40, 0x94, 0x00, 0x40, 0x93, 0x18, 0x05, 0x58, 0x73, 0x8d, 0xd1, +0x40, 0x85, 0x1c, 0x00, 0x40, 0x22, 0x24, 0x04, 0x40, 0x34, 0x70, 0x00, 0x40, 0x01, 0x14, 0x03, +0x41, 0xe1, 0x80, 0x00, 0x04, 0x1f, 0x80, 0x0e, 0x41, 0xcf, 0x2c, 0x0b, 0x46, 0x76, 0xfa, 0x87, +0x41, 0xce, 0x10, 0x00, 0x40, 0xa2, 0x94, 0x05, 0x58, 0x73, 0x8e, 0x4f, 0x40, 0x90, 0x9c, 0x00, +0x40, 0x8e, 0x28, 0x04, 0x40, 0x24, 0x98, 0x00, 0x40, 0x04, 0x10, 0x03, 0x41, 0xe1, 0x00, 0x00, +0x04, 0x7f, 0x80, 0x07, 0x40, 0x3f, 0x68, 0x0b, 0x46, 0x1f, 0xe2, 0xce, 0x40, 0x21, 0xf0, 0x00, +0x40, 0xa2, 0x10, 0x05, 0x58, 0x10, 0x86, 0xe0, 0x40, 0x93, 0x84, 0x00, 0x40, 0x61, 0x28, 0x04, +0x40, 0x84, 0x94, 0x00, 0x40, 0x03, 0x70, 0x03, 0x41, 0xe4, 0x00, 0x00, 0x04, 0x5f, 0x80, 0x10, +0x40, 0x3f, 0x58, 0x0b, 0x46, 0x1a, 0x30, 0x14, 0x40, 0x81, 0x88, 0x00, 0x40, 0x7e, 0x70, 0x05, +0x58, 0x10, 0x83, 0x14, 0x40, 0x92, 0x84, 0x00, 0x40, 0xa4, 0x1c, 0x04, 0x40, 0x64, 0x90, 0x00, +0x40, 0x05, 0x08, 0x03, 0x41, 0xe3, 0x00, 0x00, 0x04, 0x1f, 0x80, 0x09, 0x40, 0x4f, 0x44, 0x0b, +0x46, 0x34, 0xe0, 0x81, 0x40, 0x62, 0x20, 0x00, 0x40, 0x71, 0x08, 0x05, 0x58, 0x31, 0x81, 0xa1, +0x40, 0x90, 0x8c, 0x00, 0x40, 0x53, 0x1c, 0x04, 0x40, 0x04, 0xf0, 0x00, 0x40, 0xa2, 0xa0, 0x03, +0x41, 0xe0, 0x28, 0x00, 0x04, 0x9f, 0x80, 0x12, 0x40, 0x4f, 0x2c, 0x0b, 0x46, 0x1f, 0x75, 0x37, +0x40, 0x42, 0x18, 0x00, 0x40, 0x74, 0x20, 0x05, 0x58, 0x10, 0x8e, 0x82, 0x41, 0xc4, 0x84, 0x00, +0x40, 0x32, 0x1c, 0x04, 0x40, 0x5e, 0x08, 0x00, 0x40, 0xa1, 0x98, 0x03, 0x40, 0x02, 0xa8, 0x00, +0x04, 0x9f, 0x80, 0x0b, 0x41, 0xe0, 0x68, 0x0b, 0x46, 0x1b, 0xd3, 0xaf, 0x41, 0xef, 0x10, 0x00, +0x40, 0x73, 0x18, 0x05, 0x58, 0x10, 0x82, 0x35, 0x40, 0x3f, 0x1c, 0x04, 0x41, 0xc4, 0x84, 0x00, +0x40, 0x21, 0x90, 0x03, 0x41, 0xce, 0x20, 0x00, 0x40, 0xae, 0x08, 0x00, 0x04, 0x5f, 0x80, 0x14, +0x40, 0xa5, 0x58, 0x0b, 0x46, 0x02, 0xad, 0x7d, 0x40, 0x25, 0x78, 0x00, 0x40, 0x12, 0x10, 0x05, +0x58, 0x00, 0x02, 0xbb, 0x40, 0x71, 0x04, 0x04, 0x40, 0x92, 0x80, 0x00, 0x40, 0x94, 0x98, 0x00, +0x40, 0x63, 0xf8, 0x03, 0x40, 0x34, 0x98, 0x00, 0x04, 0x1f, 0x80, 0x0d, 0x40, 0x81, 0xc4, 0x0b, +0x46, 0x5e, 0xb8, 0x6d, 0x40, 0x34, 0x08, 0x00, 0x40, 0x0f, 0x78, 0x05, 0x58, 0x52, 0x83, 0x91, +0x40, 0x80, 0x94, 0x00, 0x40, 0x71, 0x80, 0x04, 0x04, 0x5f, 0x80, 0x02, 0x04, 0x1f, 0x80, 0x01, +0x40, 0x64, 0x10, 0x00, 0x40, 0x73, 0x88, 0x03, 0x40, 0x43, 0x1c, 0x00, 0x40, 0x61, 0x94, 0x00, +0x40, 0x5f, 0x04, 0x00, 0x05, 0xef, 0x80, 0x03, 0x04, 0x1f, 0x80, 0x04, 0x40, 0x3f, 0x0c, 0x00, +0x40, 0x02, 0x2c, 0x0b, 0x05, 0xef, 0x80, 0x05, 0x40, 0x43, 0x00, 0x00, 0x40, 0x00, 0x88, 0x00, +0x14, 0x5f, 0x00, 0x00, 0x14, 0x4f, 0x00, 0x01, 0x14, 0x3f, 0x00, 0x02, 0x14, 0x0f, 0x00, 0x03, +0x44, 0x10, 0x00, 0x00, 0x04, 0x0f, 0x80, 0x17, 0x44, 0x20, 0x00, 0x40, 0x49, 0xf7, 0xac, 0x4e, +0x04, 0x2f, 0x80, 0x05, 0x44, 0x10, 0x00, 0x00, 0x14, 0x11, 0x00, 0x16, 0x51, 0xff, 0x80, 0xa4, +0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, 0x51, 0xff, 0xff, 0xf8, +0x04, 0x20, 0x00, 0x16, 0x50, 0x70, 0x00, 0x18, 0x58, 0x60, 0x00, 0x00, 0x58, 0x80, 0x80, 0x00, +0x40, 0x03, 0x88, 0x00, 0x44, 0x10, 0x00, 0x80, 0x44, 0x20, 0x00, 0x01, 0x49, 0xf7, 0xac, 0x2e, +0x04, 0x03, 0x00, 0x16, 0x5c, 0xf0, 0x00, 0x38, 0x4e, 0xf3, 0x00, 0x06, 0x58, 0x03, 0x00, 0x00, +0x49, 0xff, 0xf9, 0xb8, 0x04, 0x13, 0x00, 0x04, 0x04, 0x03, 0x00, 0x05, 0x41, 0xe0, 0xf4, 0x09, +0x40, 0x50, 0x0c, 0x08, 0x40, 0x30, 0x8c, 0x08, 0x40, 0x42, 0xf8, 0x04, 0x14, 0x4f, 0x80, 0x01, +0x14, 0x3f, 0x80, 0x00, 0x58, 0x1f, 0x80, 0x00, 0x44, 0x20, 0x00, 0x08, 0x50, 0x03, 0x80, 0x38, +0x49, 0xf7, 0xac, 0x7e, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xf9, 0x9c, 0x58, 0x04, 0x00, 0x00, +0x58, 0x13, 0x00, 0x00, 0x44, 0x20, 0x00, 0x10, 0x49, 0xf7, 0xac, 0x72, 0x51, 0xff, 0x80, 0x08, +0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xf4, +0x58, 0x70, 0x00, 0x00, 0x50, 0x00, 0x00, 0x18, 0x14, 0x1f, 0x80, 0x01, 0x59, 0xc1, 0x00, 0x00, +0x14, 0x0f, 0x80, 0x00, 0x44, 0x80, 0x00, 0x00, 0x48, 0x00, 0x00, 0x34, 0x04, 0x33, 0x80, 0x16, +0x04, 0x1f, 0x80, 0x01, 0x05, 0xef, 0x80, 0x00, 0x40, 0x50, 0xa0, 0x00, 0x40, 0x4f, 0x0c, 0x00, +0x40, 0x93, 0x0c, 0x00, 0x58, 0x12, 0x80, 0x00, 0x58, 0x02, 0x00, 0x00, 0x5c, 0xf4, 0x80, 0x40, +0x4e, 0xf2, 0x00, 0x0e, 0x49, 0xf7, 0xac, 0x44, 0x04, 0x33, 0x80, 0x16, 0x40, 0x84, 0x18, 0x00, +0x40, 0x21, 0x98, 0x00, 0x14, 0x23, 0x80, 0x16, 0x48, 0x00, 0x00, 0x14, 0x52, 0x21, 0x80, 0x40, +0x49, 0xf7, 0xac, 0x36, 0x44, 0x60, 0x00, 0x40, 0x04, 0x53, 0x80, 0x16, 0x14, 0x63, 0x80, 0x16, +0x40, 0x43, 0x14, 0x01, 0x58, 0x03, 0x80, 0x00, 0x40, 0x84, 0x10, 0x00, 0x49, 0xff, 0xf9, 0x4a, +0x40, 0x6e, 0x20, 0x01, 0x58, 0x23, 0x00, 0x00, 0x4c, 0x8e, 0x7f, 0xca, 0x04, 0x03, 0x80, 0x04, +0x04, 0x13, 0x80, 0x05, 0x58, 0x24, 0x00, 0x00, 0x44, 0x30, 0x00, 0x00, 0x40, 0x40, 0x08, 0x00, +0x40, 0xf2, 0x08, 0x06, 0x40, 0x50, 0x8c, 0x00, 0x40, 0x52, 0xbc, 0x00, 0x14, 0x43, 0x80, 0x04, +0x14, 0x53, 0x80, 0x05, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0x98, 0xbc, 0x3e, 0x1f, 0xd3, 0xa8, 0x58, 0x60, 0x00, 0x00, 0x44, 0x20, 0x00, 0x10, +0x49, 0xf7, 0xab, 0xfe, 0x50, 0x03, 0x00, 0x18, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x40, +0x49, 0xf7, 0xab, 0x84, 0x44, 0x20, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, +0x14, 0x23, 0x00, 0x16, 0x14, 0x03, 0x00, 0x04, 0x14, 0x13, 0x00, 0x05, 0x3a, 0x6f, 0x98, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0x9c, 0x58, 0x90, 0x00, 0x00, +0x58, 0x80, 0x80, 0x00, 0x58, 0x71, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x60, +0x58, 0x0f, 0x80, 0x00, 0x49, 0xf7, 0xab, 0x62, 0x58, 0x0f, 0x80, 0x00, 0x49, 0xff, 0xff, 0xca, +0x58, 0x0f, 0x80, 0x00, 0x58, 0x14, 0x80, 0x00, 0x58, 0x24, 0x00, 0x00, 0x49, 0xff, 0xff, 0x5e, +0x58, 0x0f, 0x80, 0x00, 0x58, 0x13, 0x80, 0x00, 0x58, 0x6f, 0x80, 0x00, 0x49, 0xff, 0xff, 0x0e, +0x51, 0xff, 0x80, 0x64, 0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, +0x51, 0xff, 0xff, 0xb4, 0x55, 0xc0, 0x00, 0xff, 0x49, 0xff, 0xb9, 0x5a, 0x44, 0x10, 0x00, 0x3a, +0x50, 0x20, 0xff, 0xfc, 0x40, 0x81, 0x00, 0x1a, 0x40, 0x80, 0x80, 0x1b, 0x58, 0x04, 0x00, 0x00, +0x49, 0xf7, 0xb0, 0xec, 0x58, 0x70, 0x00, 0x00, 0x44, 0x50, 0x0f, 0xff, 0x4c, 0x72, 0xc0, 0x08, +0x46, 0x0c, 0x00, 0x00, 0x58, 0x00, 0x00, 0x9a, 0x48, 0x00, 0x00, 0xf6, 0x50, 0x6f, 0x80, 0x0c, +0x2e, 0x07, 0xf7, 0xa9, 0x58, 0x13, 0x00, 0x00, 0x50, 0x3f, 0x80, 0x3c, 0x50, 0x2f, 0x80, 0x30, +0x49, 0xff, 0xad, 0x22, 0x58, 0x03, 0x80, 0x00, 0x00, 0x93, 0x00, 0x15, 0x49, 0xf7, 0xb0, 0xa0, +0x58, 0x60, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, 0x58, 0x24, 0x00, 0x00, 0x49, 0xf7, 0xab, 0x0e, +0x12, 0x83, 0x00, 0x00, 0x00, 0x13, 0x00, 0x03, 0x2e, 0x37, 0xf7, 0xb2, 0x4e, 0x33, 0x00, 0x0a, +0x44, 0x5f, 0xff, 0x87, 0x40, 0x40, 0x94, 0x02, 0x58, 0x12, 0x00, 0x18, 0x48, 0x00, 0x00, 0x08, +0x45, 0xef, 0xff, 0x87, 0x40, 0x80, 0xf8, 0x02, 0x58, 0x14, 0x00, 0x60, 0x10, 0x13, 0x00, 0x03, +0x00, 0x43, 0x00, 0x05, 0x00, 0x83, 0x00, 0x03, 0x54, 0x54, 0x00, 0x7f, 0x10, 0x53, 0x00, 0x03, +0x54, 0xa2, 0x00, 0x9f, 0x2e, 0x17, 0xf7, 0xa9, 0x58, 0x25, 0x00, 0x40, 0x10, 0x13, 0x00, 0x04, +0x10, 0x23, 0x00, 0x05, 0x40, 0x11, 0x14, 0x09, 0x40, 0x10, 0x94, 0x08, 0x4e, 0x92, 0x00, 0x06, +0x58, 0x10, 0x80, 0x0d, 0x48, 0x00, 0x00, 0x04, 0x58, 0x10, 0x80, 0x0c, 0x10, 0x13, 0x00, 0x05, +0x00, 0x13, 0x00, 0x07, 0x00, 0x83, 0x00, 0x05, 0x44, 0xaf, 0xff, 0x80, 0x40, 0x44, 0x28, 0x04, +0x54, 0x10, 0x80, 0x03, 0x10, 0x13, 0x00, 0x07, 0x10, 0x43, 0x00, 0x05, 0x2f, 0xe7, 0xf7, 0xaf, +0x02, 0x23, 0x00, 0x0d, 0x00, 0xa3, 0x00, 0x09, 0x41, 0xef, 0x08, 0x08, 0x02, 0x53, 0x00, 0x06, +0x00, 0x83, 0x00, 0x0b, 0x44, 0x0f, 0xc0, 0x03, 0x40, 0x10, 0xf8, 0x04, 0x02, 0x43, 0x00, 0x07, +0x00, 0x33, 0x00, 0x15, 0x40, 0x21, 0x00, 0x02, 0x42, 0xa5, 0x10, 0x09, 0x44, 0x0f, 0xff, 0x80, +0x01, 0xe3, 0x00, 0x19, 0x40, 0x84, 0x00, 0x04, 0x54, 0x52, 0x80, 0x3f, 0x40, 0x0f, 0x0c, 0x09, +0x40, 0x00, 0x0c, 0x08, 0x58, 0x52, 0xf8, 0x00, 0x54, 0x42, 0x70, 0x00, 0x58, 0x31, 0x80, 0x20, +0x58, 0x21, 0x00, 0x0c, 0x45, 0xe0, 0x00, 0x00, 0x10, 0x13, 0x00, 0x07, 0x10, 0xa3, 0x00, 0x09, +0x11, 0xe3, 0x00, 0x0a, 0x10, 0x83, 0x00, 0x0b, 0x12, 0x53, 0x00, 0x06, 0x12, 0x43, 0x00, 0x07, +0x10, 0x33, 0x00, 0x15, 0x12, 0x23, 0x00, 0x0d, 0x10, 0x03, 0x00, 0x19, 0x50, 0x63, 0x00, 0x20, +0x4e, 0x92, 0x00, 0x06, 0x44, 0x00, 0x01, 0xc8, 0x48, 0x00, 0x00, 0x04, 0x44, 0x00, 0x01, 0x48, +0x12, 0x03, 0x00, 0x00, 0x4f, 0xc2, 0x00, 0x08, 0x03, 0xc3, 0x00, 0x00, 0x58, 0x9e, 0x10, 0x00, +0x12, 0x93, 0x00, 0x00, 0x51, 0xcf, 0x80, 0x47, 0x2e, 0x07, 0xf7, 0xae, 0x58, 0x1e, 0x00, 0x00, +0x3e, 0x2f, 0xf7, 0xa0, 0x49, 0xff, 0xaa, 0x48, 0x3e, 0x1f, 0xf7, 0xa0, 0x44, 0x20, 0x00, 0x06, +0x50, 0x03, 0x00, 0x04, 0x49, 0xf7, 0xaa, 0x4e, 0x50, 0xa3, 0x00, 0x0a, 0x2e, 0x07, 0xf7, 0xaf, +0x58, 0x1e, 0x00, 0x00, 0x58, 0x25, 0x00, 0x00, 0x49, 0xff, 0xa3, 0xa0, 0x3e, 0x1f, 0xf7, 0x98, +0x44, 0x20, 0x00, 0x06, 0x58, 0x05, 0x00, 0x00, 0x49, 0xf7, 0xaa, 0x3c, 0x3e, 0x1f, 0xf7, 0xa0, +0x44, 0x20, 0x00, 0x06, 0x50, 0x03, 0x00, 0x10, 0x49, 0xf7, 0xaa, 0x34, 0x2e, 0x27, 0xf7, 0xb2, +0x44, 0x00, 0x00, 0x03, 0x44, 0x10, 0x00, 0x0c, 0x40, 0x10, 0x08, 0x1a, 0x44, 0x30, 0x00, 0x01, +0x44, 0x00, 0x00, 0x02, 0x58, 0x23, 0x80, 0x00, 0x49, 0xf7, 0xb3, 0xf4, 0x4e, 0x02, 0x00, 0x0a, +0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x4c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x58, 0x03, 0x80, 0x00, 0x49, 0xf7, 0xaf, 0xce, 0x46, 0x0c, 0x00, 0x00, 0x58, 0x00, 0x00, 0x01, +0x48, 0xff, 0xff, 0xf2, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xdc, 0x54, 0x42, 0x00, 0xff, +0x55, 0xc0, 0x80, 0xff, 0x54, 0x91, 0x00, 0xff, 0x54, 0x31, 0x80, 0xff, 0x4e, 0x42, 0x00, 0x58, +0x44, 0x50, 0x00, 0x03, 0x4c, 0x32, 0x80, 0x06, 0x44, 0x50, 0x00, 0x05, 0x4c, 0x32, 0xc0, 0x82, +0x44, 0xa0, 0x00, 0x00, 0x58, 0x70, 0x00, 0x00, 0x58, 0x95, 0x00, 0x00, 0x58, 0x85, 0x00, 0x00, +0x58, 0x6f, 0x80, 0x00, 0x48, 0x00, 0x00, 0x38, 0x00, 0x03, 0x80, 0x00, 0x44, 0x50, 0x00, 0xdd, +0x4c, 0x02, 0xc0, 0x28, 0x50, 0x03, 0x80, 0x02, 0x3e, 0x1f, 0xe1, 0x48, 0x44, 0x20, 0x00, 0x03, +0x49, 0xf7, 0xaa, 0x8e, 0x4e, 0x03, 0x00, 0x1e, 0x00, 0x53, 0x80, 0x05, 0x45, 0xe0, 0x00, 0x01, +0x4c, 0x5f, 0x40, 0x18, 0x00, 0x43, 0x80, 0x01, 0x00, 0x93, 0x80, 0x06, 0x50, 0x82, 0x7f, 0xfa, +0x54, 0x84, 0x00, 0xff, 0x50, 0x13, 0x80, 0x08, 0x58, 0x0f, 0x80, 0x00, 0x58, 0x24, 0x00, 0x00, +0x54, 0x94, 0x80, 0x03, 0x5c, 0xf4, 0x00, 0x10, 0x4e, 0xf3, 0x00, 0x44, 0x49, 0xf7, 0xaa, 0x48, +0x00, 0x23, 0x80, 0x01, 0x50, 0x11, 0x00, 0x02, 0x40, 0xa5, 0x04, 0x00, 0x40, 0x73, 0x84, 0x00, +0x54, 0xa5, 0x00, 0xff, 0x00, 0x53, 0x80, 0x01, 0x50, 0x32, 0x80, 0x02, 0x40, 0x01, 0xa8, 0x00, +0x40, 0xfe, 0x00, 0x07, 0x4e, 0xf2, 0xff, 0xc2, 0x48, 0x00, 0x00, 0x14, 0x44, 0x50, 0x00, 0x05, +0x4c, 0x32, 0xc0, 0x30, 0x58, 0x10, 0x00, 0x00, 0x58, 0x2e, 0x00, 0x00, 0x58, 0x0f, 0x80, 0x00, +0x49, 0xf7, 0xaa, 0x26, 0x5c, 0xf4, 0x80, 0x04, 0x4e, 0xf2, 0x00, 0x1c, 0x58, 0x8e, 0x00, 0x00, +0x58, 0x24, 0x00, 0x00, 0x58, 0x1f, 0x80, 0x00, 0x3e, 0x0f, 0xf7, 0xfc, 0x49, 0xf7, 0xaa, 0x18, +0x3e, 0x4f, 0xf7, 0xa8, 0x00, 0x12, 0x00, 0x03, 0x10, 0x92, 0x00, 0x05, 0x58, 0x24, 0x80, 0x00, +0x50, 0x02, 0x00, 0x54, 0x49, 0xff, 0xed, 0x4e, 0x44, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x04, +0x44, 0x00, 0x00, 0x00, 0x51, 0xff, 0x80, 0x24, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x44, 0x90, 0x00, 0x00, 0x58, 0x84, 0x80, 0x00, 0x48, 0xff, 0xff, 0xdc, 0x3a, 0x2f, 0x94, 0x3c, +0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0xf4, 0x58, 0x90, 0x00, 0x00, 0x50, 0x0f, 0x80, 0x20, +0x14, 0x0f, 0x80, 0x01, 0x58, 0x70, 0x80, 0x00, 0x44, 0x60, 0x00, 0x00, 0x04, 0x2f, 0x80, 0x01, +0x44, 0x5f, 0xff, 0xff, 0x50, 0x41, 0x00, 0x04, 0x14, 0x4f, 0x80, 0x01, 0x40, 0x04, 0x98, 0x00, +0x04, 0x31, 0x00, 0x00, 0x50, 0x12, 0x00, 0x04, 0x58, 0x21, 0x80, 0x00, 0x4c, 0x32, 0x80, 0x0c, +0x14, 0x1f, 0x80, 0x01, 0x40, 0x63, 0x0c, 0x00, 0x04, 0x12, 0x00, 0x00, 0x49, 0xf7, 0xa9, 0xd0, +0x48, 0xff, 0xff, 0xe6, 0x58, 0x03, 0x00, 0x00, 0x14, 0x63, 0x80, 0x00, 0x51, 0xff, 0x80, 0x0c, +0x3a, 0x6f, 0xa4, 0x84, 0x51, 0xff, 0x80, 0x10, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, +0x51, 0xff, 0xff, 0x94, 0x44, 0x80, 0x00, 0x00, 0x58, 0x61, 0x00, 0x00, 0x55, 0xc0, 0x00, 0xff, +0x58, 0xa0, 0x80, 0x00, 0x58, 0x04, 0x00, 0x00, 0x44, 0x10, 0x02, 0x00, 0x14, 0x8f, 0x80, 0x19, +0x49, 0xff, 0xbd, 0x74, 0x00, 0x43, 0x00, 0x02, 0x00, 0x13, 0x00, 0x03, 0x40, 0x32, 0x20, 0x08, +0x40, 0x21, 0x84, 0x04, 0x50, 0x21, 0x00, 0x04, 0x50, 0x1f, 0x80, 0x64, 0x58, 0x33, 0x00, 0x00, +0x44, 0x4f, 0xff, 0xff, 0x50, 0x9f, 0x80, 0x54, 0x58, 0x70, 0x00, 0x00, 0x49, 0xff, 0xff, 0xa0, +0x58, 0x14, 0x00, 0x00, 0x58, 0x04, 0x80, 0x00, 0x44, 0x20, 0x00, 0x10, 0x49, 0xf7, 0xa9, 0x1e, +0x44, 0x00, 0x00, 0x02, 0x4d, 0xc0, 0x40, 0x1c, 0x50, 0x8f, 0x80, 0x04, 0x04, 0x3f, 0x80, 0x19, +0x58, 0x05, 0x00, 0x00, 0x58, 0x23, 0x80, 0x00, 0x58, 0x44, 0x00, 0x00, 0x44, 0x50, 0x00, 0x14, +0x50, 0x12, 0xff, 0xfc, 0x49, 0xff, 0xf3, 0x76, 0x58, 0x04, 0x80, 0x00, 0x58, 0x14, 0x00, 0x00, +0x44, 0x20, 0x00, 0x10, 0x49, 0xf7, 0xa9, 0x74, 0x48, 0x00, 0x00, 0x10, 0x44, 0x10, 0x00, 0x10, +0x04, 0x3f, 0x80, 0x19, 0x58, 0x05, 0x00, 0x00, 0x58, 0x44, 0x80, 0x00, 0x58, 0x23, 0x80, 0x00, +0x58, 0x50, 0x80, 0x00, 0x49, 0xff, 0xf2, 0xb2, 0x50, 0x1f, 0x80, 0x54, 0x44, 0x20, 0x00, 0x10, +0x50, 0x03, 0x00, 0x51, 0x49, 0xf7, 0xa9, 0x5c, 0x58, 0x03, 0x80, 0x00, 0x49, 0xff, 0xbc, 0x4e, +0x51, 0xff, 0x80, 0x6c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, +0x51, 0xff, 0xff, 0xf4, 0x2e, 0x87, 0xf7, 0xa8, 0x04, 0x6f, 0x80, 0x0c, 0x44, 0x70, 0x00, 0x03, +0x44, 0x90, 0x00, 0x01, 0x44, 0x50, 0x00, 0x00, 0x44, 0x00, 0x00, 0x5f, 0x10, 0x73, 0x00, 0x01, +0x10, 0x93, 0x00, 0x00, 0x10, 0x53, 0x00, 0x02, 0x10, 0x03, 0x00, 0x03, 0x59, 0xc1, 0x80, 0x00, +0x14, 0x4f, 0x80, 0x01, 0x54, 0x70, 0x80, 0xff, 0x54, 0x21, 0x00, 0xff, 0x4e, 0x82, 0x00, 0x06, +0x44, 0x00, 0x00, 0x02, 0x48, 0x00, 0x00, 0x04, 0x44, 0x0f, 0xff, 0xfe, 0x10, 0x03, 0x00, 0x04, +0x3e, 0x9f, 0xf7, 0xa8, 0x00, 0x54, 0x80, 0x04, 0x00, 0x43, 0x00, 0x06, 0x56, 0x02, 0x80, 0x04, +0x44, 0xa0, 0x00, 0x01, 0x45, 0xe0, 0x00, 0x02, 0x40, 0x9f, 0x00, 0x1a, 0x40, 0x95, 0x00, 0x1b, +0x40, 0x12, 0x0c, 0x09, 0x40, 0x10, 0x8c, 0x08, 0x40, 0x50, 0xa4, 0x04, 0x10, 0x53, 0x00, 0x06, +0x5c, 0xf3, 0x80, 0x05, 0x4e, 0xf3, 0x00, 0x06, 0x42, 0x52, 0x8c, 0x09, 0x48, 0x00, 0x00, 0x04, +0x58, 0x52, 0x80, 0x08, 0x10, 0x53, 0x00, 0x06, 0x4e, 0x83, 0x00, 0x1a, 0x5c, 0xf3, 0x80, 0x05, +0x4e, 0xf3, 0x00, 0x16, 0x00, 0x53, 0x00, 0x06, 0x54, 0x01, 0x00, 0x03, 0x44, 0x3f, 0xff, 0xcf, +0x41, 0xe0, 0x10, 0x08, 0x40, 0xa2, 0x8c, 0x02, 0x40, 0x45, 0x78, 0x04, 0x44, 0x20, 0x00, 0x03, +0x10, 0x43, 0x00, 0x06, 0x4c, 0x71, 0x40, 0x14, 0x48, 0x00, 0x00, 0x16, 0x44, 0x10, 0x00, 0x03, +0x4c, 0x70, 0xc0, 0x0a, 0x00, 0x43, 0x00, 0x06, 0x58, 0x22, 0x00, 0x40, 0x10, 0x23, 0x00, 0x06, +0x48, 0x00, 0x00, 0x0a, 0x44, 0xa0, 0x00, 0x01, 0x4c, 0x75, 0x00, 0x06, 0x44, 0x50, 0x00, 0x05, +0x4c, 0x72, 0xc0, 0x0e, 0x00, 0x03, 0x00, 0x06, 0x44, 0x1f, 0xff, 0x80, 0x40, 0x30, 0x04, 0x04, +0x44, 0x50, 0x00, 0x01, 0x10, 0x33, 0x00, 0x06, 0x4c, 0x72, 0x80, 0x08, 0x00, 0x43, 0x00, 0x05, +0x58, 0x22, 0x00, 0x01, 0x10, 0x23, 0x00, 0x05, 0x4e, 0x82, 0x00, 0x08, 0x5c, 0xf3, 0x80, 0x03, +0x4e, 0xf2, 0x00, 0x08, 0x48, 0x00, 0x00, 0x12, 0x5c, 0xf3, 0x80, 0x05, 0x4e, 0xf3, 0x00, 0x22, +0x01, 0xe3, 0x00, 0x05, 0x58, 0xaf, 0x00, 0x02, 0x10, 0xa3, 0x00, 0x05, 0x4e, 0x82, 0x00, 0x1a, +0x44, 0x50, 0x00, 0x03, 0x4c, 0x72, 0x80, 0x06, 0x44, 0x50, 0x00, 0x05, 0x4c, 0x72, 0xc0, 0x08, +0x00, 0x13, 0x00, 0x05, 0x58, 0x00, 0x80, 0x10, 0x10, 0x03, 0x00, 0x05, 0x4e, 0x82, 0x00, 0x0a, +0x44, 0x20, 0x00, 0x01, 0x4c, 0x71, 0x00, 0x06, 0x44, 0x50, 0x00, 0x03, 0x4c, 0x72, 0xc0, 0x10, +0x2e, 0x17, 0xf7, 0xac, 0x45, 0xe0, 0x00, 0x10, 0x56, 0x30, 0x80, 0x02, 0x40, 0x5f, 0x04, 0x08, +0x40, 0xa2, 0x8c, 0x1a, 0x40, 0xaf, 0x0c, 0x1b, 0x10, 0xa3, 0x00, 0x08, 0x50, 0x03, 0x00, 0x09, +0x3e, 0x1f, 0xf7, 0xb4, 0x44, 0x20, 0x00, 0x08, 0x49, 0xf7, 0xa8, 0x82, 0x5c, 0xf3, 0x80, 0x04, +0x4e, 0xf3, 0x00, 0x08, 0x4e, 0x83, 0x00, 0x2c, 0x44, 0x50, 0x00, 0x05, 0x4c, 0x72, 0xc0, 0x28, +0x50, 0x03, 0x00, 0x11, 0x58, 0x1e, 0x00, 0x00, 0x44, 0x20, 0x00, 0x20, 0x49, 0xf7, 0xa8, 0x70, +0x4e, 0x83, 0x00, 0x16, 0x44, 0x50, 0x00, 0x05, 0x4c, 0x72, 0xc0, 0x12, 0x50, 0x1e, 0x00, 0x10, +0x50, 0x03, 0x00, 0x31, 0x44, 0x20, 0x00, 0x10, 0x49, 0xf7, 0xa8, 0x62, 0x00, 0x33, 0x00, 0x40, +0x50, 0x51, 0x80, 0x02, 0x10, 0x53, 0x00, 0x40, 0x48, 0x00, 0x00, 0x0e, 0x44, 0x50, 0x00, 0x03, +0x4c, 0x72, 0xc0, 0x06, 0x4e, 0x83, 0x00, 0x08, 0x48, 0x00, 0x00, 0x0e, 0x44, 0x50, 0x00, 0x05, +0x4c, 0x72, 0xc0, 0x0a, 0x04, 0x1f, 0x80, 0x01, 0x50, 0x03, 0x00, 0x41, 0x44, 0x20, 0x00, 0x06, +0x49, 0xf7, 0xa8, 0x46, 0x50, 0x03, 0x00, 0x51, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x10, +0x49, 0xf7, 0xa7, 0xcc, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x72, 0x80, 0x0a, 0x58, 0x04, 0x80, 0x00, +0x58, 0x23, 0x00, 0x00, 0x3e, 0x1f, 0xf7, 0xbc, 0x49, 0xff, 0xfe, 0x72, 0x51, 0xff, 0x80, 0x0c, +0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xfe, 0x84, +0x44, 0x80, 0x21, 0xc8, 0x58, 0x60, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, 0x54, 0x71, 0x00, 0xff, +0x50, 0x0f, 0x81, 0x60, 0x44, 0x20, 0x00, 0x10, 0x4b, 0xe0, 0x20, 0x01, 0x44, 0x10, 0x00, 0x00, +0x44, 0x20, 0x00, 0x50, 0x50, 0x0f, 0x81, 0x00, 0x4b, 0xe0, 0x20, 0x01, 0x50, 0x9f, 0x81, 0x74, +0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0xff, 0x58, 0x0f, 0x80, 0x00, 0x4b, 0xe0, 0x20, 0x01, +0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x02, 0x58, 0x04, 0x80, 0x00, 0x4b, 0xe0, 0x20, 0x01, +0x50, 0x13, 0x00, 0x05, 0x58, 0x04, 0x80, 0x00, 0x44, 0x20, 0x00, 0x02, 0x49, 0xf7, 0xa7, 0xf8, +0x44, 0x00, 0x00, 0x01, 0x2e, 0x87, 0xf7, 0xa8, 0x4c, 0x70, 0x00, 0x0a, 0x44, 0x20, 0x00, 0x03, +0x4c, 0x71, 0x00, 0x06, 0x44, 0x30, 0x00, 0x05, 0x4c, 0x71, 0xc0, 0x38, 0x44, 0x10, 0x00, 0x00, +0x44, 0x20, 0x00, 0x08, 0x50, 0x0f, 0x81, 0x50, 0x49, 0xf7, 0xa7, 0x70, 0x50, 0x23, 0x00, 0x09, +0x58, 0x01, 0x00, 0x00, 0x3e, 0x1f, 0xf7, 0xb4, 0x50, 0x53, 0x00, 0x11, 0x00, 0x40, 0x00, 0x00, +0x00, 0x30, 0x80, 0x00, 0x50, 0x00, 0x00, 0x01, 0x40, 0xf1, 0x90, 0x06, 0x4e, 0xf3, 0x00, 0x1a, +0x40, 0xf2, 0x0c, 0x06, 0x4e, 0xf3, 0x00, 0x06, 0x50, 0x10, 0x80, 0x01, 0x4c, 0x02, 0xff, 0xf0, +0x44, 0x00, 0x00, 0x00, 0x50, 0x4f, 0x81, 0x50, 0x38, 0xa1, 0x00, 0x00, 0x38, 0x52, 0x00, 0x00, +0x50, 0x00, 0x00, 0x01, 0x4c, 0xa2, 0xc0, 0x06, 0x45, 0xc0, 0x00, 0x08, 0x4c, 0x0e, 0x7f, 0xf6, +0x44, 0x40, 0x00, 0x01, 0x4c, 0x72, 0x00, 0x6a, 0x00, 0x33, 0x00, 0x02, 0x00, 0x23, 0x00, 0x03, +0x40, 0x91, 0xa0, 0x08, 0x50, 0xa3, 0x00, 0x51, 0x41, 0xe4, 0x88, 0x04, 0x58, 0x15, 0x00, 0x00, +0x44, 0x20, 0x00, 0x10, 0x50, 0x0f, 0x81, 0x50, 0x51, 0xcf, 0x00, 0x04, 0x49, 0xf7, 0xa7, 0xa0, +0x44, 0x10, 0x00, 0x00, 0x58, 0x05, 0x00, 0x00, 0x44, 0x20, 0x00, 0x10, 0x49, 0xf7, 0xa7, 0x26, +0x00, 0x0f, 0x81, 0x75, 0x44, 0x10, 0x00, 0x01, 0x54, 0x00, 0x00, 0x07, 0x4c, 0x00, 0xc0, 0x18, +0x3e, 0x9f, 0xf7, 0xa8, 0x44, 0xa0, 0x00, 0x02, 0x50, 0x10, 0x80, 0x0f, 0x10, 0xa4, 0x80, 0x04, +0x50, 0x04, 0x80, 0x14, 0x58, 0x3e, 0x00, 0x00, 0x58, 0x23, 0x00, 0x00, 0x50, 0x4f, 0x81, 0x60, +0x58, 0x50, 0x80, 0x00, 0x49, 0xff, 0xf0, 0xca, 0x48, 0x00, 0x00, 0x22, 0x44, 0x50, 0x00, 0x02, +0x4c, 0x02, 0xc0, 0x1e, 0x3e, 0xaf, 0xf7, 0xa8, 0x58, 0x3e, 0x00, 0x00, 0x45, 0xc0, 0x00, 0x04, +0x11, 0xc5, 0x00, 0x04, 0x50, 0x05, 0x00, 0x14, 0x50, 0x10, 0x80, 0x0f, 0x58, 0x23, 0x00, 0x00, +0x50, 0x4f, 0x81, 0x00, 0x50, 0x50, 0x80, 0x04, 0x49, 0xff, 0xf1, 0x5c, 0x50, 0x1f, 0x81, 0x00, +0x50, 0x0f, 0x81, 0x60, 0x44, 0x20, 0x00, 0x10, 0x49, 0xf7, 0xa7, 0x5a, 0x50, 0x0f, 0x81, 0x50, +0x50, 0x1f, 0x81, 0x60, 0x44, 0x20, 0x00, 0x10, 0x49, 0xf7, 0xa7, 0x7a, 0x4e, 0x02, 0x00, 0x06, +0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x6c, 0x00, 0x03, 0x00, 0x61, 0x00, 0x13, 0x00, 0x62, +0x40, 0x40, 0x20, 0x08, 0x40, 0x32, 0x04, 0x04, 0x4e, 0x36, 0x00, 0x06, 0x44, 0x00, 0x00, 0x01, +0x48, 0x00, 0x00, 0x5e, 0x45, 0xe0, 0x00, 0x03, 0x4c, 0x7f, 0x40, 0x06, 0x4e, 0x83, 0x00, 0x08, +0x48, 0x00, 0x00, 0x46, 0x44, 0x20, 0x00, 0x05, 0x4c, 0x71, 0x40, 0x42, 0x00, 0x1f, 0x81, 0x75, +0x45, 0xe0, 0x00, 0x02, 0x54, 0x50, 0x80, 0x07, 0x58, 0x4f, 0x80, 0x00, 0x50, 0x03, 0x00, 0x63, +0x4c, 0x5f, 0x40, 0x20, 0x00, 0x53, 0x00, 0x61, 0x00, 0x23, 0x00, 0x62, 0x40, 0x92, 0xa0, 0x08, +0x40, 0x14, 0x88, 0x04, 0x40, 0x3f, 0x0c, 0x08, 0x3e, 0x2f, 0xf7, 0xcc, 0x50, 0x5f, 0x81, 0x70, +0x44, 0x90, 0x00, 0x00, 0x14, 0x9f, 0x80, 0x5c, 0x49, 0xff, 0xee, 0xd4, 0x04, 0x3f, 0x80, 0x5c, +0x00, 0x4f, 0x81, 0x71, 0x10, 0x33, 0x00, 0x62, 0x10, 0x43, 0x00, 0x61, 0x48, 0x00, 0x00, 0x0a, +0x58, 0x20, 0x00, 0x00, 0x3e, 0x0f, 0xf7, 0xcc, 0x50, 0x13, 0x00, 0x31, 0x49, 0x00, 0x01, 0xe6, +0x4e, 0x83, 0x00, 0x0e, 0x44, 0x00, 0x00, 0x05, 0x4c, 0x70, 0x40, 0x0a, 0x00, 0x1f, 0x81, 0x75, +0x41, 0xe0, 0x90, 0x09, 0x54, 0x2f, 0x00, 0x03, 0x48, 0x00, 0x00, 0x04, 0x44, 0x20, 0x00, 0x00, +0x00, 0x13, 0x00, 0x62, 0x58, 0x33, 0x80, 0x00, 0x58, 0x44, 0x00, 0x00, 0x58, 0x0f, 0x80, 0x00, +0x49, 0xff, 0xfc, 0x52, 0x44, 0x30, 0x00, 0x00, 0x40, 0x01, 0x80, 0x06, 0x51, 0xff, 0x81, 0x7c, +0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xcc, +0x3e, 0x6f, 0xf7, 0xa8, 0x00, 0x33, 0x00, 0x04, 0x50, 0x9f, 0x80, 0x2f, 0x00, 0x03, 0x00, 0x07, +0x58, 0x70, 0x80, 0x00, 0x58, 0x81, 0x00, 0x00, 0x58, 0x14, 0x80, 0x00, 0x50, 0x2f, 0x80, 0x28, +0x14, 0x3f, 0x80, 0x07, 0x49, 0xff, 0x9f, 0x9a, 0x00, 0x03, 0x00, 0x06, 0x58, 0x14, 0x80, 0x00, +0x50, 0x2f, 0x80, 0x20, 0x49, 0xff, 0xa6, 0x28, 0x58, 0x03, 0x80, 0x00, 0x58, 0x14, 0x00, 0x00, +0x44, 0x20, 0x00, 0x05, 0x49, 0xff, 0xfe, 0x8a, 0x4e, 0x02, 0x01, 0x12, 0x00, 0x13, 0x80, 0x0f, +0x00, 0x23, 0x80, 0x10, 0x3e, 0x0f, 0xd3, 0xb8, 0x49, 0xf7, 0xa6, 0x02, 0x50, 0x13, 0x80, 0x09, +0x44, 0x20, 0x00, 0x08, 0x50, 0x03, 0x00, 0x0c, 0x49, 0xf7, 0xa6, 0xa2, 0x44, 0x00, 0x00, 0xa3, +0x49, 0xf7, 0xab, 0xe4, 0x14, 0x0f, 0x80, 0x06, 0x49, 0xf7, 0xab, 0xb2, 0x44, 0x10, 0x00, 0x00, +0x44, 0x20, 0x00, 0xa3, 0x58, 0x70, 0x00, 0x00, 0x49, 0xf7, 0xa6, 0x20, 0x44, 0x10, 0x00, 0xa3, +0x12, 0x13, 0x80, 0x00, 0x50, 0x83, 0x80, 0x20, 0x00, 0x03, 0x00, 0x0a, 0x00, 0x13, 0x80, 0x03, +0x4e, 0x03, 0x00, 0x0a, 0x45, 0xcf, 0xff, 0x87, 0x40, 0x20, 0xf0, 0x02, 0x58, 0x11, 0x00, 0x18, +0x48, 0x00, 0x00, 0x08, 0x44, 0x5f, 0xff, 0x87, 0x40, 0x40, 0x94, 0x02, 0x58, 0x12, 0x00, 0x60, +0x10, 0x13, 0x80, 0x03, 0x00, 0x63, 0x80, 0x07, 0x01, 0xc3, 0x80, 0x03, 0x44, 0x4f, 0xff, 0xcc, +0x54, 0x1e, 0x00, 0x7f, 0x10, 0x13, 0x80, 0x03, 0x55, 0xc3, 0x00, 0x03, 0x3e, 0x6f, 0xf7, 0xa8, +0x00, 0x03, 0x00, 0x01, 0x11, 0xc3, 0x80, 0x07, 0x10, 0x03, 0x80, 0x04, 0x10, 0x43, 0x80, 0x05, +0x00, 0x23, 0x80, 0x15, 0x00, 0xa3, 0x00, 0x07, 0x02, 0x53, 0x80, 0x0d, 0x54, 0x31, 0x00, 0xdd, +0x00, 0x13, 0x80, 0x06, 0x00, 0x03, 0x80, 0x09, 0x00, 0x43, 0x80, 0x0b, 0x03, 0xe3, 0x80, 0x06, +0x02, 0x93, 0x80, 0x07, 0x40, 0xa5, 0x08, 0x08, 0x14, 0x3f, 0x80, 0x05, 0x44, 0x2f, 0xc0, 0x03, +0x40, 0x52, 0x88, 0x02, 0x44, 0x3f, 0xff, 0x80, 0x40, 0x2e, 0x28, 0x04, 0x40, 0xa0, 0x8c, 0x04, +0x00, 0x33, 0x80, 0x19, 0x42, 0x10, 0x10, 0x09, 0x44, 0x0f, 0xff, 0xa0, 0x41, 0xc2, 0x00, 0x04, +0x40, 0x41, 0x8c, 0x09, 0x40, 0x42, 0x0c, 0x08, 0x04, 0x0f, 0x80, 0x05, 0x55, 0xef, 0x00, 0x3f, +0x58, 0x30, 0x00, 0x22, 0x59, 0xef, 0x78, 0x00, 0x10, 0x33, 0x80, 0x15, 0x10, 0x23, 0x80, 0x07, +0x10, 0x13, 0x80, 0x09, 0x13, 0xe3, 0x80, 0x06, 0x54, 0x94, 0xf0, 0x00, 0x58, 0x52, 0x80, 0x0c, +0x44, 0x20, 0x00, 0x00, 0x44, 0x1f, 0xff, 0x80, 0x44, 0x30, 0x00, 0x01, 0x45, 0xe0, 0x41, 0x08, +0x10, 0xa3, 0x80, 0x06, 0x10, 0x23, 0x80, 0x0a, 0x11, 0xc3, 0x80, 0x0b, 0x12, 0x93, 0x80, 0x07, +0x12, 0x53, 0x80, 0x0d, 0x10, 0x43, 0x80, 0x19, 0x10, 0x13, 0x80, 0x14, 0x3e, 0x37, 0xe3, 0x45, +0x13, 0xe4, 0x00, 0x00, 0x00, 0x73, 0x00, 0xb5, 0x4e, 0x72, 0x00, 0x06, 0x44, 0x70, 0x51, 0x08, +0x12, 0x74, 0x00, 0x00, 0x44, 0x20, 0x00, 0x00, 0x12, 0x24, 0x00, 0x0b, 0x44, 0x60, 0x21, 0xa0, +0x3e, 0x1f, 0xf7, 0xa0, 0x44, 0x20, 0x00, 0x06, 0x50, 0x04, 0x00, 0x04, 0x4b, 0xe0, 0x18, 0x01, +0x3e, 0x1f, 0xf7, 0x98, 0x44, 0x20, 0x00, 0x06, 0x50, 0x04, 0x00, 0x0a, 0x4b, 0xe0, 0x18, 0x01, +0x3e, 0x1f, 0xf7, 0xa0, 0x44, 0x20, 0x00, 0x06, 0x50, 0x04, 0x00, 0x10, 0x4b, 0xe0, 0x18, 0x01, +0x3e, 0x1f, 0xe1, 0x4c, 0x44, 0x20, 0x00, 0x06, 0x50, 0x04, 0x00, 0x18, 0x4b, 0xe0, 0x18, 0x01, +0x3e, 0x1f, 0xe1, 0x54, 0x44, 0x20, 0x00, 0x02, 0x50, 0x04, 0x00, 0x1e, 0x4b, 0xe0, 0x18, 0x01, +0x44, 0x60, 0x00, 0x00, 0x2e, 0x27, 0xf7, 0xad, 0x04, 0x0f, 0x80, 0x07, 0x58, 0x33, 0x00, 0x00, +0x44, 0x10, 0x00, 0x06, 0x58, 0x53, 0x00, 0x00, 0x50, 0x84, 0x00, 0x20, 0x58, 0x43, 0x00, 0x00, +0x14, 0x8f, 0x80, 0x02, 0x14, 0x6f, 0x80, 0x00, 0x14, 0x6f, 0x80, 0x01, 0x49, 0xff, 0xfc, 0x68, +0x2e, 0x37, 0xf7, 0xb2, 0x44, 0x10, 0x00, 0x0c, 0x44, 0x50, 0x00, 0x03, 0x04, 0x2f, 0x80, 0x06, +0x40, 0x12, 0x8c, 0x1a, 0x44, 0x00, 0x00, 0x02, 0x44, 0x30, 0x00, 0x01, 0x49, 0xf7, 0xae, 0xf2, +0x4e, 0x03, 0x00, 0x06, 0x04, 0x0f, 0x80, 0x06, 0x49, 0xf7, 0xaa, 0xd4, 0x51, 0xff, 0x80, 0x34, +0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0xf4, +0x50, 0x6f, 0x80, 0x04, 0x58, 0x70, 0x80, 0x00, 0x58, 0x90, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, +0x58, 0x81, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, 0x44, 0x20, 0x00, 0x02, 0x49, 0xf7, 0xa5, 0x16, +0x58, 0x03, 0x00, 0x00, 0x50, 0x13, 0x80, 0x05, 0x44, 0x20, 0x00, 0x02, 0x49, 0xf7, 0xa5, 0x80, +0x00, 0x33, 0x00, 0x01, 0x54, 0x01, 0x80, 0x80, 0x4e, 0x02, 0x00, 0x1e, 0x00, 0x13, 0x00, 0x00, +0x54, 0x20, 0x80, 0x0e, 0x4e, 0x23, 0x00, 0x06, 0x54, 0x41, 0x80, 0x08, 0x4e, 0x43, 0x00, 0x14, +0x54, 0x10, 0x80, 0x0f, 0x44, 0x50, 0x00, 0x03, 0x4c, 0x12, 0xc0, 0x0e, 0x54, 0x31, 0x80, 0x08, +0x4e, 0x33, 0x00, 0x0a, 0x58, 0x04, 0x80, 0x00, 0x58, 0x13, 0x80, 0x00, 0x58, 0x24, 0x00, 0x00, +0x49, 0xff, 0xfe, 0x84, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xfe, 0xd4, 0x51, 0xcf, 0x81, 0x08, 0x58, 0x60, 0x00, 0x00, +0x58, 0xa1, 0x00, 0x00, 0x44, 0x20, 0x00, 0x10, 0x58, 0x0e, 0x00, 0x00, 0x58, 0x91, 0x80, 0x00, +0x58, 0x82, 0x00, 0x00, 0x49, 0xf7, 0xa5, 0x44, 0x58, 0x13, 0x00, 0x00, 0x44, 0x20, 0x00, 0x10, +0x50, 0x0f, 0x81, 0x18, 0x49, 0xf7, 0xa5, 0x3c, 0x58, 0x1e, 0x00, 0x00, 0x44, 0x20, 0x00, 0x20, +0x58, 0x0f, 0x80, 0x00, 0x49, 0xff, 0xed, 0xda, 0x58, 0x0f, 0x80, 0x00, 0x44, 0x10, 0x01, 0x00, +0x49, 0xff, 0xee, 0x4c, 0x58, 0x0f, 0x80, 0x00, 0x58, 0x15, 0x00, 0x00, 0x58, 0x24, 0x80, 0x00, +0x58, 0x34, 0x00, 0x00, 0x58, 0x6f, 0x80, 0x00, 0x49, 0xff, 0xee, 0x00, 0x51, 0xff, 0x81, 0x2c, +0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, +0x49, 0xff, 0xff, 0xc0, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x3c, 0x6d, 0xf8, 0xe5, 0x3c, 0x7d, 0xf8, 0xd8, +0x4e, 0x62, 0x00, 0x18, 0x49, 0xf7, 0xaa, 0x14, 0x49, 0xf7, 0xac, 0x4a, 0x42, 0x60, 0x18, 0x24, +0x44, 0x10, 0x00, 0x00, 0x40, 0x63, 0x08, 0x09, 0x58, 0x00, 0x80, 0x00, 0x48, 0x00, 0x00, 0x06, +0x1c, 0x03, 0x80, 0x01, 0x50, 0x10, 0x80, 0x01, 0x40, 0xf0, 0x98, 0x06, 0x4e, 0xf3, 0xff, 0xfa, +0x44, 0x00, 0x00, 0x01, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0x98, 0xbc, 0x58, 0x60, 0x00, 0x00, 0x49, 0xf7, 0xa9, 0xf2, 0x49, 0xf7, 0xac, 0x28, +0x40, 0x03, 0x00, 0x37, 0x4e, 0x12, 0x00, 0x04, 0x50, 0x00, 0x00, 0x01, 0x46, 0x10, 0x01, 0x15, +0x5c, 0xf0, 0x02, 0x01, 0x4e, 0xf3, 0x00, 0x08, 0x44, 0x00, 0x00, 0x00, 0x3c, 0x0f, 0xf8, 0xd5, +0x48, 0x00, 0x00, 0x06, 0x3c, 0x0f, 0xf8, 0xd5, 0x44, 0x00, 0x00, 0x01, 0x3a, 0x6f, 0x98, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, 0x58, 0x60, 0x00, 0x00, 0x49, 0xf7, 0xa9, 0xd0, +0x49, 0xf7, 0xac, 0x06, 0x40, 0x03, 0x00, 0x37, 0x4e, 0x12, 0x00, 0x04, 0x50, 0x00, 0x00, 0x01, +0x54, 0x20, 0x00, 0x01, 0x4e, 0x22, 0x00, 0x04, 0x50, 0x00, 0x00, 0x01, 0x46, 0x10, 0x01, 0x15, +0x5c, 0xf0, 0x00, 0x41, 0x4e, 0xf3, 0x00, 0x08, 0x44, 0x00, 0x00, 0x00, 0x3c, 0x0f, 0xf8, 0xd4, +0x48, 0x00, 0x00, 0x06, 0x3c, 0x0f, 0xf8, 0xd4, 0x44, 0x00, 0x00, 0x01, 0x3a, 0x6f, 0x98, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xf4, 0x14, 0x5f, 0x80, 0x01, +0x58, 0x90, 0x80, 0x00, 0x58, 0x81, 0x00, 0x00, 0x58, 0x61, 0x80, 0x00, 0x58, 0xa0, 0x00, 0x00, +0x05, 0xcf, 0x80, 0x0a, 0x49, 0xf7, 0xa9, 0x9c, 0x49, 0xf7, 0xab, 0xd2, 0x04, 0x5f, 0x80, 0x01, +0x4e, 0xa3, 0x00, 0x06, 0x58, 0x75, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0a, 0x40, 0x70, 0x28, 0x37, +0x40, 0x73, 0x1c, 0x37, 0x4e, 0x12, 0x00, 0x04, 0x50, 0x73, 0x80, 0x01, 0x4e, 0x93, 0x00, 0x06, +0x58, 0x44, 0x80, 0x00, 0x48, 0x00, 0x00, 0x0a, 0x40, 0x40, 0x24, 0x37, 0x40, 0x43, 0x10, 0x57, +0x4e, 0x22, 0x00, 0x04, 0x50, 0x42, 0x00, 0x01, 0x4e, 0x83, 0x00, 0x06, 0x58, 0x34, 0x00, 0x00, +0x48, 0x00, 0x00, 0x0a, 0x40, 0x30, 0x20, 0x37, 0x40, 0x33, 0x0f, 0xd7, 0x4f, 0xe2, 0x00, 0x04, +0x50, 0x31, 0x80, 0x01, 0x40, 0x02, 0x80, 0xb7, 0x40, 0x12, 0x1c, 0x00, 0x40, 0x20, 0x8c, 0x00, +0x4e, 0x52, 0x00, 0x04, 0x50, 0x00, 0x00, 0x01, 0x42, 0x10, 0x70, 0x24, 0x41, 0xe0, 0x88, 0x00, +0x3d, 0xef, 0xf8, 0xe5, 0x3c, 0x2f, 0xf8, 0xe6, 0x3c, 0x0f, 0xf8, 0xe7, 0x3c, 0x1f, 0xf8, 0xe8, +0x3c, 0x8f, 0xf8, 0xe3, 0x3c, 0x6f, 0xf8, 0xe0, 0x3c, 0xaf, 0xf8, 0xe1, 0x3c, 0x9f, 0xf8, 0xe2, +0x3c, 0x3f, 0xf8, 0xeb, 0x44, 0x00, 0x00, 0x01, 0x3d, 0xcf, 0xf8, 0xe4, 0x3c, 0x7f, 0xf8, 0xe9, +0x3c, 0x4f, 0xf8, 0xea, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xec, 0x58, 0x91, 0x80, 0x00, 0x58, 0x82, 0x00, 0x00, +0x04, 0x3f, 0x80, 0x0d, 0x04, 0x4f, 0x80, 0x0c, 0x14, 0x2f, 0x80, 0x03, 0x14, 0x3f, 0x80, 0x00, +0x14, 0x4f, 0x80, 0x01, 0x14, 0x5f, 0x80, 0x02, 0x58, 0xa0, 0x80, 0x00, 0x54, 0x60, 0x00, 0xff, +0x05, 0xcf, 0x80, 0x0f, 0x49, 0xf7, 0xa9, 0x24, 0x49, 0xf7, 0xab, 0x5a, 0x04, 0x2f, 0x80, 0x03, +0x04, 0x3f, 0x80, 0x00, 0x04, 0x4f, 0x80, 0x01, 0x04, 0x5f, 0x80, 0x02, 0x4e, 0x92, 0x00, 0x1c, +0x3c, 0x7d, 0xf8, 0xe1, 0x4e, 0x72, 0x00, 0x18, 0x41, 0xe0, 0x1c, 0xf7, 0x40, 0x73, 0x78, 0x37, +0x55, 0xe0, 0x80, 0xff, 0x12, 0x75, 0x00, 0x00, 0x11, 0xe1, 0x00, 0x00, 0x02, 0x25, 0x00, 0x00, +0x40, 0x7f, 0x18, 0x08, 0x3d, 0xed, 0xf8, 0xd8, 0x43, 0xe0, 0x08, 0x73, 0x40, 0x2f, 0x1c, 0x00, +0x14, 0x24, 0x80, 0x00, 0x4e, 0x42, 0x00, 0x22, 0x3c, 0x1d, 0xf8, 0xe2, 0x4e, 0x12, 0x00, 0x1e, +0x40, 0x20, 0x04, 0x37, 0x3c, 0x7d, 0xf8, 0xe9, 0x40, 0x23, 0x0b, 0xd7, 0x40, 0x1f, 0x78, 0x00, +0x54, 0x10, 0x80, 0xff, 0x41, 0xe1, 0x1c, 0x00, 0x13, 0xe4, 0x00, 0x00, 0x10, 0x12, 0x80, 0x00, +0x41, 0xe0, 0x94, 0x08, 0x02, 0x24, 0x00, 0x00, 0x3c, 0x1d, 0xf8, 0xd8, 0x42, 0x10, 0x08, 0x73, +0x40, 0x50, 0xf8, 0x00, 0x14, 0x52, 0x00, 0x00, 0x4f, 0xc2, 0x00, 0x26, 0x3c, 0x1d, 0xf8, 0xe3, +0x4e, 0x12, 0x00, 0x22, 0x40, 0x10, 0x04, 0x57, 0x3c, 0x4d, 0xf8, 0xea, 0x3c, 0x2d, 0xf8, 0xe9, +0x40, 0x52, 0x08, 0x00, 0x41, 0xe3, 0x04, 0x97, 0x40, 0x22, 0xf8, 0x00, 0x12, 0x21, 0x80, 0x00, +0x54, 0x12, 0x00, 0xff, 0x04, 0x6f, 0x80, 0x0e, 0x10, 0x13, 0x00, 0x00, 0x40, 0x60, 0x94, 0x08, +0x02, 0x51, 0x80, 0x00, 0x3c, 0x3d, 0xf8, 0xd8, 0x42, 0x30, 0x14, 0x73, 0x40, 0x01, 0x98, 0x00, +0x14, 0x0e, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, 0x51, 0xff, 0x80, 0x14, 0x3a, 0x6f, 0xaa, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x44, 0x60, 0x2f, 0xc0, +0x54, 0x70, 0x00, 0xff, 0x4b, 0xe0, 0x18, 0x01, 0x46, 0x50, 0x06, 0x63, 0x4c, 0x02, 0x80, 0x1a, +0x4b, 0xe0, 0x18, 0x01, 0x46, 0x20, 0x07, 0x60, 0x58, 0x51, 0x03, 0x00, 0x4c, 0x02, 0x80, 0x12, +0x4b, 0xe0, 0x18, 0x01, 0x46, 0x30, 0x07, 0x62, 0x58, 0x51, 0x88, 0x00, 0x4c, 0x02, 0x80, 0x0a, +0x4b, 0xe0, 0x18, 0x01, 0x46, 0x40, 0x07, 0x63, 0x58, 0x52, 0x06, 0x00, 0x4c, 0x02, 0xc0, 0x04, +0x3e, 0x77, 0xe3, 0x58, 0x44, 0x00, 0x00, 0x01, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa8, 0xbc, 0x51, 0xff, 0xff, 0xf8, 0x44, 0x00, 0x00, 0x01, +0x49, 0xf7, 0xaa, 0xd0, 0x2e, 0x27, 0xe3, 0x58, 0x4e, 0x23, 0x00, 0x10, 0x2e, 0x07, 0xe3, 0x4c, +0x2e, 0x17, 0xe3, 0x48, 0x2e, 0x47, 0xe3, 0x94, 0x2e, 0x57, 0xe3, 0x50, 0x2e, 0x67, 0xe3, 0x54, +0x58, 0x31, 0x00, 0x00, 0x48, 0x00, 0x00, 0x30, 0x44, 0x60, 0x2f, 0xc0, 0x4b, 0xe0, 0x18, 0x01, +0x46, 0x20, 0x06, 0x63, 0x4c, 0x01, 0x00, 0x1a, 0x46, 0x70, 0x07, 0x60, 0x4b, 0xe0, 0x18, 0x01, +0x58, 0x73, 0x83, 0x00, 0x4c, 0x03, 0x80, 0x12, 0x46, 0x80, 0x07, 0x62, 0x4b, 0xe0, 0x18, 0x01, +0x58, 0x84, 0x08, 0x00, 0x4c, 0x04, 0x00, 0x0a, 0x46, 0x90, 0x07, 0x63, 0x4b, 0xe0, 0x18, 0x01, +0x58, 0x94, 0x86, 0x00, 0x4c, 0x04, 0xc0, 0x14, 0x44, 0x60, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, +0x58, 0x13, 0x00, 0x00, 0x58, 0x23, 0x00, 0x00, 0x44, 0x30, 0x00, 0x01, 0x58, 0x43, 0x00, 0x00, +0x58, 0x53, 0x00, 0x00, 0x14, 0x6f, 0x80, 0x00, 0x49, 0x00, 0x02, 0x12, 0x46, 0x7a, 0x00, 0x00, +0x04, 0x83, 0x80, 0x59, 0x46, 0x6a, 0x00, 0x00, 0x14, 0x83, 0x00, 0x5a, 0x44, 0x70, 0x2c, 0xcc, +0x3c, 0x9d, 0xf8, 0xe5, 0x44, 0x60, 0x31, 0x3c, 0x4b, 0xe0, 0x1c, 0x01, 0x4b, 0xe0, 0x18, 0x01, +0x42, 0x80, 0x24, 0x73, 0x46, 0x1a, 0x00, 0x00, 0x14, 0x80, 0x80, 0x5b, 0x3c, 0xad, 0xf8, 0xd2, +0x58, 0x04, 0x00, 0x00, 0x40, 0x35, 0x20, 0x08, 0x46, 0x8a, 0x00, 0x00, 0x40, 0x40, 0x0c, 0x00, +0x14, 0x44, 0x00, 0x5c, 0x3c, 0x2d, 0xf8, 0xd3, 0x46, 0x5a, 0x00, 0x00, 0x40, 0x11, 0x20, 0x08, +0x40, 0x92, 0x04, 0x00, 0x14, 0x92, 0x80, 0x5d, 0x3c, 0xad, 0xf8, 0xd4, 0x4b, 0xe0, 0x1c, 0x01, +0x4b, 0xe0, 0x18, 0x01, 0x40, 0xa5, 0x04, 0x09, 0x42, 0x90, 0x28, 0x73, 0x46, 0x3a, 0x00, 0x00, +0x14, 0x91, 0x80, 0x5e, 0x3c, 0x0d, 0xf8, 0xd4, 0x40, 0x80, 0x04, 0x09, 0x4b, 0xe0, 0x1c, 0x01, +0x4b, 0xe0, 0x18, 0x01, 0x42, 0x90, 0x20, 0x73, 0x58, 0x84, 0x80, 0x00, 0x46, 0x9a, 0x00, 0x00, +0x14, 0x84, 0x80, 0x5f, 0x3c, 0x9d, 0xf8, 0xd5, 0x4b, 0xe0, 0x1c, 0x01, 0x4b, 0xe0, 0x18, 0x01, +0x42, 0x80, 0x24, 0x73, 0x46, 0x4a, 0x00, 0x00, 0x14, 0x82, 0x00, 0x61, 0x44, 0x00, 0x00, 0x00, +0x49, 0xf7, 0xaa, 0x30, 0x3e, 0x08, 0x02, 0x76, 0x3e, 0x18, 0x02, 0x78, 0x49, 0xf7, 0xad, 0x80, +0x3c, 0x00, 0x01, 0x3c, 0x3c, 0x08, 0x01, 0x3a, 0x3c, 0x08, 0x01, 0x39, 0x44, 0x00, 0x00, 0x01, +0x51, 0xff, 0x80, 0x08, 0x3a, 0x6f, 0xa8, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, +0x51, 0xff, 0xff, 0xf0, 0x04, 0x7f, 0x80, 0x08, 0x04, 0x6f, 0x80, 0x09, 0x14, 0x7f, 0x80, 0x00, +0x14, 0x6f, 0x80, 0x01, 0x04, 0x7f, 0x80, 0x0a, 0x04, 0x6f, 0x80, 0x0b, 0x00, 0x8f, 0x80, 0x38, +0x49, 0xff, 0xfe, 0x02, 0x4e, 0x02, 0x00, 0x74, 0x4e, 0x73, 0x00, 0x06, 0x3c, 0x7f, 0xf8, 0xd2, +0x48, 0x00, 0x00, 0x16, 0x5c, 0xf3, 0x81, 0x01, 0x4e, 0xf2, 0x00, 0x08, 0x44, 0x10, 0x00, 0x01, +0x3c, 0x1f, 0xf8, 0xd2, 0x48, 0x00, 0x00, 0x0c, 0x3e, 0x1f, 0xe3, 0x48, 0x5c, 0xf3, 0x82, 0x01, +0x4e, 0xf2, 0x00, 0x22, 0x44, 0x30, 0x00, 0x02, 0x14, 0x30, 0x80, 0x00, 0x4e, 0x63, 0x00, 0x06, +0x3c, 0x6f, 0xf8, 0xd3, 0x48, 0x00, 0x00, 0x1e, 0x5c, 0xf3, 0x01, 0x01, 0x4e, 0xf2, 0x00, 0x08, +0x45, 0xe0, 0x00, 0x01, 0x3d, 0xef, 0xf8, 0xd3, 0x48, 0x00, 0x00, 0x14, 0x3e, 0x1f, 0xe3, 0x4c, +0x5c, 0xf3, 0x02, 0x01, 0x4e, 0xf2, 0x00, 0x08, 0x44, 0x00, 0x00, 0x02, 0x14, 0x00, 0x80, 0x00, +0x48, 0x00, 0x00, 0x08, 0x44, 0x00, 0x00, 0x00, 0x14, 0x00, 0x80, 0x00, 0x48, 0x00, 0x00, 0x3a, +0x04, 0x0f, 0x80, 0x0c, 0x49, 0xff, 0xfd, 0x98, 0x4e, 0x02, 0x00, 0x32, 0x04, 0x0f, 0x80, 0x0d, +0x49, 0xff, 0xfd, 0x70, 0x4e, 0x02, 0x00, 0x2c, 0x04, 0x1f, 0x80, 0x0f, 0x58, 0x04, 0x00, 0x00, +0x49, 0xff, 0xfe, 0xb2, 0x4e, 0x02, 0x00, 0x24, 0x3e, 0x6f, 0xe3, 0x74, 0x49, 0xff, 0xfe, 0xdc, +0x14, 0x6f, 0x80, 0x00, 0x3e, 0x6f, 0xe3, 0x78, 0x3e, 0x1f, 0xe3, 0x60, 0x3e, 0x2f, 0xe3, 0x64, +0x3e, 0x3f, 0xe3, 0x68, 0x3e, 0x4f, 0xe3, 0x6c, 0x3e, 0x5f, 0xe3, 0x70, 0x14, 0x6f, 0x80, 0x01, +0x3e, 0x0f, 0xe3, 0x5c, 0x3e, 0x6f, 0xe3, 0x7c, 0x14, 0x6f, 0x80, 0x02, 0x49, 0x00, 0x01, 0x92, +0x49, 0xff, 0xfd, 0x20, 0x44, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x04, 0x44, 0x00, 0x00, 0x00, +0x51, 0xff, 0x80, 0x10, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, +0x51, 0xff, 0xff, 0xdc, 0x49, 0xf7, 0xc9, 0x54, 0x44, 0x00, 0x00, 0x00, 0x58, 0x10, 0x00, 0x00, +0x49, 0xf7, 0xa7, 0xb2, 0x44, 0x60, 0x00, 0x00, 0x44, 0x00, 0x00, 0x40, 0x58, 0x10, 0x00, 0x00, +0x44, 0x20, 0x00, 0x20, 0x40, 0x30, 0x04, 0x08, 0x44, 0x40, 0x50, 0x00, 0x58, 0x53, 0x00, 0x00, +0x14, 0x6f, 0x80, 0x00, 0x14, 0x6f, 0x80, 0x01, 0x14, 0x6f, 0x80, 0x02, 0x14, 0x6f, 0x80, 0x03, +0x14, 0x6f, 0x80, 0x04, 0x14, 0x6f, 0x80, 0x05, 0x14, 0x6f, 0x80, 0x06, 0x14, 0x6f, 0x80, 0x07, +0x49, 0xff, 0xff, 0x46, 0x4e, 0x02, 0x00, 0x74, 0x44, 0x00, 0xff, 0xff, 0x49, 0xf7, 0xa6, 0xa0, +0x44, 0x00, 0x00, 0x0f, 0x49, 0xf7, 0xa6, 0xae, 0x44, 0x00, 0x00, 0x01, 0x49, 0xf7, 0xa9, 0x52, +0x3c, 0x0d, 0xf8, 0xca, 0x44, 0x10, 0x00, 0x03, 0x44, 0x70, 0x38, 0xf4, 0x4c, 0x00, 0xc0, 0x2a, +0x46, 0x45, 0x00, 0x00, 0x04, 0x32, 0x01, 0x63, 0x58, 0x13, 0x00, 0x00, 0x51, 0xe1, 0x80, 0x01, +0x40, 0x2f, 0x00, 0x13, 0x58, 0x31, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, +0x58, 0x13, 0x00, 0x00, 0x44, 0x20, 0x0f, 0xff, 0x44, 0x30, 0x00, 0x18, 0x44, 0x00, 0x00, 0x01, +0x4b, 0xe0, 0x1c, 0x01, 0x2e, 0x17, 0xe3, 0x2c, 0x46, 0x0a, 0x50, 0x08, 0x46, 0x3a, 0x00, 0x00, +0x40, 0x50, 0xa8, 0x08, 0x40, 0x42, 0x80, 0x00, 0x14, 0x41, 0x80, 0x61, 0x48, 0x00, 0x00, 0x34, +0x44, 0x20, 0x02, 0x88, 0x58, 0x31, 0x00, 0x00, 0x58, 0x13, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, +0x4b, 0xe0, 0x1c, 0x01, 0x58, 0x13, 0x00, 0x00, 0x44, 0x20, 0x0f, 0xff, 0x44, 0x30, 0x00, 0x18, +0x44, 0x00, 0x00, 0x01, 0x4b, 0xe0, 0x1c, 0x01, 0x58, 0x13, 0x00, 0x00, 0x44, 0x20, 0x0f, 0xff, +0x44, 0x30, 0x00, 0x34, 0x44, 0x00, 0x00, 0x02, 0x4b, 0xe0, 0x1c, 0x01, 0x44, 0x10, 0x00, 0x01, +0x44, 0x20, 0x0f, 0xff, 0x44, 0x30, 0x00, 0x18, 0x44, 0x00, 0x00, 0x02, 0x4b, 0xe0, 0x1c, 0x01, +0x44, 0x00, 0x00, 0x02, 0x58, 0x10, 0x00, 0x00, 0x44, 0x20, 0x0f, 0xff, 0x40, 0x30, 0x0c, 0x08, +0x4b, 0xe0, 0x1c, 0x01, 0x44, 0x00, 0x00, 0x00, 0x49, 0xf7, 0xa8, 0xec, 0x51, 0xff, 0x80, 0x24, +0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0x3c, 0x51, 0xff, 0xff, 0xf4, +0x04, 0x6f, 0x80, 0x01, 0x54, 0x00, 0x00, 0xff, 0x42, 0x43, 0x7c, 0x08, 0x14, 0x4f, 0x80, 0x01, +0x04, 0x5f, 0x80, 0x01, 0x46, 0x4a, 0x00, 0x00, 0x42, 0x52, 0xc0, 0x09, 0x14, 0x5f, 0x80, 0x01, +0x10, 0x0f, 0x80, 0x05, 0x04, 0x0f, 0x80, 0x01, 0x14, 0x02, 0x00, 0x65, 0x04, 0x52, 0x00, 0x65, +0x46, 0x0a, 0x00, 0x00, 0x14, 0x5f, 0x80, 0x01, 0x04, 0x5f, 0x80, 0x01, 0x4e, 0x55, 0xff, 0xf8, +0x04, 0x00, 0x00, 0x65, 0x14, 0x0f, 0x80, 0x01, 0x04, 0x5f, 0x80, 0x01, 0x04, 0x4f, 0x80, 0x01, +0x04, 0x0f, 0x80, 0x01, 0x40, 0x42, 0x14, 0x09, 0x42, 0x52, 0x9c, 0x0b, 0x54, 0x42, 0x00, 0x03, +0x54, 0x00, 0x00, 0x1f, 0x10, 0x51, 0x80, 0x00, 0x10, 0x40, 0x80, 0x00, 0x10, 0x01, 0x00, 0x00, +0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0x98, 0x04, 0x4a, 0x00, 0x78, 0x20, 0x51, 0xff, 0xff, 0xf8, +0x44, 0x30, 0x00, 0x00, 0x14, 0x3f, 0x80, 0x01, 0x46, 0x2a, 0x00, 0x00, 0x04, 0x01, 0x00, 0x64, +0x54, 0x10, 0x80, 0xff, 0x14, 0x0f, 0x80, 0x01, 0x4e, 0x12, 0x00, 0x08, 0x04, 0x4f, 0x80, 0x01, +0x58, 0x02, 0x00, 0x10, 0x48, 0x00, 0x00, 0x06, 0x04, 0x5f, 0x80, 0x01, 0x42, 0x02, 0x90, 0x09, +0x14, 0x0f, 0x80, 0x01, 0x46, 0x0a, 0x00, 0x00, 0x04, 0x2f, 0x80, 0x01, 0x14, 0x20, 0x00, 0x64, +0x44, 0x00, 0x00, 0x01, 0x51, 0xff, 0x80, 0x08, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0x3c, +0x51, 0xff, 0xff, 0xf8, 0x04, 0x6f, 0x80, 0x01, 0x54, 0x00, 0x00, 0x03, 0x40, 0x63, 0x08, 0x09, +0x40, 0x63, 0x08, 0x08, 0x40, 0x73, 0x00, 0x04, 0x14, 0x7f, 0x80, 0x01, 0x54, 0x10, 0x80, 0x03, +0x04, 0x0f, 0x80, 0x01, 0x44, 0x6f, 0xff, 0xf3, 0x40, 0x00, 0x18, 0x02, 0x40, 0x70, 0x88, 0x08, +0x40, 0x10, 0x1c, 0x04, 0x14, 0x1f, 0x80, 0x01, 0x54, 0x61, 0x00, 0x07, 0x04, 0x1f, 0x80, 0x01, +0x44, 0x7f, 0xff, 0x8f, 0x40, 0x00, 0x9c, 0x02, 0x40, 0x23, 0x10, 0x08, 0x40, 0x60, 0x08, 0x04, +0x14, 0x6f, 0x80, 0x01, 0x54, 0x31, 0x80, 0x01, 0x04, 0x2f, 0x80, 0x01, 0x42, 0x01, 0x1c, 0x09, +0x40, 0x71, 0x9c, 0x08, 0x40, 0x60, 0x1c, 0x04, 0x14, 0x6f, 0x80, 0x01, 0x54, 0x32, 0x00, 0x7f, +0x04, 0x0f, 0x80, 0x01, 0x44, 0x2f, 0x80, 0xff, 0x40, 0x10, 0x08, 0x02, 0x40, 0x71, 0xa0, 0x08, +0x40, 0x40, 0x9c, 0x04, 0x14, 0x4f, 0x80, 0x01, 0x54, 0x62, 0x80, 0x7f, 0x04, 0x3f, 0x80, 0x01, +0x40, 0x23, 0x3c, 0x08, 0x46, 0x6f, 0xfc, 0x07, 0x58, 0x63, 0x0f, 0xff, 0x40, 0x01, 0x98, 0x02, +0x40, 0x10, 0x08, 0x04, 0x14, 0x1f, 0x80, 0x01, 0x00, 0x7f, 0x80, 0x10, 0x04, 0x5f, 0x80, 0x01, +0x40, 0x43, 0xd8, 0x08, 0x40, 0x32, 0xa8, 0x08, 0x40, 0x31, 0xa8, 0x09, 0x40, 0x21, 0x90, 0x04, +0x14, 0x2f, 0x80, 0x01, 0x46, 0x0a, 0x00, 0x00, 0x04, 0x1f, 0x80, 0x01, 0x14, 0x10, 0x00, 0x58, +0x44, 0x00, 0x00, 0x01, 0x51, 0xff, 0x80, 0x08, 0x3a, 0x6f, 0x9c, 0x04, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0x98, 0x3c, 0x46, 0x6a, 0x00, 0x00, 0x04, 0x63, 0x00, 0x59, 0x14, 0x60, 0x00, 0x00, +0x46, 0x0a, 0x00, 0x00, 0x04, 0x60, 0x00, 0x5a, 0x46, 0x0a, 0x00, 0x00, 0x14, 0x60, 0x80, 0x00, +0x04, 0x10, 0x00, 0x5b, 0x46, 0x0a, 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, 0x04, 0x20, 0x00, 0x5c, +0x46, 0x0a, 0x00, 0x00, 0x14, 0x21, 0x80, 0x00, 0x04, 0x10, 0x00, 0x5d, 0x58, 0x20, 0x00, 0x00, +0x14, 0x12, 0x00, 0x00, 0x04, 0x31, 0x00, 0x5e, 0x46, 0x0a, 0x00, 0x00, 0x14, 0x32, 0x80, 0x00, +0x04, 0x10, 0x00, 0x5f, 0x04, 0x2f, 0x80, 0x01, 0x58, 0x50, 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, +0x04, 0x32, 0x80, 0x60, 0x04, 0x4f, 0x80, 0x02, 0x46, 0x0a, 0x00, 0x00, 0x14, 0x32, 0x00, 0x00, +0x04, 0x10, 0x00, 0x61, 0x04, 0x2f, 0x80, 0x03, 0x44, 0x00, 0x00, 0x01, 0x14, 0x11, 0x00, 0x00, +0x3a, 0x6f, 0x98, 0x04, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0xf4, +0x54, 0x70, 0x80, 0xff, 0x54, 0x61, 0x00, 0xff, 0x58, 0x13, 0x00, 0x00, 0x54, 0x80, 0x00, 0xff, +0x58, 0x03, 0x80, 0x00, 0x54, 0x91, 0x80, 0xff, 0x49, 0xf7, 0xa6, 0xf2, 0x44, 0x50, 0x0f, 0xff, +0x4c, 0x02, 0xc0, 0x06, 0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x4a, 0x04, 0x5f, 0x80, 0x01, +0x54, 0x13, 0x80, 0x03, 0x42, 0x42, 0xfc, 0x08, 0x14, 0x4f, 0x80, 0x01, 0x54, 0x24, 0x80, 0x01, +0x04, 0x3f, 0x80, 0x01, 0x43, 0xe1, 0xc0, 0x08, 0x15, 0xef, 0x80, 0x01, 0x10, 0x8f, 0x80, 0x05, +0x40, 0x51, 0x1c, 0x08, 0x04, 0x7f, 0x80, 0x01, 0x41, 0xe0, 0x94, 0x08, 0x42, 0x43, 0x9c, 0x09, +0x40, 0x32, 0x14, 0x04, 0x14, 0x3f, 0x80, 0x01, 0x44, 0x1f, 0xff, 0x9f, 0x04, 0x0f, 0x80, 0x01, +0x40, 0x70, 0x04, 0x02, 0x40, 0x73, 0xf8, 0x04, 0x14, 0x7f, 0x80, 0x01, 0x54, 0x63, 0x00, 0x1f, +0x04, 0x5f, 0x80, 0x01, 0x46, 0x3a, 0x00, 0x00, 0x40, 0x42, 0x94, 0x09, 0x40, 0x42, 0x14, 0x08, +0x40, 0x62, 0x18, 0x04, 0x14, 0x6f, 0x80, 0x01, 0x58, 0x31, 0x81, 0x94, 0x04, 0x0f, 0x80, 0x01, +0x58, 0x11, 0x80, 0x00, 0x14, 0x01, 0x80, 0x00, 0x05, 0xe0, 0x80, 0x00, 0x15, 0xef, 0x80, 0x01, +0x04, 0x0f, 0x80, 0x01, 0x4e, 0x05, 0xff, 0xfa, 0x44, 0x00, 0x00, 0x01, 0x51, 0xff, 0x80, 0x0c, +0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, 0x51, 0xff, 0xff, 0xf8, +0x54, 0x60, 0x00, 0xff, 0x54, 0x70, 0x80, 0xff, 0x58, 0x13, 0x80, 0x00, 0x58, 0x03, 0x00, 0x00, +0x54, 0x81, 0x00, 0xff, 0x49, 0xf7, 0xa6, 0x8c, 0x44, 0x50, 0x0f, 0xff, 0x4c, 0x02, 0xc0, 0x08, +0x4e, 0x63, 0x00, 0x42, 0x44, 0x50, 0x00, 0x02, 0x4c, 0x72, 0xc0, 0x3e, 0x04, 0x1f, 0x80, 0x01, +0x46, 0x2f, 0xfe, 0x0f, 0x54, 0x43, 0x80, 0x1f, 0x58, 0x21, 0x0f, 0xff, 0x40, 0x32, 0x40, 0x08, +0x40, 0x70, 0x88, 0x02, 0x40, 0x73, 0x8c, 0x04, 0x14, 0x7f, 0x80, 0x01, 0x54, 0x03, 0x00, 0x03, +0x05, 0xef, 0x80, 0x01, 0x42, 0x4f, 0x54, 0x09, 0x42, 0x42, 0x58, 0x09, 0x40, 0x50, 0x54, 0x08, +0x40, 0x32, 0x14, 0x04, 0x14, 0x3f, 0x80, 0x01, 0x04, 0x0f, 0x80, 0x01, 0x54, 0x14, 0x00, 0x01, +0x42, 0x60, 0x5c, 0x09, 0x41, 0xe0, 0xdc, 0x08, 0x40, 0x53, 0x78, 0x04, 0x14, 0x5f, 0x80, 0x01, +0x46, 0x6a, 0x00, 0x00, 0x04, 0x4f, 0x80, 0x01, 0x14, 0x43, 0x00, 0x09, 0x49, 0xf7, 0xaa, 0x78, +0x04, 0x33, 0x00, 0x09, 0x14, 0x3f, 0x80, 0x01, 0x04, 0x0f, 0x80, 0x01, 0x54, 0x00, 0x0f, 0xff, +0x48, 0x00, 0x00, 0x04, 0x44, 0x00, 0x0f, 0xff, 0x51, 0xff, 0x80, 0x08, 0x3a, 0x6f, 0xa0, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x46, 0x00, 0x01, 0x17, 0x2e, 0x10, 0x02, 0x86, 0x4e, 0x12, 0x00, 0x06, +0x44, 0x20, 0x00, 0x00, 0x3e, 0x20, 0x02, 0x86, 0x4a, 0x00, 0x78, 0x20, 0x54, 0x00, 0x00, 0xff, +0x40, 0x20, 0x08, 0x09, 0x40, 0x11, 0x00, 0x10, 0x4e, 0x16, 0x00, 0x06, 0x44, 0x0f, 0xff, 0xfd, +0x48, 0x00, 0x00, 0x56, 0x44, 0x30, 0x00, 0x01, 0x54, 0x00, 0x00, 0x03, 0x4c, 0x11, 0xc0, 0x08, +0x40, 0x01, 0x00, 0x00, 0x50, 0x00, 0x7f, 0xff, 0x48, 0x00, 0x00, 0x14, 0x5e, 0xf0, 0x80, 0x05, +0x4e, 0xf2, 0x00, 0x14, 0x44, 0x20, 0x00, 0x03, 0x42, 0x00, 0x08, 0x24, 0x42, 0x50, 0x88, 0x24, +0x50, 0x30, 0x00, 0x05, 0x40, 0x41, 0x88, 0x0e, 0x40, 0x12, 0x84, 0x0a, 0x40, 0x02, 0x04, 0x00, +0x40, 0x00, 0x00, 0x10, 0x48, 0x00, 0x00, 0x34, 0x5e, 0xf0, 0x80, 0x09, 0x4e, 0xf2, 0x00, 0x0e, +0x44, 0x30, 0x00, 0x03, 0x42, 0x50, 0x8c, 0x24, 0x50, 0x12, 0x80, 0x02, 0x40, 0x40, 0x88, 0x0a, +0x50, 0x02, 0x00, 0x03, 0x48, 0xff, 0xff, 0xee, 0x5e, 0xf0, 0x80, 0x11, 0x4e, 0xf2, 0x00, 0x0e, +0x44, 0x50, 0x00, 0x0b, 0x42, 0x40, 0x94, 0x24, 0x50, 0x02, 0x00, 0x0f, 0x40, 0x20, 0x14, 0x0a, +0x50, 0x01, 0x00, 0x07, 0x48, 0x00, 0x00, 0x14, 0x5e, 0xf0, 0x80, 0x21, 0x4e, 0xf3, 0x00, 0x06, +0x44, 0x00, 0x00, 0x0f, 0x48, 0x00, 0x00, 0x0c, 0x44, 0x00, 0x00, 0x05, 0x42, 0x20, 0x80, 0x24, +0x50, 0x31, 0x00, 0x10, 0x40, 0x11, 0x94, 0x0a, 0x50, 0x00, 0x80, 0x0a, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xcc, 0x2e, 0x07, 0xe1, 0xb2, 0x4e, 0x03, 0x02, 0xee, +0x3e, 0x0f, 0xdf, 0xbc, 0x00, 0x30, 0x00, 0x25, 0x00, 0x40, 0x00, 0x24, 0x3e, 0x1f, 0xd3, 0xd4, +0x20, 0xa0, 0x00, 0x27, 0x20, 0x90, 0x00, 0x22, 0x2e, 0x57, 0xe3, 0xbc, 0x3a, 0x00, 0x84, 0x00, +0x50, 0x8f, 0x80, 0x28, 0x3c, 0x7d, 0xf4, 0xf4, 0x52, 0x62, 0x00, 0x00, 0x53, 0xc1, 0x80, 0x00, +0x50, 0x2f, 0x80, 0x18, 0x14, 0x5f, 0x80, 0x05, 0x3a, 0x01, 0x04, 0x20, 0x14, 0x7f, 0x80, 0x09, +0x10, 0x64, 0x00, 0x03, 0x11, 0xc4, 0x00, 0x00, 0x10, 0xa4, 0x00, 0x01, 0x10, 0x94, 0x00, 0x02, +0x3c, 0x4d, 0xf4, 0xf3, 0x04, 0x2f, 0x80, 0x05, 0x44, 0x30, 0x00, 0x01, 0x14, 0x4f, 0x80, 0x08, +0x4c, 0x21, 0xc0, 0x08, 0x3e, 0x9f, 0xe1, 0x6c, 0x14, 0x9f, 0x80, 0x04, 0x48, 0x00, 0x00, 0x1c, +0x04, 0xaf, 0x80, 0x05, 0x44, 0x50, 0x00, 0x02, 0x4c, 0xa2, 0xc0, 0x08, 0x3e, 0x6f, 0xe1, 0x74, +0x14, 0x6f, 0x80, 0x04, 0x48, 0x00, 0x00, 0x10, 0x04, 0x4f, 0x80, 0x05, 0x3f, 0xef, 0xe1, 0x84, +0x56, 0x22, 0x00, 0x03, 0x3e, 0x3f, 0xe1, 0x7c, 0x40, 0x71, 0x88, 0x1a, 0x40, 0x7f, 0x08, 0x1b, +0x14, 0x7f, 0x80, 0x04, 0x44, 0x10, 0x00, 0x00, 0x3e, 0x0f, 0xe1, 0x8c, 0x14, 0x1f, 0x80, 0x03, +0x14, 0x0f, 0x80, 0x02, 0x50, 0x8f, 0x80, 0x20, 0x3e, 0xaf, 0xe1, 0x58, 0x59, 0xc0, 0x80, 0x00, +0x04, 0x9f, 0x80, 0x05, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x92, 0x80, 0xc4, 0x04, 0x1f, 0x80, 0x04, +0x3e, 0x6f, 0xe1, 0x60, 0x00, 0x30, 0x80, 0x00, 0x00, 0x20, 0x80, 0x01, 0x40, 0x71, 0x8c, 0x00, +0x40, 0x43, 0x98, 0x00, 0x20, 0x72, 0x00, 0x01, 0x51, 0xef, 0x80, 0x28, 0x38, 0x43, 0x0d, 0x10, +0x38, 0x6f, 0x09, 0x00, 0x5e, 0xf3, 0xff, 0xf7, 0x4e, 0xf2, 0x00, 0x06, 0x44, 0x30, 0x00, 0x00, +0x48, 0x00, 0x00, 0x26, 0x5e, 0xf3, 0xff, 0xfc, 0x4e, 0xf2, 0x00, 0x06, 0x44, 0x30, 0x00, 0x01, +0x48, 0x00, 0x00, 0x1e, 0x5e, 0xf3, 0xff, 0xff, 0x4e, 0xf2, 0x00, 0x06, 0x44, 0x30, 0x00, 0x02, +0x48, 0x00, 0x00, 0x16, 0x4e, 0x76, 0x00, 0x06, 0x44, 0x30, 0x00, 0x04, 0x48, 0x00, 0x00, 0x10, +0x5e, 0xf3, 0x80, 0x13, 0x4e, 0xf3, 0x00, 0x06, 0x44, 0x30, 0x00, 0xfc, 0x48, 0x00, 0x00, 0x08, +0x3e, 0x5f, 0xe1, 0x9c, 0x40, 0x03, 0x94, 0x00, 0x00, 0x30, 0x7f, 0xff, 0x40, 0x11, 0x08, 0x00, +0x50, 0x9f, 0x80, 0x28, 0x41, 0xe4, 0x84, 0x00, 0x00, 0x9f, 0x00, 0x01, 0x40, 0x24, 0x98, 0x00, +0x40, 0x21, 0x00, 0x10, 0x5e, 0xf1, 0x7f, 0xf7, 0x4e, 0xf2, 0x00, 0x06, 0x44, 0x00, 0x00, 0x00, +0x48, 0x00, 0x00, 0x26, 0x5e, 0xf1, 0x7f, 0xfc, 0x4e, 0xf2, 0x00, 0x06, 0x44, 0x00, 0x00, 0x01, +0x48, 0x00, 0x00, 0x1e, 0x5e, 0xf1, 0x7f, 0xff, 0x4e, 0xf2, 0x00, 0x06, 0x44, 0x00, 0x00, 0x02, +0x48, 0x00, 0x00, 0x16, 0x4e, 0x26, 0x00, 0x06, 0x44, 0x00, 0x00, 0x04, 0x48, 0x00, 0x00, 0x10, +0x5e, 0xf1, 0x00, 0x13, 0x4e, 0xf3, 0x00, 0x06, 0x44, 0x00, 0x00, 0xfc, 0x48, 0x00, 0x00, 0x08, +0x3e, 0x0f, 0xe1, 0x9c, 0x40, 0x51, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0x41, 0xe0, 0x0c, 0x00, +0x54, 0x0f, 0x00, 0xff, 0x14, 0x4f, 0x80, 0x01, 0x49, 0xff, 0xfe, 0xb2, 0x40, 0x54, 0x9c, 0x00, +0x40, 0x12, 0x80, 0x01, 0x04, 0x9f, 0x80, 0x01, 0x00, 0x05, 0x00, 0x01, 0x3e, 0x3f, 0xe1, 0x94, +0x3e, 0x4f, 0xe1, 0x98, 0x00, 0x55, 0x00, 0x00, 0x40, 0x2e, 0x0c, 0x00, 0x40, 0x7e, 0x10, 0x00, +0x54, 0x10, 0x80, 0xff, 0x00, 0x41, 0x00, 0x00, 0x40, 0x63, 0x24, 0x00, 0x40, 0x30, 0x80, 0x01, +0x04, 0x9f, 0x80, 0x03, 0x00, 0x03, 0x80, 0x00, 0x40, 0x53, 0x14, 0x01, 0x54, 0x31, 0x80, 0xff, +0x50, 0x7f, 0x80, 0x18, 0x38, 0x63, 0xa4, 0x08, 0x40, 0x22, 0x90, 0x00, 0x40, 0x41, 0x80, 0x00, +0x40, 0x03, 0xa4, 0x00, 0x50, 0x7f, 0x80, 0x24, 0x10, 0x10, 0x00, 0x01, 0x38, 0x23, 0xf0, 0x08, +0x10, 0x44, 0x00, 0x00, 0x04, 0x4f, 0x80, 0x02, 0x10, 0x52, 0x00, 0x00, 0x10, 0x32, 0x00, 0x01, +0x04, 0x3f, 0x80, 0x04, 0x50, 0x61, 0x80, 0x02, 0x14, 0x6f, 0x80, 0x04, 0x48, 0x00, 0x00, 0x20, +0x05, 0xef, 0x80, 0x03, 0x3e, 0x6f, 0xe1, 0x60, 0x40, 0x5f, 0x18, 0x00, 0x20, 0x62, 0x80, 0x01, +0x20, 0x22, 0x80, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x35, 0x00, 0x01, 0x04, 0x9f, 0x80, 0x02, +0x40, 0x41, 0x04, 0x01, 0x40, 0x03, 0x0c, 0x01, 0x50, 0x7f, 0x80, 0x24, 0x10, 0x44, 0x80, 0x00, +0x10, 0x04, 0x80, 0x01, 0x38, 0x23, 0xf0, 0x08, 0x10, 0x64, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, +0x4e, 0x07, 0x00, 0x06, 0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x08, 0x5e, 0xf0, 0x7f, 0xc1, +0x4e, 0xf2, 0x00, 0x06, 0x44, 0x0f, 0xff, 0xc1, 0x10, 0x04, 0x00, 0x00, 0x04, 0x4f, 0x80, 0x03, +0x04, 0x0f, 0x80, 0x02, 0x50, 0x92, 0x00, 0x02, 0x50, 0x70, 0x00, 0x02, 0x51, 0xce, 0x00, 0x01, +0x44, 0x50, 0x00, 0x04, 0x50, 0x84, 0x00, 0x01, 0x14, 0x9f, 0x80, 0x03, 0x50, 0xa5, 0x00, 0x02, +0x14, 0x7f, 0x80, 0x02, 0x4d, 0xc2, 0xfe, 0xf6, 0x50, 0x8f, 0x80, 0x24, 0x20, 0x54, 0x00, 0x03, +0x3e, 0x3f, 0xf8, 0x60, 0x14, 0x5f, 0x80, 0x02, 0x44, 0x50, 0x00, 0x00, 0x20, 0xa4, 0x00, 0x00, +0x3e, 0x6f, 0xf8, 0x6c, 0x14, 0xaf, 0x80, 0x03, 0x50, 0x4f, 0x80, 0x2c, 0x20, 0x14, 0x00, 0x01, +0x21, 0xc4, 0x00, 0x02, 0x14, 0x1f, 0x80, 0x04, 0x59, 0xee, 0x00, 0x00, 0x58, 0xa2, 0x80, 0x00, +0x44, 0x90, 0x00, 0x40, 0x44, 0x80, 0x00, 0x3f, 0x59, 0xc1, 0x80, 0x00, 0x04, 0x0f, 0x80, 0x03, +0x04, 0x7f, 0x80, 0x04, 0x04, 0x2f, 0x80, 0x02, 0x10, 0x02, 0x00, 0x00, 0x11, 0xe2, 0x00, 0x02, +0x10, 0x72, 0x00, 0x01, 0x10, 0x22, 0x00, 0x03, 0x54, 0x72, 0x80, 0xff, 0x58, 0x22, 0x00, 0x00, +0x44, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x13, 0x80, 0x00, 0x40, 0x00, 0x80, 0x10, +0x10, 0x01, 0x00, 0x00, 0x4e, 0x05, 0x00, 0x0e, 0x5e, 0xf0, 0x00, 0x40, 0x4e, 0xf3, 0x00, 0x04, +0x10, 0x81, 0x00, 0x00, 0x4e, 0x33, 0x00, 0x16, 0x10, 0x33, 0x00, 0x00, 0x48, 0x00, 0x00, 0x12, +0x52, 0x10, 0x00, 0x00, 0x54, 0x00, 0x80, 0xff, 0x4e, 0x33, 0x00, 0x0a, 0x10, 0x03, 0x00, 0x00, +0x5c, 0xf0, 0x00, 0x41, 0x4e, 0xf3, 0x00, 0x04, 0x10, 0x93, 0x00, 0x00, 0x10, 0xa1, 0x00, 0x00, +0x50, 0x31, 0x80, 0x01, 0x54, 0x31, 0x80, 0xff, 0x44, 0x00, 0x00, 0x04, 0x50, 0x21, 0x00, 0x01, +0x4c, 0x30, 0x7f, 0xd2, 0x20, 0x72, 0x00, 0x01, 0x20, 0x22, 0x00, 0x02, 0x40, 0x03, 0x98, 0x08, +0x40, 0x11, 0x30, 0x08, 0x20, 0x32, 0x00, 0x00, 0x20, 0x22, 0x00, 0x03, 0x40, 0x70, 0x04, 0x04, +0x40, 0x03, 0x8c, 0x04, 0x40, 0x11, 0x48, 0x08, 0x40, 0x70, 0x04, 0x04, 0x50, 0x52, 0x80, 0x01, +0x44, 0x20, 0x00, 0x03, 0x1c, 0x7e, 0x00, 0x01, 0x50, 0x63, 0x00, 0x01, 0x4c, 0x51, 0x7f, 0xa0, +0x46, 0x66, 0x02, 0x00, 0x04, 0x03, 0x01, 0x48, 0x3c, 0x5d, 0xfe, 0x19, 0x40, 0x90, 0x60, 0x09, +0x40, 0x94, 0xe0, 0x08, 0x40, 0x14, 0x94, 0x04, 0x14, 0x13, 0x01, 0x48, 0x46, 0x96, 0x02, 0x01, +0x04, 0x74, 0x81, 0x48, 0x40, 0x33, 0xe0, 0x09, 0x40, 0x31, 0xe0, 0x08, 0x40, 0x01, 0x94, 0x04, +0x14, 0x04, 0x81, 0x48, 0x46, 0x66, 0x02, 0x00, 0x58, 0x63, 0x00, 0xfc, 0x04, 0x23, 0x00, 0x00, +0x2e, 0x07, 0xf8, 0x6d, 0x44, 0x7f, 0xc0, 0xff, 0x40, 0x51, 0x1c, 0x02, 0x40, 0x30, 0x20, 0x08, +0x40, 0x41, 0x94, 0x04, 0x14, 0x43, 0x00, 0x00, 0x46, 0x9f, 0xff, 0x03, 0x04, 0x13, 0x00, 0x00, +0x58, 0x94, 0x8f, 0xff, 0x40, 0x70, 0xa4, 0x02, 0x40, 0x30, 0x38, 0x08, 0x40, 0x21, 0x9c, 0x04, +0x14, 0x23, 0x00, 0x00, 0x50, 0x5f, 0x80, 0x20, 0x00, 0x42, 0x80, 0x01, 0x00, 0x02, 0x80, 0x02, +0x00, 0x72, 0x80, 0x03, 0x50, 0x32, 0x7f, 0xff, 0x50, 0x90, 0x7f, 0xff, 0x54, 0x11, 0x80, 0xff, +0x54, 0x54, 0x80, 0xff, 0x40, 0x00, 0x84, 0x00, 0x40, 0x22, 0xa8, 0x08, 0x50, 0x33, 0xff, 0xff, +0x40, 0x90, 0x08, 0x04, 0x54, 0x51, 0x80, 0xff, 0x44, 0x44, 0x02, 0x01, 0x46, 0x66, 0x02, 0x00, +0x40, 0x14, 0x90, 0x04, 0x40, 0x72, 0xcc, 0x08, 0x04, 0x03, 0x01, 0x46, 0x40, 0x50, 0x9c, 0x04, +0x46, 0x7f, 0x80, 0x00, 0x40, 0x90, 0x1c, 0x02, 0x40, 0x22, 0xa4, 0x04, 0x14, 0x23, 0x01, 0x46, +0x46, 0x96, 0x02, 0x01, 0x04, 0x04, 0x81, 0x46, 0x40, 0x30, 0x1c, 0x02, 0x40, 0x42, 0x8c, 0x04, +0x14, 0x44, 0x81, 0x46, 0x2e, 0x0f, 0xe1, 0x8c, 0x5e, 0xf0, 0x7f, 0xff, 0x4e, 0xf2, 0x00, 0x0c, +0x44, 0x60, 0x00, 0x02, 0x40, 0x40, 0x18, 0x56, 0x50, 0x52, 0x00, 0x0f, 0x40, 0x12, 0x80, 0x10, +0x48, 0x00, 0x00, 0x0e, 0x5e, 0xf0, 0x00, 0x12, 0x4e, 0xf3, 0x00, 0x08, 0x44, 0x10, 0x00, 0x0f, +0x58, 0x50, 0x80, 0x00, 0x48, 0x00, 0x00, 0x0c, 0x44, 0x10, 0x00, 0x0f, 0x44, 0x20, 0x00, 0x02, +0x40, 0x30, 0x08, 0x16, 0x50, 0x91, 0x80, 0x06, 0x40, 0x54, 0x80, 0x10, 0x2e, 0x2f, 0xe1, 0x8e, +0x5e, 0xf1, 0x00, 0x10, 0x4e, 0xf3, 0x00, 0x06, 0x44, 0x40, 0x00, 0x0f, 0x48, 0x00, 0x00, 0x0a, +0x44, 0x90, 0x00, 0x02, 0x40, 0x61, 0x24, 0x56, 0x50, 0x43, 0x00, 0x07, 0x40, 0x42, 0x00, 0x10, +0x2e, 0x2f, 0xe1, 0x90, 0x5e, 0xf1, 0x00, 0x10, 0x4e, 0xf3, 0x00, 0x06, 0x44, 0x30, 0x00, 0x0f, +0x48, 0x00, 0x00, 0x0a, 0x44, 0x60, 0x00, 0x02, 0x40, 0x01, 0x18, 0x56, 0x50, 0x20, 0x00, 0x07, +0x40, 0x31, 0x00, 0x10, 0x2e, 0x2f, 0xe1, 0x92, 0x5e, 0xf1, 0x00, 0x1e, 0x4e, 0xf3, 0x00, 0x06, +0x44, 0x20, 0x00, 0x0f, 0x48, 0x00, 0x00, 0x08, 0x44, 0x00, 0x00, 0x02, 0x40, 0x21, 0x00, 0x16, +0x40, 0x21, 0x00, 0x10, 0x44, 0x90, 0x00, 0x00, 0x42, 0x52, 0xa4, 0x00, 0x42, 0x60, 0xa4, 0x00, +0x42, 0x42, 0x24, 0x00, 0x40, 0x02, 0x90, 0x08, 0x40, 0x50, 0x18, 0x04, 0x42, 0x61, 0xa4, 0x00, +0x40, 0x02, 0x20, 0x08, 0x40, 0x42, 0x80, 0x04, 0x42, 0x21, 0x24, 0x00, 0x40, 0x03, 0x30, 0x08, +0x46, 0x16, 0x02, 0x00, 0x40, 0x32, 0x00, 0x04, 0x40, 0x91, 0x40, 0x08, 0x04, 0x60, 0x81, 0x40, +0x40, 0x41, 0xa4, 0x04, 0x46, 0x9f, 0xff, 0x00, 0x40, 0x53, 0x24, 0x02, 0x40, 0x02, 0x14, 0x04, +0x14, 0x00, 0x81, 0x40, 0x46, 0x16, 0x02, 0x01, 0x04, 0x20, 0x81, 0x40, 0x40, 0x31, 0x24, 0x02, +0x40, 0x52, 0x0c, 0x04, 0x14, 0x50, 0x81, 0x40, 0x51, 0xff, 0x80, 0x34, 0x3a, 0x6f, 0xaa, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xd4, 0x2e, 0x00, 0x02, 0x86, +0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0x84, 0x70, 0x46, 0x86, 0x02, 0x00, 0x46, 0x6b, 0xfc, 0xff, +0x14, 0x8f, 0x80, 0x02, 0x14, 0x6f, 0x80, 0x03, 0x04, 0x1f, 0x80, 0x02, 0x04, 0x0f, 0x80, 0x03, +0x58, 0x54, 0x00, 0x00, 0x58, 0x42, 0x80, 0x00, 0x58, 0x32, 0x00, 0x00, 0x14, 0x5f, 0x80, 0x04, +0x14, 0x4f, 0x80, 0x05, 0x14, 0x3f, 0x80, 0x06, 0x58, 0x10, 0x88, 0x00, 0x58, 0x00, 0x03, 0xfc, +0x14, 0x1f, 0x80, 0x02, 0x14, 0x0f, 0x80, 0x03, 0x04, 0x7f, 0x80, 0x04, 0x04, 0x1f, 0x80, 0x05, +0x04, 0x0f, 0x80, 0x06, 0x46, 0x26, 0x02, 0x04, 0x14, 0x2f, 0x80, 0x07, 0x58, 0x10, 0x80, 0x04, +0x58, 0x00, 0x01, 0x7c, 0x14, 0x7f, 0x80, 0x04, 0x14, 0x1f, 0x80, 0x05, 0x14, 0x0f, 0x80, 0x06, +0x04, 0x7f, 0x80, 0x07, 0x44, 0x10, 0x00, 0x01, 0x3e, 0x10, 0x02, 0x86, 0x04, 0x0f, 0x80, 0x03, +0x04, 0x1f, 0x80, 0x02, 0x58, 0x73, 0x82, 0x04, 0x14, 0x7f, 0x80, 0x07, 0x14, 0x00, 0x80, 0x00, +0x44, 0x00, 0x02, 0x45, 0x04, 0x1f, 0x80, 0x04, 0x44, 0x70, 0x00, 0x00, 0x14, 0x00, 0x80, 0x00, +0x47, 0xe0, 0xa5, 0xf0, 0x04, 0x1f, 0x80, 0x05, 0x59, 0xef, 0x00, 0x5f, 0x14, 0x00, 0x80, 0x00, +0x59, 0xc1, 0x00, 0x00, 0x04, 0x0f, 0x80, 0x06, 0x58, 0xa1, 0x80, 0x00, 0x14, 0x70, 0x00, 0x00, +0x46, 0x92, 0x01, 0x71, 0x04, 0x1f, 0x80, 0x07, 0x15, 0xe0, 0x80, 0x00, 0x58, 0x94, 0x87, 0x17, +0x45, 0xe1, 0x00, 0x01, 0x58, 0x81, 0x80, 0x00, 0x46, 0x61, 0x72, 0x02, 0x58, 0x51, 0x80, 0x00, +0x46, 0x42, 0x02, 0x02, 0x58, 0x31, 0x00, 0x00, 0x58, 0x22, 0x80, 0x00, 0x15, 0xee, 0x00, 0x82, +0x14, 0x95, 0x02, 0x17, 0x58, 0x63, 0x08, 0x20, 0x58, 0x42, 0x00, 0x20, 0x44, 0x94, 0xb0, 0x43, +0x14, 0x64, 0x02, 0x18, 0x14, 0x42, 0x82, 0x19, 0x58, 0x61, 0x00, 0x00, 0x14, 0x71, 0x80, 0x42, +0x14, 0x91, 0x01, 0xbe, 0x04, 0x03, 0x01, 0xb2, 0x42, 0x80, 0x78, 0x08, 0x14, 0x83, 0x01, 0xb2, +0x04, 0x01, 0x01, 0xb3, 0x58, 0x51, 0x00, 0x00, 0x14, 0x5f, 0x80, 0x02, 0x58, 0x00, 0x00, 0x01, +0x14, 0x0f, 0x80, 0x01, 0x46, 0x4d, 0xbe, 0xa2, 0x04, 0x0f, 0x80, 0x02, 0x14, 0x4f, 0x80, 0x03, +0x58, 0x00, 0x06, 0xec, 0x14, 0x0f, 0x80, 0x02, 0x04, 0x0f, 0x80, 0x03, 0x14, 0x3f, 0x80, 0x04, +0x58, 0x00, 0x0f, 0x40, 0x14, 0x0f, 0x80, 0x03, 0x46, 0x17, 0xf5, 0x55, 0x04, 0x0f, 0x80, 0x04, +0x14, 0x1f, 0x80, 0x05, 0x58, 0x00, 0x04, 0x60, 0x14, 0x0f, 0x80, 0x04, 0x59, 0xc1, 0x00, 0x00, +0x04, 0x0f, 0x80, 0x05, 0x15, 0xcf, 0x80, 0x06, 0x58, 0x00, 0x00, 0x80, 0x14, 0x0f, 0x80, 0x05, +0x47, 0xe6, 0x02, 0x01, 0x04, 0x0f, 0x80, 0x06, 0x15, 0xef, 0x80, 0x07, 0x58, 0x00, 0x05, 0x50, +0x14, 0x0f, 0x80, 0x06, 0x58, 0xa1, 0x00, 0x00, 0x04, 0x0f, 0x80, 0x07, 0x14, 0xaf, 0x80, 0x08, +0x58, 0x00, 0x05, 0x50, 0x14, 0x0f, 0x80, 0x07, 0x46, 0x90, 0x0d, 0x8b, 0x04, 0x0f, 0x80, 0x08, +0x14, 0x9f, 0x80, 0x09, 0x58, 0x00, 0x05, 0x58, 0x14, 0x0f, 0x80, 0x08, 0x04, 0x0f, 0x80, 0x09, +0x47, 0xc0, 0x48, 0x90, 0x58, 0x00, 0x0c, 0xc4, 0x14, 0x0f, 0x80, 0x09, 0x04, 0x0f, 0x80, 0x01, +0x59, 0xce, 0x0c, 0x18, 0x14, 0x01, 0x01, 0xb3, 0x04, 0x0f, 0x80, 0x03, 0x04, 0x2f, 0x80, 0x02, +0x46, 0xa1, 0x29, 0x29, 0x14, 0x01, 0x00, 0x00, 0x04, 0x0f, 0x80, 0x05, 0x04, 0x2f, 0x80, 0x04, +0x58, 0x9f, 0x00, 0x00, 0x14, 0x01, 0x00, 0x00, 0x46, 0x80, 0x2e, 0x11, 0x04, 0x2f, 0x80, 0x06, +0x58, 0x64, 0x80, 0x00, 0x15, 0xc1, 0x00, 0x00, 0x46, 0x50, 0x69, 0x8f, 0x04, 0x0f, 0x80, 0x07, +0x58, 0x43, 0x00, 0x00, 0x15, 0xc0, 0x00, 0x00, 0x46, 0x35, 0x22, 0x0c, 0x04, 0x0f, 0x80, 0x09, +0x04, 0x2f, 0x80, 0x08, 0x58, 0x52, 0x88, 0x2a, 0x58, 0x12, 0x00, 0x00, 0x58, 0xa5, 0x05, 0x15, +0x58, 0x84, 0x0d, 0x30, 0x14, 0x01, 0x00, 0x00, 0x14, 0xaf, 0x01, 0x82, 0x14, 0x84, 0x81, 0x83, +0x14, 0x53, 0x01, 0x84, 0x14, 0x32, 0x01, 0x85, 0x44, 0x30, 0x05, 0xd5, 0x14, 0x30, 0x81, 0xa5, +0x2e, 0x57, 0xdf, 0xbc, 0x2e, 0x37, 0xdf, 0xff, 0x54, 0x42, 0x80, 0x30, 0x56, 0x02, 0x00, 0x10, +0x40, 0x41, 0x80, 0x10, 0x5c, 0x60, 0x00, 0x01, 0x4e, 0x44, 0x00, 0x26, 0x4e, 0x03, 0x00, 0x12, +0x46, 0x76, 0x02, 0x04, 0x46, 0x14, 0x00, 0xa0, 0x58, 0x10, 0x8a, 0xbf, 0x46, 0x06, 0x02, 0x04, +0x14, 0x13, 0x80, 0x98, 0x58, 0x00, 0x02, 0x70, 0x44, 0x10, 0x4f, 0x00, 0x48, 0x00, 0x00, 0x10, +0x46, 0x56, 0x02, 0x04, 0x46, 0x24, 0x01, 0x81, 0x58, 0x21, 0x08, 0xbf, 0x46, 0x06, 0x02, 0x04, +0x14, 0x22, 0x80, 0x98, 0x58, 0x00, 0x02, 0x70, 0x44, 0x10, 0x5f, 0x00, 0x14, 0x10, 0x00, 0x00, +0x48, 0x00, 0x00, 0x0e, 0x46, 0x86, 0x02, 0x04, 0x46, 0x14, 0x04, 0x04, 0x58, 0x04, 0x00, 0x00, +0x58, 0x10, 0x80, 0xbf, 0x14, 0x14, 0x00, 0x98, 0x14, 0x70, 0x00, 0x9c, 0x46, 0x26, 0x02, 0x04, +0x58, 0x71, 0x00, 0x00, 0x44, 0x50, 0xf8, 0xf8, 0x14, 0x51, 0x00, 0x99, 0x14, 0x53, 0x80, 0x9a, +0x4e, 0x44, 0x00, 0x14, 0x4e, 0x62, 0x00, 0x0a, 0x46, 0x06, 0x02, 0x04, 0x46, 0x12, 0xf0, 0xa2, +0x58, 0x00, 0x02, 0x6c, 0x48, 0x00, 0x00, 0x10, 0x46, 0x06, 0x02, 0x04, 0x46, 0x12, 0xf1, 0x82, +0x58, 0x00, 0x02, 0x6c, 0x48, 0x00, 0x00, 0x08, 0x46, 0x06, 0x02, 0x04, 0x46, 0x12, 0xf1, 0x62, +0x58, 0x00, 0x02, 0x6c, 0x54, 0x31, 0x80, 0x40, 0x14, 0x10, 0x00, 0x00, 0x4e, 0x32, 0x00, 0x0a, +0x46, 0x00, 0x03, 0xff, 0x58, 0x11, 0x00, 0x00, 0x58, 0x00, 0x08, 0xf8, 0x48, 0x00, 0x00, 0x0a, +0x46, 0x00, 0x03, 0xfb, 0x46, 0x26, 0x02, 0x04, 0x46, 0x16, 0x02, 0x04, 0x58, 0x00, 0x08, 0xb8, +0x14, 0x01, 0x01, 0xc5, 0x14, 0x00, 0x81, 0xc6, 0x46, 0x06, 0x02, 0x00, 0x58, 0x00, 0x00, 0xfc, +0x04, 0x70, 0x00, 0x00, 0x46, 0x8f, 0xfe, 0x00, 0x58, 0x84, 0x00, 0x0f, 0x40, 0x73, 0xa0, 0x02, +0x58, 0x54, 0x80, 0x00, 0x46, 0x46, 0x02, 0x00, 0x46, 0x12, 0x00, 0xfc, 0x58, 0x32, 0x80, 0x00, +0x14, 0x70, 0x00, 0x00, 0x58, 0x10, 0x80, 0x0c, 0x44, 0x70, 0x00, 0x00, 0x46, 0x26, 0x02, 0x04, +0x14, 0x72, 0x80, 0x5f, 0x14, 0x12, 0x01, 0x45, 0x14, 0x11, 0x81, 0x45, 0x44, 0x10, 0xc4, 0xc6, +0x14, 0x11, 0x01, 0x23, 0x58, 0x51, 0x00, 0x00, 0x04, 0x82, 0x80, 0x64, 0x44, 0x3c, 0xff, 0xff, +0x40, 0x44, 0x0c, 0x02, 0x42, 0x22, 0x40, 0x08, 0x14, 0x22, 0x80, 0x64, 0x46, 0x7f, 0xff, 0x00, +0x04, 0x10, 0x00, 0x00, 0x58, 0x73, 0x80, 0x0f, 0x40, 0x80, 0x9c, 0x02, 0x14, 0x80, 0x00, 0x00, +0x2e, 0x47, 0xe1, 0xb2, 0x4e, 0x43, 0x00, 0x06, 0x2e, 0x07, 0xe1, 0xb3, 0x4e, 0x02, 0x00, 0x54, +0x46, 0x26, 0x02, 0x00, 0x46, 0x04, 0xf1, 0x7b, 0x58, 0x84, 0x80, 0x00, 0x58, 0x00, 0x0b, 0xf5, +0x14, 0x01, 0x01, 0x46, 0x58, 0x11, 0x00, 0x00, 0x14, 0x04, 0x01, 0x46, 0x04, 0x30, 0x81, 0x40, +0x46, 0x7f, 0xff, 0x00, 0x40, 0x41, 0x9c, 0x02, 0x58, 0x52, 0x77, 0x6f, 0x14, 0x50, 0x81, 0x40, +0x58, 0x04, 0x00, 0x00, 0x04, 0x80, 0x01, 0x40, 0x40, 0x24, 0x1c, 0x02, 0x58, 0x31, 0x77, 0x6f, +0x14, 0x30, 0x01, 0x40, 0x04, 0x40, 0x81, 0x48, 0x46, 0x8f, 0xf0, 0x00, 0x46, 0x30, 0x0b, 0x20, +0x40, 0x52, 0x20, 0x02, 0x58, 0x31, 0x84, 0xc1, 0x40, 0x72, 0x8c, 0x04, 0x14, 0x70, 0x81, 0x48, +0x04, 0x20, 0x01, 0x48, 0x58, 0x70, 0x80, 0x00, 0x40, 0x41, 0x20, 0x02, 0x40, 0x52, 0x0c, 0x04, +0x14, 0x50, 0x01, 0x48, 0x04, 0x13, 0x81, 0x61, 0x44, 0x40, 0xff, 0xff, 0x46, 0x30, 0xb4, 0x90, +0x40, 0x20, 0x90, 0x02, 0x40, 0x81, 0x0c, 0x04, 0x46, 0x06, 0x02, 0x01, 0x14, 0x83, 0x81, 0x61, +0x58, 0x00, 0x05, 0x84, 0x04, 0x50, 0x00, 0x00, 0x40, 0x12, 0x90, 0x02, 0x40, 0x10, 0x8c, 0x04, +0x48, 0x00, 0x00, 0x78, 0x49, 0xff, 0xfa, 0xc6, 0x2e, 0x77, 0xe3, 0xba, 0x4e, 0x73, 0x00, 0x1c, +0x46, 0x86, 0x02, 0x00, 0x04, 0x14, 0x01, 0x61, 0x44, 0x30, 0xff, 0xff, 0x46, 0x50, 0xb4, 0x90, +0x40, 0x70, 0x8c, 0x02, 0x40, 0x23, 0x94, 0x04, 0x46, 0x06, 0x02, 0x01, 0x14, 0x24, 0x01, 0x61, +0x58, 0x00, 0x05, 0x84, 0x04, 0x40, 0x00, 0x00, 0x41, 0xe2, 0x0c, 0x02, 0x40, 0x1f, 0x14, 0x04, +0x48, 0x00, 0x00, 0x58, 0x2e, 0x0f, 0xe3, 0xbb, 0x5e, 0xf0, 0x7f, 0xfb, 0x4e, 0xf3, 0x00, 0x1c, +0x46, 0x86, 0x02, 0x00, 0x04, 0x14, 0x01, 0x61, 0x44, 0x30, 0xff, 0xff, 0x46, 0x50, 0xb4, 0x90, +0x40, 0x70, 0x8c, 0x02, 0x40, 0x23, 0x94, 0x04, 0x46, 0x06, 0x02, 0x01, 0x14, 0x24, 0x01, 0x61, +0x58, 0x00, 0x05, 0x84, 0x04, 0x40, 0x00, 0x00, 0x41, 0xe2, 0x0c, 0x02, 0x40, 0x1f, 0x14, 0x04, +0x48, 0x00, 0x00, 0x38, 0x5e, 0xf0, 0x7f, 0xf7, 0x4e, 0xf3, 0x00, 0x1c, 0x46, 0x86, 0x02, 0x00, +0x04, 0x14, 0x01, 0x61, 0x44, 0x50, 0xff, 0xff, 0x46, 0x40, 0xb6, 0x90, 0x40, 0x70, 0x94, 0x02, +0x40, 0x23, 0x90, 0x04, 0x46, 0x06, 0x02, 0x01, 0x14, 0x24, 0x01, 0x61, 0x58, 0x00, 0x05, 0x84, +0x04, 0x30, 0x00, 0x00, 0x41, 0xe1, 0x94, 0x02, 0x40, 0x1f, 0x10, 0x04, 0x48, 0x00, 0x00, 0x1a, +0x46, 0x86, 0x02, 0x00, 0x04, 0x14, 0x01, 0x61, 0x44, 0x50, 0xff, 0xff, 0x46, 0x40, 0xb6, 0x90, +0x40, 0x70, 0x94, 0x02, 0x40, 0x23, 0x90, 0x04, 0x46, 0x06, 0x02, 0x01, 0x14, 0x24, 0x01, 0x61, +0x58, 0x00, 0x05, 0x84, 0x04, 0x30, 0x00, 0x00, 0x41, 0xe1, 0x94, 0x02, 0x40, 0x1f, 0x10, 0x04, +0x46, 0x56, 0x02, 0x00, 0x46, 0x4b, 0x20, 0x10, 0x46, 0x36, 0x02, 0x01, 0x14, 0x10, 0x00, 0x00, +0x14, 0x42, 0x83, 0x45, 0x14, 0x41, 0x83, 0x45, 0x2e, 0x27, 0xdf, 0xc5, 0x2e, 0x17, 0xdf, 0xc4, +0x4e, 0x62, 0x00, 0x0c, 0x46, 0x06, 0x02, 0x00, 0x46, 0x10, 0xcb, 0x00, 0x58, 0x00, 0x0d, 0x08, +0x58, 0x10, 0x80, 0x40, 0x48, 0x00, 0x00, 0x1e, 0x54, 0x00, 0x80, 0x7f, 0x4e, 0x02, 0x00, 0x12, +0x40, 0x70, 0x9c, 0x09, 0x40, 0x41, 0x50, 0x08, 0x40, 0x22, 0x00, 0x04, 0x40, 0x83, 0xcc, 0x08, +0x46, 0x06, 0x02, 0x00, 0x40, 0x11, 0x20, 0x04, 0x58, 0x00, 0x0d, 0x08, 0x48, 0x00, 0x00, 0x0a, +0x46, 0x06, 0x02, 0x00, 0x46, 0x10, 0xc9, 0xc0, 0x58, 0x00, 0x0d, 0x08, 0x58, 0x10, 0x80, 0x40, +0x14, 0x10, 0x00, 0x00, 0x2e, 0x27, 0xdf, 0xcb, 0x2e, 0x17, 0xdf, 0xca, 0x4e, 0x62, 0x00, 0x0c, +0x46, 0x06, 0x02, 0x01, 0x46, 0x10, 0xcb, 0x80, 0x58, 0x00, 0x0d, 0x08, 0x58, 0x10, 0x80, 0x40, +0x48, 0x00, 0x00, 0x1e, 0x54, 0x00, 0x80, 0x7f, 0x4e, 0x02, 0x00, 0x12, 0x40, 0x50, 0x9c, 0x09, +0x40, 0x81, 0x50, 0x08, 0x40, 0x34, 0x00, 0x04, 0x40, 0x62, 0xcc, 0x08, 0x46, 0x06, 0x02, 0x01, +0x40, 0x11, 0x98, 0x04, 0x58, 0x00, 0x0d, 0x08, 0x48, 0x00, 0x00, 0x0a, 0x46, 0x06, 0x02, 0x01, +0x46, 0x10, 0xc9, 0xf0, 0x58, 0x00, 0x0d, 0x08, 0x58, 0x10, 0x80, 0x40, 0x14, 0x10, 0x00, 0x00, +0x2e, 0x07, 0xe3, 0xc0, 0x4e, 0x02, 0x00, 0x26, 0x46, 0x66, 0x02, 0x00, 0x04, 0x83, 0x03, 0x46, +0x44, 0x4f, 0x00, 0xff, 0x40, 0x54, 0x10, 0x02, 0x58, 0x32, 0x83, 0x00, 0x14, 0x33, 0x03, 0x46, +0x46, 0x26, 0x02, 0x01, 0x58, 0x21, 0x0d, 0x18, 0x04, 0x11, 0x00, 0x00, 0x46, 0x00, 0x30, 0x00, +0x40, 0x70, 0x90, 0x02, 0x46, 0x10, 0x20, 0x01, 0x46, 0x56, 0x02, 0x01, 0x58, 0x43, 0x00, 0x00, +0x58, 0x32, 0x80, 0x00, 0x58, 0x10, 0x86, 0x1f, 0x58, 0x73, 0x83, 0x00, 0x48, 0x00, 0x00, 0x24, +0x46, 0x06, 0x02, 0x00, 0x04, 0x40, 0x03, 0x46, 0x44, 0x6f, 0x00, 0xff, 0x40, 0x12, 0x18, 0x02, +0x14, 0x10, 0x03, 0x46, 0x46, 0x26, 0x02, 0x01, 0x58, 0x21, 0x0d, 0x18, 0x04, 0x71, 0x00, 0x00, +0x46, 0x18, 0x20, 0x01, 0x46, 0x00, 0x60, 0x20, 0x58, 0x83, 0x00, 0x00, 0x46, 0x66, 0x02, 0x00, +0x46, 0x56, 0x02, 0x01, 0x46, 0x46, 0x02, 0x00, 0x46, 0x36, 0x02, 0x01, 0x58, 0x10, 0x83, 0x1a, +0x40, 0x73, 0xa0, 0x02, 0x14, 0x71, 0x00, 0x00, 0x14, 0x13, 0x03, 0x47, 0x46, 0x76, 0x02, 0x04, +0x14, 0x12, 0x83, 0x47, 0x14, 0x02, 0x03, 0x48, 0x14, 0x01, 0x83, 0x48, 0x58, 0x73, 0x86, 0x00, +0x04, 0x03, 0x80, 0x00, 0x42, 0x40, 0x58, 0x09, 0x42, 0x42, 0x5c, 0x09, 0x42, 0x82, 0x5c, 0x08, +0x14, 0x83, 0x80, 0x00, 0x04, 0x63, 0x80, 0x00, 0x46, 0x16, 0x02, 0x00, 0x42, 0x23, 0x1c, 0x09, +0x14, 0x23, 0x80, 0x00, 0x04, 0x30, 0x81, 0x8e, 0x40, 0x41, 0x94, 0x09, 0x40, 0x42, 0x14, 0x08, +0x58, 0x62, 0x00, 0x1e, 0x14, 0x60, 0x81, 0x8e, 0x58, 0x80, 0x80, 0x00, 0x04, 0x54, 0x01, 0x83, +0x46, 0x73, 0x00, 0x00, 0x40, 0x02, 0x9c, 0x04, 0x14, 0x04, 0x01, 0x83, 0x46, 0x26, 0x02, 0x04, +0x58, 0x21, 0x02, 0x00, 0x04, 0x31, 0x00, 0x00, 0x46, 0x6f, 0xff, 0x00, 0x58, 0x41, 0x83, 0xff, +0x14, 0x41, 0x00, 0x00, 0x58, 0x63, 0x03, 0xff, 0x04, 0x51, 0x00, 0x00, 0x44, 0x81, 0x60, 0x00, +0x40, 0x72, 0x98, 0x02, 0x40, 0x33, 0xa0, 0x04, 0x14, 0x31, 0x00, 0x00, 0x46, 0x16, 0x01, 0x30, +0x58, 0x10, 0x80, 0x9c, 0x04, 0x50, 0x80, 0x00, 0x40, 0x82, 0xa4, 0x09, 0x40, 0x84, 0x24, 0x08, +0x14, 0x80, 0x80, 0x00, 0x04, 0x70, 0x80, 0x00, 0x50, 0x00, 0xff, 0xfc, 0x58, 0x23, 0x80, 0x82, +0x14, 0x20, 0x80, 0x00, 0x04, 0x80, 0x00, 0x00, 0x46, 0x46, 0x02, 0x04, 0x40, 0x14, 0x20, 0x09, +0x40, 0x10, 0xa0, 0x08, 0x14, 0x10, 0x00, 0x00, 0x04, 0x70, 0x00, 0x00, 0x58, 0x53, 0x80, 0x14, +0x14, 0x50, 0x00, 0x00, 0x46, 0x36, 0x02, 0x04, 0x04, 0x02, 0x00, 0x8a, 0x58, 0x31, 0x82, 0x0c, +0x40, 0x70, 0x14, 0x09, 0x40, 0x73, 0x94, 0x08, 0x58, 0x03, 0x80, 0x0d, 0x14, 0x02, 0x00, 0x8a, +0x46, 0x78, 0x00, 0x00, 0x04, 0x81, 0x80, 0x00, 0x58, 0x73, 0x80, 0xff, 0x40, 0x04, 0x1c, 0x02, +0x46, 0x77, 0xc9, 0x00, 0x58, 0x73, 0x84, 0x00, 0x40, 0x00, 0x1c, 0x04, 0x14, 0x01, 0x80, 0x00, +0x04, 0x71, 0x80, 0x00, 0x46, 0x66, 0x02, 0x00, 0x40, 0x73, 0xa0, 0x09, 0x40, 0x73, 0xa0, 0x08, +0x58, 0x83, 0x80, 0x01, 0x14, 0x81, 0x80, 0x00, 0x04, 0x33, 0x01, 0x86, 0x40, 0x81, 0xbc, 0x09, +0x40, 0x84, 0x3c, 0x08, 0x58, 0x34, 0x7d, 0x10, 0x14, 0x33, 0x01, 0x86, 0x46, 0x26, 0x02, 0x00, +0x58, 0x21, 0x06, 0x34, 0x04, 0x71, 0x00, 0x00, 0x42, 0x63, 0x80, 0x09, 0x14, 0x61, 0x00, 0x00, +0x04, 0x31, 0x00, 0x00, 0x46, 0x60, 0x1f, 0x80, 0x40, 0x71, 0x98, 0x04, 0x14, 0x71, 0x00, 0x00, +0x50, 0x11, 0x7f, 0xe0, 0x04, 0x20, 0x80, 0x00, 0x42, 0x81, 0x4c, 0x09, 0x14, 0x80, 0x80, 0x00, +0x44, 0x8f, 0x00, 0xff, 0x04, 0x30, 0x80, 0x00, 0x46, 0x56, 0x02, 0x01, 0x40, 0x21, 0xa0, 0x02, +0x58, 0x31, 0x4d, 0x00, 0x14, 0x30, 0x80, 0x00, 0x04, 0x22, 0x81, 0xbc, 0x46, 0x46, 0x02, 0x00, +0x40, 0x31, 0x20, 0x02, 0x58, 0x11, 0xb0, 0x00, 0x14, 0x12, 0x81, 0xbc, 0x04, 0x52, 0x01, 0xbc, +0x46, 0x33, 0x40, 0x00, 0x40, 0x12, 0xa0, 0x08, 0x40, 0x10, 0xa0, 0x09, 0x40, 0x50, 0x8c, 0x04, +0x14, 0x52, 0x01, 0xbc, 0x46, 0x06, 0x02, 0x04, 0x58, 0x00, 0x00, 0xf0, 0x04, 0x20, 0x00, 0x00, +0x58, 0x41, 0x00, 0x02, 0x14, 0x40, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x58, 0x50, 0x80, 0x04, +0x14, 0x50, 0x00, 0x00, 0x2e, 0x27, 0xe3, 0xbd, 0x4e, 0x22, 0x00, 0x16, 0x46, 0x06, 0x02, 0x00, +0x04, 0x10, 0x03, 0x44, 0x46, 0x40, 0x0f, 0xff, 0x58, 0x42, 0x0f, 0xff, 0x40, 0x30, 0x90, 0x02, +0x14, 0x30, 0x03, 0x44, 0x46, 0x56, 0x02, 0x01, 0x04, 0x22, 0x83, 0x44, 0x40, 0x11, 0x10, 0x02, +0x14, 0x12, 0x83, 0x44, 0x46, 0x26, 0x02, 0x04, 0x04, 0x01, 0x00, 0x64, 0x42, 0x40, 0x1c, 0x09, +0x14, 0x41, 0x00, 0x64, 0x51, 0xff, 0x80, 0x2c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3c, 0x0d, 0xf8, 0xf5, 0x4a, 0x00, 0x78, 0x20, 0x46, 0x08, 0x00, 0x23, 0x04, 0x10, 0x00, 0x20, +0x46, 0x21, 0x10, 0x00, 0x40, 0x40, 0x88, 0x04, 0x14, 0x40, 0x00, 0x20, 0x58, 0x50, 0x00, 0x00, +0x04, 0x22, 0x80, 0x21, 0x44, 0x31, 0x01, 0x11, 0x40, 0x11, 0x0c, 0x04, 0x14, 0x12, 0x80, 0x21, +0x46, 0x08, 0x00, 0x00, 0x04, 0x40, 0x00, 0x42, 0x46, 0x18, 0x10, 0x60, 0x46, 0x20, 0x48, 0x52, +0x58, 0x32, 0x40, 0x00, 0x58, 0x21, 0x03, 0x90, 0x14, 0x30, 0x00, 0x42, 0x14, 0x20, 0x80, 0x02, +0x4a, 0x00, 0x78, 0x20, 0x46, 0x36, 0x02, 0x00, 0x14, 0x11, 0x83, 0x80, 0x4e, 0x23, 0x00, 0x08, +0x58, 0x11, 0x80, 0x00, 0x44, 0x21, 0x10, 0x00, 0x48, 0x00, 0x00, 0x06, 0x46, 0x16, 0x02, 0x00, +0x44, 0x23, 0x10, 0x00, 0x40, 0x00, 0x08, 0x00, 0x14, 0x00, 0x83, 0x81, 0x58, 0x01, 0x80, 0x00, +0x04, 0x20, 0x03, 0x84, 0x54, 0x11, 0x20, 0x00, 0x4e, 0x13, 0xff, 0xfc, 0x4a, 0x00, 0x78, 0x20, +0x4e, 0x13, 0x00, 0x0c, 0x44, 0x1e, 0xef, 0xff, 0x40, 0x00, 0x04, 0x02, 0x44, 0x21, 0x00, 0x00, +0x46, 0x16, 0x02, 0x00, 0x48, 0x00, 0x00, 0x0a, 0x44, 0x2c, 0xef, 0xff, 0x40, 0x00, 0x08, 0x02, +0x46, 0x16, 0x02, 0x00, 0x44, 0x23, 0x00, 0x00, 0x40, 0x00, 0x08, 0x04, 0x14, 0x00, 0x83, 0x81, +0x46, 0x06, 0x02, 0x00, 0x04, 0x40, 0x03, 0x84, 0x54, 0x32, 0x20, 0x00, 0x4e, 0x33, 0xff, 0xfc, +0x58, 0x50, 0x00, 0x00, 0x04, 0x02, 0x83, 0x83, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa8, 0xbc, +0x58, 0x61, 0x00, 0x00, 0x58, 0xa2, 0x00, 0x00, 0x58, 0x91, 0x80, 0x00, 0x58, 0x70, 0x80, 0x00, +0x58, 0x80, 0x00, 0x00, 0x49, 0xff, 0xff, 0xce, 0x40, 0x35, 0x24, 0x0c, 0x40, 0x13, 0x18, 0x05, +0x40, 0x50, 0x04, 0x02, 0x40, 0x61, 0x98, 0x02, 0x40, 0x12, 0x98, 0x04, 0x58, 0x04, 0x00, 0x00, +0x58, 0x23, 0x80, 0x00, 0x49, 0xff, 0xff, 0xa0, 0x3a, 0x6f, 0xa8, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0xa0, 0xbc, 0x58, 0x80, 0x80, 0x00, 0x58, 0x11, 0x00, 0x00, 0x58, 0x61, 0x00, 0x00, +0x58, 0x70, 0x00, 0x00, 0x49, 0xff, 0xff, 0xae, 0x40, 0x10, 0x20, 0x04, 0x58, 0x23, 0x00, 0x00, +0x58, 0x03, 0x80, 0x00, 0x49, 0xff, 0xff, 0x88, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0xa0, 0xbc, 0x58, 0x80, 0x80, 0x00, 0x58, 0x11, 0x00, 0x00, 0x58, 0x61, 0x00, 0x00, +0x58, 0x70, 0x00, 0x00, 0x49, 0xff, 0xff, 0x96, 0x40, 0x14, 0x20, 0x05, 0x40, 0x10, 0x04, 0x02, +0x58, 0x23, 0x00, 0x00, 0x58, 0x03, 0x80, 0x00, 0x49, 0xff, 0xff, 0x6e, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa8, 0xbc, 0x54, 0x70, 0x00, 0xff, 0x4e, 0x72, 0x00, 0x14, -0x3e, 0x6f, 0xdd, 0x30, 0x04, 0x03, 0x00, 0x00, 0x04, 0x13, 0x00, 0x01, 0x04, 0x23, 0x00, 0x05, -0x50, 0x63, 0x00, 0x18, 0x49, 0xff, 0xff, 0xac, 0x3e, 0x5f, 0xde, 0x50, 0x4c, 0x62, 0xff, 0xf4, -0x48, 0x00, 0x00, 0x22, 0x3e, 0x6f, 0xdd, 0x30, 0x44, 0x90, 0x00, 0x06, 0x2e, 0x17, 0xe6, 0x1c, -0x3e, 0x3f, 0xdd, 0x00, 0x42, 0x13, 0xa4, 0x73, 0x04, 0x03, 0x00, 0x00, 0x51, 0xe0, 0x80, 0x0b, +0x3e, 0x6f, 0xda, 0xdc, 0x04, 0x03, 0x00, 0x00, 0x04, 0x13, 0x00, 0x01, 0x04, 0x23, 0x00, 0x05, +0x50, 0x63, 0x00, 0x18, 0x49, 0xff, 0xff, 0x58, 0x3e, 0x5f, 0xdb, 0xfc, 0x4c, 0x62, 0xff, 0xf4, +0x48, 0x00, 0x00, 0x22, 0x3e, 0x6f, 0xda, 0xdc, 0x44, 0x90, 0x00, 0x06, 0x2e, 0x17, 0xe3, 0xbc, +0x3e, 0x3f, 0xda, 0xac, 0x42, 0x13, 0xa4, 0x73, 0x04, 0x03, 0x00, 0x00, 0x51, 0xe0, 0x80, 0x0b, 0x40, 0x5f, 0x08, 0x08, 0x40, 0x42, 0x8c, 0x00, 0x04, 0x23, 0x00, 0x05, 0x04, 0x12, 0x00, 0x01, -0x50, 0x73, 0x80, 0x01, 0x49, 0xff, 0xff, 0x8c, 0x44, 0x50, 0x00, 0x0c, 0x50, 0x63, 0x00, 0x18, -0x4c, 0x72, 0xff, 0xe6, 0x3a, 0x6f, 0xa8, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, -0x58, 0x60, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, 0x4c, 0x60, 0x40, 0x28, 0x44, 0x10, 0x00, 0x00, -0x44, 0x00, 0x00, 0xa0, 0x49, 0xff, 0xff, 0x92, 0x40, 0x30, 0x10, 0x08, 0x40, 0x31, 0x90, 0x09, -0x42, 0x11, 0xf0, 0x08, 0x44, 0x20, 0x00, 0x00, 0x44, 0x00, 0x00, 0xa0, 0x49, 0xff, 0xff, 0x68, -0x58, 0x13, 0x00, 0x00, 0x44, 0x00, 0x00, 0xa0, 0x49, 0xff, 0xff, 0x80, 0x40, 0x20, 0x10, 0x08, -0x40, 0x21, 0x10, 0x09, 0x42, 0x11, 0x70, 0x08, 0x44, 0x00, 0x00, 0xa0, 0x58, 0x23, 0x00, 0x00, -0x49, 0xff, 0xff, 0x56, 0x48, 0x00, 0x00, 0x2c, 0x4e, 0x62, 0x00, 0x0a, 0x44, 0x50, 0x00, 0x05, -0x4c, 0x62, 0x80, 0x06, 0x44, 0x50, 0x00, 0x04, 0x4c, 0x62, 0xc0, 0x22, 0x44, 0x10, 0x00, 0x00, -0x44, 0x00, 0x00, 0xa0, 0x49, 0xff, 0xff, 0x62, 0x40, 0x10, 0x10, 0x08, 0x40, 0x10, 0x90, 0x09, -0x44, 0x20, 0x00, 0x00, 0x44, 0x00, 0x00, 0xa0, 0x49, 0xff, 0xff, 0x3a, 0x44, 0x10, 0x00, 0x01, -0x44, 0x00, 0x00, 0xa0, 0x49, 0xff, 0xff, 0x52, 0x40, 0x10, 0x10, 0x08, 0x40, 0x10, 0x90, 0x09, -0x44, 0x20, 0x00, 0x01, 0x44, 0x00, 0x00, 0xa0, 0x49, 0xff, 0xff, 0x2a, 0x3a, 0x6f, 0xa0, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x3e, 0x0f, 0xdf, 0xb4, +0x50, 0x73, 0x80, 0x01, 0x49, 0xff, 0xff, 0x38, 0x44, 0x50, 0x00, 0x0c, 0x50, 0x63, 0x00, 0x18, +0x4c, 0x72, 0xff, 0xe6, 0x3a, 0x6f, 0xa8, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, +0x51, 0xff, 0xff, 0xfc, 0x58, 0x60, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, 0x4c, 0x60, 0x40, 0x1c, +0x46, 0x2f, 0x00, 0x00, 0x58, 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0xa0, 0x44, 0x10, 0x00, 0x00, +0x44, 0x30, 0x00, 0x1c, 0x49, 0xff, 0xff, 0x5c, 0x46, 0x2f, 0x00, 0x00, 0x58, 0x13, 0x00, 0x00, +0x44, 0x00, 0x00, 0xa0, 0x44, 0x30, 0x00, 0x1c, 0x58, 0x43, 0x00, 0x00, 0x49, 0xff, 0xff, 0x50, +0x48, 0x00, 0x00, 0x24, 0x4e, 0x62, 0x00, 0x0a, 0x44, 0x10, 0x00, 0x05, 0x4c, 0x60, 0x80, 0x06, +0x44, 0x50, 0x00, 0x04, 0x4c, 0x62, 0xc0, 0x1a, 0x44, 0x10, 0x00, 0x00, 0x46, 0x2f, 0x00, 0x00, +0x58, 0x40, 0x80, 0x00, 0x44, 0x00, 0x00, 0xa0, 0x44, 0x30, 0x00, 0x1c, 0x49, 0xff, 0xff, 0x38, +0x46, 0x2f, 0x00, 0x00, 0x44, 0x00, 0x00, 0xa0, 0x44, 0x10, 0x00, 0x01, 0x44, 0x30, 0x00, 0x1c, +0x44, 0x40, 0x00, 0x00, 0x49, 0xff, 0xff, 0x2c, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x3e, 0x0f, 0xdd, 0x60, 0x44, 0x10, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, 0x04, 0x30, 0x00, 0x00, 0x04, 0x40, 0x00, 0x01, -0x50, 0x10, 0x80, 0x01, 0x14, 0x41, 0x80, 0x00, 0x50, 0x00, 0x00, 0x08, 0x2e, 0x57, 0xe6, 0x39, -0x40, 0xf0, 0x94, 0x06, 0x4e, 0xf3, 0xff, 0xf2, 0x44, 0x00, 0x00, 0x00, 0x49, 0xff, 0xff, 0x4c, -0x3e, 0x6f, 0xe0, 0xc4, 0x44, 0x70, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, 0x04, 0x03, 0x00, 0x00, -0x04, 0x13, 0x00, 0x01, 0x50, 0x73, 0x80, 0x01, 0x49, 0xff, 0xfe, 0xfa, 0x50, 0x63, 0x00, 0x08, -0x2e, 0x07, 0xe6, 0x3a, 0x44, 0x20, 0x00, 0x00, 0x40, 0xf3, 0x80, 0x06, 0x4e, 0xf3, 0xff, 0xf0, -0x2e, 0x77, 0xe6, 0x1c, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x72, 0xc0, 0x0a, 0x46, 0x1a, 0x88, 0x88, +0x50, 0x10, 0x80, 0x01, 0x14, 0x41, 0x80, 0x00, 0x50, 0x00, 0x00, 0x08, 0x2e, 0x57, 0xe3, 0xd9, +0x40, 0xf0, 0x94, 0x06, 0x4e, 0xf3, 0xff, 0xf2, 0x44, 0x00, 0x00, 0x00, 0x49, 0xff, 0xff, 0x5c, +0x3e, 0x6f, 0xde, 0x70, 0x44, 0x70, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, 0x04, 0x03, 0x00, 0x00, +0x04, 0x13, 0x00, 0x01, 0x50, 0x73, 0x80, 0x01, 0x49, 0xff, 0xfe, 0xb6, 0x50, 0x63, 0x00, 0x08, +0x2e, 0x07, 0xe3, 0xda, 0x44, 0x20, 0x00, 0x00, 0x40, 0xf3, 0x80, 0x06, 0x4e, 0xf3, 0xff, 0xf0, +0x2e, 0x77, 0xe3, 0xbc, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x72, 0xc0, 0x0a, 0x46, 0x1a, 0x88, 0x88, 0x58, 0x10, 0x88, 0x88, 0x44, 0x00, 0x00, 0x78, 0x48, 0x00, 0x00, 0x0a, 0x46, 0x18, 0x88, 0x88, -0x58, 0x10, 0x88, 0x88, 0x44, 0x00, 0x00, 0x78, 0x44, 0x20, 0x00, 0x00, 0x49, 0xff, 0xfe, 0xd8, -0x2e, 0x77, 0xe4, 0x0e, 0x4e, 0x72, 0x00, 0x16, 0x46, 0x10, 0x24, 0x44, 0x58, 0x10, 0x84, 0x00, -0x44, 0x00, 0x06, 0x10, 0x44, 0x20, 0x00, 0x00, 0x49, 0xff, 0xfe, 0xca, 0x46, 0x10, 0x3f, 0xf0, +0x58, 0x10, 0x88, 0x88, 0x44, 0x00, 0x00, 0x78, 0x44, 0x20, 0x00, 0x00, 0x49, 0xff, 0xfe, 0x94, +0x2e, 0x77, 0xe1, 0xb2, 0x4e, 0x72, 0x00, 0x16, 0x46, 0x10, 0x24, 0x44, 0x58, 0x10, 0x84, 0x00, +0x44, 0x00, 0x06, 0x10, 0x44, 0x20, 0x00, 0x00, 0x49, 0xff, 0xfe, 0x86, 0x46, 0x10, 0x3f, 0xf0, 0x58, 0x10, 0x80, 0x03, 0x44, 0x00, 0x00, 0x54, 0x44, 0x20, 0x00, 0x00, 0x48, 0x00, 0x00, 0x14, 0x46, 0x10, 0x24, 0x44, 0x58, 0x10, 0x84, 0x08, 0x44, 0x00, 0x06, 0x10, 0x58, 0x23, 0x80, 0x00, -0x49, 0xff, 0xfe, 0xb6, 0x46, 0x18, 0x3f, 0xf0, 0x58, 0x10, 0x80, 0x03, 0x58, 0x23, 0x80, 0x00, -0x44, 0x00, 0x00, 0x54, 0x49, 0xff, 0xfe, 0xac, 0x2e, 0x27, 0xe6, 0x20, 0x4e, 0x23, 0x00, 0x0a, +0x49, 0xff, 0xfe, 0x72, 0x46, 0x18, 0x3f, 0xf0, 0x58, 0x10, 0x80, 0x03, 0x58, 0x23, 0x80, 0x00, +0x44, 0x00, 0x00, 0x54, 0x49, 0xff, 0xfe, 0x68, 0x2e, 0x27, 0xe3, 0xc0, 0x4e, 0x23, 0x00, 0x0a, 0x46, 0x10, 0x06, 0x10, 0x58, 0x10, 0x80, 0x81, 0x44, 0x00, 0x00, 0xe8, 0x48, 0x00, 0x00, 0x0a, 0x46, 0x10, 0x0a, 0x10, 0x58, 0x10, 0x80, 0xe1, 0x44, 0x00, 0x00, 0xe8, 0x44, 0x20, 0x00, 0x00, -0x49, 0xff, 0xfe, 0x96, 0x3c, 0x4d, 0xf9, 0x8d, 0x5c, 0xf2, 0x00, 0x02, 0x4e, 0xf3, 0x00, 0x1a, -0x3e, 0x6f, 0xe1, 0x14, 0x44, 0x70, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, 0x04, 0x03, 0x00, 0x00, -0x04, 0x13, 0x00, 0x01, 0x50, 0x73, 0x80, 0x01, 0x49, 0xff, 0xfe, 0x82, 0x50, 0x63, 0x00, 0x08, -0x2f, 0xe7, 0xe6, 0x3b, 0x44, 0x20, 0x00, 0x01, 0x40, 0xf3, 0xf8, 0x06, 0x4e, 0xf3, 0xff, 0xf0, -0x2e, 0x27, 0xe6, 0x1c, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x22, 0xc0, 0x0a, 0x46, 0x1a, 0x88, 0x88, +0x49, 0xff, 0xfe, 0x52, 0x3c, 0x4d, 0xf8, 0xf5, 0x5c, 0xf2, 0x00, 0x02, 0x4e, 0xf3, 0x00, 0x1a, +0x3e, 0x6f, 0xde, 0xc0, 0x44, 0x70, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, 0x04, 0x03, 0x00, 0x00, +0x04, 0x13, 0x00, 0x01, 0x50, 0x73, 0x80, 0x01, 0x49, 0xff, 0xfe, 0x3e, 0x50, 0x63, 0x00, 0x08, +0x2f, 0xe7, 0xe3, 0xdb, 0x44, 0x20, 0x00, 0x01, 0x40, 0xf3, 0xf8, 0x06, 0x4e, 0xf3, 0xff, 0xf0, +0x2e, 0x27, 0xe3, 0xbc, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x22, 0xc0, 0x0a, 0x46, 0x1a, 0x88, 0x88, 0x58, 0x10, 0x88, 0x88, 0x44, 0x00, 0x00, 0x78, 0x48, 0x00, 0x00, 0x0a, 0x46, 0x18, 0x88, 0x88, -0x58, 0x10, 0x88, 0x88, 0x44, 0x00, 0x00, 0x78, 0x44, 0x20, 0x00, 0x01, 0x49, 0xff, 0xfe, 0x60, -0x2e, 0x27, 0xe4, 0x0f, 0x4e, 0x22, 0x00, 0x12, 0x46, 0x10, 0x24, 0x44, 0x58, 0x10, 0x84, 0x00, -0x44, 0x00, 0x06, 0x10, 0x44, 0x20, 0x00, 0x01, 0x49, 0xff, 0xfe, 0x52, 0x46, 0x10, 0x3f, 0xf0, +0x58, 0x10, 0x88, 0x88, 0x44, 0x00, 0x00, 0x78, 0x44, 0x20, 0x00, 0x01, 0x49, 0xff, 0xfe, 0x1c, +0x2e, 0x27, 0xe1, 0xb3, 0x4e, 0x22, 0x00, 0x12, 0x46, 0x10, 0x24, 0x44, 0x58, 0x10, 0x84, 0x00, +0x44, 0x00, 0x06, 0x10, 0x44, 0x20, 0x00, 0x01, 0x49, 0xff, 0xfe, 0x0e, 0x46, 0x10, 0x3f, 0xf0, 0x58, 0x10, 0x80, 0x03, 0x48, 0x00, 0x00, 0x10, 0x46, 0x10, 0x24, 0x44, 0x58, 0x10, 0x84, 0x08, -0x44, 0x00, 0x06, 0x10, 0x44, 0x20, 0x00, 0x01, 0x49, 0xff, 0xfe, 0x42, 0x46, 0x18, 0x3f, 0xf0, -0x58, 0x10, 0x80, 0x03, 0x44, 0x00, 0x00, 0x54, 0x44, 0x20, 0x00, 0x01, 0x49, 0xff, 0xfe, 0x38, -0x2e, 0x37, 0xe6, 0x20, 0x4e, 0x32, 0x00, 0x08, 0x46, 0x10, 0x0a, 0x10, 0x58, 0x10, 0x80, 0xe1, +0x44, 0x00, 0x06, 0x10, 0x44, 0x20, 0x00, 0x01, 0x49, 0xff, 0xfd, 0xfe, 0x46, 0x18, 0x3f, 0xf0, +0x58, 0x10, 0x80, 0x03, 0x44, 0x00, 0x00, 0x54, 0x44, 0x20, 0x00, 0x01, 0x49, 0xff, 0xfd, 0xf4, +0x2e, 0x37, 0xe3, 0xc0, 0x4e, 0x32, 0x00, 0x08, 0x46, 0x10, 0x0a, 0x10, 0x58, 0x10, 0x80, 0xe1, 0x48, 0x00, 0x00, 0x06, 0x46, 0x10, 0x06, 0x10, 0x58, 0x10, 0x80, 0x81, 0x44, 0x00, 0x00, 0xe8, -0x44, 0x20, 0x00, 0x01, 0x49, 0xff, 0xfe, 0x24, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xa4, 0x84, +0x44, 0x20, 0x00, 0x01, 0x49, 0xff, 0xfd, 0xe0, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x47, 0xe6, 0x02, 0x00, 0x04, 0x3f, 0x00, 0x00, 0x58, 0x5f, 0x00, 0x00, 0x58, 0x21, 0x80, 0x45, 0x14, 0x2f, 0x00, 0x00, 0x04, 0x42, 0x80, 0x01, 0x40, 0x10, 0x80, 0x13, 0x58, 0x32, 0x00, 0x45, 0x44, 0x20, 0x00, 0x0e, -0x14, 0x32, 0x80, 0x01, 0x4c, 0x11, 0x40, 0x12, 0x3e, 0x1f, 0xdb, 0xc0, 0x04, 0x40, 0x80, 0x00, -0x05, 0xe0, 0x80, 0x01, 0x3e, 0x5f, 0xdc, 0x60, 0x50, 0x10, 0x80, 0x08, 0x15, 0xe2, 0x00, 0x00, -0x4c, 0x12, 0xff, 0xf6, 0x48, 0x00, 0x00, 0x10, 0x3e, 0x1f, 0xdc, 0x60, 0x04, 0x50, 0x80, 0x00, -0x04, 0x30, 0x80, 0x01, 0x3e, 0x2f, 0xdd, 0x00, 0x50, 0x10, 0x80, 0x08, 0x14, 0x32, 0x80, 0x00, -0x4c, 0x11, 0x7f, 0xf6, 0x2e, 0x17, 0xe6, 0x20, 0x4e, 0x13, 0x00, 0x72, 0x2f, 0xe7, 0xe2, 0x61, -0x54, 0x0f, 0x00, 0x40, 0x4e, 0x03, 0x00, 0x56, 0x2e, 0x57, 0xe6, 0x44, 0x44, 0x30, 0x00, 0x01, +0x14, 0x32, 0x80, 0x01, 0x4c, 0x11, 0x40, 0x12, 0x3e, 0x1f, 0xd9, 0x6c, 0x04, 0x40, 0x80, 0x00, +0x05, 0xe0, 0x80, 0x01, 0x3e, 0x5f, 0xda, 0x0c, 0x50, 0x10, 0x80, 0x08, 0x15, 0xe2, 0x00, 0x00, +0x4c, 0x12, 0xff, 0xf6, 0x48, 0x00, 0x00, 0x10, 0x3e, 0x1f, 0xda, 0x0c, 0x04, 0x50, 0x80, 0x00, +0x04, 0x30, 0x80, 0x01, 0x3e, 0x2f, 0xda, 0xac, 0x50, 0x10, 0x80, 0x08, 0x14, 0x32, 0x80, 0x00, +0x4c, 0x11, 0x7f, 0xf6, 0x2e, 0x17, 0xe3, 0xc0, 0x4e, 0x13, 0x00, 0x72, 0x2f, 0xe7, 0xe0, 0x01, +0x54, 0x0f, 0x00, 0x40, 0x4e, 0x03, 0x00, 0x56, 0x2e, 0x57, 0xe3, 0xe4, 0x44, 0x30, 0x00, 0x01, 0x4c, 0x51, 0xc0, 0x0c, 0x46, 0x06, 0x02, 0x00, 0x58, 0x00, 0x0a, 0x08, 0x46, 0x2f, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x48, 0x00, 0x00, 0x18, 0x46, 0x06, 0x02, 0x00, 0x58, 0x00, 0x0a, 0x08, 0x05, 0xe0, 0x00, 0x00, 0x40, 0x1f, 0x10, 0x08, 0x40, 0x10, 0x90, 0x09, 0x14, 0x10, 0x00, 0x00, -0x2e, 0x27, 0xfe, 0x6c, 0x05, 0xe0, 0x00, 0x00, 0x44, 0x4f, 0x00, 0xff, 0x40, 0x21, 0x20, 0x08, -0x40, 0x1f, 0x10, 0x02, 0x40, 0x51, 0x04, 0x04, 0x14, 0x50, 0x00, 0x00, 0x2e, 0x07, 0xe6, 0x45, +0x2e, 0x27, 0xfc, 0x0c, 0x05, 0xe0, 0x00, 0x00, 0x44, 0x4f, 0x00, 0xff, 0x40, 0x21, 0x20, 0x08, +0x40, 0x1f, 0x10, 0x02, 0x40, 0x51, 0x04, 0x04, 0x14, 0x50, 0x00, 0x00, 0x2e, 0x07, 0xe3, 0xe5, 0x44, 0x40, 0x00, 0x01, 0x4c, 0x02, 0x40, 0x0c, 0x46, 0x06, 0x02, 0x01, 0x58, 0x00, 0x0a, 0x08, 0x46, 0x2f, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x48, 0x00, 0x00, 0x18, 0x46, 0x06, 0x02, 0x01, 0x58, 0x00, 0x0a, 0x08, 0x04, 0x50, 0x00, 0x00, 0x40, 0x22, 0x90, 0x08, 0x40, 0x21, 0x10, 0x09, -0x14, 0x20, 0x00, 0x00, 0x2e, 0x37, 0xfe, 0x6d, 0x04, 0x10, 0x00, 0x00, 0x45, 0xef, 0x00, 0xff, +0x14, 0x20, 0x00, 0x00, 0x2e, 0x37, 0xfc, 0x0d, 0x04, 0x10, 0x00, 0x00, 0x45, 0xef, 0x00, 0xff, 0x40, 0x21, 0xa0, 0x08, 0x40, 0x10, 0xf8, 0x02, 0x40, 0x11, 0x04, 0x04, 0x48, 0x00, 0x00, 0x14, 0x46, 0x46, 0x02, 0x00, 0x04, 0x52, 0x02, 0x82, 0x46, 0x3f, 0x00, 0x00, 0x40, 0x22, 0x8c, 0x04, 0x46, 0x06, 0x02, 0x01, 0x14, 0x22, 0x02, 0x82, 0x58, 0x00, 0x0a, 0x08, 0x05, 0xe0, 0x00, 0x00, @@ -3967,38 +3995,38 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x05, 0xe0, 0x82, 0x82, 0x46, 0x4f, 0x00, 0x00, 0x40, 0x5f, 0x10, 0x04, 0x14, 0x50, 0x82, 0x82, 0x46, 0x36, 0x02, 0x01, 0x04, 0x21, 0x82, 0x82, 0x46, 0x10, 0x10, 0x00, 0x41, 0xe1, 0x10, 0x04, 0x15, 0xe1, 0x82, 0x82, 0x58, 0x20, 0x00, 0x00, 0x58, 0x10, 0x87, 0x00, 0x44, 0x00, 0x00, 0x70, -0x49, 0xff, 0xfd, 0x56, 0x2e, 0x27, 0xe6, 0x38, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x22, 0xc0, 0x0a, -0x46, 0x18, 0x10, 0x08, 0x58, 0x10, 0x82, 0xd0, 0x44, 0x00, 0x00, 0x44, 0x49, 0xff, 0xfd, 0x48, +0x49, 0xff, 0xfd, 0x12, 0x2e, 0x27, 0xe3, 0xd8, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x22, 0xc0, 0x0a, +0x46, 0x18, 0x10, 0x08, 0x58, 0x10, 0x82, 0xd0, 0x44, 0x00, 0x00, 0x44, 0x49, 0xff, 0xfd, 0x04, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x58, 0x60, 0x80, 0x00, 0x4e, 0x02, 0x00, 0x06, 0x44, 0x50, 0x00, 0x05, -0x4c, 0x02, 0xc0, 0x0c, 0x40, 0x83, 0x14, 0x08, 0x3e, 0x0f, 0xfb, 0x0c, 0x40, 0x84, 0x00, 0x00, +0x4c, 0x02, 0xc0, 0x0c, 0x40, 0x83, 0x14, 0x08, 0x3e, 0x0f, 0xf8, 0xac, 0x40, 0x84, 0x00, 0x00, 0x44, 0x70, 0x04, 0x28, 0x48, 0x00, 0x00, 0x08, 0x44, 0x50, 0x00, 0x04, 0x4c, 0x02, 0xc0, 0x60, 0x48, 0xff, 0xff, 0xf2, 0x04, 0x14, 0x00, 0x00, 0x58, 0x03, 0x80, 0x00, 0x58, 0x23, 0x00, 0x00, -0x49, 0xff, 0xfd, 0x1e, 0x04, 0x14, 0x00, 0x20, 0x50, 0x03, 0x82, 0xa4, 0x58, 0x23, 0x00, 0x00, -0x49, 0xff, 0xfd, 0x16, 0x50, 0x73, 0x80, 0x04, 0x44, 0x50, 0x04, 0x48, 0x50, 0x84, 0x00, 0x04, -0x4c, 0x72, 0xff, 0xea, 0x4e, 0x63, 0x00, 0x22, 0x3e, 0x4f, 0xfa, 0xd0, 0x05, 0xe2, 0x00, 0xcd, +0x49, 0xff, 0xfc, 0xda, 0x04, 0x14, 0x00, 0x20, 0x50, 0x03, 0x82, 0xa4, 0x58, 0x23, 0x00, 0x00, +0x49, 0xff, 0xfc, 0xd2, 0x50, 0x73, 0x80, 0x04, 0x44, 0x50, 0x04, 0x48, 0x50, 0x84, 0x00, 0x04, +0x4c, 0x72, 0xff, 0xea, 0x4e, 0x63, 0x00, 0x22, 0x3e, 0x4f, 0xf8, 0x70, 0x05, 0xe2, 0x00, 0xcd, 0x46, 0x56, 0x02, 0x00, 0x15, 0xe2, 0x80, 0x56, 0x58, 0x32, 0x80, 0x00, 0x04, 0x22, 0x00, 0xce, 0x14, 0x21, 0x80, 0x57, 0x58, 0x11, 0x80, 0x00, 0x04, 0x02, 0x00, 0xcf, 0x14, 0x00, 0x80, 0x58, 0x58, 0x50, 0x80, 0x00, 0x05, 0xe2, 0x00, 0xd9, 0x15, 0xe2, 0x80, 0x62, 0x46, 0x16, 0x02, 0x00, 0x04, 0x02, 0x00, 0xda, 0x48, 0x00, 0x00, 0x66, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x62, 0xc0, 0x8a, -0x3e, 0x0f, 0xfa, 0xd0, 0x04, 0x30, 0x00, 0xd0, 0x46, 0x16, 0x02, 0x01, 0x14, 0x30, 0x80, 0x56, +0x3e, 0x0f, 0xf8, 0x70, 0x04, 0x30, 0x00, 0xd0, 0x46, 0x16, 0x02, 0x01, 0x14, 0x30, 0x80, 0x56, 0x59, 0xe0, 0x80, 0x00, 0x04, 0x40, 0x00, 0xd1, 0x14, 0x4f, 0x00, 0x57, 0x58, 0x50, 0x80, 0x00, 0x04, 0x20, 0x00, 0xd2, 0x14, 0x22, 0x80, 0x58, 0x04, 0x30, 0x00, 0xdb, 0x14, 0x30, 0x80, 0x62, 0x46, 0x16, 0x02, 0x01, 0x04, 0x00, 0x00, 0xdc, 0x48, 0x00, 0x00, 0x68, 0x44, 0x50, 0x00, 0x01, -0x4c, 0x02, 0xc0, 0x68, 0x40, 0x93, 0x14, 0x08, 0x3e, 0x0f, 0xfb, 0x4c, 0x40, 0x84, 0x80, 0x00, +0x4c, 0x02, 0xc0, 0x68, 0x40, 0x93, 0x14, 0x08, 0x3e, 0x0f, 0xf8, 0xec, 0x40, 0x84, 0x80, 0x00, 0x44, 0x70, 0x04, 0x48, 0x04, 0x14, 0x00, 0x00, 0x58, 0x03, 0x80, 0x00, 0x58, 0x23, 0x00, 0x00, -0x49, 0xff, 0xfc, 0xb6, 0x04, 0x14, 0x00, 0x20, 0x50, 0x03, 0x82, 0x84, 0x58, 0x23, 0x00, 0x00, -0x49, 0xff, 0xfc, 0xae, 0x50, 0x73, 0x80, 0x04, 0x44, 0x50, 0x04, 0x68, 0x50, 0x84, 0x00, 0x04, -0x4c, 0x72, 0xff, 0xea, 0x4e, 0x63, 0x00, 0x22, 0x3c, 0x2d, 0xff, 0x87, 0x46, 0x46, 0x02, 0x00, -0x14, 0x22, 0x00, 0x56, 0x58, 0x02, 0x00, 0x00, 0x3c, 0x5d, 0xff, 0x88, 0x14, 0x50, 0x00, 0x57, -0x58, 0x10, 0x00, 0x00, 0x3c, 0x3d, 0xff, 0x89, 0x14, 0x30, 0x80, 0x58, 0x58, 0x40, 0x00, 0x00, -0x3c, 0x2d, 0xff, 0x91, 0x14, 0x22, 0x00, 0x62, 0x46, 0x16, 0x02, 0x00, 0x3c, 0x0d, 0xff, 0x92, +0x49, 0xff, 0xfc, 0x72, 0x04, 0x14, 0x00, 0x20, 0x50, 0x03, 0x82, 0x84, 0x58, 0x23, 0x00, 0x00, +0x49, 0xff, 0xfc, 0x6a, 0x50, 0x73, 0x80, 0x04, 0x44, 0x50, 0x04, 0x68, 0x50, 0x84, 0x00, 0x04, +0x4c, 0x72, 0xff, 0xea, 0x4e, 0x63, 0x00, 0x22, 0x3c, 0x2d, 0xfe, 0xef, 0x46, 0x46, 0x02, 0x00, +0x14, 0x22, 0x00, 0x56, 0x58, 0x02, 0x00, 0x00, 0x3c, 0x5d, 0xfe, 0xf0, 0x14, 0x50, 0x00, 0x57, +0x58, 0x10, 0x00, 0x00, 0x3c, 0x3d, 0xfe, 0xf1, 0x14, 0x30, 0x80, 0x58, 0x58, 0x40, 0x00, 0x00, +0x3c, 0x2d, 0xfe, 0xf9, 0x14, 0x22, 0x00, 0x62, 0x46, 0x16, 0x02, 0x00, 0x3c, 0x0d, 0xfe, 0xfa, 0x58, 0x10, 0x81, 0x8c, 0x48, 0x00, 0x00, 0x24, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x62, 0xc0, 0x22, -0x3e, 0x3f, 0xfa, 0xd0, 0x04, 0x01, 0x80, 0xd6, 0x46, 0x16, 0x02, 0x01, 0x14, 0x00, 0x80, 0x56, +0x3e, 0x3f, 0xf8, 0x70, 0x04, 0x01, 0x80, 0xd6, 0x46, 0x16, 0x02, 0x01, 0x14, 0x00, 0x80, 0x56, 0x59, 0xe0, 0x80, 0x00, 0x04, 0x21, 0x80, 0xd7, 0x14, 0x2f, 0x00, 0x57, 0x58, 0x50, 0x80, 0x00, 0x04, 0x41, 0x80, 0xd8, 0x14, 0x42, 0x80, 0x58, 0x04, 0x01, 0x80, 0xdf, 0x14, 0x00, 0x80, 0x62, 0x46, 0x16, 0x02, 0x01, 0x04, 0x01, 0x80, 0xe0, 0x58, 0x10, 0x81, 0x8c, 0x14, 0x00, 0x80, 0x00, -0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x2e, 0x17, 0xe2, 0x1e, +0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x2e, 0x17, 0xdf, 0xbe, 0x54, 0x00, 0x80, 0x20, 0x4e, 0x02, 0x00, 0x62, 0x46, 0x06, 0x02, 0x00, 0x58, 0x00, 0x0d, 0x18, 0x04, 0x10, 0x00, 0x00, 0x40, 0x50, 0xa8, 0x08, 0x40, 0x12, 0xe8, 0x09, 0x54, 0x40, 0x80, 0x20, 0x40, 0x32, 0x00, 0x10, 0x4e, 0x32, 0x00, 0x0a, 0x50, 0x30, 0xff, 0xc0, 0x5e, 0xf1, 0xff, 0xf0, @@ -4012,7 +4040,7 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x04, 0x10, 0x00, 0x00, 0x40, 0x30, 0xa0, 0x09, 0x40, 0x31, 0xa0, 0x08, 0x58, 0x11, 0x80, 0x10, 0x48, 0x00, 0x00, 0x0a, 0x04, 0x30, 0x00, 0x00, 0x40, 0x51, 0xa0, 0x09, 0x40, 0x52, 0xa0, 0x08, 0x58, 0x12, 0x80, 0xf0, 0x14, 0x10, 0x00, 0x00, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, -0x51, 0xff, 0xff, 0xf4, 0x2e, 0x27, 0xe6, 0x1d, 0x14, 0x2f, 0x80, 0x01, 0x4e, 0x03, 0x00, 0x2e, +0x51, 0xff, 0xff, 0xf4, 0x2e, 0x27, 0xe3, 0xbd, 0x14, 0x2f, 0x80, 0x01, 0x4e, 0x03, 0x00, 0x2e, 0x47, 0xc6, 0x02, 0x00, 0x58, 0xae, 0x00, 0x00, 0x46, 0x96, 0x02, 0x04, 0x45, 0xe0, 0x02, 0x45, 0x46, 0x86, 0x02, 0x00, 0x46, 0x66, 0x02, 0x04, 0x46, 0x75, 0x57, 0x84, 0x46, 0x12, 0x00, 0xfc, 0x46, 0x35, 0x7c, 0x04, 0x15, 0xee, 0x00, 0x00, 0x58, 0x10, 0x80, 0x0c, 0x15, 0xe5, 0x00, 0x01, @@ -4050,1355 +4078,1289 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x46, 0x46, 0x02, 0x01, 0x46, 0x36, 0x02, 0x00, 0x46, 0x26, 0x02, 0x01, 0x58, 0x10, 0x81, 0xc0, 0x58, 0x00, 0x08, 0x00, 0x14, 0x12, 0x83, 0x40, 0x14, 0x12, 0x03, 0x40, 0x14, 0x01, 0x83, 0x41, 0x14, 0x01, 0x03, 0x41, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x2e, 0x07, 0xe2, 0x1f, 0x54, 0x10, 0x00, 0x01, -0x4e, 0x12, 0x00, 0x32, 0x54, 0x20, 0x00, 0x02, 0x4e, 0x22, 0x00, 0x2e, 0x44, 0x10, 0x00, 0x00, -0x44, 0x00, 0x00, 0x1c, 0x49, 0xff, 0xfa, 0xca, 0x46, 0x1e, 0x1f, 0xff, 0x58, 0x10, 0x8f, 0xff, -0x40, 0x60, 0x04, 0x02, 0x42, 0x13, 0x70, 0x08, 0x44, 0x00, 0x00, 0x1c, 0x44, 0x20, 0x00, 0x00, -0x49, 0xff, 0xfa, 0x9e, 0x3c, 0x3d, 0xf9, 0x8d, 0x44, 0x40, 0x00, 0x02, 0x4c, 0x32, 0x40, 0x14, -0x44, 0x10, 0x00, 0x00, 0x40, 0x02, 0x10, 0x08, 0x49, 0xff, 0xfa, 0xb0, 0x44, 0x2f, 0xff, 0x9f, -0x40, 0x00, 0x08, 0x02, 0x58, 0x10, 0x00, 0x40, 0x44, 0x20, 0x00, 0x00, 0x44, 0x00, 0x00, 0x20, -0x49, 0xff, 0xfa, 0x86, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x40, 0x00, 0x00, 0x13, 0x4e, 0x03, 0x00, 0x0c, -0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xd6, 0x30, 0x44, 0x20, 0x1f, 0x23, 0x49, 0xff, 0x83, 0x76, -0x48, 0x00, 0x00, 0x00, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x12, 0xc0, 0x0c, 0x46, 0x16, 0x02, 0x04, -0x58, 0x10, 0x84, 0x28, 0x50, 0x00, 0x7f, 0xff, 0x3e, 0x2f, 0xde, 0x6c, 0x48, 0x00, 0x00, 0x1c, -0x4e, 0x13, 0x00, 0x0c, 0x46, 0x16, 0x02, 0x04, 0x58, 0x10, 0x84, 0x28, 0x50, 0x00, 0x7f, 0xff, -0x3e, 0x2f, 0xde, 0x50, 0x48, 0x00, 0x00, 0x10, 0x50, 0x10, 0xff, 0xfc, 0x5c, 0xf0, 0x80, 0x02, -0x4e, 0xf2, 0x00, 0x16, 0x46, 0x16, 0x02, 0x04, 0x58, 0x10, 0x84, 0x28, 0x50, 0x00, 0x7f, 0xff, -0x3e, 0x2f, 0xde, 0x88, 0x39, 0xe1, 0x01, 0x01, 0x04, 0x50, 0x80, 0x00, 0x40, 0x4f, 0x40, 0x08, -0x40, 0x32, 0x80, 0x13, 0x40, 0x02, 0x0c, 0x04, 0x14, 0x00, 0x80, 0x00, 0x51, 0xff, 0x80, 0x04, -0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xf4, -0x2e, 0x77, 0xe4, 0x0e, 0x4e, 0x72, 0x00, 0x16, 0x46, 0x10, 0x24, 0x44, 0x58, 0x10, 0x84, 0x0a, -0x44, 0x00, 0x06, 0x10, 0x44, 0x20, 0x00, 0x00, 0x49, 0xff, 0xfa, 0x22, 0x46, 0x10, 0x3f, 0xf0, -0x58, 0x10, 0x80, 0x03, 0x44, 0x00, 0x00, 0x54, 0x44, 0x20, 0x00, 0x00, 0x48, 0x00, 0x00, 0x14, -0x46, 0x10, 0x24, 0x44, 0x58, 0x10, 0x84, 0x0a, 0x44, 0x00, 0x06, 0x10, 0x58, 0x23, 0x80, 0x00, -0x49, 0xff, 0xfa, 0x0e, 0x46, 0x18, 0x3f, 0xf0, 0x58, 0x10, 0x80, 0x03, 0x58, 0x23, 0x80, 0x00, -0x44, 0x00, 0x00, 0x54, 0x49, 0xff, 0xfa, 0x04, 0x2e, 0x17, 0xe4, 0x0f, 0x4e, 0x12, 0x00, 0x12, -0x46, 0x10, 0x24, 0x44, 0x58, 0x10, 0x84, 0x0a, 0x44, 0x00, 0x06, 0x10, 0x44, 0x20, 0x00, 0x01, -0x49, 0xff, 0xf9, 0xf6, 0x46, 0x10, 0x3f, 0xf0, 0x58, 0x10, 0x80, 0x03, 0x48, 0x00, 0x00, 0x10, -0x46, 0x10, 0x24, 0x44, 0x58, 0x10, 0x84, 0x0a, 0x44, 0x00, 0x06, 0x10, 0x44, 0x20, 0x00, 0x01, -0x49, 0xff, 0xf9, 0xe6, 0x46, 0x18, 0x3f, 0xf0, 0x58, 0x10, 0x80, 0x03, 0x44, 0x00, 0x00, 0x54, -0x44, 0x20, 0x00, 0x01, 0x49, 0xff, 0xf9, 0xdc, 0x46, 0x08, 0x00, 0x21, 0x58, 0x00, 0x02, 0x44, -0x04, 0x70, 0x00, 0x00, 0x44, 0x8f, 0xff, 0xcf, 0x40, 0x63, 0xa0, 0x02, 0x14, 0x60, 0x00, 0x00, -0x2e, 0x47, 0xe2, 0x59, 0x54, 0x32, 0x00, 0x20, 0x4e, 0x32, 0x00, 0x10, 0x04, 0x20, 0x00, 0x00, -0x42, 0x11, 0x00, 0x09, 0x14, 0x10, 0x00, 0x00, 0x46, 0xa8, 0x00, 0x21, 0x05, 0xc5, 0x00, 0x44, -0x42, 0x9e, 0x64, 0x09, 0x14, 0x95, 0x00, 0x44, 0x2e, 0x17, 0xe2, 0x5a, 0x54, 0x00, 0x80, 0x10, -0x4e, 0x02, 0x00, 0x12, 0x46, 0x58, 0x00, 0x21, 0x04, 0x92, 0x80, 0x91, 0x55, 0xc0, 0x80, 0x0c, -0x58, 0xa4, 0x00, 0x00, 0x40, 0x7e, 0x08, 0x08, 0x40, 0x84, 0xa8, 0x02, 0x40, 0x64, 0x1c, 0x04, -0x14, 0x62, 0x80, 0x91, 0x44, 0x10, 0x00, 0x00, 0x44, 0x00, 0x00, 0x30, 0x49, 0xff, 0xf9, 0xbe, -0x40, 0x20, 0x34, 0x08, 0x40, 0x21, 0x7c, 0x09, 0x4e, 0x22, 0x00, 0x1c, 0x44, 0x00, 0x00, 0x30, -0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xf9, 0xb2, 0x40, 0x30, 0x34, 0x08, 0x40, 0x31, 0xfc, 0x09, -0x4e, 0x32, 0x00, 0x10, 0x46, 0x58, 0x00, 0x23, 0x46, 0x60, 0x01, 0x30, 0x47, 0xe8, 0x00, 0x21, -0x58, 0x63, 0x05, 0x11, 0x44, 0x00, 0x00, 0x36, 0x14, 0x62, 0x80, 0x1b, 0x14, 0x0f, 0x00, 0xce, -0x44, 0xa0, 0x00, 0x00, 0x3e, 0x6f, 0x83, 0x48, 0x58, 0x75, 0x00, 0x00, 0x59, 0xc3, 0x00, 0x00, -0x48, 0x00, 0x03, 0x0c, 0x3c, 0x4d, 0xf9, 0x8b, 0x50, 0x94, 0x80, 0x01, 0x40, 0x12, 0x08, 0x08, -0x40, 0x34, 0x04, 0x00, 0x04, 0x11, 0x80, 0x01, 0x0c, 0x04, 0x00, 0x04, 0x40, 0x94, 0x80, 0x13, -0x4b, 0xe0, 0x18, 0x01, 0x3c, 0x0d, 0xf9, 0x8c, 0x58, 0x23, 0x80, 0x00, 0x40, 0xf4, 0x80, 0x06, -0x4e, 0xf3, 0xff, 0xea, 0x58, 0x13, 0x80, 0x00, 0x44, 0x00, 0x06, 0x00, 0x49, 0xff, 0xf9, 0x76, -0x44, 0x3f, 0xfc, 0x7f, 0x40, 0x90, 0x0c, 0x02, 0x58, 0x14, 0x82, 0x80, 0x44, 0x00, 0x06, 0x00, -0x58, 0x23, 0x80, 0x00, 0x4b, 0xe0, 0x70, 0x01, 0x46, 0x80, 0x13, 0x12, 0x3c, 0x0d, 0xf9, 0x8a, -0x58, 0x84, 0x0d, 0x00, 0x4c, 0x04, 0x40, 0x06, 0x44, 0xa0, 0x00, 0x14, 0x48, 0x00, 0x00, 0x1e, -0x46, 0x10, 0x17, 0xd7, 0x58, 0x10, 0x88, 0x40, 0x4c, 0x00, 0xc0, 0x06, 0x44, 0xa0, 0x00, 0x1b, -0x48, 0x00, 0x00, 0x14, 0x46, 0x40, 0x26, 0x25, 0x58, 0x42, 0x0a, 0x00, 0x4c, 0x02, 0x40, 0x06, -0x44, 0xa0, 0x00, 0x28, 0x48, 0x00, 0x00, 0x0a, 0x3e, 0x0f, 0xd6, 0x64, 0x3e, 0x1f, 0xde, 0xa4, -0x44, 0x20, 0x1d, 0x79, 0x49, 0xff, 0x82, 0x2a, 0x58, 0x13, 0x80, 0x00, 0x44, 0x00, 0x00, 0x58, -0x49, 0xff, 0xf9, 0x3c, 0x44, 0x9f, 0x00, 0xff, 0x40, 0x50, 0x24, 0x02, 0x40, 0x85, 0x20, 0x08, -0x44, 0x00, 0x00, 0x58, 0x58, 0x23, 0x80, 0x00, 0x40, 0x14, 0x14, 0x04, 0x4b, 0xe0, 0x18, 0x01, -0x2e, 0x07, 0xe6, 0x20, 0x4e, 0x03, 0x01, 0xe6, 0x3e, 0x8f, 0xd9, 0x20, 0x02, 0x04, 0x00, 0x00, -0x04, 0x14, 0x00, 0x01, 0x58, 0x23, 0x80, 0x00, 0x4b, 0xe0, 0x18, 0x01, 0x50, 0x84, 0x00, 0x08, -0x3e, 0x5f, 0xd9, 0x78, 0x4c, 0x82, 0xff, 0xf4, 0x4e, 0x73, 0x00, 0xea, 0x2f, 0xef, 0xe2, 0x60, -0x4f, 0xe4, 0x00, 0x1a, 0x58, 0x13, 0x80, 0x00, 0x44, 0x00, 0x00, 0x18, 0x49, 0xff, 0xf9, 0x0e, -0x2e, 0x57, 0xe2, 0x60, 0x44, 0x8f, 0x1f, 0xff, 0x40, 0x22, 0xb4, 0x08, 0x40, 0x40, 0x20, 0x02, -0x40, 0x11, 0x00, 0x13, 0x40, 0x12, 0x04, 0x04, 0x44, 0x00, 0x00, 0x18, 0x58, 0x23, 0x80, 0x00, -0x4b, 0xe0, 0x70, 0x01, 0x2e, 0x07, 0xe2, 0x1f, 0x54, 0x90, 0x00, 0x04, 0x4e, 0x92, 0x00, 0xb4, -0x3e, 0x9f, 0x83, 0x84, 0x44, 0x10, 0x00, 0x00, 0x44, 0x00, 0x00, 0xdc, 0x4b, 0xe0, 0x24, 0x01, -0x2e, 0x57, 0xe2, 0x67, 0x40, 0x00, 0x20, 0x09, 0x40, 0x00, 0x20, 0x08, 0x40, 0x10, 0x14, 0x04, -0x44, 0x20, 0x00, 0x00, 0x44, 0x00, 0x00, 0xdc, 0x4b, 0xe0, 0x18, 0x01, 0x44, 0x10, 0x00, 0x00, -0x44, 0x00, 0x00, 0xdc, 0x4b, 0xe0, 0x24, 0x01, 0x2e, 0x17, 0xe2, 0x68, 0x44, 0x3f, 0x00, 0xff, -0x40, 0x40, 0x0c, 0x02, 0x40, 0x50, 0xa0, 0x08, 0x40, 0x12, 0x14, 0x04, 0x44, 0x20, 0x00, 0x00, -0x44, 0x00, 0x00, 0xdc, 0x4b, 0xe0, 0x18, 0x01, 0x44, 0x10, 0x00, 0x00, 0x44, 0x00, 0x00, 0xdc, -0x4b, 0xe0, 0x24, 0x01, 0x2e, 0x17, 0xe2, 0x6f, 0x46, 0x2f, 0xf0, 0x0f, 0x58, 0x21, 0x0f, 0xff, -0x40, 0x30, 0xc0, 0x08, 0x40, 0x00, 0x08, 0x02, 0x40, 0x10, 0x0c, 0x04, 0x44, 0x20, 0x00, 0x00, -0x44, 0x00, 0x00, 0xdc, 0x4b, 0xe0, 0x18, 0x01, 0x44, 0x10, 0x00, 0x00, 0x44, 0x00, 0x00, 0xdc, -0x4b, 0xe0, 0x24, 0x01, 0x2e, 0x57, 0xe2, 0x70, 0x40, 0x22, 0xe0, 0x08, 0x40, 0x00, 0x20, 0x08, -0x40, 0x00, 0x20, 0x09, 0x40, 0x10, 0x08, 0x04, 0x44, 0x20, 0x00, 0x00, 0x44, 0x00, 0x00, 0xdc, -0x4b, 0xe0, 0x18, 0x01, 0x44, 0x10, 0x00, 0x00, 0x44, 0x00, 0x00, 0xe0, 0x4b, 0xe0, 0x24, 0x01, -0x2e, 0x47, 0xe2, 0x6b, 0x40, 0x30, 0x20, 0x09, 0x40, 0x31, 0xa0, 0x08, 0x40, 0x11, 0x90, 0x04, -0x44, 0x20, 0x00, 0x00, 0x44, 0x00, 0x00, 0xe0, 0x4b, 0xe0, 0x18, 0x01, 0x44, 0x10, 0x00, 0x00, -0x44, 0x00, 0x00, 0xe0, 0x4b, 0xe0, 0x24, 0x01, 0x2e, 0x27, 0xe2, 0x6c, 0x44, 0x5f, 0x00, 0xff, -0x40, 0x31, 0x20, 0x08, 0x40, 0x00, 0x14, 0x02, 0x40, 0x10, 0x0c, 0x04, 0x44, 0x20, 0x00, 0x00, -0x44, 0x00, 0x00, 0xe0, 0x4b, 0xe0, 0x18, 0x01, 0x44, 0x10, 0x00, 0x00, 0x44, 0x00, 0x00, 0xe0, -0x4b, 0xe0, 0x24, 0x01, 0x2e, 0x47, 0xe2, 0x73, 0x46, 0x1f, 0xf0, 0x0f, 0x58, 0x10, 0x8f, 0xff, -0x40, 0x22, 0x40, 0x08, 0x40, 0x50, 0x04, 0x02, 0x40, 0x12, 0x88, 0x04, 0x44, 0x00, 0x00, 0xe0, -0x44, 0x20, 0x00, 0x00, 0x4b, 0xe0, 0x18, 0x01, 0x44, 0x10, 0x00, 0x00, 0x44, 0x00, 0x00, 0xe0, -0x4b, 0xe0, 0x24, 0x01, 0x2e, 0x17, 0xe2, 0x74, 0x40, 0x40, 0x20, 0x08, 0x40, 0x42, 0x20, 0x09, -0x40, 0x90, 0xe0, 0x08, 0x40, 0x12, 0x24, 0x04, 0x44, 0x00, 0x00, 0xe0, 0x44, 0x20, 0x00, 0x00, -0x48, 0x00, 0x00, 0xec, 0x46, 0x17, 0xf1, 0x71, 0x58, 0x10, 0x8d, 0x11, 0x58, 0x24, 0x80, 0x00, -0x44, 0x00, 0x00, 0xdc, 0x4b, 0xe0, 0x18, 0x01, 0x46, 0x13, 0xb1, 0x17, 0x58, 0x10, 0x8f, 0x15, -0x58, 0x24, 0x80, 0x00, 0x44, 0x00, 0x00, 0xe0, 0x48, 0x00, 0x00, 0xd8, 0x44, 0x50, 0x00, 0x01, -0x4c, 0x72, 0xc0, 0xf8, 0x2e, 0x9f, 0xe2, 0x60, 0x4e, 0x94, 0x00, 0x1a, 0x58, 0x13, 0x80, 0x00, -0x44, 0x00, 0x00, 0x18, 0x49, 0xff, 0xf8, 0x22, 0x2e, 0x37, 0xe2, 0x60, 0x44, 0x5f, 0x1f, 0xff, -0x40, 0x11, 0xb4, 0x08, 0x40, 0x40, 0x14, 0x02, 0x40, 0x80, 0x80, 0x13, 0x40, 0x12, 0x20, 0x04, -0x44, 0x00, 0x00, 0x18, 0x58, 0x23, 0x80, 0x00, 0x4b, 0xe0, 0x70, 0x01, 0x2e, 0x27, 0xe2, 0x1f, -0x54, 0x01, 0x00, 0x04, 0x4e, 0x02, 0x00, 0xb6, 0x3e, 0x9f, 0x83, 0x84, 0x44, 0x10, 0x00, 0x01, -0x44, 0x00, 0x00, 0xdc, 0x4b, 0xe0, 0x24, 0x01, 0x2e, 0x57, 0xe2, 0x69, 0x40, 0x00, 0x20, 0x09, -0x40, 0x00, 0x20, 0x08, 0x40, 0x10, 0x14, 0x04, 0x44, 0x20, 0x00, 0x01, 0x44, 0x00, 0x00, 0xdc, -0x4b, 0xe0, 0x18, 0x01, 0x44, 0x10, 0x00, 0x01, 0x44, 0x00, 0x00, 0xdc, 0x4b, 0xe0, 0x24, 0x01, -0x2e, 0x17, 0xe2, 0x6a, 0x44, 0x3f, 0x00, 0xff, 0x40, 0x20, 0x0c, 0x02, 0x40, 0x40, 0xa0, 0x08, -0x40, 0x11, 0x10, 0x04, 0x44, 0x00, 0x00, 0xdc, 0x44, 0x20, 0x00, 0x01, 0x4b, 0xe0, 0x18, 0x01, -0x44, 0x10, 0x00, 0x01, 0x44, 0x00, 0x00, 0xdc, 0x4b, 0xe0, 0x24, 0x01, 0x2e, 0x17, 0xe2, 0x71, -0x46, 0x5f, 0xf0, 0x0f, 0x58, 0x52, 0x8f, 0xff, 0x40, 0x00, 0x14, 0x02, 0x40, 0x20, 0xc0, 0x08, -0x40, 0x10, 0x08, 0x04, 0x44, 0x20, 0x00, 0x01, 0x44, 0x00, 0x00, 0xdc, 0x4b, 0xe0, 0x18, 0x01, -0x44, 0x10, 0x00, 0x01, 0x44, 0x00, 0x00, 0xdc, 0x4b, 0xe0, 0x24, 0x01, 0x2e, 0x47, 0xe2, 0x72, -0x40, 0x50, 0x20, 0x08, 0x40, 0x52, 0xa0, 0x09, 0x40, 0x12, 0x60, 0x08, 0x40, 0x12, 0x84, 0x04, -0x44, 0x20, 0x00, 0x01, 0x44, 0x00, 0x00, 0xdc, 0x4b, 0xe0, 0x18, 0x01, 0x44, 0x10, 0x00, 0x01, -0x44, 0x00, 0x00, 0xe0, 0x4b, 0xe0, 0x24, 0x01, 0x2e, 0x47, 0xe2, 0x6d, 0x40, 0x00, 0x20, 0x09, -0x40, 0x00, 0x20, 0x08, 0x40, 0x10, 0x10, 0x04, 0x44, 0x20, 0x00, 0x01, 0x44, 0x00, 0x00, 0xe0, -0x4b, 0xe0, 0x18, 0x01, 0x44, 0x10, 0x00, 0x01, 0x44, 0x00, 0x00, 0xe0, 0x4b, 0xe0, 0x24, 0x01, -0x2e, 0x57, 0xe2, 0x6e, 0x44, 0x3f, 0x00, 0xff, 0x40, 0x00, 0x0c, 0x02, 0x40, 0x12, 0xa0, 0x08, -0x40, 0x10, 0x04, 0x04, 0x44, 0x20, 0x00, 0x01, 0x44, 0x00, 0x00, 0xe0, 0x4b, 0xe0, 0x18, 0x01, -0x44, 0x10, 0x00, 0x01, 0x44, 0x00, 0x00, 0xe0, 0x4b, 0xe0, 0x24, 0x01, 0x2e, 0x47, 0xe2, 0x75, -0x46, 0x2f, 0xf0, 0x0f, 0x58, 0x21, 0x0f, 0xff, 0x40, 0x50, 0x08, 0x02, 0x40, 0x32, 0x40, 0x08, -0x40, 0x12, 0x8c, 0x04, 0x44, 0x20, 0x00, 0x01, 0x44, 0x00, 0x00, 0xe0, 0x4b, 0xe0, 0x18, 0x01, -0x44, 0x10, 0x00, 0x01, 0x44, 0x00, 0x00, 0xe0, 0x4b, 0xe0, 0x24, 0x01, 0x2e, 0x47, 0xe2, 0x76, -0x40, 0x80, 0x20, 0x08, 0x40, 0x84, 0x20, 0x09, 0x40, 0x92, 0x60, 0x08, 0x40, 0x14, 0x24, 0x04, -0x44, 0x00, 0x00, 0xe0, 0x44, 0x20, 0x00, 0x01, 0x4b, 0xe0, 0x18, 0x01, 0x48, 0x00, 0x00, 0x22, -0x46, 0x13, 0xf1, 0x71, 0x58, 0x10, 0x8d, 0x11, 0x44, 0x00, 0x00, 0xdc, 0x44, 0x20, 0x00, 0x01, -0x4b, 0xe0, 0x18, 0x01, 0x46, 0x13, 0xb1, 0x17, 0x58, 0x10, 0x8f, 0x15, 0x48, 0xff, 0xff, 0xea, -0x3e, 0x8f, 0xd9, 0x78, 0x02, 0x04, 0x00, 0x00, 0x04, 0x14, 0x00, 0x01, 0x58, 0x23, 0x80, 0x00, -0x50, 0x84, 0x00, 0x08, 0x3e, 0x9f, 0xd9, 0xe0, 0x4b, 0xe0, 0x18, 0x01, 0x4c, 0x84, 0xff, 0xf4, -0x2e, 0x87, 0xe2, 0x1f, 0x55, 0xe4, 0x00, 0x08, 0x4f, 0xe2, 0x00, 0x7c, 0x2f, 0xe7, 0xe2, 0x66, -0x3e, 0x8f, 0x83, 0x84, 0x15, 0xef, 0x80, 0x01, 0x58, 0x13, 0x80, 0x00, 0x44, 0x00, 0x00, 0x00, -0x4b, 0xe0, 0x20, 0x01, 0x04, 0x4f, 0x80, 0x01, 0x46, 0x1f, 0xfc, 0x3f, 0x54, 0x92, 0x00, 0x0f, -0x58, 0x10, 0x8f, 0xff, 0x40, 0x50, 0x04, 0x02, 0x40, 0x34, 0xc8, 0x08, 0x40, 0x12, 0x8c, 0x04, -0x58, 0x23, 0x80, 0x00, 0x44, 0x00, 0x00, 0x00, 0x4b, 0xe0, 0x18, 0x01, 0x58, 0x13, 0x80, 0x00, -0x44, 0x00, 0x06, 0x0c, 0x4b, 0xe0, 0x20, 0x01, 0x44, 0x2f, 0xf0, 0xff, 0x40, 0x44, 0xa0, 0x08, -0x40, 0x00, 0x08, 0x02, 0x40, 0x10, 0x10, 0x04, 0x58, 0x23, 0x80, 0x00, 0x44, 0x00, 0x06, 0x0c, -0x4b, 0xe0, 0x18, 0x01, 0x58, 0x13, 0x80, 0x00, 0x44, 0x00, 0x06, 0x08, 0x4b, 0xe0, 0x20, 0x01, -0x46, 0x1f, 0x0f, 0xff, 0x58, 0x10, 0x8f, 0xff, 0x40, 0x34, 0xe0, 0x08, 0x40, 0x50, 0x04, 0x02, -0x40, 0x12, 0x8c, 0x04, 0x58, 0x23, 0x80, 0x00, 0x44, 0x00, 0x06, 0x08, 0x4b, 0xe0, 0x18, 0x01, -0x04, 0x2f, 0x80, 0x01, 0x58, 0x13, 0x80, 0x00, 0x44, 0x00, 0x00, 0x1c, 0x40, 0x91, 0x10, 0x09, -0x4b, 0xe0, 0x20, 0x01, 0x46, 0x4f, 0xf0, 0xff, 0x58, 0x42, 0x0f, 0xff, 0x40, 0x00, 0x10, 0x02, -0x40, 0x54, 0xd0, 0x08, 0x40, 0x10, 0x14, 0x04, 0x58, 0x23, 0x80, 0x00, 0x44, 0x00, 0x00, 0x1c, -0x4b, 0xe0, 0x18, 0x01, 0x58, 0x13, 0x80, 0x00, 0x44, 0x00, 0x00, 0x1c, 0x4b, 0xe0, 0x20, 0x01, -0x46, 0x1e, 0x1f, 0xff, 0x58, 0x10, 0x8f, 0xff, 0x40, 0x20, 0x04, 0x02, 0x40, 0x34, 0xe4, 0x08, -0x40, 0x11, 0x0c, 0x04, 0x44, 0x00, 0x00, 0x1c, 0x58, 0x23, 0x80, 0x00, 0x4b, 0xe0, 0x18, 0x01, -0x4e, 0x73, 0x00, 0x14, 0x3e, 0x8f, 0xd9, 0xe0, 0x02, 0x04, 0x00, 0x00, 0x04, 0x14, 0x00, 0x01, -0x44, 0x20, 0x00, 0x00, 0x50, 0x84, 0x00, 0x08, 0x3e, 0x9f, 0xda, 0x50, 0x4b, 0xe0, 0x18, 0x01, -0x4c, 0x84, 0xff, 0xf4, 0x48, 0x00, 0x00, 0x16, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x72, 0xc0, 0x12, -0x3e, 0x8f, 0xda, 0x50, 0x02, 0x04, 0x00, 0x00, 0x04, 0x14, 0x00, 0x01, 0x44, 0x20, 0x00, 0x01, -0x4b, 0xe0, 0x18, 0x01, 0x50, 0x84, 0x00, 0x08, 0x3e, 0x5f, 0xda, 0xc0, 0x4c, 0x82, 0xff, 0xf4, -0x50, 0x73, 0x80, 0x01, 0x40, 0x73, 0x80, 0x13, 0x3c, 0x2d, 0xf9, 0x8d, 0x40, 0xf3, 0x88, 0x06, -0x4e, 0xf2, 0x00, 0x08, 0x44, 0x90, 0x00, 0x00, 0x3e, 0x8f, 0xd8, 0xb0, 0x48, 0xff, 0xfc, 0xfc, -0x2e, 0x17, 0xe6, 0x1c, 0x50, 0x60, 0xff, 0xff, 0x54, 0xa3, 0x00, 0xff, 0x5c, 0xf5, 0x00, 0x04, -0x4e, 0xf3, 0x00, 0x06, 0x3e, 0x0f, 0xd6, 0x78, 0x49, 0xff, 0x7f, 0x58, 0x3e, 0x7f, 0xdd, 0x00, -0x44, 0x60, 0x00, 0x00, 0x44, 0x90, 0x00, 0x06, 0x2e, 0x17, 0xe6, 0x1c, 0x3e, 0x3f, 0xdd, 0x00, -0x42, 0x13, 0x24, 0x73, 0x04, 0x03, 0x80, 0x00, 0x50, 0x50, 0xff, 0xff, 0x41, 0xe2, 0x88, 0x08, -0x40, 0x4f, 0x0c, 0x00, 0x04, 0x23, 0x80, 0x05, 0x04, 0x12, 0x00, 0x01, 0x50, 0x63, 0x00, 0x01, -0x49, 0xff, 0xf6, 0x36, 0x44, 0x50, 0x00, 0x0e, 0x50, 0x73, 0x80, 0x18, 0x4c, 0x62, 0xff, 0xe6, -0x2e, 0x0f, 0xe2, 0x1f, 0x4e, 0x04, 0x00, 0x1a, 0x44, 0x10, 0x00, 0x00, 0x44, 0x00, 0x06, 0x00, -0x49, 0xff, 0xf6, 0x44, 0x2e, 0x57, 0xe2, 0x1f, 0x44, 0x1f, 0xe3, 0xff, 0x54, 0x32, 0x80, 0x70, -0x40, 0x40, 0x04, 0x02, 0x40, 0x21, 0x98, 0x08, 0x40, 0x12, 0x08, 0x04, 0x44, 0x00, 0x06, 0x00, -0x44, 0x20, 0x00, 0x00, 0x49, 0xff, 0xf6, 0x14, 0x49, 0xff, 0xfb, 0x54, 0x51, 0xff, 0x80, 0x0c, -0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, -0x2e, 0x07, 0xe6, 0x3f, 0x4e, 0x03, 0x00, 0x0e, 0x46, 0x46, 0x01, 0x20, 0x04, 0x52, 0x00, 0x20, -0x42, 0x22, 0xa0, 0x09, 0x14, 0x22, 0x00, 0x20, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x92, 0x1c, -0x2f, 0xe7, 0xe6, 0x40, 0x4f, 0xe3, 0x00, 0x0e, 0x46, 0x16, 0x01, 0x20, 0x04, 0x20, 0x80, 0x20, -0x42, 0x41, 0x24, 0x09, 0x14, 0x40, 0x80, 0x20, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x92, 0x0c, -0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, -0x51, 0xff, 0xff, 0xfc, 0x49, 0xff, 0xff, 0xd2, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x46, 0x16, 0x01, 0x20, -0x04, 0x30, 0x80, 0x20, 0x44, 0x00, 0x00, 0x01, 0x58, 0x21, 0x83, 0x00, 0x14, 0x20, 0x80, 0x20, -0x49, 0xff, 0x91, 0xea, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x46, 0x06, 0x01, 0x20, 0x04, 0x10, 0x00, 0x20, -0x54, 0x20, 0x81, 0x00, 0x4e, 0x22, 0x00, 0x04, 0x44, 0x20, 0x00, 0x01, 0x54, 0x10, 0x82, 0x00, -0x3e, 0x27, 0xe6, 0x3f, 0x4e, 0x12, 0x00, 0x04, 0x44, 0x10, 0x00, 0x01, 0x3e, 0x17, 0xe6, 0x40, +0x3a, 0x6f, 0x98, 0xbc, 0x2e, 0x07, 0xdf, 0xbf, 0x54, 0x10, 0x00, 0x01, 0x4e, 0x12, 0x00, 0x22, +0x54, 0x20, 0x00, 0x02, 0x4e, 0x22, 0x00, 0x1e, 0x46, 0x21, 0xe0, 0x00, 0x44, 0x30, 0x00, 0x19, +0x44, 0x40, 0x00, 0x08, 0x50, 0x01, 0x80, 0x03, 0x44, 0x10, 0x00, 0x00, 0x49, 0xff, 0xfa, 0xa8, +0x3c, 0x4d, 0xf8, 0xf5, 0x44, 0x30, 0x00, 0x02, 0x4c, 0x41, 0xc0, 0x0c, 0x40, 0x01, 0x90, 0x08, +0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x60, 0x44, 0x30, 0x00, 0x05, 0x49, 0xff, 0xfa, 0x98, +0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, +0x40, 0x00, 0x00, 0x13, 0x4e, 0x03, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xd3, 0xdc, +0x44, 0x20, 0x1f, 0x93, 0x49, 0xff, 0x82, 0xaa, 0x48, 0x00, 0x00, 0x00, 0x44, 0x50, 0x00, 0x01, +0x4c, 0x12, 0xc0, 0x0c, 0x46, 0x16, 0x02, 0x04, 0x58, 0x10, 0x84, 0x28, 0x50, 0x00, 0x7f, 0xff, +0x3e, 0x2f, 0xdc, 0x18, 0x48, 0x00, 0x00, 0x1c, 0x4e, 0x13, 0x00, 0x0c, 0x46, 0x16, 0x02, 0x04, +0x58, 0x10, 0x84, 0x28, 0x50, 0x00, 0x7f, 0xff, 0x3e, 0x2f, 0xdb, 0xfc, 0x48, 0x00, 0x00, 0x10, +0x50, 0x10, 0xff, 0xfc, 0x5c, 0xf0, 0x80, 0x02, 0x4e, 0xf2, 0x00, 0x16, 0x46, 0x16, 0x02, 0x04, +0x58, 0x10, 0x84, 0x28, 0x50, 0x00, 0x7f, 0xff, 0x3e, 0x2f, 0xdc, 0x34, 0x39, 0xe1, 0x01, 0x01, +0x04, 0x50, 0x80, 0x00, 0x40, 0x4f, 0x40, 0x08, 0x40, 0x32, 0x80, 0x13, 0x40, 0x02, 0x0c, 0x04, +0x14, 0x00, 0x80, 0x00, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x2e, 0x77, 0xe1, 0xb2, 0x4e, 0x72, 0x00, 0x16, +0x46, 0x10, 0x24, 0x44, 0x58, 0x10, 0x84, 0x0a, 0x44, 0x00, 0x06, 0x10, 0x44, 0x20, 0x00, 0x00, +0x49, 0xff, 0xf9, 0xf2, 0x46, 0x10, 0x3f, 0xf0, 0x58, 0x10, 0x80, 0x03, 0x44, 0x00, 0x00, 0x54, +0x44, 0x20, 0x00, 0x00, 0x48, 0x00, 0x00, 0x14, 0x46, 0x10, 0x24, 0x44, 0x58, 0x10, 0x84, 0x0a, +0x44, 0x00, 0x06, 0x10, 0x58, 0x23, 0x80, 0x00, 0x49, 0xff, 0xf9, 0xde, 0x46, 0x18, 0x3f, 0xf0, +0x58, 0x10, 0x80, 0x03, 0x58, 0x23, 0x80, 0x00, 0x44, 0x00, 0x00, 0x54, 0x49, 0xff, 0xf9, 0xd4, +0x2e, 0x17, 0xe1, 0xb3, 0x4e, 0x12, 0x00, 0x12, 0x46, 0x10, 0x24, 0x44, 0x58, 0x10, 0x84, 0x0a, +0x44, 0x00, 0x06, 0x10, 0x44, 0x20, 0x00, 0x01, 0x49, 0xff, 0xf9, 0xc6, 0x46, 0x10, 0x3f, 0xf0, +0x58, 0x10, 0x80, 0x03, 0x48, 0x00, 0x00, 0x10, 0x46, 0x10, 0x24, 0x44, 0x58, 0x10, 0x84, 0x0a, +0x44, 0x00, 0x06, 0x10, 0x44, 0x20, 0x00, 0x01, 0x49, 0xff, 0xf9, 0xb6, 0x46, 0x18, 0x3f, 0xf0, +0x58, 0x10, 0x80, 0x03, 0x44, 0x00, 0x00, 0x54, 0x44, 0x20, 0x00, 0x01, 0x49, 0xff, 0xf9, 0xac, +0x46, 0x08, 0x00, 0x21, 0x58, 0x00, 0x02, 0x44, 0x04, 0x70, 0x00, 0x00, 0x44, 0x8f, 0xff, 0xcf, +0x40, 0x63, 0xa0, 0x02, 0x14, 0x60, 0x00, 0x00, 0x2e, 0x47, 0xdf, 0xf9, 0x54, 0x32, 0x00, 0x20, +0x4e, 0x32, 0x00, 0x10, 0x04, 0x20, 0x00, 0x00, 0x42, 0x11, 0x00, 0x09, 0x14, 0x10, 0x00, 0x00, +0x46, 0xa8, 0x00, 0x21, 0x05, 0xc5, 0x00, 0x44, 0x42, 0x9e, 0x64, 0x09, 0x14, 0x95, 0x00, 0x44, +0x2e, 0x17, 0xdf, 0xfa, 0x54, 0x00, 0x80, 0x10, 0x4e, 0x02, 0x00, 0x12, 0x46, 0x58, 0x00, 0x21, +0x04, 0x92, 0x80, 0x91, 0x55, 0xc0, 0x80, 0x0c, 0x58, 0xa4, 0x00, 0x00, 0x40, 0x7e, 0x08, 0x08, +0x40, 0x84, 0xa8, 0x02, 0x40, 0x64, 0x1c, 0x04, 0x14, 0x62, 0x80, 0x91, 0x44, 0x10, 0x00, 0x00, +0x44, 0x00, 0x00, 0x30, 0x49, 0xff, 0xf9, 0x8e, 0x40, 0x20, 0x34, 0x08, 0x40, 0x21, 0x7c, 0x09, +0x4e, 0x22, 0x00, 0x1c, 0x44, 0x00, 0x00, 0x30, 0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xf9, 0x82, +0x40, 0x30, 0x34, 0x08, 0x40, 0x31, 0xfc, 0x09, 0x4e, 0x32, 0x00, 0x10, 0x46, 0x58, 0x00, 0x23, +0x46, 0x60, 0x01, 0x30, 0x47, 0xe8, 0x00, 0x21, 0x58, 0x63, 0x05, 0x11, 0x44, 0x00, 0x00, 0x36, +0x14, 0x62, 0x80, 0x1b, 0x14, 0x0f, 0x00, 0xce, 0x45, 0xc0, 0x00, 0x00, 0x58, 0x9e, 0x00, 0x00, +0x3e, 0xaf, 0x84, 0x80, 0x48, 0x00, 0x02, 0x20, 0x3c, 0x4d, 0xf8, 0xf3, 0x50, 0x73, 0x80, 0x01, +0x40, 0x12, 0x08, 0x08, 0x40, 0x83, 0x04, 0x00, 0x04, 0x14, 0x00, 0x01, 0x0c, 0x03, 0x00, 0x04, +0x40, 0x73, 0x80, 0x13, 0x4b, 0xe0, 0x28, 0x01, 0x3d, 0xed, 0xf8, 0xf4, 0x58, 0x24, 0x80, 0x00, +0x40, 0xf3, 0xf8, 0x06, 0x4e, 0xf3, 0xff, 0xea, 0x44, 0x00, 0x06, 0x00, 0x58, 0x14, 0x80, 0x00, +0x44, 0x20, 0x03, 0x80, 0x44, 0x30, 0x00, 0x07, 0x44, 0x40, 0x00, 0x05, 0x49, 0xff, 0xf9, 0x68, +0x46, 0x50, 0x13, 0x12, 0x3c, 0x0d, 0xf8, 0xf2, 0x58, 0x52, 0x8d, 0x00, 0x4c, 0x02, 0xc0, 0x06, +0x45, 0xc0, 0x00, 0x14, 0x48, 0x00, 0x00, 0x1e, 0x46, 0x60, 0x17, 0xd7, 0x58, 0x53, 0x08, 0x40, +0x4c, 0x02, 0xc0, 0x06, 0x45, 0xc0, 0x00, 0x1b, 0x48, 0x00, 0x00, 0x14, 0x46, 0x70, 0x26, 0x25, +0x58, 0x53, 0x8a, 0x00, 0x4c, 0x02, 0xc0, 0x06, 0x45, 0xc0, 0x00, 0x28, 0x48, 0x00, 0x00, 0x0a, +0x3e, 0x0f, 0xd4, 0x10, 0x3e, 0x1f, 0xdc, 0x50, 0x44, 0x20, 0x1d, 0xe9, 0x49, 0xff, 0x81, 0x66, +0x58, 0x14, 0x80, 0x00, 0x44, 0x00, 0x00, 0x58, 0x44, 0x20, 0xff, 0x00, 0x44, 0x30, 0x00, 0x08, +0x58, 0x4e, 0x00, 0x00, 0x49, 0xff, 0xf9, 0x34, 0x2e, 0x87, 0xe3, 0xc0, 0x4e, 0x83, 0x01, 0x3e, +0x3e, 0x6f, 0xd6, 0xcc, 0x02, 0x03, 0x00, 0x00, 0x04, 0x13, 0x00, 0x01, 0x58, 0x24, 0x80, 0x00, +0x4b, 0xe0, 0x28, 0x01, 0x50, 0x63, 0x00, 0x08, 0x3e, 0x5f, 0xd7, 0x24, 0x4c, 0x62, 0xff, 0xf4, +0x4e, 0x93, 0x00, 0x94, 0x2e, 0x07, 0xe0, 0x00, 0x40, 0x30, 0x00, 0x10, 0x4e, 0x34, 0x00, 0x0e, +0x54, 0x40, 0x00, 0x07, 0x58, 0x14, 0x80, 0x00, 0x44, 0x00, 0x00, 0x18, 0x44, 0x20, 0xe0, 0x00, +0x44, 0x30, 0x00, 0x0d, 0x49, 0xff, 0xf9, 0x0c, 0x3e, 0x7f, 0xdf, 0xbc, 0x00, 0x23, 0x80, 0x03, +0x54, 0x61, 0x00, 0x04, 0x4e, 0x62, 0x00, 0x66, 0x44, 0x10, 0x00, 0x00, 0x00, 0x43, 0x80, 0x4b, +0x3e, 0x6f, 0x85, 0x08, 0x58, 0x30, 0x80, 0x00, 0x44, 0x00, 0x00, 0xdc, 0x44, 0x20, 0x00, 0xff, +0x4b, 0xe0, 0x18, 0x01, 0x00, 0x43, 0x80, 0x4c, 0x44, 0x00, 0x00, 0xdc, 0x44, 0x10, 0x00, 0x00, +0x44, 0x20, 0xff, 0x00, 0x44, 0x30, 0x00, 0x08, 0x4b, 0xe0, 0x18, 0x01, 0x00, 0x43, 0x80, 0x53, +0x46, 0x20, 0x0f, 0xf0, 0x44, 0x00, 0x00, 0xdc, 0x44, 0x10, 0x00, 0x00, 0x44, 0x30, 0x00, 0x10, +0x4b, 0xe0, 0x18, 0x01, 0x00, 0x43, 0x80, 0x54, 0x46, 0x2f, 0xf0, 0x00, 0x44, 0x00, 0x00, 0xdc, +0x44, 0x10, 0x00, 0x00, 0x44, 0x30, 0x00, 0x18, 0x4b, 0xe0, 0x18, 0x01, 0x44, 0x10, 0x00, 0x00, +0x00, 0x43, 0x80, 0x4f, 0x58, 0x30, 0x80, 0x00, 0x44, 0x00, 0x00, 0xe0, 0x44, 0x20, 0x00, 0xff, +0x4b, 0xe0, 0x18, 0x01, 0x00, 0x43, 0x80, 0x50, 0x44, 0x00, 0x00, 0xe0, 0x44, 0x10, 0x00, 0x00, +0x44, 0x20, 0xff, 0x00, 0x44, 0x30, 0x00, 0x08, 0x4b, 0xe0, 0x18, 0x01, 0x00, 0x43, 0x80, 0x57, +0x46, 0x20, 0x0f, 0xf0, 0x44, 0x00, 0x00, 0xe0, 0x44, 0x10, 0x00, 0x00, 0x44, 0x30, 0x00, 0x10, +0x4b, 0xe0, 0x18, 0x01, 0x00, 0x43, 0x80, 0x58, 0x46, 0x2f, 0xf0, 0x00, 0x44, 0x00, 0x00, 0xe0, +0x44, 0x10, 0x00, 0x00, 0x44, 0x30, 0x00, 0x18, 0x4b, 0xe0, 0x18, 0x01, 0x48, 0x00, 0x00, 0xbe, +0x46, 0x17, 0xf1, 0x71, 0x58, 0x10, 0x8d, 0x11, 0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x00, 0xdc, +0x4b, 0xe0, 0x28, 0x01, 0x46, 0x13, 0xb1, 0x17, 0x58, 0x10, 0x8f, 0x15, 0x58, 0x23, 0x00, 0x00, +0x44, 0x00, 0x00, 0xe0, 0x48, 0x00, 0x00, 0x96, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x92, 0xc0, 0xa6, +0x2e, 0x07, 0xe0, 0x00, 0x40, 0x70, 0x00, 0x10, 0x4e, 0x74, 0x00, 0x0e, 0x54, 0x40, 0x00, 0x07, +0x58, 0x14, 0x80, 0x00, 0x44, 0x00, 0x00, 0x18, 0x44, 0x20, 0xe0, 0x00, 0x44, 0x30, 0x00, 0x0d, +0x49, 0xff, 0xf8, 0x76, 0x3e, 0x6f, 0xdf, 0xbc, 0x00, 0x13, 0x00, 0x03, 0x54, 0x80, 0x80, 0x04, +0x4e, 0x82, 0x00, 0x66, 0x00, 0x43, 0x00, 0x4d, 0x3e, 0x7f, 0x85, 0x08, 0x44, 0x00, 0x00, 0xdc, +0x44, 0x10, 0x00, 0x01, 0x44, 0x20, 0x00, 0xff, 0x44, 0x30, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, +0x00, 0x43, 0x00, 0x4e, 0x44, 0x00, 0x00, 0xdc, 0x44, 0x10, 0x00, 0x01, 0x44, 0x20, 0xff, 0x00, +0x44, 0x30, 0x00, 0x08, 0x4b, 0xe0, 0x1c, 0x01, 0x00, 0x43, 0x00, 0x55, 0x46, 0x20, 0x0f, 0xf0, +0x44, 0x00, 0x00, 0xdc, 0x44, 0x10, 0x00, 0x01, 0x40, 0x30, 0x90, 0x08, 0x4b, 0xe0, 0x1c, 0x01, +0x00, 0x43, 0x00, 0x56, 0x46, 0x2f, 0xf0, 0x00, 0x44, 0x00, 0x00, 0xdc, 0x44, 0x10, 0x00, 0x01, +0x44, 0x30, 0x00, 0x18, 0x4b, 0xe0, 0x1c, 0x01, 0x00, 0x43, 0x00, 0x51, 0x44, 0x00, 0x00, 0xe0, +0x44, 0x10, 0x00, 0x01, 0x44, 0x20, 0x00, 0xff, 0x44, 0x30, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, +0x00, 0x43, 0x00, 0x52, 0x44, 0x00, 0x00, 0xe0, 0x44, 0x10, 0x00, 0x01, 0x44, 0x20, 0xff, 0x00, +0x44, 0x30, 0x00, 0x08, 0x4b, 0xe0, 0x1c, 0x01, 0x00, 0x43, 0x00, 0x59, 0x46, 0x20, 0x0f, 0xf0, +0x44, 0x00, 0x00, 0xe0, 0x44, 0x10, 0x00, 0x01, 0x40, 0x30, 0x90, 0x08, 0x4b, 0xe0, 0x1c, 0x01, +0x00, 0x43, 0x00, 0x5a, 0x46, 0x2f, 0xf0, 0x00, 0x44, 0x00, 0x00, 0xe0, 0x44, 0x10, 0x00, 0x01, +0x44, 0x30, 0x00, 0x18, 0x4b, 0xe0, 0x1c, 0x01, 0x48, 0x00, 0x00, 0x28, 0x46, 0x13, 0xf1, 0x71, +0x58, 0x10, 0x8d, 0x11, 0x44, 0x00, 0x00, 0xdc, 0x44, 0x20, 0x00, 0x01, 0x4b, 0xe0, 0x28, 0x01, +0x46, 0x13, 0xb1, 0x17, 0x58, 0x10, 0x8f, 0x15, 0x44, 0x00, 0x00, 0xe0, 0x44, 0x20, 0x00, 0x01, +0x4b, 0xe0, 0x28, 0x01, 0x48, 0x00, 0x00, 0x12, 0x3e, 0x6f, 0xd7, 0x24, 0x02, 0x03, 0x00, 0x00, +0x04, 0x13, 0x00, 0x01, 0x58, 0x24, 0x80, 0x00, 0x4b, 0xe0, 0x28, 0x01, 0x50, 0x63, 0x00, 0x08, +0x3e, 0x5f, 0xd7, 0x8c, 0x4c, 0x62, 0xff, 0xf4, 0x2f, 0xe7, 0xdf, 0xbf, 0x54, 0x3f, 0x00, 0x08, +0x4e, 0x32, 0x00, 0x46, 0x2e, 0x67, 0xe0, 0x06, 0x46, 0x20, 0x03, 0xc0, 0x54, 0x83, 0x00, 0x0f, +0x3e, 0x7f, 0x85, 0x08, 0x44, 0x00, 0x00, 0x00, 0x58, 0x14, 0x80, 0x00, 0x44, 0x30, 0x00, 0x12, +0x58, 0x44, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, 0x44, 0x00, 0x06, 0x0c, 0x58, 0x14, 0x80, 0x00, +0x44, 0x20, 0x0f, 0x00, 0x44, 0x30, 0x00, 0x08, 0x58, 0x44, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, +0x46, 0x20, 0xf0, 0x00, 0x58, 0x44, 0x00, 0x00, 0x44, 0x00, 0x06, 0x08, 0x58, 0x14, 0x80, 0x00, +0x44, 0x30, 0x00, 0x18, 0x4b, 0xe0, 0x1c, 0x01, 0x40, 0x63, 0x10, 0x09, 0x46, 0x20, 0x0f, 0x00, +0x44, 0x00, 0x00, 0x1c, 0x58, 0x14, 0x80, 0x00, 0x44, 0x30, 0x00, 0x14, 0x58, 0x43, 0x00, 0x00, +0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x21, 0xe0, 0x00, 0x58, 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x1c, +0x58, 0x14, 0x80, 0x00, 0x50, 0x30, 0x7f, 0xfd, 0x4b, 0xe0, 0x1c, 0x01, 0x4e, 0x93, 0x00, 0x14, +0x3e, 0x6f, 0xd7, 0x8c, 0x02, 0x03, 0x00, 0x00, 0x04, 0x13, 0x00, 0x01, 0x44, 0x20, 0x00, 0x00, +0x4b, 0xe0, 0x28, 0x01, 0x50, 0x63, 0x00, 0x08, 0x3e, 0x5f, 0xd7, 0xfc, 0x4c, 0x62, 0xff, 0xf4, +0x48, 0x00, 0x00, 0x16, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x92, 0xc0, 0x12, 0x3e, 0x6f, 0xd7, 0xfc, +0x02, 0x03, 0x00, 0x00, 0x04, 0x13, 0x00, 0x01, 0x44, 0x20, 0x00, 0x01, 0x4b, 0xe0, 0x28, 0x01, +0x50, 0x63, 0x00, 0x08, 0x3e, 0x5f, 0xd8, 0x6c, 0x4c, 0x62, 0xff, 0xf4, 0x50, 0x94, 0x80, 0x01, +0x40, 0x94, 0x80, 0x13, 0x3c, 0x4d, 0xf8, 0xf5, 0x40, 0xf4, 0x90, 0x06, 0x4e, 0xf2, 0x00, 0x08, +0x44, 0x70, 0x00, 0x00, 0x3e, 0x6f, 0xd6, 0x5c, 0x48, 0xff, 0xfd, 0xe8, 0x2e, 0x17, 0xe3, 0xbc, +0x50, 0x30, 0xff, 0xff, 0x54, 0xa1, 0x80, 0xff, 0x5c, 0xf5, 0x00, 0x04, 0x4e, 0xf3, 0x00, 0x06, +0x3e, 0x0f, 0xd4, 0x24, 0x49, 0xff, 0x7f, 0x7a, 0x3e, 0x7f, 0xda, 0xac, 0x44, 0x60, 0x00, 0x00, +0x44, 0x90, 0x00, 0x06, 0x2f, 0xe7, 0xe3, 0xbc, 0x3e, 0x3f, 0xda, 0xac, 0x43, 0xe3, 0x24, 0x73, +0x04, 0x23, 0x80, 0x05, 0x50, 0x1f, 0x7f, 0xff, 0x40, 0x40, 0x88, 0x08, 0x40, 0x52, 0x0c, 0x00, +0x04, 0x03, 0x80, 0x00, 0x04, 0x12, 0x80, 0x01, 0x50, 0x63, 0x00, 0x01, 0x49, 0xff, 0xf6, 0xf4, +0x44, 0x50, 0x00, 0x0e, 0x50, 0x73, 0x80, 0x18, 0x4c, 0x62, 0xff, 0xe6, 0x2e, 0x47, 0xdf, 0xbf, +0x40, 0x02, 0x00, 0x10, 0x4e, 0x04, 0x00, 0x10, 0x54, 0x52, 0x00, 0x70, 0x40, 0x42, 0x90, 0x09, +0x44, 0x00, 0x06, 0x00, 0x44, 0x10, 0x00, 0x00, 0x44, 0x20, 0x1c, 0x00, 0x44, 0x30, 0x00, 0x0a, +0x49, 0xff, 0xf7, 0x1e, 0x49, 0xff, 0xfc, 0x5e, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x2e, 0x07, 0xe3, 0xdf, +0x4e, 0x03, 0x00, 0x0e, 0x46, 0x46, 0x01, 0x20, 0x04, 0x52, 0x00, 0x20, 0x42, 0x22, 0xa0, 0x09, +0x14, 0x22, 0x00, 0x20, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x92, 0x46, 0x2f, 0xe7, 0xe3, 0xe0, +0x4f, 0xe3, 0x00, 0x0e, 0x46, 0x16, 0x01, 0x20, 0x04, 0x20, 0x80, 0x20, 0x42, 0x41, 0x24, 0x09, +0x14, 0x40, 0x80, 0x20, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x92, 0x36, 0x51, 0xff, 0x80, 0x04, +0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x49, 0xff, 0xff, 0xd2, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x49, 0xff, 0xff, 0xdc, 0x49, 0xff, 0xff, 0xc4, -0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, -0x51, 0xff, 0xff, 0xe4, 0x2e, 0x37, 0xe2, 0x61, 0x59, 0xc0, 0x00, 0x00, 0x54, 0x41, 0x80, 0x40, -0x4e, 0x43, 0x05, 0x02, 0x2e, 0x57, 0xe6, 0x20, 0x44, 0x00, 0x00, 0x01, 0x4c, 0x50, 0x04, 0xfc, -0x54, 0xa1, 0x80, 0x20, 0x49, 0xff, 0xf5, 0xc0, 0x46, 0x18, 0x1b, 0xce, 0x3e, 0x6f, 0x83, 0x48, -0x58, 0x10, 0x8c, 0x3f, 0x44, 0x00, 0x00, 0x6c, 0x58, 0x2e, 0x00, 0x00, 0x4b, 0xe0, 0x18, 0x01, -0x46, 0x1f, 0xcb, 0x00, 0x58, 0x2e, 0x00, 0x00, 0x58, 0x10, 0x87, 0x27, 0x44, 0x00, 0x00, 0x48, -0x4b, 0xe0, 0x18, 0x01, 0x58, 0x1e, 0x00, 0x00, 0x44, 0x00, 0x00, 0x54, 0x49, 0xff, 0xf5, 0x7e, -0x42, 0x20, 0x74, 0x09, 0x42, 0x21, 0x78, 0x09, 0x42, 0x11, 0x78, 0x08, 0x44, 0x00, 0x00, 0x54, -0x58, 0x2e, 0x00, 0x00, 0x4b, 0xe0, 0x18, 0x01, 0x46, 0x10, 0x5a, 0x00, 0x58, 0x10, 0x8f, 0x8b, -0x44, 0x00, 0x00, 0x70, 0x58, 0x2e, 0x00, 0x00, 0x4b, 0xe0, 0x18, 0x01, 0x4e, 0xa2, 0x00, 0x3e, -0x44, 0x00, 0x00, 0x70, 0x58, 0x1e, 0x00, 0x00, 0x49, 0xff, 0xf5, 0x60, 0x2e, 0x87, 0xe2, 0x61, -0x40, 0x70, 0x20, 0x08, 0x54, 0x54, 0x00, 0x10, 0x40, 0x63, 0xf0, 0x09, 0x54, 0x34, 0x00, 0x0f, -0x4e, 0x52, 0x00, 0x06, 0x40, 0x63, 0x0c, 0x00, 0x48, 0x00, 0x00, 0x04, 0x40, 0x63, 0x0c, 0x01, -0x4e, 0x66, 0x00, 0x06, 0x44, 0x60, 0x00, 0x00, 0x48, 0x00, 0x00, 0x06, 0x45, 0xe0, 0x00, 0x0f, -0x42, 0x63, 0x78, 0x01, 0x58, 0x1e, 0x00, 0x00, 0x44, 0x00, 0x00, 0x70, 0x49, 0xff, 0xf5, 0x3e, -0x46, 0x2f, 0xf0, 0xff, 0x46, 0x10, 0x0f, 0x00, 0x58, 0x21, 0x0f, 0xff, 0x40, 0x63, 0x50, 0x08, -0x40, 0x40, 0x08, 0x02, 0x40, 0x03, 0x04, 0x02, 0x40, 0x10, 0x10, 0x04, 0x58, 0x2e, 0x00, 0x00, -0x44, 0x00, 0x00, 0x70, 0x49, 0xff, 0xf5, 0x0c, 0x46, 0x19, 0x00, 0x00, 0x44, 0x00, 0x00, 0xa0, -0x58, 0x2e, 0x00, 0x00, 0x49, 0xff, 0xf5, 0x04, 0x46, 0x38, 0x10, 0x60, 0x04, 0x71, 0x80, 0x02, -0x2e, 0x87, 0xe4, 0x0e, 0x3c, 0x7f, 0xf9, 0x1d, 0x4e, 0x83, 0x00, 0x18, 0x2f, 0xe7, 0xe4, 0x0f, -0x4f, 0xe3, 0x00, 0x14, 0x4f, 0xc3, 0x00, 0x08, 0x46, 0x40, 0x48, 0x52, 0x58, 0x42, 0x03, 0x90, +0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x46, 0x16, 0x01, 0x20, 0x04, 0x30, 0x80, 0x20, +0x44, 0x00, 0x00, 0x01, 0x58, 0x21, 0x83, 0x00, 0x14, 0x20, 0x80, 0x20, 0x49, 0xff, 0x92, 0x14, +0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, +0x51, 0xff, 0xff, 0xfc, 0x46, 0x06, 0x01, 0x20, 0x04, 0x10, 0x00, 0x20, 0x54, 0x20, 0x81, 0x00, +0x4e, 0x22, 0x00, 0x04, 0x44, 0x20, 0x00, 0x01, 0x54, 0x10, 0x82, 0x00, 0x3e, 0x27, 0xe3, 0xdf, +0x4e, 0x12, 0x00, 0x04, 0x44, 0x10, 0x00, 0x01, 0x3e, 0x17, 0xe3, 0xe0, 0x49, 0xff, 0xff, 0xd2, +0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, +0x51, 0xff, 0xff, 0xfc, 0x49, 0xff, 0xff, 0xdc, 0x49, 0xff, 0xff, 0xc4, 0x51, 0xff, 0x80, 0x04, +0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xe4, +0x2e, 0x37, 0xe0, 0x01, 0x59, 0xc0, 0x00, 0x00, 0x54, 0x41, 0x80, 0x40, 0x4e, 0x43, 0x04, 0xd2, +0x2e, 0x57, 0xe3, 0xc0, 0x44, 0x00, 0x00, 0x01, 0x4c, 0x50, 0x04, 0xcc, 0x54, 0xa1, 0x80, 0x20, +0x49, 0xff, 0xf6, 0xda, 0x46, 0x18, 0x1b, 0xce, 0x3e, 0x6f, 0x84, 0x80, 0x58, 0x10, 0x8c, 0x3f, +0x44, 0x00, 0x00, 0x6c, 0x58, 0x2e, 0x00, 0x00, 0x4b, 0xe0, 0x18, 0x01, 0x46, 0x1f, 0xcb, 0x00, +0x58, 0x2e, 0x00, 0x00, 0x58, 0x10, 0x87, 0x27, 0x44, 0x00, 0x00, 0x48, 0x4b, 0xe0, 0x18, 0x01, +0x58, 0x1e, 0x00, 0x00, 0x44, 0x00, 0x00, 0x54, 0x49, 0xff, 0xf6, 0x44, 0x42, 0x20, 0x74, 0x09, +0x42, 0x21, 0x78, 0x09, 0x42, 0x11, 0x78, 0x08, 0x44, 0x00, 0x00, 0x54, 0x58, 0x2e, 0x00, 0x00, +0x4b, 0xe0, 0x18, 0x01, 0x46, 0x10, 0x5a, 0x00, 0x58, 0x10, 0x8f, 0x8b, 0x44, 0x00, 0x00, 0x70, +0x58, 0x2e, 0x00, 0x00, 0x4b, 0xe0, 0x18, 0x01, 0x4e, 0xa2, 0x00, 0x30, 0x44, 0x00, 0x00, 0x70, +0x58, 0x1e, 0x00, 0x00, 0x49, 0xff, 0xf6, 0x26, 0x2e, 0x87, 0xe0, 0x01, 0x40, 0x70, 0x20, 0x08, +0x54, 0x54, 0x00, 0x10, 0x40, 0x43, 0xf0, 0x09, 0x54, 0x34, 0x00, 0x0f, 0x4e, 0x52, 0x00, 0x06, +0x40, 0x42, 0x0c, 0x00, 0x48, 0x00, 0x00, 0x04, 0x40, 0x42, 0x0c, 0x01, 0x4e, 0x46, 0x00, 0x06, +0x44, 0x40, 0x00, 0x00, 0x48, 0x00, 0x00, 0x06, 0x45, 0xe0, 0x00, 0x0f, 0x42, 0x42, 0x78, 0x01, +0x46, 0x20, 0x0f, 0x00, 0x54, 0x42, 0x00, 0xff, 0x44, 0x00, 0x00, 0x70, 0x58, 0x1e, 0x00, 0x00, +0x44, 0x30, 0x00, 0x14, 0x49, 0xff, 0xf6, 0x24, 0x46, 0x19, 0x00, 0x00, 0x44, 0x00, 0x00, 0xa0, +0x58, 0x2e, 0x00, 0x00, 0x49, 0xff, 0xf5, 0xd8, 0x46, 0x38, 0x10, 0x60, 0x04, 0x01, 0x80, 0x02, +0x2e, 0x47, 0xe1, 0xb2, 0x3c, 0x0f, 0xf8, 0x85, 0x4e, 0x43, 0x00, 0x18, 0x2e, 0x27, 0xe1, 0xb3, +0x4e, 0x23, 0x00, 0x14, 0x4f, 0xc3, 0x00, 0x08, 0x46, 0x40, 0x48, 0x52, 0x58, 0x42, 0x03, 0x90, 0x48, 0x00, 0x00, 0x0a, 0x44, 0x50, 0x00, 0x01, 0x4d, 0xc2, 0xc0, 0x08, 0x46, 0x40, 0x48, 0x56, -0x58, 0x42, 0x07, 0x90, 0x14, 0x41, 0x80, 0x02, 0x46, 0x86, 0x02, 0x00, 0x58, 0x14, 0x00, 0x00, -0x58, 0x30, 0x80, 0x00, 0x44, 0x20, 0x00, 0xa7, 0x44, 0x60, 0x00, 0x02, 0x14, 0x24, 0x00, 0x00, -0x14, 0x20, 0x80, 0x01, 0x14, 0x61, 0x80, 0x83, 0x4f, 0xc3, 0x00, 0x22, 0x58, 0x60, 0x80, 0x00, -0x46, 0x90, 0x40, 0x00, 0x58, 0x30, 0x80, 0x00, 0x46, 0x70, 0x02, 0x74, 0x58, 0x40, 0x80, 0x00, -0x46, 0x0c, 0x00, 0x00, 0x47, 0xe6, 0x02, 0x04, 0x58, 0x73, 0x80, 0x27, 0x58, 0x00, 0x04, 0x00, -0x44, 0x50, 0x05, 0x9f, 0x14, 0x93, 0x00, 0x80, 0x14, 0x71, 0x83, 0x40, 0x14, 0x02, 0x03, 0x41, -0x14, 0x5f, 0x00, 0x85, 0x4e, 0xa2, 0x00, 0x2c, 0x48, 0x00, 0x00, 0x32, 0x44, 0x50, 0x00, 0x01, -0x4d, 0xc2, 0x80, 0x06, 0x44, 0x90, 0x00, 0x00, 0x48, 0x00, 0x00, 0x60, 0x46, 0x36, 0x02, 0x00, -0x46, 0x71, 0x40, 0x00, 0x46, 0x46, 0x02, 0x01, 0x46, 0x00, 0x02, 0x74, 0x59, 0xe2, 0x00, 0x00, -0x46, 0x5c, 0x00, 0x00, 0x46, 0x26, 0x02, 0x05, 0x58, 0x00, 0x00, 0x27, 0x58, 0x52, 0x84, 0x00, -0x44, 0x80, 0x05, 0x9f, 0x14, 0x71, 0x80, 0x80, 0x14, 0x02, 0x03, 0x40, 0x14, 0x5f, 0x03, 0x41, -0x14, 0x81, 0x00, 0x85, 0x4e, 0xa2, 0x00, 0x24, 0x48, 0x00, 0x00, 0x2a, 0x46, 0x36, 0x02, 0x00, +0x58, 0x42, 0x07, 0x90, 0x14, 0x41, 0x80, 0x02, 0x46, 0x46, 0x02, 0x00, 0x58, 0x92, 0x00, 0x00, +0x58, 0x32, 0x00, 0x00, 0x45, 0xe0, 0x00, 0xa7, 0x44, 0x70, 0x00, 0x02, 0x15, 0xe2, 0x00, 0x00, +0x15, 0xe4, 0x80, 0x01, 0x14, 0x71, 0x80, 0x83, 0x4f, 0xc3, 0x00, 0x22, 0x58, 0x81, 0x80, 0x00, +0x46, 0x70, 0x40, 0x00, 0x58, 0x61, 0x80, 0x00, 0x46, 0x30, 0x02, 0x74, 0x58, 0x22, 0x00, 0x00, +0x46, 0x5c, 0x00, 0x00, 0x46, 0x16, 0x02, 0x04, 0x58, 0x31, 0x80, 0x27, 0x58, 0x52, 0x84, 0x00, +0x44, 0x00, 0x05, 0x9f, 0x14, 0x74, 0x00, 0x80, 0x14, 0x33, 0x03, 0x40, 0x14, 0x51, 0x03, 0x41, +0x14, 0x00, 0x80, 0x85, 0x4e, 0xa2, 0x00, 0x2c, 0x48, 0x00, 0x00, 0x32, 0x44, 0x50, 0x00, 0x01, +0x4d, 0xc2, 0x80, 0x06, 0x44, 0x90, 0x00, 0x00, 0x48, 0x00, 0x00, 0x60, 0x46, 0x66, 0x02, 0x00, +0x46, 0x31, 0x40, 0x00, 0x46, 0x26, 0x02, 0x01, 0x46, 0x50, 0x02, 0x74, 0x58, 0x11, 0x00, 0x00, +0x46, 0x0c, 0x00, 0x00, 0x47, 0xe6, 0x02, 0x05, 0x58, 0x52, 0x80, 0x27, 0x58, 0x00, 0x04, 0x00, +0x44, 0x40, 0x05, 0x9f, 0x14, 0x33, 0x00, 0x80, 0x14, 0x51, 0x03, 0x40, 0x14, 0x00, 0x83, 0x41, +0x14, 0x4f, 0x00, 0x85, 0x4e, 0xa2, 0x00, 0x24, 0x48, 0x00, 0x00, 0x2a, 0x46, 0x36, 0x02, 0x00, 0x46, 0x44, 0x0c, 0x00, 0x58, 0x31, 0x8d, 0x24, 0x48, 0x00, 0x00, 0x08, 0x46, 0x36, 0x02, 0x00, -0x46, 0x44, 0x04, 0x00, 0x58, 0x31, 0x8d, 0x24, 0x14, 0x41, 0x80, 0x00, 0x58, 0x80, 0x80, 0x00, -0x04, 0x64, 0x03, 0x49, 0x58, 0x90, 0x80, 0x00, 0x46, 0x2a, 0x30, 0x00, 0x46, 0x10, 0xff, 0x00, -0x14, 0x24, 0x82, 0x82, 0x40, 0x93, 0x04, 0x02, 0x48, 0x00, 0x00, 0x20, 0x46, 0x36, 0x02, 0x01, +0x46, 0x44, 0x04, 0x00, 0x58, 0x31, 0x8d, 0x24, 0x14, 0x41, 0x80, 0x00, 0x58, 0x41, 0x00, 0x00, +0x04, 0x82, 0x03, 0x49, 0x58, 0x91, 0x00, 0x00, 0x47, 0xea, 0x30, 0x00, 0x46, 0x70, 0xff, 0x00, +0x15, 0xe4, 0x82, 0x82, 0x40, 0x94, 0x1c, 0x02, 0x48, 0x00, 0x00, 0x20, 0x46, 0x36, 0x02, 0x01, 0x46, 0x44, 0x0c, 0x00, 0x58, 0x31, 0x8d, 0x24, 0x48, 0x00, 0x00, 0x08, 0x46, 0x36, 0x02, 0x01, -0x46, 0x44, 0x04, 0x00, 0x58, 0x31, 0x8d, 0x24, 0x14, 0x41, 0x80, 0x00, 0x58, 0x3f, 0x00, 0x00, -0x58, 0x01, 0x80, 0x00, 0x46, 0x4a, 0x30, 0x00, 0x05, 0xe1, 0x83, 0x49, 0x46, 0x50, 0xff, 0x00, -0x14, 0x40, 0x02, 0x82, 0x40, 0x9f, 0x14, 0x02, 0x46, 0x36, 0x02, 0x00, 0x14, 0x3f, 0x80, 0x00, -0x58, 0x21, 0x80, 0x00, 0x04, 0x0f, 0x80, 0x00, 0x14, 0x2f, 0x80, 0x01, 0x58, 0x00, 0x03, 0x80, -0x14, 0x0f, 0x80, 0x00, 0x46, 0x16, 0x02, 0x04, 0x04, 0x0f, 0x80, 0x01, 0x14, 0x1f, 0x80, 0x02, -0x58, 0x00, 0x03, 0x00, 0x14, 0x0f, 0x80, 0x01, 0x04, 0x0f, 0x80, 0x02, 0x58, 0x40, 0x80, 0x00, -0x58, 0x00, 0x01, 0x00, 0x14, 0x0f, 0x80, 0x02, 0x44, 0x00, 0x00, 0x03, 0x14, 0x02, 0x00, 0x50, -0x50, 0x00, 0x00, 0x0d, 0x04, 0x4f, 0x80, 0x00, 0x47, 0xe0, 0x10, 0x00, 0x14, 0x02, 0x00, 0x00, -0x44, 0x01, 0x00, 0x68, 0x04, 0x4f, 0x80, 0x01, 0x14, 0x02, 0x00, 0x00, 0x58, 0x81, 0x00, 0x00, -0x04, 0x0f, 0x80, 0x02, 0x58, 0x71, 0x00, 0x00, 0x46, 0x62, 0x03, 0xf0, 0x58, 0x50, 0x80, 0x00, -0x46, 0x30, 0x60, 0x70, 0x46, 0x10, 0x00, 0x80, 0x15, 0xe0, 0x00, 0x00, 0x58, 0x63, 0x06, 0x06, +0x46, 0x44, 0x04, 0x00, 0x58, 0x31, 0x8d, 0x24, 0x14, 0x41, 0x80, 0x00, 0x58, 0x50, 0x80, 0x00, +0x58, 0x20, 0x80, 0x00, 0x46, 0x6a, 0x30, 0x00, 0x04, 0x12, 0x83, 0x49, 0x46, 0x00, 0xff, 0x00, +0x14, 0x61, 0x02, 0x82, 0x40, 0x90, 0x80, 0x02, 0x46, 0x36, 0x02, 0x00, 0x14, 0x3f, 0x80, 0x01, +0x58, 0x21, 0x80, 0x00, 0x04, 0x0f, 0x80, 0x01, 0x14, 0x2f, 0x80, 0x02, 0x58, 0x00, 0x03, 0x80, +0x14, 0x0f, 0x80, 0x01, 0x46, 0x16, 0x02, 0x04, 0x04, 0x0f, 0x80, 0x02, 0x14, 0x1f, 0x80, 0x03, +0x58, 0x00, 0x03, 0x00, 0x14, 0x0f, 0x80, 0x02, 0x04, 0x0f, 0x80, 0x03, 0x58, 0x40, 0x80, 0x00, +0x58, 0x00, 0x01, 0x00, 0x14, 0x0f, 0x80, 0x03, 0x44, 0x00, 0x00, 0x03, 0x14, 0x02, 0x00, 0x50, +0x50, 0x00, 0x00, 0x0d, 0x04, 0x4f, 0x80, 0x01, 0x47, 0xe0, 0x10, 0x00, 0x14, 0x02, 0x00, 0x00, +0x44, 0x01, 0x00, 0x68, 0x04, 0x4f, 0x80, 0x02, 0x14, 0x02, 0x00, 0x00, 0x58, 0x81, 0x00, 0x00, +0x04, 0x4f, 0x80, 0x03, 0x58, 0x71, 0x00, 0x00, 0x46, 0x62, 0x03, 0xf0, 0x58, 0x50, 0x80, 0x00, +0x46, 0x30, 0x60, 0x70, 0x46, 0x10, 0x00, 0x80, 0x15, 0xe2, 0x00, 0x00, 0x58, 0x63, 0x06, 0x06, 0x58, 0x10, 0x87, 0x01, 0x45, 0xe0, 0x00, 0x06, 0x15, 0xe4, 0x02, 0x44, 0x14, 0x63, 0x82, 0x43, 0x14, 0x32, 0x80, 0x08, 0x58, 0x71, 0x00, 0x00, 0x14, 0x11, 0x02, 0x40, 0x44, 0x60, 0x00, 0x00, -0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x90, 0x18, 0x04, 0x43, 0x82, 0x6c, 0x42, 0x52, 0x74, 0x0b, +0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x90, 0x50, 0x04, 0x43, 0x82, 0x6c, 0x42, 0x52, 0x74, 0x0b, 0x4e, 0x53, 0x00, 0x12, 0x44, 0x50, 0x27, 0x11, 0x4c, 0x62, 0x80, 0x06, 0x50, 0x63, 0x00, 0x01, -0x48, 0xff, 0xff, 0xf0, 0x3e, 0x0f, 0xd6, 0x64, 0x3e, 0x1f, 0xde, 0xb8, 0x44, 0x20, 0x15, 0xe3, -0x49, 0xff, 0x7c, 0xe4, 0x46, 0x26, 0x02, 0x00, 0x46, 0x30, 0x00, 0x80, 0x58, 0x61, 0x00, 0x00, +0x48, 0xff, 0xff, 0xf0, 0x3e, 0x0f, 0xd4, 0x10, 0x3e, 0x1f, 0xdc, 0x64, 0x44, 0x20, 0x16, 0x53, +0x49, 0xff, 0x7d, 0x1c, 0x46, 0x26, 0x02, 0x00, 0x46, 0x30, 0x00, 0x80, 0x58, 0x61, 0x00, 0x00, 0x58, 0x31, 0x87, 0x00, 0x40, 0x94, 0xd0, 0x09, 0x44, 0x11, 0x00, 0x06, 0x14, 0x31, 0x02, 0x40, -0x40, 0x94, 0x80, 0x10, 0x14, 0x13, 0x02, 0x44, 0x4e, 0xa3, 0x02, 0x70, 0x47, 0xe6, 0x02, 0x01, -0x59, 0xef, 0x09, 0xac, 0x50, 0x4f, 0x70, 0x00, 0x50, 0x02, 0x00, 0x04, 0x14, 0xaf, 0x80, 0x02, -0x15, 0xef, 0x80, 0x03, 0x14, 0x4f, 0x80, 0x04, 0x14, 0x0f, 0x80, 0x05, 0x14, 0xaf, 0x80, 0x01, -0x15, 0xcf, 0x80, 0x00, 0x59, 0xc5, 0x00, 0x00, 0x04, 0x6f, 0x80, 0x00, 0x4e, 0x63, 0x00, 0x0c, -0x04, 0x1f, 0x80, 0x04, 0x47, 0xc0, 0x0f, 0xf0, 0x04, 0x00, 0x80, 0x00, 0x40, 0x30, 0x70, 0x02, -0x48, 0x00, 0x00, 0x10, 0x04, 0x2f, 0x80, 0x00, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x22, 0xc0, 0x10, -0x04, 0x4f, 0x80, 0x03, 0x46, 0x50, 0x0f, 0xf0, 0x04, 0x02, 0x00, 0x00, 0x40, 0x30, 0x14, 0x02, -0x41, 0xe1, 0xc0, 0x09, 0x15, 0xef, 0x80, 0x01, 0x55, 0xc0, 0x00, 0xff, 0x5c, 0xfe, 0x00, 0x41, -0x4e, 0xf3, 0x00, 0x06, 0x50, 0x94, 0x80, 0x0a, 0x48, 0x00, 0x00, 0xb0, 0x5c, 0xfe, 0x00, 0x08, -0x4e, 0xf2, 0x00, 0x06, 0x50, 0x94, 0x80, 0x08, 0x48, 0x00, 0x00, 0xa8, 0x5c, 0xfe, 0x00, 0x10, -0x4e, 0xf2, 0x00, 0x06, 0x50, 0x94, 0x80, 0x06, 0x48, 0x00, 0x00, 0xa0, 0x5c, 0xfe, 0x00, 0x20, -0x4e, 0xf2, 0x00, 0x06, 0x50, 0x94, 0x80, 0x04, 0x48, 0x00, 0x00, 0x98, 0x5c, 0xfe, 0x00, 0x30, -0x4e, 0xf2, 0x00, 0x06, 0x50, 0x94, 0x80, 0x02, 0x48, 0x00, 0x00, 0x90, 0x04, 0x2f, 0x80, 0x00, -0x4e, 0x23, 0x00, 0x22, 0x46, 0x36, 0x02, 0x00, 0x58, 0x31, 0x89, 0xac, 0x58, 0x01, 0x00, 0x00, -0x05, 0xc1, 0x80, 0x00, 0x50, 0x20, 0x00, 0x01, 0x55, 0xce, 0x00, 0xff, 0x50, 0x1e, 0x7f, 0xd0, -0x54, 0x60, 0x80, 0xff, 0x50, 0x31, 0xff, 0xfc, 0x5c, 0xf3, 0x00, 0x10, 0x4e, 0xf2, 0x00, 0x04, -0x54, 0x01, 0x00, 0xff, 0x46, 0x26, 0x02, 0x00, 0x58, 0x51, 0x09, 0x6c, 0x4c, 0x32, 0xff, 0xea, -0x48, 0x00, 0x00, 0x26, 0x04, 0x3f, 0x80, 0x00, 0x44, 0x00, 0x00, 0x01, 0x4c, 0x30, 0x40, 0x24, -0x46, 0x36, 0x02, 0x01, 0x58, 0x31, 0x89, 0xac, 0x44, 0x00, 0x00, 0x00, 0x05, 0xe1, 0x80, 0x00, -0x50, 0x20, 0x00, 0x01, 0x55, 0xcf, 0x00, 0xff, 0x50, 0x4e, 0x7f, 0xd0, 0x54, 0x52, 0x00, 0xff, -0x50, 0x31, 0xff, 0xfc, 0x5c, 0xf2, 0x80, 0x10, 0x4e, 0xf2, 0x00, 0x04, 0x54, 0x01, 0x00, 0xff, -0x46, 0x66, 0x02, 0x01, 0x58, 0x63, 0x09, 0x6c, 0x4c, 0x33, 0x7f, 0xea, 0x5c, 0xf0, 0x00, 0x03, -0x4e, 0xf2, 0x00, 0x12, 0x04, 0x2f, 0x80, 0x01, 0x44, 0x50, 0x00, 0x7f, 0x4c, 0x22, 0x80, 0x40, -0x50, 0x02, 0x80, 0x02, 0x4c, 0x20, 0x00, 0x3c, 0x05, 0xcf, 0x80, 0x00, 0x44, 0x50, 0x00, 0x01, -0x48, 0x00, 0x01, 0x4e, 0x44, 0xa0, 0x00, 0x03, 0x4c, 0x05, 0x40, 0x06, 0x50, 0x94, 0xff, 0xfe, -0x48, 0x00, 0x00, 0x2c, 0x44, 0x50, 0x00, 0x04, 0x4c, 0x02, 0xc0, 0x06, 0x50, 0x94, 0xff, 0xfc, -0x48, 0x00, 0x00, 0x24, 0x44, 0x50, 0x00, 0x05, 0x4c, 0x02, 0xc0, 0x06, 0x50, 0x94, 0xff, 0xf8, -0x48, 0x00, 0x00, 0x1c, 0x44, 0x50, 0x00, 0x06, 0x4c, 0x02, 0xc0, 0x06, 0x50, 0x94, 0xff, 0xf4, -0x48, 0x00, 0x00, 0x14, 0x44, 0x30, 0x00, 0x07, 0x4c, 0x01, 0xc0, 0x06, 0x50, 0x94, 0xff, 0xf0, -0x48, 0x00, 0x00, 0x0c, 0x44, 0x50, 0x00, 0x08, 0x4c, 0x02, 0xc0, 0x06, 0x50, 0x94, 0xff, 0xec, -0x48, 0x00, 0x00, 0x04, 0x50, 0x94, 0xff, 0xe8, 0x40, 0x94, 0x80, 0x10, 0x04, 0x1f, 0x80, 0x00, -0x44, 0x00, 0x00, 0x70, 0x49, 0xff, 0xf2, 0xf2, 0x40, 0x60, 0x20, 0x08, 0x40, 0x43, 0x70, 0x09, -0x54, 0x12, 0x00, 0xff, 0x40, 0xa2, 0x00, 0x10, 0x45, 0xe0, 0x00, 0x00, 0x54, 0x5f, 0x00, 0xff, -0x50, 0x34, 0x80, 0x08, 0x50, 0x25, 0x7f, 0xff, 0x4c, 0x12, 0xc0, 0x10, 0x5e, 0xf4, 0xff, 0xe1, -0x4e, 0xf3, 0x00, 0x06, 0x44, 0xa0, 0x00, 0x00, 0x48, 0x00, 0x00, 0x16, 0x44, 0xa0, 0x00, 0x00, -0x44, 0x9f, 0xff, 0xe1, 0x48, 0x00, 0x00, 0x10, 0x5e, 0xf4, 0xff, 0xe1, 0x4e, 0xf2, 0x00, 0x0c, -0x40, 0x91, 0x80, 0x10, 0x40, 0xa1, 0x00, 0x10, 0x51, 0xef, 0x00, 0x01, 0x5e, 0xf4, 0xff, 0xe1, -0x4e, 0xf3, 0xff, 0xde, 0x44, 0x50, 0x00, 0x0f, 0x50, 0x14, 0xff, 0xf8, 0x50, 0x05, 0x00, 0x01, -0x4c, 0xa2, 0xc0, 0x08, 0x44, 0x70, 0x00, 0x1f, 0x42, 0x94, 0x9c, 0x01, 0x48, 0x00, 0x00, 0x0e, -0x5e, 0xf4, 0x80, 0x20, 0x4e, 0xf3, 0x00, 0x0a, 0x40, 0x90, 0x80, 0x10, 0x40, 0xa0, 0x00, 0x10, -0x5e, 0xf4, 0x80, 0x20, 0x4e, 0xf2, 0xff, 0xe8, 0x04, 0x1f, 0x80, 0x00, 0x44, 0x00, 0x00, 0x70, -0x49, 0xff, 0xf2, 0xa4, 0x46, 0x4f, 0xf0, 0xff, 0x46, 0x50, 0x0f, 0x00, 0x40, 0x35, 0x50, 0x08, -0x58, 0x42, 0x0f, 0xff, 0x40, 0x80, 0x10, 0x02, 0x40, 0x21, 0x94, 0x02, 0x40, 0x11, 0x20, 0x04, -0x04, 0x2f, 0x80, 0x00, 0x44, 0x00, 0x00, 0x70, 0x49, 0xff, 0xf2, 0x72, 0x04, 0xaf, 0x80, 0x00, -0x4e, 0xa3, 0x00, 0x10, 0x46, 0x00, 0xff, 0x00, 0x40, 0x14, 0xd0, 0x08, 0x40, 0x60, 0x80, 0x02, -0x46, 0x06, 0x02, 0x00, 0x42, 0x33, 0x78, 0x08, 0x58, 0x00, 0x0d, 0x24, 0x48, 0x00, 0x00, 0x14, -0x04, 0x7f, 0x80, 0x00, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x72, 0xc0, 0x10, 0x46, 0x20, 0xff, 0x00, -0x40, 0x84, 0xd0, 0x08, 0x40, 0xa4, 0x08, 0x02, 0x46, 0x06, 0x02, 0x01, 0x42, 0x35, 0x78, 0x08, -0x58, 0x00, 0x0d, 0x24, 0x14, 0x30, 0x00, 0x00, 0x46, 0x86, 0x02, 0x04, 0x46, 0xa6, 0x02, 0x00, -0x58, 0x75, 0x00, 0x00, 0x58, 0x44, 0x00, 0x00, 0x47, 0xe0, 0x10, 0x00, 0x58, 0x13, 0x80, 0x00, -0x44, 0x30, 0x00, 0x06, 0x44, 0x20, 0x00, 0x03, 0x44, 0x00, 0x00, 0x10, 0x44, 0x61, 0x00, 0x68, -0x14, 0x24, 0x00, 0x50, 0x14, 0x05, 0x00, 0xe0, 0x14, 0x63, 0x80, 0xc0, 0x15, 0xe2, 0x00, 0x40, -0x14, 0x30, 0x82, 0x44, 0x44, 0x50, 0x00, 0x7f, 0x04, 0x3f, 0x80, 0x01, 0x4c, 0x32, 0x80, 0x10, -0x50, 0x52, 0x80, 0x02, 0x4c, 0x32, 0x80, 0x0c, 0x46, 0x06, 0x02, 0x00, 0x46, 0x32, 0x03, 0xf0, -0x58, 0x00, 0x09, 0x0c, 0x58, 0x31, 0x86, 0x06, 0x48, 0x00, 0x00, 0x0a, 0x46, 0x06, 0x02, 0x00, -0x46, 0x31, 0x03, 0xf0, 0x58, 0x00, 0x09, 0x0c, 0x58, 0x31, 0x86, 0x06, 0x58, 0x82, 0x00, 0x00, -0x46, 0xa0, 0x60, 0x70, 0x46, 0x70, 0x00, 0x80, 0x58, 0x73, 0x87, 0x01, 0x14, 0x30, 0x00, 0x00, -0x14, 0xa4, 0x00, 0x08, 0x14, 0x70, 0x82, 0x40, 0x44, 0x60, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, -0x49, 0xff, 0x8e, 0x22, 0x04, 0x2f, 0x80, 0x05, 0x04, 0x01, 0x00, 0x00, 0x42, 0x40, 0x74, 0x0b, -0x4e, 0x43, 0x00, 0x12, 0x44, 0x50, 0x27, 0x11, 0x4c, 0x62, 0x80, 0x06, 0x50, 0x63, 0x00, 0x01, -0x48, 0xff, 0xff, 0xee, 0x3e, 0x0f, 0xd6, 0x64, 0x3e, 0x1f, 0xde, 0xb8, 0x44, 0x20, 0x16, 0xec, -0x49, 0xff, 0x7a, 0xec, 0x04, 0x6f, 0x80, 0x02, 0x46, 0x16, 0x02, 0x00, 0x50, 0x53, 0x00, 0x01, -0x46, 0x20, 0x00, 0x80, 0x58, 0x00, 0x80, 0x00, 0x55, 0xe2, 0x80, 0xff, 0x58, 0x21, 0x07, 0x00, -0x44, 0x31, 0x00, 0x06, 0x44, 0x46, 0x07, 0x00, 0x15, 0xef, 0x80, 0x02, 0x14, 0x20, 0x82, 0x40, -0x14, 0x30, 0x02, 0x44, 0x14, 0x40, 0x82, 0x40, 0x44, 0x50, 0x00, 0x04, 0x04, 0x6f, 0x80, 0x02, -0x4c, 0x62, 0xfe, 0x14, 0x05, 0xcf, 0x80, 0x00, 0x44, 0x50, 0x00, 0x00, 0x4f, 0xc3, 0x00, 0x20, -0x46, 0x46, 0x02, 0x00, 0x58, 0x42, 0x09, 0xac, 0x58, 0x3e, 0x00, 0x00, 0x04, 0x22, 0x00, 0x00, -0x50, 0x42, 0x7f, 0xfc, 0x50, 0x01, 0x7f, 0xd0, 0x54, 0x10, 0x00, 0xff, 0x50, 0x01, 0x80, 0x01, -0x5c, 0xf0, 0x80, 0x10, 0x4e, 0xf2, 0x00, 0x04, 0x54, 0x30, 0x00, 0xff, 0x47, 0xe6, 0x02, 0x00, -0x59, 0xef, 0x09, 0x6c, 0x4c, 0x4f, 0x7f, 0xec, 0x48, 0x00, 0x00, 0x22, 0x44, 0x40, 0x00, 0x01, -0x4d, 0xc2, 0x40, 0x4e, 0x46, 0x46, 0x02, 0x01, 0x58, 0x42, 0x09, 0xac, 0x44, 0x30, 0x00, 0x00, -0x04, 0x02, 0x00, 0x00, 0x50, 0x42, 0x7f, 0xfc, 0x50, 0x10, 0x7f, 0xd0, 0x54, 0x60, 0x80, 0xff, -0x50, 0x01, 0x80, 0x01, 0x5c, 0xf3, 0x00, 0x10, 0x4e, 0xf2, 0x00, 0x04, 0x54, 0x30, 0x00, 0xff, -0x46, 0x26, 0x02, 0x01, 0x58, 0x21, 0x09, 0x6c, 0x4c, 0x41, 0x7f, 0xec, 0x5c, 0xf1, 0x80, 0x03, -0x4e, 0xf3, 0x00, 0x14, 0x4e, 0x53, 0x00, 0x12, 0x4f, 0xc3, 0x00, 0x08, 0x44, 0x50, 0x00, 0x01, -0x3e, 0x57, 0xe6, 0x44, 0x48, 0x00, 0x00, 0x24, 0x45, 0xe0, 0x00, 0x01, 0x4d, 0xcf, 0x40, 0x20, -0x3f, 0xc7, 0xe6, 0x45, 0x48, 0x00, 0x00, 0x1c, 0x4f, 0xc3, 0x00, 0x06, 0x3f, 0xc7, 0xe6, 0x44, -0x48, 0x00, 0x00, 0x16, 0x44, 0x20, 0x00, 0x01, 0x4d, 0xc1, 0x40, 0x12, 0x44, 0x50, 0x00, 0x00, -0x3e, 0x57, 0xe6, 0x45, 0x48, 0x00, 0x00, 0x0c, 0x2e, 0x67, 0xe2, 0x61, 0x54, 0x43, 0x00, 0x0f, -0x41, 0xe2, 0x08, 0x08, 0x40, 0x94, 0xf8, 0x00, 0x40, 0x94, 0x80, 0x10, 0x58, 0x1e, 0x00, 0x00, -0x44, 0x00, 0x00, 0x70, 0x49, 0xff, 0xf1, 0x6a, 0x46, 0x10, 0x0f, 0x00, 0x40, 0x60, 0x04, 0x02, -0x40, 0x43, 0x44, 0x09, 0x40, 0x54, 0x90, 0x00, 0x3e, 0x6f, 0xfa, 0xd0, 0x50, 0x92, 0xff, 0xc2, -0x40, 0x3e, 0x18, 0x00, 0x10, 0x91, 0x83, 0x9c, 0x46, 0x26, 0x02, 0x00, 0x04, 0x01, 0x02, 0x44, -0x54, 0x40, 0x00, 0x0f, 0x4f, 0xc3, 0x00, 0x38, 0x46, 0x01, 0x80, 0x80, 0x58, 0x00, 0x02, 0x48, -0x41, 0xe2, 0x00, 0x00, 0x46, 0x36, 0x02, 0x00, 0x40, 0x5f, 0x08, 0x08, 0x58, 0x31, 0x89, 0x20, -0x58, 0x2e, 0x00, 0x00, 0x04, 0x01, 0x80, 0x00, 0x47, 0xef, 0xf0, 0x0f, 0x59, 0xef, 0x0f, 0xff, -0x40, 0x10, 0x78, 0x02, 0x41, 0xe0, 0x20, 0x08, 0x40, 0x0f, 0x60, 0x09, 0x44, 0x60, 0x00, 0x7f, -0x4c, 0x03, 0x00, 0x06, 0x50, 0x63, 0x00, 0x02, 0x4c, 0x03, 0x40, 0x04, 0x14, 0x11, 0x80, 0x00, -0x40, 0xf1, 0x10, 0x06, 0x4e, 0xf2, 0x00, 0x06, 0x04, 0x12, 0x80, 0x00, 0x14, 0x11, 0x80, 0x00, -0x50, 0x21, 0x00, 0x01, 0x44, 0x00, 0x00, 0x10, 0x50, 0x31, 0x80, 0x04, 0x4c, 0x20, 0x7f, 0xdc, -0x48, 0x00, 0x00, 0x3c, 0x44, 0x50, 0x00, 0x01, 0x4d, 0xc2, 0xc0, 0x6e, 0x46, 0x51, 0x80, 0x80, -0x58, 0x52, 0x86, 0x48, 0x40, 0x32, 0x14, 0x00, 0x46, 0x06, 0x02, 0x01, 0x40, 0x31, 0x88, 0x08, -0x58, 0x00, 0x09, 0x20, 0x44, 0x10, 0x00, 0x00, 0x05, 0xe0, 0x00, 0x00, 0x46, 0x2f, 0xf0, 0x0f, -0x58, 0x21, 0x0f, 0xff, 0x40, 0x5f, 0x08, 0x02, 0x40, 0x2f, 0x20, 0x08, 0x40, 0x21, 0x60, 0x09, -0x45, 0xe0, 0x00, 0x7f, 0x4c, 0x2f, 0x00, 0x06, 0x45, 0xe0, 0x00, 0x81, 0x4c, 0x2f, 0x40, 0x04, -0x14, 0x50, 0x00, 0x00, 0x40, 0xf0, 0x90, 0x06, 0x4e, 0xf2, 0x00, 0x06, 0x04, 0x51, 0x80, 0x00, -0x14, 0x50, 0x00, 0x00, 0x50, 0x10, 0x80, 0x01, 0x44, 0x60, 0x00, 0x10, 0x50, 0x00, 0x00, 0x04, -0x4c, 0x13, 0x7f, 0xdc, 0x48, 0x00, 0x00, 0x1e, 0x46, 0x06, 0x02, 0x00, 0x58, 0x00, 0x09, 0x20, -0x3e, 0x3f, 0xfa, 0xd0, 0x46, 0x49, 0xfd, 0xff, 0x04, 0x20, 0x00, 0x00, 0x41, 0xe0, 0x0c, 0x00, -0x58, 0x42, 0x09, 0x14, 0x46, 0x66, 0x02, 0x00, 0x40, 0x1f, 0x10, 0x00, 0x50, 0x00, 0x00, 0x04, -0x58, 0x63, 0x09, 0x60, 0x14, 0x20, 0x80, 0x00, 0x4c, 0x03, 0x7f, 0xec, 0x48, 0x00, 0x00, 0x1c, -0x46, 0x06, 0x02, 0x01, 0x58, 0x00, 0x09, 0x20, 0x3f, 0xef, 0xfa, 0xd0, 0x46, 0x29, 0xfd, 0xfe, -0x04, 0x60, 0x00, 0x00, 0x40, 0x10, 0x78, 0x00, 0x58, 0x21, 0x09, 0x54, 0x40, 0x50, 0x88, 0x00, -0x14, 0x62, 0x80, 0x00, 0x46, 0x66, 0x02, 0x01, 0x50, 0x00, 0x00, 0x04, 0x58, 0x63, 0x09, 0x60, -0x4c, 0x03, 0x7f, 0xec, 0x49, 0xff, 0xf1, 0x68, 0x3c, 0x4d, 0xf9, 0x1d, 0x46, 0x08, 0x10, 0x60, -0x14, 0x40, 0x00, 0x02, 0x51, 0xff, 0x80, 0x1c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xa0, 0xbc, 0x46, 0x18, 0x18, 0x00, 0x3e, 0x6f, 0x83, 0x48, 0x44, 0x20, 0x00, 0x00, -0x58, 0x10, 0x80, 0x07, 0x44, 0x00, 0x00, 0x6c, 0x3e, 0x7f, 0x83, 0x84, 0x4b, 0xe0, 0x18, 0x01, -0x44, 0x10, 0x00, 0x00, 0x44, 0x00, 0x06, 0x10, 0x4b, 0xe0, 0x1c, 0x01, 0x42, 0x10, 0x5c, 0x08, -0x44, 0x20, 0x00, 0x00, 0x44, 0x00, 0x06, 0x10, 0x4b, 0xe0, 0x18, 0x01, 0x44, 0x10, 0x00, 0x00, -0x44, 0x00, 0x00, 0xe4, 0x4b, 0xe0, 0x1c, 0x01, 0x3c, 0x1d, 0xf9, 0x8b, 0x44, 0x80, 0x00, 0x0c, -0x42, 0x30, 0xa0, 0x24, 0x3e, 0x2f, 0xd6, 0xac, 0x40, 0x51, 0x88, 0x00, 0x40, 0x00, 0x28, 0x08, -0x40, 0x00, 0x28, 0x09, 0x04, 0x42, 0x80, 0x02, 0x44, 0x20, 0x00, 0x00, 0x40, 0x12, 0x58, 0x08, -0x40, 0x10, 0x04, 0x04, 0x44, 0x00, 0x00, 0xe4, 0x4b, 0xe0, 0x18, 0x01, 0x44, 0x10, 0x00, 0x00, -0x44, 0x00, 0x00, 0x70, 0x4b, 0xe0, 0x1c, 0x01, 0x42, 0x10, 0x7c, 0x08, 0x44, 0x20, 0x00, 0x00, -0x44, 0x00, 0x00, 0x70, 0x4b, 0xe0, 0x18, 0x01, 0x58, 0x04, 0x00, 0x00, 0x49, 0xff, 0x8c, 0x54, -0x44, 0x10, 0x00, 0x00, 0x44, 0x00, 0x00, 0x70, 0x4b, 0xe0, 0x1c, 0x01, 0x42, 0x10, 0x7c, 0x09, -0x44, 0x20, 0x00, 0x00, 0x44, 0x00, 0x00, 0x70, 0x4b, 0xe0, 0x18, 0x01, 0x44, 0x10, 0x00, 0x00, -0x58, 0x20, 0x80, 0x00, 0x44, 0x00, 0x00, 0x6c, 0x4b, 0xe0, 0x18, 0x01, 0x44, 0x10, 0x00, 0x00, -0x44, 0x00, 0x08, 0x34, 0x4b, 0xe0, 0x1c, 0x01, 0x40, 0x80, 0x1c, 0x08, 0x40, 0x44, 0x6c, 0x09, -0x3c, 0x4f, 0xff, 0x23, 0x44, 0x10, 0x00, 0x01, 0x44, 0x00, 0x00, 0xe4, 0x4b, 0xe0, 0x1c, 0x01, -0x42, 0x10, 0x54, 0x08, 0x44, 0x20, 0x00, 0x01, 0x44, 0x00, 0x00, 0xe4, 0x4b, 0xe0, 0x18, 0x01, -0x44, 0x10, 0x00, 0x01, 0x44, 0x00, 0x00, 0xe4, 0x4b, 0xe0, 0x1c, 0x01, 0x3c, 0x3d, 0xff, 0x23, -0x44, 0x2f, 0x07, 0xff, 0x40, 0x11, 0xac, 0x08, 0x40, 0x50, 0x80, 0x13, 0x40, 0x00, 0x08, 0x02, -0x40, 0x10, 0x14, 0x04, 0x44, 0x20, 0x00, 0x01, 0x44, 0x00, 0x00, 0xe4, 0x4b, 0xe0, 0x18, 0x01, -0x44, 0x10, 0x00, 0x01, 0x44, 0x00, 0x00, 0xe4, 0x4b, 0xe0, 0x1c, 0x01, 0x42, 0x10, 0x28, 0x09, -0x44, 0x20, 0x00, 0x01, 0x44, 0x00, 0x00, 0xe4, 0x4b, 0xe0, 0x18, 0x01, 0x44, 0x10, 0x00, 0x01, -0x44, 0x00, 0x00, 0xe4, 0x4b, 0xe0, 0x1c, 0x01, 0x3c, 0x3d, 0xff, 0x23, 0x40, 0x00, 0x14, 0x09, -0x40, 0x00, 0x14, 0x08, 0x54, 0x11, 0x80, 0x1f, 0x40, 0x10, 0x04, 0x04, 0x44, 0x20, 0x00, 0x01, -0x44, 0x00, 0x00, 0xe4, 0x4b, 0xe0, 0x18, 0x01, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x4e, 0x03, 0x00, 0x04, 0x49, 0xff, 0xff, 0x3a, -0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa8, 0xbc, -0x58, 0x60, 0x00, 0x00, 0x58, 0x71, 0x00, 0x00, 0x4e, 0x13, 0x00, 0x14, 0x3e, 0x0f, 0xda, 0xc0, -0x38, 0x10, 0x0b, 0x02, 0x3e, 0x8f, 0x83, 0x48, 0x44, 0x00, 0x00, 0xa0, 0x58, 0x23, 0x00, 0x00, -0x4b, 0xe0, 0x20, 0x01, 0x40, 0x03, 0x8c, 0x08, 0x3e, 0x1f, 0xda, 0xc0, 0x48, 0x00, 0x00, 0x16, -0x44, 0x50, 0x00, 0x01, 0x4c, 0x12, 0xc0, 0x1c, 0x3e, 0x3f, 0xdb, 0x40, 0x38, 0x11, 0x9f, 0x02, -0x44, 0x00, 0x00, 0xa0, 0x58, 0x23, 0x00, 0x00, 0x3e, 0x8f, 0x83, 0x48, 0x4b, 0xe0, 0x20, 0x01, -0x40, 0x03, 0x8c, 0x08, 0x3e, 0x1f, 0xdb, 0x40, 0x40, 0x40, 0x04, 0x00, 0x04, 0x12, 0x00, 0x01, -0x44, 0x00, 0x00, 0x70, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x20, 0x01, 0x46, 0x18, 0x20, 0x24, -0x58, 0x10, 0x80, 0xc0, 0x44, 0x00, 0x00, 0xc8, 0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xef, 0x70, -0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x8b, 0x90, 0x58, 0x13, 0x00, 0x00, 0x44, 0x00, 0x04, 0x1c, -0x49, 0xff, 0xef, 0x84, 0x40, 0x50, 0x70, 0x09, 0x4e, 0x53, 0xff, 0xf4, 0x46, 0x10, 0x20, 0x04, -0x58, 0x10, 0x80, 0xc0, 0x44, 0x00, 0x00, 0xc8, 0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xef, 0x58, -0x44, 0x00, 0x04, 0x68, 0x58, 0x13, 0x00, 0x00, 0x49, 0xff, 0xef, 0x70, 0x54, 0x73, 0x80, 0x01, -0x40, 0xa0, 0x00, 0x13, 0x4e, 0x73, 0x00, 0x0e, 0x58, 0x13, 0x00, 0x00, 0x44, 0x00, 0x04, 0x28, -0x49, 0xff, 0xef, 0x64, 0x40, 0x00, 0x40, 0x09, 0x40, 0x00, 0x40, 0x08, 0x48, 0x00, 0x00, 0x0c, -0x58, 0x13, 0x00, 0x00, 0x44, 0x00, 0x04, 0x28, 0x49, 0xff, 0xef, 0x58, 0x40, 0x00, 0x00, 0x13, -0x40, 0xa5, 0x40, 0x08, 0x40, 0x10, 0x28, 0x04, 0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x04, 0x28, -0x49, 0xff, 0xef, 0x2e, 0x3a, 0x6f, 0xa8, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, +0x40, 0x94, 0x80, 0x10, 0x14, 0x13, 0x02, 0x44, 0x4e, 0xa3, 0x02, 0x4e, 0x46, 0x06, 0x02, 0x01, +0x58, 0x00, 0x09, 0xac, 0x50, 0x40, 0x70, 0x00, 0x50, 0x52, 0x00, 0x04, 0x14, 0xaf, 0x80, 0x02, +0x14, 0x0f, 0x80, 0x03, 0x14, 0x4f, 0x80, 0x04, 0x14, 0x5f, 0x80, 0x05, 0x14, 0xaf, 0x80, 0x01, +0x4f, 0xc3, 0x00, 0x0c, 0x05, 0xef, 0x80, 0x04, 0x46, 0xa0, 0x0f, 0xf0, 0x04, 0x0f, 0x00, 0x00, +0x40, 0x20, 0x28, 0x02, 0x48, 0x00, 0x00, 0x0e, 0x44, 0x50, 0x00, 0x01, 0x4d, 0xc2, 0xc0, 0x10, +0x04, 0x2f, 0x80, 0x03, 0x46, 0x10, 0x0f, 0xf0, 0x04, 0x01, 0x00, 0x00, 0x40, 0x20, 0x04, 0x02, +0x40, 0x31, 0x40, 0x09, 0x14, 0x3f, 0x80, 0x01, 0x54, 0xa0, 0x00, 0xff, 0x5c, 0xf5, 0x00, 0x41, +0x4e, 0xf3, 0x00, 0x06, 0x50, 0x94, 0x80, 0x0a, 0x48, 0x00, 0x00, 0xaa, 0x5c, 0xf5, 0x00, 0x08, +0x4e, 0xf2, 0x00, 0x06, 0x50, 0x94, 0x80, 0x08, 0x48, 0x00, 0x00, 0xa2, 0x5c, 0xf5, 0x00, 0x10, +0x4e, 0xf2, 0x00, 0x06, 0x50, 0x94, 0x80, 0x06, 0x48, 0x00, 0x00, 0x9a, 0x5c, 0xf5, 0x00, 0x20, +0x4e, 0xf2, 0x00, 0x06, 0x50, 0x94, 0x80, 0x04, 0x48, 0x00, 0x00, 0x92, 0x5c, 0xf5, 0x00, 0x30, +0x4e, 0xf2, 0x00, 0x06, 0x50, 0x94, 0x80, 0x02, 0x48, 0x00, 0x00, 0x8a, 0x4f, 0xc3, 0x00, 0x22, +0x46, 0x26, 0x02, 0x00, 0x58, 0x21, 0x09, 0xac, 0x58, 0x0e, 0x00, 0x00, 0x04, 0xa1, 0x00, 0x00, +0x50, 0x30, 0x00, 0x01, 0x54, 0xa5, 0x00, 0xff, 0x50, 0x45, 0x7f, 0xd0, 0x54, 0x52, 0x00, 0xff, +0x50, 0x21, 0x7f, 0xfc, 0x5c, 0xf2, 0x80, 0x10, 0x4e, 0xf2, 0x00, 0x04, 0x54, 0x01, 0x80, 0xff, +0x47, 0xe6, 0x02, 0x00, 0x59, 0xef, 0x09, 0x6c, 0x4c, 0x2f, 0x7f, 0xea, 0x48, 0x00, 0x00, 0x24, +0x44, 0x00, 0x00, 0x01, 0x4d, 0xc0, 0x40, 0x24, 0x46, 0x26, 0x02, 0x01, 0x58, 0x21, 0x09, 0xac, +0x44, 0x00, 0x00, 0x00, 0x04, 0x31, 0x00, 0x00, 0x50, 0x21, 0x7f, 0xfc, 0x54, 0xa1, 0x80, 0xff, +0x50, 0x15, 0x7f, 0xd0, 0x54, 0x60, 0x80, 0xff, 0x50, 0x30, 0x00, 0x01, 0x5c, 0xf3, 0x00, 0x10, +0x4e, 0xf2, 0x00, 0x04, 0x54, 0x01, 0x80, 0xff, 0x46, 0x56, 0x02, 0x01, 0x58, 0x52, 0x89, 0x6c, +0x4c, 0x22, 0xff, 0xea, 0x5c, 0xf0, 0x00, 0x03, 0x4e, 0xf2, 0x00, 0x10, 0x04, 0x0f, 0x80, 0x01, +0x44, 0x20, 0x00, 0x7f, 0x4c, 0x01, 0x00, 0x3e, 0x50, 0x51, 0x00, 0x02, 0x4c, 0x02, 0x80, 0x3a, +0x44, 0x50, 0x00, 0x01, 0x48, 0x00, 0x01, 0x3a, 0x44, 0x70, 0x00, 0x03, 0x4c, 0x03, 0xc0, 0x06, +0x50, 0x94, 0xff, 0xfe, 0x48, 0x00, 0x00, 0x2c, 0x44, 0x80, 0x00, 0x04, 0x4c, 0x04, 0x40, 0x06, +0x50, 0x94, 0xff, 0xfc, 0x48, 0x00, 0x00, 0x24, 0x45, 0xe0, 0x00, 0x05, 0x4c, 0x0f, 0x40, 0x06, +0x50, 0x94, 0xff, 0xf8, 0x48, 0x00, 0x00, 0x1c, 0x44, 0x60, 0x00, 0x06, 0x4c, 0x03, 0x40, 0x06, +0x50, 0x94, 0xff, 0xf4, 0x48, 0x00, 0x00, 0x14, 0x44, 0x10, 0x00, 0x07, 0x4c, 0x00, 0xc0, 0x06, +0x50, 0x94, 0xff, 0xf0, 0x48, 0x00, 0x00, 0x0c, 0x44, 0x30, 0x00, 0x08, 0x4c, 0x01, 0xc0, 0x06, +0x50, 0x94, 0xff, 0xec, 0x48, 0x00, 0x00, 0x04, 0x50, 0x94, 0xff, 0xe8, 0x40, 0x94, 0x80, 0x10, +0x58, 0x1e, 0x00, 0x00, 0x44, 0x00, 0x00, 0x70, 0x49, 0xff, 0xf3, 0xd4, 0x40, 0x50, 0x20, 0x08, +0x40, 0x02, 0xf0, 0x09, 0x54, 0x10, 0x00, 0xff, 0x40, 0x70, 0x00, 0x10, 0x44, 0x80, 0x00, 0x00, +0x54, 0x54, 0x00, 0xff, 0x50, 0x34, 0x80, 0x08, 0x50, 0x23, 0xff, 0xff, 0x4c, 0x12, 0xc0, 0x10, +0x5e, 0xf4, 0xff, 0xe1, 0x4e, 0xf3, 0x00, 0x06, 0x44, 0x70, 0x00, 0x00, 0x48, 0x00, 0x00, 0x16, +0x44, 0x70, 0x00, 0x00, 0x44, 0x9f, 0xff, 0xe1, 0x48, 0x00, 0x00, 0x10, 0x5e, 0xf4, 0xff, 0xe1, +0x4e, 0xf2, 0x00, 0x0c, 0x40, 0x91, 0x80, 0x10, 0x40, 0x71, 0x00, 0x10, 0x50, 0x84, 0x00, 0x01, +0x5e, 0xf4, 0xff, 0xe1, 0x4e, 0xf3, 0xff, 0xde, 0x44, 0x50, 0x00, 0x0f, 0x50, 0x14, 0xff, 0xf8, +0x50, 0x03, 0x80, 0x01, 0x4c, 0x72, 0xc0, 0x08, 0x45, 0xe0, 0x00, 0x1f, 0x42, 0x94, 0xf8, 0x01, +0x48, 0x00, 0x00, 0x0e, 0x5e, 0xf4, 0x80, 0x20, 0x4e, 0xf3, 0x00, 0x0a, 0x40, 0x90, 0x80, 0x10, +0x40, 0x70, 0x00, 0x10, 0x5e, 0xf4, 0x80, 0x20, 0x4e, 0xf2, 0xff, 0xe8, 0x46, 0x20, 0x0f, 0x00, +0x54, 0x43, 0x80, 0xff, 0x44, 0x00, 0x00, 0x70, 0x58, 0x1e, 0x00, 0x00, 0x50, 0x32, 0x80, 0x05, +0x49, 0xff, 0xf3, 0xa6, 0x4f, 0xc3, 0x00, 0x10, 0x46, 0x10, 0xff, 0x00, 0x40, 0x64, 0xd0, 0x08, +0x40, 0x73, 0x04, 0x02, 0x46, 0x06, 0x02, 0x00, 0x42, 0x23, 0xf8, 0x08, 0x58, 0x00, 0x0d, 0x24, +0x48, 0x00, 0x00, 0x12, 0x44, 0x50, 0x00, 0x01, 0x4d, 0xc2, 0xc0, 0x10, 0x46, 0x00, 0xff, 0x00, +0x40, 0x24, 0xd0, 0x08, 0x40, 0x51, 0x00, 0x02, 0x46, 0x06, 0x02, 0x01, 0x42, 0x22, 0xf8, 0x08, +0x58, 0x00, 0x0d, 0x24, 0x14, 0x20, 0x00, 0x00, 0x46, 0x06, 0x02, 0x04, 0x46, 0x26, 0x02, 0x00, +0x58, 0x71, 0x00, 0x00, 0x58, 0x60, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x58, 0x81, 0x00, 0x00, +0x44, 0x40, 0x00, 0x03, 0x44, 0x50, 0x00, 0x10, 0x44, 0x31, 0x00, 0x68, 0x45, 0xe0, 0x00, 0x06, +0x14, 0x40, 0x00, 0x50, 0x14, 0x51, 0x00, 0xe0, 0x14, 0x33, 0x80, 0xc0, 0x14, 0x13, 0x00, 0x40, +0x15, 0xe4, 0x02, 0x44, 0x44, 0x40, 0x00, 0x7f, 0x04, 0x2f, 0x80, 0x01, 0x4c, 0x22, 0x00, 0x10, +0x50, 0x52, 0x00, 0x02, 0x4c, 0x22, 0x80, 0x0c, 0x46, 0x06, 0x02, 0x00, 0x46, 0x22, 0x03, 0xf0, +0x58, 0x00, 0x09, 0x0c, 0x58, 0x21, 0x06, 0x06, 0x48, 0x00, 0x00, 0x0a, 0x46, 0x06, 0x02, 0x00, +0x46, 0x21, 0x03, 0xf0, 0x58, 0x00, 0x09, 0x0c, 0x58, 0x21, 0x06, 0x06, 0x58, 0x73, 0x00, 0x00, +0x46, 0x80, 0x60, 0x70, 0x47, 0xe6, 0x02, 0x00, 0x46, 0x10, 0x00, 0x80, 0x58, 0x10, 0x87, 0x01, +0x14, 0x20, 0x00, 0x00, 0x14, 0x83, 0x80, 0x08, 0x14, 0x1f, 0x02, 0x40, 0x44, 0x60, 0x00, 0x00, +0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x8e, 0x78, 0x04, 0x0f, 0x80, 0x05, 0x04, 0x50, 0x00, 0x00, +0x42, 0x22, 0xf4, 0x0b, 0x4e, 0x23, 0x00, 0x12, 0x44, 0x50, 0x27, 0x11, 0x4c, 0x62, 0x80, 0x06, +0x50, 0x63, 0x00, 0x01, 0x48, 0xff, 0xff, 0xee, 0x3e, 0x0f, 0xd4, 0x10, 0x3e, 0x1f, 0xdc, 0x64, +0x44, 0x20, 0x17, 0x5c, 0x49, 0xff, 0x7b, 0x42, 0x04, 0x6f, 0x80, 0x02, 0x46, 0x16, 0x02, 0x00, +0x50, 0x43, 0x00, 0x01, 0x46, 0x00, 0x00, 0x80, 0x58, 0x50, 0x80, 0x00, 0x58, 0x00, 0x07, 0x00, +0x55, 0xe2, 0x00, 0xff, 0x44, 0x31, 0x00, 0x06, 0x44, 0x26, 0x07, 0x00, 0x44, 0x60, 0x00, 0x04, +0x15, 0xef, 0x80, 0x02, 0x14, 0x00, 0x82, 0x40, 0x14, 0x32, 0x82, 0x44, 0x14, 0x20, 0x82, 0x40, +0x4d, 0xe3, 0x7e, 0x30, 0x44, 0x50, 0x00, 0x00, 0x4f, 0xc3, 0x00, 0x20, 0x46, 0x46, 0x02, 0x00, +0x58, 0x42, 0x09, 0xac, 0x58, 0x3e, 0x00, 0x00, 0x04, 0x22, 0x00, 0x00, 0x50, 0x01, 0x80, 0x01, +0x50, 0x11, 0x7f, 0xd0, 0x55, 0xe0, 0x80, 0xff, 0x50, 0x42, 0x7f, 0xfc, 0x5c, 0xff, 0x00, 0x10, +0x4e, 0xf2, 0x00, 0x04, 0x54, 0x30, 0x00, 0xff, 0x46, 0x06, 0x02, 0x00, 0x58, 0x00, 0x09, 0x6c, +0x4c, 0x40, 0x7f, 0xec, 0x48, 0x00, 0x00, 0x22, 0x44, 0x30, 0x00, 0x01, 0x4d, 0xc1, 0xc0, 0x4e, +0x46, 0x46, 0x02, 0x01, 0x58, 0x42, 0x09, 0xac, 0x44, 0x30, 0x00, 0x00, 0x04, 0x12, 0x00, 0x00, +0x50, 0x01, 0x80, 0x01, 0x51, 0xe0, 0xff, 0xd0, 0x54, 0x6f, 0x00, 0xff, 0x50, 0x42, 0x7f, 0xfc, +0x5c, 0xf3, 0x00, 0x10, 0x4e, 0xf2, 0x00, 0x04, 0x54, 0x30, 0x00, 0xff, 0x46, 0x26, 0x02, 0x01, +0x58, 0x21, 0x09, 0x6c, 0x4c, 0x41, 0x7f, 0xec, 0x5c, 0xf1, 0x80, 0x03, 0x4e, 0xf3, 0x00, 0x14, +0x4e, 0x53, 0x00, 0x12, 0x4f, 0xc3, 0x00, 0x08, 0x44, 0x40, 0x00, 0x01, 0x3e, 0x47, 0xe3, 0xe4, +0x48, 0x00, 0x00, 0x24, 0x44, 0x00, 0x00, 0x01, 0x4d, 0xc0, 0x40, 0x20, 0x3f, 0xc7, 0xe3, 0xe5, +0x48, 0x00, 0x00, 0x1c, 0x4f, 0xc3, 0x00, 0x06, 0x3f, 0xc7, 0xe3, 0xe4, 0x48, 0x00, 0x00, 0x16, +0x44, 0x20, 0x00, 0x01, 0x4d, 0xc1, 0x40, 0x12, 0x44, 0x40, 0x00, 0x00, 0x3e, 0x47, 0xe3, 0xe5, +0x48, 0x00, 0x00, 0x0c, 0x2e, 0x37, 0xe0, 0x01, 0x54, 0x61, 0x80, 0x0f, 0x40, 0x03, 0x08, 0x08, +0x40, 0x94, 0x80, 0x00, 0x40, 0x94, 0x80, 0x10, 0x58, 0x1e, 0x00, 0x00, 0x44, 0x00, 0x00, 0x70, +0x49, 0xff, 0xf2, 0x60, 0x46, 0x30, 0x0f, 0x00, 0x40, 0x60, 0x0c, 0x02, 0x40, 0x03, 0x44, 0x09, +0x40, 0x44, 0x80, 0x00, 0x3e, 0x6f, 0xf8, 0x70, 0x50, 0x92, 0x7f, 0xc2, 0x40, 0x5e, 0x18, 0x00, +0x10, 0x92, 0x83, 0x9c, 0x46, 0x26, 0x02, 0x00, 0x04, 0x11, 0x02, 0x44, 0x54, 0x40, 0x80, 0x0f, +0x4f, 0xc3, 0x00, 0x38, 0x46, 0x11, 0x80, 0x80, 0x58, 0x10, 0x82, 0x48, 0x41, 0xe2, 0x04, 0x00, +0x46, 0x36, 0x02, 0x00, 0x40, 0x5f, 0x08, 0x08, 0x58, 0x31, 0x89, 0x20, 0x58, 0x1e, 0x00, 0x00, +0x05, 0xe1, 0x80, 0x00, 0x46, 0x0f, 0xf0, 0x0f, 0x58, 0x00, 0x0f, 0xff, 0x40, 0x2f, 0x00, 0x02, +0x40, 0x0f, 0x20, 0x08, 0x40, 0x00, 0x60, 0x09, 0x44, 0x60, 0x00, 0x7f, 0x4c, 0x03, 0x00, 0x06, +0x45, 0xe0, 0x00, 0x81, 0x4c, 0x0f, 0x40, 0x04, 0x14, 0x21, 0x80, 0x00, 0x40, 0xf0, 0x90, 0x06, +0x4e, 0xf2, 0x00, 0x06, 0x04, 0x22, 0x80, 0x00, 0x14, 0x21, 0x80, 0x00, 0x50, 0x10, 0x80, 0x01, +0x44, 0x60, 0x00, 0x10, 0x50, 0x31, 0x80, 0x04, 0x4c, 0x13, 0x7f, 0xdc, 0x48, 0x00, 0x00, 0x3c, +0x44, 0x50, 0x00, 0x01, 0x4d, 0xc2, 0xc0, 0x6e, 0x46, 0x11, 0x80, 0x80, 0x58, 0x10, 0x86, 0x48, +0x40, 0x32, 0x04, 0x00, 0x46, 0x06, 0x02, 0x01, 0x40, 0x31, 0x88, 0x08, 0x58, 0x00, 0x09, 0x20, +0x44, 0x10, 0x00, 0x00, 0x05, 0xe0, 0x00, 0x00, 0x46, 0x2f, 0xf0, 0x0f, 0x58, 0x21, 0x0f, 0xff, +0x40, 0x5f, 0x08, 0x02, 0x40, 0x2f, 0x20, 0x08, 0x40, 0x21, 0x60, 0x09, 0x45, 0xe0, 0x00, 0x7f, +0x4c, 0x2f, 0x00, 0x06, 0x45, 0xe0, 0x00, 0x81, 0x4c, 0x2f, 0x40, 0x04, 0x14, 0x50, 0x00, 0x00, +0x40, 0xf0, 0x90, 0x06, 0x4e, 0xf2, 0x00, 0x06, 0x04, 0x51, 0x80, 0x00, 0x14, 0x50, 0x00, 0x00, +0x50, 0x10, 0x80, 0x01, 0x44, 0x60, 0x00, 0x10, 0x50, 0x00, 0x00, 0x04, 0x4c, 0x13, 0x7f, 0xdc, +0x48, 0x00, 0x00, 0x1e, 0x46, 0x06, 0x02, 0x00, 0x58, 0x00, 0x09, 0x20, 0x3f, 0xef, 0xf8, 0x70, +0x46, 0x49, 0xfd, 0xff, 0x04, 0x20, 0x00, 0x00, 0x40, 0x10, 0x78, 0x00, 0x58, 0x42, 0x09, 0x14, +0x46, 0x66, 0x02, 0x00, 0x40, 0x30, 0x90, 0x00, 0x50, 0x00, 0x00, 0x04, 0x58, 0x63, 0x09, 0x60, +0x14, 0x21, 0x80, 0x00, 0x4c, 0x03, 0x7f, 0xec, 0x48, 0x00, 0x00, 0x1c, 0x46, 0x06, 0x02, 0x01, +0x58, 0x00, 0x09, 0x20, 0x3e, 0x1f, 0xf8, 0x70, 0x46, 0x39, 0xfd, 0xfe, 0x04, 0x60, 0x00, 0x00, +0x40, 0x20, 0x04, 0x00, 0x58, 0x31, 0x89, 0x54, 0x40, 0x51, 0x0c, 0x00, 0x14, 0x62, 0x80, 0x00, +0x46, 0x66, 0x02, 0x01, 0x50, 0x00, 0x00, 0x04, 0x58, 0x63, 0x09, 0x60, 0x4c, 0x03, 0x7f, 0xec, +0x49, 0xff, 0xf2, 0xa2, 0x3c, 0x4d, 0xf8, 0x85, 0x46, 0x08, 0x10, 0x60, 0x14, 0x40, 0x00, 0x02, +0x51, 0xff, 0x80, 0x1c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa8, 0xbc, +0x46, 0x18, 0x18, 0x00, 0x44, 0x20, 0x00, 0x00, 0x58, 0x10, 0x80, 0x07, 0x44, 0x00, 0x00, 0x6c, +0x49, 0xff, 0xf1, 0x6a, 0x44, 0x10, 0x00, 0x00, 0x44, 0x00, 0x06, 0x10, 0x49, 0xff, 0xf1, 0x82, +0x42, 0x10, 0x5c, 0x08, 0x44, 0x20, 0x00, 0x00, 0x44, 0x00, 0x06, 0x10, 0x49, 0xff, 0xf1, 0x5c, +0x3c, 0x6d, 0xf8, 0xf3, 0x44, 0x80, 0x00, 0x0c, 0x42, 0x43, 0x20, 0x24, 0x3e, 0x1f, 0xd4, 0x58, +0x40, 0x52, 0x04, 0x00, 0x04, 0x42, 0x80, 0x02, 0x46, 0x2f, 0xfc, 0x00, 0x44, 0x30, 0x00, 0x16, +0x44, 0x00, 0x00, 0xe4, 0x44, 0x10, 0x00, 0x00, 0x49, 0xff, 0xf1, 0x8a, 0x46, 0x18, 0x00, 0x00, +0x44, 0x20, 0x00, 0x00, 0x44, 0x00, 0x00, 0x70, 0x49, 0xff, 0xf1, 0xa4, 0x58, 0x04, 0x00, 0x00, +0x49, 0xff, 0x8c, 0xc2, 0x46, 0x18, 0x00, 0x00, 0x44, 0x00, 0x00, 0x70, 0x44, 0x20, 0x00, 0x00, +0x49, 0xff, 0xf1, 0xb0, 0x44, 0x10, 0x00, 0x00, 0x58, 0x20, 0x80, 0x00, 0x44, 0x00, 0x00, 0x6c, +0x49, 0xff, 0xf1, 0x2a, 0x44, 0x10, 0x00, 0x00, 0x44, 0x00, 0x08, 0x34, 0x49, 0xff, 0xf1, 0x42, +0x40, 0x00, 0x1c, 0x08, 0x40, 0x30, 0x6c, 0x09, 0x3e, 0x7f, 0xf8, 0x70, 0x14, 0x33, 0x80, 0x6f, +0x46, 0x10, 0x02, 0x00, 0x44, 0x00, 0x00, 0xe4, 0x44, 0x20, 0x00, 0x01, 0x49, 0xff, 0xf1, 0x7a, +0x04, 0x43, 0x80, 0x6f, 0x44, 0x30, 0x00, 0x0b, 0x44, 0x00, 0x00, 0xe4, 0x44, 0x10, 0x00, 0x01, +0x44, 0x20, 0xf8, 0x00, 0x49, 0xff, 0xf1, 0x4c, 0x44, 0x00, 0x00, 0xe4, 0x44, 0x10, 0x04, 0x00, +0x44, 0x20, 0x00, 0x01, 0x49, 0xff, 0xf1, 0x7e, 0x04, 0x43, 0x80, 0x6f, 0x44, 0x00, 0x00, 0xe4, +0x44, 0x10, 0x00, 0x01, 0x44, 0x20, 0x00, 0x1f, 0x44, 0x30, 0x00, 0x00, 0x49, 0xff, 0xf1, 0x38, +0x3a, 0x6f, 0xa8, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3b, 0xff, 0xfc, 0xbc, 0x51, 0xff, 0xff, 0xfc, +0x4e, 0x03, 0x00, 0x04, 0x49, 0xff, 0xff, 0x74, 0x51, 0xff, 0x80, 0x04, 0x3b, 0xff, 0xfc, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa8, 0xbc, 0x58, 0x80, 0x80, 0x00, 0x58, 0x60, 0x00, 0x00, +0x58, 0x71, 0x00, 0x00, 0x4e, 0x13, 0x00, 0x14, 0x3e, 0x0f, 0xd8, 0x6c, 0x38, 0x10, 0x0b, 0x02, +0x3e, 0x9f, 0x84, 0x80, 0x44, 0x00, 0x00, 0xa0, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x24, 0x01, +0x40, 0x03, 0x8c, 0x08, 0x3e, 0x1f, 0xd8, 0x6c, 0x48, 0x00, 0x00, 0x16, 0x44, 0x10, 0x00, 0x01, +0x4c, 0x80, 0xc0, 0x1c, 0x3e, 0x2f, 0xd8, 0xec, 0x38, 0x11, 0x1f, 0x02, 0x44, 0x00, 0x00, 0xa0, +0x58, 0x23, 0x00, 0x00, 0x3e, 0x9f, 0x84, 0x80, 0x4b, 0xe0, 0x24, 0x01, 0x40, 0x03, 0x8c, 0x08, +0x3e, 0x1f, 0xd8, 0xec, 0x40, 0x30, 0x04, 0x00, 0x04, 0x11, 0x80, 0x01, 0x44, 0x00, 0x00, 0x70, +0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x24, 0x01, 0x46, 0x18, 0x20, 0x24, 0x58, 0x10, 0x80, 0xc0, +0x44, 0x00, 0x00, 0xc8, 0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xf0, 0x9e, 0x44, 0x00, 0x00, 0x01, +0x49, 0xff, 0x8c, 0x22, 0x44, 0x00, 0x04, 0x1c, 0x58, 0x13, 0x00, 0x00, 0x49, 0xff, 0xf0, 0xb2, +0x40, 0x40, 0x70, 0x09, 0x4e, 0x43, 0xff, 0xf4, 0x46, 0x10, 0x20, 0x04, 0x58, 0x10, 0x80, 0xc0, +0x44, 0x00, 0x00, 0xc8, 0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xf0, 0x86, 0x44, 0x00, 0x04, 0x68, +0x58, 0x13, 0x00, 0x00, 0x49, 0xff, 0xf0, 0x9e, 0x40, 0x40, 0x00, 0x13, 0x4e, 0x82, 0x00, 0x0a, +0x44, 0x50, 0x00, 0x01, 0x4c, 0x82, 0xc0, 0x06, 0x44, 0x10, 0x04, 0x48, 0x48, 0x00, 0x00, 0x04, +0x44, 0x10, 0x04, 0x28, 0x40, 0x23, 0x84, 0x09, 0x40, 0x01, 0x08, 0x08, 0x54, 0x33, 0x80, 0x01, +0x40, 0x00, 0x80, 0x00, 0x4e, 0x33, 0x00, 0x08, 0x58, 0x13, 0x00, 0x00, 0x44, 0x20, 0xff, 0xff, +0x48, 0x00, 0x00, 0x08, 0x58, 0x13, 0x00, 0x00, 0x44, 0x2f, 0x00, 0x00, 0x44, 0x30, 0x00, 0x10, +0x49, 0xff, 0xf0, 0x9e, 0x3a, 0x6f, 0xa8, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x46, 0x18, 0x03, 0x00, 0x58, 0x20, 0x00, 0x00, 0x58, 0x70, 0x00, 0x00, -0x58, 0x10, 0x80, 0x08, 0x44, 0x00, 0x07, 0xdc, 0x49, 0xff, 0xef, 0x1a, 0x44, 0x00, 0x00, 0x02, -0x49, 0xff, 0x8b, 0x3a, 0x46, 0x10, 0x03, 0x00, 0x58, 0x10, 0x80, 0x08, 0x58, 0x23, 0x80, 0x00, -0x44, 0x00, 0x07, 0xdc, 0x49, 0xff, 0xef, 0x0c, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa8, 0xbc, 0x40, 0xa0, 0x00, 0x13, 0x58, 0x60, 0x80, 0x00, -0x4e, 0xa3, 0x00, 0x0c, 0x3e, 0x0f, 0xc9, 0x94, 0x3e, 0x1f, 0xd6, 0x30, 0x44, 0x20, 0x08, 0xc8, -0x49, 0xff, 0x77, 0xfc, 0x48, 0x00, 0x00, 0x00, 0x49, 0xff, 0xc4, 0x40, 0x3e, 0x7f, 0x83, 0x84, -0x58, 0x13, 0x00, 0x00, 0x50, 0xa5, 0x7f, 0xff, 0x44, 0x00, 0x00, 0xb0, 0x3c, 0x9d, 0xf9, 0x8b, -0x4b, 0xe0, 0x1c, 0x01, 0x44, 0x40, 0x00, 0x0f, 0x58, 0x35, 0x00, 0x00, 0x42, 0x33, 0x10, 0x73, -0x3e, 0x1f, 0xfa, 0xd0, 0x38, 0x50, 0x8d, 0x01, 0x46, 0x2f, 0x80, 0xff, 0x46, 0x40, 0x7f, 0x00, -0x40, 0x32, 0xd0, 0x08, 0x58, 0x21, 0x0f, 0xff, 0x40, 0x81, 0x90, 0x02, 0x40, 0x00, 0x08, 0x02, -0x40, 0x10, 0x20, 0x04, 0x58, 0x23, 0x00, 0x00, 0x3e, 0x8f, 0x83, 0x48, 0x44, 0x00, 0x00, 0xb0, -0x40, 0xa5, 0x08, 0x08, 0x4b, 0xe0, 0x20, 0x01, 0x40, 0x95, 0x24, 0x00, 0x58, 0x13, 0x00, 0x00, -0x44, 0x00, 0x00, 0xb0, 0x4b, 0xe0, 0x1c, 0x01, 0x50, 0x94, 0x80, 0x01, 0x3e, 0x1f, 0xd6, 0xd0, -0x38, 0x50, 0xa7, 0x01, 0x44, 0x43, 0xff, 0xf0, 0x40, 0x32, 0x90, 0x08, 0x44, 0x2c, 0x00, 0x0f, -0x40, 0x11, 0x90, 0x02, 0x40, 0x00, 0x08, 0x02, 0x40, 0x10, 0x04, 0x04, 0x58, 0x23, 0x00, 0x00, -0x44, 0x00, 0x00, 0xb0, 0x4b, 0xe0, 0x20, 0x01, 0x58, 0x13, 0x00, 0x00, 0x44, 0x00, 0x01, 0x0c, -0x4b, 0xe0, 0x1c, 0x01, 0x40, 0x94, 0x8c, 0x08, 0x3e, 0x5f, 0xd6, 0xd0, 0x40, 0x94, 0x94, 0x00, -0x02, 0x44, 0x80, 0x01, 0x46, 0x2c, 0x00, 0xff, 0x46, 0x33, 0xff, 0x00, 0x40, 0x12, 0x50, 0x08, -0x58, 0x21, 0x0f, 0xff, 0x40, 0x50, 0x8c, 0x02, 0x40, 0x00, 0x08, 0x02, 0x40, 0x10, 0x14, 0x04, -0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x01, 0x0c, 0x4b, 0xe0, 0x20, 0x01, 0x58, 0x13, 0x00, 0x00, -0x44, 0x00, 0x01, 0x0c, 0x4b, 0xe0, 0x1c, 0x01, 0x04, 0x34, 0x80, 0x01, 0x40, 0x00, 0x50, 0x09, -0x40, 0x00, 0x50, 0x08, 0x40, 0x11, 0xb0, 0x08, 0x40, 0x10, 0xb0, 0x09, 0x40, 0x10, 0x04, 0x04, -0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x01, 0x0c, 0x4b, 0xe0, 0x20, 0x01, 0x46, 0x1f, 0xff, 0x0c, -0x58, 0x10, 0x80, 0x10, 0x44, 0x00, 0x00, 0xb4, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x20, 0x01, -0x3e, 0x8e, 0xbb, 0x90, 0x44, 0x00, 0x00, 0x64, 0x4b, 0xe0, 0x20, 0x01, 0x58, 0x94, 0x00, 0x00, -0x44, 0x80, 0x00, 0x00, 0x44, 0x00, 0x00, 0x64, 0x4b, 0xe0, 0x24, 0x01, 0x58, 0x13, 0x00, 0x00, -0x44, 0x00, 0x04, 0x24, 0x4b, 0xe0, 0x1c, 0x01, 0x42, 0x00, 0x68, 0x0b, 0x4e, 0x03, 0x00, 0x12, -0x44, 0x50, 0x00, 0x0b, 0x4c, 0x82, 0x80, 0x06, 0x50, 0x84, 0x00, 0x01, 0x48, 0xff, 0xff, 0xec, -0x3e, 0x0f, 0xd6, 0x64, 0x3e, 0x1f, 0xe1, 0x64, 0x44, 0x20, 0x09, 0x0b, 0x49, 0xff, 0x77, 0x3e, +0x58, 0x10, 0x80, 0x08, 0x44, 0x00, 0x07, 0xdc, 0x49, 0xff, 0xf0, 0x46, 0x44, 0x00, 0x00, 0x02, +0x49, 0xff, 0x8b, 0xca, 0x46, 0x10, 0x03, 0x00, 0x58, 0x10, 0x80, 0x08, 0x58, 0x23, 0x80, 0x00, +0x44, 0x00, 0x07, 0xdc, 0x49, 0xff, 0xf0, 0x38, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x40, 0x00, 0x00, 0x13, +0x58, 0x60, 0x80, 0x00, 0x4e, 0x03, 0x00, 0x0c, 0x3e, 0x0f, 0xc7, 0x40, 0x3e, 0x1f, 0xd3, 0xdc, +0x44, 0x20, 0x09, 0x12, 0x49, 0xff, 0x78, 0x8a, 0x48, 0x00, 0x00, 0x00, 0x50, 0x90, 0x7f, 0xff, +0x49, 0xff, 0xc5, 0x12, 0x44, 0x20, 0x00, 0x0f, 0x58, 0x04, 0x80, 0x00, 0x42, 0x03, 0x08, 0x73, +0x3e, 0x7f, 0xf8, 0x70, 0x38, 0x43, 0x81, 0x01, 0x46, 0x20, 0x7f, 0x00, 0x3c, 0x8d, 0xf8, 0xf3, +0x3e, 0x7f, 0x85, 0x08, 0x44, 0x00, 0x00, 0xb0, 0x58, 0x13, 0x00, 0x00, 0x44, 0x30, 0x00, 0x14, +0x4b, 0xe0, 0x1c, 0x01, 0x40, 0x44, 0x88, 0x08, 0x40, 0x32, 0x20, 0x00, 0x50, 0x91, 0x80, 0x01, +0x3e, 0x2f, 0xd4, 0x7c, 0x38, 0x41, 0x27, 0x01, 0x44, 0x00, 0x00, 0xb0, 0x58, 0x13, 0x00, 0x00, +0x44, 0x23, 0xff, 0xf0, 0x44, 0x30, 0x00, 0x04, 0x4b, 0xe0, 0x1c, 0x01, 0x40, 0x04, 0x8c, 0x08, +0x3e, 0x1f, 0xd4, 0x7c, 0x40, 0x80, 0x04, 0x00, 0x02, 0x44, 0x00, 0x01, 0x46, 0x23, 0xff, 0x00, +0x44, 0x00, 0x01, 0x0c, 0x58, 0x13, 0x00, 0x00, 0x44, 0x30, 0x00, 0x14, 0x4b, 0xe0, 0x1c, 0x01, +0x04, 0x44, 0x00, 0x01, 0x46, 0x20, 0x00, 0xff, 0x44, 0x30, 0x00, 0x00, 0x58, 0x21, 0x0f, 0xff, +0x44, 0x00, 0x01, 0x0c, 0x58, 0x13, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x1f, 0xff, 0x0c, +0x58, 0x10, 0x80, 0x10, 0x44, 0x00, 0x00, 0xb4, 0x58, 0x23, 0x00, 0x00, 0x3e, 0x7e, 0xbb, 0x90, +0x49, 0xff, 0xef, 0xc2, 0x44, 0x00, 0x00, 0x64, 0x4b, 0xe0, 0x1c, 0x01, 0x58, 0x93, 0x80, 0x00, +0x44, 0x70, 0x00, 0x00, 0x44, 0x00, 0x00, 0x64, 0x4b, 0xe0, 0x24, 0x01, 0x58, 0x13, 0x00, 0x00, +0x44, 0x00, 0x04, 0x24, 0x49, 0xff, 0xef, 0xce, 0x42, 0x30, 0x68, 0x0b, 0x4e, 0x33, 0x00, 0x12, +0x44, 0x50, 0x00, 0x0b, 0x4c, 0x72, 0x80, 0x06, 0x50, 0x73, 0x80, 0x01, 0x48, 0xff, 0xff, 0xec, +0x3e, 0x0f, 0xd4, 0x10, 0x3e, 0x1f, 0xdf, 0x10, 0x44, 0x20, 0x09, 0x55, 0x49, 0xff, 0x78, 0x06, 0x46, 0x13, 0xff, 0x0c, 0x58, 0x10, 0x80, 0x10, 0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x00, 0xb4, -0x49, 0xff, 0xee, 0x2e, 0x3a, 0x6f, 0xa8, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa4, 0xbc, -0x51, 0xff, 0xff, 0xfc, 0x58, 0x60, 0x00, 0x00, 0x40, 0x81, 0x00, 0x13, 0x58, 0x70, 0x80, 0x00, -0x58, 0x04, 0x00, 0x00, 0x58, 0x13, 0x00, 0x00, 0x58, 0x91, 0x80, 0x00, 0x49, 0xff, 0xff, 0x14, -0x58, 0x03, 0x80, 0x00, 0x58, 0x13, 0x00, 0x00, 0x49, 0xff, 0xee, 0x92, 0x58, 0x03, 0x80, 0x00, -0x58, 0x13, 0x00, 0x00, 0x49, 0xff, 0xf0, 0xcc, 0x2e, 0x07, 0xe6, 0x20, 0x4e, 0x03, 0x00, 0x06, -0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xf8, 0x74, 0x58, 0x03, 0x80, 0x00, 0x58, 0x13, 0x00, 0x00, -0x49, 0xff, 0xee, 0x7e, 0x58, 0x03, 0x80, 0x00, 0x58, 0x14, 0x80, 0x00, 0x49, 0xff, 0xf2, 0x08, -0x58, 0x03, 0x00, 0x00, 0x58, 0x14, 0x00, 0x00, 0x49, 0xff, 0xef, 0xd6, 0x51, 0xff, 0x80, 0x04, -0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xfc, -0x44, 0x70, 0x00, 0x00, 0x49, 0xff, 0xf8, 0x46, 0x44, 0x80, 0x00, 0x01, 0x49, 0xff, 0xfd, 0x62, -0x3e, 0x9f, 0xe4, 0x10, 0x48, 0x00, 0x00, 0x44, 0x4e, 0x73, 0x00, 0x06, 0x44, 0x80, 0x00, 0x01, -0x48, 0x00, 0x00, 0x08, 0x56, 0x03, 0x80, 0x01, 0x44, 0x10, 0x00, 0x00, 0x40, 0x80, 0x80, 0x1a, -0x44, 0x60, 0x00, 0x00, 0x48, 0x00, 0x00, 0x26, 0x2e, 0x37, 0xe6, 0x20, 0x44, 0x50, 0x00, 0x01, -0x4c, 0x32, 0x80, 0x0a, 0x38, 0x14, 0x9b, 0x02, 0x4e, 0x12, 0x00, 0x18, 0x00, 0x01, 0x00, 0x04, -0x48, 0x00, 0x00, 0x0e, 0x38, 0x14, 0x9b, 0x02, 0x40, 0x23, 0x0c, 0x08, 0x3e, 0x5f, 0xe4, 0x10, -0x40, 0x01, 0x14, 0x00, 0x4e, 0x12, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x05, 0x4e, 0x02, 0x00, 0x06, -0x58, 0x04, 0x00, 0x00, 0x4b, 0xe0, 0x04, 0x01, 0x50, 0x63, 0x00, 0x01, 0x54, 0x63, 0x00, 0xff, -0x2f, 0xe7, 0xe6, 0x3c, 0x40, 0x13, 0x0c, 0x08, 0x3e, 0x3f, 0xe4, 0x10, 0x40, 0x20, 0x8c, 0x00, -0x40, 0xf3, 0x78, 0x06, 0x4e, 0xf3, 0xff, 0xd2, 0x50, 0x73, 0x80, 0x01, 0x3c, 0x4d, 0xf9, 0x8d, -0x40, 0xf3, 0x90, 0x06, 0x4e, 0xf3, 0xff, 0xba, 0x49, 0xff, 0xf7, 0x88, 0x44, 0x80, 0x00, 0x07, -0x3e, 0x7f, 0xe4, 0x0c, 0x44, 0x60, 0x00, 0x00, 0x12, 0x83, 0x80, 0x00, 0x3c, 0x8b, 0xf3, 0x09, -0x3c, 0x8b, 0xf3, 0x08, 0x3c, 0x6f, 0xf9, 0x85, 0x58, 0x93, 0x80, 0x00, 0x48, 0x00, 0x00, 0x08, -0x02, 0x24, 0x80, 0x00, 0x50, 0x63, 0x00, 0x01, 0x49, 0xff, 0xff, 0x52, 0x3d, 0xed, 0xf9, 0x8d, -0x44, 0x10, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, 0x58, 0x30, 0x80, 0x00, 0x40, 0xf3, 0x78, 0x06, -0x4e, 0xf3, 0xff, 0xf0, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xf4, 0x46, 0x30, 0x02, 0x4b, 0x55, 0xc0, 0x00, 0xff, -0x46, 0x20, 0x04, 0xc4, 0x58, 0x31, 0x8a, 0x58, 0x58, 0x21, 0x0b, 0x40, 0x5c, 0x5e, 0x00, 0x0f, -0x58, 0x80, 0x80, 0x00, 0x40, 0x01, 0x94, 0x1b, 0x40, 0x01, 0x14, 0x1a, 0x58, 0x1e, 0x00, 0x00, -0x58, 0x24, 0x00, 0x00, 0x58, 0x62, 0x00, 0x00, 0x49, 0xff, 0xb5, 0x72, 0x58, 0xa0, 0x00, 0x00, -0x44, 0x50, 0x00, 0x04, 0x4c, 0x62, 0xc0, 0x04, 0x48, 0x00, 0x00, 0x06, 0x44, 0x50, 0x00, 0x05, -0x4c, 0x62, 0xc0, 0x06, 0x58, 0x73, 0x00, 0x00, 0x48, 0x00, 0x00, 0x06, 0x44, 0x70, 0x00, 0x00, -0x40, 0x73, 0xa0, 0x06, 0x49, 0xff, 0xf7, 0x96, 0x44, 0x90, 0x00, 0x00, 0x3e, 0x4f, 0xe6, 0x34, -0x3e, 0x5f, 0xa6, 0xf8, 0x48, 0x00, 0x00, 0x0e, 0x14, 0x4f, 0x80, 0x01, 0x14, 0x5f, 0x80, 0x00, -0x50, 0x94, 0x80, 0x01, 0x4b, 0xe0, 0x14, 0x01, 0x04, 0x5f, 0x80, 0x00, 0x04, 0x4f, 0x80, 0x01, -0x05, 0xe2, 0x00, 0x00, 0x58, 0x04, 0x80, 0x00, 0x58, 0x13, 0x80, 0x00, 0x58, 0x25, 0x00, 0x00, -0x58, 0x34, 0x00, 0x00, 0x40, 0xf4, 0xf8, 0x06, 0x4e, 0xf3, 0xff, 0xe8, 0x58, 0x05, 0x00, 0x00, -0x49, 0xff, 0xf2, 0x90, 0x49, 0xff, 0xf7, 0x02, 0x3e, 0x87, 0xe6, 0x18, 0x44, 0x00, 0x00, 0x01, -0x3d, 0xcb, 0xf3, 0x08, 0x3c, 0xab, 0xf3, 0x09, 0x3c, 0x7f, 0xf9, 0x85, 0x3e, 0x67, 0xe6, 0x19, -0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, -0x51, 0xff, 0xff, 0xd4, 0x14, 0x0f, 0x80, 0x01, 0x3c, 0x03, 0xf2, 0x06, 0x04, 0x1f, 0x80, 0x01, -0x49, 0xff, 0xfd, 0xea, 0x04, 0x2f, 0x80, 0x01, 0x46, 0x18, 0x1b, 0xd6, 0x58, 0x10, 0x8c, 0x7f, -0x44, 0x00, 0x00, 0x6c, 0x49, 0xff, 0xec, 0xe4, 0x04, 0x2f, 0x80, 0x01, 0x46, 0x18, 0xc0, 0x08, -0x58, 0x10, 0x82, 0xd0, 0x44, 0x00, 0x00, 0x44, 0x49, 0xff, 0xec, 0xda, 0x04, 0x2f, 0x80, 0x01, -0x46, 0x1f, 0x8b, 0x00, 0x58, 0x10, 0x87, 0x27, 0x44, 0x00, 0x00, 0x48, 0x49, 0xff, 0xec, 0xd0, -0x04, 0x4f, 0x80, 0x01, 0x44, 0x50, 0x00, 0x0c, 0x42, 0x32, 0x14, 0x24, 0x3e, 0x1f, 0xfa, 0xd0, -0x40, 0x01, 0x84, 0x00, 0x14, 0x0f, 0x80, 0x02, 0x50, 0x22, 0x00, 0x6e, 0x51, 0xc2, 0x00, 0x6c, -0x04, 0x3f, 0x80, 0x01, 0x04, 0x1f, 0x80, 0x02, 0x40, 0xa1, 0x0c, 0x08, 0x40, 0x7e, 0x0c, 0x08, -0x3e, 0x9f, 0xfa, 0xd0, 0x58, 0x64, 0x80, 0x00, 0x44, 0x50, 0x00, 0x00, 0x40, 0x85, 0x24, 0x00, -0x40, 0x43, 0x98, 0x00, 0x40, 0x21, 0x8c, 0x08, 0x50, 0x00, 0x83, 0x4c, 0x14, 0x5f, 0x80, 0x05, -0x14, 0x8f, 0x80, 0x07, 0x14, 0x4f, 0x80, 0x08, 0x14, 0x5f, 0x80, 0x03, 0x14, 0x2f, 0x80, 0x04, -0x14, 0x0f, 0x80, 0x06, 0x46, 0x10, 0x06, 0x10, 0x04, 0x2f, 0x80, 0x01, 0x58, 0x10, 0x80, 0x88, -0x44, 0x00, 0x00, 0xe8, 0x49, 0xff, 0xec, 0x94, 0x2e, 0x77, 0xe6, 0x20, 0x4e, 0x73, 0x00, 0x08, -0x46, 0x10, 0x06, 0x10, 0x58, 0x10, 0x80, 0x88, 0x48, 0x00, 0x00, 0x06, 0x46, 0x10, 0x06, 0x10, -0x58, 0x10, 0x80, 0x87, 0x04, 0x2f, 0x80, 0x01, 0x44, 0x00, 0x00, 0xe8, 0x49, 0xff, 0xec, 0x80, -0x04, 0x9f, 0x80, 0x03, 0x4e, 0x93, 0x00, 0x10, 0x46, 0x10, 0x50, 0x00, 0x04, 0x2f, 0x80, 0x01, -0x58, 0x10, 0x8b, 0xb8, 0x44, 0x00, 0x00, 0x70, 0x49, 0xff, 0xec, 0x72, 0x46, 0x18, 0x00, 0x00, -0x48, 0x00, 0x00, 0x0e, 0x46, 0x10, 0x50, 0x00, 0x04, 0x2f, 0x80, 0x01, 0x58, 0x10, 0x8b, 0xb8, -0x44, 0x00, 0x00, 0x70, 0x49, 0xff, 0xec, 0x64, 0x46, 0x19, 0x00, 0x00, 0x04, 0x2f, 0x80, 0x01, -0x44, 0x00, 0x00, 0xa0, 0x49, 0xff, 0xec, 0x5c, 0x46, 0x18, 0x20, 0x24, 0x04, 0x2f, 0x80, 0x01, -0x58, 0x10, 0x80, 0xc0, 0x44, 0x00, 0x00, 0xc8, 0x49, 0xff, 0xec, 0x52, 0x44, 0x00, 0x00, 0x01, -0x49, 0xff, 0x88, 0x72, 0x04, 0x1f, 0x80, 0x01, 0x44, 0x00, 0x04, 0x1c, 0x49, 0xff, 0xec, 0x66, -0x40, 0xa0, 0x04, 0x08, 0x40, 0xa5, 0x74, 0x09, 0x4e, 0xa3, 0xff, 0xf2, 0x04, 0x2f, 0x80, 0x01, -0x46, 0x10, 0x20, 0x24, 0x58, 0x10, 0x80, 0xc0, 0x44, 0x00, 0x00, 0xc8, 0x49, 0xff, 0xec, 0x38, -0x46, 0x46, 0x02, 0x00, 0x58, 0x32, 0x00, 0x00, 0x58, 0x01, 0x80, 0x00, 0x44, 0x50, 0x00, 0x27, -0x44, 0x10, 0x00, 0x02, 0x14, 0x52, 0x00, 0x00, 0x14, 0x51, 0x80, 0x01, 0x14, 0x10, 0x00, 0x83, -0x04, 0x2f, 0x80, 0x01, 0x4e, 0x23, 0x00, 0x20, 0x47, 0xe6, 0x02, 0x00, 0x47, 0xc0, 0x40, 0x00, -0x46, 0xa0, 0x02, 0x74, 0x46, 0x3c, 0x00, 0x00, 0x46, 0x7f, 0x00, 0x00, 0x46, 0x44, 0x38, 0x00, -0x59, 0xef, 0x02, 0x00, 0x50, 0x2f, 0x0b, 0x00, 0x58, 0xa5, 0x00, 0x27, 0x50, 0x11, 0x00, 0x04, -0x58, 0x31, 0x84, 0x00, 0x50, 0x90, 0xb5, 0x10, 0x50, 0x81, 0x7d, 0x08, 0x50, 0x60, 0x80, 0x20, -0x48, 0x00, 0x00, 0x24, 0x04, 0x6f, 0x80, 0x01, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x62, 0xc0, 0x2c, -0x47, 0xe6, 0x02, 0x00, 0x47, 0xc1, 0x40, 0x00, 0x46, 0xa0, 0x02, 0x74, 0x46, 0x3c, 0x00, 0x00, -0x46, 0x7f, 0x00, 0x00, 0x46, 0x44, 0x38, 0x00, 0x59, 0xef, 0x02, 0x00, 0x50, 0x2f, 0x1b, 0x00, -0x58, 0xa5, 0x00, 0x27, 0x50, 0x11, 0x00, 0x04, 0x58, 0x31, 0x84, 0x00, 0x50, 0x90, 0xb5, 0x10, -0x50, 0x81, 0x7d, 0x08, 0x50, 0x60, 0x80, 0x20, 0x15, 0xcf, 0x00, 0x00, 0x14, 0xa1, 0x00, 0x00, -0x44, 0xa0, 0x05, 0x95, 0x14, 0x30, 0x80, 0x00, 0x14, 0xa4, 0x80, 0x00, 0x14, 0x74, 0x00, 0x00, -0x14, 0x43, 0x00, 0x00, 0x58, 0x10, 0x00, 0x00, 0x44, 0x30, 0x08, 0x00, 0x58, 0x60, 0x00, 0x00, -0x58, 0x70, 0x00, 0x00, 0x46, 0xa6, 0x02, 0x04, 0x59, 0xc0, 0x00, 0x00, 0x14, 0x30, 0x80, 0x56, -0x44, 0x40, 0x00, 0x00, 0x58, 0x50, 0x00, 0x00, 0x59, 0xe0, 0x00, 0x00, 0x46, 0x04, 0x40, 0x0c, -0x58, 0x90, 0x80, 0x00, 0x46, 0x80, 0x02, 0x20, 0x44, 0x30, 0x00, 0x33, 0x44, 0x10, 0x00, 0x10, -0x14, 0x43, 0x00, 0x57, 0x58, 0x84, 0x0d, 0xa2, 0x14, 0x43, 0x80, 0x58, 0x58, 0x22, 0x80, 0x00, -0x14, 0x35, 0x00, 0x50, 0x14, 0x1e, 0x00, 0xe0, 0x58, 0x00, 0x01, 0x00, 0x45, 0xc1, 0x50, 0x68, -0x15, 0xc2, 0x80, 0xc0, 0x14, 0x0f, 0x01, 0xc1, 0x14, 0x84, 0x81, 0xb3, 0x44, 0x80, 0x13, 0x00, -0x14, 0x81, 0x00, 0x82, 0x04, 0x7f, 0x80, 0x03, 0x4e, 0x73, 0x00, 0x18, 0x05, 0xef, 0x80, 0x03, -0x58, 0x55, 0x00, 0x00, 0x58, 0x91, 0x00, 0x00, 0x46, 0x07, 0xa8, 0x28, 0x46, 0x8a, 0x77, 0xb6, -0x58, 0x00, 0x03, 0x80, 0x58, 0x84, 0x0f, 0x71, 0x15, 0xe2, 0x80, 0x40, 0x14, 0x04, 0x80, 0x60, -0x14, 0x81, 0x00, 0x61, 0x48, 0x00, 0x00, 0x18, 0x58, 0x65, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, -0x58, 0x41, 0x00, 0x00, 0x46, 0x77, 0xa8, 0x38, 0x59, 0xc1, 0x00, 0x00, 0x46, 0xaa, 0x67, 0xb6, -0x58, 0x73, 0x84, 0x80, 0x58, 0xa5, 0x0f, 0x71, 0x14, 0x13, 0x00, 0x40, 0x14, 0x72, 0x00, 0x60, -0x14, 0xae, 0x00, 0x61, 0x46, 0x86, 0x02, 0x00, 0x46, 0x36, 0x02, 0x00, 0x47, 0xc0, 0x90, 0x70, -0x59, 0xe4, 0x00, 0x00, 0x46, 0x50, 0x14, 0x20, 0x58, 0x31, 0x81, 0x50, 0x59, 0xce, 0x00, 0x01, -0x44, 0x90, 0x04, 0x1f, 0x14, 0x94, 0x00, 0x64, 0x15, 0xc1, 0x80, 0x00, 0x14, 0x5f, 0x00, 0x55, -0x50, 0x0e, 0x00, 0x04, 0x58, 0x94, 0x00, 0x00, 0x46, 0x80, 0x21, 0x00, 0x50, 0x21, 0x80, 0x08, -0x14, 0x0f, 0x80, 0x09, 0x04, 0x7f, 0x80, 0x05, 0x58, 0xa1, 0x80, 0x00, 0x58, 0x84, 0x00, 0x01, -0x59, 0xc1, 0x00, 0x00, 0x46, 0x40, 0x90, 0x70, 0x58, 0x42, 0x00, 0x05, 0x14, 0x45, 0x00, 0x00, -0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x87, 0x60, 0x04, 0x14, 0x80, 0x65, 0x54, 0x60, 0x80, 0x1f, -0x4e, 0x63, 0xff, 0xf8, 0x14, 0x85, 0x00, 0x00, 0x04, 0x2f, 0x80, 0x09, 0x04, 0x6e, 0x00, 0x00, -0x14, 0x25, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x87, 0x4e, 0x04, 0x34, 0x80, 0x65, -0x54, 0x01, 0x80, 0x1f, 0x4e, 0x03, 0xff, 0xf8, 0x14, 0x85, 0x00, 0x00, 0x54, 0x13, 0x0f, 0xfc, -0x04, 0x6e, 0x00, 0x00, 0x40, 0x20, 0x88, 0x09, 0x54, 0x43, 0x0f, 0xfc, 0x50, 0x53, 0x80, 0x01, -0x40, 0x62, 0x08, 0x09, 0x51, 0xe1, 0x00, 0x0a, 0x54, 0x72, 0x80, 0xff, 0x40, 0xff, 0x18, 0x07, -0x4e, 0xf3, 0x00, 0x10, 0x50, 0x03, 0x00, 0x0a, 0x40, 0xf0, 0x08, 0x07, 0x4e, 0xf3, 0x00, 0x0a, -0x5c, 0xf3, 0x02, 0x1f, 0x4e, 0xf2, 0x00, 0x06, 0x5c, 0xf3, 0x01, 0xe3, 0x4e, 0xf2, 0x00, 0x06, -0x5c, 0xf3, 0x80, 0x03, 0x4e, 0xf3, 0xff, 0xb8, 0x04, 0x2f, 0x80, 0x03, 0x14, 0x7f, 0x80, 0x05, -0x50, 0x03, 0x7e, 0x1d, 0x4e, 0x23, 0x00, 0x54, 0x40, 0x30, 0x00, 0x13, 0x5c, 0xf1, 0x80, 0x3c, -0x4e, 0xf3, 0x00, 0x22, 0x04, 0x3f, 0x80, 0x04, 0x3e, 0x4f, 0xfa, 0xd0, 0x04, 0x1f, 0x80, 0x02, -0x50, 0x10, 0x83, 0x20, 0x40, 0x51, 0x90, 0x00, 0x04, 0x0f, 0x80, 0x03, 0x47, 0xe8, 0x08, 0x08, -0x04, 0x4f, 0x80, 0x08, 0x59, 0xef, 0x00, 0x80, 0x44, 0x20, 0x08, 0x00, 0x14, 0x20, 0x80, 0x05, -0x14, 0x00, 0x80, 0x06, 0x14, 0x00, 0x80, 0x07, 0x15, 0xe2, 0x00, 0x01, 0x15, 0xe2, 0x80, 0xda, -0x48, 0x00, 0x00, 0x82, 0x47, 0xe6, 0x02, 0x00, 0x04, 0x3f, 0x00, 0x56, 0x04, 0x5f, 0x80, 0x02, -0x50, 0x52, 0x83, 0x20, 0x58, 0x4f, 0x00, 0x00, 0x14, 0x32, 0x80, 0x05, 0x04, 0x22, 0x00, 0x57, -0x58, 0x02, 0x00, 0x00, 0x14, 0x22, 0x80, 0x06, 0x04, 0x10, 0x00, 0x58, 0x59, 0xe0, 0x00, 0x00, -0x14, 0x12, 0x80, 0x07, 0x04, 0x3f, 0x00, 0x62, 0x04, 0x4f, 0x80, 0x08, 0x58, 0x20, 0x00, 0x00, -0x14, 0x32, 0x00, 0x01, 0x04, 0x0f, 0x80, 0x04, 0x04, 0x51, 0x00, 0x63, 0x3e, 0x1f, 0xfa, 0xd0, -0x41, 0xe0, 0x04, 0x00, 0x14, 0x5f, 0x00, 0xda, 0x48, 0x00, 0x00, 0x56, 0x40, 0x50, 0x00, 0x13, -0x5c, 0xf2, 0x80, 0x3c, 0x4e, 0xf3, 0x00, 0x26, 0x04, 0x5f, 0x80, 0x02, 0x05, 0xef, 0x80, 0x04, -0x3e, 0x8f, 0xfa, 0xd0, 0x46, 0x08, 0x08, 0x08, 0x04, 0x2f, 0x80, 0x06, 0x04, 0x1f, 0x80, 0x07, -0x58, 0x00, 0x00, 0x80, 0x44, 0x30, 0x00, 0x00, 0x40, 0x4f, 0x20, 0x00, 0x50, 0x72, 0x83, 0x50, -0x50, 0x62, 0x83, 0x54, 0x44, 0x80, 0x08, 0x00, 0x14, 0x81, 0x00, 0x00, 0x14, 0x33, 0x80, 0x00, -0x14, 0x33, 0x00, 0x00, 0x14, 0x00, 0x80, 0x01, 0x14, 0x02, 0x00, 0xde, 0x48, 0x00, 0x00, 0x2c, -0x46, 0x16, 0x02, 0x00, 0x04, 0x40, 0x80, 0x56, 0x04, 0x2f, 0x80, 0x06, 0x58, 0x50, 0x80, 0x00, -0x14, 0x41, 0x00, 0x00, 0x05, 0xe2, 0x80, 0x57, 0x04, 0x1f, 0x80, 0x02, 0x58, 0x02, 0x80, 0x00, -0x15, 0xe0, 0x80, 0xd4, 0x04, 0x30, 0x00, 0x58, 0x58, 0x40, 0x00, 0x00, 0x14, 0x30, 0x80, 0xd5, -0x04, 0x52, 0x00, 0x62, 0x04, 0x2f, 0x80, 0x07, 0x59, 0xe0, 0x00, 0x00, 0x14, 0x51, 0x00, 0x01, -0x04, 0x0f, 0x80, 0x04, 0x04, 0x4f, 0x00, 0x63, 0x3e, 0x1f, 0xfa, 0xd0, 0x40, 0x30, 0x04, 0x00, -0x14, 0x41, 0x80, 0xde, 0x04, 0x5f, 0x80, 0x03, 0x45, 0xe0, 0x00, 0x02, 0x50, 0x02, 0x80, 0x01, -0x40, 0x30, 0x00, 0x13, 0x14, 0x3f, 0x80, 0x03, 0x4c, 0x3f, 0x7d, 0xa6, 0x49, 0xff, 0xeb, 0x1c, -0x04, 0x2f, 0x80, 0x01, 0x4e, 0x23, 0x00, 0x08, 0x46, 0x46, 0x02, 0x00, 0x14, 0x22, 0x00, 0x5f, -0x48, 0x00, 0x00, 0x0e, 0x04, 0x2f, 0x80, 0x01, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x22, 0xc0, 0x08, -0x46, 0x36, 0x02, 0x01, 0x45, 0xe0, 0x00, 0x00, 0x15, 0xe1, 0x80, 0x5f, 0x51, 0xff, 0x80, 0x2c, -0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xf4, -0x14, 0x0f, 0x80, 0x00, 0x3c, 0x03, 0xf2, 0x06, 0x04, 0x1f, 0x80, 0x00, 0x49, 0xff, 0xfb, 0x14, -0x04, 0x2f, 0x80, 0x00, 0x46, 0x18, 0x1b, 0xd6, 0x58, 0x10, 0x8c, 0x7f, 0x44, 0x00, 0x00, 0x6c, -0x49, 0xff, 0xea, 0x0e, 0x04, 0x2f, 0x80, 0x00, 0x46, 0x18, 0xc0, 0x08, 0x58, 0x10, 0x82, 0xd0, -0x44, 0x00, 0x00, 0x44, 0x49, 0xff, 0xea, 0x04, 0x46, 0x1f, 0x8b, 0x00, 0x04, 0x2f, 0x80, 0x00, -0x44, 0x00, 0x00, 0x48, 0x58, 0x10, 0x87, 0x27, 0x49, 0xff, 0xe9, 0xfa, 0x04, 0x0f, 0x80, 0x00, -0x4e, 0x03, 0x00, 0x06, 0x3e, 0x3f, 0xe4, 0x0e, 0x48, 0x00, 0x00, 0x0a, 0x04, 0x1f, 0x80, 0x00, -0x44, 0x50, 0x00, 0x01, 0x4c, 0x12, 0xc0, 0x1c, 0x3e, 0x3f, 0xe4, 0x0f, 0x00, 0x41, 0x80, 0x00, -0x4e, 0x43, 0x00, 0x16, 0x04, 0x2f, 0x80, 0x00, 0x46, 0x10, 0x24, 0x44, 0x58, 0x10, 0x84, 0x08, -0x44, 0x00, 0x06, 0x10, 0x49, 0xff, 0xe9, 0xdc, 0x46, 0x18, 0x3f, 0xf0, 0x04, 0x2f, 0x80, 0x00, -0x58, 0x10, 0x80, 0x03, 0x44, 0x00, 0x00, 0x54, 0x49, 0xff, 0xe9, 0xd2, 0x46, 0x56, 0x02, 0x00, -0x58, 0x52, 0x81, 0x48, 0x14, 0x5f, 0x80, 0x01, 0x04, 0x8f, 0x80, 0x00, 0x44, 0x90, 0x00, 0x00, -0x2f, 0xe7, 0xe6, 0x20, 0x4f, 0xe3, 0x00, 0x08, 0x46, 0x10, 0x06, 0x10, 0x58, 0x10, 0x80, 0x88, -0x48, 0x00, 0x00, 0x06, 0x46, 0x10, 0x06, 0x10, 0x58, 0x10, 0x80, 0x87, 0x44, 0x00, 0x00, 0xe8, -0x58, 0x24, 0x00, 0x00, 0x49, 0xff, 0xe9, 0xb4, 0x4e, 0x93, 0x00, 0x08, 0x46, 0x10, 0x50, 0x00, -0x58, 0x10, 0x8b, 0xb8, 0x48, 0x00, 0x00, 0x1a, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x92, 0xc0, 0x08, -0x46, 0x10, 0x50, 0x00, 0x58, 0x10, 0x8b, 0xaa, 0x48, 0x00, 0x00, 0x10, 0x44, 0x50, 0x00, 0x02, -0x4c, 0x92, 0xc0, 0x08, 0x46, 0x10, 0x50, 0x00, 0x58, 0x10, 0x8b, 0x99, 0x48, 0x00, 0x00, 0x06, -0x46, 0x10, 0x50, 0x00, 0x58, 0x10, 0x8b, 0x8a, 0x44, 0x00, 0x00, 0x70, 0x58, 0x24, 0x00, 0x00, -0x49, 0xff, 0xe9, 0x8e, 0x46, 0x18, 0x00, 0x00, 0x44, 0x00, 0x00, 0xa0, 0x58, 0x24, 0x00, 0x00, -0x49, 0xff, 0xe9, 0x86, 0x46, 0x18, 0x20, 0x24, 0x58, 0x10, 0x80, 0xc0, 0x44, 0x00, 0x00, 0xc8, -0x58, 0x24, 0x00, 0x00, 0x49, 0xff, 0xe9, 0x7c, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x85, 0x9c, -0x58, 0x14, 0x00, 0x00, 0x44, 0x00, 0x04, 0x1c, 0x49, 0xff, 0xe9, 0x90, 0x40, 0x10, 0x70, 0x09, -0x4e, 0x13, 0xff, 0xf4, 0x46, 0x10, 0x20, 0x24, 0x44, 0x00, 0x00, 0xc8, 0x58, 0x10, 0x80, 0xc0, -0x58, 0x24, 0x00, 0x00, 0x49, 0xff, 0xe9, 0x64, 0x46, 0x66, 0x02, 0x00, 0x58, 0x03, 0x00, 0x00, -0x58, 0x70, 0x00, 0x00, 0x44, 0x50, 0x00, 0x27, 0x44, 0x40, 0x00, 0x02, 0x14, 0x53, 0x00, 0x00, -0x14, 0x50, 0x00, 0x01, 0x14, 0x43, 0x80, 0x83, 0x4e, 0x83, 0x00, 0x20, 0x47, 0xe6, 0x02, 0x00, -0x46, 0x70, 0x40, 0x00, 0x46, 0x60, 0x02, 0x74, 0x46, 0x0c, 0x00, 0x00, 0x46, 0x3f, 0x00, 0x00, -0x46, 0x14, 0x08, 0x00, 0x59, 0xef, 0x02, 0x00, 0x51, 0xcf, 0x0b, 0x00, 0x58, 0x63, 0x00, 0x27, -0x50, 0xae, 0x00, 0x04, 0x58, 0x00, 0x04, 0x00, 0x50, 0x55, 0x35, 0x10, 0x50, 0x4e, 0x7d, 0x08, -0x50, 0x25, 0x00, 0x20, 0x48, 0x00, 0x00, 0x22, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x82, 0xc0, 0x2c, -0x47, 0xe6, 0x02, 0x00, 0x46, 0x71, 0x40, 0x00, 0x46, 0x60, 0x02, 0x74, 0x46, 0x0c, 0x00, 0x00, -0x46, 0x3f, 0x00, 0x00, 0x46, 0x14, 0x08, 0x00, 0x59, 0xef, 0x02, 0x00, 0x51, 0xcf, 0x1b, 0x00, -0x58, 0x63, 0x00, 0x27, 0x50, 0xae, 0x00, 0x04, 0x58, 0x00, 0x04, 0x00, 0x50, 0x55, 0x35, 0x10, -0x50, 0x4e, 0x7d, 0x08, 0x50, 0x25, 0x00, 0x20, 0x14, 0x7f, 0x00, 0x00, 0x44, 0x70, 0x05, 0x95, -0x14, 0x6e, 0x00, 0x00, 0x14, 0x05, 0x00, 0x00, 0x14, 0x72, 0x80, 0x00, 0x14, 0x32, 0x00, 0x00, -0x14, 0x11, 0x00, 0x00, 0x46, 0x56, 0x02, 0x04, 0x46, 0x06, 0x02, 0x00, 0x58, 0x20, 0x00, 0x00, -0x58, 0x12, 0x80, 0x00, 0x46, 0x30, 0x20, 0x00, 0x44, 0x70, 0x00, 0x03, 0x44, 0x60, 0x00, 0x10, -0x44, 0x41, 0x00, 0x68, 0x14, 0x72, 0x80, 0x50, 0x14, 0x60, 0x00, 0xe0, 0x14, 0x41, 0x00, 0xc0, -0x14, 0x30, 0x80, 0x40, 0x4e, 0x83, 0x00, 0x06, 0x3e, 0x0f, 0xe4, 0x0e, 0x48, 0x00, 0x00, 0x08, -0x44, 0x50, 0x00, 0x01, 0x4c, 0x82, 0xc0, 0x0c, 0x3e, 0x0f, 0xe4, 0x0f, 0x00, 0x10, 0x00, 0x00, -0x4e, 0x13, 0x00, 0x06, 0x46, 0x33, 0x00, 0x00, 0x14, 0x31, 0x00, 0x51, 0x4e, 0x93, 0x00, 0x0a, -0x46, 0x06, 0x02, 0x00, 0x58, 0x00, 0x02, 0x08, 0x44, 0x30, 0x13, 0x00, 0x48, 0x00, 0x00, 0x20, -0x44, 0x50, 0x00, 0x01, 0x4c, 0x92, 0xc0, 0x0a, 0x46, 0x06, 0x02, 0x00, 0x58, 0x00, 0x02, 0x08, -0x44, 0x30, 0x12, 0x00, 0x48, 0x00, 0x00, 0x14, 0x44, 0x50, 0x00, 0x02, 0x4c, 0x92, 0xc0, 0x0a, -0x46, 0x06, 0x02, 0x00, 0x58, 0x00, 0x02, 0x08, 0x44, 0x30, 0x11, 0x00, 0x48, 0x00, 0x00, 0x08, -0x46, 0x06, 0x02, 0x00, 0x58, 0x00, 0x02, 0x08, 0x44, 0x30, 0x10, 0x00, 0x58, 0x51, 0x00, 0x00, -0x46, 0x10, 0x07, 0x38, 0x47, 0xe8, 0x07, 0x38, 0x14, 0x30, 0x00, 0x00, 0x14, 0x12, 0x80, 0x50, -0x15, 0xe2, 0x80, 0x50, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x84, 0xc6, 0x04, 0x0f, 0x80, 0x01, -0x04, 0x40, 0x00, 0x00, 0x40, 0x22, 0x04, 0x08, 0x40, 0x21, 0x74, 0x09, 0x4e, 0x23, 0xff, 0xf4, -0x46, 0x56, 0x02, 0x00, 0x46, 0x10, 0x07, 0x38, 0x47, 0xe4, 0x07, 0x38, 0x14, 0x12, 0x80, 0x50, -0x15, 0xe2, 0x80, 0x50, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x84, 0xae, 0x04, 0x0f, 0x80, 0x01, -0x04, 0x40, 0x00, 0x00, 0x40, 0x22, 0x04, 0x08, 0x40, 0x21, 0x74, 0x09, 0x4e, 0x23, 0xff, 0xf4, -0x46, 0x56, 0x02, 0x00, 0x46, 0x10, 0x07, 0x38, 0x47, 0xe2, 0x07, 0x38, 0x14, 0x12, 0x80, 0x50, -0x15, 0xe2, 0x80, 0x50, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x84, 0x96, 0x04, 0x0f, 0x80, 0x01, -0x04, 0x40, 0x00, 0x00, 0x40, 0x22, 0x04, 0x08, 0x40, 0x21, 0x74, 0x09, 0x4e, 0x23, 0xff, 0xf4, -0x50, 0x24, 0x80, 0x01, 0x47, 0xe6, 0x02, 0x00, 0x46, 0x10, 0x07, 0x38, 0x40, 0x91, 0x00, 0x13, -0x44, 0x50, 0x00, 0x04, 0x14, 0x1f, 0x00, 0x50, 0x4c, 0x92, 0xfe, 0x94, 0x04, 0x3f, 0x80, 0x00, -0x50, 0x41, 0x80, 0x88, 0x4e, 0x33, 0x00, 0x06, 0x3e, 0x3f, 0xe4, 0x0e, 0x48, 0x00, 0x00, 0x0a, -0x04, 0x0f, 0x80, 0x00, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x02, 0xc0, 0x14, 0x3e, 0x3f, 0xe4, 0x0f, -0x01, 0xe1, 0x80, 0x00, 0x4f, 0xe3, 0x00, 0x0e, 0x46, 0x26, 0x02, 0x00, 0x40, 0x42, 0x08, 0x08, -0x3e, 0x1f, 0xfa, 0xd0, 0x04, 0x31, 0x00, 0xa4, 0x40, 0x42, 0x04, 0x00, 0x48, 0x00, 0x00, 0x0c, -0x46, 0x36, 0x02, 0x00, 0x40, 0x02, 0x08, 0x08, 0x3e, 0x5f, 0xfa, 0xd0, 0x04, 0x31, 0x80, 0xa2, -0x40, 0x40, 0x14, 0x00, 0x05, 0xef, 0x80, 0x00, 0x14, 0x32, 0x00, 0x01, 0x50, 0x4f, 0x00, 0x8a, -0x4f, 0xe3, 0x00, 0x06, 0x3e, 0x3f, 0xe4, 0x0e, 0x48, 0x00, 0x00, 0x0a, 0x04, 0x2f, 0x80, 0x00, -0x44, 0x50, 0x00, 0x01, 0x4c, 0x22, 0xc0, 0x14, 0x3e, 0x3f, 0xe4, 0x0f, 0x00, 0x01, 0x80, 0x00, -0x4e, 0x03, 0x00, 0x0e, 0x46, 0x36, 0x02, 0x00, 0x40, 0x42, 0x08, 0x08, 0x3e, 0x5f, 0xfa, 0xd0, -0x04, 0x31, 0x80, 0xa5, 0x40, 0x42, 0x14, 0x00, 0x48, 0x00, 0x00, 0x0c, 0x46, 0x26, 0x02, 0x00, -0x41, 0xe2, 0x08, 0x08, 0x3e, 0x1f, 0xfa, 0xd0, 0x04, 0x31, 0x00, 0xa3, 0x40, 0x4f, 0x04, 0x00, -0x14, 0x32, 0x00, 0x01, 0x49, 0xff, 0xe8, 0xd8, 0x04, 0x0f, 0x80, 0x00, 0x4e, 0x03, 0x00, 0x2e, -0x2e, 0x17, 0xe4, 0x0e, 0x4e, 0x13, 0x00, 0x0e, 0x2e, 0x57, 0xe4, 0x0f, 0x4e, 0x53, 0x00, 0x0a, -0x3c, 0x1d, 0xff, 0x3e, 0x47, 0xe6, 0x02, 0x01, 0x14, 0x1f, 0x00, 0xa4, 0x48, 0x00, 0x00, 0x0a, -0x3c, 0x4d, 0xff, 0x3e, 0x46, 0x06, 0x02, 0x01, 0x14, 0x40, 0x00, 0xa2, 0x4e, 0x13, 0x00, 0x0e, -0x2e, 0x37, 0xe4, 0x0f, 0x4e, 0x33, 0x00, 0x0a, 0x46, 0x06, 0x02, 0x01, 0x3c, 0x1d, 0xff, 0x40, -0x58, 0x00, 0x02, 0x94, 0x48, 0x00, 0x00, 0x08, 0x3c, 0x1d, 0xff, 0x40, 0x46, 0x06, 0x02, 0x01, -0x58, 0x00, 0x02, 0x8c, 0x14, 0x10, 0x00, 0x00, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xf4, 0x58, 0x60, 0x00, 0x00, -0x3c, 0x03, 0xf2, 0x06, 0x58, 0x13, 0x00, 0x00, 0x49, 0xff, 0xf8, 0xb6, 0x46, 0x18, 0x1b, 0x06, -0x58, 0x10, 0x8e, 0x07, 0x44, 0x00, 0x00, 0x6c, 0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xe7, 0xb0, -0x46, 0x1f, 0x8b, 0x00, 0x58, 0x10, 0x87, 0x27, 0x44, 0x00, 0x00, 0x48, 0x58, 0x23, 0x00, 0x00, -0x49, 0xff, 0xe7, 0xa6, 0x46, 0x18, 0x00, 0x6d, 0x58, 0x10, 0x85, 0xe4, 0x44, 0x00, 0x00, 0xa0, -0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xe7, 0x9c, 0x46, 0x26, 0x02, 0x00, 0x58, 0x41, 0x00, 0x00, -0x58, 0x01, 0x00, 0x00, 0x44, 0x30, 0x00, 0x27, 0x44, 0x10, 0x00, 0x02, 0x14, 0x31, 0x00, 0x00, -0x14, 0x32, 0x00, 0x01, 0x14, 0x10, 0x00, 0x83, 0x4e, 0x63, 0x00, 0x1c, 0x46, 0x86, 0x02, 0x00, -0x46, 0x90, 0x40, 0x00, 0x46, 0x70, 0x02, 0x74, 0x46, 0x4c, 0x00, 0x00, 0x46, 0x1f, 0x00, 0x00, -0x58, 0x84, 0x02, 0x00, 0x50, 0x54, 0x0b, 0x00, 0x58, 0x73, 0x80, 0x27, 0x50, 0x32, 0x80, 0x04, -0x58, 0x42, 0x04, 0x00, 0x50, 0x21, 0xb5, 0x10, 0x50, 0x02, 0xfd, 0x08, 0x48, 0x00, 0x00, 0x1e, -0x44, 0x50, 0x00, 0x01, 0x4c, 0x62, 0xc0, 0x26, 0x46, 0x86, 0x02, 0x00, 0x46, 0x91, 0x40, 0x00, -0x46, 0x70, 0x02, 0x74, 0x46, 0x4c, 0x00, 0x00, 0x46, 0x1f, 0x00, 0x00, 0x58, 0x84, 0x02, 0x00, -0x50, 0x54, 0x1b, 0x00, 0x58, 0x73, 0x80, 0x27, 0x50, 0x32, 0x80, 0x04, 0x58, 0x42, 0x04, 0x00, -0x50, 0x21, 0xb5, 0x10, 0x50, 0x02, 0xfd, 0x08, 0x14, 0x94, 0x00, 0x00, 0x44, 0x90, 0x05, 0x95, -0x14, 0x72, 0x80, 0x00, 0x14, 0x41, 0x80, 0x00, 0x14, 0x91, 0x00, 0x00, 0x14, 0x10, 0x00, 0x00, -0x46, 0x36, 0x02, 0x04, 0x46, 0x16, 0x02, 0x00, 0x59, 0xe0, 0x80, 0x00, 0x58, 0xa1, 0x80, 0x00, -0x47, 0xc0, 0x20, 0x00, 0x44, 0x20, 0x00, 0x03, 0x44, 0x40, 0x00, 0x10, 0x44, 0x01, 0x00, 0x68, -0x14, 0x21, 0x80, 0x50, 0x14, 0x40, 0x80, 0xe0, 0x14, 0x0f, 0x00, 0xc0, 0x46, 0x18, 0x20, 0x24, -0x15, 0xc5, 0x00, 0x40, 0x58, 0x10, 0x80, 0xc0, 0x44, 0x00, 0x00, 0xc8, 0x58, 0x23, 0x00, 0x00, -0x49, 0xff, 0xe7, 0x26, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x83, 0x46, 0x44, 0x00, 0x04, 0x1c, -0x58, 0x13, 0x00, 0x00, 0x49, 0xff, 0xe7, 0x3a, 0x40, 0x50, 0x70, 0x09, 0x4e, 0x53, 0xff, 0xf4, -0x46, 0x86, 0x02, 0x01, 0x14, 0x8f, 0x80, 0x01, 0x46, 0x10, 0x20, 0x24, 0x58, 0x10, 0x80, 0xc0, -0x44, 0x00, 0x00, 0xc8, 0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xe7, 0x0a, 0x04, 0x7f, 0x80, 0x01, -0x47, 0xc6, 0x02, 0x00, 0x58, 0x73, 0x8d, 0x24, 0x46, 0x86, 0x02, 0x00, 0x14, 0x7f, 0x80, 0x01, -0x58, 0x84, 0x01, 0x24, 0x3e, 0x7f, 0xde, 0xe0, 0x50, 0x93, 0xff, 0xf4, 0x2f, 0xe7, 0xe6, 0x20, -0x4f, 0xe3, 0x00, 0x06, 0x04, 0x14, 0x80, 0x00, 0x48, 0x00, 0x00, 0x04, 0x04, 0x14, 0x80, 0x01, -0x44, 0x00, 0x00, 0xd4, 0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xe6, 0xea, 0x04, 0x13, 0xff, 0xff, -0x44, 0x00, 0x00, 0x14, 0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xe6, 0xe2, 0x4e, 0x63, 0x00, 0x08, -0x04, 0x13, 0x80, 0x00, 0x14, 0x1e, 0x03, 0x49, 0x48, 0x00, 0x00, 0x0c, 0x44, 0x50, 0x00, 0x01, -0x4c, 0x62, 0xc0, 0x08, 0x04, 0x33, 0x80, 0x00, 0x04, 0x2f, 0x80, 0x01, 0x14, 0x31, 0x00, 0x00, -0x46, 0x06, 0x02, 0x00, 0x46, 0x10, 0x50, 0x04, 0x58, 0x50, 0x00, 0x00, 0x58, 0x10, 0x80, 0xf7, -0x45, 0xe0, 0x00, 0x01, 0x14, 0x10, 0x00, 0x41, 0x15, 0xe2, 0x80, 0x40, 0x44, 0x00, 0x00, 0x01, -0x49, 0xff, 0x82, 0xe2, 0x04, 0x44, 0x00, 0x00, 0x54, 0x32, 0x00, 0x08, 0x4e, 0x33, 0xff, 0xf8, -0x46, 0x56, 0x02, 0x00, 0x59, 0xe2, 0x80, 0x00, 0x46, 0x20, 0x80, 0x04, 0x14, 0x32, 0x80, 0x40, -0x58, 0x21, 0x07, 0xf7, 0x44, 0x30, 0x00, 0x02, 0x14, 0x2f, 0x00, 0x41, 0x14, 0x32, 0x80, 0x40, -0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x82, 0xc8, 0x04, 0x04, 0x00, 0x00, 0x54, 0x10, 0x00, 0x08, -0x4e, 0x13, 0xff, 0xf8, 0x46, 0x46, 0x02, 0x00, 0x14, 0x12, 0x00, 0x40, 0x44, 0x10, 0x00, 0x04, -0x14, 0x12, 0x00, 0x40, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x82, 0xb6, 0x04, 0x54, 0x00, 0x00, -0x54, 0x12, 0x80, 0x08, 0x4e, 0x13, 0xff, 0xf8, 0x47, 0xe6, 0x02, 0x00, 0x50, 0x73, 0x80, 0x10, -0x3e, 0x5f, 0xdf, 0xa0, 0x14, 0x1f, 0x00, 0x40, 0x50, 0x94, 0x80, 0x10, 0x4c, 0x72, 0xff, 0x88, -0x44, 0x00, 0x00, 0x18, 0x42, 0x23, 0x00, 0x24, 0x3e, 0x4f, 0xfc, 0x94, 0x46, 0x06, 0x02, 0x00, -0x40, 0x11, 0x10, 0x00, 0x58, 0x00, 0x02, 0x64, 0x0c, 0x30, 0x00, 0x01, 0x46, 0x56, 0x02, 0x00, -0x58, 0x52, 0x82, 0x7c, 0x1c, 0x30, 0x80, 0x01, 0x4c, 0x02, 0xff, 0xf8, 0x44, 0x20, 0x00, 0x18, -0x42, 0x13, 0x08, 0x24, 0x51, 0xe2, 0x00, 0x30, 0x40, 0x10, 0xf8, 0x00, 0x50, 0x02, 0xff, 0xc4, -0x0c, 0x50, 0x00, 0x01, 0x46, 0x46, 0x02, 0x00, 0x58, 0x42, 0x02, 0x58, 0x1c, 0x50, 0x80, 0x01, -0x4c, 0x02, 0x7f, 0xf8, 0x49, 0xff, 0xe7, 0x30, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x62, 0xc0, 0x30, -0x46, 0x06, 0x02, 0x01, 0x58, 0x00, 0x02, 0x64, 0x3e, 0x5f, 0xfa, 0xd0, 0x46, 0x29, 0xfd, 0xfe, -0x40, 0x40, 0x14, 0x00, 0x58, 0x21, 0x0f, 0x78, 0x41, 0xe2, 0x08, 0x00, 0x04, 0x1f, 0x00, 0x00, -0x46, 0x36, 0x02, 0x01, 0x1c, 0x10, 0x00, 0x01, 0x58, 0x31, 0x82, 0x7c, 0x4c, 0x01, 0xff, 0xee, -0x50, 0x01, 0xff, 0xc4, 0x3e, 0x5f, 0xfa, 0xd0, 0x46, 0x29, 0xfd, 0xfe, 0x40, 0x40, 0x14, 0x00, -0x58, 0x21, 0x0f, 0xcc, 0x41, 0xe2, 0x08, 0x00, 0x04, 0x1f, 0x00, 0x00, 0x46, 0x36, 0x02, 0x01, -0x1c, 0x10, 0x00, 0x01, 0x58, 0x31, 0x82, 0x58, 0x4c, 0x01, 0xff, 0xee, 0x51, 0xff, 0x80, 0x0c, -0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xfc, -0x58, 0x60, 0x00, 0x00, 0x3c, 0x03, 0xf2, 0x06, 0x58, 0x13, 0x00, 0x00, 0x49, 0xff, 0xf7, 0x0c, -0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0xe6, 0x50, 0x46, 0x18, 0x1b, 0xd6, 0x3e, 0x7f, 0x83, 0x48, -0x58, 0x10, 0x8c, 0x7f, 0x44, 0x00, 0x00, 0x6c, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, -0x46, 0x18, 0xc0, 0x08, 0x58, 0x10, 0x82, 0xd0, 0x44, 0x00, 0x00, 0x44, 0x58, 0x23, 0x00, 0x00, -0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x1f, 0x8b, 0x00, 0x58, 0x10, 0x87, 0x27, 0x44, 0x00, 0x00, 0x48, -0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x10, 0x50, 0x00, 0x58, 0x10, 0x8b, 0xb8, -0x44, 0x00, 0x00, 0x70, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x18, 0x00, 0x00, -0x44, 0x00, 0x00, 0xa0, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x18, 0x20, 0x24, -0x58, 0x10, 0x80, 0xc0, 0x44, 0x00, 0x00, 0xc8, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, -0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x81, 0xf0, 0x58, 0x13, 0x00, 0x00, 0x44, 0x00, 0x04, 0x1c, -0x49, 0xff, 0xe5, 0xe4, 0x40, 0x20, 0x70, 0x09, 0x4e, 0x23, 0xff, 0xf4, 0x46, 0x10, 0x20, 0x24, -0x58, 0x10, 0x80, 0xc0, 0x44, 0x00, 0x00, 0xc8, 0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xe5, 0xb8, -0x46, 0x96, 0x02, 0x00, 0x58, 0x54, 0x80, 0x00, 0x58, 0x42, 0x80, 0x00, 0x44, 0x80, 0x00, 0x27, -0x44, 0x30, 0x00, 0x02, 0x14, 0x84, 0x80, 0x00, 0x14, 0x82, 0x80, 0x01, 0x14, 0x32, 0x00, 0x83, -0x4e, 0x63, 0x00, 0x20, 0x46, 0xa6, 0x02, 0x00, 0x47, 0xc0, 0x40, 0x00, 0x46, 0x90, 0x02, 0x74, -0x46, 0x7c, 0x00, 0x00, 0x46, 0x34, 0x00, 0x00, 0x46, 0x1f, 0x00, 0x00, 0x58, 0xa5, 0x02, 0x00, -0x50, 0x85, 0x0b, 0x00, 0x58, 0x94, 0x80, 0x27, 0x50, 0x54, 0x00, 0x04, 0x58, 0x73, 0x84, 0x00, -0x50, 0x42, 0xb5, 0x10, 0x50, 0x22, 0x80, 0x20, 0x50, 0x04, 0x7d, 0x08, 0x48, 0x00, 0x00, 0x22, -0x44, 0x50, 0x00, 0x01, 0x4c, 0x62, 0xc0, 0x2c, 0x46, 0xa6, 0x02, 0x00, 0x47, 0xc1, 0x40, 0x00, -0x46, 0x90, 0x02, 0x74, 0x46, 0x7c, 0x00, 0x00, 0x46, 0x34, 0x00, 0x00, 0x46, 0x1f, 0x00, 0x00, -0x58, 0xa5, 0x02, 0x00, 0x50, 0x85, 0x1b, 0x00, 0x58, 0x94, 0x80, 0x27, 0x50, 0x54, 0x00, 0x04, -0x58, 0x73, 0x84, 0x00, 0x50, 0x42, 0xb5, 0x10, 0x50, 0x22, 0x80, 0x20, 0x50, 0x04, 0x7d, 0x08, -0x45, 0xe0, 0x05, 0x97, 0x15, 0xc5, 0x00, 0x00, 0x14, 0x94, 0x00, 0x00, 0x14, 0x72, 0x80, 0x00, -0x15, 0xe2, 0x00, 0x00, 0x14, 0x31, 0x00, 0x00, 0x14, 0x10, 0x00, 0x00, 0x46, 0x76, 0x02, 0x04, -0x44, 0x50, 0x00, 0x03, 0x46, 0x06, 0x02, 0x00, 0x58, 0x40, 0x00, 0x00, 0x58, 0x23, 0x80, 0x00, -0x46, 0x30, 0x20, 0x00, 0x59, 0xe0, 0x00, 0x00, 0x46, 0x10, 0x90, 0x04, 0x14, 0x53, 0x80, 0x50, -0x58, 0x10, 0x8f, 0xf9, 0x44, 0x80, 0x00, 0x10, 0x44, 0x51, 0x00, 0x68, 0x14, 0x80, 0x00, 0xe0, -0x14, 0x52, 0x00, 0xc0, 0x14, 0x31, 0x00, 0x40, 0x14, 0x1f, 0x00, 0x41, 0x2e, 0x77, 0xe6, 0x20, +0x49, 0xff, 0xef, 0x92, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x58, 0x60, 0x00, 0x00, 0x40, 0x81, 0x00, 0x13, +0x58, 0x70, 0x80, 0x00, 0x58, 0x04, 0x00, 0x00, 0x58, 0x13, 0x00, 0x00, 0x58, 0x91, 0x80, 0x00, +0x49, 0xff, 0xff, 0x4a, 0x58, 0x03, 0x80, 0x00, 0x58, 0x13, 0x00, 0x00, 0x49, 0xff, 0xf0, 0x48, +0x58, 0x03, 0x80, 0x00, 0x58, 0x13, 0x00, 0x00, 0x49, 0xff, 0xf2, 0x72, 0x2e, 0x07, 0xe3, 0xc0, +0x4e, 0x03, 0x00, 0x06, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xf9, 0x10, 0x58, 0x03, 0x80, 0x00, +0x58, 0x13, 0x00, 0x00, 0x49, 0xff, 0xf0, 0x34, 0x58, 0x03, 0x80, 0x00, 0x58, 0x14, 0x80, 0x00, +0x49, 0xff, 0xf3, 0xae, 0x58, 0x03, 0x00, 0x00, 0x58, 0x14, 0x00, 0x00, 0x49, 0xff, 0xf1, 0x7c, +0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, +0x51, 0xff, 0xff, 0xfc, 0x44, 0x70, 0x00, 0x00, 0x49, 0xff, 0xf8, 0xe2, 0x44, 0x80, 0x00, 0x01, +0x49, 0xff, 0xfd, 0xce, 0x3e, 0x9f, 0xe1, 0xb4, 0x48, 0x00, 0x00, 0x44, 0x4e, 0x73, 0x00, 0x06, +0x44, 0x80, 0x00, 0x01, 0x48, 0x00, 0x00, 0x08, 0x56, 0x03, 0x80, 0x01, 0x44, 0x10, 0x00, 0x00, +0x40, 0x80, 0x80, 0x1a, 0x44, 0x60, 0x00, 0x00, 0x48, 0x00, 0x00, 0x26, 0x2e, 0x37, 0xe3, 0xc0, +0x44, 0x50, 0x00, 0x01, 0x4c, 0x32, 0x80, 0x0a, 0x38, 0x14, 0x9b, 0x02, 0x4e, 0x12, 0x00, 0x18, +0x00, 0x01, 0x00, 0x04, 0x48, 0x00, 0x00, 0x0e, 0x38, 0x14, 0x9b, 0x02, 0x40, 0x23, 0x0c, 0x08, +0x3e, 0x5f, 0xe1, 0xb4, 0x40, 0x01, 0x14, 0x00, 0x4e, 0x12, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x05, +0x4e, 0x02, 0x00, 0x06, 0x58, 0x04, 0x00, 0x00, 0x4b, 0xe0, 0x04, 0x01, 0x50, 0x63, 0x00, 0x01, +0x54, 0x63, 0x00, 0xff, 0x2f, 0xe7, 0xe3, 0xdc, 0x40, 0x13, 0x0c, 0x08, 0x3e, 0x3f, 0xe1, 0xb4, +0x40, 0x20, 0x8c, 0x00, 0x40, 0xf3, 0x78, 0x06, 0x4e, 0xf3, 0xff, 0xd2, 0x50, 0x73, 0x80, 0x01, +0x3c, 0x4d, 0xf8, 0xf5, 0x40, 0xf3, 0x90, 0x06, 0x4e, 0xf3, 0xff, 0xba, 0x49, 0xff, 0xf8, 0x24, +0x44, 0x80, 0x00, 0x07, 0x3e, 0x7f, 0xe1, 0xb0, 0x44, 0x60, 0x00, 0x00, 0x12, 0x83, 0x80, 0x00, +0x3c, 0x8b, 0xf1, 0xd9, 0x3c, 0x8b, 0xf1, 0xd8, 0x3c, 0x6f, 0xf8, 0xed, 0x58, 0x93, 0x80, 0x00, +0x48, 0x00, 0x00, 0x08, 0x02, 0x24, 0x80, 0x00, 0x50, 0x63, 0x00, 0x01, 0x49, 0xff, 0xff, 0x52, +0x3d, 0xed, 0xf8, 0xf5, 0x44, 0x10, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, 0x58, 0x30, 0x80, 0x00, +0x40, 0xf3, 0x78, 0x06, 0x4e, 0xf3, 0xff, 0xf0, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xf4, 0x46, 0x30, 0x02, 0x4b, +0x55, 0xc0, 0x00, 0xff, 0x46, 0x20, 0x04, 0xc4, 0x58, 0x31, 0x8a, 0x58, 0x58, 0x21, 0x0b, 0x40, +0x5c, 0x5e, 0x00, 0x0f, 0x58, 0x80, 0x80, 0x00, 0x40, 0x01, 0x94, 0x1b, 0x40, 0x01, 0x14, 0x1a, +0x58, 0x1e, 0x00, 0x00, 0x58, 0x24, 0x00, 0x00, 0x58, 0x62, 0x00, 0x00, 0x49, 0xff, 0xb6, 0x7e, +0x58, 0xa0, 0x00, 0x00, 0x44, 0x50, 0x00, 0x04, 0x4c, 0x62, 0xc0, 0x04, 0x48, 0x00, 0x00, 0x06, +0x44, 0x50, 0x00, 0x05, 0x4c, 0x62, 0xc0, 0x06, 0x58, 0x73, 0x00, 0x00, 0x48, 0x00, 0x00, 0x06, +0x44, 0x70, 0x00, 0x00, 0x40, 0x73, 0xa0, 0x06, 0x49, 0xff, 0xf8, 0x32, 0x44, 0x90, 0x00, 0x00, +0x3e, 0x4f, 0xe3, 0xd4, 0x3e, 0x5f, 0xa5, 0x6c, 0x48, 0x00, 0x00, 0x0e, 0x14, 0x4f, 0x80, 0x01, +0x14, 0x5f, 0x80, 0x00, 0x50, 0x94, 0x80, 0x01, 0x4b, 0xe0, 0x14, 0x01, 0x04, 0x5f, 0x80, 0x00, +0x04, 0x4f, 0x80, 0x01, 0x05, 0xe2, 0x00, 0x00, 0x58, 0x04, 0x80, 0x00, 0x58, 0x13, 0x80, 0x00, +0x58, 0x25, 0x00, 0x00, 0x58, 0x34, 0x00, 0x00, 0x40, 0xf4, 0xf8, 0x06, 0x4e, 0xf3, 0xff, 0xe8, +0x58, 0x05, 0x00, 0x00, 0x49, 0xff, 0xf4, 0x22, 0x49, 0xff, 0xf7, 0x9e, 0x3e, 0x87, 0xe3, 0xb8, +0x44, 0x00, 0x00, 0x01, 0x3d, 0xcb, 0xf1, 0xd8, 0x3c, 0xab, 0xf1, 0xd9, 0x3c, 0x7f, 0xf8, 0xed, +0x3e, 0x67, 0xe3, 0xb9, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xd4, 0x14, 0x0f, 0x80, 0x01, 0x3c, 0x03, 0xf0, 0xd8, +0x04, 0x1f, 0x80, 0x01, 0x49, 0xff, 0xfe, 0x20, 0x04, 0x2f, 0x80, 0x01, 0x46, 0x18, 0x1b, 0xd6, +0x58, 0x10, 0x8c, 0x7f, 0x44, 0x00, 0x00, 0x6c, 0x49, 0xff, 0xee, 0x46, 0x04, 0x2f, 0x80, 0x01, +0x46, 0x18, 0xc0, 0x08, 0x58, 0x10, 0x82, 0xd0, 0x44, 0x00, 0x00, 0x44, 0x49, 0xff, 0xee, 0x3c, +0x04, 0x2f, 0x80, 0x01, 0x46, 0x1f, 0x8b, 0x00, 0x58, 0x10, 0x87, 0x27, 0x44, 0x00, 0x00, 0x48, +0x49, 0xff, 0xee, 0x32, 0x04, 0x4f, 0x80, 0x01, 0x44, 0x50, 0x00, 0x0c, 0x42, 0x32, 0x14, 0x24, +0x3e, 0x1f, 0xf8, 0x70, 0x40, 0x01, 0x84, 0x00, 0x14, 0x0f, 0x80, 0x02, 0x50, 0x22, 0x00, 0x6e, +0x51, 0xc2, 0x00, 0x6c, 0x04, 0x3f, 0x80, 0x01, 0x04, 0x1f, 0x80, 0x02, 0x40, 0xa1, 0x0c, 0x08, +0x40, 0x7e, 0x0c, 0x08, 0x3e, 0x9f, 0xf8, 0x70, 0x58, 0x64, 0x80, 0x00, 0x44, 0x50, 0x00, 0x00, +0x40, 0x85, 0x24, 0x00, 0x40, 0x43, 0x98, 0x00, 0x40, 0x21, 0x8c, 0x08, 0x50, 0x00, 0x83, 0x4c, +0x14, 0x5f, 0x80, 0x03, 0x14, 0x8f, 0x80, 0x07, 0x14, 0x4f, 0x80, 0x08, 0x14, 0x5f, 0x80, 0x05, +0x14, 0x2f, 0x80, 0x04, 0x14, 0x0f, 0x80, 0x06, 0x46, 0x10, 0x06, 0x10, 0x04, 0x2f, 0x80, 0x01, +0x58, 0x10, 0x80, 0x88, 0x44, 0x00, 0x00, 0xe8, 0x49, 0xff, 0xed, 0xf6, 0x2e, 0x77, 0xe3, 0xc0, 0x4e, 0x73, 0x00, 0x08, 0x46, 0x10, 0x06, 0x10, 0x58, 0x10, 0x80, 0x88, 0x48, 0x00, 0x00, 0x06, -0x46, 0x10, 0x06, 0x10, 0x58, 0x10, 0x80, 0x87, 0x44, 0x00, 0x00, 0xe8, 0x58, 0x23, 0x00, 0x00, -0x49, 0xff, 0xe5, 0x26, 0x4e, 0x63, 0x00, 0x0a, 0x46, 0x06, 0x02, 0x00, 0x46, 0x14, 0x00, 0x00, -0x58, 0x00, 0x0d, 0x24, 0x48, 0x00, 0x00, 0x0c, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x62, 0xc0, 0x0a, -0x46, 0x06, 0x02, 0x01, 0x46, 0x14, 0x00, 0x00, 0x58, 0x00, 0x0d, 0x24, 0x14, 0x10, 0x00, 0x00, -0x46, 0x46, 0x02, 0x00, 0x46, 0x27, 0x10, 0x20, 0x58, 0x32, 0x00, 0x00, 0x44, 0x10, 0x00, 0x20, -0x14, 0x22, 0x00, 0x47, 0x58, 0x71, 0x80, 0x00, 0x14, 0x11, 0x80, 0x40, 0x44, 0x00, 0x00, 0x01, -0x49, 0xff, 0x81, 0x22, 0x04, 0x03, 0x80, 0x4c, 0x44, 0x51, 0x00, 0x00, 0x40, 0x30, 0x14, 0x02, -0x4e, 0x33, 0xff, 0xf6, 0x46, 0x46, 0x02, 0x00, 0x59, 0xe2, 0x00, 0x00, 0x46, 0x17, 0x10, 0x00, -0x58, 0x10, 0x80, 0x02, 0x14, 0x32, 0x00, 0x40, 0x14, 0x1f, 0x00, 0x47, 0x2e, 0x87, 0xe6, 0x20, -0x4e, 0x83, 0x00, 0x08, 0x46, 0x10, 0x06, 0x10, 0x58, 0x10, 0x80, 0x08, 0x48, 0x00, 0x00, 0x06, -0x46, 0x10, 0x06, 0x10, 0x58, 0x10, 0x80, 0x07, 0x44, 0x00, 0x00, 0xe8, 0x58, 0x23, 0x00, 0x00, -0x49, 0xff, 0xe4, 0xd6, 0x4e, 0x63, 0x00, 0x0a, 0x46, 0x06, 0x02, 0x00, 0x46, 0x14, 0x28, 0x00, -0x58, 0x00, 0x0d, 0x24, 0x48, 0x00, 0x00, 0x0c, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x62, 0xc0, 0x0a, -0x46, 0x06, 0x02, 0x01, 0x46, 0x14, 0x28, 0x00, 0x58, 0x00, 0x0d, 0x24, 0x14, 0x10, 0x00, 0x00, -0x46, 0x26, 0x02, 0x00, 0x44, 0x00, 0x00, 0x20, 0x58, 0x71, 0x00, 0x00, 0x14, 0x01, 0x00, 0x40, -0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x80, 0xd8, 0x04, 0x53, 0x80, 0x4c, 0x44, 0x41, 0x00, 0x00, -0x40, 0x12, 0x90, 0x02, 0x4e, 0x13, 0xff, 0xf6, 0x47, 0xe6, 0x02, 0x00, 0x14, 0x1f, 0x00, 0x40, -0x2e, 0x87, 0xe6, 0x20, 0x4e, 0x83, 0x00, 0x08, 0x46, 0x10, 0x06, 0x10, 0x58, 0x10, 0x80, 0x28, -0x48, 0x00, 0x00, 0x06, 0x46, 0x10, 0x06, 0x10, 0x58, 0x10, 0x80, 0x27, 0x44, 0x00, 0x00, 0xe8, -0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xe4, 0x94, 0x4e, 0x63, 0x00, 0x0a, 0x46, 0x06, 0x02, 0x00, -0x46, 0x14, 0x30, 0x00, 0x58, 0x00, 0x0d, 0x24, 0x48, 0x00, 0x00, 0x0c, 0x44, 0x50, 0x00, 0x01, -0x4c, 0x62, 0xc0, 0x0a, 0x46, 0x06, 0x02, 0x01, 0x46, 0x14, 0x30, 0x00, 0x58, 0x00, 0x0d, 0x24, -0x14, 0x10, 0x00, 0x00, 0x46, 0x36, 0x02, 0x00, 0x44, 0x20, 0x00, 0x20, 0x58, 0x71, 0x80, 0x00, -0x14, 0x21, 0x80, 0x40, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x80, 0x96, 0x04, 0x03, 0x80, 0x4c, -0x44, 0x51, 0x00, 0x00, 0x40, 0x10, 0x14, 0x02, 0x4e, 0x13, 0xff, 0xf6, 0x46, 0x76, 0x02, 0x00, -0x14, 0x13, 0x80, 0x40, 0x2e, 0x47, 0xe6, 0x20, 0x4e, 0x43, 0x00, 0x08, 0x46, 0x10, 0x06, 0x10, -0x58, 0x10, 0x80, 0x68, 0x48, 0x00, 0x00, 0x06, 0x46, 0x10, 0x06, 0x10, 0x58, 0x10, 0x80, 0x67, -0x44, 0x00, 0x00, 0xe8, 0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xe4, 0x52, 0x4e, 0x63, 0x00, 0x0a, -0x46, 0x06, 0x02, 0x00, 0x46, 0x14, 0x38, 0x00, 0x58, 0x00, 0x0d, 0x24, 0x48, 0x00, 0x00, 0x0c, -0x44, 0x50, 0x00, 0x01, 0x4c, 0x62, 0xc0, 0x0a, 0x46, 0x06, 0x02, 0x01, 0x46, 0x14, 0x38, 0x00, -0x58, 0x00, 0x0d, 0x24, 0x14, 0x10, 0x00, 0x00, 0x46, 0x36, 0x02, 0x00, 0x44, 0x10, 0x00, 0x20, -0x58, 0x71, 0x80, 0x00, 0x14, 0x11, 0x80, 0x40, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x80, 0x54, -0x04, 0x03, 0x80, 0x4c, 0x44, 0x21, 0x00, 0x00, 0x40, 0x10, 0x08, 0x02, 0x4e, 0x13, 0xff, 0xf6, -0x46, 0x86, 0x02, 0x00, 0x14, 0x14, 0x00, 0x40, 0x2e, 0x57, 0xe6, 0x20, 0x4e, 0x53, 0x00, 0x08, -0x46, 0x10, 0x06, 0x10, 0x58, 0x10, 0x80, 0xa8, 0x48, 0x00, 0x00, 0x06, 0x46, 0x10, 0x06, 0x10, -0x58, 0x10, 0x80, 0xa7, 0x44, 0x00, 0x00, 0xe8, 0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xe4, 0x10, -0x4e, 0x63, 0x00, 0x0a, 0x46, 0x06, 0x02, 0x00, 0x46, 0x14, 0x08, 0x00, 0x58, 0x00, 0x0d, 0x24, +0x46, 0x10, 0x06, 0x10, 0x58, 0x10, 0x80, 0x87, 0x04, 0x2f, 0x80, 0x01, 0x44, 0x00, 0x00, 0xe8, +0x49, 0xff, 0xed, 0xe2, 0x04, 0x9f, 0x80, 0x03, 0x4e, 0x93, 0x00, 0x10, 0x46, 0x10, 0x50, 0x00, +0x04, 0x2f, 0x80, 0x01, 0x58, 0x10, 0x8b, 0xb8, 0x44, 0x00, 0x00, 0x70, 0x49, 0xff, 0xed, 0xd4, +0x46, 0x18, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0e, 0x46, 0x10, 0x50, 0x00, 0x04, 0x2f, 0x80, 0x01, +0x58, 0x10, 0x8b, 0xb8, 0x44, 0x00, 0x00, 0x70, 0x49, 0xff, 0xed, 0xc6, 0x46, 0x19, 0x00, 0x00, +0x04, 0x2f, 0x80, 0x01, 0x44, 0x00, 0x00, 0xa0, 0x49, 0xff, 0xed, 0xbe, 0x46, 0x18, 0x20, 0x24, +0x04, 0x2f, 0x80, 0x01, 0x58, 0x10, 0x80, 0xc0, 0x44, 0x00, 0x00, 0xc8, 0x49, 0xff, 0xed, 0xb4, +0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x89, 0x38, 0x04, 0x1f, 0x80, 0x01, 0x44, 0x00, 0x04, 0x1c, +0x49, 0xff, 0xed, 0xc8, 0x40, 0xa0, 0x04, 0x08, 0x40, 0xa5, 0x74, 0x09, 0x4e, 0xa3, 0xff, 0xf2, +0x04, 0x2f, 0x80, 0x01, 0x46, 0x10, 0x20, 0x24, 0x58, 0x10, 0x80, 0xc0, 0x44, 0x00, 0x00, 0xc8, +0x49, 0xff, 0xed, 0x9a, 0x46, 0x46, 0x02, 0x00, 0x58, 0x32, 0x00, 0x00, 0x58, 0x01, 0x80, 0x00, +0x44, 0x50, 0x00, 0x27, 0x44, 0x10, 0x00, 0x02, 0x14, 0x52, 0x00, 0x00, 0x14, 0x51, 0x80, 0x01, +0x14, 0x10, 0x00, 0x83, 0x04, 0x2f, 0x80, 0x01, 0x4e, 0x23, 0x00, 0x20, 0x47, 0xe6, 0x02, 0x00, +0x47, 0xc0, 0x40, 0x00, 0x46, 0xa0, 0x02, 0x74, 0x46, 0x3c, 0x00, 0x00, 0x46, 0x7f, 0x00, 0x00, +0x46, 0x44, 0x38, 0x00, 0x59, 0xef, 0x02, 0x00, 0x50, 0x2f, 0x0b, 0x00, 0x58, 0xa5, 0x00, 0x27, +0x50, 0x11, 0x00, 0x04, 0x58, 0x31, 0x84, 0x00, 0x50, 0x90, 0xb5, 0x10, 0x50, 0x81, 0x7d, 0x08, +0x50, 0x60, 0x80, 0x20, 0x48, 0x00, 0x00, 0x24, 0x04, 0x6f, 0x80, 0x01, 0x44, 0x50, 0x00, 0x01, +0x4c, 0x62, 0xc0, 0x2c, 0x47, 0xe6, 0x02, 0x00, 0x47, 0xc1, 0x40, 0x00, 0x46, 0xa0, 0x02, 0x74, +0x46, 0x3c, 0x00, 0x00, 0x46, 0x7f, 0x00, 0x00, 0x46, 0x44, 0x38, 0x00, 0x59, 0xef, 0x02, 0x00, +0x50, 0x2f, 0x1b, 0x00, 0x58, 0xa5, 0x00, 0x27, 0x50, 0x11, 0x00, 0x04, 0x58, 0x31, 0x84, 0x00, +0x50, 0x90, 0xb5, 0x10, 0x50, 0x81, 0x7d, 0x08, 0x50, 0x60, 0x80, 0x20, 0x15, 0xcf, 0x00, 0x00, +0x14, 0xa1, 0x00, 0x00, 0x44, 0xa0, 0x05, 0x95, 0x14, 0x30, 0x80, 0x00, 0x14, 0xa4, 0x80, 0x00, +0x14, 0x74, 0x00, 0x00, 0x14, 0x43, 0x00, 0x00, 0x58, 0x10, 0x00, 0x00, 0x44, 0x30, 0x08, 0x00, +0x58, 0x60, 0x00, 0x00, 0x58, 0x70, 0x00, 0x00, 0x46, 0xa6, 0x02, 0x04, 0x59, 0xc0, 0x00, 0x00, +0x14, 0x30, 0x80, 0x56, 0x44, 0x40, 0x00, 0x00, 0x58, 0x50, 0x00, 0x00, 0x59, 0xe0, 0x00, 0x00, +0x46, 0x04, 0x40, 0x0c, 0x58, 0x90, 0x80, 0x00, 0x46, 0x80, 0x02, 0x20, 0x44, 0x30, 0x00, 0x33, +0x44, 0x10, 0x00, 0x10, 0x14, 0x43, 0x00, 0x57, 0x58, 0x84, 0x0d, 0xa2, 0x14, 0x43, 0x80, 0x58, +0x58, 0x22, 0x80, 0x00, 0x14, 0x35, 0x00, 0x50, 0x14, 0x1e, 0x00, 0xe0, 0x58, 0x00, 0x01, 0x00, +0x45, 0xc1, 0x50, 0x68, 0x15, 0xc2, 0x80, 0xc0, 0x14, 0x0f, 0x01, 0xc1, 0x14, 0x84, 0x81, 0xb3, +0x44, 0x80, 0x13, 0x00, 0x14, 0x81, 0x00, 0x82, 0x04, 0x7f, 0x80, 0x03, 0x4e, 0x73, 0x00, 0x18, +0x05, 0xef, 0x80, 0x03, 0x58, 0x55, 0x00, 0x00, 0x58, 0x91, 0x00, 0x00, 0x46, 0x07, 0xa8, 0x28, +0x46, 0x8a, 0x77, 0xb6, 0x58, 0x00, 0x03, 0x80, 0x58, 0x84, 0x0f, 0x71, 0x15, 0xe2, 0x80, 0x40, +0x14, 0x04, 0x80, 0x60, 0x14, 0x81, 0x00, 0x61, 0x48, 0x00, 0x00, 0x18, 0x58, 0x65, 0x00, 0x00, +0x46, 0x10, 0x10, 0x00, 0x58, 0x41, 0x00, 0x00, 0x46, 0x77, 0xa8, 0x38, 0x59, 0xc1, 0x00, 0x00, +0x46, 0xaa, 0x67, 0xb6, 0x58, 0x73, 0x84, 0x80, 0x58, 0xa5, 0x0f, 0x71, 0x14, 0x13, 0x00, 0x40, +0x14, 0x72, 0x00, 0x60, 0x14, 0xae, 0x00, 0x61, 0x46, 0x86, 0x02, 0x00, 0x46, 0x36, 0x02, 0x00, +0x47, 0xc0, 0x90, 0x70, 0x59, 0xe4, 0x00, 0x00, 0x46, 0x50, 0x14, 0x20, 0x58, 0x31, 0x81, 0x50, +0x59, 0xce, 0x00, 0x01, 0x44, 0x90, 0x04, 0x1f, 0x14, 0x94, 0x00, 0x64, 0x15, 0xc1, 0x80, 0x00, +0x14, 0x5f, 0x00, 0x55, 0x50, 0x0e, 0x00, 0x04, 0x58, 0x94, 0x00, 0x00, 0x46, 0x80, 0x21, 0x00, +0x50, 0x21, 0x80, 0x08, 0x14, 0x0f, 0x80, 0x09, 0x04, 0x7f, 0x80, 0x05, 0x58, 0xa1, 0x80, 0x00, +0x58, 0x84, 0x00, 0x01, 0x59, 0xc1, 0x00, 0x00, 0x46, 0x40, 0x90, 0x70, 0x58, 0x42, 0x00, 0x05, +0x14, 0x45, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x88, 0x26, 0x04, 0x14, 0x80, 0x65, +0x54, 0x60, 0x80, 0x1f, 0x4e, 0x63, 0xff, 0xf8, 0x14, 0x85, 0x00, 0x00, 0x04, 0x2f, 0x80, 0x09, +0x04, 0x6e, 0x00, 0x00, 0x14, 0x25, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x88, 0x14, +0x04, 0x34, 0x80, 0x65, 0x54, 0x01, 0x80, 0x1f, 0x4e, 0x03, 0xff, 0xf8, 0x14, 0x85, 0x00, 0x00, +0x54, 0x13, 0x0f, 0xfc, 0x04, 0x6e, 0x00, 0x00, 0x40, 0x20, 0x88, 0x09, 0x54, 0x43, 0x0f, 0xfc, +0x50, 0x53, 0x80, 0x01, 0x40, 0x62, 0x08, 0x09, 0x51, 0xe1, 0x00, 0x0a, 0x54, 0x72, 0x80, 0xff, +0x40, 0xff, 0x18, 0x07, 0x4e, 0xf3, 0x00, 0x10, 0x50, 0x03, 0x00, 0x0a, 0x40, 0xf0, 0x08, 0x07, +0x4e, 0xf3, 0x00, 0x0a, 0x5c, 0xf3, 0x02, 0x1f, 0x4e, 0xf2, 0x00, 0x06, 0x5c, 0xf3, 0x01, 0xe3, +0x4e, 0xf2, 0x00, 0x06, 0x5c, 0xf3, 0x80, 0x03, 0x4e, 0xf3, 0xff, 0xb8, 0x04, 0x2f, 0x80, 0x03, +0x14, 0x7f, 0x80, 0x05, 0x50, 0x03, 0x7e, 0x1d, 0x4e, 0x23, 0x00, 0x54, 0x40, 0x30, 0x00, 0x13, +0x5c, 0xf1, 0x80, 0x3c, 0x4e, 0xf3, 0x00, 0x22, 0x04, 0x3f, 0x80, 0x04, 0x3e, 0x4f, 0xf8, 0x70, +0x04, 0x1f, 0x80, 0x02, 0x50, 0x10, 0x83, 0x20, 0x40, 0x51, 0x90, 0x00, 0x04, 0x0f, 0x80, 0x03, +0x47, 0xe8, 0x08, 0x08, 0x04, 0x4f, 0x80, 0x08, 0x59, 0xef, 0x00, 0x80, 0x44, 0x20, 0x08, 0x00, +0x14, 0x20, 0x80, 0x05, 0x14, 0x00, 0x80, 0x06, 0x14, 0x00, 0x80, 0x07, 0x15, 0xe2, 0x00, 0x01, +0x15, 0xe2, 0x80, 0xda, 0x48, 0x00, 0x00, 0x82, 0x47, 0xe6, 0x02, 0x00, 0x04, 0x3f, 0x00, 0x56, +0x04, 0x5f, 0x80, 0x02, 0x50, 0x52, 0x83, 0x20, 0x58, 0x4f, 0x00, 0x00, 0x14, 0x32, 0x80, 0x05, +0x04, 0x22, 0x00, 0x57, 0x58, 0x02, 0x00, 0x00, 0x14, 0x22, 0x80, 0x06, 0x04, 0x10, 0x00, 0x58, +0x59, 0xe0, 0x00, 0x00, 0x14, 0x12, 0x80, 0x07, 0x04, 0x3f, 0x00, 0x62, 0x04, 0x4f, 0x80, 0x08, +0x58, 0x20, 0x00, 0x00, 0x14, 0x32, 0x00, 0x01, 0x04, 0x0f, 0x80, 0x04, 0x04, 0x51, 0x00, 0x63, +0x3e, 0x1f, 0xf8, 0x70, 0x41, 0xe0, 0x04, 0x00, 0x14, 0x5f, 0x00, 0xda, 0x48, 0x00, 0x00, 0x56, +0x40, 0x50, 0x00, 0x13, 0x5c, 0xf2, 0x80, 0x3c, 0x4e, 0xf3, 0x00, 0x26, 0x04, 0x5f, 0x80, 0x02, +0x05, 0xef, 0x80, 0x04, 0x3e, 0x8f, 0xf8, 0x70, 0x46, 0x08, 0x08, 0x08, 0x04, 0x2f, 0x80, 0x06, +0x04, 0x1f, 0x80, 0x07, 0x58, 0x00, 0x00, 0x80, 0x44, 0x30, 0x00, 0x00, 0x40, 0x4f, 0x20, 0x00, +0x50, 0x72, 0x83, 0x50, 0x50, 0x62, 0x83, 0x54, 0x44, 0x80, 0x08, 0x00, 0x14, 0x81, 0x00, 0x00, +0x14, 0x33, 0x80, 0x00, 0x14, 0x33, 0x00, 0x00, 0x14, 0x00, 0x80, 0x01, 0x14, 0x02, 0x00, 0xde, +0x48, 0x00, 0x00, 0x2c, 0x46, 0x16, 0x02, 0x00, 0x04, 0x40, 0x80, 0x56, 0x04, 0x2f, 0x80, 0x06, +0x58, 0x50, 0x80, 0x00, 0x14, 0x41, 0x00, 0x00, 0x05, 0xe2, 0x80, 0x57, 0x04, 0x1f, 0x80, 0x02, +0x58, 0x02, 0x80, 0x00, 0x15, 0xe0, 0x80, 0xd4, 0x04, 0x30, 0x00, 0x58, 0x58, 0x40, 0x00, 0x00, +0x14, 0x30, 0x80, 0xd5, 0x04, 0x52, 0x00, 0x62, 0x04, 0x2f, 0x80, 0x07, 0x59, 0xe0, 0x00, 0x00, +0x14, 0x51, 0x00, 0x01, 0x04, 0x0f, 0x80, 0x04, 0x04, 0x4f, 0x00, 0x63, 0x3e, 0x1f, 0xf8, 0x70, +0x40, 0x30, 0x04, 0x00, 0x14, 0x41, 0x80, 0xde, 0x04, 0x5f, 0x80, 0x03, 0x45, 0xe0, 0x00, 0x02, +0x50, 0x02, 0x80, 0x01, 0x40, 0x30, 0x00, 0x13, 0x14, 0x3f, 0x80, 0x03, 0x4c, 0x3f, 0x7d, 0xa6, +0x49, 0xff, 0xec, 0xc2, 0x04, 0x2f, 0x80, 0x01, 0x4e, 0x23, 0x00, 0x08, 0x46, 0x46, 0x02, 0x00, +0x14, 0x22, 0x00, 0x5f, 0x48, 0x00, 0x00, 0x0e, 0x04, 0x2f, 0x80, 0x01, 0x44, 0x50, 0x00, 0x01, +0x4c, 0x22, 0xc0, 0x08, 0x46, 0x36, 0x02, 0x01, 0x45, 0xe0, 0x00, 0x00, 0x15, 0xe1, 0x80, 0x5f, +0x51, 0xff, 0x80, 0x2c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, +0x51, 0xff, 0xff, 0xf4, 0x14, 0x0f, 0x80, 0x00, 0x3c, 0x03, 0xf0, 0xd8, 0x04, 0x1f, 0x80, 0x00, +0x49, 0xff, 0xfb, 0x4a, 0x04, 0x2f, 0x80, 0x00, 0x46, 0x18, 0x1b, 0xd6, 0x58, 0x10, 0x8c, 0x7f, +0x44, 0x00, 0x00, 0x6c, 0x49, 0xff, 0xeb, 0x70, 0x04, 0x2f, 0x80, 0x00, 0x46, 0x18, 0xc0, 0x08, +0x58, 0x10, 0x82, 0xd0, 0x44, 0x00, 0x00, 0x44, 0x49, 0xff, 0xeb, 0x66, 0x46, 0x1f, 0x8b, 0x00, +0x04, 0x2f, 0x80, 0x00, 0x44, 0x00, 0x00, 0x48, 0x58, 0x10, 0x87, 0x27, 0x49, 0xff, 0xeb, 0x5c, +0x04, 0x0f, 0x80, 0x00, 0x4e, 0x03, 0x00, 0x06, 0x3e, 0x3f, 0xe1, 0xb2, 0x48, 0x00, 0x00, 0x0a, +0x04, 0x1f, 0x80, 0x00, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x12, 0xc0, 0x1c, 0x3e, 0x3f, 0xe1, 0xb3, +0x00, 0x41, 0x80, 0x00, 0x4e, 0x43, 0x00, 0x16, 0x04, 0x2f, 0x80, 0x00, 0x46, 0x10, 0x24, 0x44, +0x58, 0x10, 0x84, 0x08, 0x44, 0x00, 0x06, 0x10, 0x49, 0xff, 0xeb, 0x3e, 0x46, 0x18, 0x3f, 0xf0, +0x04, 0x2f, 0x80, 0x00, 0x58, 0x10, 0x80, 0x03, 0x44, 0x00, 0x00, 0x54, 0x49, 0xff, 0xeb, 0x34, +0x46, 0x56, 0x02, 0x00, 0x58, 0x52, 0x81, 0x48, 0x14, 0x5f, 0x80, 0x01, 0x04, 0x8f, 0x80, 0x00, +0x44, 0x90, 0x00, 0x00, 0x2f, 0xe7, 0xe3, 0xc0, 0x4f, 0xe3, 0x00, 0x08, 0x46, 0x10, 0x06, 0x10, +0x58, 0x10, 0x80, 0x88, 0x48, 0x00, 0x00, 0x06, 0x46, 0x10, 0x06, 0x10, 0x58, 0x10, 0x80, 0x87, +0x44, 0x00, 0x00, 0xe8, 0x58, 0x24, 0x00, 0x00, 0x49, 0xff, 0xeb, 0x16, 0x4e, 0x93, 0x00, 0x08, +0x46, 0x10, 0x50, 0x00, 0x58, 0x10, 0x8b, 0xb8, 0x48, 0x00, 0x00, 0x1a, 0x44, 0x50, 0x00, 0x01, +0x4c, 0x92, 0xc0, 0x08, 0x46, 0x10, 0x50, 0x00, 0x58, 0x10, 0x8b, 0xaa, 0x48, 0x00, 0x00, 0x10, +0x44, 0x50, 0x00, 0x02, 0x4c, 0x92, 0xc0, 0x08, 0x46, 0x10, 0x50, 0x00, 0x58, 0x10, 0x8b, 0x99, +0x48, 0x00, 0x00, 0x06, 0x46, 0x10, 0x50, 0x00, 0x58, 0x10, 0x8b, 0x8a, 0x44, 0x00, 0x00, 0x70, +0x58, 0x24, 0x00, 0x00, 0x49, 0xff, 0xea, 0xf0, 0x46, 0x18, 0x00, 0x00, 0x44, 0x00, 0x00, 0xa0, +0x58, 0x24, 0x00, 0x00, 0x49, 0xff, 0xea, 0xe8, 0x46, 0x18, 0x20, 0x24, 0x58, 0x10, 0x80, 0xc0, +0x44, 0x00, 0x00, 0xc8, 0x58, 0x24, 0x00, 0x00, 0x49, 0xff, 0xea, 0xde, 0x44, 0x00, 0x00, 0x01, +0x49, 0xff, 0x86, 0x62, 0x58, 0x14, 0x00, 0x00, 0x44, 0x00, 0x04, 0x1c, 0x49, 0xff, 0xea, 0xf2, +0x40, 0x10, 0x70, 0x09, 0x4e, 0x13, 0xff, 0xf4, 0x46, 0x10, 0x20, 0x24, 0x44, 0x00, 0x00, 0xc8, +0x58, 0x10, 0x80, 0xc0, 0x58, 0x24, 0x00, 0x00, 0x49, 0xff, 0xea, 0xc6, 0x46, 0x66, 0x02, 0x00, +0x58, 0x03, 0x00, 0x00, 0x58, 0x70, 0x00, 0x00, 0x44, 0x50, 0x00, 0x27, 0x44, 0x40, 0x00, 0x02, +0x14, 0x53, 0x00, 0x00, 0x14, 0x50, 0x00, 0x01, 0x14, 0x43, 0x80, 0x83, 0x4e, 0x83, 0x00, 0x20, +0x47, 0xe6, 0x02, 0x00, 0x46, 0x70, 0x40, 0x00, 0x46, 0x60, 0x02, 0x74, 0x46, 0x0c, 0x00, 0x00, +0x46, 0x3f, 0x00, 0x00, 0x46, 0x14, 0x08, 0x00, 0x59, 0xef, 0x02, 0x00, 0x51, 0xcf, 0x0b, 0x00, +0x58, 0x63, 0x00, 0x27, 0x50, 0xae, 0x00, 0x04, 0x58, 0x00, 0x04, 0x00, 0x50, 0x55, 0x35, 0x10, +0x50, 0x4e, 0x7d, 0x08, 0x50, 0x25, 0x00, 0x20, 0x48, 0x00, 0x00, 0x22, 0x44, 0x50, 0x00, 0x01, +0x4c, 0x82, 0xc0, 0x2c, 0x47, 0xe6, 0x02, 0x00, 0x46, 0x71, 0x40, 0x00, 0x46, 0x60, 0x02, 0x74, +0x46, 0x0c, 0x00, 0x00, 0x46, 0x3f, 0x00, 0x00, 0x46, 0x14, 0x08, 0x00, 0x59, 0xef, 0x02, 0x00, +0x51, 0xcf, 0x1b, 0x00, 0x58, 0x63, 0x00, 0x27, 0x50, 0xae, 0x00, 0x04, 0x58, 0x00, 0x04, 0x00, +0x50, 0x55, 0x35, 0x10, 0x50, 0x4e, 0x7d, 0x08, 0x50, 0x25, 0x00, 0x20, 0x14, 0x7f, 0x00, 0x00, +0x44, 0x70, 0x05, 0x95, 0x14, 0x6e, 0x00, 0x00, 0x14, 0x05, 0x00, 0x00, 0x14, 0x72, 0x80, 0x00, +0x14, 0x32, 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, 0x46, 0x56, 0x02, 0x04, 0x46, 0x06, 0x02, 0x00, +0x58, 0x20, 0x00, 0x00, 0x58, 0x12, 0x80, 0x00, 0x46, 0x30, 0x20, 0x00, 0x44, 0x70, 0x00, 0x03, +0x44, 0x60, 0x00, 0x10, 0x44, 0x41, 0x00, 0x68, 0x14, 0x72, 0x80, 0x50, 0x14, 0x60, 0x00, 0xe0, +0x14, 0x41, 0x00, 0xc0, 0x14, 0x30, 0x80, 0x40, 0x4e, 0x83, 0x00, 0x06, 0x3e, 0x0f, 0xe1, 0xb2, +0x48, 0x00, 0x00, 0x08, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x82, 0xc0, 0x0c, 0x3e, 0x0f, 0xe1, 0xb3, +0x00, 0x10, 0x00, 0x00, 0x4e, 0x13, 0x00, 0x06, 0x46, 0x33, 0x00, 0x00, 0x14, 0x31, 0x00, 0x51, +0x4e, 0x93, 0x00, 0x0a, 0x46, 0x06, 0x02, 0x00, 0x58, 0x00, 0x02, 0x08, 0x44, 0x30, 0x13, 0x00, +0x48, 0x00, 0x00, 0x20, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x92, 0xc0, 0x0a, 0x46, 0x06, 0x02, 0x00, +0x58, 0x00, 0x02, 0x08, 0x44, 0x30, 0x12, 0x00, 0x48, 0x00, 0x00, 0x14, 0x44, 0x50, 0x00, 0x02, +0x4c, 0x92, 0xc0, 0x0a, 0x46, 0x06, 0x02, 0x00, 0x58, 0x00, 0x02, 0x08, 0x44, 0x30, 0x11, 0x00, +0x48, 0x00, 0x00, 0x08, 0x46, 0x06, 0x02, 0x00, 0x58, 0x00, 0x02, 0x08, 0x44, 0x30, 0x10, 0x00, +0x58, 0x51, 0x00, 0x00, 0x46, 0x10, 0x07, 0x38, 0x47, 0xe8, 0x07, 0x38, 0x14, 0x30, 0x00, 0x00, +0x14, 0x12, 0x80, 0x50, 0x15, 0xe2, 0x80, 0x50, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x85, 0x8c, +0x04, 0x0f, 0x80, 0x01, 0x04, 0x40, 0x00, 0x00, 0x40, 0x22, 0x04, 0x08, 0x40, 0x21, 0x74, 0x09, +0x4e, 0x23, 0xff, 0xf4, 0x46, 0x56, 0x02, 0x00, 0x46, 0x10, 0x07, 0x38, 0x47, 0xe4, 0x07, 0x38, +0x14, 0x12, 0x80, 0x50, 0x15, 0xe2, 0x80, 0x50, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x85, 0x74, +0x04, 0x0f, 0x80, 0x01, 0x04, 0x40, 0x00, 0x00, 0x40, 0x22, 0x04, 0x08, 0x40, 0x21, 0x74, 0x09, +0x4e, 0x23, 0xff, 0xf4, 0x46, 0x56, 0x02, 0x00, 0x46, 0x10, 0x07, 0x38, 0x47, 0xe2, 0x07, 0x38, +0x14, 0x12, 0x80, 0x50, 0x15, 0xe2, 0x80, 0x50, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x85, 0x5c, +0x04, 0x0f, 0x80, 0x01, 0x04, 0x40, 0x00, 0x00, 0x40, 0x22, 0x04, 0x08, 0x40, 0x21, 0x74, 0x09, +0x4e, 0x23, 0xff, 0xf4, 0x50, 0x24, 0x80, 0x01, 0x47, 0xe6, 0x02, 0x00, 0x46, 0x10, 0x07, 0x38, +0x40, 0x91, 0x00, 0x13, 0x44, 0x50, 0x00, 0x04, 0x14, 0x1f, 0x00, 0x50, 0x4c, 0x92, 0xfe, 0x94, +0x04, 0x3f, 0x80, 0x00, 0x50, 0x51, 0x80, 0x88, 0x50, 0x41, 0x80, 0x8a, 0x4e, 0x33, 0x00, 0x06, +0x3e, 0x3f, 0xe1, 0xb2, 0x48, 0x00, 0x00, 0x0a, 0x04, 0x0f, 0x80, 0x00, 0x45, 0xe0, 0x00, 0x01, +0x4c, 0x0f, 0x40, 0x30, 0x3e, 0x3f, 0xe1, 0xb3, 0x00, 0x11, 0x80, 0x00, 0x4e, 0x13, 0x00, 0x2a, +0x46, 0x26, 0x02, 0x00, 0x04, 0x11, 0x00, 0xa4, 0x40, 0x02, 0x88, 0x08, 0x3e, 0x2f, 0xf8, 0x70, +0x40, 0x50, 0x08, 0x00, 0x14, 0x12, 0x80, 0x01, 0x47, 0xe6, 0x02, 0x00, 0x04, 0x3f, 0x00, 0xa5, +0x40, 0x02, 0x08, 0x08, 0x04, 0x5f, 0x80, 0x00, 0x40, 0x40, 0x08, 0x00, 0x14, 0x32, 0x00, 0x01, +0x4e, 0x53, 0x00, 0x26, 0x05, 0xe1, 0x00, 0x89, 0x46, 0x16, 0x02, 0x00, 0x15, 0xe0, 0x80, 0xa2, +0x58, 0x30, 0x80, 0x00, 0x04, 0x41, 0x00, 0x8b, 0x14, 0x41, 0x80, 0xa3, 0x48, 0x00, 0x00, 0x18, +0x46, 0x06, 0x02, 0x00, 0x05, 0xe0, 0x00, 0xa2, 0x40, 0x52, 0x88, 0x08, 0x3e, 0x2f, 0xf8, 0x70, +0x40, 0x12, 0x88, 0x00, 0x15, 0xe0, 0x80, 0x01, 0x58, 0x30, 0x00, 0x00, 0x04, 0x51, 0x80, 0xa3, +0x40, 0x42, 0x08, 0x08, 0x40, 0x02, 0x08, 0x00, 0x14, 0x50, 0x00, 0x01, 0x49, 0xff, 0xea, 0x84, +0x04, 0x2f, 0x80, 0x00, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x22, 0xc0, 0x2c, 0x2e, 0x37, 0xe1, 0xb2, +0x4e, 0x33, 0x00, 0x1c, 0x2e, 0x17, 0xe1, 0xb3, 0x4e, 0x13, 0x00, 0x18, 0x3c, 0x5d, 0xfe, 0xa6, +0x46, 0x16, 0x02, 0x01, 0x59, 0xe0, 0x80, 0x00, 0x14, 0x50, 0x80, 0xa4, 0x14, 0x5f, 0x00, 0xa2, +0x58, 0x30, 0x80, 0x00, 0x3c, 0x4d, 0xfe, 0xa8, 0x58, 0x00, 0x80, 0x00, 0x14, 0x41, 0x80, 0xa5, +0x14, 0x40, 0x00, 0xa3, 0x48, 0x00, 0x00, 0x0e, 0x3c, 0x2d, 0xfe, 0xa6, 0x47, 0xe6, 0x02, 0x01, +0x14, 0x2f, 0x00, 0xa2, 0x58, 0x0f, 0x00, 0x00, 0x3c, 0x4d, 0xfe, 0xa8, 0x14, 0x40, 0x00, 0xa3, +0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, +0x51, 0xff, 0xff, 0xf4, 0x58, 0x60, 0x00, 0x00, 0x3c, 0x03, 0xf0, 0xd8, 0x58, 0x13, 0x00, 0x00, +0x49, 0xff, 0xf8, 0xf2, 0x46, 0x18, 0x1b, 0x06, 0x58, 0x10, 0x8e, 0x07, 0x44, 0x00, 0x00, 0x6c, +0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xe9, 0x18, 0x46, 0x1f, 0x8b, 0x00, 0x58, 0x10, 0x87, 0x27, +0x44, 0x00, 0x00, 0x48, 0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xe9, 0x0e, 0x46, 0x18, 0x00, 0x6d, +0x58, 0x10, 0x85, 0xe4, 0x44, 0x00, 0x00, 0xa0, 0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xe9, 0x04, +0x46, 0x26, 0x02, 0x00, 0x58, 0x41, 0x00, 0x00, 0x58, 0x01, 0x00, 0x00, 0x44, 0x30, 0x00, 0x27, +0x44, 0x10, 0x00, 0x02, 0x14, 0x31, 0x00, 0x00, 0x14, 0x32, 0x00, 0x01, 0x14, 0x10, 0x00, 0x83, +0x4e, 0x63, 0x00, 0x1c, 0x46, 0x86, 0x02, 0x00, 0x46, 0x90, 0x40, 0x00, 0x46, 0x70, 0x02, 0x74, +0x46, 0x4c, 0x00, 0x00, 0x46, 0x1f, 0x00, 0x00, 0x58, 0x84, 0x02, 0x00, 0x50, 0x54, 0x0b, 0x00, +0x58, 0x73, 0x80, 0x27, 0x50, 0x32, 0x80, 0x04, 0x58, 0x42, 0x04, 0x00, 0x50, 0x21, 0xb5, 0x10, +0x50, 0x02, 0xfd, 0x08, 0x48, 0x00, 0x00, 0x1e, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x62, 0xc0, 0x26, +0x46, 0x86, 0x02, 0x00, 0x46, 0x91, 0x40, 0x00, 0x46, 0x70, 0x02, 0x74, 0x46, 0x4c, 0x00, 0x00, +0x46, 0x1f, 0x00, 0x00, 0x58, 0x84, 0x02, 0x00, 0x50, 0x54, 0x1b, 0x00, 0x58, 0x73, 0x80, 0x27, +0x50, 0x32, 0x80, 0x04, 0x58, 0x42, 0x04, 0x00, 0x50, 0x21, 0xb5, 0x10, 0x50, 0x02, 0xfd, 0x08, +0x14, 0x94, 0x00, 0x00, 0x44, 0x90, 0x05, 0x95, 0x14, 0x72, 0x80, 0x00, 0x14, 0x41, 0x80, 0x00, +0x14, 0x91, 0x00, 0x00, 0x14, 0x10, 0x00, 0x00, 0x46, 0x36, 0x02, 0x04, 0x46, 0x16, 0x02, 0x00, +0x59, 0xe0, 0x80, 0x00, 0x58, 0xa1, 0x80, 0x00, 0x47, 0xc0, 0x20, 0x00, 0x44, 0x20, 0x00, 0x03, +0x44, 0x40, 0x00, 0x10, 0x44, 0x01, 0x00, 0x68, 0x14, 0x21, 0x80, 0x50, 0x14, 0x40, 0x80, 0xe0, +0x14, 0x0f, 0x00, 0xc0, 0x46, 0x18, 0x20, 0x24, 0x15, 0xc5, 0x00, 0x40, 0x58, 0x10, 0x80, 0xc0, +0x44, 0x00, 0x00, 0xc8, 0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xe8, 0x8e, 0x44, 0x00, 0x00, 0x01, +0x49, 0xff, 0x84, 0x12, 0x44, 0x00, 0x04, 0x1c, 0x58, 0x13, 0x00, 0x00, 0x49, 0xff, 0xe8, 0xa2, +0x40, 0x50, 0x70, 0x09, 0x4e, 0x53, 0xff, 0xf4, 0x46, 0x86, 0x02, 0x01, 0x14, 0x8f, 0x80, 0x01, +0x46, 0x10, 0x20, 0x24, 0x58, 0x10, 0x80, 0xc0, 0x44, 0x00, 0x00, 0xc8, 0x58, 0x23, 0x00, 0x00, +0x49, 0xff, 0xe8, 0x72, 0x04, 0x7f, 0x80, 0x01, 0x47, 0xc6, 0x02, 0x00, 0x58, 0x73, 0x8d, 0x24, +0x46, 0x86, 0x02, 0x00, 0x14, 0x7f, 0x80, 0x01, 0x58, 0x84, 0x01, 0x24, 0x3e, 0x7f, 0xdc, 0x8c, +0x50, 0x93, 0xff, 0xf4, 0x2f, 0xe7, 0xe3, 0xc0, 0x4f, 0xe3, 0x00, 0x06, 0x04, 0x14, 0x80, 0x00, +0x48, 0x00, 0x00, 0x04, 0x04, 0x14, 0x80, 0x01, 0x44, 0x00, 0x00, 0xd4, 0x58, 0x23, 0x00, 0x00, +0x49, 0xff, 0xe8, 0x52, 0x04, 0x13, 0xff, 0xff, 0x44, 0x00, 0x00, 0x14, 0x58, 0x23, 0x00, 0x00, +0x49, 0xff, 0xe8, 0x4a, 0x4e, 0x63, 0x00, 0x08, 0x04, 0x13, 0x80, 0x00, 0x14, 0x1e, 0x03, 0x49, +0x48, 0x00, 0x00, 0x0c, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x62, 0xc0, 0x08, 0x04, 0x33, 0x80, 0x00, +0x04, 0x2f, 0x80, 0x01, 0x14, 0x31, 0x00, 0x00, 0x46, 0x06, 0x02, 0x00, 0x46, 0x10, 0x50, 0x04, +0x58, 0x50, 0x00, 0x00, 0x58, 0x10, 0x80, 0xf7, 0x45, 0xe0, 0x00, 0x01, 0x14, 0x10, 0x00, 0x41, +0x15, 0xe2, 0x80, 0x40, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x83, 0xae, 0x04, 0x44, 0x00, 0x00, +0x54, 0x32, 0x00, 0x08, 0x4e, 0x33, 0xff, 0xf8, 0x46, 0x56, 0x02, 0x00, 0x59, 0xe2, 0x80, 0x00, +0x46, 0x20, 0x80, 0x04, 0x14, 0x32, 0x80, 0x40, 0x58, 0x21, 0x07, 0xf7, 0x44, 0x30, 0x00, 0x02, +0x14, 0x2f, 0x00, 0x41, 0x14, 0x32, 0x80, 0x40, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x83, 0x94, +0x04, 0x04, 0x00, 0x00, 0x54, 0x10, 0x00, 0x08, 0x4e, 0x13, 0xff, 0xf8, 0x46, 0x46, 0x02, 0x00, +0x14, 0x12, 0x00, 0x40, 0x44, 0x10, 0x00, 0x04, 0x14, 0x12, 0x00, 0x40, 0x44, 0x00, 0x00, 0x01, +0x49, 0xff, 0x83, 0x82, 0x04, 0x54, 0x00, 0x00, 0x54, 0x12, 0x80, 0x08, 0x4e, 0x13, 0xff, 0xf8, +0x47, 0xe6, 0x02, 0x00, 0x50, 0x73, 0x80, 0x10, 0x3e, 0x5f, 0xdd, 0x4c, 0x14, 0x1f, 0x00, 0x40, +0x50, 0x94, 0x80, 0x10, 0x4c, 0x72, 0xff, 0x88, 0x44, 0x00, 0x00, 0x18, 0x42, 0x23, 0x00, 0x24, +0x3e, 0x4f, 0xfa, 0x34, 0x46, 0x06, 0x02, 0x00, 0x40, 0x11, 0x10, 0x00, 0x58, 0x00, 0x02, 0x64, +0x0c, 0x30, 0x00, 0x01, 0x46, 0x56, 0x02, 0x00, 0x58, 0x52, 0x82, 0x7c, 0x1c, 0x30, 0x80, 0x01, +0x4c, 0x02, 0xff, 0xf8, 0x44, 0x20, 0x00, 0x18, 0x42, 0x13, 0x08, 0x24, 0x51, 0xe2, 0x00, 0x30, +0x40, 0x10, 0xf8, 0x00, 0x50, 0x02, 0xff, 0xc4, 0x0c, 0x50, 0x00, 0x01, 0x46, 0x46, 0x02, 0x00, +0x58, 0x42, 0x02, 0x58, 0x1c, 0x50, 0x80, 0x01, 0x4c, 0x02, 0x7f, 0xf8, 0x49, 0xff, 0xe8, 0xdc, +0x44, 0x50, 0x00, 0x01, 0x4c, 0x62, 0xc0, 0x30, 0x46, 0x06, 0x02, 0x01, 0x58, 0x00, 0x02, 0x64, +0x3e, 0x5f, 0xf8, 0x70, 0x46, 0x29, 0xfd, 0xfe, 0x40, 0x40, 0x14, 0x00, 0x58, 0x21, 0x0f, 0x78, +0x41, 0xe2, 0x08, 0x00, 0x04, 0x1f, 0x00, 0x00, 0x46, 0x36, 0x02, 0x01, 0x1c, 0x10, 0x00, 0x01, +0x58, 0x31, 0x82, 0x7c, 0x4c, 0x01, 0xff, 0xee, 0x50, 0x01, 0xff, 0xc4, 0x3e, 0x5f, 0xf8, 0x70, +0x46, 0x29, 0xfd, 0xfe, 0x40, 0x40, 0x14, 0x00, 0x58, 0x21, 0x0f, 0xcc, 0x41, 0xe2, 0x08, 0x00, +0x04, 0x1f, 0x00, 0x00, 0x46, 0x36, 0x02, 0x01, 0x1c, 0x10, 0x00, 0x01, 0x58, 0x31, 0x82, 0x58, +0x4c, 0x01, 0xff, 0xee, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x58, 0x60, 0x00, 0x00, 0x3c, 0x03, 0xf0, 0xd8, +0x58, 0x13, 0x00, 0x00, 0x49, 0xff, 0xf7, 0x48, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0xe8, 0x0c, +0x46, 0x18, 0x1b, 0xd6, 0x3e, 0x7f, 0x84, 0x80, 0x58, 0x10, 0x8c, 0x7f, 0x44, 0x00, 0x00, 0x6c, +0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x18, 0xc0, 0x08, 0x58, 0x10, 0x82, 0xd0, +0x44, 0x00, 0x00, 0x44, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x1f, 0x8b, 0x00, +0x58, 0x10, 0x87, 0x27, 0x44, 0x00, 0x00, 0x48, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, +0x46, 0x10, 0x50, 0x00, 0x58, 0x10, 0x8b, 0xb8, 0x44, 0x00, 0x00, 0x70, 0x58, 0x23, 0x00, 0x00, +0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x18, 0x00, 0x00, 0x44, 0x00, 0x00, 0xa0, 0x58, 0x23, 0x00, 0x00, +0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x18, 0x20, 0x24, 0x58, 0x10, 0x80, 0xc0, 0x44, 0x00, 0x00, 0xc8, +0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x82, 0xbc, +0x58, 0x13, 0x00, 0x00, 0x44, 0x00, 0x04, 0x1c, 0x49, 0xff, 0xe7, 0x4c, 0x40, 0x20, 0x70, 0x09, +0x4e, 0x23, 0xff, 0xf4, 0x46, 0x10, 0x20, 0x24, 0x58, 0x10, 0x80, 0xc0, 0x44, 0x00, 0x00, 0xc8, +0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xe7, 0x20, 0x46, 0x96, 0x02, 0x00, 0x58, 0x54, 0x80, 0x00, +0x58, 0x42, 0x80, 0x00, 0x44, 0x80, 0x00, 0x27, 0x44, 0x30, 0x00, 0x02, 0x14, 0x84, 0x80, 0x00, +0x14, 0x82, 0x80, 0x01, 0x14, 0x32, 0x00, 0x83, 0x4e, 0x63, 0x00, 0x20, 0x46, 0xa6, 0x02, 0x00, +0x47, 0xc0, 0x40, 0x00, 0x46, 0x90, 0x02, 0x74, 0x46, 0x7c, 0x00, 0x00, 0x46, 0x34, 0x00, 0x00, +0x46, 0x1f, 0x00, 0x00, 0x58, 0xa5, 0x02, 0x00, 0x50, 0x85, 0x0b, 0x00, 0x58, 0x94, 0x80, 0x27, +0x50, 0x54, 0x00, 0x04, 0x58, 0x73, 0x84, 0x00, 0x50, 0x42, 0xb5, 0x10, 0x50, 0x22, 0x80, 0x20, +0x50, 0x04, 0x7d, 0x08, 0x48, 0x00, 0x00, 0x22, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x62, 0xc0, 0x2c, +0x46, 0xa6, 0x02, 0x00, 0x47, 0xc1, 0x40, 0x00, 0x46, 0x90, 0x02, 0x74, 0x46, 0x7c, 0x00, 0x00, +0x46, 0x34, 0x00, 0x00, 0x46, 0x1f, 0x00, 0x00, 0x58, 0xa5, 0x02, 0x00, 0x50, 0x85, 0x1b, 0x00, +0x58, 0x94, 0x80, 0x27, 0x50, 0x54, 0x00, 0x04, 0x58, 0x73, 0x84, 0x00, 0x50, 0x42, 0xb5, 0x10, +0x50, 0x22, 0x80, 0x20, 0x50, 0x04, 0x7d, 0x08, 0x45, 0xe0, 0x05, 0x97, 0x15, 0xc5, 0x00, 0x00, +0x14, 0x94, 0x00, 0x00, 0x14, 0x72, 0x80, 0x00, 0x15, 0xe2, 0x00, 0x00, 0x14, 0x31, 0x00, 0x00, +0x14, 0x10, 0x00, 0x00, 0x46, 0x76, 0x02, 0x04, 0x44, 0x50, 0x00, 0x03, 0x46, 0x06, 0x02, 0x00, +0x58, 0x40, 0x00, 0x00, 0x58, 0x23, 0x80, 0x00, 0x46, 0x30, 0x20, 0x00, 0x59, 0xe0, 0x00, 0x00, +0x46, 0x10, 0x90, 0x04, 0x14, 0x53, 0x80, 0x50, 0x58, 0x10, 0x8f, 0xf9, 0x44, 0x80, 0x00, 0x10, +0x44, 0x51, 0x00, 0x68, 0x14, 0x80, 0x00, 0xe0, 0x14, 0x52, 0x00, 0xc0, 0x14, 0x31, 0x00, 0x40, +0x14, 0x1f, 0x00, 0x41, 0x2e, 0x77, 0xe3, 0xc0, 0x4e, 0x73, 0x00, 0x08, 0x46, 0x10, 0x06, 0x10, +0x58, 0x10, 0x80, 0x88, 0x48, 0x00, 0x00, 0x06, 0x46, 0x10, 0x06, 0x10, 0x58, 0x10, 0x80, 0x87, +0x44, 0x00, 0x00, 0xe8, 0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xe6, 0x8e, 0x4e, 0x63, 0x00, 0x0a, +0x46, 0x06, 0x02, 0x00, 0x46, 0x14, 0x00, 0x00, 0x58, 0x00, 0x0d, 0x24, 0x48, 0x00, 0x00, 0x0c, +0x44, 0x50, 0x00, 0x01, 0x4c, 0x62, 0xc0, 0x0a, 0x46, 0x06, 0x02, 0x01, 0x46, 0x14, 0x00, 0x00, +0x58, 0x00, 0x0d, 0x24, 0x14, 0x10, 0x00, 0x00, 0x46, 0x46, 0x02, 0x00, 0x46, 0x27, 0x10, 0x20, +0x58, 0x32, 0x00, 0x00, 0x44, 0x10, 0x00, 0x20, 0x14, 0x22, 0x00, 0x47, 0x58, 0x71, 0x80, 0x00, +0x14, 0x11, 0x80, 0x40, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x81, 0xee, 0x04, 0x03, 0x80, 0x4c, +0x44, 0x51, 0x00, 0x00, 0x40, 0x30, 0x14, 0x02, 0x4e, 0x33, 0xff, 0xf6, 0x46, 0x46, 0x02, 0x00, +0x59, 0xe2, 0x00, 0x00, 0x46, 0x17, 0x10, 0x00, 0x58, 0x10, 0x80, 0x02, 0x14, 0x32, 0x00, 0x40, +0x14, 0x1f, 0x00, 0x47, 0x2e, 0x87, 0xe3, 0xc0, 0x4e, 0x83, 0x00, 0x08, 0x46, 0x10, 0x06, 0x10, +0x58, 0x10, 0x80, 0x08, 0x48, 0x00, 0x00, 0x06, 0x46, 0x10, 0x06, 0x10, 0x58, 0x10, 0x80, 0x07, +0x44, 0x00, 0x00, 0xe8, 0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xe6, 0x3e, 0x4e, 0x63, 0x00, 0x0a, +0x46, 0x06, 0x02, 0x00, 0x46, 0x14, 0x28, 0x00, 0x58, 0x00, 0x0d, 0x24, 0x48, 0x00, 0x00, 0x0c, +0x44, 0x50, 0x00, 0x01, 0x4c, 0x62, 0xc0, 0x0a, 0x46, 0x06, 0x02, 0x01, 0x46, 0x14, 0x28, 0x00, +0x58, 0x00, 0x0d, 0x24, 0x14, 0x10, 0x00, 0x00, 0x46, 0x26, 0x02, 0x00, 0x44, 0x00, 0x00, 0x20, +0x58, 0x71, 0x00, 0x00, 0x14, 0x01, 0x00, 0x40, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x81, 0xa4, +0x04, 0x53, 0x80, 0x4c, 0x44, 0x41, 0x00, 0x00, 0x40, 0x12, 0x90, 0x02, 0x4e, 0x13, 0xff, 0xf6, +0x47, 0xe6, 0x02, 0x00, 0x14, 0x1f, 0x00, 0x40, 0x2e, 0x87, 0xe3, 0xc0, 0x4e, 0x83, 0x00, 0x08, +0x46, 0x10, 0x06, 0x10, 0x58, 0x10, 0x80, 0x28, 0x48, 0x00, 0x00, 0x06, 0x46, 0x10, 0x06, 0x10, +0x58, 0x10, 0x80, 0x27, 0x44, 0x00, 0x00, 0xe8, 0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xe5, 0xfc, +0x4e, 0x63, 0x00, 0x0a, 0x46, 0x06, 0x02, 0x00, 0x46, 0x14, 0x30, 0x00, 0x58, 0x00, 0x0d, 0x24, 0x48, 0x00, 0x00, 0x0c, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x62, 0xc0, 0x0a, 0x46, 0x06, 0x02, 0x01, -0x46, 0x14, 0x08, 0x00, 0x58, 0x00, 0x0d, 0x24, 0x14, 0x10, 0x00, 0x00, 0x47, 0xe6, 0x02, 0x00, -0x44, 0x30, 0x00, 0x20, 0x58, 0x7f, 0x00, 0x00, 0x14, 0x3f, 0x00, 0x40, 0x44, 0x00, 0x00, 0x01, -0x49, 0xff, 0x80, 0x12, 0x04, 0x13, 0x80, 0x4c, 0x44, 0x01, 0x00, 0x00, 0x40, 0x10, 0x80, 0x02, -0x4e, 0x13, 0xff, 0xf6, 0x46, 0x46, 0x02, 0x00, 0x14, 0x12, 0x00, 0x40, 0x2e, 0x27, 0xe6, 0x20, -0x4e, 0x23, 0x00, 0x08, 0x46, 0x10, 0x06, 0x10, 0x58, 0x10, 0x80, 0xe8, 0x48, 0x00, 0x00, 0x06, -0x46, 0x10, 0x06, 0x10, 0x58, 0x10, 0x80, 0xe7, 0x44, 0x00, 0x00, 0xe8, 0x58, 0x23, 0x00, 0x00, -0x49, 0xff, 0xe3, 0xce, 0x4e, 0x63, 0x00, 0x0a, 0x46, 0x06, 0x02, 0x00, 0x46, 0x14, 0x10, 0x00, +0x46, 0x14, 0x30, 0x00, 0x58, 0x00, 0x0d, 0x24, 0x14, 0x10, 0x00, 0x00, 0x46, 0x36, 0x02, 0x00, +0x44, 0x20, 0x00, 0x20, 0x58, 0x71, 0x80, 0x00, 0x14, 0x21, 0x80, 0x40, 0x44, 0x00, 0x00, 0x01, +0x49, 0xff, 0x81, 0x62, 0x04, 0x03, 0x80, 0x4c, 0x44, 0x51, 0x00, 0x00, 0x40, 0x10, 0x14, 0x02, +0x4e, 0x13, 0xff, 0xf6, 0x46, 0x76, 0x02, 0x00, 0x14, 0x13, 0x80, 0x40, 0x2e, 0x47, 0xe3, 0xc0, +0x4e, 0x43, 0x00, 0x08, 0x46, 0x10, 0x06, 0x10, 0x58, 0x10, 0x80, 0x68, 0x48, 0x00, 0x00, 0x06, +0x46, 0x10, 0x06, 0x10, 0x58, 0x10, 0x80, 0x67, 0x44, 0x00, 0x00, 0xe8, 0x58, 0x23, 0x00, 0x00, +0x49, 0xff, 0xe5, 0xba, 0x4e, 0x63, 0x00, 0x0a, 0x46, 0x06, 0x02, 0x00, 0x46, 0x14, 0x38, 0x00, 0x58, 0x00, 0x0d, 0x24, 0x48, 0x00, 0x00, 0x0c, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x62, 0xc0, 0x0a, -0x46, 0x06, 0x02, 0x01, 0x46, 0x14, 0x10, 0x00, 0x58, 0x00, 0x0d, 0x24, 0x14, 0x10, 0x00, 0x00, -0x46, 0x76, 0x02, 0x00, 0x45, 0xe0, 0x00, 0x20, 0x15, 0xe3, 0x80, 0x40, 0x44, 0x00, 0x00, 0x01, -0x49, 0xff, 0x7f, 0xd2, 0x04, 0x33, 0x80, 0x4c, 0x44, 0x01, 0x00, 0x00, 0x40, 0x11, 0x80, 0x02, -0x4e, 0x13, 0xff, 0xf6, 0x46, 0x56, 0x02, 0x00, 0x14, 0x12, 0x80, 0x40, 0x58, 0x02, 0x80, 0x00, -0x50, 0x33, 0x00, 0xe4, 0x04, 0x40, 0x00, 0xa1, 0x41, 0xe1, 0x88, 0x08, 0x3e, 0x2f, 0xfa, 0xd0, -0x40, 0x5f, 0x08, 0x00, 0x14, 0x42, 0x80, 0x01, 0x49, 0xff, 0xe4, 0x6e, 0x44, 0x50, 0x00, 0x01, -0x4c, 0x62, 0xc0, 0x08, 0x3c, 0x1d, 0xff, 0x9a, 0x46, 0x46, 0x02, 0x01, 0x14, 0x12, 0x00, 0xa1, -0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, -0x51, 0xff, 0xff, 0xf4, 0x3c, 0x13, 0xf2, 0x06, 0x58, 0x60, 0x00, 0x00, 0x14, 0x1f, 0x80, 0x01, -0x44, 0x80, 0x00, 0x00, 0x3e, 0x7f, 0x83, 0x48, 0x3f, 0xcf, 0x83, 0x84, 0x04, 0x0f, 0x80, 0x01, -0x58, 0x13, 0x00, 0x00, 0x49, 0xff, 0xf4, 0x68, 0x46, 0x18, 0xf0, 0x92, 0x58, 0x10, 0x83, 0x00, -0x44, 0x00, 0x00, 0xc0, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x18, 0x10, 0xc6, -0x58, 0x10, 0x80, 0xfe, 0x44, 0x00, 0x00, 0x6c, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, -0x4e, 0x83, 0x00, 0x08, 0x44, 0x00, 0x00, 0x70, 0x44, 0x10, 0x00, 0x80, 0x48, 0x00, 0x00, 0x1a, -0x44, 0x50, 0x00, 0x01, 0x4c, 0x82, 0xc0, 0x08, 0x44, 0x00, 0x00, 0x70, 0x44, 0x10, 0x00, 0x90, -0x48, 0x00, 0x00, 0x10, 0x44, 0x50, 0x00, 0x02, 0x4c, 0x82, 0xc0, 0x08, 0x44, 0x00, 0x00, 0x70, -0x44, 0x10, 0x00, 0xa0, 0x48, 0x00, 0x00, 0x06, 0x44, 0x00, 0x00, 0x70, 0x44, 0x10, 0x00, 0xb0, -0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, 0x44, 0x00, 0x00, 0xcc, 0x44, 0x10, 0x80, 0x00, -0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, 0x44, 0x00, 0x00, 0x07, 0x49, 0xff, 0x7f, 0x4c, -0x44, 0x90, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x7f, 0x46, 0x44, 0x00, 0x04, 0x04, -0x58, 0x13, 0x00, 0x00, 0x4b, 0xe0, 0x70, 0x01, 0x40, 0x40, 0x38, 0x08, 0x40, 0x42, 0x74, 0x09, -0x50, 0x94, 0x80, 0x01, 0x4e, 0x42, 0x00, 0x0e, 0x44, 0x50, 0x03, 0xe9, 0x4c, 0x92, 0xff, 0xec, -0x3e, 0x0f, 0xd6, 0x64, 0x3e, 0x1f, 0xdf, 0x94, 0x44, 0x20, 0x0c, 0xdf, 0x49, 0xff, 0x6c, 0x0e, -0x44, 0x00, 0x00, 0xcc, 0x44, 0x10, 0x00, 0x00, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, -0x46, 0x18, 0xf0, 0x92, 0x44, 0x00, 0x00, 0xc0, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, -0x44, 0x00, 0x00, 0x6c, 0x44, 0x10, 0x00, 0x00, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, -0x44, 0x10, 0x00, 0x00, 0x44, 0x00, 0x00, 0x70, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, -0x50, 0x84, 0x00, 0x01, 0x44, 0x50, 0x00, 0x04, 0x4c, 0x82, 0xff, 0x72, 0x58, 0x13, 0x00, 0x00, -0x44, 0x00, 0x04, 0x6c, 0x49, 0xff, 0xe2, 0xfa, 0x50, 0x13, 0x00, 0xe0, 0x40, 0x50, 0x88, 0x08, -0x3e, 0x2f, 0xfa, 0xd0, 0x40, 0x42, 0x88, 0x00, 0x14, 0x02, 0x00, 0x01, 0x58, 0x13, 0x00, 0x00, -0x44, 0x00, 0x04, 0x70, 0x49, 0xff, 0xe2, 0xea, 0x50, 0x33, 0x00, 0xe2, 0x40, 0x61, 0x88, 0x08, -0x3e, 0x2f, 0xfa, 0xd0, 0x40, 0x63, 0x08, 0x00, 0x14, 0x03, 0x00, 0x01, 0x51, 0xff, 0x80, 0x0c, -0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0xfc, -0x58, 0x60, 0x00, 0x00, 0x58, 0x10, 0x00, 0x00, 0x44, 0x00, 0x00, 0x0f, 0x49, 0xff, 0xf3, 0xac, -0x46, 0x18, 0x80, 0x08, 0x3e, 0x7f, 0x83, 0x48, 0x58, 0x10, 0x82, 0xd0, 0x44, 0x00, 0x00, 0x44, -0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x10, 0x24, 0x44, 0x58, 0x10, 0x84, 0x0a, -0x44, 0x00, 0x06, 0x10, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x10, 0x3f, 0xf0, -0x58, 0x10, 0x80, 0x03, 0x44, 0x00, 0x00, 0x54, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, -0x44, 0x00, 0x06, 0x1c, 0x44, 0x10, 0x00, 0x04, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, -0x46, 0x18, 0x20, 0x04, 0x58, 0x10, 0x80, 0xc0, 0x44, 0x00, 0x00, 0xc8, 0x58, 0x23, 0x00, 0x00, -0x4b, 0xe0, 0x1c, 0x01, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x7e, 0x9e, 0x58, 0x13, 0x00, 0x00, -0x44, 0x00, 0x04, 0x1c, 0x49, 0xff, 0xe2, 0x92, 0x40, 0x00, 0x70, 0x09, 0x4e, 0x03, 0xff, 0xf4, -0x46, 0x10, 0x20, 0x04, 0x58, 0x23, 0x00, 0x00, 0x58, 0x10, 0x80, 0xc0, 0x44, 0x00, 0x00, 0xc8, -0x49, 0xff, 0xe2, 0x66, 0x40, 0x83, 0x14, 0x08, 0x3e, 0x2f, 0xfb, 0x0c, 0x40, 0x84, 0x08, 0x00, -0x44, 0x70, 0x04, 0x28, 0x58, 0x03, 0x80, 0x00, 0x58, 0x13, 0x00, 0x00, 0x49, 0xff, 0xe2, 0x76, -0x50, 0x73, 0x80, 0x04, 0x44, 0x50, 0x04, 0x48, 0x1c, 0x04, 0x00, 0x01, 0x4c, 0x72, 0xff, 0xf4, -0x40, 0x43, 0x14, 0x08, 0x3e, 0x5f, 0xfb, 0x4c, 0x40, 0x82, 0x14, 0x00, 0x58, 0x03, 0x80, 0x00, -0x58, 0x13, 0x00, 0x00, 0x49, 0xff, 0xe2, 0x62, 0x1c, 0x04, 0x00, 0x01, 0x50, 0x73, 0x80, 0x04, -0x44, 0x50, 0x04, 0x68, 0x4c, 0x72, 0xff, 0xf4, 0x46, 0x10, 0x24, 0x44, 0x3e, 0x9f, 0x83, 0x48, -0x58, 0x10, 0x84, 0x0b, 0x44, 0x00, 0x06, 0x10, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x24, 0x01, +0x46, 0x06, 0x02, 0x01, 0x46, 0x14, 0x38, 0x00, 0x58, 0x00, 0x0d, 0x24, 0x14, 0x10, 0x00, 0x00, +0x46, 0x36, 0x02, 0x00, 0x44, 0x10, 0x00, 0x20, 0x58, 0x71, 0x80, 0x00, 0x14, 0x11, 0x80, 0x40, +0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x81, 0x20, 0x04, 0x03, 0x80, 0x4c, 0x44, 0x21, 0x00, 0x00, +0x40, 0x10, 0x08, 0x02, 0x4e, 0x13, 0xff, 0xf6, 0x46, 0x86, 0x02, 0x00, 0x14, 0x14, 0x00, 0x40, +0x2e, 0x57, 0xe3, 0xc0, 0x4e, 0x53, 0x00, 0x08, 0x46, 0x10, 0x06, 0x10, 0x58, 0x10, 0x80, 0xa8, +0x48, 0x00, 0x00, 0x06, 0x46, 0x10, 0x06, 0x10, 0x58, 0x10, 0x80, 0xa7, 0x44, 0x00, 0x00, 0xe8, +0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xe5, 0x78, 0x4e, 0x63, 0x00, 0x0a, 0x46, 0x06, 0x02, 0x00, +0x46, 0x14, 0x08, 0x00, 0x58, 0x00, 0x0d, 0x24, 0x48, 0x00, 0x00, 0x0c, 0x44, 0x50, 0x00, 0x01, +0x4c, 0x62, 0xc0, 0x0a, 0x46, 0x06, 0x02, 0x01, 0x46, 0x14, 0x08, 0x00, 0x58, 0x00, 0x0d, 0x24, +0x14, 0x10, 0x00, 0x00, 0x47, 0xe6, 0x02, 0x00, 0x44, 0x30, 0x00, 0x20, 0x58, 0x7f, 0x00, 0x00, +0x14, 0x3f, 0x00, 0x40, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x80, 0xde, 0x04, 0x13, 0x80, 0x4c, +0x44, 0x01, 0x00, 0x00, 0x40, 0x10, 0x80, 0x02, 0x4e, 0x13, 0xff, 0xf6, 0x46, 0x46, 0x02, 0x00, +0x14, 0x12, 0x00, 0x40, 0x2e, 0x27, 0xe3, 0xc0, 0x4e, 0x23, 0x00, 0x08, 0x46, 0x10, 0x06, 0x10, +0x58, 0x10, 0x80, 0xe8, 0x48, 0x00, 0x00, 0x06, 0x46, 0x10, 0x06, 0x10, 0x58, 0x10, 0x80, 0xe7, +0x44, 0x00, 0x00, 0xe8, 0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xe5, 0x36, 0x4e, 0x63, 0x00, 0x0a, +0x46, 0x06, 0x02, 0x00, 0x46, 0x14, 0x10, 0x00, 0x58, 0x00, 0x0d, 0x24, 0x48, 0x00, 0x00, 0x0c, +0x44, 0x50, 0x00, 0x01, 0x4c, 0x62, 0xc0, 0x0a, 0x46, 0x06, 0x02, 0x01, 0x46, 0x14, 0x10, 0x00, +0x58, 0x00, 0x0d, 0x24, 0x14, 0x10, 0x00, 0x00, 0x46, 0x76, 0x02, 0x00, 0x45, 0xe0, 0x00, 0x20, +0x15, 0xe3, 0x80, 0x40, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x80, 0x9e, 0x04, 0x33, 0x80, 0x4c, +0x44, 0x01, 0x00, 0x00, 0x40, 0x11, 0x80, 0x02, 0x4e, 0x13, 0xff, 0xf6, 0x46, 0x56, 0x02, 0x00, +0x14, 0x12, 0x80, 0x40, 0x58, 0x02, 0x80, 0x00, 0x50, 0x33, 0x00, 0xe4, 0x04, 0x40, 0x00, 0xa1, +0x41, 0xe1, 0x88, 0x08, 0x3e, 0x2f, 0xf8, 0x70, 0x40, 0x5f, 0x08, 0x00, 0x14, 0x42, 0x80, 0x01, +0x49, 0xff, 0xe6, 0x1a, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x62, 0xc0, 0x08, 0x3c, 0x1d, 0xff, 0x02, +0x46, 0x46, 0x02, 0x01, 0x14, 0x12, 0x00, 0xa1, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, +0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xf4, 0x3c, 0x13, 0xf0, 0xd8, +0x58, 0x60, 0x00, 0x00, 0x14, 0x1f, 0x80, 0x01, 0x44, 0x80, 0x00, 0x00, 0x3e, 0x7f, 0x84, 0x80, +0x3f, 0xcf, 0x84, 0xbc, 0x04, 0x0f, 0x80, 0x01, 0x58, 0x13, 0x00, 0x00, 0x49, 0xff, 0xf4, 0xa4, +0x46, 0x18, 0xf0, 0x92, 0x58, 0x10, 0x83, 0x00, 0x44, 0x00, 0x00, 0xc0, 0x58, 0x23, 0x00, 0x00, +0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x18, 0x10, 0xc6, 0x58, 0x10, 0x80, 0xfe, 0x44, 0x00, 0x00, 0x6c, +0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, 0x4e, 0x83, 0x00, 0x08, 0x44, 0x00, 0x00, 0x70, +0x44, 0x10, 0x00, 0x80, 0x48, 0x00, 0x00, 0x1a, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x82, 0xc0, 0x08, +0x44, 0x00, 0x00, 0x70, 0x44, 0x10, 0x00, 0x90, 0x48, 0x00, 0x00, 0x10, 0x44, 0x50, 0x00, 0x02, +0x4c, 0x82, 0xc0, 0x08, 0x44, 0x00, 0x00, 0x70, 0x44, 0x10, 0x00, 0xa0, 0x48, 0x00, 0x00, 0x06, +0x44, 0x00, 0x00, 0x70, 0x44, 0x10, 0x00, 0xb0, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, +0x44, 0x00, 0x00, 0xcc, 0x44, 0x10, 0x80, 0x00, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, +0x44, 0x00, 0x00, 0x07, 0x49, 0xff, 0x80, 0x18, 0x44, 0x90, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, +0x49, 0xff, 0x80, 0x12, 0x44, 0x00, 0x04, 0x04, 0x58, 0x13, 0x00, 0x00, 0x4b, 0xe0, 0x70, 0x01, +0x40, 0x40, 0x38, 0x08, 0x40, 0x42, 0x74, 0x09, 0x50, 0x94, 0x80, 0x01, 0x4e, 0x42, 0x00, 0x0e, +0x44, 0x50, 0x03, 0xe9, 0x4c, 0x92, 0xff, 0xec, 0x3e, 0x0f, 0xd4, 0x10, 0x3e, 0x1f, 0xdd, 0x40, +0x44, 0x20, 0x0d, 0x44, 0x49, 0xff, 0x6c, 0xda, 0x44, 0x00, 0x00, 0xcc, 0x44, 0x10, 0x00, 0x00, +0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x18, 0xf0, 0x92, 0x44, 0x00, 0x00, 0xc0, +0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, 0x44, 0x00, 0x00, 0x6c, 0x44, 0x10, 0x00, 0x00, +0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, 0x44, 0x10, 0x00, 0x00, 0x44, 0x00, 0x00, 0x70, +0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, 0x50, 0x84, 0x00, 0x01, 0x44, 0x50, 0x00, 0x04, +0x4c, 0x82, 0xff, 0x72, 0x58, 0x13, 0x00, 0x00, 0x44, 0x00, 0x04, 0x6c, 0x49, 0xff, 0xe4, 0x62, +0x50, 0x13, 0x00, 0xe0, 0x40, 0x50, 0x88, 0x08, 0x3e, 0x2f, 0xf8, 0x70, 0x40, 0x42, 0x88, 0x00, +0x14, 0x02, 0x00, 0x01, 0x58, 0x13, 0x00, 0x00, 0x44, 0x00, 0x04, 0x70, 0x49, 0xff, 0xe4, 0x52, +0x50, 0x33, 0x00, 0xe2, 0x40, 0x61, 0x88, 0x08, 0x3e, 0x2f, 0xf8, 0x70, 0x40, 0x63, 0x08, 0x00, +0x14, 0x03, 0x00, 0x01, 0x51, 0xff, 0x80, 0x0c, 0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0xa8, 0xbc, 0x58, 0x60, 0x00, 0x00, 0x58, 0x10, 0x00, 0x00, 0x44, 0x00, 0x00, 0x0f, +0x49, 0xff, 0xf3, 0xea, 0x46, 0x18, 0x80, 0x08, 0x3e, 0x7f, 0x84, 0x80, 0x58, 0x10, 0x82, 0xd0, +0x44, 0x00, 0x00, 0x44, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x10, 0x24, 0x44, +0x58, 0x10, 0x84, 0x0a, 0x44, 0x00, 0x06, 0x10, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x10, 0x3f, 0xf0, 0x58, 0x10, 0x80, 0x03, 0x44, 0x00, 0x00, 0x54, 0x58, 0x23, 0x00, 0x00, -0x4b, 0xe0, 0x24, 0x01, 0x44, 0x00, 0x06, 0x1c, 0x44, 0x10, 0x00, 0x00, 0x58, 0x23, 0x00, 0x00, -0x4b, 0xe0, 0x24, 0x01, 0x46, 0x18, 0x20, 0x04, 0x58, 0x10, 0x80, 0xc0, 0x44, 0x00, 0x00, 0xc8, -0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x24, 0x01, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x7e, 0x34, -0x58, 0x13, 0x00, 0x00, 0x44, 0x00, 0x04, 0x1c, 0x49, 0xff, 0xe2, 0x28, 0x40, 0x20, 0x70, 0x09, -0x4e, 0x23, 0xff, 0xf4, 0x46, 0x10, 0x20, 0x04, 0x58, 0x10, 0x80, 0xc0, 0x44, 0x00, 0x00, 0xc8, -0x58, 0x23, 0x00, 0x00, 0x40, 0x73, 0x14, 0x08, 0x49, 0xff, 0xe1, 0xfa, 0x3e, 0x3f, 0xfb, 0x8c, -0x40, 0x83, 0x8c, 0x00, 0x44, 0x70, 0x06, 0xcc, 0x58, 0x03, 0x80, 0x00, 0x58, 0x13, 0x00, 0x00, -0x49, 0xff, 0xe2, 0x0c, 0x50, 0x73, 0x80, 0x04, 0x44, 0x50, 0x06, 0xec, 0x1c, 0x04, 0x00, 0x01, -0x4c, 0x72, 0xff, 0xf4, 0x46, 0x10, 0x24, 0x44, 0x3e, 0x8f, 0x83, 0x48, 0x58, 0x10, 0x84, 0x0b, -0x44, 0x00, 0x06, 0x10, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x20, 0x01, 0x46, 0x10, 0x3f, 0xf0, -0x58, 0x10, 0x80, 0x03, 0x44, 0x00, 0x00, 0x54, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x20, 0x01, -0x44, 0x00, 0x06, 0x1c, 0x44, 0x10, 0x00, 0x05, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x20, 0x01, -0x46, 0x18, 0x20, 0x04, 0x58, 0x10, 0x80, 0xc0, 0x44, 0x00, 0x00, 0xc8, 0x58, 0x23, 0x00, 0x00, -0x4b, 0xe0, 0x20, 0x01, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x7d, 0xde, 0x44, 0x00, 0x04, 0x1c, -0x58, 0x13, 0x00, 0x00, 0x49, 0xff, 0xe1, 0xd2, 0x40, 0x50, 0x70, 0x09, 0x4e, 0x53, 0xff, 0xf4, -0x46, 0x10, 0x20, 0x04, 0x44, 0x00, 0x00, 0xc8, 0x58, 0x23, 0x00, 0x00, 0x58, 0x10, 0x80, 0xc0, -0x49, 0xff, 0xe1, 0xa6, 0x40, 0x23, 0x14, 0x08, 0x3e, 0x0f, 0xfb, 0xcc, 0x40, 0x81, 0x00, 0x00, -0x44, 0x70, 0x06, 0xcc, 0x58, 0x03, 0x80, 0x00, 0x58, 0x13, 0x00, 0x00, 0x49, 0xff, 0xe1, 0xb6, -0x50, 0x73, 0x80, 0x04, 0x44, 0x50, 0x06, 0xec, 0x1c, 0x04, 0x00, 0x01, 0x4c, 0x72, 0xff, 0xf4, -0x4e, 0x63, 0x00, 0x06, 0x3e, 0x0f, 0xe4, 0x0e, 0x48, 0x00, 0x00, 0x08, 0x44, 0x50, 0x00, 0x01, -0x4c, 0x62, 0xc0, 0x5c, 0x3e, 0x0f, 0xe4, 0x0f, 0x00, 0x70, 0x00, 0x00, 0x4e, 0x73, 0x00, 0x56, -0x46, 0x10, 0x24, 0x44, 0x58, 0x10, 0x84, 0x0a, 0x44, 0x00, 0x06, 0x10, 0x58, 0x23, 0x00, 0x00, -0x49, 0xff, 0xe1, 0x76, 0x46, 0x18, 0x3f, 0xf0, 0x58, 0x10, 0x80, 0x03, 0x44, 0x00, 0x00, 0x54, -0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xe1, 0x6c, 0x44, 0x70, 0x00, 0x00, 0x58, 0x23, 0x80, 0x00, -0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, 0x49, 0xff, 0xf1, 0xb2, 0x50, 0x73, 0x80, 0x01, -0x44, 0x50, 0x00, 0x10, 0x4c, 0x72, 0xff, 0xf4, 0x44, 0x70, 0x00, 0x00, 0x58, 0x23, 0x80, 0x00, -0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, 0x49, 0xff, 0xf1, 0xa2, 0x50, 0x73, 0x80, 0x01, -0x44, 0x50, 0x00, 0x10, 0x4c, 0x72, 0xff, 0xf4, 0x3e, 0x9f, 0xfc, 0x0c, 0x40, 0x53, 0x14, 0x08, -0x40, 0x82, 0xa4, 0x00, 0x44, 0x70, 0x04, 0x28, 0x58, 0x03, 0x80, 0x00, 0x58, 0x13, 0x00, 0x00, -0x49, 0xff, 0xe1, 0x5c, 0x14, 0x04, 0x00, 0x00, 0x58, 0x13, 0x00, 0x00, 0x50, 0x03, 0x80, 0x20, -0x49, 0xff, 0xe1, 0x54, 0x50, 0x73, 0x80, 0x04, 0x44, 0x50, 0x04, 0x48, 0x14, 0x04, 0x00, 0x10, -0x50, 0x84, 0x00, 0x04, 0x4c, 0x72, 0xff, 0xea, 0x3e, 0x7f, 0x83, 0x48, 0x44, 0x00, 0x00, 0x44, -0x44, 0x10, 0x82, 0xd0, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, 0x4e, 0x63, 0x00, 0x12, -0x2e, 0x07, 0xe4, 0x0e, 0x4e, 0x02, 0x00, 0x04, 0x48, 0x00, 0x00, 0x14, 0x46, 0x10, 0x24, 0x44, -0x58, 0x10, 0x84, 0x08, 0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x06, 0x10, 0x48, 0x00, 0x00, 0x22, -0x44, 0x50, 0x00, 0x01, 0x4c, 0x62, 0xc0, 0x2a, 0x2e, 0x37, 0xe4, 0x0f, 0x4e, 0x32, 0x00, 0x12, -0x46, 0x10, 0x24, 0x44, 0x58, 0x10, 0x84, 0x00, 0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x06, 0x10, -0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x10, 0x3f, 0xf0, 0x58, 0x10, 0x80, 0x03, 0x48, 0x00, 0x00, 0x10, -0x46, 0x10, 0x24, 0x44, 0x58, 0x10, 0x84, 0x08, 0x44, 0x00, 0x06, 0x10, 0x58, 0x23, 0x00, 0x00, -0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x18, 0x3f, 0xf0, 0x58, 0x10, 0x80, 0x03, 0x44, 0x00, 0x00, 0x54, -0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, 0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x00, 0xa0, -0x44, 0x16, 0xf5, 0xfe, 0x49, 0xff, 0xe0, 0xdc, 0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x00, 0x70, -0x44, 0x10, 0x00, 0x00, 0x49, 0xff, 0xe0, 0xd4, 0x46, 0x10, 0x20, 0x04, 0x58, 0x10, 0x80, 0xc0, -0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x00, 0xc8, 0x49, 0xff, 0xe0, 0xca, 0x51, 0xff, 0x80, 0x04, -0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa0, 0xbc, 0x44, 0x60, 0x00, 0x00, -0x58, 0x80, 0x00, 0x00, 0x50, 0x63, 0x00, 0x01, 0x58, 0x03, 0x00, 0x00, 0x58, 0x14, 0x00, 0x00, -0x49, 0xff, 0xf1, 0xb2, 0x44, 0x50, 0x00, 0x0e, 0x4c, 0x62, 0xff, 0xf6, 0x3a, 0x6f, 0xa0, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x58, 0x60, 0x00, 0x00, -0x49, 0xff, 0xb5, 0xf4, 0x46, 0x10, 0x13, 0x12, 0x58, 0x50, 0x8d, 0x00, 0x4c, 0x02, 0xc0, 0x06, -0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x18, 0x46, 0x20, 0x17, 0xd7, 0x58, 0x51, 0x08, 0x40, -0x4c, 0x02, 0xc0, 0x06, 0x44, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x0e, 0x46, 0x30, 0x26, 0x25, -0x58, 0x51, 0x8a, 0x00, 0x4c, 0x02, 0x80, 0x06, 0x44, 0x80, 0x00, 0x00, 0x48, 0x00, 0x00, 0x08, -0x44, 0x00, 0x00, 0x02, 0x3e, 0x4f, 0xd6, 0x94, 0x38, 0x82, 0x03, 0x02, 0x50, 0x54, 0x00, 0x01, -0x40, 0x82, 0x8c, 0x08, 0x3e, 0x0f, 0xd6, 0xd0, 0x40, 0x84, 0x00, 0x00, 0x3e, 0xaf, 0xfa, 0xd0, -0x3e, 0x9f, 0x83, 0x84, 0x3e, 0x7f, 0x83, 0x48, 0x3f, 0xce, 0xbb, 0x90, 0x58, 0x13, 0x00, 0x00, -0x44, 0x00, 0x00, 0xb0, 0x4b, 0xe0, 0x24, 0x01, 0x02, 0x54, 0x00, 0x00, 0x44, 0x43, 0xff, 0xf0, -0x40, 0x32, 0x90, 0x08, 0x44, 0x2c, 0x00, 0x0f, 0x40, 0x11, 0x90, 0x02, 0x40, 0x00, 0x08, 0x02, -0x40, 0x10, 0x04, 0x04, 0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x00, 0xb0, 0x4b, 0xe0, 0x1c, 0x01, -0x58, 0x13, 0x00, 0x00, 0x44, 0x00, 0x01, 0x0c, 0x4b, 0xe0, 0x24, 0x01, 0x02, 0x54, 0x00, 0x01, -0x46, 0x2c, 0x00, 0xff, 0x46, 0x43, 0xff, 0x00, 0x40, 0x32, 0xd0, 0x08, 0x58, 0x21, 0x0f, 0xff, -0x40, 0x11, 0x90, 0x02, 0x40, 0x00, 0x08, 0x02, 0x40, 0x10, 0x04, 0x04, 0x58, 0x23, 0x00, 0x00, -0x44, 0x00, 0x01, 0x0c, 0x4b, 0xe0, 0x1c, 0x01, 0x58, 0x13, 0x00, 0x00, 0x44, 0x00, 0x01, 0x0c, -0x4b, 0xe0, 0x24, 0x01, 0x04, 0x44, 0x00, 0x01, 0x40, 0x30, 0x50, 0x09, 0x40, 0x31, 0xd0, 0x08, -0x40, 0x12, 0x30, 0x08, 0x40, 0x10, 0xb0, 0x09, 0x40, 0x11, 0x84, 0x04, 0x58, 0x23, 0x00, 0x00, -0x44, 0x00, 0x01, 0x0c, 0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x10, 0xf8, 0x00, 0x58, 0x23, 0x00, 0x00, -0x44, 0x00, 0x01, 0x10, 0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x1f, 0xfe, 0x04, 0x58, 0x10, 0x80, 0x10, -0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x00, 0xb4, 0x4b, 0xe0, 0x1c, 0x01, 0x44, 0x00, 0x00, 0x64, -0x4b, 0xe0, 0x70, 0x01, 0x46, 0x13, 0xff, 0x0c, 0x58, 0x10, 0x80, 0x10, 0x58, 0x23, 0x00, 0x00, -0x44, 0x00, 0x00, 0xb4, 0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x10, 0xb0, 0x00, 0x58, 0x23, 0x00, 0x00, -0x44, 0x00, 0x01, 0x10, 0x4b, 0xe0, 0x1c, 0x01, 0x4e, 0x63, 0x00, 0x10, 0x58, 0x13, 0x00, 0x00, -0x44, 0x00, 0x04, 0x20, 0x4b, 0xe0, 0x24, 0x01, 0x54, 0x00, 0x7f, 0x00, 0x40, 0x10, 0x20, 0x09, -0x12, 0x15, 0x00, 0x00, 0x48, 0x00, 0x00, 0x12, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x62, 0xc0, 0x0e, -0x44, 0x00, 0x04, 0x20, 0x58, 0x13, 0x00, 0x00, 0x4b, 0xe0, 0x24, 0x01, 0x54, 0x40, 0x7f, 0x00, -0x40, 0x32, 0x20, 0x09, 0x12, 0x35, 0x00, 0x0f, 0x50, 0xa5, 0x00, 0x02, 0x3e, 0x5f, 0xfa, 0xee, -0x50, 0x84, 0x00, 0x20, 0x4c, 0xa2, 0xff, 0x64, 0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xaa, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa8, 0xbc, 0x58, 0x60, 0x00, 0x00, 0x49, 0xff, 0xb5, 0x16, -0x46, 0x10, 0x13, 0x12, 0x58, 0x50, 0x8d, 0x00, 0x4c, 0x02, 0xc0, 0x08, 0x44, 0x70, 0x00, 0x04, -0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x20, 0x46, 0x20, 0x17, 0xd7, 0x58, 0x51, 0x08, 0x40, -0x4c, 0x02, 0xc0, 0x08, 0x44, 0x70, 0x00, 0x06, 0x44, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x14, -0x46, 0x30, 0x26, 0x25, 0x58, 0x51, 0x8a, 0x00, 0x4c, 0x02, 0xc0, 0x08, 0x44, 0x70, 0x00, 0x09, -0x44, 0x00, 0x00, 0x02, 0x48, 0x00, 0x00, 0x08, 0x44, 0x70, 0x00, 0x00, 0x58, 0x93, 0x80, 0x00, -0x48, 0x00, 0x00, 0x06, 0x3e, 0x4f, 0xd6, 0x94, 0x38, 0x92, 0x03, 0x02, 0x3c, 0x23, 0xf2, 0x06, -0x3e, 0x1f, 0xd6, 0xd0, 0x44, 0x00, 0x00, 0x00, 0x02, 0x50, 0x80, 0x00, 0x50, 0x10, 0x80, 0x20, -0x4c, 0x51, 0x40, 0x06, 0x58, 0xa0, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0a, 0x50, 0x00, 0x00, 0x01, -0x44, 0x50, 0x00, 0x0f, 0x4c, 0x02, 0xff, 0xf2, 0x44, 0xa0, 0x00, 0x00, 0x3e, 0x8f, 0x83, 0x84, -0x58, 0x13, 0x00, 0x00, 0x44, 0x00, 0x00, 0xb0, 0x4b, 0xe0, 0x20, 0x01, 0x40, 0x00, 0x10, 0x09, -0x40, 0x00, 0x10, 0x08, 0x40, 0x10, 0x1c, 0x04, 0x58, 0x23, 0x00, 0x00, 0x3e, 0x7f, 0x83, 0x48, -0x44, 0x00, 0x00, 0xb0, 0x40, 0xa5, 0x08, 0x08, 0x4b, 0xe0, 0x1c, 0x01, 0x40, 0x95, 0x24, 0x00, -0x58, 0x13, 0x00, 0x00, 0x44, 0x00, 0x00, 0xb0, 0x4b, 0xe0, 0x20, 0x01, 0x50, 0x94, 0x80, 0x01, -0x3e, 0x4f, 0xd6, 0xd0, 0x38, 0x12, 0x27, 0x01, 0x44, 0x33, 0xff, 0xf0, 0x40, 0x50, 0x90, 0x08, -0x44, 0x2c, 0x00, 0x0f, 0x40, 0x42, 0x8c, 0x02, 0x40, 0x00, 0x08, 0x02, 0x40, 0x10, 0x10, 0x04, -0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x00, 0xb0, 0x4b, 0xe0, 0x1c, 0x01, 0x58, 0x13, 0x00, 0x00, -0x44, 0x00, 0x01, 0x0c, 0x4b, 0xe0, 0x20, 0x01, 0x40, 0x94, 0x8c, 0x08, 0x3e, 0x1f, 0xd6, 0xd0, -0x40, 0x94, 0x84, 0x00, 0x02, 0x34, 0x80, 0x01, 0x46, 0x2c, 0x00, 0xff, 0x46, 0x53, 0xff, 0x00, -0x40, 0x41, 0xd0, 0x08, 0x58, 0x21, 0x0f, 0xff, 0x40, 0x12, 0x14, 0x02, 0x40, 0x00, 0x08, 0x02, -0x40, 0x10, 0x04, 0x04, 0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x01, 0x0c, 0x4b, 0xe0, 0x1c, 0x01, -0x58, 0x13, 0x00, 0x00, 0x44, 0x00, 0x01, 0x0c, 0x4b, 0xe0, 0x20, 0x01, 0x04, 0x54, 0x80, 0x01, -0x40, 0x40, 0x50, 0x09, 0x40, 0x42, 0x50, 0x08, 0x40, 0x12, 0xb0, 0x08, 0x40, 0x10, 0xb0, 0x09, -0x40, 0x12, 0x04, 0x04, 0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x01, 0x0c, 0x4b, 0xe0, 0x1c, 0x01, -0x46, 0x10, 0x03, 0x00, 0x58, 0x23, 0x00, 0x00, 0x58, 0x10, 0x80, 0x88, 0x44, 0x00, 0x07, 0xdc, -0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x10, 0xf8, 0x00, 0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x01, 0x10, -0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x1f, 0xfe, 0x04, 0x58, 0x23, 0x00, 0x00, 0x58, 0x10, 0x80, 0x10, -0x44, 0x00, 0x00, 0xb4, 0x4b, 0xe0, 0x1c, 0x01, 0x44, 0x00, 0x00, 0x64, 0x49, 0xff, 0x7b, 0x14, -0x46, 0x13, 0xfe, 0x0c, 0x58, 0x23, 0x00, 0x00, 0x58, 0x10, 0x80, 0x10, 0x44, 0x00, 0x00, 0xb4, -0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x10, 0xb0, 0x00, 0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x01, 0x10, -0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x10, 0x03, 0x00, 0x58, 0x10, 0x80, 0x08, 0x58, 0x23, 0x00, 0x00, -0x44, 0x00, 0x07, 0xdc, 0x4b, 0xe0, 0x1c, 0x01, 0x3a, 0x6f, 0xa8, 0x84, 0x4a, 0x00, 0x78, 0x20, -0x3a, 0x6f, 0x98, 0xbc, 0x58, 0x60, 0x00, 0x00, 0x49, 0xff, 0xfe, 0xfe, 0x58, 0x03, 0x00, 0x00, -0x49, 0xff, 0xef, 0x9e, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xfe, 0x16, 0x3a, 0x6f, 0x98, 0x84, -0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x46, 0x38, 0x00, 0x21, -0x04, 0x01, 0x80, 0x04, 0x54, 0x00, 0x00, 0x03, 0x44, 0x50, 0x00, 0x02, 0x3c, 0x0f, 0xf9, 0x89, -0x4c, 0x02, 0x80, 0x0e, 0x44, 0x50, 0x00, 0x03, 0x4c, 0x02, 0x80, 0x10, 0x46, 0x00, 0x13, 0x12, -0x3e, 0x1f, 0xe6, 0x28, 0x58, 0x00, 0x0d, 0x00, 0x48, 0x00, 0x00, 0x0e, 0x46, 0x00, 0x17, 0xd7, -0x58, 0x00, 0x08, 0x40, 0x48, 0x00, 0x00, 0x06, 0x46, 0x00, 0x26, 0x25, 0x58, 0x00, 0x0a, 0x00, -0x3e, 0x1f, 0xe6, 0x28, 0x14, 0x00, 0x80, 0x00, 0x49, 0xff, 0x6e, 0xec, 0x2e, 0x57, 0xe4, 0x78, -0x4e, 0x53, 0x00, 0x24, 0x2e, 0x7f, 0xe2, 0x5a, 0x4e, 0x75, 0x00, 0x14, 0x46, 0x05, 0x00, 0x12, -0x58, 0x00, 0x00, 0x08, 0x04, 0x40, 0x00, 0x00, 0x44, 0x2f, 0xff, 0xcf, 0x40, 0x32, 0x08, 0x02, -0x14, 0x30, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x58, 0x10, 0x80, 0x30, 0x48, 0x00, 0x00, 0x0c, -0x46, 0x05, 0x00, 0x12, 0x58, 0x00, 0x00, 0x08, 0x04, 0x50, 0x00, 0x00, 0x44, 0x6f, 0xff, 0xcf, -0x40, 0x12, 0x98, 0x02, 0x14, 0x10, 0x00, 0x00, 0x2f, 0xe7, 0xe2, 0x1e, 0x54, 0x7f, 0x00, 0x20, -0x4e, 0x72, 0x00, 0x0a, 0x44, 0x10, 0x00, 0x01, 0x3e, 0x17, 0xe6, 0x1d, 0x44, 0x10, 0x00, 0x00, -0x48, 0x00, 0x00, 0x0a, 0x2e, 0x47, 0xe2, 0x1d, 0x54, 0x32, 0x00, 0x02, 0x4e, 0x32, 0x00, 0x06, -0x44, 0x10, 0x00, 0x01, 0x3e, 0x17, 0xe6, 0x1e, 0x2e, 0x67, 0xe2, 0x1c, 0x54, 0x53, 0x00, 0x02, -0x4e, 0x52, 0x00, 0x06, 0x44, 0x00, 0x00, 0x01, 0x3e, 0x07, 0xe6, 0x20, 0x2e, 0x07, 0xe2, 0x1d, -0x54, 0x30, 0x00, 0x04, 0x4e, 0x32, 0x00, 0x06, 0x44, 0x20, 0x00, 0x00, 0x48, 0x00, 0x00, 0x04, -0x44, 0x20, 0x00, 0x01, 0x54, 0x40, 0x00, 0x08, 0x3e, 0x27, 0xe4, 0x0e, 0x4e, 0x42, 0x00, 0x06, -0x44, 0x10, 0x00, 0x00, 0x48, 0x00, 0x00, 0x04, 0x44, 0x10, 0x00, 0x01, 0x2e, 0x27, 0xe2, 0x3e, -0x3e, 0x17, 0xe4, 0x0f, 0x54, 0x61, 0x00, 0x1f, 0x4e, 0x62, 0x00, 0x06, 0x45, 0xe0, 0x00, 0x01, -0x3f, 0xe7, 0xe6, 0x1f, 0x2e, 0x77, 0xe2, 0x41, 0x54, 0x53, 0x80, 0x1f, 0x52, 0x12, 0x80, 0x00, -0x2e, 0x37, 0xe4, 0x0e, 0x40, 0x10, 0x80, 0x10, 0x3e, 0x17, 0xe6, 0x1b, 0x3e, 0x67, 0xe6, 0x1a, -0x4e, 0x32, 0x00, 0x08, 0x2e, 0x37, 0xe4, 0x0f, 0x4e, 0x33, 0x00, 0x0a, 0x48, 0x00, 0x00, 0x24, -0x2e, 0x07, 0xe4, 0x0f, 0x4e, 0x03, 0x00, 0x20, 0x4e, 0x63, 0x00, 0x06, 0x44, 0x10, 0x00, 0x01, -0x48, 0x00, 0x00, 0x08, 0x5e, 0xf0, 0xff, 0xfb, 0x4e, 0xf3, 0x00, 0x08, 0x44, 0x10, 0x00, 0x02, -0x3e, 0x0f, 0xe6, 0x1c, 0x48, 0x00, 0x00, 0x0e, 0x3e, 0x0f, 0xe6, 0x1c, 0x5e, 0xf0, 0xff, 0xf7, -0x4e, 0xf3, 0x00, 0x06, 0x44, 0x10, 0x00, 0x03, 0x48, 0x00, 0x00, 0x04, 0x44, 0x10, 0x00, 0x04, -0x10, 0x10, 0x00, 0x00, 0x2e, 0x17, 0xe6, 0x1c, 0x50, 0x20, 0xff, 0xff, 0x54, 0x41, 0x00, 0xff, -0x5c, 0xf2, 0x00, 0x04, 0x4e, 0xf3, 0x00, 0x06, 0x3e, 0x0f, 0xd6, 0x88, 0x49, 0xff, 0x66, 0xe6, -0x2e, 0x17, 0xe4, 0x0e, 0x4e, 0x13, 0x00, 0x08, 0x4e, 0x62, 0x00, 0x06, 0x44, 0x30, 0x00, 0x01, -0x3e, 0x37, 0xe6, 0x3d, 0x2e, 0x07, 0xe4, 0x0f, 0x4e, 0x03, 0x00, 0x04, 0x4e, 0x63, 0x00, 0x1c, -0x3e, 0x0f, 0xd6, 0x94, 0x3c, 0x1d, 0xf9, 0x8a, 0x04, 0x60, 0x00, 0x01, 0x4c, 0x13, 0x40, 0x06, -0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x18, 0x04, 0x50, 0x00, 0x03, 0x4c, 0x12, 0xc0, 0x06, -0x44, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x10, 0x04, 0x50, 0x00, 0x05, 0x4c, 0x12, 0xc0, 0x12, -0x48, 0x00, 0x00, 0x08, 0x44, 0x10, 0x00, 0x01, 0x3e, 0x17, 0xe6, 0x3e, 0x48, 0xff, 0xff, 0xe2, -0x44, 0x00, 0x00, 0x02, 0x3e, 0x6f, 0xd6, 0x94, 0x38, 0x43, 0x03, 0x02, 0x3c, 0x4f, 0xf9, 0x8b, -0x44, 0x00, 0x00, 0x07, 0x44, 0x40, 0x00, 0x02, 0x45, 0xe0, 0x00, 0x00, 0x3c, 0x0f, 0xf9, 0x8c, -0x3c, 0x4f, 0xf9, 0x8d, 0x3f, 0xe7, 0xe6, 0x38, 0x46, 0x78, 0x00, 0x21, 0x04, 0x53, 0x80, 0x04, -0x42, 0x02, 0xe0, 0x0b, 0x4e, 0x02, 0x00, 0x06, 0x44, 0x50, 0x00, 0x01, 0x3e, 0x57, 0xe6, 0x38, -0x44, 0x40, 0x00, 0x07, 0x44, 0x50, 0x00, 0x22, 0x44, 0x00, 0x00, 0x0a, 0x3c, 0x4b, 0xf3, 0x09, -0x3e, 0x57, 0xe6, 0x39, 0x3c, 0x4b, 0xf2, 0x06, 0x3e, 0x07, 0xe6, 0x3b, 0x44, 0x70, 0x00, 0x09, -0x46, 0x18, 0x08, 0x08, 0x44, 0x20, 0x00, 0x00, 0x58, 0x10, 0x80, 0x80, 0x44, 0x30, 0x08, 0x00, -0x3e, 0x77, 0xe6, 0x3c, 0x3c, 0x4b, 0xf3, 0x08, 0x3c, 0x1f, 0xff, 0x94, 0x3c, 0x2f, 0xf9, 0x85, -0x3e, 0x07, 0xe6, 0x3a, 0x3c, 0x3f, 0xff, 0x8a, 0x3c, 0x2f, 0xff, 0x8c, 0x3c, 0x3f, 0xff, 0x81, -0x3c, 0x2f, 0xff, 0x82, 0x3c, 0x2f, 0xff, 0x83, 0x3c, 0x1f, 0xff, 0x8d, 0x3c, 0x1f, 0xff, 0x8e, -0x3c, 0x3f, 0xff, 0x87, 0x3c, 0x2f, 0xff, 0x88, 0x3c, 0x2f, 0xff, 0x89, 0x3c, 0x1f, 0xff, 0x91, -0x3c, 0x1f, 0xff, 0x92, 0x3c, 0x3f, 0xff, 0x84, 0x3c, 0x2f, 0xff, 0x85, 0x3c, 0x2f, 0xff, 0x86, -0x3c, 0x1f, 0xff, 0x8f, 0x3c, 0x1f, 0xff, 0x90, 0x3c, 0x2f, 0xff, 0x8b, 0x3c, 0x1f, 0xff, 0x93, -0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x52, 0x41, 0x4d, 0x20, -0x63, 0x6f, 0x64, 0x65, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x20, 0x43, 0x4d, 0x44, -0x20, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, -0x64, 0x20, 0x66, 0x6c, 0x6f, 0x77, 0x0a, 0x00, 0x52, 0x45, 0x47, 0x33, 0x32, 0x28, 0x53, 0x59, -0x53, 0x5f, 0x54, 0x4f, 0x50, 0x5f, 0x4d, 0x49, 0x53, 0x43, 0x32, 0x29, 0x20, 0x3d, 0x20, 0x30, -0x78, 0x25, 0x78, 0x20, 0x0a, 0x00, 0x00, 0x00, 0x57, 0x49, 0x46, 0x49, 0x00, 0x00, 0x00, 0x00, -0x57, 0x49, 0x46, 0x49, 0x5f, 0x4c, 0x49, 0x53, 0x52, 0x0a, 0x00, 0x00, 0x62, 0x65, 0x66, 0x6f, -0x72, 0x65, 0x20, 0x50, 0x49, 0x4e, 0x5f, 0x4d, 0x55, 0x58, 0x31, 0x3d, 0x30, 0x78, 0x25, 0x30, -0x38, 0x78, 0x0a, 0x00, 0x50, 0x49, 0x4e, 0x5f, 0x4d, 0x55, 0x58, 0x31, 0x3d, 0x30, 0x78, 0x25, -0x30, 0x38, 0x78, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x50, 0x43, 0x49, 0x65, 0x5f, 0x52, 0x65, 0x73, -0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x61, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x6e, 0x69, 0x74, -0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x0a, 0x00, 0x00, 0x00, 0x57, 0x61, 0x74, 0x63, -0x68, 0x44, 0x6f, 0x67, 0x52, 0x65, 0x73, 0x65, 0x74, 0x41, 0x6e, 0x64, 0x65, 0x73, 0x20, 0x63, -0x61, 0x6c, 0x6c, 0x65, 0x64, 0x21, 0x0a, 0x00, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, -0x21, 0x20, 0x5b, 0x25, 0x73, 0x2c, 0x20, 0x25, 0x64, 0x5d, 0x0a, 0x00, 0x73, 0x72, 0x63, 0x2f, -0x77, 0x69, 0x66, 0x69, 0x5f, 0x75, 0x6e, 0x69, 0x5f, 0x6d, 0x61, 0x63, 0x2f, 0x52, 0x4f, 0x4d, -0x2f, 0x6e, 0x69, 0x63, 0x2f, 0x68, 0x61, 0x6c, 0x2f, 0x4d, 0x54, 0x37, 0x36, 0x30, 0x33, 0x2f, -0x68, 0x61, 0x6c, 0x5f, 0x72, 0x6f, 0x6d, 0x2e, 0x63, 0x00, 0x00, 0x00, 0x68, 0x61, 0x6c, 0x54, -0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x54, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, -0x3a, 0x20, 0x48, 0x54, 0x20, 0x72, 0x61, 0x74, 0x65, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, -0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x4f, 0x46, 0x44, 0x4d, 0x20, 0x63, 0x6f, 0x6e, 0x66, -0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x00, 0x68, 0x61, 0x6c, 0x4d, -0x61, 0x63, 0x54, 0x78, 0x53, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x51, 0x75, 0x65, 0x75, 0x65, 0x57, -0x69, 0x74, 0x68, 0x50, 0x6f, 0x6c, 0x6c, 0x44, 0x6f, 0x6e, 0x65, 0x3a, 0x20, 0x54, 0x69, 0x6d, +0x4b, 0xe0, 0x1c, 0x01, 0x44, 0x00, 0x06, 0x1c, 0x44, 0x10, 0x00, 0x04, 0x58, 0x23, 0x00, 0x00, +0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x18, 0x20, 0x04, 0x58, 0x10, 0x80, 0xc0, 0x44, 0x00, 0x00, 0xc8, +0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, 0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x7f, 0x6c, +0x58, 0x13, 0x00, 0x00, 0x44, 0x00, 0x04, 0x1c, 0x49, 0xff, 0xe3, 0xfc, 0x40, 0x00, 0x70, 0x09, +0x4e, 0x03, 0xff, 0xf4, 0x46, 0x10, 0x20, 0x04, 0x58, 0x23, 0x00, 0x00, 0x58, 0x10, 0x80, 0xc0, +0x44, 0x00, 0x00, 0xc8, 0x49, 0xff, 0xe3, 0xd0, 0x40, 0x83, 0x14, 0x08, 0x3e, 0x2f, 0xf8, 0xac, +0x40, 0x84, 0x08, 0x00, 0x58, 0x94, 0x00, 0x00, 0x44, 0x70, 0x04, 0x28, 0x58, 0x03, 0x80, 0x00, +0x58, 0x13, 0x00, 0x00, 0x49, 0xff, 0xe3, 0xde, 0x50, 0x73, 0x80, 0x04, 0x44, 0x50, 0x04, 0x48, +0x1c, 0x04, 0x80, 0x01, 0x4c, 0x72, 0xff, 0xf4, 0x40, 0x93, 0x14, 0x08, 0x3e, 0x4f, 0xf8, 0xec, +0x40, 0x94, 0x90, 0x00, 0x58, 0x03, 0x80, 0x00, 0x58, 0x13, 0x00, 0x00, 0x49, 0xff, 0xe3, 0xca, +0x50, 0x73, 0x80, 0x04, 0x44, 0x50, 0x04, 0x68, 0x1c, 0x04, 0x80, 0x01, 0x4c, 0x72, 0xff, 0xf4, +0x46, 0x10, 0x24, 0x44, 0x3e, 0xaf, 0x84, 0x80, 0x58, 0x10, 0x84, 0x0b, 0x44, 0x00, 0x06, 0x10, +0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x28, 0x01, 0x46, 0x10, 0x3f, 0xf0, 0x58, 0x10, 0x80, 0x03, +0x44, 0x00, 0x00, 0x54, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x28, 0x01, 0x44, 0x00, 0x06, 0x1c, +0x44, 0x10, 0x00, 0x00, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x28, 0x01, 0x46, 0x18, 0x20, 0x04, +0x58, 0x10, 0x80, 0xc0, 0x44, 0x00, 0x00, 0xc8, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x28, 0x01, +0x44, 0x00, 0x00, 0x01, 0x49, 0xff, 0x7f, 0x00, 0x58, 0x13, 0x00, 0x00, 0x44, 0x00, 0x04, 0x1c, +0x49, 0xff, 0xe3, 0x90, 0x40, 0x00, 0x70, 0x09, 0x4e, 0x03, 0xff, 0xf4, 0x46, 0x10, 0x20, 0x04, +0x58, 0x23, 0x00, 0x00, 0x58, 0x10, 0x80, 0xc0, 0x44, 0x00, 0x00, 0xc8, 0x40, 0x73, 0x14, 0x08, +0x49, 0xff, 0xe3, 0x62, 0x3e, 0x2f, 0xf9, 0x2c, 0x40, 0x93, 0x88, 0x00, 0x44, 0x70, 0x06, 0xcc, +0x58, 0x03, 0x80, 0x00, 0x58, 0x13, 0x00, 0x00, 0x49, 0xff, 0xe3, 0x74, 0x50, 0x73, 0x80, 0x04, +0x44, 0x50, 0x06, 0xec, 0x1c, 0x04, 0x80, 0x01, 0x4c, 0x72, 0xff, 0xf4, 0x46, 0x10, 0x24, 0x44, +0x3e, 0x9f, 0x84, 0x80, 0x58, 0x10, 0x84, 0x0b, 0x44, 0x00, 0x06, 0x10, 0x58, 0x23, 0x00, 0x00, +0x4b, 0xe0, 0x24, 0x01, 0x46, 0x10, 0x3f, 0xf0, 0x58, 0x10, 0x80, 0x03, 0x44, 0x00, 0x00, 0x54, +0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x24, 0x01, 0x44, 0x00, 0x06, 0x1c, 0x44, 0x10, 0x00, 0x05, +0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x24, 0x01, 0x46, 0x18, 0x20, 0x04, 0x58, 0x10, 0x80, 0xc0, +0x44, 0x00, 0x00, 0xc8, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x24, 0x01, 0x44, 0x00, 0x00, 0x01, +0x49, 0xff, 0x7e, 0xaa, 0x44, 0x00, 0x04, 0x1c, 0x58, 0x13, 0x00, 0x00, 0x49, 0xff, 0xe3, 0x3a, +0x40, 0x40, 0x70, 0x09, 0x4e, 0x43, 0xff, 0xf4, 0x46, 0x10, 0x20, 0x04, 0x44, 0x00, 0x00, 0xc8, +0x58, 0x10, 0x80, 0xc0, 0x58, 0x23, 0x00, 0x00, 0x40, 0xa3, 0x14, 0x08, 0x49, 0xff, 0xe3, 0x0c, +0x3e, 0x0f, 0xf9, 0x6c, 0x40, 0x95, 0x00, 0x00, 0x44, 0x70, 0x06, 0xcc, 0x58, 0x03, 0x80, 0x00, +0x58, 0x13, 0x00, 0x00, 0x49, 0xff, 0xe3, 0x1e, 0x50, 0x73, 0x80, 0x04, 0x44, 0x50, 0x06, 0xec, +0x1c, 0x04, 0x80, 0x01, 0x4c, 0x72, 0xff, 0xf4, 0x4e, 0x63, 0x00, 0x06, 0x3e, 0x0f, 0xe1, 0xb2, +0x48, 0x00, 0x00, 0x08, 0x44, 0x50, 0x00, 0x01, 0x4c, 0x62, 0xc0, 0x56, 0x3e, 0x0f, 0xe1, 0xb3, +0x00, 0x70, 0x00, 0x00, 0x4e, 0x73, 0x00, 0x50, 0x46, 0x10, 0x24, 0x44, 0x58, 0x10, 0x84, 0x0a, +0x44, 0x00, 0x06, 0x10, 0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xe2, 0xde, 0x46, 0x18, 0x3f, 0xf0, +0x58, 0x10, 0x80, 0x03, 0x44, 0x00, 0x00, 0x54, 0x58, 0x23, 0x00, 0x00, 0x49, 0xff, 0xe2, 0xd4, +0x44, 0x70, 0x00, 0x00, 0x58, 0x23, 0x80, 0x00, 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, +0x49, 0xff, 0xf1, 0xea, 0x50, 0x73, 0x80, 0x01, 0x44, 0x50, 0x00, 0x10, 0x4c, 0x72, 0xff, 0xf4, +0x44, 0x70, 0x00, 0x00, 0x58, 0x23, 0x80, 0x00, 0x58, 0x03, 0x00, 0x00, 0x44, 0x10, 0x00, 0x01, +0x49, 0xff, 0xf1, 0xda, 0x50, 0x73, 0x80, 0x01, 0x44, 0x50, 0x00, 0x10, 0x4c, 0x72, 0xff, 0xf4, +0x44, 0x70, 0x04, 0x28, 0x58, 0x03, 0x80, 0x00, 0x58, 0x13, 0x00, 0x00, 0x49, 0xff, 0xe2, 0xca, +0x14, 0x04, 0x00, 0x00, 0x58, 0x13, 0x00, 0x00, 0x50, 0x03, 0x80, 0x20, 0x49, 0xff, 0xe2, 0xc2, +0x50, 0x73, 0x80, 0x04, 0x44, 0x50, 0x04, 0x48, 0x14, 0x04, 0x00, 0x10, 0x50, 0x84, 0x00, 0x04, +0x4c, 0x72, 0xff, 0xea, 0x3e, 0x7f, 0x84, 0x80, 0x44, 0x00, 0x00, 0x44, 0x44, 0x10, 0x82, 0xd0, +0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, 0x4e, 0x63, 0x00, 0x12, 0x2e, 0x57, 0xe1, 0xb2, +0x4e, 0x52, 0x00, 0x04, 0x48, 0x00, 0x00, 0x14, 0x46, 0x10, 0x24, 0x44, 0x58, 0x10, 0x84, 0x08, +0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x06, 0x10, 0x48, 0x00, 0x00, 0x22, 0x44, 0x50, 0x00, 0x01, +0x4c, 0x62, 0xc0, 0x2a, 0x2f, 0xe7, 0xe1, 0xb3, 0x4f, 0xe2, 0x00, 0x12, 0x46, 0x10, 0x24, 0x44, +0x58, 0x10, 0x84, 0x00, 0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x06, 0x10, 0x4b, 0xe0, 0x1c, 0x01, +0x46, 0x10, 0x3f, 0xf0, 0x58, 0x10, 0x80, 0x03, 0x48, 0x00, 0x00, 0x10, 0x46, 0x10, 0x24, 0x44, +0x58, 0x10, 0x84, 0x08, 0x44, 0x00, 0x06, 0x10, 0x58, 0x23, 0x00, 0x00, 0x4b, 0xe0, 0x1c, 0x01, +0x46, 0x18, 0x3f, 0xf0, 0x58, 0x10, 0x80, 0x03, 0x44, 0x00, 0x00, 0x54, 0x58, 0x23, 0x00, 0x00, +0x4b, 0xe0, 0x1c, 0x01, 0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x00, 0xa0, 0x44, 0x16, 0xf5, 0xfe, +0x49, 0xff, 0xe2, 0x4a, 0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x00, 0x70, 0x44, 0x10, 0x00, 0x00, +0x49, 0xff, 0xe2, 0x42, 0x46, 0x10, 0x20, 0x04, 0x58, 0x10, 0x80, 0xc0, 0x58, 0x23, 0x00, 0x00, +0x44, 0x00, 0x00, 0xc8, 0x49, 0xff, 0xe2, 0x38, 0x3a, 0x6f, 0xa8, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0xa0, 0xbc, 0x44, 0x60, 0x00, 0x00, 0x58, 0x80, 0x00, 0x00, 0x50, 0x63, 0x00, 0x01, +0x58, 0x03, 0x00, 0x00, 0x58, 0x14, 0x00, 0x00, 0x49, 0xff, 0xf1, 0xf6, 0x44, 0x50, 0x00, 0x0e, +0x4c, 0x62, 0xff, 0xf6, 0x3a, 0x6f, 0xa0, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xaa, 0xbc, +0x51, 0xff, 0xff, 0xfc, 0x58, 0x60, 0x00, 0x00, 0x49, 0xff, 0xb7, 0x0e, 0x46, 0x10, 0x13, 0x12, +0x58, 0x50, 0x8d, 0x00, 0x4c, 0x02, 0xc0, 0x06, 0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x18, +0x46, 0x20, 0x17, 0xd7, 0x58, 0x51, 0x08, 0x40, 0x4c, 0x02, 0xc0, 0x06, 0x44, 0x00, 0x00, 0x01, +0x48, 0x00, 0x00, 0x0e, 0x46, 0x30, 0x26, 0x25, 0x58, 0x51, 0x8a, 0x00, 0x4c, 0x02, 0x80, 0x06, +0x44, 0x80, 0x00, 0x00, 0x48, 0x00, 0x00, 0x08, 0x44, 0x00, 0x00, 0x02, 0x3e, 0x4f, 0xd4, 0x40, +0x38, 0x82, 0x03, 0x02, 0x50, 0x54, 0x00, 0x01, 0x40, 0x82, 0x8c, 0x08, 0x3e, 0x0f, 0xd4, 0x7c, +0x40, 0x84, 0x00, 0x00, 0x3e, 0x7f, 0xf8, 0x70, 0x3e, 0x9f, 0x84, 0x80, 0x3f, 0xcf, 0x84, 0xbc, +0x02, 0x44, 0x00, 0x00, 0x58, 0x13, 0x00, 0x00, 0x44, 0x00, 0x00, 0xb0, 0x44, 0x23, 0xff, 0xf0, +0x44, 0x30, 0x00, 0x04, 0x49, 0xff, 0xe2, 0x1c, 0x02, 0x44, 0x00, 0x01, 0x46, 0x23, 0xff, 0x00, +0x58, 0x13, 0x00, 0x00, 0x44, 0x00, 0x01, 0x0c, 0x44, 0x30, 0x00, 0x14, 0x49, 0xff, 0xe2, 0x10, +0x04, 0x44, 0x00, 0x01, 0x46, 0x20, 0x00, 0xff, 0x44, 0x30, 0x00, 0x00, 0x58, 0x21, 0x0f, 0xff, +0x58, 0x13, 0x00, 0x00, 0x44, 0x00, 0x01, 0x0c, 0x49, 0xff, 0xe2, 0x02, 0x46, 0x10, 0xf8, 0x00, +0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x01, 0x10, 0x4b, 0xe0, 0x24, 0x01, 0x46, 0x1f, 0xfe, 0x04, +0x58, 0x10, 0x80, 0x10, 0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x00, 0xb4, 0x4b, 0xe0, 0x24, 0x01, +0x44, 0x00, 0x00, 0x64, 0x49, 0xff, 0x7d, 0x30, 0x46, 0x13, 0xff, 0x0c, 0x58, 0x10, 0x80, 0x10, +0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x00, 0xb4, 0x4b, 0xe0, 0x24, 0x01, 0x46, 0x10, 0xb0, 0x00, +0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x01, 0x10, 0x4b, 0xe0, 0x24, 0x01, 0x4e, 0x63, 0x00, 0x10, +0x58, 0x13, 0x00, 0x00, 0x44, 0x00, 0x04, 0x20, 0x4b, 0xe0, 0x70, 0x01, 0x54, 0x20, 0x7f, 0x00, +0x40, 0x11, 0x20, 0x09, 0x12, 0x13, 0x80, 0x00, 0x48, 0x00, 0x00, 0x12, 0x44, 0x50, 0x00, 0x01, +0x4c, 0x62, 0xc0, 0x0e, 0x44, 0x00, 0x04, 0x20, 0x58, 0x13, 0x00, 0x00, 0x4b, 0xe0, 0x70, 0x01, +0x54, 0x40, 0x7f, 0x00, 0x40, 0x32, 0x20, 0x09, 0x12, 0x33, 0x80, 0x0f, 0x50, 0x73, 0x80, 0x02, +0x3e, 0x5f, 0xf8, 0x8e, 0x50, 0x84, 0x00, 0x20, 0x4c, 0x72, 0xff, 0x8c, 0x51, 0xff, 0x80, 0x04, +0x3a, 0x6f, 0xaa, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0xa4, 0xbc, 0x51, 0xff, 0xff, 0xfc, +0x58, 0x60, 0x00, 0x00, 0x49, 0xff, 0xb6, 0x58, 0x46, 0x10, 0x13, 0x12, 0x58, 0x50, 0x8d, 0x00, +0x4c, 0x02, 0xc0, 0x08, 0x44, 0x40, 0x00, 0x04, 0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x20, +0x46, 0x30, 0x17, 0xd7, 0x58, 0x51, 0x88, 0x40, 0x4c, 0x02, 0xc0, 0x08, 0x44, 0x40, 0x00, 0x06, +0x44, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x14, 0x46, 0x20, 0x26, 0x25, 0x58, 0x51, 0x0a, 0x00, +0x4c, 0x02, 0xc0, 0x08, 0x44, 0x40, 0x00, 0x09, 0x44, 0x00, 0x00, 0x02, 0x48, 0x00, 0x00, 0x08, +0x44, 0x40, 0x00, 0x00, 0x58, 0x82, 0x00, 0x00, 0x48, 0x00, 0x00, 0x06, 0x3e, 0x5f, 0xd4, 0x40, +0x38, 0x82, 0x83, 0x02, 0x3c, 0x23, 0xf0, 0xd8, 0x3e, 0x1f, 0xd4, 0x7c, 0x44, 0x00, 0x00, 0x00, +0x02, 0x50, 0x80, 0x00, 0x50, 0x10, 0x80, 0x20, 0x4c, 0x51, 0x40, 0x06, 0x58, 0x90, 0x00, 0x00, +0x48, 0x00, 0x00, 0x0a, 0x50, 0x00, 0x00, 0x01, 0x44, 0x50, 0x00, 0x0f, 0x4c, 0x02, 0xff, 0xf2, +0x44, 0x90, 0x00, 0x00, 0x3e, 0x7f, 0x85, 0x08, 0x58, 0x13, 0x00, 0x00, 0x44, 0x00, 0x00, 0xb0, +0x44, 0x20, 0x00, 0x0f, 0x44, 0x30, 0x00, 0x00, 0x40, 0x94, 0x88, 0x08, 0x4b, 0xe0, 0x1c, 0x01, +0x40, 0x34, 0xa0, 0x00, 0x50, 0x81, 0x80, 0x01, 0x3e, 0x1f, 0xd4, 0x7c, 0x38, 0x40, 0xa3, 0x01, +0x44, 0x00, 0x00, 0xb0, 0x58, 0x13, 0x00, 0x00, 0x44, 0x23, 0xff, 0xf0, 0x44, 0x30, 0x00, 0x04, +0x4b, 0xe0, 0x1c, 0x01, 0x40, 0x84, 0x0c, 0x08, 0x3e, 0x4f, 0xd4, 0x7c, 0x40, 0x84, 0x10, 0x00, +0x02, 0x44, 0x00, 0x01, 0x46, 0x23, 0xff, 0x00, 0x58, 0x13, 0x00, 0x00, 0x44, 0x00, 0x01, 0x0c, +0x44, 0x30, 0x00, 0x14, 0x4b, 0xe0, 0x1c, 0x01, 0x04, 0x44, 0x00, 0x01, 0x46, 0x20, 0x00, 0xff, +0x44, 0x30, 0x00, 0x00, 0x58, 0x13, 0x00, 0x00, 0x58, 0x21, 0x0f, 0xff, 0x44, 0x00, 0x01, 0x0c, +0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x10, 0x03, 0x00, 0x3e, 0x7f, 0x84, 0x80, 0x58, 0x23, 0x00, 0x00, +0x58, 0x10, 0x80, 0x88, 0x44, 0x00, 0x07, 0xdc, 0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x10, 0xf8, 0x00, +0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x01, 0x10, 0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x1f, 0xfe, 0x04, +0x58, 0x23, 0x00, 0x00, 0x58, 0x10, 0x80, 0x10, 0x44, 0x00, 0x00, 0xb4, 0x4b, 0xe0, 0x1c, 0x01, +0x44, 0x00, 0x00, 0x64, 0x49, 0xff, 0x7c, 0x40, 0x46, 0x13, 0xfe, 0x0c, 0x58, 0x23, 0x00, 0x00, +0x58, 0x10, 0x80, 0x10, 0x44, 0x00, 0x00, 0xb4, 0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x10, 0xb0, 0x00, +0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x01, 0x10, 0x4b, 0xe0, 0x1c, 0x01, 0x46, 0x10, 0x03, 0x00, +0x58, 0x10, 0x80, 0x08, 0x58, 0x23, 0x00, 0x00, 0x44, 0x00, 0x07, 0xdc, 0x4b, 0xe0, 0x1c, 0x01, +0x51, 0xff, 0x80, 0x04, 0x3a, 0x6f, 0xa4, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x3a, 0x6f, 0x98, 0xbc, +0x58, 0x60, 0x00, 0x00, 0x49, 0xff, 0xff, 0x2a, 0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xf0, 0x38, +0x58, 0x03, 0x00, 0x00, 0x49, 0xff, 0xfe, 0x6c, 0x3a, 0x6f, 0x98, 0x84, 0x4a, 0x00, 0x78, 0x20, +0x3a, 0x6f, 0x9c, 0xbc, 0x51, 0xff, 0xff, 0xfc, 0x46, 0x38, 0x00, 0x21, 0x04, 0x01, 0x80, 0x04, +0x54, 0x00, 0x00, 0x03, 0x44, 0x50, 0x00, 0x02, 0x3c, 0x0f, 0xf8, 0xf1, 0x4c, 0x02, 0x80, 0x0e, +0x44, 0x50, 0x00, 0x03, 0x4c, 0x02, 0x80, 0x10, 0x46, 0x00, 0x13, 0x12, 0x3e, 0x1f, 0xe3, 0xc8, +0x58, 0x00, 0x0d, 0x00, 0x48, 0x00, 0x00, 0x0e, 0x46, 0x00, 0x17, 0xd7, 0x58, 0x00, 0x08, 0x40, +0x48, 0x00, 0x00, 0x06, 0x46, 0x00, 0x26, 0x25, 0x58, 0x00, 0x0a, 0x00, 0x3e, 0x1f, 0xe3, 0xc8, +0x14, 0x00, 0x80, 0x00, 0x49, 0xff, 0x70, 0x16, 0x2e, 0x57, 0xe2, 0x18, 0x4e, 0x53, 0x00, 0x24, +0x2e, 0x7f, 0xdf, 0xfa, 0x4e, 0x75, 0x00, 0x14, 0x46, 0x05, 0x00, 0x12, 0x58, 0x00, 0x00, 0x08, +0x04, 0x40, 0x00, 0x00, 0x44, 0x2f, 0xff, 0xcf, 0x40, 0x32, 0x08, 0x02, 0x14, 0x30, 0x00, 0x00, +0x04, 0x10, 0x00, 0x00, 0x58, 0x10, 0x80, 0x30, 0x48, 0x00, 0x00, 0x0c, 0x46, 0x05, 0x00, 0x12, +0x58, 0x00, 0x00, 0x08, 0x04, 0x50, 0x00, 0x00, 0x44, 0x6f, 0xff, 0xcf, 0x40, 0x12, 0x98, 0x02, +0x14, 0x10, 0x00, 0x00, 0x2f, 0xe7, 0xdf, 0xbe, 0x54, 0x7f, 0x00, 0x20, 0x4e, 0x72, 0x00, 0x0a, +0x44, 0x10, 0x00, 0x01, 0x3e, 0x17, 0xe3, 0xbd, 0x44, 0x10, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0a, +0x2e, 0x47, 0xdf, 0xbd, 0x54, 0x32, 0x00, 0x02, 0x4e, 0x32, 0x00, 0x06, 0x44, 0x10, 0x00, 0x01, +0x3e, 0x17, 0xe3, 0xbe, 0x2e, 0x67, 0xdf, 0xbc, 0x54, 0x53, 0x00, 0x02, 0x4e, 0x52, 0x00, 0x06, +0x44, 0x00, 0x00, 0x01, 0x3e, 0x07, 0xe3, 0xc0, 0x2e, 0x07, 0xdf, 0xbd, 0x54, 0x30, 0x00, 0x04, +0x4e, 0x32, 0x00, 0x06, 0x44, 0x20, 0x00, 0x00, 0x48, 0x00, 0x00, 0x04, 0x44, 0x20, 0x00, 0x01, +0x54, 0x40, 0x00, 0x08, 0x3e, 0x27, 0xe1, 0xb2, 0x4e, 0x42, 0x00, 0x06, 0x44, 0x10, 0x00, 0x00, +0x48, 0x00, 0x00, 0x04, 0x44, 0x10, 0x00, 0x01, 0x2e, 0x27, 0xdf, 0xde, 0x3e, 0x17, 0xe1, 0xb3, +0x54, 0x61, 0x00, 0x1f, 0x4e, 0x62, 0x00, 0x06, 0x45, 0xe0, 0x00, 0x01, 0x3f, 0xe7, 0xe3, 0xbf, +0x2e, 0x77, 0xdf, 0xe1, 0x54, 0x53, 0x80, 0x1f, 0x52, 0x12, 0x80, 0x00, 0x2e, 0x37, 0xe1, 0xb2, +0x40, 0x10, 0x80, 0x10, 0x3e, 0x17, 0xe3, 0xbb, 0x3e, 0x67, 0xe3, 0xba, 0x4e, 0x32, 0x00, 0x08, +0x2e, 0x37, 0xe1, 0xb3, 0x4e, 0x33, 0x00, 0x0a, 0x48, 0x00, 0x00, 0x24, 0x2e, 0x07, 0xe1, 0xb3, +0x4e, 0x03, 0x00, 0x20, 0x4e, 0x63, 0x00, 0x06, 0x44, 0x10, 0x00, 0x01, 0x48, 0x00, 0x00, 0x08, +0x5e, 0xf0, 0xff, 0xfb, 0x4e, 0xf3, 0x00, 0x08, 0x44, 0x10, 0x00, 0x02, 0x3e, 0x0f, 0xe3, 0xbc, +0x48, 0x00, 0x00, 0x0e, 0x3e, 0x0f, 0xe3, 0xbc, 0x5e, 0xf0, 0xff, 0xf7, 0x4e, 0xf3, 0x00, 0x06, +0x44, 0x10, 0x00, 0x03, 0x48, 0x00, 0x00, 0x04, 0x44, 0x10, 0x00, 0x04, 0x10, 0x10, 0x00, 0x00, +0x2e, 0x17, 0xe3, 0xbc, 0x50, 0x20, 0xff, 0xff, 0x54, 0x41, 0x00, 0xff, 0x5c, 0xf2, 0x00, 0x04, +0x4e, 0xf3, 0x00, 0x06, 0x3e, 0x0f, 0xd4, 0x34, 0x49, 0xff, 0x68, 0x10, 0x2e, 0x17, 0xe1, 0xb2, +0x4e, 0x13, 0x00, 0x08, 0x4e, 0x62, 0x00, 0x06, 0x44, 0x30, 0x00, 0x01, 0x3e, 0x37, 0xe3, 0xdd, +0x2e, 0x07, 0xe1, 0xb3, 0x4e, 0x03, 0x00, 0x04, 0x4e, 0x63, 0x00, 0x1c, 0x3e, 0x0f, 0xd4, 0x40, +0x3c, 0x1d, 0xf8, 0xf2, 0x04, 0x60, 0x00, 0x01, 0x4c, 0x13, 0x40, 0x06, 0x44, 0x00, 0x00, 0x00, +0x48, 0x00, 0x00, 0x18, 0x04, 0x50, 0x00, 0x03, 0x4c, 0x12, 0xc0, 0x06, 0x44, 0x00, 0x00, 0x01, +0x48, 0x00, 0x00, 0x10, 0x04, 0x50, 0x00, 0x05, 0x4c, 0x12, 0xc0, 0x12, 0x48, 0x00, 0x00, 0x08, +0x44, 0x10, 0x00, 0x01, 0x3e, 0x17, 0xe3, 0xde, 0x48, 0xff, 0xff, 0xe2, 0x44, 0x00, 0x00, 0x02, +0x3e, 0x6f, 0xd4, 0x40, 0x38, 0x43, 0x03, 0x02, 0x3c, 0x4f, 0xf8, 0xf3, 0x44, 0x00, 0x00, 0x07, +0x44, 0x40, 0x00, 0x02, 0x45, 0xe0, 0x00, 0x00, 0x3c, 0x0f, 0xf8, 0xf4, 0x3c, 0x4f, 0xf8, 0xf5, +0x3f, 0xe7, 0xe3, 0xd8, 0x46, 0x78, 0x00, 0x21, 0x04, 0x53, 0x80, 0x04, 0x42, 0x02, 0xe0, 0x0b, +0x4e, 0x02, 0x00, 0x06, 0x44, 0x50, 0x00, 0x01, 0x3e, 0x57, 0xe3, 0xd8, 0x44, 0x40, 0x00, 0x07, +0x44, 0x50, 0x00, 0x22, 0x44, 0x00, 0x00, 0x0a, 0x3c, 0x4b, 0xf1, 0xd9, 0x3e, 0x57, 0xe3, 0xd9, +0x3c, 0x4b, 0xf0, 0xd8, 0x3e, 0x07, 0xe3, 0xdb, 0x44, 0x70, 0x00, 0x09, 0x46, 0x18, 0x08, 0x08, +0x44, 0x20, 0x00, 0x00, 0x58, 0x10, 0x80, 0x80, 0x44, 0x30, 0x08, 0x00, 0x3e, 0x77, 0xe3, 0xdc, +0x3c, 0x4b, 0xf1, 0xd8, 0x3c, 0x1f, 0xfe, 0xfc, 0x3c, 0x2f, 0xf8, 0xed, 0x3e, 0x07, 0xe3, 0xda, +0x3c, 0x3f, 0xfe, 0xf2, 0x3c, 0x2f, 0xfe, 0xf4, 0x3c, 0x3f, 0xfe, 0xe9, 0x3c, 0x2f, 0xfe, 0xea, +0x3c, 0x2f, 0xfe, 0xeb, 0x3c, 0x1f, 0xfe, 0xf5, 0x3c, 0x1f, 0xfe, 0xf6, 0x3c, 0x3f, 0xfe, 0xef, +0x3c, 0x2f, 0xfe, 0xf0, 0x3c, 0x2f, 0xfe, 0xf1, 0x3c, 0x1f, 0xfe, 0xf9, 0x3c, 0x1f, 0xfe, 0xfa, +0x3c, 0x3f, 0xfe, 0xec, 0x3c, 0x2f, 0xfe, 0xed, 0x3c, 0x2f, 0xfe, 0xee, 0x3c, 0x1f, 0xfe, 0xf7, +0x3c, 0x1f, 0xfe, 0xf8, 0x3c, 0x2f, 0xfe, 0xf3, 0x3c, 0x1f, 0xfe, 0xfb, 0x51, 0xff, 0x80, 0x04, +0x3a, 0x6f, 0x9c, 0x84, 0x4a, 0x00, 0x78, 0x20, 0x52, 0x41, 0x4d, 0x20, 0x63, 0x6f, 0x64, 0x65, +0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x20, 0x43, 0x4d, 0x44, 0x20, 0x52, 0x65, 0x73, +0x74, 0x61, 0x72, 0x74, 0x20, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x66, 0x6c, +0x6f, 0x77, 0x0a, 0x00, 0x52, 0x45, 0x47, 0x33, 0x32, 0x28, 0x53, 0x59, 0x53, 0x5f, 0x54, 0x4f, +0x50, 0x5f, 0x4d, 0x49, 0x53, 0x43, 0x32, 0x29, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x25, 0x78, 0x20, +0x0a, 0x00, 0x00, 0x00, 0x57, 0x49, 0x46, 0x49, 0x00, 0x00, 0x00, 0x00, 0x57, 0x49, 0x46, 0x49, +0x5f, 0x4c, 0x49, 0x53, 0x52, 0x0a, 0x00, 0x00, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x50, +0x49, 0x4e, 0x5f, 0x4d, 0x55, 0x58, 0x31, 0x3d, 0x30, 0x78, 0x25, 0x30, 0x38, 0x78, 0x0a, 0x00, +0x50, 0x49, 0x4e, 0x5f, 0x4d, 0x55, 0x58, 0x31, 0x3d, 0x30, 0x78, 0x25, 0x30, 0x38, 0x78, 0x0a, +0x00, 0x00, 0x00, 0x00, 0x50, 0x43, 0x49, 0x65, 0x5f, 0x52, 0x65, 0x73, 0x65, 0x74, 0x57, 0x6f, +0x72, 0x6b, 0x61, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x6e, 0x69, 0x74, 0x20, 0x63, 0x61, 0x6c, +0x6c, 0x65, 0x64, 0x20, 0x0a, 0x00, 0x00, 0x00, 0x57, 0x61, 0x74, 0x63, 0x68, 0x44, 0x6f, 0x67, +0x52, 0x65, 0x73, 0x65, 0x74, 0x41, 0x6e, 0x64, 0x65, 0x73, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, +0x64, 0x21, 0x0a, 0x00, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x21, 0x20, 0x5b, 0x25, +0x73, 0x2c, 0x20, 0x25, 0x64, 0x5d, 0x0a, 0x00, 0x73, 0x72, 0x63, 0x2f, 0x77, 0x69, 0x66, 0x69, +0x5f, 0x75, 0x6e, 0x69, 0x5f, 0x6d, 0x61, 0x63, 0x2f, 0x52, 0x4f, 0x4d, 0x2f, 0x6e, 0x69, 0x63, +0x2f, 0x68, 0x61, 0x6c, 0x2f, 0x4d, 0x54, 0x37, 0x36, 0x30, 0x33, 0x2f, 0x68, 0x61, 0x6c, 0x5f, +0x72, 0x6f, 0x6d, 0x2e, 0x63, 0x00, 0x00, 0x00, 0x68, 0x61, 0x6c, 0x54, 0x78, 0x43, 0x6f, 0x6e, +0x66, 0x69, 0x67, 0x54, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x3a, 0x20, 0x48, 0x54, +0x20, 0x72, 0x61, 0x74, 0x65, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x66, 0x6f, 0x6c, 0x6c, +0x6f, 0x77, 0x20, 0x4f, 0x46, 0x44, 0x4d, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, +0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x00, 0x68, 0x61, 0x6c, 0x4d, 0x61, 0x63, 0x54, 0x78, +0x53, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x51, 0x75, 0x65, 0x75, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, +0x6f, 0x6c, 0x6c, 0x44, 0x6f, 0x6e, 0x65, 0x3a, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, +0x20, 0x77, 0x61, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x71, 0x75, 0x65, 0x75, 0x65, 0x20, 0x73, +0x74, 0x6f, 0x70, 0x20, 0x64, 0x6f, 0x6e, 0x65, 0x0a, 0x00, 0x00, 0x00, 0x65, 0x6d, 0x75, 0x6c, +0x54, 0x78, 0x53, 0x74, 0x6f, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x3a, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x20, 0x77, 0x61, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x71, 0x75, 0x65, 0x75, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x70, 0x20, 0x64, 0x6f, 0x6e, 0x65, 0x0a, 0x00, 0x00, 0x00, -0x65, 0x6d, 0x75, 0x6c, 0x54, 0x78, 0x53, 0x74, 0x6f, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x3a, -0x20, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x20, 0x77, 0x61, 0x69, 0x74, 0x69, 0x6e, 0x67, -0x20, 0x71, 0x75, 0x65, 0x75, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x70, 0x20, 0x64, 0x6f, 0x6e, 0x65, -0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, -0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x12, 0x60, -0x28, 0x00, 0x12, 0x60, 0x2c, 0x00, 0x12, 0x60, 0x2c, 0x00, 0x12, 0x60, 0x30, 0x00, 0x12, 0x60, -0x30, 0x00, 0x12, 0x60, 0x28, 0x00, 0x12, 0x60, 0x28, 0x00, 0x12, 0x60, 0x28, 0x00, 0x12, 0x60, -0x34, 0x00, 0x12, 0x60, 0x34, 0x00, 0x12, 0x60, 0x38, 0x00, 0x12, 0x60, 0x38, 0x00, 0x12, 0x60, -0x3c, 0x00, 0x12, 0x60, 0x14, 0x00, 0x13, 0x60, 0x14, 0x00, 0x13, 0x60, 0x10, 0x00, 0x13, 0x60, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, +0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x12, 0x60, 0x28, 0x00, 0x12, 0x60, +0x2c, 0x00, 0x12, 0x60, 0x2c, 0x00, 0x12, 0x60, 0x30, 0x00, 0x12, 0x60, 0x30, 0x00, 0x12, 0x60, +0x28, 0x00, 0x12, 0x60, 0x28, 0x00, 0x12, 0x60, 0x28, 0x00, 0x12, 0x60, 0x34, 0x00, 0x12, 0x60, +0x34, 0x00, 0x12, 0x60, 0x38, 0x00, 0x12, 0x60, 0x38, 0x00, 0x12, 0x60, 0x3c, 0x00, 0x12, 0x60, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, +0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x13, 0x60, 0x14, 0x00, 0x13, 0x60, 0x10, 0x00, 0x13, 0x60, 0x10, 0x00, 0x13, 0x60, 0x10, 0x00, 0x13, 0x60, 0x10, 0x00, 0x13, 0x60, 0x10, 0x00, 0x13, 0x60, 0x10, 0x00, 0x13, 0x60, 0x10, 0x00, 0x13, 0x60, 0x1c, 0x00, 0x13, 0x60, 0x1c, 0x00, 0x13, 0x60, -0x18, 0x00, 0x13, 0x60, 0x18, 0x00, 0x13, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, -0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x72, 0x63, 0x2f, -0x77, 0x69, 0x66, 0x69, 0x5f, 0x75, 0x6e, 0x69, 0x5f, 0x6d, 0x61, 0x63, 0x2f, 0x52, 0x4f, 0x4d, +0x18, 0x00, 0x13, 0x60, 0x18, 0x00, 0x13, 0x60, 0x73, 0x72, 0x63, 0x2f, 0x77, 0x69, 0x66, 0x69, +0x5f, 0x75, 0x6e, 0x69, 0x5f, 0x6d, 0x61, 0x63, 0x2f, 0x52, 0x4f, 0x4d, 0x2f, 0x6e, 0x69, 0x63, +0x2f, 0x68, 0x61, 0x6c, 0x2f, 0x4d, 0x54, 0x37, 0x36, 0x30, 0x33, 0x2f, 0x68, 0x61, 0x6c, 0x5f, +0x70, 0x77, 0x72, 0x5f, 0x6d, 0x67, 0x74, 0x5f, 0x72, 0x6f, 0x6d, 0x2e, 0x63, 0x00, 0x00, 0x00, +0x73, 0x72, 0x63, 0x2f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x75, 0x6e, 0x69, 0x5f, 0x6d, 0x61, 0x63, 0x2f, 0x6e, 0x69, 0x63, 0x2f, 0x68, 0x61, 0x6c, 0x2f, 0x4d, 0x54, 0x37, 0x36, 0x30, 0x33, 0x2f, -0x68, 0x61, 0x6c, 0x5f, 0x70, 0x77, 0x72, 0x5f, 0x6d, 0x67, 0x74, 0x5f, 0x72, 0x6f, 0x6d, 0x2e, -0x63, 0x00, 0x00, 0x00, 0x73, 0x72, 0x63, 0x2f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x75, 0x6e, 0x69, -0x5f, 0x6d, 0x61, 0x63, 0x2f, 0x6e, 0x69, 0x63, 0x2f, 0x68, 0x61, 0x6c, 0x2f, 0x4d, 0x54, 0x37, -0x36, 0x30, 0x33, 0x2f, 0x68, 0x61, 0x6c, 0x2e, 0x63, 0x00, 0x00, 0x00, 0x73, 0x72, 0x63, 0x2f, -0x77, 0x69, 0x66, 0x69, 0x5f, 0x75, 0x6e, 0x69, 0x5f, 0x6d, 0x61, 0x63, 0x2f, 0x6e, 0x69, 0x63, -0x2f, 0x6e, 0x69, 0x63, 0x2e, 0x63, 0x00, 0x00, 0x00, 0x00, 0x31, 0x60, 0x08, 0x00, 0x31, 0x60, -0x04, 0x00, 0x31, 0x60, 0x0c, 0x00, 0x31, 0x60, 0x24, 0x00, 0x31, 0x60, 0x28, 0x00, 0x31, 0x60, -0x08, 0x00, 0x00, 0xa0, 0x04, 0x00, 0x00, 0xa0, 0x73, 0x72, 0x63, 0x2f, 0x77, 0x69, 0x66, 0x69, -0x5f, 0x75, 0x6e, 0x69, 0x5f, 0x6d, 0x61, 0x63, 0x2f, 0x6d, 0x67, 0x6d, 0x74, 0x2f, 0x63, 0x6e, -0x6d, 0x5f, 0x6d, 0x65, 0x6d, 0x2e, 0x63, 0x00, 0x73, 0x72, 0x63, 0x2f, 0x77, 0x69, 0x66, 0x69, -0x5f, 0x75, 0x6e, 0x69, 0x5f, 0x6d, 0x61, 0x63, 0x2f, 0x6d, 0x67, 0x6d, 0x74, 0x2f, 0x74, 0x78, +0x68, 0x61, 0x6c, 0x2e, 0x63, 0x00, 0x00, 0x00, 0x73, 0x72, 0x63, 0x2f, 0x77, 0x69, 0x66, 0x69, +0x5f, 0x75, 0x6e, 0x69, 0x5f, 0x6d, 0x61, 0x63, 0x2f, 0x6e, 0x69, 0x63, 0x2f, 0x6e, 0x69, 0x63, +0x2e, 0x63, 0x00, 0x00, 0x00, 0x00, 0x31, 0x60, 0x08, 0x00, 0x31, 0x60, 0x04, 0x00, 0x31, 0x60, +0x0c, 0x00, 0x31, 0x60, 0x24, 0x00, 0x31, 0x60, 0x28, 0x00, 0x31, 0x60, 0x08, 0x00, 0x00, 0xa0, +0x04, 0x00, 0x00, 0xa0, 0x73, 0x72, 0x63, 0x2f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x75, 0x6e, 0x69, +0x5f, 0x6d, 0x61, 0x63, 0x2f, 0x6d, 0x67, 0x6d, 0x74, 0x2f, 0x63, 0x6e, 0x6d, 0x5f, 0x6d, 0x65, 0x6d, 0x2e, 0x63, 0x00, 0x73, 0x72, 0x63, 0x2f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x75, 0x6e, 0x69, -0x5f, 0x6d, 0x61, 0x63, 0x2f, 0x6d, 0x67, 0x6d, 0x74, 0x2f, 0x72, 0x78, 0x6d, 0x2e, 0x63, 0x00, -0x41, 0x43, 0x20, 0x71, 0x75, 0x65, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x73, 0x74, 0x6f, 0x70, -0x0a, 0x00, 0x00, 0x00, 0x43, 0x46, 0x2d, 0x45, 0x4e, 0x44, 0x20, 0x66, 0x72, 0x61, 0x6d, 0x65, -0x20, 0x66, 0x61, 0x69, 0x6c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x5f, 0x6d, 0x61, 0x63, 0x2f, 0x6d, 0x67, 0x6d, 0x74, 0x2f, 0x74, 0x78, 0x6d, 0x2e, 0x63, 0x00, +0x73, 0x72, 0x63, 0x2f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x75, 0x6e, 0x69, 0x5f, 0x6d, 0x61, 0x63, +0x2f, 0x6d, 0x67, 0x6d, 0x74, 0x2f, 0x72, 0x78, 0x6d, 0x2e, 0x63, 0x00, 0x41, 0x43, 0x20, 0x71, +0x75, 0x65, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x73, 0x74, 0x6f, 0x70, 0x0a, 0x00, 0x00, 0x00, +0x43, 0x46, 0x2d, 0x45, 0x4e, 0x44, 0x20, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x66, 0x61, 0x69, +0x6c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x59, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x72, 0x63, 0x2f, 0x77, 0x69, 0x66, 0x69, -0x5f, 0x75, 0x6e, 0x69, 0x5f, 0x6d, 0x61, 0x63, 0x2f, 0x6d, 0x67, 0x6d, 0x74, 0x2f, 0x70, 0x32, -0x70, 0x5f, 0x66, 0x73, 0x6d, 0x2e, 0x63, 0x00, 0x64, 0x6c, 0x66, 0x6d, 0x43, 0x6d, 0x64, 0x46, -0x77, 0x52, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x20, 0x50, -0x53, 0x45, 0x20, 0x62, 0x75, 0x66, 0x20, 0x45, 0x72, 0x72, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x98, 0x64, 0x10, 0x00, 0xed, 0x00, 0x00, 0x00, -0xb8, 0x7d, 0x10, 0x00, 0xc2, 0x00, 0x00, 0x00, 0x2c, 0x60, 0x10, 0x00, 0x73, 0x72, 0x63, 0x2f, -0x77, 0x69, 0x66, 0x69, 0x5f, 0x75, 0x6e, 0x69, 0x5f, 0x6d, 0x61, 0x63, 0x2f, 0x6d, 0x67, 0x6d, -0x74, 0x2f, 0x68, 0x65, 0x6d, 0x5f, 0x63, 0x6d, 0x64, 0x5f, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x30, -0x65, 0x78, 0x74, 0x2e, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x01, 0x00, 0x00, 0x00, 0xac, 0x7e, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa8, 0x7f, 0x10, 0x00, -0x0e, 0x00, 0x00, 0x00, 0x90, 0x80, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x63, 0x10, 0x00, -0x05, 0x00, 0x00, 0x00, 0x28, 0x7e, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x80, 0x79, 0x10, 0x00, -0x08, 0x00, 0x00, 0x00, 0x20, 0x78, 0x10, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x7c, 0x4e, 0x10, 0x00, -0x14, 0x00, 0x00, 0x00, 0xdc, 0x51, 0x10, 0x00, 0x12, 0x00, 0x00, 0x00, 0xb0, 0x77, 0x10, 0x00, -0x11, 0x00, 0x00, 0x00, 0xb8, 0x75, 0x10, 0x00, 0x13, 0x00, 0x00, 0x00, 0xd4, 0x6b, 0x10, 0x00, -0x17, 0x00, 0x00, 0x00, 0x9c, 0x07, 0x10, 0x00, 0x18, 0x00, 0x00, 0x00, 0x90, 0xa7, 0x10, 0x00, -0x2e, 0x00, 0x00, 0x00, 0x9c, 0xa3, 0x10, 0x00, 0x21, 0x00, 0x00, 0x00, 0x90, 0x6d, 0x10, 0x00, -0x23, 0x00, 0x00, 0x00, 0x50, 0x6c, 0x10, 0x00, 0x27, 0x00, 0x00, 0x00, 0xe0, 0x6a, 0x10, 0x00, -0x28, 0x00, 0x00, 0x00, 0x6c, 0x6a, 0x10, 0x00, 0x29, 0x00, 0x00, 0x00, 0xfc, 0x69, 0x10, 0x00, -0x2b, 0x00, 0x00, 0x00, 0x44, 0x69, 0x10, 0x00, 0x33, 0x00, 0x00, 0x00, 0xc4, 0x68, 0x10, 0x00, -0x55, 0x00, 0x00, 0x00, 0x70, 0x68, 0x10, 0x00, 0x35, 0x00, 0x36, 0x00, 0x37, 0x00, 0x48, 0x00, -0x50, 0x00, 0x53, 0x00, 0x54, 0x00, 0x55, 0x00, 0x56, 0x00, 0x57, 0x00, 0x58, 0x00, 0x59, 0x00, -0x5a, 0x00, 0x5b, 0x00, 0x5c, 0x00, 0x5d, 0x00, 0x5e, 0x00, 0x5f, 0x00, 0x60, 0x00, 0x61, 0x00, -0xa0, 0x00, 0xa1, 0x00, 0xa2, 0x00, 0xa3, 0x00, 0xa4, 0x00, 0xa5, 0x00, 0xa6, 0x00, 0xa7, 0x00, -0xa8, 0x00, 0xa9, 0x00, 0xaa, 0x00, 0xab, 0x00, 0xac, 0x00, 0xad, 0x00, 0xc0, 0x00, 0xc1, 0x00, -0xc2, 0x00, 0xc3, 0x00, 0xc4, 0x00, 0xc5, 0x00, 0xc6, 0x00, 0xc7, 0x00, 0xc8, 0x00, 0xc9, 0x00, -0xca, 0x00, 0xcb, 0x00, 0xcc, 0x00, 0xcd, 0x00, 0xce, 0x00, 0xcf, 0x00, 0xd0, 0x00, 0xd1, 0x00, -0xd2, 0x00, 0xd3, 0x00, 0xd4, 0x00, 0xd5, 0x00, 0xd6, 0x00, 0xf4, 0x00, 0xf5, 0x00, 0xf6, 0x00, -0xf7, 0x00, 0x24, 0x00, 0x25, 0x00, 0x34, 0x00, 0x39, 0x00, 0x3b, 0x00, 0x42, 0x00, 0x43, 0x00, -0x9e, 0x00, 0x9f, 0x00, 0xf2, 0x00, 0xf8, 0x00, 0xf9, 0x00, 0xfa, 0x00, 0x2e, 0x01, 0x30, 0x01, -0x31, 0x01, 0x32, 0x01, 0x33, 0x01, 0x34, 0x01, 0x35, 0x01, 0x36, 0x01, 0x37, 0x01, 0x38, 0x01, -0x39, 0x01, 0x3a, 0x01, 0x3b, 0x01, 0x3c, 0x01, 0x3d, 0x01, 0x3e, 0x01, 0x3f, 0x01, 0x00, 0x00, -0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x02, 0x01, 0x03, 0x01, 0x05, 0x02, 0x00, -0x02, 0x06, 0x02, 0x01, 0x02, 0x02, 0x02, 0x03, 0x02, 0x04, 0x02, 0x05, 0x73, 0x72, 0x63, 0x2f, -0x77, 0x69, 0x66, 0x69, 0x5f, 0x75, 0x6e, 0x69, 0x5f, 0x6d, 0x61, 0x63, 0x2f, 0x6d, 0x67, 0x6d, -0x74, 0x2f, 0x6d, 0x74, 0x37, 0x36, 0x30, 0x33, 0x2f, 0x72, 0x6c, 0x6d, 0x5f, 0x70, 0x68, 0x79, -0x2e, 0x63, 0x00, 0x00, 0x52, 0x58, 0x51, 0x20, 0x52, 0x65, 0x73, 0x65, 0x74, 0x20, 0x46, 0x61, -0x69, 0x6c, 0x0a, 0x00, 0x73, 0x72, 0x63, 0x2f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x75, 0x6e, 0x69, -0x5f, 0x6d, 0x61, 0x63, 0x2f, 0x6d, 0x67, 0x6d, 0x74, 0x2f, 0x6d, 0x74, 0x37, 0x36, 0x30, 0x33, -0x2f, 0x72, 0x6c, 0x6d, 0x5f, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x2e, 0x63, 0x00, 0x00, 0x00, -0x54, 0x48, 0x45, 0x52, 0x4d, 0x43, 0x52, 0x30, 0x5b, 0x25, 0x64, 0x5d, 0x3d, 0x30, 0x78, 0x25, -0x78, 0x0a, 0x00, 0x00, 0x54, 0x68, 0x65, 0x72, 0x6d, 0x6f, 0x53, 0x74, 0x61, 0x62, 0x6c, 0x65, -0x43, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x0a, 0x00, 0x72, 0x6c, 0x6d, 0x54, -0x68, 0x65, 0x72, 0x6d, 0x6f, 0x52, 0x65, 0x43, 0x61, 0x6c, 0x41, 0x6c, 0x6c, 0x0a, 0x00, 0x00, -0x54, 0x68, 0x65, 0x72, 0x6d, 0x61, 0x6c, 0x00, 0x73, 0x72, 0x63, 0x2f, 0x77, 0x69, 0x66, 0x69, -0x5f, 0x75, 0x6e, 0x69, 0x5f, 0x6d, 0x61, 0x63, 0x2f, 0x6d, 0x67, 0x6d, 0x74, 0x2f, 0x63, 0x6e, -0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x2e, 0x63, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, -0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x40, -0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x36, 0x63, 0x7c, 0x77, 0x7b, -0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, -0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, -0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, -0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, -0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, -0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, -0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, -0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, -0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, -0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, -0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, -0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, -0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, -0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, -0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, -0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16, 0x52, 0x09, 0x6a, 0xd5, -0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, -0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, -0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, -0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, -0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, -0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, -0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, -0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, -0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, -0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, -0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, -0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, -0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, -0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, -0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, -0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d, 0x00, 0x09, 0x12, 0x1b, -0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77, 0x90, 0x99, 0x82, 0x8b, -0xb4, 0xbd, 0xa6, 0xaf, 0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7, 0x3b, 0x32, 0x29, 0x20, -0x1f, 0x16, 0x0d, 0x04, 0x73, 0x7a, 0x61, 0x68, 0x57, 0x5e, 0x45, 0x4c, 0xab, 0xa2, 0xb9, 0xb0, -0x8f, 0x86, 0x9d, 0x94, 0xe3, 0xea, 0xf1, 0xf8, 0xc7, 0xce, 0xd5, 0xdc, 0x76, 0x7f, 0x64, 0x6d, -0x52, 0x5b, 0x40, 0x49, 0x3e, 0x37, 0x2c, 0x25, 0x1a, 0x13, 0x08, 0x01, 0xe6, 0xef, 0xf4, 0xfd, -0xc2, 0xcb, 0xd0, 0xd9, 0xae, 0xa7, 0xbc, 0xb5, 0x8a, 0x83, 0x98, 0x91, 0x4d, 0x44, 0x5f, 0x56, -0x69, 0x60, 0x7b, 0x72, 0x05, 0x0c, 0x17, 0x1e, 0x21, 0x28, 0x33, 0x3a, 0xdd, 0xd4, 0xcf, 0xc6, -0xf9, 0xf0, 0xeb, 0xe2, 0x95, 0x9c, 0x87, 0x8e, 0xb1, 0xb8, 0xa3, 0xaa, 0xec, 0xe5, 0xfe, 0xf7, -0xc8, 0xc1, 0xda, 0xd3, 0xa4, 0xad, 0xb6, 0xbf, 0x80, 0x89, 0x92, 0x9b, 0x7c, 0x75, 0x6e, 0x67, -0x58, 0x51, 0x4a, 0x43, 0x34, 0x3d, 0x26, 0x2f, 0x10, 0x19, 0x02, 0x0b, 0xd7, 0xde, 0xc5, 0xcc, -0xf3, 0xfa, 0xe1, 0xe8, 0x9f, 0x96, 0x8d, 0x84, 0xbb, 0xb2, 0xa9, 0xa0, 0x47, 0x4e, 0x55, 0x5c, -0x63, 0x6a, 0x71, 0x78, 0x0f, 0x06, 0x1d, 0x14, 0x2b, 0x22, 0x39, 0x30, 0x9a, 0x93, 0x88, 0x81, -0xbe, 0xb7, 0xac, 0xa5, 0xd2, 0xdb, 0xc0, 0xc9, 0xf6, 0xff, 0xe4, 0xed, 0x0a, 0x03, 0x18, 0x11, -0x2e, 0x27, 0x3c, 0x35, 0x42, 0x4b, 0x50, 0x59, 0x66, 0x6f, 0x74, 0x7d, 0xa1, 0xa8, 0xb3, 0xba, -0x85, 0x8c, 0x97, 0x9e, 0xe9, 0xe0, 0xfb, 0xf2, 0xcd, 0xc4, 0xdf, 0xd6, 0x31, 0x38, 0x23, 0x2a, -0x15, 0x1c, 0x07, 0x0e, 0x79, 0x70, 0x6b, 0x62, 0x5d, 0x54, 0x4f, 0x46, 0x00, 0x0b, 0x16, 0x1d, -0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69, 0xb0, 0xbb, 0xa6, 0xad, -0x9c, 0x97, 0x8a, 0x81, 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9, 0x7b, 0x70, 0x6d, 0x66, -0x57, 0x5c, 0x41, 0x4a, 0x23, 0x28, 0x35, 0x3e, 0x0f, 0x04, 0x19, 0x12, 0xcb, 0xc0, 0xdd, 0xd6, -0xe7, 0xec, 0xf1, 0xfa, 0x93, 0x98, 0x85, 0x8e, 0xbf, 0xb4, 0xa9, 0xa2, 0xf6, 0xfd, 0xe0, 0xeb, -0xda, 0xd1, 0xcc, 0xc7, 0xae, 0xa5, 0xb8, 0xb3, 0x82, 0x89, 0x94, 0x9f, 0x46, 0x4d, 0x50, 0x5b, -0x6a, 0x61, 0x7c, 0x77, 0x1e, 0x15, 0x08, 0x03, 0x32, 0x39, 0x24, 0x2f, 0x8d, 0x86, 0x9b, 0x90, -0xa1, 0xaa, 0xb7, 0xbc, 0xd5, 0xde, 0xc3, 0xc8, 0xf9, 0xf2, 0xef, 0xe4, 0x3d, 0x36, 0x2b, 0x20, -0x11, 0x1a, 0x07, 0x0c, 0x65, 0x6e, 0x73, 0x78, 0x49, 0x42, 0x5f, 0x54, 0xf7, 0xfc, 0xe1, 0xea, -0xdb, 0xd0, 0xcd, 0xc6, 0xaf, 0xa4, 0xb9, 0xb2, 0x83, 0x88, 0x95, 0x9e, 0x47, 0x4c, 0x51, 0x5a, -0x6b, 0x60, 0x7d, 0x76, 0x1f, 0x14, 0x09, 0x02, 0x33, 0x38, 0x25, 0x2e, 0x8c, 0x87, 0x9a, 0x91, -0xa0, 0xab, 0xb6, 0xbd, 0xd4, 0xdf, 0xc2, 0xc9, 0xf8, 0xf3, 0xee, 0xe5, 0x3c, 0x37, 0x2a, 0x21, -0x10, 0x1b, 0x06, 0x0d, 0x64, 0x6f, 0x72, 0x79, 0x48, 0x43, 0x5e, 0x55, 0x01, 0x0a, 0x17, 0x1c, -0x2d, 0x26, 0x3b, 0x30, 0x59, 0x52, 0x4f, 0x44, 0x75, 0x7e, 0x63, 0x68, 0xb1, 0xba, 0xa7, 0xac, -0x9d, 0x96, 0x8b, 0x80, 0xe9, 0xe2, 0xff, 0xf4, 0xc5, 0xce, 0xd3, 0xd8, 0x7a, 0x71, 0x6c, 0x67, -0x56, 0x5d, 0x40, 0x4b, 0x22, 0x29, 0x34, 0x3f, 0x0e, 0x05, 0x18, 0x13, 0xca, 0xc1, 0xdc, 0xd7, -0xe6, 0xed, 0xf0, 0xfb, 0x92, 0x99, 0x84, 0x8f, 0xbe, 0xb5, 0xa8, 0xa3, 0x00, 0x0d, 0x1a, 0x17, -0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b, 0xd0, 0xdd, 0xca, 0xc7, -0xe4, 0xe9, 0xfe, 0xf3, 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b, 0xbb, 0xb6, 0xa1, 0xac, -0x8f, 0x82, 0x95, 0x98, 0xd3, 0xde, 0xc9, 0xc4, 0xe7, 0xea, 0xfd, 0xf0, 0x6b, 0x66, 0x71, 0x7c, -0x5f, 0x52, 0x45, 0x48, 0x03, 0x0e, 0x19, 0x14, 0x37, 0x3a, 0x2d, 0x20, 0x6d, 0x60, 0x77, 0x7a, -0x59, 0x54, 0x43, 0x4e, 0x05, 0x08, 0x1f, 0x12, 0x31, 0x3c, 0x2b, 0x26, 0xbd, 0xb0, 0xa7, 0xaa, -0x89, 0x84, 0x93, 0x9e, 0xd5, 0xd8, 0xcf, 0xc2, 0xe1, 0xec, 0xfb, 0xf6, 0xd6, 0xdb, 0xcc, 0xc1, -0xe2, 0xef, 0xf8, 0xf5, 0xbe, 0xb3, 0xa4, 0xa9, 0x8a, 0x87, 0x90, 0x9d, 0x06, 0x0b, 0x1c, 0x11, -0x32, 0x3f, 0x28, 0x25, 0x6e, 0x63, 0x74, 0x79, 0x5a, 0x57, 0x40, 0x4d, 0xda, 0xd7, 0xc0, 0xcd, -0xee, 0xe3, 0xf4, 0xf9, 0xb2, 0xbf, 0xa8, 0xa5, 0x86, 0x8b, 0x9c, 0x91, 0x0a, 0x07, 0x10, 0x1d, -0x3e, 0x33, 0x24, 0x29, 0x62, 0x6f, 0x78, 0x75, 0x56, 0x5b, 0x4c, 0x41, 0x61, 0x6c, 0x7b, 0x76, -0x55, 0x58, 0x4f, 0x42, 0x09, 0x04, 0x13, 0x1e, 0x3d, 0x30, 0x27, 0x2a, 0xb1, 0xbc, 0xab, 0xa6, -0x85, 0x88, 0x9f, 0x92, 0xd9, 0xd4, 0xc3, 0xce, 0xed, 0xe0, 0xf7, 0xfa, 0xb7, 0xba, 0xad, 0xa0, -0x83, 0x8e, 0x99, 0x94, 0xdf, 0xd2, 0xc5, 0xc8, 0xeb, 0xe6, 0xf1, 0xfc, 0x67, 0x6a, 0x7d, 0x70, -0x53, 0x5e, 0x49, 0x44, 0x0f, 0x02, 0x15, 0x18, 0x3b, 0x36, 0x21, 0x2c, 0x0c, 0x01, 0x16, 0x1b, -0x38, 0x35, 0x22, 0x2f, 0x64, 0x69, 0x7e, 0x73, 0x50, 0x5d, 0x4a, 0x47, 0xdc, 0xd1, 0xc6, 0xcb, -0xe8, 0xe5, 0xf2, 0xff, 0xb4, 0xb9, 0xae, 0xa3, 0x80, 0x8d, 0x9a, 0x97, 0x00, 0x0e, 0x1c, 0x12, -0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a, 0xe0, 0xee, 0xfc, 0xf2, -0xd8, 0xd6, 0xc4, 0xca, 0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, 0xba, 0xdb, 0xd5, 0xc7, 0xc9, -0xe3, 0xed, 0xff, 0xf1, 0xab, 0xa5, 0xb7, 0xb9, 0x93, 0x9d, 0x8f, 0x81, 0x3b, 0x35, 0x27, 0x29, -0x03, 0x0d, 0x1f, 0x11, 0x4b, 0x45, 0x57, 0x59, 0x73, 0x7d, 0x6f, 0x61, 0xad, 0xa3, 0xb1, 0xbf, -0x95, 0x9b, 0x89, 0x87, 0xdd, 0xd3, 0xc1, 0xcf, 0xe5, 0xeb, 0xf9, 0xf7, 0x4d, 0x43, 0x51, 0x5f, -0x75, 0x7b, 0x69, 0x67, 0x3d, 0x33, 0x21, 0x2f, 0x05, 0x0b, 0x19, 0x17, 0x76, 0x78, 0x6a, 0x64, -0x4e, 0x40, 0x52, 0x5c, 0x06, 0x08, 0x1a, 0x14, 0x3e, 0x30, 0x22, 0x2c, 0x96, 0x98, 0x8a, 0x84, -0xae, 0xa0, 0xb2, 0xbc, 0xe6, 0xe8, 0xfa, 0xf4, 0xde, 0xd0, 0xc2, 0xcc, 0x41, 0x4f, 0x5d, 0x53, -0x79, 0x77, 0x65, 0x6b, 0x31, 0x3f, 0x2d, 0x23, 0x09, 0x07, 0x15, 0x1b, 0xa1, 0xaf, 0xbd, 0xb3, -0x99, 0x97, 0x85, 0x8b, 0xd1, 0xdf, 0xcd, 0xc3, 0xe9, 0xe7, 0xf5, 0xfb, 0x9a, 0x94, 0x86, 0x88, -0xa2, 0xac, 0xbe, 0xb0, 0xea, 0xe4, 0xf6, 0xf8, 0xd2, 0xdc, 0xce, 0xc0, 0x7a, 0x74, 0x66, 0x68, -0x42, 0x4c, 0x5e, 0x50, 0x0a, 0x04, 0x16, 0x18, 0x32, 0x3c, 0x2e, 0x20, 0xec, 0xe2, 0xf0, 0xfe, -0xd4, 0xda, 0xc8, 0xc6, 0x9c, 0x92, 0x80, 0x8e, 0xa4, 0xaa, 0xb8, 0xb6, 0x0c, 0x02, 0x10, 0x1e, -0x34, 0x3a, 0x28, 0x26, 0x7c, 0x72, 0x60, 0x6e, 0x44, 0x4a, 0x58, 0x56, 0x37, 0x39, 0x2b, 0x25, -0x0f, 0x01, 0x13, 0x1d, 0x47, 0x49, 0x5b, 0x55, 0x7f, 0x71, 0x63, 0x6d, 0xd7, 0xd9, 0xcb, 0xc5, -0xef, 0xe1, 0xf3, 0xfd, 0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d, 0x01, 0x23, 0x45, 0x67, -0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, 0xf0, 0xe1, 0xd2, 0xc3, -0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, -0x3d, 0x3e, 0x47, 0x31, 0x2c, 0x20, 0x63, 0x6e, 0x74, 0x3a, 0x25, 0x64, 0x2d, 0x25, 0x64, 0x0a, -0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, -0xff, 0xff, 0xff, 0xff, 0x73, 0x72, 0x63, 0x2f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x75, 0x6e, 0x69, -0x5f, 0x6d, 0x61, 0x63, 0x2f, 0x62, 0x62, 0x70, 0x72, 0x66, 0x2f, 0x6d, 0x74, 0x37, 0x36, 0x30, -0x33, 0x2f, 0x72, 0x6c, 0x6d, 0x5f, 0x72, 0x66, 0x5f, 0x63, 0x61, 0x6c, 0x5f, 0x6d, 0x74, 0x37, -0x36, 0x30, 0x33, 0x2e, 0x63, 0x00, 0x00, 0x00, 0x52, 0x4c, 0x4d, 0x20, 0x43, 0x41, 0x4c, 0x28, -0x25, 0x73, 0x29, 0x28, 0x25, 0x73, 0x29, 0x45, 0x52, 0x52, 0x0a, 0x00, 0x45, 0x4c, 0x4e, 0x41, -0x5f, 0x54, 0x42, 0x4c, 0x25, 0x64, 0x20, 0x52, 0x46, 0x0a, 0x00, 0x00, 0x45, 0x4c, 0x4e, 0x41, -0x5f, 0x54, 0x42, 0x4c, 0x25, 0x64, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x31, 0x01, -0x01, 0x00, 0x00, 0x00, 0x40, 0x78, 0x7d, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x62, 0x02, -0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x31, 0x01, 0x65, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -0x40, 0x78, 0x7d, 0x01, 0x7f, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x62, 0x02, -0xcc, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe0, 0xcd, 0x24, 0x00, 0xea, 0x19, 0x2d, 0x01, -0x00, 0x00, 0x08, 0x00, 0x62, 0x1a, 0xf1, 0x00, 0x33, 0x33, 0x03, 0x00, 0xea, 0x19, 0x96, 0x00, -0x00, 0x00, 0x0c, 0x00, 0x02, 0x00, 0x00, 0x00, 0x68, 0xe1, 0x24, 0x00, 0xf8, 0x19, 0x2e, 0x01, -0x00, 0x00, 0x02, 0x00, 0x70, 0x1a, 0xf1, 0x00, 0x33, 0x33, 0x0b, 0x00, 0xf8, 0x19, 0x97, 0x00, -0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf0, 0xf4, 0x24, 0x00, 0x06, 0x1a, 0x2e, 0x01, -0x00, 0x00, 0x0c, 0x00, 0x7e, 0x1a, 0xf2, 0x00, 0x33, 0x33, 0x03, 0x00, 0x06, 0x1a, 0x97, 0x00, -0x00, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00, 0x00, 0x78, 0x08, 0x25, 0x00, 0x14, 0x1a, 0x2f, 0x01, -0x00, 0x00, 0x06, 0x00, 0x8c, 0x1a, 0xf2, 0x00, 0x33, 0x33, 0x0b, 0x00, 0x14, 0x1a, 0x97, 0x00, -0x00, 0x00, 0x0b, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x25, 0x00, 0x20, 0x1a, 0x30, 0x01, -0x00, 0x00, 0x00, 0x00, 0x9a, 0x1a, 0xf3, 0x00, 0x33, 0x33, 0x03, 0x00, 0x20, 0x1a, 0x98, 0x00, -0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x88, 0x2f, 0x25, 0x00, 0x2e, 0x1a, 0x30, 0x01, -0x00, 0x00, 0x0a, 0x00, 0xa8, 0x1a, 0xf3, 0x00, 0x33, 0x33, 0x0b, 0x00, 0x2e, 0x1a, 0x98, 0x00, -0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x43, 0x25, 0x00, 0x3c, 0x1a, 0x31, 0x01, -0x00, 0x00, 0x04, 0x00, 0xb6, 0x1a, 0xf4, 0x00, 0x33, 0x33, 0x03, 0x00, 0x3c, 0x1a, 0x98, 0x00, -0x00, 0x00, 0x0a, 0x00, 0x08, 0x00, 0x00, 0x00, 0x98, 0x56, 0x25, 0x00, 0x4a, 0x1a, 0x31, 0x01, -0x00, 0x00, 0x0e, 0x00, 0xc4, 0x1a, 0xf4, 0x00, 0x33, 0x33, 0x0b, 0x00, 0x4a, 0x1a, 0x98, 0x00, -0x00, 0x00, 0x0f, 0x00, 0x09, 0x00, 0x00, 0x00, 0x20, 0x6a, 0x25, 0x00, 0x58, 0x1a, 0x32, 0x01, -0x00, 0x00, 0x08, 0x00, 0xd2, 0x1a, 0xf5, 0x00, 0x33, 0x33, 0x03, 0x00, 0x58, 0x1a, 0x99, 0x00, -0x00, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0xa8, 0x7d, 0x25, 0x00, 0x66, 0x1a, 0x33, 0x01, -0x00, 0x00, 0x02, 0x00, 0xe0, 0x1a, 0xf5, 0x00, 0x33, 0x33, 0x0b, 0x00, 0x66, 0x1a, 0x99, 0x00, -0x00, 0x00, 0x09, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x30, 0x91, 0x25, 0x00, 0x74, 0x1a, 0x33, 0x01, -0x00, 0x00, 0x0c, 0x00, 0xee, 0x1a, 0xf6, 0x00, 0x33, 0x33, 0x03, 0x00, 0x74, 0x1a, 0x99, 0x00, -0x00, 0x00, 0x0e, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xb8, 0xa4, 0x25, 0x00, 0x82, 0x1a, 0x34, 0x01, -0x00, 0x00, 0x06, 0x00, 0xfc, 0x1a, 0xf6, 0x00, 0x33, 0x33, 0x0b, 0x00, 0x82, 0x1a, 0x9a, 0x00, -0x00, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x40, 0xb8, 0x25, 0x00, 0x8e, 0x1a, 0x35, 0x01, -0x00, 0x00, 0x00, 0x00, 0x0a, 0x1b, 0xf7, 0x00, 0x33, 0x33, 0x03, 0x00, 0x8e, 0x1a, 0x9a, 0x00, -0x00, 0x00, 0x08, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x20, 0xe7, 0x25, 0x00, 0xb0, 0x1a, 0x36, 0x01, -0x00, 0x00, 0x08, 0x00, 0x2c, 0x1b, 0xf8, 0x00, 0x66, 0x66, 0x06, 0x00, 0xb0, 0x1a, 0x9b, 0x00, -0x00, 0x00, 0x04, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xc8, 0x98, 0x66, 0x01, 0x40, 0x19, 0x25, 0x01, -0x9a, 0x19, 0x0c, 0x00, 0xb6, 0x19, 0xeb, 0x00, 0x7b, 0x14, 0x00, 0x00, 0x40, 0x19, 0x92, 0x00, -0xcd, 0x0c, 0x0e, 0x00, 0x20, 0x00, 0x00, 0x00, 0x8c, 0x09, 0x80, 0x00, 0x8c, 0x09, 0x80, 0x00, -0x8c, 0x09, 0x80, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x66, 0xa4, 0x81, 0xee, 0x66, 0xa4, 0x81, 0xee, -0x66, 0xa4, 0x81, 0xee, 0xb0, 0x00, 0x00, 0x00, 0xc4, 0xa3, 0x01, 0x04, 0x66, 0xab, 0x01, 0x04, -0xc9, 0xa3, 0x01, 0x04, 0xb4, 0x00, 0x00, 0x00, 0x10, 0xc0, 0xf0, 0x3f, 0x10, 0xc0, 0xf0, 0x3f, -0x10, 0xc0, 0xf0, 0x3f, 0xbc, 0x00, 0x00, 0x00, 0xc3, 0xb6, 0x44, 0x44, 0xc3, 0xb6, 0x55, 0x55, -0xc3, 0xb6, 0x66, 0x66, 0x00, 0x06, 0x00, 0x00, 0xb3, 0x6f, 0x62, 0xc1, 0xc3, 0x6f, 0x62, 0xc1, -0xf3, 0x6f, 0x62, 0xc1, 0x0c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x14, 0x13, 0x33, 0x33, 0x43, 0x0f, -0x00, 0x00, 0x8a, 0x09, 0x14, 0x00, 0x00, 0x00, 0x00, 0xab, 0x84, 0x56, 0xe8, 0x00, 0x00, 0x00, -0x81, 0x00, 0x61, 0x00, 0xec, 0x00, 0x00, 0x00, 0x21, 0x00, 0x83, 0x00, 0xf0, 0x00, 0x00, 0x00, -0x63, 0x00, 0x23, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x88, 0x00, 0x68, 0x00, 0xf8, 0x00, 0x00, 0x00, -0x28, 0x00, 0x8f, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x6f, 0x00, 0xbd, 0x00, 0x00, 0x01, 0x00, 0x00, -0x9d, 0x00, 0x7d, 0x00, 0x04, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x1d, 0x00, 0x10, 0x00, 0x00, 0x00, -0x00, 0x00, 0x78, 0xbf, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, -0x00, 0x00, 0x78, 0x80, 0x14, 0x00, 0x00, 0x00, 0x00, 0xab, 0x84, 0x56, 0x18, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x11, 0x1d, 0x1e, 0x35, 0xe0, 0x00, 0x00, 0x00, -0x1c, 0x35, 0x17, 0x19, 0xe8, 0x00, 0x00, 0x00, 0xe1, 0x00, 0xa1, 0x00, 0xec, 0x00, 0x00, 0x00, -0x81, 0x00, 0x61, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x83, 0x00, 0xf4, 0x00, 0x00, 0x00, -0x63, 0x00, 0xa7, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x87, 0x00, 0x67, 0x00, 0xfc, 0x00, 0x00, 0x00, -0xae, 0x00, 0x8e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x6e, 0x00, 0x2e, 0x00, 0x04, 0x01, 0x00, 0x00, -0x0e, 0x00, 0x0e, 0x00, 0x00, 0x08, 0x00, 0x00, 0x66, 0x44, 0x66, 0x44, 0x04, 0x08, 0x00, 0x00, -0x66, 0x44, 0x66, 0x44, 0x08, 0x08, 0x00, 0x00, 0x00, 0x44, 0x00, 0x44, 0x0c, 0x08, 0x00, 0x00, -0x00, 0x44, 0x00, 0x44, 0x10, 0x08, 0x00, 0x00, 0x44, 0x44, 0x44, 0x41, 0x14, 0x08, 0x00, 0x00, -0x44, 0x44, 0x44, 0x41, 0x3c, 0x06, 0x00, 0x00, 0x32, 0x74, 0x32, 0x63, 0x40, 0x06, 0x00, 0x00, -0x22, 0x62, 0x32, 0x63, 0x4c, 0x06, 0x00, 0x00, 0x19, 0x19, 0x19, 0x05, 0x50, 0x06, 0x00, 0x00, -0x0a, 0x0a, 0x0a, 0x01, 0x58, 0x06, 0x00, 0x00, 0x19, 0x14, 0x14, 0x05, 0x5c, 0x06, 0x00, 0x00, -0x0a, 0x07, 0x07, 0x01, 0x64, 0x06, 0x00, 0x00, 0x19, 0x19, 0x19, 0x05, 0x68, 0x06, 0x00, 0x00, -0x19, 0x14, 0x14, 0x05, 0x00, 0x08, 0x00, 0x00, 0x66, 0x44, 0x66, 0x44, 0x04, 0x08, 0x00, 0x00, -0x66, 0x44, 0x66, 0x44, 0x08, 0x08, 0x00, 0x00, 0x00, 0x44, 0x00, 0x44, 0x0c, 0x08, 0x00, 0x00, -0x00, 0x44, 0x00, 0x44, 0x10, 0x08, 0x00, 0x00, 0x44, 0x44, 0x44, 0x41, 0x14, 0x08, 0x00, 0x00, -0x44, 0x44, 0x44, 0x41, 0x3c, 0x06, 0x00, 0x00, 0x32, 0x74, 0x32, 0x63, 0x40, 0x06, 0x00, 0x00, -0x22, 0x62, 0x32, 0x63, 0x4c, 0x06, 0x00, 0x00, 0x19, 0x19, 0x19, 0x05, 0x50, 0x06, 0x00, 0x00, -0x0a, 0x0a, 0x0a, 0x01, 0x58, 0x06, 0x00, 0x00, 0x19, 0x14, 0x14, 0x05, 0x5c, 0x06, 0x00, 0x00, -0x0a, 0x07, 0x07, 0x01, 0x64, 0x06, 0x00, 0x00, 0x19, 0x19, 0x19, 0x05, 0x68, 0x06, 0x00, 0x00, -0x19, 0x14, 0x14, 0x05, 0xfe, 0x77, 0x0d, 0x80, 0x00, 0x80, 0x00, 0x00, 0xfe, 0x77, 0x0f, 0x80, -0x00, 0x80, 0x00, 0x00, 0xfe, 0xb7, 0x0f, 0x80, 0x00, 0x80, 0x00, 0x00, 0xfe, 0xf7, 0x0f, 0x80, -0x00, 0x80, 0x00, 0x00, 0xfe, 0x77, 0x0d, 0x80, 0x00, 0x90, 0x00, 0x00, 0xfe, 0x77, 0x0f, 0x80, -0x00, 0x90, 0x00, 0x00, 0xfe, 0xb7, 0x0f, 0x80, 0x00, 0x90, 0x00, 0x00, 0xfe, 0xf7, 0x0f, 0x80, -0x00, 0x90, 0x00, 0x00, 0xfe, 0x77, 0x0d, 0x80, 0x00, 0xa0, 0x00, 0x00, 0xfe, 0x77, 0x0f, 0x80, -0x00, 0xa0, 0x00, 0x00, 0xfe, 0xb7, 0x0f, 0x80, 0x00, 0xa0, 0x00, 0x00, 0xfe, 0xf7, 0x0f, 0x80, -0x00, 0xa0, 0x00, 0x00, 0xfe, 0x77, 0x0d, 0x80, 0x00, 0xb0, 0x00, 0x00, 0xfe, 0x77, 0x0f, 0x80, -0x00, 0xb0, 0x00, 0x00, 0xfe, 0xb7, 0x0f, 0x80, 0x00, 0xb0, 0x00, 0x00, 0xfe, 0xf7, 0x0f, 0x80, -0x00, 0xb0, 0x00, 0x00, 0xfe, 0x77, 0x0d, 0x90, 0x00, 0x80, 0x00, 0x00, 0xfe, 0x77, 0x0f, 0x90, -0x00, 0x80, 0x00, 0x00, 0xfe, 0xb7, 0x0f, 0x90, 0x00, 0x80, 0x00, 0x00, 0xfe, 0xf7, 0x0f, 0x90, -0x00, 0x80, 0x00, 0x00, 0xfe, 0x77, 0x0d, 0x90, 0x00, 0x90, 0x00, 0x00, 0xfe, 0x77, 0x0f, 0x90, -0x00, 0x90, 0x00, 0x00, 0xfe, 0xb7, 0x0f, 0x90, 0x00, 0x90, 0x00, 0x00, 0xfe, 0xf7, 0x0f, 0x90, -0x00, 0x90, 0x00, 0x00, 0xfe, 0x77, 0x0d, 0x90, 0x00, 0xa0, 0x00, 0x00, 0xfe, 0x77, 0x0f, 0x90, -0x00, 0xa0, 0x00, 0x00, 0xfe, 0xb7, 0x0f, 0x90, 0x00, 0xa0, 0x00, 0x00, 0xfe, 0xf7, 0x0f, 0x90, -0x00, 0xa0, 0x00, 0x00, 0xfe, 0x77, 0x0d, 0x90, 0x00, 0xb0, 0x00, 0x00, 0xfe, 0x77, 0x0f, 0x90, -0x00, 0xb0, 0x00, 0x00, 0xfe, 0xb7, 0x0f, 0x90, 0x00, 0xb0, 0x00, 0x00, 0xfe, 0xf7, 0x0f, 0x90, -0x00, 0xb0, 0x00, 0x00, 0x00, 0x08, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, 0x04, 0x08, 0x20, 0x60, -0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x08, 0x20, 0x60, -0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x20, 0x60, 0xfe, 0xfb, 0xff, 0x3f, 0x14, 0x08, 0x20, 0x60, -0xfa, 0xf3, 0xdf, 0x3f, 0x18, 0x08, 0x20, 0x60, 0xf5, 0xdf, 0x9f, 0x3f, 0x1c, 0x08, 0x20, 0x60, -0xf0, 0xcb, 0x4f, 0x3f, 0x20, 0x08, 0x20, 0x60, 0xeb, 0xb3, 0xef, 0x3e, 0x24, 0x08, 0x20, 0x60, -0xe9, 0xa7, 0xaf, 0x3e, 0x28, 0x08, 0x20, 0x60, 0xef, 0xb3, 0xaf, 0x3e, 0x2c, 0x08, 0x20, 0x60, -0xff, 0xe7, 0x3f, 0x3f, 0x30, 0x08, 0x20, 0x60, 0x1c, 0x44, 0x80, 0x00, 0x34, 0x08, 0x20, 0x60, -0x46, 0xdc, 0x90, 0x02, 0x38, 0x08, 0x20, 0x60, 0x7a, 0x9c, 0x61, 0x05, 0x3c, 0x08, 0x20, 0x60, -0xb3, 0x80, 0xd2, 0x08, 0x40, 0x08, 0x20, 0x60, 0xec, 0x68, 0x73, 0x0c, 0x44, 0x08, 0x20, 0x60, -0x1d, 0x39, 0xe4, 0x0f, 0x48, 0x08, 0x20, 0x60, 0x3f, 0xd9, 0xa4, 0x12, 0x4c, 0x08, 0x20, 0x60, -0x4e, 0x2d, 0x65, 0x14, 0x00, 0x08, 0x20, 0x60, 0xfd, 0xf7, 0xdf, 0x3f, 0x04, 0x08, 0x20, 0x60, -0xfd, 0xf7, 0xdf, 0x3f, 0x08, 0x08, 0x20, 0x60, 0xfd, 0xf7, 0xdf, 0x3f, 0x0c, 0x08, 0x20, 0x60, -0xfd, 0xf7, 0xdf, 0x3f, 0x10, 0x08, 0x20, 0x60, 0xff, 0xfb, 0xef, 0x3f, 0x14, 0x08, 0x20, 0x60, -0x02, 0x04, 0xf0, 0x3f, 0x18, 0x08, 0x20, 0x60, 0x07, 0x14, 0x30, 0x00, 0x1c, 0x08, 0x20, 0x60, -0x0f, 0x30, 0x90, 0x00, 0x20, 0x08, 0x20, 0x60, 0x19, 0x54, 0x20, 0x01, 0x24, 0x08, 0x20, 0x60, -0x26, 0x88, 0xd0, 0x01, 0x28, 0x08, 0x20, 0x60, 0x36, 0xc4, 0xb0, 0x02, 0x2c, 0x08, 0x20, 0x60, -0x49, 0x0c, 0xc1, 0x03, 0x30, 0x08, 0x20, 0x60, 0x5d, 0x58, 0xf1, 0x04, 0x34, 0x08, 0x20, 0x60, -0x72, 0xac, 0x41, 0x06, 0x38, 0x08, 0x20, 0x60, 0x86, 0x00, 0x92, 0x07, 0x3c, 0x08, 0x20, 0x60, -0x99, 0x4c, 0xd2, 0x08, 0x40, 0x08, 0x20, 0x60, 0xaa, 0x94, 0xf2, 0x09, 0x44, 0x08, 0x20, 0x60, -0xb7, 0xcc, 0xe2, 0x0a, 0x48, 0x08, 0x20, 0x60, 0xbf, 0xf4, 0xa2, 0x0b, 0x4c, 0x08, 0x20, 0x60, -0xc2, 0x08, 0x13, 0x0c, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0xe4, 0x00, 0x00, 0xe4, 0x94, -0x00, 0x00, 0xe4, 0x90, 0x00, 0x00, 0xe4, 0x91, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, -0x00, 0x00, 0xe4, 0xe4, 0x00, 0x00, 0xe4, 0x94, 0x00, 0x00, 0xe4, 0x90, 0x00, 0x00, 0xe4, 0x91, -0x01, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x76, 0x66, 0x66, 0x66, 0x66, -0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, -0x66, 0x66, 0x66, 0x76, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, -0x01, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0xa8, 0x88, 0x88, 0x88, 0x88, -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, -0x88, 0x88, 0x88, 0xa8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, -0x01, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x44, 0x44, 0x46, 0x41, 0x44, 0x44, 0x46, 0x11, -0x44, 0x44, 0x46, 0x11, 0x44, 0x44, 0x46, 0x11, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, -0x44, 0x44, 0x46, 0x41, 0x44, 0x44, 0x46, 0x11, 0x44, 0x44, 0x46, 0x11, 0x44, 0x44, 0x46, 0x11, -0x01, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x32, 0x52, 0x43, 0x63, 0x32, 0x52, 0x46, 0x34, -0x32, 0x52, 0x66, 0x34, 0x32, 0x52, 0x64, 0x34, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, -0x32, 0x52, 0x42, 0x52, 0x32, 0x52, 0x45, 0x24, 0x32, 0x52, 0x55, 0x24, 0x32, 0x52, 0x54, 0x24, -0x01, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x14, 0x0f, 0x14, 0x05, 0x05, 0x0f, 0x0f, 0x14, -0x05, 0x05, 0x0f, 0x14, 0x0f, 0x05, 0x0f, 0x14, 0x00, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, -0x19, 0x0f, 0x19, 0x0a, 0x0a, 0x0f, 0x0f, 0x19, 0x0a, 0x0a, 0x0f, 0x19, 0x0f, 0x0a, 0x0f, 0x19, -0x01, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x07, 0x04, 0x07, 0x01, 0x01, 0x04, 0x04, 0x07, -0x01, 0x01, 0x04, 0x07, 0x04, 0x01, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, -0x0a, 0x04, 0x0a, 0x03, 0x03, 0x04, 0x04, 0x0a, 0x03, 0x03, 0x04, 0x0a, 0x04, 0x03, 0x04, 0x0a, -0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xa4, 0x08, 0xa4, -0x38, 0xa4, 0x28, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xa4, 0x32, 0xa4, -0x00, 0x00, 0x00, 0x00, 0x39, 0x92, 0x29, 0x92, 0x19, 0x92, 0x09, 0x92, 0x79, 0x92, 0x69, 0x92, -0x59, 0x92, 0x49, 0x92, 0x39, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xf0, 0x59, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x55, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x73, 0x72, 0x63, 0x2f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x75, 0x6e, 0x69, +0x5f, 0x6d, 0x61, 0x63, 0x2f, 0x6d, 0x67, 0x6d, 0x74, 0x2f, 0x70, 0x32, 0x70, 0x5f, 0x66, 0x73, +0x6d, 0x2e, 0x63, 0x00, 0x64, 0x6c, 0x66, 0x6d, 0x43, 0x6d, 0x64, 0x46, 0x77, 0x52, 0x65, 0x53, +0x74, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x20, 0x50, 0x53, 0x45, 0x20, 0x62, +0x75, 0x66, 0x20, 0x45, 0x72, 0x72, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0xef, 0x00, 0x00, 0x00, 0x24, 0x65, 0x10, 0x00, 0xed, 0x00, 0x00, 0x00, 0x44, 0x7e, 0x10, 0x00, +0xc2, 0x00, 0x00, 0x00, 0xb8, 0x60, 0x10, 0x00, 0x73, 0x72, 0x63, 0x2f, 0x77, 0x69, 0x66, 0x69, +0x5f, 0x75, 0x6e, 0x69, 0x5f, 0x6d, 0x61, 0x63, 0x2f, 0x6d, 0x67, 0x6d, 0x74, 0x2f, 0x68, 0x65, +0x6d, 0x5f, 0x63, 0x6d, 0x64, 0x5f, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x30, 0x65, 0x78, 0x74, 0x2e, +0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, +0x38, 0x7f, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x34, 0x80, 0x10, 0x00, 0x0e, 0x00, 0x00, 0x00, +0x1c, 0x81, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x90, 0x63, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, +0xb4, 0x7e, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0c, 0x7a, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, +0xac, 0x78, 0x10, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x88, 0x4e, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, +0xe8, 0x51, 0x10, 0x00, 0x12, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x10, 0x00, 0x11, 0x00, 0x00, 0x00, +0x44, 0x76, 0x10, 0x00, 0x13, 0x00, 0x00, 0x00, 0x60, 0x6c, 0x10, 0x00, 0x17, 0x00, 0x00, 0x00, +0x9c, 0x07, 0x10, 0x00, 0x18, 0x00, 0x00, 0x00, 0x4c, 0xa8, 0x10, 0x00, 0x2e, 0x00, 0x00, 0x00, +0x24, 0xa4, 0x10, 0x00, 0x21, 0x00, 0x00, 0x00, 0x1c, 0x6e, 0x10, 0x00, 0x23, 0x00, 0x00, 0x00, +0xdc, 0x6c, 0x10, 0x00, 0x27, 0x00, 0x00, 0x00, 0x6c, 0x6b, 0x10, 0x00, 0x28, 0x00, 0x00, 0x00, +0xf8, 0x6a, 0x10, 0x00, 0x29, 0x00, 0x00, 0x00, 0x88, 0x6a, 0x10, 0x00, 0x2b, 0x00, 0x00, 0x00, +0xd0, 0x69, 0x10, 0x00, 0x33, 0x00, 0x00, 0x00, 0x50, 0x69, 0x10, 0x00, 0x55, 0x00, 0x00, 0x00, +0xfc, 0x68, 0x10, 0x00, 0x35, 0x00, 0x36, 0x00, 0x37, 0x00, 0x48, 0x00, 0x50, 0x00, 0x53, 0x00, +0x54, 0x00, 0x55, 0x00, 0x56, 0x00, 0x57, 0x00, 0x58, 0x00, 0x59, 0x00, 0x5a, 0x00, 0x5b, 0x00, +0x5c, 0x00, 0x5d, 0x00, 0x5e, 0x00, 0x5f, 0x00, 0x60, 0x00, 0x61, 0x00, 0xa0, 0x00, 0xa1, 0x00, +0xa2, 0x00, 0xa3, 0x00, 0xa4, 0x00, 0xa5, 0x00, 0xa6, 0x00, 0xa7, 0x00, 0xa8, 0x00, 0xa9, 0x00, +0xaa, 0x00, 0xab, 0x00, 0xac, 0x00, 0xad, 0x00, 0xc0, 0x00, 0xc1, 0x00, 0xc2, 0x00, 0xc3, 0x00, +0xc4, 0x00, 0xc5, 0x00, 0xc6, 0x00, 0xc7, 0x00, 0xc8, 0x00, 0xc9, 0x00, 0xca, 0x00, 0xcb, 0x00, +0xcc, 0x00, 0xcd, 0x00, 0xce, 0x00, 0xcf, 0x00, 0xd0, 0x00, 0xd1, 0x00, 0xd2, 0x00, 0xd3, 0x00, +0xd4, 0x00, 0xd5, 0x00, 0xd6, 0x00, 0xf4, 0x00, 0xf5, 0x00, 0xf6, 0x00, 0xf7, 0x00, 0x24, 0x00, +0x25, 0x00, 0x34, 0x00, 0x39, 0x00, 0x3b, 0x00, 0x42, 0x00, 0x43, 0x00, 0x9e, 0x00, 0x9f, 0x00, +0xf2, 0x00, 0xf8, 0x00, 0xf9, 0x00, 0xfa, 0x00, 0x2e, 0x01, 0x30, 0x01, 0x31, 0x01, 0x32, 0x01, +0x33, 0x01, 0x34, 0x01, 0x35, 0x01, 0x36, 0x01, 0x37, 0x01, 0x38, 0x01, 0x39, 0x01, 0x3a, 0x01, +0x3b, 0x01, 0x3c, 0x01, 0x3d, 0x01, 0x3e, 0x01, 0x3f, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, +0x01, 0x00, 0x01, 0x01, 0x01, 0x02, 0x01, 0x03, 0x01, 0x05, 0x02, 0x00, 0x02, 0x06, 0x02, 0x01, +0x02, 0x02, 0x02, 0x03, 0x02, 0x04, 0x02, 0x05, 0x73, 0x72, 0x63, 0x2f, 0x77, 0x69, 0x66, 0x69, +0x5f, 0x75, 0x6e, 0x69, 0x5f, 0x6d, 0x61, 0x63, 0x2f, 0x6d, 0x67, 0x6d, 0x74, 0x2f, 0x6d, 0x74, +0x37, 0x36, 0x30, 0x33, 0x2f, 0x72, 0x6c, 0x6d, 0x5f, 0x70, 0x68, 0x79, 0x2e, 0x63, 0x00, 0x00, +0x52, 0x58, 0x51, 0x20, 0x52, 0x65, 0x73, 0x65, 0x74, 0x20, 0x46, 0x61, 0x69, 0x6c, 0x0a, 0x00, +0x73, 0x72, 0x63, 0x2f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x75, 0x6e, 0x69, 0x5f, 0x6d, 0x61, 0x63, +0x2f, 0x6d, 0x67, 0x6d, 0x74, 0x2f, 0x6d, 0x74, 0x37, 0x36, 0x30, 0x33, 0x2f, 0x72, 0x6c, 0x6d, +0x5f, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x2e, 0x63, 0x00, 0x00, 0x00, 0x54, 0x48, 0x45, 0x52, +0x4d, 0x43, 0x52, 0x30, 0x5b, 0x25, 0x64, 0x5d, 0x3d, 0x30, 0x78, 0x25, 0x78, 0x0a, 0x00, 0x00, +0x54, 0x68, 0x65, 0x72, 0x6d, 0x6f, 0x53, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x68, 0x65, 0x63, +0x6b, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x0a, 0x00, 0x72, 0x6c, 0x6d, 0x54, 0x68, 0x65, 0x72, 0x6d, +0x6f, 0x52, 0x65, 0x43, 0x61, 0x6c, 0x41, 0x6c, 0x6c, 0x0a, 0x00, 0x00, 0x54, 0x68, 0x65, 0x72, +0x6d, 0x61, 0x6c, 0x00, 0x73, 0x72, 0x63, 0x2f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x75, 0x6e, 0x69, +0x5f, 0x6d, 0x61, 0x63, 0x2f, 0x6d, 0x67, 0x6d, 0x74, 0x2f, 0x63, 0x6e, 0x6d, 0x5f, 0x74, 0x69, +0x6d, 0x65, 0x72, 0x2e, 0x63, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, +0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, +0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x36, 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, +0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, +0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, +0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, +0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, +0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, +0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, +0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, +0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, +0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, +0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, +0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, +0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, +0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, +0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, +0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, +0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16, 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, +0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, +0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, +0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, +0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, +0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, +0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, +0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, +0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, +0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, +0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, +0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, +0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, +0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, +0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, +0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, +0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d, 0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, +0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77, 0x90, 0x99, 0x82, 0x8b, 0xb4, 0xbd, 0xa6, 0xaf, +0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7, 0x3b, 0x32, 0x29, 0x20, 0x1f, 0x16, 0x0d, 0x04, +0x73, 0x7a, 0x61, 0x68, 0x57, 0x5e, 0x45, 0x4c, 0xab, 0xa2, 0xb9, 0xb0, 0x8f, 0x86, 0x9d, 0x94, +0xe3, 0xea, 0xf1, 0xf8, 0xc7, 0xce, 0xd5, 0xdc, 0x76, 0x7f, 0x64, 0x6d, 0x52, 0x5b, 0x40, 0x49, +0x3e, 0x37, 0x2c, 0x25, 0x1a, 0x13, 0x08, 0x01, 0xe6, 0xef, 0xf4, 0xfd, 0xc2, 0xcb, 0xd0, 0xd9, +0xae, 0xa7, 0xbc, 0xb5, 0x8a, 0x83, 0x98, 0x91, 0x4d, 0x44, 0x5f, 0x56, 0x69, 0x60, 0x7b, 0x72, +0x05, 0x0c, 0x17, 0x1e, 0x21, 0x28, 0x33, 0x3a, 0xdd, 0xd4, 0xcf, 0xc6, 0xf9, 0xf0, 0xeb, 0xe2, +0x95, 0x9c, 0x87, 0x8e, 0xb1, 0xb8, 0xa3, 0xaa, 0xec, 0xe5, 0xfe, 0xf7, 0xc8, 0xc1, 0xda, 0xd3, +0xa4, 0xad, 0xb6, 0xbf, 0x80, 0x89, 0x92, 0x9b, 0x7c, 0x75, 0x6e, 0x67, 0x58, 0x51, 0x4a, 0x43, +0x34, 0x3d, 0x26, 0x2f, 0x10, 0x19, 0x02, 0x0b, 0xd7, 0xde, 0xc5, 0xcc, 0xf3, 0xfa, 0xe1, 0xe8, +0x9f, 0x96, 0x8d, 0x84, 0xbb, 0xb2, 0xa9, 0xa0, 0x47, 0x4e, 0x55, 0x5c, 0x63, 0x6a, 0x71, 0x78, +0x0f, 0x06, 0x1d, 0x14, 0x2b, 0x22, 0x39, 0x30, 0x9a, 0x93, 0x88, 0x81, 0xbe, 0xb7, 0xac, 0xa5, +0xd2, 0xdb, 0xc0, 0xc9, 0xf6, 0xff, 0xe4, 0xed, 0x0a, 0x03, 0x18, 0x11, 0x2e, 0x27, 0x3c, 0x35, +0x42, 0x4b, 0x50, 0x59, 0x66, 0x6f, 0x74, 0x7d, 0xa1, 0xa8, 0xb3, 0xba, 0x85, 0x8c, 0x97, 0x9e, +0xe9, 0xe0, 0xfb, 0xf2, 0xcd, 0xc4, 0xdf, 0xd6, 0x31, 0x38, 0x23, 0x2a, 0x15, 0x1c, 0x07, 0x0e, +0x79, 0x70, 0x6b, 0x62, 0x5d, 0x54, 0x4f, 0x46, 0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, +0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69, 0xb0, 0xbb, 0xa6, 0xad, 0x9c, 0x97, 0x8a, 0x81, +0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9, 0x7b, 0x70, 0x6d, 0x66, 0x57, 0x5c, 0x41, 0x4a, +0x23, 0x28, 0x35, 0x3e, 0x0f, 0x04, 0x19, 0x12, 0xcb, 0xc0, 0xdd, 0xd6, 0xe7, 0xec, 0xf1, 0xfa, +0x93, 0x98, 0x85, 0x8e, 0xbf, 0xb4, 0xa9, 0xa2, 0xf6, 0xfd, 0xe0, 0xeb, 0xda, 0xd1, 0xcc, 0xc7, +0xae, 0xa5, 0xb8, 0xb3, 0x82, 0x89, 0x94, 0x9f, 0x46, 0x4d, 0x50, 0x5b, 0x6a, 0x61, 0x7c, 0x77, +0x1e, 0x15, 0x08, 0x03, 0x32, 0x39, 0x24, 0x2f, 0x8d, 0x86, 0x9b, 0x90, 0xa1, 0xaa, 0xb7, 0xbc, +0xd5, 0xde, 0xc3, 0xc8, 0xf9, 0xf2, 0xef, 0xe4, 0x3d, 0x36, 0x2b, 0x20, 0x11, 0x1a, 0x07, 0x0c, +0x65, 0x6e, 0x73, 0x78, 0x49, 0x42, 0x5f, 0x54, 0xf7, 0xfc, 0xe1, 0xea, 0xdb, 0xd0, 0xcd, 0xc6, +0xaf, 0xa4, 0xb9, 0xb2, 0x83, 0x88, 0x95, 0x9e, 0x47, 0x4c, 0x51, 0x5a, 0x6b, 0x60, 0x7d, 0x76, +0x1f, 0x14, 0x09, 0x02, 0x33, 0x38, 0x25, 0x2e, 0x8c, 0x87, 0x9a, 0x91, 0xa0, 0xab, 0xb6, 0xbd, +0xd4, 0xdf, 0xc2, 0xc9, 0xf8, 0xf3, 0xee, 0xe5, 0x3c, 0x37, 0x2a, 0x21, 0x10, 0x1b, 0x06, 0x0d, +0x64, 0x6f, 0x72, 0x79, 0x48, 0x43, 0x5e, 0x55, 0x01, 0x0a, 0x17, 0x1c, 0x2d, 0x26, 0x3b, 0x30, +0x59, 0x52, 0x4f, 0x44, 0x75, 0x7e, 0x63, 0x68, 0xb1, 0xba, 0xa7, 0xac, 0x9d, 0x96, 0x8b, 0x80, +0xe9, 0xe2, 0xff, 0xf4, 0xc5, 0xce, 0xd3, 0xd8, 0x7a, 0x71, 0x6c, 0x67, 0x56, 0x5d, 0x40, 0x4b, +0x22, 0x29, 0x34, 0x3f, 0x0e, 0x05, 0x18, 0x13, 0xca, 0xc1, 0xdc, 0xd7, 0xe6, 0xed, 0xf0, 0xfb, +0x92, 0x99, 0x84, 0x8f, 0xbe, 0xb5, 0xa8, 0xa3, 0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, +0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b, 0xd0, 0xdd, 0xca, 0xc7, 0xe4, 0xe9, 0xfe, 0xf3, +0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b, 0xbb, 0xb6, 0xa1, 0xac, 0x8f, 0x82, 0x95, 0x98, +0xd3, 0xde, 0xc9, 0xc4, 0xe7, 0xea, 0xfd, 0xf0, 0x6b, 0x66, 0x71, 0x7c, 0x5f, 0x52, 0x45, 0x48, +0x03, 0x0e, 0x19, 0x14, 0x37, 0x3a, 0x2d, 0x20, 0x6d, 0x60, 0x77, 0x7a, 0x59, 0x54, 0x43, 0x4e, +0x05, 0x08, 0x1f, 0x12, 0x31, 0x3c, 0x2b, 0x26, 0xbd, 0xb0, 0xa7, 0xaa, 0x89, 0x84, 0x93, 0x9e, +0xd5, 0xd8, 0xcf, 0xc2, 0xe1, 0xec, 0xfb, 0xf6, 0xd6, 0xdb, 0xcc, 0xc1, 0xe2, 0xef, 0xf8, 0xf5, +0xbe, 0xb3, 0xa4, 0xa9, 0x8a, 0x87, 0x90, 0x9d, 0x06, 0x0b, 0x1c, 0x11, 0x32, 0x3f, 0x28, 0x25, +0x6e, 0x63, 0x74, 0x79, 0x5a, 0x57, 0x40, 0x4d, 0xda, 0xd7, 0xc0, 0xcd, 0xee, 0xe3, 0xf4, 0xf9, +0xb2, 0xbf, 0xa8, 0xa5, 0x86, 0x8b, 0x9c, 0x91, 0x0a, 0x07, 0x10, 0x1d, 0x3e, 0x33, 0x24, 0x29, +0x62, 0x6f, 0x78, 0x75, 0x56, 0x5b, 0x4c, 0x41, 0x61, 0x6c, 0x7b, 0x76, 0x55, 0x58, 0x4f, 0x42, +0x09, 0x04, 0x13, 0x1e, 0x3d, 0x30, 0x27, 0x2a, 0xb1, 0xbc, 0xab, 0xa6, 0x85, 0x88, 0x9f, 0x92, +0xd9, 0xd4, 0xc3, 0xce, 0xed, 0xe0, 0xf7, 0xfa, 0xb7, 0xba, 0xad, 0xa0, 0x83, 0x8e, 0x99, 0x94, +0xdf, 0xd2, 0xc5, 0xc8, 0xeb, 0xe6, 0xf1, 0xfc, 0x67, 0x6a, 0x7d, 0x70, 0x53, 0x5e, 0x49, 0x44, +0x0f, 0x02, 0x15, 0x18, 0x3b, 0x36, 0x21, 0x2c, 0x0c, 0x01, 0x16, 0x1b, 0x38, 0x35, 0x22, 0x2f, +0x64, 0x69, 0x7e, 0x73, 0x50, 0x5d, 0x4a, 0x47, 0xdc, 0xd1, 0xc6, 0xcb, 0xe8, 0xe5, 0xf2, 0xff, +0xb4, 0xb9, 0xae, 0xa3, 0x80, 0x8d, 0x9a, 0x97, 0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, +0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a, 0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca, +0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, 0xba, 0xdb, 0xd5, 0xc7, 0xc9, 0xe3, 0xed, 0xff, 0xf1, +0xab, 0xa5, 0xb7, 0xb9, 0x93, 0x9d, 0x8f, 0x81, 0x3b, 0x35, 0x27, 0x29, 0x03, 0x0d, 0x1f, 0x11, +0x4b, 0x45, 0x57, 0x59, 0x73, 0x7d, 0x6f, 0x61, 0xad, 0xa3, 0xb1, 0xbf, 0x95, 0x9b, 0x89, 0x87, +0xdd, 0xd3, 0xc1, 0xcf, 0xe5, 0xeb, 0xf9, 0xf7, 0x4d, 0x43, 0x51, 0x5f, 0x75, 0x7b, 0x69, 0x67, +0x3d, 0x33, 0x21, 0x2f, 0x05, 0x0b, 0x19, 0x17, 0x76, 0x78, 0x6a, 0x64, 0x4e, 0x40, 0x52, 0x5c, +0x06, 0x08, 0x1a, 0x14, 0x3e, 0x30, 0x22, 0x2c, 0x96, 0x98, 0x8a, 0x84, 0xae, 0xa0, 0xb2, 0xbc, +0xe6, 0xe8, 0xfa, 0xf4, 0xde, 0xd0, 0xc2, 0xcc, 0x41, 0x4f, 0x5d, 0x53, 0x79, 0x77, 0x65, 0x6b, +0x31, 0x3f, 0x2d, 0x23, 0x09, 0x07, 0x15, 0x1b, 0xa1, 0xaf, 0xbd, 0xb3, 0x99, 0x97, 0x85, 0x8b, +0xd1, 0xdf, 0xcd, 0xc3, 0xe9, 0xe7, 0xf5, 0xfb, 0x9a, 0x94, 0x86, 0x88, 0xa2, 0xac, 0xbe, 0xb0, +0xea, 0xe4, 0xf6, 0xf8, 0xd2, 0xdc, 0xce, 0xc0, 0x7a, 0x74, 0x66, 0x68, 0x42, 0x4c, 0x5e, 0x50, +0x0a, 0x04, 0x16, 0x18, 0x32, 0x3c, 0x2e, 0x20, 0xec, 0xe2, 0xf0, 0xfe, 0xd4, 0xda, 0xc8, 0xc6, +0x9c, 0x92, 0x80, 0x8e, 0xa4, 0xaa, 0xb8, 0xb6, 0x0c, 0x02, 0x10, 0x1e, 0x34, 0x3a, 0x28, 0x26, +0x7c, 0x72, 0x60, 0x6e, 0x44, 0x4a, 0x58, 0x56, 0x37, 0x39, 0x2b, 0x25, 0x0f, 0x01, 0x13, 0x1d, +0x47, 0x49, 0x5b, 0x55, 0x7f, 0x71, 0x63, 0x6d, 0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd, +0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, +0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, 0xf0, 0xe1, 0xd2, 0xc3, 0x01, 0x23, 0x45, 0x67, +0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, 0x3d, 0x3e, 0x47, 0x31, +0x2c, 0x20, 0x63, 0x6e, 0x74, 0x3a, 0x25, 0x64, 0x2d, 0x25, 0x64, 0x0a, 0x00, 0x00, 0x00, 0x00, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0x73, 0x72, 0x63, 0x2f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x75, 0x6e, 0x69, 0x5f, 0x6d, 0x61, 0x63, +0x2f, 0x62, 0x62, 0x70, 0x72, 0x66, 0x2f, 0x6d, 0x74, 0x37, 0x36, 0x30, 0x33, 0x2f, 0x72, 0x6c, +0x6d, 0x5f, 0x72, 0x66, 0x5f, 0x63, 0x61, 0x6c, 0x5f, 0x6d, 0x74, 0x37, 0x36, 0x30, 0x33, 0x2e, +0x63, 0x00, 0x00, 0x00, 0x52, 0x4c, 0x4d, 0x20, 0x43, 0x41, 0x4c, 0x28, 0x25, 0x73, 0x29, 0x28, +0x25, 0x73, 0x29, 0x45, 0x52, 0x52, 0x0a, 0x00, 0x45, 0x4c, 0x4e, 0x41, 0x5f, 0x54, 0x42, 0x4c, +0x25, 0x64, 0x20, 0x52, 0x46, 0x0a, 0x00, 0x00, 0x45, 0x4c, 0x4e, 0x41, 0x5f, 0x54, 0x42, 0x4c, +0x25, 0x64, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x31, 0x01, 0x01, 0x00, 0x00, 0x00, +0x40, 0x78, 0x7d, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x62, 0x02, 0x00, 0x00, 0x00, 0x00, +0x00, 0x2d, 0x31, 0x01, 0x65, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x78, 0x7d, 0x01, +0x7f, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x62, 0x02, 0xcc, 0x00, 0x00, 0x00, +0x01, 0x00, 0x00, 0x00, 0xe0, 0xcd, 0x24, 0x00, 0xea, 0x19, 0x2d, 0x01, 0x00, 0x00, 0x08, 0x00, +0x62, 0x1a, 0xf1, 0x00, 0x33, 0x33, 0x03, 0x00, 0xea, 0x19, 0x96, 0x00, 0x00, 0x00, 0x0c, 0x00, +0x02, 0x00, 0x00, 0x00, 0x68, 0xe1, 0x24, 0x00, 0xf8, 0x19, 0x2e, 0x01, 0x00, 0x00, 0x02, 0x00, +0x70, 0x1a, 0xf1, 0x00, 0x33, 0x33, 0x0b, 0x00, 0xf8, 0x19, 0x97, 0x00, 0x00, 0x00, 0x01, 0x00, +0x03, 0x00, 0x00, 0x00, 0xf0, 0xf4, 0x24, 0x00, 0x06, 0x1a, 0x2e, 0x01, 0x00, 0x00, 0x0c, 0x00, +0x7e, 0x1a, 0xf2, 0x00, 0x33, 0x33, 0x03, 0x00, 0x06, 0x1a, 0x97, 0x00, 0x00, 0x00, 0x06, 0x00, +0x04, 0x00, 0x00, 0x00, 0x78, 0x08, 0x25, 0x00, 0x14, 0x1a, 0x2f, 0x01, 0x00, 0x00, 0x06, 0x00, +0x8c, 0x1a, 0xf2, 0x00, 0x33, 0x33, 0x0b, 0x00, 0x14, 0x1a, 0x97, 0x00, 0x00, 0x00, 0x0b, 0x00, +0x05, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x25, 0x00, 0x20, 0x1a, 0x30, 0x01, 0x00, 0x00, 0x00, 0x00, +0x9a, 0x1a, 0xf3, 0x00, 0x33, 0x33, 0x03, 0x00, 0x20, 0x1a, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, +0x06, 0x00, 0x00, 0x00, 0x88, 0x2f, 0x25, 0x00, 0x2e, 0x1a, 0x30, 0x01, 0x00, 0x00, 0x0a, 0x00, +0xa8, 0x1a, 0xf3, 0x00, 0x33, 0x33, 0x0b, 0x00, 0x2e, 0x1a, 0x98, 0x00, 0x00, 0x00, 0x05, 0x00, +0x07, 0x00, 0x00, 0x00, 0x10, 0x43, 0x25, 0x00, 0x3c, 0x1a, 0x31, 0x01, 0x00, 0x00, 0x04, 0x00, +0xb6, 0x1a, 0xf4, 0x00, 0x33, 0x33, 0x03, 0x00, 0x3c, 0x1a, 0x98, 0x00, 0x00, 0x00, 0x0a, 0x00, +0x08, 0x00, 0x00, 0x00, 0x98, 0x56, 0x25, 0x00, 0x4a, 0x1a, 0x31, 0x01, 0x00, 0x00, 0x0e, 0x00, +0xc4, 0x1a, 0xf4, 0x00, 0x33, 0x33, 0x0b, 0x00, 0x4a, 0x1a, 0x98, 0x00, 0x00, 0x00, 0x0f, 0x00, +0x09, 0x00, 0x00, 0x00, 0x20, 0x6a, 0x25, 0x00, 0x58, 0x1a, 0x32, 0x01, 0x00, 0x00, 0x08, 0x00, +0xd2, 0x1a, 0xf5, 0x00, 0x33, 0x33, 0x03, 0x00, 0x58, 0x1a, 0x99, 0x00, 0x00, 0x00, 0x04, 0x00, +0x0a, 0x00, 0x00, 0x00, 0xa8, 0x7d, 0x25, 0x00, 0x66, 0x1a, 0x33, 0x01, 0x00, 0x00, 0x02, 0x00, +0xe0, 0x1a, 0xf5, 0x00, 0x33, 0x33, 0x0b, 0x00, 0x66, 0x1a, 0x99, 0x00, 0x00, 0x00, 0x09, 0x00, +0x0b, 0x00, 0x00, 0x00, 0x30, 0x91, 0x25, 0x00, 0x74, 0x1a, 0x33, 0x01, 0x00, 0x00, 0x0c, 0x00, +0xee, 0x1a, 0xf6, 0x00, 0x33, 0x33, 0x03, 0x00, 0x74, 0x1a, 0x99, 0x00, 0x00, 0x00, 0x0e, 0x00, +0x0c, 0x00, 0x00, 0x00, 0xb8, 0xa4, 0x25, 0x00, 0x82, 0x1a, 0x34, 0x01, 0x00, 0x00, 0x06, 0x00, +0xfc, 0x1a, 0xf6, 0x00, 0x33, 0x33, 0x0b, 0x00, 0x82, 0x1a, 0x9a, 0x00, 0x00, 0x00, 0x03, 0x00, +0x0d, 0x00, 0x00, 0x00, 0x40, 0xb8, 0x25, 0x00, 0x8e, 0x1a, 0x35, 0x01, 0x00, 0x00, 0x00, 0x00, +0x0a, 0x1b, 0xf7, 0x00, 0x33, 0x33, 0x03, 0x00, 0x8e, 0x1a, 0x9a, 0x00, 0x00, 0x00, 0x08, 0x00, +0x0e, 0x00, 0x00, 0x00, 0x20, 0xe7, 0x25, 0x00, 0xb0, 0x1a, 0x36, 0x01, 0x00, 0x00, 0x08, 0x00, +0x2c, 0x1b, 0xf8, 0x00, 0x66, 0x66, 0x06, 0x00, 0xb0, 0x1a, 0x9b, 0x00, 0x00, 0x00, 0x04, 0x00, +0x0f, 0x00, 0x00, 0x00, 0xc8, 0x98, 0x66, 0x01, 0x40, 0x19, 0x25, 0x01, 0x9a, 0x19, 0x0c, 0x00, +0xb6, 0x19, 0xeb, 0x00, 0x7b, 0x14, 0x00, 0x00, 0x40, 0x19, 0x92, 0x00, 0xcd, 0x0c, 0x0e, 0x00, +0x20, 0x00, 0x00, 0x00, 0x8c, 0x09, 0x80, 0x00, 0x8c, 0x09, 0x80, 0x00, 0x8c, 0x09, 0x80, 0x00, +0x1c, 0x00, 0x00, 0x00, 0x66, 0xa4, 0x81, 0xee, 0x66, 0xa4, 0x81, 0xee, 0x66, 0xa4, 0x81, 0xee, +0xb0, 0x00, 0x00, 0x00, 0xc4, 0xa3, 0x01, 0x04, 0x66, 0xab, 0x01, 0x04, 0xc9, 0xa3, 0x01, 0x04, +0xb4, 0x00, 0x00, 0x00, 0x10, 0xc0, 0xf0, 0x3f, 0x10, 0xc0, 0xf0, 0x3f, 0x10, 0xc0, 0xf0, 0x3f, +0xbc, 0x00, 0x00, 0x00, 0xc3, 0xb6, 0x44, 0x44, 0xc3, 0xb6, 0x55, 0x55, 0xc3, 0xb6, 0x66, 0x66, +0x00, 0x06, 0x00, 0x00, 0xb3, 0x6f, 0x62, 0xc1, 0xc3, 0x6f, 0x62, 0xc1, 0xf3, 0x6f, 0x62, 0xc1, +0x0c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x14, 0x13, 0x33, 0x33, 0x43, 0x0f, 0x00, 0x00, 0x8a, 0x09, +0x14, 0x00, 0x00, 0x00, 0x00, 0xab, 0x84, 0x56, 0xe8, 0x00, 0x00, 0x00, 0x81, 0x00, 0x61, 0x00, +0xec, 0x00, 0x00, 0x00, 0x21, 0x00, 0x83, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x63, 0x00, 0x23, 0x00, +0xf4, 0x00, 0x00, 0x00, 0x88, 0x00, 0x68, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x28, 0x00, 0x8f, 0x00, +0xfc, 0x00, 0x00, 0x00, 0x6f, 0x00, 0xbd, 0x00, 0x00, 0x01, 0x00, 0x00, 0x9d, 0x00, 0x7d, 0x00, +0x04, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x1d, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xbf, +0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x80, +0x14, 0x00, 0x00, 0x00, 0x00, 0xab, 0x84, 0x56, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0xdc, 0x00, 0x00, 0x00, 0x11, 0x1d, 0x1e, 0x35, 0xe0, 0x00, 0x00, 0x00, 0x1c, 0x35, 0x17, 0x19, +0xe8, 0x00, 0x00, 0x00, 0xe1, 0x00, 0xa1, 0x00, 0xec, 0x00, 0x00, 0x00, 0x81, 0x00, 0x61, 0x00, +0xf0, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x83, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x63, 0x00, 0xa7, 0x00, +0xf8, 0x00, 0x00, 0x00, 0x87, 0x00, 0x67, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xae, 0x00, 0x8e, 0x00, +0x00, 0x01, 0x00, 0x00, 0x6e, 0x00, 0x2e, 0x00, 0x04, 0x01, 0x00, 0x00, 0x0e, 0x00, 0x0e, 0x00, +0x00, 0x08, 0x00, 0x00, 0x66, 0x44, 0x66, 0x44, 0x04, 0x08, 0x00, 0x00, 0x66, 0x44, 0x66, 0x44, +0x08, 0x08, 0x00, 0x00, 0x00, 0x44, 0x00, 0x44, 0x0c, 0x08, 0x00, 0x00, 0x00, 0x44, 0x00, 0x44, +0x10, 0x08, 0x00, 0x00, 0x44, 0x44, 0x44, 0x41, 0x14, 0x08, 0x00, 0x00, 0x44, 0x44, 0x44, 0x41, +0x3c, 0x06, 0x00, 0x00, 0x32, 0x74, 0x32, 0x63, 0x40, 0x06, 0x00, 0x00, 0x22, 0x62, 0x32, 0x63, +0x4c, 0x06, 0x00, 0x00, 0x19, 0x19, 0x19, 0x05, 0x50, 0x06, 0x00, 0x00, 0x0a, 0x0a, 0x0a, 0x01, +0x58, 0x06, 0x00, 0x00, 0x19, 0x14, 0x14, 0x05, 0x5c, 0x06, 0x00, 0x00, 0x0a, 0x07, 0x07, 0x01, +0x64, 0x06, 0x00, 0x00, 0x19, 0x19, 0x19, 0x05, 0x68, 0x06, 0x00, 0x00, 0x19, 0x14, 0x14, 0x05, +0x00, 0x08, 0x00, 0x00, 0x66, 0x44, 0x66, 0x44, 0x04, 0x08, 0x00, 0x00, 0x66, 0x44, 0x66, 0x44, +0x08, 0x08, 0x00, 0x00, 0x00, 0x44, 0x00, 0x44, 0x0c, 0x08, 0x00, 0x00, 0x00, 0x44, 0x00, 0x44, +0x10, 0x08, 0x00, 0x00, 0x44, 0x44, 0x44, 0x41, 0x14, 0x08, 0x00, 0x00, 0x44, 0x44, 0x44, 0x41, +0x3c, 0x06, 0x00, 0x00, 0x32, 0x74, 0x32, 0x63, 0x40, 0x06, 0x00, 0x00, 0x22, 0x62, 0x32, 0x63, +0x4c, 0x06, 0x00, 0x00, 0x19, 0x19, 0x19, 0x05, 0x50, 0x06, 0x00, 0x00, 0x0a, 0x0a, 0x0a, 0x01, +0x58, 0x06, 0x00, 0x00, 0x19, 0x14, 0x14, 0x05, 0x5c, 0x06, 0x00, 0x00, 0x0a, 0x07, 0x07, 0x01, +0x64, 0x06, 0x00, 0x00, 0x19, 0x19, 0x19, 0x05, 0x68, 0x06, 0x00, 0x00, 0x19, 0x14, 0x14, 0x05, +0xfe, 0x77, 0x0d, 0x80, 0x80, 0x00, 0x00, 0x00, 0xfe, 0x77, 0x0f, 0x80, 0x80, 0x00, 0x00, 0x00, +0xfe, 0xb7, 0x0f, 0x80, 0x80, 0x00, 0x00, 0x00, 0xfe, 0xf7, 0x0f, 0x80, 0x80, 0x00, 0x00, 0x00, +0xfe, 0x77, 0x0d, 0x80, 0x90, 0x00, 0x00, 0x00, 0xfe, 0x77, 0x0f, 0x80, 0x90, 0x00, 0x00, 0x00, +0xfe, 0xb7, 0x0f, 0x80, 0x90, 0x00, 0x00, 0x00, 0xfe, 0xf7, 0x0f, 0x80, 0x90, 0x00, 0x00, 0x00, +0xfe, 0x77, 0x0d, 0x80, 0xa0, 0x00, 0x00, 0x00, 0xfe, 0x77, 0x0f, 0x80, 0xa0, 0x00, 0x00, 0x00, +0xfe, 0xb7, 0x0f, 0x80, 0xa0, 0x00, 0x00, 0x00, 0xfe, 0xf7, 0x0f, 0x80, 0xa0, 0x00, 0x00, 0x00, +0xfe, 0x77, 0x0d, 0x80, 0xb0, 0x00, 0x00, 0x00, 0xfe, 0x77, 0x0f, 0x80, 0xb0, 0x00, 0x00, 0x00, +0xfe, 0xb7, 0x0f, 0x80, 0xb0, 0x00, 0x00, 0x00, 0xfe, 0xf7, 0x0f, 0x80, 0xb0, 0x00, 0x00, 0x00, +0xfe, 0x77, 0x0d, 0x90, 0x80, 0x00, 0x00, 0x00, 0xfe, 0x77, 0x0f, 0x90, 0x80, 0x00, 0x00, 0x00, +0xfe, 0xb7, 0x0f, 0x90, 0x80, 0x00, 0x00, 0x00, 0xfe, 0xf7, 0x0f, 0x90, 0x80, 0x00, 0x00, 0x00, +0xfe, 0x77, 0x0d, 0x90, 0x90, 0x00, 0x00, 0x00, 0xfe, 0x77, 0x0f, 0x90, 0x90, 0x00, 0x00, 0x00, +0xfe, 0xb7, 0x0f, 0x90, 0x90, 0x00, 0x00, 0x00, 0xfe, 0xf7, 0x0f, 0x90, 0x90, 0x00, 0x00, 0x00, +0xfe, 0x77, 0x0d, 0x90, 0xa0, 0x00, 0x00, 0x00, 0xfe, 0x77, 0x0f, 0x90, 0xa0, 0x00, 0x00, 0x00, +0xfe, 0xb7, 0x0f, 0x90, 0xa0, 0x00, 0x00, 0x00, 0xfe, 0xf7, 0x0f, 0x90, 0xa0, 0x00, 0x00, 0x00, +0xfe, 0x77, 0x0d, 0x90, 0xb0, 0x00, 0x00, 0x00, 0xfe, 0x77, 0x0f, 0x90, 0xb0, 0x00, 0x00, 0x00, +0xfe, 0xb7, 0x0f, 0x90, 0xb0, 0x00, 0x00, 0x00, 0xfe, 0xf7, 0x0f, 0x90, 0xb0, 0x00, 0x00, 0x00, +0x00, 0x08, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, 0x04, 0x08, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, +0x08, 0x08, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x08, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, +0x10, 0x08, 0x20, 0x60, 0xfe, 0xfb, 0xff, 0x3f, 0x14, 0x08, 0x20, 0x60, 0xfa, 0xf3, 0xdf, 0x3f, +0x18, 0x08, 0x20, 0x60, 0xf5, 0xdf, 0x9f, 0x3f, 0x1c, 0x08, 0x20, 0x60, 0xf0, 0xcb, 0x4f, 0x3f, +0x20, 0x08, 0x20, 0x60, 0xeb, 0xb3, 0xef, 0x3e, 0x24, 0x08, 0x20, 0x60, 0xe9, 0xa7, 0xaf, 0x3e, +0x28, 0x08, 0x20, 0x60, 0xef, 0xb3, 0xaf, 0x3e, 0x2c, 0x08, 0x20, 0x60, 0xff, 0xe7, 0x3f, 0x3f, +0x30, 0x08, 0x20, 0x60, 0x1c, 0x44, 0x80, 0x00, 0x34, 0x08, 0x20, 0x60, 0x46, 0xdc, 0x90, 0x02, +0x38, 0x08, 0x20, 0x60, 0x7a, 0x9c, 0x61, 0x05, 0x3c, 0x08, 0x20, 0x60, 0xb3, 0x80, 0xd2, 0x08, +0x40, 0x08, 0x20, 0x60, 0xec, 0x68, 0x73, 0x0c, 0x44, 0x08, 0x20, 0x60, 0x1d, 0x39, 0xe4, 0x0f, +0x48, 0x08, 0x20, 0x60, 0x3f, 0xd9, 0xa4, 0x12, 0x4c, 0x08, 0x20, 0x60, 0x4e, 0x2d, 0x65, 0x14, +0x00, 0x08, 0x20, 0x60, 0xfd, 0xf7, 0xdf, 0x3f, 0x04, 0x08, 0x20, 0x60, 0xfd, 0xf7, 0xdf, 0x3f, +0x08, 0x08, 0x20, 0x60, 0xfd, 0xf7, 0xdf, 0x3f, 0x0c, 0x08, 0x20, 0x60, 0xfd, 0xf7, 0xdf, 0x3f, +0x10, 0x08, 0x20, 0x60, 0xff, 0xfb, 0xef, 0x3f, 0x14, 0x08, 0x20, 0x60, 0x02, 0x04, 0xf0, 0x3f, +0x18, 0x08, 0x20, 0x60, 0x07, 0x14, 0x30, 0x00, 0x1c, 0x08, 0x20, 0x60, 0x0f, 0x30, 0x90, 0x00, +0x20, 0x08, 0x20, 0x60, 0x19, 0x54, 0x20, 0x01, 0x24, 0x08, 0x20, 0x60, 0x26, 0x88, 0xd0, 0x01, +0x28, 0x08, 0x20, 0x60, 0x36, 0xc4, 0xb0, 0x02, 0x2c, 0x08, 0x20, 0x60, 0x49, 0x0c, 0xc1, 0x03, +0x30, 0x08, 0x20, 0x60, 0x5d, 0x58, 0xf1, 0x04, 0x34, 0x08, 0x20, 0x60, 0x72, 0xac, 0x41, 0x06, +0x38, 0x08, 0x20, 0x60, 0x86, 0x00, 0x92, 0x07, 0x3c, 0x08, 0x20, 0x60, 0x99, 0x4c, 0xd2, 0x08, +0x40, 0x08, 0x20, 0x60, 0xaa, 0x94, 0xf2, 0x09, 0x44, 0x08, 0x20, 0x60, 0xb7, 0xcc, 0xe2, 0x0a, +0x48, 0x08, 0x20, 0x60, 0xbf, 0xf4, 0xa2, 0x0b, 0x4c, 0x08, 0x20, 0x60, 0xc2, 0x08, 0x13, 0x0c, +0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0xe4, 0x00, 0x00, 0xe4, 0x94, 0x00, 0x00, 0xe4, 0x90, +0x00, 0x00, 0xe4, 0x91, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0xe4, +0x00, 0x00, 0xe4, 0x94, 0x00, 0x00, 0xe4, 0x90, 0x00, 0x00, 0xe4, 0x91, 0x01, 0x00, 0x00, 0x00, +0x74, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x76, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, +0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x76, +0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x01, 0x00, 0x00, 0x00, +0x78, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0xa8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, +0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0xa8, +0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x01, 0x00, 0x00, 0x00, +0x7c, 0x00, 0x00, 0x00, 0x44, 0x44, 0x46, 0x41, 0x44, 0x44, 0x46, 0x11, 0x44, 0x44, 0x46, 0x11, +0x44, 0x44, 0x46, 0x11, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x44, 0x44, 0x46, 0x41, +0x44, 0x44, 0x46, 0x11, 0x44, 0x44, 0x46, 0x11, 0x44, 0x44, 0x46, 0x11, 0x01, 0x00, 0x00, 0x00, +0x88, 0x00, 0x00, 0x00, 0x32, 0x52, 0x43, 0x63, 0x32, 0x52, 0x46, 0x34, 0x32, 0x52, 0x66, 0x34, +0x32, 0x52, 0x64, 0x34, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x32, 0x52, 0x42, 0x52, +0x32, 0x52, 0x45, 0x24, 0x32, 0x52, 0x55, 0x24, 0x32, 0x52, 0x54, 0x24, 0x01, 0x00, 0x00, 0x00, +0x94, 0x00, 0x00, 0x00, 0x14, 0x0f, 0x14, 0x05, 0x05, 0x0f, 0x0f, 0x14, 0x05, 0x05, 0x0f, 0x14, +0x0f, 0x05, 0x0f, 0x14, 0x00, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x19, 0x0f, 0x19, 0x0a, +0x0a, 0x0f, 0x0f, 0x19, 0x0a, 0x0a, 0x0f, 0x19, 0x0f, 0x0a, 0x0f, 0x19, 0x01, 0x00, 0x00, 0x00, +0x98, 0x00, 0x00, 0x00, 0x07, 0x04, 0x07, 0x01, 0x01, 0x04, 0x04, 0x07, 0x01, 0x01, 0x04, 0x07, +0x04, 0x01, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x0a, 0x04, 0x0a, 0x03, +0x03, 0x04, 0x04, 0x0a, 0x03, 0x03, 0x04, 0x0a, 0x04, 0x03, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xa4, 0x08, 0xa4, 0x38, 0xa4, 0x28, 0xa4, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xa4, 0x32, 0xa4, 0x00, 0x00, 0x00, 0x00, +0x39, 0x92, 0x29, 0x92, 0x19, 0x92, 0x09, 0x92, 0x79, 0x92, 0x69, 0x92, 0x59, 0x92, 0x49, 0x92, +0x39, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x6c, 0x6d, 0x52, 0x46, 0x32, 0x47, 0x34, -0x5f, 0x52, 0x65, 0x67, 0x49, 0x6e, 0x69, 0x74, 0x00, 0x00, 0x00, 0x00, 0x72, 0x6c, 0x6d, 0x52, -0x46, 0x5f, 0x41, 0x46, 0x45, 0x5f, 0x43, 0x61, 0x6c, 0x32, 0x47, 0x5f, 0x54, 0x78, 0x5f, 0x44, -0x50, 0x44, 0x5f, 0x43, 0x61, 0x6c, 0x00, 0x00, 0xd0, 0x81, 0x80, 0x00, 0xd0, 0x81, 0x80, 0x00, -0x00, 0xab, 0x84, 0x56, 0x00, 0x00, 0x80, 0x43, 0xd0, 0x81, 0x81, 0x00, 0xd0, 0x81, 0x81, 0x00, -0x00, 0xab, 0x84, 0x56, 0x00, 0x00, 0x00, 0x40, 0xd0, 0x81, 0x83, 0x00, 0xd0, 0x81, 0x83, 0x00, -0x00, 0xab, 0x84, 0x56, 0x00, 0x00, 0x80, 0x40, 0xd0, 0x81, 0x84, 0x00, 0xd0, 0x81, 0x84, 0x00, -0x00, 0xa8, 0x84, 0x56, 0x00, 0x00, 0x80, 0x43, 0xd0, 0x81, 0x85, 0x00, 0xd0, 0x81, 0x85, 0x00, -0x00, 0xa8, 0x84, 0x56, 0x00, 0x00, 0x00, 0x40, 0xd0, 0x81, 0x87, 0x00, 0xd0, 0x81, 0x87, 0x00, -0x00, 0xa8, 0x84, 0x56, 0x00, 0x00, 0x80, 0x40, 0xf0, 0x80, 0x80, 0x00, 0xe0, 0x80, 0x80, 0x00, -0x00, 0xa8, 0x84, 0x56, 0x00, 0x00, 0x80, 0x43, 0xf0, 0x80, 0x81, 0x00, 0xe0, 0x80, 0x81, 0x00, -0x00, 0xa8, 0x84, 0x56, 0x00, 0x00, 0x00, 0x40, 0xf0, 0x80, 0x83, 0x00, 0xe0, 0x80, 0x83, 0x00, -0x00, 0xa8, 0x84, 0x56, 0x00, 0x00, 0x80, 0x40, 0xf0, 0x80, 0x84, 0x00, 0xe0, 0x80, 0x84, 0x00, -0x00, 0xa8, 0x84, 0x56, 0x00, 0x00, 0x00, 0x41, 0xf0, 0x80, 0x85, 0x00, 0xe0, 0x80, 0x85, 0x00, -0x00, 0xa8, 0x84, 0x56, 0x00, 0x00, 0x00, 0x41, 0xf0, 0x80, 0x87, 0x00, 0xe0, 0x80, 0x87, 0x00, -0x00, 0xa8, 0x84, 0x56, 0x00, 0x00, 0x00, 0x41, 0x72, 0x6c, 0x6d, 0x52, 0x46, 0x5f, 0x41, 0x46, -0x45, 0x5f, 0x43, 0x61, 0x6c, 0x32, 0x47, 0x5f, 0x52, 0x53, 0x53, 0x49, 0x5f, 0x44, 0x43, 0x4f, -0x43, 0x5f, 0x43, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x60, 0x00, 0x00, 0x00, 0x04, -0x0c, 0x02, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x20, 0x60, 0xc0, 0x41, 0x40, 0x82, -0x04, 0x0d, 0x20, 0x60, 0x00, 0x08, 0x01, 0x21, 0x14, 0x42, 0x20, 0x60, 0x80, 0x05, 0x00, 0x00, -0x24, 0x0d, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0a, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, -0x40, 0x41, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, -0x00, 0x03, 0x20, 0x60, 0x48, 0x00, 0x01, 0x00, 0x00, 0x41, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, -0x04, 0x07, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x06, 0x20, 0x60, 0xa3, 0x0d, 0x22, 0x00, -0x80, 0x01, 0x20, 0x60, 0x80, 0x83, 0x82, 0x7a, 0x84, 0x01, 0x20, 0x60, 0x71, 0x6f, 0x7b, 0xa7, -0x50, 0x01, 0x20, 0x60, 0x01, 0x00, 0x10, 0x02, 0x54, 0x01, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, -0x08, 0x02, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x20, 0x60, 0x00, 0x80, 0x10, 0x00, -0x08, 0x01, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x20, 0x60, 0xf9, 0x4f, 0x00, 0x09, -0x14, 0x41, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x20, 0x60, 0xf9, 0x4f, 0x00, 0x09, -0x10, 0x01, 0x20, 0x60, 0xf9, 0x00, 0x00, 0x00, 0x1c, 0x01, 0x20, 0x60, 0x00, 0x00, 0xf0, 0x90, -0x00, 0x00, 0x20, 0x60, 0x45, 0x00, 0x00, 0x00, 0x04, 0x00, 0x20, 0x60, 0x45, 0x00, 0x00, 0x00, -0x44, 0x01, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x20, 0x60, 0xc0, 0x41, 0x40, 0x82, -0x04, 0x1d, 0x20, 0x60, 0x00, 0x08, 0x01, 0x21, 0x24, 0x1d, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, -0x08, 0x12, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1a, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, -0x14, 0x52, 0x20, 0x60, 0x80, 0x05, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x27, 0x07, 0x30, 0x00, -0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0xd0, 0x82, 0x00, 0x01, -0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x00, 0x02, -0xc0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x09, 0x8f, 0xd4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0xd8, 0x00, 0x00, 0x00, 0xd1, 0x7e, 0x11, 0x19, 0x14, 0x00, 0x00, 0x00, 0x00, 0xab, 0x84, 0x56, -0xa0, 0x00, 0x00, 0x00, 0xfe, 0xf5, 0x06, 0x00, 0x48, 0x00, 0x00, 0x00, 0x27, 0x07, 0x30, 0x00, -0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0xd0, 0x82, 0x00, 0x01, -0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x00, 0x02, -0xc0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x09, 0x8f, 0xd4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0xd8, 0x00, 0x00, 0x00, 0xd1, 0x7e, 0x11, 0x19, 0x14, 0x00, 0x00, 0x00, 0x00, 0xab, 0x84, 0x56, -0xa0, 0x00, 0x00, 0x00, 0xfe, 0xf5, 0x06, 0x00, 0x72, 0x6c, 0x6d, 0x52, 0x46, 0x5f, 0x41, 0x46, -0x45, 0x5f, 0x43, 0x61, 0x6c, 0x32, 0x47, 0x5f, 0x53, 0x58, 0x5f, 0x47, 0x5f, 0x43, 0x61, 0x6c, -0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x43, 0x68, 0x5f, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x00, 0x00, -0x58, 0x4f, 0x00, 0x00, 0x3e, 0x0f, 0xe4, 0x5c, 0x3e, 0x2f, 0xfe, 0x70, 0x4c, 0x01, 0x00, 0x08, -0x44, 0x10, 0x00, 0x00, 0x1c, 0x10, 0x00, 0x01, 0x4c, 0x01, 0x7f, 0xfe, 0x59, 0xe2, 0x00, 0x00, -0x4a, 0x00, 0x78, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x6c, 0x55, 0x11, 0x00, 0x01, 0x01, 0x00, 0x00, 0xd4, 0x56, 0x11, 0x00, 0x80, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x72, 0x6c, 0x6d, 0x52, 0x46, 0x32, 0x47, 0x34, 0x5f, 0x52, 0x65, 0x67, +0x49, 0x6e, 0x69, 0x74, 0x00, 0x00, 0x00, 0x00, 0x72, 0x6c, 0x6d, 0x52, 0x46, 0x5f, 0x41, 0x46, +0x45, 0x5f, 0x43, 0x61, 0x6c, 0x32, 0x47, 0x5f, 0x54, 0x78, 0x5f, 0x44, 0x50, 0x44, 0x5f, 0x43, +0x61, 0x6c, 0x00, 0x00, 0xd0, 0x81, 0x80, 0x00, 0xd0, 0x81, 0x80, 0x00, 0x00, 0xab, 0x84, 0x56, +0x00, 0x00, 0x80, 0x43, 0xd0, 0x81, 0x81, 0x00, 0xd0, 0x81, 0x81, 0x00, 0x00, 0xab, 0x84, 0x56, +0x00, 0x00, 0x00, 0x40, 0xd0, 0x81, 0x83, 0x00, 0xd0, 0x81, 0x83, 0x00, 0x00, 0xab, 0x84, 0x56, +0x00, 0x00, 0x80, 0x40, 0xd0, 0x81, 0x84, 0x00, 0xd0, 0x81, 0x84, 0x00, 0x00, 0xa8, 0x84, 0x56, +0x00, 0x00, 0x80, 0x43, 0xd0, 0x81, 0x85, 0x00, 0xd0, 0x81, 0x85, 0x00, 0x00, 0xa8, 0x84, 0x56, +0x00, 0x00, 0x00, 0x40, 0xd0, 0x81, 0x87, 0x00, 0xd0, 0x81, 0x87, 0x00, 0x00, 0xa8, 0x84, 0x56, +0x00, 0x00, 0x80, 0x40, 0xf0, 0x80, 0x80, 0x00, 0xe0, 0x80, 0x80, 0x00, 0x00, 0xa8, 0x84, 0x56, +0x00, 0x00, 0x80, 0x43, 0xf0, 0x80, 0x81, 0x00, 0xe0, 0x80, 0x81, 0x00, 0x00, 0xa8, 0x84, 0x56, +0x00, 0x00, 0x00, 0x40, 0xf0, 0x80, 0x83, 0x00, 0xe0, 0x80, 0x83, 0x00, 0x00, 0xa8, 0x84, 0x56, +0x00, 0x00, 0x80, 0x40, 0xf0, 0x80, 0x84, 0x00, 0xe0, 0x80, 0x84, 0x00, 0x00, 0xa8, 0x84, 0x56, +0x00, 0x00, 0x00, 0x41, 0xf0, 0x80, 0x85, 0x00, 0xe0, 0x80, 0x85, 0x00, 0x00, 0xa8, 0x84, 0x56, +0x00, 0x00, 0x00, 0x41, 0xf0, 0x80, 0x87, 0x00, 0xe0, 0x80, 0x87, 0x00, 0x00, 0xa8, 0x84, 0x56, +0x00, 0x00, 0x00, 0x41, 0x72, 0x6c, 0x6d, 0x52, 0x46, 0x5f, 0x41, 0x46, 0x45, 0x5f, 0x43, 0x61, +0x6c, 0x32, 0x47, 0x5f, 0x52, 0x53, 0x53, 0x49, 0x5f, 0x44, 0x43, 0x4f, 0x43, 0x5f, 0x43, 0x61, +0x6c, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x60, 0x00, 0x00, 0x00, 0x04, 0x0c, 0x02, 0x20, 0x60, +0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x20, 0x60, 0xc0, 0x41, 0x40, 0x82, 0x04, 0x0d, 0x20, 0x60, +0x00, 0x08, 0x01, 0x21, 0x14, 0x42, 0x20, 0x60, 0x80, 0x05, 0x00, 0x00, 0x24, 0x0d, 0x20, 0x60, +0x00, 0x00, 0x00, 0x00, 0x08, 0x0a, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, 0x40, 0x41, 0x20, 0x60, +0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x20, 0x60, +0x48, 0x00, 0x01, 0x00, 0x00, 0x41, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, 0x04, 0x07, 0x20, 0x60, +0x00, 0x00, 0x00, 0x00, 0xcc, 0x06, 0x20, 0x60, 0xa3, 0x0d, 0x22, 0x00, 0x80, 0x01, 0x20, 0x60, +0x80, 0x83, 0x82, 0x7a, 0x84, 0x01, 0x20, 0x60, 0x71, 0x6f, 0x7b, 0xa7, 0x50, 0x01, 0x20, 0x60, +0x01, 0x00, 0x10, 0x02, 0x54, 0x01, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x02, 0x20, 0x60, +0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x20, 0x60, 0x00, 0x80, 0x10, 0x00, 0x08, 0x01, 0x20, 0x60, +0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x20, 0x60, 0xf9, 0x4f, 0x00, 0x09, 0x14, 0x41, 0x20, 0x60, +0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x20, 0x60, 0xf9, 0x4f, 0x00, 0x09, 0x10, 0x01, 0x20, 0x60, +0xf9, 0x00, 0x00, 0x00, 0x1c, 0x01, 0x20, 0x60, 0x00, 0x00, 0xf0, 0x90, 0x00, 0x00, 0x20, 0x60, +0x45, 0x00, 0x00, 0x00, 0x04, 0x00, 0x20, 0x60, 0x45, 0x00, 0x00, 0x00, 0x44, 0x01, 0x20, 0x60, +0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x20, 0x60, 0xc0, 0x41, 0x40, 0x82, 0x04, 0x1d, 0x20, 0x60, +0x00, 0x08, 0x01, 0x21, 0x24, 0x1d, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x12, 0x20, 0x60, +0x00, 0x00, 0x00, 0x00, 0x08, 0x1a, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, 0x14, 0x52, 0x20, 0x60, +0x80, 0x05, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x27, 0x07, 0x30, 0x00, 0x6c, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0xd0, 0x82, 0x00, 0x01, 0x70, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x00, 0x02, 0xc0, 0x00, 0x00, 0x00, +0x00, 0x20, 0x09, 0x8f, 0xd4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, +0xd1, 0x7e, 0x11, 0x19, 0x14, 0x00, 0x00, 0x00, 0x00, 0xab, 0x84, 0x56, 0xa0, 0x00, 0x00, 0x00, +0xfe, 0xf5, 0x06, 0x00, 0x48, 0x00, 0x00, 0x00, 0x27, 0x07, 0x30, 0x00, 0x6c, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0xd0, 0x82, 0x00, 0x01, 0x70, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x00, 0x02, 0xc0, 0x00, 0x00, 0x00, +0x00, 0x20, 0x09, 0x8f, 0xd4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, +0xd1, 0x7e, 0x11, 0x19, 0x14, 0x00, 0x00, 0x00, 0x00, 0xab, 0x84, 0x56, 0xa0, 0x00, 0x00, 0x00, +0xfe, 0xf5, 0x06, 0x00, 0x72, 0x6c, 0x6d, 0x52, 0x46, 0x5f, 0x41, 0x46, 0x45, 0x5f, 0x43, 0x61, +0x6c, 0x32, 0x47, 0x5f, 0x53, 0x58, 0x5f, 0x47, 0x5f, 0x43, 0x61, 0x6c, 0x5f, 0x66, 0x6f, 0x72, +0x5f, 0x43, 0x68, 0x5f, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x00, 0x00, 0x58, 0x4f, 0x00, 0x00, +0x3e, 0x0f, 0xe1, 0xfc, 0x3e, 0x2f, 0xfc, 0x10, 0x4c, 0x01, 0x00, 0x08, 0x44, 0x10, 0x00, 0x00, +0x1c, 0x10, 0x00, 0x01, 0x4c, 0x01, 0x7f, 0xfe, 0x59, 0xe2, 0x00, 0x00, 0x4a, 0x00, 0x78, 0x20, +0x0c, 0x53, 0x11, 0x00, 0x01, 0x01, 0x00, 0x00, 0x74, 0x54, 0x11, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x14, 0x40, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x14, 0x40, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, -0x00, 0x41, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x41, 0x10, 0x00, -0x02, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x41, 0x10, 0x00, 0x80, 0x65, 0x11, 0x00, -0x01, 0x00, 0x00, 0x00, 0x14, 0x66, 0x11, 0x00, 0x68, 0x67, 0x11, 0x00, 0x02, 0x02, 0x00, 0x00, +0x0c, 0x41, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x0c, 0x41, 0x10, 0x00, +0x02, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0c, 0x41, 0x10, 0x00, 0x20, 0x63, 0x11, 0x00, +0x01, 0x00, 0x00, 0x00, 0xb4, 0x63, 0x11, 0x00, 0x08, 0x65, 0x11, 0x00, 0x02, 0x02, 0x00, 0x00, 0x36, 0x0c, 0x00, 0x00, 0x81, 0x94, 0x40, 0xb0, 0x40, 0xc9, 0x00, 0x00, 0x00, 0x00, 0x40, 0xc9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x0d, 0x0d, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -5407,34 +5369,34 @@ UCHAR MT7603_e2_FirmwareImage[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, -0xc0, 0x97, 0x10, 0x00, 0x01, 0x00, 0x00, 0x32, 0x39, 0x00, 0x00, 0x00, 0x70, 0x91, 0x10, 0x00, -0xff, 0x00, 0x00, 0x09, 0x10, 0x00, 0x00, 0x00, 0x68, 0x93, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0xa0, 0x95, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0xa0, 0x95, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x95, 0x10, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x95, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0xf4, 0x95, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0xf4, 0x95, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x95, 0x10, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x95, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0xf4, 0x95, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0xf4, 0x95, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x95, 0x10, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x95, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0xf4, 0x95, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0xf4, 0x95, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x95, 0x10, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x95, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0xf4, 0x95, 0x10, 0x00, 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, -0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x88, 0x8e, 0x00, 0x00, -0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x0f, 0xac, 0x00, 0xaa, 0xaa, 0x03, 0x00, -0x00, 0x00, 0x00, 0x00, 0x88, 0x8e, 0x00, 0x00, 0x00, 0x06, 0x12, 0xfc, 0x1e, 0xf0, 0x2a, 0xe4, -0x01, 0x06, 0x12, 0xfc, 0x1e, 0xf0, 0x2a, 0xe4, 0x06, 0x06, 0x00, 0x00, 0x00, 0xff, 0x01, 0xff, -0x02, 0xff, 0x03, 0xff, 0x04, 0x00, 0x01, 0x00, 0x01, 0x01, 0x02, 0x01, 0x04, 0x00, 0x04, 0x01, -0x01, 0x01, 0x02, 0x01, 0x01, 0x00, 0x04, 0x01, 0x01, 0x01, 0x02, 0x01, 0xff, 0xff, 0xff, 0xff, -0xff, 0xff, 0xff, 0xff, 0x00, 0x12, 0x1f, 0x2b, 0x00, 0xfb, 0xef, 0xe3, 0x05, 0x07, 0x08, 0x0a, -0x0d, 0x10, 0x14, 0x1a, 0x20, 0x28, 0x33, 0x3e, 0x50, 0x66, 0x7c, 0xa0, 0xcc, 0xf8, 0x00, 0x00, -0x07, 0x00, 0x01, 0x01, 0xd0, 0x34, 0x11, 0x00, 0x01, 0x01, 0x00, 0x00, 0xe8, 0x30, 0x11, 0x00, -0x01, 0x01, 0x00, 0x00, 0x6c, 0x2b, 0x11, 0x00, 0x01, 0x01, 0x00, 0x00, 0xf8, 0x2c, 0x11, 0x00, -0x01, 0x01, 0x00, 0x00, 0x38, 0x26, 0x11, 0x00, 0x01, 0x01, 0x00, 0x00, 0xe4, 0x22, 0x11, 0x00, -0x01, 0x01, 0x00, 0x00, 0x28, 0x1e, 0x11, 0x00, 0x01, 0x01, 0x00, 0x00, 0x7c, 0x18, 0x11, 0x00, -0x01, 0x01, 0x00, 0x00, 0x4c, 0x07, 0x11, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x08, 0x14, 0x18, -0x91, 0x7f, 0x4b, 0x38, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x5f, 0x6d, 0x74, 0x37, 0x36, -0x30, 0x33, 0x6d, 0x70, 0x00, 0x32, 0x30, 0x31, 0x35, 0x31, 0x30, 0x32, 0x30, 0x31, 0x35, 0x35, -0x39, 0x30, 0x32, 0x00, 0x80, 0x53, 0x01, 0x00, } ; +0x4c, 0x98, 0x10, 0x00, 0x01, 0x00, 0x00, 0x32, 0x39, 0x00, 0x00, 0x00, 0xfc, 0x91, 0x10, 0x00, +0xff, 0x00, 0x00, 0x09, 0x10, 0x00, 0x00, 0x00, 0xf4, 0x93, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x2c, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x2c, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x96, 0x10, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x80, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x80, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x96, 0x10, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x80, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x80, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x96, 0x10, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x80, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x80, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x96, 0x10, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x80, 0x96, 0x10, 0x00, 0x0a, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0x03, 0x00, +0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, +0x88, 0x8e, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x0f, 0xac, 0x00, +0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8e, 0x00, 0x00, 0x00, 0x06, 0x12, 0xfc, +0x1e, 0xf0, 0x2a, 0xe4, 0x01, 0x06, 0x12, 0xfc, 0x1e, 0xf0, 0x2a, 0xe4, 0x06, 0x06, 0x00, 0x00, +0x00, 0xff, 0x01, 0xff, 0x02, 0xff, 0x03, 0xff, 0x04, 0x00, 0x01, 0x00, 0x01, 0x01, 0x02, 0x01, +0x04, 0x00, 0x04, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x00, 0x04, 0x01, 0x01, 0x01, 0x02, 0x01, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x12, 0x1f, 0x2b, 0x00, 0xfb, 0xef, 0xe3, +0x05, 0x07, 0x08, 0x0a, 0x0d, 0x10, 0x14, 0x1a, 0x20, 0x28, 0x33, 0x3e, 0x50, 0x66, 0x7c, 0xa0, +0xcc, 0xf8, 0x00, 0x00, 0x07, 0x00, 0x01, 0x01, 0x7c, 0x32, 0x11, 0x00, 0x01, 0x01, 0x00, 0x00, +0x40, 0x2f, 0x11, 0x00, 0x01, 0x01, 0x00, 0x00, 0xd4, 0x29, 0x11, 0x00, 0x01, 0x01, 0x00, 0x00, +0x60, 0x2b, 0x11, 0x00, 0x01, 0x01, 0x00, 0x00, 0xa0, 0x24, 0x11, 0x00, 0x01, 0x01, 0x00, 0x00, +0x4c, 0x21, 0x11, 0x00, 0x01, 0x01, 0x00, 0x00, 0x9c, 0x1c, 0x11, 0x00, 0x01, 0x01, 0x00, 0x00, +0xf0, 0x16, 0x11, 0x00, 0x01, 0x01, 0x00, 0x00, 0xf8, 0x06, 0x11, 0x00, 0x01, 0x00, 0x00, 0x00, +0x01, 0x08, 0x14, 0x18, 0x35, 0x5b, 0x17, 0xa2, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x5f, +0x6d, 0x74, 0x37, 0x36, 0x30, 0x33, 0x6d, 0x70, 0x00, 0x32, 0x30, 0x31, 0x37, 0x30, 0x32, 0x31, +0x30, 0x31, 0x38, 0x31, 0x32, 0x34, 0x37, 0x00, 0x24, 0x51, 0x01, 0x00, } ; diff --git a/include/mlme.h b/include/mlme.h index 6f221af..80e44d1 100755 --- a/include/mlme.h +++ b/include/mlme.h @@ -523,7 +523,7 @@ typedef struct GNU_PACKED _NEW_EXT_CHAN_IE{ typedef struct GNU_PACKED _FRAME_802_11 { HEADER_802_11 Hdr; - UCHAR Octet[1]; + UCHAR Octet[]; } FRAME_802_11, *PFRAME_802_11; /* QoSNull embedding of management action. When HT Control MA field set to 1. */ @@ -1364,7 +1364,7 @@ typedef struct _MLME_DLS_REQ_STRUCT { typedef struct GNU_PACKED _EID_STRUCT{ UCHAR Eid; UCHAR Len; - UCHAR Octet[1]; + UCHAR Octet[]; } EID_STRUCT,*PEID_STRUCT, BEACON_EID_STRUCT, *PBEACON_EID_STRUCT; diff --git a/include/oid.h b/include/oid.h index 6d0cddf..d650246 100755 --- a/include/oid.h +++ b/include/oid.h @@ -664,7 +664,7 @@ typedef struct _NDIS_APCLI_802_11_KEY UINT KeyLength; NDIS_802_11_MAC_ADDRESS BSSID; NDIS_802_11_KEY_RSC KeyRSC; - UCHAR KeyMaterial[1]; + UCHAR KeyMaterial[]; } NDIS_APCLI_802_11_KEY, *PNDIS_APCLI_802_11_KEY; #endif/* WPA_SUPPLICANT_SUPPORT */ #endif /* APCLI_SUPPORT */ @@ -677,7 +677,7 @@ typedef struct _NDIS_802_11_KEY { UINT KeyLength; /* length of key in bytes */ NDIS_802_11_MAC_ADDRESS BSSID; NDIS_802_11_KEY_RSC KeyRSC; - UCHAR KeyMaterial[1]; /* variable length depending on above field */ + UCHAR KeyMaterial[]; /* variable length depending on above field */ } NDIS_802_11_KEY, *PNDIS_802_11_KEY; typedef struct _NDIS_802_11_PASSPHRASE { @@ -770,16 +770,7 @@ typedef struct GNU_PACKED _NDIS_WLAN_BSSID_EX { NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode; NDIS_802_11_RATES_EX SupportedRates; ULONG IELength; - UCHAR IEs[1]; - -#ifdef WAC_SUPPORT - /* SAMSUNG DMC */ - CHAR Threshold_Offset1; - CHAR Threshold_Offset2; - UCHAR Antenna_Type; - UCHAR Device_Type; - UCHAR Application_List; -#endif /* WAC_SUPPORT */ + UCHAR IEs[]; } NDIS_WLAN_BSSID_EX, *PNDIS_WLAN_BSSID_EX; typedef struct GNU_PACKED _NDIS_802_11_BSSID_LIST_EX { @@ -920,7 +911,7 @@ typedef struct _NDIS_APCLI_802_11_PMKID { UINT Length; UINT BSSIDInfoCount; - BSSID_INFO BSSIDInfo[1]; + BSSID_INFO BSSIDInfo[]; } NDIS_APCLI_802_11_PMKID, *PNDIS_APCLI_802_11_PMKID; #endif/*WPA_SUPPLICANT_SUPPORT*/ #endif /* APCLI_SUPPORT */ diff --git a/include/os/rt_drv.h b/include/os/rt_drv.h index 0ea68a4..c4b82a3 100755 --- a/include/os/rt_drv.h +++ b/include/os/rt_drv.h @@ -89,7 +89,7 @@ typedef VOID pregs; #define CARD_INFO_PATH "/etc/Wireless/RT2870AP/RT2870APCard.dat" #endif /* MULTIPLE_CARD_SUPPORT */ -#define STA_PROFILE_PATH "/system/etc/wifi/RT2870STA_7603.dat " +#define STA_PROFILE_PATH "/etc/Wireless/RT2870STA/MT7603USTA.dat" #endif /* RTMP_MAC_USB */ @@ -106,7 +106,7 @@ typedef VOID pregs; #ifdef CONFIG_STA_SUPPORT #ifdef RTMP_MAC_PCI -#define STA_PROFILE_PATH "/system/etc/wifi/RT2870STA_7603.dat" +#define STA_PROFILE_PATH "/etc/Wireless/RT2860STA/RT2860STA.dat" #define STA_DRIVER_VERSION "3.0.0.0" #ifdef MULTIPLE_CARD_SUPPORT #define CARD_INFO_PATH "/etc/Wireless/RT2860STA/RT2860STACard.dat" @@ -116,9 +116,9 @@ typedef VOID pregs; #ifdef RTMP_MAC_USB #ifdef HE_BD_CFG80211_SUPPORT -#define STA_PROFILE_PATH "/system/etc/wifi/RT2870STA_7603.dat" +#define STA_PROFILE_PATH "/etc/Wireless/RT2870STA/RT2870STA_MT7603U.dat" #else -#define STA_PROFILE_PATH "/system/etc/wifi/RT2870STA_7603.dat" +#define STA_PROFILE_PATH "/etc/Wireless/RT2870STA/RT2870STA.dat" #endif /* HE_BD_CFG80211_SUPPORT */ #define STA_DRIVER_VERSION "3.0.0.0" diff --git a/include/os/rt_linux.h b/include/os/rt_linux.h index 9ddc4ea..321c782 100755 --- a/include/os/rt_linux.h +++ b/include/os/rt_linux.h @@ -192,16 +192,12 @@ typedef struct usb_ctrlrequest devctrlrequest; #define RT2880_AP_DRIVER_VERSION "1.0.0.0" #endif /* RTMP_RBUS_SUPPORT */ -#ifdef SINGLE_SKU_V2 -#define SINGLE_SKU_TABLE_FILE_NAME "/etc/Wireless/RT2860AP/SingleSKU.dat" -#endif /* SINGLE_SKU_V2 */ - #endif /* CONFIG_AP_SUPPORT */ #ifdef CONFIG_STA_SUPPORT #ifdef RTMP_MAC_PCI -#define STA_PROFILE_PATH "/system/etc/wifi/RT2870STA_7603.dat" +#define STA_PROFILE_PATH "/vendor/etc/wifi/RT2870STA_7603.dat" #define STA_DRIVER_VERSION "3.0.0.0" #ifdef MULTIPLE_CARD_SUPPORT #define CARD_INFO_PATH "/etc/Wireless/RT2860STA/RT2860STACard.dat" @@ -210,15 +206,15 @@ typedef struct usb_ctrlrequest devctrlrequest; #ifdef RTMP_MAC_USB #ifdef HE_BD_CFG80211_SUPPORT -#define STA_PROFILE_PATH "/system/etc/wifi/RT2870STA_7603.dat" +#define STA_PROFILE_PATH "/vendor/etc/wifi/RT2870STA_7603.dat" #else #ifdef USE_CHIP_DEPENDENT_PROFILE_NAME -#define STA_PROFILE_PATH "/system/etc/wifi/RT2870STA_7603.dat" +#define STA_PROFILE_PATH "/vendor/etc/wifi/RT2870STA_7603.dat" #else -#define STA_PROFILE_PATH "/system/etc/wifi/RT2870STA_7603.dat" +#define STA_PROFILE_PATH "/vendor/etc/wifi/RT2870STA_7603.dat" #endif /* USE_CHIP_DEPENDENT_PROFILE_NAME */ #endif /* HE_BD_CFG80211_SUPPORT */ -#define STA_DRIVER_VERSION "JEDI.L0.MP1.mt7603u.v1.8" +#define STA_DRIVER_VERSION "JEDI.L0.MP1.mt7603u.v1.14" #ifdef MULTIPLE_CARD_SUPPORT #define CARD_INFO_PATH "/etc/Wireless/RT2870STA/RT2870STACard.dat" #endif /* MULTIPLE_CARD_SUPPORT */ @@ -227,7 +223,7 @@ typedef struct usb_ctrlrequest devctrlrequest; #ifdef RTMP_MAC_SDIO -#define STA_PROFILE_PATH "/system/etc/wifi/RT2870STA_7603.dat" +#define STA_PROFILE_PATH "/vendor/etc/wifi/RT2870STA_7603.dat" #define STA_DRIVER_VERSION "3.0.0.0" #ifdef MULTIPLE_CARD_SUPPORT #define CARD_INFO_PATH "/etc/Wireless/RT2870STA/RT2870STACard.dat" @@ -244,12 +240,12 @@ typedef struct usb_ctrlrequest devctrlrequest; extern const struct iw_handler_def rt28xx_iw_handler_def; +#endif /* CONFIG_STA_SUPPORT */ + #ifdef SINGLE_SKU_V2 #define SINGLE_SKU_TABLE_FILE_NAME "/etc/Wireless/RT2870STA/SingleSKU.dat" #endif /* SINGLE_SKU_V2 */ -#endif /* CONFIG_STA_SUPPORT */ - #ifdef CONFIG_APSTA_MIXED_SUPPORT extern const struct iw_handler_def rt28xx_ap_iw_handler_def; #endif /* CONFIG_APSTA_MIXED_SUPPORT */ @@ -860,13 +856,13 @@ do{ \ #define DBGPRINT_ERR(Fmt) \ { \ - printk("ERROR!!! "); \ - printk Fmt; \ + DBGPRINT(RT_DEBUG_ERROR, ("ERROR!!! "));\ + DBGPRINT(RT_DEBUG_ERROR, Fmt);\ } #define DBGPRINT_S(Fmt) \ { \ - printk Fmt; \ + DBGPRINT(RT_DEBUG_OFF, Fmt); \ } #else #define DBGPRINT(Level, Fmt) @@ -881,14 +877,14 @@ do{ \ { \ if (!(x)) \ { \ - printk(KERN_WARNING __FILE__ ":%d assert " #x "failed\n", __LINE__); \ + DBGPRINT(RT_DEBUG_OFF, ("%s:%d assert " #x "failed\n", __FILE__, __LINE__));\ } \ } #else #define ASSERT(x) #endif /* DBG */ -void hex_dump(char *str, unsigned char *pSrcBufVA, unsigned int SrcBufLen); +void hex_dump(char *str, const unsigned char *pSrcBufVA, unsigned int SrcBufLen); /********************************************************************************************************* @@ -1792,6 +1788,7 @@ USBHST_STATUS RTUSBBulkOutBCNPacketComplete(URBCompleteStatus Status, purbb_t pU #define RTUSB_URB_DMA_MAPPING(pUrb) #endif + #define RTUSB_CONTROL_MSG(pUsb_Dev, uEndpointAddress, Request, RequestType, Value,Index, tmpBuf, TransferBufferLength, timeout, ret) \ do{ \ if ((RequestType == DEVICE_VENDOR_REQUEST_OUT) || (RequestType == DEVICE_CLASS_REQUEST_OUT)) \ @@ -1803,7 +1800,8 @@ USBHST_STATUS RTUSBBulkOutBCNPacketComplete(URBCompleteStatus Status, purbb_t pU DBGPRINT(RT_DEBUG_ERROR, ("vendor request direction is failed\n")); \ ret = -1; \ } \ - }while(0) + }while(0) + #define rtusb_urb_context context #define rtusb_urb_status status diff --git a/include/phy/phy.h b/include/phy/phy.h index ddc3720..b07bd28 100755 --- a/include/phy/phy.h +++ b/include/phy/phy.h @@ -201,7 +201,7 @@ typedef struct _RSSI_SAMPLE { CHAR LastSnr[3]; CHAR AvgSnr[3]; SHORT AvgSnrX8[3]; - //CHAR LastNoiseLevel[3]; + CHAR LastNoiseLevel[3]; } RSSI_SAMPLE; #endif diff --git a/include/rt_os_net.h b/include/rt_os_net.h index 3cd57f1..fb58ab7 100755 --- a/include/rt_os_net.h +++ b/include/rt_os_net.h @@ -308,7 +308,10 @@ VOID RTMP_CFG80211_DummyP2pIf_Init( VOID RTMP_CFG80211_DummyP2pIf_Remove( IN VOID *pAdSrc); - +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)) +extern const struct ieee80211_iface_combination *p_ra_iface_combinations_ap_sta; +extern const INT ra_iface_combinations_ap_sta_num; +#endif BOOLEAN RTMP_CFG80211_VIF_ON( IN VOID *pAdSrc); @@ -347,7 +350,8 @@ VOID RTMP_CFG80211_VirtualIF_Init( VOID RTMP_CFG80211_VirtualIF_Remove( IN VOID *pAd, IN PNET_DEV dev_p, - IN UINT32 DevType); + IN UINT32 DevType, + BOOLEAN rtnl_lock); VOID RTMP_CFG80211_AllVirtualIF_Remove( IN VOID *pAdSrc); @@ -429,7 +433,7 @@ INT rt_android_private_command_entry( #define RTMP_DRIVER_ADAPTER_RT28XX_WOW_DISABLE(__pAd) \ RTMP_COM_IoctlHandle(__pAd, NULL, CMD_RTPRIV_IOCTL_ADAPTER_RT28XX_WOW_DISABLE, 0, NULL, 0) -#endif /* (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(NEW_WOW_SUPPORT) */ +#endif /* (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(MT_WOW_SUPPORT) */ #endif /* CONFIG_PM */ @@ -626,8 +630,11 @@ INT rt_android_private_command_entry( RTMP_COM_IoctlHandle(__pAd, NULL, CMD_RTPRIV_IOCTL_80211_CHANNEL_LOCK, 0, NULL , __Chan) #define RTMP_DRIVER_80211_MGMT_FRAME_REG(__pAd, __devPtr, __Reg) \ - RTMP_COM_IoctlHandle(__pAd, NULL, CMD_RTPRIV_IOCTL_80211_MGMT_FRAME_REG, 0, __devPtr, __Reg) - + RTMP_COM_IoctlHandle(__pAd, NULL, CMD_RTPRIV_IOCTL_80211_MGMT_FRAME_REG, 0, __devPtr, __Reg) + +#define RTMP_DRIVER_80211_TX_NETDEV_SET(__pAd, __netdev) \ + RTMP_COM_IoctlHandle(__pAd, NULL, CMD_RTPRIV_IOCTL_80211_TX_NETDEV_SET, 0, __netdev, 0) + #define RTMP_DRIVER_80211_MGMT_FRAME_SEND(__pAd, __pFrame, __Len) \ RTMP_COM_IoctlHandle(__pAd, NULL, CMD_RTPRIV_IOCTL_80211_MGMT_FRAME_SEND, 0, __pFrame, __Len) diff --git a/include/rt_os_util.h b/include/rt_os_util.h index 18fb8f8..60ea6d2 100755 --- a/include/rt_os_util.h +++ b/include/rt_os_util.h @@ -266,6 +266,7 @@ void RtmpOSNetDeviceRefPut(PNET_DEV pNetDev); INT RtmpOSNetDevDestory(VOID *pReserved, PNET_DEV pNetDev); void RtmpOSNetDevDetach(PNET_DEV pNetDev); +void RtmpOSNetDevDetach_WithoutLock(PNET_DEV pNetDev); int RtmpOSNetDevAttach( IN UCHAR OpMode, IN PNET_DEV pNetDev, @@ -451,7 +452,7 @@ VOID RtmpOsAtomicDec(RTMP_OS_ATOMIC *pAtomic); VOID RtmpOsAtomicInterlockedExchange(RTMP_OS_ATOMIC *pAtomicSrc, LONG Value); /* OS Utility */ -void hex_dump(char *str, unsigned char *pSrcBufVA, unsigned int SrcBufLen); +void hex_dump(char *str, const unsigned char *pSrcBufVA, unsigned int SrcBufLen); typedef VOID (*RTMP_OS_SEND_WLAN_EVENT)( IN VOID *pAdSrc, @@ -865,7 +866,7 @@ VOID CFG80211OS_InformBSS( IN UINT16 beacon_interval, IN UCHAR *pBeacon, IN UINT32 BeaconLen); -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 18 ,0)) +#if (KERNEL_VERSION(3, 15, 0) <= LINUX_VERSION_CODE) VOID CFG80211OS_JoinIBSS(IN PNET_DEV pNetDev, IN const PUCHAR pBssid, IN struct ieee80211_channel *channel); #else VOID CFG80211OS_JoinIBSS(IN PNET_DEV pNetDev, IN const PUCHAR pBssid); diff --git a/include/rtmp.h b/include/rtmp.h index 50b17a0..7fb9bb8 100755 --- a/include/rtmp.h +++ b/include/rtmp.h @@ -885,6 +885,8 @@ typedef struct _COUNTER_RALINK { UINT32 OneSecStart; /* for one sec count clear use */ UINT32 OneSecBeaconSentCnt; UINT32 OneSecFalseCCACnt; /* CCA error count, for debug purpose, might move to global counter */ + UINT32 OneSecCCKFalseCCACnt; + UINT32 OneSecOFDMFalseCCACnt; UINT32 OneSecRxFcsErrCnt; /* CRC error */ UINT32 OneSecRxOkCnt; /* RX without error */ UINT32 OneSecTxFailCount; @@ -4555,6 +4557,7 @@ typedef struct _APCLI_STRUCT { UCHAR LastSsidLen; /* the actual ssid length in used */ CHAR LastSsid[MAX_LEN_OF_SSID]; /* NOT NULL-terminated */ UCHAR LastBssid[MAC_ADDR_LEN]; + UINT16 LastDeauthReason; #endif /* WPA_SUPPLICANT_SUPPORT */ @@ -5182,6 +5185,7 @@ typedef struct _WOW_CFG_STRUCT { BOOLEAN bWoWRunning; /* WOW function is working */ UINT8 nWakeupInterface; /* PCI:0 USB:1 GPIO:2 */ UINT8 bGPIOHighLow; /* 0: low to high, 1: high to low */ + UINT8 nKeepAlivePeriod; /* 0:NOT configured, 1~15:wow keep alive */ #ifdef RT_CFG80211_SUPPORT UCHAR PTK[LEN_PTK]; /* Store the PTK for rekey */ UCHAR ReplayCounter[LEN_KEY_DESC_REPLAY]; /* Store the replay counter for rekey */ @@ -5261,7 +5265,7 @@ typedef struct _NEW_WOW_PARAM_STRUCT { UINT32 Parameter; UINT32 Value; } NEW_WOW_PARAM_STRUCT, *PNEW_WOW_PARAM_STRUCT; -#endif /* (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(NEW_WOW_SUPPORT) || defined(MT_WOW_SUPPORT) */ +#endif /* (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(MT_WOW_SUPPORT) */ /* Packet drop reason code @@ -5676,6 +5680,7 @@ typedef struct _CFG80211_CONTROL BOOLEAN IsNeedTxStatus; BOOLEAN TxSAcked; RTMP_OS_COMPLETION fw_event_done; + PNET_DEV TxNdev; LIST_HEADER cfg80211TxPacketList; /* P2P Releated*/ @@ -5871,6 +5876,31 @@ typedef struct _TX_CTRL_T { } TX_CTRL_T, *P_TX_CTRL_T; #endif +#ifdef SMART_CARRIER_SENSE_SUPPORT +typedef struct _SMART_CARRIER_SENSE_CTRL{ + BOOLEAN SCSEnable; /* 0:Disable, 1:Enable */ + UINT8 SCSStatus; /* 0: Normal, 1:Low_gain */ + CHAR SCSMinRssi; + UINT32 CR_AGC_0_default; + UINT32 CR_AGC_3_default; + UINT8 EDCCA_Status; + UINT32 PdCount; + UINT32 MdrdyCount; + UINT32 FalseCCA; + CHAR CurrSensitivity; + CHAR AdjustSensitivity; + UINT32 RtsCount; + UINT32 RtsRtyCount; + CHAR RSSIBoundary; + UINT8 SCSMinRssiTolerance; + UINT32 SCSTrafficThreshold; + UINT16 FalseCcaUpBond; + UINT16 FalseCcaLowBond; + CHAR FixedRssiBond; + BOOLEAN ForceMode; /*This mode only consider False CCA not care RTS PER.*/ + +} SMART_CARRIER_SENSE_CTRL; +#endif /* SMART_CARRIER_SENSE_SUPPORT */ /* The miniport adapter structure */ @@ -6314,8 +6344,9 @@ struct _RTMP_ADAPTER { #endif /* RT6352 */ #ifdef THERMAL_PROTECT_SUPPORT - BOOLEAN force_one_tx_stream; - BOOLEAN fgThermalProtectToggle; + BOOLEAN switch_tx_stream; /* determine switch action */ + BOOLEAN force_one_tx_stream; /* for rate adaptation */ + BOOLEAN fgThermalProtectToggle; INT32 last_thermal_pro_temp; INT32 thermal_pro_high_criteria; BOOLEAN thermal_pro_high_en; @@ -6935,9 +6966,9 @@ MONITOR_STRUCT monitor_ctrl; #if (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(MT_WOW_SUPPORT) WOW_CFG_STRUCT WOW_Cfg; /* data structure for wake on wireless */ -#endif /* (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(NEW_WOW_SUPPORT) || defined(MT_WOW_SUPPORT) */ +#endif /* (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(MT_WOW_SUPPORT) */ - TXWI_STRUC NullTxWI; + TMAC_TXD_L NullTxWI; USHORT NullBufOffset[2]; #ifdef MULTI_MAC_ADDR_EXT_SUPPORT @@ -7091,7 +7122,10 @@ MONITOR_STRUCT monitor_ctrl; #ifdef USB_IOT_WORKAROUND2 BOOLEAN bUSBIOTReady; #endif - +#ifdef SMART_CARRIER_SENSE_SUPPORT + SMART_CARRIER_SENSE_CTRL SCSCtrl; +#endif /* SMART_CARRIER_SENSE_SUPPORT */ + BOOLEAN bLink11b; }; #if defined(RTMP_INTERNAL_TX_ALC) || defined(RTMP_TEMPERATURE_COMPENSATION) @@ -8020,6 +8054,7 @@ INT hif_sys_exit(RTMP_ADAPTER *pAd); VOID NICResetFromError(RTMP_ADAPTER *pAd); +VOID NicUpdatFalseCCACounters(RTMP_ADAPTER *pAd); VOID RTMPRingCleanUp( @@ -9918,12 +9953,22 @@ BOOLEAN RTMPCheckVht( VOID RTMPUpdateMlmeRate( IN RTMP_ADAPTER *pAd); +CHAR RTMPMaxNoise( + IN RTMP_ADAPTER * pAd, + IN CHAR Noise0, + IN CHAR Noise1, + IN CHAR Noise2); + CHAR RTMPMaxRssi( IN RTMP_ADAPTER *pAd, IN CHAR Rssi0, IN CHAR Rssi1, IN CHAR Rssi2); - +CHAR RTMPMinRssi( + IN RTMP_ADAPTER *pAd, + IN CHAR Rssi0, + IN CHAR Rssi1, + IN CHAR Rssi2); CHAR RTMPAvgRssi( IN RTMP_ADAPTER *pAd, IN RSSI_SAMPLE *pRssi); @@ -11858,8 +11903,8 @@ VOID Update_Rssi_Sample( IN RTMP_ADAPTER *pAd, IN RSSI_SAMPLE *pRssi, IN struct rx_signal_info *signal, - IN UCHAR phymode, - IN UCHAR bw); + IN USHORT phymode, + IN USHORT bw); PNDIS_PACKET GetPacketFromRxRing( RTMP_ADAPTER *pAd, @@ -12059,22 +12104,12 @@ INT Set_TSSIMaxRange_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg); #endif /* defined(RT3352) || defined(RT5350) */ #endif /* RT305x */ -#ifdef NEW_WOW_SUPPORT -VOID RT28xxAndesWOWEnable(RTMP_ADAPTER *pAd); -VOID RT28xxAndesWOWDisable(RTMP_ADAPTER *pAd); -#endif /* NEW_WOW_SUPPORT */ - #ifdef MT_WOW_SUPPORT VOID MT76xxAndesWOWEnable(RTMP_ADAPTER *pAd); VOID MT76xxAndesWOWDisable(RTMP_ADAPTER *pAd); VOID MT76xxAndesWOWInit(RTMP_ADAPTER *pAd); #endif -#if (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(NEW_WOW_SUPPORT) -VOID RT28xxAsicWOWEnable(RTMP_ADAPTER *pAd); -VOID RT28xxAsicWOWDisable(RTMP_ADAPTER *pAd); -#endif /* (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(NEW_WOW_SUPPORT) */ - /*////////////////////////////////////*/ @@ -12563,7 +12598,7 @@ VOID dump_tr_entry(RTMP_ADAPTER *pAd, INT tr_idx, RTMP_STRING *caller, INT line) VOID mgmt_tb_set_mcast_entry(RTMP_ADAPTER *pAd, UCHAR wcid); VOID set_entry_phy_cfg(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY *pEntry); VOID MacTableReset(RTMP_ADAPTER *pAd, INT startWcid); -MAC_TABLE_ENTRY *MacTableLookup(RTMP_ADAPTER *pAd, UCHAR *pAddr); +MAC_TABLE_ENTRY *MacTableLookup(RTMP_ADAPTER *pAd, const UCHAR *pAddr); BOOLEAN MacTableDeleteEntry(RTMP_ADAPTER *pAd, USHORT wcid, UCHAR *pAddr); MAC_TABLE_ENTRY *MacTableInsertEntry( IN RTMP_ADAPTER *pAd, @@ -12766,6 +12801,12 @@ BOOLEAN Monitor_Open(RTMP_ADAPTER *pAd, PNET_DEV dev_p); BOOLEAN Monitor_Close(RTMP_ADAPTER *pAd, PNET_DEV dev_p); #endif /* CONFIG_SNIFFER_SUPPORT */ +#ifdef SMART_CARRIER_SENSE_SUPPORT +INT SetSCSEnable_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg); +INT SetSCSDbgLogEnable_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg); +INT SetSCSCfg_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg); +INT32 ShowSCSInfo(RTMP_ADAPTER *pAd, RTMP_STRING *Arg); +#endif /* SMART_CARRIER_SENSE_SUPPORT */ #endif /* __RTMP_H__ */ diff --git a/include/rtmp_chip.h b/include/rtmp_chip.h index 5523173..439d55a 100755 --- a/include/rtmp_chip.h +++ b/include/rtmp_chip.h @@ -1564,7 +1564,7 @@ struct _RTMP_CHIP_OP { VOID (*AsicWOWEnable)(struct _RTMP_ADAPTER *ad); VOID (*AsicWOWDisable)(struct _RTMP_ADAPTER *ad); VOID (*AsicWOWInit)(struct _RTMP_ADAPTER *ad); -#endif /* (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(NEW_WOW_SUPPORT) || defined(MT_WOW_SUPPORT) */ +#endif /* (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(MT_WOW_SUPPORT) */ void (*usb_cfg_read)(struct _RTMP_ADAPTER *ad, UINT32 *value); void (*usb_cfg_write)(struct _RTMP_ADAPTER *ad, UINT32 value); @@ -1908,7 +1908,7 @@ do { \ _pAd->chipOps.AsicWOWInit(_pAd); \ } while(0) -#endif /* (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(NEW_WOW_SUPPORT) || defined(MT_WOW_SUPPORT) */ +#endif /* (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(MT_WOW_SUPPORT) */ #define MCU_CTRL_INIT(_pAd) \ do { \ diff --git a/include/rtmp_cmd.h b/include/rtmp_cmd.h index 3476d24..4f115e4 100755 --- a/include/rtmp_cmd.h +++ b/include/rtmp_cmd.h @@ -266,7 +266,7 @@ typedef enum _CMD_RTPRIV_IOCTL_COMMON { CMD_RTPRIV_IOCTL_ADAPTER_RT28XX_WOW_STATUS, CMD_RTPRIV_IOCTL_ADAPTER_RT28XX_WOW_ENABLE, CMD_RTPRIV_IOCTL_ADAPTER_RT28XX_WOW_DISABLE, -#endif /* (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(NEW_WOW_SUPPORT) */ +#endif /* (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(MT_WOW_SUPPORT) */ CMD_RTPRIV_IOCTL_AP_BSSID_GET, #endif /* CONFIG_STA_SUPPORT */ @@ -381,6 +381,7 @@ typedef enum _CMD_RTPRIV_IOCTL_COMMON { CMD_RTPRIV_IOCTL_80211_REMAIN_ON_CHAN_SET, CMD_RTPRIV_IOCTL_80211_MGMT_FRAME_REG, CMD_RTPRIV_IOCTL_80211_CHANNEL_LOCK, + CMD_RTPRIV_IOCTL_80211_TX_NETDEV_SET, CMD_RTPRIV_IOCTL_80211_MGMT_FRAME_SEND, CMD_RTPRIV_IOCTL_80211_CHANNEL_LIST_SET, CMD_RTPRIV_IOCTL_80211_ACTION_FRAME_REG, @@ -588,11 +589,11 @@ typedef struct __CMD_RTPRIV_IOCTL_80211_CONNECT { UINT32 KeyLen; UINT8 KeyIdx; - UINT8 *pSsid; + const UINT8 *pSsid; UINT32 SsidLen; - UINT8 *pBssid; - + const UINT8 *pBssid; + BOOLEAN bWpsConnection; PNET_DEV pNetDev; #ifdef DOT11W_PMF_SUPPORT @@ -602,7 +603,7 @@ typedef struct __CMD_RTPRIV_IOCTL_80211_CONNECT { typedef struct __CMD_RTPRIV_IOCTL_80211_ASSOC_IE { PNET_DEV pNetDev; - UINT8 *ie; + const UINT8 *ie; UINT32 ie_len; } CMD_RTPRIV_IOCTL_80211_ASSOC_IE; @@ -988,7 +989,7 @@ typedef struct __RT_CMD_STA_IOCTL_PMA_SA { #define RT_CMD_STA_IOCTL_PMA_SA_ADD 0x03 UINT32 Cmd; UCHAR *pBssid; - UCHAR *pPmkid; + const UCHAR *pPmkid; } RT_CMD_STA_IOCTL_PMA_SA; typedef struct __RT_CMD_USB_INIT { diff --git a/include/rtmp_comm.h b/include/rtmp_comm.h index 1f67dfe..04fcef2 100755 --- a/include/rtmp_comm.h +++ b/include/rtmp_comm.h @@ -338,7 +338,11 @@ typedef enum _RTMP_INF_TYPE_ #define RT_CONFIG_IF_OPMODE_ON_STA(__OpMode) #endif - +#ifdef THERMAL_PROTECT_SUPPORT +#define BOOL_IS_THERMAL_PROTECTION_SWITCH_TX(_pAd) (_pAd->switch_tx_stream) +#else +#define BOOL_IS_THERMAL_PROTECTION_SWITCH_TX(_pAd) FALSE +#endif /*********************************************************************************** * IOCTL related definitions and data structures. diff --git a/include/rtmp_def.h b/include/rtmp_def.h index 903f239..1890339 100755 --- a/include/rtmp_def.h +++ b/include/rtmp_def.h @@ -651,6 +651,7 @@ enum WIFI_MODE{ #define MAX_AVAILABLE_CLIENT_WCID(__pAd) (LAST_SPECIFIC_WCID(__pAd) - MAX_MBSSID_NUM(__pAd)) #else #define LAST_SPECIFIC_WCID(__pAd) (HW_RESERVED_WCID(__pAd) - 2) + /* If MAX_MBSSID_NUM is 8, the maximum available wcid for the associated STA is 211. */ /* If MAX_MBSSID_NUM is 7, the maximum available wcid for the associated STA is 228. */ #define MAX_AVAILABLE_CLIENT_WCID(__pAd) (LAST_SPECIFIC_WCID(__pAd) - MAX_MBSSID_NUM(__pAd) - 1) @@ -2014,7 +2015,7 @@ enum WIFI_MODE{ #define DEFAULT_RF_TX_POWER 5 #define DEFAULT_BBP_TX_FINE_POWER_CTRL 0 -#define MAX_INI_BUFFER_SIZE 4096 +#define MAX_INI_BUFFER_SIZE 10000 /*4096*/ #define MAX_PARAM_BUFFER_SIZE (2048) /* enough for ACL (18*64) */ /*18 : the length of Mac address acceptable format "01:02:03:04:05:06;") */ /*64 : MAX_NUM_OF_ACL_LIST */ @@ -2496,6 +2497,26 @@ enum { #define I_PSM_DISABLE 0 #endif /* MT_PS */ +#ifdef SMART_CARRIER_SENSE_SUPPORT +enum { + SCS_DISABLE, + SCS_ENABLE, +}; + +enum { + SCS_STATUS_DEFAULT, + SCS_STATUS_MIDDLE, + SCS_STATUS_LOW, + SCS_STATUS_ULTRA_LOW, +}; + +enum { + Keep_Range, + Decrease_Range, + Increase_Range +}; +#endif /* SMART_CARRIER_SENSE_SUPPORT */ + #define ABS(_x, _y) ((_x) > (_y)) ? ((_x) -(_y)) : ((_y) -(_x)) #define A2Dec(_X, _p) \ diff --git a/include/sta_cfg.h b/include/sta_cfg.h index 8ff4766..e41f91b 100755 --- a/include/sta_cfg.h +++ b/include/sta_cfg.h @@ -35,6 +35,9 @@ INT RTMPSTAPrivIoctlSet( IN RTMP_STRING *SetProcName, IN RTMP_STRING *ProcArg); +INT Set_GPIOHigh_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg); +INT Set_GPIOLow_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg); + #if (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(MT_WOW_SUPPORT) /* set WOW enable */ INT Set_WOW_Enable(RTMP_ADAPTER *pAd, RTMP_STRING *arg); @@ -50,8 +53,9 @@ INT Set_WOW_InBand(RTMP_ADAPTER *pAd, RTMP_STRING *arg); INT Set_WOW_Interface(RTMP_ADAPTER *pAd, RTMP_STRING *arg); /* set wakeup GPIO High Low */ INT Set_WOW_GPIOHighLow(RTMP_ADAPTER *pAd, RTMP_STRING *arg); +INT Set_WOW_KeepAlive_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg); -#endif /* (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(NEW_WOW_SUPPORT) || defined(MT_WOW_SUPPORT)*/ +#endif /* (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(MT_WOW_SUPPORT)*/ #ifdef RTMP_MAC_USB INT Set_UsbSuspend(RTMP_ADAPTER *pAd, RTMP_STRING *arg); diff --git a/include/wfa_p2p.h b/include/wfa_p2p.h index 996b4cf..11bd4fc 100755 --- a/include/wfa_p2p.h +++ b/include/wfa_p2p.h @@ -61,7 +61,7 @@ typedef struct _P2P_ACTION_FRAME { UCHAR OUIType; UCHAR Subtype; UCHAR Token; - UCHAR Octet[1]; + UCHAR Octet[]; } P2P_ACTION_FRAME, *PP2P_ACTION_FRAME; typedef struct _FRAME_P2P_ACTION { diff --git a/include/wpa.h b/include/wpa.h index cb6581e..240eecd 100755 --- a/include/wpa.h +++ b/include/wpa.h @@ -34,21 +34,21 @@ (((ULONG)((__x)+((__y)-1))) & ((ULONG)~((__y)-1))) #endif -#define SET_UINT16_TO_ARRARY(_V, _LEN) \ -{ \ - _V[0] = ((UINT16)_LEN) >> 8; \ - _V[1] = ((UINT16)_LEN & 0xFF); \ +#define SET_UINT16_TO_ARRARY(_V, _LEN) \ +{\ + _V[0] = (UINT8)(((UINT16)(_LEN)) >> 8); \ + _V[1] = (UINT8)(((UINT16)(_LEN)) & 0xFF); \ } -#define INC_UINT16_TO_ARRARY(_V, _LEN) \ -{ \ - UINT16 var_len; \ - \ - var_len = (_V[0]<<8) | (_V[1]); \ - var_len += _LEN; \ - \ - _V[0] = (var_len & 0xFF00) >> 8; \ - _V[1] = (var_len & 0xFF); \ +#define INC_UINT16_TO_ARRARY(_V, _LEN) \ +{ \ + UINT16 var_len; \ + \ + var_len = (UINT16)(((_V[0])<<8) | (_V[1])); \ + var_len += (UINT16)(_LEN); \ + \ + _V[0] = (UINT8)((var_len & 0xFF00) >> 8); \ + _V[1] = (UINT8)(var_len & 0xFF); \ } #define CONV_ARRARY_TO_UINT16(_V) ((_V[0]<<8) | (_V[1])) diff --git a/mac/mt_mac.c b/mac/mt_mac.c index 358d53f..a31e371 100755 --- a/mac/mt_mac.c +++ b/mac/mt_mac.c @@ -87,9 +87,9 @@ VOID dump_tmac_info(RTMP_ADAPTER *pAd, UCHAR *tmac_info) DBGPRINT(RT_DEBUG_OFF, ("\t\tPortID=%d(%s)\n", txd_0->p_idx, txd_0->p_idx < 2 ? p_idx_str[txd_0->p_idx] : "Invalid")); if (txd_0->p_idx == P_IDX_LMAC) - q_idx = txd_0->q_idx % 0xf; + q_idx = (UCHAR)(txd_0->q_idx % 0xf); else - q_idx = txd_0->q_idx % 0x5; + q_idx = (UCHAR)(txd_0->q_idx % 0x5); DBGPRINT(RT_DEBUG_OFF, ("\t\tQueID=%d(%s %s)\n", txd_0->q_idx, (txd_0->p_idx == P_IDX_LMAC ? "LMAC" : "MCU"), txd_0->p_idx == P_IDX_LMAC ? q_idx_lmac_str[q_idx] : q_idx_mcu_str[q_idx])); @@ -378,6 +378,48 @@ VOID NicGetTxRawCounters( return; } +VOID NicUpdatFalseCCACounters(RTMP_ADAPTER *pAd) +{ + UINT32 OFDM_PD_Cnt, CCK_PD_Cnt, OFDM_MDRDY_Cnt, CCK_MDRDY_Cnt; + UINT32 PDCnt = 0; + UINT32 MDRDYCnt = 0; + UINT32 value, CCAcount = 0; + + /* update one sec falseCCA (PD CNT - MDRDY CNT) */ + RTMP_IO_READ32(pAd, RO_PHYCTRL_STS0, &PDCnt); + OFDM_PD_Cnt = (PDCnt >> 16); + CCK_PD_Cnt = (PDCnt & 0xFFFF); + RTMP_IO_READ32(pAd, RO_PHYCTRL_STS5, &MDRDYCnt); + OFDM_MDRDY_Cnt = (MDRDYCnt >> 16); + CCK_MDRDY_Cnt = (MDRDYCnt & 0xFFFF); + CCAcount = ((OFDM_PD_Cnt - OFDM_MDRDY_Cnt) + (CCK_PD_Cnt - CCK_MDRDY_Cnt)); + RTMP_IO_READ32(pAd, CR_PHYCTRL_2, &value); + value |= (1<<6); /* BIT6: CR_STSCNT_RST */ + RTMP_IO_WRITE32(pAd, CR_PHYCTRL_2, value); + value &= (~(1<<6)); + RTMP_IO_WRITE32(pAd, CR_PHYCTRL_2, value); + value |= (1<<7); /* BIT7: CR_STSCNT_EN */ + RTMP_IO_WRITE32(pAd, CR_PHYCTRL_2, value); + + /*DBGPRINT(RT_DEBUG_WARN, ("one-sec FalseCCACnt %d (CCK %d + OFDM %d)\n" + * ,CCAcount,(CCK_PD_CNT - CCK_MDRDY_CNT),(OFDM_PD_CNT - OFDM_MDRDY_CNT))); + */ + + pAd->RalinkCounters.OneSecFalseCCACnt = CCAcount; + pAd->RalinkCounters.OneSecCCKFalseCCACnt = (CCK_PD_Cnt - CCK_MDRDY_Cnt); + pAd->RalinkCounters.OneSecOFDMFalseCCACnt = (OFDM_PD_Cnt - OFDM_MDRDY_Cnt); + pAd->RalinkCounters.FalseCCACnt = CCAcount; + +#ifdef SMART_CARRIER_SENSE_SUPPORT + pAd->SCSCtrl.PdCount = PDCnt; + pAd->SCSCtrl.MdrdyCount = MDRDYCnt; + DBGPRINT(RT_DEBUG_TRACE, ("False CCA (one second) = %ld (CCK %d + OFDM %d)\n", + (ULONG)pAd->RalinkCounters.OneSecFalseCCACnt, + pAd->RalinkCounters.OneSecCCKFalseCCACnt, + pAd->RalinkCounters.OneSecOFDMFalseCCACnt)); + pAd->SCSCtrl.FalseCCA = pAd->RalinkCounters.FalseCCACnt; +#endif /* SMART_CARRIER_SENSE_SUPPORT */ +} /* ======================================================================== @@ -586,7 +628,37 @@ NTSTATUS MtCmdNICUpdateRawCounters(RTMP_ADAPTER *pAd, PCmdQElmt CMDQelmt) } } #endif /* DBG_DIAGNOSE */ - +#if 0 + /* To calculate False CCA count.*/ + RTMP_IO_READ32(pAd, RO_PHYCTRL_STS0, &PDCnt); + OFDM_PD_CNT = (PDCnt >> 16); + CCK_PD_CNT = (PDCnt & 0xFFFF); + RTMP_IO_READ32(pAd, RO_PHYCTRL_STS5, &MDRDYCnt); + OFDM_MDRDY_CNT = (MDRDYCnt >> 16); + CCK_MDRDY_CNT = (MDRDYCnt & 0xFFFF); + CCAcount = ((OFDM_PD_CNT - OFDM_MDRDY_CNT) + (CCK_PD_CNT - CCK_MDRDY_CNT)); + RTMP_IO_READ32(pAd, CR_PHYCTRL_2, &value); + value |= (1<<6); /* BIT6: CR_STSCNT_RST */ + RTMP_IO_WRITE32(pAd, CR_PHYCTRL_2, value); + value &= (~(1<<6)); + RTMP_IO_WRITE32(pAd, CR_PHYCTRL_2, value); + value |= (1<<7); /* BIT7: CR_STSCNT_EN */ + RTMP_IO_WRITE32(pAd, CR_PHYCTRL_2, value); + pAd->RalinkCounters.OneSecFalseCCACnt = CCAcount; + pAd->RalinkCounters.OneSecCCKFalseCCACnt = (CCK_PD_CNT - CCK_MDRDY_CNT); + pAd->RalinkCounters.OneSecOFDMFalseCCACnt = (OFDM_PD_CNT - OFDM_MDRDY_CNT); + pAd->RalinkCounters.FalseCCACnt = CCAcount; + +#ifdef SMART_CARRIER_SENSE_SUPPORT + pAd->SCSCtrl.PdCount = PDCnt; + pAd->SCSCtrl.MdrdyCount = MDRDYCnt; + DBGPRINT(RT_DEBUG_TRACE, ("False CCA (one second) = %ld (CCK %d + OFDM %d)\n", + (ULONG)pAd->RalinkCounters.OneSecFalseCCACnt, + pAd->RalinkCounters.OneSecCCKFalseCCACnt, + pAd->RalinkCounters.OneSecOFDMFalseCCACnt)); + pAd->SCSCtrl.FalseCCA = pAd->RalinkCounters.FalseCCACnt; +#endif /* SMART_CARRIER_SENSE_SUPPORT */ +#endif return NDIS_STATUS_SUCCESS; } @@ -789,12 +861,12 @@ VOID write_tmac_info( NdisZeroMemory(&txd, sizeof(TMAC_TXD_L)); - ldpc = pTransmit->field.ldpc; - mcs = pTransmit->field.MCS; - sgi = pTransmit->field.ShortGI; - stbc = pTransmit->field.STBC; - phy_mode = pTransmit->field.MODE; - bw = (phy_mode <= MODE_OFDM) ? (BW_20) : (pTransmit->field.BW); + ldpc = (UCHAR)pTransmit->field.ldpc; + mcs = (UCHAR)pTransmit->field.MCS; + sgi = (UCHAR)pTransmit->field.ShortGI; + stbc = (UCHAR)pTransmit->field.STBC; + phy_mode = (UCHAR)pTransmit->field.MODE; + bw = (UCHAR)((phy_mode <= MODE_OFDM) ? (BW_20) : (pTransmit->field.BW)); #if 0 /* we should not set 20/40 coexist this way because the "bw" here is for fix mode */ #ifdef DOT11_N_SUPPORT #ifdef DOT11N_DRAFT3 @@ -975,7 +1047,7 @@ VOID write_tmac_info( if (TxSCtl->TxS2HostStatusPerPkt & (1 << info->PID)) { txd_5->pid = AddTxSStatus(pAd, TXS_TYPE0, info->PID, 0, 0, - txd_6->tx_rate, info->TxSPriv); + (UINT16)txd_6->tx_rate, info->TxSPriv); txd_5->tx_status_2_host = 1; } else @@ -1011,7 +1083,8 @@ VOID write_tmac_info( if (TxSCtl->TxS2HostStatusPerPktType[txd_2->frm_type] & (1 << txd_2->sub_type)) { txd_5->pid = AddTxSStatus(pAd, TXS_TYPE1, 0, - txd_2->frm_type, txd_2->sub_type, txd_6->tx_rate, info->TxSPriv); + (UINT8)txd_2->frm_type, (UINT8)txd_2->sub_type, + (UINT16)txd_6->tx_rate, info->TxSPriv); txd_5->tx_status_2_host = 1; } else @@ -1228,12 +1301,12 @@ VOID write_tmac_info_Data(RTMP_ADAPTER *pAd, UCHAR *buf, TX_BLK *pTxBlk) txd_1->ft = TMI_FT_LONG; txd_size = sizeof(TMAC_TXD_L); if (pTransmit) { - ldpc = pTransmit->field.ldpc; - mcs = pTransmit->field.MCS; - sgi = pTransmit->field.ShortGI; - stbc = pTransmit->field.STBC; - phy_mode = pTransmit->field.MODE; - bw = (phy_mode <= MODE_OFDM) ? (BW_20) : (pTransmit->field.BW); + ldpc = (UCHAR)pTransmit->field.ldpc; + mcs = (UCHAR)pTransmit->field.MCS; + sgi = (UCHAR)pTransmit->field.ShortGI; + stbc = (UCHAR)pTransmit->field.STBC; + phy_mode = (UCHAR)pTransmit->field.MODE; + bw = (UCHAR)((phy_mode <= MODE_OFDM) ? (BW_20) : (pTransmit->field.BW)); nss = get_nss_by_mcs(phy_mode, mcs, stbc); } @@ -1314,7 +1387,7 @@ VOID write_tmac_info_Data(RTMP_ADAPTER *pAd, UCHAR *buf, TX_BLK *pTxBlk) if (TxSCtl->TxS2HostStatusPerPkt & (1 << pTxBlk->Pid)) { txd_5->pid = AddTxSStatus(pAd, TXS_TYPE0, pTxBlk->Pid, 0, 0, - txd_6->tx_rate, pTxBlk->TxSPriv); + (UINT16)txd_6->tx_rate, pTxBlk->TxSPriv); txd_5->tx_status_2_host = 1; } else @@ -1349,7 +1422,8 @@ VOID write_tmac_info_Data(RTMP_ADAPTER *pAd, UCHAR *buf, TX_BLK *pTxBlk) if (TxSCtl->TxS2HostStatusPerPktType[txd_2->frm_type] & (1 << txd_2->sub_type)) { txd_5->pid = AddTxSStatus(pAd, TXS_TYPE1, 0, - txd_2->frm_type, txd_2->sub_type, txd_6->tx_rate, pTxBlk->TxSPriv); + (UINT8)txd_2->frm_type, (UINT8)txd_2->sub_type, + (UINT16)txd_6->tx_rate, pTxBlk->TxSPriv); txd_5->tx_status_2_host = 1; } else @@ -1684,14 +1758,14 @@ VOID dump_wtbl_1_info(RTMP_ADAPTER *pAd, struct wtbl_1_struc *tb) UCHAR addr[6]; NdisMoveMemory(&addr[0], &wtbl_1_d1->word, 4); - addr[0] = wtbl_1_d1->field.addr_0 & 0xff; - addr[1] = ((wtbl_1_d1->field.addr_0 & 0xff00) >> 8); - addr[2] = ((wtbl_1_d1->field.addr_0 & 0xff0000) >> 16); - addr[3] = ((wtbl_1_d1->field.addr_0 & 0xff000000) >> 24); + addr[0] = (UCHAR)(wtbl_1_d1->field.addr_0 & 0xff); + addr[1] = (UCHAR)((wtbl_1_d1->field.addr_0 & 0xff00) >> 8); + addr[2] = (UCHAR)((wtbl_1_d1->field.addr_0 & 0xff0000) >> 16); + addr[3] = (UCHAR)((wtbl_1_d1->field.addr_0 & 0xff000000) >> 24); //addr[4] = wtbl_1_d0->field.addr_32 & 0xff; //addr[5] = (wtbl_1_d0->field.addr_32 & 0xff00 >> 8); - addr[4] = wtbl_1_d0->field.addr_4 & 0xff; - addr[5] = wtbl_1_d0->field.addr_5 & 0xff; + addr[4] = (UCHAR)(wtbl_1_d0->field.addr_4 & 0xff); + addr[5] = (UCHAR)(wtbl_1_d0->field.addr_5 & 0xff); hex_dump("WTBL Segment 1 Raw Data", (UCHAR *)tb, sizeof(struct wtbl_1_struc)); DBGPRINT(RT_DEBUG_OFF, ("WTBL Segment 1 Fields:\n")); @@ -1811,8 +1885,8 @@ VOID dump_wtbl_2_info(RTMP_ADAPTER *pAd, struct wtbl_2_struc *tb) raw_data = rate_info[idx] & 0xfff; stbc = (raw_data & 0x800) ? 1 : 0; - nss = (raw_data & 0x600) >> 9; - phy_mode = (raw_data & 0x1c0) >> 6; + nss = (UCHAR)((raw_data & 0x600) >> 9); + phy_mode = (UCHAR)((raw_data & 0x1c0) >> 6); rate = (raw_data & 0x3f); //DBGPRINT(RT_DEBUG_OFF, ("\t\t%d/%d/%d/%d/MCS%d 0x%x\n", idx + 1, stbc, nss, phy_mode, rate, rate_info[idx])); @@ -2055,14 +2129,15 @@ INT mt_wtbl_get_entry234(RTMP_ADAPTER *pAd, UCHAR widx, struct wtbl_entry *ent) else { /* WTBL 2/3/4 */ - ecnt_per_page = wtbl_ctrl->page_size / wtbl_ctrl->wtbl_entry_size[idx]; + ecnt_per_page = (UCHAR)(wtbl_ctrl->page_size / + wtbl_ctrl->wtbl_entry_size[idx]); page_offset = wtbl_idx / ecnt_per_page; element_offset = wtbl_idx % ecnt_per_page; - ent->wtbl_fid[idx] = wtbl_ctrl->wtbl_base_fid[idx] + page_offset; + ent->wtbl_fid[idx] = (UINT16)(wtbl_ctrl->wtbl_base_fid[idx] + page_offset); if (idx == 2) - ent->wtbl_eid[idx] = element_offset * 2; + ent->wtbl_eid[idx] = (UINT16)(element_offset * 2); else - ent->wtbl_eid[idx] = element_offset; + ent->wtbl_eid[idx] = (UINT16)element_offset; ent->wtbl_addr[idx] = wtbl_ctrl->wtbl_base_addr[idx] + page_offset * wtbl_ctrl->page_size + element_offset * wtbl_ctrl->wtbl_entry_size[idx]; diff --git a/mcu/andes_mt.c b/mcu/andes_mt.c index cc967e7..add6906 100755 --- a/mcu/andes_mt.c +++ b/mcu/andes_mt.c @@ -1525,7 +1525,7 @@ INT32 CmdMultiPleRfRegAccessRead(RTMP_ADAPTER *pAd, MT_RF_REG_PAIR *RegPair, } AndesInitCmdMsg(msg, P1_Q0, EXT_CID, CMD_QUERY, EXT_CMD_MULTIPLE_REG_ACCESS, - TRUE, 0, TRUE, TRUE, (12 * Num) + 20, (char *)RegPair, + TRUE, 0, TRUE, TRUE, (UINT16)(12 * Num) + 20, (char *)RegPair, CmdMultipleRfRegAccessReadCb); for (Index = 0; Index < Num; Index++) @@ -1583,7 +1583,7 @@ INT32 CmdMultiPleMacRegAccessRead(RTMP_ADAPTER *pAd, RTMP_REG_PAIR *RegPair, } AndesInitCmdMsg(msg, P1_Q0, EXT_CID, CMD_QUERY, EXT_CMD_MULTIPLE_REG_ACCESS, - TRUE, 0, TRUE, TRUE, (12 * Num) + 20, (char *)RegPair, + TRUE, 0, TRUE, TRUE, (UINT16)(12 * Num) + 20, (char *)RegPair, CmdMultipleMacRegAccessReadCb); for (Index = 0; Index < Num; Index++) @@ -1719,7 +1719,7 @@ static VOID CmdRFRegAccessReadCb(struct cmd_msg *msg, char *Data, UINT16 Len) struct _CMD_RF_REG_ACCESS_T *RFRegAccess = (struct _CMD_RF_REG_ACCESS_T *)Data; NdisMoveMemory(msg->rsp_payload, &RFRegAccess->Data, Len - 8); - *msg->rsp_payload = le2cpu32(*msg->rsp_payload); + *((UINT32 *)msg->rsp_payload) = le2cpu32(*((UINT32 *)msg->rsp_payload)); } @@ -1786,6 +1786,7 @@ VOID CmdIORead32(struct _RTMP_ADAPTER *pAd, UINT32 Offset, UINT32 *Value) struct MCU_CTRL *Ctl = &pAd->MCUCtrl; RTMP_REG_PAIR RegPair; + RegPair.Value = 0; if (Ctl->Stage == FW_RUN_TIME) { @@ -1818,7 +1819,7 @@ static VOID EventExtCmdResult(struct cmd_msg *msg, char *Data, UINT16 Len) DBGPRINT(RT_DEBUG_INFO, ("%s: EventExtCmdResult.u4Status = 0x%x\n", __FUNCTION__, EventExtCmdResult->u4Status)); - RTMP_OS_TXRXHOOK_CALL(WLAN_CALIB_TEST_RSP,NULL,EventExtCmdResult->u4Status,pAd); + RTMP_OS_TXRXHOOK_CALL(WLAN_CALIB_TEST_RSP, NULL, (UCHAR)EventExtCmdResult->u4Status, pAd); } @@ -1835,7 +1836,7 @@ VOID EventExtCmdResultHandler(RTMP_ADAPTER *pAd, char *Data, UINT16 Len) DBGPRINT(RT_DEBUG_INFO, ("%s: EventExtCmdResult.u4Status = 0x%x\n", __FUNCTION__, EventExtCmdResult->u4Status)); - RTMP_OS_TXRXHOOK_CALL(WLAN_CALIB_TEST_RSP,NULL,EventExtCmdResult->u4Status,pAd); + RTMP_OS_TXRXHOOK_CALL(WLAN_CALIB_TEST_RSP, NULL, (UCHAR)EventExtCmdResult->u4Status, pAd); } @@ -1861,7 +1862,7 @@ INT32 CmdIcapOverLap(RTMP_ADAPTER *pAd, UINT32 IcapLen) TestCtrl.ucAction = 0; - TestCtrl.ucIcapLen = IcapLen; + TestCtrl.ucIcapLen = (UINT8)IcapLen; TestCtrl.u.u4OpMode = OPERATION_ICAP_OVERLAP; @@ -1979,7 +1980,7 @@ INT32 CmdWiFiRxDisable(RTMP_ADAPTER *pAd, UINT RxDisable) memset(&WiFiRxDisable, 0x00, sizeof(WiFiRxDisable)); - WiFiRxDisable.ucWiFiRxDisableCtrl = RxDisable; + WiFiRxDisable.ucWiFiRxDisableCtrl = (UINT8)RxDisable; AndesAppendCmdMsg(msg, (char *)&WiFiRxDisable, sizeof(WiFiRxDisable)); @@ -2012,7 +2013,7 @@ INT32 CmdP2pNoaOffloadCtrl(RTMP_ADAPTER *ad, UINT8 enable) NdisZeroMemory(&extCmdNoaCtrl, sizeof(extCmdNoaCtrl)); - extCmdNoaCtrl.ucMode1 = cpu2le32(enable); + extCmdNoaCtrl.ucMode1 = (UINT8)cpu2le32(enable); //extCmdNoaCtrl.ucMode0 = cpu2le32(enable); AndesAppendCmdMsg(msg, (char *)&extCmdNoaCtrl, sizeof(extCmdNoaCtrl)); @@ -2267,10 +2268,11 @@ static VOID EventThermalProtect(RTMP_ADAPTER *pAd, UINT8 *Data, UINT32 Length) } else { - DBGPRINT(RT_DEBUG_OFF, ("Switch TX to 2 stram\n")); pAd->force_one_tx_stream = FALSE; + DBGPRINT(RT_DEBUG_OFF, ("Switch TX to 2 stram\n")); } + pAd->switch_tx_stream = TRUE; pAd->fgThermalProtectToggle = TRUE; RTMP_SEM_EVENT_UP(&pAd->AutoRateLock); @@ -2953,7 +2955,7 @@ INT32 AndesMTEraseFw(RTMP_ADAPTER *pAd) if (cap->FWImageName) os_free_mem(NULL, cap->FWImageName); - cap->FWImageName = NULL; + cap->FWImageName = NULL; } return 0; @@ -3015,7 +3017,7 @@ static VOID EventExtEventHandler(RTMP_ADAPTER *pAd, UINT8 ExtEID, UINT8 *Data, U switch (ExtEID) { case EXT_EVENT_CMD_RESULT: - EventExtCmdResultHandler(pAd, Data, Length); + EventExtCmdResultHandler(pAd, Data, (UINT16)Length); break; case EXT_EVENT_FW_LOG_2_HOST: ExtEventFwLog2HostHandler(pAd, Data, Length); @@ -3100,8 +3102,10 @@ static VOID AndesMTRxProcessEvent(RTMP_ADAPTER *pAd, struct cmd_msg *rx_msg) (event_rxd->fw_rxd_2.field.ext_eid == EXT_EVENT_FW_LOG_2_HOST) || (event_rxd->fw_rxd_2.field.ext_eid == EXT_EVENT_THERMAL_PROTECT)) { /* if have callback function */ - UnsolicitedEventHandler(pAd, event_rxd->fw_rxd_1.field.eid, event_rxd->fw_rxd_2.field.ext_eid, GET_OS_PKT_DATAPTR(net_pkt) + sizeof(*event_rxd), - event_rxd->fw_rxd_0.field.length - sizeof(*event_rxd)); + UnsolicitedEventHandler(pAd, (UINT8)event_rxd->fw_rxd_1.field.eid + , (UINT8)event_rxd->fw_rxd_2.field.ext_eid + , GET_OS_PKT_DATAPTR(net_pkt) + sizeof(*event_rxd) + , event_rxd->fw_rxd_0.field.length - sizeof(*event_rxd)); } else { @@ -3149,7 +3153,9 @@ static VOID AndesMTRxProcessEvent(RTMP_ADAPTER *pAd, struct cmd_msg *rx_msg) else { DBGPRINT(RT_DEBUG_ERROR, ("expect response len(%d), command response len(%zu) invalid\n", msg->rsp_payload_len, event_rxd->fw_rxd_0.field.length - sizeof(*event_rxd))); - msg->rsp_payload_len = event_rxd->fw_rxd_0.field.length - sizeof(*event_rxd); + msg->rsp_payload_len = + (UINT16)(event_rxd->fw_rxd_0.field.length - + sizeof(*event_rxd)); } if (msg->need_wait) { @@ -3306,6 +3312,14 @@ static VOID CmdThemalSensorRsp(struct cmd_msg *msg, char *Data, UINT16 Len) static inline VOID bufferModeFieldSet(RTMP_ADAPTER *pAd,EXT_CMD_EFUSE_BUFFER_MODE_T *pCmd,UINT16 addr) { UINT32 i = pCmd->ucCount; + + if (i >= EFUSE_CONTENT_BUFFER_SIZE) { + DBGPRINT(RT_DEBUG_ERROR, + ("%s: EFUSE_CONTENT_BUFFER_SIZE Overflow\n", + __FUNCTION__)); + return; + } + pCmd->aBinContent[i].u2Addr = cpu2le16(addr); pCmd->aBinContent[i].ucValue = pAd->EEPROMImage[addr] ; pCmd->ucCount++; @@ -3333,7 +3347,7 @@ static VOID CmdExtPmStateCtrlRsp(struct cmd_msg *msg, char *Data, UINT16 Len) static VOID CmdFillEeprom(RTMP_ADAPTER *pAd,EXT_CMD_EFUSE_BUFFER_MODE_T *pCmd) { - int i=0; + UINT8 i = 0; pCmd->aBinContent[i].u2Addr = NIC_CONFIGURE_0_TOP; pCmd->aBinContent[i].ucValue = pAd->EEPROMImage[NIC_CONFIGURE_0_TOP] ; i++; @@ -3599,7 +3613,8 @@ VOID CmdSetTxPowerCtrl(RTMP_ADAPTER *pAd, UINT8 central_chl) struct cmd_msg *msg; EXT_CMD_TX_POWER_CTRL_T CmdTxPwrCtrl; int ret = 0; - int i, j; + USHORT i; + int j; UINT8 PwrPercentageDelta = 0; USHORT Value; struct MT_TX_PWR_CAP *cap = &pAd->chipCap.MTTxPwrCap; @@ -3622,7 +3637,7 @@ VOID CmdSetTxPowerCtrl(RTMP_ADAPTER *pAd, UINT8 central_chl) { RT28xx_EEPROM_READ16(pAd, NIC_CONFIGURE_1, Value); - CmdTxPwrCtrl.ucTSSIEnable = ((Value & 0xff00) >> 8); + CmdTxPwrCtrl.ucTSSIEnable = (UINT8)((Value & 0xff00) >> 8); RT28xx_EEPROM_READ16(pAd, NIC_CONFIGURE_1, Value); CmdTxPwrCtrl.ucTempCompEnable = (Value & 0xff); @@ -3639,7 +3654,7 @@ VOID CmdSetTxPowerCtrl(RTMP_ADAPTER *pAd, UINT8 central_chl) RT28xx_EEPROM_READ16(pAd, TX_PWR_CCK_1_2M + (i * 2), Value); CmdTxPwrCtrl.aucRatePowerDelta[j] = Value & 0xff; j++; - CmdTxPwrCtrl.aucRatePowerDelta[j] = ((Value & 0xff00) >> 8); + CmdTxPwrCtrl.aucRatePowerDelta[j] = (UINT8)((Value & 0xff00) >> 8); j++; } @@ -3647,20 +3662,20 @@ VOID CmdSetTxPowerCtrl(RTMP_ADAPTER *pAd, UINT8 central_chl) CmdTxPwrCtrl.ucBWPowerDelta = Value & 0xff; RT28xx_EEPROM_READ16(pAd, TX0_G_BAND_TARGET_PWR, Value); - CmdTxPwrCtrl.aucCHPowerDelta[0] = ((Value & 0xff00) >> 8); + CmdTxPwrCtrl.aucCHPowerDelta[0] = (UINT8)((Value & 0xff00) >> 8); RT28xx_EEPROM_READ16(pAd, TX0_G_BAND_CHL_PWR_DELTA_MID, Value); CmdTxPwrCtrl.aucCHPowerDelta[1] = Value & 0xff; - CmdTxPwrCtrl.aucCHPowerDelta[2] = ((Value & 0xff00) >> 8); + CmdTxPwrCtrl.aucCHPowerDelta[2] = (UINT8)((Value & 0xff00) >> 8); RT28xx_EEPROM_READ16(pAd, TX1_G_BAND_TARGET_PWR, Value); - CmdTxPwrCtrl.aucCHPowerDelta[3] = ((Value & 0xff00) >> 8); + CmdTxPwrCtrl.aucCHPowerDelta[3] = (UINT8)((Value & 0xff00) >> 8); RT28xx_EEPROM_READ16(pAd, TX1_G_BAND_CHL_PWR_DELTA_MID, Value); CmdTxPwrCtrl.aucCHPowerDelta[4] = Value & 0xff; - CmdTxPwrCtrl.aucCHPowerDelta[5] = ((Value & 0xff00) >> 8); + CmdTxPwrCtrl.aucCHPowerDelta[5] = (UINT8)((Value & 0xff00) >> 8); j = 0; @@ -3672,7 +3687,7 @@ VOID CmdSetTxPowerCtrl(RTMP_ADAPTER *pAd, UINT8 central_chl) if (i != 8) { - CmdTxPwrCtrl.aucTempCompPower[j] = ((Value & 0xff00) >> 8); + CmdTxPwrCtrl.aucTempCompPower[j] = (UINT8)((Value & 0xff00) >> 8); j++; } } @@ -3959,8 +3974,8 @@ INT32 CmdExtPwrMgtBitWifi(RTMP_ADAPTER *pAd, UINT8 ucWlanIdx, UINT8 ucPwrMgtBit) goto error; } - PwrMgtBitWifi.ucWlanIdx = cpu2le32(ucWlanIdx); - PwrMgtBitWifi.ucPwrMgtBit = cpu2le32(ucPwrMgtBit); + PwrMgtBitWifi.ucWlanIdx = (UINT8)cpu2le32(ucWlanIdx); + PwrMgtBitWifi.ucPwrMgtBit = (UINT8)cpu2le32(ucPwrMgtBit); DBGPRINT(RT_DEBUG_OFF, ("%s:ucWlanIdx(%d), ucPwrMgtBit(%d)\n", __FUNCTION__, ucWlanIdx, ucPwrMgtBit)); @@ -3995,9 +4010,9 @@ INT32 CmdExtPmStateCtrl(RTMP_ADAPTER *pAd, UINT8 ucWlanIdx, UINT8 ucPmNumber, UI } /* Fill parameter here*/ - CmdPmStateCtrl.ucWlanIdx = cpu2le32(ucWlanIdx); - CmdPmStateCtrl.ucPmNumber = cpu2le32(ucPmNumber); - CmdPmStateCtrl.ucPmState = cpu2le32(ucPmState); + CmdPmStateCtrl.ucWlanIdx = (UINT8)cpu2le32(ucWlanIdx); + CmdPmStateCtrl.ucPmNumber = (UINT8)cpu2le32(ucPmNumber); + CmdPmStateCtrl.ucPmState = (UINT8)cpu2le32(ucPmState); #ifdef CONFIG_STA_SUPPORT NdisMoveMemory(CmdPmStateCtrl.aucBssid, pEntry->Addr, MAC_ADDR_LEN); DBGPRINT(RT_DEBUG_OFF, ("%s:(%x, %x, %x, %x, %x, %x), BeaconPeriod(%d), DtimPeriod(%d), AID(%d)\n", @@ -4011,8 +4026,8 @@ INT32 CmdExtPmStateCtrl(RTMP_ADAPTER *pAd, UINT8 ucWlanIdx, UINT8 ucPmNumber, UI #ifdef CONFIG_STA_SUPPORT if (ucPmState == ENTER_PM_STATE) { - CmdPmStateCtrl.ucDtimPeriod = cpu2le32(pAd->MlmeAux.DtimPeriod); - CmdPmStateCtrl.u2BcnInterval = cpu2le32(pAd->MlmeAux.BeaconPeriod); + CmdPmStateCtrl.ucDtimPeriod = (UINT8)cpu2le32(pAd->MlmeAux.DtimPeriod); + CmdPmStateCtrl.u2BcnInterval = (UINT16)cpu2le32(pAd->MlmeAux.BeaconPeriod); CmdPmStateCtrl.u4Aid = cpu2le32(pAd->StaActive.Aid); RTMP_IO_READ32(pAd, RMAC_RFCR, &u4RfCr); @@ -4158,7 +4173,7 @@ VOID RT28xx_UpdateBeaconToMcu( if (HWBssidIdx > 0) //HWBssid > 0 case, no extendable bssid. bcn_update.ucExtBssidIdx = 0; else - bcn_update.ucExtBssidIdx = apidx; + bcn_update.ucExtBssidIdx = (UINT8)apidx; bcn_update.ucEnable = Enable; //bcn_update.ucWlanIdx = 0;//hardcode at present @@ -4251,6 +4266,8 @@ VOID MT76xxAndesWOWEnable( NdisCopyMemory(CmdGTK.PTK, pEntry->PTK, LEN_PTK); #else NdisCopyMemory(CmdGTK.PTK, pAd->WOW_Cfg.PTK, LEN_PTK); + hex_dump("WOW_Cfg.KCK", pAd->WOW_Cfg.PTK, LEN_PTK_KCK); + hex_dump("WOW_Cfg.KEK", &pAd->WOW_Cfg.PTK[LEN_PTK_KCK], LEN_PTK_KEK); #endif #endif @@ -4362,6 +4379,11 @@ VOID MT76xxAndesWOWEnable( CmdPFGlobal.PFType = cpu2le32(_ENUM_TYPE_GLOBAL_EN); CmdPFGlobal.FunctionSelect = cpu2le32(_ENUM_GLOBAL_WOW_EN); CmdPFGlobal.Enable = cpu2le32(1); //bit0=1 mean BSS0 for staion mode + /* if 0: NOT to configure. non-0: set value 1~15 */ + if (pAd->WOW_Cfg.nKeepAlivePeriod != 0) { + CmdPFGlobal.extParam = ((FW_KEEP_ALIVE_ENABLE_MASK) + | (pAd->WOW_Cfg.nKeepAlivePeriod & FW_KEEP_ALIVE_PERIOD_MASK)); + } AndesAppendCmdMsg(msg, (char *)&CmdPFGlobal, sizeof(CMD_PACKET_FILTER_GLOBAL_T)); diff --git a/mcu/bin/WIFI_RAM_CODE_MT7603_e2.bin b/mcu/bin/WIFI_RAM_CODE_MT7603_e2.bin index 292767d..d26a4bb 100755 --- a/mcu/bin/WIFI_RAM_CODE_MT7603_e2.bin +++ b/mcu/bin/WIFI_RAM_CODE_MT7603_e2.bin @@ -1,13 +1,14 @@ -F -D îî# -P€€IøPH -D@ +F +D îî# +F( +P€€IøPH +D@ N2 -L2ÀBH -DP ->åH +L2ÀBH +DP +>ãH Q -DP +DP @ YÎ X € @@ -19,31 +20,31 @@ X! Ï€/€@ @ D`1\n -Ï€ n -X -<Mÿ¹KàH -.WâLP€.Wú¼NR -@ +Ï€ n +X +<Mÿ¹KàH +.Wß¹LP€.Wø\NR +@ D J @1@!„ D -F@X +F@X @€ TQ P -DP ->?ÊÈ81ŠN ->?Ë +DP +>?Èt81ŠN +>?Èà81ŠN N -L€J\ð +L€J\ð N -L€J\ð +L€J\ð # N -L€J\ð +L€J\ð \ó -Nò +Nò X€ @0¼@1ü N2 D @@ -65,125 +66,127 @@ F@ F@ D F& -F& -L -F +F& +L +F D N¢ -N¢ -@0x—@ -F -D -€I -D -€Iÿÿ¦P#€Tq -I +N¢ +@0x—@ +F +D +€I +D +€Iÿÿ¦P#€Tq +I P - -C + +C C€ ->_áüLr€Ps€HÿÿÒC - -Yဠ-D0 -X€ -X€ -P€4I÷ë2F X€@#”@ - -\ó€Nò -IÿþÖX -R -D +>_ßœLr€Ps€HÿÿÒC + +Yဠ+Ï€Po€@P¯€HPŸ€TP€BP€I?€QÏ€LQï€PT€ÿX +D0 +X€ +X€ +P€4I÷ë,F X€@#”@ + +\ó€Nò +IÿþÖX +R +D @r@’$@”œPr€@R@T”@r@Rœ@!@ñ„Nóÿä$ -D - -H +D + +DP +H - -D -:2Œ -Iÿ瀀D -I + +D +:2 +Iÿç>€D +I @Cˆ @3ˆ -@Sˆ - -@$ +@Sˆ + +@$ D -D ->ÌäIÿÏÜD -á ->7ùÊH ->'ùÉH +D +>ÊIÿÏ–D +á +>7÷jH +>'÷iH €NC -T€ÿDP +T€ÿDP - + XXR‹@]À€@ D0 -¦H -X +¦H +X /€PŸ€'À>>²`Ï€X_ -@`€X£ -D -DPÿXp +@`€X£ +Tn S€€ -€€ -€P€ - ->åœ -Nó +€€ +€P€ + +>ã< +Nó -IÿüLN - -.7åžDP - -.WäNS -L"€<\ñ +IÿüLN + +.7ã>DP + +.Wá²NS +L"€<\ñ @2ŒTQ \ð€Nó -Pÿà@€H -ßXB€@QPHF HF -Qÿ€;ÿü„J +Pÿà@€H +ßXB€@QPHF HF +Qÿ€;ÿü„J \ô Nò -P„ -@Q -FX‚ÐD -XP€ -XQ€ -Iÿ³ˆH - -LÀ8ˆ -Qÿ€;ÿü„J -DOÿ‡@0X€ H -D +P„ +@Q +FX‚ÐD +XP€ +XQ€ +Iÿ³BH + +LÀ8ˆ +DOÿ‡@0X€ H +>÷˜P +D N -X$€ -Iÿÿ4N -I÷½6P€D -D -€€X` -X +X$€ +Iÿÿ6N +I÷¼ØP€D +D +€€X` +N +X 8` D@ -PŸ€P@ˆ€¯€€
€Ÿ€@€ +PŸ€P@ˆ€¯€€
€Ÿ€@€ _€ /€Ï€O€_€ -¯€ +¯€ @To€S€€ @ -€ LDÿ~/€P1ü?€Ÿ€N“þÚ +€ LDÿ~/€P1ü?€Ÿ€N“þÚ L0 -AàL? -P€ +AàL? +P€ ŠHÿÿð XX€ 4X€ -X -X +X +X X2 XA Xq€ -X1 -D@ +X1 +D@ @D DŸ[±@rAî$ @ä@P¤ QAâð@¡ˆ @@ -191,33 +194,32 @@ QAâð@¡ˆ D@€ FŽm¹@pX„ å@ ¹B@Žx -AÀ¬FvUµAÎ$ -Dÿ‡@PœX€H -£ - -D -D +AÀ¬FvUµAÎ$ +D_ÿ‡@@”X +ƒ +.÷¯X +D D -D -€P -X€ -D -X - - -DOÿ‡@ X -S -Kà>ú -X€ -I÷ª8I÷¬n_€N£ +D +€P +X€ +D +X + + +EÏÿ‡@ ðX +À“€S€
C€€>7ãEä +Kà>÷ D +X€ +I÷©œI÷«Ò_€N£ @p(7@s7N @@$7@CWN" -@0 7@3×Oâ -KàF@cXR -FcKàX”† -o€ -PF: +@0 7@3×Oâ +KàF@cXR +FcKàX”† +o€ +PF: @@ -226,87 +228,84 @@ PF: - + @ P P P -J - -D -D` +J + +D +D` FFð¢X F -F -F -FFÉðX -D,ïÿ@ -DP +F +F +FFÉðX +D,ïÿ@ +D FˆˆXˆˆD -FˆˆXˆˆD +FˆˆXˆˆD FX€D F -X€áD +X€áD FˆˆXˆˆD -FˆˆXˆˆD -X€áH +FˆˆXˆˆD +X€áH F/ -à +à F/ -P -à -FX‚ÐD +P +à +FX‚ÐD P0ÿÀ^ñÿðNó @ PPÿÀ^òÿðNó -0 +0 FF -FF -D -D -D -D - ->Öd>Þ¤D yIÿ‚*X€ -DP -H -@€@ -F -8›N - +FF +D +D +D +D +>Ô>ÜPD éIÿfX€ +Iÿ÷Iÿü^Qÿ€:oª„J +DP +H +@€@p +F +DP +8›N + Tr€ÿ@ÿNó @ðNó -\óNò -€ +\óNò +€ F F -F -€ -/€ -<ÿ>Gæ -<Mÿ>F@ -F<ÿ@X -€GÆ +F +€ F -FF +FF F -FF( +FF( F -FF0 +FF0 F -FF8 +FF8 F -FF +FF F -FF -D -D -P - -D -.GâT2 -H -<Kó >Wæ9<Kò>æ;Dp +FF +D +D + +P + +D +.Gß½T2 +H +<KñÙ>WãÙ<KðØ>ãÛDp @@ -317,11 +316,11 @@ H - + - - - + + + @@ -347,7 +346,7 @@ I$\ÂÓ¬b‘•äyçÈ7mÕN©lVôêez®ºx%.¦´ÆèÝtK½‹Šp>µfHöa5W¹†Ážáø˜iÙŽ”›‡éÎU(ߌ¡‰ X -d +d H `¿ô¢L `„ @@ -359,6 +358,7 @@ H `¿ô¢L `„ - ` - -
(3>Pf| Ìø + ` + + +
(3>Pf| Ìø @@ -31,7 +31,7 @@ INT MCUBurstWrite(PRTMP_ADAPTER pAd, UINT32 Offset, UINT32 *Data, UINT32 Cnt) { #ifdef RTMP_USB_SUPPORT - RTUSBMultiWrite_nBytes(pAd, Offset, (UCHAR *)Data, Cnt * 4, 64); + RTUSBMultiWrite_nBytes(pAd, (USHORT)Offset, (UCHAR *)Data, (USHORT)(Cnt * 4), 64); #endif /* RTMP_USB_SUPPORT */ return 0; } diff --git a/mgmt/mgmt_entrytb.c b/mgmt/mgmt_entrytb.c index d204e30..891c438 100755 --- a/mgmt/mgmt_entrytb.c +++ b/mgmt/mgmt_entrytb.c @@ -318,10 +318,13 @@ VOID set_sta_ra_cap(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY *ent, ULONG ra_ie) pEntry - pointer to the MAC entry; NULL is not found ========================================================================== */ -MAC_TABLE_ENTRY *MacTableLookup(RTMP_ADAPTER *pAd, UCHAR *pAddr) +MAC_TABLE_ENTRY *MacTableLookup(RTMP_ADAPTER *pAd, const UCHAR *pAddr) { ULONG HashIdx; MAC_TABLE_ENTRY *pEntry = NULL; + + if (pAd == NULL || pAddr == NULL) + return NULL; HashIdx = MAC_ADDR_HASH_INDEX(pAddr); pEntry = pAd->MacTab.Hash[HashIdx]; @@ -438,10 +441,14 @@ BOOLEAN StaUpdateMacTableEntry( #endif /* TXBF_SUPPORT */ /* find max fixed rate */ - pEntry->MaxHTPhyMode.field.MCS = get_ht_max_mcs(pAd, &wdev->DesiredHtPhyInfo.MCSSet[0], &ht_cap->MCSSet[0]); + pEntry->MaxHTPhyMode.field.MCS = + (USHORT)get_ht_max_mcs(pAd, &wdev->DesiredHtPhyInfo.MCSSet[0], + &ht_cap->MCSSet[0]); if (wdev->DesiredTransmitSetting.field.MCS != MCS_AUTO) - set_ht_fixed_mcs(pAd, pEntry, wdev->DesiredTransmitSetting.field.MCS, wdev->HTPhyMode.field.MCS); + set_ht_fixed_mcs(pAd, pEntry, + (UCHAR)wdev->DesiredTransmitSetting.field.MCS, + (UCHAR)wdev->HTPhyMode.field.MCS); pEntry->MaxHTPhyMode.field.STBC = (ht_cap->HtCapInfo.RxSTBC & (pAd->CommonCfg.DesiredHtPhy.TxSTBC)); pEntry->MpduDensity = ht_cap->HtCapParm.MpduDensity; @@ -691,7 +698,7 @@ MAC_TABLE_ENTRY *MacTableInsertEntry( /* ENTRY PREEMPTION: initialize the entry */ pEntry->wdev = wdev; - pEntry->wcid = i; + pEntry->wcid = (UCHAR)i; pEntry->func_tb_idx = wdev->func_idx; pEntry->bIAmBadAtheros = FALSE; pEntry->pAd = pAd; @@ -878,7 +885,7 @@ MAC_TABLE_ENTRY *MacTableInsertEntry( #endif /* CONFIG_STA_SUPPORT */ } while (FALSE); - tr_tb_set_entry(pAd, i, pEntry); + tr_tb_set_entry(pAd, (UCHAR)i, pEntry); RTMPInitTimer(pAd, &pEntry->EnqueueStartForPSKTimer, GET_TIMER_FUNCTION(EnqueueStartForPSKExec), pEntry, FALSE); @@ -1289,7 +1296,7 @@ BOOLEAN MacTableDeleteEntry(RTMP_ADAPTER *pAd, USHORT wcid, UCHAR *pAddr) APCleanupPsQueue(pAd, &tr_entry->ps_queue); /* return all NDIS packet in PSQ*/ #endif /* CONFIG_AP_SUPPORT */ - tr_tb_reset_entry(pAd, wcid); + tr_tb_reset_entry(pAd, (UCHAR)wcid); /*RTMP_REMOVE_PAIRWISE_KEY_ENTRY(pAd, wcid);*/ @@ -1536,7 +1543,7 @@ VOID MacTableReset(RTMP_ADAPTER *pAd, INT startWcid) } /* Delete a entry via WCID */ - MacTableDeleteEntry(pAd, i, pMacEntry->Addr); + MacTableDeleteEntry(pAd, (USHORT)i, pMacEntry->Addr); } #ifdef CONFIG_AP_SUPPORT @@ -1564,9 +1571,8 @@ VOID MacTableReset(RTMP_ADAPTER *pAd, INT startWcid) /* ENTRY PREEMPTION: Zero Mac Table but entry's content */ /* NdisZeroMemory(&pAd->MacTab, sizeof(MAC_TABLE));*/ - NdisZeroMemory(&pAd->MacTab.Size, - sizeof(MAC_TABLE)- - Offsetof(MAC_TABLE, Size)); + NdisZeroMemory((((CHAR *)(&(pAd->MacTab))) + Offsetof(MAC_TABLE, Size)), + sizeof(MAC_TABLE) - Offsetof(MAC_TABLE, Size)); InitializeQueueHeader(&pAd->MacTab.McastPsQueue); /*NdisReleaseSpinLock(&pAd->MacTabLock);*/ diff --git a/mgmt/mgmt_ht.c b/mgmt/mgmt_ht.c index 0dfc3d9..3ccd171 100755 --- a/mgmt/mgmt_ht.c +++ b/mgmt/mgmt_ht.c @@ -93,7 +93,7 @@ INT get_ht_max_mcs(RTMP_ADAPTER *pAd, UCHAR *desire_mcs, UCHAR *cap_mcs) for (i=23; i>=0; i--) { j = i/8; - bitmask = (1<<(i-(j*8))); + bitmask = (UCHAR)(1<<(i-(j*8))); if ((desire_mcs[j] & bitmask) && (cap_mcs[j] & bitmask)) { /*pEntry->MaxHTPhyMode.field.MCS = i; */ @@ -389,7 +389,7 @@ VOID RTMPSetHT( bbp_set_bw(pAd, pAd->StaCfg.wdev.bw); else #endif /* defined(RT_CFG80211_SUPPORT) && defined(RT_CFG80211_P2P_CONCURRENT_DEVICE) */ - bbp_set_bw(pAd, bw); + bbp_set_bw(pAd, (UINT8)bw); #ifdef RT305x RTMP_CHIP_SPECIFIC(pAd, RT305x_HT_MODE_CHANGE, NULL, pHTPhyMode->BW); @@ -488,14 +488,14 @@ VOID RTMPSetHT( IF_DEV_CONFIG_OPMODE_ON_AP(pAd) { for (apidx = 0; apidx < pAd->ApCfg.BssidNum; apidx++) - RTMPSetIndividualHT(pAd, apidx); + RTMPSetIndividualHT(pAd, (UCHAR)apidx); #ifdef WDS_SUPPORT for (apidx = 0; apidx < MAX_WDS_ENTRY; apidx++) RTMPSetIndividualHT(pAd, apidx + MIN_NET_DEVICE_FOR_WDS); #endif /* WDS_SUPPORT */ #ifdef APCLI_SUPPORT for (apidx = 0; apidx < MAX_APCLI_NUM; apidx++) - RTMPSetIndividualHT(pAd, apidx + MIN_NET_DEVICE_FOR_APCLI); + RTMPSetIndividualHT(pAd, (UCHAR)(apidx + MIN_NET_DEVICE_FOR_APCLI)); #endif /* APCLI_SUPPORT */ } #endif /* CONFIG_AP_SUPPORT */ @@ -513,7 +513,8 @@ VOID RTMPSetHT( #ifdef RT_CFG80211_P2P_SUPPORT for (apidx = 0; apidx < pAd->ApCfg.BssidNum; apidx++) - RTMPSetIndividualHT(pAd, apidx + MIN_NET_DEVICE_FOR_CFG80211_VIF_P2P_GO); + RTMPSetIndividualHT(pAd, + (UCHAR)(apidx + MIN_NET_DEVICE_FOR_CFG80211_VIF_P2P_GO)); #endif /* RT_CFG80211_P2P_SUPPORT */ RTMPSetIndividualHT(pAd, 0); @@ -554,8 +555,9 @@ VOID RTMPSetIndividualHT(RTMP_ADAPTER *pAd, UCHAR apidx) UCHAR idx = apidx - MIN_NET_DEVICE_FOR_CFG80211_VIF_P2P_GO; pDesired_ht_phy = &pAd->ApCfg.MBSSID[idx].wdev.DesiredHtPhyInfo; - DesiredMcs = pAd->ApCfg.MBSSID[idx].wdev.DesiredTransmitSetting.field.MCS; - encrypt_mode = pAd->ApCfg.MBSSID[idx].wdev.WepStatus; + DesiredMcs = + (UCHAR)pAd->ApCfg.MBSSID[idx].wdev.DesiredTransmitSetting.field.MCS; + encrypt_mode = (UCHAR)pAd->ApCfg.MBSSID[idx].wdev.WepStatus; pAd->ApCfg.MBSSID[idx].wdev.bWmmCapable = TRUE; pAd->ApCfg.MBSSID[idx].wdev.bAutoTxRateSwitch = (DesiredMcs == MCS_AUTO) ? TRUE : FALSE; break; @@ -595,9 +597,13 @@ VOID RTMPSetIndividualHT(RTMP_ADAPTER *pAd, UCHAR apidx) if (idx < MAX_APCLI_NUM) { pDesired_ht_phy = &pAd->ApCfg.ApCliTab[idx].wdev.DesiredHtPhyInfo; - DesiredMcs = pAd->ApCfg.ApCliTab[idx].wdev.DesiredTransmitSetting.field.MCS; - encrypt_mode = pAd->ApCfg.ApCliTab[idx].wdev.WepStatus; - pAd->ApCfg.ApCliTab[idx].wdev.bAutoTxRateSwitch = (DesiredMcs == MCS_AUTO) ? TRUE : FALSE; + DesiredMcs = + (UCHAR)pAd->ApCfg.ApCliTab[idx]. + wdev.DesiredTransmitSetting.field.MCS; + encrypt_mode = + (UCHAR)pAd->ApCfg.ApCliTab[idx].wdev.WepStatus; + pAd->ApCfg.ApCliTab[idx].wdev.bAutoTxRateSwitch = + (DesiredMcs == MCS_AUTO) ? TRUE : FALSE; break; } else @@ -635,7 +641,7 @@ VOID RTMPSetIndividualHT(RTMP_ADAPTER *pAd, UCHAR apidx) wdev = &pAd->ApCfg.MBSSID[apidx].wdev; pDesired_ht_phy = &wdev->DesiredHtPhyInfo; - DesiredMcs = wdev->DesiredTransmitSetting.field.MCS; + DesiredMcs = (UCHAR)wdev->DesiredTransmitSetting.field.MCS; #ifdef WFA_VHT_PF // TODO: Sigma, this code segment used to work around for Sigma Automation! if (WMODE_CAP_AC(pAd->CommonCfg.PhyMode) && (DesiredMcs != MCS_AUTO)) { @@ -646,7 +652,7 @@ VOID RTMPSetIndividualHT(RTMP_ADAPTER *pAd, UCHAR apidx) RT_CfgSetAutoFallBack(pAd, "1"); } #endif /* WFA_VHT_PF */ - encrypt_mode = wdev->WepStatus; + encrypt_mode = (UCHAR)wdev->WepStatus; pAd->ApCfg.MBSSID[apidx].wdev.bWmmCapable = TRUE; wdev->bAutoTxRateSwitch = (DesiredMcs == MCS_AUTO) ? TRUE : FALSE; break; @@ -663,8 +669,8 @@ VOID RTMPSetIndividualHT(RTMP_ADAPTER *pAd, UCHAR apidx) wdev = &pAd->StaCfg.wdev; pDesired_ht_phy = &wdev->DesiredHtPhyInfo; - DesiredMcs = wdev->DesiredTransmitSetting.field.MCS; - encrypt_mode = wdev->WepStatus; + DesiredMcs = (UCHAR)wdev->DesiredTransmitSetting.field.MCS; + encrypt_mode = (UCHAR)wdev->WepStatus; break; } #endif /* CONFIG_STA_SUPPORT */ @@ -743,7 +749,8 @@ VOID RTMPSetIndividualHT(RTMP_ADAPTER *pAd, UCHAR apidx) mode = DesiredMcs / 8; if (mode < 2) - pDesired_ht_phy->MCSSet[mode] = (1 << (DesiredMcs - mode * 8)); + pDesired_ht_phy->MCSSet[mode] = + (UCHAR)(1 << (DesiredMcs - mode * 8)); } break; @@ -761,7 +768,8 @@ VOID RTMPSetIndividualHT(RTMP_ADAPTER *pAd, UCHAR apidx) mode = DesiredMcs / 8; if (mode < 3) - pDesired_ht_phy->MCSSet[mode] = (1 << (DesiredMcs - mode * 8)); + pDesired_ht_phy->MCSSet[mode] = + (UCHAR)(1 << (DesiredMcs - mode * 8)); } break; } diff --git a/mt7603.IAB b/mt7603.IAB deleted file mode 100755 index ba450d7..0000000 --- a/mt7603.IAB +++ b/dev/null @@ -1,4925 +0,0 @@ - : - - - - - - - - - - - - - - - - -ä - - - - - - -ì - - - - - - - - - - - - - - - - - - - - - - - - -Y - - - - - - - - - - - -H - - - - - - - -æ - -Ü - - -‹ -– - - -Â -W - - - - - - -P - - - - - - - - - - - -
-f - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -¯ -Q - - - - - - - - - - -µ - - - - - - - -“ - - - - -_ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -˜ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -5 -' -a -P - - - - - -4 -L - - - - - - - -c -{ - - - - - - - -3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -¾ - - -J - - -/ -™ - - - -Ñ - - - - -• - - -Ú -' - -G - - - - - - - -G - - - - -K - - - - - - - - - - -‹ -y - - -q - - - - -] - - - - - - - - - - - - - - - - - - - - -\ - -“ - -f - - - -# - - -# -. - - - - -6 - - -Q - - - - -O -g - - - - - - -ç - - - - - - - - - -4 - - - - - - - - - - - - -/ -/ -7 -7 -: -á - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+ -á - -² -5 - - - - - - - - - - - - - - - - - - -* - - - - - - - - -ì -Ä - - - -D -j -ƒ - - -½ - - - -N - -N - - - - - - - - - - - - - - - - - - - - - - - - -¢ - - - - - - - - - - - -ž -, - - - - -… - - - - - -2 - - -ã -Ð -? - - - - -{ - - - - -* - - - - - - -Ø - - - - - - - - - -; - - - - - - - - - -Æ - -@ -E -c - - - - - - - - - - - - -< -î -! -! - - -† - - - - - - - - -d -W - - - - - - - -¾ -S -/ -/ -9 -, - - -: - - -ˆ -Œ -8 -8 -o -– - -ž -ž - - - - - - - - - - - - - - - - -q -Í - - - -ã - -
- - -i - -, -J - -‰ - - - -4 -M - - -p - - - - -4 - - - - - - - - - - - - -g - - -A - - - - - - - - - -× - - -L - -H - - -k -A - - - - - - - - - - - - -1 -l - -o - -À - -h - -
-/ - - - - - - - - - - - -• - - - - - - - - - - - - - - - - - - -Í - - - - - - - - - - - - - - -2 -2 -< - - - - - - - - - - - - - - - - - - - - - - - - -¾ - - -S - - - - - - -B - -! -! - - - -¨ - - - - -' - - - - - - - -Ü - - - - - -j -ƒ - -— - - - -¿ - - -¥ - -7 -( -| - - - -H -, - - - - - - - - - - - - - - - - - - - - -º - - - - -& - -* - - - - -¡ -! - - - - - - -¢ - - - - - - -Œ -3 - - - - - -$ -$ - - - - - - - - - - - - - -Ä - - - - - - - - -* - - - - - - - - - - - - - - -í - - -¼ -D - - -¯ - - - - -O - - - -“ -M - -X - - - - - - - - - -A -: -c - -Ÿ - - - - - - - - - -Š -Š - - - - -Y - -6 -× - - - - - - - -2 - - - - - - - - -( -) -¼ - -¤ -Þ - -y - - - - - -= -P - - -" -$ -n - - -U - - - - - -F - -Y - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -t - - - - - - - - - - - - - - - - - - - - - - - - - - - - -é - - - - - - -. - -% -8 - -K - - - - - -> -& - -9 - - -j -ƒ - -. -. - - -” -Ë - - -Y - - - - -@ - - - - -E - - - - -R - -4 - - -8 -m -… -t -— -È - - - - - -_ - -T -Z -¯ -5 -' -_ - - -9 - - - - - -* - - -× - - - - - -8 -´ -‡ - -¥ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\ - - - -< -= - - - - - - - - - - -> -Ï -Ô - - - - - - - -ˆ - - - - - - - - - - - -1 -è -9 -H - -‡ -‡ - -2 -: -P -Ž - - - - - - - - - - - - - -@ - - - -H -Û -Ü -1 -B - - - - - -¯ - -* -Ò -= - -> -& -< - -L -L - -H -J -J - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -1 -» - -5 - -N -C -J - - - - - -= -8 - - - - - - -H - - -Ù -Ù -R - - - - -i - - - - -1 - - - -* - - -= - - - - - - - - - - - - - - - - - - -: - - - - -Ä - - - - - - -N - - - - - - - -ˆ -Œ - -N -µ -µ - - - - - - - - - - - - - - - - -1 - - - - -½ - - -¡ -B -P -f - - - - -† - - - - - - - -E -K - -C - - - - - - - - - - - - - - - - - -à -
- - -Y -T -F - - - - - - - - - - - -6 -8 - -› - - -% -. -5 - -p - -y - - - -4 -4 - - - - - - - - - - - - - -¾ - - - - -4 - - -‹ - -! -$ - - - - - - - - - - - - - - - - - - - - - - - -x - - -/ -V - - - - - - - - - - - -9 -v -° -9 - - - - - - - - - - - - - - - - -_ -` -† - - - - -É - - - -- - - -l -v -v - -C -C -w -w - - - - - - -¦ - -H - - - - -- - - - - -! - - -£ -# - -# - -Ÿ -Ÿ - -= - -M -O - - -? - - - - - - - - - - - - -B -B -B - - - -W -H -J -J -H - - - - - - -9 - - - - - - - - - -H - -j -ƒ - -œ - - - - -l -9 -U -T - -m - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -¥ - - - - - - - - - - - - - - -¸ -» -D - - - -E - - - - - - - -` -2 -2 -< -d - -; - -’ -C - - - -´ -| - - - - - - - -Æ -> - - -» -` - - - - -5 -5 - -L - - - - -— -, -, -M -˜ -Å - - -§ - - - - - -Y - - - - - - - -Ý -„ - - - - - - - - - - - - - - - -M - - - -f - - - -@ - - - - - - - - - - - - - - - - - - - - - - -Ò - - - - - - - - - - - - - -` - - -Œ - - -
-J - - - - - - - - -P -P -W - - -5 - - - - - -O - -M -Ä -Ä - - - -¾ - -i -ˆ - - - - - - - - -a - - - - - - - - -7 -7 - - - - - - - - - - - - - - - -& - -` -‘ - -c - - - - - - -D - - -Ÿ - - - -À - - -Q - -M - - - -ã -© - - - -T - - - - - -‹ -– -æ -! - - -j -ƒ - - -f -Š -D -” -” -X - -” - - -U -Y - - - - - - - - - -a -— - -E - - -T - - -_ -Y -r - - - - -J -+ - -7 - - -< - - - - - - - - -> -& -_ - - -‡ - - - -ª -‚ - - - - - - - - - - -; - - - - - - - - - - - - - - - -„ - - - - - - -r - - - - - - - - - -U -> -í - -W - - - - -a -a - -x - - - -5 - - -/ -Ÿ -» - - - - - - - -Ä - - - -f -‘ -n -“ -h - - -U -x -t -• -ð - - -^ -À - -S -c -“ - -f -Ì - - - -* - - - - - - - - - - - -* - -c - - - - - - - -¶ - - - - - -– -¢ -£ -d -g - -r - - - - - - - -f - - - - - - - -] - - - -O - -W - - - - - - - -U - - - - - - - - - -µ - - - - -S - -Q -‰ -‰ - - - - -æ - -W - -F - - - -° - - - - - - - - -g -n - -` -Y -Y - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -y - - -R -F - - -D - - - - -V - -: -£ -r - - - - - - - -° - -N -` -æ -Z -Û -¨ -R - - - - -^ -[ -ç - -\ - -1 - - - - -[ - - - - - - - - - - - - - - - - - - - - - - -2 -2 -] - -^ - - -> -C -Z -] -] - - - - - - - - - - - - - - - - - - - - - - - - -Í - - -ª -D - - - - - -Ü - - - - - -Ÿ - - - - - - - - - -ì -C - - - - - - - - -æ - - -P -Ž - - - - - - - - -` - - - - -j -ƒ - -5 - - - -5 - - - - - -n -Ä -± -¯ -t -Z -Š - - - -t - - - - - - - - - -ª -' -Ï -Ô -k - - - -2 - - -z -G -™ -œ - - -œ - - - - - - - - - - -© -Ë -„ - - - -Ò -Ò - -8 -‘ - -K -S - - - - -c - - - - -? - - -> - - - -[ -Ž -[ -| - - - - -f -™ - - - -Å - - - - - - - - - -Þ - - - - - -À - - - - - - - - -Ò - - -ð -“ - -¶ - - -: - - - - - - -Ë - - - - - -› - -R -R - -¬ -Ä - - - - - - -ï - -r - - - -i -m -n -n -o - - -h - - - - - - - - - -n - - - - - - - - - - - -= - - - - - -k - - - - - - - - - - - - - - - - - - - - - - - - - - -" -r - - -ƒ -= -ä -æ -‚ -| -, - -” -ˆ -Œ - -\ -V -³ -ƒ -W - - - - -j -ƒ - -£ -# - -& - -š -§ - - - -Ê - -= - - - - - - - - - - - - - -z -q -j -ƒ - - - - - - - - - - - - - - - - - -C -v -y -Y - - -{ - - - - -j -ƒ - - - - - - -k - - - - - - - - - - - - - -Ú - - - - - - - - - - - - - - - -E - -y -Ø - -ã - - - - - - - - - - - - - - - - - - - - - - - - - - -† - -t -X - -” - - -ï -] - -Ý -Ý -s - - - - - -‘ - - - - -‡ - - - -¤ - - - - - - - - - - - - - - - - - - - - -w - - - - - -¡ -€ - -[ -· -å - - - - - - - - - - - - - - - - -% -U -| -w - - - - - - -Ò -) - - - -— -ë -² - - - - - - -c -c - - -‰ - -4 -4 - - - - - - - - -Ž -µ - - -F - -Ž -œ -¯ -æ - - -! -! - - - -œ - - - -¿ - - - - - -` -x -’ -” - -€ -° -° -´ -´ - -q - - - - - - - -– - - - - - - - -J - - - - - -’ -µ -² -· -2 -: -’ -t - - - - - - - - - -¢ - - - - - - - - -” - - -‹ - - - - - - - - - - - - - - - - - - - -ƒ -= - - - - -¬ - -¸ - - - - - -m - -š -Š -D -· -A -: - - - - - -· -· - - - - - - - - -V - -N -y - -# -Ø - - - -Š -£ -¤ -M -ˆ - - - - - - - - -‰ - - -Q - - -’ -D -Ð -h - - - - -„ -„ -¤ - -Š - - - - - -p - - - - - -§ -é -é -. -. -¨ - - -5 - - - -§ - - -` - -‚ -¥ -¤ -æ - - - - -è -è - -³ - -µ - - - - - - - - - - - - - - -§ - - - - - -Ú - -¤ - -@ - - - - - -¦ -§ -_ -± -´ -A - -7 -Y - - -L - - -c - -¯ - - - - -À - - - - - - -¿ - - -ã -Z -¯ -³ -t - - - -ï -_ - - - - - - - - -Ì -Á - -™ -œ -Ì -î -Á - -6 -6 -s -Û -Ö -Ò -Ò -Ç - -Ÿ -ì -= -P -¢ -‡ - - - -© - - - - - - - - - - - - - - - -¥ - - -É - - -M - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -‘ -´ -´ - - - - - - - - - - - - - - - - -\ - - - - - - - -v -v - - - -; - - - - - - - - - - - - -¢ - -8 -³ - - - -Œ -3 -¦ -Ë - -p - - -G - - -¾ - -$ -$ - - -W - - - -± - - - - - - - - -@ -E -¬ - -# - - - - - -ä -Ÿ - -A - -Ö - -â -™ -¯ - -™ -Ÿ - - - -‹ - - -x - -« - -Ç - - - - -¦ -§ - - - - - - - - - - -Ñ - - - - -Ò - -¼ -Ä -Ä - - - -¬ - - - - - - -ž - -Í - - - - - - - - -D - -H -J -J -H - -Õ -Õ -Õ - - - - - - - - - - -ž - -Ò - - -¡ - - -h - - -¬ -/ - - -k -A - - - - - - - - -5 -å - - -“ - - -Ð - -G - -H - - - - - - -7 -À - - - - - - - -Á -¦ -® -¬ - - - - - -Ä - - - - - - - -Ê - -Ø - - - -Ì -À -È -Ñ -Õ - - - - - - -Á - -Å -4 -— -» -` -o -q - - - - -â - - - - - - -Ò - -à -E - - -F - -ˆ -x - - -j -ƒ - - - - - - - - -+ -] - - - -] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -N - - -˜ -˜ - - - - -i -ˆ - - - - - - - - - -¶ - - - - - - - - - - - - - - - - -, -Ä - - - - - - - -â - - - - - - - - - - - - - - - -à -” -ˆ -Œ - - - -Ù - - - - - - - - - - -Š -Š - - - -V - - - -ƒ -¼ -P -Ï -Ô - - - - - -= - - - - -— -˜ -™ -¤ -º -Ë -Ì -í -q -Ç -È -Ñ - - - - - - -Å - - -Á - - - - - - - - -¦ - - - -ž -ž - - -Y -Z -Ö -. - - - -½ - - - - - - - -{ - - - - - - - - - - -¡ - - - - - - - - - - - - - - - - -› -® -Í - - - - - -à - -í -í - - -’ -’ - - -œ -§ -Ö - - - - - - - -C -° -± -² -³ -´ -µ -· -“ - - - -5 - -Ý -É - - - -´ -s - -¨ -A -: -Q - - -§ - -U - -ß -Ñ -Q -Þ - - - - - - - - - - - - - - - - - -º - -Ý - - - -ï - - - -1 -¤ - - -¤ - - - -S - - -ž -µ -¶ -x - - - - - - - - - - - - - - - - - - -Í - - -™ -ê -Z - - - -> - -ï -» -` - - -+ - - - -[ -Q -‘ - - - -g - - - - - - -$ - - - - - - - - - - - - - -Û - - - - - - - - - - - -í - - - - - - - - - - - - - - - - -® -\ - - - - - - - - - - - - - - -G - -1 -Ù - - - - - - -ì - -¸ -Í -G -Ï -Ô - - - - - - -× - - - - - - - - -Ø - - - - - - - -ê - -² - -“ -š -Ÿ -ë - -Ç - - - - - - - -Ú - - -ß -t -± -< -ï -_ -Ð - - - - - - - - - - - - -* - - - - -{ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -& - -M -\ -„ - - - -r - - - - - - - - - -ð -« -Ü -Ù -ã -î -Þ - - - - -ß - - -5 - - -/ -ê - - -< -¿ -• -î - -h -î - - -
- -x - - - - - - -* -c - -j -ƒ - - - - - - - -ƒ -= -š - - - - -ˆ -Œ - -Ù - - - - - - - - - - - - - - - - - - - - - - -° -£ -# - - - -ž -ž -Ö - - - - -¼ - -; - - - -5 - - - - - - - - - - - - - - - -ß - -M - - - -º - - - - -Í - - -ê -Z -à - -t - -Q -è - -å - -ã -Û - - - -í -î -ï -ð - - -è -é diff --git a/mt7603.IAD b/mt7603.IAD deleted file mode 100755 index cbcb650..0000000 --- a/mt7603.IAD +++ b/dev/null @@ -1,53 +0,0 @@ -’ - -µ - - - - - - -5 - -Z - - - - - - - - - - - - - - - - - - - - - - -C - - - -
-± - - - - - - - - - - - - - diff --git a/mt7603.IMB b/mt7603.IMB deleted file mode 100755 index 2377081..0000000 --- a/mt7603.IMB +++ b/dev/null @@ -1,1097 +0,0 @@ -!p - - - - -H - - - - -Y - - - - - - - - - - -> - - -W - - - - - - - - - -© -
- - - - - - - - -j -ƒ - - - - - - - -@ - -_ - - - -L -a -3 - - - - - -N -¸ - - - - -q - - - - - - -ç -[ -ä - - -† -K - - - - - -X - - - - - - - - - - - - -Ž -= - - -Ä - -, - - - - - - - - - - - - - - - - -à - - - -ã - -ª - - - -± -E - - - -! -¬ - - - - -Ì -Á -¨ - - -' - - - - - - - - - -¥ - -{ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -ê - - - - - - - - - - - - - - - -R - - -6 -y -v - -# - -® - - - - - - - - - - - -) - -( - - - - - -Ÿ -¹ -% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} -… - -¿ - - - - - - - - -8 -‡ - - - - - - - - - - - - - - - - - - - - -; - - - -< - - - - - - - - - - - - - - - -Æ -9 -U - -2 -u -A - -Û - - - - - -Ó - -0 - - -1 -£ -¡ - -D - -z -G -B -T - -Ö -œ - -/ -€ - -c - - - -~ - -² - - -I -J -H -b - - - - -h -" -C -` -+ - -V - - - - -Q -* -í - - - - - -4 - - - - - - - -Ò - - - -s - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -? - -- - - -S -* -^ -7 - - -e -c -d -” -F -ˆ - -³ -Y - - -f -š -& -¼ - - - - -> -‚ -n -C -. -\ - - -] -w - - - - - -P -a - -t -5 - - -{ - - -„ - - -! -« - - -h - - - - - -l -i -m - - - - - -O - - -| - -ˆ -Œ -ƒ -W -æ -Y -A - - - - - - - - - -È - -g -n -C -y -v -Z - - -k -Ú -› - - - - - - - - - -´ -Š -: -¶ -ž -$ -> -à - - -á - - -· - - - - - -p - - - -a -@ - - - - - - - - - - - -’ -R -" - - - - - - -‰ -: - -= -– - -» - - - -j -ƒ - -‹ - - -† -K - - -½ - - - -Î -° -Œ - - - - - - - - -¥ -¦ - -Ž - -¿ - - - - -G - - -¢ -É - -M - - -r -Æ -Ü -Û -â -¯ - - - - - - - - -‘ -Ù - - - - - - -“ - -Q -* - -À -Õ -x - -• -, - -ˆ -Œ - - -W - - - -¾ - -Ê - - - - - -Ï -Ô -= -– - - - - -Å -Ì -Á -E - - - - -º - - -— -˜ - - -D - -¤ -z -™ -Ë - -Ç - - -È - -Ñ -o -q - - -§ -P - -g -. -× - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Ø - - - - - - - - - - -Š -µ -ž - -/ -Í -€ -· - - - - - - - -ì -C - -î - -c - -² -Ð - -" - -Y - - - - - - - -Ý - -Þ - - -ß - - - - - -ã -å - - - -ë - -C - -î -ð -ï - -é -è -% diff --git a/mt7603.IMD b/mt7603.IMD deleted file mode 100755 index 939d5a4..0000000 --- a/mt7603.IMD +++ b/dev/null @@ -1,21 +0,0 @@ -’ - - - - - - - - - - - - - - - - - - - -g diff --git a/mt7603.PFI b/mt7603.PFI deleted file mode 100755 index 4a40666..0000000 --- a/mt7603.PFI +++ b/dev/null @@ -1,4 +0,0 @@ -X - - - diff --git a/mt7603.PO b/mt7603.PO deleted file mode 100755 index f48346a..0000000 --- a/mt7603.PO +++ b/dev/null @@ -1,2 +0,0 @@ -1 - diff --git a/mt7603.PR b/mt7603.PR deleted file mode 100755 index 4bf0e70..0000000 --- a/mt7603.PR +++ b/dev/null @@ -1,49 +0,0 @@ -# - - - - - - - - - - - -> - - - - - - - - - - -á - - - - - - - - -å - - - - - - - - - - - - - - - - diff --git a/mt7603.PRI b/mt7603.PRI deleted file mode 100755 index 0b316d0..0000000 --- a/mt7603.PRI +++ b/dev/null @@ -1,2384 +0,0 @@ - -IFã3Vå²Ïß÷óû~¿¢ÿvˆ - ("+€@€`` „ -H -$ -÷ìEBüÄ>0¼§-â^Ñ-±*{uK%ë§/˜®¸â‰´â@… -b" - -‚ -`%I h - - -¨Ü -¡€ð4&0$PàÛÄÐ@„Rp¤P0$ -f - A -) -j - e - &@ - -’j=LT - - - -, - à0 -D -‚ -@ˆDBÜ -q`¨„)‡ -B‹ € -À - - - -2$i0ˆ¦Á ,€Å -8€4 - -’H@È
P@ -²(! - - -8B!↠- - - - - -ÍeCÜä06‡/r^ñ=9*9AÉ „«žú¸¾º` ÃHˆ - - -€@È!8 -@ -€ -@IP€”`D„ a%JÔD# - -б\>%9ah¾Àä‰Ö‘x¢&J)¾ƒP€ - - - ÝBYb - -€B -@@ -˜@! –N - - -ˆ -0@0 -ûo - -ŠP --(6+ -¦ -$Áth@)¢¤ „® ‘€ -`‚ - -D -@D€¢ -À@ - - - - -¤P €€ -HÃ@"(ÁÃ)4„ - -„8€ - - -€Ä– - -@ - - - -¢H - - - -±I - - - - - - - - - - - -@ -$ - - - - -$ - -À^ J -Ý - - -˜ -0‚ -€ -:l -À±#IТ?&±” eôt& - - - - - - - - - - - -‚ - - - - - -€ - - - -D# - -X@ -1 € -R - -A'*Dm›*ð— [°“ÛÿÿlS!—Ô§<aËÐ…Â -;R -2BDpH0“"ºÌPƒK(‚$€ƒ @!€d -– - -@ - -€ -! -Dm0I[„ÀeÃH€ - -@ - - -Et - - - - -€ -Õb0 -€± -€ - - - - - - - - - - - - - - - -D -! - - -@€A€ - -[L P-,¶º"€F€°(€òð - - - -D -(” - -@ - -2ˆ pG - - -Y®0—Á˜iÕBõ{áŸ,߇'&
dC€‡ÈjÀ€€ -` -XÌ -D[„¬Ô,–—£"vô,áöÁG›irr - - - - -€ - -€ * -åRb(Õ A - - -2ZEB0 - - - @ - - -š!@d -„ €`™# -Ú'“ThA -$$BÃäŠH - -õÍ.dpwQ¿a -MˆÙ°Õ¥šö‚$Xt©â.Vƒ6G —S7Ìg¢* Ë3Zb -à *Ìbת‚ž8>‰%‹’M„ ) -²U‡þ§› f„•D¾ƒàM«rðŸÄHWNð«R1°Â¨aW¤WO[ÉDÀÈc=¿ð£‰á‘}]™÷Pº?¡í¹J)ìü/h]Ó„
£\}éô4”}Y™K[¶ÕÑ2?‘÷‰ýӬߟŸß-ÏöÐøɳN|õ,—L}«0Ή\•û~íÊÙ4¤S -J™Á" ¶O -€ Ô »DCÐ ¥¥L+P (pVö+ƒ¸D¤€à,ÿСKHåö?8ö.^©b³¿ïÆÞ~¨ÿ¹ûÜöß«ýúïöW[+;ö·òþ/›ÿþè÷ÿŸŸ»Ö½&™[¢þ1ú(Qƒ1Â(¡%1¤†@0œFÒ”`Á¨K€!L¨ˆéL „NH C!@,* - -B - -Ï ’€"œ„ -ˆ - - - B - -—i -„Z0 -! -€ - - @6Š‰ˆ~‡²8I”ÕSñp/!÷7€•á
-@ -#$±$
0’ -@ - - - -€ -Î T - !i -1T) - € -½ °, - - - - - - - -! - - - -@$ - - -€ - - - -Ú€%a€*A{ -à - - - - - - - -®°u²x -B&ˆÂBƒÈODÔ - -€ -Œ€H -€ -5b6×9T*LD@ - -ˆ - -€ -@ -H¸á*Á© - - - -@ - - -D - - - - -!‰jà -)Š+ -@ -10 - -( - -]Š‡8U‘1Sa¬ß†N- - -‚ -‘ - - -1 - -@ -d‚H -"À‚ - -ƒ -€ -å€ÜVß@'£€‘@ - - -€ - - -¥H - -Å - -(T*ˆ `¥ - -@@@ -!0€ - - -AY
¡$ - - -„ -€ -Ip - - -€Œ - - -! - -Hӊ€ - - - - -@ - -! -D - - -! -$ -
#AR - - - - - =! - -ª(0€ )a¤Œ)(h,•” -XøH@Y - - -„h)6Öôk„ȉDIĦ0 -¸lÍAp - - - - -Z - -´é - - -@ - - -!1! -’ -@ -$‚€ - -¡H - ÊH - -1 - - - -€ - - - - - - - - -À< -^ç#x”ªý\% - -À -ˆ - -€ -@( € -"Tb– - -! - -€ - - -((A - - -9a‚ - - - -€ - dÀÖ´u‡”– - - -$ -@ - P - - -€$ -DA@€ -Ûò -.¡ÆИª„"g Ò?† -4 - -J -P‚ -@Ä -P D°õÙB ‚"(„R - -
@€ - -< —4@)€Ô¨` ,fƒu <QD÷/CðÿïÛ½ßÜ£ -¸²ˆùcH€Rø =ºÿöîû÷=÷ï@0@@ - -„ - - - - - - -U - -BH@,9ØÒu† ’¸ - - B@€ - € - -X --n - - - -€d4A(@ pä - -‚@ -àÍrƒM%§Ð" - - ,@@ -T -´ €@ -P@ -f - -@ŒS¿€<¡H-@#]RÁXÂa`„FÂx -ð¹ï¿¿ýMPŒ„€˜ , 0Àb !H˜|ê³ÿÿÿ÷ûÿý#V - - -0@@ - - -‰Òš$M€â¹=
uý;¿óh7»×—oŽ¿bÅF€®’€Z@L‚„P - -^B - ${©Lei¼²'§ò÷æ¡Þÿfä?Z6ú7 Ä„€A -P€@ -H’€ - ‰B˜¤\Ìœ -d2NG - - -°6'‚às*<ßâvàW.åíæ -€ - - - - - - - -€€0 - - - - -‰ - - - - -50@ - - - -nö†ézWÇg“ - -`Å’À€À - -`À - -¿~…нþ:ÿ¿fïFæüýtÇ{?ZÃ\¬½ýêÿ)‹Ÿ”·âþ€w·ÖTôÀ%ˆ -@•Â0” -„%¡*5¤BDÁùŸP~¹Û¼ %%K#'$Ù4 IHm€`±á0I›)R³@Yõb -4°Ö‘µšùÿÿí¯ÿÿwû>«¼÷þq!Ë"@@„ - - ‰ -\
ƒC(&QÂFHP€!HA&TWràÿ0ED` )ð@€ -@BÌF - - - -$a„ - - -BB -M)Rˆ¢z - - -@ - -! - - - -K?ÊYˇ{ý§ -„ = - - - - - - -)` Rff - $ - À - - -‚ - - - n@È[„A§£$”P - -‚+`•4RbF – -) - - -@ - - - - -H -Ä - - - -D -€@ -$Ë:¢‘»I’×ÿûñ‹¥Wä‡Ä5)çØÅ(N)DI!Ä - -€‚`$!'B - - - -1 - - -F!Ai - -€ - - -tdwtåÒÁÙ÷‡D— - -¢€5’ - - - -$ -@ - - - - - $) - - -¨[È -°n`€ -! - -9 - - v@—îYA€ - - - - - - - € -À p€ - -@ -P - - - - - - - -I€ À
- -J! -ª°3„þühîÏoeûáWj÷ûÆ - -ŽšP@ - -BD - - @€äl -@ -" -B -I óÐ - à8H„@@8 -‡@(ÆU‚1 „ €D - - € - -@ -!€‹‘¨ºSÂôPaŽ©–J” - - - - - - - - - - - -@€@€ -€ -dæ# - - -0(( - - -@P„ -@ - - I"+Ä}!*¹Ç ˜)8Õ[÷sés¬•„'X!C -lÀ!È -€Cå -ˆ`j
‚ -€ - - - - - - - - - -Ù - - -Q - - "äà0‹@äJ—Ä%)Ô"HF½Œ ‰þ ! -‘p‡ - -„`" -¨’kî÷ùºÿ@ - - -!d€É@€ -#`€AP -€$€H€B -at1ÀFŠq‡¡ - - -`@@‚€ - - æ•ÁB‚E‡‡ - - - dÅ`@€ - - - - -BL€ - -€ - - -@ - - -¡0ŠFI° - - - "äà0‹@äJ—Ä%)Ô H@¹Œ ˆü ! -‘p‡ - -„`" -¨’kîçýº?ÿ@ - - - - - - - -Hè - -<QÁ -(&!C÷" D - - - -ƒ - - - -%‡ - -ƒ@ ¸‚Y -C - -‚ -B -‚ -Ì|¡krù%àX( -! -H - - - -@ - - - -àÉ
*4„ -BP -hRüOõÇ`› - -°—ÒP4X@"rÆ„P AA B€R€ - -` - - - -@ - - - - - - €Ì -„$*QiDÀ - - - - - - -@€A-€ - - - - - - - - - - @ - - - - - - - - -DkàHC@ - -A”à … - -¤ - -`/ - - - - -¨ÑŽ4Œ - - - - - - -„ - - -@©• -" -À}G8C +-…DÖ - - - - -˜ - -° - - - - -a@ - - -@ - - - - `B -€ -`’ c‰%‡@ - - - - - -€ -€ - - -€ - -IŽ@ - - - - - - - -( - -ƒ°Bp‰¡
!4!¸$À ku;tÿÀkB< W-…;‚H þëÙ†’AŸÀ°‘8 -4`… -@@ ” - Qª -4,ä -H01!U˜bd€ PÐ|Æ$˜$"Ü -èÿQÃÿa‹l`˜!ŠL€–¯h þûû¿\À®D -€D - -P ( -¥Mد£ß¹¾xV¿þûï£ì½†mýûYÄ*%T -8yg³=\ -x@‚!‚ - € -0 - - ` -2" ^<Jø$4ÁAnS)$ - -P - - - - - - ƒpI*‚$·Q t¡° - - - -€€ˆ@ - - - - - - -a -9" -! - - - - -el%ã{‚‹Wƒ@• -~ÍrÖ - - -X€€ -@P -!P†‚` -!@ -"fJiE…@¡ -ð -B -X -€ - - - -@4 - - - -I´@ -Ð - - - -P€(@€”<IUA - - - - - - - -H@ - -@aDcSÂÁD“ - - - - - - - - - - - - - - - - - - - - -„‰@À,@€€€ -@ -€1 -!*>Ô!<þªòw·þvÿïëßþ7?÷_o÷ûýGÙ÷8ÈÓ@I` - - -"‚hJÐH -D P€Ð%¥$È -I°ˆ -( P¡H -F(#€ - - -ꄨüX€€ - - -$ - - -€@ - -F}é³{Íçg£ -H -" -$"x€#`t°ˆH - - - -‚@ -1!D - - - - - $" - - -@p ƒ! bX@(@ -€ -" -1 - -† -¢ -! @@ - - - -~¤ !À€!& -@ - -€ - - -! H - - - -~ !@€!& -D -€ -† - -! @ - - - -~ !@€ Ò -@ -€ - -€ - - -@ - - -A -L>‚¬èÿÿ¿WzµøErDž¦_áËâ…ˆ˜PÀ€ - -P -3! -„ -A -@ - - - -,‚á``@€€@$@ -D - -) ˆ
BÁ -D -F@ý/Ð - - - - - -$ - - - -€ - -–.ÁÍ - - - - - - - - -„ - - -€!@€ - - - - -G€€p@ -À‡€0€ -@@’ä -ˆ - -B €@ - -BA" -àW€ - -P -îê$T4$ -à - -€ - - - - - -% -¢JŠÂu - - -$”@b - - - -b -„ qf¬$wÀà,i#<¿ìG9¡’.ócT˜ˆÀQ@ - -‚D -Š$ - - -©²Æîýû5~WÊ -€ÀÀ -€`‚1 -0„ - -$" -J - -@ - - - -¼# -’€ @d0HD -@d -0‘Pƒ!ˆX µŒ@ -! -¸ ‚@ -A2 -Äí‹*ù§¥•yÜ—Óÿûÿ®©ßÔŽ_mc’çZRà˜ -A€E -,o6¡\ƒ$ëÖ×n+ßÒ‰„xV”@" -` -P€‹ - -a†@
F -@@ - - -„¢ -€€0 - - -@ - D - - - ´d - - - - - - - - -Ä -ŒP $ -D -! - V‚ÄIª“²²Ž•øóÁŽ¨_–.‘AA‚$ - - -€ -¨” -@ - - - - - - - - - - - - - - - - - - - -àI˜!àÀÈ - -€!PhI€AC@€°L -¢"”0ƒ@D@HBP !D -„ -VƒG! -Œ"Q¨‚–*‰a -‰€L„ „! -¢Tÿ—€` -JY’Ð"?ÑwùÓŒQ¨‹ÈVp¨I¢N|åDuª`ÎøWÁ»{DBX4 A -é! ¡P -P -P€J‰V( - -0 - - -x@$0 -k*LËçéJ`ùà‘ªº$¢Ê
¤ a%—Ø€q"lÀê::Â2b‚ 'B¸ -!€ -A -DÁ` - - - - -Ø@ID† -@ -! - -€! - - - -$0 A -€ - -€` -Š‚ -€D - -Ð@ -@€ - - - - -¦“½1‹C -P - -€ - - -` - - - - - -@1B -P - -Ê -Tl€ ( -Œ -H - À -"x - - - -@ " B”|ÀH«Ú8% c:êÅ„²&1Ad - - - -E - - -À±1 - - - - - - -dvˆÀÛŒ `À - - - - - - -I -€ -@ - ‚X@ -†X£ s - - -@ - -*Œ - -€ - - -€@ - - - - -@€ - - - - - - - -@ - -‹ -Á - -X(0h€ -Ò - - -àQ -€ - -) -€ - - -™ -€ - -€ - - - - -€2 - - -X -€iB” -P - - - - - -„ -”t @ - - - - -€$$ - - @ - - -€ - -@ ‚ - - -@ - -H
Ð - - - -` - - -H
Р- - -@ৠ- - - -H
‡ÁÒ€ -* - - - - - - -A€ - - -H€ - -P - B - -$"€ ƒ DH$ - -€‚` - - - - -NˆAÜT þ3àk@¦Šd - -0 -€ - - - -$ - - - - - - - -1 -ü?€) -@` -B -D ! - - - - - -H
‡Á’€ - - ‚ - - - - - -᧠- - -(‚ -$B - - - - - -DD - -aÅi1 -B -bL% -4 P)E€@ -A -ž4®AùDF&„@ - -ˆ€ - - - B - - - -ä€@€ - - - -`€ - -d B.Áù_O/€È - -€ - - - - - - - - - -1 -À` - - -$B - - - -$ -H - - - € - -0… -b! - - -$B - -Q - - - -€ -$ - - - - -„LD - - DD - - -3 -e‘ -* - -$€( - - -NI܉Âi - - - -
$h¢3P"£,…B@ - - -×%!
0€‘h - - -@ - - -T` - - - - - - - - - -Al@[™DÐ -€ PH -Š‚ - -1#„€IN - Àh - - - %` - - -4 - - -e«€•âú¼ÑßžŠQý‚/º™Ûò$þyÑÃæùàöüïýÿû¿{lTIl°Q¨Ã|n²Ö~)pñÕkì_ -eÖV+ÁG%ŠèY°ÝEw—Ÿ’ôž#ÝTL‰•]öï¥D‰ÄŠVá/ÆL«>`x´¼÷C7ðÞÀÞÂÒœ|ÿÏFOlXÍDMö9žv[Ñ÷Á€as'–uÔ´6ÌÏozIûÿ˜zªxÏfV³ãÃÜ;<ï?o°ëÿµù„Ť~6{¯ÒÆßûsT_ŠÍÃÞÌ;YV÷¿@½gÚ£qN]oß•Žu÷üTMs)ö·Ïý¼.ïZ‚cy¤Èo\Cê?i߶E¯Wÿý{ÆÏ{¦oV^)š¯õáî®ÿ¦Sl’Að5šÄðÇó©NϪ•ƒÆßw”Ð× -ôÇì¹COr7ÐË3ß'{Ú<žpðúLÓççW½‡zêÝ÷ÿòí÷}ßйöEýSþõß?¸×nßÏ÷îØ»ßã]ÿÞ^üþ_wË=[wþßî›þÕgÖüø¥_Ï>»½ÿnDýúþg«é¼ÝÕïÑü`³Qžæמ¿Ÿ§»v<&1ÌO¯¹õÚ܇ßÏ¥Bá¤fmR×õ¼V–®LÚ§Ö°]@äÙ,.L°àŨÜÂmP(2Iæ\öšJïËi=諉ÀÒÓXE,Ó·@å8 -B tË¢Ò1ôÑÁABc2”Cnj;F°êl -ËYç3€}~:\â4$ÀWôžgC4žl2¢Žáétì]u+¥?cZ-¿@«ûÅ9ð¿·A½ŽY´\Ñøe“’ë½Ãà´7ýûÁWÝE£Ëà"ZÕV>©Ö¸¯¿ûçûsüzÙ¿ÿúý÷ÿçìû?¿uÿ/ÿïþ¿×þþïÿÿ÷^ßïÿû]§ÿ{Víö¾[¶¾<;»ýÈþºe7ï×¹$j/ÏzrêyåU™ë½Ùã#åk÷íÑBAª8(w£áZ*XoTi"Væé2ý{—¾êcgÿ¤‹Mg×™Gx†¶8äï•ý6—ÿ/9]Æö}ve›¶è^Ùå»6u÷óV7Uï|Ÿí{£ï}ä™oÎîÒâ†h²ÖËŒ¦n}Ê—Ì4ã-¢ë{è-r¯HNüAgÜ -„IÑìÊ5Oêz-‰ë*ŸvO;×6Oúÿûÿç[GµúÿÎvÿïÖÛ~»äþïþÿûßÿÿ>¬w÷¿ÿ¯þvÎkû›×ºûäo¿Ü5D{žO€·~|Šd20ÚVAÌ”Ð!@Àìwd5A ¢(A §G @˜àH r…, ´L a²@”à!% -@ - B@B -L`µëúÏl)=Ó/9FëšÕj•Å¨«GYH ]¤¤±$Gµ“Ç“nË»ìT)‚Ãû¾6™4wÿã/Ë;
- -
€F - - -Œ›¨È - - - d(F A ùE€ - - - - -€4 -ˆ - - - -EDÅP_SUp$ -QìQr - - - Ê’O.€ -$H -%ƒÀ -‹( - -‚‚: - - -¾P¿í‹b - - - Àªµ‚`Q -Ì - - - - € - - -ˆa - - - - - - - - - - -0 -@ - -` ÆX " - - - -I - -` BÁÿ( -@ -’‚E - -€þGHS:•˜°°\ÖŸ7ú{¦ö?
€P†‹ - -‘ - -H - - -(€ - -@B -@ -JdUJJÂä°£X0ôZýyh'‰Ÿö‡E!dC¥ -,VPa -¦@ -/6h#‹¨ÂLª’b -„
@ - -€B -° -~ -
{4\+(%®¡%&†€-IÖЊ© * A - - -A€ -€P 0 - € - -þÈP - - - -2€ -@ - - @€ - - - - - - -€ - - -€ - -òÿ¤2 -A€O˜ -0€ -‰D -`|" -2
(£ -€À - - $ - - - -@ - - - - - - - -H -B) - - - @‚a" - -° - - - - - -Z -H - - - -t -@ - - - -B€ - - - -L˜$ @ - -!€ -ô\˜ -D -€ - -@ -zWfƒ’4¡ÎÈš B -؆•Åÿ
-%",A€ - - -Ê - -@ - - -à - - -„ - - -¥‡Dñ „€ - - - - -€ - - -€ - - - -D…+ - - - - -X}ÛÖ¹ííçd’@ - €(i - - -€ - - @€ - - -@ - - - -(A*BI4D -`jhS‚ WƒL“” - - - - - -@ &Ù - -DDT „ -h‚ÿßßÙÿ÷äÚ‚ - -"„;é9§P5ö~…h×È’ðÞiå1²Œ -¤€‰ ADAppÑŠ%á -Q -`H$¡` - -0 @ -„¤ -„ - - -@ -€ - - - - -A€ - - -Jp
- -@0 -H - -r$¢
! - -ˆ -Y - -@ - - - - - -(b -# -JDrd 0 -€ - -@0 -‹H -$L( - - - - -@ - - -@ - - - - - - - - - - - - - - - - - - @€ - - - - -%‚ -€H”T -a‚¶ - - - - - - - ˆ - - - -„¹( - - -@ - -% -ˆ$„à - - -Ü¥ -€ p- - - -A - -„ -‰ € - - - - - - - -@ -D -( - -Á -z - - - - - - - -@ - ˆ@ -‘Ž97 - -( - -(H„ - -0 cTP -@ -€! - - -B - -CH@ -ªˆ -dT -h˜ - - - - - -Ÿ]Å™å‡@€ - - - - - -! - -@ - - -` - - - - - -@ - - -‚ - -@ˆ - -€ - -€ - - -!€)¢€.Ô` -gA - @ -€ € €‚$ - - -( - € -@ - @€ - - -@ -€ -€' - - - -€4 - - - -@ - - - - -P -€€ ù -uþWë^}µ§lÓ - - - - - - - - -€€ - - -A - - - - -! -€´€L(šÁ6tPjÁ)V - -HD0, -– - ²3@ - - $n + €FÀ„XN - - - - - - -€„ -d‚H -"À‚ - -€@A - - -‡ƒ -!’ -# -$ à’ˆ -Dø @¹Ù%N±1—>V##)níIÕõ.ѵ÷ëbéÝ5ÅúøØÝ_ÛÜVuÏÞ+!ŒŠšÀ§`ÒuVJÅIŠaA˜TT„DHˆ -„„ÄéÀÀ¬ ¤ÀbH4‘Kq -B #RE³` -©Ni Lˆ"Q¬“zh>‰fˆ„mâ̬J! ¢UaÈ„e‘_ -‚ì—ÍíËïý?j÷¦!÷9¹ÿY÷ÿs¿¨ÿößØ]wyÚÇxºÒ†jbÂ4ƒF\0@É$„˜€@BÓ -JZÁ -C‚ -Ì’¢€@hd–¬‰â.TH4Bˆ,"¨£ÔpHOŠ€Q„m‚¤@XPK ¬"ƒB6çdP0’Ž\y -D - -$ -P -( - - -¡ - - -(€ -@ˆäÏ\P -=]F†€8€ª - - @@© ˜ -ä €I‘ @€ -(-~€39³‰œèåÞüu„§ŠZƒ„¤@ò - -‚ÁL¸ -‚B'‚D -€ - - - - -€ -€ - - -„ ”ˆ1 - - - - -" - - - - - -1c€ - - - -¦Ã ( - - - -€À -@0 - - - - - - - - - - - -H -•(Na„'†ñAÔI0‚P - - - -E - - - -"€ -" -XrÁ¤19Þ ˜¦ß - - -€(J„nD+–``'’–,Àæ€6$Rt -Af€ - -q -
\ˆ@ÁPÂË0˜ - € -€ - - ( - - - - - - - - ¨Ì - - - -¤=ÁfÕY -€ - -b<íï§ë}GÄÐ -„!L)¢ - - - A - -@ -Š - -q³\í?0€ -C -€ - -á‚ξÚõpä] -@ -z€€ -ƒiE -„C - -$jà! - -H -ð -B - - - - - - -$ -@ - - -p~„HÚ†I§j - - - - - - -“ŠJ - -!tÞíÖY¥gÀš -` - - - - - -“ŠJ - -!t^íÆX¥g@š - -H
- - - - -H - -i - - - - -H - - - - - -tLWŒç§D’ - !@µSaà]†H€LÑ LBP - -B - - - - -Á - - - - -ž%ÈšqA€Ö -@ Pñ!4(A€Ð - - - -@ -@B -B@x†X ™:!Æ
+$£C"4" -@ - - - - - -@ - -! - € - - - - - - - - - - -@àQS€ - - - -E$` - -D€ - $ - -@€0( -,â - -@€HH€ -ˆ - -è‚A€F - -„„ - -%ˆ -@ - - - -À - - - -€ð€0€ - - -ˆ3‰Xª" -TD - - - -â¸
ýÉÂL” 0 - - - -„ - - - - - - - - - - - -
"`j€ - -á}AËÿŒKe¥tö’ -À€ - - $ - -@ -€P„„€ - - -L - -á~“ëÖÇ#}‡D’ - - -ä0 - - - - - - - -ˆ - - - diff --git a/mt7603.PS b/mt7603.PS deleted file mode 100755 index 224e234..0000000 --- a/mt7603.PS +++ b/dev/null @@ -1,6706 +0,0 @@ - -H - - - - - - - - - - - - - - - - - -Y - - - -gAcmMCS_HT - -StatusCode - - - - - - -AcmOutTime -AvalAdmCap - - - -AvalAdmCap - - -Processing -_ACM_IPHDR -_ACM_IPHDR - - - -Identifier - - - - -FlgTxopReq - -ACM_STREAM -FlgOutLink -PhyModeMin -StreamType - - -ACM_UP_MAX -GNU_PACKED -TIME_SIFSA -TIME_SIFSG -TXOP_Limit - - - -Processing - -FlgUapsdBE -FlgUapsdBK -FlgUapsdVI -FlgUapsdVO -TXOP_Limit -StatusCode -DelayBound -MaxServInt -MediumTime -MinPhyRate -MinServInt - - - - - - - - - - - - - - - - - - - - - - - - -ACMR_DEBUG -ACMR_HTONS - - - -AcUsedTime -AvalAdmCap -NumReqLink -AcmOutTime -ACM_EXTERN -ACM_EXTERN - -ACM_RTN_OK -FlgOutLink -PhyModeMin -StreamType -_ACM_TCLAS -_ACM_TCLAS -PortSource - - -_ACM_TSPEC -_ACM_TSPEC -DelayBound -MaxServInt -MediumTime -MinPhyRate -MinServInt - - - - - - - - - - - -TxTotalCnt - - - - - - - - - - - - -BW_SETTING -cmd_msg_cb -CMD_MSG_CB -EXT_CMD_NA -FW_NO_INIT -kickq_lock -RX_RING_ID - -tx_sdio_ok -AndesLedOP - - -W - - - - - - - - -AndesLedOP -ucReserved - - -ucBssIndex - -aucReserve - -ucTotalNum -CoalesceOP -PacketType -BssidIndex -WPAVersion -GPIONumber -PacketType -TCPDstPort -TCPSrcPort -WiFiStream -ucBssIndex -ucReverved -u2Reserve2 -ucReserve1 -ucSlotTime - - - - - - - -aucReserve -ucExTenCID - - - -aucReserve -ucBssidIdx - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -u4RxFilter - - - - - - - - - - - - - - -ucPmNumber - - - - - - - - - - - - - - - - -aucReserve - - - - - - - - - - - - -aucReserve - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -ucReserved - - - - - - - - - - - - - -aucReserve - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -u4Reserved - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -aucReserve - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -ucSetQuery -u4FuncData -PKT_ID_CMD - - - - - - - - - - - - -ucVaildBit - - - - - - - - - - - - - - - -UsbLoadIvb -BW_SETTING - - - - - -ApLogEvent - - -APShutdown - - - -pEventText -
-ApLogEvent -ApLogEvent -APShutdown - - - - - - - - -APCli_Init -ApCli_Open - - - - - -APCli_Init -ApCli_Open - - - - - -RALINK_OUI - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -allCountry - - - - - - - - - - - - - - - - - - -ADDBGPRINT - - - - -ap_privtab -iwpriv_cmd -MBSS_Close -MBSS_Close -NINTO_INFO - - - -AvalAdmCap - -BSSIDENTRY - -channelset - -WDS_Remove -_AP_WDS_H_ - - -WDS_Remove -PACInquiry - - - - - - - - -AteAllocVa -AvgRssi0X8 -AvgRssi1X8 -AvgRssi2X8 -bAutoTxAlc -bFWLoading -bQAEnabled -bQARxStart -bQATxStart -cmd_expire -ControlChl -OtherCount -pAtePacket -phy_mux_27 -RxTotalCnt - -RfRegWrite -SampleRssi -SetChannel -StopTxTone -ATE_RFTEST -ATE_RXSTOP -ATE_TXCARR -ATE_TXCONT -ATE_TXSTOP - - -SetADCDump -SetATEHelp - - -SetATEShow - -SetATETxBw - -SetATETxGi -SetBBPRead - -SetEEWrite -SetRFWrite - -MT_ATEInit -SetADCDump -SetATEHelp -SetATEShow -SetATETxBw -SetATETxGi -SetATETxGi -SetBBPRead -SetEEWrite -SetRFWrite - - - - -TYPE_OTHER - - -ba_dequeue -ba_enqueue - - -BT_DISABLE -LinkStatus -FDDRequest -TDDRequest - -UpdateMode -WLANStatus -POWERSAVE0 -POWERSAVE1 - - -g_FWSeqMCU -c - - - - - - - - - - -curCalibId -resultWork - - -calib_proc - - -file_entry - - - - - - - - - - - - - - - - - - - - - - -CFG80211CB - -bInitiator - -EntryValid - - - - - - - - - - - - - - - - -GNU_PACKED - -FT_MIC_LEN -IE_FT_FTIE -IE_FT_MDIE - - -TDLS_SETUP - - - - - - - - - -channelset - - - - - -_CH_POWER_ -_CH_POWER_ - -_CH_REGION -_CH_REGION - - -N_SetCenCh -PCH_REGION -_CH_REGION -TotalChNum -TX_R_E_1_S -TX_R_E_2_S -mix_column - - - - - - - -AsicSetRDG - - - - - - - - - - - - - -AsicSetDPD -AsicSetRDG - - - - - - - - - - - - - - - - - - - - - -get_bw_str -phy_bw_str - - - -set_fw_log - - - - - - - - - - -APPLE_TALK - - - -dump_rxblk -IP_HDR_LEN - - - - - - -WCID_TABLE -wcid_table - -dumpRxRing -dumpTxRing - - - - - - - - - - - - - - - - - - - - - - - - - -DBQ_LENGTH - -expSCTable -impSCTable -MatrixForm - - - - - - - - -set_no_bcn - - - -% -% -ShowRFInfo - -RF_ALC_NUM - - - - - - - - - -BLK_PSPOLL - - - - - - - - -MATProtoTb -DHCP_MAGIC - - - -outMacAddr -uIDAddByUs -delimitcnt -MC_CardMac -ralinkrate - - - - - - - - - - - - - - - - - - - - - - - - - - - -RALINK_OUI -GNU_PACKED -GNU_PACKED -GNU_PACKED -GNU_PACKED - - - - - - - -groupShift -handleBfFb -rxBestSndg -avgPhase32 - - -FIXED_M_PI -maxCarrTab -Read_BFRow - - -CMDHandler - - - - - - - - - - - - -OSEN_IELEN - - - -RTMPFindIE - - -CAL_2_4G_R -CH_BW20_40 -CIPHER_ADD - - -auReserved -ucBssIndex -CMD_GET_PD - - -CONTI_OFDM -CONTI_RAMP -CONTI_STOP -DEVICE_USB -Enable_Rx0 -Enable_Rx1 -Enable_Rx2 -Enable_Tx0 -Enable_Tx1 -Enable_Tx2 - - - -EXT_CH_BW5 -aucReserve -ucBssIndex -ucReverved - - - -u4DataMode -FwEventTxD -ucSetQuery - - - -u4Override -ucSetQuery -ucSetQuery -GNU_PACKED -PacketSize -! - - - - -PacketSize - - - -MCAST_WCID -MODE_EFUSE -OPMODE_STA -u4FuncData - - - - -PID_BEACON -PRXD_STRUC -_RXD_STRUC -RXV_HEADER -RX_STASTIC -PTXD_STRUC -_TXD_STRUC -PTX_STATUS -" -" -PWTBL_4_AC -_WTBL_4_AC - - - - - - -_RXD_STRUC -_RXD_STRUC -Is802dot11 -MAC_LENOFS -Reserved_2 -Reserved_3 -FirstCycle -ThreeCycle -RXV_HEADER -RXV_HEADER -RXV_HEADER -HT_STF_DET -cagc_state -HT_shortgi -RX_STASTIC -FCSErr_CCK -# -RX_STASTIC -RX_STASTIC -SETCH_2_4G -tmac_txd_0 - - -TMAC_TXD_0 -tmac_txd_0 -tmac_txd_1 -hdr_format -TMAC_TXD_1 -tmac_txd_1 -tmac_txd_2 -ba_disable -pwr_offset -TMAC_TXD_2 -tmac_txd_2 -tmac_txd_3 - -TMAC_TXD_3 - -tmac_txd_3 - -tmac_txd_4 -TMAC_TXD_4 -tmac_txd_4 -tmac_txd_5 -TMAC_TXD_5 -tmac_txd_5 -tmac_txd_6 -TMAC_TXD_6 -tmac_txd_6 -TWO_FOUR_G -_TXD_STRUC -_TXD_STRUC -Is802dot11 -Reserved_1 -Reserved_2 - - -WLAN_Index -$ -WTBL_1_DW0 -WTBL_1_DW1 -WTBL_1_DW2 -WTBL_1_DW3 -WTBL_1_DW4 - - -tid_5_sn_0 -tid_5_sn_5 -_WTBL_4_AC -_WTBL_4_AC -% -% -WTBL_BTCRn - - - -mic_key0_0 -mic_key0_1 -mic_key0_2 -mic_key0_3 -mic_key1_0 -mic_key1_1 -mic_key1_2 -mic_key1_3 - - - - - - - - -> - - - - - - - - - - - - -Const_Zero - - -Default_IV - -GET_UINT32 -PUT_UINT32 - - - - -& - -aes_key_st - - - - - - - - - - - - -DEBUGPRINT -DEBUGPRINT -currentvar - - - -BN_CTX_new - -bn_expand2 -bn_expand2 - - - -BN_is_zero -BN_MASK2h1 - - -' - - -BN_rshift1 -BN_rshift1 -BN_set_bit - - - - - - - - -bn_wexpand - - -BODY_00_15 -BODY_16_19 -BODY_20_39 -BODY_40_59 -BODY_60_79 - - -DH_freeall -DH_P_VALUE - - -EVP_MD_CTX -g_md_count -HASH_FINAL -HASH_FINAL -HOST_c2l_p -HOST_p_c2l - - -mul_add_c2 -RAND_final - - - - -SHA_CBLOCK -SHA_LBLOCK -sqr_add_c2 -STATE_SIZE -DH_freeall -DH_KEY_LEN - -( -USE_SHA256 - - -RT_MD5_End - -RT_MD5_End -MessageLen - -sha224_end - - -sha256_end -sha2_begin -sha384_end -sha512_end -SWAP_BYTES -MessageLen -sha224_ctx -sha224_end -sha256_ctx -MessageLen -sha256_end -sha2_begin -) -sha384_ctx -sha384_end -sha512_ctx -sha512_end - -Rx_PE_Mask -CheckCount - - -CD_RECHECK -CD_SILENCE -CD_STATE_n -CD_STATE_n - - -alloc_time -ExFreePool -Encryption -FeatureSet - -* - -QueueState -WdmVersion -WmiLibInfo - - -bLoadingFW - - - - - - -IODisabled - - -MACVersion - - -PortLength - - - -QueueState - -RxSpinLock - - - - - -UsageCount -UsbTimeout -WdmVersion -WmiLibInfo -BypassMode -HybridMode -USBRemoved -USBStopped -USBWorking -+ -+ - -_DFS_EVENT - -_DFS_EVENT - - -DeltaDelay -Rx_PE_Mask -ENTRY_PLUS - - - - - -false_time - - - - - -NEW_DFS_EU -PDFS_EVENT - -_DFS_EVENT - - - - - - - -, -ChirpCheck -DfsRssiLow -DfsSwParam -currentvar - -BN_CTX_new - -bn_expand2 -bn_expand2 - - - -BN_is_zero -BN_MASK2h1 - - - - - - -BN_rshift1 -BN_rshift1 -BN_set_bit - - - - - - - - -bn_wexpand - - -BODY_00_15 -BODY_16_19 -BODY_20_39 -BODY_40_59 -BODY_60_79 - - -DH_freeall -DH_P_VALUE - - - - -EVP_MD_CTX -g_md_count -HASH_FINAL -HASH_FINAL -- -HOST_c2l_p -HOST_p_c2l -mul_add_c2 -RAND_final - - - - -SHA_CBLOCK -SHA_LBLOCK -sqr_add_c2 -STATE_SIZE -DH_freeall -DH_KEY_LEN - - - - - - - - - -DTXWI_SIZE - -RspEvtType -. -Reserved_1 -Reserved_3 -Reserved_4 -Reserved_5 -IE_VHT_CAP -VHT_CAP_IE -fb_tx_type -fb_tx_type - - -rx_mcs_map -rx_mcs_map -tx_mcs_map -tx_mcs_map -_VHT_OP_IE -_VHT_OP_IE -/ -EAPOLStart -EAPOL_VER2 -identifier - -KeyDataLen - - - - -KeyDescVer - -KeyDescVer - - - - - - -LEN_AES_TK -LEN_WEP128 - -GNU_PACKED -GNU_PACKED -RSNIE_AUTH -GNU_PACKED -GNU_PACKED -GNU_PACKED - - - - - - - - - - - - -WPA_KDE_ID - - -0 -GNU_PACKED - - - - -GNU_PACKED -BE_ACDelay -BK_ACDelay -VI_ACDelay -VO_ACDelay -GNU_PACKED - - -GNU_PACKED -RRM_PHY_HT -GNU_PACKED - -GNU_PACKED - -1 -1 -1 -1 -1 -PeerStaMac -GNU_PACKED -ADD_HTINFO -RecomWidth -RecomWidth -DualBeacon -DualBeacon -STBCBeacon -STBCBeacon -AddHtInfo2 -AddHtInfo3 - - -GNU_PACKED -RDGSupport -RDGSupport -_HT_AS_CAP -_HT_AS_CAP -_HT_BF_CAP -_HT_BF_CAP -ExpNoComBF -ExpNoComBF -ht_rx_ldpc -ht_rx_ldpc -HT_MCS_SET -2 -PHT_AS_CAP -_HT_AS_CAP -PHT_BF_CAP -_HT_BF_CAP -GNU_PACKED - - -StatusCode -GNU_PACKED -FT_IGTK_ID -GNU_PACKED - -FT_MIC_LEN -StatusCode -FT_R0KH_ID -FT_R1KH_ID -BaStartSeq - - - -IE_FT_FTIE -IE_FT_MDIE -PFT_ACTION - - -_GAS_FRAME -3 -_GAS_FRAME -3 -GAS_CB_REQ -GAS_CB_RSP - -StatusCode - - -StatusCode - -PGAS_FRAME -_GAS_FRAME -PWNM_FRAME -_WNM_FRAME -TFS_NOTIFY -_WNM_FRAME -_WNM_FRAME -RespStatus -GNU_PACKED -GNU_PACKED - -FT_MIC_LEN -IE_FT_FTIE -IE_FT_MDIE -SwitchTime -4 -GNU_PACKED -GNU_PACKED -GNU_PACKED -5 -DebugPrint -DriverInit -PciAddress - - -bAutoTxAgc - -RandomByte -ReadMemory - - - -6 -FileHandle - -MACVersion -MemorySize -PowerState -pPacketBuf -RTMP_DMACB - -ScatterLen - - -ScatterNum -ScatterSht -INV_TR_SW0 -WLAN_RESET -INV_TR_SW0 -WLAN_RESET -INV_TR_SW0 -WLAN_RESET -INV_TR_SW0 -WLAN_RESET - - -MlmeRAInit -Rate1TxCnt -Rate2TxCnt -Rate3TxCnt -7 -Rate4TxCnt -Rate5TxCnt -kalMemCopy - -LowerClock -RaiseClock -ReadEEprom - - -8 -DACTestBit -DACTestBit -CoexMethod -CoexMethod -XtalOption -CoexMethod -CoexMethod -XtalOption -CoexMethod -XtalOption -CoexMethod -XtalOption -DeltaValue -DeltaValue - - - - - - -eFuseWrite -eFuse_init -9 - - - - - - -: -XTAL_TRIM1 -LowerClock -RaiseClock -ReadEEprom - -eFuseWrite -eFuse_init - - - -LowerClock -RaiseClock -EFUSE_CTRL - -EFSROM_AIN - -EFSROM_AIN -MT_EE_CTRL - - -aes_key_st - - - -_EVP_ENC_H - - -; - - - -OTHER_PORT - - - - - - - - - -OTHER_PORT - - - - - - - - -NORMAL_PKT -rx_data_bw -rx_data_gi -tx_data_bw -tx_data_gi - - -RX_WCID_En - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -FT_GetMDIE -FT_Release -Set_FT_OTD -Set_FT_RIC - - - -FT_GetMDIE -< -PeerIpAddr -FT_Release -CurrAPAddr -Set_FT_OTD -Set_FT_RIC - - -bFtSupport - - -FT_CAP_CFG - - -= -TimeUpdate -_FT_RIC_AP -_FT_RIC_AP -FlgIsValid -FT_KdpLock - - - - -TargetAddr - -FT_REQ_ACT - - -ˆ -Œ - - -SendGASReq -SendGASRsp -GAS_CB_REQ -GAS_CB_RSP - - -StatusCode - - -StatusCode - - - -StatusCode - - -StatusCode - - -StatusCode - -StatusCode - - -SendGASRsp -GPIO10_SEL -GPIO11_SEL -GPIO12_SEL -GPIO13_SEL -GPIO14_SEL -GPIO15_SEL -GPIO16_SEL -? -GPIOPullUp -GPIO_DOUT1 -__GPIO_H__ -GPIO_INPUT -INPUT_HIGH -NO_PULL_UP -OUTPUT_LOW - -GetPhyRSSI -GetPhyRSSI -WL_RX_BUSY -WL_TX_BUSY - -@ -E -HSCtrlExit -HSCtrlHalt -HSCtrlInit - - -ICMPv4Deny -HSCtrlExit -HSCtrlHalt -HSCTRL_OFF - - - - - - -A - - - - - -{anonaddr} -B -ipv6Addr16 -ipv6Addr32 - - -assoc_stat - - - -serial_num -frame_type -DlListInit - - -C - - - - - -_RXD_STRUC -_RXD_STRUC -_RXD_STRUC -_RXD_STRUC -_TXD_STRUC -_TXD_STRUC -_TXD_STRUC -_TXD_STRUC -IRPPending - - - -IRPPending - -bRingEmpty - -IRPPending - -MGMT_STRUC - - - -PTX_BUFFER - -D - -_RXD_STRUC -_RXD_STRUC -_RXD_STRUC -_RXD_STRUC -RX_CONTEXT - -IRPPending - - -TX_CONTEXT -DataOffset -IRPPending - -field_7601 -field_76xx -EpoutValid -EpoutValid -EpoutValid -field_7601 -field_76xx -EpoutValid -EpoutValid -EpoutValid - -BitReverse - -DispPnpPCI -DispPnpUSB - -DriverInit -g_FWSeqMCU - - - -RandomByte -ReadMemory -E -IS_GOOD_IP -MAT_STRUCT - -IPMacTable -PMAT_TABLE -MCUSysExit -MCUSysInit -MCUSysExit -MCUSysInit -BitReverse - - - - - - - - -GetMeshSeq -GetMeshTTL - - - -ActionCode -MESH_Close -F - - - - -GetMeshSeq -GetMeshTTL - - - -MESH_Close -__MESH_H__ - - - -G - - -BTYPE_MESH - - -IE_MESH_ID -IE_MESH_PU -IE_MESH_TC -Forwarding -Forwarding -DependAddr - -MESH_ENTRY -_MESH_FLAG -_MESH_FLAG - -_MESH_LINK -_MESH_LINK -LocalMsaIe -H -PeerLinkId - - - -NeighborMP -NeighborNr - -MESH_POTAL -DependAddr - -PortalRole -PortalRole -MESH_PROXY -bPrecursor -PathMetric - - - -RetryCount -PMESH_FLAG -_MESH_FLAG -I -PMESH_LINK -_MESH_LINK - - - - - - - - - - - - - - -IS_MESH_IF -PeerLinkId -ReasonCode - - - -J -PeerLinkId -ReasonCode -StatusCode -PeerLinkId -ReasonCode -SupRateLen - - - - - - - -RTMPSetVHT -DetectExec -DetectExec -DetectExec -ApMlmeInit -K - - -ExtHtCapIe - - - - -MlmeThread -RALINK_OUI -RandomByte -RTMPMinSnr - - - -_AuthState -AUTH_STATE -_AuthState -Compressed -Compressed -GNU_PACKED -BA_CONTROL -Compressed -Compressed -DtimPeriod -ExtCapInfo -ExtRateLen -NewChannel -SupRateLen -vht_cap_ie -vht_op_len -L - - - - -_BSS_ENTRY -_BSS_ENTRY - -DeviceType -DtimPeriod -ExtCapInfo -ExtRateLen -SupRateLen -vht_cap_ie -vht_op_len -CAP_IS_QOS -NewChannel -SwitchMode -PairCipher -CQI_IS_BAD -DELBA_PARM -EID_STRUCT -ac_sta_cnt -ac_sta_cnt -DMSSupport -DMSSupport -FMSSupport -FMSSupport -M -TFSSupport -TFSSupport -uapsd_coex -uapsd_coex - -BaStartSeq - -StatusCode -BarControl -_FRAME_BAR -_FRAME_BAR -BarControl -BARControl -ReasonCode -FRAME_MTBA -PerTIDInfo - - -Repetition -CSAnnounce -ExtCapInfo -ht_cap_len -vht_op_len -BaStartSeq -ListenIntv - -APEdcaParm -APQbssLoad -APRalinkIe -AssocTimer -N - -DtimPeriod -ExtCapInfo -ExtRateLen -OldChannel - -ProbeTimer -SsidBssTab -SupRateLen -vht_op_len - - -__MLME_H__ - -MLME_QUEUE -Compressed -Compressed - -ORIGINATOR -PBSS_TABLE -PEDCA_PARM -PFRAME_BAR -_FRAME_BAR -O -O -QOSMAP_SET -DSCP_Field -RSSI_DELTA - - -bVhtEnable - -RT_VHT_CAP -vht_rxstbc -vht_txstbc - - -SEQ_LARGER -P -RecomWidth -RecomWidth - - -ralinkrate - - - - - - - - -RF_VERSION -Q - - - - - - - - - - -R -RF_PA_Mode - - - - - - - - - - - - - - -S -gm_gc_a_hg -gm_gc_a_lg -gm_gc_a_mg -_MT_RF_REG -_MT_RF_REG -PMT_RF_REG -_MT_RF_REG -RFDIGI_SX7 -RFDIGI_SX8 -SX7_FRACES - -HIF_TX_NUM - -T - - - - - -MT_ATEInit - - -MT_ATEStop - - - -U -PCIE_RECAL - - -THADC_SLOP -V -XTAL_TRIM1 -GPIOPullUp -ENOUGH_BUF -FORCE_MODE - - -RG_FFA_THD -W -SCH_DBG0_0 -SCH_DBG_10 -SCH_DBG_11 -UDMA_RESET -D2H_SW_INT -IDATDLYCR1 -IDATDLYCR2 -W_FUNC_RDY -X -mac_cr_seg - - -E2PROM_CSR - - - - -P_IDX_LMAC -Q_IDX_AC10 -Q_IDX_AC11 -Q_IDX_AC12 -Q_IDX_AC13 -Q_IDX_AC14 -rmac_rxd_0 -Y -hdr_offset -hdr_offset -cls_bitmap -cls_bitmap - - - -wpi_pn_128 -wpi_pn_128 -RXS_GROUP1 -RXS_GROUP2 -RXS_GROUP3 -RXS_GROUP4 -RXV_DWORD0 -RXV_DWORD1 - - - -RXV_DWORD1 - - -_RXV_STRUC -_RXV_STRUC -_RXV_STRUC -_RXV_STRUC -RXWI_STRUC -Z -Fagc0EqCal -Fgac1EqCal -Fagc0EqCal -Fagc1EqCal -Fagc2EqCal -Fagc2EqCal -SecItfrEnv -SecItfrEnv -tmac_txd_0 -TMAC_TXD_0 -tmac_txd_0 -tmac_txd_0 -TMAC_TXD_0 -tmac_txd_0 -tmac_txd_1 -hdr_format -TMAC_TXD_1 -tmac_txd_1 -tmac_txd_1 -hdr_format -TMAC_TXD_1 -tmac_txd_1 -tmac_txd_2 -ba_disable - - -[ -pwr_offset -TMAC_TXD_2 -tmac_txd_2 -tmac_txd_2 -ba_disable -pwr_offset -TMAC_TXD_2 -tmac_txd_2 -tmac_txd_3 - -TMAC_TXD_3 - -tmac_txd_3 - -tmac_txd_3 - -TMAC_TXD_3 - -tmac_txd_3 - -tmac_txd_4 -TMAC_TXD_4 -tmac_txd_4 -tmac_txd_5 -TMAC_TXD_5 -tmac_txd_5 -tmac_txd_5 -TMAC_TXD_5 -tmac_txd_5 -tmac_txd_6 -TMAC_TXD_6 -tmac_txd_6 -tmac_txd_6 -TMAC_TXD_6 -tmac_txd_6 -tmac_txd_7 -TMAC_TXD_7 -tmac_txd_7 -tmac_txd_7 -TMAC_TXD_7 -tmac_txd_7 -TMAC_TXD_L -TMAC_TXD_S - - - - - -field_init -field_resp - - -field_init -field_resp -\ - - -TXS2H_QID0 -TXS2H_QID1 -TXS2M_QID0 -TXS2M_QID1 -TXS2M_QID2 -TXS2M_QID3 -field_rcpi -front_time -tx_pwr_dBm -tx_pwr_dBm -field_rcpi -front_time -tx_pwr_dBm -tx_pwr_dBm - -TXS_STATUS - - - -PktSubType -_TXS_STRUC -_TXS_STRUC -PktSubType -] -TxSHandler -TXS_UNUSED -TXWI_STRUC -wtbl_entry -WTBL_ENTRY -wtbl_entry -XTAL_CTL13 -XTAL_CTL14 - - -MT_INTMASK -MT_INT_CMD -rx_dly_int -tx_dly_int -tx_done_10 -tx_done_11 -tx_done_12 -tx_done_13 -tx_done_15 -rx_dly_int - - -tx_dly_int -tx_done_10 -tx_done_11 -tx_done_12 -tx_done_13 -tx_done_15 -^ -rx_dly_int -tx_dly_int -tx_done_10 -tx_done_11 -tx_done_12 -tx_done_13 -tx_done_15 -rx_dly_int -tx_dly_int -tx_done_10 -tx_done_11 -tx_done_12 -tx_done_13 -tx_done_15 -_RXD_STRUC -_RXD_STRUC -_RXD_STRUC -_RXD_STRUC -_TXD_STRUC -_TXD_STRUC -_TXD_STRUC -_TXD_STRUC -IRPPending -_ - - - -IRPPending - - -bRingEmpty - - -IRPPending - -MGMT_STRUC - - - -PTX_BUFFER - - -_RXD_STRUC -_RXD_STRUC -_RXD_STRUC -_RXD_STRUC -RX_CONTEXT - -TX_CONTEXT -DataOffset -IRPPending - -field_7601 -field_76xx -EpoutValid -EpoutValid -EpoutValid -field_7601 -field_76xx -EpoutValid -` -EpoutValid -EpoutValid -mt_phy_ops - -tssi_stage -blockNetIf -blockNetIf - -NfcCommand -NfcCommand -MT7603_RAM -MT7636_RAM -ASSOC_FAIL -bbp32_info -BSSID_INFO -a -ik_keydata -DLS_FINISH - - - -key_length -event_type - - -ik_keydata -ik_macaddr -im_macaddr -b -EncrypType -StatusCode -NoOfPMKIDs -ATIMWindow -HopPattern - - - - - - - - -SsidLength -c -RetryCount -StatusType -MacAddress - - -MacAddress -d - - - - - -PHY_11N_5G -e - - - - - - - - - - - -qosmap_len -radius_key - - - -SystemTime -CurrTxRate -f -DeviceName -LastRxRate - - - -ExtRateLen -SupRateLen - - - - -g - - -ProfileCnt -TransmitNo -decodeDpid - -P2pCfgInit -P2PCfgInit -P2pConnect - - - - - - -h - -P2POUIBYTE - - -P2pSetRule -P2pStopNoA - -P2pWpsDone -P2P_GoStop -P2P_Remove - -decodeDpid -PerstEntry -P2pCfgInit -P2PCfgInit - -P2pConnect - - - -P2pSetRule -P2pStartGo - - -P2pStopNoA -i -P2pWpsDone -P2P_CLI_ON -P2P_CLI_UP -P2P_GoStop -P2P_Remove - - -ConfigMode -DeviceName - - -APCli_Init -ApCli_Open - - - -ƒ -j - -P2POUIBYTE -allCountry - - -k - - - - - - - - -, -, -IS_OPPS_ON - - - - -l - - -P2P_CLIENT - - - - -bStartScan - -UserAccept -P2P_DEVICE - - - -DeviceName -P2P_INF_ON -P2P_INVITE -P2P_LISTEN -m - - -P2P_SEARCH -bMixCipher -PairCipher - - - - - -bSupport5G - -DeviceName -LastRxTime - -StateCount -bExtListen -DeviceName -n - - -P2pControl -P2pCounter -P2pPhyMode -P2p_OpMode -PopUpIndex -Wsc_Uuid_E -assoc_addr -bWfdClient - - - - - -PerstEntry - -Capability - -SwBasedNoA - - - -P2P_CLI_ON -P2P_CLI_UP -o - - -DevDiscCnt - - - -P2POUIBYTE - - - - - - - - - - - - - -__PARSER_H -TXRXQ_PCNT -US_CYC_CNT -MiscModeEn -MiscModeEn - - - - - - -ETH_DRV_SC -ETH_DRV_SC -ETH_DRV_SC -ETH_DRV_SC -ETH_DRV_SC -ETH_DRV_SC -ETH_DRV_SC -ETH_DRV_SC -ETH_DRV_SC -ETH_DRV_SC -ETH_DRV_SC - -ETH_DRV_SC -ETH_DRV_SC - -= - - -p -bbp_set_bw -NICInitBBP -ShowAllBBP -bbp_set_bw -NICInitBBP -bbp_set_bw -ShowAllBBP -RFIC_7610E -RFIC_7610U -RX_CHAIN_0 -RX_CHAIN_1 -RX_CHAIN_2 -ShowAllBBP - - - - -q - - - - - - - -BLK_PSPOLL -FC_RP2Q0Q1 -FC_SP2Q0Q1 - - -r - - - - - -HQA_SetDPD -HQA_SetNss - -HQA_StopRx -HQA_StopTx -memcpy_exs - -CmdSetSize -FCSErr_CCK -s -s -bDFSIndoor -CalBufTime - -it_present - -it_version - - - - - - - - -INV_TR_SW1 - - - - - - - - - - - -INV_TR_SW1 - - - - - - - - -AFH_END_CH - - - - - - -AFH_END_CH - - - - - -CLK_ENABLE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -t - - - - - - -CMD_PACKET - - - - - - - - - - - - - - -u -RXFCE_INFO -RXFCE_INFO -bssid_idx3 -bssid_idx3 -_RXWI_NMAC -_RXWI_NMAC -_RXWI_NMAC -bbp_rxinfo -_RXWI_NMAC -bbp_rxinfo - - -_RXWI_XMAC -_RXWI_XMAC -_RXWI_XMAC -_RXWI_XMAC -v - -TSO_SEG_EN - -TSO_SEG_EN -_TSO_INFO_ -_TSO_INFO_ -_TSO_INFO_ -_TSO_INFO_ -TxInfoQSEL -txinfo_cmd -txinfo_pkt -_TXWI_NMAC -_TXWI_NMAC -_TXWI_NMAC -NDPSndRate - - -_TXWI_NMAC -NDPSndRate -_TXWI_XMAC -_TXWI_XMAC -_TXWI_XMAC -NDPSndRate -_TXWI_XMAC -w -NDPSndRate -INV_TR_SW0 -WLAN_RESET -INV_TR_SW0 -WLAN_RESET - - - - - - -MAC_CLKSEL -MAC_CLK_EN -PBF_CLK_EN -MAC_CLKSEL -MAC_CLK_EN -PBF_CLK_EN -INT_RX_DLY -INT_TX_DLY -Ac0DmaDone -Ac1DmaDone -Ac2DmaDone -Ac3DmaDone -AutoWakeup -rxCoherent -RxDelayINT -trCoherent -txCoherent -TxDelayINT -x -Ac0DmaDone -Ac1DmaDone -Ac2DmaDone -Ac3DmaDone -AutoWakeup -rxCoherent -RxDelayINT -trCoherent -txCoherent -TxDelayINT -RLT_INT_RX -Ac0DmaDone -Ac1DmaDone -Ac2DmaDone -Ac3DmaDone -AutoWakeup -rxCoherent -RxDelayINT -trCoherent -txCoherent -TxDelayINT -Ac0DmaDone -Ac1DmaDone -Ac2DmaDone -Ac3DmaDone -AutoWakeup -rxCoherent -RxDelayINT -trCoherent -txCoherent -TxDelayINT -_RXWI_OMAC -_RXWI_OMAC -_RXWI_OMAC - - -y -_RXWI_OMAC -TxInfoQSEL -_TXWI_OMAC -_TXWI_OMAC -_TXWI_OMAC -NDPSndRate -_TXWI_OMAC -NDPSndRate -DMA_CLK_EN -HST_PM_SEL -MAC_CLK_EN -PBF_CLK_EN -DMA_CLK_EN -HST_PM_SEL -MAC_CLK_EN -PBF_CLK_EN -Ac0DmaDone - -Ac1DmaDone -Ac2DmaDone -Ac3DmaDone - -RxCoherent - - -TxCoherent - -Ac0DmaDone - -Ac1DmaDone -Ac2DmaDone -Ac3DmaDone - -RxCoherent - - -TxCoherent - -z -Ac0DmaDone -Ac1DmaDone -Ac2DmaDone -Ac3DmaDone -AutoWakeup -RxCoherent -RxDelayINT -TxCoherent -TxDelayINT -Ac0DmaDone -Ac1DmaDone -Ac2DmaDone -Ac3DmaDone -AutoWakeup -RxCoherent -RxDelayINT -TxCoherent -TxDelayINT -RTMP_RxINT -RX_CRX_IDX -RX_DRX_IDX -RX_MAX_CNT -INTERNAL_1 -RF_BYPASS1 -RF_BYPASS2 -RF_BYPASS3 - - -MlmeRAInit - - - - - - - - - - - - - - -rt2880_dev -ETH_DRV_SC -ETH_DRV_SC -ETH_DRV_SC -ETH_DRV_SC -ETH_DRV_SC -ETH_DRV_SC -ETH_DRV_SC -ETH_DRV_SC -ETH_DRV_SC -ETH_DRV_SC -{ -ETH_DRV_SC - -ETH_DRV_SC -ETH_DRV_SC - -P -AGG_AALCR1 -AGG_AWSCR1 -ARB_AIFSR0 -ARB_AIFSR1 -ARB_MSDR10 -ARB_MSDR11 -ARB_MSDR12 -ARB_MSDR13 -ARB_MSDR14 -ARB_MSDR15 -ARB_MSDR16 -ARB_MSDR17 -ARB_MSDR18 -ARB_MSDR19 -ARB_MSDR20 -ARB_MSDR21 -ARB_MSDR22 -ARB_MSDR23 -ARB_MSDR24 -ARB_MSDR25 -ARB_MSDR26 -ARB_MSDR27 -ARB_MSDR28 - - - -HIF_CLIENT - - - - - - -RA_EE_CTRL - - -| -RBIST_BASE - - - -RFLESelect -RFRegValue -RMAC_CB0R0 -RMAC_CB0R1 -RMAC_CB1R0 -RMAC_CB1R1 -RMAC_CB2R0 -RMAC_CB2R1 -RMAC_CB3R0 -RMAC_CB3R1 -addr_47_32 -TMAC_FP0R0 -TMAC_FP0R1 -TMAC_FP0R2 -TMAC_FP0R3 -TMAC_FP0R4 -TMAC_FP0R5 -TMAC_FP0R6 -TMAC_FP0R7 -TMAC_FP0R8 -TX_BT_SIZE - - - -WF_PF_BASE -ACS_CENTER -BN_CLICKED -BN_DISABLE -BST_PUSHED -CF_DSPTEXT -CF_OEMTEXT -CF_PALETTE -CF_PENDATA - - -} -CS_CLASSDC -CS_DBLCLKS -CS_HREDRAW -CS_NOCLOSE -CS_VREDRAW -DTS_UPDOWN -EM_CANUNDO -EM_GETLINE -EM_GETRECT -EM_SETRECT -FINDDLGORD -FONTDLGORD -HDS_HIDDEN -HELP_TCARD -HTTOPRIGHT -ICON_SMALL - - -IDCONTINUE -IDH_CANCEL -IDTRYAGAIN -LANG_AZERI -LANG_CZECH -LANG_DUTCH -LANG_FARSI -LANG_GREEK -LANG_HINDI -LANG_KAZAK -LANG_MALAY -LANG_ORIYA -LANG_TAMIL -LANG_TATAR -LANG_UZBEK -~ -LVS_REPORT -MK_CONTROL -MK_LBUTTON -MK_MBUTTON -MK_RBUTTON -NFS_BUTTON -NFS_STATIC -NF_REQUERY -OBM_BTSIZE -OBM_REDUCE -OCR_ICOCUR -OCR_NORMAL -OCR_SIZENS -OCR_SIZEWE -OIC_SAMPLE -PBS_SMOOTH -SC_ARRANGE -SC_DEFAULT -SC_HSCROLL -SC_KEYMENU -SC_RESTORE -SC_VSCROLL -SMTO_BLOCK - - - -SW_RESTORE -TBS_BOTTOM -TCS_BOTTOM -TTS_NOFADE -VK_CAPITAL -VK_CONTROL -VK_CONVERT -VK_DECIMAL -VK_EXECUTE -€ -VK_HANGEUL -VK_LBUTTON -VK_MBUTTON -VK_NUMLOCK -VK_NUMPAD0 -VK_NUMPAD1 -VK_NUMPAD2 -VK_NUMPAD3 -VK_NUMPAD4 -VK_NUMPAD5 -VK_NUMPAD6 -VK_NUMPAD7 -VK_NUMPAD8 -VK_NUMPAD9 -VK_OEM_102 -VK_OEM_PA1 -VK_OEM_PA2 -VK_OEM_PA3 -VK_RBUTTON -WMSZ_RIGHT -WM_AFXLAST -WM_COMMAND -WM_DESTROY -WM_GETFONT -WM_GETICON -WM_GETTEXT -WM_HSCROLL - - -WM_KEYDOWN -WM_KEYLAST -WM_MDINEXT -WM_MDITILE - -WM_NCPAINT - - -WM_SETFONT -WM_SETICON -WM_SETTEXT -WM_SYSCHAR -WM_VSCROLL -RF_CSR_CFG -‚ - - -ƒ - - - - - - -ChannelRep -RRM_CONFIG -MeasureCnt -QuietState -QuietTimer - - -BTYPE_CNTL -BTYPE_DATA -BTYPE_MGMT - - -„ - - -BBP_REG_BF -RALINK2883 -RALINK2860 -RALINK2870 -RALINK2880 - - -RALINK3050 -RALINK3052 -RALINK3350 -RALINK30xx -… - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -RALINK3352 -RALINK33xx -† -BBP_REG_BF -RALINK3593 -RALINK3062 -RALINK3562 -RALINK3572 -RALINK3592 - - -BBP_REG_BF -RALINK3883 -‡ -RALINK5350 - - - - -RALINK5390 -RALINK5392 - - - -MAC5592Reg - - - - - - - - -ˆ -RALINK5572 -RALINK5592 - - - - - - - - - - - - -RALINK6352 -‰ -DEFAULT_BO -RF_PA_Mode - -RALINK6570 -RALINK6590 - - - - - -rf_init_tb - - - - -RT85592_E1 -RT85592_E2 -RT85592_E3 - -Š - - - - -AntCfgInit - -AuthReqCnt -bMixCipher -bP2pClient - -CfgSsidLen -MacTabWCID - -PairCipher -WscControl - -APPLE_TALK - - - - -DtimPeriod -RssiSample -HighTxMode -TxLifeTime -‹ -AsicSetDPD -AsicSetRDG -, -, - - -ORIBATimer -LastIndSeq -RECBATimer - -bBcnSntReq -cap_ie_pos -BeaconTxWI -Œ -BSS_STRUCT - - - - -HostapdWPS -PMKIDCache -REKEYTimer -TimBitmaps -timer_loop - - - - - -WscControl - - - - - - - -ExtraIeLen -P2pExtRate - - -P2pSupRate - - - - -vifDevList - - - - - - - - - - - - - - - - - - - - - - - - - - -CipherName -CMDHandler - - - -APEdcaParm -APQbssLoad -bACMAPSDTr -bAPSDAC_BE -bAPSDAC_BK -bAPSDAC_VI -bAPSDAC_VO -bBADecline - - -bHTProtect - - - - - - - - -Chip_VerID - - - - - - - - - - - - -DebugFlags - - -DesireRate - - - - - - - - - - -ExtRateLen -HT_Disable -Ž -IOTestParm - - - - -ManualTxop - - - - - - - - - - - - - -pTpcReqTab - - -SkuChannel -StreamMode - - - - - - - - -SupRateLen - - - - -TxPreamble -vht_cap_ie -vht_sgi_80 - - - - -RetryCount -RxNoBuffer -PlcpErrCnt -TxAggCount -CountryNum - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -deq_called -pse_pg_cnt -TxAMPDUCnt -TxSWQueCnt -target_que -DEQUE_INFO -_DMS_ENTRY -_DMS_ENTRY -1 -1 -dump_rxblk -bDoAutoWps -bEnableWAC -ModuleType - - - -WpsPinCode -SSIDStrLen -. -. -ExtHtCapIe - - - - -get_bw_str -handleBfFb -HTIOTCheck -hw_setting -cur_ch_pwr - - - -_IOT_STRUC - -_IOT_STRUC - -createTime - -identifier - - -IS_HT_RATE -IS_VHT_STA -LinkUpExec - - - - -load_patch -_MAC_TABLE -_MAC_TABLE -‘ -sta_status -bAPSDAllAC -bestMethod -bf0RateIdx -bf1RateIdx -bP2pClient -bWfdClient -curAvgRSSI -CurrTxRate -DeviceName -DMSSupport - -fewPktsCnt -freqOffset -FT_UCipher -hwTxRtyCnt -hwTxSucCnt - - - - -LastRxRate -LastTxRate -LegalMfbRS - - -perThrdAdj - - -pRateTable - -ReqbtmData -RetryTimer -RssiSample -RXBAbitmap -’ - - -TXBAbitmap -TxSndgLock -TxSndgType -UAPSDQueue -UAPSDTxNum -vht_cap_ie -MAX_BBP_ID -MAX_BBP_ID -MAX_BBP_ID -MAX_BBP_ID -MAX_BBP_ID -MAX_BBP_ID -MAX_BBP_ID -MAX_BBP_ID - - -LocalMSCIE -MeshPreqID - -ActMachine -ApAuthFunc -“ -ApSyncFunc -BTMMachine -DlsMachine -GASMachine -HSCtrlFunc -RealRxPath -WpaMachine -WscMachine -MONITOR_ON -MONITOR_ON - - - - - -# -# - - - - -MemberList - -Event_Mask -P2P_Status - -Cipher_Alg - - - -” -PACInquiry - - - - - - -PDMS_ENTRY -_DMS_ENTRY -PeerBeacon -PeerBeacon - - -PKT_ATE_ON -PKT_TX_JAM -PMAC_TABLE -_MAC_TABLE - - - - - - - -• - - - - - -PS_CONTROL -AMDNewPSOn - - - - - - -PWDS_ENTRY -_WDS_ENTRY -PWDS_TABLE -_WDS_TABLE - - - - - - - -_TX_CTRL_T - -BAOriEntry -BARecEntry -RALINK_OUI -RandomByte -AuthReqCnt -MacTabWCID -RTMPAddKey -– - - - - -RTMPMinSnr - -AcmAvalCap -assebQueue - - - - - - -BeaconTxWI - - -bLinkAdapt -bPCIclkOff -BulkInLock -— -BulkOutReq - -BusyDegree -cal_atomic -ChBndryIdx -CmdRspLock -DiagStruct -e2pCurMode -EthConvert -ExtCapInfo -FT_RicLock - - - - -HASH_BSSID - - -HostVendor -LastMCUCmd -LastRxRate -LastTxRate -MacTabLock -MACVersion - -McuCmdLock - - -NicConfig2 -NicConfig3 -P2PChannel - -˜ - - - -RECBATimer -reg_atomic -RxDescRing -RxRingLock -serial_num -shortretry -ShrMemLock -TimerQLock - - -TxAgcStepA -TxAgcStepG -TxBufSpace -TxContext2 -TxDescRing -WdsTabLock -WlanEnLock -WlanEnLock -wmm_cw_max -wmm_cw_min - - - - - - -™ -RTMP_DMACB -LastBDInfo -__RTMP_H__ - - - - - - - - -bRoundDone -pTrainInfo -trainStage -antPattern -antPattern -candWeight -preSNRDist -txNoRtyCnt - - -antPattern -pAgspEntry - - - - - - -WdsCounter -š -š -š -rxBestSndg -hw_rx_info -pRxFceInfo -pTransData -set_fw_log -set_no_bcn -› -0 -0 -ShowRFInfo -bStaChange -candMethod -saMcsBound -trainDelay -trainEntry -SSID_EQUAL - -ExtCapInfo -ExtRateLen -SupRateLen - - - - - - - -bMixCipher - - - - - - -œ -DtimPeriod - - - - -OriDevType -PairCipher -RPIDensity -RssiSample - - - -WscControl - - - - - - - - - -Changeable - - - - - - - - - - - - - - - - - - - - - - - - -bestMethod -bf0RateIdx -bf1RateIdx -CurrTxRate -EospNullUp - - - -ps_qbitmap -RXBAbitmap -TokenCount -TXBAbitmap -TxSndgLock -TxSndgType -TC10_INDEX - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bTimSntReq - - - -ApCliIfidx - - - - - - -hw_rsv_len - - - -MpduReqNum - - - - - - - - - - - - - - - - - - - -_TX_CTRL_T -_TX_CTRL_T -u4PageSize -BW20Over5G -BW40Over5G - - -ž -UAPSD_INFO - - - -RxNoBuffer -_WDS_ENTRY -_WDS_ENTRY -_WDS_TABLE -_WDS_TABLE -CurrTxRate - - -RssiSample -sys_handle -WOW_BITMAP - - -WOW_ENABLE -WOW_WAKEUP - - - - - - - - - - - - - - - - - - -Ÿ - - - - - - - - - - - - - - -WscPBCExec - -BAOriEntry -BARecEntry - - - - - - - - - -DataIndex1 -DataIndex1 -DataIndex2 -DataIndex2 -MAX_BBP_ID -MAX_BBP_ID -MAX_BBP_ID -MAX_BBP_ID -MAX_BBP_ID -MAX_BBP_ID -MAX_BBP_ID -MAX_BBP_ID - - - - -¡ - -IQCalValue -BMC_ENABLE -BURST_READ - - -¢ -IQ_CAL_TX0 -IQ_CAL_TX1 -IS_MT7601U -IS_MT7602E -IS_MT7603E -IS_MT7603U -IS_MT7610E -IS_MT7610U -IS_MT7612E -IS_MT7612U -IS_MT7630E -IS_MT7630U -IS_MT7632E -IS_MT7632U -IS_MT7636U -IS_MT7650E -IS_MT7650U -IS_MT7662E -IS_MT7662U -IS_MT76x0E -IS_MT76x0U -IS_MT76x2E -IS_MT76x2U -IS_PCI_INF -IS_RT3052B -IS_RT3090A -IS_RT5370G -IS_RT5390D -IS_RT5390F -IS_RT5390H -IS_RT5390R -IS_RT5390U -IS_RT5392C -IS_USB_INF - - -MTK_REV_LT -MT_REV_GTE -PDMA_TX_RX -£ -ba_max_cnt - -dlm_offset -ilm_offset -MBSSIDMode -MTTxPwrCap -PAModeOFDM -RFIndexNum -SnrFormula - - -¤ -tssi_stage - - - -AsicRfInit -BurstWrite -RandomRead - -RT_REV_GTE -mix_column - - -¥ - -beacon_ies -probe_resp - - - -ap_isolate -FlgIs8021x - - - - - -rx_packets -tx_packets -tx_retries - -vifNameLen - - -¦ -EnqueueCmd - -OS_RTCMDUp -priv_flags -priv_flags - - -priv_flags - -priv_flags - - -FlgHaveGTK - -collisions - -rx_packets -tx_packets - - -§ -ExtRateLen -SupRateLen - - - - -priv_flags - -FlgAnySsid - -pTimerTask -¨ -LENGTH_CRC - - -MODE_HTMIX -OPMODE_STA - -RFIC_24GHZ - -{anondata} - - - - - - - - - - -ADDBA_RESP -© - - -ASSOC_IDLE -BSSID_WCID -CIPHER_AES -CIPHER_BIP -ª -ENTRY_MESH -ENTRY_NONE -ENTRY_TDLS - - - - -HT_ATHEROS -IE_ADD_HT2 -IE_CF_PARM -IE_COUNTRY -IE_DS_PARM -IE_FH_PARM -IE_HT_CAP2 -« -IE_WFA_WSC -IFS_HTTXOP -INT_MBSSID -IWSC_START -LONG_RETRY -MAX_AID_BA - - -¬ -MCAST_OFDM -MCAST_WCID -MCSFBK_MRQ -MCSFBK_RSV -MCS_RATE_6 -MCS_RATE_9 - -NORMAL_ACK -NUM_OF_TID - -PHY_CAP_2G -PHY_CAP_5G -PHY_CAP_AC -POWERSAVE0 -POWERSAVE1 -PWR_ACTIVE - - -RSSI_IDX_0 -RSSI_IDX_1 -RSSI_IDX_2 - - - - - - - - - - - - -RXSTBC_ONE -RXSTBC_THR -RXSTBC_TWO -® -SPEC_TPCRP -SPEC_TPCRQ -TXRATEMIMO -TXRATEOFDM -VALID_MBSS -VALID_WCID -VHT_BW_160 - - - -WMODE_COMP -txop_limit -HT_CONTROL -PRTS_FRAME -_RTS_FRAME -_RTS_FRAME -_RTS_FRAME -¯ -rbusConfig - - -AntCfgInit - - - - -CipherName -CMDHandler - - -load_patch - - - - - - - - - - - - - - - -CTS40MMode -° - -CTS40MMode - - - - - - - - - - - - - - - - - -bBeaconGen - - -bBeaconGen -CLIENT_ETH -CLIENT_STA - - - - -E2PROM_CSR - - - - - - - -LoadStatus - - - - - - - - -LoadStatus - - - - - - - - - -± -± - - - -HTMCS10FBK -HTMCS11FBK -HTMCS12FBK -HTMCS13FBK -HTMCS14FBK -HTMCS15FBK - -HTMCS10FBK -HTMCS11FBK -HTMCS12FBK -HTMCS13FBK -HTMCS14FBK -HTMCS15FBK - - - - - - - - - - - - - - - - - - - - - - - - - -CCKMCS0FBK -CCKMCS1FBK -CCKMCS2FBK -CCKMCS3FBK - -CCKMCS0FBK -CCKMCS1FBK -CCKMCS2FBK -CCKMCS3FBK -² -² -² -MBssBcnNum -NMBssMode2 -NMBssMode3 -² -MBssBcnNum -NMBssMode2 -NMBssMode3 - - -ProtectNav -ProtectNav - - - - - - - - -³ -³ -³ -³ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -RXWI_STRUC -DropCRCErr -DropPhyErr -DropPsPoll -DropVerErr - - -DropCRCErr -DropPhyErr -DropPsPoll -DropVerErr - - - - -TBTT_TIMER -TXWI_STRUC -TX_AGG_CNT -´ -µ - -HTMCS16FBK -HTMCS17FBK -HTMCS18FBK -HTMCS19FBK - -HTMCS16FBK -HTMCS17FBK -HTMCS18FBK -HTMCS19FBK - -HTMCS20FBK -HTMCS21FBK -HTMCS22FBK -HTMCS23FBK - -HTMCS20FBK -HTMCS21FBK -HTMCS22FBK -HTMCS23FBK -AggTxCount -AggTxCount -TX_PIN_CFG -¶ -TX_RTS_CFG -TX_RTY_CFG -AggRtyMode -AggRtyMode - - - - - - - - - - - - - - -TX_SW_CFG0 - - -TX_SW_CFG1 -TX_SW_CFG2 - - - - - - -AutoTxbfEn -AutoTxbfEn -EtxbfFbkEn -EtxbfFbkEn -EtxbfFbkNg -EtxbfFbkNg -EtxbfForce -EtxbfForce -ItxbfForce -ItxbfForce - - - - - - -· - -WAPIKeyIdx - - - - - - - - - - -WAPIKeyIdx - - - - - - - - - - - - - - - - - - - -get_wstats -iw_handler -priv_flags -taskStatus -thread_obj -PCI_EECTRL - -¸ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -RXMAX_PINT - -TXMAX_PINT - -RXMAX_PINT - -TXMAX_PINT - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -¹ - - - - - - - - - - - - - - - - - - - - - -TimerValue -º -GNU_PACKED -priv_flags -sys_handle -WiFiStream -PR_M_W_REG -_R_M_W_REG -_R_M_W_REG -_R_M_W_REG -NT_SUCCESS -» -RX_BULKINQ - - - - - - - - - - - - -KeyTabFlag -¼ -¼ -KeyTabFlag -KeyTabFlag - - - - - -InsertTssi - -RALINK2860 -RALINK2870 -RALINK2880 -RALINK2883 -RALINK3050 -RALINK3052 -RALINK3062 -RALINK30xx -RALINK3350 -RALINK3352 -RALINK33xx -RALINK3562 -RALINK3572 -RALINK3592 -RALINK3593 -RALINK3883 -RALINK5350 -RALINK5390 -RALINK5392 -RALINK5572 -RALINK5592 -RALINK6352 -RALINK6570 -RALINK6590 - - - - - -½ -tssi_slope -AteAllocVa -AvgRssi0X8 -AvgRssi1X8 -AvgRssi2X8 -bAutoTxAlc -bDPDEnable -bFWLoading -bQAEnabled -bQARxStart -bQATxStart -LastRxRate -LastTxRate -OtherCount -pAtePacket -RxTotalCnt -ATE_TXCARR -ATE_TXCONT - - - -HIGH_BYTE0 -HIGH_BYTE1 -InsertTssi -LEN_OF_ARG - - -¾ - - - -¿ - - - -FillChList -N_SetCenCh -TotalChNum -atomic_dec -DBGPRINT_S -DBGPRINT_S -EOPNOTSUPP -ETH_P_IPV6 -FlashWrite -KERN_EMERG -apd_pid_nr -IappPid_nr - - -À -PNET_IOCTL -POS_COOKIE -RA_NETLINK - -RTMP_OS_FD - - - - -Á - -SeqDstAddr -SeqSrcAddr - - - - - - - - - - - -completion -DBGPRINT_S -DBGPRINT_S -ETH_P_IPV6 -FlashWrite -GFP_ATOMIC -GFP_KERNEL -IWEVCUSTOM - -iwreq_data -KERN_EMERG - -apd_pid_nr -IappPid_nr - - - - -PCI_DEVICE -POS_COOKIE - - - -taskStatus -RTMP_OS_FD - - - -CurrAPAddr -à -THREAD_PID -time_after -BEN_TC_ACT - -RTMPSetLED - -SetLedMode - -ACTIVE_LOW -LED_AG_CFG -_LED_CFG_T -_LED_CFG_T -G_LED_MODE -G_LED_MODE -R_LED_MODE -R_LED_MODE -Y_LED_MODE -Y_LED_MODE - - - - -MCULedCntl - -LedActMode -Ä -MAC_LED_ON - -PLED_CFG_T -_LED_CFG_T -RTMPSetLED -SetLedMode -LinkStatus -RestPeriod -FlashWrite - - - - - -OS_SET_BIT - - - - - - - - - - - - - - - - - - - - - - - - - - -Å - - - - - - - - - - - - - - - - - - - - - - -RtmpOsWait - - - - - - - - - - - - - - - - - - - - - - - - - -BRIDGE_TAG -DBGPRINT_S -DBGPRINT_S -FlashWrite -Æ -apd_pid_nr -IappPid_nr - - - - -OS_FS_INFO -PCI_DEVICE -PNET_IOCTL -POS_COOKIE -RA_NETLINK - -Ç - - -RTMP_OS_FD - - - - - -rtusb_exit -rtusb_init - - -def_to_str -_OS_RSTRUC -_OS_RSTRUC -RtmpMLMEUp -RtmpMLMEUp -È - -É -WLAN_TX_IN - - - -ip_sum_str - -RtmpDrvOps - - -tcp_hdrlen - - - -Ê - - - - - - - - -taskStatus - - -Ë - -RalinkRate - -APPLE_TALK - - -FlgIsBMode -OS_SET_BIT -ralinkrate - - -Ì -RtmpOsWait - - - - - - - -procRegDir -Í - - -def_to_str -prefix_map - - - -BubbleSort - - - - - - - - - - - - - - - - - - - - -memcpy_exl -memcpy_exs -cmdSetSize - -AvgRssi0X8 -AvgRssi1X8 -AvgRssi2X8 -RxTotalCnt -command_id - -ATE_RXSTOP -ATE_TXSTOP -Î - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -A -: - - -atomic_dec -atomic_inc -atomic_set -RALINK_OUI -Ï - -RtmpMSleep - - - -atomic_dec -atomic_inc -atomic_set -completion - -DBGPRINT_S -DBGPRINT_S -dataToggle - - -stop_count -zeroPacket -free_pipes -ETH_P_IPV6 -GFP_ATOMIC -GFP_KERNEL -IWEVCUSTOM -iwreq_data -KERN_EMERG -Ð - - - -PNET_IOCTL -POS_COOKIE - - - - -RTMP_OS_FD -Ñ - - -CurrAPAddr - - -THREAD_PID -time_after -USB_DEVICE - - - - -E1aHighBeg -E1aHighEnd -E0aHighBeg -E0aHighEnd -Ò -E1aHighBeg -E1aHighEnd -E0aHighBeg -E0aHighEnd -E1aHighBeg -E1aHighEnd - -impProfile - - - -DBGPRINT_S -DBGPRINT_S -GFP_ATOMIC -GFP_KERNEL -iwreq_data - - -POS_COOKIE -Ó - -TimerValue -CurrAPAddr - - - - -FlashWrite - -m_data_put - -Ô - -RtmpMSleep - - - - - - - -BRIDGE_TAG -completion -DBGPRINT_S -DBGPRINT_S -ETH_P_IPV6 -ETH_P_IPV6 -FlashWrite -GFP_ATOMIC -GFP_KERNEL -IWEVCUSTOM -iwreq_data -KERN_EMERG -m_data_put - - -pMclMemPtr -Õ -PNET_IOCTL -POS_COOKIE -RtmpMSleep - - -taskStatus -RTMP_OS_FD - - - - - -CurrAPAddr -Ö -THREAD_PID -time_after -USB_DEVICE -INC_TX_TSC - - -ZONE_ERROR -RALINK_OUI - - -RtmpSAExit -RtmpSAInit -RtmpSAStop -rtstrtomac -× - - - -SA_GPIO_72 -SA_GPIO_73 -SA_GPIO_74 -SA_GPIO_75 -SA_GPIO_76 -SA_GPIO_77 -SA_GPIO_78 -SA_GPIO_79 -SA_GPIO_80 -SA_GPIO_81 -SA_GPIO_82 -SA_GPIO_83 -SA_HDR_PIN - -RtmpSAExit -RtmpSAInit -RtmpSAStop -DOT_11_HDR -PRISM_TYPE - -Ø - -file_entry - -softq_proc - - - - - -TX_PWR_CFG - -ChannelSet -GNU_PACKED - -GNU_PACKED - -ReportMode -ReportType -GNU_PACKED -Ù -GNU_PACKED - -GNU_PACKED -QUIET_INFO -RM_CH_LOAD -RM_TPC_REQ -LinkMargin -CKIP_KP_ON -STA_AES_ON -STA_WEP_ON - -RTMPAddKey - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Ú - - - - - - - - - - - - - - - - -ralinkrate - - -rt_handler -G - - - - - - - - -INCLUDE_AP -Û - - - - - - - - -INCLUDE_HS -INCLUDE_HS -INCLUDE_HS -INCLUDE_HS -INCLUDE_HS -INCLUDE_HS -INCLUDE_HS -INCLUDE_HS -INCLUDE_HS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -fnStripCmd - -fnStripCmd -Ü -INCLUDE_AP - - - - - - - - - - - - - - - - -PeerBeacon - - - - - -wifi_power - -SYWSC_STOP -SY_CONTROL -Ý - -P2POUIBYTE - - - - - - - - - - - - - - - -channelset - - - - -bConnected -bFirstTime -RetryCount - - - -Þ -TDLS_STATE - - - -bInitiator - - -ExtRateLen -SupRateLen -TdlsExtCap - -RetryCount - - - -ß -TDLS_Ioctl -TDLS_Ioctl - - - - - - -EEPROM_SEL -GET_FW_VER -GET_HW_VER - - - - -__TxRx_H__ - - -A_BAND_LOW -DEFAULT_BO -G_BAND_LOW -G_BAND_MID -UAPSD_Init -à - - - - - -UAPSD_Init - -rtusb_exit -rtusb_init - - - - - - - -DSCOPE_CTL -DSCOPE_STS - - -vht_ch_80M -ch_low_bnd - - - -__WAPI_H__ -ASCII_MODE -as_cert_no - -wapi_as_ip - - -HEADER_WAI - - - - - - - - - -ifname_len - - - - -PWAPI_CONF -_WAPI_CONF -GNU_PACKED -capability -GNU_PACKED -_WAPI_CONF -_WAPI_CONF -SMS4KeyExt -SMS4KeyExt - - - - -â - - - - - - -OUISubType -P2PACT_NOA -WfdCfgInit -WfdCfgInit - - - - -bWfdEnable -DeviceType - - - -DeviceType -DeviceType -ã -assoc_addr -bWfdClient - -WFD_PC_P2P -DeviceAddr -DeviceAddr -WfdDevInfo -WfdDevInfo -WFD_SOURCE -AGG_AALCR1 -AGG_AWSCR1 -SPE_DIS_TH -ä -ARB_AIFSR0 -ARB_AIFSR1 -DMA_TMCFR0 -TXS2H_TOUT -TXS2M_TOUT -LPON_BCNTR -LPON_BTEIR -LPON_T0STR -LPON_T1STR -LPON_TCLCR -LPON_TFRSR -LPON_TIMTR -LPON_TSELR -LPON_UTTR0 -LPON_UTTR1 -MIB_MPBSCR -MIB_MSDR10 -MIB_MSDR11 -MIB_MSDR12 -MIB_MSDR14 -MIB_MSDR15 -MIB_MSDR16 -MIB_MSDR17 -MIB_MSDR18 -MIB_MSDR22 -MIB_MSDR23 -WF_PF_BASE -CR_RXTD_39 -CR_TSSI_13 -CR_TXFE1_3 -CR_TXFE1_4 -GREEN_MODE -ht_ext_ltf -MIXED_MODE - - - -aci_detect - -cags_state -RMAC_ACBEN -RMAC_CB0R0 -RMAC_CB0R1 -RMAC_CB1R0 -RMAC_CB1R1 -RMAC_CB2R0 -RMAC_CB2R1 -RMAC_CB3R0 -RMAC_CB3R1 -addr_47_32 -æ - - -addr_39_32 -addr_47_40 - -RMAC_RFCR1 -RST_BA_SEL -RST_BA_TID -GET_APS_EN -I2T_CHK_EN -TMAC_FP0R0 -TMAC_FP0R1 -TMAC_FP0R2 -TMAC_FP0R3 -TMAC_FP0R4 -TMAC_PCTSR -TMAC_QNCR0 -TMAC_QNCR1 -TMAC_QNCR2 -TMAC_QNCR3 -TMAC_QNCR4 -ç -TX_RIFS_EN -WTBL_2_DW0 -WTBL_2_DW1 -WTBL_2_DW1 -WTBL_2_DW2 -WTBL_2_DW2 -WTBL_2_DW3 -tid_5_sn_0 -WTBL_2_DW3 -tid_5_sn_0 -WTBL_2_DW4 -tid_5_sn_5 -WTBL_2_DW4 -tid_5_sn_5 -WTBL_2_DW5 -WTBL_2_DW5 -WTBL_2_DW6 -WTBL_2_DW6 -WTBL_2_DW7 -WTBL_2_DW7 -WTBL_2_DW8 -WTBL_2_DW8 -WTBL_2_DW9 -WTBL_2_DW9 -è -wtbl_2_d10 -wtbl_2_d11 -wtbl_2_d12 -wtbl_2_d13 -wtbl_2_d14 -wtbl_2_d15 -cipher_128 -cipher_256 -cipher_wep -cipher_wpi - - - -mic_key0_0 -mic_key0_1 -mic_key0_2 -mic_key0_3 -mic_key1_0 -mic_key1_1 -mic_key1_2 -mic_key1_3 - - -RX_MV_MODE -PSM_W_FLAG -WTBL_1_DW0 -WTBL_1_DW0 -WTBL_1_DW1 -WTBL_1_DW2 -WTBL_1_DW2 -WTBL_1_DW3 - -WTBL_1_DW3 -é - -WTBL_1_DW4 -WTBL_1_DW4 -WTBL_BRCRn -WTBL_BTCRn -VendorDesc - - - - - - - - -link_local - - -SendBTMReq -SendBTMRsp - - - - - - - - - - -ê -IS_WNM_DMS -WNM_Action -TimezoneIE - - -WNM_CONFIG - - - - -INC_TX_TSC - - -RTMPFindIE -ë -AS_INITPMK -AS_INITPSK -CIPHER_KEY -ucBssIndex -ucReverved -PMKID_LIST -NoPairwise -TIME_REKEY -CFG_commit -CFG_commit -CFG_str2id -CFG_str2id -RALINK_OUI - - -ì - - -WscPBCExec - -C - - - -_EAP_FRAME -_EAP_FRAME -_IWSC_INFO -_IWSC_INFO - -bDoNotStop -bLimitedUI -bSinglePIN - -IpDevCount - - - - - - - -RegMacAddr - - -PEAP_FRAME -_EAP_FRAME -PIWSC_INFO -_IWSC_INFO -PWSC_FRAME -_WSC_FRAME -msgSubType -í - - - -WPA2PSKAES -WPAPSKTKIP -bSetupLock -EapolTimer -EntryIfIdx - - - - - - - - - - - - - -WscLEDMode -WscPeerMAC -WscPinCode -WscProfile -WscUseUPnP -Wsc_Uuid_E -AssocState -DeviceName -î - - - -_WSC_FRAME -_WSC_FRAME -VendorType - - -WSC_MSG_M1 - - -WSC_MSG_M2 -WSC_MSG_M3 -WSC_MSG_M4 -WSC_MSG_M5 -WSC_MSG_M6 -WSC_MSG_M7 -WSC_MSG_M8 -WscPeerMAC -KeyWrapKey -PinCodeLen -ReciveTime - -StaMacAddr - -ï -WSC_UUID_T -bWpsEnable - - -WscGenPSK1 -WscGenPSK2 -wsc_tlv_0b - - -ð -WSC_TLV_0B diff --git a/mt7603.SearchResults b/mt7603.SearchResults deleted file mode 100755 index 03f560e..0000000 --- a/mt7603.SearchResults +++ b/dev/null @@ -1,28 +0,0 @@ ----- HW_BEACON_MAX_COUNT Matches (13 in 6 files) ----
-Ap_connect.c (ap):1787
- for (i=0; i<HW_BEACON_MAX_COUNT(pAd); i++)
-Cmm_mac_usb.c (common):2753
- for(i=0; i < HW_BEACON_MAX_COUNT(pAd); i++)
-Cmm_mac_usb.c (common):2802
- for(i=0; i<HW_BEACON_MAX_COUNT(pAd); i++)
-Mt_mac.c (mac):1642
- for (apidx = 0; apidx < HW_BEACON_MAX_COUNT(pAd); apidx++)
-Rtmp_def.h (include):573
-#define HW_BEACON_MAX_COUNT 16
-Rtmp_def.h (include):585
-#define HW_BEACON_MAX_COUNT 8
-#define MAX_MBSSID_NUM (HW_BEACON_MAX_COUNT - MAX_MESH_NUM - MAX_APCLI_NUM)
-Rtmp_def.h (include):590
-#define HW_BEACON_MAX_COUNT 8
-Rtmp_def.h (include):597
-#define HW_BEACON_MAX_COUNT(__pAd) ((__pAd)->chipCap.BcnMaxHwNum)
-Rtmp_def.h (include):599
-#define HW_BEACON_MAX_COUNT(__pAd) 8
-Rtmp_mac.c (mac):2133
- for (apidx = 0; apidx < HW_BEACON_MAX_COUNT(pAd); apidx++)
-Rtmp_mac.c (mac):2136
- // TODO: shiang-6590, if we didn't define MBSS_SUPPORT, the pAd->BeaconOffset[x] may set as 0 when chipCap.BcnMaxHwNum != HW_BEACON_MAX_COUNT
-Rtmp_mac.h (include\mac\mac_ral):2426
-/*#define HW_BEACON_MAX_COUNT 16 */
-Rtmp_mac.h (include\mac\mac_ral):2453
-/*#define HW_BEACON_MAX_COUNT 8 */
diff --git a/mt7603.WK3 b/mt7603.WK3 deleted file mode 100755 index 017886a..0000000 --- a/mt7603.WK3 +++ b/dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -CONFIG_P2P - -CONFIG_LPS - diff --git a/os/linux/Makefile b/os/linux/Makefile new file mode 100755 index 0000000..36b239a --- a/dev/null +++ b/os/linux/Makefile @@ -0,0 +1,1747 @@ +include $(RT28xx_DIR)/os/linux/config.mk + +obj_ap := +obj_sta := +obj_p2p := +obj_wsc := +obj_vht := +obj_cmm := \ + ../../common/crypt_md5.o\ + ../../common/crypt_sha2.o\ + ../../common/crypt_hmac.o\ + ../../common/crypt_aes.o\ + ../../common/crypt_arc4.o\ + ../../common/mlme.o\ + ../../common/cmm_wep.o\ + ../../common/action.o\ + ../../common/cmm_data.o\ + ../../common/rtmp_init.o\ + ../../common/rtmp_init_inf.o\ + ../../common/cmm_tkip.o\ + ../../common/cmm_aes.o\ + ../../common/cmm_sync.o\ + ../../common/eeprom.o\ + ../../common/cmm_sanity.o\ + ../../common/cmm_info.o\ + ../../common/cmm_cfg.o\ + ../../common/cmm_wpa.o\ + ../../common/cmm_radar.o\ + ../../common/spectrum.o\ + ../../common/rtmp_timer.o\ + ../../common/rt_channel.o\ + ../../common/cmm_profile.o\ + ../../common/scan.o\ + ../../common/cmm_cmd.o\ + ../../common/ps.o\ + ../../common/sys_log.o\ + ../../common/txpower.o\ + ../../rate_ctrl/ra_ctrl.o\ + ../../rate_ctrl/alg_legacy.o\ + ../../rate_ctrl/alg_ags.o\ + ../../chips/rtmp_chip.o\ + ../../mgmt/mgmt_hw.o\ + ../../mgmt/mgmt_entrytb.o\ + ../../tx_rx/wdev.o\ + ../../tx_rx/wdev_tx.o\ + ../../tx_rx/wdev_rx.o\ + ../../os/linux/rt_profile.o + + +######################################### +# ASIC related source files +######################################### +obj_mac := +obj_phy := ../../phy/phy.o\ + ../../phy/rf.o + +ifeq ($(HAS_RTMP_BBP),y) +obj_phy += ../../phy/rtmp_phy.o +endif + +ifeq ($(HAS_RLT_BBP),y) +obj_phy += ../../phy/rlt_phy.o +endif + +ifeq ($(HAS_MT_BBP),y) +obj_phy += ../../phy/mt_phy.o +endif + +ifeq ($(HAS_MT_RF),y) +obj_phy += ../../phy/mt_rf.o +endif + +ifeq ($(HAS_RLT_RF),y) +obj_phy += ../../phy/rlt_rf.o +endif + +ifeq ($(HAS_RT_RF),y) +obj_phy += ../../phy/rt_rf.o +endif + +ifeq ($(HAS_MAC_PCI),y) +obj_mac += ../../common/cmm_mac_pci.o\ + ../../common/cmm_data_pci.o\ + ../../os/linux/rt_rbus_pci_drv.o\ + ../../hif/hif_pci.o + +ifeq ($(HAS_ATE),y) +#obj_mac += ../../ate/inf/ate_pci.o +endif + +ifeq ($(OSABL),NO) +obj_mac += \ + ../../os/linux/rt_pci_rbus.o\ + ../../os/linux/rt_rbus_pci_util.o +endif +endif + +ifeq ($(HAS_MAC_USB),y) +obj_mac += ../../common/cmm_mac_usb.o +endif + +ifeq ($(HAS_MAC_SDIO),y) +obj_mac += ../../common/cmm_mac_sdio.o +endif + +ifeq ($(HAS_RLT_MAC),y) +obj_mac += ../../hw_ctrl/cmm_asic.o +obj_mac += ../../mac/rtmp_mac.o +obj_mac += ../../mac/ral_nmac.o +obj_mac += ../../common/ral_ps.o +endif + +ifeq ($(HAS_RTMP_MAC),y) +obj_mac += ../../hw_ctrl/cmm_asic.o +obj_mac += ../../mac/rtmp_mac.o +obj_mac += ../../mac/ral_omac.o +obj_mac += ../../common/ral_ps.o +endif + +ifeq ($(HAS_MT_MAC),y) +obj_mac += ../../hw_ctrl/cmm_asic_mt.o +obj_mac += ../../hw_ctrl/cmm_chip_mt.o +obj_mac += ../../hw_ctrl/mt_gpio.o +obj_mac += ../../mac/mt_mac.o +obj_mac += ../../common/mt_ps.o +obj_mac += ../../common/mt_io.o +obj_mac += ../../tx_rx/txs.o +endif + + +######################################### +# Itnterface related source files +######################################### +obj_inf := +ifeq ($(HAS_INF_USB),y) +obj_inf += ../../common/cmm_mac_usb.o\ + ../../common/rtusb_data.o\ + ../../common/cmm_usb_io.o\ + ../../common/cmm_data_usb.o\ + ../../common/rtusb_bulk.o\ + ../../os/linux/rt_usb.o + +ifeq ($(HAS_RTMP_MAC),y) +obj_inf += ../../common/rtusb_io.o +endif + +ifeq ($(HAS_RLT_MAC),y) +obj_inf += ../../common/rtusb_io.o +endif + +ifeq ($(HAS_MT_MAC),y) +obj_inf += ../../common/mtusb_io.o +endif + +ifeq ($(OSABL),NO) +obj_inf += ../../common/rtusb_dev_id.o\ + ../../os/linux/rt_usb_util.o\ + ../../os/linux/usb_main_dev.o +endif + +ifeq ($(HAS_ATE),y) +obj_inf += ../../ate/inf/ate_usb.o +endif +endif + +ifeq ($(HAS_INF_SDIO),y) +obj_inf += ../../os/linux/rt_sdio.o\ + ../../common/mtsdio_io.o\ + ../../common/mtsdio_data.o\ + ../../common/cmm_data_sdio.o\ + ../../os/linux/sdio_main_dev.o +endif +ifeq ($(HAS_MAC_USB),y) + +endif + +ifeq ($(HAS_INF_PCI),y) +ifeq ($(OSABL),NO) +obj_inf += ../../os/linux/pci_main_dev.o +endif +endif + +ifeq ($(HAS_INF_RBUS),y) +ifeq ($(OSABL),NO) +obj_inf += ../../os/linux/rbus_main_dev.o +endif +endif + +obj_cmm += $(obj_phy) $(obj_mac) $(obj_inf) + +######################################### +# System Feature related source files +######################################### + +ifeq ($(HAS_UAPSD_SUPPORT),y) +obj_cmm += ../../common/uapsd.o +endif + +ifeq ($(HAS_BLOCK_NET_IF),y) +obj_cmm += ../../common/netif_block.o +endif + +ifeq ($(HAS_NEW_RATE_ADAPT_SUPPORT),y) +obj_cmm += ../../rate_ctrl/alg_grp.o +endif + +ifeq ($(HAS_RATE_ADAPT_AGS_SUPPORT),y) +obj_cmm += ../../rate_ctrl/alg_ags.o +endif + +ifeq ($(HAS_DFS_SUPPORT),y) +obj_cmm += ../../common/cmm_dfs.o +endif + +ifeq ($(HAS_CS_SUPPORT),y) +obj_cmm += ../../common/cmm_cs.o +endif + +#ifdef LED_CONTROL_SUPPORT +ifeq ($(HAS_LED_CONTROL_SUPPORT),y) +obj_cmm += ../../common/rt_led.o +endif +#endif // LED_CONTROL_SUPPORT // + +#ifdef ANDES_FIRMWARE_SUPPORT +ifeq ($(HAS_ANDES_FIRMWARE_SUPPORT),y) +obj_cmm += ../../mcu/rtmp_and.o +endif +#endif /* ANDES_FIRMWARE_SUPPORT */ + +#ifdef WAPI_SUPPORT +ifeq ($(HAS_WAPI_SUPPORT),y) +obj_cmm += ../../common/wapi.o +obj_cmm += ../../common/wapi_crypt.o +obj_cmm += ../../common/wapi_sms4.o +endif +#endif // WAPI_SUPPORT // + +#ifdef DOT11K_RRM_SUPPORT +ifeq ($(HAS_DOT11K_RRM_SUPPORT),y) +obj_cmm += \ + ../../common/rrm_tlv.o\ + ../../common/rrm_sanity.o\ + ../../common/rrm.o +endif +#endif // DOT11K_RRM_SUPPORT // + +#ifdef DOT11V_WNM_SUPPORT +ifeq ($(HAS_DOT11V_WNM_SUPPORT),y) +obj_cmm += \ + ../../common/wnm_tlv.o\ + ../../common/wnm.o +endif +#endif // DOT11V_WNM_SUPPORT // + +#ifdef DOT11W_PMF_SUPPORT +ifeq ($(HAS_DOT11W_PMF_SUPPORT),y) +obj_cmm += ../../common/pmf.o +endif +#endif // DOT11W_PMF_SUPPORT // + +#ifdef WMM_ACM_SUPPORT +ifeq ($(HAS_WMM_ACM_SUPPORT),y) +obj_cmm += \ + ../../common/acm_edca.o\ + ../../common/acm_comm.o\ + ../../common/acm_iocl.o +endif +#endif // WMM_ACM_SUPPORT // + +#ifdef DOT11_N_SUPPORT +ifeq ($(HAS_DOT11_N_SUPPORT),y) +obj_cmm += \ + ../../common/ba_action.o\ + ../../mgmt/mgmt_ht.o + +#ifdef TXBF_SUPPORT +ifeq ($(HAS_TXBF_SUPPORT),y) +obj_cmm += \ + ../../common/cmm_txbf.o\ + ../../common/cmm_txbf_cal.o +endif +#endif // TXBF_SUPPORT // +endif +#endif // DOT11_N_SUPPORT // + +#ifdef DOT11_VHT_SUPPORT +ifeq ($(HAS_DOT11_VHT_SUPPORT),y) +obj_vht += ../../mgmt/mgmt_vht.o\ + ../../common/vht.o +endif +#endif // DOT11_VHT_SUPPORT // + + +#ifdef WSC_INCLUDED +ifeq ($(HAS_WSC),y) +obj_wsc += \ + ../../common/wsc.o\ + ../../common/wsc_tlv.o\ + ../../common/crypt_biginteger.o\ + ../../common/crypt_dh.o +endif + +ifeq ($(HAS_WSC_V2),y) +obj_wsc += ../../common/wsc_v2.o +endif +ifeq ($(HAS_WSC_NFC),y) +obj_wsc += ../../common/nfc.o +endif +#endif // WSC_INCLUDED // + + +#ifdef DOT11R_FT_SUPPORT +ifeq ($(HAS_DOT11R_FT_SUPPORT),y) +obj_cmm += \ + ../../common/ft.o\ + ../../common/ft_tlv.o\ + ../../common/ft_iocl.o\ + ../../common/ft_rc.o +endif +#endif // DOT11R_FT_SUPPORT // + + +#ifdef P2P_SUPPORT +ifeq ($(OSABL),NO) +ifeq ($(HAS_P2P_SUPPORT),y) +obj_p2p += \ + ../../p2p/p2p_inf.o +endif +endif + +ifeq ($(HAS_P2P_SUPPORT),y) +obj_p2p += \ + ../../p2p/p2pcli.o \ + ../../p2p/p2pcli_ctrl.o \ + ../../p2p/p2pcli_sync.o \ + ../../p2p/p2pcli_auth.o \ + ../../p2p/p2pcli_assoc.o \ + ../../p2p/p2p_dbg.o\ + ../../p2p/p2p_cfg.o\ + ../../p2p/p2p.o\ + ../../p2p/p2p_packet.o\ + ../../p2p/p2p_action.o\ + ../../p2p/p2p_table.o\ + ../../p2p/p2p_ctrl.o\ + ../../p2p/p2p_disc_mng.o\ + ../../p2p/p2p_nego_mng.o\ + ../../p2p/p2p_dbg.o\ + ../../p2p/p2p.o\ + ../../p2p/p2p_packet.o\ + ../../p2p/p2p_action.o\ + ../../p2p/p2p_table.o\ + ../../p2p/p2p_ctrl.o\ + ../../p2p/p2p_disc_mng.o\ + ../../p2p/p2p_nego_mng.o +endif + +ifeq ($(HAS_P2P_SUPPORT),y) +ifeq ($(OSABL),NO) +obj_p2p += \ + ../../ap/ap_mbss_inf.o\ + ../../common/rt_os_util.o\ + ../../os/linux/ap_ioctl.o\ + ../../os/linux/sta_ioctl.o\ + ../../os/linux/rt_linux.o\ + ../../os/linux/rt_txrx_hook.o\ + ../../os/linux/rt_main_dev.o +else +$(MOD_NAME)-objs += \ + ../../os/linux/rt_symb.o +endif +endif +#endif // P2P_SUPPORT // + +#ifdef CONFIG_HOTSPOT +ifeq ($(HAS_HOTSPOT_SUPPORT),y) +obj_cmm += \ + ../../common/wnm.o\ + ../../common/gas.o\ + ../../common/hotspot.o +endif +#endif // CONFIG_HOTSPOT // + + +############################################################################### +# +# config for AP mode +# +############################################################################### + +#ifdef CONFIG_AP_SUPPORT +ifeq ($(RT28xx_MODE),AP) +obj_ap += \ + ../../ap/ap_mbss.o\ + ../../ap/ap.o\ + ../../ap/ap_assoc.o\ + ../../ap/ap_auth.o\ + ../../ap/ap_connect.o\ + ../../ap/ap_mlme.o\ + ../../ap/ap_sanity.o\ + ../../ap/ap_sync.o\ + ../../ap/ap_wpa.o\ + ../../ap/ap_data.o\ + ../../ap/ap_autoChSel.o\ + ../../ap/ap_qload.o\ + ../../ap/ap_cfg.o\ + ../../ap/ap_nps.o + +ifeq ($(HAS_QOS_DLS_SUPPORT),y) +obj_ap += ../../ap/ap_dls.o +endif + +ifeq ($(HAS_IDS_SUPPORT),y) +obj_ap += ../../ap/ap_ids.o +endif + +ifeq ($(HAS_WSC),y) +obj_ap += ../../common/wsc_ufd.o +endif + +#ifdef DOT11R_FT_SUPPORT +ifeq ($(HAS_DOT11R_FT_SUPPORT),y) +obj_ap += ../../ap/ap_ftkd.o +endif +#endif // DOT11R_FT_SUPPORT // + +#ifdef NINTENDO_AP +ifeq ($(HAS_NINTENDO),y) +obj_ap += ../../ap/ap_nintendo.o +endif +#endif // NINTENDO_AP // + +ifeq ($(HAS_WDS),y) +obj_ap += ../../ap/ap_wds.o + +ifeq ($(OSABL),NO) +obj_ap += ../../ap/ap_wds_inf.o +endif +endif + +ifeq ($(OSABL),NO) +obj_ap += \ + ../../ap/ap_mbss_inf.o\ + ../../os/linux/ap_ioctl.o +endif + +#ifdef APCLI_SUPPORT +ifeq ($(HAS_APCLI),y) +obj_ap += \ + ../../ap/ap_apcli.o \ + ../../ap/apcli_ctrl.o \ + ../../ap/apcli_sync.o \ + ../../ap/apcli_auth.o \ + ../../ap/apcli_assoc.o \ + ../../common/cmm_mat.o \ + ../../common/cmm_mat_iparp.o \ + ../../common/cmm_mat_pppoe.o \ + ../../common/cmm_mat_ipv6.o + + +ifeq ($(HAS_MAC_REPEATER_SUPPORT),y) +obj_ap += ../../ap/ap_repeater.o +endif + +ifeq ($(OSABL),NO) +obj_ap += ../../ap/ap_apcli_inf.o +endif +endif +#endif // APCLI_SUPPORT // + +#ifdef MESH_SUPPORT +ifeq ($(HAS_MESH_SUPPORT),y) +$(MOD_NAME)-objs += \ + ../../common/mesh_bmpkt.o \ + ../../common/mesh_ctrl.o \ + ../../common/mesh_link_mng.o \ + ../../common/mesh_sanity.o \ + ../../common/mesh_tlv.o \ + ../../common/mesh.o \ + ../../common/mesh_forwarding.o \ + ../../common/mesh_path_mng.o + +ifeq ($(OSABL),NO) +$(MOD_NAME)-objs += \ + ../../common/mesh_inf.o +endif +endif +#endif // MESH_SUPPORT // + +ifeq ($(HAS_CLIENT_WDS_SUPPORT),y) +$(MOD_NAME)-objs += \ + ../../common/client_wds.o +endif + +ifeq ($(HAS_IGMP_SNOOP_SUPPORT),y) +obj_ap += ../../common/igmp_snoop.o +endif + +MOD_NAME = $(MODULE)_ap +DAT_PATH = /etc/Wireless/RT$(CHIPSET_DAT)AP +DAT_FILE_NAME = conf/RT$(CHIPSET_DAT)AP.dat +endif +#endif // CONFIG_AP_SUPPORT // + + +############################################################################### +# +# config for STA mode +# +############################################################################### + +#ifdef CONFIG_STA_SUPPORT +ifeq ($(RT28xx_MODE), STA) +obj_sta += \ + ../../sta/assoc.o\ + ../../sta/auth.o\ + ../../sta/auth_rsp.o\ + ../../sta/sync.o\ + ../../sta/sanity.o\ + ../../sta/rtmp_data.o\ + ../../sta/connect.o\ + ../../sta/wpa.o\ + ../../sta/sta_cfg.o\ + ../../sta/adhoc.o\ + ../../sta/sta.o + +#ifdef DOT11R_FT_SUPPORT +ifeq ($(HAS_DOT11R_FT_SUPPORT),y) +obj_sta += \ + ../../sta/ft_auth.o\ + ../../sta/ft_action.o +endif +#endif // DOT11R_FT_SUPPORT // + +ifeq ($(OSABL),NO) +obj_sta += ../../os/linux/sta_ioctl.o +endif + +#TODO +ifeq ($(HAS_CFG80211_SUPPORT),y) +ifeq ($(HAS_CFG80211_MULTI_STA_SUPPORT),y) +obj_sta += \ + ../../ap/ap_apcli.o \ + ../../ap/apcli_ctrl.o \ + ../../ap/apcli_sync.o \ + ../../ap/apcli_auth.o \ + ../../ap/apcli_assoc.o \ + ../../ap/ap_apcli_inf.o +endif #HAS_CFG80211_MULTI_STA_SUPPORT + +ifeq ($(HAS_CFG80211_P2P_SUPPORT),y) +ifeq ($(HAS_CFG80211_P2P_CONCURRENT_DEVICE),y) +obj_sta += \ + ../../ap/ap_apcli.o \ + ../../ap/apcli_ctrl.o \ + ../../ap/apcli_sync.o \ + ../../ap/apcli_auth.o \ + ../../ap/apcli_assoc.o + +ifeq ($(OSABL),NO) +obj_sta += ../../ap/ap_apcli_inf.o +endif +endif +endif +endif + +MOD_NAME = $(MODULE)sta +DAT_PATH = /etc/Wireless/RT$(CHIPSET_DAT)STA +DAT_FILE_NAME = conf/RT$(CHIPSET_DAT)STA.dat +endif +#endif // CONFIG_STA_SUPPORT // + + +############################################################################### +# +# config for AP/STA mixed mode +# +############################################################################### + +#ifdef CONFIG_APSTA_SUPPORT +ifeq ($(RT28xx_MODE), APSTA) +MOD_NAME = $(MODULE)_apsta +endif +#endif // CONFIG_APSTA_SUPPORT // + + +############################################################################### +# +# Module Base +# +############################################################################### + +obj-m := $(MOD_NAME).o + +#ifdef CONFIG_AP_SUPPORT +ifeq ($(RT28xx_MODE),AP) + +$(MOD_NAME)-objs := \ + $(obj_ap)\ + $(obj_vht)\ + $(obj_cmm)\ + $(obj_wsc)\ + $(obj_phy) + +ifeq ($(HAS_ATE),y) +#$(MOD_NAME)-objs += ../../ate/rt_mac/rt_ate.o +$(MOD_NAME)-objs += ../../ate/ate_agent.o +endif + +ifeq ($(HAS_QA_SUPPORT),y) +#$(MOD_NAME)-objs += ../../ate/rt_mac/rt_qa.o +$(MOD_NAME)-objs += ../../ate/qa_agent.o +endif + +#ifdef MULTI_INF_SUPPORT +ifeq ($(HAS_MULTI_INF),y) +$(MOD_NAME)-objs += ../../os/linux/multi_main_dev.o +endif +#endif // MULTI_INF_SUPPORT // + +#ifdef BG_FT_SUPPORT +ifeq ($(OSABL),NO) +ifeq ($(HAS_BGFP_SUPPORT),y) +$(MOD_NAME)-objs += \ + ../../os/linux/br_ftph.o +endif +endif +#endif // BG_FT_SUPPORT // + +ifeq ($(OSABL),NO) +$(MOD_NAME)-objs += \ + ../../common/rt_os_util.o\ + ../../os/linux/rt_linux.o\ + ../../os/linux/rt_txrx_hook.o\ + ../../os/linux/rt_main_dev.o + +#ifdef CONFIG_TRACE_SUPPORT +CFLAGS_rt_linux.o = -I$(RT28xx_DIR)/include/os +#endif + +ifeq ($(HAS_SNIFFER_SUPPORT),y) +$(MOD_NAME)-objs += \ + ../../sniffer/sniffer_prism.o \ + ../../sniffer/sniffer_radiotap.o +endif + +else +$(MOD_NAME)-objs += \ + ../../os/linux/rt_symb.o +endif + +#ifdef CRDA_SUPPORT +ifeq ($(OSABL),NO) +ifeq ($(HAS_CFG80211_SUPPORT),y) +$(MOD_NAME)-objs += \ + ../../os/linux/cfg80211/cfg80211.o\ + ../../os/linux/cfg80211/cfg80211_util.o\ + ../../os/linux/cfg80211/cfg80211_scan.o\ + ../../os/linux/cfg80211/cfg80211_rx.o\ + ../../os/linux/cfg80211/cfg80211_tx.o\ + ../../os/linux/cfg80211/cfg80211_inf.o\ + ../../os/linux/cfg80211/cfg80211_p2p.o\ + ../../os/linux/cfg80211/cfg80211_ap.o\ + ../../os/linux/cfg80211/cfg80211drv.o\ + ../../os/linux/cfg80211/cfg80211_tdls.o +endif +endif + +ifeq ($(OSABL),YES) +ifeq ($(HAS_CFG80211_SUPPORT),y) +$(MOD_NAME)-objs += \ + ../../os/linux/cfg80211/cfg80211_scan.o\ + ../../os/linux/cfg80211/cfg80211_rx.o\ + ../../os/linux/cfg80211/cfg80211_tx.o\ + ../../os/linux/cfg80211/cfg80211_inf.o\ + ../../os/linux/cfg80211/cfg80211_p2p.o\ + ../../os/linux/cfg80211/cfg80211_ap.o\ + ../../os/linux/cfg80211/cfg80211drv.o +endif +endif +#endif // CRDA_SUPPORT // + +ifeq ($(HAS_RT2880_RT2860_COEXIST),y) +RT28XX_AP_OBJ += \ + ../../os/linux/rt_pci_rbus.o\ + ../../os/linux/rt_rbus_pci_util.o\ + ../../os/linux/pci_main_dev.o\ + ../../common/dfs.o +endif + +#ifdef EASY_CONFIG_SETUP +ifeq ($(HAS_EASY_CONFIG_SETUP_SUPPORT),y) +ifneq ($(PLATFORM),RALINK_3052) +$(MOD_NAME)-objs += ../../common/auto_provision.o +endif +endif +#endif // EASY_CONFIG_SETUP // + +ifeq ($(PLATFORM),IKANOS_V160) +$(MOD_NAME)-objs += ../../os/linux/vr_ikans.o +endif + +ifeq ($(PLATFORM),IKANOS_V180) +$(MOD_NAME)-objs += ../../os/linux/vr_ikans.o +endif + +ifeq ($(PLATFORM),BL2348) +ifeq ($(OSABL),NO) +$(MOD_NAME)-objs += ../../os/linux/vr_bdlt.o +endif +endif +#ifdef PLATFORM_BL23570 +ifeq ($(PLATFORM),BL23570) +rt$(CHIPSET)ap-objs += \ + ../../os/linux/vr_bdlt.o +endif +#endif // PLATFORM_BL23570 // + +ifeq ($(HAS_EASY_CONFIG_SETUP_SUPPORT),y) +ifeq ($(PLATFORM),RALINK_3052) +$(MOD_NAME)-objs += lib.a +endif +endif + +endif +#endif // CONFIG_AP_SUPPORT // + +#ifdef CONFIG_STA_SUPPORT +ifeq ($(RT28xx_MODE), STA) + +$(MOD_NAME)-objs := \ + $(obj_sta)\ + $(obj_p2p)\ + $(obj_vht)\ + $(obj_cmm)\ + $(obj_wsc)\ + $(obj_phy) + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += ../../ate/ate_agent.o +endif +ifeq ($(OSABL),NO) +$(MOD_NAME)-objs += \ + ../../common/rt_os_util.o\ + ../../os/linux/sta_ioctl.o\ + ../../os/linux/rt_linux.o\ + ../../os/linux/rt_txrx_hook.o\ + ../../os/linux/rt_main_dev.o + +ifeq ($(HAS_SNIFFER_SUPPORT),y) +$(MOD_NAME)-objs += \ + ../../sniffer/sniffer_prism.o\ + ../../sniffer/sniffer_radiotap.o +endif + +else +$(MOD_NAME)-objs += \ + ../../os/linux/rt_symb.o +endif + +#ifdef ETH_CONVERT +ifeq ($(HAS_ETH_CONVERT_SUPPORT), y) +$(MOD_NAME)-objs += \ + ../../common/cmm_mat.o \ + ../../common/cmm_mat_iparp.o \ + ../../common/cmm_mat_pppoe.o \ + ../../common/cmm_mat_ipv6.o +endif +#endif // ETH_CONVERT // + +#ifdef ADHOC_WPA2PSK_SUPPORT +$(MOD_NAME)-objs += \ + ../../common/cmm_wpa_adhoc.o +#endif // ADHOC_WPA2PSK_SUPPORT // + +#ifdef WSC_INCLUDED +ifeq ($(HAS_WSC_V2),y) +ifeq ($(HAS_WIDI_SUPPORT),y) +$(MOD_NAME)-objs += ../../common/l2sd_ta_mod.o +endif + +ifeq ($(HAS_IWSC_SUPPORT),y) +$(MOD_NAME)-objs += ../../sta/sta_iwsc.o +endif + +endif +#endif // WSC_INCLUDED // + +#ifdef STA_EASY_CONFIG_SETUP +ifeq ($(HAS_WSC),y) +ifeq ($(HAS_EASY_CONFIG_SETUP_SUPPORT),y) +$(MOD_NAME)-objs += \ + ../../common/auto_provision.o \ + ../../sta/sta_auto_provision.o +endif +endif +#endif // STA_EASY_CONFIG_SETUP // + +ifeq ($(HAS_QOS_DLS_SUPPORT),y) +$(MOD_NAME)-objs += ../../sta/dls.o +endif + +#ifdef DOT11Z_TDLS_SUPPORT +ifeq ($(HAS_DOT11Z_TDLS_SUPPORT),y) +$(MOD_NAME)-objs += \ + ../../sta/tdls.o\ + ../../sta/tdls_ctrl.o\ + ../../sta/tdls_tlv.o\ + ../../sta/tdls_link_mng.o\ + ../../sta/tdls_uapsd.o +endif +#endif // DOT11Z_TDLS_SUPPORT // + +#ifdef WFD_SUPPORT +ifeq ($(HAS_WFD_SUPPORT),y) +$(MOD_NAME)-objs += \ + ../../common/wfd.o +endif +#endif // WFD_SUPPORT // + +ifeq ($(HAS_ATE),y) +#$(MOD_NAME)-objs += ../../ate/rt_mac/rt_ate.o +endif + +ifeq ($(HAS_QA_SUPPORT),y) +$(MOD_NAME)-objs += ../../ate/rt_mac/rt_qa.o +endif + +#ifdef MESH_SUPPORT +ifeq ($(HAS_MESH_SUPPORT),y) +$(MOD_NAME)-objs += \ + ../../common/mesh_bmpkt.o \ + ../../common/mesh_ctrl.o \ + ../../common/mesh_link_mng.o \ + ../../common/mesh_sanity.o \ + ../../common/mesh_tlv.o \ + ../../common/mesh.o \ + ../../common/mesh_forwarding.o \ + ../../common/mesh_path_mng.o + +ifeq ($(OSABL),NO) +$(MOD_NAME)-objs += \ + ../../common/mesh_inf.o +endif +endif +#endif // MESH_SUPPORT // + +#ifdef WAPI_SUPPORT +ifeq ($(HAS_WAPI_SUPPORT),y) +$(MOD_NAME)-objs += \ + ../../common/wapi.o +endif +#endif // WAPI_SUPPORT // + +#ifdef DOT11V_WNM_SUPPORT +ifeq ($(HAS_DOT11V_WNM_SUPPORT),y) +$(MOD_NAME)-objs += \ + ../../common/wnm.o\ + ../../common/wnm_tlv.o +endif +#endif // DOT11V_WNM_SUPPORT // + +#ifdef CRDA_SUPPORT +ifeq ($(OSABL),NO) +ifeq ($(HAS_CFG80211_SUPPORT),y) +$(MOD_NAME)-objs += \ + ../../os/linux/cfg80211/cfg80211.o \ + ../../os/linux/cfg80211/cfg80211_util.o\ + ../../os/linux/cfg80211/cfg80211_scan.o\ + ../../os/linux/cfg80211/cfg80211_rx.o\ + ../../os/linux/cfg80211/cfg80211_tx.o\ + ../../os/linux/cfg80211/cfg80211_inf.o\ + ../../os/linux/cfg80211/cfg80211_p2p.o\ + ../../os/linux/cfg80211/cfg80211_ap.o\ + ../../os/linux/cfg80211/cfg80211drv.o +ifeq ($(HAS_CFG80211_TDLS_SUPPORT),y) +$(MOD_NAME)-objs += \ + ../../os/linux/cfg80211/cfg80211_tdls.o +endif +ifeq ($(HAS_CFG80211_P2P_SUPPORT),y) +$(MOD_NAME)-objs += \ + ../../ap/ap_mbss.o\ + ../../ap/ap.o\ + ../../ap/ap_assoc.o\ + ../../ap/ap_auth.o\ + ../../ap/ap_connect.o\ + ../../ap/ap_mlme.o\ + ../../ap/ap_sanity.o\ + ../../ap/ap_sync.o\ + ../../ap/ap_wpa.o\ + ../../ap/ap_data.o\ + ../../ap/ap_autoChSel.o\ + ../../ap/ap_qload.o\ + ../../ap/ap_cfg.o\ + ../../ap/ap_nps.o\ + ../../os/linux/ap_ioctl.o +endif + +#TODO +ifeq ($(HAS_CFG80211_MULTI_STA_SUPPORT),y) +$(MOD_NAME)-objs += \ + ../../ap/ap_mbss.o\ + ../../ap/ap.o\ + ../../ap/ap_assoc.o\ + ../../ap/ap_auth.o\ + ../../ap/ap_connect.o\ + ../../ap/ap_mlme.o\ + ../../ap/ap_sanity.o\ + ../../ap/ap_sync.o\ + ../../ap/ap_wpa.o\ + ../../ap/ap_data.o\ + ../../ap/ap_autoChSel.o\ + ../../ap/ap_qload.o\ + ../../ap/ap_cfg.o\ + ../../ap/ap_nps.o\ + ../../os/linux/ap_ioctl.o +endif #HAS_CFG80211_MULTI_STA_SUPPORT + +endif +endif + +ifeq ($(OSABL),YES) +ifeq ($(HAS_CFG80211_SUPPORT),y) +$(MOD_NAME)-objs += \ + ../../os/linux/cfg80211/cfg80211_scan.o\ + ../../os/linux/cfg80211/cfg80211_rx.o\ + ../../os/linux/cfg80211/cfg80211_tx.o\ + ../../os/linux/cfg80211/cfg80211_inf.o\ + ../../os/linux/cfg80211/cfg80211_p2p.o\ + ../../os/linux/cfg80211/cfg80211_ap.o\ + ../../os/linux/cfg80211/cfg80211drv.o +endif +endif +#endif // CRDA_SUPPORT // + +#ifdef BT_COEXISTENCE_SUPPORT +ifeq ($(HAS_BT_COEXISTENCE_SUPPORT),y) +obj_sta += ../../common/misc.o +endif +#endif // BT_COEXISTENCE_SUPPORT // + +#ifdef CONFIG_MULTI_CHANNEL +ifeq ($(HAS_MULTI_CHANNEL),y) +obj_sta += ../../common/multi_channel.o +endif +#endif /* CONFIG_MULTI_CHANNEL */ + +endif +#endif // CONFIG_STA_SUPPORT // + +#ifdef CONFIG_APSTA_SUPPORT +ifeq ($(RT28xx_MODE), APSTA) +$(MOD_NAME)-objs := \ + $(obj_ap)\ + $(obj_sta)\ + $(obj_cmm)\ + $(obj_wsc) +endif +#endif // CONFIG_APSTA_SUPPORT // + + +#chip releated + +#ifdef RT2860 +ifneq ($(findstring rt2860,$(CHIPSET)),) +$(MOD_NAME)-objs += \ + ../../mcu/mcu.o\ + ../../mcu/mcu_51.o\ + ../../common/ee_prom.o\ + ../../chips/rt28xx.o + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += ../../ate/rt_mac/chips/rt28xx_ate.o +endif + +endif +#endif // RT2860 // + +#ifdef RT3090 +ifneq ($(findstring rt3090,$(CHIPSET)),) +$(MOD_NAME)-objs += \ + ../../common/ee_prom.o\ + ../../common/ee_efuse.o\ + ../../mcu/mcu.o\ + ../../mcu/mcu_51.o\ +../../chips/rt30xx.o\ + ../../chips/rt3090.o + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += ../../ate/rt_mac/chips/rt30xx_ate.o +endif + +ifeq ($(HAS_RTMP_FLASH_SUPPORT),y) +$(MOD_NAME)-objs += ../../common/ee_flash.o +endif + +endif +#endif // RT3090 // + +#ifdef RT2870 +ifneq ($(findstring rt2870,$(CHIPSET)),) +$(MOD_NAME)-objs += \ + ../../mcu/mcu.o\ + ../../mcu/rtmp_M51.o\ + ../../common/ee_prom.o\ + ../../chips/rt28xx.o + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += ../../ate/rt_mac/chips/rt28xx_ate.o +endif + +endif +#endif // RT2870 // + +#ifdef RT3070 +ifneq ($(findstring rt2070,$(CHIPSET)),) +$(MOD_NAME)-objs += \ + ../../mcu/mcu.o\ + ../../mcu/mcu_51.o\ + ../../common/ee_prom.o\ + ../../common/ee_efuse.o\ + ../../chips/rt30xx.o\ + ../../chips/rt3070.o + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += ../../ate/rt_mac/chips/rt30xx_ate.o +endif + +endif + + +ifneq ($(findstring rt3070,$(CHIPSET)),) +$(MOD_NAME)-objs += \ + ../../mcu/mcu.o\ + ../../mcu/rtmp_M51.o\ + ../../common/ee_prom.o\ + ../../common/ee_efuse.o\ + ../../chips/rt30xx.o\ + ../../chips/rt3070.o + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += ../../ate/rt_mac/chips/rt30xx_ate.o +endif + +endif +#endif // RT3070 // + +#ifdef RT2880 +ifneq ($(findstring rt2880,$(CHIPSET)),) +$(MOD_NAME)-objs += \ + ../../common/ee_flash.o\ + ../../common/rtmp_swmcu.o\ + ../../chips/rt2880.o + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += ../../ate/rt_mac/chips/rt28xx_ate.o +endif + +endif +#endif // RT2880 // + +#ifdef RT3052 +ifneq ($(findstring rt3052,$(CHIPSET)),) +$(MOD_NAME)-objs += \ + ../../common/ee_flash.o\ + ../../common/rtmp_swmcu.o\ + ../../chips/rt305x.o + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += \ + ../../ate/rt_mac/chips/rt305x_ate.o +endif + +ifeq ($(OSABL),NO) +$(MOD_NAME)-objs += ../../os/linux/rt_proc.o +endif + +endif +#endif // RT3052 // + +#ifdef RT3352 +ifneq ($(findstring rt3352,$(CHIPSET)),) +$(MOD_NAME)-objs += \ + ../../common/ee_flash.o\ + ../../common/rtmp_swmcu.o\ + ../../chips/rt305x.o\ + ../../chips/rt3352.o + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += \ + ../../ate/rt_mac/chips/rt305x_ate.o\ + ../../ate/rt_mac/chips/rt3352_ate.o +endif + +ifeq ($(OSABL),NO) +$(MOD_NAME)-objs += ../../os/linux/rt_proc.o +endif + +endif +#endif // RT3352 // + + +#ifdef RT5350 +ifneq ($(findstring rt5350,$(CHIPSET)),) +$(MOD_NAME)-objs += \ + ../../common/ee_flash.o\ + ../../common/rtmp_swmcu.o\ + ../../chips/rt305x.o\ + ../../chips/rt5350.o + +ifeq ($(OSABL),NO) +$(MOD_NAME)-objs += ../../os/linux/rt_proc.o +endif + +ifneq ($(findstring $(RT28xx_MODE),STA APSTA),) +$(MOD_NAME)-objs += ../../common/frq_cal.o +endif + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += \ +#not need to include it yet. +# ../../ate/rt_mac/chips/rt305x_ate.o\ + ../../ate/rt_mac/chips/rt5350_ate.o +endif + +endif +#endif // RT5350 // + + +#ifdef RT3572 +ifneq ($(findstring rt3572,$(CHIPSET)),) +$(MOD_NAME)-objs += \ + ../../mcu/mcu.o\ + ../../mcu/mcu_51.o\ + ../../common/ee_prom.o\ + ../../common/ee_efuse.o\ + ../../chips/rt28xx.o\ + ../../chips/rt30xx.o\ + ../../chips/rt35xx.o + +ifeq ($(HAS_RTMP_FLASH_SUPPORT),y) +$(MOD_NAME)-objs += ../../common/ee_flash.o +endif + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += \ + ../../ate/rt_mac/chips/rt28xx_ate.o\ + ../../ate/rt_mac/chips/rt35xx_ate.o +endif + +endif +#endif // RT3572 // + +#ifdef RT3062 +ifneq ($(findstring rt3062,$(CHIPSET)),) +$(MOD_NAME)-objs += \ + ../../mcu/mcu.o\ + ../../common/rtmp_M51.o\ + ../../common/ee_prom.o\ + ../../common/ee_efuse.o\ + ../../chips/rt28xx.o\ + ../../chips/rt30xx.o\ + ../../chips/rt35xx.o + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += \ + ../../ate/rt_mac/chips/rt28xx_ate.o\ + ../../ate/rt_mac/chips/rt35xx_ate.o +endif + +endif +#endif // RT3062 // + +#ifdef RT3562 +ifneq ($(findstring rt3562,$(CHIPSET)),) +$(MOD_NAME)-objs += \ + ../../mcu/mcu.o\ + ../../mcu/mcu_51.o\ + ../../common/ee_prom.o\ + ../../common/ee_efuse.o\ + ../../chips/rt28xx.o\ + ../../chips/rt30xx.o\ + ../../chips/rt35xx.o + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += \ + ../../ate/rt_mac/chips/rt28xx_ate.o\ + ../../ate/rt_mac/chips/rt35xx_ate.o +endif + +endif +#endif // RT3562 // + + +#ifdef RT3573 +ifneq ($(findstring rt3573,$(CHIPSET)),) +$(MOD_NAME)-objs += \ + ../../mcu/mcu.o\ + ../../mcu/rtmp_M51.o\ + ../../common/ee_prom.o\ + ../../common/ee_efuse.o\ + ../../chips/rt28xx.o\ + ../../chips/rt30xx.o\ + ../../chips/rt35xx.o\ + ../../chips/rt3593.o + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += \ + ../../ate/rt_mac/chips/rt30xx_ate.o\ + ../../ate/rt_mac/chips/rt35xx_ate.o\ + ../../ate/rt_mac/chips/rt3593_ate.o +endif + +ifneq ($(findstring $(RT28xx_MODE),STA APSTA),) +$(MOD_NAME)-objs += ../../common/frq_cal.o +endif + +endif +#endif // RT3573 // + +#ifdef RTMP_MAC_PCI +#ifdef RT3593 +ifneq ($(findstring rt3593,$(CHIPSET)),) +$(MOD_NAME)-objs += \ + ../../mcu/mcu.o\ + ../../mcu/mcu_51.o\ + ../../common/ee_prom.o\ + ../../common/ee_efuse.o\ + ../../chips/rt30xx.o\ + ../../chips/rt35xx.o\ + ../../chips/rt28xx.o\ + ../../chips/rt3593.o + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += \ + ../../ate/rt_mac/chips/rt30xx_ate.o\ + ../../ate/rt_mac/chips/rt35xx_ate.o\ + ../../ate/rt_mac/chips/rt3593_ate.o +endif + +ifneq ($(findstring $(RT28xx_MODE),STA APSTA),) +$(MOD_NAME)-objs += ../../common/frq_cal.o +endif + +endif +#endif // RT3593 // +#endif // RTMP_MAC_PCI // + +#ifdef RT3390 +ifneq ($(findstring rt3390,$(CHIPSET)),) +$(MOD_NAME)-objs += \ + ../../mcu/mcu.o\ + ../../mcu/rtmp_M51.o\ + ../../common/ee_prom.o\ + ../../common/ee_efuse.o\ + ../../chips/rt30xx.o\ + ../../chips/rt3090.o\ + ../../chips/rt33xx.o\ + ../../chips/rt3390.o + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += \ + ../../ate/rt_mac/chips/rt33xx_ate.o\ + ../../ate/rt_mac/chips/rt30xx_ate.o +endif + +endif +#endif // RT3390 // + +#ifdef RT3370 +ifneq ($(findstring rt3370,$(CHIPSET)),) +$(MOD_NAME)-objs += \ + ../../mcu/mcu.o\ + ../../mcu/mcu_51.o\ + ../../common/ee_prom.o\ + ../../common/ee_efuse.o\ + ../../chips/rt33xx.o\ + ../../chips/rt3370.o\ + ../../chips/rt3070.o\ + ../../chips/rt30xx.o + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += \ + ../../ate/rt_mac/chips/rt33xx_ate.o\ + ../../ate/rt_mac/chips/rt30xx_ate.o +endif + +endif +#endif // RT3370 // + +#ifdef RT5370 +ifneq ($(findstring rt5370,$(CHIPSET)),) +$(MOD_NAME)-objs += \ + ../../mcu/mcu.o\ + ../../mcu/rtmp_M51.o\ + ../../common/ee_prom.o\ + ../../common/ee_efuse.o\ + ../../chips/rt33xx.o\ + ../../chips/rt3370.o\ + ../../chips/rt3070.o\ + ../../chips/rt30xx.o\ + ../../chips/rt5390.o + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += \ + ../../ate/rt_mac/chips/rt5390_ate.o\ + ../../ate/rt_mac/chips/rt30xx_ate.o\ + ../../ate/rt_mac/chips/rt33xx_ate.o +endif + +ifneq ($(findstring $(RT28xx_MODE),STA APSTA),) +$(MOD_NAME)-objs += ../../common/frq_cal.o +endif + +endif +#endif // RT5370 // + +#ifdef RT5390 +ifneq ($(findstring rt5390,$(CHIPSET)),) +$(MOD_NAME)-objs += \ + ../../mcu/mcu.o\ + ../../mcu/mcu_51.o\ + ../../common/ee_prom.o\ + ../../common/ee_efuse.o\ + ../../chips/rt30xx.o\ + ../../chips/rt3090.o\ + ../../chips/rt33xx.o\ + ../../chips/rt3390.o\ + ../../chips/rt5390.o + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += \ + ../../ate/rt_mac/chips/rt5390_ate.o\ + ../../ate/rt_mac/chips/rt33xx_ate.o\ + ../../ate/rt_mac/chips/rt30xx_ate.o +endif + + +ifneq ($(findstring $(RT28xx_MODE),STA APSTA),) +$(MOD_NAME)-objs += ../../common/frq_cal.o +endif + +endif +#endif // RT5390 // + +#ifdef RT3290 +ifneq ($(findstring rt3290,$(CHIPSET)),) +$(MOD_NAME)-objs += \ + ../../mcu/mcu.o\ + ../../mcu/mcu_51.o\ + ../../common/ee_prom.o\ + ../../common/ee_efuse.o\ + ../../chips/rt30xx.o\ + ../../chips/rt3290.o + +ifneq ($(findstring $(RT28xx_MODE),STA APSTA),) +$(MOD_NAME)-objs += ../../common/frq_cal.o +endif + +endif +#endif // RT3290 // + + +#ifdef RT5572 +ifneq ($(findstring rt5572,$(CHIPSET)),) +$(MOD_NAME)-objs += \ + ../../mcu/mcu.o\ + ../../mcu/rtmp_M51.o\ + ../../common/ee_prom.o\ + ../../common/ee_efuse.o\ + ../../chips/rt30xx.o\ + ../../chips/rt5592.o + +ifeq ($(HAS_RTMP_FLASH_SUPPORT),y) +$(MOD_NAME)-objs += ../../common/ee_flash.o +endif + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += ../../ate/rt_mac/chips/rt5592_ate.o +endif + +ifneq ($(findstring $(RT28xx_MODE),STA APSTA),) +$(MOD_NAME)-objs += ../../common/frq_cal.o +endif + +endif +#endif // RT5572 // + +#ifdef RTMP_MAC_PCI +#ifdef RT5592 +ifneq ($(findstring rt5592,$(CHIPSET)),) +$(MOD_NAME)-objs += \ + ../../common/ee_prom.o\ + ../../common/frq_cal.o\ + ../../common/ee_efuse.o\ + ../../mcu/mcu.o\ + ../../mcu/mcu_51.o\ + ../../chips/rt30xx.o\ + ../../chips/rt5592.o + +ifeq ($(HAS_RTMP_FLASH_SUPPORT),y) +$(MOD_NAME)-objs += ../../common/ee_flash.o +endif + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += ../../ate/rt_mac/chips/rt5592_ate.o +endif + +ifneq ($(findstring $(RT28xx_MODE),STA APSTA),) +$(MOD_NAME)-objs += ../../common/frq_cal.o +endif + +endif +#endif // RT5592 // +#endif //RTMP_MAC_PCI// + + +#ifdef MT76x0 +ifneq ($(or $(findstring mt7650e,$(CHIPSET)),$(findstring mt7630e,$(CHIPSET)),$(findstring mt7610e,$(CHIPSET))),) +$(MOD_NAME)-objs += \ + ../../common/ee_efuse.o\ + ../../common/ee_prom.o\ + ../../chips/rt65xx.o\ + ../../chips/mt76x0.o\ + ../../mac/ral_nmac.o\ + ../../mcu/mcu.o\ + ../../mcu/andes_core.o\ + ../../mcu/andes_rlt.o + +ifeq ($(HAS_RTMP_FLASH_SUPPORT),y) +$(MOD_NAME)-objs += ../../common/ee_flash.o +endif + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += ../../ate/rt_mac/chips/rt6590_ate.o +endif + +ifneq ($(findstring $(RT28xx_MODE),STA APSTA),) +$(MOD_NAME)-objs += ../../common/frq_cal.o +endif + +endif +#endif // MT76x0 // + +#ifdef MT76x0 +ifneq ($(or $(findstring mt7650u,$(CHIPSET)),$(findstring mt7630u,$(CHIPSET)),$(findstring mt7610u,$(CHIPSET))),) +$(MOD_NAME)-objs += \ + ../../common/ee_prom.o\ + ../../common/ee_efuse.o\ + ../../chips/rt65xx.o\ + ../../chips/mt76x0.o\ + ../../mac/ral_nmac.o\ + ../../mcu/mcu.o\ + ../../mcu/andes_core.o\ + ../../mcu/andes_rlt.o + +ifeq ($(HAS_RTMP_FLASH_SUPPORT),y) +$(MOD_NAME)-objs += ../../common/ee_flash.o +endif + +ifeq ($(HAS_CSO_SUPPORT),y) +$(MOD_NAME)-objs += \ + ../../naf/net_acc.o\ + ../../naf/cso.o +ifeq ($(HAS_TSO_SUPPORT),y) +$(MOD_NAME)-objs += ../../naf/tso.o +endif +endif + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += ../../ate/rt_mac/chips/rt6590_ate.o +endif + +ifneq ($(findstring $(RT28xx_MODE),STA APSTA),) +$(MOD_NAME)-objs += ../../common/frq_cal.o +endif + +endif +#endif // MT76x0 // + +#ifdef MT76x2 +ifneq ($(or $(findstring mt7662e,$(CHIPSET)),$(findstring mt7612e,$(CHIPSET))),) +$(MOD_NAME)-objs += \ + ../../common/ee_efuse.o\ + ../../common/ee_prom.o\ + ../../chips/rt65xx.o\ + ../../chips/mt76x2.o\ + ../../phy/mt76x2_rf.o\ + ../../mac/ral_nmac.o\ + ../../mcu/mcu.o\ + ../../mcu/andes_core.o\ + ../../mcu/andes_rlt.o + +ifeq ($(HAS_RTMP_FLASH_SUPPORT),y) +$(MOD_NAME)-objs += ../../common/ee_flash.o +endif + +ifeq ($(HAS_MT76XX_BT_COEXISTENCE_SUPPORT),y) +$(MOD_NAME)-objs += ../../mcu/bt_coex.o +endif + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += ../../ate/rt_mac/chips/mt76x2_ate.o +endif + +ifneq ($(findstring $(RT28xx_MODE),STA APSTA),) +$(MOD_NAME)-objs += ../../common/frq_cal.o +endif + +endif + + +ifneq ($(or $(findstring mt7662u,$(CHIPSET)),$(findstring mt7612u,$(CHIPSET))),) +$(MOD_NAME)-objs += \ + ../../common/ee_prom.o\ + ../../common/ee_efuse.o\ + ../../chips/rt65xx.o\ + ../../chips/mt76x2.o\ + ../../phy/mt76x2_rf.o\ + ../../mac/ral_nmac.o\ + ../../mcu/mcu.o\ + ../../mcu/andes_core.o\ + ../../mcu/andes_rlt.o + +ifeq ($(HAS_RTMP_FLASH_SUPPORT),y) +$(MOD_NAME)-objs += ../../common/ee_flash.o +endif + +ifeq ($(HAS_MT76XX_BT_COEXISTENCE_SUPPORT),y) +$(MOD_NAME)-objs += ../../mcu/bt_coex.o +endif + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += ../../ate/rt_mac/chips/mt76x2_ate.o +endif + +ifeq ($(HAS_TSO_SUPPORT),y) +$(MOD_NAME)-objs += \ + ../../naf/net_acc.o\ + ../../naf/cso.o +endif + +ifeq ($(HAS_CSO_SUPPORT), y) +$(MOD_NAME)-objs += \ + ../../naf/net_acc.o\ + ../../naf/cso.o +endif + +ifneq ($(findstring $(RT28xx_MODE),STA APSTA),) +$(MOD_NAME)-objs += ../../common/frq_cal.o +endif + +endif +#endif // MT76x2 // + + +#ifdef MT7603 +ifneq ($(or $(findstring mt7603e,$(CHIPSET)),$(findstring mt7603u,$(CHIPSET))),) +$(MOD_NAME)-objs += \ + ../../common/ee_efuse.o\ + ../../common/ee_prom.o\ + ../../chips/mt7603.o\ + ../../mcu/mcu.o\ + ../../mcu/andes_core.o\ + ../../mcu/andes_mt.o + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += ../../ate/mt_mac/mt_ate.o +endif + +endif +#endif // MT7603 // + +#ifdef MT7636 +ifneq ($(or $(findstring mt7636s,$(CHIPSET)),$(findstring mt7636u,$(CHIPSET))),) +$(MOD_NAME)-objs += \ + ../../common/ee_efuse.o\ + ../../common/ee_prom.o\ + ../../chips/mt7636.o\ + ../../mcu/mcu.o\ + ../../mcu/andes_core.o\ + ../../mcu/andes_mt.o + +#ifeq ($(HAS_ATE),y) +#$(MOD_NAME)-objs += ../../ate/chips/mt7603_ate.o +#endif + +endif +#endif // MT7636 // + +#ifdef MT7628 +ifneq ($(findstring mt7628,$(CHIPSET)),) +$(MOD_NAME)-objs += \ + ../../common/ee_efuse.o\ + ../../common/ee_prom.o\ + ../../chips/mt7628.o\ + ../../mcu/mcu.o\ + ../../mcu/andes_core.o\ + ../../mcu/andes_mt.o + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += ../../ate/mt_mac/mt_ate.o +endif +endif +#endif // MT7628 // + + +#ifdef RT8592 +ifneq ($(findstring rt8592,$(CHIPSET)),) +$(MOD_NAME)-objs += \ + ../../common/ee_prom.o\ + ../../common/rtmp_mcu.o\ + ../../chips/rt65xx.o\ + ../../chips/rt85592.o\ + ../../mac/ral_nmac.o\ + ../../mcu/mcu.o\ + ../../mcu/andes_core.o\ + ../../mcu/andes_rlt.o + +ifeq ($(HAS_RTMP_FLASH_SUPPORT),y) +$(MOD_NAME)-objs += ../../common/ee_flash.o +endif + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += ../../ate/rt_mac/chips/rt85592_ate.o +endif + +ifneq ($(findstring $(RT28xx_MODE),STA APSTA),) +$(MOD_NAME)-objs += ../../common/frq_cal.o +endif + +endif +#endif // RT8592 // + + +#ifdef MT7601E +ifneq ($(findstring mt7601e,$(CHIPSET)),) +$(MOD_NAME)-objs += \ + ../../common/ee_prom.o\ + ../../common/ee_efuse.o\ + ../../mcu/rtmp_and.o\ + ../../mcu/rtmp_mcu.o\ + ../../mcu/rtmp_M51.o\ + ../../chips/rt30xx.o\ + ../../chips/mt7601.o\ + ../../mac/ral_omac.o + +ifeq ($(HAS_RTMP_FLASH_SUPPORT),y) +$(MOD_NAME)-objs += ../../common/ee_flash.o +endif + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += ../../ate/rt_mac/chips/mt7601_ate.o +endif + +ifneq ($(findstring $(RT28xx_MODE),STA APSTA),) +$(MOD_NAME)-objs += ../../common/frq_cal.o +endif + +endif +#endif // MT7601E // + + +#ifdef MT7601U +ifneq ($(findstring mt7601u,$(CHIPSET)),) +$(MOD_NAME)-objs += \ + ../../common/ee_prom.o\ + ../../common/ee_efuse.o\ + ../../mcu/mcu.o\ + ../../mcu/andes_core.o\ + ../../mcu/andes_rlt.o\ + ../../chips/mt7601.o\ + ../../mac/ral_nmac.o + +ifeq ($(HAS_RTMP_FLASH_SUPPORT),y) +$(MOD_NAME)-objs += ../../common/ee_flash.o +endif + +ifeq ($(HAS_ATE),y) +$(MOD_NAME)-objs += ../../ate/rt_mac/chips/mt7601_ate.o +endif + +ifeq ($(HAS_TSO_SUPPORT),y) +$(MOD_NAME)-objs += \ + ../../naf/net_acc.o\ + ../../naf/tso.o\ + ../../naf/cso.o +endif + +ifneq ($(findstring $(RT28xx_MODE),STA APSTA),) +$(MOD_NAME)-objs += ../../common/frq_cal.o +endif + +endif +#endif // MT7601U // + + +PHONY := clean install uninstall + +clean: + rm -f ../../common/*.o + rm -f ../../common/.*.{cmd,flags,d} + rm -f ../../os/linux/*.{o,ko,mod.{o,c}} + rm -f ../../os/linux/.*.{cmd,flags,d} + rm -fr ../../os/linux/.tmp_versions +#Must clean Module.symvers; or you will suffer symbol version not match +#when OS_ABL = YES. + rm -f ../../os/linux/Module.symvers + rm -f ../../os/linux/Modules.symvers + rm -f ../../os/linux/Module.markers + rm -f ../../os/linux/modules.order + rm -f ../../chips/*.o + rm -f ../../chips/.*.{cmd,flags,d} +ifeq ($(RT28xx_MODE),AP) + rm -f ../../ap/*.o + rm -f ../../ap/.*.{cmd,flags,d} +else +ifeq ($(RT28xx_MODE),STA) + rm -f ../../sta/*.o + rm -f ../../sta/.*.{cmd,flags,d} +else +ifeq ($(RT28xx_MODE),APSTA) + rm -f ../../ap/*.o + rm -f ../../ap/.*.{cmd,flags,d} + rm -f ../../sta/*.o + rm -f ../../sta/.*.{cmd,flags,d} +endif +endif +endif + +install: + rm -rf $(DAT_PATH) + $(shell [ ! -f /etc/Wireless ] && mkdir /etc/Wireless) + mkdir $(DAT_PATH) + cp $(RT28xx_DIR)/$(DAT_FILE_NAME) $(DAT_PATH)/. + install -d $(LINUX_SRC_MODULE) + install -m 644 -c $(addsuffix .ko,$(MOD_NAME)) $(LINUX_SRC_MODULE) + /sbin/depmod -a ${shell uname -r} + +uninstall: +# rm -rf $(DAT_PATH) + rm -rf $(addprefix $(LINUX_SRC_MODULE),$(addsuffix .ko,$(MOD_NAME))) + /sbin/depmod -a ${shell uname -r} + +# Declare the contents of the .PHONY variable as phony. We keep that +# information in a variable so we can use it in if_changed and friends. +.PHONY: $(PHONY) diff --git a/os/linux/ap_ioctl.c b/os/linux/ap_ioctl.c index 64ebf53..75c6826 100755 --- a/os/linux/ap_ioctl.c +++ b/os/linux/ap_ioctl.c @@ -337,7 +337,7 @@ skip_check: RTMP_AP_IoctlHandle(pAd, wrq, CMD_RTPRIV_IOCTL_AP_SIOCGIWESSID, 0, pIoctlSSID, 0); pSsidStr = (PCHAR)pIoctlSSID->pSsidStr; - erq->length = pIoctlSSID->length; + erq->length = (USHORT)pIoctlSSID->length; #if 0 /* os abl move */ #ifdef APCLI_SUPPORT diff --git a/os/linux/cfg80211/cfg80211.c b/os/linux/cfg80211/cfg80211.c index 388f961..48496e5 100755 --- a/os/linux/cfg80211/cfg80211.c +++ b/os/linux/cfg80211/cfg80211.c @@ -126,7 +126,7 @@ #ifdef RT_CFG80211_SUPPORT #ifdef CONFIG_PM -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 11, 0)) static const struct wiphy_wowlan_support mtk_wowlan_support = { .flags = WIPHY_WOWLAN_MAGIC_PKT, }; @@ -418,9 +418,9 @@ static int CFG80211_OpsMonitorChannelSet(struct wiphy *pWiphy, - printk("control:%d MHz width:%d center: %d/%d MHz", + CFG80211DBG(RT_DEBUG_OFF, ("control:%d MHz width:%d center: %d/%d MHz", pChan->center_freq, chandef->width, - chandef->center_freq1, chandef->center_freq2); + chandef->center_freq1, chandef->center_freq2)); /* get channel number */ @@ -430,7 +430,7 @@ static int CFG80211_OpsMonitorChannelSet(struct wiphy *pWiphy, /* init */ memset(&ChanInfo, 0, sizeof(ChanInfo)); - ChanInfo.ChanId = ChanId; + ChanInfo.ChanId = (UINT8)ChanId; p80211CB = NULL; RTMP_DRIVER_80211_CB_GET(pAd, &p80211CB); @@ -441,7 +441,7 @@ static int CFG80211_OpsMonitorChannelSet(struct wiphy *pWiphy, return 0; } - ChanInfo.IfType = pNetDev->ieee80211_ptr->iftype; + ChanInfo.IfType = (UINT8)pNetDev->ieee80211_ptr->iftype; CFG80211DBG(RT_DEBUG_ERROR, ("80211> ChanInfo.IfType == %d!\n",ChanInfo.IfType)); @@ -539,8 +539,8 @@ static int CFG80211_OpsVirtualInfChg( pNetDev->ieee80211_ptr->iftype = Type; VifInfo.net_dev = pNetDev; - VifInfo.newIfType = Type; - VifInfo.oldIfType = oldType; + VifInfo.newIfType = (UINT8)Type; + VifInfo.oldIfType = (UINT8)oldType; if (pFlags != NULL) { @@ -1060,7 +1060,11 @@ Note: static int CFG80211_OpsStaGet( IN struct wiphy *pWiphy, IN struct net_device *pNdev, - IN UINT8 *pMac, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0)) + IN const UINT8 * pMac, +#else + IN UINT8 * pMac, +#endif IN struct station_info *pSinfo) { VOID *pAd; @@ -1082,53 +1086,97 @@ static int CFG80211_OpsStaGet( if (StaInfo.TxRateFlags != RT_CMD_80211_TXRATE_LEGACY) { pSinfo->txrate.flags = RATE_INFO_FLAGS_MCS; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)) + pSinfo->txrate.bw = RATE_INFO_BW_20; + if (StaInfo.TxRateFlags & RT_CMD_80211_TXRATE_BW_40) + pSinfo->txrate.bw = RATE_INFO_BW_40; +#else if (StaInfo.TxRateFlags & RT_CMD_80211_TXRATE_BW_40) pSinfo->txrate.flags |= RATE_INFO_FLAGS_40_MHZ_WIDTH; +#endif + if (StaInfo.TxRateFlags & RT_CMD_80211_TXRATE_SHORT_GI) pSinfo->txrate.flags |= RATE_INFO_FLAGS_SHORT_GI; - pSinfo->txrate.mcs = StaInfo.TxRateMCS; + pSinfo->txrate.mcs = (u8)StaInfo.TxRateMCS; } else { - pSinfo->txrate.legacy = StaInfo.TxRateMCS; + pSinfo->txrate.legacy = (u16)StaInfo.TxRateMCS; } - +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)) + pSinfo->filled |= BIT(NL80211_STA_INFO_TX_BITRATE); +#else pSinfo->filled |= STATION_INFO_TX_BITRATE; +#endif /* fill signal */ - pSinfo->signal = StaInfo.Signal; + pSinfo->signal = (s8)StaInfo.Signal; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)) + pSinfo->filled |= BIT(NL80211_STA_INFO_SIGNAL); +#else pSinfo->filled |= STATION_INFO_SIGNAL; +#endif #ifdef CONFIG_AP_SUPPORT /* fill tx count */ pSinfo->tx_packets = StaInfo.TxPacketCnt; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)) + pSinfo->filled |= BIT(NL80211_STA_INFO_TX_PACKETS); +#else pSinfo->filled |= STATION_INFO_TX_PACKETS; +#endif /* fill inactive time */ pSinfo->inactive_time = StaInfo.InactiveTime; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)) + pSinfo->filled |= BIT(NL80211_STA_INFO_INACTIVE_TIME); +#else pSinfo->filled |= STATION_INFO_INACTIVE_TIME; +#endif #endif /* CONFIG_AP_SUPPORT */ #ifdef CONFIG_STA_SUPPORT /* fill tx/rx count */ pSinfo->tx_packets = StaInfo.tx_packets; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)) + pSinfo->filled |= BIT(NL80211_STA_INFO_TX_PACKETS); +#else pSinfo->filled |= STATION_INFO_TX_PACKETS; +#endif pSinfo->tx_retries = StaInfo.tx_retries; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)) + pSinfo->filled |= BIT(NL80211_STA_INFO_TX_RETRIES); +#else pSinfo->filled |= STATION_INFO_TX_RETRIES; +#endif + pSinfo->tx_failed = StaInfo.tx_failed; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)) + pSinfo->filled |= BIT(NL80211_STA_INFO_TX_FAILED); +#else pSinfo->filled |= STATION_INFO_TX_FAILED; +#endif + pSinfo->rx_packets = StaInfo.rx_packets; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)) + pSinfo->filled |= BIT(NL80211_STA_INFO_RX_PACKETS); +#else pSinfo->filled |= STATION_INFO_RX_PACKETS; +#endif /* fill inactive time */ pSinfo->inactive_time = StaInfo.InactiveTime; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)) + pSinfo->filled |= BIT(NL80211_STA_INFO_INACTIVE_TIME); +#else pSinfo->filled |= STATION_INFO_INACTIVE_TIME; +#endif #endif /* CONFIG_STA_SUPPORT */ return 0; @@ -1280,9 +1328,9 @@ static int CFG80211_OpsKeyAdd( KeyInfo.KeyBuf[pParams->key_len] = 0x00; KeyInfo.KeyId = KeyIdx; #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) - KeyInfo.bPairwise = Pairwise; + KeyInfo.bPairwise = (BOOLEAN)Pairwise; #endif /* LINUX_VERSION_CODE: 2,6,37 */ - KeyInfo.KeyLen = pParams->key_len; + KeyInfo.KeyLen = (UINT8)pParams->key_len; if ((pParams->cipher == WLAN_CIPHER_SUITE_WEP40)) { @@ -1468,7 +1516,7 @@ static int CFG80211_OpsKeyDel( KeyInfo.KeyId = KeyIdx; #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) CFG80211DBG(RT_DEBUG_TRACE, ("80211> KeyDel isPairwise %d\n", Pairwise)); - KeyInfo.bPairwise = Pairwise; + KeyInfo.bPairwise = (BOOLEAN)Pairwise; #endif /* LINUX_VERSION_CODE 2.6.37 */ #ifdef CONFIG_AP_SUPPORT @@ -2112,9 +2160,9 @@ static int CFG80211_OpsRemainOnChannel( /* init */ *cookie = rndCookie; memset(&ChanInfo, 0, sizeof(ChanInfo)); - ChanInfo.ChanId = ChanId; - ChanInfo.IfType = dev->ieee80211_ptr->iftype; - ChanInfo.ChanType = ChannelType; + ChanInfo.ChanId = (UINT8)ChanId; + ChanInfo.IfType = (UINT8)dev->ieee80211_ptr->iftype; + ChanInfo.ChanType = (UINT8)ChannelType; ChanInfo.chan = pChan; ChanInfo.cookie = rndCookie; #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) @@ -2194,15 +2242,8 @@ void CFG80211_OpsSetWakeup(IN struct wiphy *wiphy, bool enabled) int CFG80211_OpsResume(IN struct wiphy *wiphy) { -#ifdef MT_WOW_SUPPORT - VOID *pAd; - CFG80211DBG(RT_DEBUG_OFF, ("%s\n",__FUNCTION__)); + CFG80211DBG(RT_DEBUG_OFF, ("%s\n", __func__)); - MAC80211_PAD_GET(pAd, wiphy); -#ifdef NEW_FAST_CONNECT_SCHEME_SUPPORT - RTMP_DRIVER_ADAPTER_RT28XX_WOW_DISABLE(pAd); -#endif -#endif return 0; } @@ -2211,8 +2252,7 @@ int CFG80211_OpsSetRekeyData(struct wiphy *wiphy, struct net_device *dev, { void *pAdSrc = NULL; PRTMP_ADAPTER pAd = NULL; - - CFG80211DBG(RT_DEBUG_OFF, ("%s\n", __FUNCTION__)); + CFG80211DBG(RT_DEBUG_OFF, ("%s\n", __func__)); MAC80211_PAD_GET(pAdSrc, wiphy); pAd = (PRTMP_ADAPTER)pAdSrc; @@ -2225,17 +2265,27 @@ int CFG80211_OpsSetRekeyData(struct wiphy *wiphy, struct net_device *dev, #endif -#if (LINUX_VERSION_CODE > KERNEL_VERSION(3,1,10)) +#if (KERNEL_VERSION(3, 4, 0) < LINUX_VERSION_CODE) //Supplicant_NEW_TDLS #ifdef CFG_TDLS_SUPPORT static int CFG80211_OpsTdlsMgmt ( IN struct wiphy *pWiphy, IN struct net_device *pDev, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0)) + IN const u8 *peer, +#else IN u8 *peer, +#endif IN u8 action_code, IN u8 dialog_token, IN u16 status_code, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0)) + IN u32 peer_capability, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 17, 0)) + IN bool initiator, +#endif +#endif IN const u8 *extra_ies, IN size_t extra_ies_len ) @@ -2247,18 +2297,18 @@ static int CFG80211_OpsTdlsMgmt CFG80211DBG(RT_DEBUG_WARN, ("80211> extra_ies_len : %zd ==>\n", extra_ies_len)); switch (action_code) { - case WLAN_TDLS_SETUP_REQUEST: - case WLAN_TDLS_DISCOVERY_REQUEST: - case WLAN_TDLS_SETUP_CONFIRM: - case WLAN_TDLS_TEARDOWN: - case WLAN_TDLS_SETUP_RESPONSE: - case WLAN_PUB_ACTION_TDLS_DISCOVER_RES: + case (u8)(WLAN_TDLS_SETUP_REQUEST): + case (u8)(WLAN_TDLS_DISCOVERY_REQUEST): + case (u8)(WLAN_TDLS_SETUP_CONFIRM): + case (u8)(WLAN_TDLS_TEARDOWN): + case (u8)(WLAN_TDLS_SETUP_RESPONSE): + case (u8)(WLAN_PUB_ACTION_TDLS_DISCOVER_RES): cfg_tlds_build_frame(pAd,peer,dialog_token,action_code,status_code,extra_ies,extra_ies_len,FALSE,0,0); break; - case TDLS_ACTION_CODE_WFD_TUNNELED_PROBE_REQ: + case (u8)(TDLS_ACTION_CODE_WFD_TUNNELED_PROBE_REQ): cfg_tdls_TunneledProbeRequest(pAd,peer,extra_ies,extra_ies_len); break; - case TDLS_ACTION_CODE_WFD_TUNNELED_PROBE_RSP: + case (u8)(TDLS_ACTION_CODE_WFD_TUNNELED_PROBE_RSP): cfg_tdls_TunneledProbeResponse(pAd,peer,extra_ies,extra_ies_len); break; default: @@ -2273,7 +2323,11 @@ static int CFG80211_OpsTdlsMgmt static int CFG80211_OpsTdlsOper( IN struct wiphy *pWiphy, IN struct net_device *pDev, - IN u8 *peer, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0)) + IN const u8 *peer, +#else + IN u8 *peer, +#endif IN enum nl80211_tdls_operation oper) { @@ -2283,10 +2337,10 @@ static int CFG80211_OpsTdlsOper( switch(oper) { case NL80211_TDLS_ENABLE_LINK: - RTMP_DRIVER_80211_STA_TDLS_INSERT_DELETE_PENTRY(pAd, peer, tdls_insert_entry); + CFG80211DRV_StaTdlsInsertDeletepEntry(pAd, peer, tdls_insert_entry); break; case NL80211_TDLS_DISABLE_LINK: - RTMP_DRIVER_80211_STA_TDLS_INSERT_DELETE_PENTRY(pAd, peer, tdls_delete_entry); + CFG80211DRV_StaTdlsInsertDeletepEntry(pAd, peer, tdls_delete_entry); break; default: break; @@ -2296,7 +2350,7 @@ static int CFG80211_OpsTdlsOper( #endif /*CFG_TDLS_SUPPORT*/ #endif /* LINUX_VERSION_CODE: 3.1.10 */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 18, 0)) static int CFG80211_OpsMgmtTx( IN struct wiphy *pWiphy, IN struct wireless_dev *wdev, @@ -2306,6 +2360,9 @@ static int CFG80211_OpsMgmtTx( static int CFG80211_OpsMgmtTx( IN struct wiphy *pWiphy, IN struct wireless_dev *wdev, +#if (KERNEL_VERSION(3, 14, 0) <= LINUX_VERSION_CODE) + struct cfg80211_mgmt_tx_params *params, +#else IN struct ieee80211_channel *pChan, IN bool Offchan, IN unsigned int Wait, @@ -2313,6 +2370,7 @@ static int CFG80211_OpsMgmtTx( IN size_t Len, IN bool no_cck, IN bool done_wait_for_ack, +#endif /* >= 3.14.0 */ IN u64 *pCookie) #else static int CFG80211_OpsMgmtTx( @@ -2339,16 +2397,35 @@ static int CFG80211_OpsMgmtTx( PRTMP_ADAPTER prAd; PCFG80211_CTRL pCfg80211_ctrl; #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) - struct net_device *dev = NULL; + struct net_device *pDev = NULL; #endif /* LINUX_VERSION_CODE: 3.6.0 */ CFG80211DBG(RT_DEBUG_INFO, ("80211> %s ==>\n", __FUNCTION__)); - MAC80211_PAD_GET(pAd, pWiphy); - prAd = (PRTMP_ADAPTER)pAd; + + /* check null pointer */ +if (pWiphy == NULL || pCookie == NULL +#if (KERNEL_VERSION(3, 18, 0) <= LINUX_VERSION_CODE) + || wdev == NULL || params == NULL +#elif (KERNEL_VERSION(3, 6, 0) <= LINUX_VERSION_CODE) + || wdev == NULL +#else + || pDev == NULL +#endif + ) { + CFG80211DBG(RT_DEBUG_ERROR, ("80211> %s() NULL pointer parameters!\n", __func__)); + return 0; + } + +#if (KERNEL_VERSION(3, 6, 0) <= LINUX_VERSION_CODE) + pDev = wdev->netdev; +#endif /* LINUX_VERSION_CODE: 3.6.0 */ + + MAC80211_PAD_GET(pAd, pWiphy); + prAd = (PRTMP_ADAPTER)pAd; pCfg80211_ctrl = &prAd->cfg80211_ctrl; pCfg80211_ctrl->TxStatusSeq = 0; #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) +#if (KERNEL_VERSION(3, 14, 0) <= LINUX_VERSION_CODE) pCfg80211_ctrl->IsNeedTxStatus = !(params->dont_wait_for_ack); #else pCfg80211_ctrl->IsNeedTxStatus = !done_wait_for_ack; @@ -2357,12 +2434,20 @@ static int CFG80211_OpsMgmtTx( pCfg80211_ctrl->IsNeedTxStatus = FALSE; #endif CFG80211DBG(RT_DEBUG_INFO, ("80211> IsNeedTxStatus = %d\n", pCfg80211_ctrl->IsNeedTxStatus)); -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) - RTMP_DRIVER_NET_DEV_GET(pAd, &dev); -#endif /* LINUX_VERSION_CODE: 3.6.0 */ + +#if (KERNEL_VERSION(3, 14, 0) <= LINUX_VERSION_CODE) + if (!(params->chan)) { +#else + if (!pChan) { +#endif + CFG80211DBG(RT_DEBUG_ERROR, ("80211> %s() NULL ieee80211_channel!\n", __func__)); + *pCookie = 5678; + CFG80211_SendMgmtFrameDone(pAd, 5678, FALSE); + return 0; + } /* get channel number */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) +#if (KERNEL_VERSION(3, 14, 0) <= LINUX_VERSION_CODE) ChanId = ieee80211_frequency_to_channel(params->chan->center_freq); #else ChanId = ieee80211_frequency_to_channel(pChan->center_freq); @@ -2371,7 +2456,7 @@ static int CFG80211_OpsMgmtTx( /* Send the Frame with basic rate 6 */ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) +#if (KERNEL_VERSION(3, 14, 0) <= LINUX_VERSION_CODE) if (params->no_cck) ; //pAd->isCfgDeviceInP2p = TRUE; #else @@ -2382,9 +2467,10 @@ static int CFG80211_OpsMgmtTx( #endif /* LINUX_VERSION_CODE: 3.2.0 */ - *pCookie = 5678; + *pCookie = 5678; + RTMP_DRIVER_80211_TX_NETDEV_SET(pAd, pDev); RTMP_DRIVER_80211_CHANNEL_LOCK(pAd, ChanId); -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) +#if (KERNEL_VERSION(3, 14, 0) <= LINUX_VERSION_CODE) RTMP_DRIVER_80211_MGMT_FRAME_SEND(pAd, (void *)(params->buf), params->len); #else RTMP_DRIVER_80211_MGMT_FRAME_SEND(pAd, (void *)pBuf, Len); @@ -2396,7 +2482,9 @@ static int CFG80211_OpsMgmtTx( if (pCfg80211_ctrl->IsNeedTxStatus) *pCookie = pCfg80211_ctrl->TxStatusSeq; - CFG80211DBG(RT_DEBUG_TRACE, ("%s, Cookie = %d, IsNeedTxStatus (%d)\n", __func__, (int)*pCookie, pCfg80211_ctrl->IsNeedTxStatus)); + CFG80211DBG(RT_DEBUG_TRACE, ("%s, Cookie = 0x%llx, IsNeedTxStatus (%d), DevName (%s)\n", + __func__, (long long unsigned int)*pCookie, + pCfg80211_ctrl->IsNeedTxStatus, pDev->name)); /*reset IsNeedTxStatus to FALSE*/ pCfg80211_ctrl->IsNeedTxStatus = FALSE; return 0; @@ -2428,7 +2516,7 @@ static int CFG80211_OpsCancelRemainOnChannel( CFG80211DBG(RT_DEBUG_INFO, ("80211> %s ==>\n", __FUNCTION__)); MAC80211_PAD_GET(pAd, pWiphy); /* It cause the Supplicant-based OffChannel Hang */ - RTMP_DRIVER_80211_CANCEL_REMAIN_ON_CHAN_SET(pAd, cookie); + RTMP_DRIVER_80211_CANCEL_REMAIN_ON_CHAN_SET(pAd, (ULONG)cookie); return 0; } @@ -2442,7 +2530,11 @@ static int CFG80211_OpsSetBeacon( VOID *pAd; CMD_RTPRIV_IOCTL_80211_BEACON bcn; UCHAR *beacon_head_buf, *beacon_tail_buf; - NdisZeroMemory(&bcn,sizeof(CMD_RTPRIV_IOCTL_80211_BEACON)); +#if (KERNEL_VERSION(3, 2, 0) <= LINUX_VERSION_CODE) + UCHAR *proberesp_ies, *assocresp_ies; +#endif + + NdisZeroMemory(&bcn, sizeof(CMD_RTPRIV_IOCTL_80211_BEACON)); CFG80211DBG(RT_DEBUG_TRACE, ("80211> %s ==>\n", __FUNCTION__)); MAC80211_PAD_GET(pAd, pWiphy); @@ -2454,17 +2546,36 @@ static int CFG80211_OpsSetBeacon( #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) CFG80211DBG(RT_DEBUG_TRACE, ("80211>ssid = %s \n", info->ssid)); - CFG80211DBG(RT_DEBUG_TRACE, ("80211>ssid_len = %s \n", info->ssid_len)); + CFG80211DBG(RT_DEBUG_TRACE, ("80211>ssid_len = %u\n", info->ssid_len)); CFG80211DBG(RT_DEBUG_TRACE, ("80211>beacon_ies_len = %d \n", info->beacon_ies_len)); CFG80211DBG(RT_DEBUG_TRACE, ("80211>proberesp_ies_len = %d \n", info->proberesp_ies_len)); CFG80211DBG(RT_DEBUG_TRACE, ("80211>assocresp_ies_len = %d \n", info->assocresp_ies_len)); - if (info->proberesp_ies_len > 0 && info->proberesp_ies) - RTMP_DRIVER_80211_AP_PROBE_RSP(pAd, info->proberesp_ies, info->proberesp_ies_len); + if (info->proberesp_ies_len > 0 && info->proberesp_ies) { + os_alloc_mem(NULL, &proberesp_ies, info->proberesp_ies_len); + NdisCopyMemory(proberesp_ies, info->proberesp_ies, info->proberesp_ies_len); - if (info->assocresp_ies_len > 0 && info->assocresp_ies) - RTMP_DRIVER_80211_AP_ASSOC_RSP(pAd, info->assocresp_ies, info->assocresp_ies_len); + if (proberesp_ies) { + RTMP_DRIVER_80211_AP_PROBE_RSP(pAd, proberesp_ies, info->proberesp_ies_len); + os_free_mem(NULL, proberesp_ies); + } else + CFG80211DBG(RT_DEBUG_ERROR, ("%s() alloc mem for proberesp_ies failed\n", + __func__)); + } + + if (info->assocresp_ies_len > 0 && info->assocresp_ies) { + os_alloc_mem(NULL, &assocresp_ies, info->assocresp_ies_len); + NdisCopyMemory(assocresp_ies, info->assocresp_ies, info->assocresp_ies_len); + + if (assocresp_ies) { + RTMP_DRIVER_80211_AP_ASSOC_RSP(pAd, assocresp_ies, info->assocresp_ies_len); + os_free_mem(NULL, assocresp_ies); + } else + CFG80211DBG(RT_DEBUG_ERROR, + ("%s() 80211>alloc mem for assocresp_ies failed\n", + __func__)); + } #endif /* LINUX_VERSION_CODE: 3.2.0 */ os_alloc_mem(NULL, &beacon_head_buf, info->head_len); @@ -2501,7 +2612,10 @@ static int CFG80211_OpsAddBeacon( VOID *pAd; CMD_RTPRIV_IOCTL_80211_BEACON bcn; UCHAR *beacon_head_buf, *beacon_tail_buf; - NdisZeroMemory(&bcn,sizeof(CMD_RTPRIV_IOCTL_80211_BEACON)); +#if (KERNEL_VERSION(3, 2, 0) <= LINUX_VERSION_CODE) + UCHAR *proberesp_ies, *assocresp_ies; +#endif + NdisZeroMemory(&bcn, sizeof(CMD_RTPRIV_IOCTL_80211_BEACON)); MAC80211_PAD_GET(pAd, pWiphy); CFG80211DBG(RT_DEBUG_TRACE, ("80211> %s ==>\n", __FUNCTION__)); @@ -2513,36 +2627,56 @@ static int CFG80211_OpsAddBeacon( #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) CFG80211DBG(RT_DEBUG_TRACE, ("80211>ssid = %s \n", info->ssid)); - CFG80211DBG(RT_DEBUG_TRACE, ("80211>ssid_len = %s \n", info->ssid_len)); - - CFG80211DBG(RT_DEBUG_TRACE, ("80211>beacon_ies_len = %d \n", info->beacon_ies_len)); - CFG80211DBG(RT_DEBUG_TRACE, ("80211>proberesp_ies_len = %d \n", info->proberesp_ies_len)); - CFG80211DBG(RT_DEBUG_TRACE, ("80211>assocresp_ies_len = %d \n", info->assocresp_ies_len)); - - if (info->proberesp_ies_len > 0 && info->proberesp_ies) - RTMP_DRIVER_80211_AP_PROBE_RSP(pAd, info->proberesp_ies, info->proberesp_ies_len); + CFG80211DBG(RT_DEBUG_TRACE, ("80211>ssid_len = %u\n", info->ssid_len)); + + CFG80211DBG(RT_DEBUG_TRACE, ("80211>beacon_ies_len = %d\n", info->beacon_ies_len)); + CFG80211DBG(RT_DEBUG_TRACE, ("80211>proberesp_ies_len = %d\n", info->proberesp_ies_len)); + CFG80211DBG(RT_DEBUG_TRACE, ("80211>assocresp_ies_len = %d\n", info->assocresp_ies_len)); + + if (info->proberesp_ies_len > 0 && info->proberesp_ies) { + os_alloc_mem(NULL, &proberesp_ies, info->proberesp_ies_len); + NdisCopyMemory(proberesp_ies, info->proberesp_ies, info->proberesp_ies_len); + + if (proberesp_ies) { + RTMP_DRIVER_80211_AP_PROBE_RSP(pAd, proberesp_ies, info->proberesp_ies_len); + os_free_mem(NULL, proberesp_ies); + } else + CFG80211DBG(RT_DEBUG_ERROR, + ("%s() alloc mem for proberesp_ies failed\n", + __func__)); + } - if (info->assocresp_ies_len > 0 && info->assocresp_ies) - RTMP_DRIVER_80211_AP_ASSOC_RSP(pAd, info->assocresp_ies, info->assocresp_ies_len); + if (info->assocresp_ies_len > 0 && info->assocresp_ies) { + os_alloc_mem(NULL, &assocresp_ies, info->assocresp_ies_len); + NdisCopyMemory(assocresp_ies, info->assocresp_ies, info->assocresp_ies_len); + + if (assocresp_ies) { + RTMP_DRIVER_80211_AP_ASSOC_RSP(pAd, assocresp_ies, info->assocresp_ies_len); + os_free_mem(NULL, assocresp_ies); + } else + CFG80211DBG(RT_DEBUG_ERROR, + ("%s() 80211>alloc mem for assocresp_ies failed\n", + __func__)); + } #endif /* LINUX_VERSION_CODE: 3.2.0 */ - os_alloc_mem(NULL, &beacon_head_buf, info->head_len); - NdisCopyMemory(beacon_head_buf, info->head, info->head_len); + os_alloc_mem(NULL, &beacon_head_buf, info->head_len); + NdisCopyMemory(beacon_head_buf, info->head, info->head_len); os_alloc_mem(NULL, &beacon_tail_buf, info->tail_len); NdisCopyMemory(beacon_tail_buf, info->tail, info->tail_len); - bcn.beacon_head_len = info->head_len; + bcn.beacon_head_len = info->head_len; bcn.beacon_tail_len = info->tail_len; - bcn.beacon_head = beacon_head_buf; + bcn.beacon_head = beacon_head_buf; bcn.beacon_tail = beacon_tail_buf; - bcn.dtim_period = info->dtim_period; + bcn.dtim_period = info->dtim_period; bcn.interval = info->interval; - RTMP_DRIVER_80211_BEACON_ADD(pAd, &bcn); + RTMP_DRIVER_80211_BEACON_ADD(pAd, &bcn); - if (beacon_head_buf) - os_free_mem(NULL, beacon_head_buf); + if (beacon_head_buf) + os_free_mem(NULL, beacon_head_buf); if (beacon_tail_buf) os_free_mem(NULL, beacon_tail_buf); @@ -2572,7 +2706,8 @@ static int CFG80211_OpsStartAp( { VOID *pAd; CMD_RTPRIV_IOCTL_80211_BEACON bcn; - UCHAR *beacon_head_buf, *beacon_tail_buf; + UCHAR *beacon_head_buf = NULL; + UCHAR *beacon_tail_buf = NULL; MAC80211_PAD_GET(pAd, pWiphy); CFG80211DBG(RT_DEBUG_OFF, ("80211> %s ==>\n", __FUNCTION__)); @@ -2581,13 +2716,17 @@ static int CFG80211_OpsStartAp( if (settings->beacon.head_len > 0) { os_alloc_mem(NULL, &beacon_head_buf, settings->beacon.head_len); - NdisCopyMemory(beacon_head_buf, settings->beacon.head, settings->beacon.head_len); + if (beacon_head_buf) + NdisCopyMemory(beacon_head_buf, + settings->beacon.head, settings->beacon.head_len); } if (settings->beacon.tail_len > 0) { os_alloc_mem(NULL, &beacon_tail_buf, settings->beacon.tail_len); - NdisCopyMemory(beacon_tail_buf, settings->beacon.tail, settings->beacon.tail_len); + if (beacon_tail_buf) + NdisCopyMemory(beacon_tail_buf, + settings->beacon.tail, settings->beacon.tail_len); } bcn.beacon_head_len = settings->beacon.head_len; @@ -2597,13 +2736,13 @@ static int CFG80211_OpsStartAp( bcn.dtim_period = settings->dtim_period; bcn.interval = settings->beacon_interval; bcn.ssid_len = settings->ssid_len; - bcn.privacy = settings->privacy; + bcn.privacy = (BOOLEAN)settings->privacy; NdisZeroMemory(&bcn.ssid[0], MAX_LEN_OF_SSID); if (settings->ssid && (settings->ssid_len <= 32)) NdisCopyMemory(&bcn.ssid[0], settings->ssid, settings->ssid_len); #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) - bcn.hidden_ssid = settings->hidden_ssid; + bcn.hidden_ssid = (UCHAR)settings->hidden_ssid; #endif /*LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)*/ @@ -2634,7 +2773,7 @@ static int CFG80211_OpsStartAp( /* get channel number */ ChanId = ieee80211_frequency_to_channel(settings->chandef.chan->center_freq); CFG80211DBG(RT_DEBUG_OFF, ("80211> Channel = %d\n", ChanId)); - ChanInfo.ChanId = ChanId; + ChanInfo.ChanId = (UINT8)ChanId; ChanInfo.IfType = RT_CMD_80211_IFTYPE_P2P_GO; @@ -2673,9 +2812,10 @@ static int CFG80211_OpsChangeBeacon( struct net_device *netdev, struct cfg80211_beacon_data *info) { - VOID *pAd; - CMD_RTPRIV_IOCTL_80211_BEACON bcn; - UCHAR *beacon_head_buf, *beacon_tail_buf; + VOID *pAd; + CMD_RTPRIV_IOCTL_80211_BEACON bcn; + UCHAR *beacon_head_buf = NULL; + UCHAR *beacon_tail_buf = NULL; MAC80211_PAD_GET(pAd, pWiphy); CFG80211DBG(RT_DEBUG_TRACE, ("80211> %s ==>\n", __FUNCTION__)); @@ -2683,12 +2823,14 @@ static int CFG80211_OpsChangeBeacon( if (info->head_len > 0) { os_alloc_mem(NULL, &beacon_head_buf, info->head_len); - NdisCopyMemory(beacon_head_buf, info->head, info->head_len); + if (beacon_head_buf) + NdisCopyMemory(beacon_head_buf, info->head, info->head_len); } if (info->tail_len > 0) { os_alloc_mem(NULL, &beacon_tail_buf, info->tail_len); - NdisCopyMemory(beacon_tail_buf, info->tail, info->tail_len); + if (beacon_tail_buf) + NdisCopyMemory(beacon_tail_buf, info->tail, info->tail_len); } memset(&bcn, 0, sizeof(CMD_RTPRIV_IOCTL_80211_BEACON)); @@ -2755,9 +2897,22 @@ static int CFG80211_OpsChangeBss( static int CFG80211_OpsStaDel( struct wiphy *pWiphy, struct net_device *dev, - UINT8 *pMacAddr) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) + struct station_del_parameters *params +#else +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0)) + const UINT8 * pMacAddr +#else + UINT8 * pMacAddr +#endif +#endif + +) { VOID *pAd; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) + const u8 *pMacAddr = params->mac; +#endif MAC80211_PAD_GET(pAd, pWiphy); CFG80211DBG(RT_DEBUG_TRACE, ("80211> %s ==>\n", __FUNCTION__)); @@ -2769,7 +2924,7 @@ static int CFG80211_OpsStaDel( { CFG80211DBG(RT_DEBUG_TRACE, ("80211> Delete STA(%02X:%02X:%02X:%02X:%02X:%02X) ==>\n", PRINT_MAC(pMacAddr))); - RTMP_DRIVER_80211_AP_STA_DEL(pAd, pMacAddr); + CFG80211_ApStaDel(pAd, pMacAddr); } return 0; @@ -2778,7 +2933,11 @@ static int CFG80211_OpsStaDel( static int CFG80211_OpsStaAdd( struct wiphy *wiphy, struct net_device *dev, - UINT8 *mac, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0)) + const UINT8 * mac, +#else + UINT8 * mac, +#endif struct station_parameters *params) { CFG80211DBG(RT_DEBUG_TRACE, ("80211> %s ==>\n", __FUNCTION__)); @@ -2788,7 +2947,11 @@ static int CFG80211_OpsStaAdd( static int CFG80211_OpsStaChg( struct wiphy *pWiphy, struct net_device *dev, - UINT8 *pMacAddr, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0)) + const UINT8 * pMacAddr, +#else + UINT8 * pMacAddr, +#endif struct station_parameters *params) { void *pAd; @@ -2818,13 +2981,13 @@ static int CFG80211_OpsStaChg( { CFG80211DBG(RT_DEBUG_TRACE, ("80211> STA(%02X:%02X:%02X:%02X:%02X:%02X) ==> PortSecured\n", PRINT_MAC(pMacAddr))); - RTMP_DRIVER_80211_AP_MLME_PORT_SECURED(pAd, pMacAddr, 1); + CFG80211_StaPortSecured(pAd, pMacAddr, 1); } else { CFG80211DBG(RT_DEBUG_TRACE, ("80211> STA(%02X:%02X:%02X:%02X:%02X:%02X) ==> PortNotSecured\n", PRINT_MAC(pMacAddr))); - RTMP_DRIVER_80211_AP_MLME_PORT_SECURED(pAd, pMacAddr, 0); + CFG80211_StaPortSecured(pAd, pMacAddr, 0); } return 0; } @@ -2834,6 +2997,9 @@ static int CFG80211_OpsStaChg( static struct wireless_dev* CFG80211_OpsVirtualInfAdd( IN struct wiphy *pWiphy, IN const char *name, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0)) + IN unsigned char name_assign_type, +#endif IN enum nl80211_iftype Type, IN u32 *pFlags, struct vif_params *pParams) @@ -2979,7 +3145,7 @@ ralink_mgmt_stypes[NUM_NL80211_IFTYPES] = { }; #endif -#if 0 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0)) static const struct ieee80211_iface_limit ra_p2p_sta_go_limits[] = { @@ -2988,21 +3154,16 @@ static const struct ieee80211_iface_limit ra_p2p_sta_go_limits[] = .types = BIT(NL80211_IFTYPE_STATION) | BIT(NL80211_IFTYPE_AP), }, -#if 0 + { .max = 1, .types = BIT(NL80211_IFTYPE_P2P_GO) | - BIT(NL80211_IFTYPE_AP), + BIT(NL80211_IFTYPE_P2P_CLIENT), }, - { - .max = 1, - .types = BIT(NL80211_IFTYPE_P2P_CLIENT), - }, -#endif }; -static const struct ieee80211_iface_combination -ra_iface_combinations_p2p[] = { +static const struct ieee80211_iface_combination +ra_iface_combinations_ap_sta[] = { { #ifdef RT_CFG80211_P2P_MULTI_CHAN_SUPPORT .num_different_channels = 2, @@ -3011,59 +3172,42 @@ ra_iface_combinations_p2p[] = { #endif /* RT_CFG80211_P2P_MULTI_CHAN_SUPPORT */ .max_interfaces = 3, /* CFG TODO*/ - //.beacon_int_infra_match = true, + /* .beacon_int_infra_match = true,*/ .limits = ra_p2p_sta_go_limits, - .n_limits = ARRAY_SIZE(ra_p2p_sta_go_limits), - }, -}; -#endif /* LINUX_VERSION_CODE: 3.8.0 */ -#endif -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0)) -static const struct ieee80211_iface_limit ra_p2p_sta_go_limits[] = -{ - { - .max = 3, - .types = BIT(NL80211_IFTYPE_STATION)| BIT(NL80211_IFTYPE_AP), - }, - { - .max = 1, - .types = BIT(NL80211_IFTYPE_P2P_GO) | BIT(NL80211_IFTYPE_P2P_CLIENT), + .n_limits = 1, }, }; -static const struct ieee80211_iface_combination +static const struct ieee80211_iface_combination ra_iface_combinations_p2p[] = { { +#ifdef RT_CFG80211_P2P_MULTI_CHAN_SUPPORT + .num_different_channels = 2, +#else .num_different_channels = 1, +#endif /* RT_CFG80211_P2P_MULTI_CHAN_SUPPORT */ .max_interfaces = 3, - //.beacon_int_infra_match = true, - .limits = ra_p2p_sta_go_limits, - .n_limits = 1,//ARRAY_SIZE(ra_p2p_sta_go_limits), - }, -}; - -static const struct ieee80211_iface_combination -ra_iface_combinations_p2p_GO[] = { - { - .num_different_channels = 1, - .max_interfaces = 3, + /* CFG TODO*/ //.beacon_int_infra_match = true, .limits = ra_p2p_sta_go_limits, .n_limits = ARRAY_SIZE(ra_p2p_sta_go_limits), }, }; -const struct ieee80211_iface_combination *p_ra_iface_combinations_ap_sta = ra_iface_combinations_p2p; -const INT ra_iface_combinations_ap_sta_num = ARRAY_SIZE(ra_iface_combinations_p2p); +const struct ieee80211_iface_combination *p_ra_iface_combinations_ap_sta = ra_iface_combinations_ap_sta; +const INT ra_iface_combinations_ap_sta_num = ARRAY_SIZE(ra_iface_combinations_ap_sta); + +const struct ieee80211_iface_combination *p_ra_iface_combinations_p2p = ra_iface_combinations_p2p; +const INT ra_iface_combinations_p2p_num = ARRAY_SIZE(ra_iface_combinations_p2p); + +#endif /* LINUX_VERSION_CODE: 3.8.0 */ -const struct ieee80211_iface_combination *p_ra_iface_combinations_p2p = ra_iface_combinations_p2p_GO; -const INT ra_iface_combinations_p2p_num = ARRAY_SIZE(ra_iface_combinations_p2p_GO); -#endif struct cfg80211_ops CFG80211_Ops = { #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) .suspend = CFG80211_OpsSuspend, .set_wakeup = CFG80211_OpsSetWakeup, .resume = CFG80211_OpsResume, + .set_rekey_data = CFG80211_OpsSetRekeyData, #endif #ifdef CFG_TDLS_SUPPORT #if (LINUX_VERSION_CODE > KERNEL_VERSION(3,4,0)) @@ -3305,7 +3449,7 @@ static struct wireless_dev *CFG80211_WdevAlloc( set_wiphy_dev(pWdev->wiphy, pDev); #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30)) - pWdev->wiphy->max_scan_ssids = pBandInfo->MaxBssTable; + pWdev->wiphy->max_scan_ssids = (u8)pBandInfo->MaxBssTable; #endif /* KERNEL_VERSION */ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) @@ -3351,6 +3495,10 @@ static struct wireless_dev *CFG80211_WdevAlloc( /* init channel information */ CFG80211_SupBandInit(pCfg80211_CB, pBandInfo, pWdev->wiphy, NULL, NULL); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0) + pWdev->wiphy->regulatory_flags |= (REGULATORY_DISABLE_BEACON_HINTS|REGULATORY_CUSTOM_REG); +#endif /* endif */ + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30)) /* CFG80211_SIGNAL_TYPE_MBM: signal strength in mBm (100*dBm) */ pWdev->wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM; @@ -3377,7 +3525,7 @@ static struct wireless_dev *CFG80211_WdevAlloc( #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) #ifdef CONFIG_PM #ifdef MT_WOW_SUPPORT -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 11, 0)) pWdev->wiphy->wowlan = &mtk_wowlan_support; #else pWdev->wiphy->wowlan.flags = WIPHY_WOWLAN_MAGIC_PKT; @@ -3415,8 +3563,9 @@ static struct wireless_dev *CFG80211_WdevAlloc( //pWdev->wiphy->flags |= WIPHY_FLAG_IBSS_RSN; #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)) - pWdev->wiphy->iface_combinations = ra_iface_combinations_p2p; - pWdev->wiphy->n_iface_combinations = ARRAY_SIZE(ra_iface_combinations_p2p); + DBGPRINT(RT_DEBUG_TRACE, ("[%s] Change to AP/STA combination mode!!\n", __func__)); + pWdev->wiphy->iface_combinations = p_ra_iface_combinations_ap_sta; + pWdev->wiphy->n_iface_combinations = ARRAY_SIZE(ra_iface_combinations_ap_sta); #endif /* LINUX_VERSION_CODE: 3.8.0 */ if (wiphy_register(pWdev->wiphy) < 0) @@ -3501,7 +3650,7 @@ BOOLEAN CFG80211_Register( #if 0 CFG_TODO struct ieee80211_channel *ch; - ch = pCfg80211_CB->pCfg80211_Wdev->wiphy->bands[IEEE80211_BAND_2GHZ]->channels; + ch = pCfg80211_CB->pCfg80211_Wdev->wiphy->bands[KAL_BAND_2GHZ]->channels; cfg80211_chandef_create(&pCfg80211_CB->pCfg80211_Wdev->preset_chandef, ch, NL80211_CHAN_NO_HT); #endif @@ -3585,7 +3734,7 @@ static INT32 CFG80211_RegNotifier( is not permitted. */ #ifdef RELEASE_EXCLUDE - if (pWiphy->bands[IEEE80211_BAND_5GHZ]) + if (pWiphy->bands[KAL_BAND_5GHZ]) { struct ieee80211_supported_band *pBand; struct ieee80211_channel *pChannel; @@ -3615,7 +3764,7 @@ static INT32 CFG80211_RegNotifier( IEEE80211_CHAN_NO_IBSS | IEEE80211_CHAN_PASSIVE_SCAN; */ - pBand = pWiphy->bands[IEEE80211_BAND_5GHZ]; + pBand = pWiphy->bands[KAL_BAND_5GHZ]; for(IdChan=0; IdChan<pBand->n_channels; IdChan++) { @@ -3734,7 +3883,7 @@ static INT32 CFG80211_RegNotifier( is not permitted. */ #ifdef RELEASE_EXCLUDE - if (pWiphy->bands[IEEE80211_BAND_5GHZ]) + if (pWiphy->bands[KAL_BAND_5GHZ]) { struct ieee80211_supported_band *pBand; struct ieee80211_channel *pChannel; @@ -3764,7 +3913,7 @@ static INT32 CFG80211_RegNotifier( IEEE80211_CHAN_NO_IBSS | IEEE80211_CHAN_PASSIVE_SCAN; */ - pBand = pWiphy->bands[IEEE80211_BAND_5GHZ]; + pBand = pWiphy->bands[KAL_BAND_5GHZ]; for(IdChan=0; IdChan<pBand->n_channels; IdChan++) { diff --git a/os/linux/cfg80211/cfg80211_ap.c b/os/linux/cfg80211/cfg80211_ap.c index 441ffdf..7094157 100755 --- a/os/linux/cfg80211/cfg80211_ap.c +++ b/os/linux/cfg80211/cfg80211_ap.c @@ -177,7 +177,7 @@ static INT CFG80211DRV_UpdateApSettingFromBeacon(PRTMP_ADAPTER pAd, UINT mbss_id else if (pBeacon->ssid_len != 0) { NdisZeroMemory(pMbss->Ssid, pMbss->SsidLen); - pMbss->SsidLen = pBeacon->ssid_len; + pMbss->SsidLen = (UCHAR)pBeacon->ssid_len; NdisCopyMemory(pMbss->Ssid, ssid_ie+2, pMbss->SsidLen); DBGPRINT(RT_DEBUG_ERROR,("\nCFG : SSID: %s, %d\n", pMbss->Ssid, pMbss->SsidLen)); } @@ -197,7 +197,7 @@ static INT CFG80211DRV_UpdateApSettingFromBeacon(PRTMP_ADAPTER pAd, UINT mbss_id if ((pBeacon->ssid_len != 0) && (pBeacon->ssid_len <= MAX_LEN_OF_SSID)) { - pMbss->SsidLen = pBeacon->ssid_len; + pMbss->SsidLen = (UCHAR)pBeacon->ssid_len; NdisCopyMemory(pMbss->Ssid, pBeacon->ssid, pMbss->SsidLen); DBGPRINT(RT_DEBUG_ERROR,("80211> [Hidden] SSID: %s, %d\n", pMbss->Ssid, pMbss->SsidLen)); } @@ -224,13 +224,13 @@ static INT CFG80211DRV_UpdateApSettingFromBeacon(PRTMP_ADAPTER pAd, UINT mbss_id if (pBeacon->interval != 0) { DBGPRINT(RT_DEBUG_TRACE,("CFG_TIM New BI %d\n", pBeacon->interval)); - pAd->CommonCfg.BeaconPeriod = pBeacon->interval; + pAd->CommonCfg.BeaconPeriod = (USHORT)pBeacon->interval; } if (pBeacon->dtim_period != 0) { DBGPRINT(RT_DEBUG_TRACE, ("CFG_TIM New DP %d\n", pBeacon->dtim_period)); - pAd->ApCfg.DtimPeriod = pBeacon->dtim_period; + pAd->ApCfg.DtimPeriod = (UCHAR)pBeacon->dtim_period; } @@ -351,7 +351,7 @@ VOID CFG80211_UpdateBeacon( NdisCopyMemory(pBeaconFrame, beacon_head_buf, beacon_head_len); /* 2. Update the Location of TIM IE */ - pAd->ApCfg.MBSSID[apidx].TimIELocationInBeacon = beacon_head_len; + pAd->ApCfg.MBSSID[apidx].TimIELocationInBeacon = (UCHAR)beacon_head_len; /* 3. Store the Tail Part For appending later */ if (pCfg80211_ctrl->beacon_tail_buf != NULL) @@ -409,7 +409,7 @@ VOID CFG80211_UpdateBeacon( #endif /* MT_MAC */ /* 4. Update the TIM IE */ - New_Tim_Len = CFG80211DRV_UpdateTimIE(pAd, apidx, pBeaconFrame, + New_Tim_Len = (UCHAR)CFG80211DRV_UpdateTimIE(pAd, apidx, pBeaconFrame, pAd->ApCfg.MBSSID[apidx].TimIELocationInBeacon); /* 5. Update the Buffer AFTER TIM IE */ @@ -501,7 +501,7 @@ BOOLEAN CFG80211DRV_OpsBeaconAdd(VOID *pAdOrg, VOID *pData) /* for Concurrent, AP/P2P GO use HW_BSSID 1 */ //wdev->hw_bssid_idx = CFG_GO_BSSID_IDX; - wdev->hw_bssid_idx = apidx; + wdev->hw_bssid_idx = (UCHAR)apidx; #ifdef RT_CFG80211_SUPPORT #ifdef RT_CFG80211_P2P_SUPPORT @@ -560,7 +560,7 @@ BOOLEAN CFG80211DRV_OpsBeaconAdd(VOID *pAdOrg, VOID *pData) wdev->wdev_type = WDEV_TYPE_AP; wdev->func_dev = (void *)&pAd->ApCfg.MBSSID[apidx]; wdev->sys_handle = (void *)pAd; - wdev->func_idx = apidx; //NEW + wdev->func_idx = (CHAR)apidx; #if 0 @@ -728,7 +728,7 @@ BOOLEAN CFG80211DRV_OpsBeaconAdd(VOID *pAdOrg, VOID *pData) //MlmeSetTxPreamble(pAd, (USHORT)pAd->CommonCfg.TxPreamble); //MlmeUpdateTxRates(pAd, FALSE, MIN_NET_DEVICE_FOR_CFG80211_VIF_P2P_GO + apidx); #ifdef RT_CFG80211_P2P_SUPPORT - MlmeUpdateTxRates(pAd, FALSE, MIN_NET_DEVICE_FOR_CFG80211_VIF_P2P_GO + apidx); + MlmeUpdateTxRates(pAd, FALSE, (UCHAR)(MIN_NET_DEVICE_FOR_CFG80211_VIF_P2P_GO + apidx)); #else MlmeUpdateTxRates(pAd, FALSE, apidx); #endif /*RT_CFG80211_P2P_SUPPORT*/ @@ -813,12 +813,13 @@ BOOLEAN CFG80211DRV_ApKeyDel( #endif { DBGPRINT(RT_DEBUG_TRACE,("CFG: AsicRemoveSharedKeyEntry %d\n", pKeyInfo->KeyId)); - AsicRemoveSharedKeyEntry(pAd, apidx, pKeyInfo->KeyId); + AsicRemoveSharedKeyEntry(pAd, (UCHAR)apidx, pKeyInfo->KeyId); #ifdef MT_MAC - if (pAd->chipCap.hif_type == HIF_MT) - CmdProcAddRemoveKey(pAd, 1, apidx, pKeyInfo->KeyId, BSS0, SHAREDKEYTABLE, - &pAd->SharedKey[apidx][pKeyInfo->KeyId], BROADCAST_ADDR); + if (pAd->chipCap.hif_type == HIF_MT) + CmdProcAddRemoveKey(pAd, 1, (UCHAR)apidx, + pKeyInfo->KeyId, BSS0, SHAREDKEYTABLE, + &pAd->SharedKey[apidx][pKeyInfo->KeyId], BROADCAST_ADDR); #endif /* MT_MAC */ } else @@ -900,11 +901,11 @@ BOOLEAN CFG80211DRV_ApKeyAdd( PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)pAdOrg; CMD_RTPRIV_IOCTL_80211_KEY *pKeyInfo; MAC_TABLE_ENTRY *pEntry = NULL; - UINT Wcid = 0; + UCHAR Wcid = 0; #ifdef RT_CFG80211_P2P_SUPPORT - UINT apidx = CFG_GO_BSSID_IDX; + UCHAR apidx = CFG_GO_BSSID_IDX; #else - UINT apidx = MAIN_MBSSID; + UCHAR apidx = MAIN_MBSSID; #endif /*RT_CFG80211_P2P_SUPPORT*/ BSS_STRUCT *pMbss = &pAd->ApCfg.MBSSID[apidx]; @@ -932,7 +933,8 @@ BOOLEAN CFG80211DRV_ApKeyAdd( else pAd->SharedKey[apidx][pKeyInfo->KeyId].CipherAlg = CIPHER_WEP128; - AsicAddSharedKeyEntry(pAd, apidx, pKeyInfo->KeyId, pSharedKey); + AsicAddSharedKeyEntry(pAd, (UCHAR)apidx, + pKeyInfo->KeyId, pSharedKey); } } else if(pKeyInfo->KeyType == RT_CMD_80211_KEY_WPA) @@ -984,8 +986,10 @@ BOOLEAN CFG80211DRV_ApKeyAdd( pEntry->PairwiseKey.CipherAlg = CIPHER_AES; AsicAddPairwiseKeyEntry(pAd, (UCHAR)pEntry->Aid, &pEntry->PairwiseKey); - RTMPSetWcidSecurityInfo(pAd, pEntry->apidx, (UINT8)(pKeyInfo->KeyId & 0x0fff), - pEntry->PairwiseKey.CipherAlg, pEntry->Aid, PAIRWISEKEYTABLE); + RTMPSetWcidSecurityInfo(pAd, pEntry->apidx, + (UINT8)(pKeyInfo->KeyId & 0x0fff), + pEntry->PairwiseKey.CipherAlg, (UINT8)pEntry->Aid, + PAIRWISEKEYTABLE); #ifdef MT_MAC if (pAd->chipCap.hif_type == HIF_MT) @@ -1052,8 +1056,10 @@ BOOLEAN CFG80211DRV_ApKeyAdd( pEntry->PairwiseKey.CipherAlg = CIPHER_TKIP; AsicAddPairwiseKeyEntry(pAd, (UCHAR)pEntry->Aid, &pEntry->PairwiseKey); - RTMPSetWcidSecurityInfo(pAd, pEntry->apidx, (UINT8)(pKeyInfo->KeyId & 0x0fff), - pEntry->PairwiseKey.CipherAlg, pEntry->Aid, PAIRWISEKEYTABLE); + RTMPSetWcidSecurityInfo(pAd, pEntry->apidx, + (UINT8)(pKeyInfo->KeyId & 0x0fff), + pEntry->PairwiseKey.CipherAlg, (UINT8)pEntry->Aid, + PAIRWISEKEYTABLE); #ifdef MT_MAC if (pAd->chipCap.hif_type == HIF_MT) @@ -1077,7 +1083,7 @@ BOOLEAN CFG80211DRV_ApKeyAdd( INT CFG80211_StaPortSecured( IN VOID *pAdCB, - IN UCHAR *pMac, + IN const UCHAR * pMac, IN UINT flag) { PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)pAdCB; @@ -1112,7 +1118,7 @@ INT CFG80211_StaPortSecured( INT CFG80211_ApStaDel( IN VOID *pAdCB, - IN UCHAR *pMac) + IN const u8 *pMac) { PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)pAdCB; MAC_TABLE_ENTRY *pEntry; @@ -1151,9 +1157,9 @@ INT CFG80211_setApDefaultKey( DBGPRINT(RT_DEBUG_TRACE, ("Set Ap Default Key: %d\n", Data)); #ifdef RT_CFG80211_P2P_SUPPORT - pAd->ApCfg.MBSSID[CFG_GO_BSSID_IDX].wdev.DefaultKeyId = Data; + pAd->ApCfg.MBSSID[CFG_GO_BSSID_IDX].wdev.DefaultKeyId = (UCHAR)Data; #else - pAd->ApCfg.MBSSID[MAIN_MBSSID].wdev.DefaultKeyId = Data; + pAd->ApCfg.MBSSID[MAIN_MBSSID].wdev.DefaultKeyId = UCHAR)Data; #endif /*RT_CFG80211_P2P_SUPPORT*/ return 0; diff --git a/os/linux/cfg80211/cfg80211_inf.c b/os/linux/cfg80211/cfg80211_inf.c index b3828e2..a99f1bb 100755 --- a/os/linux/cfg80211/cfg80211_inf.c +++ b/os/linux/cfg80211/cfg80211_inf.c @@ -64,7 +64,9 @@ BOOLEAN CFG80211DRV_OpsChgVirtualInf(RTMP_ADAPTER *pAd, VOID *pData) CHAR tr_tb_idx = MAX_LEN_OF_MAC_TABLE + apidx; - printk(" CFG80211DRV_OpsChgVirtualInf newType %d oldType %d \n",newType,oldType); + DBGPRINT(RT_DEBUG_OFF, + (" CFG80211DRV_OpsChgVirtualInf newType %d oldType %d\n", + newType, oldType)); if (strcmp(pVifParm->net_dev->name, "p2p0") == 0) { @@ -198,7 +200,7 @@ BOOLEAN CFG80211DRV_OpsChgVirtualInf(RTMP_ADAPTER *pAd, VOID *pData) pAd->flg_apcli_init = FALSE; RT_MOD_INC_USE_COUNT(); - printk("iverson ApCli_Close \n"); + DBGPRINT(RT_DEBUG_OFF, ("iverson ApCli_Close\n")); AsicSetBssid(pAd, pAd->cfg80211_ctrl.P2PCurrentAddress, 0x1); AsicSetBssid(pAd, pAd->CurrentAddress, 0x0); pAd->cfg80211_ctrl.isCfgInApMode = RT_CMD_80211_IFTYPE_STATION; @@ -605,13 +607,13 @@ static INT CFG80211_PacketSend(PNDIS_PACKET pPktSrc, PNET_DEV pDev, RTMP_NET_PAC ASSERT(pAd); /* To Indicate from Which VIF */ - switch (pDev->ieee80211_ptr->iftype) + switch ((UINT)(pDev->ieee80211_ptr->iftype)) { - case RT_CMD_80211_IFTYPE_AP: + case ((UINT)(RT_CMD_80211_IFTYPE_AP)): RTMP_SET_PACKET_OPMODE(pPktSrc, OPMODE_AP); break; - case RT_CMD_80211_IFTYPE_P2P_GO:; + case ((UINT)(RT_CMD_80211_IFTYPE_P2P_GO)): if(!OPSTATUS_TEST_FLAG(pAd, fOP_AP_STATUS_MEDIA_STATE_CONNECTED)) { DBGPRINT(RT_DEBUG_TRACE, ("Drop the Packet due P2P GO not in ready state\n")); @@ -621,10 +623,12 @@ static INT CFG80211_PacketSend(PNDIS_PACKET pPktSrc, PNET_DEV pDev, RTMP_NET_PAC RTMP_SET_PACKET_OPMODE(pPktSrc, OPMODE_AP); break; - case RT_CMD_80211_IFTYPE_P2P_CLIENT: - case RT_CMD_80211_IFTYPE_STATION: + case ((UINT)(RT_CMD_80211_IFTYPE_P2P_CLIENT)): + case ((UINT)(RT_CMD_80211_IFTYPE_STATION)): RTMP_SET_PACKET_OPMODE(pPktSrc, OPMODE_AP); - //printk("%s: tx ==> %d\n", __FUNCTION__, RTMP_GET_PACKET_OPMODE(pPktSrc)); + /* DBGPRINT(RT_DEBUG_OFF, + * ("%s: tx ==> %d\n", __FUNCTION__, RTMP_GET_PACKET_OPMODE(pPktSrc))); + */ break; default: @@ -705,9 +709,9 @@ VOID RTMP_CFG80211_VirtualIF_Init( APCLI_STRUCT *pApCliEntry; struct wifi_dev *wdev; #ifdef RT_CFG80211_P2P_SUPPORT - UINT apidx = CFG_GO_BSSID_IDX; + CHAR apidx = CFG_GO_BSSID_IDX; #else - UINT apidx = MAIN_MBSSID; + CHAR apidx = MAIN_MBSSID; #endif /*RT_CFG80211_P2P_SUPPORT*/ #ifdef MT_MAC @@ -724,7 +728,8 @@ VOID RTMP_CFG80211_VirtualIF_Init( UINT32 MC_RowID = 0, IoctlIF = 0, Inf = INT_P2P; memset(preIfName, 0, sizeof(preIfName)); - NdisCopyMemory(preIfName, pDevName, devNameLen-1); + NdisCopyMemory(preIfName, pDevName, + (devNameLen <= IFNAMSIZ) ? (devNameLen - 1) : (IFNAMSIZ - 1)); pNetDevOps=&netDevHook; @@ -777,7 +782,7 @@ VOID RTMP_CFG80211_VirtualIF_Init( RTMP_IO_READ32(pAd, LPON_BTEIR, &Value);//read BTEIR bit[31:29] for determine to choose which byte to extend BSSID mac address. Value = Value | (0x2 << 29);//Note: Carter, make default will use byte4 bit[31:28] to extend Mac Address RTMP_IO_WRITE32(pAd, LPON_BTEIR, Value); - MacByte = Value >> 29; + MacByte = (UCHAR)(Value >> 29); pNetDevOps->devAddr[0] |= 0x2; @@ -853,7 +858,9 @@ VOID RTMP_CFG80211_VirtualIF_Init( DBGPRINT(RT_DEBUG_ERROR, ("%s: Assign wdev idx for %s failed, free net device!\n", __FUNCTION__,RTMP_OS_NETDEV_GET_DEVNAME(new_dev_p))); RtmpOSNetDevFree(new_dev_p); - break; + new_dev_p = NULL; + wdev->if_dev = NULL; + return; } /* init MAC address of virtual network interface */ @@ -900,7 +907,9 @@ VOID RTMP_CFG80211_VirtualIF_Init( DBGPRINT(RT_DEBUG_ERROR, ("%s: Assign wdev idx for %s failed, free net device!\n", __FUNCTION__,RTMP_OS_NETDEV_GET_DEVNAME(new_dev_p))); RtmpOSNetDevFree(new_dev_p); - break; + new_dev_p = NULL; + wdev->if_dev = NULL; + return; } COPY_MAC_ADDR(pAd->ApCfg.MBSSID[apidx].wdev.if_addr, pNetDevOps->devAddr); @@ -944,7 +953,8 @@ VOID RTMP_CFG80211_VirtualIF_Init( VOID RTMP_CFG80211_VirtualIF_Remove( IN VOID *pAdSrc, IN PNET_DEV dev_p, - IN UINT32 DevType) + IN UINT32 DevType, + BOOLEAN rtnl_lock) { PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)pAdSrc; @@ -999,7 +1009,10 @@ VOID RTMP_CFG80211_VirtualIF_Remove( SetCommonHT(pAd); wdev_bcn_buf_deinit(pAd, &pAd->ApCfg.MBSSID[apidx].bcn_buf); - RtmpOSNetDevDetach(dev_p); + if (rtnl_lock) + RtmpOSNetDevDetach(dev_p); + else + RtmpOSNetDevDetach_WithoutLock(dev_p); rtmp_wdev_idx_unreg(pAd, wdev); wdev->if_dev = NULL; } @@ -1012,7 +1025,9 @@ VOID RTMP_CFG80211_VirtualIF_Remove( //actually not mcc still need to check this! if (pAd->Mlme.bStartScc == TRUE) { - printk("GC remove & switch to Infra BW = %d pAd->StaCfg.wdev.CentralChannel %d \n",pAd->StaCfg.wdev.bw,pAd->StaCfg.wdev.CentralChannel); + DBGPRINT(RT_DEBUG_OFF, + ("GC remove & switch to Infra BW = %d CentralChannel %d\n", + pAd->StaCfg.wdev.bw, pAd->StaCfg.wdev.CentralChannel)); pAd->Mlme.bStartScc = FALSE; AsicSwitchChannel(pAd, pAd->StaCfg.wdev.CentralChannel, FALSE); AsicLockChannel(pAd, pAd->StaCfg.wdev.CentralChannel); @@ -1026,17 +1041,27 @@ VOID RTMP_CFG80211_VirtualIF_Remove( OPSTATUS_CLEAR_FLAG(pAd, fOP_AP_STATUS_MEDIA_STATE_CONNECTED); - cfg80211_disconnected(dev_p, 0, NULL, 0, GFP_KERNEL); + cfg80211_disconnected(dev_p, WLAN_REASON_DEAUTH_LEAVING, NULL, 0, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)) + TRUE,/* locally_generated */ +#endif + GFP_KERNEL); NdisZeroMemory(pAd->ApCfg.ApCliTab[MAIN_MBSSID].CfgApCliBssid, MAC_ADDR_LEN); - RtmpOSNetDevDetach(dev_p); + if (rtnl_lock) + RtmpOSNetDevDetach(dev_p); + else + RtmpOSNetDevDetach_WithoutLock(dev_p); rtmp_wdev_idx_unreg(pAd, wdev); pAd->flg_apcli_init = FALSE; wdev->if_dev = NULL; } else /* Never Opened When New Netdevice on */ { - RtmpOSNetDevDetach(dev_p); + if (rtnl_lock) + RtmpOSNetDevDetach(dev_p); + else + RtmpOSNetDevDetach_WithoutLock(dev_p); } if (dev_p->ieee80211_ptr) @@ -1066,9 +1091,11 @@ VOID RTMP_CFG80211_AllVirtualIF_Remove( while ((pDevEntry != NULL) && (pCacheList->size != 0)) { - RtmpOSNetDevProtect(1); - RTMP_CFG80211_VirtualIF_Remove(pAd, pDevEntry->net_dev, pDevEntry->net_dev->ieee80211_ptr->iftype); - RtmpOSNetDevProtect(0); + /* Remove wifi dirver to lock the rtnl_lock here. + * It will cause kernel crash sometimes. + * The lock action leave to kernel. + */ + RTMP_CFG80211_VirtualIF_Remove(pAd, pDevEntry->net_dev, pDevEntry->net_dev->ieee80211_ptr->iftype, TRUE); pListEntry = pListEntry->pNext; pDevEntry = (PCFG80211_VIF_DEV)pListEntry; @@ -1163,7 +1190,7 @@ static INT CFG80211_DummyP2pIf_Open( struct wireless_dev *wdev = dev_p->ieee80211_ptr; #ifdef RT_CFG80211_P2P_STATIC_CONCURRENT_DEVICE VOID *pAdSrc; - printk("CFG80211_DummyP2pIf_Open=======> Open\n"); + DBGPRINT(RT_DEBUG_OFF, ("CFG80211_DummyP2pIf_Open=======> Open\n")); pAdSrc = RTMP_OS_NETDEV_GET_PRIV(dev_p); PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)pAdSrc; #endif /* RT_CFG80211_P2P_STATIC_CONCURRENT_DEVICE */ @@ -1281,16 +1308,13 @@ static INT CFG80211_DummyP2pIf_Close( #endif /* LINUX_VERSION_CODE: 3.7.0 */ )); -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)) { - extern const struct ieee80211_iface_combination *p_ra_iface_combinations_ap_sta; - extern const INT ra_iface_combinations_ap_sta_num; + DBGPRINT(RT_DEBUG_TRACE, ("[%s] Change to AP/STA combination mode!!\n", __func__)); wdev->wiphy->iface_combinations = p_ra_iface_combinations_ap_sta; - wdev->wiphy->n_iface_combinations = ra_iface_combinations_ap_sta_num; + wdev->wiphy->n_iface_combinations = ra_iface_combinations_ap_sta_num; } -#endif - - wdev->iftype = NL80211_IFTYPE_STATION; +#endif /* endif */ #ifdef RT_CFG80211_P2P_STATIC_CONCURRENT_DEVICE RT_MOD_DEC_USE_COUNT(); #endif /* RT_CFG80211_P2P_STATIC_CONCURRENT_DEVICE */ @@ -1367,7 +1391,10 @@ VOID RTMP_CFG80211_DummyP2pIf_Remove( struct wifi_dev *wdev = &cfg80211_ctrl->dummy_p2p_wdev; DBGPRINT(RT_DEBUG_TRACE, (" %s =====> \n", __FUNCTION__)); - RtmpOSNetDevProtect(1); + /* Remove wifi dirver to lock the rtnl_lock here. + * It will cause kernel crash sometimes. + * The lock action leave to kernel. + */ if (dummy_p2p_net_dev) { @@ -1392,14 +1419,11 @@ VOID RTMP_CFG80211_DummyP2pIf_Remove( kfree(dummy_p2p_net_dev->ieee80211_ptr); dummy_p2p_net_dev->ieee80211_ptr = NULL; } - - RtmpOSNetDevProtect(0); - RtmpOSNetDevFree(dummy_p2p_net_dev); - RtmpOSNetDevProtect(1); - + + RtmpOSNetDevFree(dummy_p2p_net_dev); + cfg80211_ctrl->flg_cfg_dummy_p2p_init = FALSE; } - RtmpOSNetDevProtect(0); DBGPRINT(RT_DEBUG_TRACE, (" %s <=====\n", __FUNCTION__)); } @@ -1417,10 +1441,33 @@ VOID RTMP_CFG80211_DummyP2pIf_Init( UINT preIfIndex = 0; struct wireless_dev *pWdev; struct wifi_dev *wdev = NULL; + PNET_DEV pNetDev = NULL; DBGPRINT(RT_DEBUG_TRACE, (" %s =====> \n", __FUNCTION__)); - if (cfg80211_ctrl->flg_cfg_dummy_p2p_init != FALSE) + if (cfg80211_ctrl->flg_cfg_dummy_p2p_init != FALSE) { + /* To fix the P2P functionality fail when + * wpa_supplicant TERMINATE and RE-START issue, + * Due to the interface mode has changed to AP/STA. + */ + DBGPRINT(RT_DEBUG_WARN, ("Change the interface mode to avoid the p2p functionality fail!\n")); + pNetDev = cfg80211_ctrl->dummy_p2p_net_dev; + pWdev = pNetDev->ieee80211_ptr; + pWdev->wiphy->interface_modes |= (BIT(NL80211_IFTYPE_P2P_CLIENT) + | BIT(NL80211_IFTYPE_P2P_GO)); +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)) + { + extern const struct ieee80211_iface_combination + *p_ra_iface_combinations_p2p; + extern const INT ra_iface_combinations_p2p_num; + + DBGPRINT(RT_DEBUG_TRACE, ("[%s] Change to P2P combination mode!!\n", __func__)); + pWdev->wiphy->iface_combinations = p_ra_iface_combinations_p2p; + pWdev->wiphy->n_iface_combinations = ra_iface_combinations_p2p_num; + } +#endif /* KERNEL_VERSION >= 3.8.0 */ + return; + } #ifdef RT_CFG80211_P2P_SINGLE_DEVICE cfg80211_ctrl->P2POpStatusFlags = CFG_P2P_DISABLE; @@ -1536,12 +1583,21 @@ VOID RTMP_CFG80211_DummyP2pIf_Init( /* interface_modes move from IF open to init */ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) pWdev->wiphy->interface_modes |= (BIT(NL80211_IFTYPE_P2P_CLIENT) - | BIT(NL80211_IFTYPE_P2P_GO)); + | BIT(NL80211_IFTYPE_P2P_GO)); #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,7,0)) pWdev->wiphy->software_iftypes |= BIT(NL80211_IFTYPE_P2P_DEVICE); #endif /* LINUX_VERSION_CODE 3.7.0 */ #endif /* LINUX_VERSION_CODE 2.6.37 */ - +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)) + { + extern const struct ieee80211_iface_combination *p_ra_iface_combinations_p2p; + extern const INT ra_iface_combinations_p2p_num; + + DBGPRINT(RT_DEBUG_TRACE, ("[%s] Change to P2P combination mode!!\n", __func__)); + pWdev->wiphy->iface_combinations = p_ra_iface_combinations_p2p; + pWdev->wiphy->n_iface_combinations = ra_iface_combinations_p2p_num; + } +#endif /* KERNEL_VERSION >= 3.8.0 */ wdev = &cfg80211_ctrl->dummy_p2p_wdev; wdev->wdev_type = WDEV_TYPE_STA; @@ -1556,14 +1612,7 @@ VOID RTMP_CFG80211_DummyP2pIf_Init( { DBGPRINT(RT_DEBUG_ERROR, ("===============> fail register the wdev for dummy p2p\n")); } -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0)) - { - extern const struct ieee80211_iface_combination * p_ra_iface_combinations_p2p; - extern const INT ra_iface_combinations_p2p_num; - pWdev->wiphy->iface_combinations = p_ra_iface_combinations_p2p; - pWdev->wiphy->n_iface_combinations = ra_iface_combinations_p2p_num; - } -#endif + RtmpOSNetDevAttach(pAd->OpMode, new_dev_p, pNetDevOps); cfg80211_ctrl->dummy_p2p_net_dev = new_dev_p; cfg80211_ctrl->flg_cfg_dummy_p2p_init = TRUE; @@ -1614,7 +1663,7 @@ BOOLEAN RTMP_CFG80211_MULTI_STA_ON(VOID *pAdSrc, PNET_DEV pNewNetDev) VOID RTMP_CFG80211_MutliStaIf_Init(VOID *pAdSrc) { - printk("%s()\n", __FUNCTION__); + DBGPRINT(RT_DEBUG_OFF, ("%s()\n", __func__)); #define INF_CFG80211_MULTI_STA_NAME "muti-sta0" PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)pAdSrc; CMD_RTPRIV_IOCTL_80211_VIF_SET vifInfo; @@ -1638,16 +1687,17 @@ VOID RTMP_CFG80211_MutliStaIf_Init(VOID *pAdSrc) VOID RTMP_CFG80211_MutliStaIf_Remove(VOID *pAdSrc) { - printk("%s()\n", __FUNCTION__); + DBGPRINT(RT_DEBUG_OFF, ("%s()\n", __func__)); PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)pAdSrc; PCFG80211_CTRL cfg80211_ctrl = &pAd->cfg80211_ctrl; if (cfg80211_ctrl->multi_sta_net_dev) { - RtmpOSNetDevProtect(1); - RTMP_DRIVER_80211_VIF_DEL(pAd, cfg80211_ctrl->multi_sta_net_dev, - RT_CMD_80211_IFTYPE_STATION); - RtmpOSNetDevProtect(0); + /* Remove wifi dirver to lock the rtnl_lock here. + * It will cause kernel crash sometimes. + * The lock action leave to kernel. + */ + RTMP_CFG80211_VirtualIF_Remove(pAd, cfg80211_ctrl->multi_sta_net_dev, DevType, TRUE); cfg80211_ctrl->flg_cfg_multi_sta_init = FALSE; } } diff --git a/os/linux/cfg80211/cfg80211_p2p.c b/os/linux/cfg80211/cfg80211_p2p.c index a63667c..343043f 100755 --- a/os/linux/cfg80211/cfg80211_p2p.c +++ b/os/linux/cfg80211/cfg80211_p2p.c @@ -401,7 +401,7 @@ INT CFG80211_setPowerMgmt(VOID *pAdCB, UINT Enable) DBGPRINT(RT_DEBUG_TRACE, ("@@@ %s: %d\n", __FUNCTION__, Enable)); #ifdef RT_CFG80211_P2P_SUPPORT - pAd->cfg80211_ctrl.bP2pCliPmEnable = Enable; + pAd->cfg80211_ctrl.bP2pCliPmEnable = (BOOLEAN)Enable; #endif /* RT_CFG80211_P2P_SUPPORT */ return 0; @@ -424,7 +424,7 @@ VOID CFG80211_P2pClientSendNullFrame(VOID *pAdCB, INT PwrMgmt) ApCliRTMPSendNullFrame(pAd, RATE_6, (CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE)) ? TRUE:FALSE, - pEntry, PwrMgmt); + pEntry, (USHORT)PwrMgmt); OS_WAIT(20); } } @@ -464,18 +464,20 @@ VOID CFG80211DRV_P2pClientKeyAdd(VOID *pAdOrg, VOID *pData) if (pApCliEntry->wdev.WepStatus == Ndis802_11Encryption3Enabled) { - printk("APCLI: Set AES Security Set. [%d] (GROUP) %d\n", BssIdx, pKeyInfo->KeyLen); + DBGPRINT(RT_DEBUG_OFF, + ("APCLI: Set AES Security Set. [%d] (GROUP) %d\n", + BssIdx, pKeyInfo->KeyLen)); NdisZeroMemory(&pApCliEntry->SharedKey[pKeyInfo->KeyId], sizeof(CIPHER_KEY)); pApCliEntry->SharedKey[pKeyInfo->KeyId].KeyLen = LEN_TK; NdisMoveMemory(pApCliEntry->SharedKey[pKeyInfo->KeyId].Key, pKeyInfo->KeyBuf, pKeyInfo->KeyLen); pApCliEntry->SharedKey[pKeyInfo->KeyId].CipherAlg = CIPHER_AES; - AsicAddSharedKeyEntry(pAd, BssIdx, pKeyInfo->KeyId, + AsicAddSharedKeyEntry(pAd, (UCHAR)BssIdx, pKeyInfo->KeyId, &pApCliEntry->SharedKey[pKeyInfo->KeyId]); - RTMPAddWcidAttributeEntry(pAd, BssIdx, pKeyInfo->KeyId, + RTMPAddWcidAttributeEntry(pAd, (UCHAR)BssIdx, pKeyInfo->KeyId, pApCliEntry->SharedKey[pKeyInfo->KeyId].CipherAlg, NULL); @@ -510,7 +512,9 @@ VOID CFG80211DRV_P2pClientKeyAdd(VOID *pAdOrg, VOID *pData) { if(pMacEntry) { - printk("APCLI: Set AES Security Set. [%d] (PAIRWISE) %d\n", BssIdx, pKeyInfo->KeyLen); + DBGPRINT(RT_DEBUG_OFF, + ("APCLI: Set AES Security Set. [%d] (PAIRWISE) %d\n", + BssIdx, pKeyInfo->KeyLen)); NdisZeroMemory(&pMacEntry->PairwiseKey, sizeof(CIPHER_KEY)); pMacEntry->PairwiseKey.KeyLen = LEN_TK; @@ -520,7 +524,9 @@ VOID CFG80211DRV_P2pClientKeyAdd(VOID *pAdOrg, VOID *pData) pMacEntry->PairwiseKey.CipherAlg = CIPHER_AES; AsicAddPairwiseKeyEntry(pAd, (UCHAR)pMacEntry->Aid, &pMacEntry->PairwiseKey); - RTMPSetWcidSecurityInfo(pAd, BssIdx, 0, pMacEntry->PairwiseKey.CipherAlg, pMacEntry->Aid, PAIRWISEKEYTABLE); + RTMPSetWcidSecurityInfo(pAd, (UINT8)BssIdx, 0, + pMacEntry->PairwiseKey.CipherAlg, + (UINT8)(pMacEntry->Aid), PAIRWISEKEYTABLE); #ifdef MT_MAC if (pAd->chipCap.hif_type == HIF_MT) @@ -579,13 +585,14 @@ VOID CFG80211DRV_P2pClientKeyAdd(VOID *pAdOrg, VOID *pData) } else { - printk("APCLI: Set AES Security Set. (PAIRWISE) But pMacEntry NULL\n"); + DBGPRINT(RT_DEBUG_OFF, + ("APCLI: Set AES Security Set. But pMacEntry NULL\n")); } } } } -VOID CFG80211DRV_SetP2pCliAssocIe(VOID *pAdOrg, VOID *pData, UINT ie_len) +VOID CFG80211DRV_SetP2pCliAssocIe(VOID *pAdOrg, const VOID *pData, UINT ie_len) { PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)pAdOrg; APCLI_STRUCT *apcli_entry; @@ -660,7 +667,7 @@ BOOLEAN CFG80211DRV_P2pClientConnect(VOID *pAdOrg, VOID *pData) /* Set authentication mode */ if (pConnInfo->WpaVer == 2) { - if (!pConnInfo->FlgIs8021x == TRUE) + if (!pConnInfo->FlgIs8021x) { DBGPRINT(RT_DEBUG_TRACE,("APCLI WPA2PSK\n")); Set_ApCli_AuthMode_Proc(pAd, "WPA2PSK"); @@ -721,7 +728,8 @@ VOID CFG80211_P2pClientConnectResultInform( pAd->cfg80211_ctrl.FlgCfg80211Connecting = FALSE; } -VOID CFG80211_LostP2pGoInform(VOID *pAdCB) +VOID CFG80211_LostP2pGoInform(VOID *pAdCB, UINT16 Reason) + { PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)pAdCB; PNET_DEV pNetDev = NULL; @@ -742,7 +750,8 @@ VOID CFG80211_LostP2pGoInform(VOID *pAdCB) #if 0 //MCC if(pAd->cfg80211_ctrl.isMccOn) { - printk("MCC:==============================> off by GC\n"); + DBGPRINT(RT_DEBUG_OFF, + ("MCC:==============================> off by GC\n")); pAd->cfg80211_ctrl.isMccOn = FALSE; CmdMccStop(pAd, NULL); } @@ -758,7 +767,12 @@ VOID CFG80211_LostP2pGoInform(VOID *pAdCB) cfg80211_disconnected(pNetDev, WLAN_REASON_DEAUTH_LEAVING, NULL, 0, GFP_KERNEL); } #else - cfg80211_disconnected(pNetDev, 0, NULL, 0, GFP_KERNEL); + cfg80211_disconnected(pNetDev, Reason, NULL, 0, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)) + FALSE,/* locally_generated */ +#endif + GFP_KERNEL); + #endif } else diff --git a/os/linux/cfg80211/cfg80211_scan.c b/os/linux/cfg80211/cfg80211_scan.c index 1697fac..87c6306 100755 --- a/os/linux/cfg80211/cfg80211_scan.c +++ b/os/linux/cfg80211/cfg80211_scan.c @@ -285,9 +285,11 @@ static void CFG80211_UpdateBssTableRssi( #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) if (pAd->ScanTab.BssEntry[index].Channel > 14) - CenFreq = ieee80211_channel_to_frequency(pAd->ScanTab.BssEntry[index].Channel , IEEE80211_BAND_5GHZ); + CenFreq = ieee80211_channel_to_frequency(pAd->ScanTab.BssEntry[index].Channel, + KAL_BAND_5GHZ); else - CenFreq = ieee80211_channel_to_frequency(pAd->ScanTab.BssEntry[index].Channel , IEEE80211_BAND_2GHZ); + CenFreq = ieee80211_channel_to_frequency(pAd->ScanTab.BssEntry[index].Channel, + KAL_BAND_2GHZ); #else CenFreq = ieee80211_channel_to_frequency(pAd->ScanTab.BssEntry[index].Channel); #endif @@ -434,6 +436,10 @@ VOID CFG80211_ScanEnd( } CFG80211OS_ScanEnd(CFG80211CB, FlgIsAborted); +#ifdef SMART_CARRIER_SENSE_SUPPORT + /*restore SCS gain when finish scanning*/ + /*ScsRestoreLastGainAtScanEnd(pAd);*/ +#endif pAd->cfg80211_ctrl.FlgCfg80211Scanning = FALSE; #endif /* CONFIG_STA_SUPPORT */ } diff --git a/os/linux/cfg80211/cfg80211_tdls.c b/os/linux/cfg80211/cfg80211_tdls.c index 2edb081..5ec337a 100755 --- a/os/linux/cfg80211/cfg80211_tdls.c +++ b/os/linux/cfg80211/cfg80211_tdls.c @@ -317,7 +317,7 @@ VOID InitPeerEntryRateCapability( BOOLEAN CFG80211DRV_StaTdlsInsertDeletepEntry( VOID *pAdOrg, - VOID *pData, + const VOID *pData, UINT Data) { PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)pAdOrg; @@ -406,7 +406,8 @@ BOOLEAN CFG80211DRV_StaTdlsInsertDeletepEntry( #ifndef RT_BIG_ENDIAN NdisZeroMemory(&HtCapabilityTmp, sizeof(HT_CAPABILITY_IE)); NdisMoveMemory(&HtCapabilityTmp, &pAd->CommonCfg.HtCapability, HtLen); - HtCapabilityTmp.HtCapInfo.ChannelWidth = pAd->CommonCfg.RegTransmitSetting.field.BW; + HtCapabilityTmp.HtCapInfo.ChannelWidth = + (UINT16)pAd->CommonCfg.RegTransmitSetting.field.BW; #else NdisZeroMemory(&HtCapabilityTmp, sizeof(HT_CAPABILITY_IE)); NdisMoveMemory(&HtCapabilityTmp, &pAd->CommonCfg.HtCapability, HtLen); @@ -656,8 +657,8 @@ VOID cfg_tdls_UAPSDP_PsmModeChange( DBGPRINT(RT_DEBUG_TRACE, ("tdls uapsd> send a NULL frame!\n")); RtmpEnqueueNullFrame(pAd, pMacEntry->Addr, - pAd->CommonCfg.TxRate, pMacEntry->Aid, - pMacEntry->apidx, TRUE, FALSE, 0); + pAd->CommonCfg.TxRate, (UCHAR)pMacEntry->Aid, + pMacEntry->apidx, TRUE, FALSE, 0); continue; } @@ -697,7 +698,9 @@ void cfg_tdls_rcv_PeerTrafficIndication(PRTMP_ADAPTER pAd,u8 dialog_token,u8 *pe return; } - cfg_tlds_build_frame(pAd, peer, dialog_token, TDLS_ACTION_CODE_PEER_TRAFFIC_RESPONSE, 0, NULL, 0, FALSE, tdls_entry_wcid,0); + cfg_tlds_build_frame(pAd, peer, dialog_token, + TDLS_ACTION_CODE_PEER_TRAFFIC_RESPONSE, 0, + NULL, 0, FALSE, (u8)tdls_entry_wcid, 0); DBGPRINT(RT_DEBUG_INFO,("<====== %s() out\n", __FUNCTION__)); } void cfg_tdls_rcv_PeerTrafficResponse(PRTMP_ADAPTER pAd,u8 *peer) @@ -766,7 +769,9 @@ void cfg_tdls_send_PeerTrafficIndication(PRTMP_ADAPTER pAd, u8 *peer) pAd->StaCfg.wpa_supplicant_info.CFG_Tdls_info.TDLSEntry[tdls_entry_link_index].FlgIsWaitingUapsdTraRsp = TRUE; - cfg_tlds_build_frame(pAd, peer, dialog_token, TDLS_ACTION_CODE_PEER_TRAFFIC_INDICATION, 0, NULL, 0, FALSE, tdls_entry_link_index,0); + cfg_tlds_build_frame(pAd, peer, dialog_token, + TDLS_ACTION_CODE_PEER_TRAFFIC_INDICATION, 0, + NULL, 0, FALSE, (u8)tdls_entry_link_index, 0); /* 11.2.1.14.1 Peer U-APSD Behavior at the PU buffer STA When no corresponding TDLS Peer Traffic Response frame has been @@ -883,7 +888,7 @@ int cfg_tdls_search_ValidLinkIndex(PRTMP_ADAPTER pAd, u8 *peer) int cfg_tlds_build_frame( PRTMP_ADAPTER pAd, -u8 *peer, +const u8 *peer, u8 dialog_token, u8 action_code, u16 status_code, @@ -1074,7 +1079,9 @@ u8 reason_code UCHAR RegluatoryRxtIdent = 221; UCHAR CoverageClass = 0; - regclass = cfg_tdls_GetRegulatoryClass(pAd, pAd->CommonCfg.RegTransmitSetting.field.BW, pAd->CommonCfg.Channel); + regclass = cfg_tdls_GetRegulatoryClass(pAd, + (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.BW, + pAd->CommonCfg.Channel); MakeOutgoingFrame(TmpFrame+TmpLen2, &TmpLen, 1, &RegluatoryRxtIdent, 1, ®class, @@ -1264,7 +1271,9 @@ u8 reason_code UCHAR SuppClassesList[] = {1, 2, 3, 4, 12, 22, 23, 24, 25, 27, 28, 29, 30, 32, 33}; UCHAR regclass; - regclass = cfg_tdls_GetRegulatoryClass(pAd, pAd->CommonCfg.RegTransmitSetting.field.BW, pAd->CommonCfg.Channel); + regclass = cfg_tdls_GetRegulatoryClass(pAd, + (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.BW, + pAd->CommonCfg.Channel); MakeOutgoingFrame(pOutBuffer + FrameLen, &TempLen, 1, &TDLS_IE, @@ -1286,7 +1295,8 @@ u8 reason_code #ifndef RT_BIG_ENDIAN NdisZeroMemory(&HtCapabilityTmp, sizeof(HT_CAPABILITY_IE)); NdisMoveMemory(&HtCapabilityTmp, &pAd->CommonCfg.HtCapability, HtLen); - HtCapabilityTmp.HtCapInfo.ChannelWidth = pAd->CommonCfg.RegTransmitSetting.field.BW; + HtCapabilityTmp.HtCapInfo.ChannelWidth = + (UINT16)pAd->CommonCfg.RegTransmitSetting.field.BW; MakeOutgoingFrame(pOutBuffer + FrameLen, &TempLen, 1, &HtCapIe, @@ -1448,7 +1458,7 @@ u8 reason_code for (idx=QID_AC_BE; idx<=QID_AC_VO; idx++) { - WmeParmIe[10+ (idx*4)] = (idx << 5) + // b5-6 is ACI + WmeParmIe[10 + (idx * 4)] = (UCHAR)(idx << 5) +/* b5-6 is ACI */ ((UCHAR)pAd->CommonCfg.APEdcaParm.bACM[idx] << 4) + // b4 is ACM (pAd->CommonCfg.APEdcaParm.Aifsn[idx] & 0x0f); // b0-3 is AIFSN WmeParmIe[11+ (idx*4)] = (pAd->CommonCfg.APEdcaParm.Cwmax[idx] << 4) + // b5-8 is CWMAX @@ -1543,35 +1553,35 @@ u8 reason_code /////////////////// debug output ///////////////////////////// switch (action_code) { #if (LINUX_VERSION_CODE > KERNEL_VERSION(3,1,10)) - case WLAN_TDLS_SETUP_REQUEST: + case ((u8)(WLAN_TDLS_SETUP_REQUEST)): CFG80211DBG(RT_DEBUG_ERROR, ("80211> WLAN_TDLS_SETUP_REQUEST ==>\n")); break; - case WLAN_TDLS_SETUP_RESPONSE: + case ((u8)(WLAN_TDLS_SETUP_RESPONSE)): CFG80211DBG(RT_DEBUG_ERROR, ("80211> WLAN_TDLS_SETUP_RESPONSE ==>\n")); break; - case WLAN_TDLS_SETUP_CONFIRM: + case ((u8)(WLAN_TDLS_SETUP_CONFIRM)): CFG80211DBG(RT_DEBUG_ERROR, ("80211> WLAN_TDLS_SETUP_CONFIRM ==>\n")); break; - case WLAN_TDLS_TEARDOWN: + case ((u8)(WLAN_TDLS_TEARDOWN)): #endif /* LINUX_VERSION_CODE: 3.1.10 */ - case TDLS_ACTION_CODE_AUTO_TEARDOWN: + case ((u8)(TDLS_ACTION_CODE_AUTO_TEARDOWN)): CFG80211DBG(RT_DEBUG_ERROR, ("80211> WLAN_TDLS_TEARDOWN ==>\n")); break; #if (LINUX_VERSION_CODE > KERNEL_VERSION(3,1,10)) - case WLAN_TDLS_DISCOVERY_REQUEST: + case ((u8)(WLAN_TDLS_DISCOVERY_REQUEST)): CFG80211DBG(RT_DEBUG_ERROR, ("80211> WLAN_TDLS_DISCOVERY_REQUEST ==>\n")); break; - case WLAN_PUB_ACTION_TDLS_DISCOVER_RES: + case ((u8)(WLAN_PUB_ACTION_TDLS_DISCOVER_RES)): CFG80211DBG(RT_DEBUG_ERROR, ("80211> WLAN_PUB_ACTION_TDLS_DISCOVERY_RESPONSE ==>\n")); break; #endif /* LINUX_VERSION_CODE: 3.1.10 */ - case TDLS_ACTION_CODE_PEER_TRAFFIC_INDICATION: + case ((u8)(TDLS_ACTION_CODE_PEER_TRAFFIC_INDICATION)): CFG80211DBG(RT_DEBUG_ERROR, ("80211> TDLS_ACTION_CODE_PEER_TRAFFIC_INDICATION ==>\n")); break; - case TDLS_ACTION_CODE_WFD_TUNNELED_PROBE_REQ: + case ((u8)(TDLS_ACTION_CODE_WFD_TUNNELED_PROBE_REQ)): CFG80211DBG(RT_DEBUG_ERROR, ("80211> TDLS_ACTION_CODE_WFD_TUNNELED_PROBE_REQ ==>\n")); break; - case TDLS_ACTION_CODE_WFD_TUNNELED_PROBE_RSP: + case ((u8)(TDLS_ACTION_CODE_WFD_TUNNELED_PROBE_RSP)): CFG80211DBG(RT_DEBUG_ERROR, ("80211> TDLS_ACTION_CODE_WFD_TUNNELED_PROBE_RSP ==>\n")); break; default: @@ -1819,7 +1829,7 @@ VOID cfg_tdls_rx_parsing(PRTMP_ADAPTER pAd,RX_BLK *pRxBlk) void cfg_tdls_prepare_null_frame(PRTMP_ADAPTER pAd,BOOLEAN powersave,UCHAR dir,UCHAR *peerAddr) { PMAC_TABLE_ENTRY pEntry_TDLS = MacTableLookup(pAd,peerAddr); - + RtmpPrepareHwNullFrame(pAd, &pAd->MacTab.Content[BSSID_WCID], FALSE, @@ -1829,6 +1839,8 @@ void cfg_tdls_prepare_null_frame(PRTMP_ADAPTER pAd,BOOLEAN powersave,UCHAR dir,U PWR_SAVE, 0, 0); + if (pEntry_TDLS == NULL) + return; RtmpPrepareHwNullFrame(pAd, pEntry_TDLS, TRUE, @@ -1864,7 +1876,8 @@ void cfg_tdls_auto_teardown(PRTMP_ADAPTER pAd,UCHAR *peerAddr) IRQL = PASSIVE_LEVEL ========================================================================== */ -VOID cfg_tdls_TunneledProbeRequest(PRTMP_ADAPTER pAd, PUCHAR pMacAddr, const u8 *extra_ies, size_t extra_ies_len) +VOID cfg_tdls_TunneledProbeRequest(PRTMP_ADAPTER pAd, const u8 *pMacAddr, + const u8 *extra_ies, size_t extra_ies_len) { UCHAR TDLS_ETHERTYPE[] = {0x89, 0x0d}; UCHAR Header802_3[14]; @@ -1948,7 +1961,8 @@ VOID cfg_tdls_TunneledProbeRequest(PRTMP_ADAPTER pAd, PUCHAR pMacAddr, const u8 IRQL = PASSIVE_LEVEL ========================================================================== */ -VOID cfg_tdls_TunneledProbeResponse(PRTMP_ADAPTER pAd, PUCHAR pMacAddr, const u8 *extra_ies, size_t extra_ies_len) +VOID cfg_tdls_TunneledProbeResponse(PRTMP_ADAPTER pAd, const u8 *pMacAddr, const u8 *extra_ies, + size_t extra_ies_len) { UCHAR TDLS_ETHERTYPE[] = {0x89, 0x0d}; UCHAR Header802_3[14]; diff --git a/os/linux/cfg80211/cfg80211_tx.c b/os/linux/cfg80211/cfg80211_tx.c index 8808a6f..f0bf874 100755 --- a/os/linux/cfg80211/cfg80211_tx.c +++ b/os/linux/cfg80211/cfg80211_tx.c @@ -86,7 +86,7 @@ BOOLEAN CFG80211_SyncPacketWmmIe(RTMP_ADAPTER *pAd, VOID *pData, ULONG dataLen) if (wmm_ie != NULL) { - UINT i = QID_AC_BE; + UCHAR i = QID_AC_BE; #ifdef RT_CFG80211_P2P_SUPPORT #ifdef UAPSD_SUPPORT @@ -148,6 +148,15 @@ PCFG80211_TX_PACKET CFG80211_TxMgmtFrameSearch(RTMP_ADAPTER *pAd, USHORT Sequenc } #endif +INT CFG80211_SetTxNdev(RTMP_ADAPTER *pAd, PNET_DEV pNetdev) +{ + PCFG80211_CTRL pCfg80211_ctrl = &pAd->cfg80211_ctrl; + + pCfg80211_ctrl->TxNdev = pNetdev; + + return TRUE; +} + INT CFG80211_SendMgmtFrame(RTMP_ADAPTER *pAd, VOID *pData, ULONG Data) { if (pData != NULL) @@ -262,7 +271,7 @@ INT CFG80211_SendMgmtFrame(RTMP_ADAPTER *pAd, VOID *pData, ULONG Data) acked = TRUE; cookie = 5678; } - CFG80211_SendMgmtFrameDone(pAd, cookie, acked); + CFG80211_SendMgmtFrameDone(pAd, (USHORT)cookie, acked); RTMP_OS_EXIT_COMPLETION(&pCfg80211_ctrl->fw_event_done); } @@ -307,8 +316,9 @@ VOID CFG80211_SendMgmtFrameDone(RTMP_ADAPTER *pAd, USHORT Sequence, BOOLEAN Ack) if (pCfg80211_ctrl->TxStatusInUsed && pCfg80211_ctrl->pTxStatusBuf /*&& (pAd->TxStatusSeq == pHeader->Sequence)*/) { - DBGPRINT(RT_DEBUG_TRACE, ("CFG_TX_STATUS: REAL send cookie %d, ack(%d)\n", Sequence, Ack)); - CFG80211OS_TxStatus(CFG80211_GetEventDevice(pAd), Sequence, + DBGPRINT(RT_DEBUG_TRACE, ("[%s] CFG_TX_STATUS: REAL send cookie 0x%llx, ack(%d)\n", + pCfg80211_ctrl->TxNdev->name, (long long unsigned int) Sequence, Ack)); + CFG80211OS_TxStatus(pCfg80211_ctrl->TxNdev, Sequence, pCfg80211_ctrl->pTxStatusBuf, pCfg80211_ctrl->TxStatusBufLen, Ack); pCfg80211_ctrl->TxStatusInUsed = FALSE; diff --git a/os/linux/cfg80211/cfg80211_util.c b/os/linux/cfg80211/cfg80211_util.c index 8351232..978a954 100755 --- a/os/linux/cfg80211/cfg80211_util.c +++ b/os/linux/cfg80211/cfg80211_util.c @@ -330,20 +330,22 @@ BOOLEAN CFG80211_SupBandInit( #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) if (IdLoop >= 14) { - pChannels[IdLoop].band = IEEE80211_BAND_5GHZ; + pChannels[IdLoop].band = KAL_BAND_5GHZ; pChannels[IdLoop].center_freq = \ - ieee80211_channel_to_frequency(Cfg80211_Chan[IdLoop], IEEE80211_BAND_5GHZ); + (UINT16)ieee80211_channel_to_frequency( + Cfg80211_Chan[IdLoop], KAL_BAND_5GHZ); } else { - pChannels[IdLoop].band = IEEE80211_BAND_2GHZ; + pChannels[IdLoop].band = KAL_BAND_2GHZ; pChannels[IdLoop].center_freq = \ - ieee80211_channel_to_frequency(Cfg80211_Chan[IdLoop], IEEE80211_BAND_2GHZ); + (UINT16)ieee80211_channel_to_frequency( + Cfg80211_Chan[IdLoop], KAL_BAND_2GHZ); } #else pChannels[IdLoop].center_freq = ieee80211_channel_to_frequency(Cfg80211_Chan[IdLoop]); #endif - pChannels[IdLoop].hw_value = IdLoop; + pChannels[IdLoop].hw_value = (UINT16)IdLoop; if (IdLoop < CFG80211_NUM_OF_CHAN_2GHZ) pChannels[IdLoop].max_power = CurTxPower; @@ -358,7 +360,7 @@ BOOLEAN CFG80211_SupBandInit( pChannels[IdLoop].flags = 0; CFG80211DBG(RT_DEBUG_TRACE, ("====> Rader Channel %d\n", Cfg80211_Chan[IdLoop])); pChannels[IdLoop].flags |= (IEEE80211_CHAN_RADAR -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) +#if (KERNEL_VERSION(3, 14, 0) <= LINUX_VERSION_CODE) | IEEE80211_CHAN_NO_IR #else | IEEE80211_CHAN_PASSIVE_SCAN @@ -393,7 +395,7 @@ BOOLEAN CFG80211_SupBandInit( */ /* 7. Fill the Band 2.4GHz */ - pBand = &pCfg80211_CB->Cfg80211_bands[IEEE80211_BAND_2GHZ]; + pBand = &pCfg80211_CB->Cfg80211_bands[KAL_BAND_2GHZ]; if (pDriverBandInfo->RFICType & RFIC_24GHZ) { pBand->n_channels = CFG80211_NUM_OF_CHAN_2GHZ; @@ -441,17 +443,17 @@ BOOLEAN CFG80211_SupBandInit( pBand->ht_cap.mcs.tx_params = IEEE80211_HT_MCS_TX_DEFINED; #endif /* DOT11_N_SUPPORT */ - pWiphy->bands[IEEE80211_BAND_2GHZ] = pBand; + pWiphy->bands[KAL_BAND_2GHZ] = pBand; } else { - pWiphy->bands[IEEE80211_BAND_2GHZ] = NULL; + pWiphy->bands[KAL_BAND_2GHZ] = NULL; pBand->channels = NULL; pBand->bitrates = NULL; } /* 8. Fill the Band 5GHz */ - pBand = &pCfg80211_CB->Cfg80211_bands[IEEE80211_BAND_5GHZ]; + pBand = &pCfg80211_CB->Cfg80211_bands[KAL_BAND_5GHZ]; if (pDriverBandInfo->RFICType & RFIC_5GHZ) { pBand->n_channels = CFG80211_NUM_OF_CHAN_5GHZ; @@ -496,11 +498,11 @@ BOOLEAN CFG80211_SupBandInit( pBand->ht_cap.mcs.tx_params = IEEE80211_HT_MCS_TX_DEFINED; #endif /* DOT11_N_SUPPORT */ - pWiphy->bands[IEEE80211_BAND_5GHZ] = pBand; + pWiphy->bands[KAL_BAND_5GHZ] = pBand; } else { - pWiphy->bands[IEEE80211_BAND_5GHZ] = NULL; + pWiphy->bands[KAL_BAND_5GHZ] = NULL; pBand->channels = NULL; pBand->bitrates = NULL; } @@ -559,7 +561,7 @@ BOOLEAN CFG80211OS_SupBandReInit( pWiphy->rts_threshold = pBandInfo->RtsThreshold; pWiphy->frag_threshold = pBandInfo->FragmentThreshold; pWiphy->retry_short = pBandInfo->RetryMaxCnt & 0xff; - pWiphy->retry_long = (pBandInfo->RetryMaxCnt & 0xff00)>>8; + pWiphy->retry_long = (u8)((pBandInfo->RetryMaxCnt & 0xff00)>>8); #endif /* LINUX_VERSION_CODE */ return TRUE; @@ -673,8 +675,8 @@ BOOLEAN CFG80211OS_BandInfoGet( if (pWiphy == NULL) return FALSE; - *ppBand24 = pWiphy->bands[IEEE80211_BAND_2GHZ]; - *ppBand5 = pWiphy->bands[IEEE80211_BAND_5GHZ]; + *ppBand24 = pWiphy->bands[KAL_BAND_2GHZ]; + *ppBand5 = pWiphy->bands[KAL_BAND_5GHZ]; return TRUE; } @@ -783,12 +785,12 @@ BOOLEAN CFG80211OS_ChanInfoInit( memset(pChan, 0, sizeof(*pChan)); if (ChanId > 14) - pChan->band = IEEE80211_BAND_5GHZ; + pChan->band = KAL_BAND_5GHZ; else - pChan->band = IEEE80211_BAND_2GHZ; + pChan->band = KAL_BAND_2GHZ; #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) - pChan->center_freq = ieee80211_channel_to_frequency(ChanId, pChan->band); + pChan->center_freq = (UINT16)ieee80211_channel_to_frequency(ChanId, pChan->band); #else pChan->center_freq = ieee80211_channel_to_frequency(ChanId); #endif @@ -857,17 +859,17 @@ VOID CFG80211OS_Scaning( /* get channel information */ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) if (ChanId > 14) - CenFreq = ieee80211_channel_to_frequency(ChanId, IEEE80211_BAND_5GHZ); + CenFreq = ieee80211_channel_to_frequency(ChanId, KAL_BAND_5GHZ); else - CenFreq = ieee80211_channel_to_frequency(ChanId, IEEE80211_BAND_2GHZ); + CenFreq = ieee80211_channel_to_frequency(ChanId, KAL_BAND_2GHZ); #else CenFreq = ieee80211_channel_to_frequency(ChanId); #endif if (ChanId > 14) - CurBand = IEEE80211_BAND_5GHZ; + CurBand = KAL_BAND_5GHZ; else - CurBand = IEEE80211_BAND_2GHZ; + CurBand = KAL_BAND_2GHZ; pBand = &pCfg80211_CB->Cfg80211_bands[CurBand]; @@ -945,8 +947,8 @@ VOID CFG80211OS_ScanEnd( NdisAcquireSpinLock(&pCfg80211_CB->scan_notify_lock); if (pCfg80211_CB->pCfg80211_ScanReq) { - CFG80211DBG(RT_DEBUG_ERROR, ("80211> cfg80211_scan_done\n")); - cfg80211_scan_done(pCfg80211_CB->pCfg80211_ScanReq, FlgIsAborted); + CFG80211DBG(RT_DEBUG_TRACE, ("80211> cfg80211_scan_done\n")); + kalCfg80211ScanDone(pCfg80211_CB->pCfg80211_ScanReq, FlgIsAborted); pCfg80211_CB->pCfg80211_ScanReq = NULL; } else @@ -990,17 +992,22 @@ void CFG80211OS_ConnectResultInform( { #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32)) CFG80211_CB *pCfg80211_CB = (CFG80211_CB *)pCB; -// PNET_DEV pNetDev = pCfg80211_CB->pCfg80211_Wdev->netdev; + +#if LINUX_VERSION_CODE <= KERNEL_VERSION(3, 10, 0) + PNET_DEV pNetDev = pCfg80211_CB->pCfg80211_Wdev->netdev; +#endif if ((pCfg80211_CB->pCfg80211_Wdev->netdev == NULL) || (pBSSID == NULL)) return; -#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,11,00)) + +#if LINUX_VERSION_CODE <= KERNEL_VERSION(3, 10, 0) if (pNetDev->ieee80211_ptr->sme_state != CFG80211_SME_CONNECTING) { DBGPRINT(RT_DEBUG_OFF, ("%s, not indicate! It will cause kernel warning\n", __func__)); return; } #endif + if (FlgIsSuccess) { cfg80211_connect_result(pCfg80211_CB->pCfg80211_Wdev->netdev, @@ -1038,7 +1045,7 @@ void CFG80211OS_P2pClientConnectResultInform( if (FlgIsSuccess) { - printk("APCLI: ReqIeLen %d, RspIeLen, %d\n", ReqIeLen, RspIeLen); + DBGPRINT(RT_DEBUG_OFF, ("APCLI: ReqIeLen %d, RspIeLen, %d\n", ReqIeLen, RspIeLen)); hex_dump("APCLI Req:", pReqIe, ReqIeLen); hex_dump("APCLI Rsp:", pRspIe, RspIeLen); cfg80211_connect_result(pNetDev, @@ -1069,22 +1076,19 @@ BOOLEAN CFG80211OS_RxMgmt(IN PNET_DEV pNetDev, IN INT32 freq, IN PUCHAR frame, I return FALSE; } -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) - return cfg80211_rx_mgmt(pNetDev->ieee80211_ptr, - freq, - 0, //CFG_TODO return 0 in dbm - frame, - len, - 0, - GFP_ATOMIC); -#else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) return cfg80211_rx_mgmt(pNetDev->ieee80211_ptr, freq, 0, //CFG_TODO return 0 in dbm frame, - len, - GFP_ATOMIC); + len +#if (KERNEL_VERSION(3, 12, 0) <= LINUX_VERSION_CODE) + , 0/* saker: 3.12 check new field-flags [BRCM/ATH also use 0] */ +#endif +#if (KERNEL_VERSION(3, 18, 0) > LINUX_VERSION_CODE) + , GFP_ATOMIC +#endif + ); #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) return cfg80211_rx_mgmt(pNetDev, @@ -1107,7 +1111,6 @@ BOOLEAN CFG80211OS_RxMgmt(IN PNET_DEV pNetDev, IN INT32 freq, IN PUCHAR frame, I #endif /* LINUX_VERSION_CODE: 2.6.37 */ #endif /* LINUX_VERSION_CODE: 3.4.0 */ #endif /* LINUX_VERSION_CODE: 3.6.0 */ -#endif/* LINUX_VERSION_CODE: 3.12.0 */ } @@ -1132,8 +1135,9 @@ VOID CFG80211OS_TxStatus(IN PNET_DEV pNetDev, IN INT32 cookie, IN PUCHAR frame, VOID CFG80211OS_NewSta(IN PNET_DEV pNetDev, IN const PUCHAR mac_addr, IN const PUCHAR assoc_frame, IN UINT32 assoc_len) { struct station_info sinfo; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 0, 0)) struct ieee80211_mgmt *mgmt; - +#endif NdisZeroMemory(&sinfo, sizeof(sinfo)); @@ -1141,10 +1145,18 @@ VOID CFG80211OS_NewSta(IN PNET_DEV pNetDev, IN const PUCHAR mac_addr, IN const P #if 1 if (pNetDev->ieee80211_ptr->iftype != RT_CMD_80211_IFTYPE_ADHOC) { - sinfo.filled = STATION_INFO_ASSOC_REQ_IES; +#if LINUX_VERSION_CODE <= KERNEL_VERSION(3, 19, 0) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0)) + sinfo.filled = STATION_INFO_ASSOC_REQ_IES; +#elif defined(SUPPORT_ANDROID_HOSTAPD_ASSOC_REQ_IES) + sinfo.filled = STATION_INFO_ASSOC_REQ_IES; +#endif /* endif */ +#endif +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 0, 0)) mgmt = (struct ieee80211_mgmt *) assoc_frame; sinfo.assoc_req_ies_len = assoc_len - 24 - 4; sinfo.assoc_req_ies = mgmt->u.assoc_req.variable; +#endif } #endif @@ -1225,7 +1237,7 @@ VOID CFG80211OS_InformBSS( pWiphy = pCfg80211_CB->pCfg80211_Wdev->wiphy; - bss=cfg80211_inform_bss(pWiphy, + bss = cfg80211_inform_bss(pWiphy, pCfg80211_CB->pCfg80211_Channels, #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 18, 0)) CFG80211_BSS_FTYPE_UNKNOWN, @@ -1236,13 +1248,9 @@ VOID CFG80211OS_InformBSS( beacon_interval, pBeacon, BeaconLen, 0, GFP_KERNEL); - if (unlikely(!bss)) - CFG80211DBG(RT_DEBUG_ERROR, ("%s(%d)> BSS IS NULL, return here.\n", __FUNCTION__, __LINE__)); - - } -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 18, 0)) +#if (KERNEL_VERSION(3, 15, 0) <= LINUX_VERSION_CODE) VOID CFG80211OS_JoinIBSS(IN PNET_DEV pNetDev, IN const PUCHAR pBssid, IN struct ieee80211_channel *channel) { cfg80211_ibss_joined(pNetDev, pBssid, channel, GFP_KERNEL); @@ -1270,10 +1278,10 @@ VOID CFG80211OS_ForceUpdateChanFlags( return; if (freq_start_mhz < 4000) { - pBand = &pCfg80211_CB->Cfg80211_bands[IEEE80211_BAND_2GHZ]; + pBand = &pCfg80211_CB->Cfg80211_bands[KAL_BAND_2GHZ]; } else - pBand = &pCfg80211_CB->Cfg80211_bands[IEEE80211_BAND_5GHZ]; + pBand = &pCfg80211_CB->Cfg80211_bands[KAL_BAND_5GHZ]; if (!pBand) { @@ -1294,10 +1302,16 @@ VOID CFG80211OS_ForceUpdateChanFlags( { pChannels->flags &= ~IEEE80211_CHAN_DISABLED; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0) + /* NL80211_RRF_PASSIVE_SCAN change to NL80211_RRF_NO_IR */ + if (!(flags & NL80211_RRF_NO_IR)) + pChannels->flags &= ~IEEE80211_CHAN_NO_IR; +#else if (!(flags & NL80211_RRF_PASSIVE_SCAN)) pChannels->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN; if (!(flags & NL80211_RRF_NO_IBSS)) pChannels->flags &= ~IEEE80211_CHAN_NO_IBSS; +#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0) */ } pChannels ++; } @@ -1322,10 +1336,7 @@ INT32 CFG80211OS_UpdateRegRuleByRegionIdx( if (!pCB || (!pChDesc2G && !pChDesc5G)) return -EINVAL; pWiphy = pCfg80211_CB->pCfg80211_Wdev->wiphy; - if (!pWiphy) - { - CFG80211DBG(RT_DEBUG_ERROR, ("80211> %s: invalid pWiphy!!\n", __FUNCTION__)); - } + /* first, calculate the number of reg_rules */ if (pChDesc2G) reg_rules_n += TotalRuleNum((PCH_DESC)pChDesc2G); @@ -1348,10 +1359,10 @@ INT32 CFG80211OS_UpdateRegRuleByRegionIdx( while (pChDesc && pChDesc->FirstChannel) { #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) - - freq_start_mhz = ieee80211_channel_to_frequency(pChDesc->FirstChannel, IEEE80211_BAND_2GHZ); - freq_end_mhz = ieee80211_channel_to_frequency(pChDesc->FirstChannel + (pChDesc->NumOfCh-1), - IEEE80211_BAND_2GHZ); + + freq_start_mhz = ieee80211_channel_to_frequency(pChDesc->FirstChannel, KAL_BAND_2GHZ); + freq_end_mhz = ieee80211_channel_to_frequency(pChDesc->FirstChannel + + (pChDesc->NumOfCh-1), KAL_BAND_2GHZ); #else freq_start_mhz = ieee80211_channel_to_frequency(pChDesc->FirstChannel); @@ -1390,9 +1401,9 @@ INT32 CFG80211OS_UpdateRegRuleByRegionIdx( { #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) - freq_start_mhz = ieee80211_channel_to_frequency(pChDesc->FirstChannel, IEEE80211_BAND_5GHZ); - freq_end_mhz = ieee80211_channel_to_frequency(pChDesc->FirstChannel + ((pChDesc->NumOfCh-1)*4), - IEEE80211_BAND_5GHZ); + freq_start_mhz = ieee80211_channel_to_frequency(pChDesc->FirstChannel, KAL_BAND_5GHZ); + freq_end_mhz = ieee80211_channel_to_frequency(pChDesc->FirstChannel + ((pChDesc->NumOfCh-1)*4), + KAL_BAND_5GHZ); #else freq_start_mhz = ieee80211_channel_to_frequency(pChDesc->FirstChannel); freq_end_mhz = ieee80211_channel_to_frequency(pChDesc->FirstChannel + ((pChDesc->NumOfCh-1)*4)); @@ -1426,8 +1437,13 @@ INT32 CFG80211OS_UpdateRegRuleByRegionIdx( ASSERT(rule_idx == reg_rules_n) //pWiphy->flags |= (WIPHY_FLAG_STRICT_REGULATORY | WIPHY_FLAG_CUSTOM_REGULATORY); regd = reg_ptr; - wiphy_apply_custom_regulatory(pWiphy, regd); + if (!pWiphy) + CFG80211DBG(RT_DEBUG_ERROR, ("80211> %s: invalid pWiphy!!\n", __func__)); + else + wiphy_apply_custom_regulatory(pWiphy, regd); + if (reg_ptr != NULL) + kfree(reg_ptr); return 0; } diff --git a/os/linux/cfg80211/cfg80211drv.c b/os/linux/cfg80211/cfg80211drv.c index 33660ee..e20754f 100755 --- a/os/linux/cfg80211/cfg80211drv.c +++ b/os/linux/cfg80211/cfg80211drv.c @@ -27,6 +27,8 @@ #include "rt_config.h" +extern int RtmpIoctl_rt_ioctl_siwgenie(RTMP_ADAPTER *pAd, const u8 *ie, size_t ie_len); + #if defined (HE_BD_CFG80211_SUPPORT) && defined (BD_KERNEL_VER) #undef LINUX_VERSION_CODE #define LINUX_VERSION_CODE KERNEL_VERSION(2,6,39) @@ -81,12 +83,12 @@ INT CFG80211DRV_IoctlHandle( break; case CMD_RTPRIV_IOCTL_80211_SCAN: - if (CFG80211DRV_OpsScanCheckStatus(pAd, Data) != TRUE) + if (CFG80211DRV_OpsScanCheckStatus(pAd, (UINT8)Data) != TRUE) return NDIS_STATUS_FAILURE; break; case CMD_RTPRIV_IOCTL_80211_SCAN_STATUS_LOCK_INIT: - CFG80211_ScanStatusLockInit(pAd, Data); + CFG80211_ScanStatusLockInit(pAd, (UINT)Data); break; case CMD_RTPRIV_IOCTL_80211_IBSS_JOIN: @@ -103,7 +105,7 @@ INT CFG80211DRV_IoctlHandle( break; #ifdef CFG_TDLS_SUPPORT case CMD_RTPRIV_IOCTL_80211_STA_TDLS_INSERT_PENTRY: - CFG80211DRV_StaTdlsInsertDeletepEntry(pAd, pData, Data); + CFG80211DRV_StaTdlsInsertDeletepEntry(pAd, pData, (UINT)Data); break; #endif /* CFG_TDLS_SUPPORT */ @@ -128,12 +130,12 @@ INT CFG80211DRV_IoctlHandle( #ifdef CONFIG_STA_SUPPORT case CMD_RTPRIV_IOCTL_80211_STA_KEY_DEFAULT_SET: - CFG80211_setStaDefaultKey(pAd, Data); + CFG80211_setStaDefaultKey(pAd, (UINT)Data); break; #ifdef DOT11W_PMF_SUPPORT case CMD_RTPRIV_IOCTL_80211_STA_MGMT_KEY_DEFAULT_SET: - CFG80211_setStaMgmtDefaultKey(pAd, Data); + CFG80211_setStaMgmtDefaultKey(pAd, (UINT)Data); break; #endif /* DOT11W_PMF_SUPPORT */ @@ -180,22 +182,22 @@ INT CFG80211DRV_IoctlHandle( break; #ifdef RT_CFG80211_P2P_SUPPORT case CMD_RTPRIV_IOCTL_80211_REMAIN_ON_CHAN_SET: - CFG80211DRV_OpsRemainOnChannel(pAd, pData, Data); + CFG80211DRV_OpsRemainOnChannel(pAd, pData, (UINT32)Data); break; case CMD_RTPRIV_IOCTL_80211_CANCEL_REMAIN_ON_CHAN_SET: - CFG80211DRV_OpsCancelRemainOnChannel(pAd, Data); + CFG80211DRV_OpsCancelRemainOnChannel(pAd, (UINT32)Data); break; #endif /*RT_CFG80211_P2P_SUPPORT*/ /* CFG_TODO */ case CMD_RTPRIV_IOCTL_80211_MGMT_FRAME_REG: - CFG80211DRV_OpsMgmtFrameProbeRegister(pAd, pData, Data); + CFG80211DRV_OpsMgmtFrameProbeRegister(pAd, pData, (BOOLEAN)Data); break; /* CFG_TODO */ case CMD_RTPRIV_IOCTL_80211_ACTION_FRAME_REG: - CFG80211DRV_OpsMgmtFrameActionRegister(pAd, pData, Data); + CFG80211DRV_OpsMgmtFrameActionRegister(pAd, pData, (BOOLEAN)Data); break; case CMD_RTPRIV_IOCTL_80211_CHANNEL_LOCK: @@ -205,17 +207,21 @@ INT CFG80211DRV_IoctlHandle( case CMD_RTPRIV_IOCTL_80211_CHANNEL_RESTORE: break; + case CMD_RTPRIV_IOCTL_80211_TX_NETDEV_SET: + CFG80211_SetTxNdev(pAd, pData); + break; + case CMD_RTPRIV_IOCTL_80211_MGMT_FRAME_SEND: CFG80211_SendMgmtFrame(pAd, pData, Data); break; case CMD_RTPRIV_IOCTL_80211_CHANNEL_LIST_SET: - return CFG80211DRV_OpsScanSetSpecifyChannel(pAd,pData, Data); + return CFG80211DRV_OpsScanSetSpecifyChannel(pAd, pData, (UINT8)Data); #ifdef CONFIG_AP_SUPPORT #ifdef RT_CFG80211_P2P_SUPPORT case CMD_RTPRIV_IOCTL_80211_POWER_MGMT_SET: - CFG80211_setPowerMgmt(pAd, Data); + CFG80211_setPowerMgmt(pAd, (UINT)Data); break; #endif /*RT_CFG80211_P2P_SUPPORT*/ @@ -260,11 +266,11 @@ INT CFG80211DRV_IoctlHandle( break; case CMD_RTPRIV_IOCTL_80211_RTS_THRESHOLD_ADD: - CFG80211DRV_RtsThresholdAdd(pAd, Data); + CFG80211DRV_RtsThresholdAdd(pAd, (UINT)Data); break; case CMD_RTPRIV_IOCTL_80211_FRAG_THRESHOLD_ADD: - CFG80211DRV_FragThresholdAdd(pAd, Data); + CFG80211DRV_FragThresholdAdd(pAd, (UINT)Data); break; case CMD_RTPRIV_IOCTL_80211_AP_KEY_DEL: @@ -272,11 +278,11 @@ INT CFG80211DRV_IoctlHandle( break; case CMD_RTPRIV_IOCTL_80211_AP_KEY_DEFAULT_SET: - CFG80211_setApDefaultKey(pAd, Data); + CFG80211_setApDefaultKey(pAd, (UINT)Data); break; case CMD_RTPRIV_IOCTL_80211_PORT_SECURED: - CFG80211_StaPortSecured(pAd, pData, Data); + CFG80211_StaPortSecured(pAd, pData, (UINT)Data); break; case CMD_RTPRIV_IOCTL_80211_AP_STA_DEL: @@ -284,7 +290,7 @@ INT CFG80211DRV_IoctlHandle( break; case CMD_RTPRIV_IOCTL_80211_AP_ASSOC_RSP_EXTRA_IE: - CFG80211_setApAssocRspExtraIe(pAd, pData, Data); + CFG80211_setApAssocRspExtraIe(pAd, pData, (UINT32)Data); break; #endif /* CONFIG_AP_SUPPORT */ @@ -331,11 +337,19 @@ INT CFG80211DRV_IoctlHandle( RTMP_CFG80211_MULTI_STA_ON(pAd, pAssocIe->pNetDev) || #endif /* CFG80211_MULTI_STA */ (Data == RT_CMD_80211_IFTYPE_P2P_CLIENT) - ) - CFG80211DRV_SetP2pCliAssocIe(pAd, pAssocIe->ie, pAssocIe->ie_len); - else + ) { + if (pAssocIe->ie && pAssocIe->ie_len > 0) + CFG80211DRV_SetP2pCliAssocIe(pAd, pAssocIe->ie, pAssocIe->ie_len); + else + CFG80211DRV_SetP2pCliAssocIe(pAd, NULL, 0); + } else #endif /* RT_CFG80211_P2P_CONCURRENT_DEVICE || CFG80211_MULTI_STA */ - RTMP_DRIVER_80211_GEN_IE_SET(pAd, pAssocIe->ie, pAssocIe->ie_len); + { + if (pAssocIe->ie && pAssocIe->ie_len > 0) + RtmpIoctl_rt_ioctl_siwgenie(pAd, pAssocIe->ie, pAssocIe->ie_len); + else + RtmpIoctl_rt_ioctl_siwgenie(pAd, NULL, 0); + } } break; #endif /*CONFIG_STA_SUPPORT*/ @@ -347,7 +361,10 @@ INT CFG80211DRV_IoctlHandle( break; case CMD_RTPRIV_IOCTL_80211_VIF_DEL: - RTMP_CFG80211_VirtualIF_Remove(pAd, pData, Data); + /* .del_virtual_intf CFG hook function, + * If we lock here, will cause dead_lock issue + */ + RTMP_CFG80211_VirtualIF_Remove(pAd, pData, (UINT32)Data, FALSE); break; #endif /* RT_CFG80211_P2P_CONCURRENT_DEVICE || CFG80211_MULTI_STA */ @@ -638,7 +655,7 @@ BOOLEAN CFG80211DRV_OpsSetChannel(RTMP_ADAPTER *pAd, VOID *pData) IfType == RT_CMD_80211_IFTYPE_P2P_GO) { - wdev->bw = pAd->CommonCfg.RegTransmitSetting.field.BW; + wdev->bw = (UCHAR)(pAd->CommonCfg.RegTransmitSetting.field.BW); pAd->CommonCfg.Channel = ChanId; if(pAd->CommonCfg.RegTransmitSetting.field.EXTCHA == EXTCHA_BELOW) @@ -664,7 +681,7 @@ BOOLEAN CFG80211DRV_OpsSetChannel(RTMP_ADAPTER *pAd, VOID *pData) if(IfType == RT_CMD_80211_IFTYPE_AP || IfType == RT_CMD_80211_IFTYPE_P2P_GO) { - wdev->bw = pAd->CommonCfg.RegTransmitSetting.field.BW; + wdev->bw = (UCHAR)(pAd->CommonCfg.RegTransmitSetting.field.BW); pAd->CommonCfg.Channel = ChanId; if(pAd->CommonCfg.RegTransmitSetting.field.EXTCHA == EXTCHA_BELOW) @@ -737,9 +754,9 @@ BOOLEAN CFG80211DRV_OpsSetChannel(RTMP_ADAPTER *pAd, VOID *pData) else pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel; - bbp_set_bw(pAd, pAd->CommonCfg.RegTransmitSetting.field.BW); - AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel,FALSE); - AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); + bbp_set_bw(pAd, (UINT8)(pAd->CommonCfg.RegTransmitSetting.field.BW)); + AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); + AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); CFG80211DBG(RT_DEBUG_TRACE, ("80211> New CH = %d, New BW = %d with Ext[%d]\n", pAd->CommonCfg.CentralChannel, pAd->CommonCfg.RegTransmitSetting.field.BW, @@ -798,7 +815,7 @@ BOOLEAN CFG80211DRV_OpsJoinIbss( pIbssInfo = (CMD_RTPRIV_IOCTL_80211_IBSS *)pData; pAd->StaCfg.bAutoReconnect = TRUE; - pAd->CommonCfg.BeaconPeriod = pIbssInfo->BeaconInterval; + pAd->CommonCfg.BeaconPeriod = (USHORT)pIbssInfo->BeaconInterval; if (pIbssInfo->privacy) { @@ -1022,7 +1039,7 @@ BOOLEAN CFG80211DRV_StaGet( pIbssInfo->tx_packets = pAd->WlanCounters.TransmittedFragmentCount.u.LowPart; pIbssInfo->tx_retries = pAd->WlanCounters.RetryCount.u.LowPart; pIbssInfo->tx_failed = pAd->WlanCounters.FailedCount.u.LowPart; - pIbssInfo->rx_packets = pAd->WlanCounters.ReceivedFragmentCount.QuadPart; + pIbssInfo->rx_packets = (UINT32)(pAd->WlanCounters.ReceivedFragmentCount.QuadPart); /* fill signal */ @@ -1144,8 +1161,10 @@ BOOLEAN CFG80211DRV_StaKeyAdd( &pAd->SharedKey[BSS0][pKeyInfo->KeyId], pEntry->Addr); } else - printk("%s =====> can't add to [%d]Wcid %d, type=%d\n", __FUNCTION__, i, - pEntry->wcid, pEntry->EntryType); + DBGPRINT(RT_DEBUG_OFF, + ("%s can't add [%d]Wcid %d type=%d\n", + __func__, i, pEntry->wcid, + pEntry->EntryType)); } } @@ -1651,20 +1670,25 @@ VOID CFG80211_LostApInform( { PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)pAdCB; -// CFG80211_CB *p80211CB = pAd->pCfg80211_CB; +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 11, 0)) + CFG80211_CB *p80211CB = pAd->pCfg80211_CB; + + DBGPRINT(RT_DEBUG_TRACE, ("80211> CFG80211_LostApInform ==> %d\n", + p80211CB->pCfg80211_Wdev->sme_state)); +#endif pAd->StaCfg.bAutoReconnect = FALSE; #if 0 //MCC if(pAd->cfg80211_ctrl.isMccOn) { - printk("MCC:==============================> off by STA\n"); + DBGPRINT(RT_DEBUG_OFF, ("MCC:==============================> off by STA\n")); pAd->cfg80211_ctrl.isMccOn = FALSE; CmdMccStop(pAd, NULL); } #endif #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 11, 0)) - DBGPRINT(RT_DEBUG_TRACE, ("80211> CFG80211_LostApInform ==> %d\n", + DBGPRINT(RT_DEBUG_TRACE, ("80211> CFG80211_LostApInform ==> %d\n", p80211CB->pCfg80211_Wdev->sme_state)); if (p80211CB->pCfg80211_Wdev->sme_state == CFG80211_SME_CONNECTING) { @@ -1676,7 +1700,11 @@ VOID CFG80211_LostApInform( cfg80211_disconnected(pAd->net_dev, 0, NULL, 0, GFP_KERNEL); } #else - cfg80211_disconnected(pAd->net_dev, 0, NULL, 0, GFP_KERNEL); + cfg80211_disconnected(pAd->net_dev, 0, NULL, 0, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)) + FALSE,/* locally_generated */ +#endif + GFP_KERNEL); #endif } #endif /*CONFIG_STA_SUPPORT*/ @@ -1772,7 +1800,7 @@ VOID CFG80211_RegRuleApply( UINT32 IdBand, IdChan, IdPwr; UINT32 ChanNum, ChanId, Power, RecId, DfsType; BOOLEAN FlgIsRadar; - ULONG IrqFlags; + ULONG IrqFlags = 0; #ifdef DFS_SUPPORT RADAR_DETECT_STRUCT *pRadarDetect; #endif /* DFS_SUPPORT */ @@ -1840,18 +1868,15 @@ VOID CFG80211_RegRuleApply( #endif /* EXT_BUILD_CHANNEL_LIST */ #endif /* AUTO_CH_SELECT_ENHANCE */ - for(IdBand=0; IdBand<IEEE80211_NUM_BANDS; IdBand++) - { - if (((IdBand == IEEE80211_BAND_2GHZ) && (pBand24G == NULL)) || - ((IdBand == IEEE80211_BAND_5GHZ) && (pBand5G == NULL))) + for (IdBand = 0; IdBand < KAL_NUM_BANDS; IdBand++) { + if (((IdBand == KAL_BAND_2GHZ) && (pBand24G == NULL)) || + ((IdBand == KAL_BAND_5GHZ) && (pBand5G == NULL))) { continue; } - if (IdBand == IEEE80211_BAND_2GHZ) - { + if (IdBand == KAL_BAND_2GHZ) CFG80211DBG(RT_DEBUG_TRACE, ("crda> reset chan/power for 2.4GHz\n")); - } else { CFG80211DBG(RT_DEBUG_TRACE, ("crda> reset chan/power for 5GHz\n")); @@ -1885,7 +1910,7 @@ VOID CFG80211_RegRuleApply( for(IdPwr=0; IdPwr<MAX_NUM_OF_CHANNELS; IdPwr++) { - if (ChanId == pAd->TxPower[IdPwr].Channel) + if (((UCHAR)ChanId) == pAd->TxPower[IdPwr].Channel) { /* init the channel info. */ NdisMoveMemory(&pAd->ChannelList[RecId], @@ -1893,22 +1918,22 @@ VOID CFG80211_RegRuleApply( sizeof(CHANNEL_TX_POWER)); /* keep channel number */ - pAd->ChannelList[RecId].Channel = ChanId; + pAd->ChannelList[RecId].Channel = (UCHAR)ChanId; /* keep maximum tranmission power */ - pAd->ChannelList[RecId].MaxTxPwr = Power; + pAd->ChannelList[RecId].MaxTxPwr = (UCHAR)Power; /* keep DFS flag */ if (FlgIsRadar == TRUE) - pAd->ChannelList[RecId].DfsReq = TRUE; + pAd->ChannelList[RecId].DfsReq = (UCHAR)TRUE; else - pAd->ChannelList[RecId].DfsReq = FALSE; + pAd->ChannelList[RecId].DfsReq = (UCHAR)FALSE; /* keep DFS type */ - pAd->ChannelList[RecId].RegulatoryDomain = DfsType; + pAd->ChannelList[RecId].RegulatoryDomain = (UCHAR)DfsType; /* re-set DFS info. */ - pAd->CommonCfg.RDDurRegion = DfsType; + pAd->CommonCfg.RDDurRegion = (UCHAR)DfsType; #if 0 if (DfsType == JAP_W53) @@ -1942,7 +1967,7 @@ VOID CFG80211_RegRuleApply( } } - pAd->ChannelListNum = RecId; + pAd->ChannelListNum = (UCHAR)RecId; RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); CFG80211DBG(RT_DEBUG_TRACE, ("crda> Number of channels = %d\n", RecId)); @@ -2047,7 +2072,7 @@ INT CFG80211_setStaDefaultKey( PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)pAdCB; DBGPRINT(RT_DEBUG_TRACE, ("Set Sta Default Key: %d\n", Data)); - pAd->StaCfg.wdev.DefaultKeyId = Data; /* base 0 */ + pAd->StaCfg.wdev.DefaultKeyId = (UCHAR)Data; /* base 0 */ return 0; } @@ -2057,7 +2082,7 @@ INT CFG80211_setStaMgmtDefaultKey( IN UINT Data ) { - PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)pAdCB; + /* PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)pAdCB; */ DBGPRINT(RT_DEBUG_TRACE, ("Set Sta MgmtDefault Key: %d\n", Data)); //pAd->StaCfg.wdev.MgmtDefaultKeyId = Data; /* base 0 */ @@ -2186,15 +2211,15 @@ BOOLEAN CFG80211_checkScanTable( #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) if (pAd->ScanTab.BssEntry[bss_idx].Channel > 14) - CenFreq = ieee80211_channel_to_frequency(pBssEntry->Channel , IEEE80211_BAND_5GHZ); + CenFreq = ieee80211_channel_to_frequency(pBssEntry->Channel, KAL_BAND_5GHZ); else - CenFreq = ieee80211_channel_to_frequency(pBssEntry->Channel , IEEE80211_BAND_2GHZ); + CenFreq = ieee80211_channel_to_frequency(pBssEntry->Channel, KAL_BAND_2GHZ); #else CenFreq = ieee80211_channel_to_frequency(pBssEntry->Channel); #endif chan = ieee80211_get_channel(pWiphy, CenFreq); - ieLen = 2 + pApCliEntry->MlmeAux.SsidLen + pBssEntry->VarIeFromProbeRspLen; + ieLen = (UCHAR)(2 + pApCliEntry->MlmeAux.SsidLen + pBssEntry->VarIeFromProbeRspLen); os_alloc_mem(NULL, (UCHAR **)&ie, ieLen); if (!ie) @@ -2208,8 +2233,9 @@ BOOLEAN CFG80211_checkScanTable( NdisCopyMemory(ie + 2, pApCliEntry->MlmeAux.Ssid, pApCliEntry->MlmeAux.SsidLen); NdisCopyMemory(ie + 2 + pApCliEntry->MlmeAux.SsidLen, pBssEntry->pVarIeFromProbRsp, pBssEntry->VarIeFromProbeRspLen); - - bss = cfg80211_inform_bss(pWiphy, chan, + + if (chan) { + bss = cfg80211_inform_bss(pWiphy, chan, #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 18, 0)) CFG80211_BSS_FTYPE_UNKNOWN, #endif @@ -2221,12 +2247,26 @@ BOOLEAN CFG80211_checkScanTable( (pBssEntry->Rssi * 100), #endif GFP_KERNEL); + } else { + DBGPRINT(RT_DEBUG_ERROR, ("Invalid channel !!\n")); + + if (ie != NULL) + os_free_mem(NULL, ie); + + return FALSE; + } + if (bss) { - printk("Fake New %s(%02x:%02x:%02x:%02x:%02x:%02x) in Kernel_ScanTable with CH[%d][%d] BI:%d len:%d\n", - pApCliEntry->MlmeAux.Ssid, - PRINT_MAC(pApCliEntry->MlmeAux.Bssid),bss->channel->center_freq, pBssEntry->Channel, - pApCliEntry->MlmeAux.BeaconPeriod, pBssEntry->VarIeFromProbeRspLen); + DBGPRINT(RT_DEBUG_OFF, + ("Fake New %s(%02x:%02x:%02x:%02x:%02x:%02x)", + pApCliEntry->MlmeAux.Ssid, + PRINT_MAC(pApCliEntry->MlmeAux.Bssid))); + DBGPRINT(RT_DEBUG_OFF, + (" in Kernel_ScanTable with CH[%d][%d] BI:%d len:%d\n", + bss->channel->center_freq, pBssEntry->Channel, + pApCliEntry->MlmeAux.BeaconPeriod, + pBssEntry->VarIeFromProbeRspLen)); #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)) cfg80211_put_bss(pWiphy, bss); @@ -2243,7 +2283,9 @@ BOOLEAN CFG80211_checkScanTable( return TRUE; } else - printk("%s Not In Driver Scan Table\n", pApCliEntry->MlmeAux.Ssid); + DBGPRINT(RT_DEBUG_OFF, + ("%s Not In Driver Scan Table\n", + pApCliEntry->MlmeAux.Ssid)); return FALSE; } @@ -2366,7 +2408,7 @@ VOID CFG80211_JoinIBSS( pBeaconFrame, FrameLen); #endif /*CONFIG_STA_SUPPORT*/ MlmeFreeMemory(pAd, pBeaconFrame); -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 18 ,0)) +#if (KERNEL_VERSION(3, 15, 0) <= LINUX_VERSION_CODE) CFG80211OS_JoinIBSS(pAd->net_dev, pBSSID, pCfg80211_CB->pCfg80211_Channels); #else CFG80211OS_JoinIBSS(pAd->net_dev, pBSSID); diff --git a/os/linux/config.mk b/os/linux/config.mk index 9cae843..f591aee 100755 --- a/os/linux/config.mk +++ b/os/linux/config.mk @@ -71,7 +71,7 @@ HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=n #endif // NATIVE_WPA_SUPPLICANT_SUPPORT // #Support Net interface block while Tx-Sw queue full -HAS_BLOCK_NET_IF=n +HAS_BLOCK_NET_IF=y #Support IGMP-Snooping function. HAS_IGMP_SNOOP_SUPPORT=n @@ -275,7 +275,7 @@ HAS_CFG80211_P2P_SUPPORT=y HAS_CFG80211_P2P_CONCURRENT_DEVICE=y HAS_CFG80211_P2P_SINGLE_DEVICE=n HAS_CFG80211_P2P_STATIC_CONCURRENT_DEVICE=n -HAS_CFG80211_BUILD_CHANNEL_LIST=n +HAS_CFG80211_BUILD_CHANNEL_LIST=y HAS_CFG80211_P2P_MULTI_CHAN_SUPPORT=n #Cfg80211-based TDLS support @@ -316,7 +316,11 @@ HAS_HT40_DISABLE_SHORT_GI=n HAS_BSS_COEX_DISABLE=n #Treat compile Warning as Error -HAS_COMPILE_WARNING_AS_ERROR=n +ifndef CONFIG_KASAN +# KASAN need high version of GCC, many compile errors in +# this module, so disable -Werror option +HAS_COMPILE_WARNING_AS_ERROR=y +endif #ifdef OS_ABL_FUNC_SUPPORT ifeq ($(OSABL),YES) @@ -472,6 +476,10 @@ HAS_MT_PS_SUPPORT=n HAS_CONFIG_COB_SOLUTION_SUPPORT=y #endif +#ifdef SMART_CARRIER_SENSE +HAS_SMART_CARRIER_SENSE_SUPPORT=n +#endif + #ifdef USB_IOT_WORKAROUND # This workaround can fix IOT issue with some specific USB host controllers. # On those host controllers, a USB packet is unexpectedly divided into 2 smaller @@ -497,6 +505,7 @@ ifeq ($(PLATFORM),MSTAR) HAS_USB_BULK_BUF_ALIGMENT=y HAS_USB_BULK_BUF_PREALLOC=y HAS_NEW_FAST_CONNECT_SCHEME_SUPPORT=y +HAS_SUPPORT_ACS_ALL_CHANNEL_RANK=y endif # ----------- End of MSTAR ----------- @@ -510,7 +519,6 @@ endif # ============ HE_TV =========== ifeq ($(PLATFORM),HE_TV) HAS_HE_SUPPORT=y -HAS_RESUME_WITH_USB_RESET_SUPPORT=y HAS_USB_BULK_BUF_ALIGMENT=n HAS_USB_BULK_BUF_PREALLOC=n endif @@ -532,7 +540,7 @@ WFLAGS += -DCONFIG_RA_NAT_NONE WFLAGS += -I$(RT28xx_DIR)/include ifneq (,$(findstring MSTAR,$(PLATFORM))) -#WFLAGS += -DMSTAR_SUPPORT +WFLAGS += -DMSTAR_SUPPORT endif ifeq ($(PREALLOC),YES) @@ -1251,6 +1259,9 @@ WFLAGS += -DNEW_FAST_CONNECT_SCHEME_SUPPORT endif endif +ifeq ($(HAS_SMART_CARRIER_SENSE_SUPPORT),y) +WFLAGS += -DSMART_CARRIER_SENSE_SUPPORT +endif endif # endif of ifeq ($(RT28xx_MODE),STA) #endif // CONFIG_STA_SUPPORT // @@ -2273,7 +2284,7 @@ endif ifneq ($(findstring mt7603u,$(CHIPSET)),) WFLAGS += -DMT7603 -DMT_BBP -DMT_RF -DRTMP_RF_RW_SUPPORT -DMT_MAC -DRTMP_MAC_USB -DRTMP_USB_SUPPORT -DMCS_LUT_SUPPORT -DRTMP_TIMER_TASK_SUPPORT -WFLAGS += -DRTMP_EFUSE_SUPPORT +WFLAGS += -DRTMP_EFUSE_SUPPORT -DBUF_ALIGMENT_RINGSIZE=2 WFLAGS += -DSTA_LP_PHASE_1_SUPPORT #WFLAGS += -DCONFIG_PM_BIT_HW_MODE #-DNEW_MBSSID_MODE @@ -2384,5 +2395,6 @@ endif ifeq ($(PLATFORM),MSTAR) WFLAGS += -Wframe-larger-than=2048 +WFLAGS += -DCCN3_TV_SUPPORT EXTRA_CFLAGS := $(WFLAGS) endif diff --git a/os/linux/prealloc.c b/os/linux/prealloc.c index 5ed6bb9..bed90d7 100755 --- a/os/linux/prealloc.c +++ b/os/linux/prealloc.c @@ -1,4 +1,3 @@ - #include <linux/module.h> #include <linux/version.h> #include <linux/kernel.h> @@ -26,11 +25,7 @@ enum BLK_TYPE { BLK_NULL, #endif BLK_PSPOLL, -#if 0// USB_BULK_BUF_PREALLOC - BLK_RX0 = 5*BUF_ALIGMENT_RINGSIZE, -#else BLK_RX0, -#endif BLK_RX1, BLK_RX2, BLK_RX3, @@ -47,8 +42,7 @@ enum BLK_TYPE { #endif - -void * PreAllocBuffer[NUM_OF_TOTAL_BLK]; +void* PreAllocBuffer[NUM_OF_TOTAL_BLK]; ULONG PreAllocDmaAddr[NUM_OF_TOTAL_BLK]; int __init prealloc_init(void) @@ -56,10 +50,10 @@ int __init prealloc_init(void) int result = 0, tx = 0, rx = 0, k = 0; memset(PreAllocBuffer,0, NUM_OF_TOTAL_BLK); - printk("HTTX_BUFFER [%zu]\n",sizeof(HTTX_BUFFER)); - printk("TX_BUFFER [%zu]\n",sizeof(TX_BUFFER)); + /*printk("HTTX_BUFFER [%u]\n",sizeof(HTTX_BUFFER)); + printk("TX_BUFFER [%u]\n",sizeof(TX_BUFFER)); printk("MAX_RXBULK_SIZE [%u]\n",MAX_RXBULK_SIZE); - printk("CMD_RSP_BULK_SIZE [%u]\n",CMD_RSP_BULK_SIZE); + printk("CMD_RSP_BULK_SIZE [%u]\n",CMD_RSP_BULK_SIZE);*/ //TX #ifdef USB_BULK_BUF_PREALLOC for(tx=0;tx<5*BUF_ALIGMENT_RINGSIZE;tx++) @@ -67,8 +61,6 @@ int __init prealloc_init(void) for(tx=0; tx<5; tx++) #endif { - - //printk("%s[%u][%u]\n",__FUNCTION__,sizeof(HTTX_BUFFER),NUM_OF_TOTAL_BLK); PreAllocBuffer[tx+BLK_TX0] = kmalloc(sizeof(HTTX_BUFFER), GFP_KERNEL | GFP_DMA); if (!PreAllocBuffer[tx+BLK_TX0]) goto fail_malloc1; @@ -77,7 +69,6 @@ int __init prealloc_init(void) } //Null - PreAllocBuffer[BLK_NULL] = kmalloc(sizeof(TX_BUFFER), GFP_KERNEL | GFP_DMA); if (!PreAllocBuffer[BLK_NULL]) goto fail_malloc1; @@ -88,7 +79,7 @@ int __init prealloc_init(void) PreAllocBuffer[BLK_PSPOLL] = kmalloc(sizeof(TX_BUFFER), GFP_KERNEL | GFP_DMA); if (!PreAllocBuffer[BLK_PSPOLL]) goto fail_malloc2; - + PreAllocDmaAddr[BLK_PSPOLL] = virt_to_phys(PreAllocBuffer[BLK_PSPOLL]); //RX @@ -109,7 +100,7 @@ int __init prealloc_init(void) PreAllocDmaAddr[BLK_CMD] = virt_to_phys(PreAllocBuffer[BLK_CMD]); for (k=0;k<NUM_OF_TOTAL_BLK;k++) - printk("==>[%d]:PreBuff:0x%p, DmaAddr:0x%lu\n", k, PreAllocBuffer[k], PreAllocDmaAddr[k]); + printk("==>[%d]:PreBuff:0x%p, DmaAddr:0x%p\n", k, PreAllocBuffer[k], (void*)PreAllocDmaAddr[k]); printk("install prealloc ok\n"); return result; /* succeed */ @@ -218,12 +209,10 @@ void *RTMPQMemAddr(int size, dma_addr_t *pDmaAddr, int type) if (size > MAX_RXBULK_SIZE) return NULL; break; - #if 1 case BLK_CMD: if (size > CMD_RSP_BULK_SIZE) return NULL; break; - #endif default: printk("Non-support memory type!!!!\n"); return NULL; @@ -233,10 +222,7 @@ void *RTMPQMemAddr(int size, dma_addr_t *pDmaAddr, int type) return PreAllocBuffer[type]; } #endif - - EXPORT_SYMBOL(RTMPQMemAddr); module_init(prealloc_init); module_exit(prealloc_cleanup); - diff --git a/os/linux/rt_linux.c b/os/linux/rt_linux.c index 6ec5f03..4563b08 100755 --- a/os/linux/rt_linux.c +++ b/os/linux/rt_linux.c @@ -192,7 +192,7 @@ static inline VOID __RTMP_OS_Del_Timer( OUT BOOLEAN *pCancelled) { if (timer_pending(pTimer)) - *pCancelled = del_timer_sync(pTimer); + *pCancelled = (BOOLEAN)del_timer_sync(pTimer); else *pCancelled = TRUE; } @@ -492,7 +492,7 @@ NDIS_STATUS RTMPCloneNdisPacket( GET_OS_PKT_LEN(pInPacket)); *ppOutPacket = OSPKT_TO_RTPKT(pkt); - printk(KERN_ERR "###Clone###\n"); + DBGPRINT(RT_DEBUG_OFF, (KERN_ERR "###Clone###\n")); return NDIS_STATUS_SUCCESS; } @@ -517,7 +517,7 @@ NDIS_STATUS RTMPAllocateNdisPacket( if (pPacket == NULL) { *ppPacket = NULL; #ifdef DEBUG - printk(KERN_ERR "RTMPAllocateNdisPacket Fail\n\n"); + DBGPRINT(RT_DEBUG_OFF, (KERN_ERR "RTMPAllocateNdisPacket Fail\n\n")); #endif return NDIS_STATUS_FAILURE; } @@ -923,25 +923,25 @@ void wlan_802_11_to_802_3_packet( } -void hex_dump(char *str, UCHAR *pSrcBufVA, UINT SrcBufLen) +void hex_dump(char *str, const UCHAR *pSrcBufVA, UINT SrcBufLen) { #ifdef DBG - unsigned char *pt; + const unsigned char *pt; int x; if (RTDebugLevel < RT_DEBUG_TRACE) return; pt = pSrcBufVA; - printk("%s: %p, len = %d\n", str, pSrcBufVA, SrcBufLen); + DBGPRINT(RT_DEBUG_OFF, ("%s: %p, len = %d\n", str, pSrcBufVA, SrcBufLen)); for (x = 0; x < SrcBufLen; x++) { if (x % 16 == 0) - printk("0x%04x : ", x); - printk("%02x ", ((unsigned char)pt[x])); + DBGPRINT(RT_DEBUG_OFF, ("0x%04x : ", x)); + DBGPRINT(RT_DEBUG_OFF, ("%02x ", ((unsigned char)pt[x]))); if (x % 16 == 15) - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); } - printk("\n"); + DBGPRINT(RT_DEBUG_OFF, ("\n")); #endif /* DBG */ } @@ -1072,13 +1072,20 @@ void RtmpOSFileSeek(RTMP_OS_FD osfd, int offset) int RtmpOSFileRead(RTMP_OS_FD osfd, char *pDataPtr, int readLen) { +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0)) + size_t count = 0; + count = kernel_read(osfd, 0, pDataPtr, readLen); + return count; +#else /* The object must have a read method */ if (osfd->f_op && osfd->f_op->read) { return osfd->f_op->read(osfd, pDataPtr, readLen, &osfd->f_pos); - } else { + } + else { DBGPRINT(RT_DEBUG_ERROR, ("no file read method\n")); return -1; } +#endif } @@ -1149,10 +1156,10 @@ static inline NDIS_STATUS __RtmpOSTaskKill(OS_TASK *pTask) mb(); ret = KILL_THREAD_PID(pTask->taskPID, SIGTERM, 1); if (ret) { - printk(KERN_WARNING + DBGPRINT(RT_DEBUG_OFF, (KERN_WARNING "kill task(%s) with pid(%d) failed(retVal=%d)!\n", pTask->taskName, GET_PID_NUMBER(pTask->taskPID), - ret); + ret)); } else { wait_for_completion(&pTask->taskComplete); pTask->taskPID = THREAD_PID_INIT_VALUE; @@ -1377,7 +1384,7 @@ static UINT32 RtmpOSWirelessEventTranslate(IN UINT32 eventType) #endif /* P2P_SUPPORT */ default: - printk("Unknown event: 0x%x\n", eventType); + DBGPRINT(RT_DEBUG_OFF, ("Unknown event: 0x%x\n", eventType)); break; } @@ -1404,19 +1411,18 @@ int RtmpOSWrielessEventSend( memset(&wrqu, 0, sizeof (wrqu)); if (flags > -1) - wrqu.data.flags = flags; + wrqu.data.flags = (USHORT)flags; if (pSrcMac) memcpy(wrqu.ap_addr.sa_data, pSrcMac, MAC_ADDR_LEN); if ((pData != NULL) && (dataLen > 0)) - wrqu.data.length = dataLen; + wrqu.data.length = (USHORT)dataLen; else wrqu.data.length = 0; -#ifdef CONFIG_WEXT_EXT + wireless_send_event(pNetDev, eventType, &wrqu, (char *)pData); #endif -#endif return 0; } @@ -1439,18 +1445,17 @@ int RtmpOSWrielessEventSendExt( memset(&wrqu, 0, sizeof (wrqu)); if (flags > -1) - wrqu.data.flags = flags; + wrqu.data.flags = (USHORT)flags; if (pSrcMac) memcpy(wrqu.ap_addr.sa_data, pSrcMac, MAC_ADDR_LEN); if ((pData != NULL) && (dataLen > 0)) - wrqu.data.length = dataLen; + wrqu.data.length = (USHORT)dataLen; + + wrqu.addr.sa_family = (sa_family_t)family; - wrqu.addr.sa_family = family; -#ifdef CONFIG_WEXT_EXT wireless_send_event(pNetDev, eventType, &wrqu, (char *)pData); -#endif return 0; } @@ -1662,35 +1667,29 @@ static int RtmpOSNetDevRequestName( PNET_DEV existNetDev; RTMP_STRING suffixName[IFNAMSIZ]; RTMP_STRING desiredName[IFNAMSIZ]; - int ifNameIdx, - prefixLen, - slotNameLen; + int ifNameIdx; int Status; - prefixLen = strlen(pPrefixStr); - ASSERT((prefixLen < IFNAMSIZ)); - for (ifNameIdx = devIdx; ifNameIdx < 32; ifNameIdx++) { memset(suffixName, 0, IFNAMSIZ); memset(desiredName, 0, IFNAMSIZ); - strncpy(&desiredName[0], pPrefixStr, prefixLen); + snprintf(desiredName, sizeof(desiredName), "%s", pPrefixStr); #ifdef MULTIPLE_CARD_SUPPORT #ifdef RT_SOC_SUPPORT if (MC_RowID > 0) - sprintf(suffixName, "i%d", ifNameIdx); + snprintf(suffixName, sizeof(suffixName), "i%d", ifNameIdx); else #else if (MC_RowID >= 0) - sprintf(suffixName, "%02d_%d", MC_RowID, ifNameIdx); + snprintf(suffixName, sizeof(suffixName), "%02d_%d", MC_RowID, ifNameIdx); else #endif /* RT_SOC_SUPPORT */ #endif /* MULTIPLE_CARD_SUPPORT */ - sprintf(suffixName, "%d", ifNameIdx); + snprintf(suffixName, sizeof(suffixName), "%d", ifNameIdx); - slotNameLen = strlen(suffixName); - ASSERT(((slotNameLen + prefixLen) < IFNAMSIZ)); - strcat(desiredName, suffixName); + snprintf(desiredName + strlen(desiredName), + sizeof(desiredName) - strlen(desiredName), "%s", suffixName); existNetDev = RtmpOSNetDevGetByName(dev, &desiredName[0]); if (existNetDev == NULL) @@ -1735,12 +1734,12 @@ void RtmpOSNetDevFree(PNET_DEV pNetDev) #endif #ifdef VENDOR_FEATURE4_SUPPORT - printk("OS_NumOfMemAlloc = %ld, OS_NumOfMemFree = %ld\n", - OS_NumOfMemAlloc, OS_NumOfMemFree); + DBGPRINT(RT_DEBUG_OFF, ("OS_NumOfMemAlloc = %ld, OS_NumOfMemFree = %ld\n", + OS_NumOfMemAlloc, OS_NumOfMemFree)); #endif /* VENDOR_FEATURE4_SUPPORT */ #ifdef VENDOR_FEATURE2_SUPPORT - printk("OS_NumOfPktAlloc = %ld, OS_NumOfPktFree = %ld\n", - OS_NumOfPktAlloc, OS_NumOfPktFree); + DBGPRINT(RT_DEBUG_OFF, ("OS_NumOfPktAlloc = %ld, OS_NumOfPktFree = %ld\n", + OS_NumOfPktAlloc, OS_NumOfPktFree)); #endif /* VENDOR_FEATURE2_SUPPORT */ } @@ -1832,22 +1831,41 @@ INT RtmpOSNetDevDestory(VOID *pReserved, PNET_DEV pNetDev) { /* TODO: Need to fix this */ - printk("WARNING: This function(%s) not implement yet!!!\n", - __FUNCTION__); + DBGPRINT(RT_DEBUG_OFF, ("WARNING: This function(%s) not implement yet!!!\n", + __func__)); return 0; } void RtmpOSNetDevDetach(PNET_DEV pNetDev) { -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,31) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31) + struct net_device_ops *pNetDevOps = (struct net_device_ops *)pNetDev->netdev_ops; +#endif + + unregister_netdev(pNetDev); + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31) + if (pNetDevOps) { + vfree(pNetDevOps); + pNetDevOps = NULL; + } +#endif +} + +void RtmpOSNetDevDetach_WithoutLock(PNET_DEV pNetDev) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31) struct net_device_ops *pNetDevOps = (struct net_device_ops *)pNetDev->netdev_ops; #endif unregister_netdevice(pNetDev); -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,31) - vfree(pNetDevOps); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31) + if (pNetDevOps) { + vfree(pNetDevOps); + pNetDevOps = NULL; + } #endif } @@ -1932,12 +1950,13 @@ int RtmpOSNetDevAttach( /* OS specific flags, here we used to indicate if we are virtual interface */ /* pNetDev->priv_flags = pDevOpHook->priv_flags; */ - RT_DEV_PRIV_FLAGS_SET(pNetDev, pDevOpHook->priv_flags); + RT_DEV_PRIV_FLAGS_SET(pNetDev, (USHORT)pDevOpHook->priv_flags); #if (WIRELESS_EXT < 21) && (WIRELESS_EXT >= 12) /* pNetDev->get_wireless_stats = rt28xx_get_wireless_stats; */ pNetDev->get_wireless_stats = pDevOpHook->get_wstats; #endif + #ifdef CONFIG_WIRELESS_EXT #ifdef CONFIG_STA_SUPPORT #if WIRELESS_EXT >= 12 @@ -1947,6 +1966,7 @@ int RtmpOSNetDevAttach( } #endif /*WIRELESS_EXT >= 12 */ #endif /* CONFIG_STA_SUPPORT */ + #ifdef CONFIG_APSTA_MIXED_SUPPORT #if WIRELESS_EXT >= 12 if (OpMode == OPMODE_AP) { @@ -1955,7 +1975,7 @@ int RtmpOSNetDevAttach( } #endif /*WIRELESS_EXT >= 12 */ #endif /* CONFIG_APSTA_MIXED_SUPPORT */ -#endif +#endif /* CONFIG_WIRELESS_EXT */ /* copy the net device mac address to the net_device structure. */ NdisMoveMemory(pNetDev->dev_addr, &pDevOpHook->devAddr[0], MAC_ADDR_LEN); @@ -2182,7 +2202,7 @@ VOID RtmpDrvAllMacPrint( /* write data to file */ file_w->f_op->write(file_w, msg, strlen(msg), &file_w->f_pos); - printk("%s", msg); + DBGPRINT(RT_DEBUG_OFF, ("%s", msg)); macAddr += AddrStep; } sprintf(msg, "\nDump all MAC values to %s\n", fileName); @@ -2232,7 +2252,7 @@ VOID RtmpDrvAllE2PPrint( /* write data to file */ file_w->f_op->write(file_w, msg, strlen(msg), &file_w->f_pos); - printk("%s", msg); + DBGPRINT(RT_DEBUG_OFF, ("%s", msg)); eepAddr += AddrStep; pMacContent += (AddrStep >> 1); } @@ -2808,6 +2828,10 @@ void OS_LOAD_CODE_FROM_BIN(unsigned char **image, char *bin_name, void *inf_dev, } *image = kmalloc(fw_entry->size, GFP_KERNEL); + if (*image == NULL) { + release_firmware(fw_entry); + return; + } memcpy(*image, fw_entry->data, fw_entry->size); *code_len = fw_entry->size; @@ -3691,7 +3715,7 @@ VOID RtmpOsSpinLockBh(NDIS_SPIN_LOCK *pLockOrg) if (pLock != NULL) { OS_SEM_LOCK(pLock); } else - printk("lock> warning! the lock was freed!\n"); + DBGPRINT(RT_DEBUG_OFF, ("lock> warning! the lock was freed!\n")); } @@ -3717,7 +3741,7 @@ VOID RtmpOsSpinUnLockBh(NDIS_SPIN_LOCK *pLockOrg) if (pLock != NULL) { OS_SEM_UNLOCK(pLock); } else - printk("lock> warning! the lock was freed!\n"); + DBGPRINT(RT_DEBUG_OFF, ("lock> warning! the lock was freed!\n")); } @@ -3744,7 +3768,7 @@ VOID RtmpOsIntLock(NDIS_SPIN_LOCK *pLockOrg, ULONG *pIrqFlags) if (pLock != NULL) { OS_INT_LOCK(pLock, *pIrqFlags); } else - printk("lock> warning! the lock was freed!\n"); + DBGPRINT(RT_DEBUG_OFF, ("lock> warning! the lock was freed!\n")); } @@ -3771,7 +3795,7 @@ VOID RtmpOsIntUnLock(NDIS_SPIN_LOCK *pLockOrg, ULONG IrqFlags) if (pLock != NULL) { OS_INT_UNLOCK(pLock, IrqFlags); } else - printk("lock> warning! the lock was freed!\n"); + DBGPRINT(RT_DEBUG_OFF, ("lock> warning! the lock was freed!\n")); } void RtmpOsSpinLockIrqSave(NDIS_SPIN_LOCK *lock, unsigned long *flags) @@ -3782,7 +3806,7 @@ void RtmpOsSpinLockIrqSave(NDIS_SPIN_LOCK *lock, unsigned long *flags) if (pLock != NULL) spin_lock_irqsave((spinlock_t *)(pLock), *flags); else - printk("lock> warning! the lock was freed!\n"); + DBGPRINT(RT_DEBUG_OFF, ("lock> warning! the lock was freed!\n")); } @@ -3794,7 +3818,7 @@ void RtmpOsSpinUnlockIrqRestore(NDIS_SPIN_LOCK *lock, unsigned long *flags) if (pLock != NULL) spin_unlock_irqrestore((spinlock_t *)(pLock), *flags); else - printk("lock> warning! the lock was freed!\n"); + DBGPRINT(RT_DEBUG_OFF, ("lock> warning! the lock was freed!\n")); } void RtmpOsSpinLockIrq(NDIS_SPIN_LOCK *lock) @@ -3805,7 +3829,7 @@ void RtmpOsSpinLockIrq(NDIS_SPIN_LOCK *lock) if (pLock != NULL) spin_lock_irq((spinlock_t *)(pLock)); else - printk("lock> warning! the lock was freed!\n"); + DBGPRINT(RT_DEBUG_OFF, ("lock> warning! the lock was freed!\n")); } void RtmpOsSpinUnlockIrq(NDIS_SPIN_LOCK *lock) @@ -3816,7 +3840,7 @@ void RtmpOsSpinUnlockIrq(NDIS_SPIN_LOCK *lock) if (pLock != NULL) spin_unlock_irq((spinlock_t *)(pLock)); else - printk("lock> warning! the lock was freed!\n"); + DBGPRINT(RT_DEBUG_OFF, ("lock> warning! the lock was freed!\n")); } /* @@ -4367,7 +4391,7 @@ BOOLEAN RtmpOsSemaDestory(RTMP_OS_SEM *pSemOrg) os_free_mem(NULL, pSem); pSemOrg->pContent = NULL; } else - printk("sem> warning! double-free sem!\n"); + DBGPRINT(RT_DEBUG_OFF, ("sem> warning! double-free sem!\n")); return TRUE; } diff --git a/os/linux/rt_main_dev.c b/os/linux/rt_main_dev.c index f021615..2ab3af0 100755 --- a/os/linux/rt_main_dev.c +++ b/os/linux/rt_main_dev.c @@ -277,6 +277,7 @@ int rt28xx_open(VOID *dev) RTMP_DRIVER_OP_MODE_GET(pAd, &OpMode); +#ifdef CONFIG_WIRELESS_EXT #if WIRELESS_EXT >= 12 /* if (RT_DEV_PRIV_FLAGS_GET(net_dev) == INT_MAIN) */ if (RTMP_DRIVER_MAIN_INF_CHECK(pAd, RT_DEV_PRIV_FLAGS_GET(net_dev)) == NDIS_STATUS_SUCCESS) @@ -285,14 +286,13 @@ int rt28xx_open(VOID *dev) if (OpMode == OPMODE_AP) net_dev->wireless_handlers = (struct iw_handler_def *) &rt28xx_ap_iw_handler_def; #endif /* CONFIG_APSTA_MIXED_SUPPORT */ -#ifdef CONFIG_WIRELESS_EXT #ifdef CONFIG_STA_SUPPORT if (OpMode == OPMODE_STA) net_dev->wireless_handlers = (struct iw_handler_def *) &rt28xx_iw_handler_def; #endif /* CONFIG_STA_SUPPORT */ -#endif } #endif /* WIRELESS_EXT >= 12 */ +#endif /* #ifdef CONFIG_WIRELESS_EXT */ /* Request interrupt service routine for PCI device @@ -366,8 +366,8 @@ int rt28xx_open(VOID *dev) RTMPDrvOpen(pAd); #ifdef VENDOR_FEATURE2_SUPPORT - printk("Number of Packet Allocated in open = %lu\n", OS_NumOfPktAlloc); - printk("Number of Packet Freed in open = %lu\n", OS_NumOfPktFree); + DBGPRINT(RT_DEBUG_OFF, ("Number of Packet Allocated in open = %lu\n", OS_NumOfPktAlloc)); + DBGPRINT(RT_DEBUG_OFF, ("Number of Packet Freed in open = %lu\n", OS_NumOfPktFree)); #endif /* VENDOR_FEATURE2_SUPPORT */ return (retval); @@ -394,7 +394,9 @@ PNET_DEV RtmpPhyNetDevInit(VOID *pAd, RTMP_OS_NETDEV_OP_HOOK *pNetDevHook) RTMP_DRIVER_MAIN_INF_CREATE(pAd, &net_dev); if (net_dev == NULL) { - printk("%s(): main physical net device creation failed!\n", __FUNCTION__); + DBGPRINT(RT_DEBUG_OFF, + ("%s(): main physical net device creation failed!\n", + __func__)); return NULL; } @@ -532,37 +534,37 @@ VOID dump_skb_info(struct sk_buff *skb) struct sock *sk = skb->sk; - printk("Binding sock info:\n"); + DBGPRINT(RT_DEBUG_OFF, ("Binding sock info:\n")); if (sk) { //NETIF_F_HW_CSUM;NETIF_F_TSO - printk("\tsk_route_caps=0x%x\n", sk->sk_route_caps); - printk("\tsk_gso_type=%d\n", sk->sk_gso_type); + DBGPRINT(RT_DEBUG_OFF, ("\tsk_route_caps=0x%x\n", sk->sk_route_caps)); + DBGPRINT(RT_DEBUG_OFF, ("\tsk_gso_type=%d\n", sk->sk_gso_type)); } else { - printk("\tNo binding sock!\n"); + DBGPRINT(RT_DEBUG_OFF, ("\tNo binding sock!\n")); } - printk("Binding Skb info:\n"); - printk("\tprotocol=%d\n", skb->protocol); - printk("\tip_summed=%d", skb->ip_summed); + DBGPRINT(RT_DEBUG_OFF, ("Binding Skb info:\n")); + DBGPRINT(RT_DEBUG_OFF, ("\tprotocol=%d\n", skb->protocol)); + DBGPRINT(RT_DEBUG_OFF, ("\tip_summed=%d", skb->ip_summed)); if (skb->ip_summed <= 3) - printk("(%s)\n", ip_sum_str[skb->ip_summed]); + DBGPRINT(RT_DEBUG_OFF, ("(%s)\n", ip_sum_str[skb->ip_summed])); else - printk("\n"); - - printk("\tcsum=0x%x\n", skb->csum); - printk("\tcsum_start=%d\n", skb->csum_start); - printk("\tcsum_offset=%d\n", skb->csum_offset); - printk("\tskb->head=0x%x\n", skb->head); - printk("\tskb->data=0x%x\n", skb->data); - printk("\tskb->len=%d\n", skb->len); + DBGPRINT(RT_DEBUG_OFF, ("\n")); + + DBGPRINT(RT_DEBUG_OFF, ("\tcsum=0x%x\n", skb->csum)); + DBGPRINT(RT_DEBUG_OFF, ("\tcsum_start=%d\n", skb->csum_start)); + DBGPRINT(RT_DEBUG_OFF, ("\tcsum_offset=%d\n", skb->csum_offset)); + DBGPRINT(RT_DEBUG_OFF, ("\tskb->head=0x%x\n", skb->head)); + DBGPRINT(RT_DEBUG_OFF, ("\tskb->data=0x%x\n", skb->data)); + DBGPRINT(RT_DEBUG_OFF, ("\tskb->len=%d\n", skb->len)); if (skb->protocol == htons(ETH_P_IP)){ - printk("\tip_hdr=0x%x\n", ip_hdr(skb)); - printk("\ttcp_hdr=0x%x\n", tcp_hdr(skb)); + DBGPRINT(RT_DEBUG_OFF, ("\tip_hdr=0x%x\n", ip_hdr(skb))); + DBGPRINT(RT_DEBUG_OFF, ("\ttcp_hdr=0x%x\n", tcp_hdr(skb))); } - printk("\tgso_size=%d\n", skb_shinfo(skb)->gso_size); - printk("\tgso_type=%d\n", skb_shinfo(skb)->gso_type); - printk("\tgso_seg=%d\n", skb_shinfo(skb)->gso_segs); - printk("\tnr_frags=%d\n", skb_shinfo(skb)->nr_frags); + DBGPRINT(RT_DEBUG_OFF, ("\tgso_size=%d\n", skb_shinfo(skb)->gso_size)); + DBGPRINT(RT_DEBUG_OFF, ("\tgso_type=%d\n", skb_shinfo(skb)->gso_type)); + DBGPRINT(RT_DEBUG_OFF, ("\tgso_seg=%d\n", skb_shinfo(skb)->gso_segs)); + DBGPRINT(RT_DEBUG_OFF, ("\tnr_frags=%d\n", skb_shinfo(skb)->nr_frags)); } @@ -571,8 +573,12 @@ VOID dump_nonlinear_pkt(struct sk_buff *skb) if (skb_is_nonlinear(skb)) { int i, nr_frags = skb_shinfo(skb)->nr_frags, len; void *buf; - printk("%s(): skb is non-linear! skb->len=%d, skb->data_len=%d, non-paged data len=%d, nr_frags=%d!\n", - __FUNCTION__, skb->len, skb->data_len, skb_headlen(skb), nr_frags); + DBGPRINT(RT_DEBUG_OFF, + ("%s(): skb is non-linear! skb->len=%d, skb->data_len=%d, ", + __func__, skb->len, skb->data_len)); + DBGPRINT(RT_DEBUG_OFF, + ("non-paged data len=%d, nr_frags=%d!\n", + skb_headlen(skb), nr_frags)); len = skb->len; buf = kmalloc(len, GFP_KERNEL); @@ -587,7 +593,9 @@ VOID dump_nonlinear_pkt(struct sk_buff *skb) void *addr; addr = ((void *) page_address(frag->page)) + frag->page_offset; - printk("frag %d: page=0x%x, offset=%d, addr=0x%x, size=%d\n", i, frag->page, frag->page_offset, addr, frag->size); + DBGPRINT(RT_DEBUG_OFF, + ("frag %d: page=0x%x, offset=%d, addr=0x%x, size=%d\n", + i, frag->page, frag->page_offset, addr, frag->size)); memcpy(ptr, addr, frag->size); ptr += frag->size; len += frag->size; @@ -621,7 +629,9 @@ INT rt28xx_tso_xmit(struct sk_buff *skb) if (skb_is_gso(skb) || (skb->ip_summed == CHECKSUM_PARTIAL)) { if (skb_is_gso(skb)) { - printk("%s(): skb_is_gso()=%d, skb->ip_summed=%d!\n", __FUNCTION__, skb_is_gso(skb), skb->ip_summed); + DBGPRINT(RT_DEBUG_OFF, + ("%s(): skb_is_gso()=%d, skb->ip_summed=%d!\n", + __func__, skb_is_gso(skb), skb->ip_summed)); if (skb_is_nonlinear(skb)) dump_nonlinear_pkt(skb); //hex_dump("rt28xx_tso_xmit", (UCHAR *)skb->data, skb->len); @@ -675,22 +685,27 @@ INT rt28xx_tso_xmit(struct sk_buff *skb) } if (skb_is_gso(skb)) { - printk("\tmss=%d, gso_type=GSO_%s(0x%x), nr_frags=%d!\n", + DBGPRINT(RT_DEBUG_OFF, ("\tmss=%d, gso_type=GSO_%s(0x%x), nr_frags=%d!\n", mss, (gso_type == SKB_GSO_TCPV4 ? "TCP" : "NonTCP"), - gso_type, nr_frags); - printk("\tips=0x%x, ipcso=0x%x, tups=0x%x, tucso=0x%x, tucse=0x%x\n", - ips, ipcso, tups, tucso, tucse); - printk("RalinkRequiredFields: \n\tcso/tso=%d/%d, is_tcp=%d, ips=%d, tups=%d, mss=%d!\n", - ((skb->ip_summed == CHECKSUM_PARTIAL) ? 1 : 0), - (skb_is_gso(skb) ? 1 : 0), - is_tcp, ips, tups, mss); - printk("\tfields saved in CB[]:cso/tso=%d:%d, is_tcp=%d, ips=%d, tups=%d, mss=%d!\n", - RTMP_GET_PKT_CSO(skb), - RTMP_GET_PKT_TSO(skb), - RTMP_GET_PKT_TCP(skb), - RTMP_GET_PKT_IPS(skb), - RTMP_GET_PKT_TUPS(skb), - RTMP_GET_PKT_MSS(skb)); + gso_type, nr_frags)); + DBGPRINT(RT_DEBUG_OFF, + ("\tips=0x%x, ipcso=0x%x, tups=0x%x, tucso=0x%x, tucse=0x%x\n", + ips, ipcso, tups, tucso, tucse)); + DBGPRINT(RT_DEBUG_OFF, + ("RalinkRequiredFields:\n\tcso/tso=%d/%d,", + ((skb->ip_summed == CHECKSUM_PARTIAL) ? 1 : 0), + (skb_is_gso(skb) ? 1 : 0))); + DBGPRINT(RT_DEBUG_OFF, + ("is_tcp=%d, ips=%d, tups=%d, mss=%d!\n", + is_tcp, ips, tups, mss)); + DBGPRINT(RT_DEBUG_OFF, ("\tfields saved in CB[]:cso/tso=%d:%d,", + RTMP_GET_PKT_CSO(skb), + RTMP_GET_PKT_TSO(skb))); + DBGPRINT(RT_DEBUG_OFF, ("is_tcp=%d, ips=%d, tups=%d, mss=%d!\n", + RTMP_GET_PKT_TCP(skb), + RTMP_GET_PKT_IPS(skb), + RTMP_GET_PKT_TUPS(skb), + RTMP_GET_PKT_MSS(skb))); } return TRUE; } @@ -779,7 +794,7 @@ struct iw_statistics *rt28xx_get_wireless_stats(struct net_device *net_dev) GET_PAD_FROM_NET_DEV(pAd, net_dev); - DBGPRINT(RT_DEBUG_TRACE, ("rt28xx_get_wireless_stats --->\n")); + /*DBGPRINT(RT_DEBUG_TRACE, ("rt28xx_get_wireless_stats --->\n"));*/ pDrvIwStats->priv_flags = RT_DEV_PRIV_FLAGS_GET(net_dev); pDrvIwStats->dev_addr = (PUCHAR)net_dev->dev_addr; @@ -882,7 +897,7 @@ struct iw_statistics *rt28xx_get_wireless_stats(struct net_device *net_dev) pStats->discard.nwid = 0; /* Rx : Wrong nwid/essid */ pStats->miss.beacon = 0; /* Missed beacons/superframe */ - DBGPRINT(RT_DEBUG_TRACE, ("<--- rt28xx_get_wireless_stats\n")); + /*DBGPRINT(RT_DEBUG_TRACE, ("<--- rt28xx_get_wireless_stats\n"));*/ return pStats; } #endif /* WIRELESS_EXT */ @@ -1062,10 +1077,14 @@ BOOLEAN RtmpPhyNetDevExit(VOID *pAd, PNET_DEV net_dev) /* Unregister network device */ if (net_dev != NULL) { - printk("RtmpOSNetDevDetach(): RtmpOSNetDeviceDetach(), dev->name=%s!\n", net_dev->name); - RtmpOSNetDevProtect(1); + DBGPRINT(RT_DEBUG_OFF, + ("RtmpOSNetDevDetach(): RtmpOSNetDeviceDetach(), dev->name=%s!\n", + net_dev->name)); + /* Remove wifi dirver to lock the rtnl_lock here. + * It will cause kernel crash sometimes. + * The lock action leave to kernel. + */ RtmpOSNetDevDetach(net_dev); - RtmpOSNetDevProtect(0); } return TRUE; @@ -1103,7 +1122,7 @@ int RtmpOSIRQRequest(IN PNET_DEV pNetDev) retval = request_irq(pci_dev->irq, rt2860_interrupt, SA_SHIRQ, (net_dev)->name, (net_dev)); if (retval != 0) - printk("RT2860: request_irq ERROR(%d)\n", retval); + DBGPRINT(RT_DEBUG_OFF, ("RT2860: request_irq ERROR(%d)\n", retval)); } #endif /* RTMP_PCI_SUPPORT */ @@ -1116,7 +1135,7 @@ int RtmpOSIRQRequest(IN PNET_DEV pNetDev) if ((retval = request_irq(net_dev->irq,rt2860_interrupt, SA_INTERRUPT, net_dev->name ,net_dev))) #endif { - printk("RT2860: request_irq ERROR(%d)\n", retval); + DBGPRINT(RT_DEBUG_OFF, ("RT2860: request_irq ERROR(%d)\n", retval)); } } #endif /* RTMP_RBUS_SUPPORT */ diff --git a/os/linux/rt_profile.c b/os/linux/rt_profile.c index ede988b..717128b 100755 --- a/os/linux/rt_profile.c +++ b/os/linux/rt_profile.c @@ -253,7 +253,7 @@ NDIS_STATUS RTMPReadParametersHook(RTMP_ADAPTER *pAd) { #ifndef OS_ABL_SUPPORT // TODO: need to roll back when convert into OSABL code - fsize = (ULONG)srcf->f_dentry->d_inode->i_size; + fsize = (ULONG) srcf->f_path.dentry->d_inode->i_size; if (buf_size < (fsize + 1)) buf_size = fsize + 1; #endif /* OS_ABL_SUPPORT */ @@ -291,7 +291,7 @@ NDIS_STATUS RTMPReadParametersHook(RTMP_ADAPTER *pAd) #endif /*HOSTAPD_SUPPORT */ #ifdef SINGLE_SKU_V2 - RTMPSetSingleSKUParameters(pAd); + retval = RTMPSetSingleSKUParameters(pAd); #endif /* SINGLE_SKU_V2 */ return (retval); @@ -1435,7 +1435,7 @@ VOID AP_E2PROM_IOCTL_PostCtrl( IN RTMP_IOCTL_INPUT_STRUCT *wrq, IN RTMP_STRING *msg) { - wrq->u.data.length = strlen(msg); + wrq->u.data.length = (UINT16)strlen(msg); if (copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length)) { DBGPRINT(RT_DEBUG_TRACE, ("%s: copy_to_user() fail\n", __FUNCTION__)); diff --git a/os/linux/rt_txrx_hook.c b/os/linux/rt_txrx_hook.c index d4b60a1..485613b 100755 --- a/os/linux/rt_txrx_hook.c +++ b/os/linux/rt_txrx_hook.c @@ -41,7 +41,7 @@ int RtmpOsTxRxHookRegister(struct mt_wlanTxRxHookOps *ops) list_for_each_safe(cur,next,&hookHead) { entry = list_entry(cur,struct mt_wlanTxRxHookOps,list); - if(entry && ops->priority > entry->priority) + if (ops->priority > entry->priority) { (ops->list).next = next; cur->next =& ops->list; diff --git a/os/linux/rt_usb.c b/os/linux/rt_usb.c index aecf857..70a3a24 100755 --- a/os/linux/rt_usb.c +++ b/os/linux/rt_usb.c @@ -61,7 +61,9 @@ NDIS_STATUS RtmpMgmtTaskInit( status = RtmpOSTaskAttach(pTask, RtmpTimerQThread, (ULONG)pTask); if (status == NDIS_STATUS_FAILURE) { - printk (KERN_WARNING "%s: unable to start RtmpTimerQThread\n", RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev)); + DBGPRINT(RT_DEBUG_OFF, + (KERN_WARNING "%s: unable to start RtmpTimerQThread\n", + RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev))); return NDIS_STATUS_FAILURE; } @@ -71,7 +73,9 @@ NDIS_STATUS RtmpMgmtTaskInit( status = RtmpOSTaskAttach(pTask, RTUSBCmdThread, (ULONG)pTask); if (status == NDIS_STATUS_FAILURE) { - printk (KERN_WARNING "%s: unable to start RTUSBCmdThread\n", RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev)); + DBGPRINT(RT_DEBUG_OFF, + (KERN_WARNING "%s: unable to start RTUSBCmdThread\n", + RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev))); return NDIS_STATUS_FAILURE; } @@ -160,7 +164,7 @@ static void rtusb_dataout_complete(unsigned long data) PHT_TX_CONTEXT pHTTXContext; UCHAR BulkOutPipeId; NTSTATUS Status; - unsigned long IrqFlags; + unsigned long IrqFlags = 0; #ifdef USB_BULK_BUF_ALIGMENT unsigned long IrqFlags2 = 0; #endif /* USB_BULK_BUF_ALIGMENT */ @@ -618,7 +622,7 @@ static void rtusb_mgmt_dma_done_tasklet(unsigned long data) PNDIS_PACKET pPacket; purbb_t pUrb; NTSTATUS Status; - unsigned long IrqFlags; + unsigned long IrqFlags = 0; #ifdef WMM_ACM_SUPPORT #ifdef CONFIG_AP_SUPPORT UINT8 TXWISize = pAd->chipCap.TXWISize; @@ -1159,10 +1163,16 @@ static void rtusb_bcn_dma_done_tasklet(unsigned long data) PNDIS_PACKET pPacket; purbb_t pUrb; NTSTATUS Status; - unsigned long IrqFlags; + unsigned long IrqFlags = 0; UCHAR *ppkt_tail; UCHAR padding_length; +#if defined(RT_CFG80211_P2P_SUPPORT) || defined(SOFTAP_SUPPORT) + UINT apidx = CFG_GO_BSSID_IDX; +#else + UINT apidx = MAIN_MBSSID; +#endif /*RT_CFG80211_P2P_SUPPORT*/ + BSS_STRUCT *pMbss; #ifdef RELEASE_EXCLUDE DBGPRINT_RAW(RT_DEBUG_INFO, ("--->rtusb_bcn_dma_done_tasklet\n")); @@ -1173,6 +1183,7 @@ static void rtusb_bcn_dma_done_tasklet(unsigned long data) Status = RTMP_USB_URB_STATUS_GET(pUrb); pAd = pBcnContext->pAd; index = pBcnContext->SelfIdx; + pMbss = &pAd->ApCfg.MBSSID[apidx]; ASSERT((pAd->BcnRing.TxDmaIdx == index)); @@ -1205,15 +1216,24 @@ static void rtusb_bcn_dma_done_tasklet(unsigned long data) pPacket = pAd->BcnRing.Cell[index].pNdisPacket; ppkt_tail = GET_OS_PKT_DATATAIL(pPacket); - padding_length = ppkt_tail - pBcnContext->ppkt_tail_before_padding; - - OS_PKT_TAIL_ADJUST(pPacket, padding_length); + padding_length = (UCHAR)(ppkt_tail - pBcnContext->ppkt_tail_before_padding); + /* + * OS_PKT_TAIL_ADJUST(pPacket, padding_length); + * + * If set tail position at bulkout function, + * tail_adjust is not necessary + */ //because MT7603 doesn't free bcn_buf. if we don't push 4 byte after kickout done, //next time tx will put extra 4byte. //what if we keep put but without push back, it will cause overflow. pAd->BcnRing.Cell[index].pNdisPacket = NULL; + /* + * Bcn_state should set to DMA_DONE, if Txs not received; + */ + if (pMbss->bcn_buf.bcn_state == BCN_TX_WRITE_TO_DMA) + pMbss->bcn_buf.bcn_state = BCN_TX_DMA_DONE; /* Increase MgmtRing Index */ INC_RING_INDEX(pAd->BcnRing.TxDmaIdx, BCN_RING_SIZE); @@ -1480,6 +1500,7 @@ INT RTUSBCmdThread( { RTMP_ADAPTER *pAd; RTMP_OS_TASK *pTask; + CmdQElmt *pCmdQElmt = NULL; int status; status = 0; @@ -1515,34 +1536,25 @@ INT RTUSBCmdThread( CMDHandler(pAd); } - if (!pAd->PM_FlgSuspend) - { /* Clear the CmdQElements. */ - CmdQElmt *pCmdQElmt = NULL; - - NdisAcquireSpinLock(&pAd->CmdQLock); - pAd->CmdQ.CmdQState = RTMP_TASK_STAT_STOPED; - while(pAd->CmdQ.size) - { - RTThreadDequeueCmd(&pAd->CmdQ, &pCmdQElmt); - if (pCmdQElmt) - { - if (pCmdQElmt->CmdFromNdis == TRUE) - { - if (pCmdQElmt->buffer != NULL) - os_free_mem(pAd, pCmdQElmt->buffer); - os_free_mem(pAd, (PUCHAR)pCmdQElmt); - } - else - { - if ((pCmdQElmt->buffer != NULL) && (pCmdQElmt->bufferlength != 0)) - os_free_mem(pAd, pCmdQElmt->buffer); - os_free_mem(pAd, (PUCHAR)pCmdQElmt); - } + /* Clear the CmdQElements. */ + NdisAcquireSpinLock(&pAd->CmdQLock); + pAd->CmdQ.CmdQState = RTMP_TASK_STAT_STOPED; + while (pAd->CmdQ.size) { + RTThreadDequeueCmd(&pAd->CmdQ, &pCmdQElmt); + if (pCmdQElmt) { + if (pCmdQElmt->CmdFromNdis == TRUE) { + if (pCmdQElmt->buffer != NULL) + os_free_mem(pAd, pCmdQElmt->buffer); + os_free_mem(pAd, (PUCHAR)pCmdQElmt); + } else { + if ((pCmdQElmt->buffer != NULL) && (pCmdQElmt->bufferlength != 0)) + os_free_mem(pAd, pCmdQElmt->buffer); + os_free_mem(pAd, (PUCHAR)pCmdQElmt); } } - - NdisReleaseSpinLock(&pAd->CmdQLock); } + NdisReleaseSpinLock(&pAd->CmdQLock); + /* notify the exit routine that we're actually exiting now * * complete()/wait_for_completion() is similar to up()/down(), diff --git a/os/linux/rt_usb_util.c b/os/linux/rt_usb_util.c index 17840d6..4cd6f23 100755 --- a/os/linux/rt_usb_util.c +++ b/os/linux/rt_usb_util.c @@ -43,22 +43,26 @@ void dump_urb(VOID *purb_org) { struct urb *purb = (struct urb *)purb_org; - printk("urb :0x%08lx\n", (unsigned long)purb); - printk("\tdev :0x%08lx\n", (unsigned long)purb->dev); - printk("\t\tdev->state :0x%d\n", purb->dev->state); - printk("\tpipe :0x%08x\n", purb->pipe); - printk("\tstatus :%d\n", purb->status); - printk("\ttransfer_flags :0x%08x\n", purb->transfer_flags); - printk("\ttransfer_buffer :0x%08lx\n", (unsigned long)purb->transfer_buffer); - printk("\ttransfer_buffer_length:%d\n", purb->transfer_buffer_length); - printk("\tactual_length :%d\n", purb->actual_length); - printk("\tsetup_packet :0x%08lx\n", (unsigned long)purb->setup_packet); - printk("\tstart_frame :%d\n", purb->start_frame); - printk("\tnumber_of_packets :%d\n", purb->number_of_packets); - printk("\tinterval :%d\n", purb->interval); - printk("\terror_count :%d\n", purb->error_count); - printk("\tcontext :0x%08lx\n", (unsigned long)purb->context); - printk("\tcomplete :0x%08lx\n\n", (unsigned long)purb->complete); + DBGPRINT(RT_DEBUG_OFF, ("urb :0x%08lx\n", (unsigned long)purb)); + DBGPRINT(RT_DEBUG_OFF, ("\tdev :0x%08lx\n", (unsigned long)purb->dev)); + DBGPRINT(RT_DEBUG_OFF, ("\t\tdev->state :%d\n", purb->dev->state)); + DBGPRINT(RT_DEBUG_OFF, ("\tpipe :0x%08x\n", purb->pipe)); + DBGPRINT(RT_DEBUG_OFF, ("\tstatus :%d\n", purb->status)); + DBGPRINT(RT_DEBUG_OFF, ("\ttransfer_flags :0x%08x\n", purb->transfer_flags)); + DBGPRINT(RT_DEBUG_OFF, ("\ttransfer_buffer :0x%08lx\n", + (unsigned long)purb->transfer_buffer)); + DBGPRINT(RT_DEBUG_OFF, ("\ttransfer_buffer_length:%d\n", purb->transfer_buffer_length)); + DBGPRINT(RT_DEBUG_OFF, ("\tactual_length :%d\n", purb->actual_length)); + DBGPRINT(RT_DEBUG_OFF, ("\tsetup_packet :0x%08lx\n", + (unsigned long)purb->setup_packet)); + DBGPRINT(RT_DEBUG_OFF, ("\tstart_frame :%d\n", purb->start_frame)); + DBGPRINT(RT_DEBUG_OFF, ("\tnumber_of_packets :%d\n", purb->number_of_packets)); + DBGPRINT(RT_DEBUG_OFF, ("\tinterval :%d\n", purb->interval)); + DBGPRINT(RT_DEBUG_OFF, ("\terror_count :%d\n", purb->error_count)); + DBGPRINT(RT_DEBUG_OFF, ("\tcontext :0x%08lx\n", + (unsigned long)purb->context)); + DBGPRINT(RT_DEBUG_OFF, ("\tcomplete :0x%08lx\n\n", + (unsigned long)purb->complete)); } #else void dump_urb(VOID *purb_org) diff --git a/os/linux/sta_ioctl.c b/os/linux/sta_ioctl.c index ab8fbbe..e76f4e9 100755 --- a/os/linux/sta_ioctl.c +++ b/os/linux/sta_ioctl.c @@ -464,7 +464,7 @@ int rt_ioctl_giwrange(struct net_device *dev, #endif /* RT_CFG80211_SUPPORT */ #endif /* NATIVE_WPA_SUPPLICANT_SUPPORT */ - DBGPRINT(RT_DEBUG_TRACE ,("===>rt_ioctl_giwrange\n")); + /*DBGPRINT(RT_DEBUG_TRACE ,("===>rt_ioctl_giwrange\n"));*/ data->length = sizeof(struct iw_range); memset(range, 0, sizeof(struct iw_range)); @@ -497,7 +497,7 @@ int rt_ioctl_giwrange(struct net_device *dev, /* range->num_channels = pAd->ChannelListNum; */ RTMP_STA_IoctlHandle(pAd, NULL, CMD_RTPRIV_IOCTL_CHAN_LIST_NUM_GET, 0, &ChannelListNum, 0, RT_DEV_PRIV_FLAGS_GET(dev)); - range->num_channels = ChannelListNum; + range->num_channels = (UINT16)ChannelListNum; os_alloc_mem(NULL, (UCHAR **)&pChannel, sizeof(UCHAR)*ChannelListNum); if (pChannel == NULL) @@ -530,7 +530,7 @@ int rt_ioctl_giwrange(struct net_device *dev, os_free_mem(NULL, pChannel); os_free_mem(NULL, pFreq); - range->num_frequency = val; + range->num_frequency = (UINT8)val; range->max_qual.qual = 100; /* what is correct max? This was not * documented exactly. At least @@ -841,6 +841,7 @@ int rt_ioctl_iwaplist(struct net_device *dev, RT_CMD_STA_IOCTL_BSS_LIST BssList, *pBssList = &BssList; RT_CMD_STA_IOCTL_BSS *pList; + memset(qual, 0, sizeof(qual)); GET_PAD_FROM_NET_DEV(pAd, dev); /*check if the interface is down */ @@ -882,7 +883,7 @@ int rt_ioctl_iwaplist(struct net_device *dev, memcpy(addr[i].sa_data, pList->Bssid, MAC_ADDR_LEN); set_quality(pAd, &qual[i], pList); /*&pAd->ScanTab.BssEntry[i]); */ } - data->length = i; + data->length = (USHORT)i; memcpy(extra, &addr, i*sizeof(addr[0])); data->flags = 1; /* signal quality present (sort of) */ memcpy(extra + i*sizeof(addr[0]), &qual, i*sizeof(qual[i])); @@ -1534,12 +1535,12 @@ int rt_ioctl_giwscan(struct net_device *dev, #endif /* IWEVGENIE */ } - data->length = current_ev - extra; + data->length = (USHORT)(current_ev - extra); /* pAd->StaCfg.bScanReqIsFromWebUI = FALSE; */ /* DBGPRINT(RT_DEBUG_ERROR ,("===>rt_ioctl_giwscan. %d(%d) BSS returned, data->length = %d\n",i , pAd->ScanTab.BssNr, data->length)); */ RTMP_STA_IoctlHandle(pAd, NULL, CMD_RTPRIV_IOCTL_STA_SCAN_END, 0, - NULL, data->length, RT_DEV_PRIV_FLAGS_GET(dev)); + data, data->length, RT_DEV_PRIV_FLAGS_GET(dev)); go_out: if (pIoctlScan->pBssTable != NULL) @@ -1606,7 +1607,7 @@ int rt_ioctl_siwessid(struct net_device *dev, return 0; #endif /* 0 */ - pIoctlEssid->FlgAnySsid = data->flags; + pIoctlEssid->FlgAnySsid = (UCHAR)data->flags; pIoctlEssid->SsidLen = data->length; pIoctlEssid->pSsid = (CHAR *)essid; pIoctlEssid->Status = 0; @@ -1680,7 +1681,7 @@ int rt_ioctl_giwessid(struct net_device *dev, pIoctlEssid->Status = 0; RTMP_STA_IoctlHandle(pAd, NULL, CMD_RTPRIV_IOCTL_STA_SIOCGIWESSID, 0, pIoctlEssid, 0, RT_DEV_PRIV_FLAGS_GET(dev)); - data->length = pIoctlEssid->SsidLen; + data->length = (USHORT)pIoctlEssid->SsidLen; RT_CMD_STATUS_TRANSLATE(pIoctlEssid->Status); return pIoctlEssid->Status; @@ -1755,7 +1756,7 @@ int rt_ioctl_giwnickn(struct net_device *dev, RTMP_STA_IoctlHandle(pAd, NULL, CMD_RTPRIV_IOCTL_STA_SIOCGIWNICKN, 0, pNickName, 0, RT_DEV_PRIV_FLAGS_GET(dev)); - data->length = pNickName->NameLen; + data->length = (USHORT)pNickName->NameLen; return 0; } @@ -1783,7 +1784,7 @@ int rt_ioctl_siwrts(struct net_device *dev, else if (rts->value == 0) val = MAX_RTS_THRESHOLD; else - val = rts->value; + val = (UINT16)rts->value; /* if (val != pAd->CommonCfg.RtsThreshold) */ /* pAd->CommonCfg.RtsThreshold = val; */ @@ -1854,7 +1855,7 @@ int rt_ioctl_siwfrag(struct net_device *dev, /* pAd->CommonCfg.FragmentThreshold = val; */ RTMP_STA_IoctlHandle(pAd, NULL, CMD_RTPRIV_IOCTL_STA_SIOCSIWFRAG, 0, - NULL, val, RT_DEV_PRIV_FLAGS_GET(dev)); + info, val, RT_DEV_PRIV_FLAGS_GET(dev)); return 0; } @@ -2097,7 +2098,7 @@ rt_ioctl_giwencode(struct net_device *dev, pIoctlSec, 0, RT_DEV_PRIV_FLAGS_GET(dev)); erq->length = pIoctlSec->length; - erq->flags = pIoctlSec->KeyIdx; + erq->flags = (USHORT)pIoctlSec->KeyIdx; if (pIoctlSec->flags & RT_CMD_STA_IOCTL_SECURITY_DISABLED) erq->flags = RT_CMD_STA_IOCTL_SECURITY_DISABLED; { @@ -2162,8 +2163,9 @@ int rt_ioctl_setparam(struct net_device *dev, struct iw_request_info *info, if (!*this_char) return -EINVAL; - - if ((value = rtstrchr(this_char, '=')) != NULL) + + value = rtstrchr(this_char, '='); + if (value) *value++ = 0; /*check if the interface is down */ @@ -2201,8 +2203,11 @@ int rt_ioctl_setparam(struct net_device *dev, struct iw_request_info *info, goto SET_PROC; /* reject setting nothing besides ANY ssid(ssidLen=0) */ - if (!*value && (strcmp(this_char, "SSID") != 0)) - return -EINVAL; + if (value) { + if (!*value && (strcmp(this_char, "SSID") != 0)) + return -EINVAL; + } + } SET_PROC: @@ -2808,7 +2813,7 @@ rt_private_get_statistics(struct net_device *dev, struct iw_request_info *info, RTMP_STA_IoctlHandle(pAd, NULL, CMD_RTPRIV_IOCTL_STA_IW_GET_STATISTICS, 0, extra, IW_PRIV_SIZE_MASK, RT_DEV_PRIV_FLAGS_GET(dev)); - wrq->length = strlen(extra) + 1; /* 1: size of '\0' */ + wrq->length = (USHORT)(strlen(extra) + 1); /* 1: size of '\0' */ DBGPRINT(RT_DEBUG_TRACE, ("<== rt_private_get_statistics, wrq->length = %d\n", wrq->length)); return Status; @@ -2876,7 +2881,7 @@ rt_private_show(struct net_device *dev, struct iw_request_info *info, INT Status = 0; VOID *pAd; /* POS_COOKIE pObj; */ - UINT32 subcmd = wrq->flags; + USHORT subcmd = wrq->flags; RT_CMD_STA_IOCTL_SHOW IoctlShow, *pIoctlShow = &IoctlShow; GET_PAD_FROM_NET_DEV(pAd, dev); @@ -3198,7 +3203,7 @@ int rt_ioctl_siwmlme(struct net_device *dev, /* MLME_QUEUE_ELEM *pMsgElem = NULL; */ /* MLME_DISASSOC_REQ_STRUCT DisAssocReq; */ /* MLME_DEAUTH_REQ_STRUCT DeAuthReq; */ - ULONG Subcmd = 0; + USHORT Subcmd = 0; GET_PAD_FROM_NET_DEV(pAd, dev); @@ -3283,7 +3288,7 @@ int rt_ioctl_siwmlme(struct net_device *dev, } RTMP_STA_IoctlHandle(pAd, NULL, CMD_RTPRIV_IOCTL_STA_SIOCSIWMLME, Subcmd, - NULL, pMlme->reason_code, RT_DEV_PRIV_FLAGS_GET(dev)); + info, pMlme->reason_code, RT_DEV_PRIV_FLAGS_GET(dev)); return 0; } #endif /* SIOCSIWMLME */ @@ -3938,7 +3943,7 @@ rt_ioctl_giwencodeext(struct net_device *dev, return pIoctlSec->Status; } - encoding->flags = pIoctlSec->KeyIdx; + encoding->flags = (USHORT)pIoctlSec->KeyIdx; ext->key_len = pIoctlSec->length; if (pIoctlSec->Alg == RT_CMD_STA_IOCTL_SECURITY_ALG_NONE) @@ -4086,7 +4091,7 @@ int rt_ioctl_giwgenie(struct net_device *dev, RT_DEV_PRIV_FLAGS_GET(dev)) != NDIS_STATUS_SUCCESS) return -E2BIG; - wrqu->data.length = pIoctlRsnIe->length; + wrqu->data.length = (USHORT)pIoctlRsnIe->length; return 0; } @@ -4563,7 +4568,7 @@ static const iw_handler rt_priv_handlers[] = { #ifndef CONFIG_AP_SUPPORT (iw_handler) rt_ioctl_setparam, /* + 0x02 */ #else - (iw_handler) NULL, /* + 0x02 */ + (iw_handler) rt_ioctl_setparam, /* + 0x02 */ #endif /* CONFIG_AP_SUPPORT */ #ifdef DBG (iw_handler) rt_private_ioctl_bbp, /* + 0x03 */ @@ -4606,12 +4611,12 @@ const struct iw_handler_def rt28xx_iw_handler_def = #define N(a) (sizeof (a) / sizeof (a[0])) .standard = (iw_handler *) rt_handler, .num_standard = sizeof(rt_handler) / sizeof(iw_handler), -#ifdef CONFIG_WIRELESS_EXT +#if defined(CONFIG_WEXT_PRIV) || LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 32) .private = (iw_handler *) rt_priv_handlers, .num_private = N(rt_priv_handlers), .private_args = (struct iw_priv_args *) privtab, .num_private_args = N(privtab), -#endif +#endif /* CONFIG_WEXT_PRIV || LINUX_VERSION_CODE <= 2.6.32 */ #if IW_HANDLER_VERSION >= 7 .get_wireless_stats = rt28xx_get_wireless_stats, #endif @@ -4766,7 +4771,8 @@ skip_check: RTMP_STA_IoctlHandle(pAd, NULL, CMD_RTPRIV_IOCTL_STA_SIOCGIWNICKN, 0, pNickName, 0, RT_DEV_PRIV_FLAGS_GET(net_dev)); - erq->length = pNickName->NameLen; /*strlen((RTMP_STRING *) pAd->nickname); */ + /*strlen((RTMP_STRING *) pAd->nickname); */ + erq->length = (USHORT)pNickName->NameLen; Status = copy_to_user(erq->pointer, nickname, erq->length); break; } @@ -4796,8 +4802,10 @@ skip_check: } case SIOCSIWFRAG: /*set fragmentation thr (bytes) */ { - struct iw_param *frag=&wrqin->u.frag; - rt_ioctl_siwfrag(net_dev, NULL, frag, NULL); + struct iw_param *frag = &wrqin->u.frag; + struct iw_request_info info; + + rt_ioctl_siwfrag(net_dev, &info, frag, NULL); break; } case SIOCGIWENCODE: /*get encoding token & mode */ diff --git a/os/linux/usb_main_dev.c b/os/linux/usb_main_dev.c index 4202a01..0e7baef 100755 --- a/os/linux/usb_main_dev.c +++ b/os/linux/usb_main_dev.c @@ -281,7 +281,6 @@ static int rt2870_probe( if (USBDevConfigInit(usb_dev, intf, pAd) == FALSE) goto err_out_free_radev; - RTMP_DRIVER_USB_INIT(pAd, usb_dev, dev_id->driver_info); net_dev = RtmpPhyNetDevInit(pAd, &netDevHook); @@ -323,7 +322,7 @@ static int rt2870_probe( #endif /* RT_CFG80211_SUPPORT */ RTMP_DRIVER_OP_MODE_GET(pAd, &OpMode); - status = RtmpOSNetDevAttach(OpMode, net_dev, &netDevHook); + status = RtmpOSNetDevAttach((UCHAR)OpMode, net_dev, &netDevHook); if (status != 0) goto err_out_free_netdev; @@ -632,7 +631,7 @@ static int rtusb_suspend(struct usb_interface *intf, pm_message_t state) //during the 2nd suspend, cfg80211->ops_suspend() would not be called; //So we need make WOW enable here; //In normal case, wow_enable will be double called, and the 2nd call will not send wow_enable CMD beacause wow_running flag. -#ifdef RESUME_WITH_USB_RESET_SUPPORT +#ifdef MT_WOW_SUPPORT RTMP_DRIVER_ADAPTER_RT28XX_WOW_ENABLE(pAd); #endif @@ -696,6 +695,7 @@ static int rtusb_resume(struct usb_interface *intf) /* pAd->PM_FlgSuspend = 0; */ RTMP_DRIVER_USB_RESUME(pAd); + RTMP_DRIVER_ADAPTER_RT28XX_WOW_DISABLE(pAd); /* net_dev = pAd->net_dev; */ RTMP_DRIVER_NET_DEV_GET(pAd, &net_dev); @@ -722,6 +722,7 @@ static int rtusb_reset_resume(struct usb_interface *intf) /* pAd->PM_FlgSuspend = 0; */ RTMP_DRIVER_USB_RESUME(pAd); + RTMP_DRIVER_ADAPTER_RT28XX_WOW_DISABLE(pAd); /* net_dev = pAd->net_dev; */ RTMP_DRIVER_NET_DEV_GET(pAd, &net_dev); diff --git a/os/threadX/rt_usb.c b/os/threadX/rt_usb.c index 61c8782..9f67c10 100755 --- a/os/threadX/rt_usb.c +++ b/os/threadX/rt_usb.c @@ -314,6 +314,7 @@ INT32 usb_control_msg(DC_USB_DEVICE *pUSBDev, UINT32 endpointaddress, UINT8 bReq NDIS_STATUS Result = NDIS_STATUS_FAILURE; void *pDMAAddr = NULL; void *pSetupDMAAddr = NULL; + /* To store the setup packet */ pUSBHST_SETUP_PACKET pSetup = NULL; diff --git a/rate_ctrl/alg_grp.c b/rate_ctrl/alg_grp.c index d92119b..14bba82 100755 --- a/rate_ctrl/alg_grp.c +++ b/rate_ctrl/alg_grp.c @@ -1547,7 +1547,7 @@ VOID QuickResponeForRateUpExecAdaptMT(/* actually for both up and down */ if (TxTotalCnt != 0) { - Rate1ErrorRatio = 100 - ((Rate1SuccessCnt * 100) / TxTotalCnt); + Rate1ErrorRatio = (UCHAR)(100 - ((Rate1SuccessCnt * 100) / TxTotalCnt)); } else { @@ -1648,9 +1648,9 @@ VOID QuickResponeForRateUpExecAdaptMT(/* actually for both up and down */ && (pAd->CommonCfg.DebugFlags & DBF_FORCE_QUICK_DRS)==0 #endif /* DBG_CTRL_SUPPORT */ ) - ratio = RA_INTERVAL / pAd->ra_fast_interval; + ratio = (UCHAR)(RA_INTERVAL / pAd->ra_fast_interval); else - ratio = (RA_INTERVAL - pAd->ra_fast_interval) / pAd->ra_fast_interval; + ratio = (UCHAR)((RA_INTERVAL - pAd->ra_fast_interval) / pAd->ra_fast_interval); /* if (pAd->MacTab.Size == 1) @@ -1855,7 +1855,7 @@ VOID DynamicTxRateSwitchingAdaptMT(RTMP_ADAPTER *pAd, UINT i) if (TxTotalCnt != 0) { - Rate1ErrorRatio = 100 - ((Rate1SuccessCnt * 100) / TxTotalCnt); + Rate1ErrorRatio = (UCHAR)(100 - ((Rate1SuccessCnt * 100) / TxTotalCnt)); } else { @@ -1919,11 +1919,12 @@ VOID DynamicTxRateSwitchingAdaptMT(RTMP_ADAPTER *pAd, UINT i) /* Handle low traffic case */ - if (TxTotalCnt <= 15) + if (TxTotalCnt <= 15 || BOOL_IS_THERMAL_PROTECTION_SWITCH_TX(pAd)) { pEntry->lowTrafficCount++; if (pEntry->lowTrafficCount >= pAd->CommonCfg.lowTrafficThrd + || BOOL_IS_THERMAL_PROTECTION_SWITCH_TX(pAd) #ifdef DOT11N_DRAFT3 || (pAd->CommonCfg.Bss2040CoexistFlag & BSS_2040_COEXIST_BW_SYNC) #endif /* DOT11N_DRAFT3 */ @@ -1933,7 +1934,15 @@ VOID DynamicTxRateSwitchingAdaptMT(RTMP_ADAPTER *pAd, UINT i) CHAR mcs[24]; CHAR RssiOffset = 0; - pEntry->lowTrafficCount = 0; +#ifdef THERMAL_PROTECT_SUPPORT + if (pAd->switch_tx_stream) { + DBGPRINT(RT_DEBUG_ERROR, ("[%s] tx stream switch\n", __func__)); + pAd->switch_tx_stream = FALSE; + } else +#endif /* THERMAL_PROTECT_SUPPORT */ + { + pEntry->lowTrafficCount = 0; + } /* Check existence and get index of each MCS */ MlmeGetSupportedMcsAdapt(pAd, pEntry, GI_400, mcs); @@ -2246,9 +2255,9 @@ VOID APQuickResponeForRateUpExecAdapt(/* actually for both up and down */ && (pAd->CommonCfg.DebugFlags & DBF_FORCE_QUICK_DRS)==0 #endif /* DBG_CTRL_SUPPORT */ ) - ratio = RA_INTERVAL / pAd->ra_fast_interval; + ratio = (CHAR) (RA_INTERVAL / pAd->ra_fast_interval); else - ratio = (RA_INTERVAL - pAd->ra_fast_interval) / pAd->ra_fast_interval; + ratio = (CHAR)((RA_INTERVAL - pAd->ra_fast_interval) / pAd->ra_fast_interval); if (pAd->MacTab.Size == 1) OneSecTxNoRetryOKRationCount = (TxSuccess * ratio); @@ -2864,9 +2873,9 @@ VOID StaQuickResponeForRateUpExecAdapt( && (pAd->CommonCfg.DebugFlags & DBF_FORCE_QUICK_DRS)==0 #endif /* DBG_CTRL_SUPPORT */ ) - ratio = RA_INTERVAL/pAd->ra_fast_interval; + ratio = (CHAR)(RA_INTERVAL/pAd->ra_fast_interval); else - ratio = (RA_INTERVAL-pAd->ra_fast_interval)/pAd->ra_fast_interval; + ratio = (CHAR)((RA_INTERVAL-pAd->ra_fast_interval)/pAd->ra_fast_interval); OneSecTxNoRetryOKRationCount = (TxSuccess * ratio); @@ -3381,7 +3390,7 @@ INT Set_RateTable_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) while (*arg<'0' || *arg>'9') arg++; value = simple_strtol(arg, &arg, 10); - pRateEntry[rtIndex] = value; + pRateEntry[rtIndex] = (UCHAR)value; DBGPRINT(RT_DEBUG_OFF, ("Set_RateTable_Proc::%d:%d:%d\n", itemNo, rtIndex, value)); } @@ -3398,8 +3407,13 @@ INT Set_PerThrdAdj_Proc( IN RTMP_STRING *arg) { UCHAR i; + long thrd; + int ret; for (i=0; i<MAX_LEN_OF_MAC_TABLE; i++){ - pAd->MacTab.Content[i].perThrdAdj = simple_strtol(arg, 0, 10); + ret = kstrtol(arg, 10, &thrd); + if (ret < 0) + return FALSE; + pAd->MacTab.Content[i].perThrdAdj = (BOOLEAN)thrd; } return TRUE; } @@ -3409,7 +3423,13 @@ INT Set_LowTrafficThrd_Proc( IN PRTMP_ADAPTER pAd, IN RTMP_STRING *arg) { - pAd->CommonCfg.lowTrafficThrd = simple_strtol(arg, 0, 10); + long thrd; + int ret; + + ret = kstrtol(arg, 10, &thrd); + if (ret < 0) + return FALSE; + pAd->CommonCfg.lowTrafficThrd = (USHORT)thrd; return TRUE; } @@ -3419,7 +3439,13 @@ INT Set_TrainUpRule_Proc( IN PRTMP_ADAPTER pAd, IN RTMP_STRING *arg) { - pAd->CommonCfg.TrainUpRule = simple_strtol(arg, 0, 10); + long thrd; + int ret; + + ret = kstrtol(arg, 10, &thrd); + if (ret < 0) + return FALSE; + pAd->CommonCfg.TrainUpRule = (BOOLEAN)thrd; return TRUE; } @@ -3429,7 +3455,13 @@ INT Set_TrainUpRuleRSSI_Proc( IN PRTMP_ADAPTER pAd, IN RTMP_STRING *arg) { - pAd->CommonCfg.TrainUpRuleRSSI = simple_strtol(arg, 0, 10); + long thrd; + int ret; + + ret = kstrtol(arg, 10, &thrd); + if (ret < 0) + return FALSE; + pAd->CommonCfg.TrainUpRuleRSSI = (SHORT)thrd; return TRUE; } @@ -3439,7 +3471,13 @@ INT Set_TrainUpLowThrd_Proc( IN PRTMP_ADAPTER pAd, IN RTMP_STRING *arg) { - pAd->CommonCfg.TrainUpLowThrd = simple_strtol(arg, 0, 10); + long thrd; + int ret; + + ret = kstrtol(arg, 10, &thrd); + if (ret < 0) + return FALSE; + pAd->CommonCfg.TrainUpLowThrd = (USHORT)thrd; return TRUE; } @@ -3449,7 +3487,13 @@ INT Set_TrainUpHighThrd_Proc( IN PRTMP_ADAPTER pAd, IN RTMP_STRING *arg) { - pAd->CommonCfg.TrainUpHighThrd = simple_strtol(arg, 0, 10); + long thrd; + int ret; + + ret = kstrtol(arg, 10, &thrd); + if (ret < 0) + return FALSE; + pAd->CommonCfg.TrainUpHighThrd = (USHORT)thrd; return TRUE; } diff --git a/rate_ctrl/alg_legacy.c b/rate_ctrl/alg_legacy.c index 765f1a3..077c842 100755 --- a/rate_ctrl/alg_legacy.c +++ b/rate_ctrl/alg_legacy.c @@ -855,9 +855,10 @@ VOID APQuickResponeForRateUpExec( && (pAd->CommonCfg.DebugFlags & DBF_FORCE_QUICK_DRS)==0 #endif /* DBG_CTRL_SUPPORT */ ) - ratio = RA_INTERVAL/pAd->ra_fast_interval; + ratio = (CHAR)(RA_INTERVAL/pAd->ra_fast_interval); else - ratio = (RA_INTERVAL-pAd->ra_fast_interval)/pAd->ra_fast_interval; + ratio = (CHAR)((RA_INTERVAL-pAd->ra_fast_interval) / + pAd->ra_fast_interval); /* downgrade TX quality if PER >= Rate-Down threshold */ if (TxErrorRatio >= TrainDown) @@ -1923,9 +1924,10 @@ VOID StaQuickResponeForRateUpExec( && (pAd->CommonCfg.DebugFlags & DBF_FORCE_QUICK_DRS)==0 #endif /* DBG_CTRL_SUPPORT */ ) - ratio = RA_INTERVAL/pAd->ra_fast_interval; + ratio = (CHAR)(RA_INTERVAL/pAd->ra_fast_interval); else - ratio = (RA_INTERVAL-pAd->ra_fast_interval)/pAd->ra_fast_interval; + ratio = (CHAR)((RA_INTERVAL-pAd->ra_fast_interval) / + pAd->ra_fast_interval); OneSecTxNoRetryOKRationCount = (TxSuccess * ratio); diff --git a/rate_ctrl/ra_ctrl.c b/rate_ctrl/ra_ctrl.c index ac81ebf..051d8ec 100755 --- a/rate_ctrl/ra_ctrl.c +++ b/rate_ctrl/ra_ctrl.c @@ -3337,9 +3337,17 @@ VOID RTMPSetSupportMCS( else #endif /* WDS_SUPPORT */ #ifdef APCLI_SUPPORT - if (IS_ENTRY_APCLI(pEntry)) + if (IS_ENTRY_APCLI(pEntry)) { + if (pEntry->func_tb_idx >= ARRAY_SIZE(pAd->ApCfg.ApCliTab)) { + DBGPRINT(RT_DEBUG_ERROR, + ("%s: invalid apcli entry idx %d table sz %zu\n", + __func__, pEntry->func_tb_idx, + ARRAY_SIZE(pAd->ApCfg.ApCliTab))); + return; + } + pDesired_ht_phy = &pAd->ApCfg.ApCliTab[pEntry->func_tb_idx].wdev.DesiredHtPhyInfo; - else + } else { #endif /* APCLI_SUPPORT */ #ifdef MESH_SUPPORT if (IS_ENTRY_MESH(pEntry)) @@ -3347,6 +3355,7 @@ VOID RTMPSetSupportMCS( else #endif /* MESH_SUPPORT */ pDesired_ht_phy = &pAd->ApCfg.MBSSID[pEntry->func_tb_idx].wdev.DesiredHtPhyInfo; + } } #endif /* CONFIG_AP_SUPPORT */ diff --git a/sta/adhoc.c b/sta/adhoc.c index 11fb0ef..2894c34 100755 --- a/sta/adhoc.c +++ b/sta/adhoc.c @@ -366,7 +366,7 @@ VOID Adhoc_checkPeerBeaconLost(RTMP_ADAPTER *pAd) VOID LinkUp_Adhoc(RTMP_ADAPTER *pAd, struct wifi_dev *wdev) { - INT idx; + UINT8 idx; #ifdef MT_MAC if (pAd->chipCap.hif_type == HIF_MT) @@ -433,7 +433,7 @@ VOID LinkUp_Adhoc(RTMP_ADAPTER *pAd, struct wifi_dev *wdev) #ifdef MT_MAC if (pAd->chipCap.hif_type == HIF_MT) { - INT groupWcid = pAd->StaCfg.wdev.tr_tb_idx; + UCHAR groupWcid = pAd->StaCfg.wdev.tr_tb_idx; MT_ADDREMOVE_KEY(pAd, 0, BSS0, wdev->DefaultKeyId, groupWcid, SHAREDKEYTABLE, &pAd->SharedKey[BSS0][wdev->DefaultKeyId],BROADCAST_ADDR); } diff --git a/sta/connect.c b/sta/connect.c index 20a8275..9644566 100755 --- a/sta/connect.c +++ b/sta/connect.c @@ -81,7 +81,8 @@ UCHAR CipherSuiteWpaNoneAesLen = NdisMoveMemory(&(_pAd)->CommonCfg.APQosCapability, &(_pAd)->MlmeAux.APQosCapability, sizeof(QOS_CAPABILITY_PARM));\ NdisMoveMemory(&(_pAd)->CommonCfg.APQbssLoad, &(_pAd)->MlmeAux.APQbssLoad, sizeof(QBSS_LOAD_PARM));\ COPY_MAC_ADDR((_pAd)->MacTab.Content[BSSID_WCID].Addr, (_pAd)->MlmeAux.Bssid); \ - (_pAd)->MacTab.Content[BSSID_WCID].PairwiseKey.CipherAlg = (_pAd)->StaCfg.PairCipher;\ + (_pAd)->MacTab.Content[BSSID_WCID].PairwiseKey.CipherAlg = \ + (UCHAR)(_pAd)->StaCfg.PairCipher;\ COPY_MAC_ADDR((_pAd)->MacTab.Content[BSSID_WCID].PairwiseKey.BssId, (_pAd)->MlmeAux.Bssid);\ (_pAd)->MacTab.Content[BSSID_WCID].RateLen = (_pAd)->StaActive.SupRateLen + (_pAd)->StaActive.ExtRateLen;\ } @@ -471,6 +472,10 @@ VOID CntlOidScanProc( sizeof (BSS_ENTRY)); } } +#ifdef SMART_CARRIER_SENSE_SUPPORT + /*Need to set default gain for SCS when scanning, otherwise, there will be AP lost--->Add by xiaojiao*/ + /*ScsSetDftGainAtScanBegin(pAd);*/ +#endif #if 0 /* clean up previous SCAN result, add current BSS back to table if any */ @@ -489,10 +494,12 @@ VOID CntlOidScanProc( #ifdef WIDI_SUPPORT if (pAd->StaCfg.bWIDI) - ScanParmFill(pAd, &ScanReq, (RTMP_STRING *)Elem->Msg, Elem->MsgLen, BSS_ANY, SCAN_PASSIVE); + ScanParmFill(pAd, &ScanReq, (RTMP_STRING *)Elem->Msg, + (UCHAR)Elem->MsgLen, BSS_ANY, SCAN_PASSIVE); else #endif /* WIDI_SUPPORT */ - ScanParmFill(pAd, &ScanReq, (RTMP_STRING *) Elem->Msg, Elem->MsgLen, BSS_ANY, Elem->Priv); + ScanParmFill(pAd, &ScanReq, (RTMP_STRING *) Elem->Msg, + (UCHAR)Elem->MsgLen, BSS_ANY, (UCHAR)Elem->Priv); MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, sizeof (MLME_SCAN_REQ_STRUCT), &ScanReq, 0); pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_LIST_SCAN; @@ -537,7 +544,7 @@ VOID CntlOidSsidProc( /*save connect info*/ NdisZeroMemory(pAd->StaCfg.ConnectinfoSsid, MAX_LEN_OF_SSID); NdisMoveMemory(pAd->StaCfg.ConnectinfoSsid, pOidSsid->Ssid, pOidSsid->SsidLength); - pAd->StaCfg.ConnectinfoSsidLen = pOidSsid->SsidLength; + pAd->StaCfg.ConnectinfoSsidLen = (UCHAR)pOidSsid->SsidLength; pAd->StaCfg.ConnectinfoBssType = pAd->StaCfg.BssType; #ifdef WSC_STA_SUPPORT @@ -924,7 +931,7 @@ VOID CntlOidRTBssidProc( pAd->StaCfg.bSkipAutoScanConn = FALSE; #endif /* WSC_STA_SUPPORT */ - if (BssIdx == BSS_NOT_FOUND) { + if ((BssIdx == BSS_NOT_FOUND) || (BssIdx >= MAX_LEN_OF_BSS_TABLE)) { if (((pAd->StaCfg.BssType == BSS_INFRA) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS))) || (pAd->StaCfg.bNotFirstScan == FALSE)) { MLME_SCAN_REQ_STRUCT ScanReq; @@ -1860,15 +1867,20 @@ VOID CntlWaitAssocProc( DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Association fails on BSS #%ld\n", pAd->MlmeAux.BssIdx)); #ifdef RT_CFG80211_SUPPORT + pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; RT_CFG80211_CONN_RESULT_INFORM(pAd, pAd->MlmeAux.Bssid, NULL, 0, - NULL, 0, 0); + NULL, 0, 0); #endif /* RT_CFG80211_SUPPORT */ RTMP_STA_ENTRY_MAC_RESET(pAd, BSSID_WCID); pAd->MlmeAux.BssIdx++; #ifdef MT76XX_BTCOEX_SUPPORT MLMEHook(pAd, WLAN_CONNECTION_ASSOC_FAIL, QueryHashID(pAd, pAd->MlmeAux.Bssid, TRUE)); #endif /*MT76XX_BTCOEX_SUPPORT*/ + +#ifndef RT_CFG80211_SUPPORT IterateOnBssTab(pAd); +#endif + } } } @@ -1971,7 +1983,7 @@ VOID AdhocTurnOnQos(RTMP_ADAPTER *pAd) VOID LinkUp_Infra(RTMP_ADAPTER *pAd, struct wifi_dev *wdev, MAC_TABLE_ENTRY *pEntry, UCHAR *tmpWscSsid, UCHAR tmpWscSsidLen) { BOOLEAN Cancelled = TRUE; - INT idx; + UCHAR idx; PSTA_ADMIN_CONFIG pStaCfg = &pAd->StaCfg; #if defined(STA_LP_PHASE_1_SUPPORT) || defined(STA_LP_PHASE_2_SUPPORT) @@ -1979,7 +1991,7 @@ VOID LinkUp_Infra(RTMP_ADAPTER *pAd, struct wifi_dev *wdev, MAC_TABLE_ENTRY *pEn pStaCfg->PwrMgmt.bBeaconLost = FALSE; /* Copy DtimPeriod/BeaconPeriod to wdev */ - pStaCfg->PwrMgmt.ucBeaconPeriod = pAd->MlmeAux.BeaconPeriod; + pStaCfg->PwrMgmt.ucBeaconPeriod = (UINT8)pAd->MlmeAux.BeaconPeriod; pStaCfg->PwrMgmt.ucDtimPeriod = pAd->MlmeAux.DtimPeriod; RTMPClearEnterPsmNullBit(&pAd->StaCfg.PwrMgmt); @@ -2649,8 +2661,14 @@ VOID LinkUp(RTMP_ADAPTER *pAd, UCHAR BssType) #ifdef DOT11_N_SUPPORT DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK UP !!! (Density =%d, )\n", pAd->MacTab.Content[BSSID_WCID].MpduDensity)); + DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK UP !!! (SupportRateMode =%d, )\n", pAd->MacTab.Content[BSSID_WCID].SupportRateMode)); #endif /* DOT11_N_SUPPORT */ + if (pAd->MacTab.Content[BSSID_WCID].SupportRateMode == SUPPORT_CCK_MODE) + pAd->bLink11b = TRUE; + else + pAd->bLink11b = FALSE; + /* We cannot move AsicSetBssid to PeerBeaconAtJoinAction because PeerBeaconAtJoinAction wouldn't be invoked in roaming case. @@ -3489,7 +3507,10 @@ VOID LinkDown(RTMP_ADAPTER *pAd, BOOLEAN IsReqFromAP) pAd->Mlme.PeriodicRound = 0; pAd->Mlme.OneSecPeriodicRound = 0; - pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; + if (pAd->Mlme.CntlMachine.CurrState != CNTL_IDLE) { + RTMP_MLME_RESET_STATE_MACHINE(pAd); + DBGPRINT(RT_DEBUG_TRACE, ("!!! MLME busy, reset MLME state machine !!!\n")); + } #ifdef DOT11_N_SUPPORT NdisZeroMemory(&pAd->MlmeAux.HtCapability, sizeof (HT_CAPABILITY_IE)); diff --git a/sta/rtmp_data.c b/sta/rtmp_data.c index 208a515..a0316dc 100755 --- a/sta/rtmp_data.c +++ b/sta/rtmp_data.c @@ -197,7 +197,7 @@ NDIS_STATUS RTMPFreeTXDRequest( { /*ULONG FreeNumber = 0; */ NDIS_STATUS Status = NDIS_STATUS_FAILURE; - unsigned long IrqFlags; + unsigned long IrqFlags = 0; HT_TX_CONTEXT *pHTTXContext; switch (QueIdx) { @@ -549,7 +549,7 @@ INT STASendPacket_New(RTMP_ADAPTER *pAd, PNDIS_PACKET pPacket) #endif /* DOT11_N_SUPPORT */ else { - NumberOfFrag = (pkt_len / frag_sz) + 1; + NumberOfFrag = (UCHAR)((pkt_len / frag_sz) + 1); /* To get accurate number of fragmentation, Minus 1 if the size just match to allowable fragment size */ if ((pkt_len % frag_sz) == 0) { NumberOfFrag--; @@ -770,6 +770,12 @@ VOID STAFindCipherAlgorithm(RTMP_ADAPTER *pAd, TX_BLK *pTxBlk) KeyIdx = wdev->DefaultKeyId; } + if ((KeyIdx >= 4) && (KeyIdx != 0xff)) { + DBGPRINT(RT_DEBUG_TRACE, + ("%s():KeyIdx must be smaller than 4!\n", __func__)); + return; + } + if (KeyIdx == 0xff) CipherAlg = CIPHER_NONE; #ifdef ADHOC_WPA2PSK_SUPPORT @@ -1091,9 +1097,9 @@ static inline PUCHAR STA_Build_ARalink_Frame_Header(RTMP_ADAPTER *pAd, TX_BLK *p pHeaderBufPtr += pTxBlk->wifi_hdr_len; /* padding at front of LLC header. LLC header should at 4-bytes aligment. */ - pTxBlk->HdrPadLen = (ULONG)pHeaderBufPtr; + pTxBlk->HdrPadLen = (UCHAR)((ULONG)pHeaderBufPtr); pHeaderBufPtr = (UCHAR *)ROUND_UP(pHeaderBufPtr, 4); - pTxBlk->HdrPadLen = (ULONG)(pHeaderBufPtr - pTxBlk->HdrPadLen); + pTxBlk->HdrPadLen = (UCHAR)((ULONG)(pHeaderBufPtr - pTxBlk->HdrPadLen)); /* @@ -1138,9 +1144,9 @@ static inline PUCHAR STA_Build_AMSDU_Frame_Header(RTMP_ADAPTER *pAd, TX_BLK *pTx LLC header should locate at 4-octets aligment @@@ MpduHeaderLen excluding padding @@@ */ - pTxBlk->HdrPadLen = (ULONG)buf_ptr; + pTxBlk->HdrPadLen = (UCHAR)((ULONG)buf_ptr); buf_ptr = (UCHAR *)(ROUND_UP(buf_ptr, 4)); - pTxBlk->HdrPadLen = (ULONG)(buf_ptr - pTxBlk->HdrPadLen); + pTxBlk->HdrPadLen = (UCHAR)((ULONG)(buf_ptr - pTxBlk->HdrPadLen)); return buf_ptr; @@ -1408,9 +1414,9 @@ VOID STA_AMPDU_Frame_Tx(RTMP_ADAPTER *pAd, TX_BLK *pTxBlk) @@@ MpduHeaderLen excluding padding @@@ */ - pTxBlk->HdrPadLen = (ULONG)pHeaderBufPtr; + pTxBlk->HdrPadLen = (UCHAR)((ULONG)pHeaderBufPtr); pHeaderBufPtr = (UCHAR *)ROUND_UP(pHeaderBufPtr, 4); - pTxBlk->HdrPadLen = (ULONG)(pHeaderBufPtr - pTxBlk->HdrPadLen); + pTxBlk->HdrPadLen = (UCHAR)((ULONG)(pHeaderBufPtr - pTxBlk->HdrPadLen)); #ifdef VENDOR_FEATURE1_SUPPORT tr_entry->HdrPadLen = pTxBlk->HdrPadLen; @@ -1553,7 +1559,7 @@ VOID STA_AMSDU_Frame_Tx(RTMP_ADAPTER *pAd, TX_BLK *pTxBlk) USHORT totalMPDUSize = 0; UCHAR padding = 0; USHORT FirstTx = 0, LastTxIdx = 0; - int frameNum = 0; + UCHAR frameNum = 0; PQUEUE_ENTRY pQEntry; ASSERT((pTxBlk->TxPacketList.Number > 1)); @@ -1592,7 +1598,8 @@ VOID STA_AMSDU_Frame_Tx(RTMP_ADAPTER *pAd, TX_BLK *pTxBlk) // TODO: shiang-usw, check this, original code is use pTxBlk->HeaderBuf[0] pHeaderBufPtr = &pTxBlk->HeaderBuf[TXINFO_SIZE]; #endif /* MT7603 */ - padding = ROUND_UP(AMSDU_SUBHEAD_LEN + subFramePayloadLen, 4) - (AMSDU_SUBHEAD_LEN + subFramePayloadLen); + padding = (UCHAR)(ROUND_UP(AMSDU_SUBHEAD_LEN + subFramePayloadLen, 4) + - (AMSDU_SUBHEAD_LEN + subFramePayloadLen)); NdisZeroMemory(pHeaderBufPtr, padding + AMSDU_SUBHEAD_LEN); pHeaderBufPtr += padding; pTxBlk->MpduHeaderLen = padding; @@ -1603,7 +1610,7 @@ VOID STA_AMSDU_Frame_Tx(RTMP_ADAPTER *pAd, TX_BLK *pTxBlk) DA(6)+SA(6)+Length(2) + LLC/SNAP Encap */ subFrameHeader = pHeaderBufPtr; - subFramePayloadLen = pTxBlk->SrcBufLen; + subFramePayloadLen = (USHORT)pTxBlk->SrcBufLen; NdisMoveMemory(subFrameHeader, pTxBlk->pSrcBufHeader, 12); @@ -1618,7 +1625,7 @@ VOID STA_AMSDU_Frame_Tx(RTMP_ADAPTER *pAd, TX_BLK *pTxBlk) /* Insert LLC-SNAP encapsulation - 8 octets */ EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(pTxBlk->pSrcBufData - 2, pTxBlk->pExtraLlcSnapEncap); - subFramePayloadLen = pTxBlk->SrcBufLen; + subFramePayloadLen = (USHORT)pTxBlk->SrcBufLen; if (pTxBlk->pExtraLlcSnapEncap) { NdisMoveMemory(pHeaderBufPtr, pTxBlk->pExtraLlcSnapEncap, 6); @@ -1631,7 +1638,7 @@ VOID STA_AMSDU_Frame_Tx(RTMP_ADAPTER *pAd, TX_BLK *pTxBlk) } /* update subFrame Length field */ - subFrameHeader[12] = (subFramePayloadLen & 0xFF00) >> 8; + subFrameHeader[12] = (UCHAR)((subFramePayloadLen & 0xFF00) >> 8); subFrameHeader[13] = subFramePayloadLen & 0xFF; #if defined(MT7603) || defined(MT7628) @@ -1896,9 +1903,9 @@ VOID STA_Fragment_Frame_Tx(RTMP_ADAPTER *pAd, TX_BLK *pTxBlk) buf_ptr += pTxBlk->wifi_hdr_len; /* The remaining content of MPDU header should locate at 4-octets aligment */ - pTxBlk->HdrPadLen = (ULONG)buf_ptr; + pTxBlk->HdrPadLen = (UCHAR)((ULONG)buf_ptr); buf_ptr = (UCHAR *)ROUND_UP(buf_ptr, 4); - pTxBlk->HdrPadLen = (ULONG)(buf_ptr - pTxBlk->HdrPadLen); + pTxBlk->HdrPadLen = (UCHAR)((ULONG)(buf_ptr - pTxBlk->HdrPadLen)); pTxBlk->MpduHeaderLen = pTxBlk->wifi_hdr_len; #ifdef SOFT_ENCRYPT @@ -2011,9 +2018,9 @@ VOID STA_Fragment_Frame_Tx(RTMP_ADAPTER *pAd, TX_BLK *pTxBlk) pTransmit = pTxBlk->pTransmit; /* Decide the TX rate */ if (pTransmit->field.MODE == MODE_CCK) - pTxBlk->TxRate = pTransmit->field.MCS; + pTxBlk->TxRate = (UCHAR)pTransmit->field.MCS; else if (pTransmit->field.MODE == MODE_OFDM) - pTxBlk->TxRate = pTransmit->field.MCS + RATE_FIRST_OFDM_RATE; + pTxBlk->TxRate = (UCHAR)(pTransmit->field.MCS + RATE_FIRST_OFDM_RATE); else pTxBlk->TxRate = RATE_6_5; @@ -2187,7 +2194,7 @@ VOID STA_ARalink_Frame_Tx(RTMP_ADAPTER *pAd, TX_BLK * pTxBlk) USHORT freeCnt = 0; USHORT totalMPDUSize = 0; USHORT FirstTx, LastTxIdx; - int frameNum = 0; + UCHAR frameNum = 0; BOOLEAN bVLANPkt; PQUEUE_ENTRY pQEntry; @@ -2651,7 +2658,7 @@ INT STASendPacket(RTMP_ADAPTER *pAd, PNDIS_PACKET pPacket) UCHAR QueIdx; UCHAR UserPriority; UCHAR Wcid; - unsigned long IrqFlags; + unsigned long IrqFlags = 0; #ifdef MESH_SUPPORT BOOLEAN bMeshPkt = FALSE; #endif /* MESH_SUPPORT */ @@ -2855,7 +2862,7 @@ DBGPRINT(RT_DEBUG_OFF, ("%s(): pMacEntry->wcid=%d\n", __FUNCTION__, pMacEntry->w AllowFragSize = (pAd->CommonCfg.FragmentThreshold) - LENGTH_802_11 - LENGTH_CRC; Size = PacketInfo.TotalPacketLength - LENGTH_802_3 + LENGTH_802_1_H; - NumberOfFrag = (Size / AllowFragSize) + 1; + NumberOfFrag = (UCHAR)((Size / AllowFragSize) + 1); /* To get accurate number of fragmentation, Minus 1 if the size just match to allowable fragment size */ if ((Size % AllowFragSize) == 0) { NumberOfFrag--; diff --git a/sta/sanity.c b/sta/sanity.c index 8945243..d60aa4d 100755 --- a/sta/sanity.c +++ b/sta/sanity.c @@ -433,8 +433,9 @@ BOOLEAN GetTimBit( if ((Aid < (N1 << 3)) || (Aid >= ((N2 + 1) << 3))) *MessageToMe = FALSE; else { - MyByte = (Aid >> 3) - N1; /* my byte position in the bitmap byte-stream */ - MyBit = Aid % 16 - ((MyByte & 0x01) ? 8 : 0); + /* my byte position in the bitmap byte-stream */ + MyByte = (UCHAR)((Aid >> 3) - N1); + MyBit = (UCHAR)(Aid % 16 - ((MyByte & 0x01) ? 8 : 0)); IdxPtr += (MyByte + 1); diff --git a/sta/sta_cfg.c b/sta/sta_cfg.c index d0e536d..12c83fd 100755 --- a/sta/sta_cfg.c +++ b/sta/sta_cfg.c @@ -174,7 +174,7 @@ INT mcu_read(RTMP_ADAPTER *pAd, RTMP_STRING *arg) testaddr = simple_strtol(arg, 0, 16); RTMP_MCU_IO_READ32(pAd, testaddr, &mac_val); - printk ("mcu_read [0x%08x]=0x%08x\n", testaddr, mac_val); + DBGPRINT(RT_DEBUG_OFF, ("mcu_read [0x%08x]=0x%08x\n", testaddr, mac_val)); return TRUE; } @@ -183,7 +183,7 @@ INT mcu_read(RTMP_ADAPTER *pAd, RTMP_STRING *arg) INT mcu_write(RTMP_ADAPTER *pAd, RTMP_STRING *arg) { UINT32 testdata = simple_strtol(arg, 0, 16); - printk ("mcu_write addr[0x%08x]=0x%08x\n", testaddr, testdata); + DBGPRINT(RT_DEBUG_OFF, ("mcu_write addr[0x%08x]=0x%08x\n", testaddr, testdata)); RTMP_MCU_IO_WRITE32(pAd, testaddr, testdata); return TRUE; @@ -193,7 +193,7 @@ INT Set_STA_RadioOn_Proc( IN PRTMP_ADAPTER pAd, IN RTMP_STRING *arg) { - UCHAR radio; + UINT32 radio; radio = simple_strtol(arg, 0, 10); @@ -672,7 +672,8 @@ static struct { {"wow_hold", Set_WOW_Hold}, {"wow_inband", Set_WOW_InBand}, {"wow_interface", Set_WOW_Interface}, - {"wow_GPIOHighLow", Set_WOW_GPIOHighLow}, + {"wow_GPIOHighLow", Set_WOW_GPIOHighLow}, + {"wow_keepalive", Set_WOW_KeepAlive_Proc}, #endif /*#ifdef MT_WOW_SUPPORT*/ #ifdef RTMP_MAC_USB @@ -763,6 +764,17 @@ static struct { {"MT7603LEDEnhance", Set_MT7603LED_Enhance_Proc}, {"MT7603LEDBehavior", Set_MT7603LED_Behavor_Proc}, #endif /* LED_CONTROL_SUPPORT */ +#ifdef SMART_CARRIER_SENSE_SUPPORT + {"SCSEnable", SetSCSEnable_Proc}, + {"SCSDbgLogEnable", SetSCSDbgLogEnable_Proc}, + {"SCSCfg", SetSCSCfg_Proc}, + {"SCSInfo", ShowSCSInfo}, +#endif /* SMART_CARRIER_SENSE_SUPPORT */ + + /* GPIO */ + {"gpio_high", Set_GPIOHigh_Proc}, + {"gpio_low", Set_GPIOLow_Proc}, + {"ed_chk", Set_ed_chk_proc}, {NULL,} }; @@ -925,8 +937,15 @@ INT Set_SSID_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) INT Set_WmmCapable_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) { BOOLEAN bWmmCapable; + LONG Value = 0; + INT ret = TRUE; + + ret = kstrtol(arg, 10, &Value); + + if (ret < 0) + return FALSE; - bWmmCapable = simple_strtol(arg, 0, 10); + bWmmCapable = (BOOLEAN)Value; if ((bWmmCapable == 1) #ifdef RTMP_MAC_USB @@ -1267,7 +1286,7 @@ INT Set_EncrypType_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) else return FALSE; - if (pAd->StaCfg.BssType == BSS_ADHOC) + if (pAd->StaCfg.BssType == BSS_ADHOC) { /* Build all corresponding channel information */ RTMPSetPhyMode(pAd, pAd->CommonCfg.cfg_wmode); @@ -1341,7 +1360,7 @@ INT Set_Wep_Key_Proc( switch (KeyLen) { case 5: /* wep 40 Ascii type */ - pAdapter->SharedKey[BSS0][KeyId].KeyLen = KeyLen; + pAdapter->SharedKey[BSS0][KeyId].KeyLen = (UCHAR)KeyLen; memcpy(pAdapter->SharedKey[BSS0][KeyId].Key, Key, KeyLen); CipherAlg = CIPHER_WEP64; break; @@ -1352,13 +1371,13 @@ INT Set_Wep_Key_Proc( if( !isxdigit(*(Key+i)) ) return FALSE; /*Not Hex value; */ } - pAdapter->SharedKey[BSS0][KeyId].KeyLen = KeyLen / 2 ; + pAdapter->SharedKey[BSS0][KeyId].KeyLen = (UCHAR)(KeyLen / 2); AtoH(Key, pAdapter->SharedKey[BSS0][KeyId].Key, KeyLen / 2); CipherAlg = CIPHER_WEP64; break; case 13: /* wep 104 Ascii type */ - pAdapter->SharedKey[BSS0][KeyId].KeyLen = KeyLen; + pAdapter->SharedKey[BSS0][KeyId].KeyLen = (UCHAR)KeyLen; memcpy(pAdapter->SharedKey[BSS0][KeyId].Key, Key, KeyLen); CipherAlg = CIPHER_WEP128; break; @@ -1369,7 +1388,7 @@ INT Set_Wep_Key_Proc( if( !isxdigit(*(Key+i)) ) return FALSE; /*Not Hex value; */ } - pAdapter->SharedKey[BSS0][KeyId].KeyLen = KeyLen / 2 ; + pAdapter->SharedKey[BSS0][KeyId].KeyLen = (UCHAR)(KeyLen / 2); AtoH(Key, pAdapter->SharedKey[BSS0][KeyId].Key, KeyLen / 2); CipherAlg = CIPHER_WEP128; break; @@ -1388,7 +1407,7 @@ INT Set_Wep_Key_Proc( { AsicAddSharedKeyEntry(pAdapter, 0, - KeyId, + (UCHAR)KeyId, &pAdapter->SharedKey[BSS0][KeyId]); #ifdef MT_MAC SetWepKeyForMT(pAdapter, KeyId); @@ -1408,14 +1427,14 @@ INT Set_Wep_Key_Proc( */ INT Set_Key1_Proc(RTMP_ADAPTER *pAdapter, RTMP_STRING *arg) { - int KeyLen; + UCHAR KeyLen; int i; UCHAR CipherAlg=CIPHER_WEP64; if (pAdapter->StaCfg.wdev.AuthMode >= Ndis802_11AuthModeWPA) return TRUE; /* do nothing */ - KeyLen = strlen(arg); + KeyLen = (UCHAR)strlen(arg); switch (KeyLen) { @@ -1488,14 +1507,14 @@ INT Set_Key1_Proc(RTMP_ADAPTER *pAdapter, RTMP_STRING *arg) */ INT Set_Key2_Proc(RTMP_ADAPTER *pAdapter, RTMP_STRING *arg) { - int KeyLen; + UCHAR KeyLen; int i; UCHAR CipherAlg=CIPHER_WEP64; if (pAdapter->StaCfg.wdev.AuthMode >= Ndis802_11AuthModeWPA) return TRUE; /* do nothing */ - KeyLen = strlen(arg); + KeyLen = (UCHAR)strlen(arg); switch (KeyLen) { @@ -1566,14 +1585,14 @@ INT Set_Key2_Proc(RTMP_ADAPTER *pAdapter, RTMP_STRING *arg) */ INT Set_Key3_Proc(RTMP_ADAPTER *pAdapter, RTMP_STRING *arg) { - int KeyLen; + UCHAR KeyLen; int i; UCHAR CipherAlg=CIPHER_WEP64; if (pAdapter->StaCfg.wdev.AuthMode >= Ndis802_11AuthModeWPA) return TRUE; /* do nothing */ - KeyLen = strlen(arg); + KeyLen = (UCHAR)strlen(arg); switch (KeyLen) { @@ -1644,14 +1663,14 @@ INT Set_Key3_Proc(RTMP_ADAPTER *pAdapter, RTMP_STRING *arg) */ INT Set_Key4_Proc(RTMP_ADAPTER *pAdapter, RTMP_STRING *arg) { - int KeyLen; + UCHAR KeyLen; int i; UCHAR CipherAlg=CIPHER_WEP64; if (pAdapter->StaCfg.wdev.AuthMode >= Ndis802_11AuthModeWPA) return TRUE; /* do nothing */ - KeyLen = strlen(arg); + KeyLen = (UCHAR)strlen(arg); switch (KeyLen) { @@ -3144,11 +3163,11 @@ VOID RTMPAddKey(RTMP_ADAPTER *pAd, PNDIS_802_11_KEY pKey) /* update WCID attribute table and IVEIV table for this entry */ RTMPSetWcidSecurityInfo(pAd, - BSS0, - KeyIdx, - pEntry->PairwiseKey.CipherAlg, - pEntry->wcid, - PAIRWISEKEYTABLE); + BSS0, + (UINT8)KeyIdx, + pEntry->PairwiseKey.CipherAlg, + pEntry->wcid, + PAIRWISEKEYTABLE); } } else @@ -3170,7 +3189,8 @@ VOID RTMPAddKey(RTMP_ADAPTER *pAd, PNDIS_802_11_KEY pKey) Key = pAd->SharedKey[BSS0][KeyIdx].Key; /* Set Group key material to Asic */ - AsicAddSharedKeyEntry(pAd, BSS0, KeyIdx, &pAd->SharedKey[BSS0][KeyIdx]); + AsicAddSharedKeyEntry(pAd, BSS0, + (UCHAR)KeyIdx, &pAd->SharedKey[BSS0][KeyIdx]); #if 0 /* STA doesn't need to set WCID attribute for group key */ @@ -3318,7 +3338,7 @@ VOID StaSiteSurvey( INT32 cli_idx = 0; for (cli_idx=0; cli_idx < MAX_APCLI_NUM; cli_idx++) { - if (pAd && pAd->ApCfg.ApCliTab[cli_idx].CtrlCurrState == APCLI_CTRL_CONNECTED) + if (pAd->ApCfg.ApCliTab[cli_idx].CtrlCurrState == APCLI_CTRL_CONNECTED) { pAd->StaCfg.bImprovedScan = TRUE; pAd->StaCfg.ScanChannelCnt = 0; /* reset channel counter to 0 */ @@ -3577,8 +3597,59 @@ INT Set_WOW_GPIOHighLow(RTMP_ADAPTER *pAd, RTMP_STRING *arg) return TRUE; } + +/* set WOW keep alive null frame period */ +INT Set_WOW_KeepAlive_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) +{ + ULONG Value = simple_strtol(arg, 0, 10); + + DBGPRINT(RT_DEBUG_OFF, ("keep alive enter: arg=%s\n", arg)); + + /* if 0: NOT to configure. non-0: set value 1~15 */ + pAd->WOW_Cfg.nKeepAlivePeriod = ((UINT8)Value) & 0xf; + + DBGPRINT(RT_DEBUG_OFF, ("keep alive period = %d\n", pAd->WOW_Cfg.nKeepAlivePeriod)); + + return TRUE; +} #endif /*#ifdef MT_WOW_SUPPORT*/ +INT Set_GPIOHigh_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) +{ + LONG input = 0; + + int bEnable = kstrtol(arg, 10, &input); + + if (bEnable < 0) + return FALSE; + + if (input > GPIO16) + return FALSE; + + GPIODirectionOuput(pAd, (UINT32)input, OUTPUT_HIGH); + + DBGPRINT(RT_DEBUG_TRACE, ("[%s] gpio=%lu\n", __func__, input)); + return TRUE; +} + +INT Set_GPIOLow_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg) +{ + LONG input = 0; + + int bEnable = kstrtol(arg, 10, &input); + + if (bEnable < 0) + return FALSE; + + if (input > GPIO16) + return FALSE; + + GPIODirectionOuput(pAd, (UINT32)input, OUTPUT_LOW); + + DBGPRINT(RT_DEBUG_TRACE, ("[%s] gpio=%lu\n", __func__, input)); + return TRUE; +} + #ifdef RTMP_MAC_USB /* Sets the FW into WOW Suspend mode */ INT Set_UsbSuspend(RTMP_ADAPTER *pAd, RTMP_STRING *arg) @@ -3819,7 +3890,9 @@ INT RTMPSetInformation( NdisMoveMemory(pAd->StaCfg.WpaPassPhrase, &ppassphrase->KeyMaterial, ppassphrase->KeyLength); pAd->StaCfg.WpaPassPhraseLen = ppassphrase->KeyLength; hex_dump("pAd->StaCfg.WpaPassPhrase", pAd->StaCfg.WpaPassPhrase, 64); - printk("WpaPassPhrase=%s\n",pAd->StaCfg.WpaPassPhrase); + DBGPRINT(RT_DEBUG_OFF, + ("WpaPassPhrase=%s\n", + pAd->StaCfg.WpaPassPhrase)); } } } @@ -3904,7 +3977,7 @@ INT RTMPSetInformation( Status = copy_from_user(&PhyMode, wrq->u.data.pointer, wrq->u.data.length); if (PhyMode <= MaxPhyMode) { - pAd->CommonCfg.cfg_wmode = PhyMode; + pAd->CommonCfg.cfg_wmode = (UCHAR)PhyMode; RTMPSetPhyMode(pAd, PhyMode); } DBGPRINT(RT_DEBUG_TRACE, ("Set::RT_OID_802_11_PHY_MODE (=%d)\n", PhyMode)); @@ -3916,7 +3989,7 @@ INT RTMPSetInformation( else { Status = copy_from_user(&StaConfig, wrq->u.data.pointer, wrq->u.data.length); - pAd->CommonCfg.bEnableTxBurst = StaConfig.EnableTxBurst; + pAd->CommonCfg.bEnableTxBurst = (BOOLEAN)StaConfig.EnableTxBurst; pAd->CommonCfg.UseBGProtection = StaConfig.UseBGProtection; pAd->CommonCfg.bUseShortSlotTime = 1; /* 2003-10-30 always SHORT SLOT capable */ if ((pAd->CommonCfg.PhyMode != StaConfig.AdhocMode) && @@ -4790,7 +4863,8 @@ INT RTMPSetInformation( NdisMoveMemory(pAd->StaCfg.wpa_supplicant_info.DesireSharedKey[KeyIdx].Key, &pWepKey->KeyMaterial, pWepKey->KeyLength); - pAd->StaCfg.wpa_supplicant_info.DesireSharedKeyId = KeyIdx; + pAd->StaCfg.wpa_supplicant_info.DesireSharedKeyId = + (UCHAR)KeyIdx; pAd->StaCfg.wpa_supplicant_info.DesireSharedKey[KeyIdx].CipherAlg = CipherAlg; #endif /* WPA_SUPPLICANT_SUPPORT */ wdev->DefaultKeyId = (UCHAR) KeyIdx; @@ -4803,7 +4877,9 @@ INT RTMPSetInformation( Key = pWepKey->KeyMaterial; /* Set Group key material to Asic */ - AsicAddSharedKeyEntry(pAd, BSS0, KeyIdx, &pAd->SharedKey[BSS0][KeyIdx]); + AsicAddSharedKeyEntry(pAd, BSS0, + (UCHAR)KeyIdx, + &pAd->SharedKey[BSS0][KeyIdx]); #if 0 /* STA doesn't need to set WCID attribute for group key */ @@ -4818,7 +4894,9 @@ INT RTMPSetInformation( Key = pAd->SharedKey[BSS0][KeyIdx].Key; /* Set key material and cipherAlg to Asic */ - AsicAddSharedKeyEntry(pAd, BSS0, KeyIdx, &pAd->SharedKey[BSS0][KeyIdx]); + AsicAddSharedKeyEntry(pAd, BSS0, + (UCHAR)KeyIdx, + &pAd->SharedKey[BSS0][KeyIdx]); if (pWepKey->KeyIndex & 0x80000000) { @@ -4829,11 +4907,11 @@ INT RTMPSetInformation( #endif /* Assign pairwise key info */ RTMPSetWcidSecurityInfo(pAd, - BSS0, - KeyIdx, - CipherAlg, - BSSID_WCID, - SHAREDKEYTABLE); + BSS0, + (UINT8)KeyIdx, + CipherAlg, + BSSID_WCID, + SHAREDKEYTABLE); } } DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_ADD_WEP (id=0x%x, Len=%d-byte), Port %s Secured\n", @@ -6659,7 +6737,7 @@ ACM_BANDWIDTH_INFO BwInfo, *pInfo; DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_WEP_STATUS(=%d)\n", WepStatus)); break; case OID_802_11_TX_POWER_LEVEL: - wrq->u.data.length = sizeof(ULONG); + wrq->u.data.length = sizeof(UCHAR); Status = copy_to_user(wrq->u.data.pointer, &pAd->CommonCfg.TxPower, wrq->u.data.length); DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_TX_POWER_LEVEL %x\n",pAd->CommonCfg.TxPower)); break; @@ -6782,7 +6860,7 @@ ACM_BANDWIDTH_INFO BwInfo, *pInfo; apsd,pAd->StaCfg.wdev.UapsdInfo.bAPSDCapable,pAd->CommonCfg.bAPSDAC_BE,pAd->CommonCfg.bAPSDAC_BK,pAd->CommonCfg.bAPSDAC_VI,pAd->CommonCfg.bAPSDAC_VO,pAd->CommonCfg.MaxSPLength)); break; case RT_OID_802_11_QUERY_APSD_PSM: - wrq->u.data.length = sizeof(ULONG); + wrq->u.data.length = sizeof(BOOLEAN); Status = copy_to_user(wrq->u.data.pointer, &pAd->CommonCfg.bAPSDForcePowerSave, wrq->u.data.length); DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_QUERY_APSD_PSM (=%d)\n", pAd->CommonCfg.bAPSDForcePowerSave)); break; @@ -7359,7 +7437,7 @@ ACM_BANDWIDTH_INFO BwInfo, *pInfo; pUICli = &pUI_table->Client[i]; NdisMoveMemory(pUICli, pPAdCli, sizeof(RT_P2P_CLIENT_ENTRY)); } - printk("Query::OID_802_11_P2P_SCAN_LIST\n"); + DBGPRINT(RT_DEBUG_OFF, ("Query::OID_802_11_P2P_SCAN_LIST\n")); Status = copy_to_user(wrq->u.data.pointer, pUI_table, sizeof(RT_P2P_UI_TABLE)); DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_P2P_SCAN_LIST (Len=%d, Rule=%s)\n", sizeof(char),pAd->P2pCfg.GroupOpChannel)); os_free_mem(NULL, pUI_table); @@ -7993,16 +8071,20 @@ ACM_BANDWIDTH_INFO BwInfo, *pInfo; Status = copy_from_user(pBuf, wrq->u.data.pointer, wrq->u.data.length); Info = (struct bbp32_info *)pBuf; - printk("Info->bbp_start = %x\n", Info->bbp_start); - printk("Info->bbp_end = %x\n", Info->bbp_end); + DBGPRINT(RT_DEBUG_OFF, + ("Info->bbp_start = %x\n", + Info->bbp_start)); + DBGPRINT(RT_DEBUG_OFF, ("Info->bbp_end = %x\n", Info->bbp_end)); for (Index = Info->bbp_start; Index <= Info->bbp_end; Index += 4) { UINT32 Value; RTMP_IO_READ32(pAd, Index + pAd->chipCap.BBPMemMapOffset, &Value); - printk("Offset = %x\n", Index + pAd->chipCap.BBPMemMapOffset); - printk("Value = %x\n", Value); + DBGPRINT(RT_DEBUG_OFF, + ("Offset = %x\n", + Index + pAd->chipCap.BBPMemMapOffset)); + DBGPRINT(RT_DEBUG_OFF, ("Value = %x\n", Value)); NdisMoveMemory(Info->bbp_value + j, &Value, 4); j++; } @@ -8114,9 +8196,13 @@ ACM_BANDWIDTH_INFO BwInfo, *pInfo; Status = copy_from_user(pBuf, wrq->u.data.pointer, wrq->u.data.length); Info = (struct mem_map_info *)pBuf; - printk("Info->base = %x\n", Info->base); - printk("Info->mem_map_start = %x\n", Info->mem_map_start); - printk("Info->mem_map_end = %x\n", Info->mem_map_end); + DBGPRINT(RT_DEBUG_OFF, ("Info->base = %x\n", Info->base)); + DBGPRINT(RT_DEBUG_OFF, + ("Info->mem_map_start = %x\n", + Info->mem_map_start)); + DBGPRINT(RT_DEBUG_OFF, + ("Info->mem_map_end = %x\n", + Info->mem_map_end)); for (Index = Info->mem_map_start; Index <= Info->mem_map_end; Index += 4) @@ -8150,8 +8236,12 @@ ACM_BANDWIDTH_INFO BwInfo, *pInfo; Status = copy_from_user(pBuf, wrq->u.data.pointer, wrq->u.data.length); Info = (struct e2p_info *)pBuf; - printk("Info->e2p_start = %x\n", Info->e2p_start); - printk("Info->e2p_end = %x\n", Info->e2p_end); + DBGPRINT(RT_DEBUG_OFF, + ("Info->e2p_start = %x\n", + Info->e2p_start)); + DBGPRINT(RT_DEBUG_OFF, + ("Info->e2p_end = %x\n", + Info->e2p_end)); for (Index = Info->e2p_start; Index <= Info->e2p_end; Index += 2) @@ -8185,16 +8275,19 @@ ACM_BANDWIDTH_INFO BwInfo, *pInfo; Status = copy_from_user(pBuf, wrq->u.data.pointer, wrq->u.data.length); Info = (struct mac_info *)pBuf; - printk("Info->mac_start = %x\n", Info->mac_start); - printk("Info->mac_end = %x\n", Info->mac_end); + DBGPRINT(RT_DEBUG_OFF, + ("Info->mac_start = %x\n", + Info->mac_start)); + DBGPRINT(RT_DEBUG_OFF, ("Info->mac_end = %x\n", Info->mac_end)); for (Index = Info->mac_start; Index <= Info->mac_end; Index += 4) { UINT32 Value; RTMP_IO_READ32(pAd, Index + pAd->chipCap.MacMemMapOffset, &Value); - printk("Offset = %x\n", Index + pAd->chipCap.MacMemMapOffset); - printk("Value = %x\n", Value); + DBGPRINT(RT_DEBUG_OFF, ("Offset = %x\n", + Index + pAd->chipCap.MacMemMapOffset)); + DBGPRINT(RT_DEBUG_OFF, ("Value = %x\n", Value)); NdisMoveMemory(Info->mac_value + j, &Value, 4); j++; } @@ -8601,7 +8694,7 @@ next: /* write data to file */ file_w->f_op->write(file_w, msg, strlen(msg), &file_w->f_pos); - printk("%s", msg); + DBGPRINT(RT_DEBUG_OFF, ("%s", msg)); eepAddr += 2; } sprintf(msg, "\nDump all EEPROM values to %s\n", fileName); @@ -8619,7 +8712,7 @@ next: #endif /* RELEASE_EXCLUDE */ /* Copy the information into the user buffer */ - wrq->u.data.length = strlen(msg); + wrq->u.data.length = (UINT16)strlen(msg); Status = copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length); LabelOK: @@ -8915,19 +9008,21 @@ VOID RTMPAPIoctlRF_mt7603(RTMP_ADAPTER *pAd, RTMP_IOCTL_INPUT_STRUCT *wrq) if (bIsPrintAllRF) { RTMPZeroMemory(msg, memLen); - sprintf(msg, "WF0 : \n"); + snprintf(msg, memLen, "WF0 :\n"); for (offset = 0; offset < 0x1000; offset+=4) { CmdRFRegAccessRead(pAd, (UINT32)0, (UINT32)offset, (UINT32 *)®RF); - sprintf(msg+strlen(msg), "0x%08X = 0x%08X\n", offset, regRF); + snprintf(msg+strlen(msg), memLen-strlen(msg), + "0x%08X = 0x%08X\n", offset, regRF); } - sprintf(msg+strlen(msg), "\n"); - sprintf(msg+strlen(msg), "WF1 : \n"); + snprintf(msg+strlen(msg), memLen-strlen(msg), "\n"); + snprintf(msg+strlen(msg), memLen-strlen(msg), "WF1 :\n"); for (offset = 0; offset < 0x1000; offset+=4) { CmdRFRegAccessRead(pAd, (UINT32)1, (UINT32)offset, (UINT32 *)®RF); - sprintf(msg+strlen(msg), "0x%08X = 0x%08X\n", offset, regRF); + snprintf(msg+strlen(msg), memLen-strlen(msg), + "0x%08X = 0x%08X\n", offset, regRF); } RtmpDrvAllRFPrint(NULL, msg, strlen(msg)); @@ -8935,7 +9030,7 @@ VOID RTMPAPIoctlRF_mt7603(RTMP_ADAPTER *pAd, RTMP_IOCTL_INPUT_STRUCT *wrq) DBGPRINT(RT_DEBUG_TRACE, ("strlen(msg)=%d\n", (UINT32)strlen(msg))); /* Copy the information into the user buffer */ #ifdef LINUX - wrq->u.data.length = strlen("Dump to RFDump.txt"); + wrq->u.data.length = (UINT16)strlen("Dump to RFDump.txt"); if (copy_to_user(wrq->u.data.pointer, "Dump to RFDump.txt", wrq->u.data.length)) { DBGPRINT(RT_DEBUG_TRACE, ("%s: copy_to_user() fail\n", __FUNCTION__)); @@ -9849,42 +9944,40 @@ VOID RTMPIoctlShow( } else { - if (pAd->IndicateMediaState == NdisMediaStateConnected) - { - if (INFRA_ON(pAd)) - { - snprintf(extra, size, "Connected(AP: %s[%02X:%02X:%02X:%02X:%02X:%02X])\n", - pAd->CommonCfg.Ssid, - pAd->CommonCfg.Bssid[0], - pAd->CommonCfg.Bssid[1], - pAd->CommonCfg.Bssid[2], - pAd->CommonCfg.Bssid[3], - pAd->CommonCfg.Bssid[4], - pAd->CommonCfg.Bssid[5]); - DBGPRINT(RT_DEBUG_TRACE ,("Ssid=%s ,Ssidlen = %d\n",pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen)); - } - else if (ADHOC_ON(pAd)) - snprintf(extra, size, "Connected\n"); - } - else - { - snprintf(extra, size, "Disconnected\n"); - DBGPRINT(RT_DEBUG_TRACE ,("ConnStatus is not connected\n")); - } + if (INFRA_ON(pAd)) { + snprintf(extra, size, + "Connected(AP: %s[%02X:%02X:%02X:%02X:%02X:%02X])\n", + pAd->CommonCfg.Ssid, + pAd->CommonCfg.Bssid[0], + pAd->CommonCfg.Bssid[1], + pAd->CommonCfg.Bssid[2], + pAd->CommonCfg.Bssid[3], + pAd->CommonCfg.Bssid[4], + pAd->CommonCfg.Bssid[5]); + DBGPRINT(RT_DEBUG_TRACE, + ("Ssid=%s ,Ssidlen = %d\n", + pAd->CommonCfg.Ssid, + pAd->CommonCfg.SsidLen)); + } else if (ADHOC_ON(pAd)) { + snprintf(extra, size, "Connected\n"); + } else { + snprintf(extra, size, "Disconnected\n"); + DBGPRINT(RT_DEBUG_TRACE, ("ConnStatus is not connected\n")); + } } - wrq->u.data.length = strlen(extra) + 1; /* 1: size of '\0' */ + wrq->u.data.length = (UINT16)(strlen(extra) + 1); /* 1: size of '\0' */ break; case SHOW_DRVIER_VERION: - //snprintf(extra, size, "Driver version-%s, %s %s\n", STA_DRIVER_VERSION, __DATE__, __TIME__ ); + snprintf(extra, size, "Driver version-%s\n", STA_DRIVER_VERSION); #ifdef MESH_SUPPORT sprintf(extra+strlen(extra), "Support MESH \n"); #endif /* MESH_SUPPORT */ - wrq->u.data.length = strlen(extra) + 1; /* 1: size of '\0' */ + wrq->u.data.length = (UINT16)(strlen(extra) + 1); /* 1: size of '\0' */ break; #ifdef DOT11_N_SUPPORT case SHOW_BA_INFO: getBaInfo(pAd, extra, size); - wrq->u.data.length = strlen(extra) + 1; /* 1: size of '\0' */ + wrq->u.data.length = (UINT16)(strlen(extra) + 1); /* 1: size of '\0' */ break; #endif /* DOT11_N_SUPPORT */ case SHOW_DESC_INFO: @@ -9959,7 +10052,7 @@ VOID RTMPIoctlShow( } } snprintf(extra, size, "Radio Off\n"); - wrq->u.data.length = strlen(extra) + 1; /* 1: size of '\0' */ + wrq->u.data.length = (UINT16)(strlen(extra) + 1); /* 1: size of '\0' */ break; case RAIO_ON: pAd->StaCfg.bSwRadio = TRUE; @@ -9975,7 +10068,7 @@ VOID RTMPIoctlShow( } } snprintf(extra, size, "Radio On\n"); - wrq->u.data.length = strlen(extra) + 1; /* 1: size of '\0' */ + wrq->u.data.length = (UINT16)(strlen(extra) + 1); /* 1: size of '\0' */ break; #ifdef MESH_SUPPORT @@ -10060,15 +10153,16 @@ VOID RTMPIoctlShow( case SHOW_CFG_VALUE: { - Status = RTMPShowCfgValue(pAd, (RTMP_STRING *) wrq->u.data.pointer, - extra, pIoctlShow->MaxSize); + Status = RTMPShowCfgValue(pAd, + (RTMP_STRING *) wrq->u.data.pointer, + extra, pIoctlShow->MaxSize); if (Status == 0) - wrq->u.data.length = strlen(extra) + 1; /* 1: size of '\0' */ + wrq->u.data.length = (UINT16)(strlen(extra) + 1); /* 1: size of '\0' */ } break; case SHOW_ADHOC_ENTRY_INFO: Show_Adhoc_MacTable_Proc(pAd, extra, size); - wrq->u.data.length = strlen(extra) + 1; /* 1: size of '\0' */ + wrq->u.data.length = (UINT16)(strlen(extra) + 1); /* 1: size of '\0' */ break; #ifdef WMM_ACM_SUPPORT @@ -10081,7 +10175,9 @@ VOID RTMPIoctlShow( case SHOW_ACM_STREAM: AcmCmdStreamGuiDisplay(pAd, extra, size); wrq->u.data.length = strlen(extra) + 1; /* 1: size of '\0' */ - printk("SHOW_ACM_STREAM - wrq->length = %d\n", wrq->u.data.length); + DBGPRINT(RT_DEBUG_OFF, + ("SHOW_ACM_STREAM - wrq->length = %d\n", + wrq->u.data.length)); break; #endif @@ -10250,9 +10346,9 @@ RtmpIoctl_rt_ioctl_siwfreq( MAP_KHZ_TO_CHANNEL_ID( freq , chan); /* Setting by frequency - search the table , like 2.412G, 2.422G, */ } - if (ChannelSanity(pAd, chan) == TRUE) + if (ChannelSanity(pAd, (UCHAR)chan) == TRUE) { - pAd->CommonCfg.Channel = chan; + pAd->CommonCfg.Channel = (UCHAR)chan; /* Save the channel on MlmeAux for CntlOidRTBssidProc used. */ pAd->MlmeAux.Channel = pAd->CommonCfg.Channel; /*save connect info*/ @@ -10262,7 +10358,7 @@ RtmpIoctl_rt_ioctl_siwfreq( else return NDIS_STATUS_FAILURE; - return NDIS_STATUS_SUCCESS; + return NDIS_STATUS_SUCCESS; } @@ -10574,11 +10670,15 @@ INT RtmpIoctl_rt_ioctl_siwscan(RTMP_ADAPTER *pAd, VOID *pData, ULONG Data) { NDIS_802_11_SSID Ssid; Ssid.SsidLength = pConfig->SsidLen; + + if (Ssid.SsidLength > MAX_LEN_OF_SSID) + Ssid.SsidLength = MAX_LEN_OF_SSID; + DBGPRINT(RT_DEBUG_TRACE, ("rt_ioctl_siwscan:: req.essid_len-%d, essid-%s\n", pConfig->SsidLen, pConfig->pSsid)); NdisZeroMemory(&Ssid.Ssid, NDIS_802_11_LENGTH_SSID); NdisMoveMemory(Ssid.Ssid, pConfig->pSsid, Ssid.SsidLength); pAd->MlmeAux.params.FlgScanThisSsid = pConfig->FlgScanThisSsid; - StaSiteSurvey(pAd, &Ssid, scanType); + StaSiteSurvey(pAd, &Ssid, (UCHAR)scanType); } else #endif /* WPA_SUPPLICANT_SUPPORT */ @@ -10591,7 +10691,7 @@ INT RtmpIoctl_rt_ioctl_siwscan(RTMP_ADAPTER *pAd, VOID *pData, ULONG Data) } else #endif - StaSiteSurvey(pAd, NULL, scanType); + StaSiteSurvey(pAd, NULL, (UCHAR)scanType); }while(0); pConfig->Status = Status; @@ -10718,9 +10818,9 @@ RtmpIoctl_rt_ioctl_giwscan( pBssTable->SsidLen = pBssEntry->SsidLen; memcpy(pBssTable->Ssid, pBssEntry->Ssid, 32); pBssTable->CapabilityInfo = pBssEntry->CapabilityInfo; - pBssTable->ChannelWidth = capInfo.ChannelWidth; - pBssTable->ShortGIfor40 = capInfo.ShortGIfor40; - pBssTable->ShortGIfor20 = capInfo.ShortGIfor20; + pBssTable->ChannelWidth = (UCHAR)capInfo.ChannelWidth; + pBssTable->ShortGIfor40 = (UCHAR)capInfo.ShortGIfor40; + pBssTable->ShortGIfor20 = (UCHAR)capInfo.ShortGIfor20; pBssTable->MCSSet = pBssEntry->HtCapability.MCSSet[1]; pBssTable->WpaIeLen = pBssEntry->WpaIE.IELen; pBssTable->pWpaIe = pBssEntry->WpaIE.IE; @@ -10942,7 +11042,7 @@ RtmpIoctl_rt_ioctl_siwrts( IN VOID *pData, IN ULONG Data) { - pAd->CommonCfg.RtsThreshold = Data; + pAd->CommonCfg.RtsThreshold = (USHORT)Data; return NDIS_STATUS_SUCCESS; } @@ -10996,7 +11096,7 @@ RtmpIoctl_rt_ioctl_siwfrag( IN VOID *pData, IN ULONG Data) { - pAd->CommonCfg.FragmentThreshold = Data; + pAd->CommonCfg.FragmentThreshold = (USHORT)Data; return NDIS_STATUS_SUCCESS; } @@ -11093,7 +11193,7 @@ INT RtmpIoctl_rt_ioctl_siwencode(RTMP_ADAPTER *pAd, VOID *pData, ULONG Data) keyIdx = wdev->DefaultKeyId; } else - wdev->DefaultKeyId = keyIdx; + wdev->DefaultKeyId = (UCHAR)keyIdx; NdisZeroMemory(pAd->SharedKey[BSS0][keyIdx].Key, 16); @@ -11124,7 +11224,7 @@ INT RtmpIoctl_rt_ioctl_siwencode(RTMP_ADAPTER *pAd, VOID *pData, ULONG Data) int index = pIoctlSec->KeyIdx; /*(erq->flags & IW_ENCODE_INDEX) - 1; */ if ((index >= 0) && (index < 4)) { - pAd->StaCfg.wdev.DefaultKeyId = index; + pAd->StaCfg.wdev.DefaultKeyId = (UCHAR)index; } else /* Don't complain if only change the mode */ @@ -11257,7 +11357,7 @@ RtmpIoctl_rt_ioctl_siwmlme( case RT_CMD_STA_IOCTL_IW_MLME_DEAUTH: DBGPRINT(RT_DEBUG_TRACE, ("====> %s - IW_MLME_DEAUTH\n", __FUNCTION__)); COPY_MAC_ADDR(DeAuthReq.Addr, pAd->CommonCfg.Bssid); - DeAuthReq.Reason = reason_code; + DeAuthReq.Reason = (USHORT)reason_code; pMsgElem->MsgLen = sizeof(MLME_DEAUTH_REQ_STRUCT); NdisMoveMemory(pMsgElem->Msg, &DeAuthReq, sizeof(MLME_DEAUTH_REQ_STRUCT)); MlmeDeauthReqAction(pAd, pMsgElem); @@ -11276,7 +11376,7 @@ RtmpIoctl_rt_ioctl_siwmlme( pAd->StaCfg.ConnectinfoChannel = 0; COPY_MAC_ADDR(DisAssocReq.Addr, pAd->CommonCfg.Bssid); - DisAssocReq.Reason = reason_code; + DisAssocReq.Reason = (USHORT)reason_code; pMsgElem->Machine = ASSOC_STATE_MACHINE; pMsgElem->MsgType = MT2_MLME_DISASSOC_REQ; @@ -11565,11 +11665,11 @@ void fnSetCipherKey( } else { - pAd->StaCfg.wdev.DefaultKeyId = keyIdx; + pAd->StaCfg.wdev.DefaultKeyId = (UCHAR)keyIdx; /* Update group key information to ASIC Shared Key Table */ AsicAddSharedKeyEntry(pAd, - BSS0, - keyIdx, + (UCHAR)BSS0, + (UCHAR)keyIdx, &pAd->SharedKey[BSS0][keyIdx]); #ifdef MT_MAC if (pAd->chipCap.hif_type == HIF_MT) @@ -11629,7 +11729,7 @@ INT RtmpIoctl_rt_ioctl_siwencodeext(RTMP_ADAPTER *pAd, VOID *pData, ULONG Data) if (pIoctlSec->ext_flags & RT_CMD_STA_IOCTL_SECURTIY_EXT_SET_TX_KEY) { - wdev->DefaultKeyId = keyIdx; + wdev->DefaultKeyId = (UCHAR)keyIdx; DBGPRINT(RT_DEBUG_TRACE, ("%s::DefaultKeyId = %d\n", __FUNCTION__, wdev->DefaultKeyId)); } @@ -11660,7 +11760,8 @@ INT RtmpIoctl_rt_ioctl_siwencodeext(RTMP_ADAPTER *pAd, VOID *pData, ULONG Data) (pAd->StaCfg.GroupCipher == Ndis802_11GroupWEP104Enabled)) { /* Set Group key material to Asic */ - AsicAddSharedKeyEntry(pAd, BSS0, keyIdx, &pAd->SharedKey[BSS0][keyIdx]); + AsicAddSharedKeyEntry(pAd, BSS0, + (UCHAR)keyIdx, &pAd->SharedKey[BSS0][keyIdx]); /* STA doesn't need to set WCID attribute for group key @@ -12185,9 +12286,9 @@ RtmpIoctl_rt_ioctl_giwrate(RTMP_ADAPTER *pAd, VOID *pData, ULONG Data) if (rate_index >= rate_count) rate_index = rate_count-1; - *(ULONG *)pData = ralinkrate[rate_index] * 500000; + *(ULONG *)pData = ralinkrate[rate_index] * 500000; - return NDIS_STATUS_SUCCESS; + return NDIS_STATUS_SUCCESS; } @@ -13149,14 +13250,14 @@ INT RTMP_STA_IoctlHandle( /* handle by command */ switch(Command) { - case CMD_RT_PRIV_IOCTL: + case (UINT)CMD_RT_PRIV_IOCTL: if (Subcmd & OID_GET_SET_TOGGLE) Status = RTMPSetInformation(pAd, pRequest, Subcmd); else Status = RTMPQueryInformation(pAd, pRequest, Subcmd); break; - case CMD_RTPRIV_IOCTL_PARAM_SET: + case (UINT)CMD_RTPRIV_IOCTL_PARAM_SET: { RT_CMD_PARAM_SET *pCmdParam = (RT_CMD_PARAM_SET *)pData; RTMP_STRING *this_char = pCmdParam->pThisChar; @@ -13166,46 +13267,46 @@ INT RTMP_STA_IoctlHandle( } break; - case CMD_RTPRIV_IOCTL_SITESURVEY_GET: + case (UINT)CMD_RTPRIV_IOCTL_SITESURVEY_GET: RTMPIoctlGetSiteSurvey(pAd, pRequest); break; - case CMD_RTPRIV_IOCTL_MAC: + case (UINT)CMD_RTPRIV_IOCTL_MAC: RTMPIoctlMAC(pAd, pRequest); break; - case CMD_RTPRIV_IOCTL_E2P: + case (UINT)CMD_RTPRIV_IOCTL_E2P: RTMPIoctlE2PROM(pAd, pRequest); break; - case CMD_RTPRIV_IOCTL_RF: + case (UINT)CMD_RTPRIV_IOCTL_RF: #ifdef RTMP_RF_RW_SUPPORT RTMPIoctlRF(pAd, pRequest); #endif /* RTMP_RF_RW_SUPPORT */ break; - case CMD_RTPRIV_IOCTL_BBP: + case (UINT)CMD_RTPRIV_IOCTL_BBP: RTMPIoctlBbp(pAd, pRequest, pData, Data); break; - case CMD_RTPRIV_IOCTL_SHOW: + case (UINT)CMD_RTPRIV_IOCTL_SHOW: RTMPIoctlShow(pAd, pRequest, Subcmd, pData, Data); break; - case CMD_RTPRIV_IOCTL_SITESURVEY: - StaSiteSurvey(pAd, (NDIS_802_11_SSID *)pData, Data); + case (UINT)CMD_RTPRIV_IOCTL_SITESURVEY: + StaSiteSurvey(pAd, (NDIS_802_11_SSID *)pData, (UCHAR)Data); break; - case CMD_RTPRIV_IOCTL_CHID_2_FREQ: - RTMP_MapChannelID2KHZ(Data, (UINT32 *)pData); + case (UINT)CMD_RTPRIV_IOCTL_CHID_2_FREQ: + RTMP_MapChannelID2KHZ((UCHAR)Data, (UINT32 *)pData); break; - case CMD_RTPRIV_IOCTL_FREQ_2_CHID: + case (UINT)CMD_RTPRIV_IOCTL_FREQ_2_CHID: RTMP_MapKHZ2ChannelID(Data, (UINT32 *)pData); break; - case CMD_RTPRIV_IOCTL_ORI_DEV_TYPE_SET: - pAd->StaCfg.OriDevType = Data; + case (UINT)CMD_RTPRIV_IOCTL_ORI_DEV_TYPE_SET: + pAd->StaCfg.OriDevType = (USHORT)Data; #ifdef CONFIG_STA_SUPPORT #ifdef CREDENTIAL_STORE NdisAllocateSpinLock(pAd, &pAd->StaCtIf.Lock); @@ -13226,7 +13327,7 @@ INT RTMP_STA_IoctlHandle( #ifdef P2P_SUPPORT if (Data & INT_P2P) { - printk("Data & INT_P2P\n"); + DBGPRINT(RT_DEBUG_OFF, ("Data & INT_P2P\n")); pObj->ioctl_if_type = INT_P2P; pObj->ioctl_if = 0; } else @@ -13238,7 +13339,7 @@ INT RTMP_STA_IoctlHandle( break; #endif // #if 0 - case CMD_RTPRIV_IOCTL_STA_SCAN_SANITY_CHECK: + case (UINT)CMD_RTPRIV_IOCTL_STA_SCAN_SANITY_CHECK: if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) { /* @@ -13258,12 +13359,12 @@ INT RTMP_STA_IoctlHandle( } break; - case CMD_RTPRIV_IOCTL_STA_SCAN_END: + case (UINT)CMD_RTPRIV_IOCTL_STA_SCAN_END: pAd->StaCfg.bSkipAutoScanConn = FALSE; DBGPRINT(RT_DEBUG_ERROR ,("===>rt_ioctl_giwscan. %d(%d) BSS returned, data->length = %ld\n",pAd->ScanTab.BssNr , pAd->ScanTab.BssNr, Data)); break; - case CMD_RTPRIV_IOCTL_BSS_LIST_GET: + case (UINT)CMD_RTPRIV_IOCTL_BSS_LIST_GET: { RT_CMD_STA_IOCTL_BSS_LIST *pBssList = (RT_CMD_STA_IOCTL_BSS_LIST *)pData; RT_CMD_STA_IOCTL_BSS *pList; @@ -1587,12 +1587,13 @@ VOID PeerBeaconAtScanAction( } } #endif /* WIFI_REGION32_HIDDEN_SSID_SUPPORT */ - + Idx = BssTableSearch(&pAd->ScanTab, &ie_list->Bssid[0], ie_list->Channel); #ifdef WIFI_REGION32_HIDDEN_SSID_SUPPORT - if (Idx != BSS_NOT_FOUND && ie_list->SsidLen != 0 && SsidAllZero == 0) + if ((Idx != BSS_NOT_FOUND) && (ie_list->SsidLen != 0) && + (SsidAllZero == 0) && (Idx < ARRAY_SIZE(pAd->ScanTab.BssEntry))) #else - if (Idx != BSS_NOT_FOUND) + if ((Idx != BSS_NOT_FOUND) && (Idx < ARRAY_SIZE(pAd->ScanTab.BssEntry))) #endif /* WIFI_REGION32_HIDDEN_SSID_SUPPORT */ Rssi = pAd->ScanTab.BssEntry[Idx].Rssi; @@ -1741,7 +1742,7 @@ VOID PeerBeaconAtScanAction( } #endif /* DOT11N_DRAFT3 */ #endif /* DOT11_N_SUPPORT */ - if (Idx != BSS_NOT_FOUND) + if ((Idx != BSS_NOT_FOUND) && (Idx < ARRAY_SIZE(pAd->ScanTab.BssEntry))) { BSS_ENTRY *pBssEntry = &pAd->ScanTab.BssEntry[Idx]; NdisMoveMemory(pBssEntry->PTSF, &Elem->Msg[24], 4); @@ -1912,13 +1913,15 @@ VOID PeerBeaconAtJoinAction(RTMP_ADAPTER *pAd, MLME_QUEUE_ELEM *Elem) pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen, ie_list->Channel); - if (Idx == BSS_NOT_FOUND) + if ((Idx == BSS_NOT_FOUND) || + (Idx >= ARRAY_SIZE(pAd->ScanTab.BssEntry))) { Rssi = RTMPMaxRssi(pAd, ConvertToRssi(pAd, &Elem->rssi_info, RSSI_IDX_0), ConvertToRssi(pAd, &Elem->rssi_info, RSSI_IDX_1), ConvertToRssi(pAd, &Elem->rssi_info, RSSI_IDX_2)); Idx = BssTableSetEntry(pAd, &pAd->ScanTab, ie_list, Rssi, LenVIE, pVIE); - if (Idx != BSS_NOT_FOUND) + if ((Idx != BSS_NOT_FOUND) && + (Idx < ARRAY_SIZE(pAd->ScanTab.BssEntry))) { NdisMoveMemory(pAd->ScanTab.BssEntry[Idx].PTSF, &Elem->Msg[24], 4); NdisMoveMemory(&pAd->ScanTab.BssEntry[Idx].TTSF[0], &Elem->TimeStamp.u.LowPart, 4); @@ -2366,8 +2369,8 @@ DBGPRINT(RT_DEBUG_OFF, ("-->%s():INFRA_ON=%d, jiffies=0x%x, OS_HZ=%d\n", __FUNCT NdisGetSystemUpTime(&Mesh_Now); pAd->MeshTab.MeshLink[LinkIdx].Entry.LastBeaconTime = Mesh_Now; } - } -#endif /* MESH_SUPPORT */ + } +#endif /* SMART_CARRIER_SENSE_SUPPORT */ /* ignore BEACON not for my SSID */ if ((!is_my_ssid) && (!is_my_bssid)) @@ -2388,11 +2391,12 @@ DBGPRINT(RT_DEBUG_OFF, ("-->%s():INFRA_ON=%d, jiffies=0x%x, OS_HZ=%d\n", __FUNCT /* Housekeeping "SsidBssTab" table for later-on ROAMing usage. */ Bssidx = BssTableSearchWithSSID(&pAd->MlmeAux.SsidBssTab, bcn_ie_list->Bssid, bcn_ie_list->Ssid, bcn_ie_list->SsidLen, bcn_ie_list->Channel); - if (Bssidx == BSS_NOT_FOUND) - { + if ((Bssidx == BSS_NOT_FOUND) || + (Bssidx >= ARRAY_SIZE(pAd->MlmeAux.SsidBssTab.BssEntry))) { /* discover new AP of this network, create BSS entry */ Bssidx = BssTableSetEntry(pAd, &pAd->MlmeAux.SsidBssTab, bcn_ie_list, RealRssi, LenVIE, pVIE); - if (Bssidx == BSS_NOT_FOUND) + if ((Bssidx == BSS_NOT_FOUND) || + (Bssidx >= ARRAY_SIZE(pAd->MlmeAux.SsidBssTab.BssEntry))) ; else { @@ -2427,11 +2431,13 @@ DBGPRINT(RT_DEBUG_OFF, ("-->%s():INFRA_ON=%d, jiffies=0x%x, OS_HZ=%d\n", __FUNCT /* Update ScanTab */ Bssidx = BssTableSearch(&pAd->ScanTab, bcn_ie_list->Bssid, bcn_ie_list->Channel); - if (Bssidx == BSS_NOT_FOUND) + if ((Bssidx == BSS_NOT_FOUND) || (Bssidx >= ARRAY_SIZE(pAd->ScanTab.BssEntry))) { /* discover new AP of this network, create BSS entry */ Bssidx = BssTableSetEntry(pAd, &pAd->ScanTab, bcn_ie_list, RealRssi, LenVIE, pVIE); - if (Bssidx == BSS_NOT_FOUND) /* return if BSS table full */ + /* return if BSS table full */ + if ((Bssidx == BSS_NOT_FOUND) || + (Bssidx >= ARRAY_SIZE(pAd->ScanTab.BssEntry))) goto LabelOK; NdisMoveMemory(pAd->ScanTab.BssEntry[Bssidx].PTSF, &Elem->Msg[24], 4); diff --git a/tools/bin2h b/tools/bin2h new file mode 100755 index 0000000..74e971b --- a/dev/null +++ b/tools/bin2h @@ -0,0 +1,31 @@ +ELF + + +G + + + + + + + + + + +@ +@ + +@ +@ + +e +Œ +@ + +@ + +@ +@ +@ +@ +@ diff --git a/tools/bin2h.c b/tools/bin2h.c index ce65baa..b20df9e 100755 --- a/tools/bin2h.c +++ b/tools/bin2h.c @@ -21,11 +21,15 @@ #include <string.h> #include <stdlib.h> +#define MAX_FIRMWARE_NAME_BUFFER_LENGTH 128 +#define MAX_NAME_BUFFER_LENGTH 512 +#define MAX_CHIPSETS_BUFFER_LENGTH 1024 + int bin2h(char *infname, char *outfname, char *fw_name) { int ret = 0; FILE *infile, *outfile; - unsigned char c; + int c; int i=0; infile = fopen(infname,"r"); @@ -66,7 +70,7 @@ int bin2h(char *infname, char *outfname, char *fw_name) } fputs("0x", outfile); - sprintf(cc,"%02x",c); + snprintf(cc, sizeof(cc), "%02x", c); fputs(cc, outfile); fputs(", ", outfile); i++; @@ -80,13 +84,14 @@ int bin2h(char *infname, char *outfname, char *fw_name) int main(int argc ,char *argv[]) { - char infname[512], ine2pname[512], in_rom_patch[512]; - char infname1[512]; - char outfname[512], oute2pname[512], out_rom_patch[512]; - char outfname1[512]; - char chipsets[1024]; - char fw_name[128], e2p_name[128], rom_patch_name[128]; - char fw_name1[128]; + char infname[MAX_NAME_BUFFER_LENGTH], ine2pname[MAX_NAME_BUFFER_LENGTH]; + char infname1[MAX_NAME_BUFFER_LENGTH], in_rom_patch[MAX_NAME_BUFFER_LENGTH]; + char outfname[MAX_NAME_BUFFER_LENGTH], oute2pname[MAX_NAME_BUFFER_LENGTH]; + char outfname1[MAX_NAME_BUFFER_LENGTH], out_rom_patch[MAX_NAME_BUFFER_LENGTH]; + char chipsets[MAX_CHIPSETS_BUFFER_LENGTH]; + char fw_name[MAX_FIRMWARE_NAME_BUFFER_LENGTH], e2p_name[MAX_FIRMWARE_NAME_BUFFER_LENGTH]; + char fw_name1[MAX_FIRMWARE_NAME_BUFFER_LENGTH]; + char rom_patch_name[MAX_FIRMWARE_NAME_BUFFER_LENGTH]; char *rt28xxdir; char *chipset, *token; char *wow, *rt28xx_mode; @@ -115,8 +120,9 @@ int main(int argc ,char *argv[]) printf("Environment value \"CHIPSET\" over 1024 bytes\n"); return -1; } - memset(chipsets, 0, 1024); - memcpy(chipsets, chipset, strlen(chipset)); + memset(chipsets, 0, MAX_CHIPSETS_BUFFER_LENGTH); + strncpy(chipsets, chipset, MAX_CHIPSETS_BUFFER_LENGTH - 1); + chipsets[MAX_CHIPSETS_BUFFER_LENGTH - 1] = '\0'; if (strlen(rt28xxdir) > (sizeof(infname)-100)) { printf("Environment value \"RT28xx_DIR\" is too long!\n"); @@ -127,26 +133,27 @@ int main(int argc ,char *argv[]) while (chipset != NULL) { printf("chipset = %s\n", chipset); - memset(infname, 0, 512); - memset(infname1, 0, 512); - memset(ine2pname, 0, 512); - memset(outfname, 0, 512); - memset(outfname1, 0, 512); - memset(oute2pname, 0, 512); - memset(fw_name, 0, 128); - memset(fw_name1, 0, 128); - memset(e2p_name, 0, 128); - memset(in_rom_patch, 0, 512); - memset(out_rom_patch, 0, 512); - memset(rom_patch_name, 0, 128); - strcat(infname,rt28xxdir); - strcat(infname1,rt28xxdir); - strcat(ine2pname, rt28xxdir); - strcat(in_rom_patch, rt28xxdir); - strcat(outfname,rt28xxdir); - strcat(outfname1,rt28xxdir); - strcat(oute2pname, rt28xxdir); - strcat(out_rom_patch, rt28xxdir); + memset(infname, 0, MAX_NAME_BUFFER_LENGTH); + memset(infname1, 0, MAX_NAME_BUFFER_LENGTH); + memset(ine2pname, 0, MAX_NAME_BUFFER_LENGTH); + memset(outfname, 0, MAX_NAME_BUFFER_LENGTH); + memset(outfname1, 0, MAX_NAME_BUFFER_LENGTH); + memset(oute2pname, 0, MAX_NAME_BUFFER_LENGTH); + memset(fw_name, 0, MAX_FIRMWARE_NAME_BUFFER_LENGTH); + memset(fw_name1, 0, MAX_FIRMWARE_NAME_BUFFER_LENGTH); + memset(e2p_name, 0, MAX_FIRMWARE_NAME_BUFFER_LENGTH); + memset(in_rom_patch, 0, MAX_NAME_BUFFER_LENGTH); + memset(out_rom_patch, 0, MAX_NAME_BUFFER_LENGTH); + memset(rom_patch_name, 0, MAX_FIRMWARE_NAME_BUFFER_LENGTH); + strncat(infname, rt28xxdir, MAX_NAME_BUFFER_LENGTH - strlen(infname) - 1); + strncat(infname1, rt28xxdir, MAX_NAME_BUFFER_LENGTH - strlen(infname1) - 1); + strncat(ine2pname, rt28xxdir, MAX_NAME_BUFFER_LENGTH - strlen(ine2pname) - 1); + strncat(in_rom_patch, rt28xxdir, MAX_NAME_BUFFER_LENGTH - strlen(in_rom_patch) - 1); + strncat(outfname, rt28xxdir, MAX_NAME_BUFFER_LENGTH - strlen(outfname) - 1); + strncat(outfname1, rt28xxdir, MAX_NAME_BUFFER_LENGTH - strlen(outfname1) - 1); + strncat(oute2pname, rt28xxdir, MAX_NAME_BUFFER_LENGTH - strlen(oute2pname) - 1); + strncat(out_rom_patch, rt28xxdir, + MAX_NAME_BUFFER_LENGTH - strlen(out_rom_patch) - 1); is_bin2h_fw = 0; is_bin2h_rom_patch = 0; is_bin2h_e2p = 0; @@ -321,9 +328,11 @@ int main(int argc ,char *argv[]) || (strncmp(chipset, "mt7603u", 7) == 0)) { strcat(infname, "/mcu/bin/WIFI_RAM_CODE_MT7603_e1.bin"); strcat(infname1, "/mcu/bin/WIFI_RAM_CODE_MT7603_e2.bin"); - strcat(outfname, "/include/mcu/mt7603_firmware.h"); + strncat(outfname, "/include/mcu/mt7603_firmware.h" + , MAX_NAME_BUFFER_LENGTH - strlen(outfname) - 1); strcat(outfname1, "/include/mcu/mt7603_e2_firmware.h"); - strcat(fw_name, "MT7603_FirmwareImage"); + strncat(fw_name, "MT7603_FirmwareImage" + , MAX_FIRMWARE_NAME_BUFFER_LENGTH - strlen(fw_name) - 1); strcat(fw_name1, "MT7603_e2_FirmwareImage"); strcat(e2p_name, "MT7603_E2PImage"); @@ -334,10 +343,12 @@ int main(int argc ,char *argv[]) } else if (strncmp(chipset, "mt7628", 7) == 0) { //strcat(infname, "/mcu/bin/MT7628_ram_20140212_fpga_tv01.bin"); strcat(infname, "/mcu/bin/WIFI_RAM_CODE_MT7628_e1.bin"); - strcat(outfname, "/include/mcu/mt7628_firmware.h"); + strncat(outfname, "/include/mcu/mt7628_firmware.h" + , MAX_NAME_BUFFER_LENGTH - strlen(outfname) - 1); strcat(fw_name, "MT7628_FirmwareImage"); strcat(e2p_name, "MT7628_E2PImage"); - strcat(ine2pname, "/eeprom/MT7603E1_EEPROM_layout_20131206.bin"); + strncat(ine2pname, "/eeprom/MT7603E1_EEPROM_layout_20131206.bin" + , MAX_NAME_BUFFER_LENGTH - strlen(ine2pname) - 1); strcat(oute2pname, "/include/eeprom/mt7628_e2p.h"); is_bin2h_fw = 1; is_bin2h_e2p = 1; diff --git a/tools/plug_in/calib_robust_test/calib_robust_file.c b/tools/plug_in/calib_robust_test/calib_robust_file.c index 4791eb0..c15e3dc 100755 --- a/tools/plug_in/calib_robust_test/calib_robust_file.c +++ b/tools/plug_in/calib_robust_test/calib_robust_file.c @@ -31,12 +31,12 @@ int calib_test_fileOpen(char *fname) filp = filp_open(fname, O_RDWR | O_CREAT, 0); }else { - printk("[calib] file is exist!!\n"); + DBGPRINT(RT_DEBUG_ERROR, ("[calib] file is exist!!\n")); result = -1; } if (IS_ERR(filp)) { - printk("[calib] error occured while opening file %s, exiting...\n",fname); + DBGPRINT(RT_DEBUG_ERROR, ("[calib] error occurred while opening file %s, exiting...\n", fname)); result = -1; } return result; diff --git a/tools/plug_in/calib_robust_test/calib_robust_main.c b/tools/plug_in/calib_robust_test/calib_robust_main.c index 712dbb4..5ad2cf9 100755 --- a/tools/plug_in/calib_robust_test/calib_robust_main.c +++ b/tools/plug_in/calib_robust_test/calib_robust_main.c @@ -176,7 +176,7 @@ static void calib_result_show(RTMP_ADAPTER *pAd,unsigned int calibId) if(pCalibInfo==NULL) { - printk("[Calib] can't find calib information by calibId %d\n",calibId); + DBGPRINT(RT_DEBUG_ERROR, ("[Calib] can't find calib information by calibId %d\n", calibId)); return ; } @@ -244,7 +244,7 @@ static void calib_robust_routine(struct work_struct *ws) static int calib_robust_callback(unsigned short hook, struct sk_buff *skb, unsigned char status,void *priv) { RTMP_ADAPTER *pAd = (RTMP_ADAPTER*)priv; - printk("[calib] Calibration ID: %d,State: %d\n",gCalib.curCalibId,status); + DBGPRINT(RT_DEBUG_OFF, ("[calib] Calibration ID: %d,State: %d\n", gCalib.curCalibId, status)); if(pAd == pGAd){ switch(gCalib.stat){ case CALIB_STATE_NOP: @@ -259,11 +259,12 @@ static int calib_robust_callback(unsigned short hook, struct sk_buff *skb, unsig { if(status!=NDIS_STATUS_SUCCESS) { - printk("[calib] rcv response in calib cma failed, retry!\n"); + DBGPRINT(RT_DEBUG_ERROR, ("[calib] rcv response in calib cma failed, retry!\n")); }else { - printk("[calib] rcv response in calib cmd ok, calibId %d!\n",gCalib.curCalibId); + DBGPRINT(RT_DEBUG_OFF, ("[calib] rcv response in calib cmd ok, calibId %d!\n", + gCalib.curCalibId)); /*do save result*/ schedule_work(gCalib.resultWork); spin_unlock(&gCalib.lock); @@ -348,7 +349,8 @@ static struct mt_wlanTxRxHookOps calib_ops __read_mostly = { static int __init calib_test_module_init(void) { - printk("[calib] %s(): module init and register callback for roubst test\n",__FUNCTION__); + DBGPRINT(RT_DEBUG_OFF, ("[calib] %s(): module init and register callback for roubst test\n", + __func__)); /*initial global struct*/ calib_test_init(); /*register proc file*/ @@ -364,7 +366,7 @@ static int __init calib_test_module_init(void) static void __exit calib_test_module_exit(void) { - printk("[calib] %s(): module exist\n",__FUNCTION__); + DBGPRINT(RT_DEBUG_OFF, ("[calib] %s(): module exist\n", __func__)); RtmpOsTxRxHookUnRegister(&calib_ops); calib_test_exit(); calib_file_exit(); diff --git a/tools/plug_in/calib_robust_test/calib_robust_proc.c b/tools/plug_in/calib_robust_test/calib_robust_proc.c index 37dbbae..2e7025e 100755 --- a/tools/plug_in/calib_robust_test/calib_robust_proc.c +++ b/tools/plug_in/calib_robust_test/calib_robust_proc.c @@ -44,7 +44,7 @@ static int calib_robust_testModeSet(unsigned int state) gCalib.stat = state ? CALIB_STATE_START_TEST_MODE : CALIB_STATE_STOP_TEST_MODE; /*start into test mode*/ ret = RtmpOsRfTest(pGAd,ACTION_SWITCH_TO_RFTEST,state,0); - printk("[calib] enable test mode!\n"); + DBGPRINT(RT_DEBUG_OFF, ("[calib] enable test mode!\n")); return ret; } @@ -122,13 +122,13 @@ static int calib_state_proc_write( struct file *filp, const char *buff,unsigned break; case CALIB_STATE_START_TEST_MODE: { - printk("[calib] goto test mode...\n"); + DBGPRINT(RT_DEBUG_OFF, ("[calib] goto test mode...\n")); calib_robust_testModeSet(1); } break; case CALIB_STATE_CALIB_START: { - printk("[calib] start to test...\n"); + DBGPRINT(RT_DEBUG_OFF, ("[calib] start to test...\n")); pItem = calib_table_get(gCalib.curCalibId); if(pItem) { @@ -140,13 +140,13 @@ static int calib_state_proc_write( struct file *filp, const char *buff,unsigned calib_robust_testStart(); } - printk("[calib] count %d\n",gCalib.curCount); + DBGPRINT(RT_DEBUG_OFF, ("[calib] count %d\n", gCalib.curCount)); } } break; case CALIB_STATE_STOP_TEST_MODE: { - printk("[calib] stop test mode...\n"); + DBGPRINT(RT_DEBUG_OFF, ("[calib] stop test mode...\n")); calib_robust_testModeSet(0); } break; @@ -182,7 +182,7 @@ static int calib_times_proc_write( struct file *filp, const char *buff,unsigned if (buff && !copy_from_user(value, buff, len1)) { gCalib.times = simple_strtoul(value, &end, 10); - printk("[calib] change calibration time to %d\n",gCalib.times); + DBGPRINT(RT_DEBUG_OFF, ("[calib] change calibration time to %d\n", gCalib.times)); } return len1; @@ -210,16 +210,16 @@ static int calib_id_proc_write( struct file *filp, const char *buff,unsigned lon if(!buff) { - printk("[calib] %s(): null buffer\n",__FUNCTION__); + DBGPRINT(RT_DEBUG_ERROR, ("[calib] %s(): null buffer\n", __func__)); goto end; } if(copy_from_user(value, buff, len1)) { - printk("[calib] %s(), copy from user failed!\n",__FUNCTION__); + DBGPRINT(RT_DEBUG_ERROR, ("[calib] %s(), copy from user failed!\n", __func__)); goto end; } - printk("value = %s\n",value); + DBGPRINT(RT_DEBUG_OFF, ("value = %s\n", value)); if(!strncmp(value,"24GRCAL",7)) { gCalib.curCalibId = CALIB_TEST_24GRCAL; @@ -280,7 +280,7 @@ static int calib_id_proc_write( struct file *filp, const char *buff,unsigned lon { goto end; } - printk("[calib] change calibId to %s\n",value); + DBGPRINT(RT_DEBUG_OFF, ("[calib] change calibId to %s\n", value)); pItem = calib_table_get(gCalib.curCalibId); if(pItem) { @@ -361,7 +361,7 @@ static int calib_file_proc_write( struct file *filp, const char *buff,unsigned l if (buff && !copy_from_user(value, buff, len1)) { gCalib.fstate = simple_strtoul(value, &end, 10); - printk("[calib] change file stat to %d\n",gCalib.fstate); + DBGPRINT(RT_DEBUG_OFF, ("[calib] change file stat to %d\n", gCalib.fstate)); calib_file_state_run(gCalib.fstate); } return len1; @@ -391,13 +391,13 @@ static int calib_bw_proc_write( struct file *filp, const char *buff,unsigned lon if (buff && !copy_from_user(value, buff, len1)) { bw = simple_strtoul(value, &end, 10); - printk("[calib] bw=%d\n",bw); + DBGPRINT(RT_DEBUG_OFF, ("[calib] bw=%d\n", bw)); if(bw!=20 && bw!=40) { - printk("[calib] only support bw 20 or 40\n"); + DBGPRINT(RT_DEBUG_OFF, ("[calib] only support bw 20 or 40\n")); }else{ gCalib.bw = bw; - printk("[calib] change bw to %d\n",gCalib.bw); + DBGPRINT(RT_DEBUG_OFF, ("[calib] change bw to %d\n", gCalib.bw)); } } return len1; @@ -475,7 +475,7 @@ int calib_test_proc_init(void) if (!calib_proc) { - printk(KERN_INFO "[calib] Create cakibration test dir failed!!!\n"); + DBGPRINT(RT_DEBUG_ERROR, (KERN_INFO "[calib] Create cakibration test dir failed!!!\n")); return -1; } @@ -483,7 +483,7 @@ int calib_test_proc_init(void) if (!state_entry) { - printk(KERN_INFO "[calib] Create state entry failed!!!\n"); + DBGPRINT(RT_DEBUG_ERROR, (KERN_INFO "[calib] Create state entry failed!!!\n")); remove_proc_entry("calib_test", NULL); return -1; } @@ -492,7 +492,7 @@ int calib_test_proc_init(void) if (!times_entry) { - printk(KERN_INFO "[calib] Create times_entry failed!!!\n"); + DBGPRINT(RT_DEBUG_ERROR, (KERN_INFO "[calib] Create times_entry failed!!!\n")); remove_proc_entry("stat", calib_proc); remove_proc_entry("calib_test", NULL); return -1; @@ -502,7 +502,7 @@ int calib_test_proc_init(void) if (!calibId_entry) { - printk(KERN_INFO "[calib] Create staId_entry failed!!!\n"); + DBGPRINT(RT_DEBUG_ERROR, (KERN_INFO "[calib] Create staId_entry failed!!!\n")); remove_proc_entry("stat", calib_proc); remove_proc_entry("times", calib_proc); remove_proc_entry("calib_test", NULL); @@ -514,7 +514,7 @@ int calib_test_proc_init(void) if (!file_entry) { - printk(KERN_INFO "[calib] Create file_entry failed!!!\n"); + DBGPRINT(RT_DEBUG_ERROR, (KERN_INFO "[calib] Create file_entry failed!!!\n")); remove_proc_entry("stat", calib_proc); remove_proc_entry("times", calib_proc); remove_proc_entry("calibId", calib_proc); @@ -527,7 +527,7 @@ int calib_test_proc_init(void) if (!bw_entry) { - printk(KERN_INFO "[calib] Create bw_entry failed!!!\n"); + DBGPRINT(RT_DEBUG_ERROR, (KERN_INFO "[calib] Create bw_entry failed!!!\n")); remove_proc_entry("stat", calib_proc); remove_proc_entry("times", calib_proc); remove_proc_entry("calibId", calib_proc); @@ -538,7 +538,7 @@ int calib_test_proc_init(void) calib_file_state_run(1); - printk(KERN_INFO "[calib] Create calib_test ok!!!\n"); + DBGPRINT(RT_DEBUG_OFF, (KERN_INFO "[calib] Create calib_test ok!!!\n")); return 0; } diff --git a/tools/plug_in/softq_statistic/softq_stat_file.c b/tools/plug_in/softq_statistic/softq_stat_file.c index eb01b3b..d0cc3b3 100755 --- a/tools/plug_in/softq_statistic/softq_stat_file.c +++ b/tools/plug_in/softq_statistic/softq_stat_file.c @@ -31,12 +31,12 @@ int softq_stat_fileOpen(char *fname) filp = filp_open(fname, O_RDWR | O_CREAT, 0); }else { - printk("file is exist!!\n"); + DBGPRINT(RT_DEBUG_OFF, ("file is exist!!\n")); result = -1; } if (IS_ERR(filp)) { - printk("%s(): error occured while opening file %s, exiting...\n",__FUNCTION__,fname); + DBGPRINT(RT_DEBUG_ERROR, ("%s(): error occurred while opening file %s, exiting...\n", __func__, fname)); result = -1; } return result; diff --git a/tools/plug_in/softq_statistic/softq_stat_proc.c b/tools/plug_in/softq_statistic/softq_stat_proc.c index 33dd037..9fd7d3c 100755 --- a/tools/plug_in/softq_statistic/softq_stat_proc.c +++ b/tools/plug_in/softq_statistic/softq_stat_proc.c @@ -37,12 +37,12 @@ extern char *gBuffer; swq = softq_statistic.swQueueTotal[i] ? softq_statistic.swQueueTotal[i]/softq_statistic.swQueueCounter[i]:0; ring = softq_statistic.swQueueTotal[i] ? softq_statistic.txRingTotal[i]/softq_statistic.txRingCounter[i]:0; - printk("\tAC%d Drop=%d, SW_Q=%d, Ring=%d, APSendPacket=%d, DequeuePacket=%d\n", i, + DBGPRINT(RT_DEBUG_OFF, ("\tAC%d Drop=%d, SW_Q=%d, Ring=%d, APSendPacket=%d, DequeuePacket=%d\n", i, softq_statistic.swDropPacket[i], swq, ring, softq_statistic.apSendPacket[i], - softq_statistic.apDequeuePacket[i]); + softq_statistic.apDequeuePacket[i])); } return 0; } @@ -122,31 +122,31 @@ static int softq_state_proc_write( struct file *filp, const char *buff,unsigned case SOFTQ_STATE_REPORT: { softq_state_show(); - printk("\nshow don...\n"); + DBGPRINT(RT_DEBUG_OFF, ("\nshow don...\n")); } break; case SOFTQ_STATE_CLEAN: { softq_state_clean(); - printk("\nclean don...\n"); + DBGPRINT(RT_DEBUG_OFF, ("\nclean don...\n")); } break; case SOFTQ_STATE_NOP: - printk("\nchange to no operation...\n"); + DBGPRINT(RT_DEBUG_OFF, ("\nchange to no operation...\n")); break; case SOFTQ_STATE_REPORT_INTR_PERIOD: - printk("\nchange to report periodic...\n"); + DBGPRINT(RT_DEBUG_OFF, ("\nchange to report periodic...\n")); break; case SOFTQ_STATE_REPORT_INTR_EACHTIME: - printk("\nchange to report each time...\n"); + DBGPRINT(RT_DEBUG_OFF, ("\nchange to report each time...\n")); break; default: - printk("\nplease echo: [ clean: %d | report: %d | report-period: %d | report-each: %d | nop: %d]\n", + DBGPRINT(RT_DEBUG_OFF, ("\nplease echo: [ clean: %d | report: %d | report-period: %d | report-each: %d | nop: %d]\n", SOFTQ_STATE_CLEAN, SOFTQ_STATE_REPORT, SOFTQ_STATE_REPORT_INTR_PERIOD, SOFTQ_STATE_REPORT_INTR_EACHTIME, - SOFTQ_STATE_NOP); + SOFTQ_STATE_NOP)); break; } @@ -182,7 +182,7 @@ static int softq_times_proc_write( struct file *filp, const char *buff,unsigned if (buff && !copy_from_user(value, buff, len1)) { softq_statistic.times = simple_strtoul(value, &end, 10); - printk("change periodic time to %d\n",softq_statistic.times); + DBGPRINT(RT_DEBUG_OFF, ("change periodic time to %d\n", softq_statistic.times)); } return len1; @@ -216,7 +216,7 @@ static int softq_staId_proc_write( struct file *filp, const char *buff,unsigned if (buff && !copy_from_user(value, buff, len1)) { softq_statistic.staId = simple_strtoul(value, &end, 10); - printk("change staId to %d\n",softq_statistic.staId); + DBGPRINT(RT_DEBUG_OFF, ("change staId to %d\n", softq_statistic.staId)); } return len1; @@ -251,7 +251,7 @@ static int softq_file_proc_write( struct file *filp, const char *buff,unsigned l if (buff && !copy_from_user(value, buff, len1)) { softq_statistic.fstate = simple_strtoul(value, &end, 10); - printk("change file stat to %d\n",softq_statistic.fstate); + DBGPRINT(RT_DEBUG_OFF, ("change file stat to %d\n", softq_statistic.fstate)); softq_file_state_run(softq_statistic.fstate); } return len1; @@ -264,7 +264,7 @@ int softq_stat_proc_init(void) if (!softq_proc) { - printk(KERN_INFO "Create softq_stat dir failed!!!\n"); + DBGPRINT(RT_DEBUG_ERROR, (KERN_INFO "Create softq_stat dir failed!!!\n")); return -1; } @@ -272,7 +272,7 @@ int softq_stat_proc_init(void) if (!state_entry) { - printk(KERN_INFO "Create state entry failed!!!\n"); + DBGPRINT(RT_DEBUG_ERROR, (KERN_INFO "Create state entry failed!!!\n")); remove_proc_entry("softq_stat", NULL); return -1; } @@ -285,7 +285,7 @@ int softq_stat_proc_init(void) if (!times_entry) { - printk(KERN_INFO "Create times_entry failed!!!\n"); + DBGPRINT(RT_DEBUG_ERROR, (KERN_INFO "Create times_entry failed!!!\n")); remove_proc_entry("stat", softq_proc); remove_proc_entry("softq_stat", NULL); return -1; @@ -298,7 +298,7 @@ int softq_stat_proc_init(void) if (!staId_entry) { - printk(KERN_INFO "Create staId_entry failed!!!\n"); + DBGPRINT(RT_DEBUG_ERROR, (KERN_INFO "Create staId_entry failed!!!\n")); remove_proc_entry("stat", softq_proc); remove_proc_entry("times", softq_proc); remove_proc_entry("softq_stat", NULL); @@ -312,7 +312,7 @@ int softq_stat_proc_init(void) if (!staId_entry) { - printk(KERN_INFO "Create staId_entry failed!!!\n"); + DBGPRINT(RT_DEBUG_ERROR, (KERN_INFO "Create staId_entry failed!!!\n")); remove_proc_entry("stat", softq_proc); remove_proc_entry("times", softq_proc); remove_proc_entry("softq_stat", NULL); @@ -324,7 +324,7 @@ int softq_stat_proc_init(void) if (!file_entry) { - printk(KERN_INFO "Create file_entry failed!!!\n"); + DBGPRINT(RT_DEBUG_ERROR, (KERN_INFO "Create file_entry failed!!!\n")); remove_proc_entry("stat", softq_proc); remove_proc_entry("times", softq_proc); remove_proc_entry("staId", softq_proc); @@ -332,7 +332,7 @@ int softq_stat_proc_init(void) return -1; } - printk(KERN_INFO "Create softq_stat ok!!!\n"); + DBGPRINT(RT_DEBUG_OFF, (KERN_INFO "Create softq_stat ok!!!\n")); return 0; } diff --git a/tools/plug_in/softq_statistic/softq_statistic.c b/tools/plug_in/softq_statistic/softq_statistic.c index 849082f..7553695 100755 --- a/tools/plug_in/softq_statistic/softq_statistic.c +++ b/tools/plug_in/softq_statistic/softq_statistic.c @@ -61,7 +61,7 @@ static int softq_state_drop(unsigned int queIdx) { if (softq_statistic.swDropPacket[queIdx] == 0) { - printk("%s():drop pkt, QueIdx=%d\n", __FUNCTION__, queIdx); + DBGPRINT(RT_DEBUG_OFF, ("%s():drop pkt, QueIdx=%d\n", __func__, queIdx)); } softq_statistic.swDropPacket[queIdx] +=1; } @@ -123,40 +123,40 @@ static int softq_state_mlme(unsigned int staId,RTMP_ADAPTER *pAd ) unsigned int freeNO0,freeNO1,freeNO2,freeNO3; temp1 = softq_statistic.apSendPacket[0]+softq_statistic.apSendPacket[1]+softq_statistic.apSendPacket[2]+softq_statistic.apSendPacket[3]; temp2 = softq_statistic.apPreSendPacket[0]+softq_statistic.apPreSendPacket[1]+ softq_statistic.apPreSendPacket[2] + softq_statistic.apPreSendPacket[3] ; - printk(" Send from Charior: AC0=%d, AC1=%d, AC2=%d, AC3=%d, Total=%d\n" - , (softq_statistic.apSendPacket[0] - softq_statistic.apPreSendPacket[0]) - , (softq_statistic.apSendPacket[1] - softq_statistic.apPreSendPacket[1]) - , (softq_statistic.apSendPacket[2] - softq_statistic.apPreSendPacket[2]) - , (softq_statistic.apSendPacket[3] - softq_statistic.apPreSendPacket[3]) - , (temp1 - temp2)); + DBGPRINT(RT_DEBUG_OFF, (" Send from Charior: AC0=%d, AC1=%d, AC2=%d, AC3=%d, Total=%d\n" + , (softq_statistic.apSendPacket[0] - softq_statistic.apPreSendPacket[0]) + , (softq_statistic.apSendPacket[1] - softq_statistic.apPreSendPacket[1]) + , (softq_statistic.apSendPacket[2] - softq_statistic.apPreSendPacket[2]) + , (softq_statistic.apSendPacket[3] - softq_statistic.apPreSendPacket[3]) + , (temp1 - temp2))); temp1 = softq_statistic.apDequeuePacket[0]+softq_statistic.apDequeuePacket[1]+softq_statistic.apDequeuePacket[2]+softq_statistic.apDequeuePacket[3]; temp2 = softq_statistic.apPreDequeuePacket[0]+softq_statistic.apPreDequeuePacket[1]+softq_statistic.apPreDequeuePacket[2]+softq_statistic.apPreDequeuePacket[3]; - printk("Dequeue to Tx Ring: AC0=%d, AC1=%d, AC2=%d, AC3=%d, Total=%d\n" + DBGPRINT(RT_DEBUG_OFF, ("Dequeue to Tx Ring: AC0=%d, AC1=%d, AC2=%d, AC3=%d, Total=%d\n" , (softq_statistic.apDequeuePacket[0] - softq_statistic.apPreDequeuePacket[0]) , (softq_statistic.apDequeuePacket[1] - softq_statistic.apPreDequeuePacket[1]) , (softq_statistic.apDequeuePacket[2] - softq_statistic.apPreDequeuePacket[2]) , (softq_statistic.apDequeuePacket[3] - softq_statistic.apPreDequeuePacket[3]) - , (temp1 - temp2)); + , (temp1 - temp2))); temp1 = softq_statistic.swDropPacket[0]+softq_statistic.swDropPacket[1]+softq_statistic.swDropPacket[2]+softq_statistic.swDropPacket[3]; temp2 = softq_statistic.swPreDropPacket[0]+softq_statistic.swPreDropPacket[1]+softq_statistic.swPreDropPacket[2]+softq_statistic.swPreDropPacket[3]; - printk(" Drop packets: AC0=%d, AC1=%d, AC2=%d, AC3=%d, Total=%d\n" + DBGPRINT(RT_DEBUG_OFF, (" Drop packets: AC0=%d, AC1=%d, AC2=%d, AC3=%d, Total=%d\n" , (softq_statistic.swDropPacket[0] - softq_statistic.swPreDropPacket[0]) , (softq_statistic.swDropPacket[1] - softq_statistic.swPreDropPacket[1]) , (softq_statistic.swDropPacket[2] - softq_statistic.swPreDropPacket[2]) , (softq_statistic.swDropPacket[3] - softq_statistic.swPreDropPacket[3]) - , (temp1 - temp2)); + , (temp1 - temp2))); freeNO0 = GET_TXRING_FREENO(pAd, 0); freeNO1 = GET_TXRING_FREENO(pAd, 1); freeNO2 = GET_TXRING_FREENO(pAd, 2); freeNO3 = GET_TXRING_FREENO(pAd, 3); - printk(" Tx Ring Used: AC0=%d, AC1=%d, AC2=%d, AC3=%d\n\n" - , (TX_RING_SIZE - freeNO0) - , (TX_RING_SIZE - freeNO1) - , (TX_RING_SIZE - freeNO2) - , (TX_RING_SIZE - freeNO3)); + DBGPRINT(RT_DEBUG_OFF, (" Tx Ring Used: AC0=%d, AC1=%d, AC2=%d, AC3=%d\n\n" + , (TX_RING_SIZE - freeNO0) + , (TX_RING_SIZE - freeNO1) + , (TX_RING_SIZE - freeNO2) + , (TX_RING_SIZE - freeNO3))); for(p=0;p<4;p++) { @@ -286,7 +286,7 @@ static struct mt_wlanTxRxHookOps softq_stat_ops __read_mostly = { static int __init softq_stat_module_init(void) { - printk("%s(): module init and register callback for debug\n",__FUNCTION__); + DBGPRINT(RT_DEBUG_OFF, ("%s(): module init and register callback for debug\n", __func__)); /*initial global struct*/ sofq_stat_init(); @@ -301,7 +301,7 @@ static int __init softq_stat_module_init(void) static void __exit softq_stat_module_exit(void) { - printk("%s(): module exist\n",__FUNCTION__); + DBGPRINT(RT_DEBUG_OFF, ("%s(): module exist\n", __func__)); RtmpOsTxRxHookUnRegister(&softq_stat_ops); sofq_stat_exit(); softq_file_exit(); diff --git a/tx_rx/txs.c b/tx_rx/txs.c index 88d6660..0ab5dd1 100755 --- a/tx_rx/txs.c +++ b/tx_rx/txs.c @@ -94,7 +94,7 @@ INT32 BcnTxSHandler(RTMP_ADAPTER *pAd, CHAR *Data, UINT32 Priv) #endif /* RT_CFG80211_P2P_SUPPORT */ ) { - UCHAR bss_idx = 0; + UINT32 bss_idx = 0; BSS_STRUCT *pMbss = NULL; bss_idx = Priv; pMbss = &pAd->ApCfg.MBSSID[bss_idx]; @@ -397,7 +397,7 @@ INT32 ExitTxSTypeTable(RTMP_ADAPTER *pAd) return 0; } -INT32 AddTxSTypePerPkt(RTMP_ADAPTER *pAd, UINT32 PktPid, UINT8 Format, +INT32 AddTxSTypePerPkt(RTMP_ADAPTER *pAd, UINT8 PktPid, UINT8 Format, TXS_HANDLER TxSHandler) { ULONG Flags; @@ -500,7 +500,7 @@ INT32 TxSTypeCtlPerPkt(RTMP_ADAPTER *pAd, UINT32 PktPid, UINT8 Format, BOOLEAN T } RTMP_SPIN_UNLOCK_IRQRESTORE(&TxSCtl->TxSTypePerPktLock[PktPid % TOTAL_PID_HASH_NUMS], &Flags); - DBGPRINT(RT_DEBUG_INFO, ("%s: can not find TxSType(PktPID = %d, Format = %d)\n", + DBGPRINT(RT_DEBUG_TRACE, ("%s: can not find TxSType(PktPID = %d, Format = %d)\n", __FUNCTION__, PktPid, Format)); return -1; } @@ -552,8 +552,11 @@ INT32 RemoveTxSTypePerPktType(RTMP_ADAPTER *pAd, UINT8 PktType, UINT8 PktSubType ULONG Flags; TXS_CTL *TxSCtl = &pAd->TxSCtl; TXS_TYPE *TxSType = NULL, *TmpTxSType = NULL; + const UINT8 st = PktSubType % TOTAL_PID_HASH_NUMS_PER_PKT_TYPE; + NDIS_SPIN_LOCK *lock; - RTMP_SPIN_LOCK_IRQSAVE(&TxSCtl->TxSTypePerPktTypeLock[PktType][PktSubType % TOTAL_PID_HASH_NUMS_PER_PKT_TYPE], &Flags); + lock = &TxSCtl->TxSTypePerPktTypeLock[PktType][st]; + RTMP_SPIN_LOCK_IRQSAVE(lock, &Flags); DlListForEachSafe(TxSType, TmpTxSType, &TxSCtl->TxSTypePerPktType[PktType][PktSubType % TOTAL_PID_HASH_NUMS_PER_PKT_TYPE], TXS_TYPE, List) { if ((TxSType->PktType == PktType) && (TxSType->PktSubType == PktSubType) @@ -561,11 +564,11 @@ INT32 RemoveTxSTypePerPktType(RTMP_ADAPTER *pAd, UINT8 PktType, UINT8 PktSubType { DlListDel(&TxSType->List); os_free_mem(NULL, TxSType); - RTMP_SPIN_UNLOCK_IRQRESTORE(&TxSCtl->TxSTypePerPktTypeLock[PktType][PktSubType % TOTAL_PID_HASH_NUMS], &Flags); + RTMP_SPIN_UNLOCK_IRQRESTORE(lock, &Flags); return 0; } } - RTMP_SPIN_UNLOCK_IRQRESTORE(&TxSCtl->TxSTypePerPktTypeLock[PktType][PktSubType % TOTAL_PID_HASH_NUMS_PER_PKT_TYPE], &Flags); + RTMP_SPIN_UNLOCK_IRQRESTORE(lock, &Flags); return -1; } @@ -733,7 +736,7 @@ INT32 ParseTxSPacket(RTMP_ADAPTER *pAd, UINT32 Pid, UINT8 Format, CHAR *Data) TxSType = DlListFirst (&TxSCtl->TxSTypePerPktType[PktType][PktSubType % TOTAL_PID_HASH_NUMS_PER_PKT_TYPE], TXS_TYPE, List); if (TxSType == NULL) { - printk("QQ 2\n"); + DBGPRINT(RT_DEBUG_ERROR, ("List is empty\n")); RTMP_SPIN_UNLOCK_IRQRESTORE(&TxSCtl->TxSTypePerPktTypeLock[PktType][PktSubType % TOTAL_PID_HASH_NUMS_PER_PKT_TYPE], &Flags); return -1; } @@ -794,7 +797,7 @@ UINT8 AddTxSStatus(RTMP_ADAPTER *pAd, UINT8 Type, UINT8 PktPid, UINT8 PktType, } -INT32 RemoveTxSStatus(RTMP_ADAPTER *pAd, UINT8 TxSPid, UINT8 *Type, UINT8 *PktPid, +INT32 RemoveTxSStatus(RTMP_ADAPTER *pAd, UINT32 TxSPid, UINT8 *Type, UINT8 *PktPid, UINT8 *PktType, UINT8 *PktSubType, UINT16 *TxRate, UINT32 *TxSPriv) { TXS_CTL *TxSCtl = &pAd->TxSCtl; diff --git a/tx_rx/wdev.c b/tx_rx/wdev.c index 89ae92d..515172d 100755 --- a/tx_rx/wdev.c +++ b/tx_rx/wdev.c @@ -120,7 +120,7 @@ INT rtmp_wdev_idx_unreg(RTMP_ADAPTER *pAd, struct wifi_dev *wdev) INT rtmp_wdev_idx_reg(RTMP_ADAPTER *pAd, struct wifi_dev *wdev) { - INT idx; + CHAR idx; ULONG flags; if (!wdev) diff --git a/tx_rx/wdev_rx.c b/tx_rx/wdev_rx.c index c653d2d..3321ac3 100755 --- a/tx_rx/wdev_rx.c +++ b/tx_rx/wdev_rx.c @@ -36,11 +36,12 @@ VOID Update_Rssi_Sample( IN RTMP_ADAPTER *pAd, IN RSSI_SAMPLE *pRssi, IN struct rx_signal_info *signal, - IN UCHAR phy_mode, - IN UCHAR bw) + IN USHORT phy_mode, + IN USHORT bw) { BOOLEAN bInitial = FALSE; - INT ant_idx, ant_max = 3; + UCHAR ant_idx; + INT ant_max = 3; if (!(pRssi->AvgRssi[0] | pRssi->AvgRssiX8[0] | pRssi->LastRssi[0])) bInitial = TRUE; @@ -62,7 +63,7 @@ VOID Update_Rssi_Sample( else pRssi->AvgSnrX8[ant_idx] = (pRssi->AvgSnrX8[ant_idx] - pRssi->AvgSnr[ant_idx]) + pRssi->LastSnr[ant_idx]; - pRssi->AvgSnr[ant_idx] = pRssi->AvgSnrX8[ant_idx] >> 3; + pRssi->AvgSnr[ant_idx] = (CHAR)(pRssi->AvgSnrX8[ant_idx] >> 3); } if (signal->raw_rssi[ant_idx] != 0) @@ -85,7 +86,7 @@ VOID Update_Rssi_Sample( else pRssi->AvgRssiX8[ant_idx] = (pRssi->AvgRssiX8[ant_idx] - pRssi->AvgRssi[ant_idx]) + pRssi->LastRssi[ant_idx]; - pRssi->AvgRssi[ant_idx] = pRssi->AvgRssiX8[ant_idx] >> 3; + pRssi->AvgRssi[ant_idx] = (CHAR)(pRssi->AvgRssiX8[ant_idx] >> 3); } } } @@ -272,7 +273,7 @@ VOID Announce_or_Forward_802_3_Packet( IN UCHAR wdev_idx, IN UCHAR op_mode) { - BOOLEAN to_os = FALSE; + INT to_os = FALSE; struct wifi_dev *wdev; ASSERT(wdev_idx < WDEV_NUM_MAX); @@ -583,7 +584,7 @@ PNDIS_PACKET RTMPDeFragmentDataFrame(RTMP_ADAPTER *pAd, RX_BLK *pRxBlk) PNDIS_PACKET pRetPacket = NULL; UCHAR *pFragBuffer = NULL; BOOLEAN bReassDone = FALSE; - UCHAR HeaderRoom = 0; + UINT HeaderRoom = 0; RXWI_STRUC *pRxWI = pRxBlk->pRxWI; UINT8 RXWISize = pAd->chipCap.RXWISize; @@ -686,7 +687,7 @@ done: pRxBlk->pRxWI = (RXWI_STRUC *) GET_OS_PKT_DATAPTR(pRetPacket); pRxBlk->pHeader = (PHEADER_802_11) ((UCHAR *)pRxBlk->pRxWI + RXWISize); pRxBlk->pData = (UCHAR *)pRxBlk->pHeader + HeaderRoom; - pRxBlk->DataSize = pAd->FragFrame.RxSize - HeaderRoom - RXWISize; + pRxBlk->DataSize = (USHORT)(pAd->FragFrame.RxSize - HeaderRoom - RXWISize); pRxBlk->pRxPacket = pRetPacket; } else @@ -814,7 +815,7 @@ VOID rx_eapol_frm_handle( #ifdef WPA_SUPPLICANT_SUPPORT WPA_SUPPLICANT_INFO *sup_info = NULL; CIPHER_KEY *share_key = NULL; - int BssIdx; + UCHAR BssIdx; #ifdef CONFIG_STA_SUPPORT IF_DEV_CONFIG_OPMODE_ON_STA(pAd) @@ -856,7 +857,7 @@ VOID rx_eapol_frm_handle( { //UCHAR *Key; UCHAR CipherAlg; - int idx = 0; + UCHAR idx = 0; DBGPRINT_RAW(RT_DEBUG_TRACE, ("Receive EAP-SUCCESS Packet\n")); #ifdef CONFIG_AP_SUPPORT @@ -1077,7 +1078,9 @@ bool check_duplicated_mgmt_frame(HEADER_802_11 *pHeader) if (MAC_ADDR_EQUAL(duplicated_frame[mgmt_type].prev_mgmt_src_addr, pHeader->Addr2) && retry == 1 && duplicated_frame[mgmt_type].prev_mgmt_frame_sn == current_sn) { - DBGPRINT(RT_DEBUG_OFF, ("%s:: Drop duplicated mgmt frame(subtype=%d, current_sn=%d, prev_sn=%d, retry=%d) \n",__FUNCTION__, + DBGPRINT(RT_DEBUG_TRACE, + ("%s:: Drop duplicated mgmt frame(subtype=%d, current_sn=%d, prev_sn=%d, retry=%d) \n", + __FUNCTION__, mgmt_type, current_sn, duplicated_frame[mgmt_type].prev_mgmt_frame_sn, retry)); return TRUE; } else { @@ -1093,7 +1096,7 @@ VOID dev_rx_mgmt_frm(RTMP_ADAPTER *pAd, RX_BLK *pRxBlk) HEADER_802_11 *pHeader = pRxBlk->pHeader; PNDIS_PACKET pRxPacket = pRxBlk->pRxPacket; MAC_TABLE_ENTRY *pEntry = NULL; - INT op_mode = pRxBlk->OpMode; + UCHAR op_mode = pRxBlk->OpMode; DBGPRINT(RT_DEBUG_FPGA, ("-->%s()\n", __FUNCTION__)); @@ -1317,7 +1320,8 @@ DBGPRINT(RT_DEBUG_FPGA, ("-->%s()\n", __FUNCTION__)); /* only PM bit of ACTION frame can be set */ if (((op_mode == OPMODE_AP) && IS_ENTRY_CLIENT(pEntry)) || ((op_mode == OPMODE_STA) && (IS_ENTRY_TDLS(pEntry)))) - RtmpPsIndicate(pAd, pHeader->Addr2, pRxBlk->wcid, pHeader->FC.PwrMgmt); + RtmpPsIndicate(pAd, pHeader->Addr2, pRxBlk->wcid + , (UCHAR)pHeader->FC.PwrMgmt); /* In IEEE802.11, 11.2.1.1 STA Power Management modes, @@ -1874,20 +1878,20 @@ INT ate_rx_done_handle(RTMP_ADAPTER *pAd, RX_BLK *pRxBlk) CSI_Steering = (pRxBlk->pData)[0] >> 6; NDP_Announce = (pRxBlk->pData)[1] & 0x1; - printk("================== Sounding request info ==================\n" + DBGPRINT(RT_DEBUG_OFF, ("================== Sounding request info ==================\n" "HTC low byte = 0x%x\n" "HTC high byte = 0x%x\n" "CSI_Steering = %d\n" "NDP Anouncement = %d\n", (pRxBlk->pData)[0], (pRxBlk->pData)[1], - CSI_Steering, NDP_Announce); + CSI_Steering, NDP_Announce)); /* If sounding request packet i detected, send a null packet to AP immediately */ COPY_MAC_ADDR(pATEInfo->Addr1, pHeader->Addr2); COPY_MAC_ADDR(pATEInfo->Addr2, pHeader->Addr1); COPY_MAC_ADDR(pATEInfo->Addr3, pAd->CommonCfg.Bssid); - printk("=================== APSendNullFrame ===================\n" + DBGPRINT(RT_DEBUG_OFF, ("=================== APSendNullFrame ===================\n" "From AP : \n" "pATEInfo->Addr1 = %x:%x:%x:%x:%x:%x\n" "pATEInfo->Addr2 = %x:%x:%x:%x:%x:%x\n" @@ -1898,7 +1902,7 @@ INT ate_rx_done_handle(RTMP_ADAPTER *pAd, RX_BLK *pRxBlk) pATEInfo->Addr2[0], pATEInfo->Addr2[2], pATEInfo->Addr2[2], pATEInfo->Addr2[3], pATEInfo->Addr2[4], pATEInfo->Addr2[5], pATEInfo->Addr3[0], pATEInfo->Addr3[1], pATEInfo->Addr3[2], - pATEInfo->Addr3[3], pATEInfo->Addr3[4], pATEInfo->Addr3[5]); + pATEInfo->Addr3[3], pATEInfo->Addr3[4], pATEInfo->Addr3[5])); pATEInfo->TxCount= 1; pATEInfo->TxPower0 = 18; @@ -1908,7 +1912,7 @@ INT ate_rx_done_handle(RTMP_ADAPTER *pAd, RX_BLK *pRxBlk) Set_ATE_Proc(pAd, "RXFRAME"); if (CSI_Steering >= 2 && NDP_Announce == TRUE) - printk("================== Sounding request is found ==================\n"); + DBGPRINT(RT_DEBUG_OFF, ("================== Sounding request is found ==================\n")); } } } @@ -2238,7 +2242,8 @@ DBGPRINT(RT_DEBUG_OFF, ("%s(): Not my bss! pRxInfo->MyBss=%d\n", __FUNCTION__, { UCHAR OldPwrMgmt; - OldPwrMgmt = RtmpPsIndicate(pAd, pHeader->Addr2, pEntry->wcid, pFmeCtrl->PwrMgmt); + OldPwrMgmt = RtmpPsIndicate(pAd, pHeader->Addr2, pEntry->wcid + , (UCHAR)pFmeCtrl->PwrMgmt); #ifdef UAPSD_SUPPORT RTMP_PS_VIRTUAL_TIMEOUT_RESET(pEntry); @@ -2655,7 +2660,8 @@ VOID rx_data_frm_announce( UCHAR HS2_Header[4] = {0x50,0x6f,0x9a,0x12}; memcpy(&pRxBlk->pData[pRxBlk->DataSize], HS2_Header, 4); memcpy(&pRxBlk->pData[pRxBlk->DataSize+4], &pEntry->hs_info, sizeof(struct _sta_hs_info)); - printk("rcv eapol start, %x:%x:%x:%x\n",pRxBlk->pData[pRxBlk->DataSize+4], pRxBlk->pData[pRxBlk->DataSize+5],pRxBlk->pData[pRxBlk->DataSize+6], pRxBlk->pData[pRxBlk->DataSize+7]); + DBGPRINT(RT_DEBUG_OFF, ("rcv eapol start, %x:%x:%x:%x\n", pRxBlk->pData[pRxBlk->DataSize+4] + , pRxBlk->pData[pRxBlk->DataSize+5], pRxBlk->pData[pRxBlk->DataSize+6], pRxBlk->pData[pRxBlk->DataSize+7])); pRxBlk->DataSize += 8; } } @@ -3542,6 +3548,11 @@ BOOLEAN rtmp_rx_done_handle(RTMP_ADAPTER *pAd) /* get rx descriptor and data buffer */ pHeader = rxblk.pHeader; + if (!pHeader) { + DBGPRINT(RT_DEBUG_ERROR, + ("%s(): null rxblk.pHeader!\n", __func__)); + continue; + } #ifdef MT_MAC if (pAd->chipCap.hif_type == HIF_MT) { diff --git a/tx_rx/wdev_tx.c b/tx_rx/wdev_tx.c index 259a96a..b008162 100755 --- a/tx_rx/wdev_tx.c +++ b/tx_rx/wdev_tx.c @@ -50,7 +50,7 @@ INT wdev_tx_pkts(NDIS_HANDLE dev_hnd, PPNDIS_PACKET pkt_list, UINT pkt_cnt, stru { RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)dev_hnd; PNDIS_PACKET pPacket; - BOOLEAN allowToSend; + INT allowToSend; UCHAR wcid = MAX_LEN_OF_MAC_TABLE; UINT Index; #ifdef CONFIG_FPGA_MODE |