diff options
author | Timmy Willison <timmywillisn@gmail.com> | 2015-07-13 15:25:49 -0400 |
---|---|---|
committer | Timmy Willison <timmywillisn@gmail.com> | 2015-07-13 15:25:49 -0400 |
commit | f9846aec1dadc4bc80ca2df47d3ecc1b9f7a4f84 (patch) | |
tree | 5e24fb3e069a8a5d4396acfafda5618e76f44079 | |
parent | c44dd7775b387094d8c921c7e839e3c266e4f2c8 (diff) | |
download | jquery-3.0.0-alpha1.tar.gz jquery-3.0.0-alpha1.zip |
3.0.0-alpha13.0.0-alpha1
-rw-r--r-- | dist/jquery.js | 9604 | ||||
-rw-r--r-- | dist/jquery.min.js | 4 | ||||
-rw-r--r-- | dist/jquery.min.map | 1 | ||||
-rw-r--r-- | package.json | 4 |
4 files changed, 9611 insertions, 2 deletions
diff --git a/dist/jquery.js b/dist/jquery.js new file mode 100644 index 000000000..8c5d32ea6 --- /dev/null +++ b/dist/jquery.js @@ -0,0 +1,9604 @@ +/*! + * jQuery JavaScript Library v3.0.0-alpha1 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2015-07-13T19:25Z + */ + +(function( global, factory ) { + + if ( typeof module === "object" && typeof module.exports === "object" ) { + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Support: Firefox 18+ +// Can't be in strict mode, several libs including ASP.NET trace +// the stack via arguments.caller.callee and Firefox dies if +// you try to trace through "use strict" call chains. (#13335) +//"use strict"; +var arr = []; + +var document = window.document; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var support = {}; + + + +var + version = "3.0.0-alpha1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android<4.1 + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || + (copyIsArray = jQuery.isArray(copy)) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + // adding 1 corrects loss of precision from parseFloat (#15100) + return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0; + }, + + isPlainObject: function( obj ) { + // Not plain objects: + // - Any object or value whose internal [[Class]] property is not "[object Object]" + // - DOM nodes + // - window + if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.constructor && + !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { + return false; + } + + // If the function hasn't returned already, we're confident that + // |obj| is a plain object, created by {} or constructed with new Object + return true; + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + // Support: Android<4.0 (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call(obj) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + var script = document.createElement( "script" ); + + script.text = code; + document.head.appendChild( script ).parentNode.removeChild( script ); + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE9-11+ + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + each: function( obj, callback ) { + var i = 0, + length = obj.length, + isArray = isArraylike( obj ); + + if ( isArray ) { + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android<4.1 + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArraylike( Object(arr) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, + i = 0, + length = elems.length, + isArray = isArraylike( elems ), + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +}); + +// JSHint would error on this code due to the Symbol not being defined in ES5. +// Defining this global in .jshintrc would create a danger of using the global +// unguarded in another place, it seems safer to just disable JSHint for these +// three lines. +/* jshint ignore: start */ +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} +/* jshint ignore: end */ + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), +function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +function isArraylike( obj ) { + + // Support: iOS 8.2 (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.2.0 + * http://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2015-04-10 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // General-purpose constants + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // http://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }; + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "[id='" + nid + "'] " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = attrs.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, parent, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11 + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Limit the fix to IE with document.documentMode and IE >=9 with document.defaultView + if ( document.documentMode && (parent = document.defaultView) && parent.top !== parent ) { + // Support: IE 11 + if ( parent.addEventListener ) { + parent.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( document.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var m = context.getElementById( id ); + return m ? [ m ] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" + + "<select id='" + expando + "-\r\\' msallowcapture=''>" + + "<option selected=''></option></select>"; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( div.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibing-combinator selector` fails + if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( div ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( (oldCache = uniqueCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ dir ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( div ) { + div.innerHTML = "<a href='#'></a>"; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = "<input/>"; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + + +var rneedsContext = jQuery.expr.match.needsContext; + +var rsingleTag = (/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + }); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + }); + + } + + if ( typeof qualifier === "string" ) { + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + }); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + })); +}; + +jQuery.fn.extend({ + find: function( selector ) { + var i, + len = this.length, + ret = [], + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return this.pushStack( len > 1 ? jQuery.uniqueSort( ret ) : ret ); + }, + filter: function( selector ) { + return this.pushStack( winnow(this, selector || [], false) ); + }, + not: function( selector ) { + return this.pushStack( winnow(this, selector || [], true) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +}); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // init accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[0] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[1], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); + + if ( elem ) { + // Inject the element directly into the jQuery object + this[0] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[0] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.extend({ + dir: function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; + }, + + sibling: function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; + } +}); + +jQuery.fn.extend({ + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter(function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { + // Always skip document fragments + if ( cur.nodeType < 11 && (pos ? + pos.index(cur) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector(cur, selectors)) ) { + + matched.push( cur ); + break; + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + } +}); + +function sibling( cur, dir ) { + while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return elem.contentDocument || jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +}); +var rnotwhite = (/\S+/g); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + }); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + // Last fire value for non-forgettable lists + memory, + // Flag to know if list was already fired + fired, + // Flag to prevent firing + locked, + // Actual callback list + list = [], + // Queue of execution data for repeatable lists + queue = [], + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + (function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( jQuery.isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + }); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks("memory"), + jQuery.Callbacks("memory"), 2 ], + [ "resolve", "done", jQuery.Callbacks("once memory"), + jQuery.Callbacks("once memory"), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), + jQuery.Callbacks("once memory"), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[1] ](function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this === promise ? newDefer.promise() : this, + fn ? [ returned ] : arguments + ); + } + }); + }); + fns = null; + }).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this === promise ? undefined : this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( jQuery.isFunction( then ) ) { + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notify ) + ); + } + + // Handle all other returned values + } else { + // Only substitue handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( + that || deferred.promise(), args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + // Only substitue handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that || deferred.promise(), + args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred(function( newDefer ) { + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[0] ] = function() { + deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[0] + "With" ] = list.fireWith; + }); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var method, + i = 0, + resolveValues = slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || + ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. + // If resolveValues consist of only a single Deferred, just use that. + master = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( values === progressValues ) { + master.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + master.resolveWith( contexts, values ); + } + }; + }, + progressValues, progressContexts, resolveContexts; + + // Add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && + jQuery.isFunction( (method = resolveValues[ i ].promise) ) ) { + + method.call( resolveValues[ i ] ) + .progress( updateFunc( i, progressContexts, progressValues ) ) + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( master.reject ); + } else if ( resolveValues[ i ] && + jQuery.isFunction( (method = resolveValues[ i ].then) ) ) { + + method.call( + resolveValues[ i ], + updateFunc( i, resolveContexts, resolveValues ), + master.reject, + updateFunc( i, progressContexts, progressValues ) + ); + } else { + --remaining; + } + } + } + + // If we're not waiting on anything, resolve the master + if ( !remaining ) { + master.resolveWith( resolveContexts, resolveValues ); + } + + return master.promise(); + } +}); + + +// The deferred used on DOM ready +var readyList; + +jQuery.fn.ready = function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; +}; + +jQuery.extend({ + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +}); + +/** + * The ready event handler and self cleanup method + */ +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called + // after the browser event has already occurred. + // We once tried to use readyState "interactive" here, + // but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + + } else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); + } + } + return readyList.promise( obj ); +}; + +// Kick off the DOM ready check even if the user does not +jQuery.ready.promise(); + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[i], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + len ? fn( elems[0], key ) : emptyGet; +}; + + +/** + * Determines whether an object can have data + */ +jQuery.acceptData = function( owner ) { + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + /* jshint -W018 */ + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; +Data.accepts = jQuery.acceptData; + +Data.prototype = { + + register: function( owner ) { + var value = {}; + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable, non-writable property + // configurability must be true to allow the property to be + // deleted with the delete operator + } else { + Object.defineProperty( owner, this.expando, { + value: value, + writable: true, + configurable: true + }); + } + return owner[ this.expando ]; + }, + cache: function( owner ) { + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( !Data.accepts( owner ) ) { + return {}; + } + + // Check if the owner object already has a cache + var cache = owner[ this.expando ]; + + // If so, return it + if ( cache ) { + return cache; + } + + // If not, register one + return this.register( owner ); + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ jQuery.camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ jQuery.camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + var cache = this.cache( owner ); + + return key === undefined ? + cache : + + // Always use camelCase key (gh-2257) + cache[ jQuery.camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // [*]When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( jQuery.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( jQuery.camelCase ); + } else { + key = jQuery.camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnotwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + delete owner[ this.expando ]; + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend({ + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE11+ + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice(5) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + dataUser.set( this, key ); + }); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each(function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + }); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each(function() { + dataUser.remove( this, key ); + }); + } +}); + + +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray(data) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + }) + }); + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +}); +var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHidden = function( elem, el ) { + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || + !jQuery.contains( elem.ownerDocument, elem ); + }; + +var swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, + scale = 1, + maxIterations = 20, + currentValue = tween ? + function() { return tween.cur(); } : + function() { return jQuery.css( elem, prop, "" ); }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + do { + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + initialInUnit = initialInUnit / scale; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // Break the loop if scale is unchanged or perfect, or if we've just had enough. + } while ( + scale !== (scale = currentValue() / initial) && scale !== 1 && --maxIterations + ); + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + if ( display === "none" ) { + // Restore a pre-hide() value if we have one + values[ index ] = dataPriv.get( elem, "display" ) || ""; + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember the value we're replacing + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop + // to avoid the constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} +var rcheckableType = (/^(?:checkbox|radio)$/i); + +var rtagName = ( /<([\w:-]+)/ ); + +var rscriptType = ( /^$|\/(?:java|ecma)script/i ); + + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE9 + option: [ 1, "<select multiple='multiple'>", "</select>" ], + + thead: [ 1, "<table>", "</table>" ], + + // Some of the following wrappers are not fully defined, because + // their parent elements (except for "table" element) could be omitted + // since browser parsers are smart enough to auto-insert them + + // Support: Android 2.3 + // Android browser doesn't auto-insert colgroup + col: [ 2, "<table><colgroup>", "</colgroup></table>" ], + + // Auto-insert "tbody" element + tr: [ 2, "<table>", "</table>" ], + + // Auto-insert "tbody" and "tr" elements + td: [ 3, "<table>", "</table>" ], + + _default: [ 0, "", "" ] +}; + +// Support: IE9 +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + // Support: IE9-11+ + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== "undefined" ? + context.querySelectorAll( tag || "*" ) : + []; + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], ret ) : + ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +(function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0-4.3 + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android<4.2 + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<=11+ + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = "<textarea>x</textarea>"; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +})(); + + +support.focusin = "onfocusin" in window; + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE9 +// See #13393 for more info +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !(events = elemData.events) ) { + events = elemData.events = {}; + } + if ( !(eventHandle = elemData.handle) ) { + eventHandle = elemData.handle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !(handlers = events[ type ]) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf(".") > -1 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf(":") < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join("."); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === (elem.ownerDocument || document) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && jQuery.acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && + jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, j, ret, matched, handleObj, + handlerQueue = [], + args = slice.call( arguments ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( (handleObj = matched.handlers[ j++ ]) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( (event.result = ret) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, matches, sel, handleObj, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Support (at least): Chrome, IE9 + // Find delegate handlers + // Black-hole SVG <use> instance trees (#13180) + // + // Support: Firefox + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.disabled !== true || event.type !== "click" ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, handlers: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); + } + + return handlerQueue; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " + + "metaKey relatedTarget shiftKey target timeStamp view which" ).split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: ( "button buttons clientX clientY offsetX offsetY pageX pageY " + + "screenX screenY toElement" ).split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - + ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - + ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: Safari 6.0+ + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + }, + + // Piggyback on a donor event to simulate a different one + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + // Previously, `originalEvent: {}` was set here, so stopPropagation call + // would not be triggered on donor event, since in our own + // jQuery.event.stopPropagation function we had a check for existence of + // originalEvent.stopPropagation method, so, consequently it would be a noop. + // + // But now, this "simulate" function is used only for events + // for which stopPropagation() is noop, so there is no need for that anymore. + // + // For the compat branch though, guard for "click" and "submit" + // events is still used, but was moved to jQuery.event.stopPropagation function + // because `originalEvent` should point to the original event for the constancy + // with other events and for more focused logic + } + ); + + jQuery.event.trigger( e, null, elem ); + + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + // Support: Android<4.0 + src.returnValue === false ? + returnTrue : + returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari<7.0 +// Safari doesn't support mouseenter/mouseleave at all. +// +// Support: Chrome 34+ +// Mouseenter doesn't perform while left mouse button is pressed +// (and initiated outside the observed element) +// https://code.google.com/p/chromium/issues/detail?id=333868 +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// Support: Firefox +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome, Safari +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + var elem = this[0]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +}); + + +var + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, + rnoInnerhtml = /<(?:script|style|link)/i, + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptTypeMasked = /^true\/(.*)/, + rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g; + +function manipulationTarget( elem, content ) { + if ( jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return elem.getElementsByTagName( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute("type"); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each(function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + }); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src ) { + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; (node = nodes[i]) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend({ + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1></$2>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; (elem = elems[ i ]) !== undefined; i++ ) { + if ( jQuery.acceptData( elem ) && (data = elem[ dataPriv.expando ])) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + delete elem[ dataPriv.expando ]; + } + } + } +}); + +jQuery.fn.extend({ + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each(function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + }); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + }); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + }); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + }); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + }); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map(function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +}); + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android<4.1, PhantomJS<2 + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +}); +var rmargin = (/^margin/); + +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE<=11+, Firefox<=30+ (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var documentElement = document.documentElement; + + + +(function() { + var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE9-11+ + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + + "padding:0;margin-top:1px;position:absolute"; + container.appendChild( div ); + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + div.style.cssText = + // Support: Android 2.3 + // Vendor-prefix box-sizing + "-webkit-box-sizing:border-box;box-sizing:border-box;" + + "display:block;position:absolute;" + + "margin:0;margin-top:1%;margin-right:50%;" + + "border:1px;padding:1px;" + + "top:1%;width:50%;height:4px"; + div.innerHTML = ""; + documentElement.appendChild( container ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + boxSizingReliableVal = divStyle.height === "4px"; + pixelMarginRightVal = divStyle.marginRight === "4px"; + + documentElement.removeChild( container ); + } + + jQuery.extend( support, { + pixelPosition: function() { + // This test is executed only once but we still do memoizing + // since we can use the boxSizingReliable pre-computing. + // No need to check if the test was already performed, though. + computeStyleTests(); + return pixelPositionVal; + }, + boxSizingReliable: function() { + if ( boxSizingReliableVal == null ) { + computeStyleTests(); + } + return boxSizingReliableVal; + }, + pixelMarginRight: function() { + // Support: Android 4.0-4.3 + // We're checking for boxSizingReliableVal here instead of pixelMarginRightVal + // since that compresses better and they're computed together anyway. + if ( boxSizingReliableVal == null ) { + computeStyleTests(); + } + return pixelMarginRightVal; + }, + reliableMarginRight: function() { + + // Support: Android 2.3 + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. (#3333) + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + // This support function is only executed once so no memoizing is needed. + var ret, + marginDiv = div.appendChild( document.createElement( "div" ) ); + + // Reset CSS: box-sizing; display; margin; border; padding + marginDiv.style.cssText = div.style.cssText = + // Support: Android 2.3 + // Vendor-prefix box-sizing + "-webkit-box-sizing:content-box;box-sizing:content-box;" + + "display:block;margin:0;border:0;padding:0"; + marginDiv.style.marginRight = marginDiv.style.width = "0"; + div.style.width = "1px"; + documentElement.appendChild( container ); + + ret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight ); + + documentElement.removeChild( container ); + div.removeChild( marginDiv ); + + return ret; + } + }); +})(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + style = elem.style; + + computed = computed || getStyles( elem ); + + // Support: IE9 + // getPropertyValue is only needed for .css('filter') (#12537) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // http://dev.w3.org/csswg/cssom/#resolved-values + if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + // Support: IE9-11+ + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return (this.get = hookFn).apply( this, arguments ); + } + }; +} + + +var + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ), + + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + +// Return a css property mapped to a potentially vendor prefixed property +function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[0].toUpperCase() + name.slice(1), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +function setPositiveNumber( elem, value, subtract ) { + var matches = rnumsplit.exec( value ); + return matches ? + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i = extra === ( isBorderBox ? "border" : "content" ) ? + // If we already have the right measurement, avoid augmentation + 4 : + // Otherwise initialize for horizontal or vertical properties + name === "width" ? 1 : 0, + + val = 0; + + for ( ; i < 4; i += 2 ) { + // Both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // At this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + // At this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // At this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with offset property, which is equivalent to the border-box value + var val, + valueIsBorderBox = true, + styles = getStyles( elem ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Support: IE <= 11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + if ( elem.getClientRects().length ) { + val = elem.getBoundingClientRect()[ name ]; + } + + // Support: IE11 only + // In IE 11 fullscreen elements inside of an iframe have + // 100x too small dimensions (gh-1764). + if ( document.msFullscreenElement && window.top !== window ) { + val *= 100; + } + + // Some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name, styles ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test(val) ) { + return val; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && + ( support.boxSizingReliable() || val === elem.style[ name ] ); + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } + + // Use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; +} + +jQuery.extend({ + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + "float": "cssFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + style = elem.style; + + name = jQuery.cssProps[ origName ] || + ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName ); + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && (ret = rcssNum.exec( value )) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + if ( type === "number" ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // Support: IE9-11+ + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !("set" in hooks) || + (value = hooks.set( elem, value, extra )) !== undefined ) { + + style[ name ] = value; + } + + } else { + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + (ret = hooks.get( elem, false, extra )) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = jQuery.camelCase( name ); + + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || + ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName ); + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; + } + return val; + } +}); + +jQuery.each([ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <= 11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + }) : + getWidthOrHeight( elem, name, extra ); + } + }, + + set: function( elem, value, extra ) { + var styles = extra && getStyles( elem ); + return setPositiveNumber( elem, value, extra ? + augmentWidthOrHeight( + elem, + name, + extra, + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + styles + ) : 0 + ); + } + }; +}); + +// Support: Android 2.3 +jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight, + function( elem, computed ) { + if ( computed ) { + return swap( elem, { "display": "inline-block" }, + curCSS, [ elem, "marginRight" ] ); + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each({ + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split(" ") : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +}); + +jQuery.fn.extend({ + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( jQuery.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + }, + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each(function() { + if ( isHidden( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + }); + } +}); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && + ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || + jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE9 +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back Compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, timerId, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function raf() { + if ( timerId ) { + window.requestAnimationFrame( raf ); + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout(function() { + fxNow = undefined; + }); + return ( fxNow = jQuery.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4 ; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( (tween = collection[ index ].call( animation, prop, value )) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + /* jshint validthis: true */ + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHidden( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always(function() { + // Ensure the complete handler is called before this completes + anim.always(function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + }); + }); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + // Support: IE 9 - 11 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + display = restoreDisplay || swap( elem, { "display": "" }, function() { + return jQuery.css( elem, "display" ); + } ); + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done(function() { + style.display = restoreDisplay; + }); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always(function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + }); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* jshint -W083 */ + anim.done(function() { + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + }); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = prop === "width" || prop === "height" ? 1 : 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( jQuery.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + // Don't match elem in the :animated selector + delete tick.elem; + }), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + // Support: Android 2.3 + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ]); + + if ( percent < 1 && length ) { + return remaining; + } else { + deferred.resolveWith( elem, [ animation ] ); + return false; + } + }, + animation = deferred.promise({ + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + }), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length ; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( jQuery.isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + jQuery.proxy( result.stop, result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + }) + ); + + // attach callbacks from options + return animation.progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnotwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length ; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +}); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + // Go to the end state if fx are off or if document is hidden + if ( jQuery.fx.off || document.hidden ) { + opt.duration = 0; + + } else { + opt.duration = typeof opt.duration === "number" ? + opt.duration : opt.duration in jQuery.fx.speeds ? + jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend({ + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHidden ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate({ opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each(function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + (type == null || timers[ index ].queue === type) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + }); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each(function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + }); + } +}); + +jQuery.each([ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +}); + +// Generate shortcuts for custom animations +jQuery.each({ + slideDown: genFx("show"), + slideUp: genFx("hide"), + slideToggle: genFx("toggle"), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +}); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + // Checks the timer has not already been removed + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + if ( timer() ) { + jQuery.fx.start(); + } else { + jQuery.timers.pop(); + } +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( !timerId ) { + timerId = window.requestAnimationFrame ? + window.requestAnimationFrame( raf ) : + window.setInterval( jQuery.fx.tick, jQuery.fx.interval ); + } +}; + +jQuery.fx.stop = function() { + if ( window.cancelAnimationFrame ) { + window.cancelAnimationFrame( timerId ); + } else { + window.clearInterval( timerId ); + } + + timerId = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + }); +}; + + +(function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android<4.4 + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE<=11+ + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: Android<=2.3 + // Options inside disabled selects are incorrectly marked as disabled + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Support: IE<=11+ + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +})(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend({ + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + } +}); + +jQuery.extend({ + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + jQuery.nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, propName, + i = 0, + attrNames = value && value.match( rnotwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[i++] ) ) { + propName = jQuery.propFix[ name ] || name; + + // Boolean attributes get special treatment (#10870) + if ( jQuery.expr.match.bool.test( name ) ) { + + // Set corresponding property to false + elem[ propName ] = false; + } + + elem.removeAttribute( name ); + } + } + } +}); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle; + if ( !isXML ) { + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ name ]; + attrHandle[ name ] = ret; + ret = getter( elem, name, isXML ) != null ? + name.toLowerCase() : + null; + attrHandle[ name ] = handle; + } + return ret; + }; +}); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i; + +jQuery.fn.extend({ + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each(function() { + delete this[ jQuery.propFix[ name ] || name ]; + }); + } +}); + +jQuery.extend({ + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + return elem.hasAttribute( "tabindex" ) || + rfocusable.test( elem.nodeName ) || elem.href ? + elem.tabIndex : + -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +}); + +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + } + }; +} + +jQuery.each([ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +}); + + + + +var rclass = /[\t\r\n\f]/g; + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +jQuery.fn.extend({ + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + proceed = typeof value === "string" && value, + i = 0, + len = this.length; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + }); + } + + if ( proceed ) { + // The disjunction here is for better compressibility (see removeClass) + classes = ( value || "" ).match( rnotwhite ) || []; + + for ( ; i < len; i++ ) { + elem = this[ i ]; + curValue = getClass( elem ); + cur = elem.nodeType === 1 && + ( " " + curValue + " " ).replace( rclass, " " ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // only assign if different to avoid unneeded rendering. + finalValue = jQuery.trim( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + proceed = arguments.length === 0 || typeof value === "string" && value, + i = 0, + len = this.length; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + }); + } + if ( proceed ) { + classes = ( value || "" ).match( rnotwhite ) || []; + + for ( ; i < len; i++ ) { + elem = this[ i ]; + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && + ( " " + curValue + " " ).replace( rclass, " " ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = value ? jQuery.trim( cur ) : ""; + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value; + + if ( typeof stateVal === "boolean" && type === "string" ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + }); + } + + return this.each(function() { + var className, i, self, classNames; + + if ( type === "string" ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = value.match( rnotwhite ) || []; + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && + ( " " + getClass( this[i] ) + " " ).replace( rclass, " " ) + .indexOf( className ) > -1 + ) { + return true; + } + } + + return false; + } +}); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend({ + val: function( value ) { + var hooks, ret, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // Handle most common string cases + ret.replace(rreturn, "") : + // Handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // Support: IE<11 + // option.value not trimmed (#14858) + return jQuery.trim( elem.value ); + } + }, + select: { + get: function( elem ) { + var value, option, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one" || index < 0, + values = one ? null : [], + max = one ? index + 1 : options.length, + i = index < 0 ? + max : + one ? index : 0; + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + // Don't return options that are disabled or in a disabled optgroup + ( support.optDisabled ? + !option.disabled : option.getAttribute( "disabled" ) === null ) && + ( !option.parentNode.disabled || + !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + if ( (option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1) ) { + optionSet = true; + } + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +}); + +// Radios and checkboxes getter/setter +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute("value") === null ? "on" : elem.value; + }; + } +}); + + + + +// Return jQuery for attributes-only inclusion + + +jQuery.each( ("blur focus focusin focusout resize scroll click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup contextmenu").split(" "), + function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; +}); + +jQuery.fn.extend({ + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length === 1 ? + this.off( selector, "**" ) : + this.off( types, selector || "**", fn ); + } +}); + + +var location = window.location; + +var nonce = jQuery.now(); + +var rquery = (/\?/); + + + +// Support: Android 2.3 +// Workaround failure to string-cast null input +jQuery.parseJSON = function( data ) { + return JSON.parse( data + "" ); +}; + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE9 + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rhash = /#.*$/, + rts = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || []; + + if ( jQuery.isFunction( func ) ) { + // For each dataType in the dataTypeExpression + while ( (dataType = dataTypes[i++]) ) { + // Prepend if requested + if ( dataType[0] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + (structure[ dataType ] = structure[ dataType ] || []).unshift( func ); + + // Otherwise append + } else { + (structure[ dataType ] = structure[ dataType ] || []).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + }); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader("Content-Type"); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s[ "throws" ] ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend({ + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /xml/, + html: /html/, + json: /json/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": jQuery.parseJSON, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + // URL without anti-cache param + cacheURL, + // Response headers + responseHeadersString, + responseHeaders, + // timeout handle + timeoutTimer, + // Url cleanup var + urlAnchor, + // To know if global events are to be dispatched + fireGlobals, + // Loop variable + i, + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + // Callbacks context + callbackContext = s.context || s, + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks("once memory"), + // Status-dependent callbacks + statusCode = s.statusCode || {}, + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + // The jqXHR state + state = 0, + // Default abort message + strAbort = "canceled", + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( state === 2 ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( (match = rheaders.exec( responseHeadersString )) ) { + responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return state === 2 ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + var lname = name.toLowerCase(); + if ( !state ) { + name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( !state ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( state < 2 ) { + for ( code in map ) { + // Lazy-add the new callback in a way that preserves old ones + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } else { + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Remove hash character (#7531: and string promotion) + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ).replace( rhash, "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE8-11+ + // IE throws exception if url is malformed, e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + // Support: IE8-11+ + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( state === 2 ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger("ajaxStart"); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + cacheURL = s.url; + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // If data is available, append data to url + if ( s.data ) { + cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data ); + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add anti-cache in url if needed + if ( s.cache === false ) { + s.url = rts.test( cacheURL ) ? + + // If there is already a '_' parameter, set its value + cacheURL.replace( rts, "$1_=" + nonce++ ) : + + // Otherwise add one to the end + cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++; + } + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? + s.accepts[ s.dataTypes[0] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( state === 2 ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout(function() { + jqXHR.abort("timeout"); + }, s.timeout ); + } + + try { + state = 1; + transport.send( requestHeaders, done ); + } catch ( e ) { + // Propagate exception as error if not done + if ( state < 2 ) { + done( -1, e ); + // Simply rethrow otherwise + } else { + throw e; + } + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Called once + if ( state === 2 ) { + return; + } + + // State is "done" now + state = 2; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader("Last-Modified"); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader("etag"); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger("ajaxStop"); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +}); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + // Shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend({ + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +}); + + +jQuery._evalUrl = function( url ) { + return jQuery.ajax({ + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + "throws": true + }); +}; + + +jQuery.fn.extend({ + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( jQuery.isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map(function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + }).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function( i ) { + jQuery( this ).wrapInner( html.call(this, i) ); + }); + } + + return this.each(function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + }); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each(function( i ) { + jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); + }); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each(function() { + jQuery( this ).replaceWith( this.childNodes ); + }); + return this; + } +}); + + +jQuery.expr.filters.hidden = function( elem ) { + return !jQuery.expr.filters.visible( elem ); +}; +jQuery.expr.filters.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +var r20 = /%20/g, + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( jQuery.isArray( obj ) ) { + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", + v, + traditional, + add + ); + } + }); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, value ) { + // If value is a function, invoke it and return its value + value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); + s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); + }; + + // Set traditional to true for jQuery <= 1.3.2 behavior. + if ( traditional === undefined ) { + traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + }); + + } else { + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ).replace( r20, "+" ); +}; + +jQuery.fn.extend({ + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map(function() { + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + }) + .filter(function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + }) + .map(function( i, elem ) { + var val = jQuery( this ).val(); + + return val == null ? + null : + jQuery.isArray( val ) ? + jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + }) : + { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + }).get(); + } +}); + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + // file protocol always yields status code 0, assume 200 + 0: 200, + // Support: IE9 + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport(function( options ) { + var callback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers["X-Requested-With"] ) { + headers["X-Requested-With"] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = xhr.onload = xhr.onerror = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + complete( + // file: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + // Support: IE9 + // Accessing binary-data responseText throws an exception + // (#11426) + typeof xhr.responseText === "string" ? { + text: xhr.responseText + } : undefined, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + xhr.onerror = callback("error"); + + // Create the abort callback + callback = callback("abort"); + + try { + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +}); + + + + +// Install script dataType +jQuery.ajaxSetup({ + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /(?:java|ecma)script/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +}); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +}); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery("<script>").prop({ + charset: s.scriptCharset, + src: s.url + }).on( + "load error", + callback = function( evt ) { + script.remove(); + callback = null; + if ( evt ) { + complete( evt.type === "error" ? 404 : 200, evt.type ); + } + } + ); + + // Use native DOM manipulation to avoid our domManip AJAX trickery + document.head.appendChild( script[ 0 ] ); + }, + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +}); + + + + +var oldCallbacks = [], + rjsonp = /(=)\?(?=&|$)|\?\?/; + +// Default jsonp settings +jQuery.ajaxSetup({ + jsonp: "callback", + jsonpCallback: function() { + var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); + this[ callback ] = true; + return callback; + } +}); + +// Detect, normalize options and install callbacks for jsonp requests +jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { + + var callbackName, overwritten, responseContainer, + jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? + "url" : + typeof s.data === "string" && + ( s.contentType || "" ) + .indexOf("application/x-www-form-urlencoded") === 0 && + rjsonp.test( s.data ) && "data" + ); + + // Handle iff the expected data type is "jsonp" or we have a parameter to set + if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { + + // Get callback name, remembering preexisting value associated with it + callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? + s.jsonpCallback() : + s.jsonpCallback; + + // Insert callback into url or form data + if ( jsonProp ) { + s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); + } else if ( s.jsonp !== false ) { + s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; + } + + // Use data converter to retrieve json after script execution + s.converters["script json"] = function() { + if ( !responseContainer ) { + jQuery.error( callbackName + " was not called" ); + } + return responseContainer[ 0 ]; + }; + + // force json dataType + s.dataTypes[ 0 ] = "json"; + + // Install callback + overwritten = window[ callbackName ]; + window[ callbackName ] = function() { + responseContainer = arguments; + }; + + // Clean-up function (fires after converters) + jqXHR.always(function() { + // If previous value didn't exist - remove it + if ( overwritten === undefined ) { + jQuery( window ).removeProp( callbackName ); + + // Otherwise restore preexisting value + } else { + window[ callbackName ] = overwritten; + } + + // Save back as free + if ( s[ callbackName ] ) { + // make sure that re-using the options doesn't screw things around + s.jsonpCallback = originalSettings.jsonpCallback; + + // save the callback name for future use + oldCallbacks.push( callbackName ); + } + + // Call if it was a function and we have a response + if ( responseContainer && jQuery.isFunction( overwritten ) ) { + overwritten( responseContainer[ 0 ] ); + } + + responseContainer = overwritten = undefined; + }); + + // Delegate to script + return "script"; + } +}); + + + + +support.createHTMLDocument = (function() { + var body = document.implementation.createHTMLDocument( "" ).body; + body.innerHTML = "<form></form><form></form>"; + return body.childNodes.length === 2; +})(); + + +// data: string of html +// context (optional): If specified, the fragment will be created in this context, +// defaults to document +// keepScripts (optional): If true, will include scripts passed in the html string +jQuery.parseHTML = function( data, context, keepScripts ) { + if ( typeof data !== "string" ) { + return []; + } + if ( typeof context === "boolean" ) { + keepScripts = context; + context = false; + } + // document.implementation stops scripts or inline event handlers from + // being executed immediately + context = context || ( support.createHTMLDocument ? + document.implementation.createHTMLDocument( "" ) : + document ); + + var parsed = rsingleTag.exec( data ), + scripts = !keepScripts && []; + + // Single tag + if ( parsed ) { + return [ context.createElement( parsed[1] ) ]; + } + + parsed = buildFragment( [ data ], context, scripts ); + + if ( scripts && scripts.length ) { + jQuery( scripts ).remove(); + } + + return jQuery.merge( [], parsed.childNodes ); +}; + + +/** + * Load a url into a page + */ +jQuery.fn.load = function( url, params, callback ) { + var selector, type, response, + self = this, + off = url.indexOf(" "); + + if ( off > -1 ) { + selector = jQuery.trim( url.slice( off ) ); + url = url.slice( 0, off ); + } + + // If it's a function + if ( jQuery.isFunction( params ) ) { + + // We assume that it's the callback + callback = params; + params = undefined; + + // Otherwise, build a param string + } else if ( params && typeof params === "object" ) { + type = "POST"; + } + + // If we have elements to modify, make the request + if ( self.length > 0 ) { + jQuery.ajax({ + url: url, + + // If "type" variable is undefined, then "GET" method will be used. + // Make value of this field explicit since + // user can override it through ajaxSetup method + type: type || "GET", + dataType: "html", + data: params + }).done(function( responseText ) { + + // Save response for use in complete callback + response = arguments; + + self.html( selector ? + + // If a selector was specified, locate the right elements in a dummy div + // Exclude scripts to avoid IE 'Permission Denied' errors + jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) : + + // Otherwise use the full result + responseText ); + + // If the request succeeds, this function gets "data", "status", "jqXHR" + // but they are ignored because response was set above. + // If it fails, this function gets "jqXHR", "status", "error" + }).always( callback && function( jqXHR, status ) { + self.each( function() { + callback.apply( self, response || [ jqXHR.responseText, status, jqXHR ] ); + }); + }); + } + + return this; +}; + + + + +// Attach a bunch of functions for handling common AJAX events +jQuery.each([ + "ajaxStart", + "ajaxStop", + "ajaxComplete", + "ajaxError", + "ajaxSuccess", + "ajaxSend" +], function( i, type ) { + jQuery.fn[ type ] = function( fn ) { + return this.on( type, fn ); + }; +}); + + + + +jQuery.expr.filters.animated = function( elem ) { + return jQuery.grep(jQuery.timers, function( fn ) { + return elem === fn.elem; + }).length; +}; + + + + +/** + * Gets a window from an element + */ +function getWindow( elem ) { + return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView; +} + +jQuery.offset = { + setOffset: function( elem, options, i ) { + var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, + position = jQuery.css( elem, "position" ), + curElem = jQuery( elem ), + props = {}; + + // Set position first, in-case top/left are set even on static elem + if ( position === "static" ) { + elem.style.position = "relative"; + } + + curOffset = curElem.offset(); + curCSSTop = jQuery.css( elem, "top" ); + curCSSLeft = jQuery.css( elem, "left" ); + calculatePosition = ( position === "absolute" || position === "fixed" ) && + ( curCSSTop + curCSSLeft ).indexOf("auto") > -1; + + // Need to be able to calculate position if either + // top or left is auto and position is either absolute or fixed + if ( calculatePosition ) { + curPosition = curElem.position(); + curTop = curPosition.top; + curLeft = curPosition.left; + + } else { + curTop = parseFloat( curCSSTop ) || 0; + curLeft = parseFloat( curCSSLeft ) || 0; + } + + if ( jQuery.isFunction( options ) ) { + + // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) + options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); + } + + if ( options.top != null ) { + props.top = ( options.top - curOffset.top ) + curTop; + } + if ( options.left != null ) { + props.left = ( options.left - curOffset.left ) + curLeft; + } + + if ( "using" in options ) { + options.using.call( elem, props ); + + } else { + curElem.css( props ); + } + } +}; + +jQuery.fn.extend({ + offset: function( options ) { + // Preserve chaining for setter + if ( arguments.length ) { + return options === undefined ? + this : + this.each(function( i ) { + jQuery.offset.setOffset( this, options, i ); + }); + } + + var docElem, win, rect, doc, + elem = this[ 0 ]; + + if ( !elem ) { + return; + } + + // Support: IE<=11+ + // Running getBoundingClientRect on a + // disconnected node in IE throws an error + if ( !elem.getClientRects().length ) { + return { top: 0, left: 0 }; + } + + rect = elem.getBoundingClientRect(); + + // Make sure element is not hidden (display: none) + if ( rect.width || rect.height ) { + doc = elem.ownerDocument; + win = getWindow( doc ); + docElem = doc.documentElement; + + return { + top: rect.top + win.pageYOffset - docElem.clientTop, + left: rect.left + win.pageXOffset - docElem.clientLeft + }; + } + + // Return zeros for disconnected and hidden elements (gh-2310) + return rect; + }, + + position: function() { + if ( !this[ 0 ] ) { + return; + } + + var offsetParent, offset, + elem = this[ 0 ], + parentOffset = { top: 0, left: 0 }; + + // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, + // because it is its only offset parent + if ( jQuery.css( elem, "position" ) === "fixed" ) { + // Assume getBoundingClientRect is there when computed position is fixed + offset = elem.getBoundingClientRect(); + + } else { + // Get *real* offsetParent + offsetParent = this.offsetParent(); + + // Get correct offsets + offset = this.offset(); + if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) { + parentOffset = offsetParent.offset(); + } + + // Add offsetParent borders + // Subtract offsetParent scroll positions + parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ) - + offsetParent.scrollTop(); + parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ) - + offsetParent.scrollLeft(); + } + + // Subtract parent offsets and element margins + return { + top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), + left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) + }; + }, + + // This method will return documentElement in the following cases: + // 1) For the element inside the iframe without offsetParent, this method will return + // documentElement of the parent window + // 2) For the hidden or detached element + // 3) For body or html element, i.e. in case of the html node - it will return itself + // + // but those exceptions were never presented as a real life use-cases + // and might be considered as more preferable results. + // + // This logic, however, is not guaranteed and can change at any point in the future + offsetParent: function() { + return this.map(function() { + var offsetParent = this.offsetParent; + + while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { + offsetParent = offsetParent.offsetParent; + } + + return offsetParent || documentElement; + }); + } +}); + +// Create scrollLeft and scrollTop methods +jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { + var top = "pageYOffset" === prop; + + jQuery.fn[ method ] = function( val ) { + return access( this, function( elem, method, val ) { + var win = getWindow( elem ); + + if ( val === undefined ) { + return win ? win[ prop ] : elem[ method ]; + } + + if ( win ) { + win.scrollTo( + !top ? val : win.pageXOffset, + top ? val : win.pageYOffset + ); + + } else { + elem[ method ] = val; + } + }, method, val, arguments.length, null ); + }; +}); + +// Support: Safari<7+, Chrome<37+ +// Add the top/left cssHooks using jQuery.fn.position +// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 +// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280 +// getComputedStyle returns percent when specified for top/left/bottom/right; +// rather than make the css module depend on the offset module, just check for it here +jQuery.each( [ "top", "left" ], function( i, prop ) { + jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, + function( elem, computed ) { + if ( computed ) { + computed = curCSS( elem, prop ); + // If curCSS returns percentage, fallback to offset + return rnumnonpx.test( computed ) ? + jQuery( elem ).position()[ prop ] + "px" : + computed; + } + } + ); +}); + + +// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods +jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { + jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, + function( defaultExtra, funcName ) { + + // Margin is only for outerHeight, outerWidth + jQuery.fn[ funcName ] = function( margin, value ) { + var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), + extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); + + return access( this, function( elem, type, value ) { + var doc; + + if ( jQuery.isWindow( elem ) ) { + // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there + // isn't a whole lot we can do. See pull request at this URL for discussion: + // https://github.com/jquery/jquery/pull/764 + return elem.document.documentElement[ "client" + name ]; + } + + // Get document width or height + if ( elem.nodeType === 9 ) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], + // whichever is greatest + return Math.max( + elem.body[ "scroll" + name ], doc[ "scroll" + name ], + elem.body[ "offset" + name ], doc[ "offset" + name ], + doc[ "client" + name ] + ); + } + + return value === undefined ? + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css( elem, type, extra ) : + + // Set width or height on the element + jQuery.style( elem, type, value, extra ); + }, type, chainable ? margin : undefined, chainable, null ); + }; + }); +}); + + + + +// Register as a named AMD module, since jQuery can be concatenated with other +// files that may use define, but not via a proper concatenation script that +// understands anonymous AMD modules. A named AMD is safest and most robust +// way to register. Lowercase jquery is used because AMD module names are +// derived from file names, and jQuery is normally delivered in a lowercase +// file name. Do this after creating the global so that if an AMD module wants +// to call noConflict to hide this version of jQuery, it will work. + +// Note that for maximum portability, libraries that are not jQuery should +// declare themselves as anonymous modules, and avoid setting a global if an +// AMD loader is present. jQuery is a special case. For more information, see +// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon + +if ( typeof define === "function" && define.amd ) { + define( "jquery", [], function() { + return jQuery; + }); +} + + + +var + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$; + +jQuery.noConflict = function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; +}; + +// Expose jQuery and $ identifiers, even in AMD +// (#7102#comment:10, https://github.com/jquery/jquery/pull/557) +// and CommonJS for browser emulators (#13566) +if ( !noGlobal ) { + window.jQuery = window.$ = jQuery; +} + +return jQuery; +})); diff --git a/dist/jquery.min.js b/dist/jquery.min.js new file mode 100644 index 000000000..1462f950c --- /dev/null +++ b/dist/jquery.min.js @@ -0,0 +1,4 @@ +/*! jQuery v3.0.0-alpha1 | (c) jQuery Foundation | jquery.org/license */ +!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=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="3.0.0-alpha1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([a-z])/g,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.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:g,sort:c.sort,splice:c.splice},n.extend=n.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||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!k.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(a){var b=d.createElement("script");b.text=a,d.head.appendChild(b).parentNode.removeChild(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c=0,d=a.length,e=s(a);if(e){for(;d>c;c++)if(b.call(a[c],c,a[c])===!1)break}else for(c in a)if(b.call(a[c],c,a[c])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:h.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;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,e=0,g=a.length,h=s(a),i=[];if(h)for(;g>e;e++)d=b(a[e],e,c),null!=d&&i.push(d);else for(e in a)d=b(a[e],e,c),null!=d&&i.push(d);return f.apply([],i)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(d=e.call(arguments,2),f=function(){return a.apply(b||this,d.concat(e.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b="length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=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)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=$.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(!(!c.qsa||A[a+" "]||q&&q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="[id='"+k+"'] "+qa(o[h]);r=o.join(","),s=_.test(a)&&oa(b.parentNode)||b}if(r)try{return H.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(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 oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),n.documentMode&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(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"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.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===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),!(!c.matchesSelector||!p||A[b+" "]||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 fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.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},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.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=fa.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=fa.selectors={cacheLength:50,createPseudo:ha,match:W,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(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===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]||fa.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]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.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(ba,ca).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("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.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.replace(P," ")+" ").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,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(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),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).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 Y.test(a.nodeName)},input:function(a){return X.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:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(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]=la(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=ma(b);function pa(){}pa.prototype=d.filters=d.pseudos,d.setFilters=new pa,g=fa.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=R.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=S.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(Q," ")}),h=h.slice(c.length));for(g in d.filter)!(e=W[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?fa.error(a):z(a,i).slice(0)};function qa(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function ra(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,k=[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(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(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 ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(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 va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(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?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(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 va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.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(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.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(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return h.call(b,a)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return this.pushStack(c>1?n.uniqueSort(d):d)},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,A=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||y,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),v.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):n.isFunction(a)?void 0!==c.ready?c.ready(a):a(n):n.makeArray(a,this)};A.prototype=n.fn,y=n(d);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(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&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?h.call(n(a),this[0]):h.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.uniqueSort(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g;function F(a){var b={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){n.each(b,function(b,c){n.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==n.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return n.each(arguments,function(a,b){var c;while((c=n.inArray(b,f,c))>-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function G(a){return a}function H(a){throw a}n.extend({Deferred:function(b){var c=[["notify","progress",n.Callbacks("memory"),n.Callbacks("memory"),2],["resolve","done",n.Callbacks("once memory"),n.Callbacks("once memory"),0,"resolved"],["reject","fail",n.Callbacks("once memory"),n.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return n.Deferred(function(b){n.each(c,function(c,d){var g=n.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this===e?b.promise():this,g?[a]:arguments)})}),a=null}).promise()},then:function(b,d,f){var g=0;function h(b,c,d,f){return function(){var i=this===e?void 0:this,j=arguments,k=function(){var a,e;if(!(g>b)){if(a=d.apply(i,j),a===c.promise())throw new TypeError("Thenable self-resolution");e=a&&("object"==typeof a||"function"==typeof a)&&a.then,n.isFunction(e)?f?e.call(a,h(g,c,G,f),h(g,c,H,f)):(g++,e.call(a,h(g,c,G,f),h(g,c,H,f),h(g,c,G,c.notify))):(d!==G&&(i=void 0,j=[a]),(f||c.resolveWith)(i||c.promise(),j))}},l=f?k:function(){try{k()}catch(a){b+1>=g&&(d!==H&&(i=void 0,j=[a]),c.rejectWith(i||c.promise(),j))}};b?l():a.setTimeout(l)}}return n.Deferred(function(a){c[0][3].add(h(0,a,n.isFunction(f)?f:G,a.notifyWith)),c[1][3].add(h(0,a,n.isFunction(b)?b:G)),c[2][3].add(h(0,a,n.isFunction(d)?d:H))}).promise()},promise:function(a){return null!=a?n.extend(a,e):e}},f={};return n.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?e:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b,c=0,d=e.call(arguments),f=d.length,g=1!==f||a&&n.isFunction(a.promise)?f:0,h=1===g?a:n.Deferred(),i=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===j?h.notifyWith(b,c):--g||h.resolveWith(b,c)}},j,k,l;if(f>1)for(j=new Array(f),k=new Array(f),l=new Array(f);f>c;c++)d[c]&&n.isFunction(b=d[c].promise)?b.call(d[c]).progress(i(c,k,j)).done(i(c,l,d)).fail(h.reject):d[c]&&n.isFunction(b=d[c].then)?b.call(d[c],i(c,l,d),h.reject,i(c,k,j)):--g;return g||h.resolveWith(l,d),h.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||I.resolveWith(d,[n]))}});function J(){d.removeEventListener("DOMContentLoaded",J),a.removeEventListener("load",J),n.ready()}n.ready.promise=function(b){return I||(I=n.Deferred(),"complete"===d.readyState?a.setTimeout(n.ready):(d.addEventListener("DOMContentLoaded",J),a.addEventListener("load",J))),I.promise(b)},n.ready.promise();var K=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)K(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(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};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function L(){this.expando=n.expando+L.uid++}L.uid=1,L.accepts=n.acceptData,L.prototype={register:function(a){var b={};return a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,writable:!0,configurable:!0}),a[this.expando]},cache:function(a){if(!L.accepts(a))return{};var b=a[this.expando];return b?b:this.register(a)},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[n.camelCase(b)]=c;else for(d in b)e[n.camelCase(d)]=b[d];return e},get:function(a,b){var c=this.cache(a);return void 0===b?c:c[n.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){n.isArray(b)?b=b.map(n.camelCase):(b=n.camelCase(b),b=b in d?[b]:b.match(E)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||n.isEmptyObject(d))&&delete a[this.expando]; +}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!n.isEmptyObject(b)}};var M=new L,N=new L,O=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,P=/[A-Z]/g;function Q(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(P,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:O.test(c)?n.parseJSON(c):c}catch(e){}N.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return N.hasData(a)||M.hasData(a)},data:function(a,b,c){return N.access(a,b,c)},removeData:function(a,b){N.remove(a,b)},_data:function(a,b,c){return M.access(a,b,c)},_removeData:function(a,b){M.remove(a,b)}}),n.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=N.get(f),1===f.nodeType&&!M.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),Q(f,d,e[d])));M.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){N.set(this,a)}):K(this,function(b){var c;if(f&&void 0===b){if(c=N.get(f,a),void 0!==c)return c;if(c=Q(f,a),void 0!==c)return c}else this.each(function(){N.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){N.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=M.get(a,b),c&&(!d||n.isArray(c)?d=M.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.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.get(a,c)||M.access(a,c,{empty:n.Callbacks("once memory").add(function(){M.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.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.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var R=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,S=new RegExp("^(?:([+-])=|)("+R+")([a-z%]*)$","i"),T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},V=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};function W(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return n.css(a,b,"")},i=h(),j=c&&c[3]||(n.cssNumber[b]?"":"px"),k=(n.cssNumber[b]||"px"!==j&&+i)&&S.exec(n.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,n.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}function X(a,b){for(var c,d,e=[],f=0,g=a.length;g>f;f++)d=a[f],d.style&&(c=d.style.display,b?"none"===c&&(e[f]=M.get(d,"display")||""):"none"!==c&&(e[f]="none",M.set(d,"display",c)));for(f=0;g>f;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}var Y=/^(?:checkbox|radio)$/i,Z=/<([\w:-]+)/,$=/^$|\/(?:java|ecma)script/i,_={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table>","</table>"],td:[3,"<table>","</table>"],_default:[0,"",""]};_.optgroup=_.option,_.tbody=_.tfoot=_.colgroup=_.caption=_.thead,_.th=_.td;function aa(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function ba(a,b){for(var c=0,d=a.length;d>c;c++)M.set(a[c],"globalEval",!b||M.get(b[c],"globalEval"))}var ca=/<|&#?\w+;/;function da(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],o=0,p=a.length;p>o;o++)if(f=a[o],f||0===f)if("object"===n.type(f))n.merge(m,f.nodeType?[f]:f);else if(ca.test(f)){g=g||l.appendChild(b.createElement("div")),h=(Z.exec(f)||["",""])[1].toLowerCase(),i=_[h]||_._default,g.innerHTML=i[1]+n.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;n.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",o=0;while(f=m[o++])if(d&&n.inArray(f,d)>-1)e&&e.push(f);else if(j=n.contains(f.ownerDocument,f),g=aa(l.appendChild(f),"script"),j&&ba(g),c){k=0;while(f=g[k++])$.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}(),l.focusin="onfocusin"in a;var ea=/^key/,fa=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ga=/^(?:focusinfocus|focusoutblur)$/,ha=/^([^.]*)(?:\.(.+)|)/;function ia(){return!0}function ja(){return!1}function ka(){try{return d.activeElement}catch(a){}}function la(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)la(a,h,c,d,b[h],f);return a}return null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1&&(e=ja),1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=M.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return"undefined"!=typeof n&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=ha.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=M.hasData(a)&&M.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=ha.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&M.remove(a,"handle events")}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!ga.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),l=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},f||!o.trigger||o.trigger.apply(e,c)!==!1)){if(!f&&!o.noBubble&&!n.isWindow(e)){for(j=o.delegateType||q,ga.test(j+q)||(h=h.parentNode);h;h=h.parentNode)p.push(h),i=h;i===(e.ownerDocument||d)&&p.push(i.defaultView||i.parentWindow||a)}g=0;while((h=p[g++])&&!b.isPropagationStopped())b.type=g>1?j:o.bindType||q,m=(M.get(h,"events")||{})[b.type]&&M.get(h,"handle"),m&&m.apply(h,c),m=l&&h[l],m&&m.apply&&n.acceptData(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=q,f||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(e)||l&&n.isFunction(e[q])&&!n.isWindow(e)&&(i=e[l],i&&(e[l]=null),n.event.triggered=q,e[q](),n.event.triggered=void 0,i&&(e[l]=i)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(M.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.rnamespace||a.rnamespace.test(g.namespace))&&(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!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(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget detail 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 offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,e,f,g=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||d,e=c.documentElement,f=c.body,a.pageX=b.clientX+(e&&e.scrollLeft||f&&f.scrollLeft||0)-(e&&e.clientLeft||f&&f.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||f&&f.scrollTop||0)-(e&&e.clientTop||f&&f.clientTop||0)),a.which||void 0===g||(a.which=1&g?1:2&g?3:4&g?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=fa.test(e)?this.mouseHooks:ea.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return 3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==ka()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===ka()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c){var d=n.extend(new n.Event,c,{type:a,isSimulated:!0});n.event.trigger(d,null,b),d.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ia:ja):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={constructor:n.Event,isDefaultPrevented:ja,isPropagationStopped:ja,isImmediatePropagationStopped:ja,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ia,a&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ia,a&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ia,a&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.focusin||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a))};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=M.access(d,b);e||d.addEventListener(a,c,!0),M.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=M.access(d,b)-1;e?M.access(d,b,e):(d.removeEventListener(a,c,!0),M.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d){return la(this,a,b,c,d)},one:function(a,b,c,d){return la(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(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=ja),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ma=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,na=/<(?:script|style|link)/i,oa=/checked\s*(?:[^=]|=\s*.checked.)/i,pa=/^true\/(.*)/,qa=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function ra(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a:a}function sa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function ta(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function ua(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(M.hasData(a)&&(f=M.access(a),g=M.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}N.hasData(a)&&(h=N.access(a),i=n.extend({},h),N.set(b,i))}}function va(a,b){var c=b.nodeName.toLowerCase();"input"===c&&Y.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}function wa(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&oa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),wa(f,b,c,d)});if(o&&(e=da(b,a[0].ownerDocument,!1,a,d),g=e.firstChild,1===e.childNodes.length&&(e=g),g||d)){for(h=n.map(aa(e,"script"),sa),i=h.length;o>m;m++)j=e,m!==p&&(j=n.clone(j,!0,!0),i&&n.merge(h,aa(j,"script"))),c.call(a[m],j,m);if(i)for(k=h[h.length-1].ownerDocument,n.map(h,ta),m=0;i>m;m++)j=h[m],$.test(j.type||"")&&!M.access(j,"globalEval")&&n.contains(k,j)&&(j.src?n._evalUrl&&n._evalUrl(j.src):n.globalEval(j.textContent.replace(qa,"")))}return a}function xa(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(aa(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&ba(aa(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(ma,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=aa(h),f=aa(a),d=0,e=f.length;e>d;d++)va(f[d],g[d]);if(b)if(c)for(f=f||aa(a),g=g||aa(h),d=0,e=f.length;e>d;d++)ua(f[d],g[d]);else ua(a,h);return g=aa(h,"script"),g.length>0&&ba(g,!i&&aa(a,"script")),h},cleanData:function(a){for(var b,c,d,e=n.event.special,f=0;void 0!==(c=a[f]);f++)if(n.acceptData(c)&&(b=c[M.expando])){if(b.events)for(d in b.events)e[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);delete c[M.expando]}}}),n.fn.extend({detach:function(a){return xa(this,a,!0)},remove:function(a){return xa(this,a)},text:function(a){return K(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return wa(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=ra(this,a);b.appendChild(a)}})},prepend:function(){return wa(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=ra(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return wa(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return wa(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(aa(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return K(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!na.test(a)&&!_[(Z.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(aa(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return wa(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(aa(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),f=e.length-1,h=0;f>=h;h++)c=h===f?this:this.clone(!0),n(e[h])[b](c),g.apply(d,c.get());return this.pushStack(d)}});var ya=/^margin/,za=new RegExp("^("+R+")(?!px)[a-z%]+$","i"),Aa=function(b){var c=b.ownerDocument.defaultView;return c.opener||(c=a),c.getComputedStyle(b)},Ba=d.documentElement;!function(){var b,c,e,f=d.createElement("div"),g=d.createElement("div");if(g.style){g.style.backgroundClip="content-box",g.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===g.style.backgroundClip,f.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",f.appendChild(g);function h(){g.style.cssText="-webkit-box-sizing:border-box;box-sizing:border-box;display:block;position:absolute;margin:0;margin-top:1%;margin-right:50%;border:1px;padding:1px;top:1%;width:50%;height:4px",g.innerHTML="",Ba.appendChild(f);var d=a.getComputedStyle(g);b="1%"!==d.top,c="4px"===d.height,e="4px"===d.marginRight,Ba.removeChild(f)}n.extend(l,{pixelPosition:function(){return h(),b},boxSizingReliable:function(){return null==c&&h(),c},pixelMarginRight:function(){return null==c&&h(),e},reliableMarginRight:function(){var b,c=g.appendChild(d.createElement("div"));return c.style.cssText=g.style.cssText="-webkit-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",g.style.width="1px",Ba.appendChild(f),b=!parseFloat(a.getComputedStyle(c).marginRight),Ba.removeChild(f),g.removeChild(c),b}})}}();function Ca(a,b,c){var d,e,f,g,h=a.style;return c=c||Aa(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),!l.pixelMarginRight()&&za.test(g)&&ya.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}function Da(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Ea=/^(none|table(?!-c[ea]).+)/,Fa=new RegExp("^("+R+")(.*)$","i"),Ga={position:"absolute",visibility:"hidden",display:"block"},Ha={letterSpacing:"0",fontWeight:"400"},Ia=["Webkit","Moz","ms"],Ja=d.createElement("div").style;function Ka(a){if(a in Ja)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ia.length;while(c--)if(a=Ia[c]+b,a in Ja)return a}function La(a,b,c){var d=Fa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Ma(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+=n.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+T[f]+"Width",!0,e))):(g+=n.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+T[f]+"Width",!0,e)));return g}function Na(b,c,e){var f,g=!0,h=Aa(b),i="border-box"===n.css(b,"boxSizing",!1,h);if(b.getClientRects().length&&(f=b.getBoundingClientRect()[c]),d.msFullscreenElement&&a.top!==a&&(f*=100),0>=f||null==f){if(f=Ca(b,c,h),(0>f||null==f)&&(f=b.style[c]),za.test(f))return f;g=i&&(l.boxSizingReliable()||f===b.style[c]),f=parseFloat(f)||0}return f+Ma(b,c,e||(i?"border":"content"),g,h)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ca(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":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Ka(h)||h),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=S.exec(c))&&e[1]&&(c=W(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(n.cssNumber[h]?"":"px")),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Ka(h)||h),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Ca(a,b,d)),"normal"===e&&b in Ha&&(e=Ha[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?!Ea.test(n.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?Na(a,b,d):V(a,Ga,function(){return Na(a,b,d)}):void 0},set:function(a,c,d){var e=d&&Aa(a);return La(a,c,d?Ma(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=Da(l.reliableMarginRight,function(a,b){return b?V(a,{display:"inline-block"},Ca,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.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}},ya.test(a)||(n.cssHooks[a+b].set=La)}),n.fn.extend({css:function(a,b){return K(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Aa(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return X(this,!0)},hide:function(){return X(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?n(this).show():n(this).hide()})}});function Oa(a,b,c,d,e){return new Oa.prototype.init(a,b,c,d,e)}n.Tween=Oa,Oa.prototype={constructor:Oa,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||n.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Oa.propHooks[this.prop];return a&&a.get?a.get(this):Oa.propHooks._default.get(this)},run:function(a){var b,c=Oa.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=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):Oa.propHooks._default.set(this),this}},Oa.prototype.init.prototype=Oa.prototype,Oa.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[n.cssProps[a.prop]]&&!n.cssHooks[a.prop]?a.elem[a.prop]=a.now:n.style(a.elem,a.prop,a.now+a.unit)}}},Oa.propHooks.scrollTop=Oa.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},n.fx=Oa.prototype.init,n.fx.step={};var Pa,Qa,Ra=/^(?:toggle|show|hide)$/,Sa=/queueHooks$/;function Ta(){Qa&&(a.requestAnimationFrame(Ta),n.fx.tick())}function Ua(){return a.setTimeout(function(){Pa=void 0}),Pa=n.now()}function Va(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=T[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Wa(a,b,c){for(var d,e=(Za.tweeners[b]||[]).concat(Za.tweeners["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Xa(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,o={},p=a.style,q=a.nodeType&&U(a),r=M.get(a,"fxshow");c.queue||(g=n._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,n.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],Ra.test(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]||n.style(a,d)}if(i=!n.isEmptyObject(b),i||!n.isEmptyObject(o)){l&&1===a.nodeType&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=r&&r.display,null==j&&(j=M.get(a,"display")),k=n.css(a,"display"),"none"===k&&(k=j||V(a,{display:""},function(){return n.css(a,"display")})),("inline"===k||"inline-block"===k&&null!=j)&&"none"===n.css(a,"float")&&(i||(m.done(function(){p.display=j}),null==j&&(k=p.display,j="none"===k?"":k)),p.display="inline-block")),c.overflow&&(p.overflow="hidden",m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]})),i=!1;for(d in o)i||(r?"hidden"in r&&(q=r.hidden):r=M.access(a,"fxshow",{display:j}),f&&(r.hidden=!q),q&&X([a],!0),m.done(function(){q||X([a]),M.remove(a,"fxshow");for(d in o)n.style(a,d,o[d])})),i=Wa(q?r[d]:0,d,m),d in r||(r[d]=i.start,q&&(i.end=i.start,i.start="width"===d||"height"===d?1:0))}}function Ya(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.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 Za(a,b,c){var d,e,f=0,g=Za.prefilters.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Pa||Ua(),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:n.extend({},b),opts:n.extend(!0,{specialEasing:{},easing:n.easing._default},c),originalProperties:b,originalOptions:c,startTime:Pa||Ua(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.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(Ya(k,j.opts.specialEasing);g>f;f++)if(d=Za.prefilters[f].call(j,a,k,j.opts))return n.isFunction(d.stop)&&(n._queueHooks(j.elem,j.opts.queue).stop=n.proxy(d.stop,d)),d;return n.map(k,Wa,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.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)}n.Animation=n.extend(Za,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return W(c.elem,a,S.exec(b),c),c}]},tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.match(E);for(var c,d=0,e=a.length;e>d;d++)c=a[d],Za.tweeners[c]=Za.tweeners[c]||[],Za.tweeners[c].unshift(b)},prefilters:[Xa],prefilter:function(a,b){b?Za.prefilters.unshift(a):Za.prefilters.push(a)}}),n.speed=function(a,b,c){var e=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return n.fx.off||d.hidden?e.duration=0:e.duration="number"==typeof e.duration?e.duration:e.duration in n.fx.speeds?n.fx.speeds[e.duration]:n.fx.speeds._default,(null==e.queue||e.queue===!0)&&(e.queue="fx"),e.old=e.complete,e.complete=function(){n.isFunction(e.old)&&e.old.call(this),e.queue&&n.dequeue(this,e.queue)},e},n.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=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Za(this,n.extend({},a),f);(e||M.get(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=n.timers,g=M.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Sa.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)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=M.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.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})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Va(b,!0),a,d,e)}}),n.each({slideDown:Va("show"),slideUp:Va("hide"),slideToggle:Va("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Pa=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Pa=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Qa||(Qa=a.requestAnimationFrame?a.requestAnimationFrame(Ta):a.setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){a.cancelAnimationFrame?a.cancelAnimationFrame(Qa):a.clearInterval(Qa),Qa=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(b,c){return b=n.fx?n.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",l.checkOn=""!==a.value,l.optSelected=c.selected,b.disabled=!0,l.optDisabled=!c.disabled,a=d.createElement("input"),a.value="t",a.type="radio",l.radioValue="t"===a.value}();var $a,_a=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return K(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){ +n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),e=n.attrHooks[b]||(n.expr.match.bool.test(b)?$a:void 0)),void 0!==c?null===c?void n.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=n.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),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=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)}}),$a={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=_a[b]||n.find.attr;_a[b]=function(a,b,d){var e,f;return d||(f=_a[b],_a[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,_a[b]=f),e}});var ab=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return K(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&n.isXMLDoc(a)||(b=n.propFix[b]||b,e=n.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){return a.hasAttribute("tabindex")||ab.test(a.nodeName)||a.href?a.tabIndex:-1}}},propFix:{"for":"htmlFor","class":"className"}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var bb=/[\t\r\n\f]/g;function cb(a){return a.getAttribute&&a.getAttribute("class")||""}n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i="string"==typeof a&&a,j=0,k=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,cb(this)))});if(i)for(b=(a||"").match(E)||[];k>j;j++)if(c=this[j],e=cb(c),d=1===c.nodeType&&(" "+e+" ").replace(bb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=n.trim(d),e!==h&&c.setAttribute("class",h)}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0===arguments.length||"string"==typeof a&&a,j=0,k=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,cb(this)))});if(i)for(b=(a||"").match(E)||[];k>j;j++)if(c=this[j],e=cb(c),d=1===c.nodeType&&(" "+e+" ").replace(bb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=a?n.trim(d):"",e!==h&&c.setAttribute("class",h)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):n.isFunction(a)?this.each(function(c){n(this).toggleClass(a.call(this,c,cb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(void 0===a||"boolean"===c)&&(b=cb(this),b&&M.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":M.get(this,"__className__")||""))})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+cb(this[c])+" ").replace(bb," ").indexOf(b)>-1)return!0;return!1}});var db=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(db,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){return n.trim(a.value)}},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||(l.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(n.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>-1:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.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 eb=a.location,fb=n.now(),gb=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return(!c||c.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+b),c};var hb=/#.*$/,ib=/([?&])_=[^&]*/,jb=/^(.*?):[ \t]*([^\r\n]*)$/gm,kb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,lb=/^(?:GET|HEAD)$/,mb=/^\/\//,nb={},ob={},pb="*/".concat("*"),qb=d.createElement("a");qb.href=eb.href;function rb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function sb(a,b,c,d){var e={},f=a===ob;function g(h){var i;return e[h]=!0,n.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 tb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function ub(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function vb(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}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:eb.href,type:"GET",isLocal:kb.test(eb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":pb,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":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?tb(tb(a,n.ajaxSettings),b):tb(n.ajaxSettings,a)},ajaxPrefilter:rb(nb),ajaxTransport:rb(ob),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m=n.ajaxSetup({},c),o=m.context||m,p=m.context&&(o.nodeType||o.jquery)?n(o):n.event,q=n.Deferred(),r=n.Callbacks("once memory"),s=m.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,getResponseHeader:function(a){var b;if(2===v){if(!h){h={};while(b=jb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===v?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return v||(a=u[c]=u[c]||a,t[a]=b),this},overrideMimeType:function(a){return v||(m.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>v)for(b in a)s[b]=[s[b],a[b]];else x.always(a[x.status]);return this},abort:function(a){var b=a||w;return e&&e.abort(b),z(0,b),this}};if(q.promise(x),m.url=((b||m.url||eb.href)+"").replace(hb,"").replace(mb,eb.protocol+"//"),m.type=c.method||c.type||m.method||m.type,m.dataTypes=n.trim(m.dataType||"*").toLowerCase().match(E)||[""],null==m.crossDomain){j=d.createElement("a");try{j.href=m.url,j.href=j.href,m.crossDomain=qb.protocol+"//"+qb.host!=j.protocol+"//"+j.host}catch(y){m.crossDomain=!0}}if(m.data&&m.processData&&"string"!=typeof m.data&&(m.data=n.param(m.data,m.traditional)),sb(nb,m,c,x),2===v)return x;k=n.event&&m.global,k&&0===n.active++&&n.event.trigger("ajaxStart"),m.type=m.type.toUpperCase(),m.hasContent=!lb.test(m.type),f=m.url,m.hasContent||(m.data&&(f=m.url+=(gb.test(f)?"&":"?")+m.data,delete m.data),m.cache===!1&&(m.url=ib.test(f)?f.replace(ib,"$1_="+fb++):f+(gb.test(f)?"&":"?")+"_="+fb++)),m.ifModified&&(n.lastModified[f]&&x.setRequestHeader("If-Modified-Since",n.lastModified[f]),n.etag[f]&&x.setRequestHeader("If-None-Match",n.etag[f])),(m.data&&m.hasContent&&m.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",m.contentType),x.setRequestHeader("Accept",m.dataTypes[0]&&m.accepts[m.dataTypes[0]]?m.accepts[m.dataTypes[0]]+("*"!==m.dataTypes[0]?", "+pb+"; q=0.01":""):m.accepts["*"]);for(l in m.headers)x.setRequestHeader(l,m.headers[l]);if(m.beforeSend&&(m.beforeSend.call(o,x,m)===!1||2===v))return x.abort();if(w="abort",r.add(m.complete),x.done(m.success),x.fail(m.error),e=sb(ob,m,c,x)){if(x.readyState=1,k&&p.trigger("ajaxSend",[x,m]),2===v)return x;m.async&&m.timeout>0&&(i=a.setTimeout(function(){x.abort("timeout")},m.timeout));try{v=1,e.send(t,z)}catch(y){if(!(2>v))throw y;z(-1,y)}}else z(-1,"No Transport");function z(b,c,d,h){var j,l,t,u,w,y=c;2!==v&&(v=2,i&&a.clearTimeout(i),e=void 0,g=h||"",x.readyState=b>0?4:0,j=b>=200&&300>b||304===b,d&&(u=ub(m,x,d)),u=vb(m,u,x,j),j?(m.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(n.lastModified[f]=w),w=x.getResponseHeader("etag"),w&&(n.etag[f]=w)),204===b||"HEAD"===m.type?y="nocontent":304===b?y="notmodified":(y=u.state,l=u.data,t=u.error,j=!t)):(t=y,(b||!y)&&(y="error",0>b&&(b=0))),x.status=b,x.statusText=(c||y)+"",j?q.resolveWith(o,[l,y,x]):q.rejectWith(o,[x,y,t]),x.statusCode(s),s=void 0,k&&p.trigger(j?"ajaxSuccess":"ajaxError",[x,m,j?l:t]),r.fireWith(o,[x,y]),k&&(p.trigger("ajaxComplete",[x,m]),--n.active||n.event.trigger("ajaxStop")))}return x},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax(n.extend({url:a,type:b,dataType:e,data:c,success:d},n.isPlainObject(a)&&a))}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return this[0]&&(n.isFunction(a)&&(a=a.call(this[0])),b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return n.isFunction(a)?this.each(function(b){n(this).wrapInner(a.call(this,b))}):this.each(function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){n(this).replaceWith(this.childNodes)}),this}}),n.expr.filters.hidden=function(a){return!n.expr.filters.visible(a)},n.expr.filters.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)};var wb=/%20/g,xb=/\[\]$/,yb=/\r?\n/g,zb=/^(?:submit|button|image|reset|file)$/i,Ab=/^(?:input|select|textarea|keygen)/i;function Bb(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||xb.test(a)?d(a,e):Bb(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Bb(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Bb(c,a[c],b,e);return d.join("&").replace(wb,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Ab.test(this.nodeName)&&!zb.test(a)&&(this.checked||!Y.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(yb,"\r\n")}}):{name:b.name,value:c.replace(yb,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Cb={0:200,1223:204},Db=n.ajaxSettings.xhr();l.cors=!!Db&&"withCredentials"in Db,l.ajax=Db=!!Db,n.ajaxTransport(function(a){var b;return l.cors||Db&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr();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)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Cb[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(g){if(b)throw g}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=n("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Eb=[],Fb=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Eb.pop()||n.expando+"_"+fb++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Fb.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Fb.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Fb,"$1"+e):b.jsonp!==!1&&(b.url+=(gb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?n(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Eb.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),l.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),n.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1),b=b||(l.createHTMLDocument?d.implementation.createHTMLDocument(""):d);var e=v.exec(a),f=!c&&[];return e?[b.createElement(e[1])]:(e=da([a],b,f),f&&f.length&&n(f).remove(),n.merge([],e.childNodes))},n.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(g,f||[a.responseText,b,a])})}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};function Gb(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,n.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),d.width||d.height?(e=f.ownerDocument,c=Gb(e),b=e.documentElement,{top:d.top+c.pageYOffset-b.clientTop,left:d.left+c.pageXOffset-b.clientLeft}):d):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0)-a.scrollTop(),d.left+=n.css(a[0],"borderLeftWidth",!0)-a.scrollLeft()),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Ba})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;n.fn[a]=function(d){return K(this,function(a,d,e){var f=Gb(a);return void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Da(l.pixelPosition,function(a,c){return c?(c=Ca(a,b),za.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return K(this,function(b,c,d){var e;return n.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?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Hb=a.jQuery,Ib=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Ib),b&&a.jQuery===n&&(a.jQuery=Hb),n},b||(a.jQuery=a.$=n),n}); diff --git a/dist/jquery.min.map b/dist/jquery.min.map new file mode 100644 index 000000000..505a01215 --- /dev/null +++ b/dist/jquery.min.map @@ -0,0 +1 @@ +{"version":3,"file":"jquery.min.js","sources":["jquery.js"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","arr","slice","concat","push","indexOf","class2type","toString","hasOwn","hasOwnProperty","support","version","jQuery","selector","context","fn","init","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","toUpperCase","prototype","jquery","constructor","length","toArray","call","get","num","pushStack","elems","ret","merge","prevObject","each","callback","map","elem","i","apply","arguments","first","eq","last","len","j","end","sort","splice","extend","options","name","src","copy","copyIsArray","clone","target","deep","isFunction","isPlainObject","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","obj","type","Array","isWindow","isNumeric","parseFloat","nodeType","isEmptyObject","globalEval","code","script","createElement","text","head","appendChild","parentNode","removeChild","camelCase","string","nodeName","toLowerCase","isArraylike","trim","makeArray","results","Object","inArray","second","grep","invert","callbackInverse","matches","callbackExpect","arg","value","guid","proxy","tmp","args","now","Date","Symbol","iterator","split","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","sortOrder","a","b","MAX_NEGATIVE","pop","push_native","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","_","escaped","escapedWhitespace","high","String","fromCharCode","unloadHandler","childNodes","e","els","seed","m","nid","match","groups","newSelector","newContext","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","getAttribute","setAttribute","toSelector","join","testContext","querySelectorAll","qsaError","removeAttribute","keys","cache","key","cacheLength","shift","markFunction","assert","div","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","documentElement","node","hasCompare","parent","doc","documentMode","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","find","filter","attrId","getAttributeNode","tag","innerHTML","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","val","specified","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative",">","dir"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","simple","forward","ofType","xml","uniqueCache","outerCache","nodeIndex","start","useCache","lastChild","uniqueID","pseudo","setFilters","idx","matched","not","matcher","unmatched","has","innerText","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","disabled","checked","selected","selectedIndex","empty","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","tokens","soFar","preFilters","cached","addCombinator","combinator","base","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","token","compiled","div1","defaultValue","unique","isXMLDoc","rneedsContext","rsingleTag","risSimple","winnow","qualifier","self","is","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","next","prev","until","truncate","sibling","n","targets","l","closest","pos","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","contentDocument","reverse","rnotwhite","createOptions","object","flag","Callbacks","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","remove","disable","lock","fireWith","Identity","v","Thrower","ex","Deferred","func","tuples","state","promise","always","deferred","fail","catch","then","pipe","fns","newDefer","tuple","returned","progress","notify","resolve","reject","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","TypeError","resolveWith","process","rejectWith","setTimeout","notifyWith","stateString","when","subordinate","method","resolveValues","remaining","master","updateFunc","values","progressValues","progressContexts","resolveContexts","readyList","readyWait","holdReady","hold","wait","completed","removeEventListener","readyState","access","chainable","emptyGet","raw","bulk","acceptData","owner","Data","uid","accepts","register","defineProperty","writable","configurable","set","data","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","parseJSON","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","rcssNum","cssExpand","isHidden","el","css","swap","old","style","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","showHide","show","display","rcheckableType","rtagName","rscriptType","wrapMap","option","thead","col","tr","td","_default","optgroup","tbody","tfoot","colgroup","caption","th","getAll","setGlobalEval","refElements","rhtml","buildFragment","scripts","selection","ignored","wrap","fragment","createDocumentFragment","nodes","htmlPrefilter","createTextNode","checkClone","cloneNode","noCloneChecked","focusin","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","returnTrue","returnFalse","safeActiveElement","err","on","types","one","origFn","event","off","handleObjIn","eventHandle","events","t","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","trigger","onlyHandlers","bubbleType","ontype","eventPath","Event","isTrigger","rnamespace","noBubble","parentWindow","isPropagationStopped","preventDefault","isDefaultPrevented","fix","handlerQueue","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","stopPropagation","postDispatch","sel","props","fixHooks","keyHooks","original","which","charCode","keyCode","mouseHooks","eventDoc","body","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","originalEvent","fixHook","load","blur","click","beforeunload","returnValue","simulate","isSimulated","defaultPrevented","timeStamp","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","relatedTarget","attaches","triggerHandler","rxhtmlTag","rnoInnerhtml","rchecked","rscriptTypeMasked","rcleanScript","manipulationTarget","content","disableScript","restoreScript","cloneCopyEvent","dest","pdataOld","pdataCur","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","insert","rmargin","rnumnonpx","getStyles","view","opener","getComputedStyle","pixelPositionVal","boxSizingReliableVal","pixelMarginRightVal","container","backgroundClip","clearCloneStyle","cssText","computeStyleTests","divStyle","height","marginRight","pixelPosition","boxSizingReliable","pixelMarginRight","reliableMarginRight","marginDiv","width","curCSS","computed","minWidth","maxWidth","getPropertyValue","addGetHookIf","conditionFn","hookFn","rdisplayswap","rnumsplit","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","cssPrefixes","emptyStyle","vendorPropName","capName","setPositiveNumber","subtract","max","augmentWidthOrHeight","extra","isBorderBox","styles","getWidthOrHeight","valueIsBorderBox","getClientRects","getBoundingClientRect","msFullscreenElement","cssHooks","opacity","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","zoom","cssProps","float","origName","margin","padding","border","prefix","suffix","expand","expanded","parts","hide","toggle","Tween","easing","propHooks","run","percent","eased","duration","step","fx","linear","p","swing","cos","PI","fxNow","timerId","rfxtypes","rrun","raf","requestAnimationFrame","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","defaultPrefilter","opts","oldfire","propTween","restoreDisplay","isBox","anim","hidden","dataShow","unqueued","overflow","overflowX","overflowY","propFilter","specialEasing","properties","stopped","prefilters","currentTime","startTime","tweens","originalProperties","originalOptions","gotoEnd","timer","complete","*","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","cancelAnimationFrame","clearInterval","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","optDisabled","radioValue","boolHook","removeAttr","nType","attrHooks","propName","attrNames","propFix","getter","rfocusable","removeProp","hasAttribute","for","class","rclass","getClass","addClass","classes","curValue","clazz","finalValue","proceed","removeClass","toggleClass","stateVal","classNames","hasClass","rreturn","valHooks","optionSet","hover","fnOver","fnOut","bind","unbind","delegate","undelegate","nonce","rquery","JSON","parse","parseXML","DOMParser","parseFromString","rhash","rts","rheaders","rlocalProtocol","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","ajaxHandleResponses","s","responses","ct","finalDataType","firstDataType","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","responseFields","dataFilter","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","json","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","status","abort","statusText","finalText","crossDomain","host","param","traditional","hasContent","ifModified","headers","beforeSend","success","send","nativeStatusText","modified","getJSON","getScript","throws","wrapAll","firstElementChild","wrapInner","unwrap","visible","offsetWidth","offsetHeight","r20","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","encodeURIComponent","serialize","serializeArray","xhr","XMLHttpRequest","xhrSuccessStatus",1223,"xhrSupported","cors","open","username","xhrFields","onload","onerror","responseText","text script","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","getWindow","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","left","using","win","rect","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","define","amd","_jQuery","_$","$","noConflict"],"mappings":"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"}
\ No newline at end of file diff --git a/package.json b/package.json index 5d8299534..247927836 100644 --- a/package.json +++ b/package.json @@ -2,12 +2,12 @@ "name": "jquery", "title": "jQuery", "description": "JavaScript library for DOM operations", - "version": "3.0.0-pre", + "version": "3.0.0-alpha1", "main": "dist/jquery.js", "homepage": "http://jquery.com", "author": { "name": "jQuery Foundation and other contributors", - "url": "https://github.com/jquery/jquery/blob/master/AUTHORS.txt" + "url": "https://github.com/jquery/jquery/blob/3.0.0-alpha1/AUTHORS.txt" }, "repository": { "type": "git", |