
/*!
 * Detectizr v2.2.0
 * http://barisaydinoglu.github.com/Detectizr/
 *
 * Written by Baris Aydinoglu (http://baris.aydinoglu.info) - Copyright 2012
 * Released under the MIT license
 *
 * Date: 2016-11-10T12:08Z
 */
window.Detectizr=(function(window,navigator,document,undefined){var Detectizr={},Modernizr=window.Modernizr,deviceTypes=["tv","tablet","mobile","desktop"],options={addAllFeaturesAsClass:!1,detectDevice:!0,detectDeviceModel:!0,detectScreen:!0,detectOS:!0,detectBrowser:!0,detectPlugins:!0},plugins2detect=[{name:"adobereader",substrs:["Adobe","Acrobat"],progIds:["AcroPDF.PDF","PDF.PDFCtrl.5"]},{name:"flash",substrs:["Shockwave Flash"],progIds:["ShockwaveFlash.ShockwaveFlash.1"]},{name:"wmplayer",substrs:["Windows Media"],progIds:["wmplayer.ocx"]},{name:"silverlight",substrs:["Silverlight"],progIds:["AgControl.AgControl"]},{name:"quicktime",substrs:["QuickTime"],progIds:["QuickTime.QuickTime"]}],rclass=/[\t\r\n]/g,docElement=document.documentElement,resizeTimeoutId,oldOrientation;function extend(obj,extObj){var a,b,i;if(arguments.length>2){for(a=1,b=arguments.length;a<b;a+=1){extend(obj,arguments[a])}}else{for(i in extObj){if(extObj.hasOwnProperty(i)){obj[i]=extObj[i]}}}
return obj}
function is(key){return Detectizr.browser.userAgent.indexOf(key)>-1}
function test(regex){return regex.test(Detectizr.browser.userAgent)}
function exec(regex){return regex.exec(Detectizr.browser.userAgent)}
function trim(value){return value.replace(/^\s+|\s+$/g,"")}
function toCamel(string){if(string===null||string===undefined){return""}
return String(string).replace(/((\s|\-|\.)+[a-z0-9])/g,function($1){return $1.toUpperCase().replace(/(\s|\-|\.)/g,"")})}
function removeClass(element,value){var class2remove=value||"",cur=element.nodeType===1&&(element.className?(" "+element.className+" ").replace(rclass," "):"");if(cur){while(cur.indexOf(" "+class2remove+" ")>=0){cur=cur.replace(" "+class2remove+" "," ")}
element.className=value?trim(cur):""}}
function addVersionTest(version,major,minor){if(!!version){version=toCamel(version);if(!!major){major=toCamel(major);addConditionalTest(version+major,!0);if(!!minor){addConditionalTest(version+major+"_"+minor,!0)}}}}
function addConditionalTest(feature,test){if(!!feature&&!!Modernizr){if(options.addAllFeaturesAsClass){Modernizr.addTest(feature,test)}else{test=typeof test==="function"?test():test;if(test){Modernizr.addTest(feature,!0)}else{delete Modernizr[feature];removeClass(docElement,feature)}}}}
function setVersion(versionType,versionFull){versionType.version=versionFull;var versionArray=versionFull.split(".");if(versionArray.length>0){versionArray=versionArray.reverse();versionType.major=versionArray.pop();if(versionArray.length>0){versionType.minor=versionArray.pop();if(versionArray.length>0){versionArray=versionArray.reverse();versionType.patch=versionArray.join(".")}else{versionType.patch="0"}}else{versionType.minor="0"}}else{versionType.major="0"}}
function checkOrientation(){window.clearTimeout(resizeTimeoutId);resizeTimeoutId=window.setTimeout(function(){oldOrientation=Detectizr.device.orientation;if(window.innerHeight>window.innerWidth){Detectizr.device.orientation="portrait"}else{Detectizr.device.orientation="landscape"}
addConditionalTest(Detectizr.device.orientation,!0);if(oldOrientation!==Detectizr.device.orientation){addConditionalTest(oldOrientation,!1)}},10)}
function detectPlugin(substrs){var plugins=navigator.plugins,plugin,haystack,pluginFoundText,j,k;for(j=plugins.length-1;j>=0;j--){plugin=plugins[j];haystack=plugin.name+plugin.description;pluginFoundText=0;for(k=substrs.length;k>=0;k--){if(haystack.indexOf(substrs[k])!==-1){pluginFoundText+=1}}
if(pluginFoundText===substrs.length){return!0}}
return!1}
function detectObject(progIds){var j;for(j=progIds.length-1;j>=0;j--){try{new ActiveXObject(progIds[j])}catch(e){}}
return!1}
function detect(opt){var i,j,device,os,browser,plugin2detect,pluginFound;options=extend({},options,opt||{});/** Device detection **/
		if (options.detectDevice) {
			Detectizr.device = {
				type: "",
				model: "",
				orientation: ""
			};
			device = Detectizr.device;
			if (test(/googletv|smarttv|smart-tv|internet.tv|netcast|nettv|appletv|boxee|kylo|roku|dlnadoc|roku|pov_tv|hbbtv|ce\-html/)) {
				// Check if user agent is a smart tv
				device.type = deviceTypes[0];
				device.model = "smartTv";
			} else if (test(/xbox|playstation.3|wii/)) {
				// Check if user agent is a game console
				device.type = deviceTypes[0];
				device.model = "gameConsole";
			} else if (test(/ip(a|ro)d/)) {
				// Check if user agent is a iPad
				device.type = deviceTypes[1];
				device.model = "ipad";
			} else if ((test(/tablet/) && !test(/rx-34/) && !test(/shield/)) || test(/folio/)) {
				// Check if user agent is a Tablet
				device.type = deviceTypes[1];
				device.model = String(exec(/playbook/) || "");
			} else if (test(/linux/) && test(/android/) && !test(/fennec|mobi|htc.magic|htcX06ht|nexus.one|sc-02b|fone.945/)) {
				// Check if user agent is an Android Tablet
				device.type = deviceTypes[1];
				device.model = "android";
			} else if (test(/kindle/) || (test(/mac.os/) && test(/silk/))) {
				// Check if user agent is a Kindle or Kindle Fire
				device.type = deviceTypes[1];
				device.model = "kindle";
			} else if (test(/gt-p10|sc-01c|shw-m180s|sgh-t849|sch-i800|shw-m180l|sph-p100|sgh-i987|zt180|htc(.flyer|\_flyer)|sprint.atp51|viewpad7|pandigital(sprnova|nova)|ideos.s7|dell.streak.7|advent.vega|a101it|a70bht|mid7015|next2|nook/) || (test(/mb511/) && test(/rutem/))) {
				// Check if user agent is a pre Android 3.0 Tablet
				device.type = deviceTypes[1];
				device.model = "android";
			} else if (test(/bb10/)) {
				// Check if user agent is a BB10 device
				device.type = deviceTypes[2];
				device.model = "blackberry";
			} else {
				// Check if user agent is one of common mobile types
				device.model = exec(/iphone|ipod|android|blackberry|opera mini|opera mobi|skyfire|maemo|windows phone|palm|iemobile|symbian|symbianos|fennec|j2me/);
				if (device.model !== null) {
					device.type = deviceTypes[2];
					device.model = String(device.model);
				} else {
					device.model = "";
					if (test(/bolt|fennec|iris|maemo|minimo|mobi|mowser|netfront|novarra|prism|rx-34|skyfire|tear|xv6875|xv6975|google.wireless.transcoder/)) {
						// Check if user agent is unique Mobile User Agent
						device.type = deviceTypes[2];
					} else if (test(/opera/) && test(/windows.nt.5/) && test(/htc|xda|mini|vario|samsung\-gt\-i8000|samsung\-sgh\-i9/)) {
						// Check if user agent is an odd Opera User Agent - http://goo.gl/nK90K
						device.type = deviceTypes[2];
					} else if ((test(/windows.(nt|xp|me|9)/) && !test(/phone/)) || test(/win(9|.9|nt)/) || test(/\(windows 8\)/)) {
						// Check if user agent is Windows Desktop, "(Windows 8)" Chrome extra exception
						device.type = deviceTypes[3];
					} else if (test(/macintosh|powerpc/) && !test(/silk/)) {
						// Check if agent is Mac Desktop
						device.type = deviceTypes[3];
						device.model = "mac";
					} else if (test(/linux/) && test(/x11/)) {
						// Check if user agent is a Linux Desktop
						device.type = deviceTypes[3];
					} else if (test(/solaris|sunos|bsd/)) {
						// Check if user agent is a Solaris, SunOS, BSD Desktop
						device.type = deviceTypes[3];
					} else if (test(/cros/)) {
						// Check if user agent is a Chromebook
						device.type = deviceTypes[3];
					} else if (test(/bot|crawler|spider|yahoo|ia_archiver|covario-ids|findlinks|dataparksearch|larbin|mediapartners-google|ng-search|snappy|teoma|jeeves|tineye/) && !test(/mobile/)) {
						// Check if user agent is a Desktop BOT/Crawler/Spider
						device.type = deviceTypes[3];
						device.model = "crawler";
					} else {
						// Otherwise assume it is a Mobile Device
						device.type = deviceTypes[2];
					}
				}
			}
			for (i = 0, j = deviceTypes.length; i < j; i += 1) {
				addConditionalTest(deviceTypes[i], (device.type === deviceTypes[i]));
			}
			if (options.detectDeviceModel) {
				addConditionalTest(toCamel(device.model), true);
			}
		}

		/** Screen detection **/
		if (options.detectScreen) {
			device.screen = {};
			if (!!Modernizr && !!Modernizr.mq) {
				if (Modernizr.mq("only screen and (max-width: 240px)")) {
					device.screen.size = "veryVerySmall";
					addConditionalTest("veryVerySmallScreen", true);
				} else if (Modernizr.mq("only screen and (max-width: 320px)")) {
					device.screen.size = "verySmall";
					addConditionalTest("verySmallScreen", true);
				} else if (Modernizr.mq("only screen and (max-width: 480px)")) {
					device.screen.size = "small";
					addConditionalTest("smallScreen", true);
				}
				if (device.type === deviceTypes[1] || device.type === deviceTypes[2]) {
					if (Modernizr.mq("only screen and (-moz-min-device-pixel-ratio: 1.3), only screen and (-o-min-device-pixel-ratio: 2.6/2), only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen  and (min-device-pixel-ratio: 1.3), only screen and (min-resolution: 1.3dppx)")) {
						device.screen.resolution = "high";
						addConditionalTest("highresolution", true);
					}
				}
			}
			if (device.type === deviceTypes[1] || device.type === deviceTypes[2]) {
				window.onresize = function(event) {
					checkOrientation(event);
				};
				checkOrientation();
			} else {
				device.orientation = "landscape";
				addConditionalTest(device.orientation, true);
			}
		}

		/** OS detection **/
		if (options.detectOS) {
			Detectizr.os = {};
			os = Detectizr.os;
			if (device.model !== "") {
				if (device.model === "ipad" || device.model === "iphone" || device.model === "ipod") {
					os.name = "ios";
					setVersion(os, (test(/os\s([\d_]+)/) ? RegExp.$1 : "").replace(/_/g, "."));
				} else if (device.model === "android") {
					os.name = "android";
					setVersion(os, (test(/android\s([\d\.]+)/) ? RegExp.$1 : ""));
				} else if (device.model === "blackberry") {
					os.name = "blackberry";
					setVersion(os, (test(/version\/([^\s]+)/) ? RegExp.$1 : ""));
				} else if (device.model === "playbook") {
					os.name = "blackberry";
					setVersion(os, (test(/os ([^\s]+)/) ? RegExp.$1.replace(";", "") : ""));
				}
			}
			if (!os.name) {
				if (is("win") || is("16bit")) {
					os.name = "windows";
					if (is("windows nt 10")) {
						setVersion(os, "10");
					} else if (is("windows nt 6.3")) {
						setVersion(os, "8.1");
					} else if (is("windows nt 6.2") || test(/\(windows 8\)/)) { //windows 8 chrome mac fix
						setVersion(os, "8");
					} else if (is("windows nt 6.1")) {
						setVersion(os, "7");
					} else if (is("windows nt 6.0")) {
						setVersion(os, "vista");
					} else if (is("windows nt 5.2") || is("windows nt 5.1") || is("windows xp")) {
						setVersion(os, "xp");
					} else if (is("windows nt 5.0") || is("windows 2000")) {
						setVersion(os, "2k");
					} else if (is("winnt") || is("windows nt")) {
						setVersion(os, "nt");
					} else if (is("win98") || is("windows 98")) {
						setVersion(os, "98");
					} else if (is("win95") || is("windows 95")) {
						setVersion(os, "95");
					}
				} else if (is("mac") || is("darwin")) {
					os.name = "mac os";
					if (is("68k") || is("68000")) {
						setVersion(os, "68k");
					} else if (is("ppc") || is("powerpc")) {
						setVersion(os, "ppc");
					} else if (is("os x")) {
						setVersion(os, (test(/os\sx\s([\d_]+)/) ? RegExp.$1 : "os x").replace(/_/g, "."));
					}
				} else if (is("webtv")) {
					os.name = "webtv";
				} else if (is("x11") || is("inux")) {
					os.name = "linux";
				} else if (is("sunos")) {
					os.name = "sun";
				} else if (is("irix")) {
					os.name = "irix";
				} else if (is("freebsd")) {
					os.name = "freebsd";
				} else if (is("bsd")) {
					os.name = "bsd";
				}
			}
			if (!!os.name) {
				addConditionalTest(os.name, true);
				if (!!os.major) {
					addVersionTest(os.name, os.major);
					if (!!os.minor) {
						addVersionTest(os.name, os.major, os.minor);
					}
				}
			}
			if (test(/\sx64|\sx86|\swin64|\swow64|\samd64/)) {
				os.addressRegisterSize = "64bit";
			} else {
				os.addressRegisterSize = "32bit";
			}
			addConditionalTest(os.addressRegisterSize, true);
		}

		/** Browser detection **/
		if (options.detectBrowser) {
			browser = Detectizr.browser;
			if (!test(/opera|webtv/) && (test(/msie\s([\d\w\.]+)/) || is("trident"))) {
				browser.engine = "trident";
				browser.name = "ie";
				if (!window.addEventListener && document.documentMode && document.documentMode === 7) {
					setVersion(browser, "8.compat");
				} else if (test(/trident.*rv[ :](\d+)\./)) {
					setVersion(browser, RegExp.$1);
				} else {
					setVersion(browser, (test(/trident\/4\.0/) ? "8" : RegExp.$1));
				}
			} else if (is("firefox")) {
				browser.engine = "gecko";
				browser.name = "firefox";
				setVersion(browser, (test(/firefox\/([\d\w\.]+)/) ? RegExp.$1 : ""));
			} else if (is("gecko/")) {
				browser.engine = "gecko";
			} else if (is("opera")) {
				browser.name = "opera";
				browser.engine = "presto";
				setVersion(browser, (test(/version\/([\d\.]+)/) ? RegExp.$1 : (test(/opera(\s|\/)([\d\.]+)/) ? RegExp.$2 : "")));
			} else if (is("konqueror")) {
				browser.name = "konqueror";
			} else if (is("edge")) {
				browser.engine = "webkit";
				browser.name = "edge";
				setVersion(browser, (test(/edge\/([\d\.]+)/) ? RegExp.$1 : ""));
			} else if (is("chrome")) {
				browser.engine = "webkit";
				browser.name = "chrome";
				setVersion(browser, (test(/chrome\/([\d\.]+)/) ? RegExp.$1 : ""));
			} else if (is("iron")) {
				browser.engine = "webkit";
				browser.name = "iron";
			} else if (is("crios")) {
				browser.name = "chrome";
				browser.engine = "webkit";
				setVersion(browser, (test(/crios\/([\d\.]+)/) ? RegExp.$1 : ""));
			} else if (is("fxios")) {
				browser.name = "firefox";
				browser.engine = "webkit";
				setVersion(browser, (test(/fxios\/([\d\.]+)/) ? RegExp.$1 : ""));
			} else if (is("applewebkit/")) {
				browser.name = "safari";
				browser.engine = "webkit";
				setVersion(browser, (test(/version\/([\d\.]+)/) ? RegExp.$1 : ""));
			} else if (is("mozilla/")) {
				browser.engine = "gecko";
			}
			if (!!browser.name) {
				addConditionalTest(browser.name, true);
				if (!!browser.major) {
					addVersionTest(browser.name, browser.major);
					if (!!browser.minor) {
						addVersionTest(browser.name, browser.major, browser.minor);
					}
				}
			}
			addConditionalTest(browser.engine, true);

			// Browser Language
			browser.language = navigator.userLanguage || navigator.language;
			addConditionalTest(browser.language, true);
		}

		/** Plugin detection **/
		if (options.detectPlugins) {
			browser.plugins = [];
			for (i = plugins2detect.length - 1; i >= 0; i--) {
				plugin2detect = plugins2detect[i];
				pluginFound = false;
				if (window.ActiveXObject) {
					pluginFound = detectObject(plugin2detect.progIds);
				} else if (navigator.plugins) {
					pluginFound = detectPlugin(plugin2detect.substrs);
				}
				if (pluginFound) {
					browser.plugins.push(plugin2detect.name);
					addConditionalTest(plugin2detect.name, true);
				}
			}
			if (typeof navigator.javaEnabled === "function" && navigator.javaEnabled()) {
				browser.plugins.push("java");
				addConditionalTest("java", true);
			}
		}
	}
	Detectizr.detect = function(settings) {
		return detect(settings);
	};
	Detectizr.init = function() {
		if (Detectizr !== undefined) {
			Detectizr.browser = {
				userAgent: (navigator.userAgent || navigator.vendor || window.opera || "").toLowerCase()
			};
			Detectizr.detect();
		}
	};
	Detectizr.init();

	return Detectizr;
}(this, this.navigator, this.document));


/*!
 * modernizr v3.3.1
 * Build https://modernizr.com/download?-csscalc-cssgradients-csstransforms-csstransitions-flexbox-svg-touchevents-domprefixes-prefixed-prefixes-setclasses-shiv-testallprops-testprop-teststyles-dontmin
 *
 * Copyright (c)
 *  Faruk Ates
 *  Paul Irish
 *  Alex Sexton
 *  Ryan Seddon
 *  Patrick Kettner
 *  Stu Cox
 *  Richard Herrera

 * MIT License
 */

/*
 * Modernizr tests which native CSS3 and HTML5 features are available in the
 * current UA and makes the results available to you in two ways: as properties on
 * a global `Modernizr` object, and as classes on the `<html>` element. This
 * information allows you to progressively enhance your pages with a granular level
 * of control over the experience.
 */

;(function(window, document, undefined){
    var classes = [];


    var tests = [];


    /**
     *
     * ModernizrProto is the constructor for Modernizr
     *
     * @class
     * @access public
     */

    var ModernizrProto = {
        // The current version, dummy
        _version: '3.3.1',

        // Any settings that don't work as separate modules
        // can go in here as configuration.
        _config: {
            'classPrefix': '',
            'enableClasses': true,
            'enableJSClass': true,
            'usePrefixes': true
        },

        // Queue of tests
        _q: [],

        // Stub these for people who are listening
        on: function(test, cb) {
            // I don't really think people should do this, but we can
            // safe guard it a bit.
            // -- NOTE:: this gets WAY overridden in src/addTest for actual async tests.
            // This is in case people listen to synchronous tests. I would leave it out,
            // but the code to *disallow* sync tests in the real version of this
            // function is actually larger than this.
            var self = this;
            setTimeout(function() {
                cb(self[test]);
            }, 0);
        },

        addTest: function(name, fn, options) {
            tests.push({name: name, fn: fn, options: options});
        },

        addAsyncTest: function(fn) {
            tests.push({name: null, fn: fn});
        }
    };



    // Fake some of Object.create so we can force non test results to be non "own" properties.
    var Modernizr = function() {};
    Modernizr.prototype = ModernizrProto;

    // Leak modernizr globally when you `require` it rather than force it here.
    // Overwrite name so constructor name is nicer :D
    Modernizr = new Modernizr();


    /*!
     {
     "name": "SVG",
     "property": "svg",
     "caniuse": "svg",
     "tags": ["svg"],
     "authors": ["Erik Dahlstrom"],
     "polyfills": [
     "svgweb",
     "raphael",
     "amplesdk",
     "canvg",
     "svg-boilerplate",
     "sie",
     "dojogfx",
     "fabricjs"
     ]
     }
     !*/
    /* DOC
     Detects support for SVG in `<embed>` or `<object>` elements.
     */

    Modernizr.addTest('svg', !!document.createElementNS && !!document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect);


    /**
     * List of property values to set for css tests. See ticket #21
     * http://git.io/vUGl4
     *
     * @memberof Modernizr
     * @name Modernizr._prefixes
     * @optionName Modernizr._prefixes
     * @optionProp prefixes
     * @access public
     * @example
     *
     * Modernizr._prefixes is the internal list of prefixes that we test against
     * inside of things like [prefixed](#modernizr-prefixed) and [prefixedCSS](#-code-modernizr-prefixedcss). It is simply
     * an array of kebab-case vendor prefixes you can use within your code.
     *
     * Some common use cases include
     *
     * Generating all possible prefixed version of a CSS property
     * ```js
     * var rule = Modernizr._prefixes.join('transform: rotate(20deg); ');
     *
     * rule === 'transform: rotate(20deg); webkit-transform: rotate(20deg); moz-transform: rotate(20deg); o-transform: rotate(20deg); ms-transform: rotate(20deg);'
     * ```
     *
     * Generating all possible prefixed version of a CSS value
     * ```js
     * rule = 'display:' +  Modernizr._prefixes.join('flex; display:') + 'flex';
     *
     * rule === 'display:flex; display:-webkit-flex; display:-moz-flex; display:-o-flex; display:-ms-flex; display:flex'
     * ```
     */

        // we use ['',''] rather than an empty array in order to allow a pattern of .`join()`ing prefixes to test
        // values in feature detects to continue to work
    var prefixes = (ModernizrProto._config.usePrefixes ? ' -webkit- -moz- -o- -ms- '.split(' ') : ['','']);

    // expose these for the plugin API. Look in the source for how to join() them against your input
    ModernizrProto._prefixes = prefixes;



    /**
     * is returns a boolean if the typeof an obj is exactly type.
     *
     * @access private
     * @function is
     * @param {*} obj - A thing we want to check the type of
     * @param {string} type - A string to compare the typeof against
     * @returns {boolean}
     */

    function is(obj, type) {
        return typeof obj === type;
    }
    ;

    /**
     * Run through all tests and detect their support in the current UA.
     *
     * @access private
     */

    function testRunner() {
        var featureNames;
        var feature;
        var aliasIdx;
        var result;
        var nameIdx;
        var featureName;
        var featureNameSplit;

        for (var featureIdx in tests) {
            if (tests.hasOwnProperty(featureIdx)) {
                featureNames = [];
                feature = tests[featureIdx];
                // run the test, throw the return value into the Modernizr,
                // then based on that boolean, define an appropriate className
                // and push it into an array of classes we'll join later.
                //
                // If there is no name, it's an 'async' test that is run,
                // but not directly added to the object. That should
                // be done with a post-run addTest call.
                if (feature.name) {
                    featureNames.push(feature.name.toLowerCase());

                    if (feature.options && feature.options.aliases && feature.options.aliases.length) {
                        // Add all the aliases into the names list
                        for (aliasIdx = 0; aliasIdx < feature.options.aliases.length; aliasIdx++) {
                            featureNames.push(feature.options.aliases[aliasIdx].toLowerCase());
                        }
                    }
                }

                // Run the test, or use the raw value if it's not a function
                result = is(feature.fn, 'function') ? feature.fn() : feature.fn;


                // Set each of the names on the Modernizr object
                for (nameIdx = 0; nameIdx < featureNames.length; nameIdx++) {
                    featureName = featureNames[nameIdx];
                    // Support dot properties as sub tests. We don't do checking to make sure
                    // that the implied parent tests have been added. You must call them in
                    // order (either in the test, or make the parent test a dependency).
                    //
                    // Cap it to TWO to make the logic simple and because who needs that kind of subtesting
                    // hashtag famous last words
                    featureNameSplit = featureName.split('.');

                    if (featureNameSplit.length === 1) {
                        Modernizr[featureNameSplit[0]] = result;
                    } else {
                        // cast to a Boolean, if not one already
                        if (Modernizr[featureNameSplit[0]] && !(Modernizr[featureNameSplit[0]] instanceof Boolean)) {
                            Modernizr[featureNameSplit[0]] = new Boolean(Modernizr[featureNameSplit[0]]);
                        }

                        Modernizr[featureNameSplit[0]][featureNameSplit[1]] = result;
                    }

                    classes.push((result ? '' : 'no-') + featureNameSplit.join('-'));
                }
            }
        }
    }
    ;

    /**
     * docElement is a convenience wrapper to grab the root element of the document
     *
     * @access private
     * @returns {HTMLElement|SVGElement} The root element of the document
     */

    var docElement = document.documentElement;


    /**
     * A convenience helper to check if the document we are running in is an SVG document
     *
     * @access private
     * @returns {boolean}
     */

    var isSVG = docElement.nodeName.toLowerCase() === 'svg';


    /**
     * setClasses takes an array of class names and adds them to the root element
     *
     * @access private
     * @function setClasses
     * @param {string[]} classes - Array of class names
     */

    // Pass in an and array of class names, e.g.:
    //  ['no-webp', 'borderradius', ...]
    function setClasses(classes) {
        var className = docElement.className;
        var classPrefix = Modernizr._config.classPrefix || '';

        if (isSVG) {
            className = className.baseVal;
        }

        // Change `no-js` to `js` (independently of the `enableClasses` option)
        // Handle classPrefix on this too
        if (Modernizr._config.enableJSClass) {
            var reJS = new RegExp('(^|\\s)' + classPrefix + 'no-js(\\s|$)');
            className = className.replace(reJS, '$1' + classPrefix + 'js$2');
        }

        if (Modernizr._config.enableClasses) {
            // Add the new classes
            className += ' ' + classPrefix + classes.join(' ' + classPrefix);
            if (isSVG) {
                docElement.className.baseVal = className;
            } else {
                docElement.className = className;
            }
        }

    }

    ;

    /**
     * @optionName html5shiv
     * @optionProp html5shiv
     */

        // Take the html5 variable out of the html5shiv scope so we can return it.
    var html5;
    if (!isSVG) {
        /**
         * @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
         */
;(function(window,document){var version='3.7.3';var options=window.html5||{};var reSkip=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;var saveClones=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;var supportsHtml5Styles;var expando='_html5shiv';var expanID=0;var expandoData={};var supportsUnknownElements;(function(){try{var a=document.createElement('a');a.innerHTML='<xyz></xyz>';supportsHtml5Styles=('hidden' in a);supportsUnknownElements=a.childNodes.length==1||(function(){(document.createElement)('a');var frag=document.createDocumentFragment();return(typeof frag.cloneNode=='undefined'||typeof frag.createDocumentFragment=='undefined'||typeof frag.createElement=='undefined')}())}catch(e){supportsHtml5Styles=!0;supportsUnknownElements=!0}}());function addStyleSheet(ownerDocument,cssText){var p=ownerDocument.createElement('p'),parent=ownerDocument.getElementsByTagName('head')[0]||ownerDocument.documentElement;p.innerHTML='x<style>'+cssText+'</style>';return parent.insertBefore(p.lastChild,parent.firstChild)}
function getElements(){var elements=html5.elements;return typeof elements=='string'?elements.split(' '):elements}
function addElements(newElements,ownerDocument){var elements=html5.elements;if(typeof elements!='string'){elements=elements.join(' ')}
if(typeof newElements!='string'){newElements=newElements.join(' ')}
html5.elements=elements+' '+newElements;shivDocument(ownerDocument)}
function getExpandoData(ownerDocument){var data=expandoData[ownerDocument[expando]];if(!data){data={};expanID++;ownerDocument[expando]=expanID;expandoData[expanID]=data}
return data}
function createElement(nodeName,ownerDocument,data){if(!ownerDocument){ownerDocument=document}
if(supportsUnknownElements){return ownerDocument.createElement(nodeName)}
if(!data){data=getExpandoData(ownerDocument)}
var node;if(data.cache[nodeName]){node=data.cache[nodeName].cloneNode()}else if(saveClones.test(nodeName)){node=(data.cache[nodeName]=data.createElem(nodeName)).cloneNode()}else{node=data.createElem(nodeName)}
return node.canHaveChildren&&!reSkip.test(nodeName)&&!node.tagUrn?data.frag.appendChild(node):node}
function createDocumentFragment(ownerDocument,data){if(!ownerDocument){ownerDocument=document}
if(supportsUnknownElements){return ownerDocument.createDocumentFragment()}
data=data||getExpandoData(ownerDocument);var clone=data.frag.cloneNode(),i=0,elems=getElements(),l=elems.length;for(;i<l;i++){clone.createElement(elems[i])}
return clone}
function shivMethods(ownerDocument,data){if(!data.cache){data.cache={};data.createElem=ownerDocument.createElement;data.createFrag=ownerDocument.createDocumentFragment;data.frag=data.createFrag()}
ownerDocument.createElement=function(nodeName){if(!html5.shivMethods){return data.createElem(nodeName)}
return createElement(nodeName,ownerDocument,data)};ownerDocument.createDocumentFragment=Function('h,f','return function(){'+'var n=f.cloneNode(),c=n.createElement;'+'h.shivMethods&&('+getElements().join().replace(/[\w\-:]+/g,function(nodeName){data.createElem(nodeName);data.frag.createElement(nodeName);return'c("'+nodeName+'")'})+');return n}')(html5,data.frag)}
function shivDocument(ownerDocument){if(!ownerDocument){ownerDocument=document}
var data=getExpandoData(ownerDocument);if(html5.shivCSS&&!supportsHtml5Styles&&!data.hasCSS){data.hasCSS=!!addStyleSheet(ownerDocument,'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}'+'mark{background:#FF0;color:#000}'+'template{display:none}')}
if(!supportsUnknownElements){shivMethods(ownerDocument,data)}
return ownerDocument}
var html5={'elements':options.elements||'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video','version':version,'shivCSS':(options.shivCSS!==!1),'supportsUnknownElements':supportsUnknownElements,'shivMethods':(options.shivMethods!==!1),'type':'default','shivDocument':shivDocument,createElement:createElement,createDocumentFragment:createDocumentFragment,addElements:addElements};window.html5=html5;shivDocument(document);if(typeof module=='object'&&module.exports){module.exports=html5}}(typeof window!=='undefined'?window:this,document))};var omPrefixes='Moz O ms Webkit';var domPrefixes=(ModernizrProto._config.usePrefixes?omPrefixes.toLowerCase().split(' '):[]);ModernizrProto._domPrefixes=domPrefixes;function cssToDOM(name){return name.replace(/([a-z])-([a-z])/g,function(str,m1,m2){return m1+m2.toUpperCase()}).replace(/^-/,'')};function createElement(){if(typeof document.createElement!=='function'){return document.createElement(arguments[0])}else if(isSVG){return document.createElementNS.call(document,'http://www.w3.org/2000/svg',arguments[0])}else{return document.createElement.apply(document,arguments)}};/*!
     {
     "name": "CSS Calc",
     "property": "csscalc",
     "caniuse": "calc",
     "tags": ["css"],
     "builderAliases": ["css_calc"],
     "authors": ["@calvein"]
     }
     !*/
Modernizr.addTest('csscalc',function(){var prop='width:';var value='calc(10px);';var el=createElement('a');el.style.cssText=prop+prefixes.join(value+prop);return!!el.style.length});/*!
     {
     "name": "CSS Gradients",
     "caniuse": "css-gradients",
     "property": "cssgradients",
     "tags": ["css"],
     "knownBugs": ["False-positives on webOS (https://github.com/Modernizr/Modernizr/issues/202)"],
     "notes": [{
     "name": "Webkit Gradient Syntax",
     "href": "https://webkit.org/blog/175/introducing-css-gradients/"
     },{
     "name": "Linear Gradient Syntax",
     "href": "https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient"
     },{
     "name": "W3C Gradient Spec",
     "href": "https://drafts.csswg.org/css-images-3/#gradients"
     }]
     }
     !*/
Modernizr.addTest('cssgradients',function(){var str1='background-image:';var str2='gradient(linear,left top,right bottom,from(#9f9),to(white));';var css='';var angle;for(var i=0,len=prefixes.length-1;i<len;i++){angle=(i===0?'to ':'');css+=str1+prefixes[i]+'linear-gradient('+angle+'left top, #9f9, white);'}
if(Modernizr._config.usePrefixes){css+=str1+'-webkit-'+str2}
var elem=createElement('a');var style=elem.style;style.cssText=css;return(''+style.backgroundImage).indexOf('gradient')>-1});var cssomPrefixes=(ModernizrProto._config.usePrefixes?omPrefixes.split(' '):[]);ModernizrProto._cssomPrefixes=cssomPrefixes;var atRule=function(prop){var length=prefixes.length;var cssrule=window.CSSRule;var rule;if(typeof cssrule==='undefined'){return undefined}
if(!prop){return!1}
prop=prop.replace(/^@/,'');rule=prop.replace(/-/g,'_').toUpperCase()+'_RULE';if(rule in cssrule){return'@'+prop}
for(var i=0;i<length;i++){var prefix=prefixes[i];var thisRule=prefix.toUpperCase()+'_'+rule;if(thisRule in cssrule){return'@-'+prefix.toLowerCase()+'-'+prop}}
return!1};ModernizrProto.atRule=atRule;function contains(str,substr){return!!~(''+str).indexOf(substr)};function getBody(){var body=document.body;if(!body){body=createElement(isSVG?'svg':'body');body.fake=!0}
return body};function injectElementWithStyles(rule,callback,nodes,testnames){var mod='modernizr';var style;var ret;var node;var docOverflow;var div=createElement('div');var body=getBody();if(parseInt(nodes,10)){while(nodes--){node=createElement('div');node.id=testnames?testnames[nodes]:mod+(nodes+1);div.appendChild(node)}}
style=createElement('style');style.type='text/css';style.id='s'+mod;(!body.fake?div:body).appendChild(style);body.appendChild(div);if(style.styleSheet){style.styleSheet.cssText=rule}else{style.appendChild(document.createTextNode(rule))}
div.id=mod;if(body.fake){body.style.background='';body.style.overflow='hidden';docOverflow=docElement.style.overflow;docElement.style.overflow='hidden';docElement.appendChild(body)}
ret=callback(div,rule);if(body.fake){body.parentNode.removeChild(body);docElement.style.overflow=docOverflow;docElement.offsetHeight}else{div.parentNode.removeChild(div)}
return!!ret};var testStyles=ModernizrProto.testStyles=injectElementWithStyles;function fnBind(fn,that){return function(){return fn.apply(that,arguments)}};function testDOMProps(props,obj,elem){var item;for(var i in props){if(props[i]in obj){if(elem===!1){return props[i]}
item=obj[props[i]];if(is(item,'function')){return fnBind(item,elem||obj)}
return item}}
return!1};var modElem={elem:createElement('modernizr')};Modernizr._q.push(function(){delete modElem.elem});var mStyle={style:modElem.elem.style};Modernizr._q.unshift(function(){delete mStyle.style});function domToCSS(name){return name.replace(/([A-Z])/g,function(str,m1){return'-'+m1.toLowerCase()}).replace(/^ms-/,'-ms-')};function computedStyle(elem,pseudo,prop){var result;if('getComputedStyle' in window){result=getComputedStyle.call(window,elem,pseudo);var console=window.console;if(result!==null){if(prop){result=result.getPropertyValue(prop)}}else{if(console){var method=console.error?'error':'log';console[method].call(console,'getComputedStyle returning null, its possible modernizr test results are inaccurate')}}}else{result=!pseudo&&elem.currentStyle&&elem.currentStyle[prop]}
return result};function nativeTestProps(props,value){var i=props.length;if('CSS' in window&&'supports' in window.CSS){while(i--){if(window.CSS.supports(domToCSS(props[i]),value)){return!0}}
return!1}else if('CSSSupportsRule' in window){var conditionText=[];while(i--){conditionText.push('('+domToCSS(props[i])+':'+value+')')}
conditionText=conditionText.join(' or ');return injectElementWithStyles('@supports ('+conditionText+') { #modernizr { position: absolute; } }',function(node){return computedStyle(node,null,'position')=='absolute'})}
return undefined};function testProps(props,prefixed,value,skipValueTest){skipValueTest=is(skipValueTest,'undefined')?!1:skipValueTest;if(!is(value,'undefined')){var result=nativeTestProps(props,value);if(!is(result,'undefined')){return result}}
var afterInit,i,propsLength,prop,before;var elems=['modernizr','tspan','samp'];while(!mStyle.style&&elems.length){afterInit=!0;mStyle.modElem=createElement(elems.shift());mStyle.style=mStyle.modElem.style}
function cleanElems(){if(afterInit){delete mStyle.style;delete mStyle.modElem}}
propsLength=props.length;for(i=0;i<propsLength;i++){prop=props[i];before=mStyle.style[prop];if(contains(prop,'-')){prop=cssToDOM(prop)}
if(mStyle.style[prop]!==undefined){if(!skipValueTest&&!is(value,'undefined')){try{mStyle.style[prop]=value}catch(e){}
if(mStyle.style[prop]!=before){cleanElems();return prefixed=='pfx'?prop:!0}}else{cleanElems();return prefixed=='pfx'?prop:!0}}}
cleanElems();return!1};var testProp=ModernizrProto.testProp=function(prop,value,useValue){return testProps([prop],undefined,value,useValue)};function testPropsAll(prop,prefixed,elem,value,skipValueTest){var ucProp=prop.charAt(0).toUpperCase()+prop.slice(1),props=(prop+' '+cssomPrefixes.join(ucProp+' ')+ucProp).split(' ');if(is(prefixed,'string')||is(prefixed,'undefined')){return testProps(props,prefixed,value,skipValueTest)}else{props=(prop+' '+(domPrefixes).join(ucProp+' ')+ucProp).split(' ');return testDOMProps(props,prefixed,elem)}}
ModernizrProto.testAllProps=testPropsAll;var prefixed=ModernizrProto.prefixed=function(prop,obj,elem){if(prop.indexOf('@')===0){return atRule(prop)}
if(prop.indexOf('-')!=-1){prop=cssToDOM(prop)}
if(!obj){return testPropsAll(prop,'pfx')}else{return testPropsAll(prop,obj,elem)}};function testAllProps(prop,value,skipValueTest){return testPropsAll(prop,undefined,undefined,value,skipValueTest)}
ModernizrProto.testAllProps=testAllProps;/*!
     {
     "name": "Flexbox",
     "property": "flexbox",
     "caniuse": "flexbox",
     "tags": ["css"],
     "notes": [{
     "name": "The _new_ flexbox",
     "href": "http://dev.w3.org/csswg/css3-flexbox"
     }],
     "warnings": [
     "A `true` result for this detect does not imply that the `flex-wrap` property is supported; see the `flexwrap` detect."
     ]
     }
     !*/
Modernizr.addTest('flexbox',testAllProps('flexBasis','1px',!0));/*!
     {
     "name": "CSS Transforms",
     "property": "csstransforms",
     "caniuse": "transforms2d",
     "tags": ["css"]
     }
     !*/
Modernizr.addTest('csstransforms',function(){return navigator.userAgent.indexOf('Android 2.')===-1&&testAllProps('transform','scale(1)',!0)});/*!
     {
     "name": "CSS Transitions",
     "property": "csstransitions",
     "caniuse": "css-transitions",
     "tags": ["css"]
     }
     !*/
Modernizr.addTest('csstransitions',testAllProps('transition','all',!0));/*!
     {
     "name": "Touch Events",
     "property": "touchevents",
     "caniuse" : "touch",
     "tags": ["media", "attribute"],
     "notes": [{
     "name": "Touch Events spec",
     "href": "https://www.w3.org/TR/2013/WD-touch-events-20130124/"
     }],
     "warnings": [
     "Indicates if the browser supports the Touch Events spec, and does not necessarily reflect a touchscreen device"
     ],
     "knownBugs": [
     "False-positive on some configurations of Nokia N900",
     "False-positive on some BlackBerry 6.0 builds – https://github.com/Modernizr/Modernizr/issues/372#issuecomment-3112695"
     ]
     }
     !*/
Modernizr.addTest('touchevents',function(){var bool;if(('ontouchstart' in window)||window.DocumentTouch&&document instanceof DocumentTouch){bool=!0}else{var query=['@media (',prefixes.join('touch-enabled),('),'heartz',')','{#modernizr{top:9px;position:absolute}}'].join('');testStyles(query,function(node){bool=node.offsetTop===9})}
return bool});testRunner();setClasses(classes);delete ModernizrProto.addTest;delete ModernizrProto.addAsyncTest;for(var i=0;i<Modernizr._q.length;i++){Modernizr._q[i]()}
window.Modernizr=Modernizr})(window,document)