/******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ 		}
/******/ 	};
/******/
/******/ 	// define __esModule on exports
/******/ 	__webpack_require__.r = function(exports) {
/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 		}
/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
/******/ 	};
/******/
/******/ 	// create a fake namespace object
/******/ 	// mode & 1: value is a module id, require it
/******/ 	// mode & 2: merge all properties of value into the ns
/******/ 	// mode & 4: return value when already ns object
/******/ 	// mode & 8|1: behave like require
/******/ 	__webpack_require__.t = function(value, mode) {
/******/ 		if(mode & 1) value = __webpack_require__(value);
/******/ 		if(mode & 8) return value;
/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ 		var ns = Object.create(null);
/******/ 		__webpack_require__.r(ns);
/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ 		return ns;
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = 2);
/******/ })
/************************************************************************/
/******/ ({

/***/ "./assets/src/common/file-upload-icon.vue":
/*!************************************************!*\
  !*** ./assets/src/common/file-upload-icon.vue ***!
  \************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _file_upload_icon_vue_vue_type_template_id_e19b3122___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./file-upload-icon.vue?vue&type=template&id=e19b3122& */ \"./assets/src/common/file-upload-icon.vue?vue&type=template&id=e19b3122&\");\n/* harmony import */ var _file_upload_icon_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./file-upload-icon.vue?vue&type=script&lang=js& */ \"./assets/src/common/file-upload-icon.vue?vue&type=script&lang=js&\");\n/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _file_upload_icon_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _file_upload_icon_vue_vue_type_template_id_e19b3122___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _file_upload_icon_vue_vue_type_template_id_e19b3122___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"assets/src/common/file-upload-icon.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n//# sourceURL=webpack:///./assets/src/common/file-upload-icon.vue?");

/***/ }),

/***/ "./assets/src/common/file-upload-icon.vue?vue&type=script&lang=js&":
/*!*************************************************************************!*\
  !*** ./assets/src/common/file-upload-icon.vue?vue&type=script&lang=js& ***!
  \*************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_file_upload_icon_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib!../../../node_modules/vue-loader/lib??vue-loader-options!./file-upload-icon.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./assets/src/common/file-upload-icon.vue?vue&type=script&lang=js&\");\n/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_file_upload_icon_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n//# sourceURL=webpack:///./assets/src/common/file-upload-icon.vue?");

/***/ }),

/***/ "./assets/src/common/file-upload-icon.vue?vue&type=template&id=e19b3122&":
/*!*******************************************************************************!*\
  !*** ./assets/src/common/file-upload-icon.vue?vue&type=template&id=e19b3122& ***!
  \*******************************************************************************/
/*! exports provided: render, staticRenderFns */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_upload_icon_vue_vue_type_template_id_e19b3122___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./file-upload-icon.vue?vue&type=template&id=e19b3122& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./assets/src/common/file-upload-icon.vue?vue&type=template&id=e19b3122&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_upload_icon_vue_vue_type_template_id_e19b3122___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_upload_icon_vue_vue_type_template_id_e19b3122___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n//# sourceURL=webpack:///./assets/src/common/file-upload-icon.vue?");

/***/ }),

/***/ "./assets/src/mockups/js/collections/collection.media.js":
/*!***************************************************************!*\
  !*** ./assets/src/mockups/js/collections/collection.media.js ***!
  \***************************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../config */ \"./assets/src/mockups/js/config.js\");\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_config__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _models_model_media__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../models/model.media */ \"./assets/src/mockups/js/models/model.media.js\");\n\n\nph.api.collections.Media = wp.api.collections.Media.extend({\n  model: ph.api.models.Media\n});\n\n//# sourceURL=webpack:///./assets/src/mockups/js/collections/collection.media.js?");

/***/ }),

/***/ "./assets/src/mockups/js/config.js":
/*!*****************************************!*\
  !*** ./assets/src/mockups/js/config.js ***!
  \*****************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\r\n * Initialise the PH_API.\r\n */\nfunction PH_API() {\n  this.me = {};\n  this.global = {};\n  this.models = {};\n  this.collections = {};\n  this.views = {};\n}\n\nwindow.ph = window.ph || {};\nph.api = ph.api || new PH_API(); // add file uploads plugin to namespace\n\nph.api.plugins = ph.api.plugins || {};\nph.api.plugins.fileUploads = {};\n\n//# sourceURL=webpack:///./assets/src/mockups/js/config.js?");

/***/ }),

/***/ "./assets/src/mockups/js/main.js":
/*!***************************************!*\
  !*** ./assets/src/mockups/js/main.js ***!
  \***************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _models_model_mockup_thread__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./models/model.mockup-thread */ \"./assets/src/mockups/js/models/model.mockup-thread.js\");\n/* harmony import */ var _models_model_comment__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./models/model.comment */ \"./assets/src/mockups/js/models/model.comment.js\");\n/* harmony import */ var _models_model_comment__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_models_model_comment__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _views_view_comment__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./views/view.comment */ \"./assets/src/mockups/js/views/view.comment.js\");\n/* harmony import */ var _views_view_comment_bubble__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./views/view.comment-bubble */ \"./assets/src/mockups/js/views/view.comment-bubble.js\");\n// include models\n\n // include extended views\n\n\n\n\n//# sourceURL=webpack:///./assets/src/mockups/js/main.js?");

/***/ }),

/***/ "./assets/src/mockups/js/models/model.comment.js":
/*!*******************************************************!*\
  !*** ./assets/src/mockups/js/models/model.comment.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\r\n * Hook into website thread initialize\r\n */\nph.api.hooks.addAction(\"ph.api.models.Comment.initialize\", \"ph.api.plugins.fileUploads\", function (model) {\n  model.initializeAttachments();\n});\n/**\r\n * Extend model prototype functions with our own\r\n */\n\n_.extend(ph.api.models.Comment.prototype, {\n  validate: function (attrs, options) {\n    if (!attrs.content || attrs.content === \"<p><br></p>\") {\n      if (!attrs.attachment_ids || attrs.attachment_ids.length === 0) {\n        return PH_Settings.translations.no_comment_text;\n      }\n    }\n  },\n  initializeAttachments: function () {\n    this.set(\"attachment_ids\", this.get(\"attachment_ids\") || []); // set empty attachment objects collection\n\n    this.set(\"attachments\", new ph.api.collections.Media(this.get(\"attachment_ids\"))); // start attachments\n    // we'll delay getting attachments until the comment bubble is shown\n\n    this.listenTo(this.collection, \"show\", this.getAttachments); // get attachments when a comment is added\n\n    this.listenTo(this, \"add\", this.getAttachments); // remove attachment id from comment when an attachment is destroyed\n\n    this.listenTo(this.get(\"attachments\"), \"destroy\", this.removeAttachmentID); // fetch attachments\n\n    _.bindAll(this, \"getAttachments\");\n  },\n  // fetch the attachments for a comment\n  getAttachments: function () {\n    // bail if no attachments\n    if (_.isEmpty(this.get(\"attachment_ids\"))) {\n      return;\n    } // already fetched\n\n\n    if (this.get(\"attachments\") && this.get(\"attachments\").first() && this.get(\"attachments\").first().get(\"id\")) {\n      return;\n    } // fetch attachments by ids\n\n\n    this.get(\"attachments\").fetch({\n      data: {\n        include: this.get(\"attachment_ids\") // only include these attachment ids\n\n      },\n      reset: true // start from scratch\n\n    });\n  },\n\n  /**\r\n   * Remove attachment id when attachment is destroyed\r\n   * @param model\r\n   */\n  removeAttachmentID: function (model) {\n    this.save({\n      attachment_ids: _.without(this.get(\"attachment_ids\"), model.id)\n    }, {\n      patch: true\n    });\n  }\n});\n\n//# sourceURL=webpack:///./assets/src/mockups/js/models/model.comment.js?");

/***/ }),

/***/ "./assets/src/mockups/js/models/model.media.js":
/*!*****************************************************!*\
  !*** ./assets/src/mockups/js/models/model.media.js ***!
  \*****************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.get */ \"./node_modules/lodash.get/index.js\");\n/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_get__WEBPACK_IMPORTED_MODULE_0__);\n// mime type to extension\nvar mime = __webpack_require__(/*! mime-to-extensions */ \"./node_modules/mime-to-extensions/index.js\");\n\n\nph.api.models.Media = wp.api.models.Media.extend(_.defaults({\n  // extend defaults\n  defaults: _.defaults({}, wp.api.models.Media.prototype.defaults, {\n    progress: 0,\n    // upload progress\n    can_delete: false,\n    thumbnail: \"\"\n  }),\n  requireForceForDelete: true,\n  // need to force delete attachments\n  initialize: function () {\n    this.setExtension();\n    this.setModeration();\n    this.setThumbnail();\n    this.listenTo(this, \"sync\", this.setExtension); // set extension after sync\n\n    this.listenTo(this, \"sync\", this.setModeration); // set moderation after sync\n\n    this.listenTo(this, \"sync\", this.setThumbnail); // set thumbnail\n\n    this.listenTo(this, \"progress\", this.setProgress);\n  },\n  setModeration: function () {\n    this.set({\n      can_delete: this.canDelete()\n    });\n  },\n  // set deletion parameter (for vanity only)\n  canDelete: function () {\n    if (ph.api.me.can(\"moderate_comments\")) {\n      return true;\n    }\n\n    return this.get(\"author\") === ph.api.me.get(\"id\");\n  },\n  setProgress: function (progress) {\n    this.set(\"progress\", progress);\n  },\n  setExtension: function () {\n    this.get(\"mime_type\") && this.set(\"extension\", mime.extension(this.get(\"mime_type\")));\n  },\n  setThumbnail: function () {\n    if (this.get(\"source_url\")) {\n      this.set(\"thumbnail\", lodash_get__WEBPACK_IMPORTED_MODULE_0___default()(this.get(\"media_details\"), \"sizes.ph_comment_attachment.source_url\"));\n    }\n  }\n}, ph.api.Model));\n\n//# sourceURL=webpack:///./assets/src/mockups/js/models/model.media.js?");

/***/ }),

/***/ "./assets/src/mockups/js/models/model.mockup-thread.js":
/*!*************************************************************!*\
  !*** ./assets/src/mockups/js/models/model.mockup-thread.js ***!
  \*************************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _collections_collection_media__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../collections/collection.media */ \"./assets/src/mockups/js/collections/collection.media.js\");\n\n/**\r\n * Hook into website thread initialize\r\n */\n\nph.api.hooks.addAction(\"ph.api.models.MockupThread.initialize\", \"ph.api.plugins.fileUploads\", function (model) {\n  model.initializeAttachments();\n});\n/**\r\n * Extend model prototype functions with our own\r\n */\n\n_.extend(ph.api.models.MockupThread.prototype, {\n  initializeAttachments: function () {\n    // set new default for attach\n    ph.api.models.MockupThread.prototype.defaults.attach = []; // set attachments in models\n\n    this.set(\"attachments\", new ph.api.collections.Media(this.get(\"attachments\") || [])); // fetch attachments when bubble is shown\n\n    this.listenTo(this, \"change:show change:hover\", this.maybeShowCollection);\n    this.maybeShowCollection(); // save attachment data with new comment\n\n    ph.api.hooks.addFilter(\"ph_new_comment_data\", \"ph.api.plugins.fileUploads\", _.bind(this.attachments, this)); // maybe allow empty comment content if there are attachments\n\n    ph.api.hooks.addFilter('ph.api.validations.content_empty', 'ph.api.plugins.fileUploads', _.bind(this.maybeAllowEmpty, this));\n  },\n\n  /**\r\n   * Bubble down show event onto collection\r\n   */\n  maybeShowCollection: function () {\n    if (this.get(\"show\") || this.get(\"hover\")) {\n      this.get(\"comments\").trigger(\"show\", this); // trigger fetch\n    }\n  },\n  // add attachments data to comment model\n  attachments: function (data, model) {\n    // bail if not our model\n    if (!this.isNew() && this.id !== model.id) {\n      return data;\n    } // add attachment ids\n\n\n    data.attachment_ids = this.get(\"attachments\").pluck(\"id\"); // reset\n\n    this.get(\"attachments\").reset(); // return data\n\n    return data;\n  },\n  // maybe allow empty comment content if there are attachments\n  maybeAllowEmpty: function (allow, attrs) {\n    // content is not empty if attachments\n    if (attrs.attachment_ids && attrs.attachment_ids.length) {\n      return false;\n    } // if it has comments, check those for empty attachments\n\n\n    if (attrs.comments) {\n      var empty = true;\n      attrs.comments.forEach(function (comment) {\n        if (comment.get('attachment_ids') && comment.get('attachment_ids').length) {\n          empty = false;\n        }\n      });\n\n      if (!empty) {\n        return false;\n      }\n    }\n\n    return allow;\n  }\n});\n\n//# sourceURL=webpack:///./assets/src/mockups/js/models/model.mockup-thread.js?");

/***/ }),

/***/ "./assets/src/mockups/js/views/view.attachment-thumbnail.js":
/*!******************************************************************!*\
  !*** ./assets/src/mockups/js/views/view.attachment-thumbnail.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("ph.api.views.AttachmentThumbnail = ph.api.View.extend({\n  template: wp.template(\"file-attachment-thumb\"),\n  className: \"ph-file-attachment-thumbnail\",\n  events: {\n    \"click .ph-close-icon\": \"deleteAttachment\"\n  },\n  initialize: function () {\n    this.listenTo(this.model, \"sync change:progress progress\", this.render); // re-render after sync\n\n    this.listenTo(this.model, \"error\", this.remove);\n  },\n  deleteAttachment: function () {\n    if (confirm(PH_Settings.translations.are_you_sure)) {\n      this.model.destroy(); // Remove view from DOM\n\n      this.remove();\n      Backbone.View.prototype.remove.call(this);\n    }\n\n    return false;\n  }\n});\n\n//# sourceURL=webpack:///./assets/src/mockups/js/views/view.attachment-thumbnail.js?");

/***/ }),

/***/ "./assets/src/mockups/js/views/view.comment-attachment-thumbnail.js":
/*!**************************************************************************!*\
  !*** ./assets/src/mockups/js/views/view.comment-attachment-thumbnail.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("ph.api.views.CommentAttachmentThumbnail = ph.api.View.extend({\n  template: wp.template(\"comment-file-attachment-thumb\"),\n  className: \"ph-file-attachment-thumbnail\",\n  events: {\n    \"click .ph-close-icon\": \"deleteAttachment\"\n  },\n  initialize: function () {\n    this.listenTo(this.model, \"sync\", this.render); // re-render after sync\n  },\n  deleteAttachment: function () {\n    vex.dialog.confirm({\n      message: PH_Settings.translations.are_you_sure,\n      callback: function (value) {\n        if (value) {\n          this.model.destroy(); // Remove view from DOM\n\n          this.remove();\n          Backbone.View.prototype.remove.call(this);\n        }\n      }.bind(this)\n    });\n    return false;\n  }\n});\n\n//# sourceURL=webpack:///./assets/src/mockups/js/views/view.comment-attachment-thumbnail.js?");

/***/ }),

/***/ "./assets/src/mockups/js/views/view.comment-bubble.js":
/*!************************************************************!*\
  !*** ./assets/src/mockups/js/views/view.comment-bubble.js ***!
  \************************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _views_view_attachment_thumbnail__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../views/view.attachment-thumbnail */ \"./assets/src/mockups/js/views/view.attachment-thumbnail.js\");\n/* harmony import */ var _views_view_attachment_thumbnail__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_views_view_attachment_thumbnail__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _common_file_upload_icon_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @common/file-upload-icon.vue */ \"./assets/src/common/file-upload-icon.vue\");\n\n // extend comment bubble\n\nph.api.views.CommentBubble = ph.api.views.CommentBubble.extend({\n  initialize: function () {\n    this.constructor.__super__.initialize.apply(this, arguments); // add thumbnail preview view when thumbnail is added\n\n\n    this.listenTo(this.model.get(\"attachments\"), \"add\", this.addThumbnail); // clear thumbnail preview views when comment is submitted\n\n    this.listenTo(this.model, \"submit\", this.clearThumbnails);\n  },\n\n  ready() {\n    // this.constructor.__super__.ready.apply(this, arguments);\n    this.addIcon();\n  },\n\n  addIcon: function () {\n    if (this.uploadIcon) {\n      return;\n    } // create subview\n\n\n    this.$(\".ph-form-controls-right\").append('<div id=\"ph-file-uploads-icon\"></div>'); // file upload\n\n    let upload = new _common_file_upload_icon_vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"]({\n      el: this.$(\"#ph-file-uploads-icon\")[0]\n    });\n    upload.$on(\"upload\", files => {\n      upload.disableSubmit(); // add file\n\n      var args = {\n        file: files[0]\n      }; // add post if we have one\n\n      if (!this.model.isNew()) {\n        args.post = this.model.get(\"id\");\n      } // create the attachment as soon as it's uploaded\n\n\n      this.model.get(\"attachments\").create(args, {\n        // need to pass as form data\n        formData: true,\n        // re-enable submit when complete, no matter what\n        complete: () => {\n          upload.enableSubmit();\n        },\n        success: () => {\n          upload.enableSubmit();\n        },\n        error: (model, response) => {\n          upload.enableSubmit();\n          this.model.get(\"attachments\").remove(model);\n          console.error(arguments);\n\n          if (_get(response, \"responseJSON.message\")) {\n            vex.dialog.alert(response.responseJSON.message);\n          } else {\n            alert(\"Something went wrong. Please reload the page and try again.\");\n          }\n        }\n      });\n    });\n  },\n  // Add the thumbnail preview views\n  addThumbnail: function (model) {\n    this.views.add(\".ph-attachment-container\", new ph.api.views.AttachmentThumbnail({\n      model: model\n    }));\n  },\n  // clear thumbnail preview views\n  clearThumbnails: function () {\n    this.views.unset(this.views.get(\".ph-attachment-container\"));\n  }\n});\n\n//# sourceURL=webpack:///./assets/src/mockups/js/views/view.comment-bubble.js?");

/***/ }),

/***/ "./assets/src/mockups/js/views/view.comment.js":
/*!*****************************************************!*\
  !*** ./assets/src/mockups/js/views/view.comment.js ***!
  \*****************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _views_view_comment_attachment_thumbnail__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../views/view.comment-attachment-thumbnail */ \"./assets/src/mockups/js/views/view.comment-attachment-thumbnail.js\");\n/* harmony import */ var _views_view_comment_attachment_thumbnail__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_views_view_comment_attachment_thumbnail__WEBPACK_IMPORTED_MODULE_0__);\n\n/**\r\n * View to show our individual comment item\r\n *\r\n * @since 1.0\r\n */\n\nph.api.views.Comment = ph.api.views.Comment.extend({\n  initialize: function () {\n    this.constructor.__super__.initialize.apply(this, arguments);\n\n    this.setAttachments(); // sets placeholders\n\n    this.listenTo(this.model.get(\"attachments\"), \"update reset\", this.setAttachments);\n  },\n  setAttachments: function () {\n    var views = [];\n    this.model.get(\"attachments\").forEach(function (attachment) {\n      views.push(new ph.api.views.CommentAttachmentThumbnail({\n        model: attachment\n      }));\n    }, this);\n    this.views.set(\".ph-comment-attachment-container\", views);\n  }\n});\n\n//# sourceURL=webpack:///./assets/src/mockups/js/views/view.comment.js?");

/***/ }),

/***/ "./assets/src/mockups/scss/_main.scss":
/*!********************************************!*\
  !*** ./assets/src/mockups/scss/_main.scss ***!
  \********************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("throw new Error(\"Module build failed (from ./node_modules/mini-css-extract-plugin/dist/loader.js):\\nModuleBuildError: Module build failed (from ./node_modules/postcss-loader/lib/index.js):\\nBrowserslistError: Unknown browser query `dead`\\n    at error (C:\\\\Users\\\\sushm\\\\Local Sites\\\\projecthuddle\\\\app\\\\public\\\\wp-content\\\\plugins\\\\project-huddle\\\\addons\\\\ph-file-uploads\\\\node_modules\\\\autoprefixer\\\\node_modules\\\\browserslist\\\\index.js:37:11)\\n    at C:\\\\Users\\\\sushm\\\\Local Sites\\\\projecthuddle\\\\app\\\\public\\\\wp-content\\\\plugins\\\\project-huddle\\\\addons\\\\ph-file-uploads\\\\node_modules\\\\autoprefixer\\\\node_modules\\\\browserslist\\\\index.js:222:9\\n    at Array.forEach (<anonymous>)\\n    at browserslist (C:\\\\Users\\\\sushm\\\\Local Sites\\\\projecthuddle\\\\app\\\\public\\\\wp-content\\\\plugins\\\\project-huddle\\\\addons\\\\ph-file-uploads\\\\node_modules\\\\autoprefixer\\\\node_modules\\\\browserslist\\\\index.js:196:13)\\n    at Browsers.parse (C:\\\\Users\\\\sushm\\\\Local Sites\\\\projecthuddle\\\\app\\\\public\\\\wp-content\\\\plugins\\\\project-huddle\\\\addons\\\\ph-file-uploads\\\\node_modules\\\\autoprefixer\\\\lib\\\\browsers.js:44:14)\\n    at new Browsers (C:\\\\Users\\\\sushm\\\\Local Sites\\\\projecthuddle\\\\app\\\\public\\\\wp-content\\\\plugins\\\\project-huddle\\\\addons\\\\ph-file-uploads\\\\node_modules\\\\autoprefixer\\\\lib\\\\browsers.js:39:28)\\n    at loadPrefixes (C:\\\\Users\\\\sushm\\\\Local Sites\\\\projecthuddle\\\\app\\\\public\\\\wp-content\\\\plugins\\\\project-huddle\\\\addons\\\\ph-file-uploads\\\\node_modules\\\\autoprefixer\\\\lib\\\\autoprefixer.js:56:18)\\n    at plugin (C:\\\\Users\\\\sushm\\\\Local Sites\\\\projecthuddle\\\\app\\\\public\\\\wp-content\\\\plugins\\\\project-huddle\\\\addons\\\\ph-file-uploads\\\\node_modules\\\\autoprefixer\\\\lib\\\\autoprefixer.js:62:18)\\n    at LazyResult.run (C:\\\\Users\\\\sushm\\\\Local Sites\\\\projecthuddle\\\\app\\\\public\\\\wp-content\\\\plugins\\\\project-huddle\\\\addons\\\\ph-file-uploads\\\\node_modules\\\\postcss-loader\\\\node_modules\\\\postcss\\\\lib\\\\lazy-result.js:277:20)\\n    at LazyResult.asyncTick (C:\\\\Users\\\\sushm\\\\Local Sites\\\\projecthuddle\\\\app\\\\public\\\\wp-content\\\\plugins\\\\project-huddle\\\\addons\\\\ph-file-uploads\\\\node_modules\\\\postcss-loader\\\\node_modules\\\\postcss\\\\lib\\\\lazy-result.js:192:32)\\n    at C:\\\\Users\\\\sushm\\\\Local Sites\\\\projecthuddle\\\\app\\\\public\\\\wp-content\\\\plugins\\\\project-huddle\\\\addons\\\\ph-file-uploads\\\\node_modules\\\\postcss-loader\\\\node_modules\\\\postcss\\\\lib\\\\lazy-result.js:231:20\\n    at new Promise (<anonymous>)\\n    at LazyResult.async (C:\\\\Users\\\\sushm\\\\Local Sites\\\\projecthuddle\\\\app\\\\public\\\\wp-content\\\\plugins\\\\project-huddle\\\\addons\\\\ph-file-uploads\\\\node_modules\\\\postcss-loader\\\\node_modules\\\\postcss\\\\lib\\\\lazy-result.js:228:27)\\n    at LazyResult.then (C:\\\\Users\\\\sushm\\\\Local Sites\\\\projecthuddle\\\\app\\\\public\\\\wp-content\\\\plugins\\\\project-huddle\\\\addons\\\\ph-file-uploads\\\\node_modules\\\\postcss-loader\\\\node_modules\\\\postcss\\\\lib\\\\lazy-result.js:134:21)\\n    at C:\\\\Users\\\\sushm\\\\Local Sites\\\\projecthuddle\\\\app\\\\public\\\\wp-content\\\\plugins\\\\project-huddle\\\\addons\\\\ph-file-uploads\\\\node_modules\\\\postcss-loader\\\\lib\\\\index.js:145:8\\n    at C:\\\\Users\\\\sushm\\\\Local Sites\\\\projecthuddle\\\\app\\\\public\\\\wp-content\\\\plugins\\\\project-huddle\\\\addons\\\\ph-file-uploads\\\\node_modules\\\\webpack\\\\lib\\\\NormalModule.js:316:20\\n    at C:\\\\Users\\\\sushm\\\\Local Sites\\\\projecthuddle\\\\app\\\\public\\\\wp-content\\\\plugins\\\\project-huddle\\\\addons\\\\ph-file-uploads\\\\node_modules\\\\loader-runner\\\\lib\\\\LoaderRunner.js:367:11\\n    at C:\\\\Users\\\\sushm\\\\Local Sites\\\\projecthuddle\\\\app\\\\public\\\\wp-content\\\\plugins\\\\project-huddle\\\\addons\\\\ph-file-uploads\\\\node_modules\\\\loader-runner\\\\lib\\\\LoaderRunner.js:233:18\\n    at context.callback (C:\\\\Users\\\\sushm\\\\Local Sites\\\\projecthuddle\\\\app\\\\public\\\\wp-content\\\\plugins\\\\project-huddle\\\\addons\\\\ph-file-uploads\\\\node_modules\\\\loader-runner\\\\lib\\\\LoaderRunner.js:111:13)\\n    at C:\\\\Users\\\\sushm\\\\Local Sites\\\\projecthuddle\\\\app\\\\public\\\\wp-content\\\\plugins\\\\project-huddle\\\\addons\\\\ph-file-uploads\\\\node_modules\\\\postcss-loader\\\\lib\\\\index.js:194:71\");\n\n//# sourceURL=webpack:///./assets/src/mockups/scss/_main.scss?");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./assets/src/common/file-upload-icon.vue?vue&type=script&lang=js&":
/*!***********************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./assets/src/common/file-upload-icon.vue?vue&type=script&lang=js& ***!
  \***********************************************************************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm.js\");\n/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash.get */ \"./node_modules/lodash.get/index.js\");\n/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_get__WEBPACK_IMPORTED_MODULE_1__);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].extend({\n  data() {\n    return {\n      files: [],\n      submitButton: null\n    };\n  },\n\n  props: {},\n\n  mounted() {\n    this.submitButton = this.$el.closest(\".ph-comment-wrapper\").querySelectorAll(\".submit-comment\")[0];\n  },\n\n  computed: {\n    accepts() {\n      return PHF_Settings.types;\n    }\n\n  },\n  methods: {\n    addFile(e) {\n      if (!ph.api.me.can(\"upload_files\")) {\n        ph.api.Event.trigger(\"register\", this.model);\n        return;\n      }\n\n      this.$refs.file.click();\n    },\n\n    disableSubmit() {\n      this.submitButton.disabled = true;\n    },\n\n    enableSubmit() {\n      this.submitButton.disabled = false;\n    },\n\n    uploadImage(e) {\n      if (!this.$refs.file.files) {\n        return;\n      }\n\n      this.$emit(\"upload\", this.$refs.file.files);\n      this.$refs.file.value = \"\";\n    }\n\n  }\n}));\n\n//# sourceURL=webpack:///./assets/src/common/file-upload-icon.vue?./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options");

/***/ }),

/***/ "./node_modules/lodash.get/index.js":
/*!******************************************!*\
  !*** ./node_modules/lodash.get/index.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/* WEBPACK VAR INJECTION */(function(global) {/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    symbolTag = '[object Symbol]';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/,\n    reLeadingDot = /^\\./,\n    rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n  // Many host objects are `Object` objects that can coerce to strings\n  // despite having improperly defined `toString` methods.\n  var result = false;\n  if (value != null && typeof value.toString != 'function') {\n    try {\n      result = !!(value + '');\n    } catch (e) {}\n  }\n  return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n    funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n    splice = arrayProto.splice;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n    nativeCreate = getNative(Object, 'create');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries ? entries.length : 0;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries ? entries.length : 0;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries ? entries.length : 0;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  getMapData(this, key).set(key, value);\n  return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n  path = isKey(path, object) ? [path] : castPath(path);\n\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[toKey(path[index++])];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value) {\n  return isArray(value) ? value : stringToPath(value);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  if (isArray(value)) {\n    return false;\n  }\n  var type = typeof value;\n  if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n      value == null || isSymbol(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n    (object != null && value in Object(object));\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoize(function(string) {\n  string = toString(string);\n\n  var result = [];\n  if (reLeadingDot.test(string)) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, string) {\n    result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n  if (typeof value == 'string' || isSymbol(value)) {\n    return value;\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n  if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments,\n        key = resolver ? resolver.apply(this, args) : args[0],\n        cache = memoized.cache;\n\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result);\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 8-9 which returns 'object' for typed array and other constructors.\n  var tag = isObject(value) ? objectToString.call(value) : '';\n  return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n  var result = object == null ? undefined : baseGet(object, path);\n  return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///./node_modules/lodash.get/index.js?");

/***/ }),

/***/ "./node_modules/mime-db/db.json":
/*!**************************************!*\
  !*** ./node_modules/mime-db/db.json ***!
  \**************************************/
/*! exports provided: application/1d-interleaved-parityfec, application/3gpdash-qoe-report+xml, application/3gpp-ims+xml, application/a2l, application/activemessage, application/alto-costmap+json, application/alto-costmapfilter+json, application/alto-directory+json, application/alto-endpointcost+json, application/alto-endpointcostparams+json, application/alto-endpointprop+json, application/alto-endpointpropparams+json, application/alto-error+json, application/alto-networkmap+json, application/alto-networkmapfilter+json, application/aml, application/andrew-inset, application/applefile, application/applixware, application/atf, application/atfx, application/atom+xml, application/atomcat+xml, application/atomdeleted+xml, application/atomicmail, application/atomsvc+xml, application/atxml, application/auth-policy+xml, application/bacnet-xdd+zip, application/batch-smtp, application/bdoc, application/beep+xml, application/calendar+json, application/calendar+xml, application/call-completion, application/cals-1840, application/cbor, application/ccmp+xml, application/ccxml+xml, application/cdfx+xml, application/cdmi-capability, application/cdmi-container, application/cdmi-domain, application/cdmi-object, application/cdmi-queue, application/cdni, application/cea, application/cea-2018+xml, application/cellml+xml, application/cfw, application/clue_info+xml, application/cms, application/cnrp+xml, application/coap-group+json, application/commonground, application/conference-info+xml, application/cpl+xml, application/csrattrs, application/csta+xml, application/cstadata+xml, application/csvm+json, application/cu-seeme, application/cybercash, application/dart, application/dash+xml, application/dashdelta, application/davmount+xml, application/dca-rft, application/dcd, application/dec-dx, application/dialog-info+xml, application/dicom, application/dii, application/dit, application/dns, application/docbook+xml, application/dskpp+xml, application/dssc+der, application/dssc+xml, application/dvcs, application/ecmascript, application/edi-consent, application/edi-x12, application/edifact, application/efi, application/emergencycalldata.comment+xml, application/emergencycalldata.deviceinfo+xml, application/emergencycalldata.providerinfo+xml, application/emergencycalldata.serviceinfo+xml, application/emergencycalldata.subscriberinfo+xml, application/emma+xml, application/emotionml+xml, application/encaprtp, application/epp+xml, application/epub+zip, application/eshop, application/exi, application/fastinfoset, application/fastsoap, application/fdt+xml, application/fits, application/font-sfnt, application/font-tdpfr, application/font-woff, application/font-woff2, application/framework-attributes+xml, application/geo+json, application/gml+xml, application/gpx+xml, application/gxf, application/gzip, application/h224, application/held+xml, application/http, application/hyperstudio, application/ibe-key-request+xml, application/ibe-pkg-reply+xml, application/ibe-pp-data, application/iges, application/im-iscomposing+xml, application/index, application/index.cmd, application/index.obj, application/index.response, application/index.vnd, application/inkml+xml, application/iotp, application/ipfix, application/ipp, application/isup, application/its+xml, application/java-archive, application/java-serialized-object, application/java-vm, application/javascript, application/jose, application/jose+json, application/jrd+json, application/json, application/json-patch+json, application/json-seq, application/json5, application/jsonml+json, application/jwk+json, application/jwk-set+json, application/jwt, application/kpml-request+xml, application/kpml-response+xml, application/ld+json, application/lgr+xml, application/link-format, application/load-control+xml, application/lost+xml, application/lostsync+xml, application/lxf, application/mac-binhex40, application/mac-compactpro, application/macwriteii, application/mads+xml, application/manifest+json, application/marc, application/marcxml+xml, application/mathematica, application/mathml+xml, application/mathml-content+xml, application/mathml-presentation+xml, application/mbms-associated-procedure-description+xml, application/mbms-deregister+xml, application/mbms-envelope+xml, application/mbms-msk+xml, application/mbms-msk-response+xml, application/mbms-protection-description+xml, application/mbms-reception-report+xml, application/mbms-register+xml, application/mbms-register-response+xml, application/mbms-schedule+xml, application/mbms-user-service-description+xml, application/mbox, application/media-policy-dataset+xml, application/media_control+xml, application/mediaservercontrol+xml, application/merge-patch+json, application/metalink+xml, application/metalink4+xml, application/mets+xml, application/mf4, application/mikey, application/mods+xml, application/moss-keys, application/moss-signature, application/mosskey-data, application/mosskey-request, application/mp21, application/mp4, application/mpeg4-generic, application/mpeg4-iod, application/mpeg4-iod-xmt, application/mrb-consumer+xml, application/mrb-publish+xml, application/msc-ivr+xml, application/msc-mixer+xml, application/msword, application/mxf, application/nasdata, application/news-checkgroups, application/news-groupinfo, application/news-transmission, application/nlsml+xml, application/nss, application/ocsp-request, application/ocsp-response, application/octet-stream, application/oda, application/odx, application/oebps-package+xml, application/ogg, application/omdoc+xml, application/onenote, application/oxps, application/p2p-overlay+xml, application/parityfec, application/patch-ops-error+xml, application/pdf, application/pdx, application/pgp-encrypted, application/pgp-keys, application/pgp-signature, application/pics-rules, application/pidf+xml, application/pidf-diff+xml, application/pkcs10, application/pkcs12, application/pkcs7-mime, application/pkcs7-signature, application/pkcs8, application/pkix-attr-cert, application/pkix-cert, application/pkix-crl, application/pkix-pkipath, application/pkixcmp, application/pls+xml, application/poc-settings+xml, application/postscript, application/ppsp-tracker+json, application/problem+json, application/problem+xml, application/provenance+xml, application/prs.alvestrand.titrax-sheet, application/prs.cww, application/prs.hpub+zip, application/prs.nprend, application/prs.plucker, application/prs.rdf-xml-crypt, application/prs.xsf+xml, application/pskc+xml, application/qsig, application/raptorfec, application/rdap+json, application/rdf+xml, application/reginfo+xml, application/relax-ng-compact-syntax, application/remote-printing, application/reputon+json, application/resource-lists+xml, application/resource-lists-diff+xml, application/rfc+xml, application/riscos, application/rlmi+xml, application/rls-services+xml, application/rpki-ghostbusters, application/rpki-manifest, application/rpki-roa, application/rpki-updown, application/rsd+xml, application/rss+xml, application/rtf, application/rtploopback, application/rtx, application/samlassertion+xml, application/samlmetadata+xml, application/sbml+xml, application/scaip+xml, application/scim+json, application/scvp-cv-request, application/scvp-cv-response, application/scvp-vp-request, application/scvp-vp-response, application/sdp, application/sep+xml, application/sep-exi, application/session-info, application/set-payment, application/set-payment-initiation, application/set-registration, application/set-registration-initiation, application/sgml, application/sgml-open-catalog, application/shf+xml, application/sieve, application/simple-filter+xml, application/simple-message-summary, application/simplesymbolcontainer, application/slate, application/smil, application/smil+xml, application/smpte336m, application/soap+fastinfoset, application/soap+xml, application/sparql-query, application/sparql-results+xml, application/spirits-event+xml, application/sql, application/srgs, application/srgs+xml, application/sru+xml, application/ssdl+xml, application/ssml+xml, application/tamp-apex-update, application/tamp-apex-update-confirm, application/tamp-community-update, application/tamp-community-update-confirm, application/tamp-error, application/tamp-sequence-adjust, application/tamp-sequence-adjust-confirm, application/tamp-status-query, application/tamp-status-response, application/tamp-update, application/tamp-update-confirm, application/tar, application/tei+xml, application/thraud+xml, application/timestamp-query, application/timestamp-reply, application/timestamped-data, application/ttml+xml, application/tve-trigger, application/ulpfec, application/urc-grpsheet+xml, application/urc-ressheet+xml, application/urc-targetdesc+xml, application/urc-uisocketdesc+xml, application/vcard+json, application/vcard+xml, application/vemmi, application/vividence.scriptfile, application/vnd.3gpp-prose+xml, application/vnd.3gpp-prose-pc3ch+xml, application/vnd.3gpp.access-transfer-events+xml, application/vnd.3gpp.bsf+xml, application/vnd.3gpp.mid-call+xml, application/vnd.3gpp.pic-bw-large, application/vnd.3gpp.pic-bw-small, application/vnd.3gpp.pic-bw-var, application/vnd.3gpp.sms, application/vnd.3gpp.sms+xml, application/vnd.3gpp.srvcc-ext+xml, application/vnd.3gpp.srvcc-info+xml, application/vnd.3gpp.state-and-event-info+xml, application/vnd.3gpp.ussd+xml, application/vnd.3gpp2.bcmcsinfo+xml, application/vnd.3gpp2.sms, application/vnd.3gpp2.tcap, application/vnd.3lightssoftware.imagescal, application/vnd.3m.post-it-notes, application/vnd.accpac.simply.aso, application/vnd.accpac.simply.imp, application/vnd.acucobol, application/vnd.acucorp, application/vnd.adobe.air-application-installer-package+zip, application/vnd.adobe.flash.movie, application/vnd.adobe.formscentral.fcdt, application/vnd.adobe.fxp, application/vnd.adobe.partial-upload, application/vnd.adobe.xdp+xml, application/vnd.adobe.xfdf, application/vnd.aether.imp, application/vnd.ah-barcode, application/vnd.ahead.space, application/vnd.airzip.filesecure.azf, application/vnd.airzip.filesecure.azs, application/vnd.amazon.ebook, application/vnd.amazon.mobi8-ebook, application/vnd.americandynamics.acc, application/vnd.amiga.ami, application/vnd.amundsen.maze+xml, application/vnd.android.package-archive, application/vnd.anki, application/vnd.anser-web-certificate-issue-initiation, application/vnd.anser-web-funds-transfer-initiation, application/vnd.antix.game-component, application/vnd.apache.thrift.binary, application/vnd.apache.thrift.compact, application/vnd.apache.thrift.json, application/vnd.api+json, application/vnd.apple.installer+xml, application/vnd.apple.mpegurl, application/vnd.apple.pkpass, application/vnd.arastra.swi, application/vnd.aristanetworks.swi, application/vnd.artsquare, application/vnd.astraea-software.iota, application/vnd.audiograph, application/vnd.autopackage, application/vnd.avistar+xml, application/vnd.balsamiq.bmml+xml, application/vnd.balsamiq.bmpr, application/vnd.bekitzur-stech+json, application/vnd.biopax.rdf+xml, application/vnd.blueice.multipass, application/vnd.bluetooth.ep.oob, application/vnd.bluetooth.le.oob, application/vnd.bmi, application/vnd.businessobjects, application/vnd.cab-jscript, application/vnd.canon-cpdl, application/vnd.canon-lips, application/vnd.cendio.thinlinc.clientconf, application/vnd.century-systems.tcp_stream, application/vnd.chemdraw+xml, application/vnd.chess-pgn, application/vnd.chipnuts.karaoke-mmd, application/vnd.cinderella, application/vnd.cirpack.isdn-ext, application/vnd.citationstyles.style+xml, application/vnd.claymore, application/vnd.cloanto.rp9, application/vnd.clonk.c4group, application/vnd.cluetrust.cartomobile-config, application/vnd.cluetrust.cartomobile-config-pkg, application/vnd.coffeescript, application/vnd.collection+json, application/vnd.collection.doc+json, application/vnd.collection.next+json, application/vnd.comicbook+zip, application/vnd.commerce-battelle, application/vnd.commonspace, application/vnd.contact.cmsg, application/vnd.coreos.ignition+json, application/vnd.cosmocaller, application/vnd.crick.clicker, application/vnd.crick.clicker.keyboard, application/vnd.crick.clicker.palette, application/vnd.crick.clicker.template, application/vnd.crick.clicker.wordbank, application/vnd.criticaltools.wbs+xml, application/vnd.ctc-posml, application/vnd.ctct.ws+xml, application/vnd.cups-pdf, application/vnd.cups-postscript, application/vnd.cups-ppd, application/vnd.cups-raster, application/vnd.cups-raw, application/vnd.curl, application/vnd.curl.car, application/vnd.curl.pcurl, application/vnd.cyan.dean.root+xml, application/vnd.cybank, application/vnd.d2l.coursepackage1p0+zip, application/vnd.dart, application/vnd.data-vision.rdz, application/vnd.debian.binary-package, application/vnd.dece.data, application/vnd.dece.ttml+xml, application/vnd.dece.unspecified, application/vnd.dece.zip, application/vnd.denovo.fcselayout-link, application/vnd.desmume-movie, application/vnd.desmume.movie, application/vnd.dir-bi.plate-dl-nosuffix, application/vnd.dm.delegation+xml, application/vnd.dna, application/vnd.document+json, application/vnd.dolby.mlp, application/vnd.dolby.mobile.1, application/vnd.dolby.mobile.2, application/vnd.doremir.scorecloud-binary-document, application/vnd.dpgraph, application/vnd.dreamfactory, application/vnd.drive+json, application/vnd.ds-keypoint, application/vnd.dtg.local, application/vnd.dtg.local.flash, application/vnd.dtg.local.html, application/vnd.dvb.ait, application/vnd.dvb.dvbj, application/vnd.dvb.esgcontainer, application/vnd.dvb.ipdcdftnotifaccess, application/vnd.dvb.ipdcesgaccess, application/vnd.dvb.ipdcesgaccess2, application/vnd.dvb.ipdcesgpdd, application/vnd.dvb.ipdcroaming, application/vnd.dvb.iptv.alfec-base, application/vnd.dvb.iptv.alfec-enhancement, application/vnd.dvb.notif-aggregate-root+xml, application/vnd.dvb.notif-container+xml, application/vnd.dvb.notif-generic+xml, application/vnd.dvb.notif-ia-msglist+xml, application/vnd.dvb.notif-ia-registration-request+xml, application/vnd.dvb.notif-ia-registration-response+xml, application/vnd.dvb.notif-init+xml, application/vnd.dvb.pfr, application/vnd.dvb.service, application/vnd.dxr, application/vnd.dynageo, application/vnd.dzr, application/vnd.easykaraoke.cdgdownload, application/vnd.ecdis-update, application/vnd.ecowin.chart, application/vnd.ecowin.filerequest, application/vnd.ecowin.fileupdate, application/vnd.ecowin.series, application/vnd.ecowin.seriesrequest, application/vnd.ecowin.seriesupdate, application/vnd.emclient.accessrequest+xml, application/vnd.enliven, application/vnd.enphase.envoy, application/vnd.eprints.data+xml, application/vnd.epson.esf, application/vnd.epson.msf, application/vnd.epson.quickanime, application/vnd.epson.salt, application/vnd.epson.ssf, application/vnd.ericsson.quickcall, application/vnd.espass-espass+zip, application/vnd.eszigno3+xml, application/vnd.etsi.aoc+xml, application/vnd.etsi.asic-e+zip, application/vnd.etsi.asic-s+zip, application/vnd.etsi.cug+xml, application/vnd.etsi.iptvcommand+xml, application/vnd.etsi.iptvdiscovery+xml, application/vnd.etsi.iptvprofile+xml, application/vnd.etsi.iptvsad-bc+xml, application/vnd.etsi.iptvsad-cod+xml, application/vnd.etsi.iptvsad-npvr+xml, application/vnd.etsi.iptvservice+xml, application/vnd.etsi.iptvsync+xml, application/vnd.etsi.iptvueprofile+xml, application/vnd.etsi.mcid+xml, application/vnd.etsi.mheg5, application/vnd.etsi.overload-control-policy-dataset+xml, application/vnd.etsi.pstn+xml, application/vnd.etsi.sci+xml, application/vnd.etsi.simservs+xml, application/vnd.etsi.timestamp-token, application/vnd.etsi.tsl+xml, application/vnd.etsi.tsl.der, application/vnd.eudora.data, application/vnd.ezpix-album, application/vnd.ezpix-package, application/vnd.f-secure.mobile, application/vnd.fastcopy-disk-image, application/vnd.fdf, application/vnd.fdsn.mseed, application/vnd.fdsn.seed, application/vnd.ffsns, application/vnd.filmit.zfc, application/vnd.fints, application/vnd.firemonkeys.cloudcell, application/vnd.flographit, application/vnd.fluxtime.clip, application/vnd.font-fontforge-sfd, application/vnd.framemaker, application/vnd.frogans.fnc, application/vnd.frogans.ltf, application/vnd.fsc.weblaunch, application/vnd.fujitsu.oasys, application/vnd.fujitsu.oasys2, application/vnd.fujitsu.oasys3, application/vnd.fujitsu.oasysgp, application/vnd.fujitsu.oasysprs, application/vnd.fujixerox.art-ex, application/vnd.fujixerox.art4, application/vnd.fujixerox.ddd, application/vnd.fujixerox.docuworks, application/vnd.fujixerox.docuworks.binder, application/vnd.fujixerox.docuworks.container, application/vnd.fujixerox.hbpl, application/vnd.fut-misnet, application/vnd.fuzzysheet, application/vnd.genomatix.tuxedo, application/vnd.geo+json, application/vnd.geocube+xml, application/vnd.geogebra.file, application/vnd.geogebra.tool, application/vnd.geometry-explorer, application/vnd.geonext, application/vnd.geoplan, application/vnd.geospace, application/vnd.gerber, application/vnd.globalplatform.card-content-mgt, application/vnd.globalplatform.card-content-mgt-response, application/vnd.gmx, application/vnd.google-apps.document, application/vnd.google-apps.presentation, application/vnd.google-apps.spreadsheet, application/vnd.google-earth.kml+xml, application/vnd.google-earth.kmz, application/vnd.gov.sk.e-form+xml, application/vnd.gov.sk.e-form+zip, application/vnd.gov.sk.xmldatacontainer+xml, application/vnd.grafeq, application/vnd.gridmp, application/vnd.groove-account, application/vnd.groove-help, application/vnd.groove-identity-message, application/vnd.groove-injector, application/vnd.groove-tool-message, application/vnd.groove-tool-template, application/vnd.groove-vcard, application/vnd.hal+json, application/vnd.hal+xml, application/vnd.handheld-entertainment+xml, application/vnd.hbci, application/vnd.hcl-bireports, application/vnd.hdt, application/vnd.heroku+json, application/vnd.hhe.lesson-player, application/vnd.hp-hpgl, application/vnd.hp-hpid, application/vnd.hp-hps, application/vnd.hp-jlyt, application/vnd.hp-pcl, application/vnd.hp-pclxl, application/vnd.httphone, application/vnd.hydrostatix.sof-data, application/vnd.hyperdrive+json, application/vnd.hzn-3d-crossword, application/vnd.ibm.afplinedata, application/vnd.ibm.electronic-media, application/vnd.ibm.minipay, application/vnd.ibm.modcap, application/vnd.ibm.rights-management, application/vnd.ibm.secure-container, application/vnd.iccprofile, application/vnd.ieee.1905, application/vnd.igloader, application/vnd.immervision-ivp, application/vnd.immervision-ivu, application/vnd.ims.imsccv1p1, application/vnd.ims.imsccv1p2, application/vnd.ims.imsccv1p3, application/vnd.ims.lis.v2.result+json, application/vnd.ims.lti.v2.toolconsumerprofile+json, application/vnd.ims.lti.v2.toolproxy+json, application/vnd.ims.lti.v2.toolproxy.id+json, application/vnd.ims.lti.v2.toolsettings+json, application/vnd.ims.lti.v2.toolsettings.simple+json, application/vnd.informedcontrol.rms+xml, application/vnd.informix-visionary, application/vnd.infotech.project, application/vnd.infotech.project+xml, application/vnd.innopath.wamp.notification, application/vnd.insors.igm, application/vnd.intercon.formnet, application/vnd.intergeo, application/vnd.intertrust.digibox, application/vnd.intertrust.nncp, application/vnd.intu.qbo, application/vnd.intu.qfx, application/vnd.iptc.g2.catalogitem+xml, application/vnd.iptc.g2.conceptitem+xml, application/vnd.iptc.g2.knowledgeitem+xml, application/vnd.iptc.g2.newsitem+xml, application/vnd.iptc.g2.newsmessage+xml, application/vnd.iptc.g2.packageitem+xml, application/vnd.iptc.g2.planningitem+xml, application/vnd.ipunplugged.rcprofile, application/vnd.irepository.package+xml, application/vnd.is-xpr, application/vnd.isac.fcs, application/vnd.jam, application/vnd.japannet-directory-service, application/vnd.japannet-jpnstore-wakeup, application/vnd.japannet-payment-wakeup, application/vnd.japannet-registration, application/vnd.japannet-registration-wakeup, application/vnd.japannet-setstore-wakeup, application/vnd.japannet-verification, application/vnd.japannet-verification-wakeup, application/vnd.jcp.javame.midlet-rms, application/vnd.jisp, application/vnd.joost.joda-archive, application/vnd.jsk.isdn-ngn, application/vnd.kahootz, application/vnd.kde.karbon, application/vnd.kde.kchart, application/vnd.kde.kformula, application/vnd.kde.kivio, application/vnd.kde.kontour, application/vnd.kde.kpresenter, application/vnd.kde.kspread, application/vnd.kde.kword, application/vnd.kenameaapp, application/vnd.kidspiration, application/vnd.kinar, application/vnd.koan, application/vnd.kodak-descriptor, application/vnd.las.las+xml, application/vnd.liberty-request+xml, application/vnd.llamagraphics.life-balance.desktop, application/vnd.llamagraphics.life-balance.exchange+xml, application/vnd.lotus-1-2-3, application/vnd.lotus-approach, application/vnd.lotus-freelance, application/vnd.lotus-notes, application/vnd.lotus-organizer, application/vnd.lotus-screencam, application/vnd.lotus-wordpro, application/vnd.macports.portpkg, application/vnd.mapbox-vector-tile, application/vnd.marlin.drm.actiontoken+xml, application/vnd.marlin.drm.conftoken+xml, application/vnd.marlin.drm.license+xml, application/vnd.marlin.drm.mdcf, application/vnd.mason+json, application/vnd.maxmind.maxmind-db, application/vnd.mcd, application/vnd.medcalcdata, application/vnd.mediastation.cdkey, application/vnd.meridian-slingshot, application/vnd.mfer, application/vnd.mfmp, application/vnd.micro+json, application/vnd.micrografx.flo, application/vnd.micrografx.igx, application/vnd.microsoft.portable-executable, application/vnd.miele+json, application/vnd.mif, application/vnd.minisoft-hp3000-save, application/vnd.mitsubishi.misty-guard.trustweb, application/vnd.mobius.daf, application/vnd.mobius.dis, application/vnd.mobius.mbk, application/vnd.mobius.mqy, application/vnd.mobius.msl, application/vnd.mobius.plc, application/vnd.mobius.txf, application/vnd.mophun.application, application/vnd.mophun.certificate, application/vnd.motorola.flexsuite, application/vnd.motorola.flexsuite.adsi, application/vnd.motorola.flexsuite.fis, application/vnd.motorola.flexsuite.gotap, application/vnd.motorola.flexsuite.kmr, application/vnd.motorola.flexsuite.ttc, application/vnd.motorola.flexsuite.wem, application/vnd.motorola.iprm, application/vnd.mozilla.xul+xml, application/vnd.ms-3mfdocument, application/vnd.ms-artgalry, application/vnd.ms-asf, application/vnd.ms-cab-compressed, application/vnd.ms-color.iccprofile, application/vnd.ms-excel, application/vnd.ms-excel.addin.macroenabled.12, application/vnd.ms-excel.sheet.binary.macroenabled.12, application/vnd.ms-excel.sheet.macroenabled.12, application/vnd.ms-excel.template.macroenabled.12, application/vnd.ms-fontobject, application/vnd.ms-htmlhelp, application/vnd.ms-ims, application/vnd.ms-lrm, application/vnd.ms-office.activex+xml, application/vnd.ms-officetheme, application/vnd.ms-opentype, application/vnd.ms-package.obfuscated-opentype, application/vnd.ms-pki.seccat, application/vnd.ms-pki.stl, application/vnd.ms-playready.initiator+xml, application/vnd.ms-powerpoint, application/vnd.ms-powerpoint.addin.macroenabled.12, application/vnd.ms-powerpoint.presentation.macroenabled.12, application/vnd.ms-powerpoint.slide.macroenabled.12, application/vnd.ms-powerpoint.slideshow.macroenabled.12, application/vnd.ms-powerpoint.template.macroenabled.12, application/vnd.ms-printdevicecapabilities+xml, application/vnd.ms-printing.printticket+xml, application/vnd.ms-printschematicket+xml, application/vnd.ms-project, application/vnd.ms-tnef, application/vnd.ms-windows.devicepairing, application/vnd.ms-windows.nwprinting.oob, application/vnd.ms-windows.printerpairing, application/vnd.ms-windows.wsd.oob, application/vnd.ms-wmdrm.lic-chlg-req, application/vnd.ms-wmdrm.lic-resp, application/vnd.ms-wmdrm.meter-chlg-req, application/vnd.ms-wmdrm.meter-resp, application/vnd.ms-word.document.macroenabled.12, application/vnd.ms-word.template.macroenabled.12, application/vnd.ms-works, application/vnd.ms-wpl, application/vnd.ms-xpsdocument, application/vnd.msa-disk-image, application/vnd.mseq, application/vnd.msign, application/vnd.multiad.creator, application/vnd.multiad.creator.cif, application/vnd.music-niff, application/vnd.musician, application/vnd.muvee.style, application/vnd.mynfc, application/vnd.ncd.control, application/vnd.ncd.reference, application/vnd.nearst.inv+json, application/vnd.nervana, application/vnd.netfpx, application/vnd.neurolanguage.nlu, application/vnd.nintendo.nitro.rom, application/vnd.nintendo.snes.rom, application/vnd.nitf, application/vnd.noblenet-directory, application/vnd.noblenet-sealer, application/vnd.noblenet-web, application/vnd.nokia.catalogs, application/vnd.nokia.conml+wbxml, application/vnd.nokia.conml+xml, application/vnd.nokia.iptv.config+xml, application/vnd.nokia.isds-radio-presets, application/vnd.nokia.landmark+wbxml, application/vnd.nokia.landmark+xml, application/vnd.nokia.landmarkcollection+xml, application/vnd.nokia.n-gage.ac+xml, application/vnd.nokia.n-gage.data, application/vnd.nokia.n-gage.symbian.install, application/vnd.nokia.ncd, application/vnd.nokia.pcd+wbxml, application/vnd.nokia.pcd+xml, application/vnd.nokia.radio-preset, application/vnd.nokia.radio-presets, application/vnd.novadigm.edm, application/vnd.novadigm.edx, application/vnd.novadigm.ext, application/vnd.ntt-local.content-share, application/vnd.ntt-local.file-transfer, application/vnd.ntt-local.ogw_remote-access, application/vnd.ntt-local.sip-ta_remote, application/vnd.ntt-local.sip-ta_tcp_stream, application/vnd.oasis.opendocument.chart, application/vnd.oasis.opendocument.chart-template, application/vnd.oasis.opendocument.database, application/vnd.oasis.opendocument.formula, application/vnd.oasis.opendocument.formula-template, application/vnd.oasis.opendocument.graphics, application/vnd.oasis.opendocument.graphics-template, application/vnd.oasis.opendocument.image, application/vnd.oasis.opendocument.image-template, application/vnd.oasis.opendocument.presentation, application/vnd.oasis.opendocument.presentation-template, application/vnd.oasis.opendocument.spreadsheet, application/vnd.oasis.opendocument.spreadsheet-template, application/vnd.oasis.opendocument.text, application/vnd.oasis.opendocument.text-master, application/vnd.oasis.opendocument.text-template, application/vnd.oasis.opendocument.text-web, application/vnd.obn, application/vnd.oftn.l10n+json, application/vnd.oipf.contentaccessdownload+xml, application/vnd.oipf.contentaccessstreaming+xml, application/vnd.oipf.cspg-hexbinary, application/vnd.oipf.dae.svg+xml, application/vnd.oipf.dae.xhtml+xml, application/vnd.oipf.mippvcontrolmessage+xml, application/vnd.oipf.pae.gem, application/vnd.oipf.spdiscovery+xml, application/vnd.oipf.spdlist+xml, application/vnd.oipf.ueprofile+xml, application/vnd.oipf.userprofile+xml, application/vnd.olpc-sugar, application/vnd.oma-scws-config, application/vnd.oma-scws-http-request, application/vnd.oma-scws-http-response, application/vnd.oma.bcast.associated-procedure-parameter+xml, application/vnd.oma.bcast.drm-trigger+xml, application/vnd.oma.bcast.imd+xml, application/vnd.oma.bcast.ltkm, application/vnd.oma.bcast.notification+xml, application/vnd.oma.bcast.provisioningtrigger, application/vnd.oma.bcast.sgboot, application/vnd.oma.bcast.sgdd+xml, application/vnd.oma.bcast.sgdu, application/vnd.oma.bcast.simple-symbol-container, application/vnd.oma.bcast.smartcard-trigger+xml, application/vnd.oma.bcast.sprov+xml, application/vnd.oma.bcast.stkm, application/vnd.oma.cab-address-book+xml, application/vnd.oma.cab-feature-handler+xml, application/vnd.oma.cab-pcc+xml, application/vnd.oma.cab-subs-invite+xml, application/vnd.oma.cab-user-prefs+xml, application/vnd.oma.dcd, application/vnd.oma.dcdc, application/vnd.oma.dd2+xml, application/vnd.oma.drm.risd+xml, application/vnd.oma.group-usage-list+xml, application/vnd.oma.lwm2m+json, application/vnd.oma.lwm2m+tlv, application/vnd.oma.pal+xml, application/vnd.oma.poc.detailed-progress-report+xml, application/vnd.oma.poc.final-report+xml, application/vnd.oma.poc.groups+xml, application/vnd.oma.poc.invocation-descriptor+xml, application/vnd.oma.poc.optimized-progress-report+xml, application/vnd.oma.push, application/vnd.oma.scidm.messages+xml, application/vnd.oma.xcap-directory+xml, application/vnd.omads-email+xml, application/vnd.omads-file+xml, application/vnd.omads-folder+xml, application/vnd.omaloc-supl-init, application/vnd.onepager, application/vnd.openblox.game+xml, application/vnd.openblox.game-binary, application/vnd.openeye.oeb, application/vnd.openofficeorg.extension, application/vnd.openxmlformats-officedocument.custom-properties+xml, application/vnd.openxmlformats-officedocument.customxmlproperties+xml, application/vnd.openxmlformats-officedocument.drawing+xml, application/vnd.openxmlformats-officedocument.drawingml.chart+xml, application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml, application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml, application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml, application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml, application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml, application/vnd.openxmlformats-officedocument.extended-properties+xml, application/vnd.openxmlformats-officedocument.presentationml-template, application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml, application/vnd.openxmlformats-officedocument.presentationml.comments+xml, application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml, application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml, application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml, application/vnd.openxmlformats-officedocument.presentationml.presentation, application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml, application/vnd.openxmlformats-officedocument.presentationml.presprops+xml, application/vnd.openxmlformats-officedocument.presentationml.slide, application/vnd.openxmlformats-officedocument.presentationml.slide+xml, application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml, application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml, application/vnd.openxmlformats-officedocument.presentationml.slideshow, application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml, application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml, application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml, application/vnd.openxmlformats-officedocument.presentationml.tags+xml, application/vnd.openxmlformats-officedocument.presentationml.template, application/vnd.openxmlformats-officedocument.presentationml.template.main+xml, application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml, application/vnd.openxmlformats-officedocument.spreadsheetml-template, application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml, application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml, application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml, application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml, application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml, application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml, application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml, application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml, application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml, application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml, application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml, application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml, application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml, application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml, application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml, application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml, application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml, application/vnd.openxmlformats-officedocument.spreadsheetml.template, application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml, application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml, application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml, application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml, application/vnd.openxmlformats-officedocument.theme+xml, application/vnd.openxmlformats-officedocument.themeoverride+xml, application/vnd.openxmlformats-officedocument.vmldrawing, application/vnd.openxmlformats-officedocument.wordprocessingml-template, application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml, application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml, application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml, application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml, application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml, application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml, application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml, application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml, application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml, application/vnd.openxmlformats-officedocument.wordprocessingml.template, application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml, application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml, application/vnd.openxmlformats-package.core-properties+xml, application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml, application/vnd.openxmlformats-package.relationships+xml, application/vnd.oracle.resource+json, application/vnd.orange.indata, application/vnd.osa.netdeploy, application/vnd.osgeo.mapguide.package, application/vnd.osgi.bundle, application/vnd.osgi.dp, application/vnd.osgi.subsystem, application/vnd.otps.ct-kip+xml, application/vnd.oxli.countgraph, application/vnd.pagerduty+json, application/vnd.palm, application/vnd.panoply, application/vnd.paos+xml, application/vnd.paos.xml, application/vnd.pawaafile, application/vnd.pcos, application/vnd.pg.format, application/vnd.pg.osasli, application/vnd.piaccess.application-licence, application/vnd.picsel, application/vnd.pmi.widget, application/vnd.poc.group-advertisement+xml, application/vnd.pocketlearn, application/vnd.powerbuilder6, application/vnd.powerbuilder6-s, application/vnd.powerbuilder7, application/vnd.powerbuilder7-s, application/vnd.powerbuilder75, application/vnd.powerbuilder75-s, application/vnd.preminet, application/vnd.previewsystems.box, application/vnd.proteus.magazine, application/vnd.publishare-delta-tree, application/vnd.pvi.ptid1, application/vnd.pwg-multiplexed, application/vnd.pwg-xhtml-print+xml, application/vnd.qualcomm.brew-app-res, application/vnd.quarantainenet, application/vnd.quark.quarkxpress, application/vnd.quobject-quoxdocument, application/vnd.radisys.moml+xml, application/vnd.radisys.msml+xml, application/vnd.radisys.msml-audit+xml, application/vnd.radisys.msml-audit-conf+xml, application/vnd.radisys.msml-audit-conn+xml, application/vnd.radisys.msml-audit-dialog+xml, application/vnd.radisys.msml-audit-stream+xml, application/vnd.radisys.msml-conf+xml, application/vnd.radisys.msml-dialog+xml, application/vnd.radisys.msml-dialog-base+xml, application/vnd.radisys.msml-dialog-fax-detect+xml, application/vnd.radisys.msml-dialog-fax-sendrecv+xml, application/vnd.radisys.msml-dialog-group+xml, application/vnd.radisys.msml-dialog-speech+xml, application/vnd.radisys.msml-dialog-transform+xml, application/vnd.rainstor.data, application/vnd.rapid, application/vnd.rar, application/vnd.realvnc.bed, application/vnd.recordare.musicxml, application/vnd.recordare.musicxml+xml, application/vnd.renlearn.rlprint, application/vnd.rig.cryptonote, application/vnd.rim.cod, application/vnd.rn-realmedia, application/vnd.rn-realmedia-vbr, application/vnd.route66.link66+xml, application/vnd.rs-274x, application/vnd.ruckus.download, application/vnd.s3sms, application/vnd.sailingtracker.track, application/vnd.sbm.cid, application/vnd.sbm.mid2, application/vnd.scribus, application/vnd.sealed.3df, application/vnd.sealed.csf, application/vnd.sealed.doc, application/vnd.sealed.eml, application/vnd.sealed.mht, application/vnd.sealed.net, application/vnd.sealed.ppt, application/vnd.sealed.tiff, application/vnd.sealed.xls, application/vnd.sealedmedia.softseal.html, application/vnd.sealedmedia.softseal.pdf, application/vnd.seemail, application/vnd.sema, application/vnd.semd, application/vnd.semf, application/vnd.shana.informed.formdata, application/vnd.shana.informed.formtemplate, application/vnd.shana.informed.interchange, application/vnd.shana.informed.package, application/vnd.simtech-mindmapper, application/vnd.siren+json, application/vnd.smaf, application/vnd.smart.notebook, application/vnd.smart.teacher, application/vnd.software602.filler.form+xml, application/vnd.software602.filler.form-xml-zip, application/vnd.solent.sdkm+xml, application/vnd.spotfire.dxp, application/vnd.spotfire.sfs, application/vnd.sss-cod, application/vnd.sss-dtf, application/vnd.sss-ntf, application/vnd.stardivision.calc, application/vnd.stardivision.draw, application/vnd.stardivision.impress, application/vnd.stardivision.math, application/vnd.stardivision.writer, application/vnd.stardivision.writer-global, application/vnd.stepmania.package, application/vnd.stepmania.stepchart, application/vnd.street-stream, application/vnd.sun.wadl+xml, application/vnd.sun.xml.calc, application/vnd.sun.xml.calc.template, application/vnd.sun.xml.draw, application/vnd.sun.xml.draw.template, application/vnd.sun.xml.impress, application/vnd.sun.xml.impress.template, application/vnd.sun.xml.math, application/vnd.sun.xml.writer, application/vnd.sun.xml.writer.global, application/vnd.sun.xml.writer.template, application/vnd.sus-calendar, application/vnd.svd, application/vnd.swiftview-ics, application/vnd.symbian.install, application/vnd.syncml+xml, application/vnd.syncml.dm+wbxml, application/vnd.syncml.dm+xml, application/vnd.syncml.dm.notification, application/vnd.syncml.dmddf+wbxml, application/vnd.syncml.dmddf+xml, application/vnd.syncml.dmtnds+wbxml, application/vnd.syncml.dmtnds+xml, application/vnd.syncml.ds.notification, application/vnd.tao.intent-module-archive, application/vnd.tcpdump.pcap, application/vnd.tmd.mediaflex.api+xml, application/vnd.tml, application/vnd.tmobile-livetv, application/vnd.trid.tpt, application/vnd.triscape.mxs, application/vnd.trueapp, application/vnd.truedoc, application/vnd.ubisoft.webplayer, application/vnd.ufdl, application/vnd.uiq.theme, application/vnd.umajin, application/vnd.unity, application/vnd.uoml+xml, application/vnd.uplanet.alert, application/vnd.uplanet.alert-wbxml, application/vnd.uplanet.bearer-choice, application/vnd.uplanet.bearer-choice-wbxml, application/vnd.uplanet.cacheop, application/vnd.uplanet.cacheop-wbxml, application/vnd.uplanet.channel, application/vnd.uplanet.channel-wbxml, application/vnd.uplanet.list, application/vnd.uplanet.list-wbxml, application/vnd.uplanet.listcmd, application/vnd.uplanet.listcmd-wbxml, application/vnd.uplanet.signal, application/vnd.uri-map, application/vnd.valve.source.material, application/vnd.vcx, application/vnd.vd-study, application/vnd.vectorworks, application/vnd.vel+json, application/vnd.verimatrix.vcas, application/vnd.vidsoft.vidconference, application/vnd.visio, application/vnd.visionary, application/vnd.vividence.scriptfile, application/vnd.vsf, application/vnd.wap.sic, application/vnd.wap.slc, application/vnd.wap.wbxml, application/vnd.wap.wmlc, application/vnd.wap.wmlscriptc, application/vnd.webturbo, application/vnd.wfa.p2p, application/vnd.wfa.wsc, application/vnd.windows.devicepairing, application/vnd.wmc, application/vnd.wmf.bootstrap, application/vnd.wolfram.mathematica, application/vnd.wolfram.mathematica.package, application/vnd.wolfram.player, application/vnd.wordperfect, application/vnd.wqd, application/vnd.wrq-hp3000-labelled, application/vnd.wt.stf, application/vnd.wv.csp+wbxml, application/vnd.wv.csp+xml, application/vnd.wv.ssp+xml, application/vnd.xacml+json, application/vnd.xara, application/vnd.xfdl, application/vnd.xfdl.webform, application/vnd.xmi+xml, application/vnd.xmpie.cpkg, application/vnd.xmpie.dpkg, application/vnd.xmpie.plan, application/vnd.xmpie.ppkg, application/vnd.xmpie.xlim, application/vnd.yamaha.hv-dic, application/vnd.yamaha.hv-script, application/vnd.yamaha.hv-voice, application/vnd.yamaha.openscoreformat, application/vnd.yamaha.openscoreformat.osfpvg+xml, application/vnd.yamaha.remote-setup, application/vnd.yamaha.smaf-audio, application/vnd.yamaha.smaf-phrase, application/vnd.yamaha.through-ngn, application/vnd.yamaha.tunnel-udpencap, application/vnd.yaoweme, application/vnd.yellowriver-custom-menu, application/vnd.zul, application/vnd.zzazz.deck+xml, application/voicexml+xml, application/vq-rtcpxr, application/watcherinfo+xml, application/whoispp-query, application/whoispp-response, application/widget, application/winhlp, application/wita, application/wordperfect5.1, application/wsdl+xml, application/wspolicy+xml, application/x-7z-compressed, application/x-abiword, application/x-ace-compressed, application/x-amf, application/x-apple-diskimage, application/x-authorware-bin, application/x-authorware-map, application/x-authorware-seg, application/x-bcpio, application/x-bdoc, application/x-bittorrent, application/x-blorb, application/x-bzip, application/x-bzip2, application/x-cbr, application/x-cdlink, application/x-cfs-compressed, application/x-chat, application/x-chess-pgn, application/x-chrome-extension, application/x-cocoa, application/x-compress, application/x-conference, application/x-cpio, application/x-csh, application/x-deb, application/x-debian-package, application/x-dgc-compressed, application/x-director, application/x-doom, application/x-dtbncx+xml, application/x-dtbook+xml, application/x-dtbresource+xml, application/x-dvi, application/x-envoy, application/x-eva, application/x-font-bdf, application/x-font-dos, application/x-font-framemaker, application/x-font-ghostscript, application/x-font-libgrx, application/x-font-linux-psf, application/x-font-otf, application/x-font-pcf, application/x-font-snf, application/x-font-speedo, application/x-font-sunos-news, application/x-font-ttf, application/x-font-type1, application/x-font-vfont, application/x-freearc, application/x-futuresplash, application/x-gca-compressed, application/x-glulx, application/x-gnumeric, application/x-gramps-xml, application/x-gtar, application/x-gzip, application/x-hdf, application/x-httpd-php, application/x-install-instructions, application/x-iso9660-image, application/x-java-archive-diff, application/x-java-jnlp-file, application/x-javascript, application/x-latex, application/x-lua-bytecode, application/x-lzh-compressed, application/x-makeself, application/x-mie, application/x-mobipocket-ebook, application/x-mpegurl, application/x-ms-application, application/x-ms-shortcut, application/x-ms-wmd, application/x-ms-wmz, application/x-ms-xbap, application/x-msaccess, application/x-msbinder, application/x-mscardfile, application/x-msclip, application/x-msdos-program, application/x-msdownload, application/x-msmediaview, application/x-msmetafile, application/x-msmoney, application/x-mspublisher, application/x-msschedule, application/x-msterminal, application/x-mswrite, application/x-netcdf, application/x-ns-proxy-autoconfig, application/x-nzb, application/x-perl, application/x-pilot, application/x-pkcs12, application/x-pkcs7-certificates, application/x-pkcs7-certreqresp, application/x-rar-compressed, application/x-redhat-package-manager, application/x-research-info-systems, application/x-sea, application/x-sh, application/x-shar, application/x-shockwave-flash, application/x-silverlight-app, application/x-sql, application/x-stuffit, application/x-stuffitx, application/x-subrip, application/x-sv4cpio, application/x-sv4crc, application/x-t3vm-image, application/x-tads, application/x-tar, application/x-tcl, application/x-tex, application/x-tex-tfm, application/x-texinfo, application/x-tgif, application/x-ustar, application/x-wais-source, application/x-web-app-manifest+json, application/x-www-form-urlencoded, application/x-x509-ca-cert, application/x-xfig, application/x-xliff+xml, application/x-xpinstall, application/x-xz, application/x-zmachine, application/x400-bp, application/xacml+xml, application/xaml+xml, application/xcap-att+xml, application/xcap-caps+xml, application/xcap-diff+xml, application/xcap-el+xml, application/xcap-error+xml, application/xcap-ns+xml, application/xcon-conference-info+xml, application/xcon-conference-info-diff+xml, application/xenc+xml, application/xhtml+xml, application/xhtml-voice+xml, application/xml, application/xml-dtd, application/xml-external-parsed-entity, application/xml-patch+xml, application/xmpp+xml, application/xop+xml, application/xproc+xml, application/xslt+xml, application/xspf+xml, application/xv+xml, application/yang, application/yin+xml, application/zip, application/zlib, audio/1d-interleaved-parityfec, audio/32kadpcm, audio/3gpp, audio/3gpp2, audio/ac3, audio/adpcm, audio/amr, audio/amr-wb, audio/amr-wb+, audio/aptx, audio/asc, audio/atrac-advanced-lossless, audio/atrac-x, audio/atrac3, audio/basic, audio/bv16, audio/bv32, audio/clearmode, audio/cn, audio/dat12, audio/dls, audio/dsr-es201108, audio/dsr-es202050, audio/dsr-es202211, audio/dsr-es202212, audio/dv, audio/dvi4, audio/eac3, audio/encaprtp, audio/evrc, audio/evrc-qcp, audio/evrc0, audio/evrc1, audio/evrcb, audio/evrcb0, audio/evrcb1, audio/evrcnw, audio/evrcnw0, audio/evrcnw1, audio/evrcwb, audio/evrcwb0, audio/evrcwb1, audio/evs, audio/fwdred, audio/g711-0, audio/g719, audio/g722, audio/g7221, audio/g723, audio/g726-16, audio/g726-24, audio/g726-32, audio/g726-40, audio/g728, audio/g729, audio/g7291, audio/g729d, audio/g729e, audio/gsm, audio/gsm-efr, audio/gsm-hr-08, audio/ilbc, audio/ip-mr_v2.5, audio/isac, audio/l16, audio/l20, audio/l24, audio/l8, audio/lpc, audio/midi, audio/mobile-xmf, audio/mp3, audio/mp4, audio/mp4a-latm, audio/mpa, audio/mpa-robust, audio/mpeg, audio/mpeg4-generic, audio/musepack, audio/ogg, audio/opus, audio/parityfec, audio/pcma, audio/pcma-wb, audio/pcmu, audio/pcmu-wb, audio/prs.sid, audio/qcelp, audio/raptorfec, audio/red, audio/rtp-enc-aescm128, audio/rtp-midi, audio/rtploopback, audio/rtx, audio/s3m, audio/silk, audio/smv, audio/smv-qcp, audio/smv0, audio/sp-midi, audio/speex, audio/t140c, audio/t38, audio/telephone-event, audio/tone, audio/uemclip, audio/ulpfec, audio/vdvi, audio/vmr-wb, audio/vnd.3gpp.iufp, audio/vnd.4sb, audio/vnd.audiokoz, audio/vnd.celp, audio/vnd.cisco.nse, audio/vnd.cmles.radio-events, audio/vnd.cns.anp1, audio/vnd.cns.inf1, audio/vnd.dece.audio, audio/vnd.digital-winds, audio/vnd.dlna.adts, audio/vnd.dolby.heaac.1, audio/vnd.dolby.heaac.2, audio/vnd.dolby.mlp, audio/vnd.dolby.mps, audio/vnd.dolby.pl2, audio/vnd.dolby.pl2x, audio/vnd.dolby.pl2z, audio/vnd.dolby.pulse.1, audio/vnd.dra, audio/vnd.dts, audio/vnd.dts.hd, audio/vnd.dvb.file, audio/vnd.everad.plj, audio/vnd.hns.audio, audio/vnd.lucent.voice, audio/vnd.ms-playready.media.pya, audio/vnd.nokia.mobile-xmf, audio/vnd.nortel.vbk, audio/vnd.nuera.ecelp4800, audio/vnd.nuera.ecelp7470, audio/vnd.nuera.ecelp9600, audio/vnd.octel.sbc, audio/vnd.qcelp, audio/vnd.rhetorex.32kadpcm, audio/vnd.rip, audio/vnd.rn-realaudio, audio/vnd.sealedmedia.softseal.mpeg, audio/vnd.vmx.cvsd, audio/vnd.wave, audio/vorbis, audio/vorbis-config, audio/wav, audio/wave, audio/webm, audio/x-aac, audio/x-aiff, audio/x-caf, audio/x-flac, audio/x-m4a, audio/x-matroska, audio/x-mpegurl, audio/x-ms-wax, audio/x-ms-wma, audio/x-pn-realaudio, audio/x-pn-realaudio-plugin, audio/x-realaudio, audio/x-tta, audio/x-wav, audio/xm, chemical/x-cdx, chemical/x-cif, chemical/x-cmdf, chemical/x-cml, chemical/x-csml, chemical/x-pdb, chemical/x-xyz, font/opentype, image/bmp, image/cgm, image/dicom-rle, image/emf, image/fits, image/g3fax, image/gif, image/ief, image/jls, image/jp2, image/jpeg, image/jpm, image/jpx, image/ktx, image/naplps, image/pjpeg, image/png, image/prs.btif, image/prs.pti, image/pwg-raster, image/sgi, image/svg+xml, image/t38, image/tiff, image/tiff-fx, image/vnd.adobe.photoshop, image/vnd.airzip.accelerator.azv, image/vnd.cns.inf2, image/vnd.dece.graphic, image/vnd.djvu, image/vnd.dvb.subtitle, image/vnd.dwg, image/vnd.dxf, image/vnd.fastbidsheet, image/vnd.fpx, image/vnd.fst, image/vnd.fujixerox.edmics-mmr, image/vnd.fujixerox.edmics-rlc, image/vnd.globalgraphics.pgb, image/vnd.microsoft.icon, image/vnd.mix, image/vnd.mozilla.apng, image/vnd.ms-modi, image/vnd.ms-photo, image/vnd.net-fpx, image/vnd.radiance, image/vnd.sealed.png, image/vnd.sealedmedia.softseal.gif, image/vnd.sealedmedia.softseal.jpg, image/vnd.svf, image/vnd.tencent.tap, image/vnd.valve.source.texture, image/vnd.wap.wbmp, image/vnd.xiff, image/vnd.zbrush.pcx, image/webp, image/wmf, image/x-3ds, image/x-cmu-raster, image/x-cmx, image/x-freehand, image/x-icon, image/x-jng, image/x-mrsid-image, image/x-ms-bmp, image/x-pcx, image/x-pict, image/x-portable-anymap, image/x-portable-bitmap, image/x-portable-graymap, image/x-portable-pixmap, image/x-rgb, image/x-tga, image/x-xbitmap, image/x-xcf, image/x-xpixmap, image/x-xwindowdump, message/cpim, message/delivery-status, message/disposition-notification, message/external-body, message/feedback-report, message/global, message/global-delivery-status, message/global-disposition-notification, message/global-headers, message/http, message/imdn+xml, message/news, message/partial, message/rfc822, message/s-http, message/sip, message/sipfrag, message/tracking-status, message/vnd.si.simp, message/vnd.wfa.wsc, model/gltf+json, model/iges, model/mesh, model/vnd.collada+xml, model/vnd.dwf, model/vnd.flatland.3dml, model/vnd.gdl, model/vnd.gs-gdl, model/vnd.gs.gdl, model/vnd.gtw, model/vnd.moml+xml, model/vnd.mts, model/vnd.opengex, model/vnd.parasolid.transmit.binary, model/vnd.parasolid.transmit.text, model/vnd.rosette.annotated-data-model, model/vnd.valve.source.compiled-map, model/vnd.vtu, model/vrml, model/x3d+binary, model/x3d+fastinfoset, model/x3d+vrml, model/x3d+xml, model/x3d-vrml, multipart/alternative, multipart/appledouble, multipart/byteranges, multipart/digest, multipart/encrypted, multipart/form-data, multipart/header-set, multipart/mixed, multipart/parallel, multipart/related, multipart/report, multipart/signed, multipart/voice-message, multipart/x-mixed-replace, text/1d-interleaved-parityfec, text/cache-manifest, text/calendar, text/calender, text/cmd, text/coffeescript, text/css, text/csv, text/csv-schema, text/directory, text/dns, text/ecmascript, text/encaprtp, text/enriched, text/fwdred, text/grammar-ref-list, text/hjson, text/html, text/jade, text/javascript, text/jcr-cnd, text/jsx, text/less, text/markdown, text/mathml, text/mizar, text/n3, text/parameters, text/parityfec, text/plain, text/provenance-notation, text/prs.fallenstein.rst, text/prs.lines.tag, text/prs.prop.logic, text/raptorfec, text/red, text/rfc822-headers, text/richtext, text/rtf, text/rtp-enc-aescm128, text/rtploopback, text/rtx, text/sgml, text/slim, text/stylus, text/t140, text/tab-separated-values, text/troff, text/turtle, text/ulpfec, text/uri-list, text/vcard, text/vnd.a, text/vnd.abc, text/vnd.ascii-art, text/vnd.curl, text/vnd.curl.dcurl, text/vnd.curl.mcurl, text/vnd.curl.scurl, text/vnd.debian.copyright, text/vnd.dmclientscript, text/vnd.dvb.subtitle, text/vnd.esmertec.theme-descriptor, text/vnd.fly, text/vnd.fmi.flexstor, text/vnd.graphviz, text/vnd.in3d.3dml, text/vnd.in3d.spot, text/vnd.iptc.newsml, text/vnd.iptc.nitf, text/vnd.latex-z, text/vnd.motorola.reflex, text/vnd.ms-mediapackage, text/vnd.net2phone.commcenter.command, text/vnd.radisys.msml-basic-layout, text/vnd.si.uricatalogue, text/vnd.sun.j2me.app-descriptor, text/vnd.trolltech.linguist, text/vnd.wap.si, text/vnd.wap.sl, text/vnd.wap.wml, text/vnd.wap.wmlscript, text/vtt, text/x-asm, text/x-c, text/x-component, text/x-fortran, text/x-gwt-rpc, text/x-handlebars-template, text/x-java-source, text/x-jquery-tmpl, text/x-lua, text/x-markdown, text/x-nfo, text/x-opml, text/x-pascal, text/x-processing, text/x-sass, text/x-scss, text/x-setext, text/x-sfv, text/x-suse-ymp, text/x-uuencode, text/x-vcalendar, text/x-vcard, text/xml, text/xml-external-parsed-entity, text/yaml, video/1d-interleaved-parityfec, video/3gpp, video/3gpp-tt, video/3gpp2, video/bmpeg, video/bt656, video/celb, video/dv, video/encaprtp, video/h261, video/h263, video/h263-1998, video/h263-2000, video/h264, video/h264-rcdo, video/h264-svc, video/h265, video/iso.segment, video/jpeg, video/jpeg2000, video/jpm, video/mj2, video/mp1s, video/mp2p, video/mp2t, video/mp4, video/mp4v-es, video/mpeg, video/mpeg4-generic, video/mpv, video/nv, video/ogg, video/parityfec, video/pointer, video/quicktime, video/raptorfec, video/raw, video/rtp-enc-aescm128, video/rtploopback, video/rtx, video/smpte292m, video/ulpfec, video/vc1, video/vnd.cctv, video/vnd.dece.hd, video/vnd.dece.mobile, video/vnd.dece.mp4, video/vnd.dece.pd, video/vnd.dece.sd, video/vnd.dece.video, video/vnd.directv.mpeg, video/vnd.directv.mpeg-tts, video/vnd.dlna.mpeg-tts, video/vnd.dvb.file, video/vnd.fvt, video/vnd.hns.video, video/vnd.iptvforum.1dparityfec-1010, video/vnd.iptvforum.1dparityfec-2005, video/vnd.iptvforum.2dparityfec-1010, video/vnd.iptvforum.2dparityfec-2005, video/vnd.iptvforum.ttsavc, video/vnd.iptvforum.ttsmpeg2, video/vnd.motorola.video, video/vnd.motorola.videop, video/vnd.mpegurl, video/vnd.ms-playready.media.pyv, video/vnd.nokia.interleaved-multimedia, video/vnd.nokia.videovoip, video/vnd.objectvideo, video/vnd.radgamettools.bink, video/vnd.radgamettools.smacker, video/vnd.sealed.mpeg1, video/vnd.sealed.mpeg4, video/vnd.sealed.swf, video/vnd.sealedmedia.softseal.mov, video/vnd.uvvu.mp4, video/vnd.vivo, video/vp8, video/webm, video/x-f4v, video/x-fli, video/x-flv, video/x-m4v, video/x-matroska, video/x-mng, video/x-ms-asf, video/x-ms-vob, video/x-ms-wm, video/x-ms-wmv, video/x-ms-wmx, video/x-ms-wvx, video/x-msvideo, video/x-sgi-movie, video/x-smv, x-conference/x-cooltalk, x-shader/x-fragment, x-shader/x-vertex, default */
/***/ (function(module) {

eval("module.exports = JSON.parse(\"{\\\"application/1d-interleaved-parityfec\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/3gpdash-qoe-report+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/3gpp-ims+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/a2l\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/activemessage\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/alto-costmap+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/alto-costmapfilter+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/alto-directory+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/alto-endpointcost+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/alto-endpointcostparams+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/alto-endpointprop+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/alto-endpointpropparams+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/alto-error+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/alto-networkmap+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/alto-networkmapfilter+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/aml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/andrew-inset\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ez\\\"]},\\\"application/applefile\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/applixware\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"aw\\\"]},\\\"application/atf\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/atfx\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/atom+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"atom\\\"]},\\\"application/atomcat+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"atomcat\\\"]},\\\"application/atomdeleted+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/atomicmail\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/atomsvc+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"atomsvc\\\"]},\\\"application/atxml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/auth-policy+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/bacnet-xdd+zip\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/batch-smtp\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/bdoc\\\":{\\\"compressible\\\":false,\\\"extensions\\\":[\\\"bdoc\\\"]},\\\"application/beep+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/calendar+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/calendar+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/call-completion\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/cals-1840\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/cbor\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/ccmp+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/ccxml+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ccxml\\\"]},\\\"application/cdfx+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/cdmi-capability\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"cdmia\\\"]},\\\"application/cdmi-container\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"cdmic\\\"]},\\\"application/cdmi-domain\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"cdmid\\\"]},\\\"application/cdmi-object\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"cdmio\\\"]},\\\"application/cdmi-queue\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"cdmiq\\\"]},\\\"application/cdni\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/cea\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/cea-2018+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/cellml+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/cfw\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/clue_info+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/cms\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/cnrp+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/coap-group+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/commonground\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/conference-info+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/cpl+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/csrattrs\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/csta+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/cstadata+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/csvm+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/cu-seeme\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"cu\\\"]},\\\"application/cybercash\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/dart\\\":{\\\"compressible\\\":true},\\\"application/dash+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mpd\\\"]},\\\"application/dashdelta\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/davmount+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"davmount\\\"]},\\\"application/dca-rft\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/dcd\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/dec-dx\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/dialog-info+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/dicom\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/dii\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/dit\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/dns\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/docbook+xml\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"dbk\\\"]},\\\"application/dskpp+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/dssc+der\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"dssc\\\"]},\\\"application/dssc+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"xdssc\\\"]},\\\"application/dvcs\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/ecmascript\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"ecma\\\"]},\\\"application/edi-consent\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/edi-x12\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false},\\\"application/edifact\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false},\\\"application/efi\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/emergencycalldata.comment+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/emergencycalldata.deviceinfo+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/emergencycalldata.providerinfo+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/emergencycalldata.serviceinfo+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/emergencycalldata.subscriberinfo+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/emma+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"emma\\\"]},\\\"application/emotionml+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/encaprtp\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/epp+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/epub+zip\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"epub\\\"]},\\\"application/eshop\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/exi\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"exi\\\"]},\\\"application/fastinfoset\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/fastsoap\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/fdt+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/fits\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/font-sfnt\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/font-tdpfr\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"pfr\\\"]},\\\"application/font-woff\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"woff\\\"]},\\\"application/font-woff2\\\":{\\\"compressible\\\":false,\\\"extensions\\\":[\\\"woff2\\\"]},\\\"application/framework-attributes+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/geo+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/gml+xml\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"gml\\\"]},\\\"application/gpx+xml\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"gpx\\\"]},\\\"application/gxf\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"gxf\\\"]},\\\"application/gzip\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false},\\\"application/h224\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/held+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/http\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/hyperstudio\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"stk\\\"]},\\\"application/ibe-key-request+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/ibe-pkg-reply+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/ibe-pp-data\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/iges\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/im-iscomposing+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/index\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/index.cmd\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/index.obj\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/index.response\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/index.vnd\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/inkml+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ink\\\",\\\"inkml\\\"]},\\\"application/iotp\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/ipfix\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ipfix\\\"]},\\\"application/ipp\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/isup\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/its+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/java-archive\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"jar\\\",\\\"war\\\",\\\"ear\\\"]},\\\"application/java-serialized-object\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"ser\\\"]},\\\"application/java-vm\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"class\\\"]},\\\"application/javascript\\\":{\\\"source\\\":\\\"iana\\\",\\\"charset\\\":\\\"UTF-8\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"js\\\"]},\\\"application/jose\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/jose+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/jrd+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/json\\\":{\\\"source\\\":\\\"iana\\\",\\\"charset\\\":\\\"UTF-8\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"json\\\",\\\"map\\\"]},\\\"application/json-patch+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/json-seq\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/json5\\\":{\\\"extensions\\\":[\\\"json5\\\"]},\\\"application/jsonml+json\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"jsonml\\\"]},\\\"application/jwk+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/jwk-set+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/jwt\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/kpml-request+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/kpml-response+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/ld+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"jsonld\\\"]},\\\"application/lgr+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/link-format\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/load-control+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/lost+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"lostxml\\\"]},\\\"application/lostsync+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/lxf\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/mac-binhex40\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"hqx\\\"]},\\\"application/mac-compactpro\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"cpt\\\"]},\\\"application/macwriteii\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/mads+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mads\\\"]},\\\"application/manifest+json\\\":{\\\"charset\\\":\\\"UTF-8\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"webmanifest\\\"]},\\\"application/marc\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mrc\\\"]},\\\"application/marcxml+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mrcx\\\"]},\\\"application/mathematica\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ma\\\",\\\"nb\\\",\\\"mb\\\"]},\\\"application/mathml+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mathml\\\"]},\\\"application/mathml-content+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/mathml-presentation+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/mbms-associated-procedure-description+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/mbms-deregister+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/mbms-envelope+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/mbms-msk+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/mbms-msk-response+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/mbms-protection-description+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/mbms-reception-report+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/mbms-register+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/mbms-register-response+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/mbms-schedule+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/mbms-user-service-description+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/mbox\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mbox\\\"]},\\\"application/media-policy-dataset+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/media_control+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/mediaservercontrol+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mscml\\\"]},\\\"application/merge-patch+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/metalink+xml\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"metalink\\\"]},\\\"application/metalink4+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"meta4\\\"]},\\\"application/mets+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mets\\\"]},\\\"application/mf4\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/mikey\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/mods+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mods\\\"]},\\\"application/moss-keys\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/moss-signature\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/mosskey-data\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/mosskey-request\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/mp21\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"m21\\\",\\\"mp21\\\"]},\\\"application/mp4\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mp4s\\\",\\\"m4p\\\"]},\\\"application/mpeg4-generic\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/mpeg4-iod\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/mpeg4-iod-xmt\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/mrb-consumer+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/mrb-publish+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/msc-ivr+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/msc-mixer+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/msword\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"doc\\\",\\\"dot\\\"]},\\\"application/mxf\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mxf\\\"]},\\\"application/nasdata\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/news-checkgroups\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/news-groupinfo\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/news-transmission\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/nlsml+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/nss\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/ocsp-request\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/ocsp-response\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/octet-stream\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"bin\\\",\\\"dms\\\",\\\"lrf\\\",\\\"mar\\\",\\\"so\\\",\\\"dist\\\",\\\"distz\\\",\\\"pkg\\\",\\\"bpk\\\",\\\"dump\\\",\\\"elc\\\",\\\"deploy\\\",\\\"exe\\\",\\\"dll\\\",\\\"deb\\\",\\\"dmg\\\",\\\"iso\\\",\\\"img\\\",\\\"msi\\\",\\\"msp\\\",\\\"msm\\\",\\\"buffer\\\"]},\\\"application/oda\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"oda\\\"]},\\\"application/odx\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/oebps-package+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"opf\\\"]},\\\"application/ogg\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"ogx\\\"]},\\\"application/omdoc+xml\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"omdoc\\\"]},\\\"application/onenote\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"onetoc\\\",\\\"onetoc2\\\",\\\"onetmp\\\",\\\"onepkg\\\"]},\\\"application/oxps\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"oxps\\\"]},\\\"application/p2p-overlay+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/parityfec\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/patch-ops-error+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"xer\\\"]},\\\"application/pdf\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"pdf\\\"]},\\\"application/pdx\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/pgp-encrypted\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"pgp\\\"]},\\\"application/pgp-keys\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/pgp-signature\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"asc\\\",\\\"sig\\\"]},\\\"application/pics-rules\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"prf\\\"]},\\\"application/pidf+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/pidf-diff+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/pkcs10\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"p10\\\"]},\\\"application/pkcs12\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/pkcs7-mime\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"p7m\\\",\\\"p7c\\\"]},\\\"application/pkcs7-signature\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"p7s\\\"]},\\\"application/pkcs8\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"p8\\\"]},\\\"application/pkix-attr-cert\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ac\\\"]},\\\"application/pkix-cert\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"cer\\\"]},\\\"application/pkix-crl\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"crl\\\"]},\\\"application/pkix-pkipath\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"pkipath\\\"]},\\\"application/pkixcmp\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"pki\\\"]},\\\"application/pls+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"pls\\\"]},\\\"application/poc-settings+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/postscript\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"ai\\\",\\\"eps\\\",\\\"ps\\\"]},\\\"application/ppsp-tracker+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/problem+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/problem+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/provenance+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/prs.alvestrand.titrax-sheet\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/prs.cww\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"cww\\\"]},\\\"application/prs.hpub+zip\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/prs.nprend\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/prs.plucker\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/prs.rdf-xml-crypt\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/prs.xsf+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/pskc+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"pskcxml\\\"]},\\\"application/qsig\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/raptorfec\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/rdap+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/rdf+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"rdf\\\"]},\\\"application/reginfo+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"rif\\\"]},\\\"application/relax-ng-compact-syntax\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"rnc\\\"]},\\\"application/remote-printing\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/reputon+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/resource-lists+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"rl\\\"]},\\\"application/resource-lists-diff+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"rld\\\"]},\\\"application/rfc+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/riscos\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/rlmi+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/rls-services+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"rs\\\"]},\\\"application/rpki-ghostbusters\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"gbr\\\"]},\\\"application/rpki-manifest\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mft\\\"]},\\\"application/rpki-roa\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"roa\\\"]},\\\"application/rpki-updown\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/rsd+xml\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"rsd\\\"]},\\\"application/rss+xml\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"rss\\\"]},\\\"application/rtf\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"rtf\\\"]},\\\"application/rtploopback\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/rtx\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/samlassertion+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/samlmetadata+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/sbml+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"sbml\\\"]},\\\"application/scaip+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/scim+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/scvp-cv-request\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"scq\\\"]},\\\"application/scvp-cv-response\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"scs\\\"]},\\\"application/scvp-vp-request\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"spq\\\"]},\\\"application/scvp-vp-response\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"spp\\\"]},\\\"application/sdp\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"sdp\\\"]},\\\"application/sep+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/sep-exi\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/session-info\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/set-payment\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/set-payment-initiation\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"setpay\\\"]},\\\"application/set-registration\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/set-registration-initiation\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"setreg\\\"]},\\\"application/sgml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/sgml-open-catalog\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/shf+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"shf\\\"]},\\\"application/sieve\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/simple-filter+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/simple-message-summary\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/simplesymbolcontainer\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/slate\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/smil\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/smil+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"smi\\\",\\\"smil\\\"]},\\\"application/smpte336m\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/soap+fastinfoset\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/soap+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/sparql-query\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"rq\\\"]},\\\"application/sparql-results+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"srx\\\"]},\\\"application/spirits-event+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/sql\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/srgs\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"gram\\\"]},\\\"application/srgs+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"grxml\\\"]},\\\"application/sru+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"sru\\\"]},\\\"application/ssdl+xml\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"ssdl\\\"]},\\\"application/ssml+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ssml\\\"]},\\\"application/tamp-apex-update\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/tamp-apex-update-confirm\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/tamp-community-update\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/tamp-community-update-confirm\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/tamp-error\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/tamp-sequence-adjust\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/tamp-sequence-adjust-confirm\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/tamp-status-query\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/tamp-status-response\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/tamp-update\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/tamp-update-confirm\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/tar\\\":{\\\"compressible\\\":true},\\\"application/tei+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"tei\\\",\\\"teicorpus\\\"]},\\\"application/thraud+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"tfi\\\"]},\\\"application/timestamp-query\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/timestamp-reply\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/timestamped-data\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"tsd\\\"]},\\\"application/ttml+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/tve-trigger\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/ulpfec\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/urc-grpsheet+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/urc-ressheet+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/urc-targetdesc+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/urc-uisocketdesc+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vcard+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vcard+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vemmi\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vividence.scriptfile\\\":{\\\"source\\\":\\\"apache\\\"},\\\"application/vnd.3gpp-prose+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.3gpp-prose-pc3ch+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.3gpp.access-transfer-events+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.3gpp.bsf+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.3gpp.mid-call+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.3gpp.pic-bw-large\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"plb\\\"]},\\\"application/vnd.3gpp.pic-bw-small\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"psb\\\"]},\\\"application/vnd.3gpp.pic-bw-var\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"pvb\\\"]},\\\"application/vnd.3gpp.sms\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.3gpp.sms+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.3gpp.srvcc-ext+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.3gpp.srvcc-info+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.3gpp.state-and-event-info+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.3gpp.ussd+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.3gpp2.bcmcsinfo+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.3gpp2.sms\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.3gpp2.tcap\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"tcap\\\"]},\\\"application/vnd.3lightssoftware.imagescal\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.3m.post-it-notes\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"pwn\\\"]},\\\"application/vnd.accpac.simply.aso\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"aso\\\"]},\\\"application/vnd.accpac.simply.imp\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"imp\\\"]},\\\"application/vnd.acucobol\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"acu\\\"]},\\\"application/vnd.acucorp\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"atc\\\",\\\"acutc\\\"]},\\\"application/vnd.adobe.air-application-installer-package+zip\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"air\\\"]},\\\"application/vnd.adobe.flash.movie\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.adobe.formscentral.fcdt\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"fcdt\\\"]},\\\"application/vnd.adobe.fxp\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"fxp\\\",\\\"fxpl\\\"]},\\\"application/vnd.adobe.partial-upload\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.adobe.xdp+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"xdp\\\"]},\\\"application/vnd.adobe.xfdf\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"xfdf\\\"]},\\\"application/vnd.aether.imp\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ah-barcode\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ahead.space\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ahead\\\"]},\\\"application/vnd.airzip.filesecure.azf\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"azf\\\"]},\\\"application/vnd.airzip.filesecure.azs\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"azs\\\"]},\\\"application/vnd.amazon.ebook\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"azw\\\"]},\\\"application/vnd.amazon.mobi8-ebook\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.americandynamics.acc\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"acc\\\"]},\\\"application/vnd.amiga.ami\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ami\\\"]},\\\"application/vnd.amundsen.maze+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.android.package-archive\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"apk\\\"]},\\\"application/vnd.anki\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.anser-web-certificate-issue-initiation\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"cii\\\"]},\\\"application/vnd.anser-web-funds-transfer-initiation\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"fti\\\"]},\\\"application/vnd.antix.game-component\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"atx\\\"]},\\\"application/vnd.apache.thrift.binary\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.apache.thrift.compact\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.apache.thrift.json\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.api+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.apple.installer+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mpkg\\\"]},\\\"application/vnd.apple.mpegurl\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"m3u8\\\"]},\\\"application/vnd.apple.pkpass\\\":{\\\"compressible\\\":false,\\\"extensions\\\":[\\\"pkpass\\\"]},\\\"application/vnd.arastra.swi\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.aristanetworks.swi\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"swi\\\"]},\\\"application/vnd.artsquare\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.astraea-software.iota\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"iota\\\"]},\\\"application/vnd.audiograph\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"aep\\\"]},\\\"application/vnd.autopackage\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.avistar+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.balsamiq.bmml+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.balsamiq.bmpr\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.bekitzur-stech+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.biopax.rdf+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.blueice.multipass\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mpm\\\"]},\\\"application/vnd.bluetooth.ep.oob\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.bluetooth.le.oob\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.bmi\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"bmi\\\"]},\\\"application/vnd.businessobjects\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"rep\\\"]},\\\"application/vnd.cab-jscript\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.canon-cpdl\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.canon-lips\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.cendio.thinlinc.clientconf\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.century-systems.tcp_stream\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.chemdraw+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"cdxml\\\"]},\\\"application/vnd.chess-pgn\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.chipnuts.karaoke-mmd\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mmd\\\"]},\\\"application/vnd.cinderella\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"cdy\\\"]},\\\"application/vnd.cirpack.isdn-ext\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.citationstyles.style+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.claymore\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"cla\\\"]},\\\"application/vnd.cloanto.rp9\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"rp9\\\"]},\\\"application/vnd.clonk.c4group\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"c4g\\\",\\\"c4d\\\",\\\"c4f\\\",\\\"c4p\\\",\\\"c4u\\\"]},\\\"application/vnd.cluetrust.cartomobile-config\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"c11amc\\\"]},\\\"application/vnd.cluetrust.cartomobile-config-pkg\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"c11amz\\\"]},\\\"application/vnd.coffeescript\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.collection+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.collection.doc+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.collection.next+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.comicbook+zip\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.commerce-battelle\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.commonspace\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"csp\\\"]},\\\"application/vnd.contact.cmsg\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"cdbcmsg\\\"]},\\\"application/vnd.coreos.ignition+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.cosmocaller\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"cmc\\\"]},\\\"application/vnd.crick.clicker\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"clkx\\\"]},\\\"application/vnd.crick.clicker.keyboard\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"clkk\\\"]},\\\"application/vnd.crick.clicker.palette\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"clkp\\\"]},\\\"application/vnd.crick.clicker.template\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"clkt\\\"]},\\\"application/vnd.crick.clicker.wordbank\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"clkw\\\"]},\\\"application/vnd.criticaltools.wbs+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"wbs\\\"]},\\\"application/vnd.ctc-posml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"pml\\\"]},\\\"application/vnd.ctct.ws+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.cups-pdf\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.cups-postscript\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.cups-ppd\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ppd\\\"]},\\\"application/vnd.cups-raster\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.cups-raw\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.curl\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.curl.car\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"car\\\"]},\\\"application/vnd.curl.pcurl\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"pcurl\\\"]},\\\"application/vnd.cyan.dean.root+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.cybank\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.d2l.coursepackage1p0+zip\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dart\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"dart\\\"]},\\\"application/vnd.data-vision.rdz\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"rdz\\\"]},\\\"application/vnd.debian.binary-package\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dece.data\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"uvf\\\",\\\"uvvf\\\",\\\"uvd\\\",\\\"uvvd\\\"]},\\\"application/vnd.dece.ttml+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"uvt\\\",\\\"uvvt\\\"]},\\\"application/vnd.dece.unspecified\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"uvx\\\",\\\"uvvx\\\"]},\\\"application/vnd.dece.zip\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"uvz\\\",\\\"uvvz\\\"]},\\\"application/vnd.denovo.fcselayout-link\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"fe_launch\\\"]},\\\"application/vnd.desmume-movie\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.desmume.movie\\\":{\\\"source\\\":\\\"apache\\\"},\\\"application/vnd.dir-bi.plate-dl-nosuffix\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dm.delegation+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dna\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"dna\\\"]},\\\"application/vnd.document+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.dolby.mlp\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"mlp\\\"]},\\\"application/vnd.dolby.mobile.1\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dolby.mobile.2\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.doremir.scorecloud-binary-document\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dpgraph\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"dpg\\\"]},\\\"application/vnd.dreamfactory\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"dfac\\\"]},\\\"application/vnd.drive+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.ds-keypoint\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"kpxx\\\"]},\\\"application/vnd.dtg.local\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dtg.local.flash\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dtg.local.html\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dvb.ait\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ait\\\"]},\\\"application/vnd.dvb.dvbj\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dvb.esgcontainer\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dvb.ipdcdftnotifaccess\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dvb.ipdcesgaccess\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dvb.ipdcesgaccess2\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dvb.ipdcesgpdd\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dvb.ipdcroaming\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dvb.iptv.alfec-base\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dvb.iptv.alfec-enhancement\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dvb.notif-aggregate-root+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dvb.notif-container+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dvb.notif-generic+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dvb.notif-ia-msglist+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dvb.notif-ia-registration-request+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dvb.notif-ia-registration-response+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dvb.notif-init+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dvb.pfr\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dvb.service\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"svc\\\"]},\\\"application/vnd.dxr\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.dynageo\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"geo\\\"]},\\\"application/vnd.dzr\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.easykaraoke.cdgdownload\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ecdis-update\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ecowin.chart\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mag\\\"]},\\\"application/vnd.ecowin.filerequest\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ecowin.fileupdate\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ecowin.series\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ecowin.seriesrequest\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ecowin.seriesupdate\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.emclient.accessrequest+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.enliven\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"nml\\\"]},\\\"application/vnd.enphase.envoy\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.eprints.data+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.epson.esf\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"esf\\\"]},\\\"application/vnd.epson.msf\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"msf\\\"]},\\\"application/vnd.epson.quickanime\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"qam\\\"]},\\\"application/vnd.epson.salt\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"slt\\\"]},\\\"application/vnd.epson.ssf\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ssf\\\"]},\\\"application/vnd.ericsson.quickcall\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.espass-espass+zip\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.eszigno3+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"es3\\\",\\\"et3\\\"]},\\\"application/vnd.etsi.aoc+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.etsi.asic-e+zip\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.etsi.asic-s+zip\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.etsi.cug+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.etsi.iptvcommand+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.etsi.iptvdiscovery+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.etsi.iptvprofile+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.etsi.iptvsad-bc+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.etsi.iptvsad-cod+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.etsi.iptvsad-npvr+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.etsi.iptvservice+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.etsi.iptvsync+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.etsi.iptvueprofile+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.etsi.mcid+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.etsi.mheg5\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.etsi.overload-control-policy-dataset+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.etsi.pstn+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.etsi.sci+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.etsi.simservs+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.etsi.timestamp-token\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.etsi.tsl+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.etsi.tsl.der\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.eudora.data\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ezpix-album\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ez2\\\"]},\\\"application/vnd.ezpix-package\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ez3\\\"]},\\\"application/vnd.f-secure.mobile\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.fastcopy-disk-image\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.fdf\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"fdf\\\"]},\\\"application/vnd.fdsn.mseed\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mseed\\\"]},\\\"application/vnd.fdsn.seed\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"seed\\\",\\\"dataless\\\"]},\\\"application/vnd.ffsns\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.filmit.zfc\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.fints\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.firemonkeys.cloudcell\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.flographit\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"gph\\\"]},\\\"application/vnd.fluxtime.clip\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ftc\\\"]},\\\"application/vnd.font-fontforge-sfd\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.framemaker\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"fm\\\",\\\"frame\\\",\\\"maker\\\",\\\"book\\\"]},\\\"application/vnd.frogans.fnc\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"fnc\\\"]},\\\"application/vnd.frogans.ltf\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ltf\\\"]},\\\"application/vnd.fsc.weblaunch\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"fsc\\\"]},\\\"application/vnd.fujitsu.oasys\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"oas\\\"]},\\\"application/vnd.fujitsu.oasys2\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"oa2\\\"]},\\\"application/vnd.fujitsu.oasys3\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"oa3\\\"]},\\\"application/vnd.fujitsu.oasysgp\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"fg5\\\"]},\\\"application/vnd.fujitsu.oasysprs\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"bh2\\\"]},\\\"application/vnd.fujixerox.art-ex\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.fujixerox.art4\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.fujixerox.ddd\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ddd\\\"]},\\\"application/vnd.fujixerox.docuworks\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"xdw\\\"]},\\\"application/vnd.fujixerox.docuworks.binder\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"xbd\\\"]},\\\"application/vnd.fujixerox.docuworks.container\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.fujixerox.hbpl\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.fut-misnet\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.fuzzysheet\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"fzs\\\"]},\\\"application/vnd.genomatix.tuxedo\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"txd\\\"]},\\\"application/vnd.geo+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.geocube+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.geogebra.file\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ggb\\\"]},\\\"application/vnd.geogebra.tool\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ggt\\\"]},\\\"application/vnd.geometry-explorer\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"gex\\\",\\\"gre\\\"]},\\\"application/vnd.geonext\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"gxt\\\"]},\\\"application/vnd.geoplan\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"g2w\\\"]},\\\"application/vnd.geospace\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"g3w\\\"]},\\\"application/vnd.gerber\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.globalplatform.card-content-mgt\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.globalplatform.card-content-mgt-response\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.gmx\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"gmx\\\"]},\\\"application/vnd.google-apps.document\\\":{\\\"compressible\\\":false,\\\"extensions\\\":[\\\"gdoc\\\"]},\\\"application/vnd.google-apps.presentation\\\":{\\\"compressible\\\":false,\\\"extensions\\\":[\\\"gslides\\\"]},\\\"application/vnd.google-apps.spreadsheet\\\":{\\\"compressible\\\":false,\\\"extensions\\\":[\\\"gsheet\\\"]},\\\"application/vnd.google-earth.kml+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"kml\\\"]},\\\"application/vnd.google-earth.kmz\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"kmz\\\"]},\\\"application/vnd.gov.sk.e-form+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.gov.sk.e-form+zip\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.gov.sk.xmldatacontainer+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.grafeq\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"gqf\\\",\\\"gqs\\\"]},\\\"application/vnd.gridmp\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.groove-account\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"gac\\\"]},\\\"application/vnd.groove-help\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ghf\\\"]},\\\"application/vnd.groove-identity-message\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"gim\\\"]},\\\"application/vnd.groove-injector\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"grv\\\"]},\\\"application/vnd.groove-tool-message\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"gtm\\\"]},\\\"application/vnd.groove-tool-template\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"tpl\\\"]},\\\"application/vnd.groove-vcard\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"vcg\\\"]},\\\"application/vnd.hal+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.hal+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"hal\\\"]},\\\"application/vnd.handheld-entertainment+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"zmm\\\"]},\\\"application/vnd.hbci\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"hbci\\\"]},\\\"application/vnd.hcl-bireports\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.hdt\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.heroku+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.hhe.lesson-player\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"les\\\"]},\\\"application/vnd.hp-hpgl\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"hpgl\\\"]},\\\"application/vnd.hp-hpid\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"hpid\\\"]},\\\"application/vnd.hp-hps\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"hps\\\"]},\\\"application/vnd.hp-jlyt\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"jlt\\\"]},\\\"application/vnd.hp-pcl\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"pcl\\\"]},\\\"application/vnd.hp-pclxl\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"pclxl\\\"]},\\\"application/vnd.httphone\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.hydrostatix.sof-data\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"sfd-hdstx\\\"]},\\\"application/vnd.hyperdrive+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.hzn-3d-crossword\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ibm.afplinedata\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ibm.electronic-media\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ibm.minipay\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mpy\\\"]},\\\"application/vnd.ibm.modcap\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"afp\\\",\\\"listafp\\\",\\\"list3820\\\"]},\\\"application/vnd.ibm.rights-management\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"irm\\\"]},\\\"application/vnd.ibm.secure-container\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"sc\\\"]},\\\"application/vnd.iccprofile\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"icc\\\",\\\"icm\\\"]},\\\"application/vnd.ieee.1905\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.igloader\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"igl\\\"]},\\\"application/vnd.immervision-ivp\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ivp\\\"]},\\\"application/vnd.immervision-ivu\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ivu\\\"]},\\\"application/vnd.ims.imsccv1p1\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ims.imsccv1p2\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ims.imsccv1p3\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ims.lis.v2.result+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.ims.lti.v2.toolconsumerprofile+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.ims.lti.v2.toolproxy+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.ims.lti.v2.toolproxy.id+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.ims.lti.v2.toolsettings+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.ims.lti.v2.toolsettings.simple+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.informedcontrol.rms+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.informix-visionary\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.infotech.project\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.infotech.project+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.innopath.wamp.notification\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.insors.igm\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"igm\\\"]},\\\"application/vnd.intercon.formnet\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"xpw\\\",\\\"xpx\\\"]},\\\"application/vnd.intergeo\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"i2g\\\"]},\\\"application/vnd.intertrust.digibox\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.intertrust.nncp\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.intu.qbo\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"qbo\\\"]},\\\"application/vnd.intu.qfx\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"qfx\\\"]},\\\"application/vnd.iptc.g2.catalogitem+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.iptc.g2.conceptitem+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.iptc.g2.knowledgeitem+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.iptc.g2.newsitem+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.iptc.g2.newsmessage+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.iptc.g2.packageitem+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.iptc.g2.planningitem+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ipunplugged.rcprofile\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"rcprofile\\\"]},\\\"application/vnd.irepository.package+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"irp\\\"]},\\\"application/vnd.is-xpr\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"xpr\\\"]},\\\"application/vnd.isac.fcs\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"fcs\\\"]},\\\"application/vnd.jam\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"jam\\\"]},\\\"application/vnd.japannet-directory-service\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.japannet-jpnstore-wakeup\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.japannet-payment-wakeup\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.japannet-registration\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.japannet-registration-wakeup\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.japannet-setstore-wakeup\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.japannet-verification\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.japannet-verification-wakeup\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.jcp.javame.midlet-rms\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"rms\\\"]},\\\"application/vnd.jisp\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"jisp\\\"]},\\\"application/vnd.joost.joda-archive\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"joda\\\"]},\\\"application/vnd.jsk.isdn-ngn\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.kahootz\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ktz\\\",\\\"ktr\\\"]},\\\"application/vnd.kde.karbon\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"karbon\\\"]},\\\"application/vnd.kde.kchart\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"chrt\\\"]},\\\"application/vnd.kde.kformula\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"kfo\\\"]},\\\"application/vnd.kde.kivio\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"flw\\\"]},\\\"application/vnd.kde.kontour\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"kon\\\"]},\\\"application/vnd.kde.kpresenter\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"kpr\\\",\\\"kpt\\\"]},\\\"application/vnd.kde.kspread\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ksp\\\"]},\\\"application/vnd.kde.kword\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"kwd\\\",\\\"kwt\\\"]},\\\"application/vnd.kenameaapp\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"htke\\\"]},\\\"application/vnd.kidspiration\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"kia\\\"]},\\\"application/vnd.kinar\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"kne\\\",\\\"knp\\\"]},\\\"application/vnd.koan\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"skp\\\",\\\"skd\\\",\\\"skt\\\",\\\"skm\\\"]},\\\"application/vnd.kodak-descriptor\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"sse\\\"]},\\\"application/vnd.las.las+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"lasxml\\\"]},\\\"application/vnd.liberty-request+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.llamagraphics.life-balance.desktop\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"lbd\\\"]},\\\"application/vnd.llamagraphics.life-balance.exchange+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"lbe\\\"]},\\\"application/vnd.lotus-1-2-3\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"123\\\"]},\\\"application/vnd.lotus-approach\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"apr\\\"]},\\\"application/vnd.lotus-freelance\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"pre\\\"]},\\\"application/vnd.lotus-notes\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"nsf\\\"]},\\\"application/vnd.lotus-organizer\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"org\\\"]},\\\"application/vnd.lotus-screencam\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"scm\\\"]},\\\"application/vnd.lotus-wordpro\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"lwp\\\"]},\\\"application/vnd.macports.portpkg\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"portpkg\\\"]},\\\"application/vnd.mapbox-vector-tile\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.marlin.drm.actiontoken+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.marlin.drm.conftoken+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.marlin.drm.license+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.marlin.drm.mdcf\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.mason+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.maxmind.maxmind-db\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.mcd\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mcd\\\"]},\\\"application/vnd.medcalcdata\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mc1\\\"]},\\\"application/vnd.mediastation.cdkey\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"cdkey\\\"]},\\\"application/vnd.meridian-slingshot\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.mfer\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mwf\\\"]},\\\"application/vnd.mfmp\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mfm\\\"]},\\\"application/vnd.micro+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.micrografx.flo\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"flo\\\"]},\\\"application/vnd.micrografx.igx\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"igx\\\"]},\\\"application/vnd.microsoft.portable-executable\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.miele+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.mif\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mif\\\"]},\\\"application/vnd.minisoft-hp3000-save\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.mitsubishi.misty-guard.trustweb\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.mobius.daf\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"daf\\\"]},\\\"application/vnd.mobius.dis\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"dis\\\"]},\\\"application/vnd.mobius.mbk\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mbk\\\"]},\\\"application/vnd.mobius.mqy\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mqy\\\"]},\\\"application/vnd.mobius.msl\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"msl\\\"]},\\\"application/vnd.mobius.plc\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"plc\\\"]},\\\"application/vnd.mobius.txf\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"txf\\\"]},\\\"application/vnd.mophun.application\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mpn\\\"]},\\\"application/vnd.mophun.certificate\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mpc\\\"]},\\\"application/vnd.motorola.flexsuite\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.motorola.flexsuite.adsi\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.motorola.flexsuite.fis\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.motorola.flexsuite.gotap\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.motorola.flexsuite.kmr\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.motorola.flexsuite.ttc\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.motorola.flexsuite.wem\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.motorola.iprm\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.mozilla.xul+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"xul\\\"]},\\\"application/vnd.ms-3mfdocument\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ms-artgalry\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"cil\\\"]},\\\"application/vnd.ms-asf\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ms-cab-compressed\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"cab\\\"]},\\\"application/vnd.ms-color.iccprofile\\\":{\\\"source\\\":\\\"apache\\\"},\\\"application/vnd.ms-excel\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"xls\\\",\\\"xlm\\\",\\\"xla\\\",\\\"xlc\\\",\\\"xlt\\\",\\\"xlw\\\"]},\\\"application/vnd.ms-excel.addin.macroenabled.12\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"xlam\\\"]},\\\"application/vnd.ms-excel.sheet.binary.macroenabled.12\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"xlsb\\\"]},\\\"application/vnd.ms-excel.sheet.macroenabled.12\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"xlsm\\\"]},\\\"application/vnd.ms-excel.template.macroenabled.12\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"xltm\\\"]},\\\"application/vnd.ms-fontobject\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"eot\\\"]},\\\"application/vnd.ms-htmlhelp\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"chm\\\"]},\\\"application/vnd.ms-ims\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ims\\\"]},\\\"application/vnd.ms-lrm\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"lrm\\\"]},\\\"application/vnd.ms-office.activex+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ms-officetheme\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"thmx\\\"]},\\\"application/vnd.ms-opentype\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":true},\\\"application/vnd.ms-package.obfuscated-opentype\\\":{\\\"source\\\":\\\"apache\\\"},\\\"application/vnd.ms-pki.seccat\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"cat\\\"]},\\\"application/vnd.ms-pki.stl\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"stl\\\"]},\\\"application/vnd.ms-playready.initiator+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ms-powerpoint\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"ppt\\\",\\\"pps\\\",\\\"pot\\\"]},\\\"application/vnd.ms-powerpoint.addin.macroenabled.12\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ppam\\\"]},\\\"application/vnd.ms-powerpoint.presentation.macroenabled.12\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"pptm\\\"]},\\\"application/vnd.ms-powerpoint.slide.macroenabled.12\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"sldm\\\"]},\\\"application/vnd.ms-powerpoint.slideshow.macroenabled.12\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ppsm\\\"]},\\\"application/vnd.ms-powerpoint.template.macroenabled.12\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"potm\\\"]},\\\"application/vnd.ms-printdevicecapabilities+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ms-printing.printticket+xml\\\":{\\\"source\\\":\\\"apache\\\"},\\\"application/vnd.ms-printschematicket+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ms-project\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mpp\\\",\\\"mpt\\\"]},\\\"application/vnd.ms-tnef\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ms-windows.devicepairing\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ms-windows.nwprinting.oob\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ms-windows.printerpairing\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ms-windows.wsd.oob\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ms-wmdrm.lic-chlg-req\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ms-wmdrm.lic-resp\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ms-wmdrm.meter-chlg-req\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ms-wmdrm.meter-resp\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ms-word.document.macroenabled.12\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"docm\\\"]},\\\"application/vnd.ms-word.template.macroenabled.12\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"dotm\\\"]},\\\"application/vnd.ms-works\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"wps\\\",\\\"wks\\\",\\\"wcm\\\",\\\"wdb\\\"]},\\\"application/vnd.ms-wpl\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"wpl\\\"]},\\\"application/vnd.ms-xpsdocument\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"xps\\\"]},\\\"application/vnd.msa-disk-image\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.mseq\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mseq\\\"]},\\\"application/vnd.msign\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.multiad.creator\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.multiad.creator.cif\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.music-niff\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.musician\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mus\\\"]},\\\"application/vnd.muvee.style\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"msty\\\"]},\\\"application/vnd.mynfc\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"taglet\\\"]},\\\"application/vnd.ncd.control\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ncd.reference\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.nearst.inv+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.nervana\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.netfpx\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.neurolanguage.nlu\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"nlu\\\"]},\\\"application/vnd.nintendo.nitro.rom\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.nintendo.snes.rom\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.nitf\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ntf\\\",\\\"nitf\\\"]},\\\"application/vnd.noblenet-directory\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"nnd\\\"]},\\\"application/vnd.noblenet-sealer\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"nns\\\"]},\\\"application/vnd.noblenet-web\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"nnw\\\"]},\\\"application/vnd.nokia.catalogs\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.nokia.conml+wbxml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.nokia.conml+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.nokia.iptv.config+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.nokia.isds-radio-presets\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.nokia.landmark+wbxml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.nokia.landmark+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.nokia.landmarkcollection+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.nokia.n-gage.ac+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.nokia.n-gage.data\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ngdat\\\"]},\\\"application/vnd.nokia.n-gage.symbian.install\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"n-gage\\\"]},\\\"application/vnd.nokia.ncd\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.nokia.pcd+wbxml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.nokia.pcd+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.nokia.radio-preset\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"rpst\\\"]},\\\"application/vnd.nokia.radio-presets\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"rpss\\\"]},\\\"application/vnd.novadigm.edm\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"edm\\\"]},\\\"application/vnd.novadigm.edx\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"edx\\\"]},\\\"application/vnd.novadigm.ext\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ext\\\"]},\\\"application/vnd.ntt-local.content-share\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ntt-local.file-transfer\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ntt-local.ogw_remote-access\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ntt-local.sip-ta_remote\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ntt-local.sip-ta_tcp_stream\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oasis.opendocument.chart\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"odc\\\"]},\\\"application/vnd.oasis.opendocument.chart-template\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"otc\\\"]},\\\"application/vnd.oasis.opendocument.database\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"odb\\\"]},\\\"application/vnd.oasis.opendocument.formula\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"odf\\\"]},\\\"application/vnd.oasis.opendocument.formula-template\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"odft\\\"]},\\\"application/vnd.oasis.opendocument.graphics\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"odg\\\"]},\\\"application/vnd.oasis.opendocument.graphics-template\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"otg\\\"]},\\\"application/vnd.oasis.opendocument.image\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"odi\\\"]},\\\"application/vnd.oasis.opendocument.image-template\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"oti\\\"]},\\\"application/vnd.oasis.opendocument.presentation\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"odp\\\"]},\\\"application/vnd.oasis.opendocument.presentation-template\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"otp\\\"]},\\\"application/vnd.oasis.opendocument.spreadsheet\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"ods\\\"]},\\\"application/vnd.oasis.opendocument.spreadsheet-template\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ots\\\"]},\\\"application/vnd.oasis.opendocument.text\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"odt\\\"]},\\\"application/vnd.oasis.opendocument.text-master\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"odm\\\"]},\\\"application/vnd.oasis.opendocument.text-template\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ott\\\"]},\\\"application/vnd.oasis.opendocument.text-web\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"oth\\\"]},\\\"application/vnd.obn\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oftn.l10n+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.oipf.contentaccessdownload+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oipf.contentaccessstreaming+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oipf.cspg-hexbinary\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oipf.dae.svg+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oipf.dae.xhtml+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oipf.mippvcontrolmessage+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oipf.pae.gem\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oipf.spdiscovery+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oipf.spdlist+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oipf.ueprofile+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oipf.userprofile+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.olpc-sugar\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"xo\\\"]},\\\"application/vnd.oma-scws-config\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma-scws-http-request\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma-scws-http-response\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.bcast.associated-procedure-parameter+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.bcast.drm-trigger+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.bcast.imd+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.bcast.ltkm\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.bcast.notification+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.bcast.provisioningtrigger\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.bcast.sgboot\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.bcast.sgdd+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.bcast.sgdu\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.bcast.simple-symbol-container\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.bcast.smartcard-trigger+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.bcast.sprov+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.bcast.stkm\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.cab-address-book+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.cab-feature-handler+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.cab-pcc+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.cab-subs-invite+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.cab-user-prefs+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.dcd\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.dcdc\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.dd2+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"dd2\\\"]},\\\"application/vnd.oma.drm.risd+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.group-usage-list+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.lwm2m+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.oma.lwm2m+tlv\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.pal+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.poc.detailed-progress-report+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.poc.final-report+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.poc.groups+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.poc.invocation-descriptor+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.poc.optimized-progress-report+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.push\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.scidm.messages+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oma.xcap-directory+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.omads-email+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.omads-file+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.omads-folder+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.omaloc-supl-init\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.onepager\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openblox.game+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openblox.game-binary\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openeye.oeb\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openofficeorg.extension\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"oxt\\\"]},\\\"application/vnd.openxmlformats-officedocument.custom-properties+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.drawing+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.extended-properties+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.presentationml-template\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.presentationml.presentation\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"pptx\\\"]},\\\"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.presentationml.slide\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"sldx\\\"]},\\\"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.presentationml.slideshow\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ppsx\\\"]},\\\"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.presentationml.template\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"potx\\\"]},\\\"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.spreadsheetml-template\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"xlsx\\\"]},\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.template\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"xltx\\\"]},\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.theme+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.themeoverride+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.vmldrawing\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.wordprocessingml-template\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"docx\\\"]},\\\"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.wordprocessingml.template\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"dotx\\\"]},\\\"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-package.core-properties+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.openxmlformats-package.relationships+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oracle.resource+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.orange.indata\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.osa.netdeploy\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.osgeo.mapguide.package\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mgp\\\"]},\\\"application/vnd.osgi.bundle\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.osgi.dp\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"dp\\\"]},\\\"application/vnd.osgi.subsystem\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"esa\\\"]},\\\"application/vnd.otps.ct-kip+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.oxli.countgraph\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.pagerduty+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.palm\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"pdb\\\",\\\"pqa\\\",\\\"oprc\\\"]},\\\"application/vnd.panoply\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.paos+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.paos.xml\\\":{\\\"source\\\":\\\"apache\\\"},\\\"application/vnd.pawaafile\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"paw\\\"]},\\\"application/vnd.pcos\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.pg.format\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"str\\\"]},\\\"application/vnd.pg.osasli\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ei6\\\"]},\\\"application/vnd.piaccess.application-licence\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.picsel\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"efif\\\"]},\\\"application/vnd.pmi.widget\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"wg\\\"]},\\\"application/vnd.poc.group-advertisement+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.pocketlearn\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"plf\\\"]},\\\"application/vnd.powerbuilder6\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"pbd\\\"]},\\\"application/vnd.powerbuilder6-s\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.powerbuilder7\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.powerbuilder7-s\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.powerbuilder75\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.powerbuilder75-s\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.preminet\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.previewsystems.box\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"box\\\"]},\\\"application/vnd.proteus.magazine\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mgz\\\"]},\\\"application/vnd.publishare-delta-tree\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"qps\\\"]},\\\"application/vnd.pvi.ptid1\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ptid\\\"]},\\\"application/vnd.pwg-multiplexed\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.pwg-xhtml-print+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.qualcomm.brew-app-res\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.quarantainenet\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.quark.quarkxpress\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"qxd\\\",\\\"qxt\\\",\\\"qwd\\\",\\\"qwt\\\",\\\"qxl\\\",\\\"qxb\\\"]},\\\"application/vnd.quobject-quoxdocument\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.radisys.moml+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.radisys.msml+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.radisys.msml-audit+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.radisys.msml-audit-conf+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.radisys.msml-audit-conn+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.radisys.msml-audit-dialog+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.radisys.msml-audit-stream+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.radisys.msml-conf+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.radisys.msml-dialog+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.radisys.msml-dialog-base+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.radisys.msml-dialog-fax-detect+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.radisys.msml-dialog-group+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.radisys.msml-dialog-speech+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.radisys.msml-dialog-transform+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.rainstor.data\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.rapid\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.rar\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.realvnc.bed\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"bed\\\"]},\\\"application/vnd.recordare.musicxml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mxl\\\"]},\\\"application/vnd.recordare.musicxml+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"musicxml\\\"]},\\\"application/vnd.renlearn.rlprint\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.rig.cryptonote\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"cryptonote\\\"]},\\\"application/vnd.rim.cod\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"cod\\\"]},\\\"application/vnd.rn-realmedia\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"rm\\\"]},\\\"application/vnd.rn-realmedia-vbr\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"rmvb\\\"]},\\\"application/vnd.route66.link66+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"link66\\\"]},\\\"application/vnd.rs-274x\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ruckus.download\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.s3sms\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.sailingtracker.track\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"st\\\"]},\\\"application/vnd.sbm.cid\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.sbm.mid2\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.scribus\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.sealed.3df\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.sealed.csf\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.sealed.doc\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.sealed.eml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.sealed.mht\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.sealed.net\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.sealed.ppt\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.sealed.tiff\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.sealed.xls\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.sealedmedia.softseal.html\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.sealedmedia.softseal.pdf\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.seemail\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"see\\\"]},\\\"application/vnd.sema\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"sema\\\"]},\\\"application/vnd.semd\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"semd\\\"]},\\\"application/vnd.semf\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"semf\\\"]},\\\"application/vnd.shana.informed.formdata\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ifm\\\"]},\\\"application/vnd.shana.informed.formtemplate\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"itp\\\"]},\\\"application/vnd.shana.informed.interchange\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"iif\\\"]},\\\"application/vnd.shana.informed.package\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ipk\\\"]},\\\"application/vnd.simtech-mindmapper\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"twd\\\",\\\"twds\\\"]},\\\"application/vnd.siren+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.smaf\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mmf\\\"]},\\\"application/vnd.smart.notebook\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.smart.teacher\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"teacher\\\"]},\\\"application/vnd.software602.filler.form+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.software602.filler.form-xml-zip\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.solent.sdkm+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"sdkm\\\",\\\"sdkd\\\"]},\\\"application/vnd.spotfire.dxp\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"dxp\\\"]},\\\"application/vnd.spotfire.sfs\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"sfs\\\"]},\\\"application/vnd.sss-cod\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.sss-dtf\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.sss-ntf\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.stardivision.calc\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"sdc\\\"]},\\\"application/vnd.stardivision.draw\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"sda\\\"]},\\\"application/vnd.stardivision.impress\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"sdd\\\"]},\\\"application/vnd.stardivision.math\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"smf\\\"]},\\\"application/vnd.stardivision.writer\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"sdw\\\",\\\"vor\\\"]},\\\"application/vnd.stardivision.writer-global\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"sgl\\\"]},\\\"application/vnd.stepmania.package\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"smzip\\\"]},\\\"application/vnd.stepmania.stepchart\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"sm\\\"]},\\\"application/vnd.street-stream\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.sun.wadl+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.sun.xml.calc\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"sxc\\\"]},\\\"application/vnd.sun.xml.calc.template\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"stc\\\"]},\\\"application/vnd.sun.xml.draw\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"sxd\\\"]},\\\"application/vnd.sun.xml.draw.template\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"std\\\"]},\\\"application/vnd.sun.xml.impress\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"sxi\\\"]},\\\"application/vnd.sun.xml.impress.template\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"sti\\\"]},\\\"application/vnd.sun.xml.math\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"sxm\\\"]},\\\"application/vnd.sun.xml.writer\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"sxw\\\"]},\\\"application/vnd.sun.xml.writer.global\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"sxg\\\"]},\\\"application/vnd.sun.xml.writer.template\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"stw\\\"]},\\\"application/vnd.sus-calendar\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"sus\\\",\\\"susp\\\"]},\\\"application/vnd.svd\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"svd\\\"]},\\\"application/vnd.swiftview-ics\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.symbian.install\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"sis\\\",\\\"sisx\\\"]},\\\"application/vnd.syncml+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"xsm\\\"]},\\\"application/vnd.syncml.dm+wbxml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"bdm\\\"]},\\\"application/vnd.syncml.dm+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"xdm\\\"]},\\\"application/vnd.syncml.dm.notification\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.syncml.dmddf+wbxml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.syncml.dmddf+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.syncml.dmtnds+wbxml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.syncml.dmtnds+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.syncml.ds.notification\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.tao.intent-module-archive\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"tao\\\"]},\\\"application/vnd.tcpdump.pcap\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"pcap\\\",\\\"cap\\\",\\\"dmp\\\"]},\\\"application/vnd.tmd.mediaflex.api+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.tml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.tmobile-livetv\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"tmo\\\"]},\\\"application/vnd.trid.tpt\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"tpt\\\"]},\\\"application/vnd.triscape.mxs\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mxs\\\"]},\\\"application/vnd.trueapp\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"tra\\\"]},\\\"application/vnd.truedoc\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ubisoft.webplayer\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.ufdl\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ufd\\\",\\\"ufdl\\\"]},\\\"application/vnd.uiq.theme\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"utz\\\"]},\\\"application/vnd.umajin\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"umj\\\"]},\\\"application/vnd.unity\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"unityweb\\\"]},\\\"application/vnd.uoml+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"uoml\\\"]},\\\"application/vnd.uplanet.alert\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.uplanet.alert-wbxml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.uplanet.bearer-choice\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.uplanet.bearer-choice-wbxml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.uplanet.cacheop\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.uplanet.cacheop-wbxml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.uplanet.channel\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.uplanet.channel-wbxml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.uplanet.list\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.uplanet.list-wbxml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.uplanet.listcmd\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.uplanet.listcmd-wbxml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.uplanet.signal\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.uri-map\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.valve.source.material\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.vcx\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"vcx\\\"]},\\\"application/vnd.vd-study\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.vectorworks\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.vel+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.verimatrix.vcas\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.vidsoft.vidconference\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.visio\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"vsd\\\",\\\"vst\\\",\\\"vss\\\",\\\"vsw\\\"]},\\\"application/vnd.visionary\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"vis\\\"]},\\\"application/vnd.vividence.scriptfile\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.vsf\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"vsf\\\"]},\\\"application/vnd.wap.sic\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.wap.slc\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.wap.wbxml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"wbxml\\\"]},\\\"application/vnd.wap.wmlc\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"wmlc\\\"]},\\\"application/vnd.wap.wmlscriptc\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"wmlsc\\\"]},\\\"application/vnd.webturbo\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"wtb\\\"]},\\\"application/vnd.wfa.p2p\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.wfa.wsc\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.windows.devicepairing\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.wmc\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.wmf.bootstrap\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.wolfram.mathematica\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.wolfram.mathematica.package\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.wolfram.player\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"nbp\\\"]},\\\"application/vnd.wordperfect\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"wpd\\\"]},\\\"application/vnd.wqd\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"wqd\\\"]},\\\"application/vnd.wrq-hp3000-labelled\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.wt.stf\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"stf\\\"]},\\\"application/vnd.wv.csp+wbxml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.wv.csp+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.wv.ssp+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.xacml+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/vnd.xara\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"xar\\\"]},\\\"application/vnd.xfdl\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"xfdl\\\"]},\\\"application/vnd.xfdl.webform\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.xmi+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.xmpie.cpkg\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.xmpie.dpkg\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.xmpie.plan\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.xmpie.ppkg\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.xmpie.xlim\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.yamaha.hv-dic\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"hvd\\\"]},\\\"application/vnd.yamaha.hv-script\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"hvs\\\"]},\\\"application/vnd.yamaha.hv-voice\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"hvp\\\"]},\\\"application/vnd.yamaha.openscoreformat\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"osf\\\"]},\\\"application/vnd.yamaha.openscoreformat.osfpvg+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"osfpvg\\\"]},\\\"application/vnd.yamaha.remote-setup\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.yamaha.smaf-audio\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"saf\\\"]},\\\"application/vnd.yamaha.smaf-phrase\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"spf\\\"]},\\\"application/vnd.yamaha.through-ngn\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.yamaha.tunnel-udpencap\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.yaoweme\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/vnd.yellowriver-custom-menu\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"cmp\\\"]},\\\"application/vnd.zul\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"zir\\\",\\\"zirz\\\"]},\\\"application/vnd.zzazz.deck+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"zaz\\\"]},\\\"application/voicexml+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"vxml\\\"]},\\\"application/vq-rtcpxr\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/watcherinfo+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/whoispp-query\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/whoispp-response\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/widget\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"wgt\\\"]},\\\"application/winhlp\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"hlp\\\"]},\\\"application/wita\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/wordperfect5.1\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/wsdl+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"wsdl\\\"]},\\\"application/wspolicy+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"wspolicy\\\"]},\\\"application/x-7z-compressed\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"7z\\\"]},\\\"application/x-abiword\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"abw\\\"]},\\\"application/x-ace-compressed\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"ace\\\"]},\\\"application/x-amf\\\":{\\\"source\\\":\\\"apache\\\"},\\\"application/x-apple-diskimage\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"dmg\\\"]},\\\"application/x-authorware-bin\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"aab\\\",\\\"x32\\\",\\\"u32\\\",\\\"vox\\\"]},\\\"application/x-authorware-map\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"aam\\\"]},\\\"application/x-authorware-seg\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"aas\\\"]},\\\"application/x-bcpio\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"bcpio\\\"]},\\\"application/x-bdoc\\\":{\\\"compressible\\\":false,\\\"extensions\\\":[\\\"bdoc\\\"]},\\\"application/x-bittorrent\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"torrent\\\"]},\\\"application/x-blorb\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"blb\\\",\\\"blorb\\\"]},\\\"application/x-bzip\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"bz\\\"]},\\\"application/x-bzip2\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"bz2\\\",\\\"boz\\\"]},\\\"application/x-cbr\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"cbr\\\",\\\"cba\\\",\\\"cbt\\\",\\\"cbz\\\",\\\"cb7\\\"]},\\\"application/x-cdlink\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"vcd\\\"]},\\\"application/x-cfs-compressed\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"cfs\\\"]},\\\"application/x-chat\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"chat\\\"]},\\\"application/x-chess-pgn\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"pgn\\\"]},\\\"application/x-chrome-extension\\\":{\\\"extensions\\\":[\\\"crx\\\"]},\\\"application/x-cocoa\\\":{\\\"source\\\":\\\"nginx\\\",\\\"extensions\\\":[\\\"cco\\\"]},\\\"application/x-compress\\\":{\\\"source\\\":\\\"apache\\\"},\\\"application/x-conference\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"nsc\\\"]},\\\"application/x-cpio\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"cpio\\\"]},\\\"application/x-csh\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"csh\\\"]},\\\"application/x-deb\\\":{\\\"compressible\\\":false},\\\"application/x-debian-package\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"deb\\\",\\\"udeb\\\"]},\\\"application/x-dgc-compressed\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"dgc\\\"]},\\\"application/x-director\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"dir\\\",\\\"dcr\\\",\\\"dxr\\\",\\\"cst\\\",\\\"cct\\\",\\\"cxt\\\",\\\"w3d\\\",\\\"fgd\\\",\\\"swa\\\"]},\\\"application/x-doom\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"wad\\\"]},\\\"application/x-dtbncx+xml\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"ncx\\\"]},\\\"application/x-dtbook+xml\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"dtb\\\"]},\\\"application/x-dtbresource+xml\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"res\\\"]},\\\"application/x-dvi\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"dvi\\\"]},\\\"application/x-envoy\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"evy\\\"]},\\\"application/x-eva\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"eva\\\"]},\\\"application/x-font-bdf\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"bdf\\\"]},\\\"application/x-font-dos\\\":{\\\"source\\\":\\\"apache\\\"},\\\"application/x-font-framemaker\\\":{\\\"source\\\":\\\"apache\\\"},\\\"application/x-font-ghostscript\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"gsf\\\"]},\\\"application/x-font-libgrx\\\":{\\\"source\\\":\\\"apache\\\"},\\\"application/x-font-linux-psf\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"psf\\\"]},\\\"application/x-font-otf\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"otf\\\"]},\\\"application/x-font-pcf\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"pcf\\\"]},\\\"application/x-font-snf\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"snf\\\"]},\\\"application/x-font-speedo\\\":{\\\"source\\\":\\\"apache\\\"},\\\"application/x-font-sunos-news\\\":{\\\"source\\\":\\\"apache\\\"},\\\"application/x-font-ttf\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"ttf\\\",\\\"ttc\\\"]},\\\"application/x-font-type1\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"pfa\\\",\\\"pfb\\\",\\\"pfm\\\",\\\"afm\\\"]},\\\"application/x-font-vfont\\\":{\\\"source\\\":\\\"apache\\\"},\\\"application/x-freearc\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"arc\\\"]},\\\"application/x-futuresplash\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"spl\\\"]},\\\"application/x-gca-compressed\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"gca\\\"]},\\\"application/x-glulx\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"ulx\\\"]},\\\"application/x-gnumeric\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"gnumeric\\\"]},\\\"application/x-gramps-xml\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"gramps\\\"]},\\\"application/x-gtar\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"gtar\\\"]},\\\"application/x-gzip\\\":{\\\"source\\\":\\\"apache\\\"},\\\"application/x-hdf\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"hdf\\\"]},\\\"application/x-httpd-php\\\":{\\\"compressible\\\":true,\\\"extensions\\\":[\\\"php\\\"]},\\\"application/x-install-instructions\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"install\\\"]},\\\"application/x-iso9660-image\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"iso\\\"]},\\\"application/x-java-archive-diff\\\":{\\\"source\\\":\\\"nginx\\\",\\\"extensions\\\":[\\\"jardiff\\\"]},\\\"application/x-java-jnlp-file\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"jnlp\\\"]},\\\"application/x-javascript\\\":{\\\"compressible\\\":true},\\\"application/x-latex\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"latex\\\"]},\\\"application/x-lua-bytecode\\\":{\\\"extensions\\\":[\\\"luac\\\"]},\\\"application/x-lzh-compressed\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"lzh\\\",\\\"lha\\\"]},\\\"application/x-makeself\\\":{\\\"source\\\":\\\"nginx\\\",\\\"extensions\\\":[\\\"run\\\"]},\\\"application/x-mie\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"mie\\\"]},\\\"application/x-mobipocket-ebook\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"prc\\\",\\\"mobi\\\"]},\\\"application/x-mpegurl\\\":{\\\"compressible\\\":false},\\\"application/x-ms-application\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"application\\\"]},\\\"application/x-ms-shortcut\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"lnk\\\"]},\\\"application/x-ms-wmd\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"wmd\\\"]},\\\"application/x-ms-wmz\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"wmz\\\"]},\\\"application/x-ms-xbap\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"xbap\\\"]},\\\"application/x-msaccess\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"mdb\\\"]},\\\"application/x-msbinder\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"obd\\\"]},\\\"application/x-mscardfile\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"crd\\\"]},\\\"application/x-msclip\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"clp\\\"]},\\\"application/x-msdos-program\\\":{\\\"extensions\\\":[\\\"exe\\\"]},\\\"application/x-msdownload\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"exe\\\",\\\"dll\\\",\\\"com\\\",\\\"bat\\\",\\\"msi\\\"]},\\\"application/x-msmediaview\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"mvb\\\",\\\"m13\\\",\\\"m14\\\"]},\\\"application/x-msmetafile\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"wmf\\\",\\\"wmz\\\",\\\"emf\\\",\\\"emz\\\"]},\\\"application/x-msmoney\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"mny\\\"]},\\\"application/x-mspublisher\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"pub\\\"]},\\\"application/x-msschedule\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"scd\\\"]},\\\"application/x-msterminal\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"trm\\\"]},\\\"application/x-mswrite\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"wri\\\"]},\\\"application/x-netcdf\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"nc\\\",\\\"cdf\\\"]},\\\"application/x-ns-proxy-autoconfig\\\":{\\\"compressible\\\":true,\\\"extensions\\\":[\\\"pac\\\"]},\\\"application/x-nzb\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"nzb\\\"]},\\\"application/x-perl\\\":{\\\"source\\\":\\\"nginx\\\",\\\"extensions\\\":[\\\"pl\\\",\\\"pm\\\"]},\\\"application/x-pilot\\\":{\\\"source\\\":\\\"nginx\\\",\\\"extensions\\\":[\\\"prc\\\",\\\"pdb\\\"]},\\\"application/x-pkcs12\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"p12\\\",\\\"pfx\\\"]},\\\"application/x-pkcs7-certificates\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"p7b\\\",\\\"spc\\\"]},\\\"application/x-pkcs7-certreqresp\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"p7r\\\"]},\\\"application/x-rar-compressed\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"rar\\\"]},\\\"application/x-redhat-package-manager\\\":{\\\"source\\\":\\\"nginx\\\",\\\"extensions\\\":[\\\"rpm\\\"]},\\\"application/x-research-info-systems\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"ris\\\"]},\\\"application/x-sea\\\":{\\\"source\\\":\\\"nginx\\\",\\\"extensions\\\":[\\\"sea\\\"]},\\\"application/x-sh\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"sh\\\"]},\\\"application/x-shar\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"shar\\\"]},\\\"application/x-shockwave-flash\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"swf\\\"]},\\\"application/x-silverlight-app\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"xap\\\"]},\\\"application/x-sql\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"sql\\\"]},\\\"application/x-stuffit\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"sit\\\"]},\\\"application/x-stuffitx\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"sitx\\\"]},\\\"application/x-subrip\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"srt\\\"]},\\\"application/x-sv4cpio\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"sv4cpio\\\"]},\\\"application/x-sv4crc\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"sv4crc\\\"]},\\\"application/x-t3vm-image\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"t3\\\"]},\\\"application/x-tads\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"gam\\\"]},\\\"application/x-tar\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"tar\\\"]},\\\"application/x-tcl\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"tcl\\\",\\\"tk\\\"]},\\\"application/x-tex\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"tex\\\"]},\\\"application/x-tex-tfm\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"tfm\\\"]},\\\"application/x-texinfo\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"texinfo\\\",\\\"texi\\\"]},\\\"application/x-tgif\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"obj\\\"]},\\\"application/x-ustar\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"ustar\\\"]},\\\"application/x-wais-source\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"src\\\"]},\\\"application/x-web-app-manifest+json\\\":{\\\"compressible\\\":true,\\\"extensions\\\":[\\\"webapp\\\"]},\\\"application/x-www-form-urlencoded\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"application/x-x509-ca-cert\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"der\\\",\\\"crt\\\",\\\"pem\\\"]},\\\"application/x-xfig\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"fig\\\"]},\\\"application/x-xliff+xml\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"xlf\\\"]},\\\"application/x-xpinstall\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"xpi\\\"]},\\\"application/x-xz\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"xz\\\"]},\\\"application/x-zmachine\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"z1\\\",\\\"z2\\\",\\\"z3\\\",\\\"z4\\\",\\\"z5\\\",\\\"z6\\\",\\\"z7\\\",\\\"z8\\\"]},\\\"application/x400-bp\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/xacml+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/xaml+xml\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"xaml\\\"]},\\\"application/xcap-att+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/xcap-caps+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/xcap-diff+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"xdf\\\"]},\\\"application/xcap-el+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/xcap-error+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/xcap-ns+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/xcon-conference-info+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/xcon-conference-info-diff+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/xenc+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"xenc\\\"]},\\\"application/xhtml+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"xhtml\\\",\\\"xht\\\"]},\\\"application/xhtml-voice+xml\\\":{\\\"source\\\":\\\"apache\\\"},\\\"application/xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"xml\\\",\\\"xsl\\\",\\\"xsd\\\",\\\"rng\\\"]},\\\"application/xml-dtd\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"dtd\\\"]},\\\"application/xml-external-parsed-entity\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/xml-patch+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/xmpp+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"application/xop+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"xop\\\"]},\\\"application/xproc+xml\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"xpl\\\"]},\\\"application/xslt+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"xslt\\\"]},\\\"application/xspf+xml\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"xspf\\\"]},\\\"application/xv+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mxml\\\",\\\"xhvml\\\",\\\"xvml\\\",\\\"xvm\\\"]},\\\"application/yang\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"yang\\\"]},\\\"application/yin+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"yin\\\"]},\\\"application/zip\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"zip\\\"]},\\\"application/zlib\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/1d-interleaved-parityfec\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/32kadpcm\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/3gpp\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"3gpp\\\"]},\\\"audio/3gpp2\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/ac3\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/adpcm\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"adp\\\"]},\\\"audio/amr\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/amr-wb\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/amr-wb+\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/aptx\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/asc\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/atrac-advanced-lossless\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/atrac-x\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/atrac3\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/basic\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"au\\\",\\\"snd\\\"]},\\\"audio/bv16\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/bv32\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/clearmode\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/cn\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/dat12\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/dls\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/dsr-es201108\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/dsr-es202050\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/dsr-es202211\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/dsr-es202212\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/dv\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/dvi4\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/eac3\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/encaprtp\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/evrc\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/evrc-qcp\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/evrc0\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/evrc1\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/evrcb\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/evrcb0\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/evrcb1\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/evrcnw\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/evrcnw0\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/evrcnw1\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/evrcwb\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/evrcwb0\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/evrcwb1\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/evs\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/fwdred\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/g711-0\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/g719\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/g722\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/g7221\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/g723\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/g726-16\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/g726-24\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/g726-32\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/g726-40\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/g728\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/g729\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/g7291\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/g729d\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/g729e\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/gsm\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/gsm-efr\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/gsm-hr-08\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/ilbc\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/ip-mr_v2.5\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/isac\\\":{\\\"source\\\":\\\"apache\\\"},\\\"audio/l16\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/l20\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/l24\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false},\\\"audio/l8\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/lpc\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/midi\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"mid\\\",\\\"midi\\\",\\\"kar\\\",\\\"rmi\\\"]},\\\"audio/mobile-xmf\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/mp3\\\":{\\\"compressible\\\":false,\\\"extensions\\\":[\\\"mp3\\\"]},\\\"audio/mp4\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"m4a\\\",\\\"mp4a\\\"]},\\\"audio/mp4a-latm\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/mpa\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/mpa-robust\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/mpeg\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"mpga\\\",\\\"mp2\\\",\\\"mp2a\\\",\\\"mp3\\\",\\\"m2a\\\",\\\"m3a\\\"]},\\\"audio/mpeg4-generic\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/musepack\\\":{\\\"source\\\":\\\"apache\\\"},\\\"audio/ogg\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"oga\\\",\\\"ogg\\\",\\\"spx\\\"]},\\\"audio/opus\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/parityfec\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/pcma\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/pcma-wb\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/pcmu\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/pcmu-wb\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/prs.sid\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/qcelp\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/raptorfec\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/red\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/rtp-enc-aescm128\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/rtp-midi\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/rtploopback\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/rtx\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/s3m\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"s3m\\\"]},\\\"audio/silk\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"sil\\\"]},\\\"audio/smv\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/smv-qcp\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/smv0\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/sp-midi\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/speex\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/t140c\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/t38\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/telephone-event\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/tone\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/uemclip\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/ulpfec\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vdvi\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vmr-wb\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.3gpp.iufp\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.4sb\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.audiokoz\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.celp\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.cisco.nse\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.cmles.radio-events\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.cns.anp1\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.cns.inf1\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.dece.audio\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"uva\\\",\\\"uvva\\\"]},\\\"audio/vnd.digital-winds\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"eol\\\"]},\\\"audio/vnd.dlna.adts\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.dolby.heaac.1\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.dolby.heaac.2\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.dolby.mlp\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.dolby.mps\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.dolby.pl2\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.dolby.pl2x\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.dolby.pl2z\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.dolby.pulse.1\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.dra\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"dra\\\"]},\\\"audio/vnd.dts\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"dts\\\"]},\\\"audio/vnd.dts.hd\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"dtshd\\\"]},\\\"audio/vnd.dvb.file\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.everad.plj\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.hns.audio\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.lucent.voice\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"lvp\\\"]},\\\"audio/vnd.ms-playready.media.pya\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"pya\\\"]},\\\"audio/vnd.nokia.mobile-xmf\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.nortel.vbk\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.nuera.ecelp4800\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ecelp4800\\\"]},\\\"audio/vnd.nuera.ecelp7470\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ecelp7470\\\"]},\\\"audio/vnd.nuera.ecelp9600\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ecelp9600\\\"]},\\\"audio/vnd.octel.sbc\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.qcelp\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.rhetorex.32kadpcm\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.rip\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"rip\\\"]},\\\"audio/vnd.rn-realaudio\\\":{\\\"compressible\\\":false},\\\"audio/vnd.sealedmedia.softseal.mpeg\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.vmx.cvsd\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/vnd.wave\\\":{\\\"compressible\\\":false},\\\"audio/vorbis\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false},\\\"audio/vorbis-config\\\":{\\\"source\\\":\\\"iana\\\"},\\\"audio/wav\\\":{\\\"compressible\\\":false,\\\"extensions\\\":[\\\"wav\\\"]},\\\"audio/wave\\\":{\\\"compressible\\\":false,\\\"extensions\\\":[\\\"wav\\\"]},\\\"audio/webm\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"weba\\\"]},\\\"audio/x-aac\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"aac\\\"]},\\\"audio/x-aiff\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"aif\\\",\\\"aiff\\\",\\\"aifc\\\"]},\\\"audio/x-caf\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"caf\\\"]},\\\"audio/x-flac\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"flac\\\"]},\\\"audio/x-m4a\\\":{\\\"source\\\":\\\"nginx\\\",\\\"extensions\\\":[\\\"m4a\\\"]},\\\"audio/x-matroska\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"mka\\\"]},\\\"audio/x-mpegurl\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"m3u\\\"]},\\\"audio/x-ms-wax\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"wax\\\"]},\\\"audio/x-ms-wma\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"wma\\\"]},\\\"audio/x-pn-realaudio\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"ram\\\",\\\"ra\\\"]},\\\"audio/x-pn-realaudio-plugin\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"rmp\\\"]},\\\"audio/x-realaudio\\\":{\\\"source\\\":\\\"nginx\\\",\\\"extensions\\\":[\\\"ra\\\"]},\\\"audio/x-tta\\\":{\\\"source\\\":\\\"apache\\\"},\\\"audio/x-wav\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"wav\\\"]},\\\"audio/xm\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"xm\\\"]},\\\"chemical/x-cdx\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"cdx\\\"]},\\\"chemical/x-cif\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"cif\\\"]},\\\"chemical/x-cmdf\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"cmdf\\\"]},\\\"chemical/x-cml\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"cml\\\"]},\\\"chemical/x-csml\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"csml\\\"]},\\\"chemical/x-pdb\\\":{\\\"source\\\":\\\"apache\\\"},\\\"chemical/x-xyz\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"xyz\\\"]},\\\"font/opentype\\\":{\\\"compressible\\\":true,\\\"extensions\\\":[\\\"otf\\\"]},\\\"image/bmp\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"bmp\\\"]},\\\"image/cgm\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"cgm\\\"]},\\\"image/dicom-rle\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/emf\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/fits\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/g3fax\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"g3\\\"]},\\\"image/gif\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"gif\\\"]},\\\"image/ief\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ief\\\"]},\\\"image/jls\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/jp2\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/jpeg\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"jpeg\\\",\\\"jpg\\\",\\\"jpe\\\"]},\\\"image/jpm\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/jpx\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/ktx\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ktx\\\"]},\\\"image/naplps\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/pjpeg\\\":{\\\"compressible\\\":false},\\\"image/png\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"png\\\"]},\\\"image/prs.btif\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"btif\\\"]},\\\"image/prs.pti\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/pwg-raster\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/sgi\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"sgi\\\"]},\\\"image/svg+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"svg\\\",\\\"svgz\\\"]},\\\"image/t38\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/tiff\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"tiff\\\",\\\"tif\\\"]},\\\"image/tiff-fx\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/vnd.adobe.photoshop\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"psd\\\"]},\\\"image/vnd.airzip.accelerator.azv\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/vnd.cns.inf2\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/vnd.dece.graphic\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"uvi\\\",\\\"uvvi\\\",\\\"uvg\\\",\\\"uvvg\\\"]},\\\"image/vnd.djvu\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"djvu\\\",\\\"djv\\\"]},\\\"image/vnd.dvb.subtitle\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"sub\\\"]},\\\"image/vnd.dwg\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"dwg\\\"]},\\\"image/vnd.dxf\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"dxf\\\"]},\\\"image/vnd.fastbidsheet\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"fbs\\\"]},\\\"image/vnd.fpx\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"fpx\\\"]},\\\"image/vnd.fst\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"fst\\\"]},\\\"image/vnd.fujixerox.edmics-mmr\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mmr\\\"]},\\\"image/vnd.fujixerox.edmics-rlc\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"rlc\\\"]},\\\"image/vnd.globalgraphics.pgb\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/vnd.microsoft.icon\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/vnd.mix\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/vnd.mozilla.apng\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/vnd.ms-modi\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mdi\\\"]},\\\"image/vnd.ms-photo\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"wdp\\\"]},\\\"image/vnd.net-fpx\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"npx\\\"]},\\\"image/vnd.radiance\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/vnd.sealed.png\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/vnd.sealedmedia.softseal.gif\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/vnd.sealedmedia.softseal.jpg\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/vnd.svf\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/vnd.tencent.tap\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/vnd.valve.source.texture\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/vnd.wap.wbmp\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"wbmp\\\"]},\\\"image/vnd.xiff\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"xif\\\"]},\\\"image/vnd.zbrush.pcx\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/webp\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"webp\\\"]},\\\"image/wmf\\\":{\\\"source\\\":\\\"iana\\\"},\\\"image/x-3ds\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"3ds\\\"]},\\\"image/x-cmu-raster\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"ras\\\"]},\\\"image/x-cmx\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"cmx\\\"]},\\\"image/x-freehand\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"fh\\\",\\\"fhc\\\",\\\"fh4\\\",\\\"fh5\\\",\\\"fh7\\\"]},\\\"image/x-icon\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"ico\\\"]},\\\"image/x-jng\\\":{\\\"source\\\":\\\"nginx\\\",\\\"extensions\\\":[\\\"jng\\\"]},\\\"image/x-mrsid-image\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"sid\\\"]},\\\"image/x-ms-bmp\\\":{\\\"source\\\":\\\"nginx\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"bmp\\\"]},\\\"image/x-pcx\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"pcx\\\"]},\\\"image/x-pict\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"pic\\\",\\\"pct\\\"]},\\\"image/x-portable-anymap\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"pnm\\\"]},\\\"image/x-portable-bitmap\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"pbm\\\"]},\\\"image/x-portable-graymap\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"pgm\\\"]},\\\"image/x-portable-pixmap\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"ppm\\\"]},\\\"image/x-rgb\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"rgb\\\"]},\\\"image/x-tga\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"tga\\\"]},\\\"image/x-xbitmap\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"xbm\\\"]},\\\"image/x-xcf\\\":{\\\"compressible\\\":false},\\\"image/x-xpixmap\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"xpm\\\"]},\\\"image/x-xwindowdump\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"xwd\\\"]},\\\"message/cpim\\\":{\\\"source\\\":\\\"iana\\\"},\\\"message/delivery-status\\\":{\\\"source\\\":\\\"iana\\\"},\\\"message/disposition-notification\\\":{\\\"source\\\":\\\"iana\\\"},\\\"message/external-body\\\":{\\\"source\\\":\\\"iana\\\"},\\\"message/feedback-report\\\":{\\\"source\\\":\\\"iana\\\"},\\\"message/global\\\":{\\\"source\\\":\\\"iana\\\"},\\\"message/global-delivery-status\\\":{\\\"source\\\":\\\"iana\\\"},\\\"message/global-disposition-notification\\\":{\\\"source\\\":\\\"iana\\\"},\\\"message/global-headers\\\":{\\\"source\\\":\\\"iana\\\"},\\\"message/http\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false},\\\"message/imdn+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"message/news\\\":{\\\"source\\\":\\\"iana\\\"},\\\"message/partial\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false},\\\"message/rfc822\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"eml\\\",\\\"mime\\\"]},\\\"message/s-http\\\":{\\\"source\\\":\\\"iana\\\"},\\\"message/sip\\\":{\\\"source\\\":\\\"iana\\\"},\\\"message/sipfrag\\\":{\\\"source\\\":\\\"iana\\\"},\\\"message/tracking-status\\\":{\\\"source\\\":\\\"iana\\\"},\\\"message/vnd.si.simp\\\":{\\\"source\\\":\\\"iana\\\"},\\\"message/vnd.wfa.wsc\\\":{\\\"source\\\":\\\"iana\\\"},\\\"model/gltf+json\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"model/iges\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"igs\\\",\\\"iges\\\"]},\\\"model/mesh\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"msh\\\",\\\"mesh\\\",\\\"silo\\\"]},\\\"model/vnd.collada+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"dae\\\"]},\\\"model/vnd.dwf\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"dwf\\\"]},\\\"model/vnd.flatland.3dml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"model/vnd.gdl\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"gdl\\\"]},\\\"model/vnd.gs-gdl\\\":{\\\"source\\\":\\\"apache\\\"},\\\"model/vnd.gs.gdl\\\":{\\\"source\\\":\\\"iana\\\"},\\\"model/vnd.gtw\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"gtw\\\"]},\\\"model/vnd.moml+xml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"model/vnd.mts\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"mts\\\"]},\\\"model/vnd.opengex\\\":{\\\"source\\\":\\\"iana\\\"},\\\"model/vnd.parasolid.transmit.binary\\\":{\\\"source\\\":\\\"iana\\\"},\\\"model/vnd.parasolid.transmit.text\\\":{\\\"source\\\":\\\"iana\\\"},\\\"model/vnd.rosette.annotated-data-model\\\":{\\\"source\\\":\\\"iana\\\"},\\\"model/vnd.valve.source.compiled-map\\\":{\\\"source\\\":\\\"iana\\\"},\\\"model/vnd.vtu\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"vtu\\\"]},\\\"model/vrml\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"wrl\\\",\\\"vrml\\\"]},\\\"model/x3d+binary\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"x3db\\\",\\\"x3dbz\\\"]},\\\"model/x3d+fastinfoset\\\":{\\\"source\\\":\\\"iana\\\"},\\\"model/x3d+vrml\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"x3dv\\\",\\\"x3dvz\\\"]},\\\"model/x3d+xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"x3d\\\",\\\"x3dz\\\"]},\\\"model/x3d-vrml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"multipart/alternative\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false},\\\"multipart/appledouble\\\":{\\\"source\\\":\\\"iana\\\"},\\\"multipart/byteranges\\\":{\\\"source\\\":\\\"iana\\\"},\\\"multipart/digest\\\":{\\\"source\\\":\\\"iana\\\"},\\\"multipart/encrypted\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false},\\\"multipart/form-data\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false},\\\"multipart/header-set\\\":{\\\"source\\\":\\\"iana\\\"},\\\"multipart/mixed\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false},\\\"multipart/parallel\\\":{\\\"source\\\":\\\"iana\\\"},\\\"multipart/related\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false},\\\"multipart/report\\\":{\\\"source\\\":\\\"iana\\\"},\\\"multipart/signed\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":false},\\\"multipart/voice-message\\\":{\\\"source\\\":\\\"iana\\\"},\\\"multipart/x-mixed-replace\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/1d-interleaved-parityfec\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/cache-manifest\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"appcache\\\",\\\"manifest\\\"]},\\\"text/calendar\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ics\\\",\\\"ifb\\\"]},\\\"text/calender\\\":{\\\"compressible\\\":true},\\\"text/cmd\\\":{\\\"compressible\\\":true},\\\"text/coffeescript\\\":{\\\"extensions\\\":[\\\"coffee\\\",\\\"litcoffee\\\"]},\\\"text/css\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"css\\\"]},\\\"text/csv\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"csv\\\"]},\\\"text/csv-schema\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/directory\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/dns\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/ecmascript\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/encaprtp\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/enriched\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/fwdred\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/grammar-ref-list\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/hjson\\\":{\\\"extensions\\\":[\\\"hjson\\\"]},\\\"text/html\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"html\\\",\\\"htm\\\",\\\"shtml\\\"]},\\\"text/jade\\\":{\\\"extensions\\\":[\\\"jade\\\"]},\\\"text/javascript\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true},\\\"text/jcr-cnd\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/jsx\\\":{\\\"compressible\\\":true,\\\"extensions\\\":[\\\"jsx\\\"]},\\\"text/less\\\":{\\\"extensions\\\":[\\\"less\\\"]},\\\"text/markdown\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/mathml\\\":{\\\"source\\\":\\\"nginx\\\",\\\"extensions\\\":[\\\"mml\\\"]},\\\"text/mizar\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/n3\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"n3\\\"]},\\\"text/parameters\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/parityfec\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/plain\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"txt\\\",\\\"text\\\",\\\"conf\\\",\\\"def\\\",\\\"list\\\",\\\"log\\\",\\\"in\\\",\\\"ini\\\"]},\\\"text/provenance-notation\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/prs.fallenstein.rst\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/prs.lines.tag\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"dsc\\\"]},\\\"text/prs.prop.logic\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/raptorfec\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/red\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/rfc822-headers\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/richtext\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"rtx\\\"]},\\\"text/rtf\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"rtf\\\"]},\\\"text/rtp-enc-aescm128\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/rtploopback\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/rtx\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/sgml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"sgml\\\",\\\"sgm\\\"]},\\\"text/slim\\\":{\\\"extensions\\\":[\\\"slim\\\",\\\"slm\\\"]},\\\"text/stylus\\\":{\\\"extensions\\\":[\\\"stylus\\\",\\\"styl\\\"]},\\\"text/t140\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/tab-separated-values\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"tsv\\\"]},\\\"text/troff\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"t\\\",\\\"tr\\\",\\\"roff\\\",\\\"man\\\",\\\"me\\\",\\\"ms\\\"]},\\\"text/turtle\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"ttl\\\"]},\\\"text/ulpfec\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/uri-list\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"uri\\\",\\\"uris\\\",\\\"urls\\\"]},\\\"text/vcard\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"vcard\\\"]},\\\"text/vnd.a\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/vnd.abc\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/vnd.ascii-art\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/vnd.curl\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"curl\\\"]},\\\"text/vnd.curl.dcurl\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"dcurl\\\"]},\\\"text/vnd.curl.mcurl\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"mcurl\\\"]},\\\"text/vnd.curl.scurl\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"scurl\\\"]},\\\"text/vnd.debian.copyright\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/vnd.dmclientscript\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/vnd.dvb.subtitle\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"sub\\\"]},\\\"text/vnd.esmertec.theme-descriptor\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/vnd.fly\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"fly\\\"]},\\\"text/vnd.fmi.flexstor\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"flx\\\"]},\\\"text/vnd.graphviz\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"gv\\\"]},\\\"text/vnd.in3d.3dml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"3dml\\\"]},\\\"text/vnd.in3d.spot\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"spot\\\"]},\\\"text/vnd.iptc.newsml\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/vnd.iptc.nitf\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/vnd.latex-z\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/vnd.motorola.reflex\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/vnd.ms-mediapackage\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/vnd.net2phone.commcenter.command\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/vnd.radisys.msml-basic-layout\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/vnd.si.uricatalogue\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/vnd.sun.j2me.app-descriptor\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"jad\\\"]},\\\"text/vnd.trolltech.linguist\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/vnd.wap.si\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/vnd.wap.sl\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/vnd.wap.wml\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"wml\\\"]},\\\"text/vnd.wap.wmlscript\\\":{\\\"source\\\":\\\"iana\\\",\\\"extensions\\\":[\\\"wmls\\\"]},\\\"text/vtt\\\":{\\\"charset\\\":\\\"UTF-8\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"vtt\\\"]},\\\"text/x-asm\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"s\\\",\\\"asm\\\"]},\\\"text/x-c\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"c\\\",\\\"cc\\\",\\\"cxx\\\",\\\"cpp\\\",\\\"h\\\",\\\"hh\\\",\\\"dic\\\"]},\\\"text/x-component\\\":{\\\"source\\\":\\\"nginx\\\",\\\"extensions\\\":[\\\"htc\\\"]},\\\"text/x-fortran\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"f\\\",\\\"for\\\",\\\"f77\\\",\\\"f90\\\"]},\\\"text/x-gwt-rpc\\\":{\\\"compressible\\\":true},\\\"text/x-handlebars-template\\\":{\\\"extensions\\\":[\\\"hbs\\\"]},\\\"text/x-java-source\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"java\\\"]},\\\"text/x-jquery-tmpl\\\":{\\\"compressible\\\":true},\\\"text/x-lua\\\":{\\\"extensions\\\":[\\\"lua\\\"]},\\\"text/x-markdown\\\":{\\\"compressible\\\":true,\\\"extensions\\\":[\\\"markdown\\\",\\\"md\\\",\\\"mkd\\\"]},\\\"text/x-nfo\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"nfo\\\"]},\\\"text/x-opml\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"opml\\\"]},\\\"text/x-pascal\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"p\\\",\\\"pas\\\"]},\\\"text/x-processing\\\":{\\\"compressible\\\":true,\\\"extensions\\\":[\\\"pde\\\"]},\\\"text/x-sass\\\":{\\\"extensions\\\":[\\\"sass\\\"]},\\\"text/x-scss\\\":{\\\"extensions\\\":[\\\"scss\\\"]},\\\"text/x-setext\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"etx\\\"]},\\\"text/x-sfv\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"sfv\\\"]},\\\"text/x-suse-ymp\\\":{\\\"compressible\\\":true,\\\"extensions\\\":[\\\"ymp\\\"]},\\\"text/x-uuencode\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"uu\\\"]},\\\"text/x-vcalendar\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"vcs\\\"]},\\\"text/x-vcard\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"vcf\\\"]},\\\"text/xml\\\":{\\\"source\\\":\\\"iana\\\",\\\"compressible\\\":true,\\\"extensions\\\":[\\\"xml\\\"]},\\\"text/xml-external-parsed-entity\\\":{\\\"source\\\":\\\"iana\\\"},\\\"text/yaml\\\":{\\\"extensions\\\":[\\\"yaml\\\",\\\"yml\\\"]},\\\"video/1d-interleaved-parityfec\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/3gpp\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"3gp\\\",\\\"3gpp\\\"]},\\\"video/3gpp-tt\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/3gpp2\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"3g2\\\"]},\\\"video/bmpeg\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/bt656\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/celb\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/dv\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/encaprtp\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/h261\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"h261\\\"]},\\\"video/h263\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"h263\\\"]},\\\"video/h263-1998\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/h263-2000\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/h264\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"h264\\\"]},\\\"video/h264-rcdo\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/h264-svc\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/h265\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/iso.segment\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/jpeg\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"jpgv\\\"]},\\\"video/jpeg2000\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/jpm\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"jpm\\\",\\\"jpgm\\\"]},\\\"video/mj2\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"mj2\\\",\\\"mjp2\\\"]},\\\"video/mp1s\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/mp2p\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/mp2t\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"ts\\\"]},\\\"video/mp4\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"mp4\\\",\\\"mp4v\\\",\\\"mpg4\\\"]},\\\"video/mp4v-es\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/mpeg\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"mpeg\\\",\\\"mpg\\\",\\\"mpe\\\",\\\"m1v\\\",\\\"m2v\\\"]},\\\"video/mpeg4-generic\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/mpv\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/nv\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/ogg\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"ogv\\\"]},\\\"video/parityfec\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/pointer\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/quicktime\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"qt\\\",\\\"mov\\\"]},\\\"video/raptorfec\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/raw\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/rtp-enc-aescm128\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/rtploopback\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/rtx\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/smpte292m\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/ulpfec\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/vc1\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/vnd.cctv\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/vnd.dece.hd\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"uvh\\\",\\\"uvvh\\\"]},\\\"video/vnd.dece.mobile\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"uvm\\\",\\\"uvvm\\\"]},\\\"video/vnd.dece.mp4\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/vnd.dece.pd\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"uvp\\\",\\\"uvvp\\\"]},\\\"video/vnd.dece.sd\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"uvs\\\",\\\"uvvs\\\"]},\\\"video/vnd.dece.video\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"uvv\\\",\\\"uvvv\\\"]},\\\"video/vnd.directv.mpeg\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/vnd.directv.mpeg-tts\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/vnd.dlna.mpeg-tts\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/vnd.dvb.file\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"dvb\\\"]},\\\"video/vnd.fvt\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"fvt\\\"]},\\\"video/vnd.hns.video\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/vnd.iptvforum.1dparityfec-1010\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/vnd.iptvforum.1dparityfec-2005\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/vnd.iptvforum.2dparityfec-1010\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/vnd.iptvforum.2dparityfec-2005\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/vnd.iptvforum.ttsavc\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/vnd.iptvforum.ttsmpeg2\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/vnd.motorola.video\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/vnd.motorola.videop\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/vnd.mpegurl\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"mxu\\\",\\\"m4u\\\"]},\\\"video/vnd.ms-playready.media.pyv\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"pyv\\\"]},\\\"video/vnd.nokia.interleaved-multimedia\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/vnd.nokia.videovoip\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/vnd.objectvideo\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/vnd.radgamettools.bink\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/vnd.radgamettools.smacker\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/vnd.sealed.mpeg1\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/vnd.sealed.mpeg4\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/vnd.sealed.swf\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/vnd.sealedmedia.softseal.mov\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/vnd.uvvu.mp4\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"uvu\\\",\\\"uvvu\\\"]},\\\"video/vnd.vivo\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"viv\\\"]},\\\"video/vp8\\\":{\\\"source\\\":\\\"apache\\\"},\\\"video/webm\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"webm\\\"]},\\\"video/x-f4v\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"f4v\\\"]},\\\"video/x-fli\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"fli\\\"]},\\\"video/x-flv\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"flv\\\"]},\\\"video/x-m4v\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"m4v\\\"]},\\\"video/x-matroska\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"mkv\\\",\\\"mk3d\\\",\\\"mks\\\"]},\\\"video/x-mng\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"mng\\\"]},\\\"video/x-ms-asf\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"asf\\\",\\\"asx\\\"]},\\\"video/x-ms-vob\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"vob\\\"]},\\\"video/x-ms-wm\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"wm\\\"]},\\\"video/x-ms-wmv\\\":{\\\"source\\\":\\\"apache\\\",\\\"compressible\\\":false,\\\"extensions\\\":[\\\"wmv\\\"]},\\\"video/x-ms-wmx\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"wmx\\\"]},\\\"video/x-ms-wvx\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"wvx\\\"]},\\\"video/x-msvideo\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"avi\\\"]},\\\"video/x-sgi-movie\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"movie\\\"]},\\\"video/x-smv\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"smv\\\"]},\\\"x-conference/x-cooltalk\\\":{\\\"source\\\":\\\"apache\\\",\\\"extensions\\\":[\\\"ice\\\"]},\\\"x-shader/x-fragment\\\":{\\\"compressible\\\":true},\\\"x-shader/x-vertex\\\":{\\\"compressible\\\":true}}\");\n\n//# sourceURL=webpack:///./node_modules/mime-db/db.json?");

/***/ }),

/***/ "./node_modules/mime-db/index.js":
/*!***************************************!*\
  !*** ./node_modules/mime-db/index.js ***!
  \***************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = __webpack_require__(/*! ./db.json */ \"./node_modules/mime-db/db.json\")\n\n\n//# sourceURL=webpack:///./node_modules/mime-db/index.js?");

/***/ }),

/***/ "./node_modules/mime-to-extensions/index.js":
/*!**************************************************!*\
  !*** ./node_modules/mime-to-extensions/index.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = __webpack_require__(/*! mime-db */ \"./node_modules/mime-db/index.js\")\nvar extname = __webpack_require__(/*! path */ \"./node_modules/path-browserify/index.js\").extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar extractTypeRegExp = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar textTypeRegExp = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.allExtensions = allExtensions\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n  if (!type || typeof type !== 'string') {\n    return false\n  }\n\n  // TODO: use media-typer\n  var match = extractTypeRegExp.exec(type)\n  var mime = match && db[match[1].toLowerCase()]\n\n  if (mime && mime.charset) {\n    return mime.charset\n  }\n\n  // default text/* to utf-8\n  if (match && textTypeRegExp.test(match[1])) {\n    return 'UTF-8'\n  }\n\n  return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n  // TODO: should this even be in this module?\n  if (!str || typeof str !== 'string') {\n    return false\n  }\n\n  var mime = str.indexOf('/') === -1\n    ? exports.lookup(str)\n    : str\n\n  if (!mime) {\n    return false\n  }\n\n  // TODO: use content-type or other module\n  if (mime.indexOf('charset') === -1) {\n    var charset = exports.charset(mime)\n    if (charset) mime += '; charset=' + charset.toLowerCase()\n  }\n\n  return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n  var extensions = allExtensions(type)\n\n  return extensions ? extensions[0] : extensions\n}\n\n/**\n * Get all the extensions for a MIME type.\n *\n * @param {string} type\n * @return {boolean|Array}\n */\n\nfunction allExtensions (type) {\n  if (!type || typeof type !== 'string') {\n    return false\n  }\n\n  // TODO: use media-typer\n  var match = extractTypeRegExp.exec(type)\n\n  // get extensions\n  var exts = match && exports.extensions[match[1].toLowerCase()]\n\n  if (!exts || !exts.length) {\n    return false\n  }\n\n  return exts\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n  if (!path || typeof path !== 'string') {\n    return false\n  }\n\n  // get the extension (\"ext\" or \".ext\" or full path)\n  var extension = extname('x.' + path)\n    .toLowerCase()\n    .substr(1)\n\n  if (!extension) {\n    return false\n  }\n\n  return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n  // source preference (least -> most)\n  var preference = ['nginx', 'apache', undefined, 'iana']\n\n  Object.keys(db).forEach(function forEachMimeType (type) {\n    var mime = db[type]\n    var exts = mime.extensions\n\n    if (!exts || !exts.length) {\n      return\n    }\n\n    // mime -> extensions\n    extensions[type] = exts\n\n    // extension -> mime\n    for (var i = 0; i < exts.length; i++) {\n      var extension = exts[i]\n\n      if (types[extension]) {\n        var from = preference.indexOf(db[types[extension]].source)\n        var to = preference.indexOf(mime.source)\n\n        if (types[extension] !== 'application/octet-stream' &&\n          from > to || (from === to && types[extension].substr(0, 12) === 'application/')) {\n          // skip the remapping\n          continue\n        }\n      }\n\n      // set the extension -> mime\n      types[extension] = type\n    }\n  })\n}\n\n\n//# sourceURL=webpack:///./node_modules/mime-to-extensions/index.js?");

/***/ }),

/***/ "./node_modules/path-browserify/index.js":
/*!***********************************************!*\
  !*** ./node_modules/path-browserify/index.js ***!
  \***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/* WEBPACK VAR INJECTION */(function(process) {// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = parts.length - 1; i >= 0; i--) {\n    var last = parts[i];\n    if (last === '.') {\n      parts.splice(i, 1);\n    } else if (last === '..') {\n      parts.splice(i, 1);\n      up++;\n    } else if (up) {\n      parts.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (allowAboveRoot) {\n    for (; up--; up) {\n      parts.unshift('..');\n    }\n  }\n\n  return parts;\n}\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n  var resolvedPath = '',\n      resolvedAbsolute = false;\n\n  for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n    var path = (i >= 0) ? arguments[i] : process.cwd();\n\n    // Skip empty and invalid entries\n    if (typeof path !== 'string') {\n      throw new TypeError('Arguments to path.resolve must be strings');\n    } else if (!path) {\n      continue;\n    }\n\n    resolvedPath = path + '/' + resolvedPath;\n    resolvedAbsolute = path.charAt(0) === '/';\n  }\n\n  // At this point the path should be resolved to a full absolute path, but\n  // handle relative paths to be safe (might happen when process.cwd() fails)\n\n  // Normalize the path\n  resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n    return !!p;\n  }), !resolvedAbsolute).join('/');\n\n  return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n  var isAbsolute = exports.isAbsolute(path),\n      trailingSlash = substr(path, -1) === '/';\n\n  // Normalize the path\n  path = normalizeArray(filter(path.split('/'), function(p) {\n    return !!p;\n  }), !isAbsolute).join('/');\n\n  if (!path && !isAbsolute) {\n    path = '.';\n  }\n  if (path && trailingSlash) {\n    path += '/';\n  }\n\n  return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n  return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n  var paths = Array.prototype.slice.call(arguments, 0);\n  return exports.normalize(filter(paths, function(p, index) {\n    if (typeof p !== 'string') {\n      throw new TypeError('Arguments to path.join must be strings');\n    }\n    return p;\n  }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n  from = exports.resolve(from).substr(1);\n  to = exports.resolve(to).substr(1);\n\n  function trim(arr) {\n    var start = 0;\n    for (; start < arr.length; start++) {\n      if (arr[start] !== '') break;\n    }\n\n    var end = arr.length - 1;\n    for (; end >= 0; end--) {\n      if (arr[end] !== '') break;\n    }\n\n    if (start > end) return [];\n    return arr.slice(start, end - start + 1);\n  }\n\n  var fromParts = trim(from.split('/'));\n  var toParts = trim(to.split('/'));\n\n  var length = Math.min(fromParts.length, toParts.length);\n  var samePartsLength = length;\n  for (var i = 0; i < length; i++) {\n    if (fromParts[i] !== toParts[i]) {\n      samePartsLength = i;\n      break;\n    }\n  }\n\n  var outputParts = [];\n  for (var i = samePartsLength; i < fromParts.length; i++) {\n    outputParts.push('..');\n  }\n\n  outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n  return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n  if (typeof path !== 'string') path = path + '';\n  if (path.length === 0) return '.';\n  var code = path.charCodeAt(0);\n  var hasRoot = code === 47 /*/*/;\n  var end = -1;\n  var matchedSlash = true;\n  for (var i = path.length - 1; i >= 1; --i) {\n    code = path.charCodeAt(i);\n    if (code === 47 /*/*/) {\n        if (!matchedSlash) {\n          end = i;\n          break;\n        }\n      } else {\n      // We saw the first non-path separator\n      matchedSlash = false;\n    }\n  }\n\n  if (end === -1) return hasRoot ? '/' : '.';\n  if (hasRoot && end === 1) {\n    // return '//';\n    // Backwards-compat fix:\n    return '/';\n  }\n  return path.slice(0, end);\n};\n\nfunction basename(path) {\n  if (typeof path !== 'string') path = path + '';\n\n  var start = 0;\n  var end = -1;\n  var matchedSlash = true;\n  var i;\n\n  for (i = path.length - 1; i >= 0; --i) {\n    if (path.charCodeAt(i) === 47 /*/*/) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now\n        if (!matchedSlash) {\n          start = i + 1;\n          break;\n        }\n      } else if (end === -1) {\n      // We saw the first non-path separator, mark this as the end of our\n      // path component\n      matchedSlash = false;\n      end = i + 1;\n    }\n  }\n\n  if (end === -1) return '';\n  return path.slice(start, end);\n}\n\n// Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\nexports.basename = function (path, ext) {\n  var f = basename(path);\n  if (ext && f.substr(-1 * ext.length) === ext) {\n    f = f.substr(0, f.length - ext.length);\n  }\n  return f;\n};\n\nexports.extname = function (path) {\n  if (typeof path !== 'string') path = path + '';\n  var startDot = -1;\n  var startPart = 0;\n  var end = -1;\n  var matchedSlash = true;\n  // Track the state of characters (if any) we see before our first dot and\n  // after any path separator we find\n  var preDotState = 0;\n  for (var i = path.length - 1; i >= 0; --i) {\n    var code = path.charCodeAt(i);\n    if (code === 47 /*/*/) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now\n        if (!matchedSlash) {\n          startPart = i + 1;\n          break;\n        }\n        continue;\n      }\n    if (end === -1) {\n      // We saw the first non-path separator, mark this as the end of our\n      // extension\n      matchedSlash = false;\n      end = i + 1;\n    }\n    if (code === 46 /*.*/) {\n        // If this is our first dot, mark it as the start of our extension\n        if (startDot === -1)\n          startDot = i;\n        else if (preDotState !== 1)\n          preDotState = 1;\n    } else if (startDot !== -1) {\n      // We saw a non-dot and non-path separator before our dot, so we should\n      // have a good chance at having a non-empty extension\n      preDotState = -1;\n    }\n  }\n\n  if (startDot === -1 || end === -1 ||\n      // We saw a non-dot character immediately before the dot\n      preDotState === 0 ||\n      // The (right-most) trimmed path component is exactly '..'\n      preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n    return '';\n  }\n  return path.slice(startDot, end);\n};\n\nfunction filter (xs, f) {\n    if (xs.filter) return xs.filter(f);\n    var res = [];\n    for (var i = 0; i < xs.length; i++) {\n        if (f(xs[i], i, xs)) res.push(xs[i]);\n    }\n    return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n    ? function (str, start, len) { return str.substr(start, len) }\n    : function (str, start, len) {\n        if (start < 0) start = str.length + start;\n        return str.substr(start, len);\n    }\n;\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../process/browser.js */ \"./node_modules/process/browser.js\")))\n\n//# sourceURL=webpack:///./node_modules/path-browserify/index.js?");

/***/ }),

/***/ "./node_modules/process/browser.js":
/*!*****************************************!*\
  !*** ./node_modules/process/browser.js ***!
  \*****************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n//# sourceURL=webpack:///./node_modules/process/browser.js?");

/***/ }),

/***/ "./node_modules/setimmediate/setImmediate.js":
/*!***************************************************!*\
  !*** ./node_modules/setimmediate/setImmediate.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) {\n    \"use strict\";\n\n    if (global.setImmediate) {\n        return;\n    }\n\n    var nextHandle = 1; // Spec says greater than zero\n    var tasksByHandle = {};\n    var currentlyRunningATask = false;\n    var doc = global.document;\n    var registerImmediate;\n\n    function setImmediate(callback) {\n      // Callback can either be a function or a string\n      if (typeof callback !== \"function\") {\n        callback = new Function(\"\" + callback);\n      }\n      // Copy function arguments\n      var args = new Array(arguments.length - 1);\n      for (var i = 0; i < args.length; i++) {\n          args[i] = arguments[i + 1];\n      }\n      // Store and register the task\n      var task = { callback: callback, args: args };\n      tasksByHandle[nextHandle] = task;\n      registerImmediate(nextHandle);\n      return nextHandle++;\n    }\n\n    function clearImmediate(handle) {\n        delete tasksByHandle[handle];\n    }\n\n    function run(task) {\n        var callback = task.callback;\n        var args = task.args;\n        switch (args.length) {\n        case 0:\n            callback();\n            break;\n        case 1:\n            callback(args[0]);\n            break;\n        case 2:\n            callback(args[0], args[1]);\n            break;\n        case 3:\n            callback(args[0], args[1], args[2]);\n            break;\n        default:\n            callback.apply(undefined, args);\n            break;\n        }\n    }\n\n    function runIfPresent(handle) {\n        // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n        // So if we're currently running a task, we'll need to delay this invocation.\n        if (currentlyRunningATask) {\n            // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n            // \"too much recursion\" error.\n            setTimeout(runIfPresent, 0, handle);\n        } else {\n            var task = tasksByHandle[handle];\n            if (task) {\n                currentlyRunningATask = true;\n                try {\n                    run(task);\n                } finally {\n                    clearImmediate(handle);\n                    currentlyRunningATask = false;\n                }\n            }\n        }\n    }\n\n    function installNextTickImplementation() {\n        registerImmediate = function(handle) {\n            process.nextTick(function () { runIfPresent(handle); });\n        };\n    }\n\n    function canUsePostMessage() {\n        // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n        // where `global.postMessage` means something completely different and can't be used for this purpose.\n        if (global.postMessage && !global.importScripts) {\n            var postMessageIsAsynchronous = true;\n            var oldOnMessage = global.onmessage;\n            global.onmessage = function() {\n                postMessageIsAsynchronous = false;\n            };\n            global.postMessage(\"\", \"*\");\n            global.onmessage = oldOnMessage;\n            return postMessageIsAsynchronous;\n        }\n    }\n\n    function installPostMessageImplementation() {\n        // Installs an event handler on `global` for the `message` event: see\n        // * https://developer.mozilla.org/en/DOM/window.postMessage\n        // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n        var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n        var onGlobalMessage = function(event) {\n            if (event.source === global &&\n                typeof event.data === \"string\" &&\n                event.data.indexOf(messagePrefix) === 0) {\n                runIfPresent(+event.data.slice(messagePrefix.length));\n            }\n        };\n\n        if (global.addEventListener) {\n            global.addEventListener(\"message\", onGlobalMessage, false);\n        } else {\n            global.attachEvent(\"onmessage\", onGlobalMessage);\n        }\n\n        registerImmediate = function(handle) {\n            global.postMessage(messagePrefix + handle, \"*\");\n        };\n    }\n\n    function installMessageChannelImplementation() {\n        var channel = new MessageChannel();\n        channel.port1.onmessage = function(event) {\n            var handle = event.data;\n            runIfPresent(handle);\n        };\n\n        registerImmediate = function(handle) {\n            channel.port2.postMessage(handle);\n        };\n    }\n\n    function installReadyStateChangeImplementation() {\n        var html = doc.documentElement;\n        registerImmediate = function(handle) {\n            // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n            // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n            var script = doc.createElement(\"script\");\n            script.onreadystatechange = function () {\n                runIfPresent(handle);\n                script.onreadystatechange = null;\n                html.removeChild(script);\n                script = null;\n            };\n            html.appendChild(script);\n        };\n    }\n\n    function installSetTimeoutImplementation() {\n        registerImmediate = function(handle) {\n            setTimeout(runIfPresent, 0, handle);\n        };\n    }\n\n    // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n    var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n    attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n    // Don't get fooled by e.g. browserify environments.\n    if ({}.toString.call(global.process) === \"[object process]\") {\n        // For Node.js before 0.9\n        installNextTickImplementation();\n\n    } else if (canUsePostMessage()) {\n        // For non-IE10 modern browsers\n        installPostMessageImplementation();\n\n    } else if (global.MessageChannel) {\n        // For web workers, where supported\n        installMessageChannelImplementation();\n\n    } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n        // For IE 6–8\n        installReadyStateChangeImplementation();\n\n    } else {\n        // For older browsers\n        installSetTimeoutImplementation();\n    }\n\n    attachTo.setImmediate = setImmediate;\n    attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\"), __webpack_require__(/*! ./../process/browser.js */ \"./node_modules/process/browser.js\")))\n\n//# sourceURL=webpack:///./node_modules/setimmediate/setImmediate.js?");

/***/ }),

/***/ "./node_modules/timers-browserify/main.js":
/*!************************************************!*\
  !*** ./node_modules/timers-browserify/main.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/* WEBPACK VAR INJECTION */(function(global) {var scope = (typeof global !== \"undefined\" && global) ||\n            (typeof self !== \"undefined\" && self) ||\n            window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n  return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n  return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n  if (timeout) {\n    timeout.close();\n  }\n};\n\nfunction Timeout(id, clearFn) {\n  this._id = id;\n  this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n  this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n  clearTimeout(item._idleTimeoutId);\n\n  var msecs = item._idleTimeout;\n  if (msecs >= 0) {\n    item._idleTimeoutId = setTimeout(function onTimeout() {\n      if (item._onTimeout)\n        item._onTimeout();\n    }, msecs);\n  }\n};\n\n// setimmediate attaches itself to the global object\n__webpack_require__(/*! setimmediate */ \"./node_modules/setimmediate/setImmediate.js\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto.  Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n                       (typeof global !== \"undefined\" && global.setImmediate) ||\n                       (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n                         (typeof global !== \"undefined\" && global.clearImmediate) ||\n                         (this && this.clearImmediate);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///./node_modules/timers-browserify/main.js?");

/***/ }),

/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./assets/src/common/file-upload-icon.vue?vue&type=template&id=e19b3122&":
/*!*************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./assets/src/common/file-upload-icon.vue?vue&type=template&id=e19b3122& ***!
  \*************************************************************************************************************************************************************************************************************/
/*! exports provided: render, staticRenderFns */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { staticClass: \"ph-file-form-control\", on: { click: _vm.addFile } },\n    [\n      _c(\"div\", { staticClass: \"ph-tooltip-wrap ph-add-file\" }, [\n        _c(\n          \"svg\",\n          {\n            staticClass: \"feather feather-paperclip\",\n            staticStyle: { fill: \"none\" },\n            attrs: {\n              xmlns: \"http://www.w3.org/2000/svg\",\n              width: \"16\",\n              height: \"16\",\n              viewBox: \"0 0 24 24\",\n              fill: \"none\",\n              stroke: \"currentColor\",\n              \"stroke-width\": \"2\",\n              \"stroke-linecap\": \"round\",\n              \"stroke-linejoin\": \"round\",\n            },\n          },\n          [\n            _c(\"path\", {\n              attrs: {\n                d: \"M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48\",\n              },\n            }),\n          ]\n        ),\n        _vm._v(\" \"),\n        _c(\"div\", { staticClass: \"ph-tooltip\" }, [\n          _vm._v(_vm._s(_vm.__(\"Attach A File\", \"project-huddle\"))),\n        ]),\n      ]),\n      _vm._v(\" \"),\n      _c(\"input\", {\n        ref: \"file\",\n        staticClass: \"ph-file-input\",\n        staticStyle: { display: \"none\" },\n        attrs: { type: \"file\", accept: _vm.accepts },\n        on: { change: _vm.uploadImage },\n      }),\n    ]\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./assets/src/common/file-upload-icon.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options");

/***/ }),

/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js":
/*!********************************************************************!*\
  !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!
  \********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n  scriptExports,\n  render,\n  staticRenderFns,\n  functionalTemplate,\n  injectStyles,\n  scopeId,\n  moduleIdentifier, /* server only */\n  shadowMode /* vue-cli only */\n) {\n  // Vue.extend constructor export interop\n  var options = typeof scriptExports === 'function'\n    ? scriptExports.options\n    : scriptExports\n\n  // render functions\n  if (render) {\n    options.render = render\n    options.staticRenderFns = staticRenderFns\n    options._compiled = true\n  }\n\n  // functional template\n  if (functionalTemplate) {\n    options.functional = true\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = 'data-v-' + scopeId\n  }\n\n  var hook\n  if (moduleIdentifier) { // server build\n    hook = function (context) {\n      // 2.3 injection\n      context =\n        context || // cached call\n        (this.$vnode && this.$vnode.ssrContext) || // stateful\n        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n      // 2.2 with runInNewContext: true\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__\n      }\n      // inject component styles\n      if (injectStyles) {\n        injectStyles.call(this, context)\n      }\n      // register component module identifier for async chunk inferrence\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier)\n      }\n    }\n    // used by ssr in case component is cached and beforeCreate\n    // never gets called\n    options._ssrRegister = hook\n  } else if (injectStyles) {\n    hook = shadowMode\n      ? function () {\n        injectStyles.call(\n          this,\n          (options.functional ? this.parent : this).$root.$options.shadowRoot\n        )\n      }\n      : injectStyles\n  }\n\n  if (hook) {\n    if (options.functional) {\n      // for template-only hot-reload because in that case the render fn doesn't\n      // go through the normalizer\n      options._injectStyles = hook\n      // register for functional component in vue file\n      var originalRender = options.render\n      options.render = function renderWithStyleInjection (h, context) {\n        hook.call(context)\n        return originalRender(h, context)\n      }\n    } else {\n      // inject component registration as beforeCreate hook\n      var existing = options.beforeCreate\n      options.beforeCreate = existing\n        ? [].concat(existing, hook)\n        : [hook]\n    }\n  }\n\n  return {\n    exports: scriptExports,\n    options: options\n  }\n}\n\n\n//# sourceURL=webpack:///./node_modules/vue-loader/lib/runtime/componentNormalizer.js?");

/***/ }),

/***/ "./node_modules/vue/dist/vue.runtime.esm.js":
/*!**************************************************!*\
  !*** ./node_modules/vue/dist/vue.runtime.esm.js ***!
  \**************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global, setImmediate) {/*!\n * Vue.js v2.6.14\n * (c) 2014-2021 Evan You\n * Released under the MIT License.\n */\n/*  */\n\nvar emptyObject = Object.freeze({});\n\n// These helpers produce better VM code in JS engines due to their\n// explicitness and function inlining.\nfunction isUndef (v) {\n  return v === undefined || v === null\n}\n\nfunction isDef (v) {\n  return v !== undefined && v !== null\n}\n\nfunction isTrue (v) {\n  return v === true\n}\n\nfunction isFalse (v) {\n  return v === false\n}\n\n/**\n * Check if value is primitive.\n */\nfunction isPrimitive (value) {\n  return (\n    typeof value === 'string' ||\n    typeof value === 'number' ||\n    // $flow-disable-line\n    typeof value === 'symbol' ||\n    typeof value === 'boolean'\n  )\n}\n\n/**\n * Quick object check - this is primarily used to tell\n * Objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject (obj) {\n  return obj !== null && typeof obj === 'object'\n}\n\n/**\n * Get the raw type string of a value, e.g., [object Object].\n */\nvar _toString = Object.prototype.toString;\n\nfunction toRawType (value) {\n  return _toString.call(value).slice(8, -1)\n}\n\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nfunction isPlainObject (obj) {\n  return _toString.call(obj) === '[object Object]'\n}\n\nfunction isRegExp (v) {\n  return _toString.call(v) === '[object RegExp]'\n}\n\n/**\n * Check if val is a valid array index.\n */\nfunction isValidArrayIndex (val) {\n  var n = parseFloat(String(val));\n  return n >= 0 && Math.floor(n) === n && isFinite(val)\n}\n\nfunction isPromise (val) {\n  return (\n    isDef(val) &&\n    typeof val.then === 'function' &&\n    typeof val.catch === 'function'\n  )\n}\n\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction toString (val) {\n  return val == null\n    ? ''\n    : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\n      ? JSON.stringify(val, null, 2)\n      : String(val)\n}\n\n/**\n * Convert an input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber (val) {\n  var n = parseFloat(val);\n  return isNaN(n) ? val : n\n}\n\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap (\n  str,\n  expectsLowerCase\n) {\n  var map = Object.create(null);\n  var list = str.split(',');\n  for (var i = 0; i < list.length; i++) {\n    map[list[i]] = true;\n  }\n  return expectsLowerCase\n    ? function (val) { return map[val.toLowerCase()]; }\n    : function (val) { return map[val]; }\n}\n\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n\n/**\n * Check if an attribute is a reserved attribute.\n */\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n\n/**\n * Remove an item from an array.\n */\nfunction remove (arr, item) {\n  if (arr.length) {\n    var index = arr.indexOf(item);\n    if (index > -1) {\n      return arr.splice(index, 1)\n    }\n  }\n}\n\n/**\n * Check whether an object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn (obj, key) {\n  return hasOwnProperty.call(obj, key)\n}\n\n/**\n * Create a cached version of a pure function.\n */\nfunction cached (fn) {\n  var cache = Object.create(null);\n  return (function cachedFn (str) {\n    var hit = cache[str];\n    return hit || (cache[str] = fn(str))\n  })\n}\n\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n  return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\n});\n\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n  return str.charAt(0).toUpperCase() + str.slice(1)\n});\n\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cached(function (str) {\n  return str.replace(hyphenateRE, '-$1').toLowerCase()\n});\n\n/**\n * Simple bind polyfill for environments that do not support it,\n * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n * since native bind is now performant enough in most browsers.\n * But removing it would mean breaking code that was able to run in\n * PhantomJS 1.x, so this must be kept for backward compatibility.\n */\n\n/* istanbul ignore next */\nfunction polyfillBind (fn, ctx) {\n  function boundFn (a) {\n    var l = arguments.length;\n    return l\n      ? l > 1\n        ? fn.apply(ctx, arguments)\n        : fn.call(ctx, a)\n      : fn.call(ctx)\n  }\n\n  boundFn._length = fn.length;\n  return boundFn\n}\n\nfunction nativeBind (fn, ctx) {\n  return fn.bind(ctx)\n}\n\nvar bind = Function.prototype.bind\n  ? nativeBind\n  : polyfillBind;\n\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray (list, start) {\n  start = start || 0;\n  var i = list.length - start;\n  var ret = new Array(i);\n  while (i--) {\n    ret[i] = list[i + start];\n  }\n  return ret\n}\n\n/**\n * Mix properties into target object.\n */\nfunction extend (to, _from) {\n  for (var key in _from) {\n    to[key] = _from[key];\n  }\n  return to\n}\n\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject (arr) {\n  var res = {};\n  for (var i = 0; i < arr.length; i++) {\n    if (arr[i]) {\n      extend(res, arr[i]);\n    }\n  }\n  return res\n}\n\n/* eslint-disable no-unused-vars */\n\n/**\n * Perform no operation.\n * Stubbing args to make Flow happy without leaving useless transpiled code\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).\n */\nfunction noop (a, b, c) {}\n\n/**\n * Always return false.\n */\nvar no = function (a, b, c) { return false; };\n\n/* eslint-enable no-unused-vars */\n\n/**\n * Return the same value.\n */\nvar identity = function (_) { return _; };\n\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual (a, b) {\n  if (a === b) { return true }\n  var isObjectA = isObject(a);\n  var isObjectB = isObject(b);\n  if (isObjectA && isObjectB) {\n    try {\n      var isArrayA = Array.isArray(a);\n      var isArrayB = Array.isArray(b);\n      if (isArrayA && isArrayB) {\n        return a.length === b.length && a.every(function (e, i) {\n          return looseEqual(e, b[i])\n        })\n      } else if (a instanceof Date && b instanceof Date) {\n        return a.getTime() === b.getTime()\n      } else if (!isArrayA && !isArrayB) {\n        var keysA = Object.keys(a);\n        var keysB = Object.keys(b);\n        return keysA.length === keysB.length && keysA.every(function (key) {\n          return looseEqual(a[key], b[key])\n        })\n      } else {\n        /* istanbul ignore next */\n        return false\n      }\n    } catch (e) {\n      /* istanbul ignore next */\n      return false\n    }\n  } else if (!isObjectA && !isObjectB) {\n    return String(a) === String(b)\n  } else {\n    return false\n  }\n}\n\n/**\n * Return the first index at which a loosely equal value can be\n * found in the array (if value is a plain object, the array must\n * contain an object of the same shape), or -1 if it is not present.\n */\nfunction looseIndexOf (arr, val) {\n  for (var i = 0; i < arr.length; i++) {\n    if (looseEqual(arr[i], val)) { return i }\n  }\n  return -1\n}\n\n/**\n * Ensure a function is called only once.\n */\nfunction once (fn) {\n  var called = false;\n  return function () {\n    if (!called) {\n      called = true;\n      fn.apply(this, arguments);\n    }\n  }\n}\n\nvar SSR_ATTR = 'data-server-rendered';\n\nvar ASSET_TYPES = [\n  'component',\n  'directive',\n  'filter'\n];\n\nvar LIFECYCLE_HOOKS = [\n  'beforeCreate',\n  'created',\n  'beforeMount',\n  'mounted',\n  'beforeUpdate',\n  'updated',\n  'beforeDestroy',\n  'destroyed',\n  'activated',\n  'deactivated',\n  'errorCaptured',\n  'serverPrefetch'\n];\n\n/*  */\n\n\n\nvar config = ({\n  /**\n   * Option merge strategies (used in core/util/options)\n   */\n  // $flow-disable-line\n  optionMergeStrategies: Object.create(null),\n\n  /**\n   * Whether to suppress warnings.\n   */\n  silent: false,\n\n  /**\n   * Show production mode tip message on boot?\n   */\n  productionTip: \"development\" !== 'production',\n\n  /**\n   * Whether to enable devtools\n   */\n  devtools: \"development\" !== 'production',\n\n  /**\n   * Whether to record perf\n   */\n  performance: false,\n\n  /**\n   * Error handler for watcher errors\n   */\n  errorHandler: null,\n\n  /**\n   * Warn handler for watcher warns\n   */\n  warnHandler: null,\n\n  /**\n   * Ignore certain custom elements\n   */\n  ignoredElements: [],\n\n  /**\n   * Custom user key aliases for v-on\n   */\n  // $flow-disable-line\n  keyCodes: Object.create(null),\n\n  /**\n   * Check if a tag is reserved so that it cannot be registered as a\n   * component. This is platform-dependent and may be overwritten.\n   */\n  isReservedTag: no,\n\n  /**\n   * Check if an attribute is reserved so that it cannot be used as a component\n   * prop. This is platform-dependent and may be overwritten.\n   */\n  isReservedAttr: no,\n\n  /**\n   * Check if a tag is an unknown element.\n   * Platform-dependent.\n   */\n  isUnknownElement: no,\n\n  /**\n   * Get the namespace of an element\n   */\n  getTagNamespace: noop,\n\n  /**\n   * Parse the real tag name for the specific platform.\n   */\n  parsePlatformTagName: identity,\n\n  /**\n   * Check if an attribute must be bound using property, e.g. value\n   * Platform-dependent.\n   */\n  mustUseProp: no,\n\n  /**\n   * Perform updates asynchronously. Intended to be used by Vue Test Utils\n   * This will significantly reduce performance if set to false.\n   */\n  async: true,\n\n  /**\n   * Exposed for legacy reasons\n   */\n  _lifecycleHooks: LIFECYCLE_HOOKS\n});\n\n/*  */\n\n/**\n * unicode letters used for parsing html tags, component names and property paths.\n * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname\n * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n */\nvar unicodeRegExp = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\n\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved (str) {\n  var c = (str + '').charCodeAt(0);\n  return c === 0x24 || c === 0x5F\n}\n\n/**\n * Define a property.\n */\nfunction def (obj, key, val, enumerable) {\n  Object.defineProperty(obj, key, {\n    value: val,\n    enumerable: !!enumerable,\n    writable: true,\n    configurable: true\n  });\n}\n\n/**\n * Parse simple path.\n */\nvar bailRE = new RegExp((\"[^\" + (unicodeRegExp.source) + \".$_\\\\d]\"));\nfunction parsePath (path) {\n  if (bailRE.test(path)) {\n    return\n  }\n  var segments = path.split('.');\n  return function (obj) {\n    for (var i = 0; i < segments.length; i++) {\n      if (!obj) { return }\n      obj = obj[segments[i]];\n    }\n    return obj\n  }\n}\n\n/*  */\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\nvar weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nvar isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');\nvar isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');\nvar isChrome = UA && /chrome\\/\\d+/.test(UA) && !isEdge;\nvar isPhantomJS = UA && /phantomjs/.test(UA);\nvar isFF = UA && UA.match(/firefox\\/(\\d+)/);\n\n// Firefox has a \"watch\" function on Object.prototype...\nvar nativeWatch = ({}).watch;\n\nvar supportsPassive = false;\nif (inBrowser) {\n  try {\n    var opts = {};\n    Object.defineProperty(opts, 'passive', ({\n      get: function get () {\n        /* istanbul ignore next */\n        supportsPassive = true;\n      }\n    })); // https://github.com/facebook/flow/issues/285\n    window.addEventListener('test-passive', null, opts);\n  } catch (e) {}\n}\n\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function () {\n  if (_isServer === undefined) {\n    /* istanbul ignore if */\n    if (!inBrowser && !inWeex && typeof global !== 'undefined') {\n      // detect presence of vue-server-renderer and avoid\n      // Webpack shimming the process\n      _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';\n    } else {\n      _isServer = false;\n    }\n  }\n  return _isServer\n};\n\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n/* istanbul ignore next */\nfunction isNative (Ctor) {\n  return typeof Ctor === 'function' && /native code/.test(Ctor.toString())\n}\n\nvar hasSymbol =\n  typeof Symbol !== 'undefined' && isNative(Symbol) &&\n  typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\n\nvar _Set;\n/* istanbul ignore if */ // $flow-disable-line\nif (typeof Set !== 'undefined' && isNative(Set)) {\n  // use native Set when available.\n  _Set = Set;\n} else {\n  // a non-standard Set polyfill that only works with primitive keys.\n  _Set = /*@__PURE__*/(function () {\n    function Set () {\n      this.set = Object.create(null);\n    }\n    Set.prototype.has = function has (key) {\n      return this.set[key] === true\n    };\n    Set.prototype.add = function add (key) {\n      this.set[key] = true;\n    };\n    Set.prototype.clear = function clear () {\n      this.set = Object.create(null);\n    };\n\n    return Set;\n  }());\n}\n\n/*  */\n\nvar warn = noop;\nvar tip = noop;\nvar generateComponentTrace = (noop); // work around flow check\nvar formatComponentName = (noop);\n\nif (true) {\n  var hasConsole = typeof console !== 'undefined';\n  var classifyRE = /(?:^|[-_])(\\w)/g;\n  var classify = function (str) { return str\n    .replace(classifyRE, function (c) { return c.toUpperCase(); })\n    .replace(/[-_]/g, ''); };\n\n  warn = function (msg, vm) {\n    var trace = vm ? generateComponentTrace(vm) : '';\n\n    if (config.warnHandler) {\n      config.warnHandler.call(null, msg, vm, trace);\n    } else if (hasConsole && (!config.silent)) {\n      console.error((\"[Vue warn]: \" + msg + trace));\n    }\n  };\n\n  tip = function (msg, vm) {\n    if (hasConsole && (!config.silent)) {\n      console.warn(\"[Vue tip]: \" + msg + (\n        vm ? generateComponentTrace(vm) : ''\n      ));\n    }\n  };\n\n  formatComponentName = function (vm, includeFile) {\n    if (vm.$root === vm) {\n      return '<Root>'\n    }\n    var options = typeof vm === 'function' && vm.cid != null\n      ? vm.options\n      : vm._isVue\n        ? vm.$options || vm.constructor.options\n        : vm;\n    var name = options.name || options._componentTag;\n    var file = options.__file;\n    if (!name && file) {\n      var match = file.match(/([^/\\\\]+)\\.vue$/);\n      name = match && match[1];\n    }\n\n    return (\n      (name ? (\"<\" + (classify(name)) + \">\") : \"<Anonymous>\") +\n      (file && includeFile !== false ? (\" at \" + file) : '')\n    )\n  };\n\n  var repeat = function (str, n) {\n    var res = '';\n    while (n) {\n      if (n % 2 === 1) { res += str; }\n      if (n > 1) { str += str; }\n      n >>= 1;\n    }\n    return res\n  };\n\n  generateComponentTrace = function (vm) {\n    if (vm._isVue && vm.$parent) {\n      var tree = [];\n      var currentRecursiveSequence = 0;\n      while (vm) {\n        if (tree.length > 0) {\n          var last = tree[tree.length - 1];\n          if (last.constructor === vm.constructor) {\n            currentRecursiveSequence++;\n            vm = vm.$parent;\n            continue\n          } else if (currentRecursiveSequence > 0) {\n            tree[tree.length - 1] = [last, currentRecursiveSequence];\n            currentRecursiveSequence = 0;\n          }\n        }\n        tree.push(vm);\n        vm = vm.$parent;\n      }\n      return '\\n\\nfound in\\n\\n' + tree\n        .map(function (vm, i) { return (\"\" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\n            ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\n            : formatComponentName(vm))); })\n        .join('\\n')\n    } else {\n      return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\n    }\n  };\n}\n\n/*  */\n\nvar uid = 0;\n\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n */\nvar Dep = function Dep () {\n  this.id = uid++;\n  this.subs = [];\n};\n\nDep.prototype.addSub = function addSub (sub) {\n  this.subs.push(sub);\n};\n\nDep.prototype.removeSub = function removeSub (sub) {\n  remove(this.subs, sub);\n};\n\nDep.prototype.depend = function depend () {\n  if (Dep.target) {\n    Dep.target.addDep(this);\n  }\n};\n\nDep.prototype.notify = function notify () {\n  // stabilize the subscriber list first\n  var subs = this.subs.slice();\n  if ( true && !config.async) {\n    // subs aren't sorted in scheduler if not running async\n    // we need to sort them now to make sure they fire in correct\n    // order\n    subs.sort(function (a, b) { return a.id - b.id; });\n  }\n  for (var i = 0, l = subs.length; i < l; i++) {\n    subs[i].update();\n  }\n};\n\n// The current target watcher being evaluated.\n// This is globally unique because only one watcher\n// can be evaluated at a time.\nDep.target = null;\nvar targetStack = [];\n\nfunction pushTarget (target) {\n  targetStack.push(target);\n  Dep.target = target;\n}\n\nfunction popTarget () {\n  targetStack.pop();\n  Dep.target = targetStack[targetStack.length - 1];\n}\n\n/*  */\n\nvar VNode = function VNode (\n  tag,\n  data,\n  children,\n  text,\n  elm,\n  context,\n  componentOptions,\n  asyncFactory\n) {\n  this.tag = tag;\n  this.data = data;\n  this.children = children;\n  this.text = text;\n  this.elm = elm;\n  this.ns = undefined;\n  this.context = context;\n  this.fnContext = undefined;\n  this.fnOptions = undefined;\n  this.fnScopeId = undefined;\n  this.key = data && data.key;\n  this.componentOptions = componentOptions;\n  this.componentInstance = undefined;\n  this.parent = undefined;\n  this.raw = false;\n  this.isStatic = false;\n  this.isRootInsert = true;\n  this.isComment = false;\n  this.isCloned = false;\n  this.isOnce = false;\n  this.asyncFactory = asyncFactory;\n  this.asyncMeta = undefined;\n  this.isAsyncPlaceholder = false;\n};\n\nvar prototypeAccessors = { child: { configurable: true } };\n\n// DEPRECATED: alias for componentInstance for backwards compat.\n/* istanbul ignore next */\nprototypeAccessors.child.get = function () {\n  return this.componentInstance\n};\n\nObject.defineProperties( VNode.prototype, prototypeAccessors );\n\nvar createEmptyVNode = function (text) {\n  if ( text === void 0 ) text = '';\n\n  var node = new VNode();\n  node.text = text;\n  node.isComment = true;\n  return node\n};\n\nfunction createTextVNode (val) {\n  return new VNode(undefined, undefined, undefined, String(val))\n}\n\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode (vnode) {\n  var cloned = new VNode(\n    vnode.tag,\n    vnode.data,\n    // #7975\n    // clone children array to avoid mutating original in case of cloning\n    // a child.\n    vnode.children && vnode.children.slice(),\n    vnode.text,\n    vnode.elm,\n    vnode.context,\n    vnode.componentOptions,\n    vnode.asyncFactory\n  );\n  cloned.ns = vnode.ns;\n  cloned.isStatic = vnode.isStatic;\n  cloned.key = vnode.key;\n  cloned.isComment = vnode.isComment;\n  cloned.fnContext = vnode.fnContext;\n  cloned.fnOptions = vnode.fnOptions;\n  cloned.fnScopeId = vnode.fnScopeId;\n  cloned.asyncMeta = vnode.asyncMeta;\n  cloned.isCloned = true;\n  return cloned\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\n\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);\n\nvar methodsToPatch = [\n  'push',\n  'pop',\n  'shift',\n  'unshift',\n  'splice',\n  'sort',\n  'reverse'\n];\n\n/**\n * Intercept mutating methods and emit events\n */\nmethodsToPatch.forEach(function (method) {\n  // cache original method\n  var original = arrayProto[method];\n  def(arrayMethods, method, function mutator () {\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n\n    var result = original.apply(this, args);\n    var ob = this.__ob__;\n    var inserted;\n    switch (method) {\n      case 'push':\n      case 'unshift':\n        inserted = args;\n        break\n      case 'splice':\n        inserted = args.slice(2);\n        break\n    }\n    if (inserted) { ob.observeArray(inserted); }\n    // notify change\n    ob.dep.notify();\n    return result\n  });\n});\n\n/*  */\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n\n/**\n * In some cases we may want to disable observation inside a component's\n * update computation.\n */\nvar shouldObserve = true;\n\nfunction toggleObserving (value) {\n  shouldObserve = value;\n}\n\n/**\n * Observer class that is attached to each observed\n * object. Once attached, the observer converts the target\n * object's property keys into getter/setters that\n * collect dependencies and dispatch updates.\n */\nvar Observer = function Observer (value) {\n  this.value = value;\n  this.dep = new Dep();\n  this.vmCount = 0;\n  def(value, '__ob__', this);\n  if (Array.isArray(value)) {\n    if (hasProto) {\n      protoAugment(value, arrayMethods);\n    } else {\n      copyAugment(value, arrayMethods, arrayKeys);\n    }\n    this.observeArray(value);\n  } else {\n    this.walk(value);\n  }\n};\n\n/**\n * Walk through all properties and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\nObserver.prototype.walk = function walk (obj) {\n  var keys = Object.keys(obj);\n  for (var i = 0; i < keys.length; i++) {\n    defineReactive$$1(obj, keys[i]);\n  }\n};\n\n/**\n * Observe a list of Array items.\n */\nObserver.prototype.observeArray = function observeArray (items) {\n  for (var i = 0, l = items.length; i < l; i++) {\n    observe(items[i]);\n  }\n};\n\n// helpers\n\n/**\n * Augment a target Object or Array by intercepting\n * the prototype chain using __proto__\n */\nfunction protoAugment (target, src) {\n  /* eslint-disable no-proto */\n  target.__proto__ = src;\n  /* eslint-enable no-proto */\n}\n\n/**\n * Augment a target Object or Array by defining\n * hidden properties.\n */\n/* istanbul ignore next */\nfunction copyAugment (target, src, keys) {\n  for (var i = 0, l = keys.length; i < l; i++) {\n    var key = keys[i];\n    def(target, key, src[key]);\n  }\n}\n\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe (value, asRootData) {\n  if (!isObject(value) || value instanceof VNode) {\n    return\n  }\n  var ob;\n  if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n    ob = value.__ob__;\n  } else if (\n    shouldObserve &&\n    !isServerRendering() &&\n    (Array.isArray(value) || isPlainObject(value)) &&\n    Object.isExtensible(value) &&\n    !value._isVue\n  ) {\n    ob = new Observer(value);\n  }\n  if (asRootData && ob) {\n    ob.vmCount++;\n  }\n  return ob\n}\n\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive$$1 (\n  obj,\n  key,\n  val,\n  customSetter,\n  shallow\n) {\n  var dep = new Dep();\n\n  var property = Object.getOwnPropertyDescriptor(obj, key);\n  if (property && property.configurable === false) {\n    return\n  }\n\n  // cater for pre-defined getter/setters\n  var getter = property && property.get;\n  var setter = property && property.set;\n  if ((!getter || setter) && arguments.length === 2) {\n    val = obj[key];\n  }\n\n  var childOb = !shallow && observe(val);\n  Object.defineProperty(obj, key, {\n    enumerable: true,\n    configurable: true,\n    get: function reactiveGetter () {\n      var value = getter ? getter.call(obj) : val;\n      if (Dep.target) {\n        dep.depend();\n        if (childOb) {\n          childOb.dep.depend();\n          if (Array.isArray(value)) {\n            dependArray(value);\n          }\n        }\n      }\n      return value\n    },\n    set: function reactiveSetter (newVal) {\n      var value = getter ? getter.call(obj) : val;\n      /* eslint-disable no-self-compare */\n      if (newVal === value || (newVal !== newVal && value !== value)) {\n        return\n      }\n      /* eslint-enable no-self-compare */\n      if ( true && customSetter) {\n        customSetter();\n      }\n      // #7981: for accessor properties without setter\n      if (getter && !setter) { return }\n      if (setter) {\n        setter.call(obj, newVal);\n      } else {\n        val = newVal;\n      }\n      childOb = !shallow && observe(newVal);\n      dep.notify();\n    }\n  });\n}\n\n/**\n * Set a property on an object. Adds the new property and\n * triggers change notification if the property doesn't\n * already exist.\n */\nfunction set (target, key, val) {\n  if ( true &&\n    (isUndef(target) || isPrimitive(target))\n  ) {\n    warn((\"Cannot set reactive property on undefined, null, or primitive value: \" + ((target))));\n  }\n  if (Array.isArray(target) && isValidArrayIndex(key)) {\n    target.length = Math.max(target.length, key);\n    target.splice(key, 1, val);\n    return val\n  }\n  if (key in target && !(key in Object.prototype)) {\n    target[key] = val;\n    return val\n  }\n  var ob = (target).__ob__;\n  if (target._isVue || (ob && ob.vmCount)) {\n     true && warn(\n      'Avoid adding reactive properties to a Vue instance or its root $data ' +\n      'at runtime - declare it upfront in the data option.'\n    );\n    return val\n  }\n  if (!ob) {\n    target[key] = val;\n    return val\n  }\n  defineReactive$$1(ob.value, key, val);\n  ob.dep.notify();\n  return val\n}\n\n/**\n * Delete a property and trigger change if necessary.\n */\nfunction del (target, key) {\n  if ( true &&\n    (isUndef(target) || isPrimitive(target))\n  ) {\n    warn((\"Cannot delete reactive property on undefined, null, or primitive value: \" + ((target))));\n  }\n  if (Array.isArray(target) && isValidArrayIndex(key)) {\n    target.splice(key, 1);\n    return\n  }\n  var ob = (target).__ob__;\n  if (target._isVue || (ob && ob.vmCount)) {\n     true && warn(\n      'Avoid deleting properties on a Vue instance or its root $data ' +\n      '- just set it to null.'\n    );\n    return\n  }\n  if (!hasOwn(target, key)) {\n    return\n  }\n  delete target[key];\n  if (!ob) {\n    return\n  }\n  ob.dep.notify();\n}\n\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\nfunction dependArray (value) {\n  for (var e = (void 0), i = 0, l = value.length; i < l; i++) {\n    e = value[i];\n    e && e.__ob__ && e.__ob__.dep.depend();\n    if (Array.isArray(e)) {\n      dependArray(e);\n    }\n  }\n}\n\n/*  */\n\n/**\n * Option overwriting strategies are functions that handle\n * how to merge a parent option value and a child option\n * value into the final value.\n */\nvar strats = config.optionMergeStrategies;\n\n/**\n * Options with restrictions\n */\nif (true) {\n  strats.el = strats.propsData = function (parent, child, vm, key) {\n    if (!vm) {\n      warn(\n        \"option \\\"\" + key + \"\\\" can only be used during instance \" +\n        'creation with the `new` keyword.'\n      );\n    }\n    return defaultStrat(parent, child)\n  };\n}\n\n/**\n * Helper that recursively merges two data objects together.\n */\nfunction mergeData (to, from) {\n  if (!from) { return to }\n  var key, toVal, fromVal;\n\n  var keys = hasSymbol\n    ? Reflect.ownKeys(from)\n    : Object.keys(from);\n\n  for (var i = 0; i < keys.length; i++) {\n    key = keys[i];\n    // in case the object is already observed...\n    if (key === '__ob__') { continue }\n    toVal = to[key];\n    fromVal = from[key];\n    if (!hasOwn(to, key)) {\n      set(to, key, fromVal);\n    } else if (\n      toVal !== fromVal &&\n      isPlainObject(toVal) &&\n      isPlainObject(fromVal)\n    ) {\n      mergeData(toVal, fromVal);\n    }\n  }\n  return to\n}\n\n/**\n * Data\n */\nfunction mergeDataOrFn (\n  parentVal,\n  childVal,\n  vm\n) {\n  if (!vm) {\n    // in a Vue.extend merge, both should be functions\n    if (!childVal) {\n      return parentVal\n    }\n    if (!parentVal) {\n      return childVal\n    }\n    // when parentVal & childVal are both present,\n    // we need to return a function that returns the\n    // merged result of both functions... no need to\n    // check if parentVal is a function here because\n    // it has to be a function to pass previous merges.\n    return function mergedDataFn () {\n      return mergeData(\n        typeof childVal === 'function' ? childVal.call(this, this) : childVal,\n        typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\n      )\n    }\n  } else {\n    return function mergedInstanceDataFn () {\n      // instance merge\n      var instanceData = typeof childVal === 'function'\n        ? childVal.call(vm, vm)\n        : childVal;\n      var defaultData = typeof parentVal === 'function'\n        ? parentVal.call(vm, vm)\n        : parentVal;\n      if (instanceData) {\n        return mergeData(instanceData, defaultData)\n      } else {\n        return defaultData\n      }\n    }\n  }\n}\n\nstrats.data = function (\n  parentVal,\n  childVal,\n  vm\n) {\n  if (!vm) {\n    if (childVal && typeof childVal !== 'function') {\n       true && warn(\n        'The \"data\" option should be a function ' +\n        'that returns a per-instance value in component ' +\n        'definitions.',\n        vm\n      );\n\n      return parentVal\n    }\n    return mergeDataOrFn(parentVal, childVal)\n  }\n\n  return mergeDataOrFn(parentVal, childVal, vm)\n};\n\n/**\n * Hooks and props are merged as arrays.\n */\nfunction mergeHook (\n  parentVal,\n  childVal\n) {\n  var res = childVal\n    ? parentVal\n      ? parentVal.concat(childVal)\n      : Array.isArray(childVal)\n        ? childVal\n        : [childVal]\n    : parentVal;\n  return res\n    ? dedupeHooks(res)\n    : res\n}\n\nfunction dedupeHooks (hooks) {\n  var res = [];\n  for (var i = 0; i < hooks.length; i++) {\n    if (res.indexOf(hooks[i]) === -1) {\n      res.push(hooks[i]);\n    }\n  }\n  return res\n}\n\nLIFECYCLE_HOOKS.forEach(function (hook) {\n  strats[hook] = mergeHook;\n});\n\n/**\n * Assets\n *\n * When a vm is present (instance creation), we need to do\n * a three-way merge between constructor options, instance\n * options and parent options.\n */\nfunction mergeAssets (\n  parentVal,\n  childVal,\n  vm,\n  key\n) {\n  var res = Object.create(parentVal || null);\n  if (childVal) {\n     true && assertObjectType(key, childVal, vm);\n    return extend(res, childVal)\n  } else {\n    return res\n  }\n}\n\nASSET_TYPES.forEach(function (type) {\n  strats[type + 's'] = mergeAssets;\n});\n\n/**\n * Watchers.\n *\n * Watchers hashes should not overwrite one\n * another, so we merge them as arrays.\n */\nstrats.watch = function (\n  parentVal,\n  childVal,\n  vm,\n  key\n) {\n  // work around Firefox's Object.prototype.watch...\n  if (parentVal === nativeWatch) { parentVal = undefined; }\n  if (childVal === nativeWatch) { childVal = undefined; }\n  /* istanbul ignore if */\n  if (!childVal) { return Object.create(parentVal || null) }\n  if (true) {\n    assertObjectType(key, childVal, vm);\n  }\n  if (!parentVal) { return childVal }\n  var ret = {};\n  extend(ret, parentVal);\n  for (var key$1 in childVal) {\n    var parent = ret[key$1];\n    var child = childVal[key$1];\n    if (parent && !Array.isArray(parent)) {\n      parent = [parent];\n    }\n    ret[key$1] = parent\n      ? parent.concat(child)\n      : Array.isArray(child) ? child : [child];\n  }\n  return ret\n};\n\n/**\n * Other object hashes.\n */\nstrats.props =\nstrats.methods =\nstrats.inject =\nstrats.computed = function (\n  parentVal,\n  childVal,\n  vm,\n  key\n) {\n  if (childVal && \"development\" !== 'production') {\n    assertObjectType(key, childVal, vm);\n  }\n  if (!parentVal) { return childVal }\n  var ret = Object.create(null);\n  extend(ret, parentVal);\n  if (childVal) { extend(ret, childVal); }\n  return ret\n};\nstrats.provide = mergeDataOrFn;\n\n/**\n * Default strategy.\n */\nvar defaultStrat = function (parentVal, childVal) {\n  return childVal === undefined\n    ? parentVal\n    : childVal\n};\n\n/**\n * Validate component names\n */\nfunction checkComponents (options) {\n  for (var key in options.components) {\n    validateComponentName(key);\n  }\n}\n\nfunction validateComponentName (name) {\n  if (!new RegExp((\"^[a-zA-Z][\\\\-\\\\.0-9_\" + (unicodeRegExp.source) + \"]*$\")).test(name)) {\n    warn(\n      'Invalid component name: \"' + name + '\". Component names ' +\n      'should conform to valid custom element name in html5 specification.'\n    );\n  }\n  if (isBuiltInTag(name) || config.isReservedTag(name)) {\n    warn(\n      'Do not use built-in or reserved HTML elements as component ' +\n      'id: ' + name\n    );\n  }\n}\n\n/**\n * Ensure all props option syntax are normalized into the\n * Object-based format.\n */\nfunction normalizeProps (options, vm) {\n  var props = options.props;\n  if (!props) { return }\n  var res = {};\n  var i, val, name;\n  if (Array.isArray(props)) {\n    i = props.length;\n    while (i--) {\n      val = props[i];\n      if (typeof val === 'string') {\n        name = camelize(val);\n        res[name] = { type: null };\n      } else if (true) {\n        warn('props must be strings when using array syntax.');\n      }\n    }\n  } else if (isPlainObject(props)) {\n    for (var key in props) {\n      val = props[key];\n      name = camelize(key);\n      res[name] = isPlainObject(val)\n        ? val\n        : { type: val };\n    }\n  } else if (true) {\n    warn(\n      \"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\n      \"but got \" + (toRawType(props)) + \".\",\n      vm\n    );\n  }\n  options.props = res;\n}\n\n/**\n * Normalize all injections into Object-based format\n */\nfunction normalizeInject (options, vm) {\n  var inject = options.inject;\n  if (!inject) { return }\n  var normalized = options.inject = {};\n  if (Array.isArray(inject)) {\n    for (var i = 0; i < inject.length; i++) {\n      normalized[inject[i]] = { from: inject[i] };\n    }\n  } else if (isPlainObject(inject)) {\n    for (var key in inject) {\n      var val = inject[key];\n      normalized[key] = isPlainObject(val)\n        ? extend({ from: key }, val)\n        : { from: val };\n    }\n  } else if (true) {\n    warn(\n      \"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\n      \"but got \" + (toRawType(inject)) + \".\",\n      vm\n    );\n  }\n}\n\n/**\n * Normalize raw function directives into object format.\n */\nfunction normalizeDirectives (options) {\n  var dirs = options.directives;\n  if (dirs) {\n    for (var key in dirs) {\n      var def$$1 = dirs[key];\n      if (typeof def$$1 === 'function') {\n        dirs[key] = { bind: def$$1, update: def$$1 };\n      }\n    }\n  }\n}\n\nfunction assertObjectType (name, value, vm) {\n  if (!isPlainObject(value)) {\n    warn(\n      \"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" +\n      \"but got \" + (toRawType(value)) + \".\",\n      vm\n    );\n  }\n}\n\n/**\n * Merge two option objects into a new one.\n * Core utility used in both instantiation and inheritance.\n */\nfunction mergeOptions (\n  parent,\n  child,\n  vm\n) {\n  if (true) {\n    checkComponents(child);\n  }\n\n  if (typeof child === 'function') {\n    child = child.options;\n  }\n\n  normalizeProps(child, vm);\n  normalizeInject(child, vm);\n  normalizeDirectives(child);\n\n  // Apply extends and mixins on the child options,\n  // but only if it is a raw options object that isn't\n  // the result of another mergeOptions call.\n  // Only merged options has the _base property.\n  if (!child._base) {\n    if (child.extends) {\n      parent = mergeOptions(parent, child.extends, vm);\n    }\n    if (child.mixins) {\n      for (var i = 0, l = child.mixins.length; i < l; i++) {\n        parent = mergeOptions(parent, child.mixins[i], vm);\n      }\n    }\n  }\n\n  var options = {};\n  var key;\n  for (key in parent) {\n    mergeField(key);\n  }\n  for (key in child) {\n    if (!hasOwn(parent, key)) {\n      mergeField(key);\n    }\n  }\n  function mergeField (key) {\n    var strat = strats[key] || defaultStrat;\n    options[key] = strat(parent[key], child[key], vm, key);\n  }\n  return options\n}\n\n/**\n * Resolve an asset.\n * This function is used because child instances need access\n * to assets defined in its ancestor chain.\n */\nfunction resolveAsset (\n  options,\n  type,\n  id,\n  warnMissing\n) {\n  /* istanbul ignore if */\n  if (typeof id !== 'string') {\n    return\n  }\n  var assets = options[type];\n  // check local registration variations first\n  if (hasOwn(assets, id)) { return assets[id] }\n  var camelizedId = camelize(id);\n  if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\n  var PascalCaseId = capitalize(camelizedId);\n  if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\n  // fallback to prototype chain\n  var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n  if ( true && warnMissing && !res) {\n    warn(\n      'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\n      options\n    );\n  }\n  return res\n}\n\n/*  */\n\n\n\nfunction validateProp (\n  key,\n  propOptions,\n  propsData,\n  vm\n) {\n  var prop = propOptions[key];\n  var absent = !hasOwn(propsData, key);\n  var value = propsData[key];\n  // boolean casting\n  var booleanIndex = getTypeIndex(Boolean, prop.type);\n  if (booleanIndex > -1) {\n    if (absent && !hasOwn(prop, 'default')) {\n      value = false;\n    } else if (value === '' || value === hyphenate(key)) {\n      // only cast empty string / same name to boolean if\n      // boolean has higher priority\n      var stringIndex = getTypeIndex(String, prop.type);\n      if (stringIndex < 0 || booleanIndex < stringIndex) {\n        value = true;\n      }\n    }\n  }\n  // check default value\n  if (value === undefined) {\n    value = getPropDefaultValue(vm, prop, key);\n    // since the default value is a fresh copy,\n    // make sure to observe it.\n    var prevShouldObserve = shouldObserve;\n    toggleObserving(true);\n    observe(value);\n    toggleObserving(prevShouldObserve);\n  }\n  if (\n    true\n  ) {\n    assertProp(prop, key, value, vm, absent);\n  }\n  return value\n}\n\n/**\n * Get the default value of a prop.\n */\nfunction getPropDefaultValue (vm, prop, key) {\n  // no default, return undefined\n  if (!hasOwn(prop, 'default')) {\n    return undefined\n  }\n  var def = prop.default;\n  // warn against non-factory defaults for Object & Array\n  if ( true && isObject(def)) {\n    warn(\n      'Invalid default value for prop \"' + key + '\": ' +\n      'Props with type Object/Array must use a factory function ' +\n      'to return the default value.',\n      vm\n    );\n  }\n  // the raw prop value was also undefined from previous render,\n  // return previous default value to avoid unnecessary watcher trigger\n  if (vm && vm.$options.propsData &&\n    vm.$options.propsData[key] === undefined &&\n    vm._props[key] !== undefined\n  ) {\n    return vm._props[key]\n  }\n  // call factory function for non-Function types\n  // a value is Function if its prototype is function even across different execution context\n  return typeof def === 'function' && getType(prop.type) !== 'Function'\n    ? def.call(vm)\n    : def\n}\n\n/**\n * Assert whether a prop is valid.\n */\nfunction assertProp (\n  prop,\n  name,\n  value,\n  vm,\n  absent\n) {\n  if (prop.required && absent) {\n    warn(\n      'Missing required prop: \"' + name + '\"',\n      vm\n    );\n    return\n  }\n  if (value == null && !prop.required) {\n    return\n  }\n  var type = prop.type;\n  var valid = !type || type === true;\n  var expectedTypes = [];\n  if (type) {\n    if (!Array.isArray(type)) {\n      type = [type];\n    }\n    for (var i = 0; i < type.length && !valid; i++) {\n      var assertedType = assertType(value, type[i], vm);\n      expectedTypes.push(assertedType.expectedType || '');\n      valid = assertedType.valid;\n    }\n  }\n\n  var haveExpectedTypes = expectedTypes.some(function (t) { return t; });\n  if (!valid && haveExpectedTypes) {\n    warn(\n      getInvalidTypeMessage(name, value, expectedTypes),\n      vm\n    );\n    return\n  }\n  var validator = prop.validator;\n  if (validator) {\n    if (!validator(value)) {\n      warn(\n        'Invalid prop: custom validator check failed for prop \"' + name + '\".',\n        vm\n      );\n    }\n  }\n}\n\nvar simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/;\n\nfunction assertType (value, type, vm) {\n  var valid;\n  var expectedType = getType(type);\n  if (simpleCheckRE.test(expectedType)) {\n    var t = typeof value;\n    valid = t === expectedType.toLowerCase();\n    // for primitive wrapper objects\n    if (!valid && t === 'object') {\n      valid = value instanceof type;\n    }\n  } else if (expectedType === 'Object') {\n    valid = isPlainObject(value);\n  } else if (expectedType === 'Array') {\n    valid = Array.isArray(value);\n  } else {\n    try {\n      valid = value instanceof type;\n    } catch (e) {\n      warn('Invalid prop type: \"' + String(type) + '\" is not a constructor', vm);\n      valid = false;\n    }\n  }\n  return {\n    valid: valid,\n    expectedType: expectedType\n  }\n}\n\nvar functionTypeCheckRE = /^\\s*function (\\w+)/;\n\n/**\n * Use function string name to check built-in types,\n * because a simple equality check will fail when running\n * across different vms / iframes.\n */\nfunction getType (fn) {\n  var match = fn && fn.toString().match(functionTypeCheckRE);\n  return match ? match[1] : ''\n}\n\nfunction isSameType (a, b) {\n  return getType(a) === getType(b)\n}\n\nfunction getTypeIndex (type, expectedTypes) {\n  if (!Array.isArray(expectedTypes)) {\n    return isSameType(expectedTypes, type) ? 0 : -1\n  }\n  for (var i = 0, len = expectedTypes.length; i < len; i++) {\n    if (isSameType(expectedTypes[i], type)) {\n      return i\n    }\n  }\n  return -1\n}\n\nfunction getInvalidTypeMessage (name, value, expectedTypes) {\n  var message = \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\n    \" Expected \" + (expectedTypes.map(capitalize).join(', '));\n  var expectedType = expectedTypes[0];\n  var receivedType = toRawType(value);\n  // check if we need to specify expected value\n  if (\n    expectedTypes.length === 1 &&\n    isExplicable(expectedType) &&\n    isExplicable(typeof value) &&\n    !isBoolean(expectedType, receivedType)\n  ) {\n    message += \" with value \" + (styleValue(value, expectedType));\n  }\n  message += \", got \" + receivedType + \" \";\n  // check if we need to specify received value\n  if (isExplicable(receivedType)) {\n    message += \"with value \" + (styleValue(value, receivedType)) + \".\";\n  }\n  return message\n}\n\nfunction styleValue (value, type) {\n  if (type === 'String') {\n    return (\"\\\"\" + value + \"\\\"\")\n  } else if (type === 'Number') {\n    return (\"\" + (Number(value)))\n  } else {\n    return (\"\" + value)\n  }\n}\n\nvar EXPLICABLE_TYPES = ['string', 'number', 'boolean'];\nfunction isExplicable (value) {\n  return EXPLICABLE_TYPES.some(function (elem) { return value.toLowerCase() === elem; })\n}\n\nfunction isBoolean () {\n  var args = [], len = arguments.length;\n  while ( len-- ) args[ len ] = arguments[ len ];\n\n  return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })\n}\n\n/*  */\n\nfunction handleError (err, vm, info) {\n  // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\n  // See: https://github.com/vuejs/vuex/issues/1505\n  pushTarget();\n  try {\n    if (vm) {\n      var cur = vm;\n      while ((cur = cur.$parent)) {\n        var hooks = cur.$options.errorCaptured;\n        if (hooks) {\n          for (var i = 0; i < hooks.length; i++) {\n            try {\n              var capture = hooks[i].call(cur, err, vm, info) === false;\n              if (capture) { return }\n            } catch (e) {\n              globalHandleError(e, cur, 'errorCaptured hook');\n            }\n          }\n        }\n      }\n    }\n    globalHandleError(err, vm, info);\n  } finally {\n    popTarget();\n  }\n}\n\nfunction invokeWithErrorHandling (\n  handler,\n  context,\n  args,\n  vm,\n  info\n) {\n  var res;\n  try {\n    res = args ? handler.apply(context, args) : handler.call(context);\n    if (res && !res._isVue && isPromise(res) && !res._handled) {\n      res.catch(function (e) { return handleError(e, vm, info + \" (Promise/async)\"); });\n      // issue #9511\n      // avoid catch triggering multiple times when nested calls\n      res._handled = true;\n    }\n  } catch (e) {\n    handleError(e, vm, info);\n  }\n  return res\n}\n\nfunction globalHandleError (err, vm, info) {\n  if (config.errorHandler) {\n    try {\n      return config.errorHandler.call(null, err, vm, info)\n    } catch (e) {\n      // if the user intentionally throws the original error in the handler,\n      // do not log it twice\n      if (e !== err) {\n        logError(e, null, 'config.errorHandler');\n      }\n    }\n  }\n  logError(err, vm, info);\n}\n\nfunction logError (err, vm, info) {\n  if (true) {\n    warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\n  }\n  /* istanbul ignore else */\n  if ((inBrowser || inWeex) && typeof console !== 'undefined') {\n    console.error(err);\n  } else {\n    throw err\n  }\n}\n\n/*  */\n\nvar isUsingMicroTask = false;\n\nvar callbacks = [];\nvar pending = false;\n\nfunction flushCallbacks () {\n  pending = false;\n  var copies = callbacks.slice(0);\n  callbacks.length = 0;\n  for (var i = 0; i < copies.length; i++) {\n    copies[i]();\n  }\n}\n\n// Here we have async deferring wrappers using microtasks.\n// In 2.5 we used (macro) tasks (in combination with microtasks).\n// However, it has subtle problems when state is changed right before repaint\n// (e.g. #6813, out-in transitions).\n// Also, using (macro) tasks in event handler would cause some weird behaviors\n// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\n// So we now use microtasks everywhere, again.\n// A major drawback of this tradeoff is that there are some scenarios\n// where microtasks have too high a priority and fire in between supposedly\n// sequential events (e.g. #4521, #6690, which have workarounds)\n// or even between bubbling of the same event (#6566).\nvar timerFunc;\n\n// The nextTick behavior leverages the microtask queue, which can be accessed\n// via either native Promise.then or MutationObserver.\n// MutationObserver has wider support, however it is seriously bugged in\n// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n// completely stops working after triggering a few times... so, if native\n// Promise is available, we will use it:\n/* istanbul ignore next, $flow-disable-line */\nif (typeof Promise !== 'undefined' && isNative(Promise)) {\n  var p = Promise.resolve();\n  timerFunc = function () {\n    p.then(flushCallbacks);\n    // In problematic UIWebViews, Promise.then doesn't completely break, but\n    // it can get stuck in a weird state where callbacks are pushed into the\n    // microtask queue but the queue isn't being flushed, until the browser\n    // needs to do some other work, e.g. handle a timer. Therefore we can\n    // \"force\" the microtask queue to be flushed by adding an empty timer.\n    if (isIOS) { setTimeout(noop); }\n  };\n  isUsingMicroTask = true;\n} else if (!isIE && typeof MutationObserver !== 'undefined' && (\n  isNative(MutationObserver) ||\n  // PhantomJS and iOS 7.x\n  MutationObserver.toString() === '[object MutationObserverConstructor]'\n)) {\n  // Use MutationObserver where native Promise is not available,\n  // e.g. PhantomJS, iOS7, Android 4.4\n  // (#6466 MutationObserver is unreliable in IE11)\n  var counter = 1;\n  var observer = new MutationObserver(flushCallbacks);\n  var textNode = document.createTextNode(String(counter));\n  observer.observe(textNode, {\n    characterData: true\n  });\n  timerFunc = function () {\n    counter = (counter + 1) % 2;\n    textNode.data = String(counter);\n  };\n  isUsingMicroTask = true;\n} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n  // Fallback to setImmediate.\n  // Technically it leverages the (macro) task queue,\n  // but it is still a better choice than setTimeout.\n  timerFunc = function () {\n    setImmediate(flushCallbacks);\n  };\n} else {\n  // Fallback to setTimeout.\n  timerFunc = function () {\n    setTimeout(flushCallbacks, 0);\n  };\n}\n\nfunction nextTick (cb, ctx) {\n  var _resolve;\n  callbacks.push(function () {\n    if (cb) {\n      try {\n        cb.call(ctx);\n      } catch (e) {\n        handleError(e, ctx, 'nextTick');\n      }\n    } else if (_resolve) {\n      _resolve(ctx);\n    }\n  });\n  if (!pending) {\n    pending = true;\n    timerFunc();\n  }\n  // $flow-disable-line\n  if (!cb && typeof Promise !== 'undefined') {\n    return new Promise(function (resolve) {\n      _resolve = resolve;\n    })\n  }\n}\n\n/*  */\n\n/* not type checking this file because flow doesn't play well with Proxy */\n\nvar initProxy;\n\nif (true) {\n  var allowedGlobals = makeMap(\n    'Infinity,undefined,NaN,isFinite,isNaN,' +\n    'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n    'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' +\n    'require' // for Webpack/Browserify\n  );\n\n  var warnNonPresent = function (target, key) {\n    warn(\n      \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\n      'referenced during render. Make sure that this property is reactive, ' +\n      'either in the data option, or for class-based components, by ' +\n      'initializing the property. ' +\n      'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',\n      target\n    );\n  };\n\n  var warnReservedPrefix = function (target, key) {\n    warn(\n      \"Property \\\"\" + key + \"\\\" must be accessed with \\\"$data.\" + key + \"\\\" because \" +\n      'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\n      'prevent conflicts with Vue internals. ' +\n      'See: https://vuejs.org/v2/api/#data',\n      target\n    );\n  };\n\n  var hasProxy =\n    typeof Proxy !== 'undefined' && isNative(Proxy);\n\n  if (hasProxy) {\n    var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\n    config.keyCodes = new Proxy(config.keyCodes, {\n      set: function set (target, key, value) {\n        if (isBuiltInModifier(key)) {\n          warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\n          return false\n        } else {\n          target[key] = value;\n          return true\n        }\n      }\n    });\n  }\n\n  var hasHandler = {\n    has: function has (target, key) {\n      var has = key in target;\n      var isAllowed = allowedGlobals(key) ||\n        (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));\n      if (!has && !isAllowed) {\n        if (key in target.$data) { warnReservedPrefix(target, key); }\n        else { warnNonPresent(target, key); }\n      }\n      return has || !isAllowed\n    }\n  };\n\n  var getHandler = {\n    get: function get (target, key) {\n      if (typeof key === 'string' && !(key in target)) {\n        if (key in target.$data) { warnReservedPrefix(target, key); }\n        else { warnNonPresent(target, key); }\n      }\n      return target[key]\n    }\n  };\n\n  initProxy = function initProxy (vm) {\n    if (hasProxy) {\n      // determine which proxy handler to use\n      var options = vm.$options;\n      var handlers = options.render && options.render._withStripped\n        ? getHandler\n        : hasHandler;\n      vm._renderProxy = new Proxy(vm, handlers);\n    } else {\n      vm._renderProxy = vm;\n    }\n  };\n}\n\n/*  */\n\nvar seenObjects = new _Set();\n\n/**\n * Recursively traverse an object to evoke all converted\n * getters, so that every nested property inside the object\n * is collected as a \"deep\" dependency.\n */\nfunction traverse (val) {\n  _traverse(val, seenObjects);\n  seenObjects.clear();\n}\n\nfunction _traverse (val, seen) {\n  var i, keys;\n  var isA = Array.isArray(val);\n  if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\n    return\n  }\n  if (val.__ob__) {\n    var depId = val.__ob__.dep.id;\n    if (seen.has(depId)) {\n      return\n    }\n    seen.add(depId);\n  }\n  if (isA) {\n    i = val.length;\n    while (i--) { _traverse(val[i], seen); }\n  } else {\n    keys = Object.keys(val);\n    i = keys.length;\n    while (i--) { _traverse(val[keys[i]], seen); }\n  }\n}\n\nvar mark;\nvar measure;\n\nif (true) {\n  var perf = inBrowser && window.performance;\n  /* istanbul ignore if */\n  if (\n    perf &&\n    perf.mark &&\n    perf.measure &&\n    perf.clearMarks &&\n    perf.clearMeasures\n  ) {\n    mark = function (tag) { return perf.mark(tag); };\n    measure = function (name, startTag, endTag) {\n      perf.measure(name, startTag, endTag);\n      perf.clearMarks(startTag);\n      perf.clearMarks(endTag);\n      // perf.clearMeasures(name)\n    };\n  }\n}\n\n/*  */\n\nvar normalizeEvent = cached(function (name) {\n  var passive = name.charAt(0) === '&';\n  name = passive ? name.slice(1) : name;\n  var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first\n  name = once$$1 ? name.slice(1) : name;\n  var capture = name.charAt(0) === '!';\n  name = capture ? name.slice(1) : name;\n  return {\n    name: name,\n    once: once$$1,\n    capture: capture,\n    passive: passive\n  }\n});\n\nfunction createFnInvoker (fns, vm) {\n  function invoker () {\n    var arguments$1 = arguments;\n\n    var fns = invoker.fns;\n    if (Array.isArray(fns)) {\n      var cloned = fns.slice();\n      for (var i = 0; i < cloned.length; i++) {\n        invokeWithErrorHandling(cloned[i], null, arguments$1, vm, \"v-on handler\");\n      }\n    } else {\n      // return handler return value for single handlers\n      return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\")\n    }\n  }\n  invoker.fns = fns;\n  return invoker\n}\n\nfunction updateListeners (\n  on,\n  oldOn,\n  add,\n  remove$$1,\n  createOnceHandler,\n  vm\n) {\n  var name, def$$1, cur, old, event;\n  for (name in on) {\n    def$$1 = cur = on[name];\n    old = oldOn[name];\n    event = normalizeEvent(name);\n    if (isUndef(cur)) {\n       true && warn(\n        \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\n        vm\n      );\n    } else if (isUndef(old)) {\n      if (isUndef(cur.fns)) {\n        cur = on[name] = createFnInvoker(cur, vm);\n      }\n      if (isTrue(event.once)) {\n        cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n      }\n      add(event.name, cur, event.capture, event.passive, event.params);\n    } else if (cur !== old) {\n      old.fns = cur;\n      on[name] = old;\n    }\n  }\n  for (name in oldOn) {\n    if (isUndef(on[name])) {\n      event = normalizeEvent(name);\n      remove$$1(event.name, oldOn[name], event.capture);\n    }\n  }\n}\n\n/*  */\n\nfunction mergeVNodeHook (def, hookKey, hook) {\n  if (def instanceof VNode) {\n    def = def.data.hook || (def.data.hook = {});\n  }\n  var invoker;\n  var oldHook = def[hookKey];\n\n  function wrappedHook () {\n    hook.apply(this, arguments);\n    // important: remove merged hook to ensure it's called only once\n    // and prevent memory leak\n    remove(invoker.fns, wrappedHook);\n  }\n\n  if (isUndef(oldHook)) {\n    // no existing hook\n    invoker = createFnInvoker([wrappedHook]);\n  } else {\n    /* istanbul ignore if */\n    if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n      // already a merged invoker\n      invoker = oldHook;\n      invoker.fns.push(wrappedHook);\n    } else {\n      // existing plain hook\n      invoker = createFnInvoker([oldHook, wrappedHook]);\n    }\n  }\n\n  invoker.merged = true;\n  def[hookKey] = invoker;\n}\n\n/*  */\n\nfunction extractPropsFromVNodeData (\n  data,\n  Ctor,\n  tag\n) {\n  // we are only extracting raw values here.\n  // validation and default values are handled in the child\n  // component itself.\n  var propOptions = Ctor.options.props;\n  if (isUndef(propOptions)) {\n    return\n  }\n  var res = {};\n  var attrs = data.attrs;\n  var props = data.props;\n  if (isDef(attrs) || isDef(props)) {\n    for (var key in propOptions) {\n      var altKey = hyphenate(key);\n      if (true) {\n        var keyInLowerCase = key.toLowerCase();\n        if (\n          key !== keyInLowerCase &&\n          attrs && hasOwn(attrs, keyInLowerCase)\n        ) {\n          tip(\n            \"Prop \\\"\" + keyInLowerCase + \"\\\" is passed to component \" +\n            (formatComponentName(tag || Ctor)) + \", but the declared prop name is\" +\n            \" \\\"\" + key + \"\\\". \" +\n            \"Note that HTML attributes are case-insensitive and camelCased \" +\n            \"props need to use their kebab-case equivalents when using in-DOM \" +\n            \"templates. You should probably use \\\"\" + altKey + \"\\\" instead of \\\"\" + key + \"\\\".\"\n          );\n        }\n      }\n      checkProp(res, props, key, altKey, true) ||\n      checkProp(res, attrs, key, altKey, false);\n    }\n  }\n  return res\n}\n\nfunction checkProp (\n  res,\n  hash,\n  key,\n  altKey,\n  preserve\n) {\n  if (isDef(hash)) {\n    if (hasOwn(hash, key)) {\n      res[key] = hash[key];\n      if (!preserve) {\n        delete hash[key];\n      }\n      return true\n    } else if (hasOwn(hash, altKey)) {\n      res[key] = hash[altKey];\n      if (!preserve) {\n        delete hash[altKey];\n      }\n      return true\n    }\n  }\n  return false\n}\n\n/*  */\n\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array<VNode>. There are\n// two cases where extra normalization is needed:\n\n// 1. When the children contains components - because a functional component\n// may return an Array instead of a single root. In this case, just a simple\n// normalization is needed - if any child is an Array, we flatten the whole\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n// because functional components already normalize their own children.\nfunction simpleNormalizeChildren (children) {\n  for (var i = 0; i < children.length; i++) {\n    if (Array.isArray(children[i])) {\n      return Array.prototype.concat.apply([], children)\n    }\n  }\n  return children\n}\n\n// 2. When the children contains constructs that always generated nested Arrays,\n// e.g. <template>, <slot>, v-for, or when the children is provided by user\n// with hand-written render functions / JSX. In such cases a full normalization\n// is needed to cater to all possible types of children values.\nfunction normalizeChildren (children) {\n  return isPrimitive(children)\n    ? [createTextVNode(children)]\n    : Array.isArray(children)\n      ? normalizeArrayChildren(children)\n      : undefined\n}\n\nfunction isTextNode (node) {\n  return isDef(node) && isDef(node.text) && isFalse(node.isComment)\n}\n\nfunction normalizeArrayChildren (children, nestedIndex) {\n  var res = [];\n  var i, c, lastIndex, last;\n  for (i = 0; i < children.length; i++) {\n    c = children[i];\n    if (isUndef(c) || typeof c === 'boolean') { continue }\n    lastIndex = res.length - 1;\n    last = res[lastIndex];\n    //  nested\n    if (Array.isArray(c)) {\n      if (c.length > 0) {\n        c = normalizeArrayChildren(c, ((nestedIndex || '') + \"_\" + i));\n        // merge adjacent text nodes\n        if (isTextNode(c[0]) && isTextNode(last)) {\n          res[lastIndex] = createTextVNode(last.text + (c[0]).text);\n          c.shift();\n        }\n        res.push.apply(res, c);\n      }\n    } else if (isPrimitive(c)) {\n      if (isTextNode(last)) {\n        // merge adjacent text nodes\n        // this is necessary for SSR hydration because text nodes are\n        // essentially merged when rendered to HTML strings\n        res[lastIndex] = createTextVNode(last.text + c);\n      } else if (c !== '') {\n        // convert primitive to vnode\n        res.push(createTextVNode(c));\n      }\n    } else {\n      if (isTextNode(c) && isTextNode(last)) {\n        // merge adjacent text nodes\n        res[lastIndex] = createTextVNode(last.text + c.text);\n      } else {\n        // default key for nested array children (likely generated by v-for)\n        if (isTrue(children._isVList) &&\n          isDef(c.tag) &&\n          isUndef(c.key) &&\n          isDef(nestedIndex)) {\n          c.key = \"__vlist\" + nestedIndex + \"_\" + i + \"__\";\n        }\n        res.push(c);\n      }\n    }\n  }\n  return res\n}\n\n/*  */\n\nfunction initProvide (vm) {\n  var provide = vm.$options.provide;\n  if (provide) {\n    vm._provided = typeof provide === 'function'\n      ? provide.call(vm)\n      : provide;\n  }\n}\n\nfunction initInjections (vm) {\n  var result = resolveInject(vm.$options.inject, vm);\n  if (result) {\n    toggleObserving(false);\n    Object.keys(result).forEach(function (key) {\n      /* istanbul ignore else */\n      if (true) {\n        defineReactive$$1(vm, key, result[key], function () {\n          warn(\n            \"Avoid mutating an injected value directly since the changes will be \" +\n            \"overwritten whenever the provided component re-renders. \" +\n            \"injection being mutated: \\\"\" + key + \"\\\"\",\n            vm\n          );\n        });\n      } else {}\n    });\n    toggleObserving(true);\n  }\n}\n\nfunction resolveInject (inject, vm) {\n  if (inject) {\n    // inject is :any because flow is not smart enough to figure out cached\n    var result = Object.create(null);\n    var keys = hasSymbol\n      ? Reflect.ownKeys(inject)\n      : Object.keys(inject);\n\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n      // #6574 in case the inject object is observed...\n      if (key === '__ob__') { continue }\n      var provideKey = inject[key].from;\n      var source = vm;\n      while (source) {\n        if (source._provided && hasOwn(source._provided, provideKey)) {\n          result[key] = source._provided[provideKey];\n          break\n        }\n        source = source.$parent;\n      }\n      if (!source) {\n        if ('default' in inject[key]) {\n          var provideDefault = inject[key].default;\n          result[key] = typeof provideDefault === 'function'\n            ? provideDefault.call(vm)\n            : provideDefault;\n        } else if (true) {\n          warn((\"Injection \\\"\" + key + \"\\\" not found\"), vm);\n        }\n      }\n    }\n    return result\n  }\n}\n\n/*  */\n\n\n\n/**\n * Runtime helper for resolving raw children VNodes into a slot object.\n */\nfunction resolveSlots (\n  children,\n  context\n) {\n  if (!children || !children.length) {\n    return {}\n  }\n  var slots = {};\n  for (var i = 0, l = children.length; i < l; i++) {\n    var child = children[i];\n    var data = child.data;\n    // remove slot attribute if the node is resolved as a Vue slot node\n    if (data && data.attrs && data.attrs.slot) {\n      delete data.attrs.slot;\n    }\n    // named slots should only be respected if the vnode was rendered in the\n    // same context.\n    if ((child.context === context || child.fnContext === context) &&\n      data && data.slot != null\n    ) {\n      var name = data.slot;\n      var slot = (slots[name] || (slots[name] = []));\n      if (child.tag === 'template') {\n        slot.push.apply(slot, child.children || []);\n      } else {\n        slot.push(child);\n      }\n    } else {\n      (slots.default || (slots.default = [])).push(child);\n    }\n  }\n  // ignore slots that contains only whitespace\n  for (var name$1 in slots) {\n    if (slots[name$1].every(isWhitespace)) {\n      delete slots[name$1];\n    }\n  }\n  return slots\n}\n\nfunction isWhitespace (node) {\n  return (node.isComment && !node.asyncFactory) || node.text === ' '\n}\n\n/*  */\n\nfunction isAsyncPlaceholder (node) {\n  return node.isComment && node.asyncFactory\n}\n\n/*  */\n\nfunction normalizeScopedSlots (\n  slots,\n  normalSlots,\n  prevSlots\n) {\n  var res;\n  var hasNormalSlots = Object.keys(normalSlots).length > 0;\n  var isStable = slots ? !!slots.$stable : !hasNormalSlots;\n  var key = slots && slots.$key;\n  if (!slots) {\n    res = {};\n  } else if (slots._normalized) {\n    // fast path 1: child component re-render only, parent did not change\n    return slots._normalized\n  } else if (\n    isStable &&\n    prevSlots &&\n    prevSlots !== emptyObject &&\n    key === prevSlots.$key &&\n    !hasNormalSlots &&\n    !prevSlots.$hasNormal\n  ) {\n    // fast path 2: stable scoped slots w/ no normal slots to proxy,\n    // only need to normalize once\n    return prevSlots\n  } else {\n    res = {};\n    for (var key$1 in slots) {\n      if (slots[key$1] && key$1[0] !== '$') {\n        res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]);\n      }\n    }\n  }\n  // expose normal slots on scopedSlots\n  for (var key$2 in normalSlots) {\n    if (!(key$2 in res)) {\n      res[key$2] = proxyNormalSlot(normalSlots, key$2);\n    }\n  }\n  // avoriaz seems to mock a non-extensible $scopedSlots object\n  // and when that is passed down this would cause an error\n  if (slots && Object.isExtensible(slots)) {\n    (slots)._normalized = res;\n  }\n  def(res, '$stable', isStable);\n  def(res, '$key', key);\n  def(res, '$hasNormal', hasNormalSlots);\n  return res\n}\n\nfunction normalizeScopedSlot(normalSlots, key, fn) {\n  var normalized = function () {\n    var res = arguments.length ? fn.apply(null, arguments) : fn({});\n    res = res && typeof res === 'object' && !Array.isArray(res)\n      ? [res] // single vnode\n      : normalizeChildren(res);\n    var vnode = res && res[0];\n    return res && (\n      !vnode ||\n      (res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode)) // #9658, #10391\n    ) ? undefined\n      : res\n  };\n  // this is a slot using the new v-slot syntax without scope. although it is\n  // compiled as a scoped slot, render fn users would expect it to be present\n  // on this.$slots because the usage is semantically a normal slot.\n  if (fn.proxy) {\n    Object.defineProperty(normalSlots, key, {\n      get: normalized,\n      enumerable: true,\n      configurable: true\n    });\n  }\n  return normalized\n}\n\nfunction proxyNormalSlot(slots, key) {\n  return function () { return slots[key]; }\n}\n\n/*  */\n\n/**\n * Runtime helper for rendering v-for lists.\n */\nfunction renderList (\n  val,\n  render\n) {\n  var ret, i, l, keys, key;\n  if (Array.isArray(val) || typeof val === 'string') {\n    ret = new Array(val.length);\n    for (i = 0, l = val.length; i < l; i++) {\n      ret[i] = render(val[i], i);\n    }\n  } else if (typeof val === 'number') {\n    ret = new Array(val);\n    for (i = 0; i < val; i++) {\n      ret[i] = render(i + 1, i);\n    }\n  } else if (isObject(val)) {\n    if (hasSymbol && val[Symbol.iterator]) {\n      ret = [];\n      var iterator = val[Symbol.iterator]();\n      var result = iterator.next();\n      while (!result.done) {\n        ret.push(render(result.value, ret.length));\n        result = iterator.next();\n      }\n    } else {\n      keys = Object.keys(val);\n      ret = new Array(keys.length);\n      for (i = 0, l = keys.length; i < l; i++) {\n        key = keys[i];\n        ret[i] = render(val[key], key, i);\n      }\n    }\n  }\n  if (!isDef(ret)) {\n    ret = [];\n  }\n  (ret)._isVList = true;\n  return ret\n}\n\n/*  */\n\n/**\n * Runtime helper for rendering <slot>\n */\nfunction renderSlot (\n  name,\n  fallbackRender,\n  props,\n  bindObject\n) {\n  var scopedSlotFn = this.$scopedSlots[name];\n  var nodes;\n  if (scopedSlotFn) {\n    // scoped slot\n    props = props || {};\n    if (bindObject) {\n      if ( true && !isObject(bindObject)) {\n        warn('slot v-bind without argument expects an Object', this);\n      }\n      props = extend(extend({}, bindObject), props);\n    }\n    nodes =\n      scopedSlotFn(props) ||\n      (typeof fallbackRender === 'function' ? fallbackRender() : fallbackRender);\n  } else {\n    nodes =\n      this.$slots[name] ||\n      (typeof fallbackRender === 'function' ? fallbackRender() : fallbackRender);\n  }\n\n  var target = props && props.slot;\n  if (target) {\n    return this.$createElement('template', { slot: target }, nodes)\n  } else {\n    return nodes\n  }\n}\n\n/*  */\n\n/**\n * Runtime helper for resolving filters\n */\nfunction resolveFilter (id) {\n  return resolveAsset(this.$options, 'filters', id, true) || identity\n}\n\n/*  */\n\nfunction isKeyNotMatch (expect, actual) {\n  if (Array.isArray(expect)) {\n    return expect.indexOf(actual) === -1\n  } else {\n    return expect !== actual\n  }\n}\n\n/**\n * Runtime helper for checking keyCodes from config.\n * exposed as Vue.prototype._k\n * passing in eventKeyName as last argument separately for backwards compat\n */\nfunction checkKeyCodes (\n  eventKeyCode,\n  key,\n  builtInKeyCode,\n  eventKeyName,\n  builtInKeyName\n) {\n  var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;\n  if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {\n    return isKeyNotMatch(builtInKeyName, eventKeyName)\n  } else if (mappedKeyCode) {\n    return isKeyNotMatch(mappedKeyCode, eventKeyCode)\n  } else if (eventKeyName) {\n    return hyphenate(eventKeyName) !== key\n  }\n  return eventKeyCode === undefined\n}\n\n/*  */\n\n/**\n * Runtime helper for merging v-bind=\"object\" into a VNode's data.\n */\nfunction bindObjectProps (\n  data,\n  tag,\n  value,\n  asProp,\n  isSync\n) {\n  if (value) {\n    if (!isObject(value)) {\n       true && warn(\n        'v-bind without argument expects an Object or Array value',\n        this\n      );\n    } else {\n      if (Array.isArray(value)) {\n        value = toObject(value);\n      }\n      var hash;\n      var loop = function ( key ) {\n        if (\n          key === 'class' ||\n          key === 'style' ||\n          isReservedAttribute(key)\n        ) {\n          hash = data;\n        } else {\n          var type = data.attrs && data.attrs.type;\n          hash = asProp || config.mustUseProp(tag, type, key)\n            ? data.domProps || (data.domProps = {})\n            : data.attrs || (data.attrs = {});\n        }\n        var camelizedKey = camelize(key);\n        var hyphenatedKey = hyphenate(key);\n        if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {\n          hash[key] = value[key];\n\n          if (isSync) {\n            var on = data.on || (data.on = {});\n            on[(\"update:\" + key)] = function ($event) {\n              value[key] = $event;\n            };\n          }\n        }\n      };\n\n      for (var key in value) loop( key );\n    }\n  }\n  return data\n}\n\n/*  */\n\n/**\n * Runtime helper for rendering static trees.\n */\nfunction renderStatic (\n  index,\n  isInFor\n) {\n  var cached = this._staticTrees || (this._staticTrees = []);\n  var tree = cached[index];\n  // if has already-rendered static tree and not inside v-for,\n  // we can reuse the same tree.\n  if (tree && !isInFor) {\n    return tree\n  }\n  // otherwise, render a fresh tree.\n  tree = cached[index] = this.$options.staticRenderFns[index].call(\n    this._renderProxy,\n    null,\n    this // for render fns generated for functional component templates\n  );\n  markStatic(tree, (\"__static__\" + index), false);\n  return tree\n}\n\n/**\n * Runtime helper for v-once.\n * Effectively it means marking the node as static with a unique key.\n */\nfunction markOnce (\n  tree,\n  index,\n  key\n) {\n  markStatic(tree, (\"__once__\" + index + (key ? (\"_\" + key) : \"\")), true);\n  return tree\n}\n\nfunction markStatic (\n  tree,\n  key,\n  isOnce\n) {\n  if (Array.isArray(tree)) {\n    for (var i = 0; i < tree.length; i++) {\n      if (tree[i] && typeof tree[i] !== 'string') {\n        markStaticNode(tree[i], (key + \"_\" + i), isOnce);\n      }\n    }\n  } else {\n    markStaticNode(tree, key, isOnce);\n  }\n}\n\nfunction markStaticNode (node, key, isOnce) {\n  node.isStatic = true;\n  node.key = key;\n  node.isOnce = isOnce;\n}\n\n/*  */\n\nfunction bindObjectListeners (data, value) {\n  if (value) {\n    if (!isPlainObject(value)) {\n       true && warn(\n        'v-on without argument expects an Object value',\n        this\n      );\n    } else {\n      var on = data.on = data.on ? extend({}, data.on) : {};\n      for (var key in value) {\n        var existing = on[key];\n        var ours = value[key];\n        on[key] = existing ? [].concat(existing, ours) : ours;\n      }\n    }\n  }\n  return data\n}\n\n/*  */\n\nfunction resolveScopedSlots (\n  fns, // see flow/vnode\n  res,\n  // the following are added in 2.6\n  hasDynamicKeys,\n  contentHashKey\n) {\n  res = res || { $stable: !hasDynamicKeys };\n  for (var i = 0; i < fns.length; i++) {\n    var slot = fns[i];\n    if (Array.isArray(slot)) {\n      resolveScopedSlots(slot, res, hasDynamicKeys);\n    } else if (slot) {\n      // marker for reverse proxying v-slot without scope on this.$slots\n      if (slot.proxy) {\n        slot.fn.proxy = true;\n      }\n      res[slot.key] = slot.fn;\n    }\n  }\n  if (contentHashKey) {\n    (res).$key = contentHashKey;\n  }\n  return res\n}\n\n/*  */\n\nfunction bindDynamicKeys (baseObj, values) {\n  for (var i = 0; i < values.length; i += 2) {\n    var key = values[i];\n    if (typeof key === 'string' && key) {\n      baseObj[values[i]] = values[i + 1];\n    } else if ( true && key !== '' && key !== null) {\n      // null is a special value for explicitly removing a binding\n      warn(\n        (\"Invalid value for dynamic directive argument (expected string or null): \" + key),\n        this\n      );\n    }\n  }\n  return baseObj\n}\n\n// helper to dynamically append modifier runtime markers to event names.\n// ensure only append when value is already string, otherwise it will be cast\n// to string and cause the type check to miss.\nfunction prependModifier (value, symbol) {\n  return typeof value === 'string' ? symbol + value : value\n}\n\n/*  */\n\nfunction installRenderHelpers (target) {\n  target._o = markOnce;\n  target._n = toNumber;\n  target._s = toString;\n  target._l = renderList;\n  target._t = renderSlot;\n  target._q = looseEqual;\n  target._i = looseIndexOf;\n  target._m = renderStatic;\n  target._f = resolveFilter;\n  target._k = checkKeyCodes;\n  target._b = bindObjectProps;\n  target._v = createTextVNode;\n  target._e = createEmptyVNode;\n  target._u = resolveScopedSlots;\n  target._g = bindObjectListeners;\n  target._d = bindDynamicKeys;\n  target._p = prependModifier;\n}\n\n/*  */\n\nfunction FunctionalRenderContext (\n  data,\n  props,\n  children,\n  parent,\n  Ctor\n) {\n  var this$1 = this;\n\n  var options = Ctor.options;\n  // ensure the createElement function in functional components\n  // gets a unique context - this is necessary for correct named slot check\n  var contextVm;\n  if (hasOwn(parent, '_uid')) {\n    contextVm = Object.create(parent);\n    // $flow-disable-line\n    contextVm._original = parent;\n  } else {\n    // the context vm passed in is a functional context as well.\n    // in this case we want to make sure we are able to get a hold to the\n    // real context instance.\n    contextVm = parent;\n    // $flow-disable-line\n    parent = parent._original;\n  }\n  var isCompiled = isTrue(options._compiled);\n  var needNormalization = !isCompiled;\n\n  this.data = data;\n  this.props = props;\n  this.children = children;\n  this.parent = parent;\n  this.listeners = data.on || emptyObject;\n  this.injections = resolveInject(options.inject, parent);\n  this.slots = function () {\n    if (!this$1.$slots) {\n      normalizeScopedSlots(\n        data.scopedSlots,\n        this$1.$slots = resolveSlots(children, parent)\n      );\n    }\n    return this$1.$slots\n  };\n\n  Object.defineProperty(this, 'scopedSlots', ({\n    enumerable: true,\n    get: function get () {\n      return normalizeScopedSlots(data.scopedSlots, this.slots())\n    }\n  }));\n\n  // support for compiled functional template\n  if (isCompiled) {\n    // exposing $options for renderStatic()\n    this.$options = options;\n    // pre-resolve slots for renderSlot()\n    this.$slots = this.slots();\n    this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);\n  }\n\n  if (options._scopeId) {\n    this._c = function (a, b, c, d) {\n      var vnode = createElement(contextVm, a, b, c, d, needNormalization);\n      if (vnode && !Array.isArray(vnode)) {\n        vnode.fnScopeId = options._scopeId;\n        vnode.fnContext = parent;\n      }\n      return vnode\n    };\n  } else {\n    this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };\n  }\n}\n\ninstallRenderHelpers(FunctionalRenderContext.prototype);\n\nfunction createFunctionalComponent (\n  Ctor,\n  propsData,\n  data,\n  contextVm,\n  children\n) {\n  var options = Ctor.options;\n  var props = {};\n  var propOptions = options.props;\n  if (isDef(propOptions)) {\n    for (var key in propOptions) {\n      props[key] = validateProp(key, propOptions, propsData || emptyObject);\n    }\n  } else {\n    if (isDef(data.attrs)) { mergeProps(props, data.attrs); }\n    if (isDef(data.props)) { mergeProps(props, data.props); }\n  }\n\n  var renderContext = new FunctionalRenderContext(\n    data,\n    props,\n    children,\n    contextVm,\n    Ctor\n  );\n\n  var vnode = options.render.call(null, renderContext._c, renderContext);\n\n  if (vnode instanceof VNode) {\n    return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)\n  } else if (Array.isArray(vnode)) {\n    var vnodes = normalizeChildren(vnode) || [];\n    var res = new Array(vnodes.length);\n    for (var i = 0; i < vnodes.length; i++) {\n      res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);\n    }\n    return res\n  }\n}\n\nfunction cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {\n  // #7817 clone node before setting fnContext, otherwise if the node is reused\n  // (e.g. it was from a cached normal slot) the fnContext causes named slots\n  // that should not be matched to match.\n  var clone = cloneVNode(vnode);\n  clone.fnContext = contextVm;\n  clone.fnOptions = options;\n  if (true) {\n    (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;\n  }\n  if (data.slot) {\n    (clone.data || (clone.data = {})).slot = data.slot;\n  }\n  return clone\n}\n\nfunction mergeProps (to, from) {\n  for (var key in from) {\n    to[camelize(key)] = from[key];\n  }\n}\n\n/*  */\n\n/*  */\n\n/*  */\n\n/*  */\n\n// inline hooks to be invoked on component VNodes during patch\nvar componentVNodeHooks = {\n  init: function init (vnode, hydrating) {\n    if (\n      vnode.componentInstance &&\n      !vnode.componentInstance._isDestroyed &&\n      vnode.data.keepAlive\n    ) {\n      // kept-alive components, treat as a patch\n      var mountedNode = vnode; // work around flow\n      componentVNodeHooks.prepatch(mountedNode, mountedNode);\n    } else {\n      var child = vnode.componentInstance = createComponentInstanceForVnode(\n        vnode,\n        activeInstance\n      );\n      child.$mount(hydrating ? vnode.elm : undefined, hydrating);\n    }\n  },\n\n  prepatch: function prepatch (oldVnode, vnode) {\n    var options = vnode.componentOptions;\n    var child = vnode.componentInstance = oldVnode.componentInstance;\n    updateChildComponent(\n      child,\n      options.propsData, // updated props\n      options.listeners, // updated listeners\n      vnode, // new parent vnode\n      options.children // new children\n    );\n  },\n\n  insert: function insert (vnode) {\n    var context = vnode.context;\n    var componentInstance = vnode.componentInstance;\n    if (!componentInstance._isMounted) {\n      componentInstance._isMounted = true;\n      callHook(componentInstance, 'mounted');\n    }\n    if (vnode.data.keepAlive) {\n      if (context._isMounted) {\n        // vue-router#1212\n        // During updates, a kept-alive component's child components may\n        // change, so directly walking the tree here may call activated hooks\n        // on incorrect children. Instead we push them into a queue which will\n        // be processed after the whole patch process ended.\n        queueActivatedComponent(componentInstance);\n      } else {\n        activateChildComponent(componentInstance, true /* direct */);\n      }\n    }\n  },\n\n  destroy: function destroy (vnode) {\n    var componentInstance = vnode.componentInstance;\n    if (!componentInstance._isDestroyed) {\n      if (!vnode.data.keepAlive) {\n        componentInstance.$destroy();\n      } else {\n        deactivateChildComponent(componentInstance, true /* direct */);\n      }\n    }\n  }\n};\n\nvar hooksToMerge = Object.keys(componentVNodeHooks);\n\nfunction createComponent (\n  Ctor,\n  data,\n  context,\n  children,\n  tag\n) {\n  if (isUndef(Ctor)) {\n    return\n  }\n\n  var baseCtor = context.$options._base;\n\n  // plain options object: turn it into a constructor\n  if (isObject(Ctor)) {\n    Ctor = baseCtor.extend(Ctor);\n  }\n\n  // if at this stage it's not a constructor or an async component factory,\n  // reject.\n  if (typeof Ctor !== 'function') {\n    if (true) {\n      warn((\"Invalid Component definition: \" + (String(Ctor))), context);\n    }\n    return\n  }\n\n  // async component\n  var asyncFactory;\n  if (isUndef(Ctor.cid)) {\n    asyncFactory = Ctor;\n    Ctor = resolveAsyncComponent(asyncFactory, baseCtor);\n    if (Ctor === undefined) {\n      // return a placeholder node for async component, which is rendered\n      // as a comment node but preserves all the raw information for the node.\n      // the information will be used for async server-rendering and hydration.\n      return createAsyncPlaceholder(\n        asyncFactory,\n        data,\n        context,\n        children,\n        tag\n      )\n    }\n  }\n\n  data = data || {};\n\n  // resolve constructor options in case global mixins are applied after\n  // component constructor creation\n  resolveConstructorOptions(Ctor);\n\n  // transform component v-model data into props & events\n  if (isDef(data.model)) {\n    transformModel(Ctor.options, data);\n  }\n\n  // extract props\n  var propsData = extractPropsFromVNodeData(data, Ctor, tag);\n\n  // functional component\n  if (isTrue(Ctor.options.functional)) {\n    return createFunctionalComponent(Ctor, propsData, data, context, children)\n  }\n\n  // extract listeners, since these needs to be treated as\n  // child component listeners instead of DOM listeners\n  var listeners = data.on;\n  // replace with listeners with .native modifier\n  // so it gets processed during parent component patch.\n  data.on = data.nativeOn;\n\n  if (isTrue(Ctor.options.abstract)) {\n    // abstract components do not keep anything\n    // other than props & listeners & slot\n\n    // work around flow\n    var slot = data.slot;\n    data = {};\n    if (slot) {\n      data.slot = slot;\n    }\n  }\n\n  // install component management hooks onto the placeholder node\n  installComponentHooks(data);\n\n  // return a placeholder vnode\n  var name = Ctor.options.name || tag;\n  var vnode = new VNode(\n    (\"vue-component-\" + (Ctor.cid) + (name ? (\"-\" + name) : '')),\n    data, undefined, undefined, undefined, context,\n    { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },\n    asyncFactory\n  );\n\n  return vnode\n}\n\nfunction createComponentInstanceForVnode (\n  // we know it's MountedComponentVNode but flow doesn't\n  vnode,\n  // activeInstance in lifecycle state\n  parent\n) {\n  var options = {\n    _isComponent: true,\n    _parentVnode: vnode,\n    parent: parent\n  };\n  // check inline-template render functions\n  var inlineTemplate = vnode.data.inlineTemplate;\n  if (isDef(inlineTemplate)) {\n    options.render = inlineTemplate.render;\n    options.staticRenderFns = inlineTemplate.staticRenderFns;\n  }\n  return new vnode.componentOptions.Ctor(options)\n}\n\nfunction installComponentHooks (data) {\n  var hooks = data.hook || (data.hook = {});\n  for (var i = 0; i < hooksToMerge.length; i++) {\n    var key = hooksToMerge[i];\n    var existing = hooks[key];\n    var toMerge = componentVNodeHooks[key];\n    if (existing !== toMerge && !(existing && existing._merged)) {\n      hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge;\n    }\n  }\n}\n\nfunction mergeHook$1 (f1, f2) {\n  var merged = function (a, b) {\n    // flow complains about extra args which is why we use any\n    f1(a, b);\n    f2(a, b);\n  };\n  merged._merged = true;\n  return merged\n}\n\n// transform component v-model info (value and callback) into\n// prop and event handler respectively.\nfunction transformModel (options, data) {\n  var prop = (options.model && options.model.prop) || 'value';\n  var event = (options.model && options.model.event) || 'input'\n  ;(data.attrs || (data.attrs = {}))[prop] = data.model.value;\n  var on = data.on || (data.on = {});\n  var existing = on[event];\n  var callback = data.model.callback;\n  if (isDef(existing)) {\n    if (\n      Array.isArray(existing)\n        ? existing.indexOf(callback) === -1\n        : existing !== callback\n    ) {\n      on[event] = [callback].concat(existing);\n    }\n  } else {\n    on[event] = callback;\n  }\n}\n\n/*  */\n\nvar SIMPLE_NORMALIZE = 1;\nvar ALWAYS_NORMALIZE = 2;\n\n// wrapper function for providing a more flexible interface\n// without getting yelled at by flow\nfunction createElement (\n  context,\n  tag,\n  data,\n  children,\n  normalizationType,\n  alwaysNormalize\n) {\n  if (Array.isArray(data) || isPrimitive(data)) {\n    normalizationType = children;\n    children = data;\n    data = undefined;\n  }\n  if (isTrue(alwaysNormalize)) {\n    normalizationType = ALWAYS_NORMALIZE;\n  }\n  return _createElement(context, tag, data, children, normalizationType)\n}\n\nfunction _createElement (\n  context,\n  tag,\n  data,\n  children,\n  normalizationType\n) {\n  if (isDef(data) && isDef((data).__ob__)) {\n     true && warn(\n      \"Avoid using observed data object as vnode data: \" + (JSON.stringify(data)) + \"\\n\" +\n      'Always create fresh vnode data objects in each render!',\n      context\n    );\n    return createEmptyVNode()\n  }\n  // object syntax in v-bind\n  if (isDef(data) && isDef(data.is)) {\n    tag = data.is;\n  }\n  if (!tag) {\n    // in case of component :is set to falsy value\n    return createEmptyVNode()\n  }\n  // warn against non-primitive key\n  if ( true &&\n    isDef(data) && isDef(data.key) && !isPrimitive(data.key)\n  ) {\n    {\n      warn(\n        'Avoid using non-primitive value as key, ' +\n        'use string/number value instead.',\n        context\n      );\n    }\n  }\n  // support single function children as default scoped slot\n  if (Array.isArray(children) &&\n    typeof children[0] === 'function'\n  ) {\n    data = data || {};\n    data.scopedSlots = { default: children[0] };\n    children.length = 0;\n  }\n  if (normalizationType === ALWAYS_NORMALIZE) {\n    children = normalizeChildren(children);\n  } else if (normalizationType === SIMPLE_NORMALIZE) {\n    children = simpleNormalizeChildren(children);\n  }\n  var vnode, ns;\n  if (typeof tag === 'string') {\n    var Ctor;\n    ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);\n    if (config.isReservedTag(tag)) {\n      // platform built-in elements\n      if ( true && isDef(data) && isDef(data.nativeOn) && data.tag !== 'component') {\n        warn(\n          (\"The .native modifier for v-on is only valid on components but it was used on <\" + tag + \">.\"),\n          context\n        );\n      }\n      vnode = new VNode(\n        config.parsePlatformTagName(tag), data, children,\n        undefined, undefined, context\n      );\n    } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {\n      // component\n      vnode = createComponent(Ctor, data, context, children, tag);\n    } else {\n      // unknown or unlisted namespaced elements\n      // check at runtime because it may get assigned a namespace when its\n      // parent normalizes children\n      vnode = new VNode(\n        tag, data, children,\n        undefined, undefined, context\n      );\n    }\n  } else {\n    // direct component options / constructor\n    vnode = createComponent(tag, data, context, children);\n  }\n  if (Array.isArray(vnode)) {\n    return vnode\n  } else if (isDef(vnode)) {\n    if (isDef(ns)) { applyNS(vnode, ns); }\n    if (isDef(data)) { registerDeepBindings(data); }\n    return vnode\n  } else {\n    return createEmptyVNode()\n  }\n}\n\nfunction applyNS (vnode, ns, force) {\n  vnode.ns = ns;\n  if (vnode.tag === 'foreignObject') {\n    // use default namespace inside foreignObject\n    ns = undefined;\n    force = true;\n  }\n  if (isDef(vnode.children)) {\n    for (var i = 0, l = vnode.children.length; i < l; i++) {\n      var child = vnode.children[i];\n      if (isDef(child.tag) && (\n        isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {\n        applyNS(child, ns, force);\n      }\n    }\n  }\n}\n\n// ref #5318\n// necessary to ensure parent re-render when deep bindings like :style and\n// :class are used on slot nodes\nfunction registerDeepBindings (data) {\n  if (isObject(data.style)) {\n    traverse(data.style);\n  }\n  if (isObject(data.class)) {\n    traverse(data.class);\n  }\n}\n\n/*  */\n\nfunction initRender (vm) {\n  vm._vnode = null; // the root of the child tree\n  vm._staticTrees = null; // v-once cached trees\n  var options = vm.$options;\n  var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree\n  var renderContext = parentVnode && parentVnode.context;\n  vm.$slots = resolveSlots(options._renderChildren, renderContext);\n  vm.$scopedSlots = emptyObject;\n  // bind the createElement fn to this instance\n  // so that we get proper render context inside it.\n  // args order: tag, data, children, normalizationType, alwaysNormalize\n  // internal version is used by render functions compiled from templates\n  vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };\n  // normalization is always applied for the public version, used in\n  // user-written render functions.\n  vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };\n\n  // $attrs & $listeners are exposed for easier HOC creation.\n  // they need to be reactive so that HOCs using them are always updated\n  var parentData = parentVnode && parentVnode.data;\n\n  /* istanbul ignore else */\n  if (true) {\n    defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {\n      !isUpdatingChildComponent && warn(\"$attrs is readonly.\", vm);\n    }, true);\n    defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () {\n      !isUpdatingChildComponent && warn(\"$listeners is readonly.\", vm);\n    }, true);\n  } else {}\n}\n\nvar currentRenderingInstance = null;\n\nfunction renderMixin (Vue) {\n  // install runtime convenience helpers\n  installRenderHelpers(Vue.prototype);\n\n  Vue.prototype.$nextTick = function (fn) {\n    return nextTick(fn, this)\n  };\n\n  Vue.prototype._render = function () {\n    var vm = this;\n    var ref = vm.$options;\n    var render = ref.render;\n    var _parentVnode = ref._parentVnode;\n\n    if (_parentVnode) {\n      vm.$scopedSlots = normalizeScopedSlots(\n        _parentVnode.data.scopedSlots,\n        vm.$slots,\n        vm.$scopedSlots\n      );\n    }\n\n    // set parent vnode. this allows render functions to have access\n    // to the data on the placeholder node.\n    vm.$vnode = _parentVnode;\n    // render self\n    var vnode;\n    try {\n      // There's no need to maintain a stack because all render fns are called\n      // separately from one another. Nested component's render fns are called\n      // when parent component is patched.\n      currentRenderingInstance = vm;\n      vnode = render.call(vm._renderProxy, vm.$createElement);\n    } catch (e) {\n      handleError(e, vm, \"render\");\n      // return error render result,\n      // or previous vnode to prevent render error causing blank component\n      /* istanbul ignore else */\n      if ( true && vm.$options.renderError) {\n        try {\n          vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);\n        } catch (e) {\n          handleError(e, vm, \"renderError\");\n          vnode = vm._vnode;\n        }\n      } else {\n        vnode = vm._vnode;\n      }\n    } finally {\n      currentRenderingInstance = null;\n    }\n    // if the returned array contains only a single node, allow it\n    if (Array.isArray(vnode) && vnode.length === 1) {\n      vnode = vnode[0];\n    }\n    // return empty vnode in case the render function errored out\n    if (!(vnode instanceof VNode)) {\n      if ( true && Array.isArray(vnode)) {\n        warn(\n          'Multiple root nodes returned from render function. Render function ' +\n          'should return a single root node.',\n          vm\n        );\n      }\n      vnode = createEmptyVNode();\n    }\n    // set parent\n    vnode.parent = _parentVnode;\n    return vnode\n  };\n}\n\n/*  */\n\nfunction ensureCtor (comp, base) {\n  if (\n    comp.__esModule ||\n    (hasSymbol && comp[Symbol.toStringTag] === 'Module')\n  ) {\n    comp = comp.default;\n  }\n  return isObject(comp)\n    ? base.extend(comp)\n    : comp\n}\n\nfunction createAsyncPlaceholder (\n  factory,\n  data,\n  context,\n  children,\n  tag\n) {\n  var node = createEmptyVNode();\n  node.asyncFactory = factory;\n  node.asyncMeta = { data: data, context: context, children: children, tag: tag };\n  return node\n}\n\nfunction resolveAsyncComponent (\n  factory,\n  baseCtor\n) {\n  if (isTrue(factory.error) && isDef(factory.errorComp)) {\n    return factory.errorComp\n  }\n\n  if (isDef(factory.resolved)) {\n    return factory.resolved\n  }\n\n  var owner = currentRenderingInstance;\n  if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {\n    // already pending\n    factory.owners.push(owner);\n  }\n\n  if (isTrue(factory.loading) && isDef(factory.loadingComp)) {\n    return factory.loadingComp\n  }\n\n  if (owner && !isDef(factory.owners)) {\n    var owners = factory.owners = [owner];\n    var sync = true;\n    var timerLoading = null;\n    var timerTimeout = null\n\n    ;(owner).$on('hook:destroyed', function () { return remove(owners, owner); });\n\n    var forceRender = function (renderCompleted) {\n      for (var i = 0, l = owners.length; i < l; i++) {\n        (owners[i]).$forceUpdate();\n      }\n\n      if (renderCompleted) {\n        owners.length = 0;\n        if (timerLoading !== null) {\n          clearTimeout(timerLoading);\n          timerLoading = null;\n        }\n        if (timerTimeout !== null) {\n          clearTimeout(timerTimeout);\n          timerTimeout = null;\n        }\n      }\n    };\n\n    var resolve = once(function (res) {\n      // cache resolved\n      factory.resolved = ensureCtor(res, baseCtor);\n      // invoke callbacks only if this is not a synchronous resolve\n      // (async resolves are shimmed as synchronous during SSR)\n      if (!sync) {\n        forceRender(true);\n      } else {\n        owners.length = 0;\n      }\n    });\n\n    var reject = once(function (reason) {\n       true && warn(\n        \"Failed to resolve async component: \" + (String(factory)) +\n        (reason ? (\"\\nReason: \" + reason) : '')\n      );\n      if (isDef(factory.errorComp)) {\n        factory.error = true;\n        forceRender(true);\n      }\n    });\n\n    var res = factory(resolve, reject);\n\n    if (isObject(res)) {\n      if (isPromise(res)) {\n        // () => Promise\n        if (isUndef(factory.resolved)) {\n          res.then(resolve, reject);\n        }\n      } else if (isPromise(res.component)) {\n        res.component.then(resolve, reject);\n\n        if (isDef(res.error)) {\n          factory.errorComp = ensureCtor(res.error, baseCtor);\n        }\n\n        if (isDef(res.loading)) {\n          factory.loadingComp = ensureCtor(res.loading, baseCtor);\n          if (res.delay === 0) {\n            factory.loading = true;\n          } else {\n            timerLoading = setTimeout(function () {\n              timerLoading = null;\n              if (isUndef(factory.resolved) && isUndef(factory.error)) {\n                factory.loading = true;\n                forceRender(false);\n              }\n            }, res.delay || 200);\n          }\n        }\n\n        if (isDef(res.timeout)) {\n          timerTimeout = setTimeout(function () {\n            timerTimeout = null;\n            if (isUndef(factory.resolved)) {\n              reject(\n                 true\n                  ? (\"timeout (\" + (res.timeout) + \"ms)\")\n                  : undefined\n              );\n            }\n          }, res.timeout);\n        }\n      }\n    }\n\n    sync = false;\n    // return in case resolved synchronously\n    return factory.loading\n      ? factory.loadingComp\n      : factory.resolved\n  }\n}\n\n/*  */\n\nfunction getFirstComponentChild (children) {\n  if (Array.isArray(children)) {\n    for (var i = 0; i < children.length; i++) {\n      var c = children[i];\n      if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {\n        return c\n      }\n    }\n  }\n}\n\n/*  */\n\n/*  */\n\nfunction initEvents (vm) {\n  vm._events = Object.create(null);\n  vm._hasHookEvent = false;\n  // init parent attached events\n  var listeners = vm.$options._parentListeners;\n  if (listeners) {\n    updateComponentListeners(vm, listeners);\n  }\n}\n\nvar target;\n\nfunction add (event, fn) {\n  target.$on(event, fn);\n}\n\nfunction remove$1 (event, fn) {\n  target.$off(event, fn);\n}\n\nfunction createOnceHandler (event, fn) {\n  var _target = target;\n  return function onceHandler () {\n    var res = fn.apply(null, arguments);\n    if (res !== null) {\n      _target.$off(event, onceHandler);\n    }\n  }\n}\n\nfunction updateComponentListeners (\n  vm,\n  listeners,\n  oldListeners\n) {\n  target = vm;\n  updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm);\n  target = undefined;\n}\n\nfunction eventsMixin (Vue) {\n  var hookRE = /^hook:/;\n  Vue.prototype.$on = function (event, fn) {\n    var vm = this;\n    if (Array.isArray(event)) {\n      for (var i = 0, l = event.length; i < l; i++) {\n        vm.$on(event[i], fn);\n      }\n    } else {\n      (vm._events[event] || (vm._events[event] = [])).push(fn);\n      // optimize hook:event cost by using a boolean flag marked at registration\n      // instead of a hash lookup\n      if (hookRE.test(event)) {\n        vm._hasHookEvent = true;\n      }\n    }\n    return vm\n  };\n\n  Vue.prototype.$once = function (event, fn) {\n    var vm = this;\n    function on () {\n      vm.$off(event, on);\n      fn.apply(vm, arguments);\n    }\n    on.fn = fn;\n    vm.$on(event, on);\n    return vm\n  };\n\n  Vue.prototype.$off = function (event, fn) {\n    var vm = this;\n    // all\n    if (!arguments.length) {\n      vm._events = Object.create(null);\n      return vm\n    }\n    // array of events\n    if (Array.isArray(event)) {\n      for (var i$1 = 0, l = event.length; i$1 < l; i$1++) {\n        vm.$off(event[i$1], fn);\n      }\n      return vm\n    }\n    // specific event\n    var cbs = vm._events[event];\n    if (!cbs) {\n      return vm\n    }\n    if (!fn) {\n      vm._events[event] = null;\n      return vm\n    }\n    // specific handler\n    var cb;\n    var i = cbs.length;\n    while (i--) {\n      cb = cbs[i];\n      if (cb === fn || cb.fn === fn) {\n        cbs.splice(i, 1);\n        break\n      }\n    }\n    return vm\n  };\n\n  Vue.prototype.$emit = function (event) {\n    var vm = this;\n    if (true) {\n      var lowerCaseEvent = event.toLowerCase();\n      if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {\n        tip(\n          \"Event \\\"\" + lowerCaseEvent + \"\\\" is emitted in component \" +\n          (formatComponentName(vm)) + \" but the handler is registered for \\\"\" + event + \"\\\". \" +\n          \"Note that HTML attributes are case-insensitive and you cannot use \" +\n          \"v-on to listen to camelCase events when using in-DOM templates. \" +\n          \"You should probably use \\\"\" + (hyphenate(event)) + \"\\\" instead of \\\"\" + event + \"\\\".\"\n        );\n      }\n    }\n    var cbs = vm._events[event];\n    if (cbs) {\n      cbs = cbs.length > 1 ? toArray(cbs) : cbs;\n      var args = toArray(arguments, 1);\n      var info = \"event handler for \\\"\" + event + \"\\\"\";\n      for (var i = 0, l = cbs.length; i < l; i++) {\n        invokeWithErrorHandling(cbs[i], vm, args, vm, info);\n      }\n    }\n    return vm\n  };\n}\n\n/*  */\n\nvar activeInstance = null;\nvar isUpdatingChildComponent = false;\n\nfunction setActiveInstance(vm) {\n  var prevActiveInstance = activeInstance;\n  activeInstance = vm;\n  return function () {\n    activeInstance = prevActiveInstance;\n  }\n}\n\nfunction initLifecycle (vm) {\n  var options = vm.$options;\n\n  // locate first non-abstract parent\n  var parent = options.parent;\n  if (parent && !options.abstract) {\n    while (parent.$options.abstract && parent.$parent) {\n      parent = parent.$parent;\n    }\n    parent.$children.push(vm);\n  }\n\n  vm.$parent = parent;\n  vm.$root = parent ? parent.$root : vm;\n\n  vm.$children = [];\n  vm.$refs = {};\n\n  vm._watcher = null;\n  vm._inactive = null;\n  vm._directInactive = false;\n  vm._isMounted = false;\n  vm._isDestroyed = false;\n  vm._isBeingDestroyed = false;\n}\n\nfunction lifecycleMixin (Vue) {\n  Vue.prototype._update = function (vnode, hydrating) {\n    var vm = this;\n    var prevEl = vm.$el;\n    var prevVnode = vm._vnode;\n    var restoreActiveInstance = setActiveInstance(vm);\n    vm._vnode = vnode;\n    // Vue.prototype.__patch__ is injected in entry points\n    // based on the rendering backend used.\n    if (!prevVnode) {\n      // initial render\n      vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);\n    } else {\n      // updates\n      vm.$el = vm.__patch__(prevVnode, vnode);\n    }\n    restoreActiveInstance();\n    // update __vue__ reference\n    if (prevEl) {\n      prevEl.__vue__ = null;\n    }\n    if (vm.$el) {\n      vm.$el.__vue__ = vm;\n    }\n    // if parent is an HOC, update its $el as well\n    if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {\n      vm.$parent.$el = vm.$el;\n    }\n    // updated hook is called by the scheduler to ensure that children are\n    // updated in a parent's updated hook.\n  };\n\n  Vue.prototype.$forceUpdate = function () {\n    var vm = this;\n    if (vm._watcher) {\n      vm._watcher.update();\n    }\n  };\n\n  Vue.prototype.$destroy = function () {\n    var vm = this;\n    if (vm._isBeingDestroyed) {\n      return\n    }\n    callHook(vm, 'beforeDestroy');\n    vm._isBeingDestroyed = true;\n    // remove self from parent\n    var parent = vm.$parent;\n    if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\n      remove(parent.$children, vm);\n    }\n    // teardown watchers\n    if (vm._watcher) {\n      vm._watcher.teardown();\n    }\n    var i = vm._watchers.length;\n    while (i--) {\n      vm._watchers[i].teardown();\n    }\n    // remove reference from data ob\n    // frozen object may not have observer.\n    if (vm._data.__ob__) {\n      vm._data.__ob__.vmCount--;\n    }\n    // call the last hook...\n    vm._isDestroyed = true;\n    // invoke destroy hooks on current rendered tree\n    vm.__patch__(vm._vnode, null);\n    // fire destroyed hook\n    callHook(vm, 'destroyed');\n    // turn off all instance listeners.\n    vm.$off();\n    // remove __vue__ reference\n    if (vm.$el) {\n      vm.$el.__vue__ = null;\n    }\n    // release circular reference (#6759)\n    if (vm.$vnode) {\n      vm.$vnode.parent = null;\n    }\n  };\n}\n\nfunction mountComponent (\n  vm,\n  el,\n  hydrating\n) {\n  vm.$el = el;\n  if (!vm.$options.render) {\n    vm.$options.render = createEmptyVNode;\n    if (true) {\n      /* istanbul ignore if */\n      if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||\n        vm.$options.el || el) {\n        warn(\n          'You are using the runtime-only build of Vue where the template ' +\n          'compiler is not available. Either pre-compile the templates into ' +\n          'render functions, or use the compiler-included build.',\n          vm\n        );\n      } else {\n        warn(\n          'Failed to mount component: template or render function not defined.',\n          vm\n        );\n      }\n    }\n  }\n  callHook(vm, 'beforeMount');\n\n  var updateComponent;\n  /* istanbul ignore if */\n  if ( true && config.performance && mark) {\n    updateComponent = function () {\n      var name = vm._name;\n      var id = vm._uid;\n      var startTag = \"vue-perf-start:\" + id;\n      var endTag = \"vue-perf-end:\" + id;\n\n      mark(startTag);\n      var vnode = vm._render();\n      mark(endTag);\n      measure((\"vue \" + name + \" render\"), startTag, endTag);\n\n      mark(startTag);\n      vm._update(vnode, hydrating);\n      mark(endTag);\n      measure((\"vue \" + name + \" patch\"), startTag, endTag);\n    };\n  } else {\n    updateComponent = function () {\n      vm._update(vm._render(), hydrating);\n    };\n  }\n\n  // we set this to vm._watcher inside the watcher's constructor\n  // since the watcher's initial patch may call $forceUpdate (e.g. inside child\n  // component's mounted hook), which relies on vm._watcher being already defined\n  new Watcher(vm, updateComponent, noop, {\n    before: function before () {\n      if (vm._isMounted && !vm._isDestroyed) {\n        callHook(vm, 'beforeUpdate');\n      }\n    }\n  }, true /* isRenderWatcher */);\n  hydrating = false;\n\n  // manually mounted instance, call mounted on self\n  // mounted is called for render-created child components in its inserted hook\n  if (vm.$vnode == null) {\n    vm._isMounted = true;\n    callHook(vm, 'mounted');\n  }\n  return vm\n}\n\nfunction updateChildComponent (\n  vm,\n  propsData,\n  listeners,\n  parentVnode,\n  renderChildren\n) {\n  if (true) {\n    isUpdatingChildComponent = true;\n  }\n\n  // determine whether component has slot children\n  // we need to do this before overwriting $options._renderChildren.\n\n  // check if there are dynamic scopedSlots (hand-written or compiled but with\n  // dynamic slot names). Static scoped slots compiled from template has the\n  // \"$stable\" marker.\n  var newScopedSlots = parentVnode.data.scopedSlots;\n  var oldScopedSlots = vm.$scopedSlots;\n  var hasDynamicScopedSlot = !!(\n    (newScopedSlots && !newScopedSlots.$stable) ||\n    (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||\n    (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key) ||\n    (!newScopedSlots && vm.$scopedSlots.$key)\n  );\n\n  // Any static slot children from the parent may have changed during parent's\n  // update. Dynamic scoped slots may also have changed. In such cases, a forced\n  // update is necessary to ensure correctness.\n  var needsForceUpdate = !!(\n    renderChildren ||               // has new static slots\n    vm.$options._renderChildren ||  // has old static slots\n    hasDynamicScopedSlot\n  );\n\n  vm.$options._parentVnode = parentVnode;\n  vm.$vnode = parentVnode; // update vm's placeholder node without re-render\n\n  if (vm._vnode) { // update child tree's parent\n    vm._vnode.parent = parentVnode;\n  }\n  vm.$options._renderChildren = renderChildren;\n\n  // update $attrs and $listeners hash\n  // these are also reactive so they may trigger child update if the child\n  // used them during render\n  vm.$attrs = parentVnode.data.attrs || emptyObject;\n  vm.$listeners = listeners || emptyObject;\n\n  // update props\n  if (propsData && vm.$options.props) {\n    toggleObserving(false);\n    var props = vm._props;\n    var propKeys = vm.$options._propKeys || [];\n    for (var i = 0; i < propKeys.length; i++) {\n      var key = propKeys[i];\n      var propOptions = vm.$options.props; // wtf flow?\n      props[key] = validateProp(key, propOptions, propsData, vm);\n    }\n    toggleObserving(true);\n    // keep a copy of raw propsData\n    vm.$options.propsData = propsData;\n  }\n\n  // update listeners\n  listeners = listeners || emptyObject;\n  var oldListeners = vm.$options._parentListeners;\n  vm.$options._parentListeners = listeners;\n  updateComponentListeners(vm, listeners, oldListeners);\n\n  // resolve slots + force update if has children\n  if (needsForceUpdate) {\n    vm.$slots = resolveSlots(renderChildren, parentVnode.context);\n    vm.$forceUpdate();\n  }\n\n  if (true) {\n    isUpdatingChildComponent = false;\n  }\n}\n\nfunction isInInactiveTree (vm) {\n  while (vm && (vm = vm.$parent)) {\n    if (vm._inactive) { return true }\n  }\n  return false\n}\n\nfunction activateChildComponent (vm, direct) {\n  if (direct) {\n    vm._directInactive = false;\n    if (isInInactiveTree(vm)) {\n      return\n    }\n  } else if (vm._directInactive) {\n    return\n  }\n  if (vm._inactive || vm._inactive === null) {\n    vm._inactive = false;\n    for (var i = 0; i < vm.$children.length; i++) {\n      activateChildComponent(vm.$children[i]);\n    }\n    callHook(vm, 'activated');\n  }\n}\n\nfunction deactivateChildComponent (vm, direct) {\n  if (direct) {\n    vm._directInactive = true;\n    if (isInInactiveTree(vm)) {\n      return\n    }\n  }\n  if (!vm._inactive) {\n    vm._inactive = true;\n    for (var i = 0; i < vm.$children.length; i++) {\n      deactivateChildComponent(vm.$children[i]);\n    }\n    callHook(vm, 'deactivated');\n  }\n}\n\nfunction callHook (vm, hook) {\n  // #7573 disable dep collection when invoking lifecycle hooks\n  pushTarget();\n  var handlers = vm.$options[hook];\n  var info = hook + \" hook\";\n  if (handlers) {\n    for (var i = 0, j = handlers.length; i < j; i++) {\n      invokeWithErrorHandling(handlers[i], vm, null, vm, info);\n    }\n  }\n  if (vm._hasHookEvent) {\n    vm.$emit('hook:' + hook);\n  }\n  popTarget();\n}\n\n/*  */\n\nvar MAX_UPDATE_COUNT = 100;\n\nvar queue = [];\nvar activatedChildren = [];\nvar has = {};\nvar circular = {};\nvar waiting = false;\nvar flushing = false;\nvar index = 0;\n\n/**\n * Reset the scheduler's state.\n */\nfunction resetSchedulerState () {\n  index = queue.length = activatedChildren.length = 0;\n  has = {};\n  if (true) {\n    circular = {};\n  }\n  waiting = flushing = false;\n}\n\n// Async edge case #6566 requires saving the timestamp when event listeners are\n// attached. However, calling performance.now() has a perf overhead especially\n// if the page has thousands of event listeners. Instead, we take a timestamp\n// every time the scheduler flushes and use that for all event listeners\n// attached during that flush.\nvar currentFlushTimestamp = 0;\n\n// Async edge case fix requires storing an event listener's attach timestamp.\nvar getNow = Date.now;\n\n// Determine what event timestamp the browser is using. Annoyingly, the\n// timestamp can either be hi-res (relative to page load) or low-res\n// (relative to UNIX epoch), so in order to compare time we have to use the\n// same timestamp type when saving the flush timestamp.\n// All IE versions use low-res event timestamps, and have problematic clock\n// implementations (#9632)\nif (inBrowser && !isIE) {\n  var performance = window.performance;\n  if (\n    performance &&\n    typeof performance.now === 'function' &&\n    getNow() > document.createEvent('Event').timeStamp\n  ) {\n    // if the event timestamp, although evaluated AFTER the Date.now(), is\n    // smaller than it, it means the event is using a hi-res timestamp,\n    // and we need to use the hi-res version for event listener timestamps as\n    // well.\n    getNow = function () { return performance.now(); };\n  }\n}\n\n/**\n * Flush both queues and run the watchers.\n */\nfunction flushSchedulerQueue () {\n  currentFlushTimestamp = getNow();\n  flushing = true;\n  var watcher, id;\n\n  // Sort queue before flush.\n  // This ensures that:\n  // 1. Components are updated from parent to child. (because parent is always\n  //    created before the child)\n  // 2. A component's user watchers are run before its render watcher (because\n  //    user watchers are created before the render watcher)\n  // 3. If a component is destroyed during a parent component's watcher run,\n  //    its watchers can be skipped.\n  queue.sort(function (a, b) { return a.id - b.id; });\n\n  // do not cache length because more watchers might be pushed\n  // as we run existing watchers\n  for (index = 0; index < queue.length; index++) {\n    watcher = queue[index];\n    if (watcher.before) {\n      watcher.before();\n    }\n    id = watcher.id;\n    has[id] = null;\n    watcher.run();\n    // in dev build, check and stop circular updates.\n    if ( true && has[id] != null) {\n      circular[id] = (circular[id] || 0) + 1;\n      if (circular[id] > MAX_UPDATE_COUNT) {\n        warn(\n          'You may have an infinite update loop ' + (\n            watcher.user\n              ? (\"in watcher with expression \\\"\" + (watcher.expression) + \"\\\"\")\n              : \"in a component render function.\"\n          ),\n          watcher.vm\n        );\n        break\n      }\n    }\n  }\n\n  // keep copies of post queues before resetting state\n  var activatedQueue = activatedChildren.slice();\n  var updatedQueue = queue.slice();\n\n  resetSchedulerState();\n\n  // call component updated and activated hooks\n  callActivatedHooks(activatedQueue);\n  callUpdatedHooks(updatedQueue);\n\n  // devtool hook\n  /* istanbul ignore if */\n  if (devtools && config.devtools) {\n    devtools.emit('flush');\n  }\n}\n\nfunction callUpdatedHooks (queue) {\n  var i = queue.length;\n  while (i--) {\n    var watcher = queue[i];\n    var vm = watcher.vm;\n    if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {\n      callHook(vm, 'updated');\n    }\n  }\n}\n\n/**\n * Queue a kept-alive component that was activated during patch.\n * The queue will be processed after the entire tree has been patched.\n */\nfunction queueActivatedComponent (vm) {\n  // setting _inactive to false here so that a render function can\n  // rely on checking whether it's in an inactive tree (e.g. router-view)\n  vm._inactive = false;\n  activatedChildren.push(vm);\n}\n\nfunction callActivatedHooks (queue) {\n  for (var i = 0; i < queue.length; i++) {\n    queue[i]._inactive = true;\n    activateChildComponent(queue[i], true /* true */);\n  }\n}\n\n/**\n * Push a watcher into the watcher queue.\n * Jobs with duplicate IDs will be skipped unless it's\n * pushed when the queue is being flushed.\n */\nfunction queueWatcher (watcher) {\n  var id = watcher.id;\n  if (has[id] == null) {\n    has[id] = true;\n    if (!flushing) {\n      queue.push(watcher);\n    } else {\n      // if already flushing, splice the watcher based on its id\n      // if already past its id, it will be run next immediately.\n      var i = queue.length - 1;\n      while (i > index && queue[i].id > watcher.id) {\n        i--;\n      }\n      queue.splice(i + 1, 0, watcher);\n    }\n    // queue the flush\n    if (!waiting) {\n      waiting = true;\n\n      if ( true && !config.async) {\n        flushSchedulerQueue();\n        return\n      }\n      nextTick(flushSchedulerQueue);\n    }\n  }\n}\n\n/*  */\n\n\n\nvar uid$2 = 0;\n\n/**\n * A watcher parses an expression, collects dependencies,\n * and fires callback when the expression value changes.\n * This is used for both the $watch() api and directives.\n */\nvar Watcher = function Watcher (\n  vm,\n  expOrFn,\n  cb,\n  options,\n  isRenderWatcher\n) {\n  this.vm = vm;\n  if (isRenderWatcher) {\n    vm._watcher = this;\n  }\n  vm._watchers.push(this);\n  // options\n  if (options) {\n    this.deep = !!options.deep;\n    this.user = !!options.user;\n    this.lazy = !!options.lazy;\n    this.sync = !!options.sync;\n    this.before = options.before;\n  } else {\n    this.deep = this.user = this.lazy = this.sync = false;\n  }\n  this.cb = cb;\n  this.id = ++uid$2; // uid for batching\n  this.active = true;\n  this.dirty = this.lazy; // for lazy watchers\n  this.deps = [];\n  this.newDeps = [];\n  this.depIds = new _Set();\n  this.newDepIds = new _Set();\n  this.expression =  true\n    ? expOrFn.toString()\n    : undefined;\n  // parse expression for getter\n  if (typeof expOrFn === 'function') {\n    this.getter = expOrFn;\n  } else {\n    this.getter = parsePath(expOrFn);\n    if (!this.getter) {\n      this.getter = noop;\n       true && warn(\n        \"Failed watching path: \\\"\" + expOrFn + \"\\\" \" +\n        'Watcher only accepts simple dot-delimited paths. ' +\n        'For full control, use a function instead.',\n        vm\n      );\n    }\n  }\n  this.value = this.lazy\n    ? undefined\n    : this.get();\n};\n\n/**\n * Evaluate the getter, and re-collect dependencies.\n */\nWatcher.prototype.get = function get () {\n  pushTarget(this);\n  var value;\n  var vm = this.vm;\n  try {\n    value = this.getter.call(vm, vm);\n  } catch (e) {\n    if (this.user) {\n      handleError(e, vm, (\"getter for watcher \\\"\" + (this.expression) + \"\\\"\"));\n    } else {\n      throw e\n    }\n  } finally {\n    // \"touch\" every property so they are all tracked as\n    // dependencies for deep watching\n    if (this.deep) {\n      traverse(value);\n    }\n    popTarget();\n    this.cleanupDeps();\n  }\n  return value\n};\n\n/**\n * Add a dependency to this directive.\n */\nWatcher.prototype.addDep = function addDep (dep) {\n  var id = dep.id;\n  if (!this.newDepIds.has(id)) {\n    this.newDepIds.add(id);\n    this.newDeps.push(dep);\n    if (!this.depIds.has(id)) {\n      dep.addSub(this);\n    }\n  }\n};\n\n/**\n * Clean up for dependency collection.\n */\nWatcher.prototype.cleanupDeps = function cleanupDeps () {\n  var i = this.deps.length;\n  while (i--) {\n    var dep = this.deps[i];\n    if (!this.newDepIds.has(dep.id)) {\n      dep.removeSub(this);\n    }\n  }\n  var tmp = this.depIds;\n  this.depIds = this.newDepIds;\n  this.newDepIds = tmp;\n  this.newDepIds.clear();\n  tmp = this.deps;\n  this.deps = this.newDeps;\n  this.newDeps = tmp;\n  this.newDeps.length = 0;\n};\n\n/**\n * Subscriber interface.\n * Will be called when a dependency changes.\n */\nWatcher.prototype.update = function update () {\n  /* istanbul ignore else */\n  if (this.lazy) {\n    this.dirty = true;\n  } else if (this.sync) {\n    this.run();\n  } else {\n    queueWatcher(this);\n  }\n};\n\n/**\n * Scheduler job interface.\n * Will be called by the scheduler.\n */\nWatcher.prototype.run = function run () {\n  if (this.active) {\n    var value = this.get();\n    if (\n      value !== this.value ||\n      // Deep watchers and watchers on Object/Arrays should fire even\n      // when the value is the same, because the value may\n      // have mutated.\n      isObject(value) ||\n      this.deep\n    ) {\n      // set new value\n      var oldValue = this.value;\n      this.value = value;\n      if (this.user) {\n        var info = \"callback for watcher \\\"\" + (this.expression) + \"\\\"\";\n        invokeWithErrorHandling(this.cb, this.vm, [value, oldValue], this.vm, info);\n      } else {\n        this.cb.call(this.vm, value, oldValue);\n      }\n    }\n  }\n};\n\n/**\n * Evaluate the value of the watcher.\n * This only gets called for lazy watchers.\n */\nWatcher.prototype.evaluate = function evaluate () {\n  this.value = this.get();\n  this.dirty = false;\n};\n\n/**\n * Depend on all deps collected by this watcher.\n */\nWatcher.prototype.depend = function depend () {\n  var i = this.deps.length;\n  while (i--) {\n    this.deps[i].depend();\n  }\n};\n\n/**\n * Remove self from all dependencies' subscriber list.\n */\nWatcher.prototype.teardown = function teardown () {\n  if (this.active) {\n    // remove self from vm's watcher list\n    // this is a somewhat expensive operation so we skip it\n    // if the vm is being destroyed.\n    if (!this.vm._isBeingDestroyed) {\n      remove(this.vm._watchers, this);\n    }\n    var i = this.deps.length;\n    while (i--) {\n      this.deps[i].removeSub(this);\n    }\n    this.active = false;\n  }\n};\n\n/*  */\n\nvar sharedPropertyDefinition = {\n  enumerable: true,\n  configurable: true,\n  get: noop,\n  set: noop\n};\n\nfunction proxy (target, sourceKey, key) {\n  sharedPropertyDefinition.get = function proxyGetter () {\n    return this[sourceKey][key]\n  };\n  sharedPropertyDefinition.set = function proxySetter (val) {\n    this[sourceKey][key] = val;\n  };\n  Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction initState (vm) {\n  vm._watchers = [];\n  var opts = vm.$options;\n  if (opts.props) { initProps(vm, opts.props); }\n  if (opts.methods) { initMethods(vm, opts.methods); }\n  if (opts.data) {\n    initData(vm);\n  } else {\n    observe(vm._data = {}, true /* asRootData */);\n  }\n  if (opts.computed) { initComputed(vm, opts.computed); }\n  if (opts.watch && opts.watch !== nativeWatch) {\n    initWatch(vm, opts.watch);\n  }\n}\n\nfunction initProps (vm, propsOptions) {\n  var propsData = vm.$options.propsData || {};\n  var props = vm._props = {};\n  // cache prop keys so that future props updates can iterate using Array\n  // instead of dynamic object key enumeration.\n  var keys = vm.$options._propKeys = [];\n  var isRoot = !vm.$parent;\n  // root instance props should be converted\n  if (!isRoot) {\n    toggleObserving(false);\n  }\n  var loop = function ( key ) {\n    keys.push(key);\n    var value = validateProp(key, propsOptions, propsData, vm);\n    /* istanbul ignore else */\n    if (true) {\n      var hyphenatedKey = hyphenate(key);\n      if (isReservedAttribute(hyphenatedKey) ||\n          config.isReservedAttr(hyphenatedKey)) {\n        warn(\n          (\"\\\"\" + hyphenatedKey + \"\\\" is a reserved attribute and cannot be used as component prop.\"),\n          vm\n        );\n      }\n      defineReactive$$1(props, key, value, function () {\n        if (!isRoot && !isUpdatingChildComponent) {\n          warn(\n            \"Avoid mutating a prop directly since the value will be \" +\n            \"overwritten whenever the parent component re-renders. \" +\n            \"Instead, use a data or computed property based on the prop's \" +\n            \"value. Prop being mutated: \\\"\" + key + \"\\\"\",\n            vm\n          );\n        }\n      });\n    } else {}\n    // static props are already proxied on the component's prototype\n    // during Vue.extend(). We only need to proxy props defined at\n    // instantiation here.\n    if (!(key in vm)) {\n      proxy(vm, \"_props\", key);\n    }\n  };\n\n  for (var key in propsOptions) loop( key );\n  toggleObserving(true);\n}\n\nfunction initData (vm) {\n  var data = vm.$options.data;\n  data = vm._data = typeof data === 'function'\n    ? getData(data, vm)\n    : data || {};\n  if (!isPlainObject(data)) {\n    data = {};\n     true && warn(\n      'data functions should return an object:\\n' +\n      'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',\n      vm\n    );\n  }\n  // proxy data on instance\n  var keys = Object.keys(data);\n  var props = vm.$options.props;\n  var methods = vm.$options.methods;\n  var i = keys.length;\n  while (i--) {\n    var key = keys[i];\n    if (true) {\n      if (methods && hasOwn(methods, key)) {\n        warn(\n          (\"Method \\\"\" + key + \"\\\" has already been defined as a data property.\"),\n          vm\n        );\n      }\n    }\n    if (props && hasOwn(props, key)) {\n       true && warn(\n        \"The data property \\\"\" + key + \"\\\" is already declared as a prop. \" +\n        \"Use prop default value instead.\",\n        vm\n      );\n    } else if (!isReserved(key)) {\n      proxy(vm, \"_data\", key);\n    }\n  }\n  // observe data\n  observe(data, true /* asRootData */);\n}\n\nfunction getData (data, vm) {\n  // #7573 disable dep collection when invoking data getters\n  pushTarget();\n  try {\n    return data.call(vm, vm)\n  } catch (e) {\n    handleError(e, vm, \"data()\");\n    return {}\n  } finally {\n    popTarget();\n  }\n}\n\nvar computedWatcherOptions = { lazy: true };\n\nfunction initComputed (vm, computed) {\n  // $flow-disable-line\n  var watchers = vm._computedWatchers = Object.create(null);\n  // computed properties are just getters during SSR\n  var isSSR = isServerRendering();\n\n  for (var key in computed) {\n    var userDef = computed[key];\n    var getter = typeof userDef === 'function' ? userDef : userDef.get;\n    if ( true && getter == null) {\n      warn(\n        (\"Getter is missing for computed property \\\"\" + key + \"\\\".\"),\n        vm\n      );\n    }\n\n    if (!isSSR) {\n      // create internal watcher for the computed property.\n      watchers[key] = new Watcher(\n        vm,\n        getter || noop,\n        noop,\n        computedWatcherOptions\n      );\n    }\n\n    // component-defined computed properties are already defined on the\n    // component prototype. We only need to define computed properties defined\n    // at instantiation here.\n    if (!(key in vm)) {\n      defineComputed(vm, key, userDef);\n    } else if (true) {\n      if (key in vm.$data) {\n        warn((\"The computed property \\\"\" + key + \"\\\" is already defined in data.\"), vm);\n      } else if (vm.$options.props && key in vm.$options.props) {\n        warn((\"The computed property \\\"\" + key + \"\\\" is already defined as a prop.\"), vm);\n      } else if (vm.$options.methods && key in vm.$options.methods) {\n        warn((\"The computed property \\\"\" + key + \"\\\" is already defined as a method.\"), vm);\n      }\n    }\n  }\n}\n\nfunction defineComputed (\n  target,\n  key,\n  userDef\n) {\n  var shouldCache = !isServerRendering();\n  if (typeof userDef === 'function') {\n    sharedPropertyDefinition.get = shouldCache\n      ? createComputedGetter(key)\n      : createGetterInvoker(userDef);\n    sharedPropertyDefinition.set = noop;\n  } else {\n    sharedPropertyDefinition.get = userDef.get\n      ? shouldCache && userDef.cache !== false\n        ? createComputedGetter(key)\n        : createGetterInvoker(userDef.get)\n      : noop;\n    sharedPropertyDefinition.set = userDef.set || noop;\n  }\n  if ( true &&\n      sharedPropertyDefinition.set === noop) {\n    sharedPropertyDefinition.set = function () {\n      warn(\n        (\"Computed property \\\"\" + key + \"\\\" was assigned to but it has no setter.\"),\n        this\n      );\n    };\n  }\n  Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction createComputedGetter (key) {\n  return function computedGetter () {\n    var watcher = this._computedWatchers && this._computedWatchers[key];\n    if (watcher) {\n      if (watcher.dirty) {\n        watcher.evaluate();\n      }\n      if (Dep.target) {\n        watcher.depend();\n      }\n      return watcher.value\n    }\n  }\n}\n\nfunction createGetterInvoker(fn) {\n  return function computedGetter () {\n    return fn.call(this, this)\n  }\n}\n\nfunction initMethods (vm, methods) {\n  var props = vm.$options.props;\n  for (var key in methods) {\n    if (true) {\n      if (typeof methods[key] !== 'function') {\n        warn(\n          \"Method \\\"\" + key + \"\\\" has type \\\"\" + (typeof methods[key]) + \"\\\" in the component definition. \" +\n          \"Did you reference the function correctly?\",\n          vm\n        );\n      }\n      if (props && hasOwn(props, key)) {\n        warn(\n          (\"Method \\\"\" + key + \"\\\" has already been defined as a prop.\"),\n          vm\n        );\n      }\n      if ((key in vm) && isReserved(key)) {\n        warn(\n          \"Method \\\"\" + key + \"\\\" conflicts with an existing Vue instance method. \" +\n          \"Avoid defining component methods that start with _ or $.\"\n        );\n      }\n    }\n    vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);\n  }\n}\n\nfunction initWatch (vm, watch) {\n  for (var key in watch) {\n    var handler = watch[key];\n    if (Array.isArray(handler)) {\n      for (var i = 0; i < handler.length; i++) {\n        createWatcher(vm, key, handler[i]);\n      }\n    } else {\n      createWatcher(vm, key, handler);\n    }\n  }\n}\n\nfunction createWatcher (\n  vm,\n  expOrFn,\n  handler,\n  options\n) {\n  if (isPlainObject(handler)) {\n    options = handler;\n    handler = handler.handler;\n  }\n  if (typeof handler === 'string') {\n    handler = vm[handler];\n  }\n  return vm.$watch(expOrFn, handler, options)\n}\n\nfunction stateMixin (Vue) {\n  // flow somehow has problems with directly declared definition object\n  // when using Object.defineProperty, so we have to procedurally build up\n  // the object here.\n  var dataDef = {};\n  dataDef.get = function () { return this._data };\n  var propsDef = {};\n  propsDef.get = function () { return this._props };\n  if (true) {\n    dataDef.set = function () {\n      warn(\n        'Avoid replacing instance root $data. ' +\n        'Use nested data properties instead.',\n        this\n      );\n    };\n    propsDef.set = function () {\n      warn(\"$props is readonly.\", this);\n    };\n  }\n  Object.defineProperty(Vue.prototype, '$data', dataDef);\n  Object.defineProperty(Vue.prototype, '$props', propsDef);\n\n  Vue.prototype.$set = set;\n  Vue.prototype.$delete = del;\n\n  Vue.prototype.$watch = function (\n    expOrFn,\n    cb,\n    options\n  ) {\n    var vm = this;\n    if (isPlainObject(cb)) {\n      return createWatcher(vm, expOrFn, cb, options)\n    }\n    options = options || {};\n    options.user = true;\n    var watcher = new Watcher(vm, expOrFn, cb, options);\n    if (options.immediate) {\n      var info = \"callback for immediate watcher \\\"\" + (watcher.expression) + \"\\\"\";\n      pushTarget();\n      invokeWithErrorHandling(cb, vm, [watcher.value], vm, info);\n      popTarget();\n    }\n    return function unwatchFn () {\n      watcher.teardown();\n    }\n  };\n}\n\n/*  */\n\nvar uid$3 = 0;\n\nfunction initMixin (Vue) {\n  Vue.prototype._init = function (options) {\n    var vm = this;\n    // a uid\n    vm._uid = uid$3++;\n\n    var startTag, endTag;\n    /* istanbul ignore if */\n    if ( true && config.performance && mark) {\n      startTag = \"vue-perf-start:\" + (vm._uid);\n      endTag = \"vue-perf-end:\" + (vm._uid);\n      mark(startTag);\n    }\n\n    // a flag to avoid this being observed\n    vm._isVue = true;\n    // merge options\n    if (options && options._isComponent) {\n      // optimize internal component instantiation\n      // since dynamic options merging is pretty slow, and none of the\n      // internal component options needs special treatment.\n      initInternalComponent(vm, options);\n    } else {\n      vm.$options = mergeOptions(\n        resolveConstructorOptions(vm.constructor),\n        options || {},\n        vm\n      );\n    }\n    /* istanbul ignore else */\n    if (true) {\n      initProxy(vm);\n    } else {}\n    // expose real self\n    vm._self = vm;\n    initLifecycle(vm);\n    initEvents(vm);\n    initRender(vm);\n    callHook(vm, 'beforeCreate');\n    initInjections(vm); // resolve injections before data/props\n    initState(vm);\n    initProvide(vm); // resolve provide after data/props\n    callHook(vm, 'created');\n\n    /* istanbul ignore if */\n    if ( true && config.performance && mark) {\n      vm._name = formatComponentName(vm, false);\n      mark(endTag);\n      measure((\"vue \" + (vm._name) + \" init\"), startTag, endTag);\n    }\n\n    if (vm.$options.el) {\n      vm.$mount(vm.$options.el);\n    }\n  };\n}\n\nfunction initInternalComponent (vm, options) {\n  var opts = vm.$options = Object.create(vm.constructor.options);\n  // doing this because it's faster than dynamic enumeration.\n  var parentVnode = options._parentVnode;\n  opts.parent = options.parent;\n  opts._parentVnode = parentVnode;\n\n  var vnodeComponentOptions = parentVnode.componentOptions;\n  opts.propsData = vnodeComponentOptions.propsData;\n  opts._parentListeners = vnodeComponentOptions.listeners;\n  opts._renderChildren = vnodeComponentOptions.children;\n  opts._componentTag = vnodeComponentOptions.tag;\n\n  if (options.render) {\n    opts.render = options.render;\n    opts.staticRenderFns = options.staticRenderFns;\n  }\n}\n\nfunction resolveConstructorOptions (Ctor) {\n  var options = Ctor.options;\n  if (Ctor.super) {\n    var superOptions = resolveConstructorOptions(Ctor.super);\n    var cachedSuperOptions = Ctor.superOptions;\n    if (superOptions !== cachedSuperOptions) {\n      // super option changed,\n      // need to resolve new options.\n      Ctor.superOptions = superOptions;\n      // check if there are any late-modified/attached options (#4976)\n      var modifiedOptions = resolveModifiedOptions(Ctor);\n      // update base extend options\n      if (modifiedOptions) {\n        extend(Ctor.extendOptions, modifiedOptions);\n      }\n      options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\n      if (options.name) {\n        options.components[options.name] = Ctor;\n      }\n    }\n  }\n  return options\n}\n\nfunction resolveModifiedOptions (Ctor) {\n  var modified;\n  var latest = Ctor.options;\n  var sealed = Ctor.sealedOptions;\n  for (var key in latest) {\n    if (latest[key] !== sealed[key]) {\n      if (!modified) { modified = {}; }\n      modified[key] = latest[key];\n    }\n  }\n  return modified\n}\n\nfunction Vue (options) {\n  if ( true &&\n    !(this instanceof Vue)\n  ) {\n    warn('Vue is a constructor and should be called with the `new` keyword');\n  }\n  this._init(options);\n}\n\ninitMixin(Vue);\nstateMixin(Vue);\neventsMixin(Vue);\nlifecycleMixin(Vue);\nrenderMixin(Vue);\n\n/*  */\n\nfunction initUse (Vue) {\n  Vue.use = function (plugin) {\n    var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));\n    if (installedPlugins.indexOf(plugin) > -1) {\n      return this\n    }\n\n    // additional parameters\n    var args = toArray(arguments, 1);\n    args.unshift(this);\n    if (typeof plugin.install === 'function') {\n      plugin.install.apply(plugin, args);\n    } else if (typeof plugin === 'function') {\n      plugin.apply(null, args);\n    }\n    installedPlugins.push(plugin);\n    return this\n  };\n}\n\n/*  */\n\nfunction initMixin$1 (Vue) {\n  Vue.mixin = function (mixin) {\n    this.options = mergeOptions(this.options, mixin);\n    return this\n  };\n}\n\n/*  */\n\nfunction initExtend (Vue) {\n  /**\n   * Each instance constructor, including Vue, has a unique\n   * cid. This enables us to create wrapped \"child\n   * constructors\" for prototypal inheritance and cache them.\n   */\n  Vue.cid = 0;\n  var cid = 1;\n\n  /**\n   * Class inheritance\n   */\n  Vue.extend = function (extendOptions) {\n    extendOptions = extendOptions || {};\n    var Super = this;\n    var SuperId = Super.cid;\n    var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\n    if (cachedCtors[SuperId]) {\n      return cachedCtors[SuperId]\n    }\n\n    var name = extendOptions.name || Super.options.name;\n    if ( true && name) {\n      validateComponentName(name);\n    }\n\n    var Sub = function VueComponent (options) {\n      this._init(options);\n    };\n    Sub.prototype = Object.create(Super.prototype);\n    Sub.prototype.constructor = Sub;\n    Sub.cid = cid++;\n    Sub.options = mergeOptions(\n      Super.options,\n      extendOptions\n    );\n    Sub['super'] = Super;\n\n    // For props and computed properties, we define the proxy getters on\n    // the Vue instances at extension time, on the extended prototype. This\n    // avoids Object.defineProperty calls for each instance created.\n    if (Sub.options.props) {\n      initProps$1(Sub);\n    }\n    if (Sub.options.computed) {\n      initComputed$1(Sub);\n    }\n\n    // allow further extension/mixin/plugin usage\n    Sub.extend = Super.extend;\n    Sub.mixin = Super.mixin;\n    Sub.use = Super.use;\n\n    // create asset registers, so extended classes\n    // can have their private assets too.\n    ASSET_TYPES.forEach(function (type) {\n      Sub[type] = Super[type];\n    });\n    // enable recursive self-lookup\n    if (name) {\n      Sub.options.components[name] = Sub;\n    }\n\n    // keep a reference to the super options at extension time.\n    // later at instantiation we can check if Super's options have\n    // been updated.\n    Sub.superOptions = Super.options;\n    Sub.extendOptions = extendOptions;\n    Sub.sealedOptions = extend({}, Sub.options);\n\n    // cache constructor\n    cachedCtors[SuperId] = Sub;\n    return Sub\n  };\n}\n\nfunction initProps$1 (Comp) {\n  var props = Comp.options.props;\n  for (var key in props) {\n    proxy(Comp.prototype, \"_props\", key);\n  }\n}\n\nfunction initComputed$1 (Comp) {\n  var computed = Comp.options.computed;\n  for (var key in computed) {\n    defineComputed(Comp.prototype, key, computed[key]);\n  }\n}\n\n/*  */\n\nfunction initAssetRegisters (Vue) {\n  /**\n   * Create asset registration methods.\n   */\n  ASSET_TYPES.forEach(function (type) {\n    Vue[type] = function (\n      id,\n      definition\n    ) {\n      if (!definition) {\n        return this.options[type + 's'][id]\n      } else {\n        /* istanbul ignore if */\n        if ( true && type === 'component') {\n          validateComponentName(id);\n        }\n        if (type === 'component' && isPlainObject(definition)) {\n          definition.name = definition.name || id;\n          definition = this.options._base.extend(definition);\n        }\n        if (type === 'directive' && typeof definition === 'function') {\n          definition = { bind: definition, update: definition };\n        }\n        this.options[type + 's'][id] = definition;\n        return definition\n      }\n    };\n  });\n}\n\n/*  */\n\n\n\n\n\nfunction getComponentName (opts) {\n  return opts && (opts.Ctor.options.name || opts.tag)\n}\n\nfunction matches (pattern, name) {\n  if (Array.isArray(pattern)) {\n    return pattern.indexOf(name) > -1\n  } else if (typeof pattern === 'string') {\n    return pattern.split(',').indexOf(name) > -1\n  } else if (isRegExp(pattern)) {\n    return pattern.test(name)\n  }\n  /* istanbul ignore next */\n  return false\n}\n\nfunction pruneCache (keepAliveInstance, filter) {\n  var cache = keepAliveInstance.cache;\n  var keys = keepAliveInstance.keys;\n  var _vnode = keepAliveInstance._vnode;\n  for (var key in cache) {\n    var entry = cache[key];\n    if (entry) {\n      var name = entry.name;\n      if (name && !filter(name)) {\n        pruneCacheEntry(cache, key, keys, _vnode);\n      }\n    }\n  }\n}\n\nfunction pruneCacheEntry (\n  cache,\n  key,\n  keys,\n  current\n) {\n  var entry = cache[key];\n  if (entry && (!current || entry.tag !== current.tag)) {\n    entry.componentInstance.$destroy();\n  }\n  cache[key] = null;\n  remove(keys, key);\n}\n\nvar patternTypes = [String, RegExp, Array];\n\nvar KeepAlive = {\n  name: 'keep-alive',\n  abstract: true,\n\n  props: {\n    include: patternTypes,\n    exclude: patternTypes,\n    max: [String, Number]\n  },\n\n  methods: {\n    cacheVNode: function cacheVNode() {\n      var ref = this;\n      var cache = ref.cache;\n      var keys = ref.keys;\n      var vnodeToCache = ref.vnodeToCache;\n      var keyToCache = ref.keyToCache;\n      if (vnodeToCache) {\n        var tag = vnodeToCache.tag;\n        var componentInstance = vnodeToCache.componentInstance;\n        var componentOptions = vnodeToCache.componentOptions;\n        cache[keyToCache] = {\n          name: getComponentName(componentOptions),\n          tag: tag,\n          componentInstance: componentInstance,\n        };\n        keys.push(keyToCache);\n        // prune oldest entry\n        if (this.max && keys.length > parseInt(this.max)) {\n          pruneCacheEntry(cache, keys[0], keys, this._vnode);\n        }\n        this.vnodeToCache = null;\n      }\n    }\n  },\n\n  created: function created () {\n    this.cache = Object.create(null);\n    this.keys = [];\n  },\n\n  destroyed: function destroyed () {\n    for (var key in this.cache) {\n      pruneCacheEntry(this.cache, key, this.keys);\n    }\n  },\n\n  mounted: function mounted () {\n    var this$1 = this;\n\n    this.cacheVNode();\n    this.$watch('include', function (val) {\n      pruneCache(this$1, function (name) { return matches(val, name); });\n    });\n    this.$watch('exclude', function (val) {\n      pruneCache(this$1, function (name) { return !matches(val, name); });\n    });\n  },\n\n  updated: function updated () {\n    this.cacheVNode();\n  },\n\n  render: function render () {\n    var slot = this.$slots.default;\n    var vnode = getFirstComponentChild(slot);\n    var componentOptions = vnode && vnode.componentOptions;\n    if (componentOptions) {\n      // check pattern\n      var name = getComponentName(componentOptions);\n      var ref = this;\n      var include = ref.include;\n      var exclude = ref.exclude;\n      if (\n        // not included\n        (include && (!name || !matches(include, name))) ||\n        // excluded\n        (exclude && name && matches(exclude, name))\n      ) {\n        return vnode\n      }\n\n      var ref$1 = this;\n      var cache = ref$1.cache;\n      var keys = ref$1.keys;\n      var key = vnode.key == null\n        // same constructor may get registered as different local components\n        // so cid alone is not enough (#3269)\n        ? componentOptions.Ctor.cid + (componentOptions.tag ? (\"::\" + (componentOptions.tag)) : '')\n        : vnode.key;\n      if (cache[key]) {\n        vnode.componentInstance = cache[key].componentInstance;\n        // make current key freshest\n        remove(keys, key);\n        keys.push(key);\n      } else {\n        // delay setting the cache until update\n        this.vnodeToCache = vnode;\n        this.keyToCache = key;\n      }\n\n      vnode.data.keepAlive = true;\n    }\n    return vnode || (slot && slot[0])\n  }\n};\n\nvar builtInComponents = {\n  KeepAlive: KeepAlive\n};\n\n/*  */\n\nfunction initGlobalAPI (Vue) {\n  // config\n  var configDef = {};\n  configDef.get = function () { return config; };\n  if (true) {\n    configDef.set = function () {\n      warn(\n        'Do not replace the Vue.config object, set individual fields instead.'\n      );\n    };\n  }\n  Object.defineProperty(Vue, 'config', configDef);\n\n  // exposed util methods.\n  // NOTE: these are not considered part of the public API - avoid relying on\n  // them unless you are aware of the risk.\n  Vue.util = {\n    warn: warn,\n    extend: extend,\n    mergeOptions: mergeOptions,\n    defineReactive: defineReactive$$1\n  };\n\n  Vue.set = set;\n  Vue.delete = del;\n  Vue.nextTick = nextTick;\n\n  // 2.6 explicit observable API\n  Vue.observable = function (obj) {\n    observe(obj);\n    return obj\n  };\n\n  Vue.options = Object.create(null);\n  ASSET_TYPES.forEach(function (type) {\n    Vue.options[type + 's'] = Object.create(null);\n  });\n\n  // this is used to identify the \"base\" constructor to extend all plain-object\n  // components with in Weex's multi-instance scenarios.\n  Vue.options._base = Vue;\n\n  extend(Vue.options.components, builtInComponents);\n\n  initUse(Vue);\n  initMixin$1(Vue);\n  initExtend(Vue);\n  initAssetRegisters(Vue);\n}\n\ninitGlobalAPI(Vue);\n\nObject.defineProperty(Vue.prototype, '$isServer', {\n  get: isServerRendering\n});\n\nObject.defineProperty(Vue.prototype, '$ssrContext', {\n  get: function get () {\n    /* istanbul ignore next */\n    return this.$vnode && this.$vnode.ssrContext\n  }\n});\n\n// expose FunctionalRenderContext for ssr runtime helper installation\nObject.defineProperty(Vue, 'FunctionalRenderContext', {\n  value: FunctionalRenderContext\n});\n\nVue.version = '2.6.14';\n\n/*  */\n\n// these are reserved for web because they are directly compiled away\n// during template compilation\nvar isReservedAttr = makeMap('style,class');\n\n// attributes that should be using props for binding\nvar acceptValue = makeMap('input,textarea,option,select,progress');\nvar mustUseProp = function (tag, type, attr) {\n  return (\n    (attr === 'value' && acceptValue(tag)) && type !== 'button' ||\n    (attr === 'selected' && tag === 'option') ||\n    (attr === 'checked' && tag === 'input') ||\n    (attr === 'muted' && tag === 'video')\n  )\n};\n\nvar isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');\n\nvar isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');\n\nvar convertEnumeratedValue = function (key, value) {\n  return isFalsyAttrValue(value) || value === 'false'\n    ? 'false'\n    // allow arbitrary string value for contenteditable\n    : key === 'contenteditable' && isValidContentEditableValue(value)\n      ? value\n      : 'true'\n};\n\nvar isBooleanAttr = makeMap(\n  'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +\n  'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +\n  'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +\n  'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +\n  'required,reversed,scoped,seamless,selected,sortable,' +\n  'truespeed,typemustmatch,visible'\n);\n\nvar xlinkNS = 'http://www.w3.org/1999/xlink';\n\nvar isXlink = function (name) {\n  return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'\n};\n\nvar getXlinkProp = function (name) {\n  return isXlink(name) ? name.slice(6, name.length) : ''\n};\n\nvar isFalsyAttrValue = function (val) {\n  return val == null || val === false\n};\n\n/*  */\n\nfunction genClassForVnode (vnode) {\n  var data = vnode.data;\n  var parentNode = vnode;\n  var childNode = vnode;\n  while (isDef(childNode.componentInstance)) {\n    childNode = childNode.componentInstance._vnode;\n    if (childNode && childNode.data) {\n      data = mergeClassData(childNode.data, data);\n    }\n  }\n  while (isDef(parentNode = parentNode.parent)) {\n    if (parentNode && parentNode.data) {\n      data = mergeClassData(data, parentNode.data);\n    }\n  }\n  return renderClass(data.staticClass, data.class)\n}\n\nfunction mergeClassData (child, parent) {\n  return {\n    staticClass: concat(child.staticClass, parent.staticClass),\n    class: isDef(child.class)\n      ? [child.class, parent.class]\n      : parent.class\n  }\n}\n\nfunction renderClass (\n  staticClass,\n  dynamicClass\n) {\n  if (isDef(staticClass) || isDef(dynamicClass)) {\n    return concat(staticClass, stringifyClass(dynamicClass))\n  }\n  /* istanbul ignore next */\n  return ''\n}\n\nfunction concat (a, b) {\n  return a ? b ? (a + ' ' + b) : a : (b || '')\n}\n\nfunction stringifyClass (value) {\n  if (Array.isArray(value)) {\n    return stringifyArray(value)\n  }\n  if (isObject(value)) {\n    return stringifyObject(value)\n  }\n  if (typeof value === 'string') {\n    return value\n  }\n  /* istanbul ignore next */\n  return ''\n}\n\nfunction stringifyArray (value) {\n  var res = '';\n  var stringified;\n  for (var i = 0, l = value.length; i < l; i++) {\n    if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {\n      if (res) { res += ' '; }\n      res += stringified;\n    }\n  }\n  return res\n}\n\nfunction stringifyObject (value) {\n  var res = '';\n  for (var key in value) {\n    if (value[key]) {\n      if (res) { res += ' '; }\n      res += key;\n    }\n  }\n  return res\n}\n\n/*  */\n\nvar namespaceMap = {\n  svg: 'http://www.w3.org/2000/svg',\n  math: 'http://www.w3.org/1998/Math/MathML'\n};\n\nvar isHTMLTag = makeMap(\n  'html,body,base,head,link,meta,style,title,' +\n  'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +\n  'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +\n  'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +\n  's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +\n  'embed,object,param,source,canvas,script,noscript,del,ins,' +\n  'caption,col,colgroup,table,thead,tbody,td,th,tr,' +\n  'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +\n  'output,progress,select,textarea,' +\n  'details,dialog,menu,menuitem,summary,' +\n  'content,element,shadow,template,blockquote,iframe,tfoot'\n);\n\n// this map is intentionally selective, only covering SVG elements that may\n// contain child elements.\nvar isSVG = makeMap(\n  'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +\n  'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +\n  'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',\n  true\n);\n\nvar isReservedTag = function (tag) {\n  return isHTMLTag(tag) || isSVG(tag)\n};\n\nfunction getTagNamespace (tag) {\n  if (isSVG(tag)) {\n    return 'svg'\n  }\n  // basic support for MathML\n  // note it doesn't support other MathML elements being component roots\n  if (tag === 'math') {\n    return 'math'\n  }\n}\n\nvar unknownElementCache = Object.create(null);\nfunction isUnknownElement (tag) {\n  /* istanbul ignore if */\n  if (!inBrowser) {\n    return true\n  }\n  if (isReservedTag(tag)) {\n    return false\n  }\n  tag = tag.toLowerCase();\n  /* istanbul ignore if */\n  if (unknownElementCache[tag] != null) {\n    return unknownElementCache[tag]\n  }\n  var el = document.createElement(tag);\n  if (tag.indexOf('-') > -1) {\n    // http://stackoverflow.com/a/28210364/1070244\n    return (unknownElementCache[tag] = (\n      el.constructor === window.HTMLUnknownElement ||\n      el.constructor === window.HTMLElement\n    ))\n  } else {\n    return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()))\n  }\n}\n\nvar isTextInputType = makeMap('text,number,password,search,email,tel,url');\n\n/*  */\n\n/**\n * Query an element selector if it's not an element already.\n */\nfunction query (el) {\n  if (typeof el === 'string') {\n    var selected = document.querySelector(el);\n    if (!selected) {\n       true && warn(\n        'Cannot find element: ' + el\n      );\n      return document.createElement('div')\n    }\n    return selected\n  } else {\n    return el\n  }\n}\n\n/*  */\n\nfunction createElement$1 (tagName, vnode) {\n  var elm = document.createElement(tagName);\n  if (tagName !== 'select') {\n    return elm\n  }\n  // false or null will remove the attribute but undefined will not\n  if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {\n    elm.setAttribute('multiple', 'multiple');\n  }\n  return elm\n}\n\nfunction createElementNS (namespace, tagName) {\n  return document.createElementNS(namespaceMap[namespace], tagName)\n}\n\nfunction createTextNode (text) {\n  return document.createTextNode(text)\n}\n\nfunction createComment (text) {\n  return document.createComment(text)\n}\n\nfunction insertBefore (parentNode, newNode, referenceNode) {\n  parentNode.insertBefore(newNode, referenceNode);\n}\n\nfunction removeChild (node, child) {\n  node.removeChild(child);\n}\n\nfunction appendChild (node, child) {\n  node.appendChild(child);\n}\n\nfunction parentNode (node) {\n  return node.parentNode\n}\n\nfunction nextSibling (node) {\n  return node.nextSibling\n}\n\nfunction tagName (node) {\n  return node.tagName\n}\n\nfunction setTextContent (node, text) {\n  node.textContent = text;\n}\n\nfunction setStyleScope (node, scopeId) {\n  node.setAttribute(scopeId, '');\n}\n\nvar nodeOps = /*#__PURE__*/Object.freeze({\n  createElement: createElement$1,\n  createElementNS: createElementNS,\n  createTextNode: createTextNode,\n  createComment: createComment,\n  insertBefore: insertBefore,\n  removeChild: removeChild,\n  appendChild: appendChild,\n  parentNode: parentNode,\n  nextSibling: nextSibling,\n  tagName: tagName,\n  setTextContent: setTextContent,\n  setStyleScope: setStyleScope\n});\n\n/*  */\n\nvar ref = {\n  create: function create (_, vnode) {\n    registerRef(vnode);\n  },\n  update: function update (oldVnode, vnode) {\n    if (oldVnode.data.ref !== vnode.data.ref) {\n      registerRef(oldVnode, true);\n      registerRef(vnode);\n    }\n  },\n  destroy: function destroy (vnode) {\n    registerRef(vnode, true);\n  }\n};\n\nfunction registerRef (vnode, isRemoval) {\n  var key = vnode.data.ref;\n  if (!isDef(key)) { return }\n\n  var vm = vnode.context;\n  var ref = vnode.componentInstance || vnode.elm;\n  var refs = vm.$refs;\n  if (isRemoval) {\n    if (Array.isArray(refs[key])) {\n      remove(refs[key], ref);\n    } else if (refs[key] === ref) {\n      refs[key] = undefined;\n    }\n  } else {\n    if (vnode.data.refInFor) {\n      if (!Array.isArray(refs[key])) {\n        refs[key] = [ref];\n      } else if (refs[key].indexOf(ref) < 0) {\n        // $flow-disable-line\n        refs[key].push(ref);\n      }\n    } else {\n      refs[key] = ref;\n    }\n  }\n}\n\n/**\n * Virtual DOM patching algorithm based on Snabbdom by\n * Simon Friis Vindum (@paldepind)\n * Licensed under the MIT License\n * https://github.com/paldepind/snabbdom/blob/master/LICENSE\n *\n * modified by Evan You (@yyx990803)\n *\n * Not type-checking this because this file is perf-critical and the cost\n * of making flow understand it is not worth it.\n */\n\nvar emptyNode = new VNode('', {}, []);\n\nvar hooks = ['create', 'activate', 'update', 'remove', 'destroy'];\n\nfunction sameVnode (a, b) {\n  return (\n    a.key === b.key &&\n    a.asyncFactory === b.asyncFactory && (\n      (\n        a.tag === b.tag &&\n        a.isComment === b.isComment &&\n        isDef(a.data) === isDef(b.data) &&\n        sameInputType(a, b)\n      ) || (\n        isTrue(a.isAsyncPlaceholder) &&\n        isUndef(b.asyncFactory.error)\n      )\n    )\n  )\n}\n\nfunction sameInputType (a, b) {\n  if (a.tag !== 'input') { return true }\n  var i;\n  var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;\n  var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;\n  return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB)\n}\n\nfunction createKeyToOldIdx (children, beginIdx, endIdx) {\n  var i, key;\n  var map = {};\n  for (i = beginIdx; i <= endIdx; ++i) {\n    key = children[i].key;\n    if (isDef(key)) { map[key] = i; }\n  }\n  return map\n}\n\nfunction createPatchFunction (backend) {\n  var i, j;\n  var cbs = {};\n\n  var modules = backend.modules;\n  var nodeOps = backend.nodeOps;\n\n  for (i = 0; i < hooks.length; ++i) {\n    cbs[hooks[i]] = [];\n    for (j = 0; j < modules.length; ++j) {\n      if (isDef(modules[j][hooks[i]])) {\n        cbs[hooks[i]].push(modules[j][hooks[i]]);\n      }\n    }\n  }\n\n  function emptyNodeAt (elm) {\n    return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)\n  }\n\n  function createRmCb (childElm, listeners) {\n    function remove$$1 () {\n      if (--remove$$1.listeners === 0) {\n        removeNode(childElm);\n      }\n    }\n    remove$$1.listeners = listeners;\n    return remove$$1\n  }\n\n  function removeNode (el) {\n    var parent = nodeOps.parentNode(el);\n    // element may have already been removed due to v-html / v-text\n    if (isDef(parent)) {\n      nodeOps.removeChild(parent, el);\n    }\n  }\n\n  function isUnknownElement$$1 (vnode, inVPre) {\n    return (\n      !inVPre &&\n      !vnode.ns &&\n      !(\n        config.ignoredElements.length &&\n        config.ignoredElements.some(function (ignore) {\n          return isRegExp(ignore)\n            ? ignore.test(vnode.tag)\n            : ignore === vnode.tag\n        })\n      ) &&\n      config.isUnknownElement(vnode.tag)\n    )\n  }\n\n  var creatingElmInVPre = 0;\n\n  function createElm (\n    vnode,\n    insertedVnodeQueue,\n    parentElm,\n    refElm,\n    nested,\n    ownerArray,\n    index\n  ) {\n    if (isDef(vnode.elm) && isDef(ownerArray)) {\n      // This vnode was used in a previous render!\n      // now it's used as a new node, overwriting its elm would cause\n      // potential patch errors down the road when it's used as an insertion\n      // reference node. Instead, we clone the node on-demand before creating\n      // associated DOM element for it.\n      vnode = ownerArray[index] = cloneVNode(vnode);\n    }\n\n    vnode.isRootInsert = !nested; // for transition enter check\n    if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {\n      return\n    }\n\n    var data = vnode.data;\n    var children = vnode.children;\n    var tag = vnode.tag;\n    if (isDef(tag)) {\n      if (true) {\n        if (data && data.pre) {\n          creatingElmInVPre++;\n        }\n        if (isUnknownElement$$1(vnode, creatingElmInVPre)) {\n          warn(\n            'Unknown custom element: <' + tag + '> - did you ' +\n            'register the component correctly? For recursive components, ' +\n            'make sure to provide the \"name\" option.',\n            vnode.context\n          );\n        }\n      }\n\n      vnode.elm = vnode.ns\n        ? nodeOps.createElementNS(vnode.ns, tag)\n        : nodeOps.createElement(tag, vnode);\n      setScope(vnode);\n\n      /* istanbul ignore if */\n      {\n        createChildren(vnode, children, insertedVnodeQueue);\n        if (isDef(data)) {\n          invokeCreateHooks(vnode, insertedVnodeQueue);\n        }\n        insert(parentElm, vnode.elm, refElm);\n      }\n\n      if ( true && data && data.pre) {\n        creatingElmInVPre--;\n      }\n    } else if (isTrue(vnode.isComment)) {\n      vnode.elm = nodeOps.createComment(vnode.text);\n      insert(parentElm, vnode.elm, refElm);\n    } else {\n      vnode.elm = nodeOps.createTextNode(vnode.text);\n      insert(parentElm, vnode.elm, refElm);\n    }\n  }\n\n  function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n    var i = vnode.data;\n    if (isDef(i)) {\n      var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;\n      if (isDef(i = i.hook) && isDef(i = i.init)) {\n        i(vnode, false /* hydrating */);\n      }\n      // after calling the init hook, if the vnode is a child component\n      // it should've created a child instance and mounted it. the child\n      // component also has set the placeholder vnode's elm.\n      // in that case we can just return the element and be done.\n      if (isDef(vnode.componentInstance)) {\n        initComponent(vnode, insertedVnodeQueue);\n        insert(parentElm, vnode.elm, refElm);\n        if (isTrue(isReactivated)) {\n          reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);\n        }\n        return true\n      }\n    }\n  }\n\n  function initComponent (vnode, insertedVnodeQueue) {\n    if (isDef(vnode.data.pendingInsert)) {\n      insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);\n      vnode.data.pendingInsert = null;\n    }\n    vnode.elm = vnode.componentInstance.$el;\n    if (isPatchable(vnode)) {\n      invokeCreateHooks(vnode, insertedVnodeQueue);\n      setScope(vnode);\n    } else {\n      // empty component root.\n      // skip all element-related modules except for ref (#3455)\n      registerRef(vnode);\n      // make sure to invoke the insert hook\n      insertedVnodeQueue.push(vnode);\n    }\n  }\n\n  function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n    var i;\n    // hack for #4339: a reactivated component with inner transition\n    // does not trigger because the inner node's created hooks are not called\n    // again. It's not ideal to involve module-specific logic in here but\n    // there doesn't seem to be a better way to do it.\n    var innerNode = vnode;\n    while (innerNode.componentInstance) {\n      innerNode = innerNode.componentInstance._vnode;\n      if (isDef(i = innerNode.data) && isDef(i = i.transition)) {\n        for (i = 0; i < cbs.activate.length; ++i) {\n          cbs.activate[i](emptyNode, innerNode);\n        }\n        insertedVnodeQueue.push(innerNode);\n        break\n      }\n    }\n    // unlike a newly created component,\n    // a reactivated keep-alive component doesn't insert itself\n    insert(parentElm, vnode.elm, refElm);\n  }\n\n  function insert (parent, elm, ref$$1) {\n    if (isDef(parent)) {\n      if (isDef(ref$$1)) {\n        if (nodeOps.parentNode(ref$$1) === parent) {\n          nodeOps.insertBefore(parent, elm, ref$$1);\n        }\n      } else {\n        nodeOps.appendChild(parent, elm);\n      }\n    }\n  }\n\n  function createChildren (vnode, children, insertedVnodeQueue) {\n    if (Array.isArray(children)) {\n      if (true) {\n        checkDuplicateKeys(children);\n      }\n      for (var i = 0; i < children.length; ++i) {\n        createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);\n      }\n    } else if (isPrimitive(vnode.text)) {\n      nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));\n    }\n  }\n\n  function isPatchable (vnode) {\n    while (vnode.componentInstance) {\n      vnode = vnode.componentInstance._vnode;\n    }\n    return isDef(vnode.tag)\n  }\n\n  function invokeCreateHooks (vnode, insertedVnodeQueue) {\n    for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n      cbs.create[i$1](emptyNode, vnode);\n    }\n    i = vnode.data.hook; // Reuse variable\n    if (isDef(i)) {\n      if (isDef(i.create)) { i.create(emptyNode, vnode); }\n      if (isDef(i.insert)) { insertedVnodeQueue.push(vnode); }\n    }\n  }\n\n  // set scope id attribute for scoped CSS.\n  // this is implemented as a special case to avoid the overhead\n  // of going through the normal attribute patching process.\n  function setScope (vnode) {\n    var i;\n    if (isDef(i = vnode.fnScopeId)) {\n      nodeOps.setStyleScope(vnode.elm, i);\n    } else {\n      var ancestor = vnode;\n      while (ancestor) {\n        if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {\n          nodeOps.setStyleScope(vnode.elm, i);\n        }\n        ancestor = ancestor.parent;\n      }\n    }\n    // for slot content they should also get the scopeId from the host instance.\n    if (isDef(i = activeInstance) &&\n      i !== vnode.context &&\n      i !== vnode.fnContext &&\n      isDef(i = i.$options._scopeId)\n    ) {\n      nodeOps.setStyleScope(vnode.elm, i);\n    }\n  }\n\n  function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {\n    for (; startIdx <= endIdx; ++startIdx) {\n      createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);\n    }\n  }\n\n  function invokeDestroyHook (vnode) {\n    var i, j;\n    var data = vnode.data;\n    if (isDef(data)) {\n      if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); }\n      for (i = 0; i < cbs.destroy.length; ++i) { cbs.destroy[i](vnode); }\n    }\n    if (isDef(i = vnode.children)) {\n      for (j = 0; j < vnode.children.length; ++j) {\n        invokeDestroyHook(vnode.children[j]);\n      }\n    }\n  }\n\n  function removeVnodes (vnodes, startIdx, endIdx) {\n    for (; startIdx <= endIdx; ++startIdx) {\n      var ch = vnodes[startIdx];\n      if (isDef(ch)) {\n        if (isDef(ch.tag)) {\n          removeAndInvokeRemoveHook(ch);\n          invokeDestroyHook(ch);\n        } else { // Text node\n          removeNode(ch.elm);\n        }\n      }\n    }\n  }\n\n  function removeAndInvokeRemoveHook (vnode, rm) {\n    if (isDef(rm) || isDef(vnode.data)) {\n      var i;\n      var listeners = cbs.remove.length + 1;\n      if (isDef(rm)) {\n        // we have a recursively passed down rm callback\n        // increase the listeners count\n        rm.listeners += listeners;\n      } else {\n        // directly removing\n        rm = createRmCb(vnode.elm, listeners);\n      }\n      // recursively invoke hooks on child component root node\n      if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) {\n        removeAndInvokeRemoveHook(i, rm);\n      }\n      for (i = 0; i < cbs.remove.length; ++i) {\n        cbs.remove[i](vnode, rm);\n      }\n      if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {\n        i(vnode, rm);\n      } else {\n        rm();\n      }\n    } else {\n      removeNode(vnode.elm);\n    }\n  }\n\n  function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {\n    var oldStartIdx = 0;\n    var newStartIdx = 0;\n    var oldEndIdx = oldCh.length - 1;\n    var oldStartVnode = oldCh[0];\n    var oldEndVnode = oldCh[oldEndIdx];\n    var newEndIdx = newCh.length - 1;\n    var newStartVnode = newCh[0];\n    var newEndVnode = newCh[newEndIdx];\n    var oldKeyToIdx, idxInOld, vnodeToMove, refElm;\n\n    // removeOnly is a special flag used only by <transition-group>\n    // to ensure removed elements stay in correct relative positions\n    // during leaving transitions\n    var canMove = !removeOnly;\n\n    if (true) {\n      checkDuplicateKeys(newCh);\n    }\n\n    while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\n      if (isUndef(oldStartVnode)) {\n        oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left\n      } else if (isUndef(oldEndVnode)) {\n        oldEndVnode = oldCh[--oldEndIdx];\n      } else if (sameVnode(oldStartVnode, newStartVnode)) {\n        patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n        oldStartVnode = oldCh[++oldStartIdx];\n        newStartVnode = newCh[++newStartIdx];\n      } else if (sameVnode(oldEndVnode, newEndVnode)) {\n        patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n        oldEndVnode = oldCh[--oldEndIdx];\n        newEndVnode = newCh[--newEndIdx];\n      } else if (sameVnode(oldStartVnode, newEndVnode)) { // Vnode moved right\n        patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n        canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));\n        oldStartVnode = oldCh[++oldStartIdx];\n        newEndVnode = newCh[--newEndIdx];\n      } else if (sameVnode(oldEndVnode, newStartVnode)) { // Vnode moved left\n        patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n        canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\n        oldEndVnode = oldCh[--oldEndIdx];\n        newStartVnode = newCh[++newStartIdx];\n      } else {\n        if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }\n        idxInOld = isDef(newStartVnode.key)\n          ? oldKeyToIdx[newStartVnode.key]\n          : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);\n        if (isUndef(idxInOld)) { // New element\n          createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n        } else {\n          vnodeToMove = oldCh[idxInOld];\n          if (sameVnode(vnodeToMove, newStartVnode)) {\n            patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n            oldCh[idxInOld] = undefined;\n            canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);\n          } else {\n            // same key but different element. treat as new element\n            createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n          }\n        }\n        newStartVnode = newCh[++newStartIdx];\n      }\n    }\n    if (oldStartIdx > oldEndIdx) {\n      refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;\n      addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\n    } else if (newStartIdx > newEndIdx) {\n      removeVnodes(oldCh, oldStartIdx, oldEndIdx);\n    }\n  }\n\n  function checkDuplicateKeys (children) {\n    var seenKeys = {};\n    for (var i = 0; i < children.length; i++) {\n      var vnode = children[i];\n      var key = vnode.key;\n      if (isDef(key)) {\n        if (seenKeys[key]) {\n          warn(\n            (\"Duplicate keys detected: '\" + key + \"'. This may cause an update error.\"),\n            vnode.context\n          );\n        } else {\n          seenKeys[key] = true;\n        }\n      }\n    }\n  }\n\n  function findIdxInOld (node, oldCh, start, end) {\n    for (var i = start; i < end; i++) {\n      var c = oldCh[i];\n      if (isDef(c) && sameVnode(node, c)) { return i }\n    }\n  }\n\n  function patchVnode (\n    oldVnode,\n    vnode,\n    insertedVnodeQueue,\n    ownerArray,\n    index,\n    removeOnly\n  ) {\n    if (oldVnode === vnode) {\n      return\n    }\n\n    if (isDef(vnode.elm) && isDef(ownerArray)) {\n      // clone reused vnode\n      vnode = ownerArray[index] = cloneVNode(vnode);\n    }\n\n    var elm = vnode.elm = oldVnode.elm;\n\n    if (isTrue(oldVnode.isAsyncPlaceholder)) {\n      if (isDef(vnode.asyncFactory.resolved)) {\n        hydrate(oldVnode.elm, vnode, insertedVnodeQueue);\n      } else {\n        vnode.isAsyncPlaceholder = true;\n      }\n      return\n    }\n\n    // reuse element for static trees.\n    // note we only do this if the vnode is cloned -\n    // if the new node is not cloned it means the render functions have been\n    // reset by the hot-reload-api and we need to do a proper re-render.\n    if (isTrue(vnode.isStatic) &&\n      isTrue(oldVnode.isStatic) &&\n      vnode.key === oldVnode.key &&\n      (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))\n    ) {\n      vnode.componentInstance = oldVnode.componentInstance;\n      return\n    }\n\n    var i;\n    var data = vnode.data;\n    if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {\n      i(oldVnode, vnode);\n    }\n\n    var oldCh = oldVnode.children;\n    var ch = vnode.children;\n    if (isDef(data) && isPatchable(vnode)) {\n      for (i = 0; i < cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }\n      if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }\n    }\n    if (isUndef(vnode.text)) {\n      if (isDef(oldCh) && isDef(ch)) {\n        if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); }\n      } else if (isDef(ch)) {\n        if (true) {\n          checkDuplicateKeys(ch);\n        }\n        if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); }\n        addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\n      } else if (isDef(oldCh)) {\n        removeVnodes(oldCh, 0, oldCh.length - 1);\n      } else if (isDef(oldVnode.text)) {\n        nodeOps.setTextContent(elm, '');\n      }\n    } else if (oldVnode.text !== vnode.text) {\n      nodeOps.setTextContent(elm, vnode.text);\n    }\n    if (isDef(data)) {\n      if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }\n    }\n  }\n\n  function invokeInsertHook (vnode, queue, initial) {\n    // delay insert hooks for component root nodes, invoke them after the\n    // element is really inserted\n    if (isTrue(initial) && isDef(vnode.parent)) {\n      vnode.parent.data.pendingInsert = queue;\n    } else {\n      for (var i = 0; i < queue.length; ++i) {\n        queue[i].data.hook.insert(queue[i]);\n      }\n    }\n  }\n\n  var hydrationBailed = false;\n  // list of modules that can skip create hook during hydration because they\n  // are already rendered on the client or has no need for initialization\n  // Note: style is excluded because it relies on initial clone for future\n  // deep updates (#7063).\n  var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');\n\n  // Note: this is a browser-only function so we can assume elms are DOM nodes.\n  function hydrate (elm, vnode, insertedVnodeQueue, inVPre) {\n    var i;\n    var tag = vnode.tag;\n    var data = vnode.data;\n    var children = vnode.children;\n    inVPre = inVPre || (data && data.pre);\n    vnode.elm = elm;\n\n    if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {\n      vnode.isAsyncPlaceholder = true;\n      return true\n    }\n    // assert node match\n    if (true) {\n      if (!assertNodeMatch(elm, vnode, inVPre)) {\n        return false\n      }\n    }\n    if (isDef(data)) {\n      if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true /* hydrating */); }\n      if (isDef(i = vnode.componentInstance)) {\n        // child component. it should have hydrated its own tree.\n        initComponent(vnode, insertedVnodeQueue);\n        return true\n      }\n    }\n    if (isDef(tag)) {\n      if (isDef(children)) {\n        // empty element, allow client to pick up and populate children\n        if (!elm.hasChildNodes()) {\n          createChildren(vnode, children, insertedVnodeQueue);\n        } else {\n          // v-html and domProps: innerHTML\n          if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) {\n            if (i !== elm.innerHTML) {\n              /* istanbul ignore if */\n              if ( true &&\n                typeof console !== 'undefined' &&\n                !hydrationBailed\n              ) {\n                hydrationBailed = true;\n                console.warn('Parent: ', elm);\n                console.warn('server innerHTML: ', i);\n                console.warn('client innerHTML: ', elm.innerHTML);\n              }\n              return false\n            }\n          } else {\n            // iterate and compare children lists\n            var childrenMatch = true;\n            var childNode = elm.firstChild;\n            for (var i$1 = 0; i$1 < children.length; i$1++) {\n              if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue, inVPre)) {\n                childrenMatch = false;\n                break\n              }\n              childNode = childNode.nextSibling;\n            }\n            // if childNode is not null, it means the actual childNodes list is\n            // longer than the virtual children list.\n            if (!childrenMatch || childNode) {\n              /* istanbul ignore if */\n              if ( true &&\n                typeof console !== 'undefined' &&\n                !hydrationBailed\n              ) {\n                hydrationBailed = true;\n                console.warn('Parent: ', elm);\n                console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);\n              }\n              return false\n            }\n          }\n        }\n      }\n      if (isDef(data)) {\n        var fullInvoke = false;\n        for (var key in data) {\n          if (!isRenderedModule(key)) {\n            fullInvoke = true;\n            invokeCreateHooks(vnode, insertedVnodeQueue);\n            break\n          }\n        }\n        if (!fullInvoke && data['class']) {\n          // ensure collecting deps for deep class bindings for future updates\n          traverse(data['class']);\n        }\n      }\n    } else if (elm.data !== vnode.text) {\n      elm.data = vnode.text;\n    }\n    return true\n  }\n\n  function assertNodeMatch (node, vnode, inVPre) {\n    if (isDef(vnode.tag)) {\n      return vnode.tag.indexOf('vue-component') === 0 || (\n        !isUnknownElement$$1(vnode, inVPre) &&\n        vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())\n      )\n    } else {\n      return node.nodeType === (vnode.isComment ? 8 : 3)\n    }\n  }\n\n  return function patch (oldVnode, vnode, hydrating, removeOnly) {\n    if (isUndef(vnode)) {\n      if (isDef(oldVnode)) { invokeDestroyHook(oldVnode); }\n      return\n    }\n\n    var isInitialPatch = false;\n    var insertedVnodeQueue = [];\n\n    if (isUndef(oldVnode)) {\n      // empty mount (likely as component), create new root element\n      isInitialPatch = true;\n      createElm(vnode, insertedVnodeQueue);\n    } else {\n      var isRealElement = isDef(oldVnode.nodeType);\n      if (!isRealElement && sameVnode(oldVnode, vnode)) {\n        // patch existing root node\n        patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);\n      } else {\n        if (isRealElement) {\n          // mounting to a real element\n          // check if this is server-rendered content and if we can perform\n          // a successful hydration.\n          if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {\n            oldVnode.removeAttribute(SSR_ATTR);\n            hydrating = true;\n          }\n          if (isTrue(hydrating)) {\n            if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {\n              invokeInsertHook(vnode, insertedVnodeQueue, true);\n              return oldVnode\n            } else if (true) {\n              warn(\n                'The client-side rendered virtual DOM tree is not matching ' +\n                'server-rendered content. This is likely caused by incorrect ' +\n                'HTML markup, for example nesting block-level elements inside ' +\n                '<p>, or missing <tbody>. Bailing hydration and performing ' +\n                'full client-side render.'\n              );\n            }\n          }\n          // either not server-rendered, or hydration failed.\n          // create an empty node and replace it\n          oldVnode = emptyNodeAt(oldVnode);\n        }\n\n        // replacing existing element\n        var oldElm = oldVnode.elm;\n        var parentElm = nodeOps.parentNode(oldElm);\n\n        // create new node\n        createElm(\n          vnode,\n          insertedVnodeQueue,\n          // extremely rare edge case: do not insert if old element is in a\n          // leaving transition. Only happens when combining transition +\n          // keep-alive + HOCs. (#4590)\n          oldElm._leaveCb ? null : parentElm,\n          nodeOps.nextSibling(oldElm)\n        );\n\n        // update parent placeholder node element, recursively\n        if (isDef(vnode.parent)) {\n          var ancestor = vnode.parent;\n          var patchable = isPatchable(vnode);\n          while (ancestor) {\n            for (var i = 0; i < cbs.destroy.length; ++i) {\n              cbs.destroy[i](ancestor);\n            }\n            ancestor.elm = vnode.elm;\n            if (patchable) {\n              for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n                cbs.create[i$1](emptyNode, ancestor);\n              }\n              // #6513\n              // invoke insert hooks that may have been merged by create hooks.\n              // e.g. for directives that uses the \"inserted\" hook.\n              var insert = ancestor.data.hook.insert;\n              if (insert.merged) {\n                // start at index 1 to avoid re-invoking component mounted hook\n                for (var i$2 = 1; i$2 < insert.fns.length; i$2++) {\n                  insert.fns[i$2]();\n                }\n              }\n            } else {\n              registerRef(ancestor);\n            }\n            ancestor = ancestor.parent;\n          }\n        }\n\n        // destroy old node\n        if (isDef(parentElm)) {\n          removeVnodes([oldVnode], 0, 0);\n        } else if (isDef(oldVnode.tag)) {\n          invokeDestroyHook(oldVnode);\n        }\n      }\n    }\n\n    invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\n    return vnode.elm\n  }\n}\n\n/*  */\n\nvar directives = {\n  create: updateDirectives,\n  update: updateDirectives,\n  destroy: function unbindDirectives (vnode) {\n    updateDirectives(vnode, emptyNode);\n  }\n};\n\nfunction updateDirectives (oldVnode, vnode) {\n  if (oldVnode.data.directives || vnode.data.directives) {\n    _update(oldVnode, vnode);\n  }\n}\n\nfunction _update (oldVnode, vnode) {\n  var isCreate = oldVnode === emptyNode;\n  var isDestroy = vnode === emptyNode;\n  var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);\n  var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);\n\n  var dirsWithInsert = [];\n  var dirsWithPostpatch = [];\n\n  var key, oldDir, dir;\n  for (key in newDirs) {\n    oldDir = oldDirs[key];\n    dir = newDirs[key];\n    if (!oldDir) {\n      // new directive, bind\n      callHook$1(dir, 'bind', vnode, oldVnode);\n      if (dir.def && dir.def.inserted) {\n        dirsWithInsert.push(dir);\n      }\n    } else {\n      // existing directive, update\n      dir.oldValue = oldDir.value;\n      dir.oldArg = oldDir.arg;\n      callHook$1(dir, 'update', vnode, oldVnode);\n      if (dir.def && dir.def.componentUpdated) {\n        dirsWithPostpatch.push(dir);\n      }\n    }\n  }\n\n  if (dirsWithInsert.length) {\n    var callInsert = function () {\n      for (var i = 0; i < dirsWithInsert.length; i++) {\n        callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);\n      }\n    };\n    if (isCreate) {\n      mergeVNodeHook(vnode, 'insert', callInsert);\n    } else {\n      callInsert();\n    }\n  }\n\n  if (dirsWithPostpatch.length) {\n    mergeVNodeHook(vnode, 'postpatch', function () {\n      for (var i = 0; i < dirsWithPostpatch.length; i++) {\n        callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\n      }\n    });\n  }\n\n  if (!isCreate) {\n    for (key in oldDirs) {\n      if (!newDirs[key]) {\n        // no longer present, unbind\n        callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\n      }\n    }\n  }\n}\n\nvar emptyModifiers = Object.create(null);\n\nfunction normalizeDirectives$1 (\n  dirs,\n  vm\n) {\n  var res = Object.create(null);\n  if (!dirs) {\n    // $flow-disable-line\n    return res\n  }\n  var i, dir;\n  for (i = 0; i < dirs.length; i++) {\n    dir = dirs[i];\n    if (!dir.modifiers) {\n      // $flow-disable-line\n      dir.modifiers = emptyModifiers;\n    }\n    res[getRawDirName(dir)] = dir;\n    dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);\n  }\n  // $flow-disable-line\n  return res\n}\n\nfunction getRawDirName (dir) {\n  return dir.rawName || ((dir.name) + \".\" + (Object.keys(dir.modifiers || {}).join('.')))\n}\n\nfunction callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {\n  var fn = dir.def && dir.def[hook];\n  if (fn) {\n    try {\n      fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\n    } catch (e) {\n      handleError(e, vnode.context, (\"directive \" + (dir.name) + \" \" + hook + \" hook\"));\n    }\n  }\n}\n\nvar baseModules = [\n  ref,\n  directives\n];\n\n/*  */\n\nfunction updateAttrs (oldVnode, vnode) {\n  var opts = vnode.componentOptions;\n  if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {\n    return\n  }\n  if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\n    return\n  }\n  var key, cur, old;\n  var elm = vnode.elm;\n  var oldAttrs = oldVnode.data.attrs || {};\n  var attrs = vnode.data.attrs || {};\n  // clone observed objects, as the user probably wants to mutate it\n  if (isDef(attrs.__ob__)) {\n    attrs = vnode.data.attrs = extend({}, attrs);\n  }\n\n  for (key in attrs) {\n    cur = attrs[key];\n    old = oldAttrs[key];\n    if (old !== cur) {\n      setAttr(elm, key, cur, vnode.data.pre);\n    }\n  }\n  // #4391: in IE9, setting type can reset value for input[type=radio]\n  // #6666: IE/Edge forces progress value down to 1 before setting a max\n  /* istanbul ignore if */\n  if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {\n    setAttr(elm, 'value', attrs.value);\n  }\n  for (key in oldAttrs) {\n    if (isUndef(attrs[key])) {\n      if (isXlink(key)) {\n        elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\n      } else if (!isEnumeratedAttr(key)) {\n        elm.removeAttribute(key);\n      }\n    }\n  }\n}\n\nfunction setAttr (el, key, value, isInPre) {\n  if (isInPre || el.tagName.indexOf('-') > -1) {\n    baseSetAttr(el, key, value);\n  } else if (isBooleanAttr(key)) {\n    // set attribute for blank value\n    // e.g. <option disabled>Select one</option>\n    if (isFalsyAttrValue(value)) {\n      el.removeAttribute(key);\n    } else {\n      // technically allowfullscreen is a boolean attribute for <iframe>,\n      // but Flash expects a value of \"true\" when used on <embed> tag\n      value = key === 'allowfullscreen' && el.tagName === 'EMBED'\n        ? 'true'\n        : key;\n      el.setAttribute(key, value);\n    }\n  } else if (isEnumeratedAttr(key)) {\n    el.setAttribute(key, convertEnumeratedValue(key, value));\n  } else if (isXlink(key)) {\n    if (isFalsyAttrValue(value)) {\n      el.removeAttributeNS(xlinkNS, getXlinkProp(key));\n    } else {\n      el.setAttributeNS(xlinkNS, key, value);\n    }\n  } else {\n    baseSetAttr(el, key, value);\n  }\n}\n\nfunction baseSetAttr (el, key, value) {\n  if (isFalsyAttrValue(value)) {\n    el.removeAttribute(key);\n  } else {\n    // #7138: IE10 & 11 fires input event when setting placeholder on\n    // <textarea>... block the first input event and remove the blocker\n    // immediately.\n    /* istanbul ignore if */\n    if (\n      isIE && !isIE9 &&\n      el.tagName === 'TEXTAREA' &&\n      key === 'placeholder' && value !== '' && !el.__ieph\n    ) {\n      var blocker = function (e) {\n        e.stopImmediatePropagation();\n        el.removeEventListener('input', blocker);\n      };\n      el.addEventListener('input', blocker);\n      // $flow-disable-line\n      el.__ieph = true; /* IE placeholder patched */\n    }\n    el.setAttribute(key, value);\n  }\n}\n\nvar attrs = {\n  create: updateAttrs,\n  update: updateAttrs\n};\n\n/*  */\n\nfunction updateClass (oldVnode, vnode) {\n  var el = vnode.elm;\n  var data = vnode.data;\n  var oldData = oldVnode.data;\n  if (\n    isUndef(data.staticClass) &&\n    isUndef(data.class) && (\n      isUndef(oldData) || (\n        isUndef(oldData.staticClass) &&\n        isUndef(oldData.class)\n      )\n    )\n  ) {\n    return\n  }\n\n  var cls = genClassForVnode(vnode);\n\n  // handle transition classes\n  var transitionClass = el._transitionClasses;\n  if (isDef(transitionClass)) {\n    cls = concat(cls, stringifyClass(transitionClass));\n  }\n\n  // set the class\n  if (cls !== el._prevClass) {\n    el.setAttribute('class', cls);\n    el._prevClass = cls;\n  }\n}\n\nvar klass = {\n  create: updateClass,\n  update: updateClass\n};\n\n/*  */\n\n/*  */\n\n/*  */\n\n/*  */\n\n// in some cases, the event used has to be determined at runtime\n// so we used some reserved tokens during compile.\nvar RANGE_TOKEN = '__r';\nvar CHECKBOX_RADIO_TOKEN = '__c';\n\n/*  */\n\n// normalize v-model event tokens that can only be determined at runtime.\n// it's important to place the event as the first in the array because\n// the whole point is ensuring the v-model callback gets called before\n// user-attached handlers.\nfunction normalizeEvents (on) {\n  /* istanbul ignore if */\n  if (isDef(on[RANGE_TOKEN])) {\n    // IE input[type=range] only supports `change` event\n    var event = isIE ? 'change' : 'input';\n    on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);\n    delete on[RANGE_TOKEN];\n  }\n  // This was originally intended to fix #4521 but no longer necessary\n  // after 2.5. Keeping it for backwards compat with generated code from < 2.4\n  /* istanbul ignore if */\n  if (isDef(on[CHECKBOX_RADIO_TOKEN])) {\n    on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);\n    delete on[CHECKBOX_RADIO_TOKEN];\n  }\n}\n\nvar target$1;\n\nfunction createOnceHandler$1 (event, handler, capture) {\n  var _target = target$1; // save current target element in closure\n  return function onceHandler () {\n    var res = handler.apply(null, arguments);\n    if (res !== null) {\n      remove$2(event, onceHandler, capture, _target);\n    }\n  }\n}\n\n// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp\n// implementation and does not fire microtasks in between event propagation, so\n// safe to exclude.\nvar useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);\n\nfunction add$1 (\n  name,\n  handler,\n  capture,\n  passive\n) {\n  // async edge case #6566: inner click event triggers patch, event handler\n  // attached to outer element during patch, and triggered again. This\n  // happens because browsers fire microtask ticks between event propagation.\n  // the solution is simple: we save the timestamp when a handler is attached,\n  // and the handler would only fire if the event passed to it was fired\n  // AFTER it was attached.\n  if (useMicrotaskFix) {\n    var attachedTimestamp = currentFlushTimestamp;\n    var original = handler;\n    handler = original._wrapper = function (e) {\n      if (\n        // no bubbling, should always fire.\n        // this is just a safety net in case event.timeStamp is unreliable in\n        // certain weird environments...\n        e.target === e.currentTarget ||\n        // event is fired after handler attachment\n        e.timeStamp >= attachedTimestamp ||\n        // bail for environments that have buggy event.timeStamp implementations\n        // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState\n        // #9681 QtWebEngine event.timeStamp is negative value\n        e.timeStamp <= 0 ||\n        // #9448 bail if event is fired in another document in a multi-page\n        // electron/nw.js app, since event.timeStamp will be using a different\n        // starting reference\n        e.target.ownerDocument !== document\n      ) {\n        return original.apply(this, arguments)\n      }\n    };\n  }\n  target$1.addEventListener(\n    name,\n    handler,\n    supportsPassive\n      ? { capture: capture, passive: passive }\n      : capture\n  );\n}\n\nfunction remove$2 (\n  name,\n  handler,\n  capture,\n  _target\n) {\n  (_target || target$1).removeEventListener(\n    name,\n    handler._wrapper || handler,\n    capture\n  );\n}\n\nfunction updateDOMListeners (oldVnode, vnode) {\n  if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {\n    return\n  }\n  var on = vnode.data.on || {};\n  var oldOn = oldVnode.data.on || {};\n  target$1 = vnode.elm;\n  normalizeEvents(on);\n  updateListeners(on, oldOn, add$1, remove$2, createOnceHandler$1, vnode.context);\n  target$1 = undefined;\n}\n\nvar events = {\n  create: updateDOMListeners,\n  update: updateDOMListeners\n};\n\n/*  */\n\nvar svgContainer;\n\nfunction updateDOMProps (oldVnode, vnode) {\n  if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {\n    return\n  }\n  var key, cur;\n  var elm = vnode.elm;\n  var oldProps = oldVnode.data.domProps || {};\n  var props = vnode.data.domProps || {};\n  // clone observed objects, as the user probably wants to mutate it\n  if (isDef(props.__ob__)) {\n    props = vnode.data.domProps = extend({}, props);\n  }\n\n  for (key in oldProps) {\n    if (!(key in props)) {\n      elm[key] = '';\n    }\n  }\n\n  for (key in props) {\n    cur = props[key];\n    // ignore children if the node has textContent or innerHTML,\n    // as these will throw away existing DOM nodes and cause removal errors\n    // on subsequent patches (#3360)\n    if (key === 'textContent' || key === 'innerHTML') {\n      if (vnode.children) { vnode.children.length = 0; }\n      if (cur === oldProps[key]) { continue }\n      // #6601 work around Chrome version <= 55 bug where single textNode\n      // replaced by innerHTML/textContent retains its parentNode property\n      if (elm.childNodes.length === 1) {\n        elm.removeChild(elm.childNodes[0]);\n      }\n    }\n\n    if (key === 'value' && elm.tagName !== 'PROGRESS') {\n      // store value as _value as well since\n      // non-string values will be stringified\n      elm._value = cur;\n      // avoid resetting cursor position when value is the same\n      var strCur = isUndef(cur) ? '' : String(cur);\n      if (shouldUpdateValue(elm, strCur)) {\n        elm.value = strCur;\n      }\n    } else if (key === 'innerHTML' && isSVG(elm.tagName) && isUndef(elm.innerHTML)) {\n      // IE doesn't support innerHTML for SVG elements\n      svgContainer = svgContainer || document.createElement('div');\n      svgContainer.innerHTML = \"<svg>\" + cur + \"</svg>\";\n      var svg = svgContainer.firstChild;\n      while (elm.firstChild) {\n        elm.removeChild(elm.firstChild);\n      }\n      while (svg.firstChild) {\n        elm.appendChild(svg.firstChild);\n      }\n    } else if (\n      // skip the update if old and new VDOM state is the same.\n      // `value` is handled separately because the DOM value may be temporarily\n      // out of sync with VDOM state due to focus, composition and modifiers.\n      // This  #4521 by skipping the unnecessary `checked` update.\n      cur !== oldProps[key]\n    ) {\n      // some property updates can throw\n      // e.g. `value` on <progress> w/ non-finite value\n      try {\n        elm[key] = cur;\n      } catch (e) {}\n    }\n  }\n}\n\n// check platforms/web/util/attrs.js acceptValue\n\n\nfunction shouldUpdateValue (elm, checkVal) {\n  return (!elm.composing && (\n    elm.tagName === 'OPTION' ||\n    isNotInFocusAndDirty(elm, checkVal) ||\n    isDirtyWithModifiers(elm, checkVal)\n  ))\n}\n\nfunction isNotInFocusAndDirty (elm, checkVal) {\n  // return true when textbox (.number and .trim) loses focus and its value is\n  // not equal to the updated value\n  var notInFocus = true;\n  // #6157\n  // work around IE bug when accessing document.activeElement in an iframe\n  try { notInFocus = document.activeElement !== elm; } catch (e) {}\n  return notInFocus && elm.value !== checkVal\n}\n\nfunction isDirtyWithModifiers (elm, newVal) {\n  var value = elm.value;\n  var modifiers = elm._vModifiers; // injected by v-model runtime\n  if (isDef(modifiers)) {\n    if (modifiers.number) {\n      return toNumber(value) !== toNumber(newVal)\n    }\n    if (modifiers.trim) {\n      return value.trim() !== newVal.trim()\n    }\n  }\n  return value !== newVal\n}\n\nvar domProps = {\n  create: updateDOMProps,\n  update: updateDOMProps\n};\n\n/*  */\n\nvar parseStyleText = cached(function (cssText) {\n  var res = {};\n  var listDelimiter = /;(?![^(]*\\))/g;\n  var propertyDelimiter = /:(.+)/;\n  cssText.split(listDelimiter).forEach(function (item) {\n    if (item) {\n      var tmp = item.split(propertyDelimiter);\n      tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\n    }\n  });\n  return res\n});\n\n// merge static and dynamic style data on the same vnode\nfunction normalizeStyleData (data) {\n  var style = normalizeStyleBinding(data.style);\n  // static style is pre-processed into an object during compilation\n  // and is always a fresh object, so it's safe to merge into it\n  return data.staticStyle\n    ? extend(data.staticStyle, style)\n    : style\n}\n\n// normalize possible array / string values into Object\nfunction normalizeStyleBinding (bindingStyle) {\n  if (Array.isArray(bindingStyle)) {\n    return toObject(bindingStyle)\n  }\n  if (typeof bindingStyle === 'string') {\n    return parseStyleText(bindingStyle)\n  }\n  return bindingStyle\n}\n\n/**\n * parent component style should be after child's\n * so that parent component's style could override it\n */\nfunction getStyle (vnode, checkChild) {\n  var res = {};\n  var styleData;\n\n  if (checkChild) {\n    var childNode = vnode;\n    while (childNode.componentInstance) {\n      childNode = childNode.componentInstance._vnode;\n      if (\n        childNode && childNode.data &&\n        (styleData = normalizeStyleData(childNode.data))\n      ) {\n        extend(res, styleData);\n      }\n    }\n  }\n\n  if ((styleData = normalizeStyleData(vnode.data))) {\n    extend(res, styleData);\n  }\n\n  var parentNode = vnode;\n  while ((parentNode = parentNode.parent)) {\n    if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {\n      extend(res, styleData);\n    }\n  }\n  return res\n}\n\n/*  */\n\nvar cssVarRE = /^--/;\nvar importantRE = /\\s*!important$/;\nvar setProp = function (el, name, val) {\n  /* istanbul ignore if */\n  if (cssVarRE.test(name)) {\n    el.style.setProperty(name, val);\n  } else if (importantRE.test(val)) {\n    el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');\n  } else {\n    var normalizedName = normalize(name);\n    if (Array.isArray(val)) {\n      // Support values array created by autoprefixer, e.g.\n      // {display: [\"-webkit-box\", \"-ms-flexbox\", \"flex\"]}\n      // Set them one by one, and the browser will only set those it can recognize\n      for (var i = 0, len = val.length; i < len; i++) {\n        el.style[normalizedName] = val[i];\n      }\n    } else {\n      el.style[normalizedName] = val;\n    }\n  }\n};\n\nvar vendorNames = ['Webkit', 'Moz', 'ms'];\n\nvar emptyStyle;\nvar normalize = cached(function (prop) {\n  emptyStyle = emptyStyle || document.createElement('div').style;\n  prop = camelize(prop);\n  if (prop !== 'filter' && (prop in emptyStyle)) {\n    return prop\n  }\n  var capName = prop.charAt(0).toUpperCase() + prop.slice(1);\n  for (var i = 0; i < vendorNames.length; i++) {\n    var name = vendorNames[i] + capName;\n    if (name in emptyStyle) {\n      return name\n    }\n  }\n});\n\nfunction updateStyle (oldVnode, vnode) {\n  var data = vnode.data;\n  var oldData = oldVnode.data;\n\n  if (isUndef(data.staticStyle) && isUndef(data.style) &&\n    isUndef(oldData.staticStyle) && isUndef(oldData.style)\n  ) {\n    return\n  }\n\n  var cur, name;\n  var el = vnode.elm;\n  var oldStaticStyle = oldData.staticStyle;\n  var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};\n\n  // if static style exists, stylebinding already merged into it when doing normalizeStyleData\n  var oldStyle = oldStaticStyle || oldStyleBinding;\n\n  var style = normalizeStyleBinding(vnode.data.style) || {};\n\n  // store normalized style under a different key for next diff\n  // make sure to clone it if it's reactive, since the user likely wants\n  // to mutate it.\n  vnode.data.normalizedStyle = isDef(style.__ob__)\n    ? extend({}, style)\n    : style;\n\n  var newStyle = getStyle(vnode, true);\n\n  for (name in oldStyle) {\n    if (isUndef(newStyle[name])) {\n      setProp(el, name, '');\n    }\n  }\n  for (name in newStyle) {\n    cur = newStyle[name];\n    if (cur !== oldStyle[name]) {\n      // ie9 setting to null has no effect, must use empty string\n      setProp(el, name, cur == null ? '' : cur);\n    }\n  }\n}\n\nvar style = {\n  create: updateStyle,\n  update: updateStyle\n};\n\n/*  */\n\nvar whitespaceRE = /\\s+/;\n\n/**\n * Add class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction addClass (el, cls) {\n  /* istanbul ignore if */\n  if (!cls || !(cls = cls.trim())) {\n    return\n  }\n\n  /* istanbul ignore else */\n  if (el.classList) {\n    if (cls.indexOf(' ') > -1) {\n      cls.split(whitespaceRE).forEach(function (c) { return el.classList.add(c); });\n    } else {\n      el.classList.add(cls);\n    }\n  } else {\n    var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n    if (cur.indexOf(' ' + cls + ' ') < 0) {\n      el.setAttribute('class', (cur + cls).trim());\n    }\n  }\n}\n\n/**\n * Remove class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction removeClass (el, cls) {\n  /* istanbul ignore if */\n  if (!cls || !(cls = cls.trim())) {\n    return\n  }\n\n  /* istanbul ignore else */\n  if (el.classList) {\n    if (cls.indexOf(' ') > -1) {\n      cls.split(whitespaceRE).forEach(function (c) { return el.classList.remove(c); });\n    } else {\n      el.classList.remove(cls);\n    }\n    if (!el.classList.length) {\n      el.removeAttribute('class');\n    }\n  } else {\n    var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n    var tar = ' ' + cls + ' ';\n    while (cur.indexOf(tar) >= 0) {\n      cur = cur.replace(tar, ' ');\n    }\n    cur = cur.trim();\n    if (cur) {\n      el.setAttribute('class', cur);\n    } else {\n      el.removeAttribute('class');\n    }\n  }\n}\n\n/*  */\n\nfunction resolveTransition (def$$1) {\n  if (!def$$1) {\n    return\n  }\n  /* istanbul ignore else */\n  if (typeof def$$1 === 'object') {\n    var res = {};\n    if (def$$1.css !== false) {\n      extend(res, autoCssTransition(def$$1.name || 'v'));\n    }\n    extend(res, def$$1);\n    return res\n  } else if (typeof def$$1 === 'string') {\n    return autoCssTransition(def$$1)\n  }\n}\n\nvar autoCssTransition = cached(function (name) {\n  return {\n    enterClass: (name + \"-enter\"),\n    enterToClass: (name + \"-enter-to\"),\n    enterActiveClass: (name + \"-enter-active\"),\n    leaveClass: (name + \"-leave\"),\n    leaveToClass: (name + \"-leave-to\"),\n    leaveActiveClass: (name + \"-leave-active\")\n  }\n});\n\nvar hasTransition = inBrowser && !isIE9;\nvar TRANSITION = 'transition';\nvar ANIMATION = 'animation';\n\n// Transition property/event sniffing\nvar transitionProp = 'transition';\nvar transitionEndEvent = 'transitionend';\nvar animationProp = 'animation';\nvar animationEndEvent = 'animationend';\nif (hasTransition) {\n  /* istanbul ignore if */\n  if (window.ontransitionend === undefined &&\n    window.onwebkittransitionend !== undefined\n  ) {\n    transitionProp = 'WebkitTransition';\n    transitionEndEvent = 'webkitTransitionEnd';\n  }\n  if (window.onanimationend === undefined &&\n    window.onwebkitanimationend !== undefined\n  ) {\n    animationProp = 'WebkitAnimation';\n    animationEndEvent = 'webkitAnimationEnd';\n  }\n}\n\n// binding to window is necessary to make hot reload work in IE in strict mode\nvar raf = inBrowser\n  ? window.requestAnimationFrame\n    ? window.requestAnimationFrame.bind(window)\n    : setTimeout\n  : /* istanbul ignore next */ function (fn) { return fn(); };\n\nfunction nextFrame (fn) {\n  raf(function () {\n    raf(fn);\n  });\n}\n\nfunction addTransitionClass (el, cls) {\n  var transitionClasses = el._transitionClasses || (el._transitionClasses = []);\n  if (transitionClasses.indexOf(cls) < 0) {\n    transitionClasses.push(cls);\n    addClass(el, cls);\n  }\n}\n\nfunction removeTransitionClass (el, cls) {\n  if (el._transitionClasses) {\n    remove(el._transitionClasses, cls);\n  }\n  removeClass(el, cls);\n}\n\nfunction whenTransitionEnds (\n  el,\n  expectedType,\n  cb\n) {\n  var ref = getTransitionInfo(el, expectedType);\n  var type = ref.type;\n  var timeout = ref.timeout;\n  var propCount = ref.propCount;\n  if (!type) { return cb() }\n  var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;\n  var ended = 0;\n  var end = function () {\n    el.removeEventListener(event, onEnd);\n    cb();\n  };\n  var onEnd = function (e) {\n    if (e.target === el) {\n      if (++ended >= propCount) {\n        end();\n      }\n    }\n  };\n  setTimeout(function () {\n    if (ended < propCount) {\n      end();\n    }\n  }, timeout + 1);\n  el.addEventListener(event, onEnd);\n}\n\nvar transformRE = /\\b(transform|all)(,|$)/;\n\nfunction getTransitionInfo (el, expectedType) {\n  var styles = window.getComputedStyle(el);\n  // JSDOM may return undefined for transition properties\n  var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');\n  var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');\n  var transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n  var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');\n  var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');\n  var animationTimeout = getTimeout(animationDelays, animationDurations);\n\n  var type;\n  var timeout = 0;\n  var propCount = 0;\n  /* istanbul ignore if */\n  if (expectedType === TRANSITION) {\n    if (transitionTimeout > 0) {\n      type = TRANSITION;\n      timeout = transitionTimeout;\n      propCount = transitionDurations.length;\n    }\n  } else if (expectedType === ANIMATION) {\n    if (animationTimeout > 0) {\n      type = ANIMATION;\n      timeout = animationTimeout;\n      propCount = animationDurations.length;\n    }\n  } else {\n    timeout = Math.max(transitionTimeout, animationTimeout);\n    type = timeout > 0\n      ? transitionTimeout > animationTimeout\n        ? TRANSITION\n        : ANIMATION\n      : null;\n    propCount = type\n      ? type === TRANSITION\n        ? transitionDurations.length\n        : animationDurations.length\n      : 0;\n  }\n  var hasTransform =\n    type === TRANSITION &&\n    transformRE.test(styles[transitionProp + 'Property']);\n  return {\n    type: type,\n    timeout: timeout,\n    propCount: propCount,\n    hasTransform: hasTransform\n  }\n}\n\nfunction getTimeout (delays, durations) {\n  /* istanbul ignore next */\n  while (delays.length < durations.length) {\n    delays = delays.concat(delays);\n  }\n\n  return Math.max.apply(null, durations.map(function (d, i) {\n    return toMs(d) + toMs(delays[i])\n  }))\n}\n\n// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers\n// in a locale-dependent way, using a comma instead of a dot.\n// If comma is not replaced with a dot, the input will be rounded down (i.e. acting\n// as a floor function) causing unexpected behaviors\nfunction toMs (s) {\n  return Number(s.slice(0, -1).replace(',', '.')) * 1000\n}\n\n/*  */\n\nfunction enter (vnode, toggleDisplay) {\n  var el = vnode.elm;\n\n  // call leave callback now\n  if (isDef(el._leaveCb)) {\n    el._leaveCb.cancelled = true;\n    el._leaveCb();\n  }\n\n  var data = resolveTransition(vnode.data.transition);\n  if (isUndef(data)) {\n    return\n  }\n\n  /* istanbul ignore if */\n  if (isDef(el._enterCb) || el.nodeType !== 1) {\n    return\n  }\n\n  var css = data.css;\n  var type = data.type;\n  var enterClass = data.enterClass;\n  var enterToClass = data.enterToClass;\n  var enterActiveClass = data.enterActiveClass;\n  var appearClass = data.appearClass;\n  var appearToClass = data.appearToClass;\n  var appearActiveClass = data.appearActiveClass;\n  var beforeEnter = data.beforeEnter;\n  var enter = data.enter;\n  var afterEnter = data.afterEnter;\n  var enterCancelled = data.enterCancelled;\n  var beforeAppear = data.beforeAppear;\n  var appear = data.appear;\n  var afterAppear = data.afterAppear;\n  var appearCancelled = data.appearCancelled;\n  var duration = data.duration;\n\n  // activeInstance will always be the <transition> component managing this\n  // transition. One edge case to check is when the <transition> is placed\n  // as the root node of a child component. In that case we need to check\n  // <transition>'s parent for appear check.\n  var context = activeInstance;\n  var transitionNode = activeInstance.$vnode;\n  while (transitionNode && transitionNode.parent) {\n    context = transitionNode.context;\n    transitionNode = transitionNode.parent;\n  }\n\n  var isAppear = !context._isMounted || !vnode.isRootInsert;\n\n  if (isAppear && !appear && appear !== '') {\n    return\n  }\n\n  var startClass = isAppear && appearClass\n    ? appearClass\n    : enterClass;\n  var activeClass = isAppear && appearActiveClass\n    ? appearActiveClass\n    : enterActiveClass;\n  var toClass = isAppear && appearToClass\n    ? appearToClass\n    : enterToClass;\n\n  var beforeEnterHook = isAppear\n    ? (beforeAppear || beforeEnter)\n    : beforeEnter;\n  var enterHook = isAppear\n    ? (typeof appear === 'function' ? appear : enter)\n    : enter;\n  var afterEnterHook = isAppear\n    ? (afterAppear || afterEnter)\n    : afterEnter;\n  var enterCancelledHook = isAppear\n    ? (appearCancelled || enterCancelled)\n    : enterCancelled;\n\n  var explicitEnterDuration = toNumber(\n    isObject(duration)\n      ? duration.enter\n      : duration\n  );\n\n  if ( true && explicitEnterDuration != null) {\n    checkDuration(explicitEnterDuration, 'enter', vnode);\n  }\n\n  var expectsCSS = css !== false && !isIE9;\n  var userWantsControl = getHookArgumentsLength(enterHook);\n\n  var cb = el._enterCb = once(function () {\n    if (expectsCSS) {\n      removeTransitionClass(el, toClass);\n      removeTransitionClass(el, activeClass);\n    }\n    if (cb.cancelled) {\n      if (expectsCSS) {\n        removeTransitionClass(el, startClass);\n      }\n      enterCancelledHook && enterCancelledHook(el);\n    } else {\n      afterEnterHook && afterEnterHook(el);\n    }\n    el._enterCb = null;\n  });\n\n  if (!vnode.data.show) {\n    // remove pending leave element on enter by injecting an insert hook\n    mergeVNodeHook(vnode, 'insert', function () {\n      var parent = el.parentNode;\n      var pendingNode = parent && parent._pending && parent._pending[vnode.key];\n      if (pendingNode &&\n        pendingNode.tag === vnode.tag &&\n        pendingNode.elm._leaveCb\n      ) {\n        pendingNode.elm._leaveCb();\n      }\n      enterHook && enterHook(el, cb);\n    });\n  }\n\n  // start enter transition\n  beforeEnterHook && beforeEnterHook(el);\n  if (expectsCSS) {\n    addTransitionClass(el, startClass);\n    addTransitionClass(el, activeClass);\n    nextFrame(function () {\n      removeTransitionClass(el, startClass);\n      if (!cb.cancelled) {\n        addTransitionClass(el, toClass);\n        if (!userWantsControl) {\n          if (isValidDuration(explicitEnterDuration)) {\n            setTimeout(cb, explicitEnterDuration);\n          } else {\n            whenTransitionEnds(el, type, cb);\n          }\n        }\n      }\n    });\n  }\n\n  if (vnode.data.show) {\n    toggleDisplay && toggleDisplay();\n    enterHook && enterHook(el, cb);\n  }\n\n  if (!expectsCSS && !userWantsControl) {\n    cb();\n  }\n}\n\nfunction leave (vnode, rm) {\n  var el = vnode.elm;\n\n  // call enter callback now\n  if (isDef(el._enterCb)) {\n    el._enterCb.cancelled = true;\n    el._enterCb();\n  }\n\n  var data = resolveTransition(vnode.data.transition);\n  if (isUndef(data) || el.nodeType !== 1) {\n    return rm()\n  }\n\n  /* istanbul ignore if */\n  if (isDef(el._leaveCb)) {\n    return\n  }\n\n  var css = data.css;\n  var type = data.type;\n  var leaveClass = data.leaveClass;\n  var leaveToClass = data.leaveToClass;\n  var leaveActiveClass = data.leaveActiveClass;\n  var beforeLeave = data.beforeLeave;\n  var leave = data.leave;\n  var afterLeave = data.afterLeave;\n  var leaveCancelled = data.leaveCancelled;\n  var delayLeave = data.delayLeave;\n  var duration = data.duration;\n\n  var expectsCSS = css !== false && !isIE9;\n  var userWantsControl = getHookArgumentsLength(leave);\n\n  var explicitLeaveDuration = toNumber(\n    isObject(duration)\n      ? duration.leave\n      : duration\n  );\n\n  if ( true && isDef(explicitLeaveDuration)) {\n    checkDuration(explicitLeaveDuration, 'leave', vnode);\n  }\n\n  var cb = el._leaveCb = once(function () {\n    if (el.parentNode && el.parentNode._pending) {\n      el.parentNode._pending[vnode.key] = null;\n    }\n    if (expectsCSS) {\n      removeTransitionClass(el, leaveToClass);\n      removeTransitionClass(el, leaveActiveClass);\n    }\n    if (cb.cancelled) {\n      if (expectsCSS) {\n        removeTransitionClass(el, leaveClass);\n      }\n      leaveCancelled && leaveCancelled(el);\n    } else {\n      rm();\n      afterLeave && afterLeave(el);\n    }\n    el._leaveCb = null;\n  });\n\n  if (delayLeave) {\n    delayLeave(performLeave);\n  } else {\n    performLeave();\n  }\n\n  function performLeave () {\n    // the delayed leave may have already been cancelled\n    if (cb.cancelled) {\n      return\n    }\n    // record leaving element\n    if (!vnode.data.show && el.parentNode) {\n      (el.parentNode._pending || (el.parentNode._pending = {}))[(vnode.key)] = vnode;\n    }\n    beforeLeave && beforeLeave(el);\n    if (expectsCSS) {\n      addTransitionClass(el, leaveClass);\n      addTransitionClass(el, leaveActiveClass);\n      nextFrame(function () {\n        removeTransitionClass(el, leaveClass);\n        if (!cb.cancelled) {\n          addTransitionClass(el, leaveToClass);\n          if (!userWantsControl) {\n            if (isValidDuration(explicitLeaveDuration)) {\n              setTimeout(cb, explicitLeaveDuration);\n            } else {\n              whenTransitionEnds(el, type, cb);\n            }\n          }\n        }\n      });\n    }\n    leave && leave(el, cb);\n    if (!expectsCSS && !userWantsControl) {\n      cb();\n    }\n  }\n}\n\n// only used in dev mode\nfunction checkDuration (val, name, vnode) {\n  if (typeof val !== 'number') {\n    warn(\n      \"<transition> explicit \" + name + \" duration is not a valid number - \" +\n      \"got \" + (JSON.stringify(val)) + \".\",\n      vnode.context\n    );\n  } else if (isNaN(val)) {\n    warn(\n      \"<transition> explicit \" + name + \" duration is NaN - \" +\n      'the duration expression might be incorrect.',\n      vnode.context\n    );\n  }\n}\n\nfunction isValidDuration (val) {\n  return typeof val === 'number' && !isNaN(val)\n}\n\n/**\n * Normalize a transition hook's argument length. The hook may be:\n * - a merged hook (invoker) with the original in .fns\n * - a wrapped component method (check ._length)\n * - a plain function (.length)\n */\nfunction getHookArgumentsLength (fn) {\n  if (isUndef(fn)) {\n    return false\n  }\n  var invokerFns = fn.fns;\n  if (isDef(invokerFns)) {\n    // invoker\n    return getHookArgumentsLength(\n      Array.isArray(invokerFns)\n        ? invokerFns[0]\n        : invokerFns\n    )\n  } else {\n    return (fn._length || fn.length) > 1\n  }\n}\n\nfunction _enter (_, vnode) {\n  if (vnode.data.show !== true) {\n    enter(vnode);\n  }\n}\n\nvar transition = inBrowser ? {\n  create: _enter,\n  activate: _enter,\n  remove: function remove$$1 (vnode, rm) {\n    /* istanbul ignore else */\n    if (vnode.data.show !== true) {\n      leave(vnode, rm);\n    } else {\n      rm();\n    }\n  }\n} : {};\n\nvar platformModules = [\n  attrs,\n  klass,\n  events,\n  domProps,\n  style,\n  transition\n];\n\n/*  */\n\n// the directive module should be applied last, after all\n// built-in modules have been applied.\nvar modules = platformModules.concat(baseModules);\n\nvar patch = createPatchFunction({ nodeOps: nodeOps, modules: modules });\n\n/**\n * Not type checking this file because flow doesn't like attaching\n * properties to Elements.\n */\n\n/* istanbul ignore if */\nif (isIE9) {\n  // http://www.matts411.com/post/internet-explorer-9-oninput/\n  document.addEventListener('selectionchange', function () {\n    var el = document.activeElement;\n    if (el && el.vmodel) {\n      trigger(el, 'input');\n    }\n  });\n}\n\nvar directive = {\n  inserted: function inserted (el, binding, vnode, oldVnode) {\n    if (vnode.tag === 'select') {\n      // #6903\n      if (oldVnode.elm && !oldVnode.elm._vOptions) {\n        mergeVNodeHook(vnode, 'postpatch', function () {\n          directive.componentUpdated(el, binding, vnode);\n        });\n      } else {\n        setSelected(el, binding, vnode.context);\n      }\n      el._vOptions = [].map.call(el.options, getValue);\n    } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {\n      el._vModifiers = binding.modifiers;\n      if (!binding.modifiers.lazy) {\n        el.addEventListener('compositionstart', onCompositionStart);\n        el.addEventListener('compositionend', onCompositionEnd);\n        // Safari < 10.2 & UIWebView doesn't fire compositionend when\n        // switching focus before confirming composition choice\n        // this also fixes the issue where some browsers e.g. iOS Chrome\n        // fires \"change\" instead of \"input\" on autocomplete.\n        el.addEventListener('change', onCompositionEnd);\n        /* istanbul ignore if */\n        if (isIE9) {\n          el.vmodel = true;\n        }\n      }\n    }\n  },\n\n  componentUpdated: function componentUpdated (el, binding, vnode) {\n    if (vnode.tag === 'select') {\n      setSelected(el, binding, vnode.context);\n      // in case the options rendered by v-for have changed,\n      // it's possible that the value is out-of-sync with the rendered options.\n      // detect such cases and filter out values that no longer has a matching\n      // option in the DOM.\n      var prevOptions = el._vOptions;\n      var curOptions = el._vOptions = [].map.call(el.options, getValue);\n      if (curOptions.some(function (o, i) { return !looseEqual(o, prevOptions[i]); })) {\n        // trigger change event if\n        // no matching option found for at least one value\n        var needReset = el.multiple\n          ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions); })\n          : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions);\n        if (needReset) {\n          trigger(el, 'change');\n        }\n      }\n    }\n  }\n};\n\nfunction setSelected (el, binding, vm) {\n  actuallySetSelected(el, binding, vm);\n  /* istanbul ignore if */\n  if (isIE || isEdge) {\n    setTimeout(function () {\n      actuallySetSelected(el, binding, vm);\n    }, 0);\n  }\n}\n\nfunction actuallySetSelected (el, binding, vm) {\n  var value = binding.value;\n  var isMultiple = el.multiple;\n  if (isMultiple && !Array.isArray(value)) {\n     true && warn(\n      \"<select multiple v-model=\\\"\" + (binding.expression) + \"\\\"> \" +\n      \"expects an Array value for its binding, but got \" + (Object.prototype.toString.call(value).slice(8, -1)),\n      vm\n    );\n    return\n  }\n  var selected, option;\n  for (var i = 0, l = el.options.length; i < l; i++) {\n    option = el.options[i];\n    if (isMultiple) {\n      selected = looseIndexOf(value, getValue(option)) > -1;\n      if (option.selected !== selected) {\n        option.selected = selected;\n      }\n    } else {\n      if (looseEqual(getValue(option), value)) {\n        if (el.selectedIndex !== i) {\n          el.selectedIndex = i;\n        }\n        return\n      }\n    }\n  }\n  if (!isMultiple) {\n    el.selectedIndex = -1;\n  }\n}\n\nfunction hasNoMatchingOption (value, options) {\n  return options.every(function (o) { return !looseEqual(o, value); })\n}\n\nfunction getValue (option) {\n  return '_value' in option\n    ? option._value\n    : option.value\n}\n\nfunction onCompositionStart (e) {\n  e.target.composing = true;\n}\n\nfunction onCompositionEnd (e) {\n  // prevent triggering an input event for no reason\n  if (!e.target.composing) { return }\n  e.target.composing = false;\n  trigger(e.target, 'input');\n}\n\nfunction trigger (el, type) {\n  var e = document.createEvent('HTMLEvents');\n  e.initEvent(type, true, true);\n  el.dispatchEvent(e);\n}\n\n/*  */\n\n// recursively search for possible transition defined inside the component root\nfunction locateNode (vnode) {\n  return vnode.componentInstance && (!vnode.data || !vnode.data.transition)\n    ? locateNode(vnode.componentInstance._vnode)\n    : vnode\n}\n\nvar show = {\n  bind: function bind (el, ref, vnode) {\n    var value = ref.value;\n\n    vnode = locateNode(vnode);\n    var transition$$1 = vnode.data && vnode.data.transition;\n    var originalDisplay = el.__vOriginalDisplay =\n      el.style.display === 'none' ? '' : el.style.display;\n    if (value && transition$$1) {\n      vnode.data.show = true;\n      enter(vnode, function () {\n        el.style.display = originalDisplay;\n      });\n    } else {\n      el.style.display = value ? originalDisplay : 'none';\n    }\n  },\n\n  update: function update (el, ref, vnode) {\n    var value = ref.value;\n    var oldValue = ref.oldValue;\n\n    /* istanbul ignore if */\n    if (!value === !oldValue) { return }\n    vnode = locateNode(vnode);\n    var transition$$1 = vnode.data && vnode.data.transition;\n    if (transition$$1) {\n      vnode.data.show = true;\n      if (value) {\n        enter(vnode, function () {\n          el.style.display = el.__vOriginalDisplay;\n        });\n      } else {\n        leave(vnode, function () {\n          el.style.display = 'none';\n        });\n      }\n    } else {\n      el.style.display = value ? el.__vOriginalDisplay : 'none';\n    }\n  },\n\n  unbind: function unbind (\n    el,\n    binding,\n    vnode,\n    oldVnode,\n    isDestroy\n  ) {\n    if (!isDestroy) {\n      el.style.display = el.__vOriginalDisplay;\n    }\n  }\n};\n\nvar platformDirectives = {\n  model: directive,\n  show: show\n};\n\n/*  */\n\nvar transitionProps = {\n  name: String,\n  appear: Boolean,\n  css: Boolean,\n  mode: String,\n  type: String,\n  enterClass: String,\n  leaveClass: String,\n  enterToClass: String,\n  leaveToClass: String,\n  enterActiveClass: String,\n  leaveActiveClass: String,\n  appearClass: String,\n  appearActiveClass: String,\n  appearToClass: String,\n  duration: [Number, String, Object]\n};\n\n// in case the child is also an abstract component, e.g. <keep-alive>\n// we want to recursively retrieve the real component to be rendered\nfunction getRealChild (vnode) {\n  var compOptions = vnode && vnode.componentOptions;\n  if (compOptions && compOptions.Ctor.options.abstract) {\n    return getRealChild(getFirstComponentChild(compOptions.children))\n  } else {\n    return vnode\n  }\n}\n\nfunction extractTransitionData (comp) {\n  var data = {};\n  var options = comp.$options;\n  // props\n  for (var key in options.propsData) {\n    data[key] = comp[key];\n  }\n  // events.\n  // extract listeners and pass them directly to the transition methods\n  var listeners = options._parentListeners;\n  for (var key$1 in listeners) {\n    data[camelize(key$1)] = listeners[key$1];\n  }\n  return data\n}\n\nfunction placeholder (h, rawChild) {\n  if (/\\d-keep-alive$/.test(rawChild.tag)) {\n    return h('keep-alive', {\n      props: rawChild.componentOptions.propsData\n    })\n  }\n}\n\nfunction hasParentTransition (vnode) {\n  while ((vnode = vnode.parent)) {\n    if (vnode.data.transition) {\n      return true\n    }\n  }\n}\n\nfunction isSameChild (child, oldChild) {\n  return oldChild.key === child.key && oldChild.tag === child.tag\n}\n\nvar isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };\n\nvar isVShowDirective = function (d) { return d.name === 'show'; };\n\nvar Transition = {\n  name: 'transition',\n  props: transitionProps,\n  abstract: true,\n\n  render: function render (h) {\n    var this$1 = this;\n\n    var children = this.$slots.default;\n    if (!children) {\n      return\n    }\n\n    // filter out text nodes (possible whitespaces)\n    children = children.filter(isNotTextNode);\n    /* istanbul ignore if */\n    if (!children.length) {\n      return\n    }\n\n    // warn multiple elements\n    if ( true && children.length > 1) {\n      warn(\n        '<transition> can only be used on a single element. Use ' +\n        '<transition-group> for lists.',\n        this.$parent\n      );\n    }\n\n    var mode = this.mode;\n\n    // warn invalid mode\n    if ( true &&\n      mode && mode !== 'in-out' && mode !== 'out-in'\n    ) {\n      warn(\n        'invalid <transition> mode: ' + mode,\n        this.$parent\n      );\n    }\n\n    var rawChild = children[0];\n\n    // if this is a component root node and the component's\n    // parent container node also has transition, skip.\n    if (hasParentTransition(this.$vnode)) {\n      return rawChild\n    }\n\n    // apply transition data to child\n    // use getRealChild() to ignore abstract components e.g. keep-alive\n    var child = getRealChild(rawChild);\n    /* istanbul ignore if */\n    if (!child) {\n      return rawChild\n    }\n\n    if (this._leaving) {\n      return placeholder(h, rawChild)\n    }\n\n    // ensure a key that is unique to the vnode type and to this transition\n    // component instance. This key will be used to remove pending leaving nodes\n    // during entering.\n    var id = \"__transition-\" + (this._uid) + \"-\";\n    child.key = child.key == null\n      ? child.isComment\n        ? id + 'comment'\n        : id + child.tag\n      : isPrimitive(child.key)\n        ? (String(child.key).indexOf(id) === 0 ? child.key : id + child.key)\n        : child.key;\n\n    var data = (child.data || (child.data = {})).transition = extractTransitionData(this);\n    var oldRawChild = this._vnode;\n    var oldChild = getRealChild(oldRawChild);\n\n    // mark v-show\n    // so that the transition module can hand over the control to the directive\n    if (child.data.directives && child.data.directives.some(isVShowDirective)) {\n      child.data.show = true;\n    }\n\n    if (\n      oldChild &&\n      oldChild.data &&\n      !isSameChild(child, oldChild) &&\n      !isAsyncPlaceholder(oldChild) &&\n      // #6687 component root is a comment node\n      !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)\n    ) {\n      // replace old child transition data with fresh one\n      // important for dynamic transitions!\n      var oldData = oldChild.data.transition = extend({}, data);\n      // handle transition mode\n      if (mode === 'out-in') {\n        // return placeholder node and queue update when leave finishes\n        this._leaving = true;\n        mergeVNodeHook(oldData, 'afterLeave', function () {\n          this$1._leaving = false;\n          this$1.$forceUpdate();\n        });\n        return placeholder(h, rawChild)\n      } else if (mode === 'in-out') {\n        if (isAsyncPlaceholder(child)) {\n          return oldRawChild\n        }\n        var delayedLeave;\n        var performLeave = function () { delayedLeave(); };\n        mergeVNodeHook(data, 'afterEnter', performLeave);\n        mergeVNodeHook(data, 'enterCancelled', performLeave);\n        mergeVNodeHook(oldData, 'delayLeave', function (leave) { delayedLeave = leave; });\n      }\n    }\n\n    return rawChild\n  }\n};\n\n/*  */\n\nvar props = extend({\n  tag: String,\n  moveClass: String\n}, transitionProps);\n\ndelete props.mode;\n\nvar TransitionGroup = {\n  props: props,\n\n  beforeMount: function beforeMount () {\n    var this$1 = this;\n\n    var update = this._update;\n    this._update = function (vnode, hydrating) {\n      var restoreActiveInstance = setActiveInstance(this$1);\n      // force removing pass\n      this$1.__patch__(\n        this$1._vnode,\n        this$1.kept,\n        false, // hydrating\n        true // removeOnly (!important, avoids unnecessary moves)\n      );\n      this$1._vnode = this$1.kept;\n      restoreActiveInstance();\n      update.call(this$1, vnode, hydrating);\n    };\n  },\n\n  render: function render (h) {\n    var tag = this.tag || this.$vnode.data.tag || 'span';\n    var map = Object.create(null);\n    var prevChildren = this.prevChildren = this.children;\n    var rawChildren = this.$slots.default || [];\n    var children = this.children = [];\n    var transitionData = extractTransitionData(this);\n\n    for (var i = 0; i < rawChildren.length; i++) {\n      var c = rawChildren[i];\n      if (c.tag) {\n        if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {\n          children.push(c);\n          map[c.key] = c\n          ;(c.data || (c.data = {})).transition = transitionData;\n        } else if (true) {\n          var opts = c.componentOptions;\n          var name = opts ? (opts.Ctor.options.name || opts.tag || '') : c.tag;\n          warn((\"<transition-group> children must be keyed: <\" + name + \">\"));\n        }\n      }\n    }\n\n    if (prevChildren) {\n      var kept = [];\n      var removed = [];\n      for (var i$1 = 0; i$1 < prevChildren.length; i$1++) {\n        var c$1 = prevChildren[i$1];\n        c$1.data.transition = transitionData;\n        c$1.data.pos = c$1.elm.getBoundingClientRect();\n        if (map[c$1.key]) {\n          kept.push(c$1);\n        } else {\n          removed.push(c$1);\n        }\n      }\n      this.kept = h(tag, null, kept);\n      this.removed = removed;\n    }\n\n    return h(tag, null, children)\n  },\n\n  updated: function updated () {\n    var children = this.prevChildren;\n    var moveClass = this.moveClass || ((this.name || 'v') + '-move');\n    if (!children.length || !this.hasMove(children[0].elm, moveClass)) {\n      return\n    }\n\n    // we divide the work into three loops to avoid mixing DOM reads and writes\n    // in each iteration - which helps prevent layout thrashing.\n    children.forEach(callPendingCbs);\n    children.forEach(recordPosition);\n    children.forEach(applyTranslation);\n\n    // force reflow to put everything in position\n    // assign to this to avoid being removed in tree-shaking\n    // $flow-disable-line\n    this._reflow = document.body.offsetHeight;\n\n    children.forEach(function (c) {\n      if (c.data.moved) {\n        var el = c.elm;\n        var s = el.style;\n        addTransitionClass(el, moveClass);\n        s.transform = s.WebkitTransform = s.transitionDuration = '';\n        el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) {\n          if (e && e.target !== el) {\n            return\n          }\n          if (!e || /transform$/.test(e.propertyName)) {\n            el.removeEventListener(transitionEndEvent, cb);\n            el._moveCb = null;\n            removeTransitionClass(el, moveClass);\n          }\n        });\n      }\n    });\n  },\n\n  methods: {\n    hasMove: function hasMove (el, moveClass) {\n      /* istanbul ignore if */\n      if (!hasTransition) {\n        return false\n      }\n      /* istanbul ignore if */\n      if (this._hasMove) {\n        return this._hasMove\n      }\n      // Detect whether an element with the move class applied has\n      // CSS transitions. Since the element may be inside an entering\n      // transition at this very moment, we make a clone of it and remove\n      // all other transition classes applied to ensure only the move class\n      // is applied.\n      var clone = el.cloneNode();\n      if (el._transitionClasses) {\n        el._transitionClasses.forEach(function (cls) { removeClass(clone, cls); });\n      }\n      addClass(clone, moveClass);\n      clone.style.display = 'none';\n      this.$el.appendChild(clone);\n      var info = getTransitionInfo(clone);\n      this.$el.removeChild(clone);\n      return (this._hasMove = info.hasTransform)\n    }\n  }\n};\n\nfunction callPendingCbs (c) {\n  /* istanbul ignore if */\n  if (c.elm._moveCb) {\n    c.elm._moveCb();\n  }\n  /* istanbul ignore if */\n  if (c.elm._enterCb) {\n    c.elm._enterCb();\n  }\n}\n\nfunction recordPosition (c) {\n  c.data.newPos = c.elm.getBoundingClientRect();\n}\n\nfunction applyTranslation (c) {\n  var oldPos = c.data.pos;\n  var newPos = c.data.newPos;\n  var dx = oldPos.left - newPos.left;\n  var dy = oldPos.top - newPos.top;\n  if (dx || dy) {\n    c.data.moved = true;\n    var s = c.elm.style;\n    s.transform = s.WebkitTransform = \"translate(\" + dx + \"px,\" + dy + \"px)\";\n    s.transitionDuration = '0s';\n  }\n}\n\nvar platformComponents = {\n  Transition: Transition,\n  TransitionGroup: TransitionGroup\n};\n\n/*  */\n\n// install platform specific utils\nVue.config.mustUseProp = mustUseProp;\nVue.config.isReservedTag = isReservedTag;\nVue.config.isReservedAttr = isReservedAttr;\nVue.config.getTagNamespace = getTagNamespace;\nVue.config.isUnknownElement = isUnknownElement;\n\n// install platform runtime directives & components\nextend(Vue.options.directives, platformDirectives);\nextend(Vue.options.components, platformComponents);\n\n// install platform patch function\nVue.prototype.__patch__ = inBrowser ? patch : noop;\n\n// public mount method\nVue.prototype.$mount = function (\n  el,\n  hydrating\n) {\n  el = el && inBrowser ? query(el) : undefined;\n  return mountComponent(this, el, hydrating)\n};\n\n// devtools global hook\n/* istanbul ignore next */\nif (inBrowser) {\n  setTimeout(function () {\n    if (config.devtools) {\n      if (devtools) {\n        devtools.emit('init', Vue);\n      } else if (\n        true\n      ) {\n        console[console.info ? 'info' : 'log'](\n          'Download the Vue Devtools extension for a better development experience:\\n' +\n          'https://github.com/vuejs/vue-devtools'\n        );\n      }\n    }\n    if ( true &&\n      config.productionTip !== false &&\n      typeof console !== 'undefined'\n    ) {\n      console[console.info ? 'info' : 'log'](\n        \"You are running Vue in development mode.\\n\" +\n        \"Make sure to turn on production mode when deploying for production.\\n\" +\n        \"See more tips at https://vuejs.org/guide/deployment.html\"\n      );\n    }\n  }, 0);\n}\n\n/*  */\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Vue);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\"), __webpack_require__(/*! ./../../timers-browserify/main.js */ \"./node_modules/timers-browserify/main.js\").setImmediate))\n\n//# sourceURL=webpack:///./node_modules/vue/dist/vue.runtime.esm.js?");

/***/ }),

/***/ "./node_modules/webpack/buildin/global.js":
/*!***********************************!*\
  !*** (webpack)/buildin/global.js ***!
  \***********************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n//# sourceURL=webpack:///(webpack)/buildin/global.js?");

/***/ }),

/***/ 2:
/*!**********************************************************************************!*\
  !*** multi ./assets/src/mockups/js/main.js ./assets/src/mockups/scss/_main.scss ***!
  \**********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("__webpack_require__(/*! ./assets/src/mockups/js/main.js */\"./assets/src/mockups/js/main.js\");\nmodule.exports = __webpack_require__(/*! ./assets/src/mockups/scss/_main.scss */\"./assets/src/mockups/scss/_main.scss\");\n\n\n//# sourceURL=webpack:///multi_./assets/src/mockups/js/main.js_./assets/src/mockups/scss/_main.scss?");

/***/ })

/******/ });