diff --git a/node_modules/jquery/src/.eslintrc.json b/node_modules/jquery/src/.eslintrc.json
deleted file mode 100644
index 3d0ca18..0000000
--- a/node_modules/jquery/src/.eslintrc.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-	"root": true,
-
-	"extends": "../.eslintrc-browser.json",
-
-	"overrides": [
-		{
-			"files": "wrapper.js",
-			"globals": {
-				"jQuery": false
-			}
-		}
-	]
-}
diff --git a/node_modules/jquery/src/ajax.js b/node_modules/jquery/src/ajax.js
index 4cbefab..d1bebd5 100644
--- a/node_modules/jquery/src/ajax.js
+++ b/node_modules/jquery/src/ajax.js
@@ -8,7 +8,7 @@
 	"./ajax/var/rquery",
 
 	"./core/init",
-	"./ajax/parseXML",
+	"./core/parseXML",
 	"./event/trigger",
 	"./deferred",
 	"./serialize" // jQuery.param
@@ -610,7 +610,8 @@
 			// Add or update anti-cache param if needed
 			if ( s.cache === false ) {
 				cacheURL = cacheURL.replace( rantiCache, "$1" );
-				uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
+				uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) +
+					uncached;
 			}
 
 			// Put hash and anti-cache on the URL that will be requested (gh-1732)
@@ -743,6 +744,11 @@
 				response = ajaxHandleResponses( s, jqXHR, responses );
 			}
 
+			// Use a noop converter for missing script
+			if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) {
+				s.converters[ "text script" ] = function() {};
+			}
+
 			// Convert no matter what (that way responseXXX fields are always set)
 			response = ajaxConvert( s, response, jqXHR, isSuccess );
 
@@ -833,7 +839,7 @@
 	}
 } );
 
-jQuery.each( [ "get", "post" ], function( i, method ) {
+jQuery.each( [ "get", "post" ], function( _i, method ) {
 	jQuery[ method ] = function( url, data, callback, type ) {
 
 		// Shift arguments if data argument was omitted
@@ -854,5 +860,14 @@
 	};
 } );
 
+jQuery.ajaxPrefilter( function( s ) {
+	var i;
+	for ( i in s.headers ) {
+		if ( i.toLowerCase() === "content-type" ) {
+			s.contentType = s.headers[ i ] || "";
+		}
+	}
+} );
+
 return jQuery;
 } );
diff --git a/node_modules/jquery/src/ajax/jsonp.js b/node_modules/jquery/src/ajax/jsonp.js
index 28ae036..10186de 100644
--- a/node_modules/jquery/src/ajax/jsonp.js
+++ b/node_modules/jquery/src/ajax/jsonp.js
@@ -15,7 +15,7 @@
 jQuery.ajaxSetup( {
 	jsonp: "callback",
 	jsonpCallback: function() {
-		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
+		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) );
 		this[ callback ] = true;
 		return callback;
 	}
diff --git a/node_modules/jquery/src/ajax/var/nonce.js b/node_modules/jquery/src/ajax/var/nonce.js
index 33d0cff..c0e4472 100644
--- a/node_modules/jquery/src/ajax/var/nonce.js
+++ b/node_modules/jquery/src/ajax/var/nonce.js
@@ -1,5 +1,5 @@
 define( function() {
 	"use strict";
 
-	return Date.now();
+	return { guid: Date.now() };
 } );
diff --git a/node_modules/jquery/src/attributes/attr.js b/node_modules/jquery/src/attributes/attr.js
index 6b5cbd2..4c43eb1 100644
--- a/node_modules/jquery/src/attributes/attr.js
+++ b/node_modules/jquery/src/attributes/attr.js
@@ -117,7 +117,7 @@
 	}
 };
 
-jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, 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 ) {
diff --git a/node_modules/jquery/src/core.js b/node_modules/jquery/src/core.js
index aeafc70..c1c13f4 100644
--- a/node_modules/jquery/src/core.js
+++ b/node_modules/jquery/src/core.js
@@ -4,10 +4,9 @@
 
 define( [
 	"./var/arr",
-	"./var/document",
 	"./var/getProto",
 	"./var/slice",
-	"./var/concat",
+	"./var/flat",
 	"./var/push",
 	"./var/indexOf",
 	"./var/class2type",
@@ -20,14 +19,14 @@
 	"./var/isWindow",
 	"./core/DOMEval",
 	"./core/toType"
-], function( arr, document, getProto, slice, concat, push, indexOf,
+], function( arr, getProto, slice, flat, push, indexOf,
 	class2type, toString, hasOwn, fnToString, ObjectFunctionString,
 	support, isFunction, isWindow, DOMEval, toType ) {
 
 "use strict";
 
 var
-	version = "3.4.1",
+	version = "3.5.0",
 
 	// Define a local copy of jQuery
 	jQuery = function( selector, context ) {
@@ -35,11 +34,7 @@
 		// The jQuery object is actually just the init constructor 'enhanced'
 		// Need init if jQuery is called (just allow error to be thrown if not included)
 		return new jQuery.fn.init( selector, context );
-	},
-
-	// Support: Android <=4.0 only
-	// Make sure we trim BOM and NBSP
-	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
+	};
 
 jQuery.fn = jQuery.prototype = {
 
@@ -105,6 +100,18 @@
 		return this.eq( -1 );
 	},
 
+	even: function() {
+		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
+			return ( i + 1 ) % 2;
+		} ) );
+	},
+
+	odd: function() {
+		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
+			return i % 2;
+		} ) );
+	},
+
 	eq: function( i ) {
 		var len = this.length,
 			j = +i + ( i < 0 ? len : 0 );
@@ -238,9 +245,10 @@
 		return true;
 	},
 
-	// Evaluates a script in a global context
-	globalEval: function( code, options ) {
-		DOMEval( code, { nonce: options && options.nonce } );
+	// Evaluates a script in a provided context; falls back to the global one
+	// if not specified.
+	globalEval: function( code, options, doc ) {
+		DOMEval( code, { nonce: options && options.nonce }, doc );
 	},
 
 	each: function( obj, callback ) {
@@ -264,13 +272,6 @@
 		return obj;
 	},
 
-	// Support: Android <=4.0 only
-	trim: function( text ) {
-		return text == null ?
-			"" :
-			( text + "" ).replace( rtrim, "" );
-	},
-
 	// results is for internal usage only
 	makeArray: function( arr, results ) {
 		var ret = results || [];
@@ -357,7 +358,7 @@
 		}
 
 		// Flatten any nested arrays
-		return concat.apply( [], ret );
+		return flat( ret );
 	},
 
 	// A global GUID counter for objects
@@ -374,7 +375,7 @@
 
 // Populate the class2type map
 jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
-function( i, name ) {
+function( _i, name ) {
 	class2type[ "[object " + name + "]" ] = name.toLowerCase();
 } );
 
diff --git a/node_modules/jquery/src/core/access.js b/node_modules/jquery/src/core/access.js
index 842c4a4..54bcc74 100644
--- a/node_modules/jquery/src/core/access.js
+++ b/node_modules/jquery/src/core/access.js
@@ -38,7 +38,7 @@
 			// ...except when executing function values
 			} else {
 				bulk = fn;
-				fn = function( elem, key, value ) {
+				fn = function( elem, _key, value ) {
 					return bulk.call( jQuery( elem ), value );
 				};
 			}
diff --git a/node_modules/jquery/src/core/camelCase.js b/node_modules/jquery/src/core/camelCase.js
index 799fb37..b271044 100644
--- a/node_modules/jquery/src/core/camelCase.js
+++ b/node_modules/jquery/src/core/camelCase.js
@@ -7,7 +7,7 @@
 	rdashAlpha = /-([a-z])/g;
 
 // Used by camelCase as callback to replace()
-function fcamelCase( all, letter ) {
+function fcamelCase( _all, letter ) {
 	return letter.toUpperCase();
 }
 
diff --git a/node_modules/jquery/src/ajax/parseXML.js b/node_modules/jquery/src/core/parseXML.js
similarity index 100%
rename from node_modules/jquery/src/ajax/parseXML.js
rename to node_modules/jquery/src/core/parseXML.js
diff --git a/node_modules/jquery/src/css.js b/node_modules/jquery/src/css.js
index ac4c66e..a7a7061 100644
--- a/node_modules/jquery/src/css.js
+++ b/node_modules/jquery/src/css.js
@@ -2,6 +2,7 @@
 	"./core",
 	"./core/access",
 	"./core/camelCase",
+	"./core/nodeName",
 	"./var/rcssNum",
 	"./css/var/rnumnonpx",
 	"./css/var/cssExpand",
@@ -16,7 +17,7 @@
 	"./core/init",
 	"./core/ready",
 	"./selector" // contains
-], function( jQuery, access, camelCase, rcssNum, rnumnonpx, cssExpand,
+], function( jQuery, access, camelCase, nodeName, rcssNum, rnumnonpx, cssExpand,
 	getStyles, swap, curCSS, adjustCSS, addGetHookIf, support, finalPropName ) {
 
 "use strict";
@@ -34,7 +35,7 @@
 		fontWeight: "400"
 	};
 
-function setPositiveNumber( elem, value, subtract ) {
+function setPositiveNumber( _elem, value, subtract ) {
 
 	// Any relative (+/-) values have already been
 	// normalized at this point
@@ -139,17 +140,26 @@
 	}
 
 
-	// Fall back to offsetWidth/offsetHeight when value is "auto"
-	// This happens for inline elements with no explicit setting (gh-3571)
-	// Support: Android <=4.1 - 4.3 only
-	// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
-	// Support: IE 9-11 only
-	// Also use offsetWidth/offsetHeight for when box sizing is unreliable
-	// We use getClientRects() to check for hidden/disconnected.
-	// In those cases, the computed value can be trusted to be border-box
+	// Support: IE 9 - 11 only
+	// Use offsetWidth/offsetHeight for when box sizing is unreliable.
+	// In those cases, the computed value can be trusted to be border-box.
 	if ( ( !support.boxSizingReliable() && isBorderBox ||
+
+		// Support: IE 10 - 11+, Edge 15 - 18+
+		// IE/Edge misreport `getComputedStyle` of table rows with width/height
+		// set in CSS while `offset*` properties report correct values.
+		// Interestingly, in some cases IE 9 doesn't suffer from this issue.
+		!support.reliableTrDimensions() && nodeName( elem, "tr" ) ||
+
+		// Fall back to offsetWidth/offsetHeight when value is "auto"
+		// This happens for inline elements with no explicit setting (gh-3571)
 		val === "auto" ||
+
+		// Support: Android <=4.1 - 4.3 only
+		// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
 		!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&
+
+		// Make sure the element is visible & connected
 		elem.getClientRects().length ) {
 
 		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
@@ -344,7 +354,7 @@
 	}
 } );
 
-jQuery.each( [ "height", "width" ], function( i, dimension ) {
+jQuery.each( [ "height", "width" ], function( _i, dimension ) {
 	jQuery.cssHooks[ dimension ] = {
 		get: function( elem, computed, extra ) {
 			if ( computed ) {
diff --git a/node_modules/jquery/src/css/support.js b/node_modules/jquery/src/css/support.js
index 9c4da57..fb2a1b2 100644
--- a/node_modules/jquery/src/css/support.js
+++ b/node_modules/jquery/src/css/support.js
@@ -60,7 +60,7 @@
 	}
 
 	var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
-		reliableMarginLeftVal,
+		reliableTrDimensionsVal, reliableMarginLeftVal,
 		container = document.createElement( "div" ),
 		div = document.createElement( "div" );
 
@@ -95,6 +95,35 @@
 		scrollboxSize: function() {
 			computeStyleTests();
 			return scrollboxSizeVal;
+		},
+
+		// Support: IE 9 - 11+, Edge 15 - 18+
+		// IE/Edge misreport `getComputedStyle` of table rows with width/height
+		// set in CSS while `offset*` properties report correct values.
+		// Behavior in IE 9 is more subtle than in newer versions & it passes
+		// some versions of this test; make sure not to make it pass there!
+		reliableTrDimensions: function() {
+			var table, tr, trChild, trStyle;
+			if ( reliableTrDimensionsVal == null ) {
+				table = document.createElement( "table" );
+				tr = document.createElement( "tr" );
+				trChild = document.createElement( "div" );
+
+				table.style.cssText = "position:absolute;left:-11111px";
+				tr.style.height = "1px";
+				trChild.style.height = "9px";
+
+				documentElement
+					.appendChild( table )
+					.appendChild( tr )
+					.appendChild( trChild );
+
+				trStyle = window.getComputedStyle( tr );
+				reliableTrDimensionsVal = parseInt( trStyle.height ) > 3;
+
+				documentElement.removeChild( table );
+			}
+			return reliableTrDimensionsVal;
 		}
 	} );
 } )();
diff --git a/node_modules/jquery/src/css/var/swap.js b/node_modules/jquery/src/css/var/swap.js
index 1a9556b..69388e5 100644
--- a/node_modules/jquery/src/css/var/swap.js
+++ b/node_modules/jquery/src/css/var/swap.js
@@ -3,7 +3,7 @@
 "use strict";
 
 // A method for quickly swapping in/out CSS properties to get correct calculations.
-return function( elem, options, callback, args ) {
+return function( elem, options, callback ) {
 	var ret, name,
 		old = {};
 
@@ -13,7 +13,7 @@
 		elem.style[ name ] = options[ name ];
 	}
 
-	ret = callback.apply( elem, args || [] );
+	ret = callback.call( elem );
 
 	// Revert the old values
 	for ( name in options ) {
diff --git a/node_modules/jquery/src/data/Data.js b/node_modules/jquery/src/data/Data.js
index 31ff431..ce6d8fa 100644
--- a/node_modules/jquery/src/data/Data.js
+++ b/node_modules/jquery/src/data/Data.js
@@ -22,7 +22,7 @@
 
 		// If not, create one
 		if ( !value ) {
-			value = {};
+			value = Object.create( null );
 
 			// We can accept data for non-element nodes in modern browsers,
 			// but we should not, see #8335.
diff --git a/node_modules/jquery/src/deferred.js b/node_modules/jquery/src/deferred.js
index 0425d36..c05a37a 100644
--- a/node_modules/jquery/src/deferred.js
+++ b/node_modules/jquery/src/deferred.js
@@ -79,7 +79,7 @@
 					var fns = arguments;
 
 					return jQuery.Deferred( function( newDefer ) {
-						jQuery.each( tuples, function( i, tuple ) {
+						jQuery.each( tuples, function( _i, tuple ) {
 
 							// Map tuples (progress, done, fail) to arguments (done, fail, progress)
 							var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
diff --git a/node_modules/jquery/src/deprecated.js b/node_modules/jquery/src/deprecated.js
index c11b0d3..cc13c3c 100644
--- a/node_modules/jquery/src/deprecated.js
+++ b/node_modules/jquery/src/deprecated.js
@@ -7,31 +7,15 @@
 	"./var/isWindow",
 	"./var/slice",
 
-	"./event/alias"
+	"./deprecated/ajax-event-alias",
+	"./deprecated/event"
 ], function( jQuery, nodeName, camelCase, toType, isFunction, isWindow, slice ) {
 
 "use strict";
 
-jQuery.fn.extend( {
-
-	bind: function( types, data, fn ) {
-		return this.on( types, null, data, fn );
-	},
-	unbind: function( types, fn ) {
-		return this.off( types, null, fn );
-	},
-
-	delegate: function( selector, types, data, fn ) {
-		return this.on( types, selector, data, fn );
-	},
-	undelegate: function( selector, types, fn ) {
-
-		// ( namespace ) or ( selector, types [, fn] )
-		return arguments.length === 1 ?
-			this.off( selector, "**" ) :
-			this.off( types, selector || "**", fn );
-	}
-} );
+// Support: Android <=4.0 only
+// Make sure we trim BOM and NBSP
+var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
 
 // Bind a function to a context, optionally partially applying any
 // arguments.
@@ -95,4 +79,9 @@
 		!isNaN( obj - parseFloat( obj ) );
 };
 
+jQuery.trim = function( text ) {
+	return text == null ?
+		"" :
+		( text + "" ).replace( rtrim, "" );
+};
 } );
diff --git a/node_modules/jquery/src/event/ajax.js b/node_modules/jquery/src/deprecated/ajax-event-alias.js
similarity index 74%
rename from node_modules/jquery/src/event/ajax.js
rename to node_modules/jquery/src/deprecated/ajax-event-alias.js
index 500b36c..b96c0aa 100644
--- a/node_modules/jquery/src/event/ajax.js
+++ b/node_modules/jquery/src/deprecated/ajax-event-alias.js
@@ -1,11 +1,11 @@
 define( [
 	"../core",
+	"../ajax",
 	"../event"
 ], function( jQuery ) {
 
 "use strict";
 
-// Attach a bunch of functions for handling common AJAX events
 jQuery.each( [
 	"ajaxStart",
 	"ajaxStop",
@@ -13,7 +13,7 @@
 	"ajaxError",
 	"ajaxSuccess",
 	"ajaxSend"
-], function( i, type ) {
+], function( _i, type ) {
 	jQuery.fn[ type ] = function( fn ) {
 		return this.on( type, fn );
 	};
diff --git a/node_modules/jquery/src/deprecated/event.js b/node_modules/jquery/src/deprecated/event.js
new file mode 100644
index 0000000..d2d26bc
--- /dev/null
+++ b/node_modules/jquery/src/deprecated/event.js
@@ -0,0 +1,48 @@
+define( [
+	"../core",
+
+	"../event",
+	"../event/trigger"
+], function( jQuery ) {
+
+"use strict";
+
+jQuery.fn.extend( {
+
+	bind: function( types, data, fn ) {
+		return this.on( types, null, data, fn );
+	},
+	unbind: function( types, fn ) {
+		return this.off( types, null, fn );
+	},
+
+	delegate: function( selector, types, data, fn ) {
+		return this.on( types, selector, data, fn );
+	},
+	undelegate: function( selector, types, fn ) {
+
+		// ( namespace ) or ( selector, types [, fn] )
+		return arguments.length === 1 ?
+			this.off( selector, "**" ) :
+			this.off( types, selector || "**", fn );
+	},
+
+	hover: function( fnOver, fnOut ) {
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+	}
+} );
+
+jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
+	function( _i, name ) {
+
+		// Handle event binding
+		jQuery.fn[ name ] = function( data, fn ) {
+			return arguments.length > 0 ?
+				this.on( name, null, data, fn ) :
+				this.trigger( name );
+		};
+	} );
+
+} );
diff --git a/node_modules/jquery/src/effects.js b/node_modules/jquery/src/effects.js
index a778de1..76b7cc7 100644
--- a/node_modules/jquery/src/effects.js
+++ b/node_modules/jquery/src/effects.js
@@ -7,7 +7,6 @@
 	"./var/rnothtmlwhite",
 	"./css/var/cssExpand",
 	"./css/var/isHiddenWithinTree",
-	"./css/var/swap",
 	"./css/adjustCSS",
 	"./data/var/dataPriv",
 	"./css/showHide",
@@ -20,7 +19,7 @@
 	"./css",
 	"./effects/Tween"
 ], function( jQuery, camelCase, document, isFunction, rcssNum, rnothtmlwhite, cssExpand,
-	isHiddenWithinTree, swap, adjustCSS, dataPriv, showHide ) {
+	isHiddenWithinTree, adjustCSS, dataPriv, showHide ) {
 
 "use strict";
 
@@ -542,7 +541,7 @@
 			clearQueue = type;
 			type = undefined;
 		}
-		if ( clearQueue && type !== false ) {
+		if ( clearQueue ) {
 			this.queue( type || "fx", [] );
 		}
 
@@ -625,7 +624,7 @@
 	}
 } );
 
-jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
+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" ?
diff --git a/node_modules/jquery/src/event.js b/node_modules/jquery/src/event.js
index 3ff11ad..6510d6a 100644
--- a/node_modules/jquery/src/event.js
+++ b/node_modules/jquery/src/event.js
@@ -6,13 +6,14 @@
 	"./var/rnothtmlwhite",
 	"./var/rcheckableType",
 	"./var/slice",
+	"./data/var/acceptData",
 	"./data/var/dataPriv",
 	"./core/nodeName",
 
 	"./core/init",
 	"./selector"
 ], function( jQuery, document, documentElement, isFunction, rnothtmlwhite,
-	rcheckableType, slice, dataPriv, nodeName ) {
+	rcheckableType, slice, acceptData, dataPriv, nodeName ) {
 
 "use strict";
 
@@ -124,8 +125,8 @@
 			special, handlers, type, namespaces, origType,
 			elemData = dataPriv.get( elem );
 
-		// Don't attach events to noData or text/comment nodes (but allow plain objects)
-		if ( !elemData ) {
+		// Only attach events to objects that accept data
+		if ( !acceptData( elem ) ) {
 			return;
 		}
 
@@ -149,7 +150,7 @@
 
 		// Init the element's event structure and main handler, if this is the first
 		if ( !( events = elemData.events ) ) {
-			events = elemData.events = {};
+			events = elemData.events = Object.create( null );
 		}
 		if ( !( eventHandle = elemData.handle ) ) {
 			eventHandle = elemData.handle = function( e ) {
@@ -307,12 +308,15 @@
 
 	dispatch: function( nativeEvent ) {
 
-		// Make a writable jQuery.Event from the native event object
-		var event = jQuery.event.fix( nativeEvent );
-
 		var i, j, ret, matched, handleObj, handlerQueue,
 			args = new Array( arguments.length ),
-			handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
+
+			// Make a writable jQuery.Event from the native event object
+			event = jQuery.event.fix( nativeEvent ),
+
+			handlers = (
+					dataPriv.get( this, "events" ) || Object.create( null )
+				)[ event.type ] || [],
 			special = jQuery.event.special[ event.type ] || {};
 
 		// Use the fix-ed jQuery.Event rather than the (read-only) native event
diff --git a/node_modules/jquery/src/event/alias.js b/node_modules/jquery/src/event/alias.js
deleted file mode 100644
index 863c94a..0000000
--- a/node_modules/jquery/src/event/alias.js
+++ /dev/null
@@ -1,29 +0,0 @@
-define( [
-	"../core",
-
-	"../event",
-	"./trigger"
-], function( jQuery ) {
-
-"use strict";
-
-jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
-	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
-	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
-	function( i, name ) {
-
-	// Handle event binding
-	jQuery.fn[ name ] = function( data, fn ) {
-		return arguments.length > 0 ?
-			this.on( name, null, data, fn ) :
-			this.trigger( name );
-	};
-} );
-
-jQuery.fn.extend( {
-	hover: function( fnOver, fnOut ) {
-		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
-	}
-} );
-
-} );
diff --git a/node_modules/jquery/src/event/focusin.js b/node_modules/jquery/src/event/focusin.js
index 7faef29..3da86c7 100644
--- a/node_modules/jquery/src/event/focusin.js
+++ b/node_modules/jquery/src/event/focusin.js
@@ -27,7 +27,10 @@
 
 		jQuery.event.special[ fix ] = {
 			setup: function() {
-				var doc = this.ownerDocument || this,
+
+				// Handle: regular nodes (via `this.ownerDocument`), window
+				// (via `this.document`) & document (via `this`).
+				var doc = this.ownerDocument || this.document || this,
 					attaches = dataPriv.access( doc, fix );
 
 				if ( !attaches ) {
@@ -36,7 +39,7 @@
 				dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
 			},
 			teardown: function() {
-				var doc = this.ownerDocument || this,
+				var doc = this.ownerDocument || this.document || this,
 					attaches = dataPriv.access( doc, fix ) - 1;
 
 				if ( !attaches ) {
diff --git a/node_modules/jquery/src/event/trigger.js b/node_modules/jquery/src/event/trigger.js
index cf40b4f..c3769e1 100644
--- a/node_modules/jquery/src/event/trigger.js
+++ b/node_modules/jquery/src/event/trigger.js
@@ -103,7 +103,9 @@
 				special.bindType || type;
 
 			// jQuery handler
-			handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
+			handle = (
+					dataPriv.get( cur, "events" ) || Object.create( null )
+				)[ event.type ] &&
 				dataPriv.get( cur, "handle" );
 			if ( handle ) {
 				handle.apply( cur, data );
diff --git a/node_modules/jquery/src/exports/global.js b/node_modules/jquery/src/exports/global.js
index 460b56e..2cc9577 100644
--- a/node_modules/jquery/src/exports/global.js
+++ b/node_modules/jquery/src/exports/global.js
@@ -1,6 +1,6 @@
 define( [
 	"../core"
-], function( jQuery, noGlobal ) {
+], function( jQuery ) {
 
 "use strict";
 
@@ -27,7 +27,7 @@
 // Expose jQuery and $ identifiers, even in AMD
 // (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
 // and CommonJS for browser emulators (#13566)
-if ( !noGlobal ) {
+if ( typeof noGlobal === "undefined" ) {
 	window.jQuery = window.$ = jQuery;
 }
 
diff --git a/node_modules/jquery/src/jquery.js b/node_modules/jquery/src/jquery.js
index 0e026a6..0c144c1 100644
--- a/node_modules/jquery/src/jquery.js
+++ b/node_modules/jquery/src/jquery.js
@@ -23,7 +23,8 @@
 	"./ajax/script",
 	"./ajax/jsonp",
 	"./ajax/load",
-	"./event/ajax",
+	"./core/parseXML",
+	"./core/parseHTML",
 	"./effects",
 	"./effects/animatedSelector",
 	"./offset",
diff --git a/node_modules/jquery/src/manipulation.js b/node_modules/jquery/src/manipulation.js
index ab19d8b..dec21ea 100644
--- a/node_modules/jquery/src/manipulation.js
+++ b/node_modules/jquery/src/manipulation.js
@@ -1,7 +1,7 @@
 define( [
 	"./core",
 	"./core/isAttached",
-	"./var/concat",
+	"./var/flat",
 	"./var/isFunction",
 	"./var/push",
 	"./var/rcheckableType",
@@ -24,7 +24,7 @@
 	"./traversing",
 	"./selector",
 	"./event"
-], function( jQuery, isAttached, concat, isFunction, push, rcheckableType,
+], function( jQuery, isAttached, flat, isFunction, push, rcheckableType,
 	access, rtagName, rscriptType,
 	wrapMap, getAll, setGlobalEval, buildFragment, support,
 	dataPriv, dataUser, acceptData, DOMEval, nodeName ) {
@@ -33,13 +33,6 @@
 
 var
 
-	/* eslint-disable max-len */
-
-	// See https://github.com/eslint/eslint/issues/3229
-	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
-
-	/* eslint-enable */
-
 	// Support: IE <=10 - 11, Edge 12 - 13 only
 	// In IE/Edge using regex groups here causes severe slowdowns.
 	// See https://connect.microsoft.com/IE/feedback/details/1736512/
@@ -76,7 +69,7 @@
 }
 
 function cloneCopyEvent( src, dest ) {
-	var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
+	var i, l, type, pdataOld, udataOld, udataCur, events;
 
 	if ( dest.nodeType !== 1 ) {
 		return;
@@ -84,13 +77,11 @@
 
 	// 1. Copy private data: events, handlers, etc.
 	if ( dataPriv.hasData( src ) ) {
-		pdataOld = dataPriv.access( src );
-		pdataCur = dataPriv.set( dest, pdataOld );
+		pdataOld = dataPriv.get( src );
 		events = pdataOld.events;
 
 		if ( events ) {
-			delete pdataCur.handle;
-			pdataCur.events = {};
+			dataPriv.remove( dest, "handle events" );
 
 			for ( type in events ) {
 				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
@@ -126,7 +117,7 @@
 function domManip( collection, args, callback, ignored ) {
 
 	// Flatten any nested arrays
-	args = concat.apply( [], args );
+	args = flat( args );
 
 	var fragment, first, scripts, hasScripts, node, doc,
 		i = 0,
@@ -201,7 +192,7 @@
 							if ( jQuery._evalUrl && !node.noModule ) {
 								jQuery._evalUrl( node.src, {
 									nonce: node.nonce || node.getAttribute( "nonce" )
-								} );
+								}, doc );
 							}
 						} else {
 							DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
@@ -238,7 +229,7 @@
 
 jQuery.extend( {
 	htmlPrefilter: function( html ) {
-		return html.replace( rxhtmlTag, "<$1></$2>" );
+		return html;
 	},
 
 	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
diff --git a/node_modules/jquery/src/manipulation/_evalUrl.js b/node_modules/jquery/src/manipulation/_evalUrl.js
index 9a4d2ac..6163b68 100644
--- a/node_modules/jquery/src/manipulation/_evalUrl.js
+++ b/node_modules/jquery/src/manipulation/_evalUrl.js
@@ -4,7 +4,7 @@
 
 "use strict";
 
-jQuery._evalUrl = function( url, options ) {
+jQuery._evalUrl = function( url, options, doc ) {
 	return jQuery.ajax( {
 		url: url,
 
@@ -22,7 +22,7 @@
 			"text script": function() {}
 		},
 		dataFilter: function( response ) {
-			jQuery.globalEval( response, options );
+			jQuery.globalEval( response, options, doc );
 		}
 	} );
 };
diff --git a/node_modules/jquery/src/manipulation/support.js b/node_modules/jquery/src/manipulation/support.js
index 4a5d9af..62d6bb3 100644
--- a/node_modules/jquery/src/manipulation/support.js
+++ b/node_modules/jquery/src/manipulation/support.js
@@ -28,6 +28,12 @@
 	// Make sure textarea (and checkbox) defaultValue is properly cloned
 	div.innerHTML = "<textarea>x</textarea>";
 	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+
+	// Support: IE <=9 only
+	// IE <=9 replaces <option> tags with their contents when inserted outside of
+	// the select element.
+	div.innerHTML = "<option></option>";
+	support.option = !!div.lastChild;
 } )();
 
 return support;
diff --git a/node_modules/jquery/src/manipulation/wrapMap.js b/node_modules/jquery/src/manipulation/wrapMap.js
index 1f446f7..da48bf9 100644
--- a/node_modules/jquery/src/manipulation/wrapMap.js
+++ b/node_modules/jquery/src/manipulation/wrapMap.js
@@ -1,13 +1,12 @@
-define( function() {
+define( [
+	"./support"
+], function( support ) {
 
 "use strict";
 
 // We have to close these tags to support XHTML (#13200)
 var wrapMap = {
 
-	// Support: IE <=9 only
-	option: [ 1, "<select multiple='multiple'>", "</select>" ],
-
 	// XHTML parsers do not magically insert elements in the
 	// same way that tag soup parsers do. So we cannot shorten
 	// this by omitting <tbody> or other required elements.
@@ -19,11 +18,13 @@
 	_default: [ 0, "", "" ]
 };
 
-// Support: IE <=9 only
-wrapMap.optgroup = wrapMap.option;
-
 wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
 wrapMap.th = wrapMap.td;
 
+// Support: IE <=9 only
+if ( !support.option ) {
+	wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ];
+}
+
 return wrapMap;
 } );
diff --git a/node_modules/jquery/src/offset.js b/node_modules/jquery/src/offset.js
index 83b1c3a..62166bc 100644
--- a/node_modules/jquery/src/offset.js
+++ b/node_modules/jquery/src/offset.js
@@ -1,7 +1,6 @@
 define( [
 	"./core",
 	"./core/access",
-	"./var/document",
 	"./var/documentElement",
 	"./var/isFunction",
 	"./css/var/rnumnonpx",
@@ -12,8 +11,8 @@
 	"./core/init",
 	"./css",
 	"./selector" // contains
-], function( jQuery, access, document, documentElement, isFunction, rnumnonpx,
-             curCSS, addGetHookIf, support, isWindow ) {
+], function( jQuery, access, documentElement, isFunction, rnumnonpx,
+	curCSS, addGetHookIf, support, isWindow ) {
 
 "use strict";
 
@@ -64,6 +63,12 @@
 			options.using.call( elem, props );
 
 		} else {
+			if ( typeof props.top === "number" ) {
+				props.top += "px";
+			}
+			if ( typeof props.left === "number" ) {
+				props.left += "px";
+			}
 			curElem.css( props );
 		}
 	}
@@ -214,7 +219,7 @@
 // Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
 // getComputedStyle returns percent when specified for top/left/bottom/right;
 // rather than make the css module depend on the offset module, just check for it here
-jQuery.each( [ "top", "left" ], function( i, prop ) {
+jQuery.each( [ "top", "left" ], function( _i, prop ) {
 	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
 		function( elem, computed ) {
 			if ( computed ) {
diff --git a/node_modules/jquery/src/selector-native.js b/node_modules/jquery/src/selector-native.js
index da837a0..05cd8ea 100644
--- a/node_modules/jquery/src/selector-native.js
+++ b/node_modules/jquery/src/selector-native.js
@@ -34,6 +34,7 @@
  */
 
 var hasDuplicate, sortInput,
+	rhtmlSuffix = /HTML$/i,
 	sortStable = jQuery.expando.split( "" ).sort( sortOrder ).join( "" ) === jQuery.expando,
 	matches = documentElement.matches ||
 		documentElement.webkitMatchesSelector ||
@@ -200,11 +201,14 @@
 		return a === bup || !!( bup && bup.nodeType === 1 && adown.contains( bup ) );
 	},
 	isXMLDoc: function( elem ) {
+		var namespace = elem.namespaceURI,
+			documentElement = ( elem.ownerDocument || elem ).documentElement;
 
-		// documentElement is verified for cases where it doesn't yet exist
-		// (such as loading iframes in IE - #4833)
-		var documentElement = elem && ( elem.ownerDocument || elem ).documentElement;
-		return documentElement ? documentElement.nodeName !== "HTML" : false;
+		// Assume HTML when documentElement doesn't yet exist, such as inside
+		// document fragments.
+		return !rhtmlSuffix.test( namespace ||
+			documentElement && documentElement.nodeName ||
+			"HTML" );
 	},
 	expr: {
 		attrHandle: {},
diff --git a/node_modules/jquery/src/serialize.js b/node_modules/jquery/src/serialize.js
index d8a9a36..cd4e99f 100644
--- a/node_modules/jquery/src/serialize.js
+++ b/node_modules/jquery/src/serialize.js
@@ -114,7 +114,7 @@
 				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
 				( this.checked || !rcheckableType.test( type ) );
 		} )
-		.map( function( i, elem ) {
+		.map( function( _i, elem ) {
 			var val = jQuery( this ).val();
 
 			if ( val == null ) {
diff --git a/node_modules/jquery/src/traversing.js b/node_modules/jquery/src/traversing.js
index 426d5b6..de37718 100644
--- a/node_modules/jquery/src/traversing.js
+++ b/node_modules/jquery/src/traversing.js
@@ -1,5 +1,6 @@
 define( [
 	"./core",
+	"./var/getProto",
 	"./var/indexOf",
 	"./traversing/var/dir",
 	"./traversing/var/siblings",
@@ -9,7 +10,7 @@
 	"./core/init",
 	"./traversing/findFilter",
 	"./selector"
-], function( jQuery, indexOf, dir, siblings, rneedsContext, nodeName ) {
+], function( jQuery, getProto, indexOf, dir, siblings, rneedsContext, nodeName ) {
 
 "use strict";
 
@@ -117,7 +118,7 @@
 	parents: function( elem ) {
 		return dir( elem, "parentNode" );
 	},
-	parentsUntil: function( elem, i, until ) {
+	parentsUntil: function( elem, _i, until ) {
 		return dir( elem, "parentNode", until );
 	},
 	next: function( elem ) {
@@ -132,10 +133,10 @@
 	prevAll: function( elem ) {
 		return dir( elem, "previousSibling" );
 	},
-	nextUntil: function( elem, i, until ) {
+	nextUntil: function( elem, _i, until ) {
 		return dir( elem, "nextSibling", until );
 	},
-	prevUntil: function( elem, i, until ) {
+	prevUntil: function( elem, _i, until ) {
 		return dir( elem, "previousSibling", until );
 	},
 	siblings: function( elem ) {
@@ -145,7 +146,13 @@
 		return siblings( elem.firstChild );
 	},
 	contents: function( elem ) {
-		if ( typeof elem.contentDocument !== "undefined" ) {
+		if ( elem.contentDocument != null &&
+
+			// Support: IE 11+
+			// <object> elements with no `data` attribute has an object
+			// `contentDocument` with a `null` prototype.
+			getProto( elem.contentDocument ) ) {
+
 			return elem.contentDocument;
 		}
 
diff --git a/node_modules/jquery/src/var/concat.js b/node_modules/jquery/src/var/concat.js
deleted file mode 100644
index e47c19d..0000000
--- a/node_modules/jquery/src/var/concat.js
+++ /dev/null
@@ -1,7 +0,0 @@
-define( [
-	"./arr"
-], function( arr ) {
-	"use strict";
-
-	return arr.concat;
-} );
diff --git a/node_modules/jquery/src/var/flat.js b/node_modules/jquery/src/var/flat.js
new file mode 100644
index 0000000..86f91a6
--- /dev/null
+++ b/node_modules/jquery/src/var/flat.js
@@ -0,0 +1,16 @@
+define( [
+	"./arr"
+], function( arr ) {
+
+"use strict";
+
+// Support: IE 9 - 11+, Edge 18+, Android Browser 4.0 - 4.3 only, iOS 7 - 11 only, Safari 11 only,
+// Firefox <= 61 only
+// Provide fallback for browsers without Array#flat.
+return arr.flat ? function( array ) {
+	return arr.flat.call( array );
+} : function( array ) {
+	return arr.concat.apply( [], array );
+};
+
+} );
