[Feature][ZXW-452]merge P54U02 version

Only Configure: No
Affected branch: master
Affected module: unknow
Is it affected on both ZXIC and MTK: only ZXIC
Self-test: Yes
Doc Update: No

Change-Id: I17e6795ab66e2b9d1cbbfec4b7c0028d666e177d
diff --git a/ap/app/Script/scripts/lan.sh b/ap/app/Script/scripts/lan.sh
index 6c471e9..c7dddbb 100755
--- a/ap/app/Script/scripts/lan.sh
+++ b/ap/app/Script/scripts/lan.sh
@@ -140,6 +140,16 @@
     ipv6lanipaddrcmd="ifconfig $br_name | grep Scope:Link | sed 's/^.*addr: //g' | sed 's/\/.*$//g'"
     ipv6lanipaddr=`eval $ipv6lanipaddrcmd`
     nv set ipv6_lan_ipaddr=$ipv6lanipaddr
+	gw_in_cap=`nv get gw_in_cap`
+	if [ "x$gw_in_cap" == "x1" ]; then
+		lan_if_cap=`nv get lan_name_cap`
+		ap_ip=`nv get lan_ipaddr_cap`
+		ap_ipv6=`nv get lan_ipv6addr_cap`
+		
+		ip route add default via $ap_ip
+		ip -6 route add default via $ap_ipv6 dev $lan_if_cap
+		echo "nameserver $ap_ip" >> /etc/resolv.conf
+	fi
 }
 
 main
diff --git a/ap/app/Script/scripts/psext_up_ipv6.sh b/ap/app/Script/scripts/psext_up_ipv6.sh
index 302b842..5861350 100755
--- a/ap/app/Script/scripts/psext_up_ipv6.sh
+++ b/ap/app/Script/scripts/psext_up_ipv6.sh
@@ -73,9 +73,10 @@
     rt_num=`expr $c_id + 150`
     ip -6 route add default dev $ps_if table $rt_num
     ip -6 rule add from $pdp_ip/64 fwmark $marknum table $rt_num
-
+	gw_in_cap=`nv get gw_in_cap`
+	if [ "x$gw_in_cap" != "x1" ]; then
     ip6tables -t filter -A FORWARD -p icmpv6 --icmpv6-type 135 -j DROP
-	
+	fi
     ip -6 route flush cache
 
 	route_info=`ip -6 route|grep default`
diff --git a/ap/app/Script/scripts/user-config-udhcpd.sh b/ap/app/Script/scripts/user-config-udhcpd.sh
old mode 100644
new mode 100755
index 62eefd7..dd03b71
--- a/ap/app/Script/scripts/user-config-udhcpd.sh
+++ b/ap/app/Script/scripts/user-config-udhcpd.sh
@@ -45,6 +45,11 @@
 lease=`expr $lease \* 3600`
 pidfile=$path_conf"/udhcpd.pid"
 leasesfile=$path_conf"/udhcpd.leases"
+gw_in_cap=`nv get gw_in_cap`
+if [ "x$gw_in_cap" == "x1" ]; then
+	dns=`nv get dhcpDns_cap`
+	gw=`nv get lan_ipaddr_cap`
+fi
 
 sh $path_sh/config-udhcpd.sh "lan" -s $start
 sh $path_sh/config-udhcpd.sh "lan" -e $end
diff --git a/ap/app/Script/scripts/wan_ipv4.sh b/ap/app/Script/scripts/wan_ipv4.sh
index e985e7b..7c0ba39 100755
--- a/ap/app/Script/scripts/wan_ipv4.sh
+++ b/ap/app/Script/scripts/wan_ipv4.sh
@@ -116,10 +116,7 @@
 		pswan_secdns=`nv get $wan_if"_secdns"`
 		pswan_nm=`nv get $wan_if"_nm"`
 		
-		ifconfig $wan_if down 2>>$test_log
-		if [ $? -ne 0 ];then
-	        echo "Error: ifconfig $wan_if down failed." >> $test_log
-        fi
+		#ifconfig $wan_if down 2>>$test_log
 		ifconfig $wan_if $pswan_ip netmask 255.255.255.0 up 2>>$test_log
 		if [ $? -ne 0 ];then
 	        echo "Error: ifconfig $wan_if $pswan_ip up failed." >> $test_log
diff --git a/ap/app/cwmp/netcwmp/libcwmp/src/queue.c b/ap/app/cwmp/netcwmp/libcwmp/src/queue.c
index 0317708..9efba72 100755
--- a/ap/app/cwmp/netcwmp/libcwmp/src/queue.c
+++ b/ap/app/cwmp/netcwmp/libcwmp/src/queue.c
@@ -86,9 +86,11 @@
 

 void queue_view(queue_t *q) {

 	qnode_t *p;

+	pthread_mutex_lock(&q->mutex);

 	p=q->first;

 	if(p==NULL) {

 		cwmp_log_debug("queue is empty.");

+		pthread_mutex_unlock(& q->mutex);

 		return; 

 	} else {

 		cwmp_log_debug("queue size = %d. ", q->size);

@@ -98,18 +100,19 @@
 		}

 		cwmp_log_debug(" %s ", (char *)p->data);

 	}

+	pthread_mutex_unlock(& q->mutex);

 }

 

 

 int queue_pop(queue_t *q, void ** data) {

-	if(q->first == NULL) { 

-		cwmp_log_debug("queue is empty.");

-		return -1;

-	}

 	qnode_t *p;

 	int type ;

 	pthread_mutex_lock(& q->mutex);

-	

+	if(q->first == NULL) { 

+		cwmp_log_debug("queue is empty.");

+		pthread_mutex_unlock(& q->mutex);

+		return -1;

+	}

 	void *c=q->first->data;

 	p=q->first;

 	type = p->datatype;

@@ -139,7 +142,12 @@
 

 /* Elegxei an h oura einai adeia */

 int queue_is_empty(queue_t *q) {

-	return (q->first == NULL);	

+	int ret;

+	

+	pthread_mutex_lock(&q->mutex);

+	ret = (q->first == NULL);

+	pthread_mutex_unlock(& q->mutex);

+	return ret;

 }

 

 void queue_free(pool_t * pool, queue_t *q) {

diff --git a/ap/app/hostapd-2.10/hostapd/libwpa_client.a b/ap/app/hostapd-2.10/hostapd/libwpa_client.a
index f24fcc8..b664b76 100755
--- a/ap/app/hostapd-2.10/hostapd/libwpa_client.a
+++ b/ap/app/hostapd-2.10/hostapd/libwpa_client.a
Binary files differ
diff --git a/ap/app/include/libcpnv.h b/ap/app/include/libcpnv.h
index f2c4c30..4494165 100755
--- a/ap/app/include/libcpnv.h
+++ b/ap/app/include/libcpnv.h
@@ -118,7 +118,7 @@
  * @return CPNV_OK 成功,CPNV_ERROR 失败

  * @retval

  * @note

- * @warning nvrofs里nvroall.bin备份到nvrofs2

+ * @warning nvrofs里nvroall.bin、nvroc0wall.bin备份到nvrofs2

  */

 unsigned int cpnv_NvroBackup(void);

 

@@ -128,8 +128,18 @@
  * @return CPNV_OK 成功,CPNV_ERROR 失败

  * @retval

  * @note

- * @warning nvrofs2里nvroall.bin恢复到nvrofs

+ * @warning nvrofs2里nvroall.bin、nvroc0wall.bin恢复到nvrofs

  */

 unsigned int cpnv_NvroRestore(void);

 

+/**

+ * @brief  nvro完整性检查

+ * @param  flag: 2 检查nvroall.bin和nvroc0wall.bin; 其他值只检查nvroall.bin

+ * @return CPNV_OK 成功,CPNV_ERROR 失败

+ * @retval

+ * @note

+ * @warning 执行cpnv_NvroBackup后,才会进行真正检查

+ */

+unsigned int cpnv_nvro_check(int flag);

+

 #endif // __LIBCPNV_H

diff --git a/ap/app/include/netapi.h b/ap/app/include/netapi.h
index 2db6114..6a8d149 100755
--- a/ap/app/include/netapi.h
+++ b/ap/app/include/netapi.h
@@ -323,6 +323,13 @@
 	char 	challenge[CHALLENGE_MAX];
 } pppd_auth;
 
+typedef union
+{
+    u_int8_t e8[8];
+    u_int16_t e16[4];
+    u_int32_t e32[2];
+} netapi_eui64_t;
+
 /*******************************************************************************
  *                       Global function declarations                          *
  ******************************************************************************/
@@ -451,6 +458,7 @@
 */
 void set_ethwan_port_mode(int mode);
 
+int netapi_ether_to_eui64(const char *dev_name, netapi_eui64_t *p_eui64);
 
 #endif
 
diff --git a/ap/app/nvro_tool/main.c b/ap/app/nvro_tool/main.c
index 35f6fd3..fc28661 100755
--- a/ap/app/nvro_tool/main.c
+++ b/ap/app/nvro_tool/main.c
@@ -4,6 +4,50 @@
 #include "libcpnv.h"
 #include "flags_api.h"
 
+static int nvro_restoring(int nvro_flag)
+{
+    int ret = -1;
+    if (nvro_flag != NVRO_RESTORING)
+    {
+        ret = flags_set_nvroflag(NVRO_RESTORING);
+        if (ret != 0)
+        {
+            printf("[error]nvro_tool set NVRO_RESTORING\n");
+            return -1;
+        }
+        else
+        {
+            printf("nvro_tool set NVRO_RESTORING success\n");
+        }
+    }
+    if (cpnv_NvroRestore() == CPNV_OK)
+    {
+        printf("cpnv_NvroRestore success\n");
+        return 0;
+    }
+    else
+    {
+        printf("cpnv_NvroRestore fail\n");
+        return -1;
+    }
+}
+
+static int nvro_check(int flag)
+{
+    int ret = -1;
+
+    if (cpnv_nvro_check(flag) == CPNV_OK)
+    { // nvro hash check ok
+        printf("nvro_tool nvro hash check ok\n");
+        ret = 0;
+    }
+    else
+    { // nvro hash check fail and try restore
+        ret = nvro_restoring(NVRO_BACKED_UP);
+    }
+    return ret;
+}
+
 int main(int argc, char *argv[])
 {
     unsigned int nvro_flag;
@@ -11,13 +55,14 @@
 
     if (argc == 1)
     {
-        printf("%s backup\n", argv[0]);
-        printf("%s restore\n", argv[0]);
-        printf("%s check\n", argv[0]);
-        printf("%s getflag\n", argv[0]);
+        printf("%s backup     backup now\n", argv[0]);
+        printf("%s restore    restore next boot\n", argv[0]);
+        printf("%s backing_up backup next boot\n", argv[0]);
+        printf("%s check      check now\n", argv[0]);
+        printf("%s getflag    show nvro_flag\n", argv[0]);
         return -1;
     }
-    if (argc > 1 && (strcmp("backup", argv[1])==0))
+    if (argc > 1 && (strcmp("backup", argv[1]) == 0))
     {
         if (cpnv_NvroBackup() == CPNV_OK)
         {
@@ -30,7 +75,7 @@
             return -1;
         }
     }
-    if (argc > 1 && (strcmp("restore", argv[1])==0))
+    if (argc > 1 && (strcmp("restore", argv[1]) == 0))
     {
         ret = flags_set_nvroflag(NVRO_RESTORING);
         if (ret != 0)
@@ -43,28 +88,59 @@
             printf("nvro_tool set NVRO_RESTORING success\n");
             return 0;
         }
-
     }
-    if (argc > 1 && (strcmp("check", argv[1])==0))
+    if (argc > 1 && (strcmp("backing_up", argv[1]) == 0))
     {
-        nvro_flag = flags_get_nvroflag();
-        if (nvro_flag != NVRO_RESTORING)
+        ret = flags_set_nvroflag(NVRO_BACKING_UP);
+        if (ret != 0)
         {
-            printf("nvro_tool restore check and do nothing:%08x\n", nvro_flag);
-            return 0;
-        }
-        if (cpnv_NvroRestore() == CPNV_OK)
-        {
-            printf("cpnv_NvroRestore success\n");
-            return 0;
+            printf("[error]nvro_tool set NVRO_BACKING_UP\n");
+            return -1;
         }
         else
         {
-            printf("cpnv_NvroRestore fail\n");
-            return -1;
+            printf("nvro_tool set NVRO_BACKING_UP success\n");
+            return 0;
         }
     }
-    if (argc > 1 && (strcmp("getflag", argv[1])==0))
+    if (argc > 1 && (strcmp("check", argv[1]) == 0))
+    {
+        nvro_flag = flags_get_nvroflag();
+
+        switch (nvro_flag)
+        {
+        case NVRO_RESTORING:
+            ret = nvro_restoring(nvro_flag);
+            break;
+        case NVRO_BACKING_UP:
+            if (cpnv_nvro_check(1) != CPNV_OK)
+            { /* nvro check fail and restoring */
+                ret = nvro_restoring(nvro_flag);
+            }
+            else
+            { /* nvro check ok */
+                if (cpnv_NvroBackup() == CPNV_OK)
+                {
+                    printf("cpnv_NvroBackup success\n");
+                    ret = 0;
+                }
+                else
+                {
+                    printf("cpnv_NvroBackup fail\n");
+                    ret = -1;
+                }
+            }
+            break;
+        case NVRO_BACKED_UP:
+            ret = nvro_check(2);
+            break;
+        default:
+            ret = -1;
+            break;
+        }
+        return ret;
+    }
+    if (argc > 1 && (strcmp("getflag", argv[1]) == 0))
     {
         nvro_flag = flags_get_nvroflag();
         switch (nvro_flag)
@@ -75,6 +151,9 @@
         case NVRO_BACKED_UP:
             printf("nvro_flag backed up:%08x\n", nvro_flag);
             break;
+        case NVRO_BACKING_UP:
+            printf("nvro_flag back up next reboot:%08x\n", nvro_flag);
+            break;
         case NVRO_RESTORING:
             printf("nvro_flag restoring:%08x\n", nvro_flag);
             break;
diff --git a/ap/app/wpa_supplicant-2.10/wpa_supplicant/libwpa_client.a b/ap/app/wpa_supplicant-2.10/wpa_supplicant/libwpa_client.a
index 7628839..cdb31c7 100755
--- a/ap/app/wpa_supplicant-2.10/wpa_supplicant/libwpa_client.a
+++ b/ap/app/wpa_supplicant-2.10/wpa_supplicant/libwpa_client.a
Binary files differ
diff --git a/ap/app/zte_amt/amt.c b/ap/app/zte_amt/amt.c
index 0557c0f..57f39b1 100755
--- a/ap/app/zte_amt/amt.c
+++ b/ap/app/zte_amt/amt.c
@@ -1892,6 +1892,7 @@
 	if(ret != CPNV_OK)

 	{

 		AmtPrintf(AMT_ERROR "%s: cpnv_ChangeFsPartitionAttr RW nvrofs failed!\n", __FUNCTION__);

+		free(receive_buffer);

 		return -1;

 	}

 	else

@@ -1905,6 +1906,7 @@
     if (pthread_create(&load_wifi_firmware_thread, NULL, LoadWifiFirmwareThread, NULL) != 0)

     {

         AmtPrintf(AMT_ERROR "Failed to create load wifi firmware thread!\n");

+		free(receive_buffer);

         return -1;

     }

 

diff --git a/ap/app/zte_comm/at_ctl/src/atconfig/mnet_whitelist.c b/ap/app/zte_comm/at_ctl/src/atconfig/mnet_whitelist.c
index 8b6b60c..ef42c51 100755
--- a/ap/app/zte_comm/at_ctl/src/atconfig/mnet_whitelist.c
+++ b/ap/app/zte_comm/at_ctl/src/atconfig/mnet_whitelist.c
@@ -125,31 +125,27 @@
 

 void mnet_whitelist_insert(char* cmd)

 {

-	int i=0, len=0, j=0, pos=0;

-	char * tmp;

-	

-	if(NULL != cmd)

-		len=strlen(cmd);

-	

+	char* ptr=NULL;

+	char * tmp=NULL;

+		

 	if(cmdtolower(cmd) == 1){

 		at_print(AT_ERR,"cmd tolower failed\n");

 		return;

 	}

-	

-	at_print(AT_ERR,"mnet_whitelist_insert cmd:%s\n", cmd);

-	while(i<len){

-		if(cmd[i] == ';'){

-			tmp = malloc(i-pos+1);

-			assert(tmp);

-			while(pos <= i){

-				tmp[j] = cmd[pos];

-				j++;pos++;

-			}

-			tmp[j] = '\0';

-			mnet_whitelist_add(tmp);

-			j=0;

+	ptr=cmd;

+	at_print(AT_ERR,"mnet_whitelist_insert lower cmd : %s %d\n", cmd);

+	while(NULL != (tmp = strchr(ptr, ';'))){

+		char single_cmd[200]={0};

+		int len = (int)(tmp-ptr)+1;

+		if(len >= sizeof(single_cmd)){

+			at_print(AT_ERR,"cmd too long , skip the cmd\n");

+			ptr+=len;

+			continue;

 		}

-		i++;

+		strncpy(single_cmd, ptr, len); 

+	    ptr+=len;

+		mnet_whitelist_add(single_cmd);

+		memset(single_cmd, 0, sizeof(single_cmd));

 	}

 	sc_cfg_set("customIndCmdList", PsmIndAtCmdPrefix);

 	sc_cfg_save();

@@ -159,34 +155,28 @@
 void mnet_whitelist_delete(char* cmd)

 {

 	at_print(AT_ERR,"mnet_whitelist_delete %s\n", cmd);

-	int i=0, len=0, j=0, pos=0;

-	char * tmp;

-	mnet_whitelist_oper_result res = {0};

-	

-	if(NULL != cmd){

-		len=strlen(cmd);

-	}

-	

+	char* ptr=NULL;

+	char * tmp=NULL;

+		

 	if(cmdtolower(cmd) == 1){

 		at_print(AT_ERR,"cmd tolower failed\n");

 		return;

 	}

-	at_print(AT_DEBUG,"mnet_whitelist_delete lower cmd : %s\n", cmd);

-	

-	while(i<len){

-		if(cmd[i] == ';'){

-			tmp = malloc(i-pos+1);

-			assert(tmp);

-			while(pos <= i){

-				tmp[j] = cmd[pos];

-				j++;pos++;

-			}

-			tmp[j] = '\0';

-			mnet_whitelist_del(tmp);

-			j=0;

+	ptr=cmd;

+	at_print(AT_ERR,"mnet_whitelist_delete lower cmd : %s\n", cmd);

+	while(NULL != (tmp = strchr(ptr, ';'))){

+		char single_cmd[200]={0};

+		int len = (int)(tmp-ptr)+1;

+		if(len >= sizeof(single_cmd)){

+			at_print(AT_ERR,"single_cmd too long , skip the cmd\n");

+			ptr+=len;

+			continue;

 		}

-		i++;;

-	}	

+		strncpy(single_cmd, ptr, len); 

+	    ptr+=len;

+		mnet_whitelist_del(single_cmd);

+		memset(single_cmd, 0, sizeof(single_cmd));

+	}

 	sc_cfg_set("customIndCmdList", PsmIndAtCmdPrefix);

 	sc_cfg_save();

 	return;

diff --git a/ap/app/zte_comm/at_ctl/src/atconfig/ps_pdp.c b/ap/app/zte_comm/at_ctl/src/atconfig/ps_pdp.c
index 6995f74..0c20965 100755
--- a/ap/app/zte_comm/at_ctl/src/atconfig/ps_pdp.c
+++ b/ap/app/zte_comm/at_ctl/src/atconfig/ps_pdp.c
@@ -460,6 +460,15 @@
 int build_ipdns_param(char *at_str, struct pdp_active_info *info)

 {

 	int offset = 0;

+	int pdp_type = info->pdp_type;

+#ifdef USE_CAP_SUPPORT

+	char cid[4] = {0};

+

+	sc_cfg_get("cap_gw_cid", cid, sizeof(cid));

+	if(atoi(cid) == info->c_id){

+		pdp_type = PDP_NORMAL;

+	}

+#endif

 	offset += sprintf(at_str+offset,"%d,",info->c_id);

 	switch(info->act_info.ip46flag)

 	{

@@ -469,7 +478,7 @@
 			offset += sprintf(at_str+offset,"\"%s\",", info->act_info.gateway);

 			offset += sprintf(at_str+offset,"\"%s\",", info->act_info.pri_dns);

 			offset += sprintf(at_str+offset,"\"%s\"", info->act_info.sec_dns);

-			offset += sprintf(at_str+offset,",%d", info->pdp_type);

+			offset += sprintf(at_str+offset,",%d", pdp_type);

 			break;

 		case V6_VALID:

 			offset += sprintf(at_str+offset, "\"IPV6\",");

@@ -477,7 +486,7 @@
 			offset += sprintf(at_str+offset,"\"%s\",", info->act_info.gateway6);

 			offset += sprintf(at_str+offset,"\"%s\",", info->act_info.pri_dns6);

 			offset += sprintf(at_str+offset,"\"%s\"", info->act_info.sec_dns6);

-			offset += sprintf(at_str+offset,",%d", info->pdp_type);

+			offset += sprintf(at_str+offset,",%d", pdp_type);

 			break;

 		case V46_VALID:

 		{

@@ -497,7 +506,7 @@
 				offset += sprintf(at_str+offset,"\"%s\",", info->act_info.gateway);

 				offset += sprintf(at_str+offset,"\"%s\",", info->act_info.pri_dns);

 				offset += sprintf(at_str+offset,"\"%s\"", info->act_info.sec_dns);

-				offset += sprintf(at_str+offset,",%d", info->pdp_type);

+				offset += sprintf(at_str+offset,",%d", pdp_type);

 			}

 			else

 			{

@@ -506,7 +515,7 @@
 				offset += sprintf(at_str+offset,"\"%s\",", info->act_info.gateway);

 				offset += sprintf(at_str+offset,"\"%s\",", info->act_info.pri_dns);

 				offset += sprintf(at_str+offset,"\"%s\",", info->act_info.sec_dns);

-				offset += sprintf(at_str+offset,"%d,", info->pdp_type);

+				offset += sprintf(at_str+offset,"%d,", pdp_type);

 				offset += sprintf(at_str+offset,"\"%s\",", g_pdpinfo_mng[info->c_id-1].ip6addr);	

 				offset += sprintf(at_str+offset,"\"%s\",", info->act_info.gateway6);

 				offset += sprintf(at_str+offset,"\"%s\",", info->act_info.pri_dns6);

@@ -1523,11 +1532,13 @@
 			pdp_type = PDP_NORMAL;

 		}

 	}

-#endif	

+#endif

+#ifndef USE_CAP_SUPPORT

 	else if(0 == strcmp(p_setInfo->comm_info.apn, g_defcid_mng.default_apn))

 	{

 		pdp_type = PDP_NORMAL;

 	}

+#endif

 	else

 	{

 		pdp_type = PDP_LOCAL;

@@ -1554,9 +1565,18 @@
 int get_idx(struct pdp_act_req *p_setInfo, int *is_setapn)

 {

 	int idx = 0;

-	char versionmode[2] = {0};

-	sc_cfg_get("version_mode", versionmode, sizeof(versionmode));

-

+#ifdef USE_CAP_SUPPORT

+	int save_cap_gw_cid = 0;

+	char gw_in_cap[4] = {0};

+	char cid[4] = {0};

+	

+	sc_cfg_get("gw_in_cap", gw_in_cap, sizeof(gw_in_cap));

+	if(atoi(gw_in_cap) == 1 && p_setInfo->is_ext == PDP_NORMAL){

+		p_setInfo->is_ext = PDP_EXT;

+		cid[0] = '1';

+		save_cap_gw_cid = 1;

+	}

+#endif

 	//¶ÔÓÚppp²¦ºÅ»òÕßÍⲿMCUÖ¸¶¨cid pdp²¦ºÅ£¬Æäcid±ØÐëʱԤÁôcid£¬²»²ÎÓëapn¹²Ïí¹¦ÄÜ

 	if(p_setInfo->ppp_cid != 0 || p_setInfo->ext_cid != 0)

 	{

@@ -1579,6 +1599,12 @@
 #endif

 		if(is_setapn)

 			*is_setapn = 1;

+#ifdef USE_CAP_SUPPORT

+		if(save_cap_gw_cid){

+			cid[0] = cid[0] + idx;

+			sc_cfg_set("cap_gw_cid", cid);

+		}

+#endif

 		return idx;

 	}

 

@@ -1594,6 +1620,12 @@
 		if(is_setapn)

 			*is_setapn = 1;

 	}

+#ifdef USE_CAP_SUPPORT

+	if(save_cap_gw_cid){

+		cid[0] = cid[0] + idx;

+		sc_cfg_set("cap_gw_cid", cid);

+	}

+#endif

 	return idx;

 }

 

diff --git a/ap/app/zte_comm/at_ctl/src/atctrl/at_com.c b/ap/app/zte_comm/at_ctl/src/atctrl/at_com.c
index 78538a1..116a4b5 100755
--- a/ap/app/zte_comm/at_ctl/src/atctrl/at_com.c
+++ b/ap/app/zte_comm/at_ctl/src/atctrl/at_com.c
@@ -808,6 +808,8 @@
 				at_print(AT_ERR,"====>FD1_ATCTL_TO_VOLTE+%d str=%s\n", snd_len, get_small_str(buf+snd_len));

 				snd_len = snd_len + next_len;

 			}

+			if(ret < 0 && ((strstr(volte_msg.msg_data, "ERROR") != NULL) || (strstr(volte_msg.msg_data, "OK") != NULL)))

+				ret = ipc_send_message2(MODULE_ID_AT_CTL, MODULE_ID_VOLTE, MSG_CMD_FD1_ATCTL_TO_VOLTE, volte_msg.msg_len+sizeof(VOLTE_MSG_DATA_HEAD), (unsigned char *)&volte_msg, 0);

 		}

 		else

 		{

@@ -833,6 +835,8 @@
 				at_print(AT_ERR,"====>FD2_ATCTL_TO_VOLTE+%d str=%s\n", snd_len, get_small_str(buf+snd_len));

 				snd_len = snd_len + next_len;

 			}

+			if(ret < 0 && ((strstr(volte_msg.msg_data, "ERROR") != NULL) || (strstr(volte_msg.msg_data, "OK") != NULL)))

+				ret = ipc_send_message2(MODULE_ID_AT_CTL, MODULE_ID_VOLTE, MSG_CMD_FD2_ATCTL_TO_VOLTE, volte_msg.msg_len+sizeof(VOLTE_MSG_DATA_HEAD), (unsigned char *)&volte_msg, 0);

 		}

 		return (ret == 0)?len:-1;	

 #else

diff --git a/ap/app/zte_comm/at_ctl/src/atctrl/at_rcvmsg.c b/ap/app/zte_comm/at_ctl/src/atctrl/at_rcvmsg.c
index 6085a1d..a40fd61 100755
--- a/ap/app/zte_comm/at_ctl/src/atctrl/at_rcvmsg.c
+++ b/ap/app/zte_comm/at_ctl/src/atctrl/at_rcvmsg.c
@@ -865,6 +865,10 @@
     int position = at_context_get_pos_by_fd(at_fd);

 	char temp_prefix[21]= {0};

 	int tempPrefixlen = 0;

+	int ismatch = 0;

+	char* ptr = NULL;

+	char* ptr1 = NULL;

+	int len_start = 0, len_end = 0;

 

 	tempPrefixlen = (prefix_len>20)? 20: prefix_len;

 	snprintf(temp_prefix,tempPrefixlen+1,"%s",(char *)at_cmd_prefix);

@@ -891,13 +895,30 @@
 		//Ö÷¶¯Éϱ¨ÃüÁîÈôÔÚ×éÊýÖУ¬Ôò¹ã²¥µ½FARPS&VOLTE,·ñÔòÖ»¹ã²¥µ½VOLTEЭÒéÕ»

 		if(strlen(PsmIndAtCmdPrefix) != 0)

 		{

-			if(at_strstr(PsmIndAtCmdPrefix, temp_prefix))

+			ptr = PsmIndAtCmdPrefix;

+			while(NULL != (ptr1 =  at_strstr(ptr, temp_prefix)))

 			{

+				len_start += (int)(ptr1-PsmIndAtCmdPrefix);

+				len_end = len_start+strlen(temp_prefix);

+				if(0 == len_start){

+					if(!isdigit(PsmIndAtCmdPrefix[len_end]) && !isalpha(PsmIndAtCmdPrefix[len_end])){

+						ismatch=1;

+						break;

+					}

+				}else{

+					if(!isdigit(PsmIndAtCmdPrefix[len_end]) && !isalpha(PsmIndAtCmdPrefix[len_end])

+						&& !isdigit(PsmIndAtCmdPrefix[len_start-1]) && !isalpha(PsmIndAtCmdPrefix[len_start-1])){

+						ismatch=1;

+						break;

+					}

+				}

+				ptr+=len_end;

+

+			}

+			if(ismatch){

 				set_fwd_fd(BROADCAST_FWD);				

 				at_print(AT_ERR,"[XXX]set_fwd_fd  111\n");

-			}

-			else

-			{

+			}else{

 				set_fwd_fd(BROADCAST_VOLTE);

 				at_print(AT_ERR,"[XXX]set_fwd_fd  222\n");

 			}

diff --git a/ap/app/zte_comm/nvserver/nvserver.c b/ap/app/zte_comm/nvserver/nvserver.c
index d54ff01..1e96da1 100755
--- a/ap/app/zte_comm/nvserver/nvserver.c
+++ b/ap/app/zte_comm/nvserver/nvserver.c
@@ -31,73 +31,73 @@
 file,char*key,char*value);static int nvunset(char*file,char*key);static int 
 nvclear(char*file);static int nvreset(char*file);static int nvcommit(char*file);
 T_NV_NODE*nv_list;int nvserver_main(int argc,char*argv[]){int msgId=
-(0x1264+3956-0x21d8);T_NV_MSG_INFO rcvBuf;T_NV_MSG_RESULT sndBuf;struct msqid_ds
- msgInfo;prctl(PR_SET_NAME,"\x6e\x76\x73\x65\x72\x76\x65\x72",
-(0x719+5411-0x1c3c),(0xbdc+2885-0x1721),(0x1078+2587-0x1a93));memset(&rcvBuf,
-(0x8eb+7554-0x266d),sizeof(rcvBuf));memset(&sndBuf,(0x1092+167-0x1139),sizeof(
-sndBuf));memset(&msgInfo,(0x551+6097-0x1d22),sizeof(msgInfo));msgId=msgget(
-MODULE_ID_NV,IPC_CREAT|(0x450+8248-0x2308));if(-(0x125f+4961-0x25bf)==msgId){
-printf(
+(0x18f3+603-0x1b4e);T_NV_MSG_INFO rcvBuf;T_NV_MSG_RESULT sndBuf;struct msqid_ds 
+msgInfo;prctl(PR_SET_NAME,"\x6e\x76\x73\x65\x72\x76\x65\x72",(0x17c+7964-0x2098)
+,(0x1b2+3384-0xeea),(0x1b33+42-0x1b5d));memset(&rcvBuf,(0xfe5+3425-0x1d46),
+sizeof(rcvBuf));memset(&sndBuf,(0x49f+3594-0x12a9),sizeof(sndBuf));memset(&
+msgInfo,(0x596+5416-0x1abe),sizeof(msgInfo));msgId=msgget(MODULE_ID_NV,IPC_CREAT
+|(0xb41+1212-0xe7d));if(-(0xb8b+3681-0x19eb)==msgId){printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x65\x72\x72\x6f\x72\x3a\x20\x6d\x73\x67\x67\x65\x74\x20\x6d\x73\x67\x49\x64\x20\x66\x61\x69\x6c\x2c\x20\x65\x72\x72\x6e\x6f\x20\x3d\x20\x25\x64" "\n"
-,errno);return-(0x3f7+8816-0x2666);}if(-(0x1f3f+838-0x2284)!=msgctl(msgId,
-IPC_STAT,&msgInfo)){msgInfo.msg_qbytes=262144;if(-(0xf26+1228-0x13f1)==msgctl(
+,errno);return-(0x74c+3721-0x15d4);}if(-(0x1956+1177-0x1dee)!=msgctl(msgId,
+IPC_STAT,&msgInfo)){msgInfo.msg_qbytes=262144;if(-(0x638+2633-0x1080)==msgctl(
 msgId,IPC_SET,&msgInfo))printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x65\x72\x72\x6f\x72\x3a\x20\x6d\x73\x67\x63\x74\x6c\x20\x6d\x73\x67\x49\x64\x20\x66\x61\x69\x6c\x2c\x20\x65\x72\x72\x6e\x6f\x20\x3d\x20\x25\x64" "\n"
-,errno);}if(nvDirInit()!=(0xbd7+1403-0x1152)){printf(
+,errno);}if(nvDirInit()!=(0x922+2462-0x12c0)){printf(
 "\x6e\x76\x44\x69\x72\x49\x6e\x69\x74\x20\x66\x61\x69\x6c\x65\x21" "\n");return-
-(0x1a44+1778-0x2135);}nvConfig();nvInit();while((0xf1a+5589-0x24ee)){if(-
-(0x2088+16-0x2097)==msgrcv(msgId,&rcvBuf,sizeof(T_NV_MSG_INFO)-sizeof(long),
-MSG_TYPE_NV,(0x1eb3+370-0x2025))){printf(
+(0x5ca+6642-0x1fbb);}nvConfig();nvInit();while((0x5ea+2487-0xfa0)){if(-
+(0xb2+4408-0x11e9)==msgrcv(msgId,&rcvBuf,sizeof(T_NV_MSG_INFO)-sizeof(long),
+MSG_TYPE_NV,(0x1879+2826-0x2383))){printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x65\x72\x72\x6f\x72\x3a\x20\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x6d\x73\x67\x72\x63\x76\x20\x66\x61\x69\x6c\x2c\x20\x65\x72\x72\x6e\x6f\x20\x3d\x20\x25\x64\x21" "\n"
-,errno);continue;}analyMsg(&rcvBuf,&sndBuf);if(-(0xc53+4627-0x1e65)==msgsnd(
-msgId,&sndBuf,sizeof(T_NV_MSG_RESULT)-sizeof(long),(0x7e5+114-0x857))){printf(
+,errno);continue;}analyMsg(&rcvBuf,&sndBuf);if(-(0x4c9+939-0x873)==msgsnd(msgId,
+&sndBuf,sizeof(T_NV_MSG_RESULT)-sizeof(long),(0x9c9+5912-0x20e1))){printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x65\x72\x72\x6f\x72\x3a\x20\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x6d\x73\x67\x73\x6e\x64\x20\x66\x61\x69\x6c\x2c\x20\x65\x72\x72\x6e\x6f\x20\x3d\x20\x25\x64\x21" "\n"
-,errno);continue;}}return((0x1665+984-0x1a3d));}static void configdir(char*dir){
+,errno);continue;}}return((0x51d+4365-0x162a));}static void configdir(char*dir){
 DIR*dp;int ret;struct dirent*entry;struct stat statbuf;if((dp=opendir(dir))==
 NULL){fprintf(stderr,
 "\x63\x61\x6e\x6e\x6f\x74\x20\x6f\x70\x65\x6e\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x3a\x20\x25\x73" "\n"
 ,dir);return;}chdir(dir);while((entry=readdir(dp))!=NULL){ret=lstat(entry->
-d_name,&statbuf);if(ret<(0x1dc0+309-0x1ef5)){fprintf(stderr,
+d_name,&statbuf);if(ret<(0x23b5+574-0x25f3)){fprintf(stderr,
 "\x6c\x73\x74\x61\x74\x20\x65\x72\x72\x6f\x72\x3a\x20\x25\x73" "\n",strerror(
 errno));chdir("\x2e\x2e");closedir(dp);return;}if(!S_ISDIR(statbuf.st_mode)){if(
-strcmp("\x2e",entry->d_name)==(0xc1c+6093-0x23e9)||strcmp("\x2e\x2e",entry->
-d_name)==(0xa27+312-0xb5f))continue;if(!isNvConfiged(entry->d_name)){if(
+strcmp("\x2e",entry->d_name)==(0x6a8+3535-0x1477)||strcmp("\x2e\x2e",entry->
+d_name)==(0xbc2+2073-0x13db))continue;if(!isNvConfiged(entry->d_name)){if(
 addConfigFile(entry->d_name,NULL)!=RESULT_SUCCESS)printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x65\x72\x72\x6f\x72\x3a\x63\x6f\x6e\x66\x69\x67\x20\x25\x73\x20\x65\x72\x72\x6f\x72\x21" "\n"
 ,entry->d_name);}}}chdir("\x2e\x2e");closedir(dp);}static void nvConfig(){char*
-val=NULL;FILE*fp=NULL;char buf[NV_MAX_CONFIG_LEN]={(0x2192+152-0x222a)};fp=fopen
+val=NULL;FILE*fp=NULL;char buf[NV_MAX_CONFIG_LEN]={(0x71b+4664-0x1953)};fp=fopen
 (NV_CONFIG_FILE,"\x72\x6f");if(!fp){printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x65\x72\x72\x6f\x72\x3a\x6f\x70\x65\x6e\x20\x25\x73\x20\x66\x69\x6c\x65\x20\x66\x61\x69\x6c\x20\x65\x72\x72\x6e\x6f\x20\x3d\x20\x25\x64\x21" "\n"
 ,NV_CONFIG_FILE,errno);return;}while(fgets(buf,NV_MAX_CONFIG_LEN,fp)){if(buf[
-(0xa91+3923-0x19e4)]=='\n'||buf[(0x190+2562-0xb92)]==((char)(0x8f8+2485-0x128a))
-)continue;val=strchr(buf,((char)(0x124b+4342-0x2304)));if(!val){printf(
+(0xadc+1540-0x10e0)]=='\n'||buf[(0x237+3452-0xfb3)]==((char)(0xd14+1114-0x114b))
+)continue;val=strchr(buf,((char)(0x69d+6638-0x204e)));if(!val){printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x65\x72\x72\x6f\x72\x3a\x25\x73\x20\x66\x69\x6c\x65\x20\x66\x6f\x72\x6d\x61\x74\x20\x65\x72\x72\x6f\x72\x3a\x20\x73\x74\x72\x20\x3d\x20\x25\x73\x21" "\n"
-,NV_CONFIG_FILE,buf);continue;}buf[strlen(buf)-(0x10c+198-0x1d1)]='\0';*val++=
+,NV_CONFIG_FILE,buf);continue;}buf[strlen(buf)-(0x516+6614-0x1eeb)]='\0';*val++=
 '\0';if(!isCfgConfiged(buf)){if(addConfigFile(val,buf)!=RESULT_SUCCESS)printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x65\x72\x72\x6f\x72\x3a\x63\x6f\x6e\x66\x69\x67\x20\x25\x73\x20\x65\x72\x72\x6f\x72\x21" "\n"
 ,buf);}}fclose(fp);configdir(NV_FS_MAIN_PATH);}static int nvDirInit(){if(access(
-NV_FS_PATH,F_OK)!=(0xd75+5483-0x22e0)){if(mkdir(NV_FS_PATH,(0x1e15+2387-0x257b))
-!=(0x108+2110-0x946)){printf(
+NV_FS_PATH,F_OK)!=(0x862+6253-0x20cf)){if(mkdir(NV_FS_PATH,(0x6da+6986-0x2037))
+!=(0x7a0+2567-0x11a7)){printf(
 "\x6e\x65\x72\x76\x65\x72\x20\x6d\x6b\x64\x69\x72\x20\x25\x73\x20\x66\x61\x6c\x69\x2c\x65\x72\x72\x6e\x6f\x3d\x25\x64" "\n"
-,NV_FS_PATH,errno);return-(0x440+6970-0x1f79);}if(mkdir(NV_FS_MAIN_PATH,
-(0xc54+106-0xad1))!=(0xd45+617-0xfae)){printf(
+,NV_FS_PATH,errno);return-(0x116d+2075-0x1987);}if(mkdir(NV_FS_MAIN_PATH,
+(0x989+7455-0x24bb))!=(0x4b5+7496-0x21fd)){printf(
 "\x6e\x65\x72\x76\x65\x72\x20\x6d\x6b\x64\x69\x72\x20\x25\x73\x20\x66\x61\x6c\x69\x2c\x65\x72\x72\x6e\x6f\x3d\x25\x64" "\n"
-,NV_FS_MAIN_PATH,errno);return-(0x14a+3087-0xd58);}if(mkdir(NV_FS_BACKUP_PATH,
-(0xf23+5183-0x2175))!=(0xd7b+2919-0x18e2)){printf(
+,NV_FS_MAIN_PATH,errno);return-(0x19fb+224-0x1ada);}if(mkdir(NV_FS_BACKUP_PATH,
+(0x156c+2000-0x1b4f))!=(0xc4+9751-0x26db)){printf(
 "\x6e\x65\x72\x76\x65\x72\x20\x6d\x6b\x64\x69\x72\x20\x25\x73\x20\x66\x61\x6c\x69\x2c\x65\x72\x72\x6e\x6f\x3d\x25\x64" "\n"
-,NV_FS_BACKUP_PATH,errno);return-(0x134f+2749-0x1e0b);}}else{if(access(
-NV_FS_MAIN_PATH,F_OK)!=(0x150+79-0x19f)){if(mkdir(NV_FS_MAIN_PATH,
-(0x1bd3+2160-0x2256))!=(0xd5d+582-0xfa3)){printf(
+,NV_FS_BACKUP_PATH,errno);return-(0xffc+1393-0x156c);}}else{if(access(
+NV_FS_MAIN_PATH,F_OK)!=(0xbf3+4426-0x1d3d)){if(mkdir(NV_FS_MAIN_PATH,
+(0xa28+4-0x83f))!=(0x3ca+3818-0x12b4)){printf(
 "\x6e\x65\x72\x76\x65\x72\x20\x6d\x6b\x64\x69\x72\x20\x25\x73\x20\x66\x61\x6c\x69\x2c\x65\x72\x72\x6e\x6f\x3d\x25\x64" "\n"
-,NV_FS_MAIN_PATH,errno);return-(0xa77+5594-0x2050);}}if(access(NV_FS_BACKUP_PATH
-,F_OK)!=(0xa02+7317-0x2697)){if(mkdir(NV_FS_BACKUP_PATH,(0xf57+3051-0x1955))!=
-(0x4b8+694-0x76e)){printf(
+,NV_FS_MAIN_PATH,errno);return-(0x3f+2678-0xab4);}}if(access(NV_FS_BACKUP_PATH,
+F_OK)!=(0x2000+1094-0x2446)){if(mkdir(NV_FS_BACKUP_PATH,(0x14b4+1007-0x16b6))!=
+(0xd04+4607-0x1f03)){printf(
 "\x6e\x65\x72\x76\x65\x72\x20\x6d\x6b\x64\x69\x72\x20\x25\x73\x20\x66\x61\x6c\x69\x2c\x65\x72\x72\x6e\x6f\x3d\x25\x64" "\n"
-,NV_FS_BACKUP_PATH,errno);return-(0x3fc+7803-0x2276);}}}return(0x4b8+1097-0x901)
-;}static void nvInit(){T_NV_NODE*list=NULL;char nvMainFile[NV_PATH_LEN]={
-(0x1726+3894-0x265c)};char nvBackupFile[NV_PATH_LEN]={(0xebc+4855-0x21b3)};
+,NV_FS_BACKUP_PATH,errno);return-(0x4cc+7388-0x21a7);}}}return
+(0x126f+2767-0x1d3e);}static void nvInit(){T_NV_NODE*list=NULL;char nvMainFile[
+NV_PATH_LEN]={(0xe69+885-0x11de)};char nvBackupFile[NV_PATH_LEN]={
+(0xa1b+5459-0x1f6e)};
 #ifdef FOTA_AB
-T_FLAGS_INFO flags_info={(0x1d92+2161-0x2603)};int ret=(0xccd+2810-0x17c7);
+T_FLAGS_INFO flags_info={(0x157d+1382-0x1ae3)};int ret=(0xc67+5925-0x238c);
 #endif
 for(list=nv_list;list;list=list->next){snprintf(nvMainFile,NV_PATH_LEN,
 "\x25\x73\x2f\x25\x73",NV_FS_MAIN_PATH,list->nvFile);snprintf(nvBackupFile,
@@ -105,73 +105,73 @@
 nvMainFile)){if(!checkNvFs(nvBackupFile))restoreNvFs(nvBackupFile,nvMainFile);}
 else if(checkNvFs(nvBackupFile)){restoreNvFs(nvMainFile,nvBackupFile);}else{
 loadFactroyParam(list);nvcommit(list->nvFile);continue;}loadNvFs(list->nvFile);
-if(!strcmp(list->nvFile,NV_CFG)&&get_update_status()==(0x8eb+5436-0x1e25)){
+if(!strcmp(list->nvFile,NV_CFG)&&get_update_status()==(0x8ad+626-0xb1d)){
 reloadFactroyParam(list);delete_not_needed(list);nvcommit(list->nvFile);
 #ifdef FOTA_AB
 ret=flags_get(&flags_info);flags_info.boot_fota_flag.fota_status=
-(0x8a4+6695-0x22cb);ret=flags_set(&flags_info);
+(0x381+3675-0x11dc);ret=flags_set(&flags_info);
 #endif
-}}}uint hash(const char*s){uint hash=(0x53+270-0x161);while(*s){hash=NV_HASH_MUL
-*hash+*s++;}return hash;}static int loadFactroyParam(T_NV_NODE*list){char*val=
-NULL;FILE*fp=NULL;T_NV_CONFIG*config=NULL;char buf[NV_MAX_ITEM_LEN]={
-(0x74c+5431-0x1c83)};for(config=list->fileList;config;config=config->next){fp=
+}}}uint hash(const char*s){uint hash=(0x4d3+2345-0xdfc);while(*s){hash=
+NV_HASH_MUL*hash+*s++;}return hash;}static int loadFactroyParam(T_NV_NODE*list){
+char*val=NULL;FILE*fp=NULL;T_NV_CONFIG*config=NULL;char buf[NV_MAX_ITEM_LEN]={
+(0x861+3985-0x17f2)};for(config=list->fileList;config;config=config->next){fp=
 fopen(config->configFile,"\x72\x6f");if(!fp){printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x65\x72\x72\x6f\x72\x3a\x6f\x70\x65\x6e\x20\x25\x73\x20\x66\x69\x6c\x65\x20\x66\x61\x69\x6c\x20\x65\x72\x72\x6e\x6f\x20\x3d\x20\x25\x64\x21" "\n"
 ,config->configFile,errno);return RESULT_FILE_OPEN_FAIL;}while(fgets(buf,
-NV_MAX_ITEM_LEN,fp)){if(buf[(0xa7d+4960-0x1ddd)]=='\n'||buf[(0x4b+7374-0x1d19)]
-==((char)(0x1b90+498-0x1d5f)))continue;val=strchr(buf,
-((char)(0x5ef+4774-0x1858)));if(!val){printf(
+NV_MAX_ITEM_LEN,fp)){if(buf[(0x14f0+680-0x1798)]=='\n'||buf[(0x1c3+1200-0x673)]
+==((char)(0x345+8945-0x2613)))continue;val=strchr(buf,
+((char)(0x1961+2653-0x2381)));if(!val){printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x65\x72\x72\x6f\x72\x3a\x25\x73\x20\x66\x69\x6c\x65\x20\x66\x6f\x72\x6d\x61\x74\x20\x65\x72\x72\x6f\x72\x3a\x73\x74\x72\x69\x6e\x67\x20\x3d\x20\x25\x73" "\n"
-,config->configFile,buf);continue;}if(buf[strlen(buf)-(0x294+695-0x54a)]=='\n')
-buf[strlen(buf)-(0x9f+2063-0x8ad)]='\0';*val++='\0';nvset(list->nvFile,buf,val,
-(0xe9a+1174-0x132f));}printf(
+,config->configFile,buf);continue;}if(buf[strlen(buf)-(0xfbb+4254-0x2058)]=='\n'
+)buf[strlen(buf)-(0x46d+7913-0x2355)]='\0';*val++='\0';nvset(list->nvFile,buf,
+val,(0x118c+5421-0x26b8));}printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x6c\x6f\x61\x64\x46\x61\x63\x74\x72\x6f\x79\x50\x61\x72\x61\x6d\x20\x25\x73\x21" "\n"
 ,config->configFile);fclose(fp);}return RESULT_SUCCESS;}static bool checkNvFs(
-char*file){int len=(0x810+4646-0x1a36);int cnt=(0xf3d+5720-0x2595);FILE*fp=NULL;
-char*buf=NULL;struct stat statbuff={(0x640+1450-0xbea)};if(stat(file,&statbuff)<
-(0x13fa+2513-0x1dcb))return false;len=statbuff.st_size;if(len<NV_CHECK_SIZE)
+char*file){int len=(0xc4c+2991-0x17fb);int cnt=(0x1104+958-0x14c2);FILE*fp=NULL;
+char*buf=NULL;struct stat statbuff={(0x1afc+2002-0x22ce)};if(stat(file,&statbuff
+)<(0x12d1+3330-0x1fd3))return false;len=statbuff.st_size;if(len<NV_CHECK_SIZE)
 return false;fp=fopen(file,"\x72\x6f");if(!fp)return false;buf=(char*)malloc(len
-);if(!buf){fclose(fp);return false;}cnt=(0x6d5+3192-0x134d);while(cnt<len){cnt=
-cnt+fread(buf+cnt,(0x307+8876-0x25b2),len-cnt,fp);if(ferror(fp)){clearerr(fp);
+);if(!buf){fclose(fp);return false;}cnt=(0x1a8c+2886-0x25d2);while(cnt<len){cnt=
+cnt+fread(buf+cnt,(0x1b96+975-0x1f64),len-cnt,fp);if(ferror(fp)){clearerr(fp);
 free(buf);fclose(fp);return false;}}if(len!=cnt){free(buf);fclose(fp);return 
 false;}if(getSum(buf,len-NV_CHECK_SIZE)+NV_FILE_FLAG!=*(uint*)(buf+len-
 NV_CHECK_SIZE)){free(buf);fclose(fp);return false;}free(buf);fclose(fp);return 
 true;}static int copyfile(const char*from,const char*to){int fd_to;int fd_from;
-char buf[(0x1ee2+5197-0x232f)];ssize_t nread;int ret=-(0x588+7180-0x2193);
-fd_from=open(from,O_RDONLY);if(fd_from<(0x1f95+1128-0x23fd))return-
-(0x245a+579-0x269b);fd_to=open(to,O_RDWR|O_CREAT|O_TRUNC|O_SYNC,
-(0x175d+162-0x165f));if(fd_to<(0x4c1+8532-0x2615)){ret=-(0x11d+8454-0x2220);goto
- out_error;}while((0x1eb6+1269-0x23aa)){char*out_ptr;ssize_t nwritten;nread=read
-(fd_from,buf,sizeof(buf));if(nread==(0xb4b+1322-0x1075)){break;}else{if(nread<
-(0x45a+2475-0xe05)){if(errno==EINTR||errno==EAGAIN){continue;}else{ret=-
-(0xe81+3639-0x1cb4);goto out_error;}}}out_ptr=buf;do{nwritten=write(fd_to,
-out_ptr,nread);if(nwritten>(0x185d+834-0x1b9f)){nread-=nwritten;out_ptr+=
-nwritten;}else{if(nwritten<(0x27b+4396-0x13a7)){if(errno==EINTR||errno==EAGAIN){
-continue;}else{ret=-(0x3c4+1288-0x8c7);goto out_error;}}}}while(nread>
-(0x1127+2166-0x199d));}ret=fsync(fd_to);if(ret<(0x43+6050-0x17e5)){printf(
+char buf[(0x14ba+4601-0x16b3)];ssize_t nread;int ret=-(0x165c+3363-0x237e);
+fd_from=open(from,O_RDONLY);if(fd_from<(0xa9d+1732-0x1161))return-
+(0x688+3633-0x14b7);fd_to=open(to,O_RDWR|O_CREAT|O_TRUNC|O_SYNC,
+(0x1fea+283-0x1f65));if(fd_to<(0xd16+3668-0x1b6a)){ret=-(0x1999+2606-0x23c4);
+goto out_error;}while((0x1308+2090-0x1b31)){char*out_ptr;ssize_t nwritten;nread=
+read(fd_from,buf,sizeof(buf));if(nread==(0x10e8+3398-0x1e2e)){break;}else{if(
+nread<(0x171+2782-0xc4f)){if(errno==EINTR||errno==EAGAIN){continue;}else{ret=-
+(0x7ca+6506-0x2130);goto out_error;}}}out_ptr=buf;do{nwritten=write(fd_to,
+out_ptr,nread);if(nwritten>(0x10a6+2317-0x19b3)){nread-=nwritten;out_ptr+=
+nwritten;}else{if(nwritten<(0x8fb+2056-0x1103)){if(errno==EINTR||errno==EAGAIN){
+continue;}else{ret=-(0x1b64+1017-0x1f58);goto out_error;}}}}while(nread>
+(0x1495+1492-0x1a69));}ret=fsync(fd_to);if(ret<(0x854+2878-0x1392)){printf(
 "\x53\x79\x6e\x63\x20\x46\x61\x69\x6c\x65\x64\x3a\x25\x73\x2c\x20\x66\x69\x6c\x65\x20\x70\x61\x74\x68\x3a\x25\x73"
-,strerror(errno),to);goto out_error;}if(close(fd_to)<(0x593+932-0x937)){fd_to=-
-(0x303+8160-0x22e2);ret=-(0x840+5848-0x1f12);goto out_error;}close(fd_from);
-return(0x9d9+6531-0x235c);out_error:printf(
+,strerror(errno),to);goto out_error;}if(close(fd_to)<(0x16a1+3500-0x244d)){fd_to
+=-(0x18cd+1578-0x1ef6);ret=-(0x2330+772-0x262e);goto out_error;}close(fd_from);
+return(0x4b1+1400-0xa29);out_error:printf(
 "\x63\x6f\x70\x79\x66\x69\x6c\x65\x20\x25\x73\x20\x74\x6f\x20\x25\x73\x20\x65\x72\x72\x6f\x72\x3a\x25\x64" "\n"
-,from,to,ret);close(fd_from);if(fd_to>=(0xd89+4711-0x1ff0))close(fd_to);return 
+,from,to,ret);close(fd_from);if(fd_to>=(0x3e4+1712-0xa94))close(fd_to);return 
 ret;}static int restoreNvFs(char*dstFile,char*srcFile){if(copyfile(srcFile,
-dstFile)!=(0xf3+5077-0x14c8))return RESULT_FAIL;return RESULT_SUCCESS;}static 
-int loadNvFs(char*file){int len=(0x11d0+47-0x11ff);int cnt=(0xb50+1938-0x12e2);
-FILE*fp=NULL;char*buf=NULL;char*name=NULL;char*value=NULL;char*eq=NULL;struct 
-stat statbuff={(0x2229+432-0x23d9)};char nvFile[NV_PATH_LEN]={
-(0x1019+355-0x117c)};sprintf(nvFile,"\x25\x73\x2f\x25\x73",NV_FS_MAIN_PATH,file)
-;if(stat(nvFile,&statbuff)<(0x5bc+8384-0x267c))return RESULT_FAIL;len=statbuff.
+dstFile)!=(0x516+8438-0x260c))return RESULT_FAIL;return RESULT_SUCCESS;}static 
+int loadNvFs(char*file){int len=(0x1d4f+2199-0x25e6);int cnt=(0x811+2087-0x1038)
+;FILE*fp=NULL;char*buf=NULL;char*name=NULL;char*value=NULL;char*eq=NULL;struct 
+stat statbuff={(0x1913+3040-0x24f3)};char nvFile[NV_PATH_LEN]={
+(0x3c5+4050-0x1397)};sprintf(nvFile,"\x25\x73\x2f\x25\x73",NV_FS_MAIN_PATH,file)
+;if(stat(nvFile,&statbuff)<(0x1dcc+46-0x1dfa))return RESULT_FAIL;len=statbuff.
 st_size;if(NV_CHECK_SIZE>len)return RESULT_FAIL;fp=fopen(nvFile,"\x72\x6f");if(!
 fp)return RESULT_FILE_OPEN_FAIL;len=len-NV_CHECK_SIZE;buf=(char*)malloc(len+
-(0x1063+1590-0x1698));if(!buf){fclose(fp);return RESULT_MALLOC_FAIL;}memset(buf,
-(0x52b+8061-0x24a8),len+(0xc10+426-0xdb9));cnt=(0x9f5+4230-0x1a7b);while(cnt<len
-){cnt=cnt+fread(buf+cnt,(0x1f6b+403-0x20fd),len-cnt,fp);if(ferror(fp)){clearerr(
-fp);fclose(fp);free(buf);return RESULT_FILE_READ_FAIL;}}if(cnt!=len){fclose(fp);
-free(buf);return RESULT_FILE_READ_FAIL;}buf[len]='\0';name=buf;while(*name){if(!
-(eq=strchr(name,((char)(0x1ad0+1417-0x201c))))){break;}*eq='\0';value=eq+
-(0x1285+3310-0x1f72);nvset(file,name,value,(0xb48+1256-0x102f));*eq=
-((char)(0x1cd6+531-0x1eac));name=value+strlen(value)+(0x1a24+443-0x1bde);}free(
+(0x4d5+6495-0x1e33));if(!buf){fclose(fp);return RESULT_MALLOC_FAIL;}memset(buf,
+(0x7aa+4280-0x1862),len+(0x191f+2874-0x2458));cnt=(0x162+8919-0x2439);while(cnt<
+len){cnt=cnt+fread(buf+cnt,(0xfd6+5620-0x25c9),len-cnt,fp);if(ferror(fp)){
+clearerr(fp);fclose(fp);free(buf);return RESULT_FILE_READ_FAIL;}}if(cnt!=len){
+fclose(fp);free(buf);return RESULT_FILE_READ_FAIL;}buf[len]='\0';name=buf;while(
+*name){if(!(eq=strchr(name,((char)(0xa82+1630-0x10a3))))){break;}*eq='\0';value=
+eq+(0x8+2302-0x905);nvset(file,name,value,(0x674+4192-0x16d3));*eq=
+((char)(0x2545+484-0x26ec));name=value+strlen(value)+(0x1054+5776-0x26e3);}free(
 buf);fclose(fp);return RESULT_SUCCESS;}static void analyMsg(T_NV_MSG_INFO*
 msgrecv,T_NV_MSG_RESULT*msgsnd){switch(msgrecv->nvType){case MSG_GET:msgsnd->
 result=nvget(msgrecv->file,msgrecv->key,msgsnd->value);break;case MSG_SET:msgsnd
@@ -187,15 +187,15 @@
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x65\x72\x72\x6f\x72\x3a\x20\x70\x61\x72\x61\x6d\x20\x69\x6c\x6c\x65\x67\x61\x6c\x21" "\n"
 );return RESULT_INVAL;}if(configFile){newConfig=(T_NV_CONFIG*)malloc(sizeof(
 T_NV_CONFIG));if(!newConfig)return RESULT_MALLOC_FAIL;strncpy(newConfig->
-configFile,configFile,NV_PATH_LEN-(0x8a2+3333-0x15a6));newConfig->configFile[
-NV_PATH_LEN-(0x16b3+1461-0x1c67)]='\0';newConfig->next=NULL;}for(list=nv_list;
-list;list=list->next){if(strcmp(list->nvFile,nvFile)==(0x1765+3600-0x2575))break
-;}if(!list){newList=(T_NV_NODE*)malloc(sizeof(T_NV_NODE));if(!newList){if(
+configFile,configFile,NV_PATH_LEN-(0xd44+42-0xd6d));newConfig->configFile[
+NV_PATH_LEN-(0xedd+6091-0x26a7)]='\0';newConfig->next=NULL;}for(list=nv_list;
+list;list=list->next){if(strcmp(list->nvFile,nvFile)==(0x1659+932-0x19fd))break;
+}if(!list){newList=(T_NV_NODE*)malloc(sizeof(T_NV_NODE));if(!newList){if(
 newConfig)free(newConfig);return RESULT_MALLOC_FAIL;}newList->next=NULL;strncpy(
-newList->nvFile,nvFile,NV_PATH_LEN-(0x15b+6161-0x196b));newList->nvFile[
-NV_PATH_LEN-(0x1696+2418-0x2007)]='\0';memset(newList->nvTable,
-(0xcb2+6342-0x2578),NV_HASH_LEN*(0xb5a+981-0xf2b));newList->fileList=newConfig;
-if(!nv_list)nv_list=newList;else{newList->next=nv_list->next;nv_list->next=
+newList->nvFile,nvFile,NV_PATH_LEN-(0x184d+2942-0x23ca));newList->nvFile[
+NV_PATH_LEN-(0x167b+2415-0x1fe9)]='\0';memset(newList->nvTable,
+(0x19cd+2692-0x2451),NV_HASH_LEN*(0x19bf+51-0x19ee));newList->fileList=newConfig
+;if(!nv_list)nv_list=newList;else{newList->next=nv_list->next;nv_list->next=
 newList;}}else if(!list->fileList)list->fileList=newConfig;else{if(newConfig==
 NULL)return RESULT_FAIL;newConfig->next=list->fileList->next;list->fileList->
 next=newConfig;}return RESULT_SUCCESS;}static bool isCfgConfiged(char*configFile
@@ -204,87 +204,86 @@
 configFile,configFile))return true;}}return false;}static bool isNvConfiged(char
 *nvFile){T_NV_NODE*list=NULL;for(list=nv_list;list;list=list->next){if(!strcmp(
 list->nvFile,nvFile))return true;}return false;}static uint getSum(const char*s,
-int len){uint sum=(0x1a7+2114-0x9e9);char*data=(char*)s;while(len-- >
-(0x7b4+1064-0xbdc)){sum+=(*data++);}return sum;}static int saveNvFs(char*nvName,
-char*nvFile){int i=(0xe4+4384-0x1204);int sum=(0xea6+5019-0x2241);int bufSize=
-(0x74b+2658-0x11ad);int itemSize=(0x186+9374-0x2624);int ret=(0x192+1292-0x69e);
-int fp=(0x49+3435-0xdb4);char*buf=NULL;T_NV_NODE*list=NULL;T_NV_ITEM*item=NULL;
-for(list=nv_list;list;list=list->next){if(strcmp(list->nvFile,nvName))continue;
-fp=open(nvFile,O_SYNC|O_RDWR|O_CREAT|O_TRUNC,(0x13d3+3275-0x1efe));if(fp==-
-(0x1c93+809-0x1fbb)){printf(
+int len){uint sum=(0x16+891-0x391);char*data=(char*)s;while(len-- >
+(0x13b+1801-0x844)){sum+=(*data++);}return sum;}static int saveNvFs(char*nvName,
+char*nvFile){int i=(0x143b+2502-0x1e01);int sum=(0xed1+2051-0x16d4);int bufSize=
+(0xbfd+3993-0x1b96);int itemSize=(0x1ce0+2251-0x25ab);int ret=
+(0x1422+3782-0x22e8);int fp=(0x427+8674-0x2609);char*buf=NULL;T_NV_NODE*list=
+NULL;T_NV_ITEM*item=NULL;for(list=nv_list;list;list=list->next){if(strcmp(list->
+nvFile,nvName))continue;fp=open(nvFile,O_SYNC|O_RDWR|O_CREAT|O_TRUNC,
+(0xe5f+3305-0x19a8));if(fp==-(0x134b+2222-0x1bf8)){printf(
 "\x6f\x70\x65\x6e\x20\x25\x73\x20\x66\x61\x69\x6c\x2c\x65\x72\x72\x6e\x6f\x20\x3d\x20\x25\x64" "\n"
 ,nvFile,errno);return RESULT_FILE_OPEN_FAIL;}buf=(char*)malloc(NV_BLOCK_SIZE);if
-(!buf){close(fp);return RESULT_MALLOC_FAIL;}for(i=(0xb2+8813-0x231f);i<
+(!buf){close(fp);return RESULT_MALLOC_FAIL;}for(i=(0x1469+4354-0x256b);i<
 NV_HASH_LEN;i++){for(item=list->nvTable[i];item;item=item->next){if(strcmp(
 nvFile,NV_FS_SHOW)&&!item->saveFlag)continue;itemSize=strlen(item->key)+strlen(
-item->value)+(0x353+439-0x508);if(bufSize+itemSize>NV_BLOCK_SIZE){if(write(fp,
-buf,bufSize)<(0x926+5003-0x1cb1)){printf(
+item->value)+(0x16da+469-0x18ad);if(bufSize+itemSize>NV_BLOCK_SIZE){if(write(fp,
+buf,bufSize)<(0x138b+1889-0x1aec)){printf(
 "\x65\x72\x72\x6f\x72\x20\x25\x73\x20\x25\x64\x3a\x20\x77\x72\x69\x74\x65\x20\x66\x61\x69\x6c\x20\x65\x72\x72\x6e\x6f\x20\x3d\x20\x25\x64" "\n"
 ,__FILE__,__LINE__,errno);close(fp);free(buf);return RESULT_FILE_WRITE_FAIL;}sum
-+=getSum(buf,bufSize);bufSize=(0x4f7+8209-0x2508);}sprintf(buf+bufSize,
++=getSum(buf,bufSize);bufSize=(0x440+1244-0x91c);}sprintf(buf+bufSize,
 "\x25\x73\x3d\x25\x73",item->key,item->value);bufSize+=itemSize;}}if(bufSize!=
-(0x15bc+2125-0x1e09)){if(write(fp,buf,bufSize)<(0xd99+3806-0x1c77)){printf(
+(0x4d2+3780-0x1396)){if(write(fp,buf,bufSize)<(0x13c1+1299-0x18d4)){printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x65\x72\x72\x6f\x72\x3a\x20\x77\x72\x69\x74\x65\x20\x66\x61\x69\x6c\x20\x65\x72\x72\x6e\x6f\x20\x3d\x20\x25\x64" "\n"
 ,errno);close(fp);free(buf);return RESULT_FILE_WRITE_FAIL;}sum+=getSum(buf,
-bufSize);}sum+=NV_FILE_FLAG;if(write(fp,&sum,NV_CHECK_SIZE)<(0x13bd+2059-0x1bc8)
+bufSize);}sum+=NV_FILE_FLAG;if(write(fp,&sum,NV_CHECK_SIZE)<(0x144c+1015-0x1843)
 ){printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x65\x72\x72\x6f\x72\x3a\x20\x77\x72\x69\x74\x65\x20\x66\x61\x69\x6c\x20\x65\x72\x72\x6e\x6f\x20\x3d\x20\x25\x64" "\n"
 ,errno);close(fp);free(buf);return RESULT_FILE_WRITE_FAIL;}ret=fsync(fp);free(
-buf);close(fp);if(ret<(0x2132+278-0x2248)){printf(
+buf);close(fp);if(ret<(0x14ea+4419-0x262d)){printf(
 "\x53\x79\x6e\x63\x20\x46\x61\x69\x6c\x65\x64\x3a\x25\x73\x2c\x20\x66\x69\x6c\x65\x20\x70\x61\x74\x68\x3a\x25\x73"
 ,strerror(errno),nvFile);return ret;}return RESULT_SUCCESS;}return 
 RESULT_NO_FILE;}static int nvget(char*file,char*key,char*value){int index=
-(0x178d+367-0x18fc);T_NV_NODE*list=NULL;T_NV_ITEM*item=NULL;for(list=nv_list;
-list;list=list->next){if(strcmp(list->nvFile,file))continue;index=hash(key)%
+(0x84c+255-0x94b);T_NV_NODE*list=NULL;T_NV_ITEM*item=NULL;for(list=nv_list;list;
+list=list->next){if(strcmp(list->nvFile,file))continue;index=hash(key)%
 NV_HASH_LEN;for(item=list->nvTable[index];item;item=item->next){if(strcmp(item->
-key,key))continue;strncpy(value,item->value,NV_MAX_VAL_LEN-(0xba7+6145-0x23a7));
-value[NV_MAX_VAL_LEN-(0x973+6147-0x2175)]='\0';return RESULT_SUCCESS;}}return 
+key,key))continue;strncpy(value,item->value,NV_MAX_VAL_LEN-(0x9db+3631-0x1809));
+value[NV_MAX_VAL_LEN-(0x24e7+478-0x26c4)]='\0';return RESULT_SUCCESS;}}return 
 RESULT_NO_ITEM;}static int nvset(char*file,const char*key,const char*value,int 
-saveFlag){int index=(0x18a4+469-0x1a79);int ret=(0x1a4d+2893-0x259a);int 
-key_buf_len=(0x8dc+6981-0x2421);int value_buf_len=(0xecd+3035-0x1aa8);T_NV_NODE*
-list=NULL;T_NV_ITEM*item=NULL;T_NV_ITEM*newItem=NULL;if(NULL==key||NULL==value)
-return RESULT_FAIL;key_buf_len=strlen(key)+(0xdff+3428-0x1b62);value_buf_len=
-strlen(value)+(0xdd3+764-0x10ce);for(list=nv_list;list;list=list->next){if(
+saveFlag){int index=(0xae3+3051-0x16ce);int ret=(0x1a7+2511-0xb76);int 
+key_buf_len=(0x1b7a+229-0x1c5f);int value_buf_len=(0x1a66+2644-0x24ba);T_NV_NODE
+*list=NULL;T_NV_ITEM*item=NULL;T_NV_ITEM*newItem=NULL;if(NULL==key||NULL==value)
+return RESULT_FAIL;key_buf_len=strlen(key)+(0x2070+190-0x212d);value_buf_len=
+strlen(value)+(0x1f7c+1176-0x2413);for(list=nv_list;list;list=list->next){if(
 strcmp(list->nvFile,file))continue;index=hash(key)%NV_HASH_LEN;for(item=list->
 nvTable[index];item;item=item->next){if(strcmp(item->key,key))continue;if(
 saveFlag)item->saveFlag=saveFlag;if(!strcmp(item->value,value))return 
 RESULT_SUCCESS;free(item->value);item->value=(char*)malloc(value_buf_len);if(!
 item->value)return RESULT_MALLOC_FAIL;strncpy(item->value,value,value_buf_len-
-(0x145d+4451-0x25bf));item->value[value_buf_len-(0x41f+5275-0x18b9)]='\0';return
- RESULT_SUCCESS;}newItem=(T_NV_ITEM*)malloc(sizeof(T_NV_ITEM));if(!newItem)
-return RESULT_MALLOC_FAIL;newItem->key=(char*)malloc(key_buf_len);if(!newItem->
-key){free(newItem);return RESULT_MALLOC_FAIL;}newItem->value=(char*)malloc(
+(0x2f1+8640-0x24b0));item->value[value_buf_len-(0x12d+6454-0x1a62)]='\0';return 
+RESULT_SUCCESS;}newItem=(T_NV_ITEM*)malloc(sizeof(T_NV_ITEM));if(!newItem)return
+ RESULT_MALLOC_FAIL;newItem->key=(char*)malloc(key_buf_len);if(!newItem->key){
+free(newItem);return RESULT_MALLOC_FAIL;}newItem->value=(char*)malloc(
 value_buf_len);if(!newItem->value){free(newItem->key);free(newItem);return 
-RESULT_MALLOC_FAIL;}strncpy(newItem->key,key,key_buf_len-(0x620+1716-0xcd3));
-newItem->key[key_buf_len-(0x4c5+6324-0x1d78)]='\0';strncpy(newItem->value,value,
-value_buf_len-(0x1962+852-0x1cb5));newItem->value[value_buf_len-
-(0xa01+2559-0x13ff)]='\0';newItem->next=NULL;newItem->saveFlag=saveFlag;newItem
-->update_flag=(0x1dd7+1043-0x21ea);if(!list->nvTable[index])list->nvTable[index]
-=newItem;else{newItem->next=list->nvTable[index]->next;list->nvTable[index]->
-next=newItem;}return RESULT_SUCCESS;}ret=addConfigFile(file,NULL);if(ret==
+RESULT_MALLOC_FAIL;}strncpy(newItem->key,key,key_buf_len-(0x6e1+7150-0x22ce));
+newItem->key[key_buf_len-(0x157a+3690-0x23e3)]='\0';strncpy(newItem->value,value
+,value_buf_len-(0x125a+4317-0x2336));newItem->value[value_buf_len-
+(0x2354+343-0x24aa)]='\0';newItem->next=NULL;newItem->saveFlag=saveFlag;newItem
+->update_flag=(0xe45+3698-0x1cb7);if(!list->nvTable[index])list->nvTable[index]=
+newItem;else{newItem->next=list->nvTable[index]->next;list->nvTable[index]->next
+=newItem;}return RESULT_SUCCESS;}ret=addConfigFile(file,NULL);if(ret==
 RESULT_SUCCESS)return nvset(file,key,value,saveFlag);else return ret;}static int
- nvunset(char*file,char*key){int index=(0x22+4575-0x1201);T_NV_NODE*list=NULL;
+ nvunset(char*file,char*key){int index=(0x1756+584-0x199e);T_NV_NODE*list=NULL;
 T_NV_ITEM*item=NULL;T_NV_ITEM*prev=NULL;for(list=nv_list;list;list=list->next){
 if(strcmp(list->nvFile,file))continue;index=hash(key)%NV_HASH_LEN;for(item=list
 ->nvTable[index];item;prev=item,item=item->next){if(strcmp(item->key,key))
 continue;if(!prev)list->nvTable[index]=item->next;else prev->next=item->next;
 free(item->key);free(item->value);free(item);return RESULT_SUCCESS;}}return 
-RESULT_NO_ITEM;}static int nvreset(char*file){int ret=(0xed2+2780-0x19ae);
+RESULT_NO_ITEM;}static int nvreset(char*file){int ret=(0xf1a+4235-0x1fa5);
 T_NV_NODE*list=NULL;for(list=nv_list;list;list=list->next){if(strcmp(list->
 nvFile,file))continue;ret=nvclear(file);if(ret!=RESULT_SUCCESS)return ret;if(
 loadFactroyParam(list)!=RESULT_SUCCESS)return RESULT_FAIL;return nvcommit(file);
-}return RESULT_NO_FILE;}static int nvclear(char*file){int i=(0xa59+6426-0x2373);
+}return RESULT_NO_FILE;}static int nvclear(char*file){int i=(0x7ab+1449-0xd54);
 T_NV_NODE*list=NULL;T_NV_ITEM*cur=NULL;T_NV_ITEM*item=NULL;for(list=nv_list;list
-;list=list->next){if(strcmp(list->nvFile,file))continue;for(i=
-(0x1767+1796-0x1e6b);i<NV_HASH_LEN;i++){for(item=list->nvTable[i];item;){cur=
-item;item=item->next;free(cur->key);free(cur->value);free(cur);}list->nvTable[i]
-=NULL;}return RESULT_SUCCESS;}return RESULT_NO_FILE;}static int nvcommit(char*
-file){int ret=(0xf60+313-0x1099);char nvMainFile[NV_PATH_LEN]={
-(0x17e7+731-0x1ac2)};char nvBackupFile[NV_PATH_LEN]={(0xb55+6344-0x241d)};
-sprintf(nvMainFile,"\x25\x73\x2f\x25\x73",NV_FS_MAIN_PATH,file);sprintf(
-nvBackupFile,"\x25\x73\x2f\x25\x73",NV_FS_BACKUP_PATH,file);ret=saveNvFs(file,
-nvMainFile);if(ret!=RESULT_SUCCESS)return ret;return restoreNvFs(nvBackupFile,
-nvMainFile);}
+;list=list->next){if(strcmp(list->nvFile,file))continue;for(i=(0x77b+1983-0xf3a)
+;i<NV_HASH_LEN;i++){for(item=list->nvTable[i];item;){cur=item;item=item->next;
+free(cur->key);free(cur->value);free(cur);}list->nvTable[i]=NULL;}return 
+RESULT_SUCCESS;}return RESULT_NO_FILE;}static int nvcommit(char*file){int ret=
+(0x1ffc+1070-0x242a);char nvMainFile[NV_PATH_LEN]={(0x10dd+4579-0x22c0)};char 
+nvBackupFile[NV_PATH_LEN]={(0x16e9+728-0x19c1)};sprintf(nvMainFile,
+"\x25\x73\x2f\x25\x73",NV_FS_MAIN_PATH,file);sprintf(nvBackupFile,
+"\x25\x73\x2f\x25\x73",NV_FS_BACKUP_PATH,file);ret=saveNvFs(file,nvMainFile);if(
+ret!=RESULT_SUCCESS)return ret;return restoreNvFs(nvBackupFile,nvMainFile);}
 #ifdef __cplusplus
 }
 #endif
diff --git a/ap/app/zte_comm/nvserver/nvupdate.c b/ap/app/zte_comm/nvserver/nvupdate.c
index 72c1083..16e1f8c 100755
--- a/ap/app/zte_comm/nvserver/nvupdate.c
+++ b/ap/app/zte_comm/nvserver/nvupdate.c
@@ -23,84 +23,84 @@
 #endif
 extern T_NV_NODE*nv_list;
 #ifdef FOTA_AB
-int get_update_status(void){T_FLAGS_INFO flags_info={(0x872+6138-0x206c)};
-unsigned int status=(0xab1+4701-0x1d0e);int ret=(0xbe7+3997-0x1b84);ret=
-flags_get(&flags_info);status=flags_info.boot_fota_flag.fota_status;if(status==
-(0x77+16-0x86))return(0xf92+977-0x1361);else return(0xcb3+5679-0x22e2);}
+int get_update_status(void){T_FLAGS_INFO flags_info={(0x185f+2980-0x2403)};
+unsigned int status=(0x3fc+3609-0x1215);int ret=(0x91+2852-0xbb5);ret=flags_get(
+&flags_info);status=flags_info.boot_fota_flag.fota_status;if(status==
+(0x3f0+2225-0xca0))return(0x187f+3521-0x263e);else return(0x1165+1927-0x18ec);}
 #else
-int get_update_status(void){int update_status;FILE*fd=(0x131a+4105-0x2323);int 
+int get_update_status(void){int update_status;FILE*fd=(0x818+6764-0x2284);int 
 ret;char*filename=NULL;if(access(FOTA_UPDATE_STATUS_FILE_OLD,R_OK)==
-(0x5c8+593-0x819)){filename=FOTA_UPDATE_STATUS_FILE_OLD;}else{filename=
+(0x1ab4+103-0x1b1b)){filename=FOTA_UPDATE_STATUS_FILE_OLD;}else{filename=
 FOTA_UPDATE_STATUS_FILE;}printf(
 "get_update_status, read_update_status from %s\n",filename);fd=fopen(filename,
 "\x72\x62\x2b");if(fd==NULL){printf(
 "\x5b\x6e\x76\x73\x65\x72\x76\x65\x72\x5d\x75\x70\x64\x61\x74\x65\x5f\x73\x74\x61\x74\x75\x73\x20\x6f\x70\x65\x6e\x20\x20\x65\x72\x72\x6f\x72\x3a\x25\x73" "\n"
 ,strerror(errno));goto error0;}ret=fscanf(fd,"\x25\x64",(int*)&update_status);if
-(ret<(0x1814+608-0x1a74)){printf(
+(ret<(0x13f+2549-0xb34)){printf(
 "\x67\x65\x74\x20\x69\x6e\x66\x6f\x20\x66\x72\x6f\x6d\x20\x66\x69\x6c\x65\x20\x65\x72\x72\x6f\x72\x3a\x25\x73" "\n"
 ,strerror(errno));fclose(fd);goto error0;}printf(
 "\x75\x70\x64\x61\x74\x65\x5f\x73\x74\x61\x74\x75\x73\x3d\x25\x64" "\n",
-update_status);fclose(fd);return update_status;error0:return-(0x6a7+2923-0x1211)
+update_status);fclose(fd);return update_status;error0:return-(0x12c+8190-0x2129)
 ;}
 #endif
 int nvupdate(char*nv_file,char*config_file,const char*key,const char*value,int 
-saveFlag){int index=(0x1f12+1265-0x2403);int key_buf_len=(0x10ca+5671-0x26f1);
-int value_buf_len=(0x10e1+3265-0x1da2);T_NV_NODE*list=NULL;T_NV_ITEM*item=NULL;
+saveFlag){int index=(0x92a+4682-0x1b74);int key_buf_len=(0x1066+2730-0x1b10);int
+ value_buf_len=(0x1df+7839-0x207e);T_NV_NODE*list=NULL;T_NV_ITEM*item=NULL;
 T_NV_ITEM*newItem=NULL;if(NULL==key||NULL==value)return RESULT_FAIL;printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x6e\x76\x75\x70\x64\x61\x74\x65\x20\x6e\x76\x5f\x66\x69\x6c\x65\x3a\x25\x73\x20\x6b\x65\x79\x3a\x25\x73\x20\x76\x61\x6c\x75\x65\x3a\x25\x73" "\n"
-,nv_file,key,value);key_buf_len=strlen(key)+(0x1078+5412-0x259b);value_buf_len=
-strlen(value)+(0x98b+5218-0x1dec);for(list=nv_list;list;list=list->next){if(
+,nv_file,key,value);key_buf_len=strlen(key)+(0xb9c+6633-0x2584);value_buf_len=
+strlen(value)+(0x15f8+3817-0x24e0);for(list=nv_list;list;list=list->next){if(
 strcmp(list->nvFile,nv_file))continue;index=hash(key)%NV_HASH_LEN;for(item=list
 ->nvTable[index];item;item=item->next){if(strcmp(item->key,key))continue;if(
 saveFlag)item->saveFlag=saveFlag;if(!strcmp(item->value,value)){item->
-update_flag=(0xf16+3257-0x1bce);printf(
+update_flag=(0x1966+1534-0x1f63);printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x6e\x76\x75\x70\x64\x61\x74\x65\x20\x73\x61\x6d\x65\x73\x6b\x69\x70\x3a\x69\x74\x65\x6d\x2d\x3e\x6b\x65\x79\x3a\x25\x73\x20\x69\x74\x65\x6d\x2d\x3e\x76\x61\x6c\x75\x65\x3a\x25\x73\x20\x76\x61\x6c\x75\x65\x3a\x25\x73\x20\x63\x6f\x6e\x66\x69\x67\x5f\x66\x69\x6c\x65\x3a\x25\x73" "\n"
 ,item->key,item->value,value,config_file);return RESULT_SUCCESS;}if(strstr(
-config_file,"\x75\x73\x65\x72")){if((0xfcb+1301-0x14df)==item->update_flag){
+config_file,"\x75\x73\x65\x72")){if((0x19b6+3108-0x25d9)==item->update_flag){
 printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x6e\x76\x75\x70\x64\x61\x74\x65\x20\x73\x65\x63\x6f\x6e\x64\x20\x63\x68\x61\x6e\x67\x65\x3a\x69\x74\x65\x6d\x2d\x3e\x6b\x65\x79\x3a\x25\x73\x20\x69\x74\x65\x6d\x2d\x3e\x76\x61\x6c\x75\x65\x3a\x25\x73\x20\x76\x61\x6c\x75\x65\x3a\x25\x73\x20\x63\x6f\x6e\x66\x69\x67\x5f\x66\x69\x6c\x65\x3a\x25\x73" "\n"
 ,item->key,item->value,value,config_file);}else{item->update_flag=
-(0xcc5+3362-0x19e6);printf(
+(0xa30+1140-0xea3);printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x6e\x76\x75\x70\x64\x61\x74\x65\x20\x75\x73\x65\x72\x73\x6b\x69\x70\x3a\x69\x74\x65\x6d\x2d\x3e\x6b\x65\x79\x3a\x25\x73\x20\x69\x74\x65\x6d\x2d\x3e\x76\x61\x6c\x75\x65\x31\x3a\x25\x73\x20\x76\x61\x6c\x75\x65\x3a\x25\x73\x20\x63\x6f\x6e\x66\x69\x67\x5f\x66\x69\x6c\x65\x3a\x25\x73" "\n"
 ,item->key,item->value,value,config_file);return RESULT_SUCCESS;}}printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x6b\x65\x79\x3d\x25\x73\x20\x63\x68\x61\x6e\x67\x65\x20\x76\x61\x6c\x75\x65\x3a\x25\x73\x20\x74\x6f\x20\x76\x61\x6c\x75\x65\x3d\x25\x73\x20" "\n"
 ,item->key,item->value,value);free(item->value);item->value=(char*)malloc(
 value_buf_len);if(!item->value)return RESULT_MALLOC_FAIL;strncpy(item->value,
-value,value_buf_len-(0x1061+4302-0x212e));item->value[value_buf_len-
-(0x1bcf+1454-0x217c)]='\0';item->update_flag=(0x2673+18-0x2684);return 
+value,value_buf_len-(0xa08+3521-0x17c8));item->value[value_buf_len-
+(0xa4b+2274-0x132c)]='\0';item->update_flag=(0x819+7674-0x2612);return 
 RESULT_SUCCESS;}newItem=(T_NV_ITEM*)malloc(sizeof(T_NV_ITEM));if(!newItem){
 printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x52\x45\x53\x55\x4c\x54\x5f\x4d\x41\x4c\x4c\x4f\x43\x5f\x46\x41\x49\x4c\x31\x20" "\n"
 );return RESULT_MALLOC_FAIL;}newItem->key=(char*)malloc(strlen(key)+
-(0x18ad+1366-0x1e02));if(!newItem->key){free(newItem);printf(
+(0x1fe5+432-0x2194));if(!newItem->key){free(newItem);printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x52\x45\x53\x55\x4c\x54\x5f\x4d\x41\x4c\x4c\x4f\x43\x5f\x46\x41\x49\x4c\x32" "\n"
 );return RESULT_MALLOC_FAIL;}newItem->value=(char*)malloc(value_buf_len);if(!
 newItem->value){free(newItem->key);free(newItem);printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x52\x45\x53\x55\x4c\x54\x5f\x4d\x41\x4c\x4c\x4f\x43\x5f\x46\x41\x49\x4c\x33\x20" "\n"
 );return RESULT_MALLOC_FAIL;}strncpy(newItem->key,key,key_buf_len-
-(0x1c2c+1971-0x23de));newItem->key[key_buf_len-(0x5cc+6410-0x1ed5)]='\0';strncpy
-(newItem->value,value,value_buf_len-(0x11d7+834-0x1518));newItem->value[
-value_buf_len-(0x8d9+7699-0x26eb)]='\0';newItem->next=NULL;newItem->saveFlag=
-saveFlag;newItem->update_flag=(0xd7a+1778-0x146b);printf(
+(0x14af+2538-0x1e98));newItem->key[key_buf_len-(0x498+3439-0x1206)]='\0';strncpy
+(newItem->value,value,value_buf_len-(0x1b1+2125-0x9fd));newItem->value[
+value_buf_len-(0xdf9+926-0x1196)]='\0';newItem->next=NULL;newItem->saveFlag=
+saveFlag;newItem->update_flag=(0x780+2550-0x1175);printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x61\x64\x64\x20\x6b\x65\x79\x3d\x25\x73\x2c\x20\x76\x61\x6c\x75\x65\x3d\x25\x73\x20" "\n"
 ,newItem->key,newItem->value);if(!list->nvTable[index])list->nvTable[index]=
 newItem;else{newItem->next=list->nvTable[index]->next;list->nvTable[index]->next
 =newItem;}return RESULT_SUCCESS;}return RESULT_FAIL;}int reloadFactroyParam(
 T_NV_NODE*list){char*val=NULL;FILE*fp=NULL;T_NV_CONFIG*config=NULL;char buf[
-NV_MAX_ITEM_LEN]={(0xa1b+3303-0x1702)};printf(
+NV_MAX_ITEM_LEN]={(0x1757+2833-0x2268)};printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x72\x65\x6c\x6f\x61\x64\x46\x61\x63\x74\x72\x6f\x79\x50\x61\x72\x61\x6d\x20\x6e\x76\x46\x69\x6c\x65\x3a\x25\x73" "\n"
 ,list->nvFile);for(config=list->fileList;config;config=config->next){printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x72\x65\x6c\x6f\x61\x64\x46\x61\x63\x74\x72\x6f\x79\x50\x61\x72\x61\x6d\x20\x63\x6f\x6e\x66\x69\x67\x46\x69\x6c\x65\x20\x73\x74\x61\x72\x74\x3a\x25\x73\x21" "\n"
 ,config->configFile);fp=fopen(config->configFile,"\x72\x6f");if(!fp){printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x65\x72\x72\x6f\x72\x3a\x6f\x70\x65\x6e\x20\x25\x73\x20\x66\x69\x6c\x65\x20\x66\x61\x69\x6c\x20\x65\x72\x72\x6e\x6f\x20\x3d\x20\x25\x64\x21" "\n"
 ,config->configFile,errno);return RESULT_FILE_OPEN_FAIL;}while(fgets(buf,
-NV_MAX_ITEM_LEN,fp)){if(buf[(0xfaa+123-0x1025)]=='\n'||buf[(0x109c+5580-0x2668)]
-==((char)(0x10c4+5080-0x2479)))continue;val=strchr(buf,
-((char)(0xb5d+1165-0xfad)));if(!val){printf(
+NV_MAX_ITEM_LEN,fp)){if(buf[(0xaaa+2950-0x1630)]=='\n'||buf[(0x231+6991-0x1d80)]
+==((char)(0x204+452-0x3a5)))continue;val=strchr(buf,((char)(0xa7+1272-0x562)));
+if(!val){printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x65\x72\x72\x6f\x72\x3a\x25\x73\x20\x66\x69\x6c\x65\x20\x66\x6f\x72\x6d\x61\x74\x20\x65\x72\x72\x6f\x72\x3a\x73\x74\x72\x69\x6e\x67\x20\x3d\x20\x25\x73" "\n"
-,config->configFile,buf);continue;}buf[strlen(buf)-(0x2103+323-0x2245)]='\0';*
-val++='\0';nvupdate(list->nvFile,config->configFile,buf,val,(0xa01+4475-0x1b7b))
-;}printf(
+,config->configFile,buf);continue;}buf[strlen(buf)-(0x91c+3095-0x1532)]='\0';*
+val++='\0';nvupdate(list->nvFile,config->configFile,buf,val,(0x466+1690-0xaff));
+}printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x72\x65\x6c\x6f\x61\x64\x46\x61\x63\x74\x72\x6f\x79\x50\x61\x72\x61\x6d\x20\x63\x6f\x6e\x66\x69\x67\x46\x69\x6c\x65\x20\x65\x6e\x64\x3a\x25\x73\x21" "\n"
 ,config->configFile);fclose(fp);}return RESULT_SUCCESS;}void dump_list(T_NV_ITEM
 *list){if(list==NULL){printf(
@@ -108,11 +108,11 @@
 list->next;while(p!=NULL){printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x64\x75\x6d\x70\x20\x6b\x65\x79\x3d\x25\x73\x2c\x20\x76\x61\x6c\x75\x65\x3d\x25\x73\x2c\x20\x70\x3d\x30\x78\x25\x78" "\n"
 ,p->key,p->value,((unsigned int)p));p=p->next;}}int delete_not_needed(T_NV_NODE*
-list){int index=(0x12ab+2750-0x1d69);T_NV_ITEM*item=NULL;T_NV_ITEM head={
-(0x10b+3216-0xd9b)};T_NV_ITEM*prev=&head;printf(
+list){int index=(0x2138+1057-0x2559);T_NV_ITEM*item=NULL;T_NV_ITEM head={
+(0x2088+2-0x208a)};T_NV_ITEM*prev=&head;printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x64\x65\x6c\x65\x74\x65\x5f\x6e\x6f\x74\x5f\x6e\x65\x65\x64\x65\x64\x20\x65\x6e\x74\x65\x72\x20\x2a\x2a\x2a" "\n"
-);for(index=(0x28f+7457-0x1fb0);index<NV_HASH_LEN;index++){head.next=list->
-nvTable[index];prev=&head;for(item=prev->next;item;){if((0x1843+126-0x18c0)==
+);for(index=(0xd20+3883-0x1c4b);index<NV_HASH_LEN;index++){head.next=list->
+nvTable[index];prev=&head;for(item=prev->next;item;){if((0x249+8252-0x2284)==
 item->update_flag){prev=item;item=item->next;}else{printf(
 "\x6e\x76\x73\x65\x72\x76\x65\x72\x20\x64\x65\x6c\x65\x74\x65\x20\x6b\x65\x79\x3d\x25\x73\x2c\x20\x76\x61\x6c\x75\x65\x3d\x25\x73\x20" "\n"
 ,item->key,item->value);prev->next=item->next;free(item->key);free(item->value);
diff --git a/ap/app/zte_comm/phonebook/src/pb_db.c b/ap/app/zte_comm/phonebook/src/pb_db.c
index f56987d..39f5f8b 100755
--- a/ap/app/zte_comm/phonebook/src/pb_db.c
+++ b/ap/app/zte_comm/phonebook/src/pb_db.c
@@ -1,8 +1,8 @@
 
 #include "pb_com.h"

 T_zPb_DbResult atPb_CreatDb(){T_zPb_DbResult result=ZPB_DB_OK;CHAR sql[
-ZPB_MAX_BYTES_DB]={(0x11dc+3109-0x1e01)};UINT32 count=(0x96f+5598-0x1f4d);result
-=atPb_ExecDbSql(ZPB_CREATE_PBM_TABLE,NULL,NULL);if(ZPB_DB_OK!=result){slog(
+ZPB_MAX_BYTES_DB]={(0x523+6985-0x206c)};UINT32 count=(0x3ab+3187-0x101e);result=
+atPb_ExecDbSql(ZPB_CREATE_PBM_TABLE,NULL,NULL);if(ZPB_DB_OK!=result){slog(
 PB_PRINT,SLOG_ERR,
 "\x70\x62\x3a\x70\x62\x6d\x3a\x63\x72\x65\x61\x74\x65\x20\x70\x62\x6d\x20\x74\x61\x62\x6c\x65\x20\x72\x65\x73\x75\x6c\x74\x20\x69\x73\x20\x25\x64" "\n"
 ,result);return result;}result=atPb_ExecDbSql(
@@ -18,18 +18,18 @@
 ,ZPB_DB_PBM_TABLE,ZPB_LOCATION_USIM);result=atPb_ExecDbSql(sql,NULL,NULL);if(
 ZPB_DB_OK!=result){slog(PB_PRINT,SLOG_ERR,
 "\x70\x62\x3a\x70\x62\x6d\x3a\x63\x72\x65\x61\x74\x65\x20\x70\x62\x6d\x5f\x64\x65\x76\x69\x63\x65\x5f\x63\x61\x70\x61\x62\x69\x6c\x69\x74\x79\x20\x74\x61\x62\x6c\x65\x20\x72\x65\x73\x75\x6c\x74\x20\x69\x73\x20\x25\x64" "\n"
-,result);return result;}memset(sql,(0x119c+3814-0x2082),sizeof(sql));snprintf(
-sql,sizeof(sql)-(0x1434+1628-0x1a8f),
+,result);return result;}memset(sql,(0x1+1876-0x755),sizeof(sql));snprintf(sql,
+sizeof(sql)-(0xed5+5161-0x22fd),
 "\x73\x65\x6c\x65\x63\x74\x20\x63\x6f\x75\x6e\x74\x28\x2a\x29\x20\x66\x72\x6f\x6d\x20\x25\x73"
 ,ZPB_DB_SIM_CAPABILITY_TABLE);(VOID)atPb_ExecDbSql(sql,atPb_DbCountTableLineCb,&
-count);if((0x16a9+2932-0x221d)<count){memset(sql,(0xa2+8738-0x22c4),sizeof(sql))
-;snprintf(sql,sizeof(sql)-(0x1396+817-0x16c6),
+count);if((0x20+8882-0x22d2)<count){memset(sql,(0x90+892-0x40c),sizeof(sql));
+snprintf(sql,sizeof(sql)-(0x1f3+3785-0x10bb),
 "\x64\x65\x6c\x65\x74\x65\x20\x66\x72\x6f\x6d\x20\x25\x73\x20\x77\x68\x65\x72\x65\x20\x53\x69\x6d\x5f\x74\x79\x70\x65\x3e\x3d\x30"
 ,ZPB_DB_SIM_CAPABILITY_TABLE);result=atPb_ExecDbSql(sql,NULL,NULL);if(ZPB_DB_OK
 !=result){slog(PB_PRINT,SLOG_DEBUG,
 "\x70\x62\x3a\x61\x74\x50\x62\x5f\x53\x65\x74\x53\x69\x6d\x43\x61\x70\x61\x63\x69\x74\x79\x54\x61\x62\x6c\x65\x3a\x66\x61\x69\x6c\x21" "\n"
 );return result;}}return ZPB_DB_OK;}T_zPb_DbResult atPb_DropDb(){T_zPb_DbResult 
-result=ZPB_DB_OK;CHAR sql[ZPB_MAX_BYTES_DB]={(0xb71+1257-0x105a)};result=
+result=ZPB_DB_OK;CHAR sql[ZPB_MAX_BYTES_DB]={(0xfea+5441-0x252b)};result=
 atPb_ExecDbSql(ZTE_DROP_PBM_SQL,NULL,NULL);if(ZPB_DB_OK!=result){slog(PB_PRINT,
 SLOG_ERR,
 "\x61\x74\x50\x62\x5f\x44\x72\x6f\x70\x44\x62\x3a\x64\x65\x6c\x20\x70\x62\x6d\x20\x74\x61\x62\x6c\x65\x20\x72\x65\x73\x75\x6c\x74\x20\x69\x73\x20\x25\x64" "\n"
@@ -51,7 +51,7 @@
 );return ZPB_DB_ERROR_INVALIDPTR;}slog(PB_PRINT,SLOG_DEBUG,
 "\x70\x62\x3a\x73\x71\x6c\x69\x74\x65\x33\x5f\x6f\x70\x65\x6e\x20\x63\x61\x6c\x6c"
 );
-#if (0x4ba+2036-0xcae)

+#if (0x6ac+7102-0x226a)

 if(!fopen(ZPB_DB_PATH,"\x72")){file=fopen(ZPB_DB_PATH,"\x77");if(!file){printf(
 "\x75\x6e\x61\x62\x6c\x65\x20\x74\x6f\x20\x6f\x70\x65\x6e\x20\x20\x66\x69\x6c\x65\x20\x65\x74\x63\x5f\x72\x77\x2f\x70\x62\x6d\x2e\x64\x62" "\n"
 );}else{printf(
@@ -68,32 +68,32 @@
 "\x70\x62\x3a\x70\x62\x6d\x3a\x63\x61\x6e\x20\x6e\x6f\x74\x20\x63\x6c\x6f\x73\x65\x20\x64\x62"
 );return ZPB_DB_ERROR;}
 #ifdef WEBS_SECURITY

-if(access(ZPB_TMP_PATH,F_OK)==(0x658+6014-0x1dd6)){slog(PB_PRINT,SLOG_ERR,
+if(access(ZPB_TMP_PATH,F_OK)==(0x5d5+6848-0x2095)){slog(PB_PRINT,SLOG_ERR,
 "\x70\x62\x3a\x70\x62\x6d\x3a\x74\x6d\x70\x20\x64\x62\x20\x73\x74\x61\x79");if(
-remove(ZPB_TMP_PATH)!=(0x1a56+244-0x1b4a)){slog(PB_PRINT,SLOG_ERR,
+remove(ZPB_TMP_PATH)!=(0xdcf+2094-0x15fd)){slog(PB_PRINT,SLOG_ERR,
 "\x72\x65\x6d\x6f\x76\x65\x20\x5a\x50\x42\x5f\x54\x4d\x50\x5f\x50\x41\x54\x48\x20\x66\x61\x69\x6c"
-);}}if(rename(ZPB_SEC_PATH,ZPB_TMP_PATH)!=(0xd53+5355-0x223e)){slog(PB_PRINT,
+);}}if(rename(ZPB_SEC_PATH,ZPB_TMP_PATH)!=(0x80+9784-0x26b8)){slog(PB_PRINT,
 SLOG_ERR,
 "\x72\x65\x6e\x61\x6d\x65\x20\x5a\x50\x42\x5f\x53\x45\x43\x5f\x50\x41\x54\x48\x20\x66\x61\x69\x6c"
-);}{char rnum_buf[(0x5f9+1022-0x9df)]={(0x12b7+3082-0x1ec1)};char cmd[
-(0x3cf+2801-0xe40)]={(0x9d2+218-0xaac)};sc_cfg_get(
+);}{char rnum_buf[(0x194+5701-0x17c1)]={(0x3c2+2089-0xbeb)};char cmd[
+(0x116+1254-0x57c)]={(0xccd+4773-0x1f72)};sc_cfg_get(
 "\x72\x6e\x75\x6d\x5f\x61\x74",rnum_buf,sizeof(rnum_buf));snprintf(cmd,sizeof(
 cmd),
 "\x2f\x62\x69\x6e\x2f\x6f\x70\x65\x6e\x73\x73\x6c\x20\x65\x6e\x63\x20\x2d\x65\x20\x2d\x61\x65\x73\x32\x35\x36\x20\x2d\x73\x61\x6c\x74\x20\x2d\x69\x6e\x20\x25\x73\x20\x2d\x6f\x75\x74\x20\x25\x73\x20\x2d\x70\x61\x73\x73\x20\x70\x61\x73\x73\x3a\x25\x73"
 ,ZPB_DB_PATH,ZPB_SEC_PATH,rnum_buf);zxic_system(cmd);if(access(ZPB_SEC_PATH,F_OK
-)==(0xc7a+5029-0x201f)){if(remove(ZPB_TMP_PATH)!=(0xa5+8504-0x21dd)){slog(
+)==(0xec6+2855-0x19ed)){if(remove(ZPB_TMP_PATH)!=(0x28d+3723-0x1118)){slog(
 PB_PRINT,SLOG_ERR,
 "\x72\x65\x6d\x6f\x76\x65\x20\x5a\x50\x42\x5f\x54\x4d\x50\x5f\x50\x41\x54\x48\x31\x20\x66\x61\x69\x6c"
 );}}}
 #endif	

 return ZPB_DB_OK;}static check_sql_cmd(const char*pSql){if(pSql!=NULL){if(strstr
-(pSql,"\x3b")||strstr(pSql,"\x2d\x2d")){return(0x1c4+1379-0x727);}return
-(0x211+5224-0x1678);}return(0x170f+2554-0x2109);}T_zPb_DbResult atPb_ExecDbSql(
+(pSql,"\x3b")||strstr(pSql,"\x2d\x2d")){return(0x1cf+9535-0x270e);}return
+(0x6e8+7785-0x2550);}return(0x1ad+7323-0x1e48);}T_zPb_DbResult atPb_ExecDbSql(
 const char*pSql,sqlite3_callback callback,VOID*pFvarg){sqlite3*pDb=NULL;CHAR 
-dbErrMsg[(0x1230+2379-0x1afb)]={(0x9e9+5654-0x1fff)};if(NULL==pSql){return 
+dbErrMsg[(0xd0a+5468-0x21e6)]={(0x10ab+2705-0x1b3c)};if(NULL==pSql){return 
 ZPB_DB_ERROR_INVALIDPTR;}
 #ifdef WEBS_SECURITY

-if(check_sql_cmd(pSql)==(0xe2+151-0x179)){slog(PB_PRINT,SLOG_ERR,
+if(check_sql_cmd(pSql)==(0x372+8637-0x252f)){slog(PB_PRINT,SLOG_ERR,
 "\x21\x21\x61\x74\x50\x62\x5f\x45\x78\x65\x63\x44\x62\x53\x71\x6c\x3a\x78\x73\x73\x20\x25\x73" "\n"
 ,pSql);return ZPB_DB_ERROR_INVALIDPTR;}
 #endif	

@@ -102,34 +102,34 @@
 );return ZPB_DB_ERROR_NOTOPENDB;}slog(PB_PRINT,SLOG_DEBUG,
 "\x70\x62\x3a\x61\x74\x50\x62\x5f\x45\x78\x65\x63\x44\x62\x53\x71\x6c\x3a\x25\x73" "\n"
 ,pSql);if(sqlite3_exec(pDb,pSql,callback,pFvarg,NULL)){strncpy(dbErrMsg,
-sqlite3_errmsg(pDb),sizeof(dbErrMsg)-(0x3e9+3694-0x1256));slog(PB_PRINT,SLOG_ERR
+sqlite3_errmsg(pDb),sizeof(dbErrMsg)-(0xf19+1695-0x15b7));slog(PB_PRINT,SLOG_ERR
 ,
 "\x70\x62\x3a\x70\x62\x6d\x3a\x63\x61\x6e\x20\x6e\x6f\x74\x20\x65\x78\x65\x63\x20\x73\x71\x6c\x2c\x73\x71\x6c\x69\x74\x65\x33\x5f\x65\x72\x72\x6d\x73\x67\x3a\x25\x73\x2e"
 ,dbErrMsg);(VOID)sqlite3_close(pDb);return ZPB_DB_ERROR;}(VOID)atPb_DbClose(pDb)
 ;return ZPB_DB_OK;}SINT32 atPb_InitApIndexCb(VOID*fvarg,int line,char**zresult,
-char**lname){SINT32 index=(0x12ca+3006-0x1e88);if((0x1d71+1480-0x2338)>line){
-slog(PB_PRINT,SLOG_ERR,
+char**lname){SINT32 index=(0xd+419-0x1b0);if((0x21f6+902-0x257b)>line){slog(
+PB_PRINT,SLOG_ERR,
 "\x70\x62\x3a\x61\x74\x50\x62\x5f\x49\x6e\x69\x74\x41\x70\x49\x6e\x64\x65\x78\x43\x62\x3a\x72\x65\x63\x6f\x72\x64\x20\x6e\x6f\x20\x64\x61\x74\x61\x2e" "\n"
-);return-(0x8f7+3700-0x176a);}index=atoi(zresult[(0x1ed1+528-0x20e1)]);if(index>
+);return-(0x13d+7310-0x1dca);}index=atoi(zresult[(0xbf6+6305-0x2497)]);if(index>
 ZPB_AP_MAX_RECORD){slog(PB_PRINT,SLOG_ERR,
 "\x70\x62\x3a\x61\x74\x50\x62\x5f\x49\x6e\x69\x74\x41\x70\x49\x6e\x64\x65\x78\x43\x62\x3a\x69\x6e\x64\x65\x78\x20\x6f\x76\x65\x72\x66\x6c\x6f\x77\x2e" "\n"
-);return-(0xf93+131-0x1015);}slog(PB_PRINT,SLOG_DEBUG,
+);return-(0xf77+1455-0x1525);}slog(PB_PRINT,SLOG_DEBUG,
 "\x70\x62\x3a\x61\x74\x50\x62\x5f\x49\x6e\x69\x74\x41\x70\x49\x6e\x64\x65\x78\x43\x62\x3a\x70\x62\x6d\x5f\x69\x6e\x64\x65\x78\x3d\x25\x64" "\n"
-,index);g_zPb_ApIndex[index]=PBM_SUCCESS;return(0x1c0f+330-0x1d59);}
+,index);g_zPb_ApIndex[index]=PBM_SUCCESS;return(0x1451+3806-0x232f);}
 T_zPb_DbResult atPb_InitApIndex(){CHAR sql[ZPB_MAX_BYTES_DB]={
-(0x590+5208-0x19e8)};SINT32 i=(0x7cd+912-0xb5c);g_zPb_ApIndex[
-(0x125+5408-0x1645)]=ZPB_AP_MAX_RECORD;for(i=(0x1d6+5036-0x1581);i<=
-g_zPb_ApIndex[(0x12e4+1461-0x1899)];i++){g_zPb_ApIndex[i]=PBM_ERROR_NOT_FOUND;}
+(0x2e9+6412-0x1bf5)};SINT32 i=(0x31b+5133-0x1727);g_zPb_ApIndex[
+(0x2c2+8573-0x243f)]=ZPB_AP_MAX_RECORD;for(i=(0x10a6+2480-0x1a55);i<=
+g_zPb_ApIndex[(0x1147+4019-0x20fa)];i++){g_zPb_ApIndex[i]=PBM_ERROR_NOT_FOUND;}
 snprintf(sql,sizeof(sql),
 "\x73\x65\x6c\x65\x63\x74\x20\x50\x62\x6d\x5f\x69\x6e\x64\x65\x78\x20\x66\x72\x6f\x6d\x20\x25\x73\x20\x77\x68\x65\x72\x65\x20\x4c\x6f\x63\x61\x74\x69\x6f\x6e\x3d\x25\x64"
 ,ZPB_DB_PBM_TABLE,ZPB_LOCATION_AP);return atPb_ExecDbSql(sql,atPb_InitApIndexCb,
-ZUFI_NULL);}INT zte_pbm_check_and_creat_dir(char*path){if(-(0xe9c+5089-0x227c)==
-access(path,(0x116+7340-0x1dc2))){slog(PB_PRINT,SLOG_DEBUG,
+ZUFI_NULL);}INT zte_pbm_check_and_creat_dir(char*path){if(-(0x1664+2022-0x1e49)
+==access(path,(0x499+4418-0x15db))){slog(PB_PRINT,SLOG_DEBUG,
 "\x70\x62\x3a\x70\x62\x6d\x3a\x25\x73\x20\x64\x6f\x65\x73\x20\x6e\x6f\x74\x20\x65\x78\x69\x73\x74\x2c\x73\x6f\x63\x72\x65\x61\x74\x65\x20\x69\x74\x2e" "\n"
-,ZPB_DB_DIR);if(-(0x403+4403-0x1535)==mkdir(path,(0x12ff+254-0x11fe))){slog(
+,ZPB_DB_DIR);if(-(0xb58+4117-0x1b6c)==mkdir(path,(0x834+4010-0x15df))){slog(
 PB_PRINT,SLOG_ERR,
 "\x70\x62\x3a\x3a\x66\x61\x69\x6c\x65\x64\x20\x74\x6f\x20\x63\x72\x65\x61\x74\x65\x20\x64\x62\x20\x64\x69\x72\x2e" "\n"
-);return-(0x888+7012-0x23eb);}}return(0x1bbc+942-0x1f6a);}UINT8 
+);return-(0x806+6680-0x221d);}}return(0x941+610-0xba3);}UINT8 
 zte_pbm_check_web_pbm_dir(VOID){
 #ifdef _MBB_OS_UCLINUX

 (VOID)zte_pbm_check_and_creat_dir(
@@ -143,24 +143,24 @@
 "\x2f\x65\x74\x63\x5f\x72\x77\x2f\x63\x6f\x6e\x66\x69\x67");
 #endif

 return ZUFI_SUCC;}T_zPb_DbResult atPb_DelSimRecFromPbTable(SINT32 index){
-T_zPb_DbResult result=ZPB_DB_OK;CHAR sql[ZPB_MAX_BYTES_DB]={(0x1777+1511-0x1d5e)
+T_zPb_DbResult result=ZPB_DB_OK;CHAR sql[ZPB_MAX_BYTES_DB]={(0x1bff+2362-0x2539)
 };snprintf(sql,sizeof(sql),
 "\x64\x65\x6c\x65\x74\x65\x20\x66\x72\x6f\x6d\x20\x25\x73\x20\x77\x68\x65\x72\x65\x20\x6c\x6f\x63\x61\x74\x69\x6f\x6e\x3d\x25\x64\x20\x61\x6e\x64\x20\x50\x62\x6d\x5f\x69\x6e\x64\x65\x78\x3d\x25\x64"
 ,ZPB_DB_PBM_TABLE,ZPB_LOCATION_USIM,index);result=atPb_ExecDbSql(sql,NULL,NULL);
 if(ZPB_DB_OK==result){g_zPb_SimIndex[index]=PBM_ERROR_NOT_FOUND;}return result;}
 T_zPb_DbResult atPb_LoadARecToPbmTable(T_zPb_WebContact*pbPara){T_zPb_DbResult 
-result=ZPB_DB_ERROR;CHAR sql[ZPB_MAX_BYTES_DB]={(0x655+897-0x9d6)};if(NULL==
+result=ZPB_DB_ERROR;CHAR sql[ZPB_MAX_BYTES_DB]={(0x10f6+3643-0x1f31)};if(NULL==
 pbPara){slog(PB_PRINT,SLOG_ERR,
 "\x70\x62\x3a\x61\x74\x50\x62\x5f\x4c\x6f\x61\x64\x41\x52\x65\x63\x54\x6f\x50\x62\x6d\x54\x61\x62\x6c\x65\x3a\x69\x6e\x76\x61\x6c\x69\x64\x20\x69\x6e\x70\x75\x74"
 );return ZPB_DB_ERROR_INVALIDPTR;}snprintf(sql,sizeof(sql),"insert into %s (Pbm_index,Location,Number,Type,Name,Anr,Anr1,Email,Sne) \

 			values(\'%d\',\'%d\',\'%s\',\'%d\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\')",ZPB_DB_PBM_TABLE,pbPara->pbIndex,pbPara->pbLocation,pbPara->mobilNumber,pbPara
 ->pbType,pbPara->name,pbPara->homeNumber,pbPara->officeNumber,pbPara->email,
 pbPara->sne);result=atPb_ExecDbSql(sql,NULL,NULL);if(ZPB_DB_OK==result){CHAR 
-pbMax[(0x19bd+1489-0x1f5c)]={(0x14c5+3917-0x2412)};sc_cfg_get(
-ZPB_NV_USIMINDEXMAX,pbMax,sizeof(pbMax));if((pbPara->pbIndex>=
-(0x989+5710-0x1fd6))&&(pbPara->pbIndex<=atoi(pbMax))){g_zPb_SimIndex[pbPara->
-pbIndex]=PBM_SUCCESS;}(VOID)sc_cfg_set(ZPB_NV_WRITE_FLAG,ZPB_OPERATE_SUC);}else{
-(VOID)sc_cfg_set(ZPB_NV_WRITE_FLAG,ZPB_NEW_ERROR);}slog(PB_PRINT,SLOG_DEBUG,
+pbMax[(0x1c23+1013-0x1fe6)]={(0x184b+302-0x1979)};sc_cfg_get(ZPB_NV_USIMINDEXMAX
+,pbMax,sizeof(pbMax));if((pbPara->pbIndex>=(0xfbd+2641-0x1a0d))&&(pbPara->
+pbIndex<=atoi(pbMax))){g_zPb_SimIndex[pbPara->pbIndex]=PBM_SUCCESS;}(VOID)
+sc_cfg_set(ZPB_NV_WRITE_FLAG,ZPB_OPERATE_SUC);}else{(VOID)sc_cfg_set(
+ZPB_NV_WRITE_FLAG,ZPB_NEW_ERROR);}slog(PB_PRINT,SLOG_DEBUG,
 "\x70\x62\x3a\x70\x62\x6d\x3a\x65\x78\x65\x63\x20\x74\x61\x62\x6c\x65\x20\x25\x73\x20\x72\x65\x73\x75\x6c\x74\x20\x25\x64" "\n"
 ,ZPB_DB_PBM_TABLE,result);return result;}VOID atPb_SqlModifyOneRec(
 T_zPb_WebContact*pbmPara,char*sql,int len){printf(
@@ -174,17 +174,17 @@
 pbmPara->pbType,pbmPara->name,pbmPara->homeNumber,pbmPara->officeNumber,pbmPara
 ->email,pbmPara->sne,pbmPara->group,pbmPara->pbId);}}T_zPb_DbResult 
 atPb_DbGetParamCb(VOID*fvarg,int line,char**zresult,char**lname){T_zPb_Header 
-para={(0x64b+993-0xa2c)};if((0x11e5+1867-0x192f)>line){slog(PB_PRINT,SLOG_ERR,
+para={(0x7c1+4324-0x18a5)};if((0x2209+1196-0x26b4)>line){slog(PB_PRINT,SLOG_ERR,
 "\x70\x62\x3a\x61\x74\x50\x62\x5f\x44\x62\x47\x65\x74\x50\x61\x72\x61\x6d\x43\x62\x3a\x72\x65\x63\x6f\x72\x64\x20\x6e\x6f\x20\x64\x61\x74\x61\x2e"
-);return ZPB_DB_ERROR;}para.pbIndex=atoi(zresult[(0xbfd+5795-0x22a0)]);para.
-pbLocation=atoi(zresult[(0x1d1+7823-0x205f)]);slog(PB_PRINT,SLOG_DEBUG,
+);return ZPB_DB_ERROR;}para.pbIndex=atoi(zresult[(0x1501+4512-0x26a1)]);para.
+pbLocation=atoi(zresult[(0x2e2+5417-0x180a)]);slog(PB_PRINT,SLOG_DEBUG,
 "\x70\x62\x3a\x61\x74\x50\x62\x5f\x44\x62\x47\x65\x74\x50\x61\x72\x61\x6d\x43\x62\x3a\x20\x69\x6e\x64\x65\x78\x3d\x25\x64\x2c\x6c\x6f\x63\x61\x74\x69\x6f\x6e\x3d\x25\x64"
 ,para.pbIndex,para.pbLocation);memcpy(fvarg,&para,sizeof(para));return ZPB_DB_OK
 ;}T_zPb_DbResult atPb_GetIndexLocationById(T_zPb_Header*pbPara){CHAR sql[
-ZPB_MAX_BYTES_DB]={(0xfa8+848-0x12f8)};snprintf(sql,sizeof(sql)-
-(0x425+986-0x7fe),
+ZPB_MAX_BYTES_DB]={(0xb10+4541-0x1ccd)};snprintf(sql,sizeof(sql)-
+(0x314+3497-0x10bc),
 "\x73\x65\x6c\x65\x63\x74\x20\x50\x62\x6d\x5f\x69\x6e\x64\x65\x78\x2c\x4c\x6f\x63\x61\x74\x69\x6f\x6e\x20\x66\x72\x6f\x6d\x20\x25\x73\x20\x77\x68\x65\x72\x65\x20\x69\x64\x3d\x25\x64"
-,ZPB_DB_PBM_TABLE,pbPara->pbId);memset(pbPara,(0x4a6+630-0x71c),sizeof(
+,ZPB_DB_PBM_TABLE,pbPara->pbId);memset(pbPara,(0x228b+124-0x2307),sizeof(
 T_zPb_Header));return atPb_ExecDbSql(sql,atPb_DbGetParamCb,pbPara);}VOID 
 atPb_SqlNewOneRec(T_zPb_WebContact*pbmPara,CHAR*sql,int len){if(
 ZPB_LOCATION_USIM==pbmPara->pbLocation){snprintf(sql,len,"insert into %s (Pbm_index,Location,Number,Type,Name,Anr,Anr1,Email,Sne)\

@@ -196,7 +196,7 @@
 pbmPara->pbType,pbmPara->name,pbmPara->homeNumber,pbmPara->officeNumber,pbmPara
 ->email,pbmPara->sne,pbmPara->group);}}T_zPb_DbResult 
 atPb_WriteContactToPbmTable(T_zPb_WebContact*pPbRecord,BOOL pbNewFlag){
-T_zPb_DbResult result=ZPB_DB_OK;CHAR sql[ZPB_MAX_BYTES_DB]={(0xa35+5405-0x1f52)}
+T_zPb_DbResult result=ZPB_DB_OK;CHAR sql[ZPB_MAX_BYTES_DB]={(0x1f36+351-0x2095)}
 ;if(NULL==pPbRecord){slog(PB_PRINT,SLOG_ERR,
 "\x70\x62\x3a\x61\x74\x50\x62\x5f\x57\x72\x69\x74\x65\x43\x6f\x6e\x74\x61\x63\x74\x54\x6f\x50\x62\x6d\x54\x61\x62\x6c\x65\x3a\x69\x6e\x76\x61\x6c\x69\x64\x20\x69\x6e\x70\x75\x74"
 );return ZPB_DB_ERROR_INVALIDPTR;}slog(PB_PRINT,SLOG_DEBUG,
@@ -207,75 +207,75 @@
 ZPB_LOCATION_USIM==pPbRecord->pbLocation){g_zPb_SimIndex[(pPbRecord->pbIndex)]=
 PBM_SUCCESS;}else if(ZPB_LOCATION_AP==pPbRecord->pbLocation){g_zPb_ApIndex[(
 pPbRecord->pbIndex)]=PBM_SUCCESS;}}return result;}SINT32 atPb_DbCountTableLineCb
-(VOID*fvarg,int line,char**zresult,char**lname){if((0xf81+3340-0x1c8c)>line){
+(VOID*fvarg,int line,char**zresult,char**lname){if((0x224d+216-0x2324)>line){
 slog(PB_PRINT,SLOG_ERR,
 "\x70\x62\x3a\x70\x62\x6d\x3a\x72\x65\x63\x6f\x72\x64\x20\x6e\x6f\x20\x64\x61\x74\x61\x2e"
-);return-(0x1e7c+14-0x1e89);}*(int*)fvarg=atoi(zresult[(0x13b8+2503-0x1d7f)]);
-return(0x21f+8492-0x234b);}T_zPb_DbResult atPb_SetSimCapacityTable(
+);return-(0xef8+6161-0x2708);}*(int*)fvarg=atoi(zresult[(0x16d+2307-0xa70)]);
+return(0x10b6+691-0x1369);}T_zPb_DbResult atPb_SetSimCapacityTable(
 T_zPb_UsimCapacity pbPara){T_zPb_DbResult result=ZPB_DB_OK;CHAR sql[
-ZPB_MAX_BYTES_DB]={(0x1788+3145-0x23d1)};UINT32 count=(0x5e8+2989-0x1195);
-snprintf(sql,sizeof(sql)-(0x418+73-0x460),
+ZPB_MAX_BYTES_DB]={(0x8ef+6654-0x22ed)};UINT32 count=(0x127c+4181-0x22d1);
+snprintf(sql,sizeof(sql)-(0x1053+2340-0x1976),
 "\x73\x65\x6c\x65\x63\x74\x20\x63\x6f\x75\x6e\x74\x28\x2a\x29\x20\x66\x72\x6f\x6d\x20\x25\x73"
 ,ZPB_DB_SIM_CAPABILITY_TABLE);(VOID)atPb_ExecDbSql(sql,atPb_DbCountTableLineCb,&
-count);if((0x620+4183-0x1677)<count){memset(sql,(0xdb7+2782-0x1895),sizeof(sql))
-;snprintf(sql,sizeof(sql)-(0x339+4787-0x15eb),
+count);if((0xf+5025-0x13b0)<count){memset(sql,(0x1af+8788-0x2403),sizeof(sql));
+snprintf(sql,sizeof(sql)-(0x395+6434-0x1cb6),
 "\x64\x65\x6c\x65\x74\x65\x20\x66\x72\x6f\x6d\x20\x25\x73\x20\x77\x68\x65\x72\x65\x20\x53\x69\x6d\x5f\x74\x79\x70\x65\x3e\x3d\x30"
 ,ZPB_DB_SIM_CAPABILITY_TABLE);result=atPb_ExecDbSql(sql,NULL,NULL);if(ZPB_DB_OK
 !=result){slog(PB_PRINT,SLOG_DEBUG,
 "\x70\x62\x3a\x61\x74\x50\x62\x5f\x53\x65\x74\x53\x69\x6d\x43\x61\x70\x61\x63\x69\x74\x79\x54\x61\x62\x6c\x65\x3a\x66\x61\x69\x6c\x21" "\n"
-);return result;}}memset(sql,(0x82f+1580-0xe5b),sizeof(sql));snprintf(sql,sizeof
-(sql)-(0x101c+912-0x13ab),"insert into %s (Sim_type,Max_record_number,Used_record_number,Max_number_len,Max_name_len,Max_anr_len,Max_anr1_len, \

+);return result;}}memset(sql,(0x8a0+1294-0xdae),sizeof(sql));snprintf(sql,sizeof
+(sql)-(0x985+802-0xca6),"insert into %s (Sim_type,Max_record_number,Used_record_number,Max_number_len,Max_name_len,Max_anr_len,Max_anr1_len, \

 	          Max_email_len,Max_sne_len) values(\'%d\',\'%d\',\'%d\',\'%d\',\'%d\',\'%d\',\'%d\',\'%d\',\'%d\')",ZPB_DB_SIM_CAPABILITY_TABLE,pbPara.simType,pbPara.maxRecordNum,pbPara.
 usedRecordNum,pbPara.maxNumberLen,pbPara.maxNameLen,pbPara.maxAnrLen,pbPara.
 maxAnr1Len,pbPara.maxEmailLen,pbPara.maxSneLen);slog(PB_PRINT,SLOG_DEBUG,
 "\x70\x62\x3a\x61\x74\x50\x62\x5f\x53\x65\x74\x53\x69\x6d\x43\x61\x70\x61\x63\x69\x74\x79\x54\x61\x62\x6c\x65\x3a\x6f\x6b\x21" "\n"
 );return atPb_ExecDbSql(sql,NULL,NULL);}T_zPb_DbResult atPb_SetApCapacityTable()
-{T_zPb_DbResult result=ZPB_DB_OK;CHAR sql[ZPB_MAX_BYTES_DB]={(0x1ea+8280-0x2242)
-};SINT32 count=(0x1920+2502-0x22e6);T_zPb_ApCapacity pbPara={
-(0x1708+3933-0x2665)};snprintf(sql,sizeof(sql)-(0x17d5+427-0x197f),
+{T_zPb_DbResult result=ZPB_DB_OK;CHAR sql[ZPB_MAX_BYTES_DB]={
+(0x1e1d+1918-0x259b)};SINT32 count=(0x182+9587-0x26f5);T_zPb_ApCapacity pbPara={
+(0x7d3+5014-0x1b69)};snprintf(sql,sizeof(sql)-(0xdfb+5328-0x22ca),
 "\x73\x65\x6c\x65\x63\x74\x20\x63\x6f\x75\x6e\x74\x28\x2a\x29\x20\x66\x72\x6f\x6d\x20\x25\x73"
 ,ZPB_DB_DEVICE_CAPABILITY_TABLE);(VOID)atPb_ExecDbSql(sql,
-atPb_DbCountTableLineCb,&count);if((0x1d7+3446-0xf4d)<count){memset(sql,
-(0x773+3978-0x16fd),sizeof(sql));snprintf(sql,sizeof(sql)-(0xafa+4593-0x1cea),
+atPb_DbCountTableLineCb,&count);if((0x7b5+5912-0x1ecd)<count){memset(sql,
+(0x2cc+3297-0xfad),sizeof(sql));snprintf(sql,sizeof(sql)-(0xca4+1054-0x10c1),
 "\x64\x65\x6c\x65\x74\x65\x20\x66\x72\x6f\x6d\x20\x25\x73",
 ZPB_DB_DEVICE_CAPABILITY_TABLE);result=atPb_ExecDbSql(sql,NULL,NULL);if(
 ZPB_DB_OK!=result){slog(PB_PRINT,SLOG_DEBUG,
 "\x70\x62\x3a\x61\x74\x50\x62\x5f\x53\x65\x74\x41\x70\x43\x61\x70\x61\x63\x69\x74\x79\x54\x61\x62\x6c\x65\x3a\x66\x61\x69\x6c\x21" "\n"
-);return result;}}memset(sql,(0x5ef+3281-0x12c0),sizeof(sql));snprintf(sql,
-sizeof(sql)-(0x15bb+3248-0x226a),
+);return result;}}memset(sql,(0x547+454-0x70d),sizeof(sql));snprintf(sql,sizeof(
+sql)-(0x3cd+2920-0xf34),
 "\x73\x65\x6c\x65\x63\x74\x20\x63\x6f\x75\x6e\x74\x28\x2a\x29\x20\x66\x72\x6f\x6d\x20\x25\x73\x20\x77\x68\x65\x72\x65\x20\x4c\x6f\x63\x61\x74\x69\x6f\x6e\x3d\x25\x64"
 ,ZPB_DB_PBM_TABLE,ZPB_LOCATION_AP);result=atPb_ExecDbSql(sql,
 atPb_DbCountTableLineCb,&count);if(ZPB_DB_OK==result){pbPara.usedRecordNum=count
 ;pbPara.maxRecordNum=ZPB_AP_MAX_RECORD;}slog(PB_PRINT,SLOG_DEBUG,
 "\x70\x62\x3a\x6d\x61\x78\x5f\x72\x65\x63\x5f\x6e\x75\x6d\x3d\x25\x64\x2c\x75\x73\x65\x64\x3d\x25\x64"
-,pbPara.maxRecordNum,pbPara.usedRecordNum);memset(sql,(0xa44+957-0xe01),sizeof(
-sql));snprintf(sql,sizeof(sql)-(0xa+5450-0x1553),
+,pbPara.maxRecordNum,pbPara.usedRecordNum);memset(sql,(0x1889+2925-0x23f6),
+sizeof(sql));snprintf(sql,sizeof(sql)-(0xeb4+931-0x1256),
 "\x69\x6e\x73\x65\x72\x74\x20\x69\x6e\x74\x6f\x20\x25\x73\x20\x28\x4d\x61\x78\x5f\x72\x65\x63\x6f\x72\x64\x5f\x6e\x75\x6d\x62\x65\x72\x2c\x55\x73\x65\x64\x5f\x72\x65\x63\x6f\x72\x64\x5f\x6e\x75\x6d\x62\x65\x72\x29\x20\x76\x61\x6c\x75\x65\x73\x28" "\'" "\x25\x64" "\'" "\x2c" "\'" "\x25\x64" "\'" "\x29"
 ,ZPB_DB_DEVICE_CAPABILITY_TABLE,pbPara.maxRecordNum,pbPara.usedRecordNum);return
  atPb_ExecDbSql(sql,NULL,NULL);}T_zPb_DbResult atPb_DbGetIndexByGroupCb(VOID*
 fvarg,int line,char**zresult,char**lname){T_zPb_ApIndex*pbIndex=NULL;int i=
-(0x221+6312-0x1ac9);if((0xb84+5227-0x1fee)>line){return ZPB_DB_ERROR;}pbIndex=(
-T_zPb_ApIndex*)fvarg;i=pbIndex->count;slog(PB_PRINT,SLOG_DEBUG,
+(0x11a7+3161-0x1e00);if((0x11ab+3602-0x1fbc)>line){return ZPB_DB_ERROR;}pbIndex=
+(T_zPb_ApIndex*)fvarg;i=pbIndex->count;slog(PB_PRINT,SLOG_DEBUG,
 "\x70\x62\x3a\x61\x74\x50\x62\x5f\x44\x62\x47\x65\x74\x49\x6e\x64\x65\x78\x42\x79\x47\x72\x6f\x75\x70\x43\x62\x20\x65\x6e\x74\x65\x72\x2c\x69\x3d\x25\x64" "\n"
-,i);pbIndex->apIndex[i+(0x7e3+5995-0x1f4d)]=atoi(zresult[(0x2519+187-0x25d4)]);
+,i);pbIndex->apIndex[i+(0x2360+93-0x23bc)]=atoi(zresult[(0x490+7312-0x2120)]);
 slog(PB_PRINT,SLOG_DEBUG,
 "\x70\x62\x3a\x67\x65\x74\x5f\x69\x6e\x64\x65\x78\x5f\x62\x79\x5f\x67\x72\x6f\x75\x70\x5f\x63\x62\x3a\x70\x62\x6d\x5f\x69\x6e\x64\x65\x78\x3d\x25\x64"
-,pbIndex->apIndex[i+(0x1995+1647-0x2003)]);pbIndex->count=i+(0xf2+5796-0x1795);
+,pbIndex->apIndex[i+(0xdb9+1780-0x14ac)]);pbIndex->count=i+(0x125f+475-0x1439);
 slog(PB_PRINT,SLOG_DEBUG,
 "\x70\x62\x3a\x67\x65\x74\x5f\x69\x6e\x64\x65\x78\x5f\x62\x79\x5f\x67\x72\x6f\x75\x70\x5f\x63\x62\x3a\x70\x62\x6d\x20\x63\x6f\x75\x6e\x74\x20\x69\x73\x20\x25\x64"
 ,pbIndex->count);return ZPB_DB_OK;}T_zPb_DbResult atPb_DelRecFromPbmTableByGroup
 (T_zPb_ApIndex*index){T_zPb_DbResult result=ZPB_DB_OK;CHAR sql[ZPB_MAX_BYTES_DB]
-={(0x1053+3394-0x1d95)};SINT32 countByGroup=(0xd+9956-0x26f1);CHAR pbGroup[
-ZPB_PARAM_SIZE20]={(0x2f1+7620-0x20b5)};sc_cfg_get(ZPB_NV_GROUP,pbGroup,sizeof(
-pbGroup));snprintf(sql,sizeof(sql)-(0x291+6336-0x1b50),
+={(0xa7d+1507-0x1060)};SINT32 countByGroup=(0xf87+4244-0x201b);CHAR pbGroup[
+ZPB_PARAM_SIZE20]={(0x1ad+7776-0x200d)};sc_cfg_get(ZPB_NV_GROUP,pbGroup,sizeof(
+pbGroup));snprintf(sql,sizeof(sql)-(0x178d+1331-0x1cbf),
 "\x73\x65\x6c\x65\x63\x74\x20\x63\x6f\x75\x6e\x74\x28\x2a\x29\x20\x66\x72\x6f\x6d\x20\x25\x73\x20\x77\x68\x65\x72\x65\x20\x4c\x6f\x63\x61\x74\x69\x6f\x6e\x3d\x25\x64\x20\x61\x6e\x64\x20\x28\x50\x62\x6d\x5f\x67\x72\x6f\x75\x70\x3d" "\"" "\x25\x73" "\"" "\x29"
 ,ZPB_DB_PBM_TABLE,ZPB_LOCATION_AP,pbGroup);(VOID)atPb_ExecDbSql(sql,
-atPb_DbCountTableLineCb,&countByGroup);memset(sql,(0x830+16-0x840),sizeof(sql));
-snprintf(sql,sizeof(sql)-(0x1bab+399-0x1d39),
+atPb_DbCountTableLineCb,&countByGroup);memset(sql,(0x1a79+2040-0x2271),sizeof(
+sql));snprintf(sql,sizeof(sql)-(0x15c1+1278-0x1abe),
 "\x73\x65\x6c\x65\x63\x74\x20\x50\x62\x6d\x5f\x69\x6e\x64\x65\x78\x20\x66\x72\x6f\x6d\x20\x25\x73\x20\x77\x68\x65\x72\x65\x20\x4c\x6f\x63\x61\x74\x69\x6f\x6e\x3d\x25\x64\x20\x61\x6e\x64\x20\x28\x50\x62\x6d\x5f\x67\x72\x6f\x75\x70\x3d" "\"" "\x25\x73" "\"" "\x29"
 ,ZPB_DB_PBM_TABLE,ZPB_LOCATION_AP,pbGroup);result=atPb_ExecDbSql(sql,
 atPb_DbGetIndexByGroupCb,index);if(countByGroup==index->count){memset(sql,
-(0x15fc+784-0x190c),sizeof(sql));snprintf(sql,sizeof(sql)-(0xd47+5775-0x23d5),
+(0x1719+2988-0x22c5),sizeof(sql));snprintf(sql,sizeof(sql)-(0x400+7080-0x1fa7),
 "\x64\x65\x6c\x65\x74\x65\x20\x66\x72\x6f\x6d\x20\x25\x73\x20\x77\x68\x65\x72\x65\x20\x4c\x6f\x63\x61\x74\x69\x6f\x6e\x3d\x25\x64\x20\x61\x6e\x64\x20\x28\x50\x62\x6d\x5f\x67\x72\x6f\x75\x70\x3d" "\"" "\x25\x73" "\"" "\x29"
 ,ZPB_DB_PBM_TABLE,ZPB_LOCATION_AP,pbGroup);if(ZPB_DB_OK==atPb_ExecDbSql(sql,NULL
 ,NULL)){(VOID)sc_cfg_set(ZPB_NV_WRITE_FLAG,ZPB_OPERATE_SUC);}slog(PB_PRINT,
@@ -283,7 +283,7 @@
 "\x70\x62\x3a\x70\x62\x6d\x3a\x65\x78\x65\x63\x20\x74\x61\x62\x6c\x65\x20\x25\x73\x20\x72\x65\x73\x75\x6c\x74\x20\x25\x64" "\n"
 ,ZPB_DB_PBM_TABLE,result);}else{return ZPB_DB_ERROR;}(VOID)sc_cfg_set(
 ZPB_NV_GROUP,"");return result;}VOID atPb_GetLocationIndexForDel(T_zPb_DelInfo*
-recData,SINT32 delTime){T_zPb_Header pbHeader={(0x414+2204-0xcb0)};if(NULL==
+recData,SINT32 delTime){T_zPb_Header pbHeader={(0x12b7+4428-0x2403)};if(NULL==
 recData){slog(PB_PRINT,SLOG_ERR,
 "\x70\x62\x3a\x61\x74\x50\x62\x5f\x47\x65\x74\x4c\x6f\x63\x61\x74\x69\x6f\x6e\x49\x6e\x64\x65\x78\x46\x6f\x72\x44\x65\x6c\x2d\x2d\x69\x6e\x76\x61\x6c\x69\x64\x20\x69\x6e\x70\x75\x74" "\n"
 );return;}pbHeader.pbId=recData->delId[delTime];if(ZPB_DB_OK!=
@@ -294,30 +294,30 @@
 "\x70\x62\x3a\x70\x62\x6d\x3a\x64\x65\x6c\x20\x69\x6e\x64\x65\x78\x3d\x25\x64\x2c\x6c\x6f\x63\x61\x74\x69\x6f\x6e\x3d\x25\x64\x2c\x64\x65\x6c\x5f\x70\x62\x6d\x5f\x74\x69\x6d\x65\x3d\x25\x64"
 ,recData->delIndex[delTime],recData->delLocation,delTime);}T_zPb_DbResult 
 atPb_DelARecFromPbmTable(T_zPb_DelInfo*pbPara,SINT32 delTime){T_zPb_DbResult 
-result=ZPB_DB_OK;CHAR sql[ZPB_MAX_BYTES_DB]={(0x148f+4293-0x2554)};if(NULL==
+result=ZPB_DB_OK;CHAR sql[ZPB_MAX_BYTES_DB]={(0x2009+1458-0x25bb)};if(NULL==
 pbPara){slog(PB_PRINT,SLOG_ERR,
 "\x70\x62\x3a\x70\x62\x6d\x3a\x69\x6e\x76\x61\x6c\x69\x64\x20\x69\x6e\x70\x75\x74"
 );return ZPB_DB_ERROR_INVALIDPTR;}atPb_GetLocationIndexForDel(pbPara,delTime);
 slog(PB_PRINT,SLOG_DEBUG,
 "\x70\x62\x3a\x61\x74\x50\x62\x5f\x44\x65\x6c\x41\x52\x65\x63\x46\x72\x6f\x6d\x50\x62\x6d\x54\x61\x62\x6c\x65\x20\x65\x6e\x74\x65\x72\x2c\x64\x65\x6c\x54\x69\x6d\x65\x3d\x25\x64\x2c\x69\x64\x3d\x25\x64" "\n"
-,delTime,pbPara->delId[delTime]);snprintf(sql,sizeof(sql)-(0x366+4075-0x1350),
+,delTime,pbPara->delId[delTime]);snprintf(sql,sizeof(sql)-(0x53d+119-0x5b3),
 "\x64\x65\x6c\x65\x74\x65\x20\x66\x72\x6f\x6d\x20\x25\x73\x20\x77\x68\x65\x72\x65\x20\x69\x64\x3d\x25\x64"
 ,ZPB_DB_PBM_TABLE,pbPara->delId[delTime]);result=atPb_ExecDbSql(sql,NULL,NULL);
 if(ZPB_DB_OK==result){if(ZPB_LOCATION_AP==pbPara->delLocation){g_zPb_ApIndex[(
 pbPara->delIndex[delTime])]=PBM_ERROR_NOT_FOUND;}else if(ZPB_LOCATION_USIM==
 pbPara->delLocation){g_zPb_SimIndex[(pbPara->delIndex[delTime])]=
 PBM_ERROR_NOT_FOUND;}}return result;}VOID atPb_ClearSimPbmIndexArray(VOID){
-SINT32 i=(0x1bf6+2836-0x2709);for(i=(0x18fb+2142-0x2158);(i<=g_zPb_SimIndex[
-(0xb43+6632-0x252b)])&&(i<(ZPB_SIM_MAX_RECORD+(0xe97+3023-0x1a65)));i++){
+SINT32 i=(0x16df+4088-0x26d6);for(i=(0x99b+3479-0x1731);(i<=g_zPb_SimIndex[
+(0x8a8+4574-0x1a86)])&&(i<(ZPB_SIM_MAX_RECORD+(0xdc+4723-0x134e)));i++){
 g_zPb_SimIndex[i]=PBM_ERROR_NOT_FOUND;}}VOID atPb_ClearApPbmIndexArray(VOID){
-SINT32 i=(0xb58+571-0xd92);for(i=(0x4+6928-0x1b13);(i<=g_zPb_ApIndex[
-(0x21d2+533-0x23e7)])&&(i<(ZPB_AP_MAX_RECORD+(0xad+6950-0x1bd2)));i++){
+SINT32 i=(0x1b20+2516-0x24f3);for(i=(0xb21+2390-0x1476);(i<=g_zPb_ApIndex[
+(0x4b9+4294-0x157f)])&&(i<(ZPB_AP_MAX_RECORD+(0x39b+8176-0x238a)));i++){
 g_zPb_ApIndex[i]=PBM_ERROR_NOT_FOUND;}}T_zPb_DbResult 
 atPb_DelAllRecsFromPbmTable(T_zPb_DelInfo*pbPara){T_zPb_DbResult result=
-ZPB_DB_OK;CHAR sql[ZPB_MAX_BYTES_DB]={(0x2a9+5628-0x18a5)};if(NULL==pbPara){slog
+ZPB_DB_OK;CHAR sql[ZPB_MAX_BYTES_DB]={(0xda5+4365-0x1eb2)};if(NULL==pbPara){slog
 (PB_PRINT,SLOG_ERR,
 "\x70\x62\x3a\x61\x74\x50\x62\x5f\x44\x65\x6c\x41\x6c\x6c\x52\x65\x63\x73\x46\x72\x6f\x6d\x50\x62\x6d\x54\x61\x62\x6c\x65\x3a\x69\x6e\x76\x61\x6c\x69\x64\x20\x69\x6e\x70\x75\x74" "\n"
-);return ZPB_DB_ERROR_INVALIDPTR;}snprintf(sql,sizeof(sql)-(0x124+2427-0xa9e),
+);return ZPB_DB_ERROR_INVALIDPTR;}snprintf(sql,sizeof(sql)-(0x4ec+1118-0x949),
 "\x64\x65\x6c\x65\x74\x65\x20\x66\x72\x6f\x6d\x20\x25\x73\x20\x77\x68\x65\x72\x65\x20\x4c\x6f\x63\x61\x74\x69\x6f\x6e\x3d\x25\x64"
 ,ZPB_DB_PBM_TABLE,pbPara->delLocation);result=atPb_ExecDbSql(sql,NULL,NULL);slog
 (PB_PRINT,SLOG_DEBUG,
diff --git a/ap/app/zte_comm/phonebook/src/pb_main.c b/ap/app/zte_comm/phonebook/src/pb_main.c
index 0fd00ca..9096c26 100755
--- a/ap/app/zte_comm/phonebook/src/pb_main.c
+++ b/ap/app/zte_comm/phonebook/src/pb_main.c
@@ -7,9 +7,9 @@
 VOID(*func_ptr)(UINT8*pDatabuf);BOOL need_block;}T_zPbHandleTable;VOID 
 atWeb_AddOneContact(UINT8*pDatabuf);VOID atWeb_DelOneContact(UINT8*pDatabuf);
 VOID atWeb_DelMultiContact(UINT8*pDatabuf);VOID atWeb_DelAllContact(UINT8*
-pDatabuf);T_zPb_optRsp g_PbOptRsp={(0x8f5+216-0x9cd)};sem_t g_Pb_sem_id={
-(0x473+18-0x485)};int g_zPb_MsqId=-(0x8f4+3781-0x17b8);int g_zPb_LocalMsqId=-
-(0x1c89+1107-0x20db);VOID atWeb_AddOneContact(UINT8*pDatabuf){T_zPb_WebContact*
+pDatabuf);T_zPb_optRsp g_PbOptRsp={(0x994+1750-0x106a)};sem_t g_Pb_sem_id={
+(0x184+6814-0x1c22)};int g_zPb_MsqId=-(0xe67+4000-0x1e06);int g_zPb_LocalMsqId=-
+(0x415+4379-0x152f);VOID atWeb_AddOneContact(UINT8*pDatabuf){T_zPb_WebContact*
 webPbContact=NULL;if(pDatabuf==NULL){printf(
 "\x5b\x70\x62\x5d\x2c\x20\x61\x74\x57\x65\x62\x5f\x41\x64\x64\x4f\x6e\x65\x43\x6f\x6e\x74\x61\x63\x74\x20\x70\x61\x72\x61\x20\x69\x73\x20\x6e\x75\x6c\x6c" "\n"
 );return;}webPbContact=(T_zPb_WebContact*)pDatabuf;atWeb_AddOnePb(webPbContact,
@@ -35,22 +35,21 @@
 zPb_RecvZpbicInd(UINT8*pDatabuf){T_zAt_ZpbicRes*ptPara=ZUFI_NULL;if(pDatabuf==
 NULL){return;}ptPara=(T_zAt_ZpbicRes*)(pDatabuf);printf(
 "\x7a\x50\x62\x5f\x52\x65\x63\x76\x5a\x70\x62\x69\x63\x49\x6e\x64\x20\x70\x61\x72\x61\x2c\x72\x65\x73\x75\x6c\x74\x3a\x25\x64\x2c\x20\x74\x79\x70\x65\x3a\x25\x64" "\n"
-,ptPara->result,ptPara->opertype);if(((0x493+1804-0xb9e)==ptPara->result)&&(
-(0x17dc+3803-0x26b6)==ptPara->opertype)){CHAR needPb[(0x473+2149-0xca6)]={
-(0x606+3230-0x12a4)};sc_cfg_get(NV_NEED_SUPPORT_PB,needPb,sizeof(needPb));if(
-(0x35a+7828-0x21ee)!=strcmp(needPb,"\x6e\x6f")){ipc_send_message(MODULE_ID_PB,
-MODULE_ID_AT_CTL,MSG_CMD_PBINIT_REQ,(0xd33+3035-0x190e),NULL,(0x70+1137-0x4e1));
-}}}VOID zPb_RecvZuslotInd(UINT8*pDatabuf){T_zAt_ZuslotRes*ptPara=ZUFI_NULL;if(
+,ptPara->result,ptPara->opertype);if(((0x7b6+2043-0xfb0)==ptPara->result)&&(
+(0x11a7+3685-0x200b)==ptPara->opertype)){CHAR needPb[(0x911+5225-0x1d48)]={
+(0xaef+6381-0x23dc)};sc_cfg_get(NV_NEED_SUPPORT_PB,needPb,sizeof(needPb));if(
+(0x1053+1133-0x14c0)!=strcmp(needPb,"\x6e\x6f")){ipc_send_message(MODULE_ID_PB,
+MODULE_ID_AT_CTL,MSG_CMD_PBINIT_REQ,(0x7bb+1431-0xd52),NULL,(0xb11+5924-0x2235))
+;}}}VOID zPb_RecvZuslotInd(UINT8*pDatabuf){T_zAt_ZuslotRes*ptPara=ZUFI_NULL;if(
 pDatabuf==NULL){return;}ptPara=(T_zAt_ZuslotRes*)(pDatabuf);printf(
 "\x7a\x50\x62\x5f\x52\x65\x63\x76\x5a\x70\x62\x69\x63\x49\x6e\x64\x20\x70\x61\x72\x61\x2c\x72\x65\x73\x75\x6c\x74\x3a\x25\x64\x2c\x20\x74\x79\x70\x65\x3a\x25\x64" "\n"
-,ptPara->slot,ptPara->slot_state);if(ptPara->slot_state==(0x4db+2405-0xe40)){
-CHAR needPb[(0x17f+9382-0x25f3)]={(0x594+507-0x78f)};sc_cfg_get(
-NV_NEED_SUPPORT_PB,needPb,sizeof(needPb));if((0x12e2+3136-0x1f22)!=strcmp(needPb
-,"\x6e\x6f")){atPb_CfgPbNvInit();atPb_DelAllRecsSimDb();}}}VOID 
-zPb_RecvPbInitRst(UINT8*pDatabuf){int pbReadRet=-(0x69f+5392-0x1bae);memcpy(&
-g_PbOptRsp,pDatabuf,sizeof(T_zPb_optRsp));if(g_PbOptRsp.result==-
-(0x1b3b+693-0x1def)){atPb_IintPbErr(NULL);return;}pbReadRet=
-atPb_SendScpbrSet_repeat(g_Pb_sem_id);printf(
+,ptPara->slot,ptPara->slot_state);if(ptPara->slot_state==(0x831+3480-0x15c9)){
+CHAR needPb[(0x1396+3419-0x20bf)]={(0x36d+2644-0xdc1)};sc_cfg_get(
+NV_NEED_SUPPORT_PB,needPb,sizeof(needPb));if((0x3a3+1180-0x83f)!=strcmp(needPb,
+"\x6e\x6f")){atPb_CfgPbNvInit();atPb_DelAllRecsSimDb();}}}VOID zPb_RecvPbInitRst
+(UINT8*pDatabuf){int pbReadRet=-(0xe25+2465-0x17c5);memcpy(&g_PbOptRsp,pDatabuf,
+sizeof(T_zPb_optRsp));if(g_PbOptRsp.result==-(0x2fa+6726-0x1d3f)){atPb_IintPbErr
+(NULL);return;}pbReadRet=atPb_SendScpbrSet_repeat(g_Pb_sem_id);printf(
 "\x7a\x50\x62\x5f\x52\x65\x63\x76\x50\x62\x49\x6e\x69\x74\x52\x73\x74\x20\x72\x65\x73\x75\x6c\x74\x3a\x25\x64" "\n"
 ,pbReadRet);sc_cfg_set(ZPB_NV_INIT,ZPB_OPERATE_SUC);}void zPbLocalHandleWebMsg(
 MSG_BUF*ptMsgBuf){assert(ptMsgBuf!=NULL);printf(
@@ -65,18 +64,17 @@
 ,ptMsgBuf->usMsgCmd);switch(ptMsgBuf->usMsgCmd){case MSG_CMD_WRITE_PB:case 
 MSG_CMD_DEL_A_PB:case MSG_CMD_DEL_MUTI_PB:case MSG_CMD_DEL_ALL_PB:
 ipc_send_message(MODULE_ID_PB,MODULE_ID_PB_LOCAL,ptMsgBuf->usMsgCmd,ptMsgBuf->
-usDataLen,(unsigned char*)ptMsgBuf->aucDataBuf,(0x185+9012-0x24b9));break;
-default:break;}}UINT8 zPbMsgCreat(VOID){g_zPb_MsqId=msgget(MODULE_ID_PB,
-IPC_CREAT|(0xf61+5449-0x232a));if(g_zPb_MsqId==-(0x1f25+1594-0x255e)){return 
-ZUFI_FAIL;}g_zPb_LocalMsqId=msgget(MODULE_ID_PB_LOCAL,IPC_CREAT|
-(0xc17+1874-0x11e9));if(g_zPb_LocalMsqId==-(0x823+1921-0xfa3)){return ZUFI_FAIL;
-}sem_init(&g_Pb_sem_id,(0x793+8022-0x26e9),(0x806+4678-0x1a4c));return ZUFI_SUCC
-;}void detect_modem_state(void){CHAR state[(0xa95+2836-0x1577)]={
-(0x868+2941-0x13e5)};sc_cfg_get(
+usDataLen,(unsigned char*)ptMsgBuf->aucDataBuf,(0x1aa8+21-0x1abd));break;default
+:break;}}UINT8 zPbMsgCreat(VOID){g_zPb_MsqId=msgget(MODULE_ID_PB,IPC_CREAT|
+(0x1f8c+1554-0x241e));if(g_zPb_MsqId==-(0x2048+1388-0x25b3)){return ZUFI_FAIL;}
+g_zPb_LocalMsqId=msgget(MODULE_ID_PB_LOCAL,IPC_CREAT|(0x9b6+5350-0x1d1c));if(
+g_zPb_LocalMsqId==-(0xbda+6311-0x2480)){return ZUFI_FAIL;}sem_init(&g_Pb_sem_id,
+(0x1645+7-0x164c),(0x92+4256-0x1132));return ZUFI_SUCC;}void detect_modem_state(
+void){CHAR state[(0x327+7355-0x1fb0)]={(0x15c7+1114-0x1a21)};sc_cfg_get(
 "\x6d\x6f\x64\x65\x6d\x5f\x6d\x61\x69\x6e\x5f\x73\x74\x61\x74\x65",state,sizeof(
-state));if((0x20f3+589-0x2340)==strcmp(state,
+state));if((0x2015+1159-0x249c)==strcmp(state,
 "\x6d\x6f\x64\x65\x6d\x5f\x73\x69\x6d\x5f\x75\x6e\x64\x65\x74\x65\x63\x74\x65\x64"
-)||(0xa92+2813-0x158f)==strcmp(state,
+)||(0x74d+3568-0x153d)==strcmp(state,
 "\x6d\x6f\x64\x65\x6d\x5f\x73\x69\x6d\x5f\x64\x65\x73\x74\x72\x6f\x79")){
 sc_cfg_set("\x70\x62\x6d\x5f\x69\x6e\x69\x74\x5f\x66\x6c\x61\x67","\x30");}}void
  zPbLocalHandleAtctlMsg(MSG_BUF*ptMsgBuf){assert(ptMsgBuf!=NULL);printf(
@@ -95,28 +93,28 @@
 MSG_CMD_ZUSLOT_IND:zPb_RecvZuslotInd(ptMsgBuf->aucDataBuf);break;case 
 MSG_CMD_PBINIT_RSP:ipc_send_message(MODULE_ID_PB,MODULE_ID_PB_LOCAL,ptMsgBuf->
 usMsgCmd,ptMsgBuf->usDataLen,(unsigned char*)ptMsgBuf->aucDataBuf,
-(0x508+7212-0x2134));break;default:break;}}VOID zPbHandleResetToFactory(){CHAR 
-clearPb[(0x1156+706-0x13e6)]={(0x58+2486-0xa0e)};sc_cfg_get(
+(0xaa3+134-0xb29));break;default:break;}}VOID zPbHandleResetToFactory(){CHAR 
+clearPb[(0xa35+1482-0xfcd)]={(0x18a+8924-0x2466)};sc_cfg_get(
 NV_CLEAR_PB_WHEN_RESTORE,clearPb,sizeof(clearPb));printf(
 "\x61\x74\x57\x65\x62\x5f\x52\x65\x73\x74\x6f\x72\x65\x46\x61\x63\x74\x6f\x72\x79\x53\x65\x74\x74\x69\x6e\x67\x20\x65\x6e\x74\x65\x72\x65\x64\x21\x20" "\n"
 );printf(
 "\x63\x6c\x65\x61\x72\x5f\x70\x62\x5f\x77\x68\x65\x6e\x5f\x72\x65\x73\x74\x6f\x72\x65\x3d\x25\x73\x20" "\n"
-,clearPb);if(strcmp(clearPb,"\x79\x65\x73")==(0x7b3+6426-0x20cd)){atPb_DropDb();
+,clearPb);if(strcmp(clearPb,"\x79\x65\x73")==(0x999+4348-0x1a95)){atPb_DropDb();
 }ipc_send_message(MODULE_ID_PB,MODULE_ID_MAIN_CTRL,MSG_CMD_RESET_RSP,
-(0x2fd+8937-0x25e6),NULL,(0x1de3+537-0x1ffc));}void zPbHandleMainCtrlMsg(MSG_BUF
+(0x34d+4179-0x13a0),NULL,(0x61f+4619-0x182a));}void zPbHandleMainCtrlMsg(MSG_BUF
 *ptMsgBuf){assert(ptMsgBuf!=NULL);printf(
 "\x50\x62\x20\x72\x65\x63\x76\x20\x6d\x61\x69\x6e\x20\x63\x74\x72\x6c\x20\x6d\x73\x67\x20\x63\x6d\x64\x3a\x25\x64" "\n"
 ,ptMsgBuf->usMsgCmd);switch(ptMsgBuf->usMsgCmd){case MSG_CMD_RESET_NOTIFY:
 zPbHandleResetToFactory(ptMsgBuf->aucDataBuf);break;default:break;}}void 
-pb_msg_thread_proc(void*arg){int iRet=(0x181a+2591-0x2239);MSG_BUF stMsg={
-(0x1283+2988-0x1e2f)};int msgSize=sizeof(MSG_BUF)-sizeof(SINT32);int queueId=*((
+pb_msg_thread_proc(void*arg){int iRet=(0x192f+2308-0x2233);MSG_BUF stMsg={
+(0x635+5983-0x1d94)};int msgSize=sizeof(MSG_BUF)-sizeof(SINT32);int queueId=*((
 int*)arg);prctl(PR_SET_NAME,"\x70\x62\x5f\x6c\x6f\x63\x61\x6c",
-(0x1169+1787-0x1864),(0xae7+2151-0x134e),(0xfd2+1623-0x1629));while(
-(0x404+3434-0x116d)){iRet=(0x422+4821-0x16f7);memset(&stMsg,(0xd32+6486-0x2688),
-sizeof(MSG_BUF));iRet=msgrcv(queueId,&stMsg,msgSize,(0x10db+5500-0x2657),
-(0x7c5+1500-0xda1));printf(
+(0xa37+2900-0x158b),(0x17d1+3548-0x25ad),(0xaf3+2377-0x143c));while(
+(0xb07+2584-0x151e)){iRet=(0xeb1+5599-0x2490);memset(&stMsg,(0x1537+368-0x16a7),
+sizeof(MSG_BUF));iRet=msgrcv(queueId,&stMsg,msgSize,(0x1ad5+1861-0x221a),
+(0x1589+2344-0x1eb1));printf(
 "\x70\x62\x5f\x6d\x73\x67\x5f\x74\x68\x72\x65\x61\x64\x5f\x70\x72\x6f\x63\x3a\x25\x78\x2c\x25\x78\x20\x4d\x4f\x44\x55\x4c\x45\x5f\x49\x44\x5f\x41\x54\x5f\x43\x54\x4c\x3d\x25\x78" "\n"
-,stMsg.src_id,stMsg.usMsgCmd,MODULE_ID_AT_CTL);if(iRet>=(0x318+5503-0x1897)){
+,stMsg.src_id,stMsg.usMsgCmd,MODULE_ID_AT_CTL);if(iRet>=(0x12ba+2638-0x1d08)){
 switch(stMsg.src_id){case MODULE_ID_WEB_CGI:{zPbHandleWebMsg(&stMsg);break;}case
  MODULE_ID_AT_CTL:{zPbHandleAtctlMsg(&stMsg);break;}case MODULE_ID_PB:{
 zPbLocalHandleWebMsg(&stMsg);zPbLocalHandleAtctlMsg(&stMsg);break;}case 
@@ -124,29 +122,29 @@
 printf(
 "\x5b\x70\x62\x5d\x20\x65\x72\x72\x6e\x6f\x20\x3d\x20\x25\x64\x2c\x20\x65\x72\x72\x6d\x73\x67\x20\x3d\x20\x25\x73" "\n"
 ,errno,strerror(errno));}}}int phonebook_main(int argc,char*argv[]){pthread_t 
-recv_thread_tid=(0x9a+9090-0x241c);MSG_BUF msgBuf={(0x114c+4109-0x2159)};CHAR 
-needPb[(0x779+7182-0x2355)]={(0x8aa+3749-0x174f)};prctl(PR_SET_NAME,
-"\x70\x62\x5f\x6d\x61\x69\x6e",(0xbc+7381-0x1d91),(0x22c+6564-0x1bd0),
-(0x1c84+1667-0x2307));loglevel_init();sc_cfg_get(NV_NEED_SUPPORT_PB,needPb,
-sizeof(needPb));if((0xccd+2069-0x14e2)!=strcmp(needPb,"\x6e\x6f")){
+recv_thread_tid=(0x1680+3439-0x23ef);MSG_BUF msgBuf={(0xbdf+78-0xc2d)};CHAR 
+needPb[(0x44f+7592-0x21c5)]={(0xa03+5057-0x1dc4)};prctl(PR_SET_NAME,
+"\x70\x62\x5f\x6d\x61\x69\x6e",(0x11dd+4927-0x251c),(0x1aa4+1083-0x1edf),
+(0x82c+221-0x909));loglevel_init();sc_cfg_get(NV_NEED_SUPPORT_PB,needPb,sizeof(
+needPb));if((0x5b4+8298-0x261e)!=strcmp(needPb,"\x6e\x6f")){
 #ifdef WEBS_SECURITY

-if(access(ZPB_DB_PATH,F_OK)!=(0x996+7494-0x26dc)){if(access(ZPB_TMP_PATH,F_OK)==
-(0x257a+50-0x25ac)){if(remove(ZPB_SEC_PATH)!=(0x645+3963-0x15c0)){slog(PB_PRINT,
+if(access(ZPB_DB_PATH,F_OK)!=(0x184+8080-0x2114)){if(access(ZPB_TMP_PATH,F_OK)==
+(0x1617+3664-0x2467)){if(remove(ZPB_SEC_PATH)!=(0xdfa+357-0xf5f)){slog(PB_PRINT,
 SLOG_ERR,
 "\x72\x65\x6d\x6f\x76\x65\x20\x5a\x50\x42\x5f\x53\x45\x43\x5f\x50\x41\x54\x48\x20\x66\x61\x69\x6c"
-);}if(rename(ZPB_TMP_PATH,ZPB_SEC_PATH)!=(0x1205+3326-0x1f03)){slog(PB_PRINT,
+);}if(rename(ZPB_TMP_PATH,ZPB_SEC_PATH)!=(0x664+4211-0x16d7)){slog(PB_PRINT,
 SLOG_ERR,
 "\x72\x65\x6e\x61\x6d\x65\x20\x5a\x50\x42\x5f\x54\x4d\x50\x5f\x50\x41\x54\x48\x20\x66\x61\x69\x6c"
-);}}if(access(ZPB_SEC_PATH,F_OK)==(0x1642+225-0x1723)){char rnum_buf[
-(0x2cb+3129-0xeec)]={(0x733+5157-0x1b58)};char cmd[(0x1c02+1107-0x1fd5)]={
-(0x1692+3668-0x24e6)};sc_cfg_get("\x72\x6e\x75\x6d\x5f\x61\x74",rnum_buf,sizeof(
+);}}if(access(ZPB_SEC_PATH,F_OK)==(0x51+8397-0x211e)){char rnum_buf[
+(0x176a+2508-0x211e)]={(0x227f+458-0x2449)};char cmd[(0x5e6+7698-0x2378)]={
+(0x547+5977-0x1ca0)};sc_cfg_get("\x72\x6e\x75\x6d\x5f\x61\x74",rnum_buf,sizeof(
 rnum_buf));snprintf(cmd,sizeof(cmd),
 "\x2f\x62\x69\x6e\x2f\x6f\x70\x65\x6e\x73\x73\x6c\x20\x65\x6e\x63\x20\x2d\x64\x20\x2d\x61\x65\x73\x32\x35\x36\x20\x2d\x73\x61\x6c\x74\x20\x2d\x69\x6e\x20\x25\x73\x20\x2d\x6f\x75\x74\x20\x25\x73\x20\x2d\x70\x61\x73\x73\x20\x70\x61\x73\x73\x3a\x25\x73"
 ,ZPB_SEC_PATH,ZPB_DB_PATH,rnum_buf);zxic_system(cmd);}}
 #endif		

-zPbMsgCreat();atPb_Init();}else{return-(0xf6f+1394-0x14e0);}printf(
+zPbMsgCreat();atPb_Init();}else{return-(0xb1+1450-0x65a);}printf(
 "\x50\x62\x20\x61\x70\x70\x20\x69\x6e\x69\x74\x20\x66\x69\x6e\x69\x73\x68\x65\x64\x2c\x20\x77\x69\x6c\x6c\x20\x74\x6f\x20\x72\x65\x63\x65\x69\x76\x65\x20\x6d\x73\x67\x2c\x20\x6d\x73\x67\x69\x64\x3a\x25\x64" "\n"
 ,g_zPb_MsqId);if(pthread_create(&recv_thread_tid,NULL,pb_msg_thread_proc,(void*)
-(&g_zPb_LocalMsqId))==-(0x18d+2844-0xca8)){assert((0x664+7313-0x22f5));}
-detect_modem_state();pb_msg_thread_proc(&g_zPb_MsqId);return(0x153d+4168-0x2585)
-;}
+(&g_zPb_LocalMsqId))==-(0x982+4628-0x1b95)){assert((0x42f+421-0x5d4));}
+detect_modem_state();pb_msg_thread_proc(&g_zPb_MsqId);return(0x1f0a+919-0x22a1);
+}
diff --git a/ap/app/zte_comm/phonebook/src/pb_proc.c b/ap/app/zte_comm/phonebook/src/pb_proc.c
index 79281f9..1d91f74 100755
--- a/ap/app/zte_comm/phonebook/src/pb_proc.c
+++ b/ap/app/zte_comm/phonebook/src/pb_proc.c
@@ -3,185 +3,187 @@
 #include <semaphore.h>

 #include <limits.h>

 #include "pb_com.h"

-#define ZPB_UCS2                    (0x12a6+1446-0x184b)

-#define ZPB_UCS2_PREFIX             (0x1c07+2056-0x238f)

-#define ZPB_UCS2_PREFIX_LEN         (0xc48+4273-0x1cf7)

-#define ZPB_NON_GSM                     (0x1e18+823-0x212f)

-#define ZPB_GSM_CHARACTER_SET_SIZE      (0x158b+2807-0x2002)

-#define ZPB_INIT_LOAD_RECORD_NUM    (0x1517+296-0x160d)

+#define ZPB_UCS2                    (0x7fb+7181-0x2407)

+#define ZPB_UCS2_PREFIX             (0x1c03+2519-0x255a)

+#define ZPB_UCS2_PREFIX_LEN         (0x1c4d+2372-0x258f)

+#define ZPB_NON_GSM                     (0xfe6+3377-0x1cf7)

+#define ZPB_GSM_CHARACTER_SET_SIZE      (0x429+6395-0x1ca4)

+#define ZPB_INIT_LOAD_RECORD_NUM    (0x526+8420-0x25d8)

 VOID atPb_CvtChCode(UINT16 basePointer,UINT8 srcData,UINT8*chMsb,UINT8*chLsb);
 BOOL atPb_CvtU82ToU80(const UINT8*srcData,UINT32 srcLen,UINT8*destData,UINT32 
 destLen);BOOL atPb_CvtU81ToU80(const UINT8*srcData,UINT32 srcLen,UINT8*destData,
 UINT32 destLen);extern VOID atPb_ClearSimPbmIndexArray(VOID);extern sem_t 
 g_Pb_sem_id;extern T_zPb_optRsp g_PbOptRsp;UINT32 g_zPb_DelIndex=
-(0xe3+7913-0x1fcc);SINT32 g_zPb_SimIndex[ZPB_SIM_MAX_RECORD+(0x80+6286-0x190d)]=
-{(0x22e5+647-0x256c)};SINT32 g_zPb_ApIndex[ZPB_AP_MAX_RECORD+(0xc53+3990-0x1be8)
-]={(0x13b5+3257-0x206e)};T_zPb_DelStatusMultiOrAll g_zPb_DelStatusUsim={
-(0x11b3+2885-0x1cf8)};const unsigned char G_ZPB_NEWUCS2TOGSM[
-ZPB_GSM_CHARACTER_SET_SIZE*(0x246d+88-0x24c3)]={ZPB_NON_GSM,ZPB_NON_GSM,
+(0x4f4+2872-0x102c);SINT32 g_zPb_SimIndex[ZPB_SIM_MAX_RECORD+(0x20f9+303-0x2227)
+]={(0x1998+2252-0x2264)};SINT32 g_zPb_ApIndex[ZPB_AP_MAX_RECORD+
+(0xcf8+4754-0x1f89)]={(0x2250+1189-0x26f5)};T_zPb_DelStatusMultiOrAll 
+g_zPb_DelStatusUsim={(0x2477+445-0x2634)};const unsigned char G_ZPB_NEWUCS2TOGSM
+[ZPB_GSM_CHARACTER_SET_SIZE*(0x1287+4968-0x25ed)]={ZPB_NON_GSM,ZPB_NON_GSM,
 ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,
-ZPB_NON_GSM,ZPB_NON_GSM,(0x1792+557-0x19b5),ZPB_NON_GSM,ZPB_NON_GSM,
-(0xef6+1787-0x15e4),ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,
+ZPB_NON_GSM,ZPB_NON_GSM,(0x979+1851-0x10aa),ZPB_NON_GSM,ZPB_NON_GSM,
+(0x303+3995-0x1291),ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,
 ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,
 ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,
-ZPB_NON_GSM,(0x19a0+2220-0x222c),(0x1517+2614-0x1f2c),(0xca8+438-0xe3c),
-(0x1214+4662-0x2427),(0x8b4+7130-0x248c),(0xc6+7708-0x1ebd),(0xf74+5982-0x26ac),
-(0x580+1653-0xbce),(0x126c+5060-0x2608),(0x831+3684-0x166c),(0x844+2882-0x135c),
-(0x3c4+3041-0xf7a),(0xd9+8495-0x21dc),(0x1f56+123-0x1fa4),(0xaaa+5756-0x20f8),
-(0x1e6+8611-0x235a),(0x3dd+6964-0x1ee1),(0xcda+2593-0x16ca),(0x23c7+191-0x2454),
-(0x1785+94-0x17b0),(0xa1a+2605-0x1413),(0x180b+1867-0x1f21),(0x14b7+1216-0x1941)
-,(0xaeb+2278-0x139a),(0x1e79+662-0x20d7),(0x61a+732-0x8bd),(0x1353+3734-0x21af),
-(0x3a1+7709-0x2183),(0x17e7+1910-0x1f21),(0x1189+4886-0x2462),
-(0x256+5752-0x1890),(0x2e4+8133-0x226a),(0xd27+4713-0x1f90),(0xc81+2313-0x1549),
-(0x1501+1259-0x19aa),(0xd2b+4300-0x1db4),(0xf02+5551-0x246d),(0x5f8+8471-0x26ca)
-,(0x9f0+5178-0x1de4),(0x1ab+4552-0x132c),(0x42a+2773-0xeb7),(0x362+9143-0x26d0),
-(0x6cf+4528-0x1835),(0x457+4662-0x1642),(0x2a7+8733-0x2478),(0x9c3+3326-0x1674),
-(0xa0c+6810-0x2458),(0x10b2+2213-0x1908),(0x16fc+2775-0x2183),
-(0xb30+1495-0x10b6),(0x1546+3985-0x2485),(0x41c+7699-0x21dc),(0x23c3+324-0x24b3)
-,(0x13ac+1473-0x1918),(0x3c0+2952-0xef2),(0xebb+1669-0x14e9),(0xbda+1484-0x114e)
-,(0x1cb9+1723-0x231b),(0x6a+577-0x251),(0x547+7426-0x21ee),ZPB_NON_GSM,
-(0x1112+19-0x10c8),ZPB_NON_GSM,(0x75b+1618-0xd9c),ZPB_NON_GSM,
-(0x5d4+5444-0x1ab7),(0x757+1477-0xcba),(0x1ce1+809-0x1fa7),(0xcd0+265-0xd75),
-(0x5df+3200-0x11fa),(0x1fc+2805-0xc8b),(0xcf3+2091-0x14b7),(0xef6+5166-0x22bc),
-(0x1080+3431-0x1d7e),(0x604+5804-0x1c46),(0x1daa+549-0x1f64),(0x787+251-0x816),
-(0x1cfd+1282-0x2192),(0xacc+4197-0x1ac3),(0xb4c+432-0xc8d),(0x1af9+1821-0x21a6),
-(0x1711+298-0x17ca),(0x13a1+3934-0x228d),(0x3a7+1396-0x8a8),(0x80+5023-0x13ab),
-(0x417+8065-0x2323),(0xfd1+301-0x1088),(0x1492+2631-0x1e62),(0x1fe6+1297-0x247f)
-,(0x11d7+268-0x126a),(0x889+6166-0x2025),ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,
+ZPB_NON_GSM,(0x597+7331-0x221a),(0x3d1+7344-0x2060),(0xbb6+2185-0x141d),
+(0x8d8+3936-0x1815),(0x1949+2736-0x23f7),(0x179b+3462-0x24fc),
+(0x1bc7+1108-0x1ff5),(0x1bd2+2606-0x25d9),(0x15d4+4232-0x2634),
+(0x1a5f+1368-0x1f8e),(0xa92+5590-0x203e),(0xe66+5749-0x24b0),
+(0x1258+5096-0x2614),(0x2a1+4083-0x1267),(0xa78+7228-0x2686),(0xf51+4429-0x206f)
+,(0x1324+4114-0x2306),(0xce1+6220-0x24fc),(0xb55+3329-0x1824),(0x74+8561-0x21b2)
+,(0x1cf4+101-0x1d25),(0x86b+510-0xa34),(0x51+8535-0x2172),(0x602+1655-0xc42),
+(0x16fc+3568-0x24b4),(0x448+4101-0x1414),(0x184a+746-0x1afa),(0xc48+2223-0x14bc)
+,(0x19a9+3382-0x26a3),(0x36f+8920-0x260a),(0x161a+3626-0x2406),
+(0xca9+6669-0x2677),(0x100+9542-0x2646),(0x1753+2226-0x1fc4),
+(0x10b7+4216-0x20ed),(0x19b2+2940-0x24eb),(0xfdd+3669-0x1dee),
+(0x1947+2328-0x221a),(0x8a5+7415-0x2556),(0x110f+4819-0x239b),
+(0x1837+1547-0x1dfa),(0x1d98+1163-0x21da),(0x572+4197-0x158d),(0x81d+1230-0xca0)
+,(0x49a+8541-0x25ab),(0x1178+2195-0x19be),(0x1649+3497-0x23a4),
+(0x168a+641-0x18bc),(0x14a1+4470-0x25c7),(0xc23+1110-0x1028),
+(0x10b9+3946-0x1fd1),(0x552+1534-0xafd),(0xc9f+4919-0x1f82),(0x6d3+592-0x8ce),
+(0x51c+5018-0x1860),(0x88b+7225-0x246d),(0x12b9+764-0x155d),(0x1231+4663-0x240f)
+,(0x178+9554-0x2670),(0x103c+4338-0x20d3),ZPB_NON_GSM,(0x71b+2731-0x1169),
+ZPB_NON_GSM,(0x1617+3704-0x247e),ZPB_NON_GSM,(0x519+2994-0x106a),
+(0x362+7361-0x1fc1),(0x18c+7436-0x1e35),(0x274+1637-0x875),(0x5e8+6249-0x1dec),
+(0x25c+6770-0x1c68),(0x392+6386-0x1c1d),(0x29f+5867-0x1922),(0xdfc+669-0x1030),
+(0x1abb+1326-0x1f7f),(0x129d+1027-0x1635),(0x523+6333-0x1d74),
+(0x1038+212-0x109f),(0x11e0+2917-0x1cd7),(0x1973+2140-0x2160),
+(0x2b8+7210-0x1e72),(0x1180+4088-0x2107),(0xe3d+2072-0x15e3),(0xb86+854-0xe69),
+(0x946+6478-0x2220),(0x2d1+4891-0x1577),(0x10fd+4044-0x2053),(0xe91+1029-0x121f)
+,(0x1dda+512-0x1f62),(0xcdb+115-0xcd5),(0x1249+2648-0x1c27),ZPB_NON_GSM,
 ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,
 ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,
 ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,
 ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,
 ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,
-ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,(0x533+4130-0x1515),
-ZPB_NON_GSM,(0xb4b+3590-0x1950),(0x7f1+4771-0x1a70),(0xe4+2684-0xb5d),
-ZPB_NON_GSM,(0xc8d+6850-0x26f0),ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,
+ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,
+ZPB_NON_GSM,(0x14ad+2801-0x1f5e),ZPB_NON_GSM,(0xdf9+4085-0x1ded),
+(0x1fff+515-0x21de),(0x1605+312-0x173a),ZPB_NON_GSM,(0x3d2+4114-0x1385),
 ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,
 ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,
 ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,
-ZPB_NON_GSM,(0x79d+7347-0x23f0),(0x2ec+1903-0xa1a),(0xdea+3260-0x1a65),
-(0x172c+910-0x1a79),(0xb37+4674-0x1d38),(0xa47+2024-0x11d4),(0xe74+5055-0x2225),
-(0x2ed+1716-0x985),(0x297+8280-0x22e6),(0x1b4+4057-0x1148),(0x1f8d+1725-0x262b),
-(0x5dc+3905-0x14d8),(0x1363+1226-0x17e8),(0x3a7+6333-0x1c1b),(0xe71+51-0xe5b),
-(0x2bf+2634-0xcc0),(0x1b8+4685-0x13bc),ZPB_NON_GSM,(0x94+9805-0x2684),
-(0x17f1+2538-0x218c),(0x12e2+4078-0x2281),(0x102+7766-0x1f09),
-(0xc87+1314-0x115a),(0x5a9+3368-0x1275),ZPB_NON_GSM,(0xa81+648-0xcfe),
-(0x600+2099-0xdde),(0x4a8+8623-0x2602),(0x2fd+6895-0x1d97),(0x15a7+1280-0x1a49),
-(0x8f9+3580-0x169c),ZPB_NON_GSM,(0xf56+4483-0x20bb),(0x156c+1965-0x1c9a),
-(0x129f+5227-0x26a9),(0x1687+1143-0x1a9d),(0x171f+4145-0x26ef),
-(0x1415+76-0x13e6),(0x20f4+1318-0x260b),(0x814+3094-0x140d),(0x1ca5+702-0x1f5a),
-(0x1cfc+315-0x1e33),(0x21c8+384-0x2343),(0xaaa+2915-0x15a8),(0x916+4618-0x1abb),
-(0x726+4654-0x194d),(0x15b3+3665-0x239b),(0x85f+3156-0x144a),
-(0x1944+1218-0x1d9d),ZPB_NON_GSM,(0x550+5603-0x1ab6),(0x8e5+6421-0x21f2),
-(0x137+301-0x1f5),(0x107c+5372-0x2509),(0xb32+1527-0x10ba),(0xb3b+6510-0x242d),
-ZPB_NON_GSM,(0x1531+3129-0x215e),(0x12fb+492-0x14e1),(0xa26+767-0xcb0),
-(0x16cb+2235-0x1f11),(0x13c0+2964-0x1ed6),(0x1245+605-0x1429),ZPB_NON_GSM,
-(0x9c3+695-0xc01)};VOID atPb_Init(VOID){UINT32 pbCount=(0x14b3+2925-0x2020);
-g_zPb_SimIndex[(0xce8+1545-0x12f1)]=(0x1388+1118-0x17e6);sc_cfg_set(ZPB_NV_INIT,
+ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,ZPB_NON_GSM,(0x1ad8+1861-0x21bd)
+,(0x60+6414-0x192d),(0x1cf7+2015-0x2495),(0x1426+116-0x1459),
+(0x212d+1106-0x253e),(0xd47+2602-0x1716),(0x2f4+2934-0xe5c),(0x5a8+5035-0x1937),
+(0x613+111-0x679),(0x177+6680-0x1b4a),(0x6a5+3013-0x124b),(0x1235+2169-0x1a69),
+(0x1788+1427-0x1cd6),(0x326+1990-0xaa3),(0x6e3+148-0x72e),(0x5ef+1769-0xc8f),
+(0xbf+5281-0x1517),ZPB_NON_GSM,(0x67c+5082-0x19f9),(0x1c9+2852-0xc9e),
+(0x1761+2616-0x214a),(0x654+2737-0x10b6),(0x977+4381-0x1a45),(0x12c+7193-0x1ce9)
+,ZPB_NON_GSM,(0x255+9348-0x26ce),(0xba1+6225-0x239d),(0x14a6+4431-0x25a0),
+(0xef0+804-0x11bf),(0xaed+6032-0x221f),(0x807+2837-0x12c3),ZPB_NON_GSM,
+(0x2174+156-0x21f2),(0xc0d+1080-0xfc6),(0x628+1410-0xb49),(0x406+4114-0x13b7),
+(0xbe8+2399-0x14e6),(0xa22+6018-0x2129),(0xf13+4998-0x228a),(0x3f2+1650-0xa47),
+(0x2e8+9212-0x26db),(0x15a4+2529-0x1f81),(0x1245+354-0x13a2),(0x188+5710-0x1771)
+,(0x368+6262-0x1b79),(0x1153+776-0x1454),(0xd46+5433-0x2216),(0xbb6+5086-0x1f2b)
+,(0x16a9+2567-0x2047),ZPB_NON_GSM,(0xaec+4571-0x1c4a),(0x98+3653-0xed5),
+(0x418+411-0x544),(0xe38+290-0xeeb),(0x56d+3368-0x1226),(0xed8+1104-0x12ac),
+ZPB_NON_GSM,(0x1b9c+1092-0x1fd4),(0x770+7359-0x2429),(0xb04+6779-0x250a),
+(0x6a7+7695-0x2441),(0x2398+948-0x26ce),(0x1722+1937-0x1e3a),ZPB_NON_GSM,
+(0xb8+1676-0x6cb)};VOID atPb_Init(VOID){UINT32 pbCount=(0x1c08+1202-0x20ba);
+g_zPb_SimIndex[(0x3c9+4335-0x14b8)]=(0x1036+2405-0x199b);sc_cfg_set(ZPB_NV_INIT,
 ZPB_LOADING);(VOID)sc_cfg_set(ZPB_NV_WRITE_FLAG,ZPB_OPERATE_SUC);for(pbCount=
-(0x661+887-0x9d7);pbCount<=ZPB_SIM_MAX_RECORD;pbCount++){g_zPb_SimIndex[pbCount]
-=PBM_ERROR_NOT_FOUND;}if(ZPB_DB_OK!=atPb_CreatDb()){slog(PB_PRINT,SLOG_ERR,
-"pb:atPb_Init:create pbm table failed\n");return;}if(ZPB_DB_OK!=atPb_InitApIndex
-()){slog(PB_PRINT,SLOG_ERR,
+(0xf55+2960-0x1ae4);pbCount<=ZPB_SIM_MAX_RECORD;pbCount++){g_zPb_SimIndex[
+pbCount]=PBM_ERROR_NOT_FOUND;}if(ZPB_DB_OK!=atPb_CreatDb()){slog(PB_PRINT,
+SLOG_ERR,"pb:atPb_Init:create pbm table failed\n");return;}if(ZPB_DB_OK!=
+atPb_InitApIndex()){slog(PB_PRINT,SLOG_ERR,
 "\x70\x62\x3a\x61\x74\x50\x62\x5f\x49\x6e\x69\x74\x3a\x69\x6e\x69\x74\x20\x61\x70\x49\x6e\x64\x65\x78\x20\x66\x61\x69\x6c\x65\x64" "\n"
 );return;}(VOID)atPb_SetApCapacityTable();}VOID atPb_CfgPbNvInit(VOID){(VOID)
 sc_cfg_set(ZPB_NV_USIMINDEXMIN,"\x30");(VOID)sc_cfg_set(ZPB_NV_USIMINDEXMAX,
 "\x30");(VOID)sc_cfg_set(ZPB_NV_USIMMEMORYFULL,"\x6e\x6f");}int 
 atpb_CvtUcs2ToAlphaField(char*src,int srcLen,char*dest){int i=
-(0x22c+9344-0x26ac);int min=32767;int max=(0x80a+5296-0x1cba);int temp=
-(0x3b6+2532-0xd9a);int outOff=(0x1796+1458-0x1d48);printf(
+(0x45d+6281-0x1ce6);int min=32767;int max=(0xe02+4564-0x1fd6);int temp=
+(0x70d+3023-0x12dc);int outOff=(0x1ee8+605-0x2145);printf(
 "\x5b\x50\x42\x5d\x20\x61\x74\x70\x62\x5f\x43\x76\x74\x55\x63\x73\x32\x54\x6f\x41\x6c\x70\x68\x61\x46\x69\x65\x6c\x64\x2c\x20\x73\x72\x63\x4c\x65\x6e\x3d\x25\x64" "\n"
-,srcLen);if(srcLen<=(0x1c5f+1016-0x2057)||src==NULL||dest==NULL){return-
-(0x73b+4111-0x1749);}if(srcLen<=(0x892+5131-0x1c9b)){dest[(0xf73+4210-0x1fe5)]=
-(0x3c0+779-0x64b);memcpy(dest+(0x548+4231-0x15ce),src,srcLen);printf(
+,srcLen);if(srcLen<=(0x1616+2220-0x1ec2)||src==NULL||dest==NULL){return-
+(0x3b1+2989-0xf5d);}if(srcLen<=(0x6aa+7273-0x2311)){dest[(0x18db+108-0x1947)]=
+(0xd05+6190-0x24b3);memcpy(dest+(0x100+4134-0x1125),src,srcLen);printf(
 "\x5b\x50\x42\x5d\x20\x61\x74\x70\x62\x5f\x43\x76\x74\x55\x63\x73\x32\x54\x6f\x41\x6c\x70\x68\x61\x46\x69\x65\x6c\x64\x2c\x20\x75\x73\x65\x20\x38\x30\x20\x63\x6f\x64\x65\x2c\x20\x6c\x65\x6e\x20\x3d\x25\x64" "\n"
-,srcLen+(0x1090+3170-0x1cf1));return srcLen+(0x96a+2969-0x1502);}for(i=
-(0x1d83+1531-0x237e);i<srcLen;i+=(0x7ca+4464-0x1938)){if(src[i]!=
-(0xd29+1238-0x11ff)){temp=(int)(((src[i]<<(0x1557+3011-0x2112))&65280)|(src[i+
-(0xc83+389-0xe07)]&(0x16ea+41-0x1614)));
-#if (0x8eb+6611-0x22be) 
-if(temp<(0x1938+204-0x1a04)){max=min+(0xb0f+433-0xc3e);break;}
+,srcLen+(0x1452+3286-0x2127));return srcLen+(0x1463+2432-0x1de2);}for(i=
+(0x3db+6236-0x1c37);i<srcLen;i+=(0x459+8304-0x24c7)){if(src[i]!=
+(0x7ac+7829-0x2641)){temp=(int)(((src[i]<<(0x11bf+373-0x132c))&65280)|(src[i+
+(0xd68+1675-0x13f2)]&(0x886+5433-0x1cc0)));
+#if (0x5fb+2758-0x10c1) 
+if(temp<(0x13a6+4297-0x246f)){max=min+(0x42c+4710-0x1610);break;}
 #endif            

 if(min>temp){min=temp;}if(max<temp){max=temp;}}}printf(
 "\x5b\x50\x42\x5d\x20\x61\x74\x70\x62\x5f\x43\x76\x74\x55\x63\x73\x32\x54\x6f\x41\x6c\x70\x68\x61\x46\x69\x65\x6c\x64\x2c\x20\x6d\x69\x6e\x3d\x25\x64\x2c\x20\x6d\x61\x78\x3d\x25\x64" "\n"
-,min,max);if((max-min)<(0x1fa6+1252-0x2409)){if((unsigned char)(min&
-(0x366+4538-0x14a0))==(unsigned char)(max&(0x1188+3656-0x1f50))){dest[
-(0x43b+5222-0x18a0)]=(unsigned char)(srcLen/(0xca+5685-0x16fd));dest[
-(0x1915+2857-0x243e)]=(unsigned char)(0xb6+2005-0x80a);min=(int)(min&32640);dest
-[(0x1bfa+495-0x1de7)]=(unsigned char)((min>>(0x17f+4933-0x14bd))&
-(0x1023+1610-0x156e));outOff=(0x11e7+4445-0x2341);printf(
+,min,max);if((max-min)<(0x1b7+6353-0x1a07)){if((unsigned char)(min&
+(0x1603+2776-0x205b))==(unsigned char)(max&(0x7f9+3758-0x1627))){dest[
+(0x1a46+2250-0x230f)]=(unsigned char)(srcLen/(0x1033+3501-0x1dde));dest[
+(0x626+1092-0xa6a)]=(unsigned char)(0x1a64+545-0x1c04);min=(int)(min&32640);dest
+[(0xd28+1326-0x1254)]=(unsigned char)((min>>(0x6bd+6707-0x20e9))&
+(0x617+3360-0x1238));outOff=(0xd41+1346-0x1280);printf(
 "\x5b\x50\x42\x5d\x20\x61\x74\x70\x62\x5f\x43\x76\x74\x55\x63\x73\x32\x54\x6f\x41\x6c\x70\x68\x61\x46\x69\x65\x6c\x64\x2c\x20\x75\x73\x65\x20\x38\x31\x20\x63\x6f\x64\x65" "\n"
-);}else{dest[(0x1957+1921-0x20d7)]=(unsigned char)(srcLen/(0xad6+27-0xaef));dest
-[(0x1b6d+971-0x1f38)]=(unsigned char)(0x174+4121-0x110b);dest[(0x2fd+2526-0xcd9)
-]=(unsigned char)((min>>(0x19d7+2644-0x2423))&(0xb38+3625-0x1862));dest[
-(0x226+5750-0x1899)]=(unsigned char)(min&(0x399+1338-0x7d4));outOff=
-(0xb07+6027-0x228e);printf(
+);}else{dest[(0x1cba+2309-0x25be)]=(unsigned char)(srcLen/(0xa3d+4558-0x1c09));
+dest[(0xa66+2558-0x1464)]=(unsigned char)(0xd37+4188-0x1d11);dest[
+(0x20d8+1549-0x26e3)]=(unsigned char)((min>>(0x978+5355-0x1e5b))&
+(0x488+6302-0x1c27));dest[(0x5d1+5207-0x1a25)]=(unsigned char)(min&
+(0xe4c+5235-0x21c0));outOff=(0x12e2+3671-0x2135);printf(
 "\x5b\x50\x42\x5d\x20\x61\x74\x70\x62\x5f\x43\x76\x74\x55\x63\x73\x32\x54\x6f\x41\x6c\x70\x68\x61\x46\x69\x65\x6c\x64\x2c\x20\x75\x73\x65\x20\x38\x32\x20\x63\x6f\x64\x65" "\n"
-);}for(i=(0x1003+3959-0x1f7a);i<srcLen;i+=(0xba0+3338-0x18a8)){if(src[i]==
-(0x88d+7355-0x2548)){dest[outOff]=(unsigned char)(src[i+(0x887+5369-0x1d7f)]&
-(0x186+3645-0xf44));}else{temp=(int)((((src[i]<<(0x16c2+4068-0x269e))&65280)|(
-src[i+(0x112c+3555-0x1f0e)]&(0xbff+4305-0x1bd1)))-min);dest[outOff]=(unsigned 
-char)(temp|(0x23c4+285-0x2461));}outOff++;}printf(
+);}for(i=(0x262+3273-0xf2b);i<srcLen;i+=(0xbfb+533-0xe0e)){if(src[i]==
+(0x171b+3460-0x249f)){dest[outOff]=(unsigned char)(src[i+(0x1278+595-0x14ca)]&
+(0x8a8+7460-0x254d));}else{temp=(int)((((src[i]<<(0x14dd+4039-0x249c))&65280)|(
+src[i+(0x554+661-0x7e8)]&(0x2d5+5680-0x1806)))-min);dest[outOff]=(unsigned char)
+(temp|(0xe6c+1749-0x14c1));}outOff++;}printf(
 "\x5b\x50\x42\x5d\x20\x61\x74\x70\x62\x5f\x43\x76\x74\x55\x63\x73\x32\x54\x6f\x41\x6c\x70\x68\x61\x46\x69\x65\x6c\x64\x2c\x20\x20\x6f\x75\x74\x4f\x66\x66\x3d\x25\x64\x2c\x64\x65\x73\x74\x5b\x25\x64\x5d\x3d\x25\x78" "\n"
-,outOff,outOff,dest[outOff]);return outOff;}dest[(0xf33+1162-0x13bd)]=
-(0x20b+5103-0x157a);memcpy(dest+(0x1847+3385-0x257f),src,srcLen);printf(
+,outOff,outOff,dest[outOff]);return outOff;}dest[(0x214+4838-0x14fa)]=
+(0x1d15+2625-0x26d6);memcpy(dest+(0x1013+5475-0x2575),src,srcLen);printf(
 "\x5b\x50\x42\x5d\x20\x61\x74\x70\x62\x5f\x43\x76\x74\x55\x63\x73\x32\x54\x6f\x41\x6c\x70\x68\x61\x46\x69\x65\x6c\x64\x2c\x20\x75\x73\x65\x20\x38\x30\x20\x63\x6f\x64\x65\x2c\x20\x6c\x65\x6e\x20\x3d\x25\x64" "\n"
-,srcLen+(0x17aa+2465-0x214a));return srcLen+(0xe84+5401-0x239c);}int 
+,srcLen+(0x135f+488-0x1546));return srcLen+(0xc13+609-0xe73);}int 
 atPb_GetU80Code(const UINT8*srcCode,UINT32 srcCodeLen,UINT8*destCode,UINT32 
 destCodeLen){assert(destCode!=NULL&&srcCode!=NULL);if(srcCodeLen==
-(0x175+1076-0x5a9)||destCodeLen==(0x38b+258-0x48d)||destCodeLen<srcCodeLen){
-return-(0x8f4+4949-0x1c48);}memset(destCode,(0x5b2+737-0x893),destCodeLen);
-destCode[(0x1096+3569-0x1e87)]=(0x124a+2936-0x1d42);printf(
+(0xe67+4431-0x1fb6)||destCodeLen==(0x11af+3769-0x2068)||destCodeLen<srcCodeLen){
+return-(0x6f+2958-0xbfc);}memset(destCode,(0xdb+8054-0x2051),destCodeLen);
+destCode[(0x9b+6389-0x1990)]=(0xf4d+3447-0x1c44);printf(
 "\x63\x68\x65\x6e\x6a\x69\x65\x20\x2d\x2d\x2d\x2d\x2d\x61\x74\x50\x62\x5f\x47\x65\x74\x55\x38\x30\x43\x6f\x64\x65\x2d\x2d\x2d\x2d\x2d\x73\x72\x63\x43\x6f\x64\x65\x5b\x30\x5d\x20\x3d\x20\x25\x64" "\n"
-,srcCode[(0xa3f+4935-0x1d86)]);switch(srcCode[(0x6a7+6355-0x1f7a)]){case
-(0x194+6164-0x1928):{memcpy(destCode,srcCode,srcCodeLen);return srcCodeLen;}case
-(0xff2+5319-0x2438):{atPb_CvtU81ToU80(srcCode+(0x3da+7753-0x2222),srcCodeLen-
-(0xe5d+4314-0x1f36),destCode+(0xce8+3056-0x18d7),destCodeLen-
-(0x18f1+3247-0x259f));return srcCode[(0x21f4+70-0x2239)]*(0x12b2+1888-0x1a10)+
-(0x522+424-0x6c9);}case(0x469+8288-0x2447):{atPb_CvtU82ToU80(srcCode+
-(0xa99+6569-0x2441),srcCodeLen-(0x661+8118-0x2616),destCode+(0x188+9066-0x24f1),
-destCodeLen-(0x1071+5680-0x26a0));return srcCode[(0xe5a+4618-0x2063)]*
-(0x204c+693-0x22ff)+(0x1afb+101-0x1b5f);}default:{return-(0x53b+6903-0x2031);}}}
-BOOL atPb_CvtU82ToU80(const UINT8*srcData,UINT32 srcLen,UINT8*destData,UINT32 
-destLen){UINT8 chNum=(0x118c+215-0x1263);UINT16 basePointer=(0x432+5101-0x181f);
-UINT8 iCurChar=(0x357+4977-0x16c8);UINT32 iCurSrc=(0x1667+3382-0x239d);chNum=(
-UINT32)srcData[(0x19eb+1923-0x216e)];basePointer=(UINT16)srcData[
-(0x7cc+1729-0xe8c)];basePointer=basePointer<<(0x123b+524-0x143f);basePointer=
-basePointer+srcData[(0xdbc+118-0xe30)];if(chNum*(0x11f5+1449-0x179c)>destLen){
-return FALSE;}for(iCurSrc=(0xca0+3751-0x1b44);iCurSrc<srcLen&&iCurChar<chNum;
-iCurSrc++,iCurChar++){UINT8*curDest=destData+(0x52b+407-0x6c0)*iCurChar;
-atPb_CvtChCode(basePointer,srcData[iCurSrc],curDest,curDest+(0x378+2201-0xc10));
-}return TRUE;}BOOL atPb_CvtU81ToU80(const UINT8*srcData,UINT32 srcLen,UINT8*
-destData,UINT32 destLen){UINT8 chNum=(0xf54+3806-0x1e32);UINT16 basePointer=
-(0x5c6+4923-0x1901);UINT8 iCurChar=(0x1c49+1331-0x217c);UINT32 iCurSrc=
-(0xbc1+5536-0x2161);chNum=srcData[(0x1c1a+1589-0x224f)];basePointer=((UINT16)
-srcData[(0x13+2447-0x9a1)])<<(0xd33+447-0xeeb);if(chNum*(0x10cd+5464-0x2623)>
-destLen){return FALSE;}for(iCurSrc=(0x1865+148-0x18f7);iCurSrc<srcLen&&iCurChar<
-chNum;iCurSrc++,iCurChar++){UINT8*curDest=destData+(0xc0+6812-0x1b5a)*iCurChar;
-atPb_CvtChCode(basePointer,srcData[iCurSrc],curDest,curDest+(0x1820+514-0x1a21))
-;}return TRUE;}VOID atPb_CvtChCode(UINT16 basePointer,UINT8 srcData,UINT8*chMsb,
-UINT8*chLsb){UINT16 curChar=(0xef2+4855-0x21e9);assert(chMsb!=NULL&&chLsb!=NULL)
-;if((srcData&(0xe01+1722-0x143b))==(0x215b+1238-0x2631)){curChar=srcData;}else{
-curChar=basePointer+(srcData&(0x1919+621-0x1b07));}*chMsb=(UINT8)(curChar>>
-(0x18c4+3385-0x25f5));*chLsb=(UINT8)((curChar<<(0xe53+1892-0x15af))>>
-(0x24b1+410-0x2643));return;}int atPb_String2Bytes(const char*pSrc,unsigned char
-*pDst,int nSrcLength){int i=(0x302+2521-0xcdb);if(pSrc==NULL||pDst==NULL||
-nSrcLength<(0x11b+2852-0xc3f)){return-(0x663+6634-0x204c);}for(i=
-(0xef2+5061-0x22b7);i<nSrcLength;i+=(0x542+966-0x906)){if(*pSrc>=
-((char)(0x300+925-0x66d))&&*pSrc<=((char)(0x6e7+4072-0x1696))){*pDst=(*pSrc-
-((char)(0x1c59+1010-0x201b)))<<(0xcfb+1603-0x133a);}else{*pDst=((toupper(*pSrc)-
-((char)(0x13a5+811-0x168f)))+(0x144d+1695-0x1ae2))<<(0x10e2+4598-0x22d4);}pSrc++
-;if(*pSrc>=((char)(0x1445+1281-0x1916))&&*pSrc<=((char)(0x1a0+109-0x1d4))){*pDst
-|=*pSrc-((char)(0x5d6+4676-0x17ea));}else{*pDst|=(toupper(*pSrc)-
-((char)(0x1690+1889-0x1db0)))+(0x128a+3808-0x2160);}pSrc++;pDst++;}return 
-nSrcLength/(0x40+5221-0x14a3);}int atPb_Bytes2String(const unsigned char*pSrc,
-char*pDst,int nSrcLength){const char tab[]=
+,srcCode[(0x1de8+757-0x20dd)]);switch(srcCode[(0x1542+305-0x1673)]){case
+(0x6c6+3135-0x1285):{memcpy(destCode,srcCode,srcCodeLen);return srcCodeLen;}case
+(0x1cb7+393-0x1dbf):{atPb_CvtU81ToU80(srcCode+(0x9cc+6056-0x2173),srcCodeLen-
+(0x6b6+4509-0x1852),destCode+(0x7f8+6132-0x1feb),destCodeLen-(0x1600+724-0x18d3)
+);return srcCode[(0x84f+7498-0x2598)]*(0x458+5686-0x1a8c)+(0x13d9+3176-0x2040);}
+case(0x1f20+1613-0x24eb):{atPb_CvtU82ToU80(srcCode+(0x72a+3693-0x1596),
+srcCodeLen-(0x9e5+6777-0x245d),destCode+(0x82+1616-0x6d1),destCodeLen-
+(0xba5+1138-0x1016));return srcCode[(0x43f+8081-0x23cf)]*(0xf43+196-0x1005)+
+(0x718+702-0x9d5);}default:{return-(0x1058+1147-0x14d2);}}}BOOL atPb_CvtU82ToU80
+(const UINT8*srcData,UINT32 srcLen,UINT8*destData,UINT32 destLen){UINT8 chNum=
+(0x143f+55-0x1476);UINT16 basePointer=(0x9ef+1499-0xfca);UINT8 iCurChar=
+(0x1b51+446-0x1d0f);UINT32 iCurSrc=(0x14f9+343-0x1650);chNum=(UINT32)srcData[
+(0x511+3064-0x1109)];basePointer=(UINT16)srcData[(0x1a54+1185-0x1ef4)];
+basePointer=basePointer<<(0x10ba+2502-0x1a78);basePointer=basePointer+srcData[
+(0x1bf+3749-0x1062)];if(chNum*(0x1298+810-0x15c0)>destLen){return FALSE;}for(
+iCurSrc=(0xaa7+5744-0x2114);iCurSrc<srcLen&&iCurChar<chNum;iCurSrc++,iCurChar++)
+{UINT8*curDest=destData+(0x56c+6747-0x1fc5)*iCurChar;atPb_CvtChCode(basePointer,
+srcData[iCurSrc],curDest,curDest+(0x14e2+2641-0x1f32));}return TRUE;}BOOL 
+atPb_CvtU81ToU80(const UINT8*srcData,UINT32 srcLen,UINT8*destData,UINT32 destLen
+){UINT8 chNum=(0x88c+378-0xa06);UINT16 basePointer=(0x1c76+2579-0x2689);UINT8 
+iCurChar=(0xe01+256-0xf01);UINT32 iCurSrc=(0xb59+207-0xc28);chNum=srcData[
+(0x38c+6539-0x1d17)];basePointer=((UINT16)srcData[(0x1d13+1251-0x21f5)])<<
+(0xfe2+885-0x1350);if(chNum*(0x79b+117-0x80e)>destLen){return FALSE;}for(iCurSrc
+=(0x47d+4454-0x15e1);iCurSrc<srcLen&&iCurChar<chNum;iCurSrc++,iCurChar++){UINT8*
+curDest=destData+(0x1000+1664-0x167e)*iCurChar;atPb_CvtChCode(basePointer,
+srcData[iCurSrc],curDest,curDest+(0x11a6+4034-0x2167));}return TRUE;}VOID 
+atPb_CvtChCode(UINT16 basePointer,UINT8 srcData,UINT8*chMsb,UINT8*chLsb){UINT16 
+curChar=(0x16b+6335-0x1a2a);assert(chMsb!=NULL&&chLsb!=NULL);if((srcData&
+(0xa88+5166-0x1e36))==(0x158c+637-0x1809)){curChar=srcData;}else{curChar=
+basePointer+(srcData&(0xb7+9030-0x237e));}*chMsb=(UINT8)(curChar>>
+(0x37f+5053-0x1734));*chLsb=(UINT8)((curChar<<(0x58c+5631-0x1b83))>>
+(0x939+6229-0x2186));return;}int atPb_String2Bytes(const char*pSrc,unsigned char
+*pDst,int nSrcLength){int i=(0x3c8+4105-0x13d1);if(pSrc==NULL||pDst==NULL||
+nSrcLength<(0x903+6153-0x210c)){return-(0x60c+4839-0x18f2);}for(i=
+(0x325+6742-0x1d7b);i<nSrcLength;i+=(0x9ba+2918-0x151e)){if(*pSrc>=
+((char)(0x1e15+191-0x1ea4))&&*pSrc<=((char)(0x7a6+6746-0x21c7))){*pDst=(*pSrc-
+((char)(0x1c7+2371-0xada)))<<(0xa1c+2079-0x1237);}else{*pDst=((toupper(*pSrc)-
+((char)(0x144+8878-0x23b1)))+(0x1279+1252-0x1753))<<(0xa4d+5161-0x1e72);}pSrc++;
+if(*pSrc>=((char)(0x1131+5251-0x2584))&&*pSrc<=((char)(0x15cc+1665-0x1c14))){*
+pDst|=*pSrc-((char)(0x285+6937-0x1d6e));}else{*pDst|=(toupper(*pSrc)-
+((char)(0x64b+1643-0xc75)))+(0x106+3141-0xd41);}pSrc++;pDst++;}return nSrcLength
+/(0x2d7+3916-0x1221);}int atPb_Bytes2String(const unsigned char*pSrc,char*pDst,
+int nSrcLength){const char tab[]=
 "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x41\x42\x43\x44\x45\x46";int i=
-(0xff+288-0x21f);if(pSrc==NULL||pDst==NULL||nSrcLength<(0x1e85+817-0x21b6)){
-return-(0x7e9+278-0x8fe);}for(i=(0x292+677-0x537);i<nSrcLength;i++){*pDst++=tab[
-*pSrc>>(0x1fc2+1823-0x26dd)];*pDst++=tab[*pSrc&(0xa13+2970-0x159e)];pSrc++;}*
-pDst='\0';return nSrcLength*(0x555+5688-0x1b8b);}static VOID atPb_WebRecodeShow(
-T_zPb_WebContact const*pFromweb){slog(PB_PRINT,SLOG_DEBUG,
+(0xa79+5852-0x2155);if(pSrc==NULL||pDst==NULL||nSrcLength<(0xc59+4488-0x1de1)){
+return-(0x19c5+116-0x1a38);}for(i=(0xc66+5336-0x213e);i<nSrcLength;i++){*pDst++=
+tab[*pSrc>>(0x14d0+2515-0x1e9f)];*pDst++=tab[*pSrc&(0x198+314-0x2c3)];pSrc++;}*
+pDst='\0';return nSrcLength*(0x1d8b+1846-0x24bf);}static VOID atPb_WebRecodeShow
+(T_zPb_WebContact const*pFromweb){slog(PB_PRINT,SLOG_DEBUG,
 "\x70\x62\x3a\x66\x72\x6f\x6d\x77\x65\x62\x2e\x49\x6e\x64\x65\x78\x3d\x25\x64" "\n"
 ,pFromweb->pbIndex);slog(PB_PRINT,SLOG_DEBUG,
 "\x70\x62\x3a\x66\x72\x6f\x6d\x77\x65\x62\x2e\x4e\x61\x6d\x65\x3d\x25\x73" "\n",
@@ -200,21 +202,21 @@
 ){sc_cfg_set(ZPB_NV_INIT,ZPB_OPERATE_SUC);printf(
 "\x5b\x50\x42\x5d\x20\x61\x74\x50\x62\x5f\x53\x65\x6e\x64\x53\x63\x70\x62\x72\x53\x65\x74\x20\x61\x74\x42\x61\x73\x65\x5f\x49\x69\x6e\x74\x50\x62\x4f\x6b\x20" "\n"
 );}VOID atPb_RecvCpbsReadRsp(T_zPb_AtCpbsReadRes*cpbsInd){CHAR resInfo[
-(0x9c7+2831-0x14c2)]={(0x763+2891-0x12ae)};if(strncmp(cpbsInd->locType,
-"\x53\x4d",(0x1956+23-0x196b))==(0xb95+1406-0x1113)){(VOID)snprintf(resInfo,
-(0x6c5+7421-0x23ae),"\x25\x64",cpbsInd->usedEntries);(VOID)sc_cfg_set(
-NV_PB_USEDENTRIES,resInfo);memset(resInfo,(0x4e5+8429-0x25d2),
-(0xa12+2911-0x155d));(VOID)snprintf(resInfo,(0x1c8f+503-0x1e72),"\x25\x64",
+(0x5eb+5584-0x1ba7)]={(0xf7f+782-0x128d)};if(strncmp(cpbsInd->locType,"\x53\x4d"
+,(0x933+3170-0x1593))==(0xdcb+476-0xfa7)){(VOID)snprintf(resInfo,
+(0xe7c+1388-0x13d4),"\x25\x64",cpbsInd->usedEntries);(VOID)sc_cfg_set(
+NV_PB_USEDENTRIES,resInfo);memset(resInfo,(0x747+1270-0xc3d),
+(0x1a11+1962-0x21a7));(VOID)snprintf(resInfo,(0x11aa+2079-0x19b5),"\x25\x64",
 cpbsInd->totalEntries);(VOID)sc_cfg_set(NV_PB_TOTALENTRIES,resInfo);
-g_zPb_SimIndex[(0x873+4280-0x192b)]=(UINT32)(cpbsInd->totalEntries);}else{printf
-(
+g_zPb_SimIndex[(0x12d5+2052-0x1ad9)]=(UINT32)(cpbsInd->totalEntries);}else{
+printf(
 "\x61\x74\x50\x62\x5f\x52\x65\x63\x76\x43\x70\x62\x73\x52\x65\x61\x64\x52\x73\x70\x20\x6e\x6f\x74\x20\x53\x4d\x3a\x25\x73" "\n"
 ,cpbsInd->locType);}}static VOID atPb_SetScpbrResToNv(CHAR const*pbNvKeyWord,
-UINT32 len){char converted[(0x86f+405-0x9fa)]={(0x243+6888-0x1d2b)};assert(
-pbNvKeyWord!=ZUFI_NULL);(VOID)snprintf(converted,(0x1649+1512-0x1c27),"\x25\x64"
+UINT32 len){char converted[(0x84c+4612-0x1a46)]={(0xe8+2726-0xb8e)};assert(
+pbNvKeyWord!=ZUFI_NULL);(VOID)snprintf(converted,(0x1459+3093-0x2064),"\x25\x64"
 ,len);(VOID)sc_cfg_set(pbNvKeyWord,converted);}VOID atPb_ScpbrTestRsp(
-T_zPb_AtScpbrTestRes*scpbsInd){T_zPb_UsimCapacity pbPara={(0x459+4110-0x1467)};
-CHAR pbUsed[(0x6b6+4937-0x19cd)]={(0x1c05+1287-0x210c)};sc_cfg_get(
+T_zPb_AtScpbrTestRes*scpbsInd){T_zPb_UsimCapacity pbPara={(0x5ad+5743-0x1c1c)};
+CHAR pbUsed[(0x8a7+5385-0x1d7e)]={(0x1385+1672-0x1a0d)};sc_cfg_get(
 NV_PB_USEDENTRIES,pbUsed,sizeof(pbUsed));g_zPb_DelIndex=(UINT32)scpbsInd->
 minIndex;pbPara.simType=ZPB_USIM;pbPara.maxRecordNum=scpbsInd->maxIndex;pbPara.
 usedRecordNum=atoi(pbUsed);pbPara.maxNumberLen=scpbsInd->maxNumberLen;pbPara.
@@ -223,22 +225,22 @@
 atPb_SetScpbrResToNv(ZPB_NV_USIMINDEXMIN,(UINT32)scpbsInd->minIndex);
 atPb_SetScpbrResToNv(ZPB_NV_USIMINDEXMAX,(UINT32)scpbsInd->maxIndex);(VOID)
 atPb_SetSimCapacityTable(pbPara);}int atPb_SendScpbrSet_repeat(sem_t tSemId){int
- min=(0x9a1+2946-0x1523);int max=(0x1bc9+1436-0x2165);int res=
-(0x1c31+1126-0x2097);int index=(0xdb0+706-0x1072);CHAR pbMin[(0x11a0+417-0x130f)
-]={(0x386+7613-0x2143)};CHAR pbMax[(0x9bf+5710-0x1fdb)]={(0x125b+3169-0x1ebc)};
-int indexmin=(0x92b+4719-0x1b9a);int indexmax=(0x120a+2793-0x1cf3);
-T_zPb_ScpbrReadRes scpbrReadInfo={(0x21f4+627-0x2467)};sc_cfg_get(
+ min=(0x232+2752-0xcf2);int max=(0x1ff+3023-0xdce);int res=(0x8cd+4684-0x1b19);
+int index=(0x235+5720-0x188d);CHAR pbMin[(0x1578+1925-0x1ccb)]={
+(0x87f+7561-0x2608)};CHAR pbMax[(0x118c+3955-0x20cd)]={(0xbb8+6925-0x26c5)};int 
+indexmin=(0xce4+4170-0x1d2e);int indexmax=(0x1349+2397-0x1ca6);
+T_zPb_ScpbrReadRes scpbrReadInfo={(0x7af+779-0xaba)};sc_cfg_get(
 ZPB_NV_USIMINDEXMIN,pbMin,sizeof(pbMin));sc_cfg_get(ZPB_NV_USIMINDEXMAX,pbMax,
 sizeof(pbMax));(VOID)sc_cfg_set(ZPB_NV_INIT,ZPB_LOADING);if(strcmp(pbMin,"\x30")
-==(0x46+3705-0xebf)||strcmp(pbMax,"\x30")==(0x35b+2268-0xc37)){sc_cfg_set(
+==(0x3e2+4780-0x168e)||strcmp(pbMax,"\x30")==(0x16b0+548-0x18d4)){sc_cfg_set(
 ZPB_NV_INIT,ZPB_OPERATE_SUC);printf(
 "\x61\x74\x50\x62\x5f\x53\x65\x6e\x64\x53\x63\x70\x62\x72\x53\x65\x74\x20\x63\x61\x72\x64\x20\x75\x6e\x73\x75\x70\x70\x6f\x72\x74\x20\x70\x62" "\n"
-);return-(0x80d+2996-0x13c0);}sscanf(pbMin,"\x25\x64",&min);sscanf(pbMax,
-"\x25\x64",&max);if((min<(0x2d5+1547-0x8e0)||min>INT_MAX-(0xd81+5161-0x21a9))||(
-max<(0x1e9+8697-0x23e2)||max>INT_MAX-(0x2a4+1123-0x706))){printf(
+);return-(0x5e2+123-0x65c);}sscanf(pbMin,"\x25\x64",&min);sscanf(pbMax,
+"\x25\x64",&max);if((min<(0x11aa+3704-0x2022)||min>INT_MAX-(0xcaf+5812-0x2362))
+||(max<(0x1394+4558-0x2562)||max>INT_MAX-(0x2141+266-0x224a))){printf(
 "\x61\x74\x50\x62\x5f\x53\x65\x6e\x64\x53\x63\x70\x62\x72\x53\x65\x74\x20\x70\x62\x20\x6e\x75\x6d\x20\x65\x72\x72\x20\x6d\x69\x6e\x3a\x25\x64\x2c\x20\x6d\x61\x78\x3a\x25\x64" "\n"
-,min,max);return-(0xf58+5633-0x2558);}while((0x590+5714-0x1be1)){if(indexmin<min
-){indexmin=min;indexmax=min+ZPB_INIT_LOAD_RECORD_NUM-(0x682+4713-0x18ea);if(
+,min,max);return-(0x1a62+1722-0x211b);}while((0x56+1682-0x6e7)){if(indexmin<min)
+{indexmin=min;indexmax=min+ZPB_INIT_LOAD_RECORD_NUM-(0xa29+6090-0x21f2);if(
 indexmax>max){indexmax=max;break;}printf(
 "\x5b\x50\x42\x5d\x20\x31\x31\x31\x20\x69\x6e\x64\x65\x78\x6d\x69\x6e\x3d\x25\x64\x2c\x20\x69\x6e\x64\x65\x78\x6d\x61\x78\x3d\x25\x64\x2c\x28\x25\x64\x2d\x25\x64\x29" "\n"
 ,indexmin,indexmax,min,max);}else{indexmin=indexmin+ZPB_INIT_LOAD_RECORD_NUM;if(
@@ -250,17 +252,17 @@
 ,indexmin,indexmax,min,max);}scpbrReadInfo.minIndex=indexmin;scpbrReadInfo.
 maxIndex=indexmax;res=ipc_send_message(MODULE_ID_PB,MODULE_ID_AT_CTL,
 MSG_CMD_READ_PB_REQ,sizeof(T_zPb_ScpbrReadRes),&scpbrReadInfo,
-(0x814+5759-0x1e93));sem_wait(&g_Pb_sem_id);if(g_PbOptRsp.result==-
-(0xd9a+6124-0x2585)){break;}}return g_PbOptRsp.result;}
-#if (0xd07+4500-0x1e9b)

+(0xf4b+5442-0x248d));sem_wait(&g_Pb_sem_id);if(g_PbOptRsp.result==-
+(0x1032+3849-0x1f3a)){break;}}return g_PbOptRsp.result;}
+#if (0x146+6708-0x1b7a)

 int atPb_SendScpbrSet(PSTR pAtCmdPara,int cid,PSTR pAtRst,int atRstSize){UINT32 
-indexmin=(0xc74+3099-0x188f);UINT32 indexmax=(0xbbb+6478-0x2509);CHAR atcmdMsg[
-(0x4f1+6292-0x1d3f)]={(0x16b8+1725-0x1d75)};int res=(0x351+5108-0x1745);CHAR 
-pbMin[(0x1120+4335-0x21dd)]={(0x5e4+7397-0x22c9)};CHAR pbMax[(0x9f0+1763-0x10a1)
-]={(0x711+488-0x8f9)};sc_cfg_get(ZPB_NV_USIMINDEXMIN,pbMin,sizeof(pbMin));
+indexmin=(0x178d+2515-0x2160);UINT32 indexmax=(0x40+7229-0x1c7d);CHAR atcmdMsg[
+(0x216+3604-0xfe4)]={(0x8+8258-0x204a)};int res=(0xa7d+1701-0x1122);CHAR pbMin[
+(0x958+2585-0x133f)]={(0xae9+5241-0x1f62)};CHAR pbMax[(0x309+7987-0x220a)]={
+(0x450+4433-0x15a1)};sc_cfg_get(ZPB_NV_USIMINDEXMIN,pbMin,sizeof(pbMin));
 sc_cfg_get(ZPB_NV_USIMINDEXMAX,pbMax,sizeof(pbMax));(VOID)sc_cfg_set(ZPB_NV_INIT
-,ZPB_LOADING);if(strcmp(pbMin,"\x30")==(0xb0b+3744-0x19ab)||strcmp(pbMax,"\x30")
-==(0x937+7580-0x26d3)){printf(
+,ZPB_LOADING);if(strcmp(pbMin,"\x30")==(0x9f2+178-0xaa4)||strcmp(pbMax,"\x30")==
+(0x1b68+795-0x1e83)){printf(
 "\x61\x74\x50\x62\x5f\x53\x65\x6e\x64\x53\x63\x70\x62\x72\x53\x65\x74\x20\x63\x61\x72\x64\x20\x75\x6e\x73\x75\x70\x70\x6f\x72\x74\x20\x70\x62" "\n"
 );return ZAT_RESULT_OK;}sscanf(pbMin,"\x25\x64",&indexmin);sscanf(pbMax,
 "\x25\x64",&indexmax);(VOID)snprintf(atcmdMsg,sizeof(atcmdMsg),
@@ -269,45 +271,46 @@
 atcmdMsg,cid,pAtRst,atRstSize);pthread_mutex_unlock(&smsdb_mutex);return res;}
 #endif

 UINT8 atPb_EncodeText(CHAR*pbDst,CHAR const*pbTextSrc,UINT32 dstLen){UINT8 i=
-(0x9f0+3166-0x164e);CHAR strTarget[ZPB_TEXT_SIZE_BYTES]={(0x89b+2717-0x1338)};if
-(pbTextSrc!=ZUFI_NULL){if(strlen(pbTextSrc)*(0x25a7+164-0x2647)+
-ZPB_UCS2_PREFIX_LEN<dstLen){snprintf((CHAR*)&strTarget[(0x938+579-0xb7b)],sizeof
-(strTarget),"\x25\x30\x32\x58",ZPB_UCS2_PREFIX);for(i=(0x75a+2533-0x113f);(i<
-strlen(pbTextSrc))&&(i*(0xb2a+605-0xd83)+ZPB_UCS2_PREFIX_LEN<dstLen);i++){
-snprintf(strTarget+i*(0x797+4815-0x1a62)+ZPB_UCS2_PREFIX_LEN,sizeof(strTarget)-i
-*(0x67b+7916-0x2563)-ZPB_UCS2_PREFIX_LEN,"\x30\x30\x25\x30\x32\x58",pbTextSrc[i]
-);}strncpy(pbDst,strTarget,dstLen-(0x455+1521-0xa45));return ZUFI_SUCC;}}return 
+(0xc55+655-0xee4);CHAR strTarget[ZPB_TEXT_SIZE_BYTES]={(0x857+5395-0x1d6a)};if(
+pbTextSrc!=ZUFI_NULL){if(strlen(pbTextSrc)*(0x6f5+7884-0x25bd)+
+ZPB_UCS2_PREFIX_LEN<dstLen){snprintf((CHAR*)&strTarget[(0x1ba+8786-0x240c)],
+sizeof(strTarget),"\x25\x30\x32\x58",ZPB_UCS2_PREFIX);for(i=(0x22e7+173-0x2394);
+(i<strlen(pbTextSrc))&&(i*(0x7f+6011-0x17f6)+ZPB_UCS2_PREFIX_LEN<dstLen);i++){
+snprintf(strTarget+i*(0xc99+5766-0x231b)+ZPB_UCS2_PREFIX_LEN,sizeof(strTarget)-i
+*(0x81b+566-0xa4d)-ZPB_UCS2_PREFIX_LEN,"\x30\x30\x25\x30\x32\x58",pbTextSrc[i]);
+}strncpy(pbDst,strTarget,dstLen-(0xc15+4682-0x1e5e));return ZUFI_SUCC;}}return 
 ZUFI_FAIL;}VOID atPb_ScpbrSetRsp(T_zPb_ScpbrSetRes*atRes){T_zPb_WebContact 
-pbRecord={(0x19f+7502-0x1eed)};CHAR pbDst[ZPB_TEXT_SIZE_BYTES]={
-(0x909+3812-0x17ed)};CHAR text[ZPB_TEXT_SIZE_BYTES]={(0x182c+2751-0x22eb)};int 
-text_len=(0xe8d+2095-0x16bc);int tmp_len=(0x7ba+2653-0x1217);CHAR tmp[
-ZPB_TEXT_SIZE_BYTES]={(0x1889+2629-0x22ce)};if(atRes->coding!=ZPB_UCS2){if(
+pbRecord={(0x12fc+3365-0x2021)};CHAR pbDst[ZPB_TEXT_SIZE_BYTES]={
+(0x100b+5796-0x26af)};CHAR text[ZPB_TEXT_SIZE_BYTES]={(0xfb4+2601-0x19dd)};int 
+text_len=(0x12b5+3926-0x220b);int tmp_len=(0x348+9032-0x2690);CHAR tmp[
+ZPB_TEXT_SIZE_BYTES]={(0xc29+1197-0x10d6)};if(atRes->coding!=ZPB_UCS2){if(
 atPb_EncodeText(pbDst,atRes->text,ZPB_TEXT_SIZE_BYTES)==ZUFI_SUCC){strncpy(atRes
-->text,pbDst+(0x8b2+7142-0x2496),sizeof(atRes->text)-(0x9ad+4588-0x1b98));}else{
+->text,pbDst+(0x245+1053-0x660),sizeof(atRes->text)-(0x4f9+3334-0x11fe));}else{
 slog(PB_PRINT,SLOG_ERR,
 "\x70\x62\x3a\x61\x74\x50\x62\x5f\x53\x63\x70\x62\x72\x53\x65\x74\x52\x73\x70\x65\x6e\x63\x6f\x64\x65\x20\x65\x72\x72\x21\x2e" "\n"
 );return;}}else{text_len=atPb_String2Bytes(&atRes->text,&text,strlen(atRes->text
 ));tmp_len=atPb_GetU80Code(&text,text_len,&tmp,ZPB_TEXT_SIZE_BYTES);if(tmp_len<
-(0xc29+800-0xf49))return;memset(&text,(0x849+2122-0x1093),ZPB_TEXT_SIZE_BYTES);
-text_len=atPb_Bytes2String(&tmp,&text,tmp_len);if(text_len>(0x55+5552-0x1603)){
-memset(&atRes->text,(0x19e5+2041-0x21de),ZPB_TEXT_SIZE_BYTES);memcpy(&atRes->
-text,text+(0x380+5942-0x1ab4),strlen(text)-(0xbb7+2121-0x13fe));}}pbRecord.pbId=
--(0x228b+51-0x22bd);pbRecord.pbIndex=(SINT32)atRes->index;strncpy(pbRecord.name,
-atRes->text,sizeof(pbRecord.name)-(0xf7b+489-0x1163));strncpy(pbRecord.
-mobilNumber,atRes->number1,sizeof(pbRecord.mobilNumber)-(0xb04+2932-0x1677));
-strncpy(pbRecord.officeNumber,atRes->number2,sizeof(pbRecord.officeNumber)-
-(0x1102+2846-0x1c1f));strncpy(pbRecord.homeNumber,atRes->number3,sizeof(pbRecord
-.homeNumber)-(0x256+8732-0x2471));strncpy(pbRecord.email,atRes->email,sizeof(
-pbRecord.email)-(0xa07+5413-0x1f2b));pbRecord.pbLocation=ZPB_LOCATION_USIM;(VOID
-)atPb_LoadARecToPbmTable(&pbRecord);}VOID atPb_SetDelStatusMultOrAll(){if(
-g_zPb_DelStatusUsim.dealFailNum>(0x1917+3427-0x267a)){if(g_zPb_DelStatusUsim.
-dealSuccNum>(0x36d+3346-0x107f)){(VOID)sc_cfg_set(ZPB_NV_WRITE_FLAG,
-ZPB_MUL_DEL_PART_SUC);}else{(VOID)sc_cfg_set(ZPB_NV_WRITE_FLAG,ZPB_DEL_ERROR);}}
-else{(VOID)sc_cfg_set(ZPB_NV_WRITE_FLAG,ZPB_OPERATE_SUC);}}
-#if (0xe26+3951-0x1d95)

+(0x17fa+3209-0x2483))return;memset(&text,(0x1297+4475-0x2412),
+ZPB_TEXT_SIZE_BYTES);text_len=atPb_Bytes2String(&tmp,&text,tmp_len);if(text_len>
+(0x1e32+1507-0x2413)){memset(&atRes->text,(0xdbc+5178-0x21f6),
+ZPB_TEXT_SIZE_BYTES);memcpy(&atRes->text,text+(0x83a+608-0xa98),strlen(text)-
+(0x801+311-0x936));}}pbRecord.pbId=-(0x53+7330-0x1cf4);pbRecord.pbIndex=(SINT32)
+atRes->index;strncpy(pbRecord.name,atRes->text,sizeof(pbRecord.name)-
+(0x678+957-0xa34));strncpy(pbRecord.mobilNumber,atRes->number1,sizeof(pbRecord.
+mobilNumber)-(0xa24+4365-0x1b30));strncpy(pbRecord.officeNumber,atRes->number2,
+sizeof(pbRecord.officeNumber)-(0x1fd3+363-0x213d));strncpy(pbRecord.homeNumber,
+atRes->number3,sizeof(pbRecord.homeNumber)-(0xf1+2480-0xaa0));strncpy(pbRecord.
+email,atRes->email,sizeof(pbRecord.email)-(0x78+339-0x1ca));pbRecord.pbLocation=
+ZPB_LOCATION_USIM;(VOID)atPb_LoadARecToPbmTable(&pbRecord);}VOID 
+atPb_SetDelStatusMultOrAll(){if(g_zPb_DelStatusUsim.dealFailNum>
+(0x94c+5270-0x1de2)){if(g_zPb_DelStatusUsim.dealSuccNum>(0x126+3097-0xd3f)){(
+VOID)sc_cfg_set(ZPB_NV_WRITE_FLAG,ZPB_MUL_DEL_PART_SUC);}else{(VOID)sc_cfg_set(
+ZPB_NV_WRITE_FLAG,ZPB_DEL_ERROR);}}else{(VOID)sc_cfg_set(ZPB_NV_WRITE_FLAG,
+ZPB_OPERATE_SUC);}}
+#if (0x83c+1855-0xf7b)

 VOID atPb_RecvScpbwAddErr(UINT8*pErrCode){(VOID)sc_cfg_set(ZPB_NV_WRITE_FLAG,
-ZPB_NEW_ERROR);if((strncmp(pErrCode,ZAT_ERRCODE_MEMORY_FULL,(0x1b3a+1098-0x1f82)
-)==(0x2489+400-0x2619))){(VOID)sc_cfg_set(ZPB_NV_USIMMEMORYFULL,"\x79\x65\x73");
+ZPB_NEW_ERROR);if((strncmp(pErrCode,ZAT_ERRCODE_MEMORY_FULL,(0xb8d+1129-0xff4))
+==(0x180a+1688-0x1ea2))){(VOID)sc_cfg_set(ZPB_NV_USIMMEMORYFULL,"\x79\x65\x73");
 printf(
 "\x70\x62\x3a\x52\x65\x63\x76\x20\x43\x4d\x45\x20\x45\x72\x72\x43\x6f\x64\x65\x3a\x20\x32\x30\x2e" "\n"
 );}else{printf(
@@ -318,83 +321,84 @@
 ZPB_NEW_ERROR);printf(
 "\x70\x62\x3a\x52\x65\x63\x76\x20\x41\x74\x20\x53\x63\x70\x62\x77\x20\x6d\x6f\x64\x69\x66\x79\x20\x65\x72\x72\x2e" "\n"
 );}VOID pb_AsctoHex(UINT16*pcHex,SINT32 iDstLen,UINT8 const*pcASC,SINT32 iSrcLen
-){UINT32 iOddOrEven=(0x1295+5066-0x265f);UINT8 iTemp=(0xb2+7758-0x1f00);SINT32 i
-=(0x2a4+1461-0x859);if((NULL==pcHex)||(NULL==pcASC)||((0x4a6+6749-0x1f03)==
-iDstLen)||(iDstLen<(iSrcLen/(0x5f7+4987-0x1970)+(0x31+4305-0x1101)))){return;}
-for(i=(0xa06+6384-0x22f6);i<iSrcLen;i++){if(iOddOrEven%(0x190+8956-0x248a)==
-(0x6cf+2141-0xf2c)){iTemp=*(pcASC+i);if((iTemp>=((char)(0xa83+5304-0x1f0b)))&&(
-iTemp<=((char)(0x2b1+7300-0x1efc)))){*(pcHex+i/(0x856+4460-0x19c0))|=(UINT8)(
-iTemp-(0x20a9+494-0x2267))<<(0x12d8+1449-0x187d);}else{*(pcHex+i/
-(0x4d9+6957-0x2004))|=(UINT8)(iTemp-(0xfe1+5231-0x2419))<<(0x221+744-0x505);}}
-else{iTemp=*(pcASC+i);if((iTemp>=((char)(0x2431+227-0x24e4)))&&(iTemp<=
-((char)(0x40d+3587-0x11d7)))){*(pcHex+i/(0xb+592-0x259))|=iTemp-
-(0x1957+1396-0x1e9b);}else{*(pcHex+i/(0x540+4444-0x169a))|=iTemp-
-(0x183+359-0x2b3);}}iOddOrEven++;}}SINT32 atPb_IfUcs2IsSMS7(UINT16*psUcs2,SINT32
- iLength){int iRetVal=(0x228+5899-0x1932);char cTemp;int i=(0x712+2319-0x1021);
-if(NULL==psUcs2){return-(0x1c7c+1916-0x23f7);}for(i=(0x1174+1209-0x162d);i<
-iLength;i++){if((0x56f+6580-0x1e23)>psUcs2[i]){switch(psUcs2[i]){case
-(0x2119+554-0x2337):case(0x228c+123-0x22ac):case(0x20f8+1608-0x26e4):case
-(0x659+6858-0x20c6):case(0xc6c+4755-0x1ea1):case(0x9dc+4008-0x1909):case
-(0xd27+2398-0x1609):case(0x2c8+679-0x4f2):case(0xa40+3990-0x1958):case
-(0x13ab+1568-0x1927):case(0x745+2068-0xf39):{break;}default:{cTemp=(char)
-G_ZPB_NEWUCS2TOGSM[psUcs2[i]];if(ZPB_NON_GSM==cTemp){iRetVal=
-(0x1c71+1591-0x22a8);}break;}}}else{switch(psUcs2[i]){case(0x3e6+86-0xa8):case
-(0xc9b+7023-0x2464):case(0x83a+8337-0x2538):case(0x9bc+4311-0x16f8):case
-(0x1792+259-0x14ec):case(0x1421+1347-0x15c4):case(0x1c17+829-0x1b8c):case
-(0x9b1+5129-0x1a17):case(0xa11+6180-0x1e7d):case(0xb14+3982-0x1704):{break;}
-default:{iRetVal=(0x1e76+1018-0x2270);break;}}}if((0x10e3+5276-0x257f)==iRetVal)
-{break;}}return iRetVal;}static UINT8 atPb_EncodeNameToUcs2(char*pbDst,UINT32 
-iDstLen,char const*pbSrc){UINT16 acHex[(0x5df+3471-0x126e)]={(0xbdc+6223-0x242b)
-};SINT32 srclen=(0xde7+3906-0x1d29);SINT32 rest=(0x1ab+8028-0x2107);assert(pbDst
-!=NULL&&pbSrc!=NULL);srclen=(SINT32)strlen(pbSrc);slog(PB_PRINT,SLOG_DEBUG,
+){UINT32 iOddOrEven=(0x1636+4118-0x264c);UINT8 iTemp=(0x78d+4328-0x1875);SINT32 
+i=(0x30c+5906-0x1a1e);if((NULL==pcHex)||(NULL==pcASC)||((0x364+8368-0x2414)==
+iDstLen)||(iDstLen<(iSrcLen/(0x1762+3396-0x24a4)+(0xc61+5160-0x2088)))){return;}
+for(i=(0x3b6+940-0x762);i<iSrcLen;i++){if(iOddOrEven%(0x3da+7618-0x219a)==
+(0x1449+2231-0x1d00)){iTemp=*(pcASC+i);if((iTemp>=((char)(0x4b+6697-0x1a44)))&&(
+iTemp<=((char)(0x197f+2192-0x21d6)))){*(pcHex+i/(0x122b+141-0x12b6))|=(UINT8)(
+iTemp-(0x21f+8062-0x216d))<<(0x586+6521-0x1efb);}else{*(pcHex+i/
+(0xec6+2847-0x19e3))|=(UINT8)(iTemp-(0x1da6+1516-0x235b))<<(0x18d0+1458-0x1e7e);
+}}else{iTemp=*(pcASC+i);if((iTemp>=((char)(0x9c1+280-0xaa9)))&&(iTemp<=
+((char)(0x8b4+3806-0x1759)))){*(pcHex+i/(0x237+7224-0x1e6d))|=iTemp-
+(0x771+4406-0x1877);}else{*(pcHex+i/(0x1479+3035-0x2052))|=iTemp-
+(0x8ed+3491-0x1659);}}iOddOrEven++;}}SINT32 atPb_IfUcs2IsSMS7(UINT16*psUcs2,
+SINT32 iLength){int iRetVal=(0x885+3650-0x16c6);char cTemp;int i=
+(0x2e1+907-0x66c);if(NULL==psUcs2){return-(0x1f53+1627-0x25ad);}for(i=
+(0x1205+1742-0x18d3);i<iLength;i++){if((0x2051+523-0x215c)>psUcs2[i]){switch(
+psUcs2[i]){case(0xb1d+3855-0x1a20):case(0x9ac+5671-0x1f78):case
+(0x207c+295-0x2147):case(0x95a+1582-0xf2b):case(0x1819+1484-0x1d87):case
+(0x278+7794-0x206f):case(0x71b+2658-0x1101):case(0x333+5607-0x189d):case
+(0x830+4150-0x17e8):case(0xb0d+6622-0x2447):case(0x52+7278-0x1ca0):{break;}
+default:{cTemp=(char)G_ZPB_NEWUCS2TOGSM[psUcs2[i]];if(ZPB_NON_GSM==cTemp){
+iRetVal=(0x3f1+4621-0x15fe);}break;}}}else{switch(psUcs2[i]){case
+(0xd57+5652-0x1fd7):case(0xba4+4142-0x182c):case(0xf8b+2323-0x150b):case
+(0x10d9+5560-0x22f6):case(0xb1f+1722-0xe30):case(0xfeb+3807-0x1b2a):case
+(0x948+2021-0xd65):case(0x42d+6382-0x1978):case(0x13d3+501-0x1210):case
+(0x18e9+72-0x1593):{break;}default:{iRetVal=(0xde4+4793-0x209d);break;}}}if(
+(0x8ef+1696-0xf8f)==iRetVal){break;}}return iRetVal;}static UINT8 
+atPb_EncodeNameToUcs2(char*pbDst,UINT32 iDstLen,char const*pbSrc){UINT16 acHex[
+(0x1d3b+959-0x1ffa)]={(0xc0c+2064-0x141c)};SINT32 srclen=(0x18fb+934-0x1ca1);
+SINT32 rest=(0x915+851-0xc68);assert(pbDst!=NULL&&pbSrc!=NULL);srclen=(SINT32)
+strlen(pbSrc);slog(PB_PRINT,SLOG_DEBUG,
 "\x70\x62\x3a\x61\x74\x50\x62\x5f\x45\x6e\x63\x6f\x64\x65\x4e\x61\x6d\x65\x54\x6f\x55\x63\x73\x32\x20\x69\x6e\x70\x75\x74\x20\x70\x73\x53\x72\x63\x3d\x25\x73\x2c\x69\x53\x72\x63\x4c\x65\x6e\x3d\x25\x64" "\n"
-,pbSrc,srclen);pb_AsctoHex(acHex,(0x141d+1666-0x199f),(UINT8*)pbSrc,srclen);rest
-=atPb_IfUcs2IsSMS7(acHex,srclen/(0x1143+3880-0x2067));if(rest==
-(0x1a72+2725-0x2516)){return atPb_EncodeText(pbDst,pbSrc,iDstLen);}else if(rest
-==(0x2a2+3589-0x10a7)){if(strlen(pbSrc)+(0x654+1699-0xcf5)<iDstLen){memcpy(pbDst
-,"\x38\x30",(0xd22+5790-0x23be));memcpy(pbDst+(0xeff+5767-0x2584),pbSrc,srclen);
+,pbSrc,srclen);pb_AsctoHex(acHex,(0x1212+3984-0x20a2),(UINT8*)pbSrc,srclen);rest
+=atPb_IfUcs2IsSMS7(acHex,srclen/(0x1247+4341-0x2338));if(rest==
+(0x14e6+990-0x18c3)){return atPb_EncodeText(pbDst,pbSrc,iDstLen);}else if(rest==
+(0x1be6+2761-0x26af)){if(strlen(pbSrc)+(0x335+3432-0x109b)<iDstLen){memcpy(pbDst
+,"\x38\x30",(0x6bd+2626-0x10fd));memcpy(pbDst+(0x35d+2381-0xca8),pbSrc,srclen);
 return ZUFI_SUCC;}}return ZUFI_FAIL;}SINT32 atPb_FindIdleIndex(T_zPb_WebContact 
-const*pbRecv,BOOL pbNewFlag){SINT32 count=(0xab7+2249-0x137f);SINT32 total=
-(0x141+3884-0x106d);SINT32*IndexType=NULL;if((NULL==pbRecv)){slog(PB_PRINT,
+const*pbRecv,BOOL pbNewFlag){SINT32 count=(0x1759+1864-0x1ea0);SINT32 total=
+(0x40a+2511-0xdd9);SINT32*IndexType=NULL;if((NULL==pbRecv)){slog(PB_PRINT,
 SLOG_ERR,
 "\x70\x62\x3a\x66\x69\x6e\x64\x5f\x70\x62\x6d\x5f\x69\x6e\x64\x65\x78\x3a\x74\x68\x65\x20\x70\x61\x72\x61\x20\x6f\x66\x20\x66\x69\x6e\x64\x5f\x70\x62\x6d\x5f\x69\x6e\x64\x65\x78\x20\x61\x72\x65\x20\x4e\x55\x4c\x4c" "\n"
-);return-(0x640+756-0x933);}if(TRUE==pbNewFlag){if(ZPB_LOCATION_USIM==pbRecv->
-pbLocation){total=g_zPb_SimIndex[(0x1ed1+170-0x1f7b)];IndexType=g_zPb_SimIndex;}
-else if(ZPB_LOCATION_AP==pbRecv->pbLocation){total=g_zPb_ApIndex[
-(0xc73+4539-0x1e2e)];IndexType=g_zPb_ApIndex;}for(;count<=total;count++){if((
+);return-(0x15d2+4116-0x25e5);}if(TRUE==pbNewFlag){if(ZPB_LOCATION_USIM==pbRecv
+->pbLocation){total=g_zPb_SimIndex[(0x1466+2314-0x1d70)];IndexType=
+g_zPb_SimIndex;}else if(ZPB_LOCATION_AP==pbRecv->pbLocation){total=g_zPb_ApIndex
+[(0xa93+7052-0x261f)];IndexType=g_zPb_ApIndex;}for(;count<=total;count++){if((
 NULL!=IndexType)&&(IndexType[count]==PBM_ERROR_NOT_FOUND)){break;}}if(count>
 total){slog(PB_PRINT,SLOG_ERR,
 "\x70\x62\x3a\x66\x69\x6e\x64\x5f\x70\x62\x6d\x5f\x69\x6e\x64\x65\x78\x3a\x63\x61\x6e\x20\x6e\x6f\x74\x20\x66\x69\x6e\x64\x20\x69\x6e\x64\x65\x78\x5f\x69\x64\x2c\x69\x6e\x64\x65\x78\x5f\x69\x64\x3d\x25\x64" "\n" "\x2e"
-,count);return-(0x1979+884-0x1cec);}slog(PB_PRINT,SLOG_DEBUG,
+,count);return-(0x1d3+2003-0x9a5);}slog(PB_PRINT,SLOG_DEBUG,
 "\x70\x62\x3a\x66\x69\x6e\x64\x5f\x70\x62\x6d\x5f\x69\x6e\x64\x65\x78\x3a\x20\x69\x6e\x64\x65\x78\x5f\x69\x64\x3d\x25\x64\x2c\x20\x74\x6f\x74\x61\x6c\x20\x69\x73\x20\x25\x64" "\n"
 ,count,total);return count;}else{return pbRecv->pbIndex;}}BOOL atPb_GetASCII(
-CHAR*pSrc,CHAR*pDst,SINT32 len){SINT32 j=(0x237b+35-0x239e);SINT32 i=
-(0x6e8+7058-0x227a);CHAR buf[ZPB_TEXT_SIZE_BYTES]={(0x2347+775-0x264e)};CHAR str
-[(0xa4+8637-0x225e)]={(0x1bb2+1389-0x211f)};SINT32 length=(0x6bc+6338-0x1f7e);
-length=atPb_String2Bytes(pSrc,buf,len);for(i=(0xd59+673-0xffa);i<length;i+=
-(0x37b+1328-0x8a9)){if(buf[i]!=(0x14dd+2098-0x1d0f)||buf[i+(0x1409+2121-0x1c51)]
->(0x161f+1755-0x1c7b)){return FALSE;}pDst[j++]=buf[i+(0x8d4+7218-0x2505)];}
+CHAR*pSrc,CHAR*pDst,SINT32 len){SINT32 j=(0x21c+5678-0x184a);SINT32 i=
+(0x588+8057-0x2501);CHAR buf[ZPB_TEXT_SIZE_BYTES]={(0x783+7143-0x236a)};CHAR str
+[(0x23a+6295-0x1ace)]={(0x37c+6641-0x1d6d)};SINT32 length=(0x178c+3194-0x2406);
+length=atPb_String2Bytes(pSrc,buf,len);for(i=(0x7d+4428-0x11c9);i<length;i+=
+(0x2125+1401-0x269c)){if(buf[i]!=(0xbd1+6891-0x26bc)||buf[i+(0x65d+5719-0x1cb3)]
+>(0x1270+1725-0x18ae)){return FALSE;}pDst[j++]=buf[i+(0xa40+7318-0x26d5)];}
 return TRUE;}VOID atWeb_AddOrModOnePbUsim(T_zPb_WebContact*pWebPbContact,BOOL 
-pbNewFlag,sem_t semId){int atRes=(0x211+4605-0x140e);CHAR pbName[
-ZPB_TEXT_SIZE_BYTES+(0x3af+7315-0x203f)]={(0x16f5+3734-0x258b)};CHAR buf_src[
-ZPB_TEXT_SIZE_BYTES+(0x77c+2875-0x12b4)]={(0xd8f+5012-0x2123)};CHAR buf_dest[
-ZPB_TEXT_SIZE_BYTES+(0x964+161-0xa02)]={(0x6aa+4311-0x1781)};T_zPb_ScpbwParam 
-scpbwParam={(0x588+1410-0xb0a)};int len=(0x3d0+235-0x4bb);atPb_WebRecodeShow(
+pbNewFlag,sem_t semId){int atRes=(0x36a+3072-0xf6a);CHAR pbName[
+ZPB_TEXT_SIZE_BYTES+(0x1ed1+1656-0x2546)]={(0xc53+2964-0x17e7)};CHAR buf_src[
+ZPB_TEXT_SIZE_BYTES+(0x17c0+1760-0x1e9d)]={(0x1fe6+187-0x20a1)};CHAR buf_dest[
+ZPB_TEXT_SIZE_BYTES+(0x1731+216-0x1806)]={(0x86f+107-0x8da)};T_zPb_ScpbwParam 
+scpbwParam={(0x92+5115-0x148d)};int len=(0x1f59+72-0x1fa1);atPb_WebRecodeShow(
 pWebPbContact);if(atPb_GetASCII(pWebPbContact->name,pbName,strlen(pWebPbContact
-->name))){scpbwParam.coding=(0x72a+3542-0x1500);}else{len=atPb_String2Bytes(
+->name))){scpbwParam.coding=(0xb52+3897-0x1a8b);}else{len=atPb_String2Bytes(
 pWebPbContact->name,buf_src,strlen(pWebPbContact->name));len=
 atpb_CvtUcs2ToAlphaField(buf_src,len,buf_dest);atPb_Bytes2String(buf_dest,pbName
-,len);scpbwParam.coding=(0xd5+2066-0x8e6);}scpbwParam.pbIndex=pWebPbContact->
+,len);scpbwParam.coding=(0x836+2803-0x1328);}scpbwParam.pbIndex=pWebPbContact->
 pbIndex;strncpy(scpbwParam.name,pbName,sizeof(scpbwParam.name)-
-(0x14b+5033-0x14f3));strncpy(scpbwParam.mobilNumber,pWebPbContact->mobilNumber,
-sizeof(scpbwParam.mobilNumber)-(0x19d+1183-0x63b));strncpy(scpbwParam.
+(0x89f+4693-0x1af3));strncpy(scpbwParam.mobilNumber,pWebPbContact->mobilNumber,
+sizeof(scpbwParam.mobilNumber)-(0x19e8+2185-0x2270));strncpy(scpbwParam.
 officeNumber,pWebPbContact->officeNumber,sizeof(scpbwParam.officeNumber)-
-(0x20a+5703-0x1850));strncpy(scpbwParam.homeNumber,pWebPbContact->homeNumber,
-sizeof(scpbwParam.homeNumber)-(0xae5+2377-0x142d));strncpy(scpbwParam.email,
-pWebPbContact->email,sizeof(scpbwParam.email)-(0xacb+667-0xd65));
+(0x69c+5312-0x1b5b));strncpy(scpbwParam.homeNumber,pWebPbContact->homeNumber,
+sizeof(scpbwParam.homeNumber)-(0x682+2196-0xf15));strncpy(scpbwParam.email,
+pWebPbContact->email,sizeof(scpbwParam.email)-(0x137c+743-0x1662));
 ipc_send_message(MODULE_ID_PB,MODULE_ID_AT_CTL,MSG_CMD_ADD_MODIFY_PB_REQ,sizeof(
-T_zPb_ScpbwParam),(unsigned char*)&scpbwParam,(0x32c+858-0x686));sem_wait(&
-g_Pb_sem_id);if(g_PbOptRsp.result!=(0x512+6008-0x1c89)){(VOID)sc_cfg_set(
+T_zPb_ScpbwParam),(unsigned char*)&scpbwParam,(0x142b+3348-0x213f));sem_wait(&
+g_Pb_sem_id);if(g_PbOptRsp.result!=(0x1248+1477-0x180c)){(VOID)sc_cfg_set(
 ZPB_NV_WRITE_FLAG,ZPB_NEW_ERROR);if(TRUE==pbNewFlag){printf(
 "\x70\x62\x3a\x61\x64\x64\x20\x53\x63\x70\x62\x77\x20\x65\x72\x72\x6f\x72\x2e" "\n"
 );}else{printf(
@@ -407,16 +411,16 @@
 );}else{(VOID)sc_cfg_set(ZPB_NV_WRITE_FLAG,ZPB_NEW_ERROR);printf(
 "\x70\x62\x3a\x57\x72\x69\x74\x65\x43\x6f\x6e\x74\x61\x63\x74\x54\x6f\x50\x62\x6d\x54\x61\x62\x6c\x65\x20\x65\x72\x72\x6f\x72\x2e" "\n"
 );}}VOID atWeb_AddOnePb(T_zPb_WebContact*webPbContact,sem_t semId){SINT32 
-idleIndex=(0x5fc+6155-0x1e06);T_zPb_Header pbHeader={(0x836+172-0x8e2)};BOOL 
-pbNewFlag=FALSE;T_zPb_DelInfo delRecord={(0x1d4+4034-0x1196)};CHAR ptFlag[
-(0x5c3+5549-0x1b5c)]={(0x975+401-0xb06)};printf(
+idleIndex=(0x10f4+3136-0x1d33);T_zPb_Header pbHeader={(0xdf1+5129-0x21fa)};BOOL 
+pbNewFlag=FALSE;T_zPb_DelInfo delRecord={(0x991+4600-0x1b89)};CHAR ptFlag[
+(0xdb8+1825-0x14c5)]={(0x18f0+1270-0x1de6)};printf(
 "\x5b\x50\x42\x5d\x20\x61\x74\x57\x65\x62\x5f\x41\x64\x64\x4f\x6e\x65\x50\x62\x2c\x20\x70\x62\x49\x64\x3d\x25\x64\x21" "\n"
-,webPbContact->pbId);if(-(0x1873+3135-0x24b1)==webPbContact->pbId){slog(PB_PRINT
-,SLOG_DEBUG,
+,webPbContact->pbId);if(-(0x4d2+7746-0x2313)==webPbContact->pbId){slog(PB_PRINT,
+SLOG_DEBUG,
 "\x70\x62\x3a\x61\x74\x57\x65\x62\x5f\x41\x64\x64\x4f\x6e\x65\x50\x62\x20\x6e\x65\x77\x2e" "\n"
 );pbNewFlag=TRUE;idleIndex=atPb_FindIdleIndex(webPbContact,pbNewFlag);printf(
 "\x5b\x50\x42\x5d\x20\x61\x74\x57\x65\x62\x5f\x41\x64\x64\x4f\x6e\x65\x50\x62\x20\x69\x64\x6c\x65\x49\x6e\x64\x65\x78\x3d\x25\x64\x2e" "\n"
-,idleIndex);if(idleIndex!=-(0x124a+4741-0x24ce)){webPbContact->pbIndex=idleIndex
+,idleIndex);if(idleIndex!=-(0x1591+3760-0x2440)){webPbContact->pbIndex=idleIndex
 ;}else{(VOID)sc_cfg_set(ZPB_NV_WRITE_FLAG,ZPB_NEW_ERROR);printf(
 "\x5b\x50\x42\x5d\x20\x6d\x65\x6d\x6f\x72\x79\x20\x69\x73\x20\x66\x75\x6c\x6c\x2c\x20\x63\x61\x6e\x20\x6e\x6f\x74\x20\x61\x64\x64\x20\x72\x65\x63\x6f\x64\x65\x20\x61\x6e\x79\x20\x6d\x6f\x72\x65\x2e" "\n"
 );return;}}else{printf(
@@ -435,27 +439,27 @@
 );(VOID)sc_cfg_set(ZPB_NV_WRITE_FLAG,ZPB_LOCATION_IS_NULL);}printf(
 "\x5b\x50\x42\x5d\x20\x61\x74\x57\x65\x62\x5f\x41\x64\x64\x4f\x6e\x65\x50\x62\x20\x64\x65\x6c\x5f\x69\x64\x3d\x25\x64\x2e" "\n"
 ,webPbContact->del_id);sc_cfg_get(ZPB_NV_WRITE_FLAG,ptFlag,sizeof(ptFlag));if(
-(0x88a+3248-0x153a)==strcmp("\x30",ptFlag)&&-(0x208+773-0x50c)!=webPbContact->
-del_id){delRecord.delId[(0x457+802-0x779)]=webPbContact->del_id;atWeb_DelOnepb(&
-delRecord,semId);}}VOID atWeb_DelOnepb(T_zPb_DelInfo*delRecord,sem_t semId){CHAR
- errCode[ZSVR_AT_RES_CODE_LEN]={(0x1f55+187-0x2010)};int atRes=
-(0xb4+9124-0x2458);SINT32 delTime=(0x6f8+7510-0x244e);
+(0x564+7745-0x23a5)==strcmp("\x30",ptFlag)&&-(0x180c+2362-0x2145)!=webPbContact
+->del_id){delRecord.delId[(0x273+5785-0x190c)]=webPbContact->del_id;
+atWeb_DelOnepb(&delRecord,semId);}}VOID atWeb_DelOnepb(T_zPb_DelInfo*delRecord,
+sem_t semId){CHAR errCode[ZSVR_AT_RES_CODE_LEN]={(0xaeb+1463-0x10a2)};int atRes=
+(0x18ed+3223-0x2584);SINT32 delTime=(0x32d+290-0x44f);
 atPb_GetLocationIndexForDel(delRecord,delTime);printf(
 "\x5b\x50\x42\x5d\x20\x64\x65\x6c\x5f\x61\x5f\x70\x62\x6d\x5f\x72\x65\x63\x6f\x72\x64\x2d\x2d\x64\x65\x6c\x20\x69\x6e\x64\x65\x78\x3d\x25\x64\x2c\x6c\x6f\x63\x61\x74\x69\x6f\x6e\x3d\x25\x64" "\n"
-,delRecord->delIndex[(0x185d+400-0x19ed)],delRecord->delLocation);if(
+,delRecord->delIndex[(0x14c+722-0x41e)],delRecord->delLocation);if(
 ZPB_LOCATION_AP==delRecord->delLocation){if(ZPB_DB_OK==atPb_DelARecFromPbmTable(
 delRecord,delTime)){(VOID)sc_cfg_set(ZPB_NV_WRITE_FLAG,ZPB_OPERATE_SUC);printf(
 "\x5b\x50\x42\x5d\x20\x61\x74\x57\x65\x62\x5f\x44\x65\x6c\x4f\x6e\x65\x70\x62\x2d\x2d\x64\x65\x6c\x20\x41\x50\x20\x73\x75\x63\x63\x65\x73\x73" "\n"
 );return;}slog(PB_PRINT,SLOG_DEBUG,
 "\x70\x62\x3a\x64\x65\x6c\x5f\x61\x5f\x70\x62\x6d\x5f\x72\x65\x63\x6f\x72\x64\x3a\x72\x65\x6d\x6f\x76\x65\x20\x72\x65\x63\x20\x66\x72\x6f\x6d\x20\x70\x62\x6d\x20\x74\x61\x62\x6c\x65\x20\x66\x61\x69\x6c\x65\x64" "\n"
 );(VOID)sc_cfg_set(ZPB_NV_WRITE_FLAG,ZPB_DEL_ERROR);}else if(ZPB_LOCATION_USIM==
-delRecord->delLocation){CHAR pbMax[(0x839+7201-0x2428)]={(0xd9f+5303-0x2256)};
+delRecord->delLocation){CHAR pbMax[(0x16d4+3759-0x2551)]={(0x1177+3785-0x2040)};
 sc_cfg_get(ZPB_NV_USIMINDEXMAX,pbMax,sizeof(pbMax));if((delRecord->delIndex[
-(0x3cc+2993-0xf7d)]>=(0xa01+3146-0x164a))&&(delRecord->delIndex[
-(0x1a88+309-0x1bbd)]<=atoi(pbMax))){ipc_send_message(MODULE_ID_PB,
+(0x94c+5652-0x1f60)]>=(0x1618+3312-0x2307))&&(delRecord->delIndex[
+(0xe71+6071-0x2628)]<=atoi(pbMax))){ipc_send_message(MODULE_ID_PB,
 MODULE_ID_AT_CTL,MSG_CMD_DELETE_PB_REQ,sizeof(int),(unsigned char*)&delRecord->
-delIndex[(0x992+1514-0xf7c)],(0x119f+3826-0x2091));sem_wait(&g_Pb_sem_id);if(
-g_PbOptRsp.result!=(0x44+9306-0x249d)){sc_cfg_set(ZPB_NV_WRITE_FLAG,
+delIndex[(0x611+7125-0x21e6)],(0x5cb+229-0x6b0));sem_wait(&g_Pb_sem_id);if(
+g_PbOptRsp.result!=(0x1c36+799-0x1f54)){sc_cfg_set(ZPB_NV_WRITE_FLAG,
 ZPB_DEL_ERROR);}sc_cfg_set(ZPB_NV_USIMMEMORYFULL,"\x6e\x6f");}if(ZPB_DB_OK==
 atPb_DelARecFromPbmTable(delRecord,delTime)){(VOID)sc_cfg_set(ZPB_NV_WRITE_FLAG,
 ZPB_OPERATE_SUC);printf(
@@ -465,9 +469,9 @@
 "\x70\x62\x3a\x64\x65\x6c\x5f\x61\x5f\x70\x62\x6d\x5f\x72\x65\x63\x6f\x72\x64\x3a\x6c\x6f\x63\x61\x74\x69\x6f\x6e\x20\x69\x73\x20\x4e\x55\x4c\x4c" "\n"
 );(VOID)sc_cfg_set(ZPB_NV_WRITE_FLAG,ZPB_LOCATION_IS_NULL);}}VOID 
 atWeb_DelMultPb(T_zPb_DelInfo*delRecord,sem_t semId){CHAR errCode[
-ZSVR_AT_RES_CODE_LEN]={(0x411+1053-0x82e)};int atRes=(0x655+7165-0x2252);SINT32 
-delCount=(0x13b+9501-0x2658);(VOID)sc_cfg_set(NV_PHO_DEL,"");memset(&
-g_zPb_DelStatusUsim,(0x1d0+2317-0xadd),sizeof(T_zPb_DelStatusMultiOrAll));
+ZSVR_AT_RES_CODE_LEN]={(0x1fff+1784-0x26f7)};int atRes=(0x1ccc+1077-0x2101);
+SINT32 delCount=(0x927+885-0xc9c);(VOID)sc_cfg_set(NV_PHO_DEL,"");memset(&
+g_zPb_DelStatusUsim,(0x7aa+2605-0x11d7),sizeof(T_zPb_DelStatusMultiOrAll));
 g_zPb_DelStatusUsim.dealFlag=ZPB_DEL_MULTI_RECORD_USIM;for(;delCount<delRecord->
 delTotal;delCount++){slog(PB_PRINT,SLOG_DEBUG,
 "\x70\x62\x33\x3a\x64\x65\x6c\x49\x64\x5b\x25\x64\x5d\x3d\x25\x64\x2c\x64\x65\x6c\x5f\x70\x62\x6d\x5f\x69\x6e\x64\x65\x78\x5b\x25\x64\x5d\x3d\x25\x64" "\n"
@@ -478,14 +482,14 @@
 "\x70\x62\x3a\x70\x62\x6d\x3a\x72\x65\x6d\x6f\x76\x65\x20\x74\x68\x65\x20\x69\x28\x25\x64\x29\x20\x72\x65\x63\x20\x66\x72\x6f\x6d\x20\x70\x62\x6d\x20\x74\x61\x62\x6c\x65\x20\x66\x61\x69\x6c\x65\x64" "\n"
 ,delCount);g_zPb_DelStatusUsim.dealFailNum++;continue;}g_zPb_DelStatusUsim.
 dealSuccNum++;}else if(ZPB_LOCATION_USIM==delRecord->delLocation){CHAR pbMax[
-(0xf5+6265-0x193c)]={(0xbcd+4724-0x1e41)};sc_cfg_get(ZPB_NV_USIMINDEXMAX,pbMax,
-sizeof(pbMax));if((delRecord->delIndex[delCount]>=(0x23b+8056-0x21b2))&&(
+(0x1791+789-0x1a74)]={(0x1038+425-0x11e1)};sc_cfg_get(ZPB_NV_USIMINDEXMAX,pbMax,
+sizeof(pbMax));if((delRecord->delIndex[delCount]>=(0x112+2028-0x8fd))&&(
 delRecord->delIndex[delCount]<=atoi(pbMax))){printf(
 "\x70\x62\x39\x3a\x61\x74\x57\x65\x62\x5f\x44\x65\x6c\x4d\x75\x6c\x74\x50\x62\x3a\x72\x65\x6d\x6f\x76\x65\x20\x74\x68\x65\x20\x69\x6e\x64\x65\x78\x28\x25\x64\x29\x20\x72\x65\x63\x20\x66\x72\x6f\x6d\x20\x70\x62\x6d\x20\x74\x61\x62\x6c\x65" "\n"
 ,delRecord->delIndex[delCount]);ipc_send_message(MODULE_ID_PB,MODULE_ID_AT_CTL,
 MSG_CMD_DELETE_PB_REQ,sizeof(int),(unsigned char*)&delRecord->delIndex[delCount]
-,(0xd31+957-0x10ee));sem_wait(&g_Pb_sem_id);if(g_PbOptRsp.result!=
-(0xdc0+2756-0x1883)){g_zPb_DelStatusUsim.dealFailNum++;sc_cfg_set(
+,(0xd64+6223-0x25b3));sem_wait(&g_Pb_sem_id);if(g_PbOptRsp.result!=
+(0x403+5023-0x17a1)){g_zPb_DelStatusUsim.dealFailNum++;sc_cfg_set(
 ZPB_NV_WRITE_FLAG,ZPB_DEL_ERROR);}else{g_zPb_DelStatusUsim.dealSuccNum++;
 sc_cfg_set(ZPB_NV_USIMMEMORYFULL,"\x6e\x6f");}}else{continue;}(VOID)
 atPb_DelSimRecFromPbTable(delRecord->delIndex[delCount]);}else{slog(PB_PRINT,
@@ -493,14 +497,14 @@
 "\x70\x62\x3a\x6c\x6f\x63\x61\x74\x69\x6f\x6e\x20\x69\x73\x20\x4e\x55\x4c\x4c" "\n"
 );(VOID)sc_cfg_set(ZPB_NV_WRITE_FLAG,ZPB_LOCATION_IS_NULL);}}
 atPb_SetDelStatusMultOrAll();}T_zPb_DbResult atPb_DelRecByGroup(VOID){
-T_zPb_DbResult result=ZPB_DB_OK;T_zPb_ApIndex index={(0x11c4+639-0x1443)};SINT32
- i=(0x337+3018-0xf00);result=atPb_DelRecFromPbmTableByGroup(&index);if(ZPB_DB_OK
-!=result){(VOID)sc_cfg_set(ZPB_NV_WRITE_FLAG,ZPB_DEL_ERROR);return result;}(VOID
-)sc_cfg_set(ZPB_NV_WRITE_FLAG,ZPB_OPERATE_SUC);for(i=(0x12e4+5083-0x26be);i<=
-ZPB_AP_MAX_RECORD;i++){if((0xe3f+393-0xfc8)!=index.apIndex[i]){g_zPb_ApIndex[(
-index.apIndex[i])]=PBM_ERROR_NOT_FOUND;}}return result;}VOID 
-atPb_DelAllRecsSimDb(VOID){CHAR sql[ZPB_MAX_BYTES_DB]={(0xed4+4871-0x21db)};
-snprintf(sql,sizeof(sql)-(0x9ea+6484-0x233d),
+T_zPb_DbResult result=ZPB_DB_OK;T_zPb_ApIndex index={(0x1a27+3036-0x2603)};
+SINT32 i=(0xee8+904-0x126f);result=atPb_DelRecFromPbmTableByGroup(&index);if(
+ZPB_DB_OK!=result){(VOID)sc_cfg_set(ZPB_NV_WRITE_FLAG,ZPB_DEL_ERROR);return 
+result;}(VOID)sc_cfg_set(ZPB_NV_WRITE_FLAG,ZPB_OPERATE_SUC);for(i=
+(0x1a34+1606-0x2079);i<=ZPB_AP_MAX_RECORD;i++){if((0x12b1+1589-0x18e6)!=index.
+apIndex[i]){g_zPb_ApIndex[(index.apIndex[i])]=PBM_ERROR_NOT_FOUND;}}return 
+result;}VOID atPb_DelAllRecsSimDb(VOID){CHAR sql[ZPB_MAX_BYTES_DB]={
+(0x9b5+5774-0x2043)};snprintf(sql,sizeof(sql)-(0x22e0+387-0x2462),
 "\x64\x65\x6c\x65\x74\x65\x20\x66\x72\x6f\x6d\x20\x25\x73\x20\x77\x68\x65\x72\x65\x20\x4c\x6f\x63\x61\x74\x69\x6f\x6e\x3d\x25\x64"
 ,ZPB_DB_PBM_TABLE,ZPB_LOCATION_USIM);if(ZPB_DB_OK==atPb_ExecDbSql(sql,NULL,NULL)
 ){atPb_ClearSimPbmIndexArray();if(ZPB_DB_OK!=atPb_ExecDbSql(
@@ -509,28 +513,28 @@
 );(VOID)sc_cfg_set(ZPB_NV_WRITE_FLAG,ZPB_DEL_ERROR);return;}(VOID)sc_cfg_set(
 ZPB_NV_WRITE_FLAG,ZPB_OPERATE_SUC);}else{(VOID)sc_cfg_set(ZPB_NV_WRITE_FLAG,
 ZPB_DEL_ERROR);}}VOID atPb_DelAllRecsSim(T_zPb_DelInfo*pdelRecord,sem_t semId){
-CHAR errCode[ZSVR_AT_RES_CODE_LEN]={(0x270+1824-0x990)};int atRes=
-(0x975+4190-0x19d3);UINT32 i=(0x1c45+2155-0x24b0);CHAR sql[ZPB_MAX_BYTES_DB]={
-(0x19b+7537-0x1f0c)};UINT32 count=(0x32f+2594-0xd51);if(pdelRecord!=NULL){memset
-(&g_zPb_DelStatusUsim,(0x1c8+8016-0x2118),sizeof(T_zPb_DelStatusMultiOrAll));
+CHAR errCode[ZSVR_AT_RES_CODE_LEN]={(0xfd7+1891-0x173a)};int atRes=
+(0x1808+2772-0x22dc);UINT32 i=(0x777+6879-0x2256);CHAR sql[ZPB_MAX_BYTES_DB]={
+(0x642+1334-0xb78)};UINT32 count=(0x1fa9+591-0x21f8);if(pdelRecord!=NULL){memset
+(&g_zPb_DelStatusUsim,(0x744+2462-0x10e2),sizeof(T_zPb_DelStatusMultiOrAll));
 g_zPb_DelStatusUsim.dealFlag=ZPB_DEL_ALL_RECORD_USIM;snprintf(sql,sizeof(sql)-
-(0x284+8718-0x2491),
+(0xbd2+6876-0x26ad),
 "\x73\x65\x6c\x65\x63\x74\x20\x63\x6f\x75\x6e\x74\x28\x2a\x29\x20\x66\x72\x6f\x6d\x20\x25\x73\x20\x77\x68\x65\x72\x65\x20\x4c\x6f\x63\x61\x74\x69\x6f\x6e\x3d\x25\x64"
 ,ZPB_DB_PBM_TABLE,ZPB_LOCATION_USIM);(VOID)atPb_ExecDbSql(sql,
-atPb_DbCountTableLineCb,&count);if((0x1fca+49-0x1ffb)<count){CHAR pbMin[
-(0x5c3+8471-0x26a8)]={(0xa6+8655-0x2275)};CHAR pbMax[(0x10b5+1322-0x15ad)]={
-(0x30b+2750-0xdc9)};UINT32 i_pbMin=(0xcd2+6015-0x2451);UINT32 i_pbMax=
-(0x83+3942-0xfe9);sc_cfg_get(ZPB_NV_USIMINDEXMIN,pbMin,sizeof(pbMin));sc_cfg_get
-(ZPB_NV_USIMINDEXMAX,pbMax,sizeof(pbMax));i_pbMin=atoi(pbMin);i_pbMax=atoi(pbMax
-);if(i_pbMin>ZPB_SIM_MAX_RECORD||i_pbMax>ZPB_SIM_MAX_RECORD){printf(
+atPb_DbCountTableLineCb,&count);if((0x115f+3828-0x2053)<count){CHAR pbMin[
+(0x1609+3537-0x23a8)]={(0x1f0+7101-0x1dad)};CHAR pbMax[(0x3e6+2587-0xdcf)]={
+(0x13ff+3635-0x2232)};UINT32 i_pbMin=(0x13d1+4530-0x2583);UINT32 i_pbMax=
+(0xea8+6057-0x2651);sc_cfg_get(ZPB_NV_USIMINDEXMIN,pbMin,sizeof(pbMin));
+sc_cfg_get(ZPB_NV_USIMINDEXMAX,pbMax,sizeof(pbMax));i_pbMin=atoi(pbMin);i_pbMax=
+atoi(pbMax);if(i_pbMin>ZPB_SIM_MAX_RECORD||i_pbMax>ZPB_SIM_MAX_RECORD){printf(
 "\x5b\x50\x42\x5d\x20\x61\x74\x50\x62\x5f\x44\x65\x6c\x41\x6c\x6c\x52\x65\x63\x73\x53\x69\x6d\x20\x73\x69\x6d\x20\x69\x6e\x64\x65\x78\x20\x74\x6f\x6f\x20\x6c\x61\x72\x67\x65" "\n"
 );return;}for(i=i_pbMin;i<=i_pbMax;i++){ipc_send_message(MODULE_ID_PB,
 MODULE_ID_AT_CTL,MSG_CMD_DELETE_PB_REQ,sizeof(int),(unsigned char*)&i,
-(0xe89+796-0x11a5));sem_wait(&g_Pb_sem_id);if(g_PbOptRsp.result!=
-(0x1647+1324-0x1b72)){g_zPb_DelStatusUsim.dealFailNum++;sc_cfg_set(
+(0x119d+2699-0x1c28));sem_wait(&g_Pb_sem_id);if(g_PbOptRsp.result!=
+(0xd13+4027-0x1ccd)){g_zPb_DelStatusUsim.dealFailNum++;sc_cfg_set(
 ZPB_NV_WRITE_FLAG,ZPB_DEL_ERROR);}else{g_zPb_DelStatusUsim.dealSuccNum++;
 sc_cfg_set(ZPB_NV_USIMMEMORYFULL,"\x6e\x6f");}}snprintf(sql,sizeof(sql)-
-(0x468+6469-0x1dac),
+(0x381+5210-0x17da),
 "\x64\x65\x6c\x65\x74\x65\x20\x66\x72\x6f\x6d\x20\x25\x73\x20\x77\x68\x65\x72\x65\x20\x4c\x6f\x63\x61\x74\x69\x6f\x6e\x3d\x25\x64"
 ,ZPB_DB_PBM_TABLE,ZPB_LOCATION_USIM);if(ZPB_DB_OK==atPb_ExecDbSql(sql,NULL,NULL)
 ){(VOID)sc_cfg_set(ZPB_NV_WRITE_FLAG,ZPB_OPERATE_SUC);atPb_ClearSimPbmIndexArray
diff --git a/ap/app/zte_comm/rtc-service/rtc-service.c b/ap/app/zte_comm/rtc-service/rtc-service.c
index fb159e5..d9db201 100755
--- a/ap/app/zte_comm/rtc-service/rtc-service.c
+++ b/ap/app/zte_comm/rtc-service/rtc-service.c
@@ -62,6 +62,7 @@
 static void convert_time(time_t timeSec, struct tm * tmTime, TIME_CONVERT_TYPE type)
 {
     time_t tmpTime = 0;
+	time_t tmpTime2 = 0;
     if (tmTime == NULL)
     {
         slog(RTC_PRINT, SLOG_ERR, "rtc-service: wrong input param, check it! \n");
@@ -78,9 +79,10 @@
         localtime_r((time_t*)&tmpTime, tmTime);
     }
 
+	tmpTime2 = mktime(tmTime);
     slog(RTC_PRINT, SLOG_DEBUG,
          "Time:%ld, tm_year:%d, tm_mon:%d, tm_hour:%d, tm_min:%d, tm_sec:%d, tm_yday:%d, tm_mday:%d, tm_wday:%d \n",
-         mktime(tmTime), tmTime->tm_year, tmTime->tm_mon, tmTime->tm_hour, tmTime->tm_min, tmTime->tm_sec, tmTime->tm_yday,
+         tmpTime2, tmTime->tm_year, tmTime->tm_mon, tmTime->tm_hour, tmTime->tm_min, tmTime->tm_sec, tmTime->tm_yday,
          tmTime->tm_mday, tmTime->tm_wday);
 
 }
diff --git a/ap/app/zte_comm/sms/src/sms_code.c b/ap/app/zte_comm/sms/src/sms_code.c
index f0447b6..d67e75c 100755
--- a/ap/app/zte_comm/sms/src/sms_code.c
+++ b/ap/app/zte_comm/sms/src/sms_code.c
@@ -6,659 +6,662 @@
 #ifdef WIN32

 #include <wchar.h>

 #endif

-#define     NON_GSM                         (0x389+2999-0xf20)

+#define     NON_GSM                         (0x1f46+1471-0x24e5)

 #define     NON_GSM_P                       NON_GSM

 extern T_zUfiSms_ConcatInfo g_zUfiSms_ConcatSms;static const wms_udh_s_type*
-const_header;char g_zUfiSms_DigAscMap[(0x939+3581-0x1726)]={
-((char)(0x61c+5858-0x1cce)),((char)(0xdc4+2054-0x1599)),
-((char)(0xf60+4341-0x2023)),((char)(0x1c2a+2026-0x23e1)),
-((char)(0x1161+3232-0x1dcd)),((char)(0x232+4818-0x14cf)),
-((char)(0x1771+268-0x1847)),((char)(0xb86+4104-0x1b57)),
-((char)(0x21b+5760-0x1863)),((char)(0xb8f+4872-0x1e5e)),
-((char)(0x1daa+1229-0x2236)),((char)(0x100c+933-0x136f)),
-((char)(0x5f0+1395-0xb20)),((char)(0x7b+614-0x29d)),((char)(0x536+1101-0x93e)),
-((char)(0xbd7+3435-0x18fc))};extern SMS_PARAM g_zUfiSms_SendingSms;extern UINT16
- g_zUfiSms_IsLanguageShift;extern int g_zUfiSms_Language;static int 
-SerializeNumbers_sms(const char*pSrc,char*pDst,int nSrcLength);const unsigned 
-short g_zUfiSms_AsciiToGsmdefaultTable[]={((char)(0x5a1+1342-0xabf)),
-((char)(0xfd+4554-0x12a7)),((char)(0x52+5891-0x1735)),
-((char)(0x13d4+2535-0x1d9b)),((char)(0xf69+1663-0x15c8)),
-((char)(0x18a+3126-0xda0)),((char)(0xe5f+3800-0x1d17)),
-((char)(0xa26+6597-0x23cb)),((char)(0x45a+6150-0x1c40)),
-((char)(0x5e2+1998-0xd90)),((char)(0xb75+6817-0x25f6)),
-((char)(0x1391+4926-0x26af)),((char)(0x962+1918-0x10c0)),
-((char)(0x3c6+6771-0x1e19)),((char)(0x31d+3333-0x1002)),
-((char)(0x149+4800-0x13e9)),((char)(0xa77+1703-0x10fe)),
-((char)(0x110f+4735-0x236e)),((char)(0x606+4349-0x16e3)),
-((char)(0xdea+700-0x1086)),((char)(0xf3d+4398-0x204b)),
-((char)(0x860+6195-0x2073)),((char)(0x1ab3+2358-0x23c9)),
-((char)(0x2ca+5681-0x18db)),((char)(0x1423+2646-0x1e59)),
-((char)(0x1459+1806-0x1b47)),((char)(0x8ef+4513-0x1a70)),
-((char)(0x8e9+443-0xa84)),((char)(0x2c9+2942-0xe27)),((char)(0xc13+6022-0x2379))
-,((char)(0x12fa+3582-0x20d8)),((char)(0x771+4687-0x19a0)),
-((char)(0x229+8563-0x237c)),((char)(0x2e8+4696-0x151f)),(0x174a+2999-0x22df),
-((char)(0xacc+2288-0x1399)),(0xe57+5704-0x249d),((char)(0x67a+4253-0x16f2)),
-((char)(0xceb+5344-0x21a5)),(0xcaf+2107-0x14c3),((char)(0x8f2+3368-0x15f2)),
-((char)(0xf95+959-0x132b)),((char)(0x3c3+787-0x6ac)),((char)(0xff6+1525-0x15c0))
-,((char)(0x19f7+1377-0x1f2c)),((char)(0x1b26+682-0x1da3)),
-((char)(0x11d2+2889-0x1ced)),((char)(0x434+580-0x649)),
-((char)(0x4b5+3496-0x122d)),((char)(0x45+9883-0x26af)),
-((char)(0x6ca+7855-0x2547)),((char)(0x1b5b+2652-0x2584)),
-((char)(0x874+4573-0x1a1d)),((char)(0x1d3f+2003-0x24dd)),
-((char)(0x1e1b+793-0x20fe)),((char)(0xfc2+562-0x11bd)),((char)(0x8b2+947-0xc2d))
-,((char)(0x80f+864-0xb36)),((char)(0x2bf+5037-0x1632)),
-((char)(0x655+1785-0xd13)),((char)(0x5b2+1133-0x9e3)),
-((char)(0xfb2+3000-0x1b2d)),((char)(0xa1+3391-0xda2)),
-((char)(0xbca+3294-0x1869)),(0xcb3+94-0xd11),((char)(0x9da+2983-0x1540)),
-((char)(0x892+3937-0x17b1)),((char)(0x191f+788-0x1bf0)),
-((char)(0x2440+756-0x26f0)),((char)(0x1e01+1662-0x243a)),
-((char)(0x7f7+3394-0x14f3)),((char)(0x862+3705-0x1694)),
-((char)(0x133b+18-0x1305)),((char)(0x934+1683-0xf7e)),
-((char)(0x76b+2797-0x120e)),((char)(0xde0+1361-0x12e6)),
-((char)(0x25c+8829-0x248d)),((char)(0x1b16+574-0x1d07)),
-((char)(0x6b4+3272-0x132e)),((char)(0x4b0+5335-0x1938)),
-((char)(0x31d+6258-0x1b3f)),((char)(0x1440+1680-0x1a7f)),
-((char)(0x2fc+311-0x3e1)),((char)(0x6ff+1598-0xcea)),((char)(0xeb7+1982-0x1621))
-,((char)(0xc9b+5347-0x2129)),((char)(0x217+1459-0x774)),
-((char)(0x120b+498-0x13a6)),((char)(0x11c5+4351-0x226c)),
-((char)(0x1401+1105-0x17f9)),((char)(0x8f1+7538-0x2609)),6972,
-(0x215f+8048-0x25a0),6974,(0x2293+6651-0x217a),(0x66a+5056-0x1a19),
-((char)(0x1171+1338-0x168b)),((char)(0x1b6d+1761-0x21ed)),
-((char)(0x8c7+1522-0xe57)),((char)(0x118+3731-0xf48)),
-((char)(0x1796+2906-0x228c)),((char)(0x117a+3889-0x2046)),
-((char)(0x1167+1722-0x17bb)),((char)(0x9d7+6678-0x2386)),
-((char)(0x2a6+1575-0x865)),((char)(0x331+8060-0x2244)),
-((char)(0x2372+349-0x2465)),((char)(0x2b3+5972-0x199c)),
-((char)(0xfe7+1555-0x158e)),((char)(0xe02+1500-0x1371)),
-((char)(0xd37+6416-0x25d9)),((char)(0xdb9+1422-0x12d8)),
-((char)(0xaa7+4469-0x1bac)),((char)(0x4d9+2541-0xe55)),((char)(0xa36+587-0xc0f))
-,((char)(0x10dc+4655-0x2298)),((char)(0x1832+276-0x18d2)),
-((char)(0x12a1+3565-0x2019)),((char)(0x1932+2460-0x2258)),
-((char)(0x1c22+2728-0x2653)),((char)(0x83+7619-0x1dce)),
-((char)(0x1590+2031-0x1d06)),((char)(0x237f+503-0x24fc)),6952,
-(0x1c41+7735-0x1f38),6953,(0x1b7b+9062-0x23a4),((char)(0x68d+5791-0x1d0c)),
-((char)(0x69+4622-0x1257)),((char)(0xf78+5648-0x2568)),
-((char)(0xc75+1877-0x13aa)),((char)(0xa69+1771-0x1134)),
-((char)(0x1dc0+900-0x2124)),((char)(0x712+4310-0x17c8)),
-((char)(0xa05+6955-0x2510)),((char)(0x14a+6913-0x1c2b)),
-((char)(0x881+7279-0x24d0)),((char)(0x179b+2435-0x20fe)),
-((char)(0x2b9+6004-0x1a0d)),((char)(0x582+4949-0x18b7)),
-((char)(0xfd+6518-0x1a53)),((char)(0x1568+650-0x17d2)),
-((char)(0x3f0+2939-0xf4b)),((char)(0x1886+3282-0x2538)),
-((char)(0x405+3809-0x12c6)),((char)(0x1eab+280-0x1fa3)),
-((char)(0xfd3+2455-0x194a)),((char)(0x1098+487-0x125f)),
-((char)(0x274+3091-0xe67)),((char)(0x146+8722-0x2338)),
-((char)(0x301+3604-0x10f5)),((char)(0x33a+6540-0x1ca6)),
-((char)(0x1f2a+289-0x202b)),((char)(0x16ab+2626-0x20cd)),
-((char)(0x11b5+2227-0x1a48)),((char)(0xd32+134-0xd98)),
-((char)(0x214+3015-0xdbb)),((char)(0x103b+4023-0x1fd2)),
-((char)(0x10f4+150-0x116a)),((char)(0x214f+958-0x24ed)),
-((char)(0x3b5+2489-0xd4e)),(0x3b6+8132-0x233a),((char)(0x811+6304-0x2091)),
-(0x482+4895-0x17a0),(0x69a+2511-0x1045),(0x191+2027-0x979),
-((char)(0x75d+6879-0x221c)),(0x11b1+2247-0x1a19),((char)(0x6ea+5974-0x1e20)),
-((char)(0x535+170-0x5bf)),((char)(0x1a28+2884-0x254c)),
-((char)(0x10f1+5389-0x25de)),((char)(0x9aa+3493-0x172f)),
-((char)(0x4ec+8533-0x2621)),((char)(0x868+960-0xc08)),((char)(0xad+7443-0x1da0))
-,((char)(0x34a+8525-0x2477)),((char)(0x8c8+4149-0x18dd)),
-((char)(0xfd0+4790-0x2266)),((char)(0x217+148-0x28b)),
-((char)(0x1e3+9338-0x263d)),((char)(0x757+7286-0x23ad)),
-((char)(0xf2b+4721-0x217c)),((char)(0x1c3c+753-0x1f0d)),(0x826+5650-0x1e2d),
-((char)(0x15b9+1982-0x1d57)),((char)(0x5db+7914-0x24a5)),
-((char)(0x6b+9864-0x26d3)),((char)(0x1ca+8808-0x2412)),
-((char)(0xd0b+3412-0x1a3f)),((char)(0x15c4+2147-0x1e07)),(0x5d0+4203-0x15db),
-((char)(0x69+853-0x39e)),((char)(0x1594+167-0x161b)),((char)(0x711+3381-0x1426))
-,((char)(0x1af8+91-0x1b33)),(0x149d+129-0x14c3),(0x10dd+3154-0x1d21),
-(0x110a+3340-0x1dfa),(0xfff+5824-0x26b6),((char)(0x27b+6958-0x1d89)),
-(0x7ec+3364-0x14f1),((char)(0x1418+2532-0x1ddc)),((char)(0x117d+2866-0x1c8f)),
-((char)(0x1209+1160-0x1671)),((char)(0xca2+1020-0x107e)),
-((char)(0x173b+3876-0x263f)),((char)(0xcb0+3876-0x1bb4)),
-((char)(0x70a+6097-0x1ebb)),(0x10b+308-0x1e2),((char)(0x73d+3395-0x1460)),
-((char)(0x2293+922-0x260d)),((char)(0xe92+1079-0x12a9)),
-((char)(0x1b6+5467-0x16f1)),(0xb78+533-0xd31),((char)(0x106a+4594-0x223c)),
-((char)(0x729+760-0xa01)),((char)(0x89f+2698-0x1309)),
-((char)(0x257+7271-0x1e9e)),((char)(0x16cd+3913-0x25f6)),(0x1b9d+2649-0x2598),
-((char)(0x9d1+261-0xab6)),((char)(0x1549+3922-0x247b)),(0x1041+3314-0x1d15),
-(0x108+3572-0xe7d),((char)(0x17ec+3227-0x2467)),((char)(0x379+7030-0x1ecf)),
-((char)(0xb2f+2121-0x1358)),(0x5bd+1598-0xb80),(0xd4a+789-0x1050),
-(0xd13+123-0xd71),((char)(0xc5+7869-0x1f62)),(0x13df+3935-0x233a),
-(0xa7a+4355-0x1b78),((char)(0x1b5c+10-0x1b46)),((char)(0x2085+323-0x21a8)),
-(0x311+4114-0x131c),((char)(0xe9a+5854-0x2558)),((char)(0x1366+563-0x1579)),
-((char)(0x28a+4393-0x1393)),((char)(0x1a25+1498-0x1fdf)),(0x47d+1682-0xa92),
-(0x10d2+430-0x1278),((char)(0x9bd+5520-0x1f2d)),((char)(0x1cb4+1239-0x216b)),
-((char)(0x499+4246-0x150f)),(0x2b1+2922-0xd9f),((char)(0x555+2124-0xd81)),
-(0x189d+2167-0x2108),(0x62+1533-0x659),((char)(0x966+5409-0x1e67)),
-((char)(0x6b1+2115-0xed4)),(0x1db+3113-0xd86),((char)(0x15d8+449-0x1779)),
-((char)(0x1764+415-0x18e3)),((char)(0x4fa+2705-0xf6b)),};const unsigned short 
-zte_sms_GSM7_SPANISH_To_UCS2_Table_Ex[][(0xde3+125-0xe5e)]={{
-(0x1112+4508-0x22a5),(0x806+8004-0x2663)},{(0x77f+4622-0x1983),
-(0x1765+824-0x1a91)},{(0xbd3+6343-0x248d),(0x1c77+2466-0x260c)},{
-(0xc49+2002-0x1407),(0x15ad+4070-0x2535)},{(0x7c+5453-0x15a1),
-(0xb88+4665-0x1d46)},{(0x1598+4346-0x2669),(0x264+6491-0x1b42)},{
-(0xb60+2396-0x148d),(0x6f7+4563-0x186e)},{(0x191+1761-0x836),(0x9a4+411-0xae4)},
-{(0x678+1072-0xa6b),(0x11b+3579-0xe98)},{(0x1718+3674-0x2534),
-(0x980+3745-0x17c4)},{(0xdd5+2599-0x17bc),(0xb8+3233-0xcdd)},{
-(0x131d+1559-0x18f3),(0x550+2646-0xee5)},{(0x8bf+3889-0x17a7),
-(0x1aed+396-0x1bac)},{(0xc80+5489-0x21a2),(0xa8d+4035-0x197d)},{
-(0xe9c+123-0xec2),(0x232+1191-0x5ff)},{(0xd3c+2253-0x15a8),(0x1298+655-0x1446)},
-{(0xc6+3667-0xeb4),8364},{(0xb48+2112-0x131f),(0xa01+4265-0x19bd)},{
-(0x594+5463-0x1a7c),(0xc74+6503-0x24e8)},{(0x3fc+7757-0x21d4),(0x4b4+972-0x786)}
-,};const unsigned short Ucs2_To_Gsm7_SPANISH_Table_UCS[][(0x1655+2283-0x1f3e)]={
-{(0x25fb+209-0x26bc),(0x40f+3714-0xefd)},{(0xb1+4622-0x12ad),
-(0x123b+5977-0x25ee)},{(0x1d2d+1960-0x24c2),(0x1420+1155-0x1510)},{
-(0x1109+654-0x1383),(0xb23+1150-0xc06)},{(0x82f+3659-0x1665),
-(0x13d2+1704-0x16d1)},{(0x687+681-0x91a),(0xada+6001-0x1eab)},{
-(0x1c98+351-0x1de0),(0x2204+550-0x2082)},{(0xb42+1245-0x1007),
-(0x208d+606-0x1f48)},{(0xe0d+2653-0x1851),(0x183f+1280-0x19a7)},{
-(0x15a5+3068-0x2187),(0xf16+5893-0x227d)},};const unsigned char 
+const_header;char g_zUfiSms_DigAscMap[(0x1c28+1409-0x2199)]={
+((char)(0x1d17+160-0x1d87)),((char)(0x936+5231-0x1d74)),
+((char)(0xbc3+4731-0x1e0c)),((char)(0x51c+8052-0x245d)),
+((char)(0xe97+6283-0x26ee)),((char)(0x1f93+1482-0x2528)),
+((char)(0x15c0+2376-0x1ed2)),((char)(0x904+688-0xb7d)),
+((char)(0x1406+2448-0x1d5e)),((char)(0x1c47+1720-0x22c6)),
+((char)(0x3c8+1964-0xb33)),((char)(0x1265+660-0x14b7)),
+((char)(0x4c2+1330-0x9b1)),((char)(0x18f5+2775-0x2388)),
+((char)(0xdc9+5990-0x24ea)),((char)(0xdd2+627-0xfff))};extern SMS_PARAM 
+g_zUfiSms_SendingSms;extern UINT16 g_zUfiSms_IsLanguageShift;extern int 
+g_zUfiSms_Language;static int SerializeNumbers_sms(const char*pSrc,char*pDst,int
+ nSrcLength);const unsigned short g_zUfiSms_AsciiToGsmdefaultTable[]={
+((char)(0xbd1+5182-0x1fef)),((char)(0xc75+3929-0x1bae)),
+((char)(0x149+8369-0x21da)),((char)(0xc93+4017-0x1c24)),
+((char)(0xa98+3349-0x178d)),((char)(0x6b2+5751-0x1d09)),
+((char)(0x1880+1677-0x1eed)),((char)(0x4dd+1534-0xabb)),
+((char)(0x19ba+1169-0x1e2b)),((char)(0x1c1f+221-0x1cdc)),
+((char)(0x1a7f+1231-0x1f2e)),((char)(0x4df+6307-0x1d62)),
+((char)(0x87b+4265-0x1904)),((char)(0x3e3+7083-0x1f6e)),
+((char)(0x938+3303-0x15ff)),((char)(0xd6d+2421-0x16c2)),
+((char)(0xbcb+6809-0x2644)),((char)(0x1a17+742-0x1cdd)),
+((char)(0x8e9+5577-0x1e92)),((char)(0x1583+4161-0x25a4)),
+((char)(0x2508+81-0x2539)),((char)(0x809+7217-0x241a)),
+((char)(0x1fe0+1785-0x26b9)),((char)(0xb9+6082-0x185b)),
+((char)(0xad7+4545-0x1c78)),((char)(0x6f6+6305-0x1f77)),
+((char)(0xea9+2260-0x175d)),((char)(0x1cf+6709-0x1be4)),
+((char)(0x1227+3110-0x1e2d)),((char)(0x1a0d+1455-0x1f9c)),
+((char)(0x85f+1144-0xcb7)),((char)(0x26b+4498-0x13dd)),
+((char)(0x1877+767-0x1b56)),((char)(0x9aa+156-0xa25)),(0x13bd+2172-0x1c17),
+((char)(0xa8c+4523-0x1c14)),(0x1388+1222-0x184c),((char)(0x177c+2935-0x22ce)),
+((char)(0x22dd+39-0x22de)),(0x6e9+7034-0x223c),((char)(0x37a+7620-0x2116)),
+((char)(0x1c38+1591-0x2246)),((char)(0x1e15+961-0x21ac)),
+((char)(0x511+1239-0x9bd)),((char)(0x3b0+13-0x391)),((char)(0xa1c+7141-0x25d4)),
+((char)(0x1e6+1894-0x91e)),((char)(0x910+2020-0x10c5)),
+((char)(0xff9+3018-0x1b93)),((char)(0x138b+2465-0x1cfb)),
+((char)(0x1945+3265-0x25d4)),((char)(0x269+6056-0x19de)),
+((char)(0x619+646-0x86b)),((char)(0xd79+3755-0x1bef)),
+((char)(0x1253+1184-0x16bd)),((char)(0x57b+4090-0x153e)),
+((char)(0x421+3446-0x115f)),((char)(0x52f+4579-0x16d9)),
+((char)(0xdda+1013-0x1195)),((char)(0x551+787-0x829)),
+((char)(0x1905+1323-0x1df4)),((char)(0x2fc+6980-0x1e03)),
+((char)(0x1b61+2632-0x256b)),((char)(0x13e0+2973-0x1f3e)),(0x245+2018-0xa27),
+((char)(0x6d9+774-0x99e)),((char)(0x1bc4+2337-0x24a3)),
+((char)(0x1a6b+2958-0x25b6)),((char)(0x7cf+2781-0x1268)),
+((char)(0x17cb+1781-0x1e7b)),((char)(0x3a1+5432-0x1893)),
+((char)(0x244+3361-0xf1e)),((char)(0x1701+2954-0x2243)),
+((char)(0x611+2469-0xf6d)),((char)(0xf89+5-0xf44)),((char)(0x3dc+1954-0xb33)),
+((char)(0x23b+762-0x4e9)),((char)(0xb5a+1626-0x1167)),
+((char)(0x1c56+1659-0x2283)),((char)(0xc25+5386-0x20e0)),((char)(0xd57+1-0xd08))
+,((char)(0x543+7171-0x20f5)),((char)(0x4d4+4587-0x166d)),
+((char)(0x1029+571-0x1211)),((char)(0xfa8+2270-0x1832)),
+((char)(0x4c3+936-0x816)),((char)(0x274+7069-0x1dbb)),
+((char)(0x849+4037-0x17b7)),((char)(0xaff+218-0xb81)),
+((char)(0x593+8224-0x255a)),((char)(0xed4+508-0x1076)),(0x20e1+8205-0x25b2),
+(0x1d4f+6307-0x1ac3),6974,(0x21b5+6859-0x216c),(0xe3a+2570-0x1833),
+((char)(0x435+6262-0x1c8b)),((char)(0xe49+1766-0x14ce)),
+((char)(0x2020+1437-0x255b)),((char)(0x5d8+3688-0x13dd)),
+((char)(0x16b+8884-0x23bb)),((char)(0x100a+1436-0x1541)),
+((char)(0xc90+5755-0x22a5)),((char)(0x1864+179-0x18b0)),
+((char)(0x4dc+8010-0x23be)),((char)(0x1e8+9541-0x26c4)),
+((char)(0x15e1+1619-0x1bca)),((char)(0x1804+114-0x180b)),
+((char)(0x797+654-0x9b9)),((char)(0x200+7121-0x1d64)),
+((char)(0x129+7641-0x1e94)),((char)(0x8db+293-0x991)),((char)(0x299+1166-0x6b7))
+,((char)(0xae3+1473-0x1033)),((char)(0x23f8+404-0x251a)),
+((char)(0x2e0+1260-0x759)),((char)(0x1528+3862-0x23ca)),
+((char)(0x2f1+4043-0x1247)),((char)(0x118b+499-0x1308)),
+((char)(0xa60+4374-0x1aff)),((char)(0xc30+574-0xdf6)),
+((char)(0x1614+2497-0x1f5c)),((char)(0x84+6193-0x183b)),6952,6976,6953,
+(0x1e0c+6691-0x1cf2),((char)(0x2a2+6354-0x1b54)),((char)(0x1d68+2234-0x2602)),
+((char)(0x1c43+2394-0x257d)),((char)(0x42f+3450-0x1189)),
+((char)(0x1c07+2033-0x23d8)),((char)(0x1101+4883-0x23f4)),
+((char)(0x1c36+1249-0x20f7)),((char)(0x171+1630-0x7af)),
+((char)(0x1acb+3117-0x26d8)),((char)(0x792+5205-0x1bc7)),
+((char)(0x1888+2865-0x2399)),((char)(0xcc7+4286-0x1d65)),
+((char)(0xc06+6772-0x265a)),((char)(0xf8f+3809-0x1e50)),
+((char)(0x1274+1356-0x17a0)),((char)(0x261+7103-0x1e00)),
+((char)(0x4c4+828-0x7e0)),((char)(0x85c+5612-0x1e28)),
+((char)(0x1bef+2278-0x24b5)),((char)(0x1426+3994-0x23a0)),
+((char)(0x255+884-0x5a9)),((char)(0xde3+3799-0x1c9a)),
+((char)(0x20c+5603-0x17cf)),((char)(0xb35+3720-0x199d)),
+((char)(0x933+3572-0x1707)),((char)(0x1c32+84-0x1c66)),
+((char)(0xaf2+5723-0x212d)),((char)(0x12a0+3309-0x1f6d)),
+((char)(0x1359+3772-0x21f5)),((char)(0x11ca+4562-0x237c)),
+((char)(0x2260+798-0x255e)),((char)(0x5db+6995-0x210e)),
+((char)(0x11e2+699-0x147d)),((char)(0xc35+2164-0x1489)),(0xc61+6328-0x24d9),
+((char)(0xd17+2559-0x16f6)),(0x2215+1065-0x263d),(0x1e6c+637-0x20c5),
+(0xb38+5404-0x2051),((char)(0x6e7+4792-0x197f)),(0x7f6+5290-0x1c41),
+((char)(0x110+8671-0x22cf)),((char)(0x41c+1897-0xb65)),
+((char)(0x5db+6999-0x2112)),((char)(0x1b68+803-0x1e6b)),
+((char)(0x1074+78-0x10a2)),((char)(0xfd9+950-0x136f)),
+((char)(0x2ad+8003-0x21d0)),((char)(0x86d+4194-0x18af)),
+((char)(0x42a+932-0x7ae)),((char)(0x4f6+6726-0x1f1c)),
+((char)(0xe22+1624-0x145a)),((char)(0x89a+3048-0x1462)),
+((char)(0xb3f+1434-0x10b9)),((char)(0x14f4+1902-0x1c42)),
+((char)(0x12ec+2126-0x1b1a)),((char)(0xd56+1005-0x1123)),(0x496+8357-0x2530),
+((char)(0x258+4470-0x13ae)),((char)(0x3c5+5807-0x1a54)),
+((char)(0x629+2998-0x11bf)),((char)(0x303+2625-0xd24)),
+((char)(0xddd+2214-0x1663)),((char)(0xe42+2320-0x1732)),(0x18dd+2171-0x20f8),
+((char)(0x320+5101-0x16ed)),((char)(0x7aa+3432-0x14f2)),
+((char)(0x10c1+1271-0x1598)),((char)(0x159+1519-0x728)),(0xc49+2957-0x177b),
+(0x77c+3340-0x147a),(0x3bf+4862-0x16a1),(0x1273+3741-0x2107),
+((char)(0x76c+5174-0x1b82)),(0xda3+900-0x1108),((char)(0xb4b+1519-0x111a)),
+((char)(0x7ed+640-0xa4d)),((char)(0x9bf+1408-0xf1f)),
+((char)(0x1751+1506-0x1d13)),((char)(0xf0a+1158-0x1370)),
+((char)(0x18d6+3413-0x260b)),((char)(0x299+3157-0xece)),(0x74b+3714-0x1570),
+((char)(0x15b+466-0x30d)),((char)(0x1431+3721-0x229a)),
+((char)(0x2429+707-0x26cc)),((char)(0x106+4943-0x1435)),(0xfc6+5305-0x2423),
+((char)(0xf2c+4602-0x2106)),((char)(0x1e36+304-0x1f46)),
+((char)(0x1626+1405-0x1b83)),((char)(0x55a+8189-0x2537)),
+((char)(0x7e9+7669-0x25be)),(0x1199+4716-0x23a7),((char)(0x157+4366-0x1245)),
+((char)(0xb90+2473-0x1519)),(0x1730+2874-0x224c),(0xed9+5525-0x23ef),
+((char)(0x108f+5265-0x2500)),((char)(0xcfc+614-0xf42)),
+((char)(0xf34+2314-0x181e)),(0x16d+4949-0x1447),(0x753+6968-0x227c),
+(0xc4b+1655-0x12a5),((char)(0xde6+82-0xe18)),(0x2c+9652-0x25dc),
+(0x8ab+1714-0xf58),((char)(0x1d05+2493-0x26a2)),((char)(0x1ceb+2221-0x2578)),
+(0x501+541-0x717),((char)(0x21e0+39-0x21e7)),((char)(0x10db+1418-0x1645)),
+((char)(0x9da+3271-0x1681)),((char)(0x79b+4378-0x1895)),(0x1129+3174-0x1d12),
+(0xb0+2176-0x928),((char)(0x169+1642-0x7b3)),((char)(0x25c4+289-0x26c5)),
+((char)(0x43c+5695-0x1a5b)),(0xb49+6310-0x2373),((char)(0x106a+3268-0x1d0e)),
+(0x786+7377-0x244b),(0x1652+2977-0x21ed),((char)(0x3a8+5043-0x173b)),
+((char)(0xbe0+2986-0x176a)),(0xa2f+851-0xd04),((char)(0xbe0+6676-0x25d4)),
+((char)(0xaf+5440-0x15cf)),((char)(0x2051+1561-0x264a)),};const unsigned short 
+zte_sms_GSM7_SPANISH_To_UCS2_Table_Ex[][(0x1537+33-0x1556)]={{
+(0x21d+7010-0x1d76),(0x1214+252-0x1229)},{(0xc1b+4321-0x1cf2),
+(0xb5f+4563-0x1d26)},{(0xf1d+2848-0x1a30),(0x1ed+3621-0x1005)},{
+(0x1263+1247-0x172e),(0x188b+428-0x19d9)},{(0x11b0+2475-0x1b33),
+(0xb76+2885-0x1640)},{(0x381+5398-0x186e),(0x709+2201-0xf25)},{
+(0x19c5+1863-0x20dd),(0x2134+1212-0x2594)},{(0xd33+5140-0x210b),
+(0x13ca+4437-0x24c4)},{(0x5ad+6596-0x1f34),(0x7db+3845-0x1662)},{
+(0x159f+1585-0x1b92),(0x351+6033-0x1a85)},{(0x1199+1503-0x1738),
+(0x175b+1124-0x1b43)},{(0x1429+1121-0x1849),(0xa3f+7247-0x25cd)},{
+(0xbed+2775-0x167b),(0x89d+2237-0x108d)},{(0x1cab+1765-0x2341),
+(0x152+5696-0x16bf)},{(0xb71+4941-0x1e69),(0x273+7083-0x1d44)},{
+(0x16b3+2744-0x210a),(0x3a6+7955-0x21d8)},{(0xee1+4760-0x2114),8364},{
+(0x10e8+65-0x10c0),(0xbf5+5435-0x2043)},{(0x12f9+3722-0x2114),
+(0x692+7038-0x211d)},{(0x11a6+2256-0x1a01),(0x94a+3298-0x1532)},};const unsigned
+ short Ucs2_To_Gsm7_SPANISH_Table_UCS[][(0x2323+164-0x23c5)]={{
+(0x7a3+4787-0x1a46),(0x1449+3745-0x1f56)},{(0x2f8+5475-0x1849),
+(0x16f0+830-0x1688)},{(0xbc6+5754-0x222d),(0x157b+1765-0x18cd)},{
+(0x867+2775-0x132a),(0x16d5+4500-0x24ce)},{(0x1d20+28-0x1d27),
+(0x1362+3968-0x1f39)},{(0xca7+799-0xfb0),(0x1483+2149-0x1948)},{
+(0xcb6+3348-0x19b3),(0x1196+5119-0x21ed)},{(0x11b3+2345-0x1ac4),
+(0x126b+5486-0x2436)},{(0x8e8+6250-0x2139),(0xe21+6175-0x22a8)},{
+(0x4ef+6845-0x1f92),(0x14a2+2724-0x1ba8)},};const unsigned char 
 Ucs2_To_Gsm7_SPANISH_Table_ASC[]={NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
-NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,(0x2c7+8496-0x23ed),NON_GSM,NON_GSM,
-(0x80f+4869-0x1b07),NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
+NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,(0x1360+1344-0x1896),NON_GSM,NON_GSM,
+(0xef+9685-0x26b7),NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
 NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
-NON_GSM,(0x101a+3679-0x1e59),(0x97+9452-0x2562),(0x20c+5145-0x1603),
-(0xd39+3537-0x1ae7),(0x2357+898-0x26d7),(0xe73+4049-0x1e1f),(0x1fe2+228-0x20a0),
-(0x1366+1171-0x17d2),(0x188d+2080-0x2085),(0x3cf+8993-0x26c7),
-(0x1a0+6020-0x18fa),(0x681+1303-0xb6d),(0x11eb+2325-0x1ad4),(0x7a3+1691-0xe11),
-(0xf9a+4738-0x21ee),(0xeaa+3903-0x1dba),(0xbe1+6870-0x2687),(0x3cd+2634-0xde6),
-(0xfa+9091-0x244b),(0x372+2983-0xee6),(0x217+3899-0x111e),(0x6a2+747-0x958),
-(0xad9+5018-0x1e3d),(0xca3+388-0xdf0),(0xee8+1283-0x13b3),(0x1bb9+2689-0x2601),
-(0x1480+3600-0x2256),(0x1eb8+325-0x1fc2),(0x4d8+6163-0x1caf),(0x1acb+356-0x1bf2)
-,(0x2324+772-0x25ea),(0x592+684-0x7ff),(0x152d+3677-0x238a),(0x90c+710-0xb91),
-(0x3a9+5276-0x1803),(0x157d+1062-0x1960),(0x1116+1727-0x1791),
-(0x76a+2701-0x11b2),(0x9fb+1903-0x1124),(0x1c76+1581-0x225c),(0x19d6+907-0x1d19)
-,(0xa60+668-0xcb3),(0x120+3691-0xf41),(0x336+4438-0x1441),(0x1717+867-0x1a2e),
-(0x164f+3635-0x2435),(0x416+7286-0x203e),(0x192+617-0x3ac),(0xe00+356-0xf14),
-(0xd44+1026-0x10f5),(0x18a4+1849-0x1f8b),(0x1b32+2963-0x2672),
-(0x7f5+7650-0x2583),(0x6e3+7758-0x24dc),(0x228b+1049-0x264e),(0x528+2058-0xcdb),
-(0x2261+281-0x2322),(0x741+1042-0xafa),(0xdb2+2039-0x154f),NON_GSM,NON_GSM,
-NON_GSM,NON_GSM,(0xcf8+189-0xda4),NON_GSM,(0x11a8+1212-0x1603),
-(0x1a69+204-0x1ad3),(0x8db+7094-0x242e),(0x100f+314-0x10e5),(0x14d7+34-0x1494),
-(0x6b3+4901-0x1972),(0xe1b+6086-0x257a),(0x84c+5029-0x1b89),(0x386+314-0x457),
-(0x135b+608-0x1551),(0x7c1+5922-0x1e78),(0x10cd+4397-0x218e),(0x3b9+2230-0xc02),
-(0x164c+3014-0x21a4),(0x1222+3976-0x213b),(0x128a+3609-0x2033),
-(0x6d3+6189-0x1e8f),(0x6bc+1982-0xe08),(0x136+3211-0xd4e),(0xd3+8360-0x2107),
-(0x1676+3449-0x237a),(0xcf0+5261-0x2107),(0x17af+836-0x1a7c),(0xb30+5070-0x1e86)
-,(0x1288+2978-0x1db1),(0x1d72+442-0x1eb2),NON_GSM,NON_GSM,NON_GSM,NON_GSM,
+NON_GSM,(0xe6d+5898-0x2557),(0x2e2+8546-0x2423),(0x352+7155-0x1f23),
+(0x75c+348-0x895),(0x1143+2529-0x1b22),(0x14a2+3583-0x227c),(0xcb+3098-0xcbf),
+(0x11b+3392-0xe34),(0xefc+4235-0x1f5f),(0xa2c+4928-0x1d43),(0xb08+3972-0x1a62),
+(0x116a+4202-0x21a9),(0x1157+3594-0x1f35),(0xa8+7171-0x1c7e),(0xfa8+3605-0x1d8f)
+,(0x68+7119-0x1c08),(0x6d+5323-0x1508),(0xa83+3621-0x1877),(0xb85+6196-0x2387),
+(0xc7+2924-0xc00),(0x749+1898-0xe7f),(0x35d+5757-0x19a5),(0x4e0+3053-0x1097),
+(0xe48+5632-0x2411),(0xb10+6872-0x25b0),(0x1ea6+122-0x1ee7),(0x159d+1586-0x1b95)
+,(0x426+7009-0x1f4c),(0x79d+2067-0xf74),(0x901+86-0x91a),(0x45b+159-0x4bc),
+(0x1f2+5747-0x1826),(0x14d8+2747-0x1f93),(0x324+580-0x527),(0x867+5977-0x1f7e),
+(0x765+2389-0x1077),(0x150+1696-0x7ac),(0xbe8+6898-0x2695),(0x57b+5518-0x1ac3),
+(0xea+7652-0x1e87),(0x981+1590-0xf6f),(0x20d+4979-0x1537),(0x1d0+7457-0x1ea7),
+(0xdaa+1586-0x1391),(0x945+7453-0x2616),(0xae5+5061-0x1e5d),(0x2ff+8704-0x24b1),
+(0x165b+2986-0x21b6),(0x47c+7794-0x229e),(0x5ff+3158-0x1204),(0x3c3+1556-0x985),
+(0x726+3087-0x12e2),(0x104d+2738-0x1aab),(0x1880+3036-0x2407),
+(0x10db+1624-0x16dd),(0x1901+2086-0x20d0),(0x706+523-0x8b9),(0xe1+402-0x21a),
+(0x1c08+137-0x1c37),NON_GSM,NON_GSM,NON_GSM,NON_GSM,(0x1b59+929-0x1ee9),NON_GSM,
+(0x682+3037-0x11fe),(0x11c8+1905-0x18d7),(0x11bb+1426-0x16ea),
+(0x857+7300-0x2477),(0x1666+1710-0x1caf),(0x54c+7176-0x20ee),(0xee1+4988-0x21f6)
+,(0x52d+7174-0x20cb),(0x404+245-0x490),(0x87f+7055-0x23a4),(0xfb7+452-0x1110),
+(0x8b7+5030-0x1bf1),(0xad8+377-0xbe4),(0xdbf+5285-0x21f6),(0xf38+3774-0x1d87),
+(0xca2+3212-0x18be),(0x1737+3701-0x253b),(0xdf+3786-0xf37),(0x1652+692-0x1893),
+(0xb44+5487-0x203f),(0xa08+2556-0x138f),(0x1492+3595-0x2227),(0xf9b+5903-0x2633)
+,(0x25f7+174-0x262d),(0x14f1+1873-0x1bc9),(0xe9c+293-0xf47),NON_GSM,NON_GSM,
 NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
 NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
 NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
-NON_GSM,NON_GSM,NON_GSM,(0x838+5878-0x1f13),(0xaac+2864-0x159c),NON_GSM,
-(0x153f+4357-0x2643),(0x1298+4880-0x2584),(0xa85+7258-0x26dc),NON_GSM,
-(0x650+5621-0x1be6),NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
+NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,(0x12e1+664-0x155e),(0x1b7a+2793-0x2623)
+,NON_GSM,(0x96a+1663-0xfe8),(0x768+7617-0x2505),(0x862+2382-0x11ad),NON_GSM,
+(0x177d+3892-0x2652),NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
 NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
-NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,(0xc65+6008-0x237d),NON_GSM,
-NON_GSM,NON_GSM,NON_GSM,(0x79a+5576-0x1d07),(0x57f+4487-0x16f8),
-(0x453+3973-0x13bc),(0xc12+6750-0x2667),NON_GSM,(0xf18+4446-0x2057),NON_GSM,
-NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,(0x1434+1101-0x1824),NON_GSM,
-NON_GSM,NON_GSM,NON_GSM,(0xdc0+1254-0x124a),NON_GSM,(0x1729+3932-0x267a),NON_GSM
-,NON_GSM,NON_GSM,(0x35b+1334-0x833),NON_GSM,NON_GSM,(0x1b7+873-0x502),
-(0x41c+4144-0x13cd),NON_GSM,NON_GSM,NON_GSM,(0x18b3+1749-0x1f0d),
-(0xc77+853-0xfbd),(0xda1+4266-0x1e2e),NON_GSM,(0x8aa+265-0x9af),
-(0x5bc+7420-0x22b3),NON_GSM,NON_GSM,(0x621+66-0x65c),NON_GSM,NON_GSM,NON_GSM,
-NON_GSM,(0x154a+638-0x174b),(0x5c7+1933-0xd4c),NON_GSM,NON_GSM,NON_GSM,
-(0xf46+2954-0x1a54),NON_GSM,(0x7ba+6196-0x1fe2),(0x1b53+1885-0x22aa),NON_GSM,
-NON_GSM,(0x608+4094-0x1588),NON_GSM,NON_GSM,NON_GSM};const unsigned short 
-zte_sms_GSM7_PORTUGUESE_To_UCS2_Table_Ex[][(0x749+5164-0x1b73)]={{(0xa1+97-0xfd)
-,(0xd61+6420-0x258b)},{(0x184c+2066-0x2055),(0x617+692-0x7e4)},{
-(0xce1+1783-0x13ce),(0x1535+1563-0x1b44)},{(0x1df+4146-0x1206),
-(0xc36+5429-0x2097)},{(0x13f2+4806-0x26ac),(0x15f6+473-0x16db)},{
-(0x12d8+4865-0x25cc),(0xd4a+3185-0x19ae)},{(0x1b8c+1183-0x201d),
-(0x1087+1279-0x14c5)},{(0xfc9+2296-0x18b2),(0xbc8+2322-0x13f9)},{
-(0xe96+2338-0x17a6),(0x950+561-0x7db)},{(0x181b+2305-0x2109),(0x1efc+919-0x1f00)
-},{(0xa53+1355-0xf8a),(0x11f8+4500-0x232e)},{(0x1034+5860-0x2703),
-(0xdb5+1699-0x10af)},{(0x1390+4379-0x2495),(0x10ed+4539-0x1f08)},{
-(0x911+1067-0xd25),(0x619+647-0x4f8)},{(0xcf+1785-0x7b0),(0x77f+4169-0x1425)},{
-(0x7d8+1597-0xdfc),(0x1430+3435-0x1e03)},{(0xb21+56-0xb3a),(0x11d9+2086-0x1935)}
-,{(0x2b4+5362-0x177e),(0x4d4+1984-0xc19)},{(0x538+8689-0x2700),
-(0x65b+7472-0x230e)},{(0x38a+3867-0x1276),(0xd2+5281-0x1517)},{(0xd75+429-0xee6)
-,(0x10d0+1727-0x1734)},{(0x692+2352-0xf85),(0x197+4736-0x1399)},{
-(0xffa+4559-0x218b),(0x662+5701-0x1c4a)},{(0x2073+744-0x231b),
-(0x63b+6306-0x1e61)},{(0xdf5+5000-0x213c),(0x773+867-0xa16)},{
-(0x19d9+3396-0x26d4),(0x4cf+8385-0x24c3)},{(0x23a0+925-0x26ee),(0xd19+307-0xd79)
-},{(0xdb+4923-0x13c1),(0x13c3+281-0x1402)},{(0x19e4+3261-0x2646),
-(0x1046+3603-0x1d96)},{(0x1c4b+2134-0x2445),(0x6df+7713-0x242b)},{
-(0xffc+4446-0x20f9),(0x116c+2728-0x1b52)},{(0x1ecf+558-0x2098),8364},{
-(0x7c8+2924-0x12cb),(0x934+3295-0x1526)},{(0x9e1+2434-0x12f4),
-(0xbcc+6254-0x2347)},{(0x1a12+59-0x19d8),(0xbf0+2341-0x141b)},{
-(0x4dc+6295-0x1cf8),(0x87c+3083-0x13a4)},{(0xc1+4001-0xfe6),(0x2c5+2804-0xcc4)},
-{(0x815+857-0xaef),(0x1004+96-0xf82)},};const unsigned short 
-Ucs2_To_Gsm7_PORTUGUESE_Table_UCS[][(0x1e41+450-0x2001)]={{(0x1e7c+591-0x20bb),
-(0xc4d+4302-0x1987)},{(0x127+1526-0x708),8929},{(0x183d+3369-0x254e),8364},{
-(0x284+6031-0x19ae),8364},};const unsigned char 
+NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,(0xa44+724-0xcb8),NON_GSM,
+NON_GSM,NON_GSM,NON_GSM,(0x939+2612-0x1312),(0x1623+1009-0x1a06),
+(0x386+3528-0x1132),(0xb5d+3453-0x18d1),NON_GSM,(0x84c+5278-0x1ccb),NON_GSM,
+NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,(0xedc+41-0xea8),NON_GSM,NON_GSM
+,NON_GSM,NON_GSM,(0x1b26+2540-0x24b6),NON_GSM,(0x192c+774-0x1c27),NON_GSM,
+NON_GSM,NON_GSM,(0xb41+1489-0x10b4),NON_GSM,NON_GSM,(0xfda+953-0x1375),
+(0x1fbc+1570-0x255f),NON_GSM,NON_GSM,NON_GSM,(0x378+3392-0x103d),
+(0xd26+3394-0x1a59),(0x7a6+6788-0x220d),NON_GSM,(0x100d+4958-0x2367),
+(0xbd8+1926-0x1359),NON_GSM,NON_GSM,(0x11b8+513-0x13b2),NON_GSM,NON_GSM,NON_GSM,
+NON_GSM,(0xae4+6045-0x2204),(0x266+6607-0x1c2d),NON_GSM,NON_GSM,NON_GSM,
+(0x1287+4958-0x2569),NON_GSM,(0x347+7529-0x20a4),(0x222f+454-0x23ef),NON_GSM,
+NON_GSM,(0xc20+6817-0x2643),NON_GSM,NON_GSM,NON_GSM};const unsigned short 
+zte_sms_GSM7_PORTUGUESE_To_UCS2_Table_Ex[][(0x1deb+1149-0x2266)]={{
+(0x1df+8154-0x21b4),(0x3d9+8741-0x2514)},{(0x1100+4948-0x244b),
+(0xd85+6440-0x25c6)},{(0x5d8+5020-0x196a),(0xef8+5985-0x264d)},{
+(0x977+5139-0x1d7f),(0x1b58+672-0x1d24)},{(0x17a3+911-0x1b26),
+(0x6c2+6588-0x1f8a)},{(0x10e1+2099-0x1907),(0x1f5+4439-0x133f)},{
+(0x2159+742-0x2431),(0x736+1405-0xbf2)},{(0xf12+1351-0x144a),
+(0x1a18+3277-0x2604)},{(0x25f4+111-0x2651),(0x1c4f+527-0x1ab8)},{
+(0x700+4711-0x1954),(0xe42+7127-0x2686)},{(0xfc9+1930-0x173f),(0x1c1+1716-0x817)
+},{(0x1f2b+1069-0x2343),(0xce7+7258-0x2598)},{(0x1443+777-0x1736),
+(0x4bc+4521-0x12c5)},{(0x653+5828-0x1d00),(0xf11+3821-0x1a56)},{
+(0x4ed+4230-0x155b),(0x4bf+516-0x320)},{(0xd0b+5614-0x22e0),(0x10b5+1947-0x14b8)
+},{(0x5cd+1709-0xc5b),(0xf2a+3562-0x1c4a)},{(0x15f2+1078-0x1a00),
+(0xd7d+2569-0x170b)},{(0x476+8675-0x2630),(0xfa5+44-0xf54)},{
+(0x1ad8+1026-0x1eab),(0x169c+188-0x16fc)},{(0x1cc9+1197-0x213a),
+(0x217+3353-0xed5)},{(0x880+3931-0x179e),(0xeb9+5097-0x2224)},{
+(0x36f+8831-0x25b0),(0x12ba+2660-0x1cc1)},{(0xb02+4224-0x1b42),
+(0x7d2+7764-0x25aa)},{(0x1a87+924-0x1de2),(0x16f6+626-0x18a8)},{
+(0x705+4114-0x16ce),(0x136c+4052-0x2273)},{(0xc74+3893-0x1b5a),
+(0xf99+2632-0x190e)},{(0x1c46+1162-0x207b),(0x3bc+7691-0x20ed)},{
+(0xeb+6398-0x198e),(0x17af+2817-0x21ed)},{(0x8fd+3863-0x17b8),
+(0x17e6+553-0x193a)},{(0x1da5+346-0x1e9e),(0x241+7881-0x2048)},{
+(0x765+6048-0x1ea0),8364},{(0x7e7+3389-0x14bb),(0x237+6160-0x195a)},{
+(0x1b3d+2520-0x24a6),(0xdf2+3945-0x1c68)},{(0x101f+5738-0x2614),
+(0xcc8+5134-0x1fdc)},{(0x1162+4762-0x2381),(0x77d+7880-0x2562)},{
+(0xd5+2834-0xb6b),(0x1a59+3405-0x26b1)},{(0x1f3d+152-0x1f56),(0x1be8+427-0x1cb1)
+},};const unsigned short Ucs2_To_Gsm7_PORTUGUESE_Table_UCS[][(0x457+3979-0x13e0)
+]={{(0x702+7747-0x2535),(0x934+7940-0x24a4)},{(0x1089+1927-0x17fb),8929},{
+(0xbf3+5036-0x1f87),8364},{(0x379+3150-0xf62),8364},};const unsigned char 
 Ucs2_To_Gsm7_PORTUGUESE_Table_ASC[]={NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
-NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,(0x12e8+563-0x1511),NON_GSM,NON_GSM,
-(0xeb2+2840-0x19bd),NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
+NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,(0x1859+2479-0x21fe),NON_GSM,NON_GSM,
+(0x588+327-0x6c2),NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
 NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
-NON_GSM,(0x1624+2096-0x1e34),(0x11b5+2923-0x1cff),(0x179c+325-0x18bf),
-(0x583+7273-0x21c9),(0xa32+2584-0x1448),(0x2b3+6272-0x1b0e),(0x235+3041-0xdf0),
-(0x612+4772-0x188f),(0xbda+4504-0x1d4a),(0xb2d+3753-0x19ad),(0xa58+5917-0x214b),
-(0x3a+4009-0xfb8),(0x402+828-0x712),(0x1bf3+101-0x1c2b),(0x720+6525-0x206f),
-(0xcea+516-0xebf),(0x2136+1133-0x2573),(0x16f7+3591-0x24cd),(0x4db+8234-0x24d3),
-(0x349+7357-0x1fd3),(0xe81+880-0x11bd),(0x144f+2874-0x1f54),(0x137a+3882-0x226e)
-,(0x1521+2975-0x2089),(0x5b1+7474-0x22ab),(0x701+4624-0x18d8),(0x4e5+2065-0xcbc)
-,(0xb30+2334-0x1413),(0x18c8+1539-0x1e8f),(0xf67+2895-0x1a79),
-(0x789+6674-0x215d),(0x37d+1548-0x94a),(0x893+3085-0x14a0),(0x9b3+6744-0x23ca),
-(0x22ad+979-0x263e),(0x1f41+188-0x1fba),(0x577+3088-0x1143),(0x649+821-0x939),
-(0xd46+2619-0x173b),(0x1493+4175-0x249b),(0x74d+7988-0x2639),(0x853+7844-0x26ae)
-,(0xe79+3173-0x1a94),(0x18d+4442-0x129c),(0x13dc+2289-0x1c81),
-(0x624+4362-0x16e1),(0x712+5614-0x1cb2),(0x923+2474-0x127e),(0x1cd8+143-0x1d17),
-(0x2d4+7972-0x21a7),(0x2305+572-0x24ef),(0x5a0+3303-0x1234),(0xcb7+377-0xddc),
-(0xc49+4115-0x1c07),(0x5ab+8161-0x2536),(0x6e5+3975-0x1615),(0x7ec+6849-0x2255),
-(0x13e1+2884-0x1ecc),(0x1726+3843-0x25cf),NON_GSM,(0x1599+678-0x1828),NON_GSM,
-(0x1005+3724-0x1e7b),(0x841+6405-0x2135),(0x1217+5078-0x2570),
-(0x1a06+3394-0x26e7),(0xdcd+3016-0x1933),(0x60f+6234-0x1e06),(0x733+3717-0x1554)
-,(0x5e4+4337-0x1670),(0x11b1+1639-0x17b2),(0x9d8+3590-0x1777),
-(0x2263+604-0x2457),(0xadd+4677-0x1cb9),(0x14cb+1685-0x1af6),
-(0x1719+2548-0x20a2),(0x66d+3001-0x11ba),(0x700+3356-0x13af),
-(0x15fa+1550-0x1b9a),(0x1004+566-0x11cb),(0xc73+2819-0x1706),(0x5e4+3070-0x1171)
-,(0x775+279-0x81a),(0x13e5+2931-0x1ee5),(0x1019+2914-0x1b07),(0x2b6+4279-0x12f8)
-,(0x144f+938-0x1783),(0x3d6+3374-0x108d),(0x1cea+2024-0x245a),
-(0x29d+6192-0x1a54),(0x5e3+6492-0x1ec5),NON_GSM,(0x68d+5351-0x1b5a),NON_GSM,
-(0x14bb+1831-0x1b82),NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
+NON_GSM,(0x824+5152-0x1c24),(0x418+5629-0x19f4),(0x65f+2085-0xe62),
+(0x92+1582-0x69d),(0x9d8+4145-0x1a07),(0x1ba7+704-0x1e42),(0x80a+7894-0x26ba),
+(0x1a74+1532-0x2049),(0x158b+3863-0x247a),(0x6b5+4780-0x1938),
+(0x1090+562-0x1298),(0x79+8171-0x2039),(0x181+8909-0x2422),(0x453+915-0x7b9),
+(0x3ea+628-0x630),(0x27c+6460-0x1b89),(0x1d31+1115-0x215c),(0x1aa+1136-0x5e9),
+(0x15e2+4216-0x2628),(0x1db3+2130-0x25d2),(0x1a68+440-0x1bec),
+(0x672+3227-0x12d8),(0x6b1+6021-0x1e00),(0x3f5+5614-0x19ac),(0x1836+2157-0x206b)
+,(0x27c+3871-0x1162),(0x20c9+5-0x2094),(0x2383+592-0x2598),(0xdf6+3116-0x19e6),
+(0x1b4+5192-0x15bf),(0xb0+456-0x23a),(0x3aa+8581-0x24f0),(0x93a+1904-0x10aa),
+(0xf80+2412-0x18ab),(0x17e0+3899-0x26d9),(0x1995+3118-0x2580),
+(0x502+5380-0x19c2),(0x1d0f+1363-0x221d),(0x8c4+4777-0x1b27),(0x183+2849-0xc5d),
+(0x1434+1795-0x1aef),(0x369+9080-0x2698),(0x1e2b+1770-0x24cb),(0x327+905-0x665),
+(0xb45+628-0xd6d),(0x1e98+594-0x209d),(0x2323+718-0x25a3),(0x142f+161-0x1481),
+(0x72c+3293-0x13b9),(0x1a4d+2529-0x23dd),(0x6a8+5564-0x1c12),
+(0x1b70+2430-0x249b),(0xd12+4867-0x1fc1),(0xa45+868-0xd54),(0x192f+1370-0x1e33),
+(0x170+2388-0xa6d),(0x213+1191-0x662),(0x23d6+120-0x23f5),(0x1d3a+869-0x2045),
+NON_GSM,(0xeac+5761-0x2516),NON_GSM,(0xf83+988-0x1349),(0x979+5711-0x1fb7),
+(0x22ec+926-0x260d),(0xa5a+3333-0x16fe),(0xa4+9434-0x251c),(0x3a0+2274-0xc1f),
+(0xb89+2995-0x16d8),(0x1950+2239-0x21aa),(0x7d7+477-0x94e),(0xc9f+1624-0x1290),
+(0x2200+735-0x2477),(0x1109+2492-0x1a5c),(0xcc6+4538-0x1e16),(0x18c+8340-0x21b5)
+,(0xb77+5878-0x2201),(0xac5+28-0xa74),(0x1436+4643-0x25eb),(0x1148+3449-0x1e52),
+(0x512+334-0x5f0),(0x95c+6736-0x233b),(0x124+1951-0x851),(0x767+6640-0x20e4),
+(0xef4+625-0x10f1),(0x1ae8+1433-0x200c),(0x2bb+4314-0x131f),(0x104a+5113-0x23cc)
+,(0x11f7+4732-0x23fb),(0x21d+6361-0x1a7d),(0x239+3020-0xd8b),NON_GSM,
+(0x1fb5+1046-0x23b1),NON_GSM,(0x844+840-0xb2c),NON_GSM,NON_GSM,NON_GSM,NON_GSM,
 NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
 NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
-NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,(0xe27+1869-0x1559),NON_GSM_P,
-NON_GSM,(0x675+3269-0x1339),NON_GSM_P,(0x714+6163-0x1f24),NON_GSM,
-(0x1590+2646-0x1f87),NON_GSM,NON_GSM,(0x1282+2700-0x1cfc),NON_GSM,NON_GSM,
-NON_GSM,NON_GSM,NON_GSM,(0xe4b+5959-0x256e),NON_GSM,NON_GSM,NON_GSM,NON_GSM,
+NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
+(0x1249+1309-0x174b),NON_GSM_P,NON_GSM,(0x1493+2573-0x1e9f),NON_GSM_P,
+(0x1032+5045-0x23e4),NON_GSM,(0xcdc+5066-0x2047),NON_GSM,NON_GSM,
+(0x1d74+611-0x1fc5),NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,(0x1b7+7991-0x20ca),
 NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
-NON_GSM,(0x1a2f+2696-0x24a3),(0x1240+3089-0x1e43),(0x1e3f+138-0x1ead),
-(0x126+3459-0xe4e),NON_GSM_P,NON_GSM_P,NON_GSM_P,(0x232c+335-0x2468),NON_GSM,
-(0x7f5+2593-0x11f7),(0x881+4199-0x18ca),NON_GSM,NON_GSM,(0x1662+1668-0x1ca6),
-NON_GSM,NON_GSM,NON_GSM,NON_GSM_P,NON_GSM,(0x1397+3188-0x1ff2),
-(0x13a+7317-0x1dc4),(0x459+5514-0x1987),NON_GSM_P,NON_GSM,NON_GSM_P,NON_GSM,
-(0x3f4+1499-0x972),NON_GSM,(0x474+7103-0x1fd5),NON_GSM,NON_GSM,NON_GSM_P,
-(0x147f+575-0x163f),(0x824+2275-0x10f8),(0x563+1557-0xb5b),(0x1f0+3429-0xeda),
-NON_GSM_P,NON_GSM_P,NON_GSM_P,(0xda3+2051-0x159d),NON_GSM_P,(0xdaa+3251-0x1a58),
-(0x18d5+665-0x1b6a),NON_GSM,NON_GSM_P,(0x244+2209-0xade),NON_GSM,NON_GSM,NON_GSM
-,NON_GSM_P,NON_GSM_P,(0x1058+721-0x1321),(0xe92+3204-0x1b0a),(0x5cb+572-0x78b),
-NON_GSM_P,NON_GSM,NON_GSM_P,NON_GSM_P,(0x1cfc+1730-0x23b8),NON_GSM,
-(0x15d8+620-0x17c6),NON_GSM,NON_GSM,NON_GSM};const unsigned short 
-zte_sms_GSMDefault_To_UCS2_Table_Ex[][(0x7e8+1840-0xf16)]={{(0x54d+3362-0x1265),
-(0x89+7350-0x1d33)},{(0x79f+745-0xa74),(0x1e6d+2136-0x2667)},{
-(0xeac+2770-0x1956),(0xe6c+4514-0x1f93)},{(0xd4b+1153-0x11a3),
-(0xba4+3879-0x1a4e)},{(0xf0+4954-0x141b),(0x705+82-0x6fb)},{(0x1072+4353-0x2137)
-,(0x1f1+8578-0x2318)},{(0x4d9+4122-0x14b6),(0x737+6761-0x2122)},{
-(0x444+526-0x614),(0x14f7+3467-0x2225)},{(0xc96+258-0xd58),(0x1357+2776-0x1db3)}
-,{(0x719+6797-0x2141),(0x26ff+7590-0x23f9)},};const unsigned short 
-UCS2_To_GSMDefault_Table_UCS2[][(0x747+7690-0x254f)]={{(0x372+1533-0x95f),
-(0xaed+6801-0x21ea)},{(0x215+2888-0xd4b),(0x1739+4653-0x25c0)},{
-(0x980+3252-0x1621),(0x9cf+2465-0xfdd)},{(0xcc8+4482-0x1e36),(0x573+4601-0x13d1)
-},{(0x27d+634-0x4e2),(0xdd5+4611-0x1c2f)},{(0x1f5b+1958-0x26eb),
-(0x226a+359-0x2031)},{(0x16e1+3664-0x251a),(0xb44+7507-0x24ef)},{
-(0xf65+3913-0x1e96),(0xf9c+5454-0x2147)},{(0x435+4117-0x1431),
-(0x2380+783-0x22f7)},{(0xf87+2654-0x19cb),(0x25eb+666-0x24e7)},};const unsigned 
-char UCS2_To_GSMDefault_Table_ASC[]={NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
-NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,(0xbd+3225-0xd4c),NON_GSM,NON_GSM,
-(0x199b+1200-0x1e3e),NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
+NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,(0x25b+6540-0x1bd3),(0xceb+1700-0x1381),
+(0x9a8+200-0xa54),(0x19f9+1928-0x2126),NON_GSM_P,NON_GSM_P,NON_GSM_P,
+(0xbd5+2278-0x14a8),NON_GSM,(0x1169+4769-0x23eb),(0x600+4801-0x18a3),NON_GSM,
+NON_GSM,(0xd08+2310-0x15ce),NON_GSM,NON_GSM,NON_GSM,NON_GSM_P,NON_GSM,
+(0x3f2+6115-0x1bbc),(0x1e1b+1909-0x2585),(0xe0a+1509-0x1393),NON_GSM_P,NON_GSM,
+NON_GSM_P,NON_GSM,(0x1188+5048-0x24e3),NON_GSM,(0x14e9+4001-0x242c),NON_GSM,
+NON_GSM,NON_GSM_P,(0x42f+8510-0x24ee),(0x163a+3087-0x223a),(0x32+2826-0xb1f),
+(0xb6+1154-0x4bd),NON_GSM_P,NON_GSM_P,NON_GSM_P,(0x9d3+1070-0xdf8),NON_GSM_P,
+(0x811+382-0x98a),(0x872+7404-0x255a),NON_GSM,NON_GSM_P,(0x9fc+2312-0x12fd),
+NON_GSM,NON_GSM,NON_GSM,NON_GSM_P,NON_GSM_P,(0x148c+2279-0x1d6b),
+(0x1f5f+727-0x222a),(0xd18+5083-0x2077),NON_GSM_P,NON_GSM,NON_GSM_P,NON_GSM_P,
+(0x586+8397-0x264d),NON_GSM,(0x1685+2538-0x1ff1),NON_GSM,NON_GSM,NON_GSM};const 
+unsigned short zte_sms_GSMDefault_To_UCS2_Table_Ex[][(0x1ba2+1400-0x2118)]={{
+(0x1b58+2866-0x2680),(0xbc3+13-0xbc4)},{(0x1ea+1936-0x966),(0x1e5+2237-0xa44)},{
+(0x1985+3408-0x26ad),(0x6a1+2461-0xfc3)},{(0x1b4b+1864-0x226a),
+(0x48d+3170-0x1072)},{(0x14a+7732-0x1f4f),(0x565+3159-0x1160)},{
+(0xfb1+506-0x116f),(0x452+5004-0x1783)},{(0x2b7+7674-0x2074),(0x102+5272-0x151c)
+},{(0xd16+3607-0x1aef),(0xceb+6073-0x2447)},{(0xdc2+76-0xdce),
+(0x1c74+1140-0x206c)},{(0x5b3+2668-0xfba),8364},};const unsigned short 
+UCS2_To_GSMDefault_Table_UCS2[][(0xf5b+4764-0x21f5)]={{(0xbdd+6290-0x245f),
+(0xdf3+3210-0x16e9)},{(0xd53+1019-0x113c),(0x772+1352-0x914)},{
+(0x4a6+2545-0xe84),(0x8e4+3813-0x1436)},{(0x57b+1203-0xa1a),(0x3b6+1191-0x4c2)},
+{(0x17+3102-0xc20),(0x101a+5246-0x20ef)},{(0x19d3+3202-0x263f),
+(0x48f+8041-0x2058)},{(0x418+4349-0x14fe),(0x1688+4852-0x25d4)},{
+(0x16a+6850-0x1c14),(0x1c24+407-0x1a18)},{(0xa7b+3984-0x19f2),
+(0xca6+7274-0x2578)},{(0x1903+2220-0x2195),(0xfc5+6689-0x2648)},};const unsigned
+ char UCS2_To_GSMDefault_Table_ASC[]={NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
+NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,(0xc70+2595-0x1689),NON_GSM,NON_GSM,
+(0xe16+4458-0x1f73),NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
 NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
-NON_GSM,(0x2249+336-0x2379),(0x1579+937-0x1901),(0x14ed+2492-0x1e87),
-(0xe39+3706-0x1c90),(0xe90+2887-0x19d5),(0x1dca+2220-0x2651),(0x367+6055-0x1ae8)
-,(0x345+5084-0x16fa),(0xe06+2203-0x1679),(0xf29+4120-0x1f18),(0xeb2+466-0x105a),
-(0x2004+766-0x22d7),(0x5c+1715-0x6e3),(0x188c+2217-0x2108),(0xa5c+4373-0x1b43),
-(0x87d+5779-0x1ee1),(0xae3+3796-0x1987),(0x19a7+1177-0x1e0f),
-(0x16d2+3838-0x259e),(0x14b+1265-0x609),(0x6e0+2149-0xf11),(0xa43+971-0xdd9),
-(0x5a5+5210-0x19c9),(0x3d6+2631-0xde6),(0x777+266-0x849),(0x25c+9118-0x25c1),
-(0xe40+3848-0x1d0e),(0x4ba+2026-0xc69),(0x172b+2799-0x21de),(0x388+776-0x653),
-(0xebd+6240-0x26df),(0x38b+5478-0x18b2),(0x1599+989-0x1976),(0x113d+5546-0x26a6)
-,(0x342+3383-0x1037),(0x728+853-0xa3a),(0xd2d+5403-0x2204),(0xe35+1674-0x147a),
-(0x12b9+5111-0x266a),(0x159b+4185-0x25ad),(0x12e1+4666-0x24d3),
-(0x159+5689-0x1749),(0x4dc+7642-0x226c),(0xb9c+3811-0x1a34),(0xfc1+3580-0x1d71),
-(0x14d+2585-0xb19),(0x4e4+181-0x54b),(0x814+311-0x8fc),(0x7cf+3512-0x1537),
-(0x131+842-0x42a),(0x758+5965-0x1e53),(0xf59+1354-0x1450),(0x1b73+3009-0x26e0),
-(0x13a1+3469-0x20d9),(0x1338+2603-0x1d0d),(0x1c67+403-0x1da3),(0xea2+747-0x1135)
-,(0x69+5007-0x139f),(0x168a+3977-0x25b9),NON_GSM,NON_GSM,NON_GSM,NON_GSM,
-(0x393+4731-0x15fd),NON_GSM,(0xc78+6771-0x268a),(0x9b6+4690-0x1ba6),
-(0x3f2+8958-0x268d),(0x34a+439-0x49d),(0x52b+2430-0xe44),(0x15d2+2474-0x1f16),
-(0x43b+2585-0xded),(0x17e4+3286-0x2452),(0x10f+1568-0x6c6),(0x1c35+711-0x1e92),
-(0x1110+2435-0x1a28),(0x835+3010-0x138b),(0xd3f+1151-0x1151),(0x1870+204-0x18ce)
-,(0x1571+1964-0x1cae),(0x4e8+1884-0xbd4),(0x681+5720-0x1c68),(0xd01+5362-0x2181)
-,(0x1fe8+1933-0x2702),(0x27a+5630-0x1804),(0x500+7782-0x22f1),
-(0x5eb+4201-0x15de),(0x13f4+2341-0x1ca2),(0x66a+642-0x874),(0x1aa+4104-0x1139),
-(0xe66+6318-0x269a),NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
+NON_GSM,(0x16ff+1149-0x1b5c),(0x1172+1076-0x1585),(0x17f7+3732-0x2669),
+(0x668+3798-0x151b),(0x9b+5781-0x172e),(0x1bec+2437-0x254c),(0x4d2+7137-0x208d),
+(0x17cd+3174-0x240c),(0x13a3+4814-0x2649),(0x10c2+3737-0x1f32),
+(0xcbc+2757-0x1757),(0x1e66+1287-0x2342),(0x9c6+6178-0x21bc),(0x1200+678-0x1479)
+,(0xc7a+1308-0x1168),(0x82+8263-0x209a),(0x996+1979-0x1121),(0xb23+3321-0x17eb),
+(0x9e0+178-0xa60),(0x1506+358-0x1639),(0x12f8+2274-0x1ba6),(0x3a3+769-0x66f),
+(0xfb3+2179-0x1800),(0xfcc+1342-0x14d3),(0x1a0+4489-0x12f1),(0x1cda+2575-0x26b0)
+,(0x35b+9022-0x265f),(0x576+4526-0x16e9),(0xf27+1718-0x15a1),(0x4d2+2828-0xfa1),
+(0x5ed+3456-0x132f),(0x6a1+5323-0x1b2d),(0x1a91+1904-0x2201),(0x457+2775-0xeed),
+(0xa6a+4510-0x1bc6),(0x7d5+2693-0x1217),(0x1513+2602-0x1ef9),(0xb27+2570-0x14ec)
+,(0x743+651-0x988),(0x1624+1419-0x1b68),(0x1b9f+945-0x1f08),(0x5aa+6754-0x1fc3),
+(0x8ef+6912-0x23a5),(0xe9f+303-0xf83),(0xb44+5048-0x1eb0),(0x11dd+2516-0x1b64),
+(0x1560+669-0x17af),(0x1cf8+1307-0x21c4),(0x16cb+829-0x19b8),(0xbc2+6060-0x231d)
+,(0x14bb+224-0x1549),(0x1e88+926-0x21d3),(0x6a0+4024-0x1604),(0x1bb9+249-0x1c5d)
+,(0x12a+4344-0x11cc),(0xc26+2528-0x15af),(0xc47+2716-0x168b),(0x48d+3214-0x10c2)
+,(0x611+5896-0x1cbf),NON_GSM,NON_GSM,NON_GSM,NON_GSM,(0xa15+278-0xb1a),NON_GSM,
+(0xb8c+202-0xbf5),(0xe51+3927-0x1d46),(0x2cb+3983-0x11f7),(0x260+5361-0x16ed),
+(0x1093+5064-0x23f6),(0x597+6121-0x1d1a),(0x2f2+804-0x5af),(0x1dda+685-0x201f),
+(0x1917+2914-0x2410),(0x8c+1406-0x5a0),(0x1575+3096-0x2122),(0x1791+262-0x182b),
+(0x5d0+5055-0x1922),(0x6b1+7874-0x2505),(0x1560+699-0x17ac),(0xaad+2025-0x1226),
+(0x282+7928-0x2109),(0xa3+4911-0x1360),(0x1dd+981-0x53f),(0x1871+3320-0x24f5),
+(0x653+2051-0xde1),(0x153+1157-0x562),(0x60b+5916-0x1cb0),(0x2469+478-0x25cf),
+(0x1090+351-0x1176),(0xc47+4023-0x1b84),NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
 NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
 NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
 NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
-(0x6d9+6137-0x1eb7),(0x8e2+3449-0x161b),NON_GSM,(0xa37+5296-0x1ee6),
-(0x659+1217-0xaf6),(0x66f+5136-0x1a7c),NON_GSM,(0xb0d+4390-0x1bd4),NON_GSM,
+NON_GSM,NON_GSM,(0x1809+1487-0x1dbd),(0x10a0+5472-0x25c0),NON_GSM,
+(0x363+5083-0x173d),(0x984+522-0xb6a),(0x1e1d+697-0x20d3),NON_GSM,
+(0x3f5+8825-0x260f),NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
 NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
-NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
-NON_GSM,NON_GSM,(0x3df+1656-0x9f7),NON_GSM,NON_GSM,NON_GSM,NON_GSM,
-(0x4aa+5037-0x17fc),(0x838+4362-0x1934),(0xd23+3747-0x1baa),(0x820+3511-0x15ce),
-NON_GSM,(0x1e51+2193-0x26c3),NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,
-NON_GSM,(0xd08+1325-0x11d8),NON_GSM,NON_GSM,NON_GSM,NON_GSM,(0xe36+4956-0x2136),
-NON_GSM,(0x1154+4484-0x22cd),NON_GSM,NON_GSM,NON_GSM,(0x1b4d+1926-0x2275),
-NON_GSM,NON_GSM,(0xddb+294-0xee3),(0x3bc+91-0x398),NON_GSM,NON_GSM,NON_GSM,
-(0x1033+3325-0x1cb5),(0x533+5620-0x1b18),(0x13fa+445-0x159a),NON_GSM,
-(0x15fc+2833-0x2109),(0x1389+4975-0x26f3),NON_GSM,NON_GSM,(0x1209+4618-0x240c),
-NON_GSM,NON_GSM,NON_GSM,NON_GSM,(0x208a+1238-0x24e3),(0x440+161-0x4d9),NON_GSM,
-NON_GSM,NON_GSM,(0xf8b+1767-0x15f6),NON_GSM,(0x27+1213-0x4d8),(0x34+8678-0x2214)
-,NON_GSM,NON_GSM,(0x3ca+1690-0x9e6),NON_GSM,NON_GSM,NON_GSM};const unsigned 
-short zte_sms_GSM7_PORTUGUESE_To_UCS2_Table[]={(0x97c+6391-0x2233),
-(0x9b0+3626-0x1737),(0x96d+426-0xaf3),(0x919+5327-0x1d43),(0x5a0+6128-0x1ca6),
-(0xaa7+3503-0x176d),(0x15f+6304-0x1905),(0x349+1110-0x6b2),(0x13a6+4044-0x227f),
-(0x12d4+3096-0x1e05),(0x2154+1141-0x25bf),(0x2588+282-0x25ce),(0xedb+263-0xeee),
-(0x589+2852-0x10a0),(0xef6+1544-0x143d),(0x22d7+729-0x24cf),(0x6fa+8152-0x233e),
-(0x82c+2741-0x1282),(0x263+2846-0xcd7),(0x132d+1098-0x16b0),(0x1317+4833-0x2538)
-,8734,(0x549+3003-0x10a6),(0xa0a+3856-0x18be),8364,(0x11fb+919-0x14bf),
-(0xc0+686-0x2f2),(0x176+3167-0xd35),(0x300+4697-0x1497),(0x1985+2273-0x2184),
-(0x1ab4+2560-0x23ea),(0x4c2+1792-0xaf9),(0x5c2+5631-0x1ba1),(0x1b20+957-0x1ebc),
-(0x771+5502-0x1ccd),(0x3ad+5894-0x1a90),(0xdeb+4265-0x1de4),(0x14cb+4177-0x24f7)
-,(0x1b7+1174-0x627),(0x4a+6148-0x1827),(0x152d+2831-0x2014),(0x84a+4074-0x180b),
-(0x4f3+1470-0xa87),(0x203+8299-0x2243),(0x11c9+3005-0x1d5a),(0xc9c+748-0xf5b),
-(0x65+3194-0xcb1),(0x116d+3134-0x1d7c),(0xa7f+4339-0x1b42),(0xb17+3504-0x1896),
-(0xb25+3808-0x19d3),(0x1cb2+2228-0x2533),(0x2068+708-0x22f8),(0x3e7+7589-0x2157)
-,(0x947+4008-0x18b9),(0x7a4+2450-0x10ff),(0xb12+4189-0x1b37),
-(0x108c+1727-0x1712),(0x27b+8660-0x2415),(0x559+4335-0x160d),
-(0x11a0+1174-0x15fa),(0x12bc+1787-0x197a),(0x991+1670-0xfd9),(0x1c3+6768-0x1bf4)
-,(0x1a01+2471-0x22db),(0x592+7259-0x21ac),(0x6f5+3935-0x1612),
-(0x8ab+6165-0x207d),(0x1265+4865-0x2522),(0x1dda+1967-0x2544),
-(0xac9+5016-0x1e1b),(0x1a0a+680-0x1c6b),(0x3bf+8359-0x241e),(0x746+5957-0x1e42),
-(0x11fd+2416-0x1b23),(0x72b+4074-0x16ca),(0x536+6927-0x1ff9),(0x509+3896-0x13f4)
-,(0xdea+1034-0x11a6),(0x1b50+2429-0x247e),(0x13f1+595-0x15f4),
-(0xafc+2200-0x1343),(0x1c68+2561-0x2617),(0x16f4+1918-0x1e1f),
-(0x1a66+1932-0x219e),(0x534+1912-0xc57),(0xcf6+231-0xd87),(0x1210+2923-0x1d24),
-(0x1480+366-0x1596),(0xed8+2821-0x1984),(0x183c+1809-0x1ef3),(0x259+4904-0x14be)
-,(0xc34+3004-0x171b),(0x609+5786-0x1bc9),(0x89b+6985-0x2308),(0x1ffd+714-0x2220)
-,(0x7dc+4467-0x18d1),(0x583+7879-0x23e9),(0x1930+1673-0x1f57),
-(0x23c+4593-0x13ca),(0x233+5219-0x1632),(0x14af+3560-0x2232),(0x1dc2+286-0x1e7a)
-,(0x10cb+5547-0x260f),(0x978+4863-0x1c0f),(0xe28+1977-0x1578),
-(0x81c+4664-0x19ea),(0x283+7369-0x1ee1),(0x521+2368-0xdf5),(0xa35+903-0xd4f),
-(0x18d5+820-0x1b9b),(0x1f7+768-0x488),(0xdc0+3757-0x1bfd),(0x137b+4110-0x2318),
-(0x104b+1909-0x174e),(0x473+3712-0x1280),(0xf86+2339-0x1835),(0x43f+7540-0x213e)
-,(0x174f+3806-0x25b7),(0xb93+4634-0x1d36),(0x2db+8888-0x251b),
-(0xbc3+4248-0x1be2),(0xbad+3413-0x1888),(0x168a+4363-0x26b2),
-(0x106c+4576-0x2157),(0x204+6737-0x1bf5),(0x646+5380-0x1a4e),
-(0x12a1+4283-0x227c)};const unsigned short zte_sms_GSMDefault_To_UCS2_Table[]={
-(0x702+1978-0xe7c),(0x7ef+2519-0x1123),(0x106f+3857-0x1f5c),(0x1470+1072-0x17fb)
-,(0x1e5+4649-0x1326),(0x5ed+1410-0xa86),(0x2170+1594-0x26b1),(0x1cf4+519-0x1e0f)
-,(0x1a7b+73-0x19d2),(0x1179+1576-0x16da),(0x13af+1967-0x1b54),(0x256+297-0x2a7),
-(0x60d+5804-0x1bc1),(0xaab+4806-0x1d64),(0x758+1244-0xb6f),(0x1177+500-0x1286),
-(0x19cf+409-0x17d4),(0x1603+3468-0x2330),(0x1adb+2057-0x1f3e),
-(0x4a0+4197-0x1172),(0xb86+7879-0x26b2),(0x1acd+925-0x1ac1),(0x67a+9253-0x26ff),
-(0x1a60+753-0x19a9),(0x9bd+6780-0x2096),(0x16a7+3593-0x2118),(0x635+504-0x48f),
-(0xcb9+2370-0x155b),(0x15c9+3365-0x2228),(0x226+9355-0x25cb),(0x791+1596-0xcee),
-(0xc90+3402-0x1911),(0x16a4+2843-0x219f),(0x217d+884-0x24d0),(0xb8b+6372-0x244d)
-,(0x126f+1196-0x16f8),(0x623+4199-0x15e6),(0x546+1339-0xa5c),(0xadd+348-0xc13),
-(0x5df+2688-0x1038),(0x1201+2006-0x19af),(0xdd1+1382-0x130e),(0x613+920-0x981),
-(0x63b+2052-0xe14),(0x172f+2768-0x21d3),(0x1ecb+550-0x20c4),(0x21c+1990-0x9b4),
-(0xa8b+6152-0x2264),(0x884+2194-0x10e6),(0x11e6+4912-0x24e5),(0xcc+5848-0x1772),
-(0x6bf+5824-0x1d4c),(0xbb4+854-0xed6),(0x1bac+16-0x1b87),(0x62b+3843-0x14f8),
-(0x224+1882-0x947),(0x1862+3545-0x2603),(0x1f4+512-0x3bb),(0x4b9+7113-0x2048),
-(0xc0c+4042-0x1b9b),(0x226+5623-0x17e1),(0x1418+4126-0x23f9),
-(0x11f3+4733-0x2432),(0x1655+2394-0x1f70),(0x1d8d+772-0x1ff0),
-(0xa3c+3689-0x1864),(0x2610+15-0x25dd),(0xba8+2590-0x1583),(0x2123+196-0x21a3),
-(0xf4+8751-0x22de),(0x418+3479-0x1169),(0x123c+73-0x123e),(0x124c+992-0x15e4),
-(0x2397+13-0x235b),(0x135b+4177-0x2362),(0x363+1681-0x9a9),(0xce2+5285-0x213b),
-(0x4e5+8687-0x2687),(0x56b+8086-0x24b3),(0xf91+5518-0x24d0),(0x11e0+1276-0x168c)
-,(0x1b0a+470-0x1c8f),(0x987+2460-0x12d1),(0xa80+11-0xa38),(0xc95+1093-0x1086),
-(0x395+6546-0x1cd2),(0x7d7+7179-0x238c),(0x393+5856-0x1a1c),(0x43b+8700-0x25df),
-(0x1af2+1983-0x2258),(0x11bc+3036-0x1d3e),(0x771+4661-0x18e2),
-(0x254+5515-0x1709),(0xcd4+6836-0x26b7),(0xf74+3658-0x1ce2),(0x5b6+4896-0x182f),
-(0x56c+5257-0x1936),(0x1c2c+2271-0x24aa),(0x1a4+6490-0x1a9c),(0x1a6d+984-0x1de2)
-,(0xe81+3082-0x1a27),(0x1470+185-0x14c4),(0x92f+7680-0x26c9),(0x1532+543-0x16ea)
-,(0x13eb+3925-0x22d8),(0x1a2f+801-0x1ce7),(0x1517+4534-0x2663),(0x8f1+41-0x8af),
-(0x573+5712-0x1b57),(0x7d5+857-0xac1),(0x433+1180-0x861),(0x260+7519-0x1f50),
-(0x434+1671-0xa4b),(0x72f+5530-0x1c58),(0x3f7+3003-0xf40),(0x918+5044-0x1c59),
-(0x14bd+3362-0x216b),(0x327+604-0x50e),(0xac0+1758-0x1128),(0x1426+1169-0x1840),
-(0x7a9+5647-0x1d40),(0x156c+4218-0x256d),(0x125b+2747-0x1c9c),
-(0x1b40+1546-0x2066),(0x11ba+4021-0x2079),(0x24f5+30-0x2422),(0x1187+221-0x1168)
-,(0xd49+3868-0x1b85)};int Bytes2String(const unsigned char*pSrc,char*pDst,int 
-nSrcLength){const char tab[]="0123456789ABCDEF";int i=(0xc0b+2649-0x1664);if(
-pSrc==NULL||pDst==NULL||nSrcLength<(0x1cc+8606-0x236a)){return-
-(0x36b+9005-0x2697);}for(i=(0x2251+787-0x2564);i<nSrcLength;i++){*pDst++=tab[*
-pSrc>>(0x2132+1331-0x2661)];*pDst++=tab[*pSrc&(0x167f+1894-0x1dd6)];pSrc++;}*
-pDst='\0';return nSrcLength*(0x943+5998-0x20af);}int String2Bytes(const char*
-pSrc,unsigned char*pDst,int nSrcLength){int i=(0x1db6+778-0x20c0);if(pSrc==NULL
-||pDst==NULL||nSrcLength<(0xd22+4423-0x1e69)){return-(0x298+5153-0x16b8);}for(i=
-(0x1b60+2586-0x257a);i<nSrcLength;i+=(0x8a8+4349-0x19a3)){if(*pSrc>=
-((char)(0x12b0+3221-0x1f15))&&*pSrc<=((char)(0x8d8+6071-0x2056))){*pDst=(*pSrc-
-((char)(0x3e6+8351-0x2455)))<<(0x3bc+6892-0x1ea4);}else{*pDst=((toupper(*pSrc)-
-((char)(0x1ccf+419-0x1e31)))+(0xe4b+664-0x10d9))<<(0x9cd+3291-0x16a4);}pSrc++;if
-(*pSrc>=((char)(0x13cb+2537-0x1d84))&&*pSrc<=((char)(0xc77+4895-0x1f5d))){*pDst
-|=*pSrc-((char)(0x134+6477-0x1a51));}else{*pDst|=(toupper(*pSrc)-
-((char)(0x10a6+2165-0x18da)))+(0x70c+2355-0x1035);}pSrc++;pDst++;}return 
-nSrcLength/(0x312+2822-0xe16);}int EncodeUcs2(const char*pSrc,unsigned char*pDst
-,int nSrcLength){if(pSrc==NULL||pDst==NULL||nSrcLength<(0xcb9+4897-0x1fda)){
-return-(0x167a+2465-0x201a);}(void)String2Bytes(pSrc,pDst,(int)nSrcLength);
-return nSrcLength/(0x519+6806-0x1fad);}int Encode7bit(const char*pSrc,unsigned 
-char*pDst,int nSrcLength){int nSrc;int nDst;int nChar;unsigned char nLeft=
-(0x7e6+3225-0x147f);if(pSrc==NULL||pDst==NULL||nSrcLength<(0xb1c+5682-0x214e)){
-return-(0x42d+3468-0x11b8);}nSrc=(0x2156+968-0x251e);nDst=(0x73a+7982-0x2668);
-while(nSrc<nSrcLength){nChar=nSrc&(0xf02+92-0xf57);if(nChar==(0x59b+5369-0x1a94)
-){nLeft=*pSrc;if((g_zUfiSms_ConcatSms.total_msg>(0x1245+1973-0x19f9))&&(nSrc==(
-nSrcLength-(0x8d7+3971-0x1859)))){nDst++;}}else{*pDst=(*pSrc<<(
-(0x2e9+7203-0x1f04)-nChar))|nLeft;nLeft=*pSrc>>nChar;pDst++;nDst++;}pSrc++;nSrc
-++;}return nDst;}SINT32 zUfiSms_EncodePdu_DeliverReport(CHAR*pDst,UINT8 TP_FCS){
-SINT32 nLength=(0x415+2156-0xc81);SINT32 nDstLength=(0xab+550-0x2d1);UINT8 buf[
-(0x103b+2824-0x1a43)]={(0x20a9+142-0x2137)};if(NULL==pDst){return-
-(0x1764+754-0x1a55);}if(TP_FCS!=(0x13b+7030-0x1cb1)){buf[(0x63a+2871-0x1171)]=
-(0x1d1+1188-0x675);buf[(0x1bc8+1833-0x22f0)]=TP_FCS;buf[(0x84d+7166-0x2449)]=
-(0xcfb+5406-0x2219);nDstLength+=Bytes2String(buf,&pDst[nDstLength],
-(0x1b6b+410-0x1d02));}else{buf[(0x171a+3107-0x233d)]=(0x553+625-0x7c4);buf[
-(0x22c2+204-0x238d)]=(0xc3a+6475-0x2585);nDstLength+=Bytes2String(buf,&pDst[
-nDstLength],(0xb32+356-0xc94));}return nDstLength;}unsigned long 
-zUfiSms_ConvertAsciiToGsmDefault(const unsigned char*inputs,unsigned char*
-outputs,unsigned long len){unsigned long i=(0x4cc+4637-0x16e9);unsigned long j=
-(0x251+1880-0x9a9);unsigned long k=(0xb88+3381-0x18bd);if(NULL==inputs||NULL==
-outputs){printf(
+NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,(0xd79+6439-0x2640),NON_GSM,
+NON_GSM,NON_GSM,NON_GSM,(0x977+4923-0x1c57),(0x381+6603-0x1d3e),
+(0xa6+6010-0x1804),(0x9b2+7114-0x2573),NON_GSM,(0x1fc+3384-0xf15),NON_GSM,
+NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,NON_GSM,(0x712+1374-0xc13),NON_GSM,
+NON_GSM,NON_GSM,NON_GSM,(0x43b+3596-0x11eb),NON_GSM,(0xda1+2571-0x17a1),NON_GSM,
+NON_GSM,NON_GSM,(0x60+1858-0x744),NON_GSM,NON_GSM,(0xe4d+360-0xf97),
+(0x27a+7893-0x20d0),NON_GSM,NON_GSM,NON_GSM,(0x6e2+8167-0x264e),
+(0x651+243-0x735),(0x44f+5107-0x1825),NON_GSM,(0x19db+2365-0x2314),
+(0xcaa+3556-0x1a89),NON_GSM,NON_GSM,(0x697+552-0x8b8),NON_GSM,NON_GSM,NON_GSM,
+NON_GSM,(0x884+3181-0x1474),(0x9f0+6528-0x2368),NON_GSM,NON_GSM,NON_GSM,
+(0xb42+3226-0x1760),NON_GSM,(0x1f5+1284-0x6ed),(0x1dd1+963-0x218e),NON_GSM,
+NON_GSM,(0x1924+3111-0x24cd),NON_GSM,NON_GSM,NON_GSM};const unsigned short 
+zte_sms_GSM7_PORTUGUESE_To_UCS2_Table[]={(0x490+1141-0x8c5),(0x666+4447-0x1722),
+(0x840+1055-0xc3b),(0x15d3+3292-0x220a),(0x11c6+2599-0x1b03),
+(0x1007+5692-0x255a),(0x314+2802-0xd0c),(0x1da4+1775-0x23a6),
+(0x141d+3784-0x21f2),(0x440+6627-0x1d3c),(0x6e2+7057-0x2269),(0x6c7+1053-0xa10),
+(0x13ea+4518-0x249c),(0x1c52+2029-0x2432),(0xe77+6465-0x26f7),
+(0xf79+3150-0x1ae6),(0xa66+6005-0x1e47),(0x662+3163-0x125e),(0xb0a+7174-0x2666),
+(0x1e94+1642-0x2437),(0x1ead+1558-0x2403),(0x2225+1020-0x403),
+(0x2c3+4732-0x14e1),(0xba8+6789-0x25d1),(0x2187+1797-0x7e0),(0x89c+4251-0x1864),
+(0x4a5+8188-0x2425),(0x714+6021-0x1df9),(0x2ab+1430-0x77f),(0x94c+1297-0xd7b),
+(0xc59+247-0xc86),(0x21ad+386-0x2266),(0x238+3621-0x103d),(0x1141+3792-0x1ff0),
+(0x1bfd+780-0x1ee7),(0x180c+1974-0x1f9f),(0x939+5303-0x1d40),(0x2141+896-0x249c)
+,(0x636+7353-0x22c9),(0x1147+83-0x1173),(0xada+464-0xc82),(0x1526+2029-0x1cea),
+(0x1fe2+1238-0x248e),(0xfaf+4903-0x22ab),(0x1432+3014-0x1fcc),
+(0xe79+4354-0x1f4e),(0x491+7650-0x2245),(0x908+7546-0x2653),(0x1f94+1764-0x2648)
+,(0x11c+6912-0x1beb),(0x2b8+3079-0xe8d),(0x268+812-0x561),(0xbbd+3011-0x174c),
+(0x112a+2607-0x1b24),(0x14c+5400-0x162e),(0xcc7+4528-0x1e40),(0xd4a+3860-0x1c26)
+,(0xc56+5345-0x20fe),(0x11ab+1272-0x1669),(0xb7+8723-0x228f),
+(0x110d+1888-0x1831),(0x177d+3676-0x259c),(0x17f6+1371-0x1d13),
+(0x16d9+3921-0x25eb),(0x27d+8841-0x2439),(0x14ef+162-0x1550),(0x61d+2772-0x10af)
+,(0x11b0+2145-0x19ce),(0x1586+1669-0x1bc7),(0x169f+4101-0x265f),
+(0xe7+3878-0xfc7),(0x64d+5899-0x1d11),72,(0x2096+153-0x20e6),(0x1d8b+540-0x1f5d)
+,(0xb8c+5500-0x20bd),(0x7da+2342-0x10b4),(0x220+1560-0x7eb),(0x328+6443-0x1c05),
+(0x1dd1+1315-0x22a5),(0x1dc2+1071-0x21a1),(0x11d7+5205-0x25db),
+(0x1554+2575-0x1f11),(0x79f+4363-0x1857),(0xa32+6727-0x2425),(0x74+3354-0xd39),
+(0x107b+4213-0x209a),(0x15a8+2821-0x2056),(0x1a35+2014-0x21bb),
+(0x1ce1+943-0x2037),(0x34b+8959-0x25f0),(0x16e3+335-0x176f),(0xab0+4655-0x1c0a),
+(0x810+259-0x839),(0x8a0+455-0x98b),(0x56f+2189-0xd55),(0x12c4+270-0x1354),
+(0x10b7+3933-0x1fb3),(0x1a56+1007-0x1de3),(0x10fb+3632-0x1ec8),
+(0xe0a+2329-0x16bf),(0x6bc+5911-0x1d6e),(0x6c3+4582-0x1843),(0x1635+2189-0x1e5b)
+,(0xaf0+3402-0x17d2),(0xe52+1558-0x13ff),(0xf31+3167-0x1b26),(0x1f71+566-0x213c)
+,(0xbcc+6634-0x254a),(0x1dc0+1585-0x2384),(0xf2b+3880-0x1de5),
+(0x13c1+665-0x15eb),(0x1939+2198-0x215f),(0xa88+4820-0x1ceb),(0x6c2+3028-0x1224)
+,(0xf30+1097-0x1306),(0x622+2315-0xeb9),(0x500+3419-0x11e6),(0xa0f+6185-0x21c2),
+(0x15cb+4444-0x26b0),(0x142d+2572-0x1dc1),(0x1456+1636-0x1a41),
+(0x5c7+1489-0xb1e),(0x13d3+4259-0x2393),(0x15e3+857-0x1847),(0x78b+7526-0x2491),
+(0xbf5+5179-0x1f34),(0x343+599-0x4ba)};const unsigned short 
+zte_sms_GSMDefault_To_UCS2_Table[]={(0x36f+6024-0x1ab7),(0x64c+7831-0x2440),
+(0x10f6+5244-0x254e),(0xfa1+5509-0x2481),(0xb32+5402-0x1f64),(0x1688+419-0x1742)
+,(0xd06+6664-0x2615),(0xd47+6220-0x24a7),(0x946+2989-0x1401),(0x2374+850-0x25ff)
+,(0xa47+4421-0x1b82),(0xaaa+6653-0x23cf),(0x377+760-0x577),(0x582+2094-0xda3),
+(0x35d+3512-0x1050),(0xe52+2483-0x1720),(0x95f+2800-0x10bb),(0x1b94+888-0x1ead),
+(0x226f+703-0x2188),(0x768+4990-0x1753),(0x2404+152-0x2101),(0x15ff+2345-0x1b7f)
+,(0xbb5+1261-0xd02),(0x21f1+1085-0x2286),(0x1144+5695-0x23e0),
+(0x1191+1777-0x14ea),(0x10a6+1768-0x13f0),(0x1f4+1506-0x736),(0x759+2933-0x1208)
+,(0x653+6472-0x1eb5),(0x363+4943-0x15d3),(0x20a+3949-0x10ae),(0xbb5+2816-0x1695)
+,(0x1121+3670-0x1f56),(0x207+8808-0x244d),(0x462+3037-0x101c),
+(0x1ee4+1134-0x22ae),(0xa43+6196-0x2252),(0x5e0+2747-0x1075),
+(0x18dc+3371-0x25e0),(0xb6f+2688-0x15c7),(0x1516+35-0x1510),(0x58f+1995-0xd30),
+(0x1bba+1992-0x2357),(0x9a+3369-0xd97),(0x128b+2390-0x1bb4),(0x14f8+1653-0x1b3f)
+,(0x11dc+2792-0x1c95),(0xc37+4745-0x1e90),(0x1ba5+2751-0x2633),
+(0xadc+1505-0x108b),(0xab6+1062-0xea9),(0x49c+8618-0x2612),(0x14c7+3979-0x241d),
+(0x92+9151-0x241b),(0x1da4+1625-0x23c6),(0x150+8800-0x2378),(0x529+2790-0xfd6),
+(0x1307+4617-0x24d6),(0x23f+8695-0x23fb),(0x284+9205-0x263d),(0xb51+2494-0x14d2)
+,(0xfb0+531-0x1185),(0x230a+388-0x244f),(0x1ab3+1093-0x1e57),(0x2e2+6224-0x1af1)
+,(0x8ff+1199-0xd6c),(0x1c31+2681-0x2667),(0x16f+8017-0x207c),(0xaa0+3780-0x191f)
+,(0x16d+2224-0x9d7),(0x6f3+473-0x885),(0x2504+130-0x253e),(0x208b+928-0x23e2),
+(0x871+1680-0xeb7),(0x1609+3533-0x238b),(0xb2+3686-0xecc),(0x2b8+1492-0x83f),
+(0x197+6517-0x1abe),(0xc7b+6366-0x250a),(0x123c+2765-0x1cb9),(0x704+43-0x6de),
+(0x87+9341-0x24b2),(0x1266+341-0x1368),(0x131+8346-0x2177),(0x571+5493-0x1a91),
+(0xa2f+2296-0x12d1),(0x8e3+4361-0x1995),(0x1aa7+548-0x1c73),(0x184a+2816-0x22f1)
+,(0x1b31+2208-0x2377),(0x2a1+7327-0x1e7c),(0x182b+1302-0x1c6b),
+(0x798+4518-0x186d),(0x1bac+754-0x1dc2),(0x1195+5461-0x2643),(0x7fa+5979-0x1e96)
+,(0x1b42+1414-0x2067),(0x8d7+738-0xb57),(0x1377+1759-0x19f3),(0xec2+1643-0x14c9)
+,(0x10ff+4051-0x206d),(0x971+5483-0x1e76),(0xa7+7313-0x1cd1),
+(0x1488+2960-0x1fb0),(0xa70+320-0xb47),(0x1f1b+918-0x2247),(0xe0a+5680-0x23cf),
+(0xd9c+6413-0x263d),(0x24c3+23-0x246d),(0x35b+1704-0x995),(0xa67+1922-0x117a),
+(0x5c3+714-0x81d),(0x16eb+2581-0x208f),(0x18b0+264-0x1946),(0x11e0+2634-0x1bb7),
+(0x894+1835-0xf4b),(0x2164+1187-0x2592),(0x1d56+1838-0x240e),(0xa38+3597-0x17ce)
+,(0x16c4+4084-0x2640),(0xcef+4464-0x1de6),(0x6db+1565-0xc7e),(0x127+1699-0x6e6),
+(0x352+8763-0x2497),(0x6d0+6761-0x2048),(0x111+4440-0x116d),(0x8fd+5388-0x1d29)}
+;int Bytes2String(const unsigned char*pSrc,char*pDst,int nSrcLength){const char 
+tab[]="0123456789ABCDEF";int i=(0xc1+687-0x370);if(pSrc==NULL||pDst==NULL||
+nSrcLength<(0x158d+2819-0x2090)){return-(0x13d5+3716-0x2258);}for(i=
+(0x4+3627-0xe2f);i<nSrcLength;i++){*pDst++=tab[*pSrc>>(0x23db+81-0x2428)];*pDst
+++=tab[*pSrc&(0x342+2137-0xb8c)];pSrc++;}*pDst='\0';return nSrcLength*
+(0x1c43+1347-0x2184);}int String2Bytes(const char*pSrc,unsigned char*pDst,int 
+nSrcLength){int i=(0xbf6+3297-0x18d7);if(pSrc==NULL||pDst==NULL||nSrcLength<
+(0xfe2+3051-0x1bcd)){return-(0x132b+2320-0x1c3a);}for(i=(0x5f4+6394-0x1eee);i<
+nSrcLength;i+=(0x42c+5196-0x1876)){if(*pSrc>=((char)(0xa06+2178-0x1258))&&*pSrc
+<=((char)(0xb4a+3486-0x18af))){*pDst=(*pSrc-((char)(0x15f+7376-0x1dff)))<<
+(0x657+3347-0x1366);}else{*pDst=((toupper(*pSrc)-((char)(0x129+3442-0xe5a)))+
+(0x19b9+3376-0x26df))<<(0x112b+2768-0x1bf7);}pSrc++;if(*pSrc>=
+((char)(0x611+68-0x625))&&*pSrc<=((char)(0x535+2744-0xfb4))){*pDst|=*pSrc-
+((char)(0xb31+2560-0x1501));}else{*pDst|=(toupper(*pSrc)-
+((char)(0x548+149-0x59c)))+(0x609+2912-0x115f);}pSrc++;pDst++;}return nSrcLength
+/(0x13f+3130-0xd77);}int EncodeUcs2(const char*pSrc,unsigned char*pDst,int 
+nSrcLength){if(pSrc==NULL||pDst==NULL||nSrcLength<(0x15da+1399-0x1b51)){return-
+(0x1b6+6789-0x1c3a);}(void)String2Bytes(pSrc,pDst,(int)nSrcLength);return 
+nSrcLength/(0x535+7089-0x20e4);}int Encode7bit(const char*pSrc,unsigned char*
+pDst,int nSrcLength){int nSrc;int nDst;int nChar;unsigned char nLeft=
+(0x912+3700-0x1786);if(pSrc==NULL||pDst==NULL||nSrcLength<(0x450+7607-0x2207)){
+return-(0x15c8+4363-0x26d2);}nSrc=(0x63+6068-0x1817);nDst=(0x1ba+3167-0xe19);
+while(nSrc<nSrcLength){nChar=nSrc&(0x15dd+405-0x176b);if(nChar==
+(0xca5+5128-0x20ad)){nLeft=*pSrc;if((g_zUfiSms_ConcatSms.total_msg>
+(0x1238+3283-0x1f0a))&&(nSrc==(nSrcLength-(0xe8+1579-0x712)))){nDst++;}}else{*
+pDst=(*pSrc<<((0x1a45+542-0x1c5b)-nChar))|nLeft;nLeft=*pSrc>>nChar;pDst++;nDst++
+;}pSrc++;nSrc++;}return nDst;}SINT32 zUfiSms_EncodePdu_DeliverReport(CHAR*pDst,
+UINT8 TP_FCS){SINT32 nLength=(0xb04+5117-0x1f01);SINT32 nDstLength=
+(0x91c+4497-0x1aad);UINT8 buf[(0xcc2+3471-0x1951)]={(0xf81+782-0x128f)};if(NULL
+==pDst){return-(0x8b9+1541-0xebd);}if(TP_FCS!=(0x9ed+3807-0x18cc)){buf[
+(0xb15+6030-0x22a3)]=(0x89+3356-0xda5);buf[(0xbac+6183-0x23d2)]=TP_FCS;buf[
+(0x88b+5-0x88e)]=(0xd1b+1496-0x12f3);nDstLength+=Bytes2String(buf,&pDst[
+nDstLength],(0x16ad+3626-0x24d4));}else{buf[(0xa6+6854-0x1b6c)]=
+(0x183d+51-0x1870);buf[(0x485+4493-0x1611)]=(0x10b+3111-0xd32);nDstLength+=
+Bytes2String(buf,&pDst[nDstLength],(0x1a82+2492-0x243c));}return nDstLength;}
+unsigned long zUfiSms_ConvertAsciiToGsmDefault(const unsigned char*inputs,
+unsigned char*outputs,unsigned long len){unsigned long i=(0xaf+2281-0x998);
+unsigned long j=(0xb40+5362-0x2032);unsigned long k=(0x1082+2022-0x1868);if(NULL
+==inputs||NULL==outputs){printf(
 "\x73\x6d\x73\x3a\x69\x6e\x76\x61\x6c\x69\x64\x20\x69\x6e\x70\x75\x74\x73");
-return(0x3d1+1369-0x92a);}for(i=(0x1ad1+1413-0x2056);i<len;i++){j=inputs[i];if(
-g_zUfiSms_AsciiToGsmdefaultTable[j]<(0x1895+2589-0x21b3)){outputs[k]=
+return(0x1436+3479-0x21cd);}for(i=(0x29c+5400-0x17b4);i<len;i++){j=inputs[i];if(
+g_zUfiSms_AsciiToGsmdefaultTable[j]<(0x661+1976-0xd1a)){outputs[k]=
 g_zUfiSms_AsciiToGsmdefaultTable[j];}else{outputs[k]=(
-g_zUfiSms_AsciiToGsmdefaultTable[j]&65280)>>(0xc0d+5438-0x2143);k++;outputs[k]=(
-g_zUfiSms_AsciiToGsmdefaultTable[j]&(0x8c6+2382-0x1115));}k++;}return k;}
-unsigned long zUfiSms_ConvertUcs2ToSpanish(const unsigned char*def,unsigned char
-*gsm_default,unsigned long len){unsigned long i=(0x1e34+638-0x20b2);unsigned 
-long k=(0x199+3375-0xec8);unsigned long p=(0x478+1591-0xaaf);unsigned long tmp=
-(0x1a74+1814-0x218a);unsigned long s1=(0x1dba+337-0x1f0b),s2=(0x31+8004-0x1f75);
-unsigned long q=(0x709+3317-0x13fe);s1=sizeof(
+g_zUfiSms_AsciiToGsmdefaultTable[j]&65280)>>(0x1da+1648-0x842);k++;outputs[k]=(
+g_zUfiSms_AsciiToGsmdefaultTable[j]&(0x2f5+3239-0xe9d));}k++;}return k;}unsigned
+ long zUfiSms_ConvertUcs2ToSpanish(const unsigned char*def,unsigned char*
+gsm_default,unsigned long len){unsigned long i=(0x1e3+6923-0x1cee);unsigned long
+ k=(0xfb+5909-0x1810);unsigned long p=(0x1747+1212-0x1c03);unsigned long tmp=
+(0x110d+4558-0x22db);unsigned long s1=(0x758+3932-0x16b4),s2=
+(0x14b5+1878-0x1c0b);unsigned long q=(0x99c+2645-0x13f1);s1=sizeof(
 zte_sms_GSM7_SPANISH_To_UCS2_Table_Ex)/sizeof(
-zte_sms_GSM7_SPANISH_To_UCS2_Table_Ex[(0x1859+2067-0x206c)]);s2=sizeof(
+zte_sms_GSM7_SPANISH_To_UCS2_Table_Ex[(0xad4+5007-0x1e63)]);s2=sizeof(
 Ucs2_To_Gsm7_SPANISH_Table_UCS)/sizeof(Ucs2_To_Gsm7_SPANISH_Table_UCS[
-(0x334+6165-0x1b49)]);for(i=(0xcd8+4933-0x201d);i<len;i++){if(def[i]==
-(0x1456+1410-0x19d8)){i++;if(Ucs2_To_Gsm7_SPANISH_Table_ASC[def[i]]!=NON_GSM){
+(0x1559+224-0x1639)]);for(i=(0x1364+1000-0x174c);i<len;i++){if(def[i]==
+(0x1372+2278-0x1c58)){i++;if(Ucs2_To_Gsm7_SPANISH_Table_ASC[def[i]]!=NON_GSM){
 gsm_default[k]=Ucs2_To_Gsm7_SPANISH_Table_ASC[def[i]];k++;continue;}else if((
-Ucs2_To_Gsm7_SPANISH_Table_ASC[def[i]]==NON_GSM)&&(def[i]==(0xf96+2309-0x187b)))
-{gsm_default[k]=(0x1b83+100-0x1bc7);k++;continue;}for(q=(0x694+2825-0x119d);q<s1
-;q++){if(def[i]==zte_sms_GSM7_SPANISH_To_UCS2_Table_Ex[q][(0x4a4+6705-0x1ed4)]){
-gsm_default[k]=(0xe58+2215-0x16e4);k++;gsm_default[k]=
-zte_sms_GSM7_SPANISH_To_UCS2_Table_Ex[q][(0x1c37+1007-0x2026)];break;}}}else{tmp
-=(def[i]<<(0x74b+7487-0x2482))+def[i+(0xc0c+6679-0x2622)];i++;if(tmp==8364){
-gsm_default[k]=(0x624+3514-0x13c3);k++;gsm_default[k]=(0xed2+3984-0x1dfd);k++;}
-for(p=(0x653+4357-0x1758);p<s2;p++){if(tmp==Ucs2_To_Gsm7_SPANISH_Table_UCS[p][
-(0x1fb+2289-0xaeb)]){gsm_default[k]=Ucs2_To_Gsm7_SPANISH_Table_UCS[p][
-(0x1ab5+813-0x1de2)];break;}}}k++;}gsm_default[k]='\0';return k;}unsigned long 
-zUfiSms_ConvertUcs2ToPortuguese(const unsigned char*def,unsigned char*
-gsm_default,unsigned long len){unsigned long i=(0x1b15+2145-0x2376);unsigned 
-long k=(0x80a+3244-0x14b6);unsigned long p=(0x8b6+2229-0x116b);unsigned long tmp
-=(0xbea+629-0xe5f);unsigned long s1=(0x1a93+1407-0x2012),s2=(0x4e7+1278-0x9e5);
-unsigned long q=(0x67b+1011-0xa6e);s1=sizeof(
-zte_sms_GSM7_PORTUGUESE_To_UCS2_Table_Ex)/sizeof(
-zte_sms_GSM7_PORTUGUESE_To_UCS2_Table_Ex[(0x14f5+1377-0x1a56)]);s2=sizeof(
+Ucs2_To_Gsm7_SPANISH_Table_ASC[def[i]]==NON_GSM)&&(def[i]==(0x9a5+6325-0x223a)))
+{gsm_default[k]=(0xa6c+590-0xc9a);k++;continue;}for(q=(0x47b+2002-0xc4d);q<s1;q
+++){if(def[i]==zte_sms_GSM7_SPANISH_To_UCS2_Table_Ex[q][(0x1b6+3994-0x114f)]){
+gsm_default[k]=(0x221+6960-0x1d36);k++;gsm_default[k]=
+zte_sms_GSM7_SPANISH_To_UCS2_Table_Ex[q][(0x74b+7626-0x2515)];break;}}}else{tmp=
+(def[i]<<(0xa18+2110-0x124e))+def[i+(0x20ed+906-0x2476)];i++;if(tmp==
+(0x223f+1516-0x77f)){gsm_default[k]=(0x6d1+1745-0xd87);k++;gsm_default[k]=
+(0xebb+1709-0x1503);k++;}for(p=(0x1a53+317-0x1b90);p<s2;p++){if(tmp==
+Ucs2_To_Gsm7_SPANISH_Table_UCS[p][(0xc2+2134-0x917)]){gsm_default[k]=
+Ucs2_To_Gsm7_SPANISH_Table_UCS[p][(0x118a+5131-0x2595)];break;}}}k++;}
+gsm_default[k]='\0';return k;}unsigned long zUfiSms_ConvertUcs2ToPortuguese(
+const unsigned char*def,unsigned char*gsm_default,unsigned long len){unsigned 
+long i=(0x560+2110-0xd9e);unsigned long k=(0x14b9+105-0x1522);unsigned long p=
+(0x9a1+4175-0x19f0);unsigned long tmp=(0xa11+6126-0x21ff);unsigned long s1=
+(0xa7d+7291-0x26f8),s2=(0x133d+2575-0x1d4c);unsigned long q=(0x152b+2031-0x1d1a)
+;s1=sizeof(zte_sms_GSM7_PORTUGUESE_To_UCS2_Table_Ex)/sizeof(
+zte_sms_GSM7_PORTUGUESE_To_UCS2_Table_Ex[(0x7b1+7756-0x25fd)]);s2=sizeof(
 Ucs2_To_Gsm7_PORTUGUESE_Table_UCS)/sizeof(Ucs2_To_Gsm7_PORTUGUESE_Table_UCS[
-(0x108a+4353-0x218b)]);for(i=(0x126+8943-0x2415);i<len;i++){if(def[i]==
-(0x19e6+793-0x1cff)){i++;if(Ucs2_To_Gsm7_PORTUGUESE_Table_ASC[def[i]]!=NON_GSM){
+(0x990+166-0xa36)]);for(i=(0x6a4+6028-0x1e30);i<len;i++){if(def[i]==
+(0x65+7948-0x1f71)){i++;if(Ucs2_To_Gsm7_PORTUGUESE_Table_ASC[def[i]]!=NON_GSM){
 gsm_default[k]=Ucs2_To_Gsm7_PORTUGUESE_Table_ASC[def[i]];k++;continue;}else if((
 Ucs2_To_Gsm7_PORTUGUESE_Table_ASC[def[i]]==NON_GSM)&&(def[i]==
-(0xb2b+5988-0x226f))){gsm_default[k]=(0x639+5957-0x1d5e);k++;continue;}for(q=
-(0x1220+1116-0x167c);q<s1;q++){if(def[i]==
-zte_sms_GSM7_PORTUGUESE_To_UCS2_Table_Ex[q][(0xff6+82-0x1047)]){gsm_default[k]=
-(0x445+1760-0xb0a);k++;gsm_default[k]=zte_sms_GSM7_PORTUGUESE_To_UCS2_Table_Ex[q
-][(0x113+172-0x1bf)];break;}}}else{tmp=(def[i]<<(0x932+7275-0x2595))+def[i+
-(0x793+6987-0x22dd)];i++;if(tmp==8364){gsm_default[k]=(0x1614+2455-0x1f90);k++;
-gsm_default[k]=(0x38b+1568-0x946);k++;continue;}for(p=(0x11a6+5168-0x25d6);p<s2;
-p++){if(tmp==Ucs2_To_Gsm7_PORTUGUESE_Table_UCS[p][(0x106+7145-0x1cee)]){
-gsm_default[k]=Ucs2_To_Gsm7_PORTUGUESE_Table_UCS[p][(0xd2a+5067-0x20f5)];break;}
-}}k++;}gsm_default[k]='\0';return k;}unsigned long 
-zUfiSms_ConvertUcs2ToGsmDefault(const unsigned char*def,unsigned char*
-gsm_default,unsigned long len){unsigned long i=(0x146d+4306-0x253f);unsigned 
-long k=(0x1209+2678-0x1c7f);unsigned long p=(0xf47+5141-0x235c);unsigned long 
-tmp=(0x805+6010-0x1f7f);unsigned long s1=(0x1ed+5159-0x1614),s2=
-(0x26a+9188-0x264e);unsigned long q=(0xb0b+3916-0x1a57);s1=sizeof(
-zte_sms_GSMDefault_To_UCS2_Table_Ex)/sizeof(zte_sms_GSMDefault_To_UCS2_Table_Ex[
-(0x1442+1737-0x1b0b)]);s2=sizeof(UCS2_To_GSMDefault_Table_UCS2)/sizeof(
-UCS2_To_GSMDefault_Table_UCS2[(0xf30+5933-0x265d)]);for(i=(0x1bc+4593-0x13ad);i<
-len;i++){if(def[i]==(0x571+4398-0x169f)){i++;if(UCS2_To_GSMDefault_Table_ASC[def
-[i]]!=NON_GSM){gsm_default[k]=UCS2_To_GSMDefault_Table_ASC[def[i]];k++;continue;
-}else if((UCS2_To_GSMDefault_Table_ASC[def[i]]==NON_GSM)&&(def[i]==
-(0xab9+3165-0x16f6))){gsm_default[k]=(0x180+3217-0xdf1);k++;continue;}for(q=
-(0x228+5630-0x1826);q<s1;q++){if(def[i]==zte_sms_GSMDefault_To_UCS2_Table_Ex[q][
-(0x2fa+5569-0x18ba)]){gsm_default[k]=(0x1c8c+1276-0x216d);k++;gsm_default[k]=
-zte_sms_GSMDefault_To_UCS2_Table_Ex[q][(0xbf6+3789-0x1ac3)];break;}}}else{tmp=(
-def[i]<<(0x12a+1103-0x571))+def[i+(0xa53+6699-0x247d)];i++;if(tmp==8364){
-gsm_default[k]=(0xad0+200-0xb7d);k++;gsm_default[k]=(0x90f+72-0x8f2);k++;
-continue;}for(p=(0x20cb+1460-0x267f);p<s2;p++){if(tmp==
-UCS2_To_GSMDefault_Table_UCS2[p][(0xe0+7105-0x1ca0)]){gsm_default[k]=
-UCS2_To_GSMDefault_Table_UCS2[p][(0x1a4c+1293-0x1f59)];break;}}}k++;}gsm_default
-[k]='\0';return k;}UINT8 zUfiSms_TsIntToBcd(const UINT8 i){return(UINT8)(((i%
-(0x1aaa+2066-0x22b2))+((i/(0x15cb+46-0x15ef))<<(0xbd7+862-0xf31))));}void 
+(0xaeb+6940-0x25e7))){gsm_default[k]=(0x19c2+80-0x19f2);k++;continue;}for(q=
+(0x868+3656-0x16b0);q<s1;q++){if(def[i]==
+zte_sms_GSM7_PORTUGUESE_To_UCS2_Table_Ex[q][(0x1f48+1425-0x24d8)]){gsm_default[k
+]=(0xaa3+4114-0x1a9a);k++;gsm_default[k]=
+zte_sms_GSM7_PORTUGUESE_To_UCS2_Table_Ex[q][(0x1846+542-0x1a64)];break;}}}else{
+tmp=(def[i]<<(0x13d2+4755-0x265d))+def[i+(0x730+6418-0x2041)];i++;if(tmp==8364){
+gsm_default[k]=(0x1c6d+2571-0x265d);k++;gsm_default[k]=(0x334+4256-0x136f);k++;
+continue;}for(p=(0x694+2172-0xf10);p<s2;p++){if(tmp==
+Ucs2_To_Gsm7_PORTUGUESE_Table_UCS[p][(0xa82+778-0xd8b)]){gsm_default[k]=
+Ucs2_To_Gsm7_PORTUGUESE_Table_UCS[p][(0xcec+5539-0x228f)];break;}}}k++;}
+gsm_default[k]='\0';return k;}unsigned long zUfiSms_ConvertUcs2ToGsmDefault(
+const unsigned char*def,unsigned char*gsm_default,unsigned long len){unsigned 
+long i=(0x911+2044-0x110d);unsigned long k=(0x13e1+2246-0x1ca7);unsigned long p=
+(0x79d+5449-0x1ce6);unsigned long tmp=(0xa55+3224-0x16ed);unsigned long s1=
+(0x8e7+6463-0x2226),s2=(0x16af+3973-0x2634);unsigned long q=(0x1860+3425-0x25c1)
+;s1=sizeof(zte_sms_GSMDefault_To_UCS2_Table_Ex)/sizeof(
+zte_sms_GSMDefault_To_UCS2_Table_Ex[(0x1cb+3094-0xde1)]);s2=sizeof(
+UCS2_To_GSMDefault_Table_UCS2)/sizeof(UCS2_To_GSMDefault_Table_UCS2[
+(0x18ab+1962-0x2055)]);for(i=(0xbcf+5356-0x20bb);i<len;i++){if(def[i]==
+(0x3e0+1399-0x957)){i++;if(UCS2_To_GSMDefault_Table_ASC[def[i]]!=NON_GSM){
+gsm_default[k]=UCS2_To_GSMDefault_Table_ASC[def[i]];k++;continue;}else if((
+UCS2_To_GSMDefault_Table_ASC[def[i]]==NON_GSM)&&(def[i]==(0x770+4834-0x1a32))){
+gsm_default[k]=(0x903+1633-0xf44);k++;continue;}for(q=(0x6f+7621-0x1e34);q<s1;q
+++){if(def[i]==zte_sms_GSMDefault_To_UCS2_Table_Ex[q][(0x10b9+4197-0x211d)]){
+gsm_default[k]=(0x965+2504-0x1312);k++;gsm_default[k]=
+zte_sms_GSMDefault_To_UCS2_Table_Ex[q][(0x540+3806-0x141e)];break;}}}else{tmp=(
+def[i]<<(0x6b4+4695-0x1903))+def[i+(0x29f+4437-0x13f3)];i++;if(tmp==8364){
+gsm_default[k]=(0x10ec+4142-0x20ff);k++;gsm_default[k]=(0x19a4+3224-0x25d7);k++;
+continue;}for(p=(0x1bf+6220-0x1a0b);p<s2;p++){if(tmp==
+UCS2_To_GSMDefault_Table_UCS2[p][(0xa0b+2850-0x152c)]){gsm_default[k]=
+UCS2_To_GSMDefault_Table_UCS2[p][(0x43a+7393-0x211b)];break;}}}k++;}gsm_default[
+k]='\0';return k;}UINT8 zUfiSms_TsIntToBcd(const UINT8 i){return(UINT8)(((i%
+(0x1080+197-0x113b))+((i/(0x1c89+2637-0x26cc))<<(0x1e9+5719-0x183c))));}void 
 zUfiSms_DecodeRelativeTime(UINT8 iValidTime,T_zUfiSms_TimeStamp*ptTimeStamp){
-uint32 i=(0x179a+630-0x1a10);if(ptTimeStamp!=NULL){memset((void*)ptTimeStamp,
-(0xf11+2894-0x1a5f),sizeof(wms_timestamp_s_type));if(iValidTime<
-(0x325+6715-0x1cd0)){i=(iValidTime+(0x12ab+1513-0x1893))*(0x1cc2+16-0x1ccd);
-ptTimeStamp->hour=(UINT8)zUfiSms_TsIntToBcd((UINT8)(i/(0x763+4726-0x199d)));
-ptTimeStamp->minute=(UINT8)zUfiSms_TsIntToBcd((UINT8)(i%(0xee9+2546-0x189f)));}
-else if(iValidTime<(0xb6f+4180-0x1b1c)){i=(iValidTime-(0x1128+5279-0x2538))*
-(0x19d7+2639-0x2408);ptTimeStamp->hour=(UINT8)zUfiSms_TsIntToBcd((UINT8)(
-(0x46b+8588-0x25eb)+i/(0xd0+2547-0xa87)));ptTimeStamp->minute=(UINT8)
-zUfiSms_TsIntToBcd((UINT8)(i%(0x10d0+5187-0x24d7)));}else if(iValidTime<
-(0xd99+2456-0x166c)){i=iValidTime-(0x1d95+1201-0x21a0);ptTimeStamp->month=(UINT8
-)zUfiSms_TsIntToBcd((UINT8)(i/(0x4f1+1307-0x9ee)));ptTimeStamp->day=(UINT8)
-zUfiSms_TsIntToBcd((UINT8)(i%(0x18c2+102-0x190a)));}else{i=(iValidTime-
-(0x1d8b+1264-0x21bb))*(0x1d78+581-0x1fb6);ptTimeStamp->year=(UINT8)
-zUfiSms_TsIntToBcd((UINT8)(i/(0xf93+5093-0x220b)));ptTimeStamp->month=(UINT8)
-zUfiSms_TsIntToBcd((UINT8)((i%(0x1758+1109-0x1a40))/(0x857+2024-0x1021)));
-ptTimeStamp->day=(UINT8)zUfiSms_TsIntToBcd((UINT8)((i%(0x974+3560-0x15ef))%
-(0x1a3f+1849-0x215a)));}}else{printf(
+uint32 i=(0x1080+4029-0x203d);if(ptTimeStamp!=NULL){memset((void*)ptTimeStamp,
+(0xe1f+3934-0x1d7d),sizeof(wms_timestamp_s_type));if(iValidTime<
+(0x615+3181-0x11f2)){i=(iValidTime+(0xfc3+656-0x1252))*(0xf74+714-0x1239);
+ptTimeStamp->hour=(UINT8)zUfiSms_TsIntToBcd((UINT8)(i/(0x3f+6725-0x1a48)));
+ptTimeStamp->minute=(UINT8)zUfiSms_TsIntToBcd((UINT8)(i%(0x1653+2204-0x1eb3)));}
+else if(iValidTime<(0x183d+3783-0x265d)){i=(iValidTime-(0x2117+1303-0x259f))*
+(0x112+392-0x27c);ptTimeStamp->hour=(UINT8)zUfiSms_TsIntToBcd((UINT8)(
+(0x169f+578-0x18d5)+i/(0x871+1928-0xfbd)));ptTimeStamp->minute=(UINT8)
+zUfiSms_TsIntToBcd((UINT8)(i%(0xf3+405-0x24c)));}else if(iValidTime<
+(0x1f7+1896-0x89a)){i=iValidTime-(0x524+2023-0xc65);ptTimeStamp->month=(UINT8)
+zUfiSms_TsIntToBcd((UINT8)(i/(0x290+8704-0x2472)));ptTimeStamp->day=(UINT8)
+zUfiSms_TsIntToBcd((UINT8)(i%(0xecf+2137-0x170a)));}else{i=(iValidTime-
+(0x128b+259-0x12ce))*(0x1d6+1018-0x5c9);ptTimeStamp->year=(UINT8)
+zUfiSms_TsIntToBcd((UINT8)(i/(0x1298+3175-0x1d92)));ptTimeStamp->month=(UINT8)
+zUfiSms_TsIntToBcd((UINT8)((i%(0x143a+530-0x14df))/(0x1d05+2067-0x24fa)));
+ptTimeStamp->day=(UINT8)zUfiSms_TsIntToBcd((UINT8)((i%(0xfb8+3148-0x1a97))%
+(0x597+7894-0x244f)));}}else{printf(
 "\x6e\x75\x6c\x6c\x20\x70\x6f\x69\x6e\x74\x65\x72\x20\x69\x6e\x20\x77\x6d\x73\x5f\x74\x73\x5f\x64\x65\x63\x6f\x64\x65\x5f\x72\x65\x6c\x61\x74\x69\x76\x65\x5f\x74\x69\x6d\x65"
 );}}int zUfiSms_CharToInt(char*pCharArray,int iLen,unsigned char*pIntArray){int 
-i=(0x51b+3999-0x14ba);if(pIntArray==NULL||pCharArray==NULL){return ZUFI_FAIL;}
-for(i=(0x497+8454-0x259d);i<iLen;i++){pIntArray[i]=pCharArray[i]-
-((char)(0x9fa+2737-0x147b));}return ZUFI_SUCC;}void zUfiSms_FillGlobalTpudGsm7(
+i=(0xebf+2017-0x16a0);if(pIntArray==NULL||pCharArray==NULL){return ZUFI_FAIL;}
+for(i=(0x2230+444-0x23ec);i<iLen;i++){pIntArray[i]=pCharArray[i]-
+((char)(0x968+2166-0x11ae));}return ZUFI_SUCC;}void zUfiSms_FillGlobalTpudGsm7(
 T_zUfiSms_SubmitTpdu*ptSubmit,T_zUfiSms_ConcatInfo*ptConcatSms,
-T_zUfiSms_DbStoreData*ptDbSaveData){int i=(0x832+2725-0x12d7);if(ptConcatSms->
-total_msg>(0x6d0+7847-0x2576)){g_zUfiSms_SendingSms.TP_UDHI=(0x1d1d+656-0x1fac);
-g_zUfiSms_SendingSms.TP_UD[(0x355+1089-0x796)]=(0x636+611-0x894);
-g_zUfiSms_SendingSms.TP_UD[(0x1d6b+1480-0x2332)]=(0x5ca+6833-0x2076);
-g_zUfiSms_SendingSms.TP_UD[(0x151a+30-0x1536)]=(0x2039+1599-0x2675);
-g_zUfiSms_SendingSms.TP_UD[(0x616+2364-0xf4f)]=(char)ptDbSaveData->concat_info[
-(0x223+3952-0x1193)]%(0x1e73+1608-0x23bc);g_zUfiSms_SendingSms.TP_UD[
-(0x75b+2337-0x1078)]=(char)ptConcatSms->total_msg;g_zUfiSms_SendingSms.TP_UD[
-(0x63b+1576-0xc5e)]=(char)ptConcatSms->current_sending+(0x1af9+2002-0x22ca);
-g_zUfiSms_SendingSms.TP_UD[(0x53+6231-0x18a4)]=(0x1e21+1473-0x23dc);for(i=
-(0xf8d+4681-0x21d6);i<ptSubmit->user_data.sm_len;i++){g_zUfiSms_SendingSms.TP_UD
-[i+(0x1f5+5463-0x1745)]=ptSubmit->user_data.sm_data[i];}g_zUfiSms_SendingSms.
-TP_UDLength=ptSubmit->user_data.sm_len+(0x196+6308-0x1a33);}else{for(i=
-(0xb43+6871-0x261a);i<ptSubmit->user_data.sm_len;i++){g_zUfiSms_SendingSms.TP_UD
-[i]=ptSubmit->user_data.sm_data[i];}g_zUfiSms_SendingSms.TP_UDLength=ptSubmit->
-user_data.sm_len;}}void zUfiSms_FillGlobalTpudUcs2(T_zUfiSms_SubmitTpdu*ptSubmit
-,T_zUfiSms_ConcatInfo*ptConcatSms,T_zUfiSms_DbStoreData*ptDbSaveData){if(
-ptConcatSms->total_msg>(0x75a+1181-0xbf6)){g_zUfiSms_SendingSms.TP_UDHI=
-(0x9a+2029-0x886);g_zUfiSms_SendingSms.TP_UD[(0x1031+1612-0x167d)]=
-(0x122+856-0x475);g_zUfiSms_SendingSms.TP_UD[(0x1c9b+1-0x1c9b)]=
-(0x761+4285-0x1819);g_zUfiSms_SendingSms.TP_UD[(0x6ab+1004-0xa95)]=
-(0xf49+3328-0x1c46);g_zUfiSms_SendingSms.TP_UD[(0xfa7+3153-0x1bf5)]=(char)
-ptDbSaveData->concat_info[(0x11fa+2585-0x1c13)]%(0x867+1260-0xc54);
-g_zUfiSms_SendingSms.TP_UD[(0x15b5+3921-0x2502)]=(char)ptConcatSms->total_msg;
-g_zUfiSms_SendingSms.TP_UD[(0x1a54+3249-0x2700)]=(char)ptConcatSms->
-current_sending+(0xc5+3553-0xea5);(void)Bytes2String(ptSubmit->user_data.sm_data
-,&g_zUfiSms_SendingSms.TP_UD[(0x307+6447-0x1c30)],ptSubmit->user_data.sm_len);}
-else{(void)Bytes2String(ptSubmit->user_data.sm_data,g_zUfiSms_SendingSms.TP_UD,
-ptSubmit->user_data.sm_len);}}unsigned char zUfiSms_Low2High(unsigned char x){if
-(x>=((char)(0x64a+6469-0x1f2e))&&x<((char)(0xa95+5185-0x1e6f))){x=(x-
-((char)(0x2e9+420-0x42c)))+((char)(0x1f16+1310-0x23f3));}return x;}unsigned char
- zUfiSms_Char2Dec(unsigned char x){unsigned char d=(0x9e3+4492-0x1b6f);if(x>=
-((char)(0xb1b+6155-0x22e5))&&x<((char)(0x1ca+6536-0x1b0b))){d=(x-
-((char)(0xb1c+192-0xb9b)))+(0xe81+1359-0x13c6);}else{d=x-
-((char)(0xf2+4759-0x1359));}return d;}unsigned char zUfiSms_Char2Byte(unsigned 
-char a,unsigned char b){unsigned char data=(0x16c2+3046-0x22a8);unsigned char l=
-(0x11c3+2078-0x19e1),h=(0xb61+5564-0x211d);a=zUfiSms_Low2High(a);b=
+T_zUfiSms_DbStoreData*ptDbSaveData){int i=(0xb52+6116-0x2336);if(ptConcatSms->
+total_msg>(0x1db+2572-0xbe6)){g_zUfiSms_SendingSms.TP_UDHI=(0x3e1+5026-0x1782);
+g_zUfiSms_SendingSms.TP_UD[(0x447+2538-0xe31)]=(0x27+5887-0x1721);
+g_zUfiSms_SendingSms.TP_UD[(0x117+388-0x29a)]=(0x668+2337-0xf84);
+g_zUfiSms_SendingSms.TP_UD[(0x12e6+2048-0x1ae4)]=(0x337+7645-0x2111);
+g_zUfiSms_SendingSms.TP_UD[(0x252+1112-0x6a7)]=(char)ptDbSaveData->concat_info[
+(0x865+1358-0xdb3)]%(0x123f+1019-0x153b);g_zUfiSms_SendingSms.TP_UD[
+(0x1ed2+1181-0x236b)]=(char)ptConcatSms->total_msg;g_zUfiSms_SendingSms.TP_UD[
+(0x10a+7432-0x1e0d)]=(char)ptConcatSms->current_sending+(0x86c+1498-0xe45);
+g_zUfiSms_SendingSms.TP_UD[(0xc18+6708-0x2646)]=(0x5c5+4990-0x193d);for(i=
+(0x17c6+920-0x1b5e);i<ptSubmit->user_data.sm_len;i++){g_zUfiSms_SendingSms.TP_UD
+[i+(0x1013+924-0x13a8)]=ptSubmit->user_data.sm_data[i];}g_zUfiSms_SendingSms.
+TP_UDLength=ptSubmit->user_data.sm_len+(0x17c+8238-0x21a3);}else{for(i=
+(0x1380+1859-0x1ac3);i<ptSubmit->user_data.sm_len;i++){g_zUfiSms_SendingSms.
+TP_UD[i]=ptSubmit->user_data.sm_data[i];}g_zUfiSms_SendingSms.TP_UDLength=
+ptSubmit->user_data.sm_len;}}void zUfiSms_FillGlobalTpudUcs2(
+T_zUfiSms_SubmitTpdu*ptSubmit,T_zUfiSms_ConcatInfo*ptConcatSms,
+T_zUfiSms_DbStoreData*ptDbSaveData){if(ptConcatSms->total_msg>
+(0x57b+4232-0x1602)){g_zUfiSms_SendingSms.TP_UDHI=(0xbb3+98-0xc14);
+g_zUfiSms_SendingSms.TP_UD[(0xc6+1553-0x6d7)]=(0x1032+792-0x1345);
+g_zUfiSms_SendingSms.TP_UD[(0xa3+2810-0xb9c)]=(0x1744+75-0x178a);
+g_zUfiSms_SendingSms.TP_UD[(0x11e8+425-0x138f)]=(0xdda+3295-0x1ab6);
+g_zUfiSms_SendingSms.TP_UD[(0x129+2563-0xb29)]=(char)ptDbSaveData->concat_info[
+(0x220+4394-0x134a)]%(0x1882+3331-0x2486);g_zUfiSms_SendingSms.TP_UD[
+(0xcf0+4733-0x1f69)]=(char)ptConcatSms->total_msg;g_zUfiSms_SendingSms.TP_UD[
+(0x37a+582-0x5bb)]=(char)ptConcatSms->current_sending+(0x1342+1764-0x1a25);(void
+)Bytes2String(ptSubmit->user_data.sm_data,&g_zUfiSms_SendingSms.TP_UD[
+(0x6b+6813-0x1b02)],ptSubmit->user_data.sm_len);}else{(void)Bytes2String(
+ptSubmit->user_data.sm_data,g_zUfiSms_SendingSms.TP_UD,ptSubmit->user_data.
+sm_len);}}unsigned char zUfiSms_Low2High(unsigned char x){if(x>=
+((char)(0x25a4+395-0x26ce))&&x<((char)(0x1173+261-0x1211))){x=(x-
+((char)(0x77d+6868-0x21f0)))+((char)(0xc81+6295-0x24d7));}return x;}unsigned 
+char zUfiSms_Char2Dec(unsigned char x){unsigned char d=(0xb98+4435-0x1ceb);if(x
+>=((char)(0x1e5+3057-0xd95))&&x<((char)(0x172c+450-0x18a7))){d=(x-
+((char)(0x872+7494-0x2577)))+(0xb1d+389-0xc98);}else{d=x-
+((char)(0x9a5+4366-0x1a83));}return d;}unsigned char zUfiSms_Char2Byte(unsigned 
+char a,unsigned char b){unsigned char data=(0x1259+1706-0x1903);unsigned char l=
+(0xded+723-0x10c0),h=(0x11cf+3806-0x20ad);a=zUfiSms_Low2High(a);b=
 zUfiSms_Low2High(b);h=zUfiSms_Char2Dec(a);l=zUfiSms_Char2Dec(b);data=h*
-(0x307+4102-0x12fd)+l;return data;}void zUfiSms_Str2Bytes(unsigned char*text,int
- text_len,unsigned char*data,int data_len){int i=(0x1a3+308-0x2d7);while(
-(0x13b7+4288-0x2475)*i+(0x30f+7412-0x2002)<text_len){data[i]=zUfiSms_Char2Byte(
-text[(0x526+7142-0x210a)*i],text[(0x1a34+2336-0x2352)*i+(0x21cf+510-0x23cc)]);i
-++;}}int zUfiSms_SplitString(char*input,char***output,char cMatchChar){int src=
-(0x92d+540-0xb49);int dst=(0x1c40+968-0x2008);int count=(0x188+727-0x45f);int 
-size=(0x1170+1761-0x1849);char quoted=(0x155+4502-0x12eb);char**tmpout=NULL;*
+(0xe00+1849-0x1529)+l;return data;}void zUfiSms_Str2Bytes(unsigned char*text,int
+ text_len,unsigned char*data,int data_len){int i=(0x988+2591-0x13a7);while(
+(0x5c8+3732-0x145a)*i+(0x2387+643-0x2609)<text_len){data[i]=zUfiSms_Char2Byte(
+text[(0x12c+547-0x34d)*i],text[(0x176+6677-0x1b89)*i+(0xd32+6422-0x2647)]);i++;}
+}int zUfiSms_SplitString(char*input,char***output,char cMatchChar){int src=
+(0x1745+503-0x193c);int dst=(0x3c+3400-0xd84);int count=(0x155d+699-0x1818);int 
+size=(0x1964+1990-0x2122);char quoted=(0x202c+916-0x23c0);char**tmpout=NULL;*
 output=(char**)malloc(sizeof(char*)*size);if(NULL==*output){return-
-(0x1c24+53-0x1c58);}(*output)[count++]=input;for(src=dst=(0x6bc+4808-0x1984);
+(0x9d2+5622-0x1fc7);}(*output)[count++]=input;for(src=dst=(0xeb7+2786-0x1999);
 input[src];){char cInputChar=input[src];if(!quoted&&cInputChar==cMatchChar){
-input[dst++]=(0x94d+6770-0x23bf);while(input[++src]&&(int)isspace(input[src])){}
-;if(count>=size){size+=(0xe4b+1159-0x12c2);tmpout=(char**)realloc(*output,sizeof
-(char*)*size);if(NULL==tmpout){return-(0x13e5+2492-0x1da0);}*output=tmpout;}(*
+input[dst++]=(0x460+6312-0x1d08);while(input[++src]&&(int)isspace(input[src])){}
+;if(count>=size){size+=(0x528+6234-0x1d72);tmpout=(char**)realloc(*output,sizeof
+(char*)*size);if(NULL==tmpout){return-(0x6ba+2497-0x107a);}*output=tmpout;}(*
 output)[count++]=input+dst;}else if(!quoted&&(cInputChar=='\''||cInputChar==
-((char)(0x392+245-0x465)))){quoted=cInputChar;src++;}else if(cInputChar==quoted)
-{quoted=(0xdf2+1130-0x125c);src++;}else{if(cInputChar=='\\'&&quoted!='\''){src++
+((char)(0x21a8+93-0x21e3)))){quoted=cInputChar;src++;}else if(cInputChar==quoted
+){quoted=(0x17d+1887-0x8dc);src++;}else{if(cInputChar=='\\'&&quoted!='\''){src++
 ;cInputChar=input[src];if(!cInputChar){free(*output);*output=NULL;return-
-(0x1ee4+1021-0x22e0);}}input[dst++]=cInputChar;src++;}}input[dst]=
-(0x903+6833-0x23b4);if(quoted){free(*output);*output=NULL;return-
-(0x1843+1103-0x1c91);}return count;}int zUfiSms_atohex(char c){int result=
-(0x39b+7309-0x2028);if(c>=((char)(0xe59+3600-0x1c39))&&c<=
-((char)(0x9fa+6763-0x242c))){result=c-((char)(0x115a+3408-0x1e7a));}else if(c>=
-((char)(0x136b+1386-0x1874))&&c<=((char)(0x1963+179-0x19b0))){result=(c-
-((char)(0x1322+2209-0x1b62)))+(0x664+7610-0x2414);}else if(c>=
-((char)(0xafc+2204-0x1357))&&c<=((char)(0x62b+2967-0x117c))){result=(c-
-((char)(0x1aa9+1271-0x1f5f)))+(0x1373+3223-0x2000);}else{at_print(LOG_DEBUG,
+(0x1395+2708-0x1e28);}}input[dst++]=cInputChar;src++;}}input[dst]=
+(0xf85+842-0x12cf);if(quoted){free(*output);*output=NULL;return-
+(0xff+5404-0x161a);}return count;}int zUfiSms_atohex(char c){int result=
+(0x1164+5217-0x25c5);if(c>=((char)(0x1750+2893-0x226d))&&c<=
+((char)(0xf52+5563-0x24d4))){result=c-((char)(0xae3+2030-0x12a1));}else if(c>=
+((char)(0xa6c+6460-0x2347))&&c<=((char)(0x906+607-0xaff))){result=(c-
+((char)(0x6d3+3201-0x12f3)))+(0x10d2+4048-0x2098);}else if(c>=
+((char)(0x1d9+850-0x4ea))&&c<=((char)(0x11e9+2785-0x1c84))){result=(c-
+((char)(0x274+5801-0x18dc)))+(0x1c0f+2613-0x263a);}else{at_print(LOG_DEBUG,
 "\x7a\x55\x66\x69\x53\x6d\x73\x5f\x61\x74\x6f\x68\x65\x78\x20\x65\x72\x72\x6f\x72\x2c\x63\x61\x6e\x20\x75\x6e\x6b\x6e\x6f\x77\x6e\x20\x63\x68\x61\x72\x3a\x25\x63" "\n"
 ,c);return result;}return result;}int zUfiSms_DispatchWtoi(unsigned char*in_ptr,
-int iLength,unsigned char*out_ptr){int low=(0xf66+4058-0x1f40);int high=
-(0x25c+587-0x4a7);if(in_ptr==NULL||out_ptr==NULL){printf(
+int iLength,unsigned char*out_ptr){int low=(0xc8a+3886-0x1bb8);int high=
+(0x310+3033-0xee9);if(in_ptr==NULL||out_ptr==NULL){printf(
 "\x73\x6d\x73\x3a\x69\x6e\x76\x61\x69\x6c\x64\x20\x70\x61\x72\x61\x6d\x65\x74\x65\x72" "\n"
-);return ZUFI_FAIL;}while(iLength>(0x1043+3685-0x1ea8)){low=in_ptr[iLength-
-(0x5e9+4219-0x1663)]&(0x1496+2057-0x1c90);high=(in_ptr[iLength-
-(0x13d9+4549-0x259d)]&(0x2691+68-0x25e5))>>(0x1389+3234-0x2027);out_ptr[
-(0x917+3886-0x1843)*iLength-(0x20f0+1511-0x26d6)]=g_zUfiSms_DigAscMap[low];
-out_ptr[(0x1261+1792-0x195f)*iLength-(0xf26+2277-0x1809)]=g_zUfiSms_DigAscMap[
-high];iLength--;}return ZUFI_SUCC;}unsigned int 
-zte_wms_convert_PORTUGUESE_To_UCS2(const unsigned char*gsmdef,unsigned char*ucs2
-,unsigned int len){unsigned int i=(0xa24+2558-0x1422);unsigned int j=
-(0x91c+4684-0x1b68);unsigned int k=(0x2f5+3328-0xff5);unsigned int p=
-(0x3ca+6969-0x1f03);unsigned int s=(0x1d6+6574-0x1b84);s=sizeof(
+);return ZUFI_FAIL;}while(iLength>(0x87+2675-0xafa)){low=in_ptr[iLength-
+(0x159a+3966-0x2517)]&(0xad3+2197-0x1359);high=(in_ptr[iLength-(0x97d+563-0xbaf)
+]&(0x18d9+2387-0x213c))>>(0x12da+2844-0x1df2);out_ptr[(0x676+3361-0x1395)*
+iLength-(0x251+722-0x522)]=g_zUfiSms_DigAscMap[low];out_ptr[(0x5a6+212-0x678)*
+iLength-(0x20eb+494-0x22d7)]=g_zUfiSms_DigAscMap[high];iLength--;}return 
+ZUFI_SUCC;}unsigned int zte_wms_convert_PORTUGUESE_To_UCS2(const unsigned char*
+gsmdef,unsigned char*ucs2,unsigned int len){unsigned int i=(0x44d+5861-0x1b32);
+unsigned int j=(0x412+3049-0xffb);unsigned int k=(0xf1a+2459-0x18b5);unsigned 
+int p=(0x459+3219-0x10ec);unsigned int s=(0x6bc+4398-0x17ea);s=sizeof(
 zte_sms_GSM7_PORTUGUESE_To_UCS2_Table_Ex)/sizeof(
-zte_sms_GSM7_PORTUGUESE_To_UCS2_Table_Ex[(0x683+4962-0x19e5)]);for(i=
-(0x3b3+6643-0x1da6);i<len;i++){j=gsmdef[i];if(j==(0x1589+2758-0x2034)){i++;for(p
-=(0x1726+1266-0x1c18);p<s;p++){if(zte_sms_GSM7_PORTUGUESE_To_UCS2_Table_Ex[p][
-(0xcd2+3784-0x1b9a)]==gsmdef[i]){ucs2[k]=
-zte_sms_GSM7_PORTUGUESE_To_UCS2_Table_Ex[p][(0x2ef+7562-0x2078)]>>
-(0x1730+835-0x1a6b);k++;ucs2[k]=(unsigned char)(
-zte_sms_GSM7_PORTUGUESE_To_UCS2_Table_Ex[p][(0x107b+2419-0x19ed)]);break;}}}else
-{ucs2[k]=zte_sms_GSM7_PORTUGUESE_To_UCS2_Table[j]>>(0x436+1589-0xa63);k++;ucs2[k
-]=(unsigned char)(zte_sms_GSM7_PORTUGUESE_To_UCS2_Table[j]);}k++;}ucs2[k]='\0';
+zte_sms_GSM7_PORTUGUESE_To_UCS2_Table_Ex[(0x90b+6357-0x21e0)]);for(i=
+(0x127a+2906-0x1dd4);i<len;i++){j=gsmdef[i];if(j==(0x5dd+3907-0x1505)){i++;for(p
+=(0x1567+1679-0x1bf6);p<s;p++){if(zte_sms_GSM7_PORTUGUESE_To_UCS2_Table_Ex[p][
+(0x378+8278-0x23ce)]==gsmdef[i]){ucs2[k]=
+zte_sms_GSM7_PORTUGUESE_To_UCS2_Table_Ex[p][(0x7c9+6041-0x1f61)]>>
+(0x50b+8003-0x2446);k++;ucs2[k]=(unsigned char)(
+zte_sms_GSM7_PORTUGUESE_To_UCS2_Table_Ex[p][(0x16b8+1755-0x1d92)]);break;}}}else
+{ucs2[k]=zte_sms_GSM7_PORTUGUESE_To_UCS2_Table[j]>>(0xf1b+5680-0x2543);k++;ucs2[
+k]=(unsigned char)(zte_sms_GSM7_PORTUGUESE_To_UCS2_Table[j]);}k++;}ucs2[k]='\0';
 return k;}unsigned int zte_wms_convert_PORTUGUESE_To_UCS2_USE_GSM7_SS_PORTU_LS(
 const unsigned char*gsmdef,unsigned char*ucs2,unsigned int len){unsigned int i=
-(0x1781+2898-0x22d3);unsigned int j=(0x1087+4669-0x22c4);unsigned int k=
-(0x1028+2341-0x194d);unsigned int p=(0x26c+1444-0x810);unsigned int s=
-(0x9f7+5021-0x1d94);s=sizeof(zte_sms_GSMDefault_To_UCS2_Table_Ex)/sizeof(
-zte_sms_GSMDefault_To_UCS2_Table_Ex[(0x82d+7203-0x2450)]);for(i=
-(0x2b4+3650-0x10f6);i<len;i++){j=gsmdef[i];if(j==(0x14c0+3231-0x2144)){i++;for(p
-=(0xf26+4430-0x2074);p<s;p++){if(zte_sms_GSMDefault_To_UCS2_Table_Ex[p][
-(0x1aac+3075-0x26af)]==gsmdef[i]){ucs2[k]=zte_sms_GSMDefault_To_UCS2_Table_Ex[p]
-[(0x8fa+7687-0x2700)]>>(0x568+1092-0x9a4);k++;ucs2[k]=(unsigned char)(
-zte_sms_GSMDefault_To_UCS2_Table_Ex[p][(0x11a2+1173-0x1636)]);break;}}}else{ucs2
-[k]=zte_sms_GSM7_PORTUGUESE_To_UCS2_Table[j]>>(0x1bc2+2477-0x2567);k++;ucs2[k]=(
+(0xb4+3597-0xec1);unsigned int j=(0xa69+7223-0x26a0);unsigned int k=
+(0x51b+4321-0x15fc);unsigned int p=(0x29d+3883-0x11c8);unsigned int s=
+(0x1178+1329-0x16a9);s=sizeof(zte_sms_GSMDefault_To_UCS2_Table_Ex)/sizeof(
+zte_sms_GSMDefault_To_UCS2_Table_Ex[(0x23b+8213-0x2250)]);for(i=
+(0x1745+3767-0x25fc);i<len;i++){j=gsmdef[i];if(j==(0x8b1+2499-0x1259)){i++;for(p
+=(0x626+2731-0x10d1);p<s;p++){if(zte_sms_GSMDefault_To_UCS2_Table_Ex[p][
+(0x1187+4082-0x2179)]==gsmdef[i]){ucs2[k]=zte_sms_GSMDefault_To_UCS2_Table_Ex[p]
+[(0x7ed+4350-0x18ea)]>>(0xc12+4138-0x1c34);k++;ucs2[k]=(unsigned char)(
+zte_sms_GSMDefault_To_UCS2_Table_Ex[p][(0x202+7153-0x1df2)]);break;}}}else{ucs2[
+k]=zte_sms_GSM7_PORTUGUESE_To_UCS2_Table[j]>>(0x301+3522-0x10bb);k++;ucs2[k]=(
 unsigned char)(zte_sms_GSM7_PORTUGUESE_To_UCS2_Table[j]);}k++;}ucs2[k]='\0';
 return k;}unsigned long zte_wms_convert_GSMDefault_to_UCS2(const unsigned char*
-gsmdef,unsigned char*ucs2,unsigned long len){unsigned long i=(0x406+4588-0x15f2)
-;unsigned long j=(0xa14+81-0xa65);unsigned long k=(0xea4+4692-0x20f8);unsigned 
-long p=(0xbdd+1370-0x1137);unsigned long s=(0x14c4+1390-0x1a32);unsigned long 
-is_find=(0x19af+2917-0x2514);s=sizeof(zte_sms_GSMDefault_To_UCS2_Table_Ex)/
-sizeof(zte_sms_GSMDefault_To_UCS2_Table_Ex[(0x30d+3813-0x11f2)]);for(i=
-(0x13f+2769-0xc10);i<len;i++){j=gsmdef[i];if(j==(0x1495+4566-0x2650)){i++;for(p=
-(0x36d+391-0x4f4);p<s;p++){if(zte_sms_GSMDefault_To_UCS2_Table_Ex[p][
-(0x4a2+146-0x534)]==gsmdef[i]){ucs2[k]=zte_sms_GSMDefault_To_UCS2_Table_Ex[p][
-(0x1f8+4163-0x123a)]>>(0xb47+540-0xd5b);k++;ucs2[k]=(unsigned char)(
-zte_sms_GSMDefault_To_UCS2_Table_Ex[p][(0xf9+8755-0x232b)]);is_find=
-(0x5ff+7808-0x247e);break;}}if(!is_find){at_print(LOG_DEBUG,
+gsmdef,unsigned char*ucs2,unsigned long len){unsigned long i=(0x92c+5051-0x1ce7)
+;unsigned long j=(0xf4b+2095-0x177a);unsigned long k=(0xf4d+1182-0x13eb);
+unsigned long p=(0x4bd+2448-0xe4d);unsigned long s=(0x1148+4349-0x2245);unsigned
+ long is_find=(0x8da+728-0xbb2);s=sizeof(zte_sms_GSMDefault_To_UCS2_Table_Ex)/
+sizeof(zte_sms_GSMDefault_To_UCS2_Table_Ex[(0x1c28+604-0x1e84)]);for(i=
+(0x184f+2986-0x23f9);i<len;i++){j=gsmdef[i];if(j==(0xc42+419-0xdca)){i++;for(p=
+(0xe80+2417-0x17f1);p<s;p++){if(zte_sms_GSMDefault_To_UCS2_Table_Ex[p][
+(0x1c85+2223-0x2534)]==gsmdef[i]){ucs2[k]=zte_sms_GSMDefault_To_UCS2_Table_Ex[p]
+[(0x772+7077-0x2316)]>>(0xbaa+2925-0x170f);k++;ucs2[k]=(unsigned char)(
+zte_sms_GSMDefault_To_UCS2_Table_Ex[p][(0xcd6+3023-0x18a4)]);is_find=
+(0x7cc+3437-0x1538);break;}}if(!is_find){at_print(LOG_DEBUG,
 "\x73\x6d\x73\x3a\x20\x64\x61\x74\x61\x20\x3d\x20\x25\x64\x20\x6e\x6f\x74\x20\x66\x69\x6e\x64\x20\x69\x6e\x20\x67\x73\x6d\x64\x65\x66\x61\x75\x6c\x74\x20\x65\x78\x74\x65\x6e\x73\x69\x6f\x6e\x20\x74\x61\x62\x6c\x65" "\n"
-,gsmdef[i]);i--;ucs2[k]=zte_sms_GSMDefault_To_UCS2_Table[j]>>
-(0x13e1+1227-0x18a4);k++;ucs2[k]=(unsigned char)(
-zte_sms_GSMDefault_To_UCS2_Table[j]);}}else{ucs2[k]=
-zte_sms_GSMDefault_To_UCS2_Table[j]>>(0x1d9c+71-0x1ddb);k++;ucs2[k]=(unsigned 
+,gsmdef[i]);i--;ucs2[k]=zte_sms_GSMDefault_To_UCS2_Table[j]>>(0xcdc+965-0x1099);
+k++;ucs2[k]=(unsigned char)(zte_sms_GSMDefault_To_UCS2_Table[j]);}}else{ucs2[k]=
+zte_sms_GSMDefault_To_UCS2_Table[j]>>(0x16e2+202-0x17a4);k++;ucs2[k]=(unsigned 
 char)(zte_sms_GSMDefault_To_UCS2_Table[j]);}k++;}ucs2[k]='\0';return k;}void 
 zUfiSms_ConvertUcs2(char*data,UINT16 sms_len,char*out_content){char 
-ascii_content[(0x2d5+6586-0x1c8d)*ZTE_WMS_SMS_MSG_CONTENT_STORE_LEN_MAX+
-(0x1f3+288-0x312)]={(0x1fc8+84-0x201c)};UINT16 len=(0xd7f+5945-0x24b8);switch(
+ascii_content[(0x66+6002-0x17d6)*ZTE_WMS_SMS_MSG_CONTENT_STORE_LEN_MAX+
+(0x6b0+6480-0x1fff)]={(0xe4d+1816-0x1565)};UINT16 len=(0x1b4d+58-0x1b87);switch(
 g_zUfiSms_Language){case DCS_PORTUGUESE:if(g_zUfiSms_IsLanguageShift==
 WMS_UDH_NAT_LANG_SS){len=zte_wms_convert_PORTUGUESE_To_UCS2((const UINT8*)data,(
 UINT8*)ascii_content,sms_len);}else if(g_zUfiSms_IsLanguageShift==
@@ -668,76 +671,75 @@
 sms_len);break;}(void)zUfiSms_DispatchWtoi((char*)ascii_content,len,(char*)
 out_content);}boolean zUfiSms_DecodeContent(char*msg_content,UINT16 sms_len,
 boolean isEsc,char*out_content){boolean endEsc=FALSE;char*p=NULL;static char 
-data[(0x23a+6812-0x1cd5)+(0x6f5+5684-0x1c89)+(0x1276+1774-0x1963)]={
-(0x1d8+5381-0x16dd)};int len=(0x366+935-0x70d);if(msg_content==NULL||out_content
-==NULL||sms_len>(0xe74+3665-0x1b85)||sms_len<(0x1a5a+1635-0x20bb)){return endEsc
-;}len=sms_len;memset(data,(0x318+8426-0x2402),(0x533+6004-0x1c05));p=data;if(
-isEsc){*p=(0x1e08+1776-0x24dd);p++;}zUfiSms_Str2Bytes((unsigned char*)
-msg_content,len,(unsigned char*)p,(0x3dd+471-0x514));if(p[len/
-(0xae9+5027-0x1e8a)-(0x917+6354-0x21e8)]==(0x63b+2512-0xff0)){endEsc=TRUE;}
-zUfiSms_ConvertUcs2(data,len/(0x1480+2707-0x1f11)+(isEsc?(0x5ca+7702-0x23df):
-(0x1679+1713-0x1d2a))-(endEsc?(0x11e7+1898-0x1950):(0x105a+1010-0x144c)),
+data[(0x16d8+1306-0x1bf1)+(0x12ef+1733-0x1914)+(0x1ec+2019-0x9ce)]={
+(0x187a+2807-0x2371)};int len=(0x1090+4438-0x21e6);if(msg_content==NULL||
+out_content==NULL||sms_len>(0x413+3069-0xed0)||sms_len<(0x151+1393-0x6c0)){
+return endEsc;}len=sms_len;memset(data,(0x1f9d+1792-0x269d),(0xa64+2130-0x1214))
+;p=data;if(isEsc){*p=(0x332+7362-0x1fd9);p++;}zUfiSms_Str2Bytes((unsigned char*)
+msg_content,len,(unsigned char*)p,(0x2148+127-0x2127));if(p[len/
+(0xd6b+2919-0x18d0)-(0xe6+5350-0x15cb)]==(0x8b5+6602-0x2264)){endEsc=TRUE;}
+zUfiSms_ConvertUcs2(data,len/(0x775+6461-0x20b0)+(isEsc?(0x1895+2947-0x2417):
+(0xe92+1387-0x13fd))-(endEsc?(0x133f+1336-0x1876):(0x6c6+1279-0xbc5)),
 out_content);return endEsc;}byte*zUfiSms_SmsiUtilitoa(uint32 v,byte*s,UINT16 r){
-byte buf[(0x217+8644-0x23ba)],c;int n;n=sizeof(buf)-(0x1b5+4369-0x12c5);buf[n]=
-'\0';do{c=(byte)(v%r);if(n<=(0x473+4537-0x162c)){printf(
+byte buf[(0xa2d+5050-0x1dc6)],c;int n;n=sizeof(buf)-(0x73b+3140-0x137e);buf[n]=
+'\0';do{c=(byte)(v%r);if(n<=(0xb48+2512-0x1518)){printf(
 "\x4f\x56\x45\x52\x46\x4c\x4f\x57\x20");break;}buf[--n]=(byte)((c>
-(0x5b1+8501-0x26dd))?c+((char)(0x215+2052-0x9d8))-(0x1832+1371-0x1d83):c+
-((char)(0x1af7+1047-0x1ede)));}while((v/=r)>(0x88+1447-0x62f));while((*s++=buf[n
-++])!=(0x20d0+816-0x2400));return(s-(0xdf5+3017-0x19bd));}byte*
+(0x37c+9021-0x26b0))?c+((char)(0x64d+1015-0xa03))-(0xda9+1905-0x1510):c+
+((char)(0x14b4+1362-0x19d6)));}while((v/=r)>(0x1aa8+370-0x1c1a));while((*s++=buf
+[n++])!=(0x1441+3785-0x230a));return(s-(0x248+1996-0xa13));}byte*
 zUfiSms_SmsiAddrToStr(wms_address_s_type addr,byte*res_ptr,UINT8*type_of_addr){
-byte bcd_idx=(0x755+7435-0x2460);UINT8 temp=(0x1f23+1898-0x268d);*type_of_addr=
-(0x2201+265-0x230a);temp=(UINT8)((uint32)addr.number_type&(0x1a9+1232-0x672));*
-type_of_addr=(UINT8)((*type_of_addr|temp)<<(0x2ac+8756-0x24dc));temp=(UINT8)((
-uint32)addr.number_plan&(0x18d4+3212-0x2559));*type_of_addr=*type_of_addr|temp;*
-type_of_addr=*type_of_addr|(0x13c+3411-0xe0f);while(bcd_idx<addr.
-number_of_digits){if(addr.digits[bcd_idx]==(0x553+1655-0xbc0)){addr.digits[
-bcd_idx]=(0x74b+209-0x81c);}res_ptr=zUfiSms_SmsiUtilitoa((uint32)addr.digits[
-bcd_idx],res_ptr,(0x15b3+4092-0x259f));bcd_idx++;}return res_ptr;}byte*
+byte bcd_idx=(0x3ca+7126-0x1fa0);UINT8 temp=(0x1100+3344-0x1e10);*type_of_addr=
+(0xda2+4940-0x20ee);temp=(UINT8)((uint32)addr.number_type&(0xe3+3056-0xccc));*
+type_of_addr=(UINT8)((*type_of_addr|temp)<<(0x2120+1103-0x256b));temp=(UINT8)((
+uint32)addr.number_plan&(0x334+8149-0x2302));*type_of_addr=*type_of_addr|temp;*
+type_of_addr=*type_of_addr|(0x1b91+1629-0x216e);while(bcd_idx<addr.
+number_of_digits){if(addr.digits[bcd_idx]==(0x1b0+1296-0x6b6)){addr.digits[
+bcd_idx]=(0x15e1+1917-0x1d5e);}res_ptr=zUfiSms_SmsiUtilitoa((uint32)addr.digits[
+bcd_idx],res_ptr,(0xb76+2144-0x13c6));bcd_idx++;}return res_ptr;}byte*
 zUfiSms_SmsiUtilitoaFill(word v,byte*rb_ptr){int n;byte c,*ptr;ptr=rb_ptr+
-(0xac5+2111-0x1302);*ptr='\0';for(n=(0x239d+505-0x2596);n<(0x1a9d+843-0x1de6);++
-n){c=(byte)(v%(0xd5+9623-0x2662));v/=(0x15cd+2487-0x1f7a);*--ptr=(c+
-((char)(0x1395+3564-0x2151)));}return rb_ptr+(0xc57+5827-0x2318);}void 
-zUfiSms_SprintfTime(char*str_time,int len,int t){if(t<(0x1596+137-0x1615)){
+(0x1755+212-0x1827);*ptr='\0';for(n=(0x269+3994-0x1203);n<(0x6e4+2313-0xfeb);++n
+){c=(byte)(v%(0x31+2771-0xafa));v/=(0x1b77+1869-0x22ba);*--ptr=(c+
+((char)(0x85d+396-0x9b9)));}return rb_ptr+(0x232+7244-0x1e7c);}void 
+zUfiSms_SprintfTime(char*str_time,int len,int t){if(t<(0x314+3131-0xf45)){
 snprintf(str_time,len,"\x30\x25\x78",t);}else{snprintf(str_time,len,"\x25\x78",t
 );}}static void zUfiSms_ParseDeliverConcat8(T_zUfiSms_UdhConcat8*concat_8,
-T_zUfiSms_DbStoreData*db_data){int mux=(0x1906+1840-0x2036);concat_8->seq_num--;
+T_zUfiSms_DbStoreData*db_data){int mux=(0x2c5+7730-0x20f7);concat_8->seq_num--;
 if(concat_8->total_sm>ZTE_WMS_CONCAT_SMS_COUNT_MAX){mux=(concat_8->seq_num-
 concat_8->seq_num%ZTE_WMS_CONCAT_SMS_COUNT_MAX)/ZTE_WMS_CONCAT_SMS_COUNT_MAX;}
-db_data->concat_sms=(0xb6c+5908-0x227f);db_data->concat_info[(0xfc1+1555-0x15d4)
-]=(0x227+3971-0x10ab)*mux+concat_8->msg_ref;db_data->concat_info[
-(0x127a+4333-0x2365)]=concat_8->seq_num%ZTE_WMS_CONCAT_SMS_COUNT_MAX+
-(0x1447+2098-0x1c78);db_data->concat_info[(0x11a6+5339-0x2680)]=concat_8->
-total_sm-ZTE_WMS_CONCAT_SMS_COUNT_MAX*mux>ZTE_WMS_CONCAT_SMS_COUNT_MAX-
-(0x515+1205-0x9c9)?ZTE_WMS_CONCAT_SMS_COUNT_MAX:(concat_8->total_sm%
-ZTE_WMS_CONCAT_SMS_COUNT_MAX);}static void zUfiSms_ParserLangSs(wms_udh_s_type*
+db_data->concat_sms=(0x2bc+5018-0x1655);db_data->concat_info[
+(0x1601+3010-0x21c3)]=(0x598+2020-0xc7d)*mux+concat_8->msg_ref;db_data->
+concat_info[(0xaeb+6429-0x2406)]=concat_8->seq_num%ZTE_WMS_CONCAT_SMS_COUNT_MAX+
+(0x67+3133-0xca3);db_data->concat_info[(0x17b9+2012-0x1f94)]=concat_8->total_sm-
+ZTE_WMS_CONCAT_SMS_COUNT_MAX*mux>ZTE_WMS_CONCAT_SMS_COUNT_MAX-(0x703+1198-0xbb0)
+?ZTE_WMS_CONCAT_SMS_COUNT_MAX:(concat_8->total_sm%ZTE_WMS_CONCAT_SMS_COUNT_MAX);
+}static void zUfiSms_ParserLangSs(wms_udh_s_type*user_data_header){if(
+user_data_header==NULL){return;}switch(user_data_header->u.nat_lang_ss.
+nat_lang_id){case WMS_UDH_NAT_LANG_PORTUGUESE:g_zUfiSms_Language=DCS_PORTUGUESE;
+break;default:break;}}static void zUfiSms_ParserLangLs(T_zUfiSms_Udh*
 user_data_header){if(user_data_header==NULL){return;}switch(user_data_header->u.
 nat_lang_ss.nat_lang_id){case WMS_UDH_NAT_LANG_PORTUGUESE:g_zUfiSms_Language=
-DCS_PORTUGUESE;break;default:break;}}static void zUfiSms_ParserLangLs(
-T_zUfiSms_Udh*user_data_header){if(user_data_header==NULL){return;}switch(
-user_data_header->u.nat_lang_ss.nat_lang_id){case WMS_UDH_NAT_LANG_PORTUGUESE:
-g_zUfiSms_Language=DCS_PORTUGUESE;break;default:break;}}static void 
-zUfiSms_ParseDeliverConcat16(T_zUfiSms_UdhConcat16*concat_16,
-T_zUfiSms_DbStoreData*db_data){int mux=(0x1961+918-0x1cf7);concat_16->seq_num--;
-db_data->concat_sms=(0xf36+3642-0x1d6f);
-#if (0xae2+1720-0x119a)

-db_data->concat_info[(0x1c72+2588-0x268e)]=concat_16->msg_ref;db_data->
-concat_info[(0x351+1421-0x8dd)]=concat_16->total_sm;db_data->concat_info[
-(0x1a34+1854-0x2170)]=concat_16->seq_num;
+DCS_PORTUGUESE;break;default:break;}}static void zUfiSms_ParseDeliverConcat16(
+T_zUfiSms_UdhConcat16*concat_16,T_zUfiSms_DbStoreData*db_data){int mux=
+(0x12bd+3568-0x20ad);concat_16->seq_num--;db_data->concat_sms=(0x587+763-0x881);
+#if (0x1226+1375-0x1785)

+db_data->concat_info[(0x200+2072-0xa18)]=concat_16->msg_ref;db_data->concat_info
+[(0x3f+8447-0x213d)]=concat_16->total_sm;db_data->concat_info[
+(0x652+7878-0x2516)]=concat_16->seq_num;
 #endif

 if(concat_16->total_sm>ZTE_WMS_CONCAT_SMS_COUNT_MAX){mux=(concat_16->seq_num-
 concat_16->seq_num%ZTE_WMS_CONCAT_SMS_COUNT_MAX)/ZTE_WMS_CONCAT_SMS_COUNT_MAX;}
-db_data->concat_info[(0xd84+3928-0x1cdc)]=(0x437+4471-0x14af)*mux+concat_16->
-msg_ref;db_data->concat_info[(0x1210+936-0x15b6)]=concat_16->seq_num%
-ZTE_WMS_CONCAT_SMS_COUNT_MAX+(0x9c2+284-0xadd);db_data->concat_info[
-(0x515+4677-0x1759)]=concat_16->total_sm-ZTE_WMS_CONCAT_SMS_COUNT_MAX*mux>
-ZTE_WMS_CONCAT_SMS_COUNT_MAX-(0x241+8522-0x238a)?ZTE_WMS_CONCAT_SMS_COUNT_MAX:(
+db_data->concat_info[(0x101a+5094-0x2400)]=(0xf7a+1806-0x1589)*mux+concat_16->
+msg_ref;db_data->concat_info[(0x5b9+1024-0x9b7)]=concat_16->seq_num%
+ZTE_WMS_CONCAT_SMS_COUNT_MAX+(0x4c9+4791-0x177f);db_data->concat_info[
+(0x42b+3422-0x1188)]=concat_16->total_sm-ZTE_WMS_CONCAT_SMS_COUNT_MAX*mux>
+ZTE_WMS_CONCAT_SMS_COUNT_MAX-(0x213a+245-0x222e)?ZTE_WMS_CONCAT_SMS_COUNT_MAX:(
 concat_16->total_sm%ZTE_WMS_CONCAT_SMS_COUNT_MAX);}static int 
 zUfiSms_ParseUdhiData(T_zUfiSms_Udh*user_data_header,T_zUfiSms_DbStoreData*
 db_data){if(NULL==user_data_header||NULL==db_data){printf(
 "\x69\x6e\x76\x61\x6c\x69\x64\x20\x69\x6e\x70\x75\x74\x73\x2e");return ZUFI_FAIL
 ;}switch(user_data_header->header_id){case WMS_UDH_CONCAT_8:db_data->concat_sms=
-(0x1cd6+703-0x1f94);zUfiSms_ParseDeliverConcat8(&(user_data_header->u.concat_8),
-db_data);break;case WMS_UDH_CONCAT_16:db_data->concat_sms=(0x9f3+3943-0x1959);
+(0x148+6285-0x19d4);zUfiSms_ParseDeliverConcat8(&(user_data_header->u.concat_8),
+db_data);break;case WMS_UDH_CONCAT_16:db_data->concat_sms=(0xae3+2935-0x1659);
 zUfiSms_ParseDeliverConcat16(&(user_data_header->u.concat_16),db_data);break;
 case WMS_UDH_NAT_LANG_SS:g_zUfiSms_IsLanguageShift=WMS_UDH_NAT_LANG_SS;
 zUfiSms_ParserLangSs(user_data_header);break;case WMS_UDH_NAT_LANG_LS:
@@ -747,157 +749,154 @@
 );break;}return ZUFI_SUCC;}int zUfiSms_FormatDeliverDbdata(
 T_zUfiSms_ClientTsData*ts_data_ptr,T_zUfiSms_DbStoreData*db_data){int result=
 ZUFI_SUCC;wms_address_s_type*address_ptr=NULL;wms_gw_alphabet_e_type tp_dcs=
-WMS_GW_ALPHABET_MAX32;int i=(0x12c1+688-0x1571);int ind=(0xd79+3074-0x197b);if((
+WMS_GW_ALPHABET_MAX32;int i=(0x952+7131-0x252d);int ind=(0x618+7452-0x2334);if((
 NULL==ts_data_ptr)||(NULL==db_data)){printf(
 "\x69\x6e\x76\x61\x6c\x69\x64\x20\x69\x6e\x70\x75\x74\x73\x2e");return ZUFI_FAIL
 ;}address_ptr=&(ts_data_ptr->u.gw_pp.u.deliver.address);if(
 WMS_NUMBER_INTERNATIONAL==address_ptr->number_type){memset(db_data->number,
-(0x137f+4-0x1383),ZTE_WMS_ADDRESS_LEN_MAX+(0xe97+3254-0x1b4c));db_data->number[
-(0x9a0+6813-0x243d)]=((char)(0x1383+1459-0x190b));for(i=(0x1086+5604-0x266a);i<
-address_ptr->number_of_digits;i++){if((0x1012+4466-0x217a)==address_ptr->digits[
-i]){db_data->number[i+(0x10df+3821-0x1fcb)]=((char)(0x16a+8351-0x21d9));}else{
-db_data->number[i+(0x33c+5837-0x1a08)]=((char)(0x39c+3852-0x1278))+address_ptr->
-digits[i];}}}else if(WMS_NUMBER_ALPHANUMERIC==address_ptr->number_type){memcpy(
-db_data->number,address_ptr->digits,address_ptr->number_of_digits);}else{if(
-address_ptr->digit_mode==WMS_DIGIT_MODE_8_BIT){memcpy(&(db_data->number[
-(0x21d0+1084-0x260b)]),address_ptr->digits,address_ptr->number_of_digits);}else{
-for(i=(0x1971+1150-0x1def);i<address_ptr->number_of_digits;i++){if(
-(0xae3+2963-0x166c)==address_ptr->digits[i]){db_data->number[i]=
-((char)(0x13ff+4003-0x2372));}else{db_data->number[i]=
-((char)(0x2463+316-0x256f))+address_ptr->digits[i];}}}}(void)
+(0x7a3+2186-0x102d),ZTE_WMS_ADDRESS_LEN_MAX+(0x11ba+416-0x1359));db_data->number
+[(0x145f+809-0x1788)]=((char)(0x1e0b+2033-0x25d1));for(i=(0x70a+4921-0x1a43);i<
+address_ptr->number_of_digits;i++){if((0xf1a+1495-0x14e7)==address_ptr->digits[i
+]){db_data->number[i+(0xc86+23-0xc9c)]=((char)(0x7c2+230-0x878));}else{db_data->
+number[i+(0x600+4063-0x15de)]=((char)(0x2271+285-0x235e))+address_ptr->digits[i]
+;}}}else if(WMS_NUMBER_ALPHANUMERIC==address_ptr->number_type){memcpy(db_data->
+number,address_ptr->digits,address_ptr->number_of_digits);}else{if(address_ptr->
+digit_mode==WMS_DIGIT_MODE_8_BIT){memcpy(&(db_data->number[(0x588+2444-0xf13)]),
+address_ptr->digits,address_ptr->number_of_digits);}else{for(i=
+(0x2ff+3066-0xef9);i<address_ptr->number_of_digits;i++){if((0x13a+1901-0x89d)==
+address_ptr->digits[i]){db_data->number[i]=((char)(0x1589+4029-0x2516));}else{
+db_data->number[i]=((char)(0x809+991-0xbb8))+address_ptr->digits[i];}}}}(void)
 zUfiSms_UtilTimeStamp(ts_data_ptr->u.gw_pp.u.deliver.timestamp,db_data->tp_scts,
 &db_data->julian_date);if(ts_data_ptr->u.gw_pp.u.deliver.
-user_data_header_present){db_data->tp_udhi=(0x37d+6508-0x1ce8);}else{db_data->
-tp_udhi=(0xd0f+4109-0x1d1c);}if(db_data->tp_udhi==(0x400+3194-0x1079)){for(ind=
-(0x13f2+1048-0x180a);ind<ts_data_ptr->u.gw_pp.u.deliver.user_data.num_headers;
+user_data_header_present){db_data->tp_udhi=(0xf74+726-0x1249);}else{db_data->
+tp_udhi=(0x2f7+3095-0xf0e);}if(db_data->tp_udhi==(0x355+5628-0x1950)){for(ind=
+(0x1d43+1996-0x250f);ind<ts_data_ptr->u.gw_pp.u.deliver.user_data.num_headers;
 ind++){result=zUfiSms_ParseUdhiData(&(ts_data_ptr->u.gw_pp.u.deliver.user_data.
 headers[ind]),db_data);if(ZTE_WMS_CONCAT_SMS_COUNT_MAX<db_data->concat_info[
-(0x8fa+5949-0x2036)]){printf(
+(0x68d+8138-0x2656)]){printf(
 "\x74\x68\x65\x20\x63\x6f\x6e\x63\x61\x74\x20\x73\x6d\x73\x20\x73\x65\x67\x6d\x65\x6e\x74\x20\x69\x73\x20\x25\x64\x2c\x61\x6e\x64\x20\x6c\x61\x72\x67\x65\x72\x20\x74\x68\x65\x6e\x20\x74\x68\x65\x20\x20\x73\x75\x70\x70\x6f\x72\x74\x65\x64\x20\x25\x64\x20\x73\x65\x67\x6d\x65\x6e\x74\x73\x2c\x73\x6f\x20\x64\x69\x64\x20\x6e\x6f\x74\x20\x64\x65\x61\x6c\x20\x74\x68\x65\x20\x63\x6f\x6e\x63\x61\x74\x20\x73\x6d\x73\x2e\x20"
-,db_data->concat_info[(0x69d+5820-0x1d58)],ZTE_WMS_CONCAT_SMS_COUNT_MAX);if(
+,db_data->concat_info[(0x1a34+814-0x1d61)],ZTE_WMS_CONCAT_SMS_COUNT_MAX);if(
 WMS_STORAGE_TYPE_NV_V01==db_data->mem_store){zUfiSms_DelModemSms(db_data->index)
 ;}result=ZUFI_FAIL;}}}tp_dcs=ts_data_ptr->u.gw_pp.u.deliver.dcs.alphabet;db_data
 ->sms_class=ts_data_ptr->u.gw_pp.u.deliver.dcs.msg_class;if(
-WMS_GW_ALPHABET_8_BIT>=tp_dcs){db_data->tp_dcs=(unsigned char)
-(0x840+3028-0x1413);}else if(WMS_GW_ALPHABET_UCS2==tp_dcs){db_data->tp_dcs=(
-unsigned char)(0x1d8b+11-0x1d94);}else{printf(
+WMS_GW_ALPHABET_8_BIT>=tp_dcs){db_data->tp_dcs=(unsigned char)(0x8ab+98-0x90c);}
+else if(WMS_GW_ALPHABET_UCS2==tp_dcs){db_data->tp_dcs=(unsigned char)
+(0x218+6024-0x199e);}else{printf(
 "\x69\x6e\x76\x61\x6c\x69\x64\x20\x74\x70\x5f\x64\x63\x73\x3d\x25\x64",tp_dcs);}
 db_data->tp_pid=(unsigned char)ts_data_ptr->u.gw_pp.u.deliver.pid;if(ts_data_ptr
 ->u.gw_pp.u.deliver.dcs.alphabet==WMS_GW_ALPHABET_UCS2){result=
 zUfiSms_DispatchWtoi(ts_data_ptr->u.gw_pp.u.deliver.user_data.sm_data,
 ts_data_ptr->u.gw_pp.u.deliver.user_data.sm_len,db_data->sms_content);db_data->
 alphabet=WMS_GW_ALPHABET_UCS2;}else if(ts_data_ptr->u.gw_pp.u.deliver.dcs.
-alphabet==WMS_GW_ALPHABET_8_BIT){for(ind=(0x641+2935-0x11b8);ind<ts_data_ptr->u.
-gw_pp.u.deliver.user_data.sm_len;ind++){db_data->sms_content[(0xd77+5725-0x23d0)
-*ind]=((char)(0x13f6+4396-0x24f2));db_data->sms_content[(0x126a+1315-0x1789)*ind
-+(0x1607+1969-0x1db7)]=((char)(0x1691+3232-0x2301));db_data->sms_content[
-(0x829+5001-0x1bae)*ind+(0x527+4855-0x181c)]=g_zUfiSms_DigAscMap[((ts_data_ptr->
-u.gw_pp.u.deliver.user_data.sm_data[ind]&(0xf00+1315-0x1333))>>
-(0xd04+3977-0x1c89))];db_data->sms_content[(0x1afc+2717-0x2595)*ind+
-(0x6a5+7929-0x259b)]=g_zUfiSms_DigAscMap[(ts_data_ptr->u.gw_pp.u.deliver.
-user_data.sm_data[ind]&(0xa29+1293-0xf27))];db_data->alphabet=
+alphabet==WMS_GW_ALPHABET_8_BIT){for(ind=(0x21d2+183-0x2289);ind<ts_data_ptr->u.
+gw_pp.u.deliver.user_data.sm_len;ind++){db_data->sms_content[(0x118+1493-0x6e9)*
+ind]=((char)(0x123d+2661-0x1c72));db_data->sms_content[(0x5d0+2651-0x1027)*ind+
+(0x85d+1927-0xfe3)]=((char)(0x1806+3595-0x25e1));db_data->sms_content[
+(0x907+7292-0x257f)*ind+(0x15c2+3587-0x23c3)]=g_zUfiSms_DigAscMap[((ts_data_ptr
+->u.gw_pp.u.deliver.user_data.sm_data[ind]&(0x10a9+4664-0x21f1))>>
+(0x95+4154-0x10cb))];db_data->sms_content[(0xd7d+4527-0x1f28)*ind+
+(0xd02+6156-0x250b)]=g_zUfiSms_DigAscMap[(ts_data_ptr->u.gw_pp.u.deliver.
+user_data.sm_data[ind]&(0x344+3081-0xf3e))];db_data->alphabet=
 WMS_GW_ALPHABET_UCS2;}}else if(ts_data_ptr->u.gw_pp.u.deliver.dcs.alphabet==
 WMS_GW_ALPHABET_7_BIT_DEFAULT){result=zUfiSms_DispatchWtoi(ts_data_ptr->u.gw_pp.
 u.deliver.user_data.sm_data,ts_data_ptr->u.gw_pp.u.deliver.user_data.sm_len,
 db_data->sms_content);db_data->alphabet=WMS_GW_ALPHABET_7_BIT_DEFAULT;db_data->
-tp_dcs=(unsigned char)(0x718+2771-0x11e9);}return result;}int 
+tp_dcs=(unsigned char)(0x680+7555-0x2401);}return result;}int 
 zUfiSms_FormatSubmitDbdata(T_zUfiSms_ClientTsData*ts_data_ptr,
 T_zUfiSms_DbStoreData*db_data){int result=ZUFI_SUCC;wms_address_s_type*
 address_ptr=NULL;wms_gw_alphabet_e_type tp_dcs=WMS_GW_ALPHABET_MAX32;int i=
-(0x477+6961-0x1fa8);int ind=(0x405+55-0x43c);if((NULL==ts_data_ptr)||(NULL==
+(0x652+4121-0x166b);int ind=(0x5c9+379-0x744);if((NULL==ts_data_ptr)||(NULL==
 db_data)){printf("\x69\x6e\x76\x61\x6c\x69\x64\x20\x69\x6e\x70\x75\x74\x73\x2e")
 ;return ZUFI_FAIL;}address_ptr=&(ts_data_ptr->u.gw_pp.u.submit.address);if((
 WMS_NUMBER_INTERNATIONAL==address_ptr->number_type)){db_data->number[
-(0x559+5765-0x1bde)]=((char)(0x13c4+791-0x16b0));for(i=(0xda4+714-0x106e);i<
-address_ptr->number_of_digits;i++){if((0x2d1+4854-0x15bd)==address_ptr->digits[i
-]){db_data->number[i+(0x64c+5413-0x1b70)]=((char)(0x60a+8461-0x26e7));}else{
-db_data->number[i+(0x1166+4452-0x22c9)]=((char)(0x23b+1482-0x7d5))+address_ptr->
-digits[i];}}}else{for(i=(0x58d+7726-0x23bb);i<address_ptr->number_of_digits;i++)
-{if((0x14a+2978-0xce2)==address_ptr->digits[i]){db_data->number[i]=
-((char)(0x1572+3641-0x237b));}else{db_data->number[i]=
-((char)(0x1483+4639-0x2672))+address_ptr->digits[i];}}}tp_dcs=ts_data_ptr->u.
-gw_pp.u.submit.dcs.alphabet;db_data->sms_class=ts_data_ptr->u.gw_pp.u.submit.dcs
-.msg_class;if(WMS_GW_ALPHABET_8_BIT>=tp_dcs){db_data->tp_dcs=(unsigned char)
-(0x1f2+5928-0x1919);}else if(WMS_GW_ALPHABET_UCS2==tp_dcs){db_data->tp_dcs=(
-unsigned char)(0x54b+8115-0x24fc);}else{printf(
+(0x2263+172-0x230f)]=((char)(0x368+3389-0x107a));for(i=(0x12ab+5134-0x26b9);i<
+address_ptr->number_of_digits;i++){if((0x228+3788-0x10ea)==address_ptr->digits[i
+]){db_data->number[i+(0x8ac+5201-0x1cfc)]=((char)(0x3a1+1021-0x76e));}else{
+db_data->number[i+(0x91a+4402-0x1a4b)]=((char)(0x123a+636-0x1486))+address_ptr->
+digits[i];}}}else{for(i=(0xdc0+3996-0x1d5c);i<address_ptr->number_of_digits;i++)
+{if((0x11f+4435-0x1268)==address_ptr->digits[i]){db_data->number[i]=
+((char)(0x6db+8043-0x2616));}else{db_data->number[i]=((char)(0xf68+5951-0x2677))
++address_ptr->digits[i];}}}tp_dcs=ts_data_ptr->u.gw_pp.u.submit.dcs.alphabet;
+db_data->sms_class=ts_data_ptr->u.gw_pp.u.submit.dcs.msg_class;if(
+WMS_GW_ALPHABET_8_BIT>=tp_dcs){db_data->tp_dcs=(unsigned char)(0x7b+293-0x19f);}
+else if(WMS_GW_ALPHABET_UCS2==tp_dcs){db_data->tp_dcs=(unsigned char)
+(0x87f+967-0xc44);}else{printf(
 "\x69\x6e\x76\x61\x6c\x69\x64\x20\x74\x70\x5f\x64\x63\x73\x3d\x25\x64",tp_dcs);}
 db_data->tp_pid=(unsigned char)ts_data_ptr->u.gw_pp.u.submit.pid;db_data->
 msg_ref=(unsigned char)ts_data_ptr->u.gw_pp.u.submit.message_reference;if(
 ts_data_ptr->u.gw_pp.u.submit.user_data_header_present){db_data->tp_udhi=
-(0xc4f+403-0xde1);}else{db_data->tp_udhi=(0xa0a+5402-0x1f24);}if(db_data->
-tp_udhi==(0xd9f+3255-0x1a55)){for(ind=(0x129+448-0x2e9);ind<ts_data_ptr->u.gw_pp
-.u.submit.user_data.num_headers;ind++){result=zUfiSms_ParseUdhiData(&(
+(0x1a67+2835-0x2579);}else{db_data->tp_udhi=(0xc63+6747-0x26be);}if(db_data->
+tp_udhi==(0xe17+1684-0x14aa)){for(ind=(0x146f+2117-0x1cb4);ind<ts_data_ptr->u.
+gw_pp.u.submit.user_data.num_headers;ind++){result=zUfiSms_ParseUdhiData(&(
 ts_data_ptr->u.gw_pp.u.submit.user_data.headers[ind]),db_data);if(
-ZTE_WMS_CONCAT_SMS_COUNT_MAX<db_data->concat_info[(0x309+7782-0x216e)]){printf(
+ZTE_WMS_CONCAT_SMS_COUNT_MAX<db_data->concat_info[(0xc6f+904-0xff6)]){printf(
 "\x74\x68\x65\x20\x63\x6f\x6e\x63\x61\x74\x20\x73\x6d\x73\x20\x73\x65\x67\x6d\x65\x6e\x74\x20\x69\x73\x20\x6c\x61\x72\x67\x65\x72\x20\x74\x68\x65\x6e\x20\x74\x68\x65\x20\x20\x73\x75\x70\x70\x6f\x72\x74\x65\x64\x20\x73\x65\x67\x6d\x65\x6e\x74\x73\x2c\x73\x6f\x20\x64\x69\x64\x20\x6e\x6f\x74\x20\x64\x65\x61\x6c\x20\x74\x68\x65\x20\x63\x6f\x6e\x63\x61\x74\x20\x73\x6d\x73\x2e"
 );if(WMS_STORAGE_TYPE_NV_V01==db_data->mem_store){zUfiSms_DelModemSms(db_data->
 index);}result=ZUFI_FAIL;}}}if(ts_data_ptr->u.gw_pp.u.submit.dcs.alphabet==
 WMS_GW_ALPHABET_UCS2){result=zUfiSms_DispatchWtoi(ts_data_ptr->u.gw_pp.u.submit.
 user_data.sm_data,ts_data_ptr->u.gw_pp.u.submit.user_data.sm_len,db_data->
 sms_content);db_data->alphabet=WMS_GW_ALPHABET_UCS2;}else if(ts_data_ptr->u.
-gw_pp.u.submit.dcs.alphabet==WMS_GW_ALPHABET_8_BIT){for(ind=(0xb12+5733-0x2177);
+gw_pp.u.submit.dcs.alphabet==WMS_GW_ALPHABET_8_BIT){for(ind=(0xd17+5859-0x23fa);
 ind<ts_data_ptr->u.gw_pp.u.submit.user_data.sm_len;ind++){db_data->sms_content[
-(0x56d+3810-0x144b)*ind]=((char)(0x7fc+2211-0x106f));db_data->sms_content[
-(0x1a5+9296-0x25f1)*ind+(0x38b+2481-0xd3b)]=((char)(0x4d9+8457-0x25b2));db_data
-->sms_content[(0x4a7+8541-0x2600)*ind+(0x14d3+2322-0x1de3)]=g_zUfiSms_DigAscMap[
-((ts_data_ptr->u.gw_pp.u.submit.user_data.sm_data[ind]&(0x432+8101-0x22e7))>>
-(0x206+8896-0x24c2))];db_data->sms_content[(0x51+7125-0x1c22)*ind+
-(0x1e4a+590-0x2095)]=g_zUfiSms_DigAscMap[(ts_data_ptr->u.gw_pp.u.submit.
-user_data.sm_data[ind]&(0x7d4+1989-0xf8a))];db_data->alphabet=
+(0xb59+3346-0x1867)*ind]=((char)(0x23cf+342-0x24f5));db_data->sms_content[
+(0x1861+3758-0x270b)*ind+(0x1501+3564-0x22ec)]=((char)(0xaf3+2636-0x150f));
+db_data->sms_content[(0x313+5546-0x18b9)*ind+(0x12aa+665-0x1541)]=
+g_zUfiSms_DigAscMap[((ts_data_ptr->u.gw_pp.u.submit.user_data.sm_data[ind]&
+(0xd24+4912-0x1f64))>>(0x1321+4944-0x266d))];db_data->sms_content[
+(0xa57+2440-0x13db)*ind+(0x1007+2891-0x1b4f)]=g_zUfiSms_DigAscMap[(ts_data_ptr->
+u.gw_pp.u.submit.user_data.sm_data[ind]&(0x3f0+36-0x405))];db_data->alphabet=
 WMS_GW_ALPHABET_UCS2;}}else if(ts_data_ptr->u.gw_pp.u.submit.dcs.alphabet==
 WMS_GW_ALPHABET_7_BIT_DEFAULT){result=zUfiSms_DispatchWtoi(ts_data_ptr->u.gw_pp.
 u.submit.user_data.sm_data,ts_data_ptr->u.gw_pp.u.submit.user_data.sm_len,
 db_data->sms_content);db_data->alphabet=WMS_GW_ALPHABET_7_BIT_DEFAULT;db_data->
-tp_dcs=(unsigned char)(0x760+1296-0xc6e);}return result;}int InvertNumbers(const
- char*pSrc,char*pDst,int nSrcLength){int nDstLength;char ch;int i=
-(0x1f5a+1298-0x246c);if(pSrc==NULL||pDst==NULL||nSrcLength<(0xdca+1404-0x1346)){
-return-(0x9+5426-0x153a);}nDstLength=nSrcLength;for(i=(0xead+3606-0x1cc3);i<
-nSrcLength;i+=(0xd73+2354-0x16a3)){ch=*pSrc++;*pDst++=*pSrc++;*pDst++=ch;}if(
-nSrcLength&(0xf87+5505-0x2507)){*(pDst-(0x4ac+1452-0xa56))=
-((char)(0x293+3728-0x10dd));nDstLength++;}*pDst='\0';return nDstLength;}int 
+tp_dcs=(unsigned char)(0x79f+5902-0x1eab);}return result;}int InvertNumbers(
+const char*pSrc,char*pDst,int nSrcLength){int nDstLength;char ch;int i=
+(0x11d1+2718-0x1c6f);if(pSrc==NULL||pDst==NULL||nSrcLength<(0x934+5857-0x2015)){
+return-(0xec6+4258-0x1f67);}nDstLength=nSrcLength;for(i=(0xc9d+806-0xfc3);i<
+nSrcLength;i+=(0x756+5403-0x1c6f)){ch=*pSrc++;*pDst++=*pSrc++;*pDst++=ch;}if(
+nSrcLength&(0xbc6+5150-0x1fe3)){*(pDst-(0x1405+3503-0x21b2))=
+((char)(0x12d+6586-0x1aa1));nDstLength++;}*pDst='\0';return nDstLength;}int 
 code_is_gsm7(const SMS_PARAM*pSrc,unsigned char buf[],int nLength){if(pSrc->
-TP_UDHI==(0x861+6015-0x1fdf)){buf[(0x196+6499-0x1af6)]=(unsigned char)nLength;
-buf[(0x1bf1+2722-0x268f)]=(unsigned char)pSrc->TP_UD[(0x9cf+165-0xa74)];buf[
-(0xe16+5115-0x220c)]=(0x55a+5473-0x1abb);buf[(0x5f8+932-0x996)]=(unsigned char)
-pSrc->TP_UD[(0x995+4771-0x1c36)];buf[(0xe9+4293-0x11a7)]=(unsigned char)pSrc->
-TP_UD[(0xbc2+2561-0x15c0)];buf[(0x1037+1345-0x1570)]=(unsigned char)pSrc->TP_UD[
-(0xc8a+1568-0x12a6)];buf[(0xc12+6517-0x257e)]=(unsigned char)pSrc->TP_UD[
-(0x203b+342-0x218c)];buf[(0x1352+4420-0x248c)]=(unsigned char)pSrc->TP_UD[
-(0x5e2+2528-0xfbb)];buf[(0x1a6b+2960-0x25f1)]=(unsigned char)(buf[
-(0x1041+4275-0x20ea)]<<(0x125+3557-0xf09));nLength=nLength-(0x16d3+3189-0x2341);
-nLength=Encode7bit(&(pSrc->TP_UD[(0x16eb+2609-0x2114)]),&buf[
-(0x15e0+4277-0x268a)],nLength+(0x17ea+494-0x19d7))+(0x12d4+3158-0x1f26)+
-(0x1103+4322-0x21df);
-#if (0x80+619-0x2eb)
-nLength+=(0x112+4059-0x10eb);
+TP_UDHI==(0x7fc+4348-0x18f7)){buf[(0x144b+2931-0x1fbb)]=(unsigned char)nLength;
+buf[(0x24f+7463-0x1f72)]=(unsigned char)pSrc->TP_UD[(0xa25+4447-0x1b84)];buf[
+(0x870+7246-0x24b9)]=(0x412+376-0x58a);buf[(0x813+6838-0x22c3)]=(unsigned char)
+pSrc->TP_UD[(0x374+8998-0x2698)];buf[(0x80c+6829-0x22b2)]=(unsigned char)pSrc->
+TP_UD[(0x104c+3688-0x1eb1)];buf[(0x16b8+3568-0x24a0)]=(unsigned char)pSrc->TP_UD
+[(0x1771+525-0x197a)];buf[(0x16ab+1762-0x1d84)]=(unsigned char)pSrc->TP_UD[
+(0x1269+815-0x1593)];buf[(0x18f+6420-0x1a99)]=(unsigned char)pSrc->TP_UD[
+(0x78b+1827-0xea7)];buf[(0x13d9+2784-0x1eaf)]=(unsigned char)(buf[
+(0x1a3c+315-0x1b6d)]<<(0xb7d+6099-0x234f));nLength=nLength-(0x19b+8538-0x22ee);
+nLength=Encode7bit(&(pSrc->TP_UD[(0x224b+257-0x2344)]),&buf[(0xf7f+4976-0x22e4)]
+,nLength+(0x4ea+3991-0x1480))+(0xe52+1131-0x12b9)+(0xaa1+1209-0xf54);
+#if (0x422+5136-0x1832)
+nLength+=(0x5ca+4826-0x18a2);
 #endif

-}else{nLength=pSrc->TP_UDLength;buf[(0x1f3a+1914-0x26b1)]=nLength;nLength=
-Encode7bit(pSrc->TP_UD,&buf[(0xb3c+548-0xd5c)],nLength+(0x1a32+1319-0x1f58))+
-(0x1f5+2313-0xafa);}at_print(LOG_DEBUG,
+}else{nLength=pSrc->TP_UDLength;buf[(0xc1+4266-0x1168)]=nLength;nLength=
+Encode7bit(pSrc->TP_UD,&buf[(0x1406+368-0x1572)],nLength+(0x413+4298-0x14dc))+
+(0x2ef+4096-0x12eb);}at_print(LOG_DEBUG,
 "\x62\x75\x66\x20\x69\x73\x20\x25\x73" "\n",buf);return nLength;}int 
 code_is_ucs2(const SMS_PARAM*pSrc,unsigned char buf[],int nLength){nLength=
-strlen(pSrc->TP_UD);if(pSrc->TP_UDHI==(0x21f+2590-0xc3c)){buf[
-(0x953+4785-0x1c01)]=(unsigned char)nLength;buf[(0x3dd+521-0x5e2)]=(unsigned 
-char)pSrc->TP_UD[(0x104+5630-0x1702)];buf[(0x12e4+3421-0x203c)]=
-(0xc14+2402-0x1576);buf[(0xe98+4048-0x1e62)]=(unsigned char)pSrc->TP_UD[
-(0xab7+4880-0x1dc5)];buf[(0x261+7029-0x1dcf)]=(unsigned char)pSrc->TP_UD[
-(0xdc4+3928-0x1d19)];buf[(0xb6c+440-0xd1c)]=(unsigned char)pSrc->TP_UD[
-(0x34+3670-0xe86)];buf[(0x1611+250-0x1702)]=(unsigned char)pSrc->TP_UD[
-(0xcb3+959-0x106d)];buf[(0xe14+236-0xefd)]=(unsigned char)(EncodeUcs2(&(pSrc->
-TP_UD[(0x201+8564-0x236f)]),&buf[(0x10ed+515-0x12e6)],nLength-
-(0x160b+2784-0x20e5))+(0x8c2+990-0xc9a));nLength=buf[(0xfad+5062-0x2370)]+
-(0x1015+471-0x11e8);}else{buf[(0x7c3+7275-0x242b)]=EncodeUcs2(pSrc->TP_UD,&buf[
-(0xe17+48-0xe43)],nLength);nLength=buf[(0xf98+4512-0x2135)]+(0x18eb+3537-0x26b8)
-;}return nLength;}int Encode8bit(const char*pSrc,unsigned char*pDst,int 
-nSrcLength){if(pSrc==NULL||pDst==NULL||nSrcLength<(0x6dd+7587-0x2480)){return-
-(0x418+1947-0xbb2);}memcpy(pDst,pSrc,nSrcLength);return nSrcLength;}int 
-EncodePdu_Submit(const SMS_PARAM*pSrc,char*pDst){int nLength=
-(0x12e0+2374-0x1c26);int nDstLength=(0x83f+1461-0xdf4);unsigned char buf[
-(0x3b2+6726-0x1cf8)]={(0x4d6+905-0x85f)};char tmpSCA[(0xa8f+3700-0x18df)]={
-(0x79a+6658-0x219c)};int check_udl=(0x4e5+4440-0x163d);memset(tmpSCA,
-(0x1942+2694-0x23c8),sizeof(tmpSCA));if(pSrc==NULL||pDst==NULL){return-
-(0x2e9+2025-0xad1);}
-#if (0x11ba+4361-0x22c2)
+strlen(pSrc->TP_UD);if(pSrc->TP_UDHI==(0x1758+198-0x181d)){buf[
+(0x1251+4059-0x2229)]=(unsigned char)nLength;buf[(0x1a50+600-0x1ca4)]=(unsigned 
+char)pSrc->TP_UD[(0x1836+2952-0x23be)];buf[(0x1758+3841-0x2654)]=
+(0xb77+6989-0x26c4);buf[(0x19e7+3154-0x2633)]=(unsigned char)pSrc->TP_UD[
+(0x13c7+903-0x174c)];buf[(0x555+2501-0xf13)]=(unsigned char)pSrc->TP_UD[
+(0x13a+3120-0xd67)];buf[(0xf75+1050-0x1387)]=(unsigned char)pSrc->TP_UD[
+(0xcd7+5739-0x233e)];buf[(0x1522+4566-0x26ef)]=(unsigned char)pSrc->TP_UD[
+(0x515+8342-0x25a6)];buf[(0x61f+398-0x7aa)]=(unsigned char)(EncodeUcs2(&(pSrc->
+TP_UD[(0x794+307-0x8c1)]),&buf[(0x70b+5303-0x1bb8)],nLength-(0x70f+7255-0x2360))
++(0xbd3+1999-0x139c));nLength=buf[(0x58+6086-0x181b)]+(0xd28+4729-0x1f9d);}else{
+buf[(0x1072+5722-0x26c9)]=EncodeUcs2(pSrc->TP_UD,&buf[(0x1195+2478-0x1b3f)],
+nLength);nLength=buf[(0xff1+5387-0x24f9)]+(0x12c2+4421-0x2403);}return nLength;}
+int Encode8bit(const char*pSrc,unsigned char*pDst,int nSrcLength){if(pSrc==NULL
+||pDst==NULL||nSrcLength<(0x11b4+2013-0x1991)){return-(0x773+8045-0x26df);}
+memcpy(pDst,pSrc,nSrcLength);return nSrcLength;}int EncodePdu_Submit(const 
+SMS_PARAM*pSrc,char*pDst){int nLength=(0xe55+3801-0x1d2e);int nDstLength=
+(0xdf+3785-0xfa8);unsigned char buf[(0xf50+1846-0x1586)]={(0x173+248-0x26b)};
+char tmpSCA[(0x136f+1128-0x17b3)]={(0x719+5918-0x1e37)};int check_udl=
+(0xd37+5228-0x21a3);memset(tmpSCA,(0x11dc+5332-0x26b0),sizeof(tmpSCA));if(pSrc==
+NULL||pDst==NULL){return-(0x11a9+4794-0x2462);}
+#if (0x38f+2258-0xc60)
 printf(
 "\x5b\x53\x4d\x53\x63\x6f\x72\x65\x6d\x5d\x20\x45\x6e\x63\x6f\x64\x65\x50\x64\x75\x5f\x53\x75\x62\x6d\x69\x74\x20\x6d\x61\x6b\x65\x20\x70\x64\x75\x20\x64\x61\x74\x61" "\n"
 );printf(
@@ -908,392 +907,394 @@
 "\x5b\x53\x4d\x53\x63\x6f\x72\x65\x6d\x5d\x73\x63\x61\x3a\x25\x73" "\n",pSrc->
 SCA);
 #endif

-nLength=strlen(pSrc->SCA);buf[(0x176c+2161-0x1fdd)]=(char)(((nLength)&
-(0x109c+4524-0x2247))==(0x1673+4132-0x2697)?(nLength):nLength+
-(0x17af+1455-0x1d5d))/(0x2ed+3568-0x10db)+(0x1c5+3452-0xf40);buf[
-(0x19d6+991-0x1db4)]=(0x7a1+7787-0x258b);strncpy(tmpSCA,pSrc->SCA,sizeof(tmpSCA)
--(0x7c+4171-0x10c6));if(!(strncmp(pSrc->SCA,"\x30\x30\x38\x36",
-(0x12c2+43-0x12e9)))){memset(tmpSCA,(0x39a+8411-0x2475),sizeof(tmpSCA));nLength=
-nLength-(0xf44+2516-0x1917);
-#if (0x1dc+6693-0x1c00)
-nLength=nLength-(0xeb9+440-0x1070);strncpy(tmpSCA,&(pSrc->SCA[
-(0x145d+480-0x163b)]),sizeof(tmpSCA)-(0x1520+4304-0x25ef));
+nLength=strlen(pSrc->SCA);buf[(0x1181+2-0x1183)]=(char)(((nLength)&
+(0x5f5+7104-0x21b4))==(0xd4f+598-0xfa5)?(nLength):nLength+(0x13eb+2080-0x1c0a))/
+(0x173+1212-0x62d)+(0x796+167-0x83c);buf[(0x963+5395-0x1e75)]=(0x96+7538-0x1d87)
+;strncpy(tmpSCA,pSrc->SCA,sizeof(tmpSCA)-(0xfd6+766-0x12d3));if(!(strncmp(pSrc->
+SCA,"\x30\x30\x38\x36",(0x103+4108-0x110b)))){memset(tmpSCA,(0x2e1+7023-0x1e50),
+sizeof(tmpSCA));nLength=nLength-(0x787+6144-0x1f86);
+#if (0x301+1345-0x841)
+nLength=nLength-(0xd37+1838-0x1464);strncpy(tmpSCA,&(pSrc->SCA[
+(0x161+4161-0x11a0)]),sizeof(tmpSCA)-(0x1734+1918-0x1eb1));
 #else

-tmpSCA[(0x5d3+7284-0x2247)]=((char)(0x1981+954-0x1d10));strcpy(&(tmpSCA[
-(0x1acf+282-0x1be8)]),&(pSrc->SCA[(0xc2+5017-0x1459)]));
+tmpSCA[(0x583+6501-0x1ee8)]=((char)(0x93+7681-0x1e69));strcpy(&(tmpSCA[
+(0x502+4004-0x14a5)]),&(pSrc->SCA[(0x141f+2431-0x1d9c)]));
 #endif

-buf[(0x298+2572-0xca4)]=(char)((nLength&(0x100+7534-0x1e6d))==
-(0xe6d+5505-0x23ee)?nLength:nLength+(0x300+1984-0xabf))/(0x26cf+11-0x26d8)+
-(0xb77+6592-0x2536);buf[(0xf19+3905-0x1e59)]=(0x5b0+2173-0xd9c);}else if(
-((char)(0x105d+2054-0x1838))==pSrc->SCA[(0xa3c+3258-0x16f6)]){memset(tmpSCA,
-(0xa08+3461-0x178d),sizeof(tmpSCA));
-#if (0x141+2295-0xa37)
-nLength=nLength-(0xc4d+1327-0x117b);strncpy(tmpSCA,&(pSrc->SCA[
-(0x15a0+2561-0x1fa0)]),sizeof(tmpSCA)-(0x949+683-0xbf3));
+buf[(0xbc0+5494-0x2136)]=(char)((nLength&(0x411+5557-0x19c5))==
+(0xb86+4920-0x1ebe)?nLength:nLength+(0xb4a+2729-0x15f2))/(0xef7+3960-0x1e6d)+
+(0x1ff3+997-0x23d7);buf[(0x14e0+3095-0x20f6)]=(0xf81+677-0x1195);}else if(
+((char)(0xd03+2258-0x15aa))==pSrc->SCA[(0x8d2+4602-0x1acc)]){memset(tmpSCA,
+(0x1315+3329-0x2016),sizeof(tmpSCA));
+#if (0xfc1+5084-0x239c)
+nLength=nLength-(0x2032+790-0x2347);strncpy(tmpSCA,&(pSrc->SCA[
+(0xf7b+549-0x119f)]),sizeof(tmpSCA)-(0x14d+6939-0x1c67));
 #else

 strcpy(tmpSCA,pSrc->SCA);
 #endif

-buf[(0xa66+4351-0x1b65)]=(char)((nLength&(0x107f+5146-0x2498))==
-(0xb18+4617-0x1d21)?(nLength):nLength+(0x1172+1182-0x160f))/(0x2f3+7499-0x203c)+
-(0xa34+6332-0x22ef);buf[(0x1c9c+1122-0x20fd)]=(0x1ad2+1940-0x21d5);}
-#if (0x1907+3210-0x2590)
+buf[(0x3c4+2236-0xc80)]=(char)((nLength&(0x73b+7809-0x25bb))==
+(0x1b17+497-0x1d08)?(nLength):nLength+(0xc38+3570-0x1a29))/(0x5d5+7554-0x2355)+
+(0x118f+2525-0x1b6b);buf[(0x1ff1+1270-0x24e6)]=(0x16b5+3011-0x21e7);}
+#if (0x10d3+5472-0x2632)
 printf(
 "\x5b\x53\x4d\x53\x63\x6f\x72\x65\x6d\x5d\x70\x64\x73\x74\x32\x3a\x25\x73" "\n",
 pDst);
 #endif

-if(nLength<(0xd54+4397-0x1e80)||nLength>=sizeof(tmpSCA))return-
-(0xc94+3428-0x19f7);nDstLength=Bytes2String(buf,pDst,(0x1907+708-0x1bc9));
+if(nLength<(0xd16+4617-0x1f1e)||nLength>=sizeof(tmpSCA))return-
+(0xdf0+2370-0x1731);nDstLength=Bytes2String(buf,pDst,(0x1072+3162-0x1cca));
 nDstLength+=InvertNumbers(tmpSCA,&pDst[nDstLength],nLength);
-#if (0x712+3212-0x139d)
+#if (0xf76+811-0x12a0)
 printf(
 "\x5b\x53\x4d\x53\x63\x6f\x72\x65\x6d\x5d\x70\x64\x73\x74\x33\x3a\x25\x73" "\n",
 pDst);
 #endif

-if(pSrc->TPA[(0x606+4017-0x15b7)]==((char)(0x165d+2970-0x21cc))){nLength=strlen(
-&(pSrc->TPA[(0x1133+162-0x11d4)]));}else{nLength=strlen(pSrc->TPA);}if(pSrc->
-TP_UDHI==(0x50a+1167-0x999)){if(pSrc->TP_SRR==(0xb91+2070-0x13a7)){buf[
-(0x3b4+1022-0x7b2)]=(0xa46+5145-0x1e4e);}if(pSrc->TP_SRR==(0x2b+1681-0x6bb)){buf
-[(0x4fa+390-0x680)]=(0x1403+2134-0x1c28);}}if(pSrc->TP_UDHI==(0xa91+5939-0x21c3)
-){if(pSrc->TP_SRR==(0x20f8+671-0x2397)){buf[(0x953+2810-0x144d)]=
-(0x10fb+5395-0x25bd);}if(pSrc->TP_SRR==(0x8b8+2260-0x118b)){buf[
-(0x19d4+2408-0x233c)]=(0x153+5426-0x1614);}}buf[(0x1581+3894-0x24b6)]=
-(0x7bf+1409-0xd40);buf[(0x13e9+1130-0x1851)]=(char)nLength;if(pSrc->TPA[
-(0x18ea+1262-0x1dd8)]==((char)(0xdf3+2525-0x17a5))){buf[(0x17a+8534-0x22cd)]=
-(0xc67+403-0xd69);nDstLength+=Bytes2String(buf,&pDst[nDstLength],
-(0x1127+1328-0x1653));nDstLength+=InvertNumbers(&(pSrc->TPA[(0xf43+3310-0x1c30)]
-),&pDst[nDstLength],nLength);}else if(!(strncmp(pSrc->TPA,"\x30\x30\x38\x36",
-(0x9b2+4717-0x1c1b)))){buf[(0x1a4+3570-0xf94)]=(char)nLength-(0x9a7+2729-0x144e)
-;buf[(0x1ef+2345-0xb15)]=(0x1861+1354-0x1d1a);nDstLength+=Bytes2String(buf,&pDst
-[nDstLength],(0xd20+4074-0x1d06));nDstLength+=InvertNumbers(&(pSrc->TPA[
-(0xbc6+5619-0x21b7)]),&pDst[nDstLength],nLength-(0xcc5+1397-0x1238));}else{buf[
-(0x312+5780-0x19a3)]=(0x990+1876-0x1063);nDstLength+=Bytes2String(buf,&pDst[
-nDstLength],(0x1339+2318-0x1c43));nDstLength+=InvertNumbers(pSrc->TPA,&pDst[
-nDstLength],nLength);}
-#if (0x1933+3497-0x26db)
+if(pSrc->TPA[(0x22f7+64-0x2337)]==((char)(0x1fc+6127-0x19c0))){nLength=strlen(&(
+pSrc->TPA[(0x7d9+1279-0xcd7)]));}else{nLength=strlen(pSrc->TPA);}if(pSrc->
+TP_UDHI==(0x680+4678-0x18c6)){if(pSrc->TP_SRR==(0x2198+925-0x2535)){buf[
+(0x1328+3992-0x22c0)]=(0x171f+2481-0x20bf);}if(pSrc->TP_SRR==(0x1c28+225-0x1d08)
+){buf[(0xd6+2919-0xc3d)]=(0xfcb+271-0x10a9);}}if(pSrc->TP_UDHI==
+(0xc56+5880-0x234d)){if(pSrc->TP_SRR==(0x8ef+5477-0x1e54)){buf[
+(0x1c85+2199-0x251c)]=(0x1051+1003-0x13eb);}if(pSrc->TP_SRR==(0x562+2537-0xf4a))
+{buf[(0x35b+3079-0xf62)]=(0x11e4+1204-0x1627);}}buf[(0x882+1261-0xd6e)]=
+(0x177+3436-0xee3);buf[(0x14d+7730-0x1f7d)]=(char)nLength;if(pSrc->TPA[
+(0x28a+264-0x392)]==((char)(0x20d+1505-0x7c3))){buf[(0x3cb+4349-0x14c5)]=
+(0xb3f+5300-0x1f62);nDstLength+=Bytes2String(buf,&pDst[nDstLength],
+(0x94f+6024-0x20d3));nDstLength+=InvertNumbers(&(pSrc->TPA[(0x13b2+604-0x160d)])
+,&pDst[nDstLength],nLength);}else if(!(strncmp(pSrc->TPA,"\x30\x30\x38\x36",
+(0x1214+2126-0x1a5e)))){buf[(0xb91+3737-0x1a28)]=(char)nLength-
+(0x284+8171-0x226d);buf[(0x28+537-0x23e)]=(0x1970+2952-0x2467);nDstLength+=
+Bytes2String(buf,&pDst[nDstLength],(0xbd9+4847-0x1ec4));nDstLength+=
+InvertNumbers(&(pSrc->TPA[(0xb5f+741-0xe42)]),&pDst[nDstLength],nLength-
+(0x1761+3368-0x2487));}else{buf[(0x716+6906-0x220d)]=(0x1324+607-0x1502);
+nDstLength+=Bytes2String(buf,&pDst[nDstLength],(0x166+6813-0x1bff));nDstLength+=
+InvertNumbers(pSrc->TPA,&pDst[nDstLength],nLength);}
+#if (0x16ad+849-0x19fd)
 printf(
 "\x5b\x53\x4d\x53\x63\x6f\x72\x65\x6d\x5d\x70\x64\x73\x74\x34\x3a\x25\x73" "\n",
 pDst);
 #endif

-nLength=(int)pSrc->TP_UDLength;buf[(0x10ab+2708-0x1b3f)]=pSrc->TP_PID;buf[
-(0x4ba+674-0x75b)]=pSrc->TP_DCS;buf[(0x53a+226-0x61a)]=pSrc->TP_VP;if(pSrc->
+nLength=(int)pSrc->TP_UDLength;buf[(0x12f2+3132-0x1f2e)]=pSrc->TP_PID;buf[
+(0x751+425-0x8f9)]=pSrc->TP_DCS;buf[(0x3e1+3585-0x11e0)]=pSrc->TP_VP;if(pSrc->
 TP_DCS==CODE_GSM7){nLength=code_is_gsm7(pSrc,buf,nLength);}else if(pSrc->TP_DCS
 ==CODE_UCS2){nLength=code_is_ucs2(pSrc,buf,nLength);}else{nLength=strlen(pSrc->
-TP_UD);if(pSrc->TP_UDHI==(0x1012+2103-0x1848)){buf[(0x1edc+1262-0x23c7)]=(
-unsigned char)nLength;buf[(0x10eb+1194-0x1591)]=(unsigned char)pSrc->TP_UD[
-(0x495+8659-0x2668)];buf[(0x8cd+103-0x92f)]=(0x4c0+6055-0x1c67);buf[
-(0x25ad+94-0x2605)]=(unsigned char)pSrc->TP_UD[(0xad7+607-0xd34)];buf[
-(0x1173+5516-0x26f8)]=(unsigned char)pSrc->TP_UD[(0xb51+4855-0x1e45)];buf[
-(0x10e0+3289-0x1db1)]=(unsigned char)pSrc->TP_UD[(0x141+8837-0x23c2)];buf[
-(0xde3+6325-0x268f)]=(unsigned char)pSrc->TP_UD[(0x53d+5630-0x1b36)];if(nLength-
-(0x7a2+7517-0x24f9)<=(0x1290+2507-0x1c5b)||nLength-(0x1002+1540-0x1600)>=sizeof(
-buf)-(0xc8a+6564-0x2624))return-(0x586+443-0x740);buf[(0x321+8240-0x234e)]=(
-unsigned char)(Encode8bit(&(pSrc->TP_UD[(0x68b+3622-0x14ab)]),&buf[
-(0x54b+440-0x6f9)],(unsigned short)(nLength-(0xb12+1273-0x1005)))+
-(0x344+2623-0xd7d));nLength=buf[(0x1fa9+1722-0x2660)]+(0x727+3611-0x153e);}else{
-if(nLength<=(0x862+3784-0x172a)||nLength>=sizeof(buf)-(0x800+5737-0x1e65))return
--(0x6e3+5394-0x1bf4);buf[(0xe50+696-0x1105)]=Encode8bit(pSrc->TP_UD,&buf[
-(0x14c0+1169-0x194d)],nLength);nLength=buf[(0x6c5+5229-0x1b2f)]+
-(0x663+4921-0x1998);}}check_udl=nLength-(0x480+463-0x64b);nDstLength+=
+TP_UD);if(pSrc->TP_UDHI==(0x3d9+5268-0x186c)){buf[(0x516+3637-0x1348)]=(unsigned
+ char)nLength;buf[(0x166f+453-0x1830)]=(unsigned char)pSrc->TP_UD[
+(0x1c78+1762-0x235a)];buf[(0xf0+7370-0x1db5)]=(0x22ff+855-0x2656);buf[
+(0x229+7610-0x1fdd)]=(unsigned char)pSrc->TP_UD[(0xa57+1263-0xf44)];buf[
+(0xd11+4280-0x1dc2)]=(unsigned char)pSrc->TP_UD[(0x1638+3123-0x2268)];buf[
+(0x1c66+1892-0x23c2)]=(unsigned char)pSrc->TP_UD[(0x3f9+628-0x669)];buf[
+(0x350+6253-0x1bb4)]=(unsigned char)pSrc->TP_UD[(0x315+6360-0x1be8)];if(nLength-
+(0x695+1021-0xa8c)<=(0x9d4+6929-0x24e5)||nLength-(0x1052+2522-0x1a26)>=sizeof(
+buf)-(0x2a5+6236-0x1af7))return-(0x790+849-0xae0);buf[(0x4b0+5049-0x1866)]=(
+unsigned char)(Encode8bit(&(pSrc->TP_UD[(0x625+7839-0x24be)]),&buf[
+(0x6cd+958-0xa81)],(unsigned short)(nLength-(0x17e8+2304-0x20e2)))+
+(0xc19+5381-0x2118));nLength=buf[(0x976+2197-0x1208)]+(0x1810+2353-0x213d);}else
+{if(nLength<=(0x2356+779-0x2661)||nLength>=sizeof(buf)-(0x42b+4382-0x1545))
+return-(0x16d+6275-0x19ef);buf[(0x1835+1070-0x1c60)]=Encode8bit(pSrc->TP_UD,&buf
+[(0x917+3454-0x1691)],nLength);nLength=buf[(0x1ea8+453-0x206a)]+
+(0xaec+3682-0x194a);}}check_udl=nLength-(0xd86+3568-0x1b72);nDstLength+=
 Bytes2String(buf,&pDst[nDstLength],nLength);sc_cfg_set(NV_CHECK_UDL,"");if(
-check_udl>(0x488+5976-0x1b54)){sc_cfg_set(NV_CHECK_UDL,"\x65\x72\x72\x6f\x72");}
-#if (0x2045+32-0x2064)
+check_udl>(0x1e2d+2258-0x2673)){sc_cfg_set(NV_CHECK_UDL,"\x65\x72\x72\x6f\x72");
+}
+#if (0x23b5+208-0x2484)
 printf(
 "\x5b\x53\x4d\x53\x63\x6f\x72\x65\x6d\x5d\x20\x45\x6e\x63\x6f\x64\x65\x50\x64\x75\x5f\x53\x75\x62\x6d\x69\x74\x20\x65\x6e\x64\x20\x6d\x61\x6b\x65\x20\x70\x64\x75\x20\x64\x61\x74\x61" "\n"
 );printf(
 "\x5b\x53\x4d\x53\x63\x6f\x72\x65\x6d\x5d\x6c\x65\x6e\x3a\x25\x64\x2c\x20\x74\x70\x75\x64\x3a\x25\x73" "\n"
 ,nDstLength,pSrc->TP_UD);
 #endif

-#if (0x20d1+1577-0x26f9)
+#if (0x168f+2106-0x1ec8)
 printf(
 "\x5b\x53\x4d\x53\x63\x6f\x72\x65\x6d\x5d\x70\x64\x73\x74\x35\x3a\x25\x73" "\n",
 pDst);
 #endif

 return nDstLength;}int Decode7bit(const unsigned char*pSrc,char*pDst,int 
 nSrcLength){int nSrc;int nDst;int nByte;unsigned char nLeft;if(pSrc==NULL||pDst
-==NULL||nSrcLength<(0x783+7731-0x25b6)){return-(0x209c+455-0x2262);}nSrc=
-(0xcfc+4356-0x1e00);nDst=(0x908+2886-0x144e);nByte=(0x2116+606-0x2374);nLeft=
-(0x7b8+1146-0xc32);while(nSrc<nSrcLength){*pDst=((*pSrc<<nByte)|nLeft)&
-(0x653+6425-0x1eed);nLeft=*pSrc>>((0x12c+2743-0xbdc)-nByte);pDst++;nDst++;nByte
-++;if(nByte==(0x6d1+1360-0xc1a)){*pDst=nLeft;pDst++;nDst++;nByte=
-(0x1281+2390-0x1bd7);nLeft=(0x5e3+6221-0x1e30);}pSrc++;nSrc++;}*pDst='\0';return
- nDst;}int DecodePushPdu(const char*pSrcPdu,SMS_PARAM*pDst){int nDstLength=
-(0x1510+4473-0x2689);unsigned char tmp=(0x312+5306-0x17cc);int ud_length=
-(0x81a+7552-0x259a);unsigned char buf[(0x2a3+2090-0x9cd)]={(0x1668+1493-0x1c3d)}
-;char temp_num[(0x64f+657-0x87c)]={(0x1121+277-0x1236)};unsigned char 
-first_octet=(0x1546+2522-0x1f20);unsigned char udhl=(0xc64+6001-0x23d5);unsigned
- int halftmp=(0xfd6+1574-0x15fc);char tp_ra[(0x1489+3584-0x2286)]={
-(0x285+1649-0x8f6)};int tmplen=(0x1bc0+1697-0x2261);unsigned char IEIDL;int 
-pushType=(0xcd5+6378-0x25bf);const char*pSrc=pSrcPdu;if(pSrcPdu==NULL||pDst==
+==NULL||nSrcLength<(0x24f+4808-0x1517)){return-(0x13d+6573-0x1ae9);}nSrc=
+(0x9ff+146-0xa91);nDst=(0xa45+7345-0x26f6);nByte=(0x222+3600-0x1032);nLeft=
+(0xebc+681-0x1165);while(nSrc<nSrcLength){*pDst=((*pSrc<<nByte)|nLeft)&
+(0x19ec+265-0x1a76);nLeft=*pSrc>>((0xe35+3361-0x1b4f)-nByte);pDst++;nDst++;nByte
+++;if(nByte==(0x1888+2745-0x233a)){*pDst=nLeft;pDst++;nDst++;nByte=
+(0x707+1583-0xd36);nLeft=(0x10e9+522-0x12f3);}pSrc++;nSrc++;}*pDst='\0';return 
+nDst;}int DecodePushPdu(const char*pSrcPdu,SMS_PARAM*pDst){int nDstLength=
+(0x8d1+1176-0xd69);unsigned char tmp=(0x712+3311-0x1401);int ud_length=
+(0x70d+530-0x91f);unsigned char buf[(0xce1+2409-0x154a)]={(0x870+7790-0x26de)};
+char temp_num[(0xca2+6445-0x256b)]={(0x711+6103-0x1ee8)};unsigned char 
+first_octet=(0x6fd+2120-0xf45);unsigned char udhl=(0x143a+2117-0x1c7f);unsigned 
+int halftmp=(0x1347+4738-0x25c9);char tp_ra[(0x1087+1251-0x1567)]={
+(0x1c52+2072-0x246a)};int tmplen=(0x1360+1051-0x177b);unsigned char IEIDL;int 
+pushType=(0x1a02+2786-0x24e4);const char*pSrc=pSrcPdu;if(pSrcPdu==NULL||pDst==
 NULL){printf(
 "\x44\x65\x63\x6f\x64\x65\x50\x75\x73\x68\x50\x64\x75\x20\x70\x61\x72\x61\x20\x6e\x75\x6c\x6c\x2e\x20" "\n"
-);return-(0x399+3732-0x122c);}String2Bytes(pSrc,&tmp,(0x1c62+906-0x1fea));
+);return-(0x1aff+2692-0x2582);}String2Bytes(pSrc,&tmp,(0x23+4105-0x102a));
 at_print(LOG_DEBUG,
 "\x44\x65\x63\x6f\x64\x65\x50\x75\x73\x68\x50\x64\x75\x20\x74\x6d\x70\x20\x3d\x20\x25\x64\x2e" "\n"
-,tmp);if(tmp==(0x888+2826-0x1392)){pSrc+=(0x3e8+3686-0x124c);}else{tmp=(tmp-
-(0x75b+4391-0x1881))*(0x1f9+8287-0x2256);pSrc+=(0xb96+2502-0x1558);if(tmp>
-(0x257+8388-0x22fb)){SerializeNumbers_sms(pSrc,pDst->SCA,(0x2a3+2981-0xe28));tmp
-=(0xd64+344-0xe9c);}else{SerializeNumbers_sms(pSrc,pDst->SCA,tmp);}pSrc+=tmp;}
-String2Bytes(pSrc,&tmp,(0x13b+5279-0x15d8));first_octet=tmp;pSrc+=
-(0xff9+5254-0x247d);String2Bytes(pSrc,&tmp,(0x342+2724-0xde4));halftmp=tmp;if(
-tmp&(0x1050+4098-0x2051))tmp+=(0x240+924-0x5db);pSrc+=(0x9f4+2491-0x13ad);memset
-(tp_ra,(0x1034+2132-0x1888),sizeof(tp_ra));String2Bytes(pSrc,tp_ra,
-(0xc6b+21-0xc7e));pSrc+=(0x9f5+4316-0x1acf);if((tp_ra[(0x517+1958-0xcbd)]&
-(0x1a47+1412-0x1f7b))==(0x389+591-0x588)){char tempra[(0x18a1+1124-0x1c85)];char
- acAsc[(0xa94+5823-0x20d3)];if(halftmp>=(0xc5b+5862-0x2333)){halftmp=(tmp/
-(0x19d5+134-0x1a59))/(0x90+9449-0x2572)+(tmp/(0x1c0+3650-0x1000));}else{halftmp=
-tmp/(0x13cc+4530-0x257c);}memset(tempra,(0x167d+1409-0x1bfe),sizeof(tempra));
-memcpy(tempra,pSrc,tmp);memset(acAsc,(0x16a9+3668-0x24fd),sizeof(acAsc));
-nDstLength=String2Bytes(tempra,buf,halftmp&(0x35b+4417-0x1495)?(int)halftmp*
-(0x81+198-0x140)/(0x136d+951-0x1720)+(0xd55+429-0xf00):(int)halftmp*
-(0x4aa+2706-0xf35)/(0x115+1064-0x539));halftmp=Decode7bit(buf,acAsc,nDstLength);
-memset(pDst->TPA,(0x1bd8+2333-0x24f5),sizeof(pDst->TPA));if(halftmp>
-(0x219+1750-0x8cf)){memcpy(pDst->TPA,acAsc,(0x102a+4194-0x206c));tmp=
-(0x1dfa+1648-0x244a);}else{memcpy(pDst->TPA,acAsc,halftmp);}}else{if(tmp>
-(0x539+4180-0x156d)){SerializeNumbers_sms(pSrc,pDst->TPA,(0x11c5+3810-0x2087));}
-else{SerializeNumbers_sms(pSrc,pDst->TPA,tmp);}if((tp_ra[(0x54f+3343-0x125e)]&
-(0x3b2+1880-0xa79))==(0x614+2377-0xecc)){memset(temp_num,(0x191b+1080-0x1d53),
-sizeof(temp_num));if(pDst->TPA[(0xc2f+4340-0x1d23)]!=((char)(0x1b58+149-0x1bc2))
-){snprintf(temp_num,sizeof(temp_num),"\x25\x73\x25\x73","\x2b",pDst->TPA);if(
-strlen(temp_num)>(0x1019+5795-0x269c)){snprintf(pDst->TPA,sizeof(pDst->TPA),
-"\x25\x33\x32\x73",temp_num);}else{snprintf(pDst->TPA,sizeof(pDst->TPA),
-"\x25\x73",temp_num);}}}}pSrc+=tmp;String2Bytes(pSrc,(unsigned char*)&pDst->
-TP_PID,(0x118b+40-0x11b1));pSrc+=(0xced+5679-0x231a);String2Bytes(pSrc,(unsigned
- char*)&pDst->TP_DCS,(0x14f2+3411-0x2243));pSrc+=(0x1196+1122-0x15f6);
-SerializeNumbers_sms(pSrc,pDst->TP_SCTS,(0x515+3915-0x1452));pSrc+=
-(0x162+2027-0x93f);String2Bytes(pSrc,&tmp,(0x6eb+2154-0xf53));pSrc+=
-(0x2f2+6983-0x1e37);memset(pDst->TP_UD,(0x127+7969-0x2048),sizeof(pDst->TP_UD));
-at_print(LOG_DEBUG,
+,tmp);if(tmp==(0x1147+4367-0x2256)){pSrc+=(0xe89+4903-0x21ae);}else{tmp=(tmp-
+(0xc98+2424-0x160f))*(0x7b8+870-0xb1c);pSrc+=(0x10f6+2010-0x18cc);if(tmp>
+(0xc8d+1790-0x136b)){SerializeNumbers_sms(pSrc,pDst->SCA,(0x13f3+2874-0x1f0d));
+tmp=(0x5d+7514-0x1d97);}else{SerializeNumbers_sms(pSrc,pDst->SCA,tmp);}pSrc+=tmp
+;}String2Bytes(pSrc,&tmp,(0x18dd+3196-0x2557));first_octet=tmp;pSrc+=
+(0x460+192-0x51e);String2Bytes(pSrc,&tmp,(0x171c+846-0x1a68));halftmp=tmp;if(tmp
+&(0xda8+3474-0x1b39))tmp+=(0x182c+1921-0x1fac);pSrc+=(0x53c+4428-0x1686);memset(
+tp_ra,(0xa4f+5612-0x203b),sizeof(tp_ra));String2Bytes(pSrc,tp_ra,
+(0xa9d+5469-0x1ff8));pSrc+=(0x1848+1313-0x1d67);if((tp_ra[(0xc0+1112-0x518)]&
+(0xa0c+6421-0x22d1))==(0x8d8+4977-0x1bf9)){char tempra[(0x2d5+6935-0x1d6c)];char
+ acAsc[(0x104+6711-0x1abb)];if(halftmp>=(0x2c9+3922-0x120d)){halftmp=(tmp/
+(0x1309+2695-0x1d8e))/(0xe2b+3145-0x1a6d)+(tmp/(0x1745+1042-0x1b55));}else{
+halftmp=tmp/(0x788+6870-0x225c);}memset(tempra,(0x9ab+5190-0x1df1),sizeof(tempra
+));memcpy(tempra,pSrc,tmp);memset(acAsc,(0xa78+2444-0x1404),sizeof(acAsc));
+nDstLength=String2Bytes(tempra,buf,halftmp&(0x31c+232-0x3fd)?(int)halftmp*
+(0x6bd+3529-0x147f)/(0xc15+1633-0x1272)+(0x4ca+4329-0x15b1):(int)halftmp*
+(0x389+3894-0x12b8)/(0x737+4793-0x19ec));halftmp=Decode7bit(buf,acAsc,nDstLength
+);memset(pDst->TPA,(0x32a+2886-0xe70),sizeof(pDst->TPA));if(halftmp>
+(0x460+5348-0x1924)){memcpy(pDst->TPA,acAsc,(0xf6+8656-0x22a6));tmp=
+(0xf40+987-0x12fb);}else{memcpy(pDst->TPA,acAsc,halftmp);}}else{if(tmp>
+(0xc76+1511-0x123d)){SerializeNumbers_sms(pSrc,pDst->TPA,(0x1c0a+2737-0x269b));}
+else{SerializeNumbers_sms(pSrc,pDst->TPA,tmp);}if((tp_ra[(0x2145+644-0x23c9)]&
+(0x2258+1243-0x26a2))==(0x37f+3237-0xf93)){memset(temp_num,(0xfb1+282-0x10cb),
+sizeof(temp_num));if(pDst->TPA[(0x1410+1277-0x190d)]!=
+((char)(0xaf5+3874-0x19ec))){snprintf(temp_num,sizeof(temp_num),
+"\x25\x73\x25\x73","\x2b",pDst->TPA);if(strlen(temp_num)>(0xb89+1758-0x1247)){
+snprintf(pDst->TPA,sizeof(pDst->TPA),"\x25\x33\x32\x73",temp_num);}else{snprintf
+(pDst->TPA,sizeof(pDst->TPA),"\x25\x73",temp_num);}}}}pSrc+=tmp;String2Bytes(
+pSrc,(unsigned char*)&pDst->TP_PID,(0x16fb+2972-0x2295));pSrc+=
+(0xeb0+5116-0x22aa);String2Bytes(pSrc,(unsigned char*)&pDst->TP_DCS,
+(0x36b+7166-0x1f67));pSrc+=(0x1956+29-0x1971);SerializeNumbers_sms(pSrc,pDst->
+TP_SCTS,(0x1c1+2745-0xc6c));pSrc+=(0xae2+1171-0xf67);String2Bytes(pSrc,&tmp,
+(0x12d6+2147-0x1b37));pSrc+=(0x243c+321-0x257b);memset(pDst->TP_UD,
+(0xf1f+45-0xf4c),sizeof(pDst->TP_UD));at_print(LOG_DEBUG,
 "\x44\x65\x63\x6f\x64\x65\x50\x75\x73\x68\x50\x64\x75\x20\x66\x69\x72\x73\x74\x5f\x6f\x63\x74\x65\x74\x20\x3d\x20\x30\x78\x25\x30\x32\x78\x2e" "\n"
-,first_octet);if(first_octet&(0x7f5+5193-0x1bfe)){const char*temp=pSrc;unsigned 
+,first_octet);if(first_octet&(0x1cd+7002-0x1ce7)){const char*temp=pSrc;unsigned 
 char pduType;unsigned char wspLen;unsigned char udhLen;unsigned char DestPort1;
 unsigned char DestPort2;unsigned char RefNum1;unsigned char RefNum2;pushType=
-SMS_NO_PUSH;String2Bytes(temp,&udhl,(0xada+335-0xc27));temp+=(0x1de5+961-0x21a4)
-;tmplen=String2Bytes(temp,&pDst->TP_IEI,(0x20e2+1496-0x26b8));at_print(LOG_DEBUG
-,
+SMS_NO_PUSH;String2Bytes(temp,&udhl,(0x187c+1567-0x1e99));temp+=
+(0x51f+1069-0x94a);tmplen=String2Bytes(temp,&pDst->TP_IEI,(0x607+1147-0xa80));
+at_print(LOG_DEBUG,
 "\x44\x65\x63\x6f\x64\x65\x50\x75\x73\x68\x50\x64\x75\x20\x54\x50\x5f\x49\x45\x49\x20\x3d\x20\x30\x78\x25\x30\x32\x78\x2e" "\n"
-,pDst->TP_IEI);if(pDst->TP_IEI==(0x2c9+4253-0x1361)){temp+=(0xadc+3377-0x180b)*
-tmplen+(0x9c4+4401-0x1af3);tmplen=String2Bytes(temp,&DestPort1,
-(0x4d8+5103-0x18c5));at_print(LOG_DEBUG,
+,pDst->TP_IEI);if(pDst->TP_IEI==(0x17d4+895-0x1b4e)){temp+=(0x750+8030-0x26ac)*
+tmplen+(0x1526+1079-0x195b);tmplen=String2Bytes(temp,&DestPort1,
+(0xf56+1309-0x1471));at_print(LOG_DEBUG,
 "\x44\x65\x63\x6f\x64\x65\x50\x75\x73\x68\x50\x64\x75\x20\x44\x65\x73\x74\x50\x6f\x72\x74\x31\x20\x3d\x20\x30\x78\x25\x30\x32\x78\x2e" "\n"
-,DestPort1);temp+=(0xa0+4577-0x127f)*tmplen;tmplen=String2Bytes(temp,&DestPort2,
-(0x267+5627-0x1860));at_print(LOG_DEBUG,
+,DestPort1);temp+=(0x1d9f+1314-0x22bf)*tmplen;tmplen=String2Bytes(temp,&
+DestPort2,(0x1df+7653-0x1fc2));at_print(LOG_DEBUG,
 "\x44\x65\x63\x6f\x64\x65\x50\x75\x73\x68\x50\x64\x75\x20\x44\x65\x73\x74\x50\x6f\x72\x74\x32\x20\x3d\x20\x30\x78\x25\x30\x32\x78\x2e" "\n"
-,DestPort2);if((DestPort1==(0x75b+5574-0x1d16))&&((DestPort2==
-(0xf1d+1095-0x12e0))||(DestPort2==(0x32b+7394-0x1f88)))){pushType=SMS_PUSH;}}if(
-SMS_PUSH!=pushType){return pushType;}temp=pSrc+udhl*(0x2f1+4689-0x1540)+
-(0x628+4305-0x16f5);tmplen=String2Bytes(temp,&pduType,(0x1591+4177-0x25e0));if(
-pduType==(0x1433+4315-0x2508)){pushType=SMS_PUSH;temp+=(0x93c+3511-0x16ef);
-tmplen=String2Bytes(temp,&pduType,(0xe1c+5378-0x231c));if(pduType==
-(0xe83+307-0xef2)){pushType=SMS_NOTIFICATION;}else{temp+=(0x75d+2843-0x1274);
-tmplen=String2Bytes(temp,&pduType,(0x143c+396-0x15c6));if((pduType==
-(0x101a+2929-0x1ac9))||(pduType==(0x9a2+5392-0x1dfc))){pushType=SMS_BOOTSTRAP;}}
-}if((pDst->TP_IEI==(0xfb2+1286-0x14b4))||(pDst->TP_IEI==(0x21af+716-0x2476))||(
-pDst->TP_IEI==(0x1fc+3263-0xeb3))){temp=pSrc+(0x7fa+7622-0x25bc);tmplen=
-String2Bytes(temp,&IEIDL,(0x4f1+1162-0x979));if(IEIDL==(udhl-
-(0x1011+5564-0x25cb))){}else{temp+=(0x1dea+298-0x1f12)*(0x9a2+2759-0x1463);
-tmplen=String2Bytes(temp,&udhLen,(0x1315+4813-0x25e0));if(udhLen==
-(0x1189+3308-0x1e72)){temp+=(0x23b8+222-0x2494)*tmplen;tmplen=String2Bytes(temp,
-&RefNum1,(0x8ca+1634-0xf2a));pDst->TP_ReferNum=RefNum1;temp+=(0xa3f+5627-0x2038)
-*tmplen;tmplen=String2Bytes(temp,&pDst->TP_AllPieceNum,(0x5f1+1648-0xc5f));temp
-+=(0x186a+2322-0x217a)*tmplen;tmplen=String2Bytes(temp,&pDst->TP_CurrentPieceNum
-,(0xbd3+3476-0x1965));temp+=(0x8f9+139-0x982)*tmplen;}else if(udhLen==
-(0x497+676-0x737)){temp+=(0xcca+5081-0x20a1)*tmplen;tmplen=String2Bytes(temp,&
-RefNum1,(0x98a+6625-0x2369));temp+=(0x34b+527-0x558)*tmplen;tmplen=String2Bytes(
-temp,&RefNum2,(0x13b5+3335-0x20ba));int ReferNum=RefNum2+RefNum1*
-(0x3e8+6592-0x1ca8);pDst->TP_ReferNum=ReferNum;temp+=(0x384+1431-0x919)*tmplen;
-tmplen=String2Bytes(temp,&pDst->TP_AllPieceNum,(0x4f8+7005-0x2053));temp+=
-(0x98c+3836-0x1886)*tmplen;tmplen=String2Bytes(temp,&pDst->TP_CurrentPieceNum,
-(0x1d58+204-0x1e22));temp+=(0x2063+522-0x226b)*tmplen;}}}at_print(LOG_DEBUG,
+,DestPort2);if((DestPort1==(0x620+2218-0xebf))&&((DestPort2==(0xd81+4279-0x1db4)
+)||(DestPort2==(0x17d5+3850-0x265a)))){pushType=SMS_PUSH;}}if(SMS_PUSH!=pushType
+){return pushType;}temp=pSrc+udhl*(0x1470+4060-0x244a)+(0xcd7+3398-0x1a19);
+tmplen=String2Bytes(temp,&pduType,(0x1018+4165-0x205b));if(pduType==
+(0x74d+4326-0x182d)){pushType=SMS_PUSH;temp+=(0x1a8b+2302-0x2385);tmplen=
+String2Bytes(temp,&pduType,(0x72d+1510-0xd11));if(pduType==(0x1a9+1246-0x5c3)){
+pushType=SMS_NOTIFICATION;}else{temp+=(0xdfc+784-0x1108);tmplen=String2Bytes(
+temp,&pduType,(0xbff+2016-0x13dd));if((pduType==(0xcb6+5454-0x2142))||(pduType==
+(0x8e4+284-0x94a))){pushType=SMS_BOOTSTRAP;}}}if((pDst->TP_IEI==
+(0x19b+6285-0x1a24))||(pDst->TP_IEI==(0x1c77+1393-0x21e3))||(pDst->TP_IEI==
+(0x1465+4352-0x255d))){temp=pSrc+(0x123+1018-0x519);tmplen=String2Bytes(temp,&
+IEIDL,(0xb1c+1228-0xfe6));if(IEIDL==(udhl-(0x13+7739-0x1e4c))){}else{temp+=
+(0x1e1f+252-0x1f19)*(0x1a2f+7-0x1a30);tmplen=String2Bytes(temp,&udhLen,
+(0xe72+3730-0x1d02));if(udhLen==(0x111+1744-0x7de)){temp+=(0x1756+1836-0x1e80)*
+tmplen;tmplen=String2Bytes(temp,&RefNum1,(0xa8a+6224-0x22d8));pDst->TP_ReferNum=
+RefNum1;temp+=(0xb29+4197-0x1b8c)*tmplen;tmplen=String2Bytes(temp,&pDst->
+TP_AllPieceNum,(0x16c7+3836-0x25c1));temp+=(0x1393+2158-0x1bff)*tmplen;tmplen=
+String2Bytes(temp,&pDst->TP_CurrentPieceNum,(0x637+3676-0x1491));temp+=
+(0x8a2+3653-0x16e5)*tmplen;}else if(udhLen==(0xa42+3986-0x19d0)){temp+=
+(0x12ef+4363-0x23f8)*tmplen;tmplen=String2Bytes(temp,&RefNum1,
+(0xfbd+4195-0x201e));temp+=(0x11b8+4098-0x21b8)*tmplen;tmplen=String2Bytes(temp,
+&RefNum2,(0x1ed9+646-0x215d));int ReferNum=RefNum2+RefNum1*(0xcc8+2201-0x1461);
+pDst->TP_ReferNum=ReferNum;temp+=(0x1d6d+1150-0x21e9)*tmplen;tmplen=String2Bytes
+(temp,&pDst->TP_AllPieceNum,(0x7cd+5815-0x1e82));temp+=(0x3ab+2637-0xdf6)*tmplen
+;tmplen=String2Bytes(temp,&pDst->TP_CurrentPieceNum,(0x5f4+2679-0x1069));temp+=
+(0xdab+2043-0x15a4)*tmplen;}}}at_print(LOG_DEBUG,
 "\x44\x65\x63\x6f\x64\x65\x50\x75\x73\x68\x50\x64\x75\x20\x52\x65\x66\x65\x72\x4e\x75\x6d\x20\x3d\x20\x25\x64\x2c\x41\x6c\x6c\x4e\x75\x6d\x20\x3d\x25\x64\x2c\x43\x75\x72\x4e\x75\x6d\x20\x3d\x25\x64\x2e" "\n"
 ,pDst->TP_ReferNum,pDst->TP_AllPieceNum,pDst->TP_CurrentPieceNum);if(
-SMS_NOTIFICATION==pushType){temp=pSrc+udhl*(0x472+6454-0x1da6)+
-(0x29c+5824-0x1956);tmplen=String2Bytes(temp,&wspLen,(0xd2d+5169-0x215c));temp=
-temp+wspLen*(0x2cf+567-0x504)+(0x28b+514-0x48b);}else{temp=pSrc+udhl*
-(0x502+1345-0xa41)+(0x4f3+4402-0x1623);}nDstLength=((strlen(temp)<sizeof(pDst->
-TP_UD))?strlen(temp):(sizeof(pDst->TP_UD)-(0x890+7682-0x2691)));memcpy(pDst->
+SMS_NOTIFICATION==pushType){temp=pSrc+udhl*(0x4b2+3608-0x12c8)+
+(0xa7b+2725-0x151a);tmplen=String2Bytes(temp,&wspLen,(0xbdf+773-0xee2));temp=
+temp+wspLen*(0x67f+2371-0xfc0)+(0xb05+70-0xb49);}else{temp=pSrc+udhl*
+(0x5e3+277-0x6f6)+(0x607+4048-0x15d5);}nDstLength=((strlen(temp)<sizeof(pDst->
+TP_UD))?strlen(temp):(sizeof(pDst->TP_UD)-(0x8c8+6955-0x23f2)));memcpy(pDst->
 TP_UD,temp,nDstLength);at_print(LOG_DEBUG,
 "\x44\x65\x63\x6f\x64\x65\x50\x75\x73\x68\x50\x64\x75\x20\x70\x44\x73\x74\x2d\x3e\x54\x50\x5f\x55\x44\x20\x3d\x20\x25\x73\x2e" "\n"
 ,pDst->TP_UD);}at_print(LOG_DEBUG,
 "\x44\x65\x63\x6f\x64\x65\x50\x75\x73\x68\x50\x64\x75\x20\x70\x75\x73\x68\x54\x79\x70\x65\x20\x3d\x20\x25\x64\x2e" "\n"
 ,pushType);return pushType;}static int SerializeNumbers_sms(const char*pSrc,char
-*pDst,int nSrcLength){int nDstLength;char ch;int i=(0x1e0d+1038-0x221b);if(pSrc
-==NULL||pDst==NULL||nSrcLength<(0x133a+3785-0x2203)){return-(0x636+8066-0x25b7);
-}nDstLength=nSrcLength;for(i=(0x201+101-0x266);i<nSrcLength;i+=(0x8b7+57-0x8ee))
-{ch=*pSrc++;*pDst++=*pSrc++;*pDst++=ch;}if(*(pDst-(0x125+4611-0x1327))==
-((char)(0x162+4345-0x1215))){pDst--;nDstLength--;}*pDst='\0';return nDstLength;}
-UINT16 wms_ts_pack_gw_7_bit_chars(const UINT8*in,UINT16 in_len,UINT16 shift,
-UINT16 out_len_max,UINT8*out){UINT16 i=(0x1c7f+1958-0x2425);UINT16 pos=
-(0x156f+2217-0x1e18);if(in==NULL||out==NULL){at_print(LOG_DEBUG,
+*pDst,int nSrcLength){int nDstLength;char ch;int i=(0xb39+1688-0x11d1);if(pSrc==
+NULL||pDst==NULL||nSrcLength<(0x1abb+1968-0x226b)){return-(0x15b3+3237-0x2257);}
+nDstLength=nSrcLength;for(i=(0xaa0+2964-0x1634);i<nSrcLength;i+=
+(0x372+1810-0xa82)){ch=*pSrc++;*pDst++=*pSrc++;*pDst++=ch;}if(*(pDst-
+(0x96d+4027-0x1927))==((char)(0x1145+5641-0x2708))){pDst--;nDstLength--;}*pDst=
+'\0';return nDstLength;}UINT16 wms_ts_pack_gw_7_bit_chars(const UINT8*in,UINT16 
+in_len,UINT16 shift,UINT16 out_len_max,UINT8*out){UINT16 i=(0x15fa+273-0x170b);
+UINT16 pos=(0xbfa+5052-0x1fb6);if(in==NULL||out==NULL){at_print(LOG_DEBUG,
 "\x6e\x75\x6c\x6c\x20\x70\x6f\x69\x6e\x74\x65\x72\x20\x69\x6e\x20\x77\x6d\x73\x5f\x74\x73\x5f\x70\x61\x63\x6b\x5f\x67\x77\x5f\x37\x5f\x62\x69\x74\x5f\x63\x68\x61\x72\x73"
-);return(0x1a27+2096-0x2257);}shift%=(0xeeb+3238-0x1b8a);if(shift!=
-(0x55f+7191-0x2176)){out[pos]|=(UINT8)(in[i]<<shift);shift=((0x1ec+8870-0x248b)-
-shift)+(0x4a9+3518-0x1266);if(shift==(0x1104+3376-0x1e2d)){shift=
-(0x9ea+2654-0x1448);i++;}pos++;}for(;pos<out_len_max&&i<in_len;pos++,i++){out[
-pos]=in[i]>>shift;if(i+(0x30c+2618-0xd45)<in_len){out[pos]|=(UINT8)(in[i+
-(0x569+1470-0xb26)]<<((0x11b+9517-0x2641)-shift));shift++;if(shift==
-(0x1165+3063-0x1d55)){shift=(0xc11+907-0xf9c);i++;}}}return pos;}UINT8 
+);return(0x1b24+2076-0x2340);}shift%=(0x10a2+2088-0x18c3);if(shift!=
+(0xbcd+2666-0x1637)){out[pos]|=(UINT8)(in[i]<<shift);shift=((0x2065+1627-0x26b9)
+-shift)+(0x1059+4325-0x213d);if(shift==(0xf79+4642-0x2194)){shift=
+(0xc22+5416-0x214a);i++;}pos++;}for(;pos<out_len_max&&i<in_len;pos++,i++){out[
+pos]=in[i]>>shift;if(i+(0x2569+341-0x26bd)<in_len){out[pos]|=(UINT8)(in[i+
+(0x92f+6563-0x22d1)]<<((0x1ea2+6-0x1ea1)-shift));shift++;if(shift==
+(0xf16+5565-0x24cc)){shift=(0x97a+128-0x9fa);i++;}}}return pos;}UINT8 
 wms_ts_encode_address(const wms_address_s_type*addr,UINT8*data){UINT8 i,pos=
-(0x1d46+546-0x1f68);if(addr->number_of_digits>WMS_GW_ADDRESS_MAX){at_print(
+(0x107f+1161-0x1508);if(addr->number_of_digits>WMS_GW_ADDRESS_MAX){at_print(
 LOG_DEBUG,
 "\x41\x64\x64\x72\x20\x6c\x65\x6e\x20\x74\x6f\x6f\x20\x6c\x6f\x6e\x67\x3a\x20\x25\x64"
-,addr->number_of_digits);return(0x4d2+8313-0x254b);}if(addr->number_type==
+,addr->number_of_digits);return(0x928+5685-0x1f5d);}if(addr->number_type==
 WMS_NUMBER_ALPHANUMERIC){data[pos]=(UINT8)((addr->number_of_digits*
-(0x7a4+7073-0x233e)+(0xff5+2093-0x181f))/(0xa48+2867-0x1577));}else{data[pos]=
-addr->number_of_digits;}pos++;data[pos]=(0x2483+493-0x25f0);data[pos]|=(UINT8)((
-UINT8)addr->number_type<<(0xedb+3251-0x1b8a));data[pos]|=(UINT8)addr->
+(0x14fb+4352-0x25f4)+(0x1103+670-0x139e))/(0x17a0+429-0x1949));}else{data[pos]=
+addr->number_of_digits;}pos++;data[pos]=(0xac1+6844-0x24fd);data[pos]|=(UINT8)((
+UINT8)addr->number_type<<(0xc5c+1544-0x1260));data[pos]|=(UINT8)addr->
 number_plan;pos++;if(addr->number_type==WMS_NUMBER_ALPHANUMERIC){pos+=(UINT8)
-wms_ts_pack_gw_7_bit_chars(addr->digits,addr->number_of_digits,(0x234+460-0x400)
-,WMS_GW_ADDRESS_MAX,&data[pos]);}else{for(i=(0x88f+1307-0xdaa);i<addr->
-number_of_digits;i++){data[pos]=(UINT8)(addr->digits[i++]&(0x1aaf+341-0x1bf5));{
-data[pos]|=(UINT8)(addr->digits[i]<<(0x1064+828-0x139c));}pos++;}}return pos;}
-UINT8 wms_ts_encode_dcs(const wms_gw_dcs_s_type*dcs,UINT8*data){UINT8 pos=
-(0xe46+5394-0x2358);if(dcs->msg_waiting==WMS_GW_MSG_WAITING_NONE){data[pos]=dcs
-->is_compressed?(0x544+6850-0x1fe6):(0x1b36+1144-0x1fae);data[pos]|=(dcs->
-msg_class!=WMS_MESSAGE_CLASS_NONE)?(0x1673+319-0x17a2):(0x9c+3223-0xd33);data[
-pos]|=dcs->alphabet<<(0xc1+5317-0x1584);data[pos]|=dcs->msg_class&
-(0x17cc+2012-0x1fa5);}else if(dcs->msg_waiting==WMS_GW_MSG_WAITING_NONE_1111){
-data[pos]=(0x1255+1306-0x167f);if(dcs->alphabet==WMS_GW_ALPHABET_8_BIT)data[pos]
-|=(0x988+3939-0x18e7);data[pos]|=dcs->msg_class&(0x77b+2672-0x11e8);}else{if(dcs
-->msg_waiting==WMS_GW_MSG_WAITING_DISCARD){data[pos]=(0x360+117-0x315);}else if(
+wms_ts_pack_gw_7_bit_chars(addr->digits,addr->number_of_digits,
+(0xbf0+6548-0x2584),WMS_GW_ADDRESS_MAX,&data[pos]);}else{for(i=
+(0xeb4+1088-0x12f4);i<addr->number_of_digits;i++){data[pos]=(UINT8)(addr->digits
+[i++]&(0x21b+6438-0x1b32));{data[pos]|=(UINT8)(addr->digits[i]<<
+(0x517+1731-0xbd6));}pos++;}}return pos;}UINT8 wms_ts_encode_dcs(const 
+wms_gw_dcs_s_type*dcs,UINT8*data){UINT8 pos=(0x17a5+2994-0x2357);if(dcs->
+msg_waiting==WMS_GW_MSG_WAITING_NONE){data[pos]=dcs->is_compressed?
+(0x497+3674-0x12d1):(0x191a+1017-0x1d13);data[pos]|=(dcs->msg_class!=
+WMS_MESSAGE_CLASS_NONE)?(0x635+1880-0xd7d):(0x19d0+2330-0x22ea);data[pos]|=dcs->
+alphabet<<(0x1674+2374-0x1fb8);data[pos]|=dcs->msg_class&(0x20ea+872-0x244f);}
+else if(dcs->msg_waiting==WMS_GW_MSG_WAITING_NONE_1111){data[pos]=
+(0x1f6+4765-0x13a3);if(dcs->alphabet==WMS_GW_ALPHABET_8_BIT)data[pos]|=
+(0xc2d+2322-0x153b);data[pos]|=dcs->msg_class&(0x7d2+6223-0x201e);}else{if(dcs->
+msg_waiting==WMS_GW_MSG_WAITING_DISCARD){data[pos]=(0x436+6207-0x1bb5);}else if(
 dcs->msg_waiting==WMS_GW_MSG_WAITING_STORE&&dcs->alphabet==
-WMS_GW_ALPHABET_7_BIT_DEFAULT){data[pos]=(0xb38+6429-0x2385);}else{data[pos]=
-(0x5f8+8121-0x24d1);}data[pos]|=(dcs->msg_waiting_active==TRUE)?
-(0xe58+1780-0x1544):(0x14ab+1998-0x1c79);data[pos]|=dcs->msg_waiting_kind&
-(0xc7f+848-0xfcc);}pos++;return pos;}UINT8 wms_ts_bcd_to_int(const UINT8 bcd,
-UINT8*result){unsigned char low_bit=(bcd&(0x1326+2191-0x1ba6));unsigned char 
-high_bit=((bcd&(0xc09+3913-0x1a62))>>(0x2153+1048-0x2567));if(low_bit>
-(0x1aca+3096-0x26d9)||high_bit>(0x14+6858-0x1ad5)){at_print(LOG_DEBUG,
+WMS_GW_ALPHABET_7_BIT_DEFAULT){data[pos]=(0x6e9+183-0x6d0);}else{data[pos]=
+(0x19bf+1712-0x1f8f);}data[pos]|=(dcs->msg_waiting_active==TRUE)?
+(0x5d+1768-0x73d):(0x1136+3395-0x1e79);data[pos]|=dcs->msg_waiting_kind&
+(0x211+7771-0x2069);}pos++;return pos;}UINT8 wms_ts_bcd_to_int(const UINT8 bcd,
+UINT8*result){unsigned char low_bit=(bcd&(0x1ddd+1889-0x252f));unsigned char 
+high_bit=((bcd&(0x1346+2342-0x1b7c))>>(0x805+3319-0x14f8));if(low_bit>
+(0xc0d+2247-0x14cb)||high_bit>(0x858+2432-0x11cf)){at_print(LOG_DEBUG,
 "\x49\x6e\x76\x61\x6c\x69\x64\x20\x42\x43\x44\x20\x64\x69\x67\x69\x74\x21");*
-result=(0x5a0+2687-0x101f);return FALSE;}else{*result=((bcd&(0x1a29+991-0x1df9))
-+(((bcd&(0x111+429-0x1ce))>>(0xbba+1026-0xfb8))*(0x1036+5801-0x26d5)));return 
-TRUE;}}UINT8 wms_ts_encode_timestamp(const wms_timestamp_s_type*timestamp,UINT8*
-data){sint7 i;UINT8 pos=(0x1db+6714-0x1c15),j;if(!wms_ts_bcd_to_int(timestamp->
-year,&j)){return(0xebf+377-0x1038);}data[pos]=((timestamp->year&
-(0x301+2217-0xb9b))<<(0xa94+5506-0x2012))+((timestamp->year&(0x3d0+2618-0xd1a))
->>(0x9b4+3324-0x16ac));pos++;if(wms_ts_bcd_to_int(timestamp->month,&j)){if(j>
-(0x1851+2980-0x23e9)||j<(0x18e1+22-0x18f6)){at_print(LOG_DEBUG,
+result=(0x1b5f+2454-0x24f5);return FALSE;}else{*result=((bcd&(0x19d4+208-0x1a95)
+)+(((bcd&(0x164+5950-0x17b2))>>(0x664+4653-0x188d))*(0x10a2+3136-0x1cd8)));
+return TRUE;}}UINT8 wms_ts_encode_timestamp(const wms_timestamp_s_type*timestamp
+,UINT8*data){sint7 i;UINT8 pos=(0x1877+1484-0x1e43),j;if(!wms_ts_bcd_to_int(
+timestamp->year,&j)){return(0x66d+6065-0x1e1e);}data[pos]=((timestamp->year&
+(0x1440+2606-0x1e5f))<<(0x1070+3863-0x1f83))+((timestamp->year&
+(0xd66+5032-0x201e))>>(0x6ed+736-0x9c9));pos++;if(wms_ts_bcd_to_int(timestamp->
+month,&j)){if(j>(0x11c2+3693-0x2023)||j<(0x12d6+4207-0x2344)){at_print(LOG_DEBUG
+,
 "\x4d\x6f\x6e\x74\x68\x20\x69\x73\x20\x69\x6e\x76\x61\x6c\x69\x64\x3a\x20\x25\x64"
-,j);return(0xa5f+3274-0x1729);}}else{return(0x14ab+934-0x1851);}data[pos]=((
-timestamp->month&(0x9af+1893-0x1105))<<(0x15b5+936-0x1959))+((timestamp->month&
-(0x4f4+6536-0x1d8c))>>(0x1019+375-0x118c));pos++;if(wms_ts_bcd_to_int(timestamp
-->day,&j)){if(j>(0x1a5+368-0x2f6)||j<(0x934+2864-0x1463)){at_print(LOG_DEBUG,
+,j);return(0x250+8731-0x246b);}}else{return(0x12b3+3549-0x2090);}data[pos]=((
+timestamp->month&(0x438+1495-0xa00))<<(0xb5a+188-0xc12))+((timestamp->month&
+(0x16c1+4186-0x262b))>>(0x4cc+6432-0x1de8));pos++;if(wms_ts_bcd_to_int(timestamp
+->day,&j)){if(j>(0x1077+3450-0x1dd2)||j<(0x914+1235-0xde6)){at_print(LOG_DEBUG,
 "\x44\x61\x79\x20\x69\x73\x20\x69\x6e\x76\x61\x6c\x69\x64\x3a\x20\x25\x64",j);
-return(0x17f6+2053-0x1ffb);}}else{return(0x1818+1181-0x1cb5);}data[pos]=((
-timestamp->day&(0x10b3+2816-0x1ba4))<<(0x878+221-0x951))+((timestamp->day&
-(0x1d84+2155-0x24ff))>>(0x1220+5266-0x26ae));pos++;if(wms_ts_bcd_to_int(
-timestamp->hour,&j)){if(j>(0x8d+4513-0x1217)){at_print(LOG_DEBUG,
+return(0xaa1+7069-0x263e);}}else{return(0x8dc+911-0xc6b);}data[pos]=((timestamp
+->day&(0xf38+119-0xfa0))<<(0x71+659-0x300))+((timestamp->day&(0x98a+367-0xa09))
+>>(0x12b7+3382-0x1fe9));pos++;if(wms_ts_bcd_to_int(timestamp->hour,&j)){if(j>
+(0x108+6321-0x19a2)){at_print(LOG_DEBUG,
 "\x48\x6f\x75\x72\x20\x69\x73\x20\x69\x6e\x76\x61\x6c\x69\x64\x3a\x20\x25\x64",j
-);return(0x4bd+3184-0x112d);}}else{return(0x11fa+176-0x12aa);}data[pos]=((
-timestamp->hour&(0xb0f+7061-0x2695))<<(0x301+324-0x441))+((timestamp->hour&
-(0x827+7557-0x24bc))>>(0x5ff+1194-0xaa5));pos++;if(wms_ts_bcd_to_int(timestamp->
-minute,&j)){if(j>(0x166f+2191-0x1ec3)){at_print(LOG_DEBUG,
+);return(0x227+3338-0xf31);}}else{return(0xfd9+2327-0x18f0);}data[pos]=((
+timestamp->hour&(0x340+3127-0xf68))<<(0xf19+1620-0x1569))+((timestamp->hour&
+(0x2500+241-0x2501))>>(0x966+1300-0xe76));pos++;if(wms_ts_bcd_to_int(timestamp->
+minute,&j)){if(j>(0xda+6854-0x1b65)){at_print(LOG_DEBUG,
 "\x4d\x69\x6e\x75\x74\x65\x20\x69\x73\x20\x69\x6e\x76\x61\x6c\x69\x64\x3a\x20\x25\x64"
-,j);return(0xd0f+1105-0x1160);}}else{return(0x10b+459-0x2d6);}data[pos]=((
-timestamp->minute&(0xe8+9002-0x2403))<<(0x302+2375-0xc45))+((timestamp->minute&
-(0x258+3642-0xfa2))>>(0xe88+4973-0x21f1));pos++;if(wms_ts_bcd_to_int(timestamp->
-second,&j)){if(j>(0x1e56+354-0x1f7d)){at_print(LOG_DEBUG,
+,j);return(0x1576+2887-0x20bd);}}else{return(0x1d0f+1239-0x21e6);}data[pos]=((
+timestamp->minute&(0x4e2+4241-0x1564))<<(0x37d+5598-0x1957))+((timestamp->minute
+&(0xb99+964-0xe6d))>>(0xf1c+5635-0x251b));pos++;if(wms_ts_bcd_to_int(timestamp->
+second,&j)){if(j>(0x1e55+759-0x2111)){at_print(LOG_DEBUG,
 "\x53\x65\x63\x6f\x6e\x64\x20\x69\x73\x20\x69\x6e\x76\x61\x6c\x69\x64\x3a\x20\x25\x64"
-,j);return(0x6bc+2081-0xedd);}}else{return(0xd81+5211-0x21dc);}data[pos]=((
-timestamp->second&(0x1758+3247-0x23f8))<<(0xdef+1467-0x13a6))+((timestamp->
-second&(0xeb8+2999-0x197f))>>(0x67+2919-0xbca));pos++;i=(sint7)timestamp->
-timezone;if(i>(0x130a+2663-0x1d41)||i<-(0xcf9+1877-0x141e)){at_print(LOG_DEBUG,
+,j);return(0x20b+9096-0x2593);}}else{return(0xd90+3491-0x1b33);}data[pos]=((
+timestamp->second&(0x197+200-0x250))<<(0x30+3999-0xfcb))+((timestamp->second&
+(0x49f+6500-0x1d13))>>(0x83b+5917-0x1f54));pos++;i=(sint7)timestamp->timezone;if
+(i>(0x148a+4400-0x258a)||i<-(0x14fc+387-0x164f)){at_print(LOG_DEBUG,
 "\x54\x69\x6d\x65\x7a\x6f\x6e\x65\x20\x69\x73\x20\x6f\x75\x74\x20\x6f\x66\x20\x62\x6f\x75\x6e\x64\x3a\x20\x25\x64"
-,i);return(0x9b1+2280-0x1299);}if(i>=(0x2f8+3797-0x11cd)){data[pos]=(UINT8)(((
-UINT8)(i%(0xa8b+3180-0x16ed)))<<(0x557+2998-0x1109));data[pos]|=(i/
-(0x13cb+1116-0x181d));}else{i*=(-(0x205+8508-0x2340));data[pos]=(UINT8)(((UINT8)
-(i%(0x100b+3831-0x1ef8)))<<(0x733+2117-0xf74));data[pos]|=(i/(0x381+6369-0x1c58)
-);data[pos]|=(0x4d+826-0x37f);}pos++;return pos;}UINT8 wms_ts_get_udh_length(
-const wms_udh_s_type*udh){UINT8 length=(0x283+6202-0x1abd);if(udh!=NULL){switch(
-udh->header_id){case WMS_UDH_CONCAT_8:length=(0x1695+3049-0x227d)+
-(0x163a+2276-0x1f1d)+WMS_UDH_OCTETS_CONCAT8;break;case WMS_UDH_CONCAT_16:length=
-(0xbff+1508-0x11e2)+(0x7b2+540-0x9cd)+WMS_UDH_OCTETS_CONCAT16;break;case 
-WMS_UDH_SPECIAL_SM:length=(0x1e4+5225-0x164c)+(0x1682+3366-0x23a7)+
-WMS_UDH_OCTETS_SPECIAL_SM;break;case WMS_UDH_PORT_8:length=(0x1548+2232-0x1dff)+
-(0x354+4459-0x14be)+WMS_UDH_OCTETS_PORT8;break;case WMS_UDH_PORT_16:length=
-(0x14b3+2411-0x1e1d)+(0x783+82-0x7d4)+WMS_UDH_OCTETS_PORT16;break;case 
-WMS_UDH_SMSC_CONTROL:length=(0x2f5+1449-0x89d)+(0x1a8c+247-0x1b82)+udh->u.other.
-header_length;break;case WMS_UDH_SOURCE:length=(0x3+5716-0x1656)+
-(0x13f6+2155-0x1c60)+udh->u.other.header_length;break;case WMS_UDH_WCMP:length=
-(0x9c5+2377-0x130d)+(0xe33+5226-0x229c)+udh->u.other.header_length;break;case 
+,i);return(0x1a87+2013-0x2264);}if(i>=(0x14a5+413-0x1642)){data[pos]=(UINT8)(((
+UINT8)(i%(0x452+1208-0x900)))<<(0xc29+6215-0x246c));data[pos]|=(i/
+(0x5c+2111-0x891));}else{i*=(-(0x4ca+3616-0x12e9));data[pos]=(UINT8)(((UINT8)(i%
+(0x212+4911-0x1537)))<<(0x16f5+3779-0x25b4));data[pos]|=(i/(0x1495+321-0x15cc));
+data[pos]|=(0x7dc+1632-0xe34);}pos++;return pos;}UINT8 wms_ts_get_udh_length(
+const wms_udh_s_type*udh){UINT8 length=(0x796+860-0xaf2);if(udh!=NULL){switch(
+udh->header_id){case WMS_UDH_CONCAT_8:length=(0x213+6904-0x1d0a)+
+(0x105+5021-0x14a1)+WMS_UDH_OCTETS_CONCAT8;break;case WMS_UDH_CONCAT_16:length=
+(0xffb+2837-0x1b0f)+(0x1260+3881-0x2188)+WMS_UDH_OCTETS_CONCAT16;break;case 
+WMS_UDH_SPECIAL_SM:length=(0x7a+4284-0x1135)+(0xb3c+4125-0x1b58)+
+WMS_UDH_OCTETS_SPECIAL_SM;break;case WMS_UDH_PORT_8:length=(0xe78+3273-0x1b40)+
+(0x440+4299-0x150a)+WMS_UDH_OCTETS_PORT8;break;case WMS_UDH_PORT_16:length=
+(0x1b4f+789-0x1e63)+(0xb90+181-0xc44)+WMS_UDH_OCTETS_PORT16;break;case 
+WMS_UDH_SMSC_CONTROL:length=(0xa42+1430-0xfd7)+(0xe69+3694-0x1cd6)+udh->u.other.
+header_length;break;case WMS_UDH_SOURCE:length=(0x83c+3107-0x145e)+
+(0x18fa+1170-0x1d8b)+udh->u.other.header_length;break;case WMS_UDH_WCMP:length=
+(0x30f+1116-0x76a)+(0x11ab+4636-0x23c6)+udh->u.other.header_length;break;case 
 WMS_UDH_TEXT_FORMATING:if(!udh->u.text_formating.is_color_present){length=
-(0x1363+2175-0x1be1)+(0x10c+1861-0x850)+WMS_UDH_OCTETS_TEXT_FORMATTING;}else{
-length=(0x984+2826-0x148d)+(0x1c4+7762-0x2015)+WMS_UDH_OCTETS_TEXT_FORMATTING+
-(0x1361+1617-0x19b1);}break;case WMS_UDH_PRE_DEF_SOUND:length=
-(0xf51+4756-0x21e4)+(0x88a+2060-0x1095)+WMS_UDH_OCTETS_PRE_DEF;break;case 
-WMS_UDH_USER_DEF_SOUND:length=(0x1880+2585-0x2298)+(0x1309+4960-0x2668)+udh->u.
-user_def_sound.data_length+(0x2368+458-0x2531);break;case WMS_UDH_PRE_DEF_ANIM:
-length=(0x712+4675-0x1954)+(0x15f3+2944-0x2172)+WMS_UDH_OCTETS_PRE_DEF;break;
-case WMS_UDH_LARGE_ANIM:length=(0x22f5+874-0x265e)+(0x17fb+3808-0x26da)+
-WMS_UDH_LARGE_BITMAP_SIZE*WMS_UDH_ANIM_NUM_BITMAPS+(0xb0f+3016-0x16d6);break;
-case WMS_UDH_SMALL_ANIM:length=(0x2eb+3858-0x11fc)+(0xa11+6171-0x222b)+
-WMS_UDH_SMALL_BITMAP_SIZE*WMS_UDH_ANIM_NUM_BITMAPS+(0x11c1+603-0x141b);break;
-case WMS_UDH_LARGE_PICTURE:length=(0x5b1+4335-0x169f)+(0x15d+3695-0xfcb)+
-WMS_UDH_LARGE_PIC_SIZE+(0x61d+7564-0x23a8);break;case WMS_UDH_SMALL_PICTURE:
-length=(0x176c+129-0x17ec)+(0xcbf+898-0x1040)+WMS_UDH_SMALL_PIC_SIZE+
-(0x2162+1248-0x2641);break;case WMS_UDH_VAR_PICTURE:length=(0x1b1f+2179-0x23a1)+
-(0x5fc+2467-0xf9e)+(UINT8)(udh->u.var_picture.height*udh->u.var_picture.width/
-(0x9cd+4973-0x1d32))+(0x1856+2015-0x2032);break;case WMS_UDH_RFC822:length=
-(0x1718+3616-0x2537)+(0x876+3588-0x1679)+WMS_UDH_OCTETS_RFC822;break;case 
-WMS_UDH_NAT_LANG_SS:length=(0x10a+3449-0xe82)+(0x1c46+1253-0x212a)+
-WMS_UDH_OCTETS_NAT_LANG_SS;break;case WMS_UDH_NAT_LANG_LS:length=
-(0x1aa3+3084-0x26ae)+(0x201+372-0x374)+WMS_UDH_OCTETS_NAT_LANG_LS;break;case 
-WMS_UDH_USER_PROMPT:length=(0x875+2686-0x12f2)+(0x1499+2743-0x1f4f)+
-WMS_UDH_OCTETS_USER_PROMPT;break;case WMS_UDH_EXTENDED_OBJECT:length=
-(0x141+6472-0x1a88)+(0xd59+2621-0x1795)+udh->u.eo.content.length;if(udh->u.eo.
-first_segment==TRUE){length+=WMS_UDH_OCTETS_EO_HEADER;}break;default:length=
-(0x101a+5007-0x23a8)+(0xcbd+4930-0x1ffe)+udh->u.other.header_length;break;}}
-return length;}uint32 wms_ts_compute_user_data_header_length(const UINT8 
-num_headers,const wms_udh_s_type*headers){uint32 length=(0x1807+3525-0x25cc);
-uint32 i;if(headers==NULL){at_print(LOG_DEBUG,
+(0xfcc+3858-0x1edd)+(0x21d6+510-0x23d3)+WMS_UDH_OCTETS_TEXT_FORMATTING;}else{
+length=(0x1ea5+1050-0x22be)+(0x354+4963-0x16b6)+WMS_UDH_OCTETS_TEXT_FORMATTING+
+(0xe1a+735-0x10f8);}break;case WMS_UDH_PRE_DEF_SOUND:length=(0x1a50+230-0x1b35)+
+(0x17cc+1867-0x1f16)+WMS_UDH_OCTETS_PRE_DEF;break;case WMS_UDH_USER_DEF_SOUND:
+length=(0x1c3d+532-0x1e50)+(0x3a+1900-0x7a5)+udh->u.user_def_sound.data_length+
+(0xbf4+2967-0x178a);break;case WMS_UDH_PRE_DEF_ANIM:length=(0x3d2+7034-0x1f4b)+
+(0xb4b+2760-0x1612)+WMS_UDH_OCTETS_PRE_DEF;break;case WMS_UDH_LARGE_ANIM:length=
+(0x1651+3829-0x2545)+(0x122b+3838-0x2128)+WMS_UDH_LARGE_BITMAP_SIZE*
+WMS_UDH_ANIM_NUM_BITMAPS+(0x11a3+927-0x1541);break;case WMS_UDH_SMALL_ANIM:
+length=(0xd45+4619-0x1f4f)+(0x1090+4491-0x221a)+WMS_UDH_SMALL_BITMAP_SIZE*
+WMS_UDH_ANIM_NUM_BITMAPS+(0x31a+2590-0xd37);break;case WMS_UDH_LARGE_PICTURE:
+length=(0x5cf+5667-0x1bf1)+(0xb50+4090-0x1b49)+WMS_UDH_LARGE_PIC_SIZE+
+(0x8a+9633-0x262a);break;case WMS_UDH_SMALL_PICTURE:length=(0x1476+1863-0x1bbc)+
+(0xa1c+5414-0x1f41)+WMS_UDH_SMALL_PIC_SIZE+(0x98a+1916-0x1105);break;case 
+WMS_UDH_VAR_PICTURE:length=(0x17fd+3821-0x26e9)+(0x263+6902-0x1d58)+(UINT8)(udh
+->u.var_picture.height*udh->u.var_picture.width/(0x98+1530-0x68a))+
+(0x4c1+4141-0x14eb);break;case WMS_UDH_RFC822:length=(0xd3f+207-0xe0d)+
+(0x1362+2467-0x1d04)+WMS_UDH_OCTETS_RFC822;break;case WMS_UDH_NAT_LANG_SS:length
+=(0x5db+7934-0x24d8)+(0x5e4+226-0x6c5)+WMS_UDH_OCTETS_NAT_LANG_SS;break;case 
+WMS_UDH_NAT_LANG_LS:length=(0xbf4+4104-0x1bfb)+(0x885+77-0x8d1)+
+WMS_UDH_OCTETS_NAT_LANG_LS;break;case WMS_UDH_USER_PROMPT:length=
+(0xd7a+3309-0x1a66)+(0x3d+9587-0x25af)+WMS_UDH_OCTETS_USER_PROMPT;break;case 
+WMS_UDH_EXTENDED_OBJECT:length=(0xba1+2797-0x168d)+(0x1c45+1516-0x2230)+udh->u.
+eo.content.length;if(udh->u.eo.first_segment==TRUE){length+=
+WMS_UDH_OCTETS_EO_HEADER;}break;default:length=(0x1ed+3771-0x10a7)+
+(0x1e6a+1643-0x24d4)+udh->u.other.header_length;break;}}return length;}uint32 
+wms_ts_compute_user_data_header_length(const UINT8 num_headers,const 
+wms_udh_s_type*headers){uint32 length=(0x3c4+276-0x4d8);uint32 i;if(headers==
+NULL){at_print(LOG_DEBUG,
 "\x4e\x75\x6c\x6c\x20\x70\x6f\x69\x6e\x74\x65\x72\x20\x69\x6e\x20\x77\x6d\x73\x5f\x74\x73\x5f\x63\x6f\x6d\x70\x75\x74\x65\x5f\x75\x73\x65\x72\x5f\x64\x61\x74\x61\x5f\x68\x65\x61\x64\x65\x72\x5f\x6c\x65\x6e\x67\x74\x68\x21"
-);return(0x19e9+1237-0x1ebe);}if(num_headers>(0x15ec+772-0x18f0)){length+=
-(0x1194+2171-0x1a0e);for(i=(0x4d6+2579-0xee9);i<num_headers&&i<
+);return(0x1cc+5074-0x159e);}if(num_headers>(0x19fa+3275-0x26c5)){length+=
+(0x12e2+3455-0x2060);for(i=(0x1096+5176-0x24ce);i<num_headers&&i<
 WMS_MAX_UD_HEADERS;i++){length+=(uint32)wms_ts_get_udh_length(&headers[i]);}}
 return length;}uint32 wms_ts_compute_gw_user_data_length(const wms_gw_dcs_s_type
-*dcs,const wms_gw_user_data_s_type*user_data){uint32 length=(0x1ea4+2017-0x2685)
-;if(dcs==NULL||user_data==NULL){at_print(LOG_DEBUG,
+*dcs,const wms_gw_user_data_s_type*user_data){uint32 length=(0xb9+2634-0xb03);if
+(dcs==NULL||user_data==NULL){at_print(LOG_DEBUG,
 "\x4e\x75\x6c\x6c\x20\x70\x6f\x69\x6e\x74\x65\x72\x20\x69\x6e\x20\x77\x6d\x73\x5f\x74\x73\x5f\x63\x6f\x6d\x70\x75\x74\x65\x5f\x67\x77\x5f\x75\x73\x65\x72\x5f\x64\x61\x74\x61\x5f\x6c\x65\x6e\x67\x74\x68\x21"
-);return(0x1476+2224-0x1d26);}length+=wms_ts_compute_user_data_header_length(
+);return(0x5ec+2538-0xfd6);}length+=wms_ts_compute_user_data_header_length(
 user_data->num_headers,user_data->headers);if(dcs->alphabet==
-WMS_GW_ALPHABET_7_BIT_DEFAULT){length+=((user_data->sm_len*(0x7f6+2410-0x1159))+
-(0x1593+367-0x16fb))/(0xad3+1478-0x1091);}else{length+=user_data->sm_len;}return
- length;}static int wms_ts_encode_udh_concat_8(UINT8*udh){int pos=
-(0x5a4+8518-0x26ea);if(const_header->u.concat_8.total_sm==(0xc9+5483-0x1634)||
-const_header->u.concat_8.seq_num==(0xd87+2640-0x17d7)||const_header->u.concat_8.
+WMS_GW_ALPHABET_7_BIT_DEFAULT){length+=((user_data->sm_len*(0x170+5554-0x171b))+
+(0x1978+1714-0x2023))/(0x5aa+7751-0x23e9);}else{length+=user_data->sm_len;}
+return length;}static int wms_ts_encode_udh_concat_8(UINT8*udh){int pos=
+(0xea2+4071-0x1e89);if(const_header->u.concat_8.total_sm==(0xfd5+1343-0x1514)||
+const_header->u.concat_8.seq_num==(0x5dd+7561-0x2366)||const_header->u.concat_8.
 seq_num>const_header->u.concat_8.total_sm){at_print(LOG_DEBUG,
 "\x53\x4d\x53\x20\x55\x44\x48\x20\x48\x65\x61\x64\x65\x72\x20\x69\x64\x20\x25\x64\x20\x50\x72\x65\x73\x65\x6e\x74\x20\x77\x69\x74\x68\x20\x6e\x6f\x20\x44\x61\x74\x61"
-,const_header->header_id);return(0xa9b+6809-0x2534);}udh[pos++]=(UINT8)
+,const_header->header_id);return(0x1534+3497-0x22dd);}udh[pos++]=(UINT8)
 WMS_UDH_CONCAT_8;udh[pos++]=(UINT8)WMS_UDH_OCTETS_CONCAT8;udh[pos++]=
 const_header->u.concat_8.msg_ref;udh[pos++]=const_header->u.concat_8.total_sm;
 udh[pos++]=const_header->u.concat_8.seq_num;return pos;}static int 
-wms_ts_encode_udh_concat16(UINT8*udh){int pos=(0x956+3210-0x15e0);if(
-const_header->u.concat_16.total_sm==(0xa5b+3878-0x1981)||const_header->u.
-concat_16.seq_num==(0x129d+4390-0x23c3)||const_header->u.concat_16.seq_num>
+wms_ts_encode_udh_concat16(UINT8*udh){int pos=(0x11d4+3924-0x2128);if(
+const_header->u.concat_16.total_sm==(0xdb8+5785-0x2451)||const_header->u.
+concat_16.seq_num==(0x11b+6732-0x1b67)||const_header->u.concat_16.seq_num>
 const_header->u.concat_16.total_sm){at_print(LOG_DEBUG,
 "\x53\x4d\x53\x20\x55\x44\x48\x20\x48\x65\x61\x64\x65\x72\x20\x69\x64\x20\x25\x64\x20\x50\x72\x65\x73\x65\x6e\x74\x20\x77\x69\x74\x68\x20\x6e\x6f\x20\x44\x61\x74\x61"
-,const_header->header_id);return(0x20c+5147-0x1627);}udh[pos++]=(UINT8)
+,const_header->header_id);return(0x1a98+2402-0x23fa);}udh[pos++]=(UINT8)
 WMS_UDH_CONCAT_16;udh[pos++]=(UINT8)WMS_UDH_OCTETS_CONCAT16;udh[pos++]=(UINT8)((
-const_header->u.concat_16.msg_ref&65280)>>(0xc92+6188-0x24b6));udh[pos++]=(UINT8
-)(const_header->u.concat_16.msg_ref&(0xcf7+4429-0x1d45));udh[pos++]=const_header
-->u.concat_16.total_sm;udh[pos++]=const_header->u.concat_16.seq_num;return pos;}
-int wms_ts_encode_udh_nat_lang_ss(UINT8*udh){int pos=(0xd75+1215-0x1234);udh[pos
-++]=(UINT8)WMS_UDH_NAT_LANG_SS;udh[pos++]=(UINT8)WMS_UDH_OCTETS_NAT_LANG_SS;udh[
-pos++]=(UINT8)const_header->u.nat_lang_ss.nat_lang_id;return pos;}int 
-wms_ts_encode_udh_nat_lang_ls(UINT8*udh){int pos=(0x1e60+172-0x1f0c);udh[pos++]=
-(UINT8)WMS_UDH_NAT_LANG_LS;udh[pos++]=(UINT8)WMS_UDH_OCTETS_NAT_LANG_LS;udh[pos
-++]=(UINT8)const_header->u.nat_lang_ls.nat_lang_id;return pos;}int 
-wms_ts_encode_udh_other(UINT8*udh,wms_udh_id_e_type header_id){int i=
-(0x18f8+1894-0x205e);int pos=(0x1838+2604-0x2264);udh[pos++]=(UINT8)const_header
-->u.other.header_id;udh[pos++]=const_header->u.other.header_length;for(i=
-(0x2549+403-0x26dc);i<const_header->u.other.header_length;i++){udh[pos++]=
-const_header->u.other.data[i];}return pos;}UINT8 wms_ts_encode_user_data_header(
-UINT8 num_headers,const wms_udh_s_type*headers,UINT8*data){int i,pos=
-(0xbfa+1350-0x1140);if(num_headers==(0xc2d+4775-0x1ed4))return
-(0x1b62+1080-0x1f9a);++pos;for(i=(0x127f+2392-0x1bd7);i<WMS_MAX_UD_HEADERS&&i<
-num_headers;i++){const_header=&headers[i];switch(const_header->header_id){case 
-WMS_UDH_CONCAT_8:pos+=wms_ts_encode_udh_concat_8(data+pos);break;case 
+const_header->u.concat_16.msg_ref&65280)>>(0x3fd+4566-0x15cb));udh[pos++]=(UINT8
+)(const_header->u.concat_16.msg_ref&(0x14f4+1243-0x18d0));udh[pos++]=
+const_header->u.concat_16.total_sm;udh[pos++]=const_header->u.concat_16.seq_num;
+return pos;}int wms_ts_encode_udh_nat_lang_ss(UINT8*udh){int pos=
+(0x3ed+5439-0x192c);udh[pos++]=(UINT8)WMS_UDH_NAT_LANG_SS;udh[pos++]=(UINT8)
+WMS_UDH_OCTETS_NAT_LANG_SS;udh[pos++]=(UINT8)const_header->u.nat_lang_ss.
+nat_lang_id;return pos;}int wms_ts_encode_udh_nat_lang_ls(UINT8*udh){int pos=
+(0x17c7+2813-0x22c4);udh[pos++]=(UINT8)WMS_UDH_NAT_LANG_LS;udh[pos++]=(UINT8)
+WMS_UDH_OCTETS_NAT_LANG_LS;udh[pos++]=(UINT8)const_header->u.nat_lang_ls.
+nat_lang_id;return pos;}int wms_ts_encode_udh_other(UINT8*udh,wms_udh_id_e_type 
+header_id){int i=(0x1398+3831-0x228f);int pos=(0x28f+2250-0xb59);udh[pos++]=(
+UINT8)const_header->u.other.header_id;udh[pos++]=const_header->u.other.
+header_length;for(i=(0x1256+125-0x12d3);i<const_header->u.other.header_length;i
+++){udh[pos++]=const_header->u.other.data[i];}return pos;}UINT8 
+wms_ts_encode_user_data_header(UINT8 num_headers,const wms_udh_s_type*headers,
+UINT8*data){int i,pos=(0xa91+1126-0xef7);if(num_headers==(0x423+5246-0x18a1))
+return(0x2039+754-0x232b);++pos;for(i=(0x2c8+5553-0x1879);i<WMS_MAX_UD_HEADERS&&
+i<num_headers;i++){const_header=&headers[i];switch(const_header->header_id){case
+ WMS_UDH_CONCAT_8:pos+=wms_ts_encode_udh_concat_8(data+pos);break;case 
 WMS_UDH_CONCAT_16:pos+=wms_ts_encode_udh_concat16(data+pos);break;
-#if (0x163+3586-0xf65)

+#if (0x917+518-0xb1d)

 case WMS_UDH_SPECIAL_SM:pos+=wms_ts_encode_udh_special_sm(data+pos);break;case 
 WMS_UDH_PORT_8:pos+=wms_ts_encode_udh_port_8(data+pos);break;case 
 WMS_UDH_PORT_16:pos+=wms_ts_encode_udh_port16(data+pos);break;case 
@@ -1313,106 +1314,106 @@
 case WMS_UDH_NAT_LANG_SS:pos+=wms_ts_encode_udh_nat_lang_ss(data+pos);break;case
  WMS_UDH_NAT_LANG_LS:pos+=wms_ts_encode_udh_nat_lang_ls(data+pos);break;default:
 pos+=wms_ts_encode_udh_other(data+pos,const_header->header_id);}}data[
-(0x17b7+1097-0x1c00)]=(UINT8)(pos-(0xee6+5266-0x2377));return((UINT8)(pos-
-(0x1d55+999-0x213b)));}UINT8 wms_ts_encode_gw_user_data(const wms_gw_dcs_s_type*
+(0x67b+3862-0x1591)]=(UINT8)(pos-(0x24f+8982-0x2564));return((UINT8)(pos-
+(0xf18+5238-0x238d)));}UINT8 wms_ts_encode_gw_user_data(const wms_gw_dcs_s_type*
 dcs,const wms_gw_user_data_s_type*user_data,UINT8*data){UINT16 i,pos=
-(0x1a6+6024-0x192e);UINT8 fill_bits=(0x2ca+5493-0x183f);UINT16 
-total_bits_occupied;UINT8 user_data_header_length;UINT16 user_data_length;data[
-pos]=(UINT8)user_data->sm_len;pos++;if(dcs->alphabet==
-WMS_GW_ALPHABET_7_BIT_DEFAULT){if(user_data->num_headers>(0xf18+1427-0x14ab)){if
-(wms_ts_compute_user_data_header_length(user_data->num_headers,user_data->
-headers)<=WMS_SMS_UDL_MAX_8_BIT){user_data_header_length=
-wms_ts_encode_user_data_header(user_data->num_headers,user_data->headers,data+
-pos);pos+=user_data_header_length+(0x11b0+4313-0x2288);total_bits_occupied=(
-user_data_header_length+(0x14d1+2922-0x203a))*(0x17c5+98-0x181f);fill_bits=(
-total_bits_occupied%(0x6f4+4595-0x18e0));if(fill_bits!=(0x1819+1780-0x1f0d)){
-fill_bits=(0x1924+3250-0x25cf)-fill_bits;}user_data_length=(total_bits_occupied+
-fill_bits+(user_data->sm_len*(0x60d+2865-0x1137)))/(0x12f3+4856-0x25e4);data[
-(0x21dc+380-0x2358)]=(UINT8)user_data_length;data[(0x798+6893-0x2284)]=
+(0x1304+622-0x1572);UINT8 fill_bits=(0x175+304-0x2a5);UINT16 total_bits_occupied
+;UINT8 user_data_header_length;UINT16 user_data_length;data[pos]=(UINT8)
+user_data->sm_len;pos++;if(dcs->alphabet==WMS_GW_ALPHABET_7_BIT_DEFAULT){if(
+user_data->num_headers>(0x39c+4269-0x1449)){if(
+wms_ts_compute_user_data_header_length(user_data->num_headers,user_data->headers
+)<=WMS_SMS_UDL_MAX_8_BIT){user_data_header_length=wms_ts_encode_user_data_header
+(user_data->num_headers,user_data->headers,data+pos);pos+=
+user_data_header_length+(0x780+3100-0x139b);total_bits_occupied=(
+user_data_header_length+(0x47+9154-0x2408))*(0x624+1809-0xd2d);fill_bits=(
+total_bits_occupied%(0x24c4+586-0x2707));if(fill_bits!=(0x41d+5139-0x1830)){
+fill_bits=(0x7ad+2778-0x1280)-fill_bits;}user_data_length=(total_bits_occupied+
+fill_bits+(user_data->sm_len*(0x65+2141-0x8bb)))/(0x1bc+533-0x3ca);data[
+(0x325+2848-0xe45)]=(UINT8)user_data_length;data[(0x1231+3433-0x1f99)]=
 user_data_header_length;}else{at_print(LOG_DEBUG,
 "\x45\x6e\x63\x6f\x64\x65\x20\x55\x73\x65\x72\x20\x44\x61\x74\x61\x20\x48\x65\x61\x64\x65\x72\x20\x45\x78\x63\x65\x65\x64\x73\x20\x43\x61\x70\x61\x63\x69\x74\x79\x20\x2d\x20\x53\x6b\x69\x70\x70\x69\x6e\x67\x20\x55\x44\x48"
 );}}i=wms_ts_pack_gw_7_bit_chars(user_data->sm_data,user_data->sm_len,fill_bits,
 (UINT16)(WMS_MAX_LEN-pos),&data[pos]);pos+=i;}else{if(user_data->num_headers>
-(0x594+5172-0x19c8)){if(wms_ts_compute_user_data_header_length(user_data->
+(0x318+3548-0x10f4)){if(wms_ts_compute_user_data_header_length(user_data->
 num_headers,user_data->headers)<=WMS_SMS_UDL_MAX_8_BIT){user_data_header_length=
 wms_ts_encode_user_data_header(user_data->num_headers,user_data->headers,data+
-pos);data[(0xdfc+4729-0x2075)]=(UINT8)(user_data->sm_len+user_data_header_length
-+(0xa36+985-0xe0e));pos+=user_data_header_length+(0x1219+4688-0x2468);}else{
+pos);data[(0x71a+6205-0x1f57)]=(UINT8)(user_data->sm_len+user_data_header_length
++(0x55a+2241-0xe1a));pos+=user_data_header_length+(0x1279+808-0x15a0);}else{
 at_print(LOG_DEBUG,
 "\x45\x6e\x63\x6f\x64\x65\x20\x55\x73\x65\x72\x20\x44\x61\x74\x61\x20\x48\x65\x61\x64\x65\x72\x20\x45\x78\x63\x65\x65\x64\x73\x20\x43\x61\x70\x61\x63\x69\x74\x79\x20\x2d\x20\x53\x6b\x69\x70\x70\x69\x6e\x67\x20\x55\x44\x48"
 );}}memcpy(&data[pos],user_data->sm_data,user_data->sm_len);pos+=user_data->
 sm_len;}return(UINT8)pos;}wms_status_e_type wms_ts_encode_deliver(const 
 wms_gw_deliver_s_type*deliver,T_zUfiSms_RawTsData*raw_ts_data_ptr){
-wms_status_e_type st=WMS_OK_S;UINT8*data;UINT8 pos=(0x1834+856-0x1b8c),i;if(
+wms_status_e_type st=WMS_OK_S;UINT8*data;UINT8 pos=(0xc2b+6680-0x2643),i;if(
 deliver==NULL||raw_ts_data_ptr==NULL){at_print(LOG_DEBUG,
 "\x4e\x75\x6c\x6c\x20\x70\x6f\x69\x6e\x74\x65\x72\x20\x69\x6e\x20\x77\x6d\x73\x5f\x74\x73\x5f\x65\x6e\x63\x6f\x64\x65\x5f\x64\x65\x6c\x69\x76\x65\x72\x21"
 );return WMS_NULL_PTR_S;}data=raw_ts_data_ptr->data;(void)memset(data,
-(0x549+656-0x7d9),WMS_MAX_LEN);data[pos]=(0xb2b+6413-0x2438);data[pos]|=deliver
-->more?(0xc05+6582-0x25bb):(0x2065+985-0x243a);data[pos]|=deliver->
-status_report_enabled?(0x572+5355-0x1a3d):(0x220b+1249-0x26ec);data[pos]|=
-deliver->user_data_header_present?(0x822+2272-0x10c2):(0xae6+6871-0x25bd);data[
-pos]|=deliver->reply_path_present?(0xc81+1165-0x108e):(0xf98+3093-0x1bad);pos++;
-i=wms_ts_encode_address(&deliver->address,&data[pos]);if(i==(0x14d1+3190-0x2147)
+(0x94d+4798-0x1c0b),WMS_MAX_LEN);data[pos]=(0xdfa+5616-0x23ea);data[pos]|=
+deliver->more?(0x87c+7757-0x26c9):(0x4e4+2776-0xfb8);data[pos]|=deliver->
+status_report_enabled?(0x1255+2931-0x1da8):(0x457+4908-0x1783);data[pos]|=
+deliver->user_data_header_present?(0x4b+7017-0x1b74):(0xd60+1279-0x125f);data[
+pos]|=deliver->reply_path_present?(0xe72+4403-0x1f25):(0x218a+208-0x225a);pos++;
+i=wms_ts_encode_address(&deliver->address,&data[pos]);if(i==(0x1a5f+1366-0x1fb5)
 ){return WMS_INVALID_PARM_SIZE_S;}pos+=i;data[pos]=deliver->pid;pos++;pos+=
 wms_ts_encode_dcs(&deliver->dcs,data+pos);i=wms_ts_encode_timestamp(&deliver->
-timestamp,data+pos);if(i==(0xd5a+2659-0x17bd)){return WMS_INVALID_PARM_VALUE_S;}
-pos+=i;if(wms_ts_compute_gw_user_data_length(&deliver->dcs,&deliver->user_data)>
-WMS_SMS_UDL_MAX_8_BIT){at_print(LOG_DEBUG,
+timestamp,data+pos);if(i==(0x149b+1616-0x1aeb)){return WMS_INVALID_PARM_VALUE_S;
+}pos+=i;if(wms_ts_compute_gw_user_data_length(&deliver->dcs,&deliver->user_data)
+>WMS_SMS_UDL_MAX_8_BIT){at_print(LOG_DEBUG,
 "\x55\x73\x65\x72\x20\x44\x61\x74\x61\x20\x4c\x65\x6e\x67\x74\x68\x20\x68\x61\x73\x20\x65\x78\x63\x65\x65\x64\x65\x64\x20\x63\x61\x70\x61\x63\x69\x74\x79"
 );st=WMS_INVALID_USER_DATA_SIZE_S;}else{i=wms_ts_encode_gw_user_data(&deliver->
 dcs,&deliver->user_data,data+pos);pos+=i;}raw_ts_data_ptr->tpdu_type=
 WMS_TPDU_DELIVER;raw_ts_data_ptr->len=pos;return st;}UINT8 
 wms_ts_encode_relative_time(const wms_timestamp_s_type*timestamp){uint32 i;UINT8
- v=(0x66+8695-0x225d),j;if(timestamp!=NULL){if(!wms_ts_bcd_to_int(timestamp->
+ v=(0x371+5886-0x1a6f),j;if(timestamp!=NULL){if(!wms_ts_bcd_to_int(timestamp->
 year,&j)){at_print(LOG_DEBUG,
 "\x59\x65\x61\x72\x20\x69\x73\x20\x69\x6e\x76\x61\x6c\x69\x64\x3a\x20\x25\x64",j
-);}i=j*(0x14d1+1248-0x1844);if(!wms_ts_bcd_to_int(timestamp->month,&j)){at_print
-(LOG_DEBUG,
+);}i=j*(0xeb5+3689-0x1bb1);if(!wms_ts_bcd_to_int(timestamp->month,&j)){at_print(
+LOG_DEBUG,
 "\x4d\x6f\x6e\x74\x68\x20\x69\x73\x20\x69\x6e\x76\x61\x6c\x69\x64\x3a\x20\x25\x64"
-,j);}i=i+j*(0x364+6710-0x1d7c);if(!wms_ts_bcd_to_int(timestamp->day,&j)){
+,j);}i=i+j*(0x4e9+7001-0x2024);if(!wms_ts_bcd_to_int(timestamp->day,&j)){
 at_print(LOG_DEBUG,
 "\x44\x61\x79\x20\x69\x73\x20\x69\x6e\x76\x61\x6c\x69\x64\x3a\x20\x25\x64",j);}i
-+=j;if(i>(0x1039+990-0x13f9)){v=(UINT8)((i+(0x26d+1467-0x822))/
-(0x40c+4719-0x1674)+(0x13b1+3603-0x2104));}else if(i>=(0x335+8641-0x24f5)){v=(
-UINT8)(i+(0x11b4+2781-0x1beb));}else{if(!wms_ts_bcd_to_int(timestamp->day,&j)){
++=j;if(i>(0x685+1256-0xb4f)){v=(UINT8)((i+(0x1096+5593-0x2669))/
+(0x12e8+1555-0x18f4)+(0x171+8549-0x2216));}else if(i>=(0xd89+3159-0x19df)){v=(
+UINT8)(i+(0x8b5+3525-0x15d4));}else{if(!wms_ts_bcd_to_int(timestamp->day,&j)){
 at_print(LOG_DEBUG,
 "\x44\x61\x79\x20\x69\x73\x20\x69\x6e\x76\x61\x6c\x69\x64\x3a\x20\x25\x64",j);}i
-=j*(0x109b+2869-0x1bb8)*(0xabb+1542-0x1085);if(!wms_ts_bcd_to_int(timestamp->
-hour,&j)){at_print(LOG_DEBUG,
+=j*(0xd41+1572-0x134d)*(0x35c+2762-0xdea);if(!wms_ts_bcd_to_int(timestamp->hour,
+&j)){at_print(LOG_DEBUG,
 "\x48\x6f\x75\x72\x20\x69\x73\x20\x69\x6e\x76\x61\x6c\x69\x64\x3a\x20\x25\x64",j
-);}i=i+j*(0x1eb7+2127-0x26ca);if(!wms_ts_bcd_to_int(timestamp->minute,&j)){
+);}i=i+j*(0x132+8189-0x20f3);if(!wms_ts_bcd_to_int(timestamp->minute,&j)){
 at_print(LOG_DEBUG,
 "\x4d\x69\x6e\x75\x74\x65\x20\x69\x73\x20\x69\x6e\x76\x61\x6c\x69\x64\x3a\x20\x25\x64"
-,j);}i+=j;if(i>(0xb94+3910-0x1ace)*(0x1109+5045-0x2482)){v=(UINT8)((i-((
-(0x4ed+2180-0xd65)*(0x1173+4034-0x20f9))+(0x46b+2871-0xf85)))/(0x1fc+1141-0x653)
-+(0x49b+185-0x4c5));}else{v=(UINT8)((i+(0x1553+2010-0x1d29))/(0x765+1720-0xe18)-
-(0x21cf+1029-0x25d3));}}}else{at_print(LOG_DEBUG,
+,j);}i+=j;if(i>(0x12c6+3010-0x1e7c)*(0x1aa8+39-0x1a93)){v=(UINT8)((i-((
+(0xe2c+2252-0x16ec)*(0x4c9+3056-0x107d))+(0x1a91+1511-0x205b)))/
+(0xa74+2742-0x150c)+(0x444+4994-0x1737));}else{v=(UINT8)((i+(0x2e7+3260-0xf9f))/
+(0x1d7+7856-0x2082)-(0x20c8+206-0x2195));}}}else{at_print(LOG_DEBUG,
 "\x6e\x75\x6c\x6c\x20\x70\x6f\x69\x6e\x74\x65\x72\x20\x69\x6e\x20\x77\x6d\x73\x5f\x74\x73\x5f\x65\x6e\x63\x6f\x64\x65\x5f\x72\x65\x6c\x61\x74\x69\x76\x65\x5f\x74\x69\x6d\x65"
 );}return v;}UINT8 wms_ts_encode_gw_validity(const wms_gw_validity_s_type*
-validity,UINT8*data){UINT8 i,pos=(0x5bb+3440-0x132b);switch(validity->format){
+validity,UINT8*data){UINT8 i,pos=(0x14fd+4397-0x262a);switch(validity->format){
 case WMS_GW_VALIDITY_NONE:break;case WMS_GW_VALIDITY_RELATIVE:data[pos]=
 wms_ts_encode_relative_time(&validity->u.time);pos++;break;case 
 WMS_GW_VALIDITY_ABSOLUTE:i=wms_ts_encode_timestamp(&validity->u.time,data+pos);
-if(i==(0xc02+6615-0x25d9)){at_print(LOG_DEBUG,
+if(i==(0x325+8489-0x244e)){at_print(LOG_DEBUG,
 "\x45\x72\x72\x6f\x72\x20\x77\x68\x69\x6c\x65\x20\x44\x65\x63\x6f\x64\x69\x6e\x67\x20\x41\x62\x73\x6f\x6c\x75\x74\x65\x20\x56\x61\x6c\x69\x64\x69\x74\x79\x20\x54\x69\x6d\x65\x73\x74\x61\x6d\x70"
 );}pos+=i;break;case WMS_GW_VALIDITY_ENHANCED:break;default:break;}return pos;}
 wms_status_e_type wms_ts_encode_submit(const wms_gw_submit_s_type*submit,
 T_zUfiSms_RawTsData*raw_ts_data_ptr){wms_status_e_type st=WMS_OK_S;UINT8*data;
-UINT8 pos=(0xc66+3014-0x182c),i;if(submit==NULL||raw_ts_data_ptr==NULL){at_print
-(LOG_DEBUG,
+UINT8 pos=(0x1b24+2877-0x2661),i;if(submit==NULL||raw_ts_data_ptr==NULL){
+at_print(LOG_DEBUG,
 "\x4e\x75\x6c\x6c\x20\x70\x6f\x69\x6e\x74\x65\x72\x20\x69\x6e\x20\x77\x6d\x73\x5f\x74\x73\x5f\x65\x6e\x63\x6f\x64\x65\x5f\x73\x75\x62\x6d\x69\x74\x21"
 );return WMS_NULL_PTR_S;}data=raw_ts_data_ptr->data;(void)memset(data,
-(0x24f5+156-0x2591),WMS_MAX_LEN);data[pos]=(0x1070+4834-0x2351);data[pos]|=
-submit->reject_duplicates?(0x13d+6389-0x1a2e):(0x168b+1428-0x1c1f);if(submit->
-validity.format>(0x758+861-0xab2)){return st=WMS_INVALID_VALIDITY_FORMAT_S;}data
-[pos]|=submit->validity.format<<(0xdff+4422-0x1f42);data[pos]|=submit->
-status_report_enabled?(0x1eeb+129-0x1f4c):(0x1335+4584-0x251d);data[pos]|=submit
-->user_data_header_present?(0xec4+117-0xef9):(0x1857+3189-0x24cc);data[pos]|=
-submit->reply_path_present?(0x1117+4583-0x227e):(0x9d+7333-0x1d42);pos++;data[
+(0xbfd+953-0xfb6),WMS_MAX_LEN);data[pos]=(0x82+8284-0x20dd);data[pos]|=submit->
+reject_duplicates?(0x1855+2529-0x2232):(0x1352+3168-0x1fb2);if(submit->validity.
+format>(0x128d+879-0x15f9)){return st=WMS_INVALID_VALIDITY_FORMAT_S;}data[pos]|=
+submit->validity.format<<(0x17a8+400-0x1935);data[pos]|=submit->
+status_report_enabled?(0x2223+151-0x229a):(0x7d0+6541-0x215d);data[pos]|=submit
+->user_data_header_present?(0xc13+4506-0x1d6d):(0x1987+79-0x19d6);data[pos]|=
+submit->reply_path_present?(0x1125+4087-0x209c):(0x12f1+3612-0x210d);pos++;data[
 pos]=(UINT8)submit->message_reference;pos++;i=wms_ts_encode_address(&submit->
-address,&data[pos]);if(i==(0x82b+6537-0x21b4)){return WMS_INVALID_PARM_SIZE_S;}
-pos+=i;data[pos]=submit->pid;pos++;pos+=wms_ts_encode_dcs(&submit->dcs,data+pos)
-;pos+=wms_ts_encode_gw_validity(&submit->validity,data+pos);if(
+address,&data[pos]);if(i==(0xbfc+600-0xe54)){return WMS_INVALID_PARM_SIZE_S;}pos
++=i;data[pos]=submit->pid;pos++;pos+=wms_ts_encode_dcs(&submit->dcs,data+pos);
+pos+=wms_ts_encode_gw_validity(&submit->validity,data+pos);if(
 wms_ts_compute_gw_user_data_length(&submit->dcs,&submit->user_data)>
 WMS_SMS_UDL_MAX_8_BIT){at_print(LOG_DEBUG,
 "\x55\x73\x65\x72\x20\x44\x61\x74\x61\x20\x4c\x65\x6e\x67\x74\x68\x20\x68\x61\x73\x20\x65\x78\x63\x65\x65\x64\x65\x64\x20\x63\x61\x70\x61\x63\x69\x74\x79"
@@ -1421,21 +1422,21 @@
 WMS_TPDU_SUBMIT;raw_ts_data_ptr->len=pos;return st;}wms_status_e_type 
 wms_ts_encode_status_report(const wms_gw_status_report_s_type*status_report,
 T_zUfiSms_RawTsData*raw_ts_data_ptr){wms_status_e_type st=WMS_OK_S;UINT8*data;
-UINT8 pos=(0x1cd8+2075-0x24f3),i;if(status_report==NULL||raw_ts_data_ptr==NULL){
+UINT8 pos=(0x8c+8659-0x225f),i;if(status_report==NULL||raw_ts_data_ptr==NULL){
 at_print(LOG_DEBUG,
 "\x4e\x75\x6c\x6c\x20\x70\x6f\x69\x6e\x74\x65\x72\x20\x69\x6e\x20\x77\x6d\x73\x5f\x74\x73\x5f\x65\x6e\x63\x6f\x64\x65\x5f\x73\x74\x61\x74\x75\x73\x5f\x72\x65\x70\x6f\x72\x74\x21"
 );return WMS_NULL_PTR_S;}data=raw_ts_data_ptr->data;(void)memset(data,
-(0x685+837-0x9ca),WMS_MAX_LEN);data[pos]=(0x177+5628-0x1763);data[pos]|=
-status_report->more?(0x134+5162-0x155e):(0x7f9+5791-0x1e94);data[pos]|=
-status_report->status_report_qualifier?(0xffd+2065-0x17ee):(0x1040+5682-0x2672);
-data[pos]|=status_report->user_data_header_present?(0x9f3+2343-0x12da):
-(0xb57+4440-0x1caf);pos++;data[pos]=(UINT8)status_report->message_reference;pos
+(0xc50+432-0xe00),WMS_MAX_LEN);data[pos]=(0x1060+360-0x11b8);data[pos]|=
+status_report->more?(0xc19+1122-0x107b):(0x1d02+2037-0x24f3);data[pos]|=
+status_report->status_report_qualifier?(0x92a+6946-0x242c):(0xde3+659-0x1076);
+data[pos]|=status_report->user_data_header_present?(0x2eb+6333-0x1b68):
+(0x1237+4591-0x2426);pos++;data[pos]=(UINT8)status_report->message_reference;pos
 ++;i=wms_ts_encode_address(&status_report->address,&data[pos]);if(i==
-(0x757+7342-0x2405)){return WMS_INVALID_PARM_SIZE_S;}pos+=i;i=
+(0x663+5153-0x1a84)){return WMS_INVALID_PARM_SIZE_S;}pos+=i;i=
 wms_ts_encode_timestamp(&status_report->timestamp,data+pos);if(i==
-(0x199d+1876-0x20f1)){return WMS_INVALID_PARM_VALUE_S;}pos+=i;i=
+(0x15e5+2485-0x1f9a)){return WMS_INVALID_PARM_VALUE_S;}pos+=i;i=
 wms_ts_encode_timestamp(&status_report->discharge_time,data+pos);if(i==
-(0x814+737-0xaf5)){return WMS_INVALID_PARM_VALUE_S;}pos+=i;data[pos]=
+(0x67+724-0x33b)){return WMS_INVALID_PARM_VALUE_S;}pos+=i;data[pos]=
 status_report->tp_status;pos++;data[pos]=(UINT8)status_report->mask;pos++;if(
 status_report->mask&WMS_TPDU_MASK_PID){data[pos]=status_report->pid;pos++;}if(
 status_report->mask&WMS_TPDU_MASK_DCS){pos+=wms_ts_encode_dcs(&status_report->
@@ -1450,7 +1451,7 @@
 T_zUfiSms_RawTsData*ptRawTsData){wms_status_e_type st=WMS_OK_S;const 
 wms_gw_pp_ts_data_s_type*msg;if(ptClientTsData==NULL||ptRawTsData==NULL){return 
 WMS_NULL_PTR_S;}msg=&ptClientTsData->u.gw_pp;switch(ptClientTsData->format){
-#if (0x525+6208-0x1d65)

+#if (0xd77+5655-0x238e)

 case WMS_FORMAT_CDMA:case WMS_FORMAT_ANALOG_AWISMS:case WMS_FORMAT_ANALOG_CLI:
 case WMS_FORMAT_ANALOG_VOICE_MAIL:case WMS_FORMAT_ANALOG_SMS:case WMS_FORMAT_MWI
 :st=wms_ts_encode_bearer_data(&ptClientTsData->u.cdma,ptRawTsData);break;
@@ -1460,7 +1461,7 @@
 ptRawTsData);break;case WMS_TPDU_SUBMIT:st=wms_ts_encode_submit(&msg->u.submit,
 ptRawTsData);break;case WMS_TPDU_STATUS_REPORT:st=wms_ts_encode_status_report(&
 msg->u.status_report,ptRawTsData);break;
-#if (0x16f7+223-0x17d6)

+#if (0xb39+1320-0x1061)

 case WMS_TPDU_SUBMIT_REPORT_ACK:st=wms_ts_encode_submit_report_ack(&msg->u.
 submit_report_ack,ptRawTsData);break;case WMS_TPDU_SUBMIT_REPORT_ERROR:st=
 wms_ts_encode_submit_report_error(&msg->u.submit_report_error,ptRawTsData);break
@@ -1477,364 +1478,362 @@
 "\x49\x6e\x76\x61\x6c\x69\x64\x20\x66\x6f\x72\x6d\x61\x74\x3a\x20\x25\x64",
 ptClientTsData->format);break;}ptRawTsData->format=ptClientTsData->format;return
  st;}UINT8 wms_ts_unpack_gw_7_bit_chars(const UINT8*in,UINT8 in_len,UINT8 
-out_len_max,UINT16 shift,UINT8*out){int i=(0x3cb+8113-0x237c);UINT16 pos=
-(0xc6+6089-0x188f);if(in==NULL||out==NULL){at_print(LOG_DEBUG,
+out_len_max,UINT16 shift,UINT8*out){int i=(0x90+789-0x3a5);UINT16 pos=
+(0xd08+6064-0x24b8);if(in==NULL||out==NULL){at_print(LOG_DEBUG,
 "\x6e\x75\x6c\x6c\x20\x70\x6f\x69\x6e\x74\x65\x72\x20\x69\x6e\x20\x77\x6d\x73\x5f\x74\x73\x5f\x75\x6e\x70\x61\x63\x6b\x5f\x67\x77\x5f\x37\x5f\x62\x69\x74\x5f\x63\x68\x61\x72\x73"
-);return(0x1108+1380-0x166c);}if(shift!=(0xdf7+1272-0x12ef))pos=pos+
-(0xe2b+944-0x11da);if(shift==(0x6c2+1691-0xd56)){out[(0x162b+2412-0x1f97)]=in[
-(0x7cd+7723-0x25f8)]>>(0x2d6+4001-0x1276);shift=(0x234c+589-0x2599);i=
-(0x41b+5621-0x1a0f);}for(i=i;i<out_len_max&&i<in_len;i++,pos++){out[i]=(in[pos]
-<<shift)&(0x74d+939-0xa79);if(pos!=(0xfda+3706-0x1e54)){
-#if (0xc3f+2993-0x17ef)       
-if(shift==(0xe7a+2125-0x16c7)){out[i]|=(0x215b+706-0x241d);}else{out[i]|=in[pos-
-(0xf9b+4896-0x22ba)]>>((0x139+6434-0x1a53)-shift);}
+);return(0xc9f+5297-0x2150);}if(shift!=(0x1582+106-0x15ec))pos=pos+
+(0x1588+627-0x17fa);if(shift==(0xd2a+6490-0x267d)){out[(0x860+7555-0x25e3)]=in[
+(0xd4f+4924-0x208b)]>>(0x17d0+2877-0x230c);shift=(0x14aa+3108-0x20ce);i=
+(0x22c+5671-0x1852);}for(i=i;i<out_len_max&&i<in_len;i++,pos++){out[i]=(in[pos]
+<<shift)&(0x15d+1866-0x828);if(pos!=(0x17fc+3836-0x26f8)){
+#if (0x641+107-0x6ab)       
+if(shift==(0x3bc+7602-0x216e)){out[i]|=(0xdec+1514-0x13d6);}else{out[i]|=in[pos-
+(0x1b5d+1987-0x231f)]>>((0x1978+1056-0x1d90)-shift);}
 #else

-out[i]|=in[pos-(0x1135+1371-0x168f)]>>((0x7aa+6349-0x206f)-shift);
+out[i]|=in[pos-(0xd22+4695-0x1f78)]>>((0x1b63+1208-0x2013)-shift);
 #endif

-}shift++;if(shift==(0x183b+457-0x19fd)){shift=(0x13f9+989-0x17d6);i++;if(i>=
+}shift++;if(shift==(0x1233+4812-0x24f8)){shift=(0xa21+6100-0x21f5);i++;if(i>=
 out_len_max){at_print(LOG_DEBUG,
 "\x4e\x6f\x74\x20\x65\x6e\x6f\x75\x67\x68\x20\x6f\x75\x74\x70\x75\x74\x20\x62\x75\x66\x66\x65\x72\x20\x66\x6f\x72\x20\x75\x6e\x70\x61\x63\x6b\x69\x6e\x67\x21"
-);break;}out[i]=in[pos]>>(0x5c8+1276-0xac3);}}return(UINT8)(pos);}UINT8 
+);break;}out[i]=in[pos]>>(0xc95+3077-0x1899);}}return(UINT8)(pos);}UINT8 
 wms_ts_decode_address(const UINT8*data,wms_address_s_type*addr){UINT8 i,pos=
-(0xd36+1297-0x1247);i=data[pos];if(i>WMS_GW_ADDRESS_MAX){at_print(LOG_DEBUG,
+(0x27c+9241-0x2695);i=data[pos];if(i>WMS_GW_ADDRESS_MAX){at_print(LOG_DEBUG,
 "\x41\x64\x64\x72\x20\x6c\x65\x6e\x20\x74\x6f\x6f\x20\x6c\x6f\x6e\x67\x3a\x20\x25\x64"
-,i);return(0xf8c+4630-0x21a2);}addr->number_of_digits=i;pos++;addr->digit_mode=
+,i);return(0x4e3+2396-0xe3f);}addr->number_of_digits=i;pos++;addr->digit_mode=
 WMS_DIGIT_MODE_4_BIT;addr->number_type=(wms_number_type_e_type)((data[pos]&
-(0xf02+277-0xfa7))>>(0x3fa+6405-0x1cfb));addr->number_plan=(
-wms_number_plan_e_type)(data[pos]&(0xdb2+5489-0x2314));pos++;if(addr->
-number_type==WMS_NUMBER_ALPHANUMERIC){UINT8 bytes_increment=(0xb9d+3568-0x198d);
-addr->digit_mode=WMS_DIGIT_MODE_8_BIT;bytes_increment=(addr->number_of_digits+
-(0x340+7694-0x214d))/(0x53b+2091-0xd64);addr->number_of_digits=(UINT8)(addr->
-number_of_digits*(0x137b+4004-0x231b)/(0x1fdc+323-0x2118));(void)
+(0x226+794-0x4d0))>>(0x351+6421-0x1c62));addr->number_plan=(
+wms_number_plan_e_type)(data[pos]&(0x490+2207-0xd20));pos++;if(addr->number_type
+==WMS_NUMBER_ALPHANUMERIC){UINT8 bytes_increment=(0x11d6+4980-0x254a);addr->
+digit_mode=WMS_DIGIT_MODE_8_BIT;bytes_increment=(addr->number_of_digits+
+(0x129+4300-0x11f4))/(0x17e2+645-0x1a65);addr->number_of_digits=(UINT8)(addr->
+number_of_digits*(0x2224+878-0x258e)/(0x1520+1295-0x1a28));(void)
 wms_ts_unpack_gw_7_bit_chars(&data[pos],addr->number_of_digits,
-WMS_GW_ADDRESS_MAX,(0x1678+1430-0x1c0e),addr->digits);pos+=bytes_increment;}else
-{for(i=(0x1682+4208-0x26f2);i<addr->number_of_digits;i++){addr->digits[i++]=data
-[pos]&(0x11c8+1766-0x189f);addr->digits[i]=(data[pos]&(0x1d91+651-0x1f2c))>>
-(0x2d0+8317-0x2349);pos++;}}return pos;}UINT8 wms_ts_decode_dcs(const UINT8*data
-,wms_gw_dcs_s_type*dcs){UINT8 pos=(0x2c3+6123-0x1aae);UINT8 i;if(data==NULL||dcs
+WMS_GW_ADDRESS_MAX,(0x2ff+2610-0xd31),addr->digits);pos+=bytes_increment;}else{
+for(i=(0xda7+5222-0x220d);i<addr->number_of_digits;i++){addr->digits[i++]=data[
+pos]&(0x19ba+3014-0x2571);addr->digits[i]=(data[pos]&(0xe2b+4645-0x1f60))>>
+(0x733+6840-0x21e7);pos++;}}return pos;}UINT8 wms_ts_decode_dcs(const UINT8*data
+,wms_gw_dcs_s_type*dcs){UINT8 pos=(0xa3d+6442-0x2367);UINT8 i;if(data==NULL||dcs
 ==NULL){at_print(LOG_DEBUG,
 "\x6e\x75\x6c\x6c\x20\x70\x6f\x69\x6e\x74\x65\x72\x20\x69\x6e\x20\x77\x6d\x73\x5f\x74\x73\x5f\x64\x65\x63\x6f\x64\x65\x5f\x64\x63\x73"
-);return(0xaa0+3617-0x18c1);}dcs->msg_class=WMS_MESSAGE_CLASS_NONE;dcs->
+);return(0x174d+2856-0x2275);}dcs->msg_class=WMS_MESSAGE_CLASS_NONE;dcs->
 msg_waiting=WMS_GW_MSG_WAITING_NONE;dcs->alphabet=WMS_GW_ALPHABET_7_BIT_DEFAULT;
-dcs->is_compressed=FALSE;i=(data[pos]&(0x13e8+777-0x1631))>>(0x2aa+5895-0x19ab);
-switch(i){case(0x81c+7832-0x26b4):dcs->is_compressed=data[pos]&
-(0x10c4+2947-0x1c27);if(data[pos]&(0x2ed+6906-0x1dd7)){dcs->msg_class=(
-wms_message_class_e_type)(data[pos]&(0x47f+2962-0x100e));}else{dcs->msg_class=
+dcs->is_compressed=FALSE;i=(data[pos]&(0x293+4886-0x14e9))>>(0x59f+6913-0x209a);
+switch(i){case(0xcc1+3236-0x1965):dcs->is_compressed=data[pos]&
+(0x929+7669-0x26fe);if(data[pos]&(0x79f+4593-0x1980)){dcs->msg_class=(
+wms_message_class_e_type)(data[pos]&(0x1558+314-0x168f));}else{dcs->msg_class=
 WMS_MESSAGE_CLASS_NONE;}dcs->alphabet=(wms_gw_alphabet_e_type)((data[pos]&
-(0x1268+473-0x1435))>>(0xba5+1333-0x10d8));break;case(0xc25+6246-0x2488):if((
-data[pos]&(0x746+2542-0x1104))==(0xd9+7098-0x1c63)){dcs->alphabet=(data[pos]&
-(0x402+5821-0x1abb))?WMS_GW_ALPHABET_8_BIT:WMS_GW_ALPHABET_7_BIT_DEFAULT;dcs->
-msg_class=(wms_message_class_e_type)(data[pos]&(0x4a3+1003-0x88b));dcs->
+(0x6da+4669-0x190b))>>(0x2a4+6546-0x1c34));break;case(0xb92+4577-0x1d70):if((
+data[pos]&(0x814+2213-0x1089))==(0x47f+3785-0x1318)){dcs->alphabet=(data[pos]&
+(0x1c49+1381-0x21aa))?WMS_GW_ALPHABET_8_BIT:WMS_GW_ALPHABET_7_BIT_DEFAULT;dcs->
+msg_class=(wms_message_class_e_type)(data[pos]&(0xe64+1318-0x1387));dcs->
 is_compressed=FALSE;dcs->msg_waiting=WMS_GW_MSG_WAITING_NONE_1111;}else{dcs->
 is_compressed=FALSE;dcs->msg_class=WMS_MESSAGE_CLASS_NONE;if((data[pos]&
-(0xc0f+819-0xf12))==(0x1218+3785-0x20e1)){dcs->msg_waiting=
+(0x79a+2107-0xfa5))==(0x1171+5308-0x262d)){dcs->msg_waiting=
 WMS_GW_MSG_WAITING_DISCARD;dcs->alphabet=WMS_GW_ALPHABET_7_BIT_DEFAULT;}else if(
-(data[pos]&(0x14b8+835-0x17cb))==(0x17a0+1023-0x1b8f)){dcs->msg_waiting=
+(data[pos]&(0x1742+3229-0x23af))==(0xdbb+4142-0x1dd9)){dcs->msg_waiting=
 WMS_GW_MSG_WAITING_STORE;dcs->alphabet=WMS_GW_ALPHABET_7_BIT_DEFAULT;}else{dcs->
 msg_waiting=WMS_GW_MSG_WAITING_STORE;dcs->alphabet=WMS_GW_ALPHABET_UCS2;}dcs->
-msg_waiting_active=(data[pos]&(0x6cf+7220-0x22fb))?TRUE:FALSE;dcs->
-msg_waiting_kind=(wms_gw_msg_waiting_kind_e_type)(data[pos]&(0x721+400-0x8ae));}
-break;default:at_print(LOG_DEBUG,
+msg_waiting_active=(data[pos]&(0x8c1+5406-0x1dd7))?TRUE:FALSE;dcs->
+msg_waiting_kind=(wms_gw_msg_waiting_kind_e_type)(data[pos]&(0xac6+1854-0x1201))
+;}break;default:at_print(LOG_DEBUG,
 "\x49\x6e\x76\x61\x6c\x69\x64\x20\x44\x43\x53\x3a\x20\x25\x78",data[pos]);dcs->
 alphabet=WMS_GW_ALPHABET_7_BIT_DEFAULT;dcs->is_compressed=FALSE;dcs->msg_waiting
 =WMS_GW_MSG_WAITING_NONE;dcs->msg_class=WMS_MESSAGE_CLASS_NONE;break;}if(dcs->
 alphabet>WMS_GW_ALPHABET_UCS2){dcs->alphabet=WMS_GW_ALPHABET_7_BIT_DEFAULT;}dcs
 ->raw_dcs_data=data[pos];pos++;return pos;}UINT8 wms_ts_decode_timestamp(const 
-UINT8*data,wms_timestamp_s_type*timestamp){UINT8 pos=(0xf1a+7-0xf21),i,j;if(data
-==NULL||timestamp==NULL){at_print(LOG_DEBUG,
+UINT8*data,wms_timestamp_s_type*timestamp){UINT8 pos=(0xeb1+1667-0x1534),i,j;if(
+data==NULL||timestamp==NULL){at_print(LOG_DEBUG,
 "\x6e\x75\x6c\x6c\x20\x70\x6f\x69\x6e\x74\x65\x72\x20\x69\x6e\x20\x77\x6d\x73\x5f\x74\x73\x5f\x64\x65\x63\x6f\x64\x65\x5f\x74\x69\x6d\x65\x73\x74\x61\x6d\x70"
-);return(0x7d2+4925-0x1b0f);}i=((data[pos]&(0x1057+4490-0x21d2))<<
-(0x91b+3316-0x160b))+((data[pos]&(0x622+4338-0x1624))>>(0xdfc+723-0x10cb));if(!
+);return(0x6f5+5991-0x1e5c);}i=((data[pos]&(0x7c5+5447-0x1cfd))<<
+(0xc40+89-0xc95))+((data[pos]&(0x1945+1244-0x1d31))>>(0x159f+2820-0x209f));if(!
 wms_ts_bcd_to_int(i,&j)){at_print(LOG_DEBUG,
 "\x49\x6e\x76\x61\x6c\x69\x64\x20\x42\x43\x44\x20\x44\x69\x67\x69\x74\x73\x20\x69\x6e\x20\x45\x6e\x63\x6f\x64\x65\x64\x20\x54\x69\x6d\x65\x73\x74\x61\x6d\x70\x20\x59\x65\x61\x72\x20\x3a\x20\x25\x64"
-,data[pos]);i=(0x21bd+971-0x2588);}timestamp->year=i;pos++;i=((data[pos]&
-(0xc7b+4908-0x1f98))<<(0x14c1+3570-0x22af))+((data[pos]&(0x9b1+3836-0x17bd))>>
-(0x1ddc+2262-0x26ae));if(wms_ts_bcd_to_int(i,&j)){if(j>(0x1cb8+276-0x1dc0)||j<
-(0x1a5d+1794-0x215e)){at_print(LOG_DEBUG,
+,data[pos]);i=(0xa+6430-0x1928);}timestamp->year=i;pos++;i=((data[pos]&
+(0x1644+2911-0x2194))<<(0x16df+2153-0x1f44))+((data[pos]&(0x2f3+6679-0x1c1a))>>
+(0x28f+5525-0x1820));if(wms_ts_bcd_to_int(i,&j)){if(j>(0xe15+1053-0x1226)||j<
+(0xcbf+6062-0x246c)){at_print(LOG_DEBUG,
 "\x4d\x6f\x6e\x74\x68\x20\x69\x73\x20\x69\x6e\x76\x61\x6c\x69\x64\x3a\x20\x25\x64"
-,j);i=(0xcbc+4387-0x1dde);}}else{at_print(LOG_DEBUG,
+,j);i=(0x15e6+1572-0x1c09);}}else{at_print(LOG_DEBUG,
 "\x49\x6e\x76\x61\x6c\x69\x64\x20\x42\x43\x44\x20\x44\x69\x67\x69\x74\x73\x20\x69\x6e\x20\x45\x6e\x63\x6f\x64\x65\x64\x20\x54\x69\x6d\x65\x73\x74\x61\x6d\x70\x20\x4d\x6f\x6e\x74\x68\x20\x3a\x20\x25\x64"
-,data[pos]);i=(0x2037+921-0x23cf);}timestamp->month=i;pos++;i=((data[pos]&
-(0xa91+59-0xabd))<<(0x10d2+2512-0x1a9e))+((data[pos]&(0x33d+1248-0x72d))>>
-(0x471+5183-0x18ac));if(wms_ts_bcd_to_int(i,&j)){if(j>(0x9ab+1778-0x107e)||j<
-(0x7ba+546-0x9db)){at_print(LOG_DEBUG,
+,data[pos]);i=(0x62d+1384-0xb94);}timestamp->month=i;pos++;i=((data[pos]&
+(0x1e8+7664-0x1fc9))<<(0x1f69+873-0x22ce))+((data[pos]&(0x851+889-0xada))>>
+(0x13a4+902-0x1726));if(wms_ts_bcd_to_int(i,&j)){if(j>(0x110b+2362-0x1a26)||j<
+(0xc2d+2781-0x1709)){at_print(LOG_DEBUG,
 "\x44\x61\x79\x20\x69\x73\x20\x69\x6e\x76\x61\x6c\x69\x64\x3a\x20\x25\x64",j);i=
-(0xd59+2314-0x1662);}}else{at_print(LOG_DEBUG,
+(0xfd4+2410-0x193d);}}else{at_print(LOG_DEBUG,
 "\x49\x6e\x76\x61\x6c\x69\x64\x20\x42\x43\x44\x20\x44\x69\x67\x69\x74\x73\x20\x69\x6e\x20\x45\x6e\x63\x6f\x64\x65\x64\x20\x54\x69\x6d\x65\x73\x74\x61\x6d\x70\x20\x44\x61\x79\x20\x3a\x20\x25\x64"
-,data[pos]);i=(0x9f9+3895-0x192f);}timestamp->day=i;pos++;i=((data[pos]&
-(0x6af+5361-0x1b91))<<(0x45d+5497-0x19d2))+((data[pos]&(0x20f+1494-0x6f5))>>
-(0x291+9200-0x267d));if(wms_ts_bcd_to_int(i,&j)){if(j>(0xb96+1100-0xfcb)){
+,data[pos]);i=(0x611+886-0x986);}timestamp->day=i;pos++;i=((data[pos]&
+(0x15d4+508-0x17c1))<<(0xf7a+4621-0x2183))+((data[pos]&(0x10a6+2935-0x1b2d))>>
+(0x1942+2354-0x2270));if(wms_ts_bcd_to_int(i,&j)){if(j>(0x1479+1653-0x1ad7)){
 at_print(LOG_DEBUG,
 "\x48\x6f\x75\x72\x20\x69\x73\x20\x74\x6f\x6f\x20\x6c\x61\x72\x67\x65\x3a\x20\x25\x64"
-,j);i=(0x1470+2923-0x1fdb);}}else{at_print(LOG_DEBUG,
+,j);i=(0x1023+1855-0x1762);}}else{at_print(LOG_DEBUG,
 "\x49\x6e\x76\x61\x6c\x69\x64\x20\x42\x43\x44\x20\x44\x69\x67\x69\x74\x73\x20\x69\x6e\x20\x45\x6e\x63\x6f\x64\x65\x64\x20\x54\x69\x6d\x65\x73\x74\x61\x6d\x70\x20\x48\x6f\x75\x72\x20\x3a\x20\x25\x64"
-,data[pos]);i=(0x2b9+1483-0x884);}timestamp->hour=i;pos++;i=((data[pos]&
-(0x866+2055-0x105e))<<(0x4bf+44-0x4e7))+((data[pos]&(0x525+7830-0x22cb))>>
-(0xdf5+5147-0x220c));if(wms_ts_bcd_to_int(i,&j)){if(j>(0x1ee2+1286-0x23ad)){
+,data[pos]);i=(0x7b6+5194-0x1c00);}timestamp->hour=i;pos++;i=((data[pos]&
+(0x4a6+461-0x664))<<(0x14b+1256-0x62f))+((data[pos]&(0x66b+5941-0x1cb0))>>
+(0xc68+4360-0x1d6c));if(wms_ts_bcd_to_int(i,&j)){if(j>(0x164a+176-0x16bf)){
 at_print(LOG_DEBUG,
 "\x4d\x69\x6e\x75\x74\x65\x20\x69\x73\x20\x74\x6f\x6f\x20\x6c\x61\x72\x67\x65\x3a\x20\x25\x64"
-,j);i=(0x10d+7207-0x1d34);}}else{at_print(LOG_DEBUG,
+,j);i=(0xfd3+4417-0x2114);}}else{at_print(LOG_DEBUG,
 "\x49\x6e\x76\x61\x6c\x69\x64\x20\x42\x43\x44\x20\x44\x69\x67\x69\x74\x73\x20\x69\x6e\x20\x45\x6e\x63\x6f\x64\x65\x64\x20\x54\x69\x6d\x65\x73\x74\x61\x6d\x70\x20\x4d\x69\x6e\x75\x74\x65\x20\x3a\x20\x25\x64"
-,data[pos]);i=(0x27d+3353-0xf96);}timestamp->minute=i;pos++;i=((data[pos]&
-(0x13a9+2702-0x1e28))<<(0x364+8755-0x2593))+((data[pos]&(0x240+2323-0xa63))>>
-(0xfdd+1843-0x170c));if(wms_ts_bcd_to_int(i,&j)){if(j>(0x99+4539-0x1219)){
+,data[pos]);i=(0x13ef+1788-0x1aeb);}timestamp->minute=i;pos++;i=((data[pos]&
+(0xbfb+2766-0x16ba))<<(0x1555+3946-0x24bb))+((data[pos]&(0x104a+5410-0x247c))>>
+(0x1591+3277-0x225a));if(wms_ts_bcd_to_int(i,&j)){if(j>(0x41c+6031-0x1b70)){
 at_print(LOG_DEBUG,
 "\x53\x65\x63\x6f\x6e\x64\x20\x69\x73\x20\x74\x6f\x6f\x20\x6c\x61\x72\x67\x65\x3a\x20\x25\x64"
-,i);i=(0xf+8839-0x2296);}}else{at_print(LOG_DEBUG,
+,i);i=(0x25a+8968-0x2562);}}else{at_print(LOG_DEBUG,
 "\x49\x6e\x76\x61\x6c\x69\x64\x20\x42\x43\x44\x20\x44\x69\x67\x69\x74\x73\x20\x69\x6e\x20\x45\x6e\x63\x6f\x64\x65\x64\x20\x54\x69\x6d\x65\x73\x74\x61\x6d\x70\x20\x53\x65\x63\x6f\x6e\x64\x20\x3a\x20\x25\x64"
-,data[pos]);i=(0xe54+4363-0x1f5f);}timestamp->second=i;pos++;if(data[pos]&
-(0xfcf+5428-0x24fb)){timestamp->timezone=(data[pos]&(0x17fb+3113-0x241d))*
-(0x177f+3256-0x242d)+((data[pos]&(0x1ac9+565-0x1c0e))>>(0xf75+3419-0x1ccc));
-timestamp->timezone*=(-(0x9+1963-0x7b3));}else{timestamp->timezone=(sint7)((data
-[pos]&(0x42d+6224-0x1c6e))*(0xf1d+1932-0x169f)+((data[pos]&(0xe90+4904-0x20c8))
->>(0x298+5933-0x19c1)));}if(timestamp->timezone>(0x695+2015-0xe44)||timestamp->
-timezone<-(0xe51+2302-0x171f)){at_print(LOG_DEBUG,
+,data[pos]);i=(0x21f+9079-0x2596);}timestamp->second=i;pos++;if(data[pos]&
+(0xb65+1273-0x1056)){timestamp->timezone=(data[pos]&(0x1761+1100-0x1ba6))*
+(0xee9+5196-0x232b)+((data[pos]&(0x1061+646-0x11f7))>>(0xb76+1205-0x1027));
+timestamp->timezone*=(-(0xa93+535-0xca9));}else{timestamp->timezone=(sint7)((
+data[pos]&(0xad2+3989-0x1a58))*(0x86c+1266-0xd54)+((data[pos]&(0xe7d+340-0xee1))
+>>(0xb8f+1428-0x111f)));}if(timestamp->timezone>(0xdc8+5902-0x24a6)||timestamp->
+timezone<-(0x135c+1978-0x1ae6)){at_print(LOG_DEBUG,
 "\x54\x69\x6d\x65\x7a\x6f\x6e\x65\x20\x69\x73\x20\x6f\x75\x74\x20\x6f\x66\x20\x62\x6f\x75\x6e\x64\x3a\x20\x25\x64"
-,timestamp->timezone);timestamp->timezone=(0x4a1+596-0x6f5);}pos++;return pos;}
-static UINT8 wms_ts_decode_udh_concat_8(const UINT8*udh,wms_udh_s_type*
-header_ptr){UINT8 pos=(0x816+7838-0x26b4);if(udh==NULL||header_ptr==NULL){
+,timestamp->timezone);timestamp->timezone=(0x845+5001-0x1bce);}pos++;return pos;
+}static UINT8 wms_ts_decode_udh_concat_8(const UINT8*udh,wms_udh_s_type*
+header_ptr){UINT8 pos=(0xe39+4725-0x20ae);if(udh==NULL||header_ptr==NULL){
 at_print(LOG_DEBUG,"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return
-(0x1194+3271-0x1e5b);}if(udh[pos]<(0x1903+638-0x1b7e)){at_print(LOG_DEBUG,
+(0x35f+452-0x523);}if(udh[pos]<(0xaf+4798-0x136a)){at_print(LOG_DEBUG,
 "\x55\x44\x48\x20\x48\x65\x61\x64\x65\x72\x20\x43\x6f\x6e\x63\x61\x74\x20\x38\x20\x50\x72\x65\x73\x65\x6e\x74\x20\x77\x69\x74\x68\x20\x69\x6e\x76\x61\x6c\x69\x64\x20\x64\x61\x74\x61\x20\x6c\x65\x6e\x67\x74\x68\x20\x3d\x20\x25\x64"
-,udh[pos]);return(0xa84+5094-0x1e6a);}if(udh[pos+(0x689+3787-0x1552)]==
-(0x1522+2254-0x1df0)||udh[pos+(0x1614+2018-0x1df3)]>udh[pos+(0x662+4602-0x185a)]
-){at_print(LOG_DEBUG,
+,udh[pos]);return(0x101+5859-0x17e4);}if(udh[pos+(0x18df+1830-0x2003)]==
+(0x122c+3524-0x1ff0)||udh[pos+(0x19+5990-0x177c)]>udh[pos+(0x35c+816-0x68a)]){
+at_print(LOG_DEBUG,
 "\x55\x44\x48\x20\x48\x65\x61\x64\x65\x72\x20\x43\x6f\x6e\x74\x61\x63\x74\x20\x38\x20\x77\x69\x74\x68\x20\x6f\x75\x74\x20\x6f\x66\x20\x62\x6f\x75\x6e\x64\x20\x6d\x61\x78\x20\x6d\x65\x73\x73\x61\x67\x65\x73"
-);return(0x468+6626-0x1e4a);}pos++;header_ptr->header_id=WMS_UDH_CONCAT_8;
+);return(0x89+8986-0x23a3);}pos++;header_ptr->header_id=WMS_UDH_CONCAT_8;
 header_ptr->u.concat_8.msg_ref=udh[pos++];header_ptr->u.concat_8.total_sm=udh[
-pos++];header_ptr->u.concat_8.seq_num=udh[pos++];return(udh[(0x865+652-0xaf1)]+
-(0x2241+803-0x2563));}static UINT8 wms_ts_decode_udh_concat16(const UINT8*udh,
-wms_udh_s_type*header_ptr){UINT8 pos=(0x223b+257-0x233c);if(udh==NULL||
+pos++];header_ptr->u.concat_8.seq_num=udh[pos++];return(udh[(0xbbc+2475-0x1567)]
++(0x401+7124-0x1fd4));}static UINT8 wms_ts_decode_udh_concat16(const UINT8*udh,
+wms_udh_s_type*header_ptr){UINT8 pos=(0x1742+3885-0x266f);if(udh==NULL||
 header_ptr==NULL){at_print(LOG_DEBUG,
-"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0xd66+5934-0x2494);}if(
-udh[pos]<(0x3b2+1292-0x8ba)){at_print(LOG_DEBUG,
+"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0xa5b+7157-0x2650);}if(
+udh[pos]<(0xe9+7387-0x1dc0)){at_print(LOG_DEBUG,
 "\x53\x4d\x53\x20\x55\x44\x48\x20\x48\x65\x61\x64\x65\x72\x20\x43\x6f\x6e\x63\x61\x74\x31\x36\x20\x50\x72\x65\x73\x65\x6e\x74\x20\x77\x69\x74\x68\x20\x69\x6e\x76\x61\x6c\x69\x64\x20\x64\x61\x74\x61\x20\x6c\x65\x6e\x67\x74\x68\x20\x3d\x20\x25\x64"
-,udh[pos]);return(0x136b+1866-0x1ab5);}if(udh[pos+(0xb66+3868-0x1a7f)]==
-(0x49c+411-0x637)||udh[pos+(0x2a8+3736-0x113c)]==(0x7ea+4912-0x1b1a)||udh[pos+
-(0x1331+4158-0x236b)]>udh[pos+(0x25a4+128-0x2621)])return(0x2436+433-0x25e7);
+,udh[pos]);return(0xe5b+2711-0x18f2);}if(udh[pos+(0x15a+8726-0x236d)]==
+(0x85a+1371-0xdb5)||udh[pos+(0x6d+8421-0x214e)]==(0x82b+7129-0x2404)||udh[pos+
+(0xd6c+4637-0x1f85)]>udh[pos+(0x852+6322-0x2101)])return(0x717+7209-0x2340);
 header_ptr->header_id=WMS_UDH_CONCAT_16;pos++;header_ptr->u.concat_16.msg_ref=
 udh[pos++];header_ptr->u.concat_16.msg_ref=(UINT16)(header_ptr->u.concat_16.
-msg_ref<<(0xd28+1489-0x12f1))|udh[pos++];header_ptr->u.concat_16.total_sm=udh[
-pos++];header_ptr->u.concat_16.seq_num=udh[pos++];return(udh[
-(0x1ed6+1691-0x2571)]+(0x208a+139-0x2114));}static UINT8 
-wms_ts_udh_decode_first_seg_check(const UINT8 len,const UINT8*data,UINT8*
-is_first_segment_ptr){UINT8 pos=(0x12f4+4778-0x259e);UINT8 num_headers=
-(0x19d7+2196-0x226b);UINT8 udhl=(0x933+5517-0x1ec0);UINT8 iedl=
-(0x13e6+1084-0x1822);UINT8 iei=(0x441+7858-0x22f3);*is_first_segment_ptr=TRUE;if
-(data==NULL||data[pos]==(0x406+4787-0x16b9)||len==(0x14b4+1433-0x1a4d)){at_print
-(LOG_DEBUG,
+msg_ref<<(0x209d+888-0x240d))|udh[pos++];header_ptr->u.concat_16.total_sm=udh[
+pos++];header_ptr->u.concat_16.seq_num=udh[pos++];return(udh[(0x1ac+1827-0x8cf)]
++(0x761+1927-0xee7));}static UINT8 wms_ts_udh_decode_first_seg_check(const UINT8
+ len,const UINT8*data,UINT8*is_first_segment_ptr){UINT8 pos=(0x1138+3018-0x1d02)
+;UINT8 num_headers=(0x1973+359-0x1ada);UINT8 udhl=(0xc73+213-0xd48);UINT8 iedl=
+(0x5b7+4184-0x160f);UINT8 iei=(0x1314+4301-0x23e1);*is_first_segment_ptr=TRUE;if
+(data==NULL||data[pos]==(0x1565+265-0x166e)||len==(0x940+5622-0x1f36)){at_print(
+LOG_DEBUG,
 "\x6e\x75\x6c\x6c\x20\x69\x6e\x20\x77\x6d\x73\x5f\x74\x73\x5f\x75\x64\x68\x5f\x64\x65\x63\x6f\x64\x65\x5f\x66\x69\x72\x73\x74\x5f\x73\x65\x67\x5f\x63\x68\x65\x63\x6b"
 );return FALSE;}udhl=data[pos];pos++;while((pos<udhl)&&(num_headers<
-WMS_MAX_UD_HEADERS)){iei=data[pos];iedl=data[pos+(0xa50+5956-0x2193)];if(iei==
-WMS_UDH_CONCAT_16){if(data[pos+(0x8+9095-0x238a)]!=(0x1fec+1806-0x26f9)){
+WMS_MAX_UD_HEADERS)){iei=data[pos];iedl=data[pos+(0x1d13+1526-0x2308)];if(iei==
+WMS_UDH_CONCAT_16){if(data[pos+(0x1a88+2010-0x225d)]!=(0x975+2790-0x145a)){
 at_print(LOG_DEBUG,
 "\x57\x4d\x53\x5f\x55\x44\x48\x5f\x43\x4f\x4e\x43\x41\x54\x5f\x31\x36\x20\x6e\x6f\x74\x20\x66\x69\x72\x73\x74\x20\x73\x65\x67\x6d\x65\x6e\x74\x21"
 );*is_first_segment_ptr=FALSE;return TRUE;}else{return TRUE;}}else{num_headers++
-;pos+=((0xafa+2067-0x130b)+iedl);}}return TRUE;}static UINT8 
+;pos+=((0x19ac+772-0x1cae)+iedl);}}return TRUE;}static UINT8 
 wms_ts_decode_udh_special_sm(const UINT8*udh,wms_udh_s_type*header_ptr){UINT8 
-pos=(0xebf+2682-0x1939);if(udh==NULL||header_ptr==NULL){at_print(LOG_DEBUG,
-"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0x948+1768-0x1030);}if(
-udh[pos]<(0x22fb+558-0x2527)){at_print(LOG_DEBUG,
+pos=(0x2ea+131-0x36d);if(udh==NULL||header_ptr==NULL){at_print(LOG_DEBUG,
+"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0x132+39-0x159);}if(udh[
+pos]<(0xae7+1890-0x1247)){at_print(LOG_DEBUG,
 "\x53\x4d\x53\x20\x55\x44\x48\x20\x48\x65\x61\x64\x65\x72\x20\x53\x70\x65\x63\x69\x61\x6c\x20\x53\x4d\x20\x50\x72\x65\x73\x65\x6e\x74\x20\x77\x69\x74\x68\x20\x69\x6e\x76\x61\x6c\x69\x64\x20\x64\x61\x74\x61\x20\x6c\x65\x6e\x67\x74\x68\x20\x3d\x20\x25\x64"
-,udh[pos]);return(0xa5a+1389-0xfc7);}pos++;header_ptr->header_id=
+,udh[pos]);return(0x1d4f+127-0x1dce);}pos++;header_ptr->header_id=
 WMS_UDH_SPECIAL_SM;header_ptr->u.special_sm.msg_waiting=(
-wms_gw_msg_waiting_e_type)((udh[pos]>>(0x1066+1672-0x16e7)==(0x84a+682-0xaf4))?
+wms_gw_msg_waiting_e_type)((udh[pos]>>(0x38c+4539-0x1540)==(0x332+6284-0x1bbe))?
 WMS_GW_MSG_WAITING_DISCARD:WMS_GW_MSG_WAITING_STORE);header_ptr->u.special_sm.
-msg_waiting_kind=(wms_gw_msg_waiting_kind_e_type)(udh[pos++]&(0xc12+797-0xeb0));
-header_ptr->u.special_sm.message_count=udh[pos++];return(udh[
-(0x1b18+1613-0x2165)]+(0x1ab2+82-0x1b03));}static UINT8 wms_ts_decode_udh_port_8
-(const UINT8*udh,wms_udh_s_type*header_ptr){UINT8 pos=(0x2d6+7696-0x20e6);if(udh
-==NULL||header_ptr==NULL){at_print(LOG_DEBUG,
-"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0x1190+4625-0x23a1);}if(
-udh[pos]<(0x16cd+3067-0x22c6)){at_print(LOG_DEBUG,
+msg_waiting_kind=(wms_gw_msg_waiting_kind_e_type)(udh[pos++]&(0x87c+5309-0x1cba)
+);header_ptr->u.special_sm.message_count=udh[pos++];return(udh[(0x3c1+387-0x544)
+]+(0x1934+3285-0x2608));}static UINT8 wms_ts_decode_udh_port_8(const UINT8*udh,
+wms_udh_s_type*header_ptr){UINT8 pos=(0x1cd5+2232-0x258d);if(udh==NULL||
+header_ptr==NULL){at_print(LOG_DEBUG,
+"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0x117d+274-0x128f);}if(
+udh[pos]<(0x13f3+4110-0x23ff)){at_print(LOG_DEBUG,
 "\x55\x44\x48\x20\x48\x65\x61\x64\x65\x72\x20\x50\x6f\x72\x74\x20\x38\x20\x50\x72\x65\x73\x65\x6e\x74\x20\x77\x69\x74\x68\x20\x69\x6e\x76\x61\x6c\x69\x64\x20\x64\x61\x74\x61\x20\x6c\x65\x6e\x67\x74\x68\x20\x3d\x20\x25\x64"
-,udh[pos]);return(0x17c2+3759-0x2671);}pos++;header_ptr->header_id=
+,udh[pos]);return(0x1deb+2319-0x26fa);}pos++;header_ptr->header_id=
 WMS_UDH_PORT_8;header_ptr->u.wap_8.dest_port=udh[pos++];header_ptr->u.wap_8.
-orig_port=udh[pos++];return(udh[(0x1de7+1086-0x2225)]+(0x10c1+1508-0x16a4));}
-static UINT8 wms_ts_decode_udh_port16(const UINT8*udh,wms_udh_s_type*header_ptr)
-{UINT8 pos=(0x12b2+3525-0x2077);if(udh==NULL||header_ptr==NULL){at_print(
-LOG_DEBUG,"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return
-(0xbea+6411-0x24f5);}if(udh[pos]<(0x1a8a+1114-0x1ee0)){at_print(LOG_DEBUG,
+orig_port=udh[pos++];return(udh[(0x252+487-0x439)]+(0x45c+204-0x527));}static 
+UINT8 wms_ts_decode_udh_port16(const UINT8*udh,wms_udh_s_type*header_ptr){UINT8 
+pos=(0x7e6+6350-0x20b4);if(udh==NULL||header_ptr==NULL){at_print(LOG_DEBUG,
+"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0xb13+882-0xe85);}if(udh[
+pos]<(0x18df+61-0x1918)){at_print(LOG_DEBUG,
 "\x53\x4d\x53\x20\x55\x44\x48\x20\x48\x65\x61\x64\x65\x72\x20\x50\x6f\x72\x74\x31\x36\x20\x50\x72\x65\x73\x65\x6e\x74\x20\x77\x69\x74\x68\x20\x69\x6e\x76\x61\x6c\x69\x64\x20\x64\x61\x74\x61\x20\x6c\x65\x6e\x67\x74\x68\x20\x3d\x20\x25\x64"
-,udh[pos]);return(0x1b62+2658-0x25c4);}header_ptr->header_id=WMS_UDH_PORT_16;pos
-++;header_ptr->u.wap_16.dest_port=udh[pos++];header_ptr->u.wap_16.dest_port=(
-UINT16)(header_ptr->u.wap_16.dest_port<<(0x17f2+420-0x198e))|udh[pos++];
+,udh[pos]);return(0x83+7663-0x1e72);}header_ptr->header_id=WMS_UDH_PORT_16;pos++
+;header_ptr->u.wap_16.dest_port=udh[pos++];header_ptr->u.wap_16.dest_port=(
+UINT16)(header_ptr->u.wap_16.dest_port<<(0x234+5271-0x16c3))|udh[pos++];
 header_ptr->u.wap_16.orig_port=udh[pos++];header_ptr->u.wap_16.orig_port=(UINT16
-)(header_ptr->u.wap_16.orig_port<<(0x18ff+1534-0x1ef5))|udh[pos++];return(udh[
-(0x157f+1613-0x1bcc)]+(0x17d0+3805-0x26ac));}static UINT8 
+)(header_ptr->u.wap_16.orig_port<<(0x148+8352-0x21e0))|udh[pos++];return(udh[
+(0xcc3+5595-0x229e)]+(0x154+7562-0x1edd));}static UINT8 
 wms_ts_decode_udh_text_formatting(const UINT8*udh,wms_udh_s_type*header_ptr){
-UINT8 pos=(0x10a+7023-0x1c79);if(udh==NULL||header_ptr==NULL){at_print(LOG_DEBUG
-,"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0x692+5213-0x1aef);}if(
-udh[pos]<(0x10fc+1398-0x166f)){at_print(LOG_DEBUG,
+UINT8 pos=(0xb2f+1145-0xfa8);if(udh==NULL||header_ptr==NULL){at_print(LOG_DEBUG,
+"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0xe5f+5815-0x2516);}if(
+udh[pos]<(0x156d+2345-0x1e93)){at_print(LOG_DEBUG,
 "\x53\x4d\x53\x20\x55\x44\x48\x20\x48\x65\x61\x64\x65\x72\x20\x54\x65\x78\x74\x20\x46\x6f\x72\x6d\x61\x74\x74\x69\x6e\x67\x20\x50\x72\x65\x73\x65\x6e\x74\x20\x77\x69\x74\x68\x20\x69\x6e\x76\x61\x6c\x69\x64\x20\x64\x61\x74\x61\x20\x6c\x65\x6e\x67\x74\x68\x20\x3d\x20\x25\x64"
-,udh[pos]);return(0x8f0+3592-0x16f8);}if(udh[pos]>=(0x175+6681-0x1b8a)){
+,udh[pos]);return(0x1ca2+143-0x1d31);}if(udh[pos]>=(0xb21+3662-0x196b)){
 header_ptr->u.text_formating.is_color_present=TRUE;}else{header_ptr->u.
 text_formating.is_color_present=FALSE;}pos++;header_ptr->header_id=
 WMS_UDH_TEXT_FORMATING;header_ptr->u.text_formating.start_position=udh[pos++];
 header_ptr->u.text_formating.text_formatting_length=udh[pos++];header_ptr->u.
 text_formating.alignment_type=(wms_udh_alignment_e_type)(udh[pos]&
-(0x1526+411-0x16be));header_ptr->u.text_formating.font_size=(
-wms_udh_font_size_e_type)((udh[pos]&(0xd73+5770-0x23f1))>>(0x708+2616-0x113e));
-header_ptr->u.text_formating.style_bold=(udh[pos]&(0x5b4+8445-0x26a1))>>
-(0x453+7645-0x222c);header_ptr->u.text_formating.style_italic=(udh[pos]&
-(0xbca+1437-0x1147))>>(0x5d1+5774-0x1c5a);header_ptr->u.text_formating.
-style_underlined=(udh[pos]&(0x1aac+3159-0x26c3))>>(0x1b36+694-0x1de6);header_ptr
-->u.text_formating.style_strikethrough=(udh[pos]&(0x222d+1061-0x25d2))>>
-(0x531+7234-0x216c);pos++;if(header_ptr->u.text_formating.is_color_present){
+(0xb2+6773-0x1b24));header_ptr->u.text_formating.font_size=(
+wms_udh_font_size_e_type)((udh[pos]&(0x1d4b+2097-0x2570))>>(0xad7+6843-0x2590));
+header_ptr->u.text_formating.style_bold=(udh[pos]&(0x845+4346-0x192f))>>
+(0x3b1+7349-0x2062);header_ptr->u.text_formating.style_italic=(udh[pos]&
+(0x254+3211-0xebf))>>(0x2e8+637-0x560);header_ptr->u.text_formating.
+style_underlined=(udh[pos]&(0xa5c+4013-0x19c9))>>(0xe7b+5035-0x2220);header_ptr
+->u.text_formating.style_strikethrough=(udh[pos]&(0x1841+3157-0x2416))>>
+(0x10f7+3977-0x2079);pos++;if(header_ptr->u.text_formating.is_color_present){
 header_ptr->u.text_formating.text_color_foreground=(wms_udh_text_color_e_type)(
-udh[pos]&(0xf61+2776-0x1a2a));header_ptr->u.text_formating.text_color_background
-=(wms_udh_text_color_e_type)((udh[pos]&(0x1a51+2482-0x2313))>>
-(0x1578+2094-0x1da2));pos++;}return(udh[(0x53+3113-0xc7c)]+(0xef8+5080-0x22cf));
-}static UINT8 wms_ts_decode_udh_pre_def_sound(const UINT8*udh,wms_udh_s_type*
-header_ptr){UINT8 pos=(0xbe9+5290-0x2093);if(udh==NULL||header_ptr==NULL){
-at_print(LOG_DEBUG,"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return
-(0x254+2570-0xc5e);}if(udh[pos]<(0x505+4066-0x14e5)){at_print(LOG_DEBUG,
+udh[pos]&(0x754+3057-0x1336));header_ptr->u.text_formating.text_color_background
+=(wms_udh_text_color_e_type)((udh[pos]&(0xe90+6166-0x25b6))>>(0x8d9+5802-0x1f7f)
+);pos++;}return(udh[(0x212+8776-0x245a)]+(0x6d2+5931-0x1dfc));}static UINT8 
+wms_ts_decode_udh_pre_def_sound(const UINT8*udh,wms_udh_s_type*header_ptr){UINT8
+ pos=(0x512+2569-0xf1b);if(udh==NULL||header_ptr==NULL){at_print(LOG_DEBUG,
+"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0x635+4326-0x171b);}if(
+udh[pos]<(0x186a+2326-0x217e)){at_print(LOG_DEBUG,
 "\x53\x4d\x53\x20\x55\x44\x48\x20\x48\x65\x61\x64\x65\x72\x20\x50\x72\x65\x20\x44\x65\x66\x69\x6e\x65\x64\x20\x53\x6f\x75\x6e\x64\x20\x50\x72\x65\x73\x65\x6e\x74\x20\x77\x69\x74\x68\x20\x69\x6e\x76\x61\x6c\x69\x64\x20\x64\x61\x74\x61\x20\x6c\x65\x6e\x67\x74\x68\x20\x3d\x20\x25\x64"
-,udh[pos]);return(0xd+7279-0x1c7c);}pos++;header_ptr->header_id=
+,udh[pos]);return(0xd07+4279-0x1dbe);}pos++;header_ptr->header_id=
 WMS_UDH_PRE_DEF_SOUND;header_ptr->u.pre_def_sound.position=udh[pos++];header_ptr
-->u.pre_def_sound.snd_number=udh[pos++];return(udh[(0x65c+5011-0x19ef)]+
-(0x695+1558-0xcaa));}static UINT8 wms_ts_decode_udh_user_def_sound(const UINT8*
-udh,wms_udh_s_type*header_ptr){UINT8 pos=(0x19f6+2192-0x2286),j;if(udh==NULL||
+->u.pre_def_sound.snd_number=udh[pos++];return(udh[(0xe04+1165-0x1291)]+
+(0x1ef2+1860-0x2635));}static UINT8 wms_ts_decode_udh_user_def_sound(const UINT8
+*udh,wms_udh_s_type*header_ptr){UINT8 pos=(0x897+649-0xb20),j;if(udh==NULL||
 header_ptr==NULL){at_print(LOG_DEBUG,
-"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0xbea+2847-0x1709);}if(
-udh[pos]==(0x1fe5+610-0x2247)){at_print(LOG_DEBUG,
+"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0xd22+3083-0x192d);}if(
+udh[pos]==(0x6f2+8027-0x264d)){at_print(LOG_DEBUG,
 "\x53\x4d\x53\x20\x55\x44\x48\x20\x48\x65\x61\x64\x65\x72\x20\x55\x73\x65\x72\x20\x44\x65\x66\x69\x6e\x65\x64\x20\x53\x6f\x75\x6e\x64\x20\x50\x72\x65\x73\x65\x6e\x74\x20\x77\x69\x74\x68\x20\x6e\x6f\x20\x44\x61\x74\x61"
-);return(0x7cd+1709-0xe7a);}header_ptr->header_id=WMS_UDH_USER_DEF_SOUND;
-header_ptr->u.user_def_sound.data_length=udh[pos++]-(0x13a+8340-0x21cd);
-header_ptr->u.user_def_sound.position=udh[pos++];if(header_ptr->u.user_def_sound
-.data_length>WMS_UDH_MAX_SND_SIZE){at_print(LOG_DEBUG,
+);return(0xb92+5827-0x2255);}header_ptr->header_id=WMS_UDH_USER_DEF_SOUND;
+header_ptr->u.user_def_sound.data_length=udh[pos++]-(0x3ea+342-0x53f);header_ptr
+->u.user_def_sound.position=udh[pos++];if(header_ptr->u.user_def_sound.
+data_length>WMS_UDH_MAX_SND_SIZE){at_print(LOG_DEBUG,
 "\x4d\x61\x78\x20\x53\x69\x7a\x65\x20\x45\x78\x63\x65\x65\x64\x20\x48\x65\x61\x64\x65\x72\x20\x69\x64\x20\x25\x64\x20"
-,header_ptr->header_id);return(0x13a+8398-0x2208);}memset(header_ptr->u.
-user_def_sound.user_def_sound,(0x1019+4006-0x1ec0),WMS_UDH_MAX_SND_SIZE);for(j=
-(0x9dc+7256-0x2634);j<header_ptr->u.user_def_sound.data_length;j++)header_ptr->u
+,header_ptr->header_id);return(0x9c0+1723-0x107b);}memset(header_ptr->u.
+user_def_sound.user_def_sound,(0x1902+3233-0x24a4),WMS_UDH_MAX_SND_SIZE);for(j=
+(0xf8a+4453-0x20ef);j<header_ptr->u.user_def_sound.data_length;j++)header_ptr->u
 .user_def_sound.user_def_sound[j]=udh[pos++];return pos;}static UINT8 
 wms_ts_decode_udh_pre_def_anim(const UINT8*udh,wms_udh_s_type*header_ptr){UINT8 
-pos=(0x3a9+5814-0x1a5f);if(udh==NULL||header_ptr==NULL){at_print(LOG_DEBUG,
-"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0x2d0+993-0x6b1);}if(udh[
-pos]!=(0x16d3+3819-0x25bc)){at_print(LOG_DEBUG,
+pos=(0xc67+2327-0x157e);if(udh==NULL||header_ptr==NULL){at_print(LOG_DEBUG,
+"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0x122d+1447-0x17d4);}if(
+udh[pos]!=(0x5a1+725-0x874)){at_print(LOG_DEBUG,
 "\x53\x4d\x53\x20\x55\x44\x48\x20\x48\x65\x61\x64\x65\x72\x20\x50\x72\x65\x20\x44\x65\x66\x69\x6e\x65\x64\x20\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\x50\x72\x65\x73\x65\x6e\x74\x20\x77\x69\x74\x68\x20\x69\x6e\x76\x61\x6c\x69\x64\x20\x64\x61\x74\x61\x20\x6c\x65\x6e\x67\x74\x68\x20\x3d\x20\x25\x64"
-,udh[pos]);return(0x15b0+1775-0x1c9f);}pos++;header_ptr->header_id=
+,udh[pos]);return(0x3b3+1212-0x86f);}pos++;header_ptr->header_id=
 WMS_UDH_PRE_DEF_ANIM;header_ptr->u.pre_def_anim.position=udh[pos++];header_ptr->
 u.pre_def_anim.animation_number=udh[pos++];return pos;}static UINT8 
 wms_ts_decode_udh_large_anim(const UINT8*udh,wms_udh_s_type*header_ptr){UINT8 
-pos=(0xae9+1874-0x123b),j,k;if(udh==NULL||header_ptr==NULL){at_print(LOG_DEBUG,
-"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0x1782+77-0x17cf);}if(udh
-[pos]!=(WMS_UDH_ANIM_NUM_BITMAPS*WMS_UDH_LARGE_BITMAP_SIZE+(0x1012+605-0x126e)))
-{at_print(LOG_DEBUG,
+pos=(0xb3a+3023-0x1709),j,k;if(udh==NULL||header_ptr==NULL){at_print(LOG_DEBUG,
+"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0xf9d+1654-0x1613);}if(
+udh[pos]!=(WMS_UDH_ANIM_NUM_BITMAPS*WMS_UDH_LARGE_BITMAP_SIZE+(0x32d+165-0x3d1))
+){at_print(LOG_DEBUG,
 "\x53\x4d\x53\x20\x55\x44\x48\x20\x48\x65\x61\x64\x65\x72\x20\x4c\x61\x72\x67\x65\x20\x44\x65\x66\x69\x6e\x65\x64\x20\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\x50\x72\x65\x73\x65\x6e\x74\x20\x77\x69\x74\x68\x20\x69\x6e\x76\x61\x6c\x69\x64\x20\x64\x61\x74\x61\x20\x6c\x65\x6e\x67\x74\x68\x20\x3d\x20\x25\x64"
-,udh[pos]);return(0x1c8+7617-0x1f89);}header_ptr->header_id=WMS_UDH_LARGE_ANIM;
-pos++;header_ptr->u.large_anim.position=udh[pos++];for(j=(0x103c+3860-0x1f50);j<
-WMS_UDH_ANIM_NUM_BITMAPS;j++)for(k=(0x356+8475-0x2471);k<
-WMS_UDH_LARGE_BITMAP_SIZE;k++)header_ptr->u.large_anim.data[j][k]=udh[pos++];
-return pos;}static UINT8 wms_ts_decode_udh_small_anim(const UINT8*udh,
-wms_udh_s_type*header_ptr){UINT8 pos=(0x1340+2765-0x1e0d),j,k;if(udh==NULL||
-header_ptr==NULL){at_print(LOG_DEBUG,
-"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0x1750+700-0x1a0c);}if(
+,udh[pos]);return(0x1395+3011-0x1f58);}header_ptr->header_id=WMS_UDH_LARGE_ANIM;
+pos++;header_ptr->u.large_anim.position=udh[pos++];for(j=(0x2dd+6347-0x1ba8);j<
+WMS_UDH_ANIM_NUM_BITMAPS;j++)for(k=(0x50a+620-0x776);k<WMS_UDH_LARGE_BITMAP_SIZE
+;k++)header_ptr->u.large_anim.data[j][k]=udh[pos++];return pos;}static UINT8 
+wms_ts_decode_udh_small_anim(const UINT8*udh,wms_udh_s_type*header_ptr){UINT8 
+pos=(0x93+7966-0x1fb1),j,k;if(udh==NULL||header_ptr==NULL){at_print(LOG_DEBUG,
+"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0x1c80+2405-0x25e5);}if(
 udh[pos]!=(WMS_UDH_ANIM_NUM_BITMAPS*WMS_UDH_SMALL_BITMAP_SIZE+
-(0x114+8839-0x239a))){at_print(LOG_DEBUG,
+(0xd49+6067-0x24fb))){at_print(LOG_DEBUG,
 "\x53\x4d\x53\x20\x55\x44\x48\x20\x48\x65\x61\x64\x65\x72\x20\x4c\x61\x72\x67\x65\x20\x44\x65\x66\x69\x6e\x65\x64\x20\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\x50\x72\x65\x73\x65\x6e\x74\x20\x77\x69\x74\x68\x20\x69\x6e\x76\x61\x6c\x69\x64\x20\x64\x61\x74\x61\x20\x6c\x65\x6e\x67\x74\x68\x20\x3d\x20\x25\x64"
-,udh[pos]);return(0x916+6340-0x21da);}header_ptr->header_id=WMS_UDH_SMALL_ANIM;
-pos++;header_ptr->u.small_anim.position=udh[pos++];for(j=(0xa8a+5885-0x2187);j<
-WMS_UDH_ANIM_NUM_BITMAPS;j++)for(k=(0x1953+1521-0x1f44);k<
+,udh[pos]);return(0x19c+8936-0x2484);}header_ptr->header_id=WMS_UDH_SMALL_ANIM;
+pos++;header_ptr->u.small_anim.position=udh[pos++];for(j=(0xeba+2174-0x1738);j<
+WMS_UDH_ANIM_NUM_BITMAPS;j++)for(k=(0x78d+6547-0x2120);k<
 WMS_UDH_SMALL_BITMAP_SIZE;k++)header_ptr->u.small_anim.data[j][k]=udh[pos++];
 return pos;}static UINT8 wms_ts_decode_udh_large_picture(const UINT8*udh,
-wms_udh_s_type*header_ptr){UINT8 pos=(0x34f+4814-0x161d),j;if(udh==NULL||
+wms_udh_s_type*header_ptr){UINT8 pos=(0x1b90+2431-0x250f),j;if(udh==NULL||
 header_ptr==NULL){at_print(LOG_DEBUG,
-"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0xa77+2618-0x14b1);}if(
-udh[pos]!=WMS_UDH_LARGE_PIC_SIZE+(0x1088+3975-0x200e)){at_print(LOG_DEBUG,
+"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0x55a+3049-0x1143);}if(
+udh[pos]!=WMS_UDH_LARGE_PIC_SIZE+(0x107d+1511-0x1663)){at_print(LOG_DEBUG,
 "\x53\x4d\x53\x20\x55\x44\x48\x20\x48\x65\x61\x64\x65\x72\x20\x4c\x61\x72\x67\x65\x20\x50\x69\x63\x74\x75\x72\x65\x20\x50\x72\x65\x73\x65\x6e\x74\x20\x77\x69\x74\x68\x20\x69\x6e\x76\x61\x6c\x69\x64\x20\x64\x61\x74\x61\x20\x6c\x65\x6e\x67\x74\x68\x20\x3d\x20\x25\x64"
-,udh[pos]);return(0x1323+1179-0x17be);}header_ptr->header_id=
+,udh[pos]);return(0x11c1+5327-0x2690);}header_ptr->header_id=
 WMS_UDH_LARGE_PICTURE;pos++;header_ptr->u.large_picture.position=udh[pos++];for(
-j=(0x1c31+375-0x1da8);j<WMS_UDH_LARGE_PIC_SIZE;j++)header_ptr->u.large_picture.
+j=(0x13d+2284-0xa29);j<WMS_UDH_LARGE_PIC_SIZE;j++)header_ptr->u.large_picture.
 data[j]=udh[pos++];return pos;}static UINT8 wms_ts_decode_udh_small_picture(
-const UINT8*udh,wms_udh_s_type*header_ptr){UINT8 pos=(0x2c6+5194-0x1710),j;if(
+const UINT8*udh,wms_udh_s_type*header_ptr){UINT8 pos=(0x138d+1790-0x1a8b),j;if(
 udh==NULL||header_ptr==NULL){at_print(LOG_DEBUG,
-"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0xf9+5055-0x14b8);}if(udh
-[pos]!=WMS_UDH_SMALL_PIC_SIZE+(0x1299+4120-0x22b0)){at_print(LOG_DEBUG,
+"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0x5f6+2470-0xf9c);}if(udh
+[pos]!=WMS_UDH_SMALL_PIC_SIZE+(0x1f4+7829-0x2088)){at_print(LOG_DEBUG,
 "\x53\x4d\x53\x20\x55\x44\x48\x20\x48\x65\x61\x64\x65\x72\x20\x53\x6d\x61\x6c\x6c\x20\x50\x69\x63\x74\x75\x72\x65\x20\x50\x72\x65\x73\x65\x6e\x74\x20\x77\x69\x74\x68\x20\x69\x6e\x76\x61\x6c\x69\x64\x20\x64\x61\x74\x61\x20\x6c\x65\x67\x6e\x74\x68\x20\x3d\x20\x25\x64"
-,udh[pos]);return(0x119a+2670-0x1c08);}header_ptr->header_id=
-WMS_UDH_SMALL_PICTURE;pos++;header_ptr->u.small_picture.position=udh[pos++];for(
-j=(0x8d6+2534-0x12bc);j<WMS_UDH_SMALL_PIC_SIZE;j++)header_ptr->u.small_picture.
-data[j]=udh[pos++];return pos;}static UINT8 wms_ts_decode_udh_var_picture(const 
-UINT8*udh,wms_udh_s_type*header_ptr){UINT8 pos=(0x2326+606-0x2584),j,pic_size;if
-(udh==NULL||header_ptr==NULL){at_print(LOG_DEBUG,
-"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0x23a+2385-0xb8b);}if(udh
-[pos]>WMS_UDH_VAR_PIC_SIZE+(0xfe7+72-0x102c)){at_print(LOG_DEBUG,
+,udh[pos]);return(0x49d+2144-0xcfd);}header_ptr->header_id=WMS_UDH_SMALL_PICTURE
+;pos++;header_ptr->u.small_picture.position=udh[pos++];for(j=(0x42a+1964-0xbd6);
+j<WMS_UDH_SMALL_PIC_SIZE;j++)header_ptr->u.small_picture.data[j]=udh[pos++];
+return pos;}static UINT8 wms_ts_decode_udh_var_picture(const UINT8*udh,
+wms_udh_s_type*header_ptr){UINT8 pos=(0x13e8+4165-0x242d),j,pic_size;if(udh==
+NULL||header_ptr==NULL){at_print(LOG_DEBUG,
+"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0x237+143-0x2c6);}if(udh[
+pos]>WMS_UDH_VAR_PIC_SIZE+(0xa38+4998-0x1dbb)){at_print(LOG_DEBUG,
 "\x53\x4d\x53\x20\x55\x44\x48\x20\x48\x65\x61\x64\x65\x72\x20\x56\x61\x72\x20\x50\x69\x63\x74\x75\x72\x65\x20\x50\x72\x65\x73\x65\x6e\x74\x20\x77\x69\x74\x68\x20\x69\x6e\x76\x61\x6c\x69\x64\x20\x64\x61\x74\x61\x20\x6c\x65\x6e\x67\x74\x68\x20\x3d\x20\x25\x64"
-,udh[pos]);return(0x34f+3664-0x119f);}if((udh[pos]-(0x333+2414-0xc9e))!=(udh[pos
-+(0x67b+7073-0x221a)]*udh[pos+(0xc0d+5219-0x206d)])){at_print(LOG_DEBUG,
+,udh[pos]);return(0x1+780-0x30d);}if((udh[pos]-(0x95f+6782-0x23da))!=(udh[pos+
+(0x667+3900-0x15a1)]*udh[pos+(0x4e9+683-0x791)])){at_print(LOG_DEBUG,
 "\x53\x4d\x53\x20\x55\x44\x48\x20\x48\x65\x61\x64\x65\x72\x20\x56\x61\x72\x20\x50\x69\x63\x74\x75\x72\x65\x2c\x20\x70\x69\x63\x20\x73\x69\x7a\x65\x20\x76\x61\x6c\x75\x65\x20\x6d\x69\x73\x6d\x61\x74\x63\x68\x20\x77\x69\x74\x68\x20\x68\x65\x69\x67\x74\x20\x61\x6e\x64\x20\x77\x65\x69\x67\x68\x74"
-);return(0x33a+604-0x596);}pic_size=udh[pos++]-(0x32a+2447-0xcb6);header_ptr->
-header_id=WMS_UDH_VAR_PICTURE;header_ptr->u.var_picture.position=udh[pos++];
-header_ptr->u.var_picture.width=(UINT8)(udh[pos++]*(0xb9+6935-0x1bc8));
-header_ptr->u.var_picture.height=udh[pos++];for(j=(0xf9f+408-0x1137);j<pic_size
-&&j<WMS_UDH_VAR_PIC_SIZE;j++)header_ptr->u.var_picture.data[j]=udh[pos++];return
- pos;}static UINT8 wms_ts_decode_udh_user_prompt(const UINT8*udh,wms_udh_s_type*
-header_ptr){UINT8 pos=(0x1f5a+1338-0x2494);if(udh==NULL||header_ptr==NULL){
-at_print(LOG_DEBUG,"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return
-(0x1174+4999-0x24fb);}if(udh[pos]<(0x184+6394-0x1a7d)){at_print(LOG_DEBUG,
+);return(0xc6d+3120-0x189d);}pic_size=udh[pos++]-(0x1716+2303-0x2012);header_ptr
+->header_id=WMS_UDH_VAR_PICTURE;header_ptr->u.var_picture.position=udh[pos++];
+header_ptr->u.var_picture.width=(UINT8)(udh[pos++]*(0x1706+1271-0x1bf5));
+header_ptr->u.var_picture.height=udh[pos++];for(j=(0x1b89+2232-0x2441);j<
+pic_size&&j<WMS_UDH_VAR_PIC_SIZE;j++)header_ptr->u.var_picture.data[j]=udh[pos++
+];return pos;}static UINT8 wms_ts_decode_udh_user_prompt(const UINT8*udh,
+wms_udh_s_type*header_ptr){UINT8 pos=(0x915+6782-0x2393);if(udh==NULL||
+header_ptr==NULL){at_print(LOG_DEBUG,
+"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0x378+2689-0xdf9);}if(udh
+[pos]<(0x4bb+8553-0x2623)){at_print(LOG_DEBUG,
 "\x53\x4d\x53\x20\x55\x44\x48\x20\x55\x73\x65\x72\x20\x50\x72\x6f\x6d\x70\x74\x20\x70\x72\x65\x73\x65\x6e\x74\x20\x77\x69\x74\x68\x20\x69\x6e\x76\x61\x6c\x69\x64\x20\x64\x61\x74\x61\x20\x6c\x65\x6e\x67\x74\x68\x20\x3d\x20\x25\x64"
-,udh[pos]);return(0x1a3b+1388-0x1fa7);}pos++;header_ptr->header_id=
+,udh[pos]);return(0x1ed7+1037-0x22e4);}pos++;header_ptr->header_id=
 WMS_UDH_USER_PROMPT;header_ptr->u.user_prompt.number_of_objects=udh[pos++];
-return(udh[(0x731+5538-0x1cd3)]+(0x839+5714-0x1e8a));}static UINT8 
+return(udh[(0x22f+3153-0xe80)]+(0x572+1305-0xa8a));}static UINT8 
 wms_ts_decode_udh_eo(const UINT8*udh,UINT8 first_segment,wms_udh_s_type*
-header_ptr){UINT8 pos=(0xe6f+721-0x1140),udh_length;if(udh==NULL||header_ptr==
+header_ptr){UINT8 pos=(0x539+453-0x6fe),udh_length;if(udh==NULL||header_ptr==
 NULL){at_print(LOG_DEBUG,"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return
-(0x1bd+8464-0x22cd);}if(udh[pos]==(0x60a+6795-0x2095)){at_print(LOG_DEBUG,
+(0x22a8+958-0x2666);}if(udh[pos]==(0x720+7572-0x24b4)){at_print(LOG_DEBUG,
 "\x53\x4d\x53\x20\x55\x44\x48\x20\x45\x78\x74\x65\x6e\x64\x65\x64\x20\x4f\x62\x6a\x65\x63\x74\x20\x70\x72\x65\x73\x65\x6e\x74\x20\x77\x69\x74\x68\x20\x6e\x6f\x20\x44\x61\x74\x61"
-);return(0x92a+1754-0x1004);}udh_length=udh[pos++];header_ptr->header_id=
+);return(0x846+143-0x8d5);}udh_length=udh[pos++];header_ptr->header_id=
 WMS_UDH_EXTENDED_OBJECT;header_ptr->u.eo.first_segment=first_segment;if(
 first_segment==TRUE){if(udh_length<WMS_UDH_OCTETS_EO_HEADER){return
-(0x594+1961-0xd3d);}header_ptr->u.eo.reference=udh[pos++];header_ptr->u.eo.
-length=udh[pos++]<<(0x1d3+3747-0x106e);header_ptr->u.eo.length|=udh[pos++];
+(0x6a4+4617-0x18ad);}header_ptr->u.eo.reference=udh[pos++];header_ptr->u.eo.
+length=udh[pos++]<<(0x1996+2754-0x2450);header_ptr->u.eo.length|=udh[pos++];
 header_ptr->u.eo.control=udh[pos++];header_ptr->u.eo.type=(wms_udh_eo_id_e_type)
-udh[pos++];header_ptr->u.eo.position=udh[pos++]<<(0x8f0+7442-0x25fa);header_ptr
+udh[pos++];header_ptr->u.eo.position=udh[pos++]<<(0x1874+3377-0x259d);header_ptr
 ->u.eo.position|=udh[pos++];}header_ptr->u.eo.content.length=(udh_length-pos)+
-(0x1d01+2437-0x2685);memcpy(header_ptr->u.eo.content.data,udh+pos,header_ptr->u.
+(0xee5+2338-0x1806);memcpy(header_ptr->u.eo.content.data,udh+pos,header_ptr->u.
 eo.content.length);pos+=header_ptr->u.eo.content.length;return pos;}static UINT8
  wms_ts_decode_udh_rfc822(const UINT8*udh,wms_udh_s_type*header_ptr){UINT8 pos=
-(0x1e40+1029-0x2245);if(udh==NULL||header_ptr==NULL){at_print(LOG_DEBUG,
-"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0x1876+391-0x19fd);}if(
-udh[pos]<(0x1f18+1533-0x2514)){at_print(LOG_DEBUG,
+(0x2354+874-0x26be);if(udh==NULL||header_ptr==NULL){at_print(LOG_DEBUG,
+"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0xca+5081-0x14a3);}if(udh
+[pos]<(0xb7c+3681-0x19dc)){at_print(LOG_DEBUG,
 "\x53\x4d\x53\x20\x55\x44\x48\x20\x48\x65\x61\x64\x65\x72\x20\x52\x66\x63\x38\x32\x32\x20\x50\x72\x65\x73\x65\x6e\x74\x20\x77\x69\x74\x68\x20\x69\x6e\x76\x61\x6c\x69\x64\x20\x64\x61\x74\x61\x20\x6c\x65\x6e\x67\x74\x68\x20\x3d\x20\x25\x64"
-,udh[pos]);return(0x13b4+1024-0x17b4);}pos++;header_ptr->header_id=
-WMS_UDH_RFC822;header_ptr->u.rfc822.header_length=udh[pos++];return(udh[
-(0xbaa+529-0xdbb)]+(0x8e7+6807-0x237d));}static UINT8 
-wms_ts_decode_udh_nat_lang_ss(const UINT8*udh,wms_udh_s_type*header_ptr){UINT8 
-pos=(0x16a+4058-0x1144);if(udh==NULL||header_ptr==NULL){return
-(0x3ef+7154-0x1fe1);}if(udh[pos]!=WMS_UDH_OCTETS_NAT_LANG_SS){return
-(0x1748+1852-0x1e84);}pos++;header_ptr->header_id=WMS_UDH_NAT_LANG_SS;if((
-WMS_UDH_NAT_LANG_TURKISH>udh[pos])||(WMS_UDH_NAT_LANG_PORTUGUESE<udh[pos])){
-return(0x122a+4197-0x228f);}header_ptr->u.nat_lang_ss.nat_lang_id=(
-wms_udh_nat_lang_id_e_type)udh[pos++];return(udh[(0x265+7955-0x2178)]+
-(0x1c15+1869-0x2361));}static UINT8 wms_ts_decode_udh_nat_lang_ls(const UINT8*
-udh,wms_udh_s_type*header_ptr){UINT8 pos=(0x1611+557-0x183e);if(udh==NULL||
-header_ptr==NULL){return(0x1719+3961-0x2692);}if(udh[pos]!=
-WMS_UDH_OCTETS_NAT_LANG_LS){return(0x1951+647-0x1bd8);}pos++;header_ptr->
-header_id=WMS_UDH_NAT_LANG_LS;if((WMS_UDH_NAT_LANG_TURKISH>udh[pos])||(
-WMS_UDH_NAT_LANG_PORTUGUESE<udh[pos])){return(0xcba+4991-0x2039);}header_ptr->u.
-nat_lang_ls.nat_lang_id=(wms_udh_nat_lang_id_e_type)udh[pos++];return(udh[
-(0x2c9+4420-0x140d)]+(0x18a6+2149-0x210a));}static UINT8 wms_ts_decode_udh_other
-(const UINT8*udh,wms_udh_s_type*header_ptr){UINT8 pos=(0x96b+5033-0x1d14),i=
-(0xb03+6038-0x2299);if(udh==NULL||header_ptr==NULL){at_print(LOG_DEBUG,
-"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0x47b+7817-0x2304);}if(
-udh[pos+(0x100c+324-0x114f)]>WMS_UDH_OTHER_SIZE){at_print(LOG_DEBUG,
+,udh[pos]);return(0xe12+5916-0x252e);}pos++;header_ptr->header_id=WMS_UDH_RFC822
+;header_ptr->u.rfc822.header_length=udh[pos++];return(udh[(0xf3d+2414-0x18ab)]+
+(0xae2+6704-0x2511));}static UINT8 wms_ts_decode_udh_nat_lang_ss(const UINT8*udh
+,wms_udh_s_type*header_ptr){UINT8 pos=(0x29b+2988-0xe47);if(udh==NULL||
+header_ptr==NULL){return(0x701+1419-0xc8c);}if(udh[pos]!=
+WMS_UDH_OCTETS_NAT_LANG_SS){return(0x1e9a+1882-0x25f4);}pos++;header_ptr->
+header_id=WMS_UDH_NAT_LANG_SS;if((WMS_UDH_NAT_LANG_TURKISH>udh[pos])||(
+WMS_UDH_NAT_LANG_PORTUGUESE<udh[pos])){return(0xde2+4545-0x1fa3);}header_ptr->u.
+nat_lang_ss.nat_lang_id=(wms_udh_nat_lang_id_e_type)udh[pos++];return(udh[
+(0x735+1323-0xc60)]+(0x768+2035-0xf5a));}static UINT8 
+wms_ts_decode_udh_nat_lang_ls(const UINT8*udh,wms_udh_s_type*header_ptr){UINT8 
+pos=(0x21f+883-0x592);if(udh==NULL||header_ptr==NULL){return(0x1db2+1372-0x230e)
+;}if(udh[pos]!=WMS_UDH_OCTETS_NAT_LANG_LS){return(0xdac+534-0xfc2);}pos++;
+header_ptr->header_id=WMS_UDH_NAT_LANG_LS;if((WMS_UDH_NAT_LANG_TURKISH>udh[pos])
+||(WMS_UDH_NAT_LANG_PORTUGUESE<udh[pos])){return(0xd97+2264-0x166f);}header_ptr
+->u.nat_lang_ls.nat_lang_id=(wms_udh_nat_lang_id_e_type)udh[pos++];return(udh[
+(0x1a7+4467-0x131a)]+(0xab+28-0xc6));}static UINT8 wms_ts_decode_udh_other(const
+ UINT8*udh,wms_udh_s_type*header_ptr){UINT8 pos=(0x951+6593-0x2312),i=
+(0x3fb+3139-0x103e);if(udh==NULL||header_ptr==NULL){at_print(LOG_DEBUG,
+"\x75\x64\x68\x20\x69\x73\x20\x4e\x55\x4c\x4c");return(0x140a+620-0x1676);}if(
+udh[pos+(0x1a4+3897-0x10dc)]>WMS_UDH_OTHER_SIZE){at_print(LOG_DEBUG,
 "\x53\x4d\x53\x20\x55\x44\x48\x20\x48\x65\x61\x64\x65\x72\x20\x4f\x74\x68\x65\x72\x20\x64\x61\x74\x61\x20\x6c\x65\x6e\x67\x74\x68\x20\x65\x78\x63\x65\x65\x64\x69\x6e\x67\x20\x32\x32\x36"
-);return(0x10e7+4800-0x23a7);}header_ptr->header_id=(wms_udh_id_e_type)udh[pos];
+);return(0x1e35+1931-0x25c0);}header_ptr->header_id=(wms_udh_id_e_type)udh[pos];
 header_ptr->u.other.header_id=(wms_udh_id_e_type)udh[pos++];header_ptr->u.other.
-header_length=udh[pos++];for(i=(0x686+946-0xa38);i<header_ptr->u.other.
+header_length=udh[pos++];for(i=(0x9db+1793-0x10dc);i<header_ptr->u.other.
 header_length;i++){header_ptr->u.other.data[i]=udh[pos++];}return pos;}UINT8 
 wms_ts_decode_user_data_header(const UINT8 len,const UINT8*data,UINT8*
-num_headers_ptr,wms_udh_s_type*udh_ptr){UINT8 pos=(0x14+7108-0x1bd8);UINT8 
-header_length=(0x1193+1825-0x18b4),num_headers=(0x6d1+2477-0x107e);UINT8 udhl;
-UINT8 first_segment=TRUE;if(data==NULL||len==(0x18b1+2357-0x21e6)||data[pos]==
-(0x1b3+1191-0x65a)||num_headers_ptr==NULL||udh_ptr==NULL){at_print(LOG_DEBUG,
+num_headers_ptr,wms_udh_s_type*udh_ptr){UINT8 pos=(0x1bc1+985-0x1f9a);UINT8 
+header_length=(0x1995+3163-0x25f0),num_headers=(0x278+8721-0x2489);UINT8 udhl;
+UINT8 first_segment=TRUE;if(data==NULL||len==(0xe59+2920-0x19c1)||data[pos]==
+(0x33b+1260-0x827)||num_headers_ptr==NULL||udh_ptr==NULL){at_print(LOG_DEBUG,
 "\x6e\x75\x6c\x6c\x20\x70\x6f\x69\x6e\x74\x65\x72\x20\x69\x6e\x20\x77\x6d\x73\x5f\x74\x73\x5f\x64\x65\x63\x6f\x64\x65\x5f\x75\x73\x65\x72\x5f\x64\x61\x74\x61\x5f\x68\x65\x61\x64\x65\x72"
-);return(0x18b8+2574-0x22c6);}udhl=data[pos];pos++;while((pos<udhl)&&(
-num_headers<WMS_MAX_UD_HEADERS)){switch(data[pos++]){case WMS_UDH_CONCAT_8:
-header_length=wms_ts_decode_udh_concat_8(data+pos,&udh_ptr[num_headers]);break;
-case WMS_UDH_CONCAT_16:header_length=wms_ts_decode_udh_concat16(data+pos,&
-udh_ptr[num_headers]);break;case WMS_UDH_SPECIAL_SM:header_length=
+);return(0x655+4688-0x18a5);}udhl=data[pos];pos++;while((pos<udhl)&&(num_headers
+<WMS_MAX_UD_HEADERS)){switch(data[pos++]){case WMS_UDH_CONCAT_8:header_length=
+wms_ts_decode_udh_concat_8(data+pos,&udh_ptr[num_headers]);break;case 
+WMS_UDH_CONCAT_16:header_length=wms_ts_decode_udh_concat16(data+pos,&udh_ptr[
+num_headers]);break;case WMS_UDH_SPECIAL_SM:header_length=
 wms_ts_decode_udh_special_sm(data+pos,&udh_ptr[num_headers]);break;case 
 WMS_UDH_PORT_8:header_length=wms_ts_decode_udh_port_8(data+pos,&udh_ptr[
 num_headers]);break;case WMS_UDH_PORT_16:header_length=wms_ts_decode_udh_port16(
@@ -1864,66 +1863,66 @@
 data+pos,&udh_ptr[num_headers]);break;}if((UINT16)pos+(UINT16)header_length>
 WMS_MAX_LEN){at_print(LOG_DEBUG,
 "\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20\x62\x79\x74\x65\x73\x20\x64\x65\x63\x6f\x64\x65\x64\x20\x68\x61\x73\x20\x65\x78\x63\x65\x65\x64\x65\x64\x20\x55\x44\x48\x4c\x20\x76\x61\x6c\x75\x65\x20\x6f\x66\x20\x25\x64"
-,udhl);return(0x1551+4137-0x257a);}else if(header_length!=(0xb02+1226-0xfcc)){
+,udhl);return(0x839+7331-0x24dc);}else if(header_length!=(0x18a5+1369-0x1dfe)){
 pos+=header_length;num_headers++;}else{at_print(LOG_DEBUG,
 "\x42\x61\x64\x20\x55\x44\x48\x3a\x20\x70\x6f\x73\x3d\x25\x64\x2c\x20\x64\x61\x74\x61\x5b\x70\x6f\x73\x5d\x3d\x25\x64"
-,pos,data[pos]);*num_headers_ptr=(0x914+5150-0x1d32);return(0x14d4+2146-0x1d36);
+,pos,data[pos]);*num_headers_ptr=(0x11f4+3190-0x1e6a);return(0x1edd+788-0x21f1);
 }}if(num_headers>=WMS_MAX_UD_HEADERS){at_print(LOG_DEBUG,
 "\x64\x65\x63\x6f\x64\x65\x5f\x75\x64\x68\x3a\x20\x4e\x75\x6d\x20\x48\x65\x61\x64\x65\x72\x73\x20\x68\x61\x73\x20\x65\x78\x63\x65\x65\x64\x65\x64\x20\x57\x4d\x53\x5f\x4d\x41\x58\x5f\x55\x44\x5f\x48\x45\x41\x44\x45\x52\x53"
-);pos=udhl+(0x4f0+740-0x7d3);}if(pos!=(udhl+(0x941+666-0xbda))){at_print(
+);pos=udhl+(0xf09+4595-0x20fb);}if(pos!=(udhl+(0x21d+3770-0x10d6))){at_print(
 LOG_DEBUG,
 "\x53\x4d\x53\x20\x55\x44\x48\x20\x63\x6f\x75\x6c\x64\x20\x6e\x6f\x74\x20\x62\x65\x20\x64\x65\x63\x6f\x64\x65\x64"
-);num_headers=(0xba+4746-0x1344);udhl=(0x17df+1251-0x1cc2);}if(num_headers>
-(0x12c1+4151-0x22f8)){*num_headers_ptr=num_headers;}return udhl;}UINT8 
+);num_headers=(0x199a+3050-0x2584);udhl=(0xfd+2630-0xb43);}if(num_headers>
+(0x9e0+4344-0x1ad8)){*num_headers_ptr=num_headers;}return udhl;}UINT8 
 wms_ts_decode_gw_user_data(const wms_gw_dcs_s_type*dcs,const UINT8 len,const 
 UINT8*data,const UINT8 user_data_header_present,wms_gw_user_data_s_type*
-user_data){UINT8 i,pos=(0x111d+4247-0x21b4);UINT8 fill_bits=(0x10c3+1114-0x151d)
-;UINT8 user_data_length;UINT8 user_data_header_length=(0x4d0+4026-0x148a);if(dcs
+user_data){UINT8 i,pos=(0xf9f+4492-0x212b);UINT8 fill_bits=(0xd56+357-0xebb);
+UINT8 user_data_length;UINT8 user_data_header_length=(0x22d+4049-0x11fe);if(dcs
 ==NULL||data==NULL||user_data==NULL){at_print(LOG_DEBUG,
 "\x6e\x75\x6c\x6c\x20\x70\x6f\x69\x6e\x74\x65\x72\x20\x69\x6e\x20\x77\x6d\x73\x5f\x74\x73\x5f\x64\x65\x63\x6f\x64\x65\x5f\x67\x77\x5f\x75\x73\x65\x72\x5f\x64\x61\x74\x61"
-);return(0x772+2837-0x1287);}(void)memset(user_data,(0x88f+7517-0x25ec),sizeof(
-wms_gw_user_data_s_type));if(len==(0xba+4670-0x12f8)){return(0xe39+6222-0x2687);
+);return(0x1f37+814-0x2265);}(void)memset(user_data,(0xa9f+2411-0x140a),sizeof(
+wms_gw_user_data_s_type));if(len==(0x4e8+2252-0xdb4)){return(0x164+5906-0x1876);
 }if(dcs->alphabet==WMS_GW_ALPHABET_7_BIT_DEFAULT){if(len>WMS_SMS_UDL_MAX_7_BIT){
 at_print(LOG_DEBUG,
 "\x75\x73\x65\x72\x20\x64\x61\x74\x61\x20\x6c\x65\x6e\x67\x74\x68\x20\x3e\x20\x6d\x61\x78\x20\x76\x61\x6c\x75\x65\x20\x66\x6f\x72\x20\x67\x77\x20\x37\x2d\x62\x69\x74\x20\x61\x6c\x70\x68\x61\x62\x65\x74"
-);return(0x102+8429-0x21ef);}user_data_length=len;if(user_data_header_present){
+);return(0x1d86+615-0x1fed);}user_data_length=len;if(user_data_header_present){
 user_data_header_length=wms_ts_decode_user_data_header(data[pos],data+pos,&
 user_data->num_headers,user_data->headers);}if(user_data_header_length>len){
 at_print(LOG_DEBUG,
 "\x75\x73\x65\x72\x20\x64\x61\x74\x61\x20\x68\x65\x61\x64\x65\x72\x20\x6c\x65\x6e\x67\x74\x68\x20\x3e\x20\x74\x6f\x74\x61\x6c\x20\x6c\x65\x6e\x67\x74\x68"
-);return(0x1f53+1951-0x26f2);}if(user_data_header_length>(0xc08+3932-0x1b64)){
-fill_bits=((len*(0x4bb+655-0x743))-((user_data_header_length+
-(0x1405+2199-0x1c9b))*(0x213+4378-0x1325)))%(0x4ff+1663-0xb77);user_data_length=
-(UINT8)(((len*(0x7a6+4241-0x1830))-((user_data_header_length+(0x10d+3015-0xcd3))
-*(0x777+7300-0x23f3)))/(0xa51+7318-0x26e0));pos=user_data_header_length+
-(0x6d+6718-0x1aaa);if(fill_bits!=(0x325+8382-0x23e3)){fill_bits=
-(0xd68+3103-0x197f)-fill_bits;}}i=wms_ts_unpack_gw_7_bit_chars(&data[pos],
+);return(0x1df4+499-0x1fe7);}if(user_data_header_length>(0x8c7+3666-0x1719)){
+fill_bits=((len*(0x887+5362-0x1d72))-((user_data_header_length+
+(0x145f+3544-0x2236))*(0x871+5103-0x1c58)))%(0xb5b+4069-0x1b39);user_data_length
+=(UINT8)(((len*(0x1f6+1906-0x961))-((user_data_header_length+(0x1241+799-0x155f)
+)*(0x875+2491-0x1228)))/(0x13b1+954-0x1764));pos=user_data_header_length+
+(0x4f9+5556-0x1aac);if(fill_bits!=(0x2d3+8146-0x22a5)){fill_bits=
+(0x5bf+542-0x7d5)-fill_bits;}}i=wms_ts_unpack_gw_7_bit_chars(&data[pos],
 user_data_length,WMS_MAX_LEN,fill_bits,user_data->sm_data);user_data->sm_len=
 user_data_length;}else{if(len>WMS_SMS_UDL_MAX_8_BIT){at_print(LOG_DEBUG,
 "\x75\x73\x65\x72\x20\x64\x61\x74\x61\x20\x6c\x65\x6e\x67\x74\x68\x20\x3e\x20\x6d\x61\x78\x20\x76\x61\x6c\x75\x65\x20\x66\x6f\x72\x20\x38\x2d\x62\x69\x74\x20\x63\x68\x61\x72\x61\x72\x61\x63\x74\x65\x72\x73"
-);return(0x12c9+3752-0x2171);}user_data_length=len;if(user_data_header_present){
+);return(0x199+3928-0x10f1);}user_data_length=len;if(user_data_header_present){
 user_data_header_length=wms_ts_decode_user_data_header(data[pos],data+pos,&
 user_data->num_headers,user_data->headers);if(user_data_header_length>len){
 at_print(LOG_DEBUG,
 "\x75\x73\x65\x72\x20\x64\x61\x74\x61\x20\x68\x65\x61\x64\x65\x72\x20\x6c\x65\x6e\x67\x74\x68\x20\x3e\x20\x74\x6f\x74\x61\x6c\x20\x6c\x65\x6e\x67\x74\x68"
-);return(0x1080+854-0x13d6);}pos+=user_data_header_length+(0x8e1+4609-0x1ae1);
-user_data_length=(len-user_data_header_length)-(0x775+3743-0x1613);}memcpy(
+);return(0xe28+4035-0x1deb);}pos+=user_data_header_length+(0x171+9244-0x258c);
+user_data_length=(len-user_data_header_length)-(0xc44+487-0xe2a);}memcpy(
 user_data->sm_data,data+pos,user_data_length);user_data->sm_len=user_data_length
 ;i=(UINT8)user_data->sm_len;}pos+=i;return pos;}wms_status_e_type 
 wms_ts_decode_deliver(const T_zUfiSms_RawTsData*ptRawTsData,
 wms_gw_deliver_s_type*deliver){wms_status_e_type st=WMS_OK_S;uint32 pos=
-(0x597+1317-0xabc),i;const UINT8*data=ptRawTsData->data;if(ptRawTsData==NULL||
+(0x4e5+5957-0x1c2a),i;const UINT8*data=ptRawTsData->data;if(ptRawTsData==NULL||
 deliver==NULL){printf(
 "\x6e\x75\x6c\x6c\x20\x70\x6f\x69\x6e\x74\x65\x72\x20\x69\x6e\x20\x77\x6d\x73\x5f\x74\x73\x5f\x64\x65\x63\x6f\x64\x65\x5f\x64\x65\x6c\x69\x76\x65\x72"
-);return WMS_NULL_PTR_S;}else if((data[pos]&(0x1f8+5599-0x17d4))!=
-(0x1207+692-0x14bb)){printf(
+);return WMS_NULL_PTR_S;}else if((data[pos]&(0xadc+2189-0x1366))!=
+(0x1b2+7539-0x1f25)){printf(
 "\x69\x6e\x76\x61\x6c\x69\x64\x20\x74\x70\x64\x75\x20\x74\x79\x70\x65\x20\x69\x6e\x20\x77\x6d\x73\x5f\x74\x73\x5f\x64\x65\x63\x6f\x64\x65\x5f\x64\x65\x6c\x69\x76\x65\x72"
 );return WMS_INVALID_TPDU_TYPE_S;}else{deliver->more=(data[pos]&
-(0x1a7d+2657-0x24da))?FALSE:TRUE;deliver->status_report_enabled=(data[pos]&
-(0x2ea+6293-0x1b5f))?TRUE:FALSE;deliver->user_data_header_present=(data[pos]&
-(0x68a+6958-0x2178))?TRUE:FALSE;deliver->reply_path_present=(data[pos]&
-(0x1678+2055-0x1dff))?TRUE:FALSE;pos++;i=wms_ts_decode_address(&data[pos],&
-deliver->address);if(i==(0x91b+4303-0x19ea)){printf(
+(0x1634+3809-0x2511))?FALSE:TRUE;deliver->status_report_enabled=(data[pos]&
+(0x1699+1764-0x1d5d))?TRUE:FALSE;deliver->user_data_header_present=(data[pos]&
+(0x32b+6688-0x1d0b))?TRUE:FALSE;deliver->reply_path_present=(data[pos]&
+(0x5d4+4700-0x17b0))?TRUE:FALSE;pos++;i=wms_ts_decode_address(&data[pos],&
+deliver->address);if(i==(0xf7c+5919-0x269b)){printf(
 "\x69\x6e\x76\x61\x6c\x69\x64\x20\x70\x61\x72\x61\x6d\x20\x73\x69\x7a\x65\x20\x69\x6e\x20\x77\x6d\x73\x5f\x74\x73\x5f\x64\x65\x63\x6f\x64\x65\x5f\x64\x65\x6c\x69\x76\x65\x72"
 );return WMS_INVALID_PARM_SIZE_S;}pos+=i;deliver->pid=(wms_pid_e_type)data[pos];
 pos++;pos+=wms_ts_decode_dcs(data+pos,&deliver->dcs);if(deliver->dcs.
@@ -1931,75 +1930,75 @@
 WMS_PID_RETURN_CALL){deliver->dcs.msg_waiting=WMS_GW_MSG_WAITING_STORE;deliver->
 dcs.msg_waiting_active=TRUE;deliver->dcs.msg_waiting_kind=
 WMS_GW_MSG_WAITING_VOICEMAIL;}}i=wms_ts_decode_timestamp(data+pos,&deliver->
-timestamp);if(i==(0x652+7852-0x24fe)){printf(
+timestamp);if(i==(0x48d+5127-0x1894)){printf(
 "\x69\x6e\x76\x61\x6c\x69\x64\x20\x70\x61\x72\x61\x6d\x20\x76\x61\x6c\x75\x65\x20\x69\x6e\x20\x77\x6d\x73\x5f\x74\x73\x5f\x64\x65\x63\x6f\x64\x65\x5f\x64\x65\x6c\x69\x76\x65\x72"
 );return WMS_INVALID_PARM_VALUE_S;}pos+=i;pos++;i=wms_ts_decode_gw_user_data(&
-deliver->dcs,data[pos-(0x1074+827-0x13ae)],data+pos,deliver->
+deliver->dcs,data[pos-(0x1866+281-0x197e)],data+pos,deliver->
 user_data_header_present,&deliver->user_data);if(i>WMS_SMS_UDL_MAX_8_BIT){printf
 (
 "\x55\x73\x65\x72\x20\x44\x61\x74\x61\x20\x4c\x65\x6e\x67\x74\x68\x20\x68\x61\x73\x20\x65\x78\x63\x65\x65\x64\x65\x64\x20\x63\x61\x70\x61\x63\x69\x74\x79\x3a\x20\x55\x44\x4c\x20\x3d\x20\x25\x6c\x75"
 ,i);st=WMS_INVALID_USER_DATA_SIZE_S;}pos+=i;return st;}}UINT8 
 wms_ts_decode_gw_validity(const UINT8*data,wms_gw_validity_s_type*validity){
-UINT8 i,pos=(0x1798+3402-0x24e2);if(data==NULL||validity==NULL){at_print(
+UINT8 i,pos=(0x1b74+671-0x1e13);if(data==NULL||validity==NULL){at_print(
 LOG_DEBUG,
 "\x6e\x75\x6c\x6c\x20\x70\x6f\x69\x6e\x74\x65\x72\x20\x69\x6e\x20\x77\x6d\x73\x5f\x74\x73\x5f\x64\x65\x63\x6f\x64\x65\x5f\x67\x77\x5f\x76\x61\x6c\x69\x64\x69\x74\x79"
-);return(0x1275+3858-0x2187);}else{switch(validity->format){case 
-WMS_GW_VALIDITY_NONE:memset(validity,(0x10ac+4126-0x20ca),sizeof(
+);return(0x1b96+1829-0x22bb);}else{switch(validity->format){case 
+WMS_GW_VALIDITY_NONE:memset(validity,(0x10ea+3398-0x1e30),sizeof(
 wms_gw_validity_s_type));break;case WMS_GW_VALIDITY_RELATIVE:
 zUfiSms_DecodeRelativeTime(data[pos],&validity->u.time);pos++;break;case 
 WMS_GW_VALIDITY_ABSOLUTE:i=wms_ts_decode_timestamp(data+pos,&validity->u.time);
 pos+=i;break;case WMS_GW_VALIDITY_ENHANCED:break;default:break;}return pos;}}
 wms_status_e_type wms_ts_decode_submit(const T_zUfiSms_RawTsData*ptRawTsData,
 wms_gw_submit_s_type*submit){wms_status_e_type st=WMS_OK_S;uint32 pos=
-(0x12cf+2569-0x1cd8),i;const UINT8*data;if(ptRawTsData==NULL||submit==NULL){
-printf(
+(0xf72+761-0x126b),i;const UINT8*data;if(ptRawTsData==NULL||submit==NULL){printf
+(
 "\x4e\x75\x6c\x6c\x20\x70\x6f\x69\x6e\x74\x65\x72\x20\x69\x6e\x20\x77\x6d\x73\x5f\x74\x73\x5f\x64\x65\x63\x6f\x64\x65\x5f\x73\x75\x62\x6d\x69\x74\x21"
 );return WMS_NULL_PTR_S;}data=ptRawTsData->data;submit->reject_duplicates=(data[
-pos]&(0x9b8+4022-0x196a))?TRUE:FALSE;submit->validity.format=(
-wms_gw_validity_format_e_type)((data[pos]&(0x6f2+263-0x7e1))>>
-(0x19c+4720-0x1409));submit->status_report_enabled=(data[pos]&
-(0x17a8+2640-0x21d8))?TRUE:FALSE;submit->user_data_header_present=(data[pos]&
-(0xf26+831-0x1225))?TRUE:FALSE;submit->reply_path_present=(data[pos]&
-(0x459+7948-0x22e5))?TRUE:FALSE;pos++;submit->message_reference=data[pos];pos++;
-i=wms_ts_decode_address(&data[pos],&submit->address);if(i==(0x2077+787-0x238a)){
-return WMS_INVALID_PARM_SIZE_S;}pos+=i;submit->pid=(wms_pid_e_type)data[pos];pos
-++;pos+=wms_ts_decode_dcs(data+pos,&submit->dcs);i=wms_ts_decode_gw_validity(
+pos]&(0x749+6766-0x21b3))?TRUE:FALSE;submit->validity.format=(
+wms_gw_validity_format_e_type)((data[pos]&(0x1843+582-0x1a71))>>
+(0xa8b+3710-0x1906));submit->status_report_enabled=(data[pos]&
+(0x7bb+7604-0x254f))?TRUE:FALSE;submit->user_data_header_present=(data[pos]&
+(0x510+5152-0x18f0))?TRUE:FALSE;submit->reply_path_present=(data[pos]&
+(0x2260+1042-0x25f2))?TRUE:FALSE;pos++;submit->message_reference=data[pos];pos++
+;i=wms_ts_decode_address(&data[pos],&submit->address);if(i==(0x15cd+2049-0x1dce)
+){return WMS_INVALID_PARM_SIZE_S;}pos+=i;submit->pid=(wms_pid_e_type)data[pos];
+pos++;pos+=wms_ts_decode_dcs(data+pos,&submit->dcs);i=wms_ts_decode_gw_validity(
 data+pos,&submit->validity);if((submit->validity.format!=WMS_GW_VALIDITY_NONE)&&
-(i==(0x1438+957-0x17f5))){return WMS_INVALID_PARM_VALUE_S;}pos+=i;pos++;i=
-wms_ts_decode_gw_user_data(&submit->dcs,data[pos-(0x880+4189-0x18dc)],data+pos,
+(i==(0x10b0+4535-0x2267))){return WMS_INVALID_PARM_VALUE_S;}pos+=i;pos++;i=
+wms_ts_decode_gw_user_data(&submit->dcs,data[pos-(0x20db+403-0x226d)],data+pos,
 submit->user_data_header_present,&submit->user_data);if(i>WMS_SMS_UDL_MAX_8_BIT)
 {printf(
 "\x55\x73\x65\x72\x20\x44\x61\x74\x61\x20\x4c\x65\x6e\x67\x74\x68\x20\x68\x61\x73\x20\x65\x78\x63\x65\x65\x64\x65\x64\x20\x63\x61\x70\x61\x63\x69\x74\x79\x3a\x20\x55\x44\x4c\x20\x3d\x20\x25\x6c\x75"
 ,i);st=WMS_INVALID_USER_DATA_SIZE_S;}pos+=i;return st;}wms_status_e_type 
 wms_ts_decode_status_report(const T_zUfiSms_RawTsData*ptRawTsData,
 wms_gw_status_report_s_type*status_report){wms_status_e_type st=WMS_OK_S;uint32 
-pos=(0xc8b+5457-0x21dc),i;const UINT8*data;if(ptRawTsData==NULL||status_report==
+pos=(0xd8b+3038-0x1969),i;const UINT8*data;if(ptRawTsData==NULL||status_report==
 NULL){printf(
 "\x4e\x75\x6c\x6c\x20\x70\x6f\x69\x6e\x74\x65\x72\x20\x69\x6e\x20\x77\x6d\x73\x5f\x74\x73\x5f\x64\x65\x63\x6f\x64\x65\x5f\x73\x74\x61\x74\x75\x73\x5f\x72\x65\x70\x6f\x72\x74\x21"
 );return WMS_NULL_PTR_S;}data=ptRawTsData->data;status_report->more=data[pos]&
-(0x1b07+1354-0x204d)?FALSE:TRUE;status_report->status_report_qualifier=data[pos]
-&(0x3c3+7852-0x224f)?TRUE:FALSE;status_report->user_data_header_present=(data[
-pos]&(0xe19+3329-0x1ada))?TRUE:FALSE;pos++;status_report->message_reference=data
-[pos];pos++;i=wms_ts_decode_address(&data[pos],&status_report->address);if(i==
-(0xe73+1516-0x145f)){return WMS_INVALID_PARM_SIZE_S;}pos+=i;i=
+(0x4c8+5162-0x18ee)?FALSE:TRUE;status_report->status_report_qualifier=data[pos]&
+(0x390+1677-0x9fd)?TRUE:FALSE;status_report->user_data_header_present=(data[pos]
+&(0x664+4758-0x18ba))?TRUE:FALSE;pos++;status_report->message_reference=data[pos
+];pos++;i=wms_ts_decode_address(&data[pos],&status_report->address);if(i==
+(0x84+125-0x101)){return WMS_INVALID_PARM_SIZE_S;}pos+=i;i=
 wms_ts_decode_timestamp(data+pos,&status_report->timestamp);if(i==
-(0x402+3962-0x137c)){return WMS_INVALID_PARM_VALUE_S;}pos+=i;i=
+(0x360+2745-0xe19)){return WMS_INVALID_PARM_VALUE_S;}pos+=i;i=
 wms_ts_decode_timestamp(data+pos,&status_report->discharge_time);if(i==
-(0x17e3+97-0x1844)){return WMS_INVALID_PARM_VALUE_S;}pos+=i;status_report->
+(0x165f+4085-0x2654)){return WMS_INVALID_PARM_VALUE_S;}pos+=i;status_report->
 tp_status=(wms_tp_status_e_type)data[pos];pos++;status_report->mask=data[pos];
-status_report->pid=(wms_pid_e_type)(0x650+7193-0x2269);status_report->user_data.
-sm_len=(0x689+7120-0x2259);status_report->mask&=(0x1bf6+1807-0x2206);if((
-status_report->mask!=(0xc63+6542-0x24f2))&&(status_report->mask!=
-(0x191c+3445-0x2691))){pos++;if(status_report->mask&WMS_TPDU_MASK_PID){
+status_report->pid=(wms_pid_e_type)(0x1096+481-0x1277);status_report->user_data.
+sm_len=(0xf62+5476-0x24c6);status_report->mask&=(0x6f8+438-0x7af);if((
+status_report->mask!=(0x175+3266-0xd38))&&(status_report->mask!=
+(0x21d+2049-0xa1e))){pos++;if(status_report->mask&WMS_TPDU_MASK_PID){
 status_report->pid=(wms_pid_e_type)data[pos];pos++;}if(status_report->mask&
 WMS_TPDU_MASK_DCS){pos+=wms_ts_decode_dcs(data+pos,&status_report->dcs);}if(
 status_report->mask&WMS_TPDU_MASK_USER_DATA){pos++;i=wms_ts_decode_gw_user_data(
-&status_report->dcs,data[pos-(0x4+8413-0x20e0)],data+pos,status_report->
+&status_report->dcs,data[pos-(0x13e2+1294-0x18ef)],data+pos,status_report->
 user_data_header_present,&status_report->user_data);if(i>WMS_SMS_UDL_MAX_8_BIT){
 printf(
 "\x55\x73\x65\x72\x20\x44\x61\x74\x61\x20\x4c\x65\x6e\x67\x74\x68\x20\x68\x61\x73\x20\x65\x78\x63\x65\x65\x64\x65\x64\x20\x63\x61\x70\x61\x63\x69\x74\x79\x3a\x20\x55\x44\x4c\x20\x3d\x20\x25\x6c\x75"
 ,i);st=WMS_INVALID_USER_DATA_SIZE_S;}pos+=i;}}else{status_report->mask=
-(0xfc2+5606-0x25a8);}return st;}wms_status_e_type wms_ts_decode(const 
+(0x62d+166-0x6d3);}return st;}wms_status_e_type wms_ts_decode(const 
 T_zUfiSms_RawTsData*ptRawTsData,T_zUfiSms_ClientTsData*ptClientTsData){
 wms_status_e_type st=WMS_OK_S;wms_gw_pp_ts_data_s_type*msg;if(ptRawTsData==NULL
 ||ptClientTsData==NULL){return WMS_NULL_PTR_S;}msg=&ptClientTsData->u.gw_pp;
diff --git a/ap/app/zte_comm/sms/src/sms_db.c b/ap/app/zte_comm/sms/src/sms_db.c
index 71a980c..93e6c4c 100755
--- a/ap/app/zte_comm/sms/src/sms_db.c
+++ b/ap/app/zte_comm/sms/src/sms_db.c
@@ -101,85 +101,84 @@
 #define OUTDATEINTERVAL 7776000

 typedef struct{char*buf_addr;int buf_len;}T_zUfiSms_BufInfo;typedef struct{int 
 valid;char*strSQL;}T_zUfiSms_SQLMap;sqlite3*g_zUfiSms_DbPointer=
-(0x265+4027-0x1220);extern T_zUfiSms_ParaInfo g_zUfiSms_CurSmsPara;extern 
+(0x1492+3042-0x2074);extern T_zUfiSms_ParaInfo g_zUfiSms_CurSmsPara;extern 
 unsigned long g_zUfiSms_StoreCapablity[ZTE_WMS_MEMORY_MAX];extern 
 T_zUfiSms_DelSms g_zUfiSms_DelMsg;static int isSucess(T_zUfiSms_DbResult dbRst){
 return dbRst==ZTE_WMS_DB_OK?ZUFI_SUCC:ZUFI_FAIL;}time_t zte_getsecond(
-T_zUfiSms_Date date){time_t timet;struct tm tmtime={(0xb30+1627-0x118b)};int 
-tmp_i=(0x403+2588-0xe1f);
-#if (0xd89+4898-0x20ab)

-if(atoi(date.year)>(0x879+2626-0x1258)||atoi(date.year)<(0x559+6503-0x1ec0)){
+T_zUfiSms_Date date){time_t timet;struct tm tmtime={(0x6f7+1739-0xdc2)};int 
+tmp_i=(0x97c+7441-0x268d);
+#if (0x49d+5988-0x1c01)

+if(atoi(date.year)>(0x9d8+5507-0x1ef8)||atoi(date.year)<(0x1115+5021-0x24b2)){
 printf("[SMS] getsecond error, year out of range: %d!!!",atoi(date.year));return
-(0xb11+5886-0x220f);}
+(0x152c+4360-0x2634);}
 #endif

-tmp_i=atoi(date.year);if(tmp_i<(0xbd7+3606-0x19ed)||tmp_i>INT_MAX-
-(0x8d8+4352-0x19d7)){at_print(LOG_ERR,
+tmp_i=atoi(date.year);if(tmp_i<(0x8f+9222-0x2495)||tmp_i>INT_MAX-
+(0x10f+1002-0x4f8)){at_print(LOG_ERR,
 "\x5b\x53\x4d\x53\x5d\x64\x61\x74\x65\x2e\x79\x65\x61\x72\x20\x65\x72\x72\x3a\x25\x64" "\n"
-,tmp_i);return(0xdb4+3202-0x1a36);}tmtime.tm_year=tmp_i+(0x117d+5399-0x1ec4)-
-(0x891+5426-0x1657);tmp_i=atoi(date.month);if(tmp_i<(0xc8c+6660-0x2690)||tmp_i>
-INT_MAX-(0x1359+3423-0x20b7)){at_print(LOG_ERR,
+,tmp_i);return(0xc99+1812-0x13ad);}tmtime.tm_year=tmp_i+(0x1d6c+89-0x15f5)-
+(0x18d0+3701-0x1fd9);tmp_i=atoi(date.month);if(tmp_i<(0x1b36+706-0x1df8)||tmp_i>
+INT_MAX-(0x135b+1528-0x1952)){at_print(LOG_ERR,
 "\x5b\x53\x4d\x53\x5d\x64\x61\x74\x65\x2e\x6d\x6f\x6e\x74\x68\x20\x65\x72\x72\x3a\x25\x64" "\n"
-,tmp_i);return(0xef0+4426-0x203a);}tmtime.tm_mon=tmp_i-(0xa72+6256-0x22e1);tmp_i
-=atoi(date.day);if(tmp_i<(0xf82+5434-0x24bc)||tmp_i>INT_MAX-(0x707+6806-0x219c))
-{at_print(LOG_ERR,
+,tmp_i);return(0x1d90+2155-0x25fb);}tmtime.tm_mon=tmp_i-(0x164a+3921-0x259a);
+tmp_i=atoi(date.day);if(tmp_i<(0xcb3+5289-0x215c)||tmp_i>INT_MAX-
+(0xd96+4047-0x1d64)){at_print(LOG_ERR,
 "\x5b\x53\x4d\x53\x5d\x64\x61\x74\x65\x2e\x64\x61\x79\x20\x65\x72\x72\x3a\x25\x64" "\n"
-,tmp_i);return(0x19a4+566-0x1bda);}tmtime.tm_mday=tmp_i;tmp_i=atoi(date.hour);if
-(tmp_i<(0xb32+6031-0x22c1)||tmp_i>INT_MAX-(0x133d+1649-0x19ad)){at_print(LOG_ERR
-,
+,tmp_i);return(0x61b+2025-0xe04);}tmtime.tm_mday=tmp_i;tmp_i=atoi(date.hour);if(
+tmp_i<(0x26a+1163-0x6f5)||tmp_i>INT_MAX-(0x5a+7977-0x1f82)){at_print(LOG_ERR,
 "\x5b\x53\x4d\x53\x5d\x64\x61\x74\x65\x2e\x68\x6f\x75\x72\x20\x65\x72\x72\x3a\x25\x64" "\n"
-,tmp_i);return(0x1a1+2753-0xc62);}tmtime.tm_hour=tmp_i;tmp_i=atoi(date.min);if(
-tmp_i<(0xc33+2590-0x1651)||tmp_i>INT_MAX-(0xc08+5093-0x1fec)){at_print(LOG_ERR,
+,tmp_i);return(0x11b3+1161-0x163c);}tmtime.tm_hour=tmp_i;tmp_i=atoi(date.min);if
+(tmp_i<(0x20bb+123-0x2136)||tmp_i>INT_MAX-(0x1db+4222-0x1258)){at_print(LOG_ERR,
 "\x5b\x53\x4d\x53\x5d\x64\x61\x74\x65\x2e\x6d\x69\x6e\x20\x65\x72\x72\x3a\x25\x64" "\n"
-,tmp_i);return(0x1bca+2553-0x25c3);}tmtime.tm_min=tmp_i;tmp_i=atoi(date.sec);if(
-tmp_i<(0x2ad+8930-0x258f)||tmp_i>INT_MAX-(0x193a+3151-0x2588)){at_print(LOG_ERR,
+,tmp_i);return(0x1491+1219-0x1954);}tmtime.tm_min=tmp_i;tmp_i=atoi(date.sec);if(
+tmp_i<(0xeca+1473-0x148b)||tmp_i>INT_MAX-(0xa3f+1177-0xed7)){at_print(LOG_ERR,
 "\x5b\x53\x4d\x53\x5d\x64\x61\x74\x65\x2e\x73\x65\x63\x20\x65\x72\x72\x3a\x25\x64" "\n"
-,tmp_i);return(0xf20+2373-0x1865);}tmtime.tm_sec=tmp_i;timet=mktime(&tmtime);
+,tmp_i);return(0x1307+3747-0x21aa);}tmtime.tm_sec=tmp_i;timet=mktime(&tmtime);
 return timet;}T_zUfiSms_DbResult zUfiSms_OpenDb(void){int retry_times=
-(0xc8b+3734-0x1b21);int open_rst=SQLITE_ERROR;if(g_zUfiSms_DbPointer!=NULL){
+(0x982+2416-0x12f2);int open_rst=SQLITE_ERROR;if(g_zUfiSms_DbPointer!=NULL){
 sqlite3_close(g_zUfiSms_DbPointer);g_zUfiSms_DbPointer=NULL;}do{open_rst=
 sqlite3_open(ZTE_WMS_DB_PATH,&g_zUfiSms_DbPointer);}while(open_rst==
-SQLITE_CANTOPEN&&retry_times++<(0xf1+6288-0x1977));printf(
+SQLITE_CANTOPEN&&retry_times++<(0x9b6+5942-0x20e2));printf(
 "\x7a\x55\x66\x69\x53\x6d\x73\x5f\x4f\x70\x65\x6e\x44\x62\x3a\x20\x72\x65\x74\x72\x79\x5f\x74\x69\x6d\x65\x73\x20\x3d\x20\x25\x64\x2c\x20\x6f\x70\x65\x6e\x5f\x72\x73\x74\x20\x3d\x20\x25\x64" "\n"
 ,retry_times,open_rst);return open_rst==SQLITE_OK?ZTE_WMS_DB_OK:
 ZTE_SMS_DB_ERROR_NOT_OPEN_DB;}T_zUfiSms_DbResult zUfiSms_CloseDb(void){if(
 sqlite3_close(g_zUfiSms_DbPointer)!=SQLITE_OK){return ZTE_SMS_DB_ERROR;}
 g_zUfiSms_DbPointer=NULL;return ZTE_WMS_DB_OK;}T_zUfiSms_DbResult 
 zUfiSms_ExecSql(const char*exec_sql,zte_wms_db_callback callback,void*fvarg){int
- try_times=(0xcd0+6334-0x258e);int sqlRst=SQLITE_ERROR;while(try_times++<
-(0x6f1+7937-0x25e8)){sqlRst=sqlite3_exec(g_zUfiSms_DbPointer,exec_sql,callback,
+ try_times=(0x129c+3044-0x1e80);int sqlRst=SQLITE_ERROR;while(try_times++<
+(0x420+2790-0xefc)){sqlRst=sqlite3_exec(g_zUfiSms_DbPointer,exec_sql,callback,
 fvarg,NULL);if(sqlRst!=SQLITE_BUSY&&sqlRst!=SQLITE_LOCKED&&sqlRst!=SQLITE_IOERR)
 {break;}printf(
 "\x7a\x55\x66\x69\x53\x6d\x73\x5f\x45\x78\x65\x63\x53\x71\x6c\x3a\x20\x74\x72\x79\x5f\x74\x69\x6d\x65\x73\x3d\x25\x64\x2c\x20\x53\x51\x4c\x3d\x25\x73\x2c\x20\x45\x72\x72\x6d\x73\x67\x3d\x25\x73" "\n"
 ,try_times,exec_sql,sqlite3_errmsg(g_zUfiSms_DbPointer));sleep(
-(0x1bba+1330-0x20eb));}if(sqlRst!=SQLITE_OK){printf(
+(0x1eff+1853-0x263b));}if(sqlRst!=SQLITE_OK){printf(
 "\x7a\x55\x66\x69\x53\x6d\x73\x5f\x45\x78\x65\x63\x53\x71\x6c\x3a\x20\x74\x72\x79\x5f\x74\x69\x6d\x65\x73\x3d\x25\x64\x2c\x20\x53\x51\x4c\x3d\x25\x73\x2c\x20\x45\x72\x72\x6d\x73\x67\x3d\x25\x73" "\n"
 ,try_times,exec_sql,sqlite3_errmsg(g_zUfiSms_DbPointer));return ZTE_SMS_DB_ERROR
 ;}else{
 #ifdef WEBS_SECURITY

-if(access(ZTE_WMS_TMP1_PATH,F_OK)==(0xa38+6913-0x2539)){slog(PB_PRINT,SLOG_ERR,
+if(access(ZTE_WMS_TMP1_PATH,F_OK)==(0x3fa+2660-0xe5e)){slog(PB_PRINT,SLOG_ERR,
 "\x7a\x55\x66\x69\x53\x6d\x73\x5f\x45\x78\x65\x63\x53\x71\x6c\x20\x64\x62\x20\x73\x74\x61\x79"
-);if(remove(ZTE_WMS_TMP1_PATH)!=(0xa21+2819-0x1524)){slog(SMS_PRINT,SLOG_ERR,
+);if(remove(ZTE_WMS_TMP1_PATH)!=(0x1b93+1350-0x20d9)){slog(SMS_PRINT,SLOG_ERR,
 "\x72\x65\x6d\x6f\x76\x65\x20\x57\x4d\x53\x5f\x54\x4d\x50\x31\x5f\x50\x41\x54\x48\x20\x66\x61\x69\x6c"
-);}}{char rnum_buf[(0x211+6557-0x1b96)]={(0xd65+5256-0x21ed)};char cmd[
-(0x252+3837-0x10cf)]={(0x7dc+1469-0xd99)};sc_cfg_get(
+);}}{char rnum_buf[(0x891+2720-0x1319)]={(0x4b1+2366-0xdef)};char cmd[
+(0xb5c+2425-0x1455)]={(0x50d+353-0x66e)};sc_cfg_get(
 "\x72\x6e\x75\x6d\x5f\x61\x74",rnum_buf,sizeof(rnum_buf));snprintf(cmd,sizeof(
 cmd),
 "\x2f\x62\x69\x6e\x2f\x6f\x70\x65\x6e\x73\x73\x6c\x20\x65\x6e\x63\x20\x2d\x65\x20\x2d\x61\x65\x73\x32\x35\x36\x20\x2d\x73\x61\x6c\x74\x20\x2d\x69\x6e\x20\x25\x73\x20\x2d\x6f\x75\x74\x20\x25\x73\x20\x2d\x70\x61\x73\x73\x20\x70\x61\x73\x73\x3a\x25\x73"
 ,ZTE_WMS_DB_PATH,ZTE_WMS_TMP1_PATH,rnum_buf);zxic_system(cmd);if(access(
-ZTE_WMS_TMP1_PATH,F_OK)==(0x1f75+1909-0x26ea)){if(remove(ZTE_WMS_SEC_PATH)!=
-(0x654+5287-0x1afb)){slog(SMS_PRINT,SLOG_ERR,
+ZTE_WMS_TMP1_PATH,F_OK)==(0x1672+1642-0x1cdc)){if(remove(ZTE_WMS_SEC_PATH)!=
+(0xd76+2206-0x1614)){slog(SMS_PRINT,SLOG_ERR,
 "\x72\x65\x6d\x6f\x76\x65\x20\x57\x4d\x53\x5f\x53\x45\x43\x5f\x50\x41\x54\x48\x20\x66\x61\x69\x6c"
-);}if(rename(ZTE_WMS_TMP1_PATH,ZTE_WMS_SEC_PATH)!=(0xbd3+5788-0x226f)){slog(
+);}if(rename(ZTE_WMS_TMP1_PATH,ZTE_WMS_SEC_PATH)!=(0xd61+1227-0x122c)){slog(
 SMS_PRINT,SLOG_ERR,
 "\x72\x65\x6e\x61\x6d\x65\x20\x57\x4d\x53\x5f\x54\x4d\x50\x31\x5f\x50\x41\x54\x48\x20\x66\x61\x69\x6c"
 );}}}
 #endif	

 return ZTE_WMS_DB_OK;}}int zUfiSms_GetFirstColumnInt(void*fvarg,int columns,char
-**zresult,char**lname){if(columns>=(0x1663+1714-0x1d14)){if(zresult[
-(0x169b+1687-0x1d32)]==NULL){*(int*)fvarg=(0x1413+3232-0x20b3);}else{*(int*)
-fvarg=atoi(zresult[(0xddb+825-0x1114)]);}return SQLITE_OK;}else{return 
-SQLITE_ERROR;}}int zUfiSms_SetCmdStatus(T_zUfiSms_StatusInfo*ptSetStatus){
-T_zUfiSms_DbResult result=ZTE_WMS_DB_OK;char*strSQL=NULL;printf(
+**zresult,char**lname){if(columns>=(0x924+6197-0x2158)){if(zresult[
+(0xdfc+1947-0x1597)]==NULL){*(int*)fvarg=(0x124+3063-0xd1b);}else{*(int*)fvarg=
+atoi(zresult[(0xee8+98-0xf4a)]);}return SQLITE_OK;}else{return SQLITE_ERROR;}}
+int zUfiSms_SetCmdStatus(T_zUfiSms_StatusInfo*ptSetStatus){T_zUfiSms_DbResult 
+result=ZTE_WMS_DB_OK;char*strSQL=NULL;printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x53\x65\x74\x43\x6d\x64\x53\x74\x61\x74\x75\x73\x20\x65\x6e\x74\x65\x72\x2e" "\n"
 );strSQL=sqlite3_mprintf(
 "\x49\x4e\x53\x45\x52\x54\x20\x4f\x52\x20\x52\x45\x50\x4c\x41\x43\x45\x20\x49\x4e\x54\x4f\x20\x25\x73\x28\x43\x6d\x64\x2c\x43\x6d\x64\x5f\x53\x74\x61\x74\x75\x73\x2c\x45\x72\x72\x5f\x43\x6f\x64\x65\x2c\x53\x65\x6e\x64\x5f\x46\x61\x69\x6c\x5f\x43\x6f\x75\x6e\x74\x2c\x44\x65\x6c\x5f\x43\x6f\x75\x6e\x74\x29\x20"
@@ -188,28 +187,28 @@
 ptSetStatus->err_code,ptSetStatus->send_failed_count,ptSetStatus->
 delete_failed_count);result=zUfiSms_ExecSql(strSQL,NULL,NULL);sqlite3_free(
 strSQL);return isSucess(result);}void zUfiSms_SetParameterNv(T_zUfiSms_ParaInfo*
-para){if((0x154a+1100-0x1996)==(int)para->status_report_on){sc_cfg_set(
+para){if((0xb06+4383-0x1c25)==(int)para->status_report_on){sc_cfg_set(
 NV_REPORT_ENABLE,"\x30");}else{sc_cfg_set(NV_REPORT_ENABLE,"\x31");}if(
-(0xcd4+941-0x1081)==(int)para->sendfail_retry_on){sc_cfg_set(NV_SENDFAIL_RETRY,
-"\x30");}else{sc_cfg_set(NV_SENDFAIL_RETRY,"\x31");}if((0xbbb+3286-0x1891)==(int
-)para->outdate_delete_on){sc_cfg_set(NV_OUTDATE_DELETE,"\x30");}else{sc_cfg_set(
+(0xffa+1218-0x14bc)==(int)para->sendfail_retry_on){sc_cfg_set(NV_SENDFAIL_RETRY,
+"\x30");}else{sc_cfg_set(NV_SENDFAIL_RETRY,"\x31");}if((0x9+501-0x1fe)==(int)
+para->outdate_delete_on){sc_cfg_set(NV_OUTDATE_DELETE,"\x30");}else{sc_cfg_set(
 NV_OUTDATE_DELETE,"\x31");}if(*(para->default_store)!='\0'){sc_cfg_set(
-NV_DEFAULT_STORE,(char*)para->default_store);}if((0x9cc+6042-0x2166)==(int)para
+NV_DEFAULT_STORE,(char*)para->default_store);}if((0x1cf2+1872-0x2442)==(int)para
 ->mem_store){sc_cfg_set(NV_PRA_MEMSTORE,"\x30");}else{sc_cfg_set(NV_PRA_MEMSTORE
-,"\x31");}if((0x264+4874-0x146f)==(int)para->tp_validity_period){sc_cfg_set(
-NV_SMS_VP,"\x6c\x6f\x6e\x67\x65\x73\x74");}else if((0x5bb+5863-0x1bf5)==(int)
+,"\x31");}if((0x1ac3+930-0x1d66)==(int)para->tp_validity_period){sc_cfg_set(
+NV_SMS_VP,"\x6c\x6f\x6e\x67\x65\x73\x74");}else if((0xce1+3722-0x1abe)==(int)
 para->tp_validity_period){sc_cfg_set(NV_SMS_VP,"\x6f\x6e\x65\x77\x65\x65\x6b");}
-else if((0x1327+1857-0x19c1)==(int)para->tp_validity_period){sc_cfg_set(
-NV_SMS_VP,"\x6f\x6e\x65\x5f\x64\x61\x79");}else if((0x20f1+1089-0x24a3)==(int)
+else if((0x1ebf+2221-0x26c5)==(int)para->tp_validity_period){sc_cfg_set(
+NV_SMS_VP,"\x6f\x6e\x65\x5f\x64\x61\x79");}else if((0x1912+1645-0x1ef0)==(int)
 para->tp_validity_period){sc_cfg_set(NV_SMS_VP,"\x74\x77\x65\x6c\x76\x65\x68");}
 printf(
 "\x77\x6d\x73\x5f\x64\x62\x5f\x73\x65\x74\x5f\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x73\x20\x3a\x3a\x20\x73\x65\x74\x20\x74\x70\x5f\x76\x61\x6c\x69\x64\x69\x74\x79\x5f\x70\x65\x72\x69\x6f\x64\x20\x25\x64" "\n"
 ,(int)para->tp_validity_period);}int zUfiSms_SetDbParameters(T_zUfiSms_ParaInfo*
 para){T_zUfiSms_DbResult result=ZTE_WMS_DB_OK;char*strSQL=NULL;int count=
-(0x1b36+1974-0x22ec);if(NULL==para){return-(0x2+2991-0xbb0);}zUfiSms_ExecSql(
+(0x53d+4817-0x180e);if(NULL==para){return-(0x3d0+8053-0x2344);}zUfiSms_ExecSql(
 "\x53\x45\x4c\x45\x43\x54\x20\x63\x6f\x75\x6e\x74\x28\x2a\x29\x20\x46\x52\x4f\x4d\x20"
  ZTE_WMS_DB_PARAMETER_TABLE"\x20\x57\x48\x45\x52\x45\x20\x69\x64\x3d\x31\x3b",
-zUfiSms_GetFirstColumnInt,&count);if(count>(0x16d1+2408-0x2039)){strSQL=
+zUfiSms_GetFirstColumnInt,&count);if(count>(0x13b8+492-0x15a4)){strSQL=
 sqlite3_mprintf(
 "\x55\x50\x44\x41\x54\x45\x20\x25\x73\x20\x53\x45\x54\x20\x53\x6d\x73\x5f\x52\x65\x70\x6f\x72\x74\x3d\x27\x25\x64\x27\x2c\x53\x6d\x73\x5f\x53\x63\x61\x3d\x27\x25\x71\x27\x2c\x4d\x65\x6d\x5f\x53\x74\x6f\x72\x65\x3d\x27\x25\x64\x27\x2c\x54\x70\x5f\x56\x61\x6c\x69\x64\x69\x74\x79\x3d\x27\x25\x64\x27\x2c\x53\x65\x6e\x64\x5f\x52\x65\x74\x72\x79\x3d\x27\x25\x64\x27\x2c\x4f\x75\x74\x64\x61\x74\x65\x5f\x44\x65\x6c\x65\x74\x65\x3d\x27\x25\x64\x27\x2c\x44\x65\x66\x61\x75\x6c\x74\x5f\x53\x74\x6f\x72\x65\x3d\x27\x25\x71\x27\x20\x57\x48\x45\x52\x45\x20\x69\x64\x3d\x31\x3b"
 ,ZTE_WMS_DB_PARAMETER_TABLE,(int)para->status_report_on,para->sca,(int)para->
@@ -222,13 +221,13 @@
 mem_store,(int)para->tp_validity_period,(int)para->sendfail_retry_on,(int)para->
 outdate_delete_on,para->default_store);}result=zUfiSms_ExecSql(strSQL,NULL,NULL)
 ;sqlite3_free(strSQL);if(result==ZTE_WMS_DB_OK){zUfiSms_SetParameterNv(para);
-return(0xa40+5729-0x20a1);}return-(0x2b6+7006-0x1e13);}int zUfiSms_GetTotalCount
-(const char*pDbTable,int*pTotalCount){T_zUfiSms_DbResult result=ZTE_WMS_DB_OK;
-char*strSQL=NULL;strSQL=sqlite3_mprintf(
+return(0x452+4335-0x1541);}return-(0x1764+2670-0x21d1);}int 
+zUfiSms_GetTotalCount(const char*pDbTable,int*pTotalCount){T_zUfiSms_DbResult 
+result=ZTE_WMS_DB_OK;char*strSQL=NULL;strSQL=sqlite3_mprintf(
 "\x53\x45\x4c\x45\x43\x54\x20\x63\x6f\x75\x6e\x74\x28\x2a\x29\x20\x46\x52\x4f\x4d\x20\x73\x6d\x73\x20\x57\x48\x45\x52\x45\x20\x4d\x65\x6d\x5f\x53\x74\x6f\x72\x65\x3d\x27\x25\x71\x27\x3b"
 ,pDbTable);result=zUfiSms_ExecSql(strSQL,zUfiSms_GetFirstColumnInt,pTotalCount);
 sqlite3_free(strSQL);return isSucess(result);}int zUfiSms_GetSmsMaxReferInDb(
-void){int max_sms_ref=-(0x191d+2484-0x22d0);zUfiSms_ExecSql(
+void){int max_sms_ref=-(0x5f8+7997-0x2534);zUfiSms_ExecSql(
 "\x53\x45\x4c\x45\x43\x54\x20\x4d\x61\x78\x5f\x53\x6d\x73\x5f\x52\x65\x66\x20\x46\x52\x4f\x4d\x20"
  ZTE_WMS_DB_PARAMETER_TABLE
 "\x20\x57\x48\x45\x52\x45\x20\x69\x64\x20\x3d\x20\x31\x3b",
@@ -237,19 +236,19 @@
 content,int len){sqlite3_stmt*stmt=NULL;char*strSQL=sqlite3_mprintf(
 "\x53\x45\x4c\x45\x43\x54\x20\x69\x6e\x64\x2c\x43\x63\x5f\x53\x65\x71\x2c\x43\x63\x5f\x43\x6f\x6e\x74\x65\x6e\x74\x20\x46\x52\x4f\x4d\x20\x73\x6d\x73\x20\x57\x48\x45\x52\x45\x20\x69\x64\x3d\x27\x25\x64\x27\x20\x41\x4e\x44\x20\x4d\x65\x6d\x5f\x53\x74\x6f\x72\x65\x3d\x27\x25\x71\x27\x3b"
 ,id,mem_store);(void)sqlite3_prepare(g_zUfiSms_DbPointer,strSQL,-
-(0x5d8+4312-0x16af),&stmt,(0x3e5+1576-0xa0d));while(SQLITE_ROW==sqlite3_step(
-stmt)){char*column_text=NULL;memset(pac->IndStr,(0x9bc+190-0xa7a),sizeof(pac->
-IndStr));memset(pac->Seg_Seq,(0x88b+6296-0x2123),sizeof(pac->Seg_Seq));if((
-column_text=sqlite3_column_text(stmt,(0x1291+1461-0x1846)))!=NULL)strncpy(pac->
-IndStr,column_text,sizeof(pac->FormatInd)-(0x21e6+786-0x24f7));if((column_text=
-sqlite3_column_text(stmt,(0x964+7177-0x256c)))!=NULL)strncpy(pac->Seg_Seq,
-column_text,sizeof(pac->FormatSeq)-(0x155f+2895-0x20ad));if((column_text=
-sqlite3_column_text(stmt,(0x1ee3+1556-0x24f5)))!=NULL)strncpy(content,
-column_text,len-(0x3e2+4071-0x13c8));printf(
+(0x7d1+6054-0x1f76),&stmt,(0xa3b+3247-0x16ea));while(SQLITE_ROW==sqlite3_step(
+stmt)){char*column_text=NULL;memset(pac->IndStr,(0x2c+7953-0x1f3d),sizeof(pac->
+IndStr));memset(pac->Seg_Seq,(0x4fc+6604-0x1ec8),sizeof(pac->Seg_Seq));if((
+column_text=sqlite3_column_text(stmt,(0x467+524-0x673)))!=NULL)strncpy(pac->
+IndStr,column_text,sizeof(pac->FormatInd)-(0x11ba+3247-0x1e68));if((column_text=
+sqlite3_column_text(stmt,(0x919+4-0x91c)))!=NULL)strncpy(pac->Seg_Seq,
+column_text,sizeof(pac->FormatSeq)-(0xac5+6185-0x22ed));if((column_text=
+sqlite3_column_text(stmt,(0xb1d+1111-0xf72)))!=NULL)strncpy(content,column_text,
+len-(0xde2+4042-0x1dab));printf(
 "\x5b\x53\x4d\x53\x5d\x20\x74\x65\x65\x74\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x47\x65\x74\x43\x6f\x6e\x63\x61\x74\x49\x6e\x66\x6f\x3a\x25\x73\x2c\x25\x73" "\n"
 ,pac->IndStr,pac->Seg_Seq);}(void)sqlite3_finalize(stmt);sqlite3_free(strSQL);
-return(0x13b3+827-0x16ee);}int zUfiSms_UpdateConcatSmsToDb(T_zUfiSms_DbStoreData
-*db_data,const char*mem_store,char*format_concat,char*content,
+return(0x790+110-0x7fe);}int zUfiSms_UpdateConcatSmsToDb(T_zUfiSms_DbStoreData*
+db_data,const char*mem_store,char*format_concat,char*content,
 T_zUfiSms_DbStoreStr*pac,int concat_num,long id){char*sql=NULL;
 T_zUfiSms_DbResult result=ZTE_WMS_DB_OK;sql=sqlite3_mprintf(
 "\x55\x50\x44\x41\x54\x45\x20\x73\x6d\x73\x20\x53\x45\x54\x20\x69\x6e\x64\x3d\x27\x25\x73\x27\x2c\x54\x61\x67\x3d\x27\x25\x64\x27\x2c\x43\x63\x5f\x53\x65\x71\x3d\x27\x25\x73\x27\x2c\x43\x63\x5f\x4e\x75\x6d\x3d\x27\x25\x64\x27\x2c\x20"
@@ -270,32 +269,32 @@
 "\x43\x6f\x6e\x74\x65\x6e\x74\x2c\x53\x6d\x73\x5f\x52\x65\x70\x6f\x72\x74\x5f\x52\x65\x63\x69\x76\x65\x64\x2c\x44\x72\x61\x66\x74\x5f\x47\x72\x6f\x75\x70\x5f\x49\x64\x2c\x59\x65\x61\x72\x2c\x4d\x6f\x6e\x74\x68\x2c\x44\x61\x79\x2c\x48\x6f\x75\x72\x2c\x4d\x69\x6e\x75\x74\x65\x2c\x53\x65\x63\x6f\x6e\x64\x2c\x54\x69\x6d\x65\x5a\x6f\x6e\x65\x2c\x4d\x6b\x74\x69\x6d\x65\x2c\x44\x69\x73\x70\x6c\x61\x79\x4d\x6f\x64\x65\x29\x20"
 "\x56\x41\x4c\x55\x45\x53\x28" "\'" "\x25\x71" "\'" "\x2c" "\'" "\x25\x71" "\'" "\x2c\x20\x27\x25\x64\x27\x2c" "\'" "\x25\x71" "\'" "\x2c\x27\x25\x64\x27\x2c\x27\x25\x64\x27\x2c\x27\x25\x64\x27\x2c" "\'" "\x25\x71" "\'" "\x2c\x27\x25\x64\x27\x2c" "\'" "\x25\x71" "\'" "\x2c\x27\x25\x64\x27\x2c\x20\x27\x25\x64\x27\x2c" "\'" "\x25\x71" "\'" "\x2c" "\'" "\x25\x71" "\'" "\x2c" "\'" "\x25\x71" "\'" "\x2c" "\'" "\x25\x71" "\'" "\x2c" "\'" "\x25\x71" "\'" "\x2c" "\'" "\x25\x71" "\'" "\x2c" "\'" "\x25\x71" "\'" "\x2c\x20" "\'" "\x25\x71" "\'" "\x2c" "\'" "\x25\x71" "\'" "\x2c" "\'" "\x25\x71" "\'" "\x2c\x27\x25\x64\x27\x2c\x20\x27\x25\x64\x27\x29\x3b"
 ,pac->FormatInd,mem_store,db_data->tag,db_data->number,db_data->concat_sms,
-db_data->concat_info[(0x56d+4880-0x187d)],db_data->concat_info[
-(0x35b+1562-0x974)],pac->FormatSeq,concat_num,format_concat,db_data->tp_dcs,
-db_data->msg_ref,content,"\x30",db_data->draft_group_id,db_data->julian_date.
-year,db_data->julian_date.month,db_data->julian_date.day,db_data->julian_date.
-hour,db_data->julian_date.min,db_data->julian_date.sec,db_data->julian_date.
-timezone,(unsigned int)zte_getsecond(db_data->julian_date),db_data->
-msg_displaymode);printf(
+db_data->concat_info[(0xa0+5340-0x157c)],db_data->concat_info[(0x339+3083-0xf43)
+],pac->FormatSeq,concat_num,format_concat,db_data->tp_dcs,db_data->msg_ref,
+content,"\x30",db_data->draft_group_id,db_data->julian_date.year,db_data->
+julian_date.month,db_data->julian_date.day,db_data->julian_date.hour,db_data->
+julian_date.min,db_data->julian_date.sec,db_data->julian_date.timezone,(unsigned
+ int)zte_getsecond(db_data->julian_date),db_data->msg_displaymode);printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x49\x6e\x73\x65\x72\x74\x43\x6f\x6e\x63\x61\x74\x53\x6d\x73\x54\x6f\x44\x62\x20\x73\x71\x6c\x3d\x25\x73\x2e" "\n"
 ,sql);result=zUfiSms_ExecSql(sql,NULL,NULL);sqlite3_free(sql);return isSucess(
 result);}int zUfiSms_GetConcatMaxReferInDb(void){int ConcatMaxRefer=
-(0x84d+6879-0x232c);int result=(0xc2d+1533-0x122a);result=zUfiSms_ExecSql(
+(0xef3+2924-0x1a5f);int result=(0x1078+4162-0x20ba);result=zUfiSms_ExecSql(
 "\x53\x45\x4c\x45\x43\x54\x20\x4d\x61\x78\x5f\x43\x63\x5f\x52\x65\x66\x20\x46\x52\x4f\x4d\x20"
  ZTE_WMS_DB_PARAMETER_TABLE
 "\x20\x57\x48\x45\x52\x45\x20\x69\x64\x20\x3d\x20\x31\x3b",
 zUfiSms_GetFirstColumnInt,&ConcatMaxRefer);if(ZTE_WMS_DB_OK!=result){return-
-(0x7ac+5837-0x1e78);}return ConcatMaxRefer;}int zUfiSms_CreateTables(){int iMap=
-(0x4cf+6219-0x1d1a);const T_zUfiSms_SQLMap SQL_MAP[]={{(0x1fb+7321-0x1e93),
-ZTE_WMS_CREATE_TABLE_SMS_SQL},{(0x15e5+3010-0x21a6),ZTE_WMS_DEL_SIM_SQL},{
-(0xc9+7747-0x1f0b),ZTE_WMS_CREATE_CMD_STATUS_SQL},{(0x130f+2686-0x1d8c),
-ZTE_WMS_CREATE_SMS_REP_SQL},{(0x111+2349-0xa3d),ZTE_WMS_CREATE_PAR_SQL},{
-(0xa44+909-0xdd0),ZTE_WMS_CREATE_INFO_SQL},{(0xb70+5858-0x2251),
-ZTE_WMS_CREATE_CELL_BRO_SQL},{(0x1e9+3342-0xef6),ZTE_WMS_CREATE_SEND_CONTENT_SQL
-},};for(iMap=(0xb76+3469-0x1903);iMap<sizeof(SQL_MAP)/sizeof(T_zUfiSms_SQLMap);
-iMap++){if(SQL_MAP[iMap].valid==(0xdfa+843-0x1144)){if(zUfiSms_ExecSql(SQL_MAP[
-iMap].strSQL,NULL,NULL)!=ZTE_WMS_DB_OK){return ZUFI_FAIL;}}}return ZUFI_SUCC;}
-int zUfiSms_CreateAllTable(void){if(ZTE_WMS_DB_OK!=zUfiSms_OpenDb()){printf(
+(0x1b99+2806-0x268e);}return ConcatMaxRefer;}int zUfiSms_CreateTables(){int iMap
+=(0x17ca+1786-0x1ec4);const T_zUfiSms_SQLMap SQL_MAP[]={{(0x12a0+3870-0x21bd),
+ZTE_WMS_CREATE_TABLE_SMS_SQL},{(0x7f3+2509-0x11bf),ZTE_WMS_DEL_SIM_SQL},{
+(0xc65+3574-0x1a5a),ZTE_WMS_CREATE_CMD_STATUS_SQL},{(0xeb3+4780-0x215e),
+ZTE_WMS_CREATE_SMS_REP_SQL},{(0x2491+52-0x24c4),ZTE_WMS_CREATE_PAR_SQL},{
+(0x56c+7668-0x235f),ZTE_WMS_CREATE_INFO_SQL},{(0x2b9+3220-0xf4c),
+ZTE_WMS_CREATE_CELL_BRO_SQL},{(0x77f+7386-0x2458),
+ZTE_WMS_CREATE_SEND_CONTENT_SQL},};for(iMap=(0x6a3+6315-0x1f4e);iMap<sizeof(
+SQL_MAP)/sizeof(T_zUfiSms_SQLMap);iMap++){if(SQL_MAP[iMap].valid==
+(0xfa2+2481-0x1952)){if(zUfiSms_ExecSql(SQL_MAP[iMap].strSQL,NULL,NULL)!=
+ZTE_WMS_DB_OK){return ZUFI_FAIL;}}}return ZUFI_SUCC;}int zUfiSms_CreateAllTable(
+void){if(ZTE_WMS_DB_OK!=zUfiSms_OpenDb()){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x63\x61\x6e\x20\x6e\x6f\x74\x20\x6f\x70\x65\x6e\x20\x64\x61\x74\x61\x62\x61\x73\x65\x2e\x72\x65\x74\x75\x72\x6e\x2e" "\n"
 );return ZTE_SMS_DB_ERROR_NOT_OPEN_DB;}return zUfiSms_CreateTables();}int 
 zUfiSms_DropAllTable(void){T_zUfiSms_DbResult result=ZTE_WMS_DB_OK;if(
@@ -324,9 +323,9 @@
 "\x27\x25\x64\x27\x2c\x27\x25\x71\x27\x2c\x27\x25\x64\x27\x2c\x27\x25\x64\x27\x2c\x27\x25\x64\x27\x2c\x27\x25\x64\x27\x2c\x27\x25\x64\x27\x2c\x27\x25\x64\x27\x2c\x27\x25\x71\x27\x2c\x27\x25\x71\x27\x2c\x27\x25\x71\x27\x2c\x27\x25\x71\x27\x2c\x27\x25\x71\x27\x2c\x27\x25\x71\x27\x2c\x27\x25\x71\x27\x2c\x27\x25\x71\x27\x2c\x20"
 "\x27\x25\x71\x27\x2c\x27\x25\x71\x27\x2c\x27\x25\x75\x27\x2c\x20\x27\x25\x64\x27\x29\x3b"
 ,ptDbSaveData->index,pStorePos,ptDbSaveData->tag,ptDbSaveData->number,
-ptDbSaveData->concat_sms,ptDbSaveData->concat_info[(0xb31+3766-0x19e7)],
-ptDbSaveData->concat_info[(0x63+4353-0x1163)],ptDbSaveData->concat_info[
-(0xc02+4742-0x1e86)],ptDbSaveData->tp_dcs,ptDbSaveData->msg_ref,pContent,"\x30",
+ptDbSaveData->concat_sms,ptDbSaveData->concat_info[(0x21b+6611-0x1bee)],
+ptDbSaveData->concat_info[(0xbc3+4114-0x1bd4)],ptDbSaveData->concat_info[
+(0x282+1345-0x7c1)],ptDbSaveData->tp_dcs,ptDbSaveData->msg_ref,pContent,"\x30",
 ptDbSaveData->draft_group_id,ptDbSaveData->julian_date.year,ptDbSaveData->
 julian_date.month,ptDbSaveData->julian_date.day,ptDbSaveData->julian_date.hour,
 ptDbSaveData->julian_date.min,ptDbSaveData->julian_date.sec,ptDbSaveData->
@@ -348,25 +347,25 @@
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x55\x70\x64\x61\x74\x65\x4e\x6f\x72\x6d\x61\x6c\x53\x6d\x73\x54\x6f\x44\x62\x20\x73\x71\x6c\x3d\x25\x73" "\n"
 ,strSQL);result=zUfiSms_ExecSql(strSQL,NULL,NULL);sqlite3_free(strSQL);return 
 isSucess(result);}int zUfiSms_GetFirstColumnStr(void*fvarg,int columns,char**
-zresult,char**lname){if(columns>=(0x643+6739-0x2095)&&fvarg!=NULL){if(zresult[
-(0x205b+1248-0x253b)]!=NULL){T_zUfiSms_BufInfo*para=(T_zUfiSms_BufInfo*)fvarg;
-strncpy(para->buf_addr,zresult[(0xdeb+1088-0x122b)],para->buf_len-
-(0xdb5+2435-0x1737));return SQLITE_OK;}}return SQLITE_ERROR;}int 
+zresult,char**lname){if(columns>=(0x1ea9+140-0x1f34)&&fvarg!=NULL){if(zresult[
+(0xfa3+4922-0x22dd)]!=NULL){T_zUfiSms_BufInfo*para=(T_zUfiSms_BufInfo*)fvarg;
+strncpy(para->buf_addr,zresult[(0x8c5+1092-0xd09)],para->buf_len-
+(0xc25+3630-0x1a52));return SQLITE_OK;}}return SQLITE_ERROR;}int 
 zUfiSms_GetStorePosById(char*item,char*item_data,int item_len,int id){
 T_zUfiSms_DbResult result=ZTE_WMS_DB_OK;T_zUfiSms_BufInfo buf_info={
-(0xc74+3592-0x1a7c)};char*strSQL=NULL;if(NULL==item||NULL==item_data){return 
+(0xb40+387-0xcc3)};char*strSQL=NULL;if(NULL==item||NULL==item_data){return 
 ZUFI_FAIL;}buf_info.buf_addr=item_data;buf_info.buf_len=item_len;strSQL=
 sqlite3_mprintf(
 "\x53\x45\x4c\x45\x43\x54\x20\x25\x71\x20\x46\x52\x4f\x4d\x20\x73\x6d\x73\x20\x57\x48\x45\x52\x45\x20\x69\x64\x3d\x27\x25\x64\x27\x3b"
 ,item,id);result=zUfiSms_ExecSql(strSQL,zUfiSms_GetFirstColumnStr,&buf_info);
-sqlite3_free(strSQL);if((ZTE_WMS_DB_OK!=result)||((0xb5d+1709-0x120a)==strcmp(
+sqlite3_free(strSQL);if((ZTE_WMS_DB_OK!=result)||((0x912+6310-0x21b8)==strcmp(
 item_data,""))){at_print(LOG_ERR,
 "\x67\x65\x74\x20\x74\x61\x62\x6c\x65\x5f\x6d\x65\x6d\x62\x65\x72\x20\x62\x79\x20\x69\x64\x20\x66\x61\x69\x6c\x65\x64\x2e" "\n"
 );return ZUFI_FAIL;}return ZUFI_SUCC;}int zUfiSms_DeleteSmsInDb(void){char sql[
-(0x185b+2433-0x215c)]={(0x1413+250-0x150d)};snprintf(sql,sizeof(sql),
+(0x13e3+3805-0x2240)]={(0x10a9+3128-0x1ce1)};snprintf(sql,sizeof(sql),
 "\x44\x45\x4c\x45\x54\x45\x20\x46\x52\x4f\x4d\x20\x73\x6d\x73\x20\x57\x48\x45\x52\x45\x20\x4d\x65\x6d\x5f\x53\x74\x6f\x72\x65\x3d\x27\x25\x73\x27\x20\x61\x6e\x64\x20\x69\x64\x3d\x27\x25\x64\x27\x3b"
 ,ZTE_WMS_DB_SIM_TABLE,g_zUfiSms_DelMsg.sim_id[g_zUfiSms_DelMsg.sim_index-
-(0x196+7334-0x1e3b)]);return isSucess(zUfiSms_ExecSql(sql,NULL,NULL));}int 
+(0x555+4791-0x180b)]);return isSucess(zUfiSms_ExecSql(sql,NULL,NULL));}int 
 zUfiSms_DeleteAllSimSmsInDb(void){return isSucess(zUfiSms_ExecSql(
 "\x44\x45\x4c\x45\x54\x45\x20\x46\x52\x4f\x4d\x20\x73\x6d\x73\x20\x57\x48\x45\x52\x45\x20\x4d\x65\x6d\x5f\x53\x74\x6f\x72\x65\x3d\x27"
  ZTE_WMS_DB_SIM_TABLE"\x27\x3b",NULL,NULL));}int zUfiSms_DeleteNvSms(void){if(
@@ -375,11 +374,11 @@
 "\x44\x45\x4c\x45\x54\x45\x20\x46\x52\x4f\x4d\x20\x73\x6d\x73\x20\x57\x48\x45\x52\x45\x20\x4d\x65\x6d\x5f\x53\x74\x6f\x72\x65\x3d\x27"
  ZTE_WMS_DB_NV_TABLE"\x27\x3b",NULL,NULL)){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x44\x65\x6c\x65\x74\x65\x4e\x76\x53\x6d\x73\x3a\x64\x65\x6c\x65\x74\x65\x20\x66\x61\x69\x6c" "\n"
-);return WMS_CMD_FAILED;}}else{int i=(0x392+411-0x52d);printf(
+);return WMS_CMD_FAILED;}}else{int i=(0x882+1620-0xed6);printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x44\x65\x6c\x65\x74\x65\x4e\x76\x53\x6d\x73\x3a\x64\x65\x6c\x65\x74\x65\x20\x6e\x76\x5f\x63\x6f\x75\x6e\x74\x3d\x25\x64" "\n"
-,g_zUfiSms_DelMsg.nv_count);for(i=(0xd57+1157-0x11dc);i<g_zUfiSms_DelMsg.
-nv_count;i++){char sql[(0x173b+2524-0x2097)]={(0x18db+2791-0x23c2)};snprintf(sql
-,sizeof(sql),
+,g_zUfiSms_DelMsg.nv_count);for(i=(0x2355+384-0x24d5);i<g_zUfiSms_DelMsg.
+nv_count;i++){char sql[(0x497+4382-0x1535)]={(0xbfb+1753-0x12d4)};snprintf(sql,
+sizeof(sql),
 "\x44\x45\x4c\x45\x54\x45\x20\x46\x52\x4f\x4d\x20\x73\x6d\x73\x20\x57\x48\x45\x52\x45\x20\x4d\x65\x6d\x5f\x53\x74\x6f\x72\x65\x3d\x27\x25\x73\x27\x20\x61\x6e\x64\x20\x69\x64\x3d\x27\x25\x64\x27\x3b"
 ,ZTE_WMS_DB_NV_TABLE,g_zUfiSms_DelMsg.nv_id[i]);if(ZTE_WMS_DB_OK!=
 zUfiSms_ExecSql(sql,NULL,NULL)){printf(
@@ -387,40 +386,39 @@
 ,i);return WMS_CMD_FAILED;}}}printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x44\x65\x6c\x65\x74\x65\x4e\x76\x53\x6d\x73\x3a\x64\x65\x6c\x65\x74\x65\x20\x73\x75\x63\x63\x65\x73\x73" "\n"
 );return WMS_CMD_SUCCESS;}int zUfiSms_GetSmsIndex(int id,T_zUfiSms_ModifyTag*
-ptModifyTag,int is_cc){char sql[(0xd14+3944-0x1bfc)]={(0x598+7707-0x23b3)};
-T_zUfiSms_BufInfo buf_info={(0x1d78+507-0x1f73)};char str_index[
-(0x389+6504-0x1cef)*WMS_MESSAGE_LIST_MAX]={(0x17c1+1819-0x1edc)};buf_info.
+ptModifyTag,int is_cc){char sql[(0x132+1949-0x84f)]={(0x8f2+2693-0x1377)};
+T_zUfiSms_BufInfo buf_info={(0x2e8+8176-0x22d8)};char str_index[
+(0x1180+3907-0x20c1)*WMS_MESSAGE_LIST_MAX]={(0x13c6+1801-0x1acf)};buf_info.
 buf_addr=str_index;buf_info.buf_len=sizeof(str_index);snprintf(sql,sizeof(sql),
 "\x53\x45\x4c\x45\x43\x54\x20\x69\x6e\x64\x20\x46\x52\x4f\x4d\x20\x73\x6d\x73\x20\x57\x48\x45\x52\x45\x20\x69\x64\x3d\x27\x25\x64\x27\x3b"
 ,id);if(zUfiSms_ExecSql(sql,zUfiSms_GetFirstColumnStr,&buf_info)!=ZTE_WMS_DB_OK)
 {at_print(LOG_ERR,
 "\x6f\x70\x65\x6e\x20\x74\x61\x62\x6c\x65\x20\x73\x6d\x73\x20\x66\x61\x69\x6c\x65\x64"
-);return ZUFI_FAIL;}if((0x1006+5219-0x2468)==is_cc){int i=(0x695+6825-0x213e);
-int j=(0x1de3+137-0x1e6c);int count=(0x1ec+8865-0x248d);char**out_result=NULL;
-count=zUfiSms_SplitString(str_index,&out_result,((char)(0x1d7c+591-0x1f90)));for
-(i=(0x1f43+1921-0x26c4);i<count;i++){if((0xd48+1065-0x1171)!=strcmp(out_result[i
-],"")){ptModifyTag->indices[j++]=atoi(out_result[i]);}}ptModifyTag->
-num_of_indices=j;free(out_result);}else{ptModifyTag->indices[
-(0x1491+3231-0x2130)]=atoi(str_index);ptModifyTag->num_of_indices=
-(0x14b8+2033-0x1ca8);}ptModifyTag->total_indices=ptModifyTag->num_of_indices;
-printf(
+);return ZUFI_FAIL;}if((0x7df+5935-0x1f0d)==is_cc){int i=(0x454+4018-0x1406);int
+ j=(0x5bb+6236-0x1e17);int count=(0x1303+132-0x1387);char**out_result=NULL;count
+=zUfiSms_SplitString(str_index,&out_result,((char)(0x29d+1764-0x946)));for(i=
+(0x1dcd+2366-0x270b);i<count;i++){if((0x13ac+4945-0x26fd)!=strcmp(out_result[i],
+"")){ptModifyTag->indices[j++]=atoi(out_result[i]);}}ptModifyTag->num_of_indices
+=j;free(out_result);}else{ptModifyTag->indices[(0x5d8+5402-0x1af2)]=atoi(
+str_index);ptModifyTag->num_of_indices=(0xfb5+4834-0x2296);}ptModifyTag->
+total_indices=ptModifyTag->num_of_indices;printf(
 "\x6d\x6f\x64\x69\x66\x79\x5f\x74\x61\x67\x5f\x70\x74\x72\x2d\x3e\x74\x6f\x74\x61\x6c\x5f\x69\x6e\x64\x69\x63\x65\x73\x3d\x25\x64" "\n"
 ,ptModifyTag->total_indices);return ZUFI_SUCC;}int zUfiSms_IsConcatSms(int id){
-char sql[(0x725+5922-0x1dc7)]={(0x14f+6136-0x1947)};int is_cc=
-(0x15ed+2504-0x1fb5);T_zUfiSms_DbResult result=ZTE_WMS_DB_OK;snprintf(sql,sizeof
-(sql),
+char sql[(0x562+7591-0x2289)]={(0x1549+3621-0x236e)};int is_cc=
+(0x13f+2240-0x9ff);T_zUfiSms_DbResult result=ZTE_WMS_DB_OK;snprintf(sql,sizeof(
+sql),
 "\x53\x45\x4c\x45\x43\x54\x20\x43\x63\x5f\x53\x6d\x73\x20\x46\x52\x4f\x4d\x20\x25\x73\x20\x57\x48\x45\x52\x45\x20\x69\x64\x3d\x27\x25\x64\x27\x3b"
 ,ZTE_WMS_DB_SMS_TABLE,id);result=zUfiSms_ExecSql(sql,zUfiSms_GetFirstColumnInt,&
 is_cc);if(ZTE_WMS_DB_OK!=result){at_print(LOG_ERR,
 "\x6f\x70\x65\x6e\x20\x74\x61\x62\x6c\x65\x20\x25\x73\x20\x66\x61\x69\x6c\x65\x64"
-,ZTE_WMS_DB_SMS_TABLE);return-(0xbda+4731-0x1e54);}return is_cc;}int 
+,ZTE_WMS_DB_SMS_TABLE);return-(0x114f+2916-0x1cb2);}return is_cc;}int 
 zUfiSms_UpdateSmsTagInDb(unsigned long id,unsigned int tags){char sql[
-(0x947+5828-0x1f8b)]={(0xb69+2391-0x14c0)};snprintf(sql,sizeof(sql),
+(0x1705+899-0x1a08)]={(0xbb2+1290-0x10bc)};snprintf(sql,sizeof(sql),
 "\x55\x50\x44\x41\x54\x45\x20\x25\x73\x20\x53\x45\x54\x20\x54\x61\x67\x3d\x27\x25\x64\x27\x20\x57\x48\x45\x52\x45\x20\x69\x64\x3d\x27\x25\x64\x27\x3b"
 ,ZTE_WMS_DB_SMS_TABLE,tags,id);return isSucess(zUfiSms_ExecSql(sql,NULL,NULL));}
 int zUfiSms_GetTagCountInDb(T_zUfiSms_MemoryType mem_store,unsigned int tags,int
 *pTotalCount){T_zUfiSms_DbResult result=ZTE_WMS_DB_OK;char sql[
-(0x19f5+2335-0x2294)]={(0xe93+1731-0x1556)};if(pTotalCount==NULL){return 
+(0x13b5+674-0x15d7)]={(0x1537+1138-0x19a9)};if(pTotalCount==NULL){return 
 ZUFI_FAIL;}if(mem_store==ZTE_WMS_MEMORY_MAX){snprintf(sql,sizeof(sql),
 "\x53\x45\x4c\x45\x43\x54\x20\x63\x6f\x75\x6e\x74\x28\x2a\x29\x20\x46\x52\x4f\x4d\x20\x25\x73\x20\x57\x48\x45\x52\x45\x20\x54\x61\x67\x3d\x27\x25\x64\x27\x3b"
 ,ZTE_WMS_DB_SMS_TABLE,tags);}else if(mem_store==ZTE_WMS_MEMORY_NV){snprintf(sql,
@@ -430,18 +428,18 @@
 "\x53\x45\x4c\x45\x43\x54\x20\x63\x6f\x75\x6e\x74\x28\x2a\x29\x20\x46\x52\x4f\x4d\x20\x25\x73\x20\x57\x48\x45\x52\x45\x20\x4d\x65\x6d\x5f\x53\x74\x6f\x72\x65\x3d\x27\x25\x73\x27\x20\x41\x4e\x44\x20\x54\x61\x67\x3d\x27\x25\x64\x27\x3b"
 ,ZTE_WMS_DB_SMS_TABLE,ZTE_WMS_DB_SIM_TABLE,tags);}result=zUfiSms_ExecSql(sql,(
 zte_wms_db_callback)zUfiSms_GetFirstColumnInt,pTotalCount);return isSucess(
-result);}int zUfiSms_DeleteDraftSms(long iSmsId){char sql[(0xd59+5400-0x21f1)]={
-(0x1540+4190-0x259e)};snprintf(sql,sizeof(sql),
+result);}int zUfiSms_DeleteDraftSms(long iSmsId){char sql[(0x4c7+2838-0xf5d)]={
+(0x915+930-0xcb7)};snprintf(sql,sizeof(sql),
 "\x44\x45\x4c\x45\x54\x45\x20\x46\x52\x4f\x4d\x20\x25\x73\x20\x57\x48\x45\x52\x45\x20\x69\x64\x3d\x27\x25\x6c\x64\x27\x3b"
 ,ZTE_WMS_DB_SMS_TABLE,iSmsId);return isSucess(zUfiSms_ExecSql(sql,NULL,NULL));}
-int zUfiSms_SetConcatMaxRefer(int ref){char sql[(0x1849+3191-0x2440)]={
-(0x1b0c+21-0x1b21)};if(ZTE_WMS_MAX_CONCAT_REF<ref){ref=(0x94a+7301-0x25cf);}
+int zUfiSms_SetConcatMaxRefer(int ref){char sql[(0x1688+2311-0x1f0f)]={
+(0x223d+637-0x24ba)};if(ZTE_WMS_MAX_CONCAT_REF<ref){ref=(0x3ef+6824-0x1e97);}
 snprintf(sql,sizeof(sql),
 "\x55\x50\x44\x41\x54\x45\x20\x25\x73\x20\x53\x45\x54\x20\x4d\x61\x78\x5f\x43\x63\x5f\x52\x65\x66\x3d\x27\x25\x64\x27\x20\x57\x48\x45\x52\x45\x20\x69\x64\x3d\x31\x3b"
 ,ZTE_WMS_DB_PARAMETER_TABLE,ref);return isSucess(zUfiSms_ExecSql(sql,NULL,NULL))
-;}int zUfiSms_SetMaxReference(int ref){char sql[(0x4a2+1087-0x861)]={
-(0x434+3374-0x1162)};if(ZTE_WMS_MAX_SMS_REF<ref){ref=(0x80d+208-0x8dd);}snprintf
-(sql,sizeof(sql),
+;}int zUfiSms_SetMaxReference(int ref){char sql[(0x150+192-0x190)]={
+(0xf6+5151-0x1515)};if(ZTE_WMS_MAX_SMS_REF<ref){ref=(0x1d19+147-0x1dac);}
+snprintf(sql,sizeof(sql),
 "\x55\x50\x44\x41\x54\x45\x20\x25\x73\x20\x53\x45\x54\x20\x4d\x61\x78\x5f\x53\x6d\x73\x5f\x52\x65\x66\x3d\x27\x25\x64\x27\x20\x57\x48\x45\x52\x45\x20\x69\x64\x3d\x31\x3b"
 ,ZTE_WMS_DB_PARAMETER_TABLE,ref);return isSucess(zUfiSms_ExecSql(sql,NULL,NULL))
 ;}int zUfiSms_InsertReportStatusToDb(unsigned char*pNumber,T_zUfiSms_Date*
@@ -453,74 +451,75 @@
 ->hour,ptSmsDate->min,ptSmsDate->sec,ptSmsDate->timezone);result=zUfiSms_ExecSql
 (strSQL,NULL,NULL);sqlite3_free(strSQL);return isSucess(result);}int 
 zUfiSms_GetFirstColumnParaInfo(void*fvarg,int columns,char**zresult,char**lname)
-{if(columns>=(0xce0+3309-0x19cc)&&fvarg!=NULL){if(zresult[(0x5d0+4402-0x1702)]!=
+{if(columns>=(0x5a8+8437-0x269c)&&fvarg!=NULL){if(zresult[(0x84c+5210-0x1ca6)]!=
 NULL){T_zUfiSms_ParaInfo*para=(T_zUfiSms_ParaInfo*)fvarg;strncpy(para->sca,
-zresult[(0x7ec+7923-0x26df)],sizeof(para->sca)-(0xf8c+2208-0x182b));para->
-mem_store=atoi(zresult[(0x10b0+4020-0x2063)]);para->tp_validity_period=atoi(
-zresult[(0x198f+693-0x1c42)]);para->status_report_on=atoi(zresult[
-(0x4e0+5782-0x1b73)]);para->sendfail_retry_on=atoi(zresult[(0x11b1+4482-0x232f)]
-);para->outdate_delete_on=atoi(zresult[(0xca8+3051-0x188e)]);(void)strncpy(para
-->default_store,zresult[(0x888+2819-0x1385)],sizeof(para->default_store)-
-(0x12c6+4600-0x24bd));return SQLITE_OK;}}return SQLITE_ERROR;}int 
+zresult[(0xd5+7154-0x1cc7)],sizeof(para->sca)-(0xbb3+5705-0x21fb));para->
+mem_store=atoi(zresult[(0x117b+2214-0x1a20)]);para->tp_validity_period=atoi(
+zresult[(0x261+4136-0x1287)]);para->status_report_on=atoi(zresult[
+(0x1e6f+218-0x1f46)]);para->sendfail_retry_on=atoi(zresult[(0xbb0+821-0xee1)]);
+para->outdate_delete_on=atoi(zresult[(0xbe5+6058-0x238a)]);(void)strncpy(para->
+default_store,zresult[(0xa17+457-0xbda)],sizeof(para->default_store)-
+(0x1181+1448-0x1728));return SQLITE_OK;}}return SQLITE_ERROR;}int 
 zUfiSms_GetDbParameters(void){char*strSQL=
 "\x53\x45\x4c\x45\x43\x54\x20\x53\x6d\x73\x5f\x53\x63\x61\x2c\x4d\x65\x6d\x5f\x53\x74\x6f\x72\x65\x2c\x54\x70\x5f\x56\x61\x6c\x69\x64\x69\x74\x79\x2c\x53\x6d\x73\x5f\x52\x65\x70\x6f\x72\x74\x2c\x53\x65\x6e\x64\x5f\x52\x65\x74\x72\x79\x2c\x4f\x75\x74\x64\x61\x74\x65\x5f\x44\x65\x6c\x65\x74\x65\x2c\x44\x65\x66\x61\x75\x6c\x74\x5f\x53\x74\x6f\x72\x65\x20\x46\x52\x4f\x4d\x20"
  ZTE_WMS_DB_PARAMETER_TABLE"\x3b";memset(&g_zUfiSms_CurSmsPara,
-(0x563+6183-0x1d8a),sizeof(T_zUfiSms_ParaInfo));return isSucess(zUfiSms_ExecSql(
-strSQL,zUfiSms_GetFirstColumnParaInfo,&g_zUfiSms_CurSmsPara));}int 
+(0x1158+2109-0x1995),sizeof(T_zUfiSms_ParaInfo));return isSucess(zUfiSms_ExecSql
+(strSQL,zUfiSms_GetFirstColumnParaInfo,&g_zUfiSms_CurSmsPara));}int 
 zUfiSms_GetSendContent(void*fvarg,int column,char**zresult,char**lname){
-T_zUfiSms_BufInfo*para=(T_zUfiSms_BufInfo*)fvarg;if(column>=(0x17b0+1145-0x1c28)
-&&para!=NULL)(void)strncpy(para->buf_addr,zresult[(0x1165+3953-0x20d6)],para->
-buf_len-(0xab4+3709-0x1930));return(0x6d5+123-0x750);}int zUfiSms_GetSmsContent(
-char*pSmsBuf,int len){T_zUfiSms_BufInfo buf_info={(0x3aa+2758-0xe70)};char*
-strSQL=
+T_zUfiSms_BufInfo*para=(T_zUfiSms_BufInfo*)fvarg;if(column>=(0x669+2319-0xf77)&&
+para!=NULL)(void)strncpy(para->buf_addr,zresult[(0x699+6440-0x1fc1)],para->
+buf_len-(0xd6f+3374-0x1a9c));return(0xa46+4603-0x1c41);}int 
+zUfiSms_GetSmsContent(char*pSmsBuf,int len){T_zUfiSms_BufInfo buf_info={
+(0xd77+6533-0x26fc)};char*strSQL=
 "\x53\x45\x4c\x45\x43\x54\x20\x6d\x73\x67\x5f\x63\x6f\x6e\x74\x65\x6e\x74\x20\x46\x52\x4f\x4d\x20"
  ZTE_WMS_DB_SEND_CONTENT_TABLE"\x3b";buf_info.buf_addr=pSmsBuf;buf_info.buf_len=
-len;memset(buf_info.buf_addr,(0xb39+2721-0x15da),len);return isSucess(
+len;memset(buf_info.buf_addr,(0x1850+3649-0x2691),len);return isSucess(
 zUfiSms_ExecSql(strSQL,zUfiSms_GetSendContent,&buf_info));}int 
 zUfiSms_SearchConcatSmsInDb(T_zUfiSms_DbStoreData*ptDbSaveData,char*pMemStore){
-char*sql=NULL;sqlite3_stmt*stmt=NULL;int id=-(0x4e0+3343-0x11ee);switch(
+char*sql=NULL;sqlite3_stmt*stmt=NULL;int id=-(0x1008+5597-0x25e4);switch(
 ptDbSaveData->tag){case WMS_TAG_TYPE_MO_SENT_V01:case 
 WMS_TAG_TYPE_MO_NOT_SENT_V01:{sql=sqlite3_mprintf(
 "\x53\x45\x4c\x45\x43\x54\x20\x43\x63\x5f\x53\x65\x71\x2c\x69\x64\x20\x46\x52\x4f\x4d\x20\x73\x6d\x73\x20\x57\x48\x45\x52\x45\x20\x4e\x75\x6d\x62\x65\x72\x3d\x27\x25\x71\x27\x20\x41\x4e\x44\x20\x43\x63\x5f\x52\x65\x66\x3d\x27\x25\x64\x27\x20\x41\x4e\x44\x20\x43\x63\x5f\x54\x6f\x74\x61\x6c\x3d\x27\x25\x64\x27\x20\x41\x4e\x44\x20\x4d\x65\x6d\x5f\x53\x74\x6f\x72\x65\x3d\x27\x25\x73\x27\x20\x41\x4e\x44\x20\x28\x54\x61\x67\x20\x3d\x20\x27\x25\x64\x27\x20\x4f\x52\x20\x54\x61\x67\x3d\x20\x27\x25\x64\x27\x29\x3b"
-,ptDbSaveData->number,ptDbSaveData->concat_info[(0x6eb+562-0x91d)],ptDbSaveData
-->concat_info[(0x1f2+4726-0x1467)],pMemStore,WMS_TAG_TYPE_MO_SENT_V01,
-WMS_TAG_TYPE_MO_NOT_SENT_V01);break;}case(0x1519+3733-0x23aa):{sql=
-sqlite3_mprintf(
+,ptDbSaveData->number,ptDbSaveData->concat_info[(0x223+7419-0x1f1e)],
+ptDbSaveData->concat_info[(0x568+4064-0x1547)],pMemStore,
+WMS_TAG_TYPE_MO_SENT_V01,WMS_TAG_TYPE_MO_NOT_SENT_V01);break;}case
+(0xf72+3313-0x1c5f):{sql=sqlite3_mprintf(
 "\x53\x45\x4c\x45\x43\x54\x20\x43\x63\x5f\x53\x65\x71\x2c\x69\x64\x20\x46\x52\x4f\x4d\x20\x73\x6d\x73\x20\x57\x48\x45\x52\x45\x20\x4e\x75\x6d\x62\x65\x72\x3d\x27\x25\x71\x27\x20\x41\x4e\x44\x20\x43\x63\x5f\x52\x65\x66\x3d\x27\x25\x64\x27\x20\x41\x4e\x44\x20\x43\x63\x5f\x54\x6f\x74\x61\x6c\x3d\x27\x25\x64\x27\x20\x41\x4e\x44\x20\x4d\x65\x6d\x5f\x53\x74\x6f\x72\x65\x3d\x27\x25\x73\x27\x20\x41\x4e\x44\x20\x54\x61\x67\x20\x3d\x20\x27\x25\x64\x27\x3b"
-,ptDbSaveData->number,ptDbSaveData->concat_info[(0xf3+6186-0x191d)],ptDbSaveData
-->concat_info[(0x7e8+1462-0xd9d)],pMemStore,(0x1136+2085-0x1957));break;}case 
-WMS_TAG_TYPE_MT_READ_V01:case WMS_TAG_TYPE_MT_NOT_READ_V01:{sql=sqlite3_mprintf(
+,ptDbSaveData->number,ptDbSaveData->concat_info[(0x135+4154-0x116f)],
+ptDbSaveData->concat_info[(0xca7+5367-0x219d)],pMemStore,(0x1bc2+2570-0x25c8));
+break;}case WMS_TAG_TYPE_MT_READ_V01:case WMS_TAG_TYPE_MT_NOT_READ_V01:{sql=
+sqlite3_mprintf(
 "\x53\x45\x4c\x45\x43\x54\x20\x43\x63\x5f\x53\x65\x71\x2c\x69\x64\x20\x46\x52\x4f\x4d\x20\x73\x6d\x73\x20\x57\x48\x45\x52\x45\x20\x4e\x75\x6d\x62\x65\x72\x3d\x27\x25\x71\x27\x20\x41\x4e\x44\x20\x43\x63\x5f\x52\x65\x66\x3d\x27\x25\x64\x27\x20\x41\x4e\x44\x20\x43\x63\x5f\x54\x6f\x74\x61\x6c\x3d\x27\x25\x64\x27\x20\x41\x4e\x44\x20\x4d\x65\x6d\x5f\x53\x74\x6f\x72\x65\x3d\x27\x25\x73\x27\x20\x41\x4e\x44\x20\x28\x54\x61\x67\x20\x3d\x20\x27\x25\x64\x27\x20\x4f\x52\x20\x54\x61\x67\x3d\x20\x27\x25\x64\x27\x29\x3b"
-,ptDbSaveData->number,ptDbSaveData->concat_info[(0xab1+632-0xd29)],ptDbSaveData
-->concat_info[(0x1ccd+2275-0x25af)],pMemStore,WMS_TAG_TYPE_MT_READ_V01,
+,ptDbSaveData->number,ptDbSaveData->concat_info[(0xb8+7529-0x1e21)],ptDbSaveData
+->concat_info[(0x2bf+8893-0x257b)],pMemStore,WMS_TAG_TYPE_MT_READ_V01,
 WMS_TAG_TYPE_MT_NOT_READ_V01);break;}default:{sql=sqlite3_mprintf(
 "\x53\x45\x4c\x45\x43\x54\x20\x43\x63\x5f\x53\x65\x71\x2c\x69\x64\x20\x46\x52\x4f\x4d\x20\x73\x6d\x73\x20\x57\x48\x45\x52\x45\x20\x4e\x75\x6d\x62\x65\x72\x3d\x27\x25\x71\x27\x20\x41\x4e\x44\x20\x43\x63\x5f\x52\x65\x66\x3d\x27\x25\x64\x27\x20\x41\x4e\x44\x20\x43\x63\x5f\x54\x6f\x74\x61\x6c\x3d\x27\x25\x64\x27\x20\x41\x4e\x44\x20\x4d\x65\x6d\x5f\x53\x74\x6f\x72\x65\x3d\x27\x25\x73\x27\x3b"
-,ptDbSaveData->number,ptDbSaveData->concat_info[(0x1041+672-0x12e1)],
-ptDbSaveData->concat_info[(0xd8d+2913-0x18ed)],pMemStore);at_print(LOG_ERR,
+,ptDbSaveData->number,ptDbSaveData->concat_info[(0x33c+2464-0xcdc)],ptDbSaveData
+->concat_info[(0x1741+2709-0x21d5)],pMemStore);at_print(LOG_ERR,
 "\x74\x61\x67\x20\x25\x64\x20\x69\x73\x20\x75\x6e\x6b\x6e\x6f\x77\x6e",
 ptDbSaveData->tag);break;}}printf(
 "\x5b\x53\x4d\x53\x5d\x20\x74\x65\x65\x74\x3a\x25\x73" "\n",sql);if(
-sqlite3_prepare(g_zUfiSms_DbPointer,sql,-(0xf1c+1406-0x1499),&stmt,
-(0x21b0+1156-0x2634))!=SQLITE_OK){at_print(LOG_ERR,
+sqlite3_prepare(g_zUfiSms_DbPointer,sql,-(0x9ef+1983-0x11ad),&stmt,
+(0xa36+963-0xdf9))!=SQLITE_OK){at_print(LOG_ERR,
 "\x63\x61\x6e\x20\x6e\x6f\x74\x20\x65\x78\x65\x63\x20\x73\x71\x6c\x2c\x73\x71\x6c\x69\x74\x65\x33\x5f\x65\x72\x72\x6d\x73\x67\x3a\x25\x73\x2e" "\n"
-,sqlite3_errmsg(g_zUfiSms_DbPointer));sqlite3_free(sql);return-(0x84+2001-0x854)
-;}while(SQLITE_ROW==sqlite3_step(stmt)){int j=(0x460+2268-0xd3c);char**
-out_result=NULL;char*column_text=sqlite3_column_text(stmt,(0xc9b+5646-0x22a9));
-int count=-(0x1472+4481-0x25f2);if(column_text!=NULL)count=zUfiSms_SplitString(
-column_text,&out_result,((char)(0x40+8608-0x21a5)));for(j=(0x702+7530-0x246c);j<
-count;j++){if((0xce9+604-0xf45)==strcmp(out_result[j],"")){if(j+
-(0x19b0+3144-0x25f7)==ptDbSaveData->concat_info[(0x2a8+3257-0xf5f)]){id=
-sqlite3_column_int(stmt,(0x1f1f+522-0x2128));break;}}}if(out_result!=NULL){free(
-out_result);out_result=NULL;}if(-(0x1f64+756-0x2257)!=id){break;}}(void)
-sqlite3_finalize(stmt);sqlite3_free(sql);return id;}int 
+,sqlite3_errmsg(g_zUfiSms_DbPointer));sqlite3_free(sql);return-
+(0x1522+1691-0x1bbc);}while(SQLITE_ROW==sqlite3_step(stmt)){int j=
+(0x553+5990-0x1cb9);char**out_result=NULL;char*column_text=sqlite3_column_text(
+stmt,(0x936+3102-0x1554));int count=-(0x1eb+9209-0x25e3);if(column_text!=NULL)
+count=zUfiSms_SplitString(column_text,&out_result,((char)(0x973+6416-0x2248)));
+for(j=(0x18f9+21-0x190e);j<count;j++){if((0x60a+4839-0x18f1)==strcmp(out_result[
+j],"")){if(j+(0x1900+3416-0x2657)==ptDbSaveData->concat_info[
+(0x1542+4455-0x26a7)]){id=sqlite3_column_int(stmt,(0xbe6+392-0xd6d));break;}}}if
+(out_result!=NULL){free(out_result);out_result=NULL;}if(-(0x1fff+937-0x23a7)!=id
+){break;}}(void)sqlite3_finalize(stmt);sqlite3_free(sql);return id;}int 
 zUfiSms_CheckDbOutdateSms_Callback(void*fvarg,int columns,char**zresult,char**
-lname){if(fvarg!=NULL&&columns>=(0x241b+140-0x24a6)){if(zresult[
-(0x468+726-0x73e)]!=NULL){T_zUfiSms_DelReq*result=(T_zUfiSms_DelReq*)fvarg;
-result->id[result->all_or_count]=atoi(zresult[(0x1522+1249-0x1a03)]);result->
+lname){if(fvarg!=NULL&&columns>=(0x1ed5+1222-0x239a)){if(zresult[
+(0x8e2+4515-0x1a85)]!=NULL){T_zUfiSms_DelReq*result=(T_zUfiSms_DelReq*)fvarg;
+result->id[result->all_or_count]=atoi(zresult[(0x21cf+104-0x2237)]);result->
 all_or_count++;return SQLITE_OK;}}return SQLITE_ERROR;}VOID 
 zUfiSms_CheckDbOutdateSms(const char*pDbTable,T_zUfiSms_DelReq*pSmsDel){char 
-acSql[(0x706+4744-0x190e)]={(0x189a+2835-0x23ad)};struct timeval tp;if(
-(0x6bb+6739-0x210e)!=gettimeofday(&tp,NULL)){printf(
+acSql[(0x1f2b+212-0x1f7f)]={(0x1c52+1622-0x22a8)};struct timeval tp;if(
+(0x1896+1549-0x1ea3)!=gettimeofday(&tp,NULL)){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x67\x65\x74\x74\x69\x6d\x65\x6f\x66\x64\x61\x79\x20\x65\x72\x72\x6f\x72\x21\x21\x21"
 );return;}if(tp.tv_sec<=OUTDATEINTERVAL){return;}snprintf(acSql,sizeof(acSql),
 "\x53\x45\x4c\x45\x43\x54\x20\x69\x64\x20\x46\x52\x4f\x4d\x20\x25\x73\x20\x57\x48\x45\x52\x45\x20\x4d\x6b\x74\x69\x6d\x65\x3c\x27\x25\x75\x27\x20\x41\x4e\x44\x20\x4d\x65\x6d\x5f\x53\x74\x6f\x72\x65\x3d\x27\x25\x73\x27\x3b"
@@ -530,21 +529,21 @@
 "\x6f\x70\x65\x6e\x20\x74\x61\x62\x6c\x65\x20\x25\x73\x20\x66\x61\x69\x6c\x65\x64"
 ,ZTE_WMS_DB_CMD_STATUS_TABLE);}return;}int 
 zUfiSms_GetCurrentRecvTotalSeq_Callback(void*fvarg,int column,char**zresult,char
-**lname){if(fvarg!=NULL&&column>=(0x1813+608-0x1a71)){if(zresult[
-(0x96c+1771-0x1057)]!=NULL&&zresult[(0x1d4+6277-0x1a58)]!=NULL){SMS_MSG_INFO*msg
-=(SMS_MSG_INFO*)fvarg;memset(msg->id,(0x1298+68-0x12dc),sizeof(msg->id));memset(
-msg->total_seq,(0xd43+906-0x10cd),sizeof(msg->total_seq));strncpy(msg->id,
-zresult[(0xc43+4412-0x1d7f)],sizeof(msg->id)-(0xc2+1855-0x800));strncpy(msg->
-total_seq,zresult[(0xb70+267-0xc7a)],sizeof(msg->total_seq)-(0x1538+3718-0x23bd)
-);printf(
+**lname){if(fvarg!=NULL&&column>=(0x9+8617-0x21b0)){if(zresult[(0x247+993-0x628)
+]!=NULL&&zresult[(0xe30+5138-0x2241)]!=NULL){SMS_MSG_INFO*msg=(SMS_MSG_INFO*)
+fvarg;memset(msg->id,(0x1711+390-0x1897),sizeof(msg->id));memset(msg->total_seq,
+(0x6a7+5753-0x1d20),sizeof(msg->total_seq));strncpy(msg->id,zresult[
+(0x1b56+559-0x1d85)],sizeof(msg->id)-(0x1a1c+917-0x1db0));strncpy(msg->total_seq
+,zresult[(0x1f1a+1578-0x2543)],sizeof(msg->total_seq)-(0x950+6411-0x225a));
+printf(
 "\x5b\x53\x4d\x53\x5d\x5b\x74\x72\x61\x66\x66\x69\x63\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x47\x65\x74\x43\x75\x72\x72\x65\x6e\x74\x52\x65\x63\x76\x54\x6f\x74\x61\x6c\x53\x65\x71\x5f\x43\x61\x6c\x6c\x62\x61\x63\x6b\x20\x69\x64\x20\x3d\x20\x25\x73\x2c\x20\x74\x6f\x74\x61\x6c\x5f\x73\x65\x71\x20\x3d\x20\x25\x73" "\n"
 ,msg->id,msg->total_seq);return SQLITE_OK;}}return SQLITE_ERROR;}int 
 zUfiSms_GetCurrentRecvTotalSeq(T_zUfiSms_DbStoreData*ptDbSaveData,SMS_MSG_INFO*
 pmsg){T_zUfiSms_DbResult result=ZTE_WMS_DB_OK;char*strSQL=NULL;strSQL=
 sqlite3_mprintf(
 "\x53\x45\x4c\x45\x43\x54\x20\x69\x64\x2c\x20\x43\x63\x5f\x4e\x75\x6d\x20\x46\x52\x4f\x4d\x20\x73\x6d\x73\x20\x57\x48\x45\x52\x45\x20\x20\x6e\x75\x6d\x62\x65\x72\x3d\x27\x25\x71\x27\x20\x41\x4e\x44\x20\x43\x63\x5f\x52\x65\x66\x3d\x27\x25\x64\x27\x20\x41\x4e\x44\x20\x43\x63\x5f\x54\x6f\x74\x61\x6c\x3d\x27\x25\x64\x27\x3b"
-,ptDbSaveData->number,ptDbSaveData->concat_info[(0x4c2+8002-0x2404)],
-ptDbSaveData->concat_info[(0x7d0+5946-0x1f09)]);printf(
+,ptDbSaveData->number,ptDbSaveData->concat_info[(0x18f8+402-0x1a8a)],
+ptDbSaveData->concat_info[(0x1eff+1930-0x2688)]);printf(
 "\x5b\x53\x4d\x53\x5d\x5b\x74\x72\x61\x66\x66\x69\x63\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x47\x65\x74\x43\x75\x72\x72\x65\x6e\x74\x52\x65\x63\x76\x54\x6f\x74\x61\x6c\x53\x65\x71\x20\x73\x71\x6c\x20\x3a\x20\x25\x73\x20" "\n"
 ,strSQL);result=zUfiSms_ExecSql(strSQL,zUfiSms_GetCurrentRecvTotalSeq_Callback,
 pmsg);sqlite3_free(strSQL);return isSucess(result);}
diff --git a/ap/app/zte_comm/sms/src/sms_fnc.c b/ap/app/zte_comm/sms/src/sms_fnc.c
index 601a832..3929624 100755
--- a/ap/app/zte_comm/sms/src/sms_fnc.c
+++ b/ap/app/zte_comm/sms/src/sms_fnc.c
@@ -8,22 +8,22 @@
 #include "sms_fnc.h"

 #include "sms_db.h"

 #include "sms_code.h"

-#define SMS_RETRY_COUNT (0x848+2671-0x12b4)

-#define SHORT_INT_LEN (0x195f+3131-0x2594)

+#define SMS_RETRY_COUNT (0x967+6001-0x20d5)

+#define SHORT_INT_LEN (0x406+6858-0x1eca)

 SMS_LOCATION g_zUfiSms_CurLocation=SMS_LOCATION_SIM;int 
-g_zUfiSms_ConcatSmsReference=(0x214+8506-0x234e);T_zUfiSms_ParaInfo 
+g_zUfiSms_ConcatSmsReference=(0x170c+1080-0x1b44);T_zUfiSms_ParaInfo 
 g_zUfiSms_CurSmsPara={"",WMS_STORAGE_TYPE_UIM_V01,
-ZTE_WMS_SMS_DEFAULT_TP_VALIDITY_PERIOD_GW,(0xd27+2921-0x1890),
-(0x857+6243-0x20ba),(0x7ef+1448-0xd97),"\x6e\x76"};int g_zUfiSms_Language=
-NOT_DEFINE_LANGUAGE;int g_zUfiSms_Dcs=(0x1346+3940-0x22aa);unsigned long 
-g_zUfiSms_StoreCapablity[ZTE_WMS_MEMORY_MAX]={(0xe29+772-0x10c9),
-ZTE_WMS_DB_MSG_COUNT_MAX};T_zSms_SendSmsReq g_zUfiSms_FinalCmgsBuf;SMS_PARAM 
-g_zUfiSms_SendingSms;UINT16 g_zUfiSms_IsLanguageShift=(0x914+1390-0xe82);extern 
-int g_zUfiSms_MsgRefer;extern T_zUfiSms_DelSms g_zUfiSms_DelMsg;extern 
-T_zUfiSms_DelIndexInfo g_deleteIndex;extern T_zUfiSms_ModifyIndexInfo 
-g_modifyIndex;extern T_zUfiSms_ModifySms g_zUfiSms_modifyMsg;extern UINT8 
-g_zUfiSms_MemFullFlag[ZTE_WMS_MEMORY_MAX];extern int g_zUfiSms_ConcatTotalNum;
-extern T_zUfiSms_ConcatInfo g_zUfiSms_ConcatSms;extern T_zUfiSms_GroupInfo 
+ZTE_WMS_SMS_DEFAULT_TP_VALIDITY_PERIOD_GW,(0x19eb+32-0x1a0b),(0x1ddd+256-0x1edd)
+,(0x1030+4906-0x235a),"\x6e\x76"};int g_zUfiSms_Language=NOT_DEFINE_LANGUAGE;int
+ g_zUfiSms_Dcs=(0x1c5+5169-0x15f6);unsigned long g_zUfiSms_StoreCapablity[
+ZTE_WMS_MEMORY_MAX]={(0x11a2+4387-0x2261),ZTE_WMS_DB_MSG_COUNT_MAX};
+T_zSms_SendSmsReq g_zUfiSms_FinalCmgsBuf;SMS_PARAM g_zUfiSms_SendingSms;UINT16 
+g_zUfiSms_IsLanguageShift=(0x891+2174-0x110f);extern int g_zUfiSms_MsgRefer;
+extern T_zUfiSms_DelSms g_zUfiSms_DelMsg;extern T_zUfiSms_DelIndexInfo 
+g_deleteIndex;extern T_zUfiSms_ModifyIndexInfo g_modifyIndex;extern 
+T_zUfiSms_ModifySms g_zUfiSms_modifyMsg;extern UINT8 g_zUfiSms_MemFullFlag[
+ZTE_WMS_MEMORY_MAX];extern int g_zUfiSms_ConcatTotalNum;extern 
+T_zUfiSms_ConcatInfo g_zUfiSms_ConcatSms;extern T_zUfiSms_GroupInfo 
 g_zUfiSms_GroupSms;extern int g_zUfiSms_UnitLen;extern UINT8 
 g_zUfiSms_IsConcatSendSuc;extern int g_zUfiSms_SendFailedCount;extern 
 T_zUfiSms_DbStoreData g_zUfiSms_DbStoreData[ZTE_WMS_CONCAT_SMS_COUNT_MAX];extern
@@ -31,20 +31,21 @@
 eLocation){switch(eLocation){case SMS_LOCATION_SIM:{g_zUfiSms_CurLocation=
 SMS_LOCATION_SIM;break;}case SMS_LOCATION_ME:{g_zUfiSms_CurLocation=
 SMS_LOCATION_ME;break;}default:{return;}}}int zUfiSms_SetDeleteInfo(
-T_zUfiSms_DelReq*ptDelMsg){char acStorePos[(0x365+3837-0x1230)];int i=
-(0x24a+463-0x419);g_zUfiSms_DelMsg.nv_count=(0x7da+4504-0x1972);g_zUfiSms_DelMsg
-.nv_index=(0x1784+1841-0x1eb5);g_zUfiSms_DelMsg.sim_count=(0xd8b+5964-0x24d7);
-g_zUfiSms_DelMsg.sim_index=(0xb92+479-0xd71);for(i=(0xc49+3357-0x1966);i<
-ptDelMsg->all_or_count;i++){memset(acStorePos,(0x2576+183-0x262d),sizeof(
-acStorePos));if(ZUFI_FAIL==zUfiSms_GetStorePosById("Mem_Store",acStorePos,sizeof
-(acStorePos),ptDelMsg->id[i])){return ZUFI_FAIL;}if((0x11e1+3702-0x2057)==strcmp
-(acStorePos,ZTE_WMS_DB_NV_TABLE)){g_zUfiSms_DelMsg.nv_id[g_zUfiSms_DelMsg.
-nv_count]=ptDelMsg->id[i];g_zUfiSms_DelMsg.nv_count++;g_zUfiSms_DelMsg.
-nv_index_count++;}else if((0x687+6718-0x20c5)==strcmp(acStorePos,
-ZTE_WMS_DB_SIM_TABLE)){g_zUfiSms_DelMsg.sim_id[g_zUfiSms_DelMsg.sim_count]=
-ptDelMsg->id[i];g_zUfiSms_DelMsg.sim_count++;g_zUfiSms_DelMsg.sim_index_count++;
-}}return ZUFI_SUCC;}void zUfiSms_ChangeMainState(T_zUfiSms_MainState iNewState){
-char*ptStrSmsState[]={"\x73\x6d\x73\x5f\x69\x6e\x69\x74\x69\x6e\x67",
+T_zUfiSms_DelReq*ptDelMsg){char acStorePos[(0x1f13+1215-0x23a0)];int i=
+(0x14df+3476-0x2273);g_zUfiSms_DelMsg.nv_count=(0x640+282-0x75a);
+g_zUfiSms_DelMsg.nv_index=(0x635+6705-0x2066);g_zUfiSms_DelMsg.sim_count=
+(0xed6+4236-0x1f62);g_zUfiSms_DelMsg.sim_index=(0x917+7570-0x26a9);for(i=
+(0x2280+50-0x22b2);i<ptDelMsg->all_or_count;i++){memset(acStorePos,
+(0x366+4469-0x14db),sizeof(acStorePos));if(ZUFI_FAIL==zUfiSms_GetStorePosById(
+"Mem_Store",acStorePos,sizeof(acStorePos),ptDelMsg->id[i])){return ZUFI_FAIL;}if
+((0x130c+4861-0x2609)==strcmp(acStorePos,ZTE_WMS_DB_NV_TABLE)){g_zUfiSms_DelMsg.
+nv_id[g_zUfiSms_DelMsg.nv_count]=ptDelMsg->id[i];g_zUfiSms_DelMsg.nv_count++;
+g_zUfiSms_DelMsg.nv_index_count++;}else if((0x10cf+2461-0x1a6c)==strcmp(
+acStorePos,ZTE_WMS_DB_SIM_TABLE)){g_zUfiSms_DelMsg.sim_id[g_zUfiSms_DelMsg.
+sim_count]=ptDelMsg->id[i];g_zUfiSms_DelMsg.sim_count++;g_zUfiSms_DelMsg.
+sim_index_count++;}}return ZUFI_SUCC;}void zUfiSms_ChangeMainState(
+T_zUfiSms_MainState iNewState){char*ptStrSmsState[]={
+"\x73\x6d\x73\x5f\x69\x6e\x69\x74\x69\x6e\x67",
 "\x73\x6d\x73\x5f\x69\x6e\x69\x74\x65\x64",
 "\x73\x6d\x73\x5f\x6c\x6f\x61\x64\x69\x6e\x67",
 "\x73\x6d\x73\x5f\x6c\x6f\x61\x64\x65\x64",
@@ -68,95 +69,96 @@
 SMS_STATE_RECVING:case SMS_STATE_RECVED:case SMS_STATE_DELSAVING:case 
 SMS_STATE_DELSAVED:{break;}default:{return;}}sc_cfg_set(NV_SMS_STATE,
 ptStrSmsState[iNewState]);}int zUfiSms_CheckStoreDir(void){if(-
-(0xd93+2948-0x1916)==access(ZTE_WMS_DB_DIR,F_OK)){printf(
+(0x1690+3658-0x24d9)==access(ZTE_WMS_DB_DIR,F_OK)){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x73\x6d\x73\x3a\x25\x73\x20\x64\x6f\x65\x73\x20\x6e\x6f\x74\x20\x65\x78\x69\x73\x74\x2c\x73\x6f\x63\x72\x65\x61\x74\x65\x20\x69\x74\x2e" "\n"
-,ZTE_WMS_DB_DIR);if(-(0x53a+8335-0x25c8)==mkdir(ZTE_WMS_DB_DIR,
-(0x11d5+3764-0x1e8a))){printf(
+,ZTE_WMS_DB_DIR);if(-(0x2375+642-0x25f6)==mkdir(ZTE_WMS_DB_DIR,
+(0xa81+3837-0x177f))){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x73\x6d\x73\x3a\x66\x61\x69\x6c\x65\x64\x20\x74\x6f\x20\x63\x72\x65\x61\x74\x65\x20\x64\x62\x20\x64\x69\x72\x2e" "\n"
 );return ZUFI_FAIL;}}return ZUFI_SUCC;}int zUfiSms_CheckSmsDb(void){if(-
-(0x88d+3783-0x1753)==access(ZTE_WMS_DB_PATH,F_OK)){printf(
+(0xd39+6066-0x24ea)==access(ZTE_WMS_DB_PATH,F_OK)){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x73\x6d\x73\x3a\x25\x73\x20\x64\x6f\x65\x73\x20\x6e\x6f\x74\x20\x65\x78\x69\x73\x74\x2c\x73\x6f\x20\x67\x65\x74\x20\x64\x65\x66\x61\x75\x6c\x74\x20\x63\x6f\x6e\x66\x69\x67\x2e" "\n"
 ,ZTE_WMS_DB_PATH);return ZUFI_FAIL;}printf(
 "\x5b\x53\x4d\x53\x5d\x20\x3d\x3d\x3d\x3d\x3d\x3d\x25\x73\x20\x65\x78\x69\x73\x74\x2e" "\n"
 ,ZTE_WMS_DB_PATH);return ZUFI_SUCC;}void zUfiSms_GetDefaultCfgPara(void){
-unsigned char sts_flag=(0x29f+6146-0x1aa1);unsigned char mem_store_flag=
-(0x4d9+3438-0x1247);unsigned int tp_validity_period=(0x564+2193-0xdf5);char 
-Temp_sms_vp[(0x538+6713-0x1f69)]={(0x1781+282-0x189b)};CHAR reportEnable[
-(0x102+2365-0xa0d)]={(0x121c+4367-0x232b)};CHAR smsLocation[(0x1eb+8299-0x2224)]
-={(0x153+5967-0x18a2)};CHAR sendfailRetry[(0xb44+4874-0x1e1c)]={
-(0x585+3138-0x11c7)};CHAR outdateDelete[(0xc5a+4757-0x1ebd)]={(0xa66+1189-0xf0b)
-};CHAR defaultStore[(0x1d4d+421-0x1ec0)]={(0x1796+2633-0x21df)};sc_cfg_get(
+unsigned char sts_flag=(0xee7+2-0xee9);unsigned char mem_store_flag=
+(0x289+8400-0x2359);unsigned int tp_validity_period=(0x4f+7664-0x1e3f);char 
+Temp_sms_vp[(0x229+4116-0x1235)]={(0x1304+3736-0x219c)};CHAR reportEnable[
+(0x2c4+1210-0x74c)]={(0x16e1+1724-0x1d9d)};CHAR smsLocation[(0x1274+4790-0x24f8)
+]={(0xc42+6307-0x24e5)};CHAR sendfailRetry[(0x182f+347-0x1958)]={
+(0x53+4682-0x129d)};CHAR outdateDelete[(0x11df+1800-0x18b5)]={(0xea4+451-0x1067)
+};CHAR defaultStore[(0x8a4+1127-0xcd9)]={(0x1492+4262-0x2538)};sc_cfg_get(
 NV_REPORT_ENABLE,reportEnable,sizeof(reportEnable));sc_cfg_get(
 NV_SMS_LOCATION_SET,smsLocation,sizeof(smsLocation));sc_cfg_get(
 NV_SENDFAIL_RETRY,sendfailRetry,sizeof(sendfailRetry));sc_cfg_get(
 NV_OUTDATE_DELETE,outdateDelete,sizeof(outdateDelete));sc_cfg_get(
-NV_DEFAULT_STORE,defaultStore,sizeof(defaultStore));if((0x2323+77-0x2370)==
-strcmp(reportEnable,"\x31")){sts_flag=(0x50a+2409-0xe72);}g_zUfiSms_CurSmsPara.
-status_report_on=sts_flag;if((0x621+6220-0x1e6d)==strcmp(smsLocation,"\x4d\x45")
-){mem_store_flag=(0x1aa+6980-0x1cee);}else{mem_store_flag=(0x4c9+4964-0x182c);}
-g_zUfiSms_CurSmsPara.mem_store=(unsigned int)((0x687+5883-0x1d82)==
+NV_DEFAULT_STORE,defaultStore,sizeof(defaultStore));if((0x1e7a+1889-0x25db)==
+strcmp(reportEnable,"\x31")){sts_flag=(0x1797+216-0x186e);}g_zUfiSms_CurSmsPara.
+status_report_on=sts_flag;if((0x129b+3526-0x2061)==strcmp(smsLocation,"\x4d\x45"
+)){mem_store_flag=(0x134f+864-0x16af);}else{mem_store_flag=(0xb7a+1077-0xfae);}
+g_zUfiSms_CurSmsPara.mem_store=(unsigned int)((0x1809+2084-0x202d)==
 mem_store_flag?WMS_STORAGE_TYPE_NV_V01:WMS_STORAGE_TYPE_UIM_V01);sc_cfg_get(
-NV_SMS_VP,Temp_sms_vp,sizeof(Temp_sms_vp));tp_validity_period=(0x847+247-0x83f);
-if((0x12f3+4393-0x241c)==strncmp(Temp_sms_vp,"\x6c\x6f\x6e\x67\x65\x73\x74",
-(0x80c+5989-0x1f6a))){tp_validity_period=(0x9d3+1528-0xecc);}if(
-(0x507+5640-0x1b0f)==strncmp(Temp_sms_vp,"\x6f\x6e\x65\x5f\x64\x61\x79",
-(0x58f+2471-0xf2f))){tp_validity_period=(0x1105+2139-0x18b9);}if(
-(0x1f2+1753-0x8cb)==strncmp(Temp_sms_vp,"\x6f\x6e\x65\x77\x65\x65\x6b",
-(0x4c2+2558-0xeb9))){tp_validity_period=(0x84d+2847-0x12bf);}if(
-(0x1735+4036-0x26f9)==strncmp(Temp_sms_vp,"\x74\x77\x65\x6c\x76\x65\x68",
-(0x3c+8837-0x22ba))){tp_validity_period=(0xcb6+1523-0x121a);}
-g_zUfiSms_CurSmsPara.tp_validity_period=tp_validity_period;if((0x278+3306-0xf62)
-==strcmp(sendfailRetry,"\x31")){g_zUfiSms_CurSmsPara.sendfail_retry_on=
-(0x1af4+753-0x1de4);}else{g_zUfiSms_CurSmsPara.sendfail_retry_on=
-(0xcb+5070-0x1499);}if((0xf6d+919-0x1304)==strcmp(outdateDelete,"\x31")){
-g_zUfiSms_CurSmsPara.outdate_delete_on=(0xfda+5656-0x25f1);}else{
-g_zUfiSms_CurSmsPara.outdate_delete_on=(0x1c07+863-0x1f66);}if((0x3e2+716-0x6ae)
-==strcmp(defaultStore,"\x73\x69\x6d")){strncpy(g_zUfiSms_CurSmsPara.
-default_store,"\x73\x69\x6d",sizeof(g_zUfiSms_CurSmsPara.default_store)-
-(0x7ab+4090-0x17a4));}else{strncpy(g_zUfiSms_CurSmsPara.default_store,"\x6e\x76"
-,sizeof(g_zUfiSms_CurSmsPara.default_store)-(0x1a88+1336-0x1fbf));}}void 
-zUfiSms_GetDefaultPara(void){memset(&g_zUfiSms_CurSmsPara,(0xa12+4662-0x1c48),
-sizeof(T_zUfiSms_ParaInfo));g_zUfiSms_CurSmsPara.status_report_on=
-(0xc91+1069-0x10be);g_zUfiSms_CurSmsPara.mem_store=WMS_STORAGE_TYPE_NV_V01;
-g_zUfiSms_CurSmsPara.tp_validity_period=
+NV_SMS_VP,Temp_sms_vp,sizeof(Temp_sms_vp));tp_validity_period=
+(0x1a12+1970-0x20c5);if((0x882+2601-0x12ab)==strncmp(Temp_sms_vp,
+"\x6c\x6f\x6e\x67\x65\x73\x74",(0xb4+387-0x230))){tp_validity_period=
+(0x28b+9419-0x2657);}if((0xd8a+6317-0x2637)==strncmp(Temp_sms_vp,
+"\x6f\x6e\x65\x5f\x64\x61\x79",(0x1417+3131-0x204b))){tp_validity_period=
+(0x5a1+5308-0x19b6);}if((0xc50+5106-0x2042)==strncmp(Temp_sms_vp,
+"\x6f\x6e\x65\x77\x65\x65\x6b",(0x10a4+4001-0x203e))){tp_validity_period=
+(0xf38+4594-0x207d);}if((0x215+1179-0x6b0)==strncmp(Temp_sms_vp,
+"\x74\x77\x65\x6c\x76\x65\x68",(0x14+8741-0x2232))){tp_validity_period=
+(0x134f+4783-0x256f);}g_zUfiSms_CurSmsPara.tp_validity_period=tp_validity_period
+;if((0x13f0+4182-0x2446)==strcmp(sendfailRetry,"\x31")){g_zUfiSms_CurSmsPara.
+sendfail_retry_on=(0x12fc+999-0x16e2);}else{g_zUfiSms_CurSmsPara.
+sendfail_retry_on=(0xbad+351-0xd0c);}if((0x1f75+543-0x2194)==strcmp(
+outdateDelete,"\x31")){g_zUfiSms_CurSmsPara.outdate_delete_on=
+(0x1124+1616-0x1773);}else{g_zUfiSms_CurSmsPara.outdate_delete_on=
+(0x7cf+1638-0xe35);}if((0xa49+2456-0x13e1)==strcmp(defaultStore,"\x73\x69\x6d"))
+{strncpy(g_zUfiSms_CurSmsPara.default_store,"\x73\x69\x6d",sizeof(
+g_zUfiSms_CurSmsPara.default_store)-(0x1edf+1927-0x2665));}else{strncpy(
+g_zUfiSms_CurSmsPara.default_store,"\x6e\x76",sizeof(g_zUfiSms_CurSmsPara.
+default_store)-(0xacd+4438-0x1c22));}}void zUfiSms_GetDefaultPara(void){memset(&
+g_zUfiSms_CurSmsPara,(0x333+286-0x451),sizeof(T_zUfiSms_ParaInfo));
+g_zUfiSms_CurSmsPara.status_report_on=(0x230+3687-0x1097);g_zUfiSms_CurSmsPara.
+mem_store=WMS_STORAGE_TYPE_NV_V01;g_zUfiSms_CurSmsPara.tp_validity_period=
 ZTE_WMS_SMS_DEFAULT_TP_VALIDITY_PERIOD_GW;g_zUfiSms_CurSmsPara.sendfail_retry_on
-=(0xa4a+1939-0x11dd);g_zUfiSms_CurSmsPara.outdate_delete_on=(0x6c+448-0x22c);
+=(0x176+1309-0x693);g_zUfiSms_CurSmsPara.outdate_delete_on=(0xd68+4683-0x1fb3);
 strncpy(g_zUfiSms_CurSmsPara.default_store,"\x6e\x76",sizeof(
-g_zUfiSms_CurSmsPara.default_store)-(0x2332+437-0x24e6));}
-#if (0x233+7029-0x1da8)

+g_zUfiSms_CurSmsPara.default_store)-(0x16d1+473-0x18a9));}
+#if (0x1015+2236-0x18d1)

 T_zUfiSms_CmdStatus zUfiSms_SetParameters(T_zUfiSms_CmdMsgBuff*ptSmsBuffer){
 T_zUfiSms_ParaInfo*ptSmsParameter=NULL;T_zUfiSms_ParaInfo tNewSmsParameter={
-(0x772+7650-0x2554)};if(NULL==ptSmsBuffer){return WMS_CMD_FAILED;}ptSmsParameter
-=(T_zUfiSms_ParaInfo*)(&(ptSmsBuffer->cmd_info.set_sms_para));memcpy((void*)&
-tNewSmsParameter,(void*)ptSmsParameter,sizeof(T_zUfiSms_ParaInfo));
+(0x1598+1023-0x1997)};if(NULL==ptSmsBuffer){return WMS_CMD_FAILED;}
+ptSmsParameter=(T_zUfiSms_ParaInfo*)(&(ptSmsBuffer->cmd_info.set_sms_para));
+memcpy((void*)&tNewSmsParameter,(void*)ptSmsParameter,sizeof(T_zUfiSms_ParaInfo)
+);
 #ifndef TSP_MODEL

 if((g_zUfiSms_CurSmsPara.mem_store!=ptSmsParameter->mem_store)){if(
 ZUFI_SMS_FAILURE==zUfiSms_SetCpms(ptSmsParameter)){at_print(LOG_ERR,
 "\x73\x65\x74\x20\x63\x66\x67\x20\x72\x6f\x75\x74\x65\x73\x20\x66\x61\x69\x6c\x65\x64\x2e"
 );return WMS_CMD_FAILED;}}
 #endif

-if(strlen(ptSmsParameter->sca)!=(0x348+5671-0x196f)){if(ZUFI_SMS_FAILURE==
+if(strlen(ptSmsParameter->sca)!=(0x8f1+2095-0x1120)){if(ZUFI_SMS_FAILURE==
 zUfiSms_SetCsca(ptSmsParameter)){return WMS_CMD_FAILED;}}if(ZUFI_SMS_FAILURE==
 zUfiSms_SetDbParameters(ptSmsParameter)){return WMS_CMD_FAILED;}else{sc_cfg_set(
 "\x73\x6d\x73\x5f\x63\x65\x6e\x74\x65\x72\x5f\x6e\x75\x6d",ptSmsParameter->sca);
 }memcpy((void*)&g_zUfiSms_CurSmsPara,(void*)&tNewSmsParameter,sizeof(
 T_zUfiSms_ParaInfo));return WMS_CMD_SUCCESS;}
 #endif

-int zUfiSms_LoadSmsPara(){int count=(0x699+4251-0x1734);if(ZUFI_SUCC!=
+int zUfiSms_LoadSmsPara(){int count=(0x160+2085-0x985);if(ZUFI_SUCC!=
 zUfiSms_IsDbEmpty(ZTE_WMS_DB_PARAMETER_TABLE,&count)){return ZUFI_FAIL;}if(count
-==(0x1b9d+1130-0x2007)){zUfiSms_GetDefaultCfgPara();if((0xe7a+1374-0x13d8)!=
+==(0x7e7+1520-0xdd7)){zUfiSms_GetDefaultCfgPara();if((0x649+3196-0x12c5)!=
 zUfiSms_SetDbParameters(&g_zUfiSms_CurSmsPara)){return ZUFI_FAIL;}}else{printf(
 "\x5b\x53\x4d\x53\x5d\x20\x68\x61\x76\x65\x20\x64\x65\x66\x61\x75\x6c\x74\x20\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x20\x69\x6e\x20\x64\x61\x74\x61\x62\x61\x73\x65\x2e" "\n"
 );if(ZUFI_SUCC!=zUfiSms_GetDbParameters()){return ZUFI_FAIL;}if(
 WMS_STORAGE_TYPE_NV_V01!=g_zUfiSms_CurSmsPara.mem_store&&
 WMS_STORAGE_TYPE_UIM_V01!=g_zUfiSms_CurSmsPara.mem_store){zUfiSms_GetDefaultPara
-();if((0x954+5233-0x1dc5)!=zUfiSms_SetDbParameters(&g_zUfiSms_CurSmsPara)){
+();if((0xc3f+1808-0x134f)!=zUfiSms_SetDbParameters(&g_zUfiSms_CurSmsPara)){
 printf(
 "\x5b\x53\x4d\x53\x5d\x20\x73\x65\x74\x20\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x73\x20\x66\x61\x69\x6c\x73\x20\x32\x2e" "\n"
 );return ZUFI_FAIL;}}}printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x4c\x6f\x61\x64\x53\x6d\x73\x50\x61\x72\x61\x20\x73\x75\x63\x63\x2e" "\n"
 );return ZUFI_SUCC;}int zUfiSms_CheckMemoryFull(T_zUfiSms_MemoryType mem_store){
-int total_count=(0xa81+4652-0x1cad);if((ZTE_WMS_MEMORY_SIM==mem_store)||(
+int total_count=(0x1dc9+564-0x1ffd);if((ZTE_WMS_MEMORY_SIM==mem_store)||(
 ZTE_WMS_MEMORY_MAX==mem_store)){if(ZUFI_FAIL==zUfiSms_GetTotalCount(
 ZTE_WMS_DB_SIM_TABLE,&total_count)){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x73\x6d\x73\x3a\x67\x65\x74\x20\x74\x61\x62\x6c\x65\x20\x74\x6f\x74\x61\x6c\x20\x63\x6f\x75\x6e\x74\x20\x66\x61\x69\x6c\x65\x64\x2e" "\n"
@@ -173,54 +175,54 @@
 ,total_count);if(total_count>=(int)g_zUfiSms_StoreCapablity[
 WMS_STORAGE_TYPE_NV_V01]){g_zUfiSms_MemFullFlag[WMS_STORAGE_TYPE_NV_V01]=TRUE;}
 else{g_zUfiSms_MemFullFlag[WMS_STORAGE_TYPE_NV_V01]=FALSE;}}return ZUFI_SUCC;}
-int zUfiSms_SetStorePara(char*mem_store){if((0x20d+3742-0x10ab)==strcmp(
+int zUfiSms_SetStorePara(char*mem_store){if((0x713+5987-0x1e76)==strcmp(
 mem_store,"\x53\x4d")){g_zUfiSms_CurSmsPara.mem_store=(unsigned int)
 WMS_STORAGE_TYPE_UIM_V01;(void)sc_cfg_set(NV_SMS_LOCATION_SET,"\x30");}else if(
-(0x726+3293-0x1403)==strcmp(mem_store,"\x4d\x45")){g_zUfiSms_CurSmsPara.
-mem_store=(unsigned int)WMS_STORAGE_TYPE_NV_V01;(void)sc_cfg_set(
-NV_SMS_LOCATION_SET,"\x31");}else if((0x83d+5354-0x1d27)==strcmp(mem_store,
-"\x53\x52")){g_zUfiSms_CurSmsPara.mem_store=(unsigned int)(0xaad+3800-0x1983);(
-void)sc_cfg_set(NV_SMS_LOCATION_SET,"\x32");}else{g_zUfiSms_CurSmsPara.mem_store
-=(unsigned int)WMS_STORAGE_TYPE_NONE_V01;(void)sc_cfg_set(NV_SMS_LOCATION_SET,
+(0xeb+7160-0x1ce3)==strcmp(mem_store,"\x4d\x45")){g_zUfiSms_CurSmsPara.mem_store
+=(unsigned int)WMS_STORAGE_TYPE_NV_V01;(void)sc_cfg_set(NV_SMS_LOCATION_SET,
+"\x31");}else if((0xe38+3512-0x1bf0)==strcmp(mem_store,"\x53\x52")){
+g_zUfiSms_CurSmsPara.mem_store=(unsigned int)(0x1efb+1730-0x25bb);(void)
+sc_cfg_set(NV_SMS_LOCATION_SET,"\x32");}else{g_zUfiSms_CurSmsPara.mem_store=(
+unsigned int)WMS_STORAGE_TYPE_NONE_V01;(void)sc_cfg_set(NV_SMS_LOCATION_SET,
 "\x2d\x31");}if(ZUFI_FAIL==zUfiSms_SetDbParameters(&g_zUfiSms_CurSmsPara)){
 at_print(LOG_ERR,
 "\x63\x61\x6e\x20\x6e\x6f\x74\x20\x73\x65\x74\x20\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x73\x2e" "\n"
 );return ZUFI_FAIL;}return ZUFI_SUCC;}int zUfiSms_SetScaPara(char*sca){strncpy(
 g_zUfiSms_CurSmsPara.sca,sca,sizeof(g_zUfiSms_CurSmsPara.sca)-
-(0xa9d+1720-0x1154));if(ZUFI_FAIL==zUfiSms_SetDbParameters(&g_zUfiSms_CurSmsPara
+(0x3d7+5188-0x181a));if(ZUFI_FAIL==zUfiSms_SetDbParameters(&g_zUfiSms_CurSmsPara
 )){at_print(LOG_ERR,
 "\x63\x61\x6e\x20\x6e\x6f\x74\x20\x73\x65\x74\x20\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x73\x2e" "\n"
 );return ZUFI_FAIL;}return ZUFI_SUCC;}void zUfiSms_SetGlobalDcsLang(unsigned 
-char cDcs){if(cDcs==(0x2b+5473-0x158b)){g_zUfiSms_Dcs=DCS_ASC;g_zUfiSms_Language
-=NOT_DEFINE_LANGUAGE;}else if(cDcs==(0x84f+5194-0x1c97)){g_zUfiSms_Dcs=DCS_USC;
-g_zUfiSms_Language=NOT_DEFINE_LANGUAGE;}else if(cDcs==(0x8f+712-0x354)){
-g_zUfiSms_Dcs=DCS_ASC;g_zUfiSms_Language=DCS_GSM7_SPANISH;}else if(cDcs==
-(0x794+7993-0x26c8)){g_zUfiSms_Dcs=DCS_ASC;g_zUfiSms_Language=
+char cDcs){if(cDcs==(0xb24+2047-0x1322)){g_zUfiSms_Dcs=DCS_ASC;
+g_zUfiSms_Language=NOT_DEFINE_LANGUAGE;}else if(cDcs==(0xc14+3608-0x1a2a)){
+g_zUfiSms_Dcs=DCS_USC;g_zUfiSms_Language=NOT_DEFINE_LANGUAGE;}else if(cDcs==
+(0x1a62+165-0x1b04)){g_zUfiSms_Dcs=DCS_ASC;g_zUfiSms_Language=DCS_GSM7_SPANISH;}
+else if(cDcs==(0x147c+1999-0x1c46)){g_zUfiSms_Dcs=DCS_ASC;g_zUfiSms_Language=
 DCS_GSM7_PORTUGUESE;}else{g_zUfiSms_Dcs=DCS_ASC;g_zUfiSms_Language=
 DCS_GSM7_DEFAULT;}}int zUfiSms_FillGroupSms(T_zUfiSms_SendReq*ptSendMsg,
 T_zUfiSms_GroupInfo*ptGroupSms){int i;if(NULL==ptSendMsg||NULL==ptGroupSms||
 ZTE_WMS_SEND_NUM_MAX<ptSendMsg->receiver_count){return ZUFI_FAIL;}ptGroupSms->
-total_receiver=ptSendMsg->receiver_count;for(i=(0x42d+4300-0x14f9);i<ptGroupSms
-->total_receiver;i++){strncpy(ptGroupSms->receivers[i],ptSendMsg->dest_num[i],
+total_receiver=ptSendMsg->receiver_count;for(i=(0x2d9+1133-0x746);i<ptGroupSms->
+total_receiver;i++){strncpy(ptGroupSms->receivers[i],ptSendMsg->dest_num[i],
 ZTE_WMS_ADDRESS_LEN_MAX);printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x46\x69\x6c\x6c\x47\x72\x6f\x75\x70\x53\x6d\x73\x20\x72\x65\x63\x65\x69\x76\x65\x72\x73\x5b\x25\x64\x5d\x3d\x25\x73" "\n"
-,i,ptGroupSms->receivers[i]);}ptGroupSms->current_receiver=(0x2d2+5782-0x1968);
+,i,ptGroupSms->receivers[i]);}ptGroupSms->current_receiver=(0x327+7448-0x203f);
 return ZUFI_SUCC;}int zUfiSms_FillConcatSms(T_zUfiSms_SendReq*pSendSrcMsg,
-T_zUfiSms_ConcatInfo*pDestConcatMsg){int iTotalLen=(0x271+2405-0xbd6);int 
-iUnitlen=(0x1656+3808-0x2536);int iSegNo=(0x2308+944-0x26b8);unsigned char*
+T_zUfiSms_ConcatInfo*pDestConcatMsg){int iTotalLen=(0x3fa+7654-0x21e0);int 
+iUnitlen=(0x705+6107-0x1ee0);int iSegNo=(0x1cda+2485-0x268f);unsigned char*
 pSmsConverted=NULL;unsigned char acConvertContent[
-ZTE_WMS_SMS_MSG_CONTENT_LEN_MAX*ZTE_WMS_CONCAT_SMS_COUNT_MAX*(0x1dd+2171-0xa54)+
-(0x3e2+7120-0x1fae)]={(0x6ac+2884-0x11f0)};unsigned char acTmpContent[
 ZTE_WMS_SMS_MSG_CONTENT_LEN_MAX*ZTE_WMS_CONCAT_SMS_COUNT_MAX*
-(0x1199+2617-0x1bce)+(0x89b+7220-0x24cb)]={(0x17d4+1587-0x1e07)};int iTimeZone=
-(0x348+3171-0xfab);int tmp_i=(0x1704+1582-0x1d32);if(NULL==pSendSrcMsg||NULL==
-pDestConcatMsg){return-(0xabd+6127-0x22ab);}iTotalLen=pSendSrcMsg->msg_len;if(
+(0x145f+3594-0x2265)+(0x587+766-0x881)]={(0x1721+370-0x1893)};unsigned char 
+acTmpContent[ZTE_WMS_SMS_MSG_CONTENT_LEN_MAX*ZTE_WMS_CONCAT_SMS_COUNT_MAX*
+(0x122+6436-0x1a42)+(0x1cac+1563-0x22c3)]={(0x13f4+4148-0x2428)};int iTimeZone=
+(0x1bd0+30-0x1bee);int tmp_i=(0x1c03+2026-0x23ed);if(NULL==pSendSrcMsg||NULL==
+pDestConcatMsg){return-(0x1bd8+2035-0x23ca);}iTotalLen=pSendSrcMsg->msg_len;if(
 ZUFI_FAIL==zUfiSms_GetSmsContent(acTmpContent,sizeof(acTmpContent))){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x47\x65\x74\x53\x6d\x73\x43\x6f\x6e\x74\x65\x6e\x74\x20\x46\x61\x69\x6c\x2e" "\n"
-);return-(0xff+1947-0x899);}printf(
+);return-(0x1e81+1483-0x244b);}printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x47\x65\x74\x53\x6d\x73\x43\x6f\x6e\x74\x65\x6e\x74\x3a\x25\x73\x2e" "\n"
 ,acTmpContent);(void)String2Bytes(acTmpContent,acConvertContent,(int)strlen(
-acTmpContent));memset(acTmpContent,(0x2392+525-0x259f),sizeof(acTmpContent));if(
+acTmpContent));memset(acTmpContent,(0xd7c+3862-0x1c92),sizeof(acTmpContent));if(
 DCS_USC==g_zUfiSms_Dcs){pSmsConverted=acConvertContent;}else{if(
 NOT_DEFINE_LANGUAGE==g_zUfiSms_Language){iTotalLen=
 zUfiSms_ConvertAsciiToGsmDefault(acConvertContent,acTmpContent,pSendSrcMsg->
@@ -230,96 +232,96 @@
 zUfiSms_ConvertUcs2ToPortuguese(acConvertContent,acTmpContent,pSendSrcMsg->
 msg_len);}else{iTotalLen=zUfiSms_ConvertUcs2ToGsmDefault(acConvertContent,
 acTmpContent,pSendSrcMsg->msg_len);}pSendSrcMsg->msg_len=iTotalLen;pSmsConverted
-=acTmpContent;}if(iTotalLen>(sizeof(acConvertContent)-(0x122b+3666-0x207c))){
-iTotalLen=sizeof(acConvertContent)-(0x9d7+4475-0x1b51);}pDestConcatMsg->sms_len=
-iTotalLen;if((iTotalLen>ZTE_WMS_SMS_MSG_CONTENT_LEN_MAX)||(g_zUfiSms_Language==
-DCS_PORTUGUESE&&iTotalLen>(0x1dd+789-0x457))||((g_zUfiSms_Dcs==DCS_USC)&&
+=acTmpContent;}if(iTotalLen>(sizeof(acConvertContent)-(0x1671+985-0x1a49))){
+iTotalLen=sizeof(acConvertContent)-(0x1750+2679-0x21c6);}pDestConcatMsg->sms_len
+=iTotalLen;if((iTotalLen>ZTE_WMS_SMS_MSG_CONTENT_LEN_MAX)||(g_zUfiSms_Language==
+DCS_PORTUGUESE&&iTotalLen>(0x8d1+7791-0x26a5))||((g_zUfiSms_Dcs==DCS_USC)&&
 iTotalLen>ZTE_WMS_SMS_MSG_CHAR_MAX)){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x3d\x3d\x3d\x3d\x3d\x73\x65\x6e\x64\x20\x63\x6f\x6e\x74\x61\x63\x74\x20\x73\x6d\x73\x2e" "\n"
 );if(g_zUfiSms_Dcs==DCS_USC){iUnitlen=ZTE_WMS_SMS_CONCAT_ELEMNT_UCS_LEN*
-(0x2661+46-0x268d);}else{if(g_zUfiSms_Language==NOT_DEFINE_LANGUAGE||
+(0x994+881-0xd03);}else{if(g_zUfiSms_Language==NOT_DEFINE_LANGUAGE||
 g_zUfiSms_Language==DCS_GSM7_DEFAULT){iUnitlen=ZTE_WMS_SMS_CONCAT_ELEMNT_ASC_LEN
 ;}else{iUnitlen=ZTE_WMS_SMS_CONCAT_ELEMNT_LANGUAGE_LEN;}}while(iTotalLen>
-(0x1db1+1567-0x23d0)&&iSegNo<ZTE_WMS_CONCAT_SMS_COUNT_MAX){memcpy(pDestConcatMsg
+(0x2111+671-0x23b0)&&iSegNo<ZTE_WMS_CONCAT_SMS_COUNT_MAX){memcpy(pDestConcatMsg
 ->msg_contents[iSegNo],pSmsConverted,iUnitlen);iTotalLen-=iUnitlen;pSmsConverted
 +=iUnitlen;iSegNo++;}pDestConcatMsg->total_msg=iSegNo;}else{iUnitlen=iTotalLen;
-pDestConcatMsg->total_msg=(0x1013+1486-0x15e0);memcpy(pDestConcatMsg->
-msg_contents[(0x1024+1999-0x17f3)],pSmsConverted,iTotalLen);printf(
+pDestConcatMsg->total_msg=(0x156a+2624-0x1fa9);memcpy(pDestConcatMsg->
+msg_contents[(0x15c0+4188-0x261c)],pSmsConverted,iTotalLen);printf(
 "\x5b\x53\x4d\x53\x5d\x20\x3d\x3d\x3d\x3d\x3d\x73\x65\x6e\x64\x20\x6e\x6f\x72\x6d\x61\x6c\x20\x73\x6d\x73\x2e\x6c\x65\x6e\x3a\x25\x64\x2e\x63\x6f\x6e\x74\x65\x6e\x74\x3a\x25\x73\x2e" "\n"
-,iUnitlen,pDestConcatMsg->msg_contents[(0x1e45+286-0x1f63)]);}
+,iUnitlen,pDestConcatMsg->msg_contents[(0x128a+3857-0x219b)]);}
 g_zUfiSms_ConcatTotalNum=pDestConcatMsg->total_msg;pDestConcatMsg->
-current_sending=(0x87b+4812-0x1b47);memcpy(&(pDestConcatMsg->date),&(pSendSrcMsg
+current_sending=(0x3e4+6088-0x1bac);memcpy(&(pDestConcatMsg->date),&(pSendSrcMsg
 ->date),sizeof(T_zUfiSms_Date));tmp_i=atoi(pDestConcatMsg->date.timezone);if(
-tmp_i<INT_MIN+(0x9dc+7454-0x26f9)||tmp_i>INT_MAX-(0x121a+3524-0x1fdd)){printf(
+tmp_i<INT_MIN+(0xdd9+3336-0x1ae0)||tmp_i>INT_MAX-(0x11ad+586-0x13f6)){printf(
 "\x75\x6e\x6b\x6e\x6f\x77\x6e\x20\x70\x44\x65\x73\x74\x43\x6f\x6e\x63\x61\x74\x4d\x73\x67\x20\x74\x69\x6d\x65\x7a\x6f\x6e\x65\x3a\x25\x64\x2e" "\n"
-,tmp_i);return ZUFI_FAIL;}iTimeZone=tmp_i*(0x1133+3269-0x1df4);memset(
-pDestConcatMsg->date.timezone,(0x5e6+4776-0x188e),sizeof(pDestConcatMsg->date.
-timezone));if(iTimeZone>(0x1a98+1419-0x2023)){snprintf(pDestConcatMsg->date.
+,tmp_i);return ZUFI_FAIL;}iTimeZone=tmp_i*(0x920+2275-0x11ff);memset(
+pDestConcatMsg->date.timezone,(0x1e0+3621-0x1005),sizeof(pDestConcatMsg->date.
+timezone));if(iTimeZone>(0x237d+758-0x2673)){snprintf(pDestConcatMsg->date.
 timezone,sizeof(pDestConcatMsg->date.timezone),"\x2b\x25\x64",iTimeZone);}else{
 snprintf(pDestConcatMsg->date.timezone,sizeof(pDestConcatMsg->date.timezone),
 "\x25\x64",iTimeZone);}pSmsConverted=NULL;return iUnitlen;}void 
 zUfiSms_FillDateheader(T_zUfiSms_SubmitTpdu*ptSubmit,T_zUfiSms_ConcatInfo*
 ptConcatSms,T_zUfiSms_DbStoreData*ptDbSaveData){unsigned char iHeaderNum=
-(0x139a+199-0x1461);iHeaderNum=ptSubmit->user_data.num_headers;ptSubmit->
-user_data_header_present=TRUE;if((0x1cab+349-0x1e08)==ptConcatSms->
+(0x962+3114-0x158c);iHeaderNum=ptSubmit->user_data.num_headers;ptSubmit->
+user_data_header_present=TRUE;if((0x215f+948-0x2513)==ptConcatSms->
 current_sending){g_zUfiSms_ConcatSmsReference++;(void)zUfiSms_SetConcatMaxRefer(
 g_zUfiSms_ConcatSmsReference);}ptSubmit->user_data.headers[iHeaderNum].header_id
 =WMS_UDH_CONCAT_8;ptSubmit->user_data.headers[iHeaderNum].u.concat_8.total_sm=
 ptConcatSms->total_msg;ptSubmit->user_data.headers[iHeaderNum].u.concat_8.
-seq_num=ptConcatSms->current_sending+(0x17cf+3100-0x23ea);ptSubmit->user_data.
+seq_num=ptConcatSms->current_sending+(0x32a+320-0x469);ptSubmit->user_data.
 headers[iHeaderNum].u.concat_8.msg_ref=g_zUfiSms_ConcatSmsReference%
-(0x1443+3134-0x1f82);ptSubmit->user_data.num_headers++;ptDbSaveData->concat_sms=
-(0xc2c+473-0xe04);ptDbSaveData->concat_info[(0x11ef+1669-0x1874)]=
+(0x101+7667-0x1df5);ptSubmit->user_data.num_headers++;ptDbSaveData->concat_sms=
+(0x529+8309-0x259d);ptDbSaveData->concat_info[(0xd10+1828-0x1434)]=
 g_zUfiSms_ConcatSmsReference;}int zUfiSms_MakeFinalCmgsBuf(){SMS_PARAM tSmsData;
-int iPduLength=(0x9b4+3937-0x1915);int nSmscLength=(0x502+1572-0xb26);char 
-Tempstrr[(0x2247+835-0x2588)]={(0xcb4+4285-0x1d71)};char Temp_sms_vp[
-(0x1bc6+2643-0x2611)]={(0xd00+73-0xd49)};char tmpBuf1[(0x12eb+3684-0x214c)]={
-(0x532+4949-0x1887)};char tmpBuf2[(0x126d+338-0x13b9)]={(0x98b+4947-0x1cde)};
-CHAR smsCenter[(0x14a5+39-0x149a)]={(0x5bf+994-0x9a1)};memset(&tSmsData,
-(0x159+3606-0xf6f),sizeof(SMS_PARAM));memset(&g_zUfiSms_FinalCmgsBuf,
-(0xcf+748-0x3bb),sizeof(T_zSms_SendSmsReq));if(CODE_GSM7==g_zUfiSms_SendingSms.
-TP_DCS){int i=(0x23b0+228-0x2494);for(;i<g_zUfiSms_SendingSms.TP_UDLength;i++){
-tSmsData.TP_UD[i]=g_zUfiSms_SendingSms.TP_UD[i];}tSmsData.TP_UDLength=
-g_zUfiSms_SendingSms.TP_UDLength;}else{snprintf(tSmsData.TP_UD,sizeof(tSmsData.
-TP_UD),"\x25\x73",g_zUfiSms_SendingSms.TP_UD);tSmsData.TP_UDLength=strlen(
-tSmsData.TP_UD);}sc_cfg_get(NV_SMS_CENTER_NUM,smsCenter,sizeof(smsCenter));
-snprintf(tSmsData.SCA,sizeof(tSmsData.SCA),"\x25\x73",smsCenter);snprintf(
-tSmsData.TPA,sizeof(tSmsData.TPA),"\x25\x73",g_zUfiSms_SendingSms.TPA);tSmsData.
-TP_DCS=g_zUfiSms_SendingSms.TP_DCS;sc_cfg_get(NV_REPORT_ENABLE,Tempstrr,sizeof(
-Tempstrr));if(((0x161d+2267-0x1ef8)==strncmp(Tempstrr,"\x31",
-(0x15df+3275-0x22a9)))&&(g_zUfiSms_ConcatSms.current_sending==
-g_zUfiSms_ConcatSms.total_msg-(0x34+3678-0xe91))){tSmsData.TP_SRR=
-(0x1e1f+1626-0x2478);}else{tSmsData.TP_SRR=(0x117c+1783-0x1873);}tSmsData.
-TP_UDHI=g_zUfiSms_SendingSms.TP_UDHI;tSmsData.TP_VP=(0xe72+6314-0x261d);
-sc_cfg_get(NV_SMS_VP,Temp_sms_vp,sizeof(Temp_sms_vp));if((0x21b2+313-0x22eb)==
-strncmp(Temp_sms_vp,"\x6c\x6f\x6e\x67\x65\x73\x74",(0xeb1+601-0x1103))){tSmsData
-.TP_VP=(0x163a+3730-0x23cd);}else if((0x350+6943-0x1e6f)==strncmp(Temp_sms_vp,
-"\x6f\x6e\x65\x5f\x64\x61\x79",(0x150b+4105-0x250d))){tSmsData.TP_VP=
-(0x5a1+7047-0x2081);}else if((0x4f6+7354-0x21b0)==strncmp(Temp_sms_vp,
-"\x6f\x6e\x65\x77\x65\x65\x6b",(0x120+6862-0x1be7))){tSmsData.TP_VP=
-(0x8bb+1612-0xe5a);}else if((0x1378+2216-0x1c20)==strncmp(Temp_sms_vp,
-"\x74\x77\x65\x6c\x76\x65\x68",(0x15b3+4321-0x268d))){tSmsData.TP_VP=
-(0x919+7191-0x24a1);}tSmsData.TP_PID=(0xb47+2576-0x1557);
-#if (0xb35+6294-0x23ca)
+int iPduLength=(0x1686+2480-0x2036);int nSmscLength=(0xb41+606-0xd9f);char 
+Tempstrr[(0x345+4385-0x1464)]={(0x751+6939-0x226c)};char Temp_sms_vp[
+(0x18a0+170-0x1942)]={(0x386+3462-0x110c)};char tmpBuf1[(0x1864+3591-0x2668)]={
+(0x21e3+567-0x241a)};char tmpBuf2[(0x819+5675-0x1e3e)]={(0x1160+1485-0x172d)};
+CHAR smsCenter[(0x1678+1291-0x1b51)]={(0x19dc+589-0x1c29)};memset(&tSmsData,
+(0x8b2+4642-0x1ad4),sizeof(SMS_PARAM));memset(&g_zUfiSms_FinalCmgsBuf,
+(0xe14+1210-0x12ce),sizeof(T_zSms_SendSmsReq));if(CODE_GSM7==
+g_zUfiSms_SendingSms.TP_DCS){int i=(0x127+6901-0x1c1c);for(;i<
+g_zUfiSms_SendingSms.TP_UDLength;i++){tSmsData.TP_UD[i]=g_zUfiSms_SendingSms.
+TP_UD[i];}tSmsData.TP_UDLength=g_zUfiSms_SendingSms.TP_UDLength;}else{snprintf(
+tSmsData.TP_UD,sizeof(tSmsData.TP_UD),"\x25\x73",g_zUfiSms_SendingSms.TP_UD);
+tSmsData.TP_UDLength=strlen(tSmsData.TP_UD);}sc_cfg_get(NV_SMS_CENTER_NUM,
+smsCenter,sizeof(smsCenter));snprintf(tSmsData.SCA,sizeof(tSmsData.SCA),
+"\x25\x73",smsCenter);snprintf(tSmsData.TPA,sizeof(tSmsData.TPA),"\x25\x73",
+g_zUfiSms_SendingSms.TPA);tSmsData.TP_DCS=g_zUfiSms_SendingSms.TP_DCS;sc_cfg_get
+(NV_REPORT_ENABLE,Tempstrr,sizeof(Tempstrr));if(((0x16a9+2818-0x21ab)==strncmp(
+Tempstrr,"\x31",(0x7f2+299-0x91c)))&&(g_zUfiSms_ConcatSms.current_sending==
+g_zUfiSms_ConcatSms.total_msg-(0x101a+3446-0x1d8f))){tSmsData.TP_SRR=
+(0xdf9+2881-0x1939);}else{tSmsData.TP_SRR=(0x205a+1353-0x25a3);}tSmsData.TP_UDHI
+=g_zUfiSms_SendingSms.TP_UDHI;tSmsData.TP_VP=(0x1827+1581-0x1d55);sc_cfg_get(
+NV_SMS_VP,Temp_sms_vp,sizeof(Temp_sms_vp));if((0x73+2036-0x867)==strncmp(
+Temp_sms_vp,"\x6c\x6f\x6e\x67\x65\x73\x74",(0xbf+1171-0x54b))){tSmsData.TP_VP=
+(0x5f2+4830-0x17d1);}else if((0xde5+1642-0x144f)==strncmp(Temp_sms_vp,
+"\x6f\x6e\x65\x5f\x64\x61\x79",(0x557+3570-0x1342))){tSmsData.TP_VP=
+(0x16b7+926-0x19ae);}else if((0x72b+1901-0xe98)==strncmp(Temp_sms_vp,
+"\x6f\x6e\x65\x77\x65\x65\x6b",(0xd71+4900-0x208e))){tSmsData.TP_VP=
+(0x1891+122-0x185e);}else if((0xb13+4550-0x1cd9)==strncmp(Temp_sms_vp,
+"\x74\x77\x65\x6c\x76\x65\x68",(0x9b8+616-0xc19))){tSmsData.TP_VP=
+(0x1e32+577-0x1fe4);}tSmsData.TP_PID=(0x1412+3419-0x216d);
+#if (0xde3+2093-0x160f)
 printf(
 "\x5b\x53\x4d\x53\x63\x6f\x72\x65\x6d\x5d\x62\x65\x67\x69\x6e\x3a\x25\x73" "\n",
 g_zUfiSms_FinalCmgsBuf.pdu);
 #endif    
 iPduLength=EncodePdu_Submit(&tSmsData,g_zUfiSms_FinalCmgsBuf.pdu);
-#if (0x1db4+164-0x1e57)
+#if (0x155d+1976-0x1d14)
 printf(
 "\x5b\x53\x4d\x53\x63\x6f\x72\x65\x6d\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x4d\x61\x6b\x65\x46\x69\x6e\x61\x6c\x43\x6d\x67\x73\x42\x75\x66\x20\x6d\x61\x6b\x65\x20\x70\x64\x75\x20\x64\x61\x74\x61" "\n"
 );printf("\x5b\x53\x4d\x53\x63\x6f\x72\x65\x6d\x5d\x25\x73" "\n",
 g_zUfiSms_FinalCmgsBuf.pdu);
 #endif

-(void)String2Bytes(g_zUfiSms_FinalCmgsBuf.pdu,tmpBuf1,(0x766+6656-0x2164));
+(void)String2Bytes(g_zUfiSms_FinalCmgsBuf.pdu,tmpBuf1,(0x22bd+781-0x25c8));
 Bytes2String(tmpBuf1,tmpBuf2,strlen(tmpBuf1));nSmscLength=atoi(tmpBuf2);if(
-nSmscLength<(0x1717+43-0x1742)||nSmscLength>INT_MAX-(0x207d+718-0x234a)){
+nSmscLength<(0x141c+3820-0x2308)||nSmscLength>INT_MAX-(0x123d+46-0x126a)){
 at_print(LOG_ERR,
 "\x5b\x53\x4d\x53\x5d\x6e\x53\x6d\x73\x63\x4c\x65\x6e\x67\x74\x68\x20\x65\x72\x72\x3a\x25\x64" "\n"
-,nSmscLength);nSmscLength=(0x16af+92-0x170b);;}nSmscLength++;
-g_zUfiSms_FinalCmgsBuf.length=iPduLength/(0x1548+2328-0x1e5e)-nSmscLength;
-#if (0x12e2+4638-0x24ff)
+,nSmscLength);nSmscLength=(0xcda+4961-0x203b);;}nSmscLength++;
+g_zUfiSms_FinalCmgsBuf.length=iPduLength/(0xf4b+5780-0x25dd)-nSmscLength;
+#if (0xe29+570-0x1062)
 printf(
 "\x5b\x53\x4d\x53\x63\x6f\x72\x65\x6d\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x4d\x61\x6b\x65\x46\x69\x6e\x61\x6c\x43\x6d\x67\x73\x42\x75\x66\x20\x6d\x61\x6b\x65\x20\x65\x6e\x64\x20\x70\x64\x75\x20\x64\x61\x74\x61" "\n"
 );printf(
@@ -329,22 +331,22 @@
 return ZUFI_SUCC;}int zUfiSms_FillSubmitTpdu(T_zUfiSms_ConcatInfo*ptConcatSms,
 T_zUfiSms_GroupInfo*ptGroupSms,int iSmsLen,T_zUfiSms_SubmitTpdu*ptSubmit,
 T_zUfiSms_DbStoreData*ptDbSaveData){if(NULL==ptSubmit||NULL==ptConcatSms||NULL==
-ptGroupSms||NULL==ptDbSaveData){return-(0x159f+3268-0x2262);}ptSubmit->
+ptGroupSms||NULL==ptDbSaveData){return-(0x1eed+1480-0x24b4);}ptSubmit->
 reject_duplicates=FALSE;ptSubmit->reply_path_present=FALSE;ptSubmit->
 user_data_header_present=FALSE;ptSubmit->status_report_enabled=
-g_zUfiSms_CurSmsPara.status_report_on;if(((0x475+8439-0x256b)<ptConcatSms->
-total_msg)&&(ptConcatSms->current_sending+(0x9a9+2261-0x127d)<ptConcatSms->
-total_msg)){ptSubmit->status_report_enabled=(0x1393+706-0x1655);}ptSubmit->
+g_zUfiSms_CurSmsPara.status_report_on;if(((0x730+1929-0xeb8)<ptConcatSms->
+total_msg)&&(ptConcatSms->current_sending+(0x243+5005-0x15cf)<ptConcatSms->
+total_msg)){ptSubmit->status_report_enabled=(0x7b2+6758-0x2218);}ptSubmit->
 message_reference=g_zUfiSms_MsgRefer;ptSubmit->pid=WMS_PID_DEFAULT;ptSubmit->dcs
-.msg_class=(wms_message_class_e_type)(0x216+6111-0x19f1);ptSubmit->dcs.
-is_compressed=(0x97c+6288-0x220c);ptSubmit->dcs.alphabet=(g_zUfiSms_Dcs==DCS_ASC
-)?WMS_GW_ALPHABET_7_BIT_DEFAULT:WMS_GW_ALPHABET_UCS2;ptSubmit->validity.format=
-WMS_GW_VALIDITY_RELATIVE;zUfiSms_DecodeRelativeTime(g_zUfiSms_CurSmsPara.
+.msg_class=(wms_message_class_e_type)(0x233d+432-0x24e9);ptSubmit->dcs.
+is_compressed=(0x1bb1+2337-0x24d2);ptSubmit->dcs.alphabet=(g_zUfiSms_Dcs==
+DCS_ASC)?WMS_GW_ALPHABET_7_BIT_DEFAULT:WMS_GW_ALPHABET_UCS2;ptSubmit->validity.
+format=WMS_GW_VALIDITY_RELATIVE;zUfiSms_DecodeRelativeTime(g_zUfiSms_CurSmsPara.
 tp_validity_period,&ptSubmit->validity.u.time);ptSubmit->user_data.num_headers=
-(0x3d8+1735-0xa9f);if(ptConcatSms->total_msg>(0x373+1617-0x9c3)){
+(0x782+248-0x87a);if(ptConcatSms->total_msg>(0x1ee5+994-0x22c6)){
 zUfiSms_FillDateheader(ptSubmit,ptConcatSms,ptDbSaveData);ptDbSaveData->
-concat_info[(0x180d+1231-0x1cda)]=ptConcatSms->current_sending+
-(0x1b2+2811-0xcac);ptDbSaveData->concat_info[(0x18cd+91-0x1927)]=ptConcatSms->
+concat_info[(0xd2a+1752-0x1400)]=ptConcatSms->current_sending+
+(0x4a6+6534-0x1e2b);ptDbSaveData->concat_info[(0xf04+5660-0x251f)]=ptConcatSms->
 total_msg;}if(g_zUfiSms_Language==DCS_PORTUGUESE){UINT8 i=ptSubmit->user_data.
 num_headers;ptSubmit->user_data_header_present=TRUE;ptSubmit->user_data.headers[
 i].header_id=WMS_UDH_NAT_LANG_SS;ptSubmit->user_data.headers[ptSubmit->user_data
@@ -352,52 +354,51 @@
 user_data.num_headers++;g_zUfiSms_IsLanguageShift=WMS_UDH_NAT_LANG_SS;}ptSubmit
 ->user_data.sm_len=iSmsLen;memcpy(ptSubmit->user_data.sm_data,ptConcatSms->
 msg_contents[ptConcatSms->current_sending],iSmsLen);if(ptGroupSms->receivers[
-ptGroupSms->current_receiver][(0x1b2f+2394-0x2489)]==((char)(0x6d5+5164-0x1ad6))
-){(void)zUfiSms_CharToInt(ptGroupSms->receivers[ptGroupSms->current_receiver]+
-(0xed6+4498-0x2067),strlen(ptGroupSms->receivers[ptGroupSms->current_receiver])-
-(0x21a3+220-0x227e),ptSubmit->address.digits);ptSubmit->address.number_type=
+ptGroupSms->current_receiver][(0x76d+7410-0x245f)]==((char)(0x95a+6672-0x233f)))
+{(void)zUfiSms_CharToInt(ptGroupSms->receivers[ptGroupSms->current_receiver]+
+(0x14d1+1036-0x18dc),strlen(ptGroupSms->receivers[ptGroupSms->current_receiver])
+-(0x54b+2074-0xd64),ptSubmit->address.digits);ptSubmit->address.number_type=
 WMS_NUMBER_INTERNATIONAL;ptSubmit->address.number_of_digits=strlen(ptGroupSms->
-receivers[ptGroupSms->current_receiver])-(0x6af+2308-0xfb2);}else if(ptGroupSms
-->receivers[ptGroupSms->current_receiver][(0xb8b+267-0xc96)]==
-((char)(0xec+6699-0x1ae7))&&ptGroupSms->receivers[ptGroupSms->current_receiver][
-(0x4ea+8571-0x2664)]==((char)(0x130f+3761-0x2190))){(void)zUfiSms_CharToInt(
-ptGroupSms->receivers[ptGroupSms->current_receiver]+(0x1cb+9310-0x2627),strlen(
-ptGroupSms->receivers[ptGroupSms->current_receiver])-(0x476+8605-0x2611),
+receivers[ptGroupSms->current_receiver])-(0x10f+3108-0xd32);}else if(ptGroupSms
+->receivers[ptGroupSms->current_receiver][(0x214+4741-0x1499)]==
+((char)(0x2a9+4758-0x150f))&&ptGroupSms->receivers[ptGroupSms->current_receiver]
+[(0x8d6+3116-0x1501)]==((char)(0xb4c+2417-0x148d))){(void)zUfiSms_CharToInt(
+ptGroupSms->receivers[ptGroupSms->current_receiver]+(0x1922+42-0x194a),strlen(
+ptGroupSms->receivers[ptGroupSms->current_receiver])-(0x23cf+742-0x26b3),
 ptSubmit->address.digits);ptSubmit->address.number_type=WMS_NUMBER_INTERNATIONAL
 ;ptSubmit->address.number_of_digits=strlen(ptGroupSms->receivers[ptGroupSms->
-current_receiver])-(0x709+7999-0x2646);}else{(void)zUfiSms_CharToInt(ptGroupSms
-->receivers[ptGroupSms->current_receiver],strlen(ptGroupSms->receivers[
-ptGroupSms->current_receiver]),ptSubmit->address.digits);ptSubmit->address.
-number_type=WMS_NUMBER_UNKNOWN;ptSubmit->address.number_of_digits=strlen(
-ptGroupSms->receivers[ptGroupSms->current_receiver]);}ptSubmit->address.
-digit_mode=(wms_digit_mode_e_type)(0xdbc+3145-0x1a05);ptSubmit->address.
-number_mode=(wms_number_mode_e_type)(0xded+204-0xeb9);ptSubmit->address.
-number_plan=WMS_NUMBER_PLAN_TELEPHONY;memset(&g_zUfiSms_SendingSms,
-(0x275+8872-0x251d),sizeof(SMS_PARAM));snprintf(g_zUfiSms_SendingSms.TPA,sizeof(
-g_zUfiSms_SendingSms.TPA),"\x25\x73",ptGroupSms->receivers[ptGroupSms->
-current_receiver]);if(g_zUfiSms_Language!=NOT_DEFINE_LANGUAGE){
-g_zUfiSms_SendingSms.TP_DCS=CODE_GSM7;}else{if(g_zUfiSms_Dcs==DCS_USC){
-g_zUfiSms_SendingSms.TP_DCS=CODE_UCS2;}else{g_zUfiSms_SendingSms.TP_DCS=
-CODE_GSM8;}}if(g_zUfiSms_SendingSms.TP_DCS==CODE_GSM7){
-zUfiSms_FillGlobalTpudGsm7(ptSubmit,ptConcatSms,ptDbSaveData);}else{
+current_receiver])-(0x41b+3011-0xfdc);}else{(void)zUfiSms_CharToInt(ptGroupSms->
+receivers[ptGroupSms->current_receiver],strlen(ptGroupSms->receivers[ptGroupSms
+->current_receiver]),ptSubmit->address.digits);ptSubmit->address.number_type=
+WMS_NUMBER_UNKNOWN;ptSubmit->address.number_of_digits=strlen(ptGroupSms->
+receivers[ptGroupSms->current_receiver]);}ptSubmit->address.digit_mode=(
+wms_digit_mode_e_type)(0xd21+3528-0x1ae9);ptSubmit->address.number_mode=(
+wms_number_mode_e_type)(0x794+1961-0xf3d);ptSubmit->address.number_plan=
+WMS_NUMBER_PLAN_TELEPHONY;memset(&g_zUfiSms_SendingSms,(0xafa+1545-0x1103),
+sizeof(SMS_PARAM));snprintf(g_zUfiSms_SendingSms.TPA,sizeof(g_zUfiSms_SendingSms
+.TPA),"\x25\x73",ptGroupSms->receivers[ptGroupSms->current_receiver]);if(
+g_zUfiSms_Language!=NOT_DEFINE_LANGUAGE){g_zUfiSms_SendingSms.TP_DCS=CODE_GSM7;}
+else{if(g_zUfiSms_Dcs==DCS_USC){g_zUfiSms_SendingSms.TP_DCS=CODE_UCS2;}else{
+g_zUfiSms_SendingSms.TP_DCS=CODE_GSM8;}}if(g_zUfiSms_SendingSms.TP_DCS==
+CODE_GSM7){zUfiSms_FillGlobalTpudGsm7(ptSubmit,ptConcatSms,ptDbSaveData);}else{
 zUfiSms_FillGlobalTpudUcs2(ptSubmit,ptConcatSms,ptDbSaveData);}(void)
 zUfiSms_MakeFinalCmgsBuf();return ZUFI_SUCC;}void zUfiSms_FillSca(
 T_zUfiSms_ClientMsg*ptClientMsg){char sca[ZTE_WMS_SCA_LEN_MAX]={
-(0x1205+3336-0x1f0d)};int i=(0x4b3+6624-0x1e93);if(NULL==ptClientMsg){return;}
+(0x1643+331-0x178e)};int i=(0x1e69+1644-0x24d5);if(NULL==ptClientMsg){return;}
 memcpy((void*)sca,(void*)(g_zUfiSms_CurSmsPara.sca),sizeof(g_zUfiSms_CurSmsPara.
-sca));if(sca[(0x458+7716-0x227c)]==((char)(0x388+445-0x51a))){ptClientMsg->u.
-gw_message.sc_address.number_type=WMS_NUMBER_INTERNATIONAL;}ptClientMsg->u.
+sca));if(sca[(0x10cb+3799-0x1fa2)]==((char)(0x1373+1128-0x17b0))){ptClientMsg->u
+.gw_message.sc_address.number_type=WMS_NUMBER_INTERNATIONAL;}ptClientMsg->u.
 gw_message.sc_address.digit_mode=WMS_DIGIT_MODE_8_BIT;ptClientMsg->u.gw_message.
 sc_address.number_plan=WMS_NUMBER_PLAN_TELEPHONY;ptClientMsg->u.gw_message.
-sc_address.number_of_digits=strlen(sca);if(sca[(0x73b+7234-0x237d)]==
-((char)(0xc73+2892-0x1794))){ptClientMsg->u.gw_message.sc_address.
-number_of_digits--;for(i=(0x17c0+3486-0x255e);i<ptClientMsg->u.gw_message.
-sc_address.number_of_digits;i++){sca[i]=sca[i+(0x1671+51-0x16a3)];}}else if(sca[
-(0x1b08+770-0x1e0a)]==((char)(0x1807+283-0x18f2))&&sca[(0xa24+2694-0x14a9)]==
-((char)(0xb4c+2058-0x1326))){ptClientMsg->u.gw_message.sc_address.
-number_of_digits-=(0x10f5+3242-0x1d9d);for(i=(0x10f+1043-0x522);i<ptClientMsg->u
-.gw_message.sc_address.number_of_digits;i++){sca[i]=sca[i+(0x1025+5336-0x24fb)];
-}}(void)zUfiSms_CharToInt(sca,ptClientMsg->u.gw_message.sc_address.
+sc_address.number_of_digits=strlen(sca);if(sca[(0x873+830-0xbb1)]==
+((char)(0x9b1+850-0xcd8))){ptClientMsg->u.gw_message.sc_address.number_of_digits
+--;for(i=(0x1505+185-0x15be);i<ptClientMsg->u.gw_message.sc_address.
+number_of_digits;i++){sca[i]=sca[i+(0xd6f+580-0xfb2)];}}else if(sca[
+(0x4e1+6070-0x1c97)]==((char)(0x166d+1006-0x1a2b))&&sca[(0xe46+5715-0x2498)]==
+((char)(0x605+6902-0x20cb))){ptClientMsg->u.gw_message.sc_address.
+number_of_digits-=(0x287+5116-0x1681);for(i=(0x11d+5996-0x1889);i<ptClientMsg->u
+.gw_message.sc_address.number_of_digits;i++){sca[i]=sca[i+(0x9b7+1238-0xe8b)];}}
+(void)zUfiSms_CharToInt(sca,ptClientMsg->u.gw_message.sc_address.
 number_of_digits,ptClientMsg->u.gw_message.sc_address.digits);}void 
 zUfiSms_FillDbSaveData(T_zUfiSms_ClientMsg*ptClientMsg,T_zUfiSms_ClientTsData*
 ptClientData,T_zUfiSms_ConcatInfo*ptConcatSms,T_zUfiSms_GroupInfo*ptGroupSms,int
@@ -407,12 +408,12 @@
 }ptDbSaveData->mem_store=ptClientMsg->msg_hdr.mem_store;ptDbSaveData->index=
 ptClientMsg->msg_hdr.index;ptDbSaveData->mode=ptClientMsg->msg_hdr.message_mode;
 ptDbSaveData->tag=ptClientMsg->msg_hdr.tag;memset(ptDbSaveData->number,
-(0x21b+732-0x4f7),ZTE_WMS_ADDRESS_LEN_MAX+(0xda3+4738-0x2024));memcpy(
+(0x1d07+1210-0x21c1),ZTE_WMS_ADDRESS_LEN_MAX+(0xe9c+2975-0x1a3a));memcpy(
 ptDbSaveData->number,ptGroupSms->receivers[ptGroupSms->current_receiver],strlen(
 ptGroupSms->receivers[ptGroupSms->current_receiver]));ptDbSaveData->tp_dcs=
 DCS_USC;ptDbSaveData->tp_pid=ptClientData->u.gw_pp.u.submit.pid;ptDbSaveData->
 msg_ref=ptClientData->u.gw_pp.u.submit.message_reference;memset(ptDbSaveData->
-sms_content,(0x11bc+4824-0x2494),sizeof(ptDbSaveData->sms_content));if(
+sms_content,(0x112a+4226-0x21ac),sizeof(ptDbSaveData->sms_content));if(
 g_zUfiSms_Dcs==DCS_USC){ptDbSaveData->alphabet=WMS_GW_ALPHABET_UCS2;}else if(
 g_zUfiSms_Dcs==DCS_ASC){ptDbSaveData->alphabet=WMS_GW_ALPHABET_7_BIT_DEFAULT;}(
 void)zUfiSms_DispatchWtoi(ptConcatSms->msg_contents[ptConcatSms->current_sending
@@ -423,7 +424,7 @@
 ptDbSaveData){T_zUfiSms_ClientTsData tClientTsData;ptClientMsg->msg_hdr.
 mem_store=WMS_MEMORY_STORE_NV_GW;ptClientMsg->msg_hdr.tag=WMS_TAG_MO_NOT_SENT;
 ptClientMsg->msg_hdr.message_mode=WMS_MESSAGE_MODE_GW;ptClientMsg->u.gw_message.
-is_broadcast=FALSE;memset((void*)&tClientTsData,(0x625+5835-0x1cf0),sizeof(
+is_broadcast=FALSE;memset((void*)&tClientTsData,(0x22bd+701-0x257a),sizeof(
 wms_client_ts_data_s_type));tClientTsData.format=WMS_FORMAT_GW_PP;tClientTsData.
 u.gw_pp.tpdu_type=WMS_TPDU_SUBMIT;(void)zUfiSms_FillSubmitTpdu(&
 g_zUfiSms_ConcatSms,&g_zUfiSms_GroupSms,g_zUfiSms_UnitLen,&tClientTsData.u.gw_pp
@@ -432,94 +433,95 @@
 ptClientMsg,&tClientTsData,&g_zUfiSms_ConcatSms,&g_zUfiSms_GroupSms,
 g_zUfiSms_UnitLen,ptDbSaveData);}int zUfiSms_StoreNormalSmsToDb(
 T_zUfiSms_DbStoreData*ptDbSaveData,const char*pMemStore,long iSmsId){int result=
-ZUFI_SUCC;char*pContent=NULL;int iTotalCount=(0x24f5+319-0x2634);pContent=(char*
-)malloc((0x19a+7431-0x1e9d)*ZTE_WMS_SMS_MSG_CONTENT_STORE_LEN_MAX);if(pContent==
-NULL){return ZUFI_FAIL;}memset(pContent,(0x9a9+182-0xa5f),(0x1423+385-0x15a0)*
-ZTE_WMS_SMS_MSG_CONTENT_STORE_LEN_MAX);if(WMS_GW_ALPHABET_7_BIT_DEFAULT==
-ptDbSaveData->alphabet){static char data[(0x1287+70-0x12c9)*
-ZTE_WMS_SMS_MSG_CONTENT_LEN_MAX+(0x5a2+4243-0x1634)]={(0xcd8+6672-0x26e8)};
-memset(data,(0xa6a+3641-0x18a3),(0x9d7+6945-0x24f4)*
-ZTE_WMS_SMS_MSG_CONTENT_LEN_MAX+(0x1e13+358-0x1f78));(void)zUfiSms_DecodeContent
-((char*)ptDbSaveData->sms_content,strlen(ptDbSaveData->sms_content),FALSE,data);
-strncpy(pContent,data,(0x1cb9+2054-0x24bb)*ZTE_WMS_SMS_MSG_CONTENT_STORE_LEN_MAX
--(0x724+6832-0x21d3));}else{strncpy(pContent,ptDbSaveData->sms_content,
-(0xa28+2313-0x132d)*ZTE_WMS_SMS_MSG_CONTENT_STORE_LEN_MAX-(0x1532+2064-0x1d41));
-}ptDbSaveData->tp_dcs=(unsigned char)(0xe2d+4152-0x1e63);if(-(0x766+5653-0x1d7a)
-==iSmsId){if(ZUFI_FAIL==zUfiSms_GetTotalCount(pMemStore,&iTotalCount)){free(
-pContent);pContent=NULL;return ZUFI_FAIL;}printf(
+ZUFI_SUCC;char*pContent=NULL;int iTotalCount=(0xefc+5121-0x22fd);pContent=(char*
+)malloc((0x177b+450-0x1939)*ZTE_WMS_SMS_MSG_CONTENT_STORE_LEN_MAX);if(pContent==
+NULL){return ZUFI_FAIL;}memset(pContent,(0x54c+4304-0x161c),(0x1420+2952-0x1fa4)
+*ZTE_WMS_SMS_MSG_CONTENT_STORE_LEN_MAX);if(WMS_GW_ALPHABET_7_BIT_DEFAULT==
+ptDbSaveData->alphabet){static char data[(0x12e2+1843-0x1a11)*
+ZTE_WMS_SMS_MSG_CONTENT_LEN_MAX+(0x32b+5253-0x17af)]={(0xa8d+6445-0x23ba)};
+memset(data,(0xdc6+2614-0x17fc),(0x5ed+1311-0xb08)*
+ZTE_WMS_SMS_MSG_CONTENT_LEN_MAX+(0x1770+2508-0x213b));(void)
+zUfiSms_DecodeContent((char*)ptDbSaveData->sms_content,strlen(ptDbSaveData->
+sms_content),FALSE,data);strncpy(pContent,data,(0x1eb6+450-0x2074)*
+ZTE_WMS_SMS_MSG_CONTENT_STORE_LEN_MAX-(0xfb0+1509-0x1594));}else{strncpy(
+pContent,ptDbSaveData->sms_content,(0x245+1980-0x9fd)*
+ZTE_WMS_SMS_MSG_CONTENT_STORE_LEN_MAX-(0x596+3741-0x1432));}ptDbSaveData->tp_dcs
+=(unsigned char)(0xe24+6363-0x26fd);if(-(0x1222+3237-0x1ec6)==iSmsId){if(
+ZUFI_FAIL==zUfiSms_GetTotalCount(pMemStore,&iTotalCount)){free(pContent);
+pContent=NULL;return ZUFI_FAIL;}printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x53\x74\x6f\x72\x65\x4e\x6f\x72\x6d\x61\x6c\x53\x6d\x73\x54\x6f\x44\x62\x20\x69\x54\x6f\x74\x61\x6c\x43\x6f\x75\x6e\x74\x3d\x25\x64" "\n"
 ,iTotalCount);if(iTotalCount>=g_zUfiSms_StoreCapablity[(strcmp(pMemStore,
 "\x6e\x76")?ZTE_WMS_MEMORY_SIM:ZTE_WMS_MEMORY_NV)]){free(pContent);pContent=NULL
-;return-(0x230+588-0x47b);}if(ZUFI_FAIL==zUfiSms_InsertNormalSmsToDb(
+;return-(0x1786+3707-0x2600);}if(ZUFI_FAIL==zUfiSms_InsertNormalSmsToDb(
 ptDbSaveData,pMemStore,pContent)){result=ZUFI_FAIL;}}else{if(ZUFI_FAIL==
 zUfiSms_UpdateNormalSmsToDb(ptDbSaveData,pMemStore,pContent,iSmsId)){result=
 ZUFI_FAIL;}}free(pContent);pContent=NULL;return result;}static int 
 zUfiSms_ConcatDataFree(T_zUfiSms_DbStoreData*ptDbSaveData,int count,char**
-out_result){int i=(0x13d0+4311-0x24a7);for(i=(0x606+200-0x6ce);i<count;i++){if(
-ptDbSaveData->concat_info[(0x198b+719-0x1c58)]==i+(0x148+8810-0x23b1)){free(
-out_result[i]);out_result[i]=NULL;break;}}return(0x1097+2178-0x1919);}int 
+out_result){int i=(0x1441+680-0x16e9);for(i=(0x1f2a+1754-0x2604);i<count;i++){if
+(ptDbSaveData->concat_info[(0x5e0+647-0x865)]==i+(0x15c9+1536-0x1bc8)){free(
+out_result[i]);out_result[i]=NULL;break;}}return(0x4cf+2530-0xeb1);}int 
 zUfiSms_AddNewSmsToConcatData(T_zUfiSms_DbStoreData*ptDbSaveData,char*
 pOldContent,char*pFormatNewContent,char*pRealNewContent,T_zUfiSms_DbStoreStr*pac
-,int*pConcatTotalNum,int len){int count=(0x6b4+7083-0x225f);char**out_result=
-NULL;char cSegChar=((char)(0x41c+5797-0x1a86));int i=(0x73+801-0x394);int 
-iTotalSegNum=(0x137c+3046-0x1f62);char acContentSeg[(0x35+3680-0xe93)*
-ZTE_WMS_SMS_MSG_CONTENT_STORE_LEN_MAX*ZTE_WMS_SMS_COUNT_MAX]={(0xdf+8512-0x221f)
-};char*pCurConPos=acContentSeg;boolean isEsc=FALSE;if(NULL==pOldContent){return-
-(0xbe2+3458-0x1963);}count=zUfiSms_SplitString(pOldContent,&out_result,cSegChar)
-;for(i=(0x226a+536-0x2482);i<count;i++){if(ptDbSaveData->concat_info[
-(0x6d3+1466-0xc8b)]==i+(0x4cf+5196-0x191a)){out_result[i]=(char*)malloc(sizeof(
-ptDbSaveData->sms_content));memset(out_result[i],(0x90b+1169-0xd9c),sizeof(
+,int*pConcatTotalNum,int len){int count=(0x835+388-0x9b9);char**out_result=NULL;
+char cSegChar=((char)(0x55a+7799-0x2396));int i=(0x1182+3903-0x20c1);int 
+iTotalSegNum=(0xe94+6212-0x26d8);char acContentSeg[(0x19b2+1572-0x1fd4)*
+ZTE_WMS_SMS_MSG_CONTENT_STORE_LEN_MAX*ZTE_WMS_SMS_COUNT_MAX]={(0x575+88-0x5cd)};
+char*pCurConPos=acContentSeg;boolean isEsc=FALSE;if(NULL==pOldContent){return-
+(0x235+1448-0x7dc);}count=zUfiSms_SplitString(pOldContent,&out_result,cSegChar);
+for(i=(0x15b0+2598-0x1fd6);i<count;i++){if(ptDbSaveData->concat_info[
+(0x1086+2691-0x1b07)]==i+(0x12dd+812-0x1608)){out_result[i]=(char*)malloc(sizeof
+(ptDbSaveData->sms_content));memset(out_result[i],(0xbc0+1765-0x12a5),sizeof(
 ptDbSaveData->sms_content));if(WMS_GW_ALPHABET_7_BIT_DEFAULT==ptDbSaveData->
 alphabet){isEsc=zUfiSms_DecodeContent(ptDbSaveData->sms_content,strlen(
 ptDbSaveData->sms_content),isEsc,out_result[i]);}else{strncpy(out_result[i],
-ptDbSaveData->sms_content,sizeof(ptDbSaveData->sms_content)-(0x725+7054-0x22b2))
-;}break;}}for(i=(0x9a4+639-0xc23);i<count;i++){snprintf(acContentSeg+strlen(
+ptDbSaveData->sms_content,sizeof(ptDbSaveData->sms_content)-(0x1612+489-0x17fa))
+;}break;}}for(i=(0x93+4151-0x10ca);i<count;i++){snprintf(acContentSeg+strlen(
 acContentSeg),sizeof(acContentSeg)-strlen(acContentSeg),"\x25\x73",out_result[i]
-);strcat(pFormatNewContent,out_result[i]);if(i!=count-(0x10ac+2681-0x1b24)){
-strcat(pFormatNewContent,"\x3b");}}strncpy(pRealNewContent,acContentSeg,len);
+);strcat(pFormatNewContent,out_result[i]);if(i!=count-(0x5cd+1443-0xb6f)){strcat
+(pFormatNewContent,"\x3b");}}strncpy(pRealNewContent,acContentSeg,len);
 zUfiSms_ConcatDataFree(ptDbSaveData,count,out_result);free(out_result);
 out_result=NULL;count=zUfiSms_SplitString(pac->IndStr,&out_result,cSegChar);for(
-i=(0xb58+2630-0x159e);i<count;i++){if(ptDbSaveData->concat_info[
-(0x396+6287-0x1c23)]==i+(0xb90+2117-0x13d4)){out_result[i]=(char*)malloc(
-SHORT_INT_LEN);memset(out_result[i],(0x125f+1609-0x18a8),SHORT_INT_LEN);snprintf
-(out_result[i],SHORT_INT_LEN,"\x25\x64",ptDbSaveData->index);break;}}for(i=
-(0x1fe7+297-0x2110);i<count;i++){snprintf(pac->FormatInd+strlen(pac->FormatInd),
+i=(0x23a7+73-0x23f0);i<count;i++){if(ptDbSaveData->concat_info[
+(0x81c+2740-0x12ce)]==i+(0xee5+6173-0x2701)){out_result[i]=(char*)malloc(
+SHORT_INT_LEN);memset(out_result[i],(0xd9+5464-0x1631),SHORT_INT_LEN);snprintf(
+out_result[i],SHORT_INT_LEN,"\x25\x64",ptDbSaveData->index);break;}}for(i=
+(0xc87+665-0xf20);i<count;i++){snprintf(pac->FormatInd+strlen(pac->FormatInd),
 sizeof(pac->FormatInd)-strlen(pac->FormatInd),"\x25\x73",out_result[i]);if(i!=
-count-(0xb2a+315-0xc64)){snprintf(pac->FormatInd+strlen(pac->FormatInd),sizeof(
-pac->FormatInd)-strlen(pac->FormatInd),"\x3b");}}zUfiSms_ConcatDataFree(
+count-(0x157d+2935-0x20f3)){snprintf(pac->FormatInd+strlen(pac->FormatInd),
+sizeof(pac->FormatInd)-strlen(pac->FormatInd),"\x3b");}}zUfiSms_ConcatDataFree(
 ptDbSaveData,count,out_result);free(out_result);out_result=NULL;count=
-zUfiSms_SplitString(pac->Seg_Seq,&out_result,cSegChar);for(i=
-(0x18f3+2071-0x210a);i<count;i++){if(ptDbSaveData->concat_info[
-(0x17cd+145-0x185c)]==i+(0x14a8+226-0x1589)){out_result[i]=(char*)malloc(
-SHORT_INT_LEN);memset(out_result[i],(0xd6f+2867-0x18a2),SHORT_INT_LEN);snprintf(
-out_result[i],SHORT_INT_LEN,"\x25\x64",ptDbSaveData->concat_info[
-(0xb0f+3075-0x1710)]);break;}}for(i=(0x18d+132-0x211);i<count;i++){snprintf(pac
-->FormatSeq+strlen(pac->FormatSeq),sizeof(pac->FormatSeq)-strlen(pac->FormatSeq)
-,"\x25\x73",out_result[i]);if(i!=count-(0x57+4882-0x1368)){snprintf(pac->
-FormatSeq+strlen(pac->FormatSeq),sizeof(pac->FormatSeq)-strlen(pac->FormatSeq),
-"\x3b");}if((0x158b+3595-0x2396)!=strcmp(out_result[i],"")){iTotalSegNum++;}}*
-pConcatTotalNum=iTotalSegNum;zUfiSms_ConcatDataFree(ptDbSaveData,count,
-out_result);free(out_result);out_result=NULL;return(0x1603+3929-0x255c);}int 
+zUfiSms_SplitString(pac->Seg_Seq,&out_result,cSegChar);for(i=(0x193+6363-0x1a6e)
+;i<count;i++){if(ptDbSaveData->concat_info[(0xcf1+5428-0x2223)]==i+
+(0x1a6b+687-0x1d19)){out_result[i]=(char*)malloc(SHORT_INT_LEN);memset(
+out_result[i],(0x7ca+4512-0x196a),SHORT_INT_LEN);snprintf(out_result[i],
+SHORT_INT_LEN,"\x25\x64",ptDbSaveData->concat_info[(0x1e67+2147-0x26c8)]);break;
+}}for(i=(0xfda+1877-0x172f);i<count;i++){snprintf(pac->FormatSeq+strlen(pac->
+FormatSeq),sizeof(pac->FormatSeq)-strlen(pac->FormatSeq),"\x25\x73",out_result[i
+]);if(i!=count-(0x1062+1919-0x17e0)){snprintf(pac->FormatSeq+strlen(pac->
+FormatSeq),sizeof(pac->FormatSeq)-strlen(pac->FormatSeq),"\x3b");}if(
+(0xc67+5249-0x20e8)!=strcmp(out_result[i],"")){iTotalSegNum++;}}*pConcatTotalNum
+=iTotalSegNum;zUfiSms_ConcatDataFree(ptDbSaveData,count,out_result);free(
+out_result);out_result=NULL;return(0x17f7+953-0x1bb0);}int 
 zUfiSms_UpdateConcatSms(T_zUfiSms_DbStoreData*ptDbSaveData,const char*pStorePos,
-long iSmsId){T_zUfiSms_DbStoreStr ac={(0xb5b+2834-0x166d)};char*pOldContent=NULL
+long iSmsId){T_zUfiSms_DbStoreStr ac={(0xa6a+7281-0x26db)};char*pOldContent=NULL
 ;char*pFormatNewContent=NULL;char*pRealNewContent=NULL;int iTotalNum=
-(0x29b+729-0x574);int result=ZUFI_SUCC;int spaceLen=(0xcac+2929-0x1819)*
-ZTE_WMS_SMS_MSG_CONTENT_LEN_MAX*ZTE_WMS_CONCAT_SMS_COUNT_MAX+(0xd74+5947-0x24ab)
-;pOldContent=(char*)malloc(spaceLen);pFormatNewContent=(char*)malloc(spaceLen);
-pRealNewContent=(char*)malloc(spaceLen);if(pOldContent==NULL||pFormatNewContent
-==NULL||pRealNewContent==NULL){if(pOldContent)free(pOldContent);if(
-pFormatNewContent)free(pFormatNewContent);if(pRealNewContent)free(
-pRealNewContent);return ZUFI_FAIL;}memset(pRealNewContent,(0xab3+482-0xc95),
-spaceLen);memset(pOldContent,(0x246+1077-0x67b),spaceLen);memset(
-pFormatNewContent,(0x27d+8943-0x256c),spaceLen);(void)zUfiSms_GetConcatInfo(
-pStorePos,iSmsId,&ac,pOldContent,spaceLen);printf(
+(0x49f+95-0x4fe);int result=ZUFI_SUCC;int spaceLen=(0x1bd2+1395-0x2141)*
+ZTE_WMS_SMS_MSG_CONTENT_LEN_MAX*ZTE_WMS_CONCAT_SMS_COUNT_MAX+
+(0x13df+1940-0x1b6f);pOldContent=(char*)malloc(spaceLen);pFormatNewContent=(char
+*)malloc(spaceLen);pRealNewContent=(char*)malloc(spaceLen);if(pOldContent==NULL
+||pFormatNewContent==NULL||pRealNewContent==NULL){if(pOldContent)free(
+pOldContent);if(pFormatNewContent)free(pFormatNewContent);if(pRealNewContent)
+free(pRealNewContent);return ZUFI_FAIL;}memset(pRealNewContent,
+(0x520+2241-0xde1),spaceLen);memset(pOldContent,(0x470+3020-0x103c),spaceLen);
+memset(pFormatNewContent,(0x485+3768-0x133d),spaceLen);(void)
+zUfiSms_GetConcatInfo(pStorePos,iSmsId,&ac,pOldContent,spaceLen);printf(
 "\x5b\x53\x4d\x53\x5d\x20\x74\x65\x65\x74\x20\x2d\x30\x20\x49\x6e\x64\x53\x74\x72\x3a\x25\x73\x2c\x53\x65\x67\x5f\x53\x65\x71\x3a\x25\x73\x2c\x46\x6f\x72\x6d\x61\x74\x49\x6e\x64\x3a\x25\x73\x2c\x46\x6f\x72\x6d\x61\x74\x53\x65\x71\x3a\x25\x73" "\n"
-,ac.IndStr,ac.Seg_Seq,ac.FormatInd,ac.FormatSeq);if(-(0x511+3834-0x140a)==
+,ac.IndStr,ac.Seg_Seq,ac.FormatInd,ac.FormatSeq);if(-(0xcc3+6204-0x24fe)==
 zUfiSms_AddNewSmsToConcatData(ptDbSaveData,pOldContent,pFormatNewContent,
 pRealNewContent,&ac,&iTotalNum,spaceLen)){result=ZUFI_FAIL;}printf(
 "\x5b\x53\x4d\x53\x5d\x20\x74\x65\x65\x74\x20\x30\x20\x49\x6e\x64\x53\x74\x72\x3a\x25\x73\x2c\x53\x65\x67\x5f\x53\x65\x71\x3a\x25\x73\x2c\x46\x6f\x72\x6d\x61\x74\x49\x6e\x64\x3a\x25\x73\x2c\x46\x6f\x72\x6d\x61\x74\x53\x65\x71\x3a\x25\x73" "\n"
 ,ac.IndStr,ac.Seg_Seq,ac.FormatInd,ac.FormatSeq);ptDbSaveData->tp_dcs=
-(0x766+2196-0xff8);if(ZUFI_FAIL==zUfiSms_UpdateConcatSmsToDb(ptDbSaveData,
+(0x4fd+3958-0x1471);if(ZUFI_FAIL==zUfiSms_UpdateConcatSmsToDb(ptDbSaveData,
 pStorePos,pFormatNewContent,pRealNewContent,&ac,iTotalNum,iSmsId)){result=
 ZUFI_FAIL;}printf(
 "\x5b\x53\x4d\x53\x5d\x20\x74\x65\x65\x74\x20\x31\x20\x49\x6e\x64\x53\x74\x72\x3a\x25\x73\x2c\x53\x65\x67\x5f\x53\x65\x71\x3a\x25\x73\x2c\x46\x6f\x72\x6d\x61\x74\x49\x6e\x64\x3a\x25\x73\x2c\x46\x6f\x72\x6d\x61\x74\x53\x65\x71\x3a\x25\x73" "\n"
@@ -528,33 +530,33 @@
 pFormatNewContent=NULL;printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x55\x70\x64\x61\x74\x65\x43\x6f\x6e\x63\x61\x74\x53\x6d\x73\x20\x73\x75\x63\x63\x65\x73\x73\x2e" "\n"
 );return result;}int zUfiSms_InsertConcatSms(T_zUfiSms_DbStoreData*ptDbSaveData,
-const char*pStorePos){T_zUfiSms_DbStoreStr ac={(0x4a4+828-0x7e0)};int 
-iSms_TotalCount=(0xbd6+3370-0x1900);int i=(0x4b4+8521-0x25fd);char acTmpContent[
-(0x9c4+2312-0x11cc)];int iConcatNum=(0x1a8f+2242-0x2351);char*pFormatConcat=NULL
-;char*pContent=NULL;int spaceLen=(0x707+3314-0x13f5)*
-ZTE_WMS_SMS_MSG_CONTENT_LEN_MAX*ZTE_WMS_CONCAT_SMS_COUNT_MAX+(0xd67+5395-0x2276)
+const char*pStorePos){T_zUfiSms_DbStoreStr ac={(0xf0a+5380-0x240e)};int 
+iSms_TotalCount=(0x83a+4939-0x1b85);int i=(0x122b+4292-0x22ef);char acTmpContent
+[(0x318+5123-0x161b)];int iConcatNum=(0x1305+884-0x1679);char*pFormatConcat=NULL
+;char*pContent=NULL;int spaceLen=(0x1013+4695-0x2266)*
+ZTE_WMS_SMS_MSG_CONTENT_LEN_MAX*ZTE_WMS_CONCAT_SMS_COUNT_MAX+(0x111+8153-0x20e6)
 ;if(NULL==ptDbSaveData||NULL==pStorePos){return ZUFI_FAIL;}printf(
 "\x5b\x53\x4d\x53\x5d\x20\x65\x6e\x74\x65\x72\x20\x49\x6e\x73\x65\x72\x74\x43\x6f\x6e\x63\x61\x74\x53\x6d\x73\x2e" "\n"
-);memset(acTmpContent,(0x15d3+3393-0x2314),sizeof(acTmpContent));iSms_TotalCount
-=ptDbSaveData->concat_info[(0x1d03+1867-0x244d)];for(i=(0x317+3150-0xf64);i<
+);memset(acTmpContent,(0x1810+294-0x1936),sizeof(acTmpContent));iSms_TotalCount=
+ptDbSaveData->concat_info[(0x2395+352-0x24f4)];for(i=(0xaba+3332-0x17bd);i<
 iSms_TotalCount;i++){strcat(ac.IndStr,"\x3b");strcat(ac.Seg_Seq,"\x3b");strcat(
 acTmpContent,"\x3b");}pFormatConcat=(char*)malloc(spaceLen);if(NULL==
-pFormatConcat){return ZUFI_FAIL;}memset(pFormatConcat,(0xbdb+3932-0x1b37),
+pFormatConcat){return ZUFI_FAIL;}memset(pFormatConcat,(0x1d6c+1908-0x24e0),
 spaceLen);pContent=(char*)malloc(spaceLen);if(pContent==NULL){free(pFormatConcat
-);return ZUFI_FAIL;}memset(pContent,(0x40a+5348-0x18ee),spaceLen);if(-
-(0x9a5+5590-0x1f7a)==zUfiSms_AddNewSmsToConcatData(ptDbSaveData,acTmpContent,
+);return ZUFI_FAIL;}memset(pContent,(0x147+474-0x321),spaceLen);if(-
+(0x705+469-0x8d9)==zUfiSms_AddNewSmsToConcatData(ptDbSaveData,acTmpContent,
 pFormatConcat,pContent,&ac,&iConcatNum,spaceLen)){free(pFormatConcat);free(
 pContent);pFormatConcat=NULL;pContent=NULL;return ZUFI_FAIL;}ptDbSaveData->
-tp_dcs=(0x640+4018-0x15f0);if(ZUFI_FAIL==zUfiSms_InsertConcatSmsToDb(
+tp_dcs=(0x70a+7933-0x2605);if(ZUFI_FAIL==zUfiSms_InsertConcatSmsToDb(
 ptDbSaveData,pStorePos,pFormatConcat,pContent,&ac,iConcatNum)){free(
 pFormatConcat);free(pContent);pFormatConcat=NULL;pContent=NULL;return ZUFI_FAIL;
 }free(pFormatConcat);free(pContent);pFormatConcat=NULL;pContent=NULL;printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x49\x6e\x73\x65\x72\x74\x43\x6f\x6e\x63\x61\x74\x53\x6d\x73\x20\x73\x75\x63\x63\x65\x73\x73\x2e" "\n"
 );return ZUFI_SUCC;}int zUfiSms_StoreConcatSmsToDb(T_zUfiSms_DbStoreData*
-ptDbSaveData,char*pMemStore){long iSmsId=(0x15e6+2719-0x2085);int total_count=
-(0xfca+3336-0x1cd2);if(NULL==ptDbSaveData||NULL==pMemStore){return ZUFI_FAIL;}
+ptDbSaveData,char*pMemStore){long iSmsId=(0x1a1b+2012-0x21f7);int total_count=
+(0x235a+842-0x26a4);if(NULL==ptDbSaveData||NULL==pMemStore){return ZUFI_FAIL;}
 iSmsId=zUfiSms_SearchConcatSmsInDb(ptDbSaveData,pMemStore);if(-
-(0xff7+5487-0x2565)!=iSmsId){printf(
+(0x465+7144-0x204c)!=iSmsId){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x53\x74\x6f\x72\x65\x43\x6f\x6e\x63\x61\x74\x53\x6d\x73\x54\x6f\x44\x62\x20\x45\x6e\x74\x65\x72\x20\x55\x70\x64\x61\x74\x65\x43\x6f\x6e\x63\x61\x74\x53\x6d\x73\x20\x53\x6d\x73\x49\x64\x3a\x25\x64\x2e" "\n"
 ,iSmsId);return zUfiSms_UpdateConcatSms(ptDbSaveData,pMemStore,iSmsId);}else{if(
 ZUFI_FAIL==zUfiSms_GetTotalCount(pMemStore,&total_count)){printf(
@@ -566,185 +568,182 @@
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x53\x74\x6f\x72\x65\x43\x6f\x6e\x63\x61\x74\x53\x6d\x73\x54\x6f\x44\x62\x20\x53\x6d\x73\x20\x6d\x65\x6d\x6f\x72\x79\x20\x69\x73\x20\x46\x75\x6c\x6c\x2e" "\n"
 );return ZUFI_FAIL;}return zUfiSms_InsertConcatSms(ptDbSaveData,pMemStore);}}int
  zUfiSms_WriteSmsToDb(T_zUfiSms_DbStoreData*ptDbSaveData,zUfiSms_StoreType 
-iMemStore,long iSmsId){char acDbMemStore[(0xa0c+367-0xb71)];int iTotalCount=
-(0x74b+2848-0x126b);int id=(0x2f8+4282-0x13b2);UINT8 needCheckMemory=
-(0x16d9+48-0x1708);if(NULL==ptDbSaveData){return ZUFI_FAIL;}memset(acDbMemStore,
-(0xc3d+5019-0x1fd8),sizeof(acDbMemStore));if(WMS_STORAGE_TYPE_UIM_V01==iMemStore
-){strncpy(acDbMemStore,ZTE_WMS_DB_SIM_TABLE,sizeof(acDbMemStore)-
-(0xa14+6454-0x2349));}else{strncpy(acDbMemStore,ZTE_WMS_DB_NV_TABLE,sizeof(
-acDbMemStore)-(0xec8+168-0xf6f));}if((0x496+7922-0x2387)==ptDbSaveData->
+iMemStore,long iSmsId){char acDbMemStore[(0x2282+529-0x2489)];int iTotalCount=
+(0x196+2294-0xa8c);int id=(0x2346+244-0x243a);UINT8 needCheckMemory=
+(0xc92+6456-0x25c9);if(NULL==ptDbSaveData){return ZUFI_FAIL;}memset(acDbMemStore
+,(0x7fb+5266-0x1c8d),sizeof(acDbMemStore));if(WMS_STORAGE_TYPE_UIM_V01==
+iMemStore){strncpy(acDbMemStore,ZTE_WMS_DB_SIM_TABLE,sizeof(acDbMemStore)-
+(0x7a6+1631-0xe04));}else{strncpy(acDbMemStore,ZTE_WMS_DB_NV_TABLE,sizeof(
+acDbMemStore)-(0x4f4+8555-0x265e));}if((0x119+8810-0x2382)==ptDbSaveData->
 concat_sms){id=zUfiSms_SearchConcatSmsInDb(ptDbSaveData,&acDbMemStore);if(-
-(0x495+5814-0x1b4a)!=id){needCheckMemory=(0x784+3984-0x1714);}}if(
-needCheckMemory==(0x14e0+1378-0x1a41)){if(ZUFI_FAIL==zUfiSms_GetTotalCount(
+(0x3e7+6486-0x1d3c)!=id){needCheckMemory=(0x10a6+5509-0x262b);}}if(
+needCheckMemory==(0x997+1487-0xf65)){if(ZUFI_FAIL==zUfiSms_GetTotalCount(
 acDbMemStore,&iTotalCount)){return ZUFI_FAIL;}printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x57\x72\x69\x74\x65\x53\x6d\x73\x54\x6f\x44\x62\x20\x69\x54\x6f\x74\x61\x6c\x43\x6f\x75\x6e\x74\x3d\x25\x64\x28\x6e\x65\x65\x64\x43\x68\x65\x63\x6b\x4d\x65\x6d\x6f\x72\x79\x3d\x3d\x31\x29" "\n"
 ,iTotalCount);if(iTotalCount>=g_zUfiSms_StoreCapablity[(strcmp(acDbMemStore,
 "\x6e\x76")?ZTE_WMS_MEMORY_SIM:ZTE_WMS_MEMORY_NV)]){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x57\x72\x69\x74\x65\x53\x6d\x73\x54\x6f\x44\x62\x20\x6d\x65\x6d\x6f\x72\x79\x20\x66\x75\x6c\x6c\x2c\x20\x65\x72\x72\x6f\x72" "\n"
-);return ZTE_WMS_NV_MEMORY_FULL;}}if(ptDbSaveData->concat_info[
-(0x1c70+618-0x1ed8)]==(0x52f+6829-0x1fdc)||ptDbSaveData->concat_info[
-(0x218c+95-0x21e9)]>ptDbSaveData->concat_info[(0xd1a+2619-0x1754)]){ptDbSaveData
-->concat_sms=(0x698+621-0x905);}printf(
+);return ZTE_WMS_NV_MEMORY_FULL;}}if(ptDbSaveData->concat_info[(0xb2+2481-0xa61)
+]==(0x170f+3184-0x237f)||ptDbSaveData->concat_info[(0x7f8+7100-0x23b2)]>
+ptDbSaveData->concat_info[(0xb02+3228-0x179d)]){ptDbSaveData->concat_sms=
+(0x122a+3909-0x216f);}printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x57\x72\x69\x74\x65\x53\x6d\x73\x54\x6f\x44\x62\x20\x54\x6f\x74\x61\x6c\x43\x6f\x75\x6e\x74\x3a\x25\x64\x2e\x63\x6f\x6e\x63\x61\x74\x5f\x73\x6d\x73\x3a\x25\x64\x2e\x63\x6f\x6e\x63\x61\x74\x5f\x69\x6e\x66\x6f\x5b\x31\x5d\x3a\x25\x64" "\n"
 ,iTotalCount,ptDbSaveData->concat_sms,ptDbSaveData->concat_info[
-(0x5f5+3304-0x12dc)]);if((0x80a+5958-0x1f4f)==ptDbSaveData->concat_sms){if(
-ZTE_WMS_CONCAT_SMS_COUNT_MAX<ptDbSaveData->concat_info[(0x176b+727-0x1a41)]){
+(0x878+1736-0xf3f)]);if((0x510+968-0x8d7)==ptDbSaveData->concat_sms){if(
+ZTE_WMS_CONCAT_SMS_COUNT_MAX<ptDbSaveData->concat_info[(0x677+4907-0x19a1)]){
 return ZUFI_FAIL;}else{return zUfiSms_StoreConcatSmsToDb(ptDbSaveData,
 acDbMemStore);}}else{return zUfiSms_StoreNormalSmsToDb(ptDbSaveData,acDbMemStore
 ,iSmsId);}}T_zUfiSms_CmdStatus zUfiSms_SendOutSms(T_zUfiSms_DbStoreData*
-ptDbSaveData,int cid){int atRes=(0xc9c+4403-0x1dcf);if(NULL==ptDbSaveData){
+ptDbSaveData,int cid){int atRes=(0x15d0+2736-0x2080);if(NULL==ptDbSaveData){
 return WMS_CMD_FAILED;}if(!g_zUfiSms_IsConcatSendSuc){ptDbSaveData->tag=
 WMS_TAG_TYPE_MO_NOT_SENT_V01;if(ZUFI_SUCC==zUfiSms_WriteSmsToDb(ptDbSaveData,
-WMS_STORAGE_TYPE_NV_V01,-(0x1577+3858-0x2488))){g_zUfiSms_MsgRefer++;
-ptDbSaveData->msg_ref=g_zUfiSms_MsgRefer;(void)zUfiSms_SetMaxReference(
-g_zUfiSms_MsgRefer);}}else{CHAR sendfailRetry[(0x14d2+1813-0x1bb5)]={
-(0xdf6+3784-0x1cbe)};sc_cfg_get(NV_SENDFAIL_RETRY,sendfailRetry,sizeof(
-sendfailRetry));if((0x11af+3363-0x1ed2)==strcmp("\x31",sendfailRetry)){
-g_zUfiSms_SendFailedRetry=(0x8a2+2129-0x10f0);}atRes=zSms_SendCmgsReq();if(atRes
-!=ZSMS_RESULT_OK){zSms_RecvCmgsErr();}else{zSms_RecvCmgsOk();}}return 
-WMS_CMD_SUCCESS;}int zUfiSms_SendConcatSms(int cid){int atRes=
-(0x637+4542-0x17f5);T_zUfiSms_ClientMsg tClientMsg;T_zUfiSms_DbStoreData 
-tDbSaveData;int result=ZUFI_FAIL;if(g_zUfiSms_ConcatSms.current_sending>=
-g_zUfiSms_ConcatSms.total_msg){return ZUFI_FAIL;}memset((void*)&tClientMsg,
-(0x740+2280-0x1028),sizeof(T_zUfiSms_ClientMsg));memset((void*)&tDbSaveData,
-(0x15c+2211-0x9ff),sizeof(tDbSaveData));zUfiSms_SetPduData(&tClientMsg,&
-tDbSaveData);if(!g_zUfiSms_IsConcatSendSuc){tDbSaveData.tag=
+WMS_STORAGE_TYPE_NV_V01,-(0xf07+4102-0x1f0c))){g_zUfiSms_MsgRefer++;ptDbSaveData
+->msg_ref=g_zUfiSms_MsgRefer;(void)zUfiSms_SetMaxReference(g_zUfiSms_MsgRefer);}
+}else{CHAR sendfailRetry[(0x642+7072-0x21b0)]={(0x1088+2047-0x1887)};sc_cfg_get(
+NV_SENDFAIL_RETRY,sendfailRetry,sizeof(sendfailRetry));if((0x2af+3301-0xf94)==
+strcmp("\x31",sendfailRetry)){g_zUfiSms_SendFailedRetry=(0x879+7738-0x26b0);}
+atRes=zSms_SendCmgsReq();if(atRes!=ZSMS_RESULT_OK){zSms_RecvCmgsErr();}else{
+zSms_RecvCmgsOk();}}return WMS_CMD_SUCCESS;}int zUfiSms_SendConcatSms(int cid){
+int atRes=(0x6b4+7995-0x25ef);T_zUfiSms_ClientMsg tClientMsg;
+T_zUfiSms_DbStoreData tDbSaveData;int result=ZUFI_FAIL;if(g_zUfiSms_ConcatSms.
+current_sending>=g_zUfiSms_ConcatSms.total_msg){return ZUFI_FAIL;}memset((void*)
+&tClientMsg,(0x1cb3+1626-0x230d),sizeof(T_zUfiSms_ClientMsg));memset((void*)&
+tDbSaveData,(0x163a+1958-0x1de0),sizeof(tDbSaveData));zUfiSms_SetPduData(&
+tClientMsg,&tDbSaveData);if(!g_zUfiSms_IsConcatSendSuc){tDbSaveData.tag=
 WMS_TAG_TYPE_MO_NOT_SENT_V01;(void)zUfiSms_WriteSmsToDb(&tDbSaveData,
-WMS_STORAGE_TYPE_NV_V01,-(0x1caa+1589-0x22de));g_zUfiSms_SendFailedCount++;}else
-{CHAR sendfailRetry[(0xca6+6595-0x2637)]={(0x13fd+3177-0x2066)};sc_cfg_get(
-NV_SENDFAIL_RETRY,sendfailRetry,sizeof(sendfailRetry));if((0x463+8737-0x2684)==
-strcmp("\x31",sendfailRetry)){g_zUfiSms_SendFailedRetry=(0x331+5051-0x16e9);}
+WMS_STORAGE_TYPE_NV_V01,-(0x475+3222-0x110a));g_zUfiSms_SendFailedCount++;}else{
+CHAR sendfailRetry[(0x23f+2519-0xbe4)]={(0x111a+321-0x125b)};sc_cfg_get(
+NV_SENDFAIL_RETRY,sendfailRetry,sizeof(sendfailRetry));if((0x560+5426-0x1a92)==
+strcmp("\x31",sendfailRetry)){g_zUfiSms_SendFailedRetry=(0x938+5237-0x1daa);}
 atRes=zSms_SendCmgsReq();if(atRes!=ZSMS_RESULT_OK){zSms_RecvCmgsErr();}else{
 zSms_RecvCmgsOk();}}g_zUfiSms_ConcatSms.current_sending++;if(g_zUfiSms_ConcatSms
 .current_sending<g_zUfiSms_ConcatSms.total_msg){if(g_zUfiSms_ConcatSms.sms_len<
-g_zUfiSms_UnitLen*(g_zUfiSms_ConcatSms.current_sending+(0xc73+5278-0x2110))){
+g_zUfiSms_UnitLen*(g_zUfiSms_ConcatSms.current_sending+(0x191+3777-0x1051))){
 g_zUfiSms_UnitLen=g_zUfiSms_ConcatSms.sms_len-g_zUfiSms_UnitLen*
 g_zUfiSms_ConcatSms.current_sending;}}if(g_zUfiSms_ConcatSms.current_sending==
 g_zUfiSms_ConcatSms.total_msg&&!g_zUfiSms_IsConcatSendSuc){T_zUfiSms_StatusInfo 
-tSendStatus;memset((void*)&tSendStatus,(0x1ab2+1519-0x20a1),sizeof(
+tSendStatus;memset((void*)&tSendStatus,(0x6c8+6493-0x2025),sizeof(
 T_zUfiSms_StatusInfo));tSendStatus.err_code=ZTE_SMS_CMS_NONE;tSendStatus.
 send_failed_count=g_zUfiSms_SendFailedCount;tSendStatus.delete_failed_count=
-(0x78d+7095-0x2344);tSendStatus.cmd_status=WMS_CMD_FAILED;tSendStatus.cmd=
+(0xa8d+4750-0x1d1b);tSendStatus.cmd_status=WMS_CMD_FAILED;tSendStatus.cmd=
 WMS_SMS_CMD_MSG_SEND;(void)zUfiSms_SetCmdStatus(&tSendStatus);sc_cfg_set(
 NV_SMS_SEND_RESULT,"\x66\x61\x69\x6c");sc_cfg_set(NV_SMS_DB_CHANGE,"\x31");
 return ZUFI_FAIL;}if(!g_zUfiSms_IsConcatSendSuc){zUfiSms_SendConcatSms(cid);}
-return result;}int zSvr_sendCmgs(VOID){int atRes=(0x19cf+2658-0x2431);int i=
-(0x10ac+748-0x1398);atRes=zSms_SendCmgsReq();if(atRes!=ZSMS_RESULT_OK){CHAR 
-sendfailRetry[(0xfc0+1264-0x147e)]={(0x1a98+817-0x1dc9)};sc_cfg_get(
-NV_SENDFAIL_RETRY,sendfailRetry,sizeof(sendfailRetry));if((0x656+7859-0x2509)==
-strcmp("\x31",sendfailRetry)){for(i=(0x13b0+2824-0x1eb8);i<SMS_RETRY_COUNT;i++){
+return result;}int zSvr_sendCmgs(VOID){int atRes=(0x2053+943-0x2402);int i=
+(0x111f+386-0x12a1);atRes=zSms_SendCmgsReq();if(atRes!=ZSMS_RESULT_OK){CHAR 
+sendfailRetry[(0x1afa+267-0x1bd3)]={(0x8cc+5205-0x1d21)};sc_cfg_get(
+NV_SENDFAIL_RETRY,sendfailRetry,sizeof(sendfailRetry));if((0xd30+3148-0x197c)==
+strcmp("\x31",sendfailRetry)){for(i=(0x283+6502-0x1be9);i<SMS_RETRY_COUNT;i++){
 atRes=zSms_SendCmgsReq();if(atRes==ZSMS_RESULT_OK){break;}}}}return atRes;}
 T_zUfiSms_CmdStatus zUfiSms_SendSms(VOID){T_zUfiSms_ClientMsg tClientMsg;
-T_zUfiSms_DbStoreData tDbSaveData;int res=(0xc3b+4746-0x1ec5);if(-
-(0x9b1+7480-0x26e8)==g_zUfiSms_UnitLen){printf(
+T_zUfiSms_DbStoreData tDbSaveData;int res=(0xfe3+5070-0x23b1);if(-
+(0x1428+3767-0x22de)==g_zUfiSms_UnitLen){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x21\x21\x21\x7a\x55\x66\x69\x53\x6d\x73\x5f\x53\x65\x6e\x64\x53\x6d\x73\x3a\x20\x4e\x6f\x20\x63\x6f\x6e\x74\x65\x6e\x74\x21\x2e" "\n"
 );return WMS_CMD_FAILED;}while(g_zUfiSms_ConcatSms.current_sending<
-g_zUfiSms_ConcatSms.total_msg){memset((void*)&tClientMsg,(0x582+1527-0xb79),
-sizeof(T_zUfiSms_ClientMsg));memset((void*)&tDbSaveData,(0x55b+3362-0x127d),
+g_zUfiSms_ConcatSms.total_msg){memset((void*)&tClientMsg,(0xb9a+855-0xef1),
+sizeof(T_zUfiSms_ClientMsg));memset((void*)&tDbSaveData,(0x3b2+6393-0x1cab),
 sizeof(tDbSaveData));zUfiSms_SetPduData(&tClientMsg,&tDbSaveData);if(!
 g_zUfiSms_IsConcatSendSuc){tDbSaveData.tag=WMS_TAG_TYPE_MO_NOT_SENT_V01;(void)
-zUfiSms_WriteSmsToDb(&tDbSaveData,WMS_STORAGE_TYPE_NV_V01,-(0xda6+4354-0x1ea7));
+zUfiSms_WriteSmsToDb(&tDbSaveData,WMS_STORAGE_TYPE_NV_V01,-(0xe91+1598-0x14ce));
 g_zUfiSms_SendFailedCount++;}else{res=zSvr_sendCmgs();if(res!=ZSMS_RESULT_OK){
 zSms_RecvCmgsErr();}else{zSms_RecvCmgsOk();}}g_zUfiSms_ConcatSms.current_sending
 ++;if(g_zUfiSms_ConcatSms.current_sending<g_zUfiSms_ConcatSms.total_msg){if(
 g_zUfiSms_ConcatSms.sms_len<g_zUfiSms_UnitLen*(g_zUfiSms_ConcatSms.
-current_sending+(0x138d+132-0x1410))){g_zUfiSms_UnitLen=g_zUfiSms_ConcatSms.
+current_sending+(0x9a6+6174-0x21c3))){g_zUfiSms_UnitLen=g_zUfiSms_ConcatSms.
 sms_len-g_zUfiSms_UnitLen*g_zUfiSms_ConcatSms.current_sending;}}if(
 g_zUfiSms_ConcatSms.current_sending==g_zUfiSms_ConcatSms.total_msg&&!
 g_zUfiSms_IsConcatSendSuc){T_zUfiSms_StatusInfo tSendStatus;memset((void*)&
-tSendStatus,(0x6bc+1299-0xbcf),sizeof(T_zUfiSms_StatusInfo));tSendStatus.
+tSendStatus,(0x1e44+967-0x220b),sizeof(T_zUfiSms_StatusInfo));tSendStatus.
 err_code=ZTE_SMS_CMS_NONE;tSendStatus.send_failed_count=
-g_zUfiSms_SendFailedCount;tSendStatus.delete_failed_count=(0x708+6245-0x1f6d);
+g_zUfiSms_SendFailedCount;tSendStatus.delete_failed_count=(0x766+5141-0x1b7b);
 tSendStatus.cmd_status=WMS_CMD_FAILED;tSendStatus.cmd=WMS_SMS_CMD_MSG_SEND;(void
 )zUfiSms_SetCmdStatus(&tSendStatus);sc_cfg_set(NV_SMS_SEND_RESULT,
 "\x66\x61\x69\x6c");sc_cfg_set(NV_SMS_DB_CHANGE,"\x31");}}
-#if (0xbba+384-0xd3a)	

-if(g_zUfiSms_ConcatSms.total_msg>(0x1160+1446-0x1705)){printf(
+#if (0x419+8704-0x2619)	

+if(g_zUfiSms_ConcatSms.total_msg>(0x974+5410-0x1e95)){printf(
 "\x3d\x3d\x3d\x3d\x7a\x55\x66\x69\x53\x6d\x73\x5f\x53\x65\x6e\x64\x43\x6f\x6e\x63\x61\x74\x53\x6d\x73\x2e" "\n"
-);zUfiSms_SendConcatSms(cid);}else{memset((void*)&tClientMsg,
-(0x1802+3381-0x2537),sizeof(T_zUfiSms_ClientMsg));memset((void*)&tDbSaveData,
-(0x9ef+2970-0x1589),sizeof(tDbSaveData));zUfiSms_SetPduData(&tClientMsg,&
-tDbSaveData);printf(
+);zUfiSms_SendConcatSms(cid);}else{memset((void*)&tClientMsg,(0x869+1626-0xec3),
+sizeof(T_zUfiSms_ClientMsg));memset((void*)&tDbSaveData,(0xb53+4328-0x1c3b),
+sizeof(tDbSaveData));zUfiSms_SetPduData(&tClientMsg,&tDbSaveData);printf(
 "\x3d\x3d\x3d\x3d\x7a\x55\x66\x69\x53\x6d\x73\x5f\x53\x65\x6e\x64\x6e\x6f\x72\x61\x6d\x6c\x53\x6d\x73\x2e" "\n"
 );if(WMS_CMD_FAILED==zUfiSms_SendOutSms(&tDbSaveData,cid)){printf(
 "\x21\x21\x21\x21\x21\x7a\x55\x66\x69\x53\x6d\x73\x5f\x53\x65\x6e\x64\x4f\x75\x74\x53\x6d\x73\x20\x46\x61\x69\x6c\x2e" "\n"
 );g_zUfiSms_SendFailedCount++;return WMS_CMD_FAILED;}}
 #endif

 return WMS_CMD_SUCCESS;}int zUfiSms_FormatDeliverTimestamp(T_zUfiSms_Date tData,
-T_zUfiSms_TimeStamp*ptTimestamp){unsigned char tTimeZone[(0x1480+1859-0x1bbe)]={
-(0xf71+1096-0x13b9)};int tmp_i=(0xcd0+1913-0x1449);memset(ptTimestamp,
-(0x2b3+1147-0x72e),sizeof(T_zUfiSms_TimeStamp));if(strlen(tData.year)==
-(0x6b+6574-0x1a18)){ptTimestamp->year=zUfiSms_atohex(
-((char)(0x18a2+2259-0x2145)))*(0x97d+1931-0x10f8)+zUfiSms_atohex(tData.year[
-(0x757+7437-0x2464)]);}else if(strlen(tData.year)==(0x1175+676-0x1417)){
-ptTimestamp->year=zUfiSms_atohex(tData.year[(0xddd+2476-0x1789)])*
-(0xd46+3090-0x1948)+zUfiSms_atohex(tData.year[(0x9b2+2267-0x128c)]);}else if(
-strlen(tData.year)==(0x1605+223-0x16e0)){ptTimestamp->year=zUfiSms_atohex(tData.
-year[(0xa36+5744-0x20a4)])*(0x22f9+279-0x2400)+zUfiSms_atohex(tData.year[
-(0x102c+4348-0x2125)]);}else{printf(
+T_zUfiSms_TimeStamp*ptTimestamp){unsigned char tTimeZone[(0x970+4626-0x1b7d)]={
+(0x150f+223-0x15ee)};int tmp_i=(0x1746+840-0x1a8e);memset(ptTimestamp,
+(0x2cb+2285-0xbb8),sizeof(T_zUfiSms_TimeStamp));if(strlen(tData.year)==
+(0xa62+4-0xa65)){ptTimestamp->year=zUfiSms_atohex(((char)(0x760+5672-0x1d58)))*
+(0xe9c+4403-0x1fbf)+zUfiSms_atohex(tData.year[(0xe76+2415-0x17e5)]);}else if(
+strlen(tData.year)==(0x1fa9+1856-0x26e7)){ptTimestamp->year=zUfiSms_atohex(tData
+.year[(0x4f2+738-0x7d4)])*(0x539+2183-0xdb0)+zUfiSms_atohex(tData.year[
+(0xfd0+2511-0x199e)]);}else if(strlen(tData.year)==(0x131f+2500-0x1cdf)){
+ptTimestamp->year=zUfiSms_atohex(tData.year[(0x820+878-0xb8c)])*
+(0x92a+2418-0x128c)+zUfiSms_atohex(tData.year[(0x456+1422-0x9e1)]);}else{printf(
 "\x75\x6e\x6b\x6e\x6f\x77\x6e\x20\x79\x65\x61\x72\x2e");return ZUFI_FAIL;}if(
-strlen(tData.month)==(0x2a2+7773-0x20fe)){ptTimestamp->month=zUfiSms_atohex(
-((char)(0x2b0+7962-0x219a)))*(0x306+7553-0x2077)+zUfiSms_atohex(tData.month[
-(0x1db1+1805-0x24be)]);}else if(strlen(tData.month)==(0x79b+2564-0x119d)){
-ptTimestamp->month=zUfiSms_atohex(tData.month[(0x2fa+7341-0x1fa7)])*
-(0x11c1+2322-0x1ac3)+zUfiSms_atohex(tData.month[(0xaa1+6841-0x2559)]);}else{
+strlen(tData.month)==(0x20b5+701-0x2371)){ptTimestamp->month=zUfiSms_atohex(
+((char)(0x11d3+5042-0x2555)))*(0x2e0+2285-0xbbd)+zUfiSms_atohex(tData.month[
+(0xe56+1440-0x13f6)]);}else if(strlen(tData.month)==(0x310+8913-0x25df)){
+ptTimestamp->month=zUfiSms_atohex(tData.month[(0x64f+1657-0xcc8)])*
+(0x1990+3282-0x2652)+zUfiSms_atohex(tData.month[(0x21ca+556-0x23f5)]);}else{
 printf("\x75\x6e\x6b\x6e\x6f\x77\x6e\x20\x64\x61\x79\x2e");}if(strlen(tData.day)
-==(0x14fc+2831-0x200a)){ptTimestamp->day=zUfiSms_atohex(
-((char)(0x1198+5502-0x26e6)))*(0x12d+321-0x25e)+zUfiSms_atohex(tData.day[
-(0xdc5+3343-0x1ad4)]);}else if(strlen(tData.day)==(0x264+4346-0x135c)){
-ptTimestamp->day=zUfiSms_atohex(tData.day[(0x1770+1599-0x1daf)])*
-(0x232+216-0x2fa)+zUfiSms_atohex(tData.day[(0xc8c+6496-0x25eb)]);}else{printf(
-"\x75\x6e\x6b\x6e\x6f\x77\x6e\x20\x64\x61\x79\x2e");}if(strlen(tData.hour)==
-(0xbfd+2186-0x1486)){ptTimestamp->hour=zUfiSms_atohex(
-((char)(0x1525+4399-0x2624)))*(0x12c+848-0x46c)+zUfiSms_atohex(tData.hour[
-(0x449+7716-0x226d)]);}else if(strlen(tData.hour)==(0x1430+2302-0x1d2c)){
-ptTimestamp->hour=zUfiSms_atohex(tData.hour[(0x1409+4532-0x25bd)])*
-(0x689+2410-0xfe3)+zUfiSms_atohex(tData.hour[(0x1347+4156-0x2382)]);}else{printf
-("\x75\x6e\x6b\x6e\x6f\x77\x6e\x20\x68\x6f\x75\x72\x2e");}if(strlen(tData.min)==
-(0x2d8+1435-0x872)){ptTimestamp->minute=zUfiSms_atohex(
-((char)(0x1423+3891-0x2326)))*(0x36+3327-0xd25)+zUfiSms_atohex(tData.min[
-(0x12d5+4082-0x22c7)]);}else if(strlen(tData.min)==(0x11b2+79-0x11ff)){
-ptTimestamp->minute=zUfiSms_atohex(tData.min[(0x1157+3973-0x20dc)])*
-(0x415+7587-0x21a8)+zUfiSms_atohex(tData.min[(0x1c4b+2385-0x259b)]);}else{printf
+==(0x1bd9+77-0x1c25)){ptTimestamp->day=zUfiSms_atohex(
+((char)(0x194c+121-0x1995)))*(0x88+474-0x252)+zUfiSms_atohex(tData.day[
+(0x1452+63-0x1491)]);}else if(strlen(tData.day)==(0x1726+2027-0x1f0f)){
+ptTimestamp->day=zUfiSms_atohex(tData.day[(0x68b+7020-0x21f7)])*
+(0x182c+1908-0x1f90)+zUfiSms_atohex(tData.day[(0x1500+1807-0x1c0e)]);}else{
+printf("\x75\x6e\x6b\x6e\x6f\x77\x6e\x20\x64\x61\x79\x2e");}if(strlen(tData.hour
+)==(0x385+5275-0x181f)){ptTimestamp->hour=zUfiSms_atohex(
+((char)(0xfb4+691-0x1237)))*(0x4c4+6871-0x1f8b)+zUfiSms_atohex(tData.hour[
+(0xd3f+4082-0x1d31)]);}else if(strlen(tData.hour)==(0x5a5+6819-0x2046)){
+ptTimestamp->hour=zUfiSms_atohex(tData.hour[(0x607+2554-0x1001)])*
+(0x1bb9+935-0x1f50)+zUfiSms_atohex(tData.hour[(0x1cd0+1830-0x23f5)]);}else{
+printf("\x75\x6e\x6b\x6e\x6f\x77\x6e\x20\x68\x6f\x75\x72\x2e");}if(strlen(tData.
+min)==(0xadc+5138-0x1eed)){ptTimestamp->minute=zUfiSms_atohex(
+((char)(0x3d0+7104-0x1f60)))*(0x1d02+2155-0x255d)+zUfiSms_atohex(tData.min[
+(0x165c+2461-0x1ff9)]);}else if(strlen(tData.min)==(0x22b+5531-0x17c4)){
+ptTimestamp->minute=zUfiSms_atohex(tData.min[(0x151d+2292-0x1e11)])*
+(0xb70+3931-0x1abb)+zUfiSms_atohex(tData.min[(0x17dc+3788-0x26a7)]);}else{printf
 ("\x75\x6e\x6b\x6e\x6f\x77\x6e\x20\x6d\x69\x6e\x75\x74\x65\x2e");}if(strlen(
-tData.sec)==(0x65+521-0x26d)){ptTimestamp->second=zUfiSms_atohex(
-((char)(0x1da9+491-0x1f64)))*(0x333+1976-0xadb)+zUfiSms_atohex(tData.sec[
-(0x2465+235-0x2550)]);}else if(strlen(tData.sec)==(0x1b74+1334-0x20a8)){
-ptTimestamp->second=zUfiSms_atohex(tData.sec[(0xfe6+3046-0x1bcc)])*
-(0x591+6695-0x1fa8)+zUfiSms_atohex(tData.sec[(0xd9c+1166-0x1229)]);}else{printf(
+tData.sec)==(0xa74+6117-0x2258)){ptTimestamp->second=zUfiSms_atohex(
+((char)(0xf5b+2751-0x19ea)))*(0x1339+3875-0x224c)+zUfiSms_atohex(tData.sec[
+(0xcf5+1799-0x13fc)]);}else if(strlen(tData.sec)==(0x5c7+1932-0xd51)){
+ptTimestamp->second=zUfiSms_atohex(tData.sec[(0xcab+5712-0x22fb)])*
+(0x114+2879-0xc43)+zUfiSms_atohex(tData.sec[(0x1b46+756-0x1e39)]);}else{printf(
 "\x75\x6e\x6b\x6e\x6f\x77\x6e\x20\x73\x65\x63\x6f\x6e\x64\x2e");}tmp_i=atoi(
-tData.timezone);if(tmp_i<INT_MIN+(0x1757+1373-0x1cb3)||tmp_i>INT_MAX-
-(0x523+3364-0x1246)){printf(
+tData.timezone);if(tmp_i<INT_MIN+(0x14b2+3217-0x2142)||tmp_i>INT_MAX-
+(0x1100+4334-0x21ed)){printf(
 "\x75\x6e\x6b\x6e\x6f\x77\x6e\x20\x74\x44\x61\x74\x61\x20\x74\x69\x6d\x65\x7a\x6f\x6e\x65\x3a\x25\x64\x2e" "\n"
-,tmp_i);return ZUFI_FAIL;}memset(tTimeZone,(0x13c+3710-0xfba),sizeof(tTimeZone))
-;snprintf(tTimeZone,sizeof(tTimeZone),"\x25\x64",tmp_i*(0xce0+4450-0x1e3e));if(
-tData.timezone[(0x17ec+1730-0x1eae)]==((char)(0x13a3+733-0x1653))){if(strlen(
-tTimeZone)==(0x29f+7038-0x1e1b)){ptTimestamp->timezone=zUfiSms_atohex(
-((char)(0x11ab+1918-0x18f9)))*(0x1dd9+1671-0x2450)+zUfiSms_atohex(tTimeZone[
-(0x7af+4646-0x19d4)]);}else if(strlen(tTimeZone)==(0x113c+2424-0x1ab1)){
-ptTimestamp->timezone=zUfiSms_atohex(tTimeZone[(0x24f9+86-0x254e)])*
-(0x13f4+2681-0x1e63)+zUfiSms_atohex(tTimeZone[(0x71a+6742-0x216e)]);}else{printf
-("\x75\x6e\x6b\x6e\x6f\x77\x6e\x20\x2d\x74\x69\x6d\x65\x7a\x6f\x6e\x65\x2e");}
-ptTimestamp->timezone=(0x7c6+1869-0xf13)-ptTimestamp->timezone;}else{if(strlen(
-tTimeZone)==(0x1a66+3037-0x2642)){ptTimestamp->timezone=zUfiSms_atohex(
-((char)(0xafb+3090-0x16dd)))*(0x1e21+2105-0x264a)+zUfiSms_atohex(tTimeZone[
-(0x910+5830-0x1fd6)]);}else if(strlen(tTimeZone)==(0x1403+4421-0x2546)){
-ptTimestamp->timezone=zUfiSms_atohex(tTimeZone[(0x730+1665-0xdb1)])*
-(0x189d+1288-0x1d9b)+zUfiSms_atohex(tTimeZone[(0x112+6883-0x1bf4)]);}else{printf
+,tmp_i);return ZUFI_FAIL;}memset(tTimeZone,(0xd6a+2409-0x16d3),sizeof(tTimeZone)
+);snprintf(tTimeZone,sizeof(tTimeZone),"\x25\x64",tmp_i*(0x16d1+3237-0x2372));if
+(tData.timezone[(0xefd+281-0x1016)]==((char)(0xcdd+3069-0x18ad))){if(strlen(
+tTimeZone)==(0x385+507-0x57e)){ptTimestamp->timezone=zUfiSms_atohex(
+((char)(0x17d+3048-0xd35)))*(0x4b6+4074-0x1490)+zUfiSms_atohex(tTimeZone[
+(0x1c78+1922-0x23f9)]);}else if(strlen(tTimeZone)==(0x93+1923-0x813)){
+ptTimestamp->timezone=zUfiSms_atohex(tTimeZone[(0x2315+664-0x25ac)])*
+(0x1c69+690-0x1f11)+zUfiSms_atohex(tTimeZone[(0x496+2411-0xdff)]);}else{printf(
+"\x75\x6e\x6b\x6e\x6f\x77\x6e\x20\x2d\x74\x69\x6d\x65\x7a\x6f\x6e\x65\x2e");}
+ptTimestamp->timezone=(0xe52+1601-0x1493)-ptTimestamp->timezone;}else{if(strlen(
+tTimeZone)==(0x204d+1388-0x25b8)){ptTimestamp->timezone=zUfiSms_atohex(
+((char)(0x457+6437-0x1d4c)))*(0x409+7935-0x22f8)+zUfiSms_atohex(tTimeZone[
+(0xb81+3597-0x198e)]);}else if(strlen(tTimeZone)==(0x637+1110-0xa8b)){
+ptTimestamp->timezone=zUfiSms_atohex(tTimeZone[(0x13f8+652-0x1684)])*
+(0x18fc+1232-0x1dc2)+zUfiSms_atohex(tTimeZone[(0x891+2946-0x1412)]);}else{printf
 ("\x75\x6e\x6b\x6e\x6f\x77\x6e\x20\x2b\x74\x69\x6d\x65\x7a\x6f\x6e\x65\x2e");}}
 return ZUFI_SUCC;}void zUfiSms_FillDeliver(T_zUfiSms_DeliverPdu*deliver,
 T_zUfiSms_ConcatInfo*concat_sms,T_zUfiSms_DbStoreData*ptDbSaveData){static 
-UINT16 msg_ref=(0x1bd0+2657-0x2631);deliver->user_data_header_present=TRUE;if(
-(0x34b+5877-0x1a40)==concat_sms->current_sending){g_zUfiSms_ConcatSmsReference++
+UINT16 msg_ref=(0x9bd+5215-0x1e1c);deliver->user_data_header_present=TRUE;if(
+(0x13e5+976-0x17b5)==concat_sms->current_sending){g_zUfiSms_ConcatSmsReference++
 ;(void)zUfiSms_SetConcatMaxRefer(g_zUfiSms_ConcatSmsReference);}deliver->
-user_data_header_present=TRUE;deliver->user_data.num_headers=(0x94d+1410-0xece);
-deliver->user_data.headers[(0xad9+84-0xb2d)].header_id=WMS_UDH_CONCAT_8;deliver
-->user_data.headers[(0x78c+4579-0x196f)].u.concat_8.msg_ref=msg_ref;deliver->
-user_data.headers[(0x1686+1608-0x1cce)].u.concat_8.total_sm=concat_sms->
-total_msg;deliver->user_data.headers[(0xc66+6226-0x24b8)].u.concat_8.seq_num=
-concat_sms->current_sending+(0xebc+1368-0x1413);ptDbSaveData->concat_sms=
-(0xa3+7172-0x1ca6);ptDbSaveData->concat_info[(0x1358+1558-0x196e)]=msg_ref;}void
- zUfiSms_FillDeliverPdu(T_zUfiSms_DeliverPdu*ptDeliver,T_zUfiSms_ConcatInfo*
+user_data_header_present=TRUE;deliver->user_data.num_headers=(0x70b+4383-0x1829)
+;deliver->user_data.headers[(0x779+6988-0x22c5)].header_id=WMS_UDH_CONCAT_8;
+deliver->user_data.headers[(0x529+8178-0x251b)].u.concat_8.msg_ref=msg_ref;
+deliver->user_data.headers[(0x294+1622-0x8ea)].u.concat_8.total_sm=concat_sms->
+total_msg;deliver->user_data.headers[(0x89d+6007-0x2014)].u.concat_8.seq_num=
+concat_sms->current_sending+(0x99+2811-0xb93);ptDbSaveData->concat_sms=
+(0x1029+5049-0x23e1);ptDbSaveData->concat_info[(0xcc6+5169-0x20f7)]=msg_ref;}
+void zUfiSms_FillDeliverPdu(T_zUfiSms_DeliverPdu*ptDeliver,T_zUfiSms_ConcatInfo*
 concat_sms,T_zUfiSms_GroupInfo*group_sms,int iSmsLen,T_zUfiSms_DbStoreData*
 ptDbSaveData){if(NULL==concat_sms||NULL==group_sms){return;}ptDeliver->more=
 FALSE;ptDeliver->reply_path_present=FALSE;ptDeliver->status_report_enabled=
@@ -752,34 +751,35 @@
 dcs.msg_class=WMS_MESSAGE_CLASS_NONE;ptDeliver->dcs.is_compressed=FALSE;if(
 g_zUfiSms_Dcs==DCS_ASC){ptDeliver->dcs.alphabet=WMS_GW_ALPHABET_7_BIT_DEFAULT;}
 else{ptDeliver->dcs.alphabet=WMS_GW_ALPHABET_UCS2;}if(concat_sms->total_msg>
-(0x1251+493-0x143d)){zUfiSms_FillDeliver(ptDeliver,concat_sms,ptDbSaveData);
-ptDbSaveData->concat_sms=(0x1157+5530-0x26f0);ptDbSaveData->concat_info[
-(0x81d+4488-0x19a3)]=concat_sms->current_sending+(0x266b+8-0x2672);ptDbSaveData
-->concat_info[(0xce3+220-0xdbe)]=concat_sms->total_msg;ptDbSaveData->concat_info
-[(0x364+65-0x3a5)]=ptDeliver->user_data.headers[(0x4e7+1402-0xa61)].u.concat_8.
-msg_ref;}else{ptDeliver->user_data_header_present=FALSE;ptDeliver->user_data.
-num_headers=(0x45f+10-0x469);}ptDeliver->user_data.sm_len=iSmsLen;memcpy(
-ptDeliver->user_data.sm_data,concat_sms->msg_contents[concat_sms->
-current_sending],iSmsLen);if(group_sms->receivers[group_sms->current_receiver][
-(0x1a32+2637-0x247f)]==((char)(0x3cf+1441-0x945))){(void)zUfiSms_CharToInt(
-group_sms->receivers[group_sms->current_receiver]+(0xf2f+739-0x1211),strlen(
-group_sms->receivers[group_sms->current_receiver])-(0x9a8+3862-0x18bd),ptDeliver
-->address.digits);ptDeliver->address.number_type=WMS_NUMBER_INTERNATIONAL;
+(0x190f+2481-0x22bf)){zUfiSms_FillDeliver(ptDeliver,concat_sms,ptDbSaveData);
+ptDbSaveData->concat_sms=(0x150+499-0x342);ptDbSaveData->concat_info[
+(0x69b+547-0x8bc)]=concat_sms->current_sending+(0x1106+5165-0x2532);ptDbSaveData
+->concat_info[(0xd83+1858-0x14c4)]=concat_sms->total_msg;ptDbSaveData->
+concat_info[(0x4ab+4658-0x16dd)]=ptDeliver->user_data.headers[
+(0xf2d+5503-0x24ac)].u.concat_8.msg_ref;}else{ptDeliver->
+user_data_header_present=FALSE;ptDeliver->user_data.num_headers=
+(0x1418+4072-0x2400);}ptDeliver->user_data.sm_len=iSmsLen;memcpy(ptDeliver->
+user_data.sm_data,concat_sms->msg_contents[concat_sms->current_sending],iSmsLen)
+;if(group_sms->receivers[group_sms->current_receiver][(0xf55+5630-0x2553)]==
+((char)(0xebd+4206-0x1f00))){(void)zUfiSms_CharToInt(group_sms->receivers[
+group_sms->current_receiver]+(0x1e14+375-0x1f8a),strlen(group_sms->receivers[
+group_sms->current_receiver])-(0x1307+4416-0x2446),ptDeliver->address.digits);
+ptDeliver->address.number_type=WMS_NUMBER_INTERNATIONAL;ptDeliver->address.
+number_of_digits=(UINT8)strlen(group_sms->receivers[group_sms->current_receiver]
+)-(0xd8+110-0x145);}else{(void)zUfiSms_CharToInt(group_sms->receivers[group_sms
+->current_receiver],strlen(group_sms->receivers[group_sms->current_receiver]),
+ptDeliver->address.digits);ptDeliver->address.number_type=WMS_NUMBER_UNKNOWN;
 ptDeliver->address.number_of_digits=(UINT8)strlen(group_sms->receivers[group_sms
-->current_receiver])-(0x9e4+7185-0x25f4);}else{(void)zUfiSms_CharToInt(group_sms
-->receivers[group_sms->current_receiver],strlen(group_sms->receivers[group_sms->
-current_receiver]),ptDeliver->address.digits);ptDeliver->address.number_type=
-WMS_NUMBER_UNKNOWN;ptDeliver->address.number_of_digits=(UINT8)strlen(group_sms->
-receivers[group_sms->current_receiver]);}ptDeliver->address.digit_mode=
-WMS_DIGIT_MODE_4_BIT;ptDeliver->address.number_mode=
-WMS_NUMBER_MODE_NONE_DATA_NETWORK;ptDeliver->address.number_plan=
-WMS_NUMBER_PLAN_TELEPHONY;}T_zUfiSms_CmdStatus zUfiSms_SaveConcatSms(
-T_zUfiSms_SaveReq*ptSaveSms,T_zUfiSms_ConcatInfo*ptConcatSms,T_zUfiSms_GroupInfo
-*ptGroupSms,T_zUfiSms_DbStoreData*ptDbSaveData,int iSmsLen){printf(
+->current_receiver]);}ptDeliver->address.digit_mode=WMS_DIGIT_MODE_4_BIT;
+ptDeliver->address.number_mode=WMS_NUMBER_MODE_NONE_DATA_NETWORK;ptDeliver->
+address.number_plan=WMS_NUMBER_PLAN_TELEPHONY;}T_zUfiSms_CmdStatus 
+zUfiSms_SaveConcatSms(T_zUfiSms_SaveReq*ptSaveSms,T_zUfiSms_ConcatInfo*
+ptConcatSms,T_zUfiSms_GroupInfo*ptGroupSms,T_zUfiSms_DbStoreData*ptDbSaveData,
+int iSmsLen){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x53\x61\x76\x65\x43\x6f\x6e\x63\x61\x74\x53\x6d\x73\x20\x6d\x65\x6d\x5f\x73\x74\x6f\x72\x65\x3d\x25\x64\x28\x4e\x56\x3d\x3d\x30\x31\x29" "\n"
 ,ptSaveSms->mem_store);if(ptSaveSms->mem_store==WMS_STORAGE_TYPE_NV_V01){if(
 ZUFI_FAIL==zUfiSms_WriteSmsToDb(ptDbSaveData,WMS_STORAGE_TYPE_NV_V01,-
-(0x115c+1674-0x17e5))){at_print(LOG_ERR,
+(0x1108+1725-0x17c4))){at_print(LOG_ERR,
 "\x77\x72\x69\x74\x65\x20\x73\x6d\x73\x20\x74\x6f\x20\x6e\x76\x20\x66\x61\x69\x6c\x65\x64\x2e"
 );return WMS_CMD_FAILED;}}else{return WMS_CMD_FAILED;}g_zUfiSms_MsgRefer++;
 ptDbSaveData->msg_ref=g_zUfiSms_MsgRefer;(void)zUfiSms_SetMaxReference(
@@ -795,19 +795,19 @@
 ,T_zUfiSms_GroupInfo*ptGroupSms,int iSmsLength){T_zUfiSms_ClientTsData 
 tClientTsData;T_zUfiSms_ClientMsg tClientMsg;T_zUfiSms_DbStoreData tDbSaveData;
 T_zUfiSms_CmdStatus result=WMS_CMD_SUCCESS;int current_sending=
-(0xc30+3913-0x1b79);if(NULL==ptSaveSms||NULL==ptConcatSms||NULL==ptGroupSms||(-
-(0x1279+1343-0x17b7)==iSmsLength)){return WMS_CMD_FAILED;}for(ptConcatSms->
-current_sending=(0x1640+2894-0x218e);ptConcatSms->current_sending<ptConcatSms->
+(0xe34+4544-0x1ff4);if(NULL==ptSaveSms||NULL==ptConcatSms||NULL==ptGroupSms||(-
+(0x647+6872-0x211e)==iSmsLength)){return WMS_CMD_FAILED;}for(ptConcatSms->
+current_sending=(0xb0+9743-0x26bf);ptConcatSms->current_sending<ptConcatSms->
 total_msg;ptConcatSms->current_sending++){memset((void*)&tClientMsg,
-(0x1dd7+993-0x21b8),sizeof(T_zUfiSms_ClientMsg));memset((void*)&tClientTsData,
-(0x5a7+7812-0x242b),sizeof(T_zUfiSms_ClientTsData));memset((void*)&tDbSaveData,
-(0x254a+166-0x25f0),sizeof(T_zUfiSms_DbStoreData));tClientMsg.msg_hdr.mem_store=
-(ptSaveSms->mem_store==WMS_STORAGE_TYPE_UIM_V01)?WMS_STORAGE_TYPE_UIM_V01:
+(0x57c+4379-0x1697),sizeof(T_zUfiSms_ClientMsg));memset((void*)&tClientTsData,
+(0x1deb+1699-0x248e),sizeof(T_zUfiSms_ClientTsData));memset((void*)&tDbSaveData,
+(0x1972+3227-0x260d),sizeof(T_zUfiSms_DbStoreData));tClientMsg.msg_hdr.mem_store
+=(ptSaveSms->mem_store==WMS_STORAGE_TYPE_UIM_V01)?WMS_STORAGE_TYPE_UIM_V01:
 WMS_STORAGE_TYPE_NV_V01;tClientMsg.msg_hdr.tag=(T_zUfiSms_SmsTag)ptSaveSms->tags
 ;tClientMsg.msg_hdr.message_mode=WMS_MESSAGE_MODE_GW;tClientMsg.u.gw_message.
 is_broadcast=FALSE;tClientTsData.format=WMS_FORMAT_GW_PP;switch(ptSaveSms->tags)
 {case WMS_TAG_TYPE_MO_SENT_V01:case WMS_TAG_TYPE_MO_NOT_SENT_V01:case
-(0x21c+4740-0x149c):{tClientTsData.u.gw_pp.tpdu_type=WMS_TPDU_SUBMIT;(void)
+(0x5a3+2729-0x1048):{tClientTsData.u.gw_pp.tpdu_type=WMS_TPDU_SUBMIT;(void)
 zUfiSms_FillSubmitTpdu(ptConcatSms,ptGroupSms,iSmsLength,&tClientTsData.u.gw_pp.
 u.submit,&tDbSaveData);break;}case WMS_TAG_TYPE_MT_READ_V01:case 
 WMS_TAG_TYPE_MT_NOT_READ_V01:{tClientTsData.u.gw_pp.tpdu_type=WMS_TPDU_DELIVER;(
@@ -819,42 +819,42 @@
 zUfiSms_FillSca(&tClientMsg);zUfiSms_FillDbSaveData(&tClientMsg,&tClientTsData,
 ptConcatSms,ptGroupSms,iSmsLength,&tDbSaveData);strncpy(tDbSaveData.
 draft_group_id,ptSaveSms->draft_group_id,sizeof(tDbSaveData.draft_group_id)-
-(0xd1c+5183-0x215a));if(TRUE==g_zUfiSms_MemFullFlag[ZTE_WMS_MEMORY_NV]){result=
+(0x583+3142-0x11c8));if(TRUE==g_zUfiSms_MemFullFlag[ZTE_WMS_MEMORY_NV]){result=
 WMS_CMD_FAILED;printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x53\x61\x76\x65\x53\x6d\x73\x54\x6f\x44\x62\x20\x4e\x56\x20\x6d\x65\x6d\x6f\x72\x79\x20\x69\x73\x20\x66\x75\x6c\x6c\x2c\x73\x61\x76\x65\x20\x65\x72\x72\x6f\x72" "\n"
-);}else{if(tDbSaveData.concat_sms==(0xb1c+5315-0x1fde)){result=
+);}else{if(tDbSaveData.concat_sms==(0xfd9+1617-0x1629)){result=
 zUfiSms_SaveConcatSms(ptSaveSms,ptConcatSms,ptGroupSms,&tDbSaveData,iSmsLength);
-current_sending=ptConcatSms->current_sending+(0x369+2365-0xca5);if(ptConcatSms->
-sms_len<iSmsLength*(current_sending+(0x1038+1009-0x1428))){iSmsLength=
+current_sending=ptConcatSms->current_sending+(0x985+7374-0x2652);if(ptConcatSms
+->sms_len<iSmsLength*(current_sending+(0x495+8695-0x268b))){iSmsLength=
 ptConcatSms->sms_len-iSmsLength*current_sending;}}else{result=
 zUfiSms_SaveNormalSms(ptSaveSms,&tDbSaveData);}}}return result;}int 
-zUfiSms_DeleteSmsInSim(){char str_index[(0x11ff+4700-0x23db)]={(0xc4+2905-0xc1d)
-};int index=(0x8b+9812-0x26df);int is_cc=(0xe36+4008-0x1dde);int iSmsId=
-(0x2400+225-0x24e1);T_zUfiSms_ModifyTag tDeleteInfo={(0x175f+2680-0x21d7)};char 
-StrValue[(0xefa+1307-0x140b)]={(0x181a+1927-0x1fa1)};memset(&tDeleteInfo,
-(0x50c+6879-0x1feb),sizeof(T_zUfiSms_ModifyTag));iSmsId=g_zUfiSms_DelMsg.sim_id[
-g_zUfiSms_DelMsg.sim_index];if(-(0x94f+4648-0x1b76)==(is_cc=zUfiSms_IsConcatSms(
-iSmsId))){printf(
+zUfiSms_DeleteSmsInSim(){char str_index[(0x1c84+2649-0x265d)]={
+(0x6f5+3832-0x15ed)};int index=(0x43a+158-0x4d8);int is_cc=(0xeb3+2465-0x1854);
+int iSmsId=(0x1293+3129-0x1ecc);T_zUfiSms_ModifyTag tDeleteInfo={
+(0x1070+1682-0x1702)};char StrValue[(0x20da+929-0x2471)]={(0x16a0+1151-0x1b1f)};
+memset(&tDeleteInfo,(0x340+7147-0x1f2b),sizeof(T_zUfiSms_ModifyTag));iSmsId=
+g_zUfiSms_DelMsg.sim_id[g_zUfiSms_DelMsg.sim_index];if(-(0x364+6837-0x1e18)==(
+is_cc=zUfiSms_IsConcatSms(iSmsId))){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x44\x65\x6c\x65\x74\x65\x53\x6d\x73\x49\x6e\x53\x69\x6d\x20\x63\x68\x65\x63\x6b\x20\x63\x6f\x6e\x63\x61\x74\x20\x66\x61\x69\x6c\x65\x64\x2e" "\n"
 );return ZUFI_FAIL;}printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x44\x65\x6c\x65\x74\x65\x53\x6d\x73\x49\x6e\x53\x69\x6d\x20\x69\x73\x5f\x63\x63\x3a\x25\x64\x2c\x20\x69\x64\x3d\x25\x64" "\n"
-,is_cc,iSmsId);if((0x1406+83-0x1458)==is_cc){if(ZUFI_FAIL==zUfiSms_GetSmsIndex(
+,is_cc,iSmsId);if((0x229+3917-0x1175)==is_cc){if(ZUFI_FAIL==zUfiSms_GetSmsIndex(
 iSmsId,&tDeleteInfo,is_cc)){return ZUFI_FAIL;}g_zUfiSms_DelMsg.sim_index++;
 g_zUfiSms_DelMsg.sim_index_count--;while(tDeleteInfo.num_of_indices>
-(0x5c+2476-0xa08)){index=tDeleteInfo.indices[tDeleteInfo.id_index];g_deleteIndex
-.index[g_deleteIndex.total]=index;g_deleteIndex.total++;tDeleteInfo.id_index++;
-tDeleteInfo.num_of_indices--;}}else{memset(str_index,(0x65f+3733-0x14f4),sizeof(
-str_index));if(ZUFI_FAIL==zUfiSms_GetStorePosById("\x69\x6e\x64",str_index,
-sizeof(str_index),iSmsId)){at_print(LOG_ERR,
+(0x1811+24-0x1829)){index=tDeleteInfo.indices[tDeleteInfo.id_index];
+g_deleteIndex.index[g_deleteIndex.total]=index;g_deleteIndex.total++;tDeleteInfo
+.id_index++;tDeleteInfo.num_of_indices--;}}else{memset(str_index,
+(0xab4+6156-0x22c0),sizeof(str_index));if(ZUFI_FAIL==zUfiSms_GetStorePosById(
+"\x69\x6e\x64",str_index,sizeof(str_index),iSmsId)){at_print(LOG_ERR,
 "\x67\x65\x74\x20\x69\x6e\x64\x65\x78\x20\x66\x72\x6f\x6d\x20\x64\x62\x20\x66\x61\x69\x6c\x64\x2e"
 );return ZUFI_FAIL;}index=atoi(str_index);g_deleteIndex.index[g_deleteIndex.
 total]=index;g_deleteIndex.total++;g_zUfiSms_DelMsg.sim_index++;g_zUfiSms_DelMsg
 .sim_index_count--;}(void)zUfiSms_DeleteSmsInDb();return ZUFI_SUCC;}
-T_zUfiSms_CmdStatus zUfiSms_DeleteSimSms(VOID){int atRes=(0xb34+6970-0x266e);
-char StrValue[(0x635+266-0x735)]={(0x5df+7433-0x22e8)};zUfiSms_SetSmsLocation(
-SMS_LOCATION_SIM);memset(&g_deleteIndex,(0x758+3068-0x1354),sizeof(
+T_zUfiSms_CmdStatus zUfiSms_DeleteSimSms(VOID){int atRes=(0xb14+157-0xbb1);char 
+StrValue[(0x13fc+3215-0x2081)]={(0x175b+3769-0x2614)};zUfiSms_SetSmsLocation(
+SMS_LOCATION_SIM);memset(&g_deleteIndex,(0x1cf4+199-0x1dbb),sizeof(
 T_zUfiSms_DelIndexInfo));while(g_zUfiSms_DelMsg.sim_index_count>
-(0x4ab+4771-0x174e)){if(ZUFI_FAIL==zUfiSms_DeleteSmsInSim()){printf(
+(0x13f0+733-0x16cd)){if(ZUFI_FAIL==zUfiSms_DeleteSmsInSim()){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x44\x65\x6c\x65\x74\x65\x53\x69\x6d\x53\x6d\x73\x20\x64\x65\x6c\x65\x74\x65\x20\x61\x6c\x6c\x3a\x25\x64\x20\x73\x6d\x73\x20\x66\x61\x69\x6c\x65\x64" "\n"
 ,WMS_STORAGE_TYPE_UIM_V01);return WMS_CMD_FAILED;}}while(g_deleteIndex.cur_index
 <g_deleteIndex.total){atRes=zSms_SendCmgdReq(g_deleteIndex.index[g_deleteIndex.
@@ -863,70 +863,69 @@
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x44\x65\x6c\x65\x74\x65\x53\x69\x6d\x53\x6d\x73\x20\x73\x75\x63\x63\x65\x73\x73" "\n"
 );return WMS_CMD_SUCCESS;}void zUfiSms_GetReportStatus(char*pdu_tmp,int*stat){
 unsigned char tmp;unsigned char first_octet;if(pdu_tmp==NULL){return;}(void)
-String2Bytes(pdu_tmp,&tmp,(0x58b+3126-0x11bf));if(tmp==(0x18b1+258-0x19b3)){
-pdu_tmp+=(0x35b+1849-0xa92);}else{tmp=(tmp+(0x5fa+3129-0x1232))*
-(0x210+2802-0xd00);pdu_tmp+=tmp;}(void)String2Bytes(pdu_tmp,&tmp,
-(0x1313+1044-0x1725));first_octet=tmp;if(first_octet&(0x99d+2214-0x1241)){*stat=
-(0x21d8+397-0x2360);}}T_zUfiSms_TpduType zUfiSms_GetTpduType(UINT8*pData){
-T_zUfiSms_TpduType iTpduType;UINT8 mti=(0x7f1+1758-0xecf);mti=(
-T_zUfiSms_TpduType)(pData[(0x4ad+5209-0x1906)]&(0x1381+3889-0x22af));switch(mti)
-{case(0x3fd+102-0x463):iTpduType=WMS_TPDU_DELIVER;break;case(0xbec+6028-0x2377):
-iTpduType=WMS_TPDU_SUBMIT;break;case(0x67d+6384-0x1f6b):iTpduType=
-WMS_TPDU_STATUS_REPORT;break;default:iTpduType=WMS_TPDU_MAX;break;}return 
-iTpduType;}static void zUfiSms_FormatDeliverNumber(wms_address_s_type tAddress,
-unsigned char*pNumber){UINT8 number_type=(0x706+692-0x9ba);memset(pNumber,
-(0x3ca+6983-0x1f11),ZTE_WMS_ADDRESS_LEN_MAX+(0x2b+1384-0x592));if(tAddress.
-number_type==WMS_NUMBER_INTERNATIONAL){pNumber[(0x48b+299-0x5b6)]=
-((char)(0x14e5+3706-0x2334));pNumber++;}if(tAddress.digit_mode!=
+String2Bytes(pdu_tmp,&tmp,(0x5ab+7294-0x2227));if(tmp==(0xa16+597-0xc6b)){
+pdu_tmp+=(0x6fc+39-0x721);}else{tmp=(tmp+(0x4c0+5747-0x1b32))*
+(0xb61+2915-0x16c2);pdu_tmp+=tmp;}(void)String2Bytes(pdu_tmp,&tmp,
+(0x4b2+8026-0x240a));first_octet=tmp;if(first_octet&(0x11b5+2294-0x1aa9)){*stat=
+(0x8d6+1447-0xe78);}}T_zUfiSms_TpduType zUfiSms_GetTpduType(UINT8*pData){
+T_zUfiSms_TpduType iTpduType;UINT8 mti=(0x1924+825-0x1c5d);mti=(
+T_zUfiSms_TpduType)(pData[(0xb55+4445-0x1cb2)]&(0x104b+4864-0x2348));switch(mti)
+{case(0x2020+1361-0x2571):iTpduType=WMS_TPDU_DELIVER;break;case
+(0x1138+4573-0x2314):iTpduType=WMS_TPDU_SUBMIT;break;case(0xde6+6055-0x258b):
+iTpduType=WMS_TPDU_STATUS_REPORT;break;default:iTpduType=WMS_TPDU_MAX;break;}
+return iTpduType;}static void zUfiSms_FormatDeliverNumber(wms_address_s_type 
+tAddress,unsigned char*pNumber){UINT8 number_type=(0x106d+1438-0x160b);memset(
+pNumber,(0xacd+7036-0x2649),ZTE_WMS_ADDRESS_LEN_MAX+(0x751+798-0xa6e));if(
+tAddress.number_type==WMS_NUMBER_INTERNATIONAL){pNumber[(0x1c58+937-0x2001)]=
+((char)(0x1ba+2975-0xd2e));pNumber++;}if(tAddress.digit_mode!=
 WMS_DIGIT_MODE_8_BIT){(void)zUfiSms_SmsiAddrToStr(tAddress,(byte*)pNumber,&
 number_type);}else{memcpy(pNumber,tAddress.digits,tAddress.number_of_digits*
-sizeof(tAddress.digits[(0x1c6b+1717-0x2320)]));}}byte*zUfiSms_UtilTimeStamp(
+sizeof(tAddress.digits[(0x1f9f+1254-0x2485)]));}}byte*zUfiSms_UtilTimeStamp(
 T_zUfiSms_TimeStamp zte_wms_time,byte*res_ptr,T_zUfiSms_Date*date){UINT8 tmp;if(
-NULL==date){return NULL;}*res_ptr++=((char)(0xa61+6164-0x2253));tmp=zte_wms_time
-.year;res_ptr=zUfiSms_SmsiUtilitoaFill((tmp&(0x2d0+6770-0x1d33))+((tmp>>
-(0x23+9041-0x2370))*(0x14ea+614-0x1746)),res_ptr);zUfiSms_SprintfTime(date->year
-,sizeof(date->year),zte_wms_time.year);*res_ptr++=((char)(0x2b2+4073-0x126c));
-tmp=zte_wms_time.month;res_ptr=zUfiSms_SmsiUtilitoaFill((tmp&(0xd52+6449-0x2674)
-)+((tmp>>(0x1e34+1292-0x233c))*(0x4e8+6202-0x1d18)),res_ptr);zUfiSms_SprintfTime
-(date->month,sizeof(date->month),zte_wms_time.month);*res_ptr++=
-((char)(0xeb8+3288-0x1b61));tmp=zte_wms_time.day;res_ptr=
-zUfiSms_SmsiUtilitoaFill((tmp&(0x1612+3326-0x2301))+((tmp>>(0x2d+3244-0xcd5))*
-(0x4ef+4286-0x15a3)),res_ptr);zUfiSms_SprintfTime(date->day,sizeof(date->day),
-zte_wms_time.day);*res_ptr++=((char)(0xac2+4180-0x1aea));tmp=zte_wms_time.hour;
-res_ptr=zUfiSms_SmsiUtilitoaFill((tmp&(0x2f0+6213-0x1b26))+((tmp>>
-(0x3fb+5027-0x179a))*(0x177+5316-0x1631)),res_ptr);zUfiSms_SprintfTime(date->
-hour,sizeof(date->hour),zte_wms_time.hour);*res_ptr++=
-((char)(0x1de7+1431-0x2344));tmp=zte_wms_time.minute;res_ptr=
-zUfiSms_SmsiUtilitoaFill((tmp&(0x786+4224-0x17f7))+((tmp>>(0xa18+5712-0x2064))*
-(0x116a+1583-0x178f)),res_ptr);zUfiSms_SprintfTime(date->min,sizeof(date->min),
-zte_wms_time.minute);*res_ptr++=((char)(0x23fb+366-0x252f));tmp=zte_wms_time.
-second;res_ptr=zUfiSms_SmsiUtilitoaFill((tmp&(0x152b+3475-0x22af))+((tmp>>
-(0x1570+975-0x193b))*(0x17b7+1178-0x1c47)),res_ptr);zUfiSms_SprintfTime(date->
-sec,sizeof(date->sec),zte_wms_time.second);if(zte_wms_time.timezone<
-(0x736+3858-0x1648)){*res_ptr++=((char)(0xf3d+5964-0x265c));tmp=(UINT8)(
-zte_wms_time.timezone*(-(0x1214+903-0x159a)));snprintf(date->timezone,sizeof(
-date->timezone),"\x2d\x25\x64",-(0x212a+908-0x24b5)*zte_wms_time.timezone);}else
-{*res_ptr++=((char)(0x1ca+8217-0x21b8));tmp=(UINT8)zte_wms_time.timezone;
-snprintf(date->timezone,sizeof(date->timezone),"\x2b\x25\x64",zte_wms_time.
-timezone);}res_ptr=zUfiSms_SmsiUtilitoaFill(tmp,res_ptr);*res_ptr++=
-((char)(0x13f+53-0x152));return res_ptr;}T_zUfiSms_CmdStatus 
-zUfiSms_HandleReport(unsigned char*ptPduData){T_zUfiSms_RawTsData tRawTsData;
-T_zUfiSms_ClientTsData tClientTsData;int iReportStatus=(0x34+8622-0x21e2);
-unsigned char acDeliverNumber[ZTE_WMS_ADDRESS_LEN_MAX+(0x148c+873-0x17f4)];
-unsigned char tTpScts[ZTE_WMS_TP_SCTS_LEN_MAX+(0x15cc+3853-0x24d8)];
-T_zUfiSms_Date tSmsDate;char acRecFlag[(0x1d96+2324-0x26a5)]={
-(0x19da+817-0x1d0b)};int iRpCount=(0x1c72+1197-0x211f);char tmp[
-(0xa6c+5874-0x2154)];int tmp_i=(0x3c8+4672-0x1608);unsigned int pos=
-(0x7e5+6792-0x226d);if(NULL==ptPduData){return WMS_CMD_FAILED;}memset(
-acDeliverNumber,(0x1310+4301-0x23dd),sizeof(acDeliverNumber));memset(&tSmsDate,
-(0x1efb+1771-0x25e6),sizeof(T_zUfiSms_Date));memset(tTpScts,(0x792+3363-0x14b5),
-sizeof(tTpScts));memset(&tRawTsData,(0x97b+7234-0x25bd),sizeof(
-T_zUfiSms_RawTsData));memset(&tClientTsData,(0xf35+1989-0x16fa),sizeof(
+NULL==date){return NULL;}*res_ptr++=((char)(0xe11+743-0x10d6));tmp=zte_wms_time.
+year;res_ptr=zUfiSms_SmsiUtilitoaFill((tmp&(0x7d8+1081-0xc02))+((tmp>>
+(0x27a+9051-0x25d1))*(0x6bd+7464-0x23db)),res_ptr);zUfiSms_SprintfTime(date->
+year,sizeof(date->year),zte_wms_time.year);*res_ptr++=((char)(0x37+1104-0x458));
+tmp=zte_wms_time.month;res_ptr=zUfiSms_SmsiUtilitoaFill((tmp&(0x943+6915-0x2437)
+)+((tmp>>(0x1f5b+183-0x200e))*(0x961+3896-0x188f)),res_ptr);zUfiSms_SprintfTime(
+date->month,sizeof(date->month),zte_wms_time.month);*res_ptr++=
+((char)(0x1065+1967-0x17e5));tmp=zte_wms_time.day;res_ptr=
+zUfiSms_SmsiUtilitoaFill((tmp&(0x155c+2639-0x1f9c))+((tmp>>(0x53d+5165-0x1966))*
+(0x59c+4450-0x16f4)),res_ptr);zUfiSms_SprintfTime(date->day,sizeof(date->day),
+zte_wms_time.day);*res_ptr++=((char)(0x1ae6+1351-0x2001));tmp=zte_wms_time.hour;
+res_ptr=zUfiSms_SmsiUtilitoaFill((tmp&(0xcd7+4186-0x1d22))+((tmp>>
+(0x8c7+1264-0xdb3))*(0x298+9337-0x2707)),res_ptr);zUfiSms_SprintfTime(date->hour
+,sizeof(date->hour),zte_wms_time.hour);*res_ptr++=((char)(0x536+4136-0x1524));
+tmp=zte_wms_time.minute;res_ptr=zUfiSms_SmsiUtilitoaFill((tmp&
+(0xc71+4984-0x1fda))+((tmp>>(0xf1d+1542-0x151f))*(0x426+3978-0x13a6)),res_ptr);
+zUfiSms_SprintfTime(date->min,sizeof(date->min),zte_wms_time.minute);*res_ptr++=
+((char)(0x346+6501-0x1c71));tmp=zte_wms_time.second;res_ptr=
+zUfiSms_SmsiUtilitoaFill((tmp&(0x14a4+3818-0x237f))+((tmp>>(0x7cb+7174-0x23cd))*
+(0x7a6+529-0x9ad)),res_ptr);zUfiSms_SprintfTime(date->sec,sizeof(date->sec),
+zte_wms_time.second);if(zte_wms_time.timezone<(0x1c5b+2299-0x2556)){*res_ptr++=
+((char)(0x1acc+2779-0x257a));tmp=(UINT8)(zte_wms_time.timezone*(-
+(0xf6a+1219-0x142c)));snprintf(date->timezone,sizeof(date->timezone),
+"\x2d\x25\x64",-(0x26d+3387-0xfa7)*zte_wms_time.timezone);}else{*res_ptr++=
+((char)(0x132c+3313-0x1ff2));tmp=(UINT8)zte_wms_time.timezone;snprintf(date->
+timezone,sizeof(date->timezone),"\x2b\x25\x64",zte_wms_time.timezone);}res_ptr=
+zUfiSms_SmsiUtilitoaFill(tmp,res_ptr);*res_ptr++=((char)(0xc54+2350-0x1560));
+return res_ptr;}T_zUfiSms_CmdStatus zUfiSms_HandleReport(unsigned char*ptPduData
+){T_zUfiSms_RawTsData tRawTsData;T_zUfiSms_ClientTsData tClientTsData;int 
+iReportStatus=(0x5f3+2643-0x1046);unsigned char acDeliverNumber[
+ZTE_WMS_ADDRESS_LEN_MAX+(0x3af+2866-0xee0)];unsigned char tTpScts[
+ZTE_WMS_TP_SCTS_LEN_MAX+(0x1c1c+2659-0x267e)];T_zUfiSms_Date tSmsDate;char 
+acRecFlag[(0x21b5+82-0x2202)]={(0xda+237-0x1c7)};int iRpCount=
+(0x6a6+7620-0x246a);char tmp[(0x316+6675-0x1d1f)];int tmp_i=(0x738+6122-0x1f22);
+unsigned int pos=(0x1530+4538-0x26ea);if(NULL==ptPduData){return WMS_CMD_FAILED;
+}memset(acDeliverNumber,(0x138+4636-0x1354),sizeof(acDeliverNumber));memset(&
+tSmsDate,(0xe0f+201-0xed8),sizeof(T_zUfiSms_Date));memset(tTpScts,
+(0x5c6+263-0x6cd),sizeof(tTpScts));memset(&tRawTsData,(0x14bf+1665-0x1b40),
+sizeof(T_zUfiSms_RawTsData));memset(&tClientTsData,(0x18b3+1734-0x1f79),sizeof(
 T_zUfiSms_ClientTsData));snprintf(tmp,sizeof(tmp),"\x25\x58",ptPduData[
-(0x2e1+2823-0xde8)]);tmp_i=atoi(tmp);if(tmp_i<(0xfb0+5738-0x261a)||tmp_i>INT_MAX
--(0x214+8614-0x23b9)){at_print(LOG_ERR,
+(0x916+2229-0x11cb)]);tmp_i=atoi(tmp);if(tmp_i<(0x142+3587-0xf45)||tmp_i>INT_MAX
+-(0x192f+2953-0x24b7)){at_print(LOG_ERR,
 "\x5b\x53\x4d\x53\x5d\x70\x74\x50\x64\x75\x44\x61\x74\x61\x20\x65\x72\x72\x3a\x25\x64" "\n"
-,tmp_i);return WMS_CMD_FAILED;}pos=tmp_i+(0x1e42+1385-0x23aa);if(pos>=
+,tmp_i);return WMS_CMD_FAILED;}pos=tmp_i+(0x1c42+2047-0x2440);if(pos>=
 ZSMS_PDU_SIZE){return WMS_CMD_FAILED;}memcpy((void*)tRawTsData.data,(void*)(
 ptPduData+pos),sizeof(tRawTsData.data));tRawTsData.tpdu_type=zUfiSms_GetTpduType
 (ptPduData+pos);tRawTsData.format=WMS_FORMAT_GW_PP;(void)wms_ts_decode(&
@@ -935,60 +934,60 @@
 "\x64\x6f\x65\x73\x20\x6e\x6f\x74\x20\x67\x77\x2f\x77\x63\x64\x6d\x61\x20\x73\x6d\x73\x20\x72\x65\x70\x6f\x72\x74\x20\x73\x74\x61\x74\x75\x73\x2e"
 );return WMS_CMD_FAILED;}switch(tClientTsData.u.gw_pp.u.status_report.tp_status)
 {case WMS_TP_STATUS_RECEIVED_OK:case WMS_TP_STATUS_UNABLE_TO_CONFIRM_DELIVERY:
-case WMS_TP_STATUS_REPLACED:{iReportStatus=(0x11d+868-0x480);break;}case 
+case WMS_TP_STATUS_REPLACED:{iReportStatus=(0x694+5038-0x1a41);break;}case 
 WMS_TP_STATUS_TRYING_CONGESTION:case WMS_TP_STATUS_TRYING_SME_BUSY:case 
 WMS_TP_STATUS_TRYING_NO_RESPONSE_FROM_SME:case 
 WMS_TP_STATUS_TRYING_SERVICE_REJECTED:case 
 WMS_TP_STATUS_TRYING_QOS_NOT_AVAILABLE:case WMS_TP_STATUS_TRYING_SME_ERROR:{
-iReportStatus=(0xba5+2022-0x1388);break;}default:{iReportStatus=
-(0xae3+2190-0x136f);break;}}zUfiSms_FormatDeliverNumber(tClientTsData.u.gw_pp.u.
+iReportStatus=(0x9b6+4665-0x1bec);break;}default:{iReportStatus=
+(0x2da+1415-0x85f);break;}}zUfiSms_FormatDeliverNumber(tClientTsData.u.gw_pp.u.
 status_report.address,acDeliverNumber);(void)zUfiSms_UtilTimeStamp(tClientTsData
 .u.gw_pp.u.status_report.timestamp,tTpScts,&tSmsDate);if(ZUFI_FAIL==
 zUfiSms_InsertReportStatusToDb(acDeliverNumber,&tSmsDate,iReportStatus)){
 at_print(LOG_ERR,
 "\x75\x70\x64\x61\x74\x65\x20\x73\x6d\x73\x20\x72\x65\x70\x6f\x72\x74\x20\x73\x74\x61\x74\x75\x73\x20\x66\x61\x69\x6c\x65\x64\x2e"
-);return WMS_CMD_FAILED;}memset(acRecFlag,(0x15bd+1894-0x1d23),sizeof(acRecFlag)
-);sc_cfg_get(ZTE_WMS_NVCONFIG_SMS_REPORT,acRecFlag,sizeof(acRecFlag));iRpCount=
-atoi(acRecFlag);if(iRpCount<(0xe8c+1094-0x12d2)||iRpCount>INT_MAX-
-(0x2a7+4108-0x12b2)){at_print(LOG_ERR,
+);return WMS_CMD_FAILED;}memset(acRecFlag,(0x4d3+5925-0x1bf8),sizeof(acRecFlag))
+;sc_cfg_get(ZTE_WMS_NVCONFIG_SMS_REPORT,acRecFlag,sizeof(acRecFlag));iRpCount=
+atoi(acRecFlag);if(iRpCount<(0x3fa+63-0x439)||iRpCount>INT_MAX-
+(0x1b0a+1165-0x1f96)){at_print(LOG_ERR,
 "\x5b\x53\x4d\x53\x5d\x69\x52\x70\x43\x6f\x75\x6e\x74\x20\x65\x72\x72\x3a\x25\x64" "\n"
-,iRpCount);return WMS_CMD_FAILED;}memset(acRecFlag,(0xf38+5037-0x22e5),sizeof(
+,iRpCount);return WMS_CMD_FAILED;}memset(acRecFlag,(0x1cab+2591-0x26ca),sizeof(
 acRecFlag));snprintf(acRecFlag,sizeof(acRecFlag),"\x25\x64",iRpCount+
-(0xe78+1894-0x15dd));sc_cfg_set(ZTE_WMS_NVCONFIG_SMS_REPORT,acRecFlag);return 
+(0x3e1+7786-0x224a));sc_cfg_set(ZTE_WMS_NVCONFIG_SMS_REPORT,acRecFlag);return 
 WMS_CMD_SUCCESS;}void zUfiSms_DelModemSms(int in_index){
-#if (0xf33+5557-0x24e8) 
-char StrValue[(0x18ab+2118-0x20e7)]={(0xe9c+5658-0x24b6)};printf(
+#if (0x1fcc+62-0x200a) 
+char StrValue[(0xe08+1541-0x1403)]={(0x1a5+2813-0xca2)};printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x44\x65\x6c\x4d\x6f\x64\x65\x6d\x53\x6d\x73\x20\x66\x75\x6e\x20\x75\x73\x65\x64\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21" "\n"
 );snat_print(LOG_DEBUGStrValue,sizeof(StrValue),"\x25\x64",in_index);
 zSvr_InnerSendMsg(ZUFI_MODULE_ID_AT_LOCAL,ZUFI_MODULE_ID_AT_UNSOLI,
 MSG_CMD_AT_DEL_SIM_SMS,strlen(StrValue),StrValue);
 #endif

-int atRes=(0x461+2479-0xe10);atRes=zSms_SendCmgdReq(in_index);if(atRes==
+int atRes=(0x4f5+1155-0x978);atRes=zSms_SendCmgdReq(in_index);if(atRes==
 ZSMS_RESULT_OK){zSms_RecvCmgdOk();}else{zSms_RecvCmgdErr();}zSms_RecvCmgdFinish(
 );}VOID zUfiSms_getModifyInfo(T_zUfiSms_ModifyFlag*ptModifyBuff){int i=
-(0x214f+763-0x244a);memset(&g_zUfiSms_modifyMsg,(0xb08+1679-0x1197),sizeof(
-T_zUfiSms_ModifySms));for(i=(0x1b1+601-0x40a);i<ptModifyBuff->total_id;i++){
+(0x7df+4661-0x1a14);memset(&g_zUfiSms_modifyMsg,(0x3e3+4355-0x14e6),sizeof(
+T_zUfiSms_ModifySms));for(i=(0x636+6454-0x1f6c);i<ptModifyBuff->total_id;i++){
 g_zUfiSms_modifyMsg.sim_id[g_zUfiSms_modifyMsg.sim_count]=ptModifyBuff->id[i];
 g_zUfiSms_modifyMsg.sim_count++;g_zUfiSms_modifyMsg.sim_index_count++;}}int 
-zUfiSms_GetUnreadSmsIndexInSim(){char str_index[(0x622+4905-0x18cb)]={
-(0x6c8+7426-0x23ca)};int index=(0x52b+3291-0x1206);int is_cc=
-(0x1d7c+1718-0x2432);int iSmsId=(0x1aec+1696-0x218c);T_zUfiSms_ModifyTag 
-tModifyInfo={(0xa9+523-0x2b4)};char StrValue[(0x1751+261-0x184c)]={
-(0x41c+8732-0x2638)};memset(&tModifyInfo,(0xa48+6225-0x2299),sizeof(
+zUfiSms_GetUnreadSmsIndexInSim(){char str_index[(0x1039+1243-0x1494)]={
+(0x131d+3529-0x20e6)};int index=(0x10cd+1436-0x1669);int is_cc=
+(0x80+4351-0x117f);int iSmsId=(0xde1+1277-0x12de);T_zUfiSms_ModifyTag 
+tModifyInfo={(0x8a8+2378-0x11f2)};char StrValue[(0x120+6123-0x1901)]={
+(0x30a+2854-0xe30)};memset(&tModifyInfo,(0x109f+2500-0x1a63),sizeof(
 T_zUfiSms_ModifyTag));iSmsId=g_zUfiSms_modifyMsg.sim_id[g_zUfiSms_modifyMsg.
-sim_index];if(-(0x2528+109-0x2594)==(is_cc=zUfiSms_IsConcatSms(iSmsId))){
+sim_index];if(-(0x13eb+4122-0x2404)==(is_cc=zUfiSms_IsConcatSms(iSmsId))){
 at_print(LOG_ERR,
 "\x63\x68\x65\x63\x6b\x20\x63\x6f\x6e\x63\x61\x74\x20\x66\x61\x69\x6c\x65\x64\x2e"
 );return ZUFI_FAIL;}printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x47\x65\x74\x55\x6e\x72\x65\x61\x64\x53\x6d\x73\x49\x6e\x64\x65\x78\x49\x6e\x53\x69\x6d\x20\x69\x73\x5f\x63\x63\x3a\x25\x64"
-,is_cc);if((0x321+1200-0x7d0)==is_cc){if(ZUFI_FAIL==zUfiSms_GetSmsIndex(iSmsId,&
+,is_cc);if((0x1b6+2887-0xcfc)==is_cc){if(ZUFI_FAIL==zUfiSms_GetSmsIndex(iSmsId,&
 tModifyInfo,is_cc)){return ZUFI_FAIL;}g_zUfiSms_modifyMsg.sim_index++;
 g_zUfiSms_modifyMsg.sim_index_count--;while(tModifyInfo.num_of_indices>
-(0x319+6917-0x1e1e)){index=tModifyInfo.indices[tModifyInfo.id_index];
+(0x466+3655-0x12ad)){index=tModifyInfo.indices[tModifyInfo.id_index];
 g_modifyIndex.index[g_modifyIndex.total]=index;g_modifyIndex.total++;tModifyInfo
 .id_index++;tModifyInfo.num_of_indices--;printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x47\x65\x74\x55\x6e\x72\x65\x61\x64\x53\x6d\x73\x49\x6e\x64\x65\x78\x49\x6e\x53\x69\x6d\x20\x5b\x31\x20\x3d\x3d\x20\x69\x73\x5f\x63\x63\x5d\x20\x69\x6e\x64\x65\x78\x20\x3d\x20\x25\x64\x2c\x20\x74\x6f\x74\x61\x6c\x3d\x25\x64" "\n"
-,index,g_modifyIndex.total);}}else{memset(str_index,(0x20b9+154-0x2153),sizeof(
+,index,g_modifyIndex.total);}}else{memset(str_index,(0x6dd+7953-0x25ee),sizeof(
 str_index));if(ZUFI_FAIL==zUfiSms_GetStorePosById("\x69\x6e\x64",str_index,
 sizeof(str_index),iSmsId)){at_print(LOG_ERR,
 "\x67\x65\x74\x20\x69\x6e\x64\x65\x78\x20\x66\x72\x6f\x6d\x20\x64\x62\x20\x66\x61\x69\x6c\x64\x2e"
@@ -997,14 +996,14 @@
 g_zUfiSms_modifyMsg.sim_index_count--;printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x47\x65\x74\x55\x6e\x72\x65\x61\x64\x53\x6d\x73\x49\x6e\x64\x65\x78\x49\x6e\x53\x69\x6d\x20\x5b\x31\x20\x21\x3d\x20\x69\x73\x5f\x63\x63\x5d\x69\x6e\x64\x65\x78\x20\x3d\x20\x25\x64\x2c\x20\x74\x6f\x74\x61\x6c\x3d\x25\x64" "\n"
 ,index,g_modifyIndex.total);}return ZUFI_SUCC;}void zUfiSms_ModifyModemSms(
-T_zUfiSms_ModifyFlag*ptModifyBuff){int atRes=(0x95c+1732-0x1020);char StrValue[
-(0xb4f+5648-0x2155)]={(0x1110+941-0x14bd)};printf(
+T_zUfiSms_ModifyFlag*ptModifyBuff){int atRes=(0x411+6927-0x1f20);char StrValue[
+(0x1fbc+532-0x21c6)]={(0x4ad+1591-0xae4)};printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x4d\x6f\x64\x69\x66\x79\x4d\x6f\x64\x65\x6d\x53\x6d\x73\x20\x70\x74\x4d\x6f\x64\x69\x66\x79\x42\x75\x66\x66\x2d\x3e\x74\x79\x70\x65\x20\x3d\x20\x25\x64\x21" "\n"
 ,ptModifyBuff->type);{zUfiSms_getModifyInfo(ptModifyBuff);memset(&g_modifyIndex,
-(0x17c+5316-0x1640),sizeof(T_zUfiSms_ModifyIndexInfo));printf(
+(0x67c+6234-0x1ed6),sizeof(T_zUfiSms_ModifyIndexInfo));printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x4d\x6f\x64\x69\x66\x79\x4d\x6f\x64\x65\x6d\x53\x6d\x73\x20\x70\x74\x4d\x6f\x64\x69\x66\x79\x42\x75\x66\x66\x2d\x3e\x74\x6f\x74\x61\x6c\x5f\x69\x64\x20\x3d\x20\x25\x64\x21" "\n"
 ,ptModifyBuff->total_id);while(g_zUfiSms_modifyMsg.sim_index_count>
-(0x75+6487-0x19cc)){if(ZUFI_FAIL==zUfiSms_GetUnreadSmsIndexInSim()){at_print(
+(0x2073+1204-0x2527)){if(ZUFI_FAIL==zUfiSms_GetUnreadSmsIndexInSim()){at_print(
 LOG_ERR,
 "\x64\x65\x6c\x65\x74\x65\x20\x61\x6c\x6c\x3a\x25\x64\x20\x73\x6d\x73\x20\x66\x61\x69\x6c\x65\x64" "\n"
 ,WMS_STORAGE_TYPE_UIM_V01);return;}}while(g_modifyIndex.cur_index<g_modifyIndex.
@@ -1023,22 +1022,22 @@
 zUfiSms_DecodeSmsData(T_zUfiSms_DbStoreData*pDb_Data,int msg_index,
 zUfiSms_StoreType iStorePos,T_SmsStatus bSms_Status,wms_message_format_enum_v01 
 format,long iPdu_Len,unsigned char*pPdu_Received){T_zUfiSms_RawTsData raw_ts;
-T_zUfiSms_ClientTsData ts_data_ptr;char tmp[(0x2f+3699-0xe98)];int tmp_i=
-(0xdd6+1489-0x13a7);unsigned int pos=(0x19d2+1913-0x214b);int result=ZUFI_SUCC;
-if(NULL==pDb_Data){return ZUFI_FAIL;}pDb_Data->mem_store=(unsigned long)
-iStorePos;pDb_Data->index=(unsigned short)msg_index;if(RECEIVED_UNREAD==
-bSms_Status){pDb_Data->tag=WMS_TAG_TYPE_MT_NOT_READ_V01;}else if(RECEIVED_READ==
-bSms_Status){pDb_Data->tag=WMS_TAG_TYPE_MT_READ_V01;}else if(STORED_UNSEND==
-bSms_Status){pDb_Data->tag=WMS_TAG_TYPE_MO_NOT_SENT_V01;}else{pDb_Data->tag=
+T_zUfiSms_ClientTsData ts_data_ptr;char tmp[(0x105c+640-0x12d2)];int tmp_i=
+(0xd02+1115-0x115d);unsigned int pos=(0x544+7358-0x2202);int result=ZUFI_SUCC;if
+(NULL==pDb_Data){return ZUFI_FAIL;}pDb_Data->mem_store=(unsigned long)iStorePos;
+pDb_Data->index=(unsigned short)msg_index;if(RECEIVED_UNREAD==bSms_Status){
+pDb_Data->tag=WMS_TAG_TYPE_MT_NOT_READ_V01;}else if(RECEIVED_READ==bSms_Status){
+pDb_Data->tag=WMS_TAG_TYPE_MT_READ_V01;}else if(STORED_UNSEND==bSms_Status){
+pDb_Data->tag=WMS_TAG_TYPE_MO_NOT_SENT_V01;}else{pDb_Data->tag=
 WMS_TAG_TYPE_MO_SENT_V01;}pDb_Data->mode=(unsigned short)format;memset(&raw_ts,
-(0x359+5317-0x181e),sizeof(T_zUfiSms_RawTsData));memset(&ts_data_ptr,
-(0x75c+6283-0x1fe7),sizeof(wms_client_ts_data_s_type));memset(tmp,
-(0x4a5+726-0x77b),sizeof(tmp));snprintf(tmp,sizeof(tmp),"\x25\x64",pPdu_Received
-[(0xbb9+3231-0x1858)]);tmp_i=atoi(tmp);if(tmp_i<(0x8f1+3254-0x15a7)||tmp_i>
-INT_MAX-(0x2315+92-0x2370)){at_print(LOG_ERR,
+(0x1a32+2937-0x25ab),sizeof(T_zUfiSms_RawTsData));memset(&ts_data_ptr,
+(0x158f+3547-0x236a),sizeof(wms_client_ts_data_s_type));memset(tmp,
+(0x1aca+1108-0x1f1e),sizeof(tmp));snprintf(tmp,sizeof(tmp),"\x25\x64",
+pPdu_Received[(0xb4a+1097-0xf93)]);tmp_i=atoi(tmp);if(tmp_i<(0x13e6+3735-0x227d)
+||tmp_i>INT_MAX-(0x1198+936-0x153f)){at_print(LOG_ERR,
 "\x5b\x53\x4d\x53\x5d\x70\x50\x64\x75\x5f\x52\x65\x63\x65\x69\x76\x65\x64\x20\x65\x72\x72\x3a\x25\x64" "\n"
-,tmp_i);return ZUFI_FAIL;}pos=tmp_i+(0xb3+8206-0x20c0);if(pos>=iPdu_Len){return 
-ZUFI_FAIL;}raw_ts.len=iPdu_Len-pos;memcpy((void*)raw_ts.data,(void*)(
+,tmp_i);return ZUFI_FAIL;}pos=tmp_i+(0xbf8+4114-0x1c09);if(pos>=iPdu_Len){return
+ ZUFI_FAIL;}raw_ts.len=iPdu_Len-pos;memcpy((void*)raw_ts.data,(void*)(
 pPdu_Received+pos),WMS_MAX_LEN);raw_ts.tpdu_type=zUfiSms_GetTpduType(
 pPdu_Received+pos);raw_ts.format=(WMS_MESSAGE_FORMAT_CDMA_V01==format)?
 WMS_FORMAT_CDMA:WMS_FORMAT_GW_PP;(void)wms_ts_decode(&raw_ts,&ts_data_ptr);
@@ -1047,62 +1046,61 @@
 pDb_Data);break;}case WMS_MESSAGE_FORMAT_GW_BC_V01:case 
 WMS_MESSAGE_FORMAT_MWI_V01:{result=ZUFI_FAIL;break;}default:{result=ZUFI_FAIL;
 break;}}return result;}T_zUfiSms_CmdStatus IsSmsLoadSuccess(void){char IsInit[
-(0x325+1965-0xaae)]={(0xe24+4072-0x1e0c)};sc_cfg_get(NV_SMS_LOAD_RESULT,IsInit,
-sizeof(IsInit));if((0x528+6657-0x1f29)==strcmp("\x6f\x6b",IsInit)){printf(
+(0xcda+285-0xdd3)]={(0x272+2613-0xca7)};sc_cfg_get(NV_SMS_LOAD_RESULT,IsInit,
+sizeof(IsInit));if((0xa+8559-0x2179)==strcmp("\x6f\x6b",IsInit)){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x73\x6d\x73\x20\x4c\x6f\x61\x64\x20\x73\x75\x63\x63\x65\x73\x73\x21" "\n"
 );return WMS_CMD_SUCCESS;}else{printf(
 "\x5b\x53\x4d\x53\x5d\x20\x73\x6d\x73\x20\x4c\x6f\x61\x64\x20\x77\x72\x6f\x6e\x67\x20\x21" "\n"
 );return WMS_CMD_FAILED;}}
-#if (0x1625+4176-0x2675)

+#if (0x1bd8+777-0x1ee1)

 int zUfiSms_FormatSms(CHAR*pSmsRawContent,int contentSize,T_zUfiSms_SmsItem*
-ptSmsPara,int iCmdId){char*P1=strchr(pSmsRawContent,((char)(0x38b+8454-0x2465)))
-;if(NULL==P1){return ZUFI_FAIL;}char*P2=strchr((char*)(P1+(0x4d9+1745-0xba9)),
-((char)(0x1834+855-0x1b5f)));if(NULL==P2){return ZUFI_FAIL;}char*P3=strchr((char
-*)(P2+(0x1bf+8356-0x2262)),((char)(0xd18+4021-0x1ca1)));atBase_PreProcRes(
-pSmsRawContent,contentSize);if((0xa12+4275-0x1ac4)==iCmdId){if(P3==P2+
-(0xf3a+1895-0x16a0)){sscanf(pSmsRawContent,
-"\x25\x64\x20\x25\x64\x20\x25\x64\x20",&ptSmsPara->index,&ptSmsPara->stat,&
-ptSmsPara->length);}else{sscanf(pSmsRawContent,
-"\x25\x64\x20\x25\x64\x20\x25\x33\x32\x73\x20\x25\x64\x20",&ptSmsPara->index,&
-ptSmsPara->stat,ptSmsPara->alpha,&ptSmsPara->length);}}else if(
-(0xbfa+4246-0x1c8e)==iCmdId){if(P2==P1+(0x19cb+8-0x19d2)){sscanf(pSmsRawContent,
-"\x25\x64\x20\x25\x64\x20",&ptSmsPara->stat,&ptSmsPara->length);}else{sscanf(
-pSmsRawContent,"\x25\x64\x20\x25\x33\x32\x73\x20\x25\x64\x20",&ptSmsPara->stat,
-ptSmsPara->alpha,&ptSmsPara->length);}}atBase_RestoreString(ptSmsPara->alpha);
-atBase_RestoreString(ptSmsPara->pdu);return ZUFI_SUCC;}
+ptSmsPara,int iCmdId){char*P1=strchr(pSmsRawContent,((char)(0x9b9+2479-0x133c)))
+;if(NULL==P1){return ZUFI_FAIL;}char*P2=strchr((char*)(P1+(0x248+3273-0xf10)),
+((char)(0x1921+876-0x1c61)));if(NULL==P2){return ZUFI_FAIL;}char*P3=strchr((char
+*)(P2+(0x382+660-0x615)),((char)(0x1b01+2984-0x267d)));atBase_PreProcRes(
+pSmsRawContent,contentSize);if((0x18b7+1033-0x1cbf)==iCmdId){if(P3==P2+
+(0xa9d+391-0xc23)){sscanf(pSmsRawContent,"\x25\x64\x20\x25\x64\x20\x25\x64\x20",
+&ptSmsPara->index,&ptSmsPara->stat,&ptSmsPara->length);}else{sscanf(
+pSmsRawContent,"\x25\x64\x20\x25\x64\x20\x25\x33\x32\x73\x20\x25\x64\x20",&
+ptSmsPara->index,&ptSmsPara->stat,ptSmsPara->alpha,&ptSmsPara->length);}}else if
+((0x96b+1703-0x1010)==iCmdId){if(P2==P1+(0x569+7902-0x2446)){sscanf(
+pSmsRawContent,"\x25\x64\x20\x25\x64\x20",&ptSmsPara->stat,&ptSmsPara->length);}
+else{sscanf(pSmsRawContent,"\x25\x64\x20\x25\x33\x32\x73\x20\x25\x64\x20",&
+ptSmsPara->stat,ptSmsPara->alpha,&ptSmsPara->length);}}atBase_RestoreString(
+ptSmsPara->alpha);atBase_RestoreString(ptSmsPara->pdu);return ZUFI_SUCC;}
 #endif

 void zUfiSms_CmglRespProc(T_zSms_SmsInd*pSmsItem){T_zUfiSms_CmdStatus result=
-WMS_CMD_PROCESSING;T_zUfiSms_DbStoreData db_data={(0xf5d+1231-0x142c)};
+WMS_CMD_PROCESSING;T_zUfiSms_DbStoreData db_data={(0x22d2+707-0x2595)};
 zUfiSms_StoreType mem_store=WMS_STORAGE_TYPE_UIM_V01;unsigned char pdu_tmp[
-ZSMS_PDU_SIZE]={(0xcb4+4402-0x1de6)};int total_count=(0x1212+66-0x1254);int 
-sim_capability=(0x15c9+3905-0x250a);printf(
+ZSMS_PDU_SIZE]={(0x1128+3671-0x1f7f)};int total_count=(0x160c+3270-0x22d2);int 
+sim_capability=(0xee3+5269-0x2378);printf(
 "\x5b\x53\x4d\x53\x5d\x20\x45\x6e\x74\x65\x72\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x43\x6d\x67\x6c\x52\x65\x73\x70\x50\x72\x6f\x63\x21\x20\x69\x6e\x64\x65\x78\x3a\x25\x64\x2f\x73\x74\x61\x74\x3a\x25\x64\x2f\x6c\x65\x6e\x67\x74\x68\x3a\x25\x64\x21" "\n"
 ,pSmsItem->index,pSmsItem->stat,pSmsItem->length);printf(
 "\x5b\x53\x4d\x53\x5d\x20\x70\x64\x75\x20\x64\x61\x74\x61\x5f\x6c\x65\x6e\x3a\x25\x64\x2c\x20\x73\x74\x72\x3a\x25\x73\x21" "\n"
-,strlen(pSmsItem->pdu),pSmsItem->pdu);memset(&db_data,(0x2e0+731-0x5bb),sizeof(
-db_data));memset(pdu_tmp,(0x1295+2781-0x1d72),sizeof(pdu_tmp));(void)
+,strlen(pSmsItem->pdu),pSmsItem->pdu);memset(&db_data,(0x1cd8+884-0x204c),sizeof
+(db_data));memset(pdu_tmp,(0xc43+6712-0x267b),sizeof(pdu_tmp));(void)
 String2Bytes(pSmsItem->pdu,pdu_tmp,(int)strlen(pSmsItem->pdu));
-#if (0x582+6125-0x1d6e)
-zUfiSms_GetReportStatus(pSmsItem->pdu,&pSmsItem->stat);if((0x645+6186-0x1e6a)==
+#if (0x166+2443-0xaf0)
+zUfiSms_GetReportStatus(pSmsItem->pdu,&pSmsItem->stat);if((0xaa0+1373-0xff8)==
 pSmsItem->stat){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x45\x6e\x74\x65\x72\x20\x70\x53\x6d\x73\x49\x74\x65\x6d\x2d\x3e\x73\x74\x61\x74\x20\x3d\x3d\x20\x35" "\n"
 );(void)zUfiSms_HandleReport(pdu_tmp);zUfiSms_DelModemSms(pSmsItem->index);
 return;}
 #endif

-#if (0x905+1464-0xebc)
+#if (0xdd4+2531-0x17b6)
 printf("\x2a\x2a\x2a\x2a\x75\x6e\x64\x65\x63\x6f\x64\x65\x3a\x25\x73" "\n",
 pdu_tmp);
 #endif

 (void)zUfiSms_DecodeSmsData(&db_data,pSmsItem->index,mem_store,(T_SmsStatus)
 pSmsItem->stat,WMS_MESSAGE_FORMAT_GW_PP_V01,pSmsItem->length,pdu_tmp);
-#if (0x1008+3922-0x1f59)
+#if (0x2bf+3942-0x1224)
 printf("\x2a\x2a\x2a\x2a\x64\x65\x63\x6f\x64\x65\x65\x64\x3a\x25\x73" "\n",
 db_data.sms_content);
 #endif

-(void)zUfiSms_WriteSmsToDb(&db_data,mem_store,-(0x11a+1318-0x63f));{}
-#if (0x4f1+6530-0x1e72)
+(void)zUfiSms_WriteSmsToDb(&db_data,mem_store,-(0x23e6+370-0x2557));{}
+#if (0x102+113-0x172)
 if(SMS_LOCATION_SIM==g_zUfiSms_CurLocation){CHAR simCapability[
-(0xd3+4000-0x1041)]={(0x454+2780-0xf30)};sc_cfg_get(
+(0x9dd+4161-0x19ec)]={(0xec9+5644-0x24d5)};sc_cfg_get(
 ZTE_WMS_NVCONFIG_SIM_CAPABILITY,simCapability,sizeof(simCapability));
 sim_capability=atoi(simCapability);(void)zUfiSms_GetTotalCount(
 ZTE_WMS_DB_SIM_TABLE,&total_count);if(total_count==sim_capability){
@@ -1112,18 +1110,18 @@
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x43\x68\x65\x63\x6b\x73\x74\x6f\x72\x65\x44\x69\x72\x20\x66\x61\x69\x6c\x65\x64\x2e" "\n"
 );return;}
 #ifdef WEBS_SECURITY

-if(access(ZTE_WMS_DB_PATH,F_OK)!=(0x17a+9519-0x26a9)){if((access(
-ZTE_WMS_TMP1_PATH,F_OK)==(0x1ac2+2328-0x23da))&&(access(ZTE_WMS_SEC_PATH,F_OK)!=
-(0xc19+2997-0x17ce))){if(rename(ZTE_WMS_TMP1_PATH,ZTE_WMS_SEC_PATH)!=
-(0x18ab+1439-0x1e4a)){printf(
+if(access(ZTE_WMS_DB_PATH,F_OK)!=(0x1815+383-0x1994)){if((access(
+ZTE_WMS_TMP1_PATH,F_OK)==(0x10cd+4520-0x2275))&&(access(ZTE_WMS_SEC_PATH,F_OK)!=
+(0x4e8+1591-0xb1f))){if(rename(ZTE_WMS_TMP1_PATH,ZTE_WMS_SEC_PATH)!=
+(0xf17+2644-0x196b)){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x57\x4d\x53\x5f\x54\x4d\x50\x31\x5f\x50\x41\x54\x48\x20\x66\x61\x69\x6c\x65\x64\x2e" "\n"
-);}}if((access(ZTE_WMS_TMP0_PATH,F_OK)==(0x25d+614-0x4c3))&&(access(
-ZTE_WMS_SEC_PATH,F_OK)!=(0x12f1+749-0x15de))){if(rename(ZTE_WMS_TMP0_PATH,
-ZTE_WMS_SEC_PATH)!=(0x1198+887-0x150f)){printf(
+);}}if((access(ZTE_WMS_TMP0_PATH,F_OK)==(0x11ad+3344-0x1ebd))&&(access(
+ZTE_WMS_SEC_PATH,F_OK)!=(0x6c3+3386-0x13fd))){if(rename(ZTE_WMS_TMP0_PATH,
+ZTE_WMS_SEC_PATH)!=(0x147+139-0x1d2)){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x57\x4d\x53\x5f\x54\x4d\x50\x30\x5f\x50\x41\x54\x48\x20\x66\x61\x69\x6c\x65\x64\x2e" "\n"
-);}}if(access(ZTE_WMS_SEC_PATH,F_OK)==(0x10c8+3850-0x1fd2)){char rnum_buf[
-(0x15e8+823-0x1907)]={(0xd16+4379-0x1e31)};char cmd[(0x4fc+3519-0x123b)]={
-(0x490+634-0x70a)};sc_cfg_get("\x72\x6e\x75\x6d\x5f\x61\x74",rnum_buf,sizeof(
+);}}if(access(ZTE_WMS_SEC_PATH,F_OK)==(0x776+988-0xb52)){char rnum_buf[
+(0x1c16+1657-0x2277)]={(0x1084+229-0x1169)};char cmd[(0x67c+6723-0x203f)]={
+(0xca2+709-0xf67)};sc_cfg_get("\x72\x6e\x75\x6d\x5f\x61\x74",rnum_buf,sizeof(
 rnum_buf));snprintf(cmd,sizeof(cmd),
 "\x2f\x62\x69\x6e\x2f\x6f\x70\x65\x6e\x73\x73\x6c\x20\x65\x6e\x63\x20\x2d\x64\x20\x2d\x61\x65\x73\x32\x35\x36\x20\x2d\x73\x61\x6c\x74\x20\x2d\x69\x6e\x20\x25\x73\x20\x2d\x6f\x75\x74\x20\x25\x73\x20\x2d\x70\x61\x73\x73\x20\x70\x61\x73\x73\x3a\x25\x73"
 ,ZTE_WMS_SEC_PATH,ZTE_WMS_DB_PATH,rnum_buf);zxic_system(cmd);}}
@@ -1135,47 +1133,48 @@
 zUfiSms_CheckMemoryFull(ZTE_WMS_MEMORY_NV);zUfiSms_SendSmsStatusInfo(
 MSG_SMS_DEFAULT);g_zUfiSms_MsgRefer=zUfiSms_GetSmsMaxReferInDb();
 g_zUfiSms_ConcatSmsReference=zUfiSms_GetConcatMaxReferInDb();}void 
-zUfiSms_CfgSmsNvInit(void){char tmp[(0x6bf+6442-0x1fdf)]={(0x1438+1940-0x1bcc)};
+zUfiSms_CfgSmsNvInit(void){char tmp[(0x127b+1396-0x17e5)]={(0x272+6845-0x1d2f)};
 sc_cfg_set(NV_SMS_STORE,"");sc_cfg_set(NV_SMS_LOAD_RESULT,"");sc_cfg_set(
 ZTE_WMS_NVCONFIG_RECEVIED,"");sc_cfg_set(NV_SMS_CENTER_NUM,"");snprintf(tmp,
 sizeof(tmp),"\x25\x64",ZTE_WMS_DB_MSG_COUNT_MAX);sc_cfg_set(
 ZTE_WMS_NVCONFIG_NV_CAPABILITY,tmp);}VOID zUfiSms_InitCmdStatus(
 T_zUfiSms_StatusInfo*pStatusInfo,T_zUfiSms_CmdType iCmdId){memset((void*)
-pStatusInfo,(0x9af+2297-0x12a8),sizeof(T_zUfiSms_StatusInfo));pStatusInfo->cmd=
+pStatusInfo,(0x903+6540-0x228f),sizeof(T_zUfiSms_StatusInfo));pStatusInfo->cmd=
 iCmdId;pStatusInfo->cmd_status=WMS_CMD_PROCESSING;pStatusInfo->err_code=
-ZTE_SMS_CMS_NONE;pStatusInfo->send_failed_count=(0xd62+6342-0x2628);pStatusInfo
-->delete_failed_count=(0x921+4946-0x1c73);(void)zUfiSms_SetCmdStatus(pStatusInfo
-);}void zUfiSms_CfgInit(void){char tmp[(0x3f9+6390-0x1ce5)]={(0x1f4d+608-0x21ad)
-};sc_cfg_set(NV_SMS_STATE,"");sc_cfg_set(ZTE_WMS_NVCONFIG_RECEVIED,"");
-sc_cfg_set(NV_SMS_LOAD_RESULT,"");sc_cfg_set(NV_SMS_RECV_RESULT,"");snprintf(tmp
-,sizeof(tmp),"\x25\x64",ZTE_WMS_DB_MSG_COUNT_MAX);sc_cfg_set(
-ZTE_WMS_NVCONFIG_NV_CAPABILITY,tmp);sc_cfg_set(ZTE_WMS_NVCONFIG_SIM_CAPABILITY,
-"");sc_cfg_set(ZTE_WMS_NVCONFIG_SMS_REPORT,"");sc_cfg_set(NV_SMS_DB_CHANGE,
-"\x31");sc_cfg_set(NV_SMS_CENTER_NUM,"");}int zUfiSms_IsUnreadSms(
-T_zUfiSms_MemoryType mem_store){int total_count=(0xf1d+3093-0x1b32);char buf[
-(0x119f+4606-0x2389)]={(0x5b5+7395-0x2298)};if(ZUFI_FAIL==
-zUfiSms_GetTagCountInDb(mem_store,WMS_TAG_TYPE_MT_NOT_READ_V01,&total_count)){
-return FALSE;}sprintf(buf,"\x25\x64",total_count);sc_cfg_set(
+ZTE_SMS_CMS_NONE;pStatusInfo->send_failed_count=(0x815+5742-0x1e83);pStatusInfo
+->delete_failed_count=(0x16af+3980-0x263b);(void)zUfiSms_SetCmdStatus(
+pStatusInfo);}void zUfiSms_CfgInit(void){char tmp[(0x732+399-0x8b7)]={
+(0x16fc+1541-0x1d01)};sc_cfg_set(NV_SMS_STATE,"");sc_cfg_set(
+ZTE_WMS_NVCONFIG_RECEVIED,"");sc_cfg_set(NV_SMS_LOAD_RESULT,"");sc_cfg_set(
+NV_SMS_RECV_RESULT,"");snprintf(tmp,sizeof(tmp),"\x25\x64",
+ZTE_WMS_DB_MSG_COUNT_MAX);sc_cfg_set(ZTE_WMS_NVCONFIG_NV_CAPABILITY,tmp);
+sc_cfg_set(ZTE_WMS_NVCONFIG_SIM_CAPABILITY,"");sc_cfg_set(
+ZTE_WMS_NVCONFIG_SMS_REPORT,"");sc_cfg_set(NV_SMS_DB_CHANGE,"\x31");sc_cfg_set(
+NV_SMS_CENTER_NUM,"");}int zUfiSms_IsUnreadSms(T_zUfiSms_MemoryType mem_store){
+int total_count=(0x166f+2026-0x1e59);char buf[(0x1c24+2223-0x24bf)]={
+(0x3ea+4268-0x1496)};if(ZUFI_FAIL==zUfiSms_GetTagCountInDb(mem_store,
+WMS_TAG_TYPE_MT_NOT_READ_V01,&total_count)){return FALSE;}sprintf(buf,"\x25\x64"
+,total_count);sc_cfg_set(
 "\x73\x6d\x73\x5f\x75\x6e\x72\x65\x61\x64\x5f\x63\x6f\x75\x6e\x74",buf);if(
-(0x6d3+2689-0x1154)==total_count){return FALSE;}else{return TRUE;}}VOID 
+(0x1c8+4423-0x130f)==total_count){return FALSE;}else{return TRUE;}}VOID 
 zUfiSms_SendSmsStatusInfo(wms_message_status_info sms_op){
-T_zUfi_SmsStatusInfoInd ind={(0x551+4702-0x17af)};CHAR temp[(0x1778+2900-0x229a)
-]={(0x1aaa+1719-0x2161)};if(sms_op==MSG_SMS_NEW){ind.sms_new_ind=
-(0xa74+5182-0x1eb1);}if(sms_op==MSG_SMS_READING){ind.sms_is_reading=
-(0x204a+765-0x2346);}if(zUfiSms_IsUnreadSms(ZTE_WMS_MEMORY_NV)){ind.
-sms_unread_ind=(0x5f6+3391-0x1334);}else{ind.sms_unread_ind=(0x2c6+5158-0x16ec);
-}sc_cfg_get("\x73\x6d\x73\x5f\x75\x6e\x72\x65\x61\x64\x5f\x63\x6f\x75\x6e\x74",
-temp,sizeof(temp));ind.sms_unread_count=atoi(temp);if((g_zUfiSms_MemFullFlag[
+T_zUfi_SmsStatusInfoInd ind={(0xb2c+528-0xd3c)};CHAR temp[(0x29b+328-0x3b1)]={
+(0x178+8891-0x2433)};if(sms_op==MSG_SMS_NEW){ind.sms_new_ind=(0x23af+207-0x247d)
+;}if(sms_op==MSG_SMS_READING){ind.sms_is_reading=(0x1af3+989-0x1ecf);}if(
+zUfiSms_IsUnreadSms(ZTE_WMS_MEMORY_NV)){ind.sms_unread_ind=(0x1f3d+554-0x2166);}
+else{ind.sms_unread_ind=(0x16cf+901-0x1a54);}sc_cfg_get(
+"\x73\x6d\x73\x5f\x75\x6e\x72\x65\x61\x64\x5f\x63\x6f\x75\x6e\x74",temp,sizeof(
+temp));ind.sms_unread_count=atoi(temp);if((g_zUfiSms_MemFullFlag[
 WMS_STORAGE_TYPE_NV_V01]==TRUE)||(g_zUfiSms_MemFullFlag[WMS_STORAGE_TYPE_UIM_V01
-]==TRUE)){ind.sms_memory_full_ind=(0x1265+4778-0x250e);}else{ind.
-sms_memory_full_ind=(0xa2+920-0x43a);}printf(
+]==TRUE)){ind.sms_memory_full_ind=(0x42a+6998-0x1f7f);}else{ind.
+sms_memory_full_ind=(0x6d0+7101-0x228d);}printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x53\x65\x6e\x64\x53\x6d\x73\x53\x74\x61\x74\x75\x73\x49\x6e\x66\x6f\x20\x75\x6e\x72\x65\x61\x64\x20\x3d\x20\x25\x64\x2c\x20\x66\x75\x6c\x6c\x3d\x25\x64\x2c\x20\x6e\x65\x77\x3d\x25\x64\x2c\x20\x72\x65\x61\x64\x69\x6e\x67\x3d\x25\x64" "\n"
 ,ind.sms_unread_ind,ind.sms_memory_full_ind,ind.sms_new_ind,ind.sms_is_reading);
 ipc_send_message(MODULE_ID_SMS,MODULE_ID_MMI,MSG_CMD_SMS_STATUS_INFO_IND,sizeof(
-T_zUfi_SmsStatusInfoInd),&ind,(0xb6d+2248-0x1435));if(ind.sms_memory_full_ind==
-(0x66d+3542-0x1442)){sc_cfg_set(NV_SMS_INIT_STATUS,
+T_zUfi_SmsStatusInfoInd),&ind,(0x1c83+2277-0x2568));if(ind.sms_memory_full_ind==
+(0x1900+588-0x1b4b)){sc_cfg_set(NV_SMS_INIT_STATUS,
 "\x73\x6d\x73\x5f\x6d\x65\x6d\x6f\x72\x79\x5f\x66\x75\x6c\x6c");}else if(ind.
-sms_unread_ind==(0x16a8+2713-0x2140)){sc_cfg_set(NV_SMS_INIT_STATUS,
+sms_unread_ind==(0x1b1d+341-0x1c71)){sc_cfg_set(NV_SMS_INIT_STATUS,
 "\x73\x6d\x73\x5f\x75\x6e\x72\x65\x61\x64");}else{sc_cfg_set(NV_SMS_INIT_STATUS,
 "\x73\x6d\x73\x5f\x6e\x6f\x72\x6d\x61\x6c");}return;}VOID BakNotificationSms(
 char*pushSms,int pushSmsLen){FILE*fp=NULL;int len;fp=fopen(
@@ -1184,7 +1183,7 @@
 "\x5b\x53\x4d\x53\x5d\x20\x42\x61\x6b\x4e\x6f\x74\x69\x66\x69\x63\x61\x74\x69\x6f\x6e\x53\x6d\x73\x20\x66\x6f\x70\x65\x6e\x20\x65\x72\x72\x6f\x72" "\n"
 );at_print(LOG_ERR,
 "\x66\x6f\x70\x65\x6e\x28\x20\x2f\x75\x73\x72\x2f\x64\x6d\x2f\x66\x6f\x74\x61\x5f\x70\x75\x73\x68\x5f\x6d\x73\x67\x2e\x64\x61\x74\x61\x20\x2c\x20\x27\x77\x2b\x27\x29\x20\x65\x72\x72\x6f\x72\x21"
-);return;}len=fwrite(pushSms,(0xf6b+384-0x10ea),pushSmsLen,fp);if(len==
+);return;}len=fwrite(pushSms,(0x3c0+8148-0x2393),pushSmsLen,fp);if(len==
 pushSmsLen){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x42\x61\x6b\x4e\x6f\x74\x69\x66\x69\x63\x61\x74\x69\x6f\x6e\x53\x6d\x73\x20\x77\x72\x69\x74\x65\x20\x74\x6f\x20\x4e\x6f\x74\x69\x66\x69\x63\x61\x74\x69\x6f\x6e\x62\x61\x6b\x20\x66\x69\x6c\x65\x20\x4f\x4b\x2c\x20\x6c\x65\x6e\x3d\x25\x64\x20" "\n"
 ,len);printf(
diff --git a/ap/app/zte_comm/sms/src/sms_main.c b/ap/app/zte_comm/sms/src/sms_main.c
index d469767..41feec4 100755
--- a/ap/app/zte_comm/sms/src/sms_main.c
+++ b/ap/app/zte_comm/sms/src/sms_main.c
@@ -15,43 +15,43 @@
 g_zUfiSms_FinalCmgsBuf;extern int g_zUfiSms_CurConcatSegNo;extern 
 T_zUfiSms_DbStoreData g_zUfiSms_DbStoreData[ZTE_WMS_CONCAT_SMS_COUNT_MAX];extern
  int g_zUfiSms_SendFailedCount;extern int g_zUfiSms_ConcatTotalNum;extern UINT8 
-g_zUfiSms_IsConcatSendSuc;int iSmsIndex=(0x175b+2788-0x223f);int g_zSms_MsqId=-
-(0x6d+1120-0x4cc);int g_zSms_LocalMsqId=-(0x1108+5600-0x26e7);sem_t g_sms_sem_id
-;T_zSms_optRsp g_smsOptRsp={(0x14d+7976-0x2075)};static const T_zSmsHandleTable 
+g_zUfiSms_IsConcatSendSuc;int iSmsIndex=(0x3b5+1781-0xaaa);int g_zSms_MsqId=-
+(0xc0c+6703-0x263a);int g_zSms_LocalMsqId=-(0xe2+1161-0x56a);sem_t g_sms_sem_id;
+T_zSms_optRsp g_smsOptRsp={(0x13ad+2843-0x1ec8)};static const T_zSmsHandleTable 
 SmsHandleWebTab[]={{MSG_CMD_SEND_SMS,atWeb_SendSms,TRUE},{
 MSG_CMD_DEL_SMS_BY_INDEX,atWeb_DelSmsByIndex,TRUE},{MSG_CMD_SMS_MODIFY_TAG,
 atWeb_ReadSms,TRUE},{MSG_CMD_DRAFTS_SAVE,atWeb_SaveSms,FALSE},{
 MSG_CMD_SMS_LOCATION_SET,atWeb_SetSms,TRUE},{MSG_CMD_SMS_OUTDATE_CHECK,
-atWeb_OutdateSmsCheck,TRUE},{(0xc5b+4535-0x1e12),NULL,FALSE}};VOID atWeb_SendSms
-(UINT8*pDatabuf){T_zGoaheadMsgBuf*ptMessage=NULL;T_zUfiSms_StatusInfo tStatus={
-(0xed2+4925-0x220f)};assert(pDatabuf!=NULL);ptMessage=(T_zGoaheadMsgBuf*)
+atWeb_OutdateSmsCheck,TRUE},{(0x1f7+1866-0x941),NULL,FALSE}};VOID atWeb_SendSms(
+UINT8*pDatabuf){T_zGoaheadMsgBuf*ptMessage=NULL;T_zUfiSms_StatusInfo tStatus={
+(0x16a4+620-0x1910)};assert(pDatabuf!=NULL);ptMessage=(T_zGoaheadMsgBuf*)
 pDatabuf;zUfiSms_InitCmdStatus(&tStatus,WMS_SMS_CMD_MSG_SEND);(void)
 zUfiSms_SendRawSms((T_zUfiSms_SendReq*)ptMessage->msg_data);}VOID 
 atWeb_DelSmsByIndex(UINT8*pDatabuf){T_zUfiSms_DelReq tDelReq={
-(0x1372+1941-0x1b07)};T_zUfiSms_CmdStatus result=WMS_CMD_PROCESSING;
-T_zUfiSms_StatusInfo tStatus={(0x7b+6252-0x18e7)};assert(pDatabuf!=NULL);printf(
-"[SMS] atWeb_DelSmsByIndex recv msg\n");memcpy(&tDelReq,pDatabuf,sizeof(
+(0xe37+4045-0x1e04)};T_zUfiSms_CmdStatus result=WMS_CMD_PROCESSING;
+T_zUfiSms_StatusInfo tStatus={(0x60c+3297-0x12ed)};assert(pDatabuf!=NULL);printf
+("[SMS] atWeb_DelSmsByIndex recv msg\n");memcpy(&tDelReq,pDatabuf,sizeof(
 T_zUfiSms_DelReq));zUfiSms_InitCmdStatus(&tStatus,WMS_SMS_CMD_MSG_DELETE);result
 =zUfiSms_DeleteSms(&tDelReq);tStatus.cmd_status=result;(void)
 zUfiSms_SetCmdStatus(&tStatus);zUfiMmi_SendSmsStatus();}VOID atWeb_DelSmsByType(
 UINT8*pDatabuf){
-#if (0x2a2+724-0x576)

+#if (0x1281+2098-0x1ab3)

 WEB_DEL_SMS_BY_TYPE*req=NULL;req=(WEB_DEL_SMS_BY_TYPE*)pDatabuf;assert(req!=NULL
 );if(req->eLocation!=ZSMS_LOCATION_SIM){ZTE_LOG(LOG_ERR,
 "\x7a\x53\x6d\x73\x5f\x50\x72\x65\x70\x44\x65\x6c\x42\x79\x54\x79\x70\x65\x20\x70\x61\x72\x61\x20\x4e\x55\x4c\x4c\x2e" "\n"
 );return;}zSms_ChangeMainState(ZSMS_STATE_DELING);ZTE_LOG(LOG_DEBUG,
 "\x7a\x53\x6d\x73\x5f\x50\x72\x65\x70\x44\x65\x6c\x42\x79\x54\x79\x70\x65\x20\x70\x73\x74\x52\x65\x71\x2d\x3e\x65\x42\x6f\x78\x4e\x61\x6d\x65\x3d\x25\x64" "\n"
-,req->eBoxName);SMS_DeleteRecordFromXML(SMS_LOCATION_SIM,(0x760+7080-0x2308),req
+,req->eBoxName);SMS_DeleteRecordFromXML(SMS_LOCATION_SIM,(0x21b+1691-0x8b6),req
 ->eBoxName);if(req->eBoxName==SMS_INBOX){sms_LoadSmsFromSim();}
 #endif

 }VOID atWeb_ReadSms(UINT8*pDatabuf){T_zGoaheadMsgBuf*ptMessage=NULL;
 T_zUfiSms_CmdStatus result=WMS_CMD_PROCESSING;T_zUfiSms_StatusInfo tStatus={
-(0x752+4661-0x1987)};assert(pDatabuf!=NULL);ptMessage=(T_zGoaheadMsgBuf*)
+(0x1c42+1545-0x224b)};assert(pDatabuf!=NULL);ptMessage=(T_zGoaheadMsgBuf*)
 pDatabuf;zUfiSms_InitCmdStatus(&tStatus,WMS_SMS_CMD_MSG_MODIFY_TAG);result=
 zUfiSms_ModifySmsTag((T_zUfiSms_ModifyFlag*)ptMessage->msg_data);tStatus.
 cmd_status=result;(void)zUfiSms_SetCmdStatus(&tStatus);}VOID atWeb_SaveSms(UINT8
 *pDatabuf){T_zGoaheadMsgBuf*ptMessage=NULL;T_zUfiSms_CmdStatus result=
-WMS_CMD_PROCESSING;T_zUfiSms_StatusInfo tStatus={(0x1383+4952-0x26db)};assert(
+WMS_CMD_PROCESSING;T_zUfiSms_StatusInfo tStatus={(0x3c2+5790-0x1a60)};assert(
 pDatabuf!=NULL);ptMessage=(T_zGoaheadMsgBuf*)pDatabuf;zUfiSms_InitCmdStatus(&
 tStatus,WMS_SMS_CMD_MSG_WRITE);result=zUfiSms_WriteRawSms((T_zUfiSms_SaveReq*)
 ptMessage->msg_data);if(g_zUfiSms_MemFullFlag[ZTE_WMS_MEMORY_NV]){tStatus.
@@ -61,250 +61,250 @@
 zUfiSms_ChangeMainState(SMS_STATE_SAVING);sc_cfg_set(NV_SMS_SAVE_RESULT,
 "\x6f\x6b");}VOID atWeb_SetSms(UINT8*pDatabuf){T_zGoaheadMsgBuf*ptMessage=NULL;
 T_zUfiSms_CmdStatus result=WMS_CMD_PROCESSING;T_zUfiSms_StatusInfo tStatus={
-(0x5a+7485-0x1d97)};printf(
+(0x940+609-0xba1)};printf(
 "\x49\x4e\x54\x4f\x20\x61\x74\x57\x65\x62\x5f\x53\x65\x74\x53\x6d\x73\x2e" "\n")
 ;assert(pDatabuf!=NULL);ptMessage=(T_zGoaheadMsgBuf*)pDatabuf;
 zUfiSms_InitCmdStatus(&tStatus,WMS_SMS_CMD_CFG_SET_PARAMETERS);result=
 zUfiSms_SetSmsPara((T_zUfiSms_ParaInfo*)ptMessage->msg_data);tStatus.cmd_status=
 result;(void)zUfiSms_SetCmdStatus(&tStatus);}VOID atWeb_OutdateSmsCheck(UINT8*
-pDatabuf){T_zUfiSms_DelReq tSmsDel={(0x1f3a+143-0x1fc9)};
+pDatabuf){T_zUfiSms_DelReq tSmsDel={(0x2207+514-0x2409)};
 zUfiSms_CheckDbOutdateSms(ZTE_WMS_DB_NV_TABLE,&tSmsDel);printf(
 "\x2d\x2d\x2d\x2d\x6f\x75\x74\x20\x63\x6f\x75\x6e\x20\x6e\x76\x74\x3a\x20\x25\x64\x2d\x2d\x2d\x2d" "\n"
-,tSmsDel.all_or_count);if(tSmsDel.all_or_count>(0x10d0+5610-0x26ba)){
-atWeb_DelSmsByIndex(&tSmsDel);}memset(&tSmsDel,(0x1aac+1950-0x224a),sizeof(
+,tSmsDel.all_or_count);if(tSmsDel.all_or_count>(0xba4+5270-0x203a)){
+atWeb_DelSmsByIndex(&tSmsDel);}memset(&tSmsDel,(0x1353+71-0x139a),sizeof(
 T_zUfiSms_DelReq));zUfiSms_CheckDbOutdateSms(ZTE_WMS_DB_SIM_TABLE,&tSmsDel);
 printf(
 "\x2d\x2d\x2d\x2d\x6f\x75\x74\x20\x63\x6f\x75\x6e\x74\x20\x73\x69\x6d\x3a\x20\x25\x64\x2d\x2d\x2d\x2d" "\n"
-,tSmsDel.all_or_count);if(tSmsDel.all_or_count>(0x455+3588-0x1259)){
+,tSmsDel.all_or_count);if(tSmsDel.all_or_count>(0x1460+1686-0x1af6)){
 atWeb_DelSmsByIndex(&tSmsDel);}}VOID zSms_HandleWebMsg(MSG_BUF*ptMsgBuf){UINT32 
-i=(0xbd7+1362-0x1129);assert(ptMsgBuf!=NULL);printf(
+i=(0x5c8+5823-0x1c87);assert(ptMsgBuf!=NULL);printf(
 "\x73\x6d\x73\x20\x72\x65\x63\x76\x20\x6d\x73\x67\x20\x66\x72\x6f\x6d\x20\x77\x65\x62\x73\x65\x72\x76\x65\x72\x3a\x25\x64" "\n"
-,ptMsgBuf->usMsgCmd);while((0x5c4+2389-0xf19)!=SmsHandleWebTab[i].msg_id){if(
+,ptMsgBuf->usMsgCmd);while((0x539+7343-0x21e8)!=SmsHandleWebTab[i].msg_id){if(
 ptMsgBuf->usMsgCmd==SmsHandleWebTab[i].msg_id){if(SmsHandleWebTab[i].need_block
 &&ptMsgBuf->src_id!=MODULE_ID_SMS){ipc_send_message(MODULE_ID_SMS,
 MODULE_ID_SMS_LOCAL,ptMsgBuf->usMsgCmd,ptMsgBuf->usDataLen,(unsigned char*)
-ptMsgBuf->aucDataBuf,(0x1683+2784-0x2163));}else if(NULL!=SmsHandleWebTab[i].
+ptMsgBuf->aucDataBuf,(0x1a5+823-0x4dc));}else if(NULL!=SmsHandleWebTab[i].
 func_ptr){SmsHandleWebTab[i].func_ptr(ptMsgBuf->aucDataBuf);}break;}i++;}}SINT32
  zSms_SendMsg(USHORT Msg_cmd,USHORT us_DataLen,UCHAR*pData){printf(
 "\x73\x6d\x73\x20\x73\x65\x6e\x64\x20\x6d\x73\x67\x20\x63\x6d\x64\x3a\x25\x64" "\n"
 ,Msg_cmd);ipc_send_message(MODULE_ID_SMS,MODULE_ID_AT_CTL,Msg_cmd,us_DataLen,(
-unsigned char*)pData,(0x5eb+1465-0xba4));return(0x1833+3080-0x243b);}SINT32 
-zSms_SendCmgsReq(VOID){T_zSms_SendSmsReq sendSmsInfo={(0x1ef+4005-0x1194)};
-memset(&sendSmsInfo,(0xd36+4938-0x2080),sizeof(T_zSms_SendSmsReq));sendSmsInfo.
+unsigned char*)pData,(0x1410+4188-0x246c));return(0xc7+5865-0x17b0);}SINT32 
+zSms_SendCmgsReq(VOID){T_zSms_SendSmsReq sendSmsInfo={(0x18fd+1846-0x2033)};
+memset(&sendSmsInfo,(0xa70+5286-0x1f16),sizeof(T_zSms_SendSmsReq));sendSmsInfo.
 length=g_zUfiSms_FinalCmgsBuf.length;if(strlen(g_zUfiSms_FinalCmgsBuf.pdu)<
-ZSMS_PDU_SIZE-(0x17f4+2325-0x2108)){memcpy(sendSmsInfo.pdu,
+ZSMS_PDU_SIZE-(0x12d3+3671-0x2129)){memcpy(sendSmsInfo.pdu,
 g_zUfiSms_FinalCmgsBuf.pdu,strlen(g_zUfiSms_FinalCmgsBuf.pdu));}else{printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x53\x65\x6e\x64\x43\x6d\x67\x73\x52\x65\x71\x20\x70\x64\x75\x20\x74\x6f\x6f\x20\x6c\x6f\x6e\x67\x3a\x25\x73" "\n"
 ,g_zUfiSms_FinalCmgsBuf.pdu);memcpy(sendSmsInfo.pdu,g_zUfiSms_FinalCmgsBuf.pdu,
-ZSMS_PDU_SIZE-(0x8a0+3323-0x1599));}*(sendSmsInfo.pdu+strlen(
+ZSMS_PDU_SIZE-(0x1650+2327-0x1f65));}*(sendSmsInfo.pdu+strlen(
 g_zUfiSms_FinalCmgsBuf.pdu))=ZSMS_CTRL_Z_CHAR;
-#if (0xd6c+5366-0x2261)
+#if (0x5cc+6306-0x1e6d)
 printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x53\x65\x6e\x64\x43\x6d\x67\x73\x52\x65\x71\x20\x73\x65\x6e\x64\x20\x64\x61\x74\x61" "\n"
 );printf("\n" "\x5b\x53\x4d\x53\x5d\x25\x73" "\n",sendSmsInfo.pdu);
 #endif

 zSms_SendMsg(MSG_CMD_SENDSMS_REQ,sizeof(T_zSms_SendSmsReq),&sendSmsInfo);
-sem_wait(&g_sms_sem_id);if(g_smsOptRsp.result==(0xaea+4367-0x1bf8)){return 
+sem_wait(&g_sms_sem_id);if(g_smsOptRsp.result==(0xf67+3109-0x1b8b)){return 
 ZSMS_RESULT_OK;}else{return ZSMS_RESULT_ERROR;}}VOID zSms_RecvCmgsOk(VOID){
 printf(
 "\x73\x6d\x73\x20\x73\x65\x6e\x64\x65\x64\x20\x73\x75\x63\x63\x65\x73\x73\x2e\x20" "\n"
 );g_zUfiSms_CurConcatSegNo++;if(g_zUfiSms_CurConcatSegNo>
 ZTE_WMS_CONCAT_SMS_COUNT_MAX){return;}g_zUfiSms_DbStoreData[
-g_zUfiSms_CurConcatSegNo-(0x50c+2132-0xd5f)].tag=WMS_TAG_TYPE_MO_SENT_V01;
+g_zUfiSms_CurConcatSegNo-(0x2106+1278-0x2603)].tag=WMS_TAG_TYPE_MO_SENT_V01;
 zUfiSms_CmgsRespProc();}VOID zSms_RecvCmgsErr(VOID){printf(
 "\x73\x6d\x73\x20\x73\x65\x6e\x64\x65\x64\x20\x66\x61\x69\x6c\x2e\x20" "\n");
 g_zUfiSms_CurConcatSegNo++;if(g_zUfiSms_CurConcatSegNo>
 ZTE_WMS_CONCAT_SMS_COUNT_MAX){return;}g_zUfiSms_SendFailedCount++;printf(
 "\x73\x65\x6e\x64\x20\x73\x6d\x73\x20\x66\x61\x69\x6c\x65\x64\x2c\x73\x6f\x20\x77\x72\x69\x74\x65\x20\x73\x6d\x73\x20\x74\x6f\x20\x64\x72\x61\x66\x74\x62\x6f\x78\x2e" "\n"
-);g_zUfiSms_DbStoreData[g_zUfiSms_CurConcatSegNo-(0x5a5+7111-0x216b)].tag=
-WMS_TAG_TYPE_MO_NOT_SENT_V01;if(g_zUfiSms_ConcatTotalNum>(0xd+7206-0x1c32)){
+);g_zUfiSms_DbStoreData[g_zUfiSms_CurConcatSegNo-(0x160a+2738-0x20bb)].tag=
+WMS_TAG_TYPE_MO_NOT_SENT_V01;if(g_zUfiSms_ConcatTotalNum>(0x1f24+1551-0x2532)){
 g_zUfiSms_IsConcatSendSuc=FALSE;}zUfiSms_CmgsRespProc();}SINT32 zSms_SendCmgdReq
-(UINT8 index){T_zSms_DelSmsReq delSmsReq={(0x495+7210-0x20bf)};delSmsReq.index=
+(UINT8 index){T_zSms_DelSmsReq delSmsReq={(0x1cd1+600-0x1f29)};delSmsReq.index=
 index;zSms_SendMsg(MSG_CMD_DELSMS_REQ,sizeof(T_zSms_DelSmsReq),&delSmsReq);
-sem_wait(&g_sms_sem_id);if(g_smsOptRsp.result==(0x169d+1984-0x1e5c)){return 
+sem_wait(&g_sms_sem_id);if(g_smsOptRsp.result==(0x32d+2528-0xd0c)){return 
 ZSMS_RESULT_OK;}else{return ZSMS_RESULT_ERROR;}}VOID zSms_RecvCmgdOk(VOID){CHAR 
-strUsed[(0x163b+3263-0x22f0)]={(0xb09+1363-0x105c)};int used=(0xe2a+2488-0x17e2)
-;int tmp_i=(0x1d9b+1724-0x2457);sc_cfg_set(NV_SMS_DEL_RESULT,"\x6f\x6b");printf(
+strUsed[(0xf1d+792-0x122b)]={(0xfff+5525-0x2594)};int used=(0xb57+1781-0x124c);
+int tmp_i=(0xeb1+4584-0x2099);sc_cfg_set(NV_SMS_DEL_RESULT,"\x6f\x6b");printf(
 "\x5b\x53\x4d\x53\x5d\x20\x73\x65\x74\x20\x73\x69\x6d\x5f\x64\x65\x6c\x5f\x72\x65\x73\x75\x6c\x74\x20\x74\x6f\x20\x4f\x4b\x2e\x20" "\n"
 );sc_cfg_get(ZTE_WMS_NVCONFIG_SIM_CARD_USED,strUsed,sizeof(strUsed));tmp_i=atoi(
-strUsed);if(tmp_i<(0x7c1+7287-0x2438)||tmp_i>INT_MAX-(0x1fe6+826-0x231f)){
+strUsed);if(tmp_i<(0x367+8326-0x23ed)||tmp_i>INT_MAX-(0x1479+2417-0x1de9)){
 at_print(LOG_ERR,
 "\x5b\x53\x4d\x53\x5d\x57\x4d\x53\x5f\x4e\x56\x43\x4f\x4e\x46\x49\x47\x5f\x53\x49\x4d\x5f\x43\x41\x52\x44\x5f\x55\x53\x45\x44\x20\x74\x6d\x70\x5f\x69\x20\x65\x72\x72\x3a\x25\x64" "\n"
-,tmp_i);tmp_i=(0x188f+1356-0x1ddb);}used=tmp_i-(0x17ec+1614-0x1e39);if(used<
-(0x17d+6253-0x19ea)){used=(0xff7+281-0x1110);}memset(&strUsed,
-(0x480+3544-0x1258),(0x1ea7+691-0x2150));snprintf(strUsed,sizeof(strUsed),
+,tmp_i);tmp_i=(0x591+2416-0xf01);}used=tmp_i-(0x1c19+1437-0x21b5);if(used<
+(0x1214+5313-0x26d5)){used=(0x6f4+5758-0x1d72);}memset(&strUsed,
+(0x1416+2066-0x1c28),(0x48b+8362-0x252b));snprintf(strUsed,sizeof(strUsed),
 "\x25\x64",used);sc_cfg_set(ZTE_WMS_NVCONFIG_SIM_CARD_USED,strUsed);}VOID 
 zSms_RecvCmgdErr(VOID){sc_cfg_set(NV_SMS_DEL_RESULT,"\x66\x61\x69\x6c");printf(
 "\x5b\x53\x4d\x53\x5d\x20\x73\x65\x74\x20\x73\x69\x6d\x5f\x64\x65\x6c\x5f\x72\x65\x73\x75\x6c\x74\x20\x74\x6f\x20\x66\x61\x69\x6c\x2e\x20" "\n"
-);}VOID zSms_RecvCmgdFinish(VOID){char StrValue[(0x36+960-0x3ec)]={
-(0xfc3+5420-0x24ef)};CHAR strTotal[(0x561+1001-0x940)]={(0xde1+139-0xe6c)};CHAR 
-strUsed[(0x2230+1197-0x26d3)]={(0x1db5+1698-0x2457)};int total=
-(0x141+8622-0x22ef);int used=(0xf06+4478-0x2084);int remain=(0xa4c+1519-0x103b);
-sc_cfg_get(ZTE_WMS_NVCONFIG_SIM_CARD_USED,strUsed,sizeof(strUsed));used=atoi(
-strUsed);if(used<(0x1c5+3662-0x1013)||used>INT_MAX-(0x9ab+4295-0x1a71)){at_print
+);}VOID zSms_RecvCmgdFinish(VOID){char StrValue[(0x6c3+2576-0x10c9)]={
+(0xb81+5570-0x2143)};CHAR strTotal[(0x587+3544-0x1355)]={(0x7bd+5969-0x1f0e)};
+CHAR strUsed[(0x137d+4472-0x24eb)]={(0xa30+6794-0x24ba)};int total=
+(0x148d+1997-0x1c5a);int used=(0xfdc+2661-0x1a41);int remain=(0x720+6782-0x219e)
+;sc_cfg_get(ZTE_WMS_NVCONFIG_SIM_CARD_USED,strUsed,sizeof(strUsed));used=atoi(
+strUsed);if(used<(0x37c+8838-0x2602)||used>INT_MAX-(0xe05+6283-0x268f)){at_print
 (LOG_ERR,
 "\x5b\x53\x4d\x53\x5d\x57\x4d\x53\x5f\x4e\x56\x43\x4f\x4e\x46\x49\x47\x5f\x53\x49\x4d\x5f\x43\x41\x52\x44\x5f\x55\x53\x45\x44\x20\x65\x72\x72\x3a\x25\x64" "\n"
-,used);used=(0xfcf+70-0x1015);}sc_cfg_get(ZTE_WMS_NVCONFIG_SIM_CARD_TOTAL,
-strTotal,sizeof(strTotal));total=atoi(strTotal);if(total<(0x995+4159-0x19d4)||
-total>INT_MAX-(0x1672+1563-0x1c8c)){at_print(LOG_ERR,
+,used);used=(0x2d8+2597-0xcfd);}sc_cfg_get(ZTE_WMS_NVCONFIG_SIM_CARD_TOTAL,
+strTotal,sizeof(strTotal));total=atoi(strTotal);if(total<(0xe3a+5031-0x21e1)||
+total>INT_MAX-(0xc2b+1225-0x10f3)){at_print(LOG_ERR,
 "\x5b\x53\x4d\x53\x5d\x57\x4d\x53\x5f\x4e\x56\x43\x4f\x4e\x46\x49\x47\x5f\x53\x49\x4d\x5f\x43\x41\x52\x44\x5f\x54\x4f\x54\x41\x4c\x20\x65\x72\x72\x3a\x25\x64" "\n"
-,total);total=(0xfa5+2245-0x186a);}remain=total-used;if(remain<
-(0x1855+1500-0x1e31)){remain=(0x10c8+121-0x1141);}memset(&StrValue,
-(0x13f9+159-0x1498),(0x3fa+22-0x406));snprintf(StrValue,sizeof(StrValue),
+,total);total=(0x24cd+513-0x26ce);}remain=total-used;if(remain<
+(0x3a4+4521-0x154d)){remain=(0x713+3177-0x137c);}memset(&StrValue,
+(0xf20+6019-0x26a3),(0x6a5+4600-0x1893));snprintf(StrValue,sizeof(StrValue),
 "\x25\x64",remain);sc_cfg_set(ZTE_WMS_NVCONFIG_SIM_CARD_REMAIN,StrValue);printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x44\x65\x6c\x65\x74\x65\x53\x69\x6d\x53\x6d\x73\x20\x75\x73\x65\x64\x3d\x25\x64\x2c\x72\x65\x6d\x61\x69\x6e\x3d\x25\x64\x2c\x74\x6f\x74\x61\x6c\x3d\x25\x64" "\n"
 ,used,remain,total);zUfiSms_ChangeMainState(SMS_STATE_DELED);sc_cfg_set(
 NV_SMS_DB_CHANGE,"\x31");}int zSms_SendZmenaReq(SINT32 avail){T_zSms_StroageReq 
-storageReq={(0x1aaa+1576-0x20d2)};storageReq.type=avail;zSms_SendMsg(
+storageReq={(0x443+8197-0x2448)};storageReq.type=avail;zSms_SendMsg(
 MSG_CMD_STORAGE_CAP_REQ,sizeof(T_zSms_StroageReq),&storageReq);sem_wait(&
-g_sms_sem_id);if(g_smsOptRsp.result==(0x7ad+864-0xb0c)){return ZSMS_RESULT_OK;}
-else{return ZSMS_RESULT_ERROR;}}int zSms_SendCmgrReq(UINT8 index){
-T_zSms_ModifyTagReq modTagReq={(0x672+3162-0x12cc)};modTagReq.index=index;
+g_sms_sem_id);if(g_smsOptRsp.result==(0x206+9064-0x256d)){return ZSMS_RESULT_OK;
+}else{return ZSMS_RESULT_ERROR;}}int zSms_SendCmgrReq(UINT8 index){
+T_zSms_ModifyTagReq modTagReq={(0xbb+6558-0x1a59)};modTagReq.index=index;
 zSms_SendMsg(MSG_CMD_MODIFY_TAG_REQ,sizeof(T_zSms_ModifyTagReq),&modTagReq);
-sem_wait(&g_sms_sem_id);if(g_smsOptRsp.result==(0x26f+8783-0x24bd)){return 
+sem_wait(&g_sms_sem_id);if(g_smsOptRsp.result==(0x1c2a+1776-0x2319)){return 
 ZSMS_RESULT_OK;}else{return ZSMS_RESULT_ERROR;}}int zSms_SetCscaReq(PSTR sca){
 T_zSms_SetScaReq setscareq;strncpy(setscareq.sca,sca,sizeof(setscareq.sca)-
-(0x2297+696-0x254e));zSms_SendMsg(MSG_CMD_SCA_SET_REQ,sizeof(T_zSms_SetScaReq),&
-setscareq);sem_wait(&g_sms_sem_id);if(g_smsOptRsp.result==(0x350+6553-0x1ce8)){
+(0x12f9+664-0x1590));zSms_SendMsg(MSG_CMD_SCA_SET_REQ,sizeof(T_zSms_SetScaReq),&
+setscareq);sem_wait(&g_sms_sem_id);if(g_smsOptRsp.result==(0x393+4300-0x145e)){
 return ZSMS_RESULT_OK;}else{return ZSMS_RESULT_ERROR;}}int zSms_SendCnmiReq(PSTR
- pAtCmdPara){T_zSms_NotifySetReq notifySetReq={(0x89a+7517-0x25f7)};if(
-(0x941+7146-0x252b)==strcmp(pAtCmdPara,"\x73\x69\x6d")){notifySetReq.mt=
-(0x38c+825-0x6c4);}else{notifySetReq.mt=(0x1ac+3846-0x10b0);}zSms_SendMsg(
+ pAtCmdPara){T_zSms_NotifySetReq notifySetReq={(0x200+4763-0x149b)};if(
+(0xbf8+2271-0x14d7)==strcmp(pAtCmdPara,"\x73\x69\x6d")){notifySetReq.mt=
+(0x1ac3+581-0x1d07);}else{notifySetReq.mt=(0x160+6206-0x199c);}zSms_SendMsg(
 MSG_CMD_NOTIFY_SET_REQ,sizeof(T_zSms_NotifySetReq),&notifySetReq);sem_wait(&
-g_sms_sem_id);if(g_smsOptRsp.result==(0xe65+1828-0x1588)){return ZSMS_RESULT_OK;
+g_sms_sem_id);if(g_smsOptRsp.result==(0x16d+4818-0x143e)){return ZSMS_RESULT_OK;
 }else{return ZSMS_RESULT_ERROR;}}VOID zSms_RecvCmtInd(UINT8*pDatabuf){CHAR 
-needSMS[(0x96c+1036-0xd46)]={(0x548+7064-0x20e0)};sc_cfg_get(NV_NEED_SUPPORT_SMS
-,needSMS,sizeof(needSMS));if((0x1b5+2564-0xbb9)==strcmp(needSMS,"\x6e\x6f")){
-printf(
+needSMS[(0x1a78+2932-0x25ba)]={(0xdad+5862-0x2493)};sc_cfg_get(
+NV_NEED_SUPPORT_SMS,needSMS,sizeof(needSMS));if((0x2a3+7484-0x1fdf)==strcmp(
+needSMS,"\x6e\x6f")){printf(
 "\x5b\x53\x4d\x53\x5d\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x43\x6d\x74\x52\x73\x70\x20\x6e\x65\x65\x64\x53\x4d\x53\x3d\x6e\x6f\x21"
-);return;}T_zSms_SmsInd tCmtRsp={(0xf30+4823-0x2207)};memcpy(&tCmtRsp,(
+);return;}T_zSms_SmsInd tCmtRsp={(0x9f+5617-0x1690)};memcpy(&tCmtRsp,(
 T_zSms_SmsInd*)pDatabuf,sizeof(T_zSms_SmsInd));zUfiSms_CmtRespProc(&tCmtRsp);
 zUfiMmi_SendSmsStatus();sc_cfg_set(NV_SMS_RECV_RESULT,"\x6f\x6b");}VOID 
-zSms_RecvCmtiInd(UINT8*pDatabuf){char sms_Main_state[(0xaab+6055-0x2234)]={
-(0x16f1+3192-0x2369)};T_zSms_SmsIndexInd*smsIdxInd=(T_zSms_SmsIndexInd*)pDatabuf
-;CHAR needSMS[(0x46+470-0x1ea)]={(0xdbc+1126-0x1222)};sc_cfg_get(
-NV_NEED_SUPPORT_SMS,needSMS,sizeof(needSMS));if((0x12f7+5047-0x26ae)==strcmp(
+zSms_RecvCmtiInd(UINT8*pDatabuf){char sms_Main_state[(0x922+5114-0x1cfe)]={
+(0xaa7+6220-0x22f3)};T_zSms_SmsIndexInd*smsIdxInd=(T_zSms_SmsIndexInd*)pDatabuf;
+CHAR needSMS[(0x1a72+2176-0x22c0)]={(0x1a5f+309-0x1b94)};sc_cfg_get(
+NV_NEED_SUPPORT_SMS,needSMS,sizeof(needSMS));if((0x1917+2968-0x24af)==strcmp(
 needSMS,"\x6e\x6f")){printf(
 "\x5b\x53\x4d\x53\x5d\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x43\x6d\x74\x52\x73\x70\x20\x6e\x65\x65\x64\x53\x4d\x53\x3d\x6e\x6f\x21"
 );return;}sc_cfg_get(NV_SMS_STATE,sms_Main_state,sizeof(sms_Main_state));if(
 strcmp(sms_Main_state,"\x73\x6d\x73\x5f\x64\x65\x6c\x69\x6e\x67")==
-(0x337+9024-0x2677)){printf(
+(0x1ccd+998-0x20b3)){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x43\x6d\x74\x69\x52\x73\x70\x3a\x20\x73\x6d\x73\x5f\x64\x65\x6c\x69\x6e\x67" "\n"
-);return;}if((0x137c+852-0x16d0)==strncmp("\x53\x4d",smsIdxInd->storetype,
-(0x83d+2717-0x12d8))){zUfiSms_SetSmsLocation(SMS_LOCATION_SIM);
+);return;}if((0x4b+3139-0xc8e)==strncmp("\x53\x4d",smsIdxInd->storetype,
+(0x13fb+1281-0x18fa))){zUfiSms_SetSmsLocation(SMS_LOCATION_SIM);
 zUfiSms_ChangeMainState(SMS_STATE_RECVING);zSms_SendZmgrReq(smsIdxInd->index);}
 else{printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x43\x6d\x74\x69\x52\x73\x70\x20\x3a\x73\x74\x6f\x72\x65\x20\x6c\x6f\x63\x61\x74\x69\x6f\x6e\x20\x6e\x6f\x74\x20\x53\x4d\x2e" "\n"
 );}sc_cfg_set(NV_SMS_RECV_RESULT,"");}VOID zSms_RecvCdsInd(UINT8*pDatabuf){CHAR 
-needSMS[(0x161c+2731-0x2095)]={(0xf1b+1503-0x14fa)};sc_cfg_get(
-NV_NEED_SUPPORT_SMS,needSMS,sizeof(needSMS));if((0x4+737-0x2e5)==strcmp(needSMS,
-"\x6e\x6f")){printf(
+needSMS[(0xbab+6411-0x2484)]={(0x1cd+4746-0x1457)};sc_cfg_get(
+NV_NEED_SUPPORT_SMS,needSMS,sizeof(needSMS));if((0x3f6+3041-0xfd7)==strcmp(
+needSMS,"\x6e\x6f")){printf(
 "\x5b\x53\x4d\x53\x5d\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x43\x6d\x74\x52\x73\x70\x20\x6e\x65\x65\x64\x53\x4d\x53\x3d\x6e\x6f\x21"
-);return;}T_zSms_SmsInd tCmtRsp={(0x546+556-0x772)};memcpy(&tCmtRsp,(
+);return;}T_zSms_SmsInd tCmtRsp={(0x16+9491-0x2529)};memcpy(&tCmtRsp,(
 T_zSms_SmsInd*)pDatabuf,sizeof(T_zSms_SmsInd));zUfiSms_CdsRespProc(&tCmtRsp);
 zUfiMmi_SendSmsStatus();sc_cfg_set(NV_SMS_RECV_RESULT,"\x6f\x6b");}VOID 
-zSms_RecvCdsiInd(UINT8*pDatabuf){char sms_Main_state[(0x9d7+6323-0x226c)]={
-(0xb17+3293-0x17f4)};T_zSms_SmsIndexInd*smsIdxInd=(T_zSms_SmsIndexInd*)pDatabuf;
-CHAR needSMS[(0x1a3b+891-0x1d84)]={(0x1368+3008-0x1f28)};sc_cfg_get(
-NV_NEED_SUPPORT_SMS,needSMS,sizeof(needSMS));if((0x19cc+599-0x1c23)==strcmp(
+zSms_RecvCdsiInd(UINT8*pDatabuf){char sms_Main_state[(0x1337+3046-0x1eff)]={
+(0x1862+531-0x1a75)};T_zSms_SmsIndexInd*smsIdxInd=(T_zSms_SmsIndexInd*)pDatabuf;
+CHAR needSMS[(0xdd4+4822-0x2078)]={(0xd4b+3874-0x1c6d)};sc_cfg_get(
+NV_NEED_SUPPORT_SMS,needSMS,sizeof(needSMS));if((0x190+7971-0x20b3)==strcmp(
 needSMS,"\x6e\x6f")){printf(
 "\x5b\x53\x4d\x53\x5d\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x43\x6d\x74\x52\x73\x70\x20\x6e\x65\x65\x64\x53\x4d\x53\x3d\x6e\x6f\x21"
 );return;}sc_cfg_get(NV_SMS_STATE,sms_Main_state,sizeof(sms_Main_state));if(
 strcmp(sms_Main_state,"\x73\x6d\x73\x5f\x64\x65\x6c\x69\x6e\x67")==
-(0x1df+5768-0x1867)){printf(
+(0x2bd+4477-0x143a)){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x43\x64\x73\x69\x52\x73\x70\x3a\x20\x73\x6d\x73\x5f\x64\x65\x6c\x69\x6e\x67" "\n"
-);return;}if((0x1609+3188-0x227d)==strncmp("\x53\x4d",smsIdxInd->storetype,
-(0x15c2+2055-0x1dc7))){zUfiSms_SetSmsLocation(SMS_LOCATION_SIM);
+);return;}if((0x6f3+3765-0x15a8)==strncmp("\x53\x4d",smsIdxInd->storetype,
+(0xa21+1491-0xff2))){zUfiSms_SetSmsLocation(SMS_LOCATION_SIM);
 zUfiSms_ChangeMainState(SMS_STATE_RECVING);zSms_SendZmgrReq(smsIdxInd->index);}
 else{printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x43\x64\x73\x69\x52\x73\x70\x20\x3a\x73\x74\x6f\x72\x65\x20\x6c\x6f\x63\x61\x74\x69\x6f\x6e\x20\x6e\x6f\x74\x20\x53\x4d\x2e" "\n"
 );}sc_cfg_set(NV_SMS_RECV_RESULT,"");}int zSms_SendCnmaReq(int ack_mode){
-T_zSms_SmsAckReq ackReq={(0xf3f+3025-0x1b10)};CHAR ackPduStr[(0x4b6+5620-0x1a78)
-]={(0x1775+2620-0x21b1)};ackReq.ackmode=ack_mode;if(ack_mode==(0x665+1337-0xb9c)
-){zUfiSms_EncodePdu_DeliverReport(ackPduStr,(0xf05+3925-0x1d87));memcpy(ackReq.
-pdu,ackPduStr,strlen(ackPduStr));
-#if (0xd56+633-0xfcf)

-if(strlen(ackPduStr)<ZSMS_PDU_SIZE-(0x50f+8662-0x26e4)){memcpy(ackReq.pdu,
+T_zSms_SmsAckReq ackReq={(0x9bc+4277-0x1a71)};CHAR ackPduStr[(0xe85+3787-0x1d1e)
+]={(0x2087+1424-0x2617)};ackReq.ackmode=ack_mode;if(ack_mode==
+(0xd55+5600-0x2333)){zUfiSms_EncodePdu_DeliverReport(ackPduStr,
+(0x188a+3886-0x26e5));memcpy(ackReq.pdu,ackPduStr,strlen(ackPduStr));
+#if (0x2205+202-0x22cf)

+if(strlen(ackPduStr)<ZSMS_PDU_SIZE-(0x405+8717-0x2611)){memcpy(ackReq.pdu,
 ackPduStr,strlen(ackPduStr));}else{at_print(LOG_DEBUG
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x53\x65\x6e\x64\x43\x6e\x6d\x61\x52\x65\x71\x20\x70\x64\x75\x20\x74\x6f\x6f\x20\x6c\x6f\x6e\x67\x3a\x25\x73" "\n"
-,ackPduStr);memcpy(ackReq.pdu,ackPduStr,ZSMS_PDU_SIZE-(0xa1f+5146-0x1e37));}
+,ackPduStr);memcpy(ackReq.pdu,ackPduStr,ZSMS_PDU_SIZE-(0x1913+1203-0x1dc4));}
 #endif     

 *(ackReq.pdu+strlen(ackPduStr))=ZSMS_CTRL_Z_CHAR;printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x53\x65\x6e\x64\x43\x6e\x6d\x61\x52\x65\x71\x2e\x20\x70\x64\x75\x3d\x20\x25\x73" "\n"
-,ackReq.pdu);ackReq.length=strlen(ackPduStr)/(0xc4f+5213-0x20aa);}zSms_SendMsg(
+,ackReq.pdu);ackReq.length=strlen(ackPduStr)/(0x7ab+5344-0x1c89);}zSms_SendMsg(
 MSG_CMD_SMSACK_REQ,sizeof(T_zSms_SmsAckReq),&ackReq);sem_wait(&g_sms_sem_id);if(
-g_smsOptRsp.result==(0x782+1603-0xdc4)){return ZSMS_RESULT_OK;}else{return 
+g_smsOptRsp.result==(0xd6a+97-0xdca)){return ZSMS_RESULT_OK;}else{return 
 ZSMS_RESULT_ERROR;}}int zSms_SendZmgrReq(int index){T_zSms_ReadSmsReq readSmsReq
-={(0x114c+4050-0x211e)};iSmsIndex=index;printf(
+={(0x245f+461-0x262c)};iSmsIndex=index;printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x53\x65\x6e\x64\x5a\x6d\x67\x72\x52\x65\x71\x20\x47\x65\x74\x20\x69\x6e\x64\x65\x78\x3a\x25\x64\x2e" "\n"
 ,iSmsIndex);readSmsReq.index=index;zSms_SendMsg(MSG_CMD_READSMS_REQ,sizeof(
-T_zSms_ReadSmsReq),&readSmsReq);return(0x914+2429-0x1291);}VOID zSms_RecvZmgrRsp
-(UINT8*pDatabuf){T_zSms_SmsInd tCmgrRsp={(0x60b+4230-0x1691)};memcpy(&tCmgrRsp,(
+T_zSms_ReadSmsReq),&readSmsReq);return(0x5a7+5486-0x1b15);}VOID zSms_RecvZmgrRsp
+(UINT8*pDatabuf){T_zSms_SmsInd tCmgrRsp={(0x4ed+4896-0x180d)};memcpy(&tCmgrRsp,(
 T_zSms_SmsInd*)pDatabuf,sizeof(T_zSms_SmsInd));tCmgrRsp.index=iSmsIndex;
 zUfiSms_ZmgrRespProc(&tCmgrRsp);zUfiMmi_SendSmsStatus();}VOID zSms_RecvZmgrOk(
-UINT8*pDatabuf){T_zSms_optRsp smsOptRsp={(0x1af+9053-0x250c)};memcpy(&smsOptRsp,
-(T_zSms_optRsp*)pDatabuf,sizeof(T_zSms_optRsp));if(smsOptRsp.result==
-(0x5cd+2103-0xe03)){sc_cfg_set(NV_SMS_RECV_RESULT,"\x6f\x6b");}else{printf(
+UINT8*pDatabuf){T_zSms_optRsp smsOptRsp={(0x22dc+23-0x22f3)};memcpy(&smsOptRsp,(
+T_zSms_optRsp*)pDatabuf,sizeof(T_zSms_optRsp));if(smsOptRsp.result==
+(0x495+1009-0x885)){sc_cfg_set(NV_SMS_RECV_RESULT,"\x6f\x6b");}else{printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x5a\x6d\x67\x72\x45\x72\x72\x20\x20\x53\x4d\x53\x20\x7a\x6d\x67\x72\x20\x69\x73\x20\x66\x61\x69\x6c" "\n"
 );sc_cfg_set(NV_SMS_RECV_RESULT,"\x66\x61\x69\x6c");zUfiSms_ChangeMainState(
 SMS_STATE_RECVED);}}VOID zSms_RecvZpbicInd(UINT8*pDatabuf){T_zAt_ZpbicRes*ptPara
 =ZUFI_NULL;if(pDatabuf==NULL){return;}ptPara=(T_zAt_ZpbicRes*)(pDatabuf);if((
-(0x73c+5634-0x1d3d)==ptPara->result)&&((0x1027+2545-0x1a18)==ptPara->opertype)){
-CHAR needSms[(0xed0+4629-0x20b3)]={(0x191d+1153-0x1d9e)};sc_cfg_get(
-NV_NEED_SUPPORT_SMS,needSms,sizeof(needSms));if((0x1534+4064-0x2514)!=strcmp(
+(0x40b+5886-0x1b08)==ptPara->result)&&((0xa44+334-0xb92)==ptPara->opertype)){
+CHAR needSms[(0x1028+4477-0x2173)]={(0xb19+773-0xe1e)};sc_cfg_get(
+NV_NEED_SUPPORT_SMS,needSms,sizeof(needSms));if((0x23a0+348-0x24fc)!=strcmp(
 needSms,"\x6e\x6f")){zSvr_Zpbic_Sms_Init();}}}VOID zSms_RecvCpmsInd(UINT8*
 pDatabuf){T_zSms_CpmsInd*cpmsInd=(T_zSms_CpmsInd*)pDatabuf;CHAR strBuf[
-(0x1dc+1979-0x98d)]={(0xbf2+4658-0x1e24)};int remainSpace=(0x16c1+1199-0x1b70);
+(0x316+5220-0x1770)]={(0xe98+1049-0x12b1)};int remainSpace=(0xff0+3939-0x1f53);
 snprintf(strBuf,sizeof(strBuf),"\x25\x64",cpmsInd->total);sc_cfg_set(
 ZTE_WMS_NVCONFIG_SIM_CARD_TOTAL,strBuf);sc_cfg_set(
-ZTE_WMS_NVCONFIG_SIM_CAPABILITY,strBuf);memset(&strBuf,(0x3d9+6008-0x1b51),
-(0xc30+4327-0x1d0d));snprintf(strBuf,sizeof(strBuf),"\x25\x64",cpmsInd->used);
+ZTE_WMS_NVCONFIG_SIM_CAPABILITY,strBuf);memset(&strBuf,(0x583+871-0x8ea),
+(0x1a0+5535-0x1735));snprintf(strBuf,sizeof(strBuf),"\x25\x64",cpmsInd->used);
 sc_cfg_set(ZTE_WMS_NVCONFIG_SIM_CARD_USED,strBuf);remainSpace=cpmsInd->total-
-cpmsInd->used;memset(&strBuf,(0x704+482-0x8e6),(0x67f+4776-0x191d));snprintf(
+cpmsInd->used;memset(&strBuf,(0x10b1+3979-0x203c),(0x718+268-0x81a));snprintf(
 strBuf,sizeof(strBuf),"\x25\x64",remainSpace);sc_cfg_set(
 ZTE_WMS_NVCONFIG_SIM_CARD_REMAIN,strBuf);sc_cfg_set(NV_SMS_STORE,"\x6f\x6b");}
-#define AT_CMD_MAX (0xd49+5232-0x2179)

-#define ZAT_TAB_REPLACE                     ((unsigned char )(\
-(0xe58+1504-0x133c)))    

-#define ZAT_NULL_FILL                       ((unsigned char )((0x8b6+384-0x939))\
-)    

+#define AT_CMD_MAX (0xc70+2789-0x1715)

+#define ZAT_TAB_REPLACE                     ((unsigned char )((0x8d7+1033-0xbe4)\
+))    

+#define ZAT_NULL_FILL                       ((unsigned char )(\
+(0xe5d+4088-0x1d58)))    

 #define ZAT_SPACE_REPLACE                   ((unsigned char )(\
-(0x18eb+3448-0x2565)))    

-#define ZAT_LF_REPLACE                      ((unsigned char )((0xb58+822-0xd93))\
-)    

+(0x11a8+5336-0x2582)))    

+#define ZAT_LF_REPLACE                      ((unsigned char )(\
+(0xb60+6086-0x222b)))    

 #define ZAT_CR_REPLACE                      ((unsigned char )(\
-(0x161+5518-0x15f5)))    

+(0x1ea+7357-0x1dad)))    

 static void atBase_PreProcRes(char*pParaLine,int paraSize){signed long flg=
-(0xda0+566-0xfd6);unsigned long i=(0x1eb3+1068-0x22df);unsigned long length=
-(0xf17+3367-0x1c3e);char*pSource=pParaLine;char*pDest=NULL;char*pStrDestMalloc=(
+(0x1081+5593-0x265a);unsigned long i=(0x146b+916-0x17ff);unsigned long length=
+(0x19ff+501-0x1bf4);char*pSource=pParaLine;char*pDest=NULL;char*pStrDestMalloc=(
 char*)malloc(AT_CMD_MAX);if(NULL==pStrDestMalloc){return;}memset(pStrDestMalloc,
-(0x1abb+1361-0x200c),AT_CMD_MAX);assert(pParaLine!=NULL);pDest=pStrDestMalloc;
-length=strlen(pParaLine);if((length==(0x1aeb+1330-0x201d))||(length>=AT_CMD_MAX)
-){free(pStrDestMalloc);return;}for(i=(0x74c+1344-0xc8c);(i<length)&&(pDest-
-pStrDestMalloc<AT_CMD_MAX);i++){if(((char)(0x21d6+1233-0x2685))==*pSource){flg=(
-(0x2222+1106-0x2674)==flg)?(0x957+1773-0x1043):(0x465+182-0x51b);if(
-((char)(0xea6+5984-0x25e4))==*(pSource+(0xff7+1070-0x1424))){*pDest++=(char)
-ZAT_NULL_FILL;}}else if((((char)(0x12c5+134-0x131f))==*pSource)&&(
-(0x338+2983-0xedf)==flg)){*pDest++=((char)(0xd3c+5912-0x2434));if(
-((char)(0x2b1+5360-0x1775))==*(pSource+(0xdaa+3259-0x1a64))){*pDest++=
-((char)(0xa9f+2169-0x12df));}else if('\0'==*(pSource+(0xbb9+598-0xe0e))){*pDest
-++=(char)ZAT_NULL_FILL;}}else{if((((char)(0x1491+3161-0x20ca))==*pSource)&&(
-(0x8af+6095-0x207d)==flg)){*pDest++=(char)ZAT_SPACE_REPLACE;}else if(('\t'==*
-pSource)&&((0x3d9+5659-0x19f3)==flg)){*pDest++=(char)ZAT_TAB_REPLACE;}else if((
-'\n'==*pSource)&&((0x22f+7637-0x2003)==flg)){*pDest++=(char)ZAT_LF_REPLACE;}else
- if(('\r'==*pSource)&&((0x2256+933-0x25fa)==flg)){*pDest++=(char)ZAT_CR_REPLACE;
-}else{*pDest++=*pSource;}}pSource++;}memset(pParaLine,(0x1555+3062-0x214b),
-paraSize);strncpy(pParaLine,pStrDestMalloc,paraSize-(0x384+1797-0xa88));free(
+(0xdaa+345-0xf03),AT_CMD_MAX);assert(pParaLine!=NULL);pDest=pStrDestMalloc;
+length=strlen(pParaLine);if((length==(0x124d+4262-0x22f3))||(length>=AT_CMD_MAX)
+){free(pStrDestMalloc);return;}for(i=(0x422+3088-0x1032);(i<length)&&(pDest-
+pStrDestMalloc<AT_CMD_MAX);i++){if(((char)(0x199c+1558-0x1f90))==*pSource){flg=(
+(0x24c+8138-0x2216)==flg)?(0x13b5+3995-0x234f):(0xcf3+5879-0x23ea);if(
+((char)(0xf25+2943-0x1a82))==*(pSource+(0x7dc+7468-0x2507))){*pDest++=(char)
+ZAT_NULL_FILL;}}else if((((char)(0x793+2853-0x128c))==*pSource)&&(
+(0x90d+380-0xa89)==flg)){*pDest++=((char)(0x1015+4238-0x2083));if(
+((char)(0xd15+88-0xd41))==*(pSource+(0x242+5438-0x177f))){*pDest++=
+((char)(0xd9a+2582-0x1777));}else if('\0'==*(pSource+(0x19cf+1746-0x20a0))){*
+pDest++=(char)ZAT_NULL_FILL;}}else{if((((char)(0x1138+1436-0x16b4))==*pSource)&&
+((0xf49+1111-0x139f)==flg)){*pDest++=(char)ZAT_SPACE_REPLACE;}else if(('\t'==*
+pSource)&&((0x201+7221-0x1e35)==flg)){*pDest++=(char)ZAT_TAB_REPLACE;}else if((
+'\n'==*pSource)&&((0x410+6925-0x1f1c)==flg)){*pDest++=(char)ZAT_LF_REPLACE;}else
+ if(('\r'==*pSource)&&((0x1e02+1484-0x23cd)==flg)){*pDest++=(char)ZAT_CR_REPLACE
+;}else{*pDest++=*pSource;}}pSource++;}memset(pParaLine,(0x20f8+144-0x2188),
+paraSize);strncpy(pParaLine,pStrDestMalloc,paraSize-(0x12d6+3937-0x2236));free(
 pStrDestMalloc);}VOID zSms_RecvCscaInd(UINT8*pDatabuf){T_zSms_CscaInd cscaInd={
-(0xa27+7273-0x2690)};
-#if (0x59+5825-0x1719)
+(0x3b5+3818-0x129f)};
+#if (0x1797+2899-0x22e9)
 printf(
 "\x5b\x53\x4d\x53\x63\x6f\x72\x65\x6d\x5d\x7a\x53\x6d\x73\x5f\x52\x65\x63\x76\x43\x73\x63\x61\x49\x6e\x64\x20\x64\x61\x74\x61\x62\x75\x66\x3a\x25\x73" "\n"
 ,pDatabuf);
 #endif

 atBase_PreProcRes(pDatabuf,strlen(pDatabuf));sscanf(pDatabuf,
 "\x25\x32\x31\x73\x20\x25\x32\x31\x73",cscaInd.sca,cscaInd.tosca);
-#if (0x38f+3878-0x12b4)
+#if (0xebd+1953-0x165d)
 printf(
 "\x5b\x53\x4d\x53\x63\x6f\x72\x65\x6d\x5d\x7a\x53\x6d\x73\x5f\x52\x65\x63\x76\x43\x73\x63\x61\x49\x6e\x64\x20\x73\x63\x61\x3a\x25\x73\x2c\x20\x74\x6f\x73\x63\x61\x25\x73" "\n"
 ,cscaInd.sca,cscaInd.tosca);
@@ -312,22 +312,22 @@
 sc_cfg_set(NV_SMS_CENTER_NUM,cscaInd.sca);zUfiSms_SetScaPara(cscaInd.sca);}VOID 
 zSms_RecvZmglInd(UINT8*pDatabuf){zUfiSms_CmglRespProc((T_zSms_SmsInd*)pDatabuf);
 }int zSms_SendSmsInitReq(VOID){zSms_SendMsg(MSG_CMD_SMSINIT_REQ,
-(0x15b7+196-0x167b),NULL);return(0xb51+127-0xbd0);}VOID zSms_initAtOk(VOID){
-T_zUfiSms_StatusInfo tStatus={(0x568+552-0x790)};sc_cfg_set(NV_SMS_STORE,
+(0x1205+1380-0x1769),NULL);return(0x1087+2027-0x1872);}VOID zSms_initAtOk(VOID){
+T_zUfiSms_StatusInfo tStatus={(0x0+609-0x261)};sc_cfg_set(NV_SMS_STORE,
 "\x6f\x6b");sc_cfg_set(NV_SMS_LOAD_RESULT,"\x6f\x6b");tStatus.cmd_status=
 WMS_CMD_SUCCESS;tStatus.cmd=WMS_SMS_CMD_INIT;(void)zUfiSms_SetCmdStatus(&tStatus
 );zUfiSms_ChangeMainState(SMS_STATE_LOADED);}VOID zSms_initAtErr(VOID){
-T_zUfiSms_StatusInfo tStatus={(0x263+8551-0x23ca)};sc_cfg_set(NV_SMS_LOAD_RESULT
+T_zUfiSms_StatusInfo tStatus={(0x2ca+3881-0x11f3)};sc_cfg_set(NV_SMS_LOAD_RESULT
 ,"\x66\x61\x69\x6c");zUfiSms_ChangeMainState(SMS_STATE_LOADED);tStatus.
 cmd_status=WMS_CMD_FAILED;tStatus.cmd=WMS_SMS_CMD_INIT;(void)
 zUfiSms_SetCmdStatus(&tStatus);}VOID zSms_RecvSmsInitRst(UINT8*pDatabuf){memcpy(
 &g_smsOptRsp,pDatabuf,sizeof(T_zSms_optRsp));if(g_smsOptRsp.result==
-(0x165f+1230-0x1b2c)){zSms_initAtOk();}else{zSms_initAtErr();}}UINT8 
+(0x2a7+8936-0x258e)){zSms_initAtOk();}else{zSms_initAtErr();}}UINT8 
 zSms_SmsMsgCreat(VOID){g_zSms_MsqId=msgget(MODULE_ID_SMS,IPC_CREAT|
-(0x1f9+5559-0x1630));if(g_zSms_MsqId==-(0x473+7249-0x20c3)){return ZUFI_FAIL;}
-g_zSms_LocalMsqId=msgget(MODULE_ID_SMS_LOCAL,IPC_CREAT|(0xb52+4785-0x1c83));if(
-g_zSms_LocalMsqId==-(0xf79+351-0x10d7)){return ZUFI_FAIL;}sem_init(&g_sms_sem_id
-,(0x523+1527-0xb1a),(0x188d+1027-0x1c90));return ZUFI_SUCC;}void 
+(0x5b1+6280-0x1cb9));if(g_zSms_MsqId==-(0x5da+5883-0x1cd4)){return ZUFI_FAIL;}
+g_zSms_LocalMsqId=msgget(MODULE_ID_SMS_LOCAL,IPC_CREAT|(0x640+6232-0x1d18));if(
+g_zSms_LocalMsqId==-(0x8f+1354-0x5d8)){return ZUFI_FAIL;}sem_init(&g_sms_sem_id,
+(0x1e9+751-0x4d8),(0x192+8324-0x2216));return ZUFI_SUCC;}void 
 zSms_HandleAtctlLocalMsg(MSG_BUF*ptMsgBuf){assert(ptMsgBuf!=NULL);printf(
 "\x73\x6d\x73\x20\x6c\x6f\x63\x61\x6c\x20\x72\x65\x63\x76\x20\x6d\x73\x67\x20\x63\x6d\x64\x3a\x25\x64" "\n"
 ,ptMsgBuf->usMsgCmd);switch(ptMsgBuf->usMsgCmd){case MSG_CMD_ZPBIC_IND:
@@ -351,44 +351,44 @@
 case MSG_CMD_NEWSMS_IND:case MSG_CMD_ZPBIC_IND:case MSG_CMD_ZMGL_IND:case 
 MSG_CMD_NEWSMS_STATUS_IND:ipc_send_message(MODULE_ID_SMS,MODULE_ID_SMS_LOCAL,
 ptMsgBuf->usMsgCmd,ptMsgBuf->usDataLen,(unsigned char*)ptMsgBuf->aucDataBuf,
-(0x196a+2204-0x2206));break;default:break;}}VOID zSms_HandleResetToFactory(){
-CHAR clearSms[(0x18b2+1237-0x1d55)]={(0x1ddd+2036-0x25d1)};sc_cfg_get(
+(0xbe8+6883-0x26cb));break;default:break;}}VOID zSms_HandleResetToFactory(){CHAR
+ clearSms[(0xea7+3501-0x1c22)]={(0xe48+3745-0x1ce9)};sc_cfg_get(
 NV_CLEAR_SMS_WHEN_RESTORE,clearSms,sizeof(clearSms));printf(
 "\x61\x74\x57\x65\x62\x5f\x52\x65\x73\x74\x6f\x72\x65\x46\x61\x63\x74\x6f\x72\x79\x53\x65\x74\x74\x69\x6e\x67\x20\x65\x6e\x74\x65\x72\x65\x64\x21\x20" "\n"
 );printf(
 "\x63\x6c\x65\x61\x72\x5f\x73\x6d\x73\x5f\x77\x68\x65\x6e\x5f\x72\x65\x73\x74\x6f\x72\x65\x3d\x25\x73\x20" "\n"
-,clearSms);if(strcmp(clearSms,"\x79\x65\x73")==(0x13cb+1618-0x1a1d)){printf(
+,clearSms);if(strcmp(clearSms,"\x79\x65\x73")==(0x169d+1021-0x1a9a)){printf(
 "\x7a\x55\x66\x69\x53\x6d\x73\x5f\x44\x72\x6f\x70\x41\x6c\x6c\x54\x61\x62\x6c\x65\x20\x65\x6e\x74\x65\x72\x65\x64\x21\x20" "\n"
 );zUfiSms_DropAllTable();}else{printf(
 "\x7a\x55\x66\x69\x53\x6d\x73\x5f\x44\x72\x6f\x70\x41\x6c\x6c\x54\x61\x62\x6c\x65\x45\x78\x63\x65\x70\x74\x53\x6d\x73\x20\x65\x6e\x74\x65\x72\x65\x64\x21\x20" "\n"
 );zUfiSms_DropAllTableExceptSms();}ipc_send_message(MODULE_ID_SMS,
-MODULE_ID_MAIN_CTRL,MSG_CMD_RESET_RSP,(0x1b62+182-0x1c18),NULL,
-(0x1dc3+408-0x1f5b));}void zSms_HandleMainCtrlMsg(MSG_BUF*ptMsgBuf){assert(
-ptMsgBuf!=NULL);printf(
+MODULE_ID_MAIN_CTRL,MSG_CMD_RESET_RSP,(0x7b3+1522-0xda5),NULL,(0x264+2161-0xad5)
+);}void zSms_HandleMainCtrlMsg(MSG_BUF*ptMsgBuf){assert(ptMsgBuf!=NULL);printf(
 "\x73\x6d\x73\x20\x72\x65\x63\x76\x20\x6d\x61\x69\x6e\x20\x63\x74\x72\x6c\x20\x6d\x73\x67\x20\x63\x6d\x64\x3a\x25\x64" "\n"
 ,ptMsgBuf->usMsgCmd);switch(ptMsgBuf->usMsgCmd){case MSG_CMD_RESET_NOTIFY:
 zSms_HandleResetToFactory(ptMsgBuf->aucDataBuf);break;default:break;}}void 
-sms_msg_thread_proc(void*arg){int iRet=(0x128f+3342-0x1f9d);MSG_BUF stMsg={
-(0x1850+3552-0x2630)};int msgSize=sizeof(MSG_BUF)-sizeof(long);int queueId=*((
+sms_msg_thread_proc(void*arg){int iRet=(0x4f0+6402-0x1df2);MSG_BUF stMsg={
+(0x1145+4619-0x2350)};int msgSize=sizeof(MSG_BUF)-sizeof(long);int queueId=*((
 int*)arg);prctl(PR_SET_NAME,"\x73\x6d\x73\x5f\x6c\x6f\x63\x61\x6c",
-(0x1737+2859-0x2262),(0x1e7+2701-0xc74),(0xc11+2609-0x1642));while(
-(0x1299+4983-0x260f)){iRet=(0x533+4027-0x14ee);memset(&stMsg,(0x106+7603-0x1eb9)
-,sizeof(MSG_BUF));iRet=msgrcv(queueId,&stMsg,msgSize,(0x1383+581-0x15c8),
-(0x8c4+5118-0x1cc2));if(iRet>=(0x1321+2450-0x1cb3)){switch(stMsg.src_id){case 
-MODULE_ID_WEB_CGI:{zSms_HandleWebMsg(&stMsg);break;}case MODULE_ID_AT_CTL:{
-zSms_HandleAtctlMsg(&stMsg);break;}case MODULE_ID_SMS:{zSms_HandleWebMsg(&stMsg)
-;zSms_HandleAtctlLocalMsg(&stMsg);break;}case MODULE_ID_MAIN_CTRL:{
-zSms_HandleMainCtrlMsg(&stMsg);break;}default:{break;}}}else{at_print(AT_DEBUG,
+(0x63f+7722-0x2469),(0x4d6+2188-0xd62),(0x846+2174-0x10c4));while(
+(0x11a9+2963-0x1d3b)){iRet=(0x1933+208-0x1a03);memset(&stMsg,
+(0x163d+1551-0x1c4c),sizeof(MSG_BUF));iRet=msgrcv(queueId,&stMsg,msgSize,
+(0x2604+242-0x26f6),(0x8d7+7500-0x2623));if(iRet>=(0x8d8+296-0xa00)){switch(
+stMsg.src_id){case MODULE_ID_WEB_CGI:{zSms_HandleWebMsg(&stMsg);break;}case 
+MODULE_ID_AT_CTL:{zSms_HandleAtctlMsg(&stMsg);break;}case MODULE_ID_SMS:{
+zSms_HandleWebMsg(&stMsg);zSms_HandleAtctlLocalMsg(&stMsg);break;}case 
+MODULE_ID_MAIN_CTRL:{zSms_HandleMainCtrlMsg(&stMsg);break;}default:{break;}}}
+else{at_print(AT_DEBUG,
 "\x65\x72\x72\x6e\x6f\x20\x3d\x20\x25\x64\x2c\x20\x65\x72\x72\x6d\x73\x67\x20\x3d\x20\x25\x73" "\n"
 ,errno,strerror(errno));}}}int sms_main(int argc,char*argv[]){pthread_t 
-recv_thread_tid=(0x1823+2513-0x21f4);MSG_BUF msgBuf={(0x1187+3656-0x1fcf)};CHAR 
-needSMS[(0xa0+1507-0x651)]={(0x1d2+7042-0x1d54)};prctl(PR_SET_NAME,
-"\x73\x6d\x73\x5f\x6d\x61\x69\x6e",(0x1827+3126-0x245d),(0x641+3445-0x13b6),
-(0x14a+5695-0x1789));loglevel_init();sc_cfg_get(NV_NEED_SUPPORT_SMS,needSMS,
-sizeof(needSMS));if((0xf23+1268-0x1417)!=strcmp(needSMS,"\x6e\x6f")){
+recv_thread_tid=(0x7f8+4268-0x18a4);MSG_BUF msgBuf={(0x1678+3496-0x2420)};CHAR 
+needSMS[(0x1d5+8930-0x2485)]={(0x11a+3104-0xd3a)};prctl(PR_SET_NAME,
+"\x73\x6d\x73\x5f\x6d\x61\x69\x6e",(0x17c5+1538-0x1dc7),(0x1d7+1961-0x980),
+(0xd5f+1528-0x1357));loglevel_init();sc_cfg_get(NV_NEED_SUPPORT_SMS,needSMS,
+sizeof(needSMS));if((0xa32+4676-0x1c76)!=strcmp(needSMS,"\x6e\x6f")){
 zUfiSms_InitDb();zUfiSms_CfgSmsNvInit();zUfiMmi_SendSmsStatus();zSms_SmsMsgCreat
-();}else{return-(0x1d2+3247-0xe80);}printf(
+();}else{return-(0x56d+4938-0x18b6);}printf(
 "\x73\x6d\x73\x20\x61\x70\x70\x20\x69\x6e\x69\x74\x20\x66\x69\x6e\x69\x73\x68\x65\x64\x2c\x20\x77\x69\x6c\x6c\x20\x74\x6f\x20\x72\x65\x63\x65\x69\x76\x65\x20\x6d\x73\x67\x2c\x20\x6d\x73\x67\x69\x64\x3a\x25\x64" "\n"
 ,g_zSms_MsqId);if(pthread_create(&recv_thread_tid,NULL,sms_msg_thread_proc,(void
-*)(&g_zSms_LocalMsqId))==-(0x103+6918-0x1c08)){assert((0xa80+574-0xcbe));}
-sms_msg_thread_proc(&g_zSms_MsqId);return(0xd46+3843-0x1c49);}
+*)(&g_zSms_LocalMsqId))==-(0xc09+426-0xdb2)){assert((0x4f2+2779-0xfcd));}
+sms_msg_thread_proc(&g_zSms_MsqId);return(0xc1d+1809-0x132e);}
diff --git a/ap/app/zte_comm/sms/src/sms_proc.c b/ap/app/zte_comm/sms/src/sms_proc.c
index 1cc316c..93b20d0 100755
--- a/ap/app/zte_comm/sms/src/sms_proc.c
+++ b/ap/app/zte_comm/sms/src/sms_proc.c
@@ -5,117 +5,117 @@
 T_zUfiSms_ConcatInfo g_zUfiSms_ConcatSms;T_zUfiSms_GroupInfo g_zUfiSms_GroupSms;
 T_zUfiSms_DbStoreData g_zUfiSms_DbStoreData[ZTE_WMS_CONCAT_SMS_COUNT_MAX];UINT8 
 g_zUfiSms_MemFullFlag[ZTE_WMS_MEMORY_MAX]={FALSE,FALSE};T_zUfiSms_DelSms 
-g_zUfiSms_DelMsg;T_zUfiSms_DelIndexInfo g_deleteIndex={(0xfed+5814-0x26a3)};
-T_zUfiSms_ModifySms g_zUfiSms_modifyMsg={(0x180f+1275-0x1d0a)};
-T_zUfiSms_ModifyIndexInfo g_modifyIndex={(0x2353+886-0x26c9)};int 
-g_zUfiSms_UnitLen=(0xedb+3627-0x1d06);int g_zUfiSms_ConcatTotalNum=
-(0x1cad+1440-0x224d);int g_zUfiSms_CurConcatSegNo=(0x10e5+4553-0x22ae);UINT8 
-g_zUfiSms_IsConcatSendSuc=TRUE;int g_zUfiSms_SendFailedCount=(0xfbf+5273-0x2458)
-;int g_zUfiSms_MsgRefer=(0x1b0+1732-0x874);int g_zUfiSms_SendFailedRetry=
-(0x13ea+3552-0x21ca);char g_Zmena_value[(0xba5+3506-0x1955)]={
-(0xe6b+3139-0x1aae)};int g_displaymode=(0x11c2+2044-0x19be);extern SMS_LOCATION 
-g_zUfiSms_CurLocation;extern T_zUfiSms_CmdStatus zUfiSms_HandleReport(unsigned 
-char*ptPduData);extern void zUfiSms_GetReportStatus(char*pdu_tmp,int*stat);
-extern VOID zUfiSms_ResendAtCmdZmena(int cid);extern int zUfiSms_DecodeSmsData(
+g_zUfiSms_DelMsg;T_zUfiSms_DelIndexInfo g_deleteIndex={(0x22c9+1069-0x26f6)};
+T_zUfiSms_ModifySms g_zUfiSms_modifyMsg={(0xfe7+1958-0x178d)};
+T_zUfiSms_ModifyIndexInfo g_modifyIndex={(0x154c+3471-0x22db)};int 
+g_zUfiSms_UnitLen=(0x85a+3958-0x17d0);int g_zUfiSms_ConcatTotalNum=
+(0x1603+2153-0x1e6c);int g_zUfiSms_CurConcatSegNo=(0x1b19+1141-0x1f8e);UINT8 
+g_zUfiSms_IsConcatSendSuc=TRUE;int g_zUfiSms_SendFailedCount=(0x23e1+106-0x244b)
+;int g_zUfiSms_MsgRefer=(0x4d+5456-0x159d);int g_zUfiSms_SendFailedRetry=
+(0x313+210-0x3e5);char g_Zmena_value[(0x1c5+90-0x21d)]={(0xad7+4316-0x1bb3)};int
+ g_displaymode=(0x1346+1795-0x1a49);extern SMS_LOCATION g_zUfiSms_CurLocation;
+extern T_zUfiSms_CmdStatus zUfiSms_HandleReport(unsigned char*ptPduData);extern 
+void zUfiSms_GetReportStatus(char*pdu_tmp,int*stat);extern VOID 
+zUfiSms_ResendAtCmdZmena(int cid);extern int zUfiSms_DecodeSmsData(
 T_zUfiSms_DbStoreData*pDb_Data,int msg_index,zUfiSms_StoreType iStorePos,
 T_SmsStatus bSms_Status,wms_message_format_enum_v01 format,long iPdu_Len,
 unsigned char*pPdu_Received);typedef struct{long mtype;char mtext[
-(0xf93+4296-0x204f)];}FOTA_MSG_BUF;
-#define WEBUI_NOTIFY_PUSH_MSG_  (0xdcc+5001-0x2152)

+(0x1500+2150-0x1d5a)];}FOTA_MSG_BUF;
+#define WEBUI_NOTIFY_PUSH_MSG_  (0x770+1039-0xb7c)

 typedef struct{unsigned int isread_record;unsigned int inbox_full;}
 T_zUfiMmi_SmsRecord;void zUfiMmi_SendSmsStatus(void){int iSmsNum=
-(0x11f4+3657-0x203d);T_zUfiMmi_SmsRecord tRecord={(0x1885+2145-0x20e6)};CHAR 
-smsNum[(0x1e4f+127-0x1e9c)]={(0x145d+2663-0x1ec4)};sc_cfg_get(NV_SMS_IN_NUM,
+(0xcf3+3149-0x1940);T_zUfiMmi_SmsRecord tRecord={(0x670+2937-0x11e9)};CHAR 
+smsNum[(0x14e3+2947-0x2034)]={(0x64d+4046-0x161b)};sc_cfg_get(NV_SMS_IN_NUM,
 smsNum,sizeof(smsNum));iSmsNum=atoi(smsNum);tRecord.isread_record=
 zUfiSms_IsUnreadSms(ZTE_WMS_MEMORY_MAX);if(iSmsNum>=ZSMS_NUM_MAX_CPE){tRecord.
-inbox_full=(0xd9c+854-0x10f1);}else{tRecord.inbox_full=(0xb10+2309-0x1415);}}
+inbox_full=(0xcbf+1422-0x124c);}else{tRecord.inbox_full=(0x902+1983-0x10c1);}}
 VOID zUfiSms_Init(VOID){zUfiSms_CfgInit();zUfiSms_ChangeMainState(
-SMS_STATE_INITING);}VOID zSvr_Zpbic_Sms_Init(VOID){int atRes=(0x17f+8421-0x2264)
-;T_zUfiSms_StatusInfo tStatus={(0x56b+8266-0x25b5)};CHAR outDate[
-(0x11b+5276-0x1585)]={(0x278+7454-0x1f96)};zUfiSms_Init();zUfiSms_InitCmdStatus(
-&tStatus,WMS_SMS_CMD_INIT);zSms_SendSmsInitReq();at_print(LOG_DEBUG,
+SMS_STATE_INITING);}VOID zSvr_Zpbic_Sms_Init(VOID){int atRes=(0x1cfb+339-0x1e4e)
+;T_zUfiSms_StatusInfo tStatus={(0x19ca+1232-0x1e9a)};CHAR outDate[
+(0x1373+3995-0x22dc)]={(0xccd+4769-0x1f6e)};zUfiSms_Init();zUfiSms_InitCmdStatus
+(&tStatus,WMS_SMS_CMD_INIT);zSms_SendSmsInitReq();at_print(LOG_DEBUG,
 "corem zSvr_Zpbic_Sms_Init has send init req\n");zSms_SendZmenaReq(
-(0xab6+4361-0x1bbf));at_print(LOG_DEBUG,
+(0xb49+84-0xb9d));at_print(LOG_DEBUG,
 "\x63\x6f\x72\x65\x6d\x20\x7a\x53\x76\x72\x5f\x5a\x70\x62\x69\x63\x5f\x53\x6d\x73\x5f\x49\x6e\x69\x74\x20\x68\x61\x73\x20\x73\x65\x6e\x64\x20\x7a\x6d\x65\x6e\x61\x20\x72\x65\x71" "\n"
 );sc_cfg_get(NV_OUTDATE_DELETE,outDate,sizeof(outDate));at_print(LOG_DEBUG,
 "\x63\x6f\x72\x65\x6d\x20\x7a\x53\x76\x72\x5f\x5a\x70\x62\x69\x63\x5f\x53\x6d\x73\x5f\x49\x6e\x69\x74\x20\x6f\x75\x74\x64\x61\x74\x65\x20\x63\x68\x65\x63\x6b\x20\x25\x73" "\n"
-,outDate);if((0xa7+9302-0x24fd)==strcmp(outDate,"\x31")){atWeb_OutdateSmsCheck(
+,outDate);if((0x4f+7300-0x1cd3)==strcmp(outDate,"\x31")){atWeb_OutdateSmsCheck(
 ZUFI_NULL);}}VOID zUfiSms_DeleteAllSimSms(VOID){zUfiSms_DeleteAllSimSmsInDb();}
-#if (0x1046+788-0x135a)

-VOID zUfiSms_ResendAtCmdZmena(int cid){CHAR netType[(0x2387+538-0x256f)]={
-(0x22f+4744-0x14b7)};sc_cfg_get(NV_NETWORK_TYPE,netType,sizeof(netType));if(!
-g_Zmena_rsp&&((0xa67+441-0xc20)!=strcmp(
-"\x4e\x6f\x20\x53\x65\x72\x76\x69\x63\x65",netType)&&(0x2d8+2290-0xbca)!=strcmp(
-"\x4c\x69\x6d\x69\x74\x65\x64\x20\x53\x65\x72\x76\x69\x63\x65",netType))){
+#if (0x967+2602-0x1391)

+VOID zUfiSms_ResendAtCmdZmena(int cid){CHAR netType[(0x215+5482-0x174d)]={
+(0x18a0+2667-0x230b)};sc_cfg_get(NV_NETWORK_TYPE,netType,sizeof(netType));if(!
+g_Zmena_rsp&&((0x79+5045-0x142e)!=strcmp(
+"\x4e\x6f\x20\x53\x65\x72\x76\x69\x63\x65",netType)&&(0x1aa0+365-0x1c0d)!=strcmp
+("\x4c\x69\x6d\x69\x74\x65\x64\x20\x53\x65\x72\x76\x69\x63\x65",netType))){
 atUnsoli_Report_Zmena(NULL,cid);}}
 #endif

 void zUfiSms_Ack_new_msg(BOOL needAck){
-#if (0xcd8+1092-0x111c)

-CHAR ackPduStr[(0xdf6+3428-0x19ca)]={(0xa37+5722-0x2091)};SMS_PARAM reportParam=
-{(0x58+7895-0x1f2f)};int total_length=(0x11a0+2494-0x1b5e);UINT8 TP_FCS=
-(0x164d+286-0x176b);CHAR strValue[(0x1f95+1903-0x2702)]={(0x124f+4863-0x254e)};
-if(needAck){TP_FCS=(0x5f2+7330-0x2294);sprintf(strValue,"\x25\x64",
-(0x1572+3283-0x2244));}else{TP_FCS=(0xdc1+2602-0x1718);sprintf(strValue,
-"\x25\x64",(0x58+3039-0xc35));}sprintf(reportParam.SCA,"\x25\x73",cfg_get(
+#if (0x115b+2066-0x196d)

+CHAR ackPduStr[(0x6aa+212-0x5ee)]={(0x1518+3582-0x2316)};SMS_PARAM reportParam={
+(0x5ac+7938-0x24ae)};int total_length=(0x120d+2428-0x1b89);UINT8 TP_FCS=
+(0x8ba+782-0xbc8);CHAR strValue[(0x692+7191-0x22a7)]={(0x6a2+6873-0x217b)};if(
+needAck){TP_FCS=(0xbaf+3555-0x1992);sprintf(strValue,"\x25\x64",
+(0xc33+1536-0x1232));}else{TP_FCS=(0x12a3+4477-0x234d);sprintf(strValue,
+"\x25\x64",(0xdf1+957-0x11ac));}sprintf(reportParam.SCA,"\x25\x73",cfg_get(
 "\x73\x6d\x73\x5f\x63\x65\x6e\x74\x65\x72\x5f\x6e\x75\x6d"));total_length=
 zUfiSms_EncodePdu_DeliverReport(&reportParam,ackPduStr,TP_FCS);memset(&
-g_zUfiSms_ackPdu,(0x1979+1973-0x212e),sizeof(g_zUfiSms_ackPdu));g_zUfiSms_ackPdu
-.length=String2Bytes(ackPduStr,g_zUfiSms_ackPdu.pdu,strlen(ackPduStr));memset(
-g_zUfiSms_ackPdu.pdu,(0xa66+2162-0x12d8),sizeof(g_zUfiSms_ackPdu.pdu));memcpy(&
+g_zUfiSms_ackPdu,(0x141d+877-0x178a),sizeof(g_zUfiSms_ackPdu));g_zUfiSms_ackPdu.
+length=String2Bytes(ackPduStr,g_zUfiSms_ackPdu.pdu,strlen(ackPduStr));memset(
+g_zUfiSms_ackPdu.pdu,(0xf15+2387-0x1868),sizeof(g_zUfiSms_ackPdu.pdu));memcpy(&
 g_zUfiSms_ackPdu.pdu,&ackPduStr,sizeof(ackPduStr));atBase_SendMsgToSelf(
 ZAT_CNMA_CMD,strValue,sizeof(strValue));
 #endif

-#if (0x7f4+6914-0x22f6)
-CHAR strValue[(0x226+9013-0x2559)]={(0x738+5951-0x1e77)};if(needAck){snprintf(
-strValue,sizeof(strValue),"\x25\x64",(0x113+452-0x2d6));}else{snprintf(strValue,
-sizeof(strValue),"\x25\x64",(0x1dad+1111-0x2202));}zSvr_InnerSendMsg(
+#if (0xc0a+801-0xf2b)
+CHAR strValue[(0xf05+970-0x12cd)]={(0x154+7746-0x1f96)};if(needAck){snprintf(
+strValue,sizeof(strValue),"\x25\x64",(0x30f+8696-0x2506));}else{snprintf(
+strValue,sizeof(strValue),"\x25\x64",(0x21cb+594-0x241b));}zSvr_InnerSendMsg(
 ZUFI_MODULE_ID_AT_LOCAL,ZUFI_MODULE_ID_AT_UNSOLI,MSG_CMD_AT_CNMA,strlen(strValue
 ),strValue);
 #endif

-if(needAck){zSms_SendCnmaReq((0x1cb4+450-0x1e75));}else{zSms_SendCnmaReq(
-(0x114b+412-0x12e5));}}T_zUfiSms_CmdStatus zUfiSms_SendRawSms(T_zUfiSms_SendReq*
-ptSendMsg){if(NULL==ptSendMsg||(0x195f+1333-0x1e94)==ptSendMsg->receiver_count){
+if(needAck){zSms_SendCnmaReq((0xa77+4190-0x1ad4));}else{zSms_SendCnmaReq(
+(0x1020+3436-0x1d8a));}}T_zUfiSms_CmdStatus zUfiSms_SendRawSms(T_zUfiSms_SendReq
+*ptSendMsg){if(NULL==ptSendMsg||(0xc25+89-0xc7e)==ptSendMsg->receiver_count){
 return WMS_CMD_FAILED;}at_print(LOG_DEBUG,
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x53\x65\x6e\x64\x52\x61\x77\x53\x6d\x73\x20\x72\x65\x63\x65\x69\x76\x65\x72\x5f\x63\x6f\x75\x6e\x74\x3a\x25\x64\x2f\x64\x65\x73\x74\x5f\x6e\x75\x6d\x3a\x25\x73\x2f\x6d\x73\x67\x5f\x6c\x65\x6e\x3a\x25\x64\x2f\x69\x64\x3a\x25\x64\x2e" "\n"
-,ptSendMsg->receiver_count,ptSendMsg->dest_num[(0x21ab+242-0x229d)],ptSendMsg->
+,ptSendMsg->receiver_count,ptSendMsg->dest_num[(0xdb8+3530-0x1b82)],ptSendMsg->
 msg_len,ptSendMsg->id);
-#if (0xc6c+4598-0x1e61)
+#if (0xd4a+6384-0x2639)
 at_print(LOG_DEBUG,
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x53\x65\x6e\x64\x52\x61\x77\x53\x6d\x73\x20\x64\x63\x73\x3a\x25\x64" "\n"
 ,ptSendMsg->dcs);
 #endif

-sc_cfg_set(NV_SMS_SEND_RESULT,"");g_zUfiSms_SendFailedCount=(0x1cc8+2412-0x2634)
-;if(ptSendMsg->isDelete==TRUE||-(0x1882+351-0x19e0)!=ptSendMsg->id){(void)
+sc_cfg_set(NV_SMS_SEND_RESULT,"");g_zUfiSms_SendFailedCount=(0x274+63-0x2b3);if(
+ptSendMsg->isDelete==TRUE||-(0xf7+8676-0x22da)!=ptSendMsg->id){(void)
 zUfiSms_DeleteDraftSms(ptSendMsg->id);}zUfiSms_SetGlobalDcsLang(ptSendMsg->dcs);
-memset(&g_zUfiSms_GroupSms,(0x982+647-0xc09),sizeof(g_zUfiSms_GroupSms));if(
+memset(&g_zUfiSms_GroupSms,(0x24ad+364-0x2619),sizeof(g_zUfiSms_GroupSms));if(
 ZUFI_FAIL==zUfiSms_FillGroupSms(ptSendMsg,&g_zUfiSms_GroupSms)){return 
-WMS_CMD_FAILED;}memset(&g_zUfiSms_ConcatSms,(0x86c+3822-0x175a),sizeof(
+WMS_CMD_FAILED;}memset(&g_zUfiSms_ConcatSms,(0xef+5895-0x17f6),sizeof(
 g_zUfiSms_ConcatSms));g_zUfiSms_UnitLen=zUfiSms_FillConcatSms(ptSendMsg,&
 g_zUfiSms_ConcatSms);g_zUfiSms_IsConcatSendSuc=TRUE;g_zUfiSms_CurConcatSegNo=
-(0x2287+263-0x238e);memset(g_zUfiSms_DbStoreData,(0xda5+2633-0x17ee),sizeof(
-g_zUfiSms_DbStoreData));if(ptSendMsg->mem_store==(0x14a3+4687-0x26e8)){
-g_displaymode=(0xb0b+2660-0x156e);at_print(LOG_DEBUG,
+(0x14f+8456-0x2257);memset(g_zUfiSms_DbStoreData,(0x1471+1834-0x1b9b),sizeof(
+g_zUfiSms_DbStoreData));if(ptSendMsg->mem_store==(0x1189+4477-0x22fc)){
+g_displaymode=(0x11d2+1179-0x166c);at_print(LOG_DEBUG,
 "\x5b\x53\x4d\x53\x5d\x5b\x74\x72\x61\x66\x66\x69\x63\x5d\x7a\x55\x66\x69\x53\x6d\x73\x5f\x53\x65\x6e\x64\x53\x6d\x73\x3a\x20\x6d\x73\x67\x5f\x64\x69\x73\x70\x6c\x61\x79\x6d\x6f\x64\x65\x20\x3d\x20\x31" "\n"
-);}else{g_displaymode=(0x828+1969-0xfd9);at_print(LOG_DEBUG,
+);}else{g_displaymode=(0x1089+177-0x113a);at_print(LOG_DEBUG,
 "\x5b\x53\x4d\x53\x5d\x5b\x74\x72\x61\x66\x66\x69\x63\x5d\x7a\x55\x66\x69\x53\x6d\x73\x5f\x53\x65\x6e\x64\x53\x6d\x73\x3a\x20\x6d\x73\x67\x5f\x64\x69\x73\x70\x6c\x61\x79\x6d\x6f\x64\x65\x20\x3d\x20\x30" "\n"
 );}return zUfiSms_SendSms();}T_zUfiSms_CmdStatus zUfiSms_WriteRawSms(
 T_zUfiSms_SaveReq*pSaveBuff){T_zUfiSms_ConcatInfo tConcatSms;T_zUfiSms_GroupInfo
- tGroupSms;int iSmsLen=(0x18a9+229-0x198e);T_zUfiSms_CmdStatus result=
+ tGroupSms;int iSmsLen=(0x1a50+1222-0x1f16);T_zUfiSms_CmdStatus result=
 WMS_CMD_SUCCESS;if(NULL==pSaveBuff){return WMS_CMD_FAILED;}if(
 g_zUfiSms_MemFullFlag[ZTE_WMS_MEMORY_NV]){at_print(LOG_DEBUG,
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x57\x72\x69\x74\x65\x52\x61\x77\x53\x6d\x73\x20\x6e\x76\x20\x6d\x65\x6d\x6f\x72\x79\x20\x69\x73\x20\x66\x75\x6c\x6c\x2c\x72\x65\x74\x75\x72\x6e" "\n"
 );return WMS_CMD_FAILED;}if(pSaveBuff->isDelete==TRUE){(void)
 zUfiSms_DeleteDraftSms(pSaveBuff->id);}zUfiSms_SetGlobalDcsLang(pSaveBuff->dcs);
-memset(&tConcatSms,(0x542+8400-0x2612),sizeof(T_zUfiSms_ConcatInfo));memset(&
-tGroupSms,(0x15e9+3253-0x229e),sizeof(T_zUfiSms_GroupInfo));(void)
+memset(&tConcatSms,(0xb8f+6391-0x2486),sizeof(T_zUfiSms_ConcatInfo));memset(&
+tGroupSms,(0x526+4898-0x1848),sizeof(T_zUfiSms_GroupInfo));(void)
 zUfiSms_FillGroupSms(pSaveBuff,&tGroupSms);iSmsLen=zUfiSms_FillConcatSms(
 pSaveBuff,&tConcatSms);at_print(LOG_DEBUG,
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x57\x72\x69\x74\x65\x52\x61\x77\x53\x6d\x73\x20\x74\x6f\x74\x61\x6c\x5f\x72\x65\x63\x65\x69\x76\x65\x72\x3d\x25\x64\x2c\x69\x53\x6d\x73\x4c\x65\x6e\x3d\x25\x64" "\n"
 ,tGroupSms.total_receiver,iSmsLen);for(tGroupSms.current_receiver=
-(0x138f+1395-0x1902);tGroupSms.current_receiver<tGroupSms.total_receiver;
-tGroupSms.current_receiver++){tConcatSms.current_sending=(0xd32+4744-0x1fba);
-result=zUfiSms_SaveSmsToDb(pSaveBuff,&tConcatSms,&tGroupSms,iSmsLen);at_print(
-LOG_DEBUG,
+(0xc43+722-0xf15);tGroupSms.current_receiver<tGroupSms.total_receiver;tGroupSms.
+current_receiver++){tConcatSms.current_sending=(0x2348+374-0x24be);result=
+zUfiSms_SaveSmsToDb(pSaveBuff,&tConcatSms,&tGroupSms,iSmsLen);at_print(LOG_DEBUG
+,
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x57\x72\x69\x74\x65\x52\x61\x77\x53\x6d\x73\x20\x63\x75\x72\x72\x65\x6e\x74\x5f\x72\x65\x63\x65\x69\x76\x65\x72\x3d\x25\x64\x2c\x72\x65\x73\x75\x6c\x74\x3d\x25\x64" "\n"
 ,tGroupSms.current_receiver,result);}sc_cfg_set(NV_SMS_DB_CHANGE,"\x31");
 zUfiSms_CheckMemoryFull(ZTE_WMS_MEMORY_NV);if(g_zUfiSms_MemFullFlag[
@@ -127,16 +127,16 @@
 memoryFullbeforeDelete=FALSE;BOOL unreadBeforeDelete=FALSE;if(NULL==ptDelBuff){
 return WMS_CMD_FAILED;}at_print(LOG_DEBUG,
 "\x5b\x53\x4d\x53\x5d\x20\x21\x21\x21\x21\x21\x7a\x55\x66\x69\x53\x6d\x73\x5f\x44\x65\x6c\x65\x74\x65\x53\x6d\x73\x21\x21\x63\x6f\x75\x6e\x74\x3a\x25\x64\x2f\x69\x64\x5b\x25\x64\x5d\x2e" "\n"
-,ptDelBuff->all_or_count,ptDelBuff->id[(0x1374+2002-0x1b46)]);(void)
+,ptDelBuff->all_or_count,ptDelBuff->id[(0xf26+5099-0x2311)]);(void)
 zUfiSms_CheckMemoryFull(ZTE_WMS_MEMORY_NV);zUfiSms_ChangeMainState(
-SMS_STATE_DELING);memset(&g_zUfiSms_DelMsg,(0xf19+2717-0x19b6),sizeof(
+SMS_STATE_DELING);memset(&g_zUfiSms_DelMsg,(0x106d+2286-0x195b),sizeof(
 T_zUfiSms_DelSms));if(ZUFI_FAIL==zUfiSms_SetDeleteInfo(ptDelBuff)){at_print(
 LOG_DEBUG,
 "\x5b\x53\x4d\x53\x5d\x20\x21\x21\x21\x7a\x55\x66\x69\x53\x6d\x73\x5f\x53\x65\x74\x44\x65\x6c\x65\x74\x65\x49\x6e\x66\x6f\x20\x66\x61\x69\x6c\x2e" "\n"
 );zUfiSms_ChangeMainState(SMS_STATE_DELED);return WMS_CMD_FAILED;}at_print(
 LOG_DEBUG,
 "\x5b\x53\x4d\x53\x5d\x20\x21\x21\x21\x7a\x55\x66\x69\x53\x6d\x73\x5f\x53\x65\x74\x44\x65\x6c\x65\x74\x65\x49\x6e\x66\x6f\x20\x52\x65\x61\x64\x20\x74\x6f\x20\x44\x65\x6c\x65\x74\x65\x3a\x6e\x76\x5f\x63\x6f\x75\x6e\x74\x3a\x25\x64\x2f\x73\x69\x6d\x5f\x63\x6f\x75\x6e\x74\x3a\x25\x64\x2e" "\n"
-,g_zUfiSms_DelMsg.nv_count,g_zUfiSms_DelMsg.sim_count);if((0x163+9074-0x24d5)<
+,g_zUfiSms_DelMsg.nv_count,g_zUfiSms_DelMsg.sim_count);if((0x2501+148-0x2595)<
 g_zUfiSms_DelMsg.nv_count){if(g_zUfiSms_MemFullFlag[WMS_STORAGE_TYPE_NV_V01]){
 memoryFullbeforeDelete=TRUE;}unreadBeforeDelete=zUfiSms_IsUnreadSms(
 ZTE_WMS_MEMORY_NV);result=(T_zUfiSms_CmdStatus)zUfiSms_DeleteNvSms();(void)
@@ -147,115 +147,114 @@
 memoryFullbeforeDelete&&!g_zUfiSms_MemFullFlag[WMS_STORAGE_TYPE_NV_V01]){
 at_print(LOG_DEBUG,
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x44\x65\x6c\x65\x74\x65\x4e\x76\x53\x6d\x73\x3a\x20\x73\x65\x6e\x64\x20\x41\x54\x2b\x5a\x4d\x45\x4e\x41\x3d\x30" "\n"
-);zSms_SendZmenaReq((0x53a+3079-0x1141));}if(memoryFullbeforeDelete&&!
+);zSms_SendZmenaReq((0x1d6c+846-0x20ba));}if(memoryFullbeforeDelete&&!
 g_zUfiSms_MemFullFlag[WMS_STORAGE_TYPE_NV_V01]||unreadBeforeDelete&&!
 zUfiSms_IsUnreadSms(ZTE_WMS_MEMORY_NV)){zUfiSms_SendSmsStatusInfo(
-MSG_SMS_DEFAULT);}}if((0x288+4582-0x146e)<g_zUfiSms_DelMsg.sim_count){result=
+MSG_SMS_DEFAULT);}}if((0x741+7643-0x251c)<g_zUfiSms_DelMsg.sim_count){result=
 zUfiSms_DeleteSimSms();(void)zUfiSms_CheckMemoryFull(ZTE_WMS_MEMORY_SIM);}
 at_print(LOG_DEBUG,
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x44\x65\x6c\x65\x74\x65\x53\x6d\x73\x20\x72\x65\x73\x75\x6c\x74\x3d\x25\x64" "\n"
 ,result);return result;}T_zUfiSms_CmdStatus zUfiSms_ModifySmsTag(
-T_zUfiSms_ModifyFlag*ptModifyBuff){unsigned long i=(0x2e2+2467-0xc85);
-T_zUfiSms_CmdStatus result=WMS_CMD_SUCCESS;char acStorePos[(0x1c7+4916-0x14c9)]=
-{(0x2e1+6710-0x1d17)};if(NULL==ptModifyBuff){at_print(LOG_ERR,
+T_zUfiSms_ModifyFlag*ptModifyBuff){unsigned long i=(0x227+1904-0x997);
+T_zUfiSms_CmdStatus result=WMS_CMD_SUCCESS;char acStorePos[(0xf1+7901-0x1f9c)]={
+(0x2ba+7954-0x21cc)};if(NULL==ptModifyBuff){at_print(LOG_ERR,
 "\x69\x6e\x70\x75\x74\x73\x20\x69\x73\x20\x6e\x75\x6c\x6c\x2e");return 
-WMS_CMD_FAILED;}for(i=(0x1fef+844-0x233b);i<ptModifyBuff->total_id;i++){if(
-ptModifyBuff->id[i]<(0xf81+4585-0x2169)||ZUFI_FAIL==zUfiSms_UpdateSmsTagInDb(
+WMS_CMD_FAILED;}for(i=(0x1a0+7359-0x1e5f);i<ptModifyBuff->total_id;i++){if(
+ptModifyBuff->id[i]<(0x8b9+5286-0x1d5e)||ZUFI_FAIL==zUfiSms_UpdateSmsTagInDb(
 ptModifyBuff->id[i],ptModifyBuff->tags)){result=WMS_CMD_FAILED;}else{result=
 WMS_CMD_SUCCESS;}}if(ZUFI_FAIL==zUfiSms_GetStorePosById(
 "\x4d\x65\x6d\x5f\x53\x74\x6f\x72\x65",acStorePos,sizeof(acStorePos),
-ptModifyBuff->id[(0xc71+528-0xe81)])){return ZUFI_FAIL;}if((0x1a42+193-0x1b03)==
-strcmp(acStorePos,ZTE_WMS_DB_NV_TABLE)){zUfiSms_SendSmsStatusInfo(
-MSG_SMS_READING);}if((0x2021+1062-0x2447)==strcmp(acStorePos,
-ZTE_WMS_DB_SIM_TABLE)&&ptModifyBuff->total_id>(0xcd0+228-0xdb4)){
+ptModifyBuff->id[(0xe25+4595-0x2018)])){return ZUFI_FAIL;}if(
+(0x1d4b+1902-0x24b9)==strcmp(acStorePos,ZTE_WMS_DB_NV_TABLE)){
+zUfiSms_SendSmsStatusInfo(MSG_SMS_READING);}if((0x1c96+1687-0x232d)==strcmp(
+acStorePos,ZTE_WMS_DB_SIM_TABLE)&&ptModifyBuff->total_id>(0xa06+7274-0x2670)){
 zUfiSms_ModifyModemSms(ptModifyBuff);}return result;}T_zUfiSms_CmdStatus 
-zUfiSms_SetSmsPara(T_zUfiSms_ParaInfo*ptParaBuff){int atRes=(0x113+4512-0x12b3);
-CHAR sca[ZTE_WMS_ADDRESS_DIGIT_MAX_V01+(0x1c42+1380-0x21a5)]={
-(0x3eb+5921-0x1b0c)};CHAR store[(0x1f00+1298-0x23fe)]={(0x10b3+762-0x13ad)};CHAR
- defaultStore[(0x1ec4+2048-0x2692)]={(0x8e1+2233-0x119a)};if(ptParaBuff==
-ZUFI_NULL){return WMS_CMD_FAILED;}if(strlen(ptParaBuff->sca)!=
-(0x85a+7361-0x251b)){strncpy(sca,ptParaBuff->sca,sizeof(sca)-(0x8fd+420-0xaa0));
-at_print(LOG_DEBUG,
+zUfiSms_SetSmsPara(T_zUfiSms_ParaInfo*ptParaBuff){int atRes=(0x915+6175-0x2134);
+CHAR sca[ZTE_WMS_ADDRESS_DIGIT_MAX_V01+(0x559+6154-0x1d62)]={
+(0x13c3+4841-0x26ac)};CHAR store[(0x6e9+1223-0xb9c)]={(0x73b+1780-0xe2f)};CHAR 
+defaultStore[(0xf18+208-0xfb6)]={(0x1300+4058-0x22da)};if(ptParaBuff==ZUFI_NULL)
+{return WMS_CMD_FAILED;}if(strlen(ptParaBuff->sca)!=(0x651+5353-0x1b3a)){strncpy
+(sca,ptParaBuff->sca,sizeof(sca)-(0x18bc+134-0x1941));at_print(LOG_DEBUG,
 "\x73\x65\x6e\x64\x20\x5a\x41\x54\x5f\x43\x53\x43\x41\x5f\x53\x45\x54\x5f\x43\x4d\x44\x20\x6d\x65\x73\x73\x61\x67\x65\x20\x63\x73\x63\x61\x20\x69\x73\x20\x25\x73\x2e" "\n"
 ,sca);atRes=zSms_SetCscaReq(ptParaBuff->sca);if(atRes!=ZSMS_RESULT_OK){return 
 WMS_CMD_FAILED;}}sc_cfg_get(NV_DEFAULT_STORE,defaultStore,sizeof(defaultStore));
-if((*(ptParaBuff->default_store)!='\0')&&((0x7b4+4258-0x1856)!=strcmp(
+if((*(ptParaBuff->default_store)!='\0')&&((0x3c9+5594-0x19a3)!=strcmp(
 defaultStore,ptParaBuff->default_store))){{strncpy(store,ptParaBuff->
-default_store,sizeof(store)-(0x3d1+4351-0x14cf));}atRes=zSms_SendCnmiReq(store);
-if(atRes!=ZSMS_RESULT_OK){return WMS_CMD_FAILED;}}if(-(0x78b+6957-0x22b7)==
+default_store,sizeof(store)-(0x820+5695-0x1e5e));}atRes=zSms_SendCnmiReq(store);
+if(atRes!=ZSMS_RESULT_OK){return WMS_CMD_FAILED;}}if(-(0x12a1+2099-0x1ad3)==
 zUfiSms_SetDbParameters(ptParaBuff)){at_print(LOG_ERR,
 "\x73\x65\x74\x20\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x73\x20\x74\x6f\x20\x74\x61\x62\x6c\x65\x20\x66\x61\x69\x6c\x65\x64\x2e"
 );return WMS_CMD_FAILED;}return WMS_CMD_SUCCESS;}void zUfiSms_CmgrNvSet(void){
-char sms_rec_flag[(0x92c+640-0xba7)]={(0x37f+8464-0x248f)};char remind_flag[
-(0x6c8+7314-0x2355)];int sms_count=(0x107d+1048-0x1495);int remind_count=
-(0x8a9+5894-0x1faf);memset(sms_rec_flag,(0xe78+5864-0x2560),sizeof(sms_rec_flag)
-);sc_cfg_get(ZTE_WMS_NVCONFIG_RECEVIED,sms_rec_flag,sizeof(sms_rec_flag));
-sms_count=atoi(sms_rec_flag);if(sms_count<(0x4fa+1307-0xa15)||sms_count>INT_MAX-
-(0x10b0+4777-0x2358)){at_print(LOG_ERR,
+char sms_rec_flag[(0xb82+2180-0x1401)]={(0x112c+265-0x1235)};char remind_flag[
+(0x137+5812-0x17e6)];int sms_count=(0x8f9+5468-0x1e55);int remind_count=
+(0x1953+1095-0x1d9a);memset(sms_rec_flag,(0x19c8+3151-0x2617),sizeof(
+sms_rec_flag));sc_cfg_get(ZTE_WMS_NVCONFIG_RECEVIED,sms_rec_flag,sizeof(
+sms_rec_flag));sms_count=atoi(sms_rec_flag);if(sms_count<(0xc0c+2776-0x16e4)||
+sms_count>INT_MAX-(0x10d8+1665-0x1758)){at_print(LOG_ERR,
 "\x5b\x53\x4d\x53\x5d\x73\x6d\x73\x5f\x63\x6f\x75\x6e\x74\x20\x65\x72\x72\x3a\x25\x64" "\n"
-,sms_count);return;}memset(sms_rec_flag,(0xeb4+2272-0x1794),sizeof(sms_rec_flag)
+,sms_count);return;}memset(sms_rec_flag,(0x55f+5030-0x1905),sizeof(sms_rec_flag)
 );snprintf(sms_rec_flag,sizeof(sms_rec_flag),"\x25\x64",sms_count+
-(0x120+2393-0xa78));sc_cfg_set(ZTE_WMS_NVCONFIG_RECEVIED,sms_rec_flag);
+(0x19d7+774-0x1cdc));sc_cfg_set(ZTE_WMS_NVCONFIG_RECEVIED,sms_rec_flag);
 sc_cfg_set(ZTE_WMS_NVCONFIG_RECEVIED_LED,sms_rec_flag);memset(remind_flag,
-(0xa3+8614-0x2249),sizeof(remind_flag));snprintf(remind_flag,sizeof(remind_flag)
-,"\x25\x64",remind_count+(0x10ea+4494-0x2277));sc_cfg_set(
+(0x305+1029-0x70a),sizeof(remind_flag));snprintf(remind_flag,sizeof(remind_flag)
+,"\x25\x64",remind_count+(0xd86+3511-0x1b3c));sc_cfg_set(
 ZTE_WMS_NVCONFIG_RECEVIED_REMIND,remind_flag);sc_cfg_set(NV_SMS_RECV_RESULT,
 "\x6f\x6b");sc_cfg_set(NV_SMS_DB_CHANGE,"\x31");}void zUfiSms_CdsRespProc(
 T_zSms_SmsInd*ptRespData){unsigned char acFormatPdu[ZSMS_PDU_SIZE]={
-(0x8a9+3049-0x1492)};T_zUfiSms_DbStoreData tDbStoreData={(0xb37+80-0xb87)};int 
-isPushSms=(0xaa+8409-0x2183);if(strcmp(ptRespData->pdu,"")==(0x161+9495-0x2678))
-{CHAR srState[(0x1f68+1766-0x261c)]={(0x37+8818-0x22a9)};sc_cfg_get(NV_SR_STATE,
-srState,sizeof(srState));if((0x1517+492-0x1703)!=strcmp(srState,
+(0x8a2+404-0xa36)};T_zUfiSms_DbStoreData tDbStoreData={(0x192+3146-0xddc)};int 
+isPushSms=(0x230+2387-0xb83);if(strcmp(ptRespData->pdu,"")==(0xcc3+607-0xf22)){
+CHAR srState[(0x7e2+1193-0xc59)]={(0x1b4d+372-0x1cc1)};sc_cfg_get(NV_SR_STATE,
+srState,sizeof(srState));if((0x1d41+1268-0x2235)!=strcmp(srState,
 "\x73\x72\x5f\x72\x65\x63\x65\x69\x76\x69\x6e\x67")){sc_cfg_set(
 NV_SMS_RECV_RESULT,"\x66\x61\x69\x6c");zUfiSms_ChangeMainState(SMS_STATE_RECVED)
 ;}else{sc_cfg_set(NV_SR_STATE,"\x73\x72\x5f\x72\x65\x63\x65\x69\x76\x65\x64");}
 return;}zUfiSms_GetReportStatus(ptRespData->pdu,&ptRespData->stat);(void)
 String2Bytes(ptRespData->pdu,acFormatPdu,(int)strlen(ptRespData->pdu));if(
-(0xf04+3522-0x1cc1)==ptRespData->stat){(void)zUfiSms_HandleReport(acFormatPdu);
+(0x1fcd+1444-0x256c)==ptRespData->stat){(void)zUfiSms_HandleReport(acFormatPdu);
 sc_cfg_set(NV_SR_STATE,"\x73\x72\x5f\x72\x65\x63\x65\x69\x76\x65\x64");
 zUfiSms_Ack_new_msg(TRUE);return;}return;}int zUfiSms_CheckIfWholeSms(
 T_zUfiSms_DbStoreData*data,SMS_MSG_INFO*pmsg){if(data->concat_sms!=
-(0x9e7+5569-0x1fa7)){return(0x1ed8+1968-0x2688);}zUfiSms_GetCurrentRecvTotalSeq(
+(0x1838+2991-0x23e6)){return(0x337+4539-0x14f2);}zUfiSms_GetCurrentRecvTotalSeq(
 data,pmsg);at_print(LOG_DEBUG,
 "\x5b\x53\x4d\x53\x5d\x5b\x74\x72\x61\x66\x66\x69\x63\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x43\x68\x65\x63\x6b\x49\x66\x57\x68\x6f\x6c\x65\x53\x6d\x73\x20\x69\x64\x20\x3d\x20\x25\x73\x2c\x20\x74\x6f\x74\x61\x6c\x53\x65\x71\x20\x3d\x20\x25\x64\x2c\x72\x65\x66\x20\x3d\x25\x64\x2c\x74\x6f\x74\x61\x6c\x20\x3d\x25\x64\x2c\x20\x73\x65\x71\x3d\x25\x64" "\n"
-,pmsg->id,atoi(pmsg->total_seq),data->concat_info[(0x120+236-0x20c)],data->
-concat_info[(0x810+6607-0x21de)],data->concat_info[(0x242+6779-0x1cbb)]);if(data
-->concat_info[(0x170b+2978-0x22ac)]==atoi(pmsg->total_seq)){return
-(0x4f0+830-0x82e);}return-(0x7d9+1324-0xd04);}void zUfiSms_TrafficChangeSmsTag(
-T_zUfiSms_DbStoreData*data){CHAR smsNumber[(0x49+665-0x2b0)]={
-(0x100f+1753-0x16e8)};sc_cfg_get(NV_TRAFFIC_SMS_NUMBER,smsNumber,sizeof(
-smsNumber));if((0x1eec+844-0x2238)==strcmp(smsNumber,data->number)){data->tag=
-WMS_TAG_TYPE_MT_READ_V01;data->msg_displaymode=(0x20f+2486-0xbc4);}}void 
-zUfiSms_HandleTrafficSms(T_zUfiSms_DbStoreData*data){int iSmsId=
-(0xb70+2469-0x1515);SMS_MSG_INFO msg={(0x183f+2483-0x21f2)};CHAR smsNumber[
-(0x991+4273-0x1a10)]={(0x91a+4197-0x197f)};sc_cfg_get(NV_TRAFFIC_SMS_NUMBER,
-smsNumber,sizeof(smsNumber));at_print(LOG_DEBUG,
+,pmsg->id,atoi(pmsg->total_seq),data->concat_info[(0x154+1292-0x660)],data->
+concat_info[(0x838+8-0x83f)],data->concat_info[(0x235c+730-0x2634)]);if(data->
+concat_info[(0x899+3018-0x1462)]==atoi(pmsg->total_seq)){return
+(0x14f7+2774-0x1fcd);}return-(0xeea+5422-0x2417);}void 
+zUfiSms_TrafficChangeSmsTag(T_zUfiSms_DbStoreData*data){CHAR smsNumber[
+(0x1c67+549-0x1e5a)]={(0x39c+5932-0x1ac8)};sc_cfg_get(NV_TRAFFIC_SMS_NUMBER,
+smsNumber,sizeof(smsNumber));if((0x55f+1735-0xc26)==strcmp(smsNumber,data->
+number)){data->tag=WMS_TAG_TYPE_MT_READ_V01;data->msg_displaymode=
+(0x596+5388-0x1aa1);}}void zUfiSms_HandleTrafficSms(T_zUfiSms_DbStoreData*data){
+int iSmsId=(0x44c+8553-0x25b5);SMS_MSG_INFO msg={(0x399+6988-0x1ee5)};CHAR 
+smsNumber[(0x1fef+59-0x1ff8)]={(0x3ba+6651-0x1db5)};sc_cfg_get(
+NV_TRAFFIC_SMS_NUMBER,smsNumber,sizeof(smsNumber));at_print(LOG_DEBUG,
 "\x5b\x53\x4d\x53\x5d\x5b\x74\x72\x61\x66\x66\x69\x63\x5d\x20\x74\x44\x62\x53\x74\x6f\x72\x65\x44\x61\x74\x61\x2e\x6e\x75\x6d\x62\x65\x72\x20\x3d\x20\x25\x73\x2c\x20\x74\x72\x61\x66\x66\x69\x63\x5f\x73\x6d\x73\x5f\x6e\x75\x6d\x62\x65\x72\x20\x3d\x20\x25\x73" "\n"
-,data->number,smsNumber);if((0x232+680-0x4da)==strcmp(smsNumber,data->number)){
-if((0xf8+6634-0x1ae2)!=zUfiSms_CheckIfWholeSms(data,&msg)){at_print(LOG_DEBUG,
+,data->number,smsNumber);if((0x65+1535-0x664)==strcmp(smsNumber,data->number)){
+if((0x12cb+2427-0x1c46)!=zUfiSms_CheckIfWholeSms(data,&msg)){at_print(LOG_DEBUG,
 "\x5b\x53\x4d\x53\x5d\x5b\x74\x72\x61\x66\x66\x69\x63\x5d\x20\x63\x6d\x74\x20\x69\x6e\x64\x2c\x20\x72\x65\x63\x76\x20\x73\x6d\x73\x2c\x20\x62\x75\x74\x20\x6e\x6f\x74\x20\x77\x68\x6f\x6c\x65\x20\x73\x6d\x73\x2c\x20\x77\x61\x69\x74\x20\x74\x6f\x20\x72\x65\x63\x76\x20\x6e\x65\x78\x74\x20\x73\x65\x67" "\n"
 );return;}sc_cfg_set(NV_TRAFFIC_RECV_SMS_ID,msg.id);sc_cfg_set(
 NV_TRAFFIC_SMS_NUMBER,"\x30");at_print(LOG_DEBUG,
 "\x5b\x53\x4d\x53\x5d\x5b\x74\x72\x61\x66\x66\x69\x63\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x48\x61\x6e\x64\x6c\x65\x54\x72\x61\x66\x66\x69\x63\x53\x6d\x73\x20\x20\x20\x74\x72\x61\x66\x66\x69\x63\x5f\x72\x65\x63\x76\x5f\x73\x6d\x73\x5f\x69\x64\x20\x3d\x20\x25\x73" "\n"
 ,msg.id);}}void zUfiSms_CmtRespProc(T_zSms_SmsInd*ptRespData){zUfiSms_StoreType 
 iStorePos=WMS_STORAGE_TYPE_NV_V01;unsigned char acFormatPdu[ZSMS_PDU_SIZE]={
-(0x1249+4380-0x2365)};T_zUfiSms_DbStoreData tDbStoreData;int isPushSms=
-(0x61b+8049-0x258c);SMS_PARAM one_sms={(0x167b+2931-0x21ee)};int 
-unread_sms_before_recv_new_sms=(0xb43+2680-0x15bb);memset(&tDbStoreData,
-(0x14b0+3-0x14b3),sizeof(T_zUfiSms_DbStoreData));at_print(LOG_DEBUG,
+(0x1117+3229-0x1db4)};T_zUfiSms_DbStoreData tDbStoreData;int isPushSms=
+(0x562+8530-0x26b4);SMS_PARAM one_sms={(0x1d70+2379-0x26bb)};int 
+unread_sms_before_recv_new_sms=(0x9d9+7147-0x25c4);memset(&tDbStoreData,
+(0x107c+2023-0x1863),sizeof(T_zUfiSms_DbStoreData));at_print(LOG_DEBUG,
 "\x5b\x53\x4d\x53\x5d\x20\x45\x6e\x74\x65\x72\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x43\x6d\x67\x72\x52\x65\x73\x70\x50\x72\x6f\x63\x21\x20\x69\x6e\x64\x65\x78\x3a\x25\x64\x2f\x73\x74\x61\x74\x3a\x25\x64\x2f\x6c\x65\x6e\x67\x74\x68\x3a\x25\x64\x2f\x70\x64\x75\x3a\x25\x73\x21" "\n"
 ,ptRespData->index,ptRespData->stat,ptRespData->length,ptRespData->pdu);if(
-strcmp(ptRespData->pdu,"")==(0x281+2982-0xe27)){CHAR srState[(0x898+7733-0x269b)
-]={(0x1283+2300-0x1b7f)};sc_cfg_get(NV_SR_STATE,srState,sizeof(srState));if(
-(0xabb+3363-0x17de)!=strcmp(srState,
+strcmp(ptRespData->pdu,"")==(0xdf5+6267-0x2670)){CHAR srState[
+(0x752+3298-0x1402)]={(0x325+514-0x527)};sc_cfg_get(NV_SR_STATE,srState,sizeof(
+srState));if((0x23a3+248-0x249b)!=strcmp(srState,
 "\x73\x72\x5f\x72\x65\x63\x65\x69\x76\x69\x6e\x67")){sc_cfg_set(
 NV_SMS_RECV_RESULT,"\x66\x61\x69\x6c");zUfiSms_ChangeMainState(SMS_STATE_RECVED)
 ;}else{sc_cfg_set(NV_SR_STATE,"\x73\x72\x5f\x72\x65\x63\x65\x69\x76\x65\x64");}
 return;}isPushSms=DecodePushPdu(ptRespData->pdu,&one_sms);at_print(LOG_DEBUG,
 "\x5b\x73\x6d\x73\x5d\x7a\x55\x66\x69\x53\x6d\x73\x5f\x43\x6d\x67\x72\x52\x65\x73\x70\x50\x72\x6f\x63\x20\x69\x73\x50\x75\x73\x68\x53\x6d\x73\x20\x3d\x20\x25\x64" "\n"
 ,isPushSms);if(SMS_NOTIFICATION==isPushSms){BakNotificationSms(one_sms.TP_UD,
-strlen(one_sms.TP_UD));zte_fota_notifyPushMsg((0x716+7637-0x24eb));}if(
-SMS_NO_PUSH!=isPushSms){at_print(LOG_DEBUG,
+strlen(one_sms.TP_UD));zte_fota_notifyPushMsg((0x51c+704-0x7dc));}if(SMS_NO_PUSH
+!=isPushSms){at_print(LOG_DEBUG,
 "\x20\x6f\x6e\x65\x5f\x73\x6d\x73\x2e\x69\x6e\x64\x65\x78\x20\x3d\x20\x25\x64" "\n"
 ,one_sms.index);at_print(LOG_DEBUG,
 "\x20\x6f\x6e\x65\x5f\x73\x6d\x73\x2e\x54\x50\x5f\x52\x65\x66\x65\x72\x4e\x75\x6d\x20\x3d\x20\x25\x64" "\n"
@@ -266,32 +265,32 @@
 ,one_sms.TP_CurrentPieceNum);zUfiSms_ChangeMainState(SMS_STATE_RECVED);
 zUfiSms_Ack_new_msg(TRUE);return;}zUfiSms_GetReportStatus(ptRespData->pdu,&
 ptRespData->stat);(void)String2Bytes(ptRespData->pdu,acFormatPdu,(int)strlen(
-ptRespData->pdu));if((0x7e3+1000-0xbc6)==ptRespData->stat){(void)
+ptRespData->pdu));if((0x1c0+6999-0x1d12)==ptRespData->stat){(void)
 zUfiSms_HandleReport(acFormatPdu);sc_cfg_set(NV_SR_STATE,
 "\x73\x72\x5f\x72\x65\x63\x65\x69\x76\x65\x64");zUfiSms_Ack_new_msg(TRUE);return
 ;}(void)zUfiSms_DecodeSmsData(&tDbStoreData,ptRespData->index,iStorePos,(
 T_SmsStatus)ptRespData->stat,WMS_MESSAGE_FORMAT_GW_PP_V01,ptRespData->length,
 acFormatPdu);if(tDbStoreData.sms_class==WMS_MESSAGE_CLASS_2){iStorePos=
 WMS_STORAGE_TYPE_UIM_V01;}if(zUfiSms_IsUnreadSms(ZTE_WMS_MEMORY_NV)){
-unread_sms_before_recv_new_sms=(0x158f+915-0x1921);}else{
-unread_sms_before_recv_new_sms=(0x429+5170-0x185b);}zUfiSms_TrafficChangeSmsTag(
+unread_sms_before_recv_new_sms=(0x1d48+712-0x200f);}else{
+unread_sms_before_recv_new_sms=(0x75f+3201-0x13e0);}zUfiSms_TrafficChangeSmsTag(
 &tDbStoreData);if(ZTE_WMS_NV_MEMORY_FULL==zUfiSms_WriteSmsToDb(&tDbStoreData,
-iStorePos,-(0x598+7648-0x2377))){zUfiSms_Ack_new_msg(FALSE);zSms_SendZmenaReq(
-(0x1f0+5788-0x188b));return;}if(tDbStoreData.sms_class!=WMS_MESSAGE_CLASS_2){
+iStorePos,-(0x6e1+3933-0x163d))){zUfiSms_Ack_new_msg(FALSE);zSms_SendZmenaReq(
+(0x116a+592-0x13b9));return;}if(tDbStoreData.sms_class!=WMS_MESSAGE_CLASS_2){
 zUfiSms_Ack_new_msg(TRUE);}zUfiSms_CmgrNvSet();zUfiSms_CheckMemoryFull(
 ZTE_WMS_MEMORY_NV);zUfiSms_ChangeMainState(SMS_STATE_RECVED);
 zUfiSms_SendSmsStatusInfo(MSG_SMS_NEW);zUfiSms_HandleTrafficSms(&tDbStoreData);
 return;}void zUfiSms_ZmgrRespProc(T_zSms_SmsInd*ptRespData){zUfiSms_StoreType 
 iStorePos=WMS_STORAGE_TYPE_NV_V01;unsigned char acFormatPdu[ZSMS_PDU_SIZE]={
-(0x161a+440-0x17d2)};T_zUfiSms_DbStoreData tDbStoreData;int isPushSms=
-(0xa8+3643-0xee3);SMS_PARAM one_sms={(0x1074+3175-0x1cdb)};CHAR defaultStore[
-(0x1725+3866-0x260d)]={(0xc53+2116-0x1497)};memset(&tDbStoreData,
-(0x10b+4032-0x10cb),sizeof(T_zUfiSms_DbStoreData));at_print(LOG_DEBUG,
+(0x1201+3411-0x1f54)};T_zUfiSms_DbStoreData tDbStoreData;int isPushSms=
+(0xbf3+1386-0x115d);SMS_PARAM one_sms={(0x8d0+7645-0x26ad)};CHAR defaultStore[
+(0x745+3394-0x1455)]={(0x258+1773-0x945)};memset(&tDbStoreData,
+(0x106b+4120-0x2083),sizeof(T_zUfiSms_DbStoreData));at_print(LOG_DEBUG,
 "\x5b\x53\x4d\x53\x5d\x20\x45\x6e\x74\x65\x72\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x43\x6d\x67\x72\x52\x65\x73\x70\x50\x72\x6f\x63\x21\x20\x69\x6e\x64\x65\x78\x3a\x25\x64\x2f\x73\x74\x61\x74\x3a\x25\x64\x2f\x6c\x65\x6e\x67\x74\x68\x3a\x25\x64\x2f\x70\x64\x75\x3a\x25\x73\x21" "\n"
 ,ptRespData->index,ptRespData->stat,ptRespData->length,ptRespData->pdu);if(
-strcmp(ptRespData->pdu,"")==(0x45b+3952-0x13cb)){CHAR srState[(0x1b8+3287-0xe5d)
-]={(0x883+1605-0xec8)};sc_cfg_get(NV_SR_STATE,srState,sizeof(srState));if(
-(0x2ed+5762-0x196f)!=strcmp(srState,
+strcmp(ptRespData->pdu,"")==(0x106d+476-0x1249)){CHAR srState[
+(0x1bd1+1397-0x2114)]={(0x10b7+948-0x146b)};sc_cfg_get(NV_SR_STATE,srState,
+sizeof(srState));if((0x1503+3217-0x2194)!=strcmp(srState,
 "\x73\x72\x5f\x72\x65\x63\x65\x69\x76\x69\x6e\x67")){sc_cfg_set(
 NV_SMS_RECV_RESULT,"\x66\x61\x69\x6c");zUfiSms_ChangeMainState(SMS_STATE_RECVED)
 ;}else{sc_cfg_set(NV_SR_STATE,"\x73\x72\x5f\x72\x65\x63\x65\x69\x76\x65\x64");}
@@ -300,7 +299,7 @@
 ,isPushSms);at_print(LOG_DEBUG,
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x43\x6d\x67\x72\x52\x65\x73\x70\x50\x72\x6f\x63\x20\x69\x73\x50\x75\x73\x68\x53\x6d\x73\x20\x3d\x25\x64\x20" "\n"
 ,isPushSms);if(SMS_NOTIFICATION==isPushSms){BakNotificationSms(one_sms.TP_UD,
-strlen(one_sms.TP_UD));zte_fota_notifyPushMsg((0x494+3514-0x124e));}if(
+strlen(one_sms.TP_UD));zte_fota_notifyPushMsg((0x9f+4565-0x1274));}if(
 SMS_NO_PUSH!=isPushSms){at_print(LOG_DEBUG,
 "\x20\x6f\x6e\x65\x5f\x73\x6d\x73\x2e\x69\x6e\x64\x65\x78\x20\x3d\x20\x25\x64" "\n"
 ,one_sms.index);at_print(LOG_DEBUG,
@@ -311,30 +310,30 @@
 "\x20\x6f\x6e\x65\x5f\x73\x6d\x73\x2e\x54\x50\x5f\x43\x75\x72\x72\x65\x6e\x74\x50\x69\x65\x63\x65\x4e\x75\x6d\x20\x3d\x20\x25\x64" "\n"
 ,one_sms.TP_CurrentPieceNum);zUfiSms_ChangeMainState(SMS_STATE_RECVED);return;}
 zUfiSms_GetReportStatus(ptRespData->pdu,&ptRespData->stat);(void)String2Bytes(
-ptRespData->pdu,acFormatPdu,(int)strlen(ptRespData->pdu));if((0xb9b+46-0xbc4)==
-ptRespData->stat){(void)zUfiSms_HandleReport(acFormatPdu);sc_cfg_set(NV_SR_STATE
-,"\x73\x72\x5f\x72\x65\x63\x65\x69\x76\x65\x64");return;}sc_cfg_get(
-NV_DEFAULT_STORE,defaultStore,sizeof(defaultStore));if((0x1201+3926-0x2157)==
+ptRespData->pdu,acFormatPdu,(int)strlen(ptRespData->pdu));if((0xef1+721-0x11bd)
+==ptRespData->stat){(void)zUfiSms_HandleReport(acFormatPdu);sc_cfg_set(
+NV_SR_STATE,"\x73\x72\x5f\x72\x65\x63\x65\x69\x76\x65\x64");return;}sc_cfg_get(
+NV_DEFAULT_STORE,defaultStore,sizeof(defaultStore));if((0xf5+7360-0x1db5)==
 strcmp(defaultStore,"\x73\x69\x6d")){iStorePos=WMS_STORAGE_TYPE_UIM_V01;}(void)
 zUfiSms_DecodeSmsData(&tDbStoreData,ptRespData->index,iStorePos,(T_SmsStatus)
 ptRespData->stat,WMS_MESSAGE_FORMAT_GW_PP_V01,ptRespData->length,acFormatPdu);if
 (tDbStoreData.sms_class==WMS_MESSAGE_CLASS_2){iStorePos=WMS_STORAGE_TYPE_UIM_V01
 ;}zUfiSms_TrafficChangeSmsTag(&tDbStoreData);if(ZTE_WMS_NV_MEMORY_FULL==
-zUfiSms_WriteSmsToDb(&tDbStoreData,iStorePos,-(0x125b+4441-0x23b3))){return;}if(
+zUfiSms_WriteSmsToDb(&tDbStoreData,iStorePos,-(0x1eb9+1538-0x24ba))){return;}if(
 tDbStoreData.sms_class!=WMS_MESSAGE_CLASS_2){}zUfiSms_CmgrNvSet();
 zUfiSms_CheckMemoryFull(ZTE_WMS_MEMORY_NV);zUfiSms_ChangeMainState(
 SMS_STATE_RECVED);zUfiSms_HandleTrafficSms(&tDbStoreData);return;}void 
 zUfiSms_CmgrRespProc(T_zSms_SmsInd*ptRespData){zUfiSms_StoreType iStorePos=
 WMS_STORAGE_TYPE_NV_V01;unsigned char acFormatPdu[ZSMS_PDU_SIZE]={
-(0xa00+5639-0x2007)};T_zUfiSms_DbStoreData tDbStoreData;int isPushSms=
-(0x155a+2930-0x20cc);SMS_PARAM one_sms={(0x10bc+4972-0x2428)};int 
-unread_sms_before_recv_new_sms=(0x91a+6395-0x2215);memset(&tDbStoreData,
-(0x9d0+3299-0x16b3),sizeof(T_zUfiSms_DbStoreData));at_print(LOG_DEBUG,
+(0xa74+5485-0x1fe1)};T_zUfiSms_DbStoreData tDbStoreData;int isPushSms=
+(0xb92+2418-0x1504);SMS_PARAM one_sms={(0x457+3303-0x113e)};int 
+unread_sms_before_recv_new_sms=(0x5db+5403-0x1af6);memset(&tDbStoreData,
+(0xa35+6498-0x2397),sizeof(T_zUfiSms_DbStoreData));at_print(LOG_DEBUG,
 "\x5b\x53\x4d\x53\x5d\x20\x45\x6e\x74\x65\x72\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x43\x6d\x67\x72\x52\x65\x73\x70\x50\x72\x6f\x63\x21\x20\x69\x6e\x64\x65\x78\x3a\x25\x64\x2f\x73\x74\x61\x74\x3a\x25\x64\x2f\x6c\x65\x6e\x67\x74\x68\x3a\x25\x64\x2f\x70\x64\x75\x3a\x25\x73\x21" "\n"
 ,ptRespData->index,ptRespData->stat,ptRespData->length,ptRespData->pdu);
 zUfiSms_SendSmsStatusInfo(MSG_SMS_READING);if(strcmp(ptRespData->pdu,"")==
-(0x5b3+5167-0x19e2)){CHAR srState[(0x6a4+7228-0x22ae)]={(0xc7b+4980-0x1fef)};
-sc_cfg_get(NV_SR_STATE,srState,sizeof(srState));if((0x1302+4963-0x2665)!=strcmp(
+(0x1823+1073-0x1c54)){CHAR srState[(0x1465+3735-0x22ca)]={(0xae7+4295-0x1bae)};
+sc_cfg_get(NV_SR_STATE,srState,sizeof(srState));if((0x16bb+1765-0x1da0)!=strcmp(
 srState,"\x73\x72\x5f\x72\x65\x63\x65\x69\x76\x69\x6e\x67")){sc_cfg_set(
 NV_SMS_RECV_RESULT,"\x66\x61\x69\x6c");zUfiSms_ChangeMainState(SMS_STATE_RECVED)
 ;}else{sc_cfg_set(NV_SR_STATE,"\x73\x72\x5f\x72\x65\x63\x65\x69\x76\x65\x64");}
@@ -343,7 +342,7 @@
 ,isPushSms);at_print(LOG_DEBUG,
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x43\x6d\x67\x72\x52\x65\x73\x70\x50\x72\x6f\x63\x20\x69\x73\x50\x75\x73\x68\x53\x6d\x73\x20\x3d\x25\x64\x20" "\n"
 ,isPushSms);if(SMS_NOTIFICATION==isPushSms){BakNotificationSms(one_sms.TP_UD,
-strlen(one_sms.TP_UD));zte_fota_notifyPushMsg((0x239a+63-0x23d9));}if(
+strlen(one_sms.TP_UD));zte_fota_notifyPushMsg((0x2a0+4602-0x149a));}if(
 SMS_NO_PUSH!=isPushSms){at_print(LOG_DEBUG,
 "\x20\x6f\x6e\x65\x5f\x73\x6d\x73\x2e\x69\x6e\x64\x65\x78\x20\x3d\x20\x25\x64" "\n"
 ,one_sms.index);at_print(LOG_DEBUG,
@@ -354,82 +353,81 @@
 "\x20\x6f\x6e\x65\x5f\x73\x6d\x73\x2e\x54\x50\x5f\x43\x75\x72\x72\x65\x6e\x74\x50\x69\x65\x63\x65\x4e\x75\x6d\x20\x3d\x20\x25\x64" "\n"
 ,one_sms.TP_CurrentPieceNum);zUfiSms_ChangeMainState(SMS_STATE_RECVED);return;}
 zUfiSms_GetReportStatus(ptRespData->pdu,&ptRespData->stat);(void)String2Bytes(
-ptRespData->pdu,acFormatPdu,(int)strlen(ptRespData->pdu));if(
-(0x1301+3511-0x20b3)==ptRespData->stat){(void)zUfiSms_HandleReport(acFormatPdu);
-sc_cfg_set(NV_SR_STATE,"\x73\x72\x5f\x72\x65\x63\x65\x69\x76\x65\x64");return;}(
-void)zUfiSms_DecodeSmsData(&tDbStoreData,ptRespData->index,iStorePos,(
-T_SmsStatus)ptRespData->stat,WMS_MESSAGE_FORMAT_GW_PP_V01,ptRespData->length,
-acFormatPdu);if(tDbStoreData.sms_class==WMS_MESSAGE_CLASS_2){iStorePos=
-WMS_STORAGE_TYPE_UIM_V01;}if(zUfiSms_IsUnreadSms(ZTE_WMS_MEMORY_NV)){
-unread_sms_before_recv_new_sms=(0x348+100-0x3ab);}else{
-unread_sms_before_recv_new_sms=(0xd28+4110-0x1d36);}if(ZTE_WMS_NV_MEMORY_FULL==
-zUfiSms_WriteSmsToDb(&tDbStoreData,iStorePos,-(0xbb2+5255-0x2038))){return;}if(
-tDbStoreData.sms_class!=WMS_MESSAGE_CLASS_2){}zUfiSms_CmgrNvSet();
-zUfiSms_CheckMemoryFull(ZTE_WMS_MEMORY_NV);zUfiSms_ChangeMainState(
-SMS_STATE_RECVED);return;}void zUfiSms_CmgsRespProc(VOID){T_zUfiSms_StatusInfo 
-tStatusInfo={(0xd54+6250-0x25be)};g_zUfiSms_DbStoreData->msg_displaymode=
-g_displaymode;if(g_zUfiSms_DbStoreData->msg_displaymode!=(0x693+2856-0x11ba)){if
-((0x1789+1526-0x1d7f)==zUfiSms_WriteSmsToDb(&g_zUfiSms_DbStoreData[
-g_zUfiSms_CurConcatSegNo-(0x12a1+3830-0x2196)],WMS_STORAGE_TYPE_NV_V01,-
-(0x95c+353-0xabc))){g_zUfiSms_MsgRefer++;(void)zUfiSms_SetMaxReference(
-g_zUfiSms_MsgRefer);}}printf(
+ptRespData->pdu,acFormatPdu,(int)strlen(ptRespData->pdu));if((0xfb3+5315-0x2471)
+==ptRespData->stat){(void)zUfiSms_HandleReport(acFormatPdu);sc_cfg_set(
+NV_SR_STATE,"\x73\x72\x5f\x72\x65\x63\x65\x69\x76\x65\x64");return;}(void)
+zUfiSms_DecodeSmsData(&tDbStoreData,ptRespData->index,iStorePos,(T_SmsStatus)
+ptRespData->stat,WMS_MESSAGE_FORMAT_GW_PP_V01,ptRespData->length,acFormatPdu);if
+(tDbStoreData.sms_class==WMS_MESSAGE_CLASS_2){iStorePos=WMS_STORAGE_TYPE_UIM_V01
+;}if(zUfiSms_IsUnreadSms(ZTE_WMS_MEMORY_NV)){unread_sms_before_recv_new_sms=
+(0x5cf+2841-0x10e7);}else{unread_sms_before_recv_new_sms=(0x42a+3822-0x1318);}if
+(ZTE_WMS_NV_MEMORY_FULL==zUfiSms_WriteSmsToDb(&tDbStoreData,iStorePos,-
+(0xb53+5165-0x1f7f))){return;}if(tDbStoreData.sms_class!=WMS_MESSAGE_CLASS_2){}
+zUfiSms_CmgrNvSet();zUfiSms_CheckMemoryFull(ZTE_WMS_MEMORY_NV);
+zUfiSms_ChangeMainState(SMS_STATE_RECVED);return;}void zUfiSms_CmgsRespProc(VOID
+){T_zUfiSms_StatusInfo tStatusInfo={(0x1830+1275-0x1d2b)};g_zUfiSms_DbStoreData
+->msg_displaymode=g_displaymode;if(g_zUfiSms_DbStoreData->msg_displaymode!=
+(0x1bda+666-0x1e73)){if((0x829+7616-0x25e9)==zUfiSms_WriteSmsToDb(&
+g_zUfiSms_DbStoreData[g_zUfiSms_CurConcatSegNo-(0x1b6b+1635-0x21cd)],
+WMS_STORAGE_TYPE_NV_V01,-(0x14b1+3166-0x210e))){g_zUfiSms_MsgRefer++;(void)
+zUfiSms_SetMaxReference(g_zUfiSms_MsgRefer);}}printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x43\x6d\x67\x73\x52\x73\x70\x20\x73\x65\x67\x4e\x6f\x3a\x25\x64\x2f\x54\x6f\x74\x61\x6c\x4e\x75\x6d\x3a\x25\x64\x2f\x46\x61\x69\x6c\x4e\x75\x6d\x3a\x25\x64\x2e" "\n"
 ,g_zUfiSms_CurConcatSegNo,g_zUfiSms_ConcatTotalNum,g_zUfiSms_SendFailedCount);if
 (g_zUfiSms_CurConcatSegNo==g_zUfiSms_ConcatTotalNum){g_zUfiSms_CurConcatSegNo=
-(0xf39+3895-0x1e70);memset((void*)&tStatusInfo,(0x179d+2646-0x21f3),sizeof(
+(0x881+5518-0x1e0f);memset((void*)&tStatusInfo,(0x44+6571-0x19ef),sizeof(
 T_zUfiSms_StatusInfo));tStatusInfo.err_code=ZTE_SMS_CMS_NONE;tStatusInfo.
 send_failed_count=g_zUfiSms_SendFailedCount;tStatusInfo.delete_failed_count=
-(0x1047+5114-0x2441);if(g_zUfiSms_SendFailedCount==(0x17a2+193-0x1863)){
+(0x9c0+3150-0x160e);if(g_zUfiSms_SendFailedCount==(0x483+2293-0xd78)){
 tStatusInfo.cmd_status=WMS_CMD_SUCCESS;sc_cfg_set(NV_SMS_SEND_RESULT,"\x6f\x6b")
 ;}else{tStatusInfo.cmd_status=WMS_CMD_FAILED;sc_cfg_set(NV_SMS_SEND_RESULT,
 "\x66\x61\x69\x6c");}tStatusInfo.cmd=WMS_SMS_CMD_MSG_SEND;(void)
 zUfiSms_SetCmdStatus(&tStatusInfo);sc_cfg_set(NV_SMS_DB_CHANGE,"\x31");
 zUfiSms_CheckMemoryFull(ZTE_WMS_MEMORY_NV);if(g_zUfiSms_MemFullFlag[
 WMS_STORAGE_TYPE_NV_V01]){zUfiSms_SendSmsStatusInfo(MSG_SMS_DEFAULT);}}else{}}
-int zte_fota_notifyPushMsg(int cmd){FOTA_MSG_BUF msg={(0x2cf+5594-0x18a9)};int 
-errs=(0x1030+2981-0x1bd5);key_t req_id=ftok(
+int zte_fota_notifyPushMsg(int cmd){FOTA_MSG_BUF msg={(0x125+2133-0x97a)};int 
+errs=(0x558+6507-0x1ec3);key_t req_id=ftok(
 "\x2f\x6d\x65\x64\x69\x61\x2f\x7a\x74\x65\x2f\x7a\x74\x65\x5f\x73\x6f\x63\x6b\x65\x74\x2f\x66\x6f\x74\x61\x5f\x64\x6d\x61\x70\x70\x5f\x6d\x73\x67"
-,(0x132+3038-0xd0f));int msgid=msgget(req_id,(0xf8d+1348-0x14d1));if(msgid!=-
-(0xa06+4450-0x1b67)){msg.mtype=(0x1c30+1280-0x212f);msg.mtext[
-(0xca4+3003-0x185f)]=WEBUI_NOTIFY_PUSH_MSG_;errs=msgsnd(msgid,&msg,sizeof(msg)-
-sizeof(long),(0xc9b+6533-0x2620));}return(errs<(0xf35+2005-0x170a)?
-(0x24+7127-0x1bfb):(0x889+6241-0x20e9));}
-#if (0x453+2261-0xd28)  
+,(0x11+9689-0x25e9));int msgid=msgget(req_id,(0x7d9+6589-0x2196));if(msgid!=-
+(0x801+2752-0x12c0)){msg.mtype=(0xfd3+4864-0x22d2);msg.mtext[
+(0x1597+1855-0x1cd6)]=WEBUI_NOTIFY_PUSH_MSG_;errs=msgsnd(msgid,&msg,sizeof(msg)-
+sizeof(long),(0x146c+5-0x1471));}return(errs<(0x1303+2814-0x1e01)?
+(0xe26+2680-0x189e):(0xaa4+119-0xb1a));}
+#if (0x197a+1287-0x1e81)  
 int atSms_SendCmglReq(PSTR pAtCmdPara,int cid,PSTR pAtRst,int atRstSize){return 
 zSvr_SendAtSyn(ZAT_CMGL_CMD,"\x41\x54\x2b\x43\x4d\x47\x4c\x3d\x30" "\r\n",cid,
 pAtRst,atRstSize);}VOID atSms_RecvCmglRsp(T_zAt_AtRes*pResLine){return;}
 #endif 

-#if (0x27c+7086-0x1e2a) 
+#if (0x651+7036-0x21cd) 
 int atSms_SendZmglReq(PSTR pAtCmdPara,int cid,PSTR pAtRst,int atRstSize){int res
-=(0x1245+1580-0x1871);pthread_mutex_lock(&smsdb_mutex);res=zSvr_SendAtSyn(
+=(0x209+5376-0x1709);pthread_mutex_lock(&smsdb_mutex);res=zSvr_SendAtSyn(
 ZAT_ZMGL_CMD,"\x41\x54\x2b\x5a\x4d\x47\x4c\x3d\x34" "\r\n",cid,pAtRst,atRstSize)
 ;pthread_mutex_unlock(&smsdb_mutex);return res;}VOID atSms_initAtOk(VOID){
-T_zUfiSms_StatusInfo tStatus={(0x1259+2020-0x1a3d)};sc_cfg_set(
-NV_SMS_LOAD_RESULT,"\x6f\x6b");tStatus.cmd_status=WMS_CMD_SUCCESS;tStatus.cmd=
-WMS_SMS_CMD_INIT;(void)zUfiSms_SetCmdStatus(&tStatus);zUfiSms_ChangeMainState(
-SMS_STATE_LOADED);}int atSms_initAtErr(UINT8*pErrCode){T_zUfiSms_StatusInfo 
-tStatus={(0x1c4d+404-0x1de1)};sc_cfg_set(NV_SMS_LOAD_RESULT,"\x66\x61\x69\x6c");
+T_zUfiSms_StatusInfo tStatus={(0xd04+4989-0x2081)};sc_cfg_set(NV_SMS_LOAD_RESULT
+,"\x6f\x6b");tStatus.cmd_status=WMS_CMD_SUCCESS;tStatus.cmd=WMS_SMS_CMD_INIT;(
+void)zUfiSms_SetCmdStatus(&tStatus);zUfiSms_ChangeMainState(SMS_STATE_LOADED);}
+int atSms_initAtErr(UINT8*pErrCode){T_zUfiSms_StatusInfo tStatus={
+(0x1c69+198-0x1d2f)};sc_cfg_set(NV_SMS_LOAD_RESULT,"\x66\x61\x69\x6c");
 zUfiSms_ChangeMainState(SMS_STATE_LOADED);tStatus.cmd_status=WMS_CMD_FAILED;
 tStatus.cmd=WMS_SMS_CMD_INIT;(void)zUfiSms_SetCmdStatus(&tStatus);return FALSE;}
 VOID atSms_RecvZmglRsp(T_zAt_AtRes*pResLine){static T_zUfiSms_SmsItem tSmsPara={
-(0x6d4+7440-0x23e4)};printf(
+(0xfd9+5482-0x2543)};printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x5a\x6d\x67\x6c\x52\x73\x70\x20\x45\x6e\x74\x65\x72\x20\x70\x64\x75\x46\x6c\x61\x67\x3a\x25\x64\x2f\x72\x65\x73\x75\x6c\x74\x3a\x25\x64\x2e" "\n"
 ,pResLine->pduFlag,pResLine->result);if(pResLine->pduFlag==ZAT_ATRES_PDU_FLAG){
 zUfiSms_CmglRespProc(pResLine,&tSmsPara);}else{memset(&tSmsPara,
-(0x127f+2660-0x1ce3),sizeof(T_zUfiSms_SmsItem));(void)zUfiSms_FormatSms(pResLine
-->resParas,sizeof(pResLine->resParas),&tSmsPara,(0x14c3+3664-0x2312));printf(
+(0x1265+652-0x14f1),sizeof(T_zUfiSms_SmsItem));(void)zUfiSms_FormatSms(pResLine
+->resParas,sizeof(pResLine->resParas),&tSmsPara,(0x9b7+4896-0x1cd6));printf(
 "\x5b\x53\x4d\x53\x5d\x20\x5a\x6d\x67\x6c\x20\x52\x65\x73\x70\x21\x20\x69\x6e\x64\x65\x78\x3a\x25\x64\x2f\x73\x74\x61\x74\x3a\x25\x64\x2f\x6c\x65\x6e\x67\x74\x68\x3a\x25\x64\x2e" "\n"
 ,tSmsPara.index,tSmsPara.stat,tSmsPara.length);}}int atSms_SendCmgrReq(PSTR 
-pAtCmdPara,int cid,PSTR pAtRst,int atRstSize){CHAR pAtcmdStr[(0x487+5419-0x199e)
-]={(0xbaa+3942-0x1b10)};iSmsIndex=atoi(pAtCmdPara);printf(
+pAtCmdPara,int cid,PSTR pAtRst,int atRstSize){CHAR pAtcmdStr[(0xceb+3604-0x1aeb)
+]={(0xe06+4094-0x1e04)};iSmsIndex=atoi(pAtCmdPara);printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x53\x65\x6e\x64\x43\x6d\x67\x72\x52\x65\x71\x20\x47\x65\x74\x20\x69\x6e\x64\x65\x78\x3a\x25\x64\x2e" "\n"
 ,iSmsIndex);snprintf(pAtcmdStr,sizeof(pAtcmdStr),
 "\x41\x54\x2b\x43\x4d\x47\x52\x3d\x25\x73" "\r\n",pAtCmdPara);return 
 zSvr_SendAtSyn(ZAT_CMGR_CMD,pAtcmdStr,cid,pAtRst,atRstSize);}VOID 
 atSms_RecvCmgrRsp(T_zAt_AtRes*pResLine){
-#if (0xb34+2055-0x133b)

-static T_zUfiSms_SmsItem tSmsPara={(0x2c3+1882-0xa1d)};T_zUfiSms_CmgrSetRsp 
-tCmgrRsp={(0x246c+184-0x2524)};printf(
+#if (0xb9c+3125-0x17d1)

+static T_zUfiSms_SmsItem tSmsPara={(0x1927+1993-0x20f0)};T_zUfiSms_CmgrSetRsp 
+tCmgrRsp={(0x110c+3901-0x2049)};printf(
 "\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x43\x6d\x67\x72\x52\x73\x70\x20\x45\x6e\x74\x65\x72\x20\x70\x64\x75\x46\x6c\x61\x67\x3a\x25\x64\x2f\x50\x61\x72\x61\x73\x3a\x25\x73\x2f\x72\x65\x73\x75\x6c\x74\x3a\x25\x64\x2e" "\n"
 ,pResLine->pduFlag,pResLine->resParas,pResLine->result);if(pResLine->pduFlag==
 ZAT_ATRES_PDU_FLAG){if(ZAT_RESULT_AUTOREPORT!=pResLine->result){printf(
@@ -438,15 +436,15 @@
 .stat=tSmsPara.stat;sscanf(pResLine->resParas,"\x25\x35\x30\x30\x73",tCmgrRsp.
 pdu);zUfiSms_CmgrRespProc(&tCmgrRsp);zUfiMmi_SendSmsStatus();sc_cfg_set(
 "\x73\x6d\x73\x5f\x72\x65\x63\x76\x5f\x72\x65\x73\x75\x6c\x74","\x6f\x6b");}else
-{memset(&tSmsPara,(0x722+4536-0x18da),sizeof(T_zUfiSms_SmsItem));(void)
-zUfiSms_FormatSms(pResLine->resParas,&tSmsPara,(0x21c4+552-0x23ea));tSmsPara.
+{memset(&tSmsPara,(0x1037+4290-0x20f9),sizeof(T_zUfiSms_SmsItem));(void)
+zUfiSms_FormatSms(pResLine->resParas,&tSmsPara,(0x8b9+1508-0xe9b));tSmsPara.
 index=iSmsIndex;printf(
 "\x3d\x3d\x3d\x3d\x3d\x3d\x43\x6d\x67\x72\x20\x52\x65\x73\x70\x21\x20\x69\x6e\x64\x65\x78\x3a\x25\x64\x2f\x73\x74\x61\x74\x3a\x25\x64\x2f\x6c\x65\x6e\x67\x74\x68\x3a\x25\x64\x2e" "\n"
 ,tSmsPara.index,tSmsPara.stat,tSmsPara.length);}
 #endif

 }int atSms_SendZmgrReq(PSTR pAtCmdPara,int cid,PSTR pAtRst,int atRstSize){CHAR 
-pAtcmdStr[(0x12d9+163-0x1368)]={(0xb93+6784-0x2613)};iSmsIndex=atoi(pAtCmdPara);
-printf(
+pAtcmdStr[(0x13e6+3307-0x20bd)]={(0x147b+2757-0x1f40)};iSmsIndex=atoi(pAtCmdPara
+);printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x53\x65\x6e\x64\x5a\x6d\x67\x72\x52\x65\x71\x20\x47\x65\x74\x20\x69\x6e\x64\x65\x78\x3a\x25\x64\x2e" "\n"
 ,iSmsIndex);snprintf(pAtcmdStr,sizeof(pAtcmdStr),
 "\x41\x54\x2b\x5a\x4d\x47\x52\x3d\x25\x73" "\r\n",pAtCmdPara);return 
@@ -458,8 +456,8 @@
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x5a\x6d\x67\x72\x45\x72\x72\x20\x20\x53\x4d\x53\x20\x7a\x6d\x67\x72\x20\x69\x73\x20\x66\x61\x69\x6c" "\n"
 );{sc_cfg_set(NV_SMS_RECV_RESULT,"\x66\x61\x69\x6c");zUfiSms_ChangeMainState(
 SMS_STATE_RECVED);}}VOID atSms_RecvZmgrRsp(T_zAt_AtRes*pResLine){static 
-T_zUfiSms_SmsItem tSmsPara={(0x433+5184-0x1873)};T_zUfiSms_CmgrSetRsp tCmgrRsp={
-(0x5a1+1109-0x9f6)};printf(
+T_zUfiSms_SmsItem tSmsPara={(0x23ca+573-0x2607)};T_zUfiSms_CmgrSetRsp tCmgrRsp={
+(0xe9+6539-0x1a74)};printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x5a\x6d\x67\x72\x52\x73\x70\x20\x45\x6e\x74\x65\x72\x20\x70\x64\x75\x46\x6c\x61\x67\x3a\x25\x64\x2f\x50\x61\x72\x61\x73\x3a\x25\x73\x2f\x72\x65\x73\x75\x6c\x74\x3a\x25\x64\x2e" "\n"
 ,pResLine->pduFlag,pResLine->resParas,pResLine->result);if(pResLine->pduFlag==
 ZAT_ATRES_PDU_FLAG){if(ZAT_RESULT_AUTOREPORT!=pResLine->result){printf(
@@ -467,56 +465,56 @@
 );return;}tCmgrRsp.index=tSmsPara.index;tCmgrRsp.length=tSmsPara.length;tCmgrRsp
 .stat=tSmsPara.stat;sscanf(pResLine->resParas,"\x25\x35\x30\x30\x73",tCmgrRsp.
 pdu);zUfiSms_ZmgrRespProc(&tCmgrRsp);zUfiMmi_SendSmsStatus();sc_cfg_set(
-NV_SMS_RECV_RESULT,"\x6f\x6b");}else{memset(&tSmsPara,(0x21d1+512-0x23d1),sizeof
-(T_zUfiSms_SmsItem));(void)zUfiSms_FormatSms(pResLine->resParas,sizeof(pResLine
-->resParas),&tSmsPara,(0x38d+2839-0xea2));tSmsPara.index=iSmsIndex;printf(
+NV_SMS_RECV_RESULT,"\x6f\x6b");}else{memset(&tSmsPara,(0x1425+20-0x1439),sizeof(
+T_zUfiSms_SmsItem));(void)zUfiSms_FormatSms(pResLine->resParas,sizeof(pResLine->
+resParas),&tSmsPara,(0x484+3629-0x12af));tSmsPara.index=iSmsIndex;printf(
 "\x5b\x53\x4d\x53\x5d\x20\x5a\x6d\x67\x72\x20\x52\x65\x73\x70\x21\x20\x69\x6e\x64\x65\x78\x3a\x25\x64\x2f\x73\x74\x61\x74\x3a\x25\x64\x2f\x6c\x65\x6e\x67\x74\x68\x3a\x25\x64\x2e" "\n"
 ,tSmsPara.index,tSmsPara.stat,tSmsPara.length);}}int atSms_SendCmgdReq(PSTR 
-pAtCmdPara,int cid,PSTR pAtRst,int atRstSize){CHAR pAtcmdStr[
-(0x1547+4480-0x26b3)]={(0x791+464-0x961)};snprintf(pAtcmdStr,sizeof(pAtcmdStr),
+pAtCmdPara,int cid,PSTR pAtRst,int atRstSize){CHAR pAtcmdStr[(0x6f0+4251-0x1777)
+]={(0xd83+531-0xf96)};snprintf(pAtcmdStr,sizeof(pAtcmdStr),
 "\x41\x54\x2b\x43\x4d\x47\x44\x3d\x25\x73" "\r\n",pAtCmdPara);return 
 zSvr_SendAtSyn(ZAT_CMGD_CMD,pAtcmdStr,cid,pAtRst,atRstSize);}VOID 
-atSms_RecvCmgdOk(VOID){CHAR strUsed[(0x7af+2741-0x125a)]={(0x7fa+542-0xa18)};int
- used=(0x28b+2367-0xbca);sc_cfg_set(NV_SMS_DEL_RESULT,"\x6f\x6b");printf(
+atSms_RecvCmgdOk(VOID){CHAR strUsed[(0x221+2484-0xbcb)]={(0xd22+1113-0x117b)};
+int used=(0x32b+2970-0xec5);sc_cfg_set(NV_SMS_DEL_RESULT,"\x6f\x6b");printf(
 "\x5b\x53\x4d\x53\x5d\x20\x73\x65\x74\x20\x73\x69\x6d\x5f\x64\x65\x6c\x5f\x72\x65\x73\x75\x6c\x74\x20\x74\x6f\x20\x4f\x4b\x2e\x20" "\n"
 );sc_cfg_get(ZTE_WMS_NVCONFIG_SIM_CARD_USED,strUsed,sizeof(strUsed));used=atoi(
-strUsed)-(0xa28+1753-0x1100);if(used<(0x54+7394-0x1d36)){used=
-(0x1771+195-0x1834);}memset(&strUsed,(0x476+6369-0x1d57),(0x760+3411-0x14a9));
+strUsed)-(0x243f+242-0x2530);if(used<(0x96+7584-0x1e36)){used=
+(0x1cc1+458-0x1e8b);}memset(&strUsed,(0x233+7621-0x1ff8),(0x10d3+3012-0x1c8d));
 snprintf(strUsed,sizeof(strUsed),"\x25\x64",used);sc_cfg_set(
 ZTE_WMS_NVCONFIG_SIM_CARD_USED,strUsed);}VOID atSms_RecvCmgdErr(VOID){sc_cfg_set
 (NV_SMS_DEL_RESULT,"\x66\x61\x69\x6c");printf(
 "\x5b\x53\x4d\x53\x5d\x20\x73\x65\x74\x20\x73\x69\x6d\x5f\x64\x65\x6c\x5f\x72\x65\x73\x75\x6c\x74\x20\x74\x6f\x20\x66\x61\x69\x6c\x2e\x20" "\n"
-);}VOID atSms_RecvCmgdFinish(VOID){char StrValue[(0x539+1707-0xbda)]={
-(0xc39+1095-0x1080)};CHAR strTotal[(0x1a49+412-0x1bdb)]={(0x9a8+1129-0xe11)};
-CHAR strUsed[(0x440+1604-0xa7a)]={(0xbb6+3159-0x180d)};int total=
-(0x1803+431-0x19b2);int used=(0xd12+431-0xec1);int remain=(0x18a+4209-0x11fb);
-sc_cfg_get(ZTE_WMS_NVCONFIG_SIM_CARD_USED,strUsed,sizeof(strUsed));used=atoi(
-strUsed);sc_cfg_get(ZTE_WMS_NVCONFIG_SIM_CARD_TOTAL,strTotal,sizeof(strTotal));
-total=atoi(strTotal);remain=total-used;if(remain<(0x5ef+4834-0x18d1)){remain=
-(0x2c1+7943-0x21c8);}memset(&StrValue,(0x3b5+4643-0x15d8),(0x12bf+441-0x146e));
-snprintf(StrValue,sizeof(StrValue),"\x25\x64",remain);sc_cfg_set(
-ZTE_WMS_NVCONFIG_SIM_CARD_REMAIN,StrValue);printf(
+);}VOID atSms_RecvCmgdFinish(VOID){char StrValue[(0x6f0+4147-0x1719)]={
+(0x1750+3227-0x23eb)};CHAR strTotal[(0xa90+3997-0x1a23)]={(0xc5+5485-0x1632)};
+CHAR strUsed[(0x13fc+2760-0x1eba)]={(0xa6c+7022-0x25da)};int total=
+(0x19df+3093-0x25f4);int used=(0x2090+1625-0x26e9);int remain=
+(0x1b7+4430-0x1305);sc_cfg_get(ZTE_WMS_NVCONFIG_SIM_CARD_USED,strUsed,sizeof(
+strUsed));used=atoi(strUsed);sc_cfg_get(ZTE_WMS_NVCONFIG_SIM_CARD_TOTAL,strTotal
+,sizeof(strTotal));total=atoi(strTotal);remain=total-used;if(remain<
+(0x11ef+3099-0x1e0a)){remain=(0x302+5559-0x18b9);}memset(&StrValue,
+(0xa92+6503-0x23f9),(0x677+5008-0x19fd));snprintf(StrValue,sizeof(StrValue),
+"\x25\x64",remain);sc_cfg_set(ZTE_WMS_NVCONFIG_SIM_CARD_REMAIN,StrValue);printf(
 "\x5b\x53\x4d\x53\x5d\x20\x7a\x55\x66\x69\x53\x6d\x73\x5f\x44\x65\x6c\x65\x74\x65\x53\x69\x6d\x53\x6d\x73\x20\x75\x73\x65\x64\x3d\x25\x64\x2c\x72\x65\x6d\x61\x69\x6e\x3d\x25\x64\x2c\x74\x6f\x74\x61\x6c\x3d\x25\x64" "\n"
 ,used,remain,total);zUfiSms_ChangeMainState(SMS_STATE_DELED);sc_cfg_set(
 NV_SMS_DB_CHANGE,"\x31");}int atSms_SendCmgsReq(PSTR pAtCmdPara,int cid,PSTR 
-pAtRst,int atRstSize){int atRes=(0x176+4899-0x1499);CHAR pAtcmdStr[ZSMS_PDU_SIZE
-]={(0xc83+1061-0x10a8)};snprintf(pAtcmdStr,sizeof(pAtcmdStr),
+pAtRst,int atRstSize){int atRes=(0x94c+3723-0x17d7);CHAR pAtcmdStr[ZSMS_PDU_SIZE
+]={(0x19da+27-0x19f5)};snprintf(pAtcmdStr,sizeof(pAtcmdStr),
 "\x41\x54\x2b\x43\x4d\x47\x53\x3d\x25\x64" "\r\n",g_zUfiSms_FinalCmgsBuf.length)
 ;atRes=zSvr_SendAtSyn(ZAT_CMGS_CMD,pAtcmdStr,cid,pAtRst,atRstSize);if(atRes!=
-ZAT_RESULT_SMS){return atRes;}memset(pAtcmdStr,(0x1d50+1701-0x23f5),
-ZSMS_PDU_SIZE);if(strlen(g_zUfiSms_FinalCmgsBuf.pdu)<ZSMS_PDU_SIZE-
-(0x1a5b+1634-0x20bc)){memcpy(pAtcmdStr,g_zUfiSms_FinalCmgsBuf.pdu,strlen(
-g_zUfiSms_FinalCmgsBuf.pdu));}else{printf(
+ZAT_RESULT_SMS){return atRes;}memset(pAtcmdStr,(0x1893+582-0x1ad9),ZSMS_PDU_SIZE
+);if(strlen(g_zUfiSms_FinalCmgsBuf.pdu)<ZSMS_PDU_SIZE-(0xa75+7165-0x2671)){
+memcpy(pAtcmdStr,g_zUfiSms_FinalCmgsBuf.pdu,strlen(g_zUfiSms_FinalCmgsBuf.pdu));
+}else{printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x53\x65\x6e\x64\x43\x6d\x67\x73\x52\x65\x71\x20\x70\x64\x75\x20\x74\x6f\x6f\x20\x6c\x6f\x6e\x67\x3a\x25\x73" "\n"
 ,g_zUfiSms_FinalCmgsBuf.pdu);memcpy(pAtcmdStr,g_zUfiSms_FinalCmgsBuf.pdu,
-ZSMS_PDU_SIZE-(0x3fb+2523-0xdd4));}*(pAtcmdStr+strlen(g_zUfiSms_FinalCmgsBuf.pdu
-))=ZSMS_CTRL_Z_CHAR;memset(pAtRst,(0x1563+2381-0x1eb0),atRstSize);return 
+ZSMS_PDU_SIZE-(0x12d7+1902-0x1a43));}*(pAtcmdStr+strlen(g_zUfiSms_FinalCmgsBuf.
+pdu))=ZSMS_CTRL_Z_CHAR;memset(pAtRst,(0x23e7+357-0x254c),atRstSize);return 
 zSvr_SendAtSyn(ZAT_CMGS_CMD,pAtcmdStr,cid,pAtRst,atRstSize);}VOID 
 atSms_RecvCmgsOk(UINT8*pResLine,int cid){at_print(LOG_DEBUG,
 "\x73\x6d\x73\x20\x73\x65\x6e\x64\x65\x64\x20\x73\x75\x63\x63\x65\x73\x73\x2e\x20" "\n"
 );g_zUfiSms_CurConcatSegNo++;if(g_zUfiSms_CurConcatSegNo>
 ZTE_WMS_CONCAT_SMS_COUNT_MAX){return;}g_zUfiSms_DbStoreData[
-g_zUfiSms_CurConcatSegNo-(0xee5+1835-0x160f)].tag=WMS_TAG_TYPE_MO_SENT_V01;
+g_zUfiSms_CurConcatSegNo-(0x157b+4314-0x2654)].tag=WMS_TAG_TYPE_MO_SENT_V01;
 zUfiSms_CmgsRespProc(cid);}VOID atSms_RecvCmgsErr(UINT8*pResLine,int cid){
 at_print(LOG_DEBUG,
 "\x73\x6d\x73\x20\x73\x65\x6e\x64\x65\x64\x20\x66\x61\x69\x6c\x2e\x20" "\n");
@@ -524,16 +522,16 @@
 ZTE_WMS_CONCAT_SMS_COUNT_MAX){return;}g_zUfiSms_SendFailedCount++;at_print(
 LOG_DEBUG,
 "\x73\x65\x6e\x64\x20\x73\x6d\x73\x20\x66\x61\x69\x6c\x65\x64\x2c\x73\x6f\x20\x77\x72\x69\x74\x65\x20\x73\x6d\x73\x20\x74\x6f\x20\x64\x72\x61\x66\x74\x62\x6f\x78\x2e" "\n"
-);g_zUfiSms_DbStoreData[g_zUfiSms_CurConcatSegNo-(0xb0c+6884-0x25ef)].tag=
-WMS_TAG_TYPE_MO_NOT_SENT_V01;if(g_zUfiSms_ConcatTotalNum>(0x862+7653-0x2646)){
+);g_zUfiSms_DbStoreData[g_zUfiSms_CurConcatSegNo-(0x107d+376-0x11f4)].tag=
+WMS_TAG_TYPE_MO_NOT_SENT_V01;if(g_zUfiSms_ConcatTotalNum>(0xb0a+7158-0x26ff)){
 g_zUfiSms_IsConcatSendSuc=FALSE;}zUfiSms_CmgsRespProc(cid);}VOID 
 atSms_RecvCmgsRsp(T_zAt_AtRes*pResLine){return;}VOID atSms_RecvCmtRsp(
-T_zAt_AtRes*pResLine){CHAR needSMS[(0x3d8+1787-0xaa1)]={(0x1342+135-0x13c9)};
-sc_cfg_get(NV_NEED_SUPPORT_SMS,needSMS,sizeof(needSMS));if((0x1325+603-0x1580)==
+T_zAt_AtRes*pResLine){CHAR needSMS[(0x5d9+188-0x663)]={(0x471+7444-0x2185)};
+sc_cfg_get(NV_NEED_SUPPORT_SMS,needSMS,sizeof(needSMS));if((0xe08+1552-0x1418)==
 strcmp(needSMS,"\x6e\x6f")){printf(
 "\x5b\x53\x4d\x53\x5d\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x43\x6d\x74\x52\x73\x70\x20\x6e\x65\x65\x64\x53\x4d\x53\x3d\x6e\x6f\x21"
-);return;}static T_zUfiSms_SmsItem tSmsPara={(0x894+2418-0x1206)};
-T_zUfiSms_CmtSetRsp tCmtRsp={(0x1ec6+845-0x2213)};if(NULL==pResLine){return;}
+);return;}static T_zUfiSms_SmsItem tSmsPara={(0x2eb+2688-0xd6b)};
+T_zUfiSms_CmtSetRsp tCmtRsp={(0x25d+5148-0x1679)};if(NULL==pResLine){return;}
 printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x43\x6d\x74\x52\x73\x70\x20\x45\x6e\x74\x65\x72\x20\x70\x64\x75\x46\x6c\x61\x67\x3a\x25\x64\x2f\x50\x61\x72\x61\x73\x3a\x25\x73\x2f\x72\x65\x73\x75\x6c\x74\x3a\x25\x64\x2e" "\n"
 ,pResLine->pduFlag,pResLine->resParas,pResLine->result);if(pResLine->pduFlag==
@@ -543,120 +541,119 @@
 "\x25\x35\x30\x30\x73",tCmtRsp.pdu);pthread_mutex_lock(&smsdb_mutex);
 zUfiSms_CmtRespProc(&tCmtRsp);zUfiMmi_SendSmsStatus();pthread_mutex_unlock(&
 smsdb_mutex);sc_cfg_set(NV_SMS_RECV_RESULT,"\x6f\x6b");}else{memset(&tSmsPara,
-(0x425+983-0x7fc),sizeof(T_zUfiSms_SmsItem));atBase_PreProcRes(pResLine->
+(0x106d+3354-0x1d87),sizeof(T_zUfiSms_SmsItem));atBase_PreProcRes(pResLine->
 resParas,sizeof(pResLine->resParas));printf(
 "\x5b\x53\x4d\x53\x5d\x20\x63\x6d\x74\x20\x69\x6e\x64\x21\x20\x70\x52\x65\x73\x4c\x69\x6e\x65\x2d\x3e\x72\x65\x73\x50\x61\x72\x61\x73\x3a\x25\x73\x2e" "\n"
 ,pResLine->resParas);sscanf(pResLine->resParas,"\x25\x73\x20\x25\x64",tSmsPara.
 alpha,&tSmsPara.length);printf(
 "\x5b\x53\x4d\x53\x5d\x20\x63\x6d\x74\x20\x69\x6e\x64\x21\x20\x6c\x65\x6e\x67\x74\x68\x3a\x25\x64\x2e" "\n"
 ,tSmsPara.length);}}VOID atSms_RecvCmtiRsp(T_zAt_AtRes*pResLine){CHAR needSMS[
-(0x15f2+1252-0x1aa4)]={(0x1c91+1981-0x244e)};sc_cfg_get(NV_NEED_SUPPORT_SMS,
-needSMS,sizeof(needSMS));if((0xd55+2617-0x178e)==strcmp(needSMS,"\x6e\x6f")){
+(0x848+6615-0x21ed)]={(0x473+5889-0x1b74)};sc_cfg_get(NV_NEED_SUPPORT_SMS,
+needSMS,sizeof(needSMS));if((0x2013+974-0x23e1)==strcmp(needSMS,"\x6e\x6f")){
 printf(
 "\x5b\x53\x4d\x53\x5d\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x43\x6d\x74\x52\x73\x70\x20\x6e\x65\x65\x64\x53\x4d\x53\x3d\x6e\x6f\x21"
-);return;}char sms_Main_state[(0x187a+1016-0x1c54)]={(0xe9d+2561-0x189e)};char*
+);return;}char sms_Main_state[(0x1101+1006-0x14d1)]={(0x95b+850-0xcad)};char*
 memory=NULL;printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x43\x6d\x74\x69\x52\x73\x70\x20\x65\x6e\x74\x65\x72\x20\x25\x73\x2e" "\n"
 ,pResLine->resParas);if(NULL==pResLine){return;}if(ZAT_CMTI_CMD!=pResLine->
 atCmdId){return;}sc_cfg_get(NV_SMS_STATE,sms_Main_state,sizeof(sms_Main_state));
 if(strcmp(sms_Main_state,"\x73\x6d\x73\x5f\x64\x65\x6c\x69\x6e\x67")==
-(0x1876+1671-0x1efd)){printf(
+(0x454+6895-0x1f43)){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x43\x6d\x74\x69\x52\x73\x70\x3a\x20\x73\x6d\x73\x5f\x64\x65\x6c\x69\x6e\x67" "\n"
 );return;}memory=strstr(pResLine->resParas,"\"");if(NULL!=memory){memory++;}if(
-(0xbfc+5992-0x2364)==strncmp("\x53\x4d",memory,(0xef+6862-0x1bbb))){
+(0x246+2125-0xa93)==strncmp("\x53\x4d",memory,(0x14b0+3589-0x22b3))){
 zUfiSms_SetSmsLocation(SMS_LOCATION_SIM);zUfiSms_ChangeMainState(
-SMS_STATE_RECVING);memory+=(0x479+6008-0x1bed);printf(
+SMS_STATE_RECVING);memory+=(0x14d+9527-0x2680);printf(
 "\x5b\x53\x4d\x53\x5d\x20\x73\x65\x6e\x64\x20\x63\x6d\x67\x72\x3a\x20\x25\x73" "\n"
 ,memory);zSvr_InnerSendMsg(ZUFI_MODULE_ID_AT_LOCAL,ZUFI_MODULE_ID_AT_UNSOLI,
 MSG_CMD_AT_ZMGR,strlen(memory),memory);}else{printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x43\x6d\x74\x69\x52\x73\x70\x20\x3a\x73\x74\x6f\x72\x65\x20\x6c\x6f\x63\x61\x74\x69\x6f\x6e\x20\x6e\x6f\x74\x20\x53\x4d\x2e" "\n"
 );}sc_cfg_set(NV_SMS_RECV_RESULT,"");}VOID atSms_RecvCdsRsp(T_zAt_AtRes*pResLine
-){CHAR needSMS[(0x82+8421-0x2135)]={(0x635+2813-0x1132)};sc_cfg_get(
-NV_NEED_SUPPORT_SMS,needSMS,sizeof(needSMS));if((0x9d4+6900-0x24c8)==strcmp(
+){CHAR needSMS[(0x1430+2174-0x1c7c)]={(0x79d+3341-0x14aa)};sc_cfg_get(
+NV_NEED_SUPPORT_SMS,needSMS,sizeof(needSMS));if((0x36a+1042-0x77c)==strcmp(
 needSMS,"\x6e\x6f")){printf(
 "\x5b\x53\x4d\x53\x5d\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x43\x6d\x74\x52\x73\x70\x20\x6e\x65\x65\x64\x53\x4d\x53\x3d\x6e\x6f\x21"
-);return;}static T_zUfiSms_SmsItem tSmsPara={(0x8e0+3039-0x14bf)};
-T_zUfiSms_CmgrSetRsp tCmgrRsp={(0xb3+3336-0xdbb)};if(NULL==pResLine){return;}if(
-pResLine->pduFlag==ZAT_ATRES_PDU_FLAG){if(ZAT_RESULT_AUTOREPORT!=pResLine->
+);return;}static T_zUfiSms_SmsItem tSmsPara={(0x4e9+7440-0x21f9)};
+T_zUfiSms_CmgrSetRsp tCmgrRsp={(0x24e2+417-0x2683)};if(NULL==pResLine){return;}
+if(pResLine->pduFlag==ZAT_ATRES_PDU_FLAG){if(ZAT_RESULT_AUTOREPORT!=pResLine->
 result){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x43\x64\x73\x52\x73\x70\x20\x67\x65\x74\x20\x72\x65\x73\x75\x6c\x74\x20\x45\x72\x72\x6f\x72\x2e" "\n"
 );return;}tCmgrRsp.length=tSmsPara.length;sscanf(pResLine->resParas,
 "\x25\x35\x30\x30\x73",tCmgrRsp.pdu);pthread_mutex_lock(&smsdb_mutex);
 zUfiSms_CdsRespProc(&tCmgrRsp);zUfiMmi_SendSmsStatus();pthread_mutex_unlock(&
 smsdb_mutex);sc_cfg_set(NV_SMS_RECV_RESULT,"\x6f\x6b");}else{memset(&tSmsPara,
-(0x509+6021-0x1c8e),sizeof(T_zUfiSms_SmsItem));atBase_PreProcRes(pResLine->
+(0x438+4385-0x1559),sizeof(T_zUfiSms_SmsItem));atBase_PreProcRes(pResLine->
 resParas,sizeof(pResLine->resParas));printf(
 "\x5b\x53\x4d\x53\x5d\x20\x63\x64\x73\x20\x69\x6e\x64\x21\x20\x70\x52\x65\x73\x4c\x69\x6e\x65\x2d\x3e\x72\x65\x73\x50\x61\x72\x61\x73\x3a\x25\x73\x2e" "\n"
 ,pResLine->resParas);sscanf(pResLine->resParas,"\x25\x73\x20\x25\x64",tSmsPara.
 alpha,&tSmsPara.length);printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x43\x64\x73\x52\x73\x70\x20\x63\x64\x73\x20\x69\x6e\x64\x21\x20\x6c\x65\x6e\x67\x74\x68\x3a\x25\x64\x2e" "\n"
 ,tSmsPara.length);}}VOID atSms_RecvCdsiRsp(T_zAt_AtRes*pResLine){CHAR needSMS[
-(0x17c+6107-0x1925)]={(0x1660+166-0x1706)};sc_cfg_get(NV_NEED_SUPPORT_SMS,
-needSMS,sizeof(needSMS));if((0x568+4273-0x1619)==strcmp(needSMS,"\x6e\x6f")){
-printf(
+(0x48+2577-0xa27)]={(0x2005+1631-0x2664)};sc_cfg_get(NV_NEED_SUPPORT_SMS,needSMS
+,sizeof(needSMS));if((0x19ad+3138-0x25ef)==strcmp(needSMS,"\x6e\x6f")){printf(
 "\x5b\x53\x4d\x53\x5d\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x43\x6d\x74\x52\x73\x70\x20\x6e\x65\x65\x64\x53\x4d\x53\x3d\x6e\x6f\x21"
-);return;}char sms_Main_state[(0x2504+464-0x26b6)]={(0xeac+5559-0x2463)};char*
+);return;}char sms_Main_state[(0x1a2a+1237-0x1ee1)]={(0x1ec+7148-0x1dd8)};char*
 memory=NULL;printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x43\x64\x73\x69\x52\x73\x70\x20\x65\x6e\x74\x65\x72\x20\x25\x73\x2e" "\n"
 ,pResLine->resParas);if(NULL==pResLine){return;}if(ZAT_CDSI_CMD!=pResLine->
 atCmdId){return;}sc_cfg_get(NV_SMS_STATE,sms_Main_state,sizeof(sms_Main_state));
 if(strcmp(sms_Main_state,"\x73\x6d\x73\x5f\x64\x65\x6c\x69\x6e\x67")==
-(0x1e2a+1048-0x2242)){printf(
+(0xac0+1212-0xf7c)){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x43\x64\x73\x69\x52\x73\x70\x3a\x20\x73\x6d\x73\x5f\x64\x65\x6c\x69\x6e\x67" "\n"
 );return;}memory=strstr(pResLine->resParas,"\"");if(NULL!=memory){memory++;}
 printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x43\x64\x73\x69\x52\x73\x70\x3a\x20\x6d\x65\x6d\x6f\x72\x79\x20\x3d\x20\x25\x73" "\n"
-,memory);if((0x1747+2590-0x2165)==strncmp("\x53\x4d",memory,(0xaf3+450-0xcb3))){
-zUfiSms_SetSmsLocation(SMS_LOCATION_SIM);zUfiSms_ChangeMainState(
-SMS_STATE_RECVING);memory+=(0x1081+658-0x130f);printf(
+,memory);if((0xadb+5827-0x219e)==strncmp("\x53\x4d",memory,(0xcfd+5994-0x2465)))
+{zUfiSms_SetSmsLocation(SMS_LOCATION_SIM);zUfiSms_ChangeMainState(
+SMS_STATE_RECVING);memory+=(0x645+525-0x84e);printf(
 "\x5b\x53\x4d\x53\x5d\x20\x73\x65\x6e\x64\x20\x63\x6d\x67\x72\x3a\x20\x25\x73" "\n"
 ,memory);zSvr_InnerSendMsg(ZUFI_MODULE_ID_AT_LOCAL,ZUFI_MODULE_ID_AT_UNSOLI,
 MSG_CMD_AT_ZMGR,strlen(memory),memory);}else{printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x52\x65\x63\x76\x43\x64\x73\x69\x52\x73\x70\x20\x3a\x73\x74\x6f\x72\x65\x20\x6c\x6f\x63\x61\x74\x69\x6f\x6e\x20\x6e\x6f\x74\x20\x53\x4d\x2e" "\n"
 );}sc_cfg_set(NV_SMS_RECV_RESULT,"");}int atSms_SendZmenaReq(PSTR pAtCmdPara,int
- cid,PSTR pAtRst,int atRstSize){CHAR pAtcmdStr[(0x8a+5928-0x179e)]={
-(0x87f+4524-0x1a2b)};snprintf(pAtcmdStr,sizeof(pAtcmdStr),
+ cid,PSTR pAtRst,int atRstSize){CHAR pAtcmdStr[(0x11fc+2681-0x1c61)]={
+(0x1639+4239-0x26c8)};snprintf(pAtcmdStr,sizeof(pAtcmdStr),
 "\x41\x54\x2b\x5a\x4d\x45\x4e\x41\x3d\x25\x73" "\r\n",pAtCmdPara);return 
 zSvr_SendAtSyn(ZAT_ZMENA_CMD,pAtcmdStr,cid,pAtRst,atRstSize);}VOID 
 atSms_RecvZmenaOk(VOID){g_Zmena_rsp=TRUE;return;}VOID atSms_RecvZmenaErr(VOID){
 g_Zmena_rsp=FALSE;return;}int atSms_SendCnmaReq(PSTR pAtCmdPara,int cid,PSTR 
-pAtRst,int atRstSize){int atRes=(0x127f+441-0x1438);CHAR pAtcmdStr[ZSMS_PDU_SIZE
-]={(0x7a2+1803-0xead)};CHAR ackPduStr[(0x939+5414-0x1e2d)]={(0x1f26+1846-0x265c)
-};if(atoi(pAtCmdPara)==(0x8c3+1517-0xeaf)){snprintf(pAtcmdStr,sizeof(pAtcmdStr),
+pAtRst,int atRstSize){int atRes=(0x215+8065-0x2196);CHAR pAtcmdStr[ZSMS_PDU_SIZE
+]={(0x7cf+7440-0x24df)};CHAR ackPduStr[(0xe12+955-0x119b)]={(0x960+4596-0x1b54)}
+;if(atoi(pAtCmdPara)==(0xfeb+4187-0x2045)){snprintf(pAtcmdStr,sizeof(pAtcmdStr),
 "\x41\x54\x2b\x43\x4e\x4d\x41\x3d\x25\x73" "\r\n",pAtCmdPara);atRes=
 zSvr_SendAtSyn(ZAT_CNMA_CMD,pAtcmdStr,cid,pAtRst,atRstSize);printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x53\x65\x6e\x64\x43\x6e\x6d\x61\x52\x65\x71\x20\x31\x31\x31\x31\x31\x31\x20\x61\x63\x6b\x20\x6f\x6b\x20\x3d\x20\x25\x73\x2e" "\n"
-,pAtcmdStr);return(0x1429+608-0x1689);}else{zUfiSms_EncodePdu_DeliverReport(
-ackPduStr,(0x2a3+58-0x20a));snprintf(pAtcmdStr,sizeof(pAtcmdStr),
+,pAtcmdStr);return(0x7f5+768-0xaf5);}else{zUfiSms_EncodePdu_DeliverReport(
+ackPduStr,(0x184d+537-0x1993));snprintf(pAtcmdStr,sizeof(pAtcmdStr),
 "\x41\x54\x2b\x43\x4e\x4d\x41\x3d\x25\x73\x2c\x25\x64" "\r\n",pAtCmdPara,strlen(
-ackPduStr)/(0xd1+6580-0x1a83));atRes=zSvr_SendAtSyn(ZAT_CNMA_CMD,pAtcmdStr,cid,
-pAtRst,atRstSize);if(atRes!=ZAT_RESULT_SMS){return atRes;}printf(
+ackPduStr)/(0x13f0+3903-0x232d));atRes=zSvr_SendAtSyn(ZAT_CNMA_CMD,pAtcmdStr,cid
+,pAtRst,atRstSize);if(atRes!=ZAT_RESULT_SMS){return atRes;}printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x53\x65\x6e\x64\x43\x6e\x6d\x61\x52\x65\x71\x20\x3d\x20\x25\x73\x2e" "\n"
-,pAtcmdStr);memset(pAtcmdStr,(0x139b+3129-0x1fd4),ZSMS_PDU_SIZE);if(strlen(
-ackPduStr)<ZSMS_PDU_SIZE-(0x789+3084-0x1394)){memcpy(pAtcmdStr,ackPduStr,strlen(
+,pAtcmdStr);memset(pAtcmdStr,(0xe13+5453-0x2360),ZSMS_PDU_SIZE);if(strlen(
+ackPduStr)<ZSMS_PDU_SIZE-(0x858+6962-0x2389)){memcpy(pAtcmdStr,ackPduStr,strlen(
 ackPduStr));}else{printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x53\x65\x6e\x64\x43\x6d\x67\x73\x52\x65\x71\x20\x70\x64\x75\x20\x74\x6f\x6f\x20\x6c\x6f\x6e\x67\x3a\x25\x73" "\n"
-,ackPduStr);memcpy(pAtcmdStr,ackPduStr,ZSMS_PDU_SIZE-(0x271+5876-0x1963));}*(
+,ackPduStr);memcpy(pAtcmdStr,ackPduStr,ZSMS_PDU_SIZE-(0x1374+1567-0x1991));}*(
 pAtcmdStr+strlen(ackPduStr))=ZSMS_CTRL_Z_CHAR;printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x53\x6d\x73\x5f\x53\x65\x6e\x64\x43\x6e\x6d\x61\x52\x65\x71\x2e\x20\x70\x64\x75\x3d\x20\x25\x73" "\n"
-,pAtcmdStr);memset(pAtRst,(0x7a9+7386-0x2483),atRstSize);return zSvr_SendAtSyn(
+,pAtcmdStr);memset(pAtRst,(0x673+1760-0xd53),atRstSize);return zSvr_SendAtSyn(
 ZAT_CNMA_CMD,pAtcmdStr,cid,pAtRst,atRstSize);}}VOID atSms_RecvCnmaRsp(
 T_zAt_AtRes*pResLine){return;}VOID atUnsoli_Delete_Sim_Sms(UINT8*pDatabuf,int 
-cid){CHAR errCode[ZSVR_AT_RES_CODE_LEN]={(0x13f0+418-0x1592)};int atRes=
-(0x2a0+4137-0x12c9);if(pDatabuf==NULL){return;}atRes=atSms_SendCmgdReq(pDatabuf,
-cid,errCode,ZSVR_AT_RES_CODE_LEN);if(atRes==ZSMS_RESULT_OK){atSms_RecvCmgdOk();}
-else{atSms_RecvCmgdErr();}atSms_RecvCmgdFinish();}VOID atUnsoli_Report_Cnma(
-UINT8*pDatabuf,int cid){CHAR errCode[ZSVR_AT_RES_CODE_LEN]={(0xb34+2887-0x167b)}
-;if(pDatabuf==NULL){printf(
+cid){CHAR errCode[ZSVR_AT_RES_CODE_LEN]={(0x1042+3441-0x1db3)};int atRes=
+(0x13ba+2697-0x1e43);if(pDatabuf==NULL){return;}atRes=atSms_SendCmgdReq(pDatabuf
+,cid,errCode,ZSVR_AT_RES_CODE_LEN);if(atRes==ZSMS_RESULT_OK){atSms_RecvCmgdOk();
+}else{atSms_RecvCmgdErr();}atSms_RecvCmgdFinish();}VOID atUnsoli_Report_Cnma(
+UINT8*pDatabuf,int cid){CHAR errCode[ZSVR_AT_RES_CODE_LEN]={(0x1454+2635-0x1e9f)
+};if(pDatabuf==NULL){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x55\x6e\x73\x6f\x6c\x69\x5f\x52\x65\x70\x6f\x72\x74\x5f\x43\x6e\x6d\x61\x20\x6e\x75\x6c\x6c"
 );return;}atSms_SendCnmaReq(pDatabuf,cid,errCode,ZSVR_AT_RES_CODE_LEN);}VOID 
 atUnsoli_Report_Zmena(UINT8*pDatabuf,int cid){CHAR errCode[ZSVR_AT_RES_CODE_LEN]
-={(0x1562+609-0x17c3)};int atRes=(0x837+5014-0x1bcd);if(pDatabuf==NULL){printf(
+={(0x535+2553-0xf2e)};int atRes=(0x1cb0+1007-0x209f);if(pDatabuf==NULL){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x55\x6e\x73\x6f\x6c\x69\x5f\x52\x65\x70\x6f\x72\x74\x5f\x5a\x6d\x65\x6e\x61\x20\x6e\x75\x6c\x6c"
 );return;}atRes=atSms_SendZmenaReq(pDatabuf,cid,errCode,ZSVR_AT_RES_CODE_LEN);if
 (atRes==ZSMS_RESULT_OK){atSms_RecvZmenaOk();}else{atSms_RecvZmenaErr();}}VOID 
 atUnsoli_Report_Zmgr(UINT8*pDatabuf,int cid){CHAR errCode[ZSVR_AT_RES_CODE_LEN]=
-{(0x4b7+6882-0x1f99)};if(pDatabuf==NULL){printf(
+{(0x1ab8+347-0x1c13)};if(pDatabuf==NULL){printf(
 "\x5b\x53\x4d\x53\x5d\x20\x61\x74\x55\x6e\x73\x6f\x6c\x69\x5f\x52\x65\x70\x6f\x72\x74\x5f\x5a\x6d\x67\x72\x20\x6e\x75\x6c\x6c"
 );return;}atSms_SendZmgrReq(pDatabuf,cid,errCode,ZSVR_AT_RES_CODE_LEN);}
 #endif

diff --git a/ap/app/zte_comm/wlan/src/wifi_ap_ctrl.c b/ap/app/zte_comm/wlan/src/wifi_ap_ctrl.c
index c1ef1e1..bffde4a 100755
--- a/ap/app/zte_comm/wlan/src/wifi_ap_ctrl.c
+++ b/ap/app/zte_comm/wlan/src/wifi_ap_ctrl.c
@@ -1818,6 +1818,8 @@
 {
 	sc_cfg_set ("wifi_process_state", "processing");
 	ap_server->stopap(ap_server);
+	wlan_ap_get_para(ap_server);
+	wlan_ap_save_config(ap_server);	
 	ap_server->startap(ap_server);
 	wlan_set_state(WLAN_ON,WLAN_ON);
 	sc_cfg_set ("wifi_process_state", "end");
diff --git a/ap/app/zte_comm/zte_drv_ctrl/usb/zte_drv_usb_ctrl.c b/ap/app/zte_comm/zte_drv_ctrl/usb/zte_drv_usb_ctrl.c
index 35154d0..b27a915 100755
--- a/ap/app/zte_comm/zte_drv_ctrl/usb/zte_drv_usb_ctrl.c
+++ b/ap/app/zte_comm/zte_drv_ctrl/usb/zte_drv_usb_ctrl.c
@@ -42,6 +42,7 @@
 pthread_mutex_t g_usbcfg_usbenum_mutex;

 

 T_USBCFG_UDISKFunc g_usbcfg_udiskProcFnc = NULL;

+ZDrvEfuse_Secure  g_efuse_chipinfo;

 

 #if 0

 /*ÈȰβåÏûÏ¢½âÎöºÍ´¦Àí*/

@@ -1394,9 +1395,9 @@
     int ret = 0;

     FILE *fd = NULL;

     char size_sd[12] = {0};

-

-	 fd = popen("cat /sys/kernel/debug/mmc0/present","r");

-    //fd = popen("cat /sys/kernel/debug/mmc1/present","r");

+// sd card only can be attached to mmc1

+	// fd = popen("cat /sys/kernel/debug/mmc0/present","r");	

+    fd = popen("cat /sys/kernel/debug/mmc1/present","r");

 

     if(fd == NULL)

     {

@@ -1819,74 +1820,6 @@
     return 0;

 }

 

-/*jb.qi add for usb wakelock on 20230918 start*/

-#define RPMSG_IOC_MAGIC     'R'

-

-/*ioctl cmd usd by device*/

-#define RPMSG_CREATE_CHANNEL          _IOW(RPMSG_IOC_MAGIC, 1, char *)

-#define RPMSG_GET_DATASIZE       _IOWR(RPMSG_IOC_MAGIC, 2, char *)

-#define RPMSG_SET_INT            _IOW(RPMSG_IOC_MAGIC, 3, char *)

-#define RPMSG_SET_INT_FLAG        _IOW(RPMSG_IOC_MAGIC, 4, char *)

-#define RPMSG_CLEAR_INT_FLAG      _IOW(RPMSG_IOC_MAGIC, 5, char *)

-#define RPMSG_SET_POLL_FLAG       _IOW(RPMSG_IOC_MAGIC, 6, char *)

-#define RPMSG_CLEAR_POLL_FLAG     _IOW(RPMSG_IOC_MAGIC, 7, char *)

-

-#define USB_PLUG_WAKE_CAP_DEV    "/dev/rpmsg50"

-

-int usbplug_fd = -1;

-

-int usbplug_icp_init(void) 

-{

-    usbplug_fd = open(USB_PLUG_WAKE_CAP_DEV, O_RDWR);

-	

-    if(0 > usbplug_fd){

-        printf("%s: open the channel(%s) error!\n", __func__, USB_PLUG_WAKE_CAP_DEV);

-        return -1;

-    }

-

-    if(0 > ioctl(usbplug_fd, RPMSG_CREATE_CHANNEL, 64)){

-        printf("%s: ioctl RPMSG_CREATE_CHANNEL fail!\n", __func__);

-        close(usbplug_fd);

-        usbplug_fd = -1;

-        return -1;

-    }

-

-    if(0 > ioctl(usbplug_fd, RPMSG_SET_INT_FLAG, NULL)){ //¿¿¿

-        printf("%s: ioctl RPMSG_SET_INT_FLAG fail!\n", __func__);

-        close(usbplug_fd);

-        usbplug_fd = -1;

-        return -1;

-    }

-

-    printf("yanming %s create success!\n",__func__);

-	

-    return 0;

-}

-

-int usbplug_rpmsg_send(int value)

-{

-    int write_len = 0;

-    char usbplug_in[20]="usbplug_in";

-    char usbplug_out[20]="usbplug_out";

-	

-	printf("yanming usbplug_rpmsg_send value:%d\n",value);

-

-    if(value == 1){

-    write_len = write(usbplug_fd, usbplug_in, sizeof(usbplug_in));

-    }

-

-    if(value == 0){

-    write_len = write(usbplug_fd, usbplug_out, sizeof(usbplug_out));

-    }

-

-	if(write_len <0){

-	 	printf("yanming usbplug rpmsg write FAIL\n");

-		close(usbplug_fd);

-		}

-

-    return write_len;

-}

-/*jb.qi add for usb wakelock on 20230918 end*/

 

 /*usbÈȰβåʼþ´¦Àí*/

 int usb_event_proc(unsigned short usb_msg, int usb_event)

@@ -1899,7 +1832,9 @@
         set_wake_lock(USBCFG_MAIN_LOCK_ID);

         usb_disable(); 

         usb_resetLunInfo();

+        usbcfg_putMutex(&g_usbcfg_usbenum_mutex);

 		usleep(1000 * 300);

+        usbcfg_getMutex(&g_usbcfg_usbenum_mutex);

         /*usb eventʼþ´¦Àí*/

         usb_change_event_proc(usb_event);

 

@@ -1918,7 +1853,6 @@
         {

             slog(USBCFGMNG_PRINT,SLOG_NORMAL, "[usbCfgMng] usb charger plugin \n");

         }

-	usbplug_rpmsg_send(1);//jb.qi add for usb wakelock on 20230918

         break;

     case MSG_CMD_DRV_USB_REMOVE:

         /*°Î³öʼþ´¦Àí*/

@@ -1936,7 +1870,6 @@
         {

             slog(USBCFGMNG_PRINT,SLOG_NORMAL, "[usbCfgMng] usb charger plugOut \n");

         }

-	usbplug_rpmsg_send(0);//jb.qi add for usb wakelock on 20230918

         break;

     default:

         break;

@@ -2090,15 +2023,6 @@
         slog(USBCFGMNG_PRINT,SLOG_ERR, "[usbCfgMng] warning: readfile %s fail \n", USB_PLUG_FILE_NAME);

         return -1;

     }

-    /*jb.qi add for usb wakelock on 20230918 start*/

-    printf("usbPlugtype:%d\n",usbPlugtype);

-    if(usbPlugtype == 1)

-	sc_cfg_set("usbplug_nv","1");

-   

-    if(usbPlugtype == 0)

-	sc_cfg_set("usbplug_nv","0");

-    usbplug_icp_init();

-    /*jb.qi add for usb wakelock on 20230918 end*/

     usb_usbCfgMngInit(usbPlugtype);

     if (usbPlugtype == 1 && cp_need_udisk == 1)

 		usb_sendUsbOperateRlt(2);

@@ -2106,6 +2030,63 @@
 	return 0;

 }

 

+/*

+ *check and set usb serial number by chip id from efuse

+ *

+ *

+ */

+void usb_set_serialid_by_chipid(void)

+{

+	int en_flag = -1;

+	int ret = 0;

+	char str_en_flag[2] = {0};

+	int fd_efuse = -1;

+	char iSerial[32] = {0};

+

+

+        sc_cfg_get(USB_SET_SERNUM_BY_CHIPID, str_en_flag, sizeof(str_en_flag));

+

+	slog(USBCFGMNG_PRINT,SLOG_ERR, "[usbCfgMng] usb_set_sernum_by_chipid ret = %d, tempModeType =%s\n", ret, str_en_flag);

+

+	en_flag = atoi(str_en_flag);   

+	

+	if(en_flag == 0){

+		printf(" don't need chipid return\n");

+		return ;

+	}

+	sc_cfg_get(STR_SERIAL_TSP, iSerial, sizeof(iSerial));

+	if(strcmp(iSerial, "1234567890ABCDEF")){

+		printf("iSerial already set, value is:%s \n", iSerial);

+		return ;

+	}

+	memset(&g_efuse_chipinfo, 0, sizeof(g_efuse_chipinfo));

+	

+	fd_efuse = open("/dev/efuse", O_RDWR);

+	if(fd_efuse < 0){

+		printf(" open /dev/efuse fail, ret:%d return\n", fd_efuse);

+		return ;

+	}	

+	ret = ioctl(fd_efuse, EFUSE_GET_DATA, &g_efuse_chipinfo);

+	if(ret < 0){

+		printf(" read EFUSE_GET_DATA fail, ret:%d \n", ret);

+		

+		goto END;

+		

+	}

+	printf("usb_set_serialid_by_chipid, now set chipid for serid,%x\n", (g_efuse_chipinfo.secureDevId[0]));

+	printf("usb_set_serialid_by_chipid, now set chipid for serid,%x\n", (g_efuse_chipinfo.secureDevId[1]));

+	printf("usb_set_serialid_by_chipid, now set chipid for serid,%x\n", (g_efuse_chipinfo.secureDevId[2]));

+	memset(iSerial, 0, 32);

+	

+	sprintf(iSerial,"%X%X%X", g_efuse_chipinfo.secureDevId[0], g_efuse_chipinfo.secureDevId[1], g_efuse_chipinfo.secureDevId[2] );

+	

+	sc_cfg_set(STR_SERIAL_TSP, iSerial);

+	sc_cfg_save();

+END:

+	close(fd_efuse);

+	fd_efuse = -1;

+	

+}

 int zte_drv_usb_ctrl_main(int argc, char* argv[])  

 {     

     int ret = 0;

@@ -2122,6 +2103,7 @@
         slog(USBCFGMNG_PRINT,SLOG_ERR, "[usbCfgMng] ###POWER OFF CHARGER Entry####\n");

     }

 	config_console_input();

+	usb_set_serialid_by_chipid();

 	if(zDrvRef_NvGetForceNetCardType() == FORCE_MBIM){

 		writefile(UART_CONSOLE_INPUT_PATH, "1", 1);

 	}

diff --git a/ap/app/zte_comm/zte_drv_ctrl/usb/zte_drv_usb_ctrl.h b/ap/app/zte_comm/zte_drv_ctrl/usb/zte_drv_usb_ctrl.h
index 8ced6fb..93e101c 100755
--- a/ap/app/zte_comm/zte_drv_ctrl/usb/zte_drv_usb_ctrl.h
+++ b/ap/app/zte_comm/zte_drv_ctrl/usb/zte_drv_usb_ctrl.h
@@ -120,6 +120,7 @@
 #define STR_CONFIG_TSP                   "CONFIG_TSP"//ZXIC Configuration

 

 #define STR_USB_VNIC_USER                "usb_vnic_user"

+#define USB_SET_SERNUM_BY_CHIPID                "usb_sernum_chipid"

 

 #define STR_INQUIRY_MS_CDROM              "INQUIRY_MS_CDROM"//ZXIC

 //#define STR_VENDOR_MS_CDROM              "VENDOR_MS_CDROM"//ZXIC

@@ -330,6 +331,18 @@
 };

 #endif

 

+typedef struct

+{

+	unsigned int pubKeyRsaE[32];

+	unsigned int pubKeyRsaN[32];

+	unsigned int secureFlag;

+	unsigned int pubKeyHash[4];

+	unsigned int secureDevId[3];

+}ZDrvEfuse_Secure;

+

+#define EFUSE_IOC_MAGIC 	'E'

+#define EFUSE_GET_DATA 		_IOWR(EFUSE_IOC_MAGIC, 1, char *)

+

 typedef int (*T_USBCFG_UDISKFunc)(void);

 typedef int (*hotplug_parse_func)(const char *msg, int msglen, struct hotplug_event *event);

 typedef int (*hotplug_proc_func)(struct hotplug_event *event);

@@ -387,6 +400,7 @@
 int sd_event_proc(unsigned short sd_msg);

 int vsd_event_proc(unsigned short vsd_msg);

 void config_console_input(void);

+void usb_set_serialid_by_chipid(void);

 

 #if 0

 void sdcard_hotplug_init();

diff --git a/ap/app/zte_comm/zte_mainctrl/netdev_proc.c b/ap/app/zte_comm/zte_mainctrl/netdev_proc.c
index c970f06..36ec590 100755
--- a/ap/app/zte_comm/zte_mainctrl/netdev_proc.c
+++ b/ap/app/zte_comm/zte_mainctrl/netdev_proc.c
@@ -315,6 +315,37 @@
 	return 0;
 }
 
+static void set_br_addr6(int cid, int state)
+{
+	char br_name[16] = {0};
+	char br_addr6[IPV6ADDLEN_MAX] = {0};
+	char cmd[128] = {0};
+	
+	sc_cfg_get("lan_name", br_name, sizeof(br_name));
+	if(state){
+		char nv_pswan[16] = {0};
+		char ip6_prefix[IPV6ADDLEN_MAX] = {0};
+		netapi_eui64_t eui64 = {0};
+		
+		sc_cfg_get("pswan", nv_pswan, sizeof(nv_pswan));
+		snprintf(cmd, sizeof(cmd), "%s%d_ipv6_prefix_info", nv_pswan,cid);
+		sc_cfg_get(cmd, ip6_prefix, sizeof(ip6_prefix));
+		netapi_ether_to_eui64(br_name, &eui64);
+		snprintf(br_addr6, sizeof(br_addr6), "%s%x:%x:%x:%x/64", ip6_prefix,
+			eui64.e16[0], eui64.e16[1], eui64.e16[2], eui64.e16[3]);
+		sc_cfg_set("ap_br_addr6",br_addr6);
+		snprintf(cmd, sizeof(cmd), "ip -6 addr add %s dev %s", br_addr6, br_name);
+		slog(NET_PRINT, SLOG_ERR,"set_addr6=%s\n",cmd);
+		soft_system(cmd);
+	}else{
+		sc_cfg_get("ap_br_addr6", br_addr6, sizeof(br_addr6));
+		snprintf(cmd, sizeof(cmd), "ip -6 addr del %s dev %s", br_addr6, br_name);
+		slog(NET_PRINT, SLOG_ERR,"del_addr6=%s\n",cmd);
+		soft_system(cmd);
+	}
+}
+
+
 /*¼¤»îIPµÄ×îºóÒ»¸öÊý×ÖµÄ2½øÖƵĺó3λÊÇ010 001 000ʱ+2£¬·ñÔò-2*/
 FILE *pdp_direct_config_quick4(const char *nv_pswan, struct pdp_active_info *actinfo)
 {
@@ -1233,6 +1264,15 @@
 	}
 	//¶ÔÓÚÍâºË´¥·¢µÄPDP¼¤»î£¬½øÐÐÇŽӻò¼¶Áª
 	else if (actinfo->pdp_type == PDP_EXT) {
+#ifdef USE_CAP_SUPPORT
+		if(prefix_len > 0){
+			char cid[4] = {0};
+			
+			sc_cfg_get("cap_gw_cid", cid, sizeof(cid));
+			if(atoi(cid) == actinfo->c_id)
+				set_br_addr6(actinfo->c_id, 1);
+		}
+#endif
 		//cp¼¶Áª£¬apÇŽÓ
 		if(quick_flag[0] == '1' && (actinfo->act_info.ip46flag == V4_VALID || prefix_len > 0)){
 			pdp_direct_config_quick(actinfo, prefix, prefix_len);
@@ -1318,6 +1358,15 @@
 
 	//ÍâºËpdpÈ¥»î,È¥ÇÅÈ¥¼¶Áª
 	if (0 == strcmp("bridge", pdp_mode)) {
+#ifdef USE_CAP_SUPPORT
+		if(ip46flag == V6_VALID || ip46flag == V46_VALID){
+			char cid[4] = {0};
+			
+			sc_cfg_get("cap_gw_cid", cid, sizeof(cid));
+			if(atoi(cid) == c_id)
+				set_br_addr6(c_id, 0);
+		}
+#endif
 		if(quick_flag[0] == '1'){
 			net_br_deact_quick(c_id, ip46flag);
 		}else{
diff --git a/ap/app/zte_comm/zte_mmi/mmi_lcd_timer.c b/ap/app/zte_comm/zte_mmi/mmi_lcd_timer.c
index a25e482..8ef4ca4 100755
--- a/ap/app/zte_comm/zte_mmi/mmi_lcd_timer.c
+++ b/ap/app/zte_comm/zte_mmi/mmi_lcd_timer.c
@@ -124,12 +124,16 @@
 	sc_timer_delete(MMI_LCD_SMS_TIME);
 }
 
+extern pthread_mutex_t g_mmi_poweron_mutex;
 static VOID * mmi_lcd_battery_timer_callback(SINT32 task)
 {
 	//slog(MMI_PRINT,SLOG_DEBUG,"MMI mmi_lcd_battery_timer_callback!!!\n");
+	mmi_getMutex(&g_mmi_poweron_mutex);
 	if (!g_mmi_poweroff_turnon_flag) {
+		mmi_putMutex(&g_mmi_poweron_mutex);
 		mmi_set_update_flag((E_zMmi_Task)task);
-	}
+	}else
+		mmi_putMutex(&g_mmi_poweron_mutex);
 	g_mmi_lcd_battery_timer_state = FALSE;
 	return NULL;
 }
diff --git a/ap/app/zte_cpe/Makefile b/ap/app/zte_cpe/Makefile
index 55b1777..3a28a0c 100755
--- a/ap/app/zte_cpe/Makefile
+++ b/ap/app/zte_cpe/Makefile
@@ -195,7 +195,7 @@
 LDLIBS  += -lamt -L$(zte_lib_path)/libamt

 LDLIBS  += -lkey -L$(zte_lib_path)/libkey

 

-LDLIBS  += -lcurl -L$(zte_lib_path)/libcurl/install/lib

+#LDLIBS  += -lcurl -L$(zte_lib_path)/libcurl/install/lib

 

 ifneq ($(CONFIG_MMI_LCD),no)

 LDLIBS += -lzcore

diff --git a/ap/app/zte_mdl/Makefile b/ap/app/zte_mdl/Makefile
index 00654ef..67992a0 100755
--- a/ap/app/zte_mdl/Makefile
+++ b/ap/app/zte_mdl/Makefile
@@ -222,7 +222,7 @@
 LDLIBS  += -lamt -L$(zte_lib_path)/libamt

 LDLIBS  += -lkey -L$(zte_lib_path)/libkey

 

-LDLIBS  += -lcurl -L$(zte_lib_path)/libcurl/install/lib

+#LDLIBS  += -lcurl -L$(zte_lib_path)/libcurl/install/lib

 

 

 LDLIBS +=  -lztedmapp  -L$(zte_lib_path)/libzte_dmapp

diff --git a/ap/app/zte_mifi/Makefile b/ap/app/zte_mifi/Makefile
index 1d7011b..178dc82 100755
--- a/ap/app/zte_mifi/Makefile
+++ b/ap/app/zte_mifi/Makefile
@@ -222,7 +222,7 @@
 LDLIBS  += -lamt -L$(zte_lib_path)/libamt

 LDLIBS  += -lkey -L$(zte_lib_path)/libkey

 

-LDLIBS  += -lcurl -L$(zte_lib_path)/libcurl/install/lib

+#LDLIBS  += -lcurl -L$(zte_lib_path)/libcurl/install/lib

 

 ifneq ($(CONFIG_MMI_LCD),no)

 LDLIBS += -lzcore

diff --git a/ap/app/zte_ufi/Makefile b/ap/app/zte_ufi/Makefile
index f159123..1007e76 100755
--- a/ap/app/zte_ufi/Makefile
+++ b/ap/app/zte_ufi/Makefile
@@ -222,7 +222,7 @@
 LDLIBS  += -lamt -L$(zte_lib_path)/libamt

 #LDLIBS  += -lkey -L$(zte_lib_path)/libkey

 

-LDLIBS  += -lcurl -L$(zte_lib_path)/libcurl/install/lib

+#LDLIBS  += -lcurl -L$(zte_lib_path)/libcurl/install/lib

 

 ifneq ($(CONFIG_MMI_LCD),no)

 LDLIBS += -lzcore

diff --git a/ap/app/zte_webui/js/3rd/require-jquery.js b/ap/app/zte_webui/js/3rd/require-jquery.js
index 4167af3..0a9eacf 100755
--- a/ap/app/zte_webui/js/3rd/require-jquery.js
+++ b/ap/app/zte_webui/js/3rd/require-jquery.js
@@ -1,11441 +1,12578 @@
-/** vim: et:ts=4:sw=4:sts=4
- * @license RequireJS 2.0.2 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.
- * Available via the MIT or new BSD license.
- * see: http://github.com/jrburke/requirejs for details
- */
-/*jslint regexp: true, nomen: true */
-/*global window, navigator, document, importScripts, jQuery, setTimeout, opera */
-
-var requirejs, require, define;
-(function (global) {
-    'use strict';
-
-    var version = '0.0.0',
-        commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,
-        cjsRequireRegExp = /require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,
-        jsSuffixRegExp = /\.js$/,
-        currDirRegExp = /^\.\//,
-        ostring = Object.prototype.toString,
-        ap = Array.prototype,
-        aps = ap.slice,
-        apsp = ap.splice,
-        isBrowser = !!(typeof window !== 'undefined' && navigator && document),
-        isWebWorker = !isBrowser && typeof importScripts !== 'undefined',
-        //PS3 indicates loaded and complete, but need to wait for complete
-        //specifically. Sequence is 'loading', 'loaded', execution,
-        // then 'complete'. The UA check is unfortunate, but not sure how
-        //to feature test w/o causing perf issues.
-        readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ?
-                      /^complete$/ : /^(complete|loaded)$/,
-        defContextName = '_',
-        //Oh the tragedy, detecting opera. See the usage of isOpera for reason.
-        isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]',
-        contexts = {},
-        cfg = {},
-        globalDefQueue = [],
-        useInteractive = false,
-        req, s, head, baseElement, dataMain, src,
-        interactiveScript, currentlyAddingScript, mainScript, subPath;
-
-    function isFunction(it) {
-        return ostring.call(it) === '[object Function]';
-    }
-
-    function isArray(it) {
-        return ostring.call(it) === '[object Array]';
-    }
-
-    /**
-     * Helper function for iterating over an array. If the func returns
-     * a true value, it will break out of the loop.
-     */
-    function each(ary, func) {
-        if (ary) {
-            var i;
-            for (i = 0; i < ary.length; i += 1) {
-                if (ary[i] && func(ary[i], i, ary)) {
-                    break;
-                }
-            }
-        }
-    }
-
-    /**
-     * Helper function for iterating over an array backwards. If the func
-     * returns a true value, it will break out of the loop.
-     */
-    function eachReverse(ary, func) {
-        if (ary) {
-            var i;
-            for (i = ary.length - 1; i > -1; i -= 1) {
-                if (ary[i] && func(ary[i], i, ary)) {
-                    break;
-                }
-            }
-        }
-    }
-
-    function hasProp(obj, prop) {
-        return obj.hasOwnProperty(prop);
-    }
-
-    /**
-     * Cycles over properties in an object and calls a function for each
-     * property value. If the function returns a truthy value, then the
-     * iteration is stopped.
-     */
-    function eachProp(obj, func) {
-        var prop;
-        for (prop in obj) {
-            if (obj.hasOwnProperty(prop)) {
-                if (func(obj[prop], prop)) {
-                    break;
-                }
-            }
-        }
-    }
-
-    /**
-     * Simple function to mix in properties from source into target,
-     * but only if target does not already have a property of the same name.
-     * This is not robust in IE for transferring methods that match
-     * Object.prototype names, but the uses of mixin here seem unlikely to
-     * trigger a problem related to that.
-     */
-    function mixin(target, source, force, deepStringMixin) {
-        if (source) {
-            eachProp(source, function (value, prop) {
-                if (force || !hasProp(target, prop)) {
-                    if (deepStringMixin && typeof value !== 'string') {
-                        if (!target[prop]) {
-                            target[prop] = {};
-                        }
-                        mixin(target[prop], value, force, deepStringMixin);
-                    } else {
-                        target[prop] = value;
-                    }
-                }
-            });
-        }
-        return target;
-    }
-
-    //Similar to Function.prototype.bind, but the 'this' object is specified
-    //first, since it is easier to read/figure out what 'this' will be.
-    function bind(obj, fn) {
-        return function () {
-            return fn.apply(obj, arguments);
-        };
-    }
-
-    function scripts() {
-        return document.getElementsByTagName('script');
-    }
-
-    //Allow getting a global that expressed in
-    //dot notation, like 'a.b.c'.
-    function getGlobal(value) {
-        if (!value) {
-            return value;
-        }
-        var g = global;
-        each(value.split('.'), function (part) {
-            g = g[part];
-        });
-        return g;
-    }
-
-    function makeContextModuleFunc(func, relMap, enableBuildCallback) {
-        return function () {
-            //A version of a require function that passes a moduleName
-            //value for items that may need to
-            //look up paths relative to the moduleName
-            var args = aps.call(arguments, 0), lastArg;
-            if (enableBuildCallback &&
-                isFunction((lastArg = args[args.length - 1]))) {
-                lastArg.__requireJsBuild = true;
-            }
-            args.push(relMap);
-            return func.apply(null, args);
-        };
-    }
-
-    function addRequireMethods(req, context, relMap) {
-        each([
-            ['toUrl'],
-            ['undef'],
-            ['defined', 'requireDefined'],
-            ['specified', 'requireSpecified']
-        ], function (item) {
-            var prop = item[1] || item[0];
-            req[item[0]] = context ? makeContextModuleFunc(context[prop], relMap) :
-                //If no context, then use default context. Reference from
-                //contexts instead of early binding to default context, so
-                //that during builds, the latest instance of the default
-                //context with its config gets used.
-                function () {
-                    var ctx = contexts[defContextName];
-                    return ctx[prop].apply(ctx, arguments);
-                };
-        });
-    }
-
-    /**
-     * Constructs an error with a pointer to an URL with more information.
-     * @param {String} id the error ID that maps to an ID on a web page.
-     * @param {String} message human readable error.
-     * @param {Error} [err] the original error, if there is one.
-     *
-     * @returns {Error}
-     */
-    function makeError(id, msg, err, requireModules) {
-        var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id);
-        e.requireType = id;
-        e.requireModules = requireModules;
-        if (err) {
-            e.originalError = err;
-        }
-        return e;
-    }
-
-    if (typeof define !== 'undefined') {
-        //If a define is already in play via another AMD loader,
-        //do not overwrite.
-        return;
-    }
-
-    if (typeof requirejs !== 'undefined') {
-        if (isFunction(requirejs)) {
-            //Do not overwrite and existing requirejs instance.
-            return;
-        }
-        cfg = requirejs;
-        requirejs = undefined;
-    }
-
-    //Allow for a require config object
-    if (typeof require !== 'undefined' && !isFunction(require)) {
-        //assume it is a config object.
-        cfg = require;
-        require = undefined;
-    }
-
-    function newContext(contextName) {
-        var config = {
-                waitSeconds: 7,
-                baseUrl: './',
-                paths: {},
-                pkgs: {},
-                shim: {}
-            },
-            registry = {},
-            undefEvents = {},
-            defQueue = [],
-            defined = {},
-            urlFetched = {},
-            requireCounter = 1,
-            unnormalizedCounter = 1,
-            //Used to track the order in which modules
-            //should be executed, by the order they
-            //load. Important for consistent cycle resolution
-            //behavior.
-            waitAry = [],
-            inCheckLoaded, Module, context, handlers,
-            checkLoadedTimeoutId;
-
-        /**
-         * Trims the . and .. from an array of path segments.
-         * It will keep a leading path segment if a .. will become
-         * the first path segment, to help with module name lookups,
-         * which act like paths, but can be remapped. But the end result,
-         * all paths that use this function should look normalized.
-         * NOTE: this method MODIFIES the input array.
-         * @param {Array} ary the array of path segments.
-         */
-        function trimDots(ary) {
-            var i, part;
-            for (i = 0; ary[i]; i+= 1) {
-                part = ary[i];
-                if (part === '.') {
-                    ary.splice(i, 1);
-                    i -= 1;
-                } else if (part === '..') {
-                    if (i === 1 && (ary[2] === '..' || ary[0] === '..')) {
-                        //End of the line. Keep at least one non-dot
-                        //path segment at the front so it can be mapped
-                        //correctly to disk. Otherwise, there is likely
-                        //no path mapping for a path starting with '..'.
-                        //This can still fail, but catches the most reasonable
-                        //uses of ..
-                        break;
-                    } else if (i > 0) {
-                        ary.splice(i - 1, 2);
-                        i -= 2;
-                    }
-                }
-            }
-        }
-
-        /**
-         * Given a relative module name, like ./something, normalize it to
-         * a real name that can be mapped to a path.
-         * @param {String} name the relative name
-         * @param {String} baseName a real name that the name arg is relative
-         * to.
-         * @param {Boolean} applyMap apply the map config to the value. Should
-         * only be done if this normalization is for a dependency ID.
-         * @returns {String} normalized name
-         */
-        function normalize(name, baseName, applyMap) {
-            var baseParts = baseName && baseName.split('/'),
-                map = config.map,
-                starMap = map && map['*'],
-                pkgName, pkgConfig, mapValue, nameParts, i, j, nameSegment,
-                foundMap;
-
-            //Adjust any relative paths.
-            if (name && name.charAt(0) === '.') {
-                //If have a base name, try to normalize against it,
-                //otherwise, assume it is a top-level require that will
-                //be relative to baseUrl in the end.
-                if (baseName) {
-                    if (config.pkgs[baseName]) {
-                        //If the baseName is a package name, then just treat it as one
-                        //name to concat the name with.
-                        baseParts = [baseName];
-                    } else {
-                        //Convert baseName to array, and lop off the last part,
-                        //so that . matches that 'directory' and not name of the baseName's
-                        //module. For instance, baseName of 'one/two/three', maps to
-                        //'one/two/three.js', but we want the directory, 'one/two' for
-                        //this normalization.
-                        baseParts = baseParts.slice(0, baseParts.length - 1);
-                    }
-
-                    name = baseParts.concat(name.split('/'));
-                    trimDots(name);
-
-                    //Some use of packages may use a . path to reference the
-                    //'main' module name, so normalize for that.
-                    pkgConfig = config.pkgs[(pkgName = name[0])];
-                    name = name.join('/');
-                    if (pkgConfig && name === pkgName + '/' + pkgConfig.main) {
-                        name = pkgName;
-                    }
-                } else if (name.indexOf('./') === 0) {
-                    // No baseName, so this is ID is resolved relative
-                    // to baseUrl, pull off the leading dot.
-                    name = name.substring(2);
-                }
-            }
-
-            //Apply map config if available.
-            if (applyMap && (baseParts || starMap) && map) {
-                nameParts = name.split('/');
-
-                for (i = nameParts.length; i > 0; i -= 1) {
-                    nameSegment = nameParts.slice(0, i).join('/');
-
-                    if (baseParts) {
-                        //Find the longest baseName segment match in the config.
-                        //So, do joins on the biggest to smallest lengths of baseParts.
-                        for (j = baseParts.length; j > 0; j -= 1) {
-                            mapValue = map[baseParts.slice(0, j).join('/')];
-
-                            //baseName segment has  config, find if it has one for
-                            //this name.
-                            if (mapValue) {
-                                mapValue = mapValue[nameSegment];
-                                if (mapValue) {
-                                    //Match, update name to the new value.
-                                    foundMap = mapValue;
-                                    break;
-                                }
-                            }
-                        }
-                    }
-
-                    if (!foundMap && starMap && starMap[nameSegment]) {
-                        foundMap = starMap[nameSegment];
-                    }
-
-                    if (foundMap) {
-                        nameParts.splice(0, i, foundMap);
-                        name = nameParts.join('/');
-                        break;
-                    }
-                }
-            }
-
-            return name;
-        }
-
-        function removeScript(name) {
-            if (isBrowser) {
-                each(scripts(), function (scriptNode) {
-                    if (scriptNode.getAttribute('data-requiremodule') === name &&
-                        scriptNode.getAttribute('data-requirecontext') === context.contextName) {
-                        scriptNode.parentNode.removeChild(scriptNode);
-                        return true;
-                    }
-                });
-            }
-        }
-
-        function hasPathFallback(id) {
-            var pathConfig = config.paths[id];
-            if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) {
-                removeScript(id);
-                //Pop off the first array value, since it failed, and
-                //retry
-                pathConfig.shift();
-                context.undef(id);
-                context.require([id]);
-                return true;
-            }
-        }
-
-        /**
-         * Creates a module mapping that includes plugin prefix, module
-         * name, and path. If parentModuleMap is provided it will
-         * also normalize the name via require.normalize()
-         *
-         * @param {String} name the module name
-         * @param {String} [parentModuleMap] parent module map
-         * for the module name, used to resolve relative names.
-         * @param {Boolean} isNormalized: is the ID already normalized.
-         * This is true if this call is done for a define() module ID.
-         * @param {Boolean} applyMap: apply the map config to the ID.
-         * Should only be true if this map is for a dependency.
-         *
-         * @returns {Object}
-         */
-        function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) {
-            var index = name ? name.indexOf('!') : -1,
-                prefix = null,
-                parentName = parentModuleMap ? parentModuleMap.name : null,
-                originalName = name,
-                isDefine = true,
-                normalizedName = '',
-                url, pluginModule, suffix;
-
-            //If no name, then it means it is a require call, generate an
-            //internal name.
-            if (!name) {
-                isDefine = false;
-                name = '_@r' + (requireCounter += 1);
-            }
-
-            if (index !== -1) {
-                prefix = name.substring(0, index);
-                name = name.substring(index + 1, name.length);
-            }
-
-            if (prefix) {
-                prefix = normalize(prefix, parentName, applyMap);
-                pluginModule = defined[prefix];
-            }
-
-            //Account for relative paths if there is a base name.
-            if (name) {
-                if (prefix) {
-                    if (pluginModule && pluginModule.normalize) {
-                        //Plugin is loaded, use its normalize method.
-                        normalizedName = pluginModule.normalize(name, function (name) {
-                            return normalize(name, parentName, applyMap);
-                        });
-                    } else {
-                        normalizedName = normalize(name, parentName, applyMap);
-                    }
-                } else {
-                    //A regular module.
-                    normalizedName = normalize(name, parentName, applyMap);
-
-                    //Calculate url for the module, if it has a name.
-                    //Use name here since nameToUrl also calls normalize,
-                    //and for relative names that are outside the baseUrl
-                    //this causes havoc. Was thinking of just removing
-                    //parentModuleMap to avoid extra normalization, but
-                    //normalize() still does a dot removal because of
-                    //issue #142, so just pass in name here and redo
-                    //the normalization. Paths outside baseUrl are just
-                    //messy to support.
-                    url = context.nameToUrl(name, null, parentModuleMap);
-                }
-            }
-
-            //If the id is a plugin id that cannot be determined if it needs
-            //normalization, stamp it with a unique ID so two matching relative
-            //ids that may conflict can be separate.
-            suffix = prefix && !pluginModule && !isNormalized ?
-                     '_unnormalized' + (unnormalizedCounter += 1) :
-                     '';
-
-            return {
-                prefix: prefix,
-                name: normalizedName,
-                parentMap: parentModuleMap,
-                unnormalized: !!suffix,
-                url: url,
-                originalName: originalName,
-                isDefine: isDefine,
-                id: (prefix ?
-                    prefix + '!' + normalizedName :
-                    normalizedName) + suffix
-            };
-        }
-
-        function getModule(depMap) {
-            var id = depMap.id,
-                mod = registry[id];
-
-            if (!mod) {
-                mod = registry[id] = new context.Module(depMap);
-            }
-
-            return mod;
-        }
-
-        function on(depMap, name, fn) {
-            var id = depMap.id,
-                mod = registry[id];
-
-            if (hasProp(defined, id) &&
-                (!mod || mod.defineEmitComplete)) {
-                if (name === 'defined') {
-                    fn(defined[id]);
-                }
-            } else {
-                getModule(depMap).on(name, fn);
-            }
-        }
-
-        function onError(err, errback) {
-            var ids = err.requireModules,
-                notified = false;
-
-            if (errback) {
-                errback(err);
-            } else {
-                each(ids, function (id) {
-                    var mod = registry[id];
-                    if (mod) {
-                        //Set error on module, so it skips timeout checks.
-                        mod.error = err;
-                        if (mod.events.error) {
-                            notified = true;
-                            mod.emit('error', err);
-                        }
-                    }
-                });
-
-                if (!notified) {
-                    req.onError(err);
-                }
-            }
-        }
-
-        /**
-         * Internal method to transfer globalQueue items to this context's
-         * defQueue.
-         */
-        function takeGlobalQueue() {
-            //Push all the globalDefQueue items into the context's defQueue
-            if (globalDefQueue.length) {
-                //Array splice in the values since the context code has a
-                //local var ref to defQueue, so cannot just reassign the one
-                //on context.
-                apsp.apply(defQueue,
-                           [defQueue.length - 1, 0].concat(globalDefQueue));
-                globalDefQueue = [];
-            }
-        }
-
-        /**
-         * Helper function that creates a require function object to give to
-         * modules that ask for it as a dependency. It needs to be specific
-         * per module because of the implication of path mappings that may
-         * need to be relative to the module name.
-         */
-        function makeRequire(mod, enableBuildCallback, altRequire) {
-            var relMap = mod && mod.map,
-                modRequire = makeContextModuleFunc(altRequire || context.require,
-                                                   relMap,
-                                                   enableBuildCallback);
-
-            addRequireMethods(modRequire, context, relMap);
-            modRequire.isBrowser = isBrowser;
-
-            return modRequire;
-        }
-
-        handlers = {
-            'require': function (mod) {
-                return makeRequire(mod);
-            },
-            'exports': function (mod) {
-                mod.usingExports = true;
-                if (mod.map.isDefine) {
-                    return (mod.exports = defined[mod.map.id] = {});
-                }
-            },
-            'module': function (mod) {
-                return (mod.module = {
-                    id: mod.map.id,
-                    uri: mod.map.url,
-                    config: function () {
-                        return (config.config && config.config[mod.map.id]) || {};
-                    },
-                    exports: defined[mod.map.id]
-                });
-            }
-        };
-
-        function removeWaiting(id) {
-            //Clean up machinery used for waiting modules.
-            delete registry[id];
-
-            each(waitAry, function (mod, i) {
-                if (mod.map.id === id) {
-                    waitAry.splice(i, 1);
-                    if (!mod.defined) {
-                        context.waitCount -= 1;
-                    }
-                    return true;
-                }
-            });
-        }
-
-        function findCycle(mod, traced) {
-            var id = mod.map.id,
-                depArray = mod.depMaps,
-                foundModule;
-
-            //Do not bother with unitialized modules or not yet enabled
-            //modules.
-            if (!mod.inited) {
-                return;
-            }
-
-            //Found the cycle.
-            if (traced[id]) {
-                return mod;
-            }
-
-            traced[id] = true;
-
-            //Trace through the dependencies.
-            each(depArray, function (depMap) {
-                var depId = depMap.id,
-                    depMod = registry[depId];
-
-                if (!depMod) {
-                    return;
-                }
-
-                if (!depMod.inited || !depMod.enabled) {
-                    //Dependency is not inited, so this cannot
-                    //be used to determine a cycle.
-                    foundModule = null;
-                    delete traced[id];
-                    return true;
-                }
-
-                //mixin traced to a new object for each dependency, so that
-                //sibling dependencies in this object to not generate a
-                //false positive match on a cycle. Ideally an Object.create
-                //type of prototype delegation would be used here, but
-                //optimizing for file size vs. execution speed since hopefully
-                //the trees are small for circular dependency scans relative
-                //to the full app perf.
-                return (foundModule = findCycle(depMod, mixin({}, traced)));
-            });
-
-            return foundModule;
-        }
-
-        function forceExec(mod, traced, uninited) {
-            var id = mod.map.id,
-                depArray = mod.depMaps;
-
-            if (!mod.inited || !mod.map.isDefine) {
-                return;
-            }
-
-            if (traced[id]) {
-                return defined[id];
-            }
-
-            traced[id] = mod;
-
-            each(depArray, function(depMap) {
-                var depId = depMap.id,
-                    depMod = registry[depId],
-                    value;
-
-                if (handlers[depId]) {
-                    return;
-                }
-
-                if (depMod) {
-                    if (!depMod.inited || !depMod.enabled) {
-                        //Dependency is not inited,
-                        //so this module cannot be
-                        //given a forced value yet.
-                        uninited[id] = true;
-                        return;
-                    }
-
-                    //Get the value for the current dependency
-                    value = forceExec(depMod, traced, uninited);
-
-                    //Even with forcing it may not be done,
-                    //in particular if the module is waiting
-                    //on a plugin resource.
-                    if (!uninited[depId]) {
-                        mod.defineDepById(depId, value);
-                    }
-                }
-            });
-
-            mod.check(true);
-
-            return defined[id];
-        }
-
-        function modCheck(mod) {
-            mod.check();
-        }
-
-        function checkLoaded() {
-            var waitInterval = config.waitSeconds * 1000,
-                //It is possible to disable the wait interval by using waitSeconds of 0.
-                expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(),
-                noLoads = [],
-                stillLoading = false,
-                needCycleCheck = true,
-                map, modId, err, usingPathFallback;
-
-            //Do not bother if this call was a result of a cycle break.
-            if (inCheckLoaded) {
-                return;
-            }
-
-            inCheckLoaded = true;
-
-            //Figure out the state of all the modules.
-            eachProp(registry, function (mod) {
-                map = mod.map;
-                modId = map.id;
-
-                //Skip things that are not enabled or in error state.
-                if (!mod.enabled) {
-                    return;
-                }
-
-                if (!mod.error) {
-                    //If the module should be executed, and it has not
-                    //been inited and time is up, remember it.
-                    if (!mod.inited && expired) {
-                        if (hasPathFallback(modId)) {
-                            usingPathFallback = true;
-                            stillLoading = true;
-                        } else {
-                            noLoads.push(modId);
-                            removeScript(modId);
-                        }
-                    } else if (!mod.inited && mod.fetched && map.isDefine) {
-                        stillLoading = true;
-                        if (!map.prefix) {
-                            //No reason to keep looking for unfinished
-                            //loading. If the only stillLoading is a
-                            //plugin resource though, keep going,
-                            //because it may be that a plugin resource
-                            //is waiting on a non-plugin cycle.
-                            return (needCycleCheck = false);
-                        }
-                    }
-                }
-            });
-
-            if (expired && noLoads.length) {
-                //If wait time expired, throw error of unloaded modules.
-                err = makeError('timeout', 'Load timeout for modules: ' + noLoads, null, noLoads);
-                err.contextName = context.contextName;
-                return onError(err);
-            }
-
-            //Not expired, check for a cycle.
-            if (needCycleCheck) {
-
-                each(waitAry, function (mod) {
-                    if (mod.defined) {
-                        return;
-                    }
-
-                    var cycleMod = findCycle(mod, {}),
-                        traced = {};
-
-                    if (cycleMod) {
-                        forceExec(cycleMod, traced, {});
-
-                        //traced modules may have been
-                        //removed from the registry, but
-                        //their listeners still need to
-                        //be called.
-                        eachProp(traced, modCheck);
-                    }
-                });
-
-                //Now that dependencies have
-                //been satisfied, trigger the
-                //completion check that then
-                //notifies listeners.
-                eachProp(registry, modCheck);
-            }
-
-            //If still waiting on loads, and the waiting load is something
-            //other than a plugin resource, or there are still outstanding
-            //scripts, then just try back later.
-            if ((!expired || usingPathFallback) && stillLoading) {
-                //Something is still waiting to load. Wait for it, but only
-                //if a timeout is not already in effect.
-                if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) {
-                    checkLoadedTimeoutId = setTimeout(function () {
-                        checkLoadedTimeoutId = 0;
-                        checkLoaded();
-                    }, 50);
-                }
-            }
-
-            inCheckLoaded = false;
-        }
-
-        Module = function (map) {
-            this.events = undefEvents[map.id] || {};
-            this.map = map;
-            this.shim = config.shim[map.id];
-            this.depExports = [];
-            this.depMaps = [];
-            this.depMatched = [];
-            this.pluginMaps = {};
-            this.depCount = 0;
-
-            /* this.exports this.factory
-               this.depMaps = [],
-               this.enabled, this.fetched
-            */
-        };
-
-        Module.prototype = {
-            init: function(depMaps, factory, errback, options) {
-                options = options || {};
-
-                //Do not do more inits if already done. Can happen if there
-                //are multiple define calls for the same module. That is not
-                //a normal, common case, but it is also not unexpected.
-                if (this.inited) {
-                    return;
-                }
-
-                this.factory = factory;
-
-                if (errback) {
-                    //Register for errors on this module.
-                    this.on('error', errback);
-                } else if (this.events.error) {
-                    //If no errback already, but there are error listeners
-                    //on this module, set up an errback to pass to the deps.
-                    errback = bind(this, function (err) {
-                        this.emit('error', err);
-                    });
-                }
-
-                //Do a copy of the dependency array, so that
-                //source inputs are not modified. For example
-                //"shim" deps are passed in here directly, and
-                //doing a direct modification of the depMaps array
-                //would affect that config.
-                this.depMaps = depMaps && depMaps.slice(0);
-                this.depMaps.rjsSkipMap = depMaps.rjsSkipMap;
-
-                this.errback = errback;
-
-                //Indicate this module has be initialized
-                this.inited = true;
-
-                this.ignore = options.ignore;
-
-                //Could have option to init this module in enabled mode,
-                //or could have been previously marked as enabled. However,
-                //the dependencies are not known until init is called. So
-                //if enabled previously, now trigger dependencies as enabled.
-                if (options.enabled || this.enabled) {
-                    //Enable this module and dependencies.
-                    //Will call this.check()
-                    this.enable();
-                } else {
-                    this.check();
-                }
-            },
-
-            defineDepById: function (id, depExports) {
-                var i;
-
-                //Find the index for this dependency.
-                each(this.depMaps, function (map, index) {
-                    if (map.id === id) {
-                        i = index;
-                        return true;
-                    }
-                });
-
-                return this.defineDep(i, depExports);
-            },
-
-            defineDep: function (i, depExports) {
-                //Because of cycles, defined callback for a given
-                //export can be called more than once.
-                if (!this.depMatched[i]) {
-                    this.depMatched[i] = true;
-                    this.depCount -= 1;
-                    this.depExports[i] = depExports;
-                }
-            },
-
-            fetch: function () {
-                if (this.fetched) {
-                    return;
-                }
-                this.fetched = true;
-
-                context.startTime = (new Date()).getTime();
-
-                var map = this.map;
-
-                //If the manager is for a plugin managed resource,
-                //ask the plugin to load it now.
-                if (this.shim) {
-                    makeRequire(this, true)(this.shim.deps || [], bind(this, function () {
-                        return map.prefix ? this.callPlugin() : this.load();
-                    }));
-                } else {
-                    //Regular dependency.
-                    return map.prefix ? this.callPlugin() : this.load();
-                }
-            },
-
-            load: function() {
-                var url = this.map.url;
-
-                //Regular dependency.
-                if (!urlFetched[url]) {
-                    urlFetched[url] = true;
-                    context.load(this.map.id, url);
-                }
-            },
-
-            /**
-             * Checks is the module is ready to define itself, and if so,
-             * define it. If the silent argument is true, then it will just
-             * define, but not notify listeners, and not ask for a context-wide
-             * check of all loaded modules. That is useful for cycle breaking.
-             */
-            check: function (silent) {
-                if (!this.enabled || this.enabling) {
-                    return;
-                }
-
-                var id = this.map.id,
-                    depExports = this.depExports,
-                    exports = this.exports,
-                    factory = this.factory,
-                    err, cjsModule;
-
-                if (!this.inited) {
-                    this.fetch();
-                } else if (this.error) {
-                    this.emit('error', this.error);
-                } else if (!this.defining) {
-                    //The factory could trigger another require call
-                    //that would result in checking this module to
-                    //define itself again. If already in the process
-                    //of doing that, skip this work.
-                    this.defining = true;
-
-                    if (this.depCount < 1 && !this.defined) {
-                        if (isFunction(factory)) {
-                            //If there is an error listener, favor passing
-                            //to that instead of throwing an error.
-                            if (this.events.error) {
-                                try {
-                                    exports = context.execCb(id, factory, depExports, exports);
-                                } catch (e) {
-                                    err = e;
-                                }
-                            } else {
-                                exports = context.execCb(id, factory, depExports, exports);
-                            }
-
-                            if (this.map.isDefine) {
-                                //If setting exports via 'module' is in play,
-                                //favor that over return value and exports. After that,
-                                //favor a non-undefined return value over exports use.
-                                cjsModule = this.module;
-                                if (cjsModule &&
-                                    cjsModule.exports !== undefined &&
-                                    //Make sure it is not already the exports value
-                                    cjsModule.exports !== this.exports) {
-                                    exports = cjsModule.exports;
-                                } else if (exports === undefined && this.usingExports) {
-                                    //exports already set the defined value.
-                                    exports = this.exports;
-                                }
-                            }
-
-                            if (err) {
-                                err.requireMap = this.map;
-                                err.requireModules = [this.map.id];
-                                err.requireType = 'define';
-                                return onError((this.error = err));
-                            }
-
-                        } else {
-                            //Just a literal value
-                            exports = factory;
-                        }
-
-                        this.exports = exports;
-
-                        if (this.map.isDefine && !this.ignore) {
-                            defined[id] = exports;
-
-                            if (req.onResourceLoad) {
-                                req.onResourceLoad(context, this.map, this.depMaps);
-                            }
-                        }
-
-                        //Clean up
-                        delete registry[id];
-
-                        this.defined = true;
-                        context.waitCount -= 1;
-                        if (context.waitCount === 0) {
-                            //Clear the wait array used for cycles.
-                            waitAry = [];
-                        }
-                    }
-
-                    //Finished the define stage. Allow calling check again
-                    //to allow define notifications below in the case of a
-                    //cycle.
-                    this.defining = false;
-
-                    if (!silent) {
-                        if (this.defined && !this.defineEmitted) {
-                            this.defineEmitted = true;
-                            this.emit('defined', this.exports);
-                            this.defineEmitComplete = true;
-                        }
-                    }
-                }
-            },
-
-            callPlugin: function() {
-                var map = this.map,
-                    id = map.id,
-                    pluginMap = makeModuleMap(map.prefix, null, false, true);
-
-                on(pluginMap, 'defined', bind(this, function (plugin) {
-                    var name = this.map.name,
-                        parentName = this.map.parentMap ? this.map.parentMap.name : null,
-                        load, normalizedMap, normalizedMod;
-
-                    //If current map is not normalized, wait for that
-                    //normalized name to load instead of continuing.
-                    if (this.map.unnormalized) {
-                        //Normalize the ID if the plugin allows it.
-                        if (plugin.normalize) {
-                            name = plugin.normalize(name, function (name) {
-                                return normalize(name, parentName, true);
-                            }) || '';
-                        }
-
-                        normalizedMap = makeModuleMap(map.prefix + '!' + name,
-                                                      this.map.parentMap,
-                                                      false,
-                                                      true);
-                        on(normalizedMap,
-                           'defined', bind(this, function (value) {
-                            this.init([], function () { return value; }, null, {
-                                enabled: true,
-                                ignore: true
-                            });
-                        }));
-                        normalizedMod = registry[normalizedMap.id];
-                        if (normalizedMod) {
-                            if (this.events.error) {
-                                normalizedMod.on('error', bind(this, function (err) {
-                                    this.emit('error', err);
-                                }));
-                            }
-                            normalizedMod.enable();
-                        }
-
-                        return;
-                    }
-
-                    load = bind(this, function (value) {
-                        this.init([], function () { return value; }, null, {
-                            enabled: true
-                        });
-                    });
-
-                    load.error = bind(this, function (err) {
-                        this.inited = true;
-                        this.error = err;
-                        err.requireModules = [id];
-
-                        //Remove temp unnormalized modules for this module,
-                        //since they will never be resolved otherwise now.
-                        eachProp(registry, function (mod) {
-                            if (mod.map.id.indexOf(id + '_unnormalized') === 0) {
-                                removeWaiting(mod.map.id);
-                            }
-                        });
-
-                        onError(err);
-                    });
-
-                    //Allow plugins to load other code without having to know the
-                    //context or how to 'complete' the load.
-                    load.fromText = function (moduleName, text) {
-                        /*jslint evil: true */
-                        var hasInteractive = useInteractive;
-
-                        //Turn off interactive script matching for IE for any define
-                        //calls in the text, then turn it back on at the end.
-                        if (hasInteractive) {
-                            useInteractive = false;
-                        }
-
-                        //Prime the system by creating a module instance for
-                        //it.
-                        getModule(makeModuleMap(moduleName));
-
-                        req.exec(text);
-
-                        if (hasInteractive) {
-                            useInteractive = true;
-                        }
-
-                        //Support anonymous modules.
-                        context.completeLoad(moduleName);
-                    };
-
-                    //Use parentName here since the plugin's name is not reliable,
-                    //could be some weird string with no path that actually wants to
-                    //reference the parentName's path.
-                    plugin.load(map.name, makeRequire(map.parentMap, true, function (deps, cb) {
-                        deps.rjsSkipMap = true;
-                        return context.require(deps, cb);
-                    }), load, config);
-                }));
-
-                context.enable(pluginMap, this);
-                this.pluginMaps[pluginMap.id] = pluginMap;
-            },
-
-            enable: function () {
-                this.enabled = true;
-
-                if (!this.waitPushed) {
-                    waitAry.push(this);
-                    context.waitCount += 1;
-                    this.waitPushed = true;
-                }
-
-                //Set flag mentioning that the module is enabling,
-                //so that immediate calls to the defined callbacks
-                //for dependencies do not trigger inadvertent load
-                //with the depCount still being zero.
-                this.enabling = true;
-
-                //Enable each dependency
-                each(this.depMaps, bind(this, function (depMap, i) {
-                    var id, mod, handler;
-
-                    if (typeof depMap === 'string') {
-                        //Dependency needs to be converted to a depMap
-                        //and wired up to this module.
-                        depMap = makeModuleMap(depMap,
-                                               (this.map.isDefine ? this.map : this.map.parentMap),
-                                               false,
-                                               !this.depMaps.rjsSkipMap);
-                        this.depMaps[i] = depMap;
-
-                        handler = handlers[depMap.id];
-
-                        if (handler) {
-                            this.depExports[i] = handler(this);
-                            return;
-                        }
-
-                        this.depCount += 1;
-
-                        on(depMap, 'defined', bind(this, function (depExports) {
-                            this.defineDep(i, depExports);
-                            this.check();
-                        }));
-
-                        if (this.errback) {
-                            on(depMap, 'error', this.errback);
-                        }
-                    }
-
-                    id = depMap.id;
-                    mod = registry[id];
-
-                    //Skip special modules like 'require', 'exports', 'module'
-                    //Also, don't call enable if it is already enabled,
-                    //important in circular dependency cases.
-                    if (!handlers[id] && mod && !mod.enabled) {
-                        context.enable(depMap, this);
-                    }
-                }));
-
-                //Enable each plugin that is used in
-                //a dependency
-                eachProp(this.pluginMaps, bind(this, function (pluginMap) {
-                    var mod = registry[pluginMap.id];
-                    if (mod && !mod.enabled) {
-                        context.enable(pluginMap, this);
-                    }
-                }));
-
-                this.enabling = false;
-
-                this.check();
-            },
-
-            on: function(name, cb) {
-                var cbs = this.events[name];
-                if (!cbs) {
-                    cbs = this.events[name] = [];
-                }
-                cbs.push(cb);
-            },
-
-            emit: function (name, evt) {
-                each(this.events[name], function (cb) {
-                    cb(evt);
-                });
-                if (name === 'error') {
-                    //Now that the error handler was triggered, remove
-                    //the listeners, since this broken Module instance
-                    //can stay around for a while in the registry/waitAry.
-                    delete this.events[name];
-                }
-            }
-        };
-
-        function callGetModule(args) {
-            getModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]);
-        }
-
-        function removeListener(node, func, name, ieName) {
-            //Favor detachEvent because of IE9
-            //issue, see attachEvent/addEventListener comment elsewhere
-            //in this file.
-            if (node.detachEvent && !isOpera) {
-                //Probably IE. If not it will throw an error, which will be
-                //useful to know.
-                if (ieName) {
-                    node.detachEvent(ieName, func);
-                }
-            } else {
-                node.removeEventListener(name, func, false);
-            }
-        }
-
-        /**
-         * Given an event from a script node, get the requirejs info from it,
-         * and then removes the event listeners on the node.
-         * @param {Event} evt
-         * @returns {Object}
-         */
-        function getScriptData(evt) {
-            //Using currentTarget instead of target for Firefox 2.0's sake. Not
-            //all old browsers will be supported, but this one was easy enough
-            //to support and still makes sense.
-            var node = evt.currentTarget || evt.srcElement;
-
-            //Remove the listeners once here.
-            removeListener(node, context.onScriptLoad, 'load', 'onreadystatechange');
-            removeListener(node, context.onScriptError, 'error');
-
-            return {
-                node: node,
-                id: node && node.getAttribute('data-requiremodule')
-            };
-        }
-
-        return (context = {
-            config: config,
-            contextName: contextName,
-            registry: registry,
-            defined: defined,
-            urlFetched: urlFetched,
-            waitCount: 0,
-            defQueue: defQueue,
-            Module: Module,
-            makeModuleMap: makeModuleMap,
-
-            /**
-             * Set a configuration for the context.
-             * @param {Object} cfg config object to integrate.
-             */
-            configure: function (cfg) {
-                //Make sure the baseUrl ends in a slash.
-                if (cfg.baseUrl) {
-                    if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== '/') {
-                        cfg.baseUrl += '/';
-                    }
-                }
-
-                //Save off the paths and packages since they require special processing,
-                //they are additive.
-                var pkgs = config.pkgs,
-                    shim = config.shim,
-                    paths = config.paths,
-                    map = config.map;
-
-                //Mix in the config values, favoring the new values over
-                //existing ones in context.config.
-                mixin(config, cfg, true);
-
-                //Merge paths.
-                config.paths = mixin(paths, cfg.paths, true);
-
-                //Merge map
-                if (cfg.map) {
-                    config.map = mixin(map || {}, cfg.map, true, true);
-                }
-
-                //Merge shim
-                if (cfg.shim) {
-                    eachProp(cfg.shim, function (value, id) {
-                        //Normalize the structure
-                        if (isArray(value)) {
-                            value = {
-                                deps: value
-                            };
-                        }
-                        if (value.exports && !value.exports.__buildReady) {
-                            value.exports = context.makeShimExports(value.exports);
-                        }
-                        shim[id] = value;
-                    });
-                    config.shim = shim;
-                }
-
-                //Adjust packages if necessary.
-                if (cfg.packages) {
-                    each(cfg.packages, function (pkgObj) {
-                        var location;
-
-                        pkgObj = typeof pkgObj === 'string' ? { name: pkgObj } : pkgObj;
-                        location = pkgObj.location;
-
-                        //Create a brand new object on pkgs, since currentPackages can
-                        //be passed in again, and config.pkgs is the internal transformed
-                        //state for all package configs.
-                        pkgs[pkgObj.name] = {
-                            name: pkgObj.name,
-                            location: location || pkgObj.name,
-                            //Remove leading dot in main, so main paths are normalized,
-                            //and remove any trailing .js, since different package
-                            //envs have different conventions: some use a module name,
-                            //some use a file name.
-                            main: (pkgObj.main || 'main')
-                                  .replace(currDirRegExp, '')
-                                  .replace(jsSuffixRegExp, '')
-                        };
-                    });
-
-                    //Done with modifications, assing packages back to context config
-                    config.pkgs = pkgs;
-                }
-
-                //If there are any "waiting to execute" modules in the registry,
-                //update the maps for them, since their info, like URLs to load,
-                //may have changed.
-                eachProp(registry, function (mod, id) {
-                    mod.map = makeModuleMap(id);
-                });
-
-                //If a deps array or a config callback is specified, then call
-                //require with those args. This is useful when require is defined as a
-                //config object before require.js is loaded.
-                if (cfg.deps || cfg.callback) {
-                    context.require(cfg.deps || [], cfg.callback);
-                }
-            },
-
-            makeShimExports: function (exports) {
-                var func;
-                if (typeof exports === 'string') {
-                    func = function () {
-                        return getGlobal(exports);
-                    };
-                    //Save the exports for use in nodefine checking.
-                    func.exports = exports;
-                    return func;
-                } else {
-                    return function () {
-                        return exports.apply(global, arguments);
-                    };
-                }
-            },
-
-            requireDefined: function (id, relMap) {
-                return hasProp(defined, makeModuleMap(id, relMap, false, true).id);
-            },
-
-            requireSpecified: function (id, relMap) {
-                id = makeModuleMap(id, relMap, false, true).id;
-                return hasProp(defined, id) || hasProp(registry, id);
-            },
-
-            require: function (deps, callback, errback, relMap) {
-                var moduleName, id, map, requireMod, args;
-                if (typeof deps === 'string') {
-                    if (isFunction(callback)) {
-                        //Invalid call
-                        return onError(makeError('requireargs', 'Invalid require call'), errback);
-                    }
-
-                    //Synchronous access to one module. If require.get is
-                    //available (as in the Node adapter), prefer that.
-                    //In this case deps is the moduleName and callback is
-                    //the relMap
-                    if (req.get) {
-                        return req.get(context, deps, callback);
-                    }
-
-                    //Just return the module wanted. In this scenario, the
-                    //second arg (if passed) is just the relMap.
-                    moduleName = deps;
-                    relMap = callback;
-
-                    //Normalize module name, if it contains . or ..
-                    map = makeModuleMap(moduleName, relMap, false, true);
-                    id = map.id;
-
-                    if (!hasProp(defined, id)) {
-                        return onError(makeError('notloaded', 'Module name "' +
-                                    id +
-                                    '" has not been loaded yet for context: ' +
-                                    contextName));
-                    }
-                    return defined[id];
-                }
-
-                //Callback require. Normalize args. if callback or errback is
-                //not a function, it means it is a relMap. Test errback first.
-                if (errback && !isFunction(errback)) {
-                    relMap = errback;
-                    errback = undefined;
-                }
-                if (callback && !isFunction(callback)) {
-                    relMap = callback;
-                    callback = undefined;
-                }
-
-                //Any defined modules in the global queue, intake them now.
-                takeGlobalQueue();
-
-                //Make sure any remaining defQueue items get properly processed.
-                while (defQueue.length) {
-                    args = defQueue.shift();
-                    if (args[0] === null) {
-                        return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1]));
-                    } else {
-                        //args are id, deps, factory. Should be normalized by the
-                        //define() function.
-                        callGetModule(args);
-                    }
-                }
-
-                //Mark all the dependencies as needing to be loaded.
-                requireMod = getModule(makeModuleMap(null, relMap));
-
-                requireMod.init(deps, callback, errback, {
-                    enabled: true
-                });
-
-                checkLoaded();
-
-                return context.require;
-            },
-
-            undef: function (id) {
-                var map = makeModuleMap(id, null, true),
-                    mod = registry[id];
-
-                delete defined[id];
-                delete urlFetched[map.url];
-                delete undefEvents[id];
-
-                if (mod) {
-                    //Hold on to listeners in case the
-                    //module will be attempted to be reloaded
-                    //using a different config.
-                    if (mod.events.defined) {
-                        undefEvents[id] = mod.events;
-                    }
-
-                    removeWaiting(id);
-                }
-            },
-
-            /**
-             * Called to enable a module if it is still in the registry
-             * awaiting enablement. parent module is passed in for context,
-             * used by the optimizer.
-             */
-            enable: function (depMap, parent) {
-                var mod = registry[depMap.id];
-                if (mod) {
-                    getModule(depMap).enable();
-                }
-            },
-
-            /**
-             * Internal method used by environment adapters to complete a load event.
-             * A load event could be a script load or just a load pass from a synchronous
-             * load call.
-             * @param {String} moduleName the name of the module to potentially complete.
-             */
-            completeLoad: function (moduleName) {
-                var shim = config.shim[moduleName] || {},
-                shExports = shim.exports && shim.exports.exports,
-                found, args, mod;
-
-                takeGlobalQueue();
-
-                while (defQueue.length) {
-                    args = defQueue.shift();
-                    if (args[0] === null) {
-                        args[0] = moduleName;
-                        //If already found an anonymous module and bound it
-                        //to this name, then this is some other anon module
-                        //waiting for its completeLoad to fire.
-                        if (found) {
-                            break;
-                        }
-                        found = true;
-                    } else if (args[0] === moduleName) {
-                        //Found matching define call for this script!
-                        found = true;
-                    }
-
-                    callGetModule(args);
-                }
-
-                //Do this after the cycle of callGetModule in case the result
-                //of those calls/init calls changes the registry.
-                mod = registry[moduleName];
-
-                if (!found &&
-                    !defined[moduleName] &&
-                    mod && !mod.inited) {
-                    if (config.enforceDefine && (!shExports || !getGlobal(shExports))) {
-                        if (hasPathFallback(moduleName)) {
-                            return;
-                        } else {
-                            return onError(makeError('nodefine',
-                                             'No define call for ' + moduleName,
-                                             null,
-                                             [moduleName]));
-                        }
-                    } else {
-                        //A script that does not call define(), so just simulate
-                        //the call for it.
-                        callGetModule([moduleName, (shim.deps || []), shim.exports]);
-                    }
-                }
-
-                checkLoaded();
-            },
-
-            /**
-             * Converts a module name + .extension into an URL path.
-             * *Requires* the use of a module name. It does not support using
-             * plain URLs like nameToUrl.
-             */
-            toUrl: function (moduleNamePlusExt, relModuleMap) {
-                var index = moduleNamePlusExt.lastIndexOf('.'),
-                    ext = null;
-
-                if (index !== -1) {
-                    ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length);
-                    moduleNamePlusExt = moduleNamePlusExt.substring(0, index);
-                }
-
-                return context.nameToUrl(moduleNamePlusExt, ext, relModuleMap);
-            },
-
-            /**
-             * Converts a module name to a file path. Supports cases where
-             * moduleName may actually be just an URL.
-             */
-            nameToUrl: function (moduleName, ext, relModuleMap) {
-                var paths, pkgs, pkg, pkgPath, syms, i, parentModule, url,
-                    parentPath;
-
-                //Normalize module name if have a base relative module name to work from.
-                moduleName = normalize(moduleName, relModuleMap && relModuleMap.id, true);
-
-                //If a colon is in the URL, it indicates a protocol is used and it is just
-                //an URL to a file, or if it starts with a slash, contains a query arg (i.e. ?)
-                //or ends with .js, then assume the user meant to use an url and not a module id.
-                //The slash is important for protocol-less URLs as well as full paths.
-                if (req.jsExtRegExp.test(moduleName)) {
-                    //Just a plain path, not module name lookup, so just return it.
-                    //Add extension if it is included. This is a bit wonky, only non-.js things pass
-                    //an extension, this method probably needs to be reworked.
-                    url = moduleName + (ext || '');
-                } else {
-                    //A module that needs to be converted to a path.
-                    paths = config.paths;
-                    pkgs = config.pkgs;
-
-                    syms = moduleName.split('/');
-                    //For each module name segment, see if there is a path
-                    //registered for it. Start with most specific name
-                    //and work up from it.
-                    for (i = syms.length; i > 0; i -= 1) {
-                        parentModule = syms.slice(0, i).join('/');
-                        pkg = pkgs[parentModule];
-                        parentPath = paths[parentModule];
-                        if (parentPath) {
-                            //If an array, it means there are a few choices,
-                            //Choose the one that is desired
-                            if (isArray(parentPath)) {
-                                parentPath = parentPath[0];
-                            }
-                            syms.splice(0, i, parentPath);
-                            break;
-                        } else if (pkg) {
-                            //If module name is just the package name, then looking
-                            //for the main module.
-                            if (moduleName === pkg.name) {
-                                pkgPath = pkg.location + '/' + pkg.main;
-                            } else {
-                                pkgPath = pkg.location;
-                            }
-                            syms.splice(0, i, pkgPath);
-                            break;
-                        }
-                    }
-
-                    //Join the path parts together, then figure out if baseUrl is needed.
-                    url = syms.join('/') + (ext || '.js')+'?random='+Math.random();
-                    url = (url.charAt(0) === '/' || url.match(/^[\w\+\.\-]+:/) ? '' : config.baseUrl) + url;
-                }
-
-                return config.urlArgs ? url +
-                                        ((url.indexOf('?') === -1 ? '?' : '&') +
-                                         config.urlArgs) : url;
-            },
-
-            //Delegates to req.load. Broken out as a separate function to
-            //allow overriding in the optimizer.
-            load: function (id, url) {
-                req.load(context, id, url);
-            },
-
-            /**
-             * Executes a module callack function. Broken out as a separate function
-             * solely to allow the build system to sequence the files in the built
-             * layer in the right sequence.
-             *
-             * @private
-             */
-            execCb: function (name, callback, args, exports) {
-                return callback.apply(exports, args);
-            },
-
-            /**
-             * callback for script loads, used to check status of loading.
-             *
-             * @param {Event} evt the event from the browser for the script
-             * that was loaded.
-             */
-            onScriptLoad: function (evt) {
-                //Using currentTarget instead of target for Firefox 2.0's sake. Not
-                //all old browsers will be supported, but this one was easy enough
-                //to support and still makes sense.
-                if (evt.type === 'load' ||
-                    (readyRegExp.test((evt.currentTarget || evt.srcElement).readyState))) {
-                    //Reset interactive script so a script node is not held onto for
-                    //to long.
-                    interactiveScript = null;
-
-                    //Pull out the name of the module and the context.
-                    var data = getScriptData(evt);
-                    context.completeLoad(data.id);
-                }
-            },
-
-            /**
-             * Callback for script errors.
-             */
-            onScriptError: function (evt) {
-                var data = getScriptData(evt);
-                if (!hasPathFallback(data.id)) {
-                    return onError(makeError('scripterror', 'Script error', evt, [data.id]));
-                }
-            }
-        });
-    }
-
-    /**
-     * Main entry point.
-     *
-     * If the only argument to require is a string, then the module that
-     * is represented by that string is fetched for the appropriate context.
-     *
-     * If the first argument is an array, then it will be treated as an array
-     * of dependency string names to fetch. An optional function callback can
-     * be specified to execute when all of those dependencies are available.
-     *
-     * Make a local req variable to help Caja compliance (it assumes things
-     * on a require that are not standardized), and to give a short
-     * name for minification/local scope use.
-     */
-    req = requirejs = function (deps, callback, errback, optional) {
-
-        //Find the right context, use default
-        var contextName = defContextName,
-            context, config;
-
-        // Determine if have config object in the call.
-        if (!isArray(deps) && typeof deps !== 'string') {
-            // deps is a config object
-            config = deps;
-            if (isArray(callback)) {
-                // Adjust args if there are dependencies
-                deps = callback;
-                callback = errback;
-                errback = optional;
-            } else {
-                deps = [];
-            }
-        }
-
-        if (config && config.context) {
-            contextName = config.context;
-        }
-
-        context = contexts[contextName];
-        if (!context) {
-            context = contexts[contextName] = req.s.newContext(contextName);
-        }
-
-        if (config) {
-            context.configure(config);
-        }
-
-        return context.require(deps, callback, errback);
-    };
-
-    /**
-     * Support require.config() to make it easier to cooperate with other
-     * AMD loaders on globally agreed names.
-     */
-    req.config = function (config) {
-        return req(config);
-    };
-
-    /**
-     * Export require as a global, but only if it does not already exist.
-     */
-    if (!require) {
-        require = req;
-    }
-
-    req.version = version;
-
-    //Used to filter out dependencies that are already paths.
-    req.jsExtRegExp = /^\/|:|\?|\.js$/;
-    req.isBrowser = isBrowser;
-    s = req.s = {
-        contexts: contexts,
-        newContext: newContext
-    };
-
-    //Create default context.
-    req({});
-
-    //Exports some context-sensitive methods on global require, using
-    //default context if no context specified.
-    addRequireMethods(req);
-
-    if (isBrowser) {
-        head = s.head = document.getElementsByTagName('head')[0];
-        //If BASE tag is in play, using appendChild is a problem for IE6.
-        //When that browser dies, this can be removed. Details in this jQuery bug:
-        //http://dev.jquery.com/ticket/2709
-        baseElement = document.getElementsByTagName('base')[0];
-        if (baseElement) {
-            head = s.head = baseElement.parentNode;
-        }
-    }
-
-    /**
-     * Any errors that require explicitly generates will be passed to this
-     * function. Intercept/override it if you want custom error handling.
-     * @param {Error} err the error object.
-     */
-    req.onError = function (err) {
-        throw err;
-    };
-
-    /**
-     * Does the request to load a module for the browser case.
-     * Make this a separate function to allow other environments
-     * to override it.
-     *
-     * @param {Object} context the require context to find state.
-     * @param {String} moduleName the name of the module.
-     * @param {Object} url the URL to the module.
-     */
-    req.load = function (context, moduleName, url) {
-        var config = (context && context.config) || {},
-            node;
-        if (isBrowser) {
-            //In the browser so use a script tag
-            node = config.xhtml ?
-                   document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script') :
-                   document.createElement('script');
-            node.type = config.scriptType || 'text/javascript';
-            node.charset = 'utf-8';
-
-            node.setAttribute('data-requirecontext', context.contextName);
-            node.setAttribute('data-requiremodule', moduleName);
-
-            //Set up load listener. Test attachEvent first because IE9 has
-            //a subtle issue in its addEventListener and script onload firings
-            //that do not match the behavior of all other browsers with
-            //addEventListener support, which fire the onload event for a
-            //script right after the script execution. See:
-            //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution
-            //UNFORTUNATELY Opera implements attachEvent but does not follow the script
-            //script execution mode.
-            if (node.attachEvent &&
-                //Check if node.attachEvent is artificially added by custom script or
-                //natively supported by browser
-                //read https://github.com/jrburke/requirejs/issues/187
-                //if we can NOT find [native code] then it must NOT natively supported.
-                //in IE8, node.attachEvent does not have toString()
-                //Note the test for "[native code" with no closing brace, see:
-                //https://github.com/jrburke/requirejs/issues/273
-                !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) &&
-                !isOpera) {
-                //Probably IE. IE (at least 6-8) do not fire
-                //script onload right after executing the script, so
-                //we cannot tie the anonymous define call to a name.
-                //However, IE reports the script as being in 'interactive'
-                //readyState at the time of the define call.
-                useInteractive = true;
-
-                node.attachEvent('onreadystatechange', context.onScriptLoad);
-                //It would be great to add an error handler here to catch
-                //404s in IE9+. However, onreadystatechange will fire before
-                //the error handler, so that does not help. If addEvenListener
-                //is used, then IE will fire error before load, but we cannot
-                //use that pathway given the connect.microsoft.com issue
-                //mentioned above about not doing the 'script execute,
-                //then fire the script load event listener before execute
-                //next script' that other browsers do.
-                //Best hope: IE10 fixes the issues,
-                //and then destroys all installs of IE 6-9.
-                //node.attachEvent('onerror', context.onScriptError);
-            } else {
-                node.addEventListener('load', context.onScriptLoad, false);
-                node.addEventListener('error', context.onScriptError, false);
-            }
-            node.src = url;
-
-            //For some cache cases in IE 6-8, the script executes before the end
-            //of the appendChild execution, so to tie an anonymous define
-            //call to the module name (which is stored on the node), hold on
-            //to a reference to this node, but clear after the DOM insertion.
-            currentlyAddingScript = node;
-            if (baseElement) {
-                head.insertBefore(node, baseElement);
-            } else {
-                head.appendChild(node);
-            }
-            currentlyAddingScript = null;
-
-            return node;
-        } else if (isWebWorker) {
-            //In a web worker, use importScripts. This is not a very
-            //efficient use of importScripts, importScripts will block until
-            //its script is downloaded and evaluated. However, if web workers
-            //are in play, the expectation that a build has been done so that
-            //only one script needs to be loaded anyway. This may need to be
-            //reevaluated if other use cases become common.
-            importScripts(url);
-
-            //Account for anonymous modules
-            context.completeLoad(moduleName);
-        }
-    };
-
-    function getInteractiveScript() {
-        if (interactiveScript && interactiveScript.readyState === 'interactive') {
-            return interactiveScript;
-        }
-
-        eachReverse(scripts(), function (script) {
-            if (script.readyState === 'interactive') {
-                return (interactiveScript = script);
-            }
-        });
-        return interactiveScript;
-    }
-
-    //Look for a data-main script attribute, which could also adjust the baseUrl.
-    if (isBrowser) {
-        //Figure out baseUrl. Get it from the script tag with require.js in it.
-        eachReverse(scripts(), function (script) {
-            //Set the 'head' where we can append children by
-            //using the script's parent.
-            if (!head) {
-                head = script.parentNode;
-            }
-
-            //Look for a data-main attribute to set main script for the page
-            //to load. If it is there, the path to data main becomes the
-            //baseUrl, if it is not already set.
-            dataMain = script.getAttribute('data-main');
-            if (dataMain) {
-
-                //Pull off the directory of data-main for use as the
-                //baseUrl.
-                src = dataMain.split('/');
-                mainScript = src.pop();
-                subPath = src.length ? src.join('/')  + '/' : './';
-
-                //Set final baseUrl if there is not already an explicit one.
-                if (!cfg.baseUrl) {
-                    cfg.baseUrl = subPath;
-                }
-
-                //Strip off any trailing .js since dataMain is now
-                //like a module name.
-                dataMain = mainScript.replace(jsSuffixRegExp, '');
-
-                //Put the data-main script in the files to load.
-                cfg.deps = cfg.deps ? cfg.deps.concat(dataMain) : [dataMain];
-
-                return true;
-            }
-        });
-    }
-
-    /**
-     * The function that handles definitions of modules. Differs from
-     * require() in that a string for the module should be the first argument,
-     * and the function to execute after dependencies are loaded should
-     * return a value to define the module corresponding to the first argument's
-     * name.
-     */
-    define = function (name, deps, callback) {
-        var node, context;
-
-        //Allow for anonymous functions
-        if (typeof name !== 'string') {
-            //Adjust args appropriately
-            callback = deps;
-            deps = name;
-            name = null;
-        }
-
-        //This module may not have dependencies
-        if (!isArray(deps)) {
-            callback = deps;
-            deps = [];
-        }
-
-        //If no name, and callback is a function, then figure out if it a
-        //CommonJS thing with dependencies.
-        if (!deps.length && isFunction(callback)) {
-            //Remove comments from the callback string,
-            //look for require calls, and pull them into the dependencies,
-            //but only if there are function args.
-            if (callback.length) {
-                callback
-                    .toString()
-                    .replace(commentRegExp, '')
-                    .replace(cjsRequireRegExp, function (match, dep) {
-                        deps.push(dep);
-                    });
-
-                //May be a CommonJS thing even without require calls, but still
-                //could use exports, and module. Avoid doing exports and module
-                //work though if it just needs require.
-                //REQUIRES the function to expect the CommonJS variables in the
-                //order listed below.
-                deps = (callback.length === 1 ? ['require'] : ['require', 'exports', 'module']).concat(deps);
-            }
-        }
-
-        //If in IE 6-8 and hit an anonymous define() call, do the interactive
-        //work.
-        if (useInteractive) {
-            node = currentlyAddingScript || getInteractiveScript();
-            if (node) {
-                if (!name) {
-                    name = node.getAttribute('data-requiremodule');
-                }
-                context = contexts[node.getAttribute('data-requirecontext')];
-            }
-        }
-
-        //Always save off evaluating the def call until the script onload handler.
-        //This allows multiple modules to be in a file without prematurely
-        //tracing dependencies, and allows for anonymous module support,
-        //where the module name is not known until the script onload event
-        //occurs. If no context, use the global queue, and get it processed
-        //in the onscript load callback.
-        (context ? context.defQueue : globalDefQueue).push([name, deps, callback]);
-    };
-
-    define.amd = {
-        jQuery: true
-    };
-
-
-    /**
-     * Executes the text. Normally just uses eval, but can be modified
-     * to use a better, environment-specific call. Only used for transpiling
-     * loader plugins, not for plain JS modules.
-     * @param {String} text the text to execute/evaluate.
-     */
-    req.exec = function (text) {
-        /*jslint evil: true */
-        return eval(text);
-    };
-
-    //Set up with config info.
-    req(cfg);
-}(this));
-/*
- * jQuery JavaScript Library
- * http://jquery.com/
- *
- * Copyright, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: NULL
- */
-(function( window, undefined ) {
-
-// Use the correct document accordingly with window argument (sandbox)
-var document = window.document,
-	navigator = window.navigator,
-	location = window.location;
-var jQuery = (function() {
-
-// Define a local copy of jQuery
-var jQuery = function( selector, context ) {
-		// The jQuery object is actually just the init constructor 'enhanced'
-		return new jQuery.fn.init( selector, context, rootjQuery );
-	},
-
-	// Map over jQuery in case of overwrite
-	_jQuery = window.jQuery,
-
-	// Map over the $ in case of overwrite
-	_$ = window.$,
-
-	// A central reference to the root jQuery(document)
-	rootjQuery,
-
-	// A simple way to check for HTML strings or ID strings
-	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
-	quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
-
-	// Check if a string has a non-whitespace character in it
-	rnotwhite = /\S/,
-
-	// Used for trimming whitespace
-	trimLeft = /^\s+/,
-	trimRight = /\s+$/,
-
-	// Match a standalone tag
-	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
-
-	// JSON RegExp
-	rvalidchars = /^[\],:{}\s]*$/,
-	rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
-	rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
-	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
-
-	// Useragent RegExp
-	rwebkit = /(webkit)[ \/]([\w.]+)/,
-	ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
-	rmsie = /(msie) ([\w.]+)/,
-	rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
-
-	// Matches dashed string for camelizing
-	rdashAlpha = /-([a-z]|[0-9])/ig,
-	rmsPrefix = /^-ms-/,
-
-	// Used by jQuery.camelCase as callback to replace()
-	fcamelCase = function( all, letter ) {
-		return ( letter + "" ).toUpperCase();
-	},
-
-	// Keep a UserAgent string for use with jQuery.browser
-	userAgent = navigator.userAgent,
-
-	// For matching the engine and version of the browser
-	browserMatch,
-
-	// The deferred used on DOM ready
-	readyList,
-
-	// The ready event handler
-	DOMContentLoaded,
-
-	// Save a reference to some core methods
-	toString = Object.prototype.toString,
-	hasOwn = Object.prototype.hasOwnProperty,
-	push = Array.prototype.push,
-	slice = Array.prototype.slice,
-	trim = String.prototype.trim,
-	indexOf = Array.prototype.indexOf,
-
-	// [[Class]] -> type pairs
-	class2type = {};
-
-jQuery.fn = jQuery.prototype = {
-	constructor: jQuery,
-	init: function( selector, context, rootjQuery ) {
-		var match, elem, ret, doc;
-
-		// Handle $(""), $(null), or $(undefined)
-		if ( !selector ) {
-			return this;
-		}
-
-		// Handle $(DOMElement)
-		if ( selector.nodeType ) {
-			this.context = this[0] = selector;
-			this.length = 1;
-			return this;
-		}
-
-		// The body element only exists once, optimize finding it
-		if ( selector === "body" && !context && document.body ) {
-			this.context = document;
-			this[0] = document.body;
-			this.selector = selector;
-			this.length = 1;
-			return this;
-		}
-
-		// Handle HTML strings
-		if ( typeof selector === "string" ) {
-			// Are we dealing with HTML string or an ID?
-			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
-				// Assume that strings that start and end with <> are HTML and skip the regex check
-				match = [ null, selector, null ];
-
-			} else {
-				match = quickExpr.exec( selector );
-			}
-
-			// Verify a match, and that no context was specified for #id
-			if ( match && (match[1] || !context) ) {
-
-				// HANDLE: $(html) -> $(array)
-				if ( match[1] ) {
-					context = context instanceof jQuery ? context[0] : context;
-					doc = ( context ? context.ownerDocument || context : document );
-
-					// If a single string is passed in and it's a single tag
-					// just do a createElement and skip the rest
-					ret = rsingleTag.exec( selector );
-
-					if ( ret ) {
-						if ( jQuery.isPlainObject( context ) ) {
-							selector = [ document.createElement( ret[1] ) ];
-							jQuery.fn.attr.call( selector, context, true );
-
-						} else {
-							selector = [ doc.createElement( ret[1] ) ];
-						}
-
-					} else {
-						ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
-						selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes;
-					}
-
-					return jQuery.merge( this, selector );
-
-				// HANDLE: $("#id")
-				} else {
-					elem = document.getElementById( match[2] );
-
-					// Check parentNode to catch when Blackberry 4.6 returns
-					// nodes that are no longer in the document #6963
-					if ( elem && elem.parentNode ) {
-						// Handle the case where IE and Opera return items
-						// by name instead of ID
-						if ( elem.id !== match[2] ) {
-							return rootjQuery.find( selector );
-						}
-
-						// Otherwise, we inject the element directly into the jQuery object
-						this.length = 1;
-						this[0] = elem;
-					}
-
-					this.context = document;
-					this.selector = selector;
-					return this;
-				}
-
-			// HANDLE: $(expr, $(...))
-			} else if ( !context || context.jquery ) {
-				return ( context || rootjQuery ).find( selector );
-
-			// HANDLE: $(expr, context)
-			// (which is just equivalent to: $(context).find(expr)
-			} else {
-				return this.constructor( context ).find( selector );
-			}
-
-		// HANDLE: $(function)
-		// Shortcut for document ready
-		} else if ( jQuery.isFunction( selector ) ) {
-			return rootjQuery.ready( selector );
-		}
-
-		if ( selector.selector !== undefined ) {
-			this.selector = selector.selector;
-			this.context = selector.context;
-		}
-
-		return jQuery.makeArray( selector, this );
-	},
-
-	// Start with an empty selector
-	selector: "",
-
-	// The current version of jQuery being used
-	jquery: "",
-
-	// The default length of a jQuery object is 0
-	length: 0,
-
-	// The number of elements contained in the matched element set
-	size: function() {
-		return this.length;
-	},
-
-	toArray: function() {
-		return slice.call( this, 0 );
-	},
-
-	// Get the Nth element in the matched element set OR
-	// Get the whole matched element set as a clean array
-	get: function( num ) {
-		return num == null ?
-
-			// Return a 'clean' array
-			this.toArray() :
-
-			// Return just the object
-			( num < 0 ? this[ this.length + num ] : this[ num ] );
-	},
-
-	// Take an array of elements and push it onto the stack
-	// (returning the new matched element set)
-	pushStack: function( elems, name, selector ) {
-		// Build a new jQuery matched element set
-		var ret = this.constructor();
-
-		if ( jQuery.isArray( elems ) ) {
-			push.apply( ret, elems );
-
-		} else {
-			jQuery.merge( ret, elems );
-		}
-
-		// Add the old object onto the stack (as a reference)
-		ret.prevObject = this;
-
-		ret.context = this.context;
-
-		if ( name === "find" ) {
-			ret.selector = this.selector + ( this.selector ? " " : "" ) + selector;
-		} else if ( name ) {
-			ret.selector = this.selector + "." + name + "(" + selector + ")";
-		}
-
-		// Return the newly-formed element set
-		return ret;
-	},
-
-	// Execute a callback for every element in the matched set.
-	// (You can seed the arguments with an array of args, but this is
-	// only used internally.)
-	each: function( callback, args ) {
-		return jQuery.each( this, callback, args );
-	},
-
-	ready: function( fn ) {
-		// Attach the listeners
-		jQuery.bindReady();
-
-		// Add the callback
-		readyList.add( fn );
-
-		return this;
-	},
-
-	eq: function( i ) {
-		i = +i;
-		return i === -1 ?
-			this.slice( i ) :
-			this.slice( i, i + 1 );
-	},
-
-	first: function() {
-		return this.eq( 0 );
-	},
-
-	last: function() {
-		return this.eq( -1 );
-	},
-
-	slice: function() {
-		return this.pushStack( slice.apply( this, arguments ),
-			"slice", slice.call(arguments).join(",") );
-	},
-
-	map: function( callback ) {
-		return this.pushStack( jQuery.map(this, function( elem, i ) {
-			return callback.call( elem, i, elem );
-		}));
-	},
-
-	end: function() {
-		return this.prevObject || this.constructor(null);
-	},
-
-	// For internal use only.
-	// Behaves like an Array's method, not like a jQuery method.
-	push: push,
-	sort: [].sort,
-	splice: [].splice
-};
-
-// Give the init function the jQuery prototype for later instantiation
-jQuery.fn.init.prototype = jQuery.fn;
-
-jQuery.extend = jQuery.fn.extend = function() {
-	var options, name, src, copy, copyIsArray, clone,
-		target = arguments[0] || {},
-		i = 1,
-		length = arguments.length,
-		deep = false;
-
-	// Handle a deep copy situation
-	if ( typeof target === "boolean" ) {
-		deep = target;
-		target = arguments[1] || {};
-		// skip the boolean and the target
-		i = 2;
-	}
-
-	// Handle case when target is a string or something (possible in deep copy)
-	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
-		target = {};
-	}
-
-	// extend jQuery itself if only one argument is passed
-	if ( length === i ) {
-		target = this;
-		--i;
-	}
-
-	for ( ; i < length; i++ ) {
-		// Only deal with non-null/undefined values
-		if ( (options = arguments[ i ]) != null ) {
-			// Extend the base object
-			for ( name in options ) {
-				src = target[ name ];
-				copy = options[ name ];
-
-				// Prevent never-ending loop
-				if ( target === copy ) {
-					continue;
-				}
-
-				// Recurse if we're merging plain objects or arrays
-				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
-					if ( copyIsArray ) {
-						copyIsArray = false;
-						clone = src && jQuery.isArray(src) ? src : [];
-
-					} else {
-						clone = src && jQuery.isPlainObject(src) ? src : {};
-					}
-
-					// Never move original objects, clone them
-					target[ name ] = jQuery.extend( deep, clone, copy );
-
-				// Don't bring in undefined values
-				} else if ( copy !== undefined ) {
-					target[ name ] = copy;
-				}
-			}
-		}
-	}
-
-	// Return the modified object
-	return target;
-};
-
-jQuery.extend({
-	noConflict: function( deep ) {
-		if ( window.$ === jQuery ) {
-			window.$ = _$;
-		}
-
-		if ( deep && window.jQuery === jQuery ) {
-			window.jQuery = _jQuery;
-		}
-
-		return jQuery;
-	},
-
-	// Is the DOM ready to be used? Set to true once it occurs.
-	isReady: false,
-
-	// A counter to track how many items to wait for before
-	// the ready event fires. See #6781
-	readyWait: 1,
-
-	// Hold (or release) the ready event
-	holdReady: function( hold ) {
-		if ( hold ) {
-			jQuery.readyWait++;
-		} else {
-			jQuery.ready( true );
-		}
-	},
-
-	// Handle when the DOM is ready
-	ready: function( wait ) {
-		// Either a released hold or an DOMready/load event and not yet ready
-		if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
-			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-			if ( !document.body ) {
-				return setTimeout( jQuery.ready, 1 );
-			}
-
-			// Remember that the DOM is ready
-			jQuery.isReady = true;
-
-			// If a normal DOM Ready event fired, decrement, and wait if need be
-			if ( wait !== true && --jQuery.readyWait > 0 ) {
-				return;
-			}
-
-			// If there are functions bound, to execute
-			readyList.fireWith( document, [ jQuery ] );
-
-			// Trigger any bound ready events
-			if ( jQuery.fn.trigger ) {
-				jQuery( document ).trigger( "ready" ).off( "ready" );
-			}
-		}
-	},
-
-	bindReady: function() {
-		if ( readyList ) {
-			return;
-		}
-
-		readyList = jQuery.Callbacks( "once memory" );
-
-		// Catch cases where $(document).ready() is called after the
-		// browser event has already occurred.
-		if ( document.readyState === "complete" ) {
-			// Handle it asynchronously to allow scripts the opportunity to delay ready
-			return setTimeout( jQuery.ready, 1 );
-		}
-
-		// Mozilla, Opera and webkit nightlies currently support this event
-		if ( document.addEventListener ) {
-			// Use the handy event callback
-			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-
-			// A fallback to window.onload, that will always work
-			window.addEventListener( "load", jQuery.ready, false );
-
-		// If IE event model is used
-		} else if ( document.attachEvent ) {
-			// ensure firing before onload,
-			// maybe late but safe also for iframes
-			document.attachEvent( "onreadystatechange", DOMContentLoaded );
-
-			// A fallback to window.onload, that will always work
-			window.attachEvent( "onload", jQuery.ready );
-
-			// If IE and not a frame
-			// continually check to see if the document is ready
-			var toplevel = false;
-
-			try {
-				toplevel = window.frameElement == null;
-			} catch(e) {}
-
-			if ( document.documentElement.doScroll && toplevel ) {
-				doScrollCheck();
-			}
-		}
-	},
-
-	// See test/unit/core.js for details concerning isFunction.
-	// Since version 1.3, DOM methods and functions like alert
-	// aren't supported. They return false on IE (#2968).
-	isFunction: function( obj ) {
-		return jQuery.type(obj) === "function";
-	},
-
-	isArray: Array.isArray || function( obj ) {
-		return jQuery.type(obj) === "array";
-	},
-
-	isWindow: function( obj ) {
-		return obj != null && obj == obj.window;
-	},
-
-	isNumeric: function( obj ) {
-		return !isNaN( parseFloat(obj) ) && isFinite( obj );
-	},
-
-	type: function( obj ) {
-		return obj == null ?
-			String( obj ) :
-			class2type[ toString.call(obj) ] || "object";
-	},
-
-	isPlainObject: function( obj ) {
-		// Must be an Object.
-		// Because of IE, we also have to check the presence of the constructor property.
-		// Make sure that DOM nodes and window objects don't pass through, as well
-		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
-			return false;
-		}
-
-		try {
-			// Not own constructor property must be Object
-			if ( obj.constructor &&
-				!hasOwn.call(obj, "constructor") &&
-				!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
-				return false;
-			}
-		} catch ( e ) {
-			// IE8,9 Will throw exceptions on certain host objects #9897
-			return false;
-		}
-
-		// Own properties are enumerated firstly, so to speed up,
-		// if last one is own, then all properties are own.
-
-		var key;
-		for ( key in obj ) {}
-
-		return key === undefined || hasOwn.call( obj, key );
-	},
-
-	isEmptyObject: function( obj ) {
-		for ( var name in obj ) {
-			return false;
-		}
-		return true;
-	},
-
-	error: function( msg ) {
-		throw new Error( msg );
-	},
-
-	parseJSON: function( data ) {
-		if ( typeof data !== "string" || !data ) {
-			return null;
-		}
-
-		// Make sure leading/trailing whitespace is removed (IE can't handle it)
-		data = jQuery.trim( data );
-
-		// Attempt to parse using the native JSON parser first
-		if ( window.JSON && window.JSON.parse ) {
-			return window.JSON.parse( data );
-		}
-
-		// Make sure the incoming data is actual JSON
-		// Logic borrowed from http://json.org/json2.js
-		if ( rvalidchars.test( data.replace( rvalidescape, "@" )
-			.replace( rvalidtokens, "]" )
-			.replace( rvalidbraces, "")) ) {
-
-			return ( new Function( "return " + data ) )();
-
-		}
-		jQuery.error( "Invalid JSON: " + data );
-	},
-
-	// Cross-browser xml parsing
-	parseXML: function( data ) {
-		if ( typeof data !== "string" || !data ) {
-			return null;
-		}
-		var xml, tmp;
-		try {
-			if ( window.DOMParser ) { // Standard
-				tmp = new DOMParser();
-				xml = tmp.parseFromString( data , "text/xml" );
-			} else { // IE
-				xml = new ActiveXObject( "Microsoft.XMLDOM" );
-				xml.async = "false";
-				xml.loadXML( data );
-			}
-		} catch( e ) {
-			xml = undefined;
-		}
-		if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
-			jQuery.error( "Invalid XML: " + data );
-		}
-		return xml;
-	},
-
-	noop: function() {},
-
-	// Evaluates a script in a global context
-	// Workarounds based on findings by Jim Driscoll
-	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
-	globalEval: function( data ) {
-		if ( data && rnotwhite.test( data ) ) {
-			// We use execScript on Internet Explorer
-			// We use an anonymous function so that context is window
-			// rather than jQuery in Firefox
-			( window.execScript || function( data ) {
-				window[ "eval" ].call( window, data );
-			} )( data );
-		}
-	},
-
-	// Convert dashed to camelCase; used by the css and data modules
-	// Microsoft forgot to hump their vendor prefix (#9572)
-	camelCase: function( string ) {
-		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
-	},
-
-	nodeName: function( elem, name ) {
-		return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
-	},
-
-	// args is for internal usage only
-	each: function( object, callback, args ) {
-		var name, i = 0,
-			length = object.length,
-			isObj = length === undefined || jQuery.isFunction( object );
-
-		if ( args ) {
-			if ( isObj ) {
-				for ( name in object ) {
-					if ( callback.apply( object[ name ], args ) === false ) {
-						break;
-					}
-				}
-			} else {
-				for ( ; i < length; ) {
-					if ( callback.apply( object[ i++ ], args ) === false ) {
-						break;
-					}
-				}
-			}
-
-		// A special, fast, case for the most common use of each
-		} else {
-			if ( isObj ) {
-				for ( name in object ) {
-					if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
-						break;
-					}
-				}
-			} else {
-				for ( ; i < length; ) {
-					if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
-						break;
-					}
-				}
-			}
-		}
-
-		return object;
-	},
-
-	// Use native String.trim function wherever possible
-	trim: trim ?
-		function( text ) {
-			return text == null ?
-				"" :
-				trim.call( text );
-		} :
-
-		// Otherwise use our own trimming functionality
-		function( text ) {
-			return text == null ?
-				"" :
-				text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
-		},
-
-	// results is for internal usage only
-	makeArray: function( array, results ) {
-		var ret = results || [];
-
-		if ( array != null ) {
-			// The window, strings (and functions) also have 'length'
-			// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
-			var type = jQuery.type( array );
-
-			if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
-				push.call( ret, array );
-			} else {
-				jQuery.merge( ret, array );
-			}
-		}
-
-		return ret;
-	},
-
-	inArray: function( elem, array, i ) {
-		var len;
-
-		if ( array ) {
-			if ( indexOf ) {
-				return indexOf.call( array, elem, i );
-			}
-
-			len = array.length;
-			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
-
-			for ( ; i < len; i++ ) {
-				// Skip accessing in sparse arrays
-				if ( i in array && array[ i ] === elem ) {
-					return i;
-				}
-			}
-		}
-
-		return -1;
-	},
-
-	merge: function( first, second ) {
-		var i = first.length,
-			j = 0;
-
-		if ( typeof second.length === "number" ) {
-			for ( var l = second.length; j < l; j++ ) {
-				first[ i++ ] = second[ j ];
-			}
-
-		} else {
-			while ( second[j] !== undefined ) {
-				first[ i++ ] = second[ j++ ];
-			}
-		}
-
-		first.length = i;
-
-		return first;
-	},
-
-	grep: function( elems, callback, inv ) {
-		var ret = [], retVal;
-		inv = !!inv;
-
-		// Go through the array, only saving the items
-		// that pass the validator function
-		for ( var i = 0, length = elems.length; i < length; i++ ) {
-			retVal = !!callback( elems[ i ], i );
-			if ( inv !== retVal ) {
-				ret.push( elems[ i ] );
-			}
-		}
-
-		return ret;
-	},
-
-	// arg is for internal usage only
-	map: function( elems, callback, arg ) {
-		var value, key, ret = [],
-			i = 0,
-			length = elems.length,
-			// jquery objects are treated as arrays
-			isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
-
-		// Go through the array, translating each of the items to their
-		if ( isArray ) {
-			for ( ; i < length; i++ ) {
-				value = callback( elems[ i ], i, arg );
-
-				if ( value != null ) {
-					ret[ ret.length ] = value;
-				}
-			}
-
-		// Go through every key on the object,
-		} else {
-			for ( key in elems ) {
-				value = callback( elems[ key ], key, arg );
-
-				if ( value != null ) {
-					ret[ ret.length ] = value;
-				}
-			}
-		}
-
-		// Flatten any nested arrays
-		return ret.concat.apply( [], ret );
-	},
-
-	// A global GUID counter for objects
-	guid: 1,
-
-	// Bind a function to a context, optionally partially applying any
-	// arguments.
-	proxy: function( fn, context ) {
-		if ( typeof context === "string" ) {
-			var tmp = fn[ context ];
-			context = fn;
-			fn = tmp;
-		}
-
-		// Quick check to determine if target is callable, in the spec
-		// this throws a TypeError, but we will just return undefined.
-		if ( !jQuery.isFunction( fn ) ) {
-			return undefined;
-		}
-
-		// Simulated bind
-		var args = slice.call( arguments, 2 ),
-			proxy = function() {
-				return fn.apply( context, args.concat( slice.call( arguments ) ) );
-			};
-
-		// Set the guid of unique handler to the same of original handler, so it can be removed
-		proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
-
-		return proxy;
-	},
-
-	// Mutifunctional method to get and set values to a collection
-	// The value/s can optionally be executed if it's a function
-	access: function( elems, fn, key, value, chainable, emptyGet, pass ) {
-		var exec,
-			bulk = key == null,
-			i = 0,
-			length = elems.length;
-
-		// Sets many values
-		if ( key && typeof key === "object" ) {
-			for ( i in key ) {
-				jQuery.access( elems, fn, i, key[i], 1, emptyGet, value );
-			}
-			chainable = 1;
-
-		// Sets one value
-		} else if ( value !== undefined ) {
-			// Optionally, function values get executed if exec is true
-			exec = pass === undefined && jQuery.isFunction( value );
-
-			if ( bulk ) {
-				// Bulk operations only iterate when executing function values
-				if ( exec ) {
-					exec = fn;
-					fn = function( elem, key, value ) {
-						return exec.call( jQuery( elem ), value );
-					};
-
-				// Otherwise they run against the entire set
-				} else {
-					fn.call( elems, value );
-					fn = null;
-				}
-			}
-
-			if ( fn ) {
-				for (; i < length; i++ ) {
-					fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
-				}
-			}
-
-			chainable = 1;
-		}
-
-		return chainable ?
-			elems :
-
-			// Gets
-			bulk ?
-				fn.call( elems ) :
-				length ? fn( elems[0], key ) : emptyGet;
-	},
-
-	now: function() {
-		return ( new Date() ).getTime();
-	},
-
-	// Use of jQuery.browser is frowned upon.
-	// More details: http://docs.jquery.com/Utilities/jQuery.browser
-	uaMatch: function( ua ) {
-		ua = ua.toLowerCase();
-
-		var match = rwebkit.exec( ua ) ||
-			ropera.exec( ua ) ||
-			rmsie.exec( ua ) ||
-			ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
-			[];
-
-		return { browser: match[1] || "", version: match[2] || "0" };
-	},
-
-	sub: function() {
-		function jQuerySub( selector, context ) {
-			return new jQuerySub.fn.init( selector, context );
-		}
-		jQuery.extend( true, jQuerySub, this );
-		jQuerySub.superclass = this;
-		jQuerySub.fn = jQuerySub.prototype = this();
-		jQuerySub.fn.constructor = jQuerySub;
-		jQuerySub.sub = this.sub;
-		jQuerySub.fn.init = function init( selector, context ) {
-			if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
-				context = jQuerySub( context );
-			}
-
-			return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
-		};
-		jQuerySub.fn.init.prototype = jQuerySub.fn;
-		var rootjQuerySub = jQuerySub(document);
-		return jQuerySub;
-	},
-
-	browser: {}
-});
-
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
-	class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-browserMatch = jQuery.uaMatch( userAgent );
-if ( browserMatch.browser ) {
-	jQuery.browser[ browserMatch.browser ] = true;
-	jQuery.browser.version = browserMatch.version;
-}
-
-// Deprecated, use jQuery.browser.webkit instead
-if ( jQuery.browser.webkit ) {
-	jQuery.browser.safari = true;
-}
-
-// IE doesn't match non-breaking spaces with \s
-if ( rnotwhite.test( "\xA0" ) ) {
-	trimLeft = /^[\s\xA0]+/;
-	trimRight = /[\s\xA0]+$/;
-}
-
-// All jQuery objects should point back to these
-rootjQuery = jQuery(document);
-
-// Cleanup functions for the document ready method
-if ( document.addEventListener ) {
-	DOMContentLoaded = function() {
-		document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-		jQuery.ready();
-	};
-
-} else if ( document.attachEvent ) {
-	DOMContentLoaded = function() {
-		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-		if ( document.readyState === "complete" ) {
-			document.detachEvent( "onreadystatechange", DOMContentLoaded );
-			jQuery.ready();
-		}
-	};
-}
-
-// The DOM ready check for Internet Explorer
-function doScrollCheck() {
-	if ( jQuery.isReady ) {
-		return;
-	}
-
-	try {
-		// If IE is used, use the trick by Diego Perini
-		// http://javascript.nwbox.com/IEContentLoaded/
-		document.documentElement.doScroll("left");
-	} catch(e) {
-		setTimeout( doScrollCheck, 1 );
-		return;
-	}
-
-	// and execute any waiting functions
-	jQuery.ready();
-}
-
-return jQuery;
-
-})();
-
-
-// String to Object flags format cache
-var flagsCache = {};
-
-// Convert String-formatted flags into Object-formatted ones and store in cache
-function createFlags( flags ) {
-	var object = flagsCache[ flags ] = {},
-		i, length;
-	flags = flags.split( /\s+/ );
-	for ( i = 0, length = flags.length; i < length; i++ ) {
-		object[ flags[i] ] = true;
-	}
-	return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- *	flags:	an optional list of space-separated flags that will change how
- *			the callback list behaves
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible flags:
- *
- *	once:			will ensure the callback list can only be fired once (like a Deferred)
- *
- *	memory:			will keep track of previous values and will call any callback added
- *					after the list has been fired right away with the latest "memorized"
- *					values (like a Deferred)
- *
- *	unique:			will ensure a callback can only be added once (no duplicate in the list)
- *
- *	stopOnFalse:	interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( flags ) {
-
-	// Convert flags from String-formatted to Object-formatted
-	// (we check in cache first)
-	flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {};
-
-	var // Actual callback list
-		list = [],
-		// Stack of fire calls for repeatable lists
-		stack = [],
-		// Last fire value (for non-forgettable lists)
-		memory,
-		// Flag to know if list was already fired
-		fired,
-		// Flag to know if list is currently firing
-		firing,
-		// First callback to fire (used internally by add and fireWith)
-		firingStart,
-		// End of the loop when firing
-		firingLength,
-		// Index of currently firing callback (modified by remove if needed)
-		firingIndex,
-		// Add one or several callbacks to the list
-		add = function( args ) {
-			var i,
-				length,
-				elem,
-				type,
-				actual;
-			for ( i = 0, length = args.length; i < length; i++ ) {
-				elem = args[ i ];
-				type = jQuery.type( elem );
-				if ( type === "array" ) {
-					// Inspect recursively
-					add( elem );
-				} else if ( type === "function" ) {
-					// Add if not in unique mode and callback is not in
-					if ( !flags.unique || !self.has( elem ) ) {
-						list.push( elem );
-					}
-				}
-			}
-		},
-		// Fire callbacks
-		fire = function( context, args ) {
-			args = args || [];
-			memory = !flags.memory || [ context, args ];
-			fired = true;
-			firing = true;
-			firingIndex = firingStart || 0;
-			firingStart = 0;
-			firingLength = list.length;
-			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
-				if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) {
-					memory = true; // Mark as halted
-					break;
-				}
-			}
-			firing = false;
-			if ( list ) {
-				if ( !flags.once ) {
-					if ( stack && stack.length ) {
-						memory = stack.shift();
-						self.fireWith( memory[ 0 ], memory[ 1 ] );
-					}
-				} else if ( memory === true ) {
-					self.disable();
-				} else {
-					list = [];
-				}
-			}
-		},
-		// Actual Callbacks object
-		self = {
-			// Add a callback or a collection of callbacks to the list
-			add: function() {
-				if ( list ) {
-					var length = list.length;
-					add( arguments );
-					// Do we need to add the callbacks to the
-					// current firing batch?
-					if ( firing ) {
-						firingLength = list.length;
-					// With memory, if we're not firing then
-					// we should call right away, unless previous
-					// firing was halted (stopOnFalse)
-					} else if ( memory && memory !== true ) {
-						firingStart = length;
-						fire( memory[ 0 ], memory[ 1 ] );
-					}
-				}
-				return this;
-			},
-			// Remove a callback from the list
-			remove: function() {
-				if ( list ) {
-					var args = arguments,
-						argIndex = 0,
-						argLength = args.length;
-					for ( ; argIndex < argLength ; argIndex++ ) {
-						for ( var i = 0; i < list.length; i++ ) {
-							if ( args[ argIndex ] === list[ i ] ) {
-								// Handle firingIndex and firingLength
-								if ( firing ) {
-									if ( i <= firingLength ) {
-										firingLength--;
-										if ( i <= firingIndex ) {
-											firingIndex--;
-										}
-									}
-								}
-								// Remove the element
-								list.splice( i--, 1 );
-								// If we have some unicity property then
-								// we only need to do this once
-								if ( flags.unique ) {
-									break;
-								}
-							}
-						}
-					}
-				}
-				return this;
-			},
-			// Control if a given callback is in the list
-			has: function( fn ) {
-				if ( list ) {
-					var i = 0,
-						length = list.length;
-					for ( ; i < length; i++ ) {
-						if ( fn === list[ i ] ) {
-							return true;
-						}
-					}
-				}
-				return false;
-			},
-			// Remove all callbacks from the list
-			empty: function() {
-				list = [];
-				return this;
-			},
-			// Have the list do nothing anymore
-			disable: function() {
-				list = stack = memory = undefined;
-				return this;
-			},
-			// Is it disabled?
-			disabled: function() {
-				return !list;
-			},
-			// Lock the list in its current state
-			lock: function() {
-				stack = undefined;
-				if ( !memory || memory === true ) {
-					self.disable();
-				}
-				return this;
-			},
-			// Is it locked?
-			locked: function() {
-				return !stack;
-			},
-			// Call all callbacks with the given context and arguments
-			fireWith: function( context, args ) {
-				if ( stack ) {
-					if ( firing ) {
-						if ( !flags.once ) {
-							stack.push( [ context, args ] );
-						}
-					} else if ( !( flags.once && memory ) ) {
-						fire( context, args );
-					}
-				}
-				return this;
-			},
-			// Call all the callbacks with the given arguments
-			fire: function() {
-				self.fireWith( this, arguments );
-				return this;
-			},
-			// To know if the callbacks have already been called at least once
-			fired: function() {
-				return !!fired;
-			}
-		};
-
-	return self;
-};
-
-
-
-
-var // Static reference to slice
-	sliceDeferred = [].slice;
-
-jQuery.extend({
-
-	Deferred: function( func ) {
-		var doneList = jQuery.Callbacks( "once memory" ),
-			failList = jQuery.Callbacks( "once memory" ),
-			progressList = jQuery.Callbacks( "memory" ),
-			state = "pending",
-			lists = {
-				resolve: doneList,
-				reject: failList,
-				notify: progressList
-			},
-			promise = {
-				done: doneList.add,
-				fail: failList.add,
-				progress: progressList.add,
-
-				state: function() {
-					return state;
-				},
-
-				// Deprecated
-				isResolved: doneList.fired,
-				isRejected: failList.fired,
-
-				then: function( doneCallbacks, failCallbacks, progressCallbacks ) {
-					deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks );
-					return this;
-				},
-				always: function() {
-					deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments );
-					return this;
-				},
-				pipe: function( fnDone, fnFail, fnProgress ) {
-					return jQuery.Deferred(function( newDefer ) {
-						jQuery.each( {
-							done: [ fnDone, "resolve" ],
-							fail: [ fnFail, "reject" ],
-							progress: [ fnProgress, "notify" ]
-						}, function( handler, data ) {
-							var fn = data[ 0 ],
-								action = data[ 1 ],
-								returned;
-							if ( jQuery.isFunction( fn ) ) {
-								deferred[ handler ](function() {
-									returned = fn.apply( this, arguments );
-									if ( returned && jQuery.isFunction( returned.promise ) ) {
-										returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify );
-									} else {
-										newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
-									}
-								});
-							} else {
-								deferred[ handler ]( newDefer[ action ] );
-							}
-						});
-					}).promise();
-				},
-				// Get a promise for this deferred
-				// If obj is provided, the promise aspect is added to the object
-				promise: function( obj ) {
-					if ( obj == null ) {
-						obj = promise;
-					} else {
-						for ( var key in promise ) {
-							obj[ key ] = promise[ key ];
-						}
-					}
-					return obj;
-				}
-			},
-			deferred = promise.promise({}),
-			key;
-
-		for ( key in lists ) {
-			deferred[ key ] = lists[ key ].fire;
-			deferred[ key + "With" ] = lists[ key ].fireWith;
-		}
-
-		// Handle state
-		deferred.done( function() {
-			state = "resolved";
-		}, failList.disable, progressList.lock ).fail( function() {
-			state = "rejected";
-		}, doneList.disable, progressList.lock );
-
-		// Call given func if any
-		if ( func ) {
-			func.call( deferred, deferred );
-		}
-
-		// All done!
-		return deferred;
-	},
-
-	// Deferred helper
-	when: function( firstParam ) {
-		var args = sliceDeferred.call( arguments, 0 ),
-			i = 0,
-			length = args.length,
-			pValues = new Array( length ),
-			count = length,
-			pCount = length,
-			deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
-				firstParam :
-				jQuery.Deferred(),
-			promise = deferred.promise();
-		function resolveFunc( i ) {
-			return function( value ) {
-				args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
-				if ( !( --count ) ) {
-					deferred.resolveWith( deferred, args );
-				}
-			};
-		}
-		function progressFunc( i ) {
-			return function( value ) {
-				pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
-				deferred.notifyWith( promise, pValues );
-			};
-		}
-		if ( length > 1 ) {
-			for ( ; i < length; i++ ) {
-				if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) {
-					args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) );
-				} else {
-					--count;
-				}
-			}
-			if ( !count ) {
-				deferred.resolveWith( deferred, args );
-			}
-		} else if ( deferred !== firstParam ) {
-			deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
-		}
-		return promise;
-	}
-});
-
-
-
-
-jQuery.support = (function() {
-
-	var support,
-		all,
-		a,
-		select,
-		opt,
-		input,
-		fragment,
-		tds,
-		events,
-		eventName,
-		i,
-		isSupported,
-		div = document.createElement( "div" ),
-		documentElement = document.documentElement;
-
-	// Preliminary tests
-	div.setAttribute("className", "t");
-	div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
-
-	all = div.getElementsByTagName( "*" );
-	a = div.getElementsByTagName( "a" )[ 0 ];
-
-	// Can't get basic test support
-	if ( !all || !all.length || !a ) {
-		return {};
-	}
-
-	// First batch of supports tests
-	select = document.createElement( "select" );
-	opt = select.appendChild( document.createElement("option") );
-	input = div.getElementsByTagName( "input" )[ 0 ];
-
-	support = {
-		// IE strips leading whitespace when .innerHTML is used
-		leadingWhitespace: ( div.firstChild.nodeType === 3 ),
-
-		// Make sure that tbody elements aren't automatically inserted
-		// IE will insert them into empty tables
-		tbody: !div.getElementsByTagName("tbody").length,
-
-		// Make sure that link elements get serialized correctly by innerHTML
-		// This requires a wrapper element in IE
-		htmlSerialize: !!div.getElementsByTagName("link").length,
-
-		// Get the style information from getAttribute
-		// (IE uses .cssText instead)
-		style: /top/.test( a.getAttribute("style") ),
-
-		// Make sure that URLs aren't manipulated
-		// (IE normalizes it by default)
-		hrefNormalized: ( a.getAttribute("href") === "/a" ),
-
-		// Make sure that element opacity exists
-		// (IE uses filter instead)
-		// Use a regex to work around a WebKit issue. See #5145
-		opacity: /^0.55/.test( a.style.opacity ),
-
-		// Verify style float existence
-		// (IE uses styleFloat instead of cssFloat)
-		cssFloat: !!a.style.cssFloat,
-
-		// Make sure that if no value is specified for a checkbox
-		// that it defaults to "on".
-		// (WebKit defaults to "" instead)
-		checkOn: ( input.value === "on" ),
-
-		// Make sure that a selected-by-default option has a working selected property.
-		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
-		optSelected: opt.selected,
-
-		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
-		getSetAttribute: div.className !== "t",
-
-		// Tests for enctype support on a form(#6743)
-		enctype: !!document.createElement("form").enctype,
-
-		// Makes sure cloning an html5 element does not cause problems
-		// Where outerHTML is undefined, this still works
-		html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
-
-		// Will be defined later
-		submitBubbles: true,
-		changeBubbles: true,
-		focusinBubbles: false,
-		deleteExpando: true,
-		noCloneEvent: true,
-		inlineBlockNeedsLayout: false,
-		shrinkWrapBlocks: false,
-		reliableMarginRight: true,
-		pixelMargin: true
-	};
-
-	// jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead
-	jQuery.boxModel = support.boxModel = (document.compatMode === "CSS1Compat");
-
-	// Make sure checked status is properly cloned
-	input.checked = true;
-	support.noCloneChecked = input.cloneNode( true ).checked;
-
-	// Make sure that the options inside disabled selects aren't marked as disabled
-	// (WebKit marks them as disabled)
-	select.disabled = true;
-	support.optDisabled = !opt.disabled;
-
-	// Test to see if it's possible to delete an expando from an element
-	// Fails in Internet Explorer
-	try {
-		delete div.test;
-	} catch( e ) {
-		support.deleteExpando = false;
-	}
-
-	if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
-		div.attachEvent( "onclick", function() {
-			// Cloning a node shouldn't copy over any
-			// bound event handlers (IE does this)
-			support.noCloneEvent = false;
-		});
-		div.cloneNode( true ).fireEvent( "onclick" );
-	}
-
-	// Check if a radio maintains its value
-	// after being appended to the DOM
-	input = document.createElement("input");
-	input.value = "t";
-	input.setAttribute("type", "radio");
-	support.radioValue = input.value === "t";
-
-	input.setAttribute("checked", "checked");
-
-	// #11217 - WebKit loses check when the name is after the checked attribute
-	input.setAttribute( "name", "t" );
-
-	div.appendChild( input );
-	fragment = document.createDocumentFragment();
-	fragment.appendChild( div.lastChild );
-
-	// WebKit doesn't clone checked state correctly in fragments
-	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
-	// Check if a disconnected checkbox will retain its checked
-	// value of true after appended to the DOM (IE6/7)
-	support.appendChecked = input.checked;
-
-	fragment.removeChild( input );
-	fragment.appendChild( div );
-
-	// Technique from Juriy Zaytsev
-	// http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
-	// We only care about the case where non-standard event systems
-	// are used, namely in IE. Short-circuiting here helps us to
-	// avoid an eval call (in setAttribute) which can cause CSP
-	// to go haywire. See: https://developer.mozilla.org/en/Security/CSP
-	if ( div.attachEvent ) {
-		for ( i in {
-			submit: 1,
-			change: 1,
-			focusin: 1
-		}) {
-			eventName = "on" + i;
-			isSupported = ( eventName in div );
-			if ( !isSupported ) {
-				div.setAttribute( eventName, "return;" );
-				isSupported = ( typeof div[ eventName ] === "function" );
-			}
-			support[ i + "Bubbles" ] = isSupported;
-		}
-	}
-
-	fragment.removeChild( div );
-
-	// Null elements to avoid leaks in IE
-	fragment = select = opt = div = input = null;
-
-	// Run tests that need a body at doc ready
-	jQuery(function() {
-		var container, outer, inner, table, td, offsetSupport,
-			marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight,
-			paddingMarginBorderVisibility, paddingMarginBorder,
-			body = document.getElementsByTagName("body")[0];
-
-		if ( !body ) {
-			// Return for frameset docs that don't have a body
-			return;
-		}
-
-		conMarginTop = 1;
-		paddingMarginBorder = "padding:0;margin:0;border:";
-		positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;";
-		paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;";
-		style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;";
-		html = "<div " + style + "display:block;'><div style='" + paddingMarginBorder + "0;display:block;overflow:hidden;'></div></div>" +
-			"<table " + style + "' cellpadding='0' cellspacing='0'>" +
-			"<tr><td></td></tr></table>";
-
-		container = document.createElement("div");
-		container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px";
-		body.insertBefore( container, body.firstChild );
-
-		// Construct the test element
-		div = document.createElement("div");
-		container.appendChild( div );
-
-		// Check if table cells still have offsetWidth/Height when they are set
-		// to display:none and there are still other visible table cells in a
-		// table row; if so, offsetWidth/Height are not reliable for use when
-		// determining if an element has been hidden directly using
-		// display:none (it is still safe to use offsets if a parent element is
-		// hidden; don safety goggles and see bug #4512 for more information).
-		// (only IE 8 fails this test)
-		div.innerHTML = "<table><tr><td style='" + paddingMarginBorder + "0;display:none'></td><td>t</td></tr></table>";
-		tds = div.getElementsByTagName( "td" );
-		isSupported = ( tds[ 0 ].offsetHeight === 0 );
-
-		tds[ 0 ].style.display = "";
-		tds[ 1 ].style.display = "none";
-
-		// Check if empty table cells still have offsetWidth/Height
-		// (IE <= 8 fail this test)
-		support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
-
-		// Check if div with explicit width and no margin-right incorrectly
-		// gets computed margin-right based on width of container. For more
-		// info see bug #3333
-		// Fails in WebKit before Feb 2011 nightlies
-		// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-		if ( window.getComputedStyle ) {
-			div.innerHTML = "";
-			marginDiv = document.createElement( "div" );
-			marginDiv.style.width = "0";
-			marginDiv.style.marginRight = "0";
-			div.style.width = "2px";
-			div.appendChild( marginDiv );
-			support.reliableMarginRight =
-				( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
-		}
-
-		if ( typeof div.style.zoom !== "undefined" ) {
-			// Check if natively block-level elements act like inline-block
-			// elements when setting their display to 'inline' and giving
-			// them layout
-			// (IE < 8 does this)
-			div.innerHTML = "";
-			div.style.width = div.style.padding = "1px";
-			div.style.border = 0;
-			div.style.overflow = "hidden";
-			div.style.display = "inline";
-			div.style.zoom = 1;
-			support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
-
-			// Check if elements with layout shrink-wrap their children
-			// (IE 6 does this)
-			div.style.display = "block";
-			div.style.overflow = "visible";
-			div.innerHTML = "<div style='width:5px;'></div>";
-			support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
-		}
-
-		div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility;
-		div.innerHTML = html;
-
-		outer = div.firstChild;
-		inner = outer.firstChild;
-		td = outer.nextSibling.firstChild.firstChild;
-
-		offsetSupport = {
-			doesNotAddBorder: ( inner.offsetTop !== 5 ),
-			doesAddBorderForTableAndCells: ( td.offsetTop === 5 )
-		};
-
-		inner.style.position = "fixed";
-		inner.style.top = "20px";
-
-		// safari subtracts parent border width here which is 5px
-		offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 );
-		inner.style.position = inner.style.top = "";
-
-		outer.style.overflow = "hidden";
-		outer.style.position = "relative";
-
-		offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 );
-		offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop );
-
-		if ( window.getComputedStyle ) {
-			div.style.marginTop = "1%";
-			support.pixelMargin = ( window.getComputedStyle( div, null ) || { marginTop: 0 } ).marginTop !== "1%";
-		}
-
-		if ( typeof container.style.zoom !== "undefined" ) {
-			container.style.zoom = 1;
-		}
-
-		body.removeChild( container );
-		marginDiv = div = container = null;
-
-		jQuery.extend( support, offsetSupport );
-	});
-
-	return support;
-})();
-
-
-
-
-var rbrace = /^(?:\{.*\}|\[.*\])$/,
-	rmultiDash = /([A-Z])/g;
-
-jQuery.extend({
-	cache: {},
-
-	// Please use with caution
-	uuid: 0,
-
-	// Unique for each copy of jQuery on the page
-	// Non-digits removed to match rinlinejQuery
-	expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
-
-	// The following elements throw uncatchable exceptions if you
-	// attempt to add expando properties to them.
-	noData: {
-		"embed": true,
-		// Ban all objects except for Flash (which handle expandos)
-		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
-		"applet": true
-	},
-
-	hasData: function( elem ) {
-		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
-		return !!elem && !isEmptyDataObject( elem );
-	},
-
-	data: function( elem, name, data, pvt /* Internal Use Only */ ) {
-		if ( !jQuery.acceptData( elem ) ) {
-			return;
-		}
-
-		var privateCache, thisCache, ret,
-			internalKey = jQuery.expando,
-			getByName = typeof name === "string",
-
-			// We have to handle DOM nodes and JS objects differently because IE6-7
-			// can't GC object references properly across the DOM-JS boundary
-			isNode = elem.nodeType,
-
-			// Only DOM nodes need the global jQuery cache; JS object data is
-			// attached directly to the object so GC can occur automatically
-			cache = isNode ? jQuery.cache : elem,
-
-			// Only defining an ID for JS objects if its cache already exists allows
-			// the code to shortcut on the same path as a DOM node with no cache
-			id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey,
-			isEvents = name === "events";
-
-		// Avoid doing any more work than we need to when trying to get data on an
-		// object that has no data at all
-		if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) {
-			return;
-		}
-
-		if ( !id ) {
-			// Only DOM nodes need a new unique ID for each element since their data
-			// ends up in the global cache
-			if ( isNode ) {
-				elem[ internalKey ] = id = ++jQuery.uuid;
-			} else {
-				id = internalKey;
-			}
-		}
-
-		if ( !cache[ id ] ) {
-			cache[ id ] = {};
-
-			// Avoids exposing jQuery metadata on plain JS objects when the object
-			// is serialized using JSON.stringify
-			if ( !isNode ) {
-				cache[ id ].toJSON = jQuery.noop;
-			}
-		}
-
-		// An object can be passed to jQuery.data instead of a key/value pair; this gets
-		// shallow copied over onto the existing cache
-		if ( typeof name === "object" || typeof name === "function" ) {
-			if ( pvt ) {
-				cache[ id ] = jQuery.extend( cache[ id ], name );
-			} else {
-				cache[ id ].data = jQuery.extend( cache[ id ].data, name );
-			}
-		}
-
-		privateCache = thisCache = cache[ id ];
-
-		// jQuery data() is stored in a separate object inside the object's internal data
-		// cache in order to avoid key collisions between internal data and user-defined
-		// data.
-		if ( !pvt ) {
-			if ( !thisCache.data ) {
-				thisCache.data = {};
-			}
-
-			thisCache = thisCache.data;
-		}
-
-		if ( data !== undefined ) {
-			thisCache[ jQuery.camelCase( name ) ] = data;
-		}
-
-		// Users should not attempt to inspect the internal events object using jQuery.data,
-		// it is undocumented and subject to change. But does anyone listen? No.
-		if ( isEvents && !thisCache[ name ] ) {
-			return privateCache.events;
-		}
-
-		// Check for both converted-to-camel and non-converted data property names
-		// If a data property was specified
-		if ( getByName ) {
-
-			// First Try to find as-is property data
-			ret = thisCache[ name ];
-
-			// Test for null|undefined property data
-			if ( ret == null ) {
-
-				// Try to find the camelCased property
-				ret = thisCache[ jQuery.camelCase( name ) ];
-			}
-		} else {
-			ret = thisCache;
-		}
-
-		return ret;
-	},
-
-	removeData: function( elem, name, pvt /* Internal Use Only */ ) {
-		if ( !jQuery.acceptData( elem ) ) {
-			return;
-		}
-
-		var thisCache, i, l,
-
-			// Reference to internal data cache key
-			internalKey = jQuery.expando,
-
-			isNode = elem.nodeType,
-
-			// See jQuery.data for more information
-			cache = isNode ? jQuery.cache : elem,
-
-			// See jQuery.data for more information
-			id = isNode ? elem[ internalKey ] : internalKey;
-
-		// If there is already no cache entry for this object, there is no
-		// purpose in continuing
-		if ( !cache[ id ] ) {
-			return;
-		}
-
-		if ( name ) {
-
-			thisCache = pvt ? cache[ id ] : cache[ id ].data;
-
-			if ( thisCache ) {
-
-				// Support array or space separated string names for data keys
-				if ( !jQuery.isArray( name ) ) {
-
-					// try the string as a key before any manipulation
-					if ( name in thisCache ) {
-						name = [ name ];
-					} else {
-
-						// split the camel cased version by spaces unless a key with the spaces exists
-						name = jQuery.camelCase( name );
-						if ( name in thisCache ) {
-							name = [ name ];
-						} else {
-							name = name.split( " " );
-						}
-					}
-				}
-
-				for ( i = 0, l = name.length; i < l; i++ ) {
-					delete thisCache[ name[i] ];
-				}
-
-				// If there is no data left in the cache, we want to continue
-				// and let the cache object itself get destroyed
-				if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
-					return;
-				}
-			}
-		}
-
-		// See jQuery.data for more information
-		if ( !pvt ) {
-			delete cache[ id ].data;
-
-			// Don't destroy the parent cache unless the internal data object
-			// had been the only thing left in it
-			if ( !isEmptyDataObject(cache[ id ]) ) {
-				return;
-			}
-		}
-
-		// Browsers that fail expando deletion also refuse to delete expandos on
-		// the window, but it will allow it on all other JS objects; other browsers
-		// don't care
-		// Ensure that `cache` is not a window object #10080
-		if ( jQuery.support.deleteExpando || !cache.setInterval ) {
-			delete cache[ id ];
-		} else {
-			cache[ id ] = null;
-		}
-
-		// We destroyed the cache and need to eliminate the expando on the node to avoid
-		// false lookups in the cache for entries that no longer exist
-		if ( isNode ) {
-			// IE does not allow us to delete expando properties from nodes,
-			// nor does it have a removeAttribute function on Document nodes;
-			// we must handle all of these cases
-			if ( jQuery.support.deleteExpando ) {
-				delete elem[ internalKey ];
-			} else if ( elem.removeAttribute ) {
-				elem.removeAttribute( internalKey );
-			} else {
-				elem[ internalKey ] = null;
-			}
-		}
-	},
-
-	// For internal use only.
-	_data: function( elem, name, data ) {
-		return jQuery.data( elem, name, data, true );
-	},
-
-	// A method for determining if a DOM node can handle the data expando
-	acceptData: function( elem ) {
-		if ( elem.nodeName ) {
-			var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
-
-			if ( match ) {
-				return !(match === true || elem.getAttribute("classid") !== match);
-			}
-		}
-
-		return true;
-	}
-});
-
-jQuery.fn.extend({
-	data: function( key, value ) {
-		var parts, part, attr, name, l,
-			elem = this[0],
-			i = 0,
-			data = null;
-
-		// Gets all values
-		if ( key === undefined ) {
-			if ( this.length ) {
-				data = jQuery.data( elem );
-
-				if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
-					attr = elem.attributes;
-					for ( l = attr.length; i < l; i++ ) {
-						name = attr[i].name;
-
-						if ( name.indexOf( "data-" ) === 0 ) {
-							name = jQuery.camelCase( name.substring(5) );
-
-							dataAttr( elem, name, data[ name ] );
-						}
-					}
-					jQuery._data( elem, "parsedAttrs", true );
-				}
-			}
-
-			return data;
-		}
-
-		// Sets multiple values
-		if ( typeof key === "object" ) {
-			return this.each(function() {
-				jQuery.data( this, key );
-			});
-		}
-
-		parts = key.split( ".", 2 );
-		parts[1] = parts[1] ? "." + parts[1] : "";
-		part = parts[1] + "!";
-
-		return jQuery.access( this, function( value ) {
-
-			if ( value === undefined ) {
-				data = this.triggerHandler( "getData" + part, [ parts[0] ] );
-
-				// Try to fetch any internally stored data first
-				if ( data === undefined && elem ) {
-					data = jQuery.data( elem, key );
-					data = dataAttr( elem, key, data );
-				}
-
-				return data === undefined && parts[1] ?
-					this.data( parts[0] ) :
-					data;
-			}
-
-			parts[1] = value;
-			this.each(function() {
-				var self = jQuery( this );
-
-				self.triggerHandler( "setData" + part, parts );
-				jQuery.data( this, key, value );
-				self.triggerHandler( "changeData" + part, parts );
-			});
-		}, null, value, arguments.length > 1, null, false );
-	},
-
-	removeData: function( key ) {
-		return this.each(function() {
-			jQuery.removeData( this, key );
-		});
-	}
-});
-
-function dataAttr( elem, key, data ) {
-	// If nothing was found internally, try to fetch any
-	// data from the HTML5 data-* attribute
-	if ( data === undefined && elem.nodeType === 1 ) {
-
-		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
-
-		data = elem.getAttribute( name );
-
-		if ( typeof data === "string" ) {
-			try {
-				data = data === "true" ? true :
-				data === "false" ? false :
-				data === "null" ? null :
-				jQuery.isNumeric( data ) ? +data :
-					rbrace.test( data ) ? jQuery.parseJSON( data ) :
-					data;
-			} catch( e ) {}
-
-			// Make sure we set the data so it isn't changed later
-			jQuery.data( elem, key, data );
-
-		} else {
-			data = undefined;
-		}
-	}
-
-	return data;
-}
-
-// checks a cache object for emptiness
-function isEmptyDataObject( obj ) {
-	for ( var name in obj ) {
-
-		// if the public data object is empty, the private is still empty
-		if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
-			continue;
-		}
-		if ( name !== "toJSON" ) {
-			return false;
-		}
-	}
-
-	return true;
-}
-
-
-
-
-function handleQueueMarkDefer( elem, type, src ) {
-	var deferDataKey = type + "defer",
-		queueDataKey = type + "queue",
-		markDataKey = type + "mark",
-		defer = jQuery._data( elem, deferDataKey );
-	if ( defer &&
-		( src === "queue" || !jQuery._data(elem, queueDataKey) ) &&
-		( src === "mark" || !jQuery._data(elem, markDataKey) ) ) {
-		// Give room for hard-coded callbacks to fire first
-		// and eventually mark/queue something else on the element
-		setTimeout( function() {
-			if ( !jQuery._data( elem, queueDataKey ) &&
-				!jQuery._data( elem, markDataKey ) ) {
-				jQuery.removeData( elem, deferDataKey, true );
-				defer.fire();
-			}
-		}, 0 );
-	}
-}
-
-jQuery.extend({
-
-	_mark: function( elem, type ) {
-		if ( elem ) {
-			type = ( type || "fx" ) + "mark";
-			jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 );
-		}
-	},
-
-	_unmark: function( force, elem, type ) {
-		if ( force !== true ) {
-			type = elem;
-			elem = force;
-			force = false;
-		}
-		if ( elem ) {
-			type = type || "fx";
-			var key = type + "mark",
-				count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 );
-			if ( count ) {
-				jQuery._data( elem, key, count );
-			} else {
-				jQuery.removeData( elem, key, true );
-				handleQueueMarkDefer( elem, type, "mark" );
-			}
-		}
-	},
-
-	queue: function( elem, type, data ) {
-		var q;
-		if ( elem ) {
-			type = ( type || "fx" ) + "queue";
-			q = jQuery._data( elem, type );
-
-			// Speed up dequeue by getting out quickly if this is just a lookup
-			if ( data ) {
-				if ( !q || jQuery.isArray(data) ) {
-					q = jQuery._data( elem, type, jQuery.makeArray(data) );
-				} else {
-					q.push( data );
-				}
-			}
-			return q || [];
-		}
-	},
-
-	dequeue: function( elem, type ) {
-		type = type || "fx";
-
-		var queue = jQuery.queue( elem, type ),
-			fn = queue.shift(),
-			hooks = {};
-
-		// If the fx queue is dequeued, always remove the progress sentinel
-		if ( fn === "inprogress" ) {
-			fn = queue.shift();
-		}
-
-		if ( fn ) {
-			// Add a progress sentinel to prevent the fx queue from being
-			// automatically dequeued
-			if ( type === "fx" ) {
-				queue.unshift( "inprogress" );
-			}
-
-			jQuery._data( elem, type + ".run", hooks );
-			fn.call( elem, function() {
-				jQuery.dequeue( elem, type );
-			}, hooks );
-		}
-
-		if ( !queue.length ) {
-			jQuery.removeData( elem, type + "queue " + type + ".run", true );
-			handleQueueMarkDefer( elem, type, "queue" );
-		}
-	}
-});
-
-jQuery.fn.extend({
-	queue: function( type, data ) {
-		var setter = 2;
-
-		if ( typeof type !== "string" ) {
-			data = type;
-			type = "fx";
-			setter--;
-		}
-
-		if ( arguments.length < setter ) {
-			return jQuery.queue( this[0], type );
-		}
-
-		return data === undefined ?
-			this :
-			this.each(function() {
-				var queue = jQuery.queue( this, type, data );
-
-				if ( type === "fx" && queue[0] !== "inprogress" ) {
-					jQuery.dequeue( this, type );
-				}
-			});
-	},
-	dequeue: function( type ) {
-		return this.each(function() {
-			jQuery.dequeue( this, type );
-		});
-	},
-	// Based off of the plugin by Clint Helfers, with permission.
-	// http://blindsignals.com/index.php/2009/07/jquery-delay/
-	delay: function( time, type ) {
-		time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
-		type = type || "fx";
-
-		return this.queue( type, function( next, hooks ) {
-			var timeout = setTimeout( next, time );
-			hooks.stop = function() {
-				clearTimeout( timeout );
-			};
-		});
-	},
-	clearQueue: function( type ) {
-		return this.queue( type || "fx", [] );
-	},
-	// Get a promise resolved when queues of a certain type
-	// are emptied (fx is the type by default)
-	promise: function( type, object ) {
-		if ( typeof type !== "string" ) {
-			object = type;
-			type = undefined;
-		}
-		type = type || "fx";
-		var defer = jQuery.Deferred(),
-			elements = this,
-			i = elements.length,
-			count = 1,
-			deferDataKey = type + "defer",
-			queueDataKey = type + "queue",
-			markDataKey = type + "mark",
-			tmp;
-		function resolve() {
-			if ( !( --count ) ) {
-				defer.resolveWith( elements, [ elements ] );
-			}
-		}
-		while( i-- ) {
-			if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
-					( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
-						jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
-					jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) {
-				count++;
-				tmp.add( resolve );
-			}
-		}
-		resolve();
-		return defer.promise( object );
-	}
-});
-
-
-
-
-var rclass = /[\n\t\r]/g,
-	rspace = /\s+/,
-	rreturn = /\r/g,
-	rtype = /^(?:button|input)$/i,
-	rfocusable = /^(?:button|input|object|select|textarea)$/i,
-	rclickable = /^a(?:rea)?$/i,
-	rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
-	getSetAttribute = jQuery.support.getSetAttribute,
-	nodeHook, boolHook, fixSpecified;
-
-jQuery.fn.extend({
-	attr: function( name, value ) {
-		return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
-	},
-
-	removeAttr: function( name ) {
-		return this.each(function() {
-			jQuery.removeAttr( this, name );
-		});
-	},
-
-	prop: function( name, value ) {
-		return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
-	},
-
-	removeProp: function( name ) {
-		name = jQuery.propFix[ name ] || name;
-		return this.each(function() {
-			// try/catch handles cases where IE balks (such as removing a property on window)
-			try {
-				this[ name ] = undefined;
-				delete this[ name ];
-			} catch( e ) {}
-		});
-	},
-
-	addClass: function( value ) {
-		var classNames, i, l, elem,
-			setClass, c, cl;
-
-		if ( jQuery.isFunction( value ) ) {
-			return this.each(function( j ) {
-				jQuery( this ).addClass( value.call(this, j, this.className) );
-			});
-		}
-
-		if ( value && typeof value === "string" ) {
-			classNames = value.split( rspace );
-
-			for ( i = 0, l = this.length; i < l; i++ ) {
-				elem = this[ i ];
-
-				if ( elem.nodeType === 1 ) {
-					if ( !elem.className && classNames.length === 1 ) {
-						elem.className = value;
-
-					} else {
-						setClass = " " + elem.className + " ";
-
-						for ( c = 0, cl = classNames.length; c < cl; c++ ) {
-							if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
-								setClass += classNames[ c ] + " ";
-							}
-						}
-						elem.className = jQuery.trim( setClass );
-					}
-				}
-			}
-		}
-
-		return this;
-	},
-
-	removeClass: function( value ) {
-		var classNames, i, l, elem, className, c, cl;
-
-		if ( jQuery.isFunction( value ) ) {
-			return this.each(function( j ) {
-				jQuery( this ).removeClass( value.call(this, j, this.className) );
-			});
-		}
-
-		if ( (value && typeof value === "string") || value === undefined ) {
-			classNames = ( value || "" ).split( rspace );
-
-			for ( i = 0, l = this.length; i < l; i++ ) {
-				elem = this[ i ];
-
-				if ( elem.nodeType === 1 && elem.className ) {
-					if ( value ) {
-						className = (" " + elem.className + " ").replace( rclass, " " );
-						for ( c = 0, cl = classNames.length; c < cl; c++ ) {
-							className = className.replace(" " + classNames[ c ] + " ", " ");
-						}
-						elem.className = jQuery.trim( className );
-
-					} else {
-						elem.className = "";
-					}
-				}
-			}
-		}
-
-		return this;
-	},
-
-	toggleClass: function( value, stateVal ) {
-		var type = typeof value,
-			isBool = typeof stateVal === "boolean";
-
-		if ( jQuery.isFunction( value ) ) {
-			return this.each(function( i ) {
-				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
-			});
-		}
-
-		return this.each(function() {
-			if ( type === "string" ) {
-				// toggle individual class names
-				var className,
-					i = 0,
-					self = jQuery( this ),
-					state = stateVal,
-					classNames = value.split( rspace );
-
-				while ( (className = classNames[ i++ ]) ) {
-					// check each className given, space seperated list
-					state = isBool ? state : !self.hasClass( className );
-					self[ state ? "addClass" : "removeClass" ]( className );
-				}
-
-			} else if ( type === "undefined" || type === "boolean" ) {
-				if ( this.className ) {
-					// store className if set
-					jQuery._data( this, "__className__", this.className );
-				}
-
-				// toggle whole className
-				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
-			}
-		});
-	},
-
-	hasClass: function( selector ) {
-		var className = " " + selector + " ",
-			i = 0,
-			l = this.length;
-		for ( ; i < l; i++ ) {
-			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
-				return true;
-			}
-		}
-
-		return false;
-	},
-
-	val: function( value ) {
-		var hooks, ret, isFunction,
-			elem = this[0];
-
-		if ( !arguments.length ) {
-			if ( elem ) {
-				hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
-
-				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
-					return ret;
-				}
-
-				ret = elem.value;
-
-				return typeof ret === "string" ?
-					// handle most common string cases
-					ret.replace(rreturn, "") :
-					// handle cases where value is null/undef or number
-					ret == null ? "" : ret;
-			}
-
-			return;
-		}
-
-		isFunction = jQuery.isFunction( value );
-
-		return this.each(function( i ) {
-			var self = jQuery(this), val;
-
-			if ( this.nodeType !== 1 ) {
-				return;
-			}
-
-			if ( isFunction ) {
-				val = value.call( this, i, self.val() );
-			} else {
-				val = value;
-			}
-
-			// Treat null/undefined as ""; convert numbers to string
-			if ( val == null ) {
-				val = "";
-			} else if ( typeof val === "number" ) {
-				val += "";
-			} else if ( jQuery.isArray( val ) ) {
-				val = jQuery.map(val, function ( value ) {
-					return value == null ? "" : value + "";
-				});
-			}
-
-			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
-
-			// If set returns undefined, fall back to normal setting
-			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
-				this.value = val;
-			}
-		});
-	}
-});
-
-jQuery.extend({
-	valHooks: {
-		option: {
-			get: function( elem ) {
-				// attributes.value is undefined in Blackberry 4.7 but
-				// uses .value. See #6932
-				var val = elem.attributes.value;
-				return !val || val.specified ? elem.value : elem.text;
-			}
-		},
-		select: {
-			get: function( elem ) {
-				var value, i, max, option,
-					index = elem.selectedIndex,
-					values = [],
-					options = elem.options,
-					one = elem.type === "select-one";
-
-				// Nothing was selected
-				if ( index < 0 ) {
-					return null;
-				}
-
-				// Loop through all the selected options
-				i = one ? index : 0;
-				max = one ? index + 1 : options.length;
-				for ( ; i < max; i++ ) {
-					option = options[ i ];
-
-					// Don't return options that are disabled or in a disabled optgroup
-					if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
-							(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
-
-						// Get the specific value for the option
-						value = jQuery( option ).val();
-
-						// We don't need an array for one selects
-						if ( one ) {
-							return value;
-						}
-
-						// Multi-Selects return an array
-						values.push( value );
-					}
-				}
-
-				// Fixes Bug #2551 -- select.val() broken in IE after form.reset()
-				if ( one && !values.length && options.length ) {
-					return jQuery( options[ index ] ).val();
-				}
-
-				return values;
-			},
-
-			set: function( elem, value ) {
-				var values = jQuery.makeArray( value );
-
-				jQuery(elem).find("option").each(function() {
-					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
-				});
-
-				if ( !values.length ) {
-					elem.selectedIndex = -1;
-				}
-				return values;
-			}
-		}
-	},
-
-	attrFn: {
-		val: true,
-		css: true,
-		html: true,
-		text: true,
-		data: true,
-		width: true,
-		height: true,
-		offset: true
-	},
-
-	attr: function( elem, name, value, pass ) {
-		var ret, hooks, notxml,
-			nType = elem.nodeType;
-
-		// don't get/set attributes on text, comment and attribute nodes
-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-			return;
-		}
-
-		if ( pass && name in jQuery.attrFn ) {
-			return jQuery( elem )[ name ]( value );
-		}
-
-		// Fallback to prop when attributes are not supported
-		if ( typeof elem.getAttribute === "undefined" ) {
-			return jQuery.prop( elem, name, value );
-		}
-
-		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
-		// All attributes are lowercase
-		// Grab necessary hook if one is defined
-		if ( notxml ) {
-			name = name.toLowerCase();
-			hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
-		}
-
-		if ( value !== undefined ) {
-
-			if ( value === null ) {
-				jQuery.removeAttr( elem, name );
-				return;
-
-			} else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
-				return ret;
-
-			} else {
-				elem.setAttribute( name, "" + value );
-				return value;
-			}
-
-		} else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
-			return ret;
-
-		} else {
-
-			ret = elem.getAttribute( name );
-
-			// Non-existent attributes return null, we normalize to undefined
-			return ret === null ?
-				undefined :
-				ret;
-		}
-	},
-
-	removeAttr: function( elem, value ) {
-		var propName, attrNames, name, l, isBool,
-			i = 0;
-
-		if ( value && elem.nodeType === 1 ) {
-			attrNames = value.toLowerCase().split( rspace );
-			l = attrNames.length;
-
-			for ( ; i < l; i++ ) {
-				name = attrNames[ i ];
-
-				if ( name ) {
-					propName = jQuery.propFix[ name ] || name;
-					isBool = rboolean.test( name );
-
-					// See #9699 for explanation of this approach (setting first, then removal)
-					// Do not do this for boolean attributes (see #10870)
-					if ( !isBool ) {
-						jQuery.attr( elem, name, "" );
-					}
-					elem.removeAttribute( getSetAttribute ? name : propName );
-
-					// Set corresponding property to false for boolean attributes
-					if ( isBool && propName in elem ) {
-						elem[ propName ] = false;
-					}
-				}
-			}
-		}
-	},
-
-	attrHooks: {
-		type: {
-			set: function( elem, value ) {
-				// We can't allow the type property to be changed (since it causes problems in IE)
-				if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
-					jQuery.error( "type property can't be changed" );
-				} else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
-					// Setting the type on a radio button after the value resets the value in IE6-9
-					// Reset value to it's default in case type is set after value
-					// This is for element creation
-					var val = elem.value;
-					elem.setAttribute( "type", value );
-					if ( val ) {
-						elem.value = val;
-					}
-					return value;
-				}
-			}
-		},
-		// Use the value property for back compat
-		// Use the nodeHook for button elements in IE6/7 (#1954)
-		value: {
-			get: function( elem, name ) {
-				if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
-					return nodeHook.get( elem, name );
-				}
-				return name in elem ?
-					elem.value :
-					null;
-			},
-			set: function( elem, value, name ) {
-				if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
-					return nodeHook.set( elem, value, name );
-				}
-				// Does not return so that setAttribute is also used
-				elem.value = value;
-			}
-		}
-	},
-
-	propFix: {
-		tabindex: "tabIndex",
-		readonly: "readOnly",
-		"for": "htmlFor",
-		"class": "className",
-		maxlength: "maxLength",
-		cellspacing: "cellSpacing",
-		cellpadding: "cellPadding",
-		rowspan: "rowSpan",
-		colspan: "colSpan",
-		usemap: "useMap",
-		frameborder: "frameBorder",
-		contenteditable: "contentEditable"
-	},
-
-	prop: function( elem, name, value ) {
-		var ret, hooks, notxml,
-			nType = elem.nodeType;
-
-		// don't get/set properties on text, comment and attribute nodes
-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-			return;
-		}
-
-		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
-		if ( notxml ) {
-			// Fix name and attach hooks
-			name = jQuery.propFix[ name ] || name;
-			hooks = jQuery.propHooks[ name ];
-		}
-
-		if ( value !== undefined ) {
-			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
-				return ret;
-
-			} else {
-				return ( elem[ name ] = value );
-			}
-
-		} else {
-			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
-				return ret;
-
-			} else {
-				return elem[ name ];
-			}
-		}
-	},
-
-	propHooks: {
-		tabIndex: {
-			get: function( elem ) {
-				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
-				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
-				var attributeNode = elem.getAttributeNode("tabindex");
-
-				return attributeNode && attributeNode.specified ?
-					parseInt( attributeNode.value, 10 ) :
-					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
-						0 :
-						undefined;
-			}
-		}
-	}
-});
-
-// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional)
-jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex;
-
-// Hook for boolean attributes
-boolHook = {
-	get: function( elem, name ) {
-		// Align boolean attributes with corresponding properties
-		// Fall back to attribute presence where some booleans are not supported
-		var attrNode,
-			property = jQuery.prop( elem, name );
-		return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
-			name.toLowerCase() :
-			undefined;
-	},
-	set: function( elem, value, name ) {
-		var propName;
-		if ( value === false ) {
-			// Remove boolean attributes when set to false
-			jQuery.removeAttr( elem, name );
-		} else {
-			// value is true since we know at this point it's type boolean and not false
-			// Set boolean attributes to the same name and set the DOM property
-			propName = jQuery.propFix[ name ] || name;
-			if ( propName in elem ) {
-				// Only set the IDL specifically if it already exists on the element
-				elem[ propName ] = true;
-			}
-
-			elem.setAttribute( name, name.toLowerCase() );
-		}
-		return name;
-	}
-};
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !getSetAttribute ) {
-
-	fixSpecified = {
-		name: true,
-		id: true,
-		coords: true
-	};
-
-	// Use this for any attribute in IE6/7
-	// This fixes almost every IE6/7 issue
-	nodeHook = jQuery.valHooks.button = {
-		get: function( elem, name ) {
-			var ret;
-			ret = elem.getAttributeNode( name );
-			return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ?
-				ret.nodeValue :
-				undefined;
-		},
-		set: function( elem, value, name ) {
-			// Set the existing or create a new attribute node
-			var ret = elem.getAttributeNode( name );
-			if ( !ret ) {
-				ret = document.createAttribute( name );
-				elem.setAttributeNode( ret );
-			}
-			return ( ret.nodeValue = value + "" );
-		}
-	};
-
-	// Apply the nodeHook to tabindex
-	jQuery.attrHooks.tabindex.set = nodeHook.set;
-
-	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
-	// This is for removals
-	jQuery.each([ "width", "height" ], function( i, name ) {
-		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
-			set: function( elem, value ) {
-				if ( value === "" ) {
-					elem.setAttribute( name, "auto" );
-					return value;
-				}
-			}
-		});
-	});
-
-	// Set contenteditable to false on removals(#10429)
-	// Setting to empty string throws an error as an invalid value
-	jQuery.attrHooks.contenteditable = {
-		get: nodeHook.get,
-		set: function( elem, value, name ) {
-			if ( value === "" ) {
-				value = "false";
-			}
-			nodeHook.set( elem, value, name );
-		}
-	};
-}
-
-
-// Some attributes require a special call on IE
-if ( !jQuery.support.hrefNormalized ) {
-	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
-		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
-			get: function( elem ) {
-				var ret = elem.getAttribute( name, 2 );
-				return ret === null ? undefined : ret;
-			}
-		});
-	});
-}
-
-if ( !jQuery.support.style ) {
-	jQuery.attrHooks.style = {
-		get: function( elem ) {
-			// Return undefined in the case of empty string
-			// Normalize to lowercase since IE uppercases css property names
-			return elem.style.cssText.toLowerCase() || undefined;
-		},
-		set: function( elem, value ) {
-			return ( elem.style.cssText = "" + value );
-		}
-	};
-}
-
-// Safari mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
-if ( !jQuery.support.optSelected ) {
-	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
-		get: function( elem ) {
-			var parent = elem.parentNode;
-
-			if ( parent ) {
-				parent.selectedIndex;
-
-				// Make sure that it also works with optgroups, see #5701
-				if ( parent.parentNode ) {
-					parent.parentNode.selectedIndex;
-				}
-			}
-			return null;
-		}
-	});
-}
-
-// IE6/7 call enctype encoding
-if ( !jQuery.support.enctype ) {
-	jQuery.propFix.enctype = "encoding";
-}
-
-// Radios and checkboxes getter/setter
-if ( !jQuery.support.checkOn ) {
-	jQuery.each([ "radio", "checkbox" ], function() {
-		jQuery.valHooks[ this ] = {
-			get: function( elem ) {
-				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
-				return elem.getAttribute("value") === null ? "on" : elem.value;
-			}
-		};
-	});
-}
-jQuery.each([ "radio", "checkbox" ], function() {
-	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
-		set: function( elem, value ) {
-			if ( jQuery.isArray( value ) ) {
-				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
-			}
-		}
-	});
-});
-
-
-
-
-var rformElems = /^(?:textarea|input|select)$/i,
-	rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/,
-	rhoverHack = /(?:^|\s)hover(\.\S+)?\b/,
-	rkeyEvent = /^key/,
-	rmouseEvent = /^(?:mouse|contextmenu)|click/,
-	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
-	rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
-	quickParse = function( selector ) {
-		var quick = rquickIs.exec( selector );
-		if ( quick ) {
-			//   0  1    2   3
-			// [ _, tag, id, class ]
-			quick[1] = ( quick[1] || "" ).toLowerCase();
-			quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" );
-		}
-		return quick;
-	},
-	quickIs = function( elem, m ) {
-		var attrs = elem.attributes || {};
-		return (
-			(!m[1] || elem.nodeName.toLowerCase() === m[1]) &&
-			(!m[2] || (attrs.id || {}).value === m[2]) &&
-			(!m[3] || m[3].test( (attrs[ "class" ] || {}).value ))
-		);
-	},
-	hoverHack = function( events ) {
-		return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
-	};
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
-	add: function( elem, types, handler, data, selector ) {
-
-		var elemData, eventHandle, events,
-			t, tns, type, namespaces, handleObj,
-			handleObjIn, quick, handlers, special;
-
-		// Don't attach events to noData or text/comment nodes (allow plain objects tho)
-		if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
-			return;
-		}
-
-		// Caller can pass in an object of custom data in lieu of the handler
-		if ( handler.handler ) {
-			handleObjIn = handler;
-			handler = handleObjIn.handler;
-			selector = handleObjIn.selector;
-		}
-
-		// Make sure that the handler has a unique ID, used to find/remove it later
-		if ( !handler.guid ) {
-			handler.guid = jQuery.guid++;
-		}
-
-		// Init the element's event structure and main handler, if this is the first
-		events = elemData.events;
-		if ( !events ) {
-			elemData.events = events = {};
-		}
-		eventHandle = elemData.handle;
-		if ( !eventHandle ) {
-			elemData.handle = eventHandle = function( e ) {
-				// Discard the second event of a jQuery.event.trigger() and
-				// when an event is called after a page has unloaded
-				return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
-					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
-					undefined;
-			};
-			// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
-			eventHandle.elem = elem;
-		}
-
-		// Handle multiple events separated by a space
-		// jQuery(...).bind("mouseover mouseout", fn);
-		types = jQuery.trim( hoverHack(types) ).split( " " );
-		for ( t = 0; t < types.length; t++ ) {
-
-			tns = rtypenamespace.exec( types[t] ) || [];
-			type = tns[1];
-			namespaces = ( tns[2] || "" ).split( "." ).sort();
-
-			// If event changes its type, use the special event handlers for the changed type
-			special = jQuery.event.special[ type ] || {};
-
-			// If selector defined, determine special event api type, otherwise given type
-			type = ( selector ? special.delegateType : special.bindType ) || type;
-
-			// Update special based on newly reset type
-			special = jQuery.event.special[ type ] || {};
-
-			// handleObj is passed to all event handlers
-			handleObj = jQuery.extend({
-				type: type,
-				origType: tns[1],
-				data: data,
-				handler: handler,
-				guid: handler.guid,
-				selector: selector,
-				quick: selector && quickParse( selector ),
-				namespace: namespaces.join(".")
-			}, handleObjIn );
-
-			// Init the event handler queue if we're the first
-			handlers = events[ type ];
-			if ( !handlers ) {
-				handlers = events[ type ] = [];
-				handlers.delegateCount = 0;
-
-				// Only use addEventListener/attachEvent if the special events handler returns false
-				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
-					// Bind the global event handler to the element
-					if ( elem.addEventListener ) {
-						elem.addEventListener( type, eventHandle, false );
-
-					} else if ( elem.attachEvent ) {
-						elem.attachEvent( "on" + type, eventHandle );
-					}
-				}
-			}
-
-			if ( special.add ) {
-				special.add.call( elem, handleObj );
-
-				if ( !handleObj.handler.guid ) {
-					handleObj.handler.guid = handler.guid;
-				}
-			}
-
-			// Add to the element's handler list, delegates in front
-			if ( selector ) {
-				handlers.splice( handlers.delegateCount++, 0, handleObj );
-			} else {
-				handlers.push( handleObj );
-			}
-
-			// Keep track of which events have ever been used, for event optimization
-			jQuery.event.global[ type ] = true;
-		}
-
-		// Nullify elem to prevent memory leaks in IE
-		elem = null;
-	},
-
-	global: {},
-
-	// Detach an event or set of events from an element
-	remove: function( elem, types, handler, selector, mappedTypes ) {
-
-		var elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
-			t, tns, type, origType, namespaces, origCount,
-			j, events, special, handle, eventType, handleObj;
-
-		if ( !elemData || !(events = elemData.events) ) {
-			return;
-		}
-
-		// Once for each type.namespace in types; type may be omitted
-		types = jQuery.trim( hoverHack( types || "" ) ).split(" ");
-		for ( t = 0; t < types.length; t++ ) {
-			tns = rtypenamespace.exec( types[t] ) || [];
-			type = origType = tns[1];
-			namespaces = tns[2];
-
-			// Unbind all events (on this namespace, if provided) for the element
-			if ( !type ) {
-				for ( type in events ) {
-					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
-				}
-				continue;
-			}
-
-			special = jQuery.event.special[ type ] || {};
-			type = ( selector? special.delegateType : special.bindType ) || type;
-			eventType = events[ type ] || [];
-			origCount = eventType.length;
-			namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
-
-			// Remove matching events
-			for ( j = 0; j < eventType.length; j++ ) {
-				handleObj = eventType[ j ];
-
-				if ( ( mappedTypes || origType === handleObj.origType ) &&
-					 ( !handler || handler.guid === handleObj.guid ) &&
-					 ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
-					 ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
-					eventType.splice( j--, 1 );
-
-					if ( handleObj.selector ) {
-						eventType.delegateCount--;
-					}
-					if ( special.remove ) {
-						special.remove.call( elem, handleObj );
-					}
-				}
-			}
-
-			// Remove generic event handler if we removed something and no more handlers exist
-			// (avoids potential for endless recursion during removal of special event handlers)
-			if ( eventType.length === 0 && origCount !== eventType.length ) {
-				if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
-					jQuery.removeEvent( elem, type, elemData.handle );
-				}
-
-				delete events[ type ];
-			}
-		}
-
-		// Remove the expando if it's no longer used
-		if ( jQuery.isEmptyObject( events ) ) {
-			handle = elemData.handle;
-			if ( handle ) {
-				handle.elem = null;
-			}
-
-			// removeData also checks for emptiness and clears the expando if empty
-			// so use it instead of delete
-			jQuery.removeData( elem, [ "events", "handle" ], true );
-		}
-	},
-
-	// Events that are safe to short-circuit if no handlers are attached.
-	// Native DOM events should not be added, they may have inline handlers.
-	customEvent: {
-		"getData": true,
-		"setData": true,
-		"changeData": true
-	},
-
-	trigger: function( event, data, elem, onlyHandlers ) {
-		// Don't do events on text and comment nodes
-		if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {
-			return;
-		}
-
-		// Event object or event type
-		var type = event.type || event,
-			namespaces = [],
-			cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType;
-
-		// focus/blur morphs to focusin/out; ensure we're not firing them right now
-		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
-			return;
-		}
-
-		if ( type.indexOf( "!" ) >= 0 ) {
-			// Exclusive events trigger only for the exact event (no namespaces)
-			type = type.slice(0, -1);
-			exclusive = true;
-		}
-
-		if ( type.indexOf( "." ) >= 0 ) {
-			// Namespaced trigger; create a regexp to match event type in handle()
-			namespaces = type.split(".");
-			type = namespaces.shift();
-			namespaces.sort();
-		}
-
-		if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
-			// No jQuery handlers for this event type, and it can't have inline handlers
-			return;
-		}
-
-		// Caller can pass in an Event, Object, or just an event type string
-		event = typeof event === "object" ?
-			// jQuery.Event object
-			event[ jQuery.expando ] ? event :
-			// Object literal
-			new jQuery.Event( type, event ) :
-			// Just the event type (string)
-			new jQuery.Event( type );
-
-		event.type = type;
-		event.isTrigger = true;
-		event.exclusive = exclusive;
-		event.namespace = namespaces.join( "." );
-		event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
-		ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
-
-		// Handle a global trigger
-		if ( !elem ) {
-
-			// TODO: Stop taunting the data cache; remove global events and always attach to document
-			cache = jQuery.cache;
-			for ( i in cache ) {
-				if ( cache[ i ].events && cache[ i ].events[ type ] ) {
-					jQuery.event.trigger( event, data, cache[ i ].handle.elem, true );
-				}
-			}
-			return;
-		}
-
-		// Clean up the event in case it is being reused
-		event.result = undefined;
-		if ( !event.target ) {
-			event.target = elem;
-		}
-
-		// Clone any incoming data and prepend the event, creating the handler arg list
-		data = data != null ? jQuery.makeArray( data ) : [];
-		data.unshift( event );
-
-		// Allow special events to draw outside the lines
-		special = jQuery.event.special[ type ] || {};
-		if ( special.trigger && special.trigger.apply( elem, data ) === false ) {
-			return;
-		}
-
-		// Determine event propagation path in advance, per W3C events spec (#9951)
-		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
-		eventPath = [[ elem, special.bindType || type ]];
-		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
-
-			bubbleType = special.delegateType || type;
-			cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;
-			old = null;
-			for ( ; cur; cur = cur.parentNode ) {
-				eventPath.push([ cur, bubbleType ]);
-				old = cur;
-			}
-
-			// Only add window if we got to document (e.g., not plain obj or detached DOM)
-			if ( old && old === elem.ownerDocument ) {
-				eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
-			}
-		}
-
-		// Fire handlers on the event path
-		for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {
-
-			cur = eventPath[i][0];
-			event.type = eventPath[i][1];
-
-			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
-			if ( handle ) {
-				handle.apply( cur, data );
-			}
-			// Note that this is a bare JS function and not a jQuery handler
-			handle = ontype && cur[ ontype ];
-			if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) {
-				event.preventDefault();
-			}
-		}
-		event.type = type;
-
-		// If nobody prevented the default action, do it now
-		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
-			if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
-				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
-
-				// Call a native DOM method on the target with the same name name as the event.
-				// Can't use an .isFunction() check here because IE6/7 fails that test.
-				// Don't do default actions on window, that's where global variables be (#6170)
-				// IE<9 dies on focus/blur to hidden element (#1486)
-				if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {
-
-					// Don't re-trigger an onFOO event when we call its FOO() method
-					old = elem[ ontype ];
-
-					if ( old ) {
-						elem[ ontype ] = null;
-					}
-
-					// Prevent re-triggering of the same event, since we already bubbled it above
-					jQuery.event.triggered = type;
-					elem[ type ]();
-					jQuery.event.triggered = undefined;
-
-					if ( old ) {
-						elem[ ontype ] = old;
-					}
-				}
-			}
-		}
-
-		return event.result;
-	},
-
-	dispatch: function( event ) {
-
-		// Make a writable jQuery.Event from the native event object
-		event = jQuery.event.fix( event || window.event );
-
-		var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
-			delegateCount = handlers.delegateCount,
-			args = [].slice.call( arguments, 0 ),
-			run_all = !event.exclusive && !event.namespace,
-			special = jQuery.event.special[ event.type ] || {},
-			handlerQueue = [],
-			i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related;
-
-		// Use the fix-ed jQuery.Event rather than the (read-only) native event
-		args[0] = event;
-		event.delegateTarget = this;
-
-		// Call the preDispatch hook for the mapped type, and let it bail if desired
-		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
-			return;
-		}
-
-		// Determine handlers that should run if there are delegated events
-		// Avoid non-left-click bubbling in Firefox (#3861)
-		if ( delegateCount && !(event.button && event.type === "click") ) {
-
-			// Pregenerate a single jQuery object for reuse with .is()
-			jqcur = jQuery(this);
-			jqcur.context = this.ownerDocument || this;
-
-			for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
-
-				// Don't process events on disabled elements (#6911, #8165)
-				if ( cur.disabled !== true ) {
-					selMatch = {};
-					matches = [];
-					jqcur[0] = cur;
-					for ( i = 0; i < delegateCount; i++ ) {
-						handleObj = handlers[ i ];
-						sel = handleObj.selector;
-
-						if ( selMatch[ sel ] === undefined ) {
-							selMatch[ sel ] = (
-								handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel )
-							);
-						}
-						if ( selMatch[ sel ] ) {
-							matches.push( handleObj );
-						}
-					}
-					if ( matches.length ) {
-						handlerQueue.push({ elem: cur, matches: matches });
-					}
-				}
-			}
-		}
-
-		// Add the remaining (directly-bound) handlers
-		if ( handlers.length > delegateCount ) {
-			handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });
-		}
-
-		// Run delegates first; they may want to stop propagation beneath us
-		for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
-			matched = handlerQueue[ i ];
-			event.currentTarget = matched.elem;
-
-			for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {
-				handleObj = matched.matches[ j ];
-
-				// Triggered event must either 1) be non-exclusive and have no namespace, or
-				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
-				if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
-
-					event.data = handleObj.data;
-					event.handleObj = handleObj;
-
-					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
-							.apply( matched.elem, args );
-
-					if ( ret !== undefined ) {
-						event.result = ret;
-						if ( ret === false ) {
-							event.preventDefault();
-							event.stopPropagation();
-						}
-					}
-				}
-			}
-		}
-
-		// Call the postDispatch hook for the mapped type
-		if ( special.postDispatch ) {
-			special.postDispatch.call( this, event );
-		}
-
-		return event.result;
-	},
-
-	// Includes some event props shared by KeyEvent and MouseEvent
-	// *** attrChange attrName relatedNode srcElement  are not normalized, non-W3C, deprecated, will be removed in 1.8 ***
-	props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
-
-	fixHooks: {},
-
-	keyHooks: {
-		props: "char charCode key keyCode".split(" "),
-		filter: function( event, original ) {
-
-			// Add which for key events
-			if ( event.which == null ) {
-				event.which = original.charCode != null ? original.charCode : original.keyCode;
-			}
-
-			return event;
-		}
-	},
-
-	mouseHooks: {
-		props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
-		filter: function( event, original ) {
-			var eventDoc, doc, body,
-				button = original.button,
-				fromElement = original.fromElement;
-
-			// Calculate pageX/Y if missing and clientX/Y available
-			if ( event.pageX == null && original.clientX != null ) {
-				eventDoc = event.target.ownerDocument || document;
-				doc = eventDoc.documentElement;
-				body = eventDoc.body;
-
-				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
-				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
-			}
-
-			// Add relatedTarget, if necessary
-			if ( !event.relatedTarget && fromElement ) {
-				event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
-			}
-
-			// Add which for click: 1 === left; 2 === middle; 3 === right
-			// Note: button is not normalized, so don't use it
-			if ( !event.which && button !== undefined ) {
-				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
-			}
-
-			return event;
-		}
-	},
-
-	fix: function( event ) {
-		if ( event[ jQuery.expando ] ) {
-			return event;
-		}
-
-		// Create a writable copy of the event object and normalize some properties
-		var i, prop,
-			originalEvent = event,
-			fixHook = jQuery.event.fixHooks[ event.type ] || {},
-			copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
-
-		event = jQuery.Event( originalEvent );
-
-		for ( i = copy.length; i; ) {
-			prop = copy[ --i ];
-			event[ prop ] = originalEvent[ prop ];
-		}
-
-		// Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)
-		if ( !event.target ) {
-			event.target = originalEvent.srcElement || document;
-		}
-
-		// Target should not be a text node (#504, Safari)
-		if ( event.target.nodeType === 3 ) {
-			event.target = event.target.parentNode;
-		}
-
-		// For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8)
-		if ( event.metaKey === undefined ) {
-			event.metaKey = event.ctrlKey;
-		}
-
-		return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
-	},
-
-	special: {
-		ready: {
-			// Make sure the ready event is setup
-			setup: jQuery.bindReady
-		},
-
-		load: {
-			// Prevent triggered image.load events from bubbling to window.load
-			noBubble: true
-		},
-
-		focus: {
-			delegateType: "focusin"
-		},
-		blur: {
-			delegateType: "focusout"
-		},
-
-		beforeunload: {
-			setup: function( data, namespaces, eventHandle ) {
-				// We only want to do this special case on windows
-				if ( jQuery.isWindow( this ) ) {
-					this.onbeforeunload = eventHandle;
-				}
-			},
-
-			teardown: function( namespaces, eventHandle ) {
-				if ( this.onbeforeunload === eventHandle ) {
-					this.onbeforeunload = null;
-				}
-			}
-		}
-	},
-
-	simulate: function( type, elem, event, bubble ) {
-		// Piggyback on a donor event to simulate a different one.
-		// Fake originalEvent to avoid donor's stopPropagation, but if the
-		// simulated event prevents default then we do the same on the donor.
-		var e = jQuery.extend(
-			new jQuery.Event(),
-			event,
-			{ type: type,
-				isSimulated: true,
-				originalEvent: {}
-			}
-		);
-		if ( bubble ) {
-			jQuery.event.trigger( e, null, elem );
-		} else {
-			jQuery.event.dispatch.call( elem, e );
-		}
-		if ( e.isDefaultPrevented() ) {
-			event.preventDefault();
-		}
-	}
-};
-
-// Some plugins are using, but it's undocumented/deprecated and will be removed.
-// The 1.7 special event interface should provide all the hooks needed now.
-jQuery.event.handle = jQuery.event.dispatch;
-
-jQuery.removeEvent = document.removeEventListener ?
-	function( elem, type, handle ) {
-		if ( elem.removeEventListener ) {
-			elem.removeEventListener( type, handle, false );
-		}
-	} :
-	function( elem, type, handle ) {
-		if ( elem.detachEvent ) {
-			elem.detachEvent( "on" + type, handle );
-		}
-	};
-
-jQuery.Event = function( src, props ) {
-	// Allow instantiation without the 'new' keyword
-	if ( !(this instanceof jQuery.Event) ) {
-		return new jQuery.Event( src, props );
-	}
-
-	// Event object
-	if ( src && src.type ) {
-		this.originalEvent = src;
-		this.type = src.type;
-
-		// Events bubbling up the document may have been marked as prevented
-		// by a handler lower down the tree; reflect the correct value.
-		this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
-			src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
-
-	// Event type
-	} else {
-		this.type = src;
-	}
-
-	// Put explicitly provided properties onto the event object
-	if ( props ) {
-		jQuery.extend( this, props );
-	}
-
-	// Create a timestamp if incoming event doesn't have one
-	this.timeStamp = src && src.timeStamp || jQuery.now();
-
-	// Mark it as fixed
-	this[ jQuery.expando ] = true;
-};
-
-function returnFalse() {
-	return false;
-}
-function returnTrue() {
-	return true;
-}
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
-	preventDefault: function() {
-		this.isDefaultPrevented = returnTrue;
-
-		var e = this.originalEvent;
-		if ( !e ) {
-			return;
-		}
-
-		// if preventDefault exists run it on the original event
-		if ( e.preventDefault ) {
-			e.preventDefault();
-
-		// otherwise set the returnValue property of the original event to false (IE)
-		} else {
-			e.returnValue = false;
-		}
-	},
-	stopPropagation: function() {
-		this.isPropagationStopped = returnTrue;
-
-		var e = this.originalEvent;
-		if ( !e ) {
-			return;
-		}
-		// if stopPropagation exists run it on the original event
-		if ( e.stopPropagation ) {
-			e.stopPropagation();
-		}
-		// otherwise set the cancelBubble property of the original event to true (IE)
-		e.cancelBubble = true;
-	},
-	stopImmediatePropagation: function() {
-		this.isImmediatePropagationStopped = returnTrue;
-		this.stopPropagation();
-	},
-	isDefaultPrevented: returnFalse,
-	isPropagationStopped: returnFalse,
-	isImmediatePropagationStopped: returnFalse
-};
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-jQuery.each({
-	mouseenter: "mouseover",
-	mouseleave: "mouseout"
-}, function( orig, fix ) {
-	jQuery.event.special[ orig ] = {
-		delegateType: fix,
-		bindType: fix,
-
-		handle: function( event ) {
-			var target = this,
-				related = event.relatedTarget,
-				handleObj = event.handleObj,
-				selector = handleObj.selector,
-				ret;
-
-			// For mousenter/leave call the handler if related is outside the target.
-			// NB: No relatedTarget if the mouse left/entered the browser window
-			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
-				event.type = handleObj.origType;
-				ret = handleObj.handler.apply( this, arguments );
-				event.type = fix;
-			}
-			return ret;
-		}
-	};
-});
-
-// IE submit delegation
-if ( !jQuery.support.submitBubbles ) {
-
-	jQuery.event.special.submit = {
-		setup: function() {
-			// Only need this for delegated form submit events
-			if ( jQuery.nodeName( this, "form" ) ) {
-				return false;
-			}
-
-			// Lazy-add a submit handler when a descendant form may potentially be submitted
-			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
-				// Node name check avoids a VML-related crash in IE (#9807)
-				var elem = e.target,
-					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
-				if ( form && !form._submit_attached ) {
-					jQuery.event.add( form, "submit._submit", function( event ) {
-						event._submit_bubble = true;
-					});
-					form._submit_attached = true;
-				}
-			});
-			// return undefined since we don't need an event listener
-		},
-		
-		postDispatch: function( event ) {
-			// If form was submitted by the user, bubble the event up the tree
-			if ( event._submit_bubble ) {
-				delete event._submit_bubble;
-				if ( this.parentNode && !event.isTrigger ) {
-					jQuery.event.simulate( "submit", this.parentNode, event, true );
-				}
-			}
-		},
-
-		teardown: function() {
-			// Only need this for delegated form submit events
-			if ( jQuery.nodeName( this, "form" ) ) {
-				return false;
-			}
-
-			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above
-			jQuery.event.remove( this, "._submit" );
-		}
-	};
-}
-
-// IE change delegation and checkbox/radio fix
-if ( !jQuery.support.changeBubbles ) {
-
-	jQuery.event.special.change = {
-
-		setup: function() {
-
-			if ( rformElems.test( this.nodeName ) ) {
-				// IE doesn't fire change on a check/radio until blur; trigger it on click
-				// after a propertychange. Eat the blur-change in special.change.handle.
-				// This still fires onchange a second time for check/radio after blur.
-				if ( this.type === "checkbox" || this.type === "radio" ) {
-					jQuery.event.add( this, "propertychange._change", function( event ) {
-						if ( event.originalEvent.propertyName === "checked" ) {
-							this._just_changed = true;
-						}
-					});
-					jQuery.event.add( this, "click._change", function( event ) {
-						if ( this._just_changed && !event.isTrigger ) {
-							this._just_changed = false;
-							jQuery.event.simulate( "change", this, event, true );
-						}
-					});
-				}
-				return false;
-			}
-			// Delegated event; lazy-add a change handler on descendant inputs
-			jQuery.event.add( this, "beforeactivate._change", function( e ) {
-				var elem = e.target;
-
-				if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) {
-					jQuery.event.add( elem, "change._change", function( event ) {
-						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
-							jQuery.event.simulate( "change", this.parentNode, event, true );
-						}
-					});
-					elem._change_attached = true;
-				}
-			});
-		},
-
-		handle: function( event ) {
-			var elem = event.target;
-
-			// Swallow native change events from checkbox/radio, we already triggered them above
-			if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
-				return event.handleObj.handler.apply( this, arguments );
-			}
-		},
-
-		teardown: function() {
-			jQuery.event.remove( this, "._change" );
-
-			return rformElems.test( this.nodeName );
-		}
-	};
-}
-
-// Create "bubbling" focus and blur events
-if ( !jQuery.support.focusinBubbles ) {
-	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
-		// Attach a single capturing handler while someone wants focusin/focusout
-		var attaches = 0,
-			handler = function( event ) {
-				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
-			};
-
-		jQuery.event.special[ fix ] = {
-			setup: function() {
-				if ( attaches++ === 0 ) {
-					document.addEventListener( orig, handler, true );
-				}
-			},
-			teardown: function() {
-				if ( --attaches === 0 ) {
-					document.removeEventListener( orig, handler, true );
-				}
-			}
-		};
-	});
-}
-
-jQuery.fn.extend({
-
-	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
-		var origFn, type;
-
-		// Types can be a map of types/handlers
-		if ( typeof types === "object" ) {
-			// ( types-Object, selector, data )
-			if ( typeof selector !== "string" ) { // && selector != null
-				// ( types-Object, data )
-				data = data || selector;
-				selector = undefined;
-			}
-			for ( type in types ) {
-				this.on( type, selector, data, types[ type ], one );
-			}
-			return this;
-		}
-
-		if ( data == null && fn == null ) {
-			// ( types, fn )
-			fn = selector;
-			data = selector = undefined;
-		} else if ( fn == null ) {
-			if ( typeof selector === "string" ) {
-				// ( types, selector, fn )
-				fn = data;
-				data = undefined;
-			} else {
-				// ( types, data, fn )
-				fn = data;
-				data = selector;
-				selector = undefined;
-			}
-		}
-		if ( fn === false ) {
-			fn = returnFalse;
-		} else if ( !fn ) {
-			return this;
-		}
-
-		if ( one === 1 ) {
-			origFn = fn;
-			fn = function( event ) {
-				// Can use an empty set, since event contains the info
-				jQuery().off( event );
-				return origFn.apply( this, arguments );
-			};
-			// Use same guid so caller can remove using origFn
-			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
-		}
-		return this.each( function() {
-			jQuery.event.add( this, types, fn, data, selector );
-		});
-	},
-	one: function( types, selector, data, fn ) {
-		return this.on( types, selector, data, fn, 1 );
-	},
-	off: function( types, selector, fn ) {
-		if ( types && types.preventDefault && types.handleObj ) {
-			// ( event )  dispatched jQuery.Event
-			var handleObj = types.handleObj;
-			jQuery( types.delegateTarget ).off(
-				handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
-				handleObj.selector,
-				handleObj.handler
-			);
-			return this;
-		}
-		if ( typeof types === "object" ) {
-			// ( types-object [, selector] )
-			for ( var type in types ) {
-				this.off( type, selector, types[ type ] );
-			}
-			return this;
-		}
-		if ( selector === false || typeof selector === "function" ) {
-			// ( types [, fn] )
-			fn = selector;
-			selector = undefined;
-		}
-		if ( fn === false ) {
-			fn = returnFalse;
-		}
-		return this.each(function() {
-			jQuery.event.remove( this, types, fn, selector );
-		});
-	},
-
-	bind: function( types, data, fn ) {
-		return this.on( types, null, data, fn );
-	},
-	unbind: function( types, fn ) {
-		return this.off( types, null, fn );
-	},
-
-	live: function( types, data, fn ) {
-		jQuery( this.context ).on( types, this.selector, data, fn );
-		return this;
-	},
-	die: function( types, fn ) {
-		jQuery( this.context ).off( types, this.selector || "**", fn );
-		return this;
-	},
-
-	delegate: function( selector, types, data, fn ) {
-		return this.on( types, selector, data, fn );
-	},
-	undelegate: function( selector, types, fn ) {
-		// ( namespace ) or ( selector, types [, fn] )
-		return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn );
-	},
-
-	trigger: function( type, data ) {
-		return this.each(function() {
-			jQuery.event.trigger( type, data, this );
-		});
-	},
-	triggerHandler: function( type, data ) {
-		if ( this[0] ) {
-			return jQuery.event.trigger( type, data, this[0], true );
-		}
-	},
-
-	toggle: function( fn ) {
-		// Save reference to arguments for access in closure
-		var args = arguments,
-			guid = fn.guid || jQuery.guid++,
-			i = 0,
-			toggler = function( event ) {
-				// Figure out which function to execute
-				var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
-				jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
-
-				// Make sure that clicks stop
-				event.preventDefault();
-
-				// and execute the function
-				return args[ lastToggle ].apply( this, arguments ) || false;
-			};
-
-		// link all the functions, so any of them can unbind this click handler
-		toggler.guid = guid;
-		while ( i < args.length ) {
-			args[ i++ ].guid = guid;
-		}
-
-		return this.click( toggler );
-	},
-
-	hover: function( fnOver, fnOut ) {
-		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
-	}
-});
-
-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
-	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
-	"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
-
-	// Handle event binding
-	jQuery.fn[ name ] = function( data, fn ) {
-		if ( fn == null ) {
-			fn = data;
-			data = null;
-		}
-
-		return arguments.length > 0 ?
-			this.on( name, null, data, fn ) :
-			this.trigger( name );
-	};
-
-	if ( jQuery.attrFn ) {
-		jQuery.attrFn[ name ] = true;
-	}
-
-	if ( rkeyEvent.test( name ) ) {
-		jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
-	}
-
-	if ( rmouseEvent.test( name ) ) {
-		jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
-	}
-});
-
-
-
-/*
- * Sizzle CSS Selector Engine
- *  Copyright 2011, The Dojo Foundation
- *  Released under the MIT, BSD, and GPL Licenses.
- *  More information: http://sizzlejs.com/
- */
-(function(){
-
-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
-	expando = "sizcache" + (Math.random() + '').replace('.', ''),
-	done = 0,
-	toString = Object.prototype.toString,
-	hasDuplicate = false,
-	baseHasDuplicate = true,
-	rBackslash = /\\/g,
-	rReturn = /\r\n/g,
-	rNonWord = /\W/;
-
-// Here we check if the JavaScript engine is using some sort of
-// optimization where it does not always call our comparision
-// function. If that is the case, discard the hasDuplicate value.
-//   Thus far that includes Google Chrome.
-[0, 0].sort(function() {
-	baseHasDuplicate = false;
-	return 0;
-});
-
-var Sizzle = function( selector, context, results, seed ) {
-	results = results || [];
-	context = context || document;
-
-	var origContext = context;
-
-	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
-		return [];
-	}
-
-	if ( !selector || typeof selector !== "string" ) {
-		return results;
-	}
-
-	var m, set, checkSet, extra, ret, cur, pop, i,
-		prune = true,
-		contextXML = Sizzle.isXML( context ),
-		parts = [],
-		soFar = selector;
-
-	// Reset the position of the chunker regexp (start from head)
-	do {
-		chunker.exec( "" );
-		m = chunker.exec( soFar );
-
-		if ( m ) {
-			soFar = m[3];
-
-			parts.push( m[1] );
-
-			if ( m[2] ) {
-				extra = m[3];
-				break;
-			}
-		}
-	} while ( m );
-
-	if ( parts.length > 1 && origPOS.exec( selector ) ) {
-
-		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
-			set = posProcess( parts[0] + parts[1], context, seed );
-
-		} else {
-			set = Expr.relative[ parts[0] ] ?
-				[ context ] :
-				Sizzle( parts.shift(), context );
-
-			while ( parts.length ) {
-				selector = parts.shift();
-
-				if ( Expr.relative[ selector ] ) {
-					selector += parts.shift();
-				}
-
-				set = posProcess( selector, set, seed );
-			}
-		}
-
-	} else {
-		// Take a shortcut and set the context if the root selector is an ID
-		// (but not if it'll be faster if the inner selector is an ID)
-		if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
-				Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
-
-			ret = Sizzle.find( parts.shift(), context, contextXML );
-			context = ret.expr ?
-				Sizzle.filter( ret.expr, ret.set )[0] :
-				ret.set[0];
-		}
-
-		if ( context ) {
-			ret = seed ?
-				{ expr: parts.pop(), set: makeArray(seed) } :
-				Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
-
-			set = ret.expr ?
-				Sizzle.filter( ret.expr, ret.set ) :
-				ret.set;
-
-			if ( parts.length > 0 ) {
-				checkSet = makeArray( set );
-
-			} else {
-				prune = false;
-			}
-
-			while ( parts.length ) {
-				cur = parts.pop();
-				pop = cur;
-
-				if ( !Expr.relative[ cur ] ) {
-					cur = "";
-				} else {
-					pop = parts.pop();
-				}
-
-				if ( pop == null ) {
-					pop = context;
-				}
-
-				Expr.relative[ cur ]( checkSet, pop, contextXML );
-			}
-
-		} else {
-			checkSet = parts = [];
-		}
-	}
-
-	if ( !checkSet ) {
-		checkSet = set;
-	}
-
-	if ( !checkSet ) {
-		Sizzle.error( cur || selector );
-	}
-
-	if ( toString.call(checkSet) === "[object Array]" ) {
-		if ( !prune ) {
-			results.push.apply( results, checkSet );
-
-		} else if ( context && context.nodeType === 1 ) {
-			for ( i = 0; checkSet[i] != null; i++ ) {
-				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
-					results.push( set[i] );
-				}
-			}
-
-		} else {
-			for ( i = 0; checkSet[i] != null; i++ ) {
-				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
-					results.push( set[i] );
-				}
-			}
-		}
-
-	} else {
-		makeArray( checkSet, results );
-	}
-
-	if ( extra ) {
-		Sizzle( extra, origContext, results, seed );
-		Sizzle.uniqueSort( results );
-	}
-
-	return results;
-};
-
-Sizzle.uniqueSort = function( results ) {
-	if ( sortOrder ) {
-		hasDuplicate = baseHasDuplicate;
-		results.sort( sortOrder );
-
-		if ( hasDuplicate ) {
-			for ( var i = 1; i < results.length; i++ ) {
-				if ( results[i] === results[ i - 1 ] ) {
-					results.splice( i--, 1 );
-				}
-			}
-		}
-	}
-
-	return results;
-};
-
-Sizzle.matches = function( expr, set ) {
-	return Sizzle( expr, null, null, set );
-};
-
-Sizzle.matchesSelector = function( node, expr ) {
-	return Sizzle( expr, null, null, [node] ).length > 0;
-};
-
-Sizzle.find = function( expr, context, isXML ) {
-	var set, i, len, match, type, left;
-
-	if ( !expr ) {
-		return [];
-	}
-
-	for ( i = 0, len = Expr.order.length; i < len; i++ ) {
-		type = Expr.order[i];
-
-		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
-			left = match[1];
-			match.splice( 1, 1 );
-
-			if ( left.substr( left.length - 1 ) !== "\\" ) {
-				match[1] = (match[1] || "").replace( rBackslash, "" );
-				set = Expr.find[ type ]( match, context, isXML );
-
-				if ( set != null ) {
-					expr = expr.replace( Expr.match[ type ], "" );
-					break;
-				}
-			}
-		}
-	}
-
-	if ( !set ) {
-		set = typeof context.getElementsByTagName !== "undefined" ?
-			context.getElementsByTagName( "*" ) :
-			[];
-	}
-
-	return { set: set, expr: expr };
-};
-
-Sizzle.filter = function( expr, set, inplace, not ) {
-	var match, anyFound,
-		type, found, item, filter, left,
-		i, pass,
-		old = expr,
-		result = [],
-		curLoop = set,
-		isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
-
-	while ( expr && set.length ) {
-		for ( type in Expr.filter ) {
-			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
-				filter = Expr.filter[ type ];
-				left = match[1];
-
-				anyFound = false;
-
-				match.splice(1,1);
-
-				if ( left.substr( left.length - 1 ) === "\\" ) {
-					continue;
-				}
-
-				if ( curLoop === result ) {
-					result = [];
-				}
-
-				if ( Expr.preFilter[ type ] ) {
-					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
-
-					if ( !match ) {
-						anyFound = found = true;
-
-					} else if ( match === true ) {
-						continue;
-					}
-				}
-
-				if ( match ) {
-					for ( i = 0; (item = curLoop[i]) != null; i++ ) {
-						if ( item ) {
-							found = filter( item, match, i, curLoop );
-							pass = not ^ found;
-
-							if ( inplace && found != null ) {
-								if ( pass ) {
-									anyFound = true;
-
-								} else {
-									curLoop[i] = false;
-								}
-
-							} else if ( pass ) {
-								result.push( item );
-								anyFound = true;
-							}
-						}
-					}
-				}
-
-				if ( found !== undefined ) {
-					if ( !inplace ) {
-						curLoop = result;
-					}
-
-					expr = expr.replace( Expr.match[ type ], "" );
-
-					if ( !anyFound ) {
-						return [];
-					}
-
-					break;
-				}
-			}
-		}
-
-		// Improper expression
-		if ( expr === old ) {
-			if ( anyFound == null ) {
-				Sizzle.error( expr );
-
-			} else {
-				break;
-			}
-		}
-
-		old = expr;
-	}
-
-	return curLoop;
-};
-
-Sizzle.error = function( msg ) {
-	throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Utility function for retreiving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-var getText = Sizzle.getText = function( elem ) {
-    var i, node,
-		nodeType = elem.nodeType,
-		ret = "";
-
-	if ( nodeType ) {
-		if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
-			// Use textContent || innerText for elements
-			if ( typeof elem.textContent === 'string' ) {
-				return elem.textContent;
-			} else if ( typeof elem.innerText === 'string' ) {
-				// Replace IE's carriage returns
-				return elem.innerText.replace( rReturn, '' );
-			} else {
-				// Traverse it's children
-				for ( elem = elem.firstChild; elem; elem = elem.nextSibling) {
-					ret += getText( elem );
-				}
-			}
-		} else if ( nodeType === 3 || nodeType === 4 ) {
-			return elem.nodeValue;
-		}
-	} else {
-
-		// If no nodeType, this is expected to be an array
-		for ( i = 0; (node = elem[i]); i++ ) {
-			// Do not traverse comment nodes
-			if ( node.nodeType !== 8 ) {
-				ret += getText( node );
-			}
-		}
-	}
-	return ret;
-};
-
-var Expr = Sizzle.selectors = {
-	order: [ "ID", "NAME", "TAG" ],
-
-	match: {
-		ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
-		CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
-		NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
-		ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
-		TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
-		CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
-		POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
-		PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
-	},
-
-	leftMatch: {},
-
-	attrMap: {
-		"class": "className",
-		"for": "htmlFor"
-	},
-
-	attrHandle: {
-		href: function( elem ) {
-			return elem.getAttribute( "href" );
-		},
-		type: function( elem ) {
-			return elem.getAttribute( "type" );
-		}
-	},
-
-	relative: {
-		"+": function(checkSet, part){
-			var isPartStr = typeof part === "string",
-				isTag = isPartStr && !rNonWord.test( part ),
-				isPartStrNotTag = isPartStr && !isTag;
-
-			if ( isTag ) {
-				part = part.toLowerCase();
-			}
-
-			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
-				if ( (elem = checkSet[i]) ) {
-					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
-
-					checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
-						elem || false :
-						elem === part;
-				}
-			}
-
-			if ( isPartStrNotTag ) {
-				Sizzle.filter( part, checkSet, true );
-			}
-		},
-
-		">": function( checkSet, part ) {
-			var elem,
-				isPartStr = typeof part === "string",
-				i = 0,
-				l = checkSet.length;
-
-			if ( isPartStr && !rNonWord.test( part ) ) {
-				part = part.toLowerCase();
-
-				for ( ; i < l; i++ ) {
-					elem = checkSet[i];
-
-					if ( elem ) {
-						var parent = elem.parentNode;
-						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
-					}
-				}
-
-			} else {
-				for ( ; i < l; i++ ) {
-					elem = checkSet[i];
-
-					if ( elem ) {
-						checkSet[i] = isPartStr ?
-							elem.parentNode :
-							elem.parentNode === part;
-					}
-				}
-
-				if ( isPartStr ) {
-					Sizzle.filter( part, checkSet, true );
-				}
-			}
-		},
-
-		"": function(checkSet, part, isXML){
-			var nodeCheck,
-				doneName = done++,
-				checkFn = dirCheck;
-
-			if ( typeof part === "string" && !rNonWord.test( part ) ) {
-				part = part.toLowerCase();
-				nodeCheck = part;
-				checkFn = dirNodeCheck;
-			}
-
-			checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
-		},
-
-		"~": function( checkSet, part, isXML ) {
-			var nodeCheck,
-				doneName = done++,
-				checkFn = dirCheck;
-
-			if ( typeof part === "string" && !rNonWord.test( part ) ) {
-				part = part.toLowerCase();
-				nodeCheck = part;
-				checkFn = dirNodeCheck;
-			}
-
-			checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
-		}
-	},
-
-	find: {
-		ID: function( match, context, isXML ) {
-			if ( typeof context.getElementById !== "undefined" && !isXML ) {
-				var m = context.getElementById(match[1]);
-				// Check parentNode to catch when Blackberry 4.6 returns
-				// nodes that are no longer in the document #6963
-				return m && m.parentNode ? [m] : [];
-			}
-		},
-
-		NAME: function( match, context ) {
-			if ( typeof context.getElementsByName !== "undefined" ) {
-				var ret = [],
-					results = context.getElementsByName( match[1] );
-
-				for ( var i = 0, l = results.length; i < l; i++ ) {
-					if ( results[i].getAttribute("name") === match[1] ) {
-						ret.push( results[i] );
-					}
-				}
-
-				return ret.length === 0 ? null : ret;
-			}
-		},
-
-		TAG: function( match, context ) {
-			if ( typeof context.getElementsByTagName !== "undefined" ) {
-				return context.getElementsByTagName( match[1] );
-			}
-		}
-	},
-	preFilter: {
-		CLASS: function( match, curLoop, inplace, result, not, isXML ) {
-			match = " " + match[1].replace( rBackslash, "" ) + " ";
-
-			if ( isXML ) {
-				return match;
-			}
-
-			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
-				if ( elem ) {
-					if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
-						if ( !inplace ) {
-							result.push( elem );
-						}
-
-					} else if ( inplace ) {
-						curLoop[i] = false;
-					}
-				}
-			}
-
-			return false;
-		},
-
-		ID: function( match ) {
-			return match[1].replace( rBackslash, "" );
-		},
-
-		TAG: function( match, curLoop ) {
-			return match[1].replace( rBackslash, "" ).toLowerCase();
-		},
-
-		CHILD: function( match ) {
-			if ( match[1] === "nth" ) {
-				if ( !match[2] ) {
-					Sizzle.error( match[0] );
-				}
-
-				match[2] = match[2].replace(/^\+|\s*/g, '');
-
-				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
-				var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
-					match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
-					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
-
-				// calculate the numbers (first)n+(last) including if they are negative
-				match[2] = (test[1] + (test[2] || 1)) - 0;
-				match[3] = test[3] - 0;
-			}
-			else if ( match[2] ) {
-				Sizzle.error( match[0] );
-			}
-
-			// TODO: Move to normal caching system
-			match[0] = done++;
-
-			return match;
-		},
-
-		ATTR: function( match, curLoop, inplace, result, not, isXML ) {
-			var name = match[1] = match[1].replace( rBackslash, "" );
-
-			if ( !isXML && Expr.attrMap[name] ) {
-				match[1] = Expr.attrMap[name];
-			}
-
-			// Handle if an un-quoted value was used
-			match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
-
-			if ( match[2] === "~=" ) {
-				match[4] = " " + match[4] + " ";
-			}
-
-			return match;
-		},
-
-		PSEUDO: function( match, curLoop, inplace, result, not ) {
-			if ( match[1] === "not" ) {
-				// If we're dealing with a complex expression, or a simple one
-				if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
-					match[3] = Sizzle(match[3], null, null, curLoop);
-
-				} else {
-					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
-
-					if ( !inplace ) {
-						result.push.apply( result, ret );
-					}
-
-					return false;
-				}
-
-			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
-				return true;
-			}
-
-			return match;
-		},
-
-		POS: function( match ) {
-			match.unshift( true );
-
-			return match;
-		}
-	},
-
-	filters: {
-		enabled: function( elem ) {
-			return elem.disabled === false && elem.type !== "hidden";
-		},
-
-		disabled: function( elem ) {
-			return elem.disabled === true;
-		},
-
-		checked: function( elem ) {
-			return elem.checked === true;
-		},
-
-		selected: function( elem ) {
-			// Accessing this property makes selected-by-default
-			// options in Safari work properly
-			if ( elem.parentNode ) {
-				elem.parentNode.selectedIndex;
-			}
-
-			return elem.selected === true;
-		},
-
-		parent: function( elem ) {
-			return !!elem.firstChild;
-		},
-
-		empty: function( elem ) {
-			return !elem.firstChild;
-		},
-
-		has: function( elem, i, match ) {
-			return !!Sizzle( match[3], elem ).length;
-		},
-
-		header: function( elem ) {
-			return (/h\d/i).test( elem.nodeName );
-		},
-
-		text: function( elem ) {
-			var attr = elem.getAttribute( "type" ), type = elem.type;
-			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
-			// use getAttribute instead to test this case
-			return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
-		},
-
-		radio: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
-		},
-
-		checkbox: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
-		},
-
-		file: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
-		},
-
-		password: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
-		},
-
-		submit: function( elem ) {
-			var name = elem.nodeName.toLowerCase();
-			return (name === "input" || name === "button") && "submit" === elem.type;
-		},
-
-		image: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
-		},
-
-		reset: function( elem ) {
-			var name = elem.nodeName.toLowerCase();
-			return (name === "input" || name === "button") && "reset" === elem.type;
-		},
-
-		button: function( elem ) {
-			var name = elem.nodeName.toLowerCase();
-			return name === "input" && "button" === elem.type || name === "button";
-		},
-
-		input: function( elem ) {
-			return (/input|select|textarea|button/i).test( elem.nodeName );
-		},
-
-		focus: function( elem ) {
-			return elem === elem.ownerDocument.activeElement;
-		}
-	},
-	setFilters: {
-		first: function( elem, i ) {
-			return i === 0;
-		},
-
-		last: function( elem, i, match, array ) {
-			return i === array.length - 1;
-		},
-
-		even: function( elem, i ) {
-			return i % 2 === 0;
-		},
-
-		odd: function( elem, i ) {
-			return i % 2 === 1;
-		},
-
-		lt: function( elem, i, match ) {
-			return i < match[3] - 0;
-		},
-
-		gt: function( elem, i, match ) {
-			return i > match[3] - 0;
-		},
-
-		nth: function( elem, i, match ) {
-			return match[3] - 0 === i;
-		},
-
-		eq: function( elem, i, match ) {
-			return match[3] - 0 === i;
-		}
-	},
-	filter: {
-		PSEUDO: function( elem, match, i, array ) {
-			var name = match[1],
-				filter = Expr.filters[ name ];
-
-			if ( filter ) {
-				return filter( elem, i, match, array );
-
-			} else if ( name === "contains" ) {
-				return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
-
-			} else if ( name === "not" ) {
-				var not = match[3];
-
-				for ( var j = 0, l = not.length; j < l; j++ ) {
-					if ( not[j] === elem ) {
-						return false;
-					}
-				}
-
-				return true;
-
-			} else {
-				Sizzle.error( name );
-			}
-		},
-
-		CHILD: function( elem, match ) {
-			var first, last,
-				doneName, parent, cache,
-				count, diff,
-				type = match[1],
-				node = elem;
-
-			switch ( type ) {
-				case "only":
-				case "first":
-					while ( (node = node.previousSibling) ) {
-						if ( node.nodeType === 1 ) {
-							return false;
-						}
-					}
-
-					if ( type === "first" ) {
-						return true;
-					}
-
-					node = elem;
-
-					/* falls through */
-				case "last":
-					while ( (node = node.nextSibling) ) {
-						if ( node.nodeType === 1 ) {
-							return false;
-						}
-					}
-
-					return true;
-
-				case "nth":
-					first = match[2];
-					last = match[3];
-
-					if ( first === 1 && last === 0 ) {
-						return true;
-					}
-
-					doneName = match[0];
-					parent = elem.parentNode;
-
-					if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
-						count = 0;
-
-						for ( node = parent.firstChild; node; node = node.nextSibling ) {
-							if ( node.nodeType === 1 ) {
-								node.nodeIndex = ++count;
-							}
-						}
-
-						parent[ expando ] = doneName;
-					}
-
-					diff = elem.nodeIndex - last;
-
-					if ( first === 0 ) {
-						return diff === 0;
-
-					} else {
-						return ( diff % first === 0 && diff / first >= 0 );
-					}
-			}
-		},
-
-		ID: function( elem, match ) {
-			return elem.nodeType === 1 && elem.getAttribute("id") === match;
-		},
-
-		TAG: function( elem, match ) {
-			return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match;
-		},
-
-		CLASS: function( elem, match ) {
-			return (" " + (elem.className || elem.getAttribute("class")) + " ")
-				.indexOf( match ) > -1;
-		},
-
-		ATTR: function( elem, match ) {
-			var name = match[1],
-				result = Sizzle.attr ?
-					Sizzle.attr( elem, name ) :
-					Expr.attrHandle[ name ] ?
-					Expr.attrHandle[ name ]( elem ) :
-					elem[ name ] != null ?
-						elem[ name ] :
-						elem.getAttribute( name ),
-				value = result + "",
-				type = match[2],
-				check = match[4];
-
-			return result == null ?
-				type === "!=" :
-				!type && Sizzle.attr ?
-				result != null :
-				type === "=" ?
-				value === check :
-				type === "*=" ?
-				value.indexOf(check) >= 0 :
-				type === "~=" ?
-				(" " + value + " ").indexOf(check) >= 0 :
-				!check ?
-				value && result !== false :
-				type === "!=" ?
-				value !== check :
-				type === "^=" ?
-				value.indexOf(check) === 0 :
-				type === "$=" ?
-				value.substr(value.length - check.length) === check :
-				type === "|=" ?
-				value === check || value.substr(0, check.length + 1) === check + "-" :
-				false;
-		},
-
-		POS: function( elem, match, i, array ) {
-			var name = match[2],
-				filter = Expr.setFilters[ name ];
-
-			if ( filter ) {
-				return filter( elem, i, match, array );
-			}
-		}
-	}
-};
-
-var origPOS = Expr.match.POS,
-	fescape = function(all, num){
-		return "\\" + (num - 0 + 1);
-	};
-
-for ( var type in Expr.match ) {
-	Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
-	Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
-}
-// Expose origPOS
-// "global" as in regardless of relation to brackets/parens
-Expr.match.globalPOS = origPOS;
-
-var makeArray = function( array, results ) {
-	array = Array.prototype.slice.call( array, 0 );
-
-	if ( results ) {
-		results.push.apply( results, array );
-		return results;
-	}
-
-	return array;
-};
-
-// Perform a simple check to determine if the browser is capable of
-// converting a NodeList to an array using builtin methods.
-// Also verifies that the returned array holds DOM nodes
-// (which is not the case in the Blackberry browser)
-try {
-	Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
-
-// Provide a fallback method if it does not work
-} catch( e ) {
-	makeArray = function( array, results ) {
-		var i = 0,
-			ret = results || [];
-
-		if ( toString.call(array) === "[object Array]" ) {
-			Array.prototype.push.apply( ret, array );
-
-		} else {
-			if ( typeof array.length === "number" ) {
-				for ( var l = array.length; i < l; i++ ) {
-					ret.push( array[i] );
-				}
-
-			} else {
-				for ( ; array[i]; i++ ) {
-					ret.push( array[i] );
-				}
-			}
-		}
-
-		return ret;
-	};
-}
-
-var sortOrder, siblingCheck;
-
-if ( document.documentElement.compareDocumentPosition ) {
-	sortOrder = function( a, b ) {
-		if ( a === b ) {
-			hasDuplicate = true;
-			return 0;
-		}
-
-		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
-			return a.compareDocumentPosition ? -1 : 1;
-		}
-
-		return a.compareDocumentPosition(b) & 4 ? -1 : 1;
-	};
-
-} else {
-	sortOrder = function( a, b ) {
-		// The nodes are identical, we can exit early
-		if ( a === b ) {
-			hasDuplicate = true;
-			return 0;
-
-		// Fallback to using sourceIndex (in IE) if it's available on both nodes
-		} else if ( a.sourceIndex && b.sourceIndex ) {
-			return a.sourceIndex - b.sourceIndex;
-		}
-
-		var al, bl,
-			ap = [],
-			bp = [],
-			aup = a.parentNode,
-			bup = b.parentNode,
-			cur = aup;
-
-		// If the nodes are siblings (or identical) we can do a quick check
-		if ( aup === bup ) {
-			return siblingCheck( a, b );
-
-		// If no parents were found then the nodes are disconnected
-		} else if ( !aup ) {
-			return -1;
-
-		} else if ( !bup ) {
-			return 1;
-		}
-
-		// Otherwise they're somewhere else in the tree so we need
-		// to build up a full list of the parentNodes for comparison
-		while ( cur ) {
-			ap.unshift( cur );
-			cur = cur.parentNode;
-		}
-
-		cur = bup;
-
-		while ( cur ) {
-			bp.unshift( cur );
-			cur = cur.parentNode;
-		}
-
-		al = ap.length;
-		bl = bp.length;
-
-		// Start walking down the tree looking for a discrepancy
-		for ( var i = 0; i < al && i < bl; i++ ) {
-			if ( ap[i] !== bp[i] ) {
-				return siblingCheck( ap[i], bp[i] );
-			}
-		}
-
-		// We ended someplace up the tree so do a sibling check
-		return i === al ?
-			siblingCheck( a, bp[i], -1 ) :
-			siblingCheck( ap[i], b, 1 );
-	};
-
-	siblingCheck = function( a, b, ret ) {
-		if ( a === b ) {
-			return ret;
-		}
-
-		var cur = a.nextSibling;
-
-		while ( cur ) {
-			if ( cur === b ) {
-				return -1;
-			}
-
-			cur = cur.nextSibling;
-		}
-
-		return 1;
-	};
-}
-
-// Check to see if the browser returns elements by name when
-// querying by getElementById (and provide a workaround)
-(function(){
-	// We're going to inject a fake input element with a specified name
-	var form = document.createElement("div"),
-		id = "script" + (new Date()).getTime(),
-		root = document.documentElement;
-
-	form.innerHTML = "<a name='" + id + "'/>";
-
-	// Inject it into the root element, check its status, and remove it quickly
-	root.insertBefore( form, root.firstChild );
-
-	// The workaround has to do additional checks after a getElementById
-	// Which slows things down for other browsers (hence the branching)
-	if ( document.getElementById( id ) ) {
-		Expr.find.ID = function( match, context, isXML ) {
-			if ( typeof context.getElementById !== "undefined" && !isXML ) {
-				var m = context.getElementById(match[1]);
-
-				return m ?
-					m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
-						[m] :
-						undefined :
-					[];
-			}
-		};
-
-		Expr.filter.ID = function( elem, match ) {
-			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
-
-			return elem.nodeType === 1 && node && node.nodeValue === match;
-		};
-	}
-
-	root.removeChild( form );
-
-	// release memory in IE
-	root = form = null;
-})();
-
-(function(){
-	// Check to see if the browser returns only elements
-	// when doing getElementsByTagName("*")
-
-	// Create a fake element
-	var div = document.createElement("div");
-	div.appendChild( document.createComment("") );
-
-	// Make sure no comments are found
-	if ( div.getElementsByTagName("*").length > 0 ) {
-		Expr.find.TAG = function( match, context ) {
-			var results = context.getElementsByTagName( match[1] );
-
-			// Filter out possible comments
-			if ( match[1] === "*" ) {
-				var tmp = [];
-
-				for ( var i = 0; results[i]; i++ ) {
-					if ( results[i].nodeType === 1 ) {
-						tmp.push( results[i] );
-					}
-				}
-
-				results = tmp;
-			}
-
-			return results;
-		};
-	}
-
-	// Check to see if an attribute returns normalized href attributes
-	div.innerHTML = "<a href='#'></a>";
-
-	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
-			div.firstChild.getAttribute("href") !== "#" ) {
-
-		Expr.attrHandle.href = function( elem ) {
-			return elem.getAttribute( "href", 2 );
-		};
-	}
-
-	// release memory in IE
-	div = null;
-})();
-
-if ( document.querySelectorAll ) {
-	(function(){
-		var oldSizzle = Sizzle,
-			div = document.createElement("div"),
-			id = "__sizzle__";
-
-		div.innerHTML = "<p class='TEST'></p>";
-
-		// Safari can't handle uppercase or unicode characters when
-		// in quirks mode.
-		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
-			return;
-		}
-
-		Sizzle = function( query, context, extra, seed ) {
-			context = context || document;
-
-			// Only use querySelectorAll on non-XML documents
-			// (ID selectors don't work in non-HTML documents)
-			if ( !seed && !Sizzle.isXML(context) ) {
-				// See if we find a selector to speed up
-				var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
-
-				if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
-					// Speed-up: Sizzle("TAG")
-					if ( match[1] ) {
-						return makeArray( context.getElementsByTagName( query ), extra );
-
-					// Speed-up: Sizzle(".CLASS")
-					} else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
-						return makeArray( context.getElementsByClassName( match[2] ), extra );
-					}
-				}
-
-				if ( context.nodeType === 9 ) {
-					// Speed-up: Sizzle("body")
-					// The body element only exists once, optimize finding it
-					if ( query === "body" && context.body ) {
-						return makeArray( [ context.body ], extra );
-
-					// Speed-up: Sizzle("#ID")
-					} else if ( match && match[3] ) {
-						var elem = context.getElementById( match[3] );
-
-						// Check parentNode to catch when Blackberry 4.6 returns
-						// nodes that are no longer in the document #6963
-						if ( elem && elem.parentNode ) {
-							// Handle the case where IE and Opera return items
-							// by name instead of ID
-							if ( elem.id === match[3] ) {
-								return makeArray( [ elem ], extra );
-							}
-
-						} else {
-							return makeArray( [], extra );
-						}
-					}
-
-					try {
-						return makeArray( context.querySelectorAll(query), extra );
-					} catch(qsaError) {}
-
-				// qSA works strangely on Element-rooted queries
-				// We can work around this by specifying an extra ID on the root
-				// and working up from there (Thanks to Andrew Dupont for the technique)
-				// IE 8 doesn't work on object elements
-				} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
-					var oldContext = context,
-						old = context.getAttribute( "id" ),
-						nid = old || id,
-						hasParent = context.parentNode,
-						relativeHierarchySelector = /^\s*[+~]/.test( query );
-
-					if ( !old ) {
-						context.setAttribute( "id", nid );
-					} else {
-						nid = nid.replace( /'/g, "\\$&" );
-					}
-					if ( relativeHierarchySelector && hasParent ) {
-						context = context.parentNode;
-					}
-
-					try {
-						if ( !relativeHierarchySelector || hasParent ) {
-							return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
-						}
-
-					} catch(pseudoError) {
-					} finally {
-						if ( !old ) {
-							oldContext.removeAttribute( "id" );
-						}
-					}
-				}
-			}
-
-			return oldSizzle(query, context, extra, seed);
-		};
-
-		for ( var prop in oldSizzle ) {
-			Sizzle[ prop ] = oldSizzle[ prop ];
-		}
-
-		// release memory in IE
-		div = null;
-	})();
-}
-
-(function(){
-	var html = document.documentElement,
-		matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
-
-	if ( matches ) {
-		// Check to see if it's possible to do matchesSelector
-		// on a disconnected node (IE 9 fails this)
-		var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
-			pseudoWorks = false;
-
-		try {
-			// This should fail with an exception
-			// Gecko does not error, returns false instead
-			matches.call( document.documentElement, "[test!='']:sizzle" );
-
-		} catch( pseudoError ) {
-			pseudoWorks = true;
-		}
-
-		Sizzle.matchesSelector = function( node, expr ) {
-			// Make sure that attribute selectors are quoted
-			expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
-
-			if ( !Sizzle.isXML( node ) ) {
-				try {
-					if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
-						var ret = matches.call( node, expr );
-
-						// IE 9's matchesSelector returns false on disconnected nodes
-						if ( ret || !disconnectedMatch ||
-								// As well, disconnected nodes are said to be in a document
-								// fragment in IE 9, so check for that
-								node.document && node.document.nodeType !== 11 ) {
-							return ret;
-						}
-					}
-				} catch(e) {}
-			}
-
-			return Sizzle(expr, null, null, [node]).length > 0;
-		};
-	}
-})();
-
-(function(){
-	var div = document.createElement("div");
-
-	div.innerHTML = "<div class='test e'></div><div class='test'></div>";
-
-	// Opera can't find a second classname (in 9.6)
-	// Also, make sure that getElementsByClassName actually exists
-	if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
-		return;
-	}
-
-	// Safari caches class attributes, doesn't catch changes (in 3.2)
-	div.lastChild.className = "e";
-
-	if ( div.getElementsByClassName("e").length === 1 ) {
-		return;
-	}
-
-	Expr.order.splice(1, 0, "CLASS");
-	Expr.find.CLASS = function( match, context, isXML ) {
-		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
-			return context.getElementsByClassName(match[1]);
-		}
-	};
-
-	// release memory in IE
-	div = null;
-})();
-
-function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
-	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-		var elem = checkSet[i];
-
-		if ( elem ) {
-			var match = false;
-
-			elem = elem[dir];
-
-			while ( elem ) {
-				if ( elem[ expando ] === doneName ) {
-					match = checkSet[elem.sizset];
-					break;
-				}
-
-				if ( elem.nodeType === 1 && !isXML ){
-					elem[ expando ] = doneName;
-					elem.sizset = i;
-				}
-
-				if ( elem.nodeName.toLowerCase() === cur ) {
-					match = elem;
-					break;
-				}
-
-				elem = elem[dir];
-			}
-
-			checkSet[i] = match;
-		}
-	}
-}
-
-function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
-	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-		var elem = checkSet[i];
-
-		if ( elem ) {
-			var match = false;
-
-			elem = elem[dir];
-
-			while ( elem ) {
-				if ( elem[ expando ] === doneName ) {
-					match = checkSet[elem.sizset];
-					break;
-				}
-
-				if ( elem.nodeType === 1 ) {
-					if ( !isXML ) {
-						elem[ expando ] = doneName;
-						elem.sizset = i;
-					}
-
-					if ( typeof cur !== "string" ) {
-						if ( elem === cur ) {
-							match = true;
-							break;
-						}
-
-					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
-						match = elem;
-						break;
-					}
-				}
-
-				elem = elem[dir];
-			}
-
-			checkSet[i] = match;
-		}
-	}
-}
-
-if ( document.documentElement.contains ) {
-	Sizzle.contains = function( a, b ) {
-		return a !== b && (a.contains ? a.contains(b) : true);
-	};
-
-} else if ( document.documentElement.compareDocumentPosition ) {
-	Sizzle.contains = function( a, b ) {
-		return !!(a.compareDocumentPosition(b) & 16);
-	};
-
-} else {
-	Sizzle.contains = function() {
-		return false;
-	};
-}
-
-Sizzle.isXML = function( elem ) {
-	// documentElement is verified for cases where it doesn't yet exist
-	// (such as loading iframes in IE - #4833)
-	var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
-
-	return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-var posProcess = function( selector, context, seed ) {
-	var match,
-		tmpSet = [],
-		later = "",
-		root = context.nodeType ? [context] : context;
-
-	// Position selectors must be done after the filter
-	// And so must :not(positional) so we move all PSEUDOs to the end
-	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
-		later += match[0];
-		selector = selector.replace( Expr.match.PSEUDO, "" );
-	}
-
-	selector = Expr.relative[selector] ? selector + "*" : selector;
-
-	for ( var i = 0, l = root.length; i < l; i++ ) {
-		Sizzle( selector, root[i], tmpSet, seed );
-	}
-
-	return Sizzle.filter( later, tmpSet );
-};
-
-// EXPOSE
-// Override sizzle attribute retrieval
-Sizzle.attr = jQuery.attr;
-Sizzle.selectors.attrMap = {};
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.filters;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-})();
-
-
-var runtil = /Until$/,
-	rparentsprev = /^(?:parents|prevUntil|prevAll)/,
-	// Note: This RegExp should be improved, or likely pulled from Sizzle
-	rmultiselector = /,/,
-	isSimple = /^.[^:#\[\.,]*$/,
-	slice = Array.prototype.slice,
-	POS = jQuery.expr.match.globalPOS,
-	// methods guaranteed to produce a unique set when starting from a unique set
-	guaranteedUnique = {
-		children: true,
-		contents: true,
-		next: true,
-		prev: true
-	};
-
-jQuery.fn.extend({
-	find: function( selector ) {
-		var self = this,
-			i, l;
-
-		if ( typeof selector !== "string" ) {
-			return jQuery( selector ).filter(function() {
-				for ( i = 0, l = self.length; i < l; i++ ) {
-					if ( jQuery.contains( self[ i ], this ) ) {
-						return true;
-					}
-				}
-			});
-		}
-
-		var ret = this.pushStack( "", "find", selector ),
-			length, n, r;
-
-		for ( i = 0, l = this.length; i < l; i++ ) {
-			length = ret.length;
-			jQuery.find( selector, this[i], ret );
-
-			if ( i > 0 ) {
-				// Make sure that the results are unique
-				for ( n = length; n < ret.length; n++ ) {
-					for ( r = 0; r < length; r++ ) {
-						if ( ret[r] === ret[n] ) {
-							ret.splice(n--, 1);
-							break;
-						}
-					}
-				}
-			}
-		}
-
-		return ret;
-	},
-
-	has: function( target ) {
-		var targets = jQuery( target );
-		return this.filter(function() {
-			for ( var i = 0, l = targets.length; i < l; i++ ) {
-				if ( jQuery.contains( this, targets[i] ) ) {
-					return true;
-				}
-			}
-		});
-	},
-
-	not: function( selector ) {
-		return this.pushStack( winnow(this, selector, false), "not", selector);
-	},
-
-	filter: function( selector ) {
-		return this.pushStack( winnow(this, selector, true), "filter", selector );
-	},
-
-	is: function( selector ) {
-		return !!selector && (
-			typeof selector === "string" ?
-				// If this is a positional selector, check membership in the returned set
-				// so $("p:first").is("p:last") won't return true for a doc with two "p".
-				POS.test( selector ) ?
-					jQuery( selector, this.context ).index( this[0] ) >= 0 :
-					jQuery.filter( selector, this ).length > 0 :
-				this.filter( selector ).length > 0 );
-	},
-
-	closest: function( selectors, context ) {
-		var ret = [], i, l, cur = this[0];
-
-		// Array (deprecated as of jQuery 1.7)
-		if ( jQuery.isArray( selectors ) ) {
-			var level = 1;
-
-			while ( cur && cur.ownerDocument && cur !== context ) {
-				for ( i = 0; i < selectors.length; i++ ) {
-
-					if ( jQuery( cur ).is( selectors[ i ] ) ) {
-						ret.push({ selector: selectors[ i ], elem: cur, level: level });
-					}
-				}
-
-				cur = cur.parentNode;
-				level++;
-			}
-
-			return ret;
-		}
-
-		// String
-		var pos = POS.test( selectors ) || typeof selectors !== "string" ?
-				jQuery( selectors, context || this.context ) :
-				0;
-
-		for ( i = 0, l = this.length; i < l; i++ ) {
-			cur = this[i];
-
-			while ( cur ) {
-				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
-					ret.push( cur );
-					break;
-
-				} else {
-					cur = cur.parentNode;
-					if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
-						break;
-					}
-				}
-			}
-		}
-
-		ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
-
-		return this.pushStack( ret, "closest", selectors );
-	},
-
-	// Determine the position of an element within
-	// the matched set of elements
-	index: function( elem ) {
-
-		// No argument, return index in parent
-		if ( !elem ) {
-			return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
-		}
-
-		// index in selector
-		if ( typeof elem === "string" ) {
-			return jQuery.inArray( this[0], jQuery( elem ) );
-		}
-
-		// Locate the position of the desired element
-		return jQuery.inArray(
-			// If it receives a jQuery object, the first element is used
-			elem.jquery ? elem[0] : elem, this );
-	},
-
-	add: function( selector, context ) {
-		var set = typeof selector === "string" ?
-				jQuery( selector, context ) :
-				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
-			all = jQuery.merge( this.get(), set );
-
-		return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
-			all :
-			jQuery.unique( all ) );
-	},
-
-	andSelf: function() {
-		return this.add( this.prevObject );
-	}
-});
-
-// A painfully simple check to see if an element is disconnected
-// from a document (should be improved, where feasible).
-function isDisconnected( node ) {
-	return !node || !node.parentNode || node.parentNode.nodeType === 11;
-}
-
-jQuery.each({
-	parent: function( elem ) {
-		var parent = elem.parentNode;
-		return parent && parent.nodeType !== 11 ? parent : null;
-	},
-	parents: function( elem ) {
-		return jQuery.dir( elem, "parentNode" );
-	},
-	parentsUntil: function( elem, i, until ) {
-		return jQuery.dir( elem, "parentNode", until );
-	},
-	next: function( elem ) {
-		return jQuery.nth( elem, 2, "nextSibling" );
-	},
-	prev: function( elem ) {
-		return jQuery.nth( elem, 2, "previousSibling" );
-	},
-	nextAll: function( elem ) {
-		return jQuery.dir( elem, "nextSibling" );
-	},
-	prevAll: function( elem ) {
-		return jQuery.dir( elem, "previousSibling" );
-	},
-	nextUntil: function( elem, i, until ) {
-		return jQuery.dir( elem, "nextSibling", until );
-	},
-	prevUntil: function( elem, i, until ) {
-		return jQuery.dir( elem, "previousSibling", until );
-	},
-	siblings: function( elem ) {
-		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
-	},
-	children: function( elem ) {
-		return jQuery.sibling( elem.firstChild );
-	},
-	contents: function( elem ) {
-		return jQuery.nodeName( elem, "iframe" ) ?
-			elem.contentDocument || elem.contentWindow.document :
-			jQuery.makeArray( elem.childNodes );
-	}
-}, function( name, fn ) {
-	jQuery.fn[ name ] = function( until, selector ) {
-		var ret = jQuery.map( this, fn, until );
-
-		if ( !runtil.test( name ) ) {
-			selector = until;
-		}
-
-		if ( selector && typeof selector === "string" ) {
-			ret = jQuery.filter( selector, ret );
-		}
-
-		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
-
-		if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
-			ret = ret.reverse();
-		}
-
-		return this.pushStack( ret, name, slice.call( arguments ).join(",") );
-	};
-});
-
-jQuery.extend({
-	filter: function( expr, elems, not ) {
-		if ( not ) {
-			expr = ":not(" + expr + ")";
-		}
-
-		return elems.length === 1 ?
-			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
-			jQuery.find.matches(expr, elems);
-	},
-
-	dir: function( elem, dir, until ) {
-		var matched = [],
-			cur = elem[ dir ];
-
-		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
-			if ( cur.nodeType === 1 ) {
-				matched.push( cur );
-			}
-			cur = cur[dir];
-		}
-		return matched;
-	},
-
-	nth: function( cur, result, dir, elem ) {
-		result = result || 1;
-		var num = 0;
-
-		for ( ; cur; cur = cur[dir] ) {
-			if ( cur.nodeType === 1 && ++num === result ) {
-				break;
-			}
-		}
-
-		return cur;
-	},
-
-	sibling: function( n, elem ) {
-		var r = [];
-
-		for ( ; n; n = n.nextSibling ) {
-			if ( n.nodeType === 1 && n !== elem ) {
-				r.push( n );
-			}
-		}
-
-		return r;
-	}
-});
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, keep ) {
-
-	// Can't pass null or undefined to indexOf in Firefox 4
-	// Set to 0 to skip string check
-	qualifier = qualifier || 0;
-
-	if ( jQuery.isFunction( qualifier ) ) {
-		return jQuery.grep(elements, function( elem, i ) {
-			var retVal = !!qualifier.call( elem, i, elem );
-			return retVal === keep;
-		});
-
-	} else if ( qualifier.nodeType ) {
-		return jQuery.grep(elements, function( elem, i ) {
-			return ( elem === qualifier ) === keep;
-		});
-
-	} else if ( typeof qualifier === "string" ) {
-		var filtered = jQuery.grep(elements, function( elem ) {
-			return elem.nodeType === 1;
-		});
-
-		if ( isSimple.test( qualifier ) ) {
-			return jQuery.filter(qualifier, filtered, !keep);
-		} else {
-			qualifier = jQuery.filter( qualifier, filtered );
-		}
-	}
-
-	return jQuery.grep(elements, function( elem, i ) {
-		return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
-	});
-}
-
-
-
-
-function createSafeFragment( document ) {
-	var list = nodeNames.split( "|" ),
-	safeFrag = document.createDocumentFragment();
-
-	if ( safeFrag.createElement ) {
-		while ( list.length ) {
-			safeFrag.createElement(
-				list.pop()
-			);
-		}
-	}
-	return safeFrag;
-}
-
-var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
-		"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
-	rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
-	rleadingWhitespace = /^\s+/,
-	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
-	rtagName = /<([\w:]+)/,
-	rtbody = /<tbody/i,
-	rhtml = /<|&#?\w+;/,
-	rnoInnerhtml = /<(?:script|style)/i,
-	rnocache = /<(?:script|object|embed|option|style)/i,
-	rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
-	// checked="checked" or checked
-	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
-	rscriptType = /\/(java|ecma)script/i,
-	rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
-	wrapMap = {
-		option: [ 1, "<select multiple='multiple'>", "</select>" ],
-		legend: [ 1, "<fieldset>", "</fieldset>" ],
-		thead: [ 1, "<table>", "</table>" ],
-		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
-		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
-		area: [ 1, "<map>", "</map>" ],
-		_default: [ 0, "", "" ]
-	},
-	safeFragment = createSafeFragment( document );
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-// IE can't serialize <link> and <script> tags normally
-if ( !jQuery.support.htmlSerialize ) {
-	wrapMap._default = [ 1, "div<div>", "</div>" ];
-}
-
-jQuery.fn.extend({
-	text: function( value ) {
-		return jQuery.access( this, function( value ) {
-			return value === undefined ?
-				jQuery.text( this ) :
-				this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
-		}, null, value, arguments.length );
-	},
-
-	wrapAll: function( html ) {
-		if ( jQuery.isFunction( html ) ) {
-			return this.each(function(i) {
-				jQuery(this).wrapAll( html.call(this, i) );
-			});
-		}
-
-		if ( this[0] ) {
-			// The elements to wrap the target around
-			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
-
-			if ( this[0].parentNode ) {
-				wrap.insertBefore( this[0] );
-			}
-
-			wrap.map(function() {
-				var elem = this;
-
-				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
-					elem = elem.firstChild;
-				}
-
-				return elem;
-			}).append( this );
-		}
-
-		return this;
-	},
-
-	wrapInner: function( html ) {
-		if ( jQuery.isFunction( html ) ) {
-			return this.each(function(i) {
-				jQuery(this).wrapInner( html.call(this, i) );
-			});
-		}
-
-		return this.each(function() {
-			var self = jQuery( this ),
-				contents = self.contents();
-
-			if ( contents.length ) {
-				contents.wrapAll( html );
-
-			} else {
-				self.append( html );
-			}
-		});
-	},
-
-	wrap: function( html ) {
-		var isFunction = jQuery.isFunction( html );
-
-		return this.each(function(i) {
-			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
-		});
-	},
-
-	unwrap: function() {
-		return this.parent().each(function() {
-			if ( !jQuery.nodeName( this, "body" ) ) {
-				jQuery( this ).replaceWith( this.childNodes );
-			}
-		}).end();
-	},
-
-	append: function() {
-		return this.domManip(arguments, true, function( elem ) {
-			if ( this.nodeType === 1 ) {
-				this.appendChild( elem );
-			}
-		});
-	},
-
-	prepend: function() {
-		return this.domManip(arguments, true, function( elem ) {
-			if ( this.nodeType === 1 ) {
-				this.insertBefore( elem, this.firstChild );
-			}
-		});
-	},
-
-	before: function() {
-		if ( this[0] && this[0].parentNode ) {
-			return this.domManip(arguments, false, function( elem ) {
-				this.parentNode.insertBefore( elem, this );
-			});
-		} else if ( arguments.length ) {
-			var set = jQuery.clean( arguments );
-			set.push.apply( set, this.toArray() );
-			return this.pushStack( set, "before", arguments );
-		}
-	},
-
-	after: function() {
-		if ( this[0] && this[0].parentNode ) {
-			return this.domManip(arguments, false, function( elem ) {
-				this.parentNode.insertBefore( elem, this.nextSibling );
-			});
-		} else if ( arguments.length ) {
-			var set = this.pushStack( this, "after", arguments );
-			set.push.apply( set, jQuery.clean(arguments) );
-			return set;
-		}
-	},
-
-	// keepData is for internal use only--do not document
-	remove: function( selector, keepData ) {
-		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
-			if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
-				if ( !keepData && elem.nodeType === 1 ) {
-					jQuery.cleanData( elem.getElementsByTagName("*") );
-					jQuery.cleanData( [ elem ] );
-				}
-
-				if ( elem.parentNode ) {
-					elem.parentNode.removeChild( elem );
-				}
-			}
-		}
-
-		return this;
-	},
-
-	empty: function() {
-		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
-			// Remove element nodes and prevent memory leaks
-			if ( elem.nodeType === 1 ) {
-				jQuery.cleanData( elem.getElementsByTagName("*") );
-			}
-
-			// Remove any remaining nodes
-			while ( elem.firstChild ) {
-				elem.removeChild( elem.firstChild );
-			}
-		}
-
-		return this;
-	},
-
-	clone: function( dataAndEvents, deepDataAndEvents ) {
-		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
-		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
-		return this.map( function () {
-			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
-		});
-	},
-
-	html: function( value ) {
-		return jQuery.access( this, function( value ) {
-			var elem = this[0] || {},
-				i = 0,
-				l = this.length;
-
-			if ( value === undefined ) {
-				return elem.nodeType === 1 ?
-					elem.innerHTML.replace( rinlinejQuery, "" ) :
-					null;
-			}
-
-
-			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
-				( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
-				!wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
-
-				value = value.replace( rxhtmlTag, "<$1></$2>" );
-
-				try {
-					for (; i < l; i++ ) {
-						// Remove element nodes and prevent memory leaks
-						elem = this[i] || {};
-						if ( elem.nodeType === 1 ) {
-							jQuery.cleanData( elem.getElementsByTagName( "*" ) );
-							elem.innerHTML = value;
-						}
-					}
-
-					elem = 0;
-
-				// If using innerHTML throws an exception, use the fallback method
-				} catch(e) {}
-			}
-
-			if ( elem ) {
-				this.empty().append( value );
-			}
-		}, null, value, arguments.length );
-	},
-
-	replaceWith: function( value ) {
-		if ( this[0] && this[0].parentNode ) {
-			// Make sure that the elements are removed from the DOM before they are inserted
-			// this can help fix replacing a parent with child elements
-			if ( jQuery.isFunction( value ) ) {
-				return this.each(function(i) {
-					var self = jQuery(this), old = self.html();
-					self.replaceWith( value.call( this, i, old ) );
-				});
-			}
-
-			if ( typeof value !== "string" ) {
-				value = jQuery( value ).detach();
-			}
-
-			return this.each(function() {
-				var next = this.nextSibling,
-					parent = this.parentNode;
-
-				jQuery( this ).remove();
-
-				if ( next ) {
-					jQuery(next).before( value );
-				} else {
-					jQuery(parent).append( value );
-				}
-			});
-		} else {
-			return this.length ?
-				this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
-				this;
-		}
-	},
-
-	detach: function( selector ) {
-		return this.remove( selector, true );
-	},
-
-	domManip: function( args, table, callback ) {
-		var results, first, fragment, parent,
-			value = args[0],
-			scripts = [];
-
-		// We can't cloneNode fragments that contain checked, in WebKit
-		if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
-			return this.each(function() {
-				jQuery(this).domManip( args, table, callback, true );
-			});
-		}
-
-		if ( jQuery.isFunction(value) ) {
-			return this.each(function(i) {
-				var self = jQuery(this);
-				args[0] = value.call(this, i, table ? self.html() : undefined);
-				self.domManip( args, table, callback );
-			});
-		}
-
-		if ( this[0] ) {
-			parent = value && value.parentNode;
-
-			// If we're in a fragment, just use that instead of building a new one
-			if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
-				results = { fragment: parent };
-
-			} else {
-				results = jQuery.buildFragment( args, this, scripts );
-			}
-
-			fragment = results.fragment;
-
-			if ( fragment.childNodes.length === 1 ) {
-				first = fragment = fragment.firstChild;
-			} else {
-				first = fragment.firstChild;
-			}
-
-			if ( first ) {
-				table = table && jQuery.nodeName( first, "tr" );
-
-				for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
-					callback.call(
-						table ?
-							root(this[i], first) :
-							this[i],
-						// Make sure that we do not leak memory by inadvertently discarding
-						// the original fragment (which might have attached data) instead of
-						// using it; in addition, use the original fragment object for the last
-						// item instead of first because it can end up being emptied incorrectly
-						// in certain situations (Bug #8070).
-						// Fragments from the fragment cache must always be cloned and never used
-						// in place.
-						results.cacheable || ( l > 1 && i < lastIndex ) ?
-							jQuery.clone( fragment, true, true ) :
-							fragment
-					);
-				}
-			}
-
-			if ( scripts.length ) {
-				jQuery.each( scripts, function( i, elem ) {
-					if ( elem.src ) {
-						jQuery.ajax({
-							type: "GET",
-							global: false,
-							url: elem.src,
-							async: false,
-							dataType: "script"
-						});
-					} else {
-						jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
-					}
-
-					if ( elem.parentNode ) {
-						elem.parentNode.removeChild( elem );
-					}
-				});
-			}
-		}
-
-		return this;
-	}
-});
-
-function root( elem, cur ) {
-	return jQuery.nodeName(elem, "table") ?
-		(elem.getElementsByTagName("tbody")[0] ||
-		elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
-		elem;
-}
-
-function cloneCopyEvent( src, dest ) {
-
-	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
-		return;
-	}
-
-	var type, i, l,
-		oldData = jQuery._data( src ),
-		curData = jQuery._data( dest, oldData ),
-		events = oldData.events;
-
-	if ( events ) {
-		delete curData.handle;
-		curData.events = {};
-
-		for ( type in events ) {
-			for ( i = 0, l = events[ type ].length; i < l; i++ ) {
-				jQuery.event.add( dest, type, events[ type ][ i ] );
-			}
-		}
-	}
-
-	// make the cloned public data object a copy from the original
-	if ( curData.data ) {
-		curData.data = jQuery.extend( {}, curData.data );
-	}
-}
-
-function cloneFixAttributes( src, dest ) {
-	var nodeName;
-
-	// We do not need to do anything for non-Elements
-	if ( dest.nodeType !== 1 ) {
-		return;
-	}
-
-	// clearAttributes removes the attributes, which we don't want,
-	// but also removes the attachEvent events, which we *do* want
-	if ( dest.clearAttributes ) {
-		dest.clearAttributes();
-	}
-
-	// mergeAttributes, in contrast, only merges back on the
-	// original attributes, not the events
-	if ( dest.mergeAttributes ) {
-		dest.mergeAttributes( src );
-	}
-
-	nodeName = dest.nodeName.toLowerCase();
-
-	// IE6-8 fail to clone children inside object elements that use
-	// the proprietary classid attribute value (rather than the type
-	// attribute) to identify the type of content to display
-	if ( nodeName === "object" ) {
-		dest.outerHTML = src.outerHTML;
-
-	} else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
-		// IE6-8 fails to persist the checked state of a cloned checkbox
-		// or radio button. Worse, IE6-7 fail to give the cloned element
-		// a checked appearance if the defaultChecked value isn't also set
-		if ( src.checked ) {
-			dest.defaultChecked = dest.checked = src.checked;
-		}
-
-		// IE6-7 get confused and end up setting the value of a cloned
-		// checkbox/radio button to an empty string instead of "on"
-		if ( dest.value !== src.value ) {
-			dest.value = src.value;
-		}
-
-	// IE6-8 fails to return the selected option to the default selected
-	// state when cloning options
-	} else if ( nodeName === "option" ) {
-		dest.selected = src.defaultSelected;
-
-	// IE6-8 fails to set the defaultValue to the correct value when
-	// cloning other types of input fields
-	} else if ( nodeName === "input" || nodeName === "textarea" ) {
-		dest.defaultValue = src.defaultValue;
-
-	// IE blanks contents when cloning scripts
-	} else if ( nodeName === "script" && dest.text !== src.text ) {
-		dest.text = src.text;
-	}
-
-	// Event data gets referenced instead of copied if the expando
-	// gets copied too
-	dest.removeAttribute( jQuery.expando );
-
-	// Clear flags for bubbling special change/submit events, they must
-	// be reattached when the newly cloned events are first activated
-	dest.removeAttribute( "_submit_attached" );
-	dest.removeAttribute( "_change_attached" );
-}
-
-jQuery.buildFragment = function( args, nodes, scripts ) {
-	var fragment, cacheable, cacheresults, doc,
-	first = args[ 0 ];
-
-	// nodes may contain either an explicit document object,
-	// a jQuery collection or context object.
-	// If nodes[0] contains a valid object to assign to doc
-	if ( nodes && nodes[0] ) {
-		doc = nodes[0].ownerDocument || nodes[0];
-	}
-
-	// Ensure that an attr object doesn't incorrectly stand in as a document object
-	// Chrome and Firefox seem to allow this to occur and will throw exception
-	// Fixes #8950
-	if ( !doc.createDocumentFragment ) {
-		doc = document;
-	}
-
-	// Only cache "small" (1/2 KB) HTML strings that are associated with the main document
-	// Cloning options loses the selected state, so don't cache them
-	// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
-	// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
-	// Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501
-	if ( args.length === 1 && typeof first === "string" && first.length < 512 && doc === document &&
-		first.charAt(0) === "<" && !rnocache.test( first ) &&
-		(jQuery.support.checkClone || !rchecked.test( first )) &&
-		(jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {
-
-		cacheable = true;
-
-		cacheresults = jQuery.fragments[ first ];
-		if ( cacheresults && cacheresults !== 1 ) {
-			fragment = cacheresults;
-		}
-	}
-
-	if ( !fragment ) {
-		fragment = doc.createDocumentFragment();
-		jQuery.clean( args, doc, fragment, scripts );
-	}
-
-	if ( cacheable ) {
-		jQuery.fragments[ first ] = cacheresults ? fragment : 1;
-	}
-
-	return { fragment: fragment, cacheable: cacheable };
-};
-
-jQuery.fragments = {};
-
-jQuery.each({
-	appendTo: "append",
-	prependTo: "prepend",
-	insertBefore: "before",
-	insertAfter: "after",
-	replaceAll: "replaceWith"
-}, function( name, original ) {
-	jQuery.fn[ name ] = function( selector ) {
-		var ret = [],
-			insert = jQuery( selector ),
-			parent = this.length === 1 && this[0].parentNode;
-
-		if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
-			insert[ original ]( this[0] );
-			return this;
-
-		} else {
-			for ( var i = 0, l = insert.length; i < l; i++ ) {
-				var elems = ( i > 0 ? this.clone(true) : this ).get();
-				jQuery( insert[i] )[ original ]( elems );
-				ret = ret.concat( elems );
-			}
-
-			return this.pushStack( ret, name, insert.selector );
-		}
-	};
-});
-
-function getAll( elem ) {
-	if ( typeof elem.getElementsByTagName !== "undefined" ) {
-		return elem.getElementsByTagName( "*" );
-
-	} else if ( typeof elem.querySelectorAll !== "undefined" ) {
-		return elem.querySelectorAll( "*" );
-
-	} else {
-		return [];
-	}
-}
-
-// Used in clean, fixes the defaultChecked property
-function fixDefaultChecked( elem ) {
-	if ( elem.type === "checkbox" || elem.type === "radio" ) {
-		elem.defaultChecked = elem.checked;
-	}
-}
-// Finds all inputs and passes them to fixDefaultChecked
-function findInputs( elem ) {
-	var nodeName = ( elem.nodeName || "" ).toLowerCase();
-	if ( nodeName === "input" ) {
-		fixDefaultChecked( elem );
-	// Skip scripts, get other children
-	} else if ( nodeName !== "script" && typeof elem.getElementsByTagName !== "undefined" ) {
-		jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
-	}
-}
-
-// Derived From: http://www.iecss.com/shimprove/javascript/shimprove.1-0-1.js
-function shimCloneNode( elem ) {
-	var div = document.createElement( "div" );
-	safeFragment.appendChild( div );
-
-	div.innerHTML = elem.outerHTML;
-	return div.firstChild;
-}
-
-jQuery.extend({
-	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
-		var srcElements,
-			destElements,
-			i,
-			// IE<=8 does not properly clone detached, unknown element nodes
-			clone = jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ?
-				elem.cloneNode( true ) :
-				shimCloneNode( elem );
-
-		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
-				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
-			// IE copies events bound via attachEvent when using cloneNode.
-			// Calling detachEvent on the clone will also remove the events
-			// from the original. In order to get around this, we use some
-			// proprietary methods to clear the events. Thanks to MooTools
-			// guys for this hotness.
-
-			cloneFixAttributes( elem, clone );
-
-			// Using Sizzle here is crazy slow, so we use getElementsByTagName instead
-			srcElements = getAll( elem );
-			destElements = getAll( clone );
-
-			// Weird iteration because IE will replace the length property
-			// with an element if you are cloning the body and one of the
-			// elements on the page has a name or id of "length"
-			for ( i = 0; srcElements[i]; ++i ) {
-				// Ensure that the destination node is not null; Fixes #9587
-				if ( destElements[i] ) {
-					cloneFixAttributes( srcElements[i], destElements[i] );
-				}
-			}
-		}
-
-		// Copy the events from the original to the clone
-		if ( dataAndEvents ) {
-			cloneCopyEvent( elem, clone );
-
-			if ( deepDataAndEvents ) {
-				srcElements = getAll( elem );
-				destElements = getAll( clone );
-
-				for ( i = 0; srcElements[i]; ++i ) {
-					cloneCopyEvent( srcElements[i], destElements[i] );
-				}
-			}
-		}
-
-		srcElements = destElements = null;
-
-		// Return the cloned set
-		return clone;
-	},
-
-	clean: function( elems, context, fragment, scripts ) {
-		var checkScriptType, script, j,
-				ret = [];
-
-		context = context || document;
-
-		// !context.createElement fails in IE with an error but returns typeof 'object'
-		if ( typeof context.createElement === "undefined" ) {
-			context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
-		}
-
-		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
-			if ( typeof elem === "number" ) {
-				elem += "";
-			}
-
-			if ( !elem ) {
-				continue;
-			}
-
-			// Convert html string into DOM nodes
-			if ( typeof elem === "string" ) {
-				if ( !rhtml.test( elem ) ) {
-					elem = context.createTextNode( elem );
-				} else {
-					// Fix "XHTML"-style tags in all browsers
-					elem = elem.replace(rxhtmlTag, "<$1></$2>");
-
-					// Trim whitespace, otherwise indexOf won't work as expected
-					var tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(),
-						wrap = wrapMap[ tag ] || wrapMap._default,
-						depth = wrap[0],
-						div = context.createElement("div"),
-						safeChildNodes = safeFragment.childNodes,
-						remove;
-
-					// Append wrapper element to unknown element safe doc fragment
-					if ( context === document ) {
-						// Use the fragment we've already created for this document
-						safeFragment.appendChild( div );
-					} else {
-						// Use a fragment created with the owner document
-						createSafeFragment( context ).appendChild( div );
-					}
-
-					// Go to html and back, then peel off extra wrappers
-					div.innerHTML = wrap[1] + elem + wrap[2];
-
-					// Move to the right depth
-					while ( depth-- ) {
-						div = div.lastChild;
-					}
-
-					// Remove IE's autoinserted <tbody> from table fragments
-					if ( !jQuery.support.tbody ) {
-
-						// String was a <table>, *may* have spurious <tbody>
-						var hasBody = rtbody.test(elem),
-							tbody = tag === "table" && !hasBody ?
-								div.firstChild && div.firstChild.childNodes :
-
-								// String was a bare <thead> or <tfoot>
-								wrap[1] === "<table>" && !hasBody ?
-									div.childNodes :
-									[];
-
-						for ( j = tbody.length - 1; j >= 0 ; --j ) {
-							if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
-								tbody[ j ].parentNode.removeChild( tbody[ j ] );
-							}
-						}
-					}
-
-					// IE completely kills leading whitespace when innerHTML is used
-					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
-						div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
-					}
-
-					elem = div.childNodes;
-
-					// Clear elements from DocumentFragment (safeFragment or otherwise)
-					// to avoid hoarding elements. Fixes #11356
-					if ( div ) {
-						div.parentNode.removeChild( div );
-
-						// Guard against -1 index exceptions in FF3.6
-						if ( safeChildNodes.length > 0 ) {
-							remove = safeChildNodes[ safeChildNodes.length - 1 ];
-
-							if ( remove && remove.parentNode ) {
-								remove.parentNode.removeChild( remove );
-							}
-						}
-					}
-				}
-			}
-
-			// Resets defaultChecked for any radios and checkboxes
-			// about to be appended to the DOM in IE 6/7 (#8060)
-			var len;
-			if ( !jQuery.support.appendChecked ) {
-				if ( elem[0] && typeof (len = elem.length) === "number" ) {
-					for ( j = 0; j < len; j++ ) {
-						findInputs( elem[j] );
-					}
-				} else {
-					findInputs( elem );
-				}
-			}
-
-			if ( elem.nodeType ) {
-				ret.push( elem );
-			} else {
-				ret = jQuery.merge( ret, elem );
-			}
-		}
-
-		if ( fragment ) {
-			checkScriptType = function( elem ) {
-				return !elem.type || rscriptType.test( elem.type );
-			};
-			for ( i = 0; ret[i]; i++ ) {
-				script = ret[i];
-				if ( scripts && jQuery.nodeName( script, "script" ) && (!script.type || rscriptType.test( script.type )) ) {
-					scripts.push( script.parentNode ? script.parentNode.removeChild( script ) : script );
-
-				} else {
-					if ( script.nodeType === 1 ) {
-						var jsTags = jQuery.grep( script.getElementsByTagName( "script" ), checkScriptType );
-
-						ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
-					}
-					fragment.appendChild( script );
-				}
-			}
-		}
-
-		return ret;
-	},
-
-	cleanData: function( elems ) {
-		var data, id,
-			cache = jQuery.cache,
-			special = jQuery.event.special,
-			deleteExpando = jQuery.support.deleteExpando;
-
-		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
-			if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
-				continue;
-			}
-
-			id = elem[ jQuery.expando ];
-
-			if ( id ) {
-				data = cache[ id ];
-
-				if ( data && data.events ) {
-					for ( var type in data.events ) {
-						if ( special[ type ] ) {
-							jQuery.event.remove( elem, type );
-
-						// This is a shortcut to avoid jQuery.event.remove's overhead
-						} else {
-							jQuery.removeEvent( elem, type, data.handle );
-						}
-					}
-
-					// Null the DOM reference to avoid IE6/7/8 leak (#7054)
-					if ( data.handle ) {
-						data.handle.elem = null;
-					}
-				}
-
-				if ( deleteExpando ) {
-					delete elem[ jQuery.expando ];
-
-				} else if ( elem.removeAttribute ) {
-					elem.removeAttribute( jQuery.expando );
-				}
-
-				delete cache[ id ];
-			}
-		}
-	}
-});
-
-
-
-
-var ralpha = /alpha\([^)]*\)/i,
-	ropacity = /opacity=([^)]*)/,
-	// fixed for IE9, see #8346
-	rupper = /([A-Z]|^ms)/g,
-	rnum = /^[\-+]?(?:\d*\.)?\d+$/i,
-	rnumnonpx = /^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,
-	rrelNum = /^([\-+])=([\-+.\de]+)/,
-	rmargin = /^margin/,
-
-	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
-
-	// order is important!
-	cssExpand = [ "Top", "Right", "Bottom", "Left" ],
-
-	curCSS,
-
-	getComputedStyle,
-	currentStyle;
-
-jQuery.fn.css = function( name, value ) {
-	return jQuery.access( this, function( elem, name, value ) {
-		return value !== undefined ?
-			jQuery.style( elem, name, value ) :
-			jQuery.css( elem, name );
-	}, name, value, arguments.length > 1 );
-};
-
-jQuery.extend({
-	// Add in style property hooks for overriding the default
-	// behavior of getting and setting a style property
-	cssHooks: {
-		opacity: {
-			get: function( elem, computed ) {
-				if ( computed ) {
-					// We should always get a number back from opacity
-					var ret = curCSS( elem, "opacity" );
-					return ret === "" ? "1" : ret;
-
-				} else {
-					return elem.style.opacity;
-				}
-			}
-		}
-	},
-
-	// Exclude the following css properties to add px
-	cssNumber: {
-		"fillOpacity": true,
-		"fontWeight": true,
-		"lineHeight": true,
-		"opacity": true,
-		"orphans": true,
-		"widows": true,
-		"zIndex": true,
-		"zoom": true
-	},
-
-	// Add in properties whose names you wish to fix before
-	// setting or getting the value
-	cssProps: {
-		// normalize float css property
-		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
-	},
-
-	// Get and set the style property on a DOM Node
-	style: function( elem, name, value, extra ) {
-		// Don't set styles on text and comment nodes
-		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
-			return;
-		}
-
-		// Make sure that we're working with the right name
-		var ret, type, origName = jQuery.camelCase( name ),
-			style = elem.style, hooks = jQuery.cssHooks[ origName ];
-
-		name = jQuery.cssProps[ origName ] || origName;
-
-		// Check if we're setting a value
-		if ( value !== undefined ) {
-			type = typeof value;
-
-			// convert relative number strings (+= or -=) to relative numbers. #7345
-			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
-				value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );
-				// Fixes bug #9237
-				type = "number";
-			}
-
-			// Make sure that NaN and null values aren't set. See: #7116
-			if ( value == null || type === "number" && isNaN( value ) ) {
-				return;
-			}
-
-			// If a number was passed in, add 'px' to the (except for certain CSS properties)
-			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
-				value += "px";
-			}
-
-			// If a hook was provided, use that value, otherwise just set the specified value
-			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
-				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
-				// Fixes bug #5509
-				try {
-					style[ name ] = value;
-				} catch(e) {}
-			}
-
-		} else {
-			// If a hook was provided get the non-computed value from there
-			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
-				return ret;
-			}
-
-			// Otherwise just get the value from the style object
-			return style[ name ];
-		}
-	},
-
-	css: function( elem, name, extra ) {
-		var ret, hooks;
-
-		// Make sure that we're working with the right name
-		name = jQuery.camelCase( name );
-		hooks = jQuery.cssHooks[ name ];
-		name = jQuery.cssProps[ name ] || name;
-
-		// cssFloat needs a special treatment
-		if ( name === "cssFloat" ) {
-			name = "float";
-		}
-
-		// If a hook was provided get the computed value from there
-		if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
-			return ret;
-
-		// Otherwise, if a way to get the computed value exists, use that
-		} else if ( curCSS ) {
-			return curCSS( elem, name );
-		}
-	},
-
-	// A method for quickly swapping in/out CSS properties to get correct calculations
-	swap: function( elem, options, callback ) {
-		var old = {},
-			ret, name;
-
-		// Remember the old values, and insert the new ones
-		for ( name in options ) {
-			old[ name ] = elem.style[ name ];
-			elem.style[ name ] = options[ name ];
-		}
-
-		ret = callback.call( elem );
-
-		// Revert the old values
-		for ( name in options ) {
-			elem.style[ name ] = old[ name ];
-		}
-
-		return ret;
-	}
-});
-
-// DEPRECATED in 1.3, Use jQuery.css() instead
-jQuery.curCSS = jQuery.css;
-
-if ( document.defaultView && document.defaultView.getComputedStyle ) {
-	getComputedStyle = function( elem, name ) {
-		var ret, defaultView, computedStyle, width,
-			style = elem.style;
-
-		name = name.replace( rupper, "-$1" ).toLowerCase();
-
-		if ( (defaultView = elem.ownerDocument.defaultView) &&
-				(computedStyle = defaultView.getComputedStyle( elem, null )) ) {
-
-			ret = computedStyle.getPropertyValue( name );
-			if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
-				ret = jQuery.style( elem, name );
-			}
-		}
-
-		// A tribute to the "awesome hack by Dean Edwards"
-		// WebKit uses "computed value (percentage if specified)" instead of "used value" for margins
-		// which is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
-		if ( !jQuery.support.pixelMargin && computedStyle && rmargin.test( name ) && rnumnonpx.test( ret ) ) {
-			width = style.width;
-			style.width = ret;
-			ret = computedStyle.width;
-			style.width = width;
-		}
-
-		return ret;
-	};
-}
-
-if ( document.documentElement.currentStyle ) {
-	currentStyle = function( elem, name ) {
-		var left, rsLeft, uncomputed,
-			ret = elem.currentStyle && elem.currentStyle[ name ],
-			style = elem.style;
-
-		// Avoid setting ret to empty string here
-		// so we don't default to auto
-		if ( ret == null && style && (uncomputed = style[ name ]) ) {
-			ret = uncomputed;
-		}
-
-		// From the awesome hack by Dean Edwards
-		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
-		// If we're not dealing with a regular pixel number
-		// but a number that has a weird ending, we need to convert it to pixels
-		if ( rnumnonpx.test( ret ) ) {
-
-			// Remember the original values
-			left = style.left;
-			rsLeft = elem.runtimeStyle && elem.runtimeStyle.left;
-
-			// Put in the new values to get a computed value out
-			if ( rsLeft ) {
-				elem.runtimeStyle.left = elem.currentStyle.left;
-			}
-			style.left = name === "fontSize" ? "1em" : ret;
-			ret = style.pixelLeft + "px";
-
-			// Revert the changed values
-			style.left = left;
-			if ( rsLeft ) {
-				elem.runtimeStyle.left = rsLeft;
-			}
-		}
-
-		return ret === "" ? "auto" : ret;
-	};
-}
-
-curCSS = getComputedStyle || currentStyle;
-
-function getWidthOrHeight( elem, name, extra ) {
-
-	// Start with offset property
-	var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
-		i = name === "width" ? 1 : 0,
-		len = 4;
-
-	if ( val > 0 ) {
-		if ( extra !== "border" ) {
-			for ( ; i < len; i += 2 ) {
-				if ( !extra ) {
-					val -= parseFloat( jQuery.css( elem, "padding" + cssExpand[ i ] ) ) || 0;
-				}
-				if ( extra === "margin" ) {
-					val += parseFloat( jQuery.css( elem, extra + cssExpand[ i ] ) ) || 0;
-				} else {
-					val -= parseFloat( jQuery.css( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
-				}
-			}
-		}
-
-		return val + "px";
-	}
-
-	// Fall back to computed then uncomputed css if necessary
-	val = curCSS( elem, name );
-	if ( val < 0 || val == null ) {
-		val = elem.style[ name ];
-	}
-
-	// Computed unit is not pixels. Stop here and return.
-	if ( rnumnonpx.test(val) ) {
-		return val;
-	}
-
-	// Normalize "", auto, and prepare for extra
-	val = parseFloat( val ) || 0;
-
-	// Add padding, border, margin
-	if ( extra ) {
-		for ( ; i < len; i += 2 ) {
-			val += parseFloat( jQuery.css( elem, "padding" + cssExpand[ i ] ) ) || 0;
-			if ( extra !== "padding" ) {
-				val += parseFloat( jQuery.css( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
-			}
-			if ( extra === "margin" ) {
-				val += parseFloat( jQuery.css( elem, extra + cssExpand[ i ]) ) || 0;
-			}
-		}
-	}
-
-	return val + "px";
-}
-
-jQuery.each([ "height", "width" ], function( i, name ) {
-	jQuery.cssHooks[ name ] = {
-		get: function( elem, computed, extra ) {
-			if ( computed ) {
-				if ( elem.offsetWidth !== 0 ) {
-					return getWidthOrHeight( elem, name, extra );
-				} else {
-					return jQuery.swap( elem, cssShow, function() {
-						return getWidthOrHeight( elem, name, extra );
-					});
-				}
-			}
-		},
-
-		set: function( elem, value ) {
-			return rnum.test( value ) ?
-				value + "px" :
-				value;
-		}
-	};
-});
-
-if ( !jQuery.support.opacity ) {
-	jQuery.cssHooks.opacity = {
-		get: function( elem, computed ) {
-			// IE uses filters for opacity
-			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
-				( parseFloat( RegExp.$1 ) / 100 ) + "" :
-				computed ? "1" : "";
-		},
-
-		set: function( elem, value ) {
-			var style = elem.style,
-				currentStyle = elem.currentStyle,
-				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
-				filter = currentStyle && currentStyle.filter || style.filter || "";
-
-			// IE has trouble with opacity if it does not have layout
-			// Force it by setting the zoom level
-			style.zoom = 1;
-
-			// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
-			if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) {
-
-				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
-				// if "filter:" is present at all, clearType is disabled, we want to avoid this
-				// style.removeAttribute is IE Only, but so apparently is this code path...
-				style.removeAttribute( "filter" );
-
-				// if there there is no filter style applied in a css rule, we are done
-				if ( currentStyle && !currentStyle.filter ) {
-					return;
-				}
-			}
-
-			// otherwise, set new filter values
-			style.filter = ralpha.test( filter ) ?
-				filter.replace( ralpha, opacity ) :
-				filter + " " + opacity;
-		}
-	};
-}
-
-jQuery(function() {
-	// This hook cannot be added until DOM ready because the support test
-	// for it is not run until after DOM ready
-	if ( !jQuery.support.reliableMarginRight ) {
-		jQuery.cssHooks.marginRight = {
-			get: function( elem, computed ) {
-				// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-				// Work around by temporarily setting element display to inline-block
-				return jQuery.swap( elem, { "display": "inline-block" }, function() {
-					if ( computed ) {
-						return curCSS( elem, "margin-right" );
-					} else {
-						return elem.style.marginRight;
-					}
-				});
-			}
-		};
-	}
-});
-
-if ( jQuery.expr && jQuery.expr.filters ) {
-	jQuery.expr.filters.hidden = function( elem ) {
-		var width = elem.offsetWidth,
-			height = elem.offsetHeight;
-
-		return ( width === 0 && height === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
-	};
-
-	jQuery.expr.filters.visible = function( elem ) {
-		return !jQuery.expr.filters.hidden( elem );
-	};
-}
-
-// These hooks are used by animate to expand properties
-jQuery.each({
-	margin: "",
-	padding: "",
-	border: "Width"
-}, function( prefix, suffix ) {
-
-	jQuery.cssHooks[ prefix + suffix ] = {
-		expand: function( value ) {
-			var i,
-
-				// assumes a single number if not a string
-				parts = typeof value === "string" ? value.split(" ") : [ value ],
-				expanded = {};
-
-			for ( i = 0; i < 4; i++ ) {
-				expanded[ prefix + cssExpand[ i ] + suffix ] =
-					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
-			}
-
-			return expanded;
-		}
-	};
-});
-
-
-
-
-var r20 = /%20/g,
-	rbracket = /\[\]$/,
-	rCRLF = /\r?\n/g,
-	rhash = /#.*$/,
-	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
-	rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
-	// #7653, #8125, #8152: local protocol detection
-	rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
-	rnoContent = /^(?:GET|HEAD)$/,
-	rprotocol = /^\/\//,
-	rquery = /\?/,
-	rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
-	rselectTextarea = /^(?:select|textarea)/i,
-	rspacesAjax = /\s+/,
-	rts = /([?&])_=[^&]*/,
-	rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
-
-	// Keep a copy of the old load method
-	_load = jQuery.fn.load,
-
-	/* Prefilters
-	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
-	 * 2) These are called:
-	 *    - BEFORE asking for a transport
-	 *    - AFTER param serialization (s.data is a string if s.processData is true)
-	 * 3) key is the dataType
-	 * 4) the catchall symbol "*" can be used
-	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
-	 */
-	prefilters = {},
-
-	/* Transports bindings
-	 * 1) key is the dataType
-	 * 2) the catchall symbol "*" can be used
-	 * 3) selection will start with transport dataType and THEN go to "*" if needed
-	 */
-	transports = {},
-
-	// Document location
-	ajaxLocation,
-
-	// Document location segments
-	ajaxLocParts,
-
-	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
-	allTypes = ["*/"] + ["*"];
-
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-try {
-	ajaxLocation = location.href;
-} catch( e ) {
-	// Use the href attribute of an A element
-	// since IE will modify it given document.location
-	ajaxLocation = document.createElement( "a" );
-	ajaxLocation.href = "";
-	ajaxLocation = ajaxLocation.href;
-}
-
-// Segment location into parts
-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
-	// dataTypeExpression is optional and defaults to "*"
-	return function( dataTypeExpression, func ) {
-
-		if ( typeof dataTypeExpression !== "string" ) {
-			func = dataTypeExpression;
-			dataTypeExpression = "*";
-		}
-
-		if ( jQuery.isFunction( func ) ) {
-			var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
-				i = 0,
-				length = dataTypes.length,
-				dataType,
-				list,
-				placeBefore;
-
-			// For each dataType in the dataTypeExpression
-			for ( ; i < length; i++ ) {
-				dataType = dataTypes[ i ];
-				// We control if we're asked to add before
-				// any existing element
-				placeBefore = /^\+/.test( dataType );
-				if ( placeBefore ) {
-					dataType = dataType.substr( 1 ) || "*";
-				}
-				list = structure[ dataType ] = structure[ dataType ] || [];
-				// then we add to the structure accordingly
-				list[ placeBefore ? "unshift" : "push" ]( func );
-			}
-		}
-	};
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
-		dataType /* internal */, inspected /* internal */ ) {
-
-	dataType = dataType || options.dataTypes[ 0 ];
-	inspected = inspected || {};
-
-	inspected[ dataType ] = true;
-
-	var list = structure[ dataType ],
-		i = 0,
-		length = list ? list.length : 0,
-		executeOnly = ( structure === prefilters ),
-		selection;
-
-	for ( ; i < length && ( executeOnly || !selection ); i++ ) {
-		selection = list[ i ]( options, originalOptions, jqXHR );
-		// If we got redirected to another dataType
-		// we try there if executing only and not done already
-		if ( typeof selection === "string" ) {
-			if ( !executeOnly || inspected[ selection ] ) {
-				selection = undefined;
-			} else {
-				options.dataTypes.unshift( selection );
-				selection = inspectPrefiltersOrTransports(
-						structure, options, originalOptions, jqXHR, selection, inspected );
-			}
-		}
-	}
-	// If we're only executing or nothing was selected
-	// we try the catchall dataType if not done already
-	if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
-		selection = inspectPrefiltersOrTransports(
-				structure, options, originalOptions, jqXHR, "*", inspected );
-	}
-	// unnecessary when only executing (prefilters)
-	// but it'll be ignored by the caller in that case
-	return selection;
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
-	var key, deep,
-		flatOptions = jQuery.ajaxSettings.flatOptions || {};
-	for ( key in src ) {
-		if ( src[ key ] !== undefined ) {
-			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
-		}
-	}
-	if ( deep ) {
-		jQuery.extend( true, target, deep );
-	}
-}
-
-jQuery.fn.extend({
-	load: function( url, params, callback ) {
-		if ( typeof url !== "string" && _load ) {
-			return _load.apply( this, arguments );
-
-		// Don't do a request if no elements are being requested
-		} else if ( !this.length ) {
-			return this;
-		}
-
-		var off = url.indexOf( " " );
-		if ( off >= 0 ) {
-			var selector = url.slice( off, url.length );
-			url = url.slice( 0, off );
-		}
-
-		// Default to a GET request
-		var type = "GET";
-
-		// If the second parameter was provided
-		if ( params ) {
-			// If it's a function
-			if ( jQuery.isFunction( params ) ) {
-				// We assume that it's the callback
-				callback = params;
-				params = undefined;
-
-			// Otherwise, build a param string
-			} else if ( typeof params === "object" ) {
-				params = jQuery.param( params, jQuery.ajaxSettings.traditional );
-				type = "POST";
-			}
-		}
-
-		var self = this;
-
-		// Request the remote document
-		jQuery.ajax({
-			url: url,
-			type: type,
-			dataType: "html",
-			data: params,
-			// Complete callback (responseText is used internally)
-			complete: function( jqXHR, status, responseText ) {
-				// Store the response as specified by the jqXHR object
-				responseText = jqXHR.responseText;
-				// If successful, inject the HTML into all the matched elements
-				if ( jqXHR.isResolved() ) {
-					// #4825: Get the actual response in case
-					// a dataFilter is present in ajaxSettings
-					jqXHR.done(function( r ) {
-						responseText = r;
-					});
-					// See if a selector was specified
-					self.html( selector ?
-						// Create a dummy div to hold the results
-						jQuery("<div>")
-							// inject the contents of the document in, removing the scripts
-							// to avoid any 'Permission Denied' errors in IE
-							.append(responseText.replace(rscript, ""))
-
-							// Locate the specified elements
-							.find(selector) :
-
-						// If not, just inject the full result
-						responseText );
-				}
-
-				if ( callback ) {
-					self.each( callback, [ responseText, status, jqXHR ] );
-				}
-			}
-		});
-
-		return this;
-	},
-
-	serialize: function() {
-		return jQuery.param( this.serializeArray() );
-	},
-
-	serializeArray: function() {
-		return this.map(function(){
-			return this.elements ? jQuery.makeArray( this.elements ) : this;
-		})
-		.filter(function(){
-			return this.name && !this.disabled &&
-				( this.checked || rselectTextarea.test( this.nodeName ) ||
-					rinput.test( this.type ) );
-		})
-		.map(function( i, elem ){
-			var val = jQuery( this ).val();
-
-			return val == null ?
-				null :
-				jQuery.isArray( val ) ?
-					jQuery.map( val, function( val, i ){
-						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-					}) :
-					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-		}).get();
-	}
-});
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
-	jQuery.fn[ o ] = function( f ){
-		return this.on( o, f );
-	};
-});
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
-	jQuery[ method ] = function( url, data, callback, type ) {
-		// shift arguments if data argument was omitted
-		if ( jQuery.isFunction( data ) ) {
-			type = type || callback;
-			callback = data;
-			data = undefined;
-		}
-
-		return jQuery.ajax({
-			type: method,
-			url: url,
-			data: data,
-			success: callback,
-			dataType: type
-		});
-	};
-});
-
-jQuery.extend({
-
-	getScript: function( url, callback ) {
-		return jQuery.get( url, undefined, callback, "script" );
-	},
-
-	getJSON: function( url, data, callback ) {
-		return jQuery.get( url, data, callback, "json" );
-	},
-
-	// Creates a full fledged settings object into target
-	// with both ajaxSettings and settings fields.
-	// If target is omitted, writes into ajaxSettings.
-	ajaxSetup: function( target, settings ) {
-		if ( settings ) {
-			// Building a settings object
-			ajaxExtend( target, jQuery.ajaxSettings );
-		} else {
-			// Extending ajaxSettings
-			settings = target;
-			target = jQuery.ajaxSettings;
-		}
-		ajaxExtend( target, settings );
-		return target;
-	},
-
-	ajaxSettings: {
-		url: ajaxLocation,
-		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
-		global: true,
-		type: "GET",
-		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
-		processData: true,
-		async: true,
-		/*
-		timeout: 0,
-		data: null,
-		dataType: null,
-		username: null,
-		password: null,
-		cache: null,
-		traditional: false,
-		headers: {},
-		*/
-
-		accepts: {
-			xml: "application/xml, text/xml",
-			html: "text/html",
-			text: "text/plain",
-			json: "application/json, text/javascript",
-			"*": allTypes
-		},
-
-		contents: {
-			xml: /xml/,
-			html: /html/,
-			json: /json/
-		},
-
-		responseFields: {
-			xml: "responseXML",
-			text: "responseText"
-		},
-
-		// List of data converters
-		// 1) key format is "source_type destination_type" (a single space in-between)
-		// 2) the catchall symbol "*" can be used for source_type
-		converters: {
-
-			// Convert anything to text
-			"* text": window.String,
-
-			// Text to html (true = no transformation)
-			"text html": true,
-
-			// Evaluate text as a json expression
-			"text json": jQuery.parseJSON,
-
-			// Parse text as xml
-			"text xml": jQuery.parseXML
-		},
-
-		// For options that shouldn't be deep extended:
-		// you can add your own custom options here if
-		// and when you create one that shouldn't be
-		// deep extended (see ajaxExtend)
-		flatOptions: {
-			context: true,
-			url: true
-		}
-	},
-
-	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
-	ajaxTransport: addToPrefiltersOrTransports( transports ),
-
-	// Main method
-	ajax: function( url, options ) {
-
-		// If url is an object, simulate pre-1.5 signature
-		if ( typeof url === "object" ) {
-			options = url;
-			url = undefined;
-		}
-
-		// Force options to be an object
-		options = options || {};
-
-		var // Create the final options object
-			s = jQuery.ajaxSetup( {}, options ),
-			// Callbacks context
-			callbackContext = s.context || s,
-			// Context for global events
-			// It's the callbackContext if one was provided in the options
-			// and if it's a DOM node or a jQuery collection
-			globalEventContext = callbackContext !== s &&
-				( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
-						jQuery( callbackContext ) : jQuery.event,
-			// Deferreds
-			deferred = jQuery.Deferred(),
-			completeDeferred = jQuery.Callbacks( "once memory" ),
-			// Status-dependent callbacks
-			statusCode = s.statusCode || {},
-			// ifModified key
-			ifModifiedKey,
-			// Headers (they are sent all at once)
-			requestHeaders = {},
-			requestHeadersNames = {},
-			// Response headers
-			responseHeadersString,
-			responseHeaders,
-			// transport
-			transport,
-			// timeout handle
-			timeoutTimer,
-			// Cross-domain detection vars
-			parts,
-			// The jqXHR state
-			state = 0,
-			// To know if global events are to be dispatched
-			fireGlobals,
-			// Loop variable
-			i,
-			// Fake xhr
-			jqXHR = {
-
-				readyState: 0,
-
-				// Caches the header
-				setRequestHeader: function( name, value ) {
-					if ( !state ) {
-						var lname = name.toLowerCase();
-						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
-						requestHeaders[ name ] = value;
-					}
-					return this;
-				},
-
-				// Raw string
-				getAllResponseHeaders: function() {
-					return state === 2 ? responseHeadersString : null;
-				},
-
-				// Builds headers hashtable if needed
-				getResponseHeader: function( key ) {
-					var match;
-					if ( state === 2 ) {
-						if ( !responseHeaders ) {
-							responseHeaders = {};
-							while( ( match = rheaders.exec( responseHeadersString ) ) ) {
-								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
-							}
-						}
-						match = responseHeaders[ key.toLowerCase() ];
-					}
-					return match === undefined ? null : match;
-				},
-
-				// Overrides response content-type header
-				overrideMimeType: function( type ) {
-					if ( !state ) {
-						s.mimeType = type;
-					}
-					return this;
-				},
-
-				// Cancel the request
-				abort: function( statusText ) {
-					statusText = statusText || "abort";
-					if ( transport ) {
-						transport.abort( statusText );
-					}
-					done( 0, statusText );
-					return this;
-				}
-			};
-
-		// Callback for when everything is done
-		// It is defined here because jslint complains if it is declared
-		// at the end of the function (which would be more logical and readable)
-		function done( status, nativeStatusText, responses, headers ) {
-
-			// Called once
-			if ( state === 2 ) {
-				return;
-			}
-
-			// State is "done" now
-			state = 2;
-
-			// Clear timeout if it exists
-			if ( timeoutTimer ) {
-				clearTimeout( timeoutTimer );
-			}
-
-			// Dereference transport for early garbage collection
-			// (no matter how long the jqXHR object will be used)
-			transport = undefined;
-
-			// Cache response headers
-			responseHeadersString = headers || "";
-
-			// Set readyState
-			jqXHR.readyState = status > 0 ? 4 : 0;
-
-			var isSuccess,
-				success,
-				error,
-				statusText = nativeStatusText,
-				response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
-				lastModified,
-				etag;
-
-			// If successful, handle type chaining
-			if ( status >= 200 && status < 300 || status === 304 ) {
-
-				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-				if ( s.ifModified ) {
-
-					if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
-						jQuery.lastModified[ ifModifiedKey ] = lastModified;
-					}
-					if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
-						jQuery.etag[ ifModifiedKey ] = etag;
-					}
-				}
-
-				// If not modified
-				if ( status === 304 ) {
-
-					statusText = "notmodified";
-					isSuccess = true;
-
-				// If we have data
-				} else {
-
-					try {
-						success = ajaxConvert( s, response );
-						statusText = "success";
-						isSuccess = true;
-					} catch(e) {
-						// We have a parsererror
-						statusText = "parsererror";
-						error = e;
-					}
-				}
-			} else {
-				// We extract error from statusText
-				// then normalize statusText and status for non-aborts
-				error = statusText;
-				if ( !statusText || status ) {
-					statusText = "error";
-					if ( status < 0 ) {
-						status = 0;
-					}
-				}
-			}
-
-			// Set data for the fake xhr object
-			jqXHR.status = status;
-			jqXHR.statusText = "" + ( nativeStatusText || statusText );
-
-			// Success/Error
-			if ( isSuccess ) {
-				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
-			} else {
-				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
-			}
-
-			// Status-dependent callbacks
-			jqXHR.statusCode( statusCode );
-			statusCode = undefined;
-
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
-						[ jqXHR, s, isSuccess ? success : error ] );
-			}
-
-			// Complete
-			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
-
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
-				// Handle the global AJAX counter
-				if ( !( --jQuery.active ) ) {
-					jQuery.event.trigger( "ajaxStop" );
-				}
-			}
-		}
-
-		// Attach deferreds
-		deferred.promise( jqXHR );
-		jqXHR.success = jqXHR.done;
-		jqXHR.error = jqXHR.fail;
-		jqXHR.complete = completeDeferred.add;
-
-		// Status-dependent callbacks
-		jqXHR.statusCode = function( map ) {
-			if ( map ) {
-				var tmp;
-				if ( state < 2 ) {
-					for ( tmp in map ) {
-						statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
-					}
-				} else {
-					tmp = map[ jqXHR.status ];
-					jqXHR.then( tmp, tmp );
-				}
-			}
-			return this;
-		};
-
-		// Remove hash character (#7531: and string promotion)
-		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
-		// We also use the url parameter if available
-		s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
-		// Extract dataTypes list
-		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
-
-		// Determine if a cross-domain request is in order
-		if ( s.crossDomain == null ) {
-			parts = rurl.exec( s.url.toLowerCase() );
-			s.crossDomain = !!( parts &&
-				( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
-					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
-						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
-			);
-		}
-
-		// Convert data if not already a string
-		if ( s.data && s.processData && typeof s.data !== "string" ) {
-			s.data = jQuery.param( s.data, s.traditional );
-		}
-
-		// Apply prefilters
-		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
-		// If request was aborted inside a prefilter, stop there
-		if ( state === 2 ) {
-			return false;
-		}
-
-		// We can fire global events as of now if asked to
-		fireGlobals = s.global;
-
-		// Uppercase the type
-		s.type = s.type.toUpperCase();
-
-		// Determine if request has content
-		s.hasContent = !rnoContent.test( s.type );
-
-		// Watch for a new set of requests
-		if ( fireGlobals && jQuery.active++ === 0 ) {
-			jQuery.event.trigger( "ajaxStart" );
-		}
-
-		// More options handling for requests with no content
-		if ( !s.hasContent ) {
-
-			// If data is available, append data to url
-			if ( s.data ) {
-				s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
-				// #9682: remove data so that it's not used in an eventual retry
-				delete s.data;
-			}
-
-			// Get ifModifiedKey before adding the anti-cache parameter
-			ifModifiedKey = s.url;
-
-			// Add anti-cache in url if needed
-			if ( s.cache === false ) {
-
-				var ts = jQuery.now(),
-					// try replacing _= if it is there
-					ret = s.url.replace( rts, "$1_=" + ts );
-
-				// if nothing was replaced, add timestamp to the end
-				s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
-			}
-		}
-
-		// Set the correct header, if data is being sent
-		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
-			jqXHR.setRequestHeader( "Content-Type", s.contentType );
-		}
-
-		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-		if ( s.ifModified ) {
-			ifModifiedKey = ifModifiedKey || s.url;
-			if ( jQuery.lastModified[ ifModifiedKey ] ) {
-				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
-			}
-			if ( jQuery.etag[ ifModifiedKey ] ) {
-				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
-			}
-		}
-
-		// Set the Accepts header for the server, depending on the dataType
-		jqXHR.setRequestHeader(
-			"Accept",
-			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
-				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
-				s.accepts[ "*" ]
-		);
-
-		// Check for headers option
-		for ( i in s.headers ) {
-			jqXHR.setRequestHeader( i, s.headers[ i ] );
-		}
-
-		// Allow custom headers/mimetypes and early abort
-		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
-				// Abort if not done already
-				jqXHR.abort();
-				return false;
-
-		}
-
-		// Install callbacks on deferreds
-		for ( i in { success: 1, error: 1, complete: 1 } ) {
-			jqXHR[ i ]( s[ i ] );
-		}
-
-		// Get transport
-		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
-		// If no transport, we auto-abort
-		if ( !transport ) {
-			done( -1, "No Transport" );
-		} else {
-			jqXHR.readyState = 1;
-			// Send global event
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
-			}
-			// Timeout
-			if ( s.async && s.timeout > 0 ) {
-				timeoutTimer = setTimeout( function(){
-					jqXHR.abort( "timeout" );
-				}, s.timeout );
-			}
-
-			try {
-				state = 1;
-				transport.send( requestHeaders, done );
-			} catch (e) {
-				// Propagate exception as error if not done
-				if ( state < 2 ) {
-					done( -1, e );
-				// Simply rethrow otherwise
-				} else {
-					throw e;
-				}
-			}
-		}
-
-		return jqXHR;
-	},
-
-	// Serialize an array of form elements or a set of
-	// key/values into a query string
-	param: function( a, traditional ) {
-		var s = [],
-			add = function( key, value ) {
-				// If value is a function, invoke it and return its value
-				value = jQuery.isFunction( value ) ? value() : value;
-				s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
-			};
-
-		// Set traditional to true for jQuery <= 1.3.2 behavior.
-		if ( traditional === undefined ) {
-			traditional = jQuery.ajaxSettings.traditional;
-		}
-
-		// If an array was passed in, assume that it is an array of form elements.
-		if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
-			// Serialize the form elements
-			jQuery.each( a, function() {
-				add( this.name, this.value );
-			});
-
-		} else {
-			// If traditional, encode the "old" way (the way 1.3.2 or older
-			// did it), otherwise encode params recursively.
-			for ( var prefix in a ) {
-				buildParams( prefix, a[ prefix ], traditional, add );
-			}
-		}
-
-		// Return the resulting serialization
-		return s.join( "&" ).replace( r20, "+" );
-	}
-});
-
-function buildParams( prefix, obj, traditional, add ) {
-	if ( jQuery.isArray( obj ) ) {
-		// Serialize array item.
-		jQuery.each( obj, function( i, v ) {
-			if ( traditional || rbracket.test( prefix ) ) {
-				// Treat each array item as a scalar.
-				add( prefix, v );
-
-			} else {
-				// If array item is non-scalar (array or object), encode its
-				// numeric index to resolve deserialization ambiguity issues.
-				// Note that rack (as of 1.0.0) can't currently deserialize
-				// nested arrays properly, and attempting to do so may cause
-				// a server error. Possible fixes are to modify rack's
-				// deserialization algorithm or to provide an option or flag
-				// to force array serialization to be shallow.
-				buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
-			}
-		});
-
-	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
-		// Serialize object item.
-		for ( var name in obj ) {
-			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
-		}
-
-	} else {
-		// Serialize scalar item.
-		add( prefix, obj );
-	}
-}
-
-// This is still on the jQuery object... for now
-// Want to move this to jQuery.ajax some day
-jQuery.extend({
-
-	// Counter for holding the number of active queries
-	active: 0,
-
-	// Last-Modified header cache for next request
-	lastModified: {},
-	etag: {}
-
-});
-
-/* Handles responses to an ajax request:
- * - sets all responseXXX fields accordingly
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-
-	var contents = s.contents,
-		dataTypes = s.dataTypes,
-		responseFields = s.responseFields,
-		ct,
-		type,
-		finalDataType,
-		firstDataType;
-
-	// Fill responseXXX fields
-	for ( type in responseFields ) {
-		if ( type in responses ) {
-			jqXHR[ responseFields[type] ] = responses[ type ];
-		}
-	}
-
-	// Remove auto dataType and get content-type in the process
-	while( dataTypes[ 0 ] === "*" ) {
-		dataTypes.shift();
-		if ( ct === undefined ) {
-			ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
-		}
-	}
-
-	// Check if we're dealing with a known content-type
-	if ( ct ) {
-		for ( type in contents ) {
-			if ( contents[ type ] && contents[ type ].test( ct ) ) {
-				dataTypes.unshift( type );
-				break;
-			}
-		}
-	}
-
-	// Check to see if we have a response for the expected dataType
-	if ( dataTypes[ 0 ] in responses ) {
-		finalDataType = dataTypes[ 0 ];
-	} else {
-		// Try convertible dataTypes
-		for ( type in responses ) {
-			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
-				finalDataType = type;
-				break;
-			}
-			if ( !firstDataType ) {
-				firstDataType = type;
-			}
-		}
-		// Or just use first one
-		finalDataType = finalDataType || firstDataType;
-	}
-
-	// If we found a dataType
-	// We add the dataType to the list if needed
-	// and return the corresponding response
-	if ( finalDataType ) {
-		if ( finalDataType !== dataTypes[ 0 ] ) {
-			dataTypes.unshift( finalDataType );
-		}
-		return responses[ finalDataType ];
-	}
-}
-
-// Chain conversions given the request and the original response
-function ajaxConvert( s, response ) {
-
-	// Apply the dataFilter if provided
-	if ( s.dataFilter ) {
-		response = s.dataFilter( response, s.dataType );
-	}
-
-	var dataTypes = s.dataTypes,
-		converters = {},
-		i,
-		key,
-		length = dataTypes.length,
-		tmp,
-		// Current and previous dataTypes
-		current = dataTypes[ 0 ],
-		prev,
-		// Conversion expression
-		conversion,
-		// Conversion function
-		conv,
-		// Conversion functions (transitive conversion)
-		conv1,
-		conv2;
-
-	// For each dataType in the chain
-	for ( i = 1; i < length; i++ ) {
-
-		// Create converters map
-		// with lowercased keys
-		if ( i === 1 ) {
-			for ( key in s.converters ) {
-				if ( typeof key === "string" ) {
-					converters[ key.toLowerCase() ] = s.converters[ key ];
-				}
-			}
-		}
-
-		// Get the dataTypes
-		prev = current;
-		current = dataTypes[ i ];
-
-		// If current is auto dataType, update it to prev
-		if ( current === "*" ) {
-			current = prev;
-		// If no auto and dataTypes are actually different
-		} else if ( prev !== "*" && prev !== current ) {
-
-			// Get the converter
-			conversion = prev + " " + current;
-			conv = converters[ conversion ] || converters[ "* " + current ];
-
-			// If there is no direct converter, search transitively
-			if ( !conv ) {
-				conv2 = undefined;
-				for ( conv1 in converters ) {
-					tmp = conv1.split( " " );
-					if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
-						conv2 = converters[ tmp[1] + " " + current ];
-						if ( conv2 ) {
-							conv1 = converters[ conv1 ];
-							if ( conv1 === true ) {
-								conv = conv2;
-							} else if ( conv2 === true ) {
-								conv = conv1;
-							}
-							break;
-						}
-					}
-				}
-			}
-			// If we found no converter, dispatch an error
-			if ( !( conv || conv2 ) ) {
-				jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
-			}
-			// If found converter is not an equivalence
-			if ( conv !== true ) {
-				// Convert with 1 or 2 converters accordingly
-				response = conv ? conv( response ) : conv2( conv1(response) );
-			}
-		}
-	}
-	return response;
-}
-
-
-
-
-var jsc = jQuery.now(),
-	jsre = /(\=)\?(&|$)|\?\?/i;
-
-// Default jsonp settings
-jQuery.ajaxSetup({
-	jsonp: "callback",
-	jsonpCallback: function() {
-		return jQuery.expando + "_" + ( jsc++ );
-	}
-});
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
-	var inspectData = ( typeof s.data === "string" ) && /^application\/x\-www\-form\-urlencoded/.test( s.contentType );
-
-	if ( s.dataTypes[ 0 ] === "jsonp" ||
-		s.jsonp !== false && ( jsre.test( s.url ) ||
-				inspectData && jsre.test( s.data ) ) ) {
-
-		var responseContainer,
-			jsonpCallback = s.jsonpCallback =
-				jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
-			previous = window[ jsonpCallback ],
-			url = s.url,
-			data = s.data,
-			replace = "$1" + jsonpCallback + "$2";
-
-		if ( s.jsonp !== false ) {
-			url = url.replace( jsre, replace );
-			if ( s.url === url ) {
-				if ( inspectData ) {
-					data = data.replace( jsre, replace );
-				}
-				if ( s.data === data ) {
-					// Add callback manually
-					url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
-				}
-			}
-		}
-
-		s.url = url;
-		s.data = data;
-
-		// Install callback
-		window[ jsonpCallback ] = function( response ) {
-			responseContainer = [ response ];
-		};
-
-		// Clean-up function
-		jqXHR.always(function() {
-			// Set callback back to previous value
-			window[ jsonpCallback ] = previous;
-			// Call if it was a function and we have a response
-			if ( responseContainer && jQuery.isFunction( previous ) ) {
-				window[ jsonpCallback ]( responseContainer[ 0 ] );
-			}
-		});
-
-		// Use data converter to retrieve json after script execution
-		s.converters["script json"] = function() {
-			if ( !responseContainer ) {
-				jQuery.error( jsonpCallback + " was not called" );
-			}
-			return responseContainer[ 0 ];
-		};
-
-		// force json dataType
-		s.dataTypes[ 0 ] = "json";
-
-		// Delegate to script
-		return "script";
-	}
-});
-
-
-
-
-// Install script dataType
-jQuery.ajaxSetup({
-	accepts: {
-		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
-	},
-	contents: {
-		script: /javascript|ecmascript/
-	},
-	converters: {
-		"text script": function( text ) {
-			jQuery.globalEval( text );
-			return text;
-		}
-	}
-});
-
-// Handle cache's special case and global
-jQuery.ajaxPrefilter( "script", function( s ) {
-	if ( s.cache === undefined ) {
-		s.cache = false;
-	}
-	if ( s.crossDomain ) {
-		s.type = "GET";
-		s.global = false;
-	}
-});
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function(s) {
-
-	// This transport only deals with cross domain requests
-	if ( s.crossDomain ) {
-
-		var script,
-			head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
-
-		return {
-
-			send: function( _, callback ) {
-
-				script = document.createElement( "script" );
-
-				script.async = "async";
-
-				if ( s.scriptCharset ) {
-					script.charset = s.scriptCharset;
-				}
-
-				script.src = s.url;
-
-				// Attach handlers for all browsers
-				script.onload = script.onreadystatechange = function( _, isAbort ) {
-
-					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
-						// Handle memory leak in IE
-						script.onload = script.onreadystatechange = null;
-
-						// Remove the script
-						if ( head && script.parentNode ) {
-							head.removeChild( script );
-						}
-
-						// Dereference the script
-						script = undefined;
-
-						// Callback if not abort
-						if ( !isAbort ) {
-							callback( 200, "success" );
-						}
-					}
-				};
-				// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
-				// This arises when a base node is used (#2709 and #4378).
-				head.insertBefore( script, head.firstChild );
-			},
-
-			abort: function() {
-				if ( script ) {
-					script.onload( 0, 1 );
-				}
-			}
-		};
-	}
-});
-
-
-
-
-var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
-	xhrOnUnloadAbort = window.ActiveXObject ? function() {
-		// Abort all pending requests
-		for ( var key in xhrCallbacks ) {
-			xhrCallbacks[ key ]( 0, 1 );
-		}
-	} : false,
-	xhrId = 0,
-	xhrCallbacks;
-
-// Functions to create xhrs
-function createStandardXHR() {
-	try {
-		return new window.XMLHttpRequest();
-	} catch( e ) {}
-}
-
-function createActiveXHR() {
-	try {
-		return new window.ActiveXObject( "Microsoft.XMLHTTP" );
-	} catch( e ) {}
-}
-
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-jQuery.ajaxSettings.xhr = window.ActiveXObject ?
-	/* Microsoft failed to properly
-	 * implement the XMLHttpRequest in IE7 (can't request local files),
-	 * so we use the ActiveXObject when it is available
-	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
-	 * we need a fallback.
-	 */
-	function() {
-		return !this.isLocal && createStandardXHR() || createActiveXHR();
-	} :
-	// For all other browsers, use the standard XMLHttpRequest object
-	createStandardXHR;
-
-// Determine support properties
-(function( xhr ) {
-	jQuery.extend( jQuery.support, {
-		ajax: !!xhr,
-		cors: !!xhr && ( "withCredentials" in xhr )
-	});
-})( jQuery.ajaxSettings.xhr() );
-
-// Create transport if the browser can provide an xhr
-if ( jQuery.support.ajax ) {
-
-	jQuery.ajaxTransport(function( s ) {
-		// Cross domain only allowed if supported through XMLHttpRequest
-		if ( !s.crossDomain || jQuery.support.cors ) {
-
-			var callback;
-
-			return {
-				send: function( headers, complete ) {
-
-					// Get a new xhr
-					var xhr = s.xhr(),
-						handle,
-						i;
-
-					// Open the socket
-					// Passing null username, generates a login popup on Opera (#2865)
-					if ( s.username ) {
-						xhr.open( s.type, s.url, s.async, s.username, s.password );
-					} else {
-						xhr.open( s.type, s.url, s.async );
-					}
-
-					// Apply custom fields if provided
-					if ( s.xhrFields ) {
-						for ( i in s.xhrFields ) {
-							xhr[ i ] = s.xhrFields[ i ];
-						}
-					}
-
-					// Override mime type if needed
-					if ( s.mimeType && xhr.overrideMimeType ) {
-						xhr.overrideMimeType( s.mimeType );
-					}
-
-					// X-Requested-With header
-					// For cross-domain requests, seeing as conditions for a preflight are
-					// akin to a jigsaw puzzle, we simply never set it to be sure.
-					// (it can always be set on a per-request basis or even using ajaxSetup)
-					// For same-domain requests, won't change header if already provided.
-					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
-						headers[ "X-Requested-With" ] = "XMLHttpRequest";
-					}
-
-					// Need an extra try/catch for cross domain requests in Firefox 3
-					try {
-						for ( i in headers ) {
-							xhr.setRequestHeader( i, headers[ i ] );
-						}
-					} catch( _ ) {}
-
-					// Do send the request
-					// This may raise an exception which is actually
-					// handled in jQuery.ajax (so no try/catch here)
-					xhr.send( ( s.hasContent && s.data ) || null );
-
-					// Listener
-					callback = function( _, isAbort ) {
-
-						var status,
-							statusText,
-							responseHeaders,
-							responses,
-							xml;
-
-						// Firefox throws exceptions when accessing properties
-						// of an xhr when a network error occured
-						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
-						try {
-
-							// Was never called and is aborted or complete
-							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
-
-								// Only called once
-								callback = undefined;
-
-								// Do not keep as active anymore
-								if ( handle ) {
-									xhr.onreadystatechange = jQuery.noop;
-									if ( xhrOnUnloadAbort ) {
-										delete xhrCallbacks[ handle ];
-									}
-								}
-
-								// If it's an abort
-								if ( isAbort ) {
-									// Abort it manually if needed
-									if ( xhr.readyState !== 4 ) {
-										xhr.abort();
-									}
-								} else {
-									status = xhr.status;
-									responseHeaders = xhr.getAllResponseHeaders();
-									responses = {};
-									xml = xhr.responseXML;
-
-									// Construct response list
-									if ( xml && xml.documentElement /* #4958 */ ) {
-										responses.xml = xml;
-									}
-
-									// When requesting binary data, IE6-9 will throw an exception
-									// on any attempt to access responseText (#11426)
-									try {
-										responses.text = xhr.responseText;
-									} catch( _ ) {
-									}
-
-									// Firefox throws an exception when accessing
-									// statusText for faulty cross-domain requests
-									try {
-										statusText = xhr.statusText;
-									} catch( e ) {
-										// We normalize with Webkit giving an empty statusText
-										statusText = "";
-									}
-
-									// Filter status for non standard behaviors
-
-									// If the request is local and we have data: assume a success
-									// (success with no data won't get notified, that's the best we
-									// can do given current implementations)
-									if ( !status && s.isLocal && !s.crossDomain ) {
-										status = responses.text ? 200 : 404;
-									// IE - #1450: sometimes returns 1223 when it should be 204
-									} else if ( status === 1223 ) {
-										status = 204;
-									}
-								}
-							}
-						} catch( firefoxAccessException ) {
-							if ( !isAbort ) {
-								complete( -1, firefoxAccessException );
-							}
-						}
-
-						// Call complete if needed
-						if ( responses ) {
-							complete( status, statusText, responses, responseHeaders );
-						}
-					};
-
-					// if we're in sync mode or it's in cache
-					// and has been retrieved directly (IE6 & IE7)
-					// we need to manually fire the callback
-					if ( !s.async || xhr.readyState === 4 ) {
-						callback();
-					} else {
-						handle = ++xhrId;
-						if ( xhrOnUnloadAbort ) {
-							// Create the active xhrs callbacks list if needed
-							// and attach the unload handler
-							if ( !xhrCallbacks ) {
-								xhrCallbacks = {};
-								jQuery( window ).unload( xhrOnUnloadAbort );
-							}
-							// Add to list of active xhrs callbacks
-							xhrCallbacks[ handle ] = callback;
-						}
-						xhr.onreadystatechange = callback;
-					}
-				},
-
-				abort: function() {
-					if ( callback ) {
-						callback(0,1);
-					}
-				}
-			};
-		}
-	});
-}
-
-
-
-
-var elemdisplay = {},
-	iframe, iframeDoc,
-	rfxtypes = /^(?:toggle|show|hide)$/,
-	rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
-	timerId,
-	fxAttrs = [
-		// height animations
-		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
-		// width animations
-		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
-		// opacity animations
-		[ "opacity" ]
-	],
-	fxNow;
-
-jQuery.fn.extend({
-	show: function( speed, easing, callback ) {
-		var elem, display;
-
-		if ( speed || speed === 0 ) {
-			return this.animate( genFx("show", 3), speed, easing, callback );
-
-		} else {
-			for ( var i = 0, j = this.length; i < j; i++ ) {
-				elem = this[ i ];
-
-				if ( elem.style ) {
-					display = elem.style.display;
-
-					// Reset the inline display of this element to learn if it is
-					// being hidden by cascaded rules or not
-					if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
-						display = elem.style.display = "";
-					}
-
-					// Set elements which have been overridden with display: none
-					// in a stylesheet to whatever the default browser style is
-					// for such an element
-					if ( (display === "" && jQuery.css(elem, "display") === "none") ||
-						!jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
-						jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
-					}
-				}
-			}
-
-			// Set the display of most of the elements in a second loop
-			// to avoid the constant reflow
-			for ( i = 0; i < j; i++ ) {
-				elem = this[ i ];
-
-				if ( elem.style ) {
-					display = elem.style.display;
-
-					if ( display === "" || display === "none" ) {
-						elem.style.display = jQuery._data( elem, "olddisplay" ) || "";
-					}
-				}
-			}
-
-			return this;
-		}
-	},
-
-	hide: function( speed, easing, callback ) {
-		if ( speed || speed === 0 ) {
-			return this.animate( genFx("hide", 3), speed, easing, callback);
-
-		} else {
-			var elem, display,
-				i = 0,
-				j = this.length;
-
-			for ( ; i < j; i++ ) {
-				elem = this[i];
-				if ( elem.style ) {
-					display = jQuery.css( elem, "display" );
-
-					if ( display !== "none" && !jQuery._data( elem, "olddisplay" ) ) {
-						jQuery._data( elem, "olddisplay", display );
-					}
-				}
-			}
-
-			// Set the display of the elements in a second loop
-			// to avoid the constant reflow
-			for ( i = 0; i < j; i++ ) {
-				if ( this[i].style ) {
-					this[i].style.display = "none";
-				}
-			}
-
-			return this;
-		}
-	},
-
-	// Save the old toggle function
-	_toggle: jQuery.fn.toggle,
-
-	toggle: function( fn, fn2, callback ) {
-		var bool = typeof fn === "boolean";
-
-		if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
-			this._toggle.apply( this, arguments );
-
-		} else if ( fn == null || bool ) {
-			this.each(function() {
-				var state = bool ? fn : jQuery(this).is(":hidden");
-				jQuery(this)[ state ? "show" : "hide" ]();
-			});
-
-		} else {
-			this.animate(genFx("toggle", 3), fn, fn2, callback);
-		}
-
-		return this;
-	},
-
-	fadeTo: function( speed, to, easing, callback ) {
-		return this.filter(":hidden").css("opacity", 0).show().end()
-					.animate({opacity: to}, speed, easing, callback);
-	},
-
-	animate: function( prop, speed, easing, callback ) {
-		var optall = jQuery.speed( speed, easing, callback );
-
-		if ( jQuery.isEmptyObject( prop ) ) {
-			return this.each( optall.complete, [ false ] );
-		}
-
-		// Do not change referenced properties as per-property easing will be lost
-		prop = jQuery.extend( {}, prop );
-
-		function doAnimation() {
-			// XXX 'this' does not always have a nodeName when running the
-			// test suite
-
-			if ( optall.queue === false ) {
-				jQuery._mark( this );
-			}
-
-			var opt = jQuery.extend( {}, optall ),
-				isElement = this.nodeType === 1,
-				hidden = isElement && jQuery(this).is(":hidden"),
-				name, val, p, e, hooks, replace,
-				parts, start, end, unit,
-				method;
-
-			// will store per property easing and be used to determine when an animation is complete
-			opt.animatedProperties = {};
-
-			// first pass over propertys to expand / normalize
-			for ( p in prop ) {
-				name = jQuery.camelCase( p );
-				if ( p !== name ) {
-					prop[ name ] = prop[ p ];
-					delete prop[ p ];
-				}
-
-				if ( ( hooks = jQuery.cssHooks[ name ] ) && "expand" in hooks ) {
-					replace = hooks.expand( prop[ name ] );
-					delete prop[ name ];
-
-					// not quite $.extend, this wont overwrite keys already present.
-					// also - reusing 'p' from above because we have the correct "name"
-					for ( p in replace ) {
-						if ( ! ( p in prop ) ) {
-							prop[ p ] = replace[ p ];
-						}
-					}
-				}
-			}
-
-			for ( name in prop ) {
-				val = prop[ name ];
-				// easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
-				if ( jQuery.isArray( val ) ) {
-					opt.animatedProperties[ name ] = val[ 1 ];
-					val = prop[ name ] = val[ 0 ];
-				} else {
-					opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
-				}
-
-				if ( val === "hide" && hidden || val === "show" && !hidden ) {
-					return opt.complete.call( this );
-				}
-
-				if ( isElement && ( name === "height" || name === "width" ) ) {
-					// Make sure that nothing sneaks out
-					// Record all 3 overflow attributes because IE does not
-					// change the overflow attribute when overflowX and
-					// overflowY are set to the same value
-					opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
-
-					// Set display property to inline-block for height/width
-					// animations on inline elements that are having width/height animated
-					if ( jQuery.css( this, "display" ) === "inline" &&
-							jQuery.css( this, "float" ) === "none" ) {
-
-						// inline-level elements accept inline-block;
-						// block-level elements need to be inline with layout
-						if ( !jQuery.support.inlineBlockNeedsLayout || defaultDisplay( this.nodeName ) === "inline" ) {
-							this.style.display = "inline-block";
-
-						} else {
-							this.style.zoom = 1;
-						}
-					}
-				}
-			}
-
-			if ( opt.overflow != null ) {
-				this.style.overflow = "hidden";
-			}
-
-			for ( p in prop ) {
-				e = new jQuery.fx( this, opt, p );
-				val = prop[ p ];
-
-				if ( rfxtypes.test( val ) ) {
-
-					// Tracks whether to show or hide based on private
-					// data attached to the element
-					method = jQuery._data( this, "toggle" + p ) || ( val === "toggle" ? hidden ? "show" : "hide" : 0 );
-					if ( method ) {
-						jQuery._data( this, "toggle" + p, method === "show" ? "hide" : "show" );
-						e[ method ]();
-					} else {
-						e[ val ]();
-					}
-
-				} else {
-					parts = rfxnum.exec( val );
-					start = e.cur();
-
-					if ( parts ) {
-						end = parseFloat( parts[2] );
-						unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
-
-						// We need to compute starting value
-						if ( unit !== "px" ) {
-							jQuery.style( this, p, (end || 1) + unit);
-							start = ( (end || 1) / e.cur() ) * start;
-							jQuery.style( this, p, start + unit);
-						}
-
-						// If a +=/-= token was provided, we're doing a relative animation
-						if ( parts[1] ) {
-							end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
-						}
-
-						e.custom( start, end, unit );
-
-					} else {
-						e.custom( start, val, "" );
-					}
-				}
-			}
-
-			// For JS strict compliance
-			return true;
-		}
-
-		return optall.queue === false ?
-			this.each( doAnimation ) :
-			this.queue( optall.queue, doAnimation );
-	},
-
-	stop: function( type, clearQueue, gotoEnd ) {
-		if ( typeof type !== "string" ) {
-			gotoEnd = clearQueue;
-			clearQueue = type;
-			type = undefined;
-		}
-		if ( clearQueue && type !== false ) {
-			this.queue( type || "fx", [] );
-		}
-
-		return this.each(function() {
-			var index,
-				hadTimers = false,
-				timers = jQuery.timers,
-				data = jQuery._data( this );
-
-			// clear marker counters if we know they won't be
-			if ( !gotoEnd ) {
-				jQuery._unmark( true, this );
-			}
-
-			function stopQueue( elem, data, index ) {
-				var hooks = data[ index ];
-				jQuery.removeData( elem, index, true );
-				hooks.stop( gotoEnd );
-			}
-
-			if ( type == null ) {
-				for ( index in data ) {
-					if ( data[ index ] && data[ index ].stop && index.indexOf(".run") === index.length - 4 ) {
-						stopQueue( this, data, index );
-					}
-				}
-			} else if ( data[ index = type + ".run" ] && data[ index ].stop ){
-				stopQueue( this, data, index );
-			}
-
-			for ( index = timers.length; index--; ) {
-				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
-					if ( gotoEnd ) {
-
-						// force the next step to be the last
-						timers[ index ]( true );
-					} else {
-						timers[ index ].saveState();
-					}
-					hadTimers = true;
-					timers.splice( index, 1 );
-				}
-			}
-
-			// start the next in the queue if the last step wasn't forced
-			// timers currently will call their complete callbacks, which will dequeue
-			// but only if they were gotoEnd
-			if ( !( gotoEnd && hadTimers ) ) {
-				jQuery.dequeue( this, type );
-			}
-		});
-	}
-
-});
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
-	setTimeout( clearFxNow, 0 );
-	return ( fxNow = jQuery.now() );
-}
-
-function clearFxNow() {
-	fxNow = undefined;
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, num ) {
-	var obj = {};
-
-	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice( 0, num )), function() {
-		obj[ this ] = type;
-	});
-
-	return obj;
-}
-
-// Generate shortcuts for custom animations
-jQuery.each({
-	slideDown: genFx( "show", 1 ),
-	slideUp: genFx( "hide", 1 ),
-	slideToggle: genFx( "toggle", 1 ),
-	fadeIn: { opacity: "show" },
-	fadeOut: { opacity: "hide" },
-	fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
-	jQuery.fn[ name ] = function( speed, easing, callback ) {
-		return this.animate( props, speed, easing, callback );
-	};
-});
-
-jQuery.extend({
-	speed: function( speed, easing, fn ) {
-		var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
-			complete: fn || !fn && easing ||
-				jQuery.isFunction( speed ) && speed,
-			duration: speed,
-			easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
-		};
-
-		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
-			opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
-
-		// normalize opt.queue - true/undefined/null -> "fx"
-		if ( opt.queue == null || opt.queue === true ) {
-			opt.queue = "fx";
-		}
-
-		// Queueing
-		opt.old = opt.complete;
-
-		opt.complete = function( noUnmark ) {
-			if ( jQuery.isFunction( opt.old ) ) {
-				opt.old.call( this );
-			}
-
-			if ( opt.queue ) {
-				jQuery.dequeue( this, opt.queue );
-			} else if ( noUnmark !== false ) {
-				jQuery._unmark( this );
-			}
-		};
-
-		return opt;
-	},
-
-	easing: {
-		linear: function( p ) {
-			return p;
-		},
-		swing: function( p ) {
-			return ( -Math.cos( p*Math.PI ) / 2 ) + 0.5;
-		}
-	},
-
-	timers: [],
-
-	fx: function( elem, options, prop ) {
-		this.options = options;
-		this.elem = elem;
-		this.prop = prop;
-
-		options.orig = options.orig || {};
-	}
-
-});
-
-jQuery.fx.prototype = {
-	// Simple function for setting a style value
-	update: function() {
-		if ( this.options.step ) {
-			this.options.step.call( this.elem, this.now, this );
-		}
-
-		( jQuery.fx.step[ this.prop ] || jQuery.fx.step._default )( this );
-	},
-
-	// Get the current size
-	cur: function() {
-		if ( this.elem[ this.prop ] != null && (!this.elem.style || this.elem.style[ this.prop ] == null) ) {
-			return this.elem[ this.prop ];
-		}
-
-		var parsed,
-			r = jQuery.css( this.elem, this.prop );
-		// Empty strings, null, undefined and "auto" are converted to 0,
-		// complex values such as "rotate(1rad)" are returned as is,
-		// simple values such as "10px" are parsed to Float.
-		return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
-	},
-
-	// Start an animation from one number to another
-	custom: function( from, to, unit ) {
-		var self = this,
-			fx = jQuery.fx;
-
-		this.startTime = fxNow || createFxNow();
-		this.end = to;
-		this.now = this.start = from;
-		this.pos = this.state = 0;
-		this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
-
-		function t( gotoEnd ) {
-			return self.step( gotoEnd );
-		}
-
-		t.queue = this.options.queue;
-		t.elem = this.elem;
-		t.saveState = function() {
-			if ( jQuery._data( self.elem, "fxshow" + self.prop ) === undefined ) {
-				if ( self.options.hide ) {
-					jQuery._data( self.elem, "fxshow" + self.prop, self.start );
-				} else if ( self.options.show ) {
-					jQuery._data( self.elem, "fxshow" + self.prop, self.end );
-				}
-			}
-		};
-
-		if ( t() && jQuery.timers.push(t) && !timerId ) {
-			timerId = setInterval( fx.tick, fx.interval );
-		}
-	},
-
-	// Simple 'show' function
-	show: function() {
-		var dataShow = jQuery._data( this.elem, "fxshow" + this.prop );
-
-		// Remember where we started, so that we can go back to it later
-		this.options.orig[ this.prop ] = dataShow || jQuery.style( this.elem, this.prop );
-		this.options.show = true;
-
-		// Begin the animation
-		// Make sure that we start at a small width/height to avoid any flash of content
-		if ( dataShow !== undefined ) {
-			// This show is picking up where a previous hide or show left off
-			this.custom( this.cur(), dataShow );
-		} else {
-			this.custom( this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur() );
-		}
-
-		// Start by showing the element
-		jQuery( this.elem ).show();
-	},
-
-	// Simple 'hide' function
-	hide: function() {
-		// Remember where we started, so that we can go back to it later
-		this.options.orig[ this.prop ] = jQuery._data( this.elem, "fxshow" + this.prop ) || jQuery.style( this.elem, this.prop );
-		this.options.hide = true;
-
-		// Begin the animation
-		this.custom( this.cur(), 0 );
-	},
-
-	// Each step of an animation
-	step: function( gotoEnd ) {
-		var p, n, complete,
-			t = fxNow || createFxNow(),
-			done = true,
-			elem = this.elem,
-			options = this.options;
-
-		if ( gotoEnd || t >= options.duration + this.startTime ) {
-			this.now = this.end;
-			this.pos = this.state = 1;
-			this.update();
-
-			options.animatedProperties[ this.prop ] = true;
-
-			for ( p in options.animatedProperties ) {
-				if ( options.animatedProperties[ p ] !== true ) {
-					done = false;
-				}
-			}
-
-			if ( done ) {
-				// Reset the overflow
-				if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
-
-					jQuery.each( [ "", "X", "Y" ], function( index, value ) {
-						elem.style[ "overflow" + value ] = options.overflow[ index ];
-					});
-				}
-
-				// Hide the element if the "hide" operation was done
-				if ( options.hide ) {
-					jQuery( elem ).hide();
-				}
-
-				// Reset the properties, if the item has been hidden or shown
-				if ( options.hide || options.show ) {
-					for ( p in options.animatedProperties ) {
-						jQuery.style( elem, p, options.orig[ p ] );
-						jQuery.removeData( elem, "fxshow" + p, true );
-						// Toggle data is no longer needed
-						jQuery.removeData( elem, "toggle" + p, true );
-					}
-				}
-
-				// Execute the complete function
-				// in the event that the complete function throws an exception
-				// we must ensure it won't be called twice. #5684
-
-				complete = options.complete;
-				if ( complete ) {
-
-					options.complete = false;
-					complete.call( elem );
-				}
-			}
-
-			return false;
-
-		} else {
-			// classical easing cannot be used with an Infinity duration
-			if ( options.duration == Infinity ) {
-				this.now = t;
-			} else {
-				n = t - this.startTime;
-				this.state = n / options.duration;
-
-				// Perform the easing function, defaults to swing
-				this.pos = jQuery.easing[ options.animatedProperties[this.prop] ]( this.state, n, 0, 1, options.duration );
-				this.now = this.start + ( (this.end - this.start) * this.pos );
-			}
-			// Perform the next step of the animation
-			this.update();
-		}
-
-		return true;
-	}
-};
-
-jQuery.extend( jQuery.fx, {
-	tick: function() {
-		var timer,
-			timers = jQuery.timers,
-			i = 0;
-
-		for ( ; i < timers.length; i++ ) {
-			timer = timers[ i ];
-			// Checks the timer has not already been removed
-			if ( !timer() && timers[ i ] === timer ) {
-				timers.splice( i--, 1 );
-			}
-		}
-
-		if ( !timers.length ) {
-			jQuery.fx.stop();
-		}
-	},
-
-	interval: 13,
-
-	stop: function() {
-		clearInterval( timerId );
-		timerId = null;
-	},
-
-	speeds: {
-		slow: 600,
-		fast: 200,
-		// Default speed
-		_default: 400
-	},
-
-	step: {
-		opacity: function( fx ) {
-			jQuery.style( fx.elem, "opacity", fx.now );
-		},
-
-		_default: function( fx ) {
-			if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
-				fx.elem.style[ fx.prop ] = fx.now + fx.unit;
-			} else {
-				fx.elem[ fx.prop ] = fx.now;
-			}
-		}
-	}
-});
-
-// Ensure props that can't be negative don't go there on undershoot easing
-jQuery.each( fxAttrs.concat.apply( [], fxAttrs ), function( i, prop ) {
-	// exclude marginTop, marginLeft, marginBottom and marginRight from this list
-	if ( prop.indexOf( "margin" ) ) {
-		jQuery.fx.step[ prop ] = function( fx ) {
-			jQuery.style( fx.elem, prop, Math.max(0, fx.now) + fx.unit );
-		};
-	}
-});
-
-if ( jQuery.expr && jQuery.expr.filters ) {
-	jQuery.expr.filters.animated = function( elem ) {
-		return jQuery.grep(jQuery.timers, function( fn ) {
-			return elem === fn.elem;
-		}).length;
-	};
-}
-
-// Try to restore the default display value of an element
-function defaultDisplay( nodeName ) {
-
-	if ( !elemdisplay[ nodeName ] ) {
-
-		var body = document.body,
-			elem = jQuery( "<" + nodeName + ">" ).appendTo( body ),
-			display = elem.css( "display" );
-		elem.remove();
-
-		// If the simple way fails,
-		// get element's real default display by attaching it to a temp iframe
-		if ( display === "none" || display === "" ) {
-			// No iframe to use yet, so create it
-			if ( !iframe ) {
-				iframe = document.createElement( "iframe" );
-				iframe.frameBorder = iframe.width = iframe.height = 0;
-			}
-
-			body.appendChild( iframe );
-
-			// Create a cacheable copy of the iframe document on first call.
-			// IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
-			// document to it; WebKit & Firefox won't allow reusing the iframe document.
-			if ( !iframeDoc || !iframe.createElement ) {
-				iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
-				iframeDoc.write( ( jQuery.support.boxModel ? "<!doctype html>" : "" ) + "<html><body>" );
-				iframeDoc.close();
-			}
-
-			elem = iframeDoc.createElement( nodeName );
-
-			iframeDoc.body.appendChild( elem );
-
-			display = jQuery.css( elem, "display" );
-			body.removeChild( iframe );
-		}
-
-		// Store the correct default display
-		elemdisplay[ nodeName ] = display;
-	}
-
-	return elemdisplay[ nodeName ];
-}
-
-
-
-
-var getOffset,
-	rtable = /^t(?:able|d|h)$/i,
-	rroot = /^(?:body|html)$/i;
-
-if ( "getBoundingClientRect" in document.documentElement ) {
-	getOffset = function( elem, doc, docElem, box ) {
-		try {
-			box = elem.getBoundingClientRect();
-		} catch(e) {}
-
-		// Make sure we're not dealing with a disconnected DOM node
-		if ( !box || !jQuery.contains( docElem, elem ) ) {
-			return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
-		}
-
-		var body = doc.body,
-			win = getWindow( doc ),
-			clientTop  = docElem.clientTop  || body.clientTop  || 0,
-			clientLeft = docElem.clientLeft || body.clientLeft || 0,
-			scrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,
-			scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
-			top  = box.top  + scrollTop  - clientTop,
-			left = box.left + scrollLeft - clientLeft;
-
-		return { top: top, left: left };
-	};
-
-} else {
-	getOffset = function( elem, doc, docElem ) {
-		var computedStyle,
-			offsetParent = elem.offsetParent,
-			prevOffsetParent = elem,
-			body = doc.body,
-			defaultView = doc.defaultView,
-			prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
-			top = elem.offsetTop,
-			left = elem.offsetLeft;
-
-		while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
-			if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
-				break;
-			}
-
-			computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
-			top  -= elem.scrollTop;
-			left -= elem.scrollLeft;
-
-			if ( elem === offsetParent ) {
-				top  += elem.offsetTop;
-				left += elem.offsetLeft;
-
-				if ( jQuery.support.doesNotAddBorder && !(jQuery.support.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
-					top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
-					left += parseFloat( computedStyle.borderLeftWidth ) || 0;
-				}
-
-				prevOffsetParent = offsetParent;
-				offsetParent = elem.offsetParent;
-			}
-
-			if ( jQuery.support.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
-				top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
-				left += parseFloat( computedStyle.borderLeftWidth ) || 0;
-			}
-
-			prevComputedStyle = computedStyle;
-		}
-
-		if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
-			top  += body.offsetTop;
-			left += body.offsetLeft;
-		}
-
-		if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
-			top  += Math.max( docElem.scrollTop, body.scrollTop );
-			left += Math.max( docElem.scrollLeft, body.scrollLeft );
-		}
-
-		return { top: top, left: left };
-	};
-}
-
-jQuery.fn.offset = function( options ) {
-	if ( arguments.length ) {
-		return options === undefined ?
-			this :
-			this.each(function( i ) {
-				jQuery.offset.setOffset( this, options, i );
-			});
-	}
-
-	var elem = this[0],
-		doc = elem && elem.ownerDocument;
-
-	if ( !doc ) {
-		return null;
-	}
-
-	if ( elem === doc.body ) {
-		return jQuery.offset.bodyOffset( elem );
-	}
-
-	return getOffset( elem, doc, doc.documentElement );
-};
-
-jQuery.offset = {
-
-	bodyOffset: function( body ) {
-		var top = body.offsetTop,
-			left = body.offsetLeft;
-
-		if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {
-			top  += parseFloat( jQuery.css(body, "marginTop") ) || 0;
-			left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
-		}
-
-		return { top: top, left: left };
-	},
-
-	setOffset: function( elem, options, i ) {
-		var position = jQuery.css( elem, "position" );
-
-		// set position first, in-case top/left are set even on static elem
-		if ( position === "static" ) {
-			elem.style.position = "relative";
-		}
-
-		var curElem = jQuery( elem ),
-			curOffset = curElem.offset(),
-			curCSSTop = jQuery.css( elem, "top" ),
-			curCSSLeft = jQuery.css( elem, "left" ),
-			calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
-			props = {}, curPosition = {}, curTop, curLeft;
-
-		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
-		if ( calculatePosition ) {
-			curPosition = curElem.position();
-			curTop = curPosition.top;
-			curLeft = curPosition.left;
-		} else {
-			curTop = parseFloat( curCSSTop ) || 0;
-			curLeft = parseFloat( curCSSLeft ) || 0;
-		}
-
-		if ( jQuery.isFunction( options ) ) {
-			options = options.call( elem, i, curOffset );
-		}
-
-		if ( options.top != null ) {
-			props.top = ( options.top - curOffset.top ) + curTop;
-		}
-		if ( options.left != null ) {
-			props.left = ( options.left - curOffset.left ) + curLeft;
-		}
-
-		if ( "using" in options ) {
-			options.using.call( elem, props );
-		} else {
-			curElem.css( props );
-		}
-	}
-};
-
-
-jQuery.fn.extend({
-
-	position: function() {
-		if ( !this[0] ) {
-			return null;
-		}
-
-		var elem = this[0],
-
-		// Get *real* offsetParent
-		offsetParent = this.offsetParent(),
-
-		// Get correct offsets
-		offset       = this.offset(),
-		parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
-
-		// Subtract element margins
-		// note: when an element has margin: auto the offsetLeft and marginLeft
-		// are the same in Safari causing offset.left to incorrectly be 0
-		offset.top  -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
-		offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
-
-		// Add offsetParent borders
-		parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
-		parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
-
-		// Subtract the two offsets
-		return {
-			top:  offset.top  - parentOffset.top,
-			left: offset.left - parentOffset.left
-		};
-	},
-
-	offsetParent: function() {
-		return this.map(function() {
-			var offsetParent = this.offsetParent || document.body;
-			while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
-				offsetParent = offsetParent.offsetParent;
-			}
-			return offsetParent;
-		});
-	}
-});
-
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
-	var top = /Y/.test( prop );
-
-	jQuery.fn[ method ] = function( val ) {
-		return jQuery.access( this, function( elem, method, val ) {
-			var win = getWindow( elem );
-
-			if ( val === undefined ) {
-				return win ? (prop in win) ? win[ prop ] :
-					jQuery.support.boxModel && win.document.documentElement[ method ] ||
-						win.document.body[ method ] :
-					elem[ method ];
-			}
-
-			if ( win ) {
-				win.scrollTo(
-					!top ? val : jQuery( win ).scrollLeft(),
-					 top ? val : jQuery( win ).scrollTop()
-				);
-
-			} else {
-				elem[ method ] = val;
-			}
-		}, method, val, arguments.length, null );
-	};
-});
-
-function getWindow( elem ) {
-	return jQuery.isWindow( elem ) ?
-		elem :
-		elem.nodeType === 9 ?
-			elem.defaultView || elem.parentWindow :
-			false;
-}
-
-
-
-
-// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods
-jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
-	var clientProp = "client" + name,
-		scrollProp = "scroll" + name,
-		offsetProp = "offset" + name;
-
-	// innerHeight and innerWidth
-	jQuery.fn[ "inner" + name ] = function() {
-		var elem = this[0];
-		return elem ?
-			elem.style ?
-			parseFloat( jQuery.css( elem, type, "padding" ) ) :
-			this[ type ]() :
-			null;
-	};
-
-	// outerHeight and outerWidth
-	jQuery.fn[ "outer" + name ] = function( margin ) {
-		var elem = this[0];
-		return elem ?
-			elem.style ?
-			parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) :
-			this[ type ]() :
-			null;
-	};
-
-	jQuery.fn[ type ] = function( value ) {
-		return jQuery.access( this, function( elem, type, value ) {
-			var doc, docElemProp, orig, ret;
-
-			if ( jQuery.isWindow( elem ) ) {
-				// 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
-				doc = elem.document;
-				docElemProp = doc.documentElement[ clientProp ];
-				return jQuery.support.boxModel && docElemProp ||
-					doc.body && doc.body[ clientProp ] || docElemProp;
-			}
-
-			// Get document width or height
-			if ( elem.nodeType === 9 ) {
-				// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
-				doc = elem.documentElement;
-
-				// when a window > document, IE6 reports a offset[Width/Height] > client[Width/Height]
-				// so we can't use max, as it'll choose the incorrect offset[Width/Height]
-				// instead we use the correct client[Width/Height]
-				// support:IE6
-				if ( doc[ clientProp ] >= doc[ scrollProp ] ) {
-					return doc[ clientProp ];
-				}
-
-				return Math.max(
-					elem.body[ scrollProp ], doc[ scrollProp ],
-					elem.body[ offsetProp ], doc[ offsetProp ]
-				);
-			}
-
-			// Get width or height on the element
-			if ( value === undefined ) {
-				orig = jQuery.css( elem, type );
-				ret = parseFloat( orig );
-				return jQuery.isNumeric( ret ) ? ret : orig;
-			}
-
-			// Set the width or height on the element
-			jQuery( elem ).css( type, value );
-		}, type, value, arguments.length, null );
-	};
-});
-
-
-
-
-// Expose jQuery to the global object
-window.jQuery = window.$ = jQuery;
-
-// Expose jQuery as an AMD module, but only for AMD loaders that
-// understand the issues with loading multiple versions of jQuery
-// in a page that all might call define(). The loader will indicate
-// they have special allowances for multiple jQuery versions by
-// specifying define.amd.jQuery = true. Register as a named module,
-// since jQuery can be concatenated with other files that may use define,
-// but not use a proper concatenation script that understands anonymous
-// AMD modules. A named AMD is safest and most robust way to register.
-// Lowercase jquery is used because AMD module names are derived from
-// file names, and jQuery is normally delivered in a lowercase file name.
-// Do this after creating the global so that if an AMD module wants to call
-// noConflict to hide this version of jQuery, it will work.
-if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
-	define( "jquery", [], function () { return jQuery; } );
-}
-
-
-
-})( window );
+/** vim: et:ts=4:sw=4:sts=4

+ * @license RequireJS 2.0.2 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.

+ * Available via the MIT or new BSD license.

+ * see: http://github.com/jrburke/requirejs for details

+ */

+/*jslint regexp: true, nomen: true */

+/*global window, navigator, document, importScripts, jQuery, setTimeout, opera */

+

+var requirejs, require, define;

+(function (global) {

+    'use strict';

+

+    var version = '0.0.0',

+        commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,

+        cjsRequireRegExp = /require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,

+        jsSuffixRegExp = /\.js$/,

+        currDirRegExp = /^\.\//,

+        ostring = Object.prototype.toString,

+        ap = Array.prototype,

+        aps = ap.slice,

+        apsp = ap.splice,

+        isBrowser = !!(typeof window !== 'undefined' && navigator && document),

+        isWebWorker = !isBrowser && typeof importScripts !== 'undefined',

+        //PS3 indicates loaded and complete, but need to wait for complete

+        //specifically. Sequence is 'loading', 'loaded', execution,

+        // then 'complete'. The UA check is unfortunate, but not sure how

+        //to feature test w/o causing perf issues.

+        readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ?

+                      /^complete$/ : /^(complete|loaded)$/,

+        defContextName = '_',

+        //Oh the tragedy, detecting opera. See the usage of isOpera for reason.

+        isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]',

+        contexts = {},

+        cfg = {},

+        globalDefQueue = [],

+        useInteractive = false,

+        req, s, head, baseElement, dataMain, src,

+        interactiveScript, currentlyAddingScript, mainScript, subPath;

+

+    function isFunction(it) {

+        return ostring.call(it) === '[object Function]';

+    }

+

+    function isArray(it) {

+        return ostring.call(it) === '[object Array]';

+    }

+

+    /**

+     * Helper function for iterating over an array. If the func returns

+     * a true value, it will break out of the loop.

+     */

+    function each(ary, func) {

+        if (ary) {

+            var i;

+            for (i = 0; i < ary.length; i += 1) {

+                if (ary[i] && func(ary[i], i, ary)) {

+                    break;

+                }

+            }

+        }

+    }

+

+    /**

+     * Helper function for iterating over an array backwards. If the func

+     * returns a true value, it will break out of the loop.

+     */

+    function eachReverse(ary, func) {

+        if (ary) {

+            var i;

+            for (i = ary.length - 1; i > -1; i -= 1) {

+                if (ary[i] && func(ary[i], i, ary)) {

+                    break;

+                }

+            }

+        }

+    }

+

+    function hasProp(obj, prop) {

+        return obj.hasOwnProperty(prop);

+    }

+

+    /**

+     * Cycles over properties in an object and calls a function for each

+     * property value. If the function returns a truthy value, then the

+     * iteration is stopped.

+     */

+    function eachProp(obj, func) {

+        var prop;

+        for (prop in obj) {

+            if (obj.hasOwnProperty(prop)) {

+                if (func(obj[prop], prop)) {

+                    break;

+                }

+            }

+        }

+    }

+

+    /**

+     * Simple function to mix in properties from source into target,

+     * but only if target does not already have a property of the same name.

+     * This is not robust in IE for transferring methods that match

+     * Object.prototype names, but the uses of mixin here seem unlikely to

+     * trigger a problem related to that.

+     */

+    function mixin(target, source, force, deepStringMixin) {

+        if (source) {

+            eachProp(source, function (value, prop) {

+                if (force || !hasProp(target, prop)) {

+                    if (deepStringMixin && typeof value !== 'string') {

+                        if (!target[prop]) {

+                            target[prop] = {};

+                        }

+                        mixin(target[prop], value, force, deepStringMixin);

+                    } else {

+                        target[prop] = value;

+                    }

+                }

+            });

+        }

+        return target;

+    }

+

+    //Similar to Function.prototype.bind, but the 'this' object is specified

+    //first, since it is easier to read/figure out what 'this' will be.

+    function bind(obj, fn) {

+        return function () {

+            return fn.apply(obj, arguments);

+        };

+    }

+

+    function scripts() {

+        return document.getElementsByTagName('script');

+    }

+

+    //Allow getting a global that expressed in

+    //dot notation, like 'a.b.c'.

+    function getGlobal(value) {

+        if (!value) {

+            return value;

+        }

+        var g = global;

+        each(value.split('.'), function (part) {

+            g = g[part];

+        });

+        return g;

+    }

+

+    function makeContextModuleFunc(func, relMap, enableBuildCallback) {

+        return function () {

+            //A version of a require function that passes a moduleName

+            //value for items that may need to

+            //look up paths relative to the moduleName

+            var args = aps.call(arguments, 0), lastArg;

+            if (enableBuildCallback &&

+                isFunction((lastArg = args[args.length - 1]))) {

+                lastArg.__requireJsBuild = true;

+            }

+            args.push(relMap);

+            return func.apply(null, args);

+        };

+    }

+

+    function addRequireMethods(req, context, relMap) {

+        each([

+            ['toUrl'],

+            ['undef'],

+            ['defined', 'requireDefined'],

+            ['specified', 'requireSpecified']

+        ], function (item) {

+            var prop = item[1] || item[0];

+            req[item[0]] = context ? makeContextModuleFunc(context[prop], relMap) :

+                //If no context, then use default context. Reference from

+                //contexts instead of early binding to default context, so

+                //that during builds, the latest instance of the default

+                //context with its config gets used.

+                function () {

+                    var ctx = contexts[defContextName];

+                    return ctx[prop].apply(ctx, arguments);

+                };

+        });

+    }

+

+    /**

+     * Constructs an error with a pointer to an URL with more information.

+     * @param {String} id the error ID that maps to an ID on a web page.

+     * @param {String} message human readable error.

+     * @param {Error} [err] the original error, if there is one.

+     *

+     * @returns {Error}

+     */

+    function makeError(id, msg, err, requireModules) {

+        var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id);

+        e.requireType = id;

+        e.requireModules = requireModules;

+        if (err) {

+            e.originalError = err;

+        }

+        return e;

+    }

+

+    if (typeof define !== 'undefined') {

+        //If a define is already in play via another AMD loader,

+        //do not overwrite.

+        return;

+    }

+

+    if (typeof requirejs !== 'undefined') {

+        if (isFunction(requirejs)) {

+            //Do not overwrite and existing requirejs instance.

+            return;

+        }

+        cfg = requirejs;

+        requirejs = undefined;

+    }

+

+    //Allow for a require config object

+    if (typeof require !== 'undefined' && !isFunction(require)) {

+        //assume it is a config object.

+        cfg = require;

+        require = undefined;

+    }

+

+    function newContext(contextName) {

+        var config = {

+                waitSeconds: 7,

+                baseUrl: './',

+                paths: {},

+                pkgs: {},

+                shim: {}

+            },

+            registry = {},

+            undefEvents = {},

+            defQueue = [],

+            defined = {},

+            urlFetched = {},

+            requireCounter = 1,

+            unnormalizedCounter = 1,

+            //Used to track the order in which modules

+            //should be executed, by the order they

+            //load. Important for consistent cycle resolution

+            //behavior.

+            waitAry = [],

+            inCheckLoaded, Module, context, handlers,

+            checkLoadedTimeoutId;

+

+        /**

+         * Trims the . and .. from an array of path segments.

+         * It will keep a leading path segment if a .. will become

+         * the first path segment, to help with module name lookups,

+         * which act like paths, but can be remapped. But the end result,

+         * all paths that use this function should look normalized.

+         * NOTE: this method MODIFIES the input array.

+         * @param {Array} ary the array of path segments.

+         */

+        function trimDots(ary) {

+            var i, part;

+            for (i = 0; ary[i]; i+= 1) {

+                part = ary[i];

+                if (part === '.') {

+                    ary.splice(i, 1);

+                    i -= 1;

+                } else if (part === '..') {

+                    if (i === 1 && (ary[2] === '..' || ary[0] === '..')) {

+                        //End of the line. Keep at least one non-dot

+                        //path segment at the front so it can be mapped

+                        //correctly to disk. Otherwise, there is likely

+                        //no path mapping for a path starting with '..'.

+                        //This can still fail, but catches the most reasonable

+                        //uses of ..

+                        break;

+                    } else if (i > 0) {

+                        ary.splice(i - 1, 2);

+                        i -= 2;

+                    }

+                }

+            }

+        }

+

+        /**

+         * Given a relative module name, like ./something, normalize it to

+         * a real name that can be mapped to a path.

+         * @param {String} name the relative name

+         * @param {String} baseName a real name that the name arg is relative

+         * to.

+         * @param {Boolean} applyMap apply the map config to the value. Should

+         * only be done if this normalization is for a dependency ID.

+         * @returns {String} normalized name

+         */

+        function normalize(name, baseName, applyMap) {

+            var baseParts = baseName && baseName.split('/'),

+                map = config.map,

+                starMap = map && map['*'],

+                pkgName, pkgConfig, mapValue, nameParts, i, j, nameSegment,

+                foundMap;

+

+            //Adjust any relative paths.

+            if (name && name.charAt(0) === '.') {

+                //If have a base name, try to normalize against it,

+                //otherwise, assume it is a top-level require that will

+                //be relative to baseUrl in the end.

+                if (baseName) {

+                    if (config.pkgs[baseName]) {

+                        //If the baseName is a package name, then just treat it as one

+                        //name to concat the name with.

+                        baseParts = [baseName];

+                    } else {

+                        //Convert baseName to array, and lop off the last part,

+                        //so that . matches that 'directory' and not name of the baseName's

+                        //module. For instance, baseName of 'one/two/three', maps to

+                        //'one/two/three.js', but we want the directory, 'one/two' for

+                        //this normalization.

+                        baseParts = baseParts.slice(0, baseParts.length - 1);

+                    }

+

+                    name = baseParts.concat(name.split('/'));

+                    trimDots(name);

+

+                    //Some use of packages may use a . path to reference the

+                    //'main' module name, so normalize for that.

+                    pkgConfig = config.pkgs[(pkgName = name[0])];

+                    name = name.join('/');

+                    if (pkgConfig && name === pkgName + '/' + pkgConfig.main) {

+                        name = pkgName;

+                    }

+                } else if (name.indexOf('./') === 0) {

+                    // No baseName, so this is ID is resolved relative

+                    // to baseUrl, pull off the leading dot.

+                    name = name.substring(2);

+                }

+            }

+

+            //Apply map config if available.

+            if (applyMap && (baseParts || starMap) && map) {

+                nameParts = name.split('/');

+

+                for (i = nameParts.length; i > 0; i -= 1) {

+                    nameSegment = nameParts.slice(0, i).join('/');

+

+                    if (baseParts) {

+                        //Find the longest baseName segment match in the config.

+                        //So, do joins on the biggest to smallest lengths of baseParts.

+                        for (j = baseParts.length; j > 0; j -= 1) {

+                            mapValue = map[baseParts.slice(0, j).join('/')];

+

+                            //baseName segment has  config, find if it has one for

+                            //this name.

+                            if (mapValue) {

+                                mapValue = mapValue[nameSegment];

+                                if (mapValue) {

+                                    //Match, update name to the new value.

+                                    foundMap = mapValue;

+                                    break;

+                                }

+                            }

+                        }

+                    }

+

+                    if (!foundMap && starMap && starMap[nameSegment]) {

+                        foundMap = starMap[nameSegment];

+                    }

+

+                    if (foundMap) {

+                        nameParts.splice(0, i, foundMap);

+                        name = nameParts.join('/');

+                        break;

+                    }

+                }

+            }

+

+            return name;

+        }

+

+        function removeScript(name) {

+            if (isBrowser) {

+                each(scripts(), function (scriptNode) {

+                    if (scriptNode.getAttribute('data-requiremodule') === name &&

+                        scriptNode.getAttribute('data-requirecontext') === context.contextName) {

+                        scriptNode.parentNode.removeChild(scriptNode);

+                        return true;

+                    }

+                });

+            }

+        }

+

+        function hasPathFallback(id) {

+            var pathConfig = config.paths[id];

+            if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) {

+                removeScript(id);

+                //Pop off the first array value, since it failed, and

+                //retry

+                pathConfig.shift();

+                context.undef(id);

+                context.require([id]);

+                return true;

+            }

+        }

+

+        /**

+         * Creates a module mapping that includes plugin prefix, module

+         * name, and path. If parentModuleMap is provided it will

+         * also normalize the name via require.normalize()

+         *

+         * @param {String} name the module name

+         * @param {String} [parentModuleMap] parent module map

+         * for the module name, used to resolve relative names.

+         * @param {Boolean} isNormalized: is the ID already normalized.

+         * This is true if this call is done for a define() module ID.

+         * @param {Boolean} applyMap: apply the map config to the ID.

+         * Should only be true if this map is for a dependency.

+         *

+         * @returns {Object}

+         */

+        function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) {

+            var index = name ? name.indexOf('!') : -1,

+                prefix = null,

+                parentName = parentModuleMap ? parentModuleMap.name : null,

+                originalName = name,

+                isDefine = true,

+                normalizedName = '',

+                url, pluginModule, suffix;

+

+            //If no name, then it means it is a require call, generate an

+            //internal name.

+            if (!name) {

+                isDefine = false;

+                name = '_@r' + (requireCounter += 1);

+            }

+

+            if (index !== -1) {

+                prefix = name.substring(0, index);

+                name = name.substring(index + 1, name.length);

+            }

+

+            if (prefix) {

+                prefix = normalize(prefix, parentName, applyMap);

+                pluginModule = defined[prefix];

+            }

+

+            //Account for relative paths if there is a base name.

+            if (name) {

+                if (prefix) {

+                    if (pluginModule && pluginModule.normalize) {

+                        //Plugin is loaded, use its normalize method.

+                        normalizedName = pluginModule.normalize(name, function (name) {

+                            return normalize(name, parentName, applyMap);

+                        });

+                    } else {

+                        normalizedName = normalize(name, parentName, applyMap);

+                    }

+                } else {

+                    //A regular module.

+                    normalizedName = normalize(name, parentName, applyMap);

+

+                    //Calculate url for the module, if it has a name.

+                    //Use name here since nameToUrl also calls normalize,

+                    //and for relative names that are outside the baseUrl

+                    //this causes havoc. Was thinking of just removing

+                    //parentModuleMap to avoid extra normalization, but

+                    //normalize() still does a dot removal because of

+                    //issue #142, so just pass in name here and redo

+                    //the normalization. Paths outside baseUrl are just

+                    //messy to support.

+                    url = context.nameToUrl(name, null, parentModuleMap);

+                }

+            }

+

+            //If the id is a plugin id that cannot be determined if it needs

+            //normalization, stamp it with a unique ID so two matching relative

+            //ids that may conflict can be separate.

+            suffix = prefix && !pluginModule && !isNormalized ?

+                     '_unnormalized' + (unnormalizedCounter += 1) :

+                     '';

+

+            return {

+                prefix: prefix,

+                name: normalizedName,

+                parentMap: parentModuleMap,

+                unnormalized: !!suffix,

+                url: url,

+                originalName: originalName,

+                isDefine: isDefine,

+                id: (prefix ?

+                    prefix + '!' + normalizedName :

+                    normalizedName) + suffix

+            };

+        }

+

+        function getModule(depMap) {

+            var id = depMap.id,

+                mod = registry[id];

+

+            if (!mod) {

+                mod = registry[id] = new context.Module(depMap);

+            }

+

+            return mod;

+        }

+

+        function on(depMap, name, fn) {

+            var id = depMap.id,

+                mod = registry[id];

+

+            if (hasProp(defined, id) &&

+                (!mod || mod.defineEmitComplete)) {

+                if (name === 'defined') {

+                    fn(defined[id]);

+                }

+            } else {

+                getModule(depMap).on(name, fn);

+            }

+        }

+

+        function onError(err, errback) {

+            var ids = err.requireModules,

+                notified = false;

+

+            if (errback) {

+                errback(err);

+            } else {

+                each(ids, function (id) {

+                    var mod = registry[id];

+                    if (mod) {

+                        //Set error on module, so it skips timeout checks.

+                        mod.error = err;

+                        if (mod.events.error) {

+                            notified = true;

+                            mod.emit('error', err);

+                        }

+                    }

+                });

+

+                if (!notified) {

+                    req.onError(err);

+                }

+            }

+        }

+

+        /**

+         * Internal method to transfer globalQueue items to this context's

+         * defQueue.

+         */

+        function takeGlobalQueue() {

+            //Push all the globalDefQueue items into the context's defQueue

+            if (globalDefQueue.length) {

+                //Array splice in the values since the context code has a

+                //local var ref to defQueue, so cannot just reassign the one

+                //on context.

+                apsp.apply(defQueue,

+                           [defQueue.length - 1, 0].concat(globalDefQueue));

+                globalDefQueue = [];

+            }

+        }

+

+        /**

+         * Helper function that creates a require function object to give to

+         * modules that ask for it as a dependency. It needs to be specific

+         * per module because of the implication of path mappings that may

+         * need to be relative to the module name.

+         */

+        function makeRequire(mod, enableBuildCallback, altRequire) {

+            var relMap = mod && mod.map,

+                modRequire = makeContextModuleFunc(altRequire || context.require,

+                                                   relMap,

+                                                   enableBuildCallback);

+

+            addRequireMethods(modRequire, context, relMap);

+            modRequire.isBrowser = isBrowser;

+

+            return modRequire;

+        }

+

+        handlers = {

+            'require': function (mod) {

+                return makeRequire(mod);

+            },

+            'exports': function (mod) {

+                mod.usingExports = true;

+                if (mod.map.isDefine) {

+                    return (mod.exports = defined[mod.map.id] = {});

+                }

+            },

+            'module': function (mod) {

+                return (mod.module = {

+                    id: mod.map.id,

+                    uri: mod.map.url,

+                    config: function () {

+                        return (config.config && config.config[mod.map.id]) || {};

+                    },

+                    exports: defined[mod.map.id]

+                });

+            }

+        };

+

+        function removeWaiting(id) {

+            //Clean up machinery used for waiting modules.

+            delete registry[id];

+

+            each(waitAry, function (mod, i) {

+                if (mod.map.id === id) {

+                    waitAry.splice(i, 1);

+                    if (!mod.defined) {

+                        context.waitCount -= 1;

+                    }

+                    return true;

+                }

+            });

+        }

+

+        function findCycle(mod, traced) {

+            var id = mod.map.id,

+                depArray = mod.depMaps,

+                foundModule;

+

+            //Do not bother with unitialized modules or not yet enabled

+            //modules.

+            if (!mod.inited) {

+                return;

+            }

+

+            //Found the cycle.

+            if (traced[id]) {

+                return mod;

+            }

+

+            traced[id] = true;

+

+            //Trace through the dependencies.

+            each(depArray, function (depMap) {

+                var depId = depMap.id,

+                    depMod = registry[depId];

+

+                if (!depMod) {

+                    return;

+                }

+

+                if (!depMod.inited || !depMod.enabled) {

+                    //Dependency is not inited, so this cannot

+                    //be used to determine a cycle.

+                    foundModule = null;

+                    delete traced[id];

+                    return true;

+                }

+

+                //mixin traced to a new object for each dependency, so that

+                //sibling dependencies in this object to not generate a

+                //false positive match on a cycle. Ideally an Object.create

+                //type of prototype delegation would be used here, but

+                //optimizing for file size vs. execution speed since hopefully

+                //the trees are small for circular dependency scans relative

+                //to the full app perf.

+                return (foundModule = findCycle(depMod, mixin({}, traced)));

+            });

+

+            return foundModule;

+        }

+

+        function forceExec(mod, traced, uninited) {

+            var id = mod.map.id,

+                depArray = mod.depMaps;

+

+            if (!mod.inited || !mod.map.isDefine) {

+                return;

+            }

+

+            if (traced[id]) {

+                return defined[id];

+            }

+

+            traced[id] = mod;

+

+            each(depArray, function(depMap) {

+                var depId = depMap.id,

+                    depMod = registry[depId],

+                    value;

+

+                if (handlers[depId]) {

+                    return;

+                }

+

+                if (depMod) {

+                    if (!depMod.inited || !depMod.enabled) {

+                        //Dependency is not inited,

+                        //so this module cannot be

+                        //given a forced value yet.

+                        uninited[id] = true;

+                        return;

+                    }

+

+                    //Get the value for the current dependency

+                    value = forceExec(depMod, traced, uninited);

+

+                    //Even with forcing it may not be done,

+                    //in particular if the module is waiting

+                    //on a plugin resource.

+                    if (!uninited[depId]) {

+                        mod.defineDepById(depId, value);

+                    }

+                }

+            });

+

+            mod.check(true);

+

+            return defined[id];

+        }

+

+        function modCheck(mod) {

+            mod.check();

+        }

+

+        function checkLoaded() {

+            var waitInterval = config.waitSeconds * 1000,

+                //It is possible to disable the wait interval by using waitSeconds of 0.

+                expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(),

+                noLoads = [],

+                stillLoading = false,

+                needCycleCheck = true,

+                map, modId, err, usingPathFallback;

+

+            //Do not bother if this call was a result of a cycle break.

+            if (inCheckLoaded) {

+                return;

+            }

+

+            inCheckLoaded = true;

+

+            //Figure out the state of all the modules.

+            eachProp(registry, function (mod) {

+                map = mod.map;

+                modId = map.id;

+

+                //Skip things that are not enabled or in error state.

+                if (!mod.enabled) {

+                    return;

+                }

+

+                if (!mod.error) {

+                    //If the module should be executed, and it has not

+                    //been inited and time is up, remember it.

+                    if (!mod.inited && expired) {

+                        if (hasPathFallback(modId)) {

+                            usingPathFallback = true;

+                            stillLoading = true;

+                        } else {

+                            noLoads.push(modId);

+                            removeScript(modId);

+                        }

+                    } else if (!mod.inited && mod.fetched && map.isDefine) {

+                        stillLoading = true;

+                        if (!map.prefix) {

+                            //No reason to keep looking for unfinished

+                            //loading. If the only stillLoading is a

+                            //plugin resource though, keep going,

+                            //because it may be that a plugin resource

+                            //is waiting on a non-plugin cycle.

+                            return (needCycleCheck = false);

+                        }

+                    }

+                }

+            });

+

+            if (expired && noLoads.length) {

+                //If wait time expired, throw error of unloaded modules.

+                err = makeError('timeout', 'Load timeout for modules: ' + noLoads, null, noLoads);

+                err.contextName = context.contextName;

+                return onError(err);

+            }

+

+            //Not expired, check for a cycle.

+            if (needCycleCheck) {

+

+                each(waitAry, function (mod) {

+                    if (mod.defined) {

+                        return;

+                    }

+

+                    var cycleMod = findCycle(mod, {}),

+                        traced = {};

+

+                    if (cycleMod) {

+                        forceExec(cycleMod, traced, {});

+

+                        //traced modules may have been

+                        //removed from the registry, but

+                        //their listeners still need to

+                        //be called.

+                        eachProp(traced, modCheck);

+                    }

+                });

+

+                //Now that dependencies have

+                //been satisfied, trigger the

+                //completion check that then

+                //notifies listeners.

+                eachProp(registry, modCheck);

+            }

+

+            //If still waiting on loads, and the waiting load is something

+            //other than a plugin resource, or there are still outstanding

+            //scripts, then just try back later.

+            if ((!expired || usingPathFallback) && stillLoading) {

+                //Something is still waiting to load. Wait for it, but only

+                //if a timeout is not already in effect.

+                if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) {

+                    checkLoadedTimeoutId = setTimeout(function () {

+                        checkLoadedTimeoutId = 0;

+                        checkLoaded();

+                    }, 50);

+                }

+            }

+

+            inCheckLoaded = false;

+        }

+

+        Module = function (map) {

+            this.events = undefEvents[map.id] || {};

+            this.map = map;

+            this.shim = config.shim[map.id];

+            this.depExports = [];

+            this.depMaps = [];

+            this.depMatched = [];

+            this.pluginMaps = {};

+            this.depCount = 0;

+

+            /* this.exports this.factory

+               this.depMaps = [],

+               this.enabled, this.fetched

+            */

+        };

+

+        Module.prototype = {

+            init: function(depMaps, factory, errback, options) {

+                options = options || {};

+

+                //Do not do more inits if already done. Can happen if there

+                //are multiple define calls for the same module. That is not

+                //a normal, common case, but it is also not unexpected.

+                if (this.inited) {

+                    return;

+                }

+

+                this.factory = factory;

+

+                if (errback) {

+                    //Register for errors on this module.

+                    this.on('error', errback);

+                } else if (this.events.error) {

+                    //If no errback already, but there are error listeners

+                    //on this module, set up an errback to pass to the deps.

+                    errback = bind(this, function (err) {

+                        this.emit('error', err);

+                    });

+                }

+

+                //Do a copy of the dependency array, so that

+                //source inputs are not modified. For example

+                //"shim" deps are passed in here directly, and

+                //doing a direct modification of the depMaps array

+                //would affect that config.

+                this.depMaps = depMaps && depMaps.slice(0);

+                this.depMaps.rjsSkipMap = depMaps.rjsSkipMap;

+

+                this.errback = errback;

+

+                //Indicate this module has be initialized

+                this.inited = true;

+

+                this.ignore = options.ignore;

+

+                //Could have option to init this module in enabled mode,

+                //or could have been previously marked as enabled. However,

+                //the dependencies are not known until init is called. So

+                //if enabled previously, now trigger dependencies as enabled.

+                if (options.enabled || this.enabled) {

+                    //Enable this module and dependencies.

+                    //Will call this.check()

+                    this.enable();

+                } else {

+                    this.check();

+                }

+            },

+

+            defineDepById: function (id, depExports) {

+                var i;

+

+                //Find the index for this dependency.

+                each(this.depMaps, function (map, index) {

+                    if (map.id === id) {

+                        i = index;

+                        return true;

+                    }

+                });

+

+                return this.defineDep(i, depExports);

+            },

+

+            defineDep: function (i, depExports) {

+                //Because of cycles, defined callback for a given

+                //export can be called more than once.

+                if (!this.depMatched[i]) {

+                    this.depMatched[i] = true;

+                    this.depCount -= 1;

+                    this.depExports[i] = depExports;

+                }

+            },

+

+            fetch: function () {

+                if (this.fetched) {

+                    return;

+                }

+                this.fetched = true;

+

+                context.startTime = (new Date()).getTime();

+

+                var map = this.map;

+

+                //If the manager is for a plugin managed resource,

+                //ask the plugin to load it now.

+                if (this.shim) {

+                    makeRequire(this, true)(this.shim.deps || [], bind(this, function () {

+                        return map.prefix ? this.callPlugin() : this.load();

+                    }));

+                } else {

+                    //Regular dependency.

+                    return map.prefix ? this.callPlugin() : this.load();

+                }

+            },

+

+            load: function() {

+                var url = this.map.url;

+

+                //Regular dependency.

+                if (!urlFetched[url]) {

+                    urlFetched[url] = true;

+                    context.load(this.map.id, url);

+                }

+            },

+

+            /**

+             * Checks is the module is ready to define itself, and if so,

+             * define it. If the silent argument is true, then it will just

+             * define, but not notify listeners, and not ask for a context-wide

+             * check of all loaded modules. That is useful for cycle breaking.

+             */

+            check: function (silent) {

+                if (!this.enabled || this.enabling) {

+                    return;

+                }

+

+                var id = this.map.id,

+                    depExports = this.depExports,

+                    exports = this.exports,

+                    factory = this.factory,

+                    err, cjsModule;

+

+                if (!this.inited) {

+                    this.fetch();

+                } else if (this.error) {

+                    this.emit('error', this.error);

+                } else if (!this.defining) {

+                    //The factory could trigger another require call

+                    //that would result in checking this module to

+                    //define itself again. If already in the process

+                    //of doing that, skip this work.

+                    this.defining = true;

+

+                    if (this.depCount < 1 && !this.defined) {

+                        if (isFunction(factory)) {

+                            //If there is an error listener, favor passing

+                            //to that instead of throwing an error.

+                            if (this.events.error) {

+                                try {

+                                    exports = context.execCb(id, factory, depExports, exports);

+                                } catch (e) {

+                                    err = e;

+                                }

+                            } else {

+                                exports = context.execCb(id, factory, depExports, exports);

+                            }

+

+                            if (this.map.isDefine) {

+                                //If setting exports via 'module' is in play,

+                                //favor that over return value and exports. After that,

+                                //favor a non-undefined return value over exports use.

+                                cjsModule = this.module;

+                                if (cjsModule &&

+                                    cjsModule.exports !== undefined &&

+                                    //Make sure it is not already the exports value

+                                    cjsModule.exports !== this.exports) {

+                                    exports = cjsModule.exports;

+                                } else if (exports === undefined && this.usingExports) {

+                                    //exports already set the defined value.

+                                    exports = this.exports;

+                                }

+                            }

+

+                            if (err) {

+                                err.requireMap = this.map;

+                                err.requireModules = [this.map.id];

+                                err.requireType = 'define';

+                                return onError((this.error = err));

+                            }

+

+                        } else {

+                            //Just a literal value

+                            exports = factory;

+                        }

+

+                        this.exports = exports;

+

+                        if (this.map.isDefine && !this.ignore) {

+                            defined[id] = exports;

+

+                            if (req.onResourceLoad) {

+                                req.onResourceLoad(context, this.map, this.depMaps);

+                            }

+                        }

+

+                        //Clean up

+                        delete registry[id];

+

+                        this.defined = true;

+                        context.waitCount -= 1;

+                        if (context.waitCount === 0) {

+                            //Clear the wait array used for cycles.

+                            waitAry = [];

+                        }

+                    }

+

+                    //Finished the define stage. Allow calling check again

+                    //to allow define notifications below in the case of a

+                    //cycle.

+                    this.defining = false;

+

+                    if (!silent) {

+                        if (this.defined && !this.defineEmitted) {

+                            this.defineEmitted = true;

+                            this.emit('defined', this.exports);

+                            this.defineEmitComplete = true;

+                        }

+                    }

+                }

+            },

+

+            callPlugin: function() {

+                var map = this.map,

+                    id = map.id,

+                    pluginMap = makeModuleMap(map.prefix, null, false, true);

+

+                on(pluginMap, 'defined', bind(this, function (plugin) {

+                    var name = this.map.name,

+                        parentName = this.map.parentMap ? this.map.parentMap.name : null,

+                        load, normalizedMap, normalizedMod;

+

+                    //If current map is not normalized, wait for that

+                    //normalized name to load instead of continuing.

+                    if (this.map.unnormalized) {

+                        //Normalize the ID if the plugin allows it.

+                        if (plugin.normalize) {

+                            name = plugin.normalize(name, function (name) {

+                                return normalize(name, parentName, true);

+                            }) || '';

+                        }

+

+                        normalizedMap = makeModuleMap(map.prefix + '!' + name,

+                                                      this.map.parentMap,

+                                                      false,

+                                                      true);

+                        on(normalizedMap,

+                           'defined', bind(this, function (value) {

+                            this.init([], function () { return value; }, null, {

+                                enabled: true,

+                                ignore: true

+                            });

+                        }));

+                        normalizedMod = registry[normalizedMap.id];

+                        if (normalizedMod) {

+                            if (this.events.error) {

+                                normalizedMod.on('error', bind(this, function (err) {

+                                    this.emit('error', err);

+                                }));

+                            }

+                            normalizedMod.enable();

+                        }

+

+                        return;

+                    }

+

+                    load = bind(this, function (value) {

+                        this.init([], function () { return value; }, null, {

+                            enabled: true

+                        });

+                    });

+

+                    load.error = bind(this, function (err) {

+                        this.inited = true;

+                        this.error = err;

+                        err.requireModules = [id];

+

+                        //Remove temp unnormalized modules for this module,

+                        //since they will never be resolved otherwise now.

+                        eachProp(registry, function (mod) {

+                            if (mod.map.id.indexOf(id + '_unnormalized') === 0) {

+                                removeWaiting(mod.map.id);

+                            }

+                        });

+

+                        onError(err);

+                    });

+

+                    //Allow plugins to load other code without having to know the

+                    //context or how to 'complete' the load.

+                    load.fromText = function (moduleName, text) {

+                        /*jslint evil: true */

+                        var hasInteractive = useInteractive;

+

+                        //Turn off interactive script matching for IE for any define

+                        //calls in the text, then turn it back on at the end.

+                        if (hasInteractive) {

+                            useInteractive = false;

+                        }

+

+                        //Prime the system by creating a module instance for

+                        //it.

+                        getModule(makeModuleMap(moduleName));

+

+                        req.exec(text);

+

+                        if (hasInteractive) {

+                            useInteractive = true;

+                        }

+

+                        //Support anonymous modules.

+                        context.completeLoad(moduleName);

+                    };

+

+                    //Use parentName here since the plugin's name is not reliable,

+                    //could be some weird string with no path that actually wants to

+                    //reference the parentName's path.

+                    plugin.load(map.name, makeRequire(map.parentMap, true, function (deps, cb) {

+                        deps.rjsSkipMap = true;

+                        return context.require(deps, cb);

+                    }), load, config);

+                }));

+

+                context.enable(pluginMap, this);

+                this.pluginMaps[pluginMap.id] = pluginMap;

+            },

+

+            enable: function () {

+                this.enabled = true;

+

+                if (!this.waitPushed) {

+                    waitAry.push(this);

+                    context.waitCount += 1;

+                    this.waitPushed = true;

+                }

+

+                //Set flag mentioning that the module is enabling,

+                //so that immediate calls to the defined callbacks

+                //for dependencies do not trigger inadvertent load

+                //with the depCount still being zero.

+                this.enabling = true;

+

+                //Enable each dependency

+                each(this.depMaps, bind(this, function (depMap, i) {

+                    var id, mod, handler;

+

+                    if (typeof depMap === 'string') {

+                        //Dependency needs to be converted to a depMap

+                        //and wired up to this module.

+                        depMap = makeModuleMap(depMap,

+                                               (this.map.isDefine ? this.map : this.map.parentMap),

+                                               false,

+                                               !this.depMaps.rjsSkipMap);

+                        this.depMaps[i] = depMap;

+

+                        handler = handlers[depMap.id];

+

+                        if (handler) {

+                            this.depExports[i] = handler(this);

+                            return;

+                        }

+

+                        this.depCount += 1;

+

+                        on(depMap, 'defined', bind(this, function (depExports) {

+                            this.defineDep(i, depExports);

+                            this.check();

+                        }));

+

+                        if (this.errback) {

+                            on(depMap, 'error', this.errback);

+                        }

+                    }

+

+                    id = depMap.id;

+                    mod = registry[id];

+

+                    //Skip special modules like 'require', 'exports', 'module'

+                    //Also, don't call enable if it is already enabled,

+                    //important in circular dependency cases.

+                    if (!handlers[id] && mod && !mod.enabled) {

+                        context.enable(depMap, this);

+                    }

+                }));

+

+                //Enable each plugin that is used in

+                //a dependency

+                eachProp(this.pluginMaps, bind(this, function (pluginMap) {

+                    var mod = registry[pluginMap.id];

+                    if (mod && !mod.enabled) {

+                        context.enable(pluginMap, this);

+                    }

+                }));

+

+                this.enabling = false;

+

+                this.check();

+            },

+

+            on: function(name, cb) {

+                var cbs = this.events[name];

+                if (!cbs) {

+                    cbs = this.events[name] = [];

+                }

+                cbs.push(cb);

+            },

+

+            emit: function (name, evt) {

+                each(this.events[name], function (cb) {

+                    cb(evt);

+                });

+                if (name === 'error') {

+                    //Now that the error handler was triggered, remove

+                    //the listeners, since this broken Module instance

+                    //can stay around for a while in the registry/waitAry.

+                    delete this.events[name];

+                }

+            }

+        };

+

+        function callGetModule(args) {

+            getModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]);

+        }

+

+        function removeListener(node, func, name, ieName) {

+            //Favor detachEvent because of IE9

+            //issue, see attachEvent/addEventListener comment elsewhere

+            //in this file.

+            if (node.detachEvent && !isOpera) {

+                //Probably IE. If not it will throw an error, which will be

+                //useful to know.

+                if (ieName) {

+                    node.detachEvent(ieName, func);

+                }

+            } else {

+                node.removeEventListener(name, func, false);

+            }

+        }

+

+        /**

+         * Given an event from a script node, get the requirejs info from it,

+         * and then removes the event listeners on the node.

+         * @param {Event} evt

+         * @returns {Object}

+         */

+        function getScriptData(evt) {

+            //Using currentTarget instead of target for Firefox 2.0's sake. Not

+            //all old browsers will be supported, but this one was easy enough

+            //to support and still makes sense.

+            var node = evt.currentTarget || evt.srcElement;

+

+            //Remove the listeners once here.

+            removeListener(node, context.onScriptLoad, 'load', 'onreadystatechange');

+            removeListener(node, context.onScriptError, 'error');

+

+            return {

+                node: node,

+                id: node && node.getAttribute('data-requiremodule')

+            };

+        }

+

+        return (context = {

+            config: config,

+            contextName: contextName,

+            registry: registry,

+            defined: defined,

+            urlFetched: urlFetched,

+            waitCount: 0,

+            defQueue: defQueue,

+            Module: Module,

+            makeModuleMap: makeModuleMap,

+

+            /**

+             * Set a configuration for the context.

+             * @param {Object} cfg config object to integrate.

+             */

+            configure: function (cfg) {

+                //Make sure the baseUrl ends in a slash.

+                if (cfg.baseUrl) {

+                    if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== '/') {

+                        cfg.baseUrl += '/';

+                    }

+                }

+

+                //Save off the paths and packages since they require special processing,

+                //they are additive.

+                var pkgs = config.pkgs,

+                    shim = config.shim,

+                    paths = config.paths,

+                    map = config.map;

+

+                //Mix in the config values, favoring the new values over

+                //existing ones in context.config.

+                mixin(config, cfg, true);

+

+                //Merge paths.

+                config.paths = mixin(paths, cfg.paths, true);

+

+                //Merge map

+                if (cfg.map) {

+                    config.map = mixin(map || {}, cfg.map, true, true);

+                }

+

+                //Merge shim

+                if (cfg.shim) {

+                    eachProp(cfg.shim, function (value, id) {

+                        //Normalize the structure

+                        if (isArray(value)) {

+                            value = {

+                                deps: value

+                            };

+                        }

+                        if (value.exports && !value.exports.__buildReady) {

+                            value.exports = context.makeShimExports(value.exports);

+                        }

+                        shim[id] = value;

+                    });

+                    config.shim = shim;

+                }

+

+                //Adjust packages if necessary.

+                if (cfg.packages) {

+                    each(cfg.packages, function (pkgObj) {

+                        var location;

+

+                        pkgObj = typeof pkgObj === 'string' ? { name: pkgObj } : pkgObj;

+                        location = pkgObj.location;

+

+                        //Create a brand new object on pkgs, since currentPackages can

+                        //be passed in again, and config.pkgs is the internal transformed

+                        //state for all package configs.

+                        pkgs[pkgObj.name] = {

+                            name: pkgObj.name,

+                            location: location || pkgObj.name,

+                            //Remove leading dot in main, so main paths are normalized,

+                            //and remove any trailing .js, since different package

+                            //envs have different conventions: some use a module name,

+                            //some use a file name.

+                            main: (pkgObj.main || 'main')

+                                  .replace(currDirRegExp, '')

+                                  .replace(jsSuffixRegExp, '')

+                        };

+                    });

+

+                    //Done with modifications, assing packages back to context config

+                    config.pkgs = pkgs;

+                }

+

+                //If there are any "waiting to execute" modules in the registry,

+                //update the maps for them, since their info, like URLs to load,

+                //may have changed.

+                eachProp(registry, function (mod, id) {

+                    mod.map = makeModuleMap(id);

+                });

+

+                //If a deps array or a config callback is specified, then call

+                //require with those args. This is useful when require is defined as a

+                //config object before require.js is loaded.

+                if (cfg.deps || cfg.callback) {

+                    context.require(cfg.deps || [], cfg.callback);

+                }

+            },

+

+            makeShimExports: function (exports) {

+                var func;

+                if (typeof exports === 'string') {

+                    func = function () {

+                        return getGlobal(exports);

+                    };

+                    //Save the exports for use in nodefine checking.

+                    func.exports = exports;

+                    return func;

+                } else {

+                    return function () {

+                        return exports.apply(global, arguments);

+                    };

+                }

+            },

+

+            requireDefined: function (id, relMap) {

+                return hasProp(defined, makeModuleMap(id, relMap, false, true).id);

+            },

+

+            requireSpecified: function (id, relMap) {

+                id = makeModuleMap(id, relMap, false, true).id;

+                return hasProp(defined, id) || hasProp(registry, id);

+            },

+

+            require: function (deps, callback, errback, relMap) {

+                var moduleName, id, map, requireMod, args;

+                if (typeof deps === 'string') {

+                    if (isFunction(callback)) {

+                        //Invalid call

+                        return onError(makeError('requireargs', 'Invalid require call'), errback);

+                    }

+

+                    //Synchronous access to one module. If require.get is

+                    //available (as in the Node adapter), prefer that.

+                    //In this case deps is the moduleName and callback is

+                    //the relMap

+                    if (req.get) {

+                        return req.get(context, deps, callback);

+                    }

+

+                    //Just return the module wanted. In this scenario, the

+                    //second arg (if passed) is just the relMap.

+                    moduleName = deps;

+                    relMap = callback;

+

+                    //Normalize module name, if it contains . or ..

+                    map = makeModuleMap(moduleName, relMap, false, true);

+                    id = map.id;

+

+                    if (!hasProp(defined, id)) {

+                        return onError(makeError('notloaded', 'Module name "' +

+                                    id +

+                                    '" has not been loaded yet for context: ' +

+                                    contextName));

+                    }

+                    return defined[id];

+                }

+

+                //Callback require. Normalize args. if callback or errback is

+                //not a function, it means it is a relMap. Test errback first.

+                if (errback && !isFunction(errback)) {

+                    relMap = errback;

+                    errback = undefined;

+                }

+                if (callback && !isFunction(callback)) {

+                    relMap = callback;

+                    callback = undefined;

+                }

+

+                //Any defined modules in the global queue, intake them now.

+                takeGlobalQueue();

+

+                //Make sure any remaining defQueue items get properly processed.

+                while (defQueue.length) {

+                    args = defQueue.shift();

+                    if (args[0] === null) {

+                        return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1]));

+                    } else {

+                        //args are id, deps, factory. Should be normalized by the

+                        //define() function.

+                        callGetModule(args);

+                    }

+                }

+

+                //Mark all the dependencies as needing to be loaded.

+                requireMod = getModule(makeModuleMap(null, relMap));

+

+                requireMod.init(deps, callback, errback, {

+                    enabled: true

+                });

+

+                checkLoaded();

+

+                return context.require;

+            },

+

+            undef: function (id) {

+                var map = makeModuleMap(id, null, true),

+                    mod = registry[id];

+

+                delete defined[id];

+                delete urlFetched[map.url];

+                delete undefEvents[id];

+

+                if (mod) {

+                    //Hold on to listeners in case the

+                    //module will be attempted to be reloaded

+                    //using a different config.

+                    if (mod.events.defined) {

+                        undefEvents[id] = mod.events;

+                    }

+

+                    removeWaiting(id);

+                }

+            },

+

+            /**

+             * Called to enable a module if it is still in the registry

+             * awaiting enablement. parent module is passed in for context,

+             * used by the optimizer.

+             */

+            enable: function (depMap, parent) {

+                var mod = registry[depMap.id];

+                if (mod) {

+                    getModule(depMap).enable();

+                }

+            },

+

+            /**

+             * Internal method used by environment adapters to complete a load event.

+             * A load event could be a script load or just a load pass from a synchronous

+             * load call.

+             * @param {String} moduleName the name of the module to potentially complete.

+             */

+            completeLoad: function (moduleName) {

+                var shim = config.shim[moduleName] || {},

+                shExports = shim.exports && shim.exports.exports,

+                found, args, mod;

+

+                takeGlobalQueue();

+

+                while (defQueue.length) {

+                    args = defQueue.shift();

+                    if (args[0] === null) {

+                        args[0] = moduleName;

+                        //If already found an anonymous module and bound it

+                        //to this name, then this is some other anon module

+                        //waiting for its completeLoad to fire.

+                        if (found) {

+                            break;

+                        }

+                        found = true;

+                    } else if (args[0] === moduleName) {

+                        //Found matching define call for this script!

+                        found = true;

+                    }

+

+                    callGetModule(args);

+                }

+

+                //Do this after the cycle of callGetModule in case the result

+                //of those calls/init calls changes the registry.

+                mod = registry[moduleName];

+

+                if (!found &&

+                    !defined[moduleName] &&

+                    mod && !mod.inited) {

+                    if (config.enforceDefine && (!shExports || !getGlobal(shExports))) {

+                        if (hasPathFallback(moduleName)) {

+                            return;

+                        } else {

+                            return onError(makeError('nodefine',

+                                             'No define call for ' + moduleName,

+                                             null,

+                                             [moduleName]));

+                        }

+                    } else {

+                        //A script that does not call define(), so just simulate

+                        //the call for it.

+                        callGetModule([moduleName, (shim.deps || []), shim.exports]);

+                    }

+                }

+

+                checkLoaded();

+            },

+

+            /**

+             * Converts a module name + .extension into an URL path.

+             * *Requires* the use of a module name. It does not support using

+             * plain URLs like nameToUrl.

+             */

+            toUrl: function (moduleNamePlusExt, relModuleMap) {

+                var index = moduleNamePlusExt.lastIndexOf('.'),

+                    ext = null;

+

+                if (index !== -1) {

+                    ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length);

+                    moduleNamePlusExt = moduleNamePlusExt.substring(0, index);

+                }

+

+                return context.nameToUrl(moduleNamePlusExt, ext, relModuleMap);

+            },

+

+            /**

+             * Converts a module name to a file path. Supports cases where

+             * moduleName may actually be just an URL.

+             */

+            nameToUrl: function (moduleName, ext, relModuleMap) {

+                var paths, pkgs, pkg, pkgPath, syms, i, parentModule, url,

+                    parentPath;

+

+                //Normalize module name if have a base relative module name to work from.

+                moduleName = normalize(moduleName, relModuleMap && relModuleMap.id, true);

+

+                //If a colon is in the URL, it indicates a protocol is used and it is just

+                //an URL to a file, or if it starts with a slash, contains a query arg (i.e. ?)

+                //or ends with .js, then assume the user meant to use an url and not a module id.

+                //The slash is important for protocol-less URLs as well as full paths.

+                if (req.jsExtRegExp.test(moduleName)) {

+                    //Just a plain path, not module name lookup, so just return it.

+                    //Add extension if it is included. This is a bit wonky, only non-.js things pass

+                    //an extension, this method probably needs to be reworked.

+                    url = moduleName + (ext || '');

+                } else {

+                    //A module that needs to be converted to a path.

+                    paths = config.paths;

+                    pkgs = config.pkgs;

+

+                    syms = moduleName.split('/');

+                    //For each module name segment, see if there is a path

+                    //registered for it. Start with most specific name

+                    //and work up from it.

+                    for (i = syms.length; i > 0; i -= 1) {

+                        parentModule = syms.slice(0, i).join('/');

+                        pkg = pkgs[parentModule];

+                        parentPath = paths[parentModule];

+                        if (parentPath) {

+                            //If an array, it means there are a few choices,

+                            //Choose the one that is desired

+                            if (isArray(parentPath)) {

+                                parentPath = parentPath[0];

+                            }

+                            syms.splice(0, i, parentPath);

+                            break;

+                        } else if (pkg) {

+                            //If module name is just the package name, then looking

+                            //for the main module.

+                            if (moduleName === pkg.name) {

+                                pkgPath = pkg.location + '/' + pkg.main;

+                            } else {

+                                pkgPath = pkg.location;

+                            }

+                            syms.splice(0, i, pkgPath);

+                            break;

+                        }

+                    }

+

+                    //Join the path parts together, then figure out if baseUrl is needed.

+                    url = syms.join('/') + (ext || '.js')+'?random='+Math.random();

+                    url = (url.charAt(0) === '/' || url.match(/^[\w\+\.\-]+:/) ? '' : config.baseUrl) + url;

+                }

+

+                return config.urlArgs ? url +

+                                        ((url.indexOf('?') === -1 ? '?' : '&') +

+                                         config.urlArgs) : url;

+            },

+

+            //Delegates to req.load. Broken out as a separate function to

+            //allow overriding in the optimizer.

+            load: function (id, url) {

+                req.load(context, id, url);

+            },

+

+            /**

+             * Executes a module callack function. Broken out as a separate function

+             * solely to allow the build system to sequence the files in the built

+             * layer in the right sequence.

+             *

+             * @private

+             */

+            execCb: function (name, callback, args, exports) {

+                return callback.apply(exports, args);

+            },

+

+            /**

+             * callback for script loads, used to check status of loading.

+             *

+             * @param {Event} evt the event from the browser for the script

+             * that was loaded.

+             */

+            onScriptLoad: function (evt) {

+                //Using currentTarget instead of target for Firefox 2.0's sake. Not

+                //all old browsers will be supported, but this one was easy enough

+                //to support and still makes sense.

+                if (evt.type === 'load' ||

+                    (readyRegExp.test((evt.currentTarget || evt.srcElement).readyState))) {

+                    //Reset interactive script so a script node is not held onto for

+                    //to long.

+                    interactiveScript = null;

+

+                    //Pull out the name of the module and the context.

+                    var data = getScriptData(evt);

+                    context.completeLoad(data.id);

+                }

+            },

+

+            /**

+             * Callback for script errors.

+             */

+            onScriptError: function (evt) {

+                var data = getScriptData(evt);

+                if (!hasPathFallback(data.id)) {

+                    return onError(makeError('scripterror', 'Script error', evt, [data.id]));

+                }

+            }

+        });

+    }

+

+    /**

+     * Main entry point.

+     *

+     * If the only argument to require is a string, then the module that

+     * is represented by that string is fetched for the appropriate context.

+     *

+     * If the first argument is an array, then it will be treated as an array

+     * of dependency string names to fetch. An optional function callback can

+     * be specified to execute when all of those dependencies are available.

+     *

+     * Make a local req variable to help Caja compliance (it assumes things

+     * on a require that are not standardized), and to give a short

+     * name for minification/local scope use.

+     */

+    req = requirejs = function (deps, callback, errback, optional) {

+

+        //Find the right context, use default

+        var contextName = defContextName,

+            context, config;

+

+        // Determine if have config object in the call.

+        if (!isArray(deps) && typeof deps !== 'string') {

+            // deps is a config object

+            config = deps;

+            if (isArray(callback)) {

+                // Adjust args if there are dependencies

+                deps = callback;

+                callback = errback;

+                errback = optional;

+            } else {

+                deps = [];

+            }

+        }

+

+        if (config && config.context) {

+            contextName = config.context;

+        }

+

+        context = contexts[contextName];

+        if (!context) {

+            context = contexts[contextName] = req.s.newContext(contextName);

+        }

+

+        if (config) {

+            context.configure(config);

+        }

+

+        return context.require(deps, callback, errback);

+    };

+

+    /**

+     * Support require.config() to make it easier to cooperate with other

+     * AMD loaders on globally agreed names.

+     */

+    req.config = function (config) {

+        return req(config);

+    };

+

+    /**

+     * Export require as a global, but only if it does not already exist.

+     */

+    if (!require) {

+        require = req;

+    }

+

+    req.version = version;

+

+    //Used to filter out dependencies that are already paths.

+    req.jsExtRegExp = /^\/|:|\?|\.js$/;

+    req.isBrowser = isBrowser;

+    s = req.s = {

+        contexts: contexts,

+        newContext: newContext

+    };

+

+    //Create default context.

+    req({});

+

+    //Exports some context-sensitive methods on global require, using

+    //default context if no context specified.

+    addRequireMethods(req);

+

+    if (isBrowser) {

+        head = s.head = document.getElementsByTagName('head')[0];

+        //If BASE tag is in play, using appendChild is a problem for IE6.

+        //When that browser dies, this can be removed. Details in this jQuery bug:

+        //http://dev.jquery.com/ticket/2709

+        baseElement = document.getElementsByTagName('base')[0];

+        if (baseElement) {

+            head = s.head = baseElement.parentNode;

+        }

+    }

+

+    /**

+     * Any errors that require explicitly generates will be passed to this

+     * function. Intercept/override it if you want custom error handling.

+     * @param {Error} err the error object.

+     */

+    req.onError = function (err) {

+        throw err;

+    };

+

+    /**

+     * Does the request to load a module for the browser case.

+     * Make this a separate function to allow other environments

+     * to override it.

+     *

+     * @param {Object} context the require context to find state.

+     * @param {String} moduleName the name of the module.

+     * @param {Object} url the URL to the module.

+     */

+    req.load = function (context, moduleName, url) {

+        var config = (context && context.config) || {},

+            node;

+        if (isBrowser) {

+            //In the browser so use a script tag

+            node = config.xhtml ?

+                   document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script') :

+                   document.createElement('script');

+            node.type = config.scriptType || 'text/javascript';

+            node.charset = 'utf-8';

+

+            node.setAttribute('data-requirecontext', context.contextName);

+            node.setAttribute('data-requiremodule', moduleName);

+

+            //Set up load listener. Test attachEvent first because IE9 has

+            //a subtle issue in its addEventListener and script onload firings

+            //that do not match the behavior of all other browsers with

+            //addEventListener support, which fire the onload event for a

+            //script right after the script execution. See:

+            //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution

+            //UNFORTUNATELY Opera implements attachEvent but does not follow the script

+            //script execution mode.

+            if (node.attachEvent &&

+                //Check if node.attachEvent is artificially added by custom script or

+                //natively supported by browser

+                //read https://github.com/jrburke/requirejs/issues/187

+                //if we can NOT find [native code] then it must NOT natively supported.

+                //in IE8, node.attachEvent does not have toString()

+                //Note the test for "[native code" with no closing brace, see:

+                //https://github.com/jrburke/requirejs/issues/273

+                !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) &&

+                !isOpera) {

+                //Probably IE. IE (at least 6-8) do not fire

+                //script onload right after executing the script, so

+                //we cannot tie the anonymous define call to a name.

+                //However, IE reports the script as being in 'interactive'

+                //readyState at the time of the define call.

+                useInteractive = true;

+

+                node.attachEvent('onreadystatechange', context.onScriptLoad);

+                //It would be great to add an error handler here to catch

+                //404s in IE9+. However, onreadystatechange will fire before

+                //the error handler, so that does not help. If addEvenListener

+                //is used, then IE will fire error before load, but we cannot

+                //use that pathway given the connect.microsoft.com issue

+                //mentioned above about not doing the 'script execute,

+                //then fire the script load event listener before execute

+                //next script' that other browsers do.

+                //Best hope: IE10 fixes the issues,

+                //and then destroys all installs of IE 6-9.

+                //node.attachEvent('onerror', context.onScriptError);

+            } else {

+                node.addEventListener('load', context.onScriptLoad, false);

+                node.addEventListener('error', context.onScriptError, false);

+            }

+            node.src = url;

+

+            //For some cache cases in IE 6-8, the script executes before the end

+            //of the appendChild execution, so to tie an anonymous define

+            //call to the module name (which is stored on the node), hold on

+            //to a reference to this node, but clear after the DOM insertion.

+            currentlyAddingScript = node;

+            if (baseElement) {

+                head.insertBefore(node, baseElement);

+            } else {

+                head.appendChild(node);

+            }

+            currentlyAddingScript = null;

+

+            return node;

+        } else if (isWebWorker) {

+            //In a web worker, use importScripts. This is not a very

+            //efficient use of importScripts, importScripts will block until

+            //its script is downloaded and evaluated. However, if web workers

+            //are in play, the expectation that a build has been done so that

+            //only one script needs to be loaded anyway. This may need to be

+            //reevaluated if other use cases become common.

+            importScripts(url);

+

+            //Account for anonymous modules

+            context.completeLoad(moduleName);

+        }

+    };

+

+    function getInteractiveScript() {

+        if (interactiveScript && interactiveScript.readyState === 'interactive') {

+            return interactiveScript;

+        }

+

+        eachReverse(scripts(), function (script) {

+            if (script.readyState === 'interactive') {

+                return (interactiveScript = script);

+            }

+        });

+        return interactiveScript;

+    }

+

+    //Look for a data-main script attribute, which could also adjust the baseUrl.

+    if (isBrowser) {

+        //Figure out baseUrl. Get it from the script tag with require.js in it.

+        eachReverse(scripts(), function (script) {

+            //Set the 'head' where we can append children by

+            //using the script's parent.

+            if (!head) {

+                head = script.parentNode;

+            }

+

+            //Look for a data-main attribute to set main script for the page

+            //to load. If it is there, the path to data main becomes the

+            //baseUrl, if it is not already set.

+            dataMain = script.getAttribute('data-main');

+            if (dataMain) {

+

+                //Pull off the directory of data-main for use as the

+                //baseUrl.

+                src = dataMain.split('/');

+                mainScript = src.pop();

+                subPath = src.length ? src.join('/')  + '/' : './';

+

+                //Set final baseUrl if there is not already an explicit one.

+                if (!cfg.baseUrl) {

+                    cfg.baseUrl = subPath;

+                }

+

+                //Strip off any trailing .js since dataMain is now

+                //like a module name.

+                dataMain = mainScript.replace(jsSuffixRegExp, '');

+

+                //Put the data-main script in the files to load.

+                cfg.deps = cfg.deps ? cfg.deps.concat(dataMain) : [dataMain];

+

+                return true;

+            }

+        });

+    }

+

+    /**

+     * The function that handles definitions of modules. Differs from

+     * require() in that a string for the module should be the first argument,

+     * and the function to execute after dependencies are loaded should

+     * return a value to define the module corresponding to the first argument's

+     * name.

+     */

+    define = function (name, deps, callback) {

+        var node, context;

+

+        //Allow for anonymous functions

+        if (typeof name !== 'string') {

+            //Adjust args appropriately

+            callback = deps;

+            deps = name;

+            name = null;

+        }

+

+        //This module may not have dependencies

+        if (!isArray(deps)) {

+            callback = deps;

+            deps = [];

+        }

+

+        //If no name, and callback is a function, then figure out if it a

+        //CommonJS thing with dependencies.

+        if (!deps.length && isFunction(callback)) {

+            //Remove comments from the callback string,

+            //look for require calls, and pull them into the dependencies,

+            //but only if there are function args.

+            if (callback.length) {

+                callback

+                    .toString()

+                    .replace(commentRegExp, '')

+                    .replace(cjsRequireRegExp, function (match, dep) {

+                        deps.push(dep);

+                    });

+

+                //May be a CommonJS thing even without require calls, but still

+                //could use exports, and module. Avoid doing exports and module

+                //work though if it just needs require.

+                //REQUIRES the function to expect the CommonJS variables in the

+                //order listed below.

+                deps = (callback.length === 1 ? ['require'] : ['require', 'exports', 'module']).concat(deps);

+            }

+        }

+

+        //If in IE 6-8 and hit an anonymous define() call, do the interactive

+        //work.

+        if (useInteractive) {

+            node = currentlyAddingScript || getInteractiveScript();

+            if (node) {

+                if (!name) {

+                    name = node.getAttribute('data-requiremodule');

+                }

+                context = contexts[node.getAttribute('data-requirecontext')];

+            }

+        }

+

+        //Always save off evaluating the def call until the script onload handler.

+        //This allows multiple modules to be in a file without prematurely

+        //tracing dependencies, and allows for anonymous module support,

+        //where the module name is not known until the script onload event

+        //occurs. If no context, use the global queue, and get it processed

+        //in the onscript load callback.

+        (context ? context.defQueue : globalDefQueue).push([name, deps, callback]);

+    };

+

+    define.amd = {

+        jQuery: true

+    };

+

+

+    /**

+     * Executes the text. Normally just uses eval, but can be modified

+     * to use a better, environment-specific call. Only used for transpiling

+     * loader plugins, not for plain JS modules.

+     * @param {String} text the text to execute/evaluate.

+     */

+    req.exec = function (text) {

+        /*jslint evil: true */

+        return eval(text);

+    };

+

+    //Set up with config info.

+    req(cfg);

+}(this));

+/*

+ * jQuery JavaScript Library

+ * http://jquery.com/

+ *

+ * Includes Sizzle.js

+ * http://sizzlejs.com/

+ *

+ * Copyright jQuery Foundation, Inc. and other contributors

+ * Released under the MIT license

+ * http://jquery.org/license

+ *

+ * Date: NULL

+ */

+(function( window, undefined ) {

+

+// Can't do this because several apps including ASP.NET trace

+// the stack via arguments.caller.callee and Firefox dies if

+// you try to trace through "use strict" call chains. (#13335)

+// Support: Firefox 18+

+//"use strict";

+var

+	// The deferred used on DOM ready

+	readyList,

+

+	// A central reference to the root jQuery(document)

+	rootjQuery,

+

+	// Support: IE<10

+	// For `typeof xmlNode.method` instead of `xmlNode.method !== undefined`

+	core_strundefined = typeof undefined,

+

+	// Use the correct document accordingly with window argument (sandbox)

+	location = window.location,

+	document = window.document,

+	docElem = document.documentElement,

+

+	// Map over jQuery in case of overwrite

+	_jQuery = window.jQuery,

+

+	// Map over the $ in case of overwrite

+	_$ = window.$,

+

+	// [[Class]] -> type pairs

+	class2type = {},

+

+	// List of deleted data cache ids, so we can reuse them

+	core_deletedIds = [],

+

+	core_version = "0.0.0",

+

+	// Save a reference to some core methods

+	core_concat = core_deletedIds.concat,

+	core_push = core_deletedIds.push,

+	core_slice = core_deletedIds.slice,

+	core_indexOf = core_deletedIds.indexOf,

+	core_toString = class2type.toString,

+	core_hasOwn = class2type.hasOwnProperty,

+	core_trim = core_version.trim,

+

+	// Define a local copy of jQuery

+	jQuery = function( selector, context ) {

+		// The jQuery object is actually just the init constructor 'enhanced'

+		return new jQuery.fn.init( selector, context, rootjQuery );

+	},

+

+	// Used for matching numbers

+	core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,

+

+	// Used for splitting on whitespace

+	core_rnotwhite = /\S+/g,

+

+	// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)

+	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,

+

+	// A simple way to check for HTML strings

+	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)

+	// Strict HTML recognition (#11290: must start with <)

+	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,

+

+	// Match a standalone tag

+	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,

+

+	// JSON RegExp

+	rvalidchars = /^[\],:{}\s]*$/,

+	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,

+	rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,

+	rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,

+

+	// Matches dashed string for camelizing

+	rmsPrefix = /^-ms-/,

+	rdashAlpha = /-([\da-z])/gi,

+

+	// Used by jQuery.camelCase as callback to replace()

+	fcamelCase = function( all, letter ) {

+		return letter.toUpperCase();

+	},

+

+	// The ready event handler

+	completed = function( event ) {

+

+		// readyState === "complete" is good enough for us to call the dom ready in oldIE

+		if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {

+			detach();

+			jQuery.ready();

+		}

+	},

+	// Clean-up method for dom ready events

+	detach = function() {

+		if ( document.addEventListener ) {

+			document.removeEventListener( "DOMContentLoaded", completed, false );

+			window.removeEventListener( "load", completed, false );

+

+		} else {

+			document.detachEvent( "onreadystatechange", completed );

+			window.detachEvent( "onload", completed );

+		}

+	};

+

+jQuery.fn = jQuery.prototype = {

+	// The current version of jQuery being used

+	jquery: core_version,

+

+	constructor: jQuery,

+	init: function( selector, context, rootjQuery ) {

+		var match, elem;

+

+		// HANDLE: $(""), $(null), $(undefined), $(false)

+		if ( !selector ) {

+			return this;

+		}

+

+		// Handle HTML strings

+		if ( typeof selector === "string" ) {

+			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {

+				// Assume that strings that start and end with <> are HTML and skip the regex check

+				match = [ null, selector, null ];

+

+			} else {

+				match = rquickExpr.exec( selector );

+			}

+

+			// Match html or make sure no context is specified for #id

+			if ( match && (match[1] || !context) ) {

+

+				// HANDLE: $(html) -> $(array)

+				if ( match[1] ) {

+					context = context instanceof jQuery ? context[0] : context;

+

+					// scripts is true for back-compat

+					jQuery.merge( this, jQuery.parseHTML(

+						match[1],

+						context && context.nodeType ? context.ownerDocument || context : document,

+						true

+					) );

+

+					// HANDLE: $(html, props)

+					if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {

+						for ( match in context ) {

+							// Properties of context are called as methods if possible

+							if ( jQuery.isFunction( this[ match ] ) ) {

+								this[ match ]( context[ match ] );

+

+							// ...and otherwise set as attributes

+							} else {

+								this.attr( match, context[ match ] );

+							}

+						}

+					}

+

+					return this;

+

+				// HANDLE: $(#id)

+				} else {

+					elem = document.getElementById( match[2] );

+

+					// Check parentNode to catch when Blackberry 4.6 returns

+					// nodes that are no longer in the document #6963

+					if ( elem && elem.parentNode ) {

+						// Handle the case where IE and Opera return items

+						// by name instead of ID

+						if ( elem.id !== match[2] ) {

+							return rootjQuery.find( selector );

+						}

+

+						// Otherwise, we inject the element directly into the jQuery object

+						this.length = 1;

+						this[0] = elem;

+					}

+

+					this.context = document;

+					this.selector = selector;

+					return this;

+				}

+

+			// HANDLE: $(expr, $(...))

+			} else if ( !context || context.jquery ) {

+				return ( context || rootjQuery ).find( selector );

+

+			// HANDLE: $(expr, context)

+			// (which is just equivalent to: $(context).find(expr)

+			} else {

+				return this.constructor( context ).find( selector );

+			}

+

+		// HANDLE: $(DOMElement)

+		} else if ( selector.nodeType ) {

+			this.context = this[0] = selector;

+			this.length = 1;

+			return this;

+

+		// HANDLE: $(function)

+		// Shortcut for document ready

+		} else if ( jQuery.isFunction( selector ) ) {

+			return rootjQuery.ready( selector );

+		}

+

+		if ( selector.selector !== undefined ) {

+			this.selector = selector.selector;

+			this.context = selector.context;

+		}

+

+		return jQuery.makeArray( selector, this );

+	},

+

+	// Start with an empty selector

+	selector: "",

+

+	// The default length of a jQuery object is 0

+	length: 0,

+

+	toArray: function() {

+		return core_slice.call( this );

+	},

+

+	// Get the Nth element in the matched element set OR

+	// Get the whole matched element set as a clean array

+	get: function( num ) {

+		return num == null ?

+

+			// Return a 'clean' array

+			this.toArray() :

+

+			// Return just the object

+			( num < 0 ? this[ this.length + num ] : this[ num ] );

+	},

+

+	// Take an array of elements and push it onto the stack

+	// (returning the new matched element set)

+	pushStack: function( elems ) {

+

+		// Build a new jQuery matched element set

+		var ret = jQuery.merge( this.constructor(), elems );

+

+		// Add the old object onto the stack (as a reference)

+		ret.prevObject = this;

+		ret.context = this.context;

+

+		// Return the newly-formed element set

+		return ret;

+	},

+

+	// Execute a callback for every element in the matched set.

+	// (You can seed the arguments with an array of args, but this is

+	// only used internally.)

+	each: function( callback, args ) {

+		return jQuery.each( this, callback, args );

+	},

+

+	ready: function( fn ) {

+		// Add the callback

+		jQuery.ready.promise().done( fn );

+

+		return this;

+	},

+

+	slice: function() {

+		return this.pushStack( core_slice.apply( this, arguments ) );

+	},

+

+	first: function() {

+		return this.eq( 0 );

+	},

+

+	last: function() {

+		return this.eq( -1 );

+	},

+

+	eq: function( i ) {

+		var len = this.length,

+			j = +i + ( i < 0 ? len : 0 );

+		return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );

+	},

+

+	map: function( callback ) {

+		return this.pushStack( jQuery.map(this, function( elem, i ) {

+			return callback.call( elem, i, elem );

+		}));

+	},

+

+	end: function() {

+		return this.prevObject || this.constructor(null);

+	},

+

+	// For internal use only.

+	// Behaves like an Array's method, not like a jQuery method.

+	push: core_push,

+	sort: [].sort,

+	splice: [].splice

+};

+

+// Give the init function the jQuery prototype for later instantiation

+jQuery.fn.init.prototype = jQuery.fn;

+

+jQuery.extend = jQuery.fn.extend = function() {

+	var src, copyIsArray, copy, name, options, clone,

+		target = arguments[0] || {},

+		i = 1,

+		length = arguments.length,

+		deep = false;

+

+	// Handle a deep copy situation

+	if ( typeof target === "boolean" ) {

+		deep = target;

+		target = arguments[1] || {};

+		// skip the boolean and the target

+		i = 2;

+	}

+

+	// Handle case when target is a string or something (possible in deep copy)

+	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {

+		target = {};

+	}

+

+	// extend jQuery itself if only one argument is passed

+	if ( length === i ) {

+		target = this;

+		--i;

+	}

+

+	for ( ; i < length; i++ ) {

+		// Only deal with non-null/undefined values

+		if ( (options = arguments[ i ]) != null ) {

+			// Extend the base object

+			for ( name in options ) {

+				src = target[ name ];

+				copy = options[ name ];

+

+				// Prevent never-ending loop

+				if ( target === copy ) {

+					continue;

+				}

+

+				// Recurse if we're merging plain objects or arrays

+				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {

+					if ( copyIsArray ) {

+						copyIsArray = false;

+						clone = src && jQuery.isArray(src) ? src : [];

+

+					} else {

+						clone = src && jQuery.isPlainObject(src) ? src : {};

+					}

+

+					// Never move original objects, clone them

+					target[ name ] = jQuery.extend( deep, clone, copy );

+

+				// Don't bring in undefined values

+				} else if ( copy !== undefined ) {

+					target[ name ] = copy;

+				}

+			}

+		}

+	}

+

+	// Return the modified object

+	return target;

+};

+

+jQuery.extend({

+	// Unique for each copy of jQuery on the page

+	// Non-digits removed to match rinlinejQuery

+	expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ),

+

+	noConflict: function( deep ) {

+		if ( window.$ === jQuery ) {

+			window.$ = _$;

+		}

+

+		if ( deep && window.jQuery === jQuery ) {

+			window.jQuery = _jQuery;

+		}

+

+		return jQuery;

+	},

+

+	// Is the DOM ready to be used? Set to true once it occurs.

+	isReady: false,

+

+	// A counter to track how many items to wait for before

+	// the ready event fires. See #6781

+	readyWait: 1,

+

+	// Hold (or release) the ready event

+	holdReady: function( hold ) {

+		if ( hold ) {

+			jQuery.readyWait++;

+		} else {

+			jQuery.ready( true );

+		}

+	},

+

+	// Handle when the DOM is ready

+	ready: function( wait ) {

+

+		// Abort if there are pending holds or we're already ready

+		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {

+			return;

+		}

+

+		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).

+		if ( !document.body ) {

+			return setTimeout( jQuery.ready );

+		}

+

+		// Remember that the DOM is ready

+		jQuery.isReady = true;

+

+		// If a normal DOM Ready event fired, decrement, and wait if need be

+		if ( wait !== true && --jQuery.readyWait > 0 ) {

+			return;

+		}

+

+		// If there are functions bound, to execute

+		readyList.resolveWith( document, [ jQuery ] );

+

+		// Trigger any bound ready events

+		if ( jQuery.fn.trigger ) {

+			jQuery( document ).trigger("ready").off("ready");

+		}

+	},

+

+	// See test/unit/core.js for details concerning isFunction.

+	// Since version 1.3, DOM methods and functions like alert

+	// aren't supported. They return false on IE (#2968).

+	isFunction: function( obj ) {

+		return jQuery.type(obj) === "function";

+	},

+

+	isArray: Array.isArray || function( obj ) {

+		return jQuery.type(obj) === "array";

+	},

+

+	isWindow: function( obj ) {

+		/* jshint eqeqeq: false */

+		return obj != null && obj == obj.window;

+	},

+

+	isNumeric: function( obj ) {

+		return !isNaN( parseFloat(obj) ) && isFinite( obj );

+	},

+

+	type: function( obj ) {

+		if ( obj == null ) {

+			return String( obj );

+		}

+		return typeof obj === "object" || typeof obj === "function" ?

+			class2type[ core_toString.call(obj) ] || "object" :

+			typeof obj;

+	},

+

+	isPlainObject: function( obj ) {

+		var key;

+

+		// Must be an Object.

+		// Because of IE, we also have to check the presence of the constructor property.

+		// Make sure that DOM nodes and window objects don't pass through, as well

+		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {

+			return false;

+		}

+

+		try {

+			// Not own constructor property must be Object

+			if ( obj.constructor &&

+				!core_hasOwn.call(obj, "constructor") &&

+				!core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {

+				return false;

+			}

+		} catch ( e ) {

+			// IE8,9 Will throw exceptions on certain host objects #9897

+			return false;

+		}

+

+		// Support: IE<9

+		// Handle iteration over inherited properties before own properties.

+		if ( jQuery.support.ownLast ) {

+			for ( key in obj ) {

+				return core_hasOwn.call( obj, key );

+			}

+		}

+

+		// Own properties are enumerated firstly, so to speed up,

+		// if last one is own, then all properties are own.

+		for ( key in obj ) {}

+

+		return key === undefined || core_hasOwn.call( obj, key );

+	},

+

+	isEmptyObject: function( obj ) {

+		var name;

+		for ( name in obj ) {

+			return false;

+		}

+		return true;

+	},

+

+	error: function( msg ) {

+		throw new Error( msg );

+	},

+

+	// data: string of html

+	// context (optional): If specified, the fragment will be created in this context, defaults to document

+	// keepScripts (optional): If true, will include scripts passed in the html string

+	parseHTML: function( data, context, keepScripts ) {

+		if ( !data || typeof data !== "string" ) {

+			return null;

+		}

+		if ( typeof context === "boolean" ) {

+			keepScripts = context;

+			context = false;

+		}

+		context = context || document;

+

+		var parsed = rsingleTag.exec( data ),

+			scripts = !keepScripts && [];

+

+		// Single tag

+		if ( parsed ) {

+			return [ context.createElement( parsed[1] ) ];

+		}

+

+		parsed = jQuery.buildFragment( [ data ], context, scripts );

+		if ( scripts ) {

+			jQuery( scripts ).remove();

+		}

+		return jQuery.merge( [], parsed.childNodes );

+	},

+

+	parseJSON: function( data ) {

+		// Attempt to parse using the native JSON parser first

+		if ( window.JSON && window.JSON.parse ) {

+			return window.JSON.parse( data );

+		}

+

+		if ( data === null ) {

+			return data;

+		}

+

+		if ( typeof data === "string" ) {

+

+			// Make sure leading/trailing whitespace is removed (IE can't handle it)

+			data = jQuery.trim( data );

+

+			if ( data ) {

+				// Make sure the incoming data is actual JSON

+				// Logic borrowed from http://json.org/json2.js

+				if ( rvalidchars.test( data.replace( rvalidescape, "@" )

+					.replace( rvalidtokens, "]" )

+					.replace( rvalidbraces, "")) ) {

+

+					return ( new Function( "return " + data ) )();

+				}

+			}

+		}

+

+		jQuery.error( "Invalid JSON: " + data );

+	},

+

+	// Cross-browser xml parsing

+	parseXML: function( data ) {

+		var xml, tmp;

+		if ( !data || typeof data !== "string" ) {

+			return null;

+		}

+		try {

+			if ( window.DOMParser ) { // Standard

+				tmp = new DOMParser();

+				xml = tmp.parseFromString( data , "text/xml" );

+			} else { // IE

+				xml = new ActiveXObject( "Microsoft.XMLDOM" );

+				xml.async = "false";

+				xml.loadXML( data );

+			}

+		} catch( e ) {

+			xml = undefined;

+		}

+		if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {

+			jQuery.error( "Invalid XML: " + data );

+		}

+		return xml;

+	},

+

+	noop: function() {},

+

+	// Evaluates a script in a global context

+	// Workarounds based on findings by Jim Driscoll

+	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context

+	globalEval: function( data ) {

+		if ( data && jQuery.trim( data ) ) {

+			// We use execScript on Internet Explorer

+			// We use an anonymous function so that context is window

+			// rather than jQuery in Firefox

+			( window.execScript || function( data ) {

+				window[ "eval" ].call( window, data );

+			} )( data );

+		}

+	},

+

+	// Convert dashed to camelCase; used by the css and data modules

+	// Microsoft forgot to hump their vendor prefix (#9572)

+	camelCase: function( string ) {

+		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );

+	},

+

+	nodeName: function( elem, name ) {

+		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();

+	},

+

+	// args is for internal usage only

+	each: function( obj, callback, args ) {

+		var value,

+			i = 0,

+			length = obj.length,

+			isArray = isArraylike( obj );

+

+		if ( args ) {

+			if ( isArray ) {

+				for ( ; i < length; i++ ) {

+					value = callback.apply( obj[ i ], args );

+

+					if ( value === false ) {

+						break;

+					}

+				}

+			} else {

+				for ( i in obj ) {

+					value = callback.apply( obj[ i ], args );

+

+					if ( value === false ) {

+						break;

+					}

+				}

+			}

+

+		// A special, fast, case for the most common use of each

+		} else {

+			if ( isArray ) {

+				for ( ; i < length; i++ ) {

+					value = callback.call( obj[ i ], i, obj[ i ] );

+

+					if ( value === false ) {

+						break;

+					}

+				}

+			} else {

+				for ( i in obj ) {

+					value = callback.call( obj[ i ], i, obj[ i ] );

+

+					if ( value === false ) {

+						break;

+					}

+				}

+			}

+		}

+

+		return obj;

+	},

+

+	// Use native String.trim function wherever possible

+	trim: core_trim && !core_trim.call("\uFEFF\xA0") ?

+		function( text ) {

+			return text == null ?

+				"" :

+				core_trim.call( text );

+		} :

+

+		// Otherwise use our own trimming functionality

+		function( text ) {

+			return text == null ?

+				"" :

+				( text + "" ).replace( rtrim, "" );

+		},

+

+	// results is for internal usage only

+	makeArray: function( arr, results ) {

+		var ret = results || [];

+

+		if ( arr != null ) {

+			if ( isArraylike( Object(arr) ) ) {

+				jQuery.merge( ret,

+					typeof arr === "string" ?

+					[ arr ] : arr

+				);

+			} else {

+				core_push.call( ret, arr );

+			}

+		}

+

+		return ret;

+	},

+

+	inArray: function( elem, arr, i ) {

+		var len;

+

+		if ( arr ) {

+			if ( core_indexOf ) {

+				return core_indexOf.call( arr, elem, i );

+			}

+

+			len = arr.length;

+			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;

+

+			for ( ; i < len; i++ ) {

+				// Skip accessing in sparse arrays

+				if ( i in arr && arr[ i ] === elem ) {

+					return i;

+				}

+			}

+		}

+

+		return -1;

+	},

+

+	merge: function( first, second ) {

+		var l = second.length,

+			i = first.length,

+			j = 0;

+

+		if ( typeof l === "number" ) {

+			for ( ; j < l; j++ ) {

+				first[ i++ ] = second[ j ];

+			}

+		} else {

+			while ( second[j] !== undefined ) {

+				first[ i++ ] = second[ j++ ];

+			}

+		}

+

+		first.length = i;

+

+		return first;

+	},

+

+	grep: function( elems, callback, inv ) {

+		var retVal,

+			ret = [],

+			i = 0,

+			length = elems.length;

+		inv = !!inv;

+

+		// Go through the array, only saving the items

+		// that pass the validator function

+		for ( ; i < length; i++ ) {

+			retVal = !!callback( elems[ i ], i );

+			if ( inv !== retVal ) {

+				ret.push( elems[ i ] );

+			}

+		}

+

+		return ret;

+	},

+

+	// arg is for internal usage only

+	map: function( elems, callback, arg ) {

+		var value,

+			i = 0,

+			length = elems.length,

+			isArray = isArraylike( elems ),

+			ret = [];

+

+		// Go through the array, translating each of the items to their

+		if ( isArray ) {

+			for ( ; i < length; i++ ) {

+				value = callback( elems[ i ], i, arg );

+

+				if ( value != null ) {

+					ret[ ret.length ] = value;

+				}

+			}

+

+		// Go through every key on the object,

+		} else {

+			for ( i in elems ) {

+				value = callback( elems[ i ], i, arg );

+

+				if ( value != null ) {

+					ret[ ret.length ] = value;

+				}

+			}

+		}

+

+		// Flatten any nested arrays

+		return core_concat.apply( [], ret );

+	},

+

+	// A global GUID counter for objects

+	guid: 1,

+

+	// Bind a function to a context, optionally partially applying any

+	// arguments.

+	proxy: function( fn, context ) {

+		var args, proxy, tmp;

+

+		if ( typeof context === "string" ) {

+			tmp = fn[ context ];

+			context = fn;

+			fn = tmp;

+		}

+

+		// Quick check to determine if target is callable, in the spec

+		// this throws a TypeError, but we will just return undefined.

+		if ( !jQuery.isFunction( fn ) ) {

+			return undefined;

+		}

+

+		// Simulated bind

+		args = core_slice.call( arguments, 2 );

+		proxy = function() {

+			return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );

+		};

+

+		// Set the guid of unique handler to the same of original handler, so it can be removed

+		proxy.guid = fn.guid = fn.guid || jQuery.guid++;

+

+		return proxy;

+	},

+

+	// Multifunctional method to get and set values of a collection

+	// The value/s can optionally be executed if it's a function

+	access: function( elems, fn, key, value, chainable, emptyGet, raw ) {

+		var i = 0,

+			length = elems.length,

+			bulk = key == null;

+

+		// Sets many values

+		if ( jQuery.type( key ) === "object" ) {

+			chainable = true;

+			for ( i in key ) {

+				jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );

+			}

+

+		// Sets one value

+		} else if ( value !== undefined ) {

+			chainable = true;

+

+			if ( !jQuery.isFunction( value ) ) {

+				raw = true;

+			}

+

+			if ( bulk ) {

+				// Bulk operations run against the entire set

+				if ( raw ) {

+					fn.call( elems, value );

+					fn = null;

+

+				// ...except when executing function values

+				} else {

+					bulk = fn;

+					fn = function( elem, key, value ) {

+						return bulk.call( jQuery( elem ), value );

+					};

+				}

+			}

+

+			if ( fn ) {

+				for ( ; i < length; i++ ) {

+					fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );

+				}

+			}

+		}

+

+		return chainable ?

+			elems :

+

+			// Gets

+			bulk ?

+				fn.call( elems ) :

+				length ? fn( elems[0], key ) : emptyGet;

+	},

+

+	now: function() {

+		return ( new Date() ).getTime();

+	},

+

+	// A method for quickly swapping in/out CSS properties to get correct calculations.

+	// Note: this method belongs to the css module but it's needed here for the support module.

+	// If support gets modularized, this method should be moved back to the css module.

+	swap: function( elem, options, callback, args ) {

+		var ret, name,

+			old = {};

+

+		// Remember the old values, and insert the new ones

+		for ( name in options ) {

+			old[ name ] = elem.style[ name ];

+			elem.style[ name ] = options[ name ];

+		}

+

+		ret = callback.apply( elem, args || [] );

+

+		// Revert the old values

+		for ( name in options ) {

+			elem.style[ name ] = old[ name ];

+		}

+

+		return ret;

+	}

+});

+

+jQuery.ready.promise = function( obj ) {

+	if ( !readyList ) {

+

+		readyList = jQuery.Deferred();

+

+		// Catch cases where $(document).ready() is called after the browser event has already occurred.

+		// we once tried to use readyState "interactive" here, but it caused issues like the one

+		// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15

+		if ( document.readyState === "complete" ) {

+			// Handle it asynchronously to allow scripts the opportunity to delay ready

+			setTimeout( jQuery.ready );

+

+		// Standards-based browsers support DOMContentLoaded

+		} else if ( document.addEventListener ) {

+			// Use the handy event callback

+			document.addEventListener( "DOMContentLoaded", completed, false );

+

+			// A fallback to window.onload, that will always work

+			window.addEventListener( "load", completed, false );

+

+		// If IE event model is used

+		} else {

+			// Ensure firing before onload, maybe late but safe also for iframes

+			document.attachEvent( "onreadystatechange", completed );

+

+			// A fallback to window.onload, that will always work

+			window.attachEvent( "onload", completed );

+

+			// If IE and not a frame

+			// continually check to see if the document is ready

+			var top = false;

+

+			try {

+				top = window.frameElement == null && document.documentElement;

+			} catch(e) {}

+

+			if ( top && top.doScroll ) {

+				(function doScrollCheck() {

+					if ( !jQuery.isReady ) {

+

+						try {

+							// Use the trick by Diego Perini

+							// http://javascript.nwbox.com/IEContentLoaded/

+							top.doScroll("left");

+						} catch(e) {

+							return setTimeout( doScrollCheck, 50 );

+						}

+

+						// detach all dom ready events

+						detach();

+

+						// and execute any waiting functions

+						jQuery.ready();

+					}

+				})();

+			}

+		}

+	}

+	return readyList.promise( obj );

+};

+

+// Populate the class2type map

+jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {

+	class2type[ "[object " + name + "]" ] = name.toLowerCase();

+});

+

+function isArraylike( obj ) {

+	var length = obj.length,

+		type = jQuery.type( obj );

+

+	if ( jQuery.isWindow( obj ) ) {

+		return false;

+	}

+

+	if ( obj.nodeType === 1 && length ) {

+		return true;

+	}

+

+	return type === "array" || type !== "function" &&

+		( length === 0 ||

+		typeof length === "number" && length > 0 && ( length - 1 ) in obj );

+}

+

+// All jQuery objects should point back to these

+rootjQuery = jQuery(document);

+/*

+ * Sizzle CSS Selector Engine

+ * http://sizzlejs.com/

+ *

+ * Copyright jQuery Foundation, Inc. and other contributors

+ * Released under the MIT license

+ * http://jquery.org/license

+ *

+ * Date: NULL

+ */

+(function( window, undefined ) {

+

+var i,

+	support,

+	cachedruns,

+	Expr,

+	getText,

+	isXML,

+	compile,

+	outermostContext,

+	sortInput,

+

+	// Local document vars

+	setDocument,

+	document,

+	docElem,

+	documentIsHTML,

+	rbuggyQSA,

+	rbuggyMatches,

+	matches,

+	contains,

+

+	// Instance-specific data

+	expando = "sizzle" + -(new Date()),

+	preferredDoc = window.document,

+	dirruns = 0,

+	done = 0,

+	classCache = createCache(),

+	tokenCache = createCache(),

+	compilerCache = createCache(),

+	hasDuplicate = false,

+	sortOrder = function( a, b ) {

+		if ( a === b ) {

+			hasDuplicate = true;

+			return 0;

+		}

+		return 0;

+	},

+

+	// General-purpose constants

+	strundefined = typeof undefined,

+	MAX_NEGATIVE = 1 << 31,

+

+	// Instance methods

+	hasOwn = ({}).hasOwnProperty,

+	arr = [],

+	pop = arr.pop,

+	push_native = arr.push,

+	push = arr.push,

+	slice = arr.slice,

+	// Use a stripped-down indexOf if we can't use a native one

+	indexOf = arr.indexOf || function( elem ) {

+		var i = 0,

+			len = this.length;

+		for ( ; i < len; i++ ) {

+			if ( this[i] === elem ) {

+				return i;

+			}

+		}

+		return -1;

+	},

+

+	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",

+

+	// Regular expressions

+

+	// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace

+	whitespace = "[\\x20\\t\\r\\n\\f]",

+	// http://www.w3.org/TR/css3-syntax/#characters

+	characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",

+

+	// Loosely modeled on CSS identifier characters

+	// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors

+	// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier

+	identifier = characterEncoding.replace( "w", "w#" ),

+

+	// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors

+	attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +

+		"*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",

+

+	// Prefer arguments quoted,

+	//   then not containing pseudos/brackets,

+	//   then attribute selectors/non-parenthetical expressions,

+	//   then anything else

+	// These preferences are here to reduce the number of selectors

+	//   needing tokenize in the PSEUDO preFilter

+	pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",

+

+	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter

+	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),

+

+	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),

+	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),

+

+	rsibling = new RegExp( whitespace + "*[+~]" ),

+	rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*)" + whitespace + "*\\]", "g" ),

+

+	rpseudo = new RegExp( pseudos ),

+	ridentifier = new RegExp( "^" + identifier + "$" ),

+

+	matchExpr = {

+		"ID": new RegExp( "^#(" + characterEncoding + ")" ),

+		"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),

+		"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),

+		"ATTR": new RegExp( "^" + attributes ),

+		"PSEUDO": new RegExp( "^" + pseudos ),

+		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +

+			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +

+			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),

+		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),

+		// For use in libraries implementing .is()

+		// We use this for POS matching in `select`

+		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +

+			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )

+	},

+

+	rnative = /^[^{]+\{\s*\[native \w/,

+

+	// Easily-parseable/retrievable ID or TAG or CLASS selectors

+	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,

+

+	rinputs = /^(?:input|select|textarea|button)$/i,

+	rheader = /^h\d$/i,

+

+	rescape = /'|\\/g,

+

+	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters

+	runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),

+	funescape = function( _, escaped, escapedWhitespace ) {

+		var high = "0x" + escaped - 0x10000;

+		// NaN means non-codepoint

+		// Support: Firefox

+		// Workaround erroneous numeric interpretation of +"0x"

+		return high !== high || escapedWhitespace ?

+			escaped :

+			// BMP codepoint

+			high < 0 ?

+				String.fromCharCode( high + 0x10000 ) :

+				// Supplemental Plane codepoint (surrogate pair)

+				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );

+	};

+

+// Optimize for push.apply( _, NodeList )

+try {

+	push.apply(

+		(arr = slice.call( preferredDoc.childNodes )),

+		preferredDoc.childNodes

+	);

+	// Support: Android<4.0

+	// Detect silently failing push.apply

+	arr[ preferredDoc.childNodes.length ].nodeType;

+} catch ( e ) {

+	push = { apply: arr.length ?

+

+		// Leverage slice if possible

+		function( target, els ) {

+			push_native.apply( target, slice.call(els) );

+		} :

+

+		// Support: IE<9

+		// Otherwise append directly

+		function( target, els ) {

+			var j = target.length,

+				i = 0;

+			// Can't trust NodeList.length

+			while ( (target[j++] = els[i++]) ) {}

+			target.length = j - 1;

+		}

+	};

+}

+

+function Sizzle( selector, context, results, seed ) {

+	var match, elem, m, nodeType,

+		// QSA vars

+		i, groups, old, nid, newContext, newSelector;

+

+	if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {

+		setDocument( context );

+	}

+

+	context = context || document;

+	results = results || [];

+

+	if ( !selector || typeof selector !== "string" ) {

+		return results;

+	}

+

+	if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {

+		return [];

+	}

+

+	if ( documentIsHTML && !seed ) {

+

+		// Shortcuts

+		if ( (match = rquickExpr.exec( selector )) ) {

+			// Speed-up: Sizzle("#ID")

+			if ( (m = match[1]) ) {

+				if ( nodeType === 9 ) {

+					elem = context.getElementById( m );

+					// Check parentNode to catch when Blackberry 4.6 returns

+					// nodes that are no longer in the document #6963

+					if ( elem && elem.parentNode ) {

+						// Handle the case where IE, Opera, and Webkit return items

+						// by name instead of ID

+						if ( elem.id === m ) {

+							results.push( elem );

+							return results;

+						}

+					} else {

+						return results;

+					}

+				} else {

+					// Context is not a document

+					if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&

+						contains( context, elem ) && elem.id === m ) {

+						results.push( elem );

+						return results;

+					}

+				}

+

+			// Speed-up: Sizzle("TAG")

+			} else if ( match[2] ) {

+				push.apply( results, context.getElementsByTagName( selector ) );

+				return results;

+

+			// Speed-up: Sizzle(".CLASS")

+			} else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {

+				push.apply( results, context.getElementsByClassName( m ) );

+				return results;

+			}

+		}

+

+		// QSA path

+		if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {

+			nid = old = expando;

+			newContext = context;

+			newSelector = nodeType === 9 && selector;

+

+			// qSA works strangely on Element-rooted queries

+			// We can work around this by specifying an extra ID on the root

+			// and working up from there (Thanks to Andrew Dupont for the technique)

+			// IE 8 doesn't work on object elements

+			if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {

+				groups = tokenize( selector );

+

+				if ( (old = context.getAttribute("id")) ) {

+					nid = old.replace( rescape, "\\$&" );

+				} else {

+					context.setAttribute( "id", nid );

+				}

+				nid = "[id='" + nid + "'] ";

+

+				i = groups.length;

+				while ( i-- ) {

+					groups[i] = nid + toSelector( groups[i] );

+				}

+				newContext = rsibling.test( selector ) && context.parentNode || context;

+				newSelector = groups.join(",");

+			}

+

+			if ( newSelector ) {

+				try {

+					push.apply( results,

+						newContext.querySelectorAll( newSelector )

+					);

+					return results;

+				} catch(qsaError) {

+				} finally {

+					if ( !old ) {

+						context.removeAttribute("id");

+					}

+				}

+			}

+		}

+	}

+

+	// All others

+	return select( selector.replace( rtrim, "$1" ), context, results, seed );

+}

+

+/**

+ * Create key-value caches of limited size

+ * @returns {Function(string, Object)} Returns the Object data after storing it on itself with

+ *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)

+ *	deleting the oldest entry

+ */

+function createCache() {

+	var keys = [];

+

+	function cache( key, value ) {

+		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)

+		if ( keys.push( key += " " ) > Expr.cacheLength ) {

+			// Only keep the most recent entries

+			delete cache[ keys.shift() ];

+		}

+		return (cache[ key ] = value);

+	}

+	return cache;

+}

+

+/**

+ * Mark a function for special use by Sizzle

+ * @param {Function} fn The function to mark

+ */

+function markFunction( fn ) {

+	fn[ expando ] = true;

+	return fn;

+}

+

+/**

+ * Support testing using an element

+ * @param {Function} fn Passed the created div and expects a boolean result

+ */

+function assert( fn ) {

+	var div = document.createElement("div");

+

+	try {

+		return !!fn( div );

+	} catch (e) {

+		return false;

+	} finally {

+		// Remove from its parent by default

+		if ( div.parentNode ) {

+			div.parentNode.removeChild( div );

+		}

+		// release memory in IE

+		div = null;

+	}

+}

+

+/**

+ * Adds the same handler for all of the specified attrs

+ * @param {String} attrs Pipe-separated list of attributes

+ * @param {Function} handler The method that will be applied

+ */

+function addHandle( attrs, handler ) {

+	var arr = attrs.split("|"),

+		i = attrs.length;

+

+	while ( i-- ) {

+		Expr.attrHandle[ arr[i] ] = handler;

+	}

+}

+

+/**

+ * Checks document order of two siblings

+ * @param {Element} a

+ * @param {Element} b

+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b

+ */

+function siblingCheck( a, b ) {

+	var cur = b && a,

+		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&

+			( ~b.sourceIndex || MAX_NEGATIVE ) -

+			( ~a.sourceIndex || MAX_NEGATIVE );

+

+	// Use IE sourceIndex if available on both nodes

+	if ( diff ) {

+		return diff;

+	}

+

+	// Check if b follows a

+	if ( cur ) {

+		while ( (cur = cur.nextSibling) ) {

+			if ( cur === b ) {

+				return -1;

+			}

+		}

+	}

+

+	return a ? 1 : -1;

+}

+

+/**

+ * Returns a function to use in pseudos for input types

+ * @param {String} type

+ */

+function createInputPseudo( type ) {

+	return function( elem ) {

+		var name = elem.nodeName.toLowerCase();

+		return name === "input" && elem.type === type;

+	};

+}

+

+/**

+ * Returns a function to use in pseudos for buttons

+ * @param {String} type

+ */

+function createButtonPseudo( type ) {

+	return function( elem ) {

+		var name = elem.nodeName.toLowerCase();

+		return (name === "input" || name === "button") && elem.type === type;

+	};

+}

+

+/**

+ * Returns a function to use in pseudos for positionals

+ * @param {Function} fn

+ */

+function createPositionalPseudo( fn ) {

+	return markFunction(function( argument ) {

+		argument = +argument;

+		return markFunction(function( seed, matches ) {

+			var j,

+				matchIndexes = fn( [], seed.length, argument ),

+				i = matchIndexes.length;

+

+			// Match elements found at the specified indexes

+			while ( i-- ) {

+				if ( seed[ (j = matchIndexes[i]) ] ) {

+					seed[j] = !(matches[j] = seed[j]);

+				}

+			}

+		});

+	});

+}

+

+/**

+ * Detect xml

+ * @param {Element|Object} elem An element or a document

+ */

+isXML = Sizzle.isXML = function( elem ) {

+	// documentElement is verified for cases where it doesn't yet exist

+	// (such as loading iframes in IE - #4833)

+	var documentElement = elem && (elem.ownerDocument || elem).documentElement;

+	return documentElement ? documentElement.nodeName !== "HTML" : false;

+};

+

+// Expose support vars for convenience

+support = Sizzle.support = {};

+

+/**

+ * Sets document-related variables once based on the current document

+ * @param {Element|Object} [doc] An element or document object to use to set the document

+ * @returns {Object} Returns the current document

+ */

+setDocument = Sizzle.setDocument = function( node ) {

+	var doc = node ? node.ownerDocument || node : preferredDoc,

+		parent = doc.defaultView;

+

+	// If no document and documentElement is available, return

+	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {

+		return document;

+	}

+

+	// Set our document

+	document = doc;

+	docElem = doc.documentElement;

+

+	// Support tests

+	documentIsHTML = !isXML( doc );

+

+	// Support: IE>8

+	// If iframe document is assigned to "document" variable and if iframe has been reloaded,

+	// IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936

+	// IE6-8 do not support the defaultView property so parent will be undefined

+	if ( parent && parent.attachEvent && parent !== parent.top ) {

+		parent.attachEvent( "onbeforeunload", function() {

+			setDocument();

+		});

+	}

+

+	/* Attributes

+	---------------------------------------------------------------------- */

+

+	// Support: IE<8

+	// Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)

+	support.attributes = assert(function( div ) {

+		div.className = "i";

+		return !div.getAttribute("className");

+	});

+

+	/* getElement(s)By*

+	---------------------------------------------------------------------- */

+

+	// Check if getElementsByTagName("*") returns only elements

+	support.getElementsByTagName = assert(function( div ) {

+		div.appendChild( doc.createComment("") );

+		return !div.getElementsByTagName("*").length;

+	});

+

+	// Check if getElementsByClassName can be trusted

+	support.getElementsByClassName = assert(function( div ) {

+		div.innerHTML = "<div class='a'></div><div class='a i'></div>";

+

+		// Support: Safari<4

+		// Catch class over-caching

+		div.firstChild.className = "i";

+		// Support: Opera<10

+		// Catch gEBCN failure to find non-leading classes

+		return div.getElementsByClassName("i").length === 2;

+	});

+

+	// Support: IE<10

+	// Check if getElementById returns elements by name

+	// The broken getElementById methods don't pick up programatically-set names,

+	// so use a roundabout getElementsByName test

+	support.getById = assert(function( div ) {

+		docElem.appendChild( div ).id = expando;

+		return !doc.getElementsByName || !doc.getElementsByName( expando ).length;

+	});

+

+	// ID find and filter

+	if ( support.getById ) {

+		Expr.find["ID"] = function( id, context ) {

+			if ( typeof context.getElementById !== strundefined && documentIsHTML ) {

+				var m = context.getElementById( id );

+				// Check parentNode to catch when Blackberry 4.6 returns

+				// nodes that are no longer in the document #6963

+				return m && m.parentNode ? [m] : [];

+			}

+		};

+		Expr.filter["ID"] = function( id ) {

+			var attrId = id.replace( runescape, funescape );

+			return function( elem ) {

+				return elem.getAttribute("id") === attrId;

+			};

+		};

+	} else {

+		// Support: IE6/7

+		// getElementById is not reliable as a find shortcut

+		delete Expr.find["ID"];

+

+		Expr.filter["ID"] =  function( id ) {

+			var attrId = id.replace( runescape, funescape );

+			return function( elem ) {

+				var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");

+				return node && node.value === attrId;

+			};

+		};

+	}

+

+	// Tag

+	Expr.find["TAG"] = support.getElementsByTagName ?

+		function( tag, context ) {

+			if ( typeof context.getElementsByTagName !== strundefined ) {

+				return context.getElementsByTagName( tag );

+			}

+		} :

+		function( tag, context ) {

+			var elem,

+				tmp = [],

+				i = 0,

+				results = context.getElementsByTagName( tag );

+

+			// Filter out possible comments

+			if ( tag === "*" ) {

+				while ( (elem = results[i++]) ) {

+					if ( elem.nodeType === 1 ) {

+						tmp.push( elem );

+					}

+				}

+

+				return tmp;

+			}

+			return results;

+		};

+

+	// Class

+	Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {

+		if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {

+			return context.getElementsByClassName( className );

+		}

+	};

+

+	/* QSA/matchesSelector

+	---------------------------------------------------------------------- */

+

+	// QSA and matchesSelector support

+

+	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)

+	rbuggyMatches = [];

+

+	// qSa(:focus) reports false when true (Chrome 21)

+	// We allow this because of a bug in IE8/9 that throws an error

+	// whenever `document.activeElement` is accessed on an iframe

+	// So, we allow :focus to pass through QSA all the time to avoid the IE error

+	// See http://bugs.jquery.com/ticket/13378

+	rbuggyQSA = [];

+

+	if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {

+		// Build QSA regex

+		// Regex strategy adopted from Diego Perini

+		assert(function( div ) {

+			// Select is set to empty string on purpose

+			// This is to test IE's treatment of not explicitly

+			// setting a boolean content attribute,

+			// since its presence should be enough

+			// http://bugs.jquery.com/ticket/12359

+			div.innerHTML = "<select><option selected=''></option></select>";

+

+			// Support: IE8

+			// Boolean attributes and "value" are not treated correctly

+			if ( !div.querySelectorAll("[selected]").length ) {

+				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );

+			}

+

+			// Webkit/Opera - :checked should return selected option elements

+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked

+			// IE8 throws error here and will not see later tests

+			if ( !div.querySelectorAll(":checked").length ) {

+				rbuggyQSA.push(":checked");

+			}

+		});

+

+		assert(function( div ) {

+

+			// Support: Opera 10-12/IE8

+			// ^= $= *= and empty values

+			// Should not select anything

+			// Support: Windows 8 Native Apps

+			// The type attribute is restricted during .innerHTML assignment

+			var input = doc.createElement("input");

+			input.setAttribute( "type", "hidden" );

+			div.appendChild( input ).setAttribute( "t", "" );

+

+			if ( div.querySelectorAll("[t^='']").length ) {

+				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );

+			}

+

+			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)

+			// IE8 throws error here and will not see later tests

+			if ( !div.querySelectorAll(":enabled").length ) {

+				rbuggyQSA.push( ":enabled", ":disabled" );

+			}

+

+			// Opera 10-11 does not throw on post-comma invalid pseudos

+			div.querySelectorAll("*,:x");

+			rbuggyQSA.push(",.*:");

+		});

+	}

+

+	if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector ||

+		docElem.mozMatchesSelector ||

+		docElem.oMatchesSelector ||

+		docElem.msMatchesSelector) )) ) {

+

+		assert(function( div ) {

+			// Check to see if it's possible to do matchesSelector

+			// on a disconnected node (IE 9)

+			support.disconnectedMatch = matches.call( div, "div" );

+

+			// This should fail with an exception

+			// Gecko does not error, returns false instead

+			matches.call( div, "[s!='']:x" );

+			rbuggyMatches.push( "!=", pseudos );

+		});

+	}

+

+	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );

+	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );

+

+	/* Contains

+	---------------------------------------------------------------------- */

+

+	// Element contains another

+	// Purposefully does not implement inclusive descendent

+	// As in, an element does not contain itself

+	contains = rnative.test( docElem.contains ) || docElem.compareDocumentPosition ?

+		function( a, b ) {

+			var adown = a.nodeType === 9 ? a.documentElement : a,

+				bup = b && b.parentNode;

+			return a === bup || !!( bup && bup.nodeType === 1 && (

+				adown.contains ?

+					adown.contains( bup ) :

+					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16

+			));

+		} :

+		function( a, b ) {

+			if ( b ) {

+				while ( (b = b.parentNode) ) {

+					if ( b === a ) {

+						return true;

+					}

+				}

+			}

+			return false;

+		};

+

+	/* Sorting

+	---------------------------------------------------------------------- */

+

+	// Document order sorting

+	sortOrder = docElem.compareDocumentPosition ?

+	function( a, b ) {

+

+		// Flag for duplicate removal

+		if ( a === b ) {

+			hasDuplicate = true;

+			return 0;

+		}

+

+		var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b );

+

+		if ( compare ) {

+			// Disconnected nodes

+			if ( compare & 1 ||

+				(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {

+

+				// Choose the first element that is related to our preferred document

+				if ( a === doc || contains(preferredDoc, a) ) {

+					return -1;

+				}

+				if ( b === doc || contains(preferredDoc, b) ) {

+					return 1;

+				}

+

+				// Maintain original order

+				return sortInput ?

+					( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :

+					0;

+			}

+

+			return compare & 4 ? -1 : 1;

+		}

+

+		// Not directly comparable, sort on existence of method

+		return a.compareDocumentPosition ? -1 : 1;

+	} :

+	function( a, b ) {

+		var cur,

+			i = 0,

+			aup = a.parentNode,

+			bup = b.parentNode,

+			ap = [ a ],

+			bp = [ b ];

+

+		// Exit early if the nodes are identical

+		if ( a === b ) {

+			hasDuplicate = true;

+			return 0;

+

+		// Parentless nodes are either documents or disconnected

+		} else if ( !aup || !bup ) {

+			return a === doc ? -1 :

+				b === doc ? 1 :

+				aup ? -1 :

+				bup ? 1 :

+				sortInput ?

+				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :

+				0;

+

+		// If the nodes are siblings, we can do a quick check

+		} else if ( aup === bup ) {

+			return siblingCheck( a, b );

+		}

+

+		// Otherwise we need full lists of their ancestors for comparison

+		cur = a;

+		while ( (cur = cur.parentNode) ) {

+			ap.unshift( cur );

+		}

+		cur = b;

+		while ( (cur = cur.parentNode) ) {

+			bp.unshift( cur );

+		}

+

+		// Walk down the tree looking for a discrepancy

+		while ( ap[i] === bp[i] ) {

+			i++;

+		}

+

+		return i ?

+			// Do a sibling check if the nodes have a common ancestor

+			siblingCheck( ap[i], bp[i] ) :

+

+			// Otherwise nodes in our document sort first

+			ap[i] === preferredDoc ? -1 :

+			bp[i] === preferredDoc ? 1 :

+			0;

+	};

+

+	return doc;

+};

+

+Sizzle.matches = function( expr, elements ) {

+	return Sizzle( expr, null, null, elements );

+};

+

+Sizzle.matchesSelector = function( elem, expr ) {

+	// Set document vars if needed

+	if ( ( elem.ownerDocument || elem ) !== document ) {

+		setDocument( elem );

+	}

+

+	// Make sure that attribute selectors are quoted

+	expr = expr.replace( rattributeQuotes, "='$1']" );

+

+	if ( support.matchesSelector && documentIsHTML &&

+		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&

+		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {

+

+		try {

+			var ret = matches.call( elem, expr );

+

+			// IE 9's matchesSelector returns false on disconnected nodes

+			if ( ret || support.disconnectedMatch ||

+					// As well, disconnected nodes are said to be in a document

+					// fragment in IE 9

+					elem.document && elem.document.nodeType !== 11 ) {

+				return ret;

+			}

+		} catch(e) {}

+	}

+

+	return Sizzle( expr, document, null, [elem] ).length > 0;

+};

+

+Sizzle.contains = function( context, elem ) {

+	// Set document vars if needed

+	if ( ( context.ownerDocument || context ) !== document ) {

+		setDocument( context );

+	}

+	return contains( context, elem );

+};

+

+Sizzle.attr = function( elem, name ) {

+	// Set document vars if needed

+	if ( ( elem.ownerDocument || elem ) !== document ) {

+		setDocument( elem );

+	}

+

+	var fn = Expr.attrHandle[ name.toLowerCase() ],

+		// Don't get fooled by Object.prototype properties (jQuery #13807)

+		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?

+			fn( elem, name, !documentIsHTML ) :

+			undefined;

+

+	return val === undefined ?

+		support.attributes || !documentIsHTML ?

+			elem.getAttribute( name ) :

+			(val = elem.getAttributeNode(name)) && val.specified ?

+				val.value :

+				null :

+		val;

+};

+

+Sizzle.error = function( msg ) {

+	throw new Error( "Syntax error, unrecognized expression: " + msg );

+};

+

+/**

+ * Document sorting and removing duplicates

+ * @param {ArrayLike} results

+ */

+Sizzle.uniqueSort = function( results ) {

+	var elem,

+		duplicates = [],

+		j = 0,

+		i = 0;

+

+	// Unless we *know* we can detect duplicates, assume their presence

+	hasDuplicate = !support.detectDuplicates;

+	sortInput = !support.sortStable && results.slice( 0 );

+	results.sort( sortOrder );

+

+	if ( hasDuplicate ) {

+		while ( (elem = results[i++]) ) {

+			if ( elem === results[ i ] ) {

+				j = duplicates.push( i );

+			}

+		}

+		while ( j-- ) {

+			results.splice( duplicates[ j ], 1 );

+		}

+	}

+

+	return results;

+};

+

+/**

+ * Utility function for retrieving the text value of an array of DOM nodes

+ * @param {Array|Element} elem

+ */

+getText = Sizzle.getText = function( elem ) {

+	var node,

+		ret = "",

+		i = 0,

+		nodeType = elem.nodeType;

+

+	if ( !nodeType ) {

+		// If no nodeType, this is expected to be an array

+		for ( ; (node = elem[i]); i++ ) {

+			// Do not traverse comment nodes

+			ret += getText( node );

+		}

+	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {

+		// Use textContent for elements

+		// innerText usage removed for consistency of new lines (see #11153)

+		if ( typeof elem.textContent === "string" ) {

+			return elem.textContent;

+		} else {

+			// Traverse its children

+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {

+				ret += getText( elem );

+			}

+		}

+	} else if ( nodeType === 3 || nodeType === 4 ) {

+		return elem.nodeValue;

+	}

+	// Do not include comment or processing instruction nodes

+

+	return ret;

+};

+

+Expr = Sizzle.selectors = {

+

+	// Can be adjusted by the user

+	cacheLength: 50,

+

+	createPseudo: markFunction,

+

+	match: matchExpr,

+

+	attrHandle: {},

+

+	find: {},

+

+	relative: {

+		">": { dir: "parentNode", first: true },

+		" ": { dir: "parentNode" },

+		"+": { dir: "previousSibling", first: true },

+		"~": { dir: "previousSibling" }

+	},

+

+	preFilter: {

+		"ATTR": function( match ) {

+			match[1] = match[1].replace( runescape, funescape );

+

+			// Move the given value to match[3] whether quoted or unquoted

+			match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );

+

+			if ( match[2] === "~=" ) {

+				match[3] = " " + match[3] + " ";

+			}

+

+			return match.slice( 0, 4 );

+		},

+

+		"CHILD": function( match ) {

+			/* matches from matchExpr["CHILD"]

+				1 type (only|nth|...)

+				2 what (child|of-type)

+				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)

+				4 xn-component of xn+y argument ([+-]?\d*n|)

+				5 sign of xn-component

+				6 x of xn-component

+				7 sign of y-component

+				8 y of y-component

+			*/

+			match[1] = match[1].toLowerCase();

+

+			if ( match[1].slice( 0, 3 ) === "nth" ) {

+				// nth-* requires argument

+				if ( !match[3] ) {

+					Sizzle.error( match[0] );

+				}

+

+				// numeric x and y parameters for Expr.filter.CHILD

+				// remember that false/true cast respectively to 0/1

+				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );

+				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );

+

+			// other types prohibit arguments

+			} else if ( match[3] ) {

+				Sizzle.error( match[0] );

+			}

+

+			return match;

+		},

+

+		"PSEUDO": function( match ) {

+			var excess,

+				unquoted = !match[5] && match[2];

+

+			if ( matchExpr["CHILD"].test( match[0] ) ) {

+				return null;

+			}

+

+			// Accept quoted arguments as-is

+			if ( match[3] && match[4] !== undefined ) {

+				match[2] = match[4];

+

+			// Strip excess characters from unquoted arguments

+			} else if ( unquoted && rpseudo.test( unquoted ) &&

+				// Get excess from tokenize (recursively)

+				(excess = tokenize( unquoted, true )) &&

+				// advance to the next closing parenthesis

+				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {

+

+				// excess is a negative index

+				match[0] = match[0].slice( 0, excess );

+				match[2] = unquoted.slice( 0, excess );

+			}

+

+			// Return only captures needed by the pseudo filter method (type and argument)

+			return match.slice( 0, 3 );

+		}

+	},

+

+	filter: {

+

+		"TAG": function( nodeNameSelector ) {

+			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();

+			return nodeNameSelector === "*" ?

+				function() { return true; } :

+				function( elem ) {

+					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;

+				};

+		},

+

+		"CLASS": function( className ) {

+			var pattern = classCache[ className + " " ];

+

+			return pattern ||

+				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&

+				classCache( className, function( elem ) {

+					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );

+				});

+		},

+

+		"ATTR": function( name, operator, check ) {

+			return function( elem ) {

+				var result = Sizzle.attr( elem, name );

+

+				if ( result == null ) {

+					return operator === "!=";

+				}

+				if ( !operator ) {

+					return true;

+				}

+

+				result += "";

+

+				return operator === "=" ? result === check :

+					operator === "!=" ? result !== check :

+					operator === "^=" ? check && result.indexOf( check ) === 0 :

+					operator === "*=" ? check && result.indexOf( check ) > -1 :

+					operator === "$=" ? check && result.slice( -check.length ) === check :

+					operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :

+					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :

+					false;

+			};

+		},

+

+		"CHILD": function( type, what, argument, first, last ) {

+			var simple = type.slice( 0, 3 ) !== "nth",

+				forward = type.slice( -4 ) !== "last",

+				ofType = what === "of-type";

+

+			return first === 1 && last === 0 ?

+

+				// Shortcut for :nth-*(n)

+				function( elem ) {

+					return !!elem.parentNode;

+				} :

+

+				function( elem, context, xml ) {

+					var cache, outerCache, node, diff, nodeIndex, start,

+						dir = simple !== forward ? "nextSibling" : "previousSibling",

+						parent = elem.parentNode,

+						name = ofType && elem.nodeName.toLowerCase(),

+						useCache = !xml && !ofType;

+

+					if ( parent ) {

+

+						// :(first|last|only)-(child|of-type)

+						if ( simple ) {

+							while ( dir ) {

+								node = elem;

+								while ( (node = node[ dir ]) ) {

+									if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {

+										return false;

+									}

+								}

+								// Reverse direction for :only-* (if we haven't yet done so)

+								start = dir = type === "only" && !start && "nextSibling";

+							}

+							return true;

+						}

+

+						start = [ forward ? parent.firstChild : parent.lastChild ];

+

+						// non-xml :nth-child(...) stores cache data on `parent`

+						if ( forward && useCache ) {

+							// Seek `elem` from a previously-cached index

+							outerCache = parent[ expando ] || (parent[ expando ] = {});

+							cache = outerCache[ type ] || [];

+							nodeIndex = cache[0] === dirruns && cache[1];

+							diff = cache[0] === dirruns && cache[2];

+							node = nodeIndex && parent.childNodes[ nodeIndex ];

+

+							while ( (node = ++nodeIndex && node && node[ dir ] ||

+

+								// Fallback to seeking `elem` from the start

+								(diff = nodeIndex = 0) || start.pop()) ) {

+

+								// When found, cache indexes on `parent` and break

+								if ( node.nodeType === 1 && ++diff && node === elem ) {

+									outerCache[ type ] = [ dirruns, nodeIndex, diff ];

+									break;

+								}

+							}

+

+						// Use previously-cached element index if available

+						} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {

+							diff = cache[1];

+

+						// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)

+						} else {

+							// Use the same loop as above to seek `elem` from the start

+							while ( (node = ++nodeIndex && node && node[ dir ] ||

+								(diff = nodeIndex = 0) || start.pop()) ) {

+

+								if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {

+									// Cache the index of each encountered element

+									if ( useCache ) {

+										(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];

+									}

+

+									if ( node === elem ) {

+										break;

+									}

+								}

+							}

+						}

+

+						// Incorporate the offset, then check against cycle size

+						diff -= last;

+						return diff === first || ( diff % first === 0 && diff / first >= 0 );

+					}

+				};

+		},

+

+		"PSEUDO": function( pseudo, argument ) {

+			// pseudo-class names are case-insensitive

+			// http://www.w3.org/TR/selectors/#pseudo-classes

+			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters

+			// Remember that setFilters inherits from pseudos

+			var args,

+				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||

+					Sizzle.error( "unsupported pseudo: " + pseudo );

+

+			// The user may use createPseudo to indicate that

+			// arguments are needed to create the filter function

+			// just as Sizzle does

+			if ( fn[ expando ] ) {

+				return fn( argument );

+			}

+

+			// But maintain support for old signatures

+			if ( fn.length > 1 ) {

+				args = [ pseudo, pseudo, "", argument ];

+				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?

+					markFunction(function( seed, matches ) {

+						var idx,

+							matched = fn( seed, argument ),

+							i = matched.length;

+						while ( i-- ) {

+							idx = indexOf.call( seed, matched[i] );

+							seed[ idx ] = !( matches[ idx ] = matched[i] );

+						}

+					}) :

+					function( elem ) {

+						return fn( elem, 0, args );

+					};

+			}

+

+			return fn;

+		}

+	},

+

+	pseudos: {

+		// Potentially complex pseudos

+		"not": markFunction(function( selector ) {

+			// Trim the selector passed to compile

+			// to avoid treating leading and trailing

+			// spaces as combinators

+			var input = [],

+				results = [],

+				matcher = compile( selector.replace( rtrim, "$1" ) );

+

+			return matcher[ expando ] ?

+				markFunction(function( seed, matches, context, xml ) {

+					var elem,

+						unmatched = matcher( seed, null, xml, [] ),

+						i = seed.length;

+

+					// Match elements unmatched by `matcher`

+					while ( i-- ) {

+						if ( (elem = unmatched[i]) ) {

+							seed[i] = !(matches[i] = elem);

+						}

+					}

+				}) :

+				function( elem, context, xml ) {

+					input[0] = elem;

+					matcher( input, null, xml, results );

+					return !results.pop();

+				};

+		}),

+

+		"has": markFunction(function( selector ) {

+			return function( elem ) {

+				return Sizzle( selector, elem ).length > 0;

+			};

+		}),

+

+		"contains": markFunction(function( text ) {

+			return function( elem ) {

+				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;

+			};

+		}),

+

+		// "Whether an element is represented by a :lang() selector

+		// is based solely on the element's language value

+		// being equal to the identifier C,

+		// or beginning with the identifier C immediately followed by "-".

+		// The matching of C against the element's language value is performed case-insensitively.

+		// The identifier C does not have to be a valid language name."

+		// http://www.w3.org/TR/selectors/#lang-pseudo

+		"lang": markFunction( function( lang ) {

+			// lang value must be a valid identifier

+			if ( !ridentifier.test(lang || "") ) {

+				Sizzle.error( "unsupported lang: " + lang );

+			}

+			lang = lang.replace( runescape, funescape ).toLowerCase();

+			return function( elem ) {

+				var elemLang;

+				do {

+					if ( (elemLang = documentIsHTML ?

+						elem.lang :

+						elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {

+

+						elemLang = elemLang.toLowerCase();

+						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;

+					}

+				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );

+				return false;

+			};

+		}),

+

+		// Miscellaneous

+		"target": function( elem ) {

+			var hash = window.location && window.location.hash;

+			return hash && hash.slice( 1 ) === elem.id;

+		},

+

+		"root": function( elem ) {

+			return elem === docElem;

+		},

+

+		"focus": function( elem ) {

+			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);

+		},

+

+		// Boolean properties

+		"enabled": function( elem ) {

+			return elem.disabled === false;

+		},

+

+		"disabled": function( elem ) {

+			return elem.disabled === true;

+		},

+

+		"checked": function( elem ) {

+			// In CSS3, :checked should return both checked and selected elements

+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked

+			var nodeName = elem.nodeName.toLowerCase();

+			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);

+		},

+

+		"selected": function( elem ) {

+			// Accessing this property makes selected-by-default

+			// options in Safari work properly

+			if ( elem.parentNode ) {

+				elem.parentNode.selectedIndex;

+			}

+

+			return elem.selected === true;

+		},

+

+		// Contents

+		"empty": function( elem ) {

+			// http://www.w3.org/TR/selectors/#empty-pseudo

+			// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),

+			//   not comment, processing instructions, or others

+			// Thanks to Diego Perini for the nodeName shortcut

+			//   Greater than "@" means alpha characters (specifically not starting with "#" or "?")

+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {

+				if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) {

+					return false;

+				}

+			}

+			return true;

+		},

+

+		"parent": function( elem ) {

+			return !Expr.pseudos["empty"]( elem );

+		},

+

+		// Element/input types

+		"header": function( elem ) {

+			return rheader.test( elem.nodeName );

+		},

+

+		"input": function( elem ) {

+			return rinputs.test( elem.nodeName );

+		},

+

+		"button": function( elem ) {

+			var name = elem.nodeName.toLowerCase();

+			return name === "input" && elem.type === "button" || name === "button";

+		},

+

+		"text": function( elem ) {

+			var attr;

+			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)

+			// use getAttribute instead to test this case

+			return elem.nodeName.toLowerCase() === "input" &&

+				elem.type === "text" &&

+				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );

+		},

+

+		// Position-in-collection

+		"first": createPositionalPseudo(function() {

+			return [ 0 ];

+		}),

+

+		"last": createPositionalPseudo(function( matchIndexes, length ) {

+			return [ length - 1 ];

+		}),

+

+		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {

+			return [ argument < 0 ? argument + length : argument ];

+		}),

+

+		"even": createPositionalPseudo(function( matchIndexes, length ) {

+			var i = 0;

+			for ( ; i < length; i += 2 ) {

+				matchIndexes.push( i );

+			}

+			return matchIndexes;

+		}),

+

+		"odd": createPositionalPseudo(function( matchIndexes, length ) {

+			var i = 1;

+			for ( ; i < length; i += 2 ) {

+				matchIndexes.push( i );

+			}

+			return matchIndexes;

+		}),

+

+		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {

+			var i = argument < 0 ? argument + length : argument;

+			for ( ; --i >= 0; ) {

+				matchIndexes.push( i );

+			}

+			return matchIndexes;

+		}),

+

+		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {

+			var i = argument < 0 ? argument + length : argument;

+			for ( ; ++i < length; ) {

+				matchIndexes.push( i );

+			}

+			return matchIndexes;

+		})

+	}

+};

+

+Expr.pseudos["nth"] = Expr.pseudos["eq"];

+

+// Add button/input type pseudos

+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {

+	Expr.pseudos[ i ] = createInputPseudo( i );

+}

+for ( i in { submit: true, reset: true } ) {

+	Expr.pseudos[ i ] = createButtonPseudo( i );

+}

+

+// Easy API for creating new setFilters

+function setFilters() {}

+setFilters.prototype = Expr.filters = Expr.pseudos;

+Expr.setFilters = new setFilters();

+

+function tokenize( selector, parseOnly ) {

+	var matched, match, tokens, type,

+		soFar, groups, preFilters,

+		cached = tokenCache[ selector + " " ];

+

+	if ( cached ) {

+		return parseOnly ? 0 : cached.slice( 0 );

+	}

+

+	soFar = selector;

+	groups = [];

+	preFilters = Expr.preFilter;

+

+	while ( soFar ) {

+

+		// Comma and first run

+		if ( !matched || (match = rcomma.exec( soFar )) ) {

+			if ( match ) {

+				// Don't consume trailing commas as valid

+				soFar = soFar.slice( match[0].length ) || soFar;

+			}

+			groups.push( tokens = [] );

+		}

+

+		matched = false;

+

+		// Combinators

+		if ( (match = rcombinators.exec( soFar )) ) {

+			matched = match.shift();

+			tokens.push({

+				value: matched,

+				// Cast descendant combinators to space

+				type: match[0].replace( rtrim, " " )

+			});

+			soFar = soFar.slice( matched.length );

+		}

+

+		// Filters

+		for ( type in Expr.filter ) {

+			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||

+				(match = preFilters[ type ]( match ))) ) {

+				matched = match.shift();

+				tokens.push({

+					value: matched,

+					type: type,

+					matches: match

+				});

+				soFar = soFar.slice( matched.length );

+			}

+		}

+

+		if ( !matched ) {

+			break;

+		}

+	}

+

+	// Return the length of the invalid excess

+	// if we're just parsing

+	// Otherwise, throw an error or return tokens

+	return parseOnly ?

+		soFar.length :

+		soFar ?

+			Sizzle.error( selector ) :

+			// Cache the tokens

+			tokenCache( selector, groups ).slice( 0 );

+}

+

+function toSelector( tokens ) {

+	var i = 0,

+		len = tokens.length,

+		selector = "";

+	for ( ; i < len; i++ ) {

+		selector += tokens[i].value;

+	}

+	return selector;

+}

+

+function addCombinator( matcher, combinator, base ) {

+	var dir = combinator.dir,

+		checkNonElements = base && dir === "parentNode",

+		doneName = done++;

+

+	return combinator.first ?

+		// Check against closest ancestor/preceding element

+		function( elem, context, xml ) {

+			while ( (elem = elem[ dir ]) ) {

+				if ( elem.nodeType === 1 || checkNonElements ) {

+					return matcher( elem, context, xml );

+				}

+			}

+		} :

+

+		// Check against all ancestor/preceding elements

+		function( elem, context, xml ) {

+			var data, cache, outerCache,

+				dirkey = dirruns + " " + doneName;

+

+			// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching

+			if ( xml ) {

+				while ( (elem = elem[ dir ]) ) {

+					if ( elem.nodeType === 1 || checkNonElements ) {

+						if ( matcher( elem, context, xml ) ) {

+							return true;

+						}

+					}

+				}

+			} else {

+				while ( (elem = elem[ dir ]) ) {

+					if ( elem.nodeType === 1 || checkNonElements ) {

+						outerCache = elem[ expando ] || (elem[ expando ] = {});

+						if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {

+							if ( (data = cache[1]) === true || data === cachedruns ) {

+								return data === true;

+							}

+						} else {

+							cache = outerCache[ dir ] = [ dirkey ];

+							cache[1] = matcher( elem, context, xml ) || cachedruns;

+							if ( cache[1] === true ) {

+								return true;

+							}

+						}

+					}

+				}

+			}

+		};

+}

+

+function elementMatcher( matchers ) {

+	return matchers.length > 1 ?

+		function( elem, context, xml ) {

+			var i = matchers.length;

+			while ( i-- ) {

+				if ( !matchers[i]( elem, context, xml ) ) {

+					return false;

+				}

+			}

+			return true;

+		} :

+		matchers[0];

+}

+

+function condense( unmatched, map, filter, context, xml ) {

+	var elem,

+		newUnmatched = [],

+		i = 0,

+		len = unmatched.length,

+		mapped = map != null;

+

+	for ( ; i < len; i++ ) {

+		if ( (elem = unmatched[i]) ) {

+			if ( !filter || filter( elem, context, xml ) ) {

+				newUnmatched.push( elem );

+				if ( mapped ) {

+					map.push( i );

+				}

+			}

+		}

+	}

+

+	return newUnmatched;

+}

+

+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {

+	if ( postFilter && !postFilter[ expando ] ) {

+		postFilter = setMatcher( postFilter );

+	}

+	if ( postFinder && !postFinder[ expando ] ) {

+		postFinder = setMatcher( postFinder, postSelector );

+	}

+	return markFunction(function( seed, results, context, xml ) {

+		var temp, i, elem,

+			preMap = [],

+			postMap = [],

+			preexisting = results.length,

+

+			// Get initial elements from seed or context

+			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),

+

+			// Prefilter to get matcher input, preserving a map for seed-results synchronization

+			matcherIn = preFilter && ( seed || !selector ) ?

+				condense( elems, preMap, preFilter, context, xml ) :

+				elems,

+

+			matcherOut = matcher ?

+				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,

+				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?

+

+					// ...intermediate processing is necessary

+					[] :

+

+					// ...otherwise use results directly

+					results :

+				matcherIn;

+

+		// Find primary matches

+		if ( matcher ) {

+			matcher( matcherIn, matcherOut, context, xml );

+		}

+

+		// Apply postFilter

+		if ( postFilter ) {

+			temp = condense( matcherOut, postMap );

+			postFilter( temp, [], context, xml );

+

+			// Un-match failing elements by moving them back to matcherIn

+			i = temp.length;

+			while ( i-- ) {

+				if ( (elem = temp[i]) ) {

+					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);

+				}

+			}

+		}

+

+		if ( seed ) {

+			if ( postFinder || preFilter ) {

+				if ( postFinder ) {

+					// Get the final matcherOut by condensing this intermediate into postFinder contexts

+					temp = [];

+					i = matcherOut.length;

+					while ( i-- ) {

+						if ( (elem = matcherOut[i]) ) {

+							// Restore matcherIn since elem is not yet a final match

+							temp.push( (matcherIn[i] = elem) );

+						}

+					}

+					postFinder( null, (matcherOut = []), temp, xml );

+				}

+

+				// Move matched elements from seed to results to keep them synchronized

+				i = matcherOut.length;

+				while ( i-- ) {

+					if ( (elem = matcherOut[i]) &&

+						(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {

+

+						seed[temp] = !(results[temp] = elem);

+					}

+				}

+			}

+

+		// Add elements to results, through postFinder if defined

+		} else {

+			matcherOut = condense(

+				matcherOut === results ?

+					matcherOut.splice( preexisting, matcherOut.length ) :

+					matcherOut

+			);

+			if ( postFinder ) {

+				postFinder( null, results, matcherOut, xml );

+			} else {

+				push.apply( results, matcherOut );

+			}

+		}

+	});

+}

+

+function matcherFromTokens( tokens ) {

+	var checkContext, matcher, j,

+		len = tokens.length,

+		leadingRelative = Expr.relative[ tokens[0].type ],

+		implicitRelative = leadingRelative || Expr.relative[" "],

+		i = leadingRelative ? 1 : 0,

+

+		// The foundational matcher ensures that elements are reachable from top-level context(s)

+		matchContext = addCombinator( function( elem ) {

+			return elem === checkContext;

+		}, implicitRelative, true ),

+		matchAnyContext = addCombinator( function( elem ) {

+			return indexOf.call( checkContext, elem ) > -1;

+		}, implicitRelative, true ),

+		matchers = [ function( elem, context, xml ) {

+			return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (

+				(checkContext = context).nodeType ?

+					matchContext( elem, context, xml ) :

+					matchAnyContext( elem, context, xml ) );

+		} ];

+

+	for ( ; i < len; i++ ) {

+		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {

+			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];

+		} else {

+			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );

+

+			// Return special upon seeing a positional matcher

+			if ( matcher[ expando ] ) {

+				// Find the next relative operator (if any) for proper handling

+				j = ++i;

+				for ( ; j < len; j++ ) {

+					if ( Expr.relative[ tokens[j].type ] ) {

+						break;

+					}

+				}

+				return setMatcher(

+					i > 1 && elementMatcher( matchers ),

+					i > 1 && toSelector(

+						// If the preceding token was a descendant combinator, insert an implicit any-element `*`

+						tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })

+					).replace( rtrim, "$1" ),

+					matcher,

+					i < j && matcherFromTokens( tokens.slice( i, j ) ),

+					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),

+					j < len && toSelector( tokens )

+				);

+			}

+			matchers.push( matcher );

+		}

+	}

+

+	return elementMatcher( matchers );

+}

+

+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {

+	// A counter to specify which element is currently being matched

+	var matcherCachedRuns = 0,

+		bySet = setMatchers.length > 0,

+		byElement = elementMatchers.length > 0,

+		superMatcher = function( seed, context, xml, results, expandContext ) {

+			var elem, j, matcher,

+				setMatched = [],

+				matchedCount = 0,

+				i = "0",

+				unmatched = seed && [],

+				outermost = expandContext != null,

+				contextBackup = outermostContext,

+				// We must always have either seed elements or context

+				elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),

+				// Use integer dirruns iff this is the outermost matcher

+				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);

+

+			if ( outermost ) {

+				outermostContext = context !== document && context;

+				cachedruns = matcherCachedRuns;

+			}

+

+			// Add elements passing elementMatchers directly to results

+			// Keep `i` a string if there are no elements so `matchedCount` will be "00" below

+			for ( ; (elem = elems[i]) != null; i++ ) {

+				if ( byElement && elem ) {

+					j = 0;

+					while ( (matcher = elementMatchers[j++]) ) {

+						if ( matcher( elem, context, xml ) ) {

+							results.push( elem );

+							break;

+						}

+					}

+					if ( outermost ) {

+						dirruns = dirrunsUnique;

+						cachedruns = ++matcherCachedRuns;

+					}

+				}

+

+				// Track unmatched elements for set filters

+				if ( bySet ) {

+					// They will have gone through all possible matchers

+					if ( (elem = !matcher && elem) ) {

+						matchedCount--;

+					}

+

+					// Lengthen the array for every element, matched or not

+					if ( seed ) {

+						unmatched.push( elem );

+					}

+				}

+			}

+

+			// Apply set filters to unmatched elements

+			matchedCount += i;

+			if ( bySet && i !== matchedCount ) {

+				j = 0;

+				while ( (matcher = setMatchers[j++]) ) {

+					matcher( unmatched, setMatched, context, xml );

+				}

+

+				if ( seed ) {

+					// Reintegrate element matches to eliminate the need for sorting

+					if ( matchedCount > 0 ) {

+						while ( i-- ) {

+							if ( !(unmatched[i] || setMatched[i]) ) {

+								setMatched[i] = pop.call( results );

+							}

+						}

+					}

+

+					// Discard index placeholder values to get only actual matches

+					setMatched = condense( setMatched );

+				}

+

+				// Add matches to results

+				push.apply( results, setMatched );

+

+				// Seedless set matches succeeding multiple successful matchers stipulate sorting

+				if ( outermost && !seed && setMatched.length > 0 &&

+					( matchedCount + setMatchers.length ) > 1 ) {

+

+					Sizzle.uniqueSort( results );

+				}

+			}

+

+			// Override manipulation of globals by nested matchers

+			if ( outermost ) {

+				dirruns = dirrunsUnique;

+				outermostContext = contextBackup;

+			}

+

+			return unmatched;

+		};

+

+	return bySet ?

+		markFunction( superMatcher ) :

+		superMatcher;

+}

+

+compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {

+	var i,

+		setMatchers = [],

+		elementMatchers = [],

+		cached = compilerCache[ selector + " " ];

+

+	if ( !cached ) {

+		// Generate a function of recursive functions that can be used to check each element

+		if ( !group ) {

+			group = tokenize( selector );

+		}

+		i = group.length;

+		while ( i-- ) {

+			cached = matcherFromTokens( group[i] );

+			if ( cached[ expando ] ) {

+				setMatchers.push( cached );

+			} else {

+				elementMatchers.push( cached );

+			}

+		}

+

+		// Cache the compiled function

+		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );

+	}

+	return cached;

+};

+

+function multipleContexts( selector, contexts, results ) {

+	var i = 0,

+		len = contexts.length;

+	for ( ; i < len; i++ ) {

+		Sizzle( selector, contexts[i], results );

+	}

+	return results;

+}

+

+function select( selector, context, results, seed ) {

+	var i, tokens, token, type, find,

+		match = tokenize( selector );

+

+	if ( !seed ) {

+		// Try to minimize operations if there is only one group

+		if ( match.length === 1 ) {

+

+			// Take a shortcut and set the context if the root selector is an ID

+			tokens = match[0] = match[0].slice( 0 );

+			if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&

+					support.getById && context.nodeType === 9 && documentIsHTML &&

+					Expr.relative[ tokens[1].type ] ) {

+

+				context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];

+				if ( !context ) {

+					return results;

+				}

+				selector = selector.slice( tokens.shift().value.length );

+			}

+

+			// Fetch a seed set for right-to-left matching

+			i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;

+			while ( i-- ) {

+				token = tokens[i];

+

+				// Abort if we hit a combinator

+				if ( Expr.relative[ (type = token.type) ] ) {

+					break;

+				}

+				if ( (find = Expr.find[ type ]) ) {

+					// Search, expanding context for leading sibling combinators

+					if ( (seed = find(

+						token.matches[0].replace( runescape, funescape ),

+						rsibling.test( tokens[0].type ) && context.parentNode || context

+					)) ) {

+

+						// If seed is empty or no tokens remain, we can return early

+						tokens.splice( i, 1 );

+						selector = seed.length && toSelector( tokens );

+						if ( !selector ) {

+							push.apply( results, seed );

+							return results;

+						}

+

+						break;

+					}

+				}

+			}

+		}

+	}

+

+	// Compile and execute a filtering function

+	// Provide `match` to avoid retokenization if we modified the selector above

+	compile( selector, match )(

+		seed,

+		context,

+		!documentIsHTML,

+		results,

+		rsibling.test( selector )

+	);

+	return results;

+}

+

+// One-time assignments

+

+// Sort stability

+support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;

+

+// Support: Chrome<14

+// Always assume duplicates if they aren't passed to the comparison function

+support.detectDuplicates = hasDuplicate;

+

+// Initialize against the default document

+setDocument();

+

+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)

+// Detached nodes confoundingly follow *each other*

+support.sortDetached = assert(function( div1 ) {

+	// Should return 1, but returns 4 (following)

+	return div1.compareDocumentPosition( document.createElement("div") ) & 1;

+});

+

+// Support: IE<8

+// Prevent attribute/property "interpolation"

+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx

+if ( !assert(function( div ) {

+	div.innerHTML = "<a href='#'></a>";

+	return div.firstChild.getAttribute("href") === "#" ;

+}) ) {

+	addHandle( "type|href|height|width", function( elem, name, isXML ) {

+		if ( !isXML ) {

+			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );

+		}

+	});

+}

+

+// Support: IE<9

+// Use defaultValue in place of getAttribute("value")

+if ( !support.attributes || !assert(function( div ) {

+	div.innerHTML = "<input/>";

+	div.firstChild.setAttribute( "value", "" );

+	return div.firstChild.getAttribute( "value" ) === "";

+}) ) {

+	addHandle( "value", function( elem, name, isXML ) {

+		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {

+			return elem.defaultValue;

+		}

+	});

+}

+

+// Support: IE<9

+// Use getAttributeNode to fetch booleans when getAttribute lies

+if ( !assert(function( div ) {

+	return div.getAttribute("disabled") == null;

+}) ) {

+	addHandle( booleans, function( elem, name, isXML ) {

+		var val;

+		if ( !isXML ) {

+			return (val = elem.getAttributeNode( name )) && val.specified ?

+				val.value :

+				elem[ name ] === true ? name.toLowerCase() : null;

+		}

+	});

+}

+

+jQuery.find = Sizzle;

+jQuery.expr = Sizzle.selectors;

+jQuery.expr[":"] = jQuery.expr.pseudos;

+jQuery.unique = Sizzle.uniqueSort;

+jQuery.text = Sizzle.getText;

+jQuery.isXMLDoc = Sizzle.isXML;

+jQuery.contains = Sizzle.contains;

+

+

+})( window );

+// String to Object options format cache

+var optionsCache = {};

+

+// Convert String-formatted options into Object-formatted ones and store in cache

+function createOptions( options ) {

+	var object = optionsCache[ options ] = {};

+	jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {

+		object[ flag ] = true;

+	});

+	return object;

+}

+

+/*

+ * Create a callback list using the following parameters:

+ *

+ *	options: an optional list of space-separated options that will change how

+ *			the callback list behaves or a more traditional option object

+ *

+ * By default a callback list will act like an event callback list and can be

+ * "fired" multiple times.

+ *

+ * Possible options:

+ *

+ *	once:			will ensure the callback list can only be fired once (like a Deferred)

+ *

+ *	memory:			will keep track of previous values and will call any callback added

+ *					after the list has been fired right away with the latest "memorized"

+ *					values (like a Deferred)

+ *

+ *	unique:			will ensure a callback can only be added once (no duplicate in the list)

+ *

+ *	stopOnFalse:	interrupt callings when a callback returns false

+ *

+ */

+jQuery.Callbacks = function( options ) {

+

+	// Convert options from String-formatted to Object-formatted if needed

+	// (we check in cache first)

+	options = typeof options === "string" ?

+		( optionsCache[ options ] || createOptions( options ) ) :

+		jQuery.extend( {}, options );

+

+	var // Flag to know if list is currently firing

+		firing,

+		// Last fire value (for non-forgettable lists)

+		memory,

+		// Flag to know if list was already fired

+		fired,

+		// End of the loop when firing

+		firingLength,

+		// Index of currently firing callback (modified by remove if needed)

+		firingIndex,

+		// First callback to fire (used internally by add and fireWith)

+		firingStart,

+		// Actual callback list

+		list = [],

+		// Stack of fire calls for repeatable lists

+		stack = !options.once && [],

+		// Fire callbacks

+		fire = function( data ) {

+			memory = options.memory && data;

+			fired = true;

+			firingIndex = firingStart || 0;

+			firingStart = 0;

+			firingLength = list.length;

+			firing = true;

+			for ( ; list && firingIndex < firingLength; firingIndex++ ) {

+				if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {

+					memory = false; // To prevent further calls using add

+					break;

+				}

+			}

+			firing = false;

+			if ( list ) {

+				if ( stack ) {

+					if ( stack.length ) {

+						fire( stack.shift() );

+					}

+				} else if ( memory ) {

+					list = [];

+				} else {

+					self.disable();

+				}

+			}

+		},

+		// Actual Callbacks object

+		self = {

+			// Add a callback or a collection of callbacks to the list

+			add: function() {

+				if ( list ) {

+					// First, we save the current length

+					var start = list.length;

+					(function add( args ) {

+						jQuery.each( args, function( _, arg ) {

+							var type = jQuery.type( arg );

+							if ( type === "function" ) {

+								if ( !options.unique || !self.has( arg ) ) {

+									list.push( arg );

+								}

+							} else if ( arg && arg.length && type !== "string" ) {

+								// Inspect recursively

+								add( arg );

+							}

+						});

+					})( arguments );

+					// Do we need to add the callbacks to the

+					// current firing batch?

+					if ( firing ) {

+						firingLength = list.length;

+					// With memory, if we're not firing then

+					// we should call right away

+					} else if ( memory ) {

+						firingStart = start;

+						fire( memory );

+					}

+				}

+				return this;

+			},

+			// Remove a callback from the list

+			remove: function() {

+				if ( list ) {

+					jQuery.each( arguments, function( _, arg ) {

+						var index;

+						while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {

+							list.splice( index, 1 );

+							// Handle firing indexes

+							if ( firing ) {

+								if ( index <= firingLength ) {

+									firingLength--;

+								}

+								if ( index <= firingIndex ) {

+									firingIndex--;

+								}

+							}

+						}

+					});

+				}

+				return this;

+			},

+			// Check if a given callback is in the list.

+			// If no argument is given, return whether or not list has callbacks attached.

+			has: function( fn ) {

+				return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );

+			},

+			// Remove all callbacks from the list

+			empty: function() {

+				list = [];

+				firingLength = 0;

+				return this;

+			},

+			// Have the list do nothing anymore

+			disable: function() {

+				list = stack = memory = undefined;

+				return this;

+			},

+			// Is it disabled?

+			disabled: function() {

+				return !list;

+			},

+			// Lock the list in its current state

+			lock: function() {

+				stack = undefined;

+				if ( !memory ) {

+					self.disable();

+				}

+				return this;

+			},

+			// Is it locked?

+			locked: function() {

+				return !stack;

+			},

+			// Call all callbacks with the given context and arguments

+			fireWith: function( context, args ) {

+				if ( list && ( !fired || stack ) ) {

+					args = args || [];

+					args = [ context, args.slice ? args.slice() : args ];

+					if ( firing ) {

+						stack.push( args );

+					} else {

+						fire( args );

+					}

+				}

+				return this;

+			},

+			// Call all the callbacks with the given arguments

+			fire: function() {

+				self.fireWith( this, arguments );

+				return this;

+			},

+			// To know if the callbacks have already been called at least once

+			fired: function() {

+				return !!fired;

+			}

+		};

+

+	return self;

+};

+jQuery.extend({

+

+	Deferred: function( func ) {

+		var tuples = [

+				// action, add listener, listener list, final state

+				[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],

+				[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],

+				[ "notify", "progress", jQuery.Callbacks("memory") ]

+			],

+			state = "pending",

+			promise = {

+				state: function() {

+					return state;

+				},

+				always: function() {

+					deferred.done( arguments ).fail( arguments );

+					return this;

+				},

+				then: function( /* fnDone, fnFail, fnProgress */ ) {

+					var fns = arguments;

+					return jQuery.Deferred(function( newDefer ) {

+						jQuery.each( tuples, function( i, tuple ) {

+							var action = tuple[ 0 ],

+								fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];

+							// deferred[ done | fail | progress ] for forwarding actions to newDefer

+							deferred[ tuple[1] ](function() {

+								var returned = fn && fn.apply( this, arguments );

+								if ( returned && jQuery.isFunction( returned.promise ) ) {

+									returned.promise()

+										.done( newDefer.resolve )

+										.fail( newDefer.reject )

+										.progress( newDefer.notify );

+								} else {

+									newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );

+								}

+							});

+						});

+						fns = null;

+					}).promise();

+				},

+				// Get a promise for this deferred

+				// If obj is provided, the promise aspect is added to the object

+				promise: function( obj ) {

+					return obj != null ? jQuery.extend( obj, promise ) : promise;

+				}

+			},

+			deferred = {};

+

+		// Keep pipe for back-compat

+		promise.pipe = promise.then;

+

+		// Add list-specific methods

+		jQuery.each( tuples, function( i, tuple ) {

+			var list = tuple[ 2 ],

+				stateString = tuple[ 3 ];

+

+			// promise[ done | fail | progress ] = list.add

+			promise[ tuple[1] ] = list.add;

+

+			// Handle state

+			if ( stateString ) {

+				list.add(function() {

+					// state = [ resolved | rejected ]

+					state = stateString;

+

+				// [ reject_list | resolve_list ].disable; progress_list.lock

+				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );

+			}

+

+			// deferred[ resolve | reject | notify ]

+			deferred[ tuple[0] ] = function() {

+				deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );

+				return this;

+			};

+			deferred[ tuple[0] + "With" ] = list.fireWith;

+		});

+

+		// Make the deferred a promise

+		promise.promise( deferred );

+

+		// Call given func if any

+		if ( func ) {

+			func.call( deferred, deferred );

+		}

+

+		// All done!

+		return deferred;

+	},

+

+	// Deferred helper

+	when: function( subordinate /* , ..., subordinateN */ ) {

+		var i = 0,

+			resolveValues = core_slice.call( arguments ),

+			length = resolveValues.length,

+

+			// the count of uncompleted subordinates

+			remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,

+

+			// the master Deferred. If resolveValues consist of only a single Deferred, just use that.

+			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),

+

+			// Update function for both resolve and progress values

+			updateFunc = function( i, contexts, values ) {

+				return function( value ) {

+					contexts[ i ] = this;

+					values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;

+					if( values === progressValues ) {

+						deferred.notifyWith( contexts, values );

+					} else if ( !( --remaining ) ) {

+						deferred.resolveWith( contexts, values );

+					}

+				};

+			},

+

+			progressValues, progressContexts, resolveContexts;

+

+		// add listeners to Deferred subordinates; treat others as resolved

+		if ( length > 1 ) {

+			progressValues = new Array( length );

+			progressContexts = new Array( length );

+			resolveContexts = new Array( length );

+			for ( ; i < length; i++ ) {

+				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {

+					resolveValues[ i ].promise()

+						.done( updateFunc( i, resolveContexts, resolveValues ) )

+						.fail( deferred.reject )

+						.progress( updateFunc( i, progressContexts, progressValues ) );

+				} else {

+					--remaining;

+				}

+			}

+		}

+

+		// if we're not waiting on anything, resolve the master

+		if ( !remaining ) {

+			deferred.resolveWith( resolveContexts, resolveValues );

+		}

+

+		return deferred.promise();

+	}

+});

+jQuery.support = (function( support ) {

+

+	var all, a, input, select, fragment, opt, eventName, isSupported, i,

+		div = document.createElement("div");

+

+	// Setup

+	div.setAttribute( "className", "t" );

+	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";

+

+	// Finish early in limited (non-browser) environments

+	all = div.getElementsByTagName("*") || [];

+	a = div.getElementsByTagName("a")[ 0 ];

+	if ( !a || !a.style || !all.length ) {

+		return support;

+	}

+

+	// First batch of tests

+	select = document.createElement("select");

+	opt = select.appendChild( document.createElement("option") );

+	input = div.getElementsByTagName("input")[ 0 ];

+

+	a.style.cssText = "top:1px;float:left;opacity:.5";

+

+	// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)

+	support.getSetAttribute = div.className !== "t";

+

+	// IE strips leading whitespace when .innerHTML is used

+	support.leadingWhitespace = div.firstChild.nodeType === 3;

+

+	// Make sure that tbody elements aren't automatically inserted

+	// IE will insert them into empty tables

+	support.tbody = !div.getElementsByTagName("tbody").length;

+

+	// Make sure that link elements get serialized correctly by innerHTML

+	// This requires a wrapper element in IE

+	support.htmlSerialize = !!div.getElementsByTagName("link").length;

+

+	// Get the style information from getAttribute

+	// (IE uses .cssText instead)

+	support.style = /top/.test( a.getAttribute("style") );

+

+	// Make sure that URLs aren't manipulated

+	// (IE normalizes it by default)

+	support.hrefNormalized = a.getAttribute("href") === "/a";

+

+	// Make sure that element opacity exists

+	// (IE uses filter instead)

+	// Use a regex to work around a WebKit issue. See #5145

+	support.opacity = /^0.5/.test( a.style.opacity );

+

+	// Verify style float existence

+	// (IE uses styleFloat instead of cssFloat)

+	support.cssFloat = !!a.style.cssFloat;

+

+	// Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)

+	support.checkOn = !!input.value;

+

+	// Make sure that a selected-by-default option has a working selected property.

+	// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)

+	support.optSelected = opt.selected;

+

+	// Tests for enctype support on a form (#6743)

+	support.enctype = !!document.createElement("form").enctype;

+

+	// Makes sure cloning an html5 element does not cause problems

+	// Where outerHTML is undefined, this still works

+	support.html5Clone = document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>";

+

+	// Will be defined later

+	support.inlineBlockNeedsLayout = false;

+	support.shrinkWrapBlocks = false;

+	support.pixelPosition = false;

+	support.deleteExpando = true;

+	support.noCloneEvent = true;

+	support.reliableMarginRight = true;

+	support.boxSizingReliable = true;

+

+	// Make sure checked status is properly cloned

+	input.checked = true;

+	support.noCloneChecked = input.cloneNode( true ).checked;

+

+	// Make sure that the options inside disabled selects aren't marked as disabled

+	// (WebKit marks them as disabled)

+	select.disabled = true;

+	support.optDisabled = !opt.disabled;

+

+	// Support: IE<9

+	try {

+		delete div.test;

+	} catch( e ) {

+		support.deleteExpando = false;

+	}

+

+	// Check if we can trust getAttribute("value")

+	input = document.createElement("input");

+	input.setAttribute( "value", "" );

+	support.input = input.getAttribute( "value" ) === "";

+

+	// Check if an input maintains its value after becoming a radio

+	input.value = "t";

+	input.setAttribute( "type", "radio" );

+	support.radioValue = input.value === "t";

+

+	// #11217 - WebKit loses check when the name is after the checked attribute

+	input.setAttribute( "checked", "t" );

+	input.setAttribute( "name", "t" );

+

+	fragment = document.createDocumentFragment();

+	fragment.appendChild( input );

+

+	// Check if a disconnected checkbox will retain its checked

+	// value of true after appended to the DOM (IE6/7)

+	support.appendChecked = input.checked;

+

+	// WebKit doesn't clone checked state correctly in fragments

+	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;

+

+	// Support: IE<9

+	// Opera does not clone events (and typeof div.attachEvent === undefined).

+	// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()

+	if ( div.attachEvent ) {

+		div.attachEvent( "onclick", function() {

+			support.noCloneEvent = false;

+		});

+

+		div.cloneNode( true ).click();

+	}

+

+	// Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)

+	// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)

+	for ( i in { submit: true, change: true, focusin: true }) {

+		div.setAttribute( eventName = "on" + i, "t" );

+

+		support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false;

+	}

+

+	div.style.backgroundClip = "content-box";

+	div.cloneNode( true ).style.backgroundClip = "";

+	support.clearCloneStyle = div.style.backgroundClip === "content-box";

+

+	// Support: IE<9

+	// Iteration over object's inherited properties before its own.

+	for ( i in jQuery( support ) ) {

+		break;

+	}

+	support.ownLast = i !== "0";

+

+	// Run tests that need a body at doc ready

+	jQuery(function() {

+		var container, marginDiv, tds,

+			divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",

+			body = document.getElementsByTagName("body")[0];

+

+		if ( !body ) {

+			// Return for frameset docs that don't have a body

+			return;

+		}

+

+		container = document.createElement("div");

+		container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";

+

+		body.appendChild( container ).appendChild( div );

+

+		// Support: IE8

+		// Check if table cells still have offsetWidth/Height when they are set

+		// to display:none and there are still other visible table cells in a

+		// table row; if so, offsetWidth/Height are not reliable for use when

+		// determining if an element has been hidden directly using

+		// display:none (it is still safe to use offsets if a parent element is

+		// hidden; don safety goggles and see bug #4512 for more information).

+		div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";

+		tds = div.getElementsByTagName("td");

+		tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";

+		isSupported = ( tds[ 0 ].offsetHeight === 0 );

+

+		tds[ 0 ].style.display = "";

+		tds[ 1 ].style.display = "none";

+

+		// Support: IE8

+		// Check if empty table cells still have offsetWidth/Height

+		support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );

+

+		// Check box-sizing and margin behavior.

+		div.innerHTML = "";

+		div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";

+

+		// Workaround failing boxSizing test due to offsetWidth returning wrong value

+		// with some non-1 values of body zoom, ticket #13543

+		jQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() {

+			support.boxSizing = div.offsetWidth === 4;

+		});

+

+		// Use window.getComputedStyle because jsdom on node.js will break without it.

+		if ( window.getComputedStyle ) {

+			support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";

+			support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";

+

+			// Check if div with explicit width and no margin-right incorrectly

+			// gets computed margin-right based on width of container. (#3333)

+			// Fails in WebKit before Feb 2011 nightlies

+			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right

+			marginDiv = div.appendChild( document.createElement("div") );

+			marginDiv.style.cssText = div.style.cssText = divReset;

+			marginDiv.style.marginRight = marginDiv.style.width = "0";

+			div.style.width = "1px";

+

+			support.reliableMarginRight =

+				!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );

+		}

+

+		if ( typeof div.style.zoom !== core_strundefined ) {

+			// Support: IE<8

+			// Check if natively block-level elements act like inline-block

+			// elements when setting their display to 'inline' and giving

+			// them layout

+			div.innerHTML = "";

+			div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";

+			support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );

+

+			// Support: IE6

+			// Check if elements with layout shrink-wrap their children

+			div.style.display = "block";

+			div.innerHTML = "<div></div>";

+			div.firstChild.style.width = "5px";

+			support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );

+

+			if ( support.inlineBlockNeedsLayout ) {

+				// Prevent IE 6 from affecting layout for positioned elements #11048

+				// Prevent IE from shrinking the body in IE 7 mode #12869

+				// Support: IE<8

+				body.style.zoom = 1;

+			}

+		}

+

+		body.removeChild( container );

+

+		// Null elements to avoid leaks in IE

+		container = div = tds = marginDiv = null;

+	});

+

+	// Null elements to avoid leaks in IE

+	all = select = fragment = opt = a = input = null;

+

+	return support;

+})({});

+

+var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,

+	rmultiDash = /([A-Z])/g;

+

+function internalData( elem, name, data, pvt /* Internal Use Only */ ){

+	if ( !jQuery.acceptData( elem ) ) {

+		return;

+	}

+

+	var ret, thisCache,

+		internalKey = jQuery.expando,

+

+		// We have to handle DOM nodes and JS objects differently because IE6-7

+		// can't GC object references properly across the DOM-JS boundary

+		isNode = elem.nodeType,

+

+		// Only DOM nodes need the global jQuery cache; JS object data is

+		// attached directly to the object so GC can occur automatically

+		cache = isNode ? jQuery.cache : elem,

+

+		// Only defining an ID for JS objects if its cache already exists allows

+		// the code to shortcut on the same path as a DOM node with no cache

+		id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;

+

+	// Avoid doing any more work than we need to when trying to get data on an

+	// object that has no data at all

+	if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) {

+		return;

+	}

+

+	if ( !id ) {

+		// Only DOM nodes need a new unique ID for each element since their data

+		// ends up in the global cache

+		if ( isNode ) {

+			id = elem[ internalKey ] = core_deletedIds.pop() || jQuery.guid++;

+		} else {

+			id = internalKey;

+		}

+	}

+

+	if ( !cache[ id ] ) {

+		// Avoid exposing jQuery metadata on plain JS objects when the object

+		// is serialized using JSON.stringify

+		cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };

+	}

+

+	// An object can be passed to jQuery.data instead of a key/value pair; this gets

+	// shallow copied over onto the existing cache

+	if ( typeof name === "object" || typeof name === "function" ) {

+		if ( pvt ) {

+			cache[ id ] = jQuery.extend( cache[ id ], name );

+		} else {

+			cache[ id ].data = jQuery.extend( cache[ id ].data, name );

+		}

+	}

+

+	thisCache = cache[ id ];

+

+	// jQuery data() is stored in a separate object inside the object's internal data

+	// cache in order to avoid key collisions between internal data and user-defined

+	// data.

+	if ( !pvt ) {

+		if ( !thisCache.data ) {

+			thisCache.data = {};

+		}

+

+		thisCache = thisCache.data;

+	}

+

+	if ( data !== undefined ) {

+		thisCache[ jQuery.camelCase( name ) ] = data;

+	}

+

+	// Check for both converted-to-camel and non-converted data property names

+	// If a data property was specified

+	if ( typeof name === "string" ) {

+

+		// First Try to find as-is property data

+		ret = thisCache[ name ];

+

+		// Test for null|undefined property data

+		if ( ret == null ) {

+

+			// Try to find the camelCased property

+			ret = thisCache[ jQuery.camelCase( name ) ];

+		}

+	} else {

+		ret = thisCache;

+	}

+

+	return ret;

+}

+

+function internalRemoveData( elem, name, pvt ) {

+	if ( !jQuery.acceptData( elem ) ) {

+		return;

+	}

+

+	var thisCache, i,

+		isNode = elem.nodeType,

+

+		// See jQuery.data for more information

+		cache = isNode ? jQuery.cache : elem,

+		id = isNode ? elem[ jQuery.expando ] : jQuery.expando;

+

+	// If there is already no cache entry for this object, there is no

+	// purpose in continuing

+	if ( !cache[ id ] ) {

+		return;

+	}

+

+	if ( name ) {

+

+		thisCache = pvt ? cache[ id ] : cache[ id ].data;

+

+		if ( thisCache ) {

+

+			// Support array or space separated string names for data keys

+			if ( !jQuery.isArray( name ) ) {

+

+				// try the string as a key before any manipulation

+				if ( name in thisCache ) {

+					name = [ name ];

+				} else {

+

+					// split the camel cased version by spaces unless a key with the spaces exists

+					name = jQuery.camelCase( name );

+					if ( name in thisCache ) {

+						name = [ name ];

+					} else {

+						name = name.split(" ");

+					}

+				}

+			} else {

+				// If "name" is an array of keys...

+				// When data is initially created, via ("key", "val") signature,

+				// keys will be converted to camelCase.

+				// Since there is no way to tell _how_ a key was added, remove

+				// both plain key and camelCase key. #12786

+				// This will only penalize the array argument path.

+				name = name.concat( jQuery.map( name, jQuery.camelCase ) );

+			}

+

+			i = name.length;

+			while ( i-- ) {

+				delete thisCache[ name[i] ];

+			}

+

+			// If there is no data left in the cache, we want to continue

+			// and let the cache object itself get destroyed

+			if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {

+				return;

+			}

+		}

+	}

+

+	// See jQuery.data for more information

+	if ( !pvt ) {

+		delete cache[ id ].data;

+

+		// Don't destroy the parent cache unless the internal data object

+		// had been the only thing left in it

+		if ( !isEmptyDataObject( cache[ id ] ) ) {

+			return;

+		}

+	}

+

+	// Destroy the cache

+	if ( isNode ) {

+		jQuery.cleanData( [ elem ], true );

+

+	// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)

+	/* jshint eqeqeq: false */

+	} else if ( jQuery.support.deleteExpando || cache != cache.window ) {

+		/* jshint eqeqeq: true */

+		delete cache[ id ];

+

+	// When all else fails, null

+	} else {

+		cache[ id ] = null;

+	}

+}

+

+jQuery.extend({

+	cache: {},

+

+	// The following elements throw uncatchable exceptions if you

+	// attempt to add expando properties to them.

+	noData: {

+		"applet": true,

+		"embed": true,

+		// Ban all objects except for Flash (which handle expandos)

+		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"

+	},

+

+	hasData: function( elem ) {

+		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];

+		return !!elem && !isEmptyDataObject( elem );

+	},

+

+	data: function( elem, name, data ) {

+		return internalData( elem, name, data );

+	},

+

+	removeData: function( elem, name ) {

+		return internalRemoveData( elem, name );

+	},

+

+	// For internal use only.

+	_data: function( elem, name, data ) {

+		return internalData( elem, name, data, true );

+	},

+

+	_removeData: function( elem, name ) {

+		return internalRemoveData( elem, name, true );

+	},

+

+	// A method for determining if a DOM node can handle the data expando

+	acceptData: function( elem ) {

+		// Do not set data on non-element because it will not be cleared (#8335).

+		if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {

+			return false;

+		}

+

+		var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];

+

+		// nodes accept data unless otherwise specified; rejection can be conditional

+		return !noData || noData !== true && elem.getAttribute("classid") === noData;

+	}

+});

+

+jQuery.fn.extend({

+	data: function( key, value ) {

+		var attrs, name,

+			data = null,

+			i = 0,

+			elem = this[0];

+

+		// Special expections of .data basically thwart jQuery.access,

+		// so implement the relevant behavior ourselves

+

+		// Gets all values

+		if ( key === undefined ) {

+			if ( this.length ) {

+				data = jQuery.data( elem );

+

+				if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {

+					attrs = elem.attributes;

+					for ( ; i < attrs.length; i++ ) {

+						name = attrs[i].name;

+

+						if ( name.indexOf("data-") === 0 ) {

+							name = jQuery.camelCase( name.slice(5) );

+

+							dataAttr( elem, name, data[ name ] );

+						}

+					}

+					jQuery._data( elem, "parsedAttrs", true );

+				}

+			}

+

+			return data;

+		}

+

+		// Sets multiple values

+		if ( typeof key === "object" ) {

+			return this.each(function() {

+				jQuery.data( this, key );

+			});

+		}

+

+		return arguments.length > 1 ?

+

+			// Sets one value

+			this.each(function() {

+				jQuery.data( this, key, value );

+			}) :

+

+			// Gets one value

+			// Try to fetch any internally stored data first

+			elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;

+	},

+

+	removeData: function( key ) {

+		return this.each(function() {

+			jQuery.removeData( this, key );

+		});

+	}

+});

+

+function dataAttr( elem, key, data ) {

+	// If nothing was found internally, try to fetch any

+	// data from the HTML5 data-* attribute

+	if ( data === undefined && elem.nodeType === 1 ) {

+

+		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();

+

+		data = elem.getAttribute( name );

+

+		if ( typeof data === "string" ) {

+			try {

+				data = data === "true" ? true :

+					data === "false" ? false :

+					data === "null" ? null :

+					// Only convert to a number if it doesn't change the string

+					+data + "" === data ? +data :

+					rbrace.test( data ) ? jQuery.parseJSON( data ) :

+						data;

+			} catch( e ) {}

+

+			// Make sure we set the data so it isn't changed later

+			jQuery.data( elem, key, data );

+

+		} else {

+			data = undefined;

+		}

+	}

+

+	return data;

+}

+

+// checks a cache object for emptiness

+function isEmptyDataObject( obj ) {

+	var name;

+	for ( name in obj ) {

+

+		// if the public data object is empty, the private is still empty

+		if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {

+			continue;

+		}

+		if ( name !== "toJSON" ) {

+			return false;

+		}

+	}

+

+	return true;

+}

+jQuery.extend({

+	queue: function( elem, type, data ) {

+		var queue;

+

+		if ( elem ) {

+			type = ( type || "fx" ) + "queue";

+			queue = jQuery._data( elem, type );

+

+			// Speed up dequeue by getting out quickly if this is just a lookup

+			if ( data ) {

+				if ( !queue || jQuery.isArray(data) ) {

+					queue = jQuery._data( elem, type, jQuery.makeArray(data) );

+				} else {

+					queue.push( data );

+				}

+			}

+			return queue || [];

+		}

+	},

+

+	dequeue: function( elem, type ) {

+		type = type || "fx";

+

+		var queue = jQuery.queue( elem, type ),

+			startLength = queue.length,

+			fn = queue.shift(),

+			hooks = jQuery._queueHooks( elem, type ),

+			next = function() {

+				jQuery.dequeue( elem, type );

+			};

+

+		// If the fx queue is dequeued, always remove the progress sentinel

+		if ( fn === "inprogress" ) {

+			fn = queue.shift();

+			startLength--;

+		}

+

+		if ( fn ) {

+

+			// Add a progress sentinel to prevent the fx queue from being

+			// automatically dequeued

+			if ( type === "fx" ) {

+				queue.unshift( "inprogress" );

+			}

+

+			// clear up the last queue stop function

+			delete hooks.stop;

+			fn.call( elem, next, hooks );

+		}

+

+		if ( !startLength && hooks ) {

+			hooks.empty.fire();

+		}

+	},

+

+	// not intended for public consumption - generates a queueHooks object, or returns the current one

+	_queueHooks: function( elem, type ) {

+		var key = type + "queueHooks";

+		return jQuery._data( elem, key ) || jQuery._data( elem, key, {

+			empty: jQuery.Callbacks("once memory").add(function() {

+				jQuery._removeData( elem, type + "queue" );

+				jQuery._removeData( elem, key );

+			})

+		});

+	}

+});

+

+jQuery.fn.extend({

+	queue: function( type, data ) {

+		var setter = 2;

+

+		if ( typeof type !== "string" ) {

+			data = type;

+			type = "fx";

+			setter--;

+		}

+

+		if ( arguments.length < setter ) {

+			return jQuery.queue( this[0], type );

+		}

+

+		return data === undefined ?

+			this :

+			this.each(function() {

+				var queue = jQuery.queue( this, type, data );

+

+				// ensure a hooks for this queue

+				jQuery._queueHooks( this, type );

+

+				if ( type === "fx" && queue[0] !== "inprogress" ) {

+					jQuery.dequeue( this, type );

+				}

+			});

+	},

+	dequeue: function( type ) {

+		return this.each(function() {

+			jQuery.dequeue( this, type );

+		});

+	},

+	// Based off of the plugin by Clint Helfers, with permission.

+	// http://blindsignals.com/index.php/2009/07/jquery-delay/

+	delay: function( time, type ) {

+		time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;

+		type = type || "fx";

+

+		return this.queue( type, function( next, hooks ) {

+			var timeout = setTimeout( next, time );

+			hooks.stop = function() {

+				clearTimeout( timeout );

+			};

+		});

+	},

+	clearQueue: function( type ) {

+		return this.queue( type || "fx", [] );

+	},

+	// Get a promise resolved when queues of a certain type

+	// are emptied (fx is the type by default)

+	promise: function( type, obj ) {

+		var tmp,

+			count = 1,

+			defer = jQuery.Deferred(),

+			elements = this,

+			i = this.length,

+			resolve = function() {

+				if ( !( --count ) ) {

+					defer.resolveWith( elements, [ elements ] );

+				}

+			};

+

+		if ( typeof type !== "string" ) {

+			obj = type;

+			type = undefined;

+		}

+		type = type || "fx";

+

+		while( i-- ) {

+			tmp = jQuery._data( elements[ i ], type + "queueHooks" );

+			if ( tmp && tmp.empty ) {

+				count++;

+				tmp.empty.add( resolve );

+			}

+		}

+		resolve();

+		return defer.promise( obj );

+	}

+});

+var nodeHook, boolHook,

+	rclass = /[\t\r\n\f]/g,

+	rreturn = /\r/g,

+	rfocusable = /^(?:input|select|textarea|button|object)$/i,

+	rclickable = /^(?:a|area)$/i,

+	ruseDefault = /^(?:checked|selected)$/i,

+	getSetAttribute = jQuery.support.getSetAttribute,

+	getSetInput = jQuery.support.input;

+

+jQuery.fn.extend({

+	attr: function( name, value ) {

+		return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );

+	},

+

+	removeAttr: function( name ) {

+		return this.each(function() {

+			jQuery.removeAttr( this, name );

+		});

+	},

+

+	prop: function( name, value ) {

+		return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );

+	},

+

+	removeProp: function( name ) {

+		name = jQuery.propFix[ name ] || name;

+		return this.each(function() {

+			// try/catch handles cases where IE balks (such as removing a property on window)

+			try {

+				this[ name ] = undefined;

+				delete this[ name ];

+			} catch( e ) {}

+		});

+	},

+

+	addClass: function( value ) {

+		var classes, elem, cur, clazz, j,

+			i = 0,

+			len = this.length,

+			proceed = typeof value === "string" && value;

+

+		if ( jQuery.isFunction( value ) ) {

+			return this.each(function( j ) {

+				jQuery( this ).addClass( value.call( this, j, this.className ) );

+			});

+		}

+

+		if ( proceed ) {

+			// The disjunction here is for better compressibility (see removeClass)

+			classes = ( value || "" ).match( core_rnotwhite ) || [];

+

+			for ( ; i < len; i++ ) {

+				elem = this[ i ];

+				cur = elem.nodeType === 1 && ( elem.className ?

+					( " " + elem.className + " " ).replace( rclass, " " ) :

+					" "

+				);

+

+				if ( cur ) {

+					j = 0;

+					while ( (clazz = classes[j++]) ) {

+						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {

+							cur += clazz + " ";

+						}

+					}

+					elem.className = jQuery.trim( cur );

+

+				}

+			}

+		}

+

+		return this;

+	},

+

+	removeClass: function( value ) {

+		var classes, elem, cur, clazz, j,

+			i = 0,

+			len = this.length,

+			proceed = arguments.length === 0 || typeof value === "string" && value;

+

+		if ( jQuery.isFunction( value ) ) {

+			return this.each(function( j ) {

+				jQuery( this ).removeClass( value.call( this, j, this.className ) );

+			});

+		}

+		if ( proceed ) {

+			classes = ( value || "" ).match( core_rnotwhite ) || [];

+

+			for ( ; i < len; i++ ) {

+				elem = this[ i ];

+				// This expression is here for better compressibility (see addClass)

+				cur = elem.nodeType === 1 && ( elem.className ?

+					( " " + elem.className + " " ).replace( rclass, " " ) :

+					""

+				);

+

+				if ( cur ) {

+					j = 0;

+					while ( (clazz = classes[j++]) ) {

+						// Remove *all* instances

+						while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {

+							cur = cur.replace( " " + clazz + " ", " " );

+						}

+					}

+					elem.className = value ? jQuery.trim( cur ) : "";

+				}

+			}

+		}

+

+		return this;

+	},

+

+	toggleClass: function( value, stateVal ) {

+		var type = typeof value;

+

+		if ( typeof stateVal === "boolean" && type === "string" ) {

+			return stateVal ? this.addClass( value ) : this.removeClass( value );

+		}

+

+		if ( jQuery.isFunction( value ) ) {

+			return this.each(function( i ) {

+				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );

+			});

+		}

+

+		return this.each(function() {

+			if ( type === "string" ) {

+				// toggle individual class names

+				var className,

+					i = 0,

+					self = jQuery( this ),

+					classNames = value.match( core_rnotwhite ) || [];

+

+				while ( (className = classNames[ i++ ]) ) {

+					// check each className given, space separated list

+					if ( self.hasClass( className ) ) {

+						self.removeClass( className );

+					} else {

+						self.addClass( className );

+					}

+				}

+

+			// Toggle whole class name

+			} else if ( type === core_strundefined || type === "boolean" ) {

+				if ( this.className ) {

+					// store className if set

+					jQuery._data( this, "__className__", this.className );

+				}

+

+				// If the element has a class name or if we're passed "false",

+				// then remove the whole classname (if there was one, the above saved it).

+				// Otherwise bring back whatever was previously saved (if anything),

+				// falling back to the empty string if nothing was stored.

+				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";

+			}

+		});

+	},

+

+	hasClass: function( selector ) {

+		var className = " " + selector + " ",

+			i = 0,

+			l = this.length;

+		for ( ; i < l; i++ ) {

+			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {

+				return true;

+			}

+		}

+

+		return false;

+	},

+

+	val: function( value ) {

+		var ret, hooks, isFunction,

+			elem = this[0];

+

+		if ( !arguments.length ) {

+			if ( elem ) {

+				hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];

+

+				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {

+					return ret;

+				}

+

+				ret = elem.value;

+

+				return typeof ret === "string" ?

+					// handle most common string cases

+					ret.replace(rreturn, "") :

+					// handle cases where value is null/undef or number

+					ret == null ? "" : ret;

+			}

+

+			return;

+		}

+

+		isFunction = jQuery.isFunction( value );

+

+		return this.each(function( i ) {

+			var val;

+

+			if ( this.nodeType !== 1 ) {

+				return;

+			}

+

+			if ( isFunction ) {

+				val = value.call( this, i, jQuery( this ).val() );

+			} else {

+				val = value;

+			}

+

+			// Treat null/undefined as ""; convert numbers to string

+			if ( val == null ) {

+				val = "";

+			} else if ( typeof val === "number" ) {

+				val += "";

+			} else if ( jQuery.isArray( val ) ) {

+				val = jQuery.map(val, function ( value ) {

+					return value == null ? "" : value + "";

+				});

+			}

+

+			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];

+

+			// If set returns undefined, fall back to normal setting

+			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {

+				this.value = val;

+			}

+		});

+	}

+});

+

+jQuery.extend({

+	valHooks: {

+		option: {

+			get: function( elem ) {

+				// Use proper attribute retrieval(#6932, #12072)

+				var val = jQuery.find.attr( elem, "value" );

+				return val != null ?

+					val :

+					elem.text;

+			}

+		},

+		select: {

+			get: function( elem ) {

+				var value, option,

+					options = elem.options,

+					index = elem.selectedIndex,

+					one = elem.type === "select-one" || index < 0,

+					values = one ? null : [],

+					max = one ? index + 1 : options.length,

+					i = index < 0 ?

+						max :

+						one ? index : 0;

+

+				// Loop through all the selected options

+				for ( ; i < max; i++ ) {

+					option = options[ i ];

+

+					// oldIE doesn't update selected after form reset (#2551)

+					if ( ( option.selected || i === index ) &&

+							// Don't return options that are disabled or in a disabled optgroup

+							( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&

+							( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {

+

+						// Get the specific value for the option

+						value = jQuery( option ).val();

+

+						// We don't need an array for one selects

+						if ( one ) {

+							return value;

+						}

+

+						// Multi-Selects return an array

+						values.push( value );

+					}

+				}

+

+				return values;

+			},

+

+			set: function( elem, value ) {

+				var optionSet, option,

+					options = elem.options,

+					values = jQuery.makeArray( value ),

+					i = options.length;

+

+				while ( i-- ) {

+					option = options[ i ];

+					if ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) {

+						optionSet = true;

+					}

+				}

+

+				// force browsers to behave consistently when non-matching value is set

+				if ( !optionSet ) {

+					elem.selectedIndex = -1;

+				}

+				return values;

+			}

+		}

+	},

+

+	attr: function( elem, name, value ) {

+		var hooks, ret,

+			nType = elem.nodeType;

+

+		// don't get/set attributes on text, comment and attribute nodes

+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {

+			return;

+		}

+

+		// Fallback to prop when attributes are not supported

+		if ( typeof elem.getAttribute === core_strundefined ) {

+			return jQuery.prop( elem, name, value );

+		}

+

+		// All attributes are lowercase

+		// Grab necessary hook if one is defined

+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {

+			name = name.toLowerCase();

+			hooks = jQuery.attrHooks[ name ] ||

+				( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );

+		}

+

+		if ( value !== undefined ) {

+

+			if ( value === null ) {

+				jQuery.removeAttr( elem, name );

+

+			} else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {

+				return ret;

+

+			} else {

+				elem.setAttribute( name, value + "" );

+				return value;

+			}

+

+		} else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {

+			return ret;

+

+		} else {

+			ret = jQuery.find.attr( elem, name );

+

+			// Non-existent attributes return null, we normalize to undefined

+			return ret == null ?

+				undefined :

+				ret;

+		}

+	},

+

+	removeAttr: function( elem, value ) {

+		var name, propName,

+			i = 0,

+			attrNames = value && value.match( core_rnotwhite );

+

+		if ( attrNames && elem.nodeType === 1 ) {

+			while ( (name = attrNames[i++]) ) {

+				propName = jQuery.propFix[ name ] || name;

+

+				// Boolean attributes get special treatment (#10870)

+				if ( jQuery.expr.match.bool.test( name ) ) {

+					// Set corresponding property to false

+					if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {

+						elem[ propName ] = false;

+					// Support: IE<9

+					// Also clear defaultChecked/defaultSelected (if appropriate)

+					} else {

+						elem[ jQuery.camelCase( "default-" + name ) ] =

+							elem[ propName ] = false;

+					}

+

+				// See #9699 for explanation of this approach (setting first, then removal)

+				} else {

+					jQuery.attr( elem, name, "" );

+				}

+

+				elem.removeAttribute( getSetAttribute ? name : propName );

+			}

+		}

+	},

+

+	attrHooks: {

+		type: {

+			set: function( elem, value ) {

+				if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {

+					// Setting the type on a radio button after the value resets the value in IE6-9

+					// Reset value to default in case type is set after value during creation

+					var val = elem.value;

+					elem.setAttribute( "type", value );

+					if ( val ) {

+						elem.value = val;

+					}

+					return value;

+				}

+			}

+		}

+	},

+

+	propFix: {

+		"for": "htmlFor",

+		"class": "className"

+	},

+

+	prop: function( elem, name, value ) {

+		var ret, hooks, notxml,

+			nType = elem.nodeType;

+

+		// don't get/set properties on text, comment and attribute nodes

+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {

+			return;

+		}

+

+		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );

+

+		if ( notxml ) {

+			// Fix name and attach hooks

+			name = jQuery.propFix[ name ] || name;

+			hooks = jQuery.propHooks[ name ];

+		}

+

+		if ( value !== undefined ) {

+			return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?

+				ret :

+				( elem[ name ] = value );

+

+		} else {

+			return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?

+				ret :

+				elem[ name ];

+		}

+	},

+

+	propHooks: {

+		tabIndex: {

+			get: function( elem ) {

+				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set

+				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/

+				// Use proper attribute retrieval(#12072)

+				var tabindex = jQuery.find.attr( elem, "tabindex" );

+

+				return tabindex ?

+					parseInt( tabindex, 10 ) :

+					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?

+						0 :

+						-1;

+			}

+		}

+	}

+});

+

+// Hooks for boolean attributes

+boolHook = {

+	set: function( elem, value, name ) {

+		if ( value === false ) {

+			// Remove boolean attributes when set to false

+			jQuery.removeAttr( elem, name );

+		} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {

+			// IE<8 needs the *property* name

+			elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );

+

+		// Use defaultChecked and defaultSelected for oldIE

+		} else {

+			elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;

+		}

+

+		return name;

+	}

+};

+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {

+	var getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr;

+

+	jQuery.expr.attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?

+		function( elem, name, isXML ) {

+			var fn = jQuery.expr.attrHandle[ name ],

+				ret = isXML ?

+					undefined :

+					/* jshint eqeqeq: false */

+					(jQuery.expr.attrHandle[ name ] = undefined) !=

+						getter( elem, name, isXML ) ?

+

+						name.toLowerCase() :

+						null;

+			jQuery.expr.attrHandle[ name ] = fn;

+			return ret;

+		} :

+		function( elem, name, isXML ) {

+			return isXML ?

+				undefined :

+				elem[ jQuery.camelCase( "default-" + name ) ] ?

+					name.toLowerCase() :

+					null;

+		};

+});

+

+// fix oldIE attroperties

+if ( !getSetInput || !getSetAttribute ) {

+	jQuery.attrHooks.value = {

+		set: function( elem, value, name ) {

+			if ( jQuery.nodeName( elem, "input" ) ) {

+				// Does not return so that setAttribute is also used

+				elem.defaultValue = value;

+			} else {

+				// Use nodeHook if defined (#1954); otherwise setAttribute is fine

+				return nodeHook && nodeHook.set( elem, value, name );

+			}

+		}

+	};

+}

+

+// IE6/7 do not support getting/setting some attributes with get/setAttribute

+if ( !getSetAttribute ) {

+

+	// Use this for any attribute in IE6/7

+	// This fixes almost every IE6/7 issue

+	nodeHook = {

+		set: function( elem, value, name ) {

+			// Set the existing or create a new attribute node

+			var ret = elem.getAttributeNode( name );

+			if ( !ret ) {

+				elem.setAttributeNode(

+					(ret = elem.ownerDocument.createAttribute( name ))

+				);

+			}

+

+			ret.value = value += "";

+

+			// Break association with cloned elements by also using setAttribute (#9646)

+			return name === "value" || value === elem.getAttribute( name ) ?

+				value :

+				undefined;

+		}

+	};

+	jQuery.expr.attrHandle.id = jQuery.expr.attrHandle.name = jQuery.expr.attrHandle.coords =

+		// Some attributes are constructed with empty-string values when not defined

+		function( elem, name, isXML ) {

+			var ret;

+			return isXML ?

+				undefined :

+				(ret = elem.getAttributeNode( name )) && ret.value !== "" ?

+					ret.value :

+					null;

+		};

+	jQuery.valHooks.button = {

+		get: function( elem, name ) {

+			var ret = elem.getAttributeNode( name );

+			return ret && ret.specified ?

+				ret.value :

+				undefined;

+		},

+		set: nodeHook.set

+	};

+

+	// Set contenteditable to false on removals(#10429)

+	// Setting to empty string throws an error as an invalid value

+	jQuery.attrHooks.contenteditable = {

+		set: function( elem, value, name ) {

+			nodeHook.set( elem, value === "" ? false : value, name );

+		}

+	};

+

+	// Set width and height to auto instead of 0 on empty string( Bug #8150 )

+	// This is for removals

+	jQuery.each([ "width", "height" ], function( i, name ) {

+		jQuery.attrHooks[ name ] = {

+			set: function( elem, value ) {

+				if ( value === "" ) {

+					elem.setAttribute( name, "auto" );

+					return value;

+				}

+			}

+		};

+	});

+}

+

+

+// Some attributes require a special call on IE

+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx

+if ( !jQuery.support.hrefNormalized ) {

+	// href/src property should get the full normalized URL (#10299/#12915)

+	jQuery.each([ "href", "src" ], function( i, name ) {

+		jQuery.propHooks[ name ] = {

+			get: function( elem ) {

+				return elem.getAttribute( name, 4 );

+			}

+		};

+	});

+}

+

+if ( !jQuery.support.style ) {

+	jQuery.attrHooks.style = {

+		get: function( elem ) {

+			// Return undefined in the case of empty string

+			// Note: IE uppercases css property names, but if we were to .toLowerCase()

+			// .cssText, that would destroy case senstitivity in URL's, like in "background"

+			return elem.style.cssText || undefined;

+		},

+		set: function( elem, value ) {

+			return ( elem.style.cssText = value + "" );

+		}

+	};

+}

+

+// Safari mis-reports the default selected property of an option

+// Accessing the parent's selectedIndex property fixes it

+if ( !jQuery.support.optSelected ) {

+	jQuery.propHooks.selected = {

+		get: function( elem ) {

+			var parent = elem.parentNode;

+

+			if ( parent ) {

+				parent.selectedIndex;

+

+				// Make sure that it also works with optgroups, see #5701

+				if ( parent.parentNode ) {

+					parent.parentNode.selectedIndex;

+				}

+			}

+			return null;

+		}

+	};

+}

+

+jQuery.each([

+	"tabIndex",

+	"readOnly",

+	"maxLength",

+	"cellSpacing",

+	"cellPadding",

+	"rowSpan",

+	"colSpan",

+	"useMap",

+	"frameBorder",

+	"contentEditable"

+], function() {

+	jQuery.propFix[ this.toLowerCase() ] = this;

+});

+

+// IE6/7 call enctype encoding

+if ( !jQuery.support.enctype ) {

+	jQuery.propFix.enctype = "encoding";

+}

+

+// Radios and checkboxes getter/setter

+jQuery.each([ "radio", "checkbox" ], function() {

+	jQuery.valHooks[ this ] = {

+		set: function( elem, value ) {

+			if ( jQuery.isArray( value ) ) {

+				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );

+			}

+		}

+	};

+	if ( !jQuery.support.checkOn ) {

+		jQuery.valHooks[ this ].get = function( elem ) {

+			// Support: Webkit

+			// "" is returned instead of "on" if a value isn't specified

+			return elem.getAttribute("value") === null ? "on" : elem.value;

+		};

+	}

+});

+var rformElems = /^(?:input|select|textarea)$/i,

+	rkeyEvent = /^key/,

+	rmouseEvent = /^(?:mouse|contextmenu)|click/,

+	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,

+	rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;

+

+function returnTrue() {

+	return true;

+}

+

+function returnFalse() {

+	return false;

+}

+

+function safeActiveElement() {

+	try {

+		return document.activeElement;

+	} catch ( err ) { }

+}

+

+/*

+ * Helper functions for managing events -- not part of the public interface.

+ * Props to Dean Edwards' addEvent library for many of the ideas.

+ */

+jQuery.event = {

+

+	global: {},

+

+	add: function( elem, types, handler, data, selector ) {

+		var tmp, events, t, handleObjIn,

+			special, eventHandle, handleObj,

+			handlers, type, namespaces, origType,

+			elemData = jQuery._data( elem );

+

+		// Don't attach events to noData or text/comment nodes (but allow plain objects)

+		if ( !elemData ) {

+			return;

+		}

+

+		// Caller can pass in an object of custom data in lieu of the handler

+		if ( handler.handler ) {

+			handleObjIn = handler;

+			handler = handleObjIn.handler;

+			selector = handleObjIn.selector;

+		}

+

+		// Make sure that the handler has a unique ID, used to find/remove it later

+		if ( !handler.guid ) {

+			handler.guid = jQuery.guid++;

+		}

+

+		// Init the element's event structure and main handler, if this is the first

+		if ( !(events = elemData.events) ) {

+			events = elemData.events = {};

+		}

+		if ( !(eventHandle = elemData.handle) ) {

+			eventHandle = elemData.handle = function( e ) {

+				// Discard the second event of a jQuery.event.trigger() and

+				// when an event is called after a page has unloaded

+				return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?

+					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :

+					undefined;

+			};

+			// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events

+			eventHandle.elem = elem;

+		}

+

+		// Handle multiple events separated by a space

+		types = ( types || "" ).match( core_rnotwhite ) || [""];

+		t = types.length;

+		while ( t-- ) {

+			tmp = rtypenamespace.exec( types[t] ) || [];

+			type = origType = tmp[1];

+			namespaces = ( tmp[2] || "" ).split( "." ).sort();

+

+			// There *must* be a type, no attaching namespace-only handlers

+			if ( !type ) {

+				continue;

+			}

+

+			// If event changes its type, use the special event handlers for the changed type

+			special = jQuery.event.special[ type ] || {};

+

+			// If selector defined, determine special event api type, otherwise given type

+			type = ( selector ? special.delegateType : special.bindType ) || type;

+

+			// Update special based on newly reset type

+			special = jQuery.event.special[ type ] || {};

+

+			// handleObj is passed to all event handlers

+			handleObj = jQuery.extend({

+				type: type,

+				origType: origType,

+				data: data,

+				handler: handler,

+				guid: handler.guid,

+				selector: selector,

+				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),

+				namespace: namespaces.join(".")

+			}, handleObjIn );

+

+			// Init the event handler queue if we're the first

+			if ( !(handlers = events[ type ]) ) {

+				handlers = events[ type ] = [];

+				handlers.delegateCount = 0;

+

+				// Only use addEventListener/attachEvent if the special events handler returns false

+				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {

+					// Bind the global event handler to the element

+					if ( elem.addEventListener ) {

+						elem.addEventListener( type, eventHandle, false );

+

+					} else if ( elem.attachEvent ) {

+						elem.attachEvent( "on" + type, eventHandle );

+					}

+				}

+			}

+

+			if ( special.add ) {

+				special.add.call( elem, handleObj );

+

+				if ( !handleObj.handler.guid ) {

+					handleObj.handler.guid = handler.guid;

+				}

+			}

+

+			// Add to the element's handler list, delegates in front

+			if ( selector ) {

+				handlers.splice( handlers.delegateCount++, 0, handleObj );

+			} else {

+				handlers.push( handleObj );

+			}

+

+			// Keep track of which events have ever been used, for event optimization

+			jQuery.event.global[ type ] = true;

+		}

+

+		// Nullify elem to prevent memory leaks in IE

+		elem = null;

+	},

+

+	// Detach an event or set of events from an element

+	remove: function( elem, types, handler, selector, mappedTypes ) {

+		var j, handleObj, tmp,

+			origCount, t, events,

+			special, handlers, type,

+			namespaces, origType,

+			elemData = jQuery.hasData( elem ) && jQuery._data( elem );

+

+		if ( !elemData || !(events = elemData.events) ) {

+			return;

+		}

+

+		// Once for each type.namespace in types; type may be omitted

+		types = ( types || "" ).match( core_rnotwhite ) || [""];

+		t = types.length;

+		while ( t-- ) {

+			tmp = rtypenamespace.exec( types[t] ) || [];

+			type = origType = tmp[1];

+			namespaces = ( tmp[2] || "" ).split( "." ).sort();

+

+			// Unbind all events (on this namespace, if provided) for the element

+			if ( !type ) {

+				for ( type in events ) {

+					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );

+				}

+				continue;

+			}

+

+			special = jQuery.event.special[ type ] || {};

+			type = ( selector ? special.delegateType : special.bindType ) || type;

+			handlers = events[ type ] || [];

+			tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );

+

+			// Remove matching events

+			origCount = j = handlers.length;

+			while ( j-- ) {

+				handleObj = handlers[ j ];

+

+				if ( ( mappedTypes || origType === handleObj.origType ) &&

+					( !handler || handler.guid === handleObj.guid ) &&

+					( !tmp || tmp.test( handleObj.namespace ) ) &&

+					( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {

+					handlers.splice( j, 1 );

+

+					if ( handleObj.selector ) {

+						handlers.delegateCount--;

+					}

+					if ( special.remove ) {

+						special.remove.call( elem, handleObj );

+					}

+				}

+			}

+

+			// Remove generic event handler if we removed something and no more handlers exist

+			// (avoids potential for endless recursion during removal of special event handlers)

+			if ( origCount && !handlers.length ) {

+				if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {

+					jQuery.removeEvent( elem, type, elemData.handle );

+				}

+

+				delete events[ type ];

+			}

+		}

+

+		// Remove the expando if it's no longer used

+		if ( jQuery.isEmptyObject( events ) ) {

+			delete elemData.handle;

+

+			// removeData also checks for emptiness and clears the expando if empty

+			// so use it instead of delete

+			jQuery._removeData( elem, "events" );

+		}

+	},

+

+	trigger: function( event, data, elem, onlyHandlers ) {

+		var handle, ontype, cur,

+			bubbleType, special, tmp, i,

+			eventPath = [ elem || document ],

+			type = core_hasOwn.call( event, "type" ) ? event.type : event,

+			namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];

+

+		cur = tmp = elem = elem || document;

+

+		// Don't do events on text and comment nodes

+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {

+			return;

+		}

+

+		// focus/blur morphs to focusin/out; ensure we're not firing them right now

+		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {

+			return;

+		}

+

+		if ( type.indexOf(".") >= 0 ) {

+			// Namespaced trigger; create a regexp to match event type in handle()

+			namespaces = type.split(".");

+			type = namespaces.shift();

+			namespaces.sort();

+		}

+		ontype = type.indexOf(":") < 0 && "on" + type;

+

+		// Caller can pass in a jQuery.Event object, Object, or just an event type string

+		event = event[ jQuery.expando ] ?

+			event :

+			new jQuery.Event( type, typeof event === "object" && event );

+

+		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)

+		event.isTrigger = onlyHandlers ? 2 : 3;

+		event.namespace = namespaces.join(".");

+		event.namespace_re = event.namespace ?

+			new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :

+			null;

+

+		// Clean up the event in case it is being reused

+		event.result = undefined;

+		if ( !event.target ) {

+			event.target = elem;

+		}

+

+		// Clone any incoming data and prepend the event, creating the handler arg list

+		data = data == null ?

+			[ event ] :

+			jQuery.makeArray( data, [ event ] );

+

+		// Allow special events to draw outside the lines

+		special = jQuery.event.special[ type ] || {};

+		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {

+			return;

+		}

+

+		// Determine event propagation path in advance, per W3C events spec (#9951)

+		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)

+		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {

+

+			bubbleType = special.delegateType || type;

+			if ( !rfocusMorph.test( bubbleType + type ) ) {

+				cur = cur.parentNode;

+			}

+			for ( ; cur; cur = cur.parentNode ) {

+				eventPath.push( cur );

+				tmp = cur;

+			}

+

+			// Only add window if we got to document (e.g., not plain obj or detached DOM)

+			if ( tmp === (elem.ownerDocument || document) ) {

+				eventPath.push( tmp.defaultView || tmp.parentWindow || window );

+			}

+		}

+

+		// Fire handlers on the event path

+		i = 0;

+		while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {

+

+			event.type = i > 1 ?

+				bubbleType :

+				special.bindType || type;

+

+			// jQuery handler

+			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );

+			if ( handle ) {

+				handle.apply( cur, data );

+			}

+

+			// Native handler

+			handle = ontype && cur[ ontype ];

+			if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {

+				event.preventDefault();

+			}

+		}

+		event.type = type;

+

+		// If nobody prevented the default action, do it now

+		if ( !onlyHandlers && !event.isDefaultPrevented() ) {

+

+			if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&

+				jQuery.acceptData( elem ) ) {

+

+				// Call a native DOM method on the target with the same name name as the event.

+				// Can't use an .isFunction() check here because IE6/7 fails that test.

+				// Don't do default actions on window, that's where global variables be (#6170)

+				if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {

+

+					// Don't re-trigger an onFOO event when we call its FOO() method

+					tmp = elem[ ontype ];

+

+					if ( tmp ) {

+						elem[ ontype ] = null;

+					}

+

+					// Prevent re-triggering of the same event, since we already bubbled it above

+					jQuery.event.triggered = type;

+					try {

+						elem[ type ]();

+					} catch ( e ) {

+						// IE<9 dies on focus/blur to hidden element (#1486,#12518)

+						// only reproducible on winXP IE8 native, not IE9 in IE8 mode

+					}

+					jQuery.event.triggered = undefined;

+

+					if ( tmp ) {

+						elem[ ontype ] = tmp;

+					}

+				}

+			}

+		}

+

+		return event.result;

+	},

+

+	dispatch: function( event ) {

+

+		// Make a writable jQuery.Event from the native event object

+		event = jQuery.event.fix( event );

+

+		var i, ret, handleObj, matched, j,

+			handlerQueue = [],

+			args = core_slice.call( arguments ),

+			handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],

+			special = jQuery.event.special[ event.type ] || {};

+

+		// Use the fix-ed jQuery.Event rather than the (read-only) native event

+		args[0] = event;

+		event.delegateTarget = this;

+

+		// Call the preDispatch hook for the mapped type, and let it bail if desired

+		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {

+			return;

+		}

+

+		// Determine handlers

+		handlerQueue = jQuery.event.handlers.call( this, event, handlers );

+

+		// Run delegates first; they may want to stop propagation beneath us

+		i = 0;

+		while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {

+			event.currentTarget = matched.elem;

+

+			j = 0;

+			while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {

+

+				// Triggered event must either 1) have no namespace, or

+				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).

+				if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {

+

+					event.handleObj = handleObj;

+					event.data = handleObj.data;

+

+					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )

+							.apply( matched.elem, args );

+

+					if ( ret !== undefined ) {

+						if ( (event.result = ret) === false ) {

+							event.preventDefault();

+							event.stopPropagation();

+						}

+					}

+				}

+			}

+		}

+

+		// Call the postDispatch hook for the mapped type

+		if ( special.postDispatch ) {

+			special.postDispatch.call( this, event );

+		}

+

+		return event.result;

+	},

+

+	handlers: function( event, handlers ) {

+		var sel, handleObj, matches, i,

+			handlerQueue = [],

+			delegateCount = handlers.delegateCount,

+			cur = event.target;

+

+		// Find delegate handlers

+		// Black-hole SVG <use> instance trees (#13180)

+		// Avoid non-left-click bubbling in Firefox (#3861)

+		if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {

+

+			/* jshint eqeqeq: false */

+			for ( ; cur != this; cur = cur.parentNode || this ) {

+				/* jshint eqeqeq: true */

+

+				// Don't check non-elements (#13208)

+				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)

+				if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {

+					matches = [];

+					for ( i = 0; i < delegateCount; i++ ) {

+						handleObj = handlers[ i ];

+

+						// Don't conflict with Object.prototype properties (#13203)

+						sel = handleObj.selector + " ";

+

+						if ( matches[ sel ] === undefined ) {

+							matches[ sel ] = handleObj.needsContext ?

+								jQuery( sel, this ).index( cur ) >= 0 :

+								jQuery.find( sel, this, null, [ cur ] ).length;

+						}

+						if ( matches[ sel ] ) {

+							matches.push( handleObj );

+						}

+					}

+					if ( matches.length ) {

+						handlerQueue.push({ elem: cur, handlers: matches });

+					}

+				}

+			}

+		}

+

+		// Add the remaining (directly-bound) handlers

+		if ( delegateCount < handlers.length ) {

+			handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });

+		}

+

+		return handlerQueue;

+	},

+

+	fix: function( event ) {

+		if ( event[ jQuery.expando ] ) {

+			return event;

+		}

+

+		// Create a writable copy of the event object and normalize some properties

+		var i, prop, copy,

+			type = event.type,

+			originalEvent = event,

+			fixHook = this.fixHooks[ type ];

+

+		if ( !fixHook ) {

+			this.fixHooks[ type ] = fixHook =

+				rmouseEvent.test( type ) ? this.mouseHooks :

+				rkeyEvent.test( type ) ? this.keyHooks :

+				{};

+		}

+		copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;

+

+		event = new jQuery.Event( originalEvent );

+

+		i = copy.length;

+		while ( i-- ) {

+			prop = copy[ i ];

+			event[ prop ] = originalEvent[ prop ];

+		}

+

+		// Support: IE<9

+		// Fix target property (#1925)

+		if ( !event.target ) {

+			event.target = originalEvent.srcElement || document;

+		}

+

+		// Support: Chrome 23+, Safari?

+		// Target should not be a text node (#504, #13143)

+		if ( event.target.nodeType === 3 ) {

+			event.target = event.target.parentNode;

+		}

+

+		// Support: IE<9

+		// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)

+		event.metaKey = !!event.metaKey;

+

+		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;

+	},

+

+	// Includes some event props shared by KeyEvent and MouseEvent

+	props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),

+

+	fixHooks: {},

+

+	keyHooks: {

+		props: "char charCode key keyCode".split(" "),

+		filter: function( event, original ) {

+

+			// Add which for key events

+			if ( event.which == null ) {

+				event.which = original.charCode != null ? original.charCode : original.keyCode;

+			}

+

+			return event;

+		}

+	},

+

+	mouseHooks: {

+		props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),

+		filter: function( event, original ) {

+			var body, eventDoc, doc,

+				button = original.button,

+				fromElement = original.fromElement;

+

+			// Calculate pageX/Y if missing and clientX/Y available

+			if ( event.pageX == null && original.clientX != null ) {

+				eventDoc = event.target.ownerDocument || document;

+				doc = eventDoc.documentElement;

+				body = eventDoc.body;

+

+				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );

+				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );

+			}

+

+			// Add relatedTarget, if necessary

+			if ( !event.relatedTarget && fromElement ) {

+				event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;

+			}

+

+			// Add which for click: 1 === left; 2 === middle; 3 === right

+			// Note: button is not normalized, so don't use it

+			if ( !event.which && button !== undefined ) {

+				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );

+			}

+

+			return event;

+		}

+	},

+

+	special: {

+		load: {

+			// Prevent triggered image.load events from bubbling to window.load

+			noBubble: true

+		},

+		focus: {

+			// Fire native event if possible so blur/focus sequence is correct

+			trigger: function() {

+				if ( this !== safeActiveElement() && this.focus ) {

+					try {

+						this.focus();

+						return false;

+					} catch ( e ) {

+						// Support: IE<9

+						// If we error on focus to hidden element (#1486, #12518),

+						// let .trigger() run the handlers

+					}

+				}

+			},

+			delegateType: "focusin"

+		},

+		blur: {

+			trigger: function() {

+				if ( this === safeActiveElement() && this.blur ) {

+					this.blur();

+					return false;

+				}

+			},

+			delegateType: "focusout"

+		},

+		click: {

+			// For checkbox, fire native event so checked state will be right

+			trigger: function() {

+				if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {

+					this.click();

+					return false;

+				}

+			},

+

+			// For cross-browser consistency, don't fire native .click() on links

+			_default: function( event ) {

+				return jQuery.nodeName( event.target, "a" );

+			}

+		},

+

+		beforeunload: {

+			postDispatch: function( event ) {

+

+				// Even when returnValue equals to undefined Firefox will still show alert

+				if ( event.result !== undefined ) {

+					event.originalEvent.returnValue = event.result;

+				}

+			}

+		}

+	},

+

+	simulate: function( type, elem, event, bubble ) {

+		// Piggyback on a donor event to simulate a different one.

+		// Fake originalEvent to avoid donor's stopPropagation, but if the

+		// simulated event prevents default then we do the same on the donor.

+		var e = jQuery.extend(

+			new jQuery.Event(),

+			event,

+			{

+				type: type,

+				isSimulated: true,

+				originalEvent: {}

+			}

+		);

+		if ( bubble ) {

+			jQuery.event.trigger( e, null, elem );

+		} else {

+			jQuery.event.dispatch.call( elem, e );

+		}

+		if ( e.isDefaultPrevented() ) {

+			event.preventDefault();

+		}

+	}

+};

+

+jQuery.removeEvent = document.removeEventListener ?

+	function( elem, type, handle ) {

+		if ( elem.removeEventListener ) {

+			elem.removeEventListener( type, handle, false );

+		}

+	} :

+	function( elem, type, handle ) {

+		var name = "on" + type;

+

+		if ( elem.detachEvent ) {

+

+			// #8545, #7054, preventing memory leaks for custom events in IE6-8

+			// detachEvent needed property on element, by name of that event, to properly expose it to GC

+			if ( typeof elem[ name ] === core_strundefined ) {

+				elem[ name ] = null;

+			}

+

+			elem.detachEvent( name, handle );

+		}

+	};

+

+jQuery.Event = function( src, props ) {

+	// Allow instantiation without the 'new' keyword

+	if ( !(this instanceof jQuery.Event) ) {

+		return new jQuery.Event( src, props );

+	}

+

+	// Event object

+	if ( src && src.type ) {

+		this.originalEvent = src;

+		this.type = src.type;

+

+		// Events bubbling up the document may have been marked as prevented

+		// by a handler lower down the tree; reflect the correct value.

+		this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||

+			src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;

+

+	// Event type

+	} else {

+		this.type = src;

+	}

+

+	// Put explicitly provided properties onto the event object

+	if ( props ) {

+		jQuery.extend( this, props );

+	}

+

+	// Create a timestamp if incoming event doesn't have one

+	this.timeStamp = src && src.timeStamp || jQuery.now();

+

+	// Mark it as fixed

+	this[ jQuery.expando ] = true;

+};

+

+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding

+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html

+jQuery.Event.prototype = {

+	isDefaultPrevented: returnFalse,

+	isPropagationStopped: returnFalse,

+	isImmediatePropagationStopped: returnFalse,

+

+	preventDefault: function() {

+		var e = this.originalEvent;

+

+		this.isDefaultPrevented = returnTrue;

+		if ( !e ) {

+			return;

+		}

+

+		// If preventDefault exists, run it on the original event

+		if ( e.preventDefault ) {

+			e.preventDefault();

+

+		// Support: IE

+		// Otherwise set the returnValue property of the original event to false

+		} else {

+			e.returnValue = false;

+		}

+	},

+	stopPropagation: function() {

+		var e = this.originalEvent;

+

+		this.isPropagationStopped = returnTrue;

+		if ( !e ) {

+			return;

+		}

+		// If stopPropagation exists, run it on the original event

+		if ( e.stopPropagation ) {

+			e.stopPropagation();

+		}

+

+		// Support: IE

+		// Set the cancelBubble property of the original event to true

+		e.cancelBubble = true;

+	},

+	stopImmediatePropagation: function() {

+		this.isImmediatePropagationStopped = returnTrue;

+		this.stopPropagation();

+	}

+};

+

+// Create mouseenter/leave events using mouseover/out and event-time checks

+jQuery.each({

+	mouseenter: "mouseover",

+	mouseleave: "mouseout"

+}, function( orig, fix ) {

+	jQuery.event.special[ orig ] = {

+		delegateType: fix,

+		bindType: fix,

+

+		handle: function( event ) {

+			var ret,

+				target = this,

+				related = event.relatedTarget,

+				handleObj = event.handleObj;

+

+			// For mousenter/leave call the handler if related is outside the target.

+			// NB: No relatedTarget if the mouse left/entered the browser window

+			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {

+				event.type = handleObj.origType;

+				ret = handleObj.handler.apply( this, arguments );

+				event.type = fix;

+			}

+			return ret;

+		}

+	};

+});

+

+// IE submit delegation

+if ( !jQuery.support.submitBubbles ) {

+

+	jQuery.event.special.submit = {

+		setup: function() {

+			// Only need this for delegated form submit events

+			if ( jQuery.nodeName( this, "form" ) ) {

+				return false;

+			}

+

+			// Lazy-add a submit handler when a descendant form may potentially be submitted

+			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {

+				// Node name check avoids a VML-related crash in IE (#9807)

+				var elem = e.target,

+					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;

+				if ( form && !jQuery._data( form, "submitBubbles" ) ) {

+					jQuery.event.add( form, "submit._submit", function( event ) {

+						event._submit_bubble = true;

+					});

+					jQuery._data( form, "submitBubbles", true );

+				}

+			});

+			// return undefined since we don't need an event listener

+		},

+

+		postDispatch: function( event ) {

+			// If form was submitted by the user, bubble the event up the tree

+			if ( event._submit_bubble ) {

+				delete event._submit_bubble;

+				if ( this.parentNode && !event.isTrigger ) {

+					jQuery.event.simulate( "submit", this.parentNode, event, true );

+				}

+			}

+		},

+

+		teardown: function() {

+			// Only need this for delegated form submit events

+			if ( jQuery.nodeName( this, "form" ) ) {

+				return false;

+			}

+

+			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above

+			jQuery.event.remove( this, "._submit" );

+		}

+	};

+}

+

+// IE change delegation and checkbox/radio fix

+if ( !jQuery.support.changeBubbles ) {

+

+	jQuery.event.special.change = {

+

+		setup: function() {

+

+			if ( rformElems.test( this.nodeName ) ) {

+				// IE doesn't fire change on a check/radio until blur; trigger it on click

+				// after a propertychange. Eat the blur-change in special.change.handle.

+				// This still fires onchange a second time for check/radio after blur.

+				if ( this.type === "checkbox" || this.type === "radio" ) {

+					jQuery.event.add( this, "propertychange._change", function( event ) {

+						if ( event.originalEvent.propertyName === "checked" ) {

+							this._just_changed = true;

+						}

+					});

+					jQuery.event.add( this, "click._change", function( event ) {

+						if ( this._just_changed && !event.isTrigger ) {

+							this._just_changed = false;

+						}

+						// Allow triggered, simulated change events (#11500)

+						jQuery.event.simulate( "change", this, event, true );

+					});

+				}

+				return false;

+			}

+			// Delegated event; lazy-add a change handler on descendant inputs

+			jQuery.event.add( this, "beforeactivate._change", function( e ) {

+				var elem = e.target;

+

+				if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {

+					jQuery.event.add( elem, "change._change", function( event ) {

+						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {

+							jQuery.event.simulate( "change", this.parentNode, event, true );

+						}

+					});

+					jQuery._data( elem, "changeBubbles", true );

+				}

+			});

+		},

+

+		handle: function( event ) {

+			var elem = event.target;

+

+			// Swallow native change events from checkbox/radio, we already triggered them above

+			if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {

+				return event.handleObj.handler.apply( this, arguments );

+			}

+		},

+

+		teardown: function() {

+			jQuery.event.remove( this, "._change" );

+

+			return !rformElems.test( this.nodeName );

+		}

+	};

+}

+

+// Create "bubbling" focus and blur events

+if ( !jQuery.support.focusinBubbles ) {

+	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {

+

+		// Attach a single capturing handler while someone wants focusin/focusout

+		var attaches = 0,

+			handler = function( event ) {

+				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );

+			};

+

+		jQuery.event.special[ fix ] = {

+			setup: function() {

+				if ( attaches++ === 0 ) {

+					document.addEventListener( orig, handler, true );

+				}

+			},

+			teardown: function() {

+				if ( --attaches === 0 ) {

+					document.removeEventListener( orig, handler, true );

+				}

+			}

+		};

+	});

+}

+

+jQuery.fn.extend({

+

+	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {

+		var type, origFn;

+

+		// Types can be a map of types/handlers

+		if ( typeof types === "object" ) {

+			// ( types-Object, selector, data )

+			if ( typeof selector !== "string" ) {

+				// ( types-Object, data )

+				data = data || selector;

+				selector = undefined;

+			}

+			for ( type in types ) {

+				this.on( type, selector, data, types[ type ], one );

+			}

+			return this;

+		}

+

+		if ( data == null && fn == null ) {

+			// ( types, fn )

+			fn = selector;

+			data = selector = undefined;

+		} else if ( fn == null ) {

+			if ( typeof selector === "string" ) {

+				// ( types, selector, fn )

+				fn = data;

+				data = undefined;

+			} else {

+				// ( types, data, fn )

+				fn = data;

+				data = selector;

+				selector = undefined;

+			}

+		}

+		if ( fn === false ) {

+			fn = returnFalse;

+		} else if ( !fn ) {

+			return this;

+		}

+

+		if ( one === 1 ) {

+			origFn = fn;

+			fn = function( event ) {

+				// Can use an empty set, since event contains the info

+				jQuery().off( event );

+				return origFn.apply( this, arguments );

+			};

+			// Use same guid so caller can remove using origFn

+			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );

+		}

+		return this.each( function() {

+			jQuery.event.add( this, types, fn, data, selector );

+		});

+	},

+	one: function( types, selector, data, fn ) {

+		return this.on( types, selector, data, fn, 1 );

+	},

+	off: function( types, selector, fn ) {

+		var handleObj, type;

+		if ( types && types.preventDefault && types.handleObj ) {

+			// ( event )  dispatched jQuery.Event

+			handleObj = types.handleObj;

+			jQuery( types.delegateTarget ).off(

+				handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,

+				handleObj.selector,

+				handleObj.handler

+			);

+			return this;

+		}

+		if ( typeof types === "object" ) {

+			// ( types-object [, selector] )

+			for ( type in types ) {

+				this.off( type, selector, types[ type ] );

+			}

+			return this;

+		}

+		if ( selector === false || typeof selector === "function" ) {

+			// ( types [, fn] )

+			fn = selector;

+			selector = undefined;

+		}

+		if ( fn === false ) {

+			fn = returnFalse;

+		}

+		return this.each(function() {

+			jQuery.event.remove( this, types, fn, selector );

+		});

+	},

+

+	trigger: function( type, data ) {

+		return this.each(function() {

+			jQuery.event.trigger( type, data, this );

+		});

+	},

+	triggerHandler: function( type, data ) {

+		var elem = this[0];

+		if ( elem ) {

+			return jQuery.event.trigger( type, data, elem, true );

+		}

+	}

+});

+var isSimple = /^.[^:#\[\.,]*$/,

+	rparentsprev = /^(?:parents|prev(?:Until|All))/,

+	rneedsContext = jQuery.expr.match.needsContext,

+	// methods guaranteed to produce a unique set when starting from a unique set

+	guaranteedUnique = {

+		children: true,

+		contents: true,

+		next: true,

+		prev: true

+	};

+

+jQuery.fn.extend({

+	find: function( selector ) {

+		var i,

+			ret = [],

+			self = this,

+			len = self.length;

+

+		if ( typeof selector !== "string" ) {

+			return this.pushStack( jQuery( selector ).filter(function() {

+				for ( i = 0; i < len; i++ ) {

+					if ( jQuery.contains( self[ i ], this ) ) {

+						return true;

+					}

+				}

+			}) );

+		}

+

+		for ( i = 0; i < len; i++ ) {

+			jQuery.find( selector, self[ i ], ret );

+		}

+

+		// Needed because $( selector, context ) becomes $( context ).find( selector )

+		ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );

+		ret.selector = this.selector ? this.selector + " " + selector : selector;

+		return ret;

+	},

+

+	has: function( target ) {

+		var i,

+			targets = jQuery( target, this ),

+			len = targets.length;

+

+		return this.filter(function() {

+			for ( i = 0; i < len; i++ ) {

+				if ( jQuery.contains( this, targets[i] ) ) {

+					return true;

+				}

+			}

+		});

+	},

+

+	not: function( selector ) {

+		return this.pushStack( winnow(this, selector || [], true) );

+	},

+

+	filter: function( selector ) {

+		return this.pushStack( winnow(this, selector || [], false) );

+	},

+

+	is: function( selector ) {

+		return !!winnow(

+			this,

+

+			// If this is a positional/relative selector, check membership in the returned set

+			// so $("p:first").is("p:last") won't return true for a doc with two "p".

+			typeof selector === "string" && rneedsContext.test( selector ) ?

+				jQuery( selector ) :

+				selector || [],

+			false

+		).length;

+	},

+

+	closest: function( selectors, context ) {

+		var cur,

+			i = 0,

+			l = this.length,

+			ret = [],

+			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?

+				jQuery( selectors, context || this.context ) :

+				0;

+

+		for ( ; i < l; i++ ) {

+			for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {

+				// Always skip document fragments

+				if ( cur.nodeType < 11 && (pos ?

+					pos.index(cur) > -1 :

+

+					// Don't pass non-elements to Sizzle

+					cur.nodeType === 1 &&

+						jQuery.find.matchesSelector(cur, selectors)) ) {

+

+					cur = ret.push( cur );

+					break;

+				}

+			}

+		}

+

+		return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );

+	},

+

+	// Determine the position of an element within

+	// the matched set of elements

+	index: function( elem ) {

+

+		// No argument, return index in parent

+		if ( !elem ) {

+			return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;

+		}

+

+		// index in selector

+		if ( typeof elem === "string" ) {

+			return jQuery.inArray( this[0], jQuery( elem ) );

+		}

+

+		// Locate the position of the desired element

+		return jQuery.inArray(

+			// If it receives a jQuery object, the first element is used

+			elem.jquery ? elem[0] : elem, this );

+	},

+

+	add: function( selector, context ) {

+		var set = typeof selector === "string" ?

+				jQuery( selector, context ) :

+				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),

+			all = jQuery.merge( this.get(), set );

+

+		return this.pushStack( jQuery.unique(all) );

+	},

+

+	addBack: function( selector ) {

+		return this.add( selector == null ?

+			this.prevObject : this.prevObject.filter(selector)

+		);

+	}

+});

+

+function sibling( cur, dir ) {

+	do {

+		cur = cur[ dir ];

+	} while ( cur && cur.nodeType !== 1 );

+

+	return cur;

+}

+

+jQuery.each({

+	parent: function( elem ) {

+		var parent = elem.parentNode;

+		return parent && parent.nodeType !== 11 ? parent : null;

+	},

+	parents: function( elem ) {

+		return jQuery.dir( elem, "parentNode" );

+	},

+	parentsUntil: function( elem, i, until ) {

+		return jQuery.dir( elem, "parentNode", until );

+	},

+	next: function( elem ) {

+		return sibling( elem, "nextSibling" );

+	},

+	prev: function( elem ) {

+		return sibling( elem, "previousSibling" );

+	},

+	nextAll: function( elem ) {

+		return jQuery.dir( elem, "nextSibling" );

+	},

+	prevAll: function( elem ) {

+		return jQuery.dir( elem, "previousSibling" );

+	},

+	nextUntil: function( elem, i, until ) {

+		return jQuery.dir( elem, "nextSibling", until );

+	},

+	prevUntil: function( elem, i, until ) {

+		return jQuery.dir( elem, "previousSibling", until );

+	},

+	siblings: function( elem ) {

+		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );

+	},

+	children: function( elem ) {

+		return jQuery.sibling( elem.firstChild );

+	},

+	contents: function( elem ) {

+		return jQuery.nodeName( elem, "iframe" ) ?

+			elem.contentDocument || elem.contentWindow.document :

+			jQuery.merge( [], elem.childNodes );

+	}

+}, function( name, fn ) {

+	jQuery.fn[ name ] = function( until, selector ) {

+		var ret = jQuery.map( this, fn, until );

+

+		if ( name.slice( -5 ) !== "Until" ) {

+			selector = until;

+		}

+

+		if ( selector && typeof selector === "string" ) {

+			ret = jQuery.filter( selector, ret );

+		}

+

+		if ( this.length > 1 ) {

+			// Remove duplicates

+			if ( !guaranteedUnique[ name ] ) {

+				ret = jQuery.unique( ret );

+			}

+

+			// Reverse order for parents* and prev-derivatives

+			if ( rparentsprev.test( name ) ) {

+				ret = ret.reverse();

+			}

+		}

+

+		return this.pushStack( ret );

+	};

+});

+

+jQuery.extend({

+	filter: function( expr, elems, not ) {

+		var elem = elems[ 0 ];

+

+		if ( not ) {

+			expr = ":not(" + expr + ")";

+		}

+

+		return elems.length === 1 && elem.nodeType === 1 ?

+			jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :

+			jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {

+				return elem.nodeType === 1;

+			}));

+	},

+

+	dir: function( elem, dir, until ) {

+		var matched = [],

+			cur = elem[ dir ];

+

+		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {

+			if ( cur.nodeType === 1 ) {

+				matched.push( cur );

+			}

+			cur = cur[dir];

+		}

+		return matched;

+	},

+

+	sibling: function( n, elem ) {

+		var r = [];

+

+		for ( ; n; n = n.nextSibling ) {

+			if ( n.nodeType === 1 && n !== elem ) {

+				r.push( n );

+			}

+		}

+

+		return r;

+	}

+});

+

+// Implement the identical functionality for filter and not

+function winnow( elements, qualifier, not ) {

+	if ( jQuery.isFunction( qualifier ) ) {

+		return jQuery.grep( elements, function( elem, i ) {

+			/* jshint -W018 */

+			return !!qualifier.call( elem, i, elem ) !== not;

+		});

+

+	}

+

+	if ( qualifier.nodeType ) {

+		return jQuery.grep( elements, function( elem ) {

+			return ( elem === qualifier ) !== not;

+		});

+

+	}

+

+	if ( typeof qualifier === "string" ) {

+		if ( isSimple.test( qualifier ) ) {

+			return jQuery.filter( qualifier, elements, not );

+		}

+

+		qualifier = jQuery.filter( qualifier, elements );

+	}

+

+	return jQuery.grep( elements, function( elem ) {

+		return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;

+	});

+}

+function createSafeFragment( document ) {

+	var list = nodeNames.split( "|" ),

+		safeFrag = document.createDocumentFragment();

+

+	if ( safeFrag.createElement ) {

+		while ( list.length ) {

+			safeFrag.createElement(

+				list.pop()

+			);

+		}

+	}

+	return safeFrag;

+}

+

+var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +

+		"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",

+	rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,

+	rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),

+	rleadingWhitespace = /^\s+/,

+	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,

+	rtagName = /<([\w:]+)/,

+	rtbody = /<tbody/i,

+	rhtml = /<|&#?\w+;/,

+	rnoInnerhtml = /<(?:script|style|link)/i,

+	manipulation_rcheckableType = /^(?:checkbox|radio)$/i,

+	// checked="checked" or checked

+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,

+	rscriptType = /^$|\/(?:java|ecma)script/i,

+	rscriptTypeMasked = /^true\/(.*)/,

+	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,

+

+	// We have to close these tags to support XHTML (#13200)

+	wrapMap = {

+		option: [ 1, "<select multiple='multiple'>", "</select>" ],

+		legend: [ 1, "<fieldset>", "</fieldset>" ],

+		area: [ 1, "<map>", "</map>" ],

+		param: [ 1, "<object>", "</object>" ],

+		thead: [ 1, "<table>", "</table>" ],

+		tr: [ 2, "<table><tbody>", "</tbody></table>" ],

+		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],

+		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],

+

+		// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,

+		// unless wrapped in a div with non-breaking characters in front of it.

+		_default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>"  ]

+	},

+	safeFragment = createSafeFragment( document ),

+	fragmentDiv = safeFragment.appendChild( document.createElement("div") );

+

+wrapMap.optgroup = wrapMap.option;

+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;

+wrapMap.th = wrapMap.td;

+

+jQuery.fn.extend({

+	text: function( value ) {

+		return jQuery.access( this, function( value ) {

+			return value === undefined ?

+				jQuery.text( this ) :

+				this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );

+		}, null, value, arguments.length );

+	},

+

+	append: function() {

+		return this.domManip( arguments, function( elem ) {

+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {

+				var target = manipulationTarget( this, elem );

+				target.appendChild( elem );

+			}

+		});

+	},

+

+	prepend: function() {

+		return this.domManip( arguments, function( elem ) {

+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {

+				var target = manipulationTarget( this, elem );

+				target.insertBefore( elem, target.firstChild );

+			}

+		});

+	},

+

+	before: function() {

+		return this.domManip( arguments, function( elem ) {

+			if ( this.parentNode ) {

+				this.parentNode.insertBefore( elem, this );

+			}

+		});

+	},

+

+	after: function() {

+		return this.domManip( arguments, function( elem ) {

+			if ( this.parentNode ) {

+				this.parentNode.insertBefore( elem, this.nextSibling );

+			}

+		});

+	},

+

+	// keepData is for internal use only--do not document

+	remove: function( selector, keepData ) {

+		var elem,

+			elems = selector ? jQuery.filter( selector, this ) : this,

+			i = 0;

+

+		for ( ; (elem = elems[i]) != null; i++ ) {

+

+			if ( !keepData && elem.nodeType === 1 ) {

+				jQuery.cleanData( getAll( elem ) );

+			}

+

+			if ( elem.parentNode ) {

+				if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {

+					setGlobalEval( getAll( elem, "script" ) );

+				}

+				elem.parentNode.removeChild( elem );

+			}

+		}

+

+		return this;

+	},

+

+	empty: function() {

+		var elem,

+			i = 0;

+

+		for ( ; (elem = this[i]) != null; i++ ) {

+			// Remove element nodes and prevent memory leaks

+			if ( elem.nodeType === 1 ) {

+				jQuery.cleanData( getAll( elem, false ) );

+			}

+

+			// Remove any remaining nodes

+			while ( elem.firstChild ) {

+				elem.removeChild( elem.firstChild );

+			}

+

+			// If this is a select, ensure that it displays empty (#12336)

+			// Support: IE<9

+			if ( elem.options && jQuery.nodeName( elem, "select" ) ) {

+				elem.options.length = 0;

+			}

+		}

+

+		return this;

+	},

+

+	clone: function( dataAndEvents, deepDataAndEvents ) {

+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;

+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;

+

+		return this.map( function () {

+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );

+		});

+	},

+

+	html: function( value ) {

+		return jQuery.access( this, function( value ) {

+			var elem = this[0] || {},

+				i = 0,

+				l = this.length;

+

+			if ( value === undefined ) {

+				return elem.nodeType === 1 ?

+					elem.innerHTML.replace( rinlinejQuery, "" ) :

+					undefined;

+			}

+

+			// See if we can take a shortcut and just use innerHTML

+			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&

+				( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&

+				( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&

+				!wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {

+

+				value = value.replace( rxhtmlTag, "<$1></$2>" );

+

+				try {

+					for (; i < l; i++ ) {

+						// Remove element nodes and prevent memory leaks

+						elem = this[i] || {};

+						if ( elem.nodeType === 1 ) {

+							jQuery.cleanData( getAll( elem, false ) );

+							elem.innerHTML = value;

+						}

+					}

+

+					elem = 0;

+

+				// If using innerHTML throws an exception, use the fallback method

+				} catch(e) {}

+			}

+

+			if ( elem ) {

+				this.empty().append( value );

+			}

+		}, null, value, arguments.length );

+	},

+

+	replaceWith: function() {

+		var

+			// Snapshot the DOM in case .domManip sweeps something relevant into its fragment

+			args = jQuery.map( this, function( elem ) {

+				return [ elem.nextSibling, elem.parentNode ];

+			}),

+			i = 0;

+

+		// Make the changes, replacing each context element with the new content

+		this.domManip( arguments, function( elem ) {

+			var next = args[ i++ ],

+				parent = args[ i++ ];

+

+			if ( parent ) {

+				// Don't use the snapshot next if it has moved (#13810)

+				if ( next && next.parentNode !== parent ) {

+					next = this.nextSibling;

+				}

+				jQuery( this ).remove();

+				parent.insertBefore( elem, next );

+			}

+		// Allow new content to include elements from the context set

+		}, true );

+

+		// Force removal if there was no new content (e.g., from empty arguments)

+		return i ? this : this.remove();

+	},

+

+	detach: function( selector ) {

+		return this.remove( selector, true );

+	},

+

+	domManip: function( args, callback, allowIntersection ) {

+

+		// Flatten any nested arrays

+		args = core_concat.apply( [], args );

+

+		var first, node, hasScripts,

+			scripts, doc, fragment,

+			i = 0,

+			l = this.length,

+			set = this,

+			iNoClone = l - 1,

+			value = args[0],

+			isFunction = jQuery.isFunction( value );

+

+		// We can't cloneNode fragments that contain checked, in WebKit

+		if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {

+			return this.each(function( index ) {

+				var self = set.eq( index );

+				if ( isFunction ) {

+					args[0] = value.call( this, index, self.html() );

+				}

+				self.domManip( args, callback, allowIntersection );

+			});

+		}

+

+		if ( l ) {

+			fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, !allowIntersection && this );

+			first = fragment.firstChild;

+

+			if ( fragment.childNodes.length === 1 ) {

+				fragment = first;

+			}

+

+			if ( first ) {

+				scripts = jQuery.map( getAll( fragment, "script" ), disableScript );

+				hasScripts = scripts.length;

+

+				// Use the original fragment for the last item instead of the first because it can end up

+				// being emptied incorrectly in certain situations (#8070).

+				for ( ; i < l; i++ ) {

+					node = fragment;

+

+					if ( i !== iNoClone ) {

+						node = jQuery.clone( node, true, true );

+

+						// Keep references to cloned scripts for later restoration

+						if ( hasScripts ) {

+							jQuery.merge( scripts, getAll( node, "script" ) );

+						}

+					}

+

+					callback.call( this[i], node, i );

+				}

+

+				if ( hasScripts ) {

+					doc = scripts[ scripts.length - 1 ].ownerDocument;

+

+					// Reenable scripts

+					jQuery.map( scripts, restoreScript );

+

+					// Evaluate executable scripts on first document insertion

+					for ( i = 0; i < hasScripts; i++ ) {

+						node = scripts[ i ];

+						if ( rscriptType.test( node.type || "" ) &&

+							!jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {

+

+							if ( node.src ) {

+								// Hope ajax is available...

+								jQuery._evalUrl( node.src );

+							} else {

+								jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );

+							}

+						}

+					}

+				}

+

+				// Fix #11809: Avoid leaking memory

+				fragment = first = null;

+			}

+		}

+

+		return this;

+	}

+});

+

+// Support: IE<8

+// Manipulating tables requires a tbody

+function manipulationTarget( elem, content ) {

+	return jQuery.nodeName( elem, "table" ) &&

+		jQuery.nodeName( content.nodeType === 1 ? content : content.firstChild, "tr" ) ?

+

+		elem.getElementsByTagName("tbody")[0] ||

+			elem.appendChild( elem.ownerDocument.createElement("tbody") ) :

+		elem;

+}

+

+// Replace/restore the type attribute of script elements for safe DOM manipulation

+function disableScript( elem ) {

+	elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type;

+	return elem;

+}

+function restoreScript( elem ) {

+	var match = rscriptTypeMasked.exec( elem.type );

+	if ( match ) {

+		elem.type = match[1];

+	} else {

+		elem.removeAttribute("type");

+	}

+	return elem;

+}

+

+// Mark scripts as having already been evaluated

+function setGlobalEval( elems, refElements ) {

+	var elem,

+		i = 0;

+	for ( ; (elem = elems[i]) != null; i++ ) {

+		jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );

+	}

+}

+

+function cloneCopyEvent( src, dest ) {

+

+	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {

+		return;

+	}

+

+	var type, i, l,

+		oldData = jQuery._data( src ),

+		curData = jQuery._data( dest, oldData ),

+		events = oldData.events;

+

+	if ( events ) {

+		delete curData.handle;

+		curData.events = {};

+

+		for ( type in events ) {

+			for ( i = 0, l = events[ type ].length; i < l; i++ ) {

+				jQuery.event.add( dest, type, events[ type ][ i ] );

+			}

+		}

+	}

+

+	// make the cloned public data object a copy from the original

+	if ( curData.data ) {

+		curData.data = jQuery.extend( {}, curData.data );

+	}

+}

+

+function fixCloneNodeIssues( src, dest ) {

+	var nodeName, e, data;

+

+	// We do not need to do anything for non-Elements

+	if ( dest.nodeType !== 1 ) {

+		return;

+	}

+

+	nodeName = dest.nodeName.toLowerCase();

+

+	// IE6-8 copies events bound via attachEvent when using cloneNode.

+	if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {

+		data = jQuery._data( dest );

+

+		for ( e in data.events ) {

+			jQuery.removeEvent( dest, e, data.handle );

+		}

+

+		// Event data gets referenced instead of copied if the expando gets copied too

+		dest.removeAttribute( jQuery.expando );

+	}

+

+	// IE blanks contents when cloning scripts, and tries to evaluate newly-set text

+	if ( nodeName === "script" && dest.text !== src.text ) {

+		disableScript( dest ).text = src.text;

+		restoreScript( dest );

+

+	// IE6-10 improperly clones children of object elements using classid.

+	// IE10 throws NoModificationAllowedError if parent is null, #12132.

+	} else if ( nodeName === "object" ) {

+		if ( dest.parentNode ) {

+			dest.outerHTML = src.outerHTML;

+		}

+

+		// This path appears unavoidable for IE9. When cloning an object

+		// element in IE9, the outerHTML strategy above is not sufficient.

+		// If the src has innerHTML and the destination does not,

+		// copy the src.innerHTML into the dest.innerHTML. #10324

+		if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {

+			dest.innerHTML = src.innerHTML;

+		}

+

+	} else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) {

+		// IE6-8 fails to persist the checked state of a cloned checkbox

+		// or radio button. Worse, IE6-7 fail to give the cloned element

+		// a checked appearance if the defaultChecked value isn't also set

+

+		dest.defaultChecked = dest.checked = src.checked;

+

+		// IE6-7 get confused and end up setting the value of a cloned

+		// checkbox/radio button to an empty string instead of "on"

+		if ( dest.value !== src.value ) {

+			dest.value = src.value;

+		}

+

+	// IE6-8 fails to return the selected option to the default selected

+	// state when cloning options

+	} else if ( nodeName === "option" ) {

+		dest.defaultSelected = dest.selected = src.defaultSelected;

+

+	// IE6-8 fails to set the defaultValue to the correct value when

+	// cloning other types of input fields

+	} else if ( nodeName === "input" || nodeName === "textarea" ) {

+		dest.defaultValue = src.defaultValue;

+	}

+}

+

+jQuery.each({

+	appendTo: "append",

+	prependTo: "prepend",

+	insertBefore: "before",

+	insertAfter: "after",

+	replaceAll: "replaceWith"

+}, function( name, original ) {

+	jQuery.fn[ name ] = function( selector ) {

+		var elems,

+			i = 0,

+			ret = [],

+			insert = jQuery( selector ),

+			last = insert.length - 1;

+

+		for ( ; i <= last; i++ ) {

+			elems = i === last ? this : this.clone(true);

+			jQuery( insert[i] )[ original ]( elems );

+

+			// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()

+			core_push.apply( ret, elems.get() );

+		}

+

+		return this.pushStack( ret );

+	};

+});

+

+function getAll( context, tag ) {

+	var elems, elem,

+		i = 0,

+		found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) :

+			typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) :

+			undefined;

+

+	if ( !found ) {

+		for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {

+			if ( !tag || jQuery.nodeName( elem, tag ) ) {

+				found.push( elem );

+			} else {

+				jQuery.merge( found, getAll( elem, tag ) );

+			}

+		}

+	}

+

+	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?

+		jQuery.merge( [ context ], found ) :

+		found;

+}

+

+// Used in buildFragment, fixes the defaultChecked property

+function fixDefaultChecked( elem ) {

+	if ( manipulation_rcheckableType.test( elem.type ) ) {

+		elem.defaultChecked = elem.checked;

+	}

+}

+

+jQuery.extend({

+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {

+		var destElements, node, clone, i, srcElements,

+			inPage = jQuery.contains( elem.ownerDocument, elem );

+

+		if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {

+			clone = elem.cloneNode( true );

+

+		// IE<=8 does not properly clone detached, unknown element nodes

+		} else {

+			fragmentDiv.innerHTML = elem.outerHTML;

+			fragmentDiv.removeChild( clone = fragmentDiv.firstChild );

+		}

+

+		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&

+				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {

+

+			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2

+			destElements = getAll( clone );

+			srcElements = getAll( elem );

+

+			// Fix all IE cloning issues

+			for ( i = 0; (node = srcElements[i]) != null; ++i ) {

+				// Ensure that the destination node is not null; Fixes #9587

+				if ( destElements[i] ) {

+					fixCloneNodeIssues( node, destElements[i] );

+				}

+			}

+		}

+

+		// Copy the events from the original to the clone

+		if ( dataAndEvents ) {

+			if ( deepDataAndEvents ) {

+				srcElements = srcElements || getAll( elem );

+				destElements = destElements || getAll( clone );

+

+				for ( i = 0; (node = srcElements[i]) != null; i++ ) {

+					cloneCopyEvent( node, destElements[i] );

+				}

+			} else {

+				cloneCopyEvent( elem, clone );

+			}

+		}

+

+		// Preserve script evaluation history

+		destElements = getAll( clone, "script" );

+		if ( destElements.length > 0 ) {

+			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );

+		}

+

+		destElements = srcElements = node = null;

+

+		// Return the cloned set

+		return clone;

+	},

+

+	buildFragment: function( elems, context, scripts, selection ) {

+		var j, elem, contains,

+			tmp, tag, tbody, wrap,

+			l = elems.length,

+

+			// Ensure a safe fragment

+			safe = createSafeFragment( context ),

+

+			nodes = [],

+			i = 0;

+

+		for ( ; i < l; i++ ) {

+			elem = elems[ i ];

+

+			if ( elem || elem === 0 ) {

+

+				// Add nodes directly

+				if ( jQuery.type( elem ) === "object" ) {

+					jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );

+

+				// Convert non-html into a text node

+				} else if ( !rhtml.test( elem ) ) {

+					nodes.push( context.createTextNode( elem ) );

+

+				// Convert html into DOM nodes

+				} else {

+					tmp = tmp || safe.appendChild( context.createElement("div") );

+

+					// Deserialize a standard representation

+					tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();

+					wrap = wrapMap[ tag ] || wrapMap._default;

+

+					tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];

+

+					// Descend through wrappers to the right content

+					j = wrap[0];

+					while ( j-- ) {

+						tmp = tmp.lastChild;

+					}

+

+					// Manually add leading whitespace removed by IE

+					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {

+						nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );

+					}

+

+					// Remove IE's autoinserted <tbody> from table fragments

+					if ( !jQuery.support.tbody ) {

+

+						// String was a <table>, *may* have spurious <tbody>

+						elem = tag === "table" && !rtbody.test( elem ) ?

+							tmp.firstChild :

+

+							// String was a bare <thead> or <tfoot>

+							wrap[1] === "<table>" && !rtbody.test( elem ) ?

+								tmp :

+								0;

+

+						j = elem && elem.childNodes.length;

+						while ( j-- ) {

+							if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {

+								elem.removeChild( tbody );

+							}

+						}

+					}

+

+					jQuery.merge( nodes, tmp.childNodes );

+

+					// Fix #12392 for WebKit and IE > 9

+					tmp.textContent = "";

+

+					// Fix #12392 for oldIE

+					while ( tmp.firstChild ) {

+						tmp.removeChild( tmp.firstChild );

+					}

+

+					// Remember the top-level container for proper cleanup

+					tmp = safe.lastChild;

+				}

+			}

+		}

+

+		// Fix #11356: Clear elements from fragment

+		if ( tmp ) {

+			safe.removeChild( tmp );

+		}

+

+		// Reset defaultChecked for any radios and checkboxes

+		// about to be appended to the DOM in IE 6/7 (#8060)

+		if ( !jQuery.support.appendChecked ) {

+			jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );

+		}

+

+		i = 0;

+		while ( (elem = nodes[ i++ ]) ) {

+

+			// #4087 - If origin and destination elements are the same, and this is

+			// that element, do not do anything

+			if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {

+				continue;

+			}

+

+			contains = jQuery.contains( elem.ownerDocument, elem );

+

+			// Append to fragment

+			tmp = getAll( safe.appendChild( elem ), "script" );

+

+			// Preserve script evaluation history

+			if ( contains ) {

+				setGlobalEval( tmp );

+			}

+

+			// Capture executables

+			if ( scripts ) {

+				j = 0;

+				while ( (elem = tmp[ j++ ]) ) {

+					if ( rscriptType.test( elem.type || "" ) ) {

+						scripts.push( elem );

+					}

+				}

+			}

+		}

+

+		tmp = null;

+

+		return safe;

+	},

+

+	cleanData: function( elems, /* internal */ acceptData ) {

+		var elem, type, id, data,

+			i = 0,

+			internalKey = jQuery.expando,

+			cache = jQuery.cache,

+			deleteExpando = jQuery.support.deleteExpando,

+			special = jQuery.event.special;

+

+		for ( ; (elem = elems[i]) != null; i++ ) {

+

+			if ( acceptData || jQuery.acceptData( elem ) ) {

+

+				id = elem[ internalKey ];

+				data = id && cache[ id ];

+

+				if ( data ) {

+					if ( data.events ) {

+						for ( type in data.events ) {

+							if ( special[ type ] ) {

+								jQuery.event.remove( elem, type );

+

+							// This is a shortcut to avoid jQuery.event.remove's overhead

+							} else {

+								jQuery.removeEvent( elem, type, data.handle );

+							}

+						}

+					}

+

+					// Remove cache only if it was not already removed by jQuery.event.remove

+					if ( cache[ id ] ) {

+

+						delete cache[ id ];

+

+						// IE does not allow us to delete expando properties from nodes,

+						// nor does it have a removeAttribute function on Document nodes;

+						// we must handle all of these cases

+						if ( deleteExpando ) {

+							delete elem[ internalKey ];

+

+						} else if ( typeof elem.removeAttribute !== core_strundefined ) {

+							elem.removeAttribute( internalKey );

+

+						} else {

+							elem[ internalKey ] = null;

+						}

+

+						core_deletedIds.push( id );

+					}

+				}

+			}

+		}

+	},

+

+	_evalUrl: function( url ) {

+		return jQuery.ajax({

+			url: url,

+			type: "GET",

+			dataType: "script",

+			async: false,

+			global: false,

+			"throws": true

+		});

+	}

+});

+jQuery.fn.extend({

+	wrapAll: function( html ) {

+		if ( jQuery.isFunction( html ) ) {

+			return this.each(function(i) {

+				jQuery(this).wrapAll( html.call(this, i) );

+			});

+		}

+

+		if ( this[0] ) {

+			// The elements to wrap the target around

+			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);

+

+			if ( this[0].parentNode ) {

+				wrap.insertBefore( this[0] );

+			}

+

+			wrap.map(function() {

+				var elem = this;

+

+				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {

+					elem = elem.firstChild;

+				}

+

+				return elem;

+			}).append( this );

+		}

+

+		return this;

+	},

+

+	wrapInner: function( html ) {

+		if ( jQuery.isFunction( html ) ) {

+			return this.each(function(i) {

+				jQuery(this).wrapInner( html.call(this, i) );

+			});

+		}

+

+		return this.each(function() {

+			var self = jQuery( this ),

+				contents = self.contents();

+

+			if ( contents.length ) {

+				contents.wrapAll( html );

+

+			} else {

+				self.append( html );

+			}

+		});

+	},

+

+	wrap: function( html ) {

+		var isFunction = jQuery.isFunction( html );

+

+		return this.each(function(i) {

+			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );

+		});

+	},

+

+	unwrap: function() {

+		return this.parent().each(function() {

+			if ( !jQuery.nodeName( this, "body" ) ) {

+				jQuery( this ).replaceWith( this.childNodes );

+			}

+		}).end();

+	}

+});

+var iframe, getStyles, curCSS,

+	ralpha = /alpha\([^)]*\)/i,

+	ropacity = /opacity\s*=\s*([^)]*)/,

+	rposition = /^(top|right|bottom|left)$/,

+	// swappable if display is none or starts with table except "table", "table-cell", or "table-caption"

+	// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display

+	rdisplayswap = /^(none|table(?!-c[ea]).+)/,

+	rmargin = /^margin/,

+	rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),

+	rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),

+	rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ),

+	elemdisplay = { BODY: "block" },

+

+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },

+	cssNormalTransform = {

+		letterSpacing: 0,

+		fontWeight: 400

+	},

+

+	cssExpand = [ "Top", "Right", "Bottom", "Left" ],

+	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];

+

+// return a css property mapped to a potentially vendor prefixed property

+function vendorPropName( style, name ) {

+

+	// shortcut for names that are not vendor prefixed

+	if ( name in style ) {

+		return name;

+	}

+

+	// check for vendor prefixed names

+	var capName = name.charAt(0).toUpperCase() + name.slice(1),

+		origName = name,

+		i = cssPrefixes.length;

+

+	while ( i-- ) {

+		name = cssPrefixes[ i ] + capName;

+		if ( name in style ) {

+			return name;

+		}

+	}

+

+	return origName;

+}

+

+function isHidden( elem, el ) {

+	// isHidden might be called from jQuery#filter function;

+	// in that case, element will be second argument

+	elem = el || elem;

+	return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );

+}

+

+function showHide( elements, show ) {

+	var display, elem, hidden,

+		values = [],

+		index = 0,

+		length = elements.length;

+

+	for ( ; index < length; index++ ) {

+		elem = elements[ index ];

+		if ( !elem.style ) {

+			continue;

+		}

+

+		values[ index ] = jQuery._data( elem, "olddisplay" );

+		display = elem.style.display;

+		if ( show ) {

+			// Reset the inline display of this element to learn if it is

+			// being hidden by cascaded rules or not

+			if ( !values[ index ] && display === "none" ) {

+				elem.style.display = "";

+			}

+

+			// Set elements which have been overridden with display: none

+			// in a stylesheet to whatever the default browser style is

+			// for such an element

+			if ( elem.style.display === "" && isHidden( elem ) ) {

+				values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );

+			}

+		} else {

+

+			if ( !values[ index ] ) {

+				hidden = isHidden( elem );

+

+				if ( display && display !== "none" || !hidden ) {

+					jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );

+				}

+			}

+		}

+	}

+

+	// Set the display of most of the elements in a second loop

+	// to avoid the constant reflow

+	for ( index = 0; index < length; index++ ) {

+		elem = elements[ index ];

+		if ( !elem.style ) {

+			continue;

+		}

+		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {

+			elem.style.display = show ? values[ index ] || "" : "none";

+		}

+	}

+

+	return elements;

+}

+

+jQuery.fn.extend({

+	css: function( name, value ) {

+		return jQuery.access( this, function( elem, name, value ) {

+			var len, styles,

+				map = {},

+				i = 0;

+

+			if ( jQuery.isArray( name ) ) {

+				styles = getStyles( elem );

+				len = name.length;

+

+				for ( ; i < len; i++ ) {

+					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );

+				}

+

+				return map;

+			}

+

+			return value !== undefined ?

+				jQuery.style( elem, name, value ) :

+				jQuery.css( elem, name );

+		}, name, value, arguments.length > 1 );

+	},

+	show: function() {

+		return showHide( this, true );

+	},

+	hide: function() {

+		return showHide( this );

+	},

+	toggle: function( state ) {

+		if ( typeof state === "boolean" ) {

+			return state ? this.show() : this.hide();

+		}

+

+		return this.each(function() {

+			if ( isHidden( this ) ) {

+				jQuery( this ).show();

+			} else {

+				jQuery( this ).hide();

+			}

+		});

+	}

+});

+

+jQuery.extend({

+	// Add in style property hooks for overriding the default

+	// behavior of getting and setting a style property

+	cssHooks: {

+		opacity: {

+			get: function( elem, computed ) {

+				if ( computed ) {

+					// We should always get a number back from opacity

+					var ret = curCSS( elem, "opacity" );

+					return ret === "" ? "1" : ret;

+				}

+			}

+		}

+	},

+

+	// Don't automatically add "px" to these possibly-unitless properties

+	cssNumber: {

+		"columnCount": true,

+		"fillOpacity": true,

+		"fontWeight": true,

+		"lineHeight": true,

+		"opacity": true,

+		"order": true,

+		"orphans": true,

+		"widows": true,

+		"zIndex": true,

+		"zoom": true

+	},

+

+	// Add in properties whose names you wish to fix before

+	// setting or getting the value

+	cssProps: {

+		// normalize float css property

+		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"

+	},

+

+	// Get and set the style property on a DOM Node

+	style: function( elem, name, value, extra ) {

+		// Don't set styles on text and comment nodes

+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {

+			return;

+		}

+

+		// Make sure that we're working with the right name

+		var ret, type, hooks,

+			origName = jQuery.camelCase( name ),

+			style = elem.style;

+

+		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );

+

+		// gets hook for the prefixed version

+		// followed by the unprefixed version

+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];

+

+		// Check if we're setting a value

+		if ( value !== undefined ) {

+			type = typeof value;

+

+			// convert relative number strings (+= or -=) to relative numbers. #7345

+			if ( type === "string" && (ret = rrelNum.exec( value )) ) {

+				value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );

+				// Fixes bug #9237

+				type = "number";

+			}

+

+			// Make sure that NaN and null values aren't set. See: #7116

+			if ( value == null || type === "number" && isNaN( value ) ) {

+				return;

+			}

+

+			// If a number was passed in, add 'px' to the (except for certain CSS properties)

+			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {

+				value += "px";

+			}

+

+			// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,

+			// but it would mean to define eight (for every problematic property) identical functions

+			if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {

+				style[ name ] = "inherit";

+			}

+

+			// If a hook was provided, use that value, otherwise just set the specified value

+			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {

+

+				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided

+				// Fixes bug #5509

+				try {

+					style[ name ] = value;

+				} catch(e) {}

+			}

+

+		} else {

+			// If a hook was provided get the non-computed value from there

+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {

+				return ret;

+			}

+

+			// Otherwise just get the value from the style object

+			return style[ name ];

+		}

+	},

+

+	css: function( elem, name, extra, styles ) {

+		var num, val, hooks,

+			origName = jQuery.camelCase( name );

+

+		// Make sure that we're working with the right name

+		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );

+

+		// gets hook for the prefixed version

+		// followed by the unprefixed version

+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];

+

+		// If a hook was provided get the computed value from there

+		if ( hooks && "get" in hooks ) {

+			val = hooks.get( elem, true, extra );

+		}

+

+		// Otherwise, if a way to get the computed value exists, use that

+		if ( val === undefined ) {

+			val = curCSS( elem, name, styles );

+		}

+

+		//convert "normal" to computed value

+		if ( val === "normal" && name in cssNormalTransform ) {

+			val = cssNormalTransform[ name ];

+		}

+

+		// Return, converting to number if forced or a qualifier was provided and val looks numeric

+		if ( extra === "" || extra ) {

+			num = parseFloat( val );

+			return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;

+		}

+		return val;

+	}

+});

+

+// NOTE: we've included the "window" in window.getComputedStyle

+// because jsdom on node.js will break without it.

+if ( window.getComputedStyle ) {

+	getStyles = function( elem ) {

+		return window.getComputedStyle( elem, null );

+	};

+

+	curCSS = function( elem, name, _computed ) {

+		var width, minWidth, maxWidth,

+			computed = _computed || getStyles( elem ),

+

+			// getPropertyValue is only needed for .css('filter') in IE9, see #12537

+			ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,

+			style = elem.style;

+

+		if ( computed ) {

+

+			if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {

+				ret = jQuery.style( elem, name );

+			}

+

+			// A tribute to the "awesome hack by Dean Edwards"

+			// Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right

+			// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels

+			// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values

+			if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {

+

+				// Remember the original values

+				width = style.width;

+				minWidth = style.minWidth;

+				maxWidth = style.maxWidth;

+

+				// Put in the new values to get a computed value out

+				style.minWidth = style.maxWidth = style.width = ret;

+				ret = computed.width;

+

+				// Revert the changed values

+				style.width = width;

+				style.minWidth = minWidth;

+				style.maxWidth = maxWidth;

+			}

+		}

+

+		return ret;

+	};

+} else if ( document.documentElement.currentStyle ) {

+	getStyles = function( elem ) {

+		return elem.currentStyle;

+	};

+

+	curCSS = function( elem, name, _computed ) {

+		var left, rs, rsLeft,

+			computed = _computed || getStyles( elem ),

+			ret = computed ? computed[ name ] : undefined,

+			style = elem.style;

+

+		// Avoid setting ret to empty string here

+		// so we don't default to auto

+		if ( ret == null && style && style[ name ] ) {

+			ret = style[ name ];

+		}

+

+		// From the awesome hack by Dean Edwards

+		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291

+

+		// If we're not dealing with a regular pixel number

+		// but a number that has a weird ending, we need to convert it to pixels

+		// but not position css attributes, as those are proportional to the parent element instead

+		// and we can't measure the parent instead because it might trigger a "stacking dolls" problem

+		if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {

+

+			// Remember the original values

+			left = style.left;

+			rs = elem.runtimeStyle;

+			rsLeft = rs && rs.left;

+

+			// Put in the new values to get a computed value out

+			if ( rsLeft ) {

+				rs.left = elem.currentStyle.left;

+			}

+			style.left = name === "fontSize" ? "1em" : ret;

+			ret = style.pixelLeft + "px";

+

+			// Revert the changed values

+			style.left = left;

+			if ( rsLeft ) {

+				rs.left = rsLeft;

+			}

+		}

+

+		return ret === "" ? "auto" : ret;

+	};

+}

+

+function setPositiveNumber( elem, value, subtract ) {

+	var matches = rnumsplit.exec( value );

+	return matches ?

+		// Guard against undefined "subtract", e.g., when used as in cssHooks

+		Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :

+		value;

+}

+

+function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {

+	var i = extra === ( isBorderBox ? "border" : "content" ) ?

+		// If we already have the right measurement, avoid augmentation

+		4 :

+		// Otherwise initialize for horizontal or vertical properties

+		name === "width" ? 1 : 0,

+

+		val = 0;

+

+	for ( ; i < 4; i += 2 ) {

+		// both box models exclude margin, so add it if we want it

+		if ( extra === "margin" ) {

+			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );

+		}

+

+		if ( isBorderBox ) {

+			// border-box includes padding, so remove it if we want content

+			if ( extra === "content" ) {

+				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );

+			}

+

+			// at this point, extra isn't border nor margin, so remove border

+			if ( extra !== "margin" ) {

+				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );

+			}

+		} else {

+			// at this point, extra isn't content, so add padding

+			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );

+

+			// at this point, extra isn't content nor padding, so add border

+			if ( extra !== "padding" ) {

+				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );

+			}

+		}

+	}

+

+	return val;

+}

+

+function getWidthOrHeight( elem, name, extra ) {

+

+	// Start with offset property, which is equivalent to the border-box value

+	var valueIsBorderBox = true,

+		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,

+		styles = getStyles( elem ),

+		isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";

+

+	// some non-html elements return undefined for offsetWidth, so check for null/undefined

+	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285

+	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668

+	if ( val <= 0 || val == null ) {

+		// Fall back to computed then uncomputed css if necessary

+		val = curCSS( elem, name, styles );

+		if ( val < 0 || val == null ) {

+			val = elem.style[ name ];

+		}

+

+		// Computed unit is not pixels. Stop here and return.

+		if ( rnumnonpx.test(val) ) {

+			return val;

+		}

+

+		// we need the check for style in case a browser which returns unreliable values

+		// for getComputedStyle silently falls back to the reliable elem.style

+		valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );

+

+		// Normalize "", auto, and prepare for extra

+		val = parseFloat( val ) || 0;

+	}

+

+	// use the active box-sizing model to add/subtract irrelevant styles

+	return ( val +

+		augmentWidthOrHeight(

+			elem,

+			name,

+			extra || ( isBorderBox ? "border" : "content" ),

+			valueIsBorderBox,

+			styles

+		)

+	) + "px";

+}

+

+// Try to determine the default display value of an element

+function css_defaultDisplay( nodeName ) {

+	var doc = document,

+		display = elemdisplay[ nodeName ];

+

+	if ( !display ) {

+		display = actualDisplay( nodeName, doc );

+

+		// If the simple way fails, read from inside an iframe

+		if ( display === "none" || !display ) {

+			// Use the already-created iframe if possible

+			iframe = ( iframe ||

+				jQuery("<iframe frameborder='0' width='0' height='0'/>")

+				.css( "cssText", "display:block !important" )

+			).appendTo( doc.documentElement );

+

+			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse

+			doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;

+			doc.write("<!doctype html><html><body>");

+			doc.close();

+

+			display = actualDisplay( nodeName, doc );

+			iframe.detach();

+		}

+

+		// Store the correct default display

+		elemdisplay[ nodeName ] = display;

+	}

+

+	return display;

+}

+

+// Called ONLY from within css_defaultDisplay

+function actualDisplay( name, doc ) {

+	var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),

+		display = jQuery.css( elem[0], "display" );

+	elem.remove();

+	return display;

+}

+

+jQuery.each([ "height", "width" ], function( i, name ) {

+	jQuery.cssHooks[ name ] = {

+		get: function( elem, computed, extra ) {

+			if ( computed ) {

+				// certain elements can have dimension info if we invisibly show them

+				// however, it must have a current display style that would benefit from this

+				return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ?

+					jQuery.swap( elem, cssShow, function() {

+						return getWidthOrHeight( elem, name, extra );

+					}) :

+					getWidthOrHeight( elem, name, extra );

+			}

+		},

+

+		set: function( elem, value, extra ) {

+			var styles = extra && getStyles( elem );

+			return setPositiveNumber( elem, value, extra ?

+				augmentWidthOrHeight(

+					elem,

+					name,

+					extra,

+					jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",

+					styles

+				) : 0

+			);

+		}

+	};

+});

+

+if ( !jQuery.support.opacity ) {

+	jQuery.cssHooks.opacity = {

+		get: function( elem, computed ) {

+			// IE uses filters for opacity

+			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?

+				( 0.01 * parseFloat( RegExp.$1 ) ) + "" :

+				computed ? "1" : "";

+		},

+

+		set: function( elem, value ) {

+			var style = elem.style,

+				currentStyle = elem.currentStyle,

+				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",

+				filter = currentStyle && currentStyle.filter || style.filter || "";

+

+			// IE has trouble with opacity if it does not have layout

+			// Force it by setting the zoom level

+			style.zoom = 1;

+

+			// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652

+			// if value === "", then remove inline opacity #12685

+			if ( ( value >= 1 || value === "" ) &&

+					jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&

+					style.removeAttribute ) {

+

+				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText

+				// if "filter:" is present at all, clearType is disabled, we want to avoid this

+				// style.removeAttribute is IE Only, but so apparently is this code path...

+				style.removeAttribute( "filter" );

+

+				// if there is no filter style applied in a css rule or unset inline opacity, we are done

+				if ( value === "" || currentStyle && !currentStyle.filter ) {

+					return;

+				}

+			}

+

+			// otherwise, set new filter values

+			style.filter = ralpha.test( filter ) ?

+				filter.replace( ralpha, opacity ) :

+				filter + " " + opacity;

+		}

+	};

+}

+

+// These hooks cannot be added until DOM ready because the support test

+// for it is not run until after DOM ready

+jQuery(function() {

+	if ( !jQuery.support.reliableMarginRight ) {

+		jQuery.cssHooks.marginRight = {

+			get: function( elem, computed ) {

+				if ( computed ) {

+					// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right

+					// Work around by temporarily setting element display to inline-block

+					return jQuery.swap( elem, { "display": "inline-block" },

+						curCSS, [ elem, "marginRight" ] );

+				}

+			}

+		};

+	}

+

+	// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084

+	// getComputedStyle returns percent when specified for top/left/bottom/right

+	// rather than make the css module depend on the offset module, we just check for it here

+	if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {

+		jQuery.each( [ "top", "left" ], function( i, prop ) {

+			jQuery.cssHooks[ prop ] = {

+				get: function( elem, computed ) {

+					if ( computed ) {

+						computed = curCSS( elem, prop );

+						// if curCSS returns percentage, fallback to offset

+						return rnumnonpx.test( computed ) ?

+							jQuery( elem ).position()[ prop ] + "px" :

+							computed;

+					}

+				}

+			};

+		});

+	}

+

+});

+

+if ( jQuery.expr && jQuery.expr.filters ) {

+	jQuery.expr.filters.hidden = function( elem ) {

+		// Support: Opera <= 12.12

+		// Opera reports offsetWidths and offsetHeights less than zero on some elements

+		return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||

+			(!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");

+	};

+

+	jQuery.expr.filters.visible = function( elem ) {

+		return !jQuery.expr.filters.hidden( elem );

+	};

+}

+

+// These hooks are used by animate to expand properties

+jQuery.each({

+	margin: "",

+	padding: "",

+	border: "Width"

+}, function( prefix, suffix ) {

+	jQuery.cssHooks[ prefix + suffix ] = {

+		expand: function( value ) {

+			var i = 0,

+				expanded = {},

+

+				// assumes a single number if not a string

+				parts = typeof value === "string" ? value.split(" ") : [ value ];

+

+			for ( ; i < 4; i++ ) {

+				expanded[ prefix + cssExpand[ i ] + suffix ] =

+					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];

+			}

+

+			return expanded;

+		}

+	};

+

+	if ( !rmargin.test( prefix ) ) {

+		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;

+	}

+});

+var r20 = /%20/g,

+	rbracket = /\[\]$/,

+	rCRLF = /\r?\n/g,

+	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,

+	rsubmittable = /^(?:input|select|textarea|keygen)/i;

+

+jQuery.fn.extend({

+	serialize: function() {

+		return jQuery.param( this.serializeArray() );

+	},

+	serializeArray: function() {

+		return this.map(function(){

+			// Can add propHook for "elements" to filter or add form elements

+			var elements = jQuery.prop( this, "elements" );

+			return elements ? jQuery.makeArray( elements ) : this;

+		})

+		.filter(function(){

+			var type = this.type;

+			// Use .is(":disabled") so that fieldset[disabled] works

+			return this.name && !jQuery( this ).is( ":disabled" ) &&

+				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&

+				( this.checked || !manipulation_rcheckableType.test( type ) );

+		})

+		.map(function( i, elem ){

+			var val = jQuery( this ).val();

+

+			return val == null ?

+				null :

+				jQuery.isArray( val ) ?

+					jQuery.map( val, function( val ){

+						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };

+					}) :

+					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };

+		}).get();

+	}

+});

+

+//Serialize an array of form elements or a set of

+//key/values into a query string

+jQuery.param = function( a, traditional ) {

+	var prefix,

+		s = [],

+		add = function( key, value ) {

+			// If value is a function, invoke it and return its value

+			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );

+			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );

+		};

+

+	// Set traditional to true for jQuery <= 1.3.2 behavior.

+	if ( traditional === undefined ) {

+		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;

+	}

+

+	// If an array was passed in, assume that it is an array of form elements.

+	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {

+		// Serialize the form elements

+		jQuery.each( a, function() {

+			add( this.name, this.value );

+		});

+

+	} else {

+		// If traditional, encode the "old" way (the way 1.3.2 or older

+		// did it), otherwise encode params recursively.

+		for ( prefix in a ) {

+			buildParams( prefix, a[ prefix ], traditional, add );

+		}

+	}

+

+	// Return the resulting serialization

+	return s.join( "&" ).replace( r20, "+" );

+};

+

+function buildParams( prefix, obj, traditional, add ) {

+	var name;

+

+	if ( jQuery.isArray( obj ) ) {

+		// Serialize array item.

+		jQuery.each( obj, function( i, v ) {

+			if ( traditional || rbracket.test( prefix ) ) {

+				// Treat each array item as a scalar.

+				add( prefix, v );

+

+			} else {

+				// Item is non-scalar (array or object), encode its numeric index.

+				buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );

+			}

+		});

+

+	} else if ( !traditional && jQuery.type( obj ) === "object" ) {

+		// Serialize object item.

+		for ( name in obj ) {

+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );

+		}

+

+	} else {

+		// Serialize scalar item.

+		add( prefix, obj );

+	}

+}

+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +

+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +

+	"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {

+

+	// Handle event binding

+	jQuery.fn[ name ] = function( data, fn ) {

+		return arguments.length > 0 ?

+			this.on( name, null, data, fn ) :

+			this.trigger( name );

+	};

+});

+

+jQuery.fn.extend({

+	hover: function( fnOver, fnOut ) {

+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );

+	},

+

+	bind: function( types, data, fn ) {

+		return this.on( types, null, data, fn );

+	},

+	unbind: function( types, fn ) {

+		return this.off( types, null, fn );

+	},

+

+	delegate: function( selector, types, data, fn ) {

+		return this.on( types, selector, data, fn );

+	},

+	undelegate: function( selector, types, fn ) {

+		// ( namespace ) or ( selector, types [, fn] )

+		return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );

+	}

+});

+var

+	// Document location

+	ajaxLocParts,

+	ajaxLocation,

+	ajax_nonce = jQuery.now(),

+

+	ajax_rquery = /\?/,

+	rhash = /#.*$/,

+	rts = /([?&])_=[^&]*/,

+	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL

+	// #7653, #8125, #8152: local protocol detection

+	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,

+	rnoContent = /^(?:GET|HEAD)$/,

+	rprotocol = /^\/\//,

+	rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,

+

+	// Keep a copy of the old load method

+	_load = jQuery.fn.load,

+

+	/* Prefilters

+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)

+	 * 2) These are called:

+	 *    - BEFORE asking for a transport

+	 *    - AFTER param serialization (s.data is a string if s.processData is true)

+	 * 3) key is the dataType

+	 * 4) the catchall symbol "*" can be used

+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed

+	 */

+	prefilters = {},

+

+	/* Transports bindings

+	 * 1) key is the dataType

+	 * 2) the catchall symbol "*" can be used

+	 * 3) selection will start with transport dataType and THEN go to "*" if needed

+	 */

+	transports = {},

+

+	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression

+	allTypes = "*/".concat("*");

+

+// #8138, IE may throw an exception when accessing

+// a field from window.location if document.domain has been set

+try {

+	ajaxLocation = location.href;

+} catch( e ) {

+	// Use the href attribute of an A element

+	// since IE will modify it given document.location

+	ajaxLocation = document.createElement( "a" );

+	ajaxLocation.href = "";

+	ajaxLocation = ajaxLocation.href;

+}

+

+// Segment location into parts

+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];

+

+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport

+function addToPrefiltersOrTransports( structure ) {

+

+	// dataTypeExpression is optional and defaults to "*"

+	return function( dataTypeExpression, func ) {

+

+		if ( typeof dataTypeExpression !== "string" ) {

+			func = dataTypeExpression;

+			dataTypeExpression = "*";

+		}

+

+		var dataType,

+			i = 0,

+			dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];

+

+		if ( jQuery.isFunction( func ) ) {

+			// For each dataType in the dataTypeExpression

+			while ( (dataType = dataTypes[i++]) ) {

+				// Prepend if requested

+				if ( dataType[0] === "+" ) {

+					dataType = dataType.slice( 1 ) || "*";

+					(structure[ dataType ] = structure[ dataType ] || []).unshift( func );

+

+				// Otherwise append

+				} else {

+					(structure[ dataType ] = structure[ dataType ] || []).push( func );

+				}

+			}

+		}

+	};

+}

+

+// Base inspection function for prefilters and transports

+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {

+

+	var inspected = {},

+		seekingTransport = ( structure === transports );

+

+	function inspect( dataType ) {

+		var selected;

+		inspected[ dataType ] = true;

+		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {

+			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );

+			if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {

+				options.dataTypes.unshift( dataTypeOrTransport );

+				inspect( dataTypeOrTransport );

+				return false;

+			} else if ( seekingTransport ) {

+				return !( selected = dataTypeOrTransport );

+			}

+		});

+		return selected;

+	}

+

+	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );

+}

+

+// A special extend for ajax options

+// that takes "flat" options (not to be deep extended)

+// Fixes #9887

+function ajaxExtend( target, src ) {

+	var deep, key,

+		flatOptions = jQuery.ajaxSettings.flatOptions || {};

+

+	for ( key in src ) {

+		if ( src[ key ] !== undefined ) {

+			( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];

+		}

+	}

+	if ( deep ) {

+		jQuery.extend( true, target, deep );

+	}

+

+	return target;

+}

+

+jQuery.fn.load = function( url, params, callback ) {

+	if ( typeof url !== "string" && _load ) {

+		return _load.apply( this, arguments );

+	}

+

+	var selector, response, type,

+		self = this,

+		off = url.indexOf(" ");

+

+	if ( off >= 0 ) {

+		selector = url.slice( off, url.length );

+		url = url.slice( 0, off );

+	}

+

+	// If it's a function

+	if ( jQuery.isFunction( params ) ) {

+

+		// We assume that it's the callback

+		callback = params;

+		params = undefined;

+

+	// Otherwise, build a param string

+	} else if ( params && typeof params === "object" ) {

+		type = "POST";

+	}

+

+	// If we have elements to modify, make the request

+	if ( self.length > 0 ) {

+		jQuery.ajax({

+			url: url,

+

+			// if "type" variable is undefined, then "GET" method will be used

+			type: type,

+			dataType: "html",

+			data: params

+		}).done(function( responseText ) {

+

+			// Save response for use in complete callback

+			response = arguments;

+

+			self.html( selector ?

+

+				// If a selector was specified, locate the right elements in a dummy div

+				// Exclude scripts to avoid IE 'Permission Denied' errors

+				jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :

+

+				// Otherwise use the full result

+				responseText );

+

+		}).complete( callback && function( jqXHR, status ) {

+			self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );

+		});

+	}

+

+	return this;

+};

+

+// Attach a bunch of functions for handling common AJAX events

+jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){

+	jQuery.fn[ type ] = function( fn ){

+		return this.on( type, fn );

+	};

+});

+

+jQuery.extend({

+

+	// Counter for holding the number of active queries

+	active: 0,

+

+	// Last-Modified header cache for next request

+	lastModified: {},

+	etag: {},

+

+	ajaxSettings: {

+		url: ajaxLocation,

+		type: "GET",

+		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),

+		global: true,

+		processData: true,

+		async: true,

+		contentType: "application/x-www-form-urlencoded; charset=UTF-8",

+		/*

+		timeout: 0,

+		data: null,

+		dataType: null,

+		username: null,

+		password: null,

+		cache: null,

+		throws: false,

+		traditional: false,

+		headers: {},

+		*/

+

+		accepts: {

+			"*": allTypes,

+			text: "text/plain",

+			html: "text/html",

+			xml: "application/xml, text/xml",

+			json: "application/json, text/javascript"

+		},

+

+		contents: {

+			xml: /xml/,

+			html: /html/,

+			json: /json/

+		},

+

+		responseFields: {

+			xml: "responseXML",

+			text: "responseText",

+			json: "responseJSON"

+		},

+

+		// Data converters

+		// Keys separate source (or catchall "*") and destination types with a single space

+		converters: {

+

+			// Convert anything to text

+			"* text": String,

+

+			// Text to html (true = no transformation)

+			"text html": true,

+

+			// Evaluate text as a json expression

+			"text json": jQuery.parseJSON,

+

+			// Parse text as xml

+			"text xml": jQuery.parseXML

+		},

+

+		// For options that shouldn't be deep extended:

+		// you can add your own custom options here if

+		// and when you create one that shouldn't be

+		// deep extended (see ajaxExtend)

+		flatOptions: {

+			url: true,

+			context: true

+		}

+	},

+

+	// Creates a full fledged settings object into target

+	// with both ajaxSettings and settings fields.

+	// If target is omitted, writes into ajaxSettings.

+	ajaxSetup: function( target, settings ) {

+		return settings ?

+

+			// Building a settings object

+			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :

+

+			// Extending ajaxSettings

+			ajaxExtend( jQuery.ajaxSettings, target );

+	},

+

+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),

+	ajaxTransport: addToPrefiltersOrTransports( transports ),

+

+	// Main method

+	ajax: function( url, options ) {

+

+		// If url is an object, simulate pre-1.5 signature

+		if ( typeof url === "object" ) {

+			options = url;

+			url = undefined;

+		}

+

+		// Force options to be an object

+		options = options || {};

+

+		var // Cross-domain detection vars

+			parts,

+			// Loop variable

+			i,

+			// URL without anti-cache param

+			cacheURL,

+			// Response headers as string

+			responseHeadersString,

+			// timeout handle

+			timeoutTimer,

+

+			// To know if global events are to be dispatched

+			fireGlobals,

+

+			transport,

+			// Response headers

+			responseHeaders,

+			// Create the final options object

+			s = jQuery.ajaxSetup( {}, options ),

+			// Callbacks context

+			callbackContext = s.context || s,

+			// Context for global events is callbackContext if it is a DOM node or jQuery collection

+			globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?

+				jQuery( callbackContext ) :

+				jQuery.event,

+			// Deferreds

+			deferred = jQuery.Deferred(),

+			completeDeferred = jQuery.Callbacks("once memory"),

+			// Status-dependent callbacks

+			statusCode = s.statusCode || {},

+			// Headers (they are sent all at once)

+			requestHeaders = {},

+			requestHeadersNames = {},

+			// The jqXHR state

+			state = 0,

+			// Default abort message

+			strAbort = "canceled",

+			// Fake xhr

+			jqXHR = {

+				readyState: 0,

+

+				// Builds headers hashtable if needed

+				getResponseHeader: function( key ) {

+					var match;

+					if ( state === 2 ) {

+						if ( !responseHeaders ) {

+							responseHeaders = {};

+							while ( (match = rheaders.exec( responseHeadersString )) ) {

+								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];

+							}

+						}

+						match = responseHeaders[ key.toLowerCase() ];

+					}

+					return match == null ? null : match;

+				},

+

+				// Raw string

+				getAllResponseHeaders: function() {

+					return state === 2 ? responseHeadersString : null;

+				},

+

+				// Caches the header

+				setRequestHeader: function( name, value ) {

+					var lname = name.toLowerCase();

+					if ( !state ) {

+						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;

+						requestHeaders[ name ] = value;

+					}

+					return this;

+				},

+

+				// Overrides response content-type header

+				overrideMimeType: function( type ) {

+					if ( !state ) {

+						s.mimeType = type;

+					}

+					return this;

+				},

+

+				// Status-dependent callbacks

+				statusCode: function( map ) {

+					var code;

+					if ( map ) {

+						if ( state < 2 ) {

+							for ( code in map ) {

+								// Lazy-add the new callback in a way that preserves old ones

+								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];

+							}

+						} else {

+							// Execute the appropriate callbacks

+							jqXHR.always( map[ jqXHR.status ] );

+						}

+					}

+					return this;

+				},

+

+				// Cancel the request

+				abort: function( statusText ) {

+					var finalText = statusText || strAbort;

+					if ( transport ) {

+						transport.abort( finalText );

+					}

+					done( 0, finalText );

+					return this;

+				}

+			};

+

+		// Attach deferreds

+		deferred.promise( jqXHR ).complete = completeDeferred.add;

+		jqXHR.success = jqXHR.done;

+		jqXHR.error = jqXHR.fail;

+

+		// Remove hash character (#7531: and string promotion)

+		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)

+		// Handle falsy url in the settings object (#10093: consistency with old signature)

+		// We also use the url parameter if available

+		s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );

+

+		// Alias method option to type as per ticket #12004

+		s.type = options.method || options.type || s.method || s.type;

+

+		// Extract dataTypes list

+		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""];

+

+		// A cross-domain request is in order when we have a protocol:host:port mismatch

+		if ( s.crossDomain == null ) {

+			parts = rurl.exec( s.url.toLowerCase() );

+			s.crossDomain = !!( parts &&

+				( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||

+					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==

+						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )

+			);

+		}

+

+		// Convert data if not already a string

+		if ( s.data && s.processData && typeof s.data !== "string" ) {

+			s.data = jQuery.param( s.data, s.traditional );

+		}

+

+		// Apply prefilters

+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );

+

+		// If request was aborted inside a prefilter, stop there

+		if ( state === 2 ) {

+			return jqXHR;

+		}

+

+		// We can fire global events as of now if asked to

+		fireGlobals = s.global;

+

+		// Watch for a new set of requests

+		if ( fireGlobals && jQuery.active++ === 0 ) {

+			jQuery.event.trigger("ajaxStart");

+		}

+

+		// Uppercase the type

+		s.type = s.type.toUpperCase();

+

+		// Determine if request has content

+		s.hasContent = !rnoContent.test( s.type );

+

+		// Save the URL in case we're toying with the If-Modified-Since

+		// and/or If-None-Match header later on

+		cacheURL = s.url;

+

+		// More options handling for requests with no content

+		if ( !s.hasContent ) {

+

+			// If data is available, append data to url

+			if ( s.data ) {

+				cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data );

+				// #9682: remove data so that it's not used in an eventual retry

+				delete s.data;

+			}

+

+			// Add anti-cache in url if needed

+			if ( s.cache === false ) {

+				s.url = rts.test( cacheURL ) ?

+

+					// If there is already a '_' parameter, set its value

+					cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) :

+

+					// Otherwise add one to the end

+					cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++;

+			}

+		}

+

+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.

+		if ( s.ifModified ) {

+			if ( jQuery.lastModified[ cacheURL ] ) {

+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );

+			}

+			if ( jQuery.etag[ cacheURL ] ) {

+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );

+			}

+		}

+

+		// Set the correct header, if data is being sent

+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {

+			jqXHR.setRequestHeader( "Content-Type", s.contentType );

+		}

+

+		// Set the Accepts header for the server, depending on the dataType

+		jqXHR.setRequestHeader(

+			"Accept",

+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?

+				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :

+				s.accepts[ "*" ]

+		);

+

+		// Check for headers option

+		for ( i in s.headers ) {

+			jqXHR.setRequestHeader( i, s.headers[ i ] );

+		}

+

+		// Allow custom headers/mimetypes and early abort

+		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {

+			// Abort if not done already and return

+			return jqXHR.abort();

+		}

+

+		// aborting is no longer a cancellation

+		strAbort = "abort";

+

+		// Install callbacks on deferreds

+		for ( i in { success: 1, error: 1, complete: 1 } ) {

+			jqXHR[ i ]( s[ i ] );

+		}

+

+		// Get transport

+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );

+

+		// If no transport, we auto-abort

+		if ( !transport ) {

+			done( -1, "No Transport" );

+		} else {

+			jqXHR.readyState = 1;

+

+			// Send global event

+			if ( fireGlobals ) {

+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );

+			}

+			// Timeout

+			if ( s.async && s.timeout > 0 ) {

+				timeoutTimer = setTimeout(function() {

+					jqXHR.abort("timeout");

+				}, s.timeout );

+			}

+

+			try {

+				state = 1;

+				transport.send( requestHeaders, done );

+			} catch ( e ) {

+				// Propagate exception as error if not done

+				if ( state < 2 ) {

+					done( -1, e );

+				// Simply rethrow otherwise

+				} else {

+					throw e;

+				}

+			}

+		}

+

+		// Callback for when everything is done

+		function done( status, nativeStatusText, responses, headers ) {

+			var isSuccess, success, error, response, modified,

+				statusText = nativeStatusText;

+

+			// Called once

+			if ( state === 2 ) {

+				return;

+			}

+

+			// State is "done" now

+			state = 2;

+

+			// Clear timeout if it exists

+			if ( timeoutTimer ) {

+				clearTimeout( timeoutTimer );

+			}

+

+			// Dereference transport for early garbage collection

+			// (no matter how long the jqXHR object will be used)

+			transport = undefined;

+

+			// Cache response headers

+			responseHeadersString = headers || "";

+

+			// Set readyState

+			jqXHR.readyState = status > 0 ? 4 : 0;

+

+			// Determine if successful

+			isSuccess = status >= 200 && status < 300 || status === 304;

+

+			// Get response data

+			if ( responses ) {

+				response = ajaxHandleResponses( s, jqXHR, responses );

+			}

+

+			// Convert no matter what (that way responseXXX fields are always set)

+			response = ajaxConvert( s, response, jqXHR, isSuccess );

+

+			// If successful, handle type chaining

+			if ( isSuccess ) {

+

+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.

+				if ( s.ifModified ) {

+					modified = jqXHR.getResponseHeader("Last-Modified");

+					if ( modified ) {

+						jQuery.lastModified[ cacheURL ] = modified;

+					}

+					modified = jqXHR.getResponseHeader("etag");

+					if ( modified ) {

+						jQuery.etag[ cacheURL ] = modified;

+					}

+				}

+

+				// if no content

+				if ( status === 204 || s.type === "HEAD" ) {

+					statusText = "nocontent";

+

+				// if not modified

+				} else if ( status === 304 ) {

+					statusText = "notmodified";

+

+				// If we have data, let's convert it

+				} else {

+					statusText = response.state;

+					success = response.data;

+					error = response.error;

+					isSuccess = !error;

+				}

+			} else {

+				// We extract error from statusText

+				// then normalize statusText and status for non-aborts

+				error = statusText;

+				if ( status || !statusText ) {

+					statusText = "error";

+					if ( status < 0 ) {

+						status = 0;

+					}

+				}

+			}

+

+			// Set data for the fake xhr object

+			jqXHR.status = status;

+			jqXHR.statusText = ( nativeStatusText || statusText ) + "";

+

+			// Success/Error

+			if ( isSuccess ) {

+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );

+			} else {

+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );

+			}

+

+			// Status-dependent callbacks

+			jqXHR.statusCode( statusCode );

+			statusCode = undefined;

+

+			if ( fireGlobals ) {

+				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",

+					[ jqXHR, s, isSuccess ? success : error ] );

+			}

+

+			// Complete

+			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );

+

+			if ( fireGlobals ) {

+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );

+				// Handle the global AJAX counter

+				if ( !( --jQuery.active ) ) {

+					jQuery.event.trigger("ajaxStop");

+				}

+			}

+		}

+

+		return jqXHR;

+	},

+

+	getJSON: function( url, data, callback ) {

+		return jQuery.get( url, data, callback, "json" );

+	},

+

+	getScript: function( url, callback ) {

+		return jQuery.get( url, undefined, callback, "script" );

+	}

+});

+

+jQuery.each( [ "get", "post" ], function( i, method ) {

+	jQuery[ method ] = function( url, data, callback, type ) {

+		// shift arguments if data argument was omitted

+		if ( jQuery.isFunction( data ) ) {

+			type = type || callback;

+			callback = data;

+			data = undefined;

+		}

+

+		return jQuery.ajax({

+			url: url,

+			type: method,

+			dataType: type,

+			data: data,

+			success: callback

+		});

+	};

+});

+

+/* Handles responses to an ajax request:

+ * - finds the right dataType (mediates between content-type and expected dataType)

+ * - returns the corresponding response

+ */

+function ajaxHandleResponses( s, jqXHR, responses ) {

+	var firstDataType, ct, finalDataType, type,

+		contents = s.contents,

+		dataTypes = s.dataTypes;

+

+	// Remove auto dataType and get content-type in the process

+	while( dataTypes[ 0 ] === "*" ) {

+		dataTypes.shift();

+		if ( ct === undefined ) {

+			ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");

+		}

+	}

+

+	// Check if we're dealing with a known content-type

+	if ( ct ) {

+		for ( type in contents ) {

+			if ( contents[ type ] && contents[ type ].test( ct ) ) {

+				dataTypes.unshift( type );

+				break;

+			}

+		}

+	}

+

+	// Check to see if we have a response for the expected dataType

+	if ( dataTypes[ 0 ] in responses ) {

+		finalDataType = dataTypes[ 0 ];

+	} else {

+		// Try convertible dataTypes

+		for ( type in responses ) {

+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {

+				finalDataType = type;

+				break;

+			}

+			if ( !firstDataType ) {

+				firstDataType = type;

+			}

+		}

+		// Or just use first one

+		finalDataType = finalDataType || firstDataType;

+	}

+

+	// If we found a dataType

+	// We add the dataType to the list if needed

+	// and return the corresponding response

+	if ( finalDataType ) {

+		if ( finalDataType !== dataTypes[ 0 ] ) {

+			dataTypes.unshift( finalDataType );

+		}

+		return responses[ finalDataType ];

+	}

+}

+

+/* Chain conversions given the request and the original response

+ * Also sets the responseXXX fields on the jqXHR instance

+ */

+function ajaxConvert( s, response, jqXHR, isSuccess ) {

+	var conv2, current, conv, tmp, prev,

+		converters = {},

+		// Work with a copy of dataTypes in case we need to modify it for conversion

+		dataTypes = s.dataTypes.slice();

+

+	// Create converters map with lowercased keys

+	if ( dataTypes[ 1 ] ) {

+		for ( conv in s.converters ) {

+			converters[ conv.toLowerCase() ] = s.converters[ conv ];

+		}

+	}

+

+	current = dataTypes.shift();

+

+	// Convert to each sequential dataType

+	while ( current ) {

+

+		if ( s.responseFields[ current ] ) {

+			jqXHR[ s.responseFields[ current ] ] = response;

+		}

+

+		// Apply the dataFilter if provided

+		if ( !prev && isSuccess && s.dataFilter ) {

+			response = s.dataFilter( response, s.dataType );

+		}

+

+		prev = current;

+		current = dataTypes.shift();

+

+		if ( current ) {

+

+			// There's only work to do if current dataType is non-auto

+			if ( current === "*" ) {

+

+				current = prev;

+

+			// Convert response if prev dataType is non-auto and differs from current

+			} else if ( prev !== "*" && prev !== current ) {

+

+				// Seek a direct converter

+				conv = converters[ prev + " " + current ] || converters[ "* " + current ];

+

+				// If none found, seek a pair

+				if ( !conv ) {

+					for ( conv2 in converters ) {

+

+						// If conv2 outputs current

+						tmp = conv2.split( " " );

+						if ( tmp[ 1 ] === current ) {

+

+							// If prev can be converted to accepted input

+							conv = converters[ prev + " " + tmp[ 0 ] ] ||

+								converters[ "* " + tmp[ 0 ] ];

+							if ( conv ) {

+								// Condense equivalence converters

+								if ( conv === true ) {

+									conv = converters[ conv2 ];

+

+								// Otherwise, insert the intermediate dataType

+								} else if ( converters[ conv2 ] !== true ) {

+									current = tmp[ 0 ];

+									dataTypes.unshift( tmp[ 1 ] );

+								}

+								break;

+							}

+						}

+					}

+				}

+

+				// Apply converter (if not an equivalence)

+				if ( conv !== true ) {

+

+					// Unless errors are allowed to bubble, catch and return them

+					if ( conv && s[ "throws" ] ) {

+						response = conv( response );

+					} else {

+						try {

+							response = conv( response );

+						} catch ( e ) {

+							return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };

+						}

+					}

+				}

+			}

+		}

+	}

+

+	return { state: "success", data: response };

+}

+// Install script dataType

+jQuery.ajaxSetup({

+	accepts: {

+		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"

+	},

+	contents: {

+		script: /(?:java|ecma)script/

+	},

+	converters: {

+		"text script": function( text ) {

+			jQuery.globalEval( text );

+			return text;

+		}

+	}

+});

+

+// Handle cache's special case and global

+jQuery.ajaxPrefilter( "script", function( s ) {

+	if ( s.cache === undefined ) {

+		s.cache = false;

+	}

+	if ( s.crossDomain ) {

+		s.type = "GET";

+		s.global = false;

+	}

+});

+

+// Bind script tag hack transport

+jQuery.ajaxTransport( "script", function(s) {

+

+	// This transport only deals with cross domain requests

+	if ( s.crossDomain ) {

+

+		var script,

+			head = document.head || jQuery("head")[0] || document.documentElement;

+

+		return {

+

+			send: function( _, callback ) {

+

+				script = document.createElement("script");

+

+				script.async = true;

+

+				if ( s.scriptCharset ) {

+					script.charset = s.scriptCharset;

+				}

+

+				script.src = s.url;

+

+				// Attach handlers for all browsers

+				script.onload = script.onreadystatechange = function( _, isAbort ) {

+

+					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {

+

+						// Handle memory leak in IE

+						script.onload = script.onreadystatechange = null;

+

+						// Remove the script

+						if ( script.parentNode ) {

+							script.parentNode.removeChild( script );

+						}

+

+						// Dereference the script

+						script = null;

+

+						// Callback if not abort

+						if ( !isAbort ) {

+							callback( 200, "success" );

+						}

+					}

+				};

+

+				// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending

+				// Use native DOM manipulation to avoid our domManip AJAX trickery

+				head.insertBefore( script, head.firstChild );

+			},

+

+			abort: function() {

+				if ( script ) {

+					script.onload( undefined, true );

+				}

+			}

+		};

+	}

+});

+var oldCallbacks = [],

+	rjsonp = /(=)\?(?=&|$)|\?\?/;

+

+// Default jsonp settings

+jQuery.ajaxSetup({

+	jsonp: "callback",

+	jsonpCallback: function() {

+		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );

+		this[ callback ] = true;

+		return callback;

+	}

+});

+

+// Detect, normalize options and install callbacks for jsonp requests

+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {

+

+	var callbackName, overwritten, responseContainer,

+		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?

+			"url" :

+			typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"

+		);

+

+	// Handle iff the expected data type is "jsonp" or we have a parameter to set

+	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {

+

+		// Get callback name, remembering preexisting value associated with it

+		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?

+			s.jsonpCallback() :

+			s.jsonpCallback;

+

+		// Insert callback into url or form data

+		if ( jsonProp ) {

+			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );

+		} else if ( s.jsonp !== false ) {

+			s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;

+		}

+

+		// Use data converter to retrieve json after script execution

+		s.converters["script json"] = function() {

+			if ( !responseContainer ) {

+				jQuery.error( callbackName + " was not called" );

+			}

+			return responseContainer[ 0 ];

+		};

+

+		// force json dataType

+		s.dataTypes[ 0 ] = "json";

+

+		// Install callback

+		overwritten = window[ callbackName ];

+		window[ callbackName ] = function() {

+			responseContainer = arguments;

+		};

+

+		// Clean-up function (fires after converters)

+		jqXHR.always(function() {

+			// Restore preexisting value

+			window[ callbackName ] = overwritten;

+

+			// Save back as free

+			if ( s[ callbackName ] ) {

+				// make sure that re-using the options doesn't screw things around

+				s.jsonpCallback = originalSettings.jsonpCallback;

+

+				// save the callback name for future use

+				oldCallbacks.push( callbackName );

+			}

+

+			// Call if it was a function and we have a response

+			if ( responseContainer && jQuery.isFunction( overwritten ) ) {

+				overwritten( responseContainer[ 0 ] );

+			}

+

+			responseContainer = overwritten = undefined;

+		});

+

+		// Delegate to script

+		return "script";

+	}

+});

+var xhrCallbacks, xhrSupported,

+	xhrId = 0,

+	// #5280: Internet Explorer will keep connections alive if we don't abort on unload

+	xhrOnUnloadAbort = window.ActiveXObject && function() {

+		// Abort all pending requests

+		var key;

+		for ( key in xhrCallbacks ) {

+			xhrCallbacks[ key ]( undefined, true );

+		}

+	};

+

+// Functions to create xhrs

+function createStandardXHR() {

+	try {

+		return new window.XMLHttpRequest();

+	} catch( e ) {}

+}

+

+function createActiveXHR() {

+	try {

+		return new window.ActiveXObject("Microsoft.XMLHTTP");

+	} catch( e ) {}

+}

+

+// Create the request object

+// (This is still attached to ajaxSettings for backward compatibility)

+jQuery.ajaxSettings.xhr = window.ActiveXObject ?

+	/* Microsoft failed to properly

+	 * implement the XMLHttpRequest in IE7 (can't request local files),

+	 * so we use the ActiveXObject when it is available

+	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so

+	 * we need a fallback.

+	 */

+	function() {

+		return !this.isLocal && createStandardXHR() || createActiveXHR();

+	} :

+	// For all other browsers, use the standard XMLHttpRequest object

+	createStandardXHR;

+

+// Determine support properties

+xhrSupported = jQuery.ajaxSettings.xhr();

+jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );

+xhrSupported = jQuery.support.ajax = !!xhrSupported;

+

+// Create transport if the browser can provide an xhr

+if ( xhrSupported ) {

+

+	jQuery.ajaxTransport(function( s ) {

+		// Cross domain only allowed if supported through XMLHttpRequest

+		if ( !s.crossDomain || jQuery.support.cors ) {

+

+			var callback;

+

+			return {

+				send: function( headers, complete ) {

+

+					// Get a new xhr

+					var handle, i,

+						xhr = s.xhr();

+

+					// Open the socket

+					// Passing null username, generates a login popup on Opera (#2865)

+					if ( s.username ) {

+						xhr.open( s.type, s.url, s.async, s.username, s.password );

+					} else {

+						xhr.open( s.type, s.url, s.async );

+					}

+

+					// Apply custom fields if provided

+					if ( s.xhrFields ) {

+						for ( i in s.xhrFields ) {

+							xhr[ i ] = s.xhrFields[ i ];

+						}

+					}

+

+					// Override mime type if needed

+					if ( s.mimeType && xhr.overrideMimeType ) {

+						xhr.overrideMimeType( s.mimeType );

+					}

+

+					// X-Requested-With header

+					// For cross-domain requests, seeing as conditions for a preflight are

+					// akin to a jigsaw puzzle, we simply never set it to be sure.

+					// (it can always be set on a per-request basis or even using ajaxSetup)

+					// For same-domain requests, won't change header if already provided.

+					if ( !s.crossDomain && !headers["X-Requested-With"] ) {

+						headers["X-Requested-With"] = "XMLHttpRequest";

+					}

+

+					// Need an extra try/catch for cross domain requests in Firefox 3

+					try {

+						for ( i in headers ) {

+							xhr.setRequestHeader( i, headers[ i ] );

+						}

+					} catch( err ) {}

+

+					// Do send the request

+					// This may raise an exception which is actually

+					// handled in jQuery.ajax (so no try/catch here)

+					xhr.send( ( s.hasContent && s.data ) || null );

+

+					// Listener

+					callback = function( _, isAbort ) {

+						var status, responseHeaders, statusText, responses;

+

+						// Firefox throws exceptions when accessing properties

+						// of an xhr when a network error occurred

+						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)

+						try {

+

+							// Was never called and is aborted or complete

+							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {

+

+								// Only called once

+								callback = undefined;

+

+								// Do not keep as active anymore

+								if ( handle ) {

+									xhr.onreadystatechange = jQuery.noop;

+									if ( xhrOnUnloadAbort ) {

+										delete xhrCallbacks[ handle ];

+									}

+								}

+

+								// If it's an abort

+								if ( isAbort ) {

+									// Abort it manually if needed

+									if ( xhr.readyState !== 4 ) {

+										xhr.abort();

+									}

+								} else {

+									responses = {};

+									status = xhr.status;

+									responseHeaders = xhr.getAllResponseHeaders();

+

+									// When requesting binary data, IE6-9 will throw an exception

+									// on any attempt to access responseText (#11426)

+									if ( typeof xhr.responseText === "string" ) {

+										responses.text = xhr.responseText;

+									}

+

+									// Firefox throws an exception when accessing

+									// statusText for faulty cross-domain requests

+									try {

+										statusText = xhr.statusText;

+									} catch( e ) {

+										// We normalize with Webkit giving an empty statusText

+										statusText = "";

+									}

+

+									// Filter status for non standard behaviors

+

+									// If the request is local and we have data: assume a success

+									// (success with no data won't get notified, that's the best we

+									// can do given current implementations)

+									if ( !status && s.isLocal && !s.crossDomain ) {

+										status = responses.text ? 200 : 404;

+									// IE - #1450: sometimes returns 1223 when it should be 204

+									} else if ( status === 1223 ) {

+										status = 204;

+									}

+								}

+							}

+						} catch( firefoxAccessException ) {

+							if ( !isAbort ) {

+								complete( -1, firefoxAccessException );

+							}

+						}

+

+						// Call complete if needed

+						if ( responses ) {

+							complete( status, statusText, responses, responseHeaders );

+						}

+					};

+

+					if ( !s.async ) {

+						// if we're in sync mode we fire the callback

+						callback();

+					} else if ( xhr.readyState === 4 ) {

+						// (IE6 & IE7) if it's in cache and has been

+						// retrieved directly we need to fire the callback

+						setTimeout( callback );

+					} else {

+						handle = ++xhrId;

+						if ( xhrOnUnloadAbort ) {

+							// Create the active xhrs callbacks list if needed

+							// and attach the unload handler

+							if ( !xhrCallbacks ) {

+								xhrCallbacks = {};

+								jQuery( window ).unload( xhrOnUnloadAbort );

+							}

+							// Add to list of active xhrs callbacks

+							xhrCallbacks[ handle ] = callback;

+						}

+						xhr.onreadystatechange = callback;

+					}

+				},

+

+				abort: function() {

+					if ( callback ) {

+						callback( undefined, true );

+					}

+				}

+			};

+		}

+	});

+}

+var fxNow, timerId,

+	rfxtypes = /^(?:toggle|show|hide)$/,

+	rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),

+	rrun = /queueHooks$/,

+	animationPrefilters = [ defaultPrefilter ],

+	tweeners = {

+		"*": [function( prop, value ) {

+			var tween = this.createTween( prop, value ),

+				target = tween.cur(),

+				parts = rfxnum.exec( value ),

+				unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),

+

+				// Starting value computation is required for potential unit mismatches

+				start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&

+					rfxnum.exec( jQuery.css( tween.elem, prop ) ),

+				scale = 1,

+				maxIterations = 20;

+

+			if ( start && start[ 3 ] !== unit ) {

+				// Trust units reported by jQuery.css

+				unit = unit || start[ 3 ];

+

+				// Make sure we update the tween properties later on

+				parts = parts || [];

+

+				// Iteratively approximate from a nonzero starting point

+				start = +target || 1;

+

+				do {

+					// If previous iteration zeroed out, double until we get *something*

+					// Use a string for doubling factor so we don't accidentally see scale as unchanged below

+					scale = scale || ".5";

+

+					// Adjust and apply

+					start = start / scale;

+					jQuery.style( tween.elem, prop, start + unit );

+

+				// Update scale, tolerating zero or NaN from tween.cur()

+				// And breaking the loop if scale is unchanged or perfect, or if we've just had enough

+				} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );

+			}

+

+			// Update tween properties

+			if ( parts ) {

+				start = tween.start = +start || +target || 0;

+				tween.unit = unit;

+				// If a +=/-= token was provided, we're doing a relative animation

+				tween.end = parts[ 1 ] ?

+					start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :

+					+parts[ 2 ];

+			}

+

+			return tween;

+		}]

+	};

+

+// Animations created synchronously will run synchronously

+function createFxNow() {

+	setTimeout(function() {

+		fxNow = undefined;

+	});

+	return ( fxNow = jQuery.now() );

+}

+

+function createTween( value, prop, animation ) {

+	var tween,

+		collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),

+		index = 0,

+		length = collection.length;

+	for ( ; index < length; index++ ) {

+		if ( (tween = collection[ index ].call( animation, prop, value )) ) {

+

+			// we're done with this property

+			return tween;

+		}

+	}

+}

+

+function Animation( elem, properties, options ) {

+	var result,

+		stopped,

+		index = 0,

+		length = animationPrefilters.length,

+		deferred = jQuery.Deferred().always( function() {

+			// don't match elem in the :animated selector

+			delete tick.elem;

+		}),

+		tick = function() {

+			if ( stopped ) {

+				return false;

+			}

+			var currentTime = fxNow || createFxNow(),

+				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),

+				// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)

+				temp = remaining / animation.duration || 0,

+				percent = 1 - temp,

+				index = 0,

+				length = animation.tweens.length;

+

+			for ( ; index < length ; index++ ) {

+				animation.tweens[ index ].run( percent );

+			}

+

+			deferred.notifyWith( elem, [ animation, percent, remaining ]);

+

+			if ( percent < 1 && length ) {

+				return remaining;

+			} else {

+				deferred.resolveWith( elem, [ animation ] );

+				return false;

+			}

+		},

+		animation = deferred.promise({

+			elem: elem,

+			props: jQuery.extend( {}, properties ),

+			opts: jQuery.extend( true, { specialEasing: {} }, options ),

+			originalProperties: properties,

+			originalOptions: options,

+			startTime: fxNow || createFxNow(),

+			duration: options.duration,

+			tweens: [],

+			createTween: function( prop, end ) {

+				var tween = jQuery.Tween( elem, animation.opts, prop, end,

+						animation.opts.specialEasing[ prop ] || animation.opts.easing );

+				animation.tweens.push( tween );

+				return tween;

+			},

+			stop: function( gotoEnd ) {

+				var index = 0,

+					// if we are going to the end, we want to run all the tweens

+					// otherwise we skip this part

+					length = gotoEnd ? animation.tweens.length : 0;

+				if ( stopped ) {

+					return this;

+				}

+				stopped = true;

+				for ( ; index < length ; index++ ) {

+					animation.tweens[ index ].run( 1 );

+				}

+

+				// resolve when we played the last frame

+				// otherwise, reject

+				if ( gotoEnd ) {

+					deferred.resolveWith( elem, [ animation, gotoEnd ] );

+				} else {

+					deferred.rejectWith( elem, [ animation, gotoEnd ] );

+				}

+				return this;

+			}

+		}),

+		props = animation.props;

+

+	propFilter( props, animation.opts.specialEasing );

+

+	for ( ; index < length ; index++ ) {

+		result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );

+		if ( result ) {

+			return result;

+		}

+	}

+

+	jQuery.map( props, createTween, animation );

+

+	if ( jQuery.isFunction( animation.opts.start ) ) {

+		animation.opts.start.call( elem, animation );

+	}

+

+	jQuery.fx.timer(

+		jQuery.extend( tick, {

+			elem: elem,

+			anim: animation,

+			queue: animation.opts.queue

+		})

+	);

+

+	// attach callbacks from options

+	return animation.progress( animation.opts.progress )

+		.done( animation.opts.done, animation.opts.complete )

+		.fail( animation.opts.fail )

+		.always( animation.opts.always );

+}

+

+function propFilter( props, specialEasing ) {

+	var index, name, easing, value, hooks;

+

+	// camelCase, specialEasing and expand cssHook pass

+	for ( index in props ) {

+		name = jQuery.camelCase( index );

+		easing = specialEasing[ name ];

+		value = props[ index ];

+		if ( jQuery.isArray( value ) ) {

+			easing = value[ 1 ];

+			value = props[ index ] = value[ 0 ];

+		}

+

+		if ( index !== name ) {

+			props[ name ] = value;

+			delete props[ index ];

+		}

+

+		hooks = jQuery.cssHooks[ name ];

+		if ( hooks && "expand" in hooks ) {

+			value = hooks.expand( value );

+			delete props[ name ];

+

+			// not quite $.extend, this wont overwrite keys already present.

+			// also - reusing 'index' from above because we have the correct "name"

+			for ( index in value ) {

+				if ( !( index in props ) ) {

+					props[ index ] = value[ index ];

+					specialEasing[ index ] = easing;

+				}

+			}

+		} else {

+			specialEasing[ name ] = easing;

+		}

+	}

+}

+

+jQuery.Animation = jQuery.extend( Animation, {

+

+	tweener: function( props, callback ) {

+		if ( jQuery.isFunction( props ) ) {

+			callback = props;

+			props = [ "*" ];

+		} else {

+			props = props.split(" ");

+		}

+

+		var prop,

+			index = 0,

+			length = props.length;

+

+		for ( ; index < length ; index++ ) {

+			prop = props[ index ];

+			tweeners[ prop ] = tweeners[ prop ] || [];

+			tweeners[ prop ].unshift( callback );

+		}

+	},

+

+	prefilter: function( callback, prepend ) {

+		if ( prepend ) {

+			animationPrefilters.unshift( callback );

+		} else {

+			animationPrefilters.push( callback );

+		}

+	}

+});

+

+function defaultPrefilter( elem, props, opts ) {

+	/* jshint validthis: true */

+	var prop, value, toggle, tween, hooks, oldfire,

+		anim = this,

+		orig = {},

+		style = elem.style,

+		hidden = elem.nodeType && isHidden( elem ),

+		dataShow = jQuery._data( elem, "fxshow" );

+

+	// handle queue: false promises

+	if ( !opts.queue ) {

+		hooks = jQuery._queueHooks( elem, "fx" );

+		if ( hooks.unqueued == null ) {

+			hooks.unqueued = 0;

+			oldfire = hooks.empty.fire;

+			hooks.empty.fire = function() {

+				if ( !hooks.unqueued ) {

+					oldfire();

+				}

+			};

+		}

+		hooks.unqueued++;

+

+		anim.always(function() {

+			// doing this makes sure that the complete handler will be called

+			// before this completes

+			anim.always(function() {

+				hooks.unqueued--;

+				if ( !jQuery.queue( elem, "fx" ).length ) {

+					hooks.empty.fire();

+				}

+			});

+		});

+	}

+

+	// height/width overflow pass

+	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {

+		// Make sure that nothing sneaks out

+		// Record all 3 overflow attributes because IE does not

+		// change the overflow attribute when overflowX and

+		// overflowY are set to the same value

+		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];

+

+		// Set display property to inline-block for height/width

+		// animations on inline elements that are having width/height animated

+		if ( jQuery.css( elem, "display" ) === "inline" &&

+				jQuery.css( elem, "float" ) === "none" ) {

+

+			// inline-level elements accept inline-block;

+			// block-level elements need to be inline with layout

+			if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {

+				style.display = "inline-block";

+

+			} else {

+				style.zoom = 1;

+			}

+		}

+	}

+

+	if ( opts.overflow ) {

+		style.overflow = "hidden";

+		if ( !jQuery.support.shrinkWrapBlocks ) {

+			anim.always(function() {

+				style.overflow = opts.overflow[ 0 ];

+				style.overflowX = opts.overflow[ 1 ];

+				style.overflowY = opts.overflow[ 2 ];

+			});

+		}

+	}

+

+

+	// show/hide pass

+	for ( prop in props ) {

+		value = props[ prop ];

+		if ( rfxtypes.exec( value ) ) {

+			delete props[ prop ];

+			toggle = toggle || value === "toggle";

+			if ( value === ( hidden ? "hide" : "show" ) ) {

+				continue;

+			}

+			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );

+		}

+	}

+

+	if ( !jQuery.isEmptyObject( orig ) ) {

+		if ( dataShow ) {

+			if ( "hidden" in dataShow ) {

+				hidden = dataShow.hidden;

+			}

+		} else {

+			dataShow = jQuery._data( elem, "fxshow", {} );

+		}

+

+		// store state if its toggle - enables .stop().toggle() to "reverse"

+		if ( toggle ) {

+			dataShow.hidden = !hidden;

+		}

+		if ( hidden ) {

+			jQuery( elem ).show();

+		} else {

+			anim.done(function() {

+				jQuery( elem ).hide();

+			});

+		}

+		anim.done(function() {

+			var prop;

+			jQuery._removeData( elem, "fxshow" );

+			for ( prop in orig ) {

+				jQuery.style( elem, prop, orig[ prop ] );

+			}

+		});

+		for ( prop in orig ) {

+			tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );

+

+			if ( !( prop in dataShow ) ) {

+				dataShow[ prop ] = tween.start;

+				if ( hidden ) {

+					tween.end = tween.start;

+					tween.start = prop === "width" || prop === "height" ? 1 : 0;

+				}

+			}

+		}

+	}

+}

+

+function Tween( elem, options, prop, end, easing ) {

+	return new Tween.prototype.init( elem, options, prop, end, easing );

+}

+jQuery.Tween = Tween;

+

+Tween.prototype = {

+	constructor: Tween,

+	init: function( elem, options, prop, end, easing, unit ) {

+		this.elem = elem;

+		this.prop = prop;

+		this.easing = easing || "swing";

+		this.options = options;

+		this.start = this.now = this.cur();

+		this.end = end;

+		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );

+	},

+	cur: function() {

+		var hooks = Tween.propHooks[ this.prop ];

+

+		return hooks && hooks.get ?

+			hooks.get( this ) :

+			Tween.propHooks._default.get( this );

+	},

+	run: function( percent ) {

+		var eased,

+			hooks = Tween.propHooks[ this.prop ];

+

+		if ( this.options.duration ) {

+			this.pos = eased = jQuery.easing[ this.easing ](

+				percent, this.options.duration * percent, 0, 1, this.options.duration

+			);

+		} else {

+			this.pos = eased = percent;

+		}

+		this.now = ( this.end - this.start ) * eased + this.start;

+

+		if ( this.options.step ) {

+			this.options.step.call( this.elem, this.now, this );

+		}

+

+		if ( hooks && hooks.set ) {

+			hooks.set( this );

+		} else {

+			Tween.propHooks._default.set( this );

+		}

+		return this;

+	}

+};

+

+Tween.prototype.init.prototype = Tween.prototype;

+

+Tween.propHooks = {

+	_default: {

+		get: function( tween ) {

+			var result;

+

+			if ( tween.elem[ tween.prop ] != null &&

+				(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {

+				return tween.elem[ tween.prop ];

+			}

+

+			// passing an empty string as a 3rd parameter to .css will automatically

+			// attempt a parseFloat and fallback to a string if the parse fails

+			// so, simple values such as "10px" are parsed to Float.

+			// complex values such as "rotate(1rad)" are returned as is.

+			result = jQuery.css( tween.elem, tween.prop, "" );

+			// Empty strings, null, undefined and "auto" are converted to 0.

+			return !result || result === "auto" ? 0 : result;

+		},

+		set: function( tween ) {

+			// use step hook for back compat - use cssHook if its there - use .style if its

+			// available and use plain properties where available

+			if ( jQuery.fx.step[ tween.prop ] ) {

+				jQuery.fx.step[ tween.prop ]( tween );

+			} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {

+				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );

+			} else {

+				tween.elem[ tween.prop ] = tween.now;

+			}

+		}

+	}

+};

+

+// Support: IE <=9

+// Panic based approach to setting things on disconnected nodes

+

+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {

+	set: function( tween ) {

+		if ( tween.elem.nodeType && tween.elem.parentNode ) {

+			tween.elem[ tween.prop ] = tween.now;

+		}

+	}

+};

+

+jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {

+	var cssFn = jQuery.fn[ name ];

+	jQuery.fn[ name ] = function( speed, easing, callback ) {

+		return speed == null || typeof speed === "boolean" ?

+			cssFn.apply( this, arguments ) :

+			this.animate( genFx( name, true ), speed, easing, callback );

+	};

+});

+

+jQuery.fn.extend({

+	fadeTo: function( speed, to, easing, callback ) {

+

+		// show any hidden elements after setting opacity to 0

+		return this.filter( isHidden ).css( "opacity", 0 ).show()

+

+			// animate to the value specified

+			.end().animate({ opacity: to }, speed, easing, callback );

+	},

+	animate: function( prop, speed, easing, callback ) {

+		var empty = jQuery.isEmptyObject( prop ),

+			optall = jQuery.speed( speed, easing, callback ),

+			doAnimation = function() {

+				// Operate on a copy of prop so per-property easing won't be lost

+				var anim = Animation( this, jQuery.extend( {}, prop ), optall );

+

+				// Empty animations, or finishing resolves immediately

+				if ( empty || jQuery._data( this, "finish" ) ) {

+					anim.stop( true );

+				}

+			};

+			doAnimation.finish = doAnimation;

+

+		return empty || optall.queue === false ?

+			this.each( doAnimation ) :

+			this.queue( optall.queue, doAnimation );

+	},

+	stop: function( type, clearQueue, gotoEnd ) {

+		var stopQueue = function( hooks ) {

+			var stop = hooks.stop;

+			delete hooks.stop;

+			stop( gotoEnd );

+		};

+

+		if ( typeof type !== "string" ) {

+			gotoEnd = clearQueue;

+			clearQueue = type;

+			type = undefined;

+		}

+		if ( clearQueue && type !== false ) {

+			this.queue( type || "fx", [] );

+		}

+

+		return this.each(function() {

+			var dequeue = true,

+				index = type != null && type + "queueHooks",

+				timers = jQuery.timers,

+				data = jQuery._data( this );

+

+			if ( index ) {

+				if ( data[ index ] && data[ index ].stop ) {

+					stopQueue( data[ index ] );

+				}

+			} else {

+				for ( index in data ) {

+					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {

+						stopQueue( data[ index ] );

+					}

+				}

+			}

+

+			for ( index = timers.length; index--; ) {

+				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {

+					timers[ index ].anim.stop( gotoEnd );

+					dequeue = false;

+					timers.splice( index, 1 );

+				}

+			}

+

+			// start the next in the queue if the last step wasn't forced

+			// timers currently will call their complete callbacks, which will dequeue

+			// but only if they were gotoEnd

+			if ( dequeue || !gotoEnd ) {

+				jQuery.dequeue( this, type );

+			}

+		});

+	},

+	finish: function( type ) {

+		if ( type !== false ) {

+			type = type || "fx";

+		}

+		return this.each(function() {

+			var index,

+				data = jQuery._data( this ),

+				queue = data[ type + "queue" ],

+				hooks = data[ type + "queueHooks" ],

+				timers = jQuery.timers,

+				length = queue ? queue.length : 0;

+

+			// enable finishing flag on private data

+			data.finish = true;

+

+			// empty the queue first

+			jQuery.queue( this, type, [] );

+

+			if ( hooks && hooks.stop ) {

+				hooks.stop.call( this, true );

+			}

+

+			// look for any active animations, and finish them

+			for ( index = timers.length; index--; ) {

+				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {

+					timers[ index ].anim.stop( true );

+					timers.splice( index, 1 );

+				}

+			}

+

+			// look for any animations in the old queue and finish them

+			for ( index = 0; index < length; index++ ) {

+				if ( queue[ index ] && queue[ index ].finish ) {

+					queue[ index ].finish.call( this );

+				}

+			}

+

+			// turn off finishing flag

+			delete data.finish;

+		});

+	}

+});

+

+// Generate parameters to create a standard animation

+function genFx( type, includeWidth ) {

+	var which,

+		attrs = { height: type },

+		i = 0;

+

+	// if we include width, step value is 1 to do all cssExpand values,

+	// if we don't include width, step value is 2 to skip over Left and Right

+	includeWidth = includeWidth? 1 : 0;

+	for( ; i < 4 ; i += 2 - includeWidth ) {

+		which = cssExpand[ i ];

+		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;

+	}

+

+	if ( includeWidth ) {

+		attrs.opacity = attrs.width = type;

+	}

+

+	return attrs;

+}

+

+// Generate shortcuts for custom animations

+jQuery.each({

+	slideDown: genFx("show"),

+	slideUp: genFx("hide"),

+	slideToggle: genFx("toggle"),

+	fadeIn: { opacity: "show" },

+	fadeOut: { opacity: "hide" },

+	fadeToggle: { opacity: "toggle" }

+}, function( name, props ) {

+	jQuery.fn[ name ] = function( speed, easing, callback ) {

+		return this.animate( props, speed, easing, callback );

+	};

+});

+

+jQuery.speed = function( speed, easing, fn ) {

+	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {

+		complete: fn || !fn && easing ||

+			jQuery.isFunction( speed ) && speed,

+		duration: speed,

+		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing

+	};

+

+	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :

+		opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;

+

+	// normalize opt.queue - true/undefined/null -> "fx"

+	if ( opt.queue == null || opt.queue === true ) {

+		opt.queue = "fx";

+	}

+

+	// Queueing

+	opt.old = opt.complete;

+

+	opt.complete = function() {

+		if ( jQuery.isFunction( opt.old ) ) {

+			opt.old.call( this );

+		}

+

+		if ( opt.queue ) {

+			jQuery.dequeue( this, opt.queue );

+		}

+	};

+

+	return opt;

+};

+

+jQuery.easing = {

+	linear: function( p ) {

+		return p;

+	},

+	swing: function( p ) {

+		return 0.5 - Math.cos( p*Math.PI ) / 2;

+	}

+};

+

+jQuery.timers = [];

+jQuery.fx = Tween.prototype.init;

+jQuery.fx.tick = function() {

+	var timer,

+		timers = jQuery.timers,

+		i = 0;

+

+	fxNow = jQuery.now();

+

+	for ( ; i < timers.length; i++ ) {

+		timer = timers[ i ];

+		// Checks the timer has not already been removed

+		if ( !timer() && timers[ i ] === timer ) {

+			timers.splice( i--, 1 );

+		}

+	}

+

+	if ( !timers.length ) {

+		jQuery.fx.stop();

+	}

+	fxNow = undefined;

+};

+

+jQuery.fx.timer = function( timer ) {

+	if ( timer() && jQuery.timers.push( timer ) ) {

+		jQuery.fx.start();

+	}

+};

+

+jQuery.fx.interval = 13;

+

+jQuery.fx.start = function() {

+	if ( !timerId ) {

+		timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );

+	}

+};

+

+jQuery.fx.stop = function() {

+	clearInterval( timerId );

+	timerId = null;

+};

+

+jQuery.fx.speeds = {

+	slow: 600,

+	fast: 200,

+	// Default speed

+	_default: 400

+};

+

+// Back Compat <1.8 extension point

+jQuery.fx.step = {};

+

+if ( jQuery.expr && jQuery.expr.filters ) {

+	jQuery.expr.filters.animated = function( elem ) {

+		return jQuery.grep(jQuery.timers, function( fn ) {

+			return elem === fn.elem;

+		}).length;

+	};

+}

+jQuery.fn.offset = function( options ) {

+	if ( arguments.length ) {

+		return options === undefined ?

+			this :

+			this.each(function( i ) {

+				jQuery.offset.setOffset( this, options, i );

+			});

+	}

+

+	var docElem, win,

+		box = { top: 0, left: 0 },

+		elem = this[ 0 ],

+		doc = elem && elem.ownerDocument;

+

+	if ( !doc ) {

+		return;

+	}

+

+	docElem = doc.documentElement;

+

+	// Make sure it's not a disconnected DOM node

+	if ( !jQuery.contains( docElem, elem ) ) {

+		return box;

+	}

+

+	// If we don't have gBCR, just use 0,0 rather than error

+	// BlackBerry 5, iOS 3 (original iPhone)

+	if ( typeof elem.getBoundingClientRect !== core_strundefined ) {

+		box = elem.getBoundingClientRect();

+	}

+	win = getWindow( doc );

+	return {

+		top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),

+		left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )

+	};

+};

+

+jQuery.offset = {

+

+	setOffset: function( elem, options, i ) {

+		var position = jQuery.css( elem, "position" );

+

+		// set position first, in-case top/left are set even on static elem

+		if ( position === "static" ) {

+			elem.style.position = "relative";

+		}

+

+		var curElem = jQuery( elem ),

+			curOffset = curElem.offset(),

+			curCSSTop = jQuery.css( elem, "top" ),

+			curCSSLeft = jQuery.css( elem, "left" ),

+			calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,

+			props = {}, curPosition = {}, curTop, curLeft;

+

+		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed

+		if ( calculatePosition ) {

+			curPosition = curElem.position();

+			curTop = curPosition.top;

+			curLeft = curPosition.left;

+		} else {

+			curTop = parseFloat( curCSSTop ) || 0;

+			curLeft = parseFloat( curCSSLeft ) || 0;

+		}

+

+		if ( jQuery.isFunction( options ) ) {

+			options = options.call( elem, i, curOffset );

+		}

+

+		if ( options.top != null ) {

+			props.top = ( options.top - curOffset.top ) + curTop;

+		}

+		if ( options.left != null ) {

+			props.left = ( options.left - curOffset.left ) + curLeft;

+		}

+

+		if ( "using" in options ) {

+			options.using.call( elem, props );

+		} else {

+			curElem.css( props );

+		}

+	}

+};

+

+

+jQuery.fn.extend({

+

+	position: function() {

+		if ( !this[ 0 ] ) {

+			return;

+		}

+

+		var offsetParent, offset,

+			parentOffset = { top: 0, left: 0 },

+			elem = this[ 0 ];

+

+		// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent

+		if ( jQuery.css( elem, "position" ) === "fixed" ) {

+			// we assume that getBoundingClientRect is available when computed position is fixed

+			offset = elem.getBoundingClientRect();

+		} else {

+			// Get *real* offsetParent

+			offsetParent = this.offsetParent();

+

+			// Get correct offsets

+			offset = this.offset();

+			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {

+				parentOffset = offsetParent.offset();

+			}

+

+			// Add offsetParent borders

+			parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );

+			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );

+		}

+

+		// Subtract parent offsets and element margins

+		// note: when an element has margin: auto the offsetLeft and marginLeft

+		// are the same in Safari causing offset.left to incorrectly be 0

+		return {

+			top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),

+			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)

+		};

+	},

+

+	offsetParent: function() {

+		return this.map(function() {

+			var offsetParent = this.offsetParent || docElem;

+			while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {

+				offsetParent = offsetParent.offsetParent;

+			}

+			return offsetParent || docElem;

+		});

+	}

+});

+

+

+// Create scrollLeft and scrollTop methods

+jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {

+	var top = /Y/.test( prop );

+

+	jQuery.fn[ method ] = function( val ) {

+		return jQuery.access( this, function( elem, method, val ) {

+			var win = getWindow( elem );

+

+			if ( val === undefined ) {

+				return win ? (prop in win) ? win[ prop ] :

+					win.document.documentElement[ method ] :

+					elem[ method ];

+			}

+

+			if ( win ) {

+				win.scrollTo(

+					!top ? val : jQuery( win ).scrollLeft(),

+					top ? val : jQuery( win ).scrollTop()

+				);

+

+			} else {

+				elem[ method ] = val;

+			}

+		}, method, val, arguments.length, null );

+	};

+});

+

+function getWindow( elem ) {

+	return jQuery.isWindow( elem ) ?

+		elem :

+		elem.nodeType === 9 ?

+			elem.defaultView || elem.parentWindow :

+			false;

+}

+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods

+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {

+	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {

+		// margin is only for outerHeight, outerWidth

+		jQuery.fn[ funcName ] = function( margin, value ) {

+			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),

+				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );

+

+			return jQuery.access( this, function( elem, type, value ) {

+				var doc;

+

+				if ( jQuery.isWindow( elem ) ) {

+					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there

+					// isn't a whole lot we can do. See pull request at this URL for discussion:

+					// https://github.com/jquery/jquery/pull/764

+					return elem.document.documentElement[ "client" + name ];

+				}

+

+				// Get document width or height

+				if ( elem.nodeType === 9 ) {

+					doc = elem.documentElement;

+

+					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest

+					// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.

+					return Math.max(

+						elem.body[ "scroll" + name ], doc[ "scroll" + name ],

+						elem.body[ "offset" + name ], doc[ "offset" + name ],

+						doc[ "client" + name ]

+					);

+				}

+

+				return value === undefined ?

+					// Get width or height on the element, requesting but not forcing parseFloat

+					jQuery.css( elem, type, extra ) :

+

+					// Set width or height on the element

+					jQuery.style( elem, type, value, extra );

+			}, type, chainable ? margin : undefined, chainable, null );

+		};

+	});

+});

+// Limit scope pollution from any deprecated API

+// (function() {

+

+// The number of elements contained in the matched element set

+jQuery.fn.size = function() {

+	return this.length;

+};

+

+jQuery.fn.andSelf = jQuery.fn.addBack;

+

+// })();

+if ( typeof module === "object" && module && typeof module.exports === "object" ) {

+	// Expose jQuery as module.exports in loaders that implement the Node

+	// module pattern (including browserify). Do not create the global, since

+	// the user will be storing it themselves locally, and globals are frowned

+	// upon in the Node module world.

+	module.exports = jQuery;

+} else {

+	// Otherwise expose jQuery to the global object as usual

+	window.jQuery = window.$ = jQuery;

+

+	// Register as a named AMD module, since jQuery can be concatenated with other

+	// files that may use define, but not via a proper concatenation script that

+	// understands anonymous AMD modules. A named AMD is safest and most robust

+	// way to register. Lowercase jquery is used because AMD module names are

+	// derived from file names, and jQuery is normally delivered in a lowercase

+	// file name. Do this after creating the global so that if an AMD module wants

+	// to call noConflict to hide this version of jQuery, it will work.

+	if ( typeof define === "function" && define.amd ) {

+		define( "jquery", [], function () { return jQuery; } );

+	}

+}

+

+})( window );

+/*

+ * jQuery Migrate

+ * Copyright jQuery Foundation and other contributors

+ */

+(function( jQuery, window, undefined ) {

+// See http://bugs.jquery.com/ticket/13335

+// "use strict";

+

+

+jQuery.migrateVersion = "0.0.0";

+

+

+var warnedAbout = {};

+

+// List of warnings already given; public read only

+jQuery.migrateWarnings = [];

+

+// Set to true to prevent console output; migrateWarnings still maintained

+jQuery.migrateMute = true;

+

+// Show a message on the console so devs know we're active

+if ( window.console && window.console.log && !jQuery.migrateMute ) {

+	window.console.log( "JQMIGRATE: Migrate is installed" +

+		( jQuery.migrateMute ? "" : " with logging active" ) +

+		", version " + jQuery.migrateVersion );

+}

+

+// Set to false to disable traces that appear with warnings

+if ( jQuery.migrateTrace === undefined ) {

+	jQuery.migrateTrace = false;

+}

+

+// Forget any warnings we've already given; public

+jQuery.migrateReset = function() {

+	warnedAbout = {};

+	jQuery.migrateWarnings.length = 0;

+};

+

+function migrateWarn( msg) {

+	var console = window.console;

+	if ( !warnedAbout[ msg ] ) {

+		warnedAbout[ msg ] = true;

+		jQuery.migrateWarnings.push( msg );

+		if ( console && console.warn && !jQuery.migrateMute ) {

+			console.warn( "JQMIGRATE: " + msg );

+			if ( jQuery.migrateTrace && console.trace ) {

+				console.trace();

+			}

+		}

+	}

+}

+

+function migrateWarnProp( obj, prop, value, msg ) {

+	if ( Object.defineProperty ) {

+		// On ES5 browsers (non-oldIE), warn if the code tries to get prop;

+		// allow property to be overwritten in case some other plugin wants it

+		try {

+			Object.defineProperty( obj, prop, {

+				configurable: true,

+				enumerable: true,

+				get: function() {

+					migrateWarn( msg );

+					return value;

+				},

+				set: function( newValue ) {

+					migrateWarn( msg );

+					value = newValue;

+				}

+			});

+			return;

+		} catch( err ) {

+			// IE8 is a dope about Object.defineProperty, can't warn there

+		}

+	}

+

+	// Non-ES5 (or broken) browser; just set the property

+	jQuery._definePropertyBroken = true;

+	obj[ prop ] = value;

+}

+

+if ( document.compatMode === "BackCompat" ) {

+	// jQuery has never supported or tested Quirks Mode

+	migrateWarn( "jQuery is not compatible with Quirks Mode" );

+}

+

+

+var attrFn = jQuery( "<input/>", { size: 1 } ).attr("size") && jQuery.attrFn,

+	oldAttr = jQuery.attr,

+	valueAttrGet = jQuery.attrHooks.value && jQuery.attrHooks.value.get ||

+		function() { return null; },

+	valueAttrSet = jQuery.attrHooks.value && jQuery.attrHooks.value.set ||

+		function() { return undefined; },

+	rnoType = /^(?:input|button)$/i,

+	rnoAttrNodeType = /^[238]$/,

+	rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,

+	ruseDefault = /^(?:checked|selected)$/i;

+

+// jQuery.attrFn

+migrateWarnProp( jQuery, "attrFn", attrFn || {}, "jQuery.attrFn is deprecated" );

+

+jQuery.attr = function( elem, name, value, pass ) {

+	var lowerName = name.toLowerCase(),

+		nType = elem && elem.nodeType;

+

+	if ( pass ) {

+		// Since pass is used internally, we only warn for new jQuery

+		// versions where there isn't a pass arg in the formal params

+		if ( oldAttr.length < 4 ) {

+			migrateWarn("jQuery.fn.attr( props, pass ) is deprecated");

+		}

+		if ( elem && !rnoAttrNodeType.test( nType ) &&

+			(attrFn ? name in attrFn : jQuery.isFunction(jQuery.fn[name])) ) {

+			return jQuery( elem )[ name ]( value );

+		}

+	}

+

+	// Warn if user tries to set `type`, since it breaks on IE 6/7/8; by checking

+	// for disconnected elements we don't warn on $( "<button>", { type: "button" } ).

+	if ( name === "type" && value !== undefined && rnoType.test( elem.nodeName ) && elem.parentNode ) {

+		migrateWarn("Can't change the 'type' of an input or button in IE 6/7/8");

+	}

+

+	// Restore boolHook for boolean property/attribute synchronization

+	if ( !jQuery.attrHooks[ lowerName ] && rboolean.test( lowerName ) ) {

+		jQuery.attrHooks[ lowerName ] = {

+			get: function( elem, name ) {

+				// Align boolean attributes with corresponding properties

+				// Fall back to attribute presence where some booleans are not supported

+				var attrNode,

+					property = jQuery.prop( elem, name );

+				return property === true || typeof property !== "boolean" &&

+					( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?

+

+					name.toLowerCase() :

+					undefined;

+			},

+			set: function( elem, value, name ) {

+				var propName;

+				if ( value === false ) {

+					// Remove boolean attributes when set to false

+					jQuery.removeAttr( elem, name );

+				} else {

+					// value is true since we know at this point it's type boolean and not false

+					// Set boolean attributes to the same name and set the DOM property

+					propName = jQuery.propFix[ name ] || name;

+					if ( propName in elem ) {

+						// Only set the IDL specifically if it already exists on the element

+						elem[ propName ] = true;

+					}

+

+					elem.setAttribute( name, name.toLowerCase() );

+				}

+				return name;

+			}

+		};

+

+		// Warn only for attributes that can remain distinct from their properties post-1.9

+		if ( ruseDefault.test( lowerName ) ) {

+			migrateWarn( "jQuery.fn.attr('" + lowerName + "') might use property instead of attribute" );

+		}

+	}

+

+	return oldAttr.call( jQuery, elem, name, value );

+};

+

+// attrHooks: value

+jQuery.attrHooks.value = {

+	get: function( elem, name ) {

+		var nodeName = ( elem.nodeName || "" ).toLowerCase();

+		if ( nodeName === "button" ) {

+			return valueAttrGet.apply( this, arguments );

+		}

+		if ( nodeName !== "input" && nodeName !== "option" ) {

+			migrateWarn("jQuery.fn.attr('value') no longer gets properties");

+		}

+		return name in elem ?

+			elem.value :

+			null;

+	},

+	set: function( elem, value ) {

+		var nodeName = ( elem.nodeName || "" ).toLowerCase();

+		if ( nodeName === "button" ) {

+			return valueAttrSet.apply( this, arguments );

+		}

+		if ( nodeName !== "input" && nodeName !== "option" ) {

+			migrateWarn("jQuery.fn.attr('value', val) no longer sets properties");

+		}

+		// Does not return so that setAttribute is also used

+		elem.value = value;

+	}

+};

+

+

+var matched, browser,

+	oldInit = jQuery.fn.init,

+	oldFind = jQuery.find,

+	oldParseJSON = jQuery.parseJSON,

+	rspaceAngle = /^\s*</,

+	rattrHashTest = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/,

+	rattrHashGlob = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/g,

+	// Note: XSS check is done below after string is trimmed

+	rquickExpr = /^([^<]*)(<[\w\W]+>)([^>]*)$/;

+

+// $(html) "looks like html" rule change

+jQuery.fn.init = function( selector, context, rootjQuery ) {

+	var match, ret;

+

+	if ( selector && typeof selector === "string" ) {

+		if ( !jQuery.isPlainObject( context ) &&

+				(match = rquickExpr.exec( jQuery.trim( selector ) )) && match[ 0 ] ) {

+

+			// This is an HTML string according to the "old" rules; is it still?

+			if ( !rspaceAngle.test( selector ) ) {

+				migrateWarn("$(html) HTML strings must start with '<' character");

+			}

+			if ( match[ 3 ] ) {

+				migrateWarn("$(html) HTML text after last tag is ignored");

+			}

+

+			// Consistently reject any HTML-like string starting with a hash (gh-9521)

+			// Note that this may break jQuery 1.6.x code that otherwise would work.

+			if ( match[ 0 ].charAt( 0 ) === "#" ) {

+				migrateWarn("HTML string cannot start with a '#' character");

+				jQuery.error("JQMIGRATE: Invalid selector string (XSS)");

+			}

+

+			// Now process using loose rules; let pre-1.8 play too

+			// Is this a jQuery context? parseHTML expects a DOM element (#178)

+			if ( context && context.context && context.context.nodeType ) {

+				context = context.context;

+			}

+

+			if ( jQuery.parseHTML ) {

+				return oldInit.call( this,

+						jQuery.parseHTML( match[ 2 ], context && context.ownerDocument ||

+							context || document, true ), context, rootjQuery );

+			}

+		}

+	}

+

+	ret = oldInit.apply( this, arguments );

+

+	// Fill in selector and context properties so .live() works

+	if ( selector && selector.selector !== undefined ) {

+		// A jQuery object, copy its properties

+		ret.selector = selector.selector;

+		ret.context = selector.context;

+

+	} else {

+		ret.selector = typeof selector === "string" ? selector : "";

+		if ( selector ) {

+			ret.context = selector.nodeType? selector : context || document;

+		}

+	}

+

+	return ret;

+};

+jQuery.fn.init.prototype = jQuery.fn;

+

+jQuery.find = function( selector ) {

+	var args = Array.prototype.slice.call( arguments );

+

+	// Support: PhantomJS 1.x

+	// String#match fails to match when used with a //g RegExp, only on some strings

+	if ( typeof selector === "string" && rattrHashTest.test( selector ) ) {

+

+		// The nonstandard and undocumented unquoted-hash was removed in jQuery 1.12.0

+		// First see if qS thinks it's a valid selector, if so avoid a false positive

+		try {

+			document.querySelector( selector );

+		} catch ( err1 ) {

+

+			// Didn't *look* valid to qSA, warn and try quoting what we think is the value

+			selector = selector.replace( rattrHashGlob, function( _, attr, op, value ) {

+				return "[" + attr + op + "\"" + value + "\"]";

+			} );

+

+			// If the regexp *may* have created an invalid selector, don't update it

+			// Note that there may be false alarms if selector uses jQuery extensions

+			try {

+				document.querySelector( selector );

+				migrateWarn( "Attribute selector with '#' must be quoted: " + args[ 0 ] );

+				args[ 0 ] = selector;

+			} catch ( err2 ) {

+				migrateWarn( "Attribute selector with '#' was not fixed: " + args[ 0 ] );

+			}

+		}

+	}

+

+	return oldFind.apply( this, args );

+};

+

+// Copy properties attached to original jQuery.find method (e.g. .attr, .isXML)

+var findProp;

+for ( findProp in oldFind ) {

+	if ( Object.prototype.hasOwnProperty.call( oldFind, findProp ) ) {

+		jQuery.find[ findProp ] = oldFind[ findProp ];

+	}

+}

+

+// Let $.parseJSON(falsy_value) return null

+jQuery.parseJSON = function( json ) {

+	if ( !json ) {

+		migrateWarn("jQuery.parseJSON requires a valid JSON string");

+		return null;

+	}

+	return oldParseJSON.apply( this, arguments );

+};

+

+jQuery.uaMatch = function( ua ) {

+	ua = ua.toLowerCase();

+

+	var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||

+		/(webkit)[ \/]([\w.]+)/.exec( ua ) ||

+		/(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||

+		/(msie) ([\w.]+)/.exec( ua ) ||

+		ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) ||

+		[];

+

+	return {

+		browser: match[ 1 ] || "",

+		version: match[ 2 ] || "0"

+	};

+};

+

+// Don't clobber any existing jQuery.browser in case it's different

+if ( !jQuery.browser ) {

+	matched = jQuery.uaMatch( navigator.userAgent );

+	browser = {};

+

+	if ( matched.browser ) {

+		browser[ matched.browser ] = true;

+		browser.version = matched.version;

+	}

+

+	// Chrome is Webkit, but Webkit is also Safari.

+	if ( browser.chrome ) {

+		browser.webkit = true;

+	} else if ( browser.webkit ) {

+		browser.safari = true;

+	}

+

+	jQuery.browser = browser;

+}

+

+// Warn if the code tries to get jQuery.browser

+migrateWarnProp( jQuery, "browser", jQuery.browser, "jQuery.browser is deprecated" );

+

+// jQuery.boxModel deprecated in 1.3, jQuery.support.boxModel deprecated in 1.7

+jQuery.boxModel = jQuery.support.boxModel = (document.compatMode === "CSS1Compat");

+migrateWarnProp( jQuery, "boxModel", jQuery.boxModel, "jQuery.boxModel is deprecated" );

+migrateWarnProp( jQuery.support, "boxModel", jQuery.support.boxModel, "jQuery.support.boxModel is deprecated" );

+

+jQuery.sub = function() {

+	function jQuerySub( selector, context ) {

+		return new jQuerySub.fn.init( selector, context );

+	}

+	jQuery.extend( true, jQuerySub, this );

+	jQuerySub.superclass = this;

+	jQuerySub.fn = jQuerySub.prototype = this();

+	jQuerySub.fn.constructor = jQuerySub;

+	jQuerySub.sub = this.sub;

+	jQuerySub.fn.init = function init( selector, context ) {

+		var instance = jQuery.fn.init.call( this, selector, context, rootjQuerySub );

+		return instance instanceof jQuerySub ?

+			instance :

+			jQuerySub( instance );

+	};

+	jQuerySub.fn.init.prototype = jQuerySub.fn;

+	var rootjQuerySub = jQuerySub(document);

+	migrateWarn( "jQuery.sub() is deprecated" );

+	return jQuerySub;

+};

+

+// The number of elements contained in the matched element set

+jQuery.fn.size = function() {

+	migrateWarn( "jQuery.fn.size() is deprecated; use the .length property" );

+	return this.length;

+};

+

+

+var internalSwapCall = false;

+

+// If this version of jQuery has .swap(), don't false-alarm on internal uses

+if ( jQuery.swap ) {

+	jQuery.each( [ "height", "width", "reliableMarginRight" ], function( _, name ) {

+		var oldHook = jQuery.cssHooks[ name ] && jQuery.cssHooks[ name ].get;

+

+		if ( oldHook ) {

+			jQuery.cssHooks[ name ].get = function() {

+				var ret;

+

+				internalSwapCall = true;

+				ret = oldHook.apply( this, arguments );

+				internalSwapCall = false;

+				return ret;

+			};

+		}

+	});

+}

+

+jQuery.swap = function( elem, options, callback, args ) {

+	var ret, name,

+		old = {};

+

+	if ( !internalSwapCall ) {

+		migrateWarn( "jQuery.swap() is undocumented and deprecated" );

+	}

+

+	// Remember the old values, and insert the new ones

+	for ( name in options ) {

+		old[ name ] = elem.style[ name ];

+		elem.style[ name ] = options[ name ];

+	}

+

+	ret = callback.apply( elem, args || [] );

+

+	// Revert the old values

+	for ( name in options ) {

+		elem.style[ name ] = old[ name ];

+	}

+

+	return ret;

+};

+

+

+// Ensure that $.ajax gets the new parseJSON defined in core.js

+jQuery.ajaxSetup({

+	converters: {

+		"text json": jQuery.parseJSON

+	}

+});

+

+

+var oldFnData = jQuery.fn.data;

+

+jQuery.fn.data = function( name ) {

+	var ret, evt,

+		elem = this[0];

+

+	// Handles 1.7 which has this behavior and 1.8 which doesn't

+	if ( elem && name === "events" && arguments.length === 1 ) {

+		ret = jQuery.data( elem, name );

+		evt = jQuery._data( elem, name );

+		if ( ( ret === undefined || ret === evt ) && evt !== undefined ) {

+			migrateWarn("Use of jQuery.fn.data('events') is deprecated");

+			return evt;

+		}

+	}

+	return oldFnData.apply( this, arguments );

+};

+

+

+var rscriptType = /\/(java|ecma)script/i;

+

+// Since jQuery.clean is used internally on older versions, we only shim if it's missing

+if ( !jQuery.clean ) {

+	jQuery.clean = function( elems, context, fragment, scripts ) {

+		// Set context per 1.8 logic

+		context = context || document;

+		context = !context.nodeType && context[0] || context;

+		context = context.ownerDocument || context;

+

+		migrateWarn("jQuery.clean() is deprecated");

+

+		var i, elem, handleScript, jsTags,

+			ret = [];

+

+		jQuery.merge( ret, jQuery.buildFragment( elems, context ).childNodes );

+

+		// Complex logic lifted directly from jQuery 1.8

+		if ( fragment ) {

+			// Special handling of each script element

+			handleScript = function( elem ) {

+				// Check if we consider it executable

+				if ( !elem.type || rscriptType.test( elem.type ) ) {

+					// Detach the script and store it in the scripts array (if provided) or the fragment

+					// Return truthy to indicate that it has been handled

+					return scripts ?

+						scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) :

+						fragment.appendChild( elem );

+				}

+			};

+

+			for ( i = 0; (elem = ret[i]) != null; i++ ) {

+				// Check if we're done after handling an executable script

+				if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) {

+					// Append to fragment and handle embedded scripts

+					fragment.appendChild( elem );

+					if ( typeof elem.getElementsByTagName !== "undefined" ) {

+						// handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration

+						jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript );

+

+						// Splice the scripts into ret after their former ancestor and advance our index beyond them

+						ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );

+						i += jsTags.length;

+					}

+				}

+			}

+		}

+

+		return ret;

+	};

+}

+

+var eventAdd = jQuery.event.add,

+	eventRemove = jQuery.event.remove,

+	eventTrigger = jQuery.event.trigger,

+	oldToggle = jQuery.fn.toggle,

+	oldLive = jQuery.fn.live,

+	oldDie = jQuery.fn.die,

+	oldLoad = jQuery.fn.load,

+	ajaxEvents = "ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",

+	rajaxEvent = new RegExp( "\\b(?:" + ajaxEvents + ")\\b" ),

+	rhoverHack = /(?:^|\s)hover(\.\S+|)\b/,

+	hoverHack = function( events ) {

+		if ( typeof( events ) !== "string" || jQuery.event.special.hover ) {

+			return events;

+		}

+		if ( rhoverHack.test( events ) ) {

+			migrateWarn("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'");

+		}

+		return events && events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );

+	};

+

+// Event props removed in 1.9, put them back if needed; no practical way to warn them

+if ( jQuery.event.props && jQuery.event.props[ 0 ] !== "attrChange" ) {

+	jQuery.event.props.unshift( "attrChange", "attrName", "relatedNode", "srcElement" );

+}

+

+// Undocumented jQuery.event.handle was "deprecated" in jQuery 1.7

+if ( jQuery.event.dispatch ) {

+	migrateWarnProp( jQuery.event, "handle", jQuery.event.dispatch, "jQuery.event.handle is undocumented and deprecated" );

+}

+

+// Support for 'hover' pseudo-event and ajax event warnings

+jQuery.event.add = function( elem, types, handler, data, selector ){

+	if ( elem !== document && rajaxEvent.test( types ) ) {

+		migrateWarn( "AJAX events should be attached to document: " + types );

+	}

+	eventAdd.call( this, elem, hoverHack( types || "" ), handler, data, selector );

+};

+jQuery.event.remove = function( elem, types, handler, selector, mappedTypes ){

+	eventRemove.call( this, elem, hoverHack( types ) || "", handler, selector, mappedTypes );

+};

+

+jQuery.each( [ "load", "unload", "error" ], function( _, name ) {

+

+	jQuery.fn[ name ] = function() {

+		var args = Array.prototype.slice.call( arguments, 0 );

+

+		// If this is an ajax load() the first arg should be the string URL;

+		// technically this could also be the "Anything" arg of the event .load()

+		// which just goes to show why this dumb signature has been deprecated!

+		// jQuery custom builds that exclude the Ajax module justifiably die here.

+		if ( name === "load" && typeof args[ 0 ] === "string" ) {

+			return oldLoad.apply( this, args );

+		}

+

+		migrateWarn( "jQuery.fn." + name + "() is deprecated" );

+

+		args.splice( 0, 0, name );

+		if ( arguments.length ) {

+			return this.bind.apply( this, args );

+		}

+

+		// Use .triggerHandler here because:

+		// - load and unload events don't need to bubble, only applied to window or image

+		// - error event should not bubble to window, although it does pre-1.7

+		// See http://bugs.jquery.com/ticket/11820

+		this.triggerHandler.apply( this, args );

+		return this;

+	};

+

+});

+

+jQuery.fn.toggle = function( fn, fn2 ) {

+

+	// Don't mess with animation or css toggles

+	if ( !jQuery.isFunction( fn ) || !jQuery.isFunction( fn2 ) ) {

+		return oldToggle.apply( this, arguments );

+	}

+	migrateWarn("jQuery.fn.toggle(handler, handler...) is deprecated");

+

+	// Save reference to arguments for access in closure

+	var args = arguments,

+		guid = fn.guid || jQuery.guid++,

+		i = 0,

+		toggler = function( event ) {

+			// Figure out which function to execute

+			var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;

+			jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );

+

+			// Make sure that clicks stop

+			event.preventDefault();

+

+			// and execute the function

+			return args[ lastToggle ].apply( this, arguments ) || false;

+		};

+

+	// link all the functions, so any of them can unbind this click handler

+	toggler.guid = guid;

+	while ( i < args.length ) {

+		args[ i++ ].guid = guid;

+	}

+

+	return this.click( toggler );

+};

+

+jQuery.fn.live = function( types, data, fn ) {

+	migrateWarn("jQuery.fn.live() is deprecated");

+	if ( oldLive ) {

+		return oldLive.apply( this, arguments );

+	}

+	jQuery( this.context ).on( types, this.selector, data, fn );

+	return this;

+};

+

+jQuery.fn.die = function( types, fn ) {

+	migrateWarn("jQuery.fn.die() is deprecated");

+	if ( oldDie ) {

+		return oldDie.apply( this, arguments );

+	}

+	jQuery( this.context ).off( types, this.selector || "**", fn );

+	return this;

+};

+

+// Turn global events into document-triggered events

+jQuery.event.trigger = function( event, data, elem, onlyHandlers  ){

+	if ( !elem && !rajaxEvent.test( event ) ) {

+		migrateWarn( "Global events are undocumented and deprecated" );

+	}

+	return eventTrigger.call( this,  event, data, elem || document, onlyHandlers  );

+};

+jQuery.each( ajaxEvents.split("|"),

+	function( _, name ) {

+		jQuery.event.special[ name ] = {

+			setup: function() {

+				var elem = this;

+

+				// The document needs no shimming; must be !== for oldIE

+				if ( elem !== document ) {

+					jQuery.event.add( document, name + "." + jQuery.guid, function() {

+						jQuery.event.trigger( name, Array.prototype.slice.call( arguments, 1 ), elem, true );

+					});

+					jQuery._data( this, name, jQuery.guid++ );

+				}

+				return false;

+			},

+			teardown: function() {

+				if ( this !== document ) {

+					jQuery.event.remove( document, name + "." + jQuery._data( this, name ) );

+				}

+				return false;

+			}

+		};

+	}

+);

+

+jQuery.event.special.ready = {

+	setup: function() {

+		if ( this === document ) {

+			migrateWarn( "'ready' event is deprecated" );

+		}

+	}

+};

+

+var oldSelf = jQuery.fn.andSelf || jQuery.fn.addBack,

+	oldFnFind = jQuery.fn.find;

+

+jQuery.fn.andSelf = function() {

+	migrateWarn("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()");

+	return oldSelf.apply( this, arguments );

+};

+

+jQuery.fn.find = function( selector ) {

+	var ret = oldFnFind.apply( this, arguments );

+	ret.context = this.context;

+	ret.selector = this.selector ? this.selector + " " + selector : selector;

+	return ret;

+};

+

+

+// jQuery 1.6 did not support Callbacks, do not warn there

+if ( jQuery.Callbacks ) {

+

+	var oldDeferred = jQuery.Deferred,

+		tuples = [

+			// action, add listener, callbacks, .then handlers, final state

+			[ "resolve", "done", jQuery.Callbacks("once memory"),

+				jQuery.Callbacks("once memory"), "resolved" ],

+			[ "reject", "fail", jQuery.Callbacks("once memory"),

+				jQuery.Callbacks("once memory"), "rejected" ],

+			[ "notify", "progress", jQuery.Callbacks("memory"),

+				jQuery.Callbacks("memory") ]

+		];

+

+	jQuery.Deferred = function( func ) {

+		var deferred = oldDeferred(),

+			promise = deferred.promise();

+

+		deferred.pipe = promise.pipe = function( /* fnDone, fnFail, fnProgress */ ) {

+			var fns = arguments;

+

+			migrateWarn( "deferred.pipe() is deprecated" );

+

+			return jQuery.Deferred(function( newDefer ) {

+				jQuery.each( tuples, function( i, tuple ) {

+					var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];

+					// deferred.done(function() { bind to newDefer or newDefer.resolve })

+					// deferred.fail(function() { bind to newDefer or newDefer.reject })

+					// deferred.progress(function() { bind to newDefer or newDefer.notify })

+					deferred[ tuple[1] ](function() {

+						var returned = fn && fn.apply( this, arguments );

+						if ( returned && jQuery.isFunction( returned.promise ) ) {

+							returned.promise()

+								.done( newDefer.resolve )

+								.fail( newDefer.reject )

+								.progress( newDefer.notify );

+						} else {

+							newDefer[ tuple[ 0 ] + "With" ](

+								this === promise ? newDefer.promise() : this,

+								fn ? [ returned ] : arguments

+							);

+						}

+					});

+				});

+				fns = null;

+			}).promise();

+

+		};

+

+		deferred.isResolved = function() {

+			migrateWarn( "deferred.isResolved is deprecated" );

+			return deferred.state() === "resolved";

+		};

+

+		deferred.isRejected = function() {

+			migrateWarn( "deferred.isRejected is deprecated" );

+			return deferred.state() === "rejected";

+		};

+

+		if ( func ) {

+			func.call( deferred, deferred );

+		}

+

+		return deferred;

+	};

+

+}

+

+})( jQuery, window );
\ No newline at end of file
diff --git a/ap/app/zte_webui_min/js/3rd/require-jquery.js b/ap/app/zte_webui_min/js/3rd/require-jquery.js
index 4167af3..0a9eacf 100755
--- a/ap/app/zte_webui_min/js/3rd/require-jquery.js
+++ b/ap/app/zte_webui_min/js/3rd/require-jquery.js
@@ -1,11441 +1,12578 @@
-/** vim: et:ts=4:sw=4:sts=4
- * @license RequireJS 2.0.2 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.
- * Available via the MIT or new BSD license.
- * see: http://github.com/jrburke/requirejs for details
- */
-/*jslint regexp: true, nomen: true */
-/*global window, navigator, document, importScripts, jQuery, setTimeout, opera */
-
-var requirejs, require, define;
-(function (global) {
-    'use strict';
-
-    var version = '0.0.0',
-        commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,
-        cjsRequireRegExp = /require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,
-        jsSuffixRegExp = /\.js$/,
-        currDirRegExp = /^\.\//,
-        ostring = Object.prototype.toString,
-        ap = Array.prototype,
-        aps = ap.slice,
-        apsp = ap.splice,
-        isBrowser = !!(typeof window !== 'undefined' && navigator && document),
-        isWebWorker = !isBrowser && typeof importScripts !== 'undefined',
-        //PS3 indicates loaded and complete, but need to wait for complete
-        //specifically. Sequence is 'loading', 'loaded', execution,
-        // then 'complete'. The UA check is unfortunate, but not sure how
-        //to feature test w/o causing perf issues.
-        readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ?
-                      /^complete$/ : /^(complete|loaded)$/,
-        defContextName = '_',
-        //Oh the tragedy, detecting opera. See the usage of isOpera for reason.
-        isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]',
-        contexts = {},
-        cfg = {},
-        globalDefQueue = [],
-        useInteractive = false,
-        req, s, head, baseElement, dataMain, src,
-        interactiveScript, currentlyAddingScript, mainScript, subPath;
-
-    function isFunction(it) {
-        return ostring.call(it) === '[object Function]';
-    }
-
-    function isArray(it) {
-        return ostring.call(it) === '[object Array]';
-    }
-
-    /**
-     * Helper function for iterating over an array. If the func returns
-     * a true value, it will break out of the loop.
-     */
-    function each(ary, func) {
-        if (ary) {
-            var i;
-            for (i = 0; i < ary.length; i += 1) {
-                if (ary[i] && func(ary[i], i, ary)) {
-                    break;
-                }
-            }
-        }
-    }
-
-    /**
-     * Helper function for iterating over an array backwards. If the func
-     * returns a true value, it will break out of the loop.
-     */
-    function eachReverse(ary, func) {
-        if (ary) {
-            var i;
-            for (i = ary.length - 1; i > -1; i -= 1) {
-                if (ary[i] && func(ary[i], i, ary)) {
-                    break;
-                }
-            }
-        }
-    }
-
-    function hasProp(obj, prop) {
-        return obj.hasOwnProperty(prop);
-    }
-
-    /**
-     * Cycles over properties in an object and calls a function for each
-     * property value. If the function returns a truthy value, then the
-     * iteration is stopped.
-     */
-    function eachProp(obj, func) {
-        var prop;
-        for (prop in obj) {
-            if (obj.hasOwnProperty(prop)) {
-                if (func(obj[prop], prop)) {
-                    break;
-                }
-            }
-        }
-    }
-
-    /**
-     * Simple function to mix in properties from source into target,
-     * but only if target does not already have a property of the same name.
-     * This is not robust in IE for transferring methods that match
-     * Object.prototype names, but the uses of mixin here seem unlikely to
-     * trigger a problem related to that.
-     */
-    function mixin(target, source, force, deepStringMixin) {
-        if (source) {
-            eachProp(source, function (value, prop) {
-                if (force || !hasProp(target, prop)) {
-                    if (deepStringMixin && typeof value !== 'string') {
-                        if (!target[prop]) {
-                            target[prop] = {};
-                        }
-                        mixin(target[prop], value, force, deepStringMixin);
-                    } else {
-                        target[prop] = value;
-                    }
-                }
-            });
-        }
-        return target;
-    }
-
-    //Similar to Function.prototype.bind, but the 'this' object is specified
-    //first, since it is easier to read/figure out what 'this' will be.
-    function bind(obj, fn) {
-        return function () {
-            return fn.apply(obj, arguments);
-        };
-    }
-
-    function scripts() {
-        return document.getElementsByTagName('script');
-    }
-
-    //Allow getting a global that expressed in
-    //dot notation, like 'a.b.c'.
-    function getGlobal(value) {
-        if (!value) {
-            return value;
-        }
-        var g = global;
-        each(value.split('.'), function (part) {
-            g = g[part];
-        });
-        return g;
-    }
-
-    function makeContextModuleFunc(func, relMap, enableBuildCallback) {
-        return function () {
-            //A version of a require function that passes a moduleName
-            //value for items that may need to
-            //look up paths relative to the moduleName
-            var args = aps.call(arguments, 0), lastArg;
-            if (enableBuildCallback &&
-                isFunction((lastArg = args[args.length - 1]))) {
-                lastArg.__requireJsBuild = true;
-            }
-            args.push(relMap);
-            return func.apply(null, args);
-        };
-    }
-
-    function addRequireMethods(req, context, relMap) {
-        each([
-            ['toUrl'],
-            ['undef'],
-            ['defined', 'requireDefined'],
-            ['specified', 'requireSpecified']
-        ], function (item) {
-            var prop = item[1] || item[0];
-            req[item[0]] = context ? makeContextModuleFunc(context[prop], relMap) :
-                //If no context, then use default context. Reference from
-                //contexts instead of early binding to default context, so
-                //that during builds, the latest instance of the default
-                //context with its config gets used.
-                function () {
-                    var ctx = contexts[defContextName];
-                    return ctx[prop].apply(ctx, arguments);
-                };
-        });
-    }
-
-    /**
-     * Constructs an error with a pointer to an URL with more information.
-     * @param {String} id the error ID that maps to an ID on a web page.
-     * @param {String} message human readable error.
-     * @param {Error} [err] the original error, if there is one.
-     *
-     * @returns {Error}
-     */
-    function makeError(id, msg, err, requireModules) {
-        var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id);
-        e.requireType = id;
-        e.requireModules = requireModules;
-        if (err) {
-            e.originalError = err;
-        }
-        return e;
-    }
-
-    if (typeof define !== 'undefined') {
-        //If a define is already in play via another AMD loader,
-        //do not overwrite.
-        return;
-    }
-
-    if (typeof requirejs !== 'undefined') {
-        if (isFunction(requirejs)) {
-            //Do not overwrite and existing requirejs instance.
-            return;
-        }
-        cfg = requirejs;
-        requirejs = undefined;
-    }
-
-    //Allow for a require config object
-    if (typeof require !== 'undefined' && !isFunction(require)) {
-        //assume it is a config object.
-        cfg = require;
-        require = undefined;
-    }
-
-    function newContext(contextName) {
-        var config = {
-                waitSeconds: 7,
-                baseUrl: './',
-                paths: {},
-                pkgs: {},
-                shim: {}
-            },
-            registry = {},
-            undefEvents = {},
-            defQueue = [],
-            defined = {},
-            urlFetched = {},
-            requireCounter = 1,
-            unnormalizedCounter = 1,
-            //Used to track the order in which modules
-            //should be executed, by the order they
-            //load. Important for consistent cycle resolution
-            //behavior.
-            waitAry = [],
-            inCheckLoaded, Module, context, handlers,
-            checkLoadedTimeoutId;
-
-        /**
-         * Trims the . and .. from an array of path segments.
-         * It will keep a leading path segment if a .. will become
-         * the first path segment, to help with module name lookups,
-         * which act like paths, but can be remapped. But the end result,
-         * all paths that use this function should look normalized.
-         * NOTE: this method MODIFIES the input array.
-         * @param {Array} ary the array of path segments.
-         */
-        function trimDots(ary) {
-            var i, part;
-            for (i = 0; ary[i]; i+= 1) {
-                part = ary[i];
-                if (part === '.') {
-                    ary.splice(i, 1);
-                    i -= 1;
-                } else if (part === '..') {
-                    if (i === 1 && (ary[2] === '..' || ary[0] === '..')) {
-                        //End of the line. Keep at least one non-dot
-                        //path segment at the front so it can be mapped
-                        //correctly to disk. Otherwise, there is likely
-                        //no path mapping for a path starting with '..'.
-                        //This can still fail, but catches the most reasonable
-                        //uses of ..
-                        break;
-                    } else if (i > 0) {
-                        ary.splice(i - 1, 2);
-                        i -= 2;
-                    }
-                }
-            }
-        }
-
-        /**
-         * Given a relative module name, like ./something, normalize it to
-         * a real name that can be mapped to a path.
-         * @param {String} name the relative name
-         * @param {String} baseName a real name that the name arg is relative
-         * to.
-         * @param {Boolean} applyMap apply the map config to the value. Should
-         * only be done if this normalization is for a dependency ID.
-         * @returns {String} normalized name
-         */
-        function normalize(name, baseName, applyMap) {
-            var baseParts = baseName && baseName.split('/'),
-                map = config.map,
-                starMap = map && map['*'],
-                pkgName, pkgConfig, mapValue, nameParts, i, j, nameSegment,
-                foundMap;
-
-            //Adjust any relative paths.
-            if (name && name.charAt(0) === '.') {
-                //If have a base name, try to normalize against it,
-                //otherwise, assume it is a top-level require that will
-                //be relative to baseUrl in the end.
-                if (baseName) {
-                    if (config.pkgs[baseName]) {
-                        //If the baseName is a package name, then just treat it as one
-                        //name to concat the name with.
-                        baseParts = [baseName];
-                    } else {
-                        //Convert baseName to array, and lop off the last part,
-                        //so that . matches that 'directory' and not name of the baseName's
-                        //module. For instance, baseName of 'one/two/three', maps to
-                        //'one/two/three.js', but we want the directory, 'one/two' for
-                        //this normalization.
-                        baseParts = baseParts.slice(0, baseParts.length - 1);
-                    }
-
-                    name = baseParts.concat(name.split('/'));
-                    trimDots(name);
-
-                    //Some use of packages may use a . path to reference the
-                    //'main' module name, so normalize for that.
-                    pkgConfig = config.pkgs[(pkgName = name[0])];
-                    name = name.join('/');
-                    if (pkgConfig && name === pkgName + '/' + pkgConfig.main) {
-                        name = pkgName;
-                    }
-                } else if (name.indexOf('./') === 0) {
-                    // No baseName, so this is ID is resolved relative
-                    // to baseUrl, pull off the leading dot.
-                    name = name.substring(2);
-                }
-            }
-
-            //Apply map config if available.
-            if (applyMap && (baseParts || starMap) && map) {
-                nameParts = name.split('/');
-
-                for (i = nameParts.length; i > 0; i -= 1) {
-                    nameSegment = nameParts.slice(0, i).join('/');
-
-                    if (baseParts) {
-                        //Find the longest baseName segment match in the config.
-                        //So, do joins on the biggest to smallest lengths of baseParts.
-                        for (j = baseParts.length; j > 0; j -= 1) {
-                            mapValue = map[baseParts.slice(0, j).join('/')];
-
-                            //baseName segment has  config, find if it has one for
-                            //this name.
-                            if (mapValue) {
-                                mapValue = mapValue[nameSegment];
-                                if (mapValue) {
-                                    //Match, update name to the new value.
-                                    foundMap = mapValue;
-                                    break;
-                                }
-                            }
-                        }
-                    }
-
-                    if (!foundMap && starMap && starMap[nameSegment]) {
-                        foundMap = starMap[nameSegment];
-                    }
-
-                    if (foundMap) {
-                        nameParts.splice(0, i, foundMap);
-                        name = nameParts.join('/');
-                        break;
-                    }
-                }
-            }
-
-            return name;
-        }
-
-        function removeScript(name) {
-            if (isBrowser) {
-                each(scripts(), function (scriptNode) {
-                    if (scriptNode.getAttribute('data-requiremodule') === name &&
-                        scriptNode.getAttribute('data-requirecontext') === context.contextName) {
-                        scriptNode.parentNode.removeChild(scriptNode);
-                        return true;
-                    }
-                });
-            }
-        }
-
-        function hasPathFallback(id) {
-            var pathConfig = config.paths[id];
-            if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) {
-                removeScript(id);
-                //Pop off the first array value, since it failed, and
-                //retry
-                pathConfig.shift();
-                context.undef(id);
-                context.require([id]);
-                return true;
-            }
-        }
-
-        /**
-         * Creates a module mapping that includes plugin prefix, module
-         * name, and path. If parentModuleMap is provided it will
-         * also normalize the name via require.normalize()
-         *
-         * @param {String} name the module name
-         * @param {String} [parentModuleMap] parent module map
-         * for the module name, used to resolve relative names.
-         * @param {Boolean} isNormalized: is the ID already normalized.
-         * This is true if this call is done for a define() module ID.
-         * @param {Boolean} applyMap: apply the map config to the ID.
-         * Should only be true if this map is for a dependency.
-         *
-         * @returns {Object}
-         */
-        function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) {
-            var index = name ? name.indexOf('!') : -1,
-                prefix = null,
-                parentName = parentModuleMap ? parentModuleMap.name : null,
-                originalName = name,
-                isDefine = true,
-                normalizedName = '',
-                url, pluginModule, suffix;
-
-            //If no name, then it means it is a require call, generate an
-            //internal name.
-            if (!name) {
-                isDefine = false;
-                name = '_@r' + (requireCounter += 1);
-            }
-
-            if (index !== -1) {
-                prefix = name.substring(0, index);
-                name = name.substring(index + 1, name.length);
-            }
-
-            if (prefix) {
-                prefix = normalize(prefix, parentName, applyMap);
-                pluginModule = defined[prefix];
-            }
-
-            //Account for relative paths if there is a base name.
-            if (name) {
-                if (prefix) {
-                    if (pluginModule && pluginModule.normalize) {
-                        //Plugin is loaded, use its normalize method.
-                        normalizedName = pluginModule.normalize(name, function (name) {
-                            return normalize(name, parentName, applyMap);
-                        });
-                    } else {
-                        normalizedName = normalize(name, parentName, applyMap);
-                    }
-                } else {
-                    //A regular module.
-                    normalizedName = normalize(name, parentName, applyMap);
-
-                    //Calculate url for the module, if it has a name.
-                    //Use name here since nameToUrl also calls normalize,
-                    //and for relative names that are outside the baseUrl
-                    //this causes havoc. Was thinking of just removing
-                    //parentModuleMap to avoid extra normalization, but
-                    //normalize() still does a dot removal because of
-                    //issue #142, so just pass in name here and redo
-                    //the normalization. Paths outside baseUrl are just
-                    //messy to support.
-                    url = context.nameToUrl(name, null, parentModuleMap);
-                }
-            }
-
-            //If the id is a plugin id that cannot be determined if it needs
-            //normalization, stamp it with a unique ID so two matching relative
-            //ids that may conflict can be separate.
-            suffix = prefix && !pluginModule && !isNormalized ?
-                     '_unnormalized' + (unnormalizedCounter += 1) :
-                     '';
-
-            return {
-                prefix: prefix,
-                name: normalizedName,
-                parentMap: parentModuleMap,
-                unnormalized: !!suffix,
-                url: url,
-                originalName: originalName,
-                isDefine: isDefine,
-                id: (prefix ?
-                    prefix + '!' + normalizedName :
-                    normalizedName) + suffix
-            };
-        }
-
-        function getModule(depMap) {
-            var id = depMap.id,
-                mod = registry[id];
-
-            if (!mod) {
-                mod = registry[id] = new context.Module(depMap);
-            }
-
-            return mod;
-        }
-
-        function on(depMap, name, fn) {
-            var id = depMap.id,
-                mod = registry[id];
-
-            if (hasProp(defined, id) &&
-                (!mod || mod.defineEmitComplete)) {
-                if (name === 'defined') {
-                    fn(defined[id]);
-                }
-            } else {
-                getModule(depMap).on(name, fn);
-            }
-        }
-
-        function onError(err, errback) {
-            var ids = err.requireModules,
-                notified = false;
-
-            if (errback) {
-                errback(err);
-            } else {
-                each(ids, function (id) {
-                    var mod = registry[id];
-                    if (mod) {
-                        //Set error on module, so it skips timeout checks.
-                        mod.error = err;
-                        if (mod.events.error) {
-                            notified = true;
-                            mod.emit('error', err);
-                        }
-                    }
-                });
-
-                if (!notified) {
-                    req.onError(err);
-                }
-            }
-        }
-
-        /**
-         * Internal method to transfer globalQueue items to this context's
-         * defQueue.
-         */
-        function takeGlobalQueue() {
-            //Push all the globalDefQueue items into the context's defQueue
-            if (globalDefQueue.length) {
-                //Array splice in the values since the context code has a
-                //local var ref to defQueue, so cannot just reassign the one
-                //on context.
-                apsp.apply(defQueue,
-                           [defQueue.length - 1, 0].concat(globalDefQueue));
-                globalDefQueue = [];
-            }
-        }
-
-        /**
-         * Helper function that creates a require function object to give to
-         * modules that ask for it as a dependency. It needs to be specific
-         * per module because of the implication of path mappings that may
-         * need to be relative to the module name.
-         */
-        function makeRequire(mod, enableBuildCallback, altRequire) {
-            var relMap = mod && mod.map,
-                modRequire = makeContextModuleFunc(altRequire || context.require,
-                                                   relMap,
-                                                   enableBuildCallback);
-
-            addRequireMethods(modRequire, context, relMap);
-            modRequire.isBrowser = isBrowser;
-
-            return modRequire;
-        }
-
-        handlers = {
-            'require': function (mod) {
-                return makeRequire(mod);
-            },
-            'exports': function (mod) {
-                mod.usingExports = true;
-                if (mod.map.isDefine) {
-                    return (mod.exports = defined[mod.map.id] = {});
-                }
-            },
-            'module': function (mod) {
-                return (mod.module = {
-                    id: mod.map.id,
-                    uri: mod.map.url,
-                    config: function () {
-                        return (config.config && config.config[mod.map.id]) || {};
-                    },
-                    exports: defined[mod.map.id]
-                });
-            }
-        };
-
-        function removeWaiting(id) {
-            //Clean up machinery used for waiting modules.
-            delete registry[id];
-
-            each(waitAry, function (mod, i) {
-                if (mod.map.id === id) {
-                    waitAry.splice(i, 1);
-                    if (!mod.defined) {
-                        context.waitCount -= 1;
-                    }
-                    return true;
-                }
-            });
-        }
-
-        function findCycle(mod, traced) {
-            var id = mod.map.id,
-                depArray = mod.depMaps,
-                foundModule;
-
-            //Do not bother with unitialized modules or not yet enabled
-            //modules.
-            if (!mod.inited) {
-                return;
-            }
-
-            //Found the cycle.
-            if (traced[id]) {
-                return mod;
-            }
-
-            traced[id] = true;
-
-            //Trace through the dependencies.
-            each(depArray, function (depMap) {
-                var depId = depMap.id,
-                    depMod = registry[depId];
-
-                if (!depMod) {
-                    return;
-                }
-
-                if (!depMod.inited || !depMod.enabled) {
-                    //Dependency is not inited, so this cannot
-                    //be used to determine a cycle.
-                    foundModule = null;
-                    delete traced[id];
-                    return true;
-                }
-
-                //mixin traced to a new object for each dependency, so that
-                //sibling dependencies in this object to not generate a
-                //false positive match on a cycle. Ideally an Object.create
-                //type of prototype delegation would be used here, but
-                //optimizing for file size vs. execution speed since hopefully
-                //the trees are small for circular dependency scans relative
-                //to the full app perf.
-                return (foundModule = findCycle(depMod, mixin({}, traced)));
-            });
-
-            return foundModule;
-        }
-
-        function forceExec(mod, traced, uninited) {
-            var id = mod.map.id,
-                depArray = mod.depMaps;
-
-            if (!mod.inited || !mod.map.isDefine) {
-                return;
-            }
-
-            if (traced[id]) {
-                return defined[id];
-            }
-
-            traced[id] = mod;
-
-            each(depArray, function(depMap) {
-                var depId = depMap.id,
-                    depMod = registry[depId],
-                    value;
-
-                if (handlers[depId]) {
-                    return;
-                }
-
-                if (depMod) {
-                    if (!depMod.inited || !depMod.enabled) {
-                        //Dependency is not inited,
-                        //so this module cannot be
-                        //given a forced value yet.
-                        uninited[id] = true;
-                        return;
-                    }
-
-                    //Get the value for the current dependency
-                    value = forceExec(depMod, traced, uninited);
-
-                    //Even with forcing it may not be done,
-                    //in particular if the module is waiting
-                    //on a plugin resource.
-                    if (!uninited[depId]) {
-                        mod.defineDepById(depId, value);
-                    }
-                }
-            });
-
-            mod.check(true);
-
-            return defined[id];
-        }
-
-        function modCheck(mod) {
-            mod.check();
-        }
-
-        function checkLoaded() {
-            var waitInterval = config.waitSeconds * 1000,
-                //It is possible to disable the wait interval by using waitSeconds of 0.
-                expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(),
-                noLoads = [],
-                stillLoading = false,
-                needCycleCheck = true,
-                map, modId, err, usingPathFallback;
-
-            //Do not bother if this call was a result of a cycle break.
-            if (inCheckLoaded) {
-                return;
-            }
-
-            inCheckLoaded = true;
-
-            //Figure out the state of all the modules.
-            eachProp(registry, function (mod) {
-                map = mod.map;
-                modId = map.id;
-
-                //Skip things that are not enabled or in error state.
-                if (!mod.enabled) {
-                    return;
-                }
-
-                if (!mod.error) {
-                    //If the module should be executed, and it has not
-                    //been inited and time is up, remember it.
-                    if (!mod.inited && expired) {
-                        if (hasPathFallback(modId)) {
-                            usingPathFallback = true;
-                            stillLoading = true;
-                        } else {
-                            noLoads.push(modId);
-                            removeScript(modId);
-                        }
-                    } else if (!mod.inited && mod.fetched && map.isDefine) {
-                        stillLoading = true;
-                        if (!map.prefix) {
-                            //No reason to keep looking for unfinished
-                            //loading. If the only stillLoading is a
-                            //plugin resource though, keep going,
-                            //because it may be that a plugin resource
-                            //is waiting on a non-plugin cycle.
-                            return (needCycleCheck = false);
-                        }
-                    }
-                }
-            });
-
-            if (expired && noLoads.length) {
-                //If wait time expired, throw error of unloaded modules.
-                err = makeError('timeout', 'Load timeout for modules: ' + noLoads, null, noLoads);
-                err.contextName = context.contextName;
-                return onError(err);
-            }
-
-            //Not expired, check for a cycle.
-            if (needCycleCheck) {
-
-                each(waitAry, function (mod) {
-                    if (mod.defined) {
-                        return;
-                    }
-
-                    var cycleMod = findCycle(mod, {}),
-                        traced = {};
-
-                    if (cycleMod) {
-                        forceExec(cycleMod, traced, {});
-
-                        //traced modules may have been
-                        //removed from the registry, but
-                        //their listeners still need to
-                        //be called.
-                        eachProp(traced, modCheck);
-                    }
-                });
-
-                //Now that dependencies have
-                //been satisfied, trigger the
-                //completion check that then
-                //notifies listeners.
-                eachProp(registry, modCheck);
-            }
-
-            //If still waiting on loads, and the waiting load is something
-            //other than a plugin resource, or there are still outstanding
-            //scripts, then just try back later.
-            if ((!expired || usingPathFallback) && stillLoading) {
-                //Something is still waiting to load. Wait for it, but only
-                //if a timeout is not already in effect.
-                if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) {
-                    checkLoadedTimeoutId = setTimeout(function () {
-                        checkLoadedTimeoutId = 0;
-                        checkLoaded();
-                    }, 50);
-                }
-            }
-
-            inCheckLoaded = false;
-        }
-
-        Module = function (map) {
-            this.events = undefEvents[map.id] || {};
-            this.map = map;
-            this.shim = config.shim[map.id];
-            this.depExports = [];
-            this.depMaps = [];
-            this.depMatched = [];
-            this.pluginMaps = {};
-            this.depCount = 0;
-
-            /* this.exports this.factory
-               this.depMaps = [],
-               this.enabled, this.fetched
-            */
-        };
-
-        Module.prototype = {
-            init: function(depMaps, factory, errback, options) {
-                options = options || {};
-
-                //Do not do more inits if already done. Can happen if there
-                //are multiple define calls for the same module. That is not
-                //a normal, common case, but it is also not unexpected.
-                if (this.inited) {
-                    return;
-                }
-
-                this.factory = factory;
-
-                if (errback) {
-                    //Register for errors on this module.
-                    this.on('error', errback);
-                } else if (this.events.error) {
-                    //If no errback already, but there are error listeners
-                    //on this module, set up an errback to pass to the deps.
-                    errback = bind(this, function (err) {
-                        this.emit('error', err);
-                    });
-                }
-
-                //Do a copy of the dependency array, so that
-                //source inputs are not modified. For example
-                //"shim" deps are passed in here directly, and
-                //doing a direct modification of the depMaps array
-                //would affect that config.
-                this.depMaps = depMaps && depMaps.slice(0);
-                this.depMaps.rjsSkipMap = depMaps.rjsSkipMap;
-
-                this.errback = errback;
-
-                //Indicate this module has be initialized
-                this.inited = true;
-
-                this.ignore = options.ignore;
-
-                //Could have option to init this module in enabled mode,
-                //or could have been previously marked as enabled. However,
-                //the dependencies are not known until init is called. So
-                //if enabled previously, now trigger dependencies as enabled.
-                if (options.enabled || this.enabled) {
-                    //Enable this module and dependencies.
-                    //Will call this.check()
-                    this.enable();
-                } else {
-                    this.check();
-                }
-            },
-
-            defineDepById: function (id, depExports) {
-                var i;
-
-                //Find the index for this dependency.
-                each(this.depMaps, function (map, index) {
-                    if (map.id === id) {
-                        i = index;
-                        return true;
-                    }
-                });
-
-                return this.defineDep(i, depExports);
-            },
-
-            defineDep: function (i, depExports) {
-                //Because of cycles, defined callback for a given
-                //export can be called more than once.
-                if (!this.depMatched[i]) {
-                    this.depMatched[i] = true;
-                    this.depCount -= 1;
-                    this.depExports[i] = depExports;
-                }
-            },
-
-            fetch: function () {
-                if (this.fetched) {
-                    return;
-                }
-                this.fetched = true;
-
-                context.startTime = (new Date()).getTime();
-
-                var map = this.map;
-
-                //If the manager is for a plugin managed resource,
-                //ask the plugin to load it now.
-                if (this.shim) {
-                    makeRequire(this, true)(this.shim.deps || [], bind(this, function () {
-                        return map.prefix ? this.callPlugin() : this.load();
-                    }));
-                } else {
-                    //Regular dependency.
-                    return map.prefix ? this.callPlugin() : this.load();
-                }
-            },
-
-            load: function() {
-                var url = this.map.url;
-
-                //Regular dependency.
-                if (!urlFetched[url]) {
-                    urlFetched[url] = true;
-                    context.load(this.map.id, url);
-                }
-            },
-
-            /**
-             * Checks is the module is ready to define itself, and if so,
-             * define it. If the silent argument is true, then it will just
-             * define, but not notify listeners, and not ask for a context-wide
-             * check of all loaded modules. That is useful for cycle breaking.
-             */
-            check: function (silent) {
-                if (!this.enabled || this.enabling) {
-                    return;
-                }
-
-                var id = this.map.id,
-                    depExports = this.depExports,
-                    exports = this.exports,
-                    factory = this.factory,
-                    err, cjsModule;
-
-                if (!this.inited) {
-                    this.fetch();
-                } else if (this.error) {
-                    this.emit('error', this.error);
-                } else if (!this.defining) {
-                    //The factory could trigger another require call
-                    //that would result in checking this module to
-                    //define itself again. If already in the process
-                    //of doing that, skip this work.
-                    this.defining = true;
-
-                    if (this.depCount < 1 && !this.defined) {
-                        if (isFunction(factory)) {
-                            //If there is an error listener, favor passing
-                            //to that instead of throwing an error.
-                            if (this.events.error) {
-                                try {
-                                    exports = context.execCb(id, factory, depExports, exports);
-                                } catch (e) {
-                                    err = e;
-                                }
-                            } else {
-                                exports = context.execCb(id, factory, depExports, exports);
-                            }
-
-                            if (this.map.isDefine) {
-                                //If setting exports via 'module' is in play,
-                                //favor that over return value and exports. After that,
-                                //favor a non-undefined return value over exports use.
-                                cjsModule = this.module;
-                                if (cjsModule &&
-                                    cjsModule.exports !== undefined &&
-                                    //Make sure it is not already the exports value
-                                    cjsModule.exports !== this.exports) {
-                                    exports = cjsModule.exports;
-                                } else if (exports === undefined && this.usingExports) {
-                                    //exports already set the defined value.
-                                    exports = this.exports;
-                                }
-                            }
-
-                            if (err) {
-                                err.requireMap = this.map;
-                                err.requireModules = [this.map.id];
-                                err.requireType = 'define';
-                                return onError((this.error = err));
-                            }
-
-                        } else {
-                            //Just a literal value
-                            exports = factory;
-                        }
-
-                        this.exports = exports;
-
-                        if (this.map.isDefine && !this.ignore) {
-                            defined[id] = exports;
-
-                            if (req.onResourceLoad) {
-                                req.onResourceLoad(context, this.map, this.depMaps);
-                            }
-                        }
-
-                        //Clean up
-                        delete registry[id];
-
-                        this.defined = true;
-                        context.waitCount -= 1;
-                        if (context.waitCount === 0) {
-                            //Clear the wait array used for cycles.
-                            waitAry = [];
-                        }
-                    }
-
-                    //Finished the define stage. Allow calling check again
-                    //to allow define notifications below in the case of a
-                    //cycle.
-                    this.defining = false;
-
-                    if (!silent) {
-                        if (this.defined && !this.defineEmitted) {
-                            this.defineEmitted = true;
-                            this.emit('defined', this.exports);
-                            this.defineEmitComplete = true;
-                        }
-                    }
-                }
-            },
-
-            callPlugin: function() {
-                var map = this.map,
-                    id = map.id,
-                    pluginMap = makeModuleMap(map.prefix, null, false, true);
-
-                on(pluginMap, 'defined', bind(this, function (plugin) {
-                    var name = this.map.name,
-                        parentName = this.map.parentMap ? this.map.parentMap.name : null,
-                        load, normalizedMap, normalizedMod;
-
-                    //If current map is not normalized, wait for that
-                    //normalized name to load instead of continuing.
-                    if (this.map.unnormalized) {
-                        //Normalize the ID if the plugin allows it.
-                        if (plugin.normalize) {
-                            name = plugin.normalize(name, function (name) {
-                                return normalize(name, parentName, true);
-                            }) || '';
-                        }
-
-                        normalizedMap = makeModuleMap(map.prefix + '!' + name,
-                                                      this.map.parentMap,
-                                                      false,
-                                                      true);
-                        on(normalizedMap,
-                           'defined', bind(this, function (value) {
-                            this.init([], function () { return value; }, null, {
-                                enabled: true,
-                                ignore: true
-                            });
-                        }));
-                        normalizedMod = registry[normalizedMap.id];
-                        if (normalizedMod) {
-                            if (this.events.error) {
-                                normalizedMod.on('error', bind(this, function (err) {
-                                    this.emit('error', err);
-                                }));
-                            }
-                            normalizedMod.enable();
-                        }
-
-                        return;
-                    }
-
-                    load = bind(this, function (value) {
-                        this.init([], function () { return value; }, null, {
-                            enabled: true
-                        });
-                    });
-
-                    load.error = bind(this, function (err) {
-                        this.inited = true;
-                        this.error = err;
-                        err.requireModules = [id];
-
-                        //Remove temp unnormalized modules for this module,
-                        //since they will never be resolved otherwise now.
-                        eachProp(registry, function (mod) {
-                            if (mod.map.id.indexOf(id + '_unnormalized') === 0) {
-                                removeWaiting(mod.map.id);
-                            }
-                        });
-
-                        onError(err);
-                    });
-
-                    //Allow plugins to load other code without having to know the
-                    //context or how to 'complete' the load.
-                    load.fromText = function (moduleName, text) {
-                        /*jslint evil: true */
-                        var hasInteractive = useInteractive;
-
-                        //Turn off interactive script matching for IE for any define
-                        //calls in the text, then turn it back on at the end.
-                        if (hasInteractive) {
-                            useInteractive = false;
-                        }
-
-                        //Prime the system by creating a module instance for
-                        //it.
-                        getModule(makeModuleMap(moduleName));
-
-                        req.exec(text);
-
-                        if (hasInteractive) {
-                            useInteractive = true;
-                        }
-
-                        //Support anonymous modules.
-                        context.completeLoad(moduleName);
-                    };
-
-                    //Use parentName here since the plugin's name is not reliable,
-                    //could be some weird string with no path that actually wants to
-                    //reference the parentName's path.
-                    plugin.load(map.name, makeRequire(map.parentMap, true, function (deps, cb) {
-                        deps.rjsSkipMap = true;
-                        return context.require(deps, cb);
-                    }), load, config);
-                }));
-
-                context.enable(pluginMap, this);
-                this.pluginMaps[pluginMap.id] = pluginMap;
-            },
-
-            enable: function () {
-                this.enabled = true;
-
-                if (!this.waitPushed) {
-                    waitAry.push(this);
-                    context.waitCount += 1;
-                    this.waitPushed = true;
-                }
-
-                //Set flag mentioning that the module is enabling,
-                //so that immediate calls to the defined callbacks
-                //for dependencies do not trigger inadvertent load
-                //with the depCount still being zero.
-                this.enabling = true;
-
-                //Enable each dependency
-                each(this.depMaps, bind(this, function (depMap, i) {
-                    var id, mod, handler;
-
-                    if (typeof depMap === 'string') {
-                        //Dependency needs to be converted to a depMap
-                        //and wired up to this module.
-                        depMap = makeModuleMap(depMap,
-                                               (this.map.isDefine ? this.map : this.map.parentMap),
-                                               false,
-                                               !this.depMaps.rjsSkipMap);
-                        this.depMaps[i] = depMap;
-
-                        handler = handlers[depMap.id];
-
-                        if (handler) {
-                            this.depExports[i] = handler(this);
-                            return;
-                        }
-
-                        this.depCount += 1;
-
-                        on(depMap, 'defined', bind(this, function (depExports) {
-                            this.defineDep(i, depExports);
-                            this.check();
-                        }));
-
-                        if (this.errback) {
-                            on(depMap, 'error', this.errback);
-                        }
-                    }
-
-                    id = depMap.id;
-                    mod = registry[id];
-
-                    //Skip special modules like 'require', 'exports', 'module'
-                    //Also, don't call enable if it is already enabled,
-                    //important in circular dependency cases.
-                    if (!handlers[id] && mod && !mod.enabled) {
-                        context.enable(depMap, this);
-                    }
-                }));
-
-                //Enable each plugin that is used in
-                //a dependency
-                eachProp(this.pluginMaps, bind(this, function (pluginMap) {
-                    var mod = registry[pluginMap.id];
-                    if (mod && !mod.enabled) {
-                        context.enable(pluginMap, this);
-                    }
-                }));
-
-                this.enabling = false;
-
-                this.check();
-            },
-
-            on: function(name, cb) {
-                var cbs = this.events[name];
-                if (!cbs) {
-                    cbs = this.events[name] = [];
-                }
-                cbs.push(cb);
-            },
-
-            emit: function (name, evt) {
-                each(this.events[name], function (cb) {
-                    cb(evt);
-                });
-                if (name === 'error') {
-                    //Now that the error handler was triggered, remove
-                    //the listeners, since this broken Module instance
-                    //can stay around for a while in the registry/waitAry.
-                    delete this.events[name];
-                }
-            }
-        };
-
-        function callGetModule(args) {
-            getModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]);
-        }
-
-        function removeListener(node, func, name, ieName) {
-            //Favor detachEvent because of IE9
-            //issue, see attachEvent/addEventListener comment elsewhere
-            //in this file.
-            if (node.detachEvent && !isOpera) {
-                //Probably IE. If not it will throw an error, which will be
-                //useful to know.
-                if (ieName) {
-                    node.detachEvent(ieName, func);
-                }
-            } else {
-                node.removeEventListener(name, func, false);
-            }
-        }
-
-        /**
-         * Given an event from a script node, get the requirejs info from it,
-         * and then removes the event listeners on the node.
-         * @param {Event} evt
-         * @returns {Object}
-         */
-        function getScriptData(evt) {
-            //Using currentTarget instead of target for Firefox 2.0's sake. Not
-            //all old browsers will be supported, but this one was easy enough
-            //to support and still makes sense.
-            var node = evt.currentTarget || evt.srcElement;
-
-            //Remove the listeners once here.
-            removeListener(node, context.onScriptLoad, 'load', 'onreadystatechange');
-            removeListener(node, context.onScriptError, 'error');
-
-            return {
-                node: node,
-                id: node && node.getAttribute('data-requiremodule')
-            };
-        }
-
-        return (context = {
-            config: config,
-            contextName: contextName,
-            registry: registry,
-            defined: defined,
-            urlFetched: urlFetched,
-            waitCount: 0,
-            defQueue: defQueue,
-            Module: Module,
-            makeModuleMap: makeModuleMap,
-
-            /**
-             * Set a configuration for the context.
-             * @param {Object} cfg config object to integrate.
-             */
-            configure: function (cfg) {
-                //Make sure the baseUrl ends in a slash.
-                if (cfg.baseUrl) {
-                    if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== '/') {
-                        cfg.baseUrl += '/';
-                    }
-                }
-
-                //Save off the paths and packages since they require special processing,
-                //they are additive.
-                var pkgs = config.pkgs,
-                    shim = config.shim,
-                    paths = config.paths,
-                    map = config.map;
-
-                //Mix in the config values, favoring the new values over
-                //existing ones in context.config.
-                mixin(config, cfg, true);
-
-                //Merge paths.
-                config.paths = mixin(paths, cfg.paths, true);
-
-                //Merge map
-                if (cfg.map) {
-                    config.map = mixin(map || {}, cfg.map, true, true);
-                }
-
-                //Merge shim
-                if (cfg.shim) {
-                    eachProp(cfg.shim, function (value, id) {
-                        //Normalize the structure
-                        if (isArray(value)) {
-                            value = {
-                                deps: value
-                            };
-                        }
-                        if (value.exports && !value.exports.__buildReady) {
-                            value.exports = context.makeShimExports(value.exports);
-                        }
-                        shim[id] = value;
-                    });
-                    config.shim = shim;
-                }
-
-                //Adjust packages if necessary.
-                if (cfg.packages) {
-                    each(cfg.packages, function (pkgObj) {
-                        var location;
-
-                        pkgObj = typeof pkgObj === 'string' ? { name: pkgObj } : pkgObj;
-                        location = pkgObj.location;
-
-                        //Create a brand new object on pkgs, since currentPackages can
-                        //be passed in again, and config.pkgs is the internal transformed
-                        //state for all package configs.
-                        pkgs[pkgObj.name] = {
-                            name: pkgObj.name,
-                            location: location || pkgObj.name,
-                            //Remove leading dot in main, so main paths are normalized,
-                            //and remove any trailing .js, since different package
-                            //envs have different conventions: some use a module name,
-                            //some use a file name.
-                            main: (pkgObj.main || 'main')
-                                  .replace(currDirRegExp, '')
-                                  .replace(jsSuffixRegExp, '')
-                        };
-                    });
-
-                    //Done with modifications, assing packages back to context config
-                    config.pkgs = pkgs;
-                }
-
-                //If there are any "waiting to execute" modules in the registry,
-                //update the maps for them, since their info, like URLs to load,
-                //may have changed.
-                eachProp(registry, function (mod, id) {
-                    mod.map = makeModuleMap(id);
-                });
-
-                //If a deps array or a config callback is specified, then call
-                //require with those args. This is useful when require is defined as a
-                //config object before require.js is loaded.
-                if (cfg.deps || cfg.callback) {
-                    context.require(cfg.deps || [], cfg.callback);
-                }
-            },
-
-            makeShimExports: function (exports) {
-                var func;
-                if (typeof exports === 'string') {
-                    func = function () {
-                        return getGlobal(exports);
-                    };
-                    //Save the exports for use in nodefine checking.
-                    func.exports = exports;
-                    return func;
-                } else {
-                    return function () {
-                        return exports.apply(global, arguments);
-                    };
-                }
-            },
-
-            requireDefined: function (id, relMap) {
-                return hasProp(defined, makeModuleMap(id, relMap, false, true).id);
-            },
-
-            requireSpecified: function (id, relMap) {
-                id = makeModuleMap(id, relMap, false, true).id;
-                return hasProp(defined, id) || hasProp(registry, id);
-            },
-
-            require: function (deps, callback, errback, relMap) {
-                var moduleName, id, map, requireMod, args;
-                if (typeof deps === 'string') {
-                    if (isFunction(callback)) {
-                        //Invalid call
-                        return onError(makeError('requireargs', 'Invalid require call'), errback);
-                    }
-
-                    //Synchronous access to one module. If require.get is
-                    //available (as in the Node adapter), prefer that.
-                    //In this case deps is the moduleName and callback is
-                    //the relMap
-                    if (req.get) {
-                        return req.get(context, deps, callback);
-                    }
-
-                    //Just return the module wanted. In this scenario, the
-                    //second arg (if passed) is just the relMap.
-                    moduleName = deps;
-                    relMap = callback;
-
-                    //Normalize module name, if it contains . or ..
-                    map = makeModuleMap(moduleName, relMap, false, true);
-                    id = map.id;
-
-                    if (!hasProp(defined, id)) {
-                        return onError(makeError('notloaded', 'Module name "' +
-                                    id +
-                                    '" has not been loaded yet for context: ' +
-                                    contextName));
-                    }
-                    return defined[id];
-                }
-
-                //Callback require. Normalize args. if callback or errback is
-                //not a function, it means it is a relMap. Test errback first.
-                if (errback && !isFunction(errback)) {
-                    relMap = errback;
-                    errback = undefined;
-                }
-                if (callback && !isFunction(callback)) {
-                    relMap = callback;
-                    callback = undefined;
-                }
-
-                //Any defined modules in the global queue, intake them now.
-                takeGlobalQueue();
-
-                //Make sure any remaining defQueue items get properly processed.
-                while (defQueue.length) {
-                    args = defQueue.shift();
-                    if (args[0] === null) {
-                        return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1]));
-                    } else {
-                        //args are id, deps, factory. Should be normalized by the
-                        //define() function.
-                        callGetModule(args);
-                    }
-                }
-
-                //Mark all the dependencies as needing to be loaded.
-                requireMod = getModule(makeModuleMap(null, relMap));
-
-                requireMod.init(deps, callback, errback, {
-                    enabled: true
-                });
-
-                checkLoaded();
-
-                return context.require;
-            },
-
-            undef: function (id) {
-                var map = makeModuleMap(id, null, true),
-                    mod = registry[id];
-
-                delete defined[id];
-                delete urlFetched[map.url];
-                delete undefEvents[id];
-
-                if (mod) {
-                    //Hold on to listeners in case the
-                    //module will be attempted to be reloaded
-                    //using a different config.
-                    if (mod.events.defined) {
-                        undefEvents[id] = mod.events;
-                    }
-
-                    removeWaiting(id);
-                }
-            },
-
-            /**
-             * Called to enable a module if it is still in the registry
-             * awaiting enablement. parent module is passed in for context,
-             * used by the optimizer.
-             */
-            enable: function (depMap, parent) {
-                var mod = registry[depMap.id];
-                if (mod) {
-                    getModule(depMap).enable();
-                }
-            },
-
-            /**
-             * Internal method used by environment adapters to complete a load event.
-             * A load event could be a script load or just a load pass from a synchronous
-             * load call.
-             * @param {String} moduleName the name of the module to potentially complete.
-             */
-            completeLoad: function (moduleName) {
-                var shim = config.shim[moduleName] || {},
-                shExports = shim.exports && shim.exports.exports,
-                found, args, mod;
-
-                takeGlobalQueue();
-
-                while (defQueue.length) {
-                    args = defQueue.shift();
-                    if (args[0] === null) {
-                        args[0] = moduleName;
-                        //If already found an anonymous module and bound it
-                        //to this name, then this is some other anon module
-                        //waiting for its completeLoad to fire.
-                        if (found) {
-                            break;
-                        }
-                        found = true;
-                    } else if (args[0] === moduleName) {
-                        //Found matching define call for this script!
-                        found = true;
-                    }
-
-                    callGetModule(args);
-                }
-
-                //Do this after the cycle of callGetModule in case the result
-                //of those calls/init calls changes the registry.
-                mod = registry[moduleName];
-
-                if (!found &&
-                    !defined[moduleName] &&
-                    mod && !mod.inited) {
-                    if (config.enforceDefine && (!shExports || !getGlobal(shExports))) {
-                        if (hasPathFallback(moduleName)) {
-                            return;
-                        } else {
-                            return onError(makeError('nodefine',
-                                             'No define call for ' + moduleName,
-                                             null,
-                                             [moduleName]));
-                        }
-                    } else {
-                        //A script that does not call define(), so just simulate
-                        //the call for it.
-                        callGetModule([moduleName, (shim.deps || []), shim.exports]);
-                    }
-                }
-
-                checkLoaded();
-            },
-
-            /**
-             * Converts a module name + .extension into an URL path.
-             * *Requires* the use of a module name. It does not support using
-             * plain URLs like nameToUrl.
-             */
-            toUrl: function (moduleNamePlusExt, relModuleMap) {
-                var index = moduleNamePlusExt.lastIndexOf('.'),
-                    ext = null;
-
-                if (index !== -1) {
-                    ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length);
-                    moduleNamePlusExt = moduleNamePlusExt.substring(0, index);
-                }
-
-                return context.nameToUrl(moduleNamePlusExt, ext, relModuleMap);
-            },
-
-            /**
-             * Converts a module name to a file path. Supports cases where
-             * moduleName may actually be just an URL.
-             */
-            nameToUrl: function (moduleName, ext, relModuleMap) {
-                var paths, pkgs, pkg, pkgPath, syms, i, parentModule, url,
-                    parentPath;
-
-                //Normalize module name if have a base relative module name to work from.
-                moduleName = normalize(moduleName, relModuleMap && relModuleMap.id, true);
-
-                //If a colon is in the URL, it indicates a protocol is used and it is just
-                //an URL to a file, or if it starts with a slash, contains a query arg (i.e. ?)
-                //or ends with .js, then assume the user meant to use an url and not a module id.
-                //The slash is important for protocol-less URLs as well as full paths.
-                if (req.jsExtRegExp.test(moduleName)) {
-                    //Just a plain path, not module name lookup, so just return it.
-                    //Add extension if it is included. This is a bit wonky, only non-.js things pass
-                    //an extension, this method probably needs to be reworked.
-                    url = moduleName + (ext || '');
-                } else {
-                    //A module that needs to be converted to a path.
-                    paths = config.paths;
-                    pkgs = config.pkgs;
-
-                    syms = moduleName.split('/');
-                    //For each module name segment, see if there is a path
-                    //registered for it. Start with most specific name
-                    //and work up from it.
-                    for (i = syms.length; i > 0; i -= 1) {
-                        parentModule = syms.slice(0, i).join('/');
-                        pkg = pkgs[parentModule];
-                        parentPath = paths[parentModule];
-                        if (parentPath) {
-                            //If an array, it means there are a few choices,
-                            //Choose the one that is desired
-                            if (isArray(parentPath)) {
-                                parentPath = parentPath[0];
-                            }
-                            syms.splice(0, i, parentPath);
-                            break;
-                        } else if (pkg) {
-                            //If module name is just the package name, then looking
-                            //for the main module.
-                            if (moduleName === pkg.name) {
-                                pkgPath = pkg.location + '/' + pkg.main;
-                            } else {
-                                pkgPath = pkg.location;
-                            }
-                            syms.splice(0, i, pkgPath);
-                            break;
-                        }
-                    }
-
-                    //Join the path parts together, then figure out if baseUrl is needed.
-                    url = syms.join('/') + (ext || '.js')+'?random='+Math.random();
-                    url = (url.charAt(0) === '/' || url.match(/^[\w\+\.\-]+:/) ? '' : config.baseUrl) + url;
-                }
-
-                return config.urlArgs ? url +
-                                        ((url.indexOf('?') === -1 ? '?' : '&') +
-                                         config.urlArgs) : url;
-            },
-
-            //Delegates to req.load. Broken out as a separate function to
-            //allow overriding in the optimizer.
-            load: function (id, url) {
-                req.load(context, id, url);
-            },
-
-            /**
-             * Executes a module callack function. Broken out as a separate function
-             * solely to allow the build system to sequence the files in the built
-             * layer in the right sequence.
-             *
-             * @private
-             */
-            execCb: function (name, callback, args, exports) {
-                return callback.apply(exports, args);
-            },
-
-            /**
-             * callback for script loads, used to check status of loading.
-             *
-             * @param {Event} evt the event from the browser for the script
-             * that was loaded.
-             */
-            onScriptLoad: function (evt) {
-                //Using currentTarget instead of target for Firefox 2.0's sake. Not
-                //all old browsers will be supported, but this one was easy enough
-                //to support and still makes sense.
-                if (evt.type === 'load' ||
-                    (readyRegExp.test((evt.currentTarget || evt.srcElement).readyState))) {
-                    //Reset interactive script so a script node is not held onto for
-                    //to long.
-                    interactiveScript = null;
-
-                    //Pull out the name of the module and the context.
-                    var data = getScriptData(evt);
-                    context.completeLoad(data.id);
-                }
-            },
-
-            /**
-             * Callback for script errors.
-             */
-            onScriptError: function (evt) {
-                var data = getScriptData(evt);
-                if (!hasPathFallback(data.id)) {
-                    return onError(makeError('scripterror', 'Script error', evt, [data.id]));
-                }
-            }
-        });
-    }
-
-    /**
-     * Main entry point.
-     *
-     * If the only argument to require is a string, then the module that
-     * is represented by that string is fetched for the appropriate context.
-     *
-     * If the first argument is an array, then it will be treated as an array
-     * of dependency string names to fetch. An optional function callback can
-     * be specified to execute when all of those dependencies are available.
-     *
-     * Make a local req variable to help Caja compliance (it assumes things
-     * on a require that are not standardized), and to give a short
-     * name for minification/local scope use.
-     */
-    req = requirejs = function (deps, callback, errback, optional) {
-
-        //Find the right context, use default
-        var contextName = defContextName,
-            context, config;
-
-        // Determine if have config object in the call.
-        if (!isArray(deps) && typeof deps !== 'string') {
-            // deps is a config object
-            config = deps;
-            if (isArray(callback)) {
-                // Adjust args if there are dependencies
-                deps = callback;
-                callback = errback;
-                errback = optional;
-            } else {
-                deps = [];
-            }
-        }
-
-        if (config && config.context) {
-            contextName = config.context;
-        }
-
-        context = contexts[contextName];
-        if (!context) {
-            context = contexts[contextName] = req.s.newContext(contextName);
-        }
-
-        if (config) {
-            context.configure(config);
-        }
-
-        return context.require(deps, callback, errback);
-    };
-
-    /**
-     * Support require.config() to make it easier to cooperate with other
-     * AMD loaders on globally agreed names.
-     */
-    req.config = function (config) {
-        return req(config);
-    };
-
-    /**
-     * Export require as a global, but only if it does not already exist.
-     */
-    if (!require) {
-        require = req;
-    }
-
-    req.version = version;
-
-    //Used to filter out dependencies that are already paths.
-    req.jsExtRegExp = /^\/|:|\?|\.js$/;
-    req.isBrowser = isBrowser;
-    s = req.s = {
-        contexts: contexts,
-        newContext: newContext
-    };
-
-    //Create default context.
-    req({});
-
-    //Exports some context-sensitive methods on global require, using
-    //default context if no context specified.
-    addRequireMethods(req);
-
-    if (isBrowser) {
-        head = s.head = document.getElementsByTagName('head')[0];
-        //If BASE tag is in play, using appendChild is a problem for IE6.
-        //When that browser dies, this can be removed. Details in this jQuery bug:
-        //http://dev.jquery.com/ticket/2709
-        baseElement = document.getElementsByTagName('base')[0];
-        if (baseElement) {
-            head = s.head = baseElement.parentNode;
-        }
-    }
-
-    /**
-     * Any errors that require explicitly generates will be passed to this
-     * function. Intercept/override it if you want custom error handling.
-     * @param {Error} err the error object.
-     */
-    req.onError = function (err) {
-        throw err;
-    };
-
-    /**
-     * Does the request to load a module for the browser case.
-     * Make this a separate function to allow other environments
-     * to override it.
-     *
-     * @param {Object} context the require context to find state.
-     * @param {String} moduleName the name of the module.
-     * @param {Object} url the URL to the module.
-     */
-    req.load = function (context, moduleName, url) {
-        var config = (context && context.config) || {},
-            node;
-        if (isBrowser) {
-            //In the browser so use a script tag
-            node = config.xhtml ?
-                   document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script') :
-                   document.createElement('script');
-            node.type = config.scriptType || 'text/javascript';
-            node.charset = 'utf-8';
-
-            node.setAttribute('data-requirecontext', context.contextName);
-            node.setAttribute('data-requiremodule', moduleName);
-
-            //Set up load listener. Test attachEvent first because IE9 has
-            //a subtle issue in its addEventListener and script onload firings
-            //that do not match the behavior of all other browsers with
-            //addEventListener support, which fire the onload event for a
-            //script right after the script execution. See:
-            //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution
-            //UNFORTUNATELY Opera implements attachEvent but does not follow the script
-            //script execution mode.
-            if (node.attachEvent &&
-                //Check if node.attachEvent is artificially added by custom script or
-                //natively supported by browser
-                //read https://github.com/jrburke/requirejs/issues/187
-                //if we can NOT find [native code] then it must NOT natively supported.
-                //in IE8, node.attachEvent does not have toString()
-                //Note the test for "[native code" with no closing brace, see:
-                //https://github.com/jrburke/requirejs/issues/273
-                !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) &&
-                !isOpera) {
-                //Probably IE. IE (at least 6-8) do not fire
-                //script onload right after executing the script, so
-                //we cannot tie the anonymous define call to a name.
-                //However, IE reports the script as being in 'interactive'
-                //readyState at the time of the define call.
-                useInteractive = true;
-
-                node.attachEvent('onreadystatechange', context.onScriptLoad);
-                //It would be great to add an error handler here to catch
-                //404s in IE9+. However, onreadystatechange will fire before
-                //the error handler, so that does not help. If addEvenListener
-                //is used, then IE will fire error before load, but we cannot
-                //use that pathway given the connect.microsoft.com issue
-                //mentioned above about not doing the 'script execute,
-                //then fire the script load event listener before execute
-                //next script' that other browsers do.
-                //Best hope: IE10 fixes the issues,
-                //and then destroys all installs of IE 6-9.
-                //node.attachEvent('onerror', context.onScriptError);
-            } else {
-                node.addEventListener('load', context.onScriptLoad, false);
-                node.addEventListener('error', context.onScriptError, false);
-            }
-            node.src = url;
-
-            //For some cache cases in IE 6-8, the script executes before the end
-            //of the appendChild execution, so to tie an anonymous define
-            //call to the module name (which is stored on the node), hold on
-            //to a reference to this node, but clear after the DOM insertion.
-            currentlyAddingScript = node;
-            if (baseElement) {
-                head.insertBefore(node, baseElement);
-            } else {
-                head.appendChild(node);
-            }
-            currentlyAddingScript = null;
-
-            return node;
-        } else if (isWebWorker) {
-            //In a web worker, use importScripts. This is not a very
-            //efficient use of importScripts, importScripts will block until
-            //its script is downloaded and evaluated. However, if web workers
-            //are in play, the expectation that a build has been done so that
-            //only one script needs to be loaded anyway. This may need to be
-            //reevaluated if other use cases become common.
-            importScripts(url);
-
-            //Account for anonymous modules
-            context.completeLoad(moduleName);
-        }
-    };
-
-    function getInteractiveScript() {
-        if (interactiveScript && interactiveScript.readyState === 'interactive') {
-            return interactiveScript;
-        }
-
-        eachReverse(scripts(), function (script) {
-            if (script.readyState === 'interactive') {
-                return (interactiveScript = script);
-            }
-        });
-        return interactiveScript;
-    }
-
-    //Look for a data-main script attribute, which could also adjust the baseUrl.
-    if (isBrowser) {
-        //Figure out baseUrl. Get it from the script tag with require.js in it.
-        eachReverse(scripts(), function (script) {
-            //Set the 'head' where we can append children by
-            //using the script's parent.
-            if (!head) {
-                head = script.parentNode;
-            }
-
-            //Look for a data-main attribute to set main script for the page
-            //to load. If it is there, the path to data main becomes the
-            //baseUrl, if it is not already set.
-            dataMain = script.getAttribute('data-main');
-            if (dataMain) {
-
-                //Pull off the directory of data-main for use as the
-                //baseUrl.
-                src = dataMain.split('/');
-                mainScript = src.pop();
-                subPath = src.length ? src.join('/')  + '/' : './';
-
-                //Set final baseUrl if there is not already an explicit one.
-                if (!cfg.baseUrl) {
-                    cfg.baseUrl = subPath;
-                }
-
-                //Strip off any trailing .js since dataMain is now
-                //like a module name.
-                dataMain = mainScript.replace(jsSuffixRegExp, '');
-
-                //Put the data-main script in the files to load.
-                cfg.deps = cfg.deps ? cfg.deps.concat(dataMain) : [dataMain];
-
-                return true;
-            }
-        });
-    }
-
-    /**
-     * The function that handles definitions of modules. Differs from
-     * require() in that a string for the module should be the first argument,
-     * and the function to execute after dependencies are loaded should
-     * return a value to define the module corresponding to the first argument's
-     * name.
-     */
-    define = function (name, deps, callback) {
-        var node, context;
-
-        //Allow for anonymous functions
-        if (typeof name !== 'string') {
-            //Adjust args appropriately
-            callback = deps;
-            deps = name;
-            name = null;
-        }
-
-        //This module may not have dependencies
-        if (!isArray(deps)) {
-            callback = deps;
-            deps = [];
-        }
-
-        //If no name, and callback is a function, then figure out if it a
-        //CommonJS thing with dependencies.
-        if (!deps.length && isFunction(callback)) {
-            //Remove comments from the callback string,
-            //look for require calls, and pull them into the dependencies,
-            //but only if there are function args.
-            if (callback.length) {
-                callback
-                    .toString()
-                    .replace(commentRegExp, '')
-                    .replace(cjsRequireRegExp, function (match, dep) {
-                        deps.push(dep);
-                    });
-
-                //May be a CommonJS thing even without require calls, but still
-                //could use exports, and module. Avoid doing exports and module
-                //work though if it just needs require.
-                //REQUIRES the function to expect the CommonJS variables in the
-                //order listed below.
-                deps = (callback.length === 1 ? ['require'] : ['require', 'exports', 'module']).concat(deps);
-            }
-        }
-
-        //If in IE 6-8 and hit an anonymous define() call, do the interactive
-        //work.
-        if (useInteractive) {
-            node = currentlyAddingScript || getInteractiveScript();
-            if (node) {
-                if (!name) {
-                    name = node.getAttribute('data-requiremodule');
-                }
-                context = contexts[node.getAttribute('data-requirecontext')];
-            }
-        }
-
-        //Always save off evaluating the def call until the script onload handler.
-        //This allows multiple modules to be in a file without prematurely
-        //tracing dependencies, and allows for anonymous module support,
-        //where the module name is not known until the script onload event
-        //occurs. If no context, use the global queue, and get it processed
-        //in the onscript load callback.
-        (context ? context.defQueue : globalDefQueue).push([name, deps, callback]);
-    };
-
-    define.amd = {
-        jQuery: true
-    };
-
-
-    /**
-     * Executes the text. Normally just uses eval, but can be modified
-     * to use a better, environment-specific call. Only used for transpiling
-     * loader plugins, not for plain JS modules.
-     * @param {String} text the text to execute/evaluate.
-     */
-    req.exec = function (text) {
-        /*jslint evil: true */
-        return eval(text);
-    };
-
-    //Set up with config info.
-    req(cfg);
-}(this));
-/*
- * jQuery JavaScript Library
- * http://jquery.com/
- *
- * Copyright, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: NULL
- */
-(function( window, undefined ) {
-
-// Use the correct document accordingly with window argument (sandbox)
-var document = window.document,
-	navigator = window.navigator,
-	location = window.location;
-var jQuery = (function() {
-
-// Define a local copy of jQuery
-var jQuery = function( selector, context ) {
-		// The jQuery object is actually just the init constructor 'enhanced'
-		return new jQuery.fn.init( selector, context, rootjQuery );
-	},
-
-	// Map over jQuery in case of overwrite
-	_jQuery = window.jQuery,
-
-	// Map over the $ in case of overwrite
-	_$ = window.$,
-
-	// A central reference to the root jQuery(document)
-	rootjQuery,
-
-	// A simple way to check for HTML strings or ID strings
-	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
-	quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
-
-	// Check if a string has a non-whitespace character in it
-	rnotwhite = /\S/,
-
-	// Used for trimming whitespace
-	trimLeft = /^\s+/,
-	trimRight = /\s+$/,
-
-	// Match a standalone tag
-	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
-
-	// JSON RegExp
-	rvalidchars = /^[\],:{}\s]*$/,
-	rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
-	rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
-	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
-
-	// Useragent RegExp
-	rwebkit = /(webkit)[ \/]([\w.]+)/,
-	ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
-	rmsie = /(msie) ([\w.]+)/,
-	rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
-
-	// Matches dashed string for camelizing
-	rdashAlpha = /-([a-z]|[0-9])/ig,
-	rmsPrefix = /^-ms-/,
-
-	// Used by jQuery.camelCase as callback to replace()
-	fcamelCase = function( all, letter ) {
-		return ( letter + "" ).toUpperCase();
-	},
-
-	// Keep a UserAgent string for use with jQuery.browser
-	userAgent = navigator.userAgent,
-
-	// For matching the engine and version of the browser
-	browserMatch,
-
-	// The deferred used on DOM ready
-	readyList,
-
-	// The ready event handler
-	DOMContentLoaded,
-
-	// Save a reference to some core methods
-	toString = Object.prototype.toString,
-	hasOwn = Object.prototype.hasOwnProperty,
-	push = Array.prototype.push,
-	slice = Array.prototype.slice,
-	trim = String.prototype.trim,
-	indexOf = Array.prototype.indexOf,
-
-	// [[Class]] -> type pairs
-	class2type = {};
-
-jQuery.fn = jQuery.prototype = {
-	constructor: jQuery,
-	init: function( selector, context, rootjQuery ) {
-		var match, elem, ret, doc;
-
-		// Handle $(""), $(null), or $(undefined)
-		if ( !selector ) {
-			return this;
-		}
-
-		// Handle $(DOMElement)
-		if ( selector.nodeType ) {
-			this.context = this[0] = selector;
-			this.length = 1;
-			return this;
-		}
-
-		// The body element only exists once, optimize finding it
-		if ( selector === "body" && !context && document.body ) {
-			this.context = document;
-			this[0] = document.body;
-			this.selector = selector;
-			this.length = 1;
-			return this;
-		}
-
-		// Handle HTML strings
-		if ( typeof selector === "string" ) {
-			// Are we dealing with HTML string or an ID?
-			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
-				// Assume that strings that start and end with <> are HTML and skip the regex check
-				match = [ null, selector, null ];
-
-			} else {
-				match = quickExpr.exec( selector );
-			}
-
-			// Verify a match, and that no context was specified for #id
-			if ( match && (match[1] || !context) ) {
-
-				// HANDLE: $(html) -> $(array)
-				if ( match[1] ) {
-					context = context instanceof jQuery ? context[0] : context;
-					doc = ( context ? context.ownerDocument || context : document );
-
-					// If a single string is passed in and it's a single tag
-					// just do a createElement and skip the rest
-					ret = rsingleTag.exec( selector );
-
-					if ( ret ) {
-						if ( jQuery.isPlainObject( context ) ) {
-							selector = [ document.createElement( ret[1] ) ];
-							jQuery.fn.attr.call( selector, context, true );
-
-						} else {
-							selector = [ doc.createElement( ret[1] ) ];
-						}
-
-					} else {
-						ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
-						selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes;
-					}
-
-					return jQuery.merge( this, selector );
-
-				// HANDLE: $("#id")
-				} else {
-					elem = document.getElementById( match[2] );
-
-					// Check parentNode to catch when Blackberry 4.6 returns
-					// nodes that are no longer in the document #6963
-					if ( elem && elem.parentNode ) {
-						// Handle the case where IE and Opera return items
-						// by name instead of ID
-						if ( elem.id !== match[2] ) {
-							return rootjQuery.find( selector );
-						}
-
-						// Otherwise, we inject the element directly into the jQuery object
-						this.length = 1;
-						this[0] = elem;
-					}
-
-					this.context = document;
-					this.selector = selector;
-					return this;
-				}
-
-			// HANDLE: $(expr, $(...))
-			} else if ( !context || context.jquery ) {
-				return ( context || rootjQuery ).find( selector );
-
-			// HANDLE: $(expr, context)
-			// (which is just equivalent to: $(context).find(expr)
-			} else {
-				return this.constructor( context ).find( selector );
-			}
-
-		// HANDLE: $(function)
-		// Shortcut for document ready
-		} else if ( jQuery.isFunction( selector ) ) {
-			return rootjQuery.ready( selector );
-		}
-
-		if ( selector.selector !== undefined ) {
-			this.selector = selector.selector;
-			this.context = selector.context;
-		}
-
-		return jQuery.makeArray( selector, this );
-	},
-
-	// Start with an empty selector
-	selector: "",
-
-	// The current version of jQuery being used
-	jquery: "",
-
-	// The default length of a jQuery object is 0
-	length: 0,
-
-	// The number of elements contained in the matched element set
-	size: function() {
-		return this.length;
-	},
-
-	toArray: function() {
-		return slice.call( this, 0 );
-	},
-
-	// Get the Nth element in the matched element set OR
-	// Get the whole matched element set as a clean array
-	get: function( num ) {
-		return num == null ?
-
-			// Return a 'clean' array
-			this.toArray() :
-
-			// Return just the object
-			( num < 0 ? this[ this.length + num ] : this[ num ] );
-	},
-
-	// Take an array of elements and push it onto the stack
-	// (returning the new matched element set)
-	pushStack: function( elems, name, selector ) {
-		// Build a new jQuery matched element set
-		var ret = this.constructor();
-
-		if ( jQuery.isArray( elems ) ) {
-			push.apply( ret, elems );
-
-		} else {
-			jQuery.merge( ret, elems );
-		}
-
-		// Add the old object onto the stack (as a reference)
-		ret.prevObject = this;
-
-		ret.context = this.context;
-
-		if ( name === "find" ) {
-			ret.selector = this.selector + ( this.selector ? " " : "" ) + selector;
-		} else if ( name ) {
-			ret.selector = this.selector + "." + name + "(" + selector + ")";
-		}
-
-		// Return the newly-formed element set
-		return ret;
-	},
-
-	// Execute a callback for every element in the matched set.
-	// (You can seed the arguments with an array of args, but this is
-	// only used internally.)
-	each: function( callback, args ) {
-		return jQuery.each( this, callback, args );
-	},
-
-	ready: function( fn ) {
-		// Attach the listeners
-		jQuery.bindReady();
-
-		// Add the callback
-		readyList.add( fn );
-
-		return this;
-	},
-
-	eq: function( i ) {
-		i = +i;
-		return i === -1 ?
-			this.slice( i ) :
-			this.slice( i, i + 1 );
-	},
-
-	first: function() {
-		return this.eq( 0 );
-	},
-
-	last: function() {
-		return this.eq( -1 );
-	},
-
-	slice: function() {
-		return this.pushStack( slice.apply( this, arguments ),
-			"slice", slice.call(arguments).join(",") );
-	},
-
-	map: function( callback ) {
-		return this.pushStack( jQuery.map(this, function( elem, i ) {
-			return callback.call( elem, i, elem );
-		}));
-	},
-
-	end: function() {
-		return this.prevObject || this.constructor(null);
-	},
-
-	// For internal use only.
-	// Behaves like an Array's method, not like a jQuery method.
-	push: push,
-	sort: [].sort,
-	splice: [].splice
-};
-
-// Give the init function the jQuery prototype for later instantiation
-jQuery.fn.init.prototype = jQuery.fn;
-
-jQuery.extend = jQuery.fn.extend = function() {
-	var options, name, src, copy, copyIsArray, clone,
-		target = arguments[0] || {},
-		i = 1,
-		length = arguments.length,
-		deep = false;
-
-	// Handle a deep copy situation
-	if ( typeof target === "boolean" ) {
-		deep = target;
-		target = arguments[1] || {};
-		// skip the boolean and the target
-		i = 2;
-	}
-
-	// Handle case when target is a string or something (possible in deep copy)
-	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
-		target = {};
-	}
-
-	// extend jQuery itself if only one argument is passed
-	if ( length === i ) {
-		target = this;
-		--i;
-	}
-
-	for ( ; i < length; i++ ) {
-		// Only deal with non-null/undefined values
-		if ( (options = arguments[ i ]) != null ) {
-			// Extend the base object
-			for ( name in options ) {
-				src = target[ name ];
-				copy = options[ name ];
-
-				// Prevent never-ending loop
-				if ( target === copy ) {
-					continue;
-				}
-
-				// Recurse if we're merging plain objects or arrays
-				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
-					if ( copyIsArray ) {
-						copyIsArray = false;
-						clone = src && jQuery.isArray(src) ? src : [];
-
-					} else {
-						clone = src && jQuery.isPlainObject(src) ? src : {};
-					}
-
-					// Never move original objects, clone them
-					target[ name ] = jQuery.extend( deep, clone, copy );
-
-				// Don't bring in undefined values
-				} else if ( copy !== undefined ) {
-					target[ name ] = copy;
-				}
-			}
-		}
-	}
-
-	// Return the modified object
-	return target;
-};
-
-jQuery.extend({
-	noConflict: function( deep ) {
-		if ( window.$ === jQuery ) {
-			window.$ = _$;
-		}
-
-		if ( deep && window.jQuery === jQuery ) {
-			window.jQuery = _jQuery;
-		}
-
-		return jQuery;
-	},
-
-	// Is the DOM ready to be used? Set to true once it occurs.
-	isReady: false,
-
-	// A counter to track how many items to wait for before
-	// the ready event fires. See #6781
-	readyWait: 1,
-
-	// Hold (or release) the ready event
-	holdReady: function( hold ) {
-		if ( hold ) {
-			jQuery.readyWait++;
-		} else {
-			jQuery.ready( true );
-		}
-	},
-
-	// Handle when the DOM is ready
-	ready: function( wait ) {
-		// Either a released hold or an DOMready/load event and not yet ready
-		if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
-			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-			if ( !document.body ) {
-				return setTimeout( jQuery.ready, 1 );
-			}
-
-			// Remember that the DOM is ready
-			jQuery.isReady = true;
-
-			// If a normal DOM Ready event fired, decrement, and wait if need be
-			if ( wait !== true && --jQuery.readyWait > 0 ) {
-				return;
-			}
-
-			// If there are functions bound, to execute
-			readyList.fireWith( document, [ jQuery ] );
-
-			// Trigger any bound ready events
-			if ( jQuery.fn.trigger ) {
-				jQuery( document ).trigger( "ready" ).off( "ready" );
-			}
-		}
-	},
-
-	bindReady: function() {
-		if ( readyList ) {
-			return;
-		}
-
-		readyList = jQuery.Callbacks( "once memory" );
-
-		// Catch cases where $(document).ready() is called after the
-		// browser event has already occurred.
-		if ( document.readyState === "complete" ) {
-			// Handle it asynchronously to allow scripts the opportunity to delay ready
-			return setTimeout( jQuery.ready, 1 );
-		}
-
-		// Mozilla, Opera and webkit nightlies currently support this event
-		if ( document.addEventListener ) {
-			// Use the handy event callback
-			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-
-			// A fallback to window.onload, that will always work
-			window.addEventListener( "load", jQuery.ready, false );
-
-		// If IE event model is used
-		} else if ( document.attachEvent ) {
-			// ensure firing before onload,
-			// maybe late but safe also for iframes
-			document.attachEvent( "onreadystatechange", DOMContentLoaded );
-
-			// A fallback to window.onload, that will always work
-			window.attachEvent( "onload", jQuery.ready );
-
-			// If IE and not a frame
-			// continually check to see if the document is ready
-			var toplevel = false;
-
-			try {
-				toplevel = window.frameElement == null;
-			} catch(e) {}
-
-			if ( document.documentElement.doScroll && toplevel ) {
-				doScrollCheck();
-			}
-		}
-	},
-
-	// See test/unit/core.js for details concerning isFunction.
-	// Since version 1.3, DOM methods and functions like alert
-	// aren't supported. They return false on IE (#2968).
-	isFunction: function( obj ) {
-		return jQuery.type(obj) === "function";
-	},
-
-	isArray: Array.isArray || function( obj ) {
-		return jQuery.type(obj) === "array";
-	},
-
-	isWindow: function( obj ) {
-		return obj != null && obj == obj.window;
-	},
-
-	isNumeric: function( obj ) {
-		return !isNaN( parseFloat(obj) ) && isFinite( obj );
-	},
-
-	type: function( obj ) {
-		return obj == null ?
-			String( obj ) :
-			class2type[ toString.call(obj) ] || "object";
-	},
-
-	isPlainObject: function( obj ) {
-		// Must be an Object.
-		// Because of IE, we also have to check the presence of the constructor property.
-		// Make sure that DOM nodes and window objects don't pass through, as well
-		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
-			return false;
-		}
-
-		try {
-			// Not own constructor property must be Object
-			if ( obj.constructor &&
-				!hasOwn.call(obj, "constructor") &&
-				!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
-				return false;
-			}
-		} catch ( e ) {
-			// IE8,9 Will throw exceptions on certain host objects #9897
-			return false;
-		}
-
-		// Own properties are enumerated firstly, so to speed up,
-		// if last one is own, then all properties are own.
-
-		var key;
-		for ( key in obj ) {}
-
-		return key === undefined || hasOwn.call( obj, key );
-	},
-
-	isEmptyObject: function( obj ) {
-		for ( var name in obj ) {
-			return false;
-		}
-		return true;
-	},
-
-	error: function( msg ) {
-		throw new Error( msg );
-	},
-
-	parseJSON: function( data ) {
-		if ( typeof data !== "string" || !data ) {
-			return null;
-		}
-
-		// Make sure leading/trailing whitespace is removed (IE can't handle it)
-		data = jQuery.trim( data );
-
-		// Attempt to parse using the native JSON parser first
-		if ( window.JSON && window.JSON.parse ) {
-			return window.JSON.parse( data );
-		}
-
-		// Make sure the incoming data is actual JSON
-		// Logic borrowed from http://json.org/json2.js
-		if ( rvalidchars.test( data.replace( rvalidescape, "@" )
-			.replace( rvalidtokens, "]" )
-			.replace( rvalidbraces, "")) ) {
-
-			return ( new Function( "return " + data ) )();
-
-		}
-		jQuery.error( "Invalid JSON: " + data );
-	},
-
-	// Cross-browser xml parsing
-	parseXML: function( data ) {
-		if ( typeof data !== "string" || !data ) {
-			return null;
-		}
-		var xml, tmp;
-		try {
-			if ( window.DOMParser ) { // Standard
-				tmp = new DOMParser();
-				xml = tmp.parseFromString( data , "text/xml" );
-			} else { // IE
-				xml = new ActiveXObject( "Microsoft.XMLDOM" );
-				xml.async = "false";
-				xml.loadXML( data );
-			}
-		} catch( e ) {
-			xml = undefined;
-		}
-		if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
-			jQuery.error( "Invalid XML: " + data );
-		}
-		return xml;
-	},
-
-	noop: function() {},
-
-	// Evaluates a script in a global context
-	// Workarounds based on findings by Jim Driscoll
-	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
-	globalEval: function( data ) {
-		if ( data && rnotwhite.test( data ) ) {
-			// We use execScript on Internet Explorer
-			// We use an anonymous function so that context is window
-			// rather than jQuery in Firefox
-			( window.execScript || function( data ) {
-				window[ "eval" ].call( window, data );
-			} )( data );
-		}
-	},
-
-	// Convert dashed to camelCase; used by the css and data modules
-	// Microsoft forgot to hump their vendor prefix (#9572)
-	camelCase: function( string ) {
-		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
-	},
-
-	nodeName: function( elem, name ) {
-		return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
-	},
-
-	// args is for internal usage only
-	each: function( object, callback, args ) {
-		var name, i = 0,
-			length = object.length,
-			isObj = length === undefined || jQuery.isFunction( object );
-
-		if ( args ) {
-			if ( isObj ) {
-				for ( name in object ) {
-					if ( callback.apply( object[ name ], args ) === false ) {
-						break;
-					}
-				}
-			} else {
-				for ( ; i < length; ) {
-					if ( callback.apply( object[ i++ ], args ) === false ) {
-						break;
-					}
-				}
-			}
-
-		// A special, fast, case for the most common use of each
-		} else {
-			if ( isObj ) {
-				for ( name in object ) {
-					if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
-						break;
-					}
-				}
-			} else {
-				for ( ; i < length; ) {
-					if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
-						break;
-					}
-				}
-			}
-		}
-
-		return object;
-	},
-
-	// Use native String.trim function wherever possible
-	trim: trim ?
-		function( text ) {
-			return text == null ?
-				"" :
-				trim.call( text );
-		} :
-
-		// Otherwise use our own trimming functionality
-		function( text ) {
-			return text == null ?
-				"" :
-				text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
-		},
-
-	// results is for internal usage only
-	makeArray: function( array, results ) {
-		var ret = results || [];
-
-		if ( array != null ) {
-			// The window, strings (and functions) also have 'length'
-			// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
-			var type = jQuery.type( array );
-
-			if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
-				push.call( ret, array );
-			} else {
-				jQuery.merge( ret, array );
-			}
-		}
-
-		return ret;
-	},
-
-	inArray: function( elem, array, i ) {
-		var len;
-
-		if ( array ) {
-			if ( indexOf ) {
-				return indexOf.call( array, elem, i );
-			}
-
-			len = array.length;
-			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
-
-			for ( ; i < len; i++ ) {
-				// Skip accessing in sparse arrays
-				if ( i in array && array[ i ] === elem ) {
-					return i;
-				}
-			}
-		}
-
-		return -1;
-	},
-
-	merge: function( first, second ) {
-		var i = first.length,
-			j = 0;
-
-		if ( typeof second.length === "number" ) {
-			for ( var l = second.length; j < l; j++ ) {
-				first[ i++ ] = second[ j ];
-			}
-
-		} else {
-			while ( second[j] !== undefined ) {
-				first[ i++ ] = second[ j++ ];
-			}
-		}
-
-		first.length = i;
-
-		return first;
-	},
-
-	grep: function( elems, callback, inv ) {
-		var ret = [], retVal;
-		inv = !!inv;
-
-		// Go through the array, only saving the items
-		// that pass the validator function
-		for ( var i = 0, length = elems.length; i < length; i++ ) {
-			retVal = !!callback( elems[ i ], i );
-			if ( inv !== retVal ) {
-				ret.push( elems[ i ] );
-			}
-		}
-
-		return ret;
-	},
-
-	// arg is for internal usage only
-	map: function( elems, callback, arg ) {
-		var value, key, ret = [],
-			i = 0,
-			length = elems.length,
-			// jquery objects are treated as arrays
-			isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
-
-		// Go through the array, translating each of the items to their
-		if ( isArray ) {
-			for ( ; i < length; i++ ) {
-				value = callback( elems[ i ], i, arg );
-
-				if ( value != null ) {
-					ret[ ret.length ] = value;
-				}
-			}
-
-		// Go through every key on the object,
-		} else {
-			for ( key in elems ) {
-				value = callback( elems[ key ], key, arg );
-
-				if ( value != null ) {
-					ret[ ret.length ] = value;
-				}
-			}
-		}
-
-		// Flatten any nested arrays
-		return ret.concat.apply( [], ret );
-	},
-
-	// A global GUID counter for objects
-	guid: 1,
-
-	// Bind a function to a context, optionally partially applying any
-	// arguments.
-	proxy: function( fn, context ) {
-		if ( typeof context === "string" ) {
-			var tmp = fn[ context ];
-			context = fn;
-			fn = tmp;
-		}
-
-		// Quick check to determine if target is callable, in the spec
-		// this throws a TypeError, but we will just return undefined.
-		if ( !jQuery.isFunction( fn ) ) {
-			return undefined;
-		}
-
-		// Simulated bind
-		var args = slice.call( arguments, 2 ),
-			proxy = function() {
-				return fn.apply( context, args.concat( slice.call( arguments ) ) );
-			};
-
-		// Set the guid of unique handler to the same of original handler, so it can be removed
-		proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
-
-		return proxy;
-	},
-
-	// Mutifunctional method to get and set values to a collection
-	// The value/s can optionally be executed if it's a function
-	access: function( elems, fn, key, value, chainable, emptyGet, pass ) {
-		var exec,
-			bulk = key == null,
-			i = 0,
-			length = elems.length;
-
-		// Sets many values
-		if ( key && typeof key === "object" ) {
-			for ( i in key ) {
-				jQuery.access( elems, fn, i, key[i], 1, emptyGet, value );
-			}
-			chainable = 1;
-
-		// Sets one value
-		} else if ( value !== undefined ) {
-			// Optionally, function values get executed if exec is true
-			exec = pass === undefined && jQuery.isFunction( value );
-
-			if ( bulk ) {
-				// Bulk operations only iterate when executing function values
-				if ( exec ) {
-					exec = fn;
-					fn = function( elem, key, value ) {
-						return exec.call( jQuery( elem ), value );
-					};
-
-				// Otherwise they run against the entire set
-				} else {
-					fn.call( elems, value );
-					fn = null;
-				}
-			}
-
-			if ( fn ) {
-				for (; i < length; i++ ) {
-					fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
-				}
-			}
-
-			chainable = 1;
-		}
-
-		return chainable ?
-			elems :
-
-			// Gets
-			bulk ?
-				fn.call( elems ) :
-				length ? fn( elems[0], key ) : emptyGet;
-	},
-
-	now: function() {
-		return ( new Date() ).getTime();
-	},
-
-	// Use of jQuery.browser is frowned upon.
-	// More details: http://docs.jquery.com/Utilities/jQuery.browser
-	uaMatch: function( ua ) {
-		ua = ua.toLowerCase();
-
-		var match = rwebkit.exec( ua ) ||
-			ropera.exec( ua ) ||
-			rmsie.exec( ua ) ||
-			ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
-			[];
-
-		return { browser: match[1] || "", version: match[2] || "0" };
-	},
-
-	sub: function() {
-		function jQuerySub( selector, context ) {
-			return new jQuerySub.fn.init( selector, context );
-		}
-		jQuery.extend( true, jQuerySub, this );
-		jQuerySub.superclass = this;
-		jQuerySub.fn = jQuerySub.prototype = this();
-		jQuerySub.fn.constructor = jQuerySub;
-		jQuerySub.sub = this.sub;
-		jQuerySub.fn.init = function init( selector, context ) {
-			if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
-				context = jQuerySub( context );
-			}
-
-			return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
-		};
-		jQuerySub.fn.init.prototype = jQuerySub.fn;
-		var rootjQuerySub = jQuerySub(document);
-		return jQuerySub;
-	},
-
-	browser: {}
-});
-
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
-	class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-browserMatch = jQuery.uaMatch( userAgent );
-if ( browserMatch.browser ) {
-	jQuery.browser[ browserMatch.browser ] = true;
-	jQuery.browser.version = browserMatch.version;
-}
-
-// Deprecated, use jQuery.browser.webkit instead
-if ( jQuery.browser.webkit ) {
-	jQuery.browser.safari = true;
-}
-
-// IE doesn't match non-breaking spaces with \s
-if ( rnotwhite.test( "\xA0" ) ) {
-	trimLeft = /^[\s\xA0]+/;
-	trimRight = /[\s\xA0]+$/;
-}
-
-// All jQuery objects should point back to these
-rootjQuery = jQuery(document);
-
-// Cleanup functions for the document ready method
-if ( document.addEventListener ) {
-	DOMContentLoaded = function() {
-		document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-		jQuery.ready();
-	};
-
-} else if ( document.attachEvent ) {
-	DOMContentLoaded = function() {
-		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-		if ( document.readyState === "complete" ) {
-			document.detachEvent( "onreadystatechange", DOMContentLoaded );
-			jQuery.ready();
-		}
-	};
-}
-
-// The DOM ready check for Internet Explorer
-function doScrollCheck() {
-	if ( jQuery.isReady ) {
-		return;
-	}
-
-	try {
-		// If IE is used, use the trick by Diego Perini
-		// http://javascript.nwbox.com/IEContentLoaded/
-		document.documentElement.doScroll("left");
-	} catch(e) {
-		setTimeout( doScrollCheck, 1 );
-		return;
-	}
-
-	// and execute any waiting functions
-	jQuery.ready();
-}
-
-return jQuery;
-
-})();
-
-
-// String to Object flags format cache
-var flagsCache = {};
-
-// Convert String-formatted flags into Object-formatted ones and store in cache
-function createFlags( flags ) {
-	var object = flagsCache[ flags ] = {},
-		i, length;
-	flags = flags.split( /\s+/ );
-	for ( i = 0, length = flags.length; i < length; i++ ) {
-		object[ flags[i] ] = true;
-	}
-	return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- *	flags:	an optional list of space-separated flags that will change how
- *			the callback list behaves
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible flags:
- *
- *	once:			will ensure the callback list can only be fired once (like a Deferred)
- *
- *	memory:			will keep track of previous values and will call any callback added
- *					after the list has been fired right away with the latest "memorized"
- *					values (like a Deferred)
- *
- *	unique:			will ensure a callback can only be added once (no duplicate in the list)
- *
- *	stopOnFalse:	interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( flags ) {
-
-	// Convert flags from String-formatted to Object-formatted
-	// (we check in cache first)
-	flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {};
-
-	var // Actual callback list
-		list = [],
-		// Stack of fire calls for repeatable lists
-		stack = [],
-		// Last fire value (for non-forgettable lists)
-		memory,
-		// Flag to know if list was already fired
-		fired,
-		// Flag to know if list is currently firing
-		firing,
-		// First callback to fire (used internally by add and fireWith)
-		firingStart,
-		// End of the loop when firing
-		firingLength,
-		// Index of currently firing callback (modified by remove if needed)
-		firingIndex,
-		// Add one or several callbacks to the list
-		add = function( args ) {
-			var i,
-				length,
-				elem,
-				type,
-				actual;
-			for ( i = 0, length = args.length; i < length; i++ ) {
-				elem = args[ i ];
-				type = jQuery.type( elem );
-				if ( type === "array" ) {
-					// Inspect recursively
-					add( elem );
-				} else if ( type === "function" ) {
-					// Add if not in unique mode and callback is not in
-					if ( !flags.unique || !self.has( elem ) ) {
-						list.push( elem );
-					}
-				}
-			}
-		},
-		// Fire callbacks
-		fire = function( context, args ) {
-			args = args || [];
-			memory = !flags.memory || [ context, args ];
-			fired = true;
-			firing = true;
-			firingIndex = firingStart || 0;
-			firingStart = 0;
-			firingLength = list.length;
-			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
-				if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) {
-					memory = true; // Mark as halted
-					break;
-				}
-			}
-			firing = false;
-			if ( list ) {
-				if ( !flags.once ) {
-					if ( stack && stack.length ) {
-						memory = stack.shift();
-						self.fireWith( memory[ 0 ], memory[ 1 ] );
-					}
-				} else if ( memory === true ) {
-					self.disable();
-				} else {
-					list = [];
-				}
-			}
-		},
-		// Actual Callbacks object
-		self = {
-			// Add a callback or a collection of callbacks to the list
-			add: function() {
-				if ( list ) {
-					var length = list.length;
-					add( arguments );
-					// Do we need to add the callbacks to the
-					// current firing batch?
-					if ( firing ) {
-						firingLength = list.length;
-					// With memory, if we're not firing then
-					// we should call right away, unless previous
-					// firing was halted (stopOnFalse)
-					} else if ( memory && memory !== true ) {
-						firingStart = length;
-						fire( memory[ 0 ], memory[ 1 ] );
-					}
-				}
-				return this;
-			},
-			// Remove a callback from the list
-			remove: function() {
-				if ( list ) {
-					var args = arguments,
-						argIndex = 0,
-						argLength = args.length;
-					for ( ; argIndex < argLength ; argIndex++ ) {
-						for ( var i = 0; i < list.length; i++ ) {
-							if ( args[ argIndex ] === list[ i ] ) {
-								// Handle firingIndex and firingLength
-								if ( firing ) {
-									if ( i <= firingLength ) {
-										firingLength--;
-										if ( i <= firingIndex ) {
-											firingIndex--;
-										}
-									}
-								}
-								// Remove the element
-								list.splice( i--, 1 );
-								// If we have some unicity property then
-								// we only need to do this once
-								if ( flags.unique ) {
-									break;
-								}
-							}
-						}
-					}
-				}
-				return this;
-			},
-			// Control if a given callback is in the list
-			has: function( fn ) {
-				if ( list ) {
-					var i = 0,
-						length = list.length;
-					for ( ; i < length; i++ ) {
-						if ( fn === list[ i ] ) {
-							return true;
-						}
-					}
-				}
-				return false;
-			},
-			// Remove all callbacks from the list
-			empty: function() {
-				list = [];
-				return this;
-			},
-			// Have the list do nothing anymore
-			disable: function() {
-				list = stack = memory = undefined;
-				return this;
-			},
-			// Is it disabled?
-			disabled: function() {
-				return !list;
-			},
-			// Lock the list in its current state
-			lock: function() {
-				stack = undefined;
-				if ( !memory || memory === true ) {
-					self.disable();
-				}
-				return this;
-			},
-			// Is it locked?
-			locked: function() {
-				return !stack;
-			},
-			// Call all callbacks with the given context and arguments
-			fireWith: function( context, args ) {
-				if ( stack ) {
-					if ( firing ) {
-						if ( !flags.once ) {
-							stack.push( [ context, args ] );
-						}
-					} else if ( !( flags.once && memory ) ) {
-						fire( context, args );
-					}
-				}
-				return this;
-			},
-			// Call all the callbacks with the given arguments
-			fire: function() {
-				self.fireWith( this, arguments );
-				return this;
-			},
-			// To know if the callbacks have already been called at least once
-			fired: function() {
-				return !!fired;
-			}
-		};
-
-	return self;
-};
-
-
-
-
-var // Static reference to slice
-	sliceDeferred = [].slice;
-
-jQuery.extend({
-
-	Deferred: function( func ) {
-		var doneList = jQuery.Callbacks( "once memory" ),
-			failList = jQuery.Callbacks( "once memory" ),
-			progressList = jQuery.Callbacks( "memory" ),
-			state = "pending",
-			lists = {
-				resolve: doneList,
-				reject: failList,
-				notify: progressList
-			},
-			promise = {
-				done: doneList.add,
-				fail: failList.add,
-				progress: progressList.add,
-
-				state: function() {
-					return state;
-				},
-
-				// Deprecated
-				isResolved: doneList.fired,
-				isRejected: failList.fired,
-
-				then: function( doneCallbacks, failCallbacks, progressCallbacks ) {
-					deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks );
-					return this;
-				},
-				always: function() {
-					deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments );
-					return this;
-				},
-				pipe: function( fnDone, fnFail, fnProgress ) {
-					return jQuery.Deferred(function( newDefer ) {
-						jQuery.each( {
-							done: [ fnDone, "resolve" ],
-							fail: [ fnFail, "reject" ],
-							progress: [ fnProgress, "notify" ]
-						}, function( handler, data ) {
-							var fn = data[ 0 ],
-								action = data[ 1 ],
-								returned;
-							if ( jQuery.isFunction( fn ) ) {
-								deferred[ handler ](function() {
-									returned = fn.apply( this, arguments );
-									if ( returned && jQuery.isFunction( returned.promise ) ) {
-										returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify );
-									} else {
-										newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
-									}
-								});
-							} else {
-								deferred[ handler ]( newDefer[ action ] );
-							}
-						});
-					}).promise();
-				},
-				// Get a promise for this deferred
-				// If obj is provided, the promise aspect is added to the object
-				promise: function( obj ) {
-					if ( obj == null ) {
-						obj = promise;
-					} else {
-						for ( var key in promise ) {
-							obj[ key ] = promise[ key ];
-						}
-					}
-					return obj;
-				}
-			},
-			deferred = promise.promise({}),
-			key;
-
-		for ( key in lists ) {
-			deferred[ key ] = lists[ key ].fire;
-			deferred[ key + "With" ] = lists[ key ].fireWith;
-		}
-
-		// Handle state
-		deferred.done( function() {
-			state = "resolved";
-		}, failList.disable, progressList.lock ).fail( function() {
-			state = "rejected";
-		}, doneList.disable, progressList.lock );
-
-		// Call given func if any
-		if ( func ) {
-			func.call( deferred, deferred );
-		}
-
-		// All done!
-		return deferred;
-	},
-
-	// Deferred helper
-	when: function( firstParam ) {
-		var args = sliceDeferred.call( arguments, 0 ),
-			i = 0,
-			length = args.length,
-			pValues = new Array( length ),
-			count = length,
-			pCount = length,
-			deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
-				firstParam :
-				jQuery.Deferred(),
-			promise = deferred.promise();
-		function resolveFunc( i ) {
-			return function( value ) {
-				args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
-				if ( !( --count ) ) {
-					deferred.resolveWith( deferred, args );
-				}
-			};
-		}
-		function progressFunc( i ) {
-			return function( value ) {
-				pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
-				deferred.notifyWith( promise, pValues );
-			};
-		}
-		if ( length > 1 ) {
-			for ( ; i < length; i++ ) {
-				if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) {
-					args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) );
-				} else {
-					--count;
-				}
-			}
-			if ( !count ) {
-				deferred.resolveWith( deferred, args );
-			}
-		} else if ( deferred !== firstParam ) {
-			deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
-		}
-		return promise;
-	}
-});
-
-
-
-
-jQuery.support = (function() {
-
-	var support,
-		all,
-		a,
-		select,
-		opt,
-		input,
-		fragment,
-		tds,
-		events,
-		eventName,
-		i,
-		isSupported,
-		div = document.createElement( "div" ),
-		documentElement = document.documentElement;
-
-	// Preliminary tests
-	div.setAttribute("className", "t");
-	div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
-
-	all = div.getElementsByTagName( "*" );
-	a = div.getElementsByTagName( "a" )[ 0 ];
-
-	// Can't get basic test support
-	if ( !all || !all.length || !a ) {
-		return {};
-	}
-
-	// First batch of supports tests
-	select = document.createElement( "select" );
-	opt = select.appendChild( document.createElement("option") );
-	input = div.getElementsByTagName( "input" )[ 0 ];
-
-	support = {
-		// IE strips leading whitespace when .innerHTML is used
-		leadingWhitespace: ( div.firstChild.nodeType === 3 ),
-
-		// Make sure that tbody elements aren't automatically inserted
-		// IE will insert them into empty tables
-		tbody: !div.getElementsByTagName("tbody").length,
-
-		// Make sure that link elements get serialized correctly by innerHTML
-		// This requires a wrapper element in IE
-		htmlSerialize: !!div.getElementsByTagName("link").length,
-
-		// Get the style information from getAttribute
-		// (IE uses .cssText instead)
-		style: /top/.test( a.getAttribute("style") ),
-
-		// Make sure that URLs aren't manipulated
-		// (IE normalizes it by default)
-		hrefNormalized: ( a.getAttribute("href") === "/a" ),
-
-		// Make sure that element opacity exists
-		// (IE uses filter instead)
-		// Use a regex to work around a WebKit issue. See #5145
-		opacity: /^0.55/.test( a.style.opacity ),
-
-		// Verify style float existence
-		// (IE uses styleFloat instead of cssFloat)
-		cssFloat: !!a.style.cssFloat,
-
-		// Make sure that if no value is specified for a checkbox
-		// that it defaults to "on".
-		// (WebKit defaults to "" instead)
-		checkOn: ( input.value === "on" ),
-
-		// Make sure that a selected-by-default option has a working selected property.
-		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
-		optSelected: opt.selected,
-
-		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
-		getSetAttribute: div.className !== "t",
-
-		// Tests for enctype support on a form(#6743)
-		enctype: !!document.createElement("form").enctype,
-
-		// Makes sure cloning an html5 element does not cause problems
-		// Where outerHTML is undefined, this still works
-		html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
-
-		// Will be defined later
-		submitBubbles: true,
-		changeBubbles: true,
-		focusinBubbles: false,
-		deleteExpando: true,
-		noCloneEvent: true,
-		inlineBlockNeedsLayout: false,
-		shrinkWrapBlocks: false,
-		reliableMarginRight: true,
-		pixelMargin: true
-	};
-
-	// jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead
-	jQuery.boxModel = support.boxModel = (document.compatMode === "CSS1Compat");
-
-	// Make sure checked status is properly cloned
-	input.checked = true;
-	support.noCloneChecked = input.cloneNode( true ).checked;
-
-	// Make sure that the options inside disabled selects aren't marked as disabled
-	// (WebKit marks them as disabled)
-	select.disabled = true;
-	support.optDisabled = !opt.disabled;
-
-	// Test to see if it's possible to delete an expando from an element
-	// Fails in Internet Explorer
-	try {
-		delete div.test;
-	} catch( e ) {
-		support.deleteExpando = false;
-	}
-
-	if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
-		div.attachEvent( "onclick", function() {
-			// Cloning a node shouldn't copy over any
-			// bound event handlers (IE does this)
-			support.noCloneEvent = false;
-		});
-		div.cloneNode( true ).fireEvent( "onclick" );
-	}
-
-	// Check if a radio maintains its value
-	// after being appended to the DOM
-	input = document.createElement("input");
-	input.value = "t";
-	input.setAttribute("type", "radio");
-	support.radioValue = input.value === "t";
-
-	input.setAttribute("checked", "checked");
-
-	// #11217 - WebKit loses check when the name is after the checked attribute
-	input.setAttribute( "name", "t" );
-
-	div.appendChild( input );
-	fragment = document.createDocumentFragment();
-	fragment.appendChild( div.lastChild );
-
-	// WebKit doesn't clone checked state correctly in fragments
-	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
-	// Check if a disconnected checkbox will retain its checked
-	// value of true after appended to the DOM (IE6/7)
-	support.appendChecked = input.checked;
-
-	fragment.removeChild( input );
-	fragment.appendChild( div );
-
-	// Technique from Juriy Zaytsev
-	// http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
-	// We only care about the case where non-standard event systems
-	// are used, namely in IE. Short-circuiting here helps us to
-	// avoid an eval call (in setAttribute) which can cause CSP
-	// to go haywire. See: https://developer.mozilla.org/en/Security/CSP
-	if ( div.attachEvent ) {
-		for ( i in {
-			submit: 1,
-			change: 1,
-			focusin: 1
-		}) {
-			eventName = "on" + i;
-			isSupported = ( eventName in div );
-			if ( !isSupported ) {
-				div.setAttribute( eventName, "return;" );
-				isSupported = ( typeof div[ eventName ] === "function" );
-			}
-			support[ i + "Bubbles" ] = isSupported;
-		}
-	}
-
-	fragment.removeChild( div );
-
-	// Null elements to avoid leaks in IE
-	fragment = select = opt = div = input = null;
-
-	// Run tests that need a body at doc ready
-	jQuery(function() {
-		var container, outer, inner, table, td, offsetSupport,
-			marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight,
-			paddingMarginBorderVisibility, paddingMarginBorder,
-			body = document.getElementsByTagName("body")[0];
-
-		if ( !body ) {
-			// Return for frameset docs that don't have a body
-			return;
-		}
-
-		conMarginTop = 1;
-		paddingMarginBorder = "padding:0;margin:0;border:";
-		positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;";
-		paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;";
-		style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;";
-		html = "<div " + style + "display:block;'><div style='" + paddingMarginBorder + "0;display:block;overflow:hidden;'></div></div>" +
-			"<table " + style + "' cellpadding='0' cellspacing='0'>" +
-			"<tr><td></td></tr></table>";
-
-		container = document.createElement("div");
-		container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px";
-		body.insertBefore( container, body.firstChild );
-
-		// Construct the test element
-		div = document.createElement("div");
-		container.appendChild( div );
-
-		// Check if table cells still have offsetWidth/Height when they are set
-		// to display:none and there are still other visible table cells in a
-		// table row; if so, offsetWidth/Height are not reliable for use when
-		// determining if an element has been hidden directly using
-		// display:none (it is still safe to use offsets if a parent element is
-		// hidden; don safety goggles and see bug #4512 for more information).
-		// (only IE 8 fails this test)
-		div.innerHTML = "<table><tr><td style='" + paddingMarginBorder + "0;display:none'></td><td>t</td></tr></table>";
-		tds = div.getElementsByTagName( "td" );
-		isSupported = ( tds[ 0 ].offsetHeight === 0 );
-
-		tds[ 0 ].style.display = "";
-		tds[ 1 ].style.display = "none";
-
-		// Check if empty table cells still have offsetWidth/Height
-		// (IE <= 8 fail this test)
-		support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
-
-		// Check if div with explicit width and no margin-right incorrectly
-		// gets computed margin-right based on width of container. For more
-		// info see bug #3333
-		// Fails in WebKit before Feb 2011 nightlies
-		// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-		if ( window.getComputedStyle ) {
-			div.innerHTML = "";
-			marginDiv = document.createElement( "div" );
-			marginDiv.style.width = "0";
-			marginDiv.style.marginRight = "0";
-			div.style.width = "2px";
-			div.appendChild( marginDiv );
-			support.reliableMarginRight =
-				( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
-		}
-
-		if ( typeof div.style.zoom !== "undefined" ) {
-			// Check if natively block-level elements act like inline-block
-			// elements when setting their display to 'inline' and giving
-			// them layout
-			// (IE < 8 does this)
-			div.innerHTML = "";
-			div.style.width = div.style.padding = "1px";
-			div.style.border = 0;
-			div.style.overflow = "hidden";
-			div.style.display = "inline";
-			div.style.zoom = 1;
-			support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
-
-			// Check if elements with layout shrink-wrap their children
-			// (IE 6 does this)
-			div.style.display = "block";
-			div.style.overflow = "visible";
-			div.innerHTML = "<div style='width:5px;'></div>";
-			support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
-		}
-
-		div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility;
-		div.innerHTML = html;
-
-		outer = div.firstChild;
-		inner = outer.firstChild;
-		td = outer.nextSibling.firstChild.firstChild;
-
-		offsetSupport = {
-			doesNotAddBorder: ( inner.offsetTop !== 5 ),
-			doesAddBorderForTableAndCells: ( td.offsetTop === 5 )
-		};
-
-		inner.style.position = "fixed";
-		inner.style.top = "20px";
-
-		// safari subtracts parent border width here which is 5px
-		offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 );
-		inner.style.position = inner.style.top = "";
-
-		outer.style.overflow = "hidden";
-		outer.style.position = "relative";
-
-		offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 );
-		offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop );
-
-		if ( window.getComputedStyle ) {
-			div.style.marginTop = "1%";
-			support.pixelMargin = ( window.getComputedStyle( div, null ) || { marginTop: 0 } ).marginTop !== "1%";
-		}
-
-		if ( typeof container.style.zoom !== "undefined" ) {
-			container.style.zoom = 1;
-		}
-
-		body.removeChild( container );
-		marginDiv = div = container = null;
-
-		jQuery.extend( support, offsetSupport );
-	});
-
-	return support;
-})();
-
-
-
-
-var rbrace = /^(?:\{.*\}|\[.*\])$/,
-	rmultiDash = /([A-Z])/g;
-
-jQuery.extend({
-	cache: {},
-
-	// Please use with caution
-	uuid: 0,
-
-	// Unique for each copy of jQuery on the page
-	// Non-digits removed to match rinlinejQuery
-	expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
-
-	// The following elements throw uncatchable exceptions if you
-	// attempt to add expando properties to them.
-	noData: {
-		"embed": true,
-		// Ban all objects except for Flash (which handle expandos)
-		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
-		"applet": true
-	},
-
-	hasData: function( elem ) {
-		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
-		return !!elem && !isEmptyDataObject( elem );
-	},
-
-	data: function( elem, name, data, pvt /* Internal Use Only */ ) {
-		if ( !jQuery.acceptData( elem ) ) {
-			return;
-		}
-
-		var privateCache, thisCache, ret,
-			internalKey = jQuery.expando,
-			getByName = typeof name === "string",
-
-			// We have to handle DOM nodes and JS objects differently because IE6-7
-			// can't GC object references properly across the DOM-JS boundary
-			isNode = elem.nodeType,
-
-			// Only DOM nodes need the global jQuery cache; JS object data is
-			// attached directly to the object so GC can occur automatically
-			cache = isNode ? jQuery.cache : elem,
-
-			// Only defining an ID for JS objects if its cache already exists allows
-			// the code to shortcut on the same path as a DOM node with no cache
-			id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey,
-			isEvents = name === "events";
-
-		// Avoid doing any more work than we need to when trying to get data on an
-		// object that has no data at all
-		if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) {
-			return;
-		}
-
-		if ( !id ) {
-			// Only DOM nodes need a new unique ID for each element since their data
-			// ends up in the global cache
-			if ( isNode ) {
-				elem[ internalKey ] = id = ++jQuery.uuid;
-			} else {
-				id = internalKey;
-			}
-		}
-
-		if ( !cache[ id ] ) {
-			cache[ id ] = {};
-
-			// Avoids exposing jQuery metadata on plain JS objects when the object
-			// is serialized using JSON.stringify
-			if ( !isNode ) {
-				cache[ id ].toJSON = jQuery.noop;
-			}
-		}
-
-		// An object can be passed to jQuery.data instead of a key/value pair; this gets
-		// shallow copied over onto the existing cache
-		if ( typeof name === "object" || typeof name === "function" ) {
-			if ( pvt ) {
-				cache[ id ] = jQuery.extend( cache[ id ], name );
-			} else {
-				cache[ id ].data = jQuery.extend( cache[ id ].data, name );
-			}
-		}
-
-		privateCache = thisCache = cache[ id ];
-
-		// jQuery data() is stored in a separate object inside the object's internal data
-		// cache in order to avoid key collisions between internal data and user-defined
-		// data.
-		if ( !pvt ) {
-			if ( !thisCache.data ) {
-				thisCache.data = {};
-			}
-
-			thisCache = thisCache.data;
-		}
-
-		if ( data !== undefined ) {
-			thisCache[ jQuery.camelCase( name ) ] = data;
-		}
-
-		// Users should not attempt to inspect the internal events object using jQuery.data,
-		// it is undocumented and subject to change. But does anyone listen? No.
-		if ( isEvents && !thisCache[ name ] ) {
-			return privateCache.events;
-		}
-
-		// Check for both converted-to-camel and non-converted data property names
-		// If a data property was specified
-		if ( getByName ) {
-
-			// First Try to find as-is property data
-			ret = thisCache[ name ];
-
-			// Test for null|undefined property data
-			if ( ret == null ) {
-
-				// Try to find the camelCased property
-				ret = thisCache[ jQuery.camelCase( name ) ];
-			}
-		} else {
-			ret = thisCache;
-		}
-
-		return ret;
-	},
-
-	removeData: function( elem, name, pvt /* Internal Use Only */ ) {
-		if ( !jQuery.acceptData( elem ) ) {
-			return;
-		}
-
-		var thisCache, i, l,
-
-			// Reference to internal data cache key
-			internalKey = jQuery.expando,
-
-			isNode = elem.nodeType,
-
-			// See jQuery.data for more information
-			cache = isNode ? jQuery.cache : elem,
-
-			// See jQuery.data for more information
-			id = isNode ? elem[ internalKey ] : internalKey;
-
-		// If there is already no cache entry for this object, there is no
-		// purpose in continuing
-		if ( !cache[ id ] ) {
-			return;
-		}
-
-		if ( name ) {
-
-			thisCache = pvt ? cache[ id ] : cache[ id ].data;
-
-			if ( thisCache ) {
-
-				// Support array or space separated string names for data keys
-				if ( !jQuery.isArray( name ) ) {
-
-					// try the string as a key before any manipulation
-					if ( name in thisCache ) {
-						name = [ name ];
-					} else {
-
-						// split the camel cased version by spaces unless a key with the spaces exists
-						name = jQuery.camelCase( name );
-						if ( name in thisCache ) {
-							name = [ name ];
-						} else {
-							name = name.split( " " );
-						}
-					}
-				}
-
-				for ( i = 0, l = name.length; i < l; i++ ) {
-					delete thisCache[ name[i] ];
-				}
-
-				// If there is no data left in the cache, we want to continue
-				// and let the cache object itself get destroyed
-				if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
-					return;
-				}
-			}
-		}
-
-		// See jQuery.data for more information
-		if ( !pvt ) {
-			delete cache[ id ].data;
-
-			// Don't destroy the parent cache unless the internal data object
-			// had been the only thing left in it
-			if ( !isEmptyDataObject(cache[ id ]) ) {
-				return;
-			}
-		}
-
-		// Browsers that fail expando deletion also refuse to delete expandos on
-		// the window, but it will allow it on all other JS objects; other browsers
-		// don't care
-		// Ensure that `cache` is not a window object #10080
-		if ( jQuery.support.deleteExpando || !cache.setInterval ) {
-			delete cache[ id ];
-		} else {
-			cache[ id ] = null;
-		}
-
-		// We destroyed the cache and need to eliminate the expando on the node to avoid
-		// false lookups in the cache for entries that no longer exist
-		if ( isNode ) {
-			// IE does not allow us to delete expando properties from nodes,
-			// nor does it have a removeAttribute function on Document nodes;
-			// we must handle all of these cases
-			if ( jQuery.support.deleteExpando ) {
-				delete elem[ internalKey ];
-			} else if ( elem.removeAttribute ) {
-				elem.removeAttribute( internalKey );
-			} else {
-				elem[ internalKey ] = null;
-			}
-		}
-	},
-
-	// For internal use only.
-	_data: function( elem, name, data ) {
-		return jQuery.data( elem, name, data, true );
-	},
-
-	// A method for determining if a DOM node can handle the data expando
-	acceptData: function( elem ) {
-		if ( elem.nodeName ) {
-			var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
-
-			if ( match ) {
-				return !(match === true || elem.getAttribute("classid") !== match);
-			}
-		}
-
-		return true;
-	}
-});
-
-jQuery.fn.extend({
-	data: function( key, value ) {
-		var parts, part, attr, name, l,
-			elem = this[0],
-			i = 0,
-			data = null;
-
-		// Gets all values
-		if ( key === undefined ) {
-			if ( this.length ) {
-				data = jQuery.data( elem );
-
-				if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
-					attr = elem.attributes;
-					for ( l = attr.length; i < l; i++ ) {
-						name = attr[i].name;
-
-						if ( name.indexOf( "data-" ) === 0 ) {
-							name = jQuery.camelCase( name.substring(5) );
-
-							dataAttr( elem, name, data[ name ] );
-						}
-					}
-					jQuery._data( elem, "parsedAttrs", true );
-				}
-			}
-
-			return data;
-		}
-
-		// Sets multiple values
-		if ( typeof key === "object" ) {
-			return this.each(function() {
-				jQuery.data( this, key );
-			});
-		}
-
-		parts = key.split( ".", 2 );
-		parts[1] = parts[1] ? "." + parts[1] : "";
-		part = parts[1] + "!";
-
-		return jQuery.access( this, function( value ) {
-
-			if ( value === undefined ) {
-				data = this.triggerHandler( "getData" + part, [ parts[0] ] );
-
-				// Try to fetch any internally stored data first
-				if ( data === undefined && elem ) {
-					data = jQuery.data( elem, key );
-					data = dataAttr( elem, key, data );
-				}
-
-				return data === undefined && parts[1] ?
-					this.data( parts[0] ) :
-					data;
-			}
-
-			parts[1] = value;
-			this.each(function() {
-				var self = jQuery( this );
-
-				self.triggerHandler( "setData" + part, parts );
-				jQuery.data( this, key, value );
-				self.triggerHandler( "changeData" + part, parts );
-			});
-		}, null, value, arguments.length > 1, null, false );
-	},
-
-	removeData: function( key ) {
-		return this.each(function() {
-			jQuery.removeData( this, key );
-		});
-	}
-});
-
-function dataAttr( elem, key, data ) {
-	// If nothing was found internally, try to fetch any
-	// data from the HTML5 data-* attribute
-	if ( data === undefined && elem.nodeType === 1 ) {
-
-		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
-
-		data = elem.getAttribute( name );
-
-		if ( typeof data === "string" ) {
-			try {
-				data = data === "true" ? true :
-				data === "false" ? false :
-				data === "null" ? null :
-				jQuery.isNumeric( data ) ? +data :
-					rbrace.test( data ) ? jQuery.parseJSON( data ) :
-					data;
-			} catch( e ) {}
-
-			// Make sure we set the data so it isn't changed later
-			jQuery.data( elem, key, data );
-
-		} else {
-			data = undefined;
-		}
-	}
-
-	return data;
-}
-
-// checks a cache object for emptiness
-function isEmptyDataObject( obj ) {
-	for ( var name in obj ) {
-
-		// if the public data object is empty, the private is still empty
-		if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
-			continue;
-		}
-		if ( name !== "toJSON" ) {
-			return false;
-		}
-	}
-
-	return true;
-}
-
-
-
-
-function handleQueueMarkDefer( elem, type, src ) {
-	var deferDataKey = type + "defer",
-		queueDataKey = type + "queue",
-		markDataKey = type + "mark",
-		defer = jQuery._data( elem, deferDataKey );
-	if ( defer &&
-		( src === "queue" || !jQuery._data(elem, queueDataKey) ) &&
-		( src === "mark" || !jQuery._data(elem, markDataKey) ) ) {
-		// Give room for hard-coded callbacks to fire first
-		// and eventually mark/queue something else on the element
-		setTimeout( function() {
-			if ( !jQuery._data( elem, queueDataKey ) &&
-				!jQuery._data( elem, markDataKey ) ) {
-				jQuery.removeData( elem, deferDataKey, true );
-				defer.fire();
-			}
-		}, 0 );
-	}
-}
-
-jQuery.extend({
-
-	_mark: function( elem, type ) {
-		if ( elem ) {
-			type = ( type || "fx" ) + "mark";
-			jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 );
-		}
-	},
-
-	_unmark: function( force, elem, type ) {
-		if ( force !== true ) {
-			type = elem;
-			elem = force;
-			force = false;
-		}
-		if ( elem ) {
-			type = type || "fx";
-			var key = type + "mark",
-				count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 );
-			if ( count ) {
-				jQuery._data( elem, key, count );
-			} else {
-				jQuery.removeData( elem, key, true );
-				handleQueueMarkDefer( elem, type, "mark" );
-			}
-		}
-	},
-
-	queue: function( elem, type, data ) {
-		var q;
-		if ( elem ) {
-			type = ( type || "fx" ) + "queue";
-			q = jQuery._data( elem, type );
-
-			// Speed up dequeue by getting out quickly if this is just a lookup
-			if ( data ) {
-				if ( !q || jQuery.isArray(data) ) {
-					q = jQuery._data( elem, type, jQuery.makeArray(data) );
-				} else {
-					q.push( data );
-				}
-			}
-			return q || [];
-		}
-	},
-
-	dequeue: function( elem, type ) {
-		type = type || "fx";
-
-		var queue = jQuery.queue( elem, type ),
-			fn = queue.shift(),
-			hooks = {};
-
-		// If the fx queue is dequeued, always remove the progress sentinel
-		if ( fn === "inprogress" ) {
-			fn = queue.shift();
-		}
-
-		if ( fn ) {
-			// Add a progress sentinel to prevent the fx queue from being
-			// automatically dequeued
-			if ( type === "fx" ) {
-				queue.unshift( "inprogress" );
-			}
-
-			jQuery._data( elem, type + ".run", hooks );
-			fn.call( elem, function() {
-				jQuery.dequeue( elem, type );
-			}, hooks );
-		}
-
-		if ( !queue.length ) {
-			jQuery.removeData( elem, type + "queue " + type + ".run", true );
-			handleQueueMarkDefer( elem, type, "queue" );
-		}
-	}
-});
-
-jQuery.fn.extend({
-	queue: function( type, data ) {
-		var setter = 2;
-
-		if ( typeof type !== "string" ) {
-			data = type;
-			type = "fx";
-			setter--;
-		}
-
-		if ( arguments.length < setter ) {
-			return jQuery.queue( this[0], type );
-		}
-
-		return data === undefined ?
-			this :
-			this.each(function() {
-				var queue = jQuery.queue( this, type, data );
-
-				if ( type === "fx" && queue[0] !== "inprogress" ) {
-					jQuery.dequeue( this, type );
-				}
-			});
-	},
-	dequeue: function( type ) {
-		return this.each(function() {
-			jQuery.dequeue( this, type );
-		});
-	},
-	// Based off of the plugin by Clint Helfers, with permission.
-	// http://blindsignals.com/index.php/2009/07/jquery-delay/
-	delay: function( time, type ) {
-		time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
-		type = type || "fx";
-
-		return this.queue( type, function( next, hooks ) {
-			var timeout = setTimeout( next, time );
-			hooks.stop = function() {
-				clearTimeout( timeout );
-			};
-		});
-	},
-	clearQueue: function( type ) {
-		return this.queue( type || "fx", [] );
-	},
-	// Get a promise resolved when queues of a certain type
-	// are emptied (fx is the type by default)
-	promise: function( type, object ) {
-		if ( typeof type !== "string" ) {
-			object = type;
-			type = undefined;
-		}
-		type = type || "fx";
-		var defer = jQuery.Deferred(),
-			elements = this,
-			i = elements.length,
-			count = 1,
-			deferDataKey = type + "defer",
-			queueDataKey = type + "queue",
-			markDataKey = type + "mark",
-			tmp;
-		function resolve() {
-			if ( !( --count ) ) {
-				defer.resolveWith( elements, [ elements ] );
-			}
-		}
-		while( i-- ) {
-			if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
-					( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
-						jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
-					jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) {
-				count++;
-				tmp.add( resolve );
-			}
-		}
-		resolve();
-		return defer.promise( object );
-	}
-});
-
-
-
-
-var rclass = /[\n\t\r]/g,
-	rspace = /\s+/,
-	rreturn = /\r/g,
-	rtype = /^(?:button|input)$/i,
-	rfocusable = /^(?:button|input|object|select|textarea)$/i,
-	rclickable = /^a(?:rea)?$/i,
-	rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
-	getSetAttribute = jQuery.support.getSetAttribute,
-	nodeHook, boolHook, fixSpecified;
-
-jQuery.fn.extend({
-	attr: function( name, value ) {
-		return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
-	},
-
-	removeAttr: function( name ) {
-		return this.each(function() {
-			jQuery.removeAttr( this, name );
-		});
-	},
-
-	prop: function( name, value ) {
-		return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
-	},
-
-	removeProp: function( name ) {
-		name = jQuery.propFix[ name ] || name;
-		return this.each(function() {
-			// try/catch handles cases where IE balks (such as removing a property on window)
-			try {
-				this[ name ] = undefined;
-				delete this[ name ];
-			} catch( e ) {}
-		});
-	},
-
-	addClass: function( value ) {
-		var classNames, i, l, elem,
-			setClass, c, cl;
-
-		if ( jQuery.isFunction( value ) ) {
-			return this.each(function( j ) {
-				jQuery( this ).addClass( value.call(this, j, this.className) );
-			});
-		}
-
-		if ( value && typeof value === "string" ) {
-			classNames = value.split( rspace );
-
-			for ( i = 0, l = this.length; i < l; i++ ) {
-				elem = this[ i ];
-
-				if ( elem.nodeType === 1 ) {
-					if ( !elem.className && classNames.length === 1 ) {
-						elem.className = value;
-
-					} else {
-						setClass = " " + elem.className + " ";
-
-						for ( c = 0, cl = classNames.length; c < cl; c++ ) {
-							if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
-								setClass += classNames[ c ] + " ";
-							}
-						}
-						elem.className = jQuery.trim( setClass );
-					}
-				}
-			}
-		}
-
-		return this;
-	},
-
-	removeClass: function( value ) {
-		var classNames, i, l, elem, className, c, cl;
-
-		if ( jQuery.isFunction( value ) ) {
-			return this.each(function( j ) {
-				jQuery( this ).removeClass( value.call(this, j, this.className) );
-			});
-		}
-
-		if ( (value && typeof value === "string") || value === undefined ) {
-			classNames = ( value || "" ).split( rspace );
-
-			for ( i = 0, l = this.length; i < l; i++ ) {
-				elem = this[ i ];
-
-				if ( elem.nodeType === 1 && elem.className ) {
-					if ( value ) {
-						className = (" " + elem.className + " ").replace( rclass, " " );
-						for ( c = 0, cl = classNames.length; c < cl; c++ ) {
-							className = className.replace(" " + classNames[ c ] + " ", " ");
-						}
-						elem.className = jQuery.trim( className );
-
-					} else {
-						elem.className = "";
-					}
-				}
-			}
-		}
-
-		return this;
-	},
-
-	toggleClass: function( value, stateVal ) {
-		var type = typeof value,
-			isBool = typeof stateVal === "boolean";
-
-		if ( jQuery.isFunction( value ) ) {
-			return this.each(function( i ) {
-				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
-			});
-		}
-
-		return this.each(function() {
-			if ( type === "string" ) {
-				// toggle individual class names
-				var className,
-					i = 0,
-					self = jQuery( this ),
-					state = stateVal,
-					classNames = value.split( rspace );
-
-				while ( (className = classNames[ i++ ]) ) {
-					// check each className given, space seperated list
-					state = isBool ? state : !self.hasClass( className );
-					self[ state ? "addClass" : "removeClass" ]( className );
-				}
-
-			} else if ( type === "undefined" || type === "boolean" ) {
-				if ( this.className ) {
-					// store className if set
-					jQuery._data( this, "__className__", this.className );
-				}
-
-				// toggle whole className
-				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
-			}
-		});
-	},
-
-	hasClass: function( selector ) {
-		var className = " " + selector + " ",
-			i = 0,
-			l = this.length;
-		for ( ; i < l; i++ ) {
-			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
-				return true;
-			}
-		}
-
-		return false;
-	},
-
-	val: function( value ) {
-		var hooks, ret, isFunction,
-			elem = this[0];
-
-		if ( !arguments.length ) {
-			if ( elem ) {
-				hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
-
-				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
-					return ret;
-				}
-
-				ret = elem.value;
-
-				return typeof ret === "string" ?
-					// handle most common string cases
-					ret.replace(rreturn, "") :
-					// handle cases where value is null/undef or number
-					ret == null ? "" : ret;
-			}
-
-			return;
-		}
-
-		isFunction = jQuery.isFunction( value );
-
-		return this.each(function( i ) {
-			var self = jQuery(this), val;
-
-			if ( this.nodeType !== 1 ) {
-				return;
-			}
-
-			if ( isFunction ) {
-				val = value.call( this, i, self.val() );
-			} else {
-				val = value;
-			}
-
-			// Treat null/undefined as ""; convert numbers to string
-			if ( val == null ) {
-				val = "";
-			} else if ( typeof val === "number" ) {
-				val += "";
-			} else if ( jQuery.isArray( val ) ) {
-				val = jQuery.map(val, function ( value ) {
-					return value == null ? "" : value + "";
-				});
-			}
-
-			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
-
-			// If set returns undefined, fall back to normal setting
-			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
-				this.value = val;
-			}
-		});
-	}
-});
-
-jQuery.extend({
-	valHooks: {
-		option: {
-			get: function( elem ) {
-				// attributes.value is undefined in Blackberry 4.7 but
-				// uses .value. See #6932
-				var val = elem.attributes.value;
-				return !val || val.specified ? elem.value : elem.text;
-			}
-		},
-		select: {
-			get: function( elem ) {
-				var value, i, max, option,
-					index = elem.selectedIndex,
-					values = [],
-					options = elem.options,
-					one = elem.type === "select-one";
-
-				// Nothing was selected
-				if ( index < 0 ) {
-					return null;
-				}
-
-				// Loop through all the selected options
-				i = one ? index : 0;
-				max = one ? index + 1 : options.length;
-				for ( ; i < max; i++ ) {
-					option = options[ i ];
-
-					// Don't return options that are disabled or in a disabled optgroup
-					if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
-							(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
-
-						// Get the specific value for the option
-						value = jQuery( option ).val();
-
-						// We don't need an array for one selects
-						if ( one ) {
-							return value;
-						}
-
-						// Multi-Selects return an array
-						values.push( value );
-					}
-				}
-
-				// Fixes Bug #2551 -- select.val() broken in IE after form.reset()
-				if ( one && !values.length && options.length ) {
-					return jQuery( options[ index ] ).val();
-				}
-
-				return values;
-			},
-
-			set: function( elem, value ) {
-				var values = jQuery.makeArray( value );
-
-				jQuery(elem).find("option").each(function() {
-					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
-				});
-
-				if ( !values.length ) {
-					elem.selectedIndex = -1;
-				}
-				return values;
-			}
-		}
-	},
-
-	attrFn: {
-		val: true,
-		css: true,
-		html: true,
-		text: true,
-		data: true,
-		width: true,
-		height: true,
-		offset: true
-	},
-
-	attr: function( elem, name, value, pass ) {
-		var ret, hooks, notxml,
-			nType = elem.nodeType;
-
-		// don't get/set attributes on text, comment and attribute nodes
-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-			return;
-		}
-
-		if ( pass && name in jQuery.attrFn ) {
-			return jQuery( elem )[ name ]( value );
-		}
-
-		// Fallback to prop when attributes are not supported
-		if ( typeof elem.getAttribute === "undefined" ) {
-			return jQuery.prop( elem, name, value );
-		}
-
-		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
-		// All attributes are lowercase
-		// Grab necessary hook if one is defined
-		if ( notxml ) {
-			name = name.toLowerCase();
-			hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
-		}
-
-		if ( value !== undefined ) {
-
-			if ( value === null ) {
-				jQuery.removeAttr( elem, name );
-				return;
-
-			} else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
-				return ret;
-
-			} else {
-				elem.setAttribute( name, "" + value );
-				return value;
-			}
-
-		} else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
-			return ret;
-
-		} else {
-
-			ret = elem.getAttribute( name );
-
-			// Non-existent attributes return null, we normalize to undefined
-			return ret === null ?
-				undefined :
-				ret;
-		}
-	},
-
-	removeAttr: function( elem, value ) {
-		var propName, attrNames, name, l, isBool,
-			i = 0;
-
-		if ( value && elem.nodeType === 1 ) {
-			attrNames = value.toLowerCase().split( rspace );
-			l = attrNames.length;
-
-			for ( ; i < l; i++ ) {
-				name = attrNames[ i ];
-
-				if ( name ) {
-					propName = jQuery.propFix[ name ] || name;
-					isBool = rboolean.test( name );
-
-					// See #9699 for explanation of this approach (setting first, then removal)
-					// Do not do this for boolean attributes (see #10870)
-					if ( !isBool ) {
-						jQuery.attr( elem, name, "" );
-					}
-					elem.removeAttribute( getSetAttribute ? name : propName );
-
-					// Set corresponding property to false for boolean attributes
-					if ( isBool && propName in elem ) {
-						elem[ propName ] = false;
-					}
-				}
-			}
-		}
-	},
-
-	attrHooks: {
-		type: {
-			set: function( elem, value ) {
-				// We can't allow the type property to be changed (since it causes problems in IE)
-				if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
-					jQuery.error( "type property can't be changed" );
-				} else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
-					// Setting the type on a radio button after the value resets the value in IE6-9
-					// Reset value to it's default in case type is set after value
-					// This is for element creation
-					var val = elem.value;
-					elem.setAttribute( "type", value );
-					if ( val ) {
-						elem.value = val;
-					}
-					return value;
-				}
-			}
-		},
-		// Use the value property for back compat
-		// Use the nodeHook for button elements in IE6/7 (#1954)
-		value: {
-			get: function( elem, name ) {
-				if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
-					return nodeHook.get( elem, name );
-				}
-				return name in elem ?
-					elem.value :
-					null;
-			},
-			set: function( elem, value, name ) {
-				if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
-					return nodeHook.set( elem, value, name );
-				}
-				// Does not return so that setAttribute is also used
-				elem.value = value;
-			}
-		}
-	},
-
-	propFix: {
-		tabindex: "tabIndex",
-		readonly: "readOnly",
-		"for": "htmlFor",
-		"class": "className",
-		maxlength: "maxLength",
-		cellspacing: "cellSpacing",
-		cellpadding: "cellPadding",
-		rowspan: "rowSpan",
-		colspan: "colSpan",
-		usemap: "useMap",
-		frameborder: "frameBorder",
-		contenteditable: "contentEditable"
-	},
-
-	prop: function( elem, name, value ) {
-		var ret, hooks, notxml,
-			nType = elem.nodeType;
-
-		// don't get/set properties on text, comment and attribute nodes
-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-			return;
-		}
-
-		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
-		if ( notxml ) {
-			// Fix name and attach hooks
-			name = jQuery.propFix[ name ] || name;
-			hooks = jQuery.propHooks[ name ];
-		}
-
-		if ( value !== undefined ) {
-			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
-				return ret;
-
-			} else {
-				return ( elem[ name ] = value );
-			}
-
-		} else {
-			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
-				return ret;
-
-			} else {
-				return elem[ name ];
-			}
-		}
-	},
-
-	propHooks: {
-		tabIndex: {
-			get: function( elem ) {
-				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
-				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
-				var attributeNode = elem.getAttributeNode("tabindex");
-
-				return attributeNode && attributeNode.specified ?
-					parseInt( attributeNode.value, 10 ) :
-					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
-						0 :
-						undefined;
-			}
-		}
-	}
-});
-
-// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional)
-jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex;
-
-// Hook for boolean attributes
-boolHook = {
-	get: function( elem, name ) {
-		// Align boolean attributes with corresponding properties
-		// Fall back to attribute presence where some booleans are not supported
-		var attrNode,
-			property = jQuery.prop( elem, name );
-		return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
-			name.toLowerCase() :
-			undefined;
-	},
-	set: function( elem, value, name ) {
-		var propName;
-		if ( value === false ) {
-			// Remove boolean attributes when set to false
-			jQuery.removeAttr( elem, name );
-		} else {
-			// value is true since we know at this point it's type boolean and not false
-			// Set boolean attributes to the same name and set the DOM property
-			propName = jQuery.propFix[ name ] || name;
-			if ( propName in elem ) {
-				// Only set the IDL specifically if it already exists on the element
-				elem[ propName ] = true;
-			}
-
-			elem.setAttribute( name, name.toLowerCase() );
-		}
-		return name;
-	}
-};
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !getSetAttribute ) {
-
-	fixSpecified = {
-		name: true,
-		id: true,
-		coords: true
-	};
-
-	// Use this for any attribute in IE6/7
-	// This fixes almost every IE6/7 issue
-	nodeHook = jQuery.valHooks.button = {
-		get: function( elem, name ) {
-			var ret;
-			ret = elem.getAttributeNode( name );
-			return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ?
-				ret.nodeValue :
-				undefined;
-		},
-		set: function( elem, value, name ) {
-			// Set the existing or create a new attribute node
-			var ret = elem.getAttributeNode( name );
-			if ( !ret ) {
-				ret = document.createAttribute( name );
-				elem.setAttributeNode( ret );
-			}
-			return ( ret.nodeValue = value + "" );
-		}
-	};
-
-	// Apply the nodeHook to tabindex
-	jQuery.attrHooks.tabindex.set = nodeHook.set;
-
-	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
-	// This is for removals
-	jQuery.each([ "width", "height" ], function( i, name ) {
-		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
-			set: function( elem, value ) {
-				if ( value === "" ) {
-					elem.setAttribute( name, "auto" );
-					return value;
-				}
-			}
-		});
-	});
-
-	// Set contenteditable to false on removals(#10429)
-	// Setting to empty string throws an error as an invalid value
-	jQuery.attrHooks.contenteditable = {
-		get: nodeHook.get,
-		set: function( elem, value, name ) {
-			if ( value === "" ) {
-				value = "false";
-			}
-			nodeHook.set( elem, value, name );
-		}
-	};
-}
-
-
-// Some attributes require a special call on IE
-if ( !jQuery.support.hrefNormalized ) {
-	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
-		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
-			get: function( elem ) {
-				var ret = elem.getAttribute( name, 2 );
-				return ret === null ? undefined : ret;
-			}
-		});
-	});
-}
-
-if ( !jQuery.support.style ) {
-	jQuery.attrHooks.style = {
-		get: function( elem ) {
-			// Return undefined in the case of empty string
-			// Normalize to lowercase since IE uppercases css property names
-			return elem.style.cssText.toLowerCase() || undefined;
-		},
-		set: function( elem, value ) {
-			return ( elem.style.cssText = "" + value );
-		}
-	};
-}
-
-// Safari mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
-if ( !jQuery.support.optSelected ) {
-	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
-		get: function( elem ) {
-			var parent = elem.parentNode;
-
-			if ( parent ) {
-				parent.selectedIndex;
-
-				// Make sure that it also works with optgroups, see #5701
-				if ( parent.parentNode ) {
-					parent.parentNode.selectedIndex;
-				}
-			}
-			return null;
-		}
-	});
-}
-
-// IE6/7 call enctype encoding
-if ( !jQuery.support.enctype ) {
-	jQuery.propFix.enctype = "encoding";
-}
-
-// Radios and checkboxes getter/setter
-if ( !jQuery.support.checkOn ) {
-	jQuery.each([ "radio", "checkbox" ], function() {
-		jQuery.valHooks[ this ] = {
-			get: function( elem ) {
-				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
-				return elem.getAttribute("value") === null ? "on" : elem.value;
-			}
-		};
-	});
-}
-jQuery.each([ "radio", "checkbox" ], function() {
-	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
-		set: function( elem, value ) {
-			if ( jQuery.isArray( value ) ) {
-				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
-			}
-		}
-	});
-});
-
-
-
-
-var rformElems = /^(?:textarea|input|select)$/i,
-	rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/,
-	rhoverHack = /(?:^|\s)hover(\.\S+)?\b/,
-	rkeyEvent = /^key/,
-	rmouseEvent = /^(?:mouse|contextmenu)|click/,
-	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
-	rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
-	quickParse = function( selector ) {
-		var quick = rquickIs.exec( selector );
-		if ( quick ) {
-			//   0  1    2   3
-			// [ _, tag, id, class ]
-			quick[1] = ( quick[1] || "" ).toLowerCase();
-			quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" );
-		}
-		return quick;
-	},
-	quickIs = function( elem, m ) {
-		var attrs = elem.attributes || {};
-		return (
-			(!m[1] || elem.nodeName.toLowerCase() === m[1]) &&
-			(!m[2] || (attrs.id || {}).value === m[2]) &&
-			(!m[3] || m[3].test( (attrs[ "class" ] || {}).value ))
-		);
-	},
-	hoverHack = function( events ) {
-		return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
-	};
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
-	add: function( elem, types, handler, data, selector ) {
-
-		var elemData, eventHandle, events,
-			t, tns, type, namespaces, handleObj,
-			handleObjIn, quick, handlers, special;
-
-		// Don't attach events to noData or text/comment nodes (allow plain objects tho)
-		if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
-			return;
-		}
-
-		// Caller can pass in an object of custom data in lieu of the handler
-		if ( handler.handler ) {
-			handleObjIn = handler;
-			handler = handleObjIn.handler;
-			selector = handleObjIn.selector;
-		}
-
-		// Make sure that the handler has a unique ID, used to find/remove it later
-		if ( !handler.guid ) {
-			handler.guid = jQuery.guid++;
-		}
-
-		// Init the element's event structure and main handler, if this is the first
-		events = elemData.events;
-		if ( !events ) {
-			elemData.events = events = {};
-		}
-		eventHandle = elemData.handle;
-		if ( !eventHandle ) {
-			elemData.handle = eventHandle = function( e ) {
-				// Discard the second event of a jQuery.event.trigger() and
-				// when an event is called after a page has unloaded
-				return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
-					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
-					undefined;
-			};
-			// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
-			eventHandle.elem = elem;
-		}
-
-		// Handle multiple events separated by a space
-		// jQuery(...).bind("mouseover mouseout", fn);
-		types = jQuery.trim( hoverHack(types) ).split( " " );
-		for ( t = 0; t < types.length; t++ ) {
-
-			tns = rtypenamespace.exec( types[t] ) || [];
-			type = tns[1];
-			namespaces = ( tns[2] || "" ).split( "." ).sort();
-
-			// If event changes its type, use the special event handlers for the changed type
-			special = jQuery.event.special[ type ] || {};
-
-			// If selector defined, determine special event api type, otherwise given type
-			type = ( selector ? special.delegateType : special.bindType ) || type;
-
-			// Update special based on newly reset type
-			special = jQuery.event.special[ type ] || {};
-
-			// handleObj is passed to all event handlers
-			handleObj = jQuery.extend({
-				type: type,
-				origType: tns[1],
-				data: data,
-				handler: handler,
-				guid: handler.guid,
-				selector: selector,
-				quick: selector && quickParse( selector ),
-				namespace: namespaces.join(".")
-			}, handleObjIn );
-
-			// Init the event handler queue if we're the first
-			handlers = events[ type ];
-			if ( !handlers ) {
-				handlers = events[ type ] = [];
-				handlers.delegateCount = 0;
-
-				// Only use addEventListener/attachEvent if the special events handler returns false
-				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
-					// Bind the global event handler to the element
-					if ( elem.addEventListener ) {
-						elem.addEventListener( type, eventHandle, false );
-
-					} else if ( elem.attachEvent ) {
-						elem.attachEvent( "on" + type, eventHandle );
-					}
-				}
-			}
-
-			if ( special.add ) {
-				special.add.call( elem, handleObj );
-
-				if ( !handleObj.handler.guid ) {
-					handleObj.handler.guid = handler.guid;
-				}
-			}
-
-			// Add to the element's handler list, delegates in front
-			if ( selector ) {
-				handlers.splice( handlers.delegateCount++, 0, handleObj );
-			} else {
-				handlers.push( handleObj );
-			}
-
-			// Keep track of which events have ever been used, for event optimization
-			jQuery.event.global[ type ] = true;
-		}
-
-		// Nullify elem to prevent memory leaks in IE
-		elem = null;
-	},
-
-	global: {},
-
-	// Detach an event or set of events from an element
-	remove: function( elem, types, handler, selector, mappedTypes ) {
-
-		var elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
-			t, tns, type, origType, namespaces, origCount,
-			j, events, special, handle, eventType, handleObj;
-
-		if ( !elemData || !(events = elemData.events) ) {
-			return;
-		}
-
-		// Once for each type.namespace in types; type may be omitted
-		types = jQuery.trim( hoverHack( types || "" ) ).split(" ");
-		for ( t = 0; t < types.length; t++ ) {
-			tns = rtypenamespace.exec( types[t] ) || [];
-			type = origType = tns[1];
-			namespaces = tns[2];
-
-			// Unbind all events (on this namespace, if provided) for the element
-			if ( !type ) {
-				for ( type in events ) {
-					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
-				}
-				continue;
-			}
-
-			special = jQuery.event.special[ type ] || {};
-			type = ( selector? special.delegateType : special.bindType ) || type;
-			eventType = events[ type ] || [];
-			origCount = eventType.length;
-			namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
-
-			// Remove matching events
-			for ( j = 0; j < eventType.length; j++ ) {
-				handleObj = eventType[ j ];
-
-				if ( ( mappedTypes || origType === handleObj.origType ) &&
-					 ( !handler || handler.guid === handleObj.guid ) &&
-					 ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
-					 ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
-					eventType.splice( j--, 1 );
-
-					if ( handleObj.selector ) {
-						eventType.delegateCount--;
-					}
-					if ( special.remove ) {
-						special.remove.call( elem, handleObj );
-					}
-				}
-			}
-
-			// Remove generic event handler if we removed something and no more handlers exist
-			// (avoids potential for endless recursion during removal of special event handlers)
-			if ( eventType.length === 0 && origCount !== eventType.length ) {
-				if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
-					jQuery.removeEvent( elem, type, elemData.handle );
-				}
-
-				delete events[ type ];
-			}
-		}
-
-		// Remove the expando if it's no longer used
-		if ( jQuery.isEmptyObject( events ) ) {
-			handle = elemData.handle;
-			if ( handle ) {
-				handle.elem = null;
-			}
-
-			// removeData also checks for emptiness and clears the expando if empty
-			// so use it instead of delete
-			jQuery.removeData( elem, [ "events", "handle" ], true );
-		}
-	},
-
-	// Events that are safe to short-circuit if no handlers are attached.
-	// Native DOM events should not be added, they may have inline handlers.
-	customEvent: {
-		"getData": true,
-		"setData": true,
-		"changeData": true
-	},
-
-	trigger: function( event, data, elem, onlyHandlers ) {
-		// Don't do events on text and comment nodes
-		if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {
-			return;
-		}
-
-		// Event object or event type
-		var type = event.type || event,
-			namespaces = [],
-			cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType;
-
-		// focus/blur morphs to focusin/out; ensure we're not firing them right now
-		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
-			return;
-		}
-
-		if ( type.indexOf( "!" ) >= 0 ) {
-			// Exclusive events trigger only for the exact event (no namespaces)
-			type = type.slice(0, -1);
-			exclusive = true;
-		}
-
-		if ( type.indexOf( "." ) >= 0 ) {
-			// Namespaced trigger; create a regexp to match event type in handle()
-			namespaces = type.split(".");
-			type = namespaces.shift();
-			namespaces.sort();
-		}
-
-		if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
-			// No jQuery handlers for this event type, and it can't have inline handlers
-			return;
-		}
-
-		// Caller can pass in an Event, Object, or just an event type string
-		event = typeof event === "object" ?
-			// jQuery.Event object
-			event[ jQuery.expando ] ? event :
-			// Object literal
-			new jQuery.Event( type, event ) :
-			// Just the event type (string)
-			new jQuery.Event( type );
-
-		event.type = type;
-		event.isTrigger = true;
-		event.exclusive = exclusive;
-		event.namespace = namespaces.join( "." );
-		event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
-		ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
-
-		// Handle a global trigger
-		if ( !elem ) {
-
-			// TODO: Stop taunting the data cache; remove global events and always attach to document
-			cache = jQuery.cache;
-			for ( i in cache ) {
-				if ( cache[ i ].events && cache[ i ].events[ type ] ) {
-					jQuery.event.trigger( event, data, cache[ i ].handle.elem, true );
-				}
-			}
-			return;
-		}
-
-		// Clean up the event in case it is being reused
-		event.result = undefined;
-		if ( !event.target ) {
-			event.target = elem;
-		}
-
-		// Clone any incoming data and prepend the event, creating the handler arg list
-		data = data != null ? jQuery.makeArray( data ) : [];
-		data.unshift( event );
-
-		// Allow special events to draw outside the lines
-		special = jQuery.event.special[ type ] || {};
-		if ( special.trigger && special.trigger.apply( elem, data ) === false ) {
-			return;
-		}
-
-		// Determine event propagation path in advance, per W3C events spec (#9951)
-		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
-		eventPath = [[ elem, special.bindType || type ]];
-		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
-
-			bubbleType = special.delegateType || type;
-			cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;
-			old = null;
-			for ( ; cur; cur = cur.parentNode ) {
-				eventPath.push([ cur, bubbleType ]);
-				old = cur;
-			}
-
-			// Only add window if we got to document (e.g., not plain obj or detached DOM)
-			if ( old && old === elem.ownerDocument ) {
-				eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
-			}
-		}
-
-		// Fire handlers on the event path
-		for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {
-
-			cur = eventPath[i][0];
-			event.type = eventPath[i][1];
-
-			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
-			if ( handle ) {
-				handle.apply( cur, data );
-			}
-			// Note that this is a bare JS function and not a jQuery handler
-			handle = ontype && cur[ ontype ];
-			if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) {
-				event.preventDefault();
-			}
-		}
-		event.type = type;
-
-		// If nobody prevented the default action, do it now
-		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
-			if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
-				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
-
-				// Call a native DOM method on the target with the same name name as the event.
-				// Can't use an .isFunction() check here because IE6/7 fails that test.
-				// Don't do default actions on window, that's where global variables be (#6170)
-				// IE<9 dies on focus/blur to hidden element (#1486)
-				if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {
-
-					// Don't re-trigger an onFOO event when we call its FOO() method
-					old = elem[ ontype ];
-
-					if ( old ) {
-						elem[ ontype ] = null;
-					}
-
-					// Prevent re-triggering of the same event, since we already bubbled it above
-					jQuery.event.triggered = type;
-					elem[ type ]();
-					jQuery.event.triggered = undefined;
-
-					if ( old ) {
-						elem[ ontype ] = old;
-					}
-				}
-			}
-		}
-
-		return event.result;
-	},
-
-	dispatch: function( event ) {
-
-		// Make a writable jQuery.Event from the native event object
-		event = jQuery.event.fix( event || window.event );
-
-		var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
-			delegateCount = handlers.delegateCount,
-			args = [].slice.call( arguments, 0 ),
-			run_all = !event.exclusive && !event.namespace,
-			special = jQuery.event.special[ event.type ] || {},
-			handlerQueue = [],
-			i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related;
-
-		// Use the fix-ed jQuery.Event rather than the (read-only) native event
-		args[0] = event;
-		event.delegateTarget = this;
-
-		// Call the preDispatch hook for the mapped type, and let it bail if desired
-		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
-			return;
-		}
-
-		// Determine handlers that should run if there are delegated events
-		// Avoid non-left-click bubbling in Firefox (#3861)
-		if ( delegateCount && !(event.button && event.type === "click") ) {
-
-			// Pregenerate a single jQuery object for reuse with .is()
-			jqcur = jQuery(this);
-			jqcur.context = this.ownerDocument || this;
-
-			for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
-
-				// Don't process events on disabled elements (#6911, #8165)
-				if ( cur.disabled !== true ) {
-					selMatch = {};
-					matches = [];
-					jqcur[0] = cur;
-					for ( i = 0; i < delegateCount; i++ ) {
-						handleObj = handlers[ i ];
-						sel = handleObj.selector;
-
-						if ( selMatch[ sel ] === undefined ) {
-							selMatch[ sel ] = (
-								handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel )
-							);
-						}
-						if ( selMatch[ sel ] ) {
-							matches.push( handleObj );
-						}
-					}
-					if ( matches.length ) {
-						handlerQueue.push({ elem: cur, matches: matches });
-					}
-				}
-			}
-		}
-
-		// Add the remaining (directly-bound) handlers
-		if ( handlers.length > delegateCount ) {
-			handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });
-		}
-
-		// Run delegates first; they may want to stop propagation beneath us
-		for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
-			matched = handlerQueue[ i ];
-			event.currentTarget = matched.elem;
-
-			for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {
-				handleObj = matched.matches[ j ];
-
-				// Triggered event must either 1) be non-exclusive and have no namespace, or
-				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
-				if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
-
-					event.data = handleObj.data;
-					event.handleObj = handleObj;
-
-					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
-							.apply( matched.elem, args );
-
-					if ( ret !== undefined ) {
-						event.result = ret;
-						if ( ret === false ) {
-							event.preventDefault();
-							event.stopPropagation();
-						}
-					}
-				}
-			}
-		}
-
-		// Call the postDispatch hook for the mapped type
-		if ( special.postDispatch ) {
-			special.postDispatch.call( this, event );
-		}
-
-		return event.result;
-	},
-
-	// Includes some event props shared by KeyEvent and MouseEvent
-	// *** attrChange attrName relatedNode srcElement  are not normalized, non-W3C, deprecated, will be removed in 1.8 ***
-	props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
-
-	fixHooks: {},
-
-	keyHooks: {
-		props: "char charCode key keyCode".split(" "),
-		filter: function( event, original ) {
-
-			// Add which for key events
-			if ( event.which == null ) {
-				event.which = original.charCode != null ? original.charCode : original.keyCode;
-			}
-
-			return event;
-		}
-	},
-
-	mouseHooks: {
-		props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
-		filter: function( event, original ) {
-			var eventDoc, doc, body,
-				button = original.button,
-				fromElement = original.fromElement;
-
-			// Calculate pageX/Y if missing and clientX/Y available
-			if ( event.pageX == null && original.clientX != null ) {
-				eventDoc = event.target.ownerDocument || document;
-				doc = eventDoc.documentElement;
-				body = eventDoc.body;
-
-				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
-				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
-			}
-
-			// Add relatedTarget, if necessary
-			if ( !event.relatedTarget && fromElement ) {
-				event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
-			}
-
-			// Add which for click: 1 === left; 2 === middle; 3 === right
-			// Note: button is not normalized, so don't use it
-			if ( !event.which && button !== undefined ) {
-				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
-			}
-
-			return event;
-		}
-	},
-
-	fix: function( event ) {
-		if ( event[ jQuery.expando ] ) {
-			return event;
-		}
-
-		// Create a writable copy of the event object and normalize some properties
-		var i, prop,
-			originalEvent = event,
-			fixHook = jQuery.event.fixHooks[ event.type ] || {},
-			copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
-
-		event = jQuery.Event( originalEvent );
-
-		for ( i = copy.length; i; ) {
-			prop = copy[ --i ];
-			event[ prop ] = originalEvent[ prop ];
-		}
-
-		// Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)
-		if ( !event.target ) {
-			event.target = originalEvent.srcElement || document;
-		}
-
-		// Target should not be a text node (#504, Safari)
-		if ( event.target.nodeType === 3 ) {
-			event.target = event.target.parentNode;
-		}
-
-		// For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8)
-		if ( event.metaKey === undefined ) {
-			event.metaKey = event.ctrlKey;
-		}
-
-		return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
-	},
-
-	special: {
-		ready: {
-			// Make sure the ready event is setup
-			setup: jQuery.bindReady
-		},
-
-		load: {
-			// Prevent triggered image.load events from bubbling to window.load
-			noBubble: true
-		},
-
-		focus: {
-			delegateType: "focusin"
-		},
-		blur: {
-			delegateType: "focusout"
-		},
-
-		beforeunload: {
-			setup: function( data, namespaces, eventHandle ) {
-				// We only want to do this special case on windows
-				if ( jQuery.isWindow( this ) ) {
-					this.onbeforeunload = eventHandle;
-				}
-			},
-
-			teardown: function( namespaces, eventHandle ) {
-				if ( this.onbeforeunload === eventHandle ) {
-					this.onbeforeunload = null;
-				}
-			}
-		}
-	},
-
-	simulate: function( type, elem, event, bubble ) {
-		// Piggyback on a donor event to simulate a different one.
-		// Fake originalEvent to avoid donor's stopPropagation, but if the
-		// simulated event prevents default then we do the same on the donor.
-		var e = jQuery.extend(
-			new jQuery.Event(),
-			event,
-			{ type: type,
-				isSimulated: true,
-				originalEvent: {}
-			}
-		);
-		if ( bubble ) {
-			jQuery.event.trigger( e, null, elem );
-		} else {
-			jQuery.event.dispatch.call( elem, e );
-		}
-		if ( e.isDefaultPrevented() ) {
-			event.preventDefault();
-		}
-	}
-};
-
-// Some plugins are using, but it's undocumented/deprecated and will be removed.
-// The 1.7 special event interface should provide all the hooks needed now.
-jQuery.event.handle = jQuery.event.dispatch;
-
-jQuery.removeEvent = document.removeEventListener ?
-	function( elem, type, handle ) {
-		if ( elem.removeEventListener ) {
-			elem.removeEventListener( type, handle, false );
-		}
-	} :
-	function( elem, type, handle ) {
-		if ( elem.detachEvent ) {
-			elem.detachEvent( "on" + type, handle );
-		}
-	};
-
-jQuery.Event = function( src, props ) {
-	// Allow instantiation without the 'new' keyword
-	if ( !(this instanceof jQuery.Event) ) {
-		return new jQuery.Event( src, props );
-	}
-
-	// Event object
-	if ( src && src.type ) {
-		this.originalEvent = src;
-		this.type = src.type;
-
-		// Events bubbling up the document may have been marked as prevented
-		// by a handler lower down the tree; reflect the correct value.
-		this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
-			src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
-
-	// Event type
-	} else {
-		this.type = src;
-	}
-
-	// Put explicitly provided properties onto the event object
-	if ( props ) {
-		jQuery.extend( this, props );
-	}
-
-	// Create a timestamp if incoming event doesn't have one
-	this.timeStamp = src && src.timeStamp || jQuery.now();
-
-	// Mark it as fixed
-	this[ jQuery.expando ] = true;
-};
-
-function returnFalse() {
-	return false;
-}
-function returnTrue() {
-	return true;
-}
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
-	preventDefault: function() {
-		this.isDefaultPrevented = returnTrue;
-
-		var e = this.originalEvent;
-		if ( !e ) {
-			return;
-		}
-
-		// if preventDefault exists run it on the original event
-		if ( e.preventDefault ) {
-			e.preventDefault();
-
-		// otherwise set the returnValue property of the original event to false (IE)
-		} else {
-			e.returnValue = false;
-		}
-	},
-	stopPropagation: function() {
-		this.isPropagationStopped = returnTrue;
-
-		var e = this.originalEvent;
-		if ( !e ) {
-			return;
-		}
-		// if stopPropagation exists run it on the original event
-		if ( e.stopPropagation ) {
-			e.stopPropagation();
-		}
-		// otherwise set the cancelBubble property of the original event to true (IE)
-		e.cancelBubble = true;
-	},
-	stopImmediatePropagation: function() {
-		this.isImmediatePropagationStopped = returnTrue;
-		this.stopPropagation();
-	},
-	isDefaultPrevented: returnFalse,
-	isPropagationStopped: returnFalse,
-	isImmediatePropagationStopped: returnFalse
-};
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-jQuery.each({
-	mouseenter: "mouseover",
-	mouseleave: "mouseout"
-}, function( orig, fix ) {
-	jQuery.event.special[ orig ] = {
-		delegateType: fix,
-		bindType: fix,
-
-		handle: function( event ) {
-			var target = this,
-				related = event.relatedTarget,
-				handleObj = event.handleObj,
-				selector = handleObj.selector,
-				ret;
-
-			// For mousenter/leave call the handler if related is outside the target.
-			// NB: No relatedTarget if the mouse left/entered the browser window
-			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
-				event.type = handleObj.origType;
-				ret = handleObj.handler.apply( this, arguments );
-				event.type = fix;
-			}
-			return ret;
-		}
-	};
-});
-
-// IE submit delegation
-if ( !jQuery.support.submitBubbles ) {
-
-	jQuery.event.special.submit = {
-		setup: function() {
-			// Only need this for delegated form submit events
-			if ( jQuery.nodeName( this, "form" ) ) {
-				return false;
-			}
-
-			// Lazy-add a submit handler when a descendant form may potentially be submitted
-			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
-				// Node name check avoids a VML-related crash in IE (#9807)
-				var elem = e.target,
-					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
-				if ( form && !form._submit_attached ) {
-					jQuery.event.add( form, "submit._submit", function( event ) {
-						event._submit_bubble = true;
-					});
-					form._submit_attached = true;
-				}
-			});
-			// return undefined since we don't need an event listener
-		},
-		
-		postDispatch: function( event ) {
-			// If form was submitted by the user, bubble the event up the tree
-			if ( event._submit_bubble ) {
-				delete event._submit_bubble;
-				if ( this.parentNode && !event.isTrigger ) {
-					jQuery.event.simulate( "submit", this.parentNode, event, true );
-				}
-			}
-		},
-
-		teardown: function() {
-			// Only need this for delegated form submit events
-			if ( jQuery.nodeName( this, "form" ) ) {
-				return false;
-			}
-
-			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above
-			jQuery.event.remove( this, "._submit" );
-		}
-	};
-}
-
-// IE change delegation and checkbox/radio fix
-if ( !jQuery.support.changeBubbles ) {
-
-	jQuery.event.special.change = {
-
-		setup: function() {
-
-			if ( rformElems.test( this.nodeName ) ) {
-				// IE doesn't fire change on a check/radio until blur; trigger it on click
-				// after a propertychange. Eat the blur-change in special.change.handle.
-				// This still fires onchange a second time for check/radio after blur.
-				if ( this.type === "checkbox" || this.type === "radio" ) {
-					jQuery.event.add( this, "propertychange._change", function( event ) {
-						if ( event.originalEvent.propertyName === "checked" ) {
-							this._just_changed = true;
-						}
-					});
-					jQuery.event.add( this, "click._change", function( event ) {
-						if ( this._just_changed && !event.isTrigger ) {
-							this._just_changed = false;
-							jQuery.event.simulate( "change", this, event, true );
-						}
-					});
-				}
-				return false;
-			}
-			// Delegated event; lazy-add a change handler on descendant inputs
-			jQuery.event.add( this, "beforeactivate._change", function( e ) {
-				var elem = e.target;
-
-				if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) {
-					jQuery.event.add( elem, "change._change", function( event ) {
-						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
-							jQuery.event.simulate( "change", this.parentNode, event, true );
-						}
-					});
-					elem._change_attached = true;
-				}
-			});
-		},
-
-		handle: function( event ) {
-			var elem = event.target;
-
-			// Swallow native change events from checkbox/radio, we already triggered them above
-			if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
-				return event.handleObj.handler.apply( this, arguments );
-			}
-		},
-
-		teardown: function() {
-			jQuery.event.remove( this, "._change" );
-
-			return rformElems.test( this.nodeName );
-		}
-	};
-}
-
-// Create "bubbling" focus and blur events
-if ( !jQuery.support.focusinBubbles ) {
-	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
-		// Attach a single capturing handler while someone wants focusin/focusout
-		var attaches = 0,
-			handler = function( event ) {
-				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
-			};
-
-		jQuery.event.special[ fix ] = {
-			setup: function() {
-				if ( attaches++ === 0 ) {
-					document.addEventListener( orig, handler, true );
-				}
-			},
-			teardown: function() {
-				if ( --attaches === 0 ) {
-					document.removeEventListener( orig, handler, true );
-				}
-			}
-		};
-	});
-}
-
-jQuery.fn.extend({
-
-	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
-		var origFn, type;
-
-		// Types can be a map of types/handlers
-		if ( typeof types === "object" ) {
-			// ( types-Object, selector, data )
-			if ( typeof selector !== "string" ) { // && selector != null
-				// ( types-Object, data )
-				data = data || selector;
-				selector = undefined;
-			}
-			for ( type in types ) {
-				this.on( type, selector, data, types[ type ], one );
-			}
-			return this;
-		}
-
-		if ( data == null && fn == null ) {
-			// ( types, fn )
-			fn = selector;
-			data = selector = undefined;
-		} else if ( fn == null ) {
-			if ( typeof selector === "string" ) {
-				// ( types, selector, fn )
-				fn = data;
-				data = undefined;
-			} else {
-				// ( types, data, fn )
-				fn = data;
-				data = selector;
-				selector = undefined;
-			}
-		}
-		if ( fn === false ) {
-			fn = returnFalse;
-		} else if ( !fn ) {
-			return this;
-		}
-
-		if ( one === 1 ) {
-			origFn = fn;
-			fn = function( event ) {
-				// Can use an empty set, since event contains the info
-				jQuery().off( event );
-				return origFn.apply( this, arguments );
-			};
-			// Use same guid so caller can remove using origFn
-			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
-		}
-		return this.each( function() {
-			jQuery.event.add( this, types, fn, data, selector );
-		});
-	},
-	one: function( types, selector, data, fn ) {
-		return this.on( types, selector, data, fn, 1 );
-	},
-	off: function( types, selector, fn ) {
-		if ( types && types.preventDefault && types.handleObj ) {
-			// ( event )  dispatched jQuery.Event
-			var handleObj = types.handleObj;
-			jQuery( types.delegateTarget ).off(
-				handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
-				handleObj.selector,
-				handleObj.handler
-			);
-			return this;
-		}
-		if ( typeof types === "object" ) {
-			// ( types-object [, selector] )
-			for ( var type in types ) {
-				this.off( type, selector, types[ type ] );
-			}
-			return this;
-		}
-		if ( selector === false || typeof selector === "function" ) {
-			// ( types [, fn] )
-			fn = selector;
-			selector = undefined;
-		}
-		if ( fn === false ) {
-			fn = returnFalse;
-		}
-		return this.each(function() {
-			jQuery.event.remove( this, types, fn, selector );
-		});
-	},
-
-	bind: function( types, data, fn ) {
-		return this.on( types, null, data, fn );
-	},
-	unbind: function( types, fn ) {
-		return this.off( types, null, fn );
-	},
-
-	live: function( types, data, fn ) {
-		jQuery( this.context ).on( types, this.selector, data, fn );
-		return this;
-	},
-	die: function( types, fn ) {
-		jQuery( this.context ).off( types, this.selector || "**", fn );
-		return this;
-	},
-
-	delegate: function( selector, types, data, fn ) {
-		return this.on( types, selector, data, fn );
-	},
-	undelegate: function( selector, types, fn ) {
-		// ( namespace ) or ( selector, types [, fn] )
-		return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn );
-	},
-
-	trigger: function( type, data ) {
-		return this.each(function() {
-			jQuery.event.trigger( type, data, this );
-		});
-	},
-	triggerHandler: function( type, data ) {
-		if ( this[0] ) {
-			return jQuery.event.trigger( type, data, this[0], true );
-		}
-	},
-
-	toggle: function( fn ) {
-		// Save reference to arguments for access in closure
-		var args = arguments,
-			guid = fn.guid || jQuery.guid++,
-			i = 0,
-			toggler = function( event ) {
-				// Figure out which function to execute
-				var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
-				jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
-
-				// Make sure that clicks stop
-				event.preventDefault();
-
-				// and execute the function
-				return args[ lastToggle ].apply( this, arguments ) || false;
-			};
-
-		// link all the functions, so any of them can unbind this click handler
-		toggler.guid = guid;
-		while ( i < args.length ) {
-			args[ i++ ].guid = guid;
-		}
-
-		return this.click( toggler );
-	},
-
-	hover: function( fnOver, fnOut ) {
-		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
-	}
-});
-
-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
-	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
-	"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
-
-	// Handle event binding
-	jQuery.fn[ name ] = function( data, fn ) {
-		if ( fn == null ) {
-			fn = data;
-			data = null;
-		}
-
-		return arguments.length > 0 ?
-			this.on( name, null, data, fn ) :
-			this.trigger( name );
-	};
-
-	if ( jQuery.attrFn ) {
-		jQuery.attrFn[ name ] = true;
-	}
-
-	if ( rkeyEvent.test( name ) ) {
-		jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
-	}
-
-	if ( rmouseEvent.test( name ) ) {
-		jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
-	}
-});
-
-
-
-/*
- * Sizzle CSS Selector Engine
- *  Copyright 2011, The Dojo Foundation
- *  Released under the MIT, BSD, and GPL Licenses.
- *  More information: http://sizzlejs.com/
- */
-(function(){
-
-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
-	expando = "sizcache" + (Math.random() + '').replace('.', ''),
-	done = 0,
-	toString = Object.prototype.toString,
-	hasDuplicate = false,
-	baseHasDuplicate = true,
-	rBackslash = /\\/g,
-	rReturn = /\r\n/g,
-	rNonWord = /\W/;
-
-// Here we check if the JavaScript engine is using some sort of
-// optimization where it does not always call our comparision
-// function. If that is the case, discard the hasDuplicate value.
-//   Thus far that includes Google Chrome.
-[0, 0].sort(function() {
-	baseHasDuplicate = false;
-	return 0;
-});
-
-var Sizzle = function( selector, context, results, seed ) {
-	results = results || [];
-	context = context || document;
-
-	var origContext = context;
-
-	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
-		return [];
-	}
-
-	if ( !selector || typeof selector !== "string" ) {
-		return results;
-	}
-
-	var m, set, checkSet, extra, ret, cur, pop, i,
-		prune = true,
-		contextXML = Sizzle.isXML( context ),
-		parts = [],
-		soFar = selector;
-
-	// Reset the position of the chunker regexp (start from head)
-	do {
-		chunker.exec( "" );
-		m = chunker.exec( soFar );
-
-		if ( m ) {
-			soFar = m[3];
-
-			parts.push( m[1] );
-
-			if ( m[2] ) {
-				extra = m[3];
-				break;
-			}
-		}
-	} while ( m );
-
-	if ( parts.length > 1 && origPOS.exec( selector ) ) {
-
-		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
-			set = posProcess( parts[0] + parts[1], context, seed );
-
-		} else {
-			set = Expr.relative[ parts[0] ] ?
-				[ context ] :
-				Sizzle( parts.shift(), context );
-
-			while ( parts.length ) {
-				selector = parts.shift();
-
-				if ( Expr.relative[ selector ] ) {
-					selector += parts.shift();
-				}
-
-				set = posProcess( selector, set, seed );
-			}
-		}
-
-	} else {
-		// Take a shortcut and set the context if the root selector is an ID
-		// (but not if it'll be faster if the inner selector is an ID)
-		if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
-				Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
-
-			ret = Sizzle.find( parts.shift(), context, contextXML );
-			context = ret.expr ?
-				Sizzle.filter( ret.expr, ret.set )[0] :
-				ret.set[0];
-		}
-
-		if ( context ) {
-			ret = seed ?
-				{ expr: parts.pop(), set: makeArray(seed) } :
-				Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
-
-			set = ret.expr ?
-				Sizzle.filter( ret.expr, ret.set ) :
-				ret.set;
-
-			if ( parts.length > 0 ) {
-				checkSet = makeArray( set );
-
-			} else {
-				prune = false;
-			}
-
-			while ( parts.length ) {
-				cur = parts.pop();
-				pop = cur;
-
-				if ( !Expr.relative[ cur ] ) {
-					cur = "";
-				} else {
-					pop = parts.pop();
-				}
-
-				if ( pop == null ) {
-					pop = context;
-				}
-
-				Expr.relative[ cur ]( checkSet, pop, contextXML );
-			}
-
-		} else {
-			checkSet = parts = [];
-		}
-	}
-
-	if ( !checkSet ) {
-		checkSet = set;
-	}
-
-	if ( !checkSet ) {
-		Sizzle.error( cur || selector );
-	}
-
-	if ( toString.call(checkSet) === "[object Array]" ) {
-		if ( !prune ) {
-			results.push.apply( results, checkSet );
-
-		} else if ( context && context.nodeType === 1 ) {
-			for ( i = 0; checkSet[i] != null; i++ ) {
-				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
-					results.push( set[i] );
-				}
-			}
-
-		} else {
-			for ( i = 0; checkSet[i] != null; i++ ) {
-				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
-					results.push( set[i] );
-				}
-			}
-		}
-
-	} else {
-		makeArray( checkSet, results );
-	}
-
-	if ( extra ) {
-		Sizzle( extra, origContext, results, seed );
-		Sizzle.uniqueSort( results );
-	}
-
-	return results;
-};
-
-Sizzle.uniqueSort = function( results ) {
-	if ( sortOrder ) {
-		hasDuplicate = baseHasDuplicate;
-		results.sort( sortOrder );
-
-		if ( hasDuplicate ) {
-			for ( var i = 1; i < results.length; i++ ) {
-				if ( results[i] === results[ i - 1 ] ) {
-					results.splice( i--, 1 );
-				}
-			}
-		}
-	}
-
-	return results;
-};
-
-Sizzle.matches = function( expr, set ) {
-	return Sizzle( expr, null, null, set );
-};
-
-Sizzle.matchesSelector = function( node, expr ) {
-	return Sizzle( expr, null, null, [node] ).length > 0;
-};
-
-Sizzle.find = function( expr, context, isXML ) {
-	var set, i, len, match, type, left;
-
-	if ( !expr ) {
-		return [];
-	}
-
-	for ( i = 0, len = Expr.order.length; i < len; i++ ) {
-		type = Expr.order[i];
-
-		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
-			left = match[1];
-			match.splice( 1, 1 );
-
-			if ( left.substr( left.length - 1 ) !== "\\" ) {
-				match[1] = (match[1] || "").replace( rBackslash, "" );
-				set = Expr.find[ type ]( match, context, isXML );
-
-				if ( set != null ) {
-					expr = expr.replace( Expr.match[ type ], "" );
-					break;
-				}
-			}
-		}
-	}
-
-	if ( !set ) {
-		set = typeof context.getElementsByTagName !== "undefined" ?
-			context.getElementsByTagName( "*" ) :
-			[];
-	}
-
-	return { set: set, expr: expr };
-};
-
-Sizzle.filter = function( expr, set, inplace, not ) {
-	var match, anyFound,
-		type, found, item, filter, left,
-		i, pass,
-		old = expr,
-		result = [],
-		curLoop = set,
-		isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
-
-	while ( expr && set.length ) {
-		for ( type in Expr.filter ) {
-			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
-				filter = Expr.filter[ type ];
-				left = match[1];
-
-				anyFound = false;
-
-				match.splice(1,1);
-
-				if ( left.substr( left.length - 1 ) === "\\" ) {
-					continue;
-				}
-
-				if ( curLoop === result ) {
-					result = [];
-				}
-
-				if ( Expr.preFilter[ type ] ) {
-					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
-
-					if ( !match ) {
-						anyFound = found = true;
-
-					} else if ( match === true ) {
-						continue;
-					}
-				}
-
-				if ( match ) {
-					for ( i = 0; (item = curLoop[i]) != null; i++ ) {
-						if ( item ) {
-							found = filter( item, match, i, curLoop );
-							pass = not ^ found;
-
-							if ( inplace && found != null ) {
-								if ( pass ) {
-									anyFound = true;
-
-								} else {
-									curLoop[i] = false;
-								}
-
-							} else if ( pass ) {
-								result.push( item );
-								anyFound = true;
-							}
-						}
-					}
-				}
-
-				if ( found !== undefined ) {
-					if ( !inplace ) {
-						curLoop = result;
-					}
-
-					expr = expr.replace( Expr.match[ type ], "" );
-
-					if ( !anyFound ) {
-						return [];
-					}
-
-					break;
-				}
-			}
-		}
-
-		// Improper expression
-		if ( expr === old ) {
-			if ( anyFound == null ) {
-				Sizzle.error( expr );
-
-			} else {
-				break;
-			}
-		}
-
-		old = expr;
-	}
-
-	return curLoop;
-};
-
-Sizzle.error = function( msg ) {
-	throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Utility function for retreiving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-var getText = Sizzle.getText = function( elem ) {
-    var i, node,
-		nodeType = elem.nodeType,
-		ret = "";
-
-	if ( nodeType ) {
-		if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
-			// Use textContent || innerText for elements
-			if ( typeof elem.textContent === 'string' ) {
-				return elem.textContent;
-			} else if ( typeof elem.innerText === 'string' ) {
-				// Replace IE's carriage returns
-				return elem.innerText.replace( rReturn, '' );
-			} else {
-				// Traverse it's children
-				for ( elem = elem.firstChild; elem; elem = elem.nextSibling) {
-					ret += getText( elem );
-				}
-			}
-		} else if ( nodeType === 3 || nodeType === 4 ) {
-			return elem.nodeValue;
-		}
-	} else {
-
-		// If no nodeType, this is expected to be an array
-		for ( i = 0; (node = elem[i]); i++ ) {
-			// Do not traverse comment nodes
-			if ( node.nodeType !== 8 ) {
-				ret += getText( node );
-			}
-		}
-	}
-	return ret;
-};
-
-var Expr = Sizzle.selectors = {
-	order: [ "ID", "NAME", "TAG" ],
-
-	match: {
-		ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
-		CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
-		NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
-		ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
-		TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
-		CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
-		POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
-		PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
-	},
-
-	leftMatch: {},
-
-	attrMap: {
-		"class": "className",
-		"for": "htmlFor"
-	},
-
-	attrHandle: {
-		href: function( elem ) {
-			return elem.getAttribute( "href" );
-		},
-		type: function( elem ) {
-			return elem.getAttribute( "type" );
-		}
-	},
-
-	relative: {
-		"+": function(checkSet, part){
-			var isPartStr = typeof part === "string",
-				isTag = isPartStr && !rNonWord.test( part ),
-				isPartStrNotTag = isPartStr && !isTag;
-
-			if ( isTag ) {
-				part = part.toLowerCase();
-			}
-
-			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
-				if ( (elem = checkSet[i]) ) {
-					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
-
-					checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
-						elem || false :
-						elem === part;
-				}
-			}
-
-			if ( isPartStrNotTag ) {
-				Sizzle.filter( part, checkSet, true );
-			}
-		},
-
-		">": function( checkSet, part ) {
-			var elem,
-				isPartStr = typeof part === "string",
-				i = 0,
-				l = checkSet.length;
-
-			if ( isPartStr && !rNonWord.test( part ) ) {
-				part = part.toLowerCase();
-
-				for ( ; i < l; i++ ) {
-					elem = checkSet[i];
-
-					if ( elem ) {
-						var parent = elem.parentNode;
-						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
-					}
-				}
-
-			} else {
-				for ( ; i < l; i++ ) {
-					elem = checkSet[i];
-
-					if ( elem ) {
-						checkSet[i] = isPartStr ?
-							elem.parentNode :
-							elem.parentNode === part;
-					}
-				}
-
-				if ( isPartStr ) {
-					Sizzle.filter( part, checkSet, true );
-				}
-			}
-		},
-
-		"": function(checkSet, part, isXML){
-			var nodeCheck,
-				doneName = done++,
-				checkFn = dirCheck;
-
-			if ( typeof part === "string" && !rNonWord.test( part ) ) {
-				part = part.toLowerCase();
-				nodeCheck = part;
-				checkFn = dirNodeCheck;
-			}
-
-			checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
-		},
-
-		"~": function( checkSet, part, isXML ) {
-			var nodeCheck,
-				doneName = done++,
-				checkFn = dirCheck;
-
-			if ( typeof part === "string" && !rNonWord.test( part ) ) {
-				part = part.toLowerCase();
-				nodeCheck = part;
-				checkFn = dirNodeCheck;
-			}
-
-			checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
-		}
-	},
-
-	find: {
-		ID: function( match, context, isXML ) {
-			if ( typeof context.getElementById !== "undefined" && !isXML ) {
-				var m = context.getElementById(match[1]);
-				// Check parentNode to catch when Blackberry 4.6 returns
-				// nodes that are no longer in the document #6963
-				return m && m.parentNode ? [m] : [];
-			}
-		},
-
-		NAME: function( match, context ) {
-			if ( typeof context.getElementsByName !== "undefined" ) {
-				var ret = [],
-					results = context.getElementsByName( match[1] );
-
-				for ( var i = 0, l = results.length; i < l; i++ ) {
-					if ( results[i].getAttribute("name") === match[1] ) {
-						ret.push( results[i] );
-					}
-				}
-
-				return ret.length === 0 ? null : ret;
-			}
-		},
-
-		TAG: function( match, context ) {
-			if ( typeof context.getElementsByTagName !== "undefined" ) {
-				return context.getElementsByTagName( match[1] );
-			}
-		}
-	},
-	preFilter: {
-		CLASS: function( match, curLoop, inplace, result, not, isXML ) {
-			match = " " + match[1].replace( rBackslash, "" ) + " ";
-
-			if ( isXML ) {
-				return match;
-			}
-
-			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
-				if ( elem ) {
-					if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
-						if ( !inplace ) {
-							result.push( elem );
-						}
-
-					} else if ( inplace ) {
-						curLoop[i] = false;
-					}
-				}
-			}
-
-			return false;
-		},
-
-		ID: function( match ) {
-			return match[1].replace( rBackslash, "" );
-		},
-
-		TAG: function( match, curLoop ) {
-			return match[1].replace( rBackslash, "" ).toLowerCase();
-		},
-
-		CHILD: function( match ) {
-			if ( match[1] === "nth" ) {
-				if ( !match[2] ) {
-					Sizzle.error( match[0] );
-				}
-
-				match[2] = match[2].replace(/^\+|\s*/g, '');
-
-				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
-				var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
-					match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
-					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
-
-				// calculate the numbers (first)n+(last) including if they are negative
-				match[2] = (test[1] + (test[2] || 1)) - 0;
-				match[3] = test[3] - 0;
-			}
-			else if ( match[2] ) {
-				Sizzle.error( match[0] );
-			}
-
-			// TODO: Move to normal caching system
-			match[0] = done++;
-
-			return match;
-		},
-
-		ATTR: function( match, curLoop, inplace, result, not, isXML ) {
-			var name = match[1] = match[1].replace( rBackslash, "" );
-
-			if ( !isXML && Expr.attrMap[name] ) {
-				match[1] = Expr.attrMap[name];
-			}
-
-			// Handle if an un-quoted value was used
-			match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
-
-			if ( match[2] === "~=" ) {
-				match[4] = " " + match[4] + " ";
-			}
-
-			return match;
-		},
-
-		PSEUDO: function( match, curLoop, inplace, result, not ) {
-			if ( match[1] === "not" ) {
-				// If we're dealing with a complex expression, or a simple one
-				if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
-					match[3] = Sizzle(match[3], null, null, curLoop);
-
-				} else {
-					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
-
-					if ( !inplace ) {
-						result.push.apply( result, ret );
-					}
-
-					return false;
-				}
-
-			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
-				return true;
-			}
-
-			return match;
-		},
-
-		POS: function( match ) {
-			match.unshift( true );
-
-			return match;
-		}
-	},
-
-	filters: {
-		enabled: function( elem ) {
-			return elem.disabled === false && elem.type !== "hidden";
-		},
-
-		disabled: function( elem ) {
-			return elem.disabled === true;
-		},
-
-		checked: function( elem ) {
-			return elem.checked === true;
-		},
-
-		selected: function( elem ) {
-			// Accessing this property makes selected-by-default
-			// options in Safari work properly
-			if ( elem.parentNode ) {
-				elem.parentNode.selectedIndex;
-			}
-
-			return elem.selected === true;
-		},
-
-		parent: function( elem ) {
-			return !!elem.firstChild;
-		},
-
-		empty: function( elem ) {
-			return !elem.firstChild;
-		},
-
-		has: function( elem, i, match ) {
-			return !!Sizzle( match[3], elem ).length;
-		},
-
-		header: function( elem ) {
-			return (/h\d/i).test( elem.nodeName );
-		},
-
-		text: function( elem ) {
-			var attr = elem.getAttribute( "type" ), type = elem.type;
-			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
-			// use getAttribute instead to test this case
-			return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
-		},
-
-		radio: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
-		},
-
-		checkbox: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
-		},
-
-		file: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
-		},
-
-		password: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
-		},
-
-		submit: function( elem ) {
-			var name = elem.nodeName.toLowerCase();
-			return (name === "input" || name === "button") && "submit" === elem.type;
-		},
-
-		image: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
-		},
-
-		reset: function( elem ) {
-			var name = elem.nodeName.toLowerCase();
-			return (name === "input" || name === "button") && "reset" === elem.type;
-		},
-
-		button: function( elem ) {
-			var name = elem.nodeName.toLowerCase();
-			return name === "input" && "button" === elem.type || name === "button";
-		},
-
-		input: function( elem ) {
-			return (/input|select|textarea|button/i).test( elem.nodeName );
-		},
-
-		focus: function( elem ) {
-			return elem === elem.ownerDocument.activeElement;
-		}
-	},
-	setFilters: {
-		first: function( elem, i ) {
-			return i === 0;
-		},
-
-		last: function( elem, i, match, array ) {
-			return i === array.length - 1;
-		},
-
-		even: function( elem, i ) {
-			return i % 2 === 0;
-		},
-
-		odd: function( elem, i ) {
-			return i % 2 === 1;
-		},
-
-		lt: function( elem, i, match ) {
-			return i < match[3] - 0;
-		},
-
-		gt: function( elem, i, match ) {
-			return i > match[3] - 0;
-		},
-
-		nth: function( elem, i, match ) {
-			return match[3] - 0 === i;
-		},
-
-		eq: function( elem, i, match ) {
-			return match[3] - 0 === i;
-		}
-	},
-	filter: {
-		PSEUDO: function( elem, match, i, array ) {
-			var name = match[1],
-				filter = Expr.filters[ name ];
-
-			if ( filter ) {
-				return filter( elem, i, match, array );
-
-			} else if ( name === "contains" ) {
-				return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
-
-			} else if ( name === "not" ) {
-				var not = match[3];
-
-				for ( var j = 0, l = not.length; j < l; j++ ) {
-					if ( not[j] === elem ) {
-						return false;
-					}
-				}
-
-				return true;
-
-			} else {
-				Sizzle.error( name );
-			}
-		},
-
-		CHILD: function( elem, match ) {
-			var first, last,
-				doneName, parent, cache,
-				count, diff,
-				type = match[1],
-				node = elem;
-
-			switch ( type ) {
-				case "only":
-				case "first":
-					while ( (node = node.previousSibling) ) {
-						if ( node.nodeType === 1 ) {
-							return false;
-						}
-					}
-
-					if ( type === "first" ) {
-						return true;
-					}
-
-					node = elem;
-
-					/* falls through */
-				case "last":
-					while ( (node = node.nextSibling) ) {
-						if ( node.nodeType === 1 ) {
-							return false;
-						}
-					}
-
-					return true;
-
-				case "nth":
-					first = match[2];
-					last = match[3];
-
-					if ( first === 1 && last === 0 ) {
-						return true;
-					}
-
-					doneName = match[0];
-					parent = elem.parentNode;
-
-					if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
-						count = 0;
-
-						for ( node = parent.firstChild; node; node = node.nextSibling ) {
-							if ( node.nodeType === 1 ) {
-								node.nodeIndex = ++count;
-							}
-						}
-
-						parent[ expando ] = doneName;
-					}
-
-					diff = elem.nodeIndex - last;
-
-					if ( first === 0 ) {
-						return diff === 0;
-
-					} else {
-						return ( diff % first === 0 && diff / first >= 0 );
-					}
-			}
-		},
-
-		ID: function( elem, match ) {
-			return elem.nodeType === 1 && elem.getAttribute("id") === match;
-		},
-
-		TAG: function( elem, match ) {
-			return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match;
-		},
-
-		CLASS: function( elem, match ) {
-			return (" " + (elem.className || elem.getAttribute("class")) + " ")
-				.indexOf( match ) > -1;
-		},
-
-		ATTR: function( elem, match ) {
-			var name = match[1],
-				result = Sizzle.attr ?
-					Sizzle.attr( elem, name ) :
-					Expr.attrHandle[ name ] ?
-					Expr.attrHandle[ name ]( elem ) :
-					elem[ name ] != null ?
-						elem[ name ] :
-						elem.getAttribute( name ),
-				value = result + "",
-				type = match[2],
-				check = match[4];
-
-			return result == null ?
-				type === "!=" :
-				!type && Sizzle.attr ?
-				result != null :
-				type === "=" ?
-				value === check :
-				type === "*=" ?
-				value.indexOf(check) >= 0 :
-				type === "~=" ?
-				(" " + value + " ").indexOf(check) >= 0 :
-				!check ?
-				value && result !== false :
-				type === "!=" ?
-				value !== check :
-				type === "^=" ?
-				value.indexOf(check) === 0 :
-				type === "$=" ?
-				value.substr(value.length - check.length) === check :
-				type === "|=" ?
-				value === check || value.substr(0, check.length + 1) === check + "-" :
-				false;
-		},
-
-		POS: function( elem, match, i, array ) {
-			var name = match[2],
-				filter = Expr.setFilters[ name ];
-
-			if ( filter ) {
-				return filter( elem, i, match, array );
-			}
-		}
-	}
-};
-
-var origPOS = Expr.match.POS,
-	fescape = function(all, num){
-		return "\\" + (num - 0 + 1);
-	};
-
-for ( var type in Expr.match ) {
-	Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
-	Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
-}
-// Expose origPOS
-// "global" as in regardless of relation to brackets/parens
-Expr.match.globalPOS = origPOS;
-
-var makeArray = function( array, results ) {
-	array = Array.prototype.slice.call( array, 0 );
-
-	if ( results ) {
-		results.push.apply( results, array );
-		return results;
-	}
-
-	return array;
-};
-
-// Perform a simple check to determine if the browser is capable of
-// converting a NodeList to an array using builtin methods.
-// Also verifies that the returned array holds DOM nodes
-// (which is not the case in the Blackberry browser)
-try {
-	Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
-
-// Provide a fallback method if it does not work
-} catch( e ) {
-	makeArray = function( array, results ) {
-		var i = 0,
-			ret = results || [];
-
-		if ( toString.call(array) === "[object Array]" ) {
-			Array.prototype.push.apply( ret, array );
-
-		} else {
-			if ( typeof array.length === "number" ) {
-				for ( var l = array.length; i < l; i++ ) {
-					ret.push( array[i] );
-				}
-
-			} else {
-				for ( ; array[i]; i++ ) {
-					ret.push( array[i] );
-				}
-			}
-		}
-
-		return ret;
-	};
-}
-
-var sortOrder, siblingCheck;
-
-if ( document.documentElement.compareDocumentPosition ) {
-	sortOrder = function( a, b ) {
-		if ( a === b ) {
-			hasDuplicate = true;
-			return 0;
-		}
-
-		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
-			return a.compareDocumentPosition ? -1 : 1;
-		}
-
-		return a.compareDocumentPosition(b) & 4 ? -1 : 1;
-	};
-
-} else {
-	sortOrder = function( a, b ) {
-		// The nodes are identical, we can exit early
-		if ( a === b ) {
-			hasDuplicate = true;
-			return 0;
-
-		// Fallback to using sourceIndex (in IE) if it's available on both nodes
-		} else if ( a.sourceIndex && b.sourceIndex ) {
-			return a.sourceIndex - b.sourceIndex;
-		}
-
-		var al, bl,
-			ap = [],
-			bp = [],
-			aup = a.parentNode,
-			bup = b.parentNode,
-			cur = aup;
-
-		// If the nodes are siblings (or identical) we can do a quick check
-		if ( aup === bup ) {
-			return siblingCheck( a, b );
-
-		// If no parents were found then the nodes are disconnected
-		} else if ( !aup ) {
-			return -1;
-
-		} else if ( !bup ) {
-			return 1;
-		}
-
-		// Otherwise they're somewhere else in the tree so we need
-		// to build up a full list of the parentNodes for comparison
-		while ( cur ) {
-			ap.unshift( cur );
-			cur = cur.parentNode;
-		}
-
-		cur = bup;
-
-		while ( cur ) {
-			bp.unshift( cur );
-			cur = cur.parentNode;
-		}
-
-		al = ap.length;
-		bl = bp.length;
-
-		// Start walking down the tree looking for a discrepancy
-		for ( var i = 0; i < al && i < bl; i++ ) {
-			if ( ap[i] !== bp[i] ) {
-				return siblingCheck( ap[i], bp[i] );
-			}
-		}
-
-		// We ended someplace up the tree so do a sibling check
-		return i === al ?
-			siblingCheck( a, bp[i], -1 ) :
-			siblingCheck( ap[i], b, 1 );
-	};
-
-	siblingCheck = function( a, b, ret ) {
-		if ( a === b ) {
-			return ret;
-		}
-
-		var cur = a.nextSibling;
-
-		while ( cur ) {
-			if ( cur === b ) {
-				return -1;
-			}
-
-			cur = cur.nextSibling;
-		}
-
-		return 1;
-	};
-}
-
-// Check to see if the browser returns elements by name when
-// querying by getElementById (and provide a workaround)
-(function(){
-	// We're going to inject a fake input element with a specified name
-	var form = document.createElement("div"),
-		id = "script" + (new Date()).getTime(),
-		root = document.documentElement;
-
-	form.innerHTML = "<a name='" + id + "'/>";
-
-	// Inject it into the root element, check its status, and remove it quickly
-	root.insertBefore( form, root.firstChild );
-
-	// The workaround has to do additional checks after a getElementById
-	// Which slows things down for other browsers (hence the branching)
-	if ( document.getElementById( id ) ) {
-		Expr.find.ID = function( match, context, isXML ) {
-			if ( typeof context.getElementById !== "undefined" && !isXML ) {
-				var m = context.getElementById(match[1]);
-
-				return m ?
-					m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
-						[m] :
-						undefined :
-					[];
-			}
-		};
-
-		Expr.filter.ID = function( elem, match ) {
-			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
-
-			return elem.nodeType === 1 && node && node.nodeValue === match;
-		};
-	}
-
-	root.removeChild( form );
-
-	// release memory in IE
-	root = form = null;
-})();
-
-(function(){
-	// Check to see if the browser returns only elements
-	// when doing getElementsByTagName("*")
-
-	// Create a fake element
-	var div = document.createElement("div");
-	div.appendChild( document.createComment("") );
-
-	// Make sure no comments are found
-	if ( div.getElementsByTagName("*").length > 0 ) {
-		Expr.find.TAG = function( match, context ) {
-			var results = context.getElementsByTagName( match[1] );
-
-			// Filter out possible comments
-			if ( match[1] === "*" ) {
-				var tmp = [];
-
-				for ( var i = 0; results[i]; i++ ) {
-					if ( results[i].nodeType === 1 ) {
-						tmp.push( results[i] );
-					}
-				}
-
-				results = tmp;
-			}
-
-			return results;
-		};
-	}
-
-	// Check to see if an attribute returns normalized href attributes
-	div.innerHTML = "<a href='#'></a>";
-
-	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
-			div.firstChild.getAttribute("href") !== "#" ) {
-
-		Expr.attrHandle.href = function( elem ) {
-			return elem.getAttribute( "href", 2 );
-		};
-	}
-
-	// release memory in IE
-	div = null;
-})();
-
-if ( document.querySelectorAll ) {
-	(function(){
-		var oldSizzle = Sizzle,
-			div = document.createElement("div"),
-			id = "__sizzle__";
-
-		div.innerHTML = "<p class='TEST'></p>";
-
-		// Safari can't handle uppercase or unicode characters when
-		// in quirks mode.
-		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
-			return;
-		}
-
-		Sizzle = function( query, context, extra, seed ) {
-			context = context || document;
-
-			// Only use querySelectorAll on non-XML documents
-			// (ID selectors don't work in non-HTML documents)
-			if ( !seed && !Sizzle.isXML(context) ) {
-				// See if we find a selector to speed up
-				var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
-
-				if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
-					// Speed-up: Sizzle("TAG")
-					if ( match[1] ) {
-						return makeArray( context.getElementsByTagName( query ), extra );
-
-					// Speed-up: Sizzle(".CLASS")
-					} else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
-						return makeArray( context.getElementsByClassName( match[2] ), extra );
-					}
-				}
-
-				if ( context.nodeType === 9 ) {
-					// Speed-up: Sizzle("body")
-					// The body element only exists once, optimize finding it
-					if ( query === "body" && context.body ) {
-						return makeArray( [ context.body ], extra );
-
-					// Speed-up: Sizzle("#ID")
-					} else if ( match && match[3] ) {
-						var elem = context.getElementById( match[3] );
-
-						// Check parentNode to catch when Blackberry 4.6 returns
-						// nodes that are no longer in the document #6963
-						if ( elem && elem.parentNode ) {
-							// Handle the case where IE and Opera return items
-							// by name instead of ID
-							if ( elem.id === match[3] ) {
-								return makeArray( [ elem ], extra );
-							}
-
-						} else {
-							return makeArray( [], extra );
-						}
-					}
-
-					try {
-						return makeArray( context.querySelectorAll(query), extra );
-					} catch(qsaError) {}
-
-				// qSA works strangely on Element-rooted queries
-				// We can work around this by specifying an extra ID on the root
-				// and working up from there (Thanks to Andrew Dupont for the technique)
-				// IE 8 doesn't work on object elements
-				} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
-					var oldContext = context,
-						old = context.getAttribute( "id" ),
-						nid = old || id,
-						hasParent = context.parentNode,
-						relativeHierarchySelector = /^\s*[+~]/.test( query );
-
-					if ( !old ) {
-						context.setAttribute( "id", nid );
-					} else {
-						nid = nid.replace( /'/g, "\\$&" );
-					}
-					if ( relativeHierarchySelector && hasParent ) {
-						context = context.parentNode;
-					}
-
-					try {
-						if ( !relativeHierarchySelector || hasParent ) {
-							return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
-						}
-
-					} catch(pseudoError) {
-					} finally {
-						if ( !old ) {
-							oldContext.removeAttribute( "id" );
-						}
-					}
-				}
-			}
-
-			return oldSizzle(query, context, extra, seed);
-		};
-
-		for ( var prop in oldSizzle ) {
-			Sizzle[ prop ] = oldSizzle[ prop ];
-		}
-
-		// release memory in IE
-		div = null;
-	})();
-}
-
-(function(){
-	var html = document.documentElement,
-		matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
-
-	if ( matches ) {
-		// Check to see if it's possible to do matchesSelector
-		// on a disconnected node (IE 9 fails this)
-		var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
-			pseudoWorks = false;
-
-		try {
-			// This should fail with an exception
-			// Gecko does not error, returns false instead
-			matches.call( document.documentElement, "[test!='']:sizzle" );
-
-		} catch( pseudoError ) {
-			pseudoWorks = true;
-		}
-
-		Sizzle.matchesSelector = function( node, expr ) {
-			// Make sure that attribute selectors are quoted
-			expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
-
-			if ( !Sizzle.isXML( node ) ) {
-				try {
-					if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
-						var ret = matches.call( node, expr );
-
-						// IE 9's matchesSelector returns false on disconnected nodes
-						if ( ret || !disconnectedMatch ||
-								// As well, disconnected nodes are said to be in a document
-								// fragment in IE 9, so check for that
-								node.document && node.document.nodeType !== 11 ) {
-							return ret;
-						}
-					}
-				} catch(e) {}
-			}
-
-			return Sizzle(expr, null, null, [node]).length > 0;
-		};
-	}
-})();
-
-(function(){
-	var div = document.createElement("div");
-
-	div.innerHTML = "<div class='test e'></div><div class='test'></div>";
-
-	// Opera can't find a second classname (in 9.6)
-	// Also, make sure that getElementsByClassName actually exists
-	if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
-		return;
-	}
-
-	// Safari caches class attributes, doesn't catch changes (in 3.2)
-	div.lastChild.className = "e";
-
-	if ( div.getElementsByClassName("e").length === 1 ) {
-		return;
-	}
-
-	Expr.order.splice(1, 0, "CLASS");
-	Expr.find.CLASS = function( match, context, isXML ) {
-		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
-			return context.getElementsByClassName(match[1]);
-		}
-	};
-
-	// release memory in IE
-	div = null;
-})();
-
-function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
-	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-		var elem = checkSet[i];
-
-		if ( elem ) {
-			var match = false;
-
-			elem = elem[dir];
-
-			while ( elem ) {
-				if ( elem[ expando ] === doneName ) {
-					match = checkSet[elem.sizset];
-					break;
-				}
-
-				if ( elem.nodeType === 1 && !isXML ){
-					elem[ expando ] = doneName;
-					elem.sizset = i;
-				}
-
-				if ( elem.nodeName.toLowerCase() === cur ) {
-					match = elem;
-					break;
-				}
-
-				elem = elem[dir];
-			}
-
-			checkSet[i] = match;
-		}
-	}
-}
-
-function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
-	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-		var elem = checkSet[i];
-
-		if ( elem ) {
-			var match = false;
-
-			elem = elem[dir];
-
-			while ( elem ) {
-				if ( elem[ expando ] === doneName ) {
-					match = checkSet[elem.sizset];
-					break;
-				}
-
-				if ( elem.nodeType === 1 ) {
-					if ( !isXML ) {
-						elem[ expando ] = doneName;
-						elem.sizset = i;
-					}
-
-					if ( typeof cur !== "string" ) {
-						if ( elem === cur ) {
-							match = true;
-							break;
-						}
-
-					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
-						match = elem;
-						break;
-					}
-				}
-
-				elem = elem[dir];
-			}
-
-			checkSet[i] = match;
-		}
-	}
-}
-
-if ( document.documentElement.contains ) {
-	Sizzle.contains = function( a, b ) {
-		return a !== b && (a.contains ? a.contains(b) : true);
-	};
-
-} else if ( document.documentElement.compareDocumentPosition ) {
-	Sizzle.contains = function( a, b ) {
-		return !!(a.compareDocumentPosition(b) & 16);
-	};
-
-} else {
-	Sizzle.contains = function() {
-		return false;
-	};
-}
-
-Sizzle.isXML = function( elem ) {
-	// documentElement is verified for cases where it doesn't yet exist
-	// (such as loading iframes in IE - #4833)
-	var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
-
-	return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-var posProcess = function( selector, context, seed ) {
-	var match,
-		tmpSet = [],
-		later = "",
-		root = context.nodeType ? [context] : context;
-
-	// Position selectors must be done after the filter
-	// And so must :not(positional) so we move all PSEUDOs to the end
-	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
-		later += match[0];
-		selector = selector.replace( Expr.match.PSEUDO, "" );
-	}
-
-	selector = Expr.relative[selector] ? selector + "*" : selector;
-
-	for ( var i = 0, l = root.length; i < l; i++ ) {
-		Sizzle( selector, root[i], tmpSet, seed );
-	}
-
-	return Sizzle.filter( later, tmpSet );
-};
-
-// EXPOSE
-// Override sizzle attribute retrieval
-Sizzle.attr = jQuery.attr;
-Sizzle.selectors.attrMap = {};
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.filters;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-})();
-
-
-var runtil = /Until$/,
-	rparentsprev = /^(?:parents|prevUntil|prevAll)/,
-	// Note: This RegExp should be improved, or likely pulled from Sizzle
-	rmultiselector = /,/,
-	isSimple = /^.[^:#\[\.,]*$/,
-	slice = Array.prototype.slice,
-	POS = jQuery.expr.match.globalPOS,
-	// methods guaranteed to produce a unique set when starting from a unique set
-	guaranteedUnique = {
-		children: true,
-		contents: true,
-		next: true,
-		prev: true
-	};
-
-jQuery.fn.extend({
-	find: function( selector ) {
-		var self = this,
-			i, l;
-
-		if ( typeof selector !== "string" ) {
-			return jQuery( selector ).filter(function() {
-				for ( i = 0, l = self.length; i < l; i++ ) {
-					if ( jQuery.contains( self[ i ], this ) ) {
-						return true;
-					}
-				}
-			});
-		}
-
-		var ret = this.pushStack( "", "find", selector ),
-			length, n, r;
-
-		for ( i = 0, l = this.length; i < l; i++ ) {
-			length = ret.length;
-			jQuery.find( selector, this[i], ret );
-
-			if ( i > 0 ) {
-				// Make sure that the results are unique
-				for ( n = length; n < ret.length; n++ ) {
-					for ( r = 0; r < length; r++ ) {
-						if ( ret[r] === ret[n] ) {
-							ret.splice(n--, 1);
-							break;
-						}
-					}
-				}
-			}
-		}
-
-		return ret;
-	},
-
-	has: function( target ) {
-		var targets = jQuery( target );
-		return this.filter(function() {
-			for ( var i = 0, l = targets.length; i < l; i++ ) {
-				if ( jQuery.contains( this, targets[i] ) ) {
-					return true;
-				}
-			}
-		});
-	},
-
-	not: function( selector ) {
-		return this.pushStack( winnow(this, selector, false), "not", selector);
-	},
-
-	filter: function( selector ) {
-		return this.pushStack( winnow(this, selector, true), "filter", selector );
-	},
-
-	is: function( selector ) {
-		return !!selector && (
-			typeof selector === "string" ?
-				// If this is a positional selector, check membership in the returned set
-				// so $("p:first").is("p:last") won't return true for a doc with two "p".
-				POS.test( selector ) ?
-					jQuery( selector, this.context ).index( this[0] ) >= 0 :
-					jQuery.filter( selector, this ).length > 0 :
-				this.filter( selector ).length > 0 );
-	},
-
-	closest: function( selectors, context ) {
-		var ret = [], i, l, cur = this[0];
-
-		// Array (deprecated as of jQuery 1.7)
-		if ( jQuery.isArray( selectors ) ) {
-			var level = 1;
-
-			while ( cur && cur.ownerDocument && cur !== context ) {
-				for ( i = 0; i < selectors.length; i++ ) {
-
-					if ( jQuery( cur ).is( selectors[ i ] ) ) {
-						ret.push({ selector: selectors[ i ], elem: cur, level: level });
-					}
-				}
-
-				cur = cur.parentNode;
-				level++;
-			}
-
-			return ret;
-		}
-
-		// String
-		var pos = POS.test( selectors ) || typeof selectors !== "string" ?
-				jQuery( selectors, context || this.context ) :
-				0;
-
-		for ( i = 0, l = this.length; i < l; i++ ) {
-			cur = this[i];
-
-			while ( cur ) {
-				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
-					ret.push( cur );
-					break;
-
-				} else {
-					cur = cur.parentNode;
-					if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
-						break;
-					}
-				}
-			}
-		}
-
-		ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
-
-		return this.pushStack( ret, "closest", selectors );
-	},
-
-	// Determine the position of an element within
-	// the matched set of elements
-	index: function( elem ) {
-
-		// No argument, return index in parent
-		if ( !elem ) {
-			return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
-		}
-
-		// index in selector
-		if ( typeof elem === "string" ) {
-			return jQuery.inArray( this[0], jQuery( elem ) );
-		}
-
-		// Locate the position of the desired element
-		return jQuery.inArray(
-			// If it receives a jQuery object, the first element is used
-			elem.jquery ? elem[0] : elem, this );
-	},
-
-	add: function( selector, context ) {
-		var set = typeof selector === "string" ?
-				jQuery( selector, context ) :
-				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
-			all = jQuery.merge( this.get(), set );
-
-		return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
-			all :
-			jQuery.unique( all ) );
-	},
-
-	andSelf: function() {
-		return this.add( this.prevObject );
-	}
-});
-
-// A painfully simple check to see if an element is disconnected
-// from a document (should be improved, where feasible).
-function isDisconnected( node ) {
-	return !node || !node.parentNode || node.parentNode.nodeType === 11;
-}
-
-jQuery.each({
-	parent: function( elem ) {
-		var parent = elem.parentNode;
-		return parent && parent.nodeType !== 11 ? parent : null;
-	},
-	parents: function( elem ) {
-		return jQuery.dir( elem, "parentNode" );
-	},
-	parentsUntil: function( elem, i, until ) {
-		return jQuery.dir( elem, "parentNode", until );
-	},
-	next: function( elem ) {
-		return jQuery.nth( elem, 2, "nextSibling" );
-	},
-	prev: function( elem ) {
-		return jQuery.nth( elem, 2, "previousSibling" );
-	},
-	nextAll: function( elem ) {
-		return jQuery.dir( elem, "nextSibling" );
-	},
-	prevAll: function( elem ) {
-		return jQuery.dir( elem, "previousSibling" );
-	},
-	nextUntil: function( elem, i, until ) {
-		return jQuery.dir( elem, "nextSibling", until );
-	},
-	prevUntil: function( elem, i, until ) {
-		return jQuery.dir( elem, "previousSibling", until );
-	},
-	siblings: function( elem ) {
-		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
-	},
-	children: function( elem ) {
-		return jQuery.sibling( elem.firstChild );
-	},
-	contents: function( elem ) {
-		return jQuery.nodeName( elem, "iframe" ) ?
-			elem.contentDocument || elem.contentWindow.document :
-			jQuery.makeArray( elem.childNodes );
-	}
-}, function( name, fn ) {
-	jQuery.fn[ name ] = function( until, selector ) {
-		var ret = jQuery.map( this, fn, until );
-
-		if ( !runtil.test( name ) ) {
-			selector = until;
-		}
-
-		if ( selector && typeof selector === "string" ) {
-			ret = jQuery.filter( selector, ret );
-		}
-
-		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
-
-		if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
-			ret = ret.reverse();
-		}
-
-		return this.pushStack( ret, name, slice.call( arguments ).join(",") );
-	};
-});
-
-jQuery.extend({
-	filter: function( expr, elems, not ) {
-		if ( not ) {
-			expr = ":not(" + expr + ")";
-		}
-
-		return elems.length === 1 ?
-			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
-			jQuery.find.matches(expr, elems);
-	},
-
-	dir: function( elem, dir, until ) {
-		var matched = [],
-			cur = elem[ dir ];
-
-		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
-			if ( cur.nodeType === 1 ) {
-				matched.push( cur );
-			}
-			cur = cur[dir];
-		}
-		return matched;
-	},
-
-	nth: function( cur, result, dir, elem ) {
-		result = result || 1;
-		var num = 0;
-
-		for ( ; cur; cur = cur[dir] ) {
-			if ( cur.nodeType === 1 && ++num === result ) {
-				break;
-			}
-		}
-
-		return cur;
-	},
-
-	sibling: function( n, elem ) {
-		var r = [];
-
-		for ( ; n; n = n.nextSibling ) {
-			if ( n.nodeType === 1 && n !== elem ) {
-				r.push( n );
-			}
-		}
-
-		return r;
-	}
-});
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, keep ) {
-
-	// Can't pass null or undefined to indexOf in Firefox 4
-	// Set to 0 to skip string check
-	qualifier = qualifier || 0;
-
-	if ( jQuery.isFunction( qualifier ) ) {
-		return jQuery.grep(elements, function( elem, i ) {
-			var retVal = !!qualifier.call( elem, i, elem );
-			return retVal === keep;
-		});
-
-	} else if ( qualifier.nodeType ) {
-		return jQuery.grep(elements, function( elem, i ) {
-			return ( elem === qualifier ) === keep;
-		});
-
-	} else if ( typeof qualifier === "string" ) {
-		var filtered = jQuery.grep(elements, function( elem ) {
-			return elem.nodeType === 1;
-		});
-
-		if ( isSimple.test( qualifier ) ) {
-			return jQuery.filter(qualifier, filtered, !keep);
-		} else {
-			qualifier = jQuery.filter( qualifier, filtered );
-		}
-	}
-
-	return jQuery.grep(elements, function( elem, i ) {
-		return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
-	});
-}
-
-
-
-
-function createSafeFragment( document ) {
-	var list = nodeNames.split( "|" ),
-	safeFrag = document.createDocumentFragment();
-
-	if ( safeFrag.createElement ) {
-		while ( list.length ) {
-			safeFrag.createElement(
-				list.pop()
-			);
-		}
-	}
-	return safeFrag;
-}
-
-var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
-		"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
-	rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
-	rleadingWhitespace = /^\s+/,
-	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
-	rtagName = /<([\w:]+)/,
-	rtbody = /<tbody/i,
-	rhtml = /<|&#?\w+;/,
-	rnoInnerhtml = /<(?:script|style)/i,
-	rnocache = /<(?:script|object|embed|option|style)/i,
-	rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
-	// checked="checked" or checked
-	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
-	rscriptType = /\/(java|ecma)script/i,
-	rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
-	wrapMap = {
-		option: [ 1, "<select multiple='multiple'>", "</select>" ],
-		legend: [ 1, "<fieldset>", "</fieldset>" ],
-		thead: [ 1, "<table>", "</table>" ],
-		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
-		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
-		area: [ 1, "<map>", "</map>" ],
-		_default: [ 0, "", "" ]
-	},
-	safeFragment = createSafeFragment( document );
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-// IE can't serialize <link> and <script> tags normally
-if ( !jQuery.support.htmlSerialize ) {
-	wrapMap._default = [ 1, "div<div>", "</div>" ];
-}
-
-jQuery.fn.extend({
-	text: function( value ) {
-		return jQuery.access( this, function( value ) {
-			return value === undefined ?
-				jQuery.text( this ) :
-				this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
-		}, null, value, arguments.length );
-	},
-
-	wrapAll: function( html ) {
-		if ( jQuery.isFunction( html ) ) {
-			return this.each(function(i) {
-				jQuery(this).wrapAll( html.call(this, i) );
-			});
-		}
-
-		if ( this[0] ) {
-			// The elements to wrap the target around
-			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
-
-			if ( this[0].parentNode ) {
-				wrap.insertBefore( this[0] );
-			}
-
-			wrap.map(function() {
-				var elem = this;
-
-				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
-					elem = elem.firstChild;
-				}
-
-				return elem;
-			}).append( this );
-		}
-
-		return this;
-	},
-
-	wrapInner: function( html ) {
-		if ( jQuery.isFunction( html ) ) {
-			return this.each(function(i) {
-				jQuery(this).wrapInner( html.call(this, i) );
-			});
-		}
-
-		return this.each(function() {
-			var self = jQuery( this ),
-				contents = self.contents();
-
-			if ( contents.length ) {
-				contents.wrapAll( html );
-
-			} else {
-				self.append( html );
-			}
-		});
-	},
-
-	wrap: function( html ) {
-		var isFunction = jQuery.isFunction( html );
-
-		return this.each(function(i) {
-			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
-		});
-	},
-
-	unwrap: function() {
-		return this.parent().each(function() {
-			if ( !jQuery.nodeName( this, "body" ) ) {
-				jQuery( this ).replaceWith( this.childNodes );
-			}
-		}).end();
-	},
-
-	append: function() {
-		return this.domManip(arguments, true, function( elem ) {
-			if ( this.nodeType === 1 ) {
-				this.appendChild( elem );
-			}
-		});
-	},
-
-	prepend: function() {
-		return this.domManip(arguments, true, function( elem ) {
-			if ( this.nodeType === 1 ) {
-				this.insertBefore( elem, this.firstChild );
-			}
-		});
-	},
-
-	before: function() {
-		if ( this[0] && this[0].parentNode ) {
-			return this.domManip(arguments, false, function( elem ) {
-				this.parentNode.insertBefore( elem, this );
-			});
-		} else if ( arguments.length ) {
-			var set = jQuery.clean( arguments );
-			set.push.apply( set, this.toArray() );
-			return this.pushStack( set, "before", arguments );
-		}
-	},
-
-	after: function() {
-		if ( this[0] && this[0].parentNode ) {
-			return this.domManip(arguments, false, function( elem ) {
-				this.parentNode.insertBefore( elem, this.nextSibling );
-			});
-		} else if ( arguments.length ) {
-			var set = this.pushStack( this, "after", arguments );
-			set.push.apply( set, jQuery.clean(arguments) );
-			return set;
-		}
-	},
-
-	// keepData is for internal use only--do not document
-	remove: function( selector, keepData ) {
-		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
-			if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
-				if ( !keepData && elem.nodeType === 1 ) {
-					jQuery.cleanData( elem.getElementsByTagName("*") );
-					jQuery.cleanData( [ elem ] );
-				}
-
-				if ( elem.parentNode ) {
-					elem.parentNode.removeChild( elem );
-				}
-			}
-		}
-
-		return this;
-	},
-
-	empty: function() {
-		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
-			// Remove element nodes and prevent memory leaks
-			if ( elem.nodeType === 1 ) {
-				jQuery.cleanData( elem.getElementsByTagName("*") );
-			}
-
-			// Remove any remaining nodes
-			while ( elem.firstChild ) {
-				elem.removeChild( elem.firstChild );
-			}
-		}
-
-		return this;
-	},
-
-	clone: function( dataAndEvents, deepDataAndEvents ) {
-		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
-		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
-		return this.map( function () {
-			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
-		});
-	},
-
-	html: function( value ) {
-		return jQuery.access( this, function( value ) {
-			var elem = this[0] || {},
-				i = 0,
-				l = this.length;
-
-			if ( value === undefined ) {
-				return elem.nodeType === 1 ?
-					elem.innerHTML.replace( rinlinejQuery, "" ) :
-					null;
-			}
-
-
-			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
-				( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
-				!wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
-
-				value = value.replace( rxhtmlTag, "<$1></$2>" );
-
-				try {
-					for (; i < l; i++ ) {
-						// Remove element nodes and prevent memory leaks
-						elem = this[i] || {};
-						if ( elem.nodeType === 1 ) {
-							jQuery.cleanData( elem.getElementsByTagName( "*" ) );
-							elem.innerHTML = value;
-						}
-					}
-
-					elem = 0;
-
-				// If using innerHTML throws an exception, use the fallback method
-				} catch(e) {}
-			}
-
-			if ( elem ) {
-				this.empty().append( value );
-			}
-		}, null, value, arguments.length );
-	},
-
-	replaceWith: function( value ) {
-		if ( this[0] && this[0].parentNode ) {
-			// Make sure that the elements are removed from the DOM before they are inserted
-			// this can help fix replacing a parent with child elements
-			if ( jQuery.isFunction( value ) ) {
-				return this.each(function(i) {
-					var self = jQuery(this), old = self.html();
-					self.replaceWith( value.call( this, i, old ) );
-				});
-			}
-
-			if ( typeof value !== "string" ) {
-				value = jQuery( value ).detach();
-			}
-
-			return this.each(function() {
-				var next = this.nextSibling,
-					parent = this.parentNode;
-
-				jQuery( this ).remove();
-
-				if ( next ) {
-					jQuery(next).before( value );
-				} else {
-					jQuery(parent).append( value );
-				}
-			});
-		} else {
-			return this.length ?
-				this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
-				this;
-		}
-	},
-
-	detach: function( selector ) {
-		return this.remove( selector, true );
-	},
-
-	domManip: function( args, table, callback ) {
-		var results, first, fragment, parent,
-			value = args[0],
-			scripts = [];
-
-		// We can't cloneNode fragments that contain checked, in WebKit
-		if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
-			return this.each(function() {
-				jQuery(this).domManip( args, table, callback, true );
-			});
-		}
-
-		if ( jQuery.isFunction(value) ) {
-			return this.each(function(i) {
-				var self = jQuery(this);
-				args[0] = value.call(this, i, table ? self.html() : undefined);
-				self.domManip( args, table, callback );
-			});
-		}
-
-		if ( this[0] ) {
-			parent = value && value.parentNode;
-
-			// If we're in a fragment, just use that instead of building a new one
-			if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
-				results = { fragment: parent };
-
-			} else {
-				results = jQuery.buildFragment( args, this, scripts );
-			}
-
-			fragment = results.fragment;
-
-			if ( fragment.childNodes.length === 1 ) {
-				first = fragment = fragment.firstChild;
-			} else {
-				first = fragment.firstChild;
-			}
-
-			if ( first ) {
-				table = table && jQuery.nodeName( first, "tr" );
-
-				for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
-					callback.call(
-						table ?
-							root(this[i], first) :
-							this[i],
-						// Make sure that we do not leak memory by inadvertently discarding
-						// the original fragment (which might have attached data) instead of
-						// using it; in addition, use the original fragment object for the last
-						// item instead of first because it can end up being emptied incorrectly
-						// in certain situations (Bug #8070).
-						// Fragments from the fragment cache must always be cloned and never used
-						// in place.
-						results.cacheable || ( l > 1 && i < lastIndex ) ?
-							jQuery.clone( fragment, true, true ) :
-							fragment
-					);
-				}
-			}
-
-			if ( scripts.length ) {
-				jQuery.each( scripts, function( i, elem ) {
-					if ( elem.src ) {
-						jQuery.ajax({
-							type: "GET",
-							global: false,
-							url: elem.src,
-							async: false,
-							dataType: "script"
-						});
-					} else {
-						jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
-					}
-
-					if ( elem.parentNode ) {
-						elem.parentNode.removeChild( elem );
-					}
-				});
-			}
-		}
-
-		return this;
-	}
-});
-
-function root( elem, cur ) {
-	return jQuery.nodeName(elem, "table") ?
-		(elem.getElementsByTagName("tbody")[0] ||
-		elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
-		elem;
-}
-
-function cloneCopyEvent( src, dest ) {
-
-	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
-		return;
-	}
-
-	var type, i, l,
-		oldData = jQuery._data( src ),
-		curData = jQuery._data( dest, oldData ),
-		events = oldData.events;
-
-	if ( events ) {
-		delete curData.handle;
-		curData.events = {};
-
-		for ( type in events ) {
-			for ( i = 0, l = events[ type ].length; i < l; i++ ) {
-				jQuery.event.add( dest, type, events[ type ][ i ] );
-			}
-		}
-	}
-
-	// make the cloned public data object a copy from the original
-	if ( curData.data ) {
-		curData.data = jQuery.extend( {}, curData.data );
-	}
-}
-
-function cloneFixAttributes( src, dest ) {
-	var nodeName;
-
-	// We do not need to do anything for non-Elements
-	if ( dest.nodeType !== 1 ) {
-		return;
-	}
-
-	// clearAttributes removes the attributes, which we don't want,
-	// but also removes the attachEvent events, which we *do* want
-	if ( dest.clearAttributes ) {
-		dest.clearAttributes();
-	}
-
-	// mergeAttributes, in contrast, only merges back on the
-	// original attributes, not the events
-	if ( dest.mergeAttributes ) {
-		dest.mergeAttributes( src );
-	}
-
-	nodeName = dest.nodeName.toLowerCase();
-
-	// IE6-8 fail to clone children inside object elements that use
-	// the proprietary classid attribute value (rather than the type
-	// attribute) to identify the type of content to display
-	if ( nodeName === "object" ) {
-		dest.outerHTML = src.outerHTML;
-
-	} else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
-		// IE6-8 fails to persist the checked state of a cloned checkbox
-		// or radio button. Worse, IE6-7 fail to give the cloned element
-		// a checked appearance if the defaultChecked value isn't also set
-		if ( src.checked ) {
-			dest.defaultChecked = dest.checked = src.checked;
-		}
-
-		// IE6-7 get confused and end up setting the value of a cloned
-		// checkbox/radio button to an empty string instead of "on"
-		if ( dest.value !== src.value ) {
-			dest.value = src.value;
-		}
-
-	// IE6-8 fails to return the selected option to the default selected
-	// state when cloning options
-	} else if ( nodeName === "option" ) {
-		dest.selected = src.defaultSelected;
-
-	// IE6-8 fails to set the defaultValue to the correct value when
-	// cloning other types of input fields
-	} else if ( nodeName === "input" || nodeName === "textarea" ) {
-		dest.defaultValue = src.defaultValue;
-
-	// IE blanks contents when cloning scripts
-	} else if ( nodeName === "script" && dest.text !== src.text ) {
-		dest.text = src.text;
-	}
-
-	// Event data gets referenced instead of copied if the expando
-	// gets copied too
-	dest.removeAttribute( jQuery.expando );
-
-	// Clear flags for bubbling special change/submit events, they must
-	// be reattached when the newly cloned events are first activated
-	dest.removeAttribute( "_submit_attached" );
-	dest.removeAttribute( "_change_attached" );
-}
-
-jQuery.buildFragment = function( args, nodes, scripts ) {
-	var fragment, cacheable, cacheresults, doc,
-	first = args[ 0 ];
-
-	// nodes may contain either an explicit document object,
-	// a jQuery collection or context object.
-	// If nodes[0] contains a valid object to assign to doc
-	if ( nodes && nodes[0] ) {
-		doc = nodes[0].ownerDocument || nodes[0];
-	}
-
-	// Ensure that an attr object doesn't incorrectly stand in as a document object
-	// Chrome and Firefox seem to allow this to occur and will throw exception
-	// Fixes #8950
-	if ( !doc.createDocumentFragment ) {
-		doc = document;
-	}
-
-	// Only cache "small" (1/2 KB) HTML strings that are associated with the main document
-	// Cloning options loses the selected state, so don't cache them
-	// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
-	// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
-	// Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501
-	if ( args.length === 1 && typeof first === "string" && first.length < 512 && doc === document &&
-		first.charAt(0) === "<" && !rnocache.test( first ) &&
-		(jQuery.support.checkClone || !rchecked.test( first )) &&
-		(jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {
-
-		cacheable = true;
-
-		cacheresults = jQuery.fragments[ first ];
-		if ( cacheresults && cacheresults !== 1 ) {
-			fragment = cacheresults;
-		}
-	}
-
-	if ( !fragment ) {
-		fragment = doc.createDocumentFragment();
-		jQuery.clean( args, doc, fragment, scripts );
-	}
-
-	if ( cacheable ) {
-		jQuery.fragments[ first ] = cacheresults ? fragment : 1;
-	}
-
-	return { fragment: fragment, cacheable: cacheable };
-};
-
-jQuery.fragments = {};
-
-jQuery.each({
-	appendTo: "append",
-	prependTo: "prepend",
-	insertBefore: "before",
-	insertAfter: "after",
-	replaceAll: "replaceWith"
-}, function( name, original ) {
-	jQuery.fn[ name ] = function( selector ) {
-		var ret = [],
-			insert = jQuery( selector ),
-			parent = this.length === 1 && this[0].parentNode;
-
-		if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
-			insert[ original ]( this[0] );
-			return this;
-
-		} else {
-			for ( var i = 0, l = insert.length; i < l; i++ ) {
-				var elems = ( i > 0 ? this.clone(true) : this ).get();
-				jQuery( insert[i] )[ original ]( elems );
-				ret = ret.concat( elems );
-			}
-
-			return this.pushStack( ret, name, insert.selector );
-		}
-	};
-});
-
-function getAll( elem ) {
-	if ( typeof elem.getElementsByTagName !== "undefined" ) {
-		return elem.getElementsByTagName( "*" );
-
-	} else if ( typeof elem.querySelectorAll !== "undefined" ) {
-		return elem.querySelectorAll( "*" );
-
-	} else {
-		return [];
-	}
-}
-
-// Used in clean, fixes the defaultChecked property
-function fixDefaultChecked( elem ) {
-	if ( elem.type === "checkbox" || elem.type === "radio" ) {
-		elem.defaultChecked = elem.checked;
-	}
-}
-// Finds all inputs and passes them to fixDefaultChecked
-function findInputs( elem ) {
-	var nodeName = ( elem.nodeName || "" ).toLowerCase();
-	if ( nodeName === "input" ) {
-		fixDefaultChecked( elem );
-	// Skip scripts, get other children
-	} else if ( nodeName !== "script" && typeof elem.getElementsByTagName !== "undefined" ) {
-		jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
-	}
-}
-
-// Derived From: http://www.iecss.com/shimprove/javascript/shimprove.1-0-1.js
-function shimCloneNode( elem ) {
-	var div = document.createElement( "div" );
-	safeFragment.appendChild( div );
-
-	div.innerHTML = elem.outerHTML;
-	return div.firstChild;
-}
-
-jQuery.extend({
-	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
-		var srcElements,
-			destElements,
-			i,
-			// IE<=8 does not properly clone detached, unknown element nodes
-			clone = jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ?
-				elem.cloneNode( true ) :
-				shimCloneNode( elem );
-
-		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
-				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
-			// IE copies events bound via attachEvent when using cloneNode.
-			// Calling detachEvent on the clone will also remove the events
-			// from the original. In order to get around this, we use some
-			// proprietary methods to clear the events. Thanks to MooTools
-			// guys for this hotness.
-
-			cloneFixAttributes( elem, clone );
-
-			// Using Sizzle here is crazy slow, so we use getElementsByTagName instead
-			srcElements = getAll( elem );
-			destElements = getAll( clone );
-
-			// Weird iteration because IE will replace the length property
-			// with an element if you are cloning the body and one of the
-			// elements on the page has a name or id of "length"
-			for ( i = 0; srcElements[i]; ++i ) {
-				// Ensure that the destination node is not null; Fixes #9587
-				if ( destElements[i] ) {
-					cloneFixAttributes( srcElements[i], destElements[i] );
-				}
-			}
-		}
-
-		// Copy the events from the original to the clone
-		if ( dataAndEvents ) {
-			cloneCopyEvent( elem, clone );
-
-			if ( deepDataAndEvents ) {
-				srcElements = getAll( elem );
-				destElements = getAll( clone );
-
-				for ( i = 0; srcElements[i]; ++i ) {
-					cloneCopyEvent( srcElements[i], destElements[i] );
-				}
-			}
-		}
-
-		srcElements = destElements = null;
-
-		// Return the cloned set
-		return clone;
-	},
-
-	clean: function( elems, context, fragment, scripts ) {
-		var checkScriptType, script, j,
-				ret = [];
-
-		context = context || document;
-
-		// !context.createElement fails in IE with an error but returns typeof 'object'
-		if ( typeof context.createElement === "undefined" ) {
-			context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
-		}
-
-		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
-			if ( typeof elem === "number" ) {
-				elem += "";
-			}
-
-			if ( !elem ) {
-				continue;
-			}
-
-			// Convert html string into DOM nodes
-			if ( typeof elem === "string" ) {
-				if ( !rhtml.test( elem ) ) {
-					elem = context.createTextNode( elem );
-				} else {
-					// Fix "XHTML"-style tags in all browsers
-					elem = elem.replace(rxhtmlTag, "<$1></$2>");
-
-					// Trim whitespace, otherwise indexOf won't work as expected
-					var tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(),
-						wrap = wrapMap[ tag ] || wrapMap._default,
-						depth = wrap[0],
-						div = context.createElement("div"),
-						safeChildNodes = safeFragment.childNodes,
-						remove;
-
-					// Append wrapper element to unknown element safe doc fragment
-					if ( context === document ) {
-						// Use the fragment we've already created for this document
-						safeFragment.appendChild( div );
-					} else {
-						// Use a fragment created with the owner document
-						createSafeFragment( context ).appendChild( div );
-					}
-
-					// Go to html and back, then peel off extra wrappers
-					div.innerHTML = wrap[1] + elem + wrap[2];
-
-					// Move to the right depth
-					while ( depth-- ) {
-						div = div.lastChild;
-					}
-
-					// Remove IE's autoinserted <tbody> from table fragments
-					if ( !jQuery.support.tbody ) {
-
-						// String was a <table>, *may* have spurious <tbody>
-						var hasBody = rtbody.test(elem),
-							tbody = tag === "table" && !hasBody ?
-								div.firstChild && div.firstChild.childNodes :
-
-								// String was a bare <thead> or <tfoot>
-								wrap[1] === "<table>" && !hasBody ?
-									div.childNodes :
-									[];
-
-						for ( j = tbody.length - 1; j >= 0 ; --j ) {
-							if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
-								tbody[ j ].parentNode.removeChild( tbody[ j ] );
-							}
-						}
-					}
-
-					// IE completely kills leading whitespace when innerHTML is used
-					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
-						div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
-					}
-
-					elem = div.childNodes;
-
-					// Clear elements from DocumentFragment (safeFragment or otherwise)
-					// to avoid hoarding elements. Fixes #11356
-					if ( div ) {
-						div.parentNode.removeChild( div );
-
-						// Guard against -1 index exceptions in FF3.6
-						if ( safeChildNodes.length > 0 ) {
-							remove = safeChildNodes[ safeChildNodes.length - 1 ];
-
-							if ( remove && remove.parentNode ) {
-								remove.parentNode.removeChild( remove );
-							}
-						}
-					}
-				}
-			}
-
-			// Resets defaultChecked for any radios and checkboxes
-			// about to be appended to the DOM in IE 6/7 (#8060)
-			var len;
-			if ( !jQuery.support.appendChecked ) {
-				if ( elem[0] && typeof (len = elem.length) === "number" ) {
-					for ( j = 0; j < len; j++ ) {
-						findInputs( elem[j] );
-					}
-				} else {
-					findInputs( elem );
-				}
-			}
-
-			if ( elem.nodeType ) {
-				ret.push( elem );
-			} else {
-				ret = jQuery.merge( ret, elem );
-			}
-		}
-
-		if ( fragment ) {
-			checkScriptType = function( elem ) {
-				return !elem.type || rscriptType.test( elem.type );
-			};
-			for ( i = 0; ret[i]; i++ ) {
-				script = ret[i];
-				if ( scripts && jQuery.nodeName( script, "script" ) && (!script.type || rscriptType.test( script.type )) ) {
-					scripts.push( script.parentNode ? script.parentNode.removeChild( script ) : script );
-
-				} else {
-					if ( script.nodeType === 1 ) {
-						var jsTags = jQuery.grep( script.getElementsByTagName( "script" ), checkScriptType );
-
-						ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
-					}
-					fragment.appendChild( script );
-				}
-			}
-		}
-
-		return ret;
-	},
-
-	cleanData: function( elems ) {
-		var data, id,
-			cache = jQuery.cache,
-			special = jQuery.event.special,
-			deleteExpando = jQuery.support.deleteExpando;
-
-		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
-			if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
-				continue;
-			}
-
-			id = elem[ jQuery.expando ];
-
-			if ( id ) {
-				data = cache[ id ];
-
-				if ( data && data.events ) {
-					for ( var type in data.events ) {
-						if ( special[ type ] ) {
-							jQuery.event.remove( elem, type );
-
-						// This is a shortcut to avoid jQuery.event.remove's overhead
-						} else {
-							jQuery.removeEvent( elem, type, data.handle );
-						}
-					}
-
-					// Null the DOM reference to avoid IE6/7/8 leak (#7054)
-					if ( data.handle ) {
-						data.handle.elem = null;
-					}
-				}
-
-				if ( deleteExpando ) {
-					delete elem[ jQuery.expando ];
-
-				} else if ( elem.removeAttribute ) {
-					elem.removeAttribute( jQuery.expando );
-				}
-
-				delete cache[ id ];
-			}
-		}
-	}
-});
-
-
-
-
-var ralpha = /alpha\([^)]*\)/i,
-	ropacity = /opacity=([^)]*)/,
-	// fixed for IE9, see #8346
-	rupper = /([A-Z]|^ms)/g,
-	rnum = /^[\-+]?(?:\d*\.)?\d+$/i,
-	rnumnonpx = /^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,
-	rrelNum = /^([\-+])=([\-+.\de]+)/,
-	rmargin = /^margin/,
-
-	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
-
-	// order is important!
-	cssExpand = [ "Top", "Right", "Bottom", "Left" ],
-
-	curCSS,
-
-	getComputedStyle,
-	currentStyle;
-
-jQuery.fn.css = function( name, value ) {
-	return jQuery.access( this, function( elem, name, value ) {
-		return value !== undefined ?
-			jQuery.style( elem, name, value ) :
-			jQuery.css( elem, name );
-	}, name, value, arguments.length > 1 );
-};
-
-jQuery.extend({
-	// Add in style property hooks for overriding the default
-	// behavior of getting and setting a style property
-	cssHooks: {
-		opacity: {
-			get: function( elem, computed ) {
-				if ( computed ) {
-					// We should always get a number back from opacity
-					var ret = curCSS( elem, "opacity" );
-					return ret === "" ? "1" : ret;
-
-				} else {
-					return elem.style.opacity;
-				}
-			}
-		}
-	},
-
-	// Exclude the following css properties to add px
-	cssNumber: {
-		"fillOpacity": true,
-		"fontWeight": true,
-		"lineHeight": true,
-		"opacity": true,
-		"orphans": true,
-		"widows": true,
-		"zIndex": true,
-		"zoom": true
-	},
-
-	// Add in properties whose names you wish to fix before
-	// setting or getting the value
-	cssProps: {
-		// normalize float css property
-		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
-	},
-
-	// Get and set the style property on a DOM Node
-	style: function( elem, name, value, extra ) {
-		// Don't set styles on text and comment nodes
-		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
-			return;
-		}
-
-		// Make sure that we're working with the right name
-		var ret, type, origName = jQuery.camelCase( name ),
-			style = elem.style, hooks = jQuery.cssHooks[ origName ];
-
-		name = jQuery.cssProps[ origName ] || origName;
-
-		// Check if we're setting a value
-		if ( value !== undefined ) {
-			type = typeof value;
-
-			// convert relative number strings (+= or -=) to relative numbers. #7345
-			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
-				value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );
-				// Fixes bug #9237
-				type = "number";
-			}
-
-			// Make sure that NaN and null values aren't set. See: #7116
-			if ( value == null || type === "number" && isNaN( value ) ) {
-				return;
-			}
-
-			// If a number was passed in, add 'px' to the (except for certain CSS properties)
-			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
-				value += "px";
-			}
-
-			// If a hook was provided, use that value, otherwise just set the specified value
-			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
-				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
-				// Fixes bug #5509
-				try {
-					style[ name ] = value;
-				} catch(e) {}
-			}
-
-		} else {
-			// If a hook was provided get the non-computed value from there
-			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
-				return ret;
-			}
-
-			// Otherwise just get the value from the style object
-			return style[ name ];
-		}
-	},
-
-	css: function( elem, name, extra ) {
-		var ret, hooks;
-
-		// Make sure that we're working with the right name
-		name = jQuery.camelCase( name );
-		hooks = jQuery.cssHooks[ name ];
-		name = jQuery.cssProps[ name ] || name;
-
-		// cssFloat needs a special treatment
-		if ( name === "cssFloat" ) {
-			name = "float";
-		}
-
-		// If a hook was provided get the computed value from there
-		if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
-			return ret;
-
-		// Otherwise, if a way to get the computed value exists, use that
-		} else if ( curCSS ) {
-			return curCSS( elem, name );
-		}
-	},
-
-	// A method for quickly swapping in/out CSS properties to get correct calculations
-	swap: function( elem, options, callback ) {
-		var old = {},
-			ret, name;
-
-		// Remember the old values, and insert the new ones
-		for ( name in options ) {
-			old[ name ] = elem.style[ name ];
-			elem.style[ name ] = options[ name ];
-		}
-
-		ret = callback.call( elem );
-
-		// Revert the old values
-		for ( name in options ) {
-			elem.style[ name ] = old[ name ];
-		}
-
-		return ret;
-	}
-});
-
-// DEPRECATED in 1.3, Use jQuery.css() instead
-jQuery.curCSS = jQuery.css;
-
-if ( document.defaultView && document.defaultView.getComputedStyle ) {
-	getComputedStyle = function( elem, name ) {
-		var ret, defaultView, computedStyle, width,
-			style = elem.style;
-
-		name = name.replace( rupper, "-$1" ).toLowerCase();
-
-		if ( (defaultView = elem.ownerDocument.defaultView) &&
-				(computedStyle = defaultView.getComputedStyle( elem, null )) ) {
-
-			ret = computedStyle.getPropertyValue( name );
-			if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
-				ret = jQuery.style( elem, name );
-			}
-		}
-
-		// A tribute to the "awesome hack by Dean Edwards"
-		// WebKit uses "computed value (percentage if specified)" instead of "used value" for margins
-		// which is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
-		if ( !jQuery.support.pixelMargin && computedStyle && rmargin.test( name ) && rnumnonpx.test( ret ) ) {
-			width = style.width;
-			style.width = ret;
-			ret = computedStyle.width;
-			style.width = width;
-		}
-
-		return ret;
-	};
-}
-
-if ( document.documentElement.currentStyle ) {
-	currentStyle = function( elem, name ) {
-		var left, rsLeft, uncomputed,
-			ret = elem.currentStyle && elem.currentStyle[ name ],
-			style = elem.style;
-
-		// Avoid setting ret to empty string here
-		// so we don't default to auto
-		if ( ret == null && style && (uncomputed = style[ name ]) ) {
-			ret = uncomputed;
-		}
-
-		// From the awesome hack by Dean Edwards
-		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
-		// If we're not dealing with a regular pixel number
-		// but a number that has a weird ending, we need to convert it to pixels
-		if ( rnumnonpx.test( ret ) ) {
-
-			// Remember the original values
-			left = style.left;
-			rsLeft = elem.runtimeStyle && elem.runtimeStyle.left;
-
-			// Put in the new values to get a computed value out
-			if ( rsLeft ) {
-				elem.runtimeStyle.left = elem.currentStyle.left;
-			}
-			style.left = name === "fontSize" ? "1em" : ret;
-			ret = style.pixelLeft + "px";
-
-			// Revert the changed values
-			style.left = left;
-			if ( rsLeft ) {
-				elem.runtimeStyle.left = rsLeft;
-			}
-		}
-
-		return ret === "" ? "auto" : ret;
-	};
-}
-
-curCSS = getComputedStyle || currentStyle;
-
-function getWidthOrHeight( elem, name, extra ) {
-
-	// Start with offset property
-	var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
-		i = name === "width" ? 1 : 0,
-		len = 4;
-
-	if ( val > 0 ) {
-		if ( extra !== "border" ) {
-			for ( ; i < len; i += 2 ) {
-				if ( !extra ) {
-					val -= parseFloat( jQuery.css( elem, "padding" + cssExpand[ i ] ) ) || 0;
-				}
-				if ( extra === "margin" ) {
-					val += parseFloat( jQuery.css( elem, extra + cssExpand[ i ] ) ) || 0;
-				} else {
-					val -= parseFloat( jQuery.css( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
-				}
-			}
-		}
-
-		return val + "px";
-	}
-
-	// Fall back to computed then uncomputed css if necessary
-	val = curCSS( elem, name );
-	if ( val < 0 || val == null ) {
-		val = elem.style[ name ];
-	}
-
-	// Computed unit is not pixels. Stop here and return.
-	if ( rnumnonpx.test(val) ) {
-		return val;
-	}
-
-	// Normalize "", auto, and prepare for extra
-	val = parseFloat( val ) || 0;
-
-	// Add padding, border, margin
-	if ( extra ) {
-		for ( ; i < len; i += 2 ) {
-			val += parseFloat( jQuery.css( elem, "padding" + cssExpand[ i ] ) ) || 0;
-			if ( extra !== "padding" ) {
-				val += parseFloat( jQuery.css( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
-			}
-			if ( extra === "margin" ) {
-				val += parseFloat( jQuery.css( elem, extra + cssExpand[ i ]) ) || 0;
-			}
-		}
-	}
-
-	return val + "px";
-}
-
-jQuery.each([ "height", "width" ], function( i, name ) {
-	jQuery.cssHooks[ name ] = {
-		get: function( elem, computed, extra ) {
-			if ( computed ) {
-				if ( elem.offsetWidth !== 0 ) {
-					return getWidthOrHeight( elem, name, extra );
-				} else {
-					return jQuery.swap( elem, cssShow, function() {
-						return getWidthOrHeight( elem, name, extra );
-					});
-				}
-			}
-		},
-
-		set: function( elem, value ) {
-			return rnum.test( value ) ?
-				value + "px" :
-				value;
-		}
-	};
-});
-
-if ( !jQuery.support.opacity ) {
-	jQuery.cssHooks.opacity = {
-		get: function( elem, computed ) {
-			// IE uses filters for opacity
-			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
-				( parseFloat( RegExp.$1 ) / 100 ) + "" :
-				computed ? "1" : "";
-		},
-
-		set: function( elem, value ) {
-			var style = elem.style,
-				currentStyle = elem.currentStyle,
-				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
-				filter = currentStyle && currentStyle.filter || style.filter || "";
-
-			// IE has trouble with opacity if it does not have layout
-			// Force it by setting the zoom level
-			style.zoom = 1;
-
-			// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
-			if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) {
-
-				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
-				// if "filter:" is present at all, clearType is disabled, we want to avoid this
-				// style.removeAttribute is IE Only, but so apparently is this code path...
-				style.removeAttribute( "filter" );
-
-				// if there there is no filter style applied in a css rule, we are done
-				if ( currentStyle && !currentStyle.filter ) {
-					return;
-				}
-			}
-
-			// otherwise, set new filter values
-			style.filter = ralpha.test( filter ) ?
-				filter.replace( ralpha, opacity ) :
-				filter + " " + opacity;
-		}
-	};
-}
-
-jQuery(function() {
-	// This hook cannot be added until DOM ready because the support test
-	// for it is not run until after DOM ready
-	if ( !jQuery.support.reliableMarginRight ) {
-		jQuery.cssHooks.marginRight = {
-			get: function( elem, computed ) {
-				// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-				// Work around by temporarily setting element display to inline-block
-				return jQuery.swap( elem, { "display": "inline-block" }, function() {
-					if ( computed ) {
-						return curCSS( elem, "margin-right" );
-					} else {
-						return elem.style.marginRight;
-					}
-				});
-			}
-		};
-	}
-});
-
-if ( jQuery.expr && jQuery.expr.filters ) {
-	jQuery.expr.filters.hidden = function( elem ) {
-		var width = elem.offsetWidth,
-			height = elem.offsetHeight;
-
-		return ( width === 0 && height === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
-	};
-
-	jQuery.expr.filters.visible = function( elem ) {
-		return !jQuery.expr.filters.hidden( elem );
-	};
-}
-
-// These hooks are used by animate to expand properties
-jQuery.each({
-	margin: "",
-	padding: "",
-	border: "Width"
-}, function( prefix, suffix ) {
-
-	jQuery.cssHooks[ prefix + suffix ] = {
-		expand: function( value ) {
-			var i,
-
-				// assumes a single number if not a string
-				parts = typeof value === "string" ? value.split(" ") : [ value ],
-				expanded = {};
-
-			for ( i = 0; i < 4; i++ ) {
-				expanded[ prefix + cssExpand[ i ] + suffix ] =
-					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
-			}
-
-			return expanded;
-		}
-	};
-});
-
-
-
-
-var r20 = /%20/g,
-	rbracket = /\[\]$/,
-	rCRLF = /\r?\n/g,
-	rhash = /#.*$/,
-	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
-	rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
-	// #7653, #8125, #8152: local protocol detection
-	rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
-	rnoContent = /^(?:GET|HEAD)$/,
-	rprotocol = /^\/\//,
-	rquery = /\?/,
-	rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
-	rselectTextarea = /^(?:select|textarea)/i,
-	rspacesAjax = /\s+/,
-	rts = /([?&])_=[^&]*/,
-	rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
-
-	// Keep a copy of the old load method
-	_load = jQuery.fn.load,
-
-	/* Prefilters
-	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
-	 * 2) These are called:
-	 *    - BEFORE asking for a transport
-	 *    - AFTER param serialization (s.data is a string if s.processData is true)
-	 * 3) key is the dataType
-	 * 4) the catchall symbol "*" can be used
-	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
-	 */
-	prefilters = {},
-
-	/* Transports bindings
-	 * 1) key is the dataType
-	 * 2) the catchall symbol "*" can be used
-	 * 3) selection will start with transport dataType and THEN go to "*" if needed
-	 */
-	transports = {},
-
-	// Document location
-	ajaxLocation,
-
-	// Document location segments
-	ajaxLocParts,
-
-	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
-	allTypes = ["*/"] + ["*"];
-
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-try {
-	ajaxLocation = location.href;
-} catch( e ) {
-	// Use the href attribute of an A element
-	// since IE will modify it given document.location
-	ajaxLocation = document.createElement( "a" );
-	ajaxLocation.href = "";
-	ajaxLocation = ajaxLocation.href;
-}
-
-// Segment location into parts
-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
-	// dataTypeExpression is optional and defaults to "*"
-	return function( dataTypeExpression, func ) {
-
-		if ( typeof dataTypeExpression !== "string" ) {
-			func = dataTypeExpression;
-			dataTypeExpression = "*";
-		}
-
-		if ( jQuery.isFunction( func ) ) {
-			var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
-				i = 0,
-				length = dataTypes.length,
-				dataType,
-				list,
-				placeBefore;
-
-			// For each dataType in the dataTypeExpression
-			for ( ; i < length; i++ ) {
-				dataType = dataTypes[ i ];
-				// We control if we're asked to add before
-				// any existing element
-				placeBefore = /^\+/.test( dataType );
-				if ( placeBefore ) {
-					dataType = dataType.substr( 1 ) || "*";
-				}
-				list = structure[ dataType ] = structure[ dataType ] || [];
-				// then we add to the structure accordingly
-				list[ placeBefore ? "unshift" : "push" ]( func );
-			}
-		}
-	};
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
-		dataType /* internal */, inspected /* internal */ ) {
-
-	dataType = dataType || options.dataTypes[ 0 ];
-	inspected = inspected || {};
-
-	inspected[ dataType ] = true;
-
-	var list = structure[ dataType ],
-		i = 0,
-		length = list ? list.length : 0,
-		executeOnly = ( structure === prefilters ),
-		selection;
-
-	for ( ; i < length && ( executeOnly || !selection ); i++ ) {
-		selection = list[ i ]( options, originalOptions, jqXHR );
-		// If we got redirected to another dataType
-		// we try there if executing only and not done already
-		if ( typeof selection === "string" ) {
-			if ( !executeOnly || inspected[ selection ] ) {
-				selection = undefined;
-			} else {
-				options.dataTypes.unshift( selection );
-				selection = inspectPrefiltersOrTransports(
-						structure, options, originalOptions, jqXHR, selection, inspected );
-			}
-		}
-	}
-	// If we're only executing or nothing was selected
-	// we try the catchall dataType if not done already
-	if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
-		selection = inspectPrefiltersOrTransports(
-				structure, options, originalOptions, jqXHR, "*", inspected );
-	}
-	// unnecessary when only executing (prefilters)
-	// but it'll be ignored by the caller in that case
-	return selection;
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
-	var key, deep,
-		flatOptions = jQuery.ajaxSettings.flatOptions || {};
-	for ( key in src ) {
-		if ( src[ key ] !== undefined ) {
-			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
-		}
-	}
-	if ( deep ) {
-		jQuery.extend( true, target, deep );
-	}
-}
-
-jQuery.fn.extend({
-	load: function( url, params, callback ) {
-		if ( typeof url !== "string" && _load ) {
-			return _load.apply( this, arguments );
-
-		// Don't do a request if no elements are being requested
-		} else if ( !this.length ) {
-			return this;
-		}
-
-		var off = url.indexOf( " " );
-		if ( off >= 0 ) {
-			var selector = url.slice( off, url.length );
-			url = url.slice( 0, off );
-		}
-
-		// Default to a GET request
-		var type = "GET";
-
-		// If the second parameter was provided
-		if ( params ) {
-			// If it's a function
-			if ( jQuery.isFunction( params ) ) {
-				// We assume that it's the callback
-				callback = params;
-				params = undefined;
-
-			// Otherwise, build a param string
-			} else if ( typeof params === "object" ) {
-				params = jQuery.param( params, jQuery.ajaxSettings.traditional );
-				type = "POST";
-			}
-		}
-
-		var self = this;
-
-		// Request the remote document
-		jQuery.ajax({
-			url: url,
-			type: type,
-			dataType: "html",
-			data: params,
-			// Complete callback (responseText is used internally)
-			complete: function( jqXHR, status, responseText ) {
-				// Store the response as specified by the jqXHR object
-				responseText = jqXHR.responseText;
-				// If successful, inject the HTML into all the matched elements
-				if ( jqXHR.isResolved() ) {
-					// #4825: Get the actual response in case
-					// a dataFilter is present in ajaxSettings
-					jqXHR.done(function( r ) {
-						responseText = r;
-					});
-					// See if a selector was specified
-					self.html( selector ?
-						// Create a dummy div to hold the results
-						jQuery("<div>")
-							// inject the contents of the document in, removing the scripts
-							// to avoid any 'Permission Denied' errors in IE
-							.append(responseText.replace(rscript, ""))
-
-							// Locate the specified elements
-							.find(selector) :
-
-						// If not, just inject the full result
-						responseText );
-				}
-
-				if ( callback ) {
-					self.each( callback, [ responseText, status, jqXHR ] );
-				}
-			}
-		});
-
-		return this;
-	},
-
-	serialize: function() {
-		return jQuery.param( this.serializeArray() );
-	},
-
-	serializeArray: function() {
-		return this.map(function(){
-			return this.elements ? jQuery.makeArray( this.elements ) : this;
-		})
-		.filter(function(){
-			return this.name && !this.disabled &&
-				( this.checked || rselectTextarea.test( this.nodeName ) ||
-					rinput.test( this.type ) );
-		})
-		.map(function( i, elem ){
-			var val = jQuery( this ).val();
-
-			return val == null ?
-				null :
-				jQuery.isArray( val ) ?
-					jQuery.map( val, function( val, i ){
-						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-					}) :
-					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-		}).get();
-	}
-});
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
-	jQuery.fn[ o ] = function( f ){
-		return this.on( o, f );
-	};
-});
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
-	jQuery[ method ] = function( url, data, callback, type ) {
-		// shift arguments if data argument was omitted
-		if ( jQuery.isFunction( data ) ) {
-			type = type || callback;
-			callback = data;
-			data = undefined;
-		}
-
-		return jQuery.ajax({
-			type: method,
-			url: url,
-			data: data,
-			success: callback,
-			dataType: type
-		});
-	};
-});
-
-jQuery.extend({
-
-	getScript: function( url, callback ) {
-		return jQuery.get( url, undefined, callback, "script" );
-	},
-
-	getJSON: function( url, data, callback ) {
-		return jQuery.get( url, data, callback, "json" );
-	},
-
-	// Creates a full fledged settings object into target
-	// with both ajaxSettings and settings fields.
-	// If target is omitted, writes into ajaxSettings.
-	ajaxSetup: function( target, settings ) {
-		if ( settings ) {
-			// Building a settings object
-			ajaxExtend( target, jQuery.ajaxSettings );
-		} else {
-			// Extending ajaxSettings
-			settings = target;
-			target = jQuery.ajaxSettings;
-		}
-		ajaxExtend( target, settings );
-		return target;
-	},
-
-	ajaxSettings: {
-		url: ajaxLocation,
-		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
-		global: true,
-		type: "GET",
-		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
-		processData: true,
-		async: true,
-		/*
-		timeout: 0,
-		data: null,
-		dataType: null,
-		username: null,
-		password: null,
-		cache: null,
-		traditional: false,
-		headers: {},
-		*/
-
-		accepts: {
-			xml: "application/xml, text/xml",
-			html: "text/html",
-			text: "text/plain",
-			json: "application/json, text/javascript",
-			"*": allTypes
-		},
-
-		contents: {
-			xml: /xml/,
-			html: /html/,
-			json: /json/
-		},
-
-		responseFields: {
-			xml: "responseXML",
-			text: "responseText"
-		},
-
-		// List of data converters
-		// 1) key format is "source_type destination_type" (a single space in-between)
-		// 2) the catchall symbol "*" can be used for source_type
-		converters: {
-
-			// Convert anything to text
-			"* text": window.String,
-
-			// Text to html (true = no transformation)
-			"text html": true,
-
-			// Evaluate text as a json expression
-			"text json": jQuery.parseJSON,
-
-			// Parse text as xml
-			"text xml": jQuery.parseXML
-		},
-
-		// For options that shouldn't be deep extended:
-		// you can add your own custom options here if
-		// and when you create one that shouldn't be
-		// deep extended (see ajaxExtend)
-		flatOptions: {
-			context: true,
-			url: true
-		}
-	},
-
-	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
-	ajaxTransport: addToPrefiltersOrTransports( transports ),
-
-	// Main method
-	ajax: function( url, options ) {
-
-		// If url is an object, simulate pre-1.5 signature
-		if ( typeof url === "object" ) {
-			options = url;
-			url = undefined;
-		}
-
-		// Force options to be an object
-		options = options || {};
-
-		var // Create the final options object
-			s = jQuery.ajaxSetup( {}, options ),
-			// Callbacks context
-			callbackContext = s.context || s,
-			// Context for global events
-			// It's the callbackContext if one was provided in the options
-			// and if it's a DOM node or a jQuery collection
-			globalEventContext = callbackContext !== s &&
-				( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
-						jQuery( callbackContext ) : jQuery.event,
-			// Deferreds
-			deferred = jQuery.Deferred(),
-			completeDeferred = jQuery.Callbacks( "once memory" ),
-			// Status-dependent callbacks
-			statusCode = s.statusCode || {},
-			// ifModified key
-			ifModifiedKey,
-			// Headers (they are sent all at once)
-			requestHeaders = {},
-			requestHeadersNames = {},
-			// Response headers
-			responseHeadersString,
-			responseHeaders,
-			// transport
-			transport,
-			// timeout handle
-			timeoutTimer,
-			// Cross-domain detection vars
-			parts,
-			// The jqXHR state
-			state = 0,
-			// To know if global events are to be dispatched
-			fireGlobals,
-			// Loop variable
-			i,
-			// Fake xhr
-			jqXHR = {
-
-				readyState: 0,
-
-				// Caches the header
-				setRequestHeader: function( name, value ) {
-					if ( !state ) {
-						var lname = name.toLowerCase();
-						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
-						requestHeaders[ name ] = value;
-					}
-					return this;
-				},
-
-				// Raw string
-				getAllResponseHeaders: function() {
-					return state === 2 ? responseHeadersString : null;
-				},
-
-				// Builds headers hashtable if needed
-				getResponseHeader: function( key ) {
-					var match;
-					if ( state === 2 ) {
-						if ( !responseHeaders ) {
-							responseHeaders = {};
-							while( ( match = rheaders.exec( responseHeadersString ) ) ) {
-								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
-							}
-						}
-						match = responseHeaders[ key.toLowerCase() ];
-					}
-					return match === undefined ? null : match;
-				},
-
-				// Overrides response content-type header
-				overrideMimeType: function( type ) {
-					if ( !state ) {
-						s.mimeType = type;
-					}
-					return this;
-				},
-
-				// Cancel the request
-				abort: function( statusText ) {
-					statusText = statusText || "abort";
-					if ( transport ) {
-						transport.abort( statusText );
-					}
-					done( 0, statusText );
-					return this;
-				}
-			};
-
-		// Callback for when everything is done
-		// It is defined here because jslint complains if it is declared
-		// at the end of the function (which would be more logical and readable)
-		function done( status, nativeStatusText, responses, headers ) {
-
-			// Called once
-			if ( state === 2 ) {
-				return;
-			}
-
-			// State is "done" now
-			state = 2;
-
-			// Clear timeout if it exists
-			if ( timeoutTimer ) {
-				clearTimeout( timeoutTimer );
-			}
-
-			// Dereference transport for early garbage collection
-			// (no matter how long the jqXHR object will be used)
-			transport = undefined;
-
-			// Cache response headers
-			responseHeadersString = headers || "";
-
-			// Set readyState
-			jqXHR.readyState = status > 0 ? 4 : 0;
-
-			var isSuccess,
-				success,
-				error,
-				statusText = nativeStatusText,
-				response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
-				lastModified,
-				etag;
-
-			// If successful, handle type chaining
-			if ( status >= 200 && status < 300 || status === 304 ) {
-
-				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-				if ( s.ifModified ) {
-
-					if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
-						jQuery.lastModified[ ifModifiedKey ] = lastModified;
-					}
-					if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
-						jQuery.etag[ ifModifiedKey ] = etag;
-					}
-				}
-
-				// If not modified
-				if ( status === 304 ) {
-
-					statusText = "notmodified";
-					isSuccess = true;
-
-				// If we have data
-				} else {
-
-					try {
-						success = ajaxConvert( s, response );
-						statusText = "success";
-						isSuccess = true;
-					} catch(e) {
-						// We have a parsererror
-						statusText = "parsererror";
-						error = e;
-					}
-				}
-			} else {
-				// We extract error from statusText
-				// then normalize statusText and status for non-aborts
-				error = statusText;
-				if ( !statusText || status ) {
-					statusText = "error";
-					if ( status < 0 ) {
-						status = 0;
-					}
-				}
-			}
-
-			// Set data for the fake xhr object
-			jqXHR.status = status;
-			jqXHR.statusText = "" + ( nativeStatusText || statusText );
-
-			// Success/Error
-			if ( isSuccess ) {
-				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
-			} else {
-				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
-			}
-
-			// Status-dependent callbacks
-			jqXHR.statusCode( statusCode );
-			statusCode = undefined;
-
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
-						[ jqXHR, s, isSuccess ? success : error ] );
-			}
-
-			// Complete
-			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
-
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
-				// Handle the global AJAX counter
-				if ( !( --jQuery.active ) ) {
-					jQuery.event.trigger( "ajaxStop" );
-				}
-			}
-		}
-
-		// Attach deferreds
-		deferred.promise( jqXHR );
-		jqXHR.success = jqXHR.done;
-		jqXHR.error = jqXHR.fail;
-		jqXHR.complete = completeDeferred.add;
-
-		// Status-dependent callbacks
-		jqXHR.statusCode = function( map ) {
-			if ( map ) {
-				var tmp;
-				if ( state < 2 ) {
-					for ( tmp in map ) {
-						statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
-					}
-				} else {
-					tmp = map[ jqXHR.status ];
-					jqXHR.then( tmp, tmp );
-				}
-			}
-			return this;
-		};
-
-		// Remove hash character (#7531: and string promotion)
-		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
-		// We also use the url parameter if available
-		s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
-		// Extract dataTypes list
-		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
-
-		// Determine if a cross-domain request is in order
-		if ( s.crossDomain == null ) {
-			parts = rurl.exec( s.url.toLowerCase() );
-			s.crossDomain = !!( parts &&
-				( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
-					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
-						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
-			);
-		}
-
-		// Convert data if not already a string
-		if ( s.data && s.processData && typeof s.data !== "string" ) {
-			s.data = jQuery.param( s.data, s.traditional );
-		}
-
-		// Apply prefilters
-		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
-		// If request was aborted inside a prefilter, stop there
-		if ( state === 2 ) {
-			return false;
-		}
-
-		// We can fire global events as of now if asked to
-		fireGlobals = s.global;
-
-		// Uppercase the type
-		s.type = s.type.toUpperCase();
-
-		// Determine if request has content
-		s.hasContent = !rnoContent.test( s.type );
-
-		// Watch for a new set of requests
-		if ( fireGlobals && jQuery.active++ === 0 ) {
-			jQuery.event.trigger( "ajaxStart" );
-		}
-
-		// More options handling for requests with no content
-		if ( !s.hasContent ) {
-
-			// If data is available, append data to url
-			if ( s.data ) {
-				s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
-				// #9682: remove data so that it's not used in an eventual retry
-				delete s.data;
-			}
-
-			// Get ifModifiedKey before adding the anti-cache parameter
-			ifModifiedKey = s.url;
-
-			// Add anti-cache in url if needed
-			if ( s.cache === false ) {
-
-				var ts = jQuery.now(),
-					// try replacing _= if it is there
-					ret = s.url.replace( rts, "$1_=" + ts );
-
-				// if nothing was replaced, add timestamp to the end
-				s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
-			}
-		}
-
-		// Set the correct header, if data is being sent
-		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
-			jqXHR.setRequestHeader( "Content-Type", s.contentType );
-		}
-
-		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-		if ( s.ifModified ) {
-			ifModifiedKey = ifModifiedKey || s.url;
-			if ( jQuery.lastModified[ ifModifiedKey ] ) {
-				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
-			}
-			if ( jQuery.etag[ ifModifiedKey ] ) {
-				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
-			}
-		}
-
-		// Set the Accepts header for the server, depending on the dataType
-		jqXHR.setRequestHeader(
-			"Accept",
-			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
-				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
-				s.accepts[ "*" ]
-		);
-
-		// Check for headers option
-		for ( i in s.headers ) {
-			jqXHR.setRequestHeader( i, s.headers[ i ] );
-		}
-
-		// Allow custom headers/mimetypes and early abort
-		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
-				// Abort if not done already
-				jqXHR.abort();
-				return false;
-
-		}
-
-		// Install callbacks on deferreds
-		for ( i in { success: 1, error: 1, complete: 1 } ) {
-			jqXHR[ i ]( s[ i ] );
-		}
-
-		// Get transport
-		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
-		// If no transport, we auto-abort
-		if ( !transport ) {
-			done( -1, "No Transport" );
-		} else {
-			jqXHR.readyState = 1;
-			// Send global event
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
-			}
-			// Timeout
-			if ( s.async && s.timeout > 0 ) {
-				timeoutTimer = setTimeout( function(){
-					jqXHR.abort( "timeout" );
-				}, s.timeout );
-			}
-
-			try {
-				state = 1;
-				transport.send( requestHeaders, done );
-			} catch (e) {
-				// Propagate exception as error if not done
-				if ( state < 2 ) {
-					done( -1, e );
-				// Simply rethrow otherwise
-				} else {
-					throw e;
-				}
-			}
-		}
-
-		return jqXHR;
-	},
-
-	// Serialize an array of form elements or a set of
-	// key/values into a query string
-	param: function( a, traditional ) {
-		var s = [],
-			add = function( key, value ) {
-				// If value is a function, invoke it and return its value
-				value = jQuery.isFunction( value ) ? value() : value;
-				s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
-			};
-
-		// Set traditional to true for jQuery <= 1.3.2 behavior.
-		if ( traditional === undefined ) {
-			traditional = jQuery.ajaxSettings.traditional;
-		}
-
-		// If an array was passed in, assume that it is an array of form elements.
-		if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
-			// Serialize the form elements
-			jQuery.each( a, function() {
-				add( this.name, this.value );
-			});
-
-		} else {
-			// If traditional, encode the "old" way (the way 1.3.2 or older
-			// did it), otherwise encode params recursively.
-			for ( var prefix in a ) {
-				buildParams( prefix, a[ prefix ], traditional, add );
-			}
-		}
-
-		// Return the resulting serialization
-		return s.join( "&" ).replace( r20, "+" );
-	}
-});
-
-function buildParams( prefix, obj, traditional, add ) {
-	if ( jQuery.isArray( obj ) ) {
-		// Serialize array item.
-		jQuery.each( obj, function( i, v ) {
-			if ( traditional || rbracket.test( prefix ) ) {
-				// Treat each array item as a scalar.
-				add( prefix, v );
-
-			} else {
-				// If array item is non-scalar (array or object), encode its
-				// numeric index to resolve deserialization ambiguity issues.
-				// Note that rack (as of 1.0.0) can't currently deserialize
-				// nested arrays properly, and attempting to do so may cause
-				// a server error. Possible fixes are to modify rack's
-				// deserialization algorithm or to provide an option or flag
-				// to force array serialization to be shallow.
-				buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
-			}
-		});
-
-	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
-		// Serialize object item.
-		for ( var name in obj ) {
-			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
-		}
-
-	} else {
-		// Serialize scalar item.
-		add( prefix, obj );
-	}
-}
-
-// This is still on the jQuery object... for now
-// Want to move this to jQuery.ajax some day
-jQuery.extend({
-
-	// Counter for holding the number of active queries
-	active: 0,
-
-	// Last-Modified header cache for next request
-	lastModified: {},
-	etag: {}
-
-});
-
-/* Handles responses to an ajax request:
- * - sets all responseXXX fields accordingly
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-
-	var contents = s.contents,
-		dataTypes = s.dataTypes,
-		responseFields = s.responseFields,
-		ct,
-		type,
-		finalDataType,
-		firstDataType;
-
-	// Fill responseXXX fields
-	for ( type in responseFields ) {
-		if ( type in responses ) {
-			jqXHR[ responseFields[type] ] = responses[ type ];
-		}
-	}
-
-	// Remove auto dataType and get content-type in the process
-	while( dataTypes[ 0 ] === "*" ) {
-		dataTypes.shift();
-		if ( ct === undefined ) {
-			ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
-		}
-	}
-
-	// Check if we're dealing with a known content-type
-	if ( ct ) {
-		for ( type in contents ) {
-			if ( contents[ type ] && contents[ type ].test( ct ) ) {
-				dataTypes.unshift( type );
-				break;
-			}
-		}
-	}
-
-	// Check to see if we have a response for the expected dataType
-	if ( dataTypes[ 0 ] in responses ) {
-		finalDataType = dataTypes[ 0 ];
-	} else {
-		// Try convertible dataTypes
-		for ( type in responses ) {
-			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
-				finalDataType = type;
-				break;
-			}
-			if ( !firstDataType ) {
-				firstDataType = type;
-			}
-		}
-		// Or just use first one
-		finalDataType = finalDataType || firstDataType;
-	}
-
-	// If we found a dataType
-	// We add the dataType to the list if needed
-	// and return the corresponding response
-	if ( finalDataType ) {
-		if ( finalDataType !== dataTypes[ 0 ] ) {
-			dataTypes.unshift( finalDataType );
-		}
-		return responses[ finalDataType ];
-	}
-}
-
-// Chain conversions given the request and the original response
-function ajaxConvert( s, response ) {
-
-	// Apply the dataFilter if provided
-	if ( s.dataFilter ) {
-		response = s.dataFilter( response, s.dataType );
-	}
-
-	var dataTypes = s.dataTypes,
-		converters = {},
-		i,
-		key,
-		length = dataTypes.length,
-		tmp,
-		// Current and previous dataTypes
-		current = dataTypes[ 0 ],
-		prev,
-		// Conversion expression
-		conversion,
-		// Conversion function
-		conv,
-		// Conversion functions (transitive conversion)
-		conv1,
-		conv2;
-
-	// For each dataType in the chain
-	for ( i = 1; i < length; i++ ) {
-
-		// Create converters map
-		// with lowercased keys
-		if ( i === 1 ) {
-			for ( key in s.converters ) {
-				if ( typeof key === "string" ) {
-					converters[ key.toLowerCase() ] = s.converters[ key ];
-				}
-			}
-		}
-
-		// Get the dataTypes
-		prev = current;
-		current = dataTypes[ i ];
-
-		// If current is auto dataType, update it to prev
-		if ( current === "*" ) {
-			current = prev;
-		// If no auto and dataTypes are actually different
-		} else if ( prev !== "*" && prev !== current ) {
-
-			// Get the converter
-			conversion = prev + " " + current;
-			conv = converters[ conversion ] || converters[ "* " + current ];
-
-			// If there is no direct converter, search transitively
-			if ( !conv ) {
-				conv2 = undefined;
-				for ( conv1 in converters ) {
-					tmp = conv1.split( " " );
-					if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
-						conv2 = converters[ tmp[1] + " " + current ];
-						if ( conv2 ) {
-							conv1 = converters[ conv1 ];
-							if ( conv1 === true ) {
-								conv = conv2;
-							} else if ( conv2 === true ) {
-								conv = conv1;
-							}
-							break;
-						}
-					}
-				}
-			}
-			// If we found no converter, dispatch an error
-			if ( !( conv || conv2 ) ) {
-				jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
-			}
-			// If found converter is not an equivalence
-			if ( conv !== true ) {
-				// Convert with 1 or 2 converters accordingly
-				response = conv ? conv( response ) : conv2( conv1(response) );
-			}
-		}
-	}
-	return response;
-}
-
-
-
-
-var jsc = jQuery.now(),
-	jsre = /(\=)\?(&|$)|\?\?/i;
-
-// Default jsonp settings
-jQuery.ajaxSetup({
-	jsonp: "callback",
-	jsonpCallback: function() {
-		return jQuery.expando + "_" + ( jsc++ );
-	}
-});
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
-	var inspectData = ( typeof s.data === "string" ) && /^application\/x\-www\-form\-urlencoded/.test( s.contentType );
-
-	if ( s.dataTypes[ 0 ] === "jsonp" ||
-		s.jsonp !== false && ( jsre.test( s.url ) ||
-				inspectData && jsre.test( s.data ) ) ) {
-
-		var responseContainer,
-			jsonpCallback = s.jsonpCallback =
-				jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
-			previous = window[ jsonpCallback ],
-			url = s.url,
-			data = s.data,
-			replace = "$1" + jsonpCallback + "$2";
-
-		if ( s.jsonp !== false ) {
-			url = url.replace( jsre, replace );
-			if ( s.url === url ) {
-				if ( inspectData ) {
-					data = data.replace( jsre, replace );
-				}
-				if ( s.data === data ) {
-					// Add callback manually
-					url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
-				}
-			}
-		}
-
-		s.url = url;
-		s.data = data;
-
-		// Install callback
-		window[ jsonpCallback ] = function( response ) {
-			responseContainer = [ response ];
-		};
-
-		// Clean-up function
-		jqXHR.always(function() {
-			// Set callback back to previous value
-			window[ jsonpCallback ] = previous;
-			// Call if it was a function and we have a response
-			if ( responseContainer && jQuery.isFunction( previous ) ) {
-				window[ jsonpCallback ]( responseContainer[ 0 ] );
-			}
-		});
-
-		// Use data converter to retrieve json after script execution
-		s.converters["script json"] = function() {
-			if ( !responseContainer ) {
-				jQuery.error( jsonpCallback + " was not called" );
-			}
-			return responseContainer[ 0 ];
-		};
-
-		// force json dataType
-		s.dataTypes[ 0 ] = "json";
-
-		// Delegate to script
-		return "script";
-	}
-});
-
-
-
-
-// Install script dataType
-jQuery.ajaxSetup({
-	accepts: {
-		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
-	},
-	contents: {
-		script: /javascript|ecmascript/
-	},
-	converters: {
-		"text script": function( text ) {
-			jQuery.globalEval( text );
-			return text;
-		}
-	}
-});
-
-// Handle cache's special case and global
-jQuery.ajaxPrefilter( "script", function( s ) {
-	if ( s.cache === undefined ) {
-		s.cache = false;
-	}
-	if ( s.crossDomain ) {
-		s.type = "GET";
-		s.global = false;
-	}
-});
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function(s) {
-
-	// This transport only deals with cross domain requests
-	if ( s.crossDomain ) {
-
-		var script,
-			head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
-
-		return {
-
-			send: function( _, callback ) {
-
-				script = document.createElement( "script" );
-
-				script.async = "async";
-
-				if ( s.scriptCharset ) {
-					script.charset = s.scriptCharset;
-				}
-
-				script.src = s.url;
-
-				// Attach handlers for all browsers
-				script.onload = script.onreadystatechange = function( _, isAbort ) {
-
-					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
-						// Handle memory leak in IE
-						script.onload = script.onreadystatechange = null;
-
-						// Remove the script
-						if ( head && script.parentNode ) {
-							head.removeChild( script );
-						}
-
-						// Dereference the script
-						script = undefined;
-
-						// Callback if not abort
-						if ( !isAbort ) {
-							callback( 200, "success" );
-						}
-					}
-				};
-				// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
-				// This arises when a base node is used (#2709 and #4378).
-				head.insertBefore( script, head.firstChild );
-			},
-
-			abort: function() {
-				if ( script ) {
-					script.onload( 0, 1 );
-				}
-			}
-		};
-	}
-});
-
-
-
-
-var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
-	xhrOnUnloadAbort = window.ActiveXObject ? function() {
-		// Abort all pending requests
-		for ( var key in xhrCallbacks ) {
-			xhrCallbacks[ key ]( 0, 1 );
-		}
-	} : false,
-	xhrId = 0,
-	xhrCallbacks;
-
-// Functions to create xhrs
-function createStandardXHR() {
-	try {
-		return new window.XMLHttpRequest();
-	} catch( e ) {}
-}
-
-function createActiveXHR() {
-	try {
-		return new window.ActiveXObject( "Microsoft.XMLHTTP" );
-	} catch( e ) {}
-}
-
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-jQuery.ajaxSettings.xhr = window.ActiveXObject ?
-	/* Microsoft failed to properly
-	 * implement the XMLHttpRequest in IE7 (can't request local files),
-	 * so we use the ActiveXObject when it is available
-	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
-	 * we need a fallback.
-	 */
-	function() {
-		return !this.isLocal && createStandardXHR() || createActiveXHR();
-	} :
-	// For all other browsers, use the standard XMLHttpRequest object
-	createStandardXHR;
-
-// Determine support properties
-(function( xhr ) {
-	jQuery.extend( jQuery.support, {
-		ajax: !!xhr,
-		cors: !!xhr && ( "withCredentials" in xhr )
-	});
-})( jQuery.ajaxSettings.xhr() );
-
-// Create transport if the browser can provide an xhr
-if ( jQuery.support.ajax ) {
-
-	jQuery.ajaxTransport(function( s ) {
-		// Cross domain only allowed if supported through XMLHttpRequest
-		if ( !s.crossDomain || jQuery.support.cors ) {
-
-			var callback;
-
-			return {
-				send: function( headers, complete ) {
-
-					// Get a new xhr
-					var xhr = s.xhr(),
-						handle,
-						i;
-
-					// Open the socket
-					// Passing null username, generates a login popup on Opera (#2865)
-					if ( s.username ) {
-						xhr.open( s.type, s.url, s.async, s.username, s.password );
-					} else {
-						xhr.open( s.type, s.url, s.async );
-					}
-
-					// Apply custom fields if provided
-					if ( s.xhrFields ) {
-						for ( i in s.xhrFields ) {
-							xhr[ i ] = s.xhrFields[ i ];
-						}
-					}
-
-					// Override mime type if needed
-					if ( s.mimeType && xhr.overrideMimeType ) {
-						xhr.overrideMimeType( s.mimeType );
-					}
-
-					// X-Requested-With header
-					// For cross-domain requests, seeing as conditions for a preflight are
-					// akin to a jigsaw puzzle, we simply never set it to be sure.
-					// (it can always be set on a per-request basis or even using ajaxSetup)
-					// For same-domain requests, won't change header if already provided.
-					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
-						headers[ "X-Requested-With" ] = "XMLHttpRequest";
-					}
-
-					// Need an extra try/catch for cross domain requests in Firefox 3
-					try {
-						for ( i in headers ) {
-							xhr.setRequestHeader( i, headers[ i ] );
-						}
-					} catch( _ ) {}
-
-					// Do send the request
-					// This may raise an exception which is actually
-					// handled in jQuery.ajax (so no try/catch here)
-					xhr.send( ( s.hasContent && s.data ) || null );
-
-					// Listener
-					callback = function( _, isAbort ) {
-
-						var status,
-							statusText,
-							responseHeaders,
-							responses,
-							xml;
-
-						// Firefox throws exceptions when accessing properties
-						// of an xhr when a network error occured
-						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
-						try {
-
-							// Was never called and is aborted or complete
-							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
-
-								// Only called once
-								callback = undefined;
-
-								// Do not keep as active anymore
-								if ( handle ) {
-									xhr.onreadystatechange = jQuery.noop;
-									if ( xhrOnUnloadAbort ) {
-										delete xhrCallbacks[ handle ];
-									}
-								}
-
-								// If it's an abort
-								if ( isAbort ) {
-									// Abort it manually if needed
-									if ( xhr.readyState !== 4 ) {
-										xhr.abort();
-									}
-								} else {
-									status = xhr.status;
-									responseHeaders = xhr.getAllResponseHeaders();
-									responses = {};
-									xml = xhr.responseXML;
-
-									// Construct response list
-									if ( xml && xml.documentElement /* #4958 */ ) {
-										responses.xml = xml;
-									}
-
-									// When requesting binary data, IE6-9 will throw an exception
-									// on any attempt to access responseText (#11426)
-									try {
-										responses.text = xhr.responseText;
-									} catch( _ ) {
-									}
-
-									// Firefox throws an exception when accessing
-									// statusText for faulty cross-domain requests
-									try {
-										statusText = xhr.statusText;
-									} catch( e ) {
-										// We normalize with Webkit giving an empty statusText
-										statusText = "";
-									}
-
-									// Filter status for non standard behaviors
-
-									// If the request is local and we have data: assume a success
-									// (success with no data won't get notified, that's the best we
-									// can do given current implementations)
-									if ( !status && s.isLocal && !s.crossDomain ) {
-										status = responses.text ? 200 : 404;
-									// IE - #1450: sometimes returns 1223 when it should be 204
-									} else if ( status === 1223 ) {
-										status = 204;
-									}
-								}
-							}
-						} catch( firefoxAccessException ) {
-							if ( !isAbort ) {
-								complete( -1, firefoxAccessException );
-							}
-						}
-
-						// Call complete if needed
-						if ( responses ) {
-							complete( status, statusText, responses, responseHeaders );
-						}
-					};
-
-					// if we're in sync mode or it's in cache
-					// and has been retrieved directly (IE6 & IE7)
-					// we need to manually fire the callback
-					if ( !s.async || xhr.readyState === 4 ) {
-						callback();
-					} else {
-						handle = ++xhrId;
-						if ( xhrOnUnloadAbort ) {
-							// Create the active xhrs callbacks list if needed
-							// and attach the unload handler
-							if ( !xhrCallbacks ) {
-								xhrCallbacks = {};
-								jQuery( window ).unload( xhrOnUnloadAbort );
-							}
-							// Add to list of active xhrs callbacks
-							xhrCallbacks[ handle ] = callback;
-						}
-						xhr.onreadystatechange = callback;
-					}
-				},
-
-				abort: function() {
-					if ( callback ) {
-						callback(0,1);
-					}
-				}
-			};
-		}
-	});
-}
-
-
-
-
-var elemdisplay = {},
-	iframe, iframeDoc,
-	rfxtypes = /^(?:toggle|show|hide)$/,
-	rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
-	timerId,
-	fxAttrs = [
-		// height animations
-		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
-		// width animations
-		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
-		// opacity animations
-		[ "opacity" ]
-	],
-	fxNow;
-
-jQuery.fn.extend({
-	show: function( speed, easing, callback ) {
-		var elem, display;
-
-		if ( speed || speed === 0 ) {
-			return this.animate( genFx("show", 3), speed, easing, callback );
-
-		} else {
-			for ( var i = 0, j = this.length; i < j; i++ ) {
-				elem = this[ i ];
-
-				if ( elem.style ) {
-					display = elem.style.display;
-
-					// Reset the inline display of this element to learn if it is
-					// being hidden by cascaded rules or not
-					if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
-						display = elem.style.display = "";
-					}
-
-					// Set elements which have been overridden with display: none
-					// in a stylesheet to whatever the default browser style is
-					// for such an element
-					if ( (display === "" && jQuery.css(elem, "display") === "none") ||
-						!jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
-						jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
-					}
-				}
-			}
-
-			// Set the display of most of the elements in a second loop
-			// to avoid the constant reflow
-			for ( i = 0; i < j; i++ ) {
-				elem = this[ i ];
-
-				if ( elem.style ) {
-					display = elem.style.display;
-
-					if ( display === "" || display === "none" ) {
-						elem.style.display = jQuery._data( elem, "olddisplay" ) || "";
-					}
-				}
-			}
-
-			return this;
-		}
-	},
-
-	hide: function( speed, easing, callback ) {
-		if ( speed || speed === 0 ) {
-			return this.animate( genFx("hide", 3), speed, easing, callback);
-
-		} else {
-			var elem, display,
-				i = 0,
-				j = this.length;
-
-			for ( ; i < j; i++ ) {
-				elem = this[i];
-				if ( elem.style ) {
-					display = jQuery.css( elem, "display" );
-
-					if ( display !== "none" && !jQuery._data( elem, "olddisplay" ) ) {
-						jQuery._data( elem, "olddisplay", display );
-					}
-				}
-			}
-
-			// Set the display of the elements in a second loop
-			// to avoid the constant reflow
-			for ( i = 0; i < j; i++ ) {
-				if ( this[i].style ) {
-					this[i].style.display = "none";
-				}
-			}
-
-			return this;
-		}
-	},
-
-	// Save the old toggle function
-	_toggle: jQuery.fn.toggle,
-
-	toggle: function( fn, fn2, callback ) {
-		var bool = typeof fn === "boolean";
-
-		if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
-			this._toggle.apply( this, arguments );
-
-		} else if ( fn == null || bool ) {
-			this.each(function() {
-				var state = bool ? fn : jQuery(this).is(":hidden");
-				jQuery(this)[ state ? "show" : "hide" ]();
-			});
-
-		} else {
-			this.animate(genFx("toggle", 3), fn, fn2, callback);
-		}
-
-		return this;
-	},
-
-	fadeTo: function( speed, to, easing, callback ) {
-		return this.filter(":hidden").css("opacity", 0).show().end()
-					.animate({opacity: to}, speed, easing, callback);
-	},
-
-	animate: function( prop, speed, easing, callback ) {
-		var optall = jQuery.speed( speed, easing, callback );
-
-		if ( jQuery.isEmptyObject( prop ) ) {
-			return this.each( optall.complete, [ false ] );
-		}
-
-		// Do not change referenced properties as per-property easing will be lost
-		prop = jQuery.extend( {}, prop );
-
-		function doAnimation() {
-			// XXX 'this' does not always have a nodeName when running the
-			// test suite
-
-			if ( optall.queue === false ) {
-				jQuery._mark( this );
-			}
-
-			var opt = jQuery.extend( {}, optall ),
-				isElement = this.nodeType === 1,
-				hidden = isElement && jQuery(this).is(":hidden"),
-				name, val, p, e, hooks, replace,
-				parts, start, end, unit,
-				method;
-
-			// will store per property easing and be used to determine when an animation is complete
-			opt.animatedProperties = {};
-
-			// first pass over propertys to expand / normalize
-			for ( p in prop ) {
-				name = jQuery.camelCase( p );
-				if ( p !== name ) {
-					prop[ name ] = prop[ p ];
-					delete prop[ p ];
-				}
-
-				if ( ( hooks = jQuery.cssHooks[ name ] ) && "expand" in hooks ) {
-					replace = hooks.expand( prop[ name ] );
-					delete prop[ name ];
-
-					// not quite $.extend, this wont overwrite keys already present.
-					// also - reusing 'p' from above because we have the correct "name"
-					for ( p in replace ) {
-						if ( ! ( p in prop ) ) {
-							prop[ p ] = replace[ p ];
-						}
-					}
-				}
-			}
-
-			for ( name in prop ) {
-				val = prop[ name ];
-				// easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
-				if ( jQuery.isArray( val ) ) {
-					opt.animatedProperties[ name ] = val[ 1 ];
-					val = prop[ name ] = val[ 0 ];
-				} else {
-					opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
-				}
-
-				if ( val === "hide" && hidden || val === "show" && !hidden ) {
-					return opt.complete.call( this );
-				}
-
-				if ( isElement && ( name === "height" || name === "width" ) ) {
-					// Make sure that nothing sneaks out
-					// Record all 3 overflow attributes because IE does not
-					// change the overflow attribute when overflowX and
-					// overflowY are set to the same value
-					opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
-
-					// Set display property to inline-block for height/width
-					// animations on inline elements that are having width/height animated
-					if ( jQuery.css( this, "display" ) === "inline" &&
-							jQuery.css( this, "float" ) === "none" ) {
-
-						// inline-level elements accept inline-block;
-						// block-level elements need to be inline with layout
-						if ( !jQuery.support.inlineBlockNeedsLayout || defaultDisplay( this.nodeName ) === "inline" ) {
-							this.style.display = "inline-block";
-
-						} else {
-							this.style.zoom = 1;
-						}
-					}
-				}
-			}
-
-			if ( opt.overflow != null ) {
-				this.style.overflow = "hidden";
-			}
-
-			for ( p in prop ) {
-				e = new jQuery.fx( this, opt, p );
-				val = prop[ p ];
-
-				if ( rfxtypes.test( val ) ) {
-
-					// Tracks whether to show or hide based on private
-					// data attached to the element
-					method = jQuery._data( this, "toggle" + p ) || ( val === "toggle" ? hidden ? "show" : "hide" : 0 );
-					if ( method ) {
-						jQuery._data( this, "toggle" + p, method === "show" ? "hide" : "show" );
-						e[ method ]();
-					} else {
-						e[ val ]();
-					}
-
-				} else {
-					parts = rfxnum.exec( val );
-					start = e.cur();
-
-					if ( parts ) {
-						end = parseFloat( parts[2] );
-						unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
-
-						// We need to compute starting value
-						if ( unit !== "px" ) {
-							jQuery.style( this, p, (end || 1) + unit);
-							start = ( (end || 1) / e.cur() ) * start;
-							jQuery.style( this, p, start + unit);
-						}
-
-						// If a +=/-= token was provided, we're doing a relative animation
-						if ( parts[1] ) {
-							end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
-						}
-
-						e.custom( start, end, unit );
-
-					} else {
-						e.custom( start, val, "" );
-					}
-				}
-			}
-
-			// For JS strict compliance
-			return true;
-		}
-
-		return optall.queue === false ?
-			this.each( doAnimation ) :
-			this.queue( optall.queue, doAnimation );
-	},
-
-	stop: function( type, clearQueue, gotoEnd ) {
-		if ( typeof type !== "string" ) {
-			gotoEnd = clearQueue;
-			clearQueue = type;
-			type = undefined;
-		}
-		if ( clearQueue && type !== false ) {
-			this.queue( type || "fx", [] );
-		}
-
-		return this.each(function() {
-			var index,
-				hadTimers = false,
-				timers = jQuery.timers,
-				data = jQuery._data( this );
-
-			// clear marker counters if we know they won't be
-			if ( !gotoEnd ) {
-				jQuery._unmark( true, this );
-			}
-
-			function stopQueue( elem, data, index ) {
-				var hooks = data[ index ];
-				jQuery.removeData( elem, index, true );
-				hooks.stop( gotoEnd );
-			}
-
-			if ( type == null ) {
-				for ( index in data ) {
-					if ( data[ index ] && data[ index ].stop && index.indexOf(".run") === index.length - 4 ) {
-						stopQueue( this, data, index );
-					}
-				}
-			} else if ( data[ index = type + ".run" ] && data[ index ].stop ){
-				stopQueue( this, data, index );
-			}
-
-			for ( index = timers.length; index--; ) {
-				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
-					if ( gotoEnd ) {
-
-						// force the next step to be the last
-						timers[ index ]( true );
-					} else {
-						timers[ index ].saveState();
-					}
-					hadTimers = true;
-					timers.splice( index, 1 );
-				}
-			}
-
-			// start the next in the queue if the last step wasn't forced
-			// timers currently will call their complete callbacks, which will dequeue
-			// but only if they were gotoEnd
-			if ( !( gotoEnd && hadTimers ) ) {
-				jQuery.dequeue( this, type );
-			}
-		});
-	}
-
-});
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
-	setTimeout( clearFxNow, 0 );
-	return ( fxNow = jQuery.now() );
-}
-
-function clearFxNow() {
-	fxNow = undefined;
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, num ) {
-	var obj = {};
-
-	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice( 0, num )), function() {
-		obj[ this ] = type;
-	});
-
-	return obj;
-}
-
-// Generate shortcuts for custom animations
-jQuery.each({
-	slideDown: genFx( "show", 1 ),
-	slideUp: genFx( "hide", 1 ),
-	slideToggle: genFx( "toggle", 1 ),
-	fadeIn: { opacity: "show" },
-	fadeOut: { opacity: "hide" },
-	fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
-	jQuery.fn[ name ] = function( speed, easing, callback ) {
-		return this.animate( props, speed, easing, callback );
-	};
-});
-
-jQuery.extend({
-	speed: function( speed, easing, fn ) {
-		var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
-			complete: fn || !fn && easing ||
-				jQuery.isFunction( speed ) && speed,
-			duration: speed,
-			easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
-		};
-
-		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
-			opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
-
-		// normalize opt.queue - true/undefined/null -> "fx"
-		if ( opt.queue == null || opt.queue === true ) {
-			opt.queue = "fx";
-		}
-
-		// Queueing
-		opt.old = opt.complete;
-
-		opt.complete = function( noUnmark ) {
-			if ( jQuery.isFunction( opt.old ) ) {
-				opt.old.call( this );
-			}
-
-			if ( opt.queue ) {
-				jQuery.dequeue( this, opt.queue );
-			} else if ( noUnmark !== false ) {
-				jQuery._unmark( this );
-			}
-		};
-
-		return opt;
-	},
-
-	easing: {
-		linear: function( p ) {
-			return p;
-		},
-		swing: function( p ) {
-			return ( -Math.cos( p*Math.PI ) / 2 ) + 0.5;
-		}
-	},
-
-	timers: [],
-
-	fx: function( elem, options, prop ) {
-		this.options = options;
-		this.elem = elem;
-		this.prop = prop;
-
-		options.orig = options.orig || {};
-	}
-
-});
-
-jQuery.fx.prototype = {
-	// Simple function for setting a style value
-	update: function() {
-		if ( this.options.step ) {
-			this.options.step.call( this.elem, this.now, this );
-		}
-
-		( jQuery.fx.step[ this.prop ] || jQuery.fx.step._default )( this );
-	},
-
-	// Get the current size
-	cur: function() {
-		if ( this.elem[ this.prop ] != null && (!this.elem.style || this.elem.style[ this.prop ] == null) ) {
-			return this.elem[ this.prop ];
-		}
-
-		var parsed,
-			r = jQuery.css( this.elem, this.prop );
-		// Empty strings, null, undefined and "auto" are converted to 0,
-		// complex values such as "rotate(1rad)" are returned as is,
-		// simple values such as "10px" are parsed to Float.
-		return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
-	},
-
-	// Start an animation from one number to another
-	custom: function( from, to, unit ) {
-		var self = this,
-			fx = jQuery.fx;
-
-		this.startTime = fxNow || createFxNow();
-		this.end = to;
-		this.now = this.start = from;
-		this.pos = this.state = 0;
-		this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
-
-		function t( gotoEnd ) {
-			return self.step( gotoEnd );
-		}
-
-		t.queue = this.options.queue;
-		t.elem = this.elem;
-		t.saveState = function() {
-			if ( jQuery._data( self.elem, "fxshow" + self.prop ) === undefined ) {
-				if ( self.options.hide ) {
-					jQuery._data( self.elem, "fxshow" + self.prop, self.start );
-				} else if ( self.options.show ) {
-					jQuery._data( self.elem, "fxshow" + self.prop, self.end );
-				}
-			}
-		};
-
-		if ( t() && jQuery.timers.push(t) && !timerId ) {
-			timerId = setInterval( fx.tick, fx.interval );
-		}
-	},
-
-	// Simple 'show' function
-	show: function() {
-		var dataShow = jQuery._data( this.elem, "fxshow" + this.prop );
-
-		// Remember where we started, so that we can go back to it later
-		this.options.orig[ this.prop ] = dataShow || jQuery.style( this.elem, this.prop );
-		this.options.show = true;
-
-		// Begin the animation
-		// Make sure that we start at a small width/height to avoid any flash of content
-		if ( dataShow !== undefined ) {
-			// This show is picking up where a previous hide or show left off
-			this.custom( this.cur(), dataShow );
-		} else {
-			this.custom( this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur() );
-		}
-
-		// Start by showing the element
-		jQuery( this.elem ).show();
-	},
-
-	// Simple 'hide' function
-	hide: function() {
-		// Remember where we started, so that we can go back to it later
-		this.options.orig[ this.prop ] = jQuery._data( this.elem, "fxshow" + this.prop ) || jQuery.style( this.elem, this.prop );
-		this.options.hide = true;
-
-		// Begin the animation
-		this.custom( this.cur(), 0 );
-	},
-
-	// Each step of an animation
-	step: function( gotoEnd ) {
-		var p, n, complete,
-			t = fxNow || createFxNow(),
-			done = true,
-			elem = this.elem,
-			options = this.options;
-
-		if ( gotoEnd || t >= options.duration + this.startTime ) {
-			this.now = this.end;
-			this.pos = this.state = 1;
-			this.update();
-
-			options.animatedProperties[ this.prop ] = true;
-
-			for ( p in options.animatedProperties ) {
-				if ( options.animatedProperties[ p ] !== true ) {
-					done = false;
-				}
-			}
-
-			if ( done ) {
-				// Reset the overflow
-				if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
-
-					jQuery.each( [ "", "X", "Y" ], function( index, value ) {
-						elem.style[ "overflow" + value ] = options.overflow[ index ];
-					});
-				}
-
-				// Hide the element if the "hide" operation was done
-				if ( options.hide ) {
-					jQuery( elem ).hide();
-				}
-
-				// Reset the properties, if the item has been hidden or shown
-				if ( options.hide || options.show ) {
-					for ( p in options.animatedProperties ) {
-						jQuery.style( elem, p, options.orig[ p ] );
-						jQuery.removeData( elem, "fxshow" + p, true );
-						// Toggle data is no longer needed
-						jQuery.removeData( elem, "toggle" + p, true );
-					}
-				}
-
-				// Execute the complete function
-				// in the event that the complete function throws an exception
-				// we must ensure it won't be called twice. #5684
-
-				complete = options.complete;
-				if ( complete ) {
-
-					options.complete = false;
-					complete.call( elem );
-				}
-			}
-
-			return false;
-
-		} else {
-			// classical easing cannot be used with an Infinity duration
-			if ( options.duration == Infinity ) {
-				this.now = t;
-			} else {
-				n = t - this.startTime;
-				this.state = n / options.duration;
-
-				// Perform the easing function, defaults to swing
-				this.pos = jQuery.easing[ options.animatedProperties[this.prop] ]( this.state, n, 0, 1, options.duration );
-				this.now = this.start + ( (this.end - this.start) * this.pos );
-			}
-			// Perform the next step of the animation
-			this.update();
-		}
-
-		return true;
-	}
-};
-
-jQuery.extend( jQuery.fx, {
-	tick: function() {
-		var timer,
-			timers = jQuery.timers,
-			i = 0;
-
-		for ( ; i < timers.length; i++ ) {
-			timer = timers[ i ];
-			// Checks the timer has not already been removed
-			if ( !timer() && timers[ i ] === timer ) {
-				timers.splice( i--, 1 );
-			}
-		}
-
-		if ( !timers.length ) {
-			jQuery.fx.stop();
-		}
-	},
-
-	interval: 13,
-
-	stop: function() {
-		clearInterval( timerId );
-		timerId = null;
-	},
-
-	speeds: {
-		slow: 600,
-		fast: 200,
-		// Default speed
-		_default: 400
-	},
-
-	step: {
-		opacity: function( fx ) {
-			jQuery.style( fx.elem, "opacity", fx.now );
-		},
-
-		_default: function( fx ) {
-			if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
-				fx.elem.style[ fx.prop ] = fx.now + fx.unit;
-			} else {
-				fx.elem[ fx.prop ] = fx.now;
-			}
-		}
-	}
-});
-
-// Ensure props that can't be negative don't go there on undershoot easing
-jQuery.each( fxAttrs.concat.apply( [], fxAttrs ), function( i, prop ) {
-	// exclude marginTop, marginLeft, marginBottom and marginRight from this list
-	if ( prop.indexOf( "margin" ) ) {
-		jQuery.fx.step[ prop ] = function( fx ) {
-			jQuery.style( fx.elem, prop, Math.max(0, fx.now) + fx.unit );
-		};
-	}
-});
-
-if ( jQuery.expr && jQuery.expr.filters ) {
-	jQuery.expr.filters.animated = function( elem ) {
-		return jQuery.grep(jQuery.timers, function( fn ) {
-			return elem === fn.elem;
-		}).length;
-	};
-}
-
-// Try to restore the default display value of an element
-function defaultDisplay( nodeName ) {
-
-	if ( !elemdisplay[ nodeName ] ) {
-
-		var body = document.body,
-			elem = jQuery( "<" + nodeName + ">" ).appendTo( body ),
-			display = elem.css( "display" );
-		elem.remove();
-
-		// If the simple way fails,
-		// get element's real default display by attaching it to a temp iframe
-		if ( display === "none" || display === "" ) {
-			// No iframe to use yet, so create it
-			if ( !iframe ) {
-				iframe = document.createElement( "iframe" );
-				iframe.frameBorder = iframe.width = iframe.height = 0;
-			}
-
-			body.appendChild( iframe );
-
-			// Create a cacheable copy of the iframe document on first call.
-			// IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
-			// document to it; WebKit & Firefox won't allow reusing the iframe document.
-			if ( !iframeDoc || !iframe.createElement ) {
-				iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
-				iframeDoc.write( ( jQuery.support.boxModel ? "<!doctype html>" : "" ) + "<html><body>" );
-				iframeDoc.close();
-			}
-
-			elem = iframeDoc.createElement( nodeName );
-
-			iframeDoc.body.appendChild( elem );
-
-			display = jQuery.css( elem, "display" );
-			body.removeChild( iframe );
-		}
-
-		// Store the correct default display
-		elemdisplay[ nodeName ] = display;
-	}
-
-	return elemdisplay[ nodeName ];
-}
-
-
-
-
-var getOffset,
-	rtable = /^t(?:able|d|h)$/i,
-	rroot = /^(?:body|html)$/i;
-
-if ( "getBoundingClientRect" in document.documentElement ) {
-	getOffset = function( elem, doc, docElem, box ) {
-		try {
-			box = elem.getBoundingClientRect();
-		} catch(e) {}
-
-		// Make sure we're not dealing with a disconnected DOM node
-		if ( !box || !jQuery.contains( docElem, elem ) ) {
-			return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
-		}
-
-		var body = doc.body,
-			win = getWindow( doc ),
-			clientTop  = docElem.clientTop  || body.clientTop  || 0,
-			clientLeft = docElem.clientLeft || body.clientLeft || 0,
-			scrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,
-			scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
-			top  = box.top  + scrollTop  - clientTop,
-			left = box.left + scrollLeft - clientLeft;
-
-		return { top: top, left: left };
-	};
-
-} else {
-	getOffset = function( elem, doc, docElem ) {
-		var computedStyle,
-			offsetParent = elem.offsetParent,
-			prevOffsetParent = elem,
-			body = doc.body,
-			defaultView = doc.defaultView,
-			prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
-			top = elem.offsetTop,
-			left = elem.offsetLeft;
-
-		while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
-			if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
-				break;
-			}
-
-			computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
-			top  -= elem.scrollTop;
-			left -= elem.scrollLeft;
-
-			if ( elem === offsetParent ) {
-				top  += elem.offsetTop;
-				left += elem.offsetLeft;
-
-				if ( jQuery.support.doesNotAddBorder && !(jQuery.support.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
-					top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
-					left += parseFloat( computedStyle.borderLeftWidth ) || 0;
-				}
-
-				prevOffsetParent = offsetParent;
-				offsetParent = elem.offsetParent;
-			}
-
-			if ( jQuery.support.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
-				top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
-				left += parseFloat( computedStyle.borderLeftWidth ) || 0;
-			}
-
-			prevComputedStyle = computedStyle;
-		}
-
-		if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
-			top  += body.offsetTop;
-			left += body.offsetLeft;
-		}
-
-		if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
-			top  += Math.max( docElem.scrollTop, body.scrollTop );
-			left += Math.max( docElem.scrollLeft, body.scrollLeft );
-		}
-
-		return { top: top, left: left };
-	};
-}
-
-jQuery.fn.offset = function( options ) {
-	if ( arguments.length ) {
-		return options === undefined ?
-			this :
-			this.each(function( i ) {
-				jQuery.offset.setOffset( this, options, i );
-			});
-	}
-
-	var elem = this[0],
-		doc = elem && elem.ownerDocument;
-
-	if ( !doc ) {
-		return null;
-	}
-
-	if ( elem === doc.body ) {
-		return jQuery.offset.bodyOffset( elem );
-	}
-
-	return getOffset( elem, doc, doc.documentElement );
-};
-
-jQuery.offset = {
-
-	bodyOffset: function( body ) {
-		var top = body.offsetTop,
-			left = body.offsetLeft;
-
-		if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {
-			top  += parseFloat( jQuery.css(body, "marginTop") ) || 0;
-			left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
-		}
-
-		return { top: top, left: left };
-	},
-
-	setOffset: function( elem, options, i ) {
-		var position = jQuery.css( elem, "position" );
-
-		// set position first, in-case top/left are set even on static elem
-		if ( position === "static" ) {
-			elem.style.position = "relative";
-		}
-
-		var curElem = jQuery( elem ),
-			curOffset = curElem.offset(),
-			curCSSTop = jQuery.css( elem, "top" ),
-			curCSSLeft = jQuery.css( elem, "left" ),
-			calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
-			props = {}, curPosition = {}, curTop, curLeft;
-
-		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
-		if ( calculatePosition ) {
-			curPosition = curElem.position();
-			curTop = curPosition.top;
-			curLeft = curPosition.left;
-		} else {
-			curTop = parseFloat( curCSSTop ) || 0;
-			curLeft = parseFloat( curCSSLeft ) || 0;
-		}
-
-		if ( jQuery.isFunction( options ) ) {
-			options = options.call( elem, i, curOffset );
-		}
-
-		if ( options.top != null ) {
-			props.top = ( options.top - curOffset.top ) + curTop;
-		}
-		if ( options.left != null ) {
-			props.left = ( options.left - curOffset.left ) + curLeft;
-		}
-
-		if ( "using" in options ) {
-			options.using.call( elem, props );
-		} else {
-			curElem.css( props );
-		}
-	}
-};
-
-
-jQuery.fn.extend({
-
-	position: function() {
-		if ( !this[0] ) {
-			return null;
-		}
-
-		var elem = this[0],
-
-		// Get *real* offsetParent
-		offsetParent = this.offsetParent(),
-
-		// Get correct offsets
-		offset       = this.offset(),
-		parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
-
-		// Subtract element margins
-		// note: when an element has margin: auto the offsetLeft and marginLeft
-		// are the same in Safari causing offset.left to incorrectly be 0
-		offset.top  -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
-		offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
-
-		// Add offsetParent borders
-		parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
-		parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
-
-		// Subtract the two offsets
-		return {
-			top:  offset.top  - parentOffset.top,
-			left: offset.left - parentOffset.left
-		};
-	},
-
-	offsetParent: function() {
-		return this.map(function() {
-			var offsetParent = this.offsetParent || document.body;
-			while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
-				offsetParent = offsetParent.offsetParent;
-			}
-			return offsetParent;
-		});
-	}
-});
-
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
-	var top = /Y/.test( prop );
-
-	jQuery.fn[ method ] = function( val ) {
-		return jQuery.access( this, function( elem, method, val ) {
-			var win = getWindow( elem );
-
-			if ( val === undefined ) {
-				return win ? (prop in win) ? win[ prop ] :
-					jQuery.support.boxModel && win.document.documentElement[ method ] ||
-						win.document.body[ method ] :
-					elem[ method ];
-			}
-
-			if ( win ) {
-				win.scrollTo(
-					!top ? val : jQuery( win ).scrollLeft(),
-					 top ? val : jQuery( win ).scrollTop()
-				);
-
-			} else {
-				elem[ method ] = val;
-			}
-		}, method, val, arguments.length, null );
-	};
-});
-
-function getWindow( elem ) {
-	return jQuery.isWindow( elem ) ?
-		elem :
-		elem.nodeType === 9 ?
-			elem.defaultView || elem.parentWindow :
-			false;
-}
-
-
-
-
-// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods
-jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
-	var clientProp = "client" + name,
-		scrollProp = "scroll" + name,
-		offsetProp = "offset" + name;
-
-	// innerHeight and innerWidth
-	jQuery.fn[ "inner" + name ] = function() {
-		var elem = this[0];
-		return elem ?
-			elem.style ?
-			parseFloat( jQuery.css( elem, type, "padding" ) ) :
-			this[ type ]() :
-			null;
-	};
-
-	// outerHeight and outerWidth
-	jQuery.fn[ "outer" + name ] = function( margin ) {
-		var elem = this[0];
-		return elem ?
-			elem.style ?
-			parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) :
-			this[ type ]() :
-			null;
-	};
-
-	jQuery.fn[ type ] = function( value ) {
-		return jQuery.access( this, function( elem, type, value ) {
-			var doc, docElemProp, orig, ret;
-
-			if ( jQuery.isWindow( elem ) ) {
-				// 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
-				doc = elem.document;
-				docElemProp = doc.documentElement[ clientProp ];
-				return jQuery.support.boxModel && docElemProp ||
-					doc.body && doc.body[ clientProp ] || docElemProp;
-			}
-
-			// Get document width or height
-			if ( elem.nodeType === 9 ) {
-				// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
-				doc = elem.documentElement;
-
-				// when a window > document, IE6 reports a offset[Width/Height] > client[Width/Height]
-				// so we can't use max, as it'll choose the incorrect offset[Width/Height]
-				// instead we use the correct client[Width/Height]
-				// support:IE6
-				if ( doc[ clientProp ] >= doc[ scrollProp ] ) {
-					return doc[ clientProp ];
-				}
-
-				return Math.max(
-					elem.body[ scrollProp ], doc[ scrollProp ],
-					elem.body[ offsetProp ], doc[ offsetProp ]
-				);
-			}
-
-			// Get width or height on the element
-			if ( value === undefined ) {
-				orig = jQuery.css( elem, type );
-				ret = parseFloat( orig );
-				return jQuery.isNumeric( ret ) ? ret : orig;
-			}
-
-			// Set the width or height on the element
-			jQuery( elem ).css( type, value );
-		}, type, value, arguments.length, null );
-	};
-});
-
-
-
-
-// Expose jQuery to the global object
-window.jQuery = window.$ = jQuery;
-
-// Expose jQuery as an AMD module, but only for AMD loaders that
-// understand the issues with loading multiple versions of jQuery
-// in a page that all might call define(). The loader will indicate
-// they have special allowances for multiple jQuery versions by
-// specifying define.amd.jQuery = true. Register as a named module,
-// since jQuery can be concatenated with other files that may use define,
-// but not use a proper concatenation script that understands anonymous
-// AMD modules. A named AMD is safest and most robust way to register.
-// Lowercase jquery is used because AMD module names are derived from
-// file names, and jQuery is normally delivered in a lowercase file name.
-// Do this after creating the global so that if an AMD module wants to call
-// noConflict to hide this version of jQuery, it will work.
-if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
-	define( "jquery", [], function () { return jQuery; } );
-}
-
-
-
-})( window );
+/** vim: et:ts=4:sw=4:sts=4

+ * @license RequireJS 2.0.2 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.

+ * Available via the MIT or new BSD license.

+ * see: http://github.com/jrburke/requirejs for details

+ */

+/*jslint regexp: true, nomen: true */

+/*global window, navigator, document, importScripts, jQuery, setTimeout, opera */

+

+var requirejs, require, define;

+(function (global) {

+    'use strict';

+

+    var version = '0.0.0',

+        commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,

+        cjsRequireRegExp = /require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,

+        jsSuffixRegExp = /\.js$/,

+        currDirRegExp = /^\.\//,

+        ostring = Object.prototype.toString,

+        ap = Array.prototype,

+        aps = ap.slice,

+        apsp = ap.splice,

+        isBrowser = !!(typeof window !== 'undefined' && navigator && document),

+        isWebWorker = !isBrowser && typeof importScripts !== 'undefined',

+        //PS3 indicates loaded and complete, but need to wait for complete

+        //specifically. Sequence is 'loading', 'loaded', execution,

+        // then 'complete'. The UA check is unfortunate, but not sure how

+        //to feature test w/o causing perf issues.

+        readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ?

+                      /^complete$/ : /^(complete|loaded)$/,

+        defContextName = '_',

+        //Oh the tragedy, detecting opera. See the usage of isOpera for reason.

+        isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]',

+        contexts = {},

+        cfg = {},

+        globalDefQueue = [],

+        useInteractive = false,

+        req, s, head, baseElement, dataMain, src,

+        interactiveScript, currentlyAddingScript, mainScript, subPath;

+

+    function isFunction(it) {

+        return ostring.call(it) === '[object Function]';

+    }

+

+    function isArray(it) {

+        return ostring.call(it) === '[object Array]';

+    }

+

+    /**

+     * Helper function for iterating over an array. If the func returns

+     * a true value, it will break out of the loop.

+     */

+    function each(ary, func) {

+        if (ary) {

+            var i;

+            for (i = 0; i < ary.length; i += 1) {

+                if (ary[i] && func(ary[i], i, ary)) {

+                    break;

+                }

+            }

+        }

+    }

+

+    /**

+     * Helper function for iterating over an array backwards. If the func

+     * returns a true value, it will break out of the loop.

+     */

+    function eachReverse(ary, func) {

+        if (ary) {

+            var i;

+            for (i = ary.length - 1; i > -1; i -= 1) {

+                if (ary[i] && func(ary[i], i, ary)) {

+                    break;

+                }

+            }

+        }

+    }

+

+    function hasProp(obj, prop) {

+        return obj.hasOwnProperty(prop);

+    }

+

+    /**

+     * Cycles over properties in an object and calls a function for each

+     * property value. If the function returns a truthy value, then the

+     * iteration is stopped.

+     */

+    function eachProp(obj, func) {

+        var prop;

+        for (prop in obj) {

+            if (obj.hasOwnProperty(prop)) {

+                if (func(obj[prop], prop)) {

+                    break;

+                }

+            }

+        }

+    }

+

+    /**

+     * Simple function to mix in properties from source into target,

+     * but only if target does not already have a property of the same name.

+     * This is not robust in IE for transferring methods that match

+     * Object.prototype names, but the uses of mixin here seem unlikely to

+     * trigger a problem related to that.

+     */

+    function mixin(target, source, force, deepStringMixin) {

+        if (source) {

+            eachProp(source, function (value, prop) {

+                if (force || !hasProp(target, prop)) {

+                    if (deepStringMixin && typeof value !== 'string') {

+                        if (!target[prop]) {

+                            target[prop] = {};

+                        }

+                        mixin(target[prop], value, force, deepStringMixin);

+                    } else {

+                        target[prop] = value;

+                    }

+                }

+            });

+        }

+        return target;

+    }

+

+    //Similar to Function.prototype.bind, but the 'this' object is specified

+    //first, since it is easier to read/figure out what 'this' will be.

+    function bind(obj, fn) {

+        return function () {

+            return fn.apply(obj, arguments);

+        };

+    }

+

+    function scripts() {

+        return document.getElementsByTagName('script');

+    }

+

+    //Allow getting a global that expressed in

+    //dot notation, like 'a.b.c'.

+    function getGlobal(value) {

+        if (!value) {

+            return value;

+        }

+        var g = global;

+        each(value.split('.'), function (part) {

+            g = g[part];

+        });

+        return g;

+    }

+

+    function makeContextModuleFunc(func, relMap, enableBuildCallback) {

+        return function () {

+            //A version of a require function that passes a moduleName

+            //value for items that may need to

+            //look up paths relative to the moduleName

+            var args = aps.call(arguments, 0), lastArg;

+            if (enableBuildCallback &&

+                isFunction((lastArg = args[args.length - 1]))) {

+                lastArg.__requireJsBuild = true;

+            }

+            args.push(relMap);

+            return func.apply(null, args);

+        };

+    }

+

+    function addRequireMethods(req, context, relMap) {

+        each([

+            ['toUrl'],

+            ['undef'],

+            ['defined', 'requireDefined'],

+            ['specified', 'requireSpecified']

+        ], function (item) {

+            var prop = item[1] || item[0];

+            req[item[0]] = context ? makeContextModuleFunc(context[prop], relMap) :

+                //If no context, then use default context. Reference from

+                //contexts instead of early binding to default context, so

+                //that during builds, the latest instance of the default

+                //context with its config gets used.

+                function () {

+                    var ctx = contexts[defContextName];

+                    return ctx[prop].apply(ctx, arguments);

+                };

+        });

+    }

+

+    /**

+     * Constructs an error with a pointer to an URL with more information.

+     * @param {String} id the error ID that maps to an ID on a web page.

+     * @param {String} message human readable error.

+     * @param {Error} [err] the original error, if there is one.

+     *

+     * @returns {Error}

+     */

+    function makeError(id, msg, err, requireModules) {

+        var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id);

+        e.requireType = id;

+        e.requireModules = requireModules;

+        if (err) {

+            e.originalError = err;

+        }

+        return e;

+    }

+

+    if (typeof define !== 'undefined') {

+        //If a define is already in play via another AMD loader,

+        //do not overwrite.

+        return;

+    }

+

+    if (typeof requirejs !== 'undefined') {

+        if (isFunction(requirejs)) {

+            //Do not overwrite and existing requirejs instance.

+            return;

+        }

+        cfg = requirejs;

+        requirejs = undefined;

+    }

+

+    //Allow for a require config object

+    if (typeof require !== 'undefined' && !isFunction(require)) {

+        //assume it is a config object.

+        cfg = require;

+        require = undefined;

+    }

+

+    function newContext(contextName) {

+        var config = {

+                waitSeconds: 7,

+                baseUrl: './',

+                paths: {},

+                pkgs: {},

+                shim: {}

+            },

+            registry = {},

+            undefEvents = {},

+            defQueue = [],

+            defined = {},

+            urlFetched = {},

+            requireCounter = 1,

+            unnormalizedCounter = 1,

+            //Used to track the order in which modules

+            //should be executed, by the order they

+            //load. Important for consistent cycle resolution

+            //behavior.

+            waitAry = [],

+            inCheckLoaded, Module, context, handlers,

+            checkLoadedTimeoutId;

+

+        /**

+         * Trims the . and .. from an array of path segments.

+         * It will keep a leading path segment if a .. will become

+         * the first path segment, to help with module name lookups,

+         * which act like paths, but can be remapped. But the end result,

+         * all paths that use this function should look normalized.

+         * NOTE: this method MODIFIES the input array.

+         * @param {Array} ary the array of path segments.

+         */

+        function trimDots(ary) {

+            var i, part;

+            for (i = 0; ary[i]; i+= 1) {

+                part = ary[i];

+                if (part === '.') {

+                    ary.splice(i, 1);

+                    i -= 1;

+                } else if (part === '..') {

+                    if (i === 1 && (ary[2] === '..' || ary[0] === '..')) {

+                        //End of the line. Keep at least one non-dot

+                        //path segment at the front so it can be mapped

+                        //correctly to disk. Otherwise, there is likely

+                        //no path mapping for a path starting with '..'.

+                        //This can still fail, but catches the most reasonable

+                        //uses of ..

+                        break;

+                    } else if (i > 0) {

+                        ary.splice(i - 1, 2);

+                        i -= 2;

+                    }

+                }

+            }

+        }

+

+        /**

+         * Given a relative module name, like ./something, normalize it to

+         * a real name that can be mapped to a path.

+         * @param {String} name the relative name

+         * @param {String} baseName a real name that the name arg is relative

+         * to.

+         * @param {Boolean} applyMap apply the map config to the value. Should

+         * only be done if this normalization is for a dependency ID.

+         * @returns {String} normalized name

+         */

+        function normalize(name, baseName, applyMap) {

+            var baseParts = baseName && baseName.split('/'),

+                map = config.map,

+                starMap = map && map['*'],

+                pkgName, pkgConfig, mapValue, nameParts, i, j, nameSegment,

+                foundMap;

+

+            //Adjust any relative paths.

+            if (name && name.charAt(0) === '.') {

+                //If have a base name, try to normalize against it,

+                //otherwise, assume it is a top-level require that will

+                //be relative to baseUrl in the end.

+                if (baseName) {

+                    if (config.pkgs[baseName]) {

+                        //If the baseName is a package name, then just treat it as one

+                        //name to concat the name with.

+                        baseParts = [baseName];

+                    } else {

+                        //Convert baseName to array, and lop off the last part,

+                        //so that . matches that 'directory' and not name of the baseName's

+                        //module. For instance, baseName of 'one/two/three', maps to

+                        //'one/two/three.js', but we want the directory, 'one/two' for

+                        //this normalization.

+                        baseParts = baseParts.slice(0, baseParts.length - 1);

+                    }

+

+                    name = baseParts.concat(name.split('/'));

+                    trimDots(name);

+

+                    //Some use of packages may use a . path to reference the

+                    //'main' module name, so normalize for that.

+                    pkgConfig = config.pkgs[(pkgName = name[0])];

+                    name = name.join('/');

+                    if (pkgConfig && name === pkgName + '/' + pkgConfig.main) {

+                        name = pkgName;

+                    }

+                } else if (name.indexOf('./') === 0) {

+                    // No baseName, so this is ID is resolved relative

+                    // to baseUrl, pull off the leading dot.

+                    name = name.substring(2);

+                }

+            }

+

+            //Apply map config if available.

+            if (applyMap && (baseParts || starMap) && map) {

+                nameParts = name.split('/');

+

+                for (i = nameParts.length; i > 0; i -= 1) {

+                    nameSegment = nameParts.slice(0, i).join('/');

+

+                    if (baseParts) {

+                        //Find the longest baseName segment match in the config.

+                        //So, do joins on the biggest to smallest lengths of baseParts.

+                        for (j = baseParts.length; j > 0; j -= 1) {

+                            mapValue = map[baseParts.slice(0, j).join('/')];

+

+                            //baseName segment has  config, find if it has one for

+                            //this name.

+                            if (mapValue) {

+                                mapValue = mapValue[nameSegment];

+                                if (mapValue) {

+                                    //Match, update name to the new value.

+                                    foundMap = mapValue;

+                                    break;

+                                }

+                            }

+                        }

+                    }

+

+                    if (!foundMap && starMap && starMap[nameSegment]) {

+                        foundMap = starMap[nameSegment];

+                    }

+

+                    if (foundMap) {

+                        nameParts.splice(0, i, foundMap);

+                        name = nameParts.join('/');

+                        break;

+                    }

+                }

+            }

+

+            return name;

+        }

+

+        function removeScript(name) {

+            if (isBrowser) {

+                each(scripts(), function (scriptNode) {

+                    if (scriptNode.getAttribute('data-requiremodule') === name &&

+                        scriptNode.getAttribute('data-requirecontext') === context.contextName) {

+                        scriptNode.parentNode.removeChild(scriptNode);

+                        return true;

+                    }

+                });

+            }

+        }

+

+        function hasPathFallback(id) {

+            var pathConfig = config.paths[id];

+            if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) {

+                removeScript(id);

+                //Pop off the first array value, since it failed, and

+                //retry

+                pathConfig.shift();

+                context.undef(id);

+                context.require([id]);

+                return true;

+            }

+        }

+

+        /**

+         * Creates a module mapping that includes plugin prefix, module

+         * name, and path. If parentModuleMap is provided it will

+         * also normalize the name via require.normalize()

+         *

+         * @param {String} name the module name

+         * @param {String} [parentModuleMap] parent module map

+         * for the module name, used to resolve relative names.

+         * @param {Boolean} isNormalized: is the ID already normalized.

+         * This is true if this call is done for a define() module ID.

+         * @param {Boolean} applyMap: apply the map config to the ID.

+         * Should only be true if this map is for a dependency.

+         *

+         * @returns {Object}

+         */

+        function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) {

+            var index = name ? name.indexOf('!') : -1,

+                prefix = null,

+                parentName = parentModuleMap ? parentModuleMap.name : null,

+                originalName = name,

+                isDefine = true,

+                normalizedName = '',

+                url, pluginModule, suffix;

+

+            //If no name, then it means it is a require call, generate an

+            //internal name.

+            if (!name) {

+                isDefine = false;

+                name = '_@r' + (requireCounter += 1);

+            }

+

+            if (index !== -1) {

+                prefix = name.substring(0, index);

+                name = name.substring(index + 1, name.length);

+            }

+

+            if (prefix) {

+                prefix = normalize(prefix, parentName, applyMap);

+                pluginModule = defined[prefix];

+            }

+

+            //Account for relative paths if there is a base name.

+            if (name) {

+                if (prefix) {

+                    if (pluginModule && pluginModule.normalize) {

+                        //Plugin is loaded, use its normalize method.

+                        normalizedName = pluginModule.normalize(name, function (name) {

+                            return normalize(name, parentName, applyMap);

+                        });

+                    } else {

+                        normalizedName = normalize(name, parentName, applyMap);

+                    }

+                } else {

+                    //A regular module.

+                    normalizedName = normalize(name, parentName, applyMap);

+

+                    //Calculate url for the module, if it has a name.

+                    //Use name here since nameToUrl also calls normalize,

+                    //and for relative names that are outside the baseUrl

+                    //this causes havoc. Was thinking of just removing

+                    //parentModuleMap to avoid extra normalization, but

+                    //normalize() still does a dot removal because of

+                    //issue #142, so just pass in name here and redo

+                    //the normalization. Paths outside baseUrl are just

+                    //messy to support.

+                    url = context.nameToUrl(name, null, parentModuleMap);

+                }

+            }

+

+            //If the id is a plugin id that cannot be determined if it needs

+            //normalization, stamp it with a unique ID so two matching relative

+            //ids that may conflict can be separate.

+            suffix = prefix && !pluginModule && !isNormalized ?

+                     '_unnormalized' + (unnormalizedCounter += 1) :

+                     '';

+

+            return {

+                prefix: prefix,

+                name: normalizedName,

+                parentMap: parentModuleMap,

+                unnormalized: !!suffix,

+                url: url,

+                originalName: originalName,

+                isDefine: isDefine,

+                id: (prefix ?

+                    prefix + '!' + normalizedName :

+                    normalizedName) + suffix

+            };

+        }

+

+        function getModule(depMap) {

+            var id = depMap.id,

+                mod = registry[id];

+

+            if (!mod) {

+                mod = registry[id] = new context.Module(depMap);

+            }

+

+            return mod;

+        }

+

+        function on(depMap, name, fn) {

+            var id = depMap.id,

+                mod = registry[id];

+

+            if (hasProp(defined, id) &&

+                (!mod || mod.defineEmitComplete)) {

+                if (name === 'defined') {

+                    fn(defined[id]);

+                }

+            } else {

+                getModule(depMap).on(name, fn);

+            }

+        }

+

+        function onError(err, errback) {

+            var ids = err.requireModules,

+                notified = false;

+

+            if (errback) {

+                errback(err);

+            } else {

+                each(ids, function (id) {

+                    var mod = registry[id];

+                    if (mod) {

+                        //Set error on module, so it skips timeout checks.

+                        mod.error = err;

+                        if (mod.events.error) {

+                            notified = true;

+                            mod.emit('error', err);

+                        }

+                    }

+                });

+

+                if (!notified) {

+                    req.onError(err);

+                }

+            }

+        }

+

+        /**

+         * Internal method to transfer globalQueue items to this context's

+         * defQueue.

+         */

+        function takeGlobalQueue() {

+            //Push all the globalDefQueue items into the context's defQueue

+            if (globalDefQueue.length) {

+                //Array splice in the values since the context code has a

+                //local var ref to defQueue, so cannot just reassign the one

+                //on context.

+                apsp.apply(defQueue,

+                           [defQueue.length - 1, 0].concat(globalDefQueue));

+                globalDefQueue = [];

+            }

+        }

+

+        /**

+         * Helper function that creates a require function object to give to

+         * modules that ask for it as a dependency. It needs to be specific

+         * per module because of the implication of path mappings that may

+         * need to be relative to the module name.

+         */

+        function makeRequire(mod, enableBuildCallback, altRequire) {

+            var relMap = mod && mod.map,

+                modRequire = makeContextModuleFunc(altRequire || context.require,

+                                                   relMap,

+                                                   enableBuildCallback);

+

+            addRequireMethods(modRequire, context, relMap);

+            modRequire.isBrowser = isBrowser;

+

+            return modRequire;

+        }

+

+        handlers = {

+            'require': function (mod) {

+                return makeRequire(mod);

+            },

+            'exports': function (mod) {

+                mod.usingExports = true;

+                if (mod.map.isDefine) {

+                    return (mod.exports = defined[mod.map.id] = {});

+                }

+            },

+            'module': function (mod) {

+                return (mod.module = {

+                    id: mod.map.id,

+                    uri: mod.map.url,

+                    config: function () {

+                        return (config.config && config.config[mod.map.id]) || {};

+                    },

+                    exports: defined[mod.map.id]

+                });

+            }

+        };

+

+        function removeWaiting(id) {

+            //Clean up machinery used for waiting modules.

+            delete registry[id];

+

+            each(waitAry, function (mod, i) {

+                if (mod.map.id === id) {

+                    waitAry.splice(i, 1);

+                    if (!mod.defined) {

+                        context.waitCount -= 1;

+                    }

+                    return true;

+                }

+            });

+        }

+

+        function findCycle(mod, traced) {

+            var id = mod.map.id,

+                depArray = mod.depMaps,

+                foundModule;

+

+            //Do not bother with unitialized modules or not yet enabled

+            //modules.

+            if (!mod.inited) {

+                return;

+            }

+

+            //Found the cycle.

+            if (traced[id]) {

+                return mod;

+            }

+

+            traced[id] = true;

+

+            //Trace through the dependencies.

+            each(depArray, function (depMap) {

+                var depId = depMap.id,

+                    depMod = registry[depId];

+

+                if (!depMod) {

+                    return;

+                }

+

+                if (!depMod.inited || !depMod.enabled) {

+                    //Dependency is not inited, so this cannot

+                    //be used to determine a cycle.

+                    foundModule = null;

+                    delete traced[id];

+                    return true;

+                }

+

+                //mixin traced to a new object for each dependency, so that

+                //sibling dependencies in this object to not generate a

+                //false positive match on a cycle. Ideally an Object.create

+                //type of prototype delegation would be used here, but

+                //optimizing for file size vs. execution speed since hopefully

+                //the trees are small for circular dependency scans relative

+                //to the full app perf.

+                return (foundModule = findCycle(depMod, mixin({}, traced)));

+            });

+

+            return foundModule;

+        }

+

+        function forceExec(mod, traced, uninited) {

+            var id = mod.map.id,

+                depArray = mod.depMaps;

+

+            if (!mod.inited || !mod.map.isDefine) {

+                return;

+            }

+

+            if (traced[id]) {

+                return defined[id];

+            }

+

+            traced[id] = mod;

+

+            each(depArray, function(depMap) {

+                var depId = depMap.id,

+                    depMod = registry[depId],

+                    value;

+

+                if (handlers[depId]) {

+                    return;

+                }

+

+                if (depMod) {

+                    if (!depMod.inited || !depMod.enabled) {

+                        //Dependency is not inited,

+                        //so this module cannot be

+                        //given a forced value yet.

+                        uninited[id] = true;

+                        return;

+                    }

+

+                    //Get the value for the current dependency

+                    value = forceExec(depMod, traced, uninited);

+

+                    //Even with forcing it may not be done,

+                    //in particular if the module is waiting

+                    //on a plugin resource.

+                    if (!uninited[depId]) {

+                        mod.defineDepById(depId, value);

+                    }

+                }

+            });

+

+            mod.check(true);

+

+            return defined[id];

+        }

+

+        function modCheck(mod) {

+            mod.check();

+        }

+

+        function checkLoaded() {

+            var waitInterval = config.waitSeconds * 1000,

+                //It is possible to disable the wait interval by using waitSeconds of 0.

+                expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(),

+                noLoads = [],

+                stillLoading = false,

+                needCycleCheck = true,

+                map, modId, err, usingPathFallback;

+

+            //Do not bother if this call was a result of a cycle break.

+            if (inCheckLoaded) {

+                return;

+            }

+

+            inCheckLoaded = true;

+

+            //Figure out the state of all the modules.

+            eachProp(registry, function (mod) {

+                map = mod.map;

+                modId = map.id;

+

+                //Skip things that are not enabled or in error state.

+                if (!mod.enabled) {

+                    return;

+                }

+

+                if (!mod.error) {

+                    //If the module should be executed, and it has not

+                    //been inited and time is up, remember it.

+                    if (!mod.inited && expired) {

+                        if (hasPathFallback(modId)) {

+                            usingPathFallback = true;

+                            stillLoading = true;

+                        } else {

+                            noLoads.push(modId);

+                            removeScript(modId);

+                        }

+                    } else if (!mod.inited && mod.fetched && map.isDefine) {

+                        stillLoading = true;

+                        if (!map.prefix) {

+                            //No reason to keep looking for unfinished

+                            //loading. If the only stillLoading is a

+                            //plugin resource though, keep going,

+                            //because it may be that a plugin resource

+                            //is waiting on a non-plugin cycle.

+                            return (needCycleCheck = false);

+                        }

+                    }

+                }

+            });

+

+            if (expired && noLoads.length) {

+                //If wait time expired, throw error of unloaded modules.

+                err = makeError('timeout', 'Load timeout for modules: ' + noLoads, null, noLoads);

+                err.contextName = context.contextName;

+                return onError(err);

+            }

+

+            //Not expired, check for a cycle.

+            if (needCycleCheck) {

+

+                each(waitAry, function (mod) {

+                    if (mod.defined) {

+                        return;

+                    }

+

+                    var cycleMod = findCycle(mod, {}),

+                        traced = {};

+

+                    if (cycleMod) {

+                        forceExec(cycleMod, traced, {});

+

+                        //traced modules may have been

+                        //removed from the registry, but

+                        //their listeners still need to

+                        //be called.

+                        eachProp(traced, modCheck);

+                    }

+                });

+

+                //Now that dependencies have

+                //been satisfied, trigger the

+                //completion check that then

+                //notifies listeners.

+                eachProp(registry, modCheck);

+            }

+

+            //If still waiting on loads, and the waiting load is something

+            //other than a plugin resource, or there are still outstanding

+            //scripts, then just try back later.

+            if ((!expired || usingPathFallback) && stillLoading) {

+                //Something is still waiting to load. Wait for it, but only

+                //if a timeout is not already in effect.

+                if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) {

+                    checkLoadedTimeoutId = setTimeout(function () {

+                        checkLoadedTimeoutId = 0;

+                        checkLoaded();

+                    }, 50);

+                }

+            }

+

+            inCheckLoaded = false;

+        }

+

+        Module = function (map) {

+            this.events = undefEvents[map.id] || {};

+            this.map = map;

+            this.shim = config.shim[map.id];

+            this.depExports = [];

+            this.depMaps = [];

+            this.depMatched = [];

+            this.pluginMaps = {};

+            this.depCount = 0;

+

+            /* this.exports this.factory

+               this.depMaps = [],

+               this.enabled, this.fetched

+            */

+        };

+

+        Module.prototype = {

+            init: function(depMaps, factory, errback, options) {

+                options = options || {};

+

+                //Do not do more inits if already done. Can happen if there

+                //are multiple define calls for the same module. That is not

+                //a normal, common case, but it is also not unexpected.

+                if (this.inited) {

+                    return;

+                }

+

+                this.factory = factory;

+

+                if (errback) {

+                    //Register for errors on this module.

+                    this.on('error', errback);

+                } else if (this.events.error) {

+                    //If no errback already, but there are error listeners

+                    //on this module, set up an errback to pass to the deps.

+                    errback = bind(this, function (err) {

+                        this.emit('error', err);

+                    });

+                }

+

+                //Do a copy of the dependency array, so that

+                //source inputs are not modified. For example

+                //"shim" deps are passed in here directly, and

+                //doing a direct modification of the depMaps array

+                //would affect that config.

+                this.depMaps = depMaps && depMaps.slice(0);

+                this.depMaps.rjsSkipMap = depMaps.rjsSkipMap;

+

+                this.errback = errback;

+

+                //Indicate this module has be initialized

+                this.inited = true;

+

+                this.ignore = options.ignore;

+

+                //Could have option to init this module in enabled mode,

+                //or could have been previously marked as enabled. However,

+                //the dependencies are not known until init is called. So

+                //if enabled previously, now trigger dependencies as enabled.

+                if (options.enabled || this.enabled) {

+                    //Enable this module and dependencies.

+                    //Will call this.check()

+                    this.enable();

+                } else {

+                    this.check();

+                }

+            },

+

+            defineDepById: function (id, depExports) {

+                var i;

+

+                //Find the index for this dependency.

+                each(this.depMaps, function (map, index) {

+                    if (map.id === id) {

+                        i = index;

+                        return true;

+                    }

+                });

+

+                return this.defineDep(i, depExports);

+            },

+

+            defineDep: function (i, depExports) {

+                //Because of cycles, defined callback for a given

+                //export can be called more than once.

+                if (!this.depMatched[i]) {

+                    this.depMatched[i] = true;

+                    this.depCount -= 1;

+                    this.depExports[i] = depExports;

+                }

+            },

+

+            fetch: function () {

+                if (this.fetched) {

+                    return;

+                }

+                this.fetched = true;

+

+                context.startTime = (new Date()).getTime();

+

+                var map = this.map;

+

+                //If the manager is for a plugin managed resource,

+                //ask the plugin to load it now.

+                if (this.shim) {

+                    makeRequire(this, true)(this.shim.deps || [], bind(this, function () {

+                        return map.prefix ? this.callPlugin() : this.load();

+                    }));

+                } else {

+                    //Regular dependency.

+                    return map.prefix ? this.callPlugin() : this.load();

+                }

+            },

+

+            load: function() {

+                var url = this.map.url;

+

+                //Regular dependency.

+                if (!urlFetched[url]) {

+                    urlFetched[url] = true;

+                    context.load(this.map.id, url);

+                }

+            },

+

+            /**

+             * Checks is the module is ready to define itself, and if so,

+             * define it. If the silent argument is true, then it will just

+             * define, but not notify listeners, and not ask for a context-wide

+             * check of all loaded modules. That is useful for cycle breaking.

+             */

+            check: function (silent) {

+                if (!this.enabled || this.enabling) {

+                    return;

+                }

+

+                var id = this.map.id,

+                    depExports = this.depExports,

+                    exports = this.exports,

+                    factory = this.factory,

+                    err, cjsModule;

+

+                if (!this.inited) {

+                    this.fetch();

+                } else if (this.error) {

+                    this.emit('error', this.error);

+                } else if (!this.defining) {

+                    //The factory could trigger another require call

+                    //that would result in checking this module to

+                    //define itself again. If already in the process

+                    //of doing that, skip this work.

+                    this.defining = true;

+

+                    if (this.depCount < 1 && !this.defined) {

+                        if (isFunction(factory)) {

+                            //If there is an error listener, favor passing

+                            //to that instead of throwing an error.

+                            if (this.events.error) {

+                                try {

+                                    exports = context.execCb(id, factory, depExports, exports);

+                                } catch (e) {

+                                    err = e;

+                                }

+                            } else {

+                                exports = context.execCb(id, factory, depExports, exports);

+                            }

+

+                            if (this.map.isDefine) {

+                                //If setting exports via 'module' is in play,

+                                //favor that over return value and exports. After that,

+                                //favor a non-undefined return value over exports use.

+                                cjsModule = this.module;

+                                if (cjsModule &&

+                                    cjsModule.exports !== undefined &&

+                                    //Make sure it is not already the exports value

+                                    cjsModule.exports !== this.exports) {

+                                    exports = cjsModule.exports;

+                                } else if (exports === undefined && this.usingExports) {

+                                    //exports already set the defined value.

+                                    exports = this.exports;

+                                }

+                            }

+

+                            if (err) {

+                                err.requireMap = this.map;

+                                err.requireModules = [this.map.id];

+                                err.requireType = 'define';

+                                return onError((this.error = err));

+                            }

+

+                        } else {

+                            //Just a literal value

+                            exports = factory;

+                        }

+

+                        this.exports = exports;

+

+                        if (this.map.isDefine && !this.ignore) {

+                            defined[id] = exports;

+

+                            if (req.onResourceLoad) {

+                                req.onResourceLoad(context, this.map, this.depMaps);

+                            }

+                        }

+

+                        //Clean up

+                        delete registry[id];

+

+                        this.defined = true;

+                        context.waitCount -= 1;

+                        if (context.waitCount === 0) {

+                            //Clear the wait array used for cycles.

+                            waitAry = [];

+                        }

+                    }

+

+                    //Finished the define stage. Allow calling check again

+                    //to allow define notifications below in the case of a

+                    //cycle.

+                    this.defining = false;

+

+                    if (!silent) {

+                        if (this.defined && !this.defineEmitted) {

+                            this.defineEmitted = true;

+                            this.emit('defined', this.exports);

+                            this.defineEmitComplete = true;

+                        }

+                    }

+                }

+            },

+

+            callPlugin: function() {

+                var map = this.map,

+                    id = map.id,

+                    pluginMap = makeModuleMap(map.prefix, null, false, true);

+

+                on(pluginMap, 'defined', bind(this, function (plugin) {

+                    var name = this.map.name,

+                        parentName = this.map.parentMap ? this.map.parentMap.name : null,

+                        load, normalizedMap, normalizedMod;

+

+                    //If current map is not normalized, wait for that

+                    //normalized name to load instead of continuing.

+                    if (this.map.unnormalized) {

+                        //Normalize the ID if the plugin allows it.

+                        if (plugin.normalize) {

+                            name = plugin.normalize(name, function (name) {

+                                return normalize(name, parentName, true);

+                            }) || '';

+                        }

+

+                        normalizedMap = makeModuleMap(map.prefix + '!' + name,

+                                                      this.map.parentMap,

+                                                      false,

+                                                      true);

+                        on(normalizedMap,

+                           'defined', bind(this, function (value) {

+                            this.init([], function () { return value; }, null, {

+                                enabled: true,

+                                ignore: true

+                            });

+                        }));

+                        normalizedMod = registry[normalizedMap.id];

+                        if (normalizedMod) {

+                            if (this.events.error) {

+                                normalizedMod.on('error', bind(this, function (err) {

+                                    this.emit('error', err);

+                                }));

+                            }

+                            normalizedMod.enable();

+                        }

+

+                        return;

+                    }

+

+                    load = bind(this, function (value) {

+                        this.init([], function () { return value; }, null, {

+                            enabled: true

+                        });

+                    });

+

+                    load.error = bind(this, function (err) {

+                        this.inited = true;

+                        this.error = err;

+                        err.requireModules = [id];

+

+                        //Remove temp unnormalized modules for this module,

+                        //since they will never be resolved otherwise now.

+                        eachProp(registry, function (mod) {

+                            if (mod.map.id.indexOf(id + '_unnormalized') === 0) {

+                                removeWaiting(mod.map.id);

+                            }

+                        });

+

+                        onError(err);

+                    });

+

+                    //Allow plugins to load other code without having to know the

+                    //context or how to 'complete' the load.

+                    load.fromText = function (moduleName, text) {

+                        /*jslint evil: true */

+                        var hasInteractive = useInteractive;

+

+                        //Turn off interactive script matching for IE for any define

+                        //calls in the text, then turn it back on at the end.

+                        if (hasInteractive) {

+                            useInteractive = false;

+                        }

+

+                        //Prime the system by creating a module instance for

+                        //it.

+                        getModule(makeModuleMap(moduleName));

+

+                        req.exec(text);

+

+                        if (hasInteractive) {

+                            useInteractive = true;

+                        }

+

+                        //Support anonymous modules.

+                        context.completeLoad(moduleName);

+                    };

+

+                    //Use parentName here since the plugin's name is not reliable,

+                    //could be some weird string with no path that actually wants to

+                    //reference the parentName's path.

+                    plugin.load(map.name, makeRequire(map.parentMap, true, function (deps, cb) {

+                        deps.rjsSkipMap = true;

+                        return context.require(deps, cb);

+                    }), load, config);

+                }));

+

+                context.enable(pluginMap, this);

+                this.pluginMaps[pluginMap.id] = pluginMap;

+            },

+

+            enable: function () {

+                this.enabled = true;

+

+                if (!this.waitPushed) {

+                    waitAry.push(this);

+                    context.waitCount += 1;

+                    this.waitPushed = true;

+                }

+

+                //Set flag mentioning that the module is enabling,

+                //so that immediate calls to the defined callbacks

+                //for dependencies do not trigger inadvertent load

+                //with the depCount still being zero.

+                this.enabling = true;

+

+                //Enable each dependency

+                each(this.depMaps, bind(this, function (depMap, i) {

+                    var id, mod, handler;

+

+                    if (typeof depMap === 'string') {

+                        //Dependency needs to be converted to a depMap

+                        //and wired up to this module.

+                        depMap = makeModuleMap(depMap,

+                                               (this.map.isDefine ? this.map : this.map.parentMap),

+                                               false,

+                                               !this.depMaps.rjsSkipMap);

+                        this.depMaps[i] = depMap;

+

+                        handler = handlers[depMap.id];

+

+                        if (handler) {

+                            this.depExports[i] = handler(this);

+                            return;

+                        }

+

+                        this.depCount += 1;

+

+                        on(depMap, 'defined', bind(this, function (depExports) {

+                            this.defineDep(i, depExports);

+                            this.check();

+                        }));

+

+                        if (this.errback) {

+                            on(depMap, 'error', this.errback);

+                        }

+                    }

+

+                    id = depMap.id;

+                    mod = registry[id];

+

+                    //Skip special modules like 'require', 'exports', 'module'

+                    //Also, don't call enable if it is already enabled,

+                    //important in circular dependency cases.

+                    if (!handlers[id] && mod && !mod.enabled) {

+                        context.enable(depMap, this);

+                    }

+                }));

+

+                //Enable each plugin that is used in

+                //a dependency

+                eachProp(this.pluginMaps, bind(this, function (pluginMap) {

+                    var mod = registry[pluginMap.id];

+                    if (mod && !mod.enabled) {

+                        context.enable(pluginMap, this);

+                    }

+                }));

+

+                this.enabling = false;

+

+                this.check();

+            },

+

+            on: function(name, cb) {

+                var cbs = this.events[name];

+                if (!cbs) {

+                    cbs = this.events[name] = [];

+                }

+                cbs.push(cb);

+            },

+

+            emit: function (name, evt) {

+                each(this.events[name], function (cb) {

+                    cb(evt);

+                });

+                if (name === 'error') {

+                    //Now that the error handler was triggered, remove

+                    //the listeners, since this broken Module instance

+                    //can stay around for a while in the registry/waitAry.

+                    delete this.events[name];

+                }

+            }

+        };

+

+        function callGetModule(args) {

+            getModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]);

+        }

+

+        function removeListener(node, func, name, ieName) {

+            //Favor detachEvent because of IE9

+            //issue, see attachEvent/addEventListener comment elsewhere

+            //in this file.

+            if (node.detachEvent && !isOpera) {

+                //Probably IE. If not it will throw an error, which will be

+                //useful to know.

+                if (ieName) {

+                    node.detachEvent(ieName, func);

+                }

+            } else {

+                node.removeEventListener(name, func, false);

+            }

+        }

+

+        /**

+         * Given an event from a script node, get the requirejs info from it,

+         * and then removes the event listeners on the node.

+         * @param {Event} evt

+         * @returns {Object}

+         */

+        function getScriptData(evt) {

+            //Using currentTarget instead of target for Firefox 2.0's sake. Not

+            //all old browsers will be supported, but this one was easy enough

+            //to support and still makes sense.

+            var node = evt.currentTarget || evt.srcElement;

+

+            //Remove the listeners once here.

+            removeListener(node, context.onScriptLoad, 'load', 'onreadystatechange');

+            removeListener(node, context.onScriptError, 'error');

+

+            return {

+                node: node,

+                id: node && node.getAttribute('data-requiremodule')

+            };

+        }

+

+        return (context = {

+            config: config,

+            contextName: contextName,

+            registry: registry,

+            defined: defined,

+            urlFetched: urlFetched,

+            waitCount: 0,

+            defQueue: defQueue,

+            Module: Module,

+            makeModuleMap: makeModuleMap,

+

+            /**

+             * Set a configuration for the context.

+             * @param {Object} cfg config object to integrate.

+             */

+            configure: function (cfg) {

+                //Make sure the baseUrl ends in a slash.

+                if (cfg.baseUrl) {

+                    if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== '/') {

+                        cfg.baseUrl += '/';

+                    }

+                }

+

+                //Save off the paths and packages since they require special processing,

+                //they are additive.

+                var pkgs = config.pkgs,

+                    shim = config.shim,

+                    paths = config.paths,

+                    map = config.map;

+

+                //Mix in the config values, favoring the new values over

+                //existing ones in context.config.

+                mixin(config, cfg, true);

+

+                //Merge paths.

+                config.paths = mixin(paths, cfg.paths, true);

+

+                //Merge map

+                if (cfg.map) {

+                    config.map = mixin(map || {}, cfg.map, true, true);

+                }

+

+                //Merge shim

+                if (cfg.shim) {

+                    eachProp(cfg.shim, function (value, id) {

+                        //Normalize the structure

+                        if (isArray(value)) {

+                            value = {

+                                deps: value

+                            };

+                        }

+                        if (value.exports && !value.exports.__buildReady) {

+                            value.exports = context.makeShimExports(value.exports);

+                        }

+                        shim[id] = value;

+                    });

+                    config.shim = shim;

+                }

+

+                //Adjust packages if necessary.

+                if (cfg.packages) {

+                    each(cfg.packages, function (pkgObj) {

+                        var location;

+

+                        pkgObj = typeof pkgObj === 'string' ? { name: pkgObj } : pkgObj;

+                        location = pkgObj.location;

+

+                        //Create a brand new object on pkgs, since currentPackages can

+                        //be passed in again, and config.pkgs is the internal transformed

+                        //state for all package configs.

+                        pkgs[pkgObj.name] = {

+                            name: pkgObj.name,

+                            location: location || pkgObj.name,

+                            //Remove leading dot in main, so main paths are normalized,

+                            //and remove any trailing .js, since different package

+                            //envs have different conventions: some use a module name,

+                            //some use a file name.

+                            main: (pkgObj.main || 'main')

+                                  .replace(currDirRegExp, '')

+                                  .replace(jsSuffixRegExp, '')

+                        };

+                    });

+

+                    //Done with modifications, assing packages back to context config

+                    config.pkgs = pkgs;

+                }

+

+                //If there are any "waiting to execute" modules in the registry,

+                //update the maps for them, since their info, like URLs to load,

+                //may have changed.

+                eachProp(registry, function (mod, id) {

+                    mod.map = makeModuleMap(id);

+                });

+

+                //If a deps array or a config callback is specified, then call

+                //require with those args. This is useful when require is defined as a

+                //config object before require.js is loaded.

+                if (cfg.deps || cfg.callback) {

+                    context.require(cfg.deps || [], cfg.callback);

+                }

+            },

+

+            makeShimExports: function (exports) {

+                var func;

+                if (typeof exports === 'string') {

+                    func = function () {

+                        return getGlobal(exports);

+                    };

+                    //Save the exports for use in nodefine checking.

+                    func.exports = exports;

+                    return func;

+                } else {

+                    return function () {

+                        return exports.apply(global, arguments);

+                    };

+                }

+            },

+

+            requireDefined: function (id, relMap) {

+                return hasProp(defined, makeModuleMap(id, relMap, false, true).id);

+            },

+

+            requireSpecified: function (id, relMap) {

+                id = makeModuleMap(id, relMap, false, true).id;

+                return hasProp(defined, id) || hasProp(registry, id);

+            },

+

+            require: function (deps, callback, errback, relMap) {

+                var moduleName, id, map, requireMod, args;

+                if (typeof deps === 'string') {

+                    if (isFunction(callback)) {

+                        //Invalid call

+                        return onError(makeError('requireargs', 'Invalid require call'), errback);

+                    }

+

+                    //Synchronous access to one module. If require.get is

+                    //available (as in the Node adapter), prefer that.

+                    //In this case deps is the moduleName and callback is

+                    //the relMap

+                    if (req.get) {

+                        return req.get(context, deps, callback);

+                    }

+

+                    //Just return the module wanted. In this scenario, the

+                    //second arg (if passed) is just the relMap.

+                    moduleName = deps;

+                    relMap = callback;

+

+                    //Normalize module name, if it contains . or ..

+                    map = makeModuleMap(moduleName, relMap, false, true);

+                    id = map.id;

+

+                    if (!hasProp(defined, id)) {

+                        return onError(makeError('notloaded', 'Module name "' +

+                                    id +

+                                    '" has not been loaded yet for context: ' +

+                                    contextName));

+                    }

+                    return defined[id];

+                }

+

+                //Callback require. Normalize args. if callback or errback is

+                //not a function, it means it is a relMap. Test errback first.

+                if (errback && !isFunction(errback)) {

+                    relMap = errback;

+                    errback = undefined;

+                }

+                if (callback && !isFunction(callback)) {

+                    relMap = callback;

+                    callback = undefined;

+                }

+

+                //Any defined modules in the global queue, intake them now.

+                takeGlobalQueue();

+

+                //Make sure any remaining defQueue items get properly processed.

+                while (defQueue.length) {

+                    args = defQueue.shift();

+                    if (args[0] === null) {

+                        return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1]));

+                    } else {

+                        //args are id, deps, factory. Should be normalized by the

+                        //define() function.

+                        callGetModule(args);

+                    }

+                }

+

+                //Mark all the dependencies as needing to be loaded.

+                requireMod = getModule(makeModuleMap(null, relMap));

+

+                requireMod.init(deps, callback, errback, {

+                    enabled: true

+                });

+

+                checkLoaded();

+

+                return context.require;

+            },

+

+            undef: function (id) {

+                var map = makeModuleMap(id, null, true),

+                    mod = registry[id];

+

+                delete defined[id];

+                delete urlFetched[map.url];

+                delete undefEvents[id];

+

+                if (mod) {

+                    //Hold on to listeners in case the

+                    //module will be attempted to be reloaded

+                    //using a different config.

+                    if (mod.events.defined) {

+                        undefEvents[id] = mod.events;

+                    }

+

+                    removeWaiting(id);

+                }

+            },

+

+            /**

+             * Called to enable a module if it is still in the registry

+             * awaiting enablement. parent module is passed in for context,

+             * used by the optimizer.

+             */

+            enable: function (depMap, parent) {

+                var mod = registry[depMap.id];

+                if (mod) {

+                    getModule(depMap).enable();

+                }

+            },

+

+            /**

+             * Internal method used by environment adapters to complete a load event.

+             * A load event could be a script load or just a load pass from a synchronous

+             * load call.

+             * @param {String} moduleName the name of the module to potentially complete.

+             */

+            completeLoad: function (moduleName) {

+                var shim = config.shim[moduleName] || {},

+                shExports = shim.exports && shim.exports.exports,

+                found, args, mod;

+

+                takeGlobalQueue();

+

+                while (defQueue.length) {

+                    args = defQueue.shift();

+                    if (args[0] === null) {

+                        args[0] = moduleName;

+                        //If already found an anonymous module and bound it

+                        //to this name, then this is some other anon module

+                        //waiting for its completeLoad to fire.

+                        if (found) {

+                            break;

+                        }

+                        found = true;

+                    } else if (args[0] === moduleName) {

+                        //Found matching define call for this script!

+                        found = true;

+                    }

+

+                    callGetModule(args);

+                }

+

+                //Do this after the cycle of callGetModule in case the result

+                //of those calls/init calls changes the registry.

+                mod = registry[moduleName];

+

+                if (!found &&

+                    !defined[moduleName] &&

+                    mod && !mod.inited) {

+                    if (config.enforceDefine && (!shExports || !getGlobal(shExports))) {

+                        if (hasPathFallback(moduleName)) {

+                            return;

+                        } else {

+                            return onError(makeError('nodefine',

+                                             'No define call for ' + moduleName,

+                                             null,

+                                             [moduleName]));

+                        }

+                    } else {

+                        //A script that does not call define(), so just simulate

+                        //the call for it.

+                        callGetModule([moduleName, (shim.deps || []), shim.exports]);

+                    }

+                }

+

+                checkLoaded();

+            },

+

+            /**

+             * Converts a module name + .extension into an URL path.

+             * *Requires* the use of a module name. It does not support using

+             * plain URLs like nameToUrl.

+             */

+            toUrl: function (moduleNamePlusExt, relModuleMap) {

+                var index = moduleNamePlusExt.lastIndexOf('.'),

+                    ext = null;

+

+                if (index !== -1) {

+                    ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length);

+                    moduleNamePlusExt = moduleNamePlusExt.substring(0, index);

+                }

+

+                return context.nameToUrl(moduleNamePlusExt, ext, relModuleMap);

+            },

+

+            /**

+             * Converts a module name to a file path. Supports cases where

+             * moduleName may actually be just an URL.

+             */

+            nameToUrl: function (moduleName, ext, relModuleMap) {

+                var paths, pkgs, pkg, pkgPath, syms, i, parentModule, url,

+                    parentPath;

+

+                //Normalize module name if have a base relative module name to work from.

+                moduleName = normalize(moduleName, relModuleMap && relModuleMap.id, true);

+

+                //If a colon is in the URL, it indicates a protocol is used and it is just

+                //an URL to a file, or if it starts with a slash, contains a query arg (i.e. ?)

+                //or ends with .js, then assume the user meant to use an url and not a module id.

+                //The slash is important for protocol-less URLs as well as full paths.

+                if (req.jsExtRegExp.test(moduleName)) {

+                    //Just a plain path, not module name lookup, so just return it.

+                    //Add extension if it is included. This is a bit wonky, only non-.js things pass

+                    //an extension, this method probably needs to be reworked.

+                    url = moduleName + (ext || '');

+                } else {

+                    //A module that needs to be converted to a path.

+                    paths = config.paths;

+                    pkgs = config.pkgs;

+

+                    syms = moduleName.split('/');

+                    //For each module name segment, see if there is a path

+                    //registered for it. Start with most specific name

+                    //and work up from it.

+                    for (i = syms.length; i > 0; i -= 1) {

+                        parentModule = syms.slice(0, i).join('/');

+                        pkg = pkgs[parentModule];

+                        parentPath = paths[parentModule];

+                        if (parentPath) {

+                            //If an array, it means there are a few choices,

+                            //Choose the one that is desired

+                            if (isArray(parentPath)) {

+                                parentPath = parentPath[0];

+                            }

+                            syms.splice(0, i, parentPath);

+                            break;

+                        } else if (pkg) {

+                            //If module name is just the package name, then looking

+                            //for the main module.

+                            if (moduleName === pkg.name) {

+                                pkgPath = pkg.location + '/' + pkg.main;

+                            } else {

+                                pkgPath = pkg.location;

+                            }

+                            syms.splice(0, i, pkgPath);

+                            break;

+                        }

+                    }

+

+                    //Join the path parts together, then figure out if baseUrl is needed.

+                    url = syms.join('/') + (ext || '.js')+'?random='+Math.random();

+                    url = (url.charAt(0) === '/' || url.match(/^[\w\+\.\-]+:/) ? '' : config.baseUrl) + url;

+                }

+

+                return config.urlArgs ? url +

+                                        ((url.indexOf('?') === -1 ? '?' : '&') +

+                                         config.urlArgs) : url;

+            },

+

+            //Delegates to req.load. Broken out as a separate function to

+            //allow overriding in the optimizer.

+            load: function (id, url) {

+                req.load(context, id, url);

+            },

+

+            /**

+             * Executes a module callack function. Broken out as a separate function

+             * solely to allow the build system to sequence the files in the built

+             * layer in the right sequence.

+             *

+             * @private

+             */

+            execCb: function (name, callback, args, exports) {

+                return callback.apply(exports, args);

+            },

+

+            /**

+             * callback for script loads, used to check status of loading.

+             *

+             * @param {Event} evt the event from the browser for the script

+             * that was loaded.

+             */

+            onScriptLoad: function (evt) {

+                //Using currentTarget instead of target for Firefox 2.0's sake. Not

+                //all old browsers will be supported, but this one was easy enough

+                //to support and still makes sense.

+                if (evt.type === 'load' ||

+                    (readyRegExp.test((evt.currentTarget || evt.srcElement).readyState))) {

+                    //Reset interactive script so a script node is not held onto for

+                    //to long.

+                    interactiveScript = null;

+

+                    //Pull out the name of the module and the context.

+                    var data = getScriptData(evt);

+                    context.completeLoad(data.id);

+                }

+            },

+

+            /**

+             * Callback for script errors.

+             */

+            onScriptError: function (evt) {

+                var data = getScriptData(evt);

+                if (!hasPathFallback(data.id)) {

+                    return onError(makeError('scripterror', 'Script error', evt, [data.id]));

+                }

+            }

+        });

+    }

+

+    /**

+     * Main entry point.

+     *

+     * If the only argument to require is a string, then the module that

+     * is represented by that string is fetched for the appropriate context.

+     *

+     * If the first argument is an array, then it will be treated as an array

+     * of dependency string names to fetch. An optional function callback can

+     * be specified to execute when all of those dependencies are available.

+     *

+     * Make a local req variable to help Caja compliance (it assumes things

+     * on a require that are not standardized), and to give a short

+     * name for minification/local scope use.

+     */

+    req = requirejs = function (deps, callback, errback, optional) {

+

+        //Find the right context, use default

+        var contextName = defContextName,

+            context, config;

+

+        // Determine if have config object in the call.

+        if (!isArray(deps) && typeof deps !== 'string') {

+            // deps is a config object

+            config = deps;

+            if (isArray(callback)) {

+                // Adjust args if there are dependencies

+                deps = callback;

+                callback = errback;

+                errback = optional;

+            } else {

+                deps = [];

+            }

+        }

+

+        if (config && config.context) {

+            contextName = config.context;

+        }

+

+        context = contexts[contextName];

+        if (!context) {

+            context = contexts[contextName] = req.s.newContext(contextName);

+        }

+

+        if (config) {

+            context.configure(config);

+        }

+

+        return context.require(deps, callback, errback);

+    };

+

+    /**

+     * Support require.config() to make it easier to cooperate with other

+     * AMD loaders on globally agreed names.

+     */

+    req.config = function (config) {

+        return req(config);

+    };

+

+    /**

+     * Export require as a global, but only if it does not already exist.

+     */

+    if (!require) {

+        require = req;

+    }

+

+    req.version = version;

+

+    //Used to filter out dependencies that are already paths.

+    req.jsExtRegExp = /^\/|:|\?|\.js$/;

+    req.isBrowser = isBrowser;

+    s = req.s = {

+        contexts: contexts,

+        newContext: newContext

+    };

+

+    //Create default context.

+    req({});

+

+    //Exports some context-sensitive methods on global require, using

+    //default context if no context specified.

+    addRequireMethods(req);

+

+    if (isBrowser) {

+        head = s.head = document.getElementsByTagName('head')[0];

+        //If BASE tag is in play, using appendChild is a problem for IE6.

+        //When that browser dies, this can be removed. Details in this jQuery bug:

+        //http://dev.jquery.com/ticket/2709

+        baseElement = document.getElementsByTagName('base')[0];

+        if (baseElement) {

+            head = s.head = baseElement.parentNode;

+        }

+    }

+

+    /**

+     * Any errors that require explicitly generates will be passed to this

+     * function. Intercept/override it if you want custom error handling.

+     * @param {Error} err the error object.

+     */

+    req.onError = function (err) {

+        throw err;

+    };

+

+    /**

+     * Does the request to load a module for the browser case.

+     * Make this a separate function to allow other environments

+     * to override it.

+     *

+     * @param {Object} context the require context to find state.

+     * @param {String} moduleName the name of the module.

+     * @param {Object} url the URL to the module.

+     */

+    req.load = function (context, moduleName, url) {

+        var config = (context && context.config) || {},

+            node;

+        if (isBrowser) {

+            //In the browser so use a script tag

+            node = config.xhtml ?

+                   document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script') :

+                   document.createElement('script');

+            node.type = config.scriptType || 'text/javascript';

+            node.charset = 'utf-8';

+

+            node.setAttribute('data-requirecontext', context.contextName);

+            node.setAttribute('data-requiremodule', moduleName);

+

+            //Set up load listener. Test attachEvent first because IE9 has

+            //a subtle issue in its addEventListener and script onload firings

+            //that do not match the behavior of all other browsers with

+            //addEventListener support, which fire the onload event for a

+            //script right after the script execution. See:

+            //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution

+            //UNFORTUNATELY Opera implements attachEvent but does not follow the script

+            //script execution mode.

+            if (node.attachEvent &&

+                //Check if node.attachEvent is artificially added by custom script or

+                //natively supported by browser

+                //read https://github.com/jrburke/requirejs/issues/187

+                //if we can NOT find [native code] then it must NOT natively supported.

+                //in IE8, node.attachEvent does not have toString()

+                //Note the test for "[native code" with no closing brace, see:

+                //https://github.com/jrburke/requirejs/issues/273

+                !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) &&

+                !isOpera) {

+                //Probably IE. IE (at least 6-8) do not fire

+                //script onload right after executing the script, so

+                //we cannot tie the anonymous define call to a name.

+                //However, IE reports the script as being in 'interactive'

+                //readyState at the time of the define call.

+                useInteractive = true;

+

+                node.attachEvent('onreadystatechange', context.onScriptLoad);

+                //It would be great to add an error handler here to catch

+                //404s in IE9+. However, onreadystatechange will fire before

+                //the error handler, so that does not help. If addEvenListener

+                //is used, then IE will fire error before load, but we cannot

+                //use that pathway given the connect.microsoft.com issue

+                //mentioned above about not doing the 'script execute,

+                //then fire the script load event listener before execute

+                //next script' that other browsers do.

+                //Best hope: IE10 fixes the issues,

+                //and then destroys all installs of IE 6-9.

+                //node.attachEvent('onerror', context.onScriptError);

+            } else {

+                node.addEventListener('load', context.onScriptLoad, false);

+                node.addEventListener('error', context.onScriptError, false);

+            }

+            node.src = url;

+

+            //For some cache cases in IE 6-8, the script executes before the end

+            //of the appendChild execution, so to tie an anonymous define

+            //call to the module name (which is stored on the node), hold on

+            //to a reference to this node, but clear after the DOM insertion.

+            currentlyAddingScript = node;

+            if (baseElement) {

+                head.insertBefore(node, baseElement);

+            } else {

+                head.appendChild(node);

+            }

+            currentlyAddingScript = null;

+

+            return node;

+        } else if (isWebWorker) {

+            //In a web worker, use importScripts. This is not a very

+            //efficient use of importScripts, importScripts will block until

+            //its script is downloaded and evaluated. However, if web workers

+            //are in play, the expectation that a build has been done so that

+            //only one script needs to be loaded anyway. This may need to be

+            //reevaluated if other use cases become common.

+            importScripts(url);

+

+            //Account for anonymous modules

+            context.completeLoad(moduleName);

+        }

+    };

+

+    function getInteractiveScript() {

+        if (interactiveScript && interactiveScript.readyState === 'interactive') {

+            return interactiveScript;

+        }

+

+        eachReverse(scripts(), function (script) {

+            if (script.readyState === 'interactive') {

+                return (interactiveScript = script);

+            }

+        });

+        return interactiveScript;

+    }

+

+    //Look for a data-main script attribute, which could also adjust the baseUrl.

+    if (isBrowser) {

+        //Figure out baseUrl. Get it from the script tag with require.js in it.

+        eachReverse(scripts(), function (script) {

+            //Set the 'head' where we can append children by

+            //using the script's parent.

+            if (!head) {

+                head = script.parentNode;

+            }

+

+            //Look for a data-main attribute to set main script for the page

+            //to load. If it is there, the path to data main becomes the

+            //baseUrl, if it is not already set.

+            dataMain = script.getAttribute('data-main');

+            if (dataMain) {

+

+                //Pull off the directory of data-main for use as the

+                //baseUrl.

+                src = dataMain.split('/');

+                mainScript = src.pop();

+                subPath = src.length ? src.join('/')  + '/' : './';

+

+                //Set final baseUrl if there is not already an explicit one.

+                if (!cfg.baseUrl) {

+                    cfg.baseUrl = subPath;

+                }

+

+                //Strip off any trailing .js since dataMain is now

+                //like a module name.

+                dataMain = mainScript.replace(jsSuffixRegExp, '');

+

+                //Put the data-main script in the files to load.

+                cfg.deps = cfg.deps ? cfg.deps.concat(dataMain) : [dataMain];

+

+                return true;

+            }

+        });

+    }

+

+    /**

+     * The function that handles definitions of modules. Differs from

+     * require() in that a string for the module should be the first argument,

+     * and the function to execute after dependencies are loaded should

+     * return a value to define the module corresponding to the first argument's

+     * name.

+     */

+    define = function (name, deps, callback) {

+        var node, context;

+

+        //Allow for anonymous functions

+        if (typeof name !== 'string') {

+            //Adjust args appropriately

+            callback = deps;

+            deps = name;

+            name = null;

+        }

+

+        //This module may not have dependencies

+        if (!isArray(deps)) {

+            callback = deps;

+            deps = [];

+        }

+

+        //If no name, and callback is a function, then figure out if it a

+        //CommonJS thing with dependencies.

+        if (!deps.length && isFunction(callback)) {

+            //Remove comments from the callback string,

+            //look for require calls, and pull them into the dependencies,

+            //but only if there are function args.

+            if (callback.length) {

+                callback

+                    .toString()

+                    .replace(commentRegExp, '')

+                    .replace(cjsRequireRegExp, function (match, dep) {

+                        deps.push(dep);

+                    });

+

+                //May be a CommonJS thing even without require calls, but still

+                //could use exports, and module. Avoid doing exports and module

+                //work though if it just needs require.

+                //REQUIRES the function to expect the CommonJS variables in the

+                //order listed below.

+                deps = (callback.length === 1 ? ['require'] : ['require', 'exports', 'module']).concat(deps);

+            }

+        }

+

+        //If in IE 6-8 and hit an anonymous define() call, do the interactive

+        //work.

+        if (useInteractive) {

+            node = currentlyAddingScript || getInteractiveScript();

+            if (node) {

+                if (!name) {

+                    name = node.getAttribute('data-requiremodule');

+                }

+                context = contexts[node.getAttribute('data-requirecontext')];

+            }

+        }

+

+        //Always save off evaluating the def call until the script onload handler.

+        //This allows multiple modules to be in a file without prematurely

+        //tracing dependencies, and allows for anonymous module support,

+        //where the module name is not known until the script onload event

+        //occurs. If no context, use the global queue, and get it processed

+        //in the onscript load callback.

+        (context ? context.defQueue : globalDefQueue).push([name, deps, callback]);

+    };

+

+    define.amd = {

+        jQuery: true

+    };

+

+

+    /**

+     * Executes the text. Normally just uses eval, but can be modified

+     * to use a better, environment-specific call. Only used for transpiling

+     * loader plugins, not for plain JS modules.

+     * @param {String} text the text to execute/evaluate.

+     */

+    req.exec = function (text) {

+        /*jslint evil: true */

+        return eval(text);

+    };

+

+    //Set up with config info.

+    req(cfg);

+}(this));

+/*

+ * jQuery JavaScript Library

+ * http://jquery.com/

+ *

+ * Includes Sizzle.js

+ * http://sizzlejs.com/

+ *

+ * Copyright jQuery Foundation, Inc. and other contributors

+ * Released under the MIT license

+ * http://jquery.org/license

+ *

+ * Date: NULL

+ */

+(function( window, undefined ) {

+

+// Can't do this because several apps including ASP.NET trace

+// the stack via arguments.caller.callee and Firefox dies if

+// you try to trace through "use strict" call chains. (#13335)

+// Support: Firefox 18+

+//"use strict";

+var

+	// The deferred used on DOM ready

+	readyList,

+

+	// A central reference to the root jQuery(document)

+	rootjQuery,

+

+	// Support: IE<10

+	// For `typeof xmlNode.method` instead of `xmlNode.method !== undefined`

+	core_strundefined = typeof undefined,

+

+	// Use the correct document accordingly with window argument (sandbox)

+	location = window.location,

+	document = window.document,

+	docElem = document.documentElement,

+

+	// Map over jQuery in case of overwrite

+	_jQuery = window.jQuery,

+

+	// Map over the $ in case of overwrite

+	_$ = window.$,

+

+	// [[Class]] -> type pairs

+	class2type = {},

+

+	// List of deleted data cache ids, so we can reuse them

+	core_deletedIds = [],

+

+	core_version = "0.0.0",

+

+	// Save a reference to some core methods

+	core_concat = core_deletedIds.concat,

+	core_push = core_deletedIds.push,

+	core_slice = core_deletedIds.slice,

+	core_indexOf = core_deletedIds.indexOf,

+	core_toString = class2type.toString,

+	core_hasOwn = class2type.hasOwnProperty,

+	core_trim = core_version.trim,

+

+	// Define a local copy of jQuery

+	jQuery = function( selector, context ) {

+		// The jQuery object is actually just the init constructor 'enhanced'

+		return new jQuery.fn.init( selector, context, rootjQuery );

+	},

+

+	// Used for matching numbers

+	core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,

+

+	// Used for splitting on whitespace

+	core_rnotwhite = /\S+/g,

+

+	// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)

+	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,

+

+	// A simple way to check for HTML strings

+	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)

+	// Strict HTML recognition (#11290: must start with <)

+	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,

+

+	// Match a standalone tag

+	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,

+

+	// JSON RegExp

+	rvalidchars = /^[\],:{}\s]*$/,

+	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,

+	rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,

+	rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,

+

+	// Matches dashed string for camelizing

+	rmsPrefix = /^-ms-/,

+	rdashAlpha = /-([\da-z])/gi,

+

+	// Used by jQuery.camelCase as callback to replace()

+	fcamelCase = function( all, letter ) {

+		return letter.toUpperCase();

+	},

+

+	// The ready event handler

+	completed = function( event ) {

+

+		// readyState === "complete" is good enough for us to call the dom ready in oldIE

+		if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {

+			detach();

+			jQuery.ready();

+		}

+	},

+	// Clean-up method for dom ready events

+	detach = function() {

+		if ( document.addEventListener ) {

+			document.removeEventListener( "DOMContentLoaded", completed, false );

+			window.removeEventListener( "load", completed, false );

+

+		} else {

+			document.detachEvent( "onreadystatechange", completed );

+			window.detachEvent( "onload", completed );

+		}

+	};

+

+jQuery.fn = jQuery.prototype = {

+	// The current version of jQuery being used

+	jquery: core_version,

+

+	constructor: jQuery,

+	init: function( selector, context, rootjQuery ) {

+		var match, elem;

+

+		// HANDLE: $(""), $(null), $(undefined), $(false)

+		if ( !selector ) {

+			return this;

+		}

+

+		// Handle HTML strings

+		if ( typeof selector === "string" ) {

+			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {

+				// Assume that strings that start and end with <> are HTML and skip the regex check

+				match = [ null, selector, null ];

+

+			} else {

+				match = rquickExpr.exec( selector );

+			}

+

+			// Match html or make sure no context is specified for #id

+			if ( match && (match[1] || !context) ) {

+

+				// HANDLE: $(html) -> $(array)

+				if ( match[1] ) {

+					context = context instanceof jQuery ? context[0] : context;

+

+					// scripts is true for back-compat

+					jQuery.merge( this, jQuery.parseHTML(

+						match[1],

+						context && context.nodeType ? context.ownerDocument || context : document,

+						true

+					) );

+

+					// HANDLE: $(html, props)

+					if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {

+						for ( match in context ) {

+							// Properties of context are called as methods if possible

+							if ( jQuery.isFunction( this[ match ] ) ) {

+								this[ match ]( context[ match ] );

+

+							// ...and otherwise set as attributes

+							} else {

+								this.attr( match, context[ match ] );

+							}

+						}

+					}

+

+					return this;

+

+				// HANDLE: $(#id)

+				} else {

+					elem = document.getElementById( match[2] );

+

+					// Check parentNode to catch when Blackberry 4.6 returns

+					// nodes that are no longer in the document #6963

+					if ( elem && elem.parentNode ) {

+						// Handle the case where IE and Opera return items

+						// by name instead of ID

+						if ( elem.id !== match[2] ) {

+							return rootjQuery.find( selector );

+						}

+

+						// Otherwise, we inject the element directly into the jQuery object

+						this.length = 1;

+						this[0] = elem;

+					}

+

+					this.context = document;

+					this.selector = selector;

+					return this;

+				}

+

+			// HANDLE: $(expr, $(...))

+			} else if ( !context || context.jquery ) {

+				return ( context || rootjQuery ).find( selector );

+

+			// HANDLE: $(expr, context)

+			// (which is just equivalent to: $(context).find(expr)

+			} else {

+				return this.constructor( context ).find( selector );

+			}

+

+		// HANDLE: $(DOMElement)

+		} else if ( selector.nodeType ) {

+			this.context = this[0] = selector;

+			this.length = 1;

+			return this;

+

+		// HANDLE: $(function)

+		// Shortcut for document ready

+		} else if ( jQuery.isFunction( selector ) ) {

+			return rootjQuery.ready( selector );

+		}

+

+		if ( selector.selector !== undefined ) {

+			this.selector = selector.selector;

+			this.context = selector.context;

+		}

+

+		return jQuery.makeArray( selector, this );

+	},

+

+	// Start with an empty selector

+	selector: "",

+

+	// The default length of a jQuery object is 0

+	length: 0,

+

+	toArray: function() {

+		return core_slice.call( this );

+	},

+

+	// Get the Nth element in the matched element set OR

+	// Get the whole matched element set as a clean array

+	get: function( num ) {

+		return num == null ?

+

+			// Return a 'clean' array

+			this.toArray() :

+

+			// Return just the object

+			( num < 0 ? this[ this.length + num ] : this[ num ] );

+	},

+

+	// Take an array of elements and push it onto the stack

+	// (returning the new matched element set)

+	pushStack: function( elems ) {

+

+		// Build a new jQuery matched element set

+		var ret = jQuery.merge( this.constructor(), elems );

+

+		// Add the old object onto the stack (as a reference)

+		ret.prevObject = this;

+		ret.context = this.context;

+

+		// Return the newly-formed element set

+		return ret;

+	},

+

+	// Execute a callback for every element in the matched set.

+	// (You can seed the arguments with an array of args, but this is

+	// only used internally.)

+	each: function( callback, args ) {

+		return jQuery.each( this, callback, args );

+	},

+

+	ready: function( fn ) {

+		// Add the callback

+		jQuery.ready.promise().done( fn );

+

+		return this;

+	},

+

+	slice: function() {

+		return this.pushStack( core_slice.apply( this, arguments ) );

+	},

+

+	first: function() {

+		return this.eq( 0 );

+	},

+

+	last: function() {

+		return this.eq( -1 );

+	},

+

+	eq: function( i ) {

+		var len = this.length,

+			j = +i + ( i < 0 ? len : 0 );

+		return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );

+	},

+

+	map: function( callback ) {

+		return this.pushStack( jQuery.map(this, function( elem, i ) {

+			return callback.call( elem, i, elem );

+		}));

+	},

+

+	end: function() {

+		return this.prevObject || this.constructor(null);

+	},

+

+	// For internal use only.

+	// Behaves like an Array's method, not like a jQuery method.

+	push: core_push,

+	sort: [].sort,

+	splice: [].splice

+};

+

+// Give the init function the jQuery prototype for later instantiation

+jQuery.fn.init.prototype = jQuery.fn;

+

+jQuery.extend = jQuery.fn.extend = function() {

+	var src, copyIsArray, copy, name, options, clone,

+		target = arguments[0] || {},

+		i = 1,

+		length = arguments.length,

+		deep = false;

+

+	// Handle a deep copy situation

+	if ( typeof target === "boolean" ) {

+		deep = target;

+		target = arguments[1] || {};

+		// skip the boolean and the target

+		i = 2;

+	}

+

+	// Handle case when target is a string or something (possible in deep copy)

+	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {

+		target = {};

+	}

+

+	// extend jQuery itself if only one argument is passed

+	if ( length === i ) {

+		target = this;

+		--i;

+	}

+

+	for ( ; i < length; i++ ) {

+		// Only deal with non-null/undefined values

+		if ( (options = arguments[ i ]) != null ) {

+			// Extend the base object

+			for ( name in options ) {

+				src = target[ name ];

+				copy = options[ name ];

+

+				// Prevent never-ending loop

+				if ( target === copy ) {

+					continue;

+				}

+

+				// Recurse if we're merging plain objects or arrays

+				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {

+					if ( copyIsArray ) {

+						copyIsArray = false;

+						clone = src && jQuery.isArray(src) ? src : [];

+

+					} else {

+						clone = src && jQuery.isPlainObject(src) ? src : {};

+					}

+

+					// Never move original objects, clone them

+					target[ name ] = jQuery.extend( deep, clone, copy );

+

+				// Don't bring in undefined values

+				} else if ( copy !== undefined ) {

+					target[ name ] = copy;

+				}

+			}

+		}

+	}

+

+	// Return the modified object

+	return target;

+};

+

+jQuery.extend({

+	// Unique for each copy of jQuery on the page

+	// Non-digits removed to match rinlinejQuery

+	expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ),

+

+	noConflict: function( deep ) {

+		if ( window.$ === jQuery ) {

+			window.$ = _$;

+		}

+

+		if ( deep && window.jQuery === jQuery ) {

+			window.jQuery = _jQuery;

+		}

+

+		return jQuery;

+	},

+

+	// Is the DOM ready to be used? Set to true once it occurs.

+	isReady: false,

+

+	// A counter to track how many items to wait for before

+	// the ready event fires. See #6781

+	readyWait: 1,

+

+	// Hold (or release) the ready event

+	holdReady: function( hold ) {

+		if ( hold ) {

+			jQuery.readyWait++;

+		} else {

+			jQuery.ready( true );

+		}

+	},

+

+	// Handle when the DOM is ready

+	ready: function( wait ) {

+

+		// Abort if there are pending holds or we're already ready

+		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {

+			return;

+		}

+

+		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).

+		if ( !document.body ) {

+			return setTimeout( jQuery.ready );

+		}

+

+		// Remember that the DOM is ready

+		jQuery.isReady = true;

+

+		// If a normal DOM Ready event fired, decrement, and wait if need be

+		if ( wait !== true && --jQuery.readyWait > 0 ) {

+			return;

+		}

+

+		// If there are functions bound, to execute

+		readyList.resolveWith( document, [ jQuery ] );

+

+		// Trigger any bound ready events

+		if ( jQuery.fn.trigger ) {

+			jQuery( document ).trigger("ready").off("ready");

+		}

+	},

+

+	// See test/unit/core.js for details concerning isFunction.

+	// Since version 1.3, DOM methods and functions like alert

+	// aren't supported. They return false on IE (#2968).

+	isFunction: function( obj ) {

+		return jQuery.type(obj) === "function";

+	},

+

+	isArray: Array.isArray || function( obj ) {

+		return jQuery.type(obj) === "array";

+	},

+

+	isWindow: function( obj ) {

+		/* jshint eqeqeq: false */

+		return obj != null && obj == obj.window;

+	},

+

+	isNumeric: function( obj ) {

+		return !isNaN( parseFloat(obj) ) && isFinite( obj );

+	},

+

+	type: function( obj ) {

+		if ( obj == null ) {

+			return String( obj );

+		}

+		return typeof obj === "object" || typeof obj === "function" ?

+			class2type[ core_toString.call(obj) ] || "object" :

+			typeof obj;

+	},

+

+	isPlainObject: function( obj ) {

+		var key;

+

+		// Must be an Object.

+		// Because of IE, we also have to check the presence of the constructor property.

+		// Make sure that DOM nodes and window objects don't pass through, as well

+		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {

+			return false;

+		}

+

+		try {

+			// Not own constructor property must be Object

+			if ( obj.constructor &&

+				!core_hasOwn.call(obj, "constructor") &&

+				!core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {

+				return false;

+			}

+		} catch ( e ) {

+			// IE8,9 Will throw exceptions on certain host objects #9897

+			return false;

+		}

+

+		// Support: IE<9

+		// Handle iteration over inherited properties before own properties.

+		if ( jQuery.support.ownLast ) {

+			for ( key in obj ) {

+				return core_hasOwn.call( obj, key );

+			}

+		}

+

+		// Own properties are enumerated firstly, so to speed up,

+		// if last one is own, then all properties are own.

+		for ( key in obj ) {}

+

+		return key === undefined || core_hasOwn.call( obj, key );

+	},

+

+	isEmptyObject: function( obj ) {

+		var name;

+		for ( name in obj ) {

+			return false;

+		}

+		return true;

+	},

+

+	error: function( msg ) {

+		throw new Error( msg );

+	},

+

+	// data: string of html

+	// context (optional): If specified, the fragment will be created in this context, defaults to document

+	// keepScripts (optional): If true, will include scripts passed in the html string

+	parseHTML: function( data, context, keepScripts ) {

+		if ( !data || typeof data !== "string" ) {

+			return null;

+		}

+		if ( typeof context === "boolean" ) {

+			keepScripts = context;

+			context = false;

+		}

+		context = context || document;

+

+		var parsed = rsingleTag.exec( data ),

+			scripts = !keepScripts && [];

+

+		// Single tag

+		if ( parsed ) {

+			return [ context.createElement( parsed[1] ) ];

+		}

+

+		parsed = jQuery.buildFragment( [ data ], context, scripts );

+		if ( scripts ) {

+			jQuery( scripts ).remove();

+		}

+		return jQuery.merge( [], parsed.childNodes );

+	},

+

+	parseJSON: function( data ) {

+		// Attempt to parse using the native JSON parser first

+		if ( window.JSON && window.JSON.parse ) {

+			return window.JSON.parse( data );

+		}

+

+		if ( data === null ) {

+			return data;

+		}

+

+		if ( typeof data === "string" ) {

+

+			// Make sure leading/trailing whitespace is removed (IE can't handle it)

+			data = jQuery.trim( data );

+

+			if ( data ) {

+				// Make sure the incoming data is actual JSON

+				// Logic borrowed from http://json.org/json2.js

+				if ( rvalidchars.test( data.replace( rvalidescape, "@" )

+					.replace( rvalidtokens, "]" )

+					.replace( rvalidbraces, "")) ) {

+

+					return ( new Function( "return " + data ) )();

+				}

+			}

+		}

+

+		jQuery.error( "Invalid JSON: " + data );

+	},

+

+	// Cross-browser xml parsing

+	parseXML: function( data ) {

+		var xml, tmp;

+		if ( !data || typeof data !== "string" ) {

+			return null;

+		}

+		try {

+			if ( window.DOMParser ) { // Standard

+				tmp = new DOMParser();

+				xml = tmp.parseFromString( data , "text/xml" );

+			} else { // IE

+				xml = new ActiveXObject( "Microsoft.XMLDOM" );

+				xml.async = "false";

+				xml.loadXML( data );

+			}

+		} catch( e ) {

+			xml = undefined;

+		}

+		if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {

+			jQuery.error( "Invalid XML: " + data );

+		}

+		return xml;

+	},

+

+	noop: function() {},

+

+	// Evaluates a script in a global context

+	// Workarounds based on findings by Jim Driscoll

+	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context

+	globalEval: function( data ) {

+		if ( data && jQuery.trim( data ) ) {

+			// We use execScript on Internet Explorer

+			// We use an anonymous function so that context is window

+			// rather than jQuery in Firefox

+			( window.execScript || function( data ) {

+				window[ "eval" ].call( window, data );

+			} )( data );

+		}

+	},

+

+	// Convert dashed to camelCase; used by the css and data modules

+	// Microsoft forgot to hump their vendor prefix (#9572)

+	camelCase: function( string ) {

+		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );

+	},

+

+	nodeName: function( elem, name ) {

+		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();

+	},

+

+	// args is for internal usage only

+	each: function( obj, callback, args ) {

+		var value,

+			i = 0,

+			length = obj.length,

+			isArray = isArraylike( obj );

+

+		if ( args ) {

+			if ( isArray ) {

+				for ( ; i < length; i++ ) {

+					value = callback.apply( obj[ i ], args );

+

+					if ( value === false ) {

+						break;

+					}

+				}

+			} else {

+				for ( i in obj ) {

+					value = callback.apply( obj[ i ], args );

+

+					if ( value === false ) {

+						break;

+					}

+				}

+			}

+

+		// A special, fast, case for the most common use of each

+		} else {

+			if ( isArray ) {

+				for ( ; i < length; i++ ) {

+					value = callback.call( obj[ i ], i, obj[ i ] );

+

+					if ( value === false ) {

+						break;

+					}

+				}

+			} else {

+				for ( i in obj ) {

+					value = callback.call( obj[ i ], i, obj[ i ] );

+

+					if ( value === false ) {

+						break;

+					}

+				}

+			}

+		}

+

+		return obj;

+	},

+

+	// Use native String.trim function wherever possible

+	trim: core_trim && !core_trim.call("\uFEFF\xA0") ?

+		function( text ) {

+			return text == null ?

+				"" :

+				core_trim.call( text );

+		} :

+

+		// Otherwise use our own trimming functionality

+		function( text ) {

+			return text == null ?

+				"" :

+				( text + "" ).replace( rtrim, "" );

+		},

+

+	// results is for internal usage only

+	makeArray: function( arr, results ) {

+		var ret = results || [];

+

+		if ( arr != null ) {

+			if ( isArraylike( Object(arr) ) ) {

+				jQuery.merge( ret,

+					typeof arr === "string" ?

+					[ arr ] : arr

+				);

+			} else {

+				core_push.call( ret, arr );

+			}

+		}

+

+		return ret;

+	},

+

+	inArray: function( elem, arr, i ) {

+		var len;

+

+		if ( arr ) {

+			if ( core_indexOf ) {

+				return core_indexOf.call( arr, elem, i );

+			}

+

+			len = arr.length;

+			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;

+

+			for ( ; i < len; i++ ) {

+				// Skip accessing in sparse arrays

+				if ( i in arr && arr[ i ] === elem ) {

+					return i;

+				}

+			}

+		}

+

+		return -1;

+	},

+

+	merge: function( first, second ) {

+		var l = second.length,

+			i = first.length,

+			j = 0;

+

+		if ( typeof l === "number" ) {

+			for ( ; j < l; j++ ) {

+				first[ i++ ] = second[ j ];

+			}

+		} else {

+			while ( second[j] !== undefined ) {

+				first[ i++ ] = second[ j++ ];

+			}

+		}

+

+		first.length = i;

+

+		return first;

+	},

+

+	grep: function( elems, callback, inv ) {

+		var retVal,

+			ret = [],

+			i = 0,

+			length = elems.length;

+		inv = !!inv;

+

+		// Go through the array, only saving the items

+		// that pass the validator function

+		for ( ; i < length; i++ ) {

+			retVal = !!callback( elems[ i ], i );

+			if ( inv !== retVal ) {

+				ret.push( elems[ i ] );

+			}

+		}

+

+		return ret;

+	},

+

+	// arg is for internal usage only

+	map: function( elems, callback, arg ) {

+		var value,

+			i = 0,

+			length = elems.length,

+			isArray = isArraylike( elems ),

+			ret = [];

+

+		// Go through the array, translating each of the items to their

+		if ( isArray ) {

+			for ( ; i < length; i++ ) {

+				value = callback( elems[ i ], i, arg );

+

+				if ( value != null ) {

+					ret[ ret.length ] = value;

+				}

+			}

+

+		// Go through every key on the object,

+		} else {

+			for ( i in elems ) {

+				value = callback( elems[ i ], i, arg );

+

+				if ( value != null ) {

+					ret[ ret.length ] = value;

+				}

+			}

+		}

+

+		// Flatten any nested arrays

+		return core_concat.apply( [], ret );

+	},

+

+	// A global GUID counter for objects

+	guid: 1,

+

+	// Bind a function to a context, optionally partially applying any

+	// arguments.

+	proxy: function( fn, context ) {

+		var args, proxy, tmp;

+

+		if ( typeof context === "string" ) {

+			tmp = fn[ context ];

+			context = fn;

+			fn = tmp;

+		}

+

+		// Quick check to determine if target is callable, in the spec

+		// this throws a TypeError, but we will just return undefined.

+		if ( !jQuery.isFunction( fn ) ) {

+			return undefined;

+		}

+

+		// Simulated bind

+		args = core_slice.call( arguments, 2 );

+		proxy = function() {

+			return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );

+		};

+

+		// Set the guid of unique handler to the same of original handler, so it can be removed

+		proxy.guid = fn.guid = fn.guid || jQuery.guid++;

+

+		return proxy;

+	},

+

+	// Multifunctional method to get and set values of a collection

+	// The value/s can optionally be executed if it's a function

+	access: function( elems, fn, key, value, chainable, emptyGet, raw ) {

+		var i = 0,

+			length = elems.length,

+			bulk = key == null;

+

+		// Sets many values

+		if ( jQuery.type( key ) === "object" ) {

+			chainable = true;

+			for ( i in key ) {

+				jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );

+			}

+

+		// Sets one value

+		} else if ( value !== undefined ) {

+			chainable = true;

+

+			if ( !jQuery.isFunction( value ) ) {

+				raw = true;

+			}

+

+			if ( bulk ) {

+				// Bulk operations run against the entire set

+				if ( raw ) {

+					fn.call( elems, value );

+					fn = null;

+

+				// ...except when executing function values

+				} else {

+					bulk = fn;

+					fn = function( elem, key, value ) {

+						return bulk.call( jQuery( elem ), value );

+					};

+				}

+			}

+

+			if ( fn ) {

+				for ( ; i < length; i++ ) {

+					fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );

+				}

+			}

+		}

+

+		return chainable ?

+			elems :

+

+			// Gets

+			bulk ?

+				fn.call( elems ) :

+				length ? fn( elems[0], key ) : emptyGet;

+	},

+

+	now: function() {

+		return ( new Date() ).getTime();

+	},

+

+	// A method for quickly swapping in/out CSS properties to get correct calculations.

+	// Note: this method belongs to the css module but it's needed here for the support module.

+	// If support gets modularized, this method should be moved back to the css module.

+	swap: function( elem, options, callback, args ) {

+		var ret, name,

+			old = {};

+

+		// Remember the old values, and insert the new ones

+		for ( name in options ) {

+			old[ name ] = elem.style[ name ];

+			elem.style[ name ] = options[ name ];

+		}

+

+		ret = callback.apply( elem, args || [] );

+

+		// Revert the old values

+		for ( name in options ) {

+			elem.style[ name ] = old[ name ];

+		}

+

+		return ret;

+	}

+});

+

+jQuery.ready.promise = function( obj ) {

+	if ( !readyList ) {

+

+		readyList = jQuery.Deferred();

+

+		// Catch cases where $(document).ready() is called after the browser event has already occurred.

+		// we once tried to use readyState "interactive" here, but it caused issues like the one

+		// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15

+		if ( document.readyState === "complete" ) {

+			// Handle it asynchronously to allow scripts the opportunity to delay ready

+			setTimeout( jQuery.ready );

+

+		// Standards-based browsers support DOMContentLoaded

+		} else if ( document.addEventListener ) {

+			// Use the handy event callback

+			document.addEventListener( "DOMContentLoaded", completed, false );

+

+			// A fallback to window.onload, that will always work

+			window.addEventListener( "load", completed, false );

+

+		// If IE event model is used

+		} else {

+			// Ensure firing before onload, maybe late but safe also for iframes

+			document.attachEvent( "onreadystatechange", completed );

+

+			// A fallback to window.onload, that will always work

+			window.attachEvent( "onload", completed );

+

+			// If IE and not a frame

+			// continually check to see if the document is ready

+			var top = false;

+

+			try {

+				top = window.frameElement == null && document.documentElement;

+			} catch(e) {}

+

+			if ( top && top.doScroll ) {

+				(function doScrollCheck() {

+					if ( !jQuery.isReady ) {

+

+						try {

+							// Use the trick by Diego Perini

+							// http://javascript.nwbox.com/IEContentLoaded/

+							top.doScroll("left");

+						} catch(e) {

+							return setTimeout( doScrollCheck, 50 );

+						}

+

+						// detach all dom ready events

+						detach();

+

+						// and execute any waiting functions

+						jQuery.ready();

+					}

+				})();

+			}

+		}

+	}

+	return readyList.promise( obj );

+};

+

+// Populate the class2type map

+jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {

+	class2type[ "[object " + name + "]" ] = name.toLowerCase();

+});

+

+function isArraylike( obj ) {

+	var length = obj.length,

+		type = jQuery.type( obj );

+

+	if ( jQuery.isWindow( obj ) ) {

+		return false;

+	}

+

+	if ( obj.nodeType === 1 && length ) {

+		return true;

+	}

+

+	return type === "array" || type !== "function" &&

+		( length === 0 ||

+		typeof length === "number" && length > 0 && ( length - 1 ) in obj );

+}

+

+// All jQuery objects should point back to these

+rootjQuery = jQuery(document);

+/*

+ * Sizzle CSS Selector Engine

+ * http://sizzlejs.com/

+ *

+ * Copyright jQuery Foundation, Inc. and other contributors

+ * Released under the MIT license

+ * http://jquery.org/license

+ *

+ * Date: NULL

+ */

+(function( window, undefined ) {

+

+var i,

+	support,

+	cachedruns,

+	Expr,

+	getText,

+	isXML,

+	compile,

+	outermostContext,

+	sortInput,

+

+	// Local document vars

+	setDocument,

+	document,

+	docElem,

+	documentIsHTML,

+	rbuggyQSA,

+	rbuggyMatches,

+	matches,

+	contains,

+

+	// Instance-specific data

+	expando = "sizzle" + -(new Date()),

+	preferredDoc = window.document,

+	dirruns = 0,

+	done = 0,

+	classCache = createCache(),

+	tokenCache = createCache(),

+	compilerCache = createCache(),

+	hasDuplicate = false,

+	sortOrder = function( a, b ) {

+		if ( a === b ) {

+			hasDuplicate = true;

+			return 0;

+		}

+		return 0;

+	},

+

+	// General-purpose constants

+	strundefined = typeof undefined,

+	MAX_NEGATIVE = 1 << 31,

+

+	// Instance methods

+	hasOwn = ({}).hasOwnProperty,

+	arr = [],

+	pop = arr.pop,

+	push_native = arr.push,

+	push = arr.push,

+	slice = arr.slice,

+	// Use a stripped-down indexOf if we can't use a native one

+	indexOf = arr.indexOf || function( elem ) {

+		var i = 0,

+			len = this.length;

+		for ( ; i < len; i++ ) {

+			if ( this[i] === elem ) {

+				return i;

+			}

+		}

+		return -1;

+	},

+

+	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",

+

+	// Regular expressions

+

+	// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace

+	whitespace = "[\\x20\\t\\r\\n\\f]",

+	// http://www.w3.org/TR/css3-syntax/#characters

+	characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",

+

+	// Loosely modeled on CSS identifier characters

+	// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors

+	// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier

+	identifier = characterEncoding.replace( "w", "w#" ),

+

+	// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors

+	attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +

+		"*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",

+

+	// Prefer arguments quoted,

+	//   then not containing pseudos/brackets,

+	//   then attribute selectors/non-parenthetical expressions,

+	//   then anything else

+	// These preferences are here to reduce the number of selectors

+	//   needing tokenize in the PSEUDO preFilter

+	pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",

+

+	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter

+	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),

+

+	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),

+	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),

+

+	rsibling = new RegExp( whitespace + "*[+~]" ),

+	rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*)" + whitespace + "*\\]", "g" ),

+

+	rpseudo = new RegExp( pseudos ),

+	ridentifier = new RegExp( "^" + identifier + "$" ),

+

+	matchExpr = {

+		"ID": new RegExp( "^#(" + characterEncoding + ")" ),

+		"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),

+		"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),

+		"ATTR": new RegExp( "^" + attributes ),

+		"PSEUDO": new RegExp( "^" + pseudos ),

+		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +

+			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +

+			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),

+		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),

+		// For use in libraries implementing .is()

+		// We use this for POS matching in `select`

+		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +

+			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )

+	},

+

+	rnative = /^[^{]+\{\s*\[native \w/,

+

+	// Easily-parseable/retrievable ID or TAG or CLASS selectors

+	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,

+

+	rinputs = /^(?:input|select|textarea|button)$/i,

+	rheader = /^h\d$/i,

+

+	rescape = /'|\\/g,

+

+	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters

+	runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),

+	funescape = function( _, escaped, escapedWhitespace ) {

+		var high = "0x" + escaped - 0x10000;

+		// NaN means non-codepoint

+		// Support: Firefox

+		// Workaround erroneous numeric interpretation of +"0x"

+		return high !== high || escapedWhitespace ?

+			escaped :

+			// BMP codepoint

+			high < 0 ?

+				String.fromCharCode( high + 0x10000 ) :

+				// Supplemental Plane codepoint (surrogate pair)

+				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );

+	};

+

+// Optimize for push.apply( _, NodeList )

+try {

+	push.apply(

+		(arr = slice.call( preferredDoc.childNodes )),

+		preferredDoc.childNodes

+	);

+	// Support: Android<4.0

+	// Detect silently failing push.apply

+	arr[ preferredDoc.childNodes.length ].nodeType;

+} catch ( e ) {

+	push = { apply: arr.length ?

+

+		// Leverage slice if possible

+		function( target, els ) {

+			push_native.apply( target, slice.call(els) );

+		} :

+

+		// Support: IE<9

+		// Otherwise append directly

+		function( target, els ) {

+			var j = target.length,

+				i = 0;

+			// Can't trust NodeList.length

+			while ( (target[j++] = els[i++]) ) {}

+			target.length = j - 1;

+		}

+	};

+}

+

+function Sizzle( selector, context, results, seed ) {

+	var match, elem, m, nodeType,

+		// QSA vars

+		i, groups, old, nid, newContext, newSelector;

+

+	if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {

+		setDocument( context );

+	}

+

+	context = context || document;

+	results = results || [];

+

+	if ( !selector || typeof selector !== "string" ) {

+		return results;

+	}

+

+	if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {

+		return [];

+	}

+

+	if ( documentIsHTML && !seed ) {

+

+		// Shortcuts

+		if ( (match = rquickExpr.exec( selector )) ) {

+			// Speed-up: Sizzle("#ID")

+			if ( (m = match[1]) ) {

+				if ( nodeType === 9 ) {

+					elem = context.getElementById( m );

+					// Check parentNode to catch when Blackberry 4.6 returns

+					// nodes that are no longer in the document #6963

+					if ( elem && elem.parentNode ) {

+						// Handle the case where IE, Opera, and Webkit return items

+						// by name instead of ID

+						if ( elem.id === m ) {

+							results.push( elem );

+							return results;

+						}

+					} else {

+						return results;

+					}

+				} else {

+					// Context is not a document

+					if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&

+						contains( context, elem ) && elem.id === m ) {

+						results.push( elem );

+						return results;

+					}

+				}

+

+			// Speed-up: Sizzle("TAG")

+			} else if ( match[2] ) {

+				push.apply( results, context.getElementsByTagName( selector ) );

+				return results;

+

+			// Speed-up: Sizzle(".CLASS")

+			} else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {

+				push.apply( results, context.getElementsByClassName( m ) );

+				return results;

+			}

+		}

+

+		// QSA path

+		if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {

+			nid = old = expando;

+			newContext = context;

+			newSelector = nodeType === 9 && selector;

+

+			// qSA works strangely on Element-rooted queries

+			// We can work around this by specifying an extra ID on the root

+			// and working up from there (Thanks to Andrew Dupont for the technique)

+			// IE 8 doesn't work on object elements

+			if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {

+				groups = tokenize( selector );

+

+				if ( (old = context.getAttribute("id")) ) {

+					nid = old.replace( rescape, "\\$&" );

+				} else {

+					context.setAttribute( "id", nid );

+				}

+				nid = "[id='" + nid + "'] ";

+

+				i = groups.length;

+				while ( i-- ) {

+					groups[i] = nid + toSelector( groups[i] );

+				}

+				newContext = rsibling.test( selector ) && context.parentNode || context;

+				newSelector = groups.join(",");

+			}

+

+			if ( newSelector ) {

+				try {

+					push.apply( results,

+						newContext.querySelectorAll( newSelector )

+					);

+					return results;

+				} catch(qsaError) {

+				} finally {

+					if ( !old ) {

+						context.removeAttribute("id");

+					}

+				}

+			}

+		}

+	}

+

+	// All others

+	return select( selector.replace( rtrim, "$1" ), context, results, seed );

+}

+

+/**

+ * Create key-value caches of limited size

+ * @returns {Function(string, Object)} Returns the Object data after storing it on itself with

+ *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)

+ *	deleting the oldest entry

+ */

+function createCache() {

+	var keys = [];

+

+	function cache( key, value ) {

+		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)

+		if ( keys.push( key += " " ) > Expr.cacheLength ) {

+			// Only keep the most recent entries

+			delete cache[ keys.shift() ];

+		}

+		return (cache[ key ] = value);

+	}

+	return cache;

+}

+

+/**

+ * Mark a function for special use by Sizzle

+ * @param {Function} fn The function to mark

+ */

+function markFunction( fn ) {

+	fn[ expando ] = true;

+	return fn;

+}

+

+/**

+ * Support testing using an element

+ * @param {Function} fn Passed the created div and expects a boolean result

+ */

+function assert( fn ) {

+	var div = document.createElement("div");

+

+	try {

+		return !!fn( div );

+	} catch (e) {

+		return false;

+	} finally {

+		// Remove from its parent by default

+		if ( div.parentNode ) {

+			div.parentNode.removeChild( div );

+		}

+		// release memory in IE

+		div = null;

+	}

+}

+

+/**

+ * Adds the same handler for all of the specified attrs

+ * @param {String} attrs Pipe-separated list of attributes

+ * @param {Function} handler The method that will be applied

+ */

+function addHandle( attrs, handler ) {

+	var arr = attrs.split("|"),

+		i = attrs.length;

+

+	while ( i-- ) {

+		Expr.attrHandle[ arr[i] ] = handler;

+	}

+}

+

+/**

+ * Checks document order of two siblings

+ * @param {Element} a

+ * @param {Element} b

+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b

+ */

+function siblingCheck( a, b ) {

+	var cur = b && a,

+		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&

+			( ~b.sourceIndex || MAX_NEGATIVE ) -

+			( ~a.sourceIndex || MAX_NEGATIVE );

+

+	// Use IE sourceIndex if available on both nodes

+	if ( diff ) {

+		return diff;

+	}

+

+	// Check if b follows a

+	if ( cur ) {

+		while ( (cur = cur.nextSibling) ) {

+			if ( cur === b ) {

+				return -1;

+			}

+		}

+	}

+

+	return a ? 1 : -1;

+}

+

+/**

+ * Returns a function to use in pseudos for input types

+ * @param {String} type

+ */

+function createInputPseudo( type ) {

+	return function( elem ) {

+		var name = elem.nodeName.toLowerCase();

+		return name === "input" && elem.type === type;

+	};

+}

+

+/**

+ * Returns a function to use in pseudos for buttons

+ * @param {String} type

+ */

+function createButtonPseudo( type ) {

+	return function( elem ) {

+		var name = elem.nodeName.toLowerCase();

+		return (name === "input" || name === "button") && elem.type === type;

+	};

+}

+

+/**

+ * Returns a function to use in pseudos for positionals

+ * @param {Function} fn

+ */

+function createPositionalPseudo( fn ) {

+	return markFunction(function( argument ) {

+		argument = +argument;

+		return markFunction(function( seed, matches ) {

+			var j,

+				matchIndexes = fn( [], seed.length, argument ),

+				i = matchIndexes.length;

+

+			// Match elements found at the specified indexes

+			while ( i-- ) {

+				if ( seed[ (j = matchIndexes[i]) ] ) {

+					seed[j] = !(matches[j] = seed[j]);

+				}

+			}

+		});

+	});

+}

+

+/**

+ * Detect xml

+ * @param {Element|Object} elem An element or a document

+ */

+isXML = Sizzle.isXML = function( elem ) {

+	// documentElement is verified for cases where it doesn't yet exist

+	// (such as loading iframes in IE - #4833)

+	var documentElement = elem && (elem.ownerDocument || elem).documentElement;

+	return documentElement ? documentElement.nodeName !== "HTML" : false;

+};

+

+// Expose support vars for convenience

+support = Sizzle.support = {};

+

+/**

+ * Sets document-related variables once based on the current document

+ * @param {Element|Object} [doc] An element or document object to use to set the document

+ * @returns {Object} Returns the current document

+ */

+setDocument = Sizzle.setDocument = function( node ) {

+	var doc = node ? node.ownerDocument || node : preferredDoc,

+		parent = doc.defaultView;

+

+	// If no document and documentElement is available, return

+	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {

+		return document;

+	}

+

+	// Set our document

+	document = doc;

+	docElem = doc.documentElement;

+

+	// Support tests

+	documentIsHTML = !isXML( doc );

+

+	// Support: IE>8

+	// If iframe document is assigned to "document" variable and if iframe has been reloaded,

+	// IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936

+	// IE6-8 do not support the defaultView property so parent will be undefined

+	if ( parent && parent.attachEvent && parent !== parent.top ) {

+		parent.attachEvent( "onbeforeunload", function() {

+			setDocument();

+		});

+	}

+

+	/* Attributes

+	---------------------------------------------------------------------- */

+

+	// Support: IE<8

+	// Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)

+	support.attributes = assert(function( div ) {

+		div.className = "i";

+		return !div.getAttribute("className");

+	});

+

+	/* getElement(s)By*

+	---------------------------------------------------------------------- */

+

+	// Check if getElementsByTagName("*") returns only elements

+	support.getElementsByTagName = assert(function( div ) {

+		div.appendChild( doc.createComment("") );

+		return !div.getElementsByTagName("*").length;

+	});

+

+	// Check if getElementsByClassName can be trusted

+	support.getElementsByClassName = assert(function( div ) {

+		div.innerHTML = "<div class='a'></div><div class='a i'></div>";

+

+		// Support: Safari<4

+		// Catch class over-caching

+		div.firstChild.className = "i";

+		// Support: Opera<10

+		// Catch gEBCN failure to find non-leading classes

+		return div.getElementsByClassName("i").length === 2;

+	});

+

+	// Support: IE<10

+	// Check if getElementById returns elements by name

+	// The broken getElementById methods don't pick up programatically-set names,

+	// so use a roundabout getElementsByName test

+	support.getById = assert(function( div ) {

+		docElem.appendChild( div ).id = expando;

+		return !doc.getElementsByName || !doc.getElementsByName( expando ).length;

+	});

+

+	// ID find and filter

+	if ( support.getById ) {

+		Expr.find["ID"] = function( id, context ) {

+			if ( typeof context.getElementById !== strundefined && documentIsHTML ) {

+				var m = context.getElementById( id );

+				// Check parentNode to catch when Blackberry 4.6 returns

+				// nodes that are no longer in the document #6963

+				return m && m.parentNode ? [m] : [];

+			}

+		};

+		Expr.filter["ID"] = function( id ) {

+			var attrId = id.replace( runescape, funescape );

+			return function( elem ) {

+				return elem.getAttribute("id") === attrId;

+			};

+		};

+	} else {

+		// Support: IE6/7

+		// getElementById is not reliable as a find shortcut

+		delete Expr.find["ID"];

+

+		Expr.filter["ID"] =  function( id ) {

+			var attrId = id.replace( runescape, funescape );

+			return function( elem ) {

+				var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");

+				return node && node.value === attrId;

+			};

+		};

+	}

+

+	// Tag

+	Expr.find["TAG"] = support.getElementsByTagName ?

+		function( tag, context ) {

+			if ( typeof context.getElementsByTagName !== strundefined ) {

+				return context.getElementsByTagName( tag );

+			}

+		} :

+		function( tag, context ) {

+			var elem,

+				tmp = [],

+				i = 0,

+				results = context.getElementsByTagName( tag );

+

+			// Filter out possible comments

+			if ( tag === "*" ) {

+				while ( (elem = results[i++]) ) {

+					if ( elem.nodeType === 1 ) {

+						tmp.push( elem );

+					}

+				}

+

+				return tmp;

+			}

+			return results;

+		};

+

+	// Class

+	Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {

+		if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {

+			return context.getElementsByClassName( className );

+		}

+	};

+

+	/* QSA/matchesSelector

+	---------------------------------------------------------------------- */

+

+	// QSA and matchesSelector support

+

+	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)

+	rbuggyMatches = [];

+

+	// qSa(:focus) reports false when true (Chrome 21)

+	// We allow this because of a bug in IE8/9 that throws an error

+	// whenever `document.activeElement` is accessed on an iframe

+	// So, we allow :focus to pass through QSA all the time to avoid the IE error

+	// See http://bugs.jquery.com/ticket/13378

+	rbuggyQSA = [];

+

+	if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {

+		// Build QSA regex

+		// Regex strategy adopted from Diego Perini

+		assert(function( div ) {

+			// Select is set to empty string on purpose

+			// This is to test IE's treatment of not explicitly

+			// setting a boolean content attribute,

+			// since its presence should be enough

+			// http://bugs.jquery.com/ticket/12359

+			div.innerHTML = "<select><option selected=''></option></select>";

+

+			// Support: IE8

+			// Boolean attributes and "value" are not treated correctly

+			if ( !div.querySelectorAll("[selected]").length ) {

+				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );

+			}

+

+			// Webkit/Opera - :checked should return selected option elements

+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked

+			// IE8 throws error here and will not see later tests

+			if ( !div.querySelectorAll(":checked").length ) {

+				rbuggyQSA.push(":checked");

+			}

+		});

+

+		assert(function( div ) {

+

+			// Support: Opera 10-12/IE8

+			// ^= $= *= and empty values

+			// Should not select anything

+			// Support: Windows 8 Native Apps

+			// The type attribute is restricted during .innerHTML assignment

+			var input = doc.createElement("input");

+			input.setAttribute( "type", "hidden" );

+			div.appendChild( input ).setAttribute( "t", "" );

+

+			if ( div.querySelectorAll("[t^='']").length ) {

+				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );

+			}

+

+			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)

+			// IE8 throws error here and will not see later tests

+			if ( !div.querySelectorAll(":enabled").length ) {

+				rbuggyQSA.push( ":enabled", ":disabled" );

+			}

+

+			// Opera 10-11 does not throw on post-comma invalid pseudos

+			div.querySelectorAll("*,:x");

+			rbuggyQSA.push(",.*:");

+		});

+	}

+

+	if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector ||

+		docElem.mozMatchesSelector ||

+		docElem.oMatchesSelector ||

+		docElem.msMatchesSelector) )) ) {

+

+		assert(function( div ) {

+			// Check to see if it's possible to do matchesSelector

+			// on a disconnected node (IE 9)

+			support.disconnectedMatch = matches.call( div, "div" );

+

+			// This should fail with an exception

+			// Gecko does not error, returns false instead

+			matches.call( div, "[s!='']:x" );

+			rbuggyMatches.push( "!=", pseudos );

+		});

+	}

+

+	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );

+	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );

+

+	/* Contains

+	---------------------------------------------------------------------- */

+

+	// Element contains another

+	// Purposefully does not implement inclusive descendent

+	// As in, an element does not contain itself

+	contains = rnative.test( docElem.contains ) || docElem.compareDocumentPosition ?

+		function( a, b ) {

+			var adown = a.nodeType === 9 ? a.documentElement : a,

+				bup = b && b.parentNode;

+			return a === bup || !!( bup && bup.nodeType === 1 && (

+				adown.contains ?

+					adown.contains( bup ) :

+					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16

+			));

+		} :

+		function( a, b ) {

+			if ( b ) {

+				while ( (b = b.parentNode) ) {

+					if ( b === a ) {

+						return true;

+					}

+				}

+			}

+			return false;

+		};

+

+	/* Sorting

+	---------------------------------------------------------------------- */

+

+	// Document order sorting

+	sortOrder = docElem.compareDocumentPosition ?

+	function( a, b ) {

+

+		// Flag for duplicate removal

+		if ( a === b ) {

+			hasDuplicate = true;

+			return 0;

+		}

+

+		var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b );

+

+		if ( compare ) {

+			// Disconnected nodes

+			if ( compare & 1 ||

+				(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {

+

+				// Choose the first element that is related to our preferred document

+				if ( a === doc || contains(preferredDoc, a) ) {

+					return -1;

+				}

+				if ( b === doc || contains(preferredDoc, b) ) {

+					return 1;

+				}

+

+				// Maintain original order

+				return sortInput ?

+					( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :

+					0;

+			}

+

+			return compare & 4 ? -1 : 1;

+		}

+

+		// Not directly comparable, sort on existence of method

+		return a.compareDocumentPosition ? -1 : 1;

+	} :

+	function( a, b ) {

+		var cur,

+			i = 0,

+			aup = a.parentNode,

+			bup = b.parentNode,

+			ap = [ a ],

+			bp = [ b ];

+

+		// Exit early if the nodes are identical

+		if ( a === b ) {

+			hasDuplicate = true;

+			return 0;

+

+		// Parentless nodes are either documents or disconnected

+		} else if ( !aup || !bup ) {

+			return a === doc ? -1 :

+				b === doc ? 1 :

+				aup ? -1 :

+				bup ? 1 :

+				sortInput ?

+				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :

+				0;

+

+		// If the nodes are siblings, we can do a quick check

+		} else if ( aup === bup ) {

+			return siblingCheck( a, b );

+		}

+

+		// Otherwise we need full lists of their ancestors for comparison

+		cur = a;

+		while ( (cur = cur.parentNode) ) {

+			ap.unshift( cur );

+		}

+		cur = b;

+		while ( (cur = cur.parentNode) ) {

+			bp.unshift( cur );

+		}

+

+		// Walk down the tree looking for a discrepancy

+		while ( ap[i] === bp[i] ) {

+			i++;

+		}

+

+		return i ?

+			// Do a sibling check if the nodes have a common ancestor

+			siblingCheck( ap[i], bp[i] ) :

+

+			// Otherwise nodes in our document sort first

+			ap[i] === preferredDoc ? -1 :

+			bp[i] === preferredDoc ? 1 :

+			0;

+	};

+

+	return doc;

+};

+

+Sizzle.matches = function( expr, elements ) {

+	return Sizzle( expr, null, null, elements );

+};

+

+Sizzle.matchesSelector = function( elem, expr ) {

+	// Set document vars if needed

+	if ( ( elem.ownerDocument || elem ) !== document ) {

+		setDocument( elem );

+	}

+

+	// Make sure that attribute selectors are quoted

+	expr = expr.replace( rattributeQuotes, "='$1']" );

+

+	if ( support.matchesSelector && documentIsHTML &&

+		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&

+		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {

+

+		try {

+			var ret = matches.call( elem, expr );

+

+			// IE 9's matchesSelector returns false on disconnected nodes

+			if ( ret || support.disconnectedMatch ||

+					// As well, disconnected nodes are said to be in a document

+					// fragment in IE 9

+					elem.document && elem.document.nodeType !== 11 ) {

+				return ret;

+			}

+		} catch(e) {}

+	}

+

+	return Sizzle( expr, document, null, [elem] ).length > 0;

+};

+

+Sizzle.contains = function( context, elem ) {

+	// Set document vars if needed

+	if ( ( context.ownerDocument || context ) !== document ) {

+		setDocument( context );

+	}

+	return contains( context, elem );

+};

+

+Sizzle.attr = function( elem, name ) {

+	// Set document vars if needed

+	if ( ( elem.ownerDocument || elem ) !== document ) {

+		setDocument( elem );

+	}

+

+	var fn = Expr.attrHandle[ name.toLowerCase() ],

+		// Don't get fooled by Object.prototype properties (jQuery #13807)

+		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?

+			fn( elem, name, !documentIsHTML ) :

+			undefined;

+

+	return val === undefined ?

+		support.attributes || !documentIsHTML ?

+			elem.getAttribute( name ) :

+			(val = elem.getAttributeNode(name)) && val.specified ?

+				val.value :

+				null :

+		val;

+};

+

+Sizzle.error = function( msg ) {

+	throw new Error( "Syntax error, unrecognized expression: " + msg );

+};

+

+/**

+ * Document sorting and removing duplicates

+ * @param {ArrayLike} results

+ */

+Sizzle.uniqueSort = function( results ) {

+	var elem,

+		duplicates = [],

+		j = 0,

+		i = 0;

+

+	// Unless we *know* we can detect duplicates, assume their presence

+	hasDuplicate = !support.detectDuplicates;

+	sortInput = !support.sortStable && results.slice( 0 );

+	results.sort( sortOrder );

+

+	if ( hasDuplicate ) {

+		while ( (elem = results[i++]) ) {

+			if ( elem === results[ i ] ) {

+				j = duplicates.push( i );

+			}

+		}

+		while ( j-- ) {

+			results.splice( duplicates[ j ], 1 );

+		}

+	}

+

+	return results;

+};

+

+/**

+ * Utility function for retrieving the text value of an array of DOM nodes

+ * @param {Array|Element} elem

+ */

+getText = Sizzle.getText = function( elem ) {

+	var node,

+		ret = "",

+		i = 0,

+		nodeType = elem.nodeType;

+

+	if ( !nodeType ) {

+		// If no nodeType, this is expected to be an array

+		for ( ; (node = elem[i]); i++ ) {

+			// Do not traverse comment nodes

+			ret += getText( node );

+		}

+	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {

+		// Use textContent for elements

+		// innerText usage removed for consistency of new lines (see #11153)

+		if ( typeof elem.textContent === "string" ) {

+			return elem.textContent;

+		} else {

+			// Traverse its children

+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {

+				ret += getText( elem );

+			}

+		}

+	} else if ( nodeType === 3 || nodeType === 4 ) {

+		return elem.nodeValue;

+	}

+	// Do not include comment or processing instruction nodes

+

+	return ret;

+};

+

+Expr = Sizzle.selectors = {

+

+	// Can be adjusted by the user

+	cacheLength: 50,

+

+	createPseudo: markFunction,

+

+	match: matchExpr,

+

+	attrHandle: {},

+

+	find: {},

+

+	relative: {

+		">": { dir: "parentNode", first: true },

+		" ": { dir: "parentNode" },

+		"+": { dir: "previousSibling", first: true },

+		"~": { dir: "previousSibling" }

+	},

+

+	preFilter: {

+		"ATTR": function( match ) {

+			match[1] = match[1].replace( runescape, funescape );

+

+			// Move the given value to match[3] whether quoted or unquoted

+			match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );

+

+			if ( match[2] === "~=" ) {

+				match[3] = " " + match[3] + " ";

+			}

+

+			return match.slice( 0, 4 );

+		},

+

+		"CHILD": function( match ) {

+			/* matches from matchExpr["CHILD"]

+				1 type (only|nth|...)

+				2 what (child|of-type)

+				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)

+				4 xn-component of xn+y argument ([+-]?\d*n|)

+				5 sign of xn-component

+				6 x of xn-component

+				7 sign of y-component

+				8 y of y-component

+			*/

+			match[1] = match[1].toLowerCase();

+

+			if ( match[1].slice( 0, 3 ) === "nth" ) {

+				// nth-* requires argument

+				if ( !match[3] ) {

+					Sizzle.error( match[0] );

+				}

+

+				// numeric x and y parameters for Expr.filter.CHILD

+				// remember that false/true cast respectively to 0/1

+				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );

+				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );

+

+			// other types prohibit arguments

+			} else if ( match[3] ) {

+				Sizzle.error( match[0] );

+			}

+

+			return match;

+		},

+

+		"PSEUDO": function( match ) {

+			var excess,

+				unquoted = !match[5] && match[2];

+

+			if ( matchExpr["CHILD"].test( match[0] ) ) {

+				return null;

+			}

+

+			// Accept quoted arguments as-is

+			if ( match[3] && match[4] !== undefined ) {

+				match[2] = match[4];

+

+			// Strip excess characters from unquoted arguments

+			} else if ( unquoted && rpseudo.test( unquoted ) &&

+				// Get excess from tokenize (recursively)

+				(excess = tokenize( unquoted, true )) &&

+				// advance to the next closing parenthesis

+				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {

+

+				// excess is a negative index

+				match[0] = match[0].slice( 0, excess );

+				match[2] = unquoted.slice( 0, excess );

+			}

+

+			// Return only captures needed by the pseudo filter method (type and argument)

+			return match.slice( 0, 3 );

+		}

+	},

+

+	filter: {

+

+		"TAG": function( nodeNameSelector ) {

+			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();

+			return nodeNameSelector === "*" ?

+				function() { return true; } :

+				function( elem ) {

+					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;

+				};

+		},

+

+		"CLASS": function( className ) {

+			var pattern = classCache[ className + " " ];

+

+			return pattern ||

+				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&

+				classCache( className, function( elem ) {

+					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );

+				});

+		},

+

+		"ATTR": function( name, operator, check ) {

+			return function( elem ) {

+				var result = Sizzle.attr( elem, name );

+

+				if ( result == null ) {

+					return operator === "!=";

+				}

+				if ( !operator ) {

+					return true;

+				}

+

+				result += "";

+

+				return operator === "=" ? result === check :

+					operator === "!=" ? result !== check :

+					operator === "^=" ? check && result.indexOf( check ) === 0 :

+					operator === "*=" ? check && result.indexOf( check ) > -1 :

+					operator === "$=" ? check && result.slice( -check.length ) === check :

+					operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :

+					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :

+					false;

+			};

+		},

+

+		"CHILD": function( type, what, argument, first, last ) {

+			var simple = type.slice( 0, 3 ) !== "nth",

+				forward = type.slice( -4 ) !== "last",

+				ofType = what === "of-type";

+

+			return first === 1 && last === 0 ?

+

+				// Shortcut for :nth-*(n)

+				function( elem ) {

+					return !!elem.parentNode;

+				} :

+

+				function( elem, context, xml ) {

+					var cache, outerCache, node, diff, nodeIndex, start,

+						dir = simple !== forward ? "nextSibling" : "previousSibling",

+						parent = elem.parentNode,

+						name = ofType && elem.nodeName.toLowerCase(),

+						useCache = !xml && !ofType;

+

+					if ( parent ) {

+

+						// :(first|last|only)-(child|of-type)

+						if ( simple ) {

+							while ( dir ) {

+								node = elem;

+								while ( (node = node[ dir ]) ) {

+									if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {

+										return false;

+									}

+								}

+								// Reverse direction for :only-* (if we haven't yet done so)

+								start = dir = type === "only" && !start && "nextSibling";

+							}

+							return true;

+						}

+

+						start = [ forward ? parent.firstChild : parent.lastChild ];

+

+						// non-xml :nth-child(...) stores cache data on `parent`

+						if ( forward && useCache ) {

+							// Seek `elem` from a previously-cached index

+							outerCache = parent[ expando ] || (parent[ expando ] = {});

+							cache = outerCache[ type ] || [];

+							nodeIndex = cache[0] === dirruns && cache[1];

+							diff = cache[0] === dirruns && cache[2];

+							node = nodeIndex && parent.childNodes[ nodeIndex ];

+

+							while ( (node = ++nodeIndex && node && node[ dir ] ||

+

+								// Fallback to seeking `elem` from the start

+								(diff = nodeIndex = 0) || start.pop()) ) {

+

+								// When found, cache indexes on `parent` and break

+								if ( node.nodeType === 1 && ++diff && node === elem ) {

+									outerCache[ type ] = [ dirruns, nodeIndex, diff ];

+									break;

+								}

+							}

+

+						// Use previously-cached element index if available

+						} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {

+							diff = cache[1];

+

+						// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)

+						} else {

+							// Use the same loop as above to seek `elem` from the start

+							while ( (node = ++nodeIndex && node && node[ dir ] ||

+								(diff = nodeIndex = 0) || start.pop()) ) {

+

+								if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {

+									// Cache the index of each encountered element

+									if ( useCache ) {

+										(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];

+									}

+

+									if ( node === elem ) {

+										break;

+									}

+								}

+							}

+						}

+

+						// Incorporate the offset, then check against cycle size

+						diff -= last;

+						return diff === first || ( diff % first === 0 && diff / first >= 0 );

+					}

+				};

+		},

+

+		"PSEUDO": function( pseudo, argument ) {

+			// pseudo-class names are case-insensitive

+			// http://www.w3.org/TR/selectors/#pseudo-classes

+			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters

+			// Remember that setFilters inherits from pseudos

+			var args,

+				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||

+					Sizzle.error( "unsupported pseudo: " + pseudo );

+

+			// The user may use createPseudo to indicate that

+			// arguments are needed to create the filter function

+			// just as Sizzle does

+			if ( fn[ expando ] ) {

+				return fn( argument );

+			}

+

+			// But maintain support for old signatures

+			if ( fn.length > 1 ) {

+				args = [ pseudo, pseudo, "", argument ];

+				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?

+					markFunction(function( seed, matches ) {

+						var idx,

+							matched = fn( seed, argument ),

+							i = matched.length;

+						while ( i-- ) {

+							idx = indexOf.call( seed, matched[i] );

+							seed[ idx ] = !( matches[ idx ] = matched[i] );

+						}

+					}) :

+					function( elem ) {

+						return fn( elem, 0, args );

+					};

+			}

+

+			return fn;

+		}

+	},

+

+	pseudos: {

+		// Potentially complex pseudos

+		"not": markFunction(function( selector ) {

+			// Trim the selector passed to compile

+			// to avoid treating leading and trailing

+			// spaces as combinators

+			var input = [],

+				results = [],

+				matcher = compile( selector.replace( rtrim, "$1" ) );

+

+			return matcher[ expando ] ?

+				markFunction(function( seed, matches, context, xml ) {

+					var elem,

+						unmatched = matcher( seed, null, xml, [] ),

+						i = seed.length;

+

+					// Match elements unmatched by `matcher`

+					while ( i-- ) {

+						if ( (elem = unmatched[i]) ) {

+							seed[i] = !(matches[i] = elem);

+						}

+					}

+				}) :

+				function( elem, context, xml ) {

+					input[0] = elem;

+					matcher( input, null, xml, results );

+					return !results.pop();

+				};

+		}),

+

+		"has": markFunction(function( selector ) {

+			return function( elem ) {

+				return Sizzle( selector, elem ).length > 0;

+			};

+		}),

+

+		"contains": markFunction(function( text ) {

+			return function( elem ) {

+				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;

+			};

+		}),

+

+		// "Whether an element is represented by a :lang() selector

+		// is based solely on the element's language value

+		// being equal to the identifier C,

+		// or beginning with the identifier C immediately followed by "-".

+		// The matching of C against the element's language value is performed case-insensitively.

+		// The identifier C does not have to be a valid language name."

+		// http://www.w3.org/TR/selectors/#lang-pseudo

+		"lang": markFunction( function( lang ) {

+			// lang value must be a valid identifier

+			if ( !ridentifier.test(lang || "") ) {

+				Sizzle.error( "unsupported lang: " + lang );

+			}

+			lang = lang.replace( runescape, funescape ).toLowerCase();

+			return function( elem ) {

+				var elemLang;

+				do {

+					if ( (elemLang = documentIsHTML ?

+						elem.lang :

+						elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {

+

+						elemLang = elemLang.toLowerCase();

+						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;

+					}

+				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );

+				return false;

+			};

+		}),

+

+		// Miscellaneous

+		"target": function( elem ) {

+			var hash = window.location && window.location.hash;

+			return hash && hash.slice( 1 ) === elem.id;

+		},

+

+		"root": function( elem ) {

+			return elem === docElem;

+		},

+

+		"focus": function( elem ) {

+			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);

+		},

+

+		// Boolean properties

+		"enabled": function( elem ) {

+			return elem.disabled === false;

+		},

+

+		"disabled": function( elem ) {

+			return elem.disabled === true;

+		},

+

+		"checked": function( elem ) {

+			// In CSS3, :checked should return both checked and selected elements

+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked

+			var nodeName = elem.nodeName.toLowerCase();

+			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);

+		},

+

+		"selected": function( elem ) {

+			// Accessing this property makes selected-by-default

+			// options in Safari work properly

+			if ( elem.parentNode ) {

+				elem.parentNode.selectedIndex;

+			}

+

+			return elem.selected === true;

+		},

+

+		// Contents

+		"empty": function( elem ) {

+			// http://www.w3.org/TR/selectors/#empty-pseudo

+			// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),

+			//   not comment, processing instructions, or others

+			// Thanks to Diego Perini for the nodeName shortcut

+			//   Greater than "@" means alpha characters (specifically not starting with "#" or "?")

+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {

+				if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) {

+					return false;

+				}

+			}

+			return true;

+		},

+

+		"parent": function( elem ) {

+			return !Expr.pseudos["empty"]( elem );

+		},

+

+		// Element/input types

+		"header": function( elem ) {

+			return rheader.test( elem.nodeName );

+		},

+

+		"input": function( elem ) {

+			return rinputs.test( elem.nodeName );

+		},

+

+		"button": function( elem ) {

+			var name = elem.nodeName.toLowerCase();

+			return name === "input" && elem.type === "button" || name === "button";

+		},

+

+		"text": function( elem ) {

+			var attr;

+			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)

+			// use getAttribute instead to test this case

+			return elem.nodeName.toLowerCase() === "input" &&

+				elem.type === "text" &&

+				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );

+		},

+

+		// Position-in-collection

+		"first": createPositionalPseudo(function() {

+			return [ 0 ];

+		}),

+

+		"last": createPositionalPseudo(function( matchIndexes, length ) {

+			return [ length - 1 ];

+		}),

+

+		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {

+			return [ argument < 0 ? argument + length : argument ];

+		}),

+

+		"even": createPositionalPseudo(function( matchIndexes, length ) {

+			var i = 0;

+			for ( ; i < length; i += 2 ) {

+				matchIndexes.push( i );

+			}

+			return matchIndexes;

+		}),

+

+		"odd": createPositionalPseudo(function( matchIndexes, length ) {

+			var i = 1;

+			for ( ; i < length; i += 2 ) {

+				matchIndexes.push( i );

+			}

+			return matchIndexes;

+		}),

+

+		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {

+			var i = argument < 0 ? argument + length : argument;

+			for ( ; --i >= 0; ) {

+				matchIndexes.push( i );

+			}

+			return matchIndexes;

+		}),

+

+		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {

+			var i = argument < 0 ? argument + length : argument;

+			for ( ; ++i < length; ) {

+				matchIndexes.push( i );

+			}

+			return matchIndexes;

+		})

+	}

+};

+

+Expr.pseudos["nth"] = Expr.pseudos["eq"];

+

+// Add button/input type pseudos

+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {

+	Expr.pseudos[ i ] = createInputPseudo( i );

+}

+for ( i in { submit: true, reset: true } ) {

+	Expr.pseudos[ i ] = createButtonPseudo( i );

+}

+

+// Easy API for creating new setFilters

+function setFilters() {}

+setFilters.prototype = Expr.filters = Expr.pseudos;

+Expr.setFilters = new setFilters();

+

+function tokenize( selector, parseOnly ) {

+	var matched, match, tokens, type,

+		soFar, groups, preFilters,

+		cached = tokenCache[ selector + " " ];

+

+	if ( cached ) {

+		return parseOnly ? 0 : cached.slice( 0 );

+	}

+

+	soFar = selector;

+	groups = [];

+	preFilters = Expr.preFilter;

+

+	while ( soFar ) {

+

+		// Comma and first run

+		if ( !matched || (match = rcomma.exec( soFar )) ) {

+			if ( match ) {

+				// Don't consume trailing commas as valid

+				soFar = soFar.slice( match[0].length ) || soFar;

+			}

+			groups.push( tokens = [] );

+		}

+

+		matched = false;

+

+		// Combinators

+		if ( (match = rcombinators.exec( soFar )) ) {

+			matched = match.shift();

+			tokens.push({

+				value: matched,

+				// Cast descendant combinators to space

+				type: match[0].replace( rtrim, " " )

+			});

+			soFar = soFar.slice( matched.length );

+		}

+

+		// Filters

+		for ( type in Expr.filter ) {

+			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||

+				(match = preFilters[ type ]( match ))) ) {

+				matched = match.shift();

+				tokens.push({

+					value: matched,

+					type: type,

+					matches: match

+				});

+				soFar = soFar.slice( matched.length );

+			}

+		}

+

+		if ( !matched ) {

+			break;

+		}

+	}

+

+	// Return the length of the invalid excess

+	// if we're just parsing

+	// Otherwise, throw an error or return tokens

+	return parseOnly ?

+		soFar.length :

+		soFar ?

+			Sizzle.error( selector ) :

+			// Cache the tokens

+			tokenCache( selector, groups ).slice( 0 );

+}

+

+function toSelector( tokens ) {

+	var i = 0,

+		len = tokens.length,

+		selector = "";

+	for ( ; i < len; i++ ) {

+		selector += tokens[i].value;

+	}

+	return selector;

+}

+

+function addCombinator( matcher, combinator, base ) {

+	var dir = combinator.dir,

+		checkNonElements = base && dir === "parentNode",

+		doneName = done++;

+

+	return combinator.first ?

+		// Check against closest ancestor/preceding element

+		function( elem, context, xml ) {

+			while ( (elem = elem[ dir ]) ) {

+				if ( elem.nodeType === 1 || checkNonElements ) {

+					return matcher( elem, context, xml );

+				}

+			}

+		} :

+

+		// Check against all ancestor/preceding elements

+		function( elem, context, xml ) {

+			var data, cache, outerCache,

+				dirkey = dirruns + " " + doneName;

+

+			// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching

+			if ( xml ) {

+				while ( (elem = elem[ dir ]) ) {

+					if ( elem.nodeType === 1 || checkNonElements ) {

+						if ( matcher( elem, context, xml ) ) {

+							return true;

+						}

+					}

+				}

+			} else {

+				while ( (elem = elem[ dir ]) ) {

+					if ( elem.nodeType === 1 || checkNonElements ) {

+						outerCache = elem[ expando ] || (elem[ expando ] = {});

+						if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {

+							if ( (data = cache[1]) === true || data === cachedruns ) {

+								return data === true;

+							}

+						} else {

+							cache = outerCache[ dir ] = [ dirkey ];

+							cache[1] = matcher( elem, context, xml ) || cachedruns;

+							if ( cache[1] === true ) {

+								return true;

+							}

+						}

+					}

+				}

+			}

+		};

+}

+

+function elementMatcher( matchers ) {

+	return matchers.length > 1 ?

+		function( elem, context, xml ) {

+			var i = matchers.length;

+			while ( i-- ) {

+				if ( !matchers[i]( elem, context, xml ) ) {

+					return false;

+				}

+			}

+			return true;

+		} :

+		matchers[0];

+}

+

+function condense( unmatched, map, filter, context, xml ) {

+	var elem,

+		newUnmatched = [],

+		i = 0,

+		len = unmatched.length,

+		mapped = map != null;

+

+	for ( ; i < len; i++ ) {

+		if ( (elem = unmatched[i]) ) {

+			if ( !filter || filter( elem, context, xml ) ) {

+				newUnmatched.push( elem );

+				if ( mapped ) {

+					map.push( i );

+				}

+			}

+		}

+	}

+

+	return newUnmatched;

+}

+

+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {

+	if ( postFilter && !postFilter[ expando ] ) {

+		postFilter = setMatcher( postFilter );

+	}

+	if ( postFinder && !postFinder[ expando ] ) {

+		postFinder = setMatcher( postFinder, postSelector );

+	}

+	return markFunction(function( seed, results, context, xml ) {

+		var temp, i, elem,

+			preMap = [],

+			postMap = [],

+			preexisting = results.length,

+

+			// Get initial elements from seed or context

+			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),

+

+			// Prefilter to get matcher input, preserving a map for seed-results synchronization

+			matcherIn = preFilter && ( seed || !selector ) ?

+				condense( elems, preMap, preFilter, context, xml ) :

+				elems,

+

+			matcherOut = matcher ?

+				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,

+				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?

+

+					// ...intermediate processing is necessary

+					[] :

+

+					// ...otherwise use results directly

+					results :

+				matcherIn;

+

+		// Find primary matches

+		if ( matcher ) {

+			matcher( matcherIn, matcherOut, context, xml );

+		}

+

+		// Apply postFilter

+		if ( postFilter ) {

+			temp = condense( matcherOut, postMap );

+			postFilter( temp, [], context, xml );

+

+			// Un-match failing elements by moving them back to matcherIn

+			i = temp.length;

+			while ( i-- ) {

+				if ( (elem = temp[i]) ) {

+					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);

+				}

+			}

+		}

+

+		if ( seed ) {

+			if ( postFinder || preFilter ) {

+				if ( postFinder ) {

+					// Get the final matcherOut by condensing this intermediate into postFinder contexts

+					temp = [];

+					i = matcherOut.length;

+					while ( i-- ) {

+						if ( (elem = matcherOut[i]) ) {

+							// Restore matcherIn since elem is not yet a final match

+							temp.push( (matcherIn[i] = elem) );

+						}

+					}

+					postFinder( null, (matcherOut = []), temp, xml );

+				}

+

+				// Move matched elements from seed to results to keep them synchronized

+				i = matcherOut.length;

+				while ( i-- ) {

+					if ( (elem = matcherOut[i]) &&

+						(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {

+

+						seed[temp] = !(results[temp] = elem);

+					}

+				}

+			}

+

+		// Add elements to results, through postFinder if defined

+		} else {

+			matcherOut = condense(

+				matcherOut === results ?

+					matcherOut.splice( preexisting, matcherOut.length ) :

+					matcherOut

+			);

+			if ( postFinder ) {

+				postFinder( null, results, matcherOut, xml );

+			} else {

+				push.apply( results, matcherOut );

+			}

+		}

+	});

+}

+

+function matcherFromTokens( tokens ) {

+	var checkContext, matcher, j,

+		len = tokens.length,

+		leadingRelative = Expr.relative[ tokens[0].type ],

+		implicitRelative = leadingRelative || Expr.relative[" "],

+		i = leadingRelative ? 1 : 0,

+

+		// The foundational matcher ensures that elements are reachable from top-level context(s)

+		matchContext = addCombinator( function( elem ) {

+			return elem === checkContext;

+		}, implicitRelative, true ),

+		matchAnyContext = addCombinator( function( elem ) {

+			return indexOf.call( checkContext, elem ) > -1;

+		}, implicitRelative, true ),

+		matchers = [ function( elem, context, xml ) {

+			return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (

+				(checkContext = context).nodeType ?

+					matchContext( elem, context, xml ) :

+					matchAnyContext( elem, context, xml ) );

+		} ];

+

+	for ( ; i < len; i++ ) {

+		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {

+			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];

+		} else {

+			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );

+

+			// Return special upon seeing a positional matcher

+			if ( matcher[ expando ] ) {

+				// Find the next relative operator (if any) for proper handling

+				j = ++i;

+				for ( ; j < len; j++ ) {

+					if ( Expr.relative[ tokens[j].type ] ) {

+						break;

+					}

+				}

+				return setMatcher(

+					i > 1 && elementMatcher( matchers ),

+					i > 1 && toSelector(

+						// If the preceding token was a descendant combinator, insert an implicit any-element `*`

+						tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })

+					).replace( rtrim, "$1" ),

+					matcher,

+					i < j && matcherFromTokens( tokens.slice( i, j ) ),

+					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),

+					j < len && toSelector( tokens )

+				);

+			}

+			matchers.push( matcher );

+		}

+	}

+

+	return elementMatcher( matchers );

+}

+

+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {

+	// A counter to specify which element is currently being matched

+	var matcherCachedRuns = 0,

+		bySet = setMatchers.length > 0,

+		byElement = elementMatchers.length > 0,

+		superMatcher = function( seed, context, xml, results, expandContext ) {

+			var elem, j, matcher,

+				setMatched = [],

+				matchedCount = 0,

+				i = "0",

+				unmatched = seed && [],

+				outermost = expandContext != null,

+				contextBackup = outermostContext,

+				// We must always have either seed elements or context

+				elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),

+				// Use integer dirruns iff this is the outermost matcher

+				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);

+

+			if ( outermost ) {

+				outermostContext = context !== document && context;

+				cachedruns = matcherCachedRuns;

+			}

+

+			// Add elements passing elementMatchers directly to results

+			// Keep `i` a string if there are no elements so `matchedCount` will be "00" below

+			for ( ; (elem = elems[i]) != null; i++ ) {

+				if ( byElement && elem ) {

+					j = 0;

+					while ( (matcher = elementMatchers[j++]) ) {

+						if ( matcher( elem, context, xml ) ) {

+							results.push( elem );

+							break;

+						}

+					}

+					if ( outermost ) {

+						dirruns = dirrunsUnique;

+						cachedruns = ++matcherCachedRuns;

+					}

+				}

+

+				// Track unmatched elements for set filters

+				if ( bySet ) {

+					// They will have gone through all possible matchers

+					if ( (elem = !matcher && elem) ) {

+						matchedCount--;

+					}

+

+					// Lengthen the array for every element, matched or not

+					if ( seed ) {

+						unmatched.push( elem );

+					}

+				}

+			}

+

+			// Apply set filters to unmatched elements

+			matchedCount += i;

+			if ( bySet && i !== matchedCount ) {

+				j = 0;

+				while ( (matcher = setMatchers[j++]) ) {

+					matcher( unmatched, setMatched, context, xml );

+				}

+

+				if ( seed ) {

+					// Reintegrate element matches to eliminate the need for sorting

+					if ( matchedCount > 0 ) {

+						while ( i-- ) {

+							if ( !(unmatched[i] || setMatched[i]) ) {

+								setMatched[i] = pop.call( results );

+							}

+						}

+					}

+

+					// Discard index placeholder values to get only actual matches

+					setMatched = condense( setMatched );

+				}

+

+				// Add matches to results

+				push.apply( results, setMatched );

+

+				// Seedless set matches succeeding multiple successful matchers stipulate sorting

+				if ( outermost && !seed && setMatched.length > 0 &&

+					( matchedCount + setMatchers.length ) > 1 ) {

+

+					Sizzle.uniqueSort( results );

+				}

+			}

+

+			// Override manipulation of globals by nested matchers

+			if ( outermost ) {

+				dirruns = dirrunsUnique;

+				outermostContext = contextBackup;

+			}

+

+			return unmatched;

+		};

+

+	return bySet ?

+		markFunction( superMatcher ) :

+		superMatcher;

+}

+

+compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {

+	var i,

+		setMatchers = [],

+		elementMatchers = [],

+		cached = compilerCache[ selector + " " ];

+

+	if ( !cached ) {

+		// Generate a function of recursive functions that can be used to check each element

+		if ( !group ) {

+			group = tokenize( selector );

+		}

+		i = group.length;

+		while ( i-- ) {

+			cached = matcherFromTokens( group[i] );

+			if ( cached[ expando ] ) {

+				setMatchers.push( cached );

+			} else {

+				elementMatchers.push( cached );

+			}

+		}

+

+		// Cache the compiled function

+		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );

+	}

+	return cached;

+};

+

+function multipleContexts( selector, contexts, results ) {

+	var i = 0,

+		len = contexts.length;

+	for ( ; i < len; i++ ) {

+		Sizzle( selector, contexts[i], results );

+	}

+	return results;

+}

+

+function select( selector, context, results, seed ) {

+	var i, tokens, token, type, find,

+		match = tokenize( selector );

+

+	if ( !seed ) {

+		// Try to minimize operations if there is only one group

+		if ( match.length === 1 ) {

+

+			// Take a shortcut and set the context if the root selector is an ID

+			tokens = match[0] = match[0].slice( 0 );

+			if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&

+					support.getById && context.nodeType === 9 && documentIsHTML &&

+					Expr.relative[ tokens[1].type ] ) {

+

+				context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];

+				if ( !context ) {

+					return results;

+				}

+				selector = selector.slice( tokens.shift().value.length );

+			}

+

+			// Fetch a seed set for right-to-left matching

+			i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;

+			while ( i-- ) {

+				token = tokens[i];

+

+				// Abort if we hit a combinator

+				if ( Expr.relative[ (type = token.type) ] ) {

+					break;

+				}

+				if ( (find = Expr.find[ type ]) ) {

+					// Search, expanding context for leading sibling combinators

+					if ( (seed = find(

+						token.matches[0].replace( runescape, funescape ),

+						rsibling.test( tokens[0].type ) && context.parentNode || context

+					)) ) {

+

+						// If seed is empty or no tokens remain, we can return early

+						tokens.splice( i, 1 );

+						selector = seed.length && toSelector( tokens );

+						if ( !selector ) {

+							push.apply( results, seed );

+							return results;

+						}

+

+						break;

+					}

+				}

+			}

+		}

+	}

+

+	// Compile and execute a filtering function

+	// Provide `match` to avoid retokenization if we modified the selector above

+	compile( selector, match )(

+		seed,

+		context,

+		!documentIsHTML,

+		results,

+		rsibling.test( selector )

+	);

+	return results;

+}

+

+// One-time assignments

+

+// Sort stability

+support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;

+

+// Support: Chrome<14

+// Always assume duplicates if they aren't passed to the comparison function

+support.detectDuplicates = hasDuplicate;

+

+// Initialize against the default document

+setDocument();

+

+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)

+// Detached nodes confoundingly follow *each other*

+support.sortDetached = assert(function( div1 ) {

+	// Should return 1, but returns 4 (following)

+	return div1.compareDocumentPosition( document.createElement("div") ) & 1;

+});

+

+// Support: IE<8

+// Prevent attribute/property "interpolation"

+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx

+if ( !assert(function( div ) {

+	div.innerHTML = "<a href='#'></a>";

+	return div.firstChild.getAttribute("href") === "#" ;

+}) ) {

+	addHandle( "type|href|height|width", function( elem, name, isXML ) {

+		if ( !isXML ) {

+			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );

+		}

+	});

+}

+

+// Support: IE<9

+// Use defaultValue in place of getAttribute("value")

+if ( !support.attributes || !assert(function( div ) {

+	div.innerHTML = "<input/>";

+	div.firstChild.setAttribute( "value", "" );

+	return div.firstChild.getAttribute( "value" ) === "";

+}) ) {

+	addHandle( "value", function( elem, name, isXML ) {

+		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {

+			return elem.defaultValue;

+		}

+	});

+}

+

+// Support: IE<9

+// Use getAttributeNode to fetch booleans when getAttribute lies

+if ( !assert(function( div ) {

+	return div.getAttribute("disabled") == null;

+}) ) {

+	addHandle( booleans, function( elem, name, isXML ) {

+		var val;

+		if ( !isXML ) {

+			return (val = elem.getAttributeNode( name )) && val.specified ?

+				val.value :

+				elem[ name ] === true ? name.toLowerCase() : null;

+		}

+	});

+}

+

+jQuery.find = Sizzle;

+jQuery.expr = Sizzle.selectors;

+jQuery.expr[":"] = jQuery.expr.pseudos;

+jQuery.unique = Sizzle.uniqueSort;

+jQuery.text = Sizzle.getText;

+jQuery.isXMLDoc = Sizzle.isXML;

+jQuery.contains = Sizzle.contains;

+

+

+})( window );

+// String to Object options format cache

+var optionsCache = {};

+

+// Convert String-formatted options into Object-formatted ones and store in cache

+function createOptions( options ) {

+	var object = optionsCache[ options ] = {};

+	jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {

+		object[ flag ] = true;

+	});

+	return object;

+}

+

+/*

+ * Create a callback list using the following parameters:

+ *

+ *	options: an optional list of space-separated options that will change how

+ *			the callback list behaves or a more traditional option object

+ *

+ * By default a callback list will act like an event callback list and can be

+ * "fired" multiple times.

+ *

+ * Possible options:

+ *

+ *	once:			will ensure the callback list can only be fired once (like a Deferred)

+ *

+ *	memory:			will keep track of previous values and will call any callback added

+ *					after the list has been fired right away with the latest "memorized"

+ *					values (like a Deferred)

+ *

+ *	unique:			will ensure a callback can only be added once (no duplicate in the list)

+ *

+ *	stopOnFalse:	interrupt callings when a callback returns false

+ *

+ */

+jQuery.Callbacks = function( options ) {

+

+	// Convert options from String-formatted to Object-formatted if needed

+	// (we check in cache first)

+	options = typeof options === "string" ?

+		( optionsCache[ options ] || createOptions( options ) ) :

+		jQuery.extend( {}, options );

+

+	var // Flag to know if list is currently firing

+		firing,

+		// Last fire value (for non-forgettable lists)

+		memory,

+		// Flag to know if list was already fired

+		fired,

+		// End of the loop when firing

+		firingLength,

+		// Index of currently firing callback (modified by remove if needed)

+		firingIndex,

+		// First callback to fire (used internally by add and fireWith)

+		firingStart,

+		// Actual callback list

+		list = [],

+		// Stack of fire calls for repeatable lists

+		stack = !options.once && [],

+		// Fire callbacks

+		fire = function( data ) {

+			memory = options.memory && data;

+			fired = true;

+			firingIndex = firingStart || 0;

+			firingStart = 0;

+			firingLength = list.length;

+			firing = true;

+			for ( ; list && firingIndex < firingLength; firingIndex++ ) {

+				if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {

+					memory = false; // To prevent further calls using add

+					break;

+				}

+			}

+			firing = false;

+			if ( list ) {

+				if ( stack ) {

+					if ( stack.length ) {

+						fire( stack.shift() );

+					}

+				} else if ( memory ) {

+					list = [];

+				} else {

+					self.disable();

+				}

+			}

+		},

+		// Actual Callbacks object

+		self = {

+			// Add a callback or a collection of callbacks to the list

+			add: function() {

+				if ( list ) {

+					// First, we save the current length

+					var start = list.length;

+					(function add( args ) {

+						jQuery.each( args, function( _, arg ) {

+							var type = jQuery.type( arg );

+							if ( type === "function" ) {

+								if ( !options.unique || !self.has( arg ) ) {

+									list.push( arg );

+								}

+							} else if ( arg && arg.length && type !== "string" ) {

+								// Inspect recursively

+								add( arg );

+							}

+						});

+					})( arguments );

+					// Do we need to add the callbacks to the

+					// current firing batch?

+					if ( firing ) {

+						firingLength = list.length;

+					// With memory, if we're not firing then

+					// we should call right away

+					} else if ( memory ) {

+						firingStart = start;

+						fire( memory );

+					}

+				}

+				return this;

+			},

+			// Remove a callback from the list

+			remove: function() {

+				if ( list ) {

+					jQuery.each( arguments, function( _, arg ) {

+						var index;

+						while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {

+							list.splice( index, 1 );

+							// Handle firing indexes

+							if ( firing ) {

+								if ( index <= firingLength ) {

+									firingLength--;

+								}

+								if ( index <= firingIndex ) {

+									firingIndex--;

+								}

+							}

+						}

+					});

+				}

+				return this;

+			},

+			// Check if a given callback is in the list.

+			// If no argument is given, return whether or not list has callbacks attached.

+			has: function( fn ) {

+				return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );

+			},

+			// Remove all callbacks from the list

+			empty: function() {

+				list = [];

+				firingLength = 0;

+				return this;

+			},

+			// Have the list do nothing anymore

+			disable: function() {

+				list = stack = memory = undefined;

+				return this;

+			},

+			// Is it disabled?

+			disabled: function() {

+				return !list;

+			},

+			// Lock the list in its current state

+			lock: function() {

+				stack = undefined;

+				if ( !memory ) {

+					self.disable();

+				}

+				return this;

+			},

+			// Is it locked?

+			locked: function() {

+				return !stack;

+			},

+			// Call all callbacks with the given context and arguments

+			fireWith: function( context, args ) {

+				if ( list && ( !fired || stack ) ) {

+					args = args || [];

+					args = [ context, args.slice ? args.slice() : args ];

+					if ( firing ) {

+						stack.push( args );

+					} else {

+						fire( args );

+					}

+				}

+				return this;

+			},

+			// Call all the callbacks with the given arguments

+			fire: function() {

+				self.fireWith( this, arguments );

+				return this;

+			},

+			// To know if the callbacks have already been called at least once

+			fired: function() {

+				return !!fired;

+			}

+		};

+

+	return self;

+};

+jQuery.extend({

+

+	Deferred: function( func ) {

+		var tuples = [

+				// action, add listener, listener list, final state

+				[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],

+				[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],

+				[ "notify", "progress", jQuery.Callbacks("memory") ]

+			],

+			state = "pending",

+			promise = {

+				state: function() {

+					return state;

+				},

+				always: function() {

+					deferred.done( arguments ).fail( arguments );

+					return this;

+				},

+				then: function( /* fnDone, fnFail, fnProgress */ ) {

+					var fns = arguments;

+					return jQuery.Deferred(function( newDefer ) {

+						jQuery.each( tuples, function( i, tuple ) {

+							var action = tuple[ 0 ],

+								fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];

+							// deferred[ done | fail | progress ] for forwarding actions to newDefer

+							deferred[ tuple[1] ](function() {

+								var returned = fn && fn.apply( this, arguments );

+								if ( returned && jQuery.isFunction( returned.promise ) ) {

+									returned.promise()

+										.done( newDefer.resolve )

+										.fail( newDefer.reject )

+										.progress( newDefer.notify );

+								} else {

+									newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );

+								}

+							});

+						});

+						fns = null;

+					}).promise();

+				},

+				// Get a promise for this deferred

+				// If obj is provided, the promise aspect is added to the object

+				promise: function( obj ) {

+					return obj != null ? jQuery.extend( obj, promise ) : promise;

+				}

+			},

+			deferred = {};

+

+		// Keep pipe for back-compat

+		promise.pipe = promise.then;

+

+		// Add list-specific methods

+		jQuery.each( tuples, function( i, tuple ) {

+			var list = tuple[ 2 ],

+				stateString = tuple[ 3 ];

+

+			// promise[ done | fail | progress ] = list.add

+			promise[ tuple[1] ] = list.add;

+

+			// Handle state

+			if ( stateString ) {

+				list.add(function() {

+					// state = [ resolved | rejected ]

+					state = stateString;

+

+				// [ reject_list | resolve_list ].disable; progress_list.lock

+				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );

+			}

+

+			// deferred[ resolve | reject | notify ]

+			deferred[ tuple[0] ] = function() {

+				deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );

+				return this;

+			};

+			deferred[ tuple[0] + "With" ] = list.fireWith;

+		});

+

+		// Make the deferred a promise

+		promise.promise( deferred );

+

+		// Call given func if any

+		if ( func ) {

+			func.call( deferred, deferred );

+		}

+

+		// All done!

+		return deferred;

+	},

+

+	// Deferred helper

+	when: function( subordinate /* , ..., subordinateN */ ) {

+		var i = 0,

+			resolveValues = core_slice.call( arguments ),

+			length = resolveValues.length,

+

+			// the count of uncompleted subordinates

+			remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,

+

+			// the master Deferred. If resolveValues consist of only a single Deferred, just use that.

+			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),

+

+			// Update function for both resolve and progress values

+			updateFunc = function( i, contexts, values ) {

+				return function( value ) {

+					contexts[ i ] = this;

+					values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;

+					if( values === progressValues ) {

+						deferred.notifyWith( contexts, values );

+					} else if ( !( --remaining ) ) {

+						deferred.resolveWith( contexts, values );

+					}

+				};

+			},

+

+			progressValues, progressContexts, resolveContexts;

+

+		// add listeners to Deferred subordinates; treat others as resolved

+		if ( length > 1 ) {

+			progressValues = new Array( length );

+			progressContexts = new Array( length );

+			resolveContexts = new Array( length );

+			for ( ; i < length; i++ ) {

+				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {

+					resolveValues[ i ].promise()

+						.done( updateFunc( i, resolveContexts, resolveValues ) )

+						.fail( deferred.reject )

+						.progress( updateFunc( i, progressContexts, progressValues ) );

+				} else {

+					--remaining;

+				}

+			}

+		}

+

+		// if we're not waiting on anything, resolve the master

+		if ( !remaining ) {

+			deferred.resolveWith( resolveContexts, resolveValues );

+		}

+

+		return deferred.promise();

+	}

+});

+jQuery.support = (function( support ) {

+

+	var all, a, input, select, fragment, opt, eventName, isSupported, i,

+		div = document.createElement("div");

+

+	// Setup

+	div.setAttribute( "className", "t" );

+	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";

+

+	// Finish early in limited (non-browser) environments

+	all = div.getElementsByTagName("*") || [];

+	a = div.getElementsByTagName("a")[ 0 ];

+	if ( !a || !a.style || !all.length ) {

+		return support;

+	}

+

+	// First batch of tests

+	select = document.createElement("select");

+	opt = select.appendChild( document.createElement("option") );

+	input = div.getElementsByTagName("input")[ 0 ];

+

+	a.style.cssText = "top:1px;float:left;opacity:.5";

+

+	// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)

+	support.getSetAttribute = div.className !== "t";

+

+	// IE strips leading whitespace when .innerHTML is used

+	support.leadingWhitespace = div.firstChild.nodeType === 3;

+

+	// Make sure that tbody elements aren't automatically inserted

+	// IE will insert them into empty tables

+	support.tbody = !div.getElementsByTagName("tbody").length;

+

+	// Make sure that link elements get serialized correctly by innerHTML

+	// This requires a wrapper element in IE

+	support.htmlSerialize = !!div.getElementsByTagName("link").length;

+

+	// Get the style information from getAttribute

+	// (IE uses .cssText instead)

+	support.style = /top/.test( a.getAttribute("style") );

+

+	// Make sure that URLs aren't manipulated

+	// (IE normalizes it by default)

+	support.hrefNormalized = a.getAttribute("href") === "/a";

+

+	// Make sure that element opacity exists

+	// (IE uses filter instead)

+	// Use a regex to work around a WebKit issue. See #5145

+	support.opacity = /^0.5/.test( a.style.opacity );

+

+	// Verify style float existence

+	// (IE uses styleFloat instead of cssFloat)

+	support.cssFloat = !!a.style.cssFloat;

+

+	// Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)

+	support.checkOn = !!input.value;

+

+	// Make sure that a selected-by-default option has a working selected property.

+	// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)

+	support.optSelected = opt.selected;

+

+	// Tests for enctype support on a form (#6743)

+	support.enctype = !!document.createElement("form").enctype;

+

+	// Makes sure cloning an html5 element does not cause problems

+	// Where outerHTML is undefined, this still works

+	support.html5Clone = document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>";

+

+	// Will be defined later

+	support.inlineBlockNeedsLayout = false;

+	support.shrinkWrapBlocks = false;

+	support.pixelPosition = false;

+	support.deleteExpando = true;

+	support.noCloneEvent = true;

+	support.reliableMarginRight = true;

+	support.boxSizingReliable = true;

+

+	// Make sure checked status is properly cloned

+	input.checked = true;

+	support.noCloneChecked = input.cloneNode( true ).checked;

+

+	// Make sure that the options inside disabled selects aren't marked as disabled

+	// (WebKit marks them as disabled)

+	select.disabled = true;

+	support.optDisabled = !opt.disabled;

+

+	// Support: IE<9

+	try {

+		delete div.test;

+	} catch( e ) {

+		support.deleteExpando = false;

+	}

+

+	// Check if we can trust getAttribute("value")

+	input = document.createElement("input");

+	input.setAttribute( "value", "" );

+	support.input = input.getAttribute( "value" ) === "";

+

+	// Check if an input maintains its value after becoming a radio

+	input.value = "t";

+	input.setAttribute( "type", "radio" );

+	support.radioValue = input.value === "t";

+

+	// #11217 - WebKit loses check when the name is after the checked attribute

+	input.setAttribute( "checked", "t" );

+	input.setAttribute( "name", "t" );

+

+	fragment = document.createDocumentFragment();

+	fragment.appendChild( input );

+

+	// Check if a disconnected checkbox will retain its checked

+	// value of true after appended to the DOM (IE6/7)

+	support.appendChecked = input.checked;

+

+	// WebKit doesn't clone checked state correctly in fragments

+	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;

+

+	// Support: IE<9

+	// Opera does not clone events (and typeof div.attachEvent === undefined).

+	// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()

+	if ( div.attachEvent ) {

+		div.attachEvent( "onclick", function() {

+			support.noCloneEvent = false;

+		});

+

+		div.cloneNode( true ).click();

+	}

+

+	// Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)

+	// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)

+	for ( i in { submit: true, change: true, focusin: true }) {

+		div.setAttribute( eventName = "on" + i, "t" );

+

+		support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false;

+	}

+

+	div.style.backgroundClip = "content-box";

+	div.cloneNode( true ).style.backgroundClip = "";

+	support.clearCloneStyle = div.style.backgroundClip === "content-box";

+

+	// Support: IE<9

+	// Iteration over object's inherited properties before its own.

+	for ( i in jQuery( support ) ) {

+		break;

+	}

+	support.ownLast = i !== "0";

+

+	// Run tests that need a body at doc ready

+	jQuery(function() {

+		var container, marginDiv, tds,

+			divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",

+			body = document.getElementsByTagName("body")[0];

+

+		if ( !body ) {

+			// Return for frameset docs that don't have a body

+			return;

+		}

+

+		container = document.createElement("div");

+		container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";

+

+		body.appendChild( container ).appendChild( div );

+

+		// Support: IE8

+		// Check if table cells still have offsetWidth/Height when they are set

+		// to display:none and there are still other visible table cells in a

+		// table row; if so, offsetWidth/Height are not reliable for use when

+		// determining if an element has been hidden directly using

+		// display:none (it is still safe to use offsets if a parent element is

+		// hidden; don safety goggles and see bug #4512 for more information).

+		div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";

+		tds = div.getElementsByTagName("td");

+		tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";

+		isSupported = ( tds[ 0 ].offsetHeight === 0 );

+

+		tds[ 0 ].style.display = "";

+		tds[ 1 ].style.display = "none";

+

+		// Support: IE8

+		// Check if empty table cells still have offsetWidth/Height

+		support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );

+

+		// Check box-sizing and margin behavior.

+		div.innerHTML = "";

+		div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";

+

+		// Workaround failing boxSizing test due to offsetWidth returning wrong value

+		// with some non-1 values of body zoom, ticket #13543

+		jQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() {

+			support.boxSizing = div.offsetWidth === 4;

+		});

+

+		// Use window.getComputedStyle because jsdom on node.js will break without it.

+		if ( window.getComputedStyle ) {

+			support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";

+			support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";

+

+			// Check if div with explicit width and no margin-right incorrectly

+			// gets computed margin-right based on width of container. (#3333)

+			// Fails in WebKit before Feb 2011 nightlies

+			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right

+			marginDiv = div.appendChild( document.createElement("div") );

+			marginDiv.style.cssText = div.style.cssText = divReset;

+			marginDiv.style.marginRight = marginDiv.style.width = "0";

+			div.style.width = "1px";

+

+			support.reliableMarginRight =

+				!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );

+		}

+

+		if ( typeof div.style.zoom !== core_strundefined ) {

+			// Support: IE<8

+			// Check if natively block-level elements act like inline-block

+			// elements when setting their display to 'inline' and giving

+			// them layout

+			div.innerHTML = "";

+			div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";

+			support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );

+

+			// Support: IE6

+			// Check if elements with layout shrink-wrap their children

+			div.style.display = "block";

+			div.innerHTML = "<div></div>";

+			div.firstChild.style.width = "5px";

+			support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );

+

+			if ( support.inlineBlockNeedsLayout ) {

+				// Prevent IE 6 from affecting layout for positioned elements #11048

+				// Prevent IE from shrinking the body in IE 7 mode #12869

+				// Support: IE<8

+				body.style.zoom = 1;

+			}

+		}

+

+		body.removeChild( container );

+

+		// Null elements to avoid leaks in IE

+		container = div = tds = marginDiv = null;

+	});

+

+	// Null elements to avoid leaks in IE

+	all = select = fragment = opt = a = input = null;

+

+	return support;

+})({});

+

+var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,

+	rmultiDash = /([A-Z])/g;

+

+function internalData( elem, name, data, pvt /* Internal Use Only */ ){

+	if ( !jQuery.acceptData( elem ) ) {

+		return;

+	}

+

+	var ret, thisCache,

+		internalKey = jQuery.expando,

+

+		// We have to handle DOM nodes and JS objects differently because IE6-7

+		// can't GC object references properly across the DOM-JS boundary

+		isNode = elem.nodeType,

+

+		// Only DOM nodes need the global jQuery cache; JS object data is

+		// attached directly to the object so GC can occur automatically

+		cache = isNode ? jQuery.cache : elem,

+

+		// Only defining an ID for JS objects if its cache already exists allows

+		// the code to shortcut on the same path as a DOM node with no cache

+		id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;

+

+	// Avoid doing any more work than we need to when trying to get data on an

+	// object that has no data at all

+	if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) {

+		return;

+	}

+

+	if ( !id ) {

+		// Only DOM nodes need a new unique ID for each element since their data

+		// ends up in the global cache

+		if ( isNode ) {

+			id = elem[ internalKey ] = core_deletedIds.pop() || jQuery.guid++;

+		} else {

+			id = internalKey;

+		}

+	}

+

+	if ( !cache[ id ] ) {

+		// Avoid exposing jQuery metadata on plain JS objects when the object

+		// is serialized using JSON.stringify

+		cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };

+	}

+

+	// An object can be passed to jQuery.data instead of a key/value pair; this gets

+	// shallow copied over onto the existing cache

+	if ( typeof name === "object" || typeof name === "function" ) {

+		if ( pvt ) {

+			cache[ id ] = jQuery.extend( cache[ id ], name );

+		} else {

+			cache[ id ].data = jQuery.extend( cache[ id ].data, name );

+		}

+	}

+

+	thisCache = cache[ id ];

+

+	// jQuery data() is stored in a separate object inside the object's internal data

+	// cache in order to avoid key collisions between internal data and user-defined

+	// data.

+	if ( !pvt ) {

+		if ( !thisCache.data ) {

+			thisCache.data = {};

+		}

+

+		thisCache = thisCache.data;

+	}

+

+	if ( data !== undefined ) {

+		thisCache[ jQuery.camelCase( name ) ] = data;

+	}

+

+	// Check for both converted-to-camel and non-converted data property names

+	// If a data property was specified

+	if ( typeof name === "string" ) {

+

+		// First Try to find as-is property data

+		ret = thisCache[ name ];

+

+		// Test for null|undefined property data

+		if ( ret == null ) {

+

+			// Try to find the camelCased property

+			ret = thisCache[ jQuery.camelCase( name ) ];

+		}

+	} else {

+		ret = thisCache;

+	}

+

+	return ret;

+}

+

+function internalRemoveData( elem, name, pvt ) {

+	if ( !jQuery.acceptData( elem ) ) {

+		return;

+	}

+

+	var thisCache, i,

+		isNode = elem.nodeType,

+

+		// See jQuery.data for more information

+		cache = isNode ? jQuery.cache : elem,

+		id = isNode ? elem[ jQuery.expando ] : jQuery.expando;

+

+	// If there is already no cache entry for this object, there is no

+	// purpose in continuing

+	if ( !cache[ id ] ) {

+		return;

+	}

+

+	if ( name ) {

+

+		thisCache = pvt ? cache[ id ] : cache[ id ].data;

+

+		if ( thisCache ) {

+

+			// Support array or space separated string names for data keys

+			if ( !jQuery.isArray( name ) ) {

+

+				// try the string as a key before any manipulation

+				if ( name in thisCache ) {

+					name = [ name ];

+				} else {

+

+					// split the camel cased version by spaces unless a key with the spaces exists

+					name = jQuery.camelCase( name );

+					if ( name in thisCache ) {

+						name = [ name ];

+					} else {

+						name = name.split(" ");

+					}

+				}

+			} else {

+				// If "name" is an array of keys...

+				// When data is initially created, via ("key", "val") signature,

+				// keys will be converted to camelCase.

+				// Since there is no way to tell _how_ a key was added, remove

+				// both plain key and camelCase key. #12786

+				// This will only penalize the array argument path.

+				name = name.concat( jQuery.map( name, jQuery.camelCase ) );

+			}

+

+			i = name.length;

+			while ( i-- ) {

+				delete thisCache[ name[i] ];

+			}

+

+			// If there is no data left in the cache, we want to continue

+			// and let the cache object itself get destroyed

+			if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {

+				return;

+			}

+		}

+	}

+

+	// See jQuery.data for more information

+	if ( !pvt ) {

+		delete cache[ id ].data;

+

+		// Don't destroy the parent cache unless the internal data object

+		// had been the only thing left in it

+		if ( !isEmptyDataObject( cache[ id ] ) ) {

+			return;

+		}

+	}

+

+	// Destroy the cache

+	if ( isNode ) {

+		jQuery.cleanData( [ elem ], true );

+

+	// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)

+	/* jshint eqeqeq: false */

+	} else if ( jQuery.support.deleteExpando || cache != cache.window ) {

+		/* jshint eqeqeq: true */

+		delete cache[ id ];

+

+	// When all else fails, null

+	} else {

+		cache[ id ] = null;

+	}

+}

+

+jQuery.extend({

+	cache: {},

+

+	// The following elements throw uncatchable exceptions if you

+	// attempt to add expando properties to them.

+	noData: {

+		"applet": true,

+		"embed": true,

+		// Ban all objects except for Flash (which handle expandos)

+		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"

+	},

+

+	hasData: function( elem ) {

+		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];

+		return !!elem && !isEmptyDataObject( elem );

+	},

+

+	data: function( elem, name, data ) {

+		return internalData( elem, name, data );

+	},

+

+	removeData: function( elem, name ) {

+		return internalRemoveData( elem, name );

+	},

+

+	// For internal use only.

+	_data: function( elem, name, data ) {

+		return internalData( elem, name, data, true );

+	},

+

+	_removeData: function( elem, name ) {

+		return internalRemoveData( elem, name, true );

+	},

+

+	// A method for determining if a DOM node can handle the data expando

+	acceptData: function( elem ) {

+		// Do not set data on non-element because it will not be cleared (#8335).

+		if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {

+			return false;

+		}

+

+		var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];

+

+		// nodes accept data unless otherwise specified; rejection can be conditional

+		return !noData || noData !== true && elem.getAttribute("classid") === noData;

+	}

+});

+

+jQuery.fn.extend({

+	data: function( key, value ) {

+		var attrs, name,

+			data = null,

+			i = 0,

+			elem = this[0];

+

+		// Special expections of .data basically thwart jQuery.access,

+		// so implement the relevant behavior ourselves

+

+		// Gets all values

+		if ( key === undefined ) {

+			if ( this.length ) {

+				data = jQuery.data( elem );

+

+				if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {

+					attrs = elem.attributes;

+					for ( ; i < attrs.length; i++ ) {

+						name = attrs[i].name;

+

+						if ( name.indexOf("data-") === 0 ) {

+							name = jQuery.camelCase( name.slice(5) );

+

+							dataAttr( elem, name, data[ name ] );

+						}

+					}

+					jQuery._data( elem, "parsedAttrs", true );

+				}

+			}

+

+			return data;

+		}

+

+		// Sets multiple values

+		if ( typeof key === "object" ) {

+			return this.each(function() {

+				jQuery.data( this, key );

+			});

+		}

+

+		return arguments.length > 1 ?

+

+			// Sets one value

+			this.each(function() {

+				jQuery.data( this, key, value );

+			}) :

+

+			// Gets one value

+			// Try to fetch any internally stored data first

+			elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;

+	},

+

+	removeData: function( key ) {

+		return this.each(function() {

+			jQuery.removeData( this, key );

+		});

+	}

+});

+

+function dataAttr( elem, key, data ) {

+	// If nothing was found internally, try to fetch any

+	// data from the HTML5 data-* attribute

+	if ( data === undefined && elem.nodeType === 1 ) {

+

+		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();

+

+		data = elem.getAttribute( name );

+

+		if ( typeof data === "string" ) {

+			try {

+				data = data === "true" ? true :

+					data === "false" ? false :

+					data === "null" ? null :

+					// Only convert to a number if it doesn't change the string

+					+data + "" === data ? +data :

+					rbrace.test( data ) ? jQuery.parseJSON( data ) :

+						data;

+			} catch( e ) {}

+

+			// Make sure we set the data so it isn't changed later

+			jQuery.data( elem, key, data );

+

+		} else {

+			data = undefined;

+		}

+	}

+

+	return data;

+}

+

+// checks a cache object for emptiness

+function isEmptyDataObject( obj ) {

+	var name;

+	for ( name in obj ) {

+

+		// if the public data object is empty, the private is still empty

+		if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {

+			continue;

+		}

+		if ( name !== "toJSON" ) {

+			return false;

+		}

+	}

+

+	return true;

+}

+jQuery.extend({

+	queue: function( elem, type, data ) {

+		var queue;

+

+		if ( elem ) {

+			type = ( type || "fx" ) + "queue";

+			queue = jQuery._data( elem, type );

+

+			// Speed up dequeue by getting out quickly if this is just a lookup

+			if ( data ) {

+				if ( !queue || jQuery.isArray(data) ) {

+					queue = jQuery._data( elem, type, jQuery.makeArray(data) );

+				} else {

+					queue.push( data );

+				}

+			}

+			return queue || [];

+		}

+	},

+

+	dequeue: function( elem, type ) {

+		type = type || "fx";

+

+		var queue = jQuery.queue( elem, type ),

+			startLength = queue.length,

+			fn = queue.shift(),

+			hooks = jQuery._queueHooks( elem, type ),

+			next = function() {

+				jQuery.dequeue( elem, type );

+			};

+

+		// If the fx queue is dequeued, always remove the progress sentinel

+		if ( fn === "inprogress" ) {

+			fn = queue.shift();

+			startLength--;

+		}

+

+		if ( fn ) {

+

+			// Add a progress sentinel to prevent the fx queue from being

+			// automatically dequeued

+			if ( type === "fx" ) {

+				queue.unshift( "inprogress" );

+			}

+

+			// clear up the last queue stop function

+			delete hooks.stop;

+			fn.call( elem, next, hooks );

+		}

+

+		if ( !startLength && hooks ) {

+			hooks.empty.fire();

+		}

+	},

+

+	// not intended for public consumption - generates a queueHooks object, or returns the current one

+	_queueHooks: function( elem, type ) {

+		var key = type + "queueHooks";

+		return jQuery._data( elem, key ) || jQuery._data( elem, key, {

+			empty: jQuery.Callbacks("once memory").add(function() {

+				jQuery._removeData( elem, type + "queue" );

+				jQuery._removeData( elem, key );

+			})

+		});

+	}

+});

+

+jQuery.fn.extend({

+	queue: function( type, data ) {

+		var setter = 2;

+

+		if ( typeof type !== "string" ) {

+			data = type;

+			type = "fx";

+			setter--;

+		}

+

+		if ( arguments.length < setter ) {

+			return jQuery.queue( this[0], type );

+		}

+

+		return data === undefined ?

+			this :

+			this.each(function() {

+				var queue = jQuery.queue( this, type, data );

+

+				// ensure a hooks for this queue

+				jQuery._queueHooks( this, type );

+

+				if ( type === "fx" && queue[0] !== "inprogress" ) {

+					jQuery.dequeue( this, type );

+				}

+			});

+	},

+	dequeue: function( type ) {

+		return this.each(function() {

+			jQuery.dequeue( this, type );

+		});

+	},

+	// Based off of the plugin by Clint Helfers, with permission.

+	// http://blindsignals.com/index.php/2009/07/jquery-delay/

+	delay: function( time, type ) {

+		time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;

+		type = type || "fx";

+

+		return this.queue( type, function( next, hooks ) {

+			var timeout = setTimeout( next, time );

+			hooks.stop = function() {

+				clearTimeout( timeout );

+			};

+		});

+	},

+	clearQueue: function( type ) {

+		return this.queue( type || "fx", [] );

+	},

+	// Get a promise resolved when queues of a certain type

+	// are emptied (fx is the type by default)

+	promise: function( type, obj ) {

+		var tmp,

+			count = 1,

+			defer = jQuery.Deferred(),

+			elements = this,

+			i = this.length,

+			resolve = function() {

+				if ( !( --count ) ) {

+					defer.resolveWith( elements, [ elements ] );

+				}

+			};

+

+		if ( typeof type !== "string" ) {

+			obj = type;

+			type = undefined;

+		}

+		type = type || "fx";

+

+		while( i-- ) {

+			tmp = jQuery._data( elements[ i ], type + "queueHooks" );

+			if ( tmp && tmp.empty ) {

+				count++;

+				tmp.empty.add( resolve );

+			}

+		}

+		resolve();

+		return defer.promise( obj );

+	}

+});

+var nodeHook, boolHook,

+	rclass = /[\t\r\n\f]/g,

+	rreturn = /\r/g,

+	rfocusable = /^(?:input|select|textarea|button|object)$/i,

+	rclickable = /^(?:a|area)$/i,

+	ruseDefault = /^(?:checked|selected)$/i,

+	getSetAttribute = jQuery.support.getSetAttribute,

+	getSetInput = jQuery.support.input;

+

+jQuery.fn.extend({

+	attr: function( name, value ) {

+		return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );

+	},

+

+	removeAttr: function( name ) {

+		return this.each(function() {

+			jQuery.removeAttr( this, name );

+		});

+	},

+

+	prop: function( name, value ) {

+		return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );

+	},

+

+	removeProp: function( name ) {

+		name = jQuery.propFix[ name ] || name;

+		return this.each(function() {

+			// try/catch handles cases where IE balks (such as removing a property on window)

+			try {

+				this[ name ] = undefined;

+				delete this[ name ];

+			} catch( e ) {}

+		});

+	},

+

+	addClass: function( value ) {

+		var classes, elem, cur, clazz, j,

+			i = 0,

+			len = this.length,

+			proceed = typeof value === "string" && value;

+

+		if ( jQuery.isFunction( value ) ) {

+			return this.each(function( j ) {

+				jQuery( this ).addClass( value.call( this, j, this.className ) );

+			});

+		}

+

+		if ( proceed ) {

+			// The disjunction here is for better compressibility (see removeClass)

+			classes = ( value || "" ).match( core_rnotwhite ) || [];

+

+			for ( ; i < len; i++ ) {

+				elem = this[ i ];

+				cur = elem.nodeType === 1 && ( elem.className ?

+					( " " + elem.className + " " ).replace( rclass, " " ) :

+					" "

+				);

+

+				if ( cur ) {

+					j = 0;

+					while ( (clazz = classes[j++]) ) {

+						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {

+							cur += clazz + " ";

+						}

+					}

+					elem.className = jQuery.trim( cur );

+

+				}

+			}

+		}

+

+		return this;

+	},

+

+	removeClass: function( value ) {

+		var classes, elem, cur, clazz, j,

+			i = 0,

+			len = this.length,

+			proceed = arguments.length === 0 || typeof value === "string" && value;

+

+		if ( jQuery.isFunction( value ) ) {

+			return this.each(function( j ) {

+				jQuery( this ).removeClass( value.call( this, j, this.className ) );

+			});

+		}

+		if ( proceed ) {

+			classes = ( value || "" ).match( core_rnotwhite ) || [];

+

+			for ( ; i < len; i++ ) {

+				elem = this[ i ];

+				// This expression is here for better compressibility (see addClass)

+				cur = elem.nodeType === 1 && ( elem.className ?

+					( " " + elem.className + " " ).replace( rclass, " " ) :

+					""

+				);

+

+				if ( cur ) {

+					j = 0;

+					while ( (clazz = classes[j++]) ) {

+						// Remove *all* instances

+						while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {

+							cur = cur.replace( " " + clazz + " ", " " );

+						}

+					}

+					elem.className = value ? jQuery.trim( cur ) : "";

+				}

+			}

+		}

+

+		return this;

+	},

+

+	toggleClass: function( value, stateVal ) {

+		var type = typeof value;

+

+		if ( typeof stateVal === "boolean" && type === "string" ) {

+			return stateVal ? this.addClass( value ) : this.removeClass( value );

+		}

+

+		if ( jQuery.isFunction( value ) ) {

+			return this.each(function( i ) {

+				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );

+			});

+		}

+

+		return this.each(function() {

+			if ( type === "string" ) {

+				// toggle individual class names

+				var className,

+					i = 0,

+					self = jQuery( this ),

+					classNames = value.match( core_rnotwhite ) || [];

+

+				while ( (className = classNames[ i++ ]) ) {

+					// check each className given, space separated list

+					if ( self.hasClass( className ) ) {

+						self.removeClass( className );

+					} else {

+						self.addClass( className );

+					}

+				}

+

+			// Toggle whole class name

+			} else if ( type === core_strundefined || type === "boolean" ) {

+				if ( this.className ) {

+					// store className if set

+					jQuery._data( this, "__className__", this.className );

+				}

+

+				// If the element has a class name or if we're passed "false",

+				// then remove the whole classname (if there was one, the above saved it).

+				// Otherwise bring back whatever was previously saved (if anything),

+				// falling back to the empty string if nothing was stored.

+				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";

+			}

+		});

+	},

+

+	hasClass: function( selector ) {

+		var className = " " + selector + " ",

+			i = 0,

+			l = this.length;

+		for ( ; i < l; i++ ) {

+			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {

+				return true;

+			}

+		}

+

+		return false;

+	},

+

+	val: function( value ) {

+		var ret, hooks, isFunction,

+			elem = this[0];

+

+		if ( !arguments.length ) {

+			if ( elem ) {

+				hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];

+

+				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {

+					return ret;

+				}

+

+				ret = elem.value;

+

+				return typeof ret === "string" ?

+					// handle most common string cases

+					ret.replace(rreturn, "") :

+					// handle cases where value is null/undef or number

+					ret == null ? "" : ret;

+			}

+

+			return;

+		}

+

+		isFunction = jQuery.isFunction( value );

+

+		return this.each(function( i ) {

+			var val;

+

+			if ( this.nodeType !== 1 ) {

+				return;

+			}

+

+			if ( isFunction ) {

+				val = value.call( this, i, jQuery( this ).val() );

+			} else {

+				val = value;

+			}

+

+			// Treat null/undefined as ""; convert numbers to string

+			if ( val == null ) {

+				val = "";

+			} else if ( typeof val === "number" ) {

+				val += "";

+			} else if ( jQuery.isArray( val ) ) {

+				val = jQuery.map(val, function ( value ) {

+					return value == null ? "" : value + "";

+				});

+			}

+

+			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];

+

+			// If set returns undefined, fall back to normal setting

+			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {

+				this.value = val;

+			}

+		});

+	}

+});

+

+jQuery.extend({

+	valHooks: {

+		option: {

+			get: function( elem ) {

+				// Use proper attribute retrieval(#6932, #12072)

+				var val = jQuery.find.attr( elem, "value" );

+				return val != null ?

+					val :

+					elem.text;

+			}

+		},

+		select: {

+			get: function( elem ) {

+				var value, option,

+					options = elem.options,

+					index = elem.selectedIndex,

+					one = elem.type === "select-one" || index < 0,

+					values = one ? null : [],

+					max = one ? index + 1 : options.length,

+					i = index < 0 ?

+						max :

+						one ? index : 0;

+

+				// Loop through all the selected options

+				for ( ; i < max; i++ ) {

+					option = options[ i ];

+

+					// oldIE doesn't update selected after form reset (#2551)

+					if ( ( option.selected || i === index ) &&

+							// Don't return options that are disabled or in a disabled optgroup

+							( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&

+							( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {

+

+						// Get the specific value for the option

+						value = jQuery( option ).val();

+

+						// We don't need an array for one selects

+						if ( one ) {

+							return value;

+						}

+

+						// Multi-Selects return an array

+						values.push( value );

+					}

+				}

+

+				return values;

+			},

+

+			set: function( elem, value ) {

+				var optionSet, option,

+					options = elem.options,

+					values = jQuery.makeArray( value ),

+					i = options.length;

+

+				while ( i-- ) {

+					option = options[ i ];

+					if ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) {

+						optionSet = true;

+					}

+				}

+

+				// force browsers to behave consistently when non-matching value is set

+				if ( !optionSet ) {

+					elem.selectedIndex = -1;

+				}

+				return values;

+			}

+		}

+	},

+

+	attr: function( elem, name, value ) {

+		var hooks, ret,

+			nType = elem.nodeType;

+

+		// don't get/set attributes on text, comment and attribute nodes

+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {

+			return;

+		}

+

+		// Fallback to prop when attributes are not supported

+		if ( typeof elem.getAttribute === core_strundefined ) {

+			return jQuery.prop( elem, name, value );

+		}

+

+		// All attributes are lowercase

+		// Grab necessary hook if one is defined

+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {

+			name = name.toLowerCase();

+			hooks = jQuery.attrHooks[ name ] ||

+				( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );

+		}

+

+		if ( value !== undefined ) {

+

+			if ( value === null ) {

+				jQuery.removeAttr( elem, name );

+

+			} else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {

+				return ret;

+

+			} else {

+				elem.setAttribute( name, value + "" );

+				return value;

+			}

+

+		} else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {

+			return ret;

+

+		} else {

+			ret = jQuery.find.attr( elem, name );

+

+			// Non-existent attributes return null, we normalize to undefined

+			return ret == null ?

+				undefined :

+				ret;

+		}

+	},

+

+	removeAttr: function( elem, value ) {

+		var name, propName,

+			i = 0,

+			attrNames = value && value.match( core_rnotwhite );

+

+		if ( attrNames && elem.nodeType === 1 ) {

+			while ( (name = attrNames[i++]) ) {

+				propName = jQuery.propFix[ name ] || name;

+

+				// Boolean attributes get special treatment (#10870)

+				if ( jQuery.expr.match.bool.test( name ) ) {

+					// Set corresponding property to false

+					if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {

+						elem[ propName ] = false;

+					// Support: IE<9

+					// Also clear defaultChecked/defaultSelected (if appropriate)

+					} else {

+						elem[ jQuery.camelCase( "default-" + name ) ] =

+							elem[ propName ] = false;

+					}

+

+				// See #9699 for explanation of this approach (setting first, then removal)

+				} else {

+					jQuery.attr( elem, name, "" );

+				}

+

+				elem.removeAttribute( getSetAttribute ? name : propName );

+			}

+		}

+	},

+

+	attrHooks: {

+		type: {

+			set: function( elem, value ) {

+				if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {

+					// Setting the type on a radio button after the value resets the value in IE6-9

+					// Reset value to default in case type is set after value during creation

+					var val = elem.value;

+					elem.setAttribute( "type", value );

+					if ( val ) {

+						elem.value = val;

+					}

+					return value;

+				}

+			}

+		}

+	},

+

+	propFix: {

+		"for": "htmlFor",

+		"class": "className"

+	},

+

+	prop: function( elem, name, value ) {

+		var ret, hooks, notxml,

+			nType = elem.nodeType;

+

+		// don't get/set properties on text, comment and attribute nodes

+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {

+			return;

+		}

+

+		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );

+

+		if ( notxml ) {

+			// Fix name and attach hooks

+			name = jQuery.propFix[ name ] || name;

+			hooks = jQuery.propHooks[ name ];

+		}

+

+		if ( value !== undefined ) {

+			return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?

+				ret :

+				( elem[ name ] = value );

+

+		} else {

+			return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?

+				ret :

+				elem[ name ];

+		}

+	},

+

+	propHooks: {

+		tabIndex: {

+			get: function( elem ) {

+				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set

+				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/

+				// Use proper attribute retrieval(#12072)

+				var tabindex = jQuery.find.attr( elem, "tabindex" );

+

+				return tabindex ?

+					parseInt( tabindex, 10 ) :

+					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?

+						0 :

+						-1;

+			}

+		}

+	}

+});

+

+// Hooks for boolean attributes

+boolHook = {

+	set: function( elem, value, name ) {

+		if ( value === false ) {

+			// Remove boolean attributes when set to false

+			jQuery.removeAttr( elem, name );

+		} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {

+			// IE<8 needs the *property* name

+			elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );

+

+		// Use defaultChecked and defaultSelected for oldIE

+		} else {

+			elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;

+		}

+

+		return name;

+	}

+};

+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {

+	var getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr;

+

+	jQuery.expr.attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?

+		function( elem, name, isXML ) {

+			var fn = jQuery.expr.attrHandle[ name ],

+				ret = isXML ?

+					undefined :

+					/* jshint eqeqeq: false */

+					(jQuery.expr.attrHandle[ name ] = undefined) !=

+						getter( elem, name, isXML ) ?

+

+						name.toLowerCase() :

+						null;

+			jQuery.expr.attrHandle[ name ] = fn;

+			return ret;

+		} :

+		function( elem, name, isXML ) {

+			return isXML ?

+				undefined :

+				elem[ jQuery.camelCase( "default-" + name ) ] ?

+					name.toLowerCase() :

+					null;

+		};

+});

+

+// fix oldIE attroperties

+if ( !getSetInput || !getSetAttribute ) {

+	jQuery.attrHooks.value = {

+		set: function( elem, value, name ) {

+			if ( jQuery.nodeName( elem, "input" ) ) {

+				// Does not return so that setAttribute is also used

+				elem.defaultValue = value;

+			} else {

+				// Use nodeHook if defined (#1954); otherwise setAttribute is fine

+				return nodeHook && nodeHook.set( elem, value, name );

+			}

+		}

+	};

+}

+

+// IE6/7 do not support getting/setting some attributes with get/setAttribute

+if ( !getSetAttribute ) {

+

+	// Use this for any attribute in IE6/7

+	// This fixes almost every IE6/7 issue

+	nodeHook = {

+		set: function( elem, value, name ) {

+			// Set the existing or create a new attribute node

+			var ret = elem.getAttributeNode( name );

+			if ( !ret ) {

+				elem.setAttributeNode(

+					(ret = elem.ownerDocument.createAttribute( name ))

+				);

+			}

+

+			ret.value = value += "";

+

+			// Break association with cloned elements by also using setAttribute (#9646)

+			return name === "value" || value === elem.getAttribute( name ) ?

+				value :

+				undefined;

+		}

+	};

+	jQuery.expr.attrHandle.id = jQuery.expr.attrHandle.name = jQuery.expr.attrHandle.coords =

+		// Some attributes are constructed with empty-string values when not defined

+		function( elem, name, isXML ) {

+			var ret;

+			return isXML ?

+				undefined :

+				(ret = elem.getAttributeNode( name )) && ret.value !== "" ?

+					ret.value :

+					null;

+		};

+	jQuery.valHooks.button = {

+		get: function( elem, name ) {

+			var ret = elem.getAttributeNode( name );

+			return ret && ret.specified ?

+				ret.value :

+				undefined;

+		},

+		set: nodeHook.set

+	};

+

+	// Set contenteditable to false on removals(#10429)

+	// Setting to empty string throws an error as an invalid value

+	jQuery.attrHooks.contenteditable = {

+		set: function( elem, value, name ) {

+			nodeHook.set( elem, value === "" ? false : value, name );

+		}

+	};

+

+	// Set width and height to auto instead of 0 on empty string( Bug #8150 )

+	// This is for removals

+	jQuery.each([ "width", "height" ], function( i, name ) {

+		jQuery.attrHooks[ name ] = {

+			set: function( elem, value ) {

+				if ( value === "" ) {

+					elem.setAttribute( name, "auto" );

+					return value;

+				}

+			}

+		};

+	});

+}

+

+

+// Some attributes require a special call on IE

+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx

+if ( !jQuery.support.hrefNormalized ) {

+	// href/src property should get the full normalized URL (#10299/#12915)

+	jQuery.each([ "href", "src" ], function( i, name ) {

+		jQuery.propHooks[ name ] = {

+			get: function( elem ) {

+				return elem.getAttribute( name, 4 );

+			}

+		};

+	});

+}

+

+if ( !jQuery.support.style ) {

+	jQuery.attrHooks.style = {

+		get: function( elem ) {

+			// Return undefined in the case of empty string

+			// Note: IE uppercases css property names, but if we were to .toLowerCase()

+			// .cssText, that would destroy case senstitivity in URL's, like in "background"

+			return elem.style.cssText || undefined;

+		},

+		set: function( elem, value ) {

+			return ( elem.style.cssText = value + "" );

+		}

+	};

+}

+

+// Safari mis-reports the default selected property of an option

+// Accessing the parent's selectedIndex property fixes it

+if ( !jQuery.support.optSelected ) {

+	jQuery.propHooks.selected = {

+		get: function( elem ) {

+			var parent = elem.parentNode;

+

+			if ( parent ) {

+				parent.selectedIndex;

+

+				// Make sure that it also works with optgroups, see #5701

+				if ( parent.parentNode ) {

+					parent.parentNode.selectedIndex;

+				}

+			}

+			return null;

+		}

+	};

+}

+

+jQuery.each([

+	"tabIndex",

+	"readOnly",

+	"maxLength",

+	"cellSpacing",

+	"cellPadding",

+	"rowSpan",

+	"colSpan",

+	"useMap",

+	"frameBorder",

+	"contentEditable"

+], function() {

+	jQuery.propFix[ this.toLowerCase() ] = this;

+});

+

+// IE6/7 call enctype encoding

+if ( !jQuery.support.enctype ) {

+	jQuery.propFix.enctype = "encoding";

+}

+

+// Radios and checkboxes getter/setter

+jQuery.each([ "radio", "checkbox" ], function() {

+	jQuery.valHooks[ this ] = {

+		set: function( elem, value ) {

+			if ( jQuery.isArray( value ) ) {

+				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );

+			}

+		}

+	};

+	if ( !jQuery.support.checkOn ) {

+		jQuery.valHooks[ this ].get = function( elem ) {

+			// Support: Webkit

+			// "" is returned instead of "on" if a value isn't specified

+			return elem.getAttribute("value") === null ? "on" : elem.value;

+		};

+	}

+});

+var rformElems = /^(?:input|select|textarea)$/i,

+	rkeyEvent = /^key/,

+	rmouseEvent = /^(?:mouse|contextmenu)|click/,

+	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,

+	rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;

+

+function returnTrue() {

+	return true;

+}

+

+function returnFalse() {

+	return false;

+}

+

+function safeActiveElement() {

+	try {

+		return document.activeElement;

+	} catch ( err ) { }

+}

+

+/*

+ * Helper functions for managing events -- not part of the public interface.

+ * Props to Dean Edwards' addEvent library for many of the ideas.

+ */

+jQuery.event = {

+

+	global: {},

+

+	add: function( elem, types, handler, data, selector ) {

+		var tmp, events, t, handleObjIn,

+			special, eventHandle, handleObj,

+			handlers, type, namespaces, origType,

+			elemData = jQuery._data( elem );

+

+		// Don't attach events to noData or text/comment nodes (but allow plain objects)

+		if ( !elemData ) {

+			return;

+		}

+

+		// Caller can pass in an object of custom data in lieu of the handler

+		if ( handler.handler ) {

+			handleObjIn = handler;

+			handler = handleObjIn.handler;

+			selector = handleObjIn.selector;

+		}

+

+		// Make sure that the handler has a unique ID, used to find/remove it later

+		if ( !handler.guid ) {

+			handler.guid = jQuery.guid++;

+		}

+

+		// Init the element's event structure and main handler, if this is the first

+		if ( !(events = elemData.events) ) {

+			events = elemData.events = {};

+		}

+		if ( !(eventHandle = elemData.handle) ) {

+			eventHandle = elemData.handle = function( e ) {

+				// Discard the second event of a jQuery.event.trigger() and

+				// when an event is called after a page has unloaded

+				return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?

+					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :

+					undefined;

+			};

+			// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events

+			eventHandle.elem = elem;

+		}

+

+		// Handle multiple events separated by a space

+		types = ( types || "" ).match( core_rnotwhite ) || [""];

+		t = types.length;

+		while ( t-- ) {

+			tmp = rtypenamespace.exec( types[t] ) || [];

+			type = origType = tmp[1];

+			namespaces = ( tmp[2] || "" ).split( "." ).sort();

+

+			// There *must* be a type, no attaching namespace-only handlers

+			if ( !type ) {

+				continue;

+			}

+

+			// If event changes its type, use the special event handlers for the changed type

+			special = jQuery.event.special[ type ] || {};

+

+			// If selector defined, determine special event api type, otherwise given type

+			type = ( selector ? special.delegateType : special.bindType ) || type;

+

+			// Update special based on newly reset type

+			special = jQuery.event.special[ type ] || {};

+

+			// handleObj is passed to all event handlers

+			handleObj = jQuery.extend({

+				type: type,

+				origType: origType,

+				data: data,

+				handler: handler,

+				guid: handler.guid,

+				selector: selector,

+				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),

+				namespace: namespaces.join(".")

+			}, handleObjIn );

+

+			// Init the event handler queue if we're the first

+			if ( !(handlers = events[ type ]) ) {

+				handlers = events[ type ] = [];

+				handlers.delegateCount = 0;

+

+				// Only use addEventListener/attachEvent if the special events handler returns false

+				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {

+					// Bind the global event handler to the element

+					if ( elem.addEventListener ) {

+						elem.addEventListener( type, eventHandle, false );

+

+					} else if ( elem.attachEvent ) {

+						elem.attachEvent( "on" + type, eventHandle );

+					}

+				}

+			}

+

+			if ( special.add ) {

+				special.add.call( elem, handleObj );

+

+				if ( !handleObj.handler.guid ) {

+					handleObj.handler.guid = handler.guid;

+				}

+			}

+

+			// Add to the element's handler list, delegates in front

+			if ( selector ) {

+				handlers.splice( handlers.delegateCount++, 0, handleObj );

+			} else {

+				handlers.push( handleObj );

+			}

+

+			// Keep track of which events have ever been used, for event optimization

+			jQuery.event.global[ type ] = true;

+		}

+

+		// Nullify elem to prevent memory leaks in IE

+		elem = null;

+	},

+

+	// Detach an event or set of events from an element

+	remove: function( elem, types, handler, selector, mappedTypes ) {

+		var j, handleObj, tmp,

+			origCount, t, events,

+			special, handlers, type,

+			namespaces, origType,

+			elemData = jQuery.hasData( elem ) && jQuery._data( elem );

+

+		if ( !elemData || !(events = elemData.events) ) {

+			return;

+		}

+

+		// Once for each type.namespace in types; type may be omitted

+		types = ( types || "" ).match( core_rnotwhite ) || [""];

+		t = types.length;

+		while ( t-- ) {

+			tmp = rtypenamespace.exec( types[t] ) || [];

+			type = origType = tmp[1];

+			namespaces = ( tmp[2] || "" ).split( "." ).sort();

+

+			// Unbind all events (on this namespace, if provided) for the element

+			if ( !type ) {

+				for ( type in events ) {

+					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );

+				}

+				continue;

+			}

+

+			special = jQuery.event.special[ type ] || {};

+			type = ( selector ? special.delegateType : special.bindType ) || type;

+			handlers = events[ type ] || [];

+			tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );

+

+			// Remove matching events

+			origCount = j = handlers.length;

+			while ( j-- ) {

+				handleObj = handlers[ j ];

+

+				if ( ( mappedTypes || origType === handleObj.origType ) &&

+					( !handler || handler.guid === handleObj.guid ) &&

+					( !tmp || tmp.test( handleObj.namespace ) ) &&

+					( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {

+					handlers.splice( j, 1 );

+

+					if ( handleObj.selector ) {

+						handlers.delegateCount--;

+					}

+					if ( special.remove ) {

+						special.remove.call( elem, handleObj );

+					}

+				}

+			}

+

+			// Remove generic event handler if we removed something and no more handlers exist

+			// (avoids potential for endless recursion during removal of special event handlers)

+			if ( origCount && !handlers.length ) {

+				if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {

+					jQuery.removeEvent( elem, type, elemData.handle );

+				}

+

+				delete events[ type ];

+			}

+		}

+

+		// Remove the expando if it's no longer used

+		if ( jQuery.isEmptyObject( events ) ) {

+			delete elemData.handle;

+

+			// removeData also checks for emptiness and clears the expando if empty

+			// so use it instead of delete

+			jQuery._removeData( elem, "events" );

+		}

+	},

+

+	trigger: function( event, data, elem, onlyHandlers ) {

+		var handle, ontype, cur,

+			bubbleType, special, tmp, i,

+			eventPath = [ elem || document ],

+			type = core_hasOwn.call( event, "type" ) ? event.type : event,

+			namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];

+

+		cur = tmp = elem = elem || document;

+

+		// Don't do events on text and comment nodes

+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {

+			return;

+		}

+

+		// focus/blur morphs to focusin/out; ensure we're not firing them right now

+		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {

+			return;

+		}

+

+		if ( type.indexOf(".") >= 0 ) {

+			// Namespaced trigger; create a regexp to match event type in handle()

+			namespaces = type.split(".");

+			type = namespaces.shift();

+			namespaces.sort();

+		}

+		ontype = type.indexOf(":") < 0 && "on" + type;

+

+		// Caller can pass in a jQuery.Event object, Object, or just an event type string

+		event = event[ jQuery.expando ] ?

+			event :

+			new jQuery.Event( type, typeof event === "object" && event );

+

+		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)

+		event.isTrigger = onlyHandlers ? 2 : 3;

+		event.namespace = namespaces.join(".");

+		event.namespace_re = event.namespace ?

+			new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :

+			null;

+

+		// Clean up the event in case it is being reused

+		event.result = undefined;

+		if ( !event.target ) {

+			event.target = elem;

+		}

+

+		// Clone any incoming data and prepend the event, creating the handler arg list

+		data = data == null ?

+			[ event ] :

+			jQuery.makeArray( data, [ event ] );

+

+		// Allow special events to draw outside the lines

+		special = jQuery.event.special[ type ] || {};

+		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {

+			return;

+		}

+

+		// Determine event propagation path in advance, per W3C events spec (#9951)

+		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)

+		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {

+

+			bubbleType = special.delegateType || type;

+			if ( !rfocusMorph.test( bubbleType + type ) ) {

+				cur = cur.parentNode;

+			}

+			for ( ; cur; cur = cur.parentNode ) {

+				eventPath.push( cur );

+				tmp = cur;

+			}

+

+			// Only add window if we got to document (e.g., not plain obj or detached DOM)

+			if ( tmp === (elem.ownerDocument || document) ) {

+				eventPath.push( tmp.defaultView || tmp.parentWindow || window );

+			}

+		}

+

+		// Fire handlers on the event path

+		i = 0;

+		while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {

+

+			event.type = i > 1 ?

+				bubbleType :

+				special.bindType || type;

+

+			// jQuery handler

+			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );

+			if ( handle ) {

+				handle.apply( cur, data );

+			}

+

+			// Native handler

+			handle = ontype && cur[ ontype ];

+			if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {

+				event.preventDefault();

+			}

+		}

+		event.type = type;

+

+		// If nobody prevented the default action, do it now

+		if ( !onlyHandlers && !event.isDefaultPrevented() ) {

+

+			if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&

+				jQuery.acceptData( elem ) ) {

+

+				// Call a native DOM method on the target with the same name name as the event.

+				// Can't use an .isFunction() check here because IE6/7 fails that test.

+				// Don't do default actions on window, that's where global variables be (#6170)

+				if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {

+

+					// Don't re-trigger an onFOO event when we call its FOO() method

+					tmp = elem[ ontype ];

+

+					if ( tmp ) {

+						elem[ ontype ] = null;

+					}

+

+					// Prevent re-triggering of the same event, since we already bubbled it above

+					jQuery.event.triggered = type;

+					try {

+						elem[ type ]();

+					} catch ( e ) {

+						// IE<9 dies on focus/blur to hidden element (#1486,#12518)

+						// only reproducible on winXP IE8 native, not IE9 in IE8 mode

+					}

+					jQuery.event.triggered = undefined;

+

+					if ( tmp ) {

+						elem[ ontype ] = tmp;

+					}

+				}

+			}

+		}

+

+		return event.result;

+	},

+

+	dispatch: function( event ) {

+

+		// Make a writable jQuery.Event from the native event object

+		event = jQuery.event.fix( event );

+

+		var i, ret, handleObj, matched, j,

+			handlerQueue = [],

+			args = core_slice.call( arguments ),

+			handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],

+			special = jQuery.event.special[ event.type ] || {};

+

+		// Use the fix-ed jQuery.Event rather than the (read-only) native event

+		args[0] = event;

+		event.delegateTarget = this;

+

+		// Call the preDispatch hook for the mapped type, and let it bail if desired

+		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {

+			return;

+		}

+

+		// Determine handlers

+		handlerQueue = jQuery.event.handlers.call( this, event, handlers );

+

+		// Run delegates first; they may want to stop propagation beneath us

+		i = 0;

+		while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {

+			event.currentTarget = matched.elem;

+

+			j = 0;

+			while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {

+

+				// Triggered event must either 1) have no namespace, or

+				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).

+				if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {

+

+					event.handleObj = handleObj;

+					event.data = handleObj.data;

+

+					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )

+							.apply( matched.elem, args );

+

+					if ( ret !== undefined ) {

+						if ( (event.result = ret) === false ) {

+							event.preventDefault();

+							event.stopPropagation();

+						}

+					}

+				}

+			}

+		}

+

+		// Call the postDispatch hook for the mapped type

+		if ( special.postDispatch ) {

+			special.postDispatch.call( this, event );

+		}

+

+		return event.result;

+	},

+

+	handlers: function( event, handlers ) {

+		var sel, handleObj, matches, i,

+			handlerQueue = [],

+			delegateCount = handlers.delegateCount,

+			cur = event.target;

+

+		// Find delegate handlers

+		// Black-hole SVG <use> instance trees (#13180)

+		// Avoid non-left-click bubbling in Firefox (#3861)

+		if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {

+

+			/* jshint eqeqeq: false */

+			for ( ; cur != this; cur = cur.parentNode || this ) {

+				/* jshint eqeqeq: true */

+

+				// Don't check non-elements (#13208)

+				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)

+				if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {

+					matches = [];

+					for ( i = 0; i < delegateCount; i++ ) {

+						handleObj = handlers[ i ];

+

+						// Don't conflict with Object.prototype properties (#13203)

+						sel = handleObj.selector + " ";

+

+						if ( matches[ sel ] === undefined ) {

+							matches[ sel ] = handleObj.needsContext ?

+								jQuery( sel, this ).index( cur ) >= 0 :

+								jQuery.find( sel, this, null, [ cur ] ).length;

+						}

+						if ( matches[ sel ] ) {

+							matches.push( handleObj );

+						}

+					}

+					if ( matches.length ) {

+						handlerQueue.push({ elem: cur, handlers: matches });

+					}

+				}

+			}

+		}

+

+		// Add the remaining (directly-bound) handlers

+		if ( delegateCount < handlers.length ) {

+			handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });

+		}

+

+		return handlerQueue;

+	},

+

+	fix: function( event ) {

+		if ( event[ jQuery.expando ] ) {

+			return event;

+		}

+

+		// Create a writable copy of the event object and normalize some properties

+		var i, prop, copy,

+			type = event.type,

+			originalEvent = event,

+			fixHook = this.fixHooks[ type ];

+

+		if ( !fixHook ) {

+			this.fixHooks[ type ] = fixHook =

+				rmouseEvent.test( type ) ? this.mouseHooks :

+				rkeyEvent.test( type ) ? this.keyHooks :

+				{};

+		}

+		copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;

+

+		event = new jQuery.Event( originalEvent );

+

+		i = copy.length;

+		while ( i-- ) {

+			prop = copy[ i ];

+			event[ prop ] = originalEvent[ prop ];

+		}

+

+		// Support: IE<9

+		// Fix target property (#1925)

+		if ( !event.target ) {

+			event.target = originalEvent.srcElement || document;

+		}

+

+		// Support: Chrome 23+, Safari?

+		// Target should not be a text node (#504, #13143)

+		if ( event.target.nodeType === 3 ) {

+			event.target = event.target.parentNode;

+		}

+

+		// Support: IE<9

+		// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)

+		event.metaKey = !!event.metaKey;

+

+		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;

+	},

+

+	// Includes some event props shared by KeyEvent and MouseEvent

+	props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),

+

+	fixHooks: {},

+

+	keyHooks: {

+		props: "char charCode key keyCode".split(" "),

+		filter: function( event, original ) {

+

+			// Add which for key events

+			if ( event.which == null ) {

+				event.which = original.charCode != null ? original.charCode : original.keyCode;

+			}

+

+			return event;

+		}

+	},

+

+	mouseHooks: {

+		props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),

+		filter: function( event, original ) {

+			var body, eventDoc, doc,

+				button = original.button,

+				fromElement = original.fromElement;

+

+			// Calculate pageX/Y if missing and clientX/Y available

+			if ( event.pageX == null && original.clientX != null ) {

+				eventDoc = event.target.ownerDocument || document;

+				doc = eventDoc.documentElement;

+				body = eventDoc.body;

+

+				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );

+				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );

+			}

+

+			// Add relatedTarget, if necessary

+			if ( !event.relatedTarget && fromElement ) {

+				event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;

+			}

+

+			// Add which for click: 1 === left; 2 === middle; 3 === right

+			// Note: button is not normalized, so don't use it

+			if ( !event.which && button !== undefined ) {

+				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );

+			}

+

+			return event;

+		}

+	},

+

+	special: {

+		load: {

+			// Prevent triggered image.load events from bubbling to window.load

+			noBubble: true

+		},

+		focus: {

+			// Fire native event if possible so blur/focus sequence is correct

+			trigger: function() {

+				if ( this !== safeActiveElement() && this.focus ) {

+					try {

+						this.focus();

+						return false;

+					} catch ( e ) {

+						// Support: IE<9

+						// If we error on focus to hidden element (#1486, #12518),

+						// let .trigger() run the handlers

+					}

+				}

+			},

+			delegateType: "focusin"

+		},

+		blur: {

+			trigger: function() {

+				if ( this === safeActiveElement() && this.blur ) {

+					this.blur();

+					return false;

+				}

+			},

+			delegateType: "focusout"

+		},

+		click: {

+			// For checkbox, fire native event so checked state will be right

+			trigger: function() {

+				if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {

+					this.click();

+					return false;

+				}

+			},

+

+			// For cross-browser consistency, don't fire native .click() on links

+			_default: function( event ) {

+				return jQuery.nodeName( event.target, "a" );

+			}

+		},

+

+		beforeunload: {

+			postDispatch: function( event ) {

+

+				// Even when returnValue equals to undefined Firefox will still show alert

+				if ( event.result !== undefined ) {

+					event.originalEvent.returnValue = event.result;

+				}

+			}

+		}

+	},

+

+	simulate: function( type, elem, event, bubble ) {

+		// Piggyback on a donor event to simulate a different one.

+		// Fake originalEvent to avoid donor's stopPropagation, but if the

+		// simulated event prevents default then we do the same on the donor.

+		var e = jQuery.extend(

+			new jQuery.Event(),

+			event,

+			{

+				type: type,

+				isSimulated: true,

+				originalEvent: {}

+			}

+		);

+		if ( bubble ) {

+			jQuery.event.trigger( e, null, elem );

+		} else {

+			jQuery.event.dispatch.call( elem, e );

+		}

+		if ( e.isDefaultPrevented() ) {

+			event.preventDefault();

+		}

+	}

+};

+

+jQuery.removeEvent = document.removeEventListener ?

+	function( elem, type, handle ) {

+		if ( elem.removeEventListener ) {

+			elem.removeEventListener( type, handle, false );

+		}

+	} :

+	function( elem, type, handle ) {

+		var name = "on" + type;

+

+		if ( elem.detachEvent ) {

+

+			// #8545, #7054, preventing memory leaks for custom events in IE6-8

+			// detachEvent needed property on element, by name of that event, to properly expose it to GC

+			if ( typeof elem[ name ] === core_strundefined ) {

+				elem[ name ] = null;

+			}

+

+			elem.detachEvent( name, handle );

+		}

+	};

+

+jQuery.Event = function( src, props ) {

+	// Allow instantiation without the 'new' keyword

+	if ( !(this instanceof jQuery.Event) ) {

+		return new jQuery.Event( src, props );

+	}

+

+	// Event object

+	if ( src && src.type ) {

+		this.originalEvent = src;

+		this.type = src.type;

+

+		// Events bubbling up the document may have been marked as prevented

+		// by a handler lower down the tree; reflect the correct value.

+		this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||

+			src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;

+

+	// Event type

+	} else {

+		this.type = src;

+	}

+

+	// Put explicitly provided properties onto the event object

+	if ( props ) {

+		jQuery.extend( this, props );

+	}

+

+	// Create a timestamp if incoming event doesn't have one

+	this.timeStamp = src && src.timeStamp || jQuery.now();

+

+	// Mark it as fixed

+	this[ jQuery.expando ] = true;

+};

+

+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding

+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html

+jQuery.Event.prototype = {

+	isDefaultPrevented: returnFalse,

+	isPropagationStopped: returnFalse,

+	isImmediatePropagationStopped: returnFalse,

+

+	preventDefault: function() {

+		var e = this.originalEvent;

+

+		this.isDefaultPrevented = returnTrue;

+		if ( !e ) {

+			return;

+		}

+

+		// If preventDefault exists, run it on the original event

+		if ( e.preventDefault ) {

+			e.preventDefault();

+

+		// Support: IE

+		// Otherwise set the returnValue property of the original event to false

+		} else {

+			e.returnValue = false;

+		}

+	},

+	stopPropagation: function() {

+		var e = this.originalEvent;

+

+		this.isPropagationStopped = returnTrue;

+		if ( !e ) {

+			return;

+		}

+		// If stopPropagation exists, run it on the original event

+		if ( e.stopPropagation ) {

+			e.stopPropagation();

+		}

+

+		// Support: IE

+		// Set the cancelBubble property of the original event to true

+		e.cancelBubble = true;

+	},

+	stopImmediatePropagation: function() {

+		this.isImmediatePropagationStopped = returnTrue;

+		this.stopPropagation();

+	}

+};

+

+// Create mouseenter/leave events using mouseover/out and event-time checks

+jQuery.each({

+	mouseenter: "mouseover",

+	mouseleave: "mouseout"

+}, function( orig, fix ) {

+	jQuery.event.special[ orig ] = {

+		delegateType: fix,

+		bindType: fix,

+

+		handle: function( event ) {

+			var ret,

+				target = this,

+				related = event.relatedTarget,

+				handleObj = event.handleObj;

+

+			// For mousenter/leave call the handler if related is outside the target.

+			// NB: No relatedTarget if the mouse left/entered the browser window

+			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {

+				event.type = handleObj.origType;

+				ret = handleObj.handler.apply( this, arguments );

+				event.type = fix;

+			}

+			return ret;

+		}

+	};

+});

+

+// IE submit delegation

+if ( !jQuery.support.submitBubbles ) {

+

+	jQuery.event.special.submit = {

+		setup: function() {

+			// Only need this for delegated form submit events

+			if ( jQuery.nodeName( this, "form" ) ) {

+				return false;

+			}

+

+			// Lazy-add a submit handler when a descendant form may potentially be submitted

+			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {

+				// Node name check avoids a VML-related crash in IE (#9807)

+				var elem = e.target,

+					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;

+				if ( form && !jQuery._data( form, "submitBubbles" ) ) {

+					jQuery.event.add( form, "submit._submit", function( event ) {

+						event._submit_bubble = true;

+					});

+					jQuery._data( form, "submitBubbles", true );

+				}

+			});

+			// return undefined since we don't need an event listener

+		},

+

+		postDispatch: function( event ) {

+			// If form was submitted by the user, bubble the event up the tree

+			if ( event._submit_bubble ) {

+				delete event._submit_bubble;

+				if ( this.parentNode && !event.isTrigger ) {

+					jQuery.event.simulate( "submit", this.parentNode, event, true );

+				}

+			}

+		},

+

+		teardown: function() {

+			// Only need this for delegated form submit events

+			if ( jQuery.nodeName( this, "form" ) ) {

+				return false;

+			}

+

+			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above

+			jQuery.event.remove( this, "._submit" );

+		}

+	};

+}

+

+// IE change delegation and checkbox/radio fix

+if ( !jQuery.support.changeBubbles ) {

+

+	jQuery.event.special.change = {

+

+		setup: function() {

+

+			if ( rformElems.test( this.nodeName ) ) {

+				// IE doesn't fire change on a check/radio until blur; trigger it on click

+				// after a propertychange. Eat the blur-change in special.change.handle.

+				// This still fires onchange a second time for check/radio after blur.

+				if ( this.type === "checkbox" || this.type === "radio" ) {

+					jQuery.event.add( this, "propertychange._change", function( event ) {

+						if ( event.originalEvent.propertyName === "checked" ) {

+							this._just_changed = true;

+						}

+					});

+					jQuery.event.add( this, "click._change", function( event ) {

+						if ( this._just_changed && !event.isTrigger ) {

+							this._just_changed = false;

+						}

+						// Allow triggered, simulated change events (#11500)

+						jQuery.event.simulate( "change", this, event, true );

+					});

+				}

+				return false;

+			}

+			// Delegated event; lazy-add a change handler on descendant inputs

+			jQuery.event.add( this, "beforeactivate._change", function( e ) {

+				var elem = e.target;

+

+				if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {

+					jQuery.event.add( elem, "change._change", function( event ) {

+						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {

+							jQuery.event.simulate( "change", this.parentNode, event, true );

+						}

+					});

+					jQuery._data( elem, "changeBubbles", true );

+				}

+			});

+		},

+

+		handle: function( event ) {

+			var elem = event.target;

+

+			// Swallow native change events from checkbox/radio, we already triggered them above

+			if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {

+				return event.handleObj.handler.apply( this, arguments );

+			}

+		},

+

+		teardown: function() {

+			jQuery.event.remove( this, "._change" );

+

+			return !rformElems.test( this.nodeName );

+		}

+	};

+}

+

+// Create "bubbling" focus and blur events

+if ( !jQuery.support.focusinBubbles ) {

+	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {

+

+		// Attach a single capturing handler while someone wants focusin/focusout

+		var attaches = 0,

+			handler = function( event ) {

+				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );

+			};

+

+		jQuery.event.special[ fix ] = {

+			setup: function() {

+				if ( attaches++ === 0 ) {

+					document.addEventListener( orig, handler, true );

+				}

+			},

+			teardown: function() {

+				if ( --attaches === 0 ) {

+					document.removeEventListener( orig, handler, true );

+				}

+			}

+		};

+	});

+}

+

+jQuery.fn.extend({

+

+	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {

+		var type, origFn;

+

+		// Types can be a map of types/handlers

+		if ( typeof types === "object" ) {

+			// ( types-Object, selector, data )

+			if ( typeof selector !== "string" ) {

+				// ( types-Object, data )

+				data = data || selector;

+				selector = undefined;

+			}

+			for ( type in types ) {

+				this.on( type, selector, data, types[ type ], one );

+			}

+			return this;

+		}

+

+		if ( data == null && fn == null ) {

+			// ( types, fn )

+			fn = selector;

+			data = selector = undefined;

+		} else if ( fn == null ) {

+			if ( typeof selector === "string" ) {

+				// ( types, selector, fn )

+				fn = data;

+				data = undefined;

+			} else {

+				// ( types, data, fn )

+				fn = data;

+				data = selector;

+				selector = undefined;

+			}

+		}

+		if ( fn === false ) {

+			fn = returnFalse;

+		} else if ( !fn ) {

+			return this;

+		}

+

+		if ( one === 1 ) {

+			origFn = fn;

+			fn = function( event ) {

+				// Can use an empty set, since event contains the info

+				jQuery().off( event );

+				return origFn.apply( this, arguments );

+			};

+			// Use same guid so caller can remove using origFn

+			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );

+		}

+		return this.each( function() {

+			jQuery.event.add( this, types, fn, data, selector );

+		});

+	},

+	one: function( types, selector, data, fn ) {

+		return this.on( types, selector, data, fn, 1 );

+	},

+	off: function( types, selector, fn ) {

+		var handleObj, type;

+		if ( types && types.preventDefault && types.handleObj ) {

+			// ( event )  dispatched jQuery.Event

+			handleObj = types.handleObj;

+			jQuery( types.delegateTarget ).off(

+				handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,

+				handleObj.selector,

+				handleObj.handler

+			);

+			return this;

+		}

+		if ( typeof types === "object" ) {

+			// ( types-object [, selector] )

+			for ( type in types ) {

+				this.off( type, selector, types[ type ] );

+			}

+			return this;

+		}

+		if ( selector === false || typeof selector === "function" ) {

+			// ( types [, fn] )

+			fn = selector;

+			selector = undefined;

+		}

+		if ( fn === false ) {

+			fn = returnFalse;

+		}

+		return this.each(function() {

+			jQuery.event.remove( this, types, fn, selector );

+		});

+	},

+

+	trigger: function( type, data ) {

+		return this.each(function() {

+			jQuery.event.trigger( type, data, this );

+		});

+	},

+	triggerHandler: function( type, data ) {

+		var elem = this[0];

+		if ( elem ) {

+			return jQuery.event.trigger( type, data, elem, true );

+		}

+	}

+});

+var isSimple = /^.[^:#\[\.,]*$/,

+	rparentsprev = /^(?:parents|prev(?:Until|All))/,

+	rneedsContext = jQuery.expr.match.needsContext,

+	// methods guaranteed to produce a unique set when starting from a unique set

+	guaranteedUnique = {

+		children: true,

+		contents: true,

+		next: true,

+		prev: true

+	};

+

+jQuery.fn.extend({

+	find: function( selector ) {

+		var i,

+			ret = [],

+			self = this,

+			len = self.length;

+

+		if ( typeof selector !== "string" ) {

+			return this.pushStack( jQuery( selector ).filter(function() {

+				for ( i = 0; i < len; i++ ) {

+					if ( jQuery.contains( self[ i ], this ) ) {

+						return true;

+					}

+				}

+			}) );

+		}

+

+		for ( i = 0; i < len; i++ ) {

+			jQuery.find( selector, self[ i ], ret );

+		}

+

+		// Needed because $( selector, context ) becomes $( context ).find( selector )

+		ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );

+		ret.selector = this.selector ? this.selector + " " + selector : selector;

+		return ret;

+	},

+

+	has: function( target ) {

+		var i,

+			targets = jQuery( target, this ),

+			len = targets.length;

+

+		return this.filter(function() {

+			for ( i = 0; i < len; i++ ) {

+				if ( jQuery.contains( this, targets[i] ) ) {

+					return true;

+				}

+			}

+		});

+	},

+

+	not: function( selector ) {

+		return this.pushStack( winnow(this, selector || [], true) );

+	},

+

+	filter: function( selector ) {

+		return this.pushStack( winnow(this, selector || [], false) );

+	},

+

+	is: function( selector ) {

+		return !!winnow(

+			this,

+

+			// If this is a positional/relative selector, check membership in the returned set

+			// so $("p:first").is("p:last") won't return true for a doc with two "p".

+			typeof selector === "string" && rneedsContext.test( selector ) ?

+				jQuery( selector ) :

+				selector || [],

+			false

+		).length;

+	},

+

+	closest: function( selectors, context ) {

+		var cur,

+			i = 0,

+			l = this.length,

+			ret = [],

+			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?

+				jQuery( selectors, context || this.context ) :

+				0;

+

+		for ( ; i < l; i++ ) {

+			for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {

+				// Always skip document fragments

+				if ( cur.nodeType < 11 && (pos ?

+					pos.index(cur) > -1 :

+

+					// Don't pass non-elements to Sizzle

+					cur.nodeType === 1 &&

+						jQuery.find.matchesSelector(cur, selectors)) ) {

+

+					cur = ret.push( cur );

+					break;

+				}

+			}

+		}

+

+		return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );

+	},

+

+	// Determine the position of an element within

+	// the matched set of elements

+	index: function( elem ) {

+

+		// No argument, return index in parent

+		if ( !elem ) {

+			return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;

+		}

+

+		// index in selector

+		if ( typeof elem === "string" ) {

+			return jQuery.inArray( this[0], jQuery( elem ) );

+		}

+

+		// Locate the position of the desired element

+		return jQuery.inArray(

+			// If it receives a jQuery object, the first element is used

+			elem.jquery ? elem[0] : elem, this );

+	},

+

+	add: function( selector, context ) {

+		var set = typeof selector === "string" ?

+				jQuery( selector, context ) :

+				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),

+			all = jQuery.merge( this.get(), set );

+

+		return this.pushStack( jQuery.unique(all) );

+	},

+

+	addBack: function( selector ) {

+		return this.add( selector == null ?

+			this.prevObject : this.prevObject.filter(selector)

+		);

+	}

+});

+

+function sibling( cur, dir ) {

+	do {

+		cur = cur[ dir ];

+	} while ( cur && cur.nodeType !== 1 );

+

+	return cur;

+}

+

+jQuery.each({

+	parent: function( elem ) {

+		var parent = elem.parentNode;

+		return parent && parent.nodeType !== 11 ? parent : null;

+	},

+	parents: function( elem ) {

+		return jQuery.dir( elem, "parentNode" );

+	},

+	parentsUntil: function( elem, i, until ) {

+		return jQuery.dir( elem, "parentNode", until );

+	},

+	next: function( elem ) {

+		return sibling( elem, "nextSibling" );

+	},

+	prev: function( elem ) {

+		return sibling( elem, "previousSibling" );

+	},

+	nextAll: function( elem ) {

+		return jQuery.dir( elem, "nextSibling" );

+	},

+	prevAll: function( elem ) {

+		return jQuery.dir( elem, "previousSibling" );

+	},

+	nextUntil: function( elem, i, until ) {

+		return jQuery.dir( elem, "nextSibling", until );

+	},

+	prevUntil: function( elem, i, until ) {

+		return jQuery.dir( elem, "previousSibling", until );

+	},

+	siblings: function( elem ) {

+		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );

+	},

+	children: function( elem ) {

+		return jQuery.sibling( elem.firstChild );

+	},

+	contents: function( elem ) {

+		return jQuery.nodeName( elem, "iframe" ) ?

+			elem.contentDocument || elem.contentWindow.document :

+			jQuery.merge( [], elem.childNodes );

+	}

+}, function( name, fn ) {

+	jQuery.fn[ name ] = function( until, selector ) {

+		var ret = jQuery.map( this, fn, until );

+

+		if ( name.slice( -5 ) !== "Until" ) {

+			selector = until;

+		}

+

+		if ( selector && typeof selector === "string" ) {

+			ret = jQuery.filter( selector, ret );

+		}

+

+		if ( this.length > 1 ) {

+			// Remove duplicates

+			if ( !guaranteedUnique[ name ] ) {

+				ret = jQuery.unique( ret );

+			}

+

+			// Reverse order for parents* and prev-derivatives

+			if ( rparentsprev.test( name ) ) {

+				ret = ret.reverse();

+			}

+		}

+

+		return this.pushStack( ret );

+	};

+});

+

+jQuery.extend({

+	filter: function( expr, elems, not ) {

+		var elem = elems[ 0 ];

+

+		if ( not ) {

+			expr = ":not(" + expr + ")";

+		}

+

+		return elems.length === 1 && elem.nodeType === 1 ?

+			jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :

+			jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {

+				return elem.nodeType === 1;

+			}));

+	},

+

+	dir: function( elem, dir, until ) {

+		var matched = [],

+			cur = elem[ dir ];

+

+		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {

+			if ( cur.nodeType === 1 ) {

+				matched.push( cur );

+			}

+			cur = cur[dir];

+		}

+		return matched;

+	},

+

+	sibling: function( n, elem ) {

+		var r = [];

+

+		for ( ; n; n = n.nextSibling ) {

+			if ( n.nodeType === 1 && n !== elem ) {

+				r.push( n );

+			}

+		}

+

+		return r;

+	}

+});

+

+// Implement the identical functionality for filter and not

+function winnow( elements, qualifier, not ) {

+	if ( jQuery.isFunction( qualifier ) ) {

+		return jQuery.grep( elements, function( elem, i ) {

+			/* jshint -W018 */

+			return !!qualifier.call( elem, i, elem ) !== not;

+		});

+

+	}

+

+	if ( qualifier.nodeType ) {

+		return jQuery.grep( elements, function( elem ) {

+			return ( elem === qualifier ) !== not;

+		});

+

+	}

+

+	if ( typeof qualifier === "string" ) {

+		if ( isSimple.test( qualifier ) ) {

+			return jQuery.filter( qualifier, elements, not );

+		}

+

+		qualifier = jQuery.filter( qualifier, elements );

+	}

+

+	return jQuery.grep( elements, function( elem ) {

+		return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;

+	});

+}

+function createSafeFragment( document ) {

+	var list = nodeNames.split( "|" ),

+		safeFrag = document.createDocumentFragment();

+

+	if ( safeFrag.createElement ) {

+		while ( list.length ) {

+			safeFrag.createElement(

+				list.pop()

+			);

+		}

+	}

+	return safeFrag;

+}

+

+var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +

+		"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",

+	rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,

+	rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),

+	rleadingWhitespace = /^\s+/,

+	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,

+	rtagName = /<([\w:]+)/,

+	rtbody = /<tbody/i,

+	rhtml = /<|&#?\w+;/,

+	rnoInnerhtml = /<(?:script|style|link)/i,

+	manipulation_rcheckableType = /^(?:checkbox|radio)$/i,

+	// checked="checked" or checked

+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,

+	rscriptType = /^$|\/(?:java|ecma)script/i,

+	rscriptTypeMasked = /^true\/(.*)/,

+	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,

+

+	// We have to close these tags to support XHTML (#13200)

+	wrapMap = {

+		option: [ 1, "<select multiple='multiple'>", "</select>" ],

+		legend: [ 1, "<fieldset>", "</fieldset>" ],

+		area: [ 1, "<map>", "</map>" ],

+		param: [ 1, "<object>", "</object>" ],

+		thead: [ 1, "<table>", "</table>" ],

+		tr: [ 2, "<table><tbody>", "</tbody></table>" ],

+		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],

+		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],

+

+		// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,

+		// unless wrapped in a div with non-breaking characters in front of it.

+		_default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>"  ]

+	},

+	safeFragment = createSafeFragment( document ),

+	fragmentDiv = safeFragment.appendChild( document.createElement("div") );

+

+wrapMap.optgroup = wrapMap.option;

+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;

+wrapMap.th = wrapMap.td;

+

+jQuery.fn.extend({

+	text: function( value ) {

+		return jQuery.access( this, function( value ) {

+			return value === undefined ?

+				jQuery.text( this ) :

+				this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );

+		}, null, value, arguments.length );

+	},

+

+	append: function() {

+		return this.domManip( arguments, function( elem ) {

+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {

+				var target = manipulationTarget( this, elem );

+				target.appendChild( elem );

+			}

+		});

+	},

+

+	prepend: function() {

+		return this.domManip( arguments, function( elem ) {

+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {

+				var target = manipulationTarget( this, elem );

+				target.insertBefore( elem, target.firstChild );

+			}

+		});

+	},

+

+	before: function() {

+		return this.domManip( arguments, function( elem ) {

+			if ( this.parentNode ) {

+				this.parentNode.insertBefore( elem, this );

+			}

+		});

+	},

+

+	after: function() {

+		return this.domManip( arguments, function( elem ) {

+			if ( this.parentNode ) {

+				this.parentNode.insertBefore( elem, this.nextSibling );

+			}

+		});

+	},

+

+	// keepData is for internal use only--do not document

+	remove: function( selector, keepData ) {

+		var elem,

+			elems = selector ? jQuery.filter( selector, this ) : this,

+			i = 0;

+

+		for ( ; (elem = elems[i]) != null; i++ ) {

+

+			if ( !keepData && elem.nodeType === 1 ) {

+				jQuery.cleanData( getAll( elem ) );

+			}

+

+			if ( elem.parentNode ) {

+				if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {

+					setGlobalEval( getAll( elem, "script" ) );

+				}

+				elem.parentNode.removeChild( elem );

+			}

+		}

+

+		return this;

+	},

+

+	empty: function() {

+		var elem,

+			i = 0;

+

+		for ( ; (elem = this[i]) != null; i++ ) {

+			// Remove element nodes and prevent memory leaks

+			if ( elem.nodeType === 1 ) {

+				jQuery.cleanData( getAll( elem, false ) );

+			}

+

+			// Remove any remaining nodes

+			while ( elem.firstChild ) {

+				elem.removeChild( elem.firstChild );

+			}

+

+			// If this is a select, ensure that it displays empty (#12336)

+			// Support: IE<9

+			if ( elem.options && jQuery.nodeName( elem, "select" ) ) {

+				elem.options.length = 0;

+			}

+		}

+

+		return this;

+	},

+

+	clone: function( dataAndEvents, deepDataAndEvents ) {

+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;

+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;

+

+		return this.map( function () {

+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );

+		});

+	},

+

+	html: function( value ) {

+		return jQuery.access( this, function( value ) {

+			var elem = this[0] || {},

+				i = 0,

+				l = this.length;

+

+			if ( value === undefined ) {

+				return elem.nodeType === 1 ?

+					elem.innerHTML.replace( rinlinejQuery, "" ) :

+					undefined;

+			}

+

+			// See if we can take a shortcut and just use innerHTML

+			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&

+				( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&

+				( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&

+				!wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {

+

+				value = value.replace( rxhtmlTag, "<$1></$2>" );

+

+				try {

+					for (; i < l; i++ ) {

+						// Remove element nodes and prevent memory leaks

+						elem = this[i] || {};

+						if ( elem.nodeType === 1 ) {

+							jQuery.cleanData( getAll( elem, false ) );

+							elem.innerHTML = value;

+						}

+					}

+

+					elem = 0;

+

+				// If using innerHTML throws an exception, use the fallback method

+				} catch(e) {}

+			}

+

+			if ( elem ) {

+				this.empty().append( value );

+			}

+		}, null, value, arguments.length );

+	},

+

+	replaceWith: function() {

+		var

+			// Snapshot the DOM in case .domManip sweeps something relevant into its fragment

+			args = jQuery.map( this, function( elem ) {

+				return [ elem.nextSibling, elem.parentNode ];

+			}),

+			i = 0;

+

+		// Make the changes, replacing each context element with the new content

+		this.domManip( arguments, function( elem ) {

+			var next = args[ i++ ],

+				parent = args[ i++ ];

+

+			if ( parent ) {

+				// Don't use the snapshot next if it has moved (#13810)

+				if ( next && next.parentNode !== parent ) {

+					next = this.nextSibling;

+				}

+				jQuery( this ).remove();

+				parent.insertBefore( elem, next );

+			}

+		// Allow new content to include elements from the context set

+		}, true );

+

+		// Force removal if there was no new content (e.g., from empty arguments)

+		return i ? this : this.remove();

+	},

+

+	detach: function( selector ) {

+		return this.remove( selector, true );

+	},

+

+	domManip: function( args, callback, allowIntersection ) {

+

+		// Flatten any nested arrays

+		args = core_concat.apply( [], args );

+

+		var first, node, hasScripts,

+			scripts, doc, fragment,

+			i = 0,

+			l = this.length,

+			set = this,

+			iNoClone = l - 1,

+			value = args[0],

+			isFunction = jQuery.isFunction( value );

+

+		// We can't cloneNode fragments that contain checked, in WebKit

+		if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {

+			return this.each(function( index ) {

+				var self = set.eq( index );

+				if ( isFunction ) {

+					args[0] = value.call( this, index, self.html() );

+				}

+				self.domManip( args, callback, allowIntersection );

+			});

+		}

+

+		if ( l ) {

+			fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, !allowIntersection && this );

+			first = fragment.firstChild;

+

+			if ( fragment.childNodes.length === 1 ) {

+				fragment = first;

+			}

+

+			if ( first ) {

+				scripts = jQuery.map( getAll( fragment, "script" ), disableScript );

+				hasScripts = scripts.length;

+

+				// Use the original fragment for the last item instead of the first because it can end up

+				// being emptied incorrectly in certain situations (#8070).

+				for ( ; i < l; i++ ) {

+					node = fragment;

+

+					if ( i !== iNoClone ) {

+						node = jQuery.clone( node, true, true );

+

+						// Keep references to cloned scripts for later restoration

+						if ( hasScripts ) {

+							jQuery.merge( scripts, getAll( node, "script" ) );

+						}

+					}

+

+					callback.call( this[i], node, i );

+				}

+

+				if ( hasScripts ) {

+					doc = scripts[ scripts.length - 1 ].ownerDocument;

+

+					// Reenable scripts

+					jQuery.map( scripts, restoreScript );

+

+					// Evaluate executable scripts on first document insertion

+					for ( i = 0; i < hasScripts; i++ ) {

+						node = scripts[ i ];

+						if ( rscriptType.test( node.type || "" ) &&

+							!jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {

+

+							if ( node.src ) {

+								// Hope ajax is available...

+								jQuery._evalUrl( node.src );

+							} else {

+								jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );

+							}

+						}

+					}

+				}

+

+				// Fix #11809: Avoid leaking memory

+				fragment = first = null;

+			}

+		}

+

+		return this;

+	}

+});

+

+// Support: IE<8

+// Manipulating tables requires a tbody

+function manipulationTarget( elem, content ) {

+	return jQuery.nodeName( elem, "table" ) &&

+		jQuery.nodeName( content.nodeType === 1 ? content : content.firstChild, "tr" ) ?

+

+		elem.getElementsByTagName("tbody")[0] ||

+			elem.appendChild( elem.ownerDocument.createElement("tbody") ) :

+		elem;

+}

+

+// Replace/restore the type attribute of script elements for safe DOM manipulation

+function disableScript( elem ) {

+	elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type;

+	return elem;

+}

+function restoreScript( elem ) {

+	var match = rscriptTypeMasked.exec( elem.type );

+	if ( match ) {

+		elem.type = match[1];

+	} else {

+		elem.removeAttribute("type");

+	}

+	return elem;

+}

+

+// Mark scripts as having already been evaluated

+function setGlobalEval( elems, refElements ) {

+	var elem,

+		i = 0;

+	for ( ; (elem = elems[i]) != null; i++ ) {

+		jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );

+	}

+}

+

+function cloneCopyEvent( src, dest ) {

+

+	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {

+		return;

+	}

+

+	var type, i, l,

+		oldData = jQuery._data( src ),

+		curData = jQuery._data( dest, oldData ),

+		events = oldData.events;

+

+	if ( events ) {

+		delete curData.handle;

+		curData.events = {};

+

+		for ( type in events ) {

+			for ( i = 0, l = events[ type ].length; i < l; i++ ) {

+				jQuery.event.add( dest, type, events[ type ][ i ] );

+			}

+		}

+	}

+

+	// make the cloned public data object a copy from the original

+	if ( curData.data ) {

+		curData.data = jQuery.extend( {}, curData.data );

+	}

+}

+

+function fixCloneNodeIssues( src, dest ) {

+	var nodeName, e, data;

+

+	// We do not need to do anything for non-Elements

+	if ( dest.nodeType !== 1 ) {

+		return;

+	}

+

+	nodeName = dest.nodeName.toLowerCase();

+

+	// IE6-8 copies events bound via attachEvent when using cloneNode.

+	if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {

+		data = jQuery._data( dest );

+

+		for ( e in data.events ) {

+			jQuery.removeEvent( dest, e, data.handle );

+		}

+

+		// Event data gets referenced instead of copied if the expando gets copied too

+		dest.removeAttribute( jQuery.expando );

+	}

+

+	// IE blanks contents when cloning scripts, and tries to evaluate newly-set text

+	if ( nodeName === "script" && dest.text !== src.text ) {

+		disableScript( dest ).text = src.text;

+		restoreScript( dest );

+

+	// IE6-10 improperly clones children of object elements using classid.

+	// IE10 throws NoModificationAllowedError if parent is null, #12132.

+	} else if ( nodeName === "object" ) {

+		if ( dest.parentNode ) {

+			dest.outerHTML = src.outerHTML;

+		}

+

+		// This path appears unavoidable for IE9. When cloning an object

+		// element in IE9, the outerHTML strategy above is not sufficient.

+		// If the src has innerHTML and the destination does not,

+		// copy the src.innerHTML into the dest.innerHTML. #10324

+		if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {

+			dest.innerHTML = src.innerHTML;

+		}

+

+	} else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) {

+		// IE6-8 fails to persist the checked state of a cloned checkbox

+		// or radio button. Worse, IE6-7 fail to give the cloned element

+		// a checked appearance if the defaultChecked value isn't also set

+

+		dest.defaultChecked = dest.checked = src.checked;

+

+		// IE6-7 get confused and end up setting the value of a cloned

+		// checkbox/radio button to an empty string instead of "on"

+		if ( dest.value !== src.value ) {

+			dest.value = src.value;

+		}

+

+	// IE6-8 fails to return the selected option to the default selected

+	// state when cloning options

+	} else if ( nodeName === "option" ) {

+		dest.defaultSelected = dest.selected = src.defaultSelected;

+

+	// IE6-8 fails to set the defaultValue to the correct value when

+	// cloning other types of input fields

+	} else if ( nodeName === "input" || nodeName === "textarea" ) {

+		dest.defaultValue = src.defaultValue;

+	}

+}

+

+jQuery.each({

+	appendTo: "append",

+	prependTo: "prepend",

+	insertBefore: "before",

+	insertAfter: "after",

+	replaceAll: "replaceWith"

+}, function( name, original ) {

+	jQuery.fn[ name ] = function( selector ) {

+		var elems,

+			i = 0,

+			ret = [],

+			insert = jQuery( selector ),

+			last = insert.length - 1;

+

+		for ( ; i <= last; i++ ) {

+			elems = i === last ? this : this.clone(true);

+			jQuery( insert[i] )[ original ]( elems );

+

+			// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()

+			core_push.apply( ret, elems.get() );

+		}

+

+		return this.pushStack( ret );

+	};

+});

+

+function getAll( context, tag ) {

+	var elems, elem,

+		i = 0,

+		found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) :

+			typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) :

+			undefined;

+

+	if ( !found ) {

+		for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {

+			if ( !tag || jQuery.nodeName( elem, tag ) ) {

+				found.push( elem );

+			} else {

+				jQuery.merge( found, getAll( elem, tag ) );

+			}

+		}

+	}

+

+	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?

+		jQuery.merge( [ context ], found ) :

+		found;

+}

+

+// Used in buildFragment, fixes the defaultChecked property

+function fixDefaultChecked( elem ) {

+	if ( manipulation_rcheckableType.test( elem.type ) ) {

+		elem.defaultChecked = elem.checked;

+	}

+}

+

+jQuery.extend({

+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {

+		var destElements, node, clone, i, srcElements,

+			inPage = jQuery.contains( elem.ownerDocument, elem );

+

+		if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {

+			clone = elem.cloneNode( true );

+

+		// IE<=8 does not properly clone detached, unknown element nodes

+		} else {

+			fragmentDiv.innerHTML = elem.outerHTML;

+			fragmentDiv.removeChild( clone = fragmentDiv.firstChild );

+		}

+

+		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&

+				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {

+

+			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2

+			destElements = getAll( clone );

+			srcElements = getAll( elem );

+

+			// Fix all IE cloning issues

+			for ( i = 0; (node = srcElements[i]) != null; ++i ) {

+				// Ensure that the destination node is not null; Fixes #9587

+				if ( destElements[i] ) {

+					fixCloneNodeIssues( node, destElements[i] );

+				}

+			}

+		}

+

+		// Copy the events from the original to the clone

+		if ( dataAndEvents ) {

+			if ( deepDataAndEvents ) {

+				srcElements = srcElements || getAll( elem );

+				destElements = destElements || getAll( clone );

+

+				for ( i = 0; (node = srcElements[i]) != null; i++ ) {

+					cloneCopyEvent( node, destElements[i] );

+				}

+			} else {

+				cloneCopyEvent( elem, clone );

+			}

+		}

+

+		// Preserve script evaluation history

+		destElements = getAll( clone, "script" );

+		if ( destElements.length > 0 ) {

+			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );

+		}

+

+		destElements = srcElements = node = null;

+

+		// Return the cloned set

+		return clone;

+	},

+

+	buildFragment: function( elems, context, scripts, selection ) {

+		var j, elem, contains,

+			tmp, tag, tbody, wrap,

+			l = elems.length,

+

+			// Ensure a safe fragment

+			safe = createSafeFragment( context ),

+

+			nodes = [],

+			i = 0;

+

+		for ( ; i < l; i++ ) {

+			elem = elems[ i ];

+

+			if ( elem || elem === 0 ) {

+

+				// Add nodes directly

+				if ( jQuery.type( elem ) === "object" ) {

+					jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );

+

+				// Convert non-html into a text node

+				} else if ( !rhtml.test( elem ) ) {

+					nodes.push( context.createTextNode( elem ) );

+

+				// Convert html into DOM nodes

+				} else {

+					tmp = tmp || safe.appendChild( context.createElement("div") );

+

+					// Deserialize a standard representation

+					tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();

+					wrap = wrapMap[ tag ] || wrapMap._default;

+

+					tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];

+

+					// Descend through wrappers to the right content

+					j = wrap[0];

+					while ( j-- ) {

+						tmp = tmp.lastChild;

+					}

+

+					// Manually add leading whitespace removed by IE

+					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {

+						nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );

+					}

+

+					// Remove IE's autoinserted <tbody> from table fragments

+					if ( !jQuery.support.tbody ) {

+

+						// String was a <table>, *may* have spurious <tbody>

+						elem = tag === "table" && !rtbody.test( elem ) ?

+							tmp.firstChild :

+

+							// String was a bare <thead> or <tfoot>

+							wrap[1] === "<table>" && !rtbody.test( elem ) ?

+								tmp :

+								0;

+

+						j = elem && elem.childNodes.length;

+						while ( j-- ) {

+							if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {

+								elem.removeChild( tbody );

+							}

+						}

+					}

+

+					jQuery.merge( nodes, tmp.childNodes );

+

+					// Fix #12392 for WebKit and IE > 9

+					tmp.textContent = "";

+

+					// Fix #12392 for oldIE

+					while ( tmp.firstChild ) {

+						tmp.removeChild( tmp.firstChild );

+					}

+

+					// Remember the top-level container for proper cleanup

+					tmp = safe.lastChild;

+				}

+			}

+		}

+

+		// Fix #11356: Clear elements from fragment

+		if ( tmp ) {

+			safe.removeChild( tmp );

+		}

+

+		// Reset defaultChecked for any radios and checkboxes

+		// about to be appended to the DOM in IE 6/7 (#8060)

+		if ( !jQuery.support.appendChecked ) {

+			jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );

+		}

+

+		i = 0;

+		while ( (elem = nodes[ i++ ]) ) {

+

+			// #4087 - If origin and destination elements are the same, and this is

+			// that element, do not do anything

+			if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {

+				continue;

+			}

+

+			contains = jQuery.contains( elem.ownerDocument, elem );

+

+			// Append to fragment

+			tmp = getAll( safe.appendChild( elem ), "script" );

+

+			// Preserve script evaluation history

+			if ( contains ) {

+				setGlobalEval( tmp );

+			}

+

+			// Capture executables

+			if ( scripts ) {

+				j = 0;

+				while ( (elem = tmp[ j++ ]) ) {

+					if ( rscriptType.test( elem.type || "" ) ) {

+						scripts.push( elem );

+					}

+				}

+			}

+		}

+

+		tmp = null;

+

+		return safe;

+	},

+

+	cleanData: function( elems, /* internal */ acceptData ) {

+		var elem, type, id, data,

+			i = 0,

+			internalKey = jQuery.expando,

+			cache = jQuery.cache,

+			deleteExpando = jQuery.support.deleteExpando,

+			special = jQuery.event.special;

+

+		for ( ; (elem = elems[i]) != null; i++ ) {

+

+			if ( acceptData || jQuery.acceptData( elem ) ) {

+

+				id = elem[ internalKey ];

+				data = id && cache[ id ];

+

+				if ( data ) {

+					if ( data.events ) {

+						for ( type in data.events ) {

+							if ( special[ type ] ) {

+								jQuery.event.remove( elem, type );

+

+							// This is a shortcut to avoid jQuery.event.remove's overhead

+							} else {

+								jQuery.removeEvent( elem, type, data.handle );

+							}

+						}

+					}

+

+					// Remove cache only if it was not already removed by jQuery.event.remove

+					if ( cache[ id ] ) {

+

+						delete cache[ id ];

+

+						// IE does not allow us to delete expando properties from nodes,

+						// nor does it have a removeAttribute function on Document nodes;

+						// we must handle all of these cases

+						if ( deleteExpando ) {

+							delete elem[ internalKey ];

+

+						} else if ( typeof elem.removeAttribute !== core_strundefined ) {

+							elem.removeAttribute( internalKey );

+

+						} else {

+							elem[ internalKey ] = null;

+						}

+

+						core_deletedIds.push( id );

+					}

+				}

+			}

+		}

+	},

+

+	_evalUrl: function( url ) {

+		return jQuery.ajax({

+			url: url,

+			type: "GET",

+			dataType: "script",

+			async: false,

+			global: false,

+			"throws": true

+		});

+	}

+});

+jQuery.fn.extend({

+	wrapAll: function( html ) {

+		if ( jQuery.isFunction( html ) ) {

+			return this.each(function(i) {

+				jQuery(this).wrapAll( html.call(this, i) );

+			});

+		}

+

+		if ( this[0] ) {

+			// The elements to wrap the target around

+			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);

+

+			if ( this[0].parentNode ) {

+				wrap.insertBefore( this[0] );

+			}

+

+			wrap.map(function() {

+				var elem = this;

+

+				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {

+					elem = elem.firstChild;

+				}

+

+				return elem;

+			}).append( this );

+		}

+

+		return this;

+	},

+

+	wrapInner: function( html ) {

+		if ( jQuery.isFunction( html ) ) {

+			return this.each(function(i) {

+				jQuery(this).wrapInner( html.call(this, i) );

+			});

+		}

+

+		return this.each(function() {

+			var self = jQuery( this ),

+				contents = self.contents();

+

+			if ( contents.length ) {

+				contents.wrapAll( html );

+

+			} else {

+				self.append( html );

+			}

+		});

+	},

+

+	wrap: function( html ) {

+		var isFunction = jQuery.isFunction( html );

+

+		return this.each(function(i) {

+			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );

+		});

+	},

+

+	unwrap: function() {

+		return this.parent().each(function() {

+			if ( !jQuery.nodeName( this, "body" ) ) {

+				jQuery( this ).replaceWith( this.childNodes );

+			}

+		}).end();

+	}

+});

+var iframe, getStyles, curCSS,

+	ralpha = /alpha\([^)]*\)/i,

+	ropacity = /opacity\s*=\s*([^)]*)/,

+	rposition = /^(top|right|bottom|left)$/,

+	// swappable if display is none or starts with table except "table", "table-cell", or "table-caption"

+	// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display

+	rdisplayswap = /^(none|table(?!-c[ea]).+)/,

+	rmargin = /^margin/,

+	rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),

+	rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),

+	rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ),

+	elemdisplay = { BODY: "block" },

+

+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },

+	cssNormalTransform = {

+		letterSpacing: 0,

+		fontWeight: 400

+	},

+

+	cssExpand = [ "Top", "Right", "Bottom", "Left" ],

+	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];

+

+// return a css property mapped to a potentially vendor prefixed property

+function vendorPropName( style, name ) {

+

+	// shortcut for names that are not vendor prefixed

+	if ( name in style ) {

+		return name;

+	}

+

+	// check for vendor prefixed names

+	var capName = name.charAt(0).toUpperCase() + name.slice(1),

+		origName = name,

+		i = cssPrefixes.length;

+

+	while ( i-- ) {

+		name = cssPrefixes[ i ] + capName;

+		if ( name in style ) {

+			return name;

+		}

+	}

+

+	return origName;

+}

+

+function isHidden( elem, el ) {

+	// isHidden might be called from jQuery#filter function;

+	// in that case, element will be second argument

+	elem = el || elem;

+	return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );

+}

+

+function showHide( elements, show ) {

+	var display, elem, hidden,

+		values = [],

+		index = 0,

+		length = elements.length;

+

+	for ( ; index < length; index++ ) {

+		elem = elements[ index ];

+		if ( !elem.style ) {

+			continue;

+		}

+

+		values[ index ] = jQuery._data( elem, "olddisplay" );

+		display = elem.style.display;

+		if ( show ) {

+			// Reset the inline display of this element to learn if it is

+			// being hidden by cascaded rules or not

+			if ( !values[ index ] && display === "none" ) {

+				elem.style.display = "";

+			}

+

+			// Set elements which have been overridden with display: none

+			// in a stylesheet to whatever the default browser style is

+			// for such an element

+			if ( elem.style.display === "" && isHidden( elem ) ) {

+				values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );

+			}

+		} else {

+

+			if ( !values[ index ] ) {

+				hidden = isHidden( elem );

+

+				if ( display && display !== "none" || !hidden ) {

+					jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );

+				}

+			}

+		}

+	}

+

+	// Set the display of most of the elements in a second loop

+	// to avoid the constant reflow

+	for ( index = 0; index < length; index++ ) {

+		elem = elements[ index ];

+		if ( !elem.style ) {

+			continue;

+		}

+		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {

+			elem.style.display = show ? values[ index ] || "" : "none";

+		}

+	}

+

+	return elements;

+}

+

+jQuery.fn.extend({

+	css: function( name, value ) {

+		return jQuery.access( this, function( elem, name, value ) {

+			var len, styles,

+				map = {},

+				i = 0;

+

+			if ( jQuery.isArray( name ) ) {

+				styles = getStyles( elem );

+				len = name.length;

+

+				for ( ; i < len; i++ ) {

+					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );

+				}

+

+				return map;

+			}

+

+			return value !== undefined ?

+				jQuery.style( elem, name, value ) :

+				jQuery.css( elem, name );

+		}, name, value, arguments.length > 1 );

+	},

+	show: function() {

+		return showHide( this, true );

+	},

+	hide: function() {

+		return showHide( this );

+	},

+	toggle: function( state ) {

+		if ( typeof state === "boolean" ) {

+			return state ? this.show() : this.hide();

+		}

+

+		return this.each(function() {

+			if ( isHidden( this ) ) {

+				jQuery( this ).show();

+			} else {

+				jQuery( this ).hide();

+			}

+		});

+	}

+});

+

+jQuery.extend({

+	// Add in style property hooks for overriding the default

+	// behavior of getting and setting a style property

+	cssHooks: {

+		opacity: {

+			get: function( elem, computed ) {

+				if ( computed ) {

+					// We should always get a number back from opacity

+					var ret = curCSS( elem, "opacity" );

+					return ret === "" ? "1" : ret;

+				}

+			}

+		}

+	},

+

+	// Don't automatically add "px" to these possibly-unitless properties

+	cssNumber: {

+		"columnCount": true,

+		"fillOpacity": true,

+		"fontWeight": true,

+		"lineHeight": true,

+		"opacity": true,

+		"order": true,

+		"orphans": true,

+		"widows": true,

+		"zIndex": true,

+		"zoom": true

+	},

+

+	// Add in properties whose names you wish to fix before

+	// setting or getting the value

+	cssProps: {

+		// normalize float css property

+		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"

+	},

+

+	// Get and set the style property on a DOM Node

+	style: function( elem, name, value, extra ) {

+		// Don't set styles on text and comment nodes

+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {

+			return;

+		}

+

+		// Make sure that we're working with the right name

+		var ret, type, hooks,

+			origName = jQuery.camelCase( name ),

+			style = elem.style;

+

+		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );

+

+		// gets hook for the prefixed version

+		// followed by the unprefixed version

+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];

+

+		// Check if we're setting a value

+		if ( value !== undefined ) {

+			type = typeof value;

+

+			// convert relative number strings (+= or -=) to relative numbers. #7345

+			if ( type === "string" && (ret = rrelNum.exec( value )) ) {

+				value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );

+				// Fixes bug #9237

+				type = "number";

+			}

+

+			// Make sure that NaN and null values aren't set. See: #7116

+			if ( value == null || type === "number" && isNaN( value ) ) {

+				return;

+			}

+

+			// If a number was passed in, add 'px' to the (except for certain CSS properties)

+			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {

+				value += "px";

+			}

+

+			// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,

+			// but it would mean to define eight (for every problematic property) identical functions

+			if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {

+				style[ name ] = "inherit";

+			}

+

+			// If a hook was provided, use that value, otherwise just set the specified value

+			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {

+

+				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided

+				// Fixes bug #5509

+				try {

+					style[ name ] = value;

+				} catch(e) {}

+			}

+

+		} else {

+			// If a hook was provided get the non-computed value from there

+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {

+				return ret;

+			}

+

+			// Otherwise just get the value from the style object

+			return style[ name ];

+		}

+	},

+

+	css: function( elem, name, extra, styles ) {

+		var num, val, hooks,

+			origName = jQuery.camelCase( name );

+

+		// Make sure that we're working with the right name

+		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );

+

+		// gets hook for the prefixed version

+		// followed by the unprefixed version

+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];

+

+		// If a hook was provided get the computed value from there

+		if ( hooks && "get" in hooks ) {

+			val = hooks.get( elem, true, extra );

+		}

+

+		// Otherwise, if a way to get the computed value exists, use that

+		if ( val === undefined ) {

+			val = curCSS( elem, name, styles );

+		}

+

+		//convert "normal" to computed value

+		if ( val === "normal" && name in cssNormalTransform ) {

+			val = cssNormalTransform[ name ];

+		}

+

+		// Return, converting to number if forced or a qualifier was provided and val looks numeric

+		if ( extra === "" || extra ) {

+			num = parseFloat( val );

+			return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;

+		}

+		return val;

+	}

+});

+

+// NOTE: we've included the "window" in window.getComputedStyle

+// because jsdom on node.js will break without it.

+if ( window.getComputedStyle ) {

+	getStyles = function( elem ) {

+		return window.getComputedStyle( elem, null );

+	};

+

+	curCSS = function( elem, name, _computed ) {

+		var width, minWidth, maxWidth,

+			computed = _computed || getStyles( elem ),

+

+			// getPropertyValue is only needed for .css('filter') in IE9, see #12537

+			ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,

+			style = elem.style;

+

+		if ( computed ) {

+

+			if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {

+				ret = jQuery.style( elem, name );

+			}

+

+			// A tribute to the "awesome hack by Dean Edwards"

+			// Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right

+			// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels

+			// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values

+			if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {

+

+				// Remember the original values

+				width = style.width;

+				minWidth = style.minWidth;

+				maxWidth = style.maxWidth;

+

+				// Put in the new values to get a computed value out

+				style.minWidth = style.maxWidth = style.width = ret;

+				ret = computed.width;

+

+				// Revert the changed values

+				style.width = width;

+				style.minWidth = minWidth;

+				style.maxWidth = maxWidth;

+			}

+		}

+

+		return ret;

+	};

+} else if ( document.documentElement.currentStyle ) {

+	getStyles = function( elem ) {

+		return elem.currentStyle;

+	};

+

+	curCSS = function( elem, name, _computed ) {

+		var left, rs, rsLeft,

+			computed = _computed || getStyles( elem ),

+			ret = computed ? computed[ name ] : undefined,

+			style = elem.style;

+

+		// Avoid setting ret to empty string here

+		// so we don't default to auto

+		if ( ret == null && style && style[ name ] ) {

+			ret = style[ name ];

+		}

+

+		// From the awesome hack by Dean Edwards

+		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291

+

+		// If we're not dealing with a regular pixel number

+		// but a number that has a weird ending, we need to convert it to pixels

+		// but not position css attributes, as those are proportional to the parent element instead

+		// and we can't measure the parent instead because it might trigger a "stacking dolls" problem

+		if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {

+

+			// Remember the original values

+			left = style.left;

+			rs = elem.runtimeStyle;

+			rsLeft = rs && rs.left;

+

+			// Put in the new values to get a computed value out

+			if ( rsLeft ) {

+				rs.left = elem.currentStyle.left;

+			}

+			style.left = name === "fontSize" ? "1em" : ret;

+			ret = style.pixelLeft + "px";

+

+			// Revert the changed values

+			style.left = left;

+			if ( rsLeft ) {

+				rs.left = rsLeft;

+			}

+		}

+

+		return ret === "" ? "auto" : ret;

+	};

+}

+

+function setPositiveNumber( elem, value, subtract ) {

+	var matches = rnumsplit.exec( value );

+	return matches ?

+		// Guard against undefined "subtract", e.g., when used as in cssHooks

+		Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :

+		value;

+}

+

+function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {

+	var i = extra === ( isBorderBox ? "border" : "content" ) ?

+		// If we already have the right measurement, avoid augmentation

+		4 :

+		// Otherwise initialize for horizontal or vertical properties

+		name === "width" ? 1 : 0,

+

+		val = 0;

+

+	for ( ; i < 4; i += 2 ) {

+		// both box models exclude margin, so add it if we want it

+		if ( extra === "margin" ) {

+			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );

+		}

+

+		if ( isBorderBox ) {

+			// border-box includes padding, so remove it if we want content

+			if ( extra === "content" ) {

+				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );

+			}

+

+			// at this point, extra isn't border nor margin, so remove border

+			if ( extra !== "margin" ) {

+				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );

+			}

+		} else {

+			// at this point, extra isn't content, so add padding

+			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );

+

+			// at this point, extra isn't content nor padding, so add border

+			if ( extra !== "padding" ) {

+				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );

+			}

+		}

+	}

+

+	return val;

+}

+

+function getWidthOrHeight( elem, name, extra ) {

+

+	// Start with offset property, which is equivalent to the border-box value

+	var valueIsBorderBox = true,

+		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,

+		styles = getStyles( elem ),

+		isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";

+

+	// some non-html elements return undefined for offsetWidth, so check for null/undefined

+	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285

+	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668

+	if ( val <= 0 || val == null ) {

+		// Fall back to computed then uncomputed css if necessary

+		val = curCSS( elem, name, styles );

+		if ( val < 0 || val == null ) {

+			val = elem.style[ name ];

+		}

+

+		// Computed unit is not pixels. Stop here and return.

+		if ( rnumnonpx.test(val) ) {

+			return val;

+		}

+

+		// we need the check for style in case a browser which returns unreliable values

+		// for getComputedStyle silently falls back to the reliable elem.style

+		valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );

+

+		// Normalize "", auto, and prepare for extra

+		val = parseFloat( val ) || 0;

+	}

+

+	// use the active box-sizing model to add/subtract irrelevant styles

+	return ( val +

+		augmentWidthOrHeight(

+			elem,

+			name,

+			extra || ( isBorderBox ? "border" : "content" ),

+			valueIsBorderBox,

+			styles

+		)

+	) + "px";

+}

+

+// Try to determine the default display value of an element

+function css_defaultDisplay( nodeName ) {

+	var doc = document,

+		display = elemdisplay[ nodeName ];

+

+	if ( !display ) {

+		display = actualDisplay( nodeName, doc );

+

+		// If the simple way fails, read from inside an iframe

+		if ( display === "none" || !display ) {

+			// Use the already-created iframe if possible

+			iframe = ( iframe ||

+				jQuery("<iframe frameborder='0' width='0' height='0'/>")

+				.css( "cssText", "display:block !important" )

+			).appendTo( doc.documentElement );

+

+			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse

+			doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;

+			doc.write("<!doctype html><html><body>");

+			doc.close();

+

+			display = actualDisplay( nodeName, doc );

+			iframe.detach();

+		}

+

+		// Store the correct default display

+		elemdisplay[ nodeName ] = display;

+	}

+

+	return display;

+}

+

+// Called ONLY from within css_defaultDisplay

+function actualDisplay( name, doc ) {

+	var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),

+		display = jQuery.css( elem[0], "display" );

+	elem.remove();

+	return display;

+}

+

+jQuery.each([ "height", "width" ], function( i, name ) {

+	jQuery.cssHooks[ name ] = {

+		get: function( elem, computed, extra ) {

+			if ( computed ) {

+				// certain elements can have dimension info if we invisibly show them

+				// however, it must have a current display style that would benefit from this

+				return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ?

+					jQuery.swap( elem, cssShow, function() {

+						return getWidthOrHeight( elem, name, extra );

+					}) :

+					getWidthOrHeight( elem, name, extra );

+			}

+		},

+

+		set: function( elem, value, extra ) {

+			var styles = extra && getStyles( elem );

+			return setPositiveNumber( elem, value, extra ?

+				augmentWidthOrHeight(

+					elem,

+					name,

+					extra,

+					jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",

+					styles

+				) : 0

+			);

+		}

+	};

+});

+

+if ( !jQuery.support.opacity ) {

+	jQuery.cssHooks.opacity = {

+		get: function( elem, computed ) {

+			// IE uses filters for opacity

+			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?

+				( 0.01 * parseFloat( RegExp.$1 ) ) + "" :

+				computed ? "1" : "";

+		},

+

+		set: function( elem, value ) {

+			var style = elem.style,

+				currentStyle = elem.currentStyle,

+				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",

+				filter = currentStyle && currentStyle.filter || style.filter || "";

+

+			// IE has trouble with opacity if it does not have layout

+			// Force it by setting the zoom level

+			style.zoom = 1;

+

+			// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652

+			// if value === "", then remove inline opacity #12685

+			if ( ( value >= 1 || value === "" ) &&

+					jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&

+					style.removeAttribute ) {

+

+				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText

+				// if "filter:" is present at all, clearType is disabled, we want to avoid this

+				// style.removeAttribute is IE Only, but so apparently is this code path...

+				style.removeAttribute( "filter" );

+

+				// if there is no filter style applied in a css rule or unset inline opacity, we are done

+				if ( value === "" || currentStyle && !currentStyle.filter ) {

+					return;

+				}

+			}

+

+			// otherwise, set new filter values

+			style.filter = ralpha.test( filter ) ?

+				filter.replace( ralpha, opacity ) :

+				filter + " " + opacity;

+		}

+	};

+}

+

+// These hooks cannot be added until DOM ready because the support test

+// for it is not run until after DOM ready

+jQuery(function() {

+	if ( !jQuery.support.reliableMarginRight ) {

+		jQuery.cssHooks.marginRight = {

+			get: function( elem, computed ) {

+				if ( computed ) {

+					// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right

+					// Work around by temporarily setting element display to inline-block

+					return jQuery.swap( elem, { "display": "inline-block" },

+						curCSS, [ elem, "marginRight" ] );

+				}

+			}

+		};

+	}

+

+	// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084

+	// getComputedStyle returns percent when specified for top/left/bottom/right

+	// rather than make the css module depend on the offset module, we just check for it here

+	if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {

+		jQuery.each( [ "top", "left" ], function( i, prop ) {

+			jQuery.cssHooks[ prop ] = {

+				get: function( elem, computed ) {

+					if ( computed ) {

+						computed = curCSS( elem, prop );

+						// if curCSS returns percentage, fallback to offset

+						return rnumnonpx.test( computed ) ?

+							jQuery( elem ).position()[ prop ] + "px" :

+							computed;

+					}

+				}

+			};

+		});

+	}

+

+});

+

+if ( jQuery.expr && jQuery.expr.filters ) {

+	jQuery.expr.filters.hidden = function( elem ) {

+		// Support: Opera <= 12.12

+		// Opera reports offsetWidths and offsetHeights less than zero on some elements

+		return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||

+			(!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");

+	};

+

+	jQuery.expr.filters.visible = function( elem ) {

+		return !jQuery.expr.filters.hidden( elem );

+	};

+}

+

+// These hooks are used by animate to expand properties

+jQuery.each({

+	margin: "",

+	padding: "",

+	border: "Width"

+}, function( prefix, suffix ) {

+	jQuery.cssHooks[ prefix + suffix ] = {

+		expand: function( value ) {

+			var i = 0,

+				expanded = {},

+

+				// assumes a single number if not a string

+				parts = typeof value === "string" ? value.split(" ") : [ value ];

+

+			for ( ; i < 4; i++ ) {

+				expanded[ prefix + cssExpand[ i ] + suffix ] =

+					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];

+			}

+

+			return expanded;

+		}

+	};

+

+	if ( !rmargin.test( prefix ) ) {

+		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;

+	}

+});

+var r20 = /%20/g,

+	rbracket = /\[\]$/,

+	rCRLF = /\r?\n/g,

+	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,

+	rsubmittable = /^(?:input|select|textarea|keygen)/i;

+

+jQuery.fn.extend({

+	serialize: function() {

+		return jQuery.param( this.serializeArray() );

+	},

+	serializeArray: function() {

+		return this.map(function(){

+			// Can add propHook for "elements" to filter or add form elements

+			var elements = jQuery.prop( this, "elements" );

+			return elements ? jQuery.makeArray( elements ) : this;

+		})

+		.filter(function(){

+			var type = this.type;

+			// Use .is(":disabled") so that fieldset[disabled] works

+			return this.name && !jQuery( this ).is( ":disabled" ) &&

+				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&

+				( this.checked || !manipulation_rcheckableType.test( type ) );

+		})

+		.map(function( i, elem ){

+			var val = jQuery( this ).val();

+

+			return val == null ?

+				null :

+				jQuery.isArray( val ) ?

+					jQuery.map( val, function( val ){

+						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };

+					}) :

+					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };

+		}).get();

+	}

+});

+

+//Serialize an array of form elements or a set of

+//key/values into a query string

+jQuery.param = function( a, traditional ) {

+	var prefix,

+		s = [],

+		add = function( key, value ) {

+			// If value is a function, invoke it and return its value

+			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );

+			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );

+		};

+

+	// Set traditional to true for jQuery <= 1.3.2 behavior.

+	if ( traditional === undefined ) {

+		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;

+	}

+

+	// If an array was passed in, assume that it is an array of form elements.

+	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {

+		// Serialize the form elements

+		jQuery.each( a, function() {

+			add( this.name, this.value );

+		});

+

+	} else {

+		// If traditional, encode the "old" way (the way 1.3.2 or older

+		// did it), otherwise encode params recursively.

+		for ( prefix in a ) {

+			buildParams( prefix, a[ prefix ], traditional, add );

+		}

+	}

+

+	// Return the resulting serialization

+	return s.join( "&" ).replace( r20, "+" );

+};

+

+function buildParams( prefix, obj, traditional, add ) {

+	var name;

+

+	if ( jQuery.isArray( obj ) ) {

+		// Serialize array item.

+		jQuery.each( obj, function( i, v ) {

+			if ( traditional || rbracket.test( prefix ) ) {

+				// Treat each array item as a scalar.

+				add( prefix, v );

+

+			} else {

+				// Item is non-scalar (array or object), encode its numeric index.

+				buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );

+			}

+		});

+

+	} else if ( !traditional && jQuery.type( obj ) === "object" ) {

+		// Serialize object item.

+		for ( name in obj ) {

+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );

+		}

+

+	} else {

+		// Serialize scalar item.

+		add( prefix, obj );

+	}

+}

+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +

+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +

+	"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {

+

+	// Handle event binding

+	jQuery.fn[ name ] = function( data, fn ) {

+		return arguments.length > 0 ?

+			this.on( name, null, data, fn ) :

+			this.trigger( name );

+	};

+});

+

+jQuery.fn.extend({

+	hover: function( fnOver, fnOut ) {

+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );

+	},

+

+	bind: function( types, data, fn ) {

+		return this.on( types, null, data, fn );

+	},

+	unbind: function( types, fn ) {

+		return this.off( types, null, fn );

+	},

+

+	delegate: function( selector, types, data, fn ) {

+		return this.on( types, selector, data, fn );

+	},

+	undelegate: function( selector, types, fn ) {

+		// ( namespace ) or ( selector, types [, fn] )

+		return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );

+	}

+});

+var

+	// Document location

+	ajaxLocParts,

+	ajaxLocation,

+	ajax_nonce = jQuery.now(),

+

+	ajax_rquery = /\?/,

+	rhash = /#.*$/,

+	rts = /([?&])_=[^&]*/,

+	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL

+	// #7653, #8125, #8152: local protocol detection

+	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,

+	rnoContent = /^(?:GET|HEAD)$/,

+	rprotocol = /^\/\//,

+	rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,

+

+	// Keep a copy of the old load method

+	_load = jQuery.fn.load,

+

+	/* Prefilters

+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)

+	 * 2) These are called:

+	 *    - BEFORE asking for a transport

+	 *    - AFTER param serialization (s.data is a string if s.processData is true)

+	 * 3) key is the dataType

+	 * 4) the catchall symbol "*" can be used

+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed

+	 */

+	prefilters = {},

+

+	/* Transports bindings

+	 * 1) key is the dataType

+	 * 2) the catchall symbol "*" can be used

+	 * 3) selection will start with transport dataType and THEN go to "*" if needed

+	 */

+	transports = {},

+

+	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression

+	allTypes = "*/".concat("*");

+

+// #8138, IE may throw an exception when accessing

+// a field from window.location if document.domain has been set

+try {

+	ajaxLocation = location.href;

+} catch( e ) {

+	// Use the href attribute of an A element

+	// since IE will modify it given document.location

+	ajaxLocation = document.createElement( "a" );

+	ajaxLocation.href = "";

+	ajaxLocation = ajaxLocation.href;

+}

+

+// Segment location into parts

+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];

+

+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport

+function addToPrefiltersOrTransports( structure ) {

+

+	// dataTypeExpression is optional and defaults to "*"

+	return function( dataTypeExpression, func ) {

+

+		if ( typeof dataTypeExpression !== "string" ) {

+			func = dataTypeExpression;

+			dataTypeExpression = "*";

+		}

+

+		var dataType,

+			i = 0,

+			dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];

+

+		if ( jQuery.isFunction( func ) ) {

+			// For each dataType in the dataTypeExpression

+			while ( (dataType = dataTypes[i++]) ) {

+				// Prepend if requested

+				if ( dataType[0] === "+" ) {

+					dataType = dataType.slice( 1 ) || "*";

+					(structure[ dataType ] = structure[ dataType ] || []).unshift( func );

+

+				// Otherwise append

+				} else {

+					(structure[ dataType ] = structure[ dataType ] || []).push( func );

+				}

+			}

+		}

+	};

+}

+

+// Base inspection function for prefilters and transports

+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {

+

+	var inspected = {},

+		seekingTransport = ( structure === transports );

+

+	function inspect( dataType ) {

+		var selected;

+		inspected[ dataType ] = true;

+		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {

+			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );

+			if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {

+				options.dataTypes.unshift( dataTypeOrTransport );

+				inspect( dataTypeOrTransport );

+				return false;

+			} else if ( seekingTransport ) {

+				return !( selected = dataTypeOrTransport );

+			}

+		});

+		return selected;

+	}

+

+	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );

+}

+

+// A special extend for ajax options

+// that takes "flat" options (not to be deep extended)

+// Fixes #9887

+function ajaxExtend( target, src ) {

+	var deep, key,

+		flatOptions = jQuery.ajaxSettings.flatOptions || {};

+

+	for ( key in src ) {

+		if ( src[ key ] !== undefined ) {

+			( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];

+		}

+	}

+	if ( deep ) {

+		jQuery.extend( true, target, deep );

+	}

+

+	return target;

+}

+

+jQuery.fn.load = function( url, params, callback ) {

+	if ( typeof url !== "string" && _load ) {

+		return _load.apply( this, arguments );

+	}

+

+	var selector, response, type,

+		self = this,

+		off = url.indexOf(" ");

+

+	if ( off >= 0 ) {

+		selector = url.slice( off, url.length );

+		url = url.slice( 0, off );

+	}

+

+	// If it's a function

+	if ( jQuery.isFunction( params ) ) {

+

+		// We assume that it's the callback

+		callback = params;

+		params = undefined;

+

+	// Otherwise, build a param string

+	} else if ( params && typeof params === "object" ) {

+		type = "POST";

+	}

+

+	// If we have elements to modify, make the request

+	if ( self.length > 0 ) {

+		jQuery.ajax({

+			url: url,

+

+			// if "type" variable is undefined, then "GET" method will be used

+			type: type,

+			dataType: "html",

+			data: params

+		}).done(function( responseText ) {

+

+			// Save response for use in complete callback

+			response = arguments;

+

+			self.html( selector ?

+

+				// If a selector was specified, locate the right elements in a dummy div

+				// Exclude scripts to avoid IE 'Permission Denied' errors

+				jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :

+

+				// Otherwise use the full result

+				responseText );

+

+		}).complete( callback && function( jqXHR, status ) {

+			self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );

+		});

+	}

+

+	return this;

+};

+

+// Attach a bunch of functions for handling common AJAX events

+jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){

+	jQuery.fn[ type ] = function( fn ){

+		return this.on( type, fn );

+	};

+});

+

+jQuery.extend({

+

+	// Counter for holding the number of active queries

+	active: 0,

+

+	// Last-Modified header cache for next request

+	lastModified: {},

+	etag: {},

+

+	ajaxSettings: {

+		url: ajaxLocation,

+		type: "GET",

+		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),

+		global: true,

+		processData: true,

+		async: true,

+		contentType: "application/x-www-form-urlencoded; charset=UTF-8",

+		/*

+		timeout: 0,

+		data: null,

+		dataType: null,

+		username: null,

+		password: null,

+		cache: null,

+		throws: false,

+		traditional: false,

+		headers: {},

+		*/

+

+		accepts: {

+			"*": allTypes,

+			text: "text/plain",

+			html: "text/html",

+			xml: "application/xml, text/xml",

+			json: "application/json, text/javascript"

+		},

+

+		contents: {

+			xml: /xml/,

+			html: /html/,

+			json: /json/

+		},

+

+		responseFields: {

+			xml: "responseXML",

+			text: "responseText",

+			json: "responseJSON"

+		},

+

+		// Data converters

+		// Keys separate source (or catchall "*") and destination types with a single space

+		converters: {

+

+			// Convert anything to text

+			"* text": String,

+

+			// Text to html (true = no transformation)

+			"text html": true,

+

+			// Evaluate text as a json expression

+			"text json": jQuery.parseJSON,

+

+			// Parse text as xml

+			"text xml": jQuery.parseXML

+		},

+

+		// For options that shouldn't be deep extended:

+		// you can add your own custom options here if

+		// and when you create one that shouldn't be

+		// deep extended (see ajaxExtend)

+		flatOptions: {

+			url: true,

+			context: true

+		}

+	},

+

+	// Creates a full fledged settings object into target

+	// with both ajaxSettings and settings fields.

+	// If target is omitted, writes into ajaxSettings.

+	ajaxSetup: function( target, settings ) {

+		return settings ?

+

+			// Building a settings object

+			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :

+

+			// Extending ajaxSettings

+			ajaxExtend( jQuery.ajaxSettings, target );

+	},

+

+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),

+	ajaxTransport: addToPrefiltersOrTransports( transports ),

+

+	// Main method

+	ajax: function( url, options ) {

+

+		// If url is an object, simulate pre-1.5 signature

+		if ( typeof url === "object" ) {

+			options = url;

+			url = undefined;

+		}

+

+		// Force options to be an object

+		options = options || {};

+

+		var // Cross-domain detection vars

+			parts,

+			// Loop variable

+			i,

+			// URL without anti-cache param

+			cacheURL,

+			// Response headers as string

+			responseHeadersString,

+			// timeout handle

+			timeoutTimer,

+

+			// To know if global events are to be dispatched

+			fireGlobals,

+

+			transport,

+			// Response headers

+			responseHeaders,

+			// Create the final options object

+			s = jQuery.ajaxSetup( {}, options ),

+			// Callbacks context

+			callbackContext = s.context || s,

+			// Context for global events is callbackContext if it is a DOM node or jQuery collection

+			globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?

+				jQuery( callbackContext ) :

+				jQuery.event,

+			// Deferreds

+			deferred = jQuery.Deferred(),

+			completeDeferred = jQuery.Callbacks("once memory"),

+			// Status-dependent callbacks

+			statusCode = s.statusCode || {},

+			// Headers (they are sent all at once)

+			requestHeaders = {},

+			requestHeadersNames = {},

+			// The jqXHR state

+			state = 0,

+			// Default abort message

+			strAbort = "canceled",

+			// Fake xhr

+			jqXHR = {

+				readyState: 0,

+

+				// Builds headers hashtable if needed

+				getResponseHeader: function( key ) {

+					var match;

+					if ( state === 2 ) {

+						if ( !responseHeaders ) {

+							responseHeaders = {};

+							while ( (match = rheaders.exec( responseHeadersString )) ) {

+								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];

+							}

+						}

+						match = responseHeaders[ key.toLowerCase() ];

+					}

+					return match == null ? null : match;

+				},

+

+				// Raw string

+				getAllResponseHeaders: function() {

+					return state === 2 ? responseHeadersString : null;

+				},

+

+				// Caches the header

+				setRequestHeader: function( name, value ) {

+					var lname = name.toLowerCase();

+					if ( !state ) {

+						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;

+						requestHeaders[ name ] = value;

+					}

+					return this;

+				},

+

+				// Overrides response content-type header

+				overrideMimeType: function( type ) {

+					if ( !state ) {

+						s.mimeType = type;

+					}

+					return this;

+				},

+

+				// Status-dependent callbacks

+				statusCode: function( map ) {

+					var code;

+					if ( map ) {

+						if ( state < 2 ) {

+							for ( code in map ) {

+								// Lazy-add the new callback in a way that preserves old ones

+								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];

+							}

+						} else {

+							// Execute the appropriate callbacks

+							jqXHR.always( map[ jqXHR.status ] );

+						}

+					}

+					return this;

+				},

+

+				// Cancel the request

+				abort: function( statusText ) {

+					var finalText = statusText || strAbort;

+					if ( transport ) {

+						transport.abort( finalText );

+					}

+					done( 0, finalText );

+					return this;

+				}

+			};

+

+		// Attach deferreds

+		deferred.promise( jqXHR ).complete = completeDeferred.add;

+		jqXHR.success = jqXHR.done;

+		jqXHR.error = jqXHR.fail;

+

+		// Remove hash character (#7531: and string promotion)

+		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)

+		// Handle falsy url in the settings object (#10093: consistency with old signature)

+		// We also use the url parameter if available

+		s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );

+

+		// Alias method option to type as per ticket #12004

+		s.type = options.method || options.type || s.method || s.type;

+

+		// Extract dataTypes list

+		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""];

+

+		// A cross-domain request is in order when we have a protocol:host:port mismatch

+		if ( s.crossDomain == null ) {

+			parts = rurl.exec( s.url.toLowerCase() );

+			s.crossDomain = !!( parts &&

+				( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||

+					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==

+						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )

+			);

+		}

+

+		// Convert data if not already a string

+		if ( s.data && s.processData && typeof s.data !== "string" ) {

+			s.data = jQuery.param( s.data, s.traditional );

+		}

+

+		// Apply prefilters

+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );

+

+		// If request was aborted inside a prefilter, stop there

+		if ( state === 2 ) {

+			return jqXHR;

+		}

+

+		// We can fire global events as of now if asked to

+		fireGlobals = s.global;

+

+		// Watch for a new set of requests

+		if ( fireGlobals && jQuery.active++ === 0 ) {

+			jQuery.event.trigger("ajaxStart");

+		}

+

+		// Uppercase the type

+		s.type = s.type.toUpperCase();

+

+		// Determine if request has content

+		s.hasContent = !rnoContent.test( s.type );

+

+		// Save the URL in case we're toying with the If-Modified-Since

+		// and/or If-None-Match header later on

+		cacheURL = s.url;

+

+		// More options handling for requests with no content

+		if ( !s.hasContent ) {

+

+			// If data is available, append data to url

+			if ( s.data ) {

+				cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data );

+				// #9682: remove data so that it's not used in an eventual retry

+				delete s.data;

+			}

+

+			// Add anti-cache in url if needed

+			if ( s.cache === false ) {

+				s.url = rts.test( cacheURL ) ?

+

+					// If there is already a '_' parameter, set its value

+					cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) :

+

+					// Otherwise add one to the end

+					cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++;

+			}

+		}

+

+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.

+		if ( s.ifModified ) {

+			if ( jQuery.lastModified[ cacheURL ] ) {

+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );

+			}

+			if ( jQuery.etag[ cacheURL ] ) {

+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );

+			}

+		}

+

+		// Set the correct header, if data is being sent

+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {

+			jqXHR.setRequestHeader( "Content-Type", s.contentType );

+		}

+

+		// Set the Accepts header for the server, depending on the dataType

+		jqXHR.setRequestHeader(

+			"Accept",

+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?

+				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :

+				s.accepts[ "*" ]

+		);

+

+		// Check for headers option

+		for ( i in s.headers ) {

+			jqXHR.setRequestHeader( i, s.headers[ i ] );

+		}

+

+		// Allow custom headers/mimetypes and early abort

+		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {

+			// Abort if not done already and return

+			return jqXHR.abort();

+		}

+

+		// aborting is no longer a cancellation

+		strAbort = "abort";

+

+		// Install callbacks on deferreds

+		for ( i in { success: 1, error: 1, complete: 1 } ) {

+			jqXHR[ i ]( s[ i ] );

+		}

+

+		// Get transport

+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );

+

+		// If no transport, we auto-abort

+		if ( !transport ) {

+			done( -1, "No Transport" );

+		} else {

+			jqXHR.readyState = 1;

+

+			// Send global event

+			if ( fireGlobals ) {

+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );

+			}

+			// Timeout

+			if ( s.async && s.timeout > 0 ) {

+				timeoutTimer = setTimeout(function() {

+					jqXHR.abort("timeout");

+				}, s.timeout );

+			}

+

+			try {

+				state = 1;

+				transport.send( requestHeaders, done );

+			} catch ( e ) {

+				// Propagate exception as error if not done

+				if ( state < 2 ) {

+					done( -1, e );

+				// Simply rethrow otherwise

+				} else {

+					throw e;

+				}

+			}

+		}

+

+		// Callback for when everything is done

+		function done( status, nativeStatusText, responses, headers ) {

+			var isSuccess, success, error, response, modified,

+				statusText = nativeStatusText;

+

+			// Called once

+			if ( state === 2 ) {

+				return;

+			}

+

+			// State is "done" now

+			state = 2;

+

+			// Clear timeout if it exists

+			if ( timeoutTimer ) {

+				clearTimeout( timeoutTimer );

+			}

+

+			// Dereference transport for early garbage collection

+			// (no matter how long the jqXHR object will be used)

+			transport = undefined;

+

+			// Cache response headers

+			responseHeadersString = headers || "";

+

+			// Set readyState

+			jqXHR.readyState = status > 0 ? 4 : 0;

+

+			// Determine if successful

+			isSuccess = status >= 200 && status < 300 || status === 304;

+

+			// Get response data

+			if ( responses ) {

+				response = ajaxHandleResponses( s, jqXHR, responses );

+			}

+

+			// Convert no matter what (that way responseXXX fields are always set)

+			response = ajaxConvert( s, response, jqXHR, isSuccess );

+

+			// If successful, handle type chaining

+			if ( isSuccess ) {

+

+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.

+				if ( s.ifModified ) {

+					modified = jqXHR.getResponseHeader("Last-Modified");

+					if ( modified ) {

+						jQuery.lastModified[ cacheURL ] = modified;

+					}

+					modified = jqXHR.getResponseHeader("etag");

+					if ( modified ) {

+						jQuery.etag[ cacheURL ] = modified;

+					}

+				}

+

+				// if no content

+				if ( status === 204 || s.type === "HEAD" ) {

+					statusText = "nocontent";

+

+				// if not modified

+				} else if ( status === 304 ) {

+					statusText = "notmodified";

+

+				// If we have data, let's convert it

+				} else {

+					statusText = response.state;

+					success = response.data;

+					error = response.error;

+					isSuccess = !error;

+				}

+			} else {

+				// We extract error from statusText

+				// then normalize statusText and status for non-aborts

+				error = statusText;

+				if ( status || !statusText ) {

+					statusText = "error";

+					if ( status < 0 ) {

+						status = 0;

+					}

+				}

+			}

+

+			// Set data for the fake xhr object

+			jqXHR.status = status;

+			jqXHR.statusText = ( nativeStatusText || statusText ) + "";

+

+			// Success/Error

+			if ( isSuccess ) {

+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );

+			} else {

+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );

+			}

+

+			// Status-dependent callbacks

+			jqXHR.statusCode( statusCode );

+			statusCode = undefined;

+

+			if ( fireGlobals ) {

+				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",

+					[ jqXHR, s, isSuccess ? success : error ] );

+			}

+

+			// Complete

+			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );

+

+			if ( fireGlobals ) {

+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );

+				// Handle the global AJAX counter

+				if ( !( --jQuery.active ) ) {

+					jQuery.event.trigger("ajaxStop");

+				}

+			}

+		}

+

+		return jqXHR;

+	},

+

+	getJSON: function( url, data, callback ) {

+		return jQuery.get( url, data, callback, "json" );

+	},

+

+	getScript: function( url, callback ) {

+		return jQuery.get( url, undefined, callback, "script" );

+	}

+});

+

+jQuery.each( [ "get", "post" ], function( i, method ) {

+	jQuery[ method ] = function( url, data, callback, type ) {

+		// shift arguments if data argument was omitted

+		if ( jQuery.isFunction( data ) ) {

+			type = type || callback;

+			callback = data;

+			data = undefined;

+		}

+

+		return jQuery.ajax({

+			url: url,

+			type: method,

+			dataType: type,

+			data: data,

+			success: callback

+		});

+	};

+});

+

+/* Handles responses to an ajax request:

+ * - finds the right dataType (mediates between content-type and expected dataType)

+ * - returns the corresponding response

+ */

+function ajaxHandleResponses( s, jqXHR, responses ) {

+	var firstDataType, ct, finalDataType, type,

+		contents = s.contents,

+		dataTypes = s.dataTypes;

+

+	// Remove auto dataType and get content-type in the process

+	while( dataTypes[ 0 ] === "*" ) {

+		dataTypes.shift();

+		if ( ct === undefined ) {

+			ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");

+		}

+	}

+

+	// Check if we're dealing with a known content-type

+	if ( ct ) {

+		for ( type in contents ) {

+			if ( contents[ type ] && contents[ type ].test( ct ) ) {

+				dataTypes.unshift( type );

+				break;

+			}

+		}

+	}

+

+	// Check to see if we have a response for the expected dataType

+	if ( dataTypes[ 0 ] in responses ) {

+		finalDataType = dataTypes[ 0 ];

+	} else {

+		// Try convertible dataTypes

+		for ( type in responses ) {

+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {

+				finalDataType = type;

+				break;

+			}

+			if ( !firstDataType ) {

+				firstDataType = type;

+			}

+		}

+		// Or just use first one

+		finalDataType = finalDataType || firstDataType;

+	}

+

+	// If we found a dataType

+	// We add the dataType to the list if needed

+	// and return the corresponding response

+	if ( finalDataType ) {

+		if ( finalDataType !== dataTypes[ 0 ] ) {

+			dataTypes.unshift( finalDataType );

+		}

+		return responses[ finalDataType ];

+	}

+}

+

+/* Chain conversions given the request and the original response

+ * Also sets the responseXXX fields on the jqXHR instance

+ */

+function ajaxConvert( s, response, jqXHR, isSuccess ) {

+	var conv2, current, conv, tmp, prev,

+		converters = {},

+		// Work with a copy of dataTypes in case we need to modify it for conversion

+		dataTypes = s.dataTypes.slice();

+

+	// Create converters map with lowercased keys

+	if ( dataTypes[ 1 ] ) {

+		for ( conv in s.converters ) {

+			converters[ conv.toLowerCase() ] = s.converters[ conv ];

+		}

+	}

+

+	current = dataTypes.shift();

+

+	// Convert to each sequential dataType

+	while ( current ) {

+

+		if ( s.responseFields[ current ] ) {

+			jqXHR[ s.responseFields[ current ] ] = response;

+		}

+

+		// Apply the dataFilter if provided

+		if ( !prev && isSuccess && s.dataFilter ) {

+			response = s.dataFilter( response, s.dataType );

+		}

+

+		prev = current;

+		current = dataTypes.shift();

+

+		if ( current ) {

+

+			// There's only work to do if current dataType is non-auto

+			if ( current === "*" ) {

+

+				current = prev;

+

+			// Convert response if prev dataType is non-auto and differs from current

+			} else if ( prev !== "*" && prev !== current ) {

+

+				// Seek a direct converter

+				conv = converters[ prev + " " + current ] || converters[ "* " + current ];

+

+				// If none found, seek a pair

+				if ( !conv ) {

+					for ( conv2 in converters ) {

+

+						// If conv2 outputs current

+						tmp = conv2.split( " " );

+						if ( tmp[ 1 ] === current ) {

+

+							// If prev can be converted to accepted input

+							conv = converters[ prev + " " + tmp[ 0 ] ] ||

+								converters[ "* " + tmp[ 0 ] ];

+							if ( conv ) {

+								// Condense equivalence converters

+								if ( conv === true ) {

+									conv = converters[ conv2 ];

+

+								// Otherwise, insert the intermediate dataType

+								} else if ( converters[ conv2 ] !== true ) {

+									current = tmp[ 0 ];

+									dataTypes.unshift( tmp[ 1 ] );

+								}

+								break;

+							}

+						}

+					}

+				}

+

+				// Apply converter (if not an equivalence)

+				if ( conv !== true ) {

+

+					// Unless errors are allowed to bubble, catch and return them

+					if ( conv && s[ "throws" ] ) {

+						response = conv( response );

+					} else {

+						try {

+							response = conv( response );

+						} catch ( e ) {

+							return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };

+						}

+					}

+				}

+			}

+		}

+	}

+

+	return { state: "success", data: response };

+}

+// Install script dataType

+jQuery.ajaxSetup({

+	accepts: {

+		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"

+	},

+	contents: {

+		script: /(?:java|ecma)script/

+	},

+	converters: {

+		"text script": function( text ) {

+			jQuery.globalEval( text );

+			return text;

+		}

+	}

+});

+

+// Handle cache's special case and global

+jQuery.ajaxPrefilter( "script", function( s ) {

+	if ( s.cache === undefined ) {

+		s.cache = false;

+	}

+	if ( s.crossDomain ) {

+		s.type = "GET";

+		s.global = false;

+	}

+});

+

+// Bind script tag hack transport

+jQuery.ajaxTransport( "script", function(s) {

+

+	// This transport only deals with cross domain requests

+	if ( s.crossDomain ) {

+

+		var script,

+			head = document.head || jQuery("head")[0] || document.documentElement;

+

+		return {

+

+			send: function( _, callback ) {

+

+				script = document.createElement("script");

+

+				script.async = true;

+

+				if ( s.scriptCharset ) {

+					script.charset = s.scriptCharset;

+				}

+

+				script.src = s.url;

+

+				// Attach handlers for all browsers

+				script.onload = script.onreadystatechange = function( _, isAbort ) {

+

+					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {

+

+						// Handle memory leak in IE

+						script.onload = script.onreadystatechange = null;

+

+						// Remove the script

+						if ( script.parentNode ) {

+							script.parentNode.removeChild( script );

+						}

+

+						// Dereference the script

+						script = null;

+

+						// Callback if not abort

+						if ( !isAbort ) {

+							callback( 200, "success" );

+						}

+					}

+				};

+

+				// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending

+				// Use native DOM manipulation to avoid our domManip AJAX trickery

+				head.insertBefore( script, head.firstChild );

+			},

+

+			abort: function() {

+				if ( script ) {

+					script.onload( undefined, true );

+				}

+			}

+		};

+	}

+});

+var oldCallbacks = [],

+	rjsonp = /(=)\?(?=&|$)|\?\?/;

+

+// Default jsonp settings

+jQuery.ajaxSetup({

+	jsonp: "callback",

+	jsonpCallback: function() {

+		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );

+		this[ callback ] = true;

+		return callback;

+	}

+});

+

+// Detect, normalize options and install callbacks for jsonp requests

+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {

+

+	var callbackName, overwritten, responseContainer,

+		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?

+			"url" :

+			typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"

+		);

+

+	// Handle iff the expected data type is "jsonp" or we have a parameter to set

+	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {

+

+		// Get callback name, remembering preexisting value associated with it

+		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?

+			s.jsonpCallback() :

+			s.jsonpCallback;

+

+		// Insert callback into url or form data

+		if ( jsonProp ) {

+			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );

+		} else if ( s.jsonp !== false ) {

+			s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;

+		}

+

+		// Use data converter to retrieve json after script execution

+		s.converters["script json"] = function() {

+			if ( !responseContainer ) {

+				jQuery.error( callbackName + " was not called" );

+			}

+			return responseContainer[ 0 ];

+		};

+

+		// force json dataType

+		s.dataTypes[ 0 ] = "json";

+

+		// Install callback

+		overwritten = window[ callbackName ];

+		window[ callbackName ] = function() {

+			responseContainer = arguments;

+		};

+

+		// Clean-up function (fires after converters)

+		jqXHR.always(function() {

+			// Restore preexisting value

+			window[ callbackName ] = overwritten;

+

+			// Save back as free

+			if ( s[ callbackName ] ) {

+				// make sure that re-using the options doesn't screw things around

+				s.jsonpCallback = originalSettings.jsonpCallback;

+

+				// save the callback name for future use

+				oldCallbacks.push( callbackName );

+			}

+

+			// Call if it was a function and we have a response

+			if ( responseContainer && jQuery.isFunction( overwritten ) ) {

+				overwritten( responseContainer[ 0 ] );

+			}

+

+			responseContainer = overwritten = undefined;

+		});

+

+		// Delegate to script

+		return "script";

+	}

+});

+var xhrCallbacks, xhrSupported,

+	xhrId = 0,

+	// #5280: Internet Explorer will keep connections alive if we don't abort on unload

+	xhrOnUnloadAbort = window.ActiveXObject && function() {

+		// Abort all pending requests

+		var key;

+		for ( key in xhrCallbacks ) {

+			xhrCallbacks[ key ]( undefined, true );

+		}

+	};

+

+// Functions to create xhrs

+function createStandardXHR() {

+	try {

+		return new window.XMLHttpRequest();

+	} catch( e ) {}

+}

+

+function createActiveXHR() {

+	try {

+		return new window.ActiveXObject("Microsoft.XMLHTTP");

+	} catch( e ) {}

+}

+

+// Create the request object

+// (This is still attached to ajaxSettings for backward compatibility)

+jQuery.ajaxSettings.xhr = window.ActiveXObject ?

+	/* Microsoft failed to properly

+	 * implement the XMLHttpRequest in IE7 (can't request local files),

+	 * so we use the ActiveXObject when it is available

+	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so

+	 * we need a fallback.

+	 */

+	function() {

+		return !this.isLocal && createStandardXHR() || createActiveXHR();

+	} :

+	// For all other browsers, use the standard XMLHttpRequest object

+	createStandardXHR;

+

+// Determine support properties

+xhrSupported = jQuery.ajaxSettings.xhr();

+jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );

+xhrSupported = jQuery.support.ajax = !!xhrSupported;

+

+// Create transport if the browser can provide an xhr

+if ( xhrSupported ) {

+

+	jQuery.ajaxTransport(function( s ) {

+		// Cross domain only allowed if supported through XMLHttpRequest

+		if ( !s.crossDomain || jQuery.support.cors ) {

+

+			var callback;

+

+			return {

+				send: function( headers, complete ) {

+

+					// Get a new xhr

+					var handle, i,

+						xhr = s.xhr();

+

+					// Open the socket

+					// Passing null username, generates a login popup on Opera (#2865)

+					if ( s.username ) {

+						xhr.open( s.type, s.url, s.async, s.username, s.password );

+					} else {

+						xhr.open( s.type, s.url, s.async );

+					}

+

+					// Apply custom fields if provided

+					if ( s.xhrFields ) {

+						for ( i in s.xhrFields ) {

+							xhr[ i ] = s.xhrFields[ i ];

+						}

+					}

+

+					// Override mime type if needed

+					if ( s.mimeType && xhr.overrideMimeType ) {

+						xhr.overrideMimeType( s.mimeType );

+					}

+

+					// X-Requested-With header

+					// For cross-domain requests, seeing as conditions for a preflight are

+					// akin to a jigsaw puzzle, we simply never set it to be sure.

+					// (it can always be set on a per-request basis or even using ajaxSetup)

+					// For same-domain requests, won't change header if already provided.

+					if ( !s.crossDomain && !headers["X-Requested-With"] ) {

+						headers["X-Requested-With"] = "XMLHttpRequest";

+					}

+

+					// Need an extra try/catch for cross domain requests in Firefox 3

+					try {

+						for ( i in headers ) {

+							xhr.setRequestHeader( i, headers[ i ] );

+						}

+					} catch( err ) {}

+

+					// Do send the request

+					// This may raise an exception which is actually

+					// handled in jQuery.ajax (so no try/catch here)

+					xhr.send( ( s.hasContent && s.data ) || null );

+

+					// Listener

+					callback = function( _, isAbort ) {

+						var status, responseHeaders, statusText, responses;

+

+						// Firefox throws exceptions when accessing properties

+						// of an xhr when a network error occurred

+						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)

+						try {

+

+							// Was never called and is aborted or complete

+							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {

+

+								// Only called once

+								callback = undefined;

+

+								// Do not keep as active anymore

+								if ( handle ) {

+									xhr.onreadystatechange = jQuery.noop;

+									if ( xhrOnUnloadAbort ) {

+										delete xhrCallbacks[ handle ];

+									}

+								}

+

+								// If it's an abort

+								if ( isAbort ) {

+									// Abort it manually if needed

+									if ( xhr.readyState !== 4 ) {

+										xhr.abort();

+									}

+								} else {

+									responses = {};

+									status = xhr.status;

+									responseHeaders = xhr.getAllResponseHeaders();

+

+									// When requesting binary data, IE6-9 will throw an exception

+									// on any attempt to access responseText (#11426)

+									if ( typeof xhr.responseText === "string" ) {

+										responses.text = xhr.responseText;

+									}

+

+									// Firefox throws an exception when accessing

+									// statusText for faulty cross-domain requests

+									try {

+										statusText = xhr.statusText;

+									} catch( e ) {

+										// We normalize with Webkit giving an empty statusText

+										statusText = "";

+									}

+

+									// Filter status for non standard behaviors

+

+									// If the request is local and we have data: assume a success

+									// (success with no data won't get notified, that's the best we

+									// can do given current implementations)

+									if ( !status && s.isLocal && !s.crossDomain ) {

+										status = responses.text ? 200 : 404;

+									// IE - #1450: sometimes returns 1223 when it should be 204

+									} else if ( status === 1223 ) {

+										status = 204;

+									}

+								}

+							}

+						} catch( firefoxAccessException ) {

+							if ( !isAbort ) {

+								complete( -1, firefoxAccessException );

+							}

+						}

+

+						// Call complete if needed

+						if ( responses ) {

+							complete( status, statusText, responses, responseHeaders );

+						}

+					};

+

+					if ( !s.async ) {

+						// if we're in sync mode we fire the callback

+						callback();

+					} else if ( xhr.readyState === 4 ) {

+						// (IE6 & IE7) if it's in cache and has been

+						// retrieved directly we need to fire the callback

+						setTimeout( callback );

+					} else {

+						handle = ++xhrId;

+						if ( xhrOnUnloadAbort ) {

+							// Create the active xhrs callbacks list if needed

+							// and attach the unload handler

+							if ( !xhrCallbacks ) {

+								xhrCallbacks = {};

+								jQuery( window ).unload( xhrOnUnloadAbort );

+							}

+							// Add to list of active xhrs callbacks

+							xhrCallbacks[ handle ] = callback;

+						}

+						xhr.onreadystatechange = callback;

+					}

+				},

+

+				abort: function() {

+					if ( callback ) {

+						callback( undefined, true );

+					}

+				}

+			};

+		}

+	});

+}

+var fxNow, timerId,

+	rfxtypes = /^(?:toggle|show|hide)$/,

+	rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),

+	rrun = /queueHooks$/,

+	animationPrefilters = [ defaultPrefilter ],

+	tweeners = {

+		"*": [function( prop, value ) {

+			var tween = this.createTween( prop, value ),

+				target = tween.cur(),

+				parts = rfxnum.exec( value ),

+				unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),

+

+				// Starting value computation is required for potential unit mismatches

+				start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&

+					rfxnum.exec( jQuery.css( tween.elem, prop ) ),

+				scale = 1,

+				maxIterations = 20;

+

+			if ( start && start[ 3 ] !== unit ) {

+				// Trust units reported by jQuery.css

+				unit = unit || start[ 3 ];

+

+				// Make sure we update the tween properties later on

+				parts = parts || [];

+

+				// Iteratively approximate from a nonzero starting point

+				start = +target || 1;

+

+				do {

+					// If previous iteration zeroed out, double until we get *something*

+					// Use a string for doubling factor so we don't accidentally see scale as unchanged below

+					scale = scale || ".5";

+

+					// Adjust and apply

+					start = start / scale;

+					jQuery.style( tween.elem, prop, start + unit );

+

+				// Update scale, tolerating zero or NaN from tween.cur()

+				// And breaking the loop if scale is unchanged or perfect, or if we've just had enough

+				} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );

+			}

+

+			// Update tween properties

+			if ( parts ) {

+				start = tween.start = +start || +target || 0;

+				tween.unit = unit;

+				// If a +=/-= token was provided, we're doing a relative animation

+				tween.end = parts[ 1 ] ?

+					start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :

+					+parts[ 2 ];

+			}

+

+			return tween;

+		}]

+	};

+

+// Animations created synchronously will run synchronously

+function createFxNow() {

+	setTimeout(function() {

+		fxNow = undefined;

+	});

+	return ( fxNow = jQuery.now() );

+}

+

+function createTween( value, prop, animation ) {

+	var tween,

+		collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),

+		index = 0,

+		length = collection.length;

+	for ( ; index < length; index++ ) {

+		if ( (tween = collection[ index ].call( animation, prop, value )) ) {

+

+			// we're done with this property

+			return tween;

+		}

+	}

+}

+

+function Animation( elem, properties, options ) {

+	var result,

+		stopped,

+		index = 0,

+		length = animationPrefilters.length,

+		deferred = jQuery.Deferred().always( function() {

+			// don't match elem in the :animated selector

+			delete tick.elem;

+		}),

+		tick = function() {

+			if ( stopped ) {

+				return false;

+			}

+			var currentTime = fxNow || createFxNow(),

+				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),

+				// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)

+				temp = remaining / animation.duration || 0,

+				percent = 1 - temp,

+				index = 0,

+				length = animation.tweens.length;

+

+			for ( ; index < length ; index++ ) {

+				animation.tweens[ index ].run( percent );

+			}

+

+			deferred.notifyWith( elem, [ animation, percent, remaining ]);

+

+			if ( percent < 1 && length ) {

+				return remaining;

+			} else {

+				deferred.resolveWith( elem, [ animation ] );

+				return false;

+			}

+		},

+		animation = deferred.promise({

+			elem: elem,

+			props: jQuery.extend( {}, properties ),

+			opts: jQuery.extend( true, { specialEasing: {} }, options ),

+			originalProperties: properties,

+			originalOptions: options,

+			startTime: fxNow || createFxNow(),

+			duration: options.duration,

+			tweens: [],

+			createTween: function( prop, end ) {

+				var tween = jQuery.Tween( elem, animation.opts, prop, end,

+						animation.opts.specialEasing[ prop ] || animation.opts.easing );

+				animation.tweens.push( tween );

+				return tween;

+			},

+			stop: function( gotoEnd ) {

+				var index = 0,

+					// if we are going to the end, we want to run all the tweens

+					// otherwise we skip this part

+					length = gotoEnd ? animation.tweens.length : 0;

+				if ( stopped ) {

+					return this;

+				}

+				stopped = true;

+				for ( ; index < length ; index++ ) {

+					animation.tweens[ index ].run( 1 );

+				}

+

+				// resolve when we played the last frame

+				// otherwise, reject

+				if ( gotoEnd ) {

+					deferred.resolveWith( elem, [ animation, gotoEnd ] );

+				} else {

+					deferred.rejectWith( elem, [ animation, gotoEnd ] );

+				}

+				return this;

+			}

+		}),

+		props = animation.props;

+

+	propFilter( props, animation.opts.specialEasing );

+

+	for ( ; index < length ; index++ ) {

+		result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );

+		if ( result ) {

+			return result;

+		}

+	}

+

+	jQuery.map( props, createTween, animation );

+

+	if ( jQuery.isFunction( animation.opts.start ) ) {

+		animation.opts.start.call( elem, animation );

+	}

+

+	jQuery.fx.timer(

+		jQuery.extend( tick, {

+			elem: elem,

+			anim: animation,

+			queue: animation.opts.queue

+		})

+	);

+

+	// attach callbacks from options

+	return animation.progress( animation.opts.progress )

+		.done( animation.opts.done, animation.opts.complete )

+		.fail( animation.opts.fail )

+		.always( animation.opts.always );

+}

+

+function propFilter( props, specialEasing ) {

+	var index, name, easing, value, hooks;

+

+	// camelCase, specialEasing and expand cssHook pass

+	for ( index in props ) {

+		name = jQuery.camelCase( index );

+		easing = specialEasing[ name ];

+		value = props[ index ];

+		if ( jQuery.isArray( value ) ) {

+			easing = value[ 1 ];

+			value = props[ index ] = value[ 0 ];

+		}

+

+		if ( index !== name ) {

+			props[ name ] = value;

+			delete props[ index ];

+		}

+

+		hooks = jQuery.cssHooks[ name ];

+		if ( hooks && "expand" in hooks ) {

+			value = hooks.expand( value );

+			delete props[ name ];

+

+			// not quite $.extend, this wont overwrite keys already present.

+			// also - reusing 'index' from above because we have the correct "name"

+			for ( index in value ) {

+				if ( !( index in props ) ) {

+					props[ index ] = value[ index ];

+					specialEasing[ index ] = easing;

+				}

+			}

+		} else {

+			specialEasing[ name ] = easing;

+		}

+	}

+}

+

+jQuery.Animation = jQuery.extend( Animation, {

+

+	tweener: function( props, callback ) {

+		if ( jQuery.isFunction( props ) ) {

+			callback = props;

+			props = [ "*" ];

+		} else {

+			props = props.split(" ");

+		}

+

+		var prop,

+			index = 0,

+			length = props.length;

+

+		for ( ; index < length ; index++ ) {

+			prop = props[ index ];

+			tweeners[ prop ] = tweeners[ prop ] || [];

+			tweeners[ prop ].unshift( callback );

+		}

+	},

+

+	prefilter: function( callback, prepend ) {

+		if ( prepend ) {

+			animationPrefilters.unshift( callback );

+		} else {

+			animationPrefilters.push( callback );

+		}

+	}

+});

+

+function defaultPrefilter( elem, props, opts ) {

+	/* jshint validthis: true */

+	var prop, value, toggle, tween, hooks, oldfire,

+		anim = this,

+		orig = {},

+		style = elem.style,

+		hidden = elem.nodeType && isHidden( elem ),

+		dataShow = jQuery._data( elem, "fxshow" );

+

+	// handle queue: false promises

+	if ( !opts.queue ) {

+		hooks = jQuery._queueHooks( elem, "fx" );

+		if ( hooks.unqueued == null ) {

+			hooks.unqueued = 0;

+			oldfire = hooks.empty.fire;

+			hooks.empty.fire = function() {

+				if ( !hooks.unqueued ) {

+					oldfire();

+				}

+			};

+		}

+		hooks.unqueued++;

+

+		anim.always(function() {

+			// doing this makes sure that the complete handler will be called

+			// before this completes

+			anim.always(function() {

+				hooks.unqueued--;

+				if ( !jQuery.queue( elem, "fx" ).length ) {

+					hooks.empty.fire();

+				}

+			});

+		});

+	}

+

+	// height/width overflow pass

+	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {

+		// Make sure that nothing sneaks out

+		// Record all 3 overflow attributes because IE does not

+		// change the overflow attribute when overflowX and

+		// overflowY are set to the same value

+		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];

+

+		// Set display property to inline-block for height/width

+		// animations on inline elements that are having width/height animated

+		if ( jQuery.css( elem, "display" ) === "inline" &&

+				jQuery.css( elem, "float" ) === "none" ) {

+

+			// inline-level elements accept inline-block;

+			// block-level elements need to be inline with layout

+			if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {

+				style.display = "inline-block";

+

+			} else {

+				style.zoom = 1;

+			}

+		}

+	}

+

+	if ( opts.overflow ) {

+		style.overflow = "hidden";

+		if ( !jQuery.support.shrinkWrapBlocks ) {

+			anim.always(function() {

+				style.overflow = opts.overflow[ 0 ];

+				style.overflowX = opts.overflow[ 1 ];

+				style.overflowY = opts.overflow[ 2 ];

+			});

+		}

+	}

+

+

+	// show/hide pass

+	for ( prop in props ) {

+		value = props[ prop ];

+		if ( rfxtypes.exec( value ) ) {

+			delete props[ prop ];

+			toggle = toggle || value === "toggle";

+			if ( value === ( hidden ? "hide" : "show" ) ) {

+				continue;

+			}

+			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );

+		}

+	}

+

+	if ( !jQuery.isEmptyObject( orig ) ) {

+		if ( dataShow ) {

+			if ( "hidden" in dataShow ) {

+				hidden = dataShow.hidden;

+			}

+		} else {

+			dataShow = jQuery._data( elem, "fxshow", {} );

+		}

+

+		// store state if its toggle - enables .stop().toggle() to "reverse"

+		if ( toggle ) {

+			dataShow.hidden = !hidden;

+		}

+		if ( hidden ) {

+			jQuery( elem ).show();

+		} else {

+			anim.done(function() {

+				jQuery( elem ).hide();

+			});

+		}

+		anim.done(function() {

+			var prop;

+			jQuery._removeData( elem, "fxshow" );

+			for ( prop in orig ) {

+				jQuery.style( elem, prop, orig[ prop ] );

+			}

+		});

+		for ( prop in orig ) {

+			tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );

+

+			if ( !( prop in dataShow ) ) {

+				dataShow[ prop ] = tween.start;

+				if ( hidden ) {

+					tween.end = tween.start;

+					tween.start = prop === "width" || prop === "height" ? 1 : 0;

+				}

+			}

+		}

+	}

+}

+

+function Tween( elem, options, prop, end, easing ) {

+	return new Tween.prototype.init( elem, options, prop, end, easing );

+}

+jQuery.Tween = Tween;

+

+Tween.prototype = {

+	constructor: Tween,

+	init: function( elem, options, prop, end, easing, unit ) {

+		this.elem = elem;

+		this.prop = prop;

+		this.easing = easing || "swing";

+		this.options = options;

+		this.start = this.now = this.cur();

+		this.end = end;

+		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );

+	},

+	cur: function() {

+		var hooks = Tween.propHooks[ this.prop ];

+

+		return hooks && hooks.get ?

+			hooks.get( this ) :

+			Tween.propHooks._default.get( this );

+	},

+	run: function( percent ) {

+		var eased,

+			hooks = Tween.propHooks[ this.prop ];

+

+		if ( this.options.duration ) {

+			this.pos = eased = jQuery.easing[ this.easing ](

+				percent, this.options.duration * percent, 0, 1, this.options.duration

+			);

+		} else {

+			this.pos = eased = percent;

+		}

+		this.now = ( this.end - this.start ) * eased + this.start;

+

+		if ( this.options.step ) {

+			this.options.step.call( this.elem, this.now, this );

+		}

+

+		if ( hooks && hooks.set ) {

+			hooks.set( this );

+		} else {

+			Tween.propHooks._default.set( this );

+		}

+		return this;

+	}

+};

+

+Tween.prototype.init.prototype = Tween.prototype;

+

+Tween.propHooks = {

+	_default: {

+		get: function( tween ) {

+			var result;

+

+			if ( tween.elem[ tween.prop ] != null &&

+				(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {

+				return tween.elem[ tween.prop ];

+			}

+

+			// passing an empty string as a 3rd parameter to .css will automatically

+			// attempt a parseFloat and fallback to a string if the parse fails

+			// so, simple values such as "10px" are parsed to Float.

+			// complex values such as "rotate(1rad)" are returned as is.

+			result = jQuery.css( tween.elem, tween.prop, "" );

+			// Empty strings, null, undefined and "auto" are converted to 0.

+			return !result || result === "auto" ? 0 : result;

+		},

+		set: function( tween ) {

+			// use step hook for back compat - use cssHook if its there - use .style if its

+			// available and use plain properties where available

+			if ( jQuery.fx.step[ tween.prop ] ) {

+				jQuery.fx.step[ tween.prop ]( tween );

+			} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {

+				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );

+			} else {

+				tween.elem[ tween.prop ] = tween.now;

+			}

+		}

+	}

+};

+

+// Support: IE <=9

+// Panic based approach to setting things on disconnected nodes

+

+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {

+	set: function( tween ) {

+		if ( tween.elem.nodeType && tween.elem.parentNode ) {

+			tween.elem[ tween.prop ] = tween.now;

+		}

+	}

+};

+

+jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {

+	var cssFn = jQuery.fn[ name ];

+	jQuery.fn[ name ] = function( speed, easing, callback ) {

+		return speed == null || typeof speed === "boolean" ?

+			cssFn.apply( this, arguments ) :

+			this.animate( genFx( name, true ), speed, easing, callback );

+	};

+});

+

+jQuery.fn.extend({

+	fadeTo: function( speed, to, easing, callback ) {

+

+		// show any hidden elements after setting opacity to 0

+		return this.filter( isHidden ).css( "opacity", 0 ).show()

+

+			// animate to the value specified

+			.end().animate({ opacity: to }, speed, easing, callback );

+	},

+	animate: function( prop, speed, easing, callback ) {

+		var empty = jQuery.isEmptyObject( prop ),

+			optall = jQuery.speed( speed, easing, callback ),

+			doAnimation = function() {

+				// Operate on a copy of prop so per-property easing won't be lost

+				var anim = Animation( this, jQuery.extend( {}, prop ), optall );

+

+				// Empty animations, or finishing resolves immediately

+				if ( empty || jQuery._data( this, "finish" ) ) {

+					anim.stop( true );

+				}

+			};

+			doAnimation.finish = doAnimation;

+

+		return empty || optall.queue === false ?

+			this.each( doAnimation ) :

+			this.queue( optall.queue, doAnimation );

+	},

+	stop: function( type, clearQueue, gotoEnd ) {

+		var stopQueue = function( hooks ) {

+			var stop = hooks.stop;

+			delete hooks.stop;

+			stop( gotoEnd );

+		};

+

+		if ( typeof type !== "string" ) {

+			gotoEnd = clearQueue;

+			clearQueue = type;

+			type = undefined;

+		}

+		if ( clearQueue && type !== false ) {

+			this.queue( type || "fx", [] );

+		}

+

+		return this.each(function() {

+			var dequeue = true,

+				index = type != null && type + "queueHooks",

+				timers = jQuery.timers,

+				data = jQuery._data( this );

+

+			if ( index ) {

+				if ( data[ index ] && data[ index ].stop ) {

+					stopQueue( data[ index ] );

+				}

+			} else {

+				for ( index in data ) {

+					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {

+						stopQueue( data[ index ] );

+					}

+				}

+			}

+

+			for ( index = timers.length; index--; ) {

+				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {

+					timers[ index ].anim.stop( gotoEnd );

+					dequeue = false;

+					timers.splice( index, 1 );

+				}

+			}

+

+			// start the next in the queue if the last step wasn't forced

+			// timers currently will call their complete callbacks, which will dequeue

+			// but only if they were gotoEnd

+			if ( dequeue || !gotoEnd ) {

+				jQuery.dequeue( this, type );

+			}

+		});

+	},

+	finish: function( type ) {

+		if ( type !== false ) {

+			type = type || "fx";

+		}

+		return this.each(function() {

+			var index,

+				data = jQuery._data( this ),

+				queue = data[ type + "queue" ],

+				hooks = data[ type + "queueHooks" ],

+				timers = jQuery.timers,

+				length = queue ? queue.length : 0;

+

+			// enable finishing flag on private data

+			data.finish = true;

+

+			// empty the queue first

+			jQuery.queue( this, type, [] );

+

+			if ( hooks && hooks.stop ) {

+				hooks.stop.call( this, true );

+			}

+

+			// look for any active animations, and finish them

+			for ( index = timers.length; index--; ) {

+				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {

+					timers[ index ].anim.stop( true );

+					timers.splice( index, 1 );

+				}

+			}

+

+			// look for any animations in the old queue and finish them

+			for ( index = 0; index < length; index++ ) {

+				if ( queue[ index ] && queue[ index ].finish ) {

+					queue[ index ].finish.call( this );

+				}

+			}

+

+			// turn off finishing flag

+			delete data.finish;

+		});

+	}

+});

+

+// Generate parameters to create a standard animation

+function genFx( type, includeWidth ) {

+	var which,

+		attrs = { height: type },

+		i = 0;

+

+	// if we include width, step value is 1 to do all cssExpand values,

+	// if we don't include width, step value is 2 to skip over Left and Right

+	includeWidth = includeWidth? 1 : 0;

+	for( ; i < 4 ; i += 2 - includeWidth ) {

+		which = cssExpand[ i ];

+		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;

+	}

+

+	if ( includeWidth ) {

+		attrs.opacity = attrs.width = type;

+	}

+

+	return attrs;

+}

+

+// Generate shortcuts for custom animations

+jQuery.each({

+	slideDown: genFx("show"),

+	slideUp: genFx("hide"),

+	slideToggle: genFx("toggle"),

+	fadeIn: { opacity: "show" },

+	fadeOut: { opacity: "hide" },

+	fadeToggle: { opacity: "toggle" }

+}, function( name, props ) {

+	jQuery.fn[ name ] = function( speed, easing, callback ) {

+		return this.animate( props, speed, easing, callback );

+	};

+});

+

+jQuery.speed = function( speed, easing, fn ) {

+	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {

+		complete: fn || !fn && easing ||

+			jQuery.isFunction( speed ) && speed,

+		duration: speed,

+		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing

+	};

+

+	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :

+		opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;

+

+	// normalize opt.queue - true/undefined/null -> "fx"

+	if ( opt.queue == null || opt.queue === true ) {

+		opt.queue = "fx";

+	}

+

+	// Queueing

+	opt.old = opt.complete;

+

+	opt.complete = function() {

+		if ( jQuery.isFunction( opt.old ) ) {

+			opt.old.call( this );

+		}

+

+		if ( opt.queue ) {

+			jQuery.dequeue( this, opt.queue );

+		}

+	};

+

+	return opt;

+};

+

+jQuery.easing = {

+	linear: function( p ) {

+		return p;

+	},

+	swing: function( p ) {

+		return 0.5 - Math.cos( p*Math.PI ) / 2;

+	}

+};

+

+jQuery.timers = [];

+jQuery.fx = Tween.prototype.init;

+jQuery.fx.tick = function() {

+	var timer,

+		timers = jQuery.timers,

+		i = 0;

+

+	fxNow = jQuery.now();

+

+	for ( ; i < timers.length; i++ ) {

+		timer = timers[ i ];

+		// Checks the timer has not already been removed

+		if ( !timer() && timers[ i ] === timer ) {

+			timers.splice( i--, 1 );

+		}

+	}

+

+	if ( !timers.length ) {

+		jQuery.fx.stop();

+	}

+	fxNow = undefined;

+};

+

+jQuery.fx.timer = function( timer ) {

+	if ( timer() && jQuery.timers.push( timer ) ) {

+		jQuery.fx.start();

+	}

+};

+

+jQuery.fx.interval = 13;

+

+jQuery.fx.start = function() {

+	if ( !timerId ) {

+		timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );

+	}

+};

+

+jQuery.fx.stop = function() {

+	clearInterval( timerId );

+	timerId = null;

+};

+

+jQuery.fx.speeds = {

+	slow: 600,

+	fast: 200,

+	// Default speed

+	_default: 400

+};

+

+// Back Compat <1.8 extension point

+jQuery.fx.step = {};

+

+if ( jQuery.expr && jQuery.expr.filters ) {

+	jQuery.expr.filters.animated = function( elem ) {

+		return jQuery.grep(jQuery.timers, function( fn ) {

+			return elem === fn.elem;

+		}).length;

+	};

+}

+jQuery.fn.offset = function( options ) {

+	if ( arguments.length ) {

+		return options === undefined ?

+			this :

+			this.each(function( i ) {

+				jQuery.offset.setOffset( this, options, i );

+			});

+	}

+

+	var docElem, win,

+		box = { top: 0, left: 0 },

+		elem = this[ 0 ],

+		doc = elem && elem.ownerDocument;

+

+	if ( !doc ) {

+		return;

+	}

+

+	docElem = doc.documentElement;

+

+	// Make sure it's not a disconnected DOM node

+	if ( !jQuery.contains( docElem, elem ) ) {

+		return box;

+	}

+

+	// If we don't have gBCR, just use 0,0 rather than error

+	// BlackBerry 5, iOS 3 (original iPhone)

+	if ( typeof elem.getBoundingClientRect !== core_strundefined ) {

+		box = elem.getBoundingClientRect();

+	}

+	win = getWindow( doc );

+	return {

+		top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),

+		left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )

+	};

+};

+

+jQuery.offset = {

+

+	setOffset: function( elem, options, i ) {

+		var position = jQuery.css( elem, "position" );

+

+		// set position first, in-case top/left are set even on static elem

+		if ( position === "static" ) {

+			elem.style.position = "relative";

+		}

+

+		var curElem = jQuery( elem ),

+			curOffset = curElem.offset(),

+			curCSSTop = jQuery.css( elem, "top" ),

+			curCSSLeft = jQuery.css( elem, "left" ),

+			calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,

+			props = {}, curPosition = {}, curTop, curLeft;

+

+		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed

+		if ( calculatePosition ) {

+			curPosition = curElem.position();

+			curTop = curPosition.top;

+			curLeft = curPosition.left;

+		} else {

+			curTop = parseFloat( curCSSTop ) || 0;

+			curLeft = parseFloat( curCSSLeft ) || 0;

+		}

+

+		if ( jQuery.isFunction( options ) ) {

+			options = options.call( elem, i, curOffset );

+		}

+

+		if ( options.top != null ) {

+			props.top = ( options.top - curOffset.top ) + curTop;

+		}

+		if ( options.left != null ) {

+			props.left = ( options.left - curOffset.left ) + curLeft;

+		}

+

+		if ( "using" in options ) {

+			options.using.call( elem, props );

+		} else {

+			curElem.css( props );

+		}

+	}

+};

+

+

+jQuery.fn.extend({

+

+	position: function() {

+		if ( !this[ 0 ] ) {

+			return;

+		}

+

+		var offsetParent, offset,

+			parentOffset = { top: 0, left: 0 },

+			elem = this[ 0 ];

+

+		// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent

+		if ( jQuery.css( elem, "position" ) === "fixed" ) {

+			// we assume that getBoundingClientRect is available when computed position is fixed

+			offset = elem.getBoundingClientRect();

+		} else {

+			// Get *real* offsetParent

+			offsetParent = this.offsetParent();

+

+			// Get correct offsets

+			offset = this.offset();

+			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {

+				parentOffset = offsetParent.offset();

+			}

+

+			// Add offsetParent borders

+			parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );

+			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );

+		}

+

+		// Subtract parent offsets and element margins

+		// note: when an element has margin: auto the offsetLeft and marginLeft

+		// are the same in Safari causing offset.left to incorrectly be 0

+		return {

+			top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),

+			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)

+		};

+	},

+

+	offsetParent: function() {

+		return this.map(function() {

+			var offsetParent = this.offsetParent || docElem;

+			while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {

+				offsetParent = offsetParent.offsetParent;

+			}

+			return offsetParent || docElem;

+		});

+	}

+});

+

+

+// Create scrollLeft and scrollTop methods

+jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {

+	var top = /Y/.test( prop );

+

+	jQuery.fn[ method ] = function( val ) {

+		return jQuery.access( this, function( elem, method, val ) {

+			var win = getWindow( elem );

+

+			if ( val === undefined ) {

+				return win ? (prop in win) ? win[ prop ] :

+					win.document.documentElement[ method ] :

+					elem[ method ];

+			}

+

+			if ( win ) {

+				win.scrollTo(

+					!top ? val : jQuery( win ).scrollLeft(),

+					top ? val : jQuery( win ).scrollTop()

+				);

+

+			} else {

+				elem[ method ] = val;

+			}

+		}, method, val, arguments.length, null );

+	};

+});

+

+function getWindow( elem ) {

+	return jQuery.isWindow( elem ) ?

+		elem :

+		elem.nodeType === 9 ?

+			elem.defaultView || elem.parentWindow :

+			false;

+}

+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods

+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {

+	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {

+		// margin is only for outerHeight, outerWidth

+		jQuery.fn[ funcName ] = function( margin, value ) {

+			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),

+				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );

+

+			return jQuery.access( this, function( elem, type, value ) {

+				var doc;

+

+				if ( jQuery.isWindow( elem ) ) {

+					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there

+					// isn't a whole lot we can do. See pull request at this URL for discussion:

+					// https://github.com/jquery/jquery/pull/764

+					return elem.document.documentElement[ "client" + name ];

+				}

+

+				// Get document width or height

+				if ( elem.nodeType === 9 ) {

+					doc = elem.documentElement;

+

+					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest

+					// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.

+					return Math.max(

+						elem.body[ "scroll" + name ], doc[ "scroll" + name ],

+						elem.body[ "offset" + name ], doc[ "offset" + name ],

+						doc[ "client" + name ]

+					);

+				}

+

+				return value === undefined ?

+					// Get width or height on the element, requesting but not forcing parseFloat

+					jQuery.css( elem, type, extra ) :

+

+					// Set width or height on the element

+					jQuery.style( elem, type, value, extra );

+			}, type, chainable ? margin : undefined, chainable, null );

+		};

+	});

+});

+// Limit scope pollution from any deprecated API

+// (function() {

+

+// The number of elements contained in the matched element set

+jQuery.fn.size = function() {

+	return this.length;

+};

+

+jQuery.fn.andSelf = jQuery.fn.addBack;

+

+// })();

+if ( typeof module === "object" && module && typeof module.exports === "object" ) {

+	// Expose jQuery as module.exports in loaders that implement the Node

+	// module pattern (including browserify). Do not create the global, since

+	// the user will be storing it themselves locally, and globals are frowned

+	// upon in the Node module world.

+	module.exports = jQuery;

+} else {

+	// Otherwise expose jQuery to the global object as usual

+	window.jQuery = window.$ = jQuery;

+

+	// Register as a named AMD module, since jQuery can be concatenated with other

+	// files that may use define, but not via a proper concatenation script that

+	// understands anonymous AMD modules. A named AMD is safest and most robust

+	// way to register. Lowercase jquery is used because AMD module names are

+	// derived from file names, and jQuery is normally delivered in a lowercase

+	// file name. Do this after creating the global so that if an AMD module wants

+	// to call noConflict to hide this version of jQuery, it will work.

+	if ( typeof define === "function" && define.amd ) {

+		define( "jquery", [], function () { return jQuery; } );

+	}

+}

+

+})( window );

+/*

+ * jQuery Migrate

+ * Copyright jQuery Foundation and other contributors

+ */

+(function( jQuery, window, undefined ) {

+// See http://bugs.jquery.com/ticket/13335

+// "use strict";

+

+

+jQuery.migrateVersion = "0.0.0";

+

+

+var warnedAbout = {};

+

+// List of warnings already given; public read only

+jQuery.migrateWarnings = [];

+

+// Set to true to prevent console output; migrateWarnings still maintained

+jQuery.migrateMute = true;

+

+// Show a message on the console so devs know we're active

+if ( window.console && window.console.log && !jQuery.migrateMute ) {

+	window.console.log( "JQMIGRATE: Migrate is installed" +

+		( jQuery.migrateMute ? "" : " with logging active" ) +

+		", version " + jQuery.migrateVersion );

+}

+

+// Set to false to disable traces that appear with warnings

+if ( jQuery.migrateTrace === undefined ) {

+	jQuery.migrateTrace = false;

+}

+

+// Forget any warnings we've already given; public

+jQuery.migrateReset = function() {

+	warnedAbout = {};

+	jQuery.migrateWarnings.length = 0;

+};

+

+function migrateWarn( msg) {

+	var console = window.console;

+	if ( !warnedAbout[ msg ] ) {

+		warnedAbout[ msg ] = true;

+		jQuery.migrateWarnings.push( msg );

+		if ( console && console.warn && !jQuery.migrateMute ) {

+			console.warn( "JQMIGRATE: " + msg );

+			if ( jQuery.migrateTrace && console.trace ) {

+				console.trace();

+			}

+		}

+	}

+}

+

+function migrateWarnProp( obj, prop, value, msg ) {

+	if ( Object.defineProperty ) {

+		// On ES5 browsers (non-oldIE), warn if the code tries to get prop;

+		// allow property to be overwritten in case some other plugin wants it

+		try {

+			Object.defineProperty( obj, prop, {

+				configurable: true,

+				enumerable: true,

+				get: function() {

+					migrateWarn( msg );

+					return value;

+				},

+				set: function( newValue ) {

+					migrateWarn( msg );

+					value = newValue;

+				}

+			});

+			return;

+		} catch( err ) {

+			// IE8 is a dope about Object.defineProperty, can't warn there

+		}

+	}

+

+	// Non-ES5 (or broken) browser; just set the property

+	jQuery._definePropertyBroken = true;

+	obj[ prop ] = value;

+}

+

+if ( document.compatMode === "BackCompat" ) {

+	// jQuery has never supported or tested Quirks Mode

+	migrateWarn( "jQuery is not compatible with Quirks Mode" );

+}

+

+

+var attrFn = jQuery( "<input/>", { size: 1 } ).attr("size") && jQuery.attrFn,

+	oldAttr = jQuery.attr,

+	valueAttrGet = jQuery.attrHooks.value && jQuery.attrHooks.value.get ||

+		function() { return null; },

+	valueAttrSet = jQuery.attrHooks.value && jQuery.attrHooks.value.set ||

+		function() { return undefined; },

+	rnoType = /^(?:input|button)$/i,

+	rnoAttrNodeType = /^[238]$/,

+	rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,

+	ruseDefault = /^(?:checked|selected)$/i;

+

+// jQuery.attrFn

+migrateWarnProp( jQuery, "attrFn", attrFn || {}, "jQuery.attrFn is deprecated" );

+

+jQuery.attr = function( elem, name, value, pass ) {

+	var lowerName = name.toLowerCase(),

+		nType = elem && elem.nodeType;

+

+	if ( pass ) {

+		// Since pass is used internally, we only warn for new jQuery

+		// versions where there isn't a pass arg in the formal params

+		if ( oldAttr.length < 4 ) {

+			migrateWarn("jQuery.fn.attr( props, pass ) is deprecated");

+		}

+		if ( elem && !rnoAttrNodeType.test( nType ) &&

+			(attrFn ? name in attrFn : jQuery.isFunction(jQuery.fn[name])) ) {

+			return jQuery( elem )[ name ]( value );

+		}

+	}

+

+	// Warn if user tries to set `type`, since it breaks on IE 6/7/8; by checking

+	// for disconnected elements we don't warn on $( "<button>", { type: "button" } ).

+	if ( name === "type" && value !== undefined && rnoType.test( elem.nodeName ) && elem.parentNode ) {

+		migrateWarn("Can't change the 'type' of an input or button in IE 6/7/8");

+	}

+

+	// Restore boolHook for boolean property/attribute synchronization

+	if ( !jQuery.attrHooks[ lowerName ] && rboolean.test( lowerName ) ) {

+		jQuery.attrHooks[ lowerName ] = {

+			get: function( elem, name ) {

+				// Align boolean attributes with corresponding properties

+				// Fall back to attribute presence where some booleans are not supported

+				var attrNode,

+					property = jQuery.prop( elem, name );

+				return property === true || typeof property !== "boolean" &&

+					( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?

+

+					name.toLowerCase() :

+					undefined;

+			},

+			set: function( elem, value, name ) {

+				var propName;

+				if ( value === false ) {

+					// Remove boolean attributes when set to false

+					jQuery.removeAttr( elem, name );

+				} else {

+					// value is true since we know at this point it's type boolean and not false

+					// Set boolean attributes to the same name and set the DOM property

+					propName = jQuery.propFix[ name ] || name;

+					if ( propName in elem ) {

+						// Only set the IDL specifically if it already exists on the element

+						elem[ propName ] = true;

+					}

+

+					elem.setAttribute( name, name.toLowerCase() );

+				}

+				return name;

+			}

+		};

+

+		// Warn only for attributes that can remain distinct from their properties post-1.9

+		if ( ruseDefault.test( lowerName ) ) {

+			migrateWarn( "jQuery.fn.attr('" + lowerName + "') might use property instead of attribute" );

+		}

+	}

+

+	return oldAttr.call( jQuery, elem, name, value );

+};

+

+// attrHooks: value

+jQuery.attrHooks.value = {

+	get: function( elem, name ) {

+		var nodeName = ( elem.nodeName || "" ).toLowerCase();

+		if ( nodeName === "button" ) {

+			return valueAttrGet.apply( this, arguments );

+		}

+		if ( nodeName !== "input" && nodeName !== "option" ) {

+			migrateWarn("jQuery.fn.attr('value') no longer gets properties");

+		}

+		return name in elem ?

+			elem.value :

+			null;

+	},

+	set: function( elem, value ) {

+		var nodeName = ( elem.nodeName || "" ).toLowerCase();

+		if ( nodeName === "button" ) {

+			return valueAttrSet.apply( this, arguments );

+		}

+		if ( nodeName !== "input" && nodeName !== "option" ) {

+			migrateWarn("jQuery.fn.attr('value', val) no longer sets properties");

+		}

+		// Does not return so that setAttribute is also used

+		elem.value = value;

+	}

+};

+

+

+var matched, browser,

+	oldInit = jQuery.fn.init,

+	oldFind = jQuery.find,

+	oldParseJSON = jQuery.parseJSON,

+	rspaceAngle = /^\s*</,

+	rattrHashTest = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/,

+	rattrHashGlob = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/g,

+	// Note: XSS check is done below after string is trimmed

+	rquickExpr = /^([^<]*)(<[\w\W]+>)([^>]*)$/;

+

+// $(html) "looks like html" rule change

+jQuery.fn.init = function( selector, context, rootjQuery ) {

+	var match, ret;

+

+	if ( selector && typeof selector === "string" ) {

+		if ( !jQuery.isPlainObject( context ) &&

+				(match = rquickExpr.exec( jQuery.trim( selector ) )) && match[ 0 ] ) {

+

+			// This is an HTML string according to the "old" rules; is it still?

+			if ( !rspaceAngle.test( selector ) ) {

+				migrateWarn("$(html) HTML strings must start with '<' character");

+			}

+			if ( match[ 3 ] ) {

+				migrateWarn("$(html) HTML text after last tag is ignored");

+			}

+

+			// Consistently reject any HTML-like string starting with a hash (gh-9521)

+			// Note that this may break jQuery 1.6.x code that otherwise would work.

+			if ( match[ 0 ].charAt( 0 ) === "#" ) {

+				migrateWarn("HTML string cannot start with a '#' character");

+				jQuery.error("JQMIGRATE: Invalid selector string (XSS)");

+			}

+

+			// Now process using loose rules; let pre-1.8 play too

+			// Is this a jQuery context? parseHTML expects a DOM element (#178)

+			if ( context && context.context && context.context.nodeType ) {

+				context = context.context;

+			}

+

+			if ( jQuery.parseHTML ) {

+				return oldInit.call( this,

+						jQuery.parseHTML( match[ 2 ], context && context.ownerDocument ||

+							context || document, true ), context, rootjQuery );

+			}

+		}

+	}

+

+	ret = oldInit.apply( this, arguments );

+

+	// Fill in selector and context properties so .live() works

+	if ( selector && selector.selector !== undefined ) {

+		// A jQuery object, copy its properties

+		ret.selector = selector.selector;

+		ret.context = selector.context;

+

+	} else {

+		ret.selector = typeof selector === "string" ? selector : "";

+		if ( selector ) {

+			ret.context = selector.nodeType? selector : context || document;

+		}

+	}

+

+	return ret;

+};

+jQuery.fn.init.prototype = jQuery.fn;

+

+jQuery.find = function( selector ) {

+	var args = Array.prototype.slice.call( arguments );

+

+	// Support: PhantomJS 1.x

+	// String#match fails to match when used with a //g RegExp, only on some strings

+	if ( typeof selector === "string" && rattrHashTest.test( selector ) ) {

+

+		// The nonstandard and undocumented unquoted-hash was removed in jQuery 1.12.0

+		// First see if qS thinks it's a valid selector, if so avoid a false positive

+		try {

+			document.querySelector( selector );

+		} catch ( err1 ) {

+

+			// Didn't *look* valid to qSA, warn and try quoting what we think is the value

+			selector = selector.replace( rattrHashGlob, function( _, attr, op, value ) {

+				return "[" + attr + op + "\"" + value + "\"]";

+			} );

+

+			// If the regexp *may* have created an invalid selector, don't update it

+			// Note that there may be false alarms if selector uses jQuery extensions

+			try {

+				document.querySelector( selector );

+				migrateWarn( "Attribute selector with '#' must be quoted: " + args[ 0 ] );

+				args[ 0 ] = selector;

+			} catch ( err2 ) {

+				migrateWarn( "Attribute selector with '#' was not fixed: " + args[ 0 ] );

+			}

+		}

+	}

+

+	return oldFind.apply( this, args );

+};

+

+// Copy properties attached to original jQuery.find method (e.g. .attr, .isXML)

+var findProp;

+for ( findProp in oldFind ) {

+	if ( Object.prototype.hasOwnProperty.call( oldFind, findProp ) ) {

+		jQuery.find[ findProp ] = oldFind[ findProp ];

+	}

+}

+

+// Let $.parseJSON(falsy_value) return null

+jQuery.parseJSON = function( json ) {

+	if ( !json ) {

+		migrateWarn("jQuery.parseJSON requires a valid JSON string");

+		return null;

+	}

+	return oldParseJSON.apply( this, arguments );

+};

+

+jQuery.uaMatch = function( ua ) {

+	ua = ua.toLowerCase();

+

+	var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||

+		/(webkit)[ \/]([\w.]+)/.exec( ua ) ||

+		/(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||

+		/(msie) ([\w.]+)/.exec( ua ) ||

+		ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) ||

+		[];

+

+	return {

+		browser: match[ 1 ] || "",

+		version: match[ 2 ] || "0"

+	};

+};

+

+// Don't clobber any existing jQuery.browser in case it's different

+if ( !jQuery.browser ) {

+	matched = jQuery.uaMatch( navigator.userAgent );

+	browser = {};

+

+	if ( matched.browser ) {

+		browser[ matched.browser ] = true;

+		browser.version = matched.version;

+	}

+

+	// Chrome is Webkit, but Webkit is also Safari.

+	if ( browser.chrome ) {

+		browser.webkit = true;

+	} else if ( browser.webkit ) {

+		browser.safari = true;

+	}

+

+	jQuery.browser = browser;

+}

+

+// Warn if the code tries to get jQuery.browser

+migrateWarnProp( jQuery, "browser", jQuery.browser, "jQuery.browser is deprecated" );

+

+// jQuery.boxModel deprecated in 1.3, jQuery.support.boxModel deprecated in 1.7

+jQuery.boxModel = jQuery.support.boxModel = (document.compatMode === "CSS1Compat");

+migrateWarnProp( jQuery, "boxModel", jQuery.boxModel, "jQuery.boxModel is deprecated" );

+migrateWarnProp( jQuery.support, "boxModel", jQuery.support.boxModel, "jQuery.support.boxModel is deprecated" );

+

+jQuery.sub = function() {

+	function jQuerySub( selector, context ) {

+		return new jQuerySub.fn.init( selector, context );

+	}

+	jQuery.extend( true, jQuerySub, this );

+	jQuerySub.superclass = this;

+	jQuerySub.fn = jQuerySub.prototype = this();

+	jQuerySub.fn.constructor = jQuerySub;

+	jQuerySub.sub = this.sub;

+	jQuerySub.fn.init = function init( selector, context ) {

+		var instance = jQuery.fn.init.call( this, selector, context, rootjQuerySub );

+		return instance instanceof jQuerySub ?

+			instance :

+			jQuerySub( instance );

+	};

+	jQuerySub.fn.init.prototype = jQuerySub.fn;

+	var rootjQuerySub = jQuerySub(document);

+	migrateWarn( "jQuery.sub() is deprecated" );

+	return jQuerySub;

+};

+

+// The number of elements contained in the matched element set

+jQuery.fn.size = function() {

+	migrateWarn( "jQuery.fn.size() is deprecated; use the .length property" );

+	return this.length;

+};

+

+

+var internalSwapCall = false;

+

+// If this version of jQuery has .swap(), don't false-alarm on internal uses

+if ( jQuery.swap ) {

+	jQuery.each( [ "height", "width", "reliableMarginRight" ], function( _, name ) {

+		var oldHook = jQuery.cssHooks[ name ] && jQuery.cssHooks[ name ].get;

+

+		if ( oldHook ) {

+			jQuery.cssHooks[ name ].get = function() {

+				var ret;

+

+				internalSwapCall = true;

+				ret = oldHook.apply( this, arguments );

+				internalSwapCall = false;

+				return ret;

+			};

+		}

+	});

+}

+

+jQuery.swap = function( elem, options, callback, args ) {

+	var ret, name,

+		old = {};

+

+	if ( !internalSwapCall ) {

+		migrateWarn( "jQuery.swap() is undocumented and deprecated" );

+	}

+

+	// Remember the old values, and insert the new ones

+	for ( name in options ) {

+		old[ name ] = elem.style[ name ];

+		elem.style[ name ] = options[ name ];

+	}

+

+	ret = callback.apply( elem, args || [] );

+

+	// Revert the old values

+	for ( name in options ) {

+		elem.style[ name ] = old[ name ];

+	}

+

+	return ret;

+};

+

+

+// Ensure that $.ajax gets the new parseJSON defined in core.js

+jQuery.ajaxSetup({

+	converters: {

+		"text json": jQuery.parseJSON

+	}

+});

+

+

+var oldFnData = jQuery.fn.data;

+

+jQuery.fn.data = function( name ) {

+	var ret, evt,

+		elem = this[0];

+

+	// Handles 1.7 which has this behavior and 1.8 which doesn't

+	if ( elem && name === "events" && arguments.length === 1 ) {

+		ret = jQuery.data( elem, name );

+		evt = jQuery._data( elem, name );

+		if ( ( ret === undefined || ret === evt ) && evt !== undefined ) {

+			migrateWarn("Use of jQuery.fn.data('events') is deprecated");

+			return evt;

+		}

+	}

+	return oldFnData.apply( this, arguments );

+};

+

+

+var rscriptType = /\/(java|ecma)script/i;

+

+// Since jQuery.clean is used internally on older versions, we only shim if it's missing

+if ( !jQuery.clean ) {

+	jQuery.clean = function( elems, context, fragment, scripts ) {

+		// Set context per 1.8 logic

+		context = context || document;

+		context = !context.nodeType && context[0] || context;

+		context = context.ownerDocument || context;

+

+		migrateWarn("jQuery.clean() is deprecated");

+

+		var i, elem, handleScript, jsTags,

+			ret = [];

+

+		jQuery.merge( ret, jQuery.buildFragment( elems, context ).childNodes );

+

+		// Complex logic lifted directly from jQuery 1.8

+		if ( fragment ) {

+			// Special handling of each script element

+			handleScript = function( elem ) {

+				// Check if we consider it executable

+				if ( !elem.type || rscriptType.test( elem.type ) ) {

+					// Detach the script and store it in the scripts array (if provided) or the fragment

+					// Return truthy to indicate that it has been handled

+					return scripts ?

+						scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) :

+						fragment.appendChild( elem );

+				}

+			};

+

+			for ( i = 0; (elem = ret[i]) != null; i++ ) {

+				// Check if we're done after handling an executable script

+				if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) {

+					// Append to fragment and handle embedded scripts

+					fragment.appendChild( elem );

+					if ( typeof elem.getElementsByTagName !== "undefined" ) {

+						// handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration

+						jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript );

+

+						// Splice the scripts into ret after their former ancestor and advance our index beyond them

+						ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );

+						i += jsTags.length;

+					}

+				}

+			}

+		}

+

+		return ret;

+	};

+}

+

+var eventAdd = jQuery.event.add,

+	eventRemove = jQuery.event.remove,

+	eventTrigger = jQuery.event.trigger,

+	oldToggle = jQuery.fn.toggle,

+	oldLive = jQuery.fn.live,

+	oldDie = jQuery.fn.die,

+	oldLoad = jQuery.fn.load,

+	ajaxEvents = "ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",

+	rajaxEvent = new RegExp( "\\b(?:" + ajaxEvents + ")\\b" ),

+	rhoverHack = /(?:^|\s)hover(\.\S+|)\b/,

+	hoverHack = function( events ) {

+		if ( typeof( events ) !== "string" || jQuery.event.special.hover ) {

+			return events;

+		}

+		if ( rhoverHack.test( events ) ) {

+			migrateWarn("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'");

+		}

+		return events && events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );

+	};

+

+// Event props removed in 1.9, put them back if needed; no practical way to warn them

+if ( jQuery.event.props && jQuery.event.props[ 0 ] !== "attrChange" ) {

+	jQuery.event.props.unshift( "attrChange", "attrName", "relatedNode", "srcElement" );

+}

+

+// Undocumented jQuery.event.handle was "deprecated" in jQuery 1.7

+if ( jQuery.event.dispatch ) {

+	migrateWarnProp( jQuery.event, "handle", jQuery.event.dispatch, "jQuery.event.handle is undocumented and deprecated" );

+}

+

+// Support for 'hover' pseudo-event and ajax event warnings

+jQuery.event.add = function( elem, types, handler, data, selector ){

+	if ( elem !== document && rajaxEvent.test( types ) ) {

+		migrateWarn( "AJAX events should be attached to document: " + types );

+	}

+	eventAdd.call( this, elem, hoverHack( types || "" ), handler, data, selector );

+};

+jQuery.event.remove = function( elem, types, handler, selector, mappedTypes ){

+	eventRemove.call( this, elem, hoverHack( types ) || "", handler, selector, mappedTypes );

+};

+

+jQuery.each( [ "load", "unload", "error" ], function( _, name ) {

+

+	jQuery.fn[ name ] = function() {

+		var args = Array.prototype.slice.call( arguments, 0 );

+

+		// If this is an ajax load() the first arg should be the string URL;

+		// technically this could also be the "Anything" arg of the event .load()

+		// which just goes to show why this dumb signature has been deprecated!

+		// jQuery custom builds that exclude the Ajax module justifiably die here.

+		if ( name === "load" && typeof args[ 0 ] === "string" ) {

+			return oldLoad.apply( this, args );

+		}

+

+		migrateWarn( "jQuery.fn." + name + "() is deprecated" );

+

+		args.splice( 0, 0, name );

+		if ( arguments.length ) {

+			return this.bind.apply( this, args );

+		}

+

+		// Use .triggerHandler here because:

+		// - load and unload events don't need to bubble, only applied to window or image

+		// - error event should not bubble to window, although it does pre-1.7

+		// See http://bugs.jquery.com/ticket/11820

+		this.triggerHandler.apply( this, args );

+		return this;

+	};

+

+});

+

+jQuery.fn.toggle = function( fn, fn2 ) {

+

+	// Don't mess with animation or css toggles

+	if ( !jQuery.isFunction( fn ) || !jQuery.isFunction( fn2 ) ) {

+		return oldToggle.apply( this, arguments );

+	}

+	migrateWarn("jQuery.fn.toggle(handler, handler...) is deprecated");

+

+	// Save reference to arguments for access in closure

+	var args = arguments,

+		guid = fn.guid || jQuery.guid++,

+		i = 0,

+		toggler = function( event ) {

+			// Figure out which function to execute

+			var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;

+			jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );

+

+			// Make sure that clicks stop

+			event.preventDefault();

+

+			// and execute the function

+			return args[ lastToggle ].apply( this, arguments ) || false;

+		};

+

+	// link all the functions, so any of them can unbind this click handler

+	toggler.guid = guid;

+	while ( i < args.length ) {

+		args[ i++ ].guid = guid;

+	}

+

+	return this.click( toggler );

+};

+

+jQuery.fn.live = function( types, data, fn ) {

+	migrateWarn("jQuery.fn.live() is deprecated");

+	if ( oldLive ) {

+		return oldLive.apply( this, arguments );

+	}

+	jQuery( this.context ).on( types, this.selector, data, fn );

+	return this;

+};

+

+jQuery.fn.die = function( types, fn ) {

+	migrateWarn("jQuery.fn.die() is deprecated");

+	if ( oldDie ) {

+		return oldDie.apply( this, arguments );

+	}

+	jQuery( this.context ).off( types, this.selector || "**", fn );

+	return this;

+};

+

+// Turn global events into document-triggered events

+jQuery.event.trigger = function( event, data, elem, onlyHandlers  ){

+	if ( !elem && !rajaxEvent.test( event ) ) {

+		migrateWarn( "Global events are undocumented and deprecated" );

+	}

+	return eventTrigger.call( this,  event, data, elem || document, onlyHandlers  );

+};

+jQuery.each( ajaxEvents.split("|"),

+	function( _, name ) {

+		jQuery.event.special[ name ] = {

+			setup: function() {

+				var elem = this;

+

+				// The document needs no shimming; must be !== for oldIE

+				if ( elem !== document ) {

+					jQuery.event.add( document, name + "." + jQuery.guid, function() {

+						jQuery.event.trigger( name, Array.prototype.slice.call( arguments, 1 ), elem, true );

+					});

+					jQuery._data( this, name, jQuery.guid++ );

+				}

+				return false;

+			},

+			teardown: function() {

+				if ( this !== document ) {

+					jQuery.event.remove( document, name + "." + jQuery._data( this, name ) );

+				}

+				return false;

+			}

+		};

+	}

+);

+

+jQuery.event.special.ready = {

+	setup: function() {

+		if ( this === document ) {

+			migrateWarn( "'ready' event is deprecated" );

+		}

+	}

+};

+

+var oldSelf = jQuery.fn.andSelf || jQuery.fn.addBack,

+	oldFnFind = jQuery.fn.find;

+

+jQuery.fn.andSelf = function() {

+	migrateWarn("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()");

+	return oldSelf.apply( this, arguments );

+};

+

+jQuery.fn.find = function( selector ) {

+	var ret = oldFnFind.apply( this, arguments );

+	ret.context = this.context;

+	ret.selector = this.selector ? this.selector + " " + selector : selector;

+	return ret;

+};

+

+

+// jQuery 1.6 did not support Callbacks, do not warn there

+if ( jQuery.Callbacks ) {

+

+	var oldDeferred = jQuery.Deferred,

+		tuples = [

+			// action, add listener, callbacks, .then handlers, final state

+			[ "resolve", "done", jQuery.Callbacks("once memory"),

+				jQuery.Callbacks("once memory"), "resolved" ],

+			[ "reject", "fail", jQuery.Callbacks("once memory"),

+				jQuery.Callbacks("once memory"), "rejected" ],

+			[ "notify", "progress", jQuery.Callbacks("memory"),

+				jQuery.Callbacks("memory") ]

+		];

+

+	jQuery.Deferred = function( func ) {

+		var deferred = oldDeferred(),

+			promise = deferred.promise();

+

+		deferred.pipe = promise.pipe = function( /* fnDone, fnFail, fnProgress */ ) {

+			var fns = arguments;

+

+			migrateWarn( "deferred.pipe() is deprecated" );

+

+			return jQuery.Deferred(function( newDefer ) {

+				jQuery.each( tuples, function( i, tuple ) {

+					var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];

+					// deferred.done(function() { bind to newDefer or newDefer.resolve })

+					// deferred.fail(function() { bind to newDefer or newDefer.reject })

+					// deferred.progress(function() { bind to newDefer or newDefer.notify })

+					deferred[ tuple[1] ](function() {

+						var returned = fn && fn.apply( this, arguments );

+						if ( returned && jQuery.isFunction( returned.promise ) ) {

+							returned.promise()

+								.done( newDefer.resolve )

+								.fail( newDefer.reject )

+								.progress( newDefer.notify );

+						} else {

+							newDefer[ tuple[ 0 ] + "With" ](

+								this === promise ? newDefer.promise() : this,

+								fn ? [ returned ] : arguments

+							);

+						}

+					});

+				});

+				fns = null;

+			}).promise();

+

+		};

+

+		deferred.isResolved = function() {

+			migrateWarn( "deferred.isResolved is deprecated" );

+			return deferred.state() === "resolved";

+		};

+

+		deferred.isRejected = function() {

+			migrateWarn( "deferred.isRejected is deprecated" );

+			return deferred.state() === "rejected";

+		};

+

+		if ( func ) {

+			func.call( deferred, deferred );

+		}

+

+		return deferred;

+	};

+

+}

+

+})( jQuery, window );
\ No newline at end of file