Make WordPress Core

Ticket #32358: 32358.2.patch

File 32358.2.patch, 474.3 KB (added by CrazyJaco, 10 years ago)

Realized it was probably in poor taste to upgrade jQuery at the same as implementing this. Changed it back to jQuery 1.11.1

  • wp-includes/js/jquery/jquery.js

    diff --git wp-includes/js/jquery/jquery.js wp-includes/js/jquery/jquery.js
    index e4155d3..d4b67f7 100644
     
    1 /*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
    2 !function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;
    3 if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},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(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==cb()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===cb()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ab:bb):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:bb,isPropagationStopped:bb,isImmediatePropagationStopped:bb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ab,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ab,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ab,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=bb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=bb),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function db(a){var b=eb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var eb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fb=/ jQuery\d+="(?:null|\d+)"/g,gb=new RegExp("<(?:"+eb+")[\\s/>]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/<tbody/i,lb=/<|&#?\w+;/,mb=/<(?:script|style|link)/i,nb=/checked\s*(?:[^=]|=\s*.checked.)/i,ob=/^$|\/(?:java|ecma)script/i,pb=/^true\/(.*)/,qb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,rb={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>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?"<table>"!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Cb[0].contentWindow||Cb[0].contentDocument).document,b.write(),b.close(),c=Eb(a,b),Cb.detach()),Db[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Gb=/^margin/,Hb=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ib,Jb,Kb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ib=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Hb.test(g)&&Gb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ib=function(a){return a.currentStyle},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Hb.test(g)&&!Kb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Lb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Mb=/alpha\([^)]*\)/i,Nb=/opacity\s*=\s*([^)]*)/,Ob=/^(none|table(?!-c[ea]).+)/,Pb=new RegExp("^("+S+")(.*)$","i"),Qb=new RegExp("^([+-])=("+S+")","i"),Rb={position:"absolute",visibility:"hidden",display:"block"},Sb={letterSpacing:"0",fontWeight:"400"},Tb=["Webkit","O","Moz","ms"];function Ub(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Tb.length;while(e--)if(b=Tb[e]+c,b in a)return b;return d}function Vb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fb(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wb(a,b,c){var d=Pb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Yb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ib(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Jb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Hb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xb(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Jb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ub(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ub(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Jb(a,b,d)),"normal"===f&&b in Sb&&(f=Sb[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Ob.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Rb,function(){return Yb(a,b,d)}):Yb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ib(a);return Wb(a,c,d?Xb(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Mb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Mb.test(f)?f.replace(Mb,e):f+" "+e)}}),m.cssHooks.marginRight=Lb(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Jb,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Gb.test(a)||(m.cssHooks[a+b].set=Wb)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ib(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Vb(this,!0)},hide:function(){return Vb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Zb(a,b,c,d,e){return new Zb.prototype.init(a,b,c,d,e)}m.Tween=Zb,Zb.prototype={constructor:Zb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")
    4 },cur:function(){var a=Zb.propHooks[this.prop];return a&&a.get?a.get(this):Zb.propHooks._default.get(this)},run:function(a){var b,c=Zb.propHooks[this.prop];return this.pos=b=this.options.duration?m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Zb.propHooks._default.set(this),this}},Zb.prototype.init.prototype=Zb.prototype,Zb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Zb.propHooks.scrollTop=Zb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Zb.prototype.init,m.fx.step={};var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cc=/queueHooks$/,dc=[ic],ec={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bc.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fc(){return setTimeout(function(){$b=void 0}),$b=m.now()}function gc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hc(a,b,c){for(var d,e=(ec[b]||[]).concat(ec["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ic(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fb(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fb(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ac.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fb(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hc(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jc(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kc(a,b,c){var d,e,f=0,g=dc.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$b||fc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$b||fc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jc(k,j.opts.specialEasing);g>f;f++)if(d=dc[f].call(j,a,k,j.opts))return d;return m.map(k,hc,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kc,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],ec[c]=ec[c]||[],ec[c].unshift(b)},prefilter:function(a,b){b?dc.unshift(a):dc.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kc(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gc(b,!0),a,d,e)}}),m.each({slideDown:gc("show"),slideUp:gc("hide"),slideToggle:gc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($b=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$b=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_b||(_b=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_b),_b=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lc=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lc,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mc,nc,oc=m.expr.attrHandle,pc=/^(?:checked|selected)$/i,qc=k.getSetAttribute,rc=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nc:mc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rc&&qc||!pc.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qc?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nc={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rc&&qc||!pc.test(c)?a.setAttribute(!qc&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=oc[b]||m.find.attr;oc[b]=rc&&qc||!pc.test(b)?function(a,b,d){var e,f;return d||(f=oc[b],oc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,oc[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rc&&qc||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mc&&mc.set(a,b,c)}}),qc||(mc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},oc.id=oc.name=oc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mc.set},m.attrHooks.contenteditable={set:function(a,b,c){mc.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sc=/^(?:input|select|textarea|button|object)$/i,tc=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sc.test(a.nodeName)||tc.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var uc=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(uc," ").indexOf(b)>=0)return!0;return!1}}),m.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(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vc=m.now(),wc=/\?/,xc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yc,zc,Ac=/#.*$/,Bc=/([?&])_=[^&]*/,Cc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Dc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ec=/^(?:GET|HEAD)$/,Fc=/^\/\//,Gc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hc={},Ic={},Jc="*/".concat("*");try{zc=location.href}catch(Kc){zc=y.createElement("a"),zc.href="",zc=zc.href}yc=Gc.exec(zc.toLowerCase())||[];function Lc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mc(a,b,c,d){var e={},f=a===Ic;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nc(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Oc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zc,type:"GET",isLocal:Dc.test(yc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jc,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"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nc(Nc(a,m.ajaxSettings),b):Nc(m.ajaxSettings,a)},ajaxPrefilter:Lc(Hc),ajaxTransport:Lc(Ic),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zc)+"").replace(Ac,"").replace(Fc,yc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yc[1]&&c[2]===yc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yc[3]||("http:"===yc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mc(Hc,k,b,v),2===t)return v;h=k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Ec.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bc.test(e)?e.replace(Bc,"$1_="+vc++):e+(wc.test(e)?"&":"?")+"_="+vc++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mc(Ic,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Oc(k,v,c)),u=Pc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qc=/%20/g,Rc=/\[\]$/,Sc=/\r?\n/g,Tc=/^(?:submit|button|image|reset|file)$/i,Uc=/^(?:input|select|textarea|keygen)/i;function Vc(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rc.test(a)?d(a,e):Vc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vc(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vc(c,a[c],b,e);return d.join("&").replace(Qc,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Uc.test(this.nodeName)&&!Tc.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sc,"\r\n")}}):{name:b.name,value:c.replace(Sc,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zc()||$c()}:Zc;var Wc=0,Xc={},Yc=m.ajaxSettings.xhr();a.ActiveXObject&&m(a).on("unload",function(){for(var a in Xc)Xc[a](void 0,!0)}),k.cors=!!Yc&&"withCredentials"in Yc,Yc=k.ajax=!!Yc,Yc&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xc[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zc(){try{return new a.XMLHttpRequest}catch(b){}}function $c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _c=[],ad=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_c.pop()||m.expando+"_"+vc++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ad.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ad.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ad,"$1"+e):b.jsonp!==!1&&(b.url+=(wc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_c.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bd=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bd)return bd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cd})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m});
    5 jQuery.noConflict();
     1/*!
     2 * jQuery JavaScript Library v1.11.1
     3 * http://jquery.com/
     4 *
     5 * Includes Sizzle.js
     6 * http://sizzlejs.com/
     7 *
     8 * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
     9 * Released under the MIT license
     10 * http://jquery.org/license
     11 *
     12 * Date: 2014-05-01T17:42Z
     13 */
     14
     15(function( global, factory ) {
     16
     17        if ( typeof module === "object" && typeof module.exports === "object" ) {
     18                // For CommonJS and CommonJS-like environments where a proper window is present,
     19                // execute the factory and get jQuery
     20                // For environments that do not inherently posses a window with a document
     21                // (such as Node.js), expose a jQuery-making factory as module.exports
     22                // This accentuates the need for the creation of a real window
     23                // e.g. var jQuery = require("jquery")(window);
     24                // See ticket #14549 for more info
     25                module.exports = global.document ?
     26                        factory( global, true ) :
     27                        function( w ) {
     28                                if ( !w.document ) {
     29                                        throw new Error( "jQuery requires a window with a document" );
     30                                }
     31                                return factory( w );
     32                        };
     33        } else {
     34                factory( global );
     35        }
     36
     37// Pass this if window is not defined yet
     38}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
     39
     40// Can't do this because several apps including ASP.NET trace
     41// the stack via arguments.caller.callee and Firefox dies if
     42// you try to trace through "use strict" call chains. (#13335)
     43// Support: Firefox 18+
     44//
     45
     46var deletedIds = [];
     47
     48var slice = deletedIds.slice;
     49
     50var concat = deletedIds.concat;
     51
     52var push = deletedIds.push;
     53
     54var indexOf = deletedIds.indexOf;
     55
     56var class2type = {};
     57
     58var toString = class2type.toString;
     59
     60var hasOwn = class2type.hasOwnProperty;
     61
     62var support = {};
     63
     64
     65
     66var
     67        version = "1.11.1",
     68
     69        // Define a local copy of jQuery
     70        jQuery = function( selector, context ) {
     71                // The jQuery object is actually just the init constructor 'enhanced'
     72                // Need init if jQuery is called (just allow error to be thrown if not included)
     73                return new jQuery.fn.init( selector, context );
     74        },
     75
     76        // Support: Android<4.1, IE<9
     77        // Make sure we trim BOM and NBSP
     78        rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
     79
     80        // Matches dashed string for camelizing
     81        rmsPrefix = /^-ms-/,
     82        rdashAlpha = /-([\da-z])/gi,
     83
     84        // Used by jQuery.camelCase as callback to replace()
     85        fcamelCase = function( all, letter ) {
     86                return letter.toUpperCase();
     87        };
     88
     89jQuery.fn = jQuery.prototype = {
     90        // The current version of jQuery being used
     91        jquery: version,
     92
     93        constructor: jQuery,
     94
     95        // Start with an empty selector
     96        selector: "",
     97
     98        // The default length of a jQuery object is 0
     99        length: 0,
     100
     101        toArray: function() {
     102                return slice.call( this );
     103        },
     104
     105        // Get the Nth element in the matched element set OR
     106        // Get the whole matched element set as a clean array
     107        get: function( num ) {
     108                return num != null ?
     109
     110                        // Return just the one element from the set
     111                        ( num < 0 ? this[ num + this.length ] : this[ num ] ) :
     112
     113                        // Return all the elements in a clean array
     114                        slice.call( this );
     115        },
     116
     117        // Take an array of elements and push it onto the stack
     118        // (returning the new matched element set)
     119        pushStack: function( elems ) {
     120
     121                // Build a new jQuery matched element set
     122                var ret = jQuery.merge( this.constructor(), elems );
     123
     124                // Add the old object onto the stack (as a reference)
     125                ret.prevObject = this;
     126                ret.context = this.context;
     127
     128                // Return the newly-formed element set
     129                return ret;
     130        },
     131
     132        // Execute a callback for every element in the matched set.
     133        // (You can seed the arguments with an array of args, but this is
     134        // only used internally.)
     135        each: function( callback, args ) {
     136                return jQuery.each( this, callback, args );
     137        },
     138
     139        map: function( callback ) {
     140                return this.pushStack( jQuery.map(this, function( elem, i ) {
     141                        return callback.call( elem, i, elem );
     142                }));
     143        },
     144
     145        slice: function() {
     146                return this.pushStack( slice.apply( this, arguments ) );
     147        },
     148
     149        first: function() {
     150                return this.eq( 0 );
     151        },
     152
     153        last: function() {
     154                return this.eq( -1 );
     155        },
     156
     157        eq: function( i ) {
     158                var len = this.length,
     159                        j = +i + ( i < 0 ? len : 0 );
     160                return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
     161        },
     162
     163        end: function() {
     164                return this.prevObject || this.constructor(null);
     165        },
     166
     167        // For internal use only.
     168        // Behaves like an Array's method, not like a jQuery method.
     169        push: push,
     170        sort: deletedIds.sort,
     171        splice: deletedIds.splice
     172};
     173
     174jQuery.extend = jQuery.fn.extend = function() {
     175        var src, copyIsArray, copy, name, options, clone,
     176                target = arguments[0] || {},
     177                i = 1,
     178                length = arguments.length,
     179                deep = false;
     180
     181        // Handle a deep copy situation
     182        if ( typeof target === "boolean" ) {
     183                deep = target;
     184
     185                // skip the boolean and the target
     186                target = arguments[ i ] || {};
     187                i++;
     188        }
     189
     190        // Handle case when target is a string or something (possible in deep copy)
     191        if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
     192                target = {};
     193        }
     194
     195        // extend jQuery itself if only one argument is passed
     196        if ( i === length ) {
     197                target = this;
     198                i--;
     199        }
     200
     201        for ( ; i < length; i++ ) {
     202                // Only deal with non-null/undefined values
     203                if ( (options = arguments[ i ]) != null ) {
     204                        // Extend the base object
     205                        for ( name in options ) {
     206                                src = target[ name ];
     207                                copy = options[ name ];
     208
     209                                // Prevent never-ending loop
     210                                if ( target === copy ) {
     211                                        continue;
     212                                }
     213
     214                                // Recurse if we're merging plain objects or arrays
     215                                if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
     216                                        if ( copyIsArray ) {
     217                                                copyIsArray = false;
     218                                                clone = src && jQuery.isArray(src) ? src : [];
     219
     220                                        } else {
     221                                                clone = src && jQuery.isPlainObject(src) ? src : {};
     222                                        }
     223
     224                                        // Never move original objects, clone them
     225                                        target[ name ] = jQuery.extend( deep, clone, copy );
     226
     227                                // Don't bring in undefined values
     228                                } else if ( copy !== undefined ) {
     229                                        target[ name ] = copy;
     230                                }
     231                        }
     232                }
     233        }
     234
     235        // Return the modified object
     236        return target;
     237};
     238
     239jQuery.extend({
     240        // Unique for each copy of jQuery on the page
     241        expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
     242
     243        // Assume jQuery is ready without the ready module
     244        isReady: true,
     245
     246        error: function( msg ) {
     247                throw new Error( msg );
     248        },
     249
     250        noop: function() {},
     251
     252        // See test/unit/core.js for details concerning isFunction.
     253        // Since version 1.3, DOM methods and functions like alert
     254        // aren't supported. They return false on IE (#2968).
     255        isFunction: function( obj ) {
     256                return jQuery.type(obj) === "function";
     257        },
     258
     259        isArray: Array.isArray || function( obj ) {
     260                return jQuery.type(obj) === "array";
     261        },
     262
     263        isWindow: function( obj ) {
     264                /* jshint eqeqeq: false */
     265                return obj != null && obj == obj.window;
     266        },
     267
     268        isNumeric: function( obj ) {
     269                // parseFloat NaNs numeric-cast false positives (null|true|false|"")
     270                // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
     271                // subtraction forces infinities to NaN
     272                return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0;
     273        },
     274
     275        isEmptyObject: function( obj ) {
     276                var name;
     277                for ( name in obj ) {
     278                        return false;
     279                }
     280                return true;
     281        },
     282
     283        isPlainObject: function( obj ) {
     284                var key;
     285
     286                // Must be an Object.
     287                // Because of IE, we also have to check the presence of the constructor property.
     288                // Make sure that DOM nodes and window objects don't pass through, as well
     289                if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
     290                        return false;
     291                }
     292
     293                try {
     294                        // Not own constructor property must be Object
     295                        if ( obj.constructor &&
     296                                !hasOwn.call(obj, "constructor") &&
     297                                !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
     298                                return false;
     299                        }
     300                } catch ( e ) {
     301                        // IE8,9 Will throw exceptions on certain host objects #9897
     302                        return false;
     303                }
     304
     305                // Support: IE<9
     306                // Handle iteration over inherited properties before own properties.
     307                if ( support.ownLast ) {
     308                        for ( key in obj ) {
     309                                return hasOwn.call( obj, key );
     310                        }
     311                }
     312
     313                // Own properties are enumerated firstly, so to speed up,
     314                // if last one is own, then all properties are own.
     315                for ( key in obj ) {}
     316
     317                return key === undefined || hasOwn.call( obj, key );
     318        },
     319
     320        type: function( obj ) {
     321                if ( obj == null ) {
     322                        return obj + "";
     323                }
     324                return typeof obj === "object" || typeof obj === "function" ?
     325                        class2type[ toString.call(obj) ] || "object" :
     326                        typeof obj;
     327        },
     328
     329        // Evaluates a script in a global context
     330        // Workarounds based on findings by Jim Driscoll
     331        // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
     332        globalEval: function( data ) {
     333                if ( data && jQuery.trim( data ) ) {
     334                        // We use execScript on Internet Explorer
     335                        // We use an anonymous function so that context is window
     336                        // rather than jQuery in Firefox
     337                        ( window.execScript || function( data ) {
     338                                window[ "eval" ].call( window, data );
     339                        } )( data );
     340                }
     341        },
     342
     343        // Convert dashed to camelCase; used by the css and data modules
     344        // Microsoft forgot to hump their vendor prefix (#9572)
     345        camelCase: function( string ) {
     346                return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
     347        },
     348
     349        nodeName: function( elem, name ) {
     350                return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
     351        },
     352
     353        // args is for internal usage only
     354        each: function( obj, callback, args ) {
     355                var value,
     356                        i = 0,
     357                        length = obj.length,
     358                        isArray = isArraylike( obj );
     359
     360                if ( args ) {
     361                        if ( isArray ) {
     362                                for ( ; i < length; i++ ) {
     363                                        value = callback.apply( obj[ i ], args );
     364
     365                                        if ( value === false ) {
     366                                                break;
     367                                        }
     368                                }
     369                        } else {
     370                                for ( i in obj ) {
     371                                        value = callback.apply( obj[ i ], args );
     372
     373                                        if ( value === false ) {
     374                                                break;
     375                                        }
     376                                }
     377                        }
     378
     379                // A special, fast, case for the most common use of each
     380                } else {
     381                        if ( isArray ) {
     382                                for ( ; i < length; i++ ) {
     383                                        value = callback.call( obj[ i ], i, obj[ i ] );
     384
     385                                        if ( value === false ) {
     386                                                break;
     387                                        }
     388                                }
     389                        } else {
     390                                for ( i in obj ) {
     391                                        value = callback.call( obj[ i ], i, obj[ i ] );
     392
     393                                        if ( value === false ) {
     394                                                break;
     395                                        }
     396                                }
     397                        }
     398                }
     399
     400                return obj;
     401        },
     402
     403        // Support: Android<4.1, IE<9
     404        trim: function( text ) {
     405                return text == null ?
     406                        "" :
     407                        ( text + "" ).replace( rtrim, "" );
     408        },
     409
     410        // results is for internal usage only
     411        makeArray: function( arr, results ) {
     412                var ret = results || [];
     413
     414                if ( arr != null ) {
     415                        if ( isArraylike( Object(arr) ) ) {
     416                                jQuery.merge( ret,
     417                                        typeof arr === "string" ?
     418                                        [ arr ] : arr
     419                                );
     420                        } else {
     421                                push.call( ret, arr );
     422                        }
     423                }
     424
     425                return ret;
     426        },
     427
     428        inArray: function( elem, arr, i ) {
     429                var len;
     430
     431                if ( arr ) {
     432                        if ( indexOf ) {
     433                                return indexOf.call( arr, elem, i );
     434                        }
     435
     436                        len = arr.length;
     437                        i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
     438
     439                        for ( ; i < len; i++ ) {
     440                                // Skip accessing in sparse arrays
     441                                if ( i in arr && arr[ i ] === elem ) {
     442                                        return i;
     443                                }
     444                        }
     445                }
     446
     447                return -1;
     448        },
     449
     450        merge: function( first, second ) {
     451                var len = +second.length,
     452                        j = 0,
     453                        i = first.length;
     454
     455                while ( j < len ) {
     456                        first[ i++ ] = second[ j++ ];
     457                }
     458
     459                // Support: IE<9
     460                // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)
     461                if ( len !== len ) {
     462                        while ( second[j] !== undefined ) {
     463                                first[ i++ ] = second[ j++ ];
     464                        }
     465                }
     466
     467                first.length = i;
     468
     469                return first;
     470        },
     471
     472        grep: function( elems, callback, invert ) {
     473                var callbackInverse,
     474                        matches = [],
     475                        i = 0,
     476                        length = elems.length,
     477                        callbackExpect = !invert;
     478
     479                // Go through the array, only saving the items
     480                // that pass the validator function
     481                for ( ; i < length; i++ ) {
     482                        callbackInverse = !callback( elems[ i ], i );
     483                        if ( callbackInverse !== callbackExpect ) {
     484                                matches.push( elems[ i ] );
     485                        }
     486                }
     487
     488                return matches;
     489        },
     490
     491        // arg is for internal usage only
     492        map: function( elems, callback, arg ) {
     493                var value,
     494                        i = 0,
     495                        length = elems.length,
     496                        isArray = isArraylike( elems ),
     497                        ret = [];
     498
     499                // Go through the array, translating each of the items to their new values
     500                if ( isArray ) {
     501                        for ( ; i < length; i++ ) {
     502                                value = callback( elems[ i ], i, arg );
     503
     504                                if ( value != null ) {
     505                                        ret.push( value );
     506                                }
     507                        }
     508
     509                // Go through every key on the object,
     510                } else {
     511                        for ( i in elems ) {
     512                                value = callback( elems[ i ], i, arg );
     513
     514                                if ( value != null ) {
     515                                        ret.push( value );
     516                                }
     517                        }
     518                }
     519
     520                // Flatten any nested arrays
     521                return concat.apply( [], ret );
     522        },
     523
     524        // A global GUID counter for objects
     525        guid: 1,
     526
     527        // Bind a function to a context, optionally partially applying any
     528        // arguments.
     529        proxy: function( fn, context ) {
     530                var args, proxy, tmp;
     531
     532                if ( typeof context === "string" ) {
     533                        tmp = fn[ context ];
     534                        context = fn;
     535                        fn = tmp;
     536                }
     537
     538                // Quick check to determine if target is callable, in the spec
     539                // this throws a TypeError, but we will just return undefined.
     540                if ( !jQuery.isFunction( fn ) ) {
     541                        return undefined;
     542                }
     543
     544                // Simulated bind
     545                args = slice.call( arguments, 2 );
     546                proxy = function() {
     547                        return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
     548                };
     549
     550                // Set the guid of unique handler to the same of original handler, so it can be removed
     551                proxy.guid = fn.guid = fn.guid || jQuery.guid++;
     552
     553                return proxy;
     554        },
     555
     556        now: function() {
     557                return +( new Date() );
     558        },
     559
     560        // jQuery.support is not used in Core but other projects attach their
     561        // properties to it so it needs to exist.
     562        support: support
     563});
     564
     565// Populate the class2type map
     566jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
     567        class2type[ "[object " + name + "]" ] = name.toLowerCase();
     568});
     569
     570function isArraylike( obj ) {
     571        var length = obj.length,
     572                type = jQuery.type( obj );
     573
     574        if ( type === "function" || jQuery.isWindow( obj ) ) {
     575                return false;
     576        }
     577
     578        if ( obj.nodeType === 1 && length ) {
     579                return true;
     580        }
     581
     582        return type === "array" || length === 0 ||
     583                typeof length === "number" && length > 0 && ( length - 1 ) in obj;
     584}
     585var Sizzle =
     586/*!
     587 * Sizzle CSS Selector Engine v1.10.19
     588 * http://sizzlejs.com/
     589 *
     590 * Copyright 2013 jQuery Foundation, Inc. and other contributors
     591 * Released under the MIT license
     592 * http://jquery.org/license
     593 *
     594 * Date: 2014-04-18
     595 */
     596(function( window ) {
     597
     598var i,
     599        support,
     600        Expr,
     601        getText,
     602        isXML,
     603        tokenize,
     604        compile,
     605        select,
     606        outermostContext,
     607        sortInput,
     608        hasDuplicate,
     609
     610        // Local document vars
     611        setDocument,
     612        document,
     613        docElem,
     614        documentIsHTML,
     615        rbuggyQSA,
     616        rbuggyMatches,
     617        matches,
     618        contains,
     619
     620        // Instance-specific data
     621        expando = "sizzle" + -(new Date()),
     622        preferredDoc = window.document,
     623        dirruns = 0,
     624        done = 0,
     625        classCache = createCache(),
     626        tokenCache = createCache(),
     627        compilerCache = createCache(),
     628        sortOrder = function( a, b ) {
     629                if ( a === b ) {
     630                        hasDuplicate = true;
     631                }
     632                return 0;
     633        },
     634
     635        // General-purpose constants
     636        strundefined = typeof undefined,
     637        MAX_NEGATIVE = 1 << 31,
     638
     639        // Instance methods
     640        hasOwn = ({}).hasOwnProperty,
     641        arr = [],
     642        pop = arr.pop,
     643        push_native = arr.push,
     644        push = arr.push,
     645        slice = arr.slice,
     646        // Use a stripped-down indexOf if we can't use a native one
     647        indexOf = arr.indexOf || function( elem ) {
     648                var i = 0,
     649                        len = this.length;
     650                for ( ; i < len; i++ ) {
     651                        if ( this[i] === elem ) {
     652                                return i;
     653                        }
     654                }
     655                return -1;
     656        },
     657
     658        booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
     659
     660        // Regular expressions
     661
     662        // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
     663        whitespace = "[\\x20\\t\\r\\n\\f]",
     664        // http://www.w3.org/TR/css3-syntax/#characters
     665        characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
     666
     667        // Loosely modeled on CSS identifier characters
     668        // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
     669        // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
     670        identifier = characterEncoding.replace( "w", "w#" ),
     671
     672        // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
     673        attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
     674                // Operator (capture 2)
     675                "*([*^$|!~]?=)" + whitespace +
     676                // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
     677                "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
     678                "*\\]",
     679
     680        pseudos = ":(" + characterEncoding + ")(?:\\((" +
     681                // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
     682                // 1. quoted (capture 3; capture 4 or capture 5)
     683                "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
     684                // 2. simple (capture 6)
     685                "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
     686                // 3. anything else (capture 2)
     687                ".*" +
     688                ")\\)|)",
     689
     690        // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
     691        rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
     692
     693        rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
     694        rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
     695
     696        rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
     697
     698        rpseudo = new RegExp( pseudos ),
     699        ridentifier = new RegExp( "^" + identifier + "$" ),
     700
     701        matchExpr = {
     702                "ID": new RegExp( "^#(" + characterEncoding + ")" ),
     703                "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
     704                "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
     705                "ATTR": new RegExp( "^" + attributes ),
     706                "PSEUDO": new RegExp( "^" + pseudos ),
     707                "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
     708                        "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
     709                        "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
     710                "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
     711                // For use in libraries implementing .is()
     712                // We use this for POS matching in `select`
     713                "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
     714                        whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
     715        },
     716
     717        rinputs = /^(?:input|select|textarea|button)$/i,
     718        rheader = /^h\d$/i,
     719
     720        rnative = /^[^{]+\{\s*\[native \w/,
     721
     722        // Easily-parseable/retrievable ID or TAG or CLASS selectors
     723        rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
     724
     725        rsibling = /[+~]/,
     726        rescape = /'|\\/g,
     727
     728        // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
     729        runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
     730        funescape = function( _, escaped, escapedWhitespace ) {
     731                var high = "0x" + escaped - 0x10000;
     732                // NaN means non-codepoint
     733                // Support: Firefox<24
     734                // Workaround erroneous numeric interpretation of +"0x"
     735                return high !== high || escapedWhitespace ?
     736                        escaped :
     737                        high < 0 ?
     738                                // BMP codepoint
     739                                String.fromCharCode( high + 0x10000 ) :
     740                                // Supplemental Plane codepoint (surrogate pair)
     741                                String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
     742        };
     743
     744// Optimize for push.apply( _, NodeList )
     745try {
     746        push.apply(
     747                (arr = slice.call( preferredDoc.childNodes )),
     748                preferredDoc.childNodes
     749        );
     750        // Support: Android<4.0
     751        // Detect silently failing push.apply
     752        arr[ preferredDoc.childNodes.length ].nodeType;
     753} catch ( e ) {
     754        push = { apply: arr.length ?
     755
     756                // Leverage slice if possible
     757                function( target, els ) {
     758                        push_native.apply( target, slice.call(els) );
     759                } :
     760
     761                // Support: IE<9
     762                // Otherwise append directly
     763                function( target, els ) {
     764                        var j = target.length,
     765                                i = 0;
     766                        // Can't trust NodeList.length
     767                        while ( (target[j++] = els[i++]) ) {}
     768                        target.length = j - 1;
     769                }
     770        };
     771}
     772
     773function Sizzle( selector, context, results, seed ) {
     774        var match, elem, m, nodeType,
     775                // QSA vars
     776                i, groups, old, nid, newContext, newSelector;
     777
     778        if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
     779                setDocument( context );
     780        }
     781
     782        context = context || document;
     783        results = results || [];
     784
     785        if ( !selector || typeof selector !== "string" ) {
     786                return results;
     787        }
     788
     789        if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
     790                return [];
     791        }
     792
     793        if ( documentIsHTML && !seed ) {
     794
     795                // Shortcuts
     796                if ( (match = rquickExpr.exec( selector )) ) {
     797                        // Speed-up: Sizzle("#ID")
     798                        if ( (m = match[1]) ) {
     799                                if ( nodeType === 9 ) {
     800                                        elem = context.getElementById( m );
     801                                        // Check parentNode to catch when Blackberry 4.6 returns
     802                                        // nodes that are no longer in the document (jQuery #6963)
     803                                        if ( elem && elem.parentNode ) {
     804                                                // Handle the case where IE, Opera, and Webkit return items
     805                                                // by name instead of ID
     806                                                if ( elem.id === m ) {
     807                                                        results.push( elem );
     808                                                        return results;
     809                                                }
     810                                        } else {
     811                                                return results;
     812                                        }
     813                                } else {
     814                                        // Context is not a document
     815                                        if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
     816                                                contains( context, elem ) && elem.id === m ) {
     817                                                results.push( elem );
     818                                                return results;
     819                                        }
     820                                }
     821
     822                        // Speed-up: Sizzle("TAG")
     823                        } else if ( match[2] ) {
     824                                push.apply( results, context.getElementsByTagName( selector ) );
     825                                return results;
     826
     827                        // Speed-up: Sizzle(".CLASS")
     828                        } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {
     829                                push.apply( results, context.getElementsByClassName( m ) );
     830                                return results;
     831                        }
     832                }
     833
     834                // QSA path
     835                if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
     836                        nid = old = expando;
     837                        newContext = context;
     838                        newSelector = nodeType === 9 && selector;
     839
     840                        // qSA works strangely on Element-rooted queries
     841                        // We can work around this by specifying an extra ID on the root
     842                        // and working up from there (Thanks to Andrew Dupont for the technique)
     843                        // IE 8 doesn't work on object elements
     844                        if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
     845                                groups = tokenize( selector );
     846
     847                                if ( (old = context.getAttribute("id")) ) {
     848                                        nid = old.replace( rescape, "\\$&" );
     849                                } else {
     850                                        context.setAttribute( "id", nid );
     851                                }
     852                                nid = "[id='" + nid + "'] ";
     853
     854                                i = groups.length;
     855                                while ( i-- ) {
     856                                        groups[i] = nid + toSelector( groups[i] );
     857                                }
     858                                newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
     859                                newSelector = groups.join(",");
     860                        }
     861
     862                        if ( newSelector ) {
     863                                try {
     864                                        push.apply( results,
     865                                                newContext.querySelectorAll( newSelector )
     866                                        );
     867                                        return results;
     868                                } catch(qsaError) {
     869                                } finally {
     870                                        if ( !old ) {
     871                                                context.removeAttribute("id");
     872                                        }
     873                                }
     874                        }
     875                }
     876        }
     877
     878        // All others
     879        return select( selector.replace( rtrim, "$1" ), context, results, seed );
     880}
     881
     882/**
     883 * Create key-value caches of limited size
     884 * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
     885 *      property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
     886 *      deleting the oldest entry
     887 */
     888function createCache() {
     889        var keys = [];
     890
     891        function cache( key, value ) {
     892                // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
     893                if ( keys.push( key + " " ) > Expr.cacheLength ) {
     894                        // Only keep the most recent entries
     895                        delete cache[ keys.shift() ];
     896                }
     897                return (cache[ key + " " ] = value);
     898        }
     899        return cache;
     900}
     901
     902/**
     903 * Mark a function for special use by Sizzle
     904 * @param {Function} fn The function to mark
     905 */
     906function markFunction( fn ) {
     907        fn[ expando ] = true;
     908        return fn;
     909}
     910
     911/**
     912 * Support testing using an element
     913 * @param {Function} fn Passed the created div and expects a boolean result
     914 */
     915function assert( fn ) {
     916        var div = document.createElement("div");
     917
     918        try {
     919                return !!fn( div );
     920        } catch (e) {
     921                return false;
     922        } finally {
     923                // Remove from its parent by default
     924                if ( div.parentNode ) {
     925                        div.parentNode.removeChild( div );
     926                }
     927                // release memory in IE
     928                div = null;
     929        }
     930}
     931
     932/**
     933 * Adds the same handler for all of the specified attrs
     934 * @param {String} attrs Pipe-separated list of attributes
     935 * @param {Function} handler The method that will be applied
     936 */
     937function addHandle( attrs, handler ) {
     938        var arr = attrs.split("|"),
     939                i = attrs.length;
     940
     941        while ( i-- ) {
     942                Expr.attrHandle[ arr[i] ] = handler;
     943        }
     944}
     945
     946/**
     947 * Checks document order of two siblings
     948 * @param {Element} a
     949 * @param {Element} b
     950 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
     951 */
     952function siblingCheck( a, b ) {
     953        var cur = b && a,
     954                diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
     955                        ( ~b.sourceIndex || MAX_NEGATIVE ) -
     956                        ( ~a.sourceIndex || MAX_NEGATIVE );
     957
     958        // Use IE sourceIndex if available on both nodes
     959        if ( diff ) {
     960                return diff;
     961        }
     962
     963        // Check if b follows a
     964        if ( cur ) {
     965                while ( (cur = cur.nextSibling) ) {
     966                        if ( cur === b ) {
     967                                return -1;
     968                        }
     969                }
     970        }
     971
     972        return a ? 1 : -1;
     973}
     974
     975/**
     976 * Returns a function to use in pseudos for input types
     977 * @param {String} type
     978 */
     979function createInputPseudo( type ) {
     980        return function( elem ) {
     981                var name = elem.nodeName.toLowerCase();
     982                return name === "input" && elem.type === type;
     983        };
     984}
     985
     986/**
     987 * Returns a function to use in pseudos for buttons
     988 * @param {String} type
     989 */
     990function createButtonPseudo( type ) {
     991        return function( elem ) {
     992                var name = elem.nodeName.toLowerCase();
     993                return (name === "input" || name === "button") && elem.type === type;
     994        };
     995}
     996
     997/**
     998 * Returns a function to use in pseudos for positionals
     999 * @param {Function} fn
     1000 */
     1001function createPositionalPseudo( fn ) {
     1002        return markFunction(function( argument ) {
     1003                argument = +argument;
     1004                return markFunction(function( seed, matches ) {
     1005                        var j,
     1006                                matchIndexes = fn( [], seed.length, argument ),
     1007                                i = matchIndexes.length;
     1008
     1009                        // Match elements found at the specified indexes
     1010                        while ( i-- ) {
     1011                                if ( seed[ (j = matchIndexes[i]) ] ) {
     1012                                        seed[j] = !(matches[j] = seed[j]);
     1013                                }
     1014                        }
     1015                });
     1016        });
     1017}
     1018
     1019/**
     1020 * Checks a node for validity as a Sizzle context
     1021 * @param {Element|Object=} context
     1022 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
     1023 */
     1024function testContext( context ) {
     1025        return context && typeof context.getElementsByTagName !== strundefined && context;
     1026}
     1027
     1028// Expose support vars for convenience
     1029support = Sizzle.support = {};
     1030
     1031/**
     1032 * Detects XML nodes
     1033 * @param {Element|Object} elem An element or a document
     1034 * @returns {Boolean} True iff elem is a non-HTML XML node
     1035 */
     1036isXML = Sizzle.isXML = function( elem ) {
     1037        // documentElement is verified for cases where it doesn't yet exist
     1038        // (such as loading iframes in IE - #4833)
     1039        var documentElement = elem && (elem.ownerDocument || elem).documentElement;
     1040        return documentElement ? documentElement.nodeName !== "HTML" : false;
     1041};
     1042
     1043/**
     1044 * Sets document-related variables once based on the current document
     1045 * @param {Element|Object} [doc] An element or document object to use to set the document
     1046 * @returns {Object} Returns the current document
     1047 */
     1048setDocument = Sizzle.setDocument = function( node ) {
     1049        var hasCompare,
     1050                doc = node ? node.ownerDocument || node : preferredDoc,
     1051                parent = doc.defaultView;
     1052
     1053        // If no document and documentElement is available, return
     1054        if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
     1055                return document;
     1056        }
     1057
     1058        // Set our document
     1059        document = doc;
     1060        docElem = doc.documentElement;
     1061
     1062        // Support tests
     1063        documentIsHTML = !isXML( doc );
     1064
     1065        // Support: IE>8
     1066        // If iframe document is assigned to "document" variable and if iframe has been reloaded,
     1067        // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
     1068        // IE6-8 do not support the defaultView property so parent will be undefined
     1069        if ( parent && parent !== parent.top ) {
     1070                // IE11 does not have attachEvent, so all must suffer
     1071                if ( parent.addEventListener ) {
     1072                        parent.addEventListener( "unload", function() {
     1073                                setDocument();
     1074                        }, false );
     1075                } else if ( parent.attachEvent ) {
     1076                        parent.attachEvent( "onunload", function() {
     1077                                setDocument();
     1078                        });
     1079                }
     1080        }
     1081
     1082        /* Attributes
     1083        ---------------------------------------------------------------------- */
     1084
     1085        // Support: IE<8
     1086        // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)
     1087        support.attributes = assert(function( div ) {
     1088                div.className = "i";
     1089                return !div.getAttribute("className");
     1090        });
     1091
     1092        /* getElement(s)By*
     1093        ---------------------------------------------------------------------- */
     1094
     1095        // Check if getElementsByTagName("*") returns only elements
     1096        support.getElementsByTagName = assert(function( div ) {
     1097                div.appendChild( doc.createComment("") );
     1098                return !div.getElementsByTagName("*").length;
     1099        });
     1100
     1101        // Check if getElementsByClassName can be trusted
     1102        support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) {
     1103                div.innerHTML = "<div class='a'></div><div class='a i'></div>";
     1104
     1105                // Support: Safari<4
     1106                // Catch class over-caching
     1107                div.firstChild.className = "i";
     1108                // Support: Opera<10
     1109                // Catch gEBCN failure to find non-leading classes
     1110                return div.getElementsByClassName("i").length === 2;
     1111        });
     1112
     1113        // Support: IE<10
     1114        // Check if getElementById returns elements by name
     1115        // The broken getElementById methods don't pick up programatically-set names,
     1116        // so use a roundabout getElementsByName test
     1117        support.getById = assert(function( div ) {
     1118                docElem.appendChild( div ).id = expando;
     1119                return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
     1120        });
     1121
     1122        // ID find and filter
     1123        if ( support.getById ) {
     1124                Expr.find["ID"] = function( id, context ) {
     1125                        if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
     1126                                var m = context.getElementById( id );
     1127                                // Check parentNode to catch when Blackberry 4.6 returns
     1128                                // nodes that are no longer in the document #6963
     1129                                return m && m.parentNode ? [ m ] : [];
     1130                        }
     1131                };
     1132                Expr.filter["ID"] = function( id ) {
     1133                        var attrId = id.replace( runescape, funescape );
     1134                        return function( elem ) {
     1135                                return elem.getAttribute("id") === attrId;
     1136                        };
     1137                };
     1138        } else {
     1139                // Support: IE6/7
     1140                // getElementById is not reliable as a find shortcut
     1141                delete Expr.find["ID"];
     1142
     1143                Expr.filter["ID"] =  function( id ) {
     1144                        var attrId = id.replace( runescape, funescape );
     1145                        return function( elem ) {
     1146                                var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
     1147                                return node && node.value === attrId;
     1148                        };
     1149                };
     1150        }
     1151
     1152        // Tag
     1153        Expr.find["TAG"] = support.getElementsByTagName ?
     1154                function( tag, context ) {
     1155                        if ( typeof context.getElementsByTagName !== strundefined ) {
     1156                                return context.getElementsByTagName( tag );
     1157                        }
     1158                } :
     1159                function( tag, context ) {
     1160                        var elem,
     1161                                tmp = [],
     1162                                i = 0,
     1163                                results = context.getElementsByTagName( tag );
     1164
     1165                        // Filter out possible comments
     1166                        if ( tag === "*" ) {
     1167                                while ( (elem = results[i++]) ) {
     1168                                        if ( elem.nodeType === 1 ) {
     1169                                                tmp.push( elem );
     1170                                        }
     1171                                }
     1172
     1173                                return tmp;
     1174                        }
     1175                        return results;
     1176                };
     1177
     1178        // Class
     1179        Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
     1180                if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {
     1181                        return context.getElementsByClassName( className );
     1182                }
     1183        };
     1184
     1185        /* QSA/matchesSelector
     1186        ---------------------------------------------------------------------- */
     1187
     1188        // QSA and matchesSelector support
     1189
     1190        // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
     1191        rbuggyMatches = [];
     1192
     1193        // qSa(:focus) reports false when true (Chrome 21)
     1194        // We allow this because of a bug in IE8/9 that throws an error
     1195        // whenever `document.activeElement` is accessed on an iframe
     1196        // So, we allow :focus to pass through QSA all the time to avoid the IE error
     1197        // See http://bugs.jquery.com/ticket/13378
     1198        rbuggyQSA = [];
     1199
     1200        if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
     1201                // Build QSA regex
     1202                // Regex strategy adopted from Diego Perini
     1203                assert(function( div ) {
     1204                        // Select is set to empty string on purpose
     1205                        // This is to test IE's treatment of not explicitly
     1206                        // setting a boolean content attribute,
     1207                        // since its presence should be enough
     1208                        // http://bugs.jquery.com/ticket/12359
     1209                        div.innerHTML = "<select msallowclip=''><option selected=''></option></select>";
     1210
     1211                        // Support: IE8, Opera 11-12.16
     1212                        // Nothing should be selected when empty strings follow ^= or $= or *=
     1213                        // The test attribute must be unknown in Opera but "safe" for WinRT
     1214                        // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
     1215                        if ( div.querySelectorAll("[msallowclip^='']").length ) {
     1216                                rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
     1217                        }
     1218
     1219                        // Support: IE8
     1220                        // Boolean attributes and "value" are not treated correctly
     1221                        if ( !div.querySelectorAll("[selected]").length ) {
     1222                                rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
     1223                        }
     1224
     1225                        // Webkit/Opera - :checked should return selected option elements
     1226                        // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
     1227                        // IE8 throws error here and will not see later tests
     1228                        if ( !div.querySelectorAll(":checked").length ) {
     1229                                rbuggyQSA.push(":checked");
     1230                        }
     1231                });
     1232
     1233                assert(function( div ) {
     1234                        // Support: Windows 8 Native Apps
     1235                        // The type and name attributes are restricted during .innerHTML assignment
     1236                        var input = doc.createElement("input");
     1237                        input.setAttribute( "type", "hidden" );
     1238                        div.appendChild( input ).setAttribute( "name", "D" );
     1239
     1240                        // Support: IE8
     1241                        // Enforce case-sensitivity of name attribute
     1242                        if ( div.querySelectorAll("[name=d]").length ) {
     1243                                rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
     1244                        }
     1245
     1246                        // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
     1247                        // IE8 throws error here and will not see later tests
     1248                        if ( !div.querySelectorAll(":enabled").length ) {
     1249                                rbuggyQSA.push( ":enabled", ":disabled" );
     1250                        }
     1251
     1252                        // Opera 10-11 does not throw on post-comma invalid pseudos
     1253                        div.querySelectorAll("*,:x");
     1254                        rbuggyQSA.push(",.*:");
     1255                });
     1256        }
     1257
     1258        if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
     1259                docElem.webkitMatchesSelector ||
     1260                docElem.mozMatchesSelector ||
     1261                docElem.oMatchesSelector ||
     1262                docElem.msMatchesSelector) )) ) {
     1263
     1264                assert(function( div ) {
     1265                        // Check to see if it's possible to do matchesSelector
     1266                        // on a disconnected node (IE 9)
     1267                        support.disconnectedMatch = matches.call( div, "div" );
     1268
     1269                        // This should fail with an exception
     1270                        // Gecko does not error, returns false instead
     1271                        matches.call( div, "[s!='']:x" );
     1272                        rbuggyMatches.push( "!=", pseudos );
     1273                });
     1274        }
     1275
     1276        rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
     1277        rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
     1278
     1279        /* Contains
     1280        ---------------------------------------------------------------------- */
     1281        hasCompare = rnative.test( docElem.compareDocumentPosition );
     1282
     1283        // Element contains another
     1284        // Purposefully does not implement inclusive descendent
     1285        // As in, an element does not contain itself
     1286        contains = hasCompare || rnative.test( docElem.contains ) ?
     1287                function( a, b ) {
     1288                        var adown = a.nodeType === 9 ? a.documentElement : a,
     1289                                bup = b && b.parentNode;
     1290                        return a === bup || !!( bup && bup.nodeType === 1 && (
     1291                                adown.contains ?
     1292                                        adown.contains( bup ) :
     1293                                        a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
     1294                        ));
     1295                } :
     1296                function( a, b ) {
     1297                        if ( b ) {
     1298                                while ( (b = b.parentNode) ) {
     1299                                        if ( b === a ) {
     1300                                                return true;
     1301                                        }
     1302                                }
     1303                        }
     1304                        return false;
     1305                };
     1306
     1307        /* Sorting
     1308        ---------------------------------------------------------------------- */
     1309
     1310        // Document order sorting
     1311        sortOrder = hasCompare ?
     1312        function( a, b ) {
     1313
     1314                // Flag for duplicate removal
     1315                if ( a === b ) {
     1316                        hasDuplicate = true;
     1317                        return 0;
     1318                }
     1319
     1320                // Sort on method existence if only one input has compareDocumentPosition
     1321                var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
     1322                if ( compare ) {
     1323                        return compare;
     1324                }
     1325
     1326                // Calculate position if both inputs belong to the same document
     1327                compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
     1328                        a.compareDocumentPosition( b ) :
     1329
     1330                        // Otherwise we know they are disconnected
     1331                        1;
     1332
     1333                // Disconnected nodes
     1334                if ( compare & 1 ||
     1335                        (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
     1336
     1337                        // Choose the first element that is related to our preferred document
     1338                        if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
     1339                                return -1;
     1340                        }
     1341                        if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
     1342                                return 1;
     1343                        }
     1344
     1345                        // Maintain original order
     1346                        return sortInput ?
     1347                                ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
     1348                                0;
     1349                }
     1350
     1351                return compare & 4 ? -1 : 1;
     1352        } :
     1353        function( a, b ) {
     1354                // Exit early if the nodes are identical
     1355                if ( a === b ) {
     1356                        hasDuplicate = true;
     1357                        return 0;
     1358                }
     1359
     1360                var cur,
     1361                        i = 0,
     1362                        aup = a.parentNode,
     1363                        bup = b.parentNode,
     1364                        ap = [ a ],
     1365                        bp = [ b ];
     1366
     1367                // Parentless nodes are either documents or disconnected
     1368                if ( !aup || !bup ) {
     1369                        return a === doc ? -1 :
     1370                                b === doc ? 1 :
     1371                                aup ? -1 :
     1372                                bup ? 1 :
     1373                                sortInput ?
     1374                                ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
     1375                                0;
     1376
     1377                // If the nodes are siblings, we can do a quick check
     1378                } else if ( aup === bup ) {
     1379                        return siblingCheck( a, b );
     1380                }
     1381
     1382                // Otherwise we need full lists of their ancestors for comparison
     1383                cur = a;
     1384                while ( (cur = cur.parentNode) ) {
     1385                        ap.unshift( cur );
     1386                }
     1387                cur = b;
     1388                while ( (cur = cur.parentNode) ) {
     1389                        bp.unshift( cur );
     1390                }
     1391
     1392                // Walk down the tree looking for a discrepancy
     1393                while ( ap[i] === bp[i] ) {
     1394                        i++;
     1395                }
     1396
     1397                return i ?
     1398                        // Do a sibling check if the nodes have a common ancestor
     1399                        siblingCheck( ap[i], bp[i] ) :
     1400
     1401                        // Otherwise nodes in our document sort first
     1402                        ap[i] === preferredDoc ? -1 :
     1403                        bp[i] === preferredDoc ? 1 :
     1404                        0;
     1405        };
     1406
     1407        return doc;
     1408};
     1409
     1410Sizzle.matches = function( expr, elements ) {
     1411        return Sizzle( expr, null, null, elements );
     1412};
     1413
     1414Sizzle.matchesSelector = function( elem, expr ) {
     1415        // Set document vars if needed
     1416        if ( ( elem.ownerDocument || elem ) !== document ) {
     1417                setDocument( elem );
     1418        }
     1419
     1420        // Make sure that attribute selectors are quoted
     1421        expr = expr.replace( rattributeQuotes, "='$1']" );
     1422
     1423        if ( support.matchesSelector && documentIsHTML &&
     1424                ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
     1425                ( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
     1426
     1427                try {
     1428                        var ret = matches.call( elem, expr );
     1429
     1430                        // IE 9's matchesSelector returns false on disconnected nodes
     1431                        if ( ret || support.disconnectedMatch ||
     1432                                        // As well, disconnected nodes are said to be in a document
     1433                                        // fragment in IE 9
     1434                                        elem.document && elem.document.nodeType !== 11 ) {
     1435                                return ret;
     1436                        }
     1437                } catch(e) {}
     1438        }
     1439
     1440        return Sizzle( expr, document, null, [ elem ] ).length > 0;
     1441};
     1442
     1443Sizzle.contains = function( context, elem ) {
     1444        // Set document vars if needed
     1445        if ( ( context.ownerDocument || context ) !== document ) {
     1446                setDocument( context );
     1447        }
     1448        return contains( context, elem );
     1449};
     1450
     1451Sizzle.attr = function( elem, name ) {
     1452        // Set document vars if needed
     1453        if ( ( elem.ownerDocument || elem ) !== document ) {
     1454                setDocument( elem );
     1455        }
     1456
     1457        var fn = Expr.attrHandle[ name.toLowerCase() ],
     1458                // Don't get fooled by Object.prototype properties (jQuery #13807)
     1459                val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
     1460                        fn( elem, name, !documentIsHTML ) :
     1461                        undefined;
     1462
     1463        return val !== undefined ?
     1464                val :
     1465                support.attributes || !documentIsHTML ?
     1466                        elem.getAttribute( name ) :
     1467                        (val = elem.getAttributeNode(name)) && val.specified ?
     1468                                val.value :
     1469                                null;
     1470};
     1471
     1472Sizzle.error = function( msg ) {
     1473        throw new Error( "Syntax error, unrecognized expression: " + msg );
     1474};
     1475
     1476/**
     1477 * Document sorting and removing duplicates
     1478 * @param {ArrayLike} results
     1479 */
     1480Sizzle.uniqueSort = function( results ) {
     1481        var elem,
     1482                duplicates = [],
     1483                j = 0,
     1484                i = 0;
     1485
     1486        // Unless we *know* we can detect duplicates, assume their presence
     1487        hasDuplicate = !support.detectDuplicates;
     1488        sortInput = !support.sortStable && results.slice( 0 );
     1489        results.sort( sortOrder );
     1490
     1491        if ( hasDuplicate ) {
     1492                while ( (elem = results[i++]) ) {
     1493                        if ( elem === results[ i ] ) {
     1494                                j = duplicates.push( i );
     1495                        }
     1496                }
     1497                while ( j-- ) {
     1498                        results.splice( duplicates[ j ], 1 );
     1499                }
     1500        }
     1501
     1502        // Clear input after sorting to release objects
     1503        // See https://github.com/jquery/sizzle/pull/225
     1504        sortInput = null;
     1505
     1506        return results;
     1507};
     1508
     1509/**
     1510 * Utility function for retrieving the text value of an array of DOM nodes
     1511 * @param {Array|Element} elem
     1512 */
     1513getText = Sizzle.getText = function( elem ) {
     1514        var node,
     1515                ret = "",
     1516                i = 0,
     1517                nodeType = elem.nodeType;
     1518
     1519        if ( !nodeType ) {
     1520                // If no nodeType, this is expected to be an array
     1521                while ( (node = elem[i++]) ) {
     1522                        // Do not traverse comment nodes
     1523                        ret += getText( node );
     1524                }
     1525        } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
     1526                // Use textContent for elements
     1527                // innerText usage removed for consistency of new lines (jQuery #11153)
     1528                if ( typeof elem.textContent === "string" ) {
     1529                        return elem.textContent;
     1530                } else {
     1531                        // Traverse its children
     1532                        for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
     1533                                ret += getText( elem );
     1534                        }
     1535                }
     1536        } else if ( nodeType === 3 || nodeType === 4 ) {
     1537                return elem.nodeValue;
     1538        }
     1539        // Do not include comment or processing instruction nodes
     1540
     1541        return ret;
     1542};
     1543
     1544Expr = Sizzle.selectors = {
     1545
     1546        // Can be adjusted by the user
     1547        cacheLength: 50,
     1548
     1549        createPseudo: markFunction,
     1550
     1551        match: matchExpr,
     1552
     1553        attrHandle: {},
     1554
     1555        find: {},
     1556
     1557        relative: {
     1558                ">": { dir: "parentNode", first: true },
     1559                " ": { dir: "parentNode" },
     1560                "+": { dir: "previousSibling", first: true },
     1561                "~": { dir: "previousSibling" }
     1562        },
     1563
     1564        preFilter: {
     1565                "ATTR": function( match ) {
     1566                        match[1] = match[1].replace( runescape, funescape );
     1567
     1568                        // Move the given value to match[3] whether quoted or unquoted
     1569                        match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
     1570
     1571                        if ( match[2] === "~=" ) {
     1572                                match[3] = " " + match[3] + " ";
     1573                        }
     1574
     1575                        return match.slice( 0, 4 );
     1576                },
     1577
     1578                "CHILD": function( match ) {
     1579                        /* matches from matchExpr["CHILD"]
     1580                                1 type (only|nth|...)
     1581                                2 what (child|of-type)
     1582                                3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
     1583                                4 xn-component of xn+y argument ([+-]?\d*n|)
     1584                                5 sign of xn-component
     1585                                6 x of xn-component
     1586                                7 sign of y-component
     1587                                8 y of y-component
     1588                        */
     1589                        match[1] = match[1].toLowerCase();
     1590
     1591                        if ( match[1].slice( 0, 3 ) === "nth" ) {
     1592                                // nth-* requires argument
     1593                                if ( !match[3] ) {
     1594                                        Sizzle.error( match[0] );
     1595                                }
     1596
     1597                                // numeric x and y parameters for Expr.filter.CHILD
     1598                                // remember that false/true cast respectively to 0/1
     1599                                match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
     1600                                match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
     1601
     1602                        // other types prohibit arguments
     1603                        } else if ( match[3] ) {
     1604                                Sizzle.error( match[0] );
     1605                        }
     1606
     1607                        return match;
     1608                },
     1609
     1610                "PSEUDO": function( match ) {
     1611                        var excess,
     1612                                unquoted = !match[6] && match[2];
     1613
     1614                        if ( matchExpr["CHILD"].test( match[0] ) ) {
     1615                                return null;
     1616                        }
     1617
     1618                        // Accept quoted arguments as-is
     1619                        if ( match[3] ) {
     1620                                match[2] = match[4] || match[5] || "";
     1621
     1622                        // Strip excess characters from unquoted arguments
     1623                        } else if ( unquoted && rpseudo.test( unquoted ) &&
     1624                                // Get excess from tokenize (recursively)
     1625                                (excess = tokenize( unquoted, true )) &&
     1626                                // advance to the next closing parenthesis
     1627                                (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
     1628
     1629                                // excess is a negative index
     1630                                match[0] = match[0].slice( 0, excess );
     1631                                match[2] = unquoted.slice( 0, excess );
     1632                        }
     1633
     1634                        // Return only captures needed by the pseudo filter method (type and argument)
     1635                        return match.slice( 0, 3 );
     1636                }
     1637        },
     1638
     1639        filter: {
     1640
     1641                "TAG": function( nodeNameSelector ) {
     1642                        var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
     1643                        return nodeNameSelector === "*" ?
     1644                                function() { return true; } :
     1645                                function( elem ) {
     1646                                        return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
     1647                                };
     1648                },
     1649
     1650                "CLASS": function( className ) {
     1651                        var pattern = classCache[ className + " " ];
     1652
     1653                        return pattern ||
     1654                                (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
     1655                                classCache( className, function( elem ) {
     1656                                        return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );
     1657                                });
     1658                },
     1659
     1660                "ATTR": function( name, operator, check ) {
     1661                        return function( elem ) {
     1662                                var result = Sizzle.attr( elem, name );
     1663
     1664                                if ( result == null ) {
     1665                                        return operator === "!=";
     1666                                }
     1667                                if ( !operator ) {
     1668                                        return true;
     1669                                }
     1670
     1671                                result += "";
     1672
     1673                                return operator === "=" ? result === check :
     1674                                        operator === "!=" ? result !== check :
     1675                                        operator === "^=" ? check && result.indexOf( check ) === 0 :
     1676                                        operator === "*=" ? check && result.indexOf( check ) > -1 :
     1677                                        operator === "$=" ? check && result.slice( -check.length ) === check :
     1678                                        operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
     1679                                        operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
     1680                                        false;
     1681                        };
     1682                },
     1683
     1684                "CHILD": function( type, what, argument, first, last ) {
     1685                        var simple = type.slice( 0, 3 ) !== "nth",
     1686                                forward = type.slice( -4 ) !== "last",
     1687                                ofType = what === "of-type";
     1688
     1689                        return first === 1 && last === 0 ?
     1690
     1691                                // Shortcut for :nth-*(n)
     1692                                function( elem ) {
     1693                                        return !!elem.parentNode;
     1694                                } :
     1695
     1696                                function( elem, context, xml ) {
     1697                                        var cache, outerCache, node, diff, nodeIndex, start,
     1698                                                dir = simple !== forward ? "nextSibling" : "previousSibling",
     1699                                                parent = elem.parentNode,
     1700                                                name = ofType && elem.nodeName.toLowerCase(),
     1701                                                useCache = !xml && !ofType;
     1702
     1703                                        if ( parent ) {
     1704
     1705                                                // :(first|last|only)-(child|of-type)
     1706                                                if ( simple ) {
     1707                                                        while ( dir ) {
     1708                                                                node = elem;
     1709                                                                while ( (node = node[ dir ]) ) {
     1710                                                                        if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
     1711                                                                                return false;
     1712                                                                        }
     1713                                                                }
     1714                                                                // Reverse direction for :only-* (if we haven't yet done so)
     1715                                                                start = dir = type === "only" && !start && "nextSibling";
     1716                                                        }
     1717                                                        return true;
     1718                                                }
     1719
     1720                                                start = [ forward ? parent.firstChild : parent.lastChild ];
     1721
     1722                                                // non-xml :nth-child(...) stores cache data on `parent`
     1723                                                if ( forward && useCache ) {
     1724                                                        // Seek `elem` from a previously-cached index
     1725                                                        outerCache = parent[ expando ] || (parent[ expando ] = {});
     1726                                                        cache = outerCache[ type ] || [];
     1727                                                        nodeIndex = cache[0] === dirruns && cache[1];
     1728                                                        diff = cache[0] === dirruns && cache[2];
     1729                                                        node = nodeIndex && parent.childNodes[ nodeIndex ];
     1730
     1731                                                        while ( (node = ++nodeIndex && node && node[ dir ] ||
     1732
     1733                                                                // Fallback to seeking `elem` from the start
     1734                                                                (diff = nodeIndex = 0) || start.pop()) ) {
     1735
     1736                                                                // When found, cache indexes on `parent` and break
     1737                                                                if ( node.nodeType === 1 && ++diff && node === elem ) {
     1738                                                                        outerCache[ type ] = [ dirruns, nodeIndex, diff ];
     1739                                                                        break;
     1740                                                                }
     1741                                                        }
     1742
     1743                                                // Use previously-cached element index if available
     1744                                                } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
     1745                                                        diff = cache[1];
     1746
     1747                                                // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
     1748                                                } else {
     1749                                                        // Use the same loop as above to seek `elem` from the start
     1750                                                        while ( (node = ++nodeIndex && node && node[ dir ] ||
     1751                                                                (diff = nodeIndex = 0) || start.pop()) ) {
     1752
     1753                                                                if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
     1754                                                                        // Cache the index of each encountered element
     1755                                                                        if ( useCache ) {
     1756                                                                                (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
     1757                                                                        }
     1758
     1759                                                                        if ( node === elem ) {
     1760                                                                                break;
     1761                                                                        }
     1762                                                                }
     1763                                                        }
     1764                                                }
     1765
     1766                                                // Incorporate the offset, then check against cycle size
     1767                                                diff -= last;
     1768                                                return diff === first || ( diff % first === 0 && diff / first >= 0 );
     1769                                        }
     1770                                };
     1771                },
     1772
     1773                "PSEUDO": function( pseudo, argument ) {
     1774                        // pseudo-class names are case-insensitive
     1775                        // http://www.w3.org/TR/selectors/#pseudo-classes
     1776                        // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
     1777                        // Remember that setFilters inherits from pseudos
     1778                        var args,
     1779                                fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
     1780                                        Sizzle.error( "unsupported pseudo: " + pseudo );
     1781
     1782                        // The user may use createPseudo to indicate that
     1783                        // arguments are needed to create the filter function
     1784                        // just as Sizzle does
     1785                        if ( fn[ expando ] ) {
     1786                                return fn( argument );
     1787                        }
     1788
     1789                        // But maintain support for old signatures
     1790                        if ( fn.length > 1 ) {
     1791                                args = [ pseudo, pseudo, "", argument ];
     1792                                return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
     1793                                        markFunction(function( seed, matches ) {
     1794                                                var idx,
     1795                                                        matched = fn( seed, argument ),
     1796                                                        i = matched.length;
     1797                                                while ( i-- ) {
     1798                                                        idx = indexOf.call( seed, matched[i] );
     1799                                                        seed[ idx ] = !( matches[ idx ] = matched[i] );
     1800                                                }
     1801                                        }) :
     1802                                        function( elem ) {
     1803                                                return fn( elem, 0, args );
     1804                                        };
     1805                        }
     1806
     1807                        return fn;
     1808                }
     1809        },
     1810
     1811        pseudos: {
     1812                // Potentially complex pseudos
     1813                "not": markFunction(function( selector ) {
     1814                        // Trim the selector passed to compile
     1815                        // to avoid treating leading and trailing
     1816                        // spaces as combinators
     1817                        var input = [],
     1818                                results = [],
     1819                                matcher = compile( selector.replace( rtrim, "$1" ) );
     1820
     1821                        return matcher[ expando ] ?
     1822                                markFunction(function( seed, matches, context, xml ) {
     1823                                        var elem,
     1824                                                unmatched = matcher( seed, null, xml, [] ),
     1825                                                i = seed.length;
     1826
     1827                                        // Match elements unmatched by `matcher`
     1828                                        while ( i-- ) {
     1829                                                if ( (elem = unmatched[i]) ) {
     1830                                                        seed[i] = !(matches[i] = elem);
     1831                                                }
     1832                                        }
     1833                                }) :
     1834                                function( elem, context, xml ) {
     1835                                        input[0] = elem;
     1836                                        matcher( input, null, xml, results );
     1837                                        return !results.pop();
     1838                                };
     1839                }),
     1840
     1841                "has": markFunction(function( selector ) {
     1842                        return function( elem ) {
     1843                                return Sizzle( selector, elem ).length > 0;
     1844                        };
     1845                }),
     1846
     1847                "contains": markFunction(function( text ) {
     1848                        return function( elem ) {
     1849                                return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
     1850                        };
     1851                }),
     1852
     1853                // "Whether an element is represented by a :lang() selector
     1854                // is based solely on the element's language value
     1855                // being equal to the identifier C,
     1856                // or beginning with the identifier C immediately followed by "-".
     1857                // The matching of C against the element's language value is performed case-insensitively.
     1858                // The identifier C does not have to be a valid language name."
     1859                // http://www.w3.org/TR/selectors/#lang-pseudo
     1860                "lang": markFunction( function( lang ) {
     1861                        // lang value must be a valid identifier
     1862                        if ( !ridentifier.test(lang || "") ) {
     1863                                Sizzle.error( "unsupported lang: " + lang );
     1864                        }
     1865                        lang = lang.replace( runescape, funescape ).toLowerCase();
     1866                        return function( elem ) {
     1867                                var elemLang;
     1868                                do {
     1869                                        if ( (elemLang = documentIsHTML ?
     1870                                                elem.lang :
     1871                                                elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
     1872
     1873                                                elemLang = elemLang.toLowerCase();
     1874                                                return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
     1875                                        }
     1876                                } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
     1877                                return false;
     1878                        };
     1879                }),
     1880
     1881                // Miscellaneous
     1882                "target": function( elem ) {
     1883                        var hash = window.location && window.location.hash;
     1884                        return hash && hash.slice( 1 ) === elem.id;
     1885                },
     1886
     1887                "root": function( elem ) {
     1888                        return elem === docElem;
     1889                },
     1890
     1891                "focus": function( elem ) {
     1892                        return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
     1893                },
     1894
     1895                // Boolean properties
     1896                "enabled": function( elem ) {
     1897                        return elem.disabled === false;
     1898                },
     1899
     1900                "disabled": function( elem ) {
     1901                        return elem.disabled === true;
     1902                },
     1903
     1904                "checked": function( elem ) {
     1905                        // In CSS3, :checked should return both checked and selected elements
     1906                        // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
     1907                        var nodeName = elem.nodeName.toLowerCase();
     1908                        return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
     1909                },
     1910
     1911                "selected": function( elem ) {
     1912                        // Accessing this property makes selected-by-default
     1913                        // options in Safari work properly
     1914                        if ( elem.parentNode ) {
     1915                                elem.parentNode.selectedIndex;
     1916                        }
     1917
     1918                        return elem.selected === true;
     1919                },
     1920
     1921                // Contents
     1922                "empty": function( elem ) {
     1923                        // http://www.w3.org/TR/selectors/#empty-pseudo
     1924                        // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
     1925                        //   but not by others (comment: 8; processing instruction: 7; etc.)
     1926                        // nodeType < 6 works because attributes (2) do not appear as children
     1927                        for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
     1928                                if ( elem.nodeType < 6 ) {
     1929                                        return false;
     1930                                }
     1931                        }
     1932                        return true;
     1933                },
     1934
     1935                "parent": function( elem ) {
     1936                        return !Expr.pseudos["empty"]( elem );
     1937                },
     1938
     1939                // Element/input types
     1940                "header": function( elem ) {
     1941                        return rheader.test( elem.nodeName );
     1942                },
     1943
     1944                "input": function( elem ) {
     1945                        return rinputs.test( elem.nodeName );
     1946                },
     1947
     1948                "button": function( elem ) {
     1949                        var name = elem.nodeName.toLowerCase();
     1950                        return name === "input" && elem.type === "button" || name === "button";
     1951                },
     1952
     1953                "text": function( elem ) {
     1954                        var attr;
     1955                        return elem.nodeName.toLowerCase() === "input" &&
     1956                                elem.type === "text" &&
     1957
     1958                                // Support: IE<8
     1959                                // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
     1960                                ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
     1961                },
     1962
     1963                // Position-in-collection
     1964                "first": createPositionalPseudo(function() {
     1965                        return [ 0 ];
     1966                }),
     1967
     1968                "last": createPositionalPseudo(function( matchIndexes, length ) {
     1969                        return [ length - 1 ];
     1970                }),
     1971
     1972                "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
     1973                        return [ argument < 0 ? argument + length : argument ];
     1974                }),
     1975
     1976                "even": createPositionalPseudo(function( matchIndexes, length ) {
     1977                        var i = 0;
     1978                        for ( ; i < length; i += 2 ) {
     1979                                matchIndexes.push( i );
     1980                        }
     1981                        return matchIndexes;
     1982                }),
     1983
     1984                "odd": createPositionalPseudo(function( matchIndexes, length ) {
     1985                        var i = 1;
     1986                        for ( ; i < length; i += 2 ) {
     1987                                matchIndexes.push( i );
     1988                        }
     1989                        return matchIndexes;
     1990                }),
     1991
     1992                "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
     1993                        var i = argument < 0 ? argument + length : argument;
     1994                        for ( ; --i >= 0; ) {
     1995                                matchIndexes.push( i );
     1996                        }
     1997                        return matchIndexes;
     1998                }),
     1999
     2000                "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
     2001                        var i = argument < 0 ? argument + length : argument;
     2002                        for ( ; ++i < length; ) {
     2003                                matchIndexes.push( i );
     2004                        }
     2005                        return matchIndexes;
     2006                })
     2007        }
     2008};
     2009
     2010Expr.pseudos["nth"] = Expr.pseudos["eq"];
     2011
     2012// Add button/input type pseudos
     2013for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
     2014        Expr.pseudos[ i ] = createInputPseudo( i );
     2015}
     2016for ( i in { submit: true, reset: true } ) {
     2017        Expr.pseudos[ i ] = createButtonPseudo( i );
     2018}
     2019
     2020// Easy API for creating new setFilters
     2021function setFilters() {}
     2022setFilters.prototype = Expr.filters = Expr.pseudos;
     2023Expr.setFilters = new setFilters();
     2024
     2025tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
     2026        var matched, match, tokens, type,
     2027                soFar, groups, preFilters,
     2028                cached = tokenCache[ selector + " " ];
     2029
     2030        if ( cached ) {
     2031                return parseOnly ? 0 : cached.slice( 0 );
     2032        }
     2033
     2034        soFar = selector;
     2035        groups = [];
     2036        preFilters = Expr.preFilter;
     2037
     2038        while ( soFar ) {
     2039
     2040                // Comma and first run
     2041                if ( !matched || (match = rcomma.exec( soFar )) ) {
     2042                        if ( match ) {
     2043                                // Don't consume trailing commas as valid
     2044                                soFar = soFar.slice( match[0].length ) || soFar;
     2045                        }
     2046                        groups.push( (tokens = []) );
     2047                }
     2048
     2049                matched = false;
     2050
     2051                // Combinators
     2052                if ( (match = rcombinators.exec( soFar )) ) {
     2053                        matched = match.shift();
     2054                        tokens.push({
     2055                                value: matched,
     2056                                // Cast descendant combinators to space
     2057                                type: match[0].replace( rtrim, " " )
     2058                        });
     2059                        soFar = soFar.slice( matched.length );
     2060                }
     2061
     2062                // Filters
     2063                for ( type in Expr.filter ) {
     2064                        if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
     2065                                (match = preFilters[ type ]( match ))) ) {
     2066                                matched = match.shift();
     2067                                tokens.push({
     2068                                        value: matched,
     2069                                        type: type,
     2070                                        matches: match
     2071                                });
     2072                                soFar = soFar.slice( matched.length );
     2073                        }
     2074                }
     2075
     2076                if ( !matched ) {
     2077                        break;
     2078                }
     2079        }
     2080
     2081        // Return the length of the invalid excess
     2082        // if we're just parsing
     2083        // Otherwise, throw an error or return tokens
     2084        return parseOnly ?
     2085                soFar.length :
     2086                soFar ?
     2087                        Sizzle.error( selector ) :
     2088                        // Cache the tokens
     2089                        tokenCache( selector, groups ).slice( 0 );
     2090};
     2091
     2092function toSelector( tokens ) {
     2093        var i = 0,
     2094                len = tokens.length,
     2095                selector = "";
     2096        for ( ; i < len; i++ ) {
     2097                selector += tokens[i].value;
     2098        }
     2099        return selector;
     2100}
     2101
     2102function addCombinator( matcher, combinator, base ) {
     2103        var dir = combinator.dir,
     2104                checkNonElements = base && dir === "parentNode",
     2105                doneName = done++;
     2106
     2107        return combinator.first ?
     2108                // Check against closest ancestor/preceding element
     2109                function( elem, context, xml ) {
     2110                        while ( (elem = elem[ dir ]) ) {
     2111                                if ( elem.nodeType === 1 || checkNonElements ) {
     2112                                        return matcher( elem, context, xml );
     2113                                }
     2114                        }
     2115                } :
     2116
     2117                // Check against all ancestor/preceding elements
     2118                function( elem, context, xml ) {
     2119                        var oldCache, outerCache,
     2120                                newCache = [ dirruns, doneName ];
     2121
     2122                        // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
     2123                        if ( xml ) {
     2124                                while ( (elem = elem[ dir ]) ) {
     2125                                        if ( elem.nodeType === 1 || checkNonElements ) {
     2126                                                if ( matcher( elem, context, xml ) ) {
     2127                                                        return true;
     2128                                                }
     2129                                        }
     2130                                }
     2131                        } else {
     2132                                while ( (elem = elem[ dir ]) ) {
     2133                                        if ( elem.nodeType === 1 || checkNonElements ) {
     2134                                                outerCache = elem[ expando ] || (elem[ expando ] = {});
     2135                                                if ( (oldCache = outerCache[ dir ]) &&
     2136                                                        oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
     2137
     2138                                                        // Assign to newCache so results back-propagate to previous elements
     2139                                                        return (newCache[ 2 ] = oldCache[ 2 ]);
     2140                                                } else {
     2141                                                        // Reuse newcache so results back-propagate to previous elements
     2142                                                        outerCache[ dir ] = newCache;
     2143
     2144                                                        // A match means we're done; a fail means we have to keep checking
     2145                                                        if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
     2146                                                                return true;
     2147                                                        }
     2148                                                }
     2149                                        }
     2150                                }
     2151                        }
     2152                };
     2153}
     2154
     2155function elementMatcher( matchers ) {
     2156        return matchers.length > 1 ?
     2157                function( elem, context, xml ) {
     2158                        var i = matchers.length;
     2159                        while ( i-- ) {
     2160                                if ( !matchers[i]( elem, context, xml ) ) {
     2161                                        return false;
     2162                                }
     2163                        }
     2164                        return true;
     2165                } :
     2166                matchers[0];
     2167}
     2168
     2169function multipleContexts( selector, contexts, results ) {
     2170        var i = 0,
     2171                len = contexts.length;
     2172        for ( ; i < len; i++ ) {
     2173                Sizzle( selector, contexts[i], results );
     2174        }
     2175        return results;
     2176}
     2177
     2178function condense( unmatched, map, filter, context, xml ) {
     2179        var elem,
     2180                newUnmatched = [],
     2181                i = 0,
     2182                len = unmatched.length,
     2183                mapped = map != null;
     2184
     2185        for ( ; i < len; i++ ) {
     2186                if ( (elem = unmatched[i]) ) {
     2187                        if ( !filter || filter( elem, context, xml ) ) {
     2188                                newUnmatched.push( elem );
     2189                                if ( mapped ) {
     2190                                        map.push( i );
     2191                                }
     2192                        }
     2193                }
     2194        }
     2195
     2196        return newUnmatched;
     2197}
     2198
     2199function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
     2200        if ( postFilter && !postFilter[ expando ] ) {
     2201                postFilter = setMatcher( postFilter );
     2202        }
     2203        if ( postFinder && !postFinder[ expando ] ) {
     2204                postFinder = setMatcher( postFinder, postSelector );
     2205        }
     2206        return markFunction(function( seed, results, context, xml ) {
     2207                var temp, i, elem,
     2208                        preMap = [],
     2209                        postMap = [],
     2210                        preexisting = results.length,
     2211
     2212                        // Get initial elements from seed or context
     2213                        elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
     2214
     2215                        // Prefilter to get matcher input, preserving a map for seed-results synchronization
     2216                        matcherIn = preFilter && ( seed || !selector ) ?
     2217                                condense( elems, preMap, preFilter, context, xml ) :
     2218                                elems,
     2219
     2220                        matcherOut = matcher ?
     2221                                // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
     2222                                postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
     2223
     2224                                        // ...intermediate processing is necessary
     2225                                        [] :
     2226
     2227                                        // ...otherwise use results directly
     2228                                        results :
     2229                                matcherIn;
     2230
     2231                // Find primary matches
     2232                if ( matcher ) {
     2233                        matcher( matcherIn, matcherOut, context, xml );
     2234                }
     2235
     2236                // Apply postFilter
     2237                if ( postFilter ) {
     2238                        temp = condense( matcherOut, postMap );
     2239                        postFilter( temp, [], context, xml );
     2240
     2241                        // Un-match failing elements by moving them back to matcherIn
     2242                        i = temp.length;
     2243                        while ( i-- ) {
     2244                                if ( (elem = temp[i]) ) {
     2245                                        matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
     2246                                }
     2247                        }
     2248                }
     2249
     2250                if ( seed ) {
     2251                        if ( postFinder || preFilter ) {
     2252                                if ( postFinder ) {
     2253                                        // Get the final matcherOut by condensing this intermediate into postFinder contexts
     2254                                        temp = [];
     2255                                        i = matcherOut.length;
     2256                                        while ( i-- ) {
     2257                                                if ( (elem = matcherOut[i]) ) {
     2258                                                        // Restore matcherIn since elem is not yet a final match
     2259                                                        temp.push( (matcherIn[i] = elem) );
     2260                                                }
     2261                                        }
     2262                                        postFinder( null, (matcherOut = []), temp, xml );
     2263                                }
     2264
     2265                                // Move matched elements from seed to results to keep them synchronized
     2266                                i = matcherOut.length;
     2267                                while ( i-- ) {
     2268                                        if ( (elem = matcherOut[i]) &&
     2269                                                (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
     2270
     2271                                                seed[temp] = !(results[temp] = elem);
     2272                                        }
     2273                                }
     2274                        }
     2275
     2276                // Add elements to results, through postFinder if defined
     2277                } else {
     2278                        matcherOut = condense(
     2279                                matcherOut === results ?
     2280                                        matcherOut.splice( preexisting, matcherOut.length ) :
     2281                                        matcherOut
     2282                        );
     2283                        if ( postFinder ) {
     2284                                postFinder( null, results, matcherOut, xml );
     2285                        } else {
     2286                                push.apply( results, matcherOut );
     2287                        }
     2288                }
     2289        });
     2290}
     2291
     2292function matcherFromTokens( tokens ) {
     2293        var checkContext, matcher, j,
     2294                len = tokens.length,
     2295                leadingRelative = Expr.relative[ tokens[0].type ],
     2296                implicitRelative = leadingRelative || Expr.relative[" "],
     2297                i = leadingRelative ? 1 : 0,
     2298
     2299                // The foundational matcher ensures that elements are reachable from top-level context(s)
     2300                matchContext = addCombinator( function( elem ) {
     2301                        return elem === checkContext;
     2302                }, implicitRelative, true ),
     2303                matchAnyContext = addCombinator( function( elem ) {
     2304                        return indexOf.call( checkContext, elem ) > -1;
     2305                }, implicitRelative, true ),
     2306                matchers = [ function( elem, context, xml ) {
     2307                        return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
     2308                                (checkContext = context).nodeType ?
     2309                                        matchContext( elem, context, xml ) :
     2310                                        matchAnyContext( elem, context, xml ) );
     2311                } ];
     2312
     2313        for ( ; i < len; i++ ) {
     2314                if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
     2315                        matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
     2316                } else {
     2317                        matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
     2318
     2319                        // Return special upon seeing a positional matcher
     2320                        if ( matcher[ expando ] ) {
     2321                                // Find the next relative operator (if any) for proper handling
     2322                                j = ++i;
     2323                                for ( ; j < len; j++ ) {
     2324                                        if ( Expr.relative[ tokens[j].type ] ) {
     2325                                                break;
     2326                                        }
     2327                                }
     2328                                return setMatcher(
     2329                                        i > 1 && elementMatcher( matchers ),
     2330                                        i > 1 && toSelector(
     2331                                                // If the preceding token was a descendant combinator, insert an implicit any-element `*`
     2332                                                tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
     2333                                        ).replace( rtrim, "$1" ),
     2334                                        matcher,
     2335                                        i < j && matcherFromTokens( tokens.slice( i, j ) ),
     2336                                        j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
     2337                                        j < len && toSelector( tokens )
     2338                                );
     2339                        }
     2340                        matchers.push( matcher );
     2341                }
     2342        }
     2343
     2344        return elementMatcher( matchers );
     2345}
     2346
     2347function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
     2348        var bySet = setMatchers.length > 0,
     2349                byElement = elementMatchers.length > 0,
     2350                superMatcher = function( seed, context, xml, results, outermost ) {
     2351                        var elem, j, matcher,
     2352                                matchedCount = 0,
     2353                                i = "0",
     2354                                unmatched = seed && [],
     2355                                setMatched = [],
     2356                                contextBackup = outermostContext,
     2357                                // We must always have either seed elements or outermost context
     2358                                elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
     2359                                // Use integer dirruns iff this is the outermost matcher
     2360                                dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
     2361                                len = elems.length;
     2362
     2363                        if ( outermost ) {
     2364                                outermostContext = context !== document && context;
     2365                        }
     2366
     2367                        // Add elements passing elementMatchers directly to results
     2368                        // Keep `i` a string if there are no elements so `matchedCount` will be "00" below
     2369                        // Support: IE<9, Safari
     2370                        // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
     2371                        for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
     2372                                if ( byElement && elem ) {
     2373                                        j = 0;
     2374                                        while ( (matcher = elementMatchers[j++]) ) {
     2375                                                if ( matcher( elem, context, xml ) ) {
     2376                                                        results.push( elem );
     2377                                                        break;
     2378                                                }
     2379                                        }
     2380                                        if ( outermost ) {
     2381                                                dirruns = dirrunsUnique;
     2382                                        }
     2383                                }
     2384
     2385                                // Track unmatched elements for set filters
     2386                                if ( bySet ) {
     2387                                        // They will have gone through all possible matchers
     2388                                        if ( (elem = !matcher && elem) ) {
     2389                                                matchedCount--;
     2390                                        }
     2391
     2392                                        // Lengthen the array for every element, matched or not
     2393                                        if ( seed ) {
     2394                                                unmatched.push( elem );
     2395                                        }
     2396                                }
     2397                        }
     2398
     2399                        // Apply set filters to unmatched elements
     2400                        matchedCount += i;
     2401                        if ( bySet && i !== matchedCount ) {
     2402                                j = 0;
     2403                                while ( (matcher = setMatchers[j++]) ) {
     2404                                        matcher( unmatched, setMatched, context, xml );
     2405                                }
     2406
     2407                                if ( seed ) {
     2408                                        // Reintegrate element matches to eliminate the need for sorting
     2409                                        if ( matchedCount > 0 ) {
     2410                                                while ( i-- ) {
     2411                                                        if ( !(unmatched[i] || setMatched[i]) ) {
     2412                                                                setMatched[i] = pop.call( results );
     2413                                                        }
     2414                                                }
     2415                                        }
     2416
     2417                                        // Discard index placeholder values to get only actual matches
     2418                                        setMatched = condense( setMatched );
     2419                                }
     2420
     2421                                // Add matches to results
     2422                                push.apply( results, setMatched );
     2423
     2424                                // Seedless set matches succeeding multiple successful matchers stipulate sorting
     2425                                if ( outermost && !seed && setMatched.length > 0 &&
     2426                                        ( matchedCount + setMatchers.length ) > 1 ) {
     2427
     2428                                        Sizzle.uniqueSort( results );
     2429                                }
     2430                        }
     2431
     2432                        // Override manipulation of globals by nested matchers
     2433                        if ( outermost ) {
     2434                                dirruns = dirrunsUnique;
     2435                                outermostContext = contextBackup;
     2436                        }
     2437
     2438                        return unmatched;
     2439                };
     2440
     2441        return bySet ?
     2442                markFunction( superMatcher ) :
     2443                superMatcher;
     2444}
     2445
     2446compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
     2447        var i,
     2448                setMatchers = [],
     2449                elementMatchers = [],
     2450                cached = compilerCache[ selector + " " ];
     2451
     2452        if ( !cached ) {
     2453                // Generate a function of recursive functions that can be used to check each element
     2454                if ( !match ) {
     2455                        match = tokenize( selector );
     2456                }
     2457                i = match.length;
     2458                while ( i-- ) {
     2459                        cached = matcherFromTokens( match[i] );
     2460                        if ( cached[ expando ] ) {
     2461                                setMatchers.push( cached );
     2462                        } else {
     2463                                elementMatchers.push( cached );
     2464                        }
     2465                }
     2466
     2467                // Cache the compiled function
     2468                cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
     2469
     2470                // Save selector and tokenization
     2471                cached.selector = selector;
     2472        }
     2473        return cached;
     2474};
     2475
     2476/**
     2477 * A low-level selection function that works with Sizzle's compiled
     2478 *  selector functions
     2479 * @param {String|Function} selector A selector or a pre-compiled
     2480 *  selector function built with Sizzle.compile
     2481 * @param {Element} context
     2482 * @param {Array} [results]
     2483 * @param {Array} [seed] A set of elements to match against
     2484 */
     2485select = Sizzle.select = function( selector, context, results, seed ) {
     2486        var i, tokens, token, type, find,
     2487                compiled = typeof selector === "function" && selector,
     2488                match = !seed && tokenize( (selector = compiled.selector || selector) );
     2489
     2490        results = results || [];
     2491
     2492        // Try to minimize operations if there is no seed and only one group
     2493        if ( match.length === 1 ) {
     2494
     2495                // Take a shortcut and set the context if the root selector is an ID
     2496                tokens = match[0] = match[0].slice( 0 );
     2497                if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
     2498                                support.getById && context.nodeType === 9 && documentIsHTML &&
     2499                                Expr.relative[ tokens[1].type ] ) {
     2500
     2501                        context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
     2502                        if ( !context ) {
     2503                                return results;
     2504
     2505                        // Precompiled matchers will still verify ancestry, so step up a level
     2506                        } else if ( compiled ) {
     2507                                context = context.parentNode;
     2508                        }
     2509
     2510                        selector = selector.slice( tokens.shift().value.length );
     2511                }
     2512
     2513                // Fetch a seed set for right-to-left matching
     2514                i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
     2515                while ( i-- ) {
     2516                        token = tokens[i];
     2517
     2518                        // Abort if we hit a combinator
     2519                        if ( Expr.relative[ (type = token.type) ] ) {
     2520                                break;
     2521                        }
     2522                        if ( (find = Expr.find[ type ]) ) {
     2523                                // Search, expanding context for leading sibling combinators
     2524                                if ( (seed = find(
     2525                                        token.matches[0].replace( runescape, funescape ),
     2526                                        rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
     2527                                )) ) {
     2528
     2529                                        // If seed is empty or no tokens remain, we can return early
     2530                                        tokens.splice( i, 1 );
     2531                                        selector = seed.length && toSelector( tokens );
     2532                                        if ( !selector ) {
     2533                                                push.apply( results, seed );
     2534                                                return results;
     2535                                        }
     2536
     2537                                        break;
     2538                                }
     2539                        }
     2540                }
     2541        }
     2542
     2543        // Compile and execute a filtering function if one is not provided
     2544        // Provide `match` to avoid retokenization if we modified the selector above
     2545        ( compiled || compile( selector, match ) )(
     2546                seed,
     2547                context,
     2548                !documentIsHTML,
     2549                results,
     2550                rsibling.test( selector ) && testContext( context.parentNode ) || context
     2551        );
     2552        return results;
     2553};
     2554
     2555// One-time assignments
     2556
     2557// Sort stability
     2558support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
     2559
     2560// Support: Chrome<14
     2561// Always assume duplicates if they aren't passed to the comparison function
     2562support.detectDuplicates = !!hasDuplicate;
     2563
     2564// Initialize against the default document
     2565setDocument();
     2566
     2567// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
     2568// Detached nodes confoundingly follow *each other*
     2569support.sortDetached = assert(function( div1 ) {
     2570        // Should return 1, but returns 4 (following)
     2571        return div1.compareDocumentPosition( document.createElement("div") ) & 1;
     2572});
     2573
     2574// Support: IE<8
     2575// Prevent attribute/property "interpolation"
     2576// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
     2577if ( !assert(function( div ) {
     2578        div.innerHTML = "<a href='#'></a>";
     2579        return div.firstChild.getAttribute("href") === "#" ;
     2580}) ) {
     2581        addHandle( "type|href|height|width", function( elem, name, isXML ) {
     2582                if ( !isXML ) {
     2583                        return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
     2584                }
     2585        });
     2586}
     2587
     2588// Support: IE<9
     2589// Use defaultValue in place of getAttribute("value")
     2590if ( !support.attributes || !assert(function( div ) {
     2591        div.innerHTML = "<input/>";
     2592        div.firstChild.setAttribute( "value", "" );
     2593        return div.firstChild.getAttribute( "value" ) === "";
     2594}) ) {
     2595        addHandle( "value", function( elem, name, isXML ) {
     2596                if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
     2597                        return elem.defaultValue;
     2598                }
     2599        });
     2600}
     2601
     2602// Support: IE<9
     2603// Use getAttributeNode to fetch booleans when getAttribute lies
     2604if ( !assert(function( div ) {
     2605        return div.getAttribute("disabled") == null;
     2606}) ) {
     2607        addHandle( booleans, function( elem, name, isXML ) {
     2608                var val;
     2609                if ( !isXML ) {
     2610                        return elem[ name ] === true ? name.toLowerCase() :
     2611                                        (val = elem.getAttributeNode( name )) && val.specified ?
     2612                                        val.value :
     2613                                null;
     2614                }
     2615        });
     2616}
     2617
     2618return Sizzle;
     2619
     2620})( window );
     2621
     2622
     2623
     2624jQuery.find = Sizzle;
     2625jQuery.expr = Sizzle.selectors;
     2626jQuery.expr[":"] = jQuery.expr.pseudos;
     2627jQuery.unique = Sizzle.uniqueSort;
     2628jQuery.text = Sizzle.getText;
     2629jQuery.isXMLDoc = Sizzle.isXML;
     2630jQuery.contains = Sizzle.contains;
     2631
     2632
     2633
     2634var rneedsContext = jQuery.expr.match.needsContext;
     2635
     2636var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
     2637
     2638
     2639
     2640var risSimple = /^.[^:#\[\.,]*$/;
     2641
     2642// Implement the identical functionality for filter and not
     2643function winnow( elements, qualifier, not ) {
     2644        if ( jQuery.isFunction( qualifier ) ) {
     2645                return jQuery.grep( elements, function( elem, i ) {
     2646                        /* jshint -W018 */
     2647                        return !!qualifier.call( elem, i, elem ) !== not;
     2648                });
     2649
     2650        }
     2651
     2652        if ( qualifier.nodeType ) {
     2653                return jQuery.grep( elements, function( elem ) {
     2654                        return ( elem === qualifier ) !== not;
     2655                });
     2656
     2657        }
     2658
     2659        if ( typeof qualifier === "string" ) {
     2660                if ( risSimple.test( qualifier ) ) {
     2661                        return jQuery.filter( qualifier, elements, not );
     2662                }
     2663
     2664                qualifier = jQuery.filter( qualifier, elements );
     2665        }
     2666
     2667        return jQuery.grep( elements, function( elem ) {
     2668                return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;
     2669        });
     2670}
     2671
     2672jQuery.filter = function( expr, elems, not ) {
     2673        var elem = elems[ 0 ];
     2674
     2675        if ( not ) {
     2676                expr = ":not(" + expr + ")";
     2677        }
     2678
     2679        return elems.length === 1 && elem.nodeType === 1 ?
     2680                jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
     2681                jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
     2682                        return elem.nodeType === 1;
     2683                }));
     2684};
     2685
     2686jQuery.fn.extend({
     2687        find: function( selector ) {
     2688                var i,
     2689                        ret = [],
     2690                        self = this,
     2691                        len = self.length;
     2692
     2693                if ( typeof selector !== "string" ) {
     2694                        return this.pushStack( jQuery( selector ).filter(function() {
     2695                                for ( i = 0; i < len; i++ ) {
     2696                                        if ( jQuery.contains( self[ i ], this ) ) {
     2697                                                return true;
     2698                                        }
     2699                                }
     2700                        }) );
     2701                }
     2702
     2703                for ( i = 0; i < len; i++ ) {
     2704                        jQuery.find( selector, self[ i ], ret );
     2705                }
     2706
     2707                // Needed because $( selector, context ) becomes $( context ).find( selector )
     2708                ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
     2709                ret.selector = this.selector ? this.selector + " " + selector : selector;
     2710                return ret;
     2711        },
     2712        filter: function( selector ) {
     2713                return this.pushStack( winnow(this, selector || [], false) );
     2714        },
     2715        not: function( selector ) {
     2716                return this.pushStack( winnow(this, selector || [], true) );
     2717        },
     2718        is: function( selector ) {
     2719                return !!winnow(
     2720                        this,
     2721
     2722                        // If this is a positional/relative selector, check membership in the returned set
     2723                        // so $("p:first").is("p:last") won't return true for a doc with two "p".
     2724                        typeof selector === "string" && rneedsContext.test( selector ) ?
     2725                                jQuery( selector ) :
     2726                                selector || [],
     2727                        false
     2728                ).length;
     2729        }
     2730});
     2731
     2732
     2733// Initialize a jQuery object
     2734
     2735
     2736// A central reference to the root jQuery(document)
     2737var rootjQuery,
     2738
     2739        // Use the correct document accordingly with window argument (sandbox)
     2740        document = window.document,
     2741
     2742        // A simple way to check for HTML strings
     2743        // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
     2744        // Strict HTML recognition (#11290: must start with <)
     2745        rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
     2746
     2747        init = jQuery.fn.init = function( selector, context ) {
     2748                var match, elem;
     2749
     2750                // HANDLE: $(""), $(null), $(undefined), $(false)
     2751                if ( !selector ) {
     2752                        return this;
     2753                }
     2754
     2755                // Handle HTML strings
     2756                if ( typeof selector === "string" ) {
     2757                        if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
     2758                                // Assume that strings that start and end with <> are HTML and skip the regex check
     2759                                match = [ null, selector, null ];
     2760
     2761                        } else {
     2762                                match = rquickExpr.exec( selector );
     2763                        }
     2764
     2765                        // Match html or make sure no context is specified for #id
     2766                        if ( match && (match[1] || !context) ) {
     2767
     2768                                // HANDLE: $(html) -> $(array)
     2769                                if ( match[1] ) {
     2770                                        context = context instanceof jQuery ? context[0] : context;
     2771
     2772                                        // scripts is true for back-compat
     2773                                        // Intentionally let the error be thrown if parseHTML is not present
     2774                                        jQuery.merge( this, jQuery.parseHTML(
     2775                                                match[1],
     2776                                                context && context.nodeType ? context.ownerDocument || context : document,
     2777                                                true
     2778                                        ) );
     2779
     2780                                        // HANDLE: $(html, props)
     2781                                        if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
     2782                                                for ( match in context ) {
     2783                                                        // Properties of context are called as methods if possible
     2784                                                        if ( jQuery.isFunction( this[ match ] ) ) {
     2785                                                                this[ match ]( context[ match ] );
     2786
     2787                                                        // ...and otherwise set as attributes
     2788                                                        } else {
     2789                                                                this.attr( match, context[ match ] );
     2790                                                        }
     2791                                                }
     2792                                        }
     2793
     2794                                        return this;
     2795
     2796                                // HANDLE: $(#id)
     2797                                } else {
     2798                                        elem = document.getElementById( match[2] );
     2799
     2800                                        // Check parentNode to catch when Blackberry 4.6 returns
     2801                                        // nodes that are no longer in the document #6963
     2802                                        if ( elem && elem.parentNode ) {
     2803                                                // Handle the case where IE and Opera return items
     2804                                                // by name instead of ID
     2805                                                if ( elem.id !== match[2] ) {
     2806                                                        return rootjQuery.find( selector );
     2807                                                }
     2808
     2809                                                // Otherwise, we inject the element directly into the jQuery object
     2810                                                this.length = 1;
     2811                                                this[0] = elem;
     2812                                        }
     2813
     2814                                        this.context = document;
     2815                                        this.selector = selector;
     2816                                        return this;
     2817                                }
     2818
     2819                        // HANDLE: $(expr, $(...))
     2820                        } else if ( !context || context.jquery ) {
     2821                                return ( context || rootjQuery ).find( selector );
     2822
     2823                        // HANDLE: $(expr, context)
     2824                        // (which is just equivalent to: $(context).find(expr)
     2825                        } else {
     2826                                return this.constructor( context ).find( selector );
     2827                        }
     2828
     2829                // HANDLE: $(DOMElement)
     2830                } else if ( selector.nodeType ) {
     2831                        this.context = this[0] = selector;
     2832                        this.length = 1;
     2833                        return this;
     2834
     2835                // HANDLE: $(function)
     2836                // Shortcut for document ready
     2837                } else if ( jQuery.isFunction( selector ) ) {
     2838                        return typeof rootjQuery.ready !== "undefined" ?
     2839                                rootjQuery.ready( selector ) :
     2840                                // Execute immediately if ready is not present
     2841                                selector( jQuery );
     2842                }
     2843
     2844                if ( selector.selector !== undefined ) {
     2845                        this.selector = selector.selector;
     2846                        this.context = selector.context;
     2847                }
     2848
     2849                return jQuery.makeArray( selector, this );
     2850        };
     2851
     2852// Give the init function the jQuery prototype for later instantiation
     2853init.prototype = jQuery.fn;
     2854
     2855// Initialize central reference
     2856rootjQuery = jQuery( document );
     2857
     2858
     2859var rparentsprev = /^(?:parents|prev(?:Until|All))/,
     2860        // methods guaranteed to produce a unique set when starting from a unique set
     2861        guaranteedUnique = {
     2862                children: true,
     2863                contents: true,
     2864                next: true,
     2865                prev: true
     2866        };
     2867
     2868jQuery.extend({
     2869        dir: function( elem, dir, until ) {
     2870                var matched = [],
     2871                        cur = elem[ dir ];
     2872
     2873                while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
     2874                        if ( cur.nodeType === 1 ) {
     2875                                matched.push( cur );
     2876                        }
     2877                        cur = cur[dir];
     2878                }
     2879                return matched;
     2880        },
     2881
     2882        sibling: function( n, elem ) {
     2883                var r = [];
     2884
     2885                for ( ; n; n = n.nextSibling ) {
     2886                        if ( n.nodeType === 1 && n !== elem ) {
     2887                                r.push( n );
     2888                        }
     2889                }
     2890
     2891                return r;
     2892        }
     2893});
     2894
     2895jQuery.fn.extend({
     2896        has: function( target ) {
     2897                var i,
     2898                        targets = jQuery( target, this ),
     2899                        len = targets.length;
     2900
     2901                return this.filter(function() {
     2902                        for ( i = 0; i < len; i++ ) {
     2903                                if ( jQuery.contains( this, targets[i] ) ) {
     2904                                        return true;
     2905                                }
     2906                        }
     2907                });
     2908        },
     2909
     2910        closest: function( selectors, context ) {
     2911                var cur,
     2912                        i = 0,
     2913                        l = this.length,
     2914                        matched = [],
     2915                        pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
     2916                                jQuery( selectors, context || this.context ) :
     2917                                0;
     2918
     2919                for ( ; i < l; i++ ) {
     2920                        for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
     2921                                // Always skip document fragments
     2922                                if ( cur.nodeType < 11 && (pos ?
     2923                                        pos.index(cur) > -1 :
     2924
     2925                                        // Don't pass non-elements to Sizzle
     2926                                        cur.nodeType === 1 &&
     2927                                                jQuery.find.matchesSelector(cur, selectors)) ) {
     2928
     2929                                        matched.push( cur );
     2930                                        break;
     2931                                }
     2932                        }
     2933                }
     2934
     2935                return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
     2936        },
     2937
     2938        // Determine the position of an element within
     2939        // the matched set of elements
     2940        index: function( elem ) {
     2941
     2942                // No argument, return index in parent
     2943                if ( !elem ) {
     2944                        return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
     2945                }
     2946
     2947                // index in selector
     2948                if ( typeof elem === "string" ) {
     2949                        return jQuery.inArray( this[0], jQuery( elem ) );
     2950                }
     2951
     2952                // Locate the position of the desired element
     2953                return jQuery.inArray(
     2954                        // If it receives a jQuery object, the first element is used
     2955                        elem.jquery ? elem[0] : elem, this );
     2956        },
     2957
     2958        add: function( selector, context ) {
     2959                return this.pushStack(
     2960                        jQuery.unique(
     2961                                jQuery.merge( this.get(), jQuery( selector, context ) )
     2962                        )
     2963                );
     2964        },
     2965
     2966        addBack: function( selector ) {
     2967                return this.add( selector == null ?
     2968                        this.prevObject : this.prevObject.filter(selector)
     2969                );
     2970        }
     2971});
     2972
     2973function sibling( cur, dir ) {
     2974        do {
     2975                cur = cur[ dir ];
     2976        } while ( cur && cur.nodeType !== 1 );
     2977
     2978        return cur;
     2979}
     2980
     2981jQuery.each({
     2982        parent: function( elem ) {
     2983                var parent = elem.parentNode;
     2984                return parent && parent.nodeType !== 11 ? parent : null;
     2985        },
     2986        parents: function( elem ) {
     2987                return jQuery.dir( elem, "parentNode" );
     2988        },
     2989        parentsUntil: function( elem, i, until ) {
     2990                return jQuery.dir( elem, "parentNode", until );
     2991        },
     2992        next: function( elem ) {
     2993                return sibling( elem, "nextSibling" );
     2994        },
     2995        prev: function( elem ) {
     2996                return sibling( elem, "previousSibling" );
     2997        },
     2998        nextAll: function( elem ) {
     2999                return jQuery.dir( elem, "nextSibling" );
     3000        },
     3001        prevAll: function( elem ) {
     3002                return jQuery.dir( elem, "previousSibling" );
     3003        },
     3004        nextUntil: function( elem, i, until ) {
     3005                return jQuery.dir( elem, "nextSibling", until );
     3006        },
     3007        prevUntil: function( elem, i, until ) {
     3008                return jQuery.dir( elem, "previousSibling", until );
     3009        },
     3010        siblings: function( elem ) {
     3011                return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
     3012        },
     3013        children: function( elem ) {
     3014                return jQuery.sibling( elem.firstChild );
     3015        },
     3016        contents: function( elem ) {
     3017                return jQuery.nodeName( elem, "iframe" ) ?
     3018                        elem.contentDocument || elem.contentWindow.document :
     3019                        jQuery.merge( [], elem.childNodes );
     3020        }
     3021}, function( name, fn ) {
     3022        jQuery.fn[ name ] = function( until, selector ) {
     3023                var ret = jQuery.map( this, fn, until );
     3024
     3025                if ( name.slice( -5 ) !== "Until" ) {
     3026                        selector = until;
     3027                }
     3028
     3029                if ( selector && typeof selector === "string" ) {
     3030                        ret = jQuery.filter( selector, ret );
     3031                }
     3032
     3033                if ( this.length > 1 ) {
     3034                        // Remove duplicates
     3035                        if ( !guaranteedUnique[ name ] ) {
     3036                                ret = jQuery.unique( ret );
     3037                        }
     3038
     3039                        // Reverse order for parents* and prev-derivatives
     3040                        if ( rparentsprev.test( name ) ) {
     3041                                ret = ret.reverse();
     3042                        }
     3043                }
     3044
     3045                return this.pushStack( ret );
     3046        };
     3047});
     3048var rnotwhite = (/\S+/g);
     3049
     3050
     3051
     3052// String to Object options format cache
     3053var optionsCache = {};
     3054
     3055// Convert String-formatted options into Object-formatted ones and store in cache
     3056function createOptions( options ) {
     3057        var object = optionsCache[ options ] = {};
     3058        jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
     3059                object[ flag ] = true;
     3060        });
     3061        return object;
     3062}
     3063
     3064/*
     3065 * Create a callback list using the following parameters:
     3066 *
     3067 *      options: an optional list of space-separated options that will change how
     3068 *                      the callback list behaves or a more traditional option object
     3069 *
     3070 * By default a callback list will act like an event callback list and can be
     3071 * "fired" multiple times.
     3072 *
     3073 * Possible options:
     3074 *
     3075 *      once:                   will ensure the callback list can only be fired once (like a Deferred)
     3076 *
     3077 *      memory:                 will keep track of previous values and will call any callback added
     3078 *                                      after the list has been fired right away with the latest "memorized"
     3079 *                                      values (like a Deferred)
     3080 *
     3081 *      unique:                 will ensure a callback can only be added once (no duplicate in the list)
     3082 *
     3083 *      stopOnFalse:    interrupt callings when a callback returns false
     3084 *
     3085 */
     3086jQuery.Callbacks = function( options ) {
     3087
     3088        // Convert options from String-formatted to Object-formatted if needed
     3089        // (we check in cache first)
     3090        options = typeof options === "string" ?
     3091                ( optionsCache[ options ] || createOptions( options ) ) :
     3092                jQuery.extend( {}, options );
     3093
     3094        var // Flag to know if list is currently firing
     3095                firing,
     3096                // Last fire value (for non-forgettable lists)
     3097                memory,
     3098                // Flag to know if list was already fired
     3099                fired,
     3100                // End of the loop when firing
     3101                firingLength,
     3102                // Index of currently firing callback (modified by remove if needed)
     3103                firingIndex,
     3104                // First callback to fire (used internally by add and fireWith)
     3105                firingStart,
     3106                // Actual callback list
     3107                list = [],
     3108                // Stack of fire calls for repeatable lists
     3109                stack = !options.once && [],
     3110                // Fire callbacks
     3111                fire = function( data ) {
     3112                        memory = options.memory && data;
     3113                        fired = true;
     3114                        firingIndex = firingStart || 0;
     3115                        firingStart = 0;
     3116                        firingLength = list.length;
     3117                        firing = true;
     3118                        for ( ; list && firingIndex < firingLength; firingIndex++ ) {
     3119                                if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
     3120                                        memory = false; // To prevent further calls using add
     3121                                        break;
     3122                                }
     3123                        }
     3124                        firing = false;
     3125                        if ( list ) {
     3126                                if ( stack ) {
     3127                                        if ( stack.length ) {
     3128                                                fire( stack.shift() );
     3129                                        }
     3130                                } else if ( memory ) {
     3131                                        list = [];
     3132                                } else {
     3133                                        self.disable();
     3134                                }
     3135                        }
     3136                },
     3137                // Actual Callbacks object
     3138                self = {
     3139                        // Add a callback or a collection of callbacks to the list
     3140                        add: function() {
     3141                                if ( list ) {
     3142                                        // First, we save the current length
     3143                                        var start = list.length;
     3144                                        (function add( args ) {
     3145                                                jQuery.each( args, function( _, arg ) {
     3146                                                        var type = jQuery.type( arg );
     3147                                                        if ( type === "function" ) {
     3148                                                                if ( !options.unique || !self.has( arg ) ) {
     3149                                                                        list.push( arg );
     3150                                                                }
     3151                                                        } else if ( arg && arg.length && type !== "string" ) {
     3152                                                                // Inspect recursively
     3153                                                                add( arg );
     3154                                                        }
     3155                                                });
     3156                                        })( arguments );
     3157                                        // Do we need to add the callbacks to the
     3158                                        // current firing batch?
     3159                                        if ( firing ) {
     3160                                                firingLength = list.length;
     3161                                        // With memory, if we're not firing then
     3162                                        // we should call right away
     3163                                        } else if ( memory ) {
     3164                                                firingStart = start;
     3165                                                fire( memory );
     3166                                        }
     3167                                }
     3168                                return this;
     3169                        },
     3170                        // Remove a callback from the list
     3171                        remove: function() {
     3172                                if ( list ) {
     3173                                        jQuery.each( arguments, function( _, arg ) {
     3174                                                var index;
     3175                                                while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
     3176                                                        list.splice( index, 1 );
     3177                                                        // Handle firing indexes
     3178                                                        if ( firing ) {
     3179                                                                if ( index <= firingLength ) {
     3180                                                                        firingLength--;
     3181                                                                }
     3182                                                                if ( index <= firingIndex ) {
     3183                                                                        firingIndex--;
     3184                                                                }
     3185                                                        }
     3186                                                }
     3187                                        });
     3188                                }
     3189                                return this;
     3190                        },
     3191                        // Check if a given callback is in the list.
     3192                        // If no argument is given, return whether or not list has callbacks attached.
     3193                        has: function( fn ) {
     3194                                return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
     3195                        },
     3196                        // Remove all callbacks from the list
     3197                        empty: function() {
     3198                                list = [];
     3199                                firingLength = 0;
     3200                                return this;
     3201                        },
     3202                        // Have the list do nothing anymore
     3203                        disable: function() {
     3204                                list = stack = memory = undefined;
     3205                                return this;
     3206                        },
     3207                        // Is it disabled?
     3208                        disabled: function() {
     3209                                return !list;
     3210                        },
     3211                        // Lock the list in its current state
     3212                        lock: function() {
     3213                                stack = undefined;
     3214                                if ( !memory ) {
     3215                                        self.disable();
     3216                                }
     3217                                return this;
     3218                        },
     3219                        // Is it locked?
     3220                        locked: function() {
     3221                                return !stack;
     3222                        },
     3223                        // Call all callbacks with the given context and arguments
     3224                        fireWith: function( context, args ) {
     3225                                if ( list && ( !fired || stack ) ) {
     3226                                        args = args || [];
     3227                                        args = [ context, args.slice ? args.slice() : args ];
     3228                                        if ( firing ) {
     3229                                                stack.push( args );
     3230                                        } else {
     3231                                                fire( args );
     3232                                        }
     3233                                }
     3234                                return this;
     3235                        },
     3236                        // Call all the callbacks with the given arguments
     3237                        fire: function() {
     3238                                self.fireWith( this, arguments );
     3239                                return this;
     3240                        },
     3241                        // To know if the callbacks have already been called at least once
     3242                        fired: function() {
     3243                                return !!fired;
     3244                        }
     3245                };
     3246
     3247        return self;
     3248};
     3249
     3250
     3251jQuery.extend({
     3252
     3253        Deferred: function( func ) {
     3254                var tuples = [
     3255                                // action, add listener, listener list, final state
     3256                                [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
     3257                                [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
     3258                                [ "notify", "progress", jQuery.Callbacks("memory") ]
     3259                        ],
     3260                        state = "pending",
     3261                        promise = {
     3262                                state: function() {
     3263                                        return state;
     3264                                },
     3265                                always: function() {
     3266                                        deferred.done( arguments ).fail( arguments );
     3267                                        return this;
     3268                                },
     3269                                then: function( /* fnDone, fnFail, fnProgress */ ) {
     3270                                        var fns = arguments;
     3271                                        return jQuery.Deferred(function( newDefer ) {
     3272                                                jQuery.each( tuples, function( i, tuple ) {
     3273                                                        var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
     3274                                                        // deferred[ done | fail | progress ] for forwarding actions to newDefer
     3275                                                        deferred[ tuple[1] ](function() {
     3276                                                                var returned = fn && fn.apply( this, arguments );
     3277                                                                if ( returned && jQuery.isFunction( returned.promise ) ) {
     3278                                                                        returned.promise()
     3279                                                                                .done( newDefer.resolve )
     3280                                                                                .fail( newDefer.reject )
     3281                                                                                .progress( newDefer.notify );
     3282                                                                } else {
     3283                                                                        newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
     3284                                                                }
     3285                                                        });
     3286                                                });
     3287                                                fns = null;
     3288                                        }).promise();
     3289                                },
     3290                                // Get a promise for this deferred
     3291                                // If obj is provided, the promise aspect is added to the object
     3292                                promise: function( obj ) {
     3293                                        return obj != null ? jQuery.extend( obj, promise ) : promise;
     3294                                }
     3295                        },
     3296                        deferred = {};
     3297
     3298                // Keep pipe for back-compat
     3299                promise.pipe = promise.then;
     3300
     3301                // Add list-specific methods
     3302                jQuery.each( tuples, function( i, tuple ) {
     3303                        var list = tuple[ 2 ],
     3304                                stateString = tuple[ 3 ];
     3305
     3306                        // promise[ done | fail | progress ] = list.add
     3307                        promise[ tuple[1] ] = list.add;
     3308
     3309                        // Handle state
     3310                        if ( stateString ) {
     3311                                list.add(function() {
     3312                                        // state = [ resolved | rejected ]
     3313                                        state = stateString;
     3314
     3315                                // [ reject_list | resolve_list ].disable; progress_list.lock
     3316                                }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
     3317                        }
     3318
     3319                        // deferred[ resolve | reject | notify ]
     3320                        deferred[ tuple[0] ] = function() {
     3321                                deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
     3322                                return this;
     3323                        };
     3324                        deferred[ tuple[0] + "With" ] = list.fireWith;
     3325                });
     3326
     3327                // Make the deferred a promise
     3328                promise.promise( deferred );
     3329
     3330                // Call given func if any
     3331                if ( func ) {
     3332                        func.call( deferred, deferred );
     3333                }
     3334
     3335                // All done!
     3336                return deferred;
     3337        },
     3338
     3339        // Deferred helper
     3340        when: function( subordinate /* , ..., subordinateN */ ) {
     3341                var i = 0,
     3342                        resolveValues = slice.call( arguments ),
     3343                        length = resolveValues.length,
     3344
     3345                        // the count of uncompleted subordinates
     3346                        remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
     3347
     3348                        // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
     3349                        deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
     3350
     3351                        // Update function for both resolve and progress values
     3352                        updateFunc = function( i, contexts, values ) {
     3353                                return function( value ) {
     3354                                        contexts[ i ] = this;
     3355                                        values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
     3356                                        if ( values === progressValues ) {
     3357                                                deferred.notifyWith( contexts, values );
     3358
     3359                                        } else if ( !(--remaining) ) {
     3360                                                deferred.resolveWith( contexts, values );
     3361                                        }
     3362                                };
     3363                        },
     3364
     3365                        progressValues, progressContexts, resolveContexts;
     3366
     3367                // add listeners to Deferred subordinates; treat others as resolved
     3368                if ( length > 1 ) {
     3369                        progressValues = new Array( length );
     3370                        progressContexts = new Array( length );
     3371                        resolveContexts = new Array( length );
     3372                        for ( ; i < length; i++ ) {
     3373                                if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
     3374                                        resolveValues[ i ].promise()
     3375                                                .done( updateFunc( i, resolveContexts, resolveValues ) )
     3376                                                .fail( deferred.reject )
     3377                                                .progress( updateFunc( i, progressContexts, progressValues ) );
     3378                                } else {
     3379                                        --remaining;
     3380                                }
     3381                        }
     3382                }
     3383
     3384                // if we're not waiting on anything, resolve the master
     3385                if ( !remaining ) {
     3386                        deferred.resolveWith( resolveContexts, resolveValues );
     3387                }
     3388
     3389                return deferred.promise();
     3390        }
     3391});
     3392
     3393
     3394// The deferred used on DOM ready
     3395var readyList;
     3396
     3397jQuery.fn.ready = function( fn ) {
     3398        // Add the callback
     3399        jQuery.ready.promise().done( fn );
     3400
     3401        return this;
     3402};
     3403
     3404jQuery.extend({
     3405        // Is the DOM ready to be used? Set to true once it occurs.
     3406        isReady: false,
     3407
     3408        // A counter to track how many items to wait for before
     3409        // the ready event fires. See #6781
     3410        readyWait: 1,
     3411
     3412        // Hold (or release) the ready event
     3413        holdReady: function( hold ) {
     3414                if ( hold ) {
     3415                        jQuery.readyWait++;
     3416                } else {
     3417                        jQuery.ready( true );
     3418                }
     3419        },
     3420
     3421        // Handle when the DOM is ready
     3422        ready: function( wait ) {
     3423
     3424                // Abort if there are pending holds or we're already ready
     3425                if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
     3426                        return;
     3427                }
     3428
     3429                // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
     3430                if ( !document.body ) {
     3431                        return setTimeout( jQuery.ready );
     3432                }
     3433
     3434                // Remember that the DOM is ready
     3435                jQuery.isReady = true;
     3436
     3437                // If a normal DOM Ready event fired, decrement, and wait if need be
     3438                if ( wait !== true && --jQuery.readyWait > 0 ) {
     3439                        return;
     3440                }
     3441
     3442                // If there are functions bound, to execute
     3443                readyList.resolveWith( document, [ jQuery ] );
     3444
     3445                // Trigger any bound ready events
     3446                if ( jQuery.fn.triggerHandler ) {
     3447                        jQuery( document ).triggerHandler( "ready" );
     3448                        jQuery( document ).off( "ready" );
     3449                }
     3450        }
     3451});
     3452
     3453/**
     3454 * Clean-up method for dom ready events
     3455 */
     3456function detach() {
     3457        if ( document.addEventListener ) {
     3458                document.removeEventListener( "DOMContentLoaded", completed, false );
     3459                window.removeEventListener( "load", completed, false );
     3460
     3461        } else {
     3462                document.detachEvent( "onreadystatechange", completed );
     3463                window.detachEvent( "onload", completed );
     3464        }
     3465}
     3466
     3467/**
     3468 * The ready event handler and self cleanup method
     3469 */
     3470function completed() {
     3471        // readyState === "complete" is good enough for us to call the dom ready in oldIE
     3472        if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
     3473                detach();
     3474                jQuery.ready();
     3475        }
     3476}
     3477
     3478jQuery.ready.promise = function( obj ) {
     3479        if ( !readyList ) {
     3480
     3481                readyList = jQuery.Deferred();
     3482
     3483                // Catch cases where $(document).ready() is called after the browser event has already occurred.
     3484                // we once tried to use readyState "interactive" here, but it caused issues like the one
     3485                // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
     3486                if ( document.readyState === "complete" ) {
     3487                        // Handle it asynchronously to allow scripts the opportunity to delay ready
     3488                        setTimeout( jQuery.ready );
     3489
     3490                // Standards-based browsers support DOMContentLoaded
     3491                } else if ( document.addEventListener ) {
     3492                        // Use the handy event callback
     3493                        document.addEventListener( "DOMContentLoaded", completed, false );
     3494
     3495                        // A fallback to window.onload, that will always work
     3496                        window.addEventListener( "load", completed, false );
     3497
     3498                // If IE event model is used
     3499                } else {
     3500                        // Ensure firing before onload, maybe late but safe also for iframes
     3501                        document.attachEvent( "onreadystatechange", completed );
     3502
     3503                        // A fallback to window.onload, that will always work
     3504                        window.attachEvent( "onload", completed );
     3505
     3506                        // If IE and not a frame
     3507                        // continually check to see if the document is ready
     3508                        var top = false;
     3509
     3510                        try {
     3511                                top = window.frameElement == null && document.documentElement;
     3512                        } catch(e) {}
     3513
     3514                        if ( top && top.doScroll ) {
     3515                                (function doScrollCheck() {
     3516                                        if ( !jQuery.isReady ) {
     3517
     3518                                                try {
     3519                                                        // Use the trick by Diego Perini
     3520                                                        // http://javascript.nwbox.com/IEContentLoaded/
     3521                                                        top.doScroll("left");
     3522                                                } catch(e) {
     3523                                                        return setTimeout( doScrollCheck, 50 );
     3524                                                }
     3525
     3526                                                // detach all dom ready events
     3527                                                detach();
     3528
     3529                                                // and execute any waiting functions
     3530                                                jQuery.ready();
     3531                                        }
     3532                                })();
     3533                        }
     3534                }
     3535        }
     3536        return readyList.promise( obj );
     3537};
     3538
     3539
     3540var strundefined = typeof undefined;
     3541
     3542
     3543
     3544// Support: IE<9
     3545// Iteration over object's inherited properties before its own
     3546var i;
     3547for ( i in jQuery( support ) ) {
     3548        break;
     3549}
     3550support.ownLast = i !== "0";
     3551
     3552// Note: most support tests are defined in their respective modules.
     3553// false until the test is run
     3554support.inlineBlockNeedsLayout = false;
     3555
     3556// Execute ASAP in case we need to set body.style.zoom
     3557jQuery(function() {
     3558        // Minified: var a,b,c,d
     3559        var val, div, body, container;
     3560
     3561        body = document.getElementsByTagName( "body" )[ 0 ];
     3562        if ( !body || !body.style ) {
     3563                // Return for frameset docs that don't have a body
     3564                return;
     3565        }
     3566
     3567        // Setup
     3568        div = document.createElement( "div" );
     3569        container = document.createElement( "div" );
     3570        container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
     3571        body.appendChild( container ).appendChild( div );
     3572
     3573        if ( typeof div.style.zoom !== strundefined ) {
     3574                // Support: IE<8
     3575                // Check if natively block-level elements act like inline-block
     3576                // elements when setting their display to 'inline' and giving
     3577                // them layout
     3578                div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1";
     3579
     3580                support.inlineBlockNeedsLayout = val = div.offsetWidth === 3;
     3581                if ( val ) {
     3582                        // Prevent IE 6 from affecting layout for positioned elements #11048
     3583                        // Prevent IE from shrinking the body in IE 7 mode #12869
     3584                        // Support: IE<8
     3585                        body.style.zoom = 1;
     3586                }
     3587        }
     3588
     3589        body.removeChild( container );
     3590});
     3591
     3592
     3593
     3594
     3595(function() {
     3596        var div = document.createElement( "div" );
     3597
     3598        // Execute the test only if not already executed in another module.
     3599        if (support.deleteExpando == null) {
     3600                // Support: IE<9
     3601                support.deleteExpando = true;
     3602                try {
     3603                        delete div.test;
     3604                } catch( e ) {
     3605                        support.deleteExpando = false;
     3606                }
     3607        }
     3608
     3609        // Null elements to avoid leaks in IE.
     3610        div = null;
     3611})();
     3612
     3613
     3614/**
     3615 * Determines whether an object can have data
     3616 */
     3617jQuery.acceptData = function( elem ) {
     3618        var noData = jQuery.noData[ (elem.nodeName + " ").toLowerCase() ],
     3619                nodeType = +elem.nodeType || 1;
     3620
     3621        // Do not set data on non-element DOM nodes because it will not be cleared (#8335).
     3622        return nodeType !== 1 && nodeType !== 9 ?
     3623                false :
     3624
     3625                // Nodes accept data unless otherwise specified; rejection can be conditional
     3626                !noData || noData !== true && elem.getAttribute("classid") === noData;
     3627};
     3628
     3629
     3630var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
     3631        rmultiDash = /([A-Z])/g;
     3632
     3633function dataAttr( elem, key, data ) {
     3634        // If nothing was found internally, try to fetch any
     3635        // data from the HTML5 data-* attribute
     3636        if ( data === undefined && elem.nodeType === 1 ) {
     3637
     3638                var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
     3639
     3640                data = elem.getAttribute( name );
     3641
     3642                if ( typeof data === "string" ) {
     3643                        try {
     3644                                data = data === "true" ? true :
     3645                                        data === "false" ? false :
     3646                                        data === "null" ? null :
     3647                                        // Only convert to a number if it doesn't change the string
     3648                                        +data + "" === data ? +data :
     3649                                        rbrace.test( data ) ? jQuery.parseJSON( data ) :
     3650                                        data;
     3651                        } catch( e ) {}
     3652
     3653                        // Make sure we set the data so it isn't changed later
     3654                        jQuery.data( elem, key, data );
     3655
     3656                } else {
     3657                        data = undefined;
     3658                }
     3659        }
     3660
     3661        return data;
     3662}
     3663
     3664// checks a cache object for emptiness
     3665function isEmptyDataObject( obj ) {
     3666        var name;
     3667        for ( name in obj ) {
     3668
     3669                // if the public data object is empty, the private is still empty
     3670                if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
     3671                        continue;
     3672                }
     3673                if ( name !== "toJSON" ) {
     3674                        return false;
     3675                }
     3676        }
     3677
     3678        return true;
     3679}
     3680
     3681function internalData( elem, name, data, pvt /* Internal Use Only */ ) {
     3682        if ( !jQuery.acceptData( elem ) ) {
     3683                return;
     3684        }
     3685
     3686        var ret, thisCache,
     3687                internalKey = jQuery.expando,
     3688
     3689                // We have to handle DOM nodes and JS objects differently because IE6-7
     3690                // can't GC object references properly across the DOM-JS boundary
     3691                isNode = elem.nodeType,
     3692
     3693                // Only DOM nodes need the global jQuery cache; JS object data is
     3694                // attached directly to the object so GC can occur automatically
     3695                cache = isNode ? jQuery.cache : elem,
     3696
     3697                // Only defining an ID for JS objects if its cache already exists allows
     3698                // the code to shortcut on the same path as a DOM node with no cache
     3699                id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
     3700
     3701        // Avoid doing any more work than we need to when trying to get data on an
     3702        // object that has no data at all
     3703        if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) {
     3704                return;
     3705        }
     3706
     3707        if ( !id ) {
     3708                // Only DOM nodes need a new unique ID for each element since their data
     3709                // ends up in the global cache
     3710                if ( isNode ) {
     3711                        id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;
     3712                } else {
     3713                        id = internalKey;
     3714                }
     3715        }
     3716
     3717        if ( !cache[ id ] ) {
     3718                // Avoid exposing jQuery metadata on plain JS objects when the object
     3719                // is serialized using JSON.stringify
     3720                cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };
     3721        }
     3722
     3723        // An object can be passed to jQuery.data instead of a key/value pair; this gets
     3724        // shallow copied over onto the existing cache
     3725        if ( typeof name === "object" || typeof name === "function" ) {
     3726                if ( pvt ) {
     3727                        cache[ id ] = jQuery.extend( cache[ id ], name );
     3728                } else {
     3729                        cache[ id ].data = jQuery.extend( cache[ id ].data, name );
     3730                }
     3731        }
     3732
     3733        thisCache = cache[ id ];
     3734
     3735        // jQuery data() is stored in a separate object inside the object's internal data
     3736        // cache in order to avoid key collisions between internal data and user-defined
     3737        // data.
     3738        if ( !pvt ) {
     3739                if ( !thisCache.data ) {
     3740                        thisCache.data = {};
     3741                }
     3742
     3743                thisCache = thisCache.data;
     3744        }
     3745
     3746        if ( data !== undefined ) {
     3747                thisCache[ jQuery.camelCase( name ) ] = data;
     3748        }
     3749
     3750        // Check for both converted-to-camel and non-converted data property names
     3751        // If a data property was specified
     3752        if ( typeof name === "string" ) {
     3753
     3754                // First Try to find as-is property data
     3755                ret = thisCache[ name ];
     3756
     3757                // Test for null|undefined property data
     3758                if ( ret == null ) {
     3759
     3760                        // Try to find the camelCased property
     3761                        ret = thisCache[ jQuery.camelCase( name ) ];
     3762                }
     3763        } else {
     3764                ret = thisCache;
     3765        }
     3766
     3767        return ret;
     3768}
     3769
     3770function internalRemoveData( elem, name, pvt ) {
     3771        if ( !jQuery.acceptData( elem ) ) {
     3772                return;
     3773        }
     3774
     3775        var thisCache, i,
     3776                isNode = elem.nodeType,
     3777
     3778                // See jQuery.data for more information
     3779                cache = isNode ? jQuery.cache : elem,
     3780                id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
     3781
     3782        // If there is already no cache entry for this object, there is no
     3783        // purpose in continuing
     3784        if ( !cache[ id ] ) {
     3785                return;
     3786        }
     3787
     3788        if ( name ) {
     3789
     3790                thisCache = pvt ? cache[ id ] : cache[ id ].data;
     3791
     3792                if ( thisCache ) {
     3793
     3794                        // Support array or space separated string names for data keys
     3795                        if ( !jQuery.isArray( name ) ) {
     3796
     3797                                // try the string as a key before any manipulation
     3798                                if ( name in thisCache ) {
     3799                                        name = [ name ];
     3800                                } else {
     3801
     3802                                        // split the camel cased version by spaces unless a key with the spaces exists
     3803                                        name = jQuery.camelCase( name );
     3804                                        if ( name in thisCache ) {
     3805                                                name = [ name ];
     3806                                        } else {
     3807                                                name = name.split(" ");
     3808                                        }
     3809                                }
     3810                        } else {
     3811                                // If "name" is an array of keys...
     3812                                // When data is initially created, via ("key", "val") signature,
     3813                                // keys will be converted to camelCase.
     3814                                // Since there is no way to tell _how_ a key was added, remove
     3815                                // both plain key and camelCase key. #12786
     3816                                // This will only penalize the array argument path.
     3817                                name = name.concat( jQuery.map( name, jQuery.camelCase ) );
     3818                        }
     3819
     3820                        i = name.length;
     3821                        while ( i-- ) {
     3822                                delete thisCache[ name[i] ];
     3823                        }
     3824
     3825                        // If there is no data left in the cache, we want to continue
     3826                        // and let the cache object itself get destroyed
     3827                        if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {
     3828                                return;
     3829                        }
     3830                }
     3831        }
     3832
     3833        // See jQuery.data for more information
     3834        if ( !pvt ) {
     3835                delete cache[ id ].data;
     3836
     3837                // Don't destroy the parent cache unless the internal data object
     3838                // had been the only thing left in it
     3839                if ( !isEmptyDataObject( cache[ id ] ) ) {
     3840                        return;
     3841                }
     3842        }
     3843
     3844        // Destroy the cache
     3845        if ( isNode ) {
     3846                jQuery.cleanData( [ elem ], true );
     3847
     3848        // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
     3849        /* jshint eqeqeq: false */
     3850        } else if ( support.deleteExpando || cache != cache.window ) {
     3851                /* jshint eqeqeq: true */
     3852                delete cache[ id ];
     3853
     3854        // When all else fails, null
     3855        } else {
     3856                cache[ id ] = null;
     3857        }
     3858}
     3859
     3860jQuery.extend({
     3861        cache: {},
     3862
     3863        // The following elements (space-suffixed to avoid Object.prototype collisions)
     3864        // throw uncatchable exceptions if you attempt to set expando properties
     3865        noData: {
     3866                "applet ": true,
     3867                "embed ": true,
     3868                // ...but Flash objects (which have this classid) *can* handle expandos
     3869                "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
     3870        },
     3871
     3872        hasData: function( elem ) {
     3873                elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
     3874                return !!elem && !isEmptyDataObject( elem );
     3875        },
     3876
     3877        data: function( elem, name, data ) {
     3878                return internalData( elem, name, data );
     3879        },
     3880
     3881        removeData: function( elem, name ) {
     3882                return internalRemoveData( elem, name );
     3883        },
     3884
     3885        // For internal use only.
     3886        _data: function( elem, name, data ) {
     3887                return internalData( elem, name, data, true );
     3888        },
     3889
     3890        _removeData: function( elem, name ) {
     3891                return internalRemoveData( elem, name, true );
     3892        }
     3893});
     3894
     3895jQuery.fn.extend({
     3896        data: function( key, value ) {
     3897                var i, name, data,
     3898                        elem = this[0],
     3899                        attrs = elem && elem.attributes;
     3900
     3901                // Special expections of .data basically thwart jQuery.access,
     3902                // so implement the relevant behavior ourselves
     3903
     3904                // Gets all values
     3905                if ( key === undefined ) {
     3906                        if ( this.length ) {
     3907                                data = jQuery.data( elem );
     3908
     3909                                if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
     3910                                        i = attrs.length;
     3911                                        while ( i-- ) {
     3912
     3913                                                // Support: IE11+
     3914                                                // The attrs elements can be null (#14894)
     3915                                                if ( attrs[ i ] ) {
     3916                                                        name = attrs[ i ].name;
     3917                                                        if ( name.indexOf( "data-" ) === 0 ) {
     3918                                                                name = jQuery.camelCase( name.slice(5) );
     3919                                                                dataAttr( elem, name, data[ name ] );
     3920                                                        }
     3921                                                }
     3922                                        }
     3923                                        jQuery._data( elem, "parsedAttrs", true );
     3924                                }
     3925                        }
     3926
     3927                        return data;
     3928                }
     3929
     3930                // Sets multiple values
     3931                if ( typeof key === "object" ) {
     3932                        return this.each(function() {
     3933                                jQuery.data( this, key );
     3934                        });
     3935                }
     3936
     3937                return arguments.length > 1 ?
     3938
     3939                        // Sets one value
     3940                        this.each(function() {
     3941                                jQuery.data( this, key, value );
     3942                        }) :
     3943
     3944                        // Gets one value
     3945                        // Try to fetch any internally stored data first
     3946                        elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;
     3947        },
     3948
     3949        removeData: function( key ) {
     3950                return this.each(function() {
     3951                        jQuery.removeData( this, key );
     3952                });
     3953        }
     3954});
     3955
     3956
     3957jQuery.extend({
     3958        queue: function( elem, type, data ) {
     3959                var queue;
     3960
     3961                if ( elem ) {
     3962                        type = ( type || "fx" ) + "queue";
     3963                        queue = jQuery._data( elem, type );
     3964
     3965                        // Speed up dequeue by getting out quickly if this is just a lookup
     3966                        if ( data ) {
     3967                                if ( !queue || jQuery.isArray(data) ) {
     3968                                        queue = jQuery._data( elem, type, jQuery.makeArray(data) );
     3969                                } else {
     3970                                        queue.push( data );
     3971                                }
     3972                        }
     3973                        return queue || [];
     3974                }
     3975        },
     3976
     3977        dequeue: function( elem, type ) {
     3978                type = type || "fx";
     3979
     3980                var queue = jQuery.queue( elem, type ),
     3981                        startLength = queue.length,
     3982                        fn = queue.shift(),
     3983                        hooks = jQuery._queueHooks( elem, type ),
     3984                        next = function() {
     3985                                jQuery.dequeue( elem, type );
     3986                        };
     3987
     3988                // If the fx queue is dequeued, always remove the progress sentinel
     3989                if ( fn === "inprogress" ) {
     3990                        fn = queue.shift();
     3991                        startLength--;
     3992                }
     3993
     3994                if ( fn ) {
     3995
     3996                        // Add a progress sentinel to prevent the fx queue from being
     3997                        // automatically dequeued
     3998                        if ( type === "fx" ) {
     3999                                queue.unshift( "inprogress" );
     4000                        }
     4001
     4002                        // clear up the last queue stop function
     4003                        delete hooks.stop;
     4004                        fn.call( elem, next, hooks );
     4005                }
     4006
     4007                if ( !startLength && hooks ) {
     4008                        hooks.empty.fire();
     4009                }
     4010        },
     4011
     4012        // not intended for public consumption - generates a queueHooks object, or returns the current one
     4013        _queueHooks: function( elem, type ) {
     4014                var key = type + "queueHooks";
     4015                return jQuery._data( elem, key ) || jQuery._data( elem, key, {
     4016                        empty: jQuery.Callbacks("once memory").add(function() {
     4017                                jQuery._removeData( elem, type + "queue" );
     4018                                jQuery._removeData( elem, key );
     4019                        })
     4020                });
     4021        }
     4022});
     4023
     4024jQuery.fn.extend({
     4025        queue: function( type, data ) {
     4026                var setter = 2;
     4027
     4028                if ( typeof type !== "string" ) {
     4029                        data = type;
     4030                        type = "fx";
     4031                        setter--;
     4032                }
     4033
     4034                if ( arguments.length < setter ) {
     4035                        return jQuery.queue( this[0], type );
     4036                }
     4037
     4038                return data === undefined ?
     4039                        this :
     4040                        this.each(function() {
     4041                                var queue = jQuery.queue( this, type, data );
     4042
     4043                                // ensure a hooks for this queue
     4044                                jQuery._queueHooks( this, type );
     4045
     4046                                if ( type === "fx" && queue[0] !== "inprogress" ) {
     4047                                        jQuery.dequeue( this, type );
     4048                                }
     4049                        });
     4050        },
     4051        dequeue: function( type ) {
     4052                return this.each(function() {
     4053                        jQuery.dequeue( this, type );
     4054                });
     4055        },
     4056        clearQueue: function( type ) {
     4057                return this.queue( type || "fx", [] );
     4058        },
     4059        // Get a promise resolved when queues of a certain type
     4060        // are emptied (fx is the type by default)
     4061        promise: function( type, obj ) {
     4062                var tmp,
     4063                        count = 1,
     4064                        defer = jQuery.Deferred(),
     4065                        elements = this,
     4066                        i = this.length,
     4067                        resolve = function() {
     4068                                if ( !( --count ) ) {
     4069                                        defer.resolveWith( elements, [ elements ] );
     4070                                }
     4071                        };
     4072
     4073                if ( typeof type !== "string" ) {
     4074                        obj = type;
     4075                        type = undefined;
     4076                }
     4077                type = type || "fx";
     4078
     4079                while ( i-- ) {
     4080                        tmp = jQuery._data( elements[ i ], type + "queueHooks" );
     4081                        if ( tmp && tmp.empty ) {
     4082                                count++;
     4083                                tmp.empty.add( resolve );
     4084                        }
     4085                }
     4086                resolve();
     4087                return defer.promise( obj );
     4088        }
     4089});
     4090var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;
     4091
     4092var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
     4093
     4094var isHidden = function( elem, el ) {
     4095                // isHidden might be called from jQuery#filter function;
     4096                // in that case, element will be second argument
     4097                elem = el || elem;
     4098                return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
     4099        };
     4100
     4101
     4102
     4103// Multifunctional method to get and set values of a collection
     4104// The value/s can optionally be executed if it's a function
     4105var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
     4106        var i = 0,
     4107                length = elems.length,
     4108                bulk = key == null;
     4109
     4110        // Sets many values
     4111        if ( jQuery.type( key ) === "object" ) {
     4112                chainable = true;
     4113                for ( i in key ) {
     4114                        jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
     4115                }
     4116
     4117        // Sets one value
     4118        } else if ( value !== undefined ) {
     4119                chainable = true;
     4120
     4121                if ( !jQuery.isFunction( value ) ) {
     4122                        raw = true;
     4123                }
     4124
     4125                if ( bulk ) {
     4126                        // Bulk operations run against the entire set
     4127                        if ( raw ) {
     4128                                fn.call( elems, value );
     4129                                fn = null;
     4130
     4131                        // ...except when executing function values
     4132                        } else {
     4133                                bulk = fn;
     4134                                fn = function( elem, key, value ) {
     4135                                        return bulk.call( jQuery( elem ), value );
     4136                                };
     4137                        }
     4138                }
     4139
     4140                if ( fn ) {
     4141                        for ( ; i < length; i++ ) {
     4142                                fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
     4143                        }
     4144                }
     4145        }
     4146
     4147        return chainable ?
     4148                elems :
     4149
     4150                // Gets
     4151                bulk ?
     4152                        fn.call( elems ) :
     4153                        length ? fn( elems[0], key ) : emptyGet;
     4154};
     4155var rcheckableType = (/^(?:checkbox|radio)$/i);
     4156
     4157
     4158
     4159(function() {
     4160        // Minified: var a,b,c
     4161        var input = document.createElement( "input" ),
     4162                div = document.createElement( "div" ),
     4163                fragment = document.createDocumentFragment();
     4164
     4165        // Setup
     4166        div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
     4167
     4168        // IE strips leading whitespace when .innerHTML is used
     4169        support.leadingWhitespace = div.firstChild.nodeType === 3;
     4170
     4171        // Make sure that tbody elements aren't automatically inserted
     4172        // IE will insert them into empty tables
     4173        support.tbody = !div.getElementsByTagName( "tbody" ).length;
     4174
     4175        // Make sure that link elements get serialized correctly by innerHTML
     4176        // This requires a wrapper element in IE
     4177        support.htmlSerialize = !!div.getElementsByTagName( "link" ).length;
     4178
     4179        // Makes sure cloning an html5 element does not cause problems
     4180        // Where outerHTML is undefined, this still works
     4181        support.html5Clone =
     4182                document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav></:nav>";
     4183
     4184        // Check if a disconnected checkbox will retain its checked
     4185        // value of true after appended to the DOM (IE6/7)
     4186        input.type = "checkbox";
     4187        input.checked = true;
     4188        fragment.appendChild( input );
     4189        support.appendChecked = input.checked;
     4190
     4191        // Make sure textarea (and checkbox) defaultValue is properly cloned
     4192        // Support: IE6-IE11+
     4193        div.innerHTML = "<textarea>x</textarea>";
     4194        support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
     4195
     4196        // #11217 - WebKit loses check when the name is after the checked attribute
     4197        fragment.appendChild( div );
     4198        div.innerHTML = "<input type='radio' checked='checked' name='t'/>";
     4199
     4200        // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3
     4201        // old WebKit doesn't clone checked state correctly in fragments
     4202        support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
     4203
     4204        // Support: IE<9
     4205        // Opera does not clone events (and typeof div.attachEvent === undefined).
     4206        // IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
     4207        support.noCloneEvent = true;
     4208        if ( div.attachEvent ) {
     4209                div.attachEvent( "onclick", function() {
     4210                        support.noCloneEvent = false;
     4211                });
     4212
     4213                div.cloneNode( true ).click();
     4214        }
     4215
     4216        // Execute the test only if not already executed in another module.
     4217        if (support.deleteExpando == null) {
     4218                // Support: IE<9
     4219                support.deleteExpando = true;
     4220                try {
     4221                        delete div.test;
     4222                } catch( e ) {
     4223                        support.deleteExpando = false;
     4224                }
     4225        }
     4226})();
     4227
     4228
     4229(function() {
     4230        var i, eventName,
     4231                div = document.createElement( "div" );
     4232
     4233        // Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event)
     4234        for ( i in { submit: true, change: true, focusin: true }) {
     4235                eventName = "on" + i;
     4236
     4237                if ( !(support[ i + "Bubbles" ] = eventName in window) ) {
     4238                        // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)
     4239                        div.setAttribute( eventName, "t" );
     4240                        support[ i + "Bubbles" ] = div.attributes[ eventName ].expando === false;
     4241                }
     4242        }
     4243
     4244        // Null elements to avoid leaks in IE.
     4245        div = null;
     4246})();
     4247
     4248
     4249var rformElems = /^(?:input|select|textarea)$/i,
     4250        rkeyEvent = /^key/,
     4251        rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,
     4252        rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
     4253        rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
     4254
     4255function returnTrue() {
     4256        return true;
     4257}
     4258
     4259function returnFalse() {
     4260        return false;
     4261}
     4262
     4263function safeActiveElement() {
     4264        try {
     4265                return document.activeElement;
     4266        } catch ( err ) { }
     4267}
     4268
     4269/*
     4270 * Helper functions for managing events -- not part of the public interface.
     4271 * Props to Dean Edwards' addEvent library for many of the ideas.
     4272 */
     4273jQuery.event = {
     4274
     4275        global: {},
     4276
     4277        add: function( elem, types, handler, data, selector ) {
     4278                var tmp, events, t, handleObjIn,
     4279                        special, eventHandle, handleObj,
     4280                        handlers, type, namespaces, origType,
     4281                        elemData = jQuery._data( elem );
     4282
     4283                // Don't attach events to noData or text/comment nodes (but allow plain objects)
     4284                if ( !elemData ) {
     4285                        return;
     4286                }
     4287
     4288                // Caller can pass in an object of custom data in lieu of the handler
     4289                if ( handler.handler ) {
     4290                        handleObjIn = handler;
     4291                        handler = handleObjIn.handler;
     4292                        selector = handleObjIn.selector;
     4293                }
     4294
     4295                // Make sure that the handler has a unique ID, used to find/remove it later
     4296                if ( !handler.guid ) {
     4297                        handler.guid = jQuery.guid++;
     4298                }
     4299
     4300                // Init the element's event structure and main handler, if this is the first
     4301                if ( !(events = elemData.events) ) {
     4302                        events = elemData.events = {};
     4303                }
     4304                if ( !(eventHandle = elemData.handle) ) {
     4305                        eventHandle = elemData.handle = function( e ) {
     4306                                // Discard the second event of a jQuery.event.trigger() and
     4307                                // when an event is called after a page has unloaded
     4308                                return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ?
     4309                                        jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
     4310                                        undefined;
     4311                        };
     4312                        // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
     4313                        eventHandle.elem = elem;
     4314                }
     4315
     4316                // Handle multiple events separated by a space
     4317                types = ( types || "" ).match( rnotwhite ) || [ "" ];
     4318                t = types.length;
     4319                while ( t-- ) {
     4320                        tmp = rtypenamespace.exec( types[t] ) || [];
     4321                        type = origType = tmp[1];
     4322                        namespaces = ( tmp[2] || "" ).split( "." ).sort();
     4323
     4324                        // There *must* be a type, no attaching namespace-only handlers
     4325                        if ( !type ) {
     4326                                continue;
     4327                        }
     4328
     4329                        // If event changes its type, use the special event handlers for the changed type
     4330                        special = jQuery.event.special[ type ] || {};
     4331
     4332                        // If selector defined, determine special event api type, otherwise given type
     4333                        type = ( selector ? special.delegateType : special.bindType ) || type;
     4334
     4335                        // Update special based on newly reset type
     4336                        special = jQuery.event.special[ type ] || {};
     4337
     4338                        // handleObj is passed to all event handlers
     4339                        handleObj = jQuery.extend({
     4340                                type: type,
     4341                                origType: origType,
     4342                                data: data,
     4343                                handler: handler,
     4344                                guid: handler.guid,
     4345                                selector: selector,
     4346                                needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
     4347                                namespace: namespaces.join(".")
     4348                        }, handleObjIn );
     4349
     4350                        // Init the event handler queue if we're the first
     4351                        if ( !(handlers = events[ type ]) ) {
     4352                                handlers = events[ type ] = [];
     4353                                handlers.delegateCount = 0;
     4354
     4355                                // Only use addEventListener/attachEvent if the special events handler returns false
     4356                                if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
     4357                                        // Bind the global event handler to the element
     4358                                        if ( elem.addEventListener ) {
     4359                                                elem.addEventListener( type, eventHandle, false );
     4360
     4361                                        } else if ( elem.attachEvent ) {
     4362                                                elem.attachEvent( "on" + type, eventHandle );
     4363                                        }
     4364                                }
     4365                        }
     4366
     4367                        if ( special.add ) {
     4368                                special.add.call( elem, handleObj );
     4369
     4370                                if ( !handleObj.handler.guid ) {
     4371                                        handleObj.handler.guid = handler.guid;
     4372                                }
     4373                        }
     4374
     4375                        // Add to the element's handler list, delegates in front
     4376                        if ( selector ) {
     4377                                handlers.splice( handlers.delegateCount++, 0, handleObj );
     4378                        } else {
     4379                                handlers.push( handleObj );
     4380                        }
     4381
     4382                        // Keep track of which events have ever been used, for event optimization
     4383                        jQuery.event.global[ type ] = true;
     4384                }
     4385
     4386                // Nullify elem to prevent memory leaks in IE
     4387                elem = null;
     4388        },
     4389
     4390        // Detach an event or set of events from an element
     4391        remove: function( elem, types, handler, selector, mappedTypes ) {
     4392                var j, handleObj, tmp,
     4393                        origCount, t, events,
     4394                        special, handlers, type,
     4395                        namespaces, origType,
     4396                        elemData = jQuery.hasData( elem ) && jQuery._data( elem );
     4397
     4398                if ( !elemData || !(events = elemData.events) ) {
     4399                        return;
     4400                }
     4401
     4402                // Once for each type.namespace in types; type may be omitted
     4403                types = ( types || "" ).match( rnotwhite ) || [ "" ];
     4404                t = types.length;
     4405                while ( t-- ) {
     4406                        tmp = rtypenamespace.exec( types[t] ) || [];
     4407                        type = origType = tmp[1];
     4408                        namespaces = ( tmp[2] || "" ).split( "." ).sort();
     4409
     4410                        // Unbind all events (on this namespace, if provided) for the element
     4411                        if ( !type ) {
     4412                                for ( type in events ) {
     4413                                        jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
     4414                                }
     4415                                continue;
     4416                        }
     4417
     4418                        special = jQuery.event.special[ type ] || {};
     4419                        type = ( selector ? special.delegateType : special.bindType ) || type;
     4420                        handlers = events[ type ] || [];
     4421                        tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
     4422
     4423                        // Remove matching events
     4424                        origCount = j = handlers.length;
     4425                        while ( j-- ) {
     4426                                handleObj = handlers[ j ];
     4427
     4428                                if ( ( mappedTypes || origType === handleObj.origType ) &&
     4429                                        ( !handler || handler.guid === handleObj.guid ) &&
     4430                                        ( !tmp || tmp.test( handleObj.namespace ) ) &&
     4431                                        ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
     4432                                        handlers.splice( j, 1 );
     4433
     4434                                        if ( handleObj.selector ) {
     4435                                                handlers.delegateCount--;
     4436                                        }
     4437                                        if ( special.remove ) {
     4438                                                special.remove.call( elem, handleObj );
     4439                                        }
     4440                                }
     4441                        }
     4442
     4443                        // Remove generic event handler if we removed something and no more handlers exist
     4444                        // (avoids potential for endless recursion during removal of special event handlers)
     4445                        if ( origCount && !handlers.length ) {
     4446                                if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
     4447                                        jQuery.removeEvent( elem, type, elemData.handle );
     4448                                }
     4449
     4450                                delete events[ type ];
     4451                        }
     4452                }
     4453
     4454                // Remove the expando if it's no longer used
     4455                if ( jQuery.isEmptyObject( events ) ) {
     4456                        delete elemData.handle;
     4457
     4458                        // removeData also checks for emptiness and clears the expando if empty
     4459                        // so use it instead of delete
     4460                        jQuery._removeData( elem, "events" );
     4461                }
     4462        },
     4463
     4464        trigger: function( event, data, elem, onlyHandlers ) {
     4465                var handle, ontype, cur,
     4466                        bubbleType, special, tmp, i,
     4467                        eventPath = [ elem || document ],
     4468                        type = hasOwn.call( event, "type" ) ? event.type : event,
     4469                        namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
     4470
     4471                cur = tmp = elem = elem || document;
     4472
     4473                // Don't do events on text and comment nodes
     4474                if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
     4475                        return;
     4476                }
     4477
     4478                // focus/blur morphs to focusin/out; ensure we're not firing them right now
     4479                if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
     4480                        return;
     4481                }
     4482
     4483                if ( type.indexOf(".") >= 0 ) {
     4484                        // Namespaced trigger; create a regexp to match event type in handle()
     4485                        namespaces = type.split(".");
     4486                        type = namespaces.shift();
     4487                        namespaces.sort();
     4488                }
     4489                ontype = type.indexOf(":") < 0 && "on" + type;
     4490
     4491                // Caller can pass in a jQuery.Event object, Object, or just an event type string
     4492                event = event[ jQuery.expando ] ?
     4493                        event :
     4494                        new jQuery.Event( type, typeof event === "object" && event );
     4495
     4496                // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
     4497                event.isTrigger = onlyHandlers ? 2 : 3;
     4498                event.namespace = namespaces.join(".");
     4499                event.namespace_re = event.namespace ?
     4500                        new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
     4501                        null;
     4502
     4503                // Clean up the event in case it is being reused
     4504                event.result = undefined;
     4505                if ( !event.target ) {
     4506                        event.target = elem;
     4507                }
     4508
     4509                // Clone any incoming data and prepend the event, creating the handler arg list
     4510                data = data == null ?
     4511                        [ event ] :
     4512                        jQuery.makeArray( data, [ event ] );
     4513
     4514                // Allow special events to draw outside the lines
     4515                special = jQuery.event.special[ type ] || {};
     4516                if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
     4517                        return;
     4518                }
     4519
     4520                // Determine event propagation path in advance, per W3C events spec (#9951)
     4521                // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
     4522                if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
     4523
     4524                        bubbleType = special.delegateType || type;
     4525                        if ( !rfocusMorph.test( bubbleType + type ) ) {
     4526                                cur = cur.parentNode;
     4527                        }
     4528                        for ( ; cur; cur = cur.parentNode ) {
     4529                                eventPath.push( cur );
     4530                                tmp = cur;
     4531                        }
     4532
     4533                        // Only add window if we got to document (e.g., not plain obj or detached DOM)
     4534                        if ( tmp === (elem.ownerDocument || document) ) {
     4535                                eventPath.push( tmp.defaultView || tmp.parentWindow || window );
     4536                        }
     4537                }
     4538
     4539                // Fire handlers on the event path
     4540                i = 0;
     4541                while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
     4542
     4543                        event.type = i > 1 ?
     4544                                bubbleType :
     4545                                special.bindType || type;
     4546
     4547                        // jQuery handler
     4548                        handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
     4549                        if ( handle ) {
     4550                                handle.apply( cur, data );
     4551                        }
     4552
     4553                        // Native handler
     4554                        handle = ontype && cur[ ontype ];
     4555                        if ( handle && handle.apply && jQuery.acceptData( cur ) ) {
     4556                                event.result = handle.apply( cur, data );
     4557                                if ( event.result === false ) {
     4558                                        event.preventDefault();
     4559                                }
     4560                        }
     4561                }
     4562                event.type = type;
     4563
     4564                // If nobody prevented the default action, do it now
     4565                if ( !onlyHandlers && !event.isDefaultPrevented() ) {
     4566
     4567                        if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
     4568                                jQuery.acceptData( elem ) ) {
     4569
     4570                                // Call a native DOM method on the target with the same name name as the event.
     4571                                // Can't use an .isFunction() check here because IE6/7 fails that test.
     4572                                // Don't do default actions on window, that's where global variables be (#6170)
     4573                                if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
     4574
     4575                                        // Don't re-trigger an onFOO event when we call its FOO() method
     4576                                        tmp = elem[ ontype ];
     4577
     4578                                        if ( tmp ) {
     4579                                                elem[ ontype ] = null;
     4580                                        }
     4581
     4582                                        // Prevent re-triggering of the same event, since we already bubbled it above
     4583                                        jQuery.event.triggered = type;
     4584                                        try {
     4585                                                elem[ type ]();
     4586                                        } catch ( e ) {
     4587                                                // IE<9 dies on focus/blur to hidden element (#1486,#12518)
     4588                                                // only reproducible on winXP IE8 native, not IE9 in IE8 mode
     4589                                        }
     4590                                        jQuery.event.triggered = undefined;
     4591
     4592                                        if ( tmp ) {
     4593                                                elem[ ontype ] = tmp;
     4594                                        }
     4595                                }
     4596                        }
     4597                }
     4598
     4599                return event.result;
     4600        },
     4601
     4602        dispatch: function( event ) {
     4603
     4604                // Make a writable jQuery.Event from the native event object
     4605                event = jQuery.event.fix( event );
     4606
     4607                var i, ret, handleObj, matched, j,
     4608                        handlerQueue = [],
     4609                        args = slice.call( arguments ),
     4610                        handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
     4611                        special = jQuery.event.special[ event.type ] || {};
     4612
     4613                // Use the fix-ed jQuery.Event rather than the (read-only) native event
     4614                args[0] = event;
     4615                event.delegateTarget = this;
     4616
     4617                // Call the preDispatch hook for the mapped type, and let it bail if desired
     4618                if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
     4619                        return;
     4620                }
     4621
     4622                // Determine handlers
     4623                handlerQueue = jQuery.event.handlers.call( this, event, handlers );
     4624
     4625                // Run delegates first; they may want to stop propagation beneath us
     4626                i = 0;
     4627                while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
     4628                        event.currentTarget = matched.elem;
     4629
     4630                        j = 0;
     4631                        while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
     4632
     4633                                // Triggered event must either 1) have no namespace, or
     4634                                // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
     4635                                if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
     4636
     4637                                        event.handleObj = handleObj;
     4638                                        event.data = handleObj.data;
     4639
     4640                                        ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
     4641                                                        .apply( matched.elem, args );
     4642
     4643                                        if ( ret !== undefined ) {
     4644                                                if ( (event.result = ret) === false ) {
     4645                                                        event.preventDefault();
     4646                                                        event.stopPropagation();
     4647                                                }
     4648                                        }
     4649                                }
     4650                        }
     4651                }
     4652
     4653                // Call the postDispatch hook for the mapped type
     4654                if ( special.postDispatch ) {
     4655                        special.postDispatch.call( this, event );
     4656                }
     4657
     4658                return event.result;
     4659        },
     4660
     4661        handlers: function( event, handlers ) {
     4662                var sel, handleObj, matches, i,
     4663                        handlerQueue = [],
     4664                        delegateCount = handlers.delegateCount,
     4665                        cur = event.target;
     4666
     4667                // Find delegate handlers
     4668                // Black-hole SVG <use> instance trees (#13180)
     4669                // Avoid non-left-click bubbling in Firefox (#3861)
     4670                if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
     4671
     4672                        /* jshint eqeqeq: false */
     4673                        for ( ; cur != this; cur = cur.parentNode || this ) {
     4674                                /* jshint eqeqeq: true */
     4675
     4676                                // Don't check non-elements (#13208)
     4677                                // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
     4678                                if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {
     4679                                        matches = [];
     4680                                        for ( i = 0; i < delegateCount; i++ ) {
     4681                                                handleObj = handlers[ i ];
     4682
     4683                                                // Don't conflict with Object.prototype properties (#13203)
     4684                                                sel = handleObj.selector + " ";
     4685
     4686                                                if ( matches[ sel ] === undefined ) {
     4687                                                        matches[ sel ] = handleObj.needsContext ?
     4688                                                                jQuery( sel, this ).index( cur ) >= 0 :
     4689                                                                jQuery.find( sel, this, null, [ cur ] ).length;
     4690                                                }
     4691                                                if ( matches[ sel ] ) {
     4692                                                        matches.push( handleObj );
     4693                                                }
     4694                                        }
     4695                                        if ( matches.length ) {
     4696                                                handlerQueue.push({ elem: cur, handlers: matches });
     4697                                        }
     4698                                }
     4699                        }
     4700                }
     4701
     4702                // Add the remaining (directly-bound) handlers
     4703                if ( delegateCount < handlers.length ) {
     4704                        handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
     4705                }
     4706
     4707                return handlerQueue;
     4708        },
     4709
     4710        fix: function( event ) {
     4711                if ( event[ jQuery.expando ] ) {
     4712                        return event;
     4713                }
     4714
     4715                // Create a writable copy of the event object and normalize some properties
     4716                var i, prop, copy,
     4717                        type = event.type,
     4718                        originalEvent = event,
     4719                        fixHook = this.fixHooks[ type ];
     4720
     4721                if ( !fixHook ) {
     4722                        this.fixHooks[ type ] = fixHook =
     4723                                rmouseEvent.test( type ) ? this.mouseHooks :
     4724                                rkeyEvent.test( type ) ? this.keyHooks :
     4725                                {};
     4726                }
     4727                copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
     4728
     4729                event = new jQuery.Event( originalEvent );
     4730
     4731                i = copy.length;
     4732                while ( i-- ) {
     4733                        prop = copy[ i ];
     4734                        event[ prop ] = originalEvent[ prop ];
     4735                }
     4736
     4737                // Support: IE<9
     4738                // Fix target property (#1925)
     4739                if ( !event.target ) {
     4740                        event.target = originalEvent.srcElement || document;
     4741                }
     4742
     4743                // Support: Chrome 23+, Safari?
     4744                // Target should not be a text node (#504, #13143)
     4745                if ( event.target.nodeType === 3 ) {
     4746                        event.target = event.target.parentNode;
     4747                }
     4748
     4749                // Support: IE<9
     4750                // For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
     4751                event.metaKey = !!event.metaKey;
     4752
     4753                return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
     4754        },
     4755
     4756        // Includes some event props shared by KeyEvent and MouseEvent
     4757        props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
     4758
     4759        fixHooks: {},
     4760
     4761        keyHooks: {
     4762                props: "char charCode key keyCode".split(" "),
     4763                filter: function( event, original ) {
     4764
     4765                        // Add which for key events
     4766                        if ( event.which == null ) {
     4767                                event.which = original.charCode != null ? original.charCode : original.keyCode;
     4768                        }
     4769
     4770                        return event;
     4771                }
     4772        },
     4773
     4774        mouseHooks: {
     4775                props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
     4776                filter: function( event, original ) {
     4777                        var body, eventDoc, doc,
     4778                                button = original.button,
     4779                                fromElement = original.fromElement;
     4780
     4781                        // Calculate pageX/Y if missing and clientX/Y available
     4782                        if ( event.pageX == null && original.clientX != null ) {
     4783                                eventDoc = event.target.ownerDocument || document;
     4784                                doc = eventDoc.documentElement;
     4785                                body = eventDoc.body;
     4786
     4787                                event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
     4788                                event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
     4789                        }
     4790
     4791                        // Add relatedTarget, if necessary
     4792                        if ( !event.relatedTarget && fromElement ) {
     4793                                event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
     4794                        }
     4795
     4796                        // Add which for click: 1 === left; 2 === middle; 3 === right
     4797                        // Note: button is not normalized, so don't use it
     4798                        if ( !event.which && button !== undefined ) {
     4799                                event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
     4800                        }
     4801
     4802                        return event;
     4803                }
     4804        },
     4805
     4806        special: {
     4807                load: {
     4808                        // Prevent triggered image.load events from bubbling to window.load
     4809                        noBubble: true
     4810                },
     4811                focus: {
     4812                        // Fire native event if possible so blur/focus sequence is correct
     4813                        trigger: function() {
     4814                                if ( this !== safeActiveElement() && this.focus ) {
     4815                                        try {
     4816                                                this.focus();
     4817                                                return false;
     4818                                        } catch ( e ) {
     4819                                                // Support: IE<9
     4820                                                // If we error on focus to hidden element (#1486, #12518),
     4821                                                // let .trigger() run the handlers
     4822                                        }
     4823                                }
     4824                        },
     4825                        delegateType: "focusin"
     4826                },
     4827                blur: {
     4828                        trigger: function() {
     4829                                if ( this === safeActiveElement() && this.blur ) {
     4830                                        this.blur();
     4831                                        return false;
     4832                                }
     4833                        },
     4834                        delegateType: "focusout"
     4835                },
     4836                click: {
     4837                        // For checkbox, fire native event so checked state will be right
     4838                        trigger: function() {
     4839                                if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
     4840                                        this.click();
     4841                                        return false;
     4842                                }
     4843                        },
     4844
     4845                        // For cross-browser consistency, don't fire native .click() on links
     4846                        _default: function( event ) {
     4847                                return jQuery.nodeName( event.target, "a" );
     4848                        }
     4849                },
     4850
     4851                beforeunload: {
     4852                        postDispatch: function( event ) {
     4853
     4854                                // Support: Firefox 20+
     4855                                // Firefox doesn't alert if the returnValue field is not set.
     4856                                if ( event.result !== undefined && event.originalEvent ) {
     4857                                        event.originalEvent.returnValue = event.result;
     4858                                }
     4859                        }
     4860                }
     4861        },
     4862
     4863        simulate: function( type, elem, event, bubble ) {
     4864                // Piggyback on a donor event to simulate a different one.
     4865                // Fake originalEvent to avoid donor's stopPropagation, but if the
     4866                // simulated event prevents default then we do the same on the donor.
     4867                var e = jQuery.extend(
     4868                        new jQuery.Event(),
     4869                        event,
     4870                        {
     4871                                type: type,
     4872                                isSimulated: true,
     4873                                originalEvent: {}
     4874                        }
     4875                );
     4876                if ( bubble ) {
     4877                        jQuery.event.trigger( e, null, elem );
     4878                } else {
     4879                        jQuery.event.dispatch.call( elem, e );
     4880                }
     4881                if ( e.isDefaultPrevented() ) {
     4882                        event.preventDefault();
     4883                }
     4884        }
     4885};
     4886
     4887jQuery.removeEvent = document.removeEventListener ?
     4888        function( elem, type, handle ) {
     4889                if ( elem.removeEventListener ) {
     4890                        elem.removeEventListener( type, handle, false );
     4891                }
     4892        } :
     4893        function( elem, type, handle ) {
     4894                var name = "on" + type;
     4895
     4896                if ( elem.detachEvent ) {
     4897
     4898                        // #8545, #7054, preventing memory leaks for custom events in IE6-8
     4899                        // detachEvent needed property on element, by name of that event, to properly expose it to GC
     4900                        if ( typeof elem[ name ] === strundefined ) {
     4901                                elem[ name ] = null;
     4902                        }
     4903
     4904                        elem.detachEvent( name, handle );
     4905                }
     4906        };
     4907
     4908jQuery.Event = function( src, props ) {
     4909        // Allow instantiation without the 'new' keyword
     4910        if ( !(this instanceof jQuery.Event) ) {
     4911                return new jQuery.Event( src, props );
     4912        }
     4913
     4914        // Event object
     4915        if ( src && src.type ) {
     4916                this.originalEvent = src;
     4917                this.type = src.type;
     4918
     4919                // Events bubbling up the document may have been marked as prevented
     4920                // by a handler lower down the tree; reflect the correct value.
     4921                this.isDefaultPrevented = src.defaultPrevented ||
     4922                                src.defaultPrevented === undefined &&
     4923                                // Support: IE < 9, Android < 4.0
     4924                                src.returnValue === false ?
     4925                        returnTrue :
     4926                        returnFalse;
     4927
     4928        // Event type
     4929        } else {
     4930                this.type = src;
     4931        }
     4932
     4933        // Put explicitly provided properties onto the event object
     4934        if ( props ) {
     4935                jQuery.extend( this, props );
     4936        }
     4937
     4938        // Create a timestamp if incoming event doesn't have one
     4939        this.timeStamp = src && src.timeStamp || jQuery.now();
     4940
     4941        // Mark it as fixed
     4942        this[ jQuery.expando ] = true;
     4943};
     4944
     4945// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
     4946// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
     4947jQuery.Event.prototype = {
     4948        isDefaultPrevented: returnFalse,
     4949        isPropagationStopped: returnFalse,
     4950        isImmediatePropagationStopped: returnFalse,
     4951
     4952        preventDefault: function() {
     4953                var e = this.originalEvent;
     4954
     4955                this.isDefaultPrevented = returnTrue;
     4956                if ( !e ) {
     4957                        return;
     4958                }
     4959
     4960                // If preventDefault exists, run it on the original event
     4961                if ( e.preventDefault ) {
     4962                        e.preventDefault();
     4963
     4964                // Support: IE
     4965                // Otherwise set the returnValue property of the original event to false
     4966                } else {
     4967                        e.returnValue = false;
     4968                }
     4969        },
     4970        stopPropagation: function() {
     4971                var e = this.originalEvent;
     4972
     4973                this.isPropagationStopped = returnTrue;
     4974                if ( !e ) {
     4975                        return;
     4976                }
     4977                // If stopPropagation exists, run it on the original event
     4978                if ( e.stopPropagation ) {
     4979                        e.stopPropagation();
     4980                }
     4981
     4982                // Support: IE
     4983                // Set the cancelBubble property of the original event to true
     4984                e.cancelBubble = true;
     4985        },
     4986        stopImmediatePropagation: function() {
     4987                var e = this.originalEvent;
     4988
     4989                this.isImmediatePropagationStopped = returnTrue;
     4990
     4991                if ( e && e.stopImmediatePropagation ) {
     4992                        e.stopImmediatePropagation();
     4993                }
     4994
     4995                this.stopPropagation();
     4996        }
     4997};
     4998
     4999// Create mouseenter/leave events using mouseover/out and event-time checks
     5000jQuery.each({
     5001        mouseenter: "mouseover",
     5002        mouseleave: "mouseout",
     5003        pointerenter: "pointerover",
     5004        pointerleave: "pointerout"
     5005}, function( orig, fix ) {
     5006        jQuery.event.special[ orig ] = {
     5007                delegateType: fix,
     5008                bindType: fix,
     5009
     5010                handle: function( event ) {
     5011                        var ret,
     5012                                target = this,
     5013                                related = event.relatedTarget,
     5014                                handleObj = event.handleObj;
     5015
     5016                        // For mousenter/leave call the handler if related is outside the target.
     5017                        // NB: No relatedTarget if the mouse left/entered the browser window
     5018                        if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
     5019                                event.type = handleObj.origType;
     5020                                ret = handleObj.handler.apply( this, arguments );
     5021                                event.type = fix;
     5022                        }
     5023                        return ret;
     5024                }
     5025        };
     5026});
     5027
     5028// IE submit delegation
     5029if ( !support.submitBubbles ) {
     5030
     5031        jQuery.event.special.submit = {
     5032                setup: function() {
     5033                        // Only need this for delegated form submit events
     5034                        if ( jQuery.nodeName( this, "form" ) ) {
     5035                                return false;
     5036                        }
     5037
     5038                        // Lazy-add a submit handler when a descendant form may potentially be submitted
     5039                        jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
     5040                                // Node name check avoids a VML-related crash in IE (#9807)
     5041                                var elem = e.target,
     5042                                        form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
     5043                                if ( form && !jQuery._data( form, "submitBubbles" ) ) {
     5044                                        jQuery.event.add( form, "submit._submit", function( event ) {
     5045                                                event._submit_bubble = true;
     5046                                        });
     5047                                        jQuery._data( form, "submitBubbles", true );
     5048                                }
     5049                        });
     5050                        // return undefined since we don't need an event listener
     5051                },
     5052
     5053                postDispatch: function( event ) {
     5054                        // If form was submitted by the user, bubble the event up the tree
     5055                        if ( event._submit_bubble ) {
     5056                                delete event._submit_bubble;
     5057                                if ( this.parentNode && !event.isTrigger ) {
     5058                                        jQuery.event.simulate( "submit", this.parentNode, event, true );
     5059                                }
     5060                        }
     5061                },
     5062
     5063                teardown: function() {
     5064                        // Only need this for delegated form submit events
     5065                        if ( jQuery.nodeName( this, "form" ) ) {
     5066                                return false;
     5067                        }
     5068
     5069                        // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
     5070                        jQuery.event.remove( this, "._submit" );
     5071                }
     5072        };
     5073}
     5074
     5075// IE change delegation and checkbox/radio fix
     5076if ( !support.changeBubbles ) {
     5077
     5078        jQuery.event.special.change = {
     5079
     5080                setup: function() {
     5081
     5082                        if ( rformElems.test( this.nodeName ) ) {
     5083                                // IE doesn't fire change on a check/radio until blur; trigger it on click
     5084                                // after a propertychange. Eat the blur-change in special.change.handle.
     5085                                // This still fires onchange a second time for check/radio after blur.
     5086                                if ( this.type === "checkbox" || this.type === "radio" ) {
     5087                                        jQuery.event.add( this, "propertychange._change", function( event ) {
     5088                                                if ( event.originalEvent.propertyName === "checked" ) {
     5089                                                        this._just_changed = true;
     5090                                                }
     5091                                        });
     5092                                        jQuery.event.add( this, "click._change", function( event ) {
     5093                                                if ( this._just_changed && !event.isTrigger ) {
     5094                                                        this._just_changed = false;
     5095                                                }
     5096                                                // Allow triggered, simulated change events (#11500)
     5097                                                jQuery.event.simulate( "change", this, event, true );
     5098                                        });
     5099                                }
     5100                                return false;
     5101                        }
     5102                        // Delegated event; lazy-add a change handler on descendant inputs
     5103                        jQuery.event.add( this, "beforeactivate._change", function( e ) {
     5104                                var elem = e.target;
     5105
     5106                                if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
     5107                                        jQuery.event.add( elem, "change._change", function( event ) {
     5108                                                if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
     5109                                                        jQuery.event.simulate( "change", this.parentNode, event, true );
     5110                                                }
     5111                                        });
     5112                                        jQuery._data( elem, "changeBubbles", true );
     5113                                }
     5114                        });
     5115                },
     5116
     5117                handle: function( event ) {
     5118                        var elem = event.target;
     5119
     5120                        // Swallow native change events from checkbox/radio, we already triggered them above
     5121                        if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
     5122                                return event.handleObj.handler.apply( this, arguments );
     5123                        }
     5124                },
     5125
     5126                teardown: function() {
     5127                        jQuery.event.remove( this, "._change" );
     5128
     5129                        return !rformElems.test( this.nodeName );
     5130                }
     5131        };
     5132}
     5133
     5134// Create "bubbling" focus and blur events
     5135if ( !support.focusinBubbles ) {
     5136        jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
     5137
     5138                // Attach a single capturing handler on the document while someone wants focusin/focusout
     5139                var handler = function( event ) {
     5140                                jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
     5141                        };
     5142
     5143                jQuery.event.special[ fix ] = {
     5144                        setup: function() {
     5145                                var doc = this.ownerDocument || this,
     5146                                        attaches = jQuery._data( doc, fix );
     5147
     5148                                if ( !attaches ) {
     5149                                        doc.addEventListener( orig, handler, true );
     5150                                }
     5151                                jQuery._data( doc, fix, ( attaches || 0 ) + 1 );
     5152                        },
     5153                        teardown: function() {
     5154                                var doc = this.ownerDocument || this,
     5155                                        attaches = jQuery._data( doc, fix ) - 1;
     5156
     5157                                if ( !attaches ) {
     5158                                        doc.removeEventListener( orig, handler, true );
     5159                                        jQuery._removeData( doc, fix );
     5160                                } else {
     5161                                        jQuery._data( doc, fix, attaches );
     5162                                }
     5163                        }
     5164                };
     5165        });
     5166}
     5167
     5168jQuery.fn.extend({
     5169
     5170        on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
     5171                var type, origFn;
     5172
     5173                // Types can be a map of types/handlers
     5174                if ( typeof types === "object" ) {
     5175                        // ( types-Object, selector, data )
     5176                        if ( typeof selector !== "string" ) {
     5177                                // ( types-Object, data )
     5178                                data = data || selector;
     5179                                selector = undefined;
     5180                        }
     5181                        for ( type in types ) {
     5182                                this.on( type, selector, data, types[ type ], one );
     5183                        }
     5184                        return this;
     5185                }
     5186
     5187                if ( data == null && fn == null ) {
     5188                        // ( types, fn )
     5189                        fn = selector;
     5190                        data = selector = undefined;
     5191                } else if ( fn == null ) {
     5192                        if ( typeof selector === "string" ) {
     5193                                // ( types, selector, fn )
     5194                                fn = data;
     5195                                data = undefined;
     5196                        } else {
     5197                                // ( types, data, fn )
     5198                                fn = data;
     5199                                data = selector;
     5200                                selector = undefined;
     5201                        }
     5202                }
     5203                if ( fn === false ) {
     5204                        fn = returnFalse;
     5205                } else if ( !fn ) {
     5206                        return this;
     5207                }
     5208
     5209                if ( one === 1 ) {
     5210                        origFn = fn;
     5211                        fn = function( event ) {
     5212                                // Can use an empty set, since event contains the info
     5213                                jQuery().off( event );
     5214                                return origFn.apply( this, arguments );
     5215                        };
     5216                        // Use same guid so caller can remove using origFn
     5217                        fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
     5218                }
     5219                return this.each( function() {
     5220                        jQuery.event.add( this, types, fn, data, selector );
     5221                });
     5222        },
     5223        one: function( types, selector, data, fn ) {
     5224                return this.on( types, selector, data, fn, 1 );
     5225        },
     5226        off: function( types, selector, fn ) {
     5227                var handleObj, type;
     5228                if ( types && types.preventDefault && types.handleObj ) {
     5229                        // ( event )  dispatched jQuery.Event
     5230                        handleObj = types.handleObj;
     5231                        jQuery( types.delegateTarget ).off(
     5232                                handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
     5233                                handleObj.selector,
     5234                                handleObj.handler
     5235                        );
     5236                        return this;
     5237                }
     5238                if ( typeof types === "object" ) {
     5239                        // ( types-object [, selector] )
     5240                        for ( type in types ) {
     5241                                this.off( type, selector, types[ type ] );
     5242                        }
     5243                        return this;
     5244                }
     5245                if ( selector === false || typeof selector === "function" ) {
     5246                        // ( types [, fn] )
     5247                        fn = selector;
     5248                        selector = undefined;
     5249                }
     5250                if ( fn === false ) {
     5251                        fn = returnFalse;
     5252                }
     5253                return this.each(function() {
     5254                        jQuery.event.remove( this, types, fn, selector );
     5255                });
     5256        },
     5257
     5258        trigger: function( type, data ) {
     5259                return this.each(function() {
     5260                        jQuery.event.trigger( type, data, this );
     5261                });
     5262        },
     5263        triggerHandler: function( type, data ) {
     5264                var elem = this[0];
     5265                if ( elem ) {
     5266                        return jQuery.event.trigger( type, data, elem, true );
     5267                }
     5268        }
     5269});
     5270
     5271
     5272function createSafeFragment( document ) {
     5273        var list = nodeNames.split( "|" ),
     5274                safeFrag = document.createDocumentFragment();
     5275
     5276        if ( safeFrag.createElement ) {
     5277                while ( list.length ) {
     5278                        safeFrag.createElement(
     5279                                list.pop()
     5280                        );
     5281                }
     5282        }
     5283        return safeFrag;
     5284}
     5285
     5286var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
     5287                "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
     5288        rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
     5289        rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
     5290        rleadingWhitespace = /^\s+/,
     5291        rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
     5292        rtagName = /<([\w:]+)/,
     5293        rtbody = /<tbody/i,
     5294        rhtml = /<|&#?\w+;/,
     5295        rnoInnerhtml = /<(?:script|style|link)/i,
     5296        // checked="checked" or checked
     5297        rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
     5298        rscriptType = /^$|\/(?:java|ecma)script/i,
     5299        rscriptTypeMasked = /^true\/(.*)/,
     5300        rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
     5301
     5302        // We have to close these tags to support XHTML (#13200)
     5303        wrapMap = {
     5304                option: [ 1, "<select multiple='multiple'>", "</select>" ],
     5305                legend: [ 1, "<fieldset>", "</fieldset>" ],
     5306                area: [ 1, "<map>", "</map>" ],
     5307                param: [ 1, "<object>", "</object>" ],
     5308                thead: [ 1, "<table>", "</table>" ],
     5309                tr: [ 2, "<table><tbody>", "</tbody></table>" ],
     5310                col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
     5311                td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
     5312
     5313                // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
     5314                // unless wrapped in a div with non-breaking characters in front of it.
     5315                _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>"  ]
     5316        },
     5317        safeFragment = createSafeFragment( document ),
     5318        fragmentDiv = safeFragment.appendChild( document.createElement("div") );
     5319
     5320wrapMap.optgroup = wrapMap.option;
     5321wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
     5322wrapMap.th = wrapMap.td;
     5323
     5324function getAll( context, tag ) {
     5325        var elems, elem,
     5326                i = 0,
     5327                found = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || "*" ) :
     5328                        typeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || "*" ) :
     5329                        undefined;
     5330
     5331        if ( !found ) {
     5332                for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
     5333                        if ( !tag || jQuery.nodeName( elem, tag ) ) {
     5334                                found.push( elem );
     5335                        } else {
     5336                                jQuery.merge( found, getAll( elem, tag ) );
     5337                        }
     5338                }
     5339        }
     5340
     5341        return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
     5342                jQuery.merge( [ context ], found ) :
     5343                found;
     5344}
     5345
     5346// Used in buildFragment, fixes the defaultChecked property
     5347function fixDefaultChecked( elem ) {
     5348        if ( rcheckableType.test( elem.type ) ) {
     5349                elem.defaultChecked = elem.checked;
     5350        }
     5351}
     5352
     5353// Support: IE<8
     5354// Manipulating tables requires a tbody
     5355function manipulationTarget( elem, content ) {
     5356        return jQuery.nodeName( elem, "table" ) &&
     5357                jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
     5358
     5359                elem.getElementsByTagName("tbody")[0] ||
     5360                        elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
     5361                elem;
     5362}
     5363
     5364// Replace/restore the type attribute of script elements for safe DOM manipulation
     5365function disableScript( elem ) {
     5366        elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type;
     5367        return elem;
     5368}
     5369function restoreScript( elem ) {
     5370        var match = rscriptTypeMasked.exec( elem.type );
     5371        if ( match ) {
     5372                elem.type = match[1];
     5373        } else {
     5374                elem.removeAttribute("type");
     5375        }
     5376        return elem;
     5377}
     5378
     5379// Mark scripts as having already been evaluated
     5380function setGlobalEval( elems, refElements ) {
     5381        var elem,
     5382                i = 0;
     5383        for ( ; (elem = elems[i]) != null; i++ ) {
     5384                jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
     5385        }
     5386}
     5387
     5388function cloneCopyEvent( src, dest ) {
     5389
     5390        if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
     5391                return;
     5392        }
     5393
     5394        var type, i, l,
     5395                oldData = jQuery._data( src ),
     5396                curData = jQuery._data( dest, oldData ),
     5397                events = oldData.events;
     5398
     5399        if ( events ) {
     5400                delete curData.handle;
     5401                curData.events = {};
     5402
     5403                for ( type in events ) {
     5404                        for ( i = 0, l = events[ type ].length; i < l; i++ ) {
     5405                                jQuery.event.add( dest, type, events[ type ][ i ] );
     5406                        }
     5407                }
     5408        }
     5409
     5410        // make the cloned public data object a copy from the original
     5411        if ( curData.data ) {
     5412                curData.data = jQuery.extend( {}, curData.data );
     5413        }
     5414}
     5415
     5416function fixCloneNodeIssues( src, dest ) {
     5417        var nodeName, e, data;
     5418
     5419        // We do not need to do anything for non-Elements
     5420        if ( dest.nodeType !== 1 ) {
     5421                return;
     5422        }
     5423
     5424        nodeName = dest.nodeName.toLowerCase();
     5425
     5426        // IE6-8 copies events bound via attachEvent when using cloneNode.
     5427        if ( !support.noCloneEvent && dest[ jQuery.expando ] ) {
     5428                data = jQuery._data( dest );
     5429
     5430                for ( e in data.events ) {
     5431                        jQuery.removeEvent( dest, e, data.handle );
     5432                }
     5433
     5434                // Event data gets referenced instead of copied if the expando gets copied too
     5435                dest.removeAttribute( jQuery.expando );
     5436        }
     5437
     5438        // IE blanks contents when cloning scripts, and tries to evaluate newly-set text
     5439        if ( nodeName === "script" && dest.text !== src.text ) {
     5440                disableScript( dest ).text = src.text;
     5441                restoreScript( dest );
     5442
     5443        // IE6-10 improperly clones children of object elements using classid.
     5444        // IE10 throws NoModificationAllowedError if parent is null, #12132.
     5445        } else if ( nodeName === "object" ) {
     5446                if ( dest.parentNode ) {
     5447                        dest.outerHTML = src.outerHTML;
     5448                }
     5449
     5450                // This path appears unavoidable for IE9. When cloning an object
     5451                // element in IE9, the outerHTML strategy above is not sufficient.
     5452                // If the src has innerHTML and the destination does not,
     5453                // copy the src.innerHTML into the dest.innerHTML. #10324
     5454                if ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
     5455                        dest.innerHTML = src.innerHTML;
     5456                }
     5457
     5458        } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
     5459                // IE6-8 fails to persist the checked state of a cloned checkbox
     5460                // or radio button. Worse, IE6-7 fail to give the cloned element
     5461                // a checked appearance if the defaultChecked value isn't also set
     5462
     5463                dest.defaultChecked = dest.checked = src.checked;
     5464
     5465                // IE6-7 get confused and end up setting the value of a cloned
     5466                // checkbox/radio button to an empty string instead of "on"
     5467                if ( dest.value !== src.value ) {
     5468                        dest.value = src.value;
     5469                }
     5470
     5471        // IE6-8 fails to return the selected option to the default selected
     5472        // state when cloning options
     5473        } else if ( nodeName === "option" ) {
     5474                dest.defaultSelected = dest.selected = src.defaultSelected;
     5475
     5476        // IE6-8 fails to set the defaultValue to the correct value when
     5477        // cloning other types of input fields
     5478        } else if ( nodeName === "input" || nodeName === "textarea" ) {
     5479                dest.defaultValue = src.defaultValue;
     5480        }
     5481}
     5482
     5483jQuery.extend({
     5484        clone: function( elem, dataAndEvents, deepDataAndEvents ) {
     5485                var destElements, node, clone, i, srcElements,
     5486                        inPage = jQuery.contains( elem.ownerDocument, elem );
     5487
     5488                if ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
     5489                        clone = elem.cloneNode( true );
     5490
     5491                // IE<=8 does not properly clone detached, unknown element nodes
     5492                } else {
     5493                        fragmentDiv.innerHTML = elem.outerHTML;
     5494                        fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
     5495                }
     5496
     5497                if ( (!support.noCloneEvent || !support.noCloneChecked) &&
     5498                                (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
     5499
     5500                        // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
     5501                        destElements = getAll( clone );
     5502                        srcElements = getAll( elem );
     5503
     5504                        // Fix all IE cloning issues
     5505                        for ( i = 0; (node = srcElements[i]) != null; ++i ) {
     5506                                // Ensure that the destination node is not null; Fixes #9587
     5507                                if ( destElements[i] ) {
     5508                                        fixCloneNodeIssues( node, destElements[i] );
     5509                                }
     5510                        }
     5511                }
     5512
     5513                // Copy the events from the original to the clone
     5514                if ( dataAndEvents ) {
     5515                        if ( deepDataAndEvents ) {
     5516                                srcElements = srcElements || getAll( elem );
     5517                                destElements = destElements || getAll( clone );
     5518
     5519                                for ( i = 0; (node = srcElements[i]) != null; i++ ) {
     5520                                        cloneCopyEvent( node, destElements[i] );
     5521                                }
     5522                        } else {
     5523                                cloneCopyEvent( elem, clone );
     5524                        }
     5525                }
     5526
     5527                // Preserve script evaluation history
     5528                destElements = getAll( clone, "script" );
     5529                if ( destElements.length > 0 ) {
     5530                        setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
     5531                }
     5532
     5533                destElements = srcElements = node = null;
     5534
     5535                // Return the cloned set
     5536                return clone;
     5537        },
     5538
     5539        buildFragment: function( elems, context, scripts, selection ) {
     5540                var j, elem, contains,
     5541                        tmp, tag, tbody, wrap,
     5542                        l = elems.length,
     5543
     5544                        // Ensure a safe fragment
     5545                        safe = createSafeFragment( context ),
     5546
     5547                        nodes = [],
     5548                        i = 0;
     5549
     5550                for ( ; i < l; i++ ) {
     5551                        elem = elems[ i ];
     5552
     5553                        if ( elem || elem === 0 ) {
     5554
     5555                                // Add nodes directly
     5556                                if ( jQuery.type( elem ) === "object" ) {
     5557                                        jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
     5558
     5559                                // Convert non-html into a text node
     5560                                } else if ( !rhtml.test( elem ) ) {
     5561                                        nodes.push( context.createTextNode( elem ) );
     5562
     5563                                // Convert html into DOM nodes
     5564                                } else {
     5565                                        tmp = tmp || safe.appendChild( context.createElement("div") );
     5566
     5567                                        // Deserialize a standard representation
     5568                                        tag = (rtagName.exec( elem ) || [ "", "" ])[ 1 ].toLowerCase();
     5569                                        wrap = wrapMap[ tag ] || wrapMap._default;
     5570
     5571                                        tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
     5572
     5573                                        // Descend through wrappers to the right content
     5574                                        j = wrap[0];
     5575                                        while ( j-- ) {
     5576                                                tmp = tmp.lastChild;
     5577                                        }
     5578
     5579                                        // Manually add leading whitespace removed by IE
     5580                                        if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
     5581                                                nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
     5582                                        }
     5583
     5584                                        // Remove IE's autoinserted <tbody> from table fragments
     5585                                        if ( !support.tbody ) {
     5586
     5587                                                // String was a <table>, *may* have spurious <tbody>
     5588                                                elem = tag === "table" && !rtbody.test( elem ) ?
     5589                                                        tmp.firstChild :
     5590
     5591                                                        // String was a bare <thead> or <tfoot>
     5592                                                        wrap[1] === "<table>" && !rtbody.test( elem ) ?
     5593                                                                tmp :
     5594                                                                0;
     5595
     5596                                                j = elem && elem.childNodes.length;
     5597                                                while ( j-- ) {
     5598                                                        if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
     5599                                                                elem.removeChild( tbody );
     5600                                                        }
     5601                                                }
     5602                                        }
     5603
     5604                                        jQuery.merge( nodes, tmp.childNodes );
     5605
     5606                                        // Fix #12392 for WebKit and IE > 9
     5607                                        tmp.textContent = "";
     5608
     5609                                        // Fix #12392 for oldIE
     5610                                        while ( tmp.firstChild ) {
     5611                                                tmp.removeChild( tmp.firstChild );
     5612                                        }
     5613
     5614                                        // Remember the top-level container for proper cleanup
     5615                                        tmp = safe.lastChild;
     5616                                }
     5617                        }
     5618                }
     5619
     5620                // Fix #11356: Clear elements from fragment
     5621                if ( tmp ) {
     5622                        safe.removeChild( tmp );
     5623                }
     5624
     5625                // Reset defaultChecked for any radios and checkboxes
     5626                // about to be appended to the DOM in IE 6/7 (#8060)
     5627                if ( !support.appendChecked ) {
     5628                        jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
     5629                }
     5630
     5631                i = 0;
     5632                while ( (elem = nodes[ i++ ]) ) {
     5633
     5634                        // #4087 - If origin and destination elements are the same, and this is
     5635                        // that element, do not do anything
     5636                        if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
     5637                                continue;
     5638                        }
     5639
     5640                        contains = jQuery.contains( elem.ownerDocument, elem );
     5641
     5642                        // Append to fragment
     5643                        tmp = getAll( safe.appendChild( elem ), "script" );
     5644
     5645                        // Preserve script evaluation history
     5646                        if ( contains ) {
     5647                                setGlobalEval( tmp );
     5648                        }
     5649
     5650                        // Capture executables
     5651                        if ( scripts ) {
     5652                                j = 0;
     5653                                while ( (elem = tmp[ j++ ]) ) {
     5654                                        if ( rscriptType.test( elem.type || "" ) ) {
     5655                                                scripts.push( elem );
     5656                                        }
     5657                                }
     5658                        }
     5659                }
     5660
     5661                tmp = null;
     5662
     5663                return safe;
     5664        },
     5665
     5666        cleanData: function( elems, /* internal */ acceptData ) {
     5667                var elem, type, id, data,
     5668                        i = 0,
     5669                        internalKey = jQuery.expando,
     5670                        cache = jQuery.cache,
     5671                        deleteExpando = support.deleteExpando,
     5672                        special = jQuery.event.special;
     5673
     5674                for ( ; (elem = elems[i]) != null; i++ ) {
     5675                        if ( acceptData || jQuery.acceptData( elem ) ) {
     5676
     5677                                id = elem[ internalKey ];
     5678                                data = id && cache[ id ];
     5679
     5680                                if ( data ) {
     5681                                        if ( data.events ) {
     5682                                                for ( type in data.events ) {
     5683                                                        if ( special[ type ] ) {
     5684                                                                jQuery.event.remove( elem, type );
     5685
     5686                                                        // This is a shortcut to avoid jQuery.event.remove's overhead
     5687                                                        } else {
     5688                                                                jQuery.removeEvent( elem, type, data.handle );
     5689                                                        }
     5690                                                }
     5691                                        }
     5692
     5693                                        // Remove cache only if it was not already removed by jQuery.event.remove
     5694                                        if ( cache[ id ] ) {
     5695
     5696                                                delete cache[ id ];
     5697
     5698                                                // IE does not allow us to delete expando properties from nodes,
     5699                                                // nor does it have a removeAttribute function on Document nodes;
     5700                                                // we must handle all of these cases
     5701                                                if ( deleteExpando ) {
     5702                                                        delete elem[ internalKey ];
     5703
     5704                                                } else if ( typeof elem.removeAttribute !== strundefined ) {
     5705                                                        elem.removeAttribute( internalKey );
     5706
     5707                                                } else {
     5708                                                        elem[ internalKey ] = null;
     5709                                                }
     5710
     5711                                                deletedIds.push( id );
     5712                                        }
     5713                                }
     5714                        }
     5715                }
     5716        }
     5717});
     5718
     5719jQuery.fn.extend({
     5720        text: function( value ) {
     5721                return access( this, function( value ) {
     5722                        return value === undefined ?
     5723                                jQuery.text( this ) :
     5724                                this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
     5725                }, null, value, arguments.length );
     5726        },
     5727
     5728        append: function() {
     5729                return this.domManip( arguments, function( elem ) {
     5730                        if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
     5731                                var target = manipulationTarget( this, elem );
     5732                                target.appendChild( elem );
     5733                        }
     5734                });
     5735        },
     5736
     5737        prepend: function() {
     5738                return this.domManip( arguments, function( elem ) {
     5739                        if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
     5740                                var target = manipulationTarget( this, elem );
     5741                                target.insertBefore( elem, target.firstChild );
     5742                        }
     5743                });
     5744        },
     5745
     5746        before: function() {
     5747                return this.domManip( arguments, function( elem ) {
     5748                        if ( this.parentNode ) {
     5749                                this.parentNode.insertBefore( elem, this );
     5750                        }
     5751                });
     5752        },
     5753
     5754        after: function() {
     5755                return this.domManip( arguments, function( elem ) {
     5756                        if ( this.parentNode ) {
     5757                                this.parentNode.insertBefore( elem, this.nextSibling );
     5758                        }
     5759                });
     5760        },
     5761
     5762        remove: function( selector, keepData /* Internal Use Only */ ) {
     5763                var elem,
     5764                        elems = selector ? jQuery.filter( selector, this ) : this,
     5765                        i = 0;
     5766
     5767                for ( ; (elem = elems[i]) != null; i++ ) {
     5768
     5769                        if ( !keepData && elem.nodeType === 1 ) {
     5770                                jQuery.cleanData( getAll( elem ) );
     5771                        }
     5772
     5773                        if ( elem.parentNode ) {
     5774                                if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
     5775                                        setGlobalEval( getAll( elem, "script" ) );
     5776                                }
     5777                                elem.parentNode.removeChild( elem );
     5778                        }
     5779                }
     5780
     5781                return this;
     5782        },
     5783
     5784        empty: function() {
     5785                var elem,
     5786                        i = 0;
     5787
     5788                for ( ; (elem = this[i]) != null; i++ ) {
     5789                        // Remove element nodes and prevent memory leaks
     5790                        if ( elem.nodeType === 1 ) {
     5791                                jQuery.cleanData( getAll( elem, false ) );
     5792                        }
     5793
     5794                        // Remove any remaining nodes
     5795                        while ( elem.firstChild ) {
     5796                                elem.removeChild( elem.firstChild );
     5797                        }
     5798
     5799                        // If this is a select, ensure that it displays empty (#12336)
     5800                        // Support: IE<9
     5801                        if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
     5802                                elem.options.length = 0;
     5803                        }
     5804                }
     5805
     5806                return this;
     5807        },
     5808
     5809        clone: function( dataAndEvents, deepDataAndEvents ) {
     5810                dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
     5811                deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
     5812
     5813                return this.map(function() {
     5814                        return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
     5815                });
     5816        },
     5817
     5818        html: function( value ) {
     5819                return access( this, function( value ) {
     5820                        var elem = this[ 0 ] || {},
     5821                                i = 0,
     5822                                l = this.length;
     5823
     5824                        if ( value === undefined ) {
     5825                                return elem.nodeType === 1 ?
     5826                                        elem.innerHTML.replace( rinlinejQuery, "" ) :
     5827                                        undefined;
     5828                        }
     5829
     5830                        // See if we can take a shortcut and just use innerHTML
     5831                        if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
     5832                                ( support.htmlSerialize || !rnoshimcache.test( value )  ) &&
     5833                                ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
     5834                                !wrapMap[ (rtagName.exec( value ) || [ "", "" ])[ 1 ].toLowerCase() ] ) {
     5835
     5836                                value = value.replace( rxhtmlTag, "<$1></$2>" );
     5837
     5838                                try {
     5839                                        for (; i < l; i++ ) {
     5840                                                // Remove element nodes and prevent memory leaks
     5841                                                elem = this[i] || {};
     5842                                                if ( elem.nodeType === 1 ) {
     5843                                                        jQuery.cleanData( getAll( elem, false ) );
     5844                                                        elem.innerHTML = value;
     5845                                                }
     5846                                        }
     5847
     5848                                        elem = 0;
     5849
     5850                                // If using innerHTML throws an exception, use the fallback method
     5851                                } catch(e) {}
     5852                        }
     5853
     5854                        if ( elem ) {
     5855                                this.empty().append( value );
     5856                        }
     5857                }, null, value, arguments.length );
     5858        },
     5859
     5860        replaceWith: function() {
     5861                var arg = arguments[ 0 ];
     5862
     5863                // Make the changes, replacing each context element with the new content
     5864                this.domManip( arguments, function( elem ) {
     5865                        arg = this.parentNode;
     5866
     5867                        jQuery.cleanData( getAll( this ) );
     5868
     5869                        if ( arg ) {
     5870                                arg.replaceChild( elem, this );
     5871                        }
     5872                });
     5873
     5874                // Force removal if there was no new content (e.g., from empty arguments)
     5875                return arg && (arg.length || arg.nodeType) ? this : this.remove();
     5876        },
     5877
     5878        detach: function( selector ) {
     5879                return this.remove( selector, true );
     5880        },
     5881
     5882        domManip: function( args, callback ) {
     5883
     5884                // Flatten any nested arrays
     5885                args = concat.apply( [], args );
     5886
     5887                var first, node, hasScripts,
     5888                        scripts, doc, fragment,
     5889                        i = 0,
     5890                        l = this.length,
     5891                        set = this,
     5892                        iNoClone = l - 1,
     5893                        value = args[0],
     5894                        isFunction = jQuery.isFunction( value );
     5895
     5896                // We can't cloneNode fragments that contain checked, in WebKit
     5897                if ( isFunction ||
     5898                                ( l > 1 && typeof value === "string" &&
     5899                                        !support.checkClone && rchecked.test( value ) ) ) {
     5900                        return this.each(function( index ) {
     5901                                var self = set.eq( index );
     5902                                if ( isFunction ) {
     5903                                        args[0] = value.call( this, index, self.html() );
     5904                                }
     5905                                self.domManip( args, callback );
     5906                        });
     5907                }
     5908
     5909                if ( l ) {
     5910                        fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
     5911                        first = fragment.firstChild;
     5912
     5913                        if ( fragment.childNodes.length === 1 ) {
     5914                                fragment = first;
     5915                        }
     5916
     5917                        if ( first ) {
     5918                                scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
     5919                                hasScripts = scripts.length;
     5920
     5921                                // Use the original fragment for the last item instead of the first because it can end up
     5922                                // being emptied incorrectly in certain situations (#8070).
     5923                                for ( ; i < l; i++ ) {
     5924                                        node = fragment;
     5925
     5926                                        if ( i !== iNoClone ) {
     5927                                                node = jQuery.clone( node, true, true );
     5928
     5929                                                // Keep references to cloned scripts for later restoration
     5930                                                if ( hasScripts ) {
     5931                                                        jQuery.merge( scripts, getAll( node, "script" ) );
     5932                                                }
     5933                                        }
     5934
     5935                                        callback.call( this[i], node, i );
     5936                                }
     5937
     5938                                if ( hasScripts ) {
     5939                                        doc = scripts[ scripts.length - 1 ].ownerDocument;
     5940
     5941                                        // Reenable scripts
     5942                                        jQuery.map( scripts, restoreScript );
     5943
     5944                                        // Evaluate executable scripts on first document insertion
     5945                                        for ( i = 0; i < hasScripts; i++ ) {
     5946                                                node = scripts[ i ];
     5947                                                if ( rscriptType.test( node.type || "" ) &&
     5948                                                        !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
     5949
     5950                                                        if ( node.src ) {
     5951                                                                // Optional AJAX dependency, but won't run scripts if not present
     5952                                                                if ( jQuery._evalUrl ) {
     5953                                                                        jQuery._evalUrl( node.src );
     5954                                                                }
     5955                                                        } else {
     5956                                                                jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
     5957                                                        }
     5958                                                }
     5959                                        }
     5960                                }
     5961
     5962                                // Fix #11809: Avoid leaking memory
     5963                                fragment = first = null;
     5964                        }
     5965                }
     5966
     5967                return this;
     5968        }
     5969});
     5970
     5971jQuery.each({
     5972        appendTo: "append",
     5973        prependTo: "prepend",
     5974        insertBefore: "before",
     5975        insertAfter: "after",
     5976        replaceAll: "replaceWith"
     5977}, function( name, original ) {
     5978        jQuery.fn[ name ] = function( selector ) {
     5979                var elems,
     5980                        i = 0,
     5981                        ret = [],
     5982                        insert = jQuery( selector ),
     5983                        last = insert.length - 1;
     5984
     5985                for ( ; i <= last; i++ ) {
     5986                        elems = i === last ? this : this.clone(true);
     5987                        jQuery( insert[i] )[ original ]( elems );
     5988
     5989                        // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
     5990                        push.apply( ret, elems.get() );
     5991                }
     5992
     5993                return this.pushStack( ret );
     5994        };
     5995});
     5996
     5997
     5998var iframe,
     5999        elemdisplay = {};
     6000
     6001/**
     6002 * Retrieve the actual display of a element
     6003 * @param {String} name nodeName of the element
     6004 * @param {Object} doc Document object
     6005 */
     6006// Called only from within defaultDisplay
     6007function actualDisplay( name, doc ) {
     6008        var style,
     6009                elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
     6010
     6011                // getDefaultComputedStyle might be reliably used only on attached element
     6012                display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?
     6013
     6014                        // Use of this method is a temporary fix (more like optmization) until something better comes along,
     6015                        // since it was removed from specification and supported only in FF
     6016                        style.display : jQuery.css( elem[ 0 ], "display" );
     6017
     6018        // We don't have any data stored on the element,
     6019        // so use "detach" method as fast way to get rid of the element
     6020        elem.detach();
     6021
     6022        return display;
     6023}
     6024
     6025/**
     6026 * Try to determine the default display value of an element
     6027 * @param {String} nodeName
     6028 */
     6029function defaultDisplay( nodeName ) {
     6030        var doc = document,
     6031                display = elemdisplay[ nodeName ];
     6032
     6033        if ( !display ) {
     6034                display = actualDisplay( nodeName, doc );
     6035
     6036                // If the simple way fails, read from inside an iframe
     6037                if ( display === "none" || !display ) {
     6038
     6039                        // Use the already-created iframe if possible
     6040                        iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement );
     6041
     6042                        // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
     6043                        doc = ( iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument ).document;
     6044
     6045                        // Support: IE
     6046                        doc.write();
     6047                        doc.close();
     6048
     6049                        display = actualDisplay( nodeName, doc );
     6050                        iframe.detach();
     6051                }
     6052
     6053                // Store the correct default display
     6054                elemdisplay[ nodeName ] = display;
     6055        }
     6056
     6057        return display;
     6058}
     6059
     6060
     6061(function() {
     6062        var shrinkWrapBlocksVal;
     6063
     6064        support.shrinkWrapBlocks = function() {
     6065                if ( shrinkWrapBlocksVal != null ) {
     6066                        return shrinkWrapBlocksVal;
     6067                }
     6068
     6069                // Will be changed later if needed.
     6070                shrinkWrapBlocksVal = false;
     6071
     6072                // Minified: var b,c,d
     6073                var div, body, container;
     6074
     6075                body = document.getElementsByTagName( "body" )[ 0 ];
     6076                if ( !body || !body.style ) {
     6077                        // Test fired too early or in an unsupported environment, exit.
     6078                        return;
     6079                }
     6080
     6081                // Setup
     6082                div = document.createElement( "div" );
     6083                container = document.createElement( "div" );
     6084                container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
     6085                body.appendChild( container ).appendChild( div );
     6086
     6087                // Support: IE6
     6088                // Check if elements with layout shrink-wrap their children
     6089                if ( typeof div.style.zoom !== strundefined ) {
     6090                        // Reset CSS: box-sizing; display; margin; border
     6091                        div.style.cssText =
     6092                                // Support: Firefox<29, Android 2.3
     6093                                // Vendor-prefix box-sizing
     6094                                "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
     6095                                "box-sizing:content-box;display:block;margin:0;border:0;" +
     6096                                "padding:1px;width:1px;zoom:1";
     6097                        div.appendChild( document.createElement( "div" ) ).style.width = "5px";
     6098                        shrinkWrapBlocksVal = div.offsetWidth !== 3;
     6099                }
     6100
     6101                body.removeChild( container );
     6102
     6103                return shrinkWrapBlocksVal;
     6104        };
     6105
     6106})();
     6107var rmargin = (/^margin/);
     6108
     6109var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
     6110
     6111
     6112
     6113var getStyles, curCSS,
     6114        rposition = /^(top|right|bottom|left)$/;
     6115
     6116if ( window.getComputedStyle ) {
     6117        getStyles = function( elem ) {
     6118                return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
     6119        };
     6120
     6121        curCSS = function( elem, name, computed ) {
     6122                var width, minWidth, maxWidth, ret,
     6123                        style = elem.style;
     6124
     6125                computed = computed || getStyles( elem );
     6126
     6127                // getPropertyValue is only needed for .css('filter') in IE9, see #12537
     6128                ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;
     6129
     6130                if ( computed ) {
     6131
     6132                        if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
     6133                                ret = jQuery.style( elem, name );
     6134                        }
     6135
     6136                        // A tribute to the "awesome hack by Dean Edwards"
     6137                        // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
     6138                        // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
     6139                        // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
     6140                        if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
     6141
     6142                                // Remember the original values
     6143                                width = style.width;
     6144                                minWidth = style.minWidth;
     6145                                maxWidth = style.maxWidth;
     6146
     6147                                // Put in the new values to get a computed value out
     6148                                style.minWidth = style.maxWidth = style.width = ret;
     6149                                ret = computed.width;
     6150
     6151                                // Revert the changed values
     6152                                style.width = width;
     6153                                style.minWidth = minWidth;
     6154                                style.maxWidth = maxWidth;
     6155                        }
     6156                }
     6157
     6158                // Support: IE
     6159                // IE returns zIndex value as an integer.
     6160                return ret === undefined ?
     6161                        ret :
     6162                        ret + "";
     6163        };
     6164} else if ( document.documentElement.currentStyle ) {
     6165        getStyles = function( elem ) {
     6166                return elem.currentStyle;
     6167        };
     6168
     6169        curCSS = function( elem, name, computed ) {
     6170                var left, rs, rsLeft, ret,
     6171                        style = elem.style;
     6172
     6173                computed = computed || getStyles( elem );
     6174                ret = computed ? computed[ name ] : undefined;
     6175
     6176                // Avoid setting ret to empty string here
     6177                // so we don't default to auto
     6178                if ( ret == null && style && style[ name ] ) {
     6179                        ret = style[ name ];
     6180                }
     6181
     6182                // From the awesome hack by Dean Edwards
     6183                // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
     6184
     6185                // If we're not dealing with a regular pixel number
     6186                // but a number that has a weird ending, we need to convert it to pixels
     6187                // but not position css attributes, as those are proportional to the parent element instead
     6188                // and we can't measure the parent instead because it might trigger a "stacking dolls" problem
     6189                if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
     6190
     6191                        // Remember the original values
     6192                        left = style.left;
     6193                        rs = elem.runtimeStyle;
     6194                        rsLeft = rs && rs.left;
     6195
     6196                        // Put in the new values to get a computed value out
     6197                        if ( rsLeft ) {
     6198                                rs.left = elem.currentStyle.left;
     6199                        }
     6200                        style.left = name === "fontSize" ? "1em" : ret;
     6201                        ret = style.pixelLeft + "px";
     6202
     6203                        // Revert the changed values
     6204                        style.left = left;
     6205                        if ( rsLeft ) {
     6206                                rs.left = rsLeft;
     6207                        }
     6208                }
     6209
     6210                // Support: IE
     6211                // IE returns zIndex value as an integer.
     6212                return ret === undefined ?
     6213                        ret :
     6214                        ret + "" || "auto";
     6215        };
     6216}
     6217
     6218
     6219
     6220
     6221function addGetHookIf( conditionFn, hookFn ) {
     6222        // Define the hook, we'll check on the first run if it's really needed.
     6223        return {
     6224                get: function() {
     6225                        var condition = conditionFn();
     6226
     6227                        if ( condition == null ) {
     6228                                // The test was not ready at this point; screw the hook this time
     6229                                // but check again when needed next time.
     6230                                return;
     6231                        }
     6232
     6233                        if ( condition ) {
     6234                                // Hook not needed (or it's not possible to use it due to missing dependency),
     6235                                // remove it.
     6236                                // Since there are no other hooks for marginRight, remove the whole object.
     6237                                delete this.get;
     6238                                return;
     6239                        }
     6240
     6241                        // Hook needed; redefine it so that the support test is not executed again.
     6242
     6243                        return (this.get = hookFn).apply( this, arguments );
     6244                }
     6245        };
     6246}
     6247
     6248
     6249(function() {
     6250        // Minified: var b,c,d,e,f,g, h,i
     6251        var div, style, a, pixelPositionVal, boxSizingReliableVal,
     6252                reliableHiddenOffsetsVal, reliableMarginRightVal;
     6253
     6254        // Setup
     6255        div = document.createElement( "div" );
     6256        div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
     6257        a = div.getElementsByTagName( "a" )[ 0 ];
     6258        style = a && a.style;
     6259
     6260        // Finish early in limited (non-browser) environments
     6261        if ( !style ) {
     6262                return;
     6263        }
     6264
     6265        style.cssText = "float:left;opacity:.5";
     6266
     6267        // Support: IE<9
     6268        // Make sure that element opacity exists (as opposed to filter)
     6269        support.opacity = style.opacity === "0.5";
     6270
     6271        // Verify style float existence
     6272        // (IE uses styleFloat instead of cssFloat)
     6273        support.cssFloat = !!style.cssFloat;
     6274
     6275        div.style.backgroundClip = "content-box";
     6276        div.cloneNode( true ).style.backgroundClip = "";
     6277        support.clearCloneStyle = div.style.backgroundClip === "content-box";
     6278
     6279        // Support: Firefox<29, Android 2.3
     6280        // Vendor-prefix box-sizing
     6281        support.boxSizing = style.boxSizing === "" || style.MozBoxSizing === "" ||
     6282                style.WebkitBoxSizing === "";
     6283
     6284        jQuery.extend(support, {
     6285                reliableHiddenOffsets: function() {
     6286                        if ( reliableHiddenOffsetsVal == null ) {
     6287                                computeStyleTests();
     6288                        }
     6289                        return reliableHiddenOffsetsVal;
     6290                },
     6291
     6292                boxSizingReliable: function() {
     6293                        if ( boxSizingReliableVal == null ) {
     6294                                computeStyleTests();
     6295                        }
     6296                        return boxSizingReliableVal;
     6297                },
     6298
     6299                pixelPosition: function() {
     6300                        if ( pixelPositionVal == null ) {
     6301                                computeStyleTests();
     6302                        }
     6303                        return pixelPositionVal;
     6304                },
     6305
     6306                // Support: Android 2.3
     6307                reliableMarginRight: function() {
     6308                        if ( reliableMarginRightVal == null ) {
     6309                                computeStyleTests();
     6310                        }
     6311                        return reliableMarginRightVal;
     6312                }
     6313        });
     6314
     6315        function computeStyleTests() {
     6316                // Minified: var b,c,d,j
     6317                var div, body, container, contents;
     6318
     6319                body = document.getElementsByTagName( "body" )[ 0 ];
     6320                if ( !body || !body.style ) {
     6321                        // Test fired too early or in an unsupported environment, exit.
     6322                        return;
     6323                }
     6324
     6325                // Setup
     6326                div = document.createElement( "div" );
     6327                container = document.createElement( "div" );
     6328                container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
     6329                body.appendChild( container ).appendChild( div );
     6330
     6331                div.style.cssText =
     6332                        // Support: Firefox<29, Android 2.3
     6333                        // Vendor-prefix box-sizing
     6334                        "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" +
     6335                        "box-sizing:border-box;display:block;margin-top:1%;top:1%;" +
     6336                        "border:1px;padding:1px;width:4px;position:absolute";
     6337
     6338                // Support: IE<9
     6339                // Assume reasonable values in the absence of getComputedStyle
     6340                pixelPositionVal = boxSizingReliableVal = false;
     6341                reliableMarginRightVal = true;
     6342
     6343                // Check for getComputedStyle so that this code is not run in IE<9.
     6344                if ( window.getComputedStyle ) {
     6345                        pixelPositionVal = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
     6346                        boxSizingReliableVal =
     6347                                ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
     6348
     6349                        // Support: Android 2.3
     6350                        // Div with explicit width and no margin-right incorrectly
     6351                        // gets computed margin-right based on width of container (#3333)
     6352                        // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
     6353                        contents = div.appendChild( document.createElement( "div" ) );
     6354
     6355                        // Reset CSS: box-sizing; display; margin; border; padding
     6356                        contents.style.cssText = div.style.cssText =
     6357                                // Support: Firefox<29, Android 2.3
     6358                                // Vendor-prefix box-sizing
     6359                                "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
     6360                                "box-sizing:content-box;display:block;margin:0;border:0;padding:0";
     6361                        contents.style.marginRight = contents.style.width = "0";
     6362                        div.style.width = "1px";
     6363
     6364                        reliableMarginRightVal =
     6365                                !parseFloat( ( window.getComputedStyle( contents, null ) || {} ).marginRight );
     6366                }
     6367
     6368                // Support: IE8
     6369                // Check if table cells still have offsetWidth/Height when they are set
     6370                // to display:none and there are still other visible table cells in a
     6371                // table row; if so, offsetWidth/Height are not reliable for use when
     6372                // determining if an element has been hidden directly using
     6373                // display:none (it is still safe to use offsets if a parent element is
     6374                // hidden; don safety goggles and see bug #4512 for more information).
     6375                div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
     6376                contents = div.getElementsByTagName( "td" );
     6377                contents[ 0 ].style.cssText = "margin:0;border:0;padding:0;display:none";
     6378                reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
     6379                if ( reliableHiddenOffsetsVal ) {
     6380                        contents[ 0 ].style.display = "";
     6381                        contents[ 1 ].style.display = "none";
     6382                        reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
     6383                }
     6384
     6385                body.removeChild( container );
     6386        }
     6387
     6388})();
     6389
     6390
     6391// A method for quickly swapping in/out CSS properties to get correct calculations.
     6392jQuery.swap = function( elem, options, callback, args ) {
     6393        var ret, name,
     6394                old = {};
     6395
     6396        // Remember the old values, and insert the new ones
     6397        for ( name in options ) {
     6398                old[ name ] = elem.style[ name ];
     6399                elem.style[ name ] = options[ name ];
     6400        }
     6401
     6402        ret = callback.apply( elem, args || [] );
     6403
     6404        // Revert the old values
     6405        for ( name in options ) {
     6406                elem.style[ name ] = old[ name ];
     6407        }
     6408
     6409        return ret;
     6410};
     6411
     6412
     6413var
     6414                ralpha = /alpha\([^)]*\)/i,
     6415        ropacity = /opacity\s*=\s*([^)]*)/,
     6416
     6417        // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
     6418        // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
     6419        rdisplayswap = /^(none|table(?!-c[ea]).+)/,
     6420        rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
     6421        rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ),
     6422
     6423        cssShow = { position: "absolute", visibility: "hidden", display: "block" },
     6424        cssNormalTransform = {
     6425                letterSpacing: "0",
     6426                fontWeight: "400"
     6427        },
     6428
     6429        cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
     6430
     6431
     6432// return a css property mapped to a potentially vendor prefixed property
     6433function vendorPropName( style, name ) {
     6434
     6435        // shortcut for names that are not vendor prefixed
     6436        if ( name in style ) {
     6437                return name;
     6438        }
     6439
     6440        // check for vendor prefixed names
     6441        var capName = name.charAt(0).toUpperCase() + name.slice(1),
     6442                origName = name,
     6443                i = cssPrefixes.length;
     6444
     6445        while ( i-- ) {
     6446                name = cssPrefixes[ i ] + capName;
     6447                if ( name in style ) {
     6448                        return name;
     6449                }
     6450        }
     6451
     6452        return origName;
     6453}
     6454
     6455function showHide( elements, show ) {
     6456        var display, elem, hidden,
     6457                values = [],
     6458                index = 0,
     6459                length = elements.length;
     6460
     6461        for ( ; index < length; index++ ) {
     6462                elem = elements[ index ];
     6463                if ( !elem.style ) {
     6464                        continue;
     6465                }
     6466
     6467                values[ index ] = jQuery._data( elem, "olddisplay" );
     6468                display = elem.style.display;
     6469                if ( show ) {
     6470                        // Reset the inline display of this element to learn if it is
     6471                        // being hidden by cascaded rules or not
     6472                        if ( !values[ index ] && display === "none" ) {
     6473                                elem.style.display = "";
     6474                        }
     6475
     6476                        // Set elements which have been overridden with display: none
     6477                        // in a stylesheet to whatever the default browser style is
     6478                        // for such an element
     6479                        if ( elem.style.display === "" && isHidden( elem ) ) {
     6480                                values[ index ] = jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
     6481                        }
     6482                } else {
     6483                        hidden = isHidden( elem );
     6484
     6485                        if ( display && display !== "none" || !hidden ) {
     6486                                jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
     6487                        }
     6488                }
     6489        }
     6490
     6491        // Set the display of most of the elements in a second loop
     6492        // to avoid the constant reflow
     6493        for ( index = 0; index < length; index++ ) {
     6494                elem = elements[ index ];
     6495                if ( !elem.style ) {
     6496                        continue;
     6497                }
     6498                if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
     6499                        elem.style.display = show ? values[ index ] || "" : "none";
     6500                }
     6501        }
     6502
     6503        return elements;
     6504}
     6505
     6506function setPositiveNumber( elem, value, subtract ) {
     6507        var matches = rnumsplit.exec( value );
     6508        return matches ?
     6509                // Guard against undefined "subtract", e.g., when used as in cssHooks
     6510                Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
     6511                value;
     6512}
     6513
     6514function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
     6515        var i = extra === ( isBorderBox ? "border" : "content" ) ?
     6516                // If we already have the right measurement, avoid augmentation
     6517                4 :
     6518                // Otherwise initialize for horizontal or vertical properties
     6519                name === "width" ? 1 : 0,
     6520
     6521                val = 0;
     6522
     6523        for ( ; i < 4; i += 2 ) {
     6524                // both box models exclude margin, so add it if we want it
     6525                if ( extra === "margin" ) {
     6526                        val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
     6527                }
     6528
     6529                if ( isBorderBox ) {
     6530                        // border-box includes padding, so remove it if we want content
     6531                        if ( extra === "content" ) {
     6532                                val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
     6533                        }
     6534
     6535                        // at this point, extra isn't border nor margin, so remove border
     6536                        if ( extra !== "margin" ) {
     6537                                val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
     6538                        }
     6539                } else {
     6540                        // at this point, extra isn't content, so add padding
     6541                        val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
     6542
     6543                        // at this point, extra isn't content nor padding, so add border
     6544                        if ( extra !== "padding" ) {
     6545                                val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
     6546                        }
     6547                }
     6548        }
     6549
     6550        return val;
     6551}
     6552
     6553function getWidthOrHeight( elem, name, extra ) {
     6554
     6555        // Start with offset property, which is equivalent to the border-box value
     6556        var valueIsBorderBox = true,
     6557                val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
     6558                styles = getStyles( elem ),
     6559                isBorderBox = support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
     6560
     6561        // some non-html elements return undefined for offsetWidth, so check for null/undefined
     6562        // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
     6563        // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
     6564        if ( val <= 0 || val == null ) {
     6565                // Fall back to computed then uncomputed css if necessary
     6566                val = curCSS( elem, name, styles );
     6567                if ( val < 0 || val == null ) {
     6568                        val = elem.style[ name ];
     6569                }
     6570
     6571                // Computed unit is not pixels. Stop here and return.
     6572                if ( rnumnonpx.test(val) ) {
     6573                        return val;
     6574                }
     6575
     6576                // we need the check for style in case a browser which returns unreliable values
     6577                // for getComputedStyle silently falls back to the reliable elem.style
     6578                valueIsBorderBox = isBorderBox && ( support.boxSizingReliable() || val === elem.style[ name ] );
     6579
     6580                // Normalize "", auto, and prepare for extra
     6581                val = parseFloat( val ) || 0;
     6582        }
     6583
     6584        // use the active box-sizing model to add/subtract irrelevant styles
     6585        return ( val +
     6586                augmentWidthOrHeight(
     6587                        elem,
     6588                        name,
     6589                        extra || ( isBorderBox ? "border" : "content" ),
     6590                        valueIsBorderBox,
     6591                        styles
     6592                )
     6593        ) + "px";
     6594}
     6595
     6596jQuery.extend({
     6597        // Add in style property hooks for overriding the default
     6598        // behavior of getting and setting a style property
     6599        cssHooks: {
     6600                opacity: {
     6601                        get: function( elem, computed ) {
     6602                                if ( computed ) {
     6603                                        // We should always get a number back from opacity
     6604                                        var ret = curCSS( elem, "opacity" );
     6605                                        return ret === "" ? "1" : ret;
     6606                                }
     6607                        }
     6608                }
     6609        },
     6610
     6611        // Don't automatically add "px" to these possibly-unitless properties
     6612        cssNumber: {
     6613                "columnCount": true,
     6614                "fillOpacity": true,
     6615                "flexGrow": true,
     6616                "flexShrink": true,
     6617                "fontWeight": true,
     6618                "lineHeight": true,
     6619                "opacity": true,
     6620                "order": true,
     6621                "orphans": true,
     6622                "widows": true,
     6623                "zIndex": true,
     6624                "zoom": true
     6625        },
     6626
     6627        // Add in properties whose names you wish to fix before
     6628        // setting or getting the value
     6629        cssProps: {
     6630                // normalize float css property
     6631                "float": support.cssFloat ? "cssFloat" : "styleFloat"
     6632        },
     6633
     6634        // Get and set the style property on a DOM Node
     6635        style: function( elem, name, value, extra ) {
     6636                // Don't set styles on text and comment nodes
     6637                if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
     6638                        return;
     6639                }
     6640
     6641                // Make sure that we're working with the right name
     6642                var ret, type, hooks,
     6643                        origName = jQuery.camelCase( name ),
     6644                        style = elem.style;
     6645
     6646                name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
     6647
     6648                // gets hook for the prefixed version
     6649                // followed by the unprefixed version
     6650                hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
     6651
     6652                // Check if we're setting a value
     6653                if ( value !== undefined ) {
     6654                        type = typeof value;
     6655
     6656                        // convert relative number strings (+= or -=) to relative numbers. #7345
     6657                        if ( type === "string" && (ret = rrelNum.exec( value )) ) {
     6658                                value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
     6659                                // Fixes bug #9237
     6660                                type = "number";
     6661                        }
     6662
     6663                        // Make sure that null and NaN values aren't set. See: #7116
     6664                        if ( value == null || value !== value ) {
     6665                                return;
     6666                        }
     6667
     6668                        // If a number was passed in, add 'px' to the (except for certain CSS properties)
     6669                        if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
     6670                                value += "px";
     6671                        }
     6672
     6673                        // Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
     6674                        // but it would mean to define eight (for every problematic property) identical functions
     6675                        if ( !support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
     6676                                style[ name ] = "inherit";
     6677                        }
     6678
     6679                        // If a hook was provided, use that value, otherwise just set the specified value
     6680                        if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
     6681
     6682                                // Support: IE
     6683                                // Swallow errors from 'invalid' CSS values (#5509)
     6684                                try {
     6685                                        style[ name ] = value;
     6686                                } catch(e) {}
     6687                        }
     6688
     6689                } else {
     6690                        // If a hook was provided get the non-computed value from there
     6691                        if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
     6692                                return ret;
     6693                        }
     6694
     6695                        // Otherwise just get the value from the style object
     6696                        return style[ name ];
     6697                }
     6698        },
     6699
     6700        css: function( elem, name, extra, styles ) {
     6701                var num, val, hooks,
     6702                        origName = jQuery.camelCase( name );
     6703
     6704                // Make sure that we're working with the right name
     6705                name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
     6706
     6707                // gets hook for the prefixed version
     6708                // followed by the unprefixed version
     6709                hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
     6710
     6711                // If a hook was provided get the computed value from there
     6712                if ( hooks && "get" in hooks ) {
     6713                        val = hooks.get( elem, true, extra );
     6714                }
     6715
     6716                // Otherwise, if a way to get the computed value exists, use that
     6717                if ( val === undefined ) {
     6718                        val = curCSS( elem, name, styles );
     6719                }
     6720
     6721                //convert "normal" to computed value
     6722                if ( val === "normal" && name in cssNormalTransform ) {
     6723                        val = cssNormalTransform[ name ];
     6724                }
     6725
     6726                // Return, converting to number if forced or a qualifier was provided and val looks numeric
     6727                if ( extra === "" || extra ) {
     6728                        num = parseFloat( val );
     6729                        return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
     6730                }
     6731                return val;
     6732        }
     6733});
     6734
     6735jQuery.each([ "height", "width" ], function( i, name ) {
     6736        jQuery.cssHooks[ name ] = {
     6737                get: function( elem, computed, extra ) {
     6738                        if ( computed ) {
     6739                                // certain elements can have dimension info if we invisibly show them
     6740                                // however, it must have a current display style that would benefit from this
     6741                                return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ?
     6742                                        jQuery.swap( elem, cssShow, function() {
     6743                                                return getWidthOrHeight( elem, name, extra );
     6744                                        }) :
     6745                                        getWidthOrHeight( elem, name, extra );
     6746                        }
     6747                },
     6748
     6749                set: function( elem, value, extra ) {
     6750                        var styles = extra && getStyles( elem );
     6751                        return setPositiveNumber( elem, value, extra ?
     6752                                augmentWidthOrHeight(
     6753                                        elem,
     6754                                        name,
     6755                                        extra,
     6756                                        support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
     6757                                        styles
     6758                                ) : 0
     6759                        );
     6760                }
     6761        };
     6762});
     6763
     6764if ( !support.opacity ) {
     6765        jQuery.cssHooks.opacity = {
     6766                get: function( elem, computed ) {
     6767                        // IE uses filters for opacity
     6768                        return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
     6769                                ( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
     6770                                computed ? "1" : "";
     6771                },
     6772
     6773                set: function( elem, value ) {
     6774                        var style = elem.style,
     6775                                currentStyle = elem.currentStyle,
     6776                                opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
     6777                                filter = currentStyle && currentStyle.filter || style.filter || "";
     6778
     6779                        // IE has trouble with opacity if it does not have layout
     6780                        // Force it by setting the zoom level
     6781                        style.zoom = 1;
     6782
     6783                        // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
     6784                        // if value === "", then remove inline opacity #12685
     6785                        if ( ( value >= 1 || value === "" ) &&
     6786                                        jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
     6787                                        style.removeAttribute ) {
     6788
     6789                                // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
     6790                                // if "filter:" is present at all, clearType is disabled, we want to avoid this
     6791                                // style.removeAttribute is IE Only, but so apparently is this code path...
     6792                                style.removeAttribute( "filter" );
     6793
     6794                                // if there is no filter style applied in a css rule or unset inline opacity, we are done
     6795                                if ( value === "" || currentStyle && !currentStyle.filter ) {
     6796                                        return;
     6797                                }
     6798                        }
     6799
     6800                        // otherwise, set new filter values
     6801                        style.filter = ralpha.test( filter ) ?
     6802                                filter.replace( ralpha, opacity ) :
     6803                                filter + " " + opacity;
     6804                }
     6805        };
     6806}
     6807
     6808jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
     6809        function( elem, computed ) {
     6810                if ( computed ) {
     6811                        // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
     6812                        // Work around by temporarily setting element display to inline-block
     6813                        return jQuery.swap( elem, { "display": "inline-block" },
     6814                                curCSS, [ elem, "marginRight" ] );
     6815                }
     6816        }
     6817);
     6818
     6819// These hooks are used by animate to expand properties
     6820jQuery.each({
     6821        margin: "",
     6822        padding: "",
     6823        border: "Width"
     6824}, function( prefix, suffix ) {
     6825        jQuery.cssHooks[ prefix + suffix ] = {
     6826                expand: function( value ) {
     6827                        var i = 0,
     6828                                expanded = {},
     6829
     6830                                // assumes a single number if not a string
     6831                                parts = typeof value === "string" ? value.split(" ") : [ value ];
     6832
     6833                        for ( ; i < 4; i++ ) {
     6834                                expanded[ prefix + cssExpand[ i ] + suffix ] =
     6835                                        parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
     6836                        }
     6837
     6838                        return expanded;
     6839                }
     6840        };
     6841
     6842        if ( !rmargin.test( prefix ) ) {
     6843                jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
     6844        }
     6845});
     6846
     6847jQuery.fn.extend({
     6848        css: function( name, value ) {
     6849                return access( this, function( elem, name, value ) {
     6850                        var styles, len,
     6851                                map = {},
     6852                                i = 0;
     6853
     6854                        if ( jQuery.isArray( name ) ) {
     6855                                styles = getStyles( elem );
     6856                                len = name.length;
     6857
     6858                                for ( ; i < len; i++ ) {
     6859                                        map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
     6860                                }
     6861
     6862                                return map;
     6863                        }
     6864
     6865                        return value !== undefined ?
     6866                                jQuery.style( elem, name, value ) :
     6867                                jQuery.css( elem, name );
     6868                }, name, value, arguments.length > 1 );
     6869        },
     6870        show: function() {
     6871                return showHide( this, true );
     6872        },
     6873        hide: function() {
     6874                return showHide( this );
     6875        },
     6876        toggle: function( state ) {
     6877                if ( typeof state === "boolean" ) {
     6878                        return state ? this.show() : this.hide();
     6879                }
     6880
     6881                return this.each(function() {
     6882                        if ( isHidden( this ) ) {
     6883                                jQuery( this ).show();
     6884                        } else {
     6885                                jQuery( this ).hide();
     6886                        }
     6887                });
     6888        }
     6889});
     6890
     6891
     6892function Tween( elem, options, prop, end, easing ) {
     6893        return new Tween.prototype.init( elem, options, prop, end, easing );
     6894}
     6895jQuery.Tween = Tween;
     6896
     6897Tween.prototype = {
     6898        constructor: Tween,
     6899        init: function( elem, options, prop, end, easing, unit ) {
     6900                this.elem = elem;
     6901                this.prop = prop;
     6902                this.easing = easing || "swing";
     6903                this.options = options;
     6904                this.start = this.now = this.cur();
     6905                this.end = end;
     6906                this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
     6907        },
     6908        cur: function() {
     6909                var hooks = Tween.propHooks[ this.prop ];
     6910
     6911                return hooks && hooks.get ?
     6912                        hooks.get( this ) :
     6913                        Tween.propHooks._default.get( this );
     6914        },
     6915        run: function( percent ) {
     6916                var eased,
     6917                        hooks = Tween.propHooks[ this.prop ];
     6918
     6919                if ( this.options.duration ) {
     6920                        this.pos = eased = jQuery.easing[ this.easing ](
     6921                                percent, this.options.duration * percent, 0, 1, this.options.duration
     6922                        );
     6923                } else {
     6924                        this.pos = eased = percent;
     6925                }
     6926                this.now = ( this.end - this.start ) * eased + this.start;
     6927
     6928                if ( this.options.step ) {
     6929                        this.options.step.call( this.elem, this.now, this );
     6930                }
     6931
     6932                if ( hooks && hooks.set ) {
     6933                        hooks.set( this );
     6934                } else {
     6935                        Tween.propHooks._default.set( this );
     6936                }
     6937                return this;
     6938        }
     6939};
     6940
     6941Tween.prototype.init.prototype = Tween.prototype;
     6942
     6943Tween.propHooks = {
     6944        _default: {
     6945                get: function( tween ) {
     6946                        var result;
     6947
     6948                        if ( tween.elem[ tween.prop ] != null &&
     6949                                (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
     6950                                return tween.elem[ tween.prop ];
     6951                        }
     6952
     6953                        // passing an empty string as a 3rd parameter to .css will automatically
     6954                        // attempt a parseFloat and fallback to a string if the parse fails
     6955                        // so, simple values such as "10px" are parsed to Float.
     6956                        // complex values such as "rotate(1rad)" are returned as is.
     6957                        result = jQuery.css( tween.elem, tween.prop, "" );
     6958                        // Empty strings, null, undefined and "auto" are converted to 0.
     6959                        return !result || result === "auto" ? 0 : result;
     6960                },
     6961                set: function( tween ) {
     6962                        // use step hook for back compat - use cssHook if its there - use .style if its
     6963                        // available and use plain properties where available
     6964                        if ( jQuery.fx.step[ tween.prop ] ) {
     6965                                jQuery.fx.step[ tween.prop ]( tween );
     6966                        } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
     6967                                jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
     6968                        } else {
     6969                                tween.elem[ tween.prop ] = tween.now;
     6970                        }
     6971                }
     6972        }
     6973};
     6974
     6975// Support: IE <=9
     6976// Panic based approach to setting things on disconnected nodes
     6977
     6978Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
     6979        set: function( tween ) {
     6980                if ( tween.elem.nodeType && tween.elem.parentNode ) {
     6981                        tween.elem[ tween.prop ] = tween.now;
     6982                }
     6983        }
     6984};
     6985
     6986jQuery.easing = {
     6987        linear: function( p ) {
     6988                return p;
     6989        },
     6990        swing: function( p ) {
     6991                return 0.5 - Math.cos( p * Math.PI ) / 2;
     6992        }
     6993};
     6994
     6995jQuery.fx = Tween.prototype.init;
     6996
     6997// Back Compat <1.8 extension point
     6998jQuery.fx.step = {};
     6999
     7000
     7001
     7002
     7003var
     7004        fxNow, timerId,
     7005        rfxtypes = /^(?:toggle|show|hide)$/,
     7006        rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ),
     7007        rrun = /queueHooks$/,
     7008        animationPrefilters = [ defaultPrefilter ],
     7009        tweeners = {
     7010                "*": [ function( prop, value ) {
     7011                        var tween = this.createTween( prop, value ),
     7012                                target = tween.cur(),
     7013                                parts = rfxnum.exec( value ),
     7014                                unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
     7015
     7016                                // Starting value computation is required for potential unit mismatches
     7017                                start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
     7018                                        rfxnum.exec( jQuery.css( tween.elem, prop ) ),
     7019                                scale = 1,
     7020                                maxIterations = 20;
     7021
     7022                        if ( start && start[ 3 ] !== unit ) {
     7023                                // Trust units reported by jQuery.css
     7024                                unit = unit || start[ 3 ];
     7025
     7026                                // Make sure we update the tween properties later on
     7027                                parts = parts || [];
     7028
     7029                                // Iteratively approximate from a nonzero starting point
     7030                                start = +target || 1;
     7031
     7032                                do {
     7033                                        // If previous iteration zeroed out, double until we get *something*
     7034                                        // Use a string for doubling factor so we don't accidentally see scale as unchanged below
     7035                                        scale = scale || ".5";
     7036
     7037                                        // Adjust and apply
     7038                                        start = start / scale;
     7039                                        jQuery.style( tween.elem, prop, start + unit );
     7040
     7041                                // Update scale, tolerating zero or NaN from tween.cur()
     7042                                // And breaking the loop if scale is unchanged or perfect, or if we've just had enough
     7043                                } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
     7044                        }
     7045
     7046                        // Update tween properties
     7047                        if ( parts ) {
     7048                                start = tween.start = +start || +target || 0;
     7049                                tween.unit = unit;
     7050                                // If a +=/-= token was provided, we're doing a relative animation
     7051                                tween.end = parts[ 1 ] ?
     7052                                        start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
     7053                                        +parts[ 2 ];
     7054                        }
     7055
     7056                        return tween;
     7057                } ]
     7058        };
     7059
     7060// Animations created synchronously will run synchronously
     7061function createFxNow() {
     7062        setTimeout(function() {
     7063                fxNow = undefined;
     7064        });
     7065        return ( fxNow = jQuery.now() );
     7066}
     7067
     7068// Generate parameters to create a standard animation
     7069function genFx( type, includeWidth ) {
     7070        var which,
     7071                attrs = { height: type },
     7072                i = 0;
     7073
     7074        // if we include width, step value is 1 to do all cssExpand values,
     7075        // if we don't include width, step value is 2 to skip over Left and Right
     7076        includeWidth = includeWidth ? 1 : 0;
     7077        for ( ; i < 4 ; i += 2 - includeWidth ) {
     7078                which = cssExpand[ i ];
     7079                attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
     7080        }
     7081
     7082        if ( includeWidth ) {
     7083                attrs.opacity = attrs.width = type;
     7084        }
     7085
     7086        return attrs;
     7087}
     7088
     7089function createTween( value, prop, animation ) {
     7090        var tween,
     7091                collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
     7092                index = 0,
     7093                length = collection.length;
     7094        for ( ; index < length; index++ ) {
     7095                if ( (tween = collection[ index ].call( animation, prop, value )) ) {
     7096
     7097                        // we're done with this property
     7098                        return tween;
     7099                }
     7100        }
     7101}
     7102
     7103function defaultPrefilter( elem, props, opts ) {
     7104        /* jshint validthis: true */
     7105        var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
     7106                anim = this,
     7107                orig = {},
     7108                style = elem.style,
     7109                hidden = elem.nodeType && isHidden( elem ),
     7110                dataShow = jQuery._data( elem, "fxshow" );
     7111
     7112        // handle queue: false promises
     7113        if ( !opts.queue ) {
     7114                hooks = jQuery._queueHooks( elem, "fx" );
     7115                if ( hooks.unqueued == null ) {
     7116                        hooks.unqueued = 0;
     7117                        oldfire = hooks.empty.fire;
     7118                        hooks.empty.fire = function() {
     7119                                if ( !hooks.unqueued ) {
     7120                                        oldfire();
     7121                                }
     7122                        };
     7123                }
     7124                hooks.unqueued++;
     7125
     7126                anim.always(function() {
     7127                        // doing this makes sure that the complete handler will be called
     7128                        // before this completes
     7129                        anim.always(function() {
     7130                                hooks.unqueued--;
     7131                                if ( !jQuery.queue( elem, "fx" ).length ) {
     7132                                        hooks.empty.fire();
     7133                                }
     7134                        });
     7135                });
     7136        }
     7137
     7138        // height/width overflow pass
     7139        if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
     7140                // Make sure that nothing sneaks out
     7141                // Record all 3 overflow attributes because IE does not
     7142                // change the overflow attribute when overflowX and
     7143                // overflowY are set to the same value
     7144                opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
     7145
     7146                // Set display property to inline-block for height/width
     7147                // animations on inline elements that are having width/height animated
     7148                display = jQuery.css( elem, "display" );
     7149
     7150                // Test default display if display is currently "none"
     7151                checkDisplay = display === "none" ?
     7152                        jQuery._data( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
     7153
     7154                if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
     7155
     7156                        // inline-level elements accept inline-block;
     7157                        // block-level elements need to be inline with layout
     7158                        if ( !support.inlineBlockNeedsLayout || defaultDisplay( elem.nodeName ) === "inline" ) {
     7159                                style.display = "inline-block";
     7160                        } else {
     7161                                style.zoom = 1;
     7162                        }
     7163                }
     7164        }
     7165
     7166        if ( opts.overflow ) {
     7167                style.overflow = "hidden";
     7168                if ( !support.shrinkWrapBlocks() ) {
     7169                        anim.always(function() {
     7170                                style.overflow = opts.overflow[ 0 ];
     7171                                style.overflowX = opts.overflow[ 1 ];
     7172                                style.overflowY = opts.overflow[ 2 ];
     7173                        });
     7174                }
     7175        }
     7176
     7177        // show/hide pass
     7178        for ( prop in props ) {
     7179                value = props[ prop ];
     7180                if ( rfxtypes.exec( value ) ) {
     7181                        delete props[ prop ];
     7182                        toggle = toggle || value === "toggle";
     7183                        if ( value === ( hidden ? "hide" : "show" ) ) {
     7184
     7185                                // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden
     7186                                if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
     7187                                        hidden = true;
     7188                                } else {
     7189                                        continue;
     7190                                }
     7191                        }
     7192                        orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
     7193
     7194                // Any non-fx value stops us from restoring the original display value
     7195                } else {
     7196                        display = undefined;
     7197                }
     7198        }
     7199
     7200        if ( !jQuery.isEmptyObject( orig ) ) {
     7201                if ( dataShow ) {
     7202                        if ( "hidden" in dataShow ) {
     7203                                hidden = dataShow.hidden;
     7204                        }
     7205                } else {
     7206                        dataShow = jQuery._data( elem, "fxshow", {} );
     7207                }
     7208
     7209                // store state if its toggle - enables .stop().toggle() to "reverse"
     7210                if ( toggle ) {
     7211                        dataShow.hidden = !hidden;
     7212                }
     7213                if ( hidden ) {
     7214                        jQuery( elem ).show();
     7215                } else {
     7216                        anim.done(function() {
     7217                                jQuery( elem ).hide();
     7218                        });
     7219                }
     7220                anim.done(function() {
     7221                        var prop;
     7222                        jQuery._removeData( elem, "fxshow" );
     7223                        for ( prop in orig ) {
     7224                                jQuery.style( elem, prop, orig[ prop ] );
     7225                        }
     7226                });
     7227                for ( prop in orig ) {
     7228                        tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
     7229
     7230                        if ( !( prop in dataShow ) ) {
     7231                                dataShow[ prop ] = tween.start;
     7232                                if ( hidden ) {
     7233                                        tween.end = tween.start;
     7234                                        tween.start = prop === "width" || prop === "height" ? 1 : 0;
     7235                                }
     7236                        }
     7237                }
     7238
     7239        // If this is a noop like .hide().hide(), restore an overwritten display value
     7240        } else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) {
     7241                style.display = display;
     7242        }
     7243}
     7244
     7245function propFilter( props, specialEasing ) {
     7246        var index, name, easing, value, hooks;
     7247
     7248        // camelCase, specialEasing and expand cssHook pass
     7249        for ( index in props ) {
     7250                name = jQuery.camelCase( index );
     7251                easing = specialEasing[ name ];
     7252                value = props[ index ];
     7253                if ( jQuery.isArray( value ) ) {
     7254                        easing = value[ 1 ];
     7255                        value = props[ index ] = value[ 0 ];
     7256                }
     7257
     7258                if ( index !== name ) {
     7259                        props[ name ] = value;
     7260                        delete props[ index ];
     7261                }
     7262
     7263                hooks = jQuery.cssHooks[ name ];
     7264                if ( hooks && "expand" in hooks ) {
     7265                        value = hooks.expand( value );
     7266                        delete props[ name ];
     7267
     7268                        // not quite $.extend, this wont overwrite keys already present.
     7269                        // also - reusing 'index' from above because we have the correct "name"
     7270                        for ( index in value ) {
     7271                                if ( !( index in props ) ) {
     7272                                        props[ index ] = value[ index ];
     7273                                        specialEasing[ index ] = easing;
     7274                                }
     7275                        }
     7276                } else {
     7277                        specialEasing[ name ] = easing;
     7278                }
     7279        }
     7280}
     7281
     7282function Animation( elem, properties, options ) {
     7283        var result,
     7284                stopped,
     7285                index = 0,
     7286                length = animationPrefilters.length,
     7287                deferred = jQuery.Deferred().always( function() {
     7288                        // don't match elem in the :animated selector
     7289                        delete tick.elem;
     7290                }),
     7291                tick = function() {
     7292                        if ( stopped ) {
     7293                                return false;
     7294                        }
     7295                        var currentTime = fxNow || createFxNow(),
     7296                                remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
     7297                                // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
     7298                                temp = remaining / animation.duration || 0,
     7299                                percent = 1 - temp,
     7300                                index = 0,
     7301                                length = animation.tweens.length;
     7302
     7303                        for ( ; index < length ; index++ ) {
     7304                                animation.tweens[ index ].run( percent );
     7305                        }
     7306
     7307                        deferred.notifyWith( elem, [ animation, percent, remaining ]);
     7308
     7309                        if ( percent < 1 && length ) {
     7310                                return remaining;
     7311                        } else {
     7312                                deferred.resolveWith( elem, [ animation ] );
     7313                                return false;
     7314                        }
     7315                },
     7316                animation = deferred.promise({
     7317                        elem: elem,
     7318                        props: jQuery.extend( {}, properties ),
     7319                        opts: jQuery.extend( true, { specialEasing: {} }, options ),
     7320                        originalProperties: properties,
     7321                        originalOptions: options,
     7322                        startTime: fxNow || createFxNow(),
     7323                        duration: options.duration,
     7324                        tweens: [],
     7325                        createTween: function( prop, end ) {
     7326                                var tween = jQuery.Tween( elem, animation.opts, prop, end,
     7327                                                animation.opts.specialEasing[ prop ] || animation.opts.easing );
     7328                                animation.tweens.push( tween );
     7329                                return tween;
     7330                        },
     7331                        stop: function( gotoEnd ) {
     7332                                var index = 0,
     7333                                        // if we are going to the end, we want to run all the tweens
     7334                                        // otherwise we skip this part
     7335                                        length = gotoEnd ? animation.tweens.length : 0;
     7336                                if ( stopped ) {
     7337                                        return this;
     7338                                }
     7339                                stopped = true;
     7340                                for ( ; index < length ; index++ ) {
     7341                                        animation.tweens[ index ].run( 1 );
     7342                                }
     7343
     7344                                // resolve when we played the last frame
     7345                                // otherwise, reject
     7346                                if ( gotoEnd ) {
     7347                                        deferred.resolveWith( elem, [ animation, gotoEnd ] );
     7348                                } else {
     7349                                        deferred.rejectWith( elem, [ animation, gotoEnd ] );
     7350                                }
     7351                                return this;
     7352                        }
     7353                }),
     7354                props = animation.props;
     7355
     7356        propFilter( props, animation.opts.specialEasing );
     7357
     7358        for ( ; index < length ; index++ ) {
     7359                result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
     7360                if ( result ) {
     7361                        return result;
     7362                }
     7363        }
     7364
     7365        jQuery.map( props, createTween, animation );
     7366
     7367        if ( jQuery.isFunction( animation.opts.start ) ) {
     7368                animation.opts.start.call( elem, animation );
     7369        }
     7370
     7371        jQuery.fx.timer(
     7372                jQuery.extend( tick, {
     7373                        elem: elem,
     7374                        anim: animation,
     7375                        queue: animation.opts.queue
     7376                })
     7377        );
     7378
     7379        // attach callbacks from options
     7380        return animation.progress( animation.opts.progress )
     7381                .done( animation.opts.done, animation.opts.complete )
     7382                .fail( animation.opts.fail )
     7383                .always( animation.opts.always );
     7384}
     7385
     7386jQuery.Animation = jQuery.extend( Animation, {
     7387        tweener: function( props, callback ) {
     7388                if ( jQuery.isFunction( props ) ) {
     7389                        callback = props;
     7390                        props = [ "*" ];
     7391                } else {
     7392                        props = props.split(" ");
     7393                }
     7394
     7395                var prop,
     7396                        index = 0,
     7397                        length = props.length;
     7398
     7399                for ( ; index < length ; index++ ) {
     7400                        prop = props[ index ];
     7401                        tweeners[ prop ] = tweeners[ prop ] || [];
     7402                        tweeners[ prop ].unshift( callback );
     7403                }
     7404        },
     7405
     7406        prefilter: function( callback, prepend ) {
     7407                if ( prepend ) {
     7408                        animationPrefilters.unshift( callback );
     7409                } else {
     7410                        animationPrefilters.push( callback );
     7411                }
     7412        }
     7413});
     7414
     7415jQuery.speed = function( speed, easing, fn ) {
     7416        var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
     7417                complete: fn || !fn && easing ||
     7418                        jQuery.isFunction( speed ) && speed,
     7419                duration: speed,
     7420                easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
     7421        };
     7422
     7423        opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
     7424                opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
     7425
     7426        // normalize opt.queue - true/undefined/null -> "fx"
     7427        if ( opt.queue == null || opt.queue === true ) {
     7428                opt.queue = "fx";
     7429        }
     7430
     7431        // Queueing
     7432        opt.old = opt.complete;
     7433
     7434        opt.complete = function() {
     7435                if ( jQuery.isFunction( opt.old ) ) {
     7436                        opt.old.call( this );
     7437                }
     7438
     7439                if ( opt.queue ) {
     7440                        jQuery.dequeue( this, opt.queue );
     7441                }
     7442        };
     7443
     7444        return opt;
     7445};
     7446
     7447jQuery.fn.extend({
     7448        fadeTo: function( speed, to, easing, callback ) {
     7449
     7450                // show any hidden elements after setting opacity to 0
     7451                return this.filter( isHidden ).css( "opacity", 0 ).show()
     7452
     7453                        // animate to the value specified
     7454                        .end().animate({ opacity: to }, speed, easing, callback );
     7455        },
     7456        animate: function( prop, speed, easing, callback ) {
     7457                var empty = jQuery.isEmptyObject( prop ),
     7458                        optall = jQuery.speed( speed, easing, callback ),
     7459                        doAnimation = function() {
     7460                                // Operate on a copy of prop so per-property easing won't be lost
     7461                                var anim = Animation( this, jQuery.extend( {}, prop ), optall );
     7462
     7463                                // Empty animations, or finishing resolves immediately
     7464                                if ( empty || jQuery._data( this, "finish" ) ) {
     7465                                        anim.stop( true );
     7466                                }
     7467                        };
     7468                        doAnimation.finish = doAnimation;
     7469
     7470                return empty || optall.queue === false ?
     7471                        this.each( doAnimation ) :
     7472                        this.queue( optall.queue, doAnimation );
     7473        },
     7474        stop: function( type, clearQueue, gotoEnd ) {
     7475                var stopQueue = function( hooks ) {
     7476                        var stop = hooks.stop;
     7477                        delete hooks.stop;
     7478                        stop( gotoEnd );
     7479                };
     7480
     7481                if ( typeof type !== "string" ) {
     7482                        gotoEnd = clearQueue;
     7483                        clearQueue = type;
     7484                        type = undefined;
     7485                }
     7486                if ( clearQueue && type !== false ) {
     7487                        this.queue( type || "fx", [] );
     7488                }
     7489
     7490                return this.each(function() {
     7491                        var dequeue = true,
     7492                                index = type != null && type + "queueHooks",
     7493                                timers = jQuery.timers,
     7494                                data = jQuery._data( this );
     7495
     7496                        if ( index ) {
     7497                                if ( data[ index ] && data[ index ].stop ) {
     7498                                        stopQueue( data[ index ] );
     7499                                }
     7500                        } else {
     7501                                for ( index in data ) {
     7502                                        if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
     7503                                                stopQueue( data[ index ] );
     7504                                        }
     7505                                }
     7506                        }
     7507
     7508                        for ( index = timers.length; index--; ) {
     7509                                if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
     7510                                        timers[ index ].anim.stop( gotoEnd );
     7511                                        dequeue = false;
     7512                                        timers.splice( index, 1 );
     7513                                }
     7514                        }
     7515
     7516                        // start the next in the queue if the last step wasn't forced
     7517                        // timers currently will call their complete callbacks, which will dequeue
     7518                        // but only if they were gotoEnd
     7519                        if ( dequeue || !gotoEnd ) {
     7520                                jQuery.dequeue( this, type );
     7521                        }
     7522                });
     7523        },
     7524        finish: function( type ) {
     7525                if ( type !== false ) {
     7526                        type = type || "fx";
     7527                }
     7528                return this.each(function() {
     7529                        var index,
     7530                                data = jQuery._data( this ),
     7531                                queue = data[ type + "queue" ],
     7532                                hooks = data[ type + "queueHooks" ],
     7533                                timers = jQuery.timers,
     7534                                length = queue ? queue.length : 0;
     7535
     7536                        // enable finishing flag on private data
     7537                        data.finish = true;
     7538
     7539                        // empty the queue first
     7540                        jQuery.queue( this, type, [] );
     7541
     7542                        if ( hooks && hooks.stop ) {
     7543                                hooks.stop.call( this, true );
     7544                        }
     7545
     7546                        // look for any active animations, and finish them
     7547                        for ( index = timers.length; index--; ) {
     7548                                if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
     7549                                        timers[ index ].anim.stop( true );
     7550                                        timers.splice( index, 1 );
     7551                                }
     7552                        }
     7553
     7554                        // look for any animations in the old queue and finish them
     7555                        for ( index = 0; index < length; index++ ) {
     7556                                if ( queue[ index ] && queue[ index ].finish ) {
     7557                                        queue[ index ].finish.call( this );
     7558                                }
     7559                        }
     7560
     7561                        // turn off finishing flag
     7562                        delete data.finish;
     7563                });
     7564        }
     7565});
     7566
     7567jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
     7568        var cssFn = jQuery.fn[ name ];
     7569        jQuery.fn[ name ] = function( speed, easing, callback ) {
     7570                return speed == null || typeof speed === "boolean" ?
     7571                        cssFn.apply( this, arguments ) :
     7572                        this.animate( genFx( name, true ), speed, easing, callback );
     7573        };
     7574});
     7575
     7576// Generate shortcuts for custom animations
     7577jQuery.each({
     7578        slideDown: genFx("show"),
     7579        slideUp: genFx("hide"),
     7580        slideToggle: genFx("toggle"),
     7581        fadeIn: { opacity: "show" },
     7582        fadeOut: { opacity: "hide" },
     7583        fadeToggle: { opacity: "toggle" }
     7584}, function( name, props ) {
     7585        jQuery.fn[ name ] = function( speed, easing, callback ) {
     7586                return this.animate( props, speed, easing, callback );
     7587        };
     7588});
     7589
     7590jQuery.timers = [];
     7591jQuery.fx.tick = function() {
     7592        var timer,
     7593                timers = jQuery.timers,
     7594                i = 0;
     7595
     7596        fxNow = jQuery.now();
     7597
     7598        for ( ; i < timers.length; i++ ) {
     7599                timer = timers[ i ];
     7600                // Checks the timer has not already been removed
     7601                if ( !timer() && timers[ i ] === timer ) {
     7602                        timers.splice( i--, 1 );
     7603                }
     7604        }
     7605
     7606        if ( !timers.length ) {
     7607                jQuery.fx.stop();
     7608        }
     7609        fxNow = undefined;
     7610};
     7611
     7612jQuery.fx.timer = function( timer ) {
     7613        jQuery.timers.push( timer );
     7614        if ( timer() ) {
     7615                jQuery.fx.start();
     7616        } else {
     7617                jQuery.timers.pop();
     7618        }
     7619};
     7620
     7621jQuery.fx.interval = 13;
     7622
     7623jQuery.fx.start = function() {
     7624        if ( !timerId ) {
     7625                timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
     7626        }
     7627};
     7628
     7629jQuery.fx.stop = function() {
     7630        clearInterval( timerId );
     7631        timerId = null;
     7632};
     7633
     7634jQuery.fx.speeds = {
     7635        slow: 600,
     7636        fast: 200,
     7637        // Default speed
     7638        _default: 400
     7639};
     7640
     7641
     7642// Based off of the plugin by Clint Helfers, with permission.
     7643// http://blindsignals.com/index.php/2009/07/jquery-delay/
     7644jQuery.fn.delay = function( time, type ) {
     7645        time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
     7646        type = type || "fx";
     7647
     7648        return this.queue( type, function( next, hooks ) {
     7649                var timeout = setTimeout( next, time );
     7650                hooks.stop = function() {
     7651                        clearTimeout( timeout );
     7652                };
     7653        });
     7654};
     7655
     7656
     7657(function() {
     7658        // Minified: var a,b,c,d,e
     7659        var input, div, select, a, opt;
     7660
     7661        // Setup
     7662        div = document.createElement( "div" );
     7663        div.setAttribute( "className", "t" );
     7664        div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
     7665        a = div.getElementsByTagName("a")[ 0 ];
     7666
     7667        // First batch of tests.
     7668        select = document.createElement("select");
     7669        opt = select.appendChild( document.createElement("option") );
     7670        input = div.getElementsByTagName("input")[ 0 ];
     7671
     7672        a.style.cssText = "top:1px";
     7673
     7674        // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
     7675        support.getSetAttribute = div.className !== "t";
     7676
     7677        // Get the style information from getAttribute
     7678        // (IE uses .cssText instead)
     7679        support.style = /top/.test( a.getAttribute("style") );
     7680
     7681        // Make sure that URLs aren't manipulated
     7682        // (IE normalizes it by default)
     7683        support.hrefNormalized = a.getAttribute("href") === "/a";
     7684
     7685        // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
     7686        support.checkOn = !!input.value;
     7687
     7688        // Make sure that a selected-by-default option has a working selected property.
     7689        // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
     7690        support.optSelected = opt.selected;
     7691
     7692        // Tests for enctype support on a form (#6743)
     7693        support.enctype = !!document.createElement("form").enctype;
     7694
     7695        // Make sure that the options inside disabled selects aren't marked as disabled
     7696        // (WebKit marks them as disabled)
     7697        select.disabled = true;
     7698        support.optDisabled = !opt.disabled;
     7699
     7700        // Support: IE8 only
     7701        // Check if we can trust getAttribute("value")
     7702        input = document.createElement( "input" );
     7703        input.setAttribute( "value", "" );
     7704        support.input = input.getAttribute( "value" ) === "";
     7705
     7706        // Check if an input maintains its value after becoming a radio
     7707        input.value = "t";
     7708        input.setAttribute( "type", "radio" );
     7709        support.radioValue = input.value === "t";
     7710})();
     7711
     7712
     7713var rreturn = /\r/g;
     7714
     7715jQuery.fn.extend({
     7716        val: function( value ) {
     7717                var hooks, ret, isFunction,
     7718                        elem = this[0];
     7719
     7720                if ( !arguments.length ) {
     7721                        if ( elem ) {
     7722                                hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
     7723
     7724                                if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
     7725                                        return ret;
     7726                                }
     7727
     7728                                ret = elem.value;
     7729
     7730                                return typeof ret === "string" ?
     7731                                        // handle most common string cases
     7732                                        ret.replace(rreturn, "") :
     7733                                        // handle cases where value is null/undef or number
     7734                                        ret == null ? "" : ret;
     7735                        }
     7736
     7737                        return;
     7738                }
     7739
     7740                isFunction = jQuery.isFunction( value );
     7741
     7742                return this.each(function( i ) {
     7743                        var val;
     7744
     7745                        if ( this.nodeType !== 1 ) {
     7746                                return;
     7747                        }
     7748
     7749                        if ( isFunction ) {
     7750                                val = value.call( this, i, jQuery( this ).val() );
     7751                        } else {
     7752                                val = value;
     7753                        }
     7754
     7755                        // Treat null/undefined as ""; convert numbers to string
     7756                        if ( val == null ) {
     7757                                val = "";
     7758                        } else if ( typeof val === "number" ) {
     7759                                val += "";
     7760                        } else if ( jQuery.isArray( val ) ) {
     7761                                val = jQuery.map( val, function( value ) {
     7762                                        return value == null ? "" : value + "";
     7763                                });
     7764                        }
     7765
     7766                        hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
     7767
     7768                        // If set returns undefined, fall back to normal setting
     7769                        if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
     7770                                this.value = val;
     7771                        }
     7772                });
     7773        }
     7774});
     7775
     7776jQuery.extend({
     7777        valHooks: {
     7778                option: {
     7779                        get: function( elem ) {
     7780                                var val = jQuery.find.attr( elem, "value" );
     7781                                return val != null ?
     7782                                        val :
     7783                                        // Support: IE10-11+
     7784                                        // option.text throws exceptions (#14686, #14858)
     7785                                        jQuery.trim( jQuery.text( elem ) );
     7786                        }
     7787                },
     7788                select: {
     7789                        get: function( elem ) {
     7790                                var value, option,
     7791                                        options = elem.options,
     7792                                        index = elem.selectedIndex,
     7793                                        one = elem.type === "select-one" || index < 0,
     7794                                        values = one ? null : [],
     7795                                        max = one ? index + 1 : options.length,
     7796                                        i = index < 0 ?
     7797                                                max :
     7798                                                one ? index : 0;
     7799
     7800                                // Loop through all the selected options
     7801                                for ( ; i < max; i++ ) {
     7802                                        option = options[ i ];
     7803
     7804                                        // oldIE doesn't update selected after form reset (#2551)
     7805                                        if ( ( option.selected || i === index ) &&
     7806                                                        // Don't return options that are disabled or in a disabled optgroup
     7807                                                        ( support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
     7808                                                        ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
     7809
     7810                                                // Get the specific value for the option
     7811                                                value = jQuery( option ).val();
     7812
     7813                                                // We don't need an array for one selects
     7814                                                if ( one ) {
     7815                                                        return value;
     7816                                                }
     7817
     7818                                                // Multi-Selects return an array
     7819                                                values.push( value );
     7820                                        }
     7821                                }
     7822
     7823                                return values;
     7824                        },
     7825
     7826                        set: function( elem, value ) {
     7827                                var optionSet, option,
     7828                                        options = elem.options,
     7829                                        values = jQuery.makeArray( value ),
     7830                                        i = options.length;
     7831
     7832                                while ( i-- ) {
     7833                                        option = options[ i ];
     7834
     7835                                        if ( jQuery.inArray( jQuery.valHooks.option.get( option ), values ) >= 0 ) {
     7836
     7837                                                // Support: IE6
     7838                                                // When new option element is added to select box we need to
     7839                                                // force reflow of newly added node in order to workaround delay
     7840                                                // of initialization properties
     7841                                                try {
     7842                                                        option.selected = optionSet = true;
     7843
     7844                                                } catch ( _ ) {
     7845
     7846                                                        // Will be executed only in IE6
     7847                                                        option.scrollHeight;
     7848                                                }
     7849
     7850                                        } else {
     7851                                                option.selected = false;
     7852                                        }
     7853                                }
     7854
     7855                                // Force browsers to behave consistently when non-matching value is set
     7856                                if ( !optionSet ) {
     7857                                        elem.selectedIndex = -1;
     7858                                }
     7859
     7860                                return options;
     7861                        }
     7862                }
     7863        }
     7864});
     7865
     7866// Radios and checkboxes getter/setter
     7867jQuery.each([ "radio", "checkbox" ], function() {
     7868        jQuery.valHooks[ this ] = {
     7869                set: function( elem, value ) {
     7870                        if ( jQuery.isArray( value ) ) {
     7871                                return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
     7872                        }
     7873                }
     7874        };
     7875        if ( !support.checkOn ) {
     7876                jQuery.valHooks[ this ].get = function( elem ) {
     7877                        // Support: Webkit
     7878                        // "" is returned instead of "on" if a value isn't specified
     7879                        return elem.getAttribute("value") === null ? "on" : elem.value;
     7880                };
     7881        }
     7882});
     7883
     7884
     7885
     7886
     7887var nodeHook, boolHook,
     7888        attrHandle = jQuery.expr.attrHandle,
     7889        ruseDefault = /^(?:checked|selected)$/i,
     7890        getSetAttribute = support.getSetAttribute,
     7891        getSetInput = support.input;
     7892
     7893jQuery.fn.extend({
     7894        attr: function( name, value ) {
     7895                return access( this, jQuery.attr, name, value, arguments.length > 1 );
     7896        },
     7897
     7898        removeAttr: function( name ) {
     7899                return this.each(function() {
     7900                        jQuery.removeAttr( this, name );
     7901                });
     7902        }
     7903});
     7904
     7905jQuery.extend({
     7906        attr: function( elem, name, value ) {
     7907                var hooks, ret,
     7908                        nType = elem.nodeType;
     7909
     7910                // don't get/set attributes on text, comment and attribute nodes
     7911                if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
     7912                        return;
     7913                }
     7914
     7915                // Fallback to prop when attributes are not supported
     7916                if ( typeof elem.getAttribute === strundefined ) {
     7917                        return jQuery.prop( elem, name, value );
     7918                }
     7919
     7920                // All attributes are lowercase
     7921                // Grab necessary hook if one is defined
     7922                if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
     7923                        name = name.toLowerCase();
     7924                        hooks = jQuery.attrHooks[ name ] ||
     7925                                ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
     7926                }
     7927
     7928                if ( value !== undefined ) {
     7929
     7930                        if ( value === null ) {
     7931                                jQuery.removeAttr( elem, name );
     7932
     7933                        } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
     7934                                return ret;
     7935
     7936                        } else {
     7937                                elem.setAttribute( name, value + "" );
     7938                                return value;
     7939                        }
     7940
     7941                } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
     7942                        return ret;
     7943
     7944                } else {
     7945                        ret = jQuery.find.attr( elem, name );
     7946
     7947                        // Non-existent attributes return null, we normalize to undefined
     7948                        return ret == null ?
     7949                                undefined :
     7950                                ret;
     7951                }
     7952        },
     7953
     7954        removeAttr: function( elem, value ) {
     7955                var name, propName,
     7956                        i = 0,
     7957                        attrNames = value && value.match( rnotwhite );
     7958
     7959                if ( attrNames && elem.nodeType === 1 ) {
     7960                        while ( (name = attrNames[i++]) ) {
     7961                                propName = jQuery.propFix[ name ] || name;
     7962
     7963                                // Boolean attributes get special treatment (#10870)
     7964                                if ( jQuery.expr.match.bool.test( name ) ) {
     7965                                        // Set corresponding property to false
     7966                                        if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
     7967                                                elem[ propName ] = false;
     7968                                        // Support: IE<9
     7969                                        // Also clear defaultChecked/defaultSelected (if appropriate)
     7970                                        } else {
     7971                                                elem[ jQuery.camelCase( "default-" + name ) ] =
     7972                                                        elem[ propName ] = false;
     7973                                        }
     7974
     7975                                // See #9699 for explanation of this approach (setting first, then removal)
     7976                                } else {
     7977                                        jQuery.attr( elem, name, "" );
     7978                                }
     7979
     7980                                elem.removeAttribute( getSetAttribute ? name : propName );
     7981                        }
     7982                }
     7983        },
     7984
     7985        attrHooks: {
     7986                type: {
     7987                        set: function( elem, value ) {
     7988                                if ( !support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
     7989                                        // Setting the type on a radio button after the value resets the value in IE6-9
     7990                                        // Reset value to default in case type is set after value during creation
     7991                                        var val = elem.value;
     7992                                        elem.setAttribute( "type", value );
     7993                                        if ( val ) {
     7994                                                elem.value = val;
     7995                                        }
     7996                                        return value;
     7997                                }
     7998                        }
     7999                }
     8000        }
     8001});
     8002
     8003// Hook for boolean attributes
     8004boolHook = {
     8005        set: function( elem, value, name ) {
     8006                if ( value === false ) {
     8007                        // Remove boolean attributes when set to false
     8008                        jQuery.removeAttr( elem, name );
     8009                } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
     8010                        // IE<8 needs the *property* name
     8011                        elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
     8012
     8013                // Use defaultChecked and defaultSelected for oldIE
     8014                } else {
     8015                        elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
     8016                }
     8017
     8018                return name;
     8019        }
     8020};
     8021
     8022// Retrieve booleans specially
     8023jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
     8024
     8025        var getter = attrHandle[ name ] || jQuery.find.attr;
     8026
     8027        attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?
     8028                function( elem, name, isXML ) {
     8029                        var ret, handle;
     8030                        if ( !isXML ) {
     8031                                // Avoid an infinite loop by temporarily removing this function from the getter
     8032                                handle = attrHandle[ name ];
     8033                                attrHandle[ name ] = ret;
     8034                                ret = getter( elem, name, isXML ) != null ?
     8035                                        name.toLowerCase() :
     8036                                        null;
     8037                                attrHandle[ name ] = handle;
     8038                        }
     8039                        return ret;
     8040                } :
     8041                function( elem, name, isXML ) {
     8042                        if ( !isXML ) {
     8043                                return elem[ jQuery.camelCase( "default-" + name ) ] ?
     8044                                        name.toLowerCase() :
     8045                                        null;
     8046                        }
     8047                };
     8048});
     8049
     8050// fix oldIE attroperties
     8051if ( !getSetInput || !getSetAttribute ) {
     8052        jQuery.attrHooks.value = {
     8053                set: function( elem, value, name ) {
     8054                        if ( jQuery.nodeName( elem, "input" ) ) {
     8055                                // Does not return so that setAttribute is also used
     8056                                elem.defaultValue = value;
     8057                        } else {
     8058                                // Use nodeHook if defined (#1954); otherwise setAttribute is fine
     8059                                return nodeHook && nodeHook.set( elem, value, name );
     8060                        }
     8061                }
     8062        };
     8063}
     8064
     8065// IE6/7 do not support getting/setting some attributes with get/setAttribute
     8066if ( !getSetAttribute ) {
     8067
     8068        // Use this for any attribute in IE6/7
     8069        // This fixes almost every IE6/7 issue
     8070        nodeHook = {
     8071                set: function( elem, value, name ) {
     8072                        // Set the existing or create a new attribute node
     8073                        var ret = elem.getAttributeNode( name );
     8074                        if ( !ret ) {
     8075                                elem.setAttributeNode(
     8076                                        (ret = elem.ownerDocument.createAttribute( name ))
     8077                                );
     8078                        }
     8079
     8080                        ret.value = value += "";
     8081
     8082                        // Break association with cloned elements by also using setAttribute (#9646)
     8083                        if ( name === "value" || value === elem.getAttribute( name ) ) {
     8084                                return value;
     8085                        }
     8086                }
     8087        };
     8088
     8089        // Some attributes are constructed with empty-string values when not defined
     8090        attrHandle.id = attrHandle.name = attrHandle.coords =
     8091                function( elem, name, isXML ) {
     8092                        var ret;
     8093                        if ( !isXML ) {
     8094                                return (ret = elem.getAttributeNode( name )) && ret.value !== "" ?
     8095                                        ret.value :
     8096                                        null;
     8097                        }
     8098                };
     8099
     8100        // Fixing value retrieval on a button requires this module
     8101        jQuery.valHooks.button = {
     8102                get: function( elem, name ) {
     8103                        var ret = elem.getAttributeNode( name );
     8104                        if ( ret && ret.specified ) {
     8105                                return ret.value;
     8106                        }
     8107                },
     8108                set: nodeHook.set
     8109        };
     8110
     8111        // Set contenteditable to false on removals(#10429)
     8112        // Setting to empty string throws an error as an invalid value
     8113        jQuery.attrHooks.contenteditable = {
     8114                set: function( elem, value, name ) {
     8115                        nodeHook.set( elem, value === "" ? false : value, name );
     8116                }
     8117        };
     8118
     8119        // Set width and height to auto instead of 0 on empty string( Bug #8150 )
     8120        // This is for removals
     8121        jQuery.each([ "width", "height" ], function( i, name ) {
     8122                jQuery.attrHooks[ name ] = {
     8123                        set: function( elem, value ) {
     8124                                if ( value === "" ) {
     8125                                        elem.setAttribute( name, "auto" );
     8126                                        return value;
     8127                                }
     8128                        }
     8129                };
     8130        });
     8131}
     8132
     8133if ( !support.style ) {
     8134        jQuery.attrHooks.style = {
     8135                get: function( elem ) {
     8136                        // Return undefined in the case of empty string
     8137                        // Note: IE uppercases css property names, but if we were to .toLowerCase()
     8138                        // .cssText, that would destroy case senstitivity in URL's, like in "background"
     8139                        return elem.style.cssText || undefined;
     8140                },
     8141                set: function( elem, value ) {
     8142                        return ( elem.style.cssText = value + "" );
     8143                }
     8144        };
     8145}
     8146
     8147
     8148
     8149
     8150var rfocusable = /^(?:input|select|textarea|button|object)$/i,
     8151        rclickable = /^(?:a|area)$/i;
     8152
     8153jQuery.fn.extend({
     8154        prop: function( name, value ) {
     8155                return access( this, jQuery.prop, name, value, arguments.length > 1 );
     8156        },
     8157
     8158        removeProp: function( name ) {
     8159                name = jQuery.propFix[ name ] || name;
     8160                return this.each(function() {
     8161                        // try/catch handles cases where IE balks (such as removing a property on window)
     8162                        try {
     8163                                this[ name ] = undefined;
     8164                                delete this[ name ];
     8165                        } catch( e ) {}
     8166                });
     8167        }
     8168});
     8169
     8170jQuery.extend({
     8171        propFix: {
     8172                "for": "htmlFor",
     8173                "class": "className"
     8174        },
     8175
     8176        prop: function( elem, name, value ) {
     8177                var ret, hooks, notxml,
     8178                        nType = elem.nodeType;
     8179
     8180                // don't get/set properties on text, comment and attribute nodes
     8181                if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
     8182                        return;
     8183                }
     8184
     8185                notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
     8186
     8187                if ( notxml ) {
     8188                        // Fix name and attach hooks
     8189                        name = jQuery.propFix[ name ] || name;
     8190                        hooks = jQuery.propHooks[ name ];
     8191                }
     8192
     8193                if ( value !== undefined ) {
     8194                        return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
     8195                                ret :
     8196                                ( elem[ name ] = value );
     8197
     8198                } else {
     8199                        return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
     8200                                ret :
     8201                                elem[ name ];
     8202                }
     8203        },
     8204
     8205        propHooks: {
     8206                tabIndex: {
     8207                        get: function( elem ) {
     8208                                // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
     8209                                // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
     8210                                // Use proper attribute retrieval(#12072)
     8211                                var tabindex = jQuery.find.attr( elem, "tabindex" );
     8212
     8213                                return tabindex ?
     8214                                        parseInt( tabindex, 10 ) :
     8215                                        rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
     8216                                                0 :
     8217                                                -1;
     8218                        }
     8219                }
     8220        }
     8221});
     8222
     8223// Some attributes require a special call on IE
     8224// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
     8225if ( !support.hrefNormalized ) {
     8226        // href/src property should get the full normalized URL (#10299/#12915)
     8227        jQuery.each([ "href", "src" ], function( i, name ) {
     8228                jQuery.propHooks[ name ] = {
     8229                        get: function( elem ) {
     8230                                return elem.getAttribute( name, 4 );
     8231                        }
     8232                };
     8233        });
     8234}
     8235
     8236// Support: Safari, IE9+
     8237// mis-reports the default selected property of an option
     8238// Accessing the parent's selectedIndex property fixes it
     8239if ( !support.optSelected ) {
     8240        jQuery.propHooks.selected = {
     8241                get: function( elem ) {
     8242                        var parent = elem.parentNode;
     8243
     8244                        if ( parent ) {
     8245                                parent.selectedIndex;
     8246
     8247                                // Make sure that it also works with optgroups, see #5701
     8248                                if ( parent.parentNode ) {
     8249                                        parent.parentNode.selectedIndex;
     8250                                }
     8251                        }
     8252                        return null;
     8253                }
     8254        };
     8255}
     8256
     8257jQuery.each([
     8258        "tabIndex",
     8259        "readOnly",
     8260        "maxLength",
     8261        "cellSpacing",
     8262        "cellPadding",
     8263        "rowSpan",
     8264        "colSpan",
     8265        "useMap",
     8266        "frameBorder",
     8267        "contentEditable"
     8268], function() {
     8269        jQuery.propFix[ this.toLowerCase() ] = this;
     8270});
     8271
     8272// IE6/7 call enctype encoding
     8273if ( !support.enctype ) {
     8274        jQuery.propFix.enctype = "encoding";
     8275}
     8276
     8277
     8278
     8279
     8280var rclass = /[\t\r\n\f]/g;
     8281
     8282jQuery.fn.extend({
     8283        addClass: function( value ) {
     8284                var classes, elem, cur, clazz, j, finalValue,
     8285                        i = 0,
     8286                        len = this.length,
     8287                        proceed = typeof value === "string" && value;
     8288
     8289                if ( jQuery.isFunction( value ) ) {
     8290                        return this.each(function( j ) {
     8291                                jQuery( this ).addClass( value.call( this, j, this.className ) );
     8292                        });
     8293                }
     8294
     8295                if ( proceed ) {
     8296                        // The disjunction here is for better compressibility (see removeClass)
     8297                        classes = ( value || "" ).match( rnotwhite ) || [];
     8298
     8299                        for ( ; i < len; i++ ) {
     8300                                elem = this[ i ];
     8301                                cur = elem.nodeType === 1 && ( elem.className ?
     8302                                        ( " " + elem.className + " " ).replace( rclass, " " ) :
     8303                                        " "
     8304                                );
     8305
     8306                                if ( cur ) {
     8307                                        j = 0;
     8308                                        while ( (clazz = classes[j++]) ) {
     8309                                                if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
     8310                                                        cur += clazz + " ";
     8311                                                }
     8312                                        }
     8313
     8314                                        // only assign if different to avoid unneeded rendering.
     8315                                        finalValue = jQuery.trim( cur );
     8316                                        if ( elem.className !== finalValue ) {
     8317                                                elem.className = finalValue;
     8318                                        }
     8319                                }
     8320                        }
     8321                }
     8322
     8323                return this;
     8324        },
     8325
     8326        removeClass: function( value ) {
     8327                var classes, elem, cur, clazz, j, finalValue,
     8328                        i = 0,
     8329                        len = this.length,
     8330                        proceed = arguments.length === 0 || typeof value === "string" && value;
     8331
     8332                if ( jQuery.isFunction( value ) ) {
     8333                        return this.each(function( j ) {
     8334                                jQuery( this ).removeClass( value.call( this, j, this.className ) );
     8335                        });
     8336                }
     8337                if ( proceed ) {
     8338                        classes = ( value || "" ).match( rnotwhite ) || [];
     8339
     8340                        for ( ; i < len; i++ ) {
     8341                                elem = this[ i ];
     8342                                // This expression is here for better compressibility (see addClass)
     8343                                cur = elem.nodeType === 1 && ( elem.className ?
     8344                                        ( " " + elem.className + " " ).replace( rclass, " " ) :
     8345                                        ""
     8346                                );
     8347
     8348                                if ( cur ) {
     8349                                        j = 0;
     8350                                        while ( (clazz = classes[j++]) ) {
     8351                                                // Remove *all* instances
     8352                                                while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
     8353                                                        cur = cur.replace( " " + clazz + " ", " " );
     8354                                                }
     8355                                        }
     8356
     8357                                        // only assign if different to avoid unneeded rendering.
     8358                                        finalValue = value ? jQuery.trim( cur ) : "";
     8359                                        if ( elem.className !== finalValue ) {
     8360                                                elem.className = finalValue;
     8361                                        }
     8362                                }
     8363                        }
     8364                }
     8365
     8366                return this;
     8367        },
     8368
     8369        toggleClass: function( value, stateVal ) {
     8370                var type = typeof value;
     8371
     8372                if ( typeof stateVal === "boolean" && type === "string" ) {
     8373                        return stateVal ? this.addClass( value ) : this.removeClass( value );
     8374                }
     8375
     8376                if ( jQuery.isFunction( value ) ) {
     8377                        return this.each(function( i ) {
     8378                                jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
     8379                        });
     8380                }
     8381
     8382                return this.each(function() {
     8383                        if ( type === "string" ) {
     8384                                // toggle individual class names
     8385                                var className,
     8386                                        i = 0,
     8387                                        self = jQuery( this ),
     8388                                        classNames = value.match( rnotwhite ) || [];
     8389
     8390                                while ( (className = classNames[ i++ ]) ) {
     8391                                        // check each className given, space separated list
     8392                                        if ( self.hasClass( className ) ) {
     8393                                                self.removeClass( className );
     8394                                        } else {
     8395                                                self.addClass( className );
     8396                                        }
     8397                                }
     8398
     8399                        // Toggle whole class name
     8400                        } else if ( type === strundefined || type === "boolean" ) {
     8401                                if ( this.className ) {
     8402                                        // store className if set
     8403                                        jQuery._data( this, "__className__", this.className );
     8404                                }
     8405
     8406                                // If the element has a class name or if we're passed "false",
     8407                                // then remove the whole classname (if there was one, the above saved it).
     8408                                // Otherwise bring back whatever was previously saved (if anything),
     8409                                // falling back to the empty string if nothing was stored.
     8410                                this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
     8411                        }
     8412                });
     8413        },
     8414
     8415        hasClass: function( selector ) {
     8416                var className = " " + selector + " ",
     8417                        i = 0,
     8418                        l = this.length;
     8419                for ( ; i < l; i++ ) {
     8420                        if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
     8421                                return true;
     8422                        }
     8423                }
     8424
     8425                return false;
     8426        }
     8427});
     8428
     8429
     8430
     8431
     8432// Return jQuery for attributes-only inclusion
     8433
     8434
     8435jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
     8436        "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
     8437        "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
     8438
     8439        // Handle event binding
     8440        jQuery.fn[ name ] = function( data, fn ) {
     8441                return arguments.length > 0 ?
     8442                        this.on( name, null, data, fn ) :
     8443                        this.trigger( name );
     8444        };
     8445});
     8446
     8447jQuery.fn.extend({
     8448        hover: function( fnOver, fnOut ) {
     8449                return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
     8450        },
     8451
     8452        bind: function( types, data, fn ) {
     8453                return this.on( types, null, data, fn );
     8454        },
     8455        unbind: function( types, fn ) {
     8456                return this.off( types, null, fn );
     8457        },
     8458
     8459        delegate: function( selector, types, data, fn ) {
     8460                return this.on( types, selector, data, fn );
     8461        },
     8462        undelegate: function( selector, types, fn ) {
     8463                // ( namespace ) or ( selector, types [, fn] )
     8464                return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
     8465        }
     8466});
     8467
     8468
     8469var nonce = jQuery.now();
     8470
     8471var rquery = (/\?/);
     8472
     8473
     8474
     8475var rvalidtokens = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
     8476
     8477jQuery.parseJSON = function( data ) {
     8478        // Attempt to parse using the native JSON parser first
     8479        if ( window.JSON && window.JSON.parse ) {
     8480                // Support: Android 2.3
     8481                // Workaround failure to string-cast null input
     8482                return window.JSON.parse( data + "" );
     8483        }
     8484
     8485        var requireNonComma,
     8486                depth = null,
     8487                str = jQuery.trim( data + "" );
     8488
     8489        // Guard against invalid (and possibly dangerous) input by ensuring that nothing remains
     8490        // after removing valid tokens
     8491        return str && !jQuery.trim( str.replace( rvalidtokens, function( token, comma, open, close ) {
     8492
     8493                // Force termination if we see a misplaced comma
     8494                if ( requireNonComma && comma ) {
     8495                        depth = 0;
     8496                }
     8497
     8498                // Perform no more replacements after returning to outermost depth
     8499                if ( depth === 0 ) {
     8500                        return token;
     8501                }
     8502
     8503                // Commas must not follow "[", "{", or ","
     8504                requireNonComma = open || comma;
     8505
     8506                // Determine new depth
     8507                // array/object open ("[" or "{"): depth += true - false (increment)
     8508                // array/object close ("]" or "}"): depth += false - true (decrement)
     8509                // other cases ("," or primitive): depth += true - true (numeric cast)
     8510                depth += !close - !open;
     8511
     8512                // Remove this token
     8513                return "";
     8514        }) ) ?
     8515                ( Function( "return " + str ) )() :
     8516                jQuery.error( "Invalid JSON: " + data );
     8517};
     8518
     8519
     8520// Cross-browser xml parsing
     8521jQuery.parseXML = function( data ) {
     8522        var xml, tmp;
     8523        if ( !data || typeof data !== "string" ) {
     8524                return null;
     8525        }
     8526        try {
     8527                if ( window.DOMParser ) { // Standard
     8528                        tmp = new DOMParser();
     8529                        xml = tmp.parseFromString( data, "text/xml" );
     8530                } else { // IE
     8531                        xml = new ActiveXObject( "Microsoft.XMLDOM" );
     8532                        xml.async = "false";
     8533                        xml.loadXML( data );
     8534                }
     8535        } catch( e ) {
     8536                xml = undefined;
     8537        }
     8538        if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
     8539                jQuery.error( "Invalid XML: " + data );
     8540        }
     8541        return xml;
     8542};
     8543
     8544
     8545var
     8546        // Document location
     8547        ajaxLocParts,
     8548        ajaxLocation,
     8549
     8550        rhash = /#.*$/,
     8551        rts = /([?&])_=[^&]*/,
     8552        rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
     8553        // #7653, #8125, #8152: local protocol detection
     8554        rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
     8555        rnoContent = /^(?:GET|HEAD)$/,
     8556        rprotocol = /^\/\//,
     8557        rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
     8558
     8559        /* Prefilters
     8560         * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
     8561         * 2) These are called:
     8562         *    - BEFORE asking for a transport
     8563         *    - AFTER param serialization (s.data is a string if s.processData is true)
     8564         * 3) key is the dataType
     8565         * 4) the catchall symbol "*" can be used
     8566         * 5) execution will start with transport dataType and THEN continue down to "*" if needed
     8567         */
     8568        prefilters = {},
     8569
     8570        /* Transports bindings
     8571         * 1) key is the dataType
     8572         * 2) the catchall symbol "*" can be used
     8573         * 3) selection will start with transport dataType and THEN go to "*" if needed
     8574         */
     8575        transports = {},
     8576
     8577        // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
     8578        allTypes = "*/".concat("*");
     8579
     8580// #8138, IE may throw an exception when accessing
     8581// a field from window.location if document.domain has been set
     8582try {
     8583        ajaxLocation = location.href;
     8584} catch( e ) {
     8585        // Use the href attribute of an A element
     8586        // since IE will modify it given document.location
     8587        ajaxLocation = document.createElement( "a" );
     8588        ajaxLocation.href = "";
     8589        ajaxLocation = ajaxLocation.href;
     8590}
     8591
     8592// Segment location into parts
     8593ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
     8594
     8595// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
     8596function addToPrefiltersOrTransports( structure ) {
     8597
     8598        // dataTypeExpression is optional and defaults to "*"
     8599        return function( dataTypeExpression, func ) {
     8600
     8601                if ( typeof dataTypeExpression !== "string" ) {
     8602                        func = dataTypeExpression;
     8603                        dataTypeExpression = "*";
     8604                }
     8605
     8606                var dataType,
     8607                        i = 0,
     8608                        dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
     8609
     8610                if ( jQuery.isFunction( func ) ) {
     8611                        // For each dataType in the dataTypeExpression
     8612                        while ( (dataType = dataTypes[i++]) ) {
     8613                                // Prepend if requested
     8614                                if ( dataType.charAt( 0 ) === "+" ) {
     8615                                        dataType = dataType.slice( 1 ) || "*";
     8616                                        (structure[ dataType ] = structure[ dataType ] || []).unshift( func );
     8617
     8618                                // Otherwise append
     8619                                } else {
     8620                                        (structure[ dataType ] = structure[ dataType ] || []).push( func );
     8621                                }
     8622                        }
     8623                }
     8624        };
     8625}
     8626
     8627// Base inspection function for prefilters and transports
     8628function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
     8629
     8630        var inspected = {},
     8631                seekingTransport = ( structure === transports );
     8632
     8633        function inspect( dataType ) {
     8634                var selected;
     8635                inspected[ dataType ] = true;
     8636                jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
     8637                        var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
     8638                        if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
     8639                                options.dataTypes.unshift( dataTypeOrTransport );
     8640                                inspect( dataTypeOrTransport );
     8641                                return false;
     8642                        } else if ( seekingTransport ) {
     8643                                return !( selected = dataTypeOrTransport );
     8644                        }
     8645                });
     8646                return selected;
     8647        }
     8648
     8649        return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
     8650}
     8651
     8652// A special extend for ajax options
     8653// that takes "flat" options (not to be deep extended)
     8654// Fixes #9887
     8655function ajaxExtend( target, src ) {
     8656        var deep, key,
     8657                flatOptions = jQuery.ajaxSettings.flatOptions || {};
     8658
     8659        for ( key in src ) {
     8660                if ( src[ key ] !== undefined ) {
     8661                        ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
     8662                }
     8663        }
     8664        if ( deep ) {
     8665                jQuery.extend( true, target, deep );
     8666        }
     8667
     8668        return target;
     8669}
     8670
     8671/* Handles responses to an ajax request:
     8672 * - finds the right dataType (mediates between content-type and expected dataType)
     8673 * - returns the corresponding response
     8674 */
     8675function ajaxHandleResponses( s, jqXHR, responses ) {
     8676        var firstDataType, ct, finalDataType, type,
     8677                contents = s.contents,
     8678                dataTypes = s.dataTypes;
     8679
     8680        // Remove auto dataType and get content-type in the process
     8681        while ( dataTypes[ 0 ] === "*" ) {
     8682                dataTypes.shift();
     8683                if ( ct === undefined ) {
     8684                        ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
     8685                }
     8686        }
     8687
     8688        // Check if we're dealing with a known content-type
     8689        if ( ct ) {
     8690                for ( type in contents ) {
     8691                        if ( contents[ type ] && contents[ type ].test( ct ) ) {
     8692                                dataTypes.unshift( type );
     8693                                break;
     8694                        }
     8695                }
     8696        }
     8697
     8698        // Check to see if we have a response for the expected dataType
     8699        if ( dataTypes[ 0 ] in responses ) {
     8700                finalDataType = dataTypes[ 0 ];
     8701        } else {
     8702                // Try convertible dataTypes
     8703                for ( type in responses ) {
     8704                        if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
     8705                                finalDataType = type;
     8706                                break;
     8707                        }
     8708                        if ( !firstDataType ) {
     8709                                firstDataType = type;
     8710                        }
     8711                }
     8712                // Or just use first one
     8713                finalDataType = finalDataType || firstDataType;
     8714        }
     8715
     8716        // If we found a dataType
     8717        // We add the dataType to the list if needed
     8718        // and return the corresponding response
     8719        if ( finalDataType ) {
     8720                if ( finalDataType !== dataTypes[ 0 ] ) {
     8721                        dataTypes.unshift( finalDataType );
     8722                }
     8723                return responses[ finalDataType ];
     8724        }
     8725}
     8726
     8727/* Chain conversions given the request and the original response
     8728 * Also sets the responseXXX fields on the jqXHR instance
     8729 */
     8730function ajaxConvert( s, response, jqXHR, isSuccess ) {
     8731        var conv2, current, conv, tmp, prev,
     8732                converters = {},
     8733                // Work with a copy of dataTypes in case we need to modify it for conversion
     8734                dataTypes = s.dataTypes.slice();
     8735
     8736        // Create converters map with lowercased keys
     8737        if ( dataTypes[ 1 ] ) {
     8738                for ( conv in s.converters ) {
     8739                        converters[ conv.toLowerCase() ] = s.converters[ conv ];
     8740                }
     8741        }
     8742
     8743        current = dataTypes.shift();
     8744
     8745        // Convert to each sequential dataType
     8746        while ( current ) {
     8747
     8748                if ( s.responseFields[ current ] ) {
     8749                        jqXHR[ s.responseFields[ current ] ] = response;
     8750                }
     8751
     8752                // Apply the dataFilter if provided
     8753                if ( !prev && isSuccess && s.dataFilter ) {
     8754                        response = s.dataFilter( response, s.dataType );
     8755                }
     8756
     8757                prev = current;
     8758                current = dataTypes.shift();
     8759
     8760                if ( current ) {
     8761
     8762                        // There's only work to do if current dataType is non-auto
     8763                        if ( current === "*" ) {
     8764
     8765                                current = prev;
     8766
     8767                        // Convert response if prev dataType is non-auto and differs from current
     8768                        } else if ( prev !== "*" && prev !== current ) {
     8769
     8770                                // Seek a direct converter
     8771                                conv = converters[ prev + " " + current ] || converters[ "* " + current ];
     8772
     8773                                // If none found, seek a pair
     8774                                if ( !conv ) {
     8775                                        for ( conv2 in converters ) {
     8776
     8777                                                // If conv2 outputs current
     8778                                                tmp = conv2.split( " " );
     8779                                                if ( tmp[ 1 ] === current ) {
     8780
     8781                                                        // If prev can be converted to accepted input
     8782                                                        conv = converters[ prev + " " + tmp[ 0 ] ] ||
     8783                                                                converters[ "* " + tmp[ 0 ] ];
     8784                                                        if ( conv ) {
     8785                                                                // Condense equivalence converters
     8786                                                                if ( conv === true ) {
     8787                                                                        conv = converters[ conv2 ];
     8788
     8789                                                                // Otherwise, insert the intermediate dataType
     8790                                                                } else if ( converters[ conv2 ] !== true ) {
     8791                                                                        current = tmp[ 0 ];
     8792                                                                        dataTypes.unshift( tmp[ 1 ] );
     8793                                                                }
     8794                                                                break;
     8795                                                        }
     8796                                                }
     8797                                        }
     8798                                }
     8799
     8800                                // Apply converter (if not an equivalence)
     8801                                if ( conv !== true ) {
     8802
     8803                                        // Unless errors are allowed to bubble, catch and return them
     8804                                        if ( conv && s[ "throws" ] ) {
     8805                                                response = conv( response );
     8806                                        } else {
     8807                                                try {
     8808                                                        response = conv( response );
     8809                                                } catch ( e ) {
     8810                                                        return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
     8811                                                }
     8812                                        }
     8813                                }
     8814                        }
     8815                }
     8816        }
     8817
     8818        return { state: "success", data: response };
     8819}
     8820
     8821jQuery.extend({
     8822
     8823        // Counter for holding the number of active queries
     8824        active: 0,
     8825
     8826        // Last-Modified header cache for next request
     8827        lastModified: {},
     8828        etag: {},
     8829
     8830        ajaxSettings: {
     8831                url: ajaxLocation,
     8832                type: "GET",
     8833                isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
     8834                global: true,
     8835                processData: true,
     8836                async: true,
     8837                contentType: "application/x-www-form-urlencoded; charset=UTF-8",
     8838                /*
     8839                timeout: 0,
     8840                data: null,
     8841                dataType: null,
     8842                username: null,
     8843                password: null,
     8844                cache: null,
     8845                throws: false,
     8846                traditional: false,
     8847                headers: {},
     8848                */
     8849
     8850                accepts: {
     8851                        "*": allTypes,
     8852                        text: "text/plain",
     8853                        html: "text/html",
     8854                        xml: "application/xml, text/xml",
     8855                        json: "application/json, text/javascript"
     8856                },
     8857
     8858                contents: {
     8859                        xml: /xml/,
     8860                        html: /html/,
     8861                        json: /json/
     8862                },
     8863
     8864                responseFields: {
     8865                        xml: "responseXML",
     8866                        text: "responseText",
     8867                        json: "responseJSON"
     8868                },
     8869
     8870                // Data converters
     8871                // Keys separate source (or catchall "*") and destination types with a single space
     8872                converters: {
     8873
     8874                        // Convert anything to text
     8875                        "* text": String,
     8876
     8877                        // Text to html (true = no transformation)
     8878                        "text html": true,
     8879
     8880                        // Evaluate text as a json expression
     8881                        "text json": jQuery.parseJSON,
     8882
     8883                        // Parse text as xml
     8884                        "text xml": jQuery.parseXML
     8885                },
     8886
     8887                // For options that shouldn't be deep extended:
     8888                // you can add your own custom options here if
     8889                // and when you create one that shouldn't be
     8890                // deep extended (see ajaxExtend)
     8891                flatOptions: {
     8892                        url: true,
     8893                        context: true
     8894                }
     8895        },
     8896
     8897        // Creates a full fledged settings object into target
     8898        // with both ajaxSettings and settings fields.
     8899        // If target is omitted, writes into ajaxSettings.
     8900        ajaxSetup: function( target, settings ) {
     8901                return settings ?
     8902
     8903                        // Building a settings object
     8904                        ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
     8905
     8906                        // Extending ajaxSettings
     8907                        ajaxExtend( jQuery.ajaxSettings, target );
     8908        },
     8909
     8910        ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
     8911        ajaxTransport: addToPrefiltersOrTransports( transports ),
     8912
     8913        // Main method
     8914        ajax: function( url, options ) {
     8915
     8916                // If url is an object, simulate pre-1.5 signature
     8917                if ( typeof url === "object" ) {
     8918                        options = url;
     8919                        url = undefined;
     8920                }
     8921
     8922                // Force options to be an object
     8923                options = options || {};
     8924
     8925                var // Cross-domain detection vars
     8926                        parts,
     8927                        // Loop variable
     8928                        i,
     8929                        // URL without anti-cache param
     8930                        cacheURL,
     8931                        // Response headers as string
     8932                        responseHeadersString,
     8933                        // timeout handle
     8934                        timeoutTimer,
     8935
     8936                        // To know if global events are to be dispatched
     8937                        fireGlobals,
     8938
     8939                        transport,
     8940                        // Response headers
     8941                        responseHeaders,
     8942                        // Create the final options object
     8943                        s = jQuery.ajaxSetup( {}, options ),
     8944                        // Callbacks context
     8945                        callbackContext = s.context || s,
     8946                        // Context for global events is callbackContext if it is a DOM node or jQuery collection
     8947                        globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
     8948                                jQuery( callbackContext ) :
     8949                                jQuery.event,
     8950                        // Deferreds
     8951                        deferred = jQuery.Deferred(),
     8952                        completeDeferred = jQuery.Callbacks("once memory"),
     8953                        // Status-dependent callbacks
     8954                        statusCode = s.statusCode || {},
     8955                        // Headers (they are sent all at once)
     8956                        requestHeaders = {},
     8957                        requestHeadersNames = {},
     8958                        // The jqXHR state
     8959                        state = 0,
     8960                        // Default abort message
     8961                        strAbort = "canceled",
     8962                        // Fake xhr
     8963                        jqXHR = {
     8964                                readyState: 0,
     8965
     8966                                // Builds headers hashtable if needed
     8967                                getResponseHeader: function( key ) {
     8968                                        var match;
     8969                                        if ( state === 2 ) {
     8970                                                if ( !responseHeaders ) {
     8971                                                        responseHeaders = {};
     8972                                                        while ( (match = rheaders.exec( responseHeadersString )) ) {
     8973                                                                responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
     8974                                                        }
     8975                                                }
     8976                                                match = responseHeaders[ key.toLowerCase() ];
     8977                                        }
     8978                                        return match == null ? null : match;
     8979                                },
     8980
     8981                                // Raw string
     8982                                getAllResponseHeaders: function() {
     8983                                        return state === 2 ? responseHeadersString : null;
     8984                                },
     8985
     8986                                // Caches the header
     8987                                setRequestHeader: function( name, value ) {
     8988                                        var lname = name.toLowerCase();
     8989                                        if ( !state ) {
     8990                                                name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
     8991                                                requestHeaders[ name ] = value;
     8992                                        }
     8993                                        return this;
     8994                                },
     8995
     8996                                // Overrides response content-type header
     8997                                overrideMimeType: function( type ) {
     8998                                        if ( !state ) {
     8999                                                s.mimeType = type;
     9000                                        }
     9001                                        return this;
     9002                                },
     9003
     9004                                // Status-dependent callbacks
     9005                                statusCode: function( map ) {
     9006                                        var code;
     9007                                        if ( map ) {
     9008                                                if ( state < 2 ) {
     9009                                                        for ( code in map ) {
     9010                                                                // Lazy-add the new callback in a way that preserves old ones
     9011                                                                statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
     9012                                                        }
     9013                                                } else {
     9014                                                        // Execute the appropriate callbacks
     9015                                                        jqXHR.always( map[ jqXHR.status ] );
     9016                                                }
     9017                                        }
     9018                                        return this;
     9019                                },
     9020
     9021                                // Cancel the request
     9022                                abort: function( statusText ) {
     9023                                        var finalText = statusText || strAbort;
     9024                                        if ( transport ) {
     9025                                                transport.abort( finalText );
     9026                                        }
     9027                                        done( 0, finalText );
     9028                                        return this;
     9029                                }
     9030                        };
     9031
     9032                // Attach deferreds
     9033                deferred.promise( jqXHR ).complete = completeDeferred.add;
     9034                jqXHR.success = jqXHR.done;
     9035                jqXHR.error = jqXHR.fail;
     9036
     9037                // Remove hash character (#7531: and string promotion)
     9038                // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
     9039                // Handle falsy url in the settings object (#10093: consistency with old signature)
     9040                // We also use the url parameter if available
     9041                s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
     9042
     9043                // Alias method option to type as per ticket #12004
     9044                s.type = options.method || options.type || s.method || s.type;
     9045
     9046                // Extract dataTypes list
     9047                s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
     9048
     9049                // A cross-domain request is in order when we have a protocol:host:port mismatch
     9050                if ( s.crossDomain == null ) {
     9051                        parts = rurl.exec( s.url.toLowerCase() );
     9052                        s.crossDomain = !!( parts &&
     9053                                ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
     9054                                        ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
     9055                                                ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
     9056                        );
     9057                }
     9058
     9059                // Convert data if not already a string
     9060                if ( s.data && s.processData && typeof s.data !== "string" ) {
     9061                        s.data = jQuery.param( s.data, s.traditional );
     9062                }
     9063
     9064                // Apply prefilters
     9065                inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
     9066
     9067                // If request was aborted inside a prefilter, stop there
     9068                if ( state === 2 ) {
     9069                        return jqXHR;
     9070                }
     9071
     9072                // We can fire global events as of now if asked to
     9073                fireGlobals = s.global;
     9074
     9075                // Watch for a new set of requests
     9076                if ( fireGlobals && jQuery.active++ === 0 ) {
     9077                        jQuery.event.trigger("ajaxStart");
     9078                }
     9079
     9080                // Uppercase the type
     9081                s.type = s.type.toUpperCase();
     9082
     9083                // Determine if request has content
     9084                s.hasContent = !rnoContent.test( s.type );
     9085
     9086                // Save the URL in case we're toying with the If-Modified-Since
     9087                // and/or If-None-Match header later on
     9088                cacheURL = s.url;
     9089
     9090                // More options handling for requests with no content
     9091                if ( !s.hasContent ) {
     9092
     9093                        // If data is available, append data to url
     9094                        if ( s.data ) {
     9095                                cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
     9096                                // #9682: remove data so that it's not used in an eventual retry
     9097                                delete s.data;
     9098                        }
     9099
     9100                        // Add anti-cache in url if needed
     9101                        if ( s.cache === false ) {
     9102                                s.url = rts.test( cacheURL ) ?
     9103
     9104                                        // If there is already a '_' parameter, set its value
     9105                                        cacheURL.replace( rts, "$1_=" + nonce++ ) :
     9106
     9107                                        // Otherwise add one to the end
     9108                                        cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
     9109                        }
     9110                }
     9111
     9112                // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
     9113                if ( s.ifModified ) {
     9114                        if ( jQuery.lastModified[ cacheURL ] ) {
     9115                                jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
     9116                        }
     9117                        if ( jQuery.etag[ cacheURL ] ) {
     9118                                jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
     9119                        }
     9120                }
     9121
     9122                // Set the correct header, if data is being sent
     9123                if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
     9124                        jqXHR.setRequestHeader( "Content-Type", s.contentType );
     9125                }
     9126
     9127                // Set the Accepts header for the server, depending on the dataType
     9128                jqXHR.setRequestHeader(
     9129                        "Accept",
     9130                        s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
     9131                                s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
     9132                                s.accepts[ "*" ]
     9133                );
     9134
     9135                // Check for headers option
     9136                for ( i in s.headers ) {
     9137                        jqXHR.setRequestHeader( i, s.headers[ i ] );
     9138                }
     9139
     9140                // Allow custom headers/mimetypes and early abort
     9141                if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
     9142                        // Abort if not done already and return
     9143                        return jqXHR.abort();
     9144                }
     9145
     9146                // aborting is no longer a cancellation
     9147                strAbort = "abort";
     9148
     9149                // Install callbacks on deferreds
     9150                for ( i in { success: 1, error: 1, complete: 1 } ) {
     9151                        jqXHR[ i ]( s[ i ] );
     9152                }
     9153
     9154                // Get transport
     9155                transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
     9156
     9157                // If no transport, we auto-abort
     9158                if ( !transport ) {
     9159                        done( -1, "No Transport" );
     9160                } else {
     9161                        jqXHR.readyState = 1;
     9162
     9163                        // Send global event
     9164                        if ( fireGlobals ) {
     9165                                globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
     9166                        }
     9167                        // Timeout
     9168                        if ( s.async && s.timeout > 0 ) {
     9169                                timeoutTimer = setTimeout(function() {
     9170                                        jqXHR.abort("timeout");
     9171                                }, s.timeout );
     9172                        }
     9173
     9174                        try {
     9175                                state = 1;
     9176                                transport.send( requestHeaders, done );
     9177                        } catch ( e ) {
     9178                                // Propagate exception as error if not done
     9179                                if ( state < 2 ) {
     9180                                        done( -1, e );
     9181                                // Simply rethrow otherwise
     9182                                } else {
     9183                                        throw e;
     9184                                }
     9185                        }
     9186                }
     9187
     9188                // Callback for when everything is done
     9189                function done( status, nativeStatusText, responses, headers ) {
     9190                        var isSuccess, success, error, response, modified,
     9191                                statusText = nativeStatusText;
     9192
     9193                        // Called once
     9194                        if ( state === 2 ) {
     9195                                return;
     9196                        }
     9197
     9198                        // State is "done" now
     9199                        state = 2;
     9200
     9201                        // Clear timeout if it exists
     9202                        if ( timeoutTimer ) {
     9203                                clearTimeout( timeoutTimer );
     9204                        }
     9205
     9206                        // Dereference transport for early garbage collection
     9207                        // (no matter how long the jqXHR object will be used)
     9208                        transport = undefined;
     9209
     9210                        // Cache response headers
     9211                        responseHeadersString = headers || "";
     9212
     9213                        // Set readyState
     9214                        jqXHR.readyState = status > 0 ? 4 : 0;
     9215
     9216                        // Determine if successful
     9217                        isSuccess = status >= 200 && status < 300 || status === 304;
     9218
     9219                        // Get response data
     9220                        if ( responses ) {
     9221                                response = ajaxHandleResponses( s, jqXHR, responses );
     9222                        }
     9223
     9224                        // Convert no matter what (that way responseXXX fields are always set)
     9225                        response = ajaxConvert( s, response, jqXHR, isSuccess );
     9226
     9227                        // If successful, handle type chaining
     9228                        if ( isSuccess ) {
     9229
     9230                                // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
     9231                                if ( s.ifModified ) {
     9232                                        modified = jqXHR.getResponseHeader("Last-Modified");
     9233                                        if ( modified ) {
     9234                                                jQuery.lastModified[ cacheURL ] = modified;
     9235                                        }
     9236                                        modified = jqXHR.getResponseHeader("etag");
     9237                                        if ( modified ) {
     9238                                                jQuery.etag[ cacheURL ] = modified;
     9239                                        }
     9240                                }
     9241
     9242                                // if no content
     9243                                if ( status === 204 || s.type === "HEAD" ) {
     9244                                        statusText = "nocontent";
     9245
     9246                                // if not modified
     9247                                } else if ( status === 304 ) {
     9248                                        statusText = "notmodified";
     9249
     9250                                // If we have data, let's convert it
     9251                                } else {
     9252                                        statusText = response.state;
     9253                                        success = response.data;
     9254                                        error = response.error;
     9255                                        isSuccess = !error;
     9256                                }
     9257                        } else {
     9258                                // We extract error from statusText
     9259                                // then normalize statusText and status for non-aborts
     9260                                error = statusText;
     9261                                if ( status || !statusText ) {
     9262                                        statusText = "error";
     9263                                        if ( status < 0 ) {
     9264                                                status = 0;
     9265                                        }
     9266                                }
     9267                        }
     9268
     9269                        // Set data for the fake xhr object
     9270                        jqXHR.status = status;
     9271                        jqXHR.statusText = ( nativeStatusText || statusText ) + "";
     9272
     9273                        // Success/Error
     9274                        if ( isSuccess ) {
     9275                                deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
     9276                        } else {
     9277                                deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
     9278                        }
     9279
     9280                        // Status-dependent callbacks
     9281                        jqXHR.statusCode( statusCode );
     9282                        statusCode = undefined;
     9283
     9284                        if ( fireGlobals ) {
     9285                                globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
     9286                                        [ jqXHR, s, isSuccess ? success : error ] );
     9287                        }
     9288
     9289                        // Complete
     9290                        completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
     9291
     9292                        if ( fireGlobals ) {
     9293                                globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
     9294                                // Handle the global AJAX counter
     9295                                if ( !( --jQuery.active ) ) {
     9296                                        jQuery.event.trigger("ajaxStop");
     9297                                }
     9298                        }
     9299                }
     9300
     9301                return jqXHR;
     9302        },
     9303
     9304        getJSON: function( url, data, callback ) {
     9305                return jQuery.get( url, data, callback, "json" );
     9306        },
     9307
     9308        getScript: function( url, callback ) {
     9309                return jQuery.get( url, undefined, callback, "script" );
     9310        }
     9311});
     9312
     9313jQuery.each( [ "get", "post" ], function( i, method ) {
     9314        jQuery[ method ] = function( url, data, callback, type ) {
     9315                // shift arguments if data argument was omitted
     9316                if ( jQuery.isFunction( data ) ) {
     9317                        type = type || callback;
     9318                        callback = data;
     9319                        data = undefined;
     9320                }
     9321
     9322                return jQuery.ajax({
     9323                        url: url,
     9324                        type: method,
     9325                        dataType: type,
     9326                        data: data,
     9327                        success: callback
     9328                });
     9329        };
     9330});
     9331
     9332// Attach a bunch of functions for handling common AJAX events
     9333jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) {
     9334        jQuery.fn[ type ] = function( fn ) {
     9335                return this.on( type, fn );
     9336        };
     9337});
     9338
     9339
     9340jQuery._evalUrl = function( url ) {
     9341        return jQuery.ajax({
     9342                url: url,
     9343                type: "GET",
     9344                dataType: "script",
     9345                async: false,
     9346                global: false,
     9347                "throws": true
     9348        });
     9349};
     9350
     9351
     9352jQuery.fn.extend({
     9353        wrapAll: function( html ) {
     9354                if ( jQuery.isFunction( html ) ) {
     9355                        return this.each(function(i) {
     9356                                jQuery(this).wrapAll( html.call(this, i) );
     9357                        });
     9358                }
     9359
     9360                if ( this[0] ) {
     9361                        // The elements to wrap the target around
     9362                        var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
     9363
     9364                        if ( this[0].parentNode ) {
     9365                                wrap.insertBefore( this[0] );
     9366                        }
     9367
     9368                        wrap.map(function() {
     9369                                var elem = this;
     9370
     9371                                while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
     9372                                        elem = elem.firstChild;
     9373                                }
     9374
     9375                                return elem;
     9376                        }).append( this );
     9377                }
     9378
     9379                return this;
     9380        },
     9381
     9382        wrapInner: function( html ) {
     9383                if ( jQuery.isFunction( html ) ) {
     9384                        return this.each(function(i) {
     9385                                jQuery(this).wrapInner( html.call(this, i) );
     9386                        });
     9387                }
     9388
     9389                return this.each(function() {
     9390                        var self = jQuery( this ),
     9391                                contents = self.contents();
     9392
     9393                        if ( contents.length ) {
     9394                                contents.wrapAll( html );
     9395
     9396                        } else {
     9397                                self.append( html );
     9398                        }
     9399                });
     9400        },
     9401
     9402        wrap: function( html ) {
     9403                var isFunction = jQuery.isFunction( html );
     9404
     9405                return this.each(function(i) {
     9406                        jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
     9407                });
     9408        },
     9409
     9410        unwrap: function() {
     9411                return this.parent().each(function() {
     9412                        if ( !jQuery.nodeName( this, "body" ) ) {
     9413                                jQuery( this ).replaceWith( this.childNodes );
     9414                        }
     9415                }).end();
     9416        }
     9417});
     9418
     9419
     9420jQuery.expr.filters.hidden = function( elem ) {
     9421        // Support: Opera <= 12.12
     9422        // Opera reports offsetWidths and offsetHeights less than zero on some elements
     9423        return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
     9424                (!support.reliableHiddenOffsets() &&
     9425                        ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
     9426};
     9427
     9428jQuery.expr.filters.visible = function( elem ) {
     9429        return !jQuery.expr.filters.hidden( elem );
     9430};
     9431
     9432
     9433
     9434
     9435var r20 = /%20/g,
     9436        rbracket = /\[\]$/,
     9437        rCRLF = /\r?\n/g,
     9438        rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
     9439        rsubmittable = /^(?:input|select|textarea|keygen)/i;
     9440
     9441function buildParams( prefix, obj, traditional, add ) {
     9442        var name;
     9443
     9444        if ( jQuery.isArray( obj ) ) {
     9445                // Serialize array item.
     9446                jQuery.each( obj, function( i, v ) {
     9447                        if ( traditional || rbracket.test( prefix ) ) {
     9448                                // Treat each array item as a scalar.
     9449                                add( prefix, v );
     9450
     9451                        } else {
     9452                                // Item is non-scalar (array or object), encode its numeric index.
     9453                                buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
     9454                        }
     9455                });
     9456
     9457        } else if ( !traditional && jQuery.type( obj ) === "object" ) {
     9458                // Serialize object item.
     9459                for ( name in obj ) {
     9460                        buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
     9461                }
     9462
     9463        } else {
     9464                // Serialize scalar item.
     9465                add( prefix, obj );
     9466        }
     9467}
     9468
     9469// Serialize an array of form elements or a set of
     9470// key/values into a query string
     9471jQuery.param = function( a, traditional ) {
     9472        var prefix,
     9473                s = [],
     9474                add = function( key, value ) {
     9475                        // If value is a function, invoke it and return its value
     9476                        value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
     9477                        s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
     9478                };
     9479
     9480        // Set traditional to true for jQuery <= 1.3.2 behavior.
     9481        if ( traditional === undefined ) {
     9482                traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
     9483        }
     9484
     9485        // If an array was passed in, assume that it is an array of form elements.
     9486        if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
     9487                // Serialize the form elements
     9488                jQuery.each( a, function() {
     9489                        add( this.name, this.value );
     9490                });
     9491
     9492        } else {
     9493                // If traditional, encode the "old" way (the way 1.3.2 or older
     9494                // did it), otherwise encode params recursively.
     9495                for ( prefix in a ) {
     9496                        buildParams( prefix, a[ prefix ], traditional, add );
     9497                }
     9498        }
     9499
     9500        // Return the resulting serialization
     9501        return s.join( "&" ).replace( r20, "+" );
     9502};
     9503
     9504jQuery.fn.extend({
     9505        serialize: function() {
     9506                return jQuery.param( this.serializeArray() );
     9507        },
     9508        serializeArray: function() {
     9509                return this.map(function() {
     9510                        // Can add propHook for "elements" to filter or add form elements
     9511                        var elements = jQuery.prop( this, "elements" );
     9512                        return elements ? jQuery.makeArray( elements ) : this;
     9513                })
     9514                .filter(function() {
     9515                        var type = this.type;
     9516                        // Use .is(":disabled") so that fieldset[disabled] works
     9517                        return this.name && !jQuery( this ).is( ":disabled" ) &&
     9518                                rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
     9519                                ( this.checked || !rcheckableType.test( type ) );
     9520                })
     9521                .map(function( i, elem ) {
     9522                        var val = jQuery( this ).val();
     9523
     9524                        return val == null ?
     9525                                null :
     9526                                jQuery.isArray( val ) ?
     9527                                        jQuery.map( val, function( val ) {
     9528                                                return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
     9529                                        }) :
     9530                                        { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
     9531                }).get();
     9532        }
     9533});
     9534
     9535
     9536// Create the request object
     9537// (This is still attached to ajaxSettings for backward compatibility)
     9538jQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ?
     9539        // Support: IE6+
     9540        function() {
     9541
     9542                // XHR cannot access local files, always use ActiveX for that case
     9543                return !this.isLocal &&
     9544
     9545                        // Support: IE7-8
     9546                        // oldIE XHR does not support non-RFC2616 methods (#13240)
     9547                        // See http://msdn.microsoft.com/en-us/library/ie/ms536648(v=vs.85).aspx
     9548                        // and http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9
     9549                        // Although this check for six methods instead of eight
     9550                        // since IE also does not support "trace" and "connect"
     9551                        /^(get|post|head|put|delete|options)$/i.test( this.type ) &&
     9552
     9553                        createStandardXHR() || createActiveXHR();
     9554        } :
     9555        // For all other browsers, use the standard XMLHttpRequest object
     9556        createStandardXHR;
     9557
     9558var xhrId = 0,
     9559        xhrCallbacks = {},
     9560        xhrSupported = jQuery.ajaxSettings.xhr();
     9561
     9562// Support: IE<10
     9563// Open requests must be manually aborted on unload (#5280)
     9564if ( window.ActiveXObject ) {
     9565        jQuery( window ).on( "unload", function() {
     9566                for ( var key in xhrCallbacks ) {
     9567                        xhrCallbacks[ key ]( undefined, true );
     9568                }
     9569        });
     9570}
     9571
     9572// Determine support properties
     9573support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
     9574xhrSupported = support.ajax = !!xhrSupported;
     9575
     9576// Create transport if the browser can provide an xhr
     9577if ( xhrSupported ) {
     9578
     9579        jQuery.ajaxTransport(function( options ) {
     9580                // Cross domain only allowed if supported through XMLHttpRequest
     9581                if ( !options.crossDomain || support.cors ) {
     9582
     9583                        var callback;
     9584
     9585                        return {
     9586                                send: function( headers, complete ) {
     9587                                        var i,
     9588                                                xhr = options.xhr(),
     9589                                                id = ++xhrId;
     9590
     9591                                        // Open the socket
     9592                                        xhr.open( options.type, options.url, options.async, options.username, options.password );
     9593
     9594                                        // Apply custom fields if provided
     9595                                        if ( options.xhrFields ) {
     9596                                                for ( i in options.xhrFields ) {
     9597                                                        xhr[ i ] = options.xhrFields[ i ];
     9598                                                }
     9599                                        }
     9600
     9601                                        // Override mime type if needed
     9602                                        if ( options.mimeType && xhr.overrideMimeType ) {
     9603                                                xhr.overrideMimeType( options.mimeType );
     9604                                        }
     9605
     9606                                        // X-Requested-With header
     9607                                        // For cross-domain requests, seeing as conditions for a preflight are
     9608                                        // akin to a jigsaw puzzle, we simply never set it to be sure.
     9609                                        // (it can always be set on a per-request basis or even using ajaxSetup)
     9610                                        // For same-domain requests, won't change header if already provided.
     9611                                        if ( !options.crossDomain && !headers["X-Requested-With"] ) {
     9612                                                headers["X-Requested-With"] = "XMLHttpRequest";
     9613                                        }
     9614
     9615                                        // Set headers
     9616                                        for ( i in headers ) {
     9617                                                // Support: IE<9
     9618                                                // IE's ActiveXObject throws a 'Type Mismatch' exception when setting
     9619                                                // request header to a null-value.
     9620                                                //
     9621                                                // To keep consistent with other XHR implementations, cast the value
     9622                                                // to string and ignore `undefined`.
     9623                                                if ( headers[ i ] !== undefined ) {
     9624                                                        xhr.setRequestHeader( i, headers[ i ] + "" );
     9625                                                }
     9626                                        }
     9627
     9628                                        // Do send the request
     9629                                        // This may raise an exception which is actually
     9630                                        // handled in jQuery.ajax (so no try/catch here)
     9631                                        xhr.send( ( options.hasContent && options.data ) || null );
     9632
     9633                                        // Listener
     9634                                        callback = function( _, isAbort ) {
     9635                                                var status, statusText, responses;
     9636
     9637                                                // Was never called and is aborted or complete
     9638                                                if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
     9639                                                        // Clean up
     9640                                                        delete xhrCallbacks[ id ];
     9641                                                        callback = undefined;
     9642                                                        xhr.onreadystatechange = jQuery.noop;
     9643
     9644                                                        // Abort manually if needed
     9645                                                        if ( isAbort ) {
     9646                                                                if ( xhr.readyState !== 4 ) {
     9647                                                                        xhr.abort();
     9648                                                                }
     9649                                                        } else {
     9650                                                                responses = {};
     9651                                                                status = xhr.status;
     9652
     9653                                                                // Support: IE<10
     9654                                                                // Accessing binary-data responseText throws an exception
     9655                                                                // (#11426)
     9656                                                                if ( typeof xhr.responseText === "string" ) {
     9657                                                                        responses.text = xhr.responseText;
     9658                                                                }
     9659
     9660                                                                // Firefox throws an exception when accessing
     9661                                                                // statusText for faulty cross-domain requests
     9662                                                                try {
     9663                                                                        statusText = xhr.statusText;
     9664                                                                } catch( e ) {
     9665                                                                        // We normalize with Webkit giving an empty statusText
     9666                                                                        statusText = "";
     9667                                                                }
     9668
     9669                                                                // Filter status for non standard behaviors
     9670
     9671                                                                // If the request is local and we have data: assume a success
     9672                                                                // (success with no data won't get notified, that's the best we
     9673                                                                // can do given current implementations)
     9674                                                                if ( !status && options.isLocal && !options.crossDomain ) {
     9675                                                                        status = responses.text ? 200 : 404;
     9676                                                                // IE - #1450: sometimes returns 1223 when it should be 204
     9677                                                                } else if ( status === 1223 ) {
     9678                                                                        status = 204;
     9679                                                                }
     9680                                                        }
     9681                                                }
     9682
     9683                                                // Call complete if needed
     9684                                                if ( responses ) {
     9685                                                        complete( status, statusText, responses, xhr.getAllResponseHeaders() );
     9686                                                }
     9687                                        };
     9688
     9689                                        if ( !options.async ) {
     9690                                                // if we're in sync mode we fire the callback
     9691                                                callback();
     9692                                        } else if ( xhr.readyState === 4 ) {
     9693                                                // (IE6 & IE7) if it's in cache and has been
     9694                                                // retrieved directly we need to fire the callback
     9695                                                setTimeout( callback );
     9696                                        } else {
     9697                                                // Add to the list of active xhr callbacks
     9698                                                xhr.onreadystatechange = xhrCallbacks[ id ] = callback;
     9699                                        }
     9700                                },
     9701
     9702                                abort: function() {
     9703                                        if ( callback ) {
     9704                                                callback( undefined, true );
     9705                                        }
     9706                                }
     9707                        };
     9708                }
     9709        });
     9710}
     9711
     9712// Functions to create xhrs
     9713function createStandardXHR() {
     9714        try {
     9715                return new window.XMLHttpRequest();
     9716        } catch( e ) {}
     9717}
     9718
     9719function createActiveXHR() {
     9720        try {
     9721                return new window.ActiveXObject( "Microsoft.XMLHTTP" );
     9722        } catch( e ) {}
     9723}
     9724
     9725
     9726
     9727
     9728// Install script dataType
     9729jQuery.ajaxSetup({
     9730        accepts: {
     9731                script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
     9732        },
     9733        contents: {
     9734                script: /(?:java|ecma)script/
     9735        },
     9736        converters: {
     9737                "text script": function( text ) {
     9738                        jQuery.globalEval( text );
     9739                        return text;
     9740                }
     9741        }
     9742});
     9743
     9744// Handle cache's special case and global
     9745jQuery.ajaxPrefilter( "script", function( s ) {
     9746        if ( s.cache === undefined ) {
     9747                s.cache = false;
     9748        }
     9749        if ( s.crossDomain ) {
     9750                s.type = "GET";
     9751                s.global = false;
     9752        }
     9753});
     9754
     9755// Bind script tag hack transport
     9756jQuery.ajaxTransport( "script", function(s) {
     9757
     9758        // This transport only deals with cross domain requests
     9759        if ( s.crossDomain ) {
     9760
     9761                var script,
     9762                        head = document.head || jQuery("head")[0] || document.documentElement;
     9763
     9764                return {
     9765
     9766                        send: function( _, callback ) {
     9767
     9768                                script = document.createElement("script");
     9769
     9770                                script.async = true;
     9771
     9772                                if ( s.scriptCharset ) {
     9773                                        script.charset = s.scriptCharset;
     9774                                }
     9775
     9776                                script.src = s.url;
     9777
     9778                                // Attach handlers for all browsers
     9779                                script.onload = script.onreadystatechange = function( _, isAbort ) {
     9780
     9781                                        if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
     9782
     9783                                                // Handle memory leak in IE
     9784                                                script.onload = script.onreadystatechange = null;
     9785
     9786                                                // Remove the script
     9787                                                if ( script.parentNode ) {
     9788                                                        script.parentNode.removeChild( script );
     9789                                                }
     9790
     9791                                                // Dereference the script
     9792                                                script = null;
     9793
     9794                                                // Callback if not abort
     9795                                                if ( !isAbort ) {
     9796                                                        callback( 200, "success" );
     9797                                                }
     9798                                        }
     9799                                };
     9800
     9801                                // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
     9802                                // Use native DOM manipulation to avoid our domManip AJAX trickery
     9803                                head.insertBefore( script, head.firstChild );
     9804                        },
     9805
     9806                        abort: function() {
     9807                                if ( script ) {
     9808                                        script.onload( undefined, true );
     9809                                }
     9810                        }
     9811                };
     9812        }
     9813});
     9814
     9815
     9816
     9817
     9818var oldCallbacks = [],
     9819        rjsonp = /(=)\?(?=&|$)|\?\?/;
     9820
     9821// Default jsonp settings
     9822jQuery.ajaxSetup({
     9823        jsonp: "callback",
     9824        jsonpCallback: function() {
     9825                var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
     9826                this[ callback ] = true;
     9827                return callback;
     9828        }
     9829});
     9830
     9831// Detect, normalize options and install callbacks for jsonp requests
     9832jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
     9833
     9834        var callbackName, overwritten, responseContainer,
     9835                jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
     9836                        "url" :
     9837                        typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
     9838                );
     9839
     9840        // Handle iff the expected data type is "jsonp" or we have a parameter to set
     9841        if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
     9842
     9843                // Get callback name, remembering preexisting value associated with it
     9844                callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
     9845                        s.jsonpCallback() :
     9846                        s.jsonpCallback;
     9847
     9848                // Insert callback into url or form data
     9849                if ( jsonProp ) {
     9850                        s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
     9851                } else if ( s.jsonp !== false ) {
     9852                        s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
     9853                }
     9854
     9855                // Use data converter to retrieve json after script execution
     9856                s.converters["script json"] = function() {
     9857                        if ( !responseContainer ) {
     9858                                jQuery.error( callbackName + " was not called" );
     9859                        }
     9860                        return responseContainer[ 0 ];
     9861                };
     9862
     9863                // force json dataType
     9864                s.dataTypes[ 0 ] = "json";
     9865
     9866                // Install callback
     9867                overwritten = window[ callbackName ];
     9868                window[ callbackName ] = function() {
     9869                        responseContainer = arguments;
     9870                };
     9871
     9872                // Clean-up function (fires after converters)
     9873                jqXHR.always(function() {
     9874                        // Restore preexisting value
     9875                        window[ callbackName ] = overwritten;
     9876
     9877                        // Save back as free
     9878                        if ( s[ callbackName ] ) {
     9879                                // make sure that re-using the options doesn't screw things around
     9880                                s.jsonpCallback = originalSettings.jsonpCallback;
     9881
     9882                                // save the callback name for future use
     9883                                oldCallbacks.push( callbackName );
     9884                        }
     9885
     9886                        // Call if it was a function and we have a response
     9887                        if ( responseContainer && jQuery.isFunction( overwritten ) ) {
     9888                                overwritten( responseContainer[ 0 ] );
     9889                        }
     9890
     9891                        responseContainer = overwritten = undefined;
     9892                });
     9893
     9894                // Delegate to script
     9895                return "script";
     9896        }
     9897});
     9898
     9899
     9900
     9901
     9902// data: string of html
     9903// context (optional): If specified, the fragment will be created in this context, defaults to document
     9904// keepScripts (optional): If true, will include scripts passed in the html string
     9905jQuery.parseHTML = function( data, context, keepScripts ) {
     9906        if ( !data || typeof data !== "string" ) {
     9907                return null;
     9908        }
     9909        if ( typeof context === "boolean" ) {
     9910                keepScripts = context;
     9911                context = false;
     9912        }
     9913        context = context || document;
     9914
     9915        var parsed = rsingleTag.exec( data ),
     9916                scripts = !keepScripts && [];
     9917
     9918        // Single tag
     9919        if ( parsed ) {
     9920                return [ context.createElement( parsed[1] ) ];
     9921        }
     9922
     9923        parsed = jQuery.buildFragment( [ data ], context, scripts );
     9924
     9925        if ( scripts && scripts.length ) {
     9926                jQuery( scripts ).remove();
     9927        }
     9928
     9929        return jQuery.merge( [], parsed.childNodes );
     9930};
     9931
     9932
     9933// Keep a copy of the old load method
     9934var _load = jQuery.fn.load;
     9935
     9936/**
     9937 * Load a url into a page
     9938 */
     9939jQuery.fn.load = function( url, params, callback ) {
     9940        if ( typeof url !== "string" && _load ) {
     9941                return _load.apply( this, arguments );
     9942        }
     9943
     9944        var selector, response, type,
     9945                self = this,
     9946                off = url.indexOf(" ");
     9947
     9948        if ( off >= 0 ) {
     9949                selector = jQuery.trim( url.slice( off, url.length ) );
     9950                url = url.slice( 0, off );
     9951        }
     9952
     9953        // If it's a function
     9954        if ( jQuery.isFunction( params ) ) {
     9955
     9956                // We assume that it's the callback
     9957                callback = params;
     9958                params = undefined;
     9959
     9960        // Otherwise, build a param string
     9961        } else if ( params && typeof params === "object" ) {
     9962                type = "POST";
     9963        }
     9964
     9965        // If we have elements to modify, make the request
     9966        if ( self.length > 0 ) {
     9967                jQuery.ajax({
     9968                        url: url,
     9969
     9970                        // if "type" variable is undefined, then "GET" method will be used
     9971                        type: type,
     9972                        dataType: "html",
     9973                        data: params
     9974                }).done(function( responseText ) {
     9975
     9976                        // Save response for use in complete callback
     9977                        response = arguments;
     9978
     9979                        self.html( selector ?
     9980
     9981                                // If a selector was specified, locate the right elements in a dummy div
     9982                                // Exclude scripts to avoid IE 'Permission Denied' errors
     9983                                jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
     9984
     9985                                // Otherwise use the full result
     9986                                responseText );
     9987
     9988                }).complete( callback && function( jqXHR, status ) {
     9989                        self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
     9990                });
     9991        }
     9992
     9993        return this;
     9994};
     9995
     9996
     9997
     9998
     9999jQuery.expr.filters.animated = function( elem ) {
     10000        return jQuery.grep(jQuery.timers, function( fn ) {
     10001                return elem === fn.elem;
     10002        }).length;
     10003};
     10004
     10005
     10006
     10007
     10008
     10009var docElem = window.document.documentElement;
     10010
     10011/**
     10012 * Gets a window from an element
     10013 */
     10014function getWindow( elem ) {
     10015        return jQuery.isWindow( elem ) ?
     10016                elem :
     10017                elem.nodeType === 9 ?
     10018                        elem.defaultView || elem.parentWindow :
     10019                        false;
     10020}
     10021
     10022jQuery.offset = {
     10023        setOffset: function( elem, options, i ) {
     10024                var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
     10025                        position = jQuery.css( elem, "position" ),
     10026                        curElem = jQuery( elem ),
     10027                        props = {};
     10028
     10029                // set position first, in-case top/left are set even on static elem
     10030                if ( position === "static" ) {
     10031                        elem.style.position = "relative";
     10032                }
     10033
     10034                curOffset = curElem.offset();
     10035                curCSSTop = jQuery.css( elem, "top" );
     10036                curCSSLeft = jQuery.css( elem, "left" );
     10037                calculatePosition = ( position === "absolute" || position === "fixed" ) &&
     10038                        jQuery.inArray("auto", [ curCSSTop, curCSSLeft ] ) > -1;
     10039
     10040                // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
     10041                if ( calculatePosition ) {
     10042                        curPosition = curElem.position();
     10043                        curTop = curPosition.top;
     10044                        curLeft = curPosition.left;
     10045                } else {
     10046                        curTop = parseFloat( curCSSTop ) || 0;
     10047                        curLeft = parseFloat( curCSSLeft ) || 0;
     10048                }
     10049
     10050                if ( jQuery.isFunction( options ) ) {
     10051                        options = options.call( elem, i, curOffset );
     10052                }
     10053
     10054                if ( options.top != null ) {
     10055                        props.top = ( options.top - curOffset.top ) + curTop;
     10056                }
     10057                if ( options.left != null ) {
     10058                        props.left = ( options.left - curOffset.left ) + curLeft;
     10059                }
     10060
     10061                if ( "using" in options ) {
     10062                        options.using.call( elem, props );
     10063                } else {
     10064                        curElem.css( props );
     10065                }
     10066        }
     10067};
     10068
     10069jQuery.fn.extend({
     10070        offset: function( options ) {
     10071                if ( arguments.length ) {
     10072                        return options === undefined ?
     10073                                this :
     10074                                this.each(function( i ) {
     10075                                        jQuery.offset.setOffset( this, options, i );
     10076                                });
     10077                }
     10078
     10079                var docElem, win,
     10080                        box = { top: 0, left: 0 },
     10081                        elem = this[ 0 ],
     10082                        doc = elem && elem.ownerDocument;
     10083
     10084                if ( !doc ) {
     10085                        return;
     10086                }
     10087
     10088                docElem = doc.documentElement;
     10089
     10090                // Make sure it's not a disconnected DOM node
     10091                if ( !jQuery.contains( docElem, elem ) ) {
     10092                        return box;
     10093                }
     10094
     10095                // If we don't have gBCR, just use 0,0 rather than error
     10096                // BlackBerry 5, iOS 3 (original iPhone)
     10097                if ( typeof elem.getBoundingClientRect !== strundefined ) {
     10098                        box = elem.getBoundingClientRect();
     10099                }
     10100                win = getWindow( doc );
     10101                return {
     10102                        top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
     10103                        left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
     10104                };
     10105        },
     10106
     10107        position: function() {
     10108                if ( !this[ 0 ] ) {
     10109                        return;
     10110                }
     10111
     10112                var offsetParent, offset,
     10113                        parentOffset = { top: 0, left: 0 },
     10114                        elem = this[ 0 ];
     10115
     10116                // fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent
     10117                if ( jQuery.css( elem, "position" ) === "fixed" ) {
     10118                        // we assume that getBoundingClientRect is available when computed position is fixed
     10119                        offset = elem.getBoundingClientRect();
     10120                } else {
     10121                        // Get *real* offsetParent
     10122                        offsetParent = this.offsetParent();
     10123
     10124                        // Get correct offsets
     10125                        offset = this.offset();
     10126                        if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
     10127                                parentOffset = offsetParent.offset();
     10128                        }
     10129
     10130                        // Add offsetParent borders
     10131                        parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
     10132                        parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
     10133                }
     10134
     10135                // Subtract parent offsets and element margins
     10136                // note: when an element has margin: auto the offsetLeft and marginLeft
     10137                // are the same in Safari causing offset.left to incorrectly be 0
     10138                return {
     10139                        top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),
     10140                        left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
     10141                };
     10142        },
     10143
     10144        offsetParent: function() {
     10145                return this.map(function() {
     10146                        var offsetParent = this.offsetParent || docElem;
     10147
     10148                        while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) {
     10149                                offsetParent = offsetParent.offsetParent;
     10150                        }
     10151                        return offsetParent || docElem;
     10152                });
     10153        }
     10154});
     10155
     10156// Create scrollLeft and scrollTop methods
     10157jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
     10158        var top = /Y/.test( prop );
     10159
     10160        jQuery.fn[ method ] = function( val ) {
     10161                return access( this, function( elem, method, val ) {
     10162                        var win = getWindow( elem );
     10163
     10164                        if ( val === undefined ) {
     10165                                return win ? (prop in win) ? win[ prop ] :
     10166                                        win.document.documentElement[ method ] :
     10167                                        elem[ method ];
     10168                        }
     10169
     10170                        if ( win ) {
     10171                                win.scrollTo(
     10172                                        !top ? val : jQuery( win ).scrollLeft(),
     10173                                        top ? val : jQuery( win ).scrollTop()
     10174                                );
     10175
     10176                        } else {
     10177                                elem[ method ] = val;
     10178                        }
     10179                }, method, val, arguments.length, null );
     10180        };
     10181});
     10182
     10183// Add the top/left cssHooks using jQuery.fn.position
     10184// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
     10185// getComputedStyle returns percent when specified for top/left/bottom/right
     10186// rather than make the css module depend on the offset module, we just check for it here
     10187jQuery.each( [ "top", "left" ], function( i, prop ) {
     10188        jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
     10189                function( elem, computed ) {
     10190                        if ( computed ) {
     10191                                computed = curCSS( elem, prop );
     10192                                // if curCSS returns percentage, fallback to offset
     10193                                return rnumnonpx.test( computed ) ?
     10194                                        jQuery( elem ).position()[ prop ] + "px" :
     10195                                        computed;
     10196                        }
     10197                }
     10198        );
     10199});
     10200
     10201
     10202// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
     10203jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
     10204        jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
     10205                // margin is only for outerHeight, outerWidth
     10206                jQuery.fn[ funcName ] = function( margin, value ) {
     10207                        var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
     10208                                extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
     10209
     10210                        return access( this, function( elem, type, value ) {
     10211                                var doc;
     10212
     10213                                if ( jQuery.isWindow( elem ) ) {
     10214                                        // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
     10215                                        // isn't a whole lot we can do. See pull request at this URL for discussion:
     10216                                        // https://github.com/jquery/jquery/pull/764
     10217                                        return elem.document.documentElement[ "client" + name ];
     10218                                }
     10219
     10220                                // Get document width or height
     10221                                if ( elem.nodeType === 9 ) {
     10222                                        doc = elem.documentElement;
     10223
     10224                                        // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
     10225                                        // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
     10226                                        return Math.max(
     10227                                                elem.body[ "scroll" + name ], doc[ "scroll" + name ],
     10228                                                elem.body[ "offset" + name ], doc[ "offset" + name ],
     10229                                                doc[ "client" + name ]
     10230                                        );
     10231                                }
     10232
     10233                                return value === undefined ?
     10234                                        // Get width or height on the element, requesting but not forcing parseFloat
     10235                                        jQuery.css( elem, type, extra ) :
     10236
     10237                                        // Set width or height on the element
     10238                                        jQuery.style( elem, type, value, extra );
     10239                        }, type, chainable ? margin : undefined, chainable, null );
     10240                };
     10241        });
     10242});
     10243
     10244
     10245// The number of elements contained in the matched element set
     10246jQuery.fn.size = function() {
     10247        return this.length;
     10248};
     10249
     10250jQuery.fn.andSelf = jQuery.fn.addBack;
     10251
     10252
     10253
     10254
     10255// Register as a named AMD module, since jQuery can be concatenated with other
     10256// files that may use define, but not via a proper concatenation script that
     10257// understands anonymous AMD modules. A named AMD is safest and most robust
     10258// way to register. Lowercase jquery is used because AMD module names are
     10259// derived from file names, and jQuery is normally delivered in a lowercase
     10260// file name. Do this after creating the global so that if an AMD module wants
     10261// to call noConflict to hide this version of jQuery, it will work.
     10262
     10263// Note that for maximum portability, libraries that are not jQuery should
     10264// declare themselves as anonymous modules, and avoid setting a global if an
     10265// AMD loader is present. jQuery is a special case. For more information, see
     10266// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
     10267
     10268if ( typeof define === "function" && define.amd ) {
     10269        define( "jquery", [], function() {
     10270                return jQuery;
     10271        });
     10272}
     10273
     10274
     10275
     10276
     10277var
     10278        // Map over jQuery in case of overwrite
     10279        _jQuery = window.jQuery,
     10280
     10281        // Map over the $ in case of overwrite
     10282        _$ = window.$;
     10283
     10284jQuery.noConflict = function( deep ) {
     10285        if ( window.$ === jQuery ) {
     10286                window.$ = _$;
     10287        }
     10288
     10289        if ( deep && window.jQuery === jQuery ) {
     10290                window.jQuery = _jQuery;
     10291        }
     10292
     10293        return jQuery;
     10294};
     10295
     10296// Expose jQuery and $ identifiers, even in
     10297// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
     10298// and CommonJS for browser emulators (#13566)
     10299if ( typeof noGlobal === strundefined ) {
     10300        window.jQuery = window.$ = jQuery;
     10301}
     10302
     10303
     10304
     10305
     10306return jQuery;
     10307
     10308}));
  • new file wp-includes/js/jquery/jquery.min.js

    diff --git wp-includes/js/jquery/jquery.min.js wp-includes/js/jquery/jquery.min.js
    new file mode 100644
    index 0000000..ab28a24
    - +  
     1/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
     2!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;
     3if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},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(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==cb()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===cb()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ab:bb):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:bb,isPropagationStopped:bb,isImmediatePropagationStopped:bb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ab,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ab,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ab,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=bb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=bb),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function db(a){var b=eb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var eb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fb=/ jQuery\d+="(?:null|\d+)"/g,gb=new RegExp("<(?:"+eb+")[\\s/>]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/<tbody/i,lb=/<|&#?\w+;/,mb=/<(?:script|style|link)/i,nb=/checked\s*(?:[^=]|=\s*.checked.)/i,ob=/^$|\/(?:java|ecma)script/i,pb=/^true\/(.*)/,qb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,rb={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>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?"<table>"!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Cb[0].contentWindow||Cb[0].contentDocument).document,b.write(),b.close(),c=Eb(a,b),Cb.detach()),Db[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Gb=/^margin/,Hb=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ib,Jb,Kb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ib=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Hb.test(g)&&Gb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ib=function(a){return a.currentStyle},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Hb.test(g)&&!Kb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Lb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Mb=/alpha\([^)]*\)/i,Nb=/opacity\s*=\s*([^)]*)/,Ob=/^(none|table(?!-c[ea]).+)/,Pb=new RegExp("^("+S+")(.*)$","i"),Qb=new RegExp("^([+-])=("+S+")","i"),Rb={position:"absolute",visibility:"hidden",display:"block"},Sb={letterSpacing:"0",fontWeight:"400"},Tb=["Webkit","O","Moz","ms"];function Ub(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Tb.length;while(e--)if(b=Tb[e]+c,b in a)return b;return d}function Vb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fb(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wb(a,b,c){var d=Pb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Yb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ib(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Jb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Hb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xb(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Jb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ub(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ub(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Jb(a,b,d)),"normal"===f&&b in Sb&&(f=Sb[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Ob.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Rb,function(){return Yb(a,b,d)}):Yb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ib(a);return Wb(a,c,d?Xb(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Mb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Mb.test(f)?f.replace(Mb,e):f+" "+e)}}),m.cssHooks.marginRight=Lb(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Jb,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Gb.test(a)||(m.cssHooks[a+b].set=Wb)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ib(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Vb(this,!0)},hide:function(){return Vb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Zb(a,b,c,d,e){return new Zb.prototype.init(a,b,c,d,e)}m.Tween=Zb,Zb.prototype={constructor:Zb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")
     4},cur:function(){var a=Zb.propHooks[this.prop];return a&&a.get?a.get(this):Zb.propHooks._default.get(this)},run:function(a){var b,c=Zb.propHooks[this.prop];return this.pos=b=this.options.duration?m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Zb.propHooks._default.set(this),this}},Zb.prototype.init.prototype=Zb.prototype,Zb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Zb.propHooks.scrollTop=Zb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Zb.prototype.init,m.fx.step={};var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cc=/queueHooks$/,dc=[ic],ec={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bc.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fc(){return setTimeout(function(){$b=void 0}),$b=m.now()}function gc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hc(a,b,c){for(var d,e=(ec[b]||[]).concat(ec["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ic(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fb(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fb(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ac.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fb(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hc(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jc(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kc(a,b,c){var d,e,f=0,g=dc.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$b||fc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$b||fc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jc(k,j.opts.specialEasing);g>f;f++)if(d=dc[f].call(j,a,k,j.opts))return d;return m.map(k,hc,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kc,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],ec[c]=ec[c]||[],ec[c].unshift(b)},prefilter:function(a,b){b?dc.unshift(a):dc.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kc(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gc(b,!0),a,d,e)}}),m.each({slideDown:gc("show"),slideUp:gc("hide"),slideToggle:gc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($b=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$b=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_b||(_b=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_b),_b=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lc=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lc,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mc,nc,oc=m.expr.attrHandle,pc=/^(?:checked|selected)$/i,qc=k.getSetAttribute,rc=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nc:mc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rc&&qc||!pc.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qc?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nc={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rc&&qc||!pc.test(c)?a.setAttribute(!qc&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=oc[b]||m.find.attr;oc[b]=rc&&qc||!pc.test(b)?function(a,b,d){var e,f;return d||(f=oc[b],oc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,oc[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rc&&qc||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mc&&mc.set(a,b,c)}}),qc||(mc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},oc.id=oc.name=oc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mc.set},m.attrHooks.contenteditable={set:function(a,b,c){mc.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sc=/^(?:input|select|textarea|button|object)$/i,tc=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sc.test(a.nodeName)||tc.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var uc=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(uc," ").indexOf(b)>=0)return!0;return!1}}),m.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(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vc=m.now(),wc=/\?/,xc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yc,zc,Ac=/#.*$/,Bc=/([?&])_=[^&]*/,Cc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Dc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ec=/^(?:GET|HEAD)$/,Fc=/^\/\//,Gc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hc={},Ic={},Jc="*/".concat("*");try{zc=location.href}catch(Kc){zc=y.createElement("a"),zc.href="",zc=zc.href}yc=Gc.exec(zc.toLowerCase())||[];function Lc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mc(a,b,c,d){var e={},f=a===Ic;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nc(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Oc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zc,type:"GET",isLocal:Dc.test(yc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jc,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"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nc(Nc(a,m.ajaxSettings),b):Nc(m.ajaxSettings,a)},ajaxPrefilter:Lc(Hc),ajaxTransport:Lc(Ic),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zc)+"").replace(Ac,"").replace(Fc,yc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yc[1]&&c[2]===yc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yc[3]||("http:"===yc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mc(Hc,k,b,v),2===t)return v;h=k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Ec.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bc.test(e)?e.replace(Bc,"$1_="+vc++):e+(wc.test(e)?"&":"?")+"_="+vc++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mc(Ic,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Oc(k,v,c)),u=Pc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qc=/%20/g,Rc=/\[\]$/,Sc=/\r?\n/g,Tc=/^(?:submit|button|image|reset|file)$/i,Uc=/^(?:input|select|textarea|keygen)/i;function Vc(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rc.test(a)?d(a,e):Vc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vc(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vc(c,a[c],b,e);return d.join("&").replace(Qc,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Uc.test(this.nodeName)&&!Tc.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sc,"\r\n")}}):{name:b.name,value:c.replace(Sc,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zc()||$c()}:Zc;var Wc=0,Xc={},Yc=m.ajaxSettings.xhr();a.ActiveXObject&&m(a).on("unload",function(){for(var a in Xc)Xc[a](void 0,!0)}),k.cors=!!Yc&&"withCredentials"in Yc,Yc=k.ajax=!!Yc,Yc&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xc[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zc(){try{return new a.XMLHttpRequest}catch(b){}}function $c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _c=[],ad=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_c.pop()||m.expando+"_"+vc++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ad.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ad.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ad,"$1"+e):b.jsonp!==!1&&(b.url+=(wc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_c.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bd=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bd)return bd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cd})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m});
  • wp-includes/script-loader.php

    diff --git wp-includes/script-loader.php wp-includes/script-loader.php
    index c3b3cfd..9908b54 100644
    function wp_default_scripts( &$scripts ) { 
    162162
    163163        // jQuery
    164164        $scripts->add( 'jquery', false, array( 'jquery-core', 'jquery-migrate' ), '1.11.1' );
    165         $scripts->add( 'jquery-core', '/wp-includes/js/jquery/jquery.js', array(), '1.11.1' );
     165        $scripts->add( 'jquery-core', "/wp-includes/js/jquery/jquery$suffix.js", array(), '1.11.1' );
    166166        $scripts->add( 'jquery-migrate', "/wp-includes/js/jquery/jquery-migrate$suffix.js", array(), '1.2.1' );
    167167
    168168        // full jQuery UI