PageSourceSearch

https://bio-farmacy.com//themes/core.js

js bio-farmacy.com collected 2026-10-08 20:31:21 UTC 266,624 bytes, 2,883 lines download raw bytes

1/******/ (function(modules) { // webpackBootstrap
2/******/ 	// The module cache
3/******/ 	var installedModules = {};
4/******/
5/******/ 	// The require function
6/******/ 	function __webpack_require__(moduleId) {
7/******/
8/******/ 		// Check if module is in cache
9/******/ 		if(installedModules[moduleId])
10/******/ 			return installedModules[moduleId].exports;
11/******/
12/******/ 		// Create a new module (and put it into the cache)
13/******/ 		var module = installedModules[moduleId] = {
14/******/ 			exports: {},
15/******/ 			id: moduleId,
16/******/ 			loaded: false
17/******/ 		};
18/******/
19/******/ 		// Execute the module function
20/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
21/******/
22/******/ 		// Flag the module as loaded
23/******/ 		module.loaded = true;
24/******/
25/******/ 		// Return the exports of the module
26/******/ 		return module.exports;
27/******/ 	}
28/******/
29/******/
30/******/ 	// expose the modules object (__webpack_modules__)
31/******/ 	__webpack_require__.m = modules;
32/******/
33/******/ 	// expose the module cache
34/******/ 	__webpack_require__.c = installedModules;
35/******/
36/******/ 	// __webpack_public_path__
37/******/ 	__webpack_require__.p = "";
38/******/
39/******/ 	// Load entry module and return exports
40/******/ 	return __webpack_require__(0);
41/******/ })
42/************************************************************************/
43/******/ ([
44/* 0 */
45/***/ function(module, exports, __webpack_require__) {
46
47	module.exports = __webpack_require__(1);
48
49
50/***/ },
51/* 1 */
52/***/ function(module, exports, __webpack_require__) {
53
54	'use strict';
55	
56	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
57	
58	var _jquery = __webpack_require__(2);
59	
60	var _jquery2 = _interopRequireDefault(_jquery);
61	
62	/* expose jQuery for modules */
63	
64	__webpack_require__(3);
65	
66	__webpack_require__(5);
67	
68	__webpack_require__(8);
69	
70	__webpack_require__(9);
71	
72	__webpack_require__(10);
73	
74	__webpack_require__(11);
75	
76	var _prestashop = __webpack_require__(4);
77	
78	var _prestashop2 = _interopRequireDefault(_prestashop);
79	
80	var _events = __webpack_require__(12);
81	
82	var _events2 = _interopRequireDefault(_events);
83	
84	var _common = __webpack_require__(13);
85	
86	// "inherit" EventEmitter
87	window.$ = _jquery2['default'];
88	window.jQuery = _jquery2['default'];
89	
90	for (var i in _events2['default'].prototype) {
91	  _prestashop2['default'][i] = _events2['default'].prototype[i];
92	}
93	
94	(0, _jquery2['default'])(document).ready(function () {
95	  (0, _common.psShowHide)();
96	});
97
98/***/ },
99/* 2 */
100/***/ function(module, exports, __webpack_require__) {
101
102	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
103	 * jQuery JavaScript Library v2.2.4
104	 * http://jquery.com/
105	 *
106	 * Includes Sizzle.js
107	 * http://sizzlejs.com/
108	 *
109	 * Copyright jQuery Foundation and other contributors
110	 * Released under the MIT license
111	 * http://jquery.org/license
112	 *
113	 * Date: 2016-05-20T17:23Z
114	 */"use strict";(function(global,factory){if(typeof module === "object" && typeof module.exports === "object"){ // For CommonJS and CommonJS-like environments where a proper `window`
115	// is present, execute the factory and get jQuery.
116	// For environments that do not have a `window` with a `document`
117	// (such as Node.js), expose a factory as module.exports.
118	// This accentuates the need for the creation of a real `window`.
119	// e.g. var jQuery = require("jquery")(window);
120	// See ticket #14549 for more info.
121	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
122	})(typeof window !== "undefined"?window:undefined,function(window,noGlobal){ // Support: Firefox 18+
123	// Can't be in strict mode, several libs including ASP.NET trace
124	// the stack via arguments.caller.callee and Firefox dies if
125	// you try to trace through "use strict" call chains. (#13335)
126	//"use strict";
127	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="2.2.4", // Define a local copy of jQuery
128	jQuery=function jQuery(selector,context){ // The jQuery object is actually just the init constructor 'enhanced'
129	// Need init if jQuery is called (just allow error to be thrown if not included)
130	return new jQuery.fn.init(selector,context);}, // Support: Android<4.1
131	// Make sure we trim BOM and NBSP
132	rtrim=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, // Matches dashed string for camelizing
133	rmsPrefix=/^-ms-/,rdashAlpha=/-([\da-z])/gi, // Used by jQuery.camelCase as callback to replace()
134	fcamelCase=function fcamelCase(all,letter){return letter.toUpperCase();};jQuery.fn = jQuery.prototype = { // The current version of jQuery being used
135	jquery:version,constructor:jQuery, // Start with an empty selector
136	selector:"", // The default length of a jQuery object is 0
137	length:0,toArray:function toArray(){return _slice.call(this);}, // Get the Nth element in the matched element set OR
138	// Get the whole matched element set as a clean array
139	get:function get(num){return num != null? // Return just the one element from the set
140	num < 0?this[num + this.length]:this[num]: // Return all the elements in a clean array
141	_slice.call(this);}, // Take an array of elements and push it onto the stack
142	// (returning the new matched element set)
143	pushStack:function pushStack(elems){ // Build a new jQuery matched element set
144	var ret=jQuery.merge(this.constructor(),elems); // Add the old object onto the stack (as a reference)
145	ret.prevObject = this;ret.context = this.context; // Return the newly-formed element set
146	return ret;}, // Execute a callback for every element in the matched set.
147	each:function each(callback){return jQuery.each(this,callback);},map:function map(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},slice:function slice(){return this.pushStack(_slice.apply(this,arguments));},first:function first(){return this.eq(0);},last:function last(){return this.eq(-1);},eq:function eq(i){var len=this.length,j=+i + (i < 0?len:0);return this.pushStack(j >= 0 && j < len?[this[j]]:[]);},end:function end(){return this.prevObject || this.constructor();}, // For internal use only.
148	// Behaves like an Array's method, not like a jQuery method.
149	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
150	if(typeof target === "boolean"){deep = target; // Skip the boolean and the target
151	target = arguments[i] || {};i++;} // Handle case when target is a string or something (possible in deep copy)
152	if(typeof target !== "object" && !jQuery.isFunction(target)){target = {};} // Extend jQuery itself if only one argument is passed
153	if(i === length){target = this;i--;}for(;i < length;i++) { // Only deal with non-null/undefined values
154	if((options = arguments[i]) != null){ // Extend the base object
155	for(name in options) {src = target[name];copy = options[name]; // Prevent never-ending loop
156	if(target === copy){continue;} // Recurse if we're merging plain objects or arrays
157	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
158	target[name] = jQuery.extend(deep,clone,copy); // Don't bring in undefined values
159	}else if(copy !== undefined){target[name] = copy;}}}} // Return the modified object
160	return target;};jQuery.extend({ // Unique for each copy of jQuery on the page
161	expando:"jQuery" + (version + Math.random()).replace(/\D/g,""), // Assume jQuery is ready without the ready module
162	isReady:true,error:function error(msg){throw new Error(msg);},noop:function noop(){},isFunction:function isFunction(obj){return jQuery.type(obj) === "function";},isArray:Array.isArray,isWindow:function isWindow(obj){return obj != null && obj === obj.window;},isNumeric:function isNumeric(obj){ // parseFloat NaNs numeric-cast false positives (null|true|false|"")
163	// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
164	// subtraction forces infinities to NaN
165	// adding 1 corrects loss of precision from parseFloat (#15100)
166	var realStringObj=obj && obj.toString();return !jQuery.isArray(obj) && realStringObj - parseFloat(realStringObj) + 1 >= 0;},isPlainObject:function isPlainObject(obj){var key; // Not plain objects:
167	// - Any object or value whose internal [[Class]] property is not "[object Object]"
168	// - DOM nodes
169	// - window
170	if(jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow(obj)){return false;} // Not own constructor property must be Object
171	if(obj.constructor && !hasOwn.call(obj,"constructor") && !hasOwn.call(obj.constructor.prototype || {},"isPrototypeOf")){return false;} // Own properties are enumerated firstly, so to speed up,
172	// if last one is own, then all properties are own
173	for(key in obj) {}return key === undefined || hasOwn.call(obj,key);},isEmptyObject:function isEmptyObject(obj){var name;for(name in obj) {return false;}return true;},type:function type(obj){if(obj == null){return obj + "";} // Support: Android<4.0, iOS<6 (functionish RegExp)
174	return typeof obj === "object" || typeof obj === "function"?class2type[toString.call(obj)] || "object":typeof obj;}, // Evaluates a script in a global context
175	globalEval:function globalEval(code){var script,indirect=eval;code = jQuery.trim(code);if(code){ // If the code includes a valid, prologue position
176	// strict mode pragma, execute code by injecting a
177	// script tag into the document.
178	if(code.indexOf("use strict") === 1){script = document.createElement("script");script.text = code;document.head.appendChild(script).parentNode.removeChild(script);}else { // Otherwise, avoid the DOM node creation, insertion
179	// and removal by using an indirect global eval
180	indirect(code);}}}, // Convert dashed to camelCase; used by the css and data modules
181	// Support: IE9-11+
182	// Microsoft forgot to hump their vendor prefix (#9572)
183	camelCase:function camelCase(string){return string.replace(rmsPrefix,"ms-").replace(rdashAlpha,fcamelCase);},nodeName:function nodeName(elem,name){return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();},each:function each(obj,callback){var length,i=0;if(isArrayLike(obj)){length = obj.length;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;}
vendor: 7,722 bytes, lines 183-244
183, // Support: Android<4.1
184	trim:function trim(text){return text == null?"":(text + "").replace(rtrim,"");}, // results is for internal usage only
185	makeArray:function makeArray(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 inArray(elem,arr,i){return arr == null?-1:indexOf.call(arr,elem,i);},merge:function merge(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 grep(elems,callback,invert){var callbackInverse,matches=[],i=0,length=elems.length,callbackExpect=!invert; // Go through the array, only saving the items
186	// that pass the validator function
187	for(;i < length;i++) {callbackInverse = !callback(elems[i],i);if(callbackInverse !== callbackExpect){matches.push(elems[i]);}}return matches;}, // arg is for internal usage only
188	map:function map(elems,callback,arg){var length,value,i=0,ret=[]; // Go through the array, translating each of the items to their new values
189	if(isArrayLike(elems)){length = elems.length;for(;i < length;i++) {value = callback(elems[i],i,arg);if(value != null){ret.push(value);}} // Go through every key on the object,
190	}else {for(i in elems) {value = callback(elems[i],i,arg);if(value != null){ret.push(value);}}} // Flatten any nested arrays
191	return concat.apply([],ret);}, // A global GUID counter for objects
192	guid:1, // Bind a function to a context, optionally partially applying any
193	// arguments.
194	proxy:function proxy(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
195	// this throws a TypeError, but we will just return undefined.
196	if(!jQuery.isFunction(fn)){return undefined;} // Simulated bind
197	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
198	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
199	// properties to it so it needs to exist.
200	support:support}); // JSHint would error on this code due to the Symbol not being defined in ES5.
201	// Defining this global in .jshintrc would create a danger of using the global
202	// unguarded in another place, it seems safer to just disable JSHint for these
203	// three lines.
204	/* jshint ignore: start */if(typeof Symbol === "function"){jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];} /* jshint ignore: end */ // Populate the class2type map
205	jQuery.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(i,name){class2type["[object " + name + "]"] = name.toLowerCase();});function isArrayLike(obj){ // Support: iOS 8.2 (not reproducible in simulator)
206	// `in` check used to prevent JIT error (gh-2145)
207	// hasOwn isn't used here due to false negatives
208	// regarding Nodelist length in IE
209	var length=!!obj && "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= /*!
210	 * Sizzle CSS Selector Engine v2.2.1
211	 * http://sizzlejs.com/
212	 *
213	 * Copyright jQuery Foundation and other contributors
214	 * Released under the MIT license
215	 * http://jquery.org/license
216	 *
217	 * Date: 2015-10-17
218	 */(function(window){var i,support,Expr,getText,isXML,tokenize,compile,select,outermostContext,sortInput,hasDuplicate, // Local document vars
219	setDocument,document,docElem,documentIsHTML,rbuggyQSA,rbuggyMatches,matches,contains, // Instance-specific data
220	expando="sizzle" + 1 * new Date(),preferredDoc=window.document,dirruns=0,done=0,classCache=createCache(),tokenCache=createCache(),compilerCache=createCache(),sortOrder=function sortOrder(a,b){if(a === b){hasDuplicate = true;}return 0;}, // General-purpose constants
221	MAX_NEGATIVE=1 << 31, // Instance methods
222	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
223	// http://jsperf.com/thor-indexof-vs-for/5
224	indexOf=function indexOf(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
225	// http://www.w3.org/TR/css3-selectors/#whitespace
226	whitespace="[\\x20\\t\\r\\n\\f]", // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
227	identifier="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
228	attributes="\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +  // Operator (capture 2)
229	"*([*^$|!~]?=)" + whitespace +  // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
230	"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + "*\\]",pseudos=":(" + identifier + ")(?:\\((" +  // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
231	// 1. quoted (capture 3; capture 4 or capture 5)
232	"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +  // 2. simple (capture 6)
233	"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +  // 3. anything else (capture 2)
234	".*" + ")\\)|)", // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
235	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()
236	// We use this for POS matching in `select`
237	"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
238	rquickExpr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,rsibling=/[+~]/,rescape=/'|\\/g, // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
239	runescape=new RegExp("\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)","ig"),funescape=function funescape(_,escaped,escapedWhitespace){var high="0x" + escaped - 0x10000; // NaN means non-codepoint
240	// Support: Firefox<24
241	// Workaround erroneous numeric interpretation of +"0x"
242	return high !== high || escapedWhitespace?escaped:high < 0? // BMP codepoint
243	String.fromCharCode(high + 0x10000): // Supplemental Plane codepoint (surrogate pair)
244	String.fromCharCode(high >>
244 10 | 0xD800,high & 0x3FF | 0xDC00);}, // Used for iframes
245	// See setDocument()
246	// Removing the function wrapper causes a "Permission Denied"
247	// error in IE
248	unloadHandler=function unloadHandler(){setDocument();}; // Optimize for push.apply( _, NodeList )
249	try{push.apply(arr = slice.call(preferredDoc.childNodes),preferredDoc.childNodes); // Support: Android<4.0
250	// Detect silently failing push.apply
251	arr[preferredDoc.childNodes.length].nodeType;}catch(e) {push = {apply:arr.length? // Leverage slice if possible
252	function(target,els){push_native.apply(target,slice.call(els));}: // Support: IE<9
253	function(target,els){var j=target.length,i=0; // Can't trust NodeList.length
254	while(target[j++] = els[i++]) {}target.length = j - 1;}};}function Sizzle(selector,context,results,seed){var m,i,elem,nid,nidselect,match,groups,newSelector,newContext=context && context.ownerDocument, // nodeType defaults to 9, since context defaults to document
255	nodeType=context?context.nodeType:9;results = results || []; // Return early from calls with invalid selector or context
256	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
257	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
258	// (excepting DocumentFragment context, where the methods don't exist)
259	if(nodeType !== 11 && (match = rquickExpr.exec(selector))){ // ID selector
260	if(m = match[1]){ // Document context
261	if(nodeType === 9){if(elem = context.getElementById(m)){ // Support: IE, Opera, Webkit
262	// TODO: identify versions
263	// getElementById can match elements by name instead of ID
264	if(elem.id === m){results.push(elem);return results;}}else {return results;} // Element context
265	}else { // Support: IE, Opera, Webkit
266	// TODO: identify versions
267	// getElementById can match elements by name instead of ID
268	if(newContext && (elem = newContext.getElementById(m)) && contains(context,elem) && elem.id === m){results.push(elem);return results;}} // Type selector
269	}else if(match[2]){push.apply(results,context.getElementsByTagName(selector));return results; // Class selector
270	}else if((m = match[3]) && support.getElementsByClassName && context.getElementsByClassName){push.apply(results,context.getElementsByClassName(m));return results;}} // Take advantage of querySelectorAll
271	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
272	// Thanks to Andrew Dupont for this workaround technique
273	// Support: IE <=8
274	// Exclude object elements
275	}else if(context.nodeName.toLowerCase() !== "object"){ // Capture the context ID, setting it first if necessary
276	if(nid = context.getAttribute("id")){nid = nid.replace(rescape,"\\$&");}else {context.setAttribute("id",nid = expando);} // Prefix every selector in the list
277	groups = tokenize(selector);i = groups.length;nidselect = ridentifier.test(nid)?"#" + nid:"[id='" + nid + "']";while(i--) {groups[i] = nidselect + " " + toSelector(groups[i]);}newSelector = groups.join(","); // Expand context for sibling selectors
278	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
279	return select(selector.replace(rtrim,"$1"),context,results,seed);} /**
280	 * Create key-value caches of limited size
281	 * @returns {function(string, object)} Returns the Object data after storing it on itself with
282	 *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
283	 *	deleting the oldest entry
284	 */function createCache(){var keys=[];function cache(key,value){ // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
285	if(keys.push(key + " ") > Expr.cacheLength){ // Only keep the most recent entries
286	delete cache[keys.shift()];}return cache[key + " "] = value;}return cache;} /**
287	 * Mark a function for special use by Sizzle
288	 * @param {Function} fn The function to mark
289	 */function markFunction(fn){fn[expando] = true;return fn;} /**
290	 * Support testing using an element
291	 * @param {Function} fn Passed the created div and expects a boolean result
292	 */function assert(fn){var div=document.createElement("div");try{return !!fn(div);}catch(e) {return false;}finally { // Remove from its parent by default
293	if(div.parentNode){div.parentNode.removeChild(div);} // release memory in IE
294	div = null;}} /**
295	 * Adds the same handler for all of the specified attrs
296	 * @param {String} attrs Pipe-separated list of attributes
297	 * @param {Function} handler The method that will be applied
298	 */function addHandle(attrs,handler){var arr=attrs.split("|"),i=arr.length;while(i--) {Expr.attrHandle[arr[i]] = handler;}} /**
299	 * Checks document order of two siblings
300	 * @param {Element} a
301	 * @param {Element} b
302	 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
303	 */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
304	if(diff){return diff;} // Check if b follows a
305	if(cur){while(cur = cur.nextSibling) {if(cur === b){return -1;}}}return a?1:-1;} /**
306	 * Returns a function to use in pseudos for input types
307	 * @param {String} type
308	 */function createInputPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return name === "input" && elem.type === type;};} /**
309	 * Returns a function to use in pseudos for buttons
310	 * @param {String} type
311	 */function createButtonPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return (name === "input" || name === "button") && elem.type === type;};} /**
312	 * Returns a function to use in pseudos for positionals
313	 * @param {Function} fn
314	 */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
315	while(i--) {if(seed[j = matchIndexes[i]]){seed[j] = !(matches[j] = seed[j]);}}});});} /**
316	 * Checks a node for validity as a Sizzle context
317	 * @param {Element|Object=} context
318	 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
319	 */function testContext(context){return context && typeof context.getElementsByTagName !== "undefined" && context;} // Expose support vars for convenience
320	support = Sizzle.support = {}; /**
321	 * Detects XML nodes
322	 * @param {Element|Object} elem An element or a document
323	 * @returns {Boolean} True iff elem is a non-HTML XML node
324	 */isXML = Sizzle.isXML = function(elem){ // documentElement is verified for cases where it doesn't yet exist
325	// (such as loading iframes in IE - #4833)
326	var documentElement=elem && (elem.ownerDocument || elem).documentElement;return documentElement?documentElement.nodeName !== "HTML":false;}; /**
327	 * Sets document-related variables once based on the current document
328	 * @param {Element|Object} [doc] An element or document object to use to set the document
329	 * @returns {Object} Returns the current document
330	 */setDocument = Sizzle.setDocument = function(node){var hasCompare,parent,doc=node?node.ownerDocument || node:preferredDoc; // Return early if doc is invalid or already selected
331	if(doc === document || doc.nodeType !== 9 || !doc.documentElement){return document;} // Update global variables
332	document = doc;docElem = document.documentElement;documentIsHTML = !isXML(document); // Support: IE 9-11, Edge
333	// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
334	if((parent = document.defaultView) && parent.top !== parent){ // Support: IE 11
335	if(parent.addEventListener){parent.addEventListener("unload",unloadHandler,false); // Support: IE 9 - 10 only
336	}else if(parent.attachEvent){parent.attachEvent("onunload",unloadHandler);}} /* Attributes
337		---------------------------------------------------------------------- */ // Support: IE<8
338	// Verify that getAttribute really returns attributes and not properties
339	// (excepting IE8 booleans)
340	support.attributes = assert(function(div){div.className = "i";return !div.getAttribute("className");}); /* getElement(s)By*
341		---------------------------------------------------------------------- */ // Check if getElementsByTagName("*") returns only elements
342	support.getElementsByTagName = assert(function(div){div.appendChild(document.createComment(""));return !div.getElementsByTagName("*").length;});
vendor: 4,242 bytes, lines 342-383
342 // Support: IE<9
343	support.getElementsByClassName = rnative.test(document.getElementsByClassName); // Support: IE<10
344	// Check if getElementById returns elements by name
345	// The broken getElementById methods don't pick up programatically-set names,
346	// so use a roundabout getElementsByName test
347	support.getById = assert(function(div){docElem.appendChild(div).id = expando;return !document.getElementsByName || !document.getElementsByName(expando).length;}); // ID find and filter
348	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
349	// getElementById is not reliable as a find shortcut
350	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
351	Expr.find["TAG"] = support.getElementsByTagName?function(tag,context){if(typeof context.getElementsByTagName !== "undefined"){return context.getElementsByTagName(tag); // DocumentFragment nodes don't have gEBTN
352	}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
353	results=context.getElementsByTagName(tag); // Filter out possible comments
354	if(tag === "*"){while(elem = results[i++]) {if(elem.nodeType === 1){tmp.push(elem);}}return tmp;}return results;}; // Class
355	Expr.find["CLASS"] = support.getElementsByClassName && function(className,context){if(typeof context.getElementsByClassName !== "undefined" && documentIsHTML){return context.getElementsByClassName(className);}}; /* QSA/matchesSelector
356		---------------------------------------------------------------------- */ // QSA and matchesSelector support
357	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
358	rbuggyMatches = []; // qSa(:focus) reports false when true (Chrome 21)
359	// We allow this because of a bug in IE8/9 that throws an error
360	// whenever `document.activeElement` is accessed on an iframe
361	// So, we allow :focus to pass through QSA all the time to avoid the IE error
362	// See http://bugs.jquery.com/ticket/13378
363	rbuggyQSA = [];if(support.qsa = rnative.test(document.querySelectorAll)){ // Build QSA regex
364	// Regex strategy adopted from Diego Perini
365	assert(function(div){ // Select is set to empty string on purpose
366	// This is to test IE's treatment of not explicitly
367	// setting a boolean content attribute,
368	// since its presence should be enough
369	// http://bugs.jquery.com/ticket/12359
370	docElem.appendChild(div).innerHTML = "<a id='" + expando + "'></a>" + "<select id='" + expando + "-\r\\' msallowcapture=''>" + "<option selected=''></option></select>"; // Support: IE8, Opera 11-12.16
371	// Nothing should be selected when empty strings follow ^= or $= or *=
372	// The test attribute must be unknown in Opera but "safe" for WinRT
373	// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
374	if(div.querySelectorAll("[msallowcapture^='']").length){rbuggyQSA.push("[*^$]=" + whitespace + "*(?:''|\"\")");} // Support: IE8
375	// Boolean attributes and "value" are not treated correctly
376	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+
377	if(!div.querySelectorAll("[id~=" + expando + "-]").length){rbuggyQSA.push("~=");} // Webkit/Opera - :checked should return selected option elements
378	// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
379	// IE8 throws error here and will not see later tests
380	if(!div.querySelectorAll(":checked").length){rbuggyQSA.push(":checked");} // Support: Safari 8+, iOS 8+
381	// https://bugs.webkit.org/show_bug.cgi?id=136851
382	// In-page `selector#id sibing-combinator selector` fails
383	if(!div.querySelectorAll("a#" + expando + "+*").length){rbuggyQSA.push(".#.+[+~]");}});
vendor: 6,023 bytes, lines 383-426
383assert(function(div){ // Support: Windows 8 Native Apps
384	// The type and name attributes are restricted during .innerHTML assignment
385	var input=document.createElement("input");input.setAttribute("type","hidden");div.appendChild(input).setAttribute("name","D"); // Support: IE8
386	// Enforce case-sensitivity of name attribute
387	if(div.querySelectorAll("[name=d]").length){rbuggyQSA.push("name" + whitespace + "*[*^$|!~]?=");} // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
388	// IE8 throws error here and will not see later tests
389	if(!div.querySelectorAll(":enabled").length){rbuggyQSA.push(":enabled",":disabled");} // Opera 10-11 does not throw on post-comma invalid pseudos
390	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
391	// on a disconnected node (IE 9)
392	support.disconnectedMatch = matches.call(div,"div"); // This should fail with an exception
393	// Gecko does not error, returns false instead
394	matches.call(div,"[s!='']:x");rbuggyMatches.push("!=",pseudos);});}rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join("|"));rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join("|")); /* Contains
395		---------------------------------------------------------------------- */hasCompare = rnative.test(docElem.compareDocumentPosition); // Element contains another
396	// Purposefully self-exclusive
397	// As in, an element does not contain itself
398	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
399		---------------------------------------------------------------------- */ // Document order sorting
400	sortOrder = hasCompare?function(a,b){ // Flag for duplicate removal
401	if(a === b){hasDuplicate = true;return 0;} // Sort on method existence if only one input has compareDocumentPosition
402	var compare=!a.compareDocumentPosition - !b.compareDocumentPosition;if(compare){return compare;} // Calculate position if both inputs belong to the same document
403	compare = (a.ownerDocument || a) === (b.ownerDocument || b)?a.compareDocumentPosition(b): // Otherwise we know they are disconnected
404	1; // Disconnected nodes
405	if(compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare){ // Choose the first element that is related to our preferred document
406	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
407	return sortInput?indexOf(sortInput,a) - indexOf(sortInput,b):0;}return compare & 4?-1:1;}:function(a,b){ // Exit early if the nodes are identical
408	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
409	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
410	}else if(aup === bup){return siblingCheck(a,b);} // Otherwise we need full lists of their ancestors for comparison
411	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
412	while(ap[i] === bp[i]) {i++;}return i? // Do a sibling check if the nodes have a common ancestor
413	siblingCheck(ap[i],bp[i]): // Otherwise nodes in our document sort first
414	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
415	if((elem.ownerDocument || elem) !== document){setDocument(elem);} // Make sure that attribute selectors are quoted
416	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
417	if(ret || support.disconnectedMatch ||  // As well, disconnected nodes are said to be in a document
418	// fragment in IE 9
419	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
420	if((context.ownerDocument || context) !== document){setDocument(context);}return contains(context,elem);};Sizzle.attr = function(elem,name){ // Set document vars if needed
421	if((elem.ownerDocument || elem) !== document){setDocument(elem);}var fn=Expr.attrHandle[name.toLowerCase()], // Don't get fooled by Object.prototype properties (jQuery #13807)
422	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);}; /**
423	 * Document sorting and removing duplicates
424	 * @param {ArrayLike} results
425	 */Sizzle.uniqueSort = function(results){var elem,duplicates=[],j=0,i=0; // Unless we *know* we can detect duplicates, assume their presence
426	hasDuplicate = !support.detectDuplicates;sortInput = !support.sortStable && results.slice(0);results.sort(sortOrder);
vendor: 4,756 bytes, lines 426-459
426if(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
427	// See https://github.com/jquery/sizzle/pull/225
428	sortInput = null;return results;}; /**
429	 * Utility function for retrieving the text value of an array of DOM nodes
430	 * @param {Array|Element} elem
431	 */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
432	while(node = elem[i++]) { // Do not traverse comment nodes
433	ret += getText(node);}}else if(nodeType === 1 || nodeType === 9 || nodeType === 11){ // Use textContent for elements
434	// innerText usage removed for consistency of new lines (jQuery #11153)
435	if(typeof elem.textContent === "string"){return elem.textContent;}else { // Traverse its children
436	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
437	return ret;};Expr = Sizzle.selectors = { // Can be adjusted by the user
438	cacheLength:50,createPseudo:markFunction,match:matchExpr,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{"ATTR":function ATTR(match){match[1] = match[1].replace(runescape,funescape); // Move the given value to match[3] whether quoted or unquoted
439	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 CHILD(match){ /* matches from matchExpr["CHILD"]
440					1 type (only|nth|...)
441					2 what (child|of-type)
442					3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
443					4 xn-component of xn+y argument ([+-]?\d*n|)
444					5 sign of xn-component
445					6 x of xn-component
446					7 sign of y-component
447					8 y of y-component
448				*/match[1] = match[1].toLowerCase();if(match[1].slice(0,3) === "nth"){ // nth-* requires argument
449	if(!match[3]){Sizzle.error(match[0]);} // numeric x and y parameters for Expr.filter.CHILD
450	// remember that false/true cast respectively to 0/1
451	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
452	}else if(match[3]){Sizzle.error(match[0]);}return match;},"PSEUDO":function PSEUDO(match){var excess,unquoted=!match[6] && match[2];if(matchExpr["CHILD"].test(match[0])){return null;} // Accept quoted arguments as-is
453	if(match[3]){match[2] = match[4] || match[5] || ""; // Strip excess characters from unquoted arguments
454	}else if(unquoted && rpseudo.test(unquoted) && ( // Get excess from tokenize (recursively)
455	excess = tokenize(unquoted,true)) && ( // advance to the next closing parenthesis
456	excess = unquoted.indexOf(")",unquoted.length - excess) - unquoted.length)){ // excess is a negative index
457	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)
458	return match.slice(0,3);}},filter:{"TAG":function TAG(nodeNameSelector){var nodeName=nodeNameSelector.replace(runescape,funescape).toLowerCase();return nodeNameSelector === "*"?function(){return true;}:function(elem){return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;};},"CLASS":function CLASS(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 ATTR(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 CHILD(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)
459	function(elem){return !!elem.parentNode;}
vendor: 6,160 bytes, lines 459-503
459: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)
460	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)
461	start = dir = type === "only" && !start && "nextSibling";}return true;}start = [forward?parent.firstChild:parent.lastChild]; // non-xml :nth-child(...) stores cache data on `parent`
462	if(forward && useCache){ // Seek `elem` from a previously-cached index
463	// ...in a gzip-friendly way
464	node = parent;outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only
465	// Defend against cloned attroperties (jQuery gh-1709)
466	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
467	diff = nodeIndex = 0) || start.pop()) { // When found, cache indexes on `parent` and break
468	if(node.nodeType === 1 && ++diff && node === elem){uniqueCache[type] = [dirruns,nodeIndex,diff];break;}}}else { // Use previously-cached element index if available
469	if(useCache){ // ...in a gzip-friendly way
470	node = elem;outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only
471	// Defend against cloned attroperties (jQuery gh-1709)
472	uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});cache = uniqueCache[type] || [];nodeIndex = cache[0] === dirruns && cache[1];diff = nodeIndex;} // xml :nth-child(...)
473	// or :nth-last-child(...) or :nth(-last)?-of-type(...)
474	if(diff === false){ // Use the same loop as above to seek `elem` from the start
475	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
476	if(useCache){outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only
477	// Defend against cloned attroperties (jQuery gh-1709)
478	uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});uniqueCache[type] = [dirruns,diff];}if(node === elem){break;}}}}} // Incorporate the offset, then check against cycle size
479	diff -= last;return diff === first || diff % first === 0 && diff / first >= 0;}};},"PSEUDO":function PSEUDO(pseudo,argument){ // pseudo-class names are case-insensitive
480	// http://www.w3.org/TR/selectors/#pseudo-classes
481	// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
482	// Remember that setFilters inherits from pseudos
483	var args,fn=Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error("unsupported pseudo: " + pseudo); // The user may use createPseudo to indicate that
484	// arguments are needed to create the filter function
485	// just as Sizzle does
486	if(fn[expando]){return fn(argument);} // But maintain support for old signatures
487	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
488	"not":markFunction(function(selector){ // Trim the selector passed to compile
489	// to avoid treating leading and trailing
490	// spaces as combinators
491	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`
492	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)
493	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
494	// is based solely on the element's language value
495	// being equal to the identifier C,
496	// or beginning with the identifier C immediately followed by "-".
497	// The matching of C against the element's language value is performed case-insensitively.
498	// The identifier C does not have to be a valid language name."
499	// http://www.w3.org/TR/selectors/#lang-pseudo
500	"lang":markFunction(function(lang){ // lang value must be a valid identifier
501	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
502	"target":function target(elem){var hash=window.location && window.location.hash;return hash && hash.slice(1) === elem.id;},"root":function root(elem){return elem === docElem;},"focus":function focus(elem){return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);}, // Boolean properties
503	"enabled":function enabled(elem){return elem.disabled === false;},"disabled":function disabled(elem){return elem.disabled === true;},"checked":function checked(elem){ // In CSS3, :checked should return both checked and selected elements
vendor: 4,179 bytes, lines 504-527
504	// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
505	var nodeName=elem.nodeName.toLowerCase();return nodeName === "input" && !!elem.checked || nodeName === "option" && !!elem.selected;},"selected":function selected(elem){ // Accessing this property makes selected-by-default
506	// options in Safari work properly
507	if(elem.parentNode){elem.parentNode.selectedIndex;}return elem.selected === true;}, // Contents
508	"empty":function empty(elem){ // http://www.w3.org/TR/selectors/#empty-pseudo
509	// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
510	//   but not by others (comment: 8; processing instruction: 7; etc.)
511	// nodeType < 6 works because attributes (2) do not appear as children
512	for(elem = elem.firstChild;elem;elem = elem.nextSibling) {if(elem.nodeType < 6){return false;}}return true;},"parent":function parent(elem){return !Expr.pseudos["empty"](elem);}, // Element/input types
513	"header":function header(elem){return rheader.test(elem.nodeName);},"input":function input(elem){return rinputs.test(elem.nodeName);},"button":function button(elem){var name=elem.nodeName.toLowerCase();return name === "input" && elem.type === "button" || name === "button";},"text":function text(elem){var attr;return elem.nodeName.toLowerCase() === "input" && elem.type === "text" && ( // Support: IE<8
514	// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
515	(attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text");}, // Position-in-collection
516	"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
517	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
518	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
519	if(!matched || (match = rcomma.exec(soFar))){if(match){ // Don't consume trailing commas as valid
520	soFar = soFar.slice(match[0].length) || soFar;}groups.push(tokens = []);}matched = false; // Combinators
521	if(match = rcombinators.exec(soFar)){matched = match.shift();tokens.push({value:matched, // Cast descendant combinators to space
522	type:match[0].replace(rtrim," ")});soFar = soFar.slice(matched.length);} // Filters
523	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
524	// if we're just parsing
525	// Otherwise, throw an error or return tokens
526	return parseOnly?soFar.length:soFar?Sizzle.error(selector): // Cache the tokens
527	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;}
527function addCombinator(matcher,combinator,base){var dir=combinator.dir,checkNonElements=base && dir === "parentNode",doneName=done++;return combinator.first? // Check against closest ancestor/preceding element
528	function(elem,context,xml){while(elem = elem[dir]) {if(elem.nodeType === 1 || checkNonElements){return matcher(elem,context,xml);}}}: // Check against all ancestor/preceding elements
529	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
530	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
531	// Defend against cloned attroperties (jQuery gh-1709)
532	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
533	return newCache[2] = oldCache[2];}else { // Reuse newcache so results back-propagate to previous elements
534	uniqueCache[dir] = newCache; // A match means we're done; a fail means we have to keep checking
535	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
536	elems=seed || multipleContexts(selector || "*",context.nodeType?[context]:context,[]), // Prefilter to get matcher input, preserving a map for seed-results synchronization
537	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,
538	postFinder || (seed?preFilter:preexisting || postFilter)? // ...intermediate processing is necessary
539	[]: // ...otherwise use results directly
540	results:matcherIn; // Find primary matches
541	if(matcher){matcher(matcherIn,matcherOut,context,xml);} // Apply postFilter
542	if(postFilter){temp = condense(matcherOut,postMap);postFilter(temp,[],context,xml); // Un-match failing elements by moving them back to matcherIn
543	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
544	temp = [];i = matcherOut.length;while(i--) {if(elem = matcherOut[i]){ // Restore matcherIn since elem is not yet a final match
545	temp.push(matcherIn[i] = elem);}}postFinder(null,matcherOut = [],temp,xml);} // Move matched elements from seed to results to keep them synchronized
546	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
547	}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)
548	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)
549	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
550	if(matcher[expando]){ // Find the next relative operator (if any) for proper handling
551	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 `*`
552	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 superMatcher(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
553	elems=seed || byElement && Expr.find["TAG"]("*",outermost), // Use integer dirruns iff this is the outermost matcher
554	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
555	// Support: IE<9, Safari
556	// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
557	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
558	if(bySet){ // They will have gone through all possible matchers
vendor: 4,418 bytes, lines 559-595
559	if(elem = !matcher && elem){matchedCount--;} // Lengthen the array for every element, matched or not
560	if(seed){unmatched.push(elem);}}} // `i` is now the count of elements visited above, and adding it to `matchedCount`
561	// makes the latter nonnegative.
562	matchedCount += i; // Apply set filters to unmatched elements
563	// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
564	// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
565	// no element matchers and no seed.
566	// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
567	// case, which will result in a "00" `matchedCount` that differs from `i` but is also
568	// numerically zero.
569	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
570	if(matchedCount > 0){while(i--) {if(!(unmatched[i] || setMatched[i])){setMatched[i] = pop.call(results);}}} // Discard index placeholder values to get only actual matches
571	setMatched = condense(setMatched);} // Add matches to results
572	push.apply(results,setMatched); // Seedless set matches succeeding multiple successful matchers stipulate sorting
573	if(outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1){Sizzle.uniqueSort(results);}} // Override manipulation of globals by nested matchers
574	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
575	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
576	cached = compilerCache(selector,matcherFromGroupMatchers(elementMatchers,setMatchers)); // Save selector and tokenization
577	cached.selector = selector;}return cached;}; /**
578	 * A low-level selection function that works with Sizzle's compiled
579	 *  selector functions
580	 * @param {String|Function} selector A selector or a pre-compiled
581	 *  selector function built with Sizzle.compile
582	 * @param {Element} context
583	 * @param {Array} [results]
584	 * @param {Array} [seed] A set of elements to match against
585	 */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
586	// (the latter of which guarantees us context)
587	if(match.length === 1){ // Reduce context if the leading compound selector is an ID
588	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
589	}else if(compiled){context = context.parentNode;}selector = selector.slice(tokens.shift().value.length);} // Fetch a seed set for right-to-left matching
590	i = matchExpr["needsContext"].test(selector)?0:tokens.length;while(i--) {token = tokens[i]; // Abort if we hit a combinator
591	if(Expr.relative[type = token.type]){break;}if(find = Expr.find[type]){ // Search, expanding context for leading sibling combinators
592	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
593	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
594	// Provide `match` to avoid retokenization if we modified the selector above
595	(compiled || compile(selector,match))(seed,context,!documentIsHTML,results,!context || rsibling.test(selector) && testC
vendor: 4,623 bytes, lines 595-616
595ontext(context.parentNode) || context);return results;}; // One-time assignments
596	// Sort stability
597	support.sortStable = expando.split("").sort(sortOrder).join("") === expando; // Support: Chrome 14-35+
598	// Always assume duplicates if they aren't passed to the comparison function
599	support.detectDuplicates = !!hasDuplicate; // Initialize against the default document
600	setDocument(); // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
601	// Detached nodes confoundingly follow *each other*
602	support.sortDetached = assert(function(div1){ // Should return 1, but returns 4 (following)
603	return div1.compareDocumentPosition(document.createElement("div")) & 1;}); // Support: IE<8
604	// Prevent attribute/property "interpolation"
605	// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
606	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
607	// Use defaultValue in place of getAttribute("value")
608	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
609	// Use getAttributeNode to fetch booleans when getAttribute lies
610	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 dir=function dir(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;};var _siblings=function _siblings(n,elem){var matched=[];for(;n;n = n.nextSibling) {if(n.nodeType === 1 && n !== elem){matched.push(n);}}return matched;};var rneedsContext=jQuery.expr.match.needsContext;var rsingleTag=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/;var risSimple=/^.[^:#\[\.,]*$/; // Implement the identical functionality for filter and not
611	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 find(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);} // Needed because $( selector, context ) becomes $( context ).find( selector )
612	ret = this.pushStack(len > 1?jQuery.unique(ret):ret);ret.selector = this.selector?this.selector + " " + selector:selector;return ret;},filter:function filter(selector){return this.pushStack(winnow(this,selector || [],false));},not:function not(selector){return this.pushStack(winnow(this,selector || [],true));},is:function is(selector){return !!winnow(this, // If this is a positional/relative selector, check membership in the returned set
613	// so $("p:first").is("p:last") won't return true for a doc with two "p".
614	typeof selector === "string" && rneedsContext.test(selector)?jQuery(selector):selector || [],false).length;}}); // Initialize a jQuery object
615	// A central reference to the root jQuery(document)
616	var rootjQuery, // A simple way to check for HTML strings
vendor: 1,592 bytes, lines 617-632
617	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
618	// Strict HTML recognition (#11290: must start with <)
619	rquickExpr=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,init=jQuery.fn.init = function(selector,context,root){var match,elem; // HANDLE: $(""), $(null), $(undefined), $(false)
620	if(!selector){return this;} // Method init() accepts an alternate rootjQuery
621	// so migrate can support jQuery.sub (gh-2101)
622	root = root || rootjQuery; // Handle HTML strings
623	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
624	match = [null,selector,null];}else {match = rquickExpr.exec(selector);} // Match html or make sure no context is specified for #id
625	if(match && (match[1] || !context)){ // HANDLE: $(html) -> $(array)
626	if(match[1]){context = context instanceof jQuery?context[0]:context; // Option to run scripts is true for back-compat
627	// Intentionally let the error be thrown if parseHTML is not present
628	jQuery.merge(this,jQuery.parseHTML(match[1],context && context.nodeType?context.ownerDocument || context:document,true)); // HANDLE: $(html, props)
629	if(rsingleTag.test(match[1]) && jQuery.isPlainObject(context)){for(match in context) { // Properties of context are called as methods if possible
630	if(jQuery.isFunction(this[match])){this[match](context[match]); // ...and otherwise set as attributes
631	}else {this.attr(match,context[match]);}}}return this; // HANDLE: $(#id)
632	}else {elem = document.getElementById(match[2]);
vendor: 6,692 bytes, lines 632-692
632 // Support: Blackberry 4.6
633	// gEBID returns nodes no longer in the document (#6963)
634	if(elem && elem.parentNode){ // Inject the element directly into the jQuery object
635	this.length = 1;this[0] = elem;}this.context = document;this.selector = selector;return this;} // HANDLE: $(expr, $(...))
636	}else if(!context || context.jquery){return (context || root).find(selector); // HANDLE: $(expr, context)
637	// (which is just equivalent to: $(context).find(expr)
638	}else {return this.constructor(context).find(selector);} // HANDLE: $(DOMElement)
639	}else if(selector.nodeType){this.context = this[0] = selector;this.length = 1;return this; // HANDLE: $(function)
640	// Shortcut for document ready
641	}else if(jQuery.isFunction(selector)){return root.ready !== undefined?root.ready(selector): // Execute immediately if ready is not present
642	selector(jQuery);}if(selector.selector !== undefined){this.selector = selector.selector;this.context = selector.context;}return jQuery.makeArray(selector,this);}; // Give the init function the jQuery prototype for later instantiation
643	init.prototype = jQuery.fn; // Initialize central reference
644	rootjQuery = jQuery(document);var rparentsprev=/^(?:parents|prev(?:Until|All))/, // Methods guaranteed to produce a unique set when starting from a unique set
645	guaranteedUnique={children:true,contents:true,next:true,prev:true};jQuery.fn.extend({has:function has(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 closest(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
646	if(cur.nodeType < 11 && (pos?pos.index(cur) > -1: // Don't pass non-elements to Sizzle
647	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
648	index:function index(elem){ // No argument, return index in parent
649	if(!elem){return this[0] && this[0].parentNode?this.first().prevAll().length:-1;} // Index in selector
650	if(typeof elem === "string"){return indexOf.call(jQuery(elem),this[0]);} // Locate the position of the desired element
651	return indexOf.call(this, // If it receives a jQuery object, the first element is used
652	elem.jquery?elem[0]:elem);},add:function add(selector,context){return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(),jQuery(selector,context))));},addBack:function addBack(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 parent(elem){var parent=elem.parentNode;return parent && parent.nodeType !== 11?parent:null;},parents:function parents(elem){return dir(elem,"parentNode");},parentsUntil:function parentsUntil(elem,i,until){return dir(elem,"parentNode",until);},next:function next(elem){return sibling(elem,"nextSibling");},prev:function prev(elem){return sibling(elem,"previousSibling");},nextAll:function nextAll(elem){return dir(elem,"nextSibling");},prevAll:function prevAll(elem){return dir(elem,"previousSibling");},nextUntil:function nextUntil(elem,i,until){return dir(elem,"nextSibling",until);},prevUntil:function prevUntil(elem,i,until){return dir(elem,"previousSibling",until);},siblings:function siblings(elem){return _siblings((elem.parentNode || {}).firstChild,elem);},children:function children(elem){return _siblings(elem.firstChild);},contents:function contents(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
653	if(!guaranteedUnique[name]){jQuery.uniqueSort(matched);} // Reverse order for parents* and prev-derivatives
654	if(rparentsprev.test(name)){matched.reverse();}}return this.pushStack(matched);};});var rnotwhite=/\S+/g; // Convert String-formatted options into Object-formatted ones
655	function createOptions(options){var object={};jQuery.each(options.match(rnotwhite) || [],function(_,flag){object[flag] = true;});return object;} /*
656	 * Create a callback list using the following parameters:
657	 *
658	 *	options: an optional list of space-separated options that will change how
659	 *			the callback list behaves or a more traditional option object
660	 *
661	 * By default a callback list will act like an event callback list and can be
662	 * "fired" multiple times.
663	 *
664	 * Possible options:
665	 *
666	 *	once:			will ensure the callback list can only be fired once (like a Deferred)
667	 *
668	 *	memory:			will keep track of previous values and will call any callback added
669	 *					after the list has been fired right away with the latest "memorized"
670	 *					values (like a Deferred)
671	 *
672	 *	unique:			will ensure a callback can only be added once (no duplicate in the list)
673	 *
674	 *	stopOnFalse:	interrupt callings when a callback returns false
675	 *
676	 */jQuery.Callbacks = function(options){ // Convert options from String-formatted to Object-formatted if needed
677	// (we check in cache first)
678	options = typeof options === "string"?createOptions(options):jQuery.extend({},options);var  // Flag to know if list is currently firing
679	firing, // Last fire value for non-forgettable lists
680	memory, // Flag to know if list was already fired
681	_fired, // Flag to prevent firing
682	_locked, // Actual callback list
683	list=[], // Queue of execution data for repeatable lists
684	queue=[], // Index of currently firing callback (modified by add/remove as needed)
685	firingIndex=-1, // Fire callbacks
686	fire=function fire(){ // Enforce single-firing
687	_locked = options.once; // Execute callbacks for all pending executions,
688	// respecting firingIndex overrides and runtime changes
689	_fired = firing = true;for(;queue.length;firingIndex = -1) {memory = queue.shift();while(++firingIndex < list.length) { // Run callback and check for early termination
690	if(list[firingIndex].apply(memory[0],memory[1]) === false && options.stopOnFalse){ // Jump to end and forget the data so .add doesn't re-fire
691	firingIndex = list.length;memory = false;}}} // Forget the data if we're done with it
692	if(!options.memory){memory = false;}firing = false; // Clean up if we're done firing for good
693	if(_locked){ // Keep an empty list if we have data for future add calls
694	if(memory){list = []; // Otherwise, this object is spent
695	}else {list = "";}}}, // Actual Callbacks object
696	self={ // Add a callback or a collection of callbacks to the list
697	add:function add(){if(list){ // If we have memory from a past run, we should fire after adding
698	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
699	add(arg);}});})(arguments);if(memory && !firing){fire();}}return this;}, // Remove a callback from the list
700	remove:function remove(){jQuery.each(arguments,function(_,arg){var index;while((index = jQuery.inArray(arg,list,index)) > -1) {list.splice(index,1); // Handle firing indexes
701	if(index <= firingIndex){firingIndex--;}}});return this;}, // Check if a given callback is in the list.
702	// If no argument is given, return whether or not list has callbacks attached.
703	has:function has(fn){return fn?jQuery.inArray(fn,list) > -1:list.length > 0;}, // Remove all callbacks from the list
704	empty:function empty(){if(list){list = [];}return this;}, // Disable .fire and .add
705	// Abort any current/pending executions
706	// Clear all callbacks and values
707	disable:function disable(){_locked = queue = [];list = memory = "";return this;},disabled:function disabled(){return !list;}, // Disable .fire
708	// Also disable .add unless we have memory (since it would have no effect)
709	// Abort any pending executions
710	lock:function lock(){_locked = queue = [];if(!memory){list = memory = "";}return this;},locked:function locked(){return !!_locked;}, // Call all callbacks with the given context and arguments
711	fireWith:function fireWith(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
712	fire:function fire(){self.fireWith(this,arguments);return this;}, // To know if the callbacks have already been called at least once
713	fired:function fired(){return !!_fired;}};return self;};jQuery.extend({Deferred:function Deferred(func){var tuples=[ // action, add listener, listener list, final state
714	["resolve","done",jQuery.Callbacks("once memory"),"resolved"],["reject","fail",jQuery.Callbacks("once memory"),"rejected"],["notify","progress",jQuery.Callbacks("memory")]],_state="pending",_promise={state:function state(){return _state;},always:function always(){deferred.done(arguments).fail(arguments);return this;},then:function then() /* fnDone, fnFail, fnProgress */{var fns=arguments;return jQuery.Deferred(function(newDefer){jQuery.each(tuples,function(i,tuple){var fn=jQuery.isFunction(fns[i]) && fns[i]; // deferred[ done | fail | progress ] for forwarding actions to newDefer
715	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();}, // Get a promise for this deferred
716	// If obj is provided, the promise aspect is added to the object
717	promise:function promise(obj){return obj != null?jQuery.extend(obj,_promise):_promise;}},deferred={}; // Keep pipe for back-compat
718	_promise.pipe = _promise.then; // Add list-specific methods
719	jQuery.each(tuples,function(i,tuple){var list=tuple[2],stateString=tuple[3]; // promise[ done | fail | progress ] = list.add
720	_promise[tuple[1]] = list.add; // Handle state
721	if(stateString){list.add(function(){ // state = [ resolved | rejected ]
722	_state = stateString; // [ reject_list | resolve_list ].disable; progress_list.lock
723	},tuples[i ^ 1][2].disable,tuples[2][2].lock);} // deferred[ resolve | reject | notify ]
724	deferred[tuple[0]] = function(){deferred[tuple[0] + "With"](this === deferred?_promise:this,arguments);return this;};deferred[tuple[0] + "With"] = list.fireWith;}); // Make the deferred a promise
725	_promise.promise(deferred); // Call given func if any
726	if(func){func.call(deferred,deferred);} // All done!
727	return deferred;}, // Deferred helper
728	when:function when(subordinate /* , ..., subordinateN */){var i=0,resolveValues=_slice.call(arguments),length=resolveValues.length, // the count of uncompleted subordinates
729	remaining=length !== 1 || subordinate && jQuery.isFunction(subordinate.promise)?length:0, // the master Deferred.
730	// If resolveValues consist of only a single Deferred, just use that.
731	deferred=remaining === 1?subordinate:jQuery.Deferred(), // Update function for both resolve and progress values
732	updateFunc=function updateFunc(i,contexts,values){return function(value){contexts[i] = this;values[i] = arguments.length > 1?_slice.call(arguments):value;if(values === progressValues){deferred.notifyWith(contexts,values);}else if(! --remaining){deferred.resolveWith(contexts,values);}};},progressValues,progressContexts,resolveContexts; // Add listeners to Deferred subordinates; treat others as resolved
733	if(length > 1){progressValues = new Array(length);progressContexts = new Array(length);
vendor: 1,993 bytes, lines 733-751
733resolveContexts = new Array(length);for(;i < length;i++) {if(resolveValues[i] && jQuery.isFunction(resolveValues[i].promise)){resolveValues[i].promise().progress(updateFunc(i,progressContexts,progressValues)).done(updateFunc(i,resolveContexts,resolveValues)).fail(deferred.reject);}else {--remaining;}}} // If we're not waiting on anything, resolve the master
734	if(!remaining){deferred.resolveWith(resolveContexts,resolveValues);}return deferred.promise();}}); // The deferred used on DOM ready
735	var readyList;jQuery.fn.ready = function(fn){ // Add the callback
736	jQuery.ready.promise().done(fn);return this;};jQuery.extend({ // Is the DOM ready to be used? Set to true once it occurs.
737	isReady:false, // A counter to track how many items to wait for before
738	// the ready event fires. See #6781
739	readyWait:1, // Hold (or release) the ready event
740	holdReady:function holdReady(hold){if(hold){jQuery.readyWait++;}else {jQuery.ready(true);}}, // Handle when the DOM is ready
741	ready:function ready(wait){ // Abort if there are pending holds or we're already ready
742	if(wait === true?--jQuery.readyWait:jQuery.isReady){return;} // Remember that the DOM is ready
743	jQuery.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be
744	if(wait !== true && --jQuery.readyWait > 0){return;} // If there are functions bound, to execute
745	readyList.resolveWith(document,[jQuery]); // Trigger any bound ready events
746	if(jQuery.fn.triggerHandler){jQuery(document).triggerHandler("ready");jQuery(document).off("ready");}}}); /**
747	 * The ready event handler and self cleanup method
748	 */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
749	// after the browser event has already occurred.
750	// Support: IE9-10 only
751	// Older IE sometimes signals "interactive" too soon
752	if(document.readyState === "complete" || document.readyState !== "loading" && !document.documentElement.doScroll){ // Handle it asynchronously to allow scripts the opportunity to delay ready
753	window.setTimeout(jQuery.ready);}else { // Use the handy event callback
754	document.addEventListener("DOMContentLoaded",completed); // A fallback to window.onload, that will always work
755	window.addEventListener("load",completed);}}return readyList.promise(obj);}; // Kick off the DOM ready check even if the user does not
756	jQuery.ready.promise(); // Multifunctional method to get and set values of a collection
757	// The value/s can optionally be executed if it's a function
758	var access=function access(elems,fn,key,value,chainable,emptyGet,raw){var i=0,len=elems.length,bulk=key == null; // Sets many values
759	if(jQuery.type(key) === "object"){chainable = true;for(i in key) {access(elems,fn,i,key[i],true,emptyGet,raw);} // Sets one value
760	}else if(value !== undefined){chainable = true;if(!jQuery.isFunction(value)){raw = true;}if(bulk){ // Bulk operations run against the entire set
761	if(raw){fn.call(elems,value);fn = null; // ...except when executing function values
762	}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
763	bulk?fn.call(elems):len?fn(elems[0],key):emptyGet;};var acceptData=function acceptData(owner){ // Accepts only:
764	//  - Node
765	//    - Node.ELEMENT_NODE
766	//    - Node.DOCUMENT_NODE
767	//  - Object
768	//    - Any
769	/* jshint -W018 */return owner.nodeType === 1 || owner.nodeType === 9 || ! +owner.nodeType;};function Data(){this.expando = jQuery.expando + Data.uid++;}Data.uid = 1;Data.prototype = {register:function register(owner,initial){var value=initial || {}; // If it is a node unlikely to be stringify-ed or looped over
770	// use plain assignment
771	if(owner.nodeType){owner[this.expando] = value; // Otherwise secure it in a non-enumerable, non-writable property
772	// configurability must be true to allow the property to be
773	// deleted with the delete operator
774	}else {Object.defineProperty(owner,this.expando,{value:value,writable:true,configurable:true});}return owner[this.expando];},cache:function cache(owner){ // We can accept data for non-element nodes in modern browsers,
775	// but we should not, see #8335.
776	// Always return an empty object.
777	if(!acceptData(owner)){return {};} // Check if the owner object already has a cache
778	var value=owner[this.expando]; // If not, create one
779	if(!value){value = {}; // We can accept data for non-element nodes in modern browsers,
780	// but we should not, see #8335.
781	// Always return an empty object.
782	if(acceptData(owner)){ // If it is a node unlikely to be stringify-ed or looped over
783	// use plain assignment
784	if(owner.nodeType){owner[this.expando] = value; // Otherwise secure it in a non-enumerable property
785	// configurable must be true to allow the property to be
786	// deleted when data is removed
787	}else {Object.defineProperty(owner,this.expando,{value:value,configurable:true});}}}return value;},set:function set(owner,data,value){var prop,cache=this.cache(owner); // Handle: [ owner, key, value ] args
788	if(typeof data === "string"){cache[data] = value; // Handle: [ owner, { properties } ] args
789	}else { // Copy the properties one-by-one to the cache object
790	for(prop in data) {cache[prop] = data[prop];}}return cache;},get:function get(owner,key){return key === undefined?this.cache(owner):owner[this.expando] && owner[this.expando][key];},access:function access(owner,key,value){var stored; // In cases where either:
791	//
792	//   1. No key was specified
793	//   2. A string key was specified, but no value provided
794	//
795	// Take the "read" path and allow the get method to determine
796	// which value to return, respectively either:
797	//
798	//   1. The entire cache object
799	//   2. The data stored at the key
800	//
801	if(key === undefined || key && typeof key === "string" && value === undefined){stored = this.get(owner,key);return stored !== undefined?stored:this.get(owner,jQuery.camelCase(key));} // When the key is not a string, or both a key and value
802	// are specified, set or extend (existing objects) with either:
803	//
804	//   1. An object of properties
805	//   2. A key and value
806	//
vendor: 10,536 bytes, lines 807-887
807	this.set(owner,key,value); // Since the "set" path can have two possible entry points
808	// return the expected data based on which path was taken[*]
809	return value !== undefined?value:key;},remove:function remove(owner,key){var i,name,camel,cache=owner[this.expando];if(cache === undefined){return;}if(key === undefined){this.register(owner);}else { // Support array or space separated string of keys
810	if(jQuery.isArray(key)){ // If "name" is an array of keys...
811	// When data is initially created, via ("key", "val") signature,
812	// keys will be converted to camelCase.
813	// Since there is no way to tell _how_ a key was added, remove
814	// both plain key and camelCase key. #12786
815	// This will only penalize the array argument path.
816	name = key.concat(key.map(jQuery.camelCase));}else {camel = jQuery.camelCase(key); // Try the string as a key before any manipulation
817	if(key in cache){name = [key,camel];}else { // If a key with the spaces exists, use it.
818	// Otherwise, create an array by matching non-whitespace
819	name = camel;name = name in cache?[name]:name.match(rnotwhite) || [];}}i = name.length;while(i--) {delete cache[name[i]];}} // Remove the expando if there's no more data
820	if(key === undefined || jQuery.isEmptyObject(cache)){ // Support: Chrome <= 35-45+
821	// Webkit & Blink performance suffers when deleting properties
822	// from DOM nodes, so set to undefined instead
823	// https://code.google.com/p/chromium/issues/detail?id=378607
824	if(owner.nodeType){owner[this.expando] = undefined;}else {delete owner[this.expando];}}},hasData:function hasData(owner){var cache=owner[this.expando];return cache !== undefined && !jQuery.isEmptyObject(cache);}};var dataPriv=new Data();var dataUser=new Data(); //	Implementation Summary
825	//
826	//	1. Enforce API surface and semantic compatibility with 1.9.x branch
827	//	2. Improve the module's maintainability by reducing the storage
828	//		paths to a single mechanism.
829	//	3. Use the same single mechanism to support "private" and "user" data.
830	//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
831	//	5. Avoid exposing implementation details on user objects (eg. expando properties)
832	//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
833	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
834	// data from the HTML5 data-* attribute
835	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
836	+data + "" === data?+data:rbrace.test(data)?jQuery.parseJSON(data):data;}catch(e) {} // Make sure we set the data so it isn't changed later
837	dataUser.set(elem,key,data);}else {data = undefined;}}return data;}jQuery.extend({hasData:function hasData(elem){return dataUser.hasData(elem) || dataPriv.hasData(elem);},data:function data(elem,name,_data){return dataUser.access(elem,name,_data);},removeData:function removeData(elem,name){dataUser.remove(elem,name);}, // TODO: Now that all calls to _data and _removeData have been replaced
838	// with direct calls to dataPriv methods, these can be deprecated.
839	_data:function _data(elem,name,data){return dataPriv.access(elem,name,data);},_removeData:function _removeData(elem,name){dataPriv.remove(elem,name);}});jQuery.fn.extend({data:function data(key,value){var i,name,data,elem=this[0],attrs=elem && elem.attributes; // Gets all values
840	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+
841	// The attrs elements can be null (#14894)
842	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
843	if(typeof key === "object"){return this.each(function(){dataUser.set(this,key);});}return access(this,function(value){var data,camelKey; // The calling jQuery object (element matches) is not empty
844	// (and therefore has an element appears at this[ 0 ]) and the
845	// `value` parameter was not undefined. An empty jQuery object
846	// will result in `undefined` for elem = this[ 0 ] which will
847	// throw an exception if an attempt to read a data cache is made.
848	if(elem && value === undefined){ // Attempt to get data from the cache
849	// with the key as-is
850	data = dataUser.get(elem,key) ||  // Try to find dashed key if it exists (gh-2779)
851	// This is for 2.2.x only
852	dataUser.get(elem,key.replace(rmultiDash,"-$&").toLowerCase());if(data !== undefined){return data;}camelKey = jQuery.camelCase(key); // Attempt to get data from the cache
853	// with the key camelized
854	data = dataUser.get(elem,camelKey);if(data !== undefined){return data;} // Attempt to "discover" the data in
855	// HTML5 custom data-* attrs
856	data = dataAttr(elem,camelKey,undefined);if(data !== undefined){return data;} // We tried really hard, but the data doesn't exist.
857	return;} // Set the data...
858	camelKey = jQuery.camelCase(key);this.each(function(){ // First, attempt to store a copy or reference of any
859	// data that might've been store with a camelCased key.
860	var data=dataUser.get(this,camelKey); // For HTML5 data-* attribute interop, we have to
861	// store property names with dashes in a camelCase form.
862	// This might not apply to all properties...*
863	dataUser.set(this,camelKey,value); // *... In the case of properties that might _actually_
864	// have dashes, we need to also store a copy of that
865	// unchanged property.
866	if(key.indexOf("-") > -1 && data !== undefined){dataUser.set(this,key,value);}});},null,value,arguments.length > 1,null,true);},removeData:function removeData(key){return this.each(function(){dataUser.remove(this,key);});}});jQuery.extend({queue:function queue(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
867	if(data){if(!queue || jQuery.isArray(data)){queue = dataPriv.access(elem,type,jQuery.makeArray(data));}else {queue.push(data);}}return queue || [];}},dequeue:function dequeue(elem,type){type = type || "fx";var queue=jQuery.queue(elem,type),startLength=queue.length,fn=queue.shift(),hooks=jQuery._queueHooks(elem,type),next=function next(){jQuery.dequeue(elem,type);}; // If the fx queue is dequeued, always remove the progress sentinel
868	if(fn === "inprogress"){fn = queue.shift();startLength--;}if(fn){ // Add a progress sentinel to prevent the fx queue from being
869	// automatically dequeued
870	if(type === "fx"){queue.unshift("inprogress");} // Clear up the last queue stop function
871	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
872	_queueHooks:function _queueHooks(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 queue(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
873	jQuery._queueHooks(this,type);if(type === "fx" && queue[0] !== "inprogress"){jQuery.dequeue(this,type);}});},dequeue:function dequeue(type){return this.each(function(){jQuery.dequeue(this,type);});},clearQueue:function clearQueue(type){return this.queue(type || "fx",[]);}, // Get a promise resolved when queues of a certain type
874	// are emptied (fx is the type by default)
875	promise:function promise(type,obj){var tmp,count=1,defer=jQuery.Deferred(),elements=this,i=this.length,resolve=function resolve(){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 isHidden(elem,el){ // isHidden might be called from jQuery#filter function;
876	// in that case, element will be second argument
877	elem = el || elem;return jQuery.css(elem,"display") === "none" || !jQuery.contains(elem.ownerDocument,elem);};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
878	initialInUnit=(jQuery.cssNumber[prop] || unit !== "px" && +initial) && rcssNum.exec(jQuery.css(elem,prop));if(initialInUnit && initialInUnit[3] !== unit){ // Trust units reported by jQuery.css
879	unit = unit || initialInUnit[3]; // Make sure we update the tween properties later on
880	valueParts = valueParts || []; // Iteratively approximate from a nonzero starting point
881	initialInUnit = +initial || 1;do { // If previous iteration zeroed out, double until we get *something*.
882	// Use string for doubling so we don't accidentally see scale as unchanged below
883	scale = scale || ".5"; // Adjust and apply
884	initialInUnit = initialInUnit / scale;jQuery.style(elem,prop,initialInUnit + unit); // Update scale, tolerating zero or NaN from tween.cur()
885	// Break the loop if scale is unchanged or perfect, or if we've just had enough.
886	}while(scale !== (scale = currentValue() / initial) && scale !== 1 && --maxIterations);}if(valueParts){initialInUnit = +initialInUnit || +initial || 0; // Apply relative offset (+=/-=) if specified
887	adjusted = valueParts[1]?initialInUnit + (valueParts[1] + 1) * valueParts[2]:+valueParts[2];if(tween){tween.unit = unit;tween.start = initialInUnit;tween.end = adjusted;}}return adjusted;}var rcheckableType=/^(?:checkbox|radio)$/i;var rtagName=/<([\w:-]+)/;var rscriptType=/^$|\/(?:java|ecma)script/i; // We have to close these tags to support XHTML (#13200)
vendor: 3,276 bytes, lines 888-912
888	var wrapMap={ // Support: IE9
889	option:[1,"<select multiple='multiple'>","</select>"], // XHTML parsers do not magically insert elements in the
890	// same way that tag soup parsers do. So we cannot shorten
891	// this by omitting <tbody> or other required elements.
892	thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]}; // Support: IE9
893	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+
894	// Use typeof to avoid zero-argument method invocation on host objects (#15151)
895	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
896	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
897	if(jQuery.type(elem) === "object"){ // Support: Android<4.1, PhantomJS<2
898	// push.apply(_, arraylike) throws on ancient WebKit
899	jQuery.merge(nodes,elem.nodeType?[elem]:elem); // Convert non-html into a text node
900	}else if(!rhtml.test(elem)){nodes.push(context.createTextNode(elem)); // Convert html into DOM nodes
901	}else {tmp = tmp || fragment.appendChild(context.createElement("div")); // Deserialize a standard representation
902	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
903	j = wrap[0];while(j--) {tmp = tmp.lastChild;} // Support: Android<4.1, PhantomJS<2
904	// push.apply(_, arraylike) throws on ancient WebKit
905	jQuery.merge(nodes,tmp.childNodes); // Remember the top-level container
906	tmp = fragment.firstChild; // Ensure the created nodes are orphaned (#12392)
907	tmp.textContent = "";}}} // Remove wrapper from fragment
908	fragment.textContent = "";i = 0;while(elem = nodes[i++]) { // Skip elements already in the context collection (trac-4087)
909	if(selection && jQuery.inArray(elem,selection) > -1){if(ignored){ignored.push(elem);}continue;}contains = jQuery.contains(elem.ownerDocument,elem); // Append to fragment
910	tmp = getAll(fragment.appendChild(elem),"script"); // Preserve script evaluation history
911	if(contains){setGlobalEval(tmp);} // Capture executables
912	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, Safari<=5.1
vendor: 65,380 bytes, lines 913-1275
913	// Check state lost if the name is set (#11217)
914	// Support: Windows Web Apps (WWA)
915	// `name` and `type` must use .setAttribute for WWA (#14901)
916	input.setAttribute("type","radio");input.setAttribute("checked","checked");input.setAttribute("name","t");div.appendChild(input); // Support: Safari<=5.1, Android<4.2
917	// Older WebKit doesn't clone checked state correctly in fragments
918	support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked; // Support: IE<=11+
919	// Make sure textarea (and checkbox) defaultValue is properly cloned
920	div.innerHTML = "<textarea>x</textarea>";support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;})();var rkeyEvent=/^key/,rmouseEvent=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,rtypenamespace=/^([^.]*)(?:\.(.+)|)/;function returnTrue(){return true;}function returnFalse(){return false;} // Support: IE9
921	// See #13393 for more info
922	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
923	if(typeof types === "object"){ // ( types-Object, selector, data )
924	if(typeof selector !== "string"){ // ( types-Object, data )
925	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 )
926	fn = selector;data = selector = undefined;}else if(fn == null){if(typeof selector === "string"){ // ( types, selector, fn )
927	fn = data;data = undefined;}else { // ( types, data, fn )
928	fn = data;data = selector;selector = undefined;}}if(fn === false){fn = returnFalse;}else if(!fn){return elem;}if(one === 1){origFn = fn;fn = function(event){ // Can use an empty set, since event contains the info
929	jQuery().off(event);return origFn.apply(this,arguments);}; // Use same guid so caller can remove using origFn
930	fn.guid = origFn.guid || (origFn.guid = jQuery.guid++);}return elem.each(function(){jQuery.event.add(this,types,fn,data,selector);});} /*
931	 * Helper functions for managing events -- not part of the public interface.
932	 * Props to Dean Edwards' addEvent library for many of the ideas.
933	 */jQuery.event = {global:{},add:function add(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)
934	if(!elemData){return;} // Caller can pass in an object of custom data in lieu of the handler
935	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
936	if(!handler.guid){handler.guid = jQuery.guid++;} // Init the element's event structure and main handler, if this is the first
937	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
938	// when an event is called after a page has unloaded
939	return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type?jQuery.event.dispatch.apply(elem,arguments):undefined;};} // Handle multiple events separated by a space
940	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
941	if(!type){continue;} // If event changes its type, use the special event handlers for the changed type
942	special = jQuery.event.special[type] || {}; // If selector defined, determine special event api type, otherwise given type
943	type = (selector?special.delegateType:special.bindType) || type; // Update special based on newly reset type
944	special = jQuery.event.special[type] || {}; // handleObj is passed to all event handlers
945	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
946	if(!(handlers = events[type])){handlers = events[type] = [];handlers.delegateCount = 0; // Only use addEventListener if the special events handler returns false
947	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
948	if(selector){handlers.splice(handlers.delegateCount++,0,handleObj);}else {handlers.push(handleObj);} // Keep track of which events have ever been used, for event optimization
949	jQuery.event.global[type] = true;}}, // Detach an event or set of events from an element
950	remove:function remove(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
951	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
952	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
953	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
954	// (avoids potential for endless recursion during removal of special event handlers)
955	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
956	if(jQuery.isEmptyObject(events)){dataPriv.remove(elem,"handle events");}},dispatch:function dispatch(event){ // Make a writable jQuery.Event from the native event object
957	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
958	args[0] = event;event.delegateTarget = this; // Call the preDispatch hook for the mapped type, and let it bail if desired
959	if(special.preDispatch && special.preDispatch.call(this,event) === false){return;} // Determine handlers
960	handlerQueue = jQuery.event.handlers.call(this,event,handlers); // Run delegates first; they may want to stop propagation beneath us
961	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)
962	// a subset or equal to those in the bound event (both can have no namespace).
963	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
964	if(special.postDispatch){special.postDispatch.call(this,event);}return event.result;},handlers:function handlers(event,_handlers){var i,matches,sel,handleObj,handlerQueue=[],delegateCount=_handlers.delegateCount,cur=event.target; // Support (at least): Chrome, IE9
965	// Find delegate handlers
966	// Black-hole SVG <use> instance trees (#13180)
967	//
968	// Support: Firefox<=42+
969	// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)
970	if(delegateCount && cur.nodeType && (event.type !== "click" || isNaN(event.button) || event.button < 1)){for(;cur !== this;cur = cur.parentNode || this) { // Don't check non-elements (#13208)
971	// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
972	if(cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click")){matches = [];for(i = 0;i < delegateCount;i++) {handleObj = _handlers[i]; // Don't conflict with Object.prototype properties (#13203)
973	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
974	if(delegateCount < _handlers.length){handlerQueue.push({elem:this,handlers:_handlers.slice(delegateCount)});}return handlerQueue;}, // Includes some event props shared by KeyEvent and MouseEvent
975	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 filter(event,original){ // Add which for key events
976	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 filter(event,original){var eventDoc,doc,body,button=original.button; // Calculate pageX/Y if missing and clientX/Y available
977	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
978	// Note: button is not normalized, so don't use it
979	if(!event.which && button !== undefined){event.which = button & 1?1:button & 2?3:button & 4?2:0;}return event;}},fix:function fix(event){if(event[jQuery.expando]){return event;} // Create a writable copy of the event object and normalize some properties
980	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: Cordova 2.5 (WebKit) (#13255)
981	// All events should have a target; Cordova deviceready doesn't
982	if(!event.target){event.target = document;} // Support: Safari 6.0+, Chrome<28
983	// Target should not be a text node (#504, #13143)
984	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
985	noBubble:true},focus:{ // Fire native event if possible so blur/focus sequence is correct
986	trigger:function trigger(){if(this !== safeActiveElement() && this.focus){this.focus();return false;}},delegateType:"focusin"},blur:{trigger:function trigger(){if(this === safeActiveElement() && this.blur){this.blur();return false;}},delegateType:"focusout"},click:{ // For checkbox, fire native event so checked state will be right
987	trigger:function trigger(){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
988	_default:function _default(event){return jQuery.nodeName(event.target,"a");}},beforeunload:{postDispatch:function postDispatch(event){ // Support: Firefox 20+
989	// Firefox doesn't alert if the returnValue field is not set.
990	if(event.result !== undefined && event.originalEvent){event.originalEvent.returnValue = event.result;}}}}};jQuery.removeEvent = function(elem,type,handle){ // This "if" is needed for plain objects
991	if(elem.removeEventListener){elem.removeEventListener(type,handle);}};jQuery.Event = function(src,props){ // Allow instantiation without the 'new' keyword
992	if(!(this instanceof jQuery.Event)){return new jQuery.Event(src,props);} // Event object
993	if(src && src.type){this.originalEvent = src;this.type = src.type; // Events bubbling up the document may have been marked as prevented
994	// by a handler lower down the tree; reflect the correct value.
995	this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined &&  // Support: Android<4.0
996	src.returnValue === false?returnTrue:returnFalse; // Event type
997	}else {this.type = src;} // Put explicitly provided properties onto the event object
998	if(props){jQuery.extend(this,props);} // Create a timestamp if incoming event doesn't have one
999	this.timeStamp = src && src.timeStamp || jQuery.now(); // Mark it as fixed
1000	this[jQuery.expando] = true;}; // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
1001	// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
1002	jQuery.Event.prototype = {constructor:jQuery.Event,isDefaultPrevented:returnFalse,isPropagationStopped:returnFalse,isImmediatePropagationStopped:returnFalse,isSimulated:false,preventDefault:function preventDefault(){var e=this.originalEvent;this.isDefaultPrevented = returnTrue;if(e && !this.isSimulated){e.preventDefault();}},stopPropagation:function stopPropagation(){var e=this.originalEvent;this.isPropagationStopped = returnTrue;if(e && !this.isSimulated){e.stopPropagation();}},stopImmediatePropagation:function stopImmediatePropagation(){var e=this.originalEvent;this.isImmediatePropagationStopped = returnTrue;if(e && !this.isSimulated){e.stopImmediatePropagation();}this.stopPropagation();}}; // Create mouseenter/leave events using mouseover/out and event-time checks
1003	// so that event delegation works in jQuery.
1004	// Do the same for pointerenter/pointerleave and pointerover/pointerout
1005	//
1006	// Support: Safari 7 only
1007	// Safari sends mouseenter too often; see:
1008	// https://code.google.com/p/chromium/issues/detail?id=470258
1009	// for the description of the bug (it existed in older Chrome versions as well).
1010	jQuery.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(orig,fix){jQuery.event.special[orig] = {delegateType:fix,bindType:fix,handle:function handle(event){var ret,target=this,related=event.relatedTarget,handleObj=event.handleObj; // For mouseenter/leave call the handler if related is outside the target.
1011	// NB: No relatedTarget if the mouse left/entered the browser window
1012	if(!related || related !== target && !jQuery.contains(target,related)){event.type = handleObj.origType;ret = handleObj.handler.apply(this,arguments);event.type = fix;}return ret;}};});jQuery.fn.extend({on:function on(types,selector,data,fn){return _on(this,types,selector,data,fn);},one:function one(types,selector,data,fn){return _on(this,types,selector,data,fn,1);},off:function off(types,selector,fn){var handleObj,type;if(types && types.preventDefault && types.handleObj){ // ( event )  dispatched jQuery.Event
1013	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] )
1014	for(type in types) {this.off(type,selector,types[type]);}return this;}if(selector === false || typeof selector === "function"){ // ( types [, fn] )
1015	fn = selector;selector = undefined;}if(fn === false){fn = returnFalse;}return this.each(function(){jQuery.event.remove(this,types,fn,selector);});}});var rxhtmlTag=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, // Support: IE 10-11, Edge 10240+
1016	// In IE/Edge using regex groups here causes severe slowdowns.
1017	// See https://connect.microsoft.com/IE/feedback/details/1736512/
1018	rnoInnerhtml=/<script|<style|<link/i, // checked="checked" or checked
1019	rchecked=/checked\s*(?:[^=]|=\s*.checked.)/i,rscriptTypeMasked=/^true\/(.*)/,rcleanScript=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g; // Manipulating tables requires a tbody
1020	function manipulationTarget(elem,content){return jQuery.nodeName(elem,"table") && jQuery.nodeName(content.nodeType !== 11?content:content.firstChild,"tr")?elem.getElementsByTagName("tbody")[0] || elem.appendChild(elem.ownerDocument.createElement("tbody")):elem;} // Replace/restore the type attribute of script elements for safe DOM manipulation
1021	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.
1022	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
1023	if(dataUser.hasData(src)){udataOld = dataUser.access(src);udataCur = jQuery.extend({},udataOld);dataUser.set(dest,udataCur);}} // Fix IE bugs, see support tests
1024	function fixInput(src,dest){var nodeName=dest.nodeName.toLowerCase(); // Fails to persist the checked state of a cloned checkbox or radio button.
1025	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
1026	}else if(nodeName === "input" || nodeName === "textarea"){dest.defaultValue = src.defaultValue;}}function domManip(collection,args,callback,ignored){ // Flatten any nested arrays
1027	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
1028	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
1029	if(first || ignored){scripts = jQuery.map(getAll(fragment,"script"),disableScript);hasScripts = scripts.length; // Use the original fragment for the last item
1030	// instead of the first because it can end up
1031	// being emptied incorrectly in certain situations (#8070).
1032	for(;i < l;i++) {node = fragment;if(i !== iNoClone){node = jQuery.clone(node,true,true); // Keep references to cloned scripts for later restoration
1033	if(hasScripts){ // Support: Android<4.1, PhantomJS<2
1034	// push.apply(_, arraylike) throws on ancient WebKit
1035	jQuery.merge(scripts,getAll(node,"script"));}}callback.call(collection[i],node,i);}if(hasScripts){doc = scripts[scripts.length - 1].ownerDocument; // Reenable scripts
1036	jQuery.map(scripts,restoreScript); // Evaluate executable scripts on first document insertion
1037	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
1038	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 htmlPrefilter(html){return html.replace(rxhtmlTag,"<$1></$2>");},clone:function clone(elem,dataAndEvents,deepDataAndEvents){var i,l,srcElements,destElements,clone=elem.cloneNode(true),inPage=jQuery.contains(elem.ownerDocument,elem); // Fix IE cloning issues
1039	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
1040	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
1041	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
1042	destElements = getAll(clone,"script");if(destElements.length > 0){setGlobalEval(destElements,!inPage && getAll(elem,"script"));} // Return the cloned set
1043	return clone;},cleanData:function cleanData(elems){var data,elem,type,special=jQuery.event.special,i=0;for(;(elem = elems[i]) !== undefined;i++) {if(acceptData(elem)){if(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
1044	}else {jQuery.removeEvent(elem,type,data.handle);}}} // Support: Chrome <= 35-45+
1045	// Assign undefined instead of using delete, see Data#remove
1046	elem[dataPriv.expando] = undefined;}if(elem[dataUser.expando]){ // Support: Chrome <= 35-45+
1047	// Assign undefined instead of using delete, see Data#remove
1048	elem[dataUser.expando] = undefined;}}}}});jQuery.fn.extend({ // Keep domManip exposed until 3.0 (gh-2225)
1049	domManip:domManip,detach:function detach(selector){return _remove(this,selector,true);},remove:function remove(selector){return _remove(this,selector);},text:function text(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 append(){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 prepend(){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 before(){return domManip(this,arguments,function(elem){if(this.parentNode){this.parentNode.insertBefore(elem,this);}});},after:function after(){return domManip(this,arguments,function(elem){if(this.parentNode){this.parentNode.insertBefore(elem,this.nextSibling);}});},empty:function empty(){var elem,i=0;for(;(elem = this[i]) != null;i++) {if(elem.nodeType === 1){ // Prevent memory leaks
1050	jQuery.cleanData(getAll(elem,false)); // Remove any remaining nodes
1051	elem.textContent = "";}}return this;},clone:function clone(dataAndEvents,deepDataAndEvents){dataAndEvents = dataAndEvents == null?false:dataAndEvents;deepDataAndEvents = deepDataAndEvents == null?dataAndEvents:deepDataAndEvents;return this.map(function(){return jQuery.clone(this,dataAndEvents,deepDataAndEvents);});},html:function html(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
1052	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
1053	if(elem.nodeType === 1){jQuery.cleanData(getAll(elem,false));elem.innerHTML = value;}}elem = 0; // If using innerHTML throws an exception, use the fallback method
1054	}catch(e) {}}if(elem){this.empty().append(value);}},null,value,arguments.length);},replaceWith:function replaceWith(){var ignored=[]; // Make the changes, replacing each non-ignored context element with the new content
1055	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
1056	},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: QtWebKit
1057	// .get() because push.apply(_, arraylike) throws
1058	push.apply(ret,elems.get());}return this.pushStack(ret);};});var iframe,elemdisplay={ // Support: Firefox
1059	// We have to pre-define these values for FF (#10227)
1060	HTML:"block",BODY:"block"}; /**
1061	 * Retrieve the actual display of a element
1062	 * @param {String} name nodeName of the element
1063	 * @param {Object} doc Document object
1064	 */ // Called only from within defaultDisplay
1065	function actualDisplay(name,doc){var elem=jQuery(doc.createElement(name)).appendTo(doc.body),display=jQuery.css(elem[0],"display"); // We don't have any data stored on the element,
1066	// so use "detach" method as fast way to get rid of the element
1067	elem.detach();return display;} /**
1068	 * Try to determine the default display value of an element
1069	 * @param {String} nodeName
1070	 */function defaultDisplay(nodeName){var doc=document,display=elemdisplay[nodeName];if(!display){display = actualDisplay(nodeName,doc); // If the simple way fails, read from inside an iframe
1071	if(display === "none" || !display){ // Use the already-created iframe if possible
1072	iframe = (iframe || jQuery("<iframe frameborder='0' width='0' height='0'/>")).appendTo(doc.documentElement); // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
1073	doc = iframe[0].contentDocument; // Support: IE
1074	doc.write();doc.close();display = actualDisplay(nodeName,doc);iframe.detach();} // Store the correct default display
1075	elemdisplay[nodeName] = display;}return display;}var rmargin=/^margin/;var rnumnonpx=new RegExp("^(" + pnum + ")(?!px)[a-z%]+$","i");var getStyles=function getStyles(elem){ // Support: IE<=11+, Firefox<=30+ (#15098, #14150)
1076	// IE throws on elements created in popups
1077	// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
1078	var view=elem.ownerDocument.defaultView;if(!view || !view.opener){view = window;}return view.getComputedStyle(elem);};var swap=function swap(elem,options,callback,args){var ret,name,old={}; // Remember the old values, and insert the new ones
1079	for(name in options) {old[name] = elem.style[name];elem.style[name] = options[name];}ret = callback.apply(elem,args || []); // Revert the old values
1080	for(name in options) {elem.style[name] = old[name];}return ret;};var documentElement=document.documentElement;(function(){var pixelPositionVal,boxSizingReliableVal,pixelMarginRightVal,reliableMarginLeftVal,container=document.createElement("div"),div=document.createElement("div"); // Finish early in limited (non-browser) environments
1081	if(!div.style){return;} // Support: IE9-11+
1082	// Style of cloned element affects source element cloned (#8908)
1083	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
1084	// so they're executed at the same time to save the second computation.
1085	function computeStyleTests(){div.style.cssText =  // Support: Firefox<29, Android 2.3
1086	// Vendor-prefix box-sizing
1087	"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;" + "position:relative;display:block;" + "margin:auto;border:1px;padding:1px;" + "top:1%;width:50%";div.innerHTML = "";documentElement.appendChild(container);var divStyle=window.getComputedStyle(div);pixelPositionVal = divStyle.top !== "1%";reliableMarginLeftVal = divStyle.marginLeft === "2px";boxSizingReliableVal = divStyle.width === "4px"; // Support: Android 4.0 - 4.3 only
1088	// Some styles come back with percentage values, even though they shouldn't
1089	div.style.marginRight = "50%";pixelMarginRightVal = divStyle.marginRight === "4px";documentElement.removeChild(container);}jQuery.extend(support,{pixelPosition:function pixelPosition(){ // This test is executed only once but we still do memoizing
1090	// since we can use the boxSizingReliable pre-computing.
1091	// No need to check if the test was already performed, though.
1092	computeStyleTests();return pixelPositionVal;},boxSizingReliable:function boxSizingReliable(){if(boxSizingReliableVal == null){computeStyleTests();}return boxSizingReliableVal;},pixelMarginRight:function pixelMarginRight(){ // Support: Android 4.0-4.3
1093	// We're checking for boxSizingReliableVal here instead of pixelMarginRightVal
1094	// since that compresses better and they're computed together anyway.
1095	if(boxSizingReliableVal == null){computeStyleTests();}return pixelMarginRightVal;},reliableMarginLeft:function reliableMarginLeft(){ // Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37
1096	if(boxSizingReliableVal == null){computeStyleTests();}return reliableMarginLeftVal;},reliableMarginRight:function reliableMarginRight(){ // Support: Android 2.3
1097	// Check if div with explicit width and no margin-right incorrectly
1098	// gets computed margin-right based on width of container. (#3333)
1099	// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
1100	// This support function is only executed once so no memoizing is needed.
1101	var ret,marginDiv=div.appendChild(document.createElement("div")); // Reset CSS: box-sizing; display; margin; border; padding
1102	marginDiv.style.cssText = div.style.cssText =  // Support: Android 2.3
1103	// Vendor-prefix box-sizing
1104	"-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);ret = computed?computed.getPropertyValue(name) || computed[name]:undefined; // Support: Opera 12.1x only
1105	// Fall back to style even without computed
1106	// computed is undefined for elems on document fragments
1107	if((ret === "" || ret === undefined) && !jQuery.contains(elem.ownerDocument,elem)){ret = jQuery.style(elem,name);} // Support: IE9
1108	// getPropertyValue is only needed for .css('filter') (#12537)
1109	if(computed){ // A tribute to the "awesome hack by Dean Edwards"
1110	// Android Browser returns percentage for some values,
1111	// but width seems to be reliably pixels.
1112	// This is against the CSSOM draft spec:
1113	// http://dev.w3.org/csswg/cssom/#resolved-values
1114	if(!support.pixelMarginRight() && rnumnonpx.test(ret) && rmargin.test(name)){ // Remember the original values
1115	width = style.width;minWidth = style.minWidth;maxWidth = style.maxWidth; // Put in the new values to get a computed value out
1116	style.minWidth = style.maxWidth = style.width = ret;ret = computed.width; // Revert the changed values
1117	style.width = width;style.minWidth = minWidth;style.maxWidth = maxWidth;}}return ret !== undefined? // Support: IE9-11+
1118	// IE returns zIndex value as an integer.
1119	ret + "":ret;}function addGetHookIf(conditionFn,hookFn){ // Define the hook, we'll check on the first run if it's really needed.
1120	return {get:function get(){if(conditionFn()){ // Hook not needed (or it's not possible to use it due
1121	// to missing dependency), remove it.
1122	delete this.get;return;} // Hook needed; redefine it so that the support test is not executed again.
1123	return (this.get = hookFn).apply(this,arguments);}};}var  // Swappable if display is none or starts with table
1124	// except "table", "table-cell", or "table-caption"
1125	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
1126	rdisplayswap=/^(none|table(?!-c[ea]).+)/,cssShow={position:"absolute",visibility:"hidden",display:"block"},cssNormalTransform={letterSpacing:"0",fontWeight:"400"},cssPrefixes=["Webkit","O","Moz","ms"],emptyStyle=document.createElement("div").style; // Return a css property mapped to a potentially vendor prefixed property
1127	function vendorPropName(name){ // Shortcut for names that are not vendor prefixed
1128	if(name in emptyStyle){return name;} // Check for vendor prefixed names
1129	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){ // Any relative (+/-) values have already been
1130	// normalized at this point
1131	var matches=rcssNum.exec(value);return matches? // Guard against undefined "subtract", e.g., when used as in cssHooks
1132	Math.max(0,matches[2] - (subtract || 0)) + (matches[3] || "px"):value;}function augmentWidthOrHeight(elem,name,extra,isBorderBox,styles){var i=extra === (isBorderBox?"border":"content")? // If we already have the right measurement, avoid augmentation
1133	4: // Otherwise initialize for horizontal or vertical properties
1134	name === "width"?1:0,val=0;for(;i < 4;i += 2) { // Both box models exclude margin, so add it if we want it
1135	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
1136	if(extra === "content"){val -= jQuery.css(elem,"padding" + cssExpand[i],true,styles);} // At this point, extra isn't border nor margin, so remove border
1137	if(extra !== "margin"){val -= jQuery.css(elem,"border" + cssExpand[i] + "Width",true,styles);}}else { // At this point, extra isn't content, so add padding
1138	val += jQuery.css(elem,"padding" + cssExpand[i],true,styles); // At this point, extra isn't content nor padding, so add border
1139	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
1140	var valueIsBorderBox=true,val=name === "width"?elem.offsetWidth:elem.offsetHeight,styles=getStyles(elem),isBorderBox=jQuery.css(elem,"boxSizing",false,styles) === "border-box"; // Some non-html elements return undefined for offsetWidth, so check for null/undefined
1141	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
1142	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
1143	if(val <= 0 || val == null){ // Fall back to computed then uncomputed css if necessary
1144	val = curCSS(elem,name,styles);if(val < 0 || val == null){val = elem.style[name];} // Computed unit is not pixels. Stop here and return.
1145	if(rnumnonpx.test(val)){return val;} // Check for style in case a browser which returns unreliable values
1146	// for getComputedStyle silently falls back to the reliable elem.style
1147	valueIsBorderBox = isBorderBox && (support.boxSizingReliable() || val === elem.style[name]); // Normalize "", auto, and prepare for extra
1148	val = parseFloat(val) || 0;} // Use the active box-sizing model to add/subtract irrelevant styles
1149	return val + augmentWidthOrHeight(elem,name,extra || (isBorderBox?"border":"content"),valueIsBorderBox,styles) + "px";}function showHide(elements,show){var display,elem,hidden,values=[],index=0,length=elements.length;for(;index < length;index++) {elem = elements[index];if(!elem.style){continue;}values[index] = dataPriv.get(elem,"olddisplay");display = elem.style.display;if(show){ // Reset the inline display of this element to learn if it is
1150	// being hidden by cascaded rules or not
1151	if(!values[index] && display === "none"){elem.style.display = "";} // Set elements which have been overridden with display: none
1152	// in a stylesheet to whatever the default browser style is
1153	// for such an element
1154	if(elem.style.display === "" && isHidden(elem)){values[index] = dataPriv.access(elem,"olddisplay",defaultDisplay(elem.nodeName));}}else {hidden = isHidden(elem);if(display !== "none" || !hidden){dataPriv.set(elem,"olddisplay",hidden?display:jQuery.css(elem,"display"));}}} // Set the display of most of the elements in a second loop
1155	// to avoid the constant reflow
1156	for(index = 0;index < length;index++) {elem = elements[index];if(!elem.style){continue;}if(!show || elem.style.display === "none" || elem.style.display === ""){elem.style.display = show?values[index] || "":"none";}}return elements;}jQuery.extend({ // Add in style property hooks for overriding the default
1157	// behavior of getting and setting a style property
1158	cssHooks:{opacity:{get:function get(elem,computed){if(computed){ // We should always get a number back from opacity
1159	var ret=curCSS(elem,"opacity");return ret === ""?"1":ret;}}}}, // Don't automatically add "px" to these possibly-unitless properties
1160	cssNumber:{"animationIterationCount":true,"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
1161	// setting or getting the value
1162	cssProps:{"float":"cssFloat"}, // Get and set the style property on a DOM Node
1163	style:function style(elem,name,value,extra){ // Don't set styles on text and comment nodes
1164	if(!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style){return;} // Make sure that we're working with the right name
1165	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
1166	hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // Check if we're setting a value
1167	if(value !== undefined){type = typeof value; // Convert "+=" or "-=" to relative numbers (#7345)
1168	if(type === "string" && (ret = rcssNum.exec(value)) && ret[1]){value = adjustCSS(elem,name,ret); // Fixes bug #9237
1169	type = "number";} // Make sure that null and NaN values aren't set (#7116)
1170	if(value == null || value !== value){return;} // If a number was passed in, add the unit (except for certain CSS properties)
1171	if(type === "number"){value += ret && ret[3] || (jQuery.cssNumber[origName]?"":"px");} // Support: IE9-11+
1172	// background-* props affect original clone's values
1173	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
1174	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
1175	if(hooks && "get" in hooks && (ret = hooks.get(elem,false,extra)) !== undefined){return ret;} // Otherwise just get the value from the style object
1176	return style[name];}},css:function css(elem,name,extra,styles){var val,num,hooks,origName=jQuery.camelCase(name); // Make sure that we're working with the right name
1177	name = jQuery.cssProps[origName] || (jQuery.cssProps[origName] = vendorPropName(origName) || origName); // Try prefixed name followed by the unprefixed name
1178	hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // If a hook was provided get the computed value from there
1179	if(hooks && "get" in hooks){val = hooks.get(elem,true,extra);} // Otherwise, if a way to get the computed value exists, use that
1180	if(val === undefined){val = curCSS(elem,name,styles);} // Convert "normal" to computed value
1181	if(val === "normal" && name in cssNormalTransform){val = cssNormalTransform[name];} // Make numeric if forced or a qualifier was provided and val looks numeric
1182	if(extra === "" || extra){num = parseFloat(val);return extra === true || isFinite(num)?num || 0:val;}return val;}});jQuery.each(["height","width"],function(i,name){jQuery.cssHooks[name] = {get:function get(elem,computed,extra){if(computed){ // Certain elements can have dimension info if we invisibly show them
1183	// but it must have a current display style that would benefit
1184	return rdisplayswap.test(jQuery.css(elem,"display")) && elem.offsetWidth === 0?swap(elem,cssShow,function(){return getWidthOrHeight(elem,name,extra);}):getWidthOrHeight(elem,name,extra);}},set:function set(elem,value,extra){var matches,styles=extra && getStyles(elem),subtract=extra && augmentWidthOrHeight(elem,name,extra,jQuery.css(elem,"boxSizing",false,styles) === "border-box",styles); // Convert to pixels if value adjustment is needed
1185	if(subtract && (matches = rcssNum.exec(value)) && (matches[3] || "px") !== "px"){elem.style[name] = value;value = jQuery.css(elem,name);}return setPositiveNumber(elem,value,subtract);}};});jQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft,function(elem,computed){if(computed){return (parseFloat(curCSS(elem,"marginLeft")) || elem.getBoundingClientRect().left - swap(elem,{marginLeft:0},function(){return elem.getBoundingClientRect().left;})) + "px";}}); // Support: Android 2.3
1186	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
1187	jQuery.each({margin:"",padding:"",border:"Width"},function(prefix,suffix){jQuery.cssHooks[prefix + suffix] = {expand:function expand(value){var i=0,expanded={}, // Assumes a single number if not a string
1188	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 css(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 show(){return showHide(this,true);},hide:function hide(){return showHide(this);},toggle:function toggle(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 init(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 cur(){var hooks=Tween.propHooks[this.prop];return hooks && hooks.get?hooks.get(this):Tween.propHooks._default.get(this);},run:function run(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 get(tween){var result; // Use a property on the element directly when it is not a DOM element,
1189	// or when there is no matching style property that exists.
1190	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
1191	// attempt a parseFloat and fallback to a string if the parse fails.
1192	// Simple values such as "10px" are parsed to Float;
1193	// complex values such as "rotate(1rad)" are returned as-is.
1194	result = jQuery.css(tween.elem,tween.prop,""); // Empty strings, null, undefined and "auto" are converted to 0.
1195	return !result || result === "auto"?0:result;},set:function set(tween){ // Use step hook for back compat.
1196	// Use cssHook if its there.
1197	// Use .style if available and use plain properties where available.
1198	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
1199	// Panic based approach to setting things on disconnected nodes
1200	Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {set:function set(tween){if(tween.elem.nodeType && tween.elem.parentNode){tween.elem[tween.prop] = tween.now;}}};jQuery.easing = {linear:function linear(p){return p;},swing:function swing(p){return 0.5 - Math.cos(p * Math.PI) / 2;},_default:"swing"};jQuery.fx = Tween.prototype.init; // Back Compat <1.8 extension point
1201	jQuery.fx.step = {};var fxNow,timerId,rfxtypes=/^(?:toggle|show|hide)$/,rrun=/queueHooks$/; // Animations created synchronously will run synchronously
1202	function createFxNow(){window.setTimeout(function(){fxNow = undefined;});return fxNow = jQuery.now();} // Generate parameters to create a standard animation
1203	function genFx(type,includeWidth){var which,i=0,attrs={height:type}; // If we include width, step value is 1 to do all cssExpand values,
1204	// otherwise step value is 2 to skip over Left and Right
1205	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
1206	return tween;}}}function defaultPrefilter(elem,props,opts){ /* jshint validthis: true */var prop,value,toggle,tween,hooks,oldfire,display,checkDisplay,anim=this,orig={},style=elem.style,hidden=elem.nodeType && isHidden(elem),dataShow=dataPriv.get(elem,"fxshow"); // Handle queue: false promises
1207	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
1208	anim.always(function(){hooks.unqueued--;if(!jQuery.queue(elem,"fx").length){hooks.empty.fire();}});});} // Height/width overflow pass
1209	if(elem.nodeType === 1 && ("height" in props || "width" in props)){ // Make sure that nothing sneaks out
1210	// Record all 3 overflow attributes because IE9-10 do not
1211	// change the overflow attribute when overflowX and
1212	// overflowY are set to the same value
1213	opts.overflow = [style.overflow,style.overflowX,style.overflowY]; // Set display property to inline-block for height/width
1214	// animations on inline elements that are having width/height animated
1215	display = jQuery.css(elem,"display"); // Test default display if display is currently "none"
1216	checkDisplay = display === "none"?dataPriv.get(elem,"olddisplay") || defaultDisplay(elem.nodeName):display;if(checkDisplay === "inline" && jQuery.css(elem,"float") === "none"){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];});} // show/hide pass
1217	for(prop in props) {value = props[prop];if(rfxtypes.exec(value)){delete props[prop];toggle = toggle || value === "toggle";if(value === (hidden?"hide":"show")){ // If there is dataShow left over from a stopped hide or show
1218	// and we are going to proceed with show, we should pretend to be hidden
1219	if(value === "show" && dataShow && dataShow[prop] !== undefined){hidden = true;}else {continue;}}orig[prop] = dataShow && dataShow[prop] || jQuery.style(elem,prop); // Any non-fx value stops us from restoring the original display value
1220	}else {display = undefined;}}if(!jQuery.isEmptyObject(orig)){if(dataShow){if("hidden" in dataShow){hidden = dataShow.hidden;}}else {dataShow = dataPriv.access(elem,"fxshow",{});} // Store state if its toggle - enables .stop().toggle() to "reverse"
1221	if(toggle){dataShow.hidden = !hidden;}if(hidden){jQuery(elem).show();}else {anim.done(function(){jQuery(elem).hide();});}anim.done(function(){var prop;dataPriv.remove(elem,"fxshow");for(prop in orig) {jQuery.style(elem,prop,orig[prop]);}});for(prop in orig) {tween = createTween(hidden?dataShow[prop]:0,prop,anim);if(!(prop in dataShow)){dataShow[prop] = tween.start;if(hidden){tween.end = tween.start;tween.start = prop === "width" || prop === "height"?1:0;}}} // If this is a noop like .hide().hide(), restore an overwritten display value
1222	}else if((display === "none"?defaultDisplay(elem.nodeName):display) === "inline"){style.display = display;}}function propFilter(props,specialEasing){var index,name,easing,value,hooks; // camelCase, specialEasing and expand cssHook pass
1223	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.
1224	// Reusing 'index' because we have the correct "name"
1225	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
1226	delete tick.elem;}),tick=function tick(){if(stopped){return false;}var currentTime=fxNow || createFxNow(),remaining=Math.max(0,animation.startTime + animation.duration - currentTime), // Support: Android 2.3
1227	// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
1228	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 createTween(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 stop(gotoEnd){var index=0, // If we are going to the end, we want to run all the tweens
1229	// otherwise we skip this part
1230	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
1231	if(gotoEnd){deferred.notifyWith(elem,[animation,1,0]);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
1232	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 tweener(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 prefilter(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};opt.duration = jQuery.fx.off?0:typeof opt.duration === "number"?opt.duration:opt.duration in jQuery.fx.speeds?jQuery.fx.speeds[opt.duration]:jQuery.fx.speeds._default; // Normalize opt.queue - true/undefined/null -> "fx"
1233	if(opt.queue == null || opt.queue === true){opt.queue = "fx";} // Queueing
1234	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 fadeTo(speed,to,easing,callback){ // Show any hidden elements after setting opacity to 0
1235	return this.filter(isHidden).css("opacity",0).show() // Animate to the value specified
1236	.end().animate({opacity:to},speed,easing,callback);},animate:function animate(prop,speed,easing,callback){var empty=jQuery.isEmptyObject(prop),optall=jQuery.speed(speed,easing,callback),doAnimation=function doAnimation(){ // Operate on a copy of prop so per-property easing won't be lost
1237	var anim=Animation(this,jQuery.extend({},prop),optall); // Empty animations, or finishing resolves immediately
1238	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 stop(type,clearQueue,gotoEnd){var stopQueue=function stopQueue(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.
1239	// Timers currently will call their complete callbacks, which
1240	// will dequeue but only if they were gotoEnd.
1241	if(dequeue || !gotoEnd){jQuery.dequeue(this,type);}});},finish:function finish(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
1242	data.finish = true; // Empty the queue first
1243	jQuery.queue(this,type,[]);if(hooks && hooks.stop){hooks.stop.call(this,true);} // Look for any active animations, and finish them
1244	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
1245	for(index = 0;index < length;index++) {if(queue[index] && queue[index].finish){queue[index].finish.call(this);}} // Turn off finishing flag
1246	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
1247	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
1248	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.setInterval(jQuery.fx.tick,jQuery.fx.interval);}};jQuery.fx.stop = function(){window.clearInterval(timerId);timerId = null;};jQuery.fx.speeds = {slow:600,fast:200, // Default speed
1249	_default:400}; // Based off of the plugin by Clint Helfers, with permission.
1250	// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
1251	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: iOS<=5.1, Android<=4.2+
1252	// Default value for a checkbox should be "on"
1253	support.checkOn = input.value !== ""; // Support: IE<=11+
1254	// Must access selectedIndex to make default options select
1255	support.optSelected = opt.selected; // Support: Android<=2.3
1256	// Options inside disabled selects are incorrectly marked as disabled
1257	select.disabled = true;support.optDisabled = !opt.disabled; // Support: IE<=11+
1258	// An input loses its value after becoming a radio
1259	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 attr(name,value){return access(this,jQuery.attr,name,value,arguments.length > 1);},removeAttr:function removeAttr(name){return this.each(function(){jQuery.removeAttr(this,name);});}});jQuery.extend({attr:function attr(elem,name,value){var ret,hooks,nType=elem.nodeType; // Don't get/set attributes on text, comment and attribute nodes
1260	if(nType === 3 || nType === 8 || nType === 2){return;} // Fallback to prop when attributes are not supported
1261	if(typeof elem.getAttribute === "undefined"){return jQuery.prop(elem,name,value);} // All attributes are lowercase
1262	// Grab necessary hook if one is defined
1263	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
1264	return ret == null?undefined:ret;},attrHooks:{type:{set:function set(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 removeAttr(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)
1265	if(jQuery.expr.match.bool.test(name)){ // Set corresponding property to false
1266	elem[propName] = false;}elem.removeAttribute(name);}}}}); // Hooks for boolean attributes
1267	boolHook = {set:function set(elem,value,name){if(value === false){ // Remove boolean attributes when set to false
1268	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
1269	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,rclickable=/^(?:a|area)$/i;jQuery.fn.extend({prop:function prop(name,value){return access(this,jQuery.prop,name,value,arguments.length > 1);},removeProp:function removeProp(name){return this.each(function(){delete this[jQuery.propFix[name] || name];});}});jQuery.extend({prop:function prop(elem,name,value){var ret,hooks,nType=elem.nodeType; // Don't get/set properties on text, comment and attribute nodes
1270	if(nType === 3 || nType === 8 || nType === 2){return;}if(nType !== 1 || !jQuery.isXMLDoc(elem)){ // Fix name and attach hooks
1271	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 get(elem){ // elem.tabIndex doesn't always return the
1272	// correct value when it hasn't been explicitly set
1273	// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
1274	// Use proper attribute retrieval(#12072)
1275	var tabindex=jQuery.find.attr(elem,"tabindex");return tabindex?parseInt(tabindex,10):rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href?
vendor: 4,134 bytes, lines 1275-1293
12750:-1;}}},propFix:{"for":"htmlFor","class":"className"}}); // Support: IE <=11 only
1276	// Accessing the selectedIndex property
1277	// forces the browser to respect setting selected
1278	// on the option
1279	// The getter ensures a default option is selected
1280	// when in an optgroup
1281	if(!support.optSelected){jQuery.propHooks.selected = {get:function get(elem){var parent=elem.parentNode;if(parent && parent.parentNode){parent.parentNode.selectedIndex;}return null;},set:function set(elem){var parent=elem.parentNode;if(parent){parent.selectedIndex;if(parent.parentNode){parent.parentNode.selectedIndex;}}}};}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 addClass(value){var classes,elem,cur,curValue,clazz,j,finalValue,i=0;if(jQuery.isFunction(value)){return this.each(function(j){jQuery(this).addClass(value.call(this,j,getClass(this)));});}if(typeof value === "string" && value){classes = value.match(rnotwhite) || [];while(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.
1282	finalValue = jQuery.trim(cur);if(curValue !== finalValue){elem.setAttribute("class",finalValue);}}}}return this;},removeClass:function removeClass(value){var classes,elem,cur,curValue,clazz,j,finalValue,i=0;if(jQuery.isFunction(value)){return this.each(function(j){jQuery(this).removeClass(value.call(this,j,getClass(this)));});}if(!arguments.length){return this.attr("class","");}if(typeof value === "string" && value){classes = value.match(rnotwhite) || [];while(elem = this[i++]) {curValue = getClass(elem); // This expression is here for better compressibility (see addClass)
1283	cur = elem.nodeType === 1 && (" " + curValue + " ").replace(rclass," ");if(cur){j = 0;while(clazz = classes[j++]) { // Remove *all* instances
1284	while(cur.indexOf(" " + clazz + " ") > -1) {cur = cur.replace(" " + clazz + " "," ");}} // Only assign if different to avoid unneeded rendering.
1285	finalValue = jQuery.trim(cur);if(curValue !== finalValue){elem.setAttribute("class",finalValue);}}}}return this;},toggleClass:function toggleClass(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
1286	i = 0;self = jQuery(this);classNames = value.match(rnotwhite) || [];while(className = classNames[i++]) { // Check each className given, space separated list
1287	if(self.hasClass(className)){self.removeClass(className);}else {self.addClass(className);}} // Toggle whole class name
1288	}else if(value === undefined || type === "boolean"){className = getClass(this);if(className){ // Store className if set
1289	dataPriv.set(this,"__className__",className);} // If the element has a class name or if we're passed `false`,
1290	// then remove the whole classname (if there was one, the above saved it).
1291	// Otherwise bring back whatever was previously saved (if anything),
1292	// falling back to the empty string if nothing was stored.
1293	if(this.setAttribute){this.setAttribute("class",className || value === false?"":dataPriv.get(this,"__className__") || "");}}});},hasClass:function hasClass(selector){var className,elem,i=0;className = " " + selector + " ";while(elem = this[i++]) {if(elem.nodeType === 1 && (" " + getClass(elem) + " ").replace(rclass," ").indexOf(className) > -1){return true;}}return false;}});var rreturn=/\r/g,rspaces=/[\x20\t\r\n\f]+/g;jQuery.fn.extend({val:function val(value){var hooks,ret,isFunction,elem=this[0];
vendor: 4,203 bytes, lines 1293-1315
1293if(!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
1294	ret.replace(rreturn,""): // Handle cases where value is null/undef or number
1295	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
1296	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
1297	if(!hooks || !("set" in hooks) || hooks.set(this,val,"value") === undefined){this.value = val;}});}});jQuery.extend({valHooks:{option:{get:function get(elem){var val=jQuery.find.attr(elem,"value");return val != null?val: // Support: IE10-11+
1298	// option.text throws exceptions (#14686, #14858)
1299	// Strip and collapse whitespace
1300	// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
1301	jQuery.trim(jQuery.text(elem)).replace(rspaces," ");}},select:{get:function get(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
1302	for(;i < max;i++) {option = options[i]; // IE8-9 doesn't update selected after form reset (#2551)
1303	if((option.selected || i === index) && ( // Don't return options that are disabled or in a disabled optgroup
1304	support.optDisabled?!option.disabled:option.getAttribute("disabled") === null) && (!option.parentNode.disabled || !jQuery.nodeName(option.parentNode,"optgroup"))){ // Get the specific value for the option
1305	value = jQuery(option).val(); // We don't need an array for one selects
1306	if(one){return value;} // Multi-Selects return an array
1307	values.push(value);}}return values;},set:function set(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
1308	if(!optionSet){elem.selectedIndex = -1;}return values;}}}}); // Radios and checkboxes getter/setter
1309	jQuery.each(["radio","checkbox"],function(){jQuery.valHooks[this] = {set:function set(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
1310	var rfocusMorph=/^(?:focusinfocus|focusoutblur)$/;jQuery.extend(jQuery.event,{trigger:function trigger(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
1311	if(elem.nodeType === 3 || elem.nodeType === 8){return;} // focus/blur morphs to focusin/out; ensure we're not firing them right now
1312	if(rfocusMorph.test(type + jQuery.event.triggered)){return;}if(type.indexOf(".") > -1){ // Namespaced trigger; create a regexp to match event type in handle()
1313	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
1314	event = event[jQuery.expando]?event:new jQuery.Event(type,typeof event === "object" && event); // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
1315	event.isTrigger = onlyHandlers?2:3;event.namespace = namespaces.join(".");
vendor: 3,548 bytes, lines 1315-1333
1315event.rnamespace = event.namespace?new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)"):null; // Clean up the event in case it is being reused
1316	event.result = undefined;if(!event.target){event.target = elem;} // Clone any incoming data and prepend the event, creating the handler arg list
1317	data = data == null?[event]:jQuery.makeArray(data,[event]); // Allow special events to draw outside the lines
1318	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)
1319	// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
1320	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)
1321	if(tmp === (elem.ownerDocument || document)){eventPath.push(tmp.defaultView || tmp.parentWindow || window);}} // Fire handlers on the event path
1322	i = 0;while((cur = eventPath[i++]) && !event.isPropagationStopped()) {event.type = i > 1?bubbleType:special.bindType || type; // jQuery handler
1323	handle = (dataPriv.get(cur,"events") || {})[event.type] && dataPriv.get(cur,"handle");if(handle){handle.apply(cur,data);} // Native handler
1324	handle = ontype && cur[ontype];if(handle && handle.apply && 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
1325	if(!onlyHandlers && !event.isDefaultPrevented()){if((!special._default || special._default.apply(eventPath.pop(),data) === false) && acceptData(elem)){ // Call a native DOM method on the target with the same name name as the event.
1326	// Don't do default actions on window, that's where global variables be (#6170)
1327	if(ontype && jQuery.isFunction(elem[type]) && !jQuery.isWindow(elem)){ // Don't re-trigger an onFOO event when we call its FOO() method
1328	tmp = elem[ontype];if(tmp){elem[ontype] = null;} // Prevent re-triggering of the same event, since we already bubbled it above
1329	jQuery.event.triggered = type;elem[type]();jQuery.event.triggered = undefined;if(tmp){elem[ontype] = tmp;}}}}return event.result;}, // Piggyback on a donor event to simulate a different one
1330	// Used only for `focus(in | out)` events
1331	simulate:function simulate(type,elem,event){var e=jQuery.extend(new jQuery.Event(),event,{type:type,isSimulated:true});jQuery.event.trigger(e,null,elem);}});jQuery.fn.extend({trigger:function trigger(type,data){return this.each(function(){jQuery.event.trigger(type,data,this);});},triggerHandler:function triggerHandler(type,data){var elem=this[0];if(elem){return jQuery.event.trigger(type,data,elem,true);}}});jQuery.each(("blur focus focusin focusout load resize scroll unload click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select submit keydown keypress keyup error contextmenu").split(" "),function(i,name){ // Handle event binding
1332	jQuery.fn[name] = function(data,fn){return arguments.length > 0?this.on(name,null,data,fn):this.trigger(name);};});jQuery.fn.extend({hover:function hover(fnOver,fnOut){return this.mouseenter(fnOver).mouseleave(fnOut || fnOver);}});support.focusin = "onfocusin" in window; // Support: Firefox
1333	// Firefox doesn't have focus(in | out) events
vendor: 21,297 bytes, lines 1334-1520
1334	// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
1335	//
1336	// Support: Chrome, Safari
1337	// focus(in | out) events fire after focus & blur events,
1338	// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
1339	// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857
1340	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
1341	var handler=function handler(event){jQuery.event.simulate(fix,event.target,jQuery.event.fix(event));};jQuery.event.special[fix] = {setup:function setup(){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 teardown(){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);}}};});}var location=window.location;var nonce=jQuery.now();var rquery=/\?/; // Support: Android 2.3
1342	// Workaround failure to string-cast null input
1343	jQuery.parseJSON = function(data){return JSON.parse(data + "");}; // Cross-browser xml parsing
1344	jQuery.parseXML = function(data){var xml;if(!data || typeof data !== "string"){return null;} // Support: IE9
1345	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
1346	rlocalProtocol=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,rnoContent=/^(?:GET|HEAD)$/,rprotocol=/^\/\//, /* Prefilters
1347		 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
1348		 * 2) These are called:
1349		 *    - BEFORE asking for a transport
1350		 *    - AFTER param serialization (s.data is a string if s.processData is true)
1351		 * 3) key is the dataType
1352		 * 4) the catchall symbol "*" can be used
1353		 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
1354		 */prefilters={}, /* Transports bindings
1355		 * 1) key is the dataType
1356		 * 2) the catchall symbol "*" can be used
1357		 * 3) selection will start with transport dataType and THEN go to "*" if needed
1358		 */transports={}, // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
1359	allTypes="*/".concat("*"), // Anchor tag for parsing the document origin
1360	originAnchor=document.createElement("a");originAnchor.href = location.href; // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
1361	function addToPrefiltersOrTransports(structure){ // dataTypeExpression is optional and defaults to "*"
1362	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
1363	while(dataType = dataTypes[i++]) { // Prepend if requested
1364	if(dataType[0] === "+"){dataType = dataType.slice(1) || "*";(structure[dataType] = structure[dataType] || []).unshift(func); // Otherwise append
1365	}else {(structure[dataType] = structure[dataType] || []).push(func);}}}};} // Base inspection function for prefilters and transports
1366	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
1367	// that takes "flat" options (not to be deep extended)
1368	// Fixes #9887
1369	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:
1370	 * - finds the right dataType (mediates between content-type and expected dataType)
1371	 * - returns the corresponding response
1372	 */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
1373	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
1374	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
1375	if(dataTypes[0] in responses){finalDataType = dataTypes[0];}else { // Try convertible dataTypes
1376	for(type in responses) {if(!dataTypes[0] || s.converters[type + " " + dataTypes[0]]){finalDataType = type;break;}if(!firstDataType){firstDataType = type;}} // Or just use first one
1377	finalDataType = finalDataType || firstDataType;} // If we found a dataType
1378	// We add the dataType to the list if needed
1379	// and return the corresponding response
1380	if(finalDataType){if(finalDataType !== dataTypes[0]){dataTypes.unshift(finalDataType);}return responses[finalDataType];}} /* Chain conversions given the request and the original response
1381	 * Also sets the responseXXX fields on the jqXHR instance
1382	 */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
1383	dataTypes=s.dataTypes.slice(); // Create converters map with lowercased keys
1384	if(dataTypes[1]){for(conv in s.converters) {converters[conv.toLowerCase()] = s.converters[conv];}}current = dataTypes.shift(); // Convert to each sequential dataType
1385	while(current) {if(s.responseFields[current]){jqXHR[s.responseFields[current]] = response;} // Apply the dataFilter if provided
1386	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
1387	if(current === "*"){current = prev; // Convert response if prev dataType is non-auto and differs from current
1388	}else if(prev !== "*" && prev !== current){ // Seek a direct converter
1389	conv = converters[prev + " " + current] || converters["* " + current]; // If none found, seek a pair
1390	if(!conv){for(conv2 in converters) { // If conv2 outputs current
1391	tmp = conv2.split(" ");if(tmp[1] === current){ // If prev can be converted to accepted input
1392	conv = converters[prev + " " + tmp[0]] || converters["* " + tmp[0]];if(conv){ // Condense equivalence converters
1393	if(conv === true){conv = converters[conv2]; // Otherwise, insert the intermediate dataType
1394	}else if(converters[conv2] !== true){current = tmp[0];dataTypes.unshift(tmp[1]);}break;}}}} // Apply converter (if not an equivalence)
1395	if(conv !== true){ // Unless errors are allowed to bubble, catch and return them
1396	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
1397	active:0, // Last-Modified header cache for next request
1398	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", /*
1399			timeout: 0,
1400			data: null,
1401			dataType: null,
1402			username: null,
1403			password: null,
1404			cache: null,
1405			throws: false,
1406			traditional: false,
1407			headers: {},
1408			*/accepts:{"*":allTypes,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"}, // Data converters
1409	// Keys separate source (or catchall "*") and destination types with a single space
1410	converters:{ // Convert anything to text
1411	"* text":String, // Text to html (true = no transformation)
1412	"text html":true, // Evaluate text as a json expression
1413	"text json":jQuery.parseJSON, // Parse text as xml
1414	"text xml":jQuery.parseXML}, // For options that shouldn't be deep extended:
1415	// you can add your own custom options here if
1416	// and when you create one that shouldn't be
1417	// deep extended (see ajaxExtend)
1418	flatOptions:{url:true,context:true}}, // Creates a full fledged settings object into target
1419	// with both ajaxSettings and settings fields.
1420	// If target is omitted, writes into ajaxSettings.
1421	ajaxSetup:function ajaxSetup(target,settings){return settings? // Building a settings object
1422	ajaxExtend(ajaxExtend(target,jQuery.ajaxSettings),settings): // Extending ajaxSettings
1423	ajaxExtend(jQuery.ajaxSettings,target);},ajaxPrefilter:addToPrefiltersOrTransports(prefilters),ajaxTransport:addToPrefiltersOrTransports(transports), // Main method
1424	ajax:function ajax(url,options){ // If url is an object, simulate pre-1.5 signature
1425	if(typeof url === "object"){options = url;url = undefined;} // Force options to be an object
1426	options = options || {};var transport, // URL without anti-cache param
1427	cacheURL, // Response headers
1428	responseHeadersString,responseHeaders, // timeout handle
1429	timeoutTimer, // Url cleanup var
1430	urlAnchor, // To know if global events are to be dispatched
1431	fireGlobals, // Loop variable
1432	i, // Create the final options object
1433	s=jQuery.ajaxSetup({},options), // Callbacks context
1434	callbackContext=s.context || s, // Context for global events is callbackContext if it is a DOM node or jQuery collection
1435	globalEventContext=s.context && (callbackContext.nodeType || callbackContext.jquery)?jQuery(callbackContext):jQuery.event, // Deferreds
1436	deferred=jQuery.Deferred(),completeDeferred=jQuery.Callbacks("once memory"), // Status-dependent callbacks
1437	_statusCode=s.statusCode || {}, // Headers (they are sent all at once)
1438	requestHeaders={},requestHeadersNames={}, // The jqXHR state
1439	state=0, // Default abort message
1440	strAbort="canceled", // Fake xhr
1441	jqXHR={readyState:0, // Builds headers hashtable if needed
1442	getResponseHeader:function getResponseHeader(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
1443	getAllResponseHeaders:function getAllResponseHeaders(){return state === 2?responseHeadersString:null;}, // Caches the header
1444	setRequestHeader:function setRequestHeader(name,value){var lname=name.toLowerCase();if(!state){name = requestHeadersNames[lname] = requestHeadersNames[lname] || name;requestHeaders[name] = value;}return this;}, // Overrides response content-type header
1445	overrideMimeType:function overrideMimeType(type){if(!state){s.mimeType = type;}return this;}, // Status-dependent callbacks
1446	statusCode:function statusCode(map){var code;if(map){if(state < 2){for(code in map) { // Lazy-add the new callback in a way that preserves old ones
1447	_statusCode[code] = [_statusCode[code],map[code]];}}else { // Execute the appropriate callbacks
1448	jqXHR.always(map[jqXHR.status]);}}return this;}, // Cancel the request
1449	abort:function abort(statusText){var finalText=statusText || strAbort;if(transport){transport.abort(finalText);}done(0,finalText);return this;}}; // Attach deferreds
1450	deferred.promise(jqXHR).complete = completeDeferred.add;jqXHR.success = jqXHR.done;jqXHR.error = jqXHR.fail; // Remove hash character (#7531: and string promotion)
1451	// Add protocol if not provided (prefilters might expect it)
1452	// Handle falsy url in the settings object (#10093: consistency with old signature)
1453	// We also use the url parameter if available
1454	s.url = ((url || s.url || location.href) + "").replace(rhash,"").replace(rprotocol,location.protocol + "//"); // Alias method option to type as per ticket #12004
1455	s.type = options.method || options.type || s.method || s.type; // Extract dataTypes list
1456	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.
1457	if(s.crossDomain == null){urlAnchor = document.createElement("a"); // Support: IE8-11+
1458	// IE throws exception if url is malformed, e.g. http://example.com:80x/
1459	try{urlAnchor.href = s.url; // Support: IE8-11+
1460	// Anchor's host property isn't correctly set when s.url is relative
1461	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,
1462	// it can be rejected by the transport if it is invalid
1463	s.crossDomain = true;}} // Convert data if not already a string
1464	if(s.data && s.processData && typeof s.data !== "string"){s.data = jQuery.param(s.data,s.traditional);} // Apply prefilters
1465	inspectPrefiltersOrTransports(prefilters,s,options,jqXHR); // If request was aborted inside a prefilter, stop there
1466	if(state === 2){return jqXHR;} // We can fire global events as of now if asked to
1467	// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
1468	fireGlobals = jQuery.event && s.global; // Watch for a new set of requests
1469	if(fireGlobals && jQuery.active++ === 0){jQuery.event.trigger("ajaxStart");} // Uppercase the type
1470	s.type = s.type.toUpperCase(); // Determine if request has content
1471	s.hasContent = !rnoContent.test(s.type); // Save the URL in case we're toying with the If-Modified-Since
1472	// and/or If-None-Match header later on
1473	cacheURL = s.url; // More options handling for requests with no content
1474	if(!s.hasContent){ // If data is available, append data to url
1475	if(s.data){cacheURL = s.url += (rquery.test(cacheURL)?"&":"?") + s.data; // #9682: remove data so that it's not used in an eventual retry
1476	delete s.data;} // Add anti-cache in url if needed
1477	if(s.cache === false){s.url = rts.test(cacheURL)? // If there is already a '_' parameter, set its value
1478	cacheURL.replace(rts,"$1_=" + nonce++): // Otherwise add one to the end
1479	cacheURL + (rquery.test(cacheURL)?"&":"?") + "_=" + nonce++;}} // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
1480	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
1481	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
1482	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
1483	for(i in s.headers) {jqXHR.setRequestHeader(i,s.headers[i]);} // Allow custom headers/mimetypes and early abort
1484	if(s.beforeSend && (s.beforeSend.call(callbackContext,jqXHR,s) === false || state === 2)){ // Abort if not done already and return
1485	return jqXHR.abort();} // Aborting is no longer a cancellation
1486	strAbort = "abort"; // Install callbacks on deferreds
1487	for(i in {success:1,error:1,complete:1}) {jqXHR[i](s[i]);} // Get transport
1488	transport = inspectPrefiltersOrTransports(transports,s,options,jqXHR); // If no transport, we auto-abort
1489	if(!transport){done(-1,"No Transport");}else {jqXHR.readyState = 1; // Send global event
1490	if(fireGlobals){globalEventContext.trigger("ajaxSend",[jqXHR,s]);} // If request was aborted inside ajaxSend, stop there
1491	if(state === 2){return jqXHR;} // Timeout
1492	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
1493	if(state < 2){done(-1,e); // Simply rethrow otherwise
1494	}else {throw e;}}} // Callback for when everything is done
1495	function done(status,nativeStatusText,responses,headers){var isSuccess,success,error,response,modified,statusText=nativeStatusText; // Called once
1496	if(state === 2){return;} // State is "done" now
1497	state = 2; // Clear timeout if it exists
1498	if(timeoutTimer){window.clearTimeout(timeoutTimer);} // Dereference transport for early garbage collection
1499	// (no matter how long the jqXHR object will be used)
1500	transport = undefined; // Cache response headers
1501	responseHeadersString = headers || ""; // Set readyState
1502	jqXHR.readyState = status > 0?4:0; // Determine if successful
1503	isSuccess = status >= 200 && status < 300 || status === 304; // Get response data
1504	if(responses){response = ajaxHandleResponses(s,jqXHR,responses);} // Convert no matter what (that way responseXXX fields are always set)
1505	response = ajaxConvert(s,response,jqXHR,isSuccess); // If successful, handle type chaining
1506	if(isSuccess){ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
1507	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
1508	if(status === 204 || s.type === "HEAD"){statusText = "nocontent"; // if not modified
1509	}else if(status === 304){statusText = "notmodified"; // If we have data, let's convert it
1510	}else {statusText = response.state;success = response.data;error = response.error;isSuccess = !error;}}else { // Extract error from statusText and normalize for non-aborts
1511	error = statusText;if(status || !statusText){statusText = "error";if(status < 0){status = 0;}}} // Set data for the fake xhr object
1512	jqXHR.status = status;jqXHR.statusText = (nativeStatusText || statusText) + ""; // Success/Error
1513	if(isSuccess){deferred.resolveWith(callbackContext,[success,statusText,jqXHR]);}else {deferred.rejectWith(callbackContext,[jqXHR,statusText,error]);} // Status-dependent callbacks
1514	jqXHR.statusCode(_statusCode);_statusCode = undefined;if(fireGlobals){globalEventContext.trigger(isSuccess?"ajaxSuccess":"ajaxError",[jqXHR,s,isSuccess?success:error]);} // Complete
1515	completeDeferred.fireWith(callbackContext,[jqXHR,statusText]);if(fireGlobals){globalEventContext.trigger("ajaxComplete",[jqXHR,s]); // Handle the global AJAX counter
1516	if(! --jQuery.active){jQuery.event.trigger("ajaxStop");}}}return jqXHR;},getJSON:function getJSON(url,data,callback){return jQuery.get(url,data,callback,"json");},getScript:function getScript(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
1517	if(jQuery.isFunction(data)){type = type || callback;callback = data;data = undefined;} // The url can be an options object (which then must have .url)
1518	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)
1519	type:"GET",dataType:"script",async:false,global:false,"throws":true});};jQuery.fn.extend({wrapAll:function wrapAll(html){var wrap;if(jQuery.isFunction(html)){return this.each(function(i){jQuery(this).wrapAll(html.call(this,i));});}if(this[0]){ // The elements to wrap the target around
1520	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 wrapInner(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 wrap(html){var isFunction=jQuery.isFunction(html);return this.each(function(i){jQuery(this).wrapAll(isFunction?html.call(this,i):html);});},unwrap:function unwrap(){return this.parent().each(function(){if(!jQuery.nodeName(this,"body")){jQuery(this).replaceWith(this.childNodes);}}).end();}});jQuery.expr.filters.hidden = function(elem){return !jQuery.expr.filters.visible(elem);};
1520jQuery.expr.filters.visible = function(elem){ // Support: Opera <= 12.12
1521	// Opera reports offsetWidths and offsetHeights less than zero on some elements
1522	// Use OR instead of AND as the element is not visible if either is true
1523	// See tickets #10406 and #13132
1524	return elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0;};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.
1525	jQuery.each(obj,function(i,v){if(traditional || rbracket.test(prefix)){ // Treat each array item as a scalar.
1526	add(prefix,v);}else { // Item is non-scalar (array or object), encode its numeric index.
1527	buildParams(prefix + "[" + (typeof v === "object" && v != null?i:"") + "]",v,traditional,add);}});}else if(!traditional && jQuery.type(obj) === "object"){ // Serialize object item.
1528	for(name in obj) {buildParams(prefix + "[" + name + "]",obj[name],traditional,add);}}else { // Serialize scalar item.
1529	add(prefix,obj);}} // Serialize an array of form elements or a set of
1530	// key/values into a query string
1531	jQuery.param = function(a,traditional){var prefix,s=[],add=function add(key,value){ // If value is a function, invoke it and return its value
1532	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.
1533	if(traditional === undefined){traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;} // If an array was passed in, assume that it is an array of form elements.
1534	if(jQuery.isArray(a) || a.jquery && !jQuery.isPlainObject(a)){ // Serialize the form elements
1535	jQuery.each(a,function(){add(this.name,this.value);});}else { // If traditional, encode the "old" way (the way 1.3.2 or older
1536	// did it), otherwise encode params recursively.
1537	for(prefix in a) {buildParams(prefix,a[prefix],traditional,add);}} // Return the resulting serialization
1538	return s.join("&").replace(r20,"+");};jQuery.fn.extend({serialize:function serialize(){return jQuery.param(this.serializeArray());},serializeArray:function serializeArray(){return this.map(function(){ // Can add propHook for "elements" to filter or add form elements
1539	var elements=jQuery.prop(this,"elements");return elements?jQuery.makeArray(elements):this;}
vendor: 18,534 bytes, lines 1539-1686
1539).filter(function(){var type=this.type; // Use .is( ":disabled" ) so that fieldset[disabled] works
1540	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
1541	0:200, // Support: IE9
1542	// #1450: sometimes IE returns 1223 when it should be 204
1543	1223:204},xhrSupported=jQuery.ajaxSettings.xhr();support.cors = !!xhrSupported && "withCredentials" in xhrSupported;support.ajax = xhrSupported = !!xhrSupported;jQuery.ajaxTransport(function(options){var callback,errorCallback; // Cross domain only allowed if supported through XMLHttpRequest
1544	if(support.cors || xhrSupported && !options.crossDomain){return {send:function send(headers,complete){var i,xhr=options.xhr();xhr.open(options.type,options.url,options.async,options.username,options.password); // Apply custom fields if provided
1545	if(options.xhrFields){for(i in options.xhrFields) {xhr[i] = options.xhrFields[i];}} // Override mime type if needed
1546	if(options.mimeType && xhr.overrideMimeType){xhr.overrideMimeType(options.mimeType);} // X-Requested-With header
1547	// For cross-domain requests, seeing as conditions for a preflight are
1548	// akin to a jigsaw puzzle, we simply never set it to be sure.
1549	// (it can always be set on a per-request basis or even using ajaxSetup)
1550	// For same-domain requests, won't change header if already provided.
1551	if(!options.crossDomain && !headers["X-Requested-With"]){headers["X-Requested-With"] = "XMLHttpRequest";} // Set headers
1552	for(i in headers) {xhr.setRequestHeader(i,headers[i]);} // Callback
1553	callback = function(type){return function(){if(callback){callback = errorCallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;if(type === "abort"){xhr.abort();}else if(type === "error"){ // Support: IE9
1554	// On a manual native abort, IE9 throws
1555	// errors on any property access that is not readyState
1556	if(typeof xhr.status !== "number"){complete(0,"error");}else {complete( // File: protocol always yields status 0; see #8605, #14207
1557	xhr.status,xhr.statusText);}}else {complete(xhrSuccessStatus[xhr.status] || xhr.status,xhr.statusText, // Support: IE9 only
1558	// IE9 has no XHR2 but throws on binary (trac-11426)
1559	// For XHR2 non-text, let the caller handle it (gh-2498)
1560	(xhr.responseType || "text") !== "text" || typeof xhr.responseText !== "string"?{binary:xhr.response}:{text:xhr.responseText},xhr.getAllResponseHeaders());}}};}; // Listen to events
1561	xhr.onload = callback();errorCallback = xhr.onerror = callback("error"); // Support: IE9
1562	// Use onreadystatechange to replace onabort
1563	// to handle uncaught aborts
1564	if(xhr.onabort !== undefined){xhr.onabort = errorCallback;}else {xhr.onreadystatechange = function(){ // Check readyState before timeout as it changes
1565	if(xhr.readyState === 4){ // Allow onerror to be called first,
1566	// but that will not handle a native abort
1567	// Also, save errorCallback to a variable
1568	// as xhr.onerror cannot be accessed
1569	window.setTimeout(function(){if(callback){errorCallback();}});}};} // Create the abort callback
1570	callback = callback("abort");try{ // Do send the request (this may raise an exception)
1571	xhr.send(options.hasContent && options.data || null);}catch(e) { // #14683: Only rethrow if this hasn't been notified as an error yet
1572	if(callback){throw e;}}},abort:function abort(){if(callback){callback();}}};}}); // Install script dataType
1573	jQuery.ajaxSetup({accepts:{script:"text/javascript, application/javascript, " + "application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function textScript(text){jQuery.globalEval(text);return text;}}}); // Handle cache's special case and crossDomain
1574	jQuery.ajaxPrefilter("script",function(s){if(s.cache === undefined){s.cache = false;}if(s.crossDomain){s.type = "GET";}}); // Bind script tag hack transport
1575	jQuery.ajaxTransport("script",function(s){ // This transport only deals with cross domain requests
1576	if(s.crossDomain){var script,callback;return {send:function send(_,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
1577	document.head.appendChild(script[0]);},abort:function abort(){if(callback){callback();}}};}});var oldCallbacks=[],rjsonp=/(=)\?(?=&|$)|\?\?/; // Default jsonp settings
1578	jQuery.ajaxSetup({jsonp:"callback",jsonpCallback:function jsonpCallback(){var callback=oldCallbacks.pop() || jQuery.expando + "_" + nonce++;this[callback] = true;return callback;}}); // Detect, normalize options and install callbacks for jsonp requests
1579	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
1580	if(jsonProp || s.dataTypes[0] === "jsonp"){ // Get callback name, remembering preexisting value associated with it
1581	callbackName = s.jsonpCallback = jQuery.isFunction(s.jsonpCallback)?s.jsonpCallback():s.jsonpCallback; // Insert callback into url or form data
1582	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
1583	s.converters["script json"] = function(){if(!responseContainer){jQuery.error(callbackName + " was not called");}return responseContainer[0];}; // Force json dataType
1584	s.dataTypes[0] = "json"; // Install callback
1585	overwritten = window[callbackName];window[callbackName] = function(){responseContainer = arguments;}; // Clean-up function (fires after converters)
1586	jqXHR.always(function(){ // If previous value didn't exist - remove it
1587	if(overwritten === undefined){jQuery(window).removeProp(callbackName); // Otherwise restore preexisting value
1588	}else {window[callbackName] = overwritten;} // Save back as free
1589	if(s[callbackName]){ // Make sure that re-using the options doesn't screw things around
1590	s.jsonpCallback = originalSettings.jsonpCallback; // Save the callback name for future use
1591	oldCallbacks.push(callbackName);} // Call if it was a function and we have a response
1592	if(responseContainer && jQuery.isFunction(overwritten)){overwritten(responseContainer[0]);}responseContainer = overwritten = undefined;}); // Delegate to script
1593	return "script";}}); // Argument "data" should be string of html
1594	// context (optional): If specified, the fragment will be created in this context,
1595	// defaults to document
1596	// keepScripts (optional): If true, will include scripts passed in the html string
1597	jQuery.parseHTML = function(data,context,keepScripts){if(!data || typeof data !== "string"){return null;}if(typeof context === "boolean"){keepScripts = context;context = false;}context = context || document;var parsed=rsingleTag.exec(data),scripts=!keepScripts && []; // Single tag
1598	if(parsed){return [context.createElement(parsed[1])];}parsed = buildFragment([data],context,scripts);if(scripts && scripts.length){jQuery(scripts).remove();}return jQuery.merge([],parsed.childNodes);}; // Keep a copy of the old load method
1599	var _load=jQuery.fn.load; /**
1600	 * Load a url into a page
1601	 */jQuery.fn.load = function(url,params,callback){if(typeof url !== "string" && _load){return _load.apply(this,arguments);}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
1602	if(jQuery.isFunction(params)){ // We assume that it's the callback
1603	callback = params;params = undefined; // Otherwise, build a param string
1604	}else if(params && typeof params === "object"){type = "POST";} // If we have elements to modify, make the request
1605	if(self.length > 0){jQuery.ajax({url:url, // If "type" variable is undefined, then "GET" method will be used.
1606	// Make value of this field explicit since
1607	// user can override it through ajaxSetup method
1608	type:type || "GET",dataType:"html",data:params}).done(function(responseText){ // Save response for use in complete callback
1609	response = arguments;self.html(selector? // If a selector was specified, locate the right elements in a dummy div
1610	// Exclude scripts to avoid IE 'Permission Denied' errors
1611	jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector): // Otherwise use the full result
1612	responseText); // If the request succeeds, this function gets "data", "status", "jqXHR"
1613	// but they are ignored because response was set above.
1614	// If it fails, this function gets "jqXHR", "status", "error"
1615	}).always(callback && function(jqXHR,status){self.each(function(){callback.apply(this,response || [jqXHR.responseText,status,jqXHR]);});});}return this;}; // Attach a bunch of functions for handling common AJAX events
1616	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;}; /**
1617	 * Gets a window from an element
1618	 */function getWindow(elem){return jQuery.isWindow(elem)?elem:elem.nodeType === 9 && elem.defaultView;}jQuery.offset = {setOffset:function setOffset(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
1619	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
1620	// top or left is auto and position is either absolute or fixed
1621	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)
1622	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 offset(options){if(arguments.length){return options === undefined?this:this.each(function(i){jQuery.offset.setOffset(this,options,i);});}var docElem,win,elem=this[0],box={top:0,left:0},doc=elem && elem.ownerDocument;if(!doc){return;}docElem = doc.documentElement; // Make sure it's not a disconnected DOM node
1623	if(!jQuery.contains(docElem,elem)){return box;}box = elem.getBoundingClientRect();win = getWindow(doc);return {top:box.top + win.pageYOffset - docElem.clientTop,left:box.left + win.pageXOffset - docElem.clientLeft};},position:function position(){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},
1624	// because it is its only offset parent
1625	if(jQuery.css(elem,"position") === "fixed"){ // Assume getBoundingClientRect is there when computed position is fixed
1626	offset = elem.getBoundingClientRect();}else { // Get *real* offsetParent
1627	offsetParent = this.offsetParent(); // Get correct offsets
1628	offset = this.offset();if(!jQuery.nodeName(offsetParent[0],"html")){parentOffset = offsetParent.offset();} // Add offsetParent borders
1629	parentOffset.top += jQuery.css(offsetParent[0],"borderTopWidth",true);parentOffset.left += jQuery.css(offsetParent[0],"borderLeftWidth",true);} // Subtract parent offsets and element margins
1630	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:
1631	// 1) For the element inside the iframe without offsetParent, this method will return
1632	//    documentElement of the parent window
1633	// 2) For the hidden or detached element
1634	// 3) For body or html element, i.e. in case of the html node - it will return itself
1635	//
1636	// but those exceptions were never presented as a real life use-cases
1637	// and might be considered as more preferable results.
1638	//
1639	// This logic, however, is not guaranteed and can change at any point in the future
1640	offsetParent:function offsetParent(){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
1641	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);};}); // Support: Safari<7-8+, Chrome<37-44+
1642	// Add the top/left cssHooks using jQuery.fn.position
1643	// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
1644	// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280
1645	// getComputedStyle returns percent when specified for top/left/bottom/right;
1646	// rather than make the css module depend on the offset module, just check for it here
1647	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
1648	return rnumnonpx.test(computed)?jQuery(elem).position()[prop] + "px":computed;}});}); // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
1649	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
1650	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
1651	// isn't a whole lot we can do. See pull request at this URL for discussion:
1652	// https://github.com/jquery/jquery/pull/764
1653	return elem.document.documentElement["client" + name];} // Get document width or height
1654	if(elem.nodeType === 9){doc = elem.documentElement; // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
1655	// whichever is greatest
1656	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
1657	jQuery.css(elem,type,extra): // Set width or height on the element
1658	jQuery.style(elem,type,value,extra);},type,chainable?margin:undefined,chainable,null);};});});jQuery.fn.extend({bind:function bind(types,data,fn){return this.on(types,null,data,fn);},unbind:function unbind(types,fn){return this.off(types,null,fn);},delegate:function delegate(selector,types,data,fn){return this.on(types,selector,data,fn);},undelegate:function undelegate(selector,types,fn){ // ( namespace ) or ( selector, types [, fn] )
1659	return arguments.length === 1?this.off(selector,"**"):this.off(types,selector || "**",fn);},size:function size(){return this.length;}});jQuery.fn.andSelf = jQuery.fn.addBack; // Register as a named AMD module, since jQuery can be concatenated with other
1660	// files that may use define, but not via a proper concatenation script that
1661	// understands anonymous AMD modules. A named AMD is safest and most robust
1662	// way to register. Lowercase jquery is used because AMD module names are
1663	// derived from file names, and jQuery is normally delivered in a lowercase
1664	// file name. Do this after creating the global so that if an AMD module wants
1665	// to call noConflict to hide this version of jQuery, it will work.
1666	// Note that for maximum portability, libraries that are not jQuery should
1667	// declare themselves as anonymous modules, and avoid setting a global if an
1668	// AMD loader is present. jQuery is a special case. For more information, see
1669	// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
1670	if(true){!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function(){return jQuery;}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));}var  // Map over jQuery in case of overwrite
1671	_jQuery=window.jQuery, // Map over the $ in case of overwrite
1672	_$=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
1673	// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
1674	// and CommonJS for browser emulators (#13566)
1675	if(!noGlobal){window.jQuery = window.$ = jQuery;}return jQuery;}); // Otherwise append directly
1676
1677/***/ },
1678/* 3 */
1679/***/ function(module, exports, __webpack_require__) {
1680
1681	/**
1682	 * 2007-2016 PrestaShop
1683	 *
1684	 * NOTICE OF LICENSE
1685	 *
1686	 * This source file is subject to the Open Software License (OSL 3.0)
1687	 * that is bundled with this package in the file LICENSE.txt.
1688	 * It is also available through the world-wide-web at this URL:
1689	 * http://opensource.org/licenses/osl-3.0.php
1690	 * If you did not receive a copy of the license and are unable to
1691	 * obtain it through the world-wide-web, please send an email
1692	 * to [email protected] so we can send you a copy immediately.
1693	 *
1694	 * DISCLAIMER
1695	 *
1696	 * Do not edit or add to this file if you wish to upgrade PrestaShop to newer
1697	 * versions in the future. If you wish to customize PrestaShop for your
1698	 * needs please refer to http://www.prestashop.com for more information.
1699	 *
1700	 * @author    PrestaShop SA <[email protected]>
1701	 * @copyright 2007-2016 PrestaShop SA
1702	 * @license   http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
1703	 * International Registered Trademark & Property of PrestaShop SA
1704	 */
1705	'use strict';
1706	
1707	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
1708	
1709	var _jquery = __webpack_require__(2);
1710	
1711	var _jquery2 = _interopRequireDefault(_jquery);
1712	
1713	var _prestashop = __webpack_require__(4);
1714	
1715	var _prestashop2 = _interopRequireDefault(_prestashop);
1716	
1717	(0, _jquery2['default'])(document).ready(function () {
1718	  _prestashop2['default'].on('updateCart', function (event) {
1719	    var getCartViewUrl = (0, _jquery2['default'])('.js-cart').data('refresh-url');
1720	    var requestData = {};
1721	
1722	    if (event && event.reason) {
1723	      requestData = {
1724	        id_product_attribute: event.reason.idProductAttribute,
1725	        id_product: event.reason.idProduct
1726	      };
1727	    }
1728	
1729	    var productPriceSelector = '.product-price strong';
1730	
1731	    var updatePrices = function updatePrices(pricesInCart, $cartOverview, $newCart) {
1732	      _jquery2['default'].each(pricesInCart, function (index, priceInCart) {
1733	        var productUrl = (0, _jquery2['default'])((0, _jquery2['default'])(priceInCart).parents('.product-line-grid')[0]).find('a.label').attr('href');
1734	        var productAnchorSelector = '.label[href="' + productUrl + '"]';
1735	        var newProductAnchor = $newCart.find(productAnchorSelector);
1736	        var $cartItem = (0, _jquery2['default'])($cartOverview.find(productAnchorSelector).parents('.cart-item')[0]);
1737	
1738	        if (newProductAnchor.length > 0) {
1739	          (function () {
1740	            var $newCartItem = newProductAnchor.parents('.cart-item');
1741	            var $productCartItems = $cartOverview.find(productAnchorSelector).parents('.cart-item');
1742	
1743	            _jquery2['default'].each($productCartItems, function (index, productCartItem) {
1744	              var $productCartItem = (0, _jquery2['default'])(productCartItem);
1745	              // Case when a gift previously added to cart has been removed
1746	              if ($productCartItem.find('.gift').length > 0 && 0 === $newCartItem.find('.gift').length) {
1747	                $productCartItem.remove();
1748	              }
1749	            });
1750	
1751	            if ($newCartItem.find('.gift').length === 1 && $productCartItems.find('.gift').length === 1 && $productCartItems.length > 1) {
1752	              // Case when a product added manually has been removed and
1753	              // the same product has been given away
1754	              var $manuallyAddedProducts = $productCartItems.filter(function (index, productCartItem) {
1755	                return (0, _jquery2['default'])(productCartItem).find('.gift').length === 0;
1756	              });
1757	              $manuallyAddedProducts.remove();
1758	            }
1759	          })();
1760	        }
1761	
1762	        // Remove cart item if response does not contain current product link
1763	        if (0 === newProductAnchor.length) {
1764	          $cartItem.remove();
1765	
1766	          return;
1767	        }
1768	
1769	        var $newCartItem = (0, _jquery2['default'])($newCart.find(productAnchorSelector).parents('.cart-item')[0]);
1770	
1771	        var newPrice;
1772	        if ($newCartItem.find(productPriceSelector).find('.gift').length > 0) {
1773	          newPrice = $newCartItem.find(productPriceSelector).html(); // Preserve gift tag
1774	          $cartItem.find(productPriceSelector).html(newPrice);
1775	        } else {
1776	          newPrice = $newCartItem.find(productPriceSelector).text();
1777	          $cartItem.find(productPriceSelector).text(newPrice);
1778	        }
1779	      });
1780	    };
1781	
1782	    var appendGiftProducts = function appendGiftProducts($cartOverview, $newCart) {
1783	      $newCart = $newCart.filter('.js-cart');
1784	      var $productAnchors = $newCart.find('.label[href]');
1785	
1786	      _jquery2['default'].each($productAnchors, function (index, productAnchor) {
1787	        var $productAnchor = (0, _jquery2['default'])(productAnchor);
1788	        var productUrl = $productAnchor.attr('href');
1789	        var $cartItems = $cartOverview.find('.cart-items');
1790	        var $newCartItem = $productAnchor.parents('.cart-item');
1791	
1792	        if (0 === $cartItems.find('.label[href="' + productUrl + '"]').length) {
1793	          $cartItems.append($productAnchor.parents('.cart-item'));
1794	        } else {
1795	          var $cartItem = $cartItems.find('.label[href="' + productUrl + '"]').parents('.cart-item');
1796	          if ($cartItem.find('.gift').length === 0 && $newCartItem.find('.gift').length > 0) {
1797	            $cartItems.append($newCartItem);
1798	          }
1799	        }
1800	      });
1801	    };
1802	
1803	    _jquery2['default'].post(getCartViewUrl, requestData).then(function (resp) {
1804	      var $newCart = (0, _jquery2['default'])(resp.cart_detailed);
1805	      var $cartOverview = (0, _jquery2['default'])('.cart-overview');
1806	      var pricesInCart = $cartOverview.find(productPriceSelector);
1807	
1808	      if ($newCart.find('.no-items').length > 0) {
1809	        $cartOverview.replaceWith(resp.cart_detailed);
1810	      } else {
1811	        updatePrices(pricesInCart, $cartOverview, $newCart);
1812	        appendGiftProducts($cartOverview, $newCart);
1813	      }
1814	
1815	      (0, _jquery2['default'])('.cart-detailed-totals').replaceWith(resp.cart_detailed_totals);
1816	      (0, _jquery2['default'])('.cart-summary-items-subtotal').replaceWith(resp.cart_summary_items_subtotal);
1817	      (0, _jquery2['default'])('.cart-summary-totals').replaceWith(resp.cart_summary_totals);
1818	      (0, _jquery2['default'])('.cart-detailed-actions').replaceWith(resp.cart_detailed_actions);
1819	      (0, _jquery2['default'])('.cart-voucher').replaceWith(resp.cart_voucher);
1820	
1821	      (0, _jquery2['default'])('.js-cart-line-product-quantity').each(function (index, input) {
1822	        var $input = (0, _jquery2['default'])(input);
1823	        $input.attr('value', $input.val());
1824	      });
1825	
1826	      _prestashop2['default'].emit('updatedCart');
1827	    }).fail(function (resp) {
1828	      _prestashop2['default'].emit('handleError', { eventType: 'updateCart', resp: resp });
1829	    });
1830	  });
1831	
1832	  var $body = (0, _jquery2['default'])('body');
1833	
1834	  $body.on('click', '[data-button-action="add-to-cart"]', function (event) {
1835	    event.preventDefault();
1836	
1837	    var $form = (0, _jquery2['default'])((0, _jquery2['default'])(event.target).closest('form'));
1838	    var query = $form.serialize() + '&add=1&action=update';
1839	    var actionURL = $form.attr('action');
1840	
1841	    var isQuantityInputValid = function isQuantityInputValid($input) {
1842	      var validInput = true;
1843	
1844	      $input.each(function (index, input) {
1845	        var $input = (0, _jquery2['default'])(input);
1846	        var minimalValue = parseInt($input.attr('min'), 10);
1847	        if (minimalValue && $input.val() < minimalValue) {
1848	          onInvalidQuantity($input);
1849	          validInput = false;
1850	        }
1851	      });
1852	
1853	      return validInput;
1854	    };
1855	
1856	    var onInvalidQuantity = function onInvalidQuantity($input) {
1857	      (0, _jquery2['default'])($input.parents('.product-add-to-cart')[0]).find('.product-minimal-quantity').addClass('error');
1858	      $input.parent().find('label').addClass('error');
1859	    };
1860	
1861	    var $quantityInput = $form.find('input[min]');
1862	    if (!isQuantityInputValid($quantityInput)) {
1863	      onInvalidQuantity($quantityInput);
1864	
1865	      return;
1866	    }
1867	
1868	    _jquery2['default'].post(actionURL, query, null, 'json').then(function (resp) {
1869	      _prestashop2['default'].emit('updateCart', {
1870	        reason: {
1871	          idProduct: resp.id_product,
1872	          idProductAttribute: resp.id_product_attribute,
1873	          linkAction: 'add-to-cart'
1874	        }
1875	      });
1876	    }).fail(function (resp) {
1877	      _prestashop2['default'].emit('handleError', { eventType: 'addProductToCart', resp: resp });
1878	    });
1879	  });
1880	
1881	  $body.on('submit', '[data-link-action="add-voucher"]', function (event) {
1882	    event.preventDefault();
1883	
1884	    var $addVoucherForm = (0, _jquery2['default'])(event.currentTarget);
1885	    var getCartViewUrl = $addVoucherForm.attr('action');
1886	
1887	    if (0 === $addVoucherForm.find('[name=action]').length) {
1888	      $addVoucherForm.append((0, _jquery2['default'])('<input>', { 'type': 'hidden', 'name': 'ajax', "value": 1 }));
1889	    }
1890	    if (0 === $addVoucherForm.find('[name=action]').length) {
1891	      $addVoucherForm.append((0, _jquery2['default'])('<input>', { 'type': 'hidden', 'name': 'action', "value": "update" }));
1892	    }
1893	
1894	    _jquery2['default'].post(getCartViewUrl, $addVoucherForm.serialize(), null, 'json').then(function (resp) {
1895	      if (resp.hasError) {
1896	        (0, _jquery2['default'])('.js-error').show().find('.js-error-text').text(resp.errors[0]);
1897	
1898	        return;
1899	      }
1900	
1901	      // Refresh cart preview
1902	      _prestashop2['default'].emit('updateCart', { reason: event.target.dataset });
1903	    }).fail(function (resp) {
1904	      _prestashop2['default'].emit('handleError', { eventType: 'addVoucher', resp: resp });
1905	    });
1906	  });
1907	});
1908
1909/***/ },
1910/* 4 */
1911/***/ function(module, exports) {
1912
1913	module.exports = prestashop;
1914
1915/***/ },
1916/* 5 */
1917/***/ function(module, exports, __webpack_require__) {
1918
1919	/**
1920	 * 2007-2016 PrestaShop
1921	 *
1922	 * NOTICE OF LICENSE
1923	 *
1924	 * This source file is subject to the Open Software License (OSL 3.0)
1925	 * that is bundled with this package in the file LICENSE.txt.
1926	 * It is also available through the world-wide-web at this URL:
1927	 * http://opensource.org/licenses/osl-3.0.php
1928	 * If you did not receive a copy of the license and are unable to
1929	 * obtain it through the world-wide-web, please send an email
1930	 * to [email protected] so we can send you a copy immediately.
1931	 *
1932	 * DISCLAIMER
1933	 *
1934	 * Do not edit or add to this file if you wish to upgrade PrestaShop to newer
1935	 * versions in the future. If you wish to customize PrestaShop for your
1936	 * needs please refer to http://www.prestashop.com for more information.
1937	 *
1938	 * @author    PrestaShop SA <[email protected]>
1939	 * @copyright 2007-2016 PrestaShop SA
1940	 * @license   http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
1941	 * International Registered Trademark & Property of PrestaShop SA
1942	 */
1943	'use strict';
1944	
1945	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
1946	
1947	var _jquery = __webpack_require__(2);
1948	
1949	var _jquery2 = _interopRequireDefault(_jquery);
1950	
1951	var _prestashop = __webpack_require__(4);
1952	
1953	var _prestashop2 = _interopRequireDefault(_prestashop);
1954	
1955	var _checkoutPayment = __webpack_require__(6);
1956	
1957	var _checkoutPayment2 = _interopRequireDefault(_checkoutPayment);
1958	
1959	var _checkoutDelivery = __webpack_require__(7);
1960	
1961	var _checkoutDelivery2 = _interopRequireDefault(_checkoutDelivery);
1962	
1963	var _checkoutPayment3 = _interopRequireDefault(_checkoutPayment);
1964	
1965	function setUpCheckout() {
1966	  (0, _checkoutPayment2['default'])();
1967	  (0, _checkoutDelivery2['default'])();
1968	  (0, _checkoutPayment3['default'])();
1969	
1970	  handleCheckoutStepChange();
1971	}
1972	
1973	function handleCheckoutStepChange() {
1974	  (0, _jquery2['default'])('.checkout-step').off('click');
1975	
1976	  var currentStepClass = 'js-current-step';
1977	  var currentStepSelector = '.' + currentStepClass;
1978	  var stepsAfterPersonalInformation = (0, _jquery2['default'])('#checkout-personal-information-step').nextAll();
1979	
1980	  (0, _jquery2['default'])(currentStepSelector).prevAll().add(stepsAfterPersonalInformation).on('click', function (event) {
1981	    var $nextStep = (0, _jquery2['default'])(event.target).closest('.checkout-step');
1982	    if (!$nextStep.hasClass('-unreachable')) {
1983	      (0, _jquery2['default'])(currentStepSelector + ', .-current').removeClass(currentStepClass + ' -current');
1984	      $nextStep.toggleClass('-current');
1985	      $nextStep.toggleClass(currentStepClass);
1986	    }
1987	    _prestashop2['default'].emit('changedCheckoutStep', { event: event });
1988	  });
1989	
1990	  (0, _jquery2['default'])(currentStepSelector + ':not(#checkout-personal-information-step)').nextAll().on('click', function (event) {
1991	    (0, _jquery2['default'])(currentStepSelector + ' button.continue').click();
1992	    _prestashop2['default'].emit('changedCheckoutStep', { event: event });
1993	  });
1994	}
1995	
1996	(0, _jquery2['default'])(document).ready(function () {
1997	  if ((0, _jquery2['default'])('#checkout').length === 1) {
1998	    setUpCheckout();
1999	  }
2000	});
2001
2002/***/ },
2003/* 6 */
2004/***/ function(module, exports, __webpack_require__) {
2005
2006	/**
2007	 * 2007-2016 PrestaShop
2008	 *
2009	 * NOTICE OF LICENSE
2010	 *
2011	 * This source file is subject to the Open Software License (OSL 3.0)
2012	 * that is bundled with this package in the file LICENSE.txt.
2013	 * It is also available through the world-wide-web at this URL:
2014	 * http://opensource.org/licenses/osl-3.0.php
2015	 * If you did not receive a copy of the license and are unable to
2016	 * obtain it through the world-wide-web, please send an email
2017	 * to [email protected] so we can send you a copy immediately.
2018	 *
2019	 * DISCLAIMER
2020	 *
2021	 * Do not edit or add to this file if you wish to upgrade PrestaShop to newer
2022	 * versions in the future. If you wish to customize PrestaShop for your
2023	 * needs please refer to http://www.prestashop.com for more information.
2024	 *
2025	 * @author    PrestaShop SA <[email protected]>
2026	 * @copyright 2007-2016 PrestaShop SA
2027	 * @license   http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
2028	 * International Registered Trademark & Property of PrestaShop SA
2029	 */
2030	'use strict';
2031	
2032	Object.defineProperty(exports, '__esModule', {
2033	  value: true
2034	});
2035	
2036	var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
2037	
2038	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
2039	
2040	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
2041	
2042	var _jquery = __webpack_require__(2);
2043	
2044	var _jquery2 = _interopRequireDefault(_jquery);
2045	
2046	var Payment = (function () {
2047	  function Payment() {
2048	    _classCallCheck(this, Payment);
2049	
2050	    this.confirmationSelector = '#payment-confirmation';
2051	    this.paymentSelector = '#payment-section';
2052	    this.conditionsSelector = '#conditions-to-approve';
2053	    this.conditionAlertSelector = '.js-alert-payment-conditions';
2054	    this.additionalInformatonSelector = '.js-additional-information';
2055	    this.optionsForm = '.js-payment-option-form';
2056	  }
2057	
2058	  _createClass(Payment, [{
2059	    key: 'init',
2060	    value: function init() {
2061	      (0, _jquery2['default'])(this.paymentSelector + ' input[type="checkbox"][disabled]').attr('disabled', false);
2062	
2063	      var $body = (0, _jquery2['default'])('body');
2064	
2065	      $body.on('change', this.conditionsSelector + ' input[type="checkbox"]', _jquery2['default'].proxy(this.toggleOrderButton, this));
2066	      $body.on('change', 'input[name="payment-option"]', _jquery2['default'].proxy(this.toggleOrderButton, this));
2067	      $body.on('click', this.confirmationSelector + ' button', _jquery2['default'].proxy(this.confirm, this));
2068	
2069	      this.collapseOptions();
2070	    }
2071	  }, {
2072	    key: 'collapseOptions',
2073	    value: function collapseOptions() {
2074	      (0, _jquery2['default'])(this.additionalInformatonSelector + ', ' + this.optionsForm).hide();
2075	    }
2076	  }, {
2077	    key: 'getSelectedOption',
2078	    value: function getSelectedOption() {
2079	      return (0, _jquery2['default'])('input[name="payment-option"]:checked').attr('id');
2080	    }
2081	  }, {
2082	    key: 'hideConfirmation',
2083	    value: function hideConfirmation() {
2084	      (0, _jquery2['default'])(this.confirmationSelector).hide();
2085	    }
2086	  }, {
2087	    key: 'showConfirmation',
2088	    value: function showConfirmation() {
2089	      (0, _jquery2['default'])(this.confirmationSelector).show();
2090	    }
2091	  }, {
2092	    key: 'toggleOrderButton',
2093	    value: function toggleOrderButton() {
2094	      var show = true;
2095	      (0, _jquery2['default'])(this.conditionsSelector + ' input[type="checkbox"]').each(function (_, checkbox) {
2096	        if (!checkbox.checked) {
2097	          show = false;
2098	        }
2099	      });
2100	
2101	      this.collapseOptions();
2102	
2103	      var selectedOption = this.getSelectedOption();
2104	      if (!selectedOption) {
2105	        show = false;
2106	      }
2107	
2108	      (0, _jquery2['default'])('#' + selectedOption + '-additional-information').show();
2109	      (0, _jquery2['default'])('#pay-with-' + selectedOption + '-form').show();
2110	
2111	      (0, _jquery2['default'])('.js-payment-binary').hide();
2112	      if ((0, _jquery2['default'])('#' + selectedOption).hasClass('binary')) {
2113	        var paymentOption = this.getPaymentOptionSelector(selectedOption);
2114	        this.hideConfirmation();
2115	        (0, _jquery2['default'])(paymentOption).show();
2116	
2117	        if (show) {
2118	          (0, _jquery2['default'])(paymentOption).removeClass('disabled');
2119	        } else {
2120	          (0, _jquery2['default'])(paymentOption).addClass('disabled');
2121	        }
2122	      } else {
2123	        this.showConfirmation();
2124	        (0, _jquery2['default'])(this.confirmationSelector + ' button').attr('disabled', !show);
2125	
2126	        if (show) {
2127	          (0, _jquery2['default'])(this.conditionAlertSelector).hide();
2128	        } else {
2129	          (0, _jquery2['default'])(this.conditionAlertSelector).show();
2130	        }
2131	      }
2132	    }
2133	  }, {
2134	    key: 'getPaymentOptionSelector',
2135	    value: function getPaymentOptionSelector(option) {
2136	      var moduleName = (0, _jquery2['default'])('#' + option).data('module-name');
2137	
2138	      return '.js-payment-' + moduleName;
2139	    }
2140	  }, {
2141	    key: 'confirm',
2142	    value: function confirm() {
2143	      var option = this.getSelectedOption();
2144	      if (option) {
2145	        (0, _jquery2['default'])('#pay-with-' + option + '-form form').submit();
2146	      }
2147	    }
2148	  }]);
2149	
2150	  return Payment;
2151	})();
2152	
2153	exports['default'] = function () {
2154	  var payment = new Payment();
2155	  payment.init();
2156	
2157	  return payment;
2158	};
2159	
2160	module.exports = exports['default'];
2161
2162/***/ },
2163/* 7 */
2164/***/ function(module, exports, __webpack_require__) {
2165
2166	/**
2167	 * 2007-2016 PrestaShop
2168	 *
2169	 * NOTICE OF LICENSE
2170	 *
2171	 * This source file is subject to the Open Software License (OSL 3.0)
2172	 * that is bundled with this package in the file LICENSE.txt.
2173	 * It is also available through the world-wide-web at this URL:
2174	 * http://opensource.org/licenses/osl-3.0.php
2175	 * If you did not receive a copy of the license and are unable to
2176	 * obtain it through the world-wide-web, please send an email
2177	 * to [email protected] so we can send you a copy immediately.
2178	 *
2179	 * DISCLAIMER
2180	 *
2181	 * Do not edit or add to this file if you wish to upgrade PrestaShop to newer
2182	 * versions in the future. If you wish to customize PrestaShop for your
2183	 * needs please refer to http://www.prestashop.com for more information.
2184	 *
2185	 * @author    PrestaShop SA <[email protected]>
2186	 * @copyright 2007-2016 PrestaShop SA
2187	 * @license   http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
2188	 * International Registered Trademark & Property of PrestaShop SA
2189	 */
2190	'use strict';
2191	
2192	Object.defineProperty(exports, '__esModule', {
2193	  value: true
2194	});
2195	
2196	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
2197	
2198	var _jquery = __webpack_require__(2);
2199	
2200	var _jquery2 = _interopRequireDefault(_jquery);
2201	
2202	var _prestashop = __webpack_require__(4);
2203	
2204	var _prestashop2 = _interopRequireDefault(_prestashop);
2205	
2206	exports['default'] = function () {
2207	  var $body = (0, _jquery2['default'])('body');
2208	  var deliveryFormSelector = '#js-delivery';
2209	  var summarySelector = '#js-checkout-summary';
2210	  var deliveryStepSelector = '#checkout-delivery-step';
2211	  var editDeliveryButtonSelector = '.js-edit-delivery';
2212	
2213	  var updateDeliveryForm = function updateDeliveryForm(event) {
2214	    var $deliveryMethodForm = (0, _jquery2['default'])(deliveryFormSelector);
2215	    var requestData = $deliveryMethodForm.serialize();
2216	    var $inputChecked = (0, _jquery2['default'])(event.currentTarget);
2217	    var $newDeliveryOption = $inputChecked.parents("div.delivery-option");
2218	
2219	    _jquery2['default'].post($deliveryMethodForm.data('url-update'), requestData).then(function (resp) {
2220	      (0, _jquery2['default'])(summarySelector).replaceWith(resp.preview);
2221	      _prestashop2['default'].emit('updatedDeliveryForm', { dataForm: $deliveryMethodForm.serializeArray(), deliveryOption: $newDeliveryOption });
2222	    }).fail(function (resp) {
2223	      _prestashop2['default'].trigger('handleError', { eventType: 'updateDeliveryOptions', resp: resp });
2224	    });
2225	  };
2226	
2227	  $body.on('change', deliveryFormSelector + ' input', updateDeliveryForm);
2228	
2229	  $body.on('click', editDeliveryButtonSelector, function (event) {
2230	    event.stopPropagation();
2231	    (0, _jquery2['default'])(deliveryStepSelector).trigger('click');
2232	    _prestashop2['default'].emit('editDelivery');
2233	  });
2234	};
2235	
2236	module.exports = exports['default'];
2237
2238/***/ },
2239/* 8 */
2240/***/ function(module, exports, __webpack_require__) {
2241
2242	/**
2243	 * 2007-2016 PrestaShop
2244	 *
2245	 * NOTICE OF LICENSE
2246	 *
2247	 * This source file is subject to the Open Software License (OSL 3.0)
2248	 * that is bundled with this package in the file LICENSE.txt.
2249	 * It is also available through the world-wide-web at this URL:
2250	 * http://opensource.org/licenses/osl-3.0.php
2251	 * If you did not receive a copy of the license and are unable to
2252	 * obtain it through the world-wide-web, please send an email
2253	 * to [email protected] so we can send you a copy immediately.
2254	 *
2255	 * DISCLAIMER
2256	 *
2257	 * Do not edit or add to this file if you wish to upgrade PrestaShop to newer
2258	 * versions in the future. If you wish to customize PrestaShop for your
2259	 * needs please refer to http://www.prestashop.com for more information.
2260	 *
2261	 * @author    PrestaShop SA <[email protected]>
2262	 * @copyright 2007-2016 PrestaShop SA
2263	 * @license   http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
2264	 * International Registered Trademark & Property of PrestaShop SA
2265	 */
2266	'use strict';
2267	
2268	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
2269	
2270	var _jquery = __webpack_require__(2);
2271	
2272	var _jquery2 = _interopRequireDefault(_jquery);
2273	
2274	var pendingQuery = false;
2275	
2276	function updateResults(data) {
2277	    pendingQuery = false;
2278	    prestashop.emit('updateProductList', data);
2279	    window.history.pushState(data, undefined, data.current_url);
2280	}
2281	
2282	function handleError() {
2283	    // TODO: feedback
2284	    pendingQuery = false;
2285	}
2286	
2287	function makeQuery(url) {
2288	    if (pendingQuery) {
2289	        // wait for current results
2290	    } else {
2291	
2292	            // We need to add a parameter to the URL
2293	            // to make it different from the one we're on,
2294	            // otherwise when you do "duplicate tab" under chrome
2295	            // it mixes up the cache between the AJAX request (that
2296	            // returns JSON) and the non-AJAX request (that returns
2297	            // HTML) and you just get a mess of JSON on the duplicated tab.
2298	
2299	            var slightlyDifferentURL = [url, url.indexOf('?') >= 0 ? '&' : '?', 'from-xhr'].join('');
2300	
2301	            _jquery2['default'].get(slightlyDifferentURL, null, null, 'json').then(updateResults).fail(handleError);
2302	        }
2303	}
2304	
2305	(0, _jquery2['default'])(document).ready(function () {
2306	    prestashop.on('updateFacets', function (param) {
2307	        makeQuery(param);
2308	    });
2309	});
2310
2311/***/ },
2312/* 9 */
2313/***/ function(module, exports, __webpack_require__) {
2314
2315	/**
2316	 * 2007-2016 PrestaShop
2317	 *
2318	 * NOTICE OF LICENSE
2319	 *
2320	 * This source file is subject to the Open Software License (OSL 3.0)
2321	 * that is bundled with this package in the file LICENSE.txt.
2322	 * It is also available through the world-wide-web at this URL:
2323	 * http://opensource.org/licenses/osl-3.0.php
2324	 * If you did not receive a copy of the license and are unable to
2325	 * obtain it through the world-wide-web, please send an email
2326	 * to [email protected] so we can send you a copy immediately.
2327	 *
2328	 * DISCLAIMER
2329	 *
2330	 * Do not edit or add to this file if you wish to upgrade PrestaShop to newer
2331	 * versions in the future. If you wish to customize PrestaShop for your
2332	 * needs please refer to http://www.prestashop.com for more information.
2333	 *
2334	 * @author    PrestaShop SA <[email protected]>
2335	 * @copyright 2007-2016 PrestaShop SA
2336	 * @license   http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
2337	 * International Registered Trademark & Property of PrestaShop SA
2338	 */
2339	'use strict';
2340	
2341	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
2342	
2343	var _jquery = __webpack_require__(2);
2344	
2345	var _jquery2 = _interopRequireDefault(_jquery);
2346	
2347	var _prestashop = __webpack_require__(4);
2348	
2349	var _prestashop2 = _interopRequireDefault(_prestashop);
2350	
2351	(0, _jquery2['default'])(document).ready(function () {
2352	  (0, _jquery2['default'])('body').on('click', '.quick-view', function (event) {
2353	    _prestashop2['default'].emit('clickQuickView', {
2354	      dataset: (0, _jquery2['default'])(event.target).closest('.js-product-miniature').data()
2355	    });
2356	    event.preventDefault();
2357	  });
2358	});
2359
2360/***/ },
2361/* 10 */
2362/***/ function(module, exports, __webpack_require__) {
2363
2364	/**
2365	 * 2007-2016 PrestaShop
2366	 *
2367	 * NOTICE OF LICENSE
2368	 *
2369	 * This source file is subject to the Open Software License (OSL 3.0)
2370	 * that is bundled with this package in the file LICENSE.txt.
2371	 * It is also available through the world-wide-web at this URL:
2372	 * http://opensource.org/licenses/osl-3.0.php
2373	 * If you did not receive a copy of the license and are unable to
2374	 * obtain it through the world-wide-web, please send an email
2375	 * to [email protected] so we can send you a copy immediately.
2376	 *
2377	 * DISCLAIMER
2378	 *
2379	 * Do not edit or add to this file if you wish to upgrade PrestaShop to newer
2380	 * versions in the future. If you wish to customize PrestaShop for your
2381	 * needs please refer to http://www.prestashop.com for more information.
2382	 *
2383	 * @author    PrestaShop SA <[email protected]>
2384	 * @copyright 2007-2016 PrestaShop SA
2385	 * @license   http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
2386	 * International Registered Trademark & Property of PrestaShop SA
2387	 */
2388	'use strict';
2389	
2390	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
2391	
2392	var _jquery = __webpack_require__(2);
2393	
2394	var _jquery2 = _interopRequireDefault(_jquery);
2395	
2396	var _prestashop = __webpack_require__(4);
2397	
2398	var _prestashop2 = _interopRequireDefault(_prestashop);
2399	
2400	(0, _jquery2['default'])(document).ready(function () {
2401	  (0, _jquery2['default'])('body').on('change', '.product-variants [data-product-attribute]', function () {
2402	    (0, _jquery2['default'])("input[name$='refresh']").click();
2403	  });
2404	
2405	  (0, _jquery2['default'])('body').on('click', '.product-refresh', function (event, extraParameters) {
2406	    var $productRefresh = (0, _jquery2['default'])(this);
2407	    event.preventDefault();
2408	
2409	    var eventType = 'updatedProductCombination';
2410	    if (typeof extraParameters !== 'undefined' && extraParameters.eventType) {
2411	      eventType = extraParameters.eventType;
2412	    }
2413	
2414	    var query = (0, _jquery2['default'])(event.target.form).serialize() + '&ajax=1&action=productrefresh';
2415	    var actionURL = (0, _jquery2['default'])(event.target.form).attr('action');
2416	
2417	    _jquery2['default'].post(actionURL, query, null, 'json').then(function (resp) {
2418	      _prestashop2['default'].emit('updateProduct', {
2419	        reason: {
2420	          productUrl: resp.productUrl
2421	        },
2422	        refreshUrl: $productRefresh.data('url-update'),
2423	        eventType: eventType
2424	      });
2425	    });
2426	  });
2427	
2428	  _prestashop2['default'].on('updateProduct', function (event) {
2429	    if (typeof event.refreshUrl == "undefined") {
2430	      event.refreshUrl = true;
2431	    }
2432	
2433	    var eventType = event.eventType;
2434	
2435	    var replaceAddToCartSections = function replaceAddToCartSections(addCartHtml) {
2436	      var $addToCartSnippet = (0, _jquery2['default'])(addCartHtml);
2437	      var $addProductToCart = (0, _jquery2['default'])('.product-add-to-cart');
2438	
2439	      function replaceAddToCartSection(replacement) {
2440	        var replace = replacement.$addToCartSnippet.find(replacement.targetSelector);
2441	
2442	        if ((0, _jquery2['default'])(replacement.$targetParent.find(replacement.targetSelector)).length > 0) {
2443	          if (replace.length > 0) {
2444	            (0, _jquery2['default'])(replacement.$targetParent.find(replacement.targetSelector)).replaceWith(replace[0].outerHTML);
2445	          } else {
2446	            (0, _jquery2['default'])(replacement.$targetParent.find(replacement.targetSelector)).html('');
2447	          }
2448	        }
2449	      }
2450	
2451	      var productAvailabilitySelector = '.add';
2452	      replaceAddToCartSection({
2453	        $addToCartSnippet: $addToCartSnippet,
2454	        $targetParent: $addProductToCart,
2455	        targetSelector: productAvailabilitySelector
2456	      });
2457	
2458	      var productMinimalQuantitySelector = '.product-minimal-quantity';
2459	      replaceAddToCartSection({
2460	        $addToCartSnippet: $addToCartSnippet,
2461	        $targetParent: $addProductToCart,
2462	        targetSelector: productMinimalQuantitySelector
2463	      });
2464	    };
2465	
2466	    _jquery2['default'].post(event.reason.productUrl, { ajax: '1', action: 'refresh' }, null, 'json').then(function (resp) {
2467	      (0, _jquery2['default'])('.product-prices').replaceWith(resp.product_prices);
2468	      (0, _jquery2['default'])('.product-customization').replaceWith(resp.product_customization);
2469	      (0, _jquery2['default'])('.product-variants').replaceWith(resp.product_variants);
2470	      (0, _jquery2['default'])('.product-discounts').replaceWith(resp.product_discounts);
2471	      (0, _jquery2['default'])('.images-container').replaceWith(resp.product_cover_thumbnails);
2472	      (0, _jquery2['default'])('#product-details').replaceWith(resp.product_details);
2473	
2474	      // Replace all "add to cart" sections but the quantity input in order to keep quantity field intact i.e.
2475	      // Prevent quantity input from blinking with classic theme.
2476	      var $productAddToCart = undefined;
2477	      (0, _jquery2['default'])(resp.product_add_to_cart).each(function (index, value) {
2478	        if ((0, _jquery2['default'])(value).hasClass('product-add-to-cart')) {
2479	          $productAddToCart = (0, _jquery2['default'])(value);
2480	        }
2481	      });
2482	      replaceAddToCartSections($productAddToCart);
2483	
2484	      var minimalProductQuantity = parseInt(resp.product_minimal_quantity, 10);
2485	      var quantityInputSelector = '#quantity_wanted';
2486	      var quantityInput = (0, _jquery2['default'])(quantityInputSelector);
2487	      var quantity_wanted = quantityInput.val();
2488	
2489	      if (!isNaN(minimalProductQuantity) && quantity_wanted < minimalProductQuantity && eventType !== 'updatedProductQuantity') {
2490	        quantityInput.attr('min', minimalProductQuantity);
2491	        quantityInput.val(minimalProductQuantity);
2492	      }
2493	
2494	      if (event.refreshUrl) {
2495	        window.history.pushState({ id_product_attribute: resp.id_product_attribute }, undefined, resp.product_url);
2496	      }
2497	
2498	      _prestashop2['default'].emit('updatedProduct', resp);
2499	    });
2500	  });
2501	});
2502
2503/***/ },
2504/* 11 */
2505/***/ function(module, exports, __webpack_require__) {
2506
2507	'use strict';
2508	
2509	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
2510	
2511	var _jquery = __webpack_require__(2);
2512	
2513	var _jquery2 = _interopRequireDefault(_jquery);
2514	
2515	var _prestashop = __webpack_require__(4);
2516	
2517	var _prestashop2 = _interopRequireDefault(_prestashop);
2518	
2519	/**
2520	 * Update address form on country change
2521	 * Emit "addressFormUpdated" event
2522	 *
2523	 * @param selectors
2524	 */
2525	function handleCountryChange(selectors) {
2526	  (0, _jquery2['default'])('body').on('change', selectors.country, function () {
2527	    var requestData = {
2528	      id_country: (0, _jquery2['default'])(selectors.country).val(),
2529	      id_address: (0, _jquery2['default'])(selectors.address + ' form').data('id-address')
2530	    };
2531	    var getFormViewUrl = (0, _jquery2['default'])(selectors.address + ' form').data('refresh-url');
2532	    var formFieldsSelector = selectors.address + ' input';
2533	
2534	    _jquery2['default'].post(getFormViewUrl, requestData).then(function (resp) {
2535	      var inputs = [];
2536	
2537	      // Store fields values before updating form
2538	      (0, _jquery2['default'])(formFieldsSelector).each(function () {
2539	        inputs[(0, _jquery2['default'])(this).prop('name')] = (0, _jquery2['default'])(this).val();
2540	      });
2541	
2542	      (0, _jquery2['default'])(selectors.address).replaceWith(resp.address_form);
2543	
2544	      // Restore fields values
2545	      (0, _jquery2['default'])(formFieldsSelector).each(function () {
2546	        (0, _jquery2['default'])(this).val(inputs[(0, _jquery2['default'])(this).prop('name')]);
2547	      });
2548	
2549	      _prestashop2['default'].emit('updatedAddressForm', { target: (0, _jquery2['default'])(selectors.address) });
2550	    }).fail(function (resp) {
2551	      _prestashop2['default'].emit('handleError', { eventType: 'updateAddressForm', resp: resp });
2552	    });
2553	  });
2554	}
2555	
2556	(0, _jquery2['default'])(document).ready(function () {
2557	  handleCountryChange({
2558	    'country': '.js-country',
2559	    'address': '.js-address-form'
2560	  });
2561	});
2562
2563/***/ },
2564/* 12 */
vendor: 4,294 bytes, lines 2565-2681
2565/***/ function(module, exports) {
2566
2567	// Copyright Joyent, Inc. and other Node contributors.
2568	//
2569	// Permission is hereby granted, free of charge, to any person obtaining a
2570	// copy of this software and associated documentation files (the
2571	// "Software"), to deal in the Software without restriction, including
2572	// without limitation the rights to use, copy, modify, merge, publish,
2573	// distribute, sublicense, and/or sell copies of the Software, and to permit
2574	// persons to whom the Software is furnished to do so, subject to the
2575	// following conditions:
2576	//
2577	// The above copyright notice and this permission notice shall be included
2578	// in all copies or substantial portions of the Software.
2579	//
2580	// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
2581	// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
2582	// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
2583	// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
2584	// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
2585	// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
2586	// USE OR OTHER DEALINGS IN THE SOFTWARE.
2587	
2588	'use strict';
2589	
2590	function EventEmitter() {
2591	  this._events = this._events || {};
2592	  this._maxListeners = this._maxListeners || undefined;
2593	}
2594	module.exports = EventEmitter;
2595	
2596	// Backwards-compat with node 0.10.x
2597	EventEmitter.EventEmitter = EventEmitter;
2598	
2599	EventEmitter.prototype._events = undefined;
2600	EventEmitter.prototype._maxListeners = undefined;
2601	
2602	// By default EventEmitters will print a warning if more than 10 listeners are
2603	// added to it. This is a useful default which helps finding memory leaks.
2604	EventEmitter.defaultMaxListeners = 10;
2605	
2606	// Obviously not all Emitters should be limited to 10. This function allows
2607	// that to be increased. Set to zero for unlimited.
2608	EventEmitter.prototype.setMaxListeners = function (n) {
2609	  if (!isNumber(n) || n < 0 || isNaN(n)) throw TypeError('n must be a positive number');
2610	  this._maxListeners = n;
2611	  return this;
2612	};
2613	
2614	EventEmitter.prototype.emit = function (type) {
2615	  var er, handler, len, args, i, listeners;
2616	
2617	  if (!this._events) this._events = {};
2618	
2619	  // If there is no 'error' event listener then throw.
2620	  if (type === 'error') {
2621	    if (!this._events.error || isObject(this._events.error) && !this._events.error.length) {
2622	      er = arguments[1];
2623	      if (er instanceof Error) {
2624	        throw er; // Unhandled 'error' event
2625	      } else {
2626	          // At least give some kind of context to the user
2627	          var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
2628	          err.context = er;
2629	          throw err;
2630	        }
2631	    }
2632	  }
2633	
2634	  handler = this._events[type];
2635	
2636	  if (isUndefined(handler)) return false;
2637	
2638	  if (isFunction(handler)) {
2639	    switch (arguments.length) {
2640	      // fast cases
2641	      case 1:
2642	        handler.call(this);
2643	        break;
2644	      case 2:
2645	        handler.call(this, arguments[1]);
2646	        break;
2647	      case 3:
2648	        handler.call(this, arguments[1], arguments[2]);
2649	        break;
2650	      // slower
2651	      default:
2652	        args = Array.prototype.slice.call(arguments, 1);
2653	        handler.apply(this, args);
2654	    }
2655	  } else if (isObject(handler)) {
2656	    args = Array.prototype.slice.call(arguments, 1);
2657	    listeners = handler.slice();
2658	    len = listeners.length;
2659	    for (i = 0; i < len; i++) listeners[i].apply(this, args);
2660	  }
2661	
2662	  return true;
2663	};
2664	
2665	EventEmitter.prototype.addListener = function (type, listener) {
2666	  var m;
2667	
2668	  if (!isFunction(listener)) throw TypeError('listener must be a function');
2669	
2670	  if (!this._events) this._events = {};
2671	
2672	  // To avoid recursion in the case that type === "newListener"! Before
2673	  // adding it to the listeners, first emit "newListener".
2674	  if (this._events.newListener) this.emit('newListener', type, isFunction(listener.listener) ? listener.listener : listener);
2675	
2676	  if (!this._events[type])
2677	    // Optimize the case of one listener. Don't need the extra array object.
2678	    this._events[type] = listener;else if (isObject(this._events[type]))
2679	    // If we've already got an array, just append.
2680	    this._events[type].push(listener);else
2681	    // Adding the second element, need to change to array.
vendor: 4,329 bytes, lines 2682-2844
2682	    this._events[type] = [this._events[type], listener];
2683	
2684	  // Check for listener leak
2685	  if (isObject(this._events[type]) && !this._events[type].warned) {
2686	    if (!isUndefined(this._maxListeners)) {
2687	      m = this._maxListeners;
2688	    } else {
2689	      m = EventEmitter.defaultMaxListeners;
2690	    }
2691	
2692	    if (m && m > 0 && this._events[type].length > m) {
2693	      this._events[type].warned = true;
2694	      console.error('(node) warning: possible EventEmitter memory ' + 'leak detected. %d listeners added. ' + 'Use emitter.setMaxListeners() to increase limit.', this._events[type].length);
2695	      if (typeof console.trace === 'function') {
2696	        // not supported in IE 10
2697	        console.trace();
2698	      }
2699	    }
2700	  }
2701	
2702	  return this;
2703	};
2704	
2705	EventEmitter.prototype.on = EventEmitter.prototype.addListener;
2706	
2707	EventEmitter.prototype.once = function (type, listener) {
2708	  if (!isFunction(listener)) throw TypeError('listener must be a function');
2709	
2710	  var fired = false;
2711	
2712	  function g() {
2713	    this.removeListener(type, g);
2714	
2715	    if (!fired) {
2716	      fired = true;
2717	      listener.apply(this, arguments);
2718	    }
2719	  }
2720	
2721	  g.listener = listener;
2722	  this.on(type, g);
2723	
2724	  return this;
2725	};
2726	
2727	// emits a 'removeListener' event iff the listener was removed
2728	EventEmitter.prototype.removeListener = function (type, listener) {
2729	  var list, position, length, i;
2730	
2731	  if (!isFunction(listener)) throw TypeError('listener must be a function');
2732	
2733	  if (!this._events || !this._events[type]) return this;
2734	
2735	  list = this._events[type];
2736	  length = list.length;
2737	  position = -1;
2738	
2739	  if (list === listener || isFunction(list.listener) && list.listener === listener) {
2740	    delete this._events[type];
2741	    if (this._events.removeListener) this.emit('removeListener', type, listener);
2742	  } else if (isObject(list)) {
2743	    for (i = length; i-- > 0;) {
2744	      if (list[i] === listener || list[i].listener && list[i].listener === listener) {
2745	        position = i;
2746	        break;
2747	      }
2748	    }
2749	
2750	    if (position < 0) return this;
2751	
2752	    if (list.length === 1) {
2753	      list.length = 0;
2754	      delete this._events[type];
2755	    } else {
2756	      list.splice(position, 1);
2757	    }
2758	
2759	    if (this._events.removeListener) this.emit('removeListener', type, listener);
2760	  }
2761	
2762	  return this;
2763	};
2764	
2765	EventEmitter.prototype.removeAllListeners = function (type) {
2766	  var key, listeners;
2767	
2768	  if (!this._events) return this;
2769	
2770	  // not listening for removeListener, no need to emit
2771	  if (!this._events.removeListener) {
2772	    if (arguments.length === 0) this._events = {};else if (this._events[type]) delete this._events[type];
2773	    return this;
2774	  }
2775	
2776	  // emit removeListener for all listeners on all events
2777	  if (arguments.length === 0) {
2778	    for (key in this._events) {
2779	      if (key === 'removeListener') continue;
2780	      this.removeAllListeners(key);
2781	    }
2782	    this.removeAllListeners('removeListener');
2783	    this._events = {};
2784	    return this;
2785	  }
2786	
2787	  listeners = this._events[type];
2788	
2789	  if (isFunction(listeners)) {
2790	    this.removeListener(type, listeners);
2791	  } else if (listeners) {
2792	    // LIFO order
2793	    while (listeners.length) this.removeListener(type, listeners[listeners.length - 1]);
2794	  }
2795	  delete this._events[type];
2796	
2797	  return this;
2798	};
2799	
2800	EventEmitter.prototype.listeners = function (type) {
2801	  var ret;
2802	  if (!this._events || !this._events[type]) ret = [];else if (isFunction(this._events[type])) ret = [this._events[type]];else ret = this._events[type].slice();
2803	  return ret;
2804	};
2805	
2806	EventEmitter.prototype.listenerCount = function (type) {
2807	  if (this._events) {
2808	    var evlistener = this._events[type];
2809	
2810	    if (isFunction(evlistener)) return 1;else if (evlistener) return evlistener.length;
2811	  }
2812	  return 0;
2813	};
2814	
2815	EventEmitter.listenerCount = function (emitter, type) {
2816	  return emitter.listenerCount(type);
2817	};
2818	
2819	function isFunction(arg) {
2820	  return typeof arg === 'function';
2821	}
2822	
2823	function isNumber(arg) {
2824	  return typeof arg === 'number';
2825	}
2826	
2827	function isObject(arg) {
2828	  return typeof arg === 'object' && arg !== null;
2829	}
2830	
2831	function isUndefined(arg) {
2832	  return arg === void 0;
2833	}
2834
2835/***/ },
2836/* 13 */
2837/***/ function(module, exports, __webpack_require__) {
2838
2839	/**
2840	 * 2007-2016 PrestaShop
2841	 *
2842	 * NOTICE OF LICENSE
2843	 *
2844	 * This source file is subject to the Open Software License (OSL 3.0)
2845	 * that is bundled with this package in the file LICENSE.txt.
2846	 * It is also available through the world-wide-web at this URL:
2847	 * http://opensource.org/licenses/osl-3.0.php
2848	 * If you did not receive a copy of the license and are unable to
2849	 * obtain it through the world-wide-web, please send an email
2850	 * to [email protected] so we can send you a copy immediately.
2851	 *
2852	 * DISCLAIMER
2853	 *
2854	 * Do not edit or add to this file if you wish to upgrade PrestaShop to newer
2855	 * versions in the future. If you wish to customize PrestaShop for your
2856	 * needs please refer to http://www.prestashop.com for more information.
2857	 *
2858	 * @author    PrestaShop SA <[email protected]>
2859	 * @copyright 2007-2016 PrestaShop SA
2860	 * @license   http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
2861	 * International Registered Trademark & Property of PrestaShop SA
2862	 */
2863	'use strict';
2864	
2865	Object.defineProperty(exports, '__esModule', {
2866	  value: true
2867	});
2868	exports.psShowHide = psShowHide;
2869	
2870	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
2871	
2872	var _jquery = __webpack_require__(2);
2873	
2874	var _jquery2 = _interopRequireDefault(_jquery);
2875	
2876	function psShowHide() {
2877	  (0, _jquery2['default'])('.ps-shown-by-js').show();
2878	  (0, _jquery2['default'])('.ps-hidden-by-js').hide();
2879	}
2880
2881/***/ }
2882/******/ ]);
2883//# sourceMappingURL=core.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.